[
  {
    "path": ".coveragerc",
    "content": "[run]\nomit =\n     ./src/aup/Proposer/spearmint/*\n     ./src/aup/Proposer/hyperopt/*\n     ./src/aup/Proposer/eas/*\n     ./src/aup/Proposer/hpbandster/*\n     ./src/aup/Proposer/EASProposer.py\n     ./src/aup/setupdb/reset.py\n     ./src/aup/visualize.py\n     ./src/aup/EE/Resource/AWSResourceManager.py\n     ./src/aup/init.py\n     */__main__.py\n     */__init__.py\n     ./src/aup/profiler/*\n     ./src/aup/RestAPI/*\n     ./src/aup/dashboard/*\n     ./src/aup/Proposer/SpearmintProposer.py\n     ./src/aup/Proposer/BOHBProposer.py\n     ./src/aup/compression/torch/pruning/*\n\n[report]\nexclude_lines =\n    pragma: no cover\n    flags\n    def main\n    if __name__ == \"__main__\"\n    @click\n    raise NotImplementedError\n\n"
  },
  {
    "path": ".dockerignore",
    "content": "docs\nExamples/2d*\nExamples/dlconvert_examples/Convert*\nExamples/dlconvert_examples/Tested*\nExamples/demo\nExamples/cai_eas\nExamples/decorator_example\nExamples/hpo_mnist\nExamples/job*\nExamples/profiler*\nExamples/tf*\nbuild\ndist"
  },
  {
    "path": ".gitignore",
    "content": "Examples/demo/auto.py\ntestenv/\n.aup/\n.idea/\n*~\n*.pkl\ntests/EE/jobs/\ntests/data/jobs/\ntests/EE/Resource/data\n.vscode/\nanalysis.html\nR-src/*.tar.gz\nR-src/R-src.Rproj\n\n# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packaging\n.Python\nbuild/\ndevelop-eggs/\ndist/\ndownloads/\neggs/\n.eggs/\nlib64/\nparts/\nsdist/\nvar/\nwheels/\n*.egg-info/\n.installed.cfg\n*.egg\nMANIFEST\n\n# PyInstaller\n#  Usually these files are written by a python script from a template\n#  before PyInstaller builds the exe, so as to inject date/other infos into it.\n*.manifest\n*.spec\n\n# Installer logs\npip-log.txt\npip-delete-this-directory.txt\n\n# Unit test / coverage reports\nhtmlcov/\n.tox/\n.coverage\n.coverage.*\n.cache\nnosetests.xml\ncoverage.xml\n*.cover\n.hypothesis/\n.pytest_cache/\n\n# Translations\n*.mo\n*.pot\n\n# Django stuff:\n*.log\nlocal_settings.py\ndb.sqlite3\n\n# Flask stuff:\ninstance/\n.webassets-cache\n\n# Scrapy stuff:\n.scrapy\n\n# Sphinx documentation\ndocs/_build/\n\n# PyBuilder\ntarget/\n\n# Jupyter Notebook\n.ipynb_checkpoints\n\n# pyenv\n.python-version\n\n# celery beat schedule file\ncelerybeat-schedule\n\n# SageMath parsed files\n*.sage.py\n\n# Environments\n.env\n.venv\nenv/\nvenv/\nENV/\nenv.bak/\nvenv.bak/\n\n# Spyder project settings\n.spyderproject\n.spyproject\n\n# Rope project settings\n.ropeproject\n\n# mkdocs documentation\n/site\n\n# mypy\n.mypy_cache/\n\n# OS files\n.DS_Store\n.Rproj.user\n\nanalysis_test\njobs\ntests/mnist_compressed.pth\ndashboard_logs"
  },
  {
    "path": ".travis.yml",
    "content": "git:\n  depth: false\n  quiet: true\nbranches: \n  only:\n  - master\n  - release\nlanguage: python\npython:\n- '3.7'\nenv:\n  global:\n  - secure: JbuCMpFomW4Yu+sMaBBvv7Jj1JyiQcCQAW7bhdJDil+YUdWEJmTjkF2pKwTQS5w6FUhZIHJ0cy3aJZibSrM2+YpAe3B8HMeLXAaYz9JKbC6Sp0KGr646YqoBNNP+wwrzwzJTPoV7YarViULFPYnUN8rcpp0ypaD9RrtqSN/IKUgxCeTNNcwJOLIr0SLqtmTgT2F2HzCbOkv2g84FqfCC8m2ISFyUgt8FqUD8bRfov++oHfiwSUDZHJaPkn1/NUG3qxrM85B6cC+iZH7MiudP2LF+frBJUtq4bimmjCDuQXX4c224LQC8hnG46sZGtH1i9PGp/wxdnO9gxDa+0ZIIbs86Uy6LrJptwZwWr/W4boian1JTLT8P6fPxuwDFejZwPVkyBGV1GF29pvVJ+4hRnJAKoUA/hg5IrEByXdMknkKh6yiMynmfNGEgCkAcqVPEcQie6u/nbLPqg0m3Pjs4GElEd0wIdqo9GBmK4q8FJGv05k98JX27Tm5gcwIps6qA5lPZoahOdy7GiBZFWdTfbgeah7tNjIqENbMhNFTS9Y1qy9gpgFZl8x9e0liF9OuTyTVlAmsHs9z1huuj8Bb6Eqbr8fvnVqAN9iHIBUWR7uGLeL4zwKmQZ5xiexba9LdnHuiaZjHzdzgA5SnVqXy/pabgCfoZ+wNiWcKu76mCjGU=\n  jobs:\n  - TF2TEST=1\ninstall:\n- pip install -r requirements.txt\n- pip install -r tests/dlconvert/dlconvert_requirements.txt \n- python setup.py install\n- docs/prepare.sh\n- tests/dlconvert/data/prepare.sh\nscript:\n- pytest --cov-report=xml --cov=src/aup tests\nafter_success:\n- codecov\ndeploy:\n  provider: pypi\n  user: \"__token__\"\n  password: $PYPITOKEN\n  on:\n    branch: release\n  distributions: \"sdist bdist_wheel\"\n  skip_existing: true\nafter_deploy:\n- \"./publish.sh\"\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and maintainers pledge to making participation in our project and\nour community a harassment-free experience for everyone, regardless of age, body\nsize, disability, ethnicity, sex characteristics, gender identity and expression,\nlevel of experience, education, socio-economic status, nationality, personal\nappearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment\ninclude:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or\n advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic\n address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a\n professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable\nbehavior and are expected to take appropriate and fair corrective action in\nresponse to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or\nreject comments, commits, code, wiki edits, issues, and other contributions\nthat are not aligned to this Code of Conduct, or to ban temporarily or\npermanently any contributor for other behaviors that they deem inappropriate,\nthreatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces\nwhen an individual is representing the project or its community. Examples of\nrepresenting a project or community include using an official project e-mail\naddress, posting via an official social media account, or acting as an appointed\nrepresentative at an online or offline event. Representation of a project may be\nfurther defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported by contacting the project team at auptimizer@lge.com. All\ncomplaints will be reviewed and investigated and will result in a response that\nis deemed necessary and appropriate to the circumstances. The project team is\nobligated to maintain confidentiality with regard to the reporter of an incident.\nFurther details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good\nfaith may face temporary or permanent repercussions as determined by other\nmembers of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,\navailable at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html\n\n[homepage]: https://www.contributor-covenant.org\n\nFor answers to common questions about this code of conduct, see\nhttps://www.contributor-covenant.org/faq\n"
  },
  {
    "path": "Examples/.gitignore",
    "content": "jobs/\nspearmint/\n"
  },
  {
    "path": "Examples/2dfunc_diff_mult_res/README.md",
    "content": "# Return multiple results\n\nThis feature allows the user to save and track multiple secondary results along with the primary result for the HPO experiment. \nAuptimizer still uses the primary result for the HPO algorithms, but saves the secondary results in the database under the table `multiple_results`.\n\n## Usage \n\nThe feature can be used by adding the following parameter to the experiment configuration file:\n\n    \"resource_args\": {\n      \"multi_res_labels\": [\"x\", \"y\", …]\n    }\n    \nIn the above example, {\"x\", \"y\", …} are the secondary parameters the user wants to track and record. \nThe user script would then return the results as a list including the primary result 'res' along with the secondary parameters as follows:\n\n    @aup_args\n    def HPO():\n        res = calculate_results()\n        return [res, x, y, …]\n        \nIn the above example 'res' is the primary result which is always the first index of the returned array when using multiple results, and is used by HPO algorithm.\nThe other indices are matched directly with the array provided in the `multi_res_labels` parameter. \nHence, The length of the returned array from HPO script is '1 + length of multi_res_labels' parameter.\n\n\n## Example code \n\n    python -m aup.setup cpu.ini\n\tpython -m aup exp_cpu.json\n\nThe code will create the job configuration file, interactively ask you to run the script, and ask for the result from your training code.\ne.g. \n\n    # Job running path is Examples/2dfunc_diff_mult_res\n    # Config is at Examples/2dfunc_diff_mult_res/jobs/452.json\n    Job command is:\n    Examples/2dfunc_diff_mult_res/rosenbrock_hpo.py\n    Return results:\n\nThen you should run the command in another terminal like:\n    \n    ./rosenbrock_hpo.py ./jobs/452.json\n    \nYou will see something like:\n \n    #Auptimizer:232.78278278806914,-0.8297799529742598,2.2032449344215808\n\nThe first result is the main result, the next are \"x\" and \"y\" defined by multi_res_labels.\n \nOnce you paste the result back to **Auptimizer**, it will ask you for the next one.\n\n"
  },
  {
    "path": "Examples/2dfunc_diff_mult_res/cpu.ini",
    "content": "[Auptimizer]\n# Auptimizer environment folder to be created, this file will be copied over\nAuptimizer_PATH=./.aup\n# Temp folder\nTMP_FOLDER=./aup_tmp\n# SQL engine\nSQL_ENGINE=sqlite\n"
  },
  {
    "path": "Examples/2dfunc_diff_mult_res/exp_cpu.json",
    "content": "{\n  \"name\": \"./2dfunc_diff_mult_res/exp_cpu.json\",\n  \"proposer\": \"random\",\n  \"n_samples\": 10,\n  \"random_seed\": 1,\n  \"script\": \"rosenbrock_hpo.py\",\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"y\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    }\n  ],\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"min\",\n  \"resource_args\": {\n    \"multi_res_labels\": [\"x\", \"y\"]\n  }\n}\n"
  },
  {
    "path": "Examples/2dfunc_diff_mult_res/rosenbrock_hpo.py",
    "content": "#!/usr/bin/env python\n\"\"\"\nModified Rosenbrock function for HPO and aup\n============================================\n\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\n\nimport sys\n\"\"\" # ver 1.0 - modify existing code\nfrom aup import BasicConfig, print_result\n\ndef rosenbrock(conf, a=1, b=100):\n    x = conf.x\n    y = conf.y\n    return (a-x)*(a-x) + b*(y-x*x)*(y-x*x)\n\n\nif __name__ == \"__main__\":\n    if len(sys.argv) != 2:\n        print(\"config file required\")\n        exit(1)\n    config = BasicConfig().load(sys.argv[1])\n    val = rosenbrock(config)\n    print_result(val)\n\"\"\"\n\nfrom aup import aup_args\n\n@aup_args\ndef rosenbrock(x, y, a=1, b=100):\n    return [(a-x)*(a-x) + b*(y-x*x)*(y-x*x), x, y]\n\nif __name__ == \"__main__\":\n    if len(sys.argv) != 2:\n        print(\"config file required\")\n        exit(1)\n    \n    rosenbrock(sys.argv[1])\n"
  },
  {
    "path": "Examples/2dfunc_diff_opt/.gitignore",
    "content": "spearmint/\nrosenbrock_auto.py\n"
  },
  {
    "path": "Examples/2dfunc_diff_opt/History.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import pandas as pd\\n\",\n    \"import matplotlib.pylab as plt\\n\",\n    \"from aup.ET.Connector.SQLiteConnector import SQLiteConnector\\n\",\n    \"import json\\n\",\n    \"%matplotlib inline\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# connect to the result\\n\",\n    \"sql = SQLiteConnector(\\\"./.aup/sqlite3.db\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"[1, 2, 3, 4]\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# Get all experiments (this run is for iris using hyperopt, sequence, spearmint, random)\\n\",\n    \"eids = sql.get_all_experiment()\\n\",\n    \"eids\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"(2,\\n\",\n       \" 1,\\n\",\n       \" 1564088286,\\n\",\n       \" 1564088287,\\n\",\n       \" '{\\\"proposer\\\": \\\"random\\\", \\\"n_samples\\\": 10, \\\"random_seed\\\": 1, \\\"script\\\": \\\"rosenbrock_hpo.py\\\", \\\"parameter_config\\\": [{\\\"name\\\": \\\"x\\\", \\\"range\\\": [-5, 5], \\\"type\\\": \\\"float\\\"}, {\\\"name\\\": \\\"y\\\", \\\"range\\\": [-5, 5], \\\"type\\\": \\\"float\\\"}], \\\"resource\\\": \\\"cpu\\\", \\\"n_parallel\\\": 2, \\\"target\\\": \\\"min\\\", \\\"workingdir\\\": \\\"/Users/jason.liu/PycharmProjects/CTE/Examples/2dfunc_diff_opt\\\"}')\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# Show details in one experiment\\n\",\n    \"sql.cursor.execute(\\\"SELECT * FROM experiment where eid = ?\\\", (eids[1],))\\n\",\n    \"sql.cursor.fetchone()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {\n    \"scrolled\": true\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>jid</th>\\n\",\n       \"      <th>score</th>\\n\",\n       \"      <th>eid</th>\\n\",\n       \"      <th>rid</th>\\n\",\n       \"      <th>start_time</th>\\n\",\n       \"      <th>end_time</th>\\n\",\n       \"      <th>job_config</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>90036.000000</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1564088282</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': -5, 'y': -5}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>40519.252553</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1564088282</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': -3.888888888888889, 'y': -5}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>16184.062795</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1564088282</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': -2.7777777777777777, 'y': -5}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>6056.493827</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1564088282</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': -1.6666666666666665, 'y': -5}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2820.587715</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': -0.5555555555555554, 'y': -5}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>2818.365493</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': 0.5555555555555558, 'y': -5}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>7</td>\\n\",\n       \"      <td>6049.827160</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': 1.666666666666667, 'y': -5}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>16172.951684</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': 2.777777777777778, 'y': -5}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>40503.696997</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': 3.8888888888888893, 'y': -5}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>10</td>\\n\",\n       \"      <td>90016.000000</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': 5.0, 'y': -5}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>11</td>\\n\",\n       \"      <td>83492.790123</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': -5, 'y': -3.888888888888889}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>12</td>\\n\",\n       \"      <td>36170.830056</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': -3.888888888888889, 'y': -3.888888888888...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>13</td>\\n\",\n       \"      <td>13481.730834</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': -2.7777777777777777, 'y': -3.88888888888...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>14</td>\\n\",\n       \"      <td>4451.555556</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': -1.6666666666666665, 'y': -3.88888888888...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>15</td>\\n\",\n       \"      <td>1764.346289</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': -0.5555555555555554, 'y': -3.88888888888...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>16</td>\\n\",\n       \"      <td>1762.124066</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': 0.5555555555555558, 'y': -3.888888888888...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>17</td>\\n\",\n       \"      <td>4444.888889</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': 1.666666666666667, 'y': -3.888888888888889}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>13470.619723</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': 2.777777777777778, 'y': -3.888888888888889}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>19</td>\\n\",\n       \"      <td>36155.274501</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': 3.8888888888888893, 'y': -3.888888888888...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>20</td>\\n\",\n       \"      <td>83472.790123</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': 5.0, 'y': -3.888888888888889}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>21</td>\\n\",\n       \"      <td>77196.493827</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': -5, 'y': -2.7777777777777777}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>22</td>\\n\",\n       \"      <td>32069.321140</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': -3.888888888888889, 'y': -2.777777777777...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>23</td>\\n\",\n       \"      <td>11026.312452</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': -2.7777777777777777, 'y': -2.77777777777...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>23</th>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>3093.530864</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': -1.6666666666666665, 'y': -2.77777777777...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>24</th>\\n\",\n       \"      <td>25</td>\\n\",\n       \"      <td>955.018442</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': -0.5555555555555554, 'y': -2.77777777777...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>25</th>\\n\",\n       \"      <td>26</td>\\n\",\n       \"      <td>952.796220</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': 0.5555555555555558, 'y': -2.777777777777...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>26</th>\\n\",\n       \"      <td>27</td>\\n\",\n       \"      <td>3086.864198</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': 1.666666666666667, 'y': -2.7777777777777...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>27</th>\\n\",\n       \"      <td>28</td>\\n\",\n       \"      <td>11015.201341</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': 2.777777777777778, 'y': -2.7777777777777...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>28</th>\\n\",\n       \"      <td>29</td>\\n\",\n       \"      <td>32053.765585</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': 3.8888888888888893, 'y': -2.777777777777...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>30</td>\\n\",\n       \"      <td>77176.493827</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>1564088283</td>\\n\",\n       \"      <td>{'x': 5.0, 'y': -2.7777777777777777}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>70</th>\\n\",\n       \"      <td>71</td>\\n\",\n       \"      <td>49418.716049</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>{'x': -5, 'y': 2.777777777777778}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>71</th>\\n\",\n       \"      <td>72</td>\\n\",\n       \"      <td>15265.480262</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>{'x': -3.888888888888889, 'y': 2.777777777777778}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>72</th>\\n\",\n       \"      <td>73</td>\\n\",\n       \"      <td>2452.924249</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>{'x': -2.7777777777777777, 'y': 2.777777777777...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>73</th>\\n\",\n       \"      <td>74</td>\\n\",\n       \"      <td>7.111111</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>{'x': -1.6666666666666665, 'y': 2.777777777777...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>74</th>\\n\",\n       \"      <td>75</td>\\n\",\n       \"      <td>612.082914</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>{'x': -0.5555555555555554, 'y': 2.777777777777...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>75</th>\\n\",\n       \"      <td>76</td>\\n\",\n       \"      <td>609.860692</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>{'x': 0.5555555555555558, 'y': 2.777777777777778}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>76</th>\\n\",\n       \"      <td>77</td>\\n\",\n       \"      <td>0.444444</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>{'x': 1.666666666666667, 'y': 2.777777777777778}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>77</th>\\n\",\n       \"      <td>78</td>\\n\",\n       \"      <td>2441.813138</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>{'x': 2.777777777777778, 'y': 2.777777777777778}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>78</th>\\n\",\n       \"      <td>79</td>\\n\",\n       \"      <td>15249.924707</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>{'x': 3.8888888888888893, 'y': 2.777777777777778}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>79</th>\\n\",\n       \"      <td>80</td>\\n\",\n       \"      <td>49398.716049</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>{'x': 5.0, 'y': 2.777777777777778}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>80</th>\\n\",\n       \"      <td>81</td>\\n\",\n       \"      <td>44603.901235</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>{'x': -5, 'y': 3.8888888888888893}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>81</th>\\n\",\n       \"      <td>82</td>\\n\",\n       \"      <td>12645.452827</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>{'x': -3.888888888888889, 'y': 3.8888888888888...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>82</th>\\n\",\n       \"      <td>83</td>\\n\",\n       \"      <td>1478.987349</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>{'x': -2.7777777777777777, 'y': 3.888888888888...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>83</th>\\n\",\n       \"      <td>84</td>\\n\",\n       \"      <td>130.567901</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1564088284</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>{'x': -1.6666666666666665, 'y': 3.888888888888...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>84</th>\\n\",\n       \"      <td>85</td>\\n\",\n       \"      <td>1284.236549</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>{'x': -0.5555555555555554, 'y': 3.888888888888...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>85</th>\\n\",\n       \"      <td>86</td>\\n\",\n       \"      <td>1282.014327</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>{'x': 0.5555555555555558, 'y': 3.8888888888888...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>86</th>\\n\",\n       \"      <td>87</td>\\n\",\n       \"      <td>123.901235</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>{'x': 1.666666666666667, 'y': 3.8888888888888893}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>87</th>\\n\",\n       \"      <td>88</td>\\n\",\n       \"      <td>1467.876238</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>{'x': 2.777777777777778, 'y': 3.8888888888888893}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>88</th>\\n\",\n       \"      <td>89</td>\\n\",\n       \"      <td>12629.897272</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>{'x': 3.8888888888888893, 'y': 3.8888888888888...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>89</th>\\n\",\n       \"      <td>90</td>\\n\",\n       \"      <td>44583.901235</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>{'x': 5.0, 'y': 3.8888888888888893}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>90</th>\\n\",\n       \"      <td>91</td>\\n\",\n       \"      <td>40036.000000</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>{'x': -5, 'y': 5.0}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>91</th>\\n\",\n       \"      <td>92</td>\\n\",\n       \"      <td>10272.338973</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>{'x': -3.888888888888889, 'y': 5.0}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>92</th>\\n\",\n       \"      <td>93</td>\\n\",\n       \"      <td>751.964030</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>{'x': -2.7777777777777777, 'y': 5.0}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>93</th>\\n\",\n       \"      <td>94</td>\\n\",\n       \"      <td>500.938272</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>{'x': -1.6666666666666665, 'y': 5.0}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>94</th>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>2203.303765</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>{'x': -0.5555555555555554, 'y': 5.0}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>95</th>\\n\",\n       \"      <td>96</td>\\n\",\n       \"      <td>2201.081542</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>{'x': 0.5555555555555558, 'y': 5.0}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>96</th>\\n\",\n       \"      <td>97</td>\\n\",\n       \"      <td>494.271605</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>{'x': 1.666666666666667, 'y': 5.0}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>97</th>\\n\",\n       \"      <td>98</td>\\n\",\n       \"      <td>740.852919</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>{'x': 2.777777777777778, 'y': 5.0}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>98</th>\\n\",\n       \"      <td>99</td>\\n\",\n       \"      <td>10256.783417</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>{'x': 3.8888888888888893, 'y': 5.0}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>99</th>\\n\",\n       \"      <td>100</td>\\n\",\n       \"      <td>40016.000000</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>1564088285</td>\\n\",\n       \"      <td>{'x': 5.0, 'y': 5.0}</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>100 rows × 7 columns</p>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"    jid         score  eid  rid  start_time    end_time  \\\\\\n\",\n       \"0     1  90036.000000    1    3  1564088282  1564088283   \\n\",\n       \"1     2  40519.252553    1    2  1564088282  1564088283   \\n\",\n       \"2     3  16184.062795    1    1  1564088282  1564088283   \\n\",\n       \"3     4   6056.493827    1    4  1564088282  1564088283   \\n\",\n       \"4     5   2820.587715    1    3  1564088283  1564088283   \\n\",\n       \"5     6   2818.365493    1    2  1564088283  1564088283   \\n\",\n       \"6     7   6049.827160    1    1  1564088283  1564088283   \\n\",\n       \"7     8  16172.951684    1    4  1564088283  1564088283   \\n\",\n       \"8     9  40503.696997    1    3  1564088283  1564088283   \\n\",\n       \"9    10  90016.000000    1    2  1564088283  1564088283   \\n\",\n       \"10   11  83492.790123    1    1  1564088283  1564088283   \\n\",\n       \"11   12  36170.830056    1    4  1564088283  1564088283   \\n\",\n       \"12   13  13481.730834    1    3  1564088283  1564088283   \\n\",\n       \"13   14   4451.555556    1    2  1564088283  1564088283   \\n\",\n       \"14   15   1764.346289    1    1  1564088283  1564088283   \\n\",\n       \"15   16   1762.124066    1    4  1564088283  1564088283   \\n\",\n       \"16   17   4444.888889    1    3  1564088283  1564088283   \\n\",\n       \"17   18  13470.619723    1    2  1564088283  1564088283   \\n\",\n       \"18   19  36155.274501    1    1  1564088283  1564088283   \\n\",\n       \"19   20  83472.790123    1    4  1564088283  1564088283   \\n\",\n       \"20   21  77196.493827    1    3  1564088283  1564088283   \\n\",\n       \"21   22  32069.321140    1    2  1564088283  1564088283   \\n\",\n       \"22   23  11026.312452    1    1  1564088283  1564088283   \\n\",\n       \"23   24   3093.530864    1    4  1564088283  1564088283   \\n\",\n       \"24   25    955.018442    1    3  1564088283  1564088283   \\n\",\n       \"25   26    952.796220    1    2  1564088283  1564088283   \\n\",\n       \"26   27   3086.864198    1    1  1564088283  1564088283   \\n\",\n       \"27   28  11015.201341    1    4  1564088283  1564088283   \\n\",\n       \"28   29  32053.765585    1    3  1564088283  1564088283   \\n\",\n       \"29   30  77176.493827    1    2  1564088283  1564088283   \\n\",\n       \"..  ...           ...  ...  ...         ...         ...   \\n\",\n       \"70   71  49418.716049    1    1  1564088284  1564088284   \\n\",\n       \"71   72  15265.480262    1    4  1564088284  1564088284   \\n\",\n       \"72   73   2452.924249    1    3  1564088284  1564088284   \\n\",\n       \"73   74      7.111111    1    2  1564088284  1564088284   \\n\",\n       \"74   75    612.082914    1    1  1564088284  1564088284   \\n\",\n       \"75   76    609.860692    1    4  1564088284  1564088284   \\n\",\n       \"76   77      0.444444    1    3  1564088284  1564088284   \\n\",\n       \"77   78   2441.813138    1    2  1564088284  1564088284   \\n\",\n       \"78   79  15249.924707    1    1  1564088284  1564088284   \\n\",\n       \"79   80  49398.716049    1    4  1564088284  1564088284   \\n\",\n       \"80   81  44603.901235    1    3  1564088284  1564088285   \\n\",\n       \"81   82  12645.452827    1    2  1564088284  1564088285   \\n\",\n       \"82   83   1478.987349    1    1  1564088284  1564088285   \\n\",\n       \"83   84    130.567901    1    4  1564088284  1564088285   \\n\",\n       \"84   85   1284.236549    1    3  1564088285  1564088285   \\n\",\n       \"85   86   1282.014327    1    2  1564088285  1564088285   \\n\",\n       \"86   87    123.901235    1    1  1564088285  1564088285   \\n\",\n       \"87   88   1467.876238    1    4  1564088285  1564088285   \\n\",\n       \"88   89  12629.897272    1    3  1564088285  1564088285   \\n\",\n       \"89   90  44583.901235    1    2  1564088285  1564088285   \\n\",\n       \"90   91  40036.000000    1    1  1564088285  1564088285   \\n\",\n       \"91   92  10272.338973    1    4  1564088285  1564088285   \\n\",\n       \"92   93    751.964030    1    3  1564088285  1564088285   \\n\",\n       \"93   94    500.938272    1    2  1564088285  1564088285   \\n\",\n       \"94   95   2203.303765    1    1  1564088285  1564088285   \\n\",\n       \"95   96   2201.081542    1    4  1564088285  1564088285   \\n\",\n       \"96   97    494.271605    1    3  1564088285  1564088285   \\n\",\n       \"97   98    740.852919    1    2  1564088285  1564088285   \\n\",\n       \"98   99  10256.783417    1    1  1564088285  1564088285   \\n\",\n       \"99  100  40016.000000    1    4  1564088285  1564088285   \\n\",\n       \"\\n\",\n       \"                                           job_config  \\n\",\n       \"0                                  {'x': -5, 'y': -5}  \\n\",\n       \"1                  {'x': -3.888888888888889, 'y': -5}  \\n\",\n       \"2                 {'x': -2.7777777777777777, 'y': -5}  \\n\",\n       \"3                 {'x': -1.6666666666666665, 'y': -5}  \\n\",\n       \"4                 {'x': -0.5555555555555554, 'y': -5}  \\n\",\n       \"5                  {'x': 0.5555555555555558, 'y': -5}  \\n\",\n       \"6                   {'x': 1.666666666666667, 'y': -5}  \\n\",\n       \"7                   {'x': 2.777777777777778, 'y': -5}  \\n\",\n       \"8                  {'x': 3.8888888888888893, 'y': -5}  \\n\",\n       \"9                                 {'x': 5.0, 'y': -5}  \\n\",\n       \"10                 {'x': -5, 'y': -3.888888888888889}  \\n\",\n       \"11  {'x': -3.888888888888889, 'y': -3.888888888888...  \\n\",\n       \"12  {'x': -2.7777777777777777, 'y': -3.88888888888...  \\n\",\n       \"13  {'x': -1.6666666666666665, 'y': -3.88888888888...  \\n\",\n       \"14  {'x': -0.5555555555555554, 'y': -3.88888888888...  \\n\",\n       \"15  {'x': 0.5555555555555558, 'y': -3.888888888888...  \\n\",\n       \"16  {'x': 1.666666666666667, 'y': -3.888888888888889}  \\n\",\n       \"17  {'x': 2.777777777777778, 'y': -3.888888888888889}  \\n\",\n       \"18  {'x': 3.8888888888888893, 'y': -3.888888888888...  \\n\",\n       \"19                {'x': 5.0, 'y': -3.888888888888889}  \\n\",\n       \"20                {'x': -5, 'y': -2.7777777777777777}  \\n\",\n       \"21  {'x': -3.888888888888889, 'y': -2.777777777777...  \\n\",\n       \"22  {'x': -2.7777777777777777, 'y': -2.77777777777...  \\n\",\n       \"23  {'x': -1.6666666666666665, 'y': -2.77777777777...  \\n\",\n       \"24  {'x': -0.5555555555555554, 'y': -2.77777777777...  \\n\",\n       \"25  {'x': 0.5555555555555558, 'y': -2.777777777777...  \\n\",\n       \"26  {'x': 1.666666666666667, 'y': -2.7777777777777...  \\n\",\n       \"27  {'x': 2.777777777777778, 'y': -2.7777777777777...  \\n\",\n       \"28  {'x': 3.8888888888888893, 'y': -2.777777777777...  \\n\",\n       \"29               {'x': 5.0, 'y': -2.7777777777777777}  \\n\",\n       \"..                                                ...  \\n\",\n       \"70                  {'x': -5, 'y': 2.777777777777778}  \\n\",\n       \"71  {'x': -3.888888888888889, 'y': 2.777777777777778}  \\n\",\n       \"72  {'x': -2.7777777777777777, 'y': 2.777777777777...  \\n\",\n       \"73  {'x': -1.6666666666666665, 'y': 2.777777777777...  \\n\",\n       \"74  {'x': -0.5555555555555554, 'y': 2.777777777777...  \\n\",\n       \"75  {'x': 0.5555555555555558, 'y': 2.777777777777778}  \\n\",\n       \"76   {'x': 1.666666666666667, 'y': 2.777777777777778}  \\n\",\n       \"77   {'x': 2.777777777777778, 'y': 2.777777777777778}  \\n\",\n       \"78  {'x': 3.8888888888888893, 'y': 2.777777777777778}  \\n\",\n       \"79                 {'x': 5.0, 'y': 2.777777777777778}  \\n\",\n       \"80                 {'x': -5, 'y': 3.8888888888888893}  \\n\",\n       \"81  {'x': -3.888888888888889, 'y': 3.8888888888888...  \\n\",\n       \"82  {'x': -2.7777777777777777, 'y': 3.888888888888...  \\n\",\n       \"83  {'x': -1.6666666666666665, 'y': 3.888888888888...  \\n\",\n       \"84  {'x': -0.5555555555555554, 'y': 3.888888888888...  \\n\",\n       \"85  {'x': 0.5555555555555558, 'y': 3.8888888888888...  \\n\",\n       \"86  {'x': 1.666666666666667, 'y': 3.8888888888888893}  \\n\",\n       \"87  {'x': 2.777777777777778, 'y': 3.8888888888888893}  \\n\",\n       \"88  {'x': 3.8888888888888893, 'y': 3.8888888888888...  \\n\",\n       \"89                {'x': 5.0, 'y': 3.8888888888888893}  \\n\",\n       \"90                                {'x': -5, 'y': 5.0}  \\n\",\n       \"91                {'x': -3.888888888888889, 'y': 5.0}  \\n\",\n       \"92               {'x': -2.7777777777777777, 'y': 5.0}  \\n\",\n       \"93               {'x': -1.6666666666666665, 'y': 5.0}  \\n\",\n       \"94               {'x': -0.5555555555555554, 'y': 5.0}  \\n\",\n       \"95                {'x': 0.5555555555555558, 'y': 5.0}  \\n\",\n       \"96                 {'x': 1.666666666666667, 'y': 5.0}  \\n\",\n       \"97                 {'x': 2.777777777777778, 'y': 5.0}  \\n\",\n       \"98                {'x': 3.8888888888888893, 'y': 5.0}  \\n\",\n       \"99                               {'x': 5.0, 'y': 5.0}  \\n\",\n       \"\\n\",\n       \"[100 rows x 7 columns]\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# show details in job history for one experiment\\n\",\n    \"history = sql.get_all_history(1)\\n\",\n    \"history = pd.DataFrame(history)\\n\",\n    \"history.columns = ['jid', 'score','eid','rid','start_time','end_time','job_config']\\n\",\n    \"history\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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+5QuCV1IMP2oFBER72knZZFT0//aPOKco6mpyeswRFoVmqLcDo9w8fsU5eai/kjjEVIStf5WRET8ISs9i78d+htHG496HYqIb8VVgWtm3zazR+rr670OJayamhouuugivv/975Obm8t1111HYWEhOTk53HbbbaHrMjMzue222xg+fDh5eXns2rULgI8++ojS0lJycnKYPXv2cdvE/+pXvyI3N5fc3Fzuvffe0PsNGjSIWbNmkZ2dzTXXXMO6desoKSkhKyuLsrKyju0AiSnnJJ8DfPHInGgKbTLl0wK35bRsv8YoEiv8nptFYkl2j2waXSNv1b/ldSgivhVXjwlyzj0PPF9YWPiDNi9cuwDeq4zum381D7511ykv27NnD4899hgjR47k4MGD9OjRg8bGRsaPH88bb7xBfn4+AL169WLbtm089NBDLF68mN/85jcsWrSI0aNHc+utt/LCCy/w29/+FoBXX32VpUuXsmXLFpxzfP3rX+fSSy8lIyOD6upqfv/73/Poo49SVFTEypUr2bBhA8899xx33nknzz77bHT7QeJGcmIy3ZK6tcsIrt/X4LYscLWDssiZiTg3i8gpZadnA7Cndg+DegzyOBoRf4qrAjcWXHjhhYwcORKAJ598kkceeYSGhgbeffdddu7cGSpwp06dCsCIESN4+umnAXjllVdCn19xxRVkZGQAsGHDBq688kpSU1NDr12/fj2TJ0+mX79+5OXlAZCTk8P48eMxM/Ly8qipqemw71ti0zldz2mXEdzuXfy9BjfBEki0RBpdozaYEhER37jgnAvomtCVlVUref3A62fcXpeELkzqP4mcXjlRiE7EHzpngRvBSGt7aS5C//rXv7J48WK2bt1KRkYGs2bN4siRI6HrkpMD/6lOTEykoaHhS79fczsACQkJoeOEhIQzalc6h29c+A3OP/v8qLebmuTvNbgQGMVtbFSBKyIi/pGUkMTEzIls3L+R/Yf3n3F7h48d5j+r/pPRfUbzo/wfUXBeQRSiFPFW5yxwfeDQoUOkpqaSlpbG+++/z9q1axk7dmybrxkzZgwrV65k4cKFrF27ltraWgAuueQSZs2axYIFC3DO8cwzz/C73/2uA74LiXcLihe0S7vNI7jtsUNztCQlJPF54+cqcEVExFfuvOTOqLX1ydFPeOLNJ1i+Yzkz187kooyLQjnaL1IS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\\n\",\n      \"text/plain\": [\n       \"<Figure size 1152x576 with 2 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"plt.figure(figsize=(16,8))\\n\",\n    \"plt.subplot(121)\\n\",\n    \"for i in eids:\\n\",\n    \"    history = sql.get_all_history(i)\\n\",\n    \"    history = pd.DataFrame(history)\\n\",\n    \"    history.columns = ['jid', 'score','eid','rid','start_time','end_time','job_config']\\n\",\n    \"    sql.cursor.execute(\\\"SELECT * FROM experiment where eid = ?\\\", (i,))\\n\",\n    \"    label = json.loads(sql.cursor.fetchone()[4])['proposer']\\n\",\n    \"    plt.plot(history.score, label=label)\\n\",\n    \"plt.legend()\\n\",\n    \"plt.xlabel(\\\"Iteration\\\")\\n\",\n    \"plt.ylabel(\\\"Accuracy\\\")\\n\",\n    \"plt.yscale(\\\"log\\\")\\n\",\n    \"\\n\",\n    \"plt.subplot(122)\\n\",\n    \"for i in eids:\\n\",\n    \"    history = sql.get_all_history(i)\\n\",\n    \"    history = pd.DataFrame(history)\\n\",\n    \"    history.columns = ['jid', 'score','eid','rid','start_time','end_time','job_config']\\n\",\n    \"    sql.cursor.execute(\\\"SELECT * FROM experiment where eid = ?\\\", (i,))\\n\",\n    \"    label = json.loads(sql.cursor.fetchone()[4])['proposer']\\n\",\n    \"    plt.plot(history.score.cummin(), label=label)\\n\",\n    \"plt.legend()\\n\",\n    \"plt.xlabel(\\\"Iteration\\\")\\n\",\n    \"plt.ylabel(\\\"Best Accuracy so far\\\")\\n\",\n    \"plt.yscale(\\\"log\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"sql.close()\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.7.3\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "Examples/2dfunc_diff_opt/README.md",
    "content": "# Rosenbrock demo\n\n## Setup\n\n    python -m aup.setup\n\nTo setup different resource configuration, see [resource example](../2dfunc_diff_res/README.md).\n\n## Experiment\n\n    python -m aup experiment_sequence.json --log warn\n    python -m aup experiment_random.json\n    python -m aup experiment_spearmint.json\n    python -m aup experiment_hyperopt.json\n\nResults are presented in [History](History.ipynb)\n\n## Experiment Auto-convert\n\nTo convert the original `rosenbrock_origin.py` for *Auptimizer*, users can use\n\n    python -m aup.convert rosenbrock_origin.py experiment_auto.json rosenbrock\n\nIt will create `rosenbrock_auto.py` for user to use for *Auptimizer* experiment.\n\n## Reset\n\nTo clean the database, use \n\n    python -m aup.setupdb.reset .aup/env.ini\n"
  },
  {
    "path": "Examples/2dfunc_diff_opt/experiment_auto.json",
    "content": "{\n  \"name\": \"./2dfunc_diff_opt/experiment_auto.json\",\n  \"proposer\": \"random\",\n  \"n_samples\": 10,\n  \"random_seed\": 1,\n  \"script\": \"rosenbrock_auto.py\",\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"y\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    }\n  ],\n  \"resource\": \"cpu\",\n  \"n_parallel\": 1,\n  \"target\":\"min\"\n}\n"
  },
  {
    "path": "Examples/2dfunc_diff_opt/experiment_bohb.json",
    "content": "{\n  \"name\": \"./2dfunc_diff_opt/experiment_bohb.json\",\n  \"script\": \"rosenbrock_hpo.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 5,\n  \"target\": \"min\",\n  \"workingdir\": \"./\",\n  \"proposer\": \"bohb\",\n    \"n_iterations\": 3,\n  \"min_points_in_model\": \"\",\n  \"top_n_percent\": 15,\n  \"num_samples\": 64,\n  \"random_fraction\": 0.3333333333333333,\n  \"bandwidth_factor\": 3,\n  \"min_bandwidth\": 0.001,\n  \"eta\": 3,\n  \"min_budget\": 1,\n  \"max_budget\": 9,\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        0,\n        1\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"y\",\n      \"range\": [\n        0,\n        1\n      ],\n      \"type\": \"float\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/2dfunc_diff_opt/experiment_hyperband.json",
    "content": "{\n  \"name\": \"./2dfunc_diff_opt/experiment_hyperband.json\",\n  \"proposer\": \"hyperband\",\n  \"script\": \"rosenbrock_hpo.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 1,\n  \"target\":\"max\",\n  \"max_iter\": 3,\n  \"engine\": \"random\",\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [-5, 5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"y\",\n      \"range\": [-5,5],\n      \"type\": \"float\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/2dfunc_diff_opt/experiment_hyperopt.json",
    "content": "{\n  \"name\": \"./2dfunc_diff_opt/experiment_hyperopt.json\",\n  \"proposer\": \"hyperopt\",\n  \"random_seed\": 1,\n  \"script\": \"rosenbrock_hpo.py\",\n  \"engine\":\"tpe\",\n  \"n_samples\": 100,\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"y\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    }\n  ],\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"min\"\n}\n"
  },
  {
    "path": "Examples/2dfunc_diff_opt/experiment_random.json",
    "content": "{\n  \"name\": \"./2dfunc_diff_opt/experiment_random.json\",\n  \"proposer\": \"random\",\n  \"n_samples\": 10,\n  \"random_seed\": 1,\n  \"script\": \"rosenbrock_hpo.py\",\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"y\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    }\n  ],\n  \"resource\": \"cpu\",\n  \"n_parallel\": 2,\n  \"target\":\"min\"\n}\n"
  },
  {
    "path": "Examples/2dfunc_diff_opt/experiment_sequence.json",
    "content": "{\n  \"name\": \"./2dfunc_diff_opt/experiment_sequence.json\",\n  \"proposer\": \"sequence\",\n  \"script\": \"rosenbrock_hpo.py\",\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\",\n      \"n\": 10\n    },\n    {\n      \"name\": \"y\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\",\n      \"n\": 10\n    }\n  ],\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"min\"\n}\n"
  },
  {
    "path": "Examples/2dfunc_diff_opt/experiment_spearmint.json",
    "content": "{\n  \"name\": \"./2dfunc_diff_opt/experiment_spearmint.json\",\n  \"proposer\": \"spearmint\",\n  \"n_samples\": 100,\n  \"random_seed\": 1,\n  \"script\": \"rosenbrock_hpo.py\",\n  \"engine\":\"GPEIChooser\",\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\",\n      \"size\": 1\n    },\n    {\n      \"name\": \"y\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\",\n      \"size\": 1\n    }\n  ],\n  \"resource\": \"cpu\",\n  \"n_parallel\": 2,\n  \"target\":\"min\"\n}\n"
  },
  {
    "path": "Examples/2dfunc_diff_opt/rosenbrock_hpo.py",
    "content": "#!/usr/bin/env python\n\"\"\"\nModified Rosenbrock function for HPO and aup\n============================================\n\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\n\nimport sys\n\"\"\" # ver 1.0 - modify existing code\nfrom aup import BasicConfig, print_result\n\ndef rosenbrock(conf, a=1, b=100):\n    x = conf.x\n    y = conf.y\n    return (a-x)*(a-x) + b*(y-x*x)*(y-x*x)\n\n\nif __name__ == \"__main__\":\n    if len(sys.argv) != 2:\n        print(\"config file required\")\n        exit(1)\n    config = BasicConfig().load(sys.argv[1])\n    val = rosenbrock(config)\n    print_result(val)\n\"\"\"\n\nfrom aup import aup_args\n\n@aup_args\ndef rosenbrock(x, y, a=1, b=100):\n    return (a-x)*(a-x) + b*(y-x*x)*(y-x*x)\n\nif __name__ == \"__main__\":\n    if len(sys.argv) != 2:\n        print(\"config file required\")\n        exit(1)\n    \n    rosenbrock(sys.argv[1])\n"
  },
  {
    "path": "Examples/2dfunc_diff_opt/rosenbrock_origin.py",
    "content": "\"\"\"\nDemonstration code for Rosenbrock function\n==========================================\n\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\n\n\ndef rosenbrock(x, y, a=1, b=100):\n    return (a-x)*(a-x) + b*(y-x*x)*(y-x*x)\n\n"
  },
  {
    "path": "Examples/2dfunc_diff_res/README.md",
    "content": "# Rosenbrock demo for different resources\n\n## CPU\n\n    python -m aup.setup cpu.ini\n\tpython -m aup exp_cpu.json\n\n## GPU\n\nUsing a file contains the GPU ID per line will create GPU resources accordingly\n\n\tpython -m aup.setup cpu.ini --gpu gpu.txt --overwrite\n\tpython -m aup exp_gpu.json\n\t\n## multi-node\n\nFor multi node environment, first set up the ssh key (see [here](https://help.ubuntu.com/community/SSH/OpenSSH/Keys) as example), then either use IP for node, or use node name with IP in `/etc/hosts` file.  In `node.txt`, each line contains `<username>:<nodename/IP>[:port]`, where port number is optional (default 22).\n\n\tpython -m aup.setup cpu.ini --node node.txt --overwrite\n\tpython -m aup exp_node.json\n\t\nAlso, it is important to add `workingdir` for remote execution.\n\n## Passive mode\n\nPassive mode is used for debugging purpose.  It helps users to run training code manually and check potential problem in\nthe training code.\n\n    python -m aup experiment_passive.json\n\nThe code will create the job configuration file, interactively ask you to run the script, and ask for the result from your training code.\ne.g. \n\n    # Job running path is Examples/2dfunc_diff_res\n    # Config is at Examples/2dfunc_diff_res/jobs/452.json\n    Job command is:\n    Examples/2dfunc_diff_res/rosenbrock_hpo.py\n    Return results:\n\nThen you should run the command in another terminal like:\n    \n    ./rosenbrock_hpo.py ./jobs/452.json\n    \nYou will see something like:\n \n    #Auptimizer:232.78278278806914\n    \nOnce you paste the result back to **Auptimizer**, it will ask you for the next one.\n\n"
  },
  {
    "path": "Examples/2dfunc_diff_res/aws.txt",
    "content": "AWS_EC2_ID SSH_KEY\nAWS_EC2_ID SSH_KEY"
  },
  {
    "path": "Examples/2dfunc_diff_res/cpu.ini",
    "content": "[Auptimizer]\n# Auptimizer environment folder to be created, this file will be copied over\nAuptimizer_PATH=./.aup\n# Temp folder\nTMP_FOLDER=./aup_tmp\n# SQL engine\nSQL_ENGINE=sqlite\n"
  },
  {
    "path": "Examples/2dfunc_diff_res/env_local_template.ini",
    "content": "[Auptimizer]\n# Auptimizer environment folder to be created, this file will be copied over\nAuptimizer_PATH=./.aup\n# Temp folder\nTMP_FOLDER=./aup_tmp\n# SQL engine\nSQL_ENGINE=sqlite\n"
  },
  {
    "path": "Examples/2dfunc_diff_res/env_user_template.ini",
    "content": "[Auptimizer]\n# Auptimizer environment folder to be created, this file will be copied over\nAuptimizer_PATH=~/.aup\n# Temp folder\nTMP_FOLDER=/tmp/aup\n# SQL engine\nSQL_ENGINE=sqlite"
  },
  {
    "path": "Examples/2dfunc_diff_res/exp_aws.json",
    "content": "{\n  \"name\": \"./2dfunc_diff_res/exp_aws.json\",\n    \"workingdir\": \"/home/ubuntu/\",\n    \"proposer\": \"random\",\n    \"n_samples\": 10,\n    \"resource_args\": {\n\t\t\"shutdown\":true,\n\t\t\"connection_retry\": 5\n    },\n\t\"runtime_args\": {\n\t\t\"prescript\": \"source .profile\",\n\t\t\"postscript\": \"echo 'DONE'\"\n\t},\n    \"random_seed\": 1,\n    \"script\": \"./rosenbrock_hpo.py\",\n    \"parameter_config\": [\n\t{\n\t    \"name\": \"x\",\n\t    \"range\": [\n\t\t-5,\n\t\t5\n\t    ],\n\t    \"type\": \"float\"\n\t},\n\t{\n\t    \"name\": \"y\",\n\t    \"range\": [\n\t\t-5,\n\t\t5\n\t    ],\n\t    \"type\": \"float\"\n\t}\n    ],\n    \"resource\": \"aws\",\n    \"n_parallel\": 1,\n    \"target\":\"min\"\n}\n"
  },
  {
    "path": "Examples/2dfunc_diff_res/exp_cpu.json",
    "content": "{\n  \"name\": \"./2dfunc_diff_res/exp_cpu.json\",\n  \"proposer\": \"sequence\",\n  \"n_samples\": 10,\n  \"random_seed\": 1,\n  \"script\": \"rosenbrock_hpo.py\",\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"y\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    }\n  ],\n  \"resource\": \"cpu\",\n  \"n_parallel\": 2,\n  \"target\":\"min\"\n}\n"
  },
  {
    "path": "Examples/2dfunc_diff_res/exp_gpu.json",
    "content": "{\n  \"name\": \"./2dfunc_diff_res/exp_gpu.json\",\n  \"proposer\": \"random\",\n  \"n_samples\": 10,\n  \"random_seed\": 1,\n  \"script\": \"rosenbrock_hpo.py\",\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"y\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    }\n  ],\n  \"resource\": \"gpu\",\n  \"n_parallel\": 2,\n  \"target\":\"min\"\n}\n"
  },
  {
    "path": "Examples/2dfunc_diff_res/exp_node.json",
    "content": "{\n  \"name\": \"./2dfunc_diff_res/exp_node.json\",\n  \"workingdir\": \"/home/ubuntu/aup_demo\",\n  \"proposer\": \"random\",\n  \"n_samples\": 10,\n  \"random_seed\": 1,\n  \"script\": \"rosenbrock_hpo.py\",\n  \"runtime_args\": {\n    \"prescript\": \"export CUDA_VISIBLE_DEVICES=-1\",\n    \"postscript\": \"echo $CUDA_VISIBLE_DEVICES\",\n    \"overwrite\": true\n  },\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"y\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    }\n  ],\n  \"resource\": \"node\",\n  \"n_parallel\": 2,\n  \"target\":\"min\",\n  \"resource_args\": {\n    \"max_retries\": 2,\n    \"reconn_wait_time\": 3\n  }\n}\n"
  },
  {
    "path": "Examples/2dfunc_diff_res/exp_node_async.json",
    "content": "{\n  \"name\": \"./2dfunc_diff_res/exp_node_async.json\",\n  \"workingdir\": \"/home/paul/aup_demo\",\n  \"proposer\": \"random\",\n  \"n_samples\": 10,\n  \"random_seed\": 1,\n  \"script\": \"rosenbrock_hpo.py\",\n  \"runtime_args\": {\n    \"prescript\": \"export CUDA_VISIBLE_DEVICES=-1\",\n    \"postscript\": \"echo $CUDA_VISIBLE_DEVICES\",\n    \"overwrite\": true\n  },\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"y\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    }\n  ],\n  \"resource\": \"node\",\n  \"n_parallel\": 2,\n  \"target\":\"min\",\n  \"resource_args\": {\n    \"max_retries\": 2,\n    \"reconn_wait_time\": 3,\n    \"async_run\": true,\n    \"async_reconnect\": 1,\n    \"async_timeout\": 100\n  }\n}\n"
  },
  {
    "path": "Examples/2dfunc_diff_res/exp_passive.json",
    "content": "{\n  \"name\": \"./2dfunc_diff_res/exp_passive.json\",\n  \"proposer\": \"random\",\n  \"n_samples\": 5,\n  \"random_seed\": 1,\n  \"script\": \"rosenbrock_hpo.py\",\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"y\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    }\n  ],\n  \"resource\": \"passive\",\n  \"target\":\"min\"\n}\n"
  },
  {
    "path": "Examples/2dfunc_diff_res/gpu.txt",
    "content": "0\n1\n"
  },
  {
    "path": "Examples/2dfunc_diff_res/node.txt",
    "content": "jasonliu@ubuntu1\njasonliu@ubuntu2\n"
  },
  {
    "path": "Examples/2dfunc_diff_res/plainGPU.txt",
    "content": "0"
  },
  {
    "path": "Examples/2dfunc_diff_res/rosenbrock_hpo.py",
    "content": "#!/usr/bin/env python\n\"\"\"\nModified Rosenbrock function for HPO and aup\n============================================\n\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\n\nimport sys\n\"\"\" # ver 1.0 - modify existing code\nfrom aup import BasicConfig, print_result\n\ndef rosenbrock(conf, a=1, b=100):\n    x = conf.x\n    y = conf.y\n    return (a-x)*(a-x) + b*(y-x*x)*(y-x*x)\n\n\nif __name__ == \"__main__\":\n    if len(sys.argv) != 2:\n        print(\"config file required\")\n        exit(1)\n    config = BasicConfig().load(sys.argv[1])\n    val = rosenbrock(config)\n    print_result(val)\n\"\"\"\n\nfrom aup import aup_args\n\n@aup_args\ndef rosenbrock(x, y, a=1, b=100):\n    return (a-x)*(a-x) + b*(y-x*x)*(y-x*x)\n\nif __name__ == \"__main__\":\n    if len(sys.argv) != 2:\n        print(\"config file required\")\n        exit(1)\n    \n    rosenbrock(sys.argv[1])\n"
  },
  {
    "path": "Examples/2dfunc_diff_res/singleGPU.txt",
    "content": "0\n0"
  },
  {
    "path": "Examples/cai_eas/.gitignore",
    "content": "net_pool\narch_search\n\n\n## Core latex/pdflatex auxiliary files:\n*.aux\n*.lof\n*.log\n*.lot\n*.fls\n*.out\n*.toc\n\n## Intermediate documents:\n*.dvi\n*-converted-to.*\n# these rules might exclude image files for figures etc.\n# *.ps\n# *.eps\n# *.pdf\n/Datasets\n\n## Bibliography auxiliary files (bibtex/biblatex/biber):\n*.bbl\n*.bcf\n*.blg\n*-blx.aux\n*-blx.bib\n*.brf\n*.run.xml\n\n## Build tool auxiliary files:\n*.fdb_latexmk\n*.synctex\n*.synctex.gz\n*.synctex.gz(busy)\n*.pdfsync\n\n## Auxiliary and intermediate files from other packages:\n\n\n# algorithms\n*.alg\n*.loa\n\n# achemso\nacs-*.bib\n\n# amsthm\n*.thm\n\n# beamer\n*.nav\n*.snm\n*.vrb\n\n#(e)ledmac/(e)ledpar\n*.end\n*.[1-9]\n*.[1-9][0-9]\n*.[1-9][0-9][0-9]\n*.[1-9]R\n*.[1-9][0-9]R\n*.[1-9][0-9][0-9]R\n*.eledsec[1-9]\n*.eledsec[1-9]R\n*.eledsec[1-9][0-9]\n*.eledsec[1-9][0-9]R\n*.eledsec[1-9][0-9][0-9]\n*.eledsec[1-9][0-9][0-9]R\n\n# glossaries\n*.acn\n*.acr\n*.glg\n*.glo\n*.gls\n\n# gnuplottex\n*-gnuplottex-*\n\n# hyperref\n\n# knitr\n*-concordance.tex\n*.tikz\n*-tikzDictionary\n\n# listings\n*.lol\n\n# makeidx\n*.idx\n*.ilg\n*.ind\n*.ist\ntex/rl-meta.pdf\n\n# minitoc\n*.maf\n*.mtc\n*.mtc[0-9]\n*.mtc[1-9][0-9]\n\n# minted\n_minted*\n*.pyg\n\n# morewrites\n*.mw\n\n# mylatexformat\n*.fmt\n\n# nomencl\n*.nlo\n\n# sagetex\n*.sagetex.sage\n*.sagetex.py\n*.sagetex.scmd\n\n# sympy\n*.sout\n*.sympy\nsympy-plots-for-*.tex/\n\n# TikZ & PGF\n*.dpth\n*.md5\n*.auxlock\n\n# todonotes\n*.tdo\n\n# xindy\n*.xdy\n\n# WinEdt\n*.bak\n*.sav\n*.DS_Store\n/data\n*/.idea/\n/output/\n/exp/\n/backup/\n\n# python\n__pycache__\n.pyc\n"
  },
  {
    "path": "Examples/cai_eas/README.md",
    "content": "# HPO for Deep Neural Networks\n\nDemonstration using https://github.com/han-cai/EAS\n\nThe HPO engine is integrated into the Auptimizer.\nThe running script is a modification of `client.py`.\n\nRun it as\n\n    cd eas\n    python -m aup experiment.json\n\nNotice that the start_nets is needed in this folder although the experiment is running in the eas folder\n"
  },
  {
    "path": "Examples/cai_eas/eas/client.py",
    "content": "#!/usr/bin/env python\n\"\"\"\nModified from https://github.com/han-cai/EAS\n\nThe file to run in the client side\nTrain the network and return the validation performance\n\"\"\"\nimport os\nfrom expdir_monitor.expdir_monitor import ExpdirMonitor\nimport time\nimport sys\nfrom aup import BasicConfig, print_result\nos.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'\n\n\ndef run(expdir):\n\tstart_time = time.time()\n\texpdir_monitor = ExpdirMonitor(expdir)\n\tvalid_performance = expdir_monitor.run(pure=True, restore=False)\n\tend_time = time.time()\n\tprint('running time: %s' % (end_time - start_time))\n\tprint('valid performance: %s' % valid_performance)\n\tprint_result(valid_performance)\n\n\ndef main():\n\tprint(\"Starting Client\")\n\tconfig = BasicConfig().load(sys.argv[1])\n\trun(config[\"expdir\"])\n\n\nif __name__ == \"__main__\":\n\ttry:\n\t\tmain()\n\texcept KeyboardInterrupt:\n\t\tpass\n"
  },
  {
    "path": "Examples/cai_eas/eas/data_providers/__init__.py",
    "content": ""
  },
  {
    "path": "Examples/cai_eas/eas/data_providers/base_provider.py",
    "content": "import numpy as np\n\n\nclass DataSet:\n\t\"\"\"Class to represent some dataset: train, validation, test\"\"\"\n\t\n\t@property\n\tdef num_examples(self):\n\t\t\"\"\"Return qtty of examples in dataset\"\"\"\n\t\traise NotImplementedError\n\t\n\tdef next_batch(self, batch_size):\n\t\t\"\"\"Return batch of required size of data, labels\"\"\"\n\t\traise NotImplementedError\n\n\nclass ImagesDataSet(DataSet):\n\t\"\"\"Dataset for images that provide some often used methods\"\"\"\n\t\n\t@staticmethod\n\tdef measure_mean_and_std(images):\n\t\t# for every channel in image\n\t\tmeans = []\n\t\tstds = []\n\t\t# for every channel in image(assume this is last dimension)\n\t\tfor ch in range(images.shape[-1]):\n\t\t\tmeans.append(np.mean(images[:, :, :, ch]))\n\t\t\tstds.append(np.std(images[:, :, :, ch]))\n\t\treturn means, stds\n\t\n\t@staticmethod\n\tdef shuffle_images_and_labels(images, labels):\n\t\trand_indexes = np.random.permutation(images.shape[0])\n\t\tshuffled_images = images[rand_indexes]\n\t\tshuffled_labels = labels[rand_indexes]\n\t\treturn shuffled_images, shuffled_labels\n\t\n\t@staticmethod\n\tdef normalize_images(images, normalization_type, meanstd=None):\n\t\t\"\"\"\n\t\tArgs:\n\t\t\timages: numpy 4D array\n\t\t\tnormalization_type: `str`, available choices:\n\t\t\t\t- divide_255\n\t\t\t\t- divide_256\n\t\t\t\t- by_channels\n\t\t\tmeanstd\n\t\t\"\"\"\n\t\tif normalization_type is not None:\n\t\t\tif normalization_type == 'divide_255':\n\t\t\t\timages = images / 255\n\t\t\telif normalization_type == 'divide_256':\n\t\t\t\timages = images / 256\n\t\t\telif normalization_type == 'by_channels':\n\t\t\t\timages = images.astype('float64')\n\t\t\t\t# for every channel in image(assume this is last dimension)\n\t\t\t\tmeans, stds = meanstd\n\t\t\t\tfor i in range(images.shape[-1]):\n\t\t\t\t\timages[:, :, :, i] = ((images[:, :, :, i] - means[i]) / stds[i])\n\t\t\telse:\n\t\t\t\traise Exception('Unknown type of normalization')\n\t\treturn images\n\t\n\t\nclass DataProvider:\n\t_SEED = 88\n\t\n\t@property\n\tdef data_shape(self):\n\t\t\"\"\"Return shape as python list of one data entry\"\"\"\n\t\traise NotImplementedError\n\t\n\t@property\n\tdef n_classes(self):\n\t\t\"\"\"Return `int` of num classes\"\"\"\n\t\traise NotImplementedError\n\t\n\tdef labels_to_one_hot(self, labels):\n\t\t\"\"\"Convert 1D array of labels to one hot representation\n\t\t\n\t\tArgs:\n\t\t\tlabels: 1D numpy array\n\t\t\"\"\"\n\t\tnew_labels = np.zeros((labels.shape[0], self.n_classes))\n\t\tnew_labels[range(labels.shape[0]), labels] = np.ones(labels.shape)\n\t\treturn new_labels\n\t\n\t@staticmethod\n\tdef labels_from_one_hot(labels):\n\t\t\"\"\"Convert 2D array of labels to 1D class based representation\n\t\t\n\t\tArgs:\n\t\t\tlabels: 2D numpy array\n\t\t\"\"\"\n\t\treturn np.argmax(labels, axis=1)\n"
  },
  {
    "path": "Examples/cai_eas/eas/data_providers/cifar.py",
    "content": "import tempfile\nimport os\nimport pickle\nimport random\n\nimport numpy as np\n\nfrom data_providers.base_provider import ImagesDataSet, DataProvider\nfrom data_providers.downloader import download_data_url\n\n\ndef augment_image(image, pad):\n\t\"\"\"Perform zero padding, randomly crop image to original size,\n\tmaybe mirror horizontally\"\"\"\n\tinit_shape = image.shape\n\tnew_shape = [init_shape[0] + pad * 2,\n\t\t\t\t init_shape[1] + pad * 2,\n\t\t\t\t init_shape[2]]\n\tzeros_padded = np.zeros(new_shape)\n\tzeros_padded[pad:init_shape[0] + pad, pad:init_shape[1] + pad, :] = image\n\t# randomly crop to original size\n\tinit_x = np.random.randint(0, pad * 2)\n\tinit_y = np.random.randint(0, pad * 2)\n\tcropped = zeros_padded[\n\t\t\t  init_x: init_x + init_shape[0],\n\t\t\t  init_y: init_y + init_shape[1],\n\t\t\t  :]\n\tflip = random.getrandbits(1)\n\tif flip:\n\t\tcropped = cropped[:, ::-1, :]\n\treturn cropped\n\n\ndef augment_all_images(initial_images, pad=4):\n\tnew_images = np.zeros(initial_images.shape)\n\tfor i in range(initial_images.shape[0]):\n\t\tnew_images[i] = augment_image(initial_images[i], pad)\n\treturn new_images\n\n\nclass CifarDataSet(ImagesDataSet):\n\tdef __init__(self, images, labels, n_classes, shuffle, normalization, augmentation, meanstd):\n\t\t\"\"\"\n\t\tArgs:\n\t\t\timages: 4D numpy array\n\t\t\tlabels: 2D or 1D numpy array\n\t\t\tn_classes: `int`, number of cifar classes - 10 or 100\n\t\t\tshuffle: `str` or None\n\t\t\t\tNone: no any shuffling\n\t\t\t\tonce_prior_train: shuffle train data only once prior train\n\t\t\t\tevery_epoch: shuffle train data prior every epoch\n\t\t\tnormalization: `str` or None\n\t\t\t\tNone: no any normalization\n\t\t\t\tdivide_255: divide all pixels by 255\n\t\t\t\tdivide_256: divide all pixels by 256\n\t\t\t\tby_channels: substract mean of every chanel and divide each\n\t\t\t\t\tchanel data by it's standard deviation\n\t\t\taugmentation: `bool`\n\t\t\"\"\"\n\t\tif shuffle is None:\n\t\t\tself.shuffle_every_epoch = False\n\t\telif shuffle == 'once_prior_train':\n\t\t\tself.shuffle_every_epoch = False\n\t\t\timages, labels = self.shuffle_images_and_labels(images, labels)\n\t\telif shuffle == 'every_epoch':\n\t\t\tself.shuffle_every_epoch = True\n\t\telse:\n\t\t\traise Exception('Unknown type of shuffling')\n\t\tself._batch_counter, self.epoch_images, self.epoch_labels = 0, None, None\n\t\t\n\t\tself.images = images\n\t\tself.labels = labels\n\t\tself.n_classes = n_classes\n\t\tself.augmentation = augmentation\n\t\tself.normalization = normalization\n\t\tself.meanstd = meanstd\n\t\tself.images = self.normalize_images(images, self.normalization, self.meanstd)\n\t\tself.start_new_epoch()\n\t\n\tdef start_new_epoch(self):\n\t\tself._batch_counter = 0\n\t\tif self.shuffle_every_epoch:\n\t\t\timages, labels = self.shuffle_images_and_labels(\n\t\t\t\tself.images, self.labels)\n\t\telse:\n\t\t\timages, labels = self.images, self.labels\n\t\tif self.augmentation:\n\t\t\timages = augment_all_images(images, pad=4)\n\t\tself.epoch_images = images\n\t\tself.epoch_labels = labels\n\t\n\t@property\n\tdef num_examples(self):\n\t\treturn self.labels.shape[0]\n\t\n\tdef next_batch(self, batch_size):\n\t\tstart = self._batch_counter * batch_size\n\t\tend = (self._batch_counter + 1) * batch_size\n\t\tself._batch_counter += 1\n\t\timages_slice = self.epoch_images[start: end]\n\t\tlabels_slice = self.epoch_labels[start: end]\n\t\tif images_slice.shape[0] != batch_size:\n\t\t\tself.start_new_epoch()\n\t\t\treturn self.next_batch(batch_size)\n\t\telse:\n\t\t\treturn images_slice, labels_slice\n\n\nclass CifarDataProvider(DataProvider):\n\t\"\"\"Abstract class for cifar readers\"\"\"\n\tdef __init__(self, save_path=None, validation_size=None, shuffle=None, normalization=None,\n\t\t\t\t one_hot=True, **kwargs):\n\t\t\"\"\"\n\t\tArgs:\n\t\t\tsave_path: `str`\n\t\t\tvalidation_set: `bool`.\n\t\t\tvalidation_split: `float` or None\n\t\t\t\tfloat: chunk of `train set` will be marked as `validation set`.\n\t\t\t\tNone: if 'validation set' == True, `validation set` will be\n\t\t\t\t\tcopy of `test set`\n\t\t\tshuffle: `str` or None\n\t\t\t\tNone: no any shuffling\n\t\t\t\tonce_prior_train: shuffle train data only once prior train\n\t\t\t\tevery_epoch: shuffle train data prior every epoch\n\t\t\tnormalization: `str` or None\n\t\t\t\tNone: no any normalization\n\t\t\t\tdivide_255: divide all pixels by 255\n\t\t\t\tdivide_256: divide all pixels by 256\n\t\t\t\tby_channels: substract mean of every chanel and divide each\n\t\t\t\t\tchanel data by it's standard deviation\n\t\t\tone_hot: `bool`, return laels one hot encoded\n\t\t\"\"\"\n\t\tself._save_path = save_path\n\t\tself.one_hot = one_hot\n\t\tdownload_data_url(self.data_url, self.save_path)\n\t\ttrain_fnames, test_fnames = self.get_filenames(self.save_path)\n\t\t\n\t\t# add train and validations datasets\n\t\timages, labels = self.read_cifar(train_fnames)\n\t\ttrain_meanstd = ImagesDataSet.measure_mean_and_std(images)\n\t\tif validation_size is not None:\n\t\t\tnp.random.seed(DataProvider._SEED)\n\t\t\trand_indexes = np.random.permutation(images.shape[0])\n\t\t\tvalid_indexes = rand_indexes[:validation_size]\n\t\t\ttrain_indexes = rand_indexes[validation_size:]\n\t\t\tself.train = CifarDataSet(\n\t\t\t\timages=images[train_indexes], labels=labels[train_indexes],\n\t\t\t\tn_classes=self.n_classes, shuffle=shuffle,\n\t\t\t\tnormalization=normalization,\n\t\t\t\taugmentation=self.data_augmentation, meanstd=train_meanstd)\n\t\t\tself.validation = CifarDataSet(\n\t\t\t\timages=images[valid_indexes], labels=labels[valid_indexes],\n\t\t\t\tn_classes=self.n_classes, shuffle=None,\n\t\t\t\tnormalization=normalization,\n\t\t\t\taugmentation=False, meanstd=train_meanstd)\n\t\telse:\n\t\t\tself.train = CifarDataSet(\n\t\t\t\timages=images, labels=labels,\n\t\t\t\tn_classes=self.n_classes, shuffle=shuffle,\n\t\t\t\tnormalization=normalization,\n\t\t\t\taugmentation=self.data_augmentation, meanstd=train_meanstd)\n\t\t\n\t\t# add test set\n\t\timages, labels = self.read_cifar(test_fnames)\n\t\tself.test = CifarDataSet(\n\t\t\timages=images, labels=labels,\n\t\t\tshuffle=None, n_classes=self.n_classes,\n\t\t\tnormalization=normalization,\n\t\t\taugmentation=False, meanstd=train_meanstd)\n\t\t\n\t\tif validation_size is None:\n\t\t\tself.validation = self.test\n\t\n\t@property\n\tdef save_path(self):\n\t\tif self._save_path is None:\n\t\t\tself._save_path = os.path.join(\n\t\t\t\ttempfile.gettempdir(), 'cifar%d' % self.n_classes)\n\t\treturn self._save_path\n\t\n\t@property\n\tdef data_url(self):\n\t\t\"\"\"Return url for downloaded data depends on cifar class\"\"\"\n\t\tdata_url = ('http://www.cs.toronto.edu/'\n\t\t\t\t\t'~kriz/cifar-%d-python.tar.gz' % self.n_classes)\n\t\treturn data_url\n\t\n\t@property\n\tdef data_shape(self):\n\t\treturn 32, 32, 3\n\t\n\t@property\n\tdef n_classes(self):\n\t\treturn self._n_classes\n\t\n\tdef get_filenames(self, save_path):\n\t\t\"\"\"Return two lists of train and test filenames for dataset\"\"\"\n\t\traise NotImplementedError\n\t\n\tdef read_cifar(self, filenames):\n\t\tif self.n_classes == 10:\n\t\t\tlabels_key = b'labels'\n\t\telif self.n_classes == 100:\n\t\t\tlabels_key = b'fine_labels'\n\t\t\n\t\timages_res = []\n\t\tlabels_res = []\n\t\tfor fname in filenames:\n\t\t\twith open(fname, 'rb') as f:\n\t\t\t\timages_and_labels = pickle.load(f, encoding='bytes')\n\t\t\timages = images_and_labels[b'data']\n\t\t\timages = images.reshape(-1, 3, 32, 32)\n\t\t\timages = images.swapaxes(1, 3).swapaxes(1, 2)\n\t\t\timages_res.append(images)\n\t\t\tlabels_res.append(images_and_labels[labels_key])\n\t\timages_res = np.vstack(images_res)\n\t\tlabels_res = np.hstack(labels_res)\n\t\tif self.one_hot:\n\t\t\tlabels_res = self.labels_to_one_hot(labels_res)\n\t\treturn images_res, labels_res\n\n\nclass Cifar10DataProvider(CifarDataProvider):\n\t_n_classes = 10\n\tdata_augmentation = False\n\t\n\tdef get_filenames(self, save_path):\n\t\tsub_save_path = os.path.join(save_path, 'cifar-10-batches-py')\n\t\ttrain_filenames = [\n\t\t\tos.path.join(\n\t\t\t\tsub_save_path,\n\t\t\t\t'data_batch_%d' % i) for i in range(1, 6)]\n\t\ttest_filenames = [os.path.join(sub_save_path, 'test_batch')]\n\t\treturn train_filenames, test_filenames\n\n\nclass Cifar100DataProvider(CifarDataProvider):\n\t_n_classes = 100\n\tdata_augmentation = False\n\t\n\tdef get_filenames(self, save_path):\n\t\tsub_save_path = os.path.join(save_path, 'cifar-100-python')\n\t\ttrain_filenames = [os.path.join(sub_save_path, 'train')]\n\t\ttest_filenames = [os.path.join(sub_save_path, 'test')]\n\t\treturn train_filenames, test_filenames\n\n\nclass Cifar10AugmentedDataProvider(Cifar10DataProvider):\n\t_n_classes = 10\n\tdata_augmentation = True\n\n\nclass Cifar100AugmentedDataProvider(Cifar100DataProvider):\n\t_n_classes = 100\n\tdata_augmentation = True\n\n"
  },
  {
    "path": "Examples/cai_eas/eas/data_providers/downloader.py",
    "content": "import sys\nimport os\nimport urllib.request\nimport tarfile\nimport zipfile\n\n\ndef report_download_progress(count, block_size, total_size):\n\tpct_complete = float(count * block_size) / total_size\n\tmsg = '\\r {0:.1%} already downloaded'.format(pct_complete)\n\tsys.stdout.write(msg)\n\tsys.stdout.flush()\n\n\ndef download_data_url(url, download_dir):\n\tfilename = url.split('/')[-1]\n\tfile_path = os.path.join(download_dir, filename)\n\t\n\tif not os.path.exists(file_path):\n\t\tos.makedirs(download_dir, exist_ok=True)\n\t\t\n\t\tprint('Download %s to %s' % (url, file_path))\n\t\tfile_path, _ = urllib.request.urlretrieve(\n\t\t\turl=url,\n\t\t\tfilename=file_path,\n\t\t\treporthook=report_download_progress)\n\t\t\n\t\tprint('\\nExtracting files')\n\t\tif file_path.endswith('.zip'):\n\t\t\tzipfile.ZipFile(file=file_path, mode='r').extractall(download_dir)\n\t\telif file_path.endswith(('.tar.gz', '.tgz')):\n\t\t\ttarfile.open(name=file_path, mode='r:gz').extractall(download_dir)\n"
  },
  {
    "path": "Examples/cai_eas/eas/data_providers/svhn.py",
    "content": "import tempfile\nimport os\nimport scipy.io\n\nimport numpy as np\n\nfrom data_providers.base_provider import ImagesDataSet, DataProvider\nfrom data_providers.downloader import download_data_url\n\n\nclass SVHNDataSet(ImagesDataSet):\n\tn_classes = 10\n\t\n\tdef __init__(self, images, labels, shuffle, normalization):\n\t\t\"\"\"\n\t\tArgs:\n\t\t\timages: 4D numpy array\n\t\t\tlabels: 2D or 1D numpy array\n\t\t\tshuffle: `bool`, should shuffle data or not\n\t\t\tnormalization: `str` or None\n\t\t\t\tNone: no any normalization\n\t\t\t\tdivide_255: divide all pixels by 255\n\t\t\t\tdivide_256: divide all pixels by 256\n\t\t\t\tby_channels: substract mean of every chanel and divide each\n\t\t\t\t\tchanel data by it's standard deviation\n\t\t\"\"\"\n\t\tself._batch_counter, self.epoch_images, self.epoch_labels = 0, None, None\n\t\t\n\t\tself.shuffle = shuffle\n\t\tself.images = images\n\t\tself.labels = labels\n\t\tself.normalization = normalization\n\t\tself.start_new_epoch()\n\t\n\tdef start_new_epoch(self):\n\t\tself._batch_counter = 0\n\t\tif self.shuffle:\n\t\t\tself.epoch_images, self.epoch_labels = self.shuffle_images_and_labels(\n\t\t\t\tself.images, self.labels)\n\t\telse:\n\t\t\tself.epoch_images, self.epoch_labels = self.images, self.labels\n\t\n\t@property\n\tdef num_examples(self):\n\t\treturn self.labels.shape[0]\n\t\n\tdef next_batch(self, batch_size):\n\t\tstart = self._batch_counter * batch_size\n\t\tend = (self._batch_counter + 1) * batch_size\n\t\tself._batch_counter += 1\n\t\timages_slice = self.epoch_images[start: end]\n\t\tlabels_slice = self.epoch_labels[start: end]\n\t\t# due to memory error it should be done inside batch\n\t\tif self.normalization is not None:\n\t\t\timages_slice = self.normalize_images(\n\t\t\t\timages_slice, self.normalization)\n\t\tif images_slice.shape[0] != batch_size:\n\t\t\tself.start_new_epoch()\n\t\t\treturn self.next_batch(batch_size)\n\t\telse:\n\t\t\treturn images_slice, labels_slice\n\n\nclass SVHNDataProvider(DataProvider):\n\tdef __init__(self, save_path=None, validation_size=None, shuffle=False, normalization=None,\n\t\t\t\t one_hot=True, include_extra=True, **kwargs):\n\t\t\"\"\"\n\t\tArgs:\n\t\t\tsave_path: `str`\n\t\t\tvalidation_set: `bool`.\n\t\t\tvalidation_split: `int` or None\n\t\t\t\tfloat: chunk of `train set` will be marked as `validation set`.\n\t\t\t\tNone: if 'validation set' == True, `validation set` will be\n\t\t\t\t\tcopy of `test set`\n\t\t\tshuffle: `bool`, should shuffle data or not\n\t\t\tnormalization: `str` or None\n\t\t\t\tNone: no any normalization\n\t\t\t\tdivide_255: divide all pixels by 255\n\t\t\t\tdivide_256: divide all pixels by 256\n\t\t\t\tby_chanels: substract mean of every chanel and divide each\n\t\t\t\t\tchanel data by it's standart deviation\n\t\t\tone_hot: `bool`, return lasels one hot encoded\n\t\t\"\"\"\n\t\tself._save_path = save_path\n\t\ttrain_images = []\n\t\ttrain_labels = []\n\t\tif include_extra:\n\t\t\ttrain_data_src = ['train', 'extra']\n\t\telse:\n\t\t\ttrain_data_src = ['train']\n\t\tfor part in train_data_src:\n\t\t\timages, labels = self.get_images_and_labels(part, one_hot)\n\t\t\ttrain_images.append(images)\n\t\t\ttrain_labels.append(labels)\n\t\ttrain_images = np.vstack(train_images)\n\t\tif one_hot:\n\t\t\ttrain_labels = np.vstack(train_labels)\n\t\telse:\n\t\t\ttrain_labels = np.hstack(train_labels)\n\t\tif validation_size is not None:\n\t\t\tnp.random.seed(DataProvider._SEED)\n\t\t\trand_indexes = np.random.permutation(train_images.shape[0])\n\t\t\tvalid_indexes = rand_indexes[:validation_size]\n\t\t\ttrain_indexes = rand_indexes[validation_size:]\n\t\t\tvalid_images, valid_labels = train_images[valid_indexes], train_labels[valid_indexes]\n\t\t\ttrain_images, train_labels = train_images[train_indexes], train_labels[train_indexes]\n\t\t\tself.validation = SVHNDataSet(\n\t\t\t\tvalid_images, valid_labels, False, normalization)\n\t\t\n\t\tself.train = SVHNDataSet(\n\t\t\ttrain_images, train_labels, shuffle, normalization)\n\t\t\n\t\ttest_images, test_labels = self.get_images_and_labels('test', one_hot)\n\t\tself.test = SVHNDataSet(test_images, test_labels, False, normalization)\n\t\t\n\t\tif validation_size is None:\n\t\t\tself.validation = self.test\n\t\n\tdef get_images_and_labels(self, name_part, one_hot=False):\n\t\turl = self.data_url + name_part + '_32x32.mat'\n\t\tdownload_data_url(url, self.save_path)\n\t\tfilename = os.path.join(self.save_path, name_part + '_32x32.mat')\n\t\tdata = scipy.io.loadmat(filename)\n\t\timages = data['X'].transpose(3, 0, 1, 2)\n\t\tlabels = data['y'].reshape((-1))\n\t\tlabels[labels == 10] = 0\n\t\tif one_hot:\n\t\t\tlabels = self.labels_to_one_hot(labels)\n\t\treturn images, labels\n\t\n\t@property\n\tdef n_classes(self):\n\t\treturn 10\n\t\n\t@property\n\tdef save_path(self):\n\t\tif self._save_path is None:\n\t\t\tself._save_path = os.path.join(tempfile.gettempdir(), 'svhn')\n\t\treturn self._save_path\n\t\n\t@property\n\tdef data_url(self):\n\t\treturn 'http://ufldl.stanford.edu/housenumbers/'\n\t\n\t@property\n\tdef data_shape(self):\n\t\treturn 32, 32, 3\n"
  },
  {
    "path": "Examples/cai_eas/eas/data_providers/utils.py",
    "content": "from data_providers.cifar import Cifar10DataProvider, Cifar100DataProvider, \\\n\tCifar10AugmentedDataProvider, Cifar100AugmentedDataProvider\nfrom data_providers.svhn import SVHNDataProvider\n\n\ndef get_data_provider_by_name(name, train_params):\n\t\"\"\"Return required data provider class\"\"\"\n\tif name == 'C10':\n\t\treturn Cifar10DataProvider(**train_params)\n\tif name == 'C10+':\n\t\treturn Cifar10AugmentedDataProvider(**train_params)\n\tif name == 'C100':\n\t\treturn Cifar100DataProvider(**train_params)\n\tif name == 'C100+':\n\t\treturn Cifar100AugmentedDataProvider(**train_params)\n\tif name == 'SVHN':\n\t\treturn SVHNDataProvider(**train_params)\n\telse:\n\t\tprint('Sorry, data provider for `%s` dataset '\n\t\t\t  'was not implemented yet' % name)\n\t\texit()\n"
  },
  {
    "path": "Examples/cai_eas/eas/expdir_monitor/__init__.py",
    "content": ""
  },
  {
    "path": "Examples/cai_eas/eas/expdir_monitor/expdir_monitor.py",
    "content": "import json\nimport os\nimport subprocess\nfrom models.utils import RunConfig, get_model_config_by_name, get_model_by_name\nfrom data_providers.utils import get_data_provider_by_name\nimport pickle\n\n\nclass ExpdirMonitor:\n\tdef __init__(self, expdir):\n\t\tself.expdir = os.path.realpath(expdir)\n\t\tos.makedirs(self.expdir, exist_ok=True)\n\n\t@property\n\tdef logs(self): return '%s/logs' % self.expdir\n\t\n\t@property\n\tdef checkpoint(self): return '%s/checkpoint' % self.expdir\n\t\n\t@property\n\tdef snapshot(self): return '%s/snapshot' % self.expdir\n\t\n\t@property\n\tdef output(self): return '%s/output' % self.expdir\n\t\n\t@property\n\tdef init(self): return '%s/init' % self.expdir\n\t\n\t@property\n\tdef run_config_path(self): return '%s/run.config' % self.expdir\n\t\n\t@property\n\tdef net_config_path(self): return '%s/net.config' % self.expdir\n\t\n\tdef load_run_config(self, print_info=False, dataset='C10+'):\n\t\tif os.path.isfile(self.run_config_path):\n\t\t\trun_config = json.load(open(self.run_config_path, 'r'))\n\t\telse:\n\t\t\tprint('Use Default Run Config for %s' % dataset)\n\t\t\trun_config = RunConfig.get_default_run_config(dataset)\n\t\tif print_info:\n\t\t\tprint('Run config:')\n\t\t\tfor k, v in run_config.items():\n\t\t\t\tprint('\\t%s: %s' % (k, v))\n\t\treturn RunConfig(**run_config)\n\t\n\tdef load_init(self):\n\t\tinit_path = '%s/init' % self.expdir\n\t\tif os.path.isfile(init_path):\n\t\t\treturn pickle.load(open(self.init, 'rb'))\n\t\telse:\n\t\t\treturn None\n\t\n\tdef load_net_config(self, init, print_info=False):\n\t\tassert os.path.isfile(self.net_config_path), \\\n\t\t\t'Net configs do not exist in the given expdir <%s>' % self.expdir\n\t\tnet_config_json = json.load(open(self.net_config_path, 'r'))\n\t\tnet_config = get_model_config_by_name(net_config_json['name'])()\n\t\tnet_config.set_net_from_config(net_config_json, init=init, print_info=print_info)\n\t\treturn net_config, net_config_json['name']\n\t\n\tdef run(self, pure=True, restore=False, test=False, valid=False, valid_size=-1):\n\t\tif not restore:\n\t\t\t_clear_files = ['logs', 'checkpoint', 'snapshot', 'output']\n\t\t\tfor file in _clear_files:\n\t\t\t\tsubprocess.run(['rm', '-rf', os.path.join(self.expdir, file)])\n\t\tinit = self.load_init()\n\t\tdataset = 'C10+' if init is None else init.get('dataset', 'C10+')\n\t\trun_config = self.load_run_config(print_info=(not pure), dataset=dataset)\n\t\trun_config.renew_logs = False\n\t\tif valid_size > 0:\n\t\t\trun_config.validation_size = valid_size\n\n\t\t\n\t\tdata_provider = get_data_provider_by_name(run_config.dataset, run_config.get_config())\n\t\tnet_config, model_name = self.load_net_config(init, print_info=(not pure))\n\t\tmodel = get_model_by_name(model_name)(self.expdir, data_provider, run_config, net_config, pure=pure)\n\t\tstart_epoch = 1\n\t\tif restore:\n\t\t\tmodel.load_model()\n\t\t\tepoch_info_file = '%s/checkpoint/epoch.info' % self.expdir\n\t\t\tif os.path.isfile(epoch_info_file):\n\t\t\t\tstart_epoch = json.load(open(epoch_info_file, 'r'))['epoch']\n\t\t\t\tif not pure:\n\t\t\t\t\tprint('start epoch: %d' % start_epoch)\n\t\tif test:\n\t\t\tprint('Testing...')\n\t\t\tloss, accuracy = model.test(data_provider.test, batch_size=200)\n\t\t\tprint('mean cross_entropy: %f, mean accuracy: %f' % (loss, accuracy))\n\t\t\tjson.dump({'test_loss': '%s' % loss, 'test_acc': '%s' % accuracy}, open(self.output, 'w'))\n\t\telif valid:\n\t\t\tprint('validating...')\n\t\t\tloss, accuracy = model.test(data_provider.validation, batch_size=200)\n\t\t\tprint('mean cross_entropy: %f, mean accuracy: %f' % (loss, accuracy))\n\t\t\tjson.dump({'valid_loss': '%s' % loss, 'valid_acc': '%s' % accuracy}, open(self.output, 'w'))\n\t\telif pure:\n\t\t\tmodel.pure_train()\n\t\t\tloss, accuracy = model.test(data_provider.validation, batch_size=200)\n\t\t\tjson.dump({'valid_loss': '%s' % loss, 'valid_acc': '%s' % accuracy}, open(self.output, 'w'))\n\t\t\tmodel.save_init(self.snapshot, print_info=(not pure))\n\t\t\tmodel.save_config(self.expdir, print_info=(not pure))\n\t\telse:\n\t\t\t# train the model\n\t\t\tprint('Data provider train images: ', data_provider.train.num_examples)\n\t\t\tmodel.train_all_epochs(start_epoch)\n\t\t\tprint('Data provider test images: ', data_provider.test.num_examples)\n\t\t\tprint('Testing...')\n\t\t\tloss, accuracy = model.test(data_provider.test, batch_size=200)\n\t\t\tprint('mean cross_entropy: %f, mean accuracy: %f' % (loss, accuracy))\n\t\t\tjson.dump({'test_loss': '%s' % loss, 'test_acc': '%s' % accuracy}, open(self.output, 'w'))\n\t\t\tmodel.save_init(self.snapshot, print_info=(not pure))\n\t\t\tmodel.save_config(self.expdir, print_info=(not pure))\n\t\treturn accuracy\n"
  },
  {
    "path": "Examples/cai_eas/eas/experiment.json",
    "content": "{\n  \"name\": \"./cai_eas/eas/experiment.json\",\n  \"proposer\": \"eas\",\n  \"script\": \"client.py\",\n  \"resource\": \"gpu\",\n  \"n_parallel\": 2,\n  \"parameter_config\": [\n  ],\n  \"target\":\"max\"\n}\n"
  },
  {
    "path": "Examples/cai_eas/eas/models/__init__.py",
    "content": ""
  },
  {
    "path": "Examples/cai_eas/eas/models/basic_model.py",
    "content": "import os\nimport shutil\nimport tensorflow as tf\nimport numpy as np\nimport time\nfrom datetime import timedelta\nimport json\nimport pickle\n\t\n\nclass BasicModel:\n\tdef __init__(self, path, data_provider, run_config, net_config, pure=False, only_forward=False):\n\t\tif only_forward: pure = True\n\t\tself.graph = tf.Graph()\n\t\t\n\t\tself.data_provider = data_provider\n\t\tself._path = path\n\t\tself.run_config = run_config\n\t\tself.net_config = net_config\n\t\t\n\t\tself.data_shape = data_provider.data_shape\n\t\tself.n_classes = data_provider.n_classes\n\t\t\n\t\tself._save_path, self._logs_path = None, None\n\t\tself.batches_step = 0\n\t\t\n\t\tself.cross_entropy, self.train_step, self.accuracy = None, None, None\n\t\twith self.graph.as_default():\n\t\t\tself._define_inputs()\n\t\t\tself._build_graph(only_forward=only_forward)\n\t\t\tself.global_variables_initializer = tf.global_variables_initializer()\n\t\t\tif not pure:\n\t\t\t\tself._count_trainable_params()\n\t\t\t\tself.saver = tf.train.Saver()\n\t\tself._initialize_session(set_logs=(not pure))\n\t\n\t@property\n\tdef save_path(self):\n\t\tif self._save_path is None:\n\t\t\tsave_path = '%s/checkpoint' % self._path\n\t\t\tos.makedirs(save_path, exist_ok=True)\n\t\t\tsave_path = os.path.join(save_path, 'model.ckpt')\n\t\t\tself._save_path = save_path\n\t\treturn self._save_path\n\t\n\t@property\n\tdef logs_path(self):\n\t\tif self._logs_path is None:\n\t\t\tlogs_path = '%s/logs' % self._path\n\t\t\tif self.run_config.renew_logs:\n\t\t\t\tshutil.rmtree(logs_path, ignore_errors=True)\n\t\t\tos.makedirs(logs_path, exist_ok=True)\n\t\t\tself._logs_path = logs_path\n\t\treturn self._logs_path\n\t\n\tdef _build_graph(self, only_forward=False):\n\t\traise NotImplementedError\n\t\n\tdef _define_inputs(self):\n\t\tshape = [None]\n\t\tshape.extend(self.data_shape)\n\t\tself.images = tf.placeholder(\n\t\t\ttf.float32,\n\t\t\tshape=shape,\n\t\t\tname='input_images')\n\t\tself.labels = tf.placeholder(\n\t\t\ttf.float32,\n\t\t\tshape=[None, self.n_classes],\n\t\t\tname='labels')\n\t\tself.learning_rate = tf.placeholder(\n\t\t\ttf.float32,\n\t\t\tshape=[],\n\t\t\tname='learning_rate')\n\t\tself.is_training = tf.placeholder(tf.bool, shape=[], name='is_training')\n\t\t\n\tdef _initialize_session(self, set_logs=True):\n\t\t\"\"\"Initialize session, variables\"\"\"\n\t\tconfig = tf.ConfigProto()\n\t\t# restrict model GPU memory utilization to min required\n\t\tconfig.gpu_options.allow_growth = True\n\t\tself.sess = tf.Session(graph=self.graph, config=config)\n\t\t\n\t\tself.sess.run(self.global_variables_initializer)\n\t\tif set_logs:\n\t\t\tlogswriter = tf.summary.FileWriter\n\t\t\tself.summary_writer = logswriter(self.logs_path, graph=self.graph)\n\t\n\tdef train_all_epochs(self, start_epoch=1):\n\t\tn_epochs = self.run_config.n_epochs\n\t\tlearning_rate = self.run_config.init_lr\n\t\tbatch_size = self.run_config.batch_size\n\t\t\n\t\ttotal_start_time = time.time()\n\t\tfor epoch in range(start_epoch, n_epochs + 1):\n\t\t\tprint('\\n', '-' * 30, 'Train epoch: %d' % epoch, '-' * 30, '\\n')\n\t\t\tstart_time = time.time()\n\t\t\tnew_lr = self.run_config.learning_rate(epoch)\n\t\t\tif new_lr != learning_rate:\n\t\t\t\tlearning_rate = new_lr\n\t\t\t\tprint('Decrease learning rate, new lr = %f' % learning_rate)\n\t\t\t\n\t\t\tprint('Training...')\n\t\t\tloss, acc = self.train_one_epoch(\n\t\t\t\tself.data_provider.train, batch_size, learning_rate)\n\t\t\t# save logs about \"loss\" and \"acc\" if the option is true\n\t\t\tif self.run_config.should_save_logs:\n\t\t\t\tself.log_loss_accuracy(loss, acc, epoch, prefix='train')\n\t\t\t\n\t\t\tif self.run_config.validation_frequency and epoch % self.run_config.validation_frequency == 0:\n\t\t\t\tprint('Validation...')\n\t\t\t\tloss, acc = self.test(self.data_provider.validation, batch_size)\n\t\t\t\tif self.run_config.should_save_logs:\n\t\t\t\t\tself.log_loss_accuracy(loss, acc, epoch, prefix='valid')\n\t\t\t\tif self.run_config.should_save_model:\n\t\t\t\t\tself.save_model()\n\t\t\t\t\tjson.dump({'epoch': epoch + 1}, open('%s/checkpoint/epoch.info' % self._path, 'w'))\n\t\t\t\n\t\t\ttime_per_epoch = time.time() - start_time\n\t\t\tseconds_left = int((n_epochs - epoch) * time_per_epoch)\n\t\t\tprint('Time per epoch: %s, Est. complete in: %s' % (\n\t\t\t\tstr(timedelta(seconds=time_per_epoch)),\n\t\t\t\tstr(timedelta(seconds=seconds_left))))\n\t\t\n\t\tif self.run_config.should_save_model:\n\t\t\tself.save_model()\n\t\t\n\t\ttotal_training_time = time.time() - total_start_time\n\t\tprint('\\nTotal training time: %s' % str(timedelta(\n\t\t\tseconds=total_training_time)))\n\t\n\tdef train_one_epoch(self, data, batch_size, learning_rate):\n\t\tnum_examples = data.num_examples\n\t\ttotal_loss = []\n\t\ttotal_accuracy = []\n\t\tfor i in range(num_examples // batch_size):\n\t\t\tbatch = data.next_batch(batch_size)\n\t\t\timages, labels = batch\n\t\t\tfeed_dict = {\n\t\t\t\tself.images: images,\n\t\t\t\tself.labels: labels,\n\t\t\t\tself.learning_rate: learning_rate,\n\t\t\t\tself.is_training: True,\n\t\t\t}\n\t\t\tfetches = [self.train_step, self.cross_entropy, self.accuracy]\n\t\t\tresult = self.sess.run(fetches, feed_dict=feed_dict)\n\t\t\t_, loss, accuracy = result\n\t\t\ttotal_loss.append(loss)\n\t\t\ttotal_accuracy.append(accuracy)\n\t\t\t# save logs about \"loss\" and \"acc\" if the option is true\n\t\t\tif self.run_config.should_save_logs:\n\t\t\t\tself.batches_step += 1\n\t\t\t\tself.log_loss_accuracy(\n\t\t\t\t\tloss, accuracy, self.batches_step, prefix='per_batch',\n\t\t\t\t\tshould_print=False)\n\t\tmean_loss = np.mean(total_loss)\n\t\tmean_accuracy = np.mean(total_accuracy)\n\t\treturn mean_loss, mean_accuracy\n\t\n\tdef test(self, data, batch_size):\n\t\tnum_examples = data.num_examples\n\t\ttotal_loss = []\n\t\ttotal_accuracy = []\n\t\tfor i in range(num_examples // batch_size):\n\t\t\tbatch = data.next_batch(batch_size)\n\t\t\tfeed_dict = {\n\t\t\t\tself.images: batch[0],\n\t\t\t\tself.labels: batch[1],\n\t\t\t\tself.is_training: False,\n\t\t\t}\n\t\t\tfetches = [self.cross_entropy, self.accuracy]\n\t\t\tloss, accuracy = self.sess.run(fetches, feed_dict=feed_dict)\n\t\t\ttotal_loss.append(loss)\n\t\t\ttotal_accuracy.append(accuracy)\n\t\tmean_loss = np.mean(total_loss)\n\t\tmean_accuracy = np.mean(total_accuracy)\n\t\tremain_num = num_examples % batch_size\n\t\tif remain_num != 0:\n\t\t\tbatch = data.next_batch(remain_num)\n\t\t\tfeed_dict = {\n\t\t\t\tself.images: batch[0],\n\t\t\t\tself.labels: batch[1],\n\t\t\t\tself.is_training: False,\n\t\t\t}\n\t\t\tfetches = [self.cross_entropy, self.accuracy]\n\t\t\tloss, accuracy = self.sess.run(fetches, feed_dict=feed_dict)\n\t\t\t\n\t\t\tmean_loss = (mean_loss * (num_examples - remain_num) + loss * remain_num) / num_examples\n\t\t\tmean_accuracy = (mean_accuracy * (num_examples - remain_num) + accuracy * remain_num) / num_examples\n\t\treturn mean_loss, mean_accuracy\n\t\n\tdef save_config(self, save_path, print_info=True):\n\t\tos.makedirs(save_path, exist_ok=True)\n\t\tnet_save_path = os.path.join(save_path, 'net.config')\n\t\tjson.dump(self.net_config.get_config(), open(net_save_path, 'w'), indent=4)\n\t\tif print_info: print('Network configs dump to %s' % save_path)\n\t\trun_save_path = os.path.join(save_path, 'run.config')\n\t\tjson.dump(self.run_config.get_config(), open(run_save_path, 'w'), indent=4)\n\t\tif print_info: print('Run configs dump to %s' % run_save_path)\n\t\n\tdef save_init(self, save_path, print_info=True):\n\t\tos.makedirs(save_path, exist_ok=True)\n\t\tsave_path = os.path.join(save_path, 'init')\n\t\tto_save_init = self.net_config.renew_init(self)\n\t\tto_save_init['dataset'] = self.run_config.dataset\n\t\tpickle.dump(to_save_init, open(save_path, 'wb'))\n\t\tif print_info: print('Network weights dump to %s' % save_path)\n\t\n\tdef pure_train(self):\n\t\tn_epochs = self.run_config.n_epochs\n\t\tbatch_size = self.run_config.batch_size\n\n\t\tfor epoch in range(1, n_epochs + 1):\n\t\t\tlearning_rate = self.run_config.learning_rate(epoch)\n\t\t\t\n\t\t\t# train one epoch\n\t\t\tdata = self.data_provider.train\n\t\t\tnum_examples = data.num_examples\n\t\t\tfor i in range(num_examples // batch_size):\n\t\t\t\tbatch = data.next_batch(batch_size)\n\t\t\t\timages, labels = batch\n\t\t\t\tfeed_dict = {\n\t\t\t\t\tself.images: images,\n\t\t\t\t\tself.labels: labels,\n\t\t\t\t\tself.learning_rate: learning_rate,\n\t\t\t\t\tself.is_training: True,\n\t\t\t\t}\n\t\t\t\tfetches = self.train_step\n\t\t\t\tself.sess.run(fetches, feed_dict=feed_dict)\n\t\n\tdef save_model(self, global_step=None):\n\t\tself.saver.save(self.sess, self.save_path, global_step=global_step)\n\t\n\tdef load_model(self):\n\t\ttry:\n\t\t\tself.saver.restore(self.sess, self.save_path)\n\t\texcept Exception:\n\t\t\traise IOError('Failed to to load model '\n\t\t\t\t\t\t  'from save path: %s' % self.save_path)\n\t\tprint('Successfully load model from save path: %s' % self.save_path)\n\t\n\tdef log_loss_accuracy(self, loss, accuracy, epoch, prefix, should_print=True, write2file=True):\n\t\tif should_print:\n\t\t\tprint('mean cross_entropy: %f, mean accuracy: %f' % (loss, accuracy))\n\t\tsummary = tf.Summary(value=[\n\t\t\ttf.Summary.Value(\n\t\t\t\ttag='loss_%s' % prefix, simple_value=float(loss)),\n\t\t\ttf.Summary.Value(\n\t\t\t\ttag='accuracy_%s' % prefix, simple_value=float(accuracy))\n\t\t])\n\t\tself.summary_writer.add_summary(summary, epoch)\n\t\tif write2file and prefix == 'valid':\n\t\t\twith open('%s/console.txt' % self.logs_path, 'a') as fout:\n\t\t\t\tfout.write('%d: mean cross_entropy: %f, mean accuracy: %f\\n' % (epoch, loss, accuracy))\n\t\n\t@staticmethod\n\tdef _count_trainable_params():\n\t\ttotal_parameters = 0\n\t\tfor variable in tf.trainable_variables():\n\t\t\tshape = variable.get_shape()\n\t\t\tvariable_parameters = 1\n\t\t\tfor dim in shape:\n\t\t\t\tvariable_parameters *= dim.value\n\t\t\ttotal_parameters += variable_parameters\n\t\tprint('Total training params: %.2fM' % (total_parameters / 1e6))\n\t\n\t@staticmethod\n\tdef dropout(_input, keep_prob, is_training):\n\t\tif keep_prob < 1:\n\t\t\toutput = tf.cond(\n\t\t\t\tis_training,\n\t\t\t\tlambda: tf.nn.dropout(_input, keep_prob),\n\t\t\t\tlambda: _input\n\t\t\t)\n\t\telse:\n\t\t\toutput = _input\n\t\treturn output\n\t\n\t@staticmethod\n\tdef weight_variable(shape, name, initializer):\n\t\treturn tf.get_variable(\n\t\t\tname,\n\t\t\tshape=shape,\n\t\t\tinitializer=initializer,\n\t\t)\n\t\t\n\t@staticmethod\n\tdef avg_pool(_input, k=2, s=2):\n\t\tksize = [1, k, k, 1]\n\t\tstrides = [1, s, s, 1]\n\t\tpadding = 'VALID'\n\t\t# if stride = 1, keep the image size unchanged\n\t\tif s == 1: padding = 'SAME'\n\t\toutput = tf.nn.avg_pool(_input, ksize, strides, padding)\n\t\treturn output\n\t\n\t@staticmethod\n\tdef max_pool(_input, k=2, s=2):\n\t\tksize = [1, k, k, 1]\n\t\tstrides = [1, s, s, 1]\n\t\tpadding = 'VALID'\n\t\t# if stride = 1, keep the image size unchanged\n\t\tif s == 1: padding = 'SAME'\n\t\toutput = tf.nn.max_pool(_input, ksize, strides, padding)\n\t\treturn output\n\n\t@staticmethod\n\tdef conv2d(_input, out_features, kernel_size, strides=1, padding='SAME', param_initializer=None):\n\t\tif kernel_size == 1: padding = 'VALID'\n\t\t\n\t\tin_features = int(_input.get_shape()[-1])\n\t\tif not param_initializer: param_initializer = {}\n\t\tkernel = BasicModel.weight_variable(\n\t\t\t[kernel_size, kernel_size, in_features, out_features],\n\t\t\tname='kernel',\n\t\t\tinitializer=param_initializer.get('kernel', tf.contrib.layers.variance_scaling_initializer())\n\t\t)\n\t\toutput = tf.nn.conv2d(_input, kernel, [1, strides, strides, 1], padding)\n\t\treturn output\n\t\n\t@staticmethod\n\tdef fc_layer(_input, out_units, use_bias=False, param_initializer=None):\n\t\tfeatures_total = int(_input.get_shape()[-1])\n\t\tif not param_initializer: param_initializer = {}\n\t\tW = BasicModel.weight_variable(\n\t\t\t[features_total, out_units], name='W',\n\t\t\tinitializer=param_initializer.get('W', tf.contrib.layers.xavier_initializer())\n\t\t)\n\t\toutput = tf.matmul(_input, W)\n\t\tif use_bias:\n\t\t\tbias = BasicModel.weight_variable(\n\t\t\t\t[out_units], name='bias',\n\t\t\t\tinitializer=param_initializer.get('bias', tf.constant_initializer([0.0] * out_units))\n\t\t\t)\n\t\t\toutput += bias\n\t\treturn output\n\t\t\n\t@staticmethod\n\tdef batch_norm(_input, is_training, epsilon=1e-3, decay=0.999, param_initializer=None):\n\t\toutput = tf.contrib.layers.batch_norm(\n\t\t\t_input, scale=True, is_training=is_training, param_initializers=param_initializer,\n\t\t\tupdates_collections=None, epsilon=epsilon, decay=decay)\n\t\treturn output\n\n\t@staticmethod\n\tdef activation(_input, activation='relu'):\n\t\tif activation == 'relu':\n\t\t\treturn tf.nn.relu(_input)\n\t\telif activation == 'tanh':\n\t\t\treturn tf.tanh(_input)\n\t\telif activation == 'sigmoid':\n\t\t\treturn tf.sigmoid(_input)\n\t\telif activation == 'softmax':\n\t\t\treturn tf.nn.softmax(_input)\n\t\telif activation is None:\n\t\t\treturn _input\n\t\telse:\n\t\t\traise ValueError('Do not support %s' % activation)\n\n\t@staticmethod\n\tdef build_optimizer(learning_rate, opt_name, opt_param):\n\t\tif opt_name == 'momentum':\n\t\t\treturn tf.train.MomentumOptimizer(learning_rate, **opt_param)\n\t\telif opt_name == 'adam':\n\t\t\treturn tf.train.AdamOptimizer(learning_rate, **opt_param)\n\t\telse:\n\t\t\traise ValueError('Do not support the optimizer type: %s' % opt_name)\n\t\n\t@staticmethod\n\tdef flatten(_input):\n\t\tinput_shape = _input.shape.as_list()\n\t\tif len(input_shape) != 2:\n\t\t\treturn tf.reshape(_input, [-1, np.prod(input_shape[1:])])\n\t\telse:\n\t\t\treturn _input\n"
  },
  {
    "path": "Examples/cai_eas/eas/models/convnet.py",
    "content": "from models.basic_model import BasicModel\nfrom data_providers.base_provider import DataProvider\nfrom models.layers import ConvLayer, PoolLayer, FCLayer\nfrom models.layer_cascade import LayerCascade\nimport tensorflow as tf\nimport numpy as np\n\n\nclass SimpleConvnetConfig:\n\tdef __init__(self):\n\t\tself.net_config = {\n\t\t\t'weight_decay': None,\n\t\t\t'bn_epsilon': None,\n\t\t\t'bn_decay': None,\n\t\t\t'drop_scheme': None,\n\t\t}\n\t\tself.layer_cascade = None\n\t\n\t@property\n\tdef weight_decay(self): return self.net_config['weight_decay']\n\t\n\t@property\n\tdef bn_epsilon(self): return self.net_config['bn_epsilon']\n\t\n\t@property\n\tdef bn_decay(self): return self.net_config['bn_decay']\n\t\n\t@property\n\tdef drop_scheme(self): return self.net_config['drop_scheme']\n\t\n\t@property\n\tdef depth(self): return self.layer_cascade.depth\n\t\n\tdef get_config(self):\n\t\treturn {\n\t\t\t'name': 'SimpleConvnet',\n\t\t\t**self.net_config,\n\t\t\t'layer_cascade': self.layer_cascade.get_config()\n\t\t}\n\n\tdef copy(self):\n\t\tnet_config = SimpleConvnetConfig()\n\t\tnet_config.set_net_from_config(self.get_config(), self.renew_init(None), print_info=False)\n\t\treturn net_config\n\t\n\tdef renew_init(self, convnet):\n\t\treturn {\n\t\t\t'layer_cascade': self.layer_cascade.renew_init(convnet)\n\t\t}\n\t\n\tdef set_standard_convnet(self, data_provider: DataProvider, conv_blocks_config, fc_block_config, weight_decay,\n\t\t\t\t\t\t\t drop_scheme, bn_epsilon, bn_decay, print_info=True, **kwargs):\n\t\tself.net_config = {\n\t\t\t'weight_decay': weight_decay,\n\t\t\t'bn_epsilon': bn_epsilon,\n\t\t\t'bn_decay': bn_decay,\n\t\t\t'drop_scheme': drop_scheme,\n\t\t}\n\t\t\n\t\timage_size = data_provider.data_shape[0]\n\t\t\n\t\tlayers = []\n\t\tconv_id = 0\n\t\tfor _i, block_config in enumerate(conv_blocks_config):\n\t\t\tnum_layers, kernel_size, filter_num = block_config\n\t\t\tfor _j in range(num_layers):\n\t\t\t\tkeep_prob = 1.0\n\t\t\t\tif 'conv' in drop_scheme['type']:\n\t\t\t\t\tkeep_prob = 1.0 if _i + _j == 0 else drop_scheme.get('conv_drop', 1.0)\n\t\t\t\tconv_layer = ConvLayer('conv_%d' % conv_id, filter_num, kernel_size=kernel_size, keep_prob=keep_prob,\n\t\t\t\t\t\t\t\t\t   pre_activation=False)\n\t\t\t\tconv_id += 1\n\t\t\t\tlayers.append(conv_layer)\n\t\t\tif _i < len(conv_blocks_config) - 1:\n\t\t\t\tkeep_prob = 1.0\n\t\t\t\tif 'pool' in drop_scheme['type']:\n\t\t\t\t\tkeep_prob = drop_scheme.get('pool_drop', 1.0)\n\t\t\t\tpool_layer = PoolLayer('pool_%d' % _i, 'max', keep_prob=keep_prob, pre_activation=False)\n\t\t\t\tlayers.append(pool_layer)\n\t\t\t\timage_size = image_size // 2\n\t\tglobal_avg_pool = PoolLayer('pool_%d' % len(conv_blocks_config), 'avg',\n\t\t\t\t\t\t\t\t\tkernel_size=image_size, strides=image_size, pre_activation=False)\n\t\tlayers.append(global_avg_pool)\n\t\tfor _i, units in enumerate(fc_block_config):\n\t\t\tkeep_prob = 1.0\n\t\t\tif 'fc' in drop_scheme['type']:\n\t\t\t\tkeep_prob = drop_scheme.get('fc_drop', 1.0)\n\t\t\tfc_layer = FCLayer('fc_%d' % _i, units, keep_prob=keep_prob)\n\t\t\tlayers.append(fc_layer)\n\t\tfinal_fc_layer = FCLayer('fc_%d' % len(fc_block_config), data_provider.n_classes, use_bn=False, use_bias=True,\n\t\t\t\t\t\t\t\t activation=None)\n\t\tlayers.append(final_fc_layer)\n\t\tself.layer_cascade = LayerCascade('SimpleConvNet', layers)\n\t\t\n\t\tif print_info:\n\t\t\tpass\n\t\treturn self\n\t\n\tdef set_net_from_config(self, net_config_json, init=None, print_info=True):\n\t\tfor key in self.net_config.keys():\n\t\t\tself.net_config[key] = net_config_json[key]\n\t\tinit = init['layer_cascade'] if init is not None else None\n\t\tself.layer_cascade = LayerCascade.set_from_config(net_config_json['layer_cascade'], init)\n\t\tif print_info:\n\t\t\tpass\n\t\treturn self\n\t\n\tdef widen(self, layer_idx, new_width, widen_type='output_dim', noise=None):\n\t\tchange_out_dim, _, _ = self.layer_cascade.widen(layer_idx, new_width, widen_type, noise)\n\t\tif change_out_dim:\n\t\t\traise ValueError('Can not change the final logits number')\n\t\n\tdef deepen(self, layer_idx, new_layer_config):\n\t\treturn self.layer_cascade.deepen(layer_idx, new_layer_config, None)\n\t\n\tdef set_identity4deepen(self, to_set_layers, data_provider, batch_size, batch_num=1, strict=True, noise=None):\n\t\t\"\"\"\n\t\tto_set_layers = [(new_layer, prev_layer), ...]\n\t\t\"\"\"\n\t\ttask_list = {}\n\t\tfor new_layer, prev_layer in to_set_layers:\n\t\t\tif new_layer.ready: continue\n\t\t\tif new_layer.use_bn and strict:\n\t\t\t\ttask_id = id(prev_layer)\n\t\t\t\tif task_id in task_list:\n\t\t\t\t\ttask_list[task_id][1].append(new_layer)\n\t\t\t\telse:\n\t\t\t\t\ttask_list[task_id] = (prev_layer, [new_layer])\n\t\t\telse:\n\t\t\t\tnew_layer.set_identity_layer(strict=strict, noise=noise)\n\t\tif len(task_list) > 0:\n\t\t\tmodel = SimpleConvnet(None, data_provider, None, net_config=self, only_forward=True)\n\t\t\ttask_list = list(task_list.values())\n\t\t\tfetches = [prev_layer.output_op for prev_layer, _ in task_list]\n\t\t\tstatistics = [[0, 0] for _ in task_list]\n\t\t\tfor _i in range(batch_num):\n\t\t\t\tinput_images, _ = data_provider.train.next_batch(batch_size)\n\t\t\t\toutputs = model.sess.run(fetches, feed_dict={model.images: input_images, model.is_training: False})\n\t\t\t\tfor _j, out in enumerate(outputs):\n\t\t\t\t\tout = out.astype('float32')\n\t\t\t\t\taxis = tuple(range(len(out.shape) - 1))\n\t\t\t\t\tmean = np.mean(out, axis=axis, keepdims=True)\n\t\t\t\t\tvariance = np.mean(np.square(out - mean), axis=axis, keepdims=True)\n\t\t\t\t\tmean, variance = np.squeeze(mean), np.squeeze(variance)\n\t\t\t\t\tstatistics[_j][0] += mean\n\t\t\t\t\tstatistics[_j][1] += variance\n\t\t\tfor _j, (prev_layer, new_layers) in enumerate(task_list):\n\t\t\t\tmean, variance = statistics[_j][0] / batch_num, statistics[_j][1] / batch_num\n\t\t\t\tfor new_layer in new_layers:\n\t\t\t\t\tif new_layer.ready: continue\n\t\t\t\t\tparam = {\n\t\t\t\t\t\t'moving_mean': mean,\n\t\t\t\t\t\t'moving_variance': variance,\n\t\t\t\t\t\t'epsilon': self.bn_epsilon,\n\t\t\t\t\t}\n\t\t\t\t\tnew_layer.set_identity_layer(strict=strict, param=param, noise=noise)\n\t\n\t\nclass SimpleConvnet(BasicModel):\n\tdef _build_graph(self, only_forward=False):\n\t\t_input = self.images\n\t\toutput = _input\n\t\t\n\t\toutput = self.net_config.layer_cascade.build(output, self, store_output_op=only_forward)\n\t\t\n\t\tif not only_forward:\n\t\t\tlogits = output\n\t\t\twith tf.variable_scope('L2_Loss'):\n\t\t\t\tl2_loss = tf.add_n([tf.nn.l2_loss(var) for var in tf.trainable_variables()])\n\t\t\t\n\t\t\tprediction = tf.nn.softmax(logits)\n\t\t\t\n\t\t\t# losses\n\t\t\tcross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(\n\t\t\t\tlogits=logits, labels=self.labels))\n\t\t\tself.cross_entropy = cross_entropy\n\t\t\t\n\t\t\t# optimizer and train step\n\t\t\toptimizer = self.build_optimizer(self.learning_rate,\n\t\t\t\t\t\t\t\t\t\t\t self.run_config.opt_config[0], self.run_config.opt_config[1])\n\t\t\tself.train_step = optimizer.minimize(\n\t\t\t\tcross_entropy + l2_loss * self.net_config.weight_decay)\n\t\t\tcorrect_prediction = tf.equal(\n\t\t\t\ttf.argmax(prediction, 1),\n\t\t\t\ttf.argmax(self.labels, 1))\n\t\t\tself.accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))\n"
  },
  {
    "path": "Examples/cai_eas/eas/models/dense_net.py",
    "content": "import tensorflow as tf\nfrom models.basic_model import BasicModel\nfrom models.layers import ConvLayer, FCLayer, PoolLayer, get_magnifier, apply_noise\nfrom data_providers.base_provider import DataProvider\nfrom models.layer_cascade import LayerCascade\nfrom models.layer_multi_branch import LayerMultiBranch\nimport numpy as np\n\n\ndef get_block_by_name(name):\n\tif name == 'transition':\n\t\treturn TransitionBlock\n\telif name == 'dense_block':\n\t\treturn DenseBlock\n\telse:\n\t\traise ValueError('Unsupported block type: %s' % name)\n\t\n\nclass TransitionBlock(LayerCascade):\n\tdef get_config(self):\n\t\treturn {\n\t\t\t'name': 'transition',\n\t\t\t**super(TransitionBlock, self).get_config(),\n\t\t}\n\t\t\n\t@staticmethod\n\tdef set_from_config(config_json, init=None, return_class=True):\n\t\t_id, layers = LayerCascade.set_from_config(config_json, init, return_class=False)\n\t\treturn TransitionBlock(_id, layers)\n\t\n\tdef prev_widen(self, indices, magnifier, noise=None):\n\t\tsuper(TransitionBlock, self).prev_widen(indices, magnifier, noise=noise)\n\t\treturn False, None, None\n\t\n\tdef widen(self, loc, new_width, widen_type='output_dim', noise=None, input_dim=None):\n\t\treturn super(TransitionBlock, self).widen(loc['layer'], new_width, widen_type, noise=noise)\n\t\n\tdef deepen(self, loc, new_layer_config, input_dim):\n\t\treturn super(TransitionBlock, self).deepen(loc['layer'], new_layer_config, input_dim)\n\t\n\nclass DenseBlock:\n\tdef __init__(self, _id, miniblocks):\n\t\tself._id = _id\n\t\tself.miniblocks = miniblocks\n\t\t\n\t\tself.output_op = None\n\t\n\t@property\n\tdef id(self):\n\t\treturn self._id\n\t\n\t@id.setter\n\tdef id(self, value):\n\t\tself._id = value\n\t\n\t@property\n\tdef depth(self):\n\t\tdepth = 0\n\t\tfor miniblock in self.miniblocks:\n\t\t\tdepth += miniblock.depth\n\t\treturn depth\n\t\n\tdef out_features_dim(self, in_features_dim):\n\t\tout_features_dim = in_features_dim\n\t\tfor miniblock in self.miniblocks:\n\t\t\tout_features_dim += miniblock.out_features_dim\n\t\treturn out_features_dim\n\t\n\tdef build(self, _input, densenet, store_output_op=False):\n\t\toutput = _input\n\t\twith tf.variable_scope(self._id):\n\t\t\tfor miniblock in self.miniblocks:\n\t\t\t\tcomp_out = miniblock.build(output, densenet, store_output_op=store_output_op)\n\t\t\t\toutput = tf.concat(axis=3, values=(output, comp_out))\n\t\tif store_output_op:\n\t\t\tself.output_op = output\n\t\treturn output\n\t\n\tdef get_config(self):\n\t\treturn {\n\t\t\t'name': 'dense_block',\n\t\t\t'_id': self._id,\n\t\t\t'miniblocks': [miniblock.get_config() for miniblock in self.miniblocks]\n\t\t}\n\t\n\tdef renew_init(self, densenet):\n\t\treturn {\n\t\t\t'_id': self._id,\n\t\t\t'miniblocks': [miniblock.renew_init(densenet) for miniblock in self.miniblocks]\n\t\t}\n\t\n\t@staticmethod\n\tdef set_from_config(config_json, init=None):\n\t\t_id = config_json['_id']\n\t\tminiblocks = []\n\t\tfor _i, miniblock_config in enumerate(config_json['miniblocks']):\n\t\t\tminiblock_init = init['miniblocks'][_i] if init is not None else None\n\t\t\tminiblock = LayerMultiBranch.set_from_config(miniblock_config, miniblock_init)\n\t\t\tminiblocks.append(miniblock)\n\t\treturn DenseBlock(_id, miniblocks)\n\t\n\t\"\"\"\n\tNetwork Transformation Operations\n\t\"\"\"\n\tdef insert_miniblock(self, idx, miniblock_config, input_dim, noise=None, scheme=0):\n\t\tassert 0 <= idx < len(self.miniblocks), 'Invalid miniblock index %d' % idx\n\t\tif miniblock_config['bc_mode']:\n\t\t\t# DenseNet-BC\n\t\t\tif scheme == 0:\n\t\t\t\tcopy_idx = idx\n\t\t\t\tcopy_miniblock = self.miniblocks[copy_idx]\n\t\t\t\tnew_in_bottle = copy_miniblock.in_bottle.copy()\n\t\t\t\tnew_in_layer = new_in_bottle.layers[0]\n\t\t\t\tpad_kernel_shape = list(new_in_layer.init['kernel'].shape)\n\t\t\t\tpad_kernel_shape[2] = copy_miniblock.out_features_dim\n\t\t\t\tnew_in_layer.init['kernel'] = \\\n\t\t\t\t\tnp.concatenate([new_in_layer.init['kernel'], np.zeros(pad_kernel_shape)], axis=2)\n\t\t\t\tif new_in_layer.pre_activation and new_in_layer.use_bn:\n\t\t\t\t\tnew_in_layer.init['beta'] = \\\n\t\t\t\t\t\tnp.concatenate([new_in_layer.init['beta'], np.zeros([copy_miniblock.out_features_dim])])\n\t\t\t\t\tnew_in_layer.init['gamma'] = \\\n\t\t\t\t\t\tnp.concatenate([new_in_layer.init['gamma'], np.ones([copy_miniblock.out_features_dim])])\n\t\t\t\t\tnew_in_layer.init['moving_mean'] = \\\n\t\t\t\t\t\tnp.concatenate([new_in_layer.init['moving_mean'], np.zeros([copy_miniblock.out_features_dim])])\n\t\t\t\t\tnew_in_layer.init['moving_variance'] = \\\n\t\t\t\t\t\tnp.concatenate([new_in_layer.init['moving_variance'], np.ones([copy_miniblock.out_features_dim])])\n\t\t\t\tnew_in_layer.init['kernel'] = apply_noise(new_in_layer.init['kernel'], noise.get('wider'))\n\t\t\t\tif copy_miniblock.out_bottle is None:\n\t\t\t\t\tnew_branches, indices = copy_miniblock.remapped_branches(noise=noise)\n\t\t\t\t\tnew_miniblock = LayerMultiBranch('M_%d' % (idx + 2), new_branches,\n\t\t\t\t\t\t\t\t\t\t\t\t\t merge=copy_miniblock.merge, in_bottle=new_in_bottle)\n\t\t\t\t\told_size = len(indices)\n\t\t\t\t\tindices = np.concatenate([np.arange(old_size), indices])\n\t\t\t\t\tmagnifier = get_magnifier(old_size, indices)\n\t\t\t\t\t\n\t\t\t\t\tprev_miniblock_out_dim = input_dim\n\t\t\t\t\tfor _i in range(0, idx):\n\t\t\t\t\t\tprev_miniblock_out_dim += self.miniblocks[_i].out_features_dim\n\t\t\t\t\tindices = np.concatenate([\n\t\t\t\t\t\tnp.arange(prev_miniblock_out_dim),\n\t\t\t\t\t\tindices + prev_miniblock_out_dim,\n\t\t\t\t\t])\n\t\t\t\t\tmagnifier = np.concatenate([\n\t\t\t\t\t\t[1] * prev_miniblock_out_dim,\n\t\t\t\t\t\tmagnifier,\n\t\t\t\t\t])\n\t\t\t\t\tprev_miniblock_out_dim += old_size\n\t\t\t\t\tfor _i in range(idx + 1, len(self.miniblocks)):\n\t\t\t\t\t\tminiblock_out_dim = self.miniblocks[_i].out_features_dim\n\t\t\t\t\t\tself.miniblocks[_i].id = 'M_%d' % (_i + 2)\n\t\t\t\t\t\tself.miniblocks[_i].prev_widen(indices, magnifier, noise=noise)\n\t\t\t\t\t\tindices = np.concatenate([\n\t\t\t\t\t\t\tindices,\n\t\t\t\t\t\t\tnp.arange(prev_miniblock_out_dim, prev_miniblock_out_dim + miniblock_out_dim)\n\t\t\t\t\t\t])\n\t\t\t\t\t\tmagnifier = np.concatenate([\n\t\t\t\t\t\t\tmagnifier,\n\t\t\t\t\t\t\t[1] * miniblock_out_dim,\n\t\t\t\t\t\t])\n\t\t\t\t\t\tprev_miniblock_out_dim += miniblock_out_dim\n\t\t\t\t\tself.miniblocks = self.miniblocks[:idx + 1] + [new_miniblock] + self.miniblocks[idx + 1:]\n\t\t\t\t\treturn indices, magnifier\n\t\t\t\telse:\n\t\t\t\t\traise NotImplementedError\n\t\t\telse:\n\t\t\t\t# identity scheme\n\t\t\t\traise NotImplementedError\n\t\telse:\n\t\t\t# DenseNet without BC\n\t\t\traise NotImplementedError\n\t\n\tdef prev_widen(self, indices, magnifier, noise=None):\n\t\told_size = np.max(indices) + 1\n\t\tprev_miniblock_out_dim = old_size\n\t\tfor miniblock in self.miniblocks:\n\t\t\tminiblock_out_dim = miniblock.out_features_dim\n\t\t\tminiblock.prev_widen(indices, magnifier, noise=noise)\n\t\t\tindices = np.concatenate([\n\t\t\t\tindices,\n\t\t\t\tnp.arange(prev_miniblock_out_dim, prev_miniblock_out_dim + miniblock_out_dim)\n\t\t\t])\n\t\t\tmagnifier = np.concatenate([\n\t\t\t\tmagnifier,\n\t\t\t\t[1] * miniblock_out_dim,\n\t\t\t])\n\t\t\tprev_miniblock_out_dim += miniblock_out_dim\n\t\treturn True, indices, magnifier\n\t\n\tdef widen(self, loc, new_width, widen_type='output_dim', noise=None, input_dim=3):\n\t\tminiblock_idx = loc['miniblock']\n\t\tminiblock = self.miniblocks[miniblock_idx]\n\t\told_miniblock_out_dim = miniblock.out_features_dim\n\t\tchange_out_dim, indices, magnifier = miniblock.widen(loc, new_width, widen_type, noise=noise)\n\t\tif change_out_dim:\n\t\t\tprev_miniblock_out_dim = input_dim\n\t\t\tfor _i in range(0, miniblock_idx):\n\t\t\t\tprev_miniblock_out_dim += self.miniblocks[_i].out_features_dim\n\t\t\tindices = np.concatenate([\n\t\t\t\tnp.arange(prev_miniblock_out_dim),\n\t\t\t\tindices + prev_miniblock_out_dim,\n\t\t\t])\n\t\t\tmagnifier = np.concatenate([\n\t\t\t\t[1] * prev_miniblock_out_dim,\n\t\t\t\tmagnifier,\n\t\t\t])\n\t\t\tprev_miniblock_out_dim += old_miniblock_out_dim\n\t\t\tfor _i in range(miniblock_idx + 1, len(self.miniblocks)):\n\t\t\t\tminiblock_out_dim = self.miniblocks[_i].out_features_dim\n\t\t\t\tself.miniblocks[_i].prev_widen(indices, magnifier, noise=noise)\n\t\t\t\tindices = np.concatenate([\n\t\t\t\t\tindices,\n\t\t\t\t\tnp.arange(prev_miniblock_out_dim, prev_miniblock_out_dim + miniblock_out_dim)\n\t\t\t\t])\n\t\t\t\tmagnifier = np.concatenate([\n\t\t\t\t\tmagnifier,\n\t\t\t\t\t[1] * miniblock_out_dim,\n\t\t\t\t])\n\t\t\t\tprev_miniblock_out_dim += miniblock_out_dim\n\t\t\treturn True, indices, magnifier\n\t\telse:\n\t\t\treturn False, None, None\n\t\n\tdef deepen(self, loc, new_layer_config, input_dim):\n\t\tminiblock_idx = loc['miniblock']\n\t\tfor _i in range(0, miniblock_idx):\n\t\t\tinput_dim += self.miniblocks[_i].out_features_dim\n\t\treturn self.miniblocks[miniblock_idx].deepen(loc, new_layer_config, input_dim)\n\t\t\n\nclass DenseNetConfig:\n\tdef __init__(self):\n\t\tself.net_config = {\n\t\t\t'model_type': None,\n\t\t\t'weight_decay': None,\n\t\t\t'first_ratio': None,\n\t\t\t'reduction': None,\n\t\t\t'bc_ratio': None,\n\t\t\t'bn_epsilon': None,\n\t\t\t'bn_decay': None,\n\t\t\t'pre_activation': None,\n\t\t}\n\t\tself.blocks = None\n\t\n\t@property\n\tdef model_type(self): return self.net_config['model_type']\n\t\n\t@property\n\tdef weight_decay(self): return self.net_config['weight_decay']\n\t\n\t@property\n\tdef first_ratio(self): return self.net_config['first_ratio']\n\t\n\t@property\n\tdef reduction(self): return self.net_config['reduction']\n\t\n\t@property\n\tdef bc_ratio(self): return self.net_config['bc_ratio']\n\t\n\t@property\n\tdef bn_epsilon(self): return self.net_config['bn_epsilon']\n\t\n\t@property\n\tdef bn_decay(self): return self.net_config['bn_decay']\n\t\n\t@property\n\tdef depth(self):\n\t\tdepth = 0\n\t\tfor block in self.blocks:\n\t\t\tdepth += block.depth\n\t\treturn depth\n\t\n\t@property\n\tdef average_growth_rate(self):\n\t\tgrowth_rate_list = []\n\t\tfor block in self.blocks:\n\t\t\tif isinstance(block, DenseBlock):\n\t\t\t\tfor miniblock in block.miniblocks:\n\t\t\t\t\tgrowth_rate = miniblock.out_features_dim\n\t\t\t\t\tgrowth_rate_list.append(growth_rate)\n\t\treturn np.mean(growth_rate_list)\n\t\n\tdef copy(self):\n\t\tnet_config = DenseNetConfig()\n\t\tnet_config.set_net_from_config(self.get_config(), self.renew_init(None), print_info=False)\n\t\treturn net_config\n\t\n\tdef get_config(self):\n\t\treturn {\n\t\t\t'name': 'DenseNet',\n\t\t\t**self.net_config,\n\t\t\t'blocks': [block.get_config() for block in self.blocks]\n\t\t}\n\n\tdef renew_init(self, densenet):\n\t\treturn {\n\t\t\t'blocks': [block.renew_init(densenet) for block in self.blocks]\n\t\t}\n\t\n\tdef set_standard_dense_net(self, data_provider: DataProvider, growth_rate, depth, total_blocks,\n\t\t\t\t\t\t\t   keep_prob, weight_decay, model_type,\n\t\t\t\t\t\t\t   first_ratio=2, reduction=1.0, bc_ratio=4,\n\t\t\t\t\t\t\t   bn_epsilon=1e-5, bn_decay=0.9, print_info=True,\n\t\t\t\t\t\t\t   pre_activation=True, **kwargs):\n\t\tself.net_config = {\n\t\t\t'model_type': model_type,\n\t\t\t'weight_decay': weight_decay,\n\t\t\t'first_ratio': first_ratio,\n\t\t\t'reduction': reduction,\n\t\t\t'bc_ratio': bc_ratio,\n\t\t\t'bn_epsilon': bn_epsilon,\n\t\t\t'bn_decay': bn_decay,\n\t\t\t'pre_activation': pre_activation,\n\t\t}\n\t\t\n\t\timage_size = data_provider.data_shape[0]\n\t\t\n\t\tfirst_output_features = growth_rate * first_ratio\n\t\tbc_mode = (model_type == 'DenseNet-BC')\n\t\tlayers_per_block = (depth - (total_blocks + 1)) // total_blocks\n\t\tif bc_mode: layers_per_block = layers_per_block // 2\n\t\t\n\t\t# initial conv\n\t\tif pre_activation:\n\t\t\tinit_conv_layer = ConvLayer('conv_0', first_output_features, kernel_size=3, activation=None, use_bn=False)\n\t\telse:\n\t\t\tinit_conv_layer = ConvLayer('conv_0', first_output_features, kernel_size=3, pre_activation=False)\n\t\tinit_transition = TransitionBlock('T_0_first', [init_conv_layer])\n\t\tself.blocks = [init_transition]\n\t\t\n\t\t# Dense Blocks\n\t\tin_features_dim = first_output_features\n\t\tfor block_idx in range(1, total_blocks + 1):\n\t\t\tminiblocks = []\n\t\t\tblock_id = 'D_%d' % block_idx\n\t\t\tfor miniblock_idx in range(1, layers_per_block + 1):\n\t\t\t\tminiblock_id = 'M_%d' % miniblock_idx\n\t\t\t\tin_bottle = None\n\t\t\t\tif bc_mode:\n\t\t\t\t\tbottelneck_layer = ConvLayer('conv_0', growth_rate * bc_ratio, kernel_size=1, keep_prob=keep_prob,\n\t\t\t\t\t\t\t\t\t\t\t\t pre_activation=pre_activation)\n\t\t\t\t\tin_bottle = LayerCascade('in_bottle', [bottelneck_layer])\n\t\t\t\t\n\t\t\t\tbranch_0 = LayerCascade('B_0', [\n\t\t\t\t\tConvLayer('conv_0', growth_rate, kernel_size=3,\n\t\t\t\t\t\t\t  keep_prob=keep_prob, pre_activation=pre_activation)\n\t\t\t\t])\n\t\t\t\tminiblocks.append(LayerMultiBranch(miniblock_id, [branch_0], in_bottle=in_bottle))\n\t\t\tdense_block = DenseBlock(block_id, miniblocks)\n\t\t\tself.blocks += [dense_block]\n\t\t\t\n\t\t\tout_features_dim = dense_block.out_features_dim(in_features_dim)\n\t\t\tif block_idx != total_blocks:\n\t\t\t\tout_features_dim = int(out_features_dim * reduction)\n\t\t\t\ttransition_id = 'T_%d_middle' % block_idx\n\t\t\t\tconv_layer = ConvLayer('conv_0', out_features_dim, kernel_size=1, keep_prob=keep_prob,\n\t\t\t\t\t\t\t\t\t   pre_activation=pre_activation)\n\t\t\t\tavg_pool_layer = PoolLayer('pool_0', 'avg', kernel_size=2, strides=2)\n\t\t\t\ttransition = TransitionBlock(transition_id, [conv_layer, avg_pool_layer])\n\t\t\t\tself.blocks.append(transition)\n\t\t\t\timage_size = image_size // 2\n\t\t\tin_features_dim = out_features_dim\n\t\t\n\t\t# Transition to classes\n\t\tif pre_activation:\n\t\t\tglobal_avg_pool = PoolLayer('pool_0', 'avg', kernel_size=image_size, strides=image_size,\n\t\t\t\t\t\t\t\t\t\tactivation='relu', use_bn=True)\n\t\telse:\n\t\t\tglobal_avg_pool = PoolLayer('pool_0', 'avg', kernel_size=image_size, strides=image_size,\n\t\t\t\t\t\t\t\t\t\tpre_activation=False)\n\t\tfinal_fc_layer = FCLayer('fc_0', data_provider.n_classes, use_bn=False, use_bias=True, activation=None)\n\t\ttransition_to_classes = TransitionBlock('T_to_classes', [global_avg_pool, final_fc_layer])\n\t\tself.blocks.append(transition_to_classes)\n\t\t\n\t\t# print information about the network\n\t\tif print_info:\n\t\t\tprint('Set Standard %s' % model_type)\n\t\t\n\t\t\tif not bc_mode:\n\t\t\t\tprint('Build %s model with %d blocks, '\n\t\t\t\t\t  '%d composite layers each.' % (model_type, total_blocks, layers_per_block))\n\t\t\tif bc_mode:\n\t\t\t\tprint('Build %s model with %d blocks, '\n\t\t\t\t\t  '%d bottleneck layers and %d composite layers each.' % (\n\t\t\t\t\t\t  model_type, total_blocks, layers_per_block, layers_per_block))\n\t\t\tprint('Reduction at transition layers: %.2f' % reduction)\n\t\treturn self\n\t\t\n\tdef set_net_from_config(self, net_config_json, init=None, print_info=True):\n\t\t# load config and init (if exist)\n\t\tfor key in self.net_config.keys():\n\t\t\tself.net_config[key] = net_config_json[key]\n\t\tself.blocks = []\n\t\tfor _i, block_config in enumerate(net_config_json['blocks']):\n\t\t\tblock_init = init['blocks'][_i] if init is not None else None\n\t\t\tblock = get_block_by_name(block_config['name'])\n\t\t\tself.blocks.append(block.set_from_config(block_config, block_init))\n\t\tif print_info:\n\t\t\tprint('Set DenseNet from config:')\n\t\t\tfor k, v in self.net_config.items():\n\t\t\t\tprint('\\t%s: %s' % (k, v))\n\t\t\tprint('\\t%s: %d' % ('depth', self.depth))\n\t\treturn self\n\t\n\tdef widen(self, loc, new_width, widen_type='output_dim', noise=None, image_channel=3):\n\t\t\"\"\"\n\t\twiden_type: \"output_dim\" or \"kernel\"\n\t\t\"\"\"\n\t\tblock_idx = loc['block']\n\t\tif block_idx == 0:\n\t\t\tinput_dim = image_channel\n\t\telif isinstance(self.blocks[block_idx - 1], TransitionBlock):\n\t\t\tinput_dim = self.blocks[block_idx - 1].out_features_dim\n\t\telse:\n\t\t\tinput_dim = self.blocks[block_idx - 1].out_features_dim(self.blocks[block_idx - 2].out_features_dim)\n\t\t\n\t\tchange_out_dim, indices, magnifier = \\\n\t\t\tself.blocks[block_idx].widen(loc, new_width, widen_type, noise=noise, input_dim=input_dim)\n\t\twhile change_out_dim:\n\t\t\tchange_out_dim, indices, magnifier = self.blocks[block_idx + 1].prev_widen(indices, magnifier, noise=noise)\n\t\t\tblock_idx += 1\n\t\t\n\tdef deepen(self, loc, new_layer_config, image_channel=3):\n\t\tnew_layer_config['pre_activation'] = self.net_config['pre_activation']\n\t\tblock_idx = loc['block']\n\t\tif block_idx == 0:\n\t\t\tinput_dim = image_channel\n\t\telif isinstance(self.blocks[block_idx - 1], TransitionBlock):\n\t\t\tinput_dim = self.blocks[block_idx - 1].out_features_dim\n\t\telse:\n\t\t\tinput_dim = self.blocks[block_idx - 1].out_features_dim(self.blocks[block_idx - 2].out_features_dim)\n\t\t\n\t\treturn self.blocks[block_idx].deepen(loc, new_layer_config, input_dim)\n\t\n\tdef set_identity4deepen(self, to_set_layers, data_provider, batch_size, batch_num=1, strict=True, noise=None):\n\t\t\"\"\"\n\t\tto_set_layers = [(new_layer, prev_layer), ...]\n\t\t\"\"\"\n\t\ttask_list = {}\n\t\tfor new_layer, prev_layer in to_set_layers:\n\t\t\tif new_layer.ready: continue\n\t\t\tif new_layer.use_bn and strict:\n\t\t\t\ttask_id = id(prev_layer)\n\t\t\t\tif task_id in task_list:\n\t\t\t\t\ttask_list[task_id][1].append(new_layer)\n\t\t\t\telse:\n\t\t\t\t\ttask_list[task_id] = (prev_layer, [new_layer])\n\t\t\telse:\n\t\t\t\tnew_layer.set_identity_layer(strict=strict, noise=noise)\n\t\tif len(task_list) > 0:\n\t\t\tmodel = DenseNet(None, data_provider, None, net_config=self, only_forward=True)\n\t\t\ttask_list = list(task_list.values())\n\t\t\tfetches = [prev_layer.output_op for prev_layer, _ in task_list]\n\t\t\tstatistics = [[0, 0] for _ in task_list]\n\t\t\tfor _i in range(batch_num):\n\t\t\t\tinput_images, _ = data_provider.train.next_batch(batch_size)\n\t\t\t\toutputs = model.sess.run(fetches, feed_dict={model.images: input_images, model.is_training: False})\n\t\t\t\tfor _j, out in enumerate(outputs):\n\t\t\t\t\tout = out.astype('float32')\n\t\t\t\t\taxis = tuple(range(len(out.shape) - 1))\n\t\t\t\t\tmean = np.mean(out, axis=axis, keepdims=True)\n\t\t\t\t\tvariance = np.mean(np.square(out - mean), axis=axis, keepdims=True)\n\t\t\t\t\tmean, variance = np.squeeze(mean), np.squeeze(variance)\n\t\t\t\t\tstatistics[_j][0] += mean\n\t\t\t\t\tstatistics[_j][1] += variance\n\t\t\tfor _j, (prev_layer, new_layers) in enumerate(task_list):\n\t\t\t\tmean, variance = statistics[_j][0] / batch_num, statistics[_j][1] / batch_num\n\t\t\t\tfor new_layer in new_layers:\n\t\t\t\t\tif new_layer.ready: continue\n\t\t\t\t\tparam = {\n\t\t\t\t\t\t'moving_mean': mean,\n\t\t\t\t\t\t'moving_variance': variance,\n\t\t\t\t\t\t'epsilon': self.bn_epsilon,\n\t\t\t\t\t}\n\t\t\t\t\tnew_layer.set_identity_layer(strict=strict, param=param, noise=noise)\n\t\n\tdef insert_miniblock(self, loc, miniblock_config, image_channel=3, noise=None):\n\t\tblock_idx = loc['block']\n\t\tif block_idx == 0:\n\t\t\tinput_dim = image_channel\n\t\telif isinstance(self.blocks[block_idx - 1], TransitionBlock):\n\t\t\tinput_dim = self.blocks[block_idx - 1].out_features_dim\n\t\telse:\n\t\t\tinput_dim = self.blocks[block_idx - 1].out_features_dim(self.blocks[block_idx - 2].out_features_dim)\n\t\t\n\t\tassert isinstance(self.blocks[block_idx], DenseBlock), 'Invalid'\n\t\tindices, magnifier = \\\n\t\t\tself.blocks[block_idx].insert_miniblock(loc['miniblock'], miniblock_config, input_dim, noise=noise)\n\t\tself.blocks[block_idx + 1].prev_widen(indices, magnifier, noise=noise)\n\t\t\n\t\t\nclass DenseNet(BasicModel):\n\tdef _build_graph(self, only_forward=False):\n\t\t_input = self.images\n\t\toutput = _input\n\t\t# building blocks (transition and dense)\n\t\tfor block in self.net_config.blocks:\n\t\t\toutput = block.build(output, self, store_output_op=only_forward)\n\t\t\n\t\tif not only_forward:\n\t\t\tlogits = output\n\t\t\twith tf.variable_scope('L2_Loss'):\n\t\t\t\tl2_loss = tf.add_n([tf.nn.l2_loss(var) for var in tf.trainable_variables()])\n\t\t\t\n\t\t\tprediction = tf.nn.softmax(logits)\n\t\t\t\n\t\t\t# losses\n\t\t\tcross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(\n\t\t\t\tlogits=logits, labels=self.labels))\n\t\t\tself.cross_entropy = cross_entropy\n\t\t\t\n\t\t\t# optimizer and train step\n\t\t\toptimizer = self.build_optimizer(self.learning_rate,\n\t\t\t\t\t\t\t\t\t\t\t self.run_config.opt_config[0], self.run_config.opt_config[1])\n\t\t\tself.train_step = optimizer.minimize(\n\t\t\t\tcross_entropy + l2_loss * self.net_config.weight_decay)\n\t\t\tcorrect_prediction = tf.equal(\n\t\t\t\ttf.argmax(prediction, 1),\n\t\t\t\ttf.argmax(self.labels, 1))\n\t\t\tself.accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))\n"
  },
  {
    "path": "Examples/cai_eas/eas/models/layer_cascade.py",
    "content": "from models.layers import ConvLayer, FCLayer, PoolLayer, get_layer_by_name\nimport tensorflow as tf\n\n\nclass LayerCascade:\n\tdef __init__(self, _id, layers):\n\t\tself._id = _id\n\t\tself.layers = layers\n\t\t\n\t\tself.output_op = None\n\t\n\t@property\n\tdef id(self):\n\t\treturn self._id\n\t\n\t@id.setter\n\tdef id(self, value):\n\t\tself._id = value\n\t\n\t@property\n\tdef out_features_dim(self):\n\t\tfor layer in self.layers[::-1]:\n\t\t\tif isinstance(layer, ConvLayer):\n\t\t\t\treturn layer.filter_num\n\t\t\telif isinstance(layer, FCLayer):\n\t\t\t\treturn layer.units\n\t\treturn None\n\t\n\t@property\n\tdef depth(self):\n\t\tdepth = 0\n\t\tfor layer in self.layers:\n\t\t\tif isinstance(layer, ConvLayer) or isinstance(layer, FCLayer):\n\t\t\t\tdepth += 1\n\t\treturn depth\n\t\n\tdef get_str(self):\n\t\tlayers_str = [layer.layer_str for layer in self.layers]\n\t\treturn '-'.join(layers_str)\n\t\n\tdef build(self, _input, densenet, store_output_op=False):\n\t\toutput = _input\n\t\twith tf.variable_scope(self._id):\n\t\t\tfor layer in self.layers:\n\t\t\t\toutput = layer.build(output, densenet, store_output_op=store_output_op)\n\t\tif store_output_op:\n\t\t\tself.output_op = output\n\t\treturn output\n\t\n\tdef get_config(self):\n\t\treturn {\n\t\t\t'_id': self._id,\n\t\t\t'layers': [layer.get_config() for layer in self.layers]\n\t\t}\n\t\n\tdef renew_init(self, densenet):\n\t\treturn {\n\t\t\t'_id': self._id,\n\t\t\t'layers': [layer.renew_init(densenet) for layer in self.layers]\n\t\t}\n\t\n\tdef copy(self):\n\t\treturn self.set_from_config(self.get_config(), init=self.renew_init(None))\n\t\n\t@staticmethod\n\tdef set_from_config(config_json, init=None, return_class=True):\n\t\t_id = config_json['_id']\n\t\tlayers = []\n\t\tfor _i, layer_config in enumerate(config_json['layers']):\n\t\t\tlayer_init = init['layers'][_i] if init is not None else None\n\t\t\tlayer = get_layer_by_name(layer_config['name'])\n\t\t\tlayers.append(layer.set_from_config(layer_config, layer_init))\n\t\tif return_class:\n\t\t\treturn LayerCascade(_id, layers)\n\t\telse:\n\t\t\treturn _id, layers\n\t\n\t\"\"\"\n\tNetwork Transformation Operations\n\t\"\"\"\n\t\n\tdef prev_widen(self, indices, magnifier, noise=None):\n\t\tfor layer in self.layers:\n\t\t\tif isinstance(layer, ConvLayer) or isinstance(layer, FCLayer):\n\t\t\t\tlayer.prev_widen(indices, magnifier, noise=noise)\n\t\t\t\tbreak\n\t\t\telse:\n\t\t\t\tlayer.prev_widen(indices, magnifier, noise=noise)\n\t\n\tdef widen(self, idx, new_width, widen_type='output_dim', noise=None):\n\t\tassert idx < len(self.layers), 'Index out of range: %d' % idx\n\t\tif widen_type == 'output_dim':\n\t\t\tassert isinstance(self.layers[idx], ConvLayer) or \\\n\t\t\t\t   isinstance(self.layers[idx], FCLayer), 'Operation not available'\n\t\t\tto_widen_layer = self.layers[idx]\n\t\t\t\n\t\t\tif isinstance(to_widen_layer, ConvLayer):\n\t\t\t\tindices, magnifier = to_widen_layer.widen_filters(new_filter_num=new_width, noise=noise)\n\t\t\telse:\n\t\t\t\tindices, magnifier = to_widen_layer.widen_units(new_units_num=new_width, noise=noise)\n\t\t\tafter_widen_layer = None\n\t\t\tfor _i in range(idx + 1, len(self.layers)):\n\t\t\t\tif isinstance(self.layers[_i], ConvLayer) or isinstance(self.layers[_i], FCLayer):\n\t\t\t\t\tself.layers[_i].prev_widen(indices, magnifier, noise=noise)\n\t\t\t\t\tafter_widen_layer = self.layers[_i]\n\t\t\t\t\tbreak\n\t\t\t\telse:\n\t\t\t\t\tself.layers[_i].prev_widen(indices, magnifier, noise=noise)\n\t\t\treturn after_widen_layer is None, indices, magnifier\n\t\telse:\n\t\t\traise ValueError('%s is not supported' % widen_type)\n\t\n\tdef deepen(self, idx, new_layer_config, input_dim):\n\t\tassert idx < len(self.layers), 'Index out of range: %d' % idx\n\t\tif new_layer_config['name'] == 'fc':\n\t\t\tassert idx == len(self.layers) - 1 or isinstance(self.layers[idx + 1], FCLayer), 'Invalid'\n\t\t\tassert isinstance(self.layers[idx], FCLayer) or isinstance(self.layers[idx], PoolLayer), 'Invalid'\n\t\t\t# prepare the new fc layer\n\t\t\tunits = input_dim\n\t\t\tfor _i in range(idx, -1, -1):\n\t\t\t\tif isinstance(self.layers[_i], FCLayer):\n\t\t\t\t\tunits = self.layers[_i].units\n\t\t\t\t\tbreak\n\t\t\t\telif isinstance(self.layers[_i], ConvLayer):\n\t\t\t\t\tunits = self.layers[_i].filter_num\n\t\t\t\t\tbreak\n\t\t\tfc_idx = 0\n\t\t\tfor _i in range(0, idx + 1):\n\t\t\t\tif isinstance(self.layers[_i], FCLayer):\n\t\t\t\t\tfc_idx += 1\n\t\t\t_id = 'fc_%d' % fc_idx\n\t\t\t# change the id of following fc layers\n\t\t\tfor _i in range(idx + 1, len(self.layers)):\n\t\t\t\tif isinstance(self.layers[_i], FCLayer):\n\t\t\t\t\tself.layers[_i].id = 'fc_%d' % (fc_idx + 1)\n\t\t\t\t\tfc_idx += 1\n\t\t\tprev_layer = None\n\t\t\tfor _i in range(idx, -1, -1):\n\t\t\t\tif self.layers[_i].ready:\n\t\t\t\t\tprev_layer = self.layers[_i]\n\t\t\t\t\tbreak\n\t\t\tassert prev_layer is not None, 'Invalid'\n\t\t\tnew_fc_layer = FCLayer(_id, units, ready=False, **new_layer_config)\n\t\t\t# insert the new layer into the cascade\n\t\t\tself.layers = self.layers[:idx + 1] + [new_fc_layer] + self.layers[idx + 1:]\n\t\t\treturn new_fc_layer, prev_layer\n\t\telif new_layer_config['name'] == 'conv':\n\t\t\tassert idx == len(self.layers) - 1 or not isinstance(self.layers[idx + 1], FCLayer), 'Invalid'\n\t\t\tassert isinstance(self.layers[idx], ConvLayer) or isinstance(self.layers[idx], FCLayer), 'Invalid'\n\t\t\t# prepare the new conv layer\n\t\t\tfilter_num = input_dim\n\t\t\tfor _i in range(idx, -1, -1):\n\t\t\t\tif isinstance(self.layers[_i], ConvLayer):\n\t\t\t\t\tfilter_num = self.layers[_i].filter_num\n\t\t\t\t\tbreak\n\t\t\tconv_idx = 0\n\t\t\tfor _i in range(0, idx + 1):\n\t\t\t\tif isinstance(self.layers[_i], ConvLayer):\n\t\t\t\t\tconv_idx += 1\n\t\t\t_id = 'conv_%d' % conv_idx\n\t\t\t# change the id of following conv layers\n\t\t\tfor _i in range(idx + 1, len(self.layers)):\n\t\t\t\tif isinstance(self.layers[_i], ConvLayer):\n\t\t\t\t\tself.layers[_i].id = 'conv_%d' % (conv_idx + 1)\n\t\t\t\t\tconv_idx += 1\n\t\t\tprev_layer = None\n\t\t\tfor _i in range(idx, -1, -1):\n\t\t\t\tif self.layers[_i].ready:\n\t\t\t\t\tprev_layer = self.layers[_i]\n\t\t\t\t\tbreak\n\t\t\tassert prev_layer is not None, 'Invalid'\n\t\t\tnew_conv_layer = ConvLayer(_id, filter_num, ready=False, **new_layer_config)\n\t\t\tself.layers = self.layers[:idx + 1] + [new_conv_layer] + self.layers[idx + 1:]\n\t\t\treturn new_conv_layer, prev_layer\n\t\telse:\n\t\t\traise ValueError('Not support to insert a %s layer' % new_layer_config['name'])\n"
  },
  {
    "path": "Examples/cai_eas/eas/models/layer_multi_branch.py",
    "content": "import tensorflow as tf\nimport numpy as np\nfrom models.layer_cascade import LayerCascade\n\n\nclass LayerMultiBranch:\n\tdef __init__(self, _id, branches, merge=None, in_bottle=None, out_bottle=None):\n\t\tself._id = _id\n\t\tself.in_bottle = in_bottle\n\t\tself.branches = branches\n\t\tself.out_bottle = out_bottle\n\t\tself.merge = merge\n\t\tif self.merge == 'add':\n\t\t\tout_dim = []\n\t\t\tfor branch in self.branches:\n\t\t\t\tout_dim.append(branch.out_features_dim)\n\t\t\tassert np.std(out_dim) == 0, '<%s> require the output dim of all branches are the same' % self.merge\n\t\telif self.merge is None:\n\t\t\tassert len(self.branches) == 1, 'Invalid'\n\t\t\n\t\tself.output_op = None\n\t\n\t@property\n\tdef id(self):\n\t\treturn self._id\n\t\n\t@id.setter\n\tdef id(self, value):\n\t\tself._id = value\n\t\n\t@property\n\tdef out_features_dim(self):\n\t\tif self.out_bottle:\n\t\t\treturn self.out_bottle.out_features_dim\n\t\tout_dim = []\n\t\tfor branch in self.branches:\n\t\t\tout_dim.append(branch.out_features_dim)\n\t\tif self.merge == 'concat':\n\t\t\treturn np.sum(out_dim)\n\t\telif self.merge == 'add' or self.merge is None:\n\t\t\treturn out_dim[0]\n\t\telse:\n\t\t\tpass\n\t\n\t@property\n\tdef depth(self):\n\t\tdepth = 0\n\t\tif self.in_bottle:\n\t\t\tdepth += self.in_bottle.depth\n\t\tif self.out_bottle:\n\t\t\tdepth += self.out_bottle.depth\n\t\tbranch_depth = []\n\t\tfor branch in self.branches:\n\t\t\tbranch_depth.append(branch.depth)\n\t\tdepth += np.max(branch_depth)\n\t\treturn depth\n\t\n\tdef get_str(self):\n\t\tin_bottle_str = 'N' if self.in_bottle is None else self.in_bottle.get_str()\n\t\tbranches_str = [branch.get_str() for branch in self.branches]\n\t\tbranches_str = '+'.join(branches_str)\n\t\tout_bottle_str = 'N' if self.out_bottle is None else self.out_bottle.get_str()\n\t\treturn '%s~%s~%s' % (in_bottle_str, branches_str, out_bottle_str)\n\t\n\tdef build(self, _input, densenet, store_output_op=False):\n\t\twith tf.variable_scope(self._id):\n\t\t\toutput = _input\n\t\t\t# in bottle\n\t\t\tif self.in_bottle:\n\t\t\t\toutput = self.in_bottle.build(output, densenet, store_output_op=store_output_op)\n\t\t\t# branches\n\t\t\tbranch_out = []\n\t\t\tfor branch in self.branches:\n\t\t\t\tbranch_out.append(branch.build(output, densenet, store_output_op=store_output_op))\n\t\t\tif self.merge == 'concat':\n\t\t\t\toutput = tf.concat(branch_out, axis=3)\n\t\t\telif self.merge == 'add':\n\t\t\t\toutput = tf.add_n(branch_out)\n\t\t\telif self.merge is None:\n\t\t\t\toutput = branch_out[0]\n\t\t\telse:\n\t\t\t\traise ValueError('Do not support <%s>' % self.merge)\n\t\t\t# out bottle\n\t\t\tif self.out_bottle:\n\t\t\t\toutput = self.out_bottle.build(output, densenet, store_output_op=store_output_op)\n\t\tif store_output_op:\n\t\t\tself.output_op = output\n\t\treturn output\n\t\n\tdef get_config(self):\n\t\treturn {\n\t\t\t'_id': self._id,\n\t\t\t'merge': self.merge,\n\t\t\t'branches': [branch.get_config() for branch in self.branches],\n\t\t\t'in_bottle': None if self.in_bottle is None else self.in_bottle.get_config(),\n\t\t\t'out_bottle': None if self.out_bottle is None else self.out_bottle.get_config(),\n\t\t}\n\t\n\tdef renew_init(self, densenet):\n\t\treturn {\n\t\t\t'_id': self._id,\n\t\t\t'branches': [branch.renew_init(densenet) for branch in self.branches],\n\t\t\t'in_bottle': None if self.in_bottle is None else self.in_bottle.renew_init(densenet),\n\t\t\t'out_bottle': None if self.out_bottle is None else self.out_bottle.renew_init(densenet),\n\t\t}\n\t\n\t@staticmethod\n\tdef set_from_config(config_json, init=None):\n\t\t_id = config_json['_id']\n\t\tmerge = config_json['merge']\n\t\tbranches = []\n\t\tfor _i, branch_config in enumerate(config_json['branches']):\n\t\t\tbranch_init = init['branches'][_i] if init is not None else None\n\t\t\tbranch = LayerCascade.set_from_config(branch_config, branch_init)\n\t\t\tbranches.append(branch)\n\t\tin_bottle = config_json['in_bottle']\n\t\tif in_bottle:\n\t\t\tin_bottle_init = init['in_bottle'] if init is not None else None\n\t\t\tin_bottle = LayerCascade.set_from_config(in_bottle, in_bottle_init)\n\t\tout_bottle = config_json['out_bottle']\n\t\tif out_bottle:\n\t\t\tout_bottle_init = init['out_bottle'] if init is not None else None\n\t\t\tout_bottle = LayerCascade.set_from_config(out_bottle, out_bottle_init)\n\t\treturn LayerMultiBranch(_id, branches, merge, in_bottle=in_bottle, out_bottle=out_bottle)\n\t\n\t\"\"\"\n\tNetwork Transformation Operations\n\t\"\"\"\n\t\n\tdef prev_widen(self, indices, magnifier, noise=None):\n\t\tif self.in_bottle:\n\t\t\tself.in_bottle.prev_widen(indices, magnifier, noise=noise)\n\t\telse:\n\t\t\tfor branch in self.branches:\n\t\t\t\tbranch.prev_widen(indices, magnifier, noise=noise)\n\t\n\tdef widen(self, loc, new_width, widen_type='output_dim', noise=None):\n\t\tif loc['multi-branch'] == 'in_bottle':\n\t\t\tassert self.in_bottle is not None, 'Invalid'\n\t\t\tchange_out_dim, indices, magnifier = self.in_bottle.widen(loc['layer'], new_width, widen_type, noise=noise)\n\t\t\tif change_out_dim:\n\t\t\t\tfor branch in self.branches:\n\t\t\t\t\tbranch.prev_widen(indices, magnifier, noise=noise)\n\t\t\treturn False, None, None\n\t\telif loc['multi-branch'] == 'out_bottle':\n\t\t\tassert self.out_bottle is not None, 'Invalid'\n\t\t\tchange_out_dim, indices, magnifier = self.out_bottle.widen(loc['layer'], new_width, widen_type, noise=noise)\n\t\t\treturn change_out_dim, indices, magnifier\n\t\telif loc['multi-branch'] == 'branch':\n\t\t\tbranch_idx = loc['branch']\n\t\t\tbranch = self.branches[branch_idx]\n\t\t\told_branch_out_dim = branch.out_features_dim\n\t\t\tchange_out_dim, indices, magnifier = branch.widen(loc['layer'], new_width, widen_type, noise=noise)\n\t\t\tif change_out_dim:\n\t\t\t\tassert self.merge != 'add', 'Invalid'\n\t\t\t\tprev_branch_out_dim = 0\n\t\t\t\tfor _i in range(0, branch_idx):\n\t\t\t\t\tprev_branch_out_dim += self.branches[_i].out_features_dim\n\t\t\t\tpost_branch_out_dim = 0\n\t\t\t\tfor _i in range(branch_idx + 1, len(self.branches)):\n\t\t\t\t\tpost_branch_out_dim += self.branches[_i].out_features_dim\n\t\t\t\told_size = prev_branch_out_dim + old_branch_out_dim + post_branch_out_dim\n\t\t\t\tbase = np.arange(old_size)\n\t\t\t\tindices = np.concatenate([\n\t\t\t\t\tbase[:prev_branch_out_dim],\n\t\t\t\t\tindices + prev_branch_out_dim,\n\t\t\t\t\tbase[prev_branch_out_dim + old_branch_out_dim:]\n\t\t\t\t])\n\t\t\t\tmagnifier = np.concatenate([\n\t\t\t\t\t[1] * prev_branch_out_dim,\n\t\t\t\t\tmagnifier,\n\t\t\t\t\t[1] * post_branch_out_dim,\n\t\t\t\t])\n\t\t\t\tif self.out_bottle is None:\n\t\t\t\t\treturn True, indices, magnifier\n\t\t\t\telse:\n\t\t\t\t\tself.out_bottle.prev_widen(indices, magnifier, noise=noise)\n\t\t\t\t\treturn False, None, None\n\t\t\telse:\n\t\t\t\treturn False, None, None\n\t\telse:\n\t\t\traise ValueError('Do not support %s' % loc['multi-branch'])\n\t\n\tdef deepen(self, loc, new_layer_config, input_dim):\n\t\tif loc['multi-branch'] == 'in_bottle':\n\t\t\tassert self.in_bottle is not None, 'Invalid'\n\t\t\treturn self.in_bottle.deepen(loc['layer'], new_layer_config, input_dim)\n\t\telif loc['multi-branch'] == 'out_bottle':\n\t\t\tassert self.out_bottle is not None, 'Invalid'\n\t\t\tif self.merge == 'concat': input_dim = np.sum([branch.out_features_dim for branch in self.branches])\n\t\t\telse: input_dim = self.branches[0].out_features_dim\n\t\t\treturn self.out_bottle.deepen(loc['layer'], new_layer_config, input_dim)\n\t\telif loc['multi-branch'] == 'branch':\n\t\t\tif self.in_bottle is not None: input_dim = self.in_bottle.out_features_dim\n\t\t\treturn self.branches[loc['branch']].deepen(loc['layer'], new_layer_config, input_dim)\n\t\telse:\n\t\t\traise ValueError('Do not support %s' % loc['multi-branch'])\n\t\t\n\tdef remapped_branches(self, noise=None):\n\t\tif self.merge == 'add' or self.merge is None:\n\t\t\tsize = self.out_features_dim\n\t\t\tindices = np.random.choice(np.arange(size), size)\n\t\t\tnew_branches = []\n\t\t\tfor branch in self.branches:\n\t\t\t\tnew_layers = [layer.copy() for layer in branch.layers[:-1]]\n\t\t\t\tlast_layer = branch.layers[-1].copy().remap(indices, noise=noise)\n\t\t\t\tnew_layers.append(last_layer)\n\t\t\t\tnew_branch = LayerCascade(branch.id, new_layers)\n\t\t\t\tnew_branches.append(new_branch)\n\t\telif self.merge == 'concat':\n\t\t\tnew_branches = []\n\t\t\toffset = 0\n\t\t\tindices = []\n\t\t\tfor branch in self.branches:\n\t\t\t\tsize = branch.out_features_dim\n\t\t\t\tsub_indices = np.random.choice(np.arange(size), size)\n\t\t\t\tnew_layers = [layer.copy() for layer in branch.layers[:-1]]\n\t\t\t\tlast_layer = branch.layers[-1].copy().remap(sub_indices, noise=noise)\n\t\t\t\tnew_layers.append(last_layer)\n\t\t\t\tnew_branch = LayerCascade(branch.id, new_layers)\n\t\t\t\tnew_branches.append(new_branch)\n\t\t\t\tindices.append(sub_indices + offset)\n\t\t\t\toffset += size\n\t\t\tindices = np.concatenate(indices)\n\t\telse:\n\t\t\traise NotImplementedError\n\t\treturn new_branches, indices\n"
  },
  {
    "path": "Examples/cai_eas/eas/models/layers.py",
    "content": "from models.basic_model import BasicModel\nimport tensorflow as tf\nimport numpy as np\nimport copy\n\n\ndef apply_noise(weights, noise_config):\n\tif noise_config is None:\n\t\treturn weights\n\tnoise_type = noise_config.get('type', 'normal')\n\tif noise_type == 'normal':\n\t\tratio = noise_config.get('ratio', 1e-3)\n\t\tstd = np.std(weights)\n\t\tnoise = np.random.normal(0, std * ratio, size=weights.shape)\n\telif noise_type == 'uniform':\n\t\tratio = noise_config.get('ratio', 1e-3)\n\t\tmean, _max = np.mean(weights), np.max(weights)\n\t\twidth = (_max - mean) * ratio\n\t\tnoise = np.random.uniform(-width, width, size=weights.shape)\n\telse:\n\t\traise NotImplementedError\n\treturn weights + noise\n\n\ndef get_layer_by_name(name):\n\tif name == 'conv':\n\t\treturn ConvLayer\n\telif name == 'fc':\n\t\treturn FCLayer\n\telif name == 'pool':\n\t\treturn PoolLayer\n\telse:\n\t\traise ValueError('Unknown layer type: %s' % name)\n\n\ndef get_magnifier(old_size, indices):\n\t_l = np.zeros(old_size)\n\tfor x in indices:\n\t\t_l[x] += 1\n\tmagnifier = (1.0 / _l)[indices]\n\treturn magnifier\n\n\ndef get_random_remapping(old_size, new_size):\n\tbase = np.arange(old_size)\n\tindices = np.concatenate([base, np.random.choice(base, new_size - old_size)])\n\t\n\tmagnifier = get_magnifier(old_size, indices)\n\treturn indices, magnifier\n\n\nclass BaseLayer:\n\t\"\"\"\n\t_id, batch normalization, activation, dropout, ready\n\t\"\"\"\n\tdef __init__(self, _id, use_bn=True, activation='relu', keep_prob=1.0, ready=True, pre_activation=True):\n\t\tself._id = _id\n\t\tself.use_bn = use_bn\n\t\tself.activation = activation\n\t\tself.keep_prob = keep_prob\n\t\tself.ready = ready\n\t\tself.pre_activation = pre_activation\n\t\t\n\t\tself._scope = None\n\t\tself._init = None\n\t\tself.output_op = None\n\t\n\t@property\n\tdef id(self): return self._id\n\t\n\t@id.setter\n\tdef id(self, value): self._id = value\n\t\n\t@property\n\tdef init(self):\n\t\treturn self._init\n\t\n\t@property\n\tdef param_initializer(self):\n\t\tif self._init is None:\n\t\t\treturn None\n\t\tparam_initializer = {}\n\t\tfor key in self.variable_list.keys():\n\t\t\tif self._init[key] is not None:\n\t\t\t\tparam_initializer[key] = tf.constant_initializer(self._init[key])\n\t\tif len(param_initializer) == 0:\n\t\t\tparam_initializer = None\n\t\treturn param_initializer\n\t\n\tdef renew_init(self, net: BasicModel):\n\t\tif net is None:\n\t\t\treturn copy.deepcopy(self._init)\n\t\t\n\t\tself._init = {}\n\t\tfor key, var_name in self.variable_list.items():\n\t\t\tvar = net.graph.get_tensor_by_name('%s/%s' % (self._scope, var_name))\n\t\t\tself._init[key] = net.sess.run(var)\n\t\tif len(self._init) == 0:\n\t\t\tself._init = None\n\t\treturn copy.deepcopy(self._init)\n\t\n\tdef copy(self):\n\t\treturn self.set_from_config(self.get_config(), layer_init=copy.deepcopy(self._init))\n\t\n\tdef get_config(self):\n\t\treturn {\n\t\t\t'_id': self.id,\n\t\t\t'use_bn': self.use_bn,\n\t\t\t'activation': self.activation,\n\t\t\t'keep_prob': self.keep_prob,\n\t\t\t'pre_activation': self.pre_activation,\n\t\t}\n\t\n\t@property\n\tdef variable_list(self):\n\t\t\"\"\"\n\t\tbeta: mean scale\n\t\tgamma: variance scale\n\t\ty = gamma * (x - moving_mean) / sqrt(epsilon + moving_variance) + beta\n\t\t\"\"\"\n\t\tif self.use_bn:\n\t\t\treturn {\n\t\t\t\t'moving_mean': 'BatchNorm/moving_mean:0',\n\t\t\t\t'moving_variance': 'BatchNorm/moving_variance:0',\n\t\t\t\t'beta': 'BatchNorm/beta:0',\n\t\t\t\t'gamma': 'BatchNorm/gamma:0',\n\t\t\t}\n\t\telse:\n\t\t\treturn {}\n\t\n\t@staticmethod\n\tdef set_from_config(layer_config, layer_init):\n\t\traise NotImplementedError\n\t\n\tdef build(self, _input, net, store_output_op):\n\t\traise NotImplementedError\n\t\n\tdef prev_widen(self, indices, magnifier, noise=None):\n\t\traise NotImplementedError\n\t\n\tdef set_identity_layer(self, strict, param, noise):\n\t\traise NotImplementedError\n\t\n\tdef widen_bn(self, indices, magnifier, noise=None):\n\t\tif self.use_bn:\n\t\t\tself._init['beta'] = self._init['beta'][indices]\n\t\t\tself._init['gamma'] = self._init['gamma'][indices]\n\t\t\tself._init['moving_mean'] = self._init['moving_mean'][indices]\n\t\t\tself._init['moving_variance'] = self._init['moving_variance'][indices]\n\t\n\tdef set_bn_identity(self, strict=True, param=None, noise=None):\n\t\tif self.use_bn:\n\t\t\tif strict:\n\t\t\t\tself._init['moving_mean'] = param['moving_mean']\n\t\t\t\tself._init['moving_variance'] = param['moving_variance']\n\t\t\t\tself._init['beta'] = self._init['moving_mean']\n\t\t\t\tself._init['gamma'] = np.sqrt(self._init['moving_variance'] + param['epsilon'])\n\t\t\telse:\n\t\t\t\t# use default initialization for batch normalization layer\n\t\t\t\tself._init['moving_mean'], self._init['moving_variance'] = None, None\n\t\t\t\tself._init['beta'], self._init['gamma'] = None, None\n\t\n\t\nclass ConvLayer(BaseLayer):\n\tdef __init__(self, _id, filter_num, kernel_size=3, strides=1,\n\t\t\t\t use_bn=True, activation='relu', keep_prob=1.0, ready=True, pre_activation=True, **kwargs):\n\t\tBaseLayer.__init__(self, _id, use_bn, activation, keep_prob, ready, pre_activation)\n\t\tself.filter_num = filter_num\n\t\tself.kernel_size = kernel_size\n\t\tself.strides = strides\n\t\n\t@property\n\tdef layer_str(self):\n\t\treturn 'C%d,%d,%d' % (self.filter_num, self.kernel_size, self.strides)\n\t\t\n\t@property\n\tdef variable_list(self):\n\t\tvar_list = {'kernel': 'kernel:0'}\n\t\tvar_list.update(super(ConvLayer, self).variable_list)\n\t\treturn var_list\n\t\n\tdef get_config(self):\n\t\treturn {\n\t\t\t'name': 'conv',\n\t\t\t'filter_num': self.filter_num,\n\t\t\t'kernel_size': self.kernel_size,\n\t\t\t'strides': self.strides,\n\t\t\t**super(ConvLayer, self).get_config(),\n\t\t}\n\t\n\t@staticmethod\n\tdef set_from_config(layer_config, layer_init=None):\n\t\tconv_layer = ConvLayer(**layer_config)\n\t\tconv_layer._init = layer_init\n\t\treturn conv_layer\n\t\n\tdef build(self, _input, net: BasicModel, store_output_op=False):\n\t\toutput = _input\n\t\tif not self.ready:\n\t\t\treturn output\n\t\twith tf.variable_scope(self._id):\n\t\t\tself._scope = tf.get_variable_scope().name\n\t\t\tparam_initializer = self.param_initializer\n\t\t\tif self.pre_activation:\n\t\t\t\t# batch normalization\n\t\t\t\tif self.use_bn:\n\t\t\t\t\toutput = BasicModel.batch_norm(output, net.is_training, net.net_config.bn_epsilon,\n\t\t\t\t\t\t\t\t\t\t\t\t   net.net_config.bn_decay, param_initializer=param_initializer)\n\t\t\t\t# activation\n\t\t\t\toutput = BasicModel.activation(output, self.activation)\n\t\t\t\t# convolutional\n\t\t\t\toutput = BasicModel.conv2d(output, self.filter_num, self.kernel_size, self.strides,\n\t\t\t\t\t\t\t\t\t\t   param_initializer=param_initializer)\n\t\t\telse:\n\t\t\t\t# convolutional\n\t\t\t\toutput = BasicModel.conv2d(output, self.filter_num, self.kernel_size, self.strides,\n\t\t\t\t\t\t\t\t\t\t   param_initializer=param_initializer)\n\t\t\t\t# batch normalization\n\t\t\t\tif self.use_bn:\n\t\t\t\t\toutput = BasicModel.batch_norm(output, net.is_training, net.net_config.bn_epsilon,\n\t\t\t\t\t\t\t\t\t\t\t\t   net.net_config.bn_decay, param_initializer=param_initializer)\n\t\t\t\t# activation\n\t\t\t\toutput = BasicModel.activation(output, self.activation)\n\t\t\t# dropout\n\t\t\toutput = BasicModel.dropout(output, self.keep_prob, net.is_training)\n\t\tif store_output_op:\n\t\t\tself.output_op = output\n\t\treturn output\n\t\n\tdef widen_filters(self, new_filter_num, noise=None):\n\t\t\"\"\"\n\t\tIncrease the filter number of a conv layer while preserving the functionality\n\t\tProposed in 'Net2Net': https://arxiv.org/abs/1511.05641\n\t\t\"\"\"\n\t\tassert new_filter_num > self.filter_num, 'Invalid new filter number: %d' % new_filter_num\n\t\tassert self._init is not None, 'Uninitialized layer'\n\t\told_size, new_size = self.filter_num, new_filter_num\n\t\tindices, magnifier = get_random_remapping(old_size, new_size)\n\t\t# more filters\n\t\tself.filter_num = new_filter_num\n\t\tnew_kernel = self._init['kernel'][:, :, :, indices]\n\t\tnew_kernel[:, :, :, old_size:] = apply_noise(new_kernel[:, :, :, old_size:], noise.get('wider'))\n\t\tself._init['kernel'] = new_kernel\n\t\tif not self.pre_activation:\n\t\t\t# widen batch norm variables if use batch norm\n\t\t\tself.widen_bn(indices, magnifier, noise=noise)\n\t\treturn indices, magnifier\n\t\n\tdef prev_widen(self, indices, magnifier, noise=None):\n\t\tassert self._init is not None, 'Uninitialized layer'\n\t\t# rescale kernel\n\t\tself._init['kernel'] = self._init['kernel'][:, :, indices, :] * magnifier.reshape([1, 1, -1, 1])\n\t\tif self.pre_activation:\n\t\t\tself.widen_bn(indices, magnifier, noise=noise)\n\t\t\n\tdef set_identity_layer(self, strict=True, param=None, noise=None):\n\t\tself._init = {}\n\t\tself.set_bn_identity(strict, param, noise=noise)\n\t\tmid = self.kernel_size // 2\n\t\tself._init['kernel'] = np.zeros([self.kernel_size, self.kernel_size, self.filter_num, self.filter_num])\n\t\tself._init['kernel'][mid, mid] = np.eye(self.filter_num)\n\t\tself._init['kernel'] = apply_noise(self._init['kernel'], noise.get('deeper'))\n\t\tself.ready = True\n\n\tdef remap(self, indices, noise=None):\n\t\tself.filter_num = len(indices)\n\t\tself._init['kernel'] = self._init['kernel'][:, :, :, indices]\n\t\tself._init['kernel'] = apply_noise(self._init['kernel'], noise.get('wider'))\n\t\tif not self.pre_activation:\n\t\t\tself.widen_bn(indices, None, noise=noise)\n\t\treturn self\n\t\t\n\t\t\nclass FCLayer(BaseLayer):\n\tdef __init__(self, _id, units, use_bn=True, use_bias=False, activation='relu', keep_prob=1.0, ready=True,\n\t\t\t\t pre_activation=False, **kwargs):\n\t\tBaseLayer.__init__(self, _id, use_bn, activation, keep_prob, ready, pre_activation)\n\t\tself.units = units\n\t\tself.use_bias = use_bias\n\t\n\t@property\n\tdef layer_str(self):\n\t\treturn 'FC%d' % self.units\n\t\n\t@property\n\tdef variable_list(self):\n\t\tvar_list = {'W': 'W:0'}\n\t\tif self.use_bias:\n\t\t\tvar_list['bias'] = 'bias:0'\n\t\tvar_list.update(super(FCLayer, self).variable_list)\n\t\treturn var_list\n\t\n\tdef get_config(self):\n\t\treturn {\n\t\t\t'name': 'fc',\n\t\t\t'units': self.units,\n\t\t\t'use_bias': self.use_bias,\n\t\t\t**super(FCLayer, self).get_config(),\n\t\t}\n\t\n\t@staticmethod\n\tdef set_from_config(layer_config, layer_init=None):\n\t\tfc_layer = FCLayer(**layer_config)\n\t\tfc_layer._init = layer_init\n\t\treturn fc_layer\n\t\n\tdef build(self, _input, net: BasicModel, store_output_op=False):\n\t\toutput = _input\n\t\tif not self.ready:\n\t\t\treturn output\n\t\twith tf.variable_scope(self._id):\n\t\t\tself._scope = tf.get_variable_scope().name\n\t\t\tparam_initializer = self.param_initializer\n\t\t\t# flatten if not\n\t\t\toutput = BasicModel.flatten(output)\n\t\t\tif self.pre_activation:\n\t\t\t\t# batch normalization\n\t\t\t\tif self.use_bn:\n\t\t\t\t\toutput = BasicModel.batch_norm(output, net.is_training, net.net_config.bn_epsilon,\n\t\t\t\t\t\t\t\t\t\t\t\t   net.net_config.bn_decay, param_initializer=param_initializer)\n\t\t\t\t# activation\n\t\t\t\toutput = BasicModel.activation(output, self.activation)\n\t\t\t\t# FC\n\t\t\t\toutput = BasicModel.fc_layer(output, self.units, self.use_bias, param_initializer=param_initializer)\n\t\t\telse:\n\t\t\t\t# FC\n\t\t\t\toutput = BasicModel.fc_layer(output, self.units, self.use_bias, param_initializer=param_initializer)\n\t\t\t\t# batch normalization\n\t\t\t\tif self.use_bn:\n\t\t\t\t\toutput = BasicModel.batch_norm(output, net.is_training, net.net_config.bn_epsilon,\n\t\t\t\t\t\t\t\t\t\t\t\t   net.net_config.bn_decay, param_initializer=param_initializer)\n\t\t\t\t# activation\n\t\t\t\toutput = BasicModel.activation(output, self.activation)\n\t\t\t# dropout\n\t\t\toutput = BasicModel.dropout(output, self.keep_prob, net.is_training)\n\t\tif store_output_op:\n\t\t\tself.output_op = output\n\t\treturn output\n\t\n\tdef widen_units(self, new_units_num, noise=None):\n\t\t\"\"\"\n\t\tIncrease the units number of a fc layer while preserving the functionality\n\t\tProposed in 'Net2Net': https://arxiv.org/abs/1511.05641\n\t\tW: [in_dim, out_units]\n\t\tbias: [out_units]\n\t\t\"\"\"\n\t\tassert new_units_num > self.units, 'Invalid new units number: %d' % new_units_num\n\t\tassert self._init is not None, 'Uninitialized layer'\n\t\told_size, new_size = self.units, new_units_num\n\t\tindices, magnifier = get_random_remapping(old_size, new_size)\n\t\t# more units\n\t\tself._init['W'] = self._init['W'][:, indices]\n\t\tself._init['W'][:, old_size:] = apply_noise(self._init['W'][:, old_size:], noise.get('wider'))\n\t\tself.units = new_units_num\n\t\t# widen bias variable if exist\n\t\tif self.use_bias:\n\t\t\tself._init['bias'] = self._init['bias'][indices]\n\t\t\tself._init['bias'][old_size:] = apply_noise(self._init['bias'][old_size:], noise.get('wider'))\n\t\tif not self.pre_activation:\n\t\t\t# widen batch norm variables if use batch norm\n\t\t\tself.widen_bn(indices, magnifier, noise=noise)\n\t\treturn indices, magnifier\n\t\t\t\n\tdef prev_widen(self, indices, magnifier, noise=None):\n\t\tassert self._init is not None, 'Uninitialized layer'\n\t\t# rescale W\n\t\tself._init['W'] = self._init['W'][indices] * magnifier.reshape([-1, 1])\n\t\tif self.pre_activation:\n\t\t\tself.widen_bn(indices, magnifier, noise=noise)\n\t\n\tdef set_identity_layer(self, strict=True, param=None, noise=None):\n\t\tself._init = {}\n\t\tself.set_bn_identity(strict, param, noise=noise)\n\t\tif self.use_bias:\n\t\t\tself._init['bias'] = [0.0] * self.units\n\t\tself._init['W'] = np.eye(self.units)\n\t\tself._init['W'] = apply_noise(self._init['W'], noise.get('deeper'))\n\t\tself.ready = True\n\t\n\tdef remap(self, indices, noise=None):\n\t\tself.units = len(indices)\n\t\tself._init['W'] = self._init['W'][:, indices]\n\t\tself._init['W'] = apply_noise(self._init['W'], noise.get('wider'))\n\t\tif self.use_bias:\n\t\t\tself._init['bias'] = self._init['bias'][indices]\n\t\tif not self.pre_activation:\n\t\t\tself.widen_bn(indices, None, noise=noise)\n\t\treturn self\n\t\n\t\t\nclass PoolLayer(BaseLayer):\n\tdef __init__(self, _id, _type, kernel_size=2, strides=2, use_bn=False, activation=None, keep_prob=1.0,\n\t\t\t\t ready=True, pre_activation=True, **kwargs):\n\t\tBaseLayer.__init__(self, _id, use_bn, activation, keep_prob, ready, pre_activation)\n\t\t\n\t\tself._type = _type\n\t\tself.kernel_size = kernel_size\n\t\tself.strides = strides\n\t\n\t@property\n\tdef layer_str(self):\n\t\treturn 'P%d,%d' % (self.kernel_size, self.strides)\n\t\t\n\tdef get_config(self):\n\t\treturn {\n\t\t\t'name': 'pool',\n\t\t\t'_type': self._type,\n\t\t\t'kernel_size': self.kernel_size,\n\t\t\t'strides': self.strides,\n\t\t\t**super(PoolLayer, self).get_config(),\n\t\t}\n\t\n\t@staticmethod\n\tdef set_from_config(layer_config, layer_init=None):\n\t\tpool_layer = PoolLayer(**layer_config)\n\t\tpool_layer._init = layer_init\n\t\treturn pool_layer\n\t\n\tdef build(self, _input, net: BasicModel, store_output_op=False):\n\t\toutput = _input\n\t\tif not self.ready:\n\t\t\treturn output\n\t\twith tf.variable_scope(self._id):\n\t\t\tself._scope = tf.get_variable_scope().name\n\t\t\tparam_initializer = self.param_initializer\n\t\t\tif self.pre_activation:\n\t\t\t\t# batch normalization\n\t\t\t\tif self.use_bn:\n\t\t\t\t\toutput = BasicModel.batch_norm(output, net.is_training, net.net_config.bn_epsilon,\n\t\t\t\t\t\t\t\t\t\t\t\t   net.net_config.bn_decay, param_initializer=param_initializer)\n\t\t\t\t# activation\n\t\t\t\toutput = BasicModel.activation(output, self.activation)\n\t\t\t\t# Pooling\n\t\t\t\tif self._type == 'avg':\n\t\t\t\t\toutput = BasicModel.avg_pool(output, k=self.kernel_size, s=self.strides)\n\t\t\t\telif self._type == 'max':\n\t\t\t\t\toutput = BasicModel.max_pool(output, k=self.kernel_size, s=self.strides)\n\t\t\t\telse:\n\t\t\t\t\traise ValueError('Do not support the pooling type: %s' % self._type)\n\t\t\telse:\n\t\t\t\t# Pooling\n\t\t\t\tif self._type == 'avg':\n\t\t\t\t\toutput = BasicModel.avg_pool(output, k=self.kernel_size, s=self.strides)\n\t\t\t\telif self._type == 'max':\n\t\t\t\t\toutput = BasicModel.max_pool(output, k=self.kernel_size, s=self.strides)\n\t\t\t\telse:\n\t\t\t\t\traise ValueError('Do not support the pooling type: %s' % self._type)\n\t\t\t\t# batch normalization\n\t\t\t\tif self.use_bn:\n\t\t\t\t\toutput = BasicModel.batch_norm(output, net.is_training, net.net_config.bn_epsilon,\n\t\t\t\t\t\t\t\t\t\t\t\t   net.net_config.bn_decay, param_initializer=param_initializer)\n\t\t\t\t# activation\n\t\t\t\toutput = BasicModel.activation(output, self.activation)\n\t\t\t# dropout\n\t\t\toutput = BasicModel.dropout(output, self.keep_prob, net.is_training)\n\t\tif store_output_op:\n\t\t\tself.output_op = output\n\t\treturn output\n\n\tdef set_identity_layer(self, strict=True, param=None, noise=None):\n\t\traise ValueError('Pooling layer can never be an identity layer')\n\t\n\tdef prev_widen(self, indices, magnifier, noise=None):\n\t\tself.widen_bn(indices, magnifier, noise=noise)\n"
  },
  {
    "path": "Examples/cai_eas/eas/models/utils.py",
    "content": "from models.dense_net import DenseNetConfig, DenseNet\nfrom models.convnet import SimpleConvnetConfig, SimpleConvnet\nimport numpy as np\n\n\ndef get_model_config_by_name(name):\n\tif name == 'DenseNet':\n\t\treturn DenseNetConfig\n\telif name == 'SimpleConvnet':\n\t\treturn SimpleConvnetConfig\n\telse:\n\t\traise ValueError('Unknown model type %s' % name)\n\n\ndef get_model_by_name(name):\n\tif name == 'DenseNet':\n\t\treturn DenseNet\n\telif name == 'SimpleConvnet':\n\t\treturn SimpleConvnet\n\telse:\n\t\traise ValueError('Unknown model type %s' % name)\n\n\nclass RunConfig:\n\tdef __init__(self, batch_size, n_epochs, init_lr, reduce_lr_epochs, reduce_lr_factors, opt_config,\n\t\t\t\t dataset, validation_size, validation_frequency, shuffle, normalization, should_save_logs,\n\t\t\t\t should_save_model, renew_logs=False, other_lr_schedule=None, include_extra=True, **kwargs):\n\t\t\n\t\tself.batch_size = batch_size\n\t\tself.n_epochs = n_epochs\n\t\tself.init_lr = init_lr\n\t\tself.reduce_lr_epochs = reduce_lr_epochs\n\t\tself.reduce_lr_factors = reduce_lr_factors\n\t\tself.opt_config = opt_config\n\t\tself.dataset = dataset\n\t\tself.validation_size = validation_size\n\t\tself.validation_frequency = validation_frequency\n\t\tself.shuffle = shuffle\n\t\tself.normalization = normalization\n\t\tself.should_save_logs = should_save_logs\n\t\tself.should_save_model = should_save_model\n\t\tself.renew_logs = renew_logs\n\t\tself.other_lr_schedule = other_lr_schedule\n\t\tself.include_extra = include_extra\n\t\n\tdef get_config(self):\n\t\treturn self.__dict__\n\t\n\tdef update(self, new_config):\n\t\tself.__dict__.update(new_config)\n\t\n\tdef copy(self):\n\t\treturn RunConfig(**self.get_config())\n\t\t\n\tdef learning_rate(self, epoch):\n\t\tif self.other_lr_schedule is None or self.other_lr_schedule.get('type') is None:\n\t\t\tlr = self.init_lr\n\t\t\tfor reduce_lr_epoch, reduce_factor in zip(self.reduce_lr_epochs, self.reduce_lr_factors):\n\t\t\t\tif epoch >= reduce_lr_epoch * self.n_epochs:\n\t\t\t\t\tlr /= reduce_factor\n\t\telse:\n\t\t\tif self.other_lr_schedule['type'] == 'cosine':\n\t\t\t\tlr_max = self.init_lr\n\t\t\t\tlr_min = self.other_lr_schedule.get('lr_min', 0)\n\t\t\t\tlr = lr_min + 0.5 * (lr_max - lr_min) * (1 + np.cos((epoch - 1) / self.n_epochs * np.pi))\n\t\t\telse:\n\t\t\t\traise ValueError('Do not support %s' % self.other_lr_schedule['type'])\n\t\treturn lr\n\n\t@staticmethod\n\tdef get_default_run_config(dataset='C10+'):\n\t\tif dataset in ['C10', 'C10+', 'C100', 'C100+']:\n\t\t\trun_config = {\n\t\t\t\t'batch_size': 64,\n\t\t\t\t'n_epochs': 30,\n\t\t\t\t'init_lr': 0.1,\n\t\t\t\t'reduce_lr_epochs': [0.5, 0.75],  # epochs * 0.5, epochs * 0.75\n\t\t\t\t'reduce_lr_factors': [10, 10],\n\t\t\t\t'opt_config': ['momentum', {'momentum': 0.9, 'use_nesterov': True}],\n\t\t\t\t'dataset': dataset,  # choices = [C10, C10+, C100, C100+]\n\t\t\t\t'validation_size': None,  # None or int\n\t\t\t\t'validation_frequency': 10,\n\t\t\t\t'shuffle': 'every_epoch',  # None, once_prior_train, every_epoch\n\t\t\t\t'normalization': 'by_channels',  # None, divide_256, divide_255, by_channels\n\t\t\t\t'should_save_logs': True,\n\t\t\t\t'should_save_model': True,\n\t\t\t\t'renew_logs': True,\n\t\t\t\t'other_lr_schedule': {'type': 'cosine'},  # None, or cosine\n\t\t\t}\n\t\telif dataset in ['SVHN']:\n\t\t\trun_config = {\n\t\t\t\t'batch_size': 64,\n\t\t\t\t'n_epochs': 40,\n\t\t\t\t'init_lr': 0.1,\n\t\t\t\t'reduce_lr_epochs': [0.5, 0.75],  # epochs * 0.5, epochs * 0.75\n\t\t\t\t'reduce_lr_factors': [10, 10],\n\t\t\t\t'opt_config': ['momentum', {'momentum': 0.9, 'use_nesterov': True}],\n\t\t\t\t'dataset': dataset,  # choices = [C10, C10+, C100, C100+]\n\t\t\t\t'validation_size': None,  # None or int\n\t\t\t\t'validation_frequency': 1,\n\t\t\t\t'shuffle': True,\n\t\t\t\t'normalization': 'divide_255',  # None, divide_256, divide_255, by_channels\n\t\t\t\t'should_save_logs': True,\n\t\t\t\t'should_save_model': True,\n\t\t\t\t'renew_logs': True,\n\t\t\t\t'other_lr_schedule': {'type': 'cosine'},  # None, or cosine\n\t\t\t\t'include_extra': False,\n\t\t\t}\n\t\telse:\n\t\t\traise ValueError\n\t\treturn run_config\n\n"
  },
  {
    "path": "Examples/cai_eas/start_nets/start_net_convnet_small_C10+/net.config",
    "content": "{\n    \"name\": \"SimpleConvnet\",\n    \"weight_decay\": 0.0001,\n    \"bn_epsilon\": 1e-05,\n    \"bn_decay\": 0.9,\n    \"drop_scheme\": {\n        \"type\": \"conv\",\n        \"conv_drop\": 1.0,\n        \"pool_drop\": 0.7,\n        \"fc_drop\": 0.5\n    },\n    \"layer_cascade\": {\n        \"_id\": \"SimpleConvNet\",\n        \"layers\": [\n            {\n                \"name\": \"conv\",\n                \"filter_num\": 4,\n                \"kernel_size\": 3,\n                \"strides\": 1,\n                \"_id\": \"conv_0\",\n                \"use_bn\": true,\n                \"activation\": \"relu\",\n                \"keep_prob\": 1.0,\n                \"pre_activation\": false\n            },\n            {\n                \"name\": \"pool\",\n                \"_type\": \"max\",\n                \"kernel_size\": 2,\n                \"strides\": 2,\n                \"_id\": \"pool_0\",\n                \"use_bn\": false,\n                \"activation\": null,\n                \"keep_prob\": 1.0,\n                \"pre_activation\": false\n            },\n            {\n                \"name\": \"conv\",\n                \"filter_num\": 4,\n                \"kernel_size\": 3,\n                \"strides\": 1,\n                \"_id\": \"conv_1\",\n                \"use_bn\": true,\n                \"activation\": \"relu\",\n                \"keep_prob\": 1.0,\n                \"pre_activation\": false\n            },\n            {\n                \"name\": \"pool\",\n                \"_type\": \"max\",\n                \"kernel_size\": 2,\n                \"strides\": 2,\n                \"_id\": \"pool_1\",\n                \"use_bn\": false,\n                \"activation\": null,\n                \"keep_prob\": 1.0,\n                \"pre_activation\": false\n            },\n            {\n                \"name\": \"conv\",\n                \"filter_num\": 4,\n                \"kernel_size\": 3,\n                \"strides\": 1,\n                \"_id\": \"conv_2\",\n                \"use_bn\": true,\n                \"activation\": \"relu\",\n                \"keep_prob\": 1.0,\n                \"pre_activation\": false\n            },\n            {\n                \"name\": \"pool\",\n                \"_type\": \"max\",\n                \"kernel_size\": 2,\n                \"strides\": 2,\n                \"_id\": \"pool_2\",\n                \"use_bn\": false,\n                \"activation\": null,\n                \"keep_prob\": 1.0,\n                \"pre_activation\": false\n            },\n            {\n                \"name\": \"conv\",\n                \"filter_num\": 4,\n                \"kernel_size\": 3,\n                \"strides\": 1,\n                \"_id\": \"conv_3\",\n                \"use_bn\": true,\n                \"activation\": \"relu\",\n                \"keep_prob\": 1.0,\n                \"pre_activation\": false\n            },\n            {\n                \"name\": \"pool\",\n                \"_type\": \"avg\",\n                \"kernel_size\": 4,\n                \"strides\": 4,\n                \"_id\": \"pool_4\",\n                \"use_bn\": false,\n                \"activation\": null,\n                \"keep_prob\": 1.0,\n                \"pre_activation\": false\n            },\n            {\n                \"name\": \"fc\",\n                \"units\": 8,\n                \"use_bias\": false,\n                \"_id\": \"fc_0\",\n                \"use_bn\": true,\n                \"activation\": \"relu\",\n                \"keep_prob\": 1.0,\n                \"pre_activation\": false\n            },\n            {\n                \"name\": \"fc\",\n                \"units\": 10,\n                \"use_bias\": true,\n                \"_id\": \"fc_1\",\n                \"use_bn\": false,\n                \"activation\": null,\n                \"keep_prob\": 1.0,\n                \"pre_activation\": false\n            }\n        ]\n    }\n}"
  },
  {
    "path": "Examples/compression/mnist_pytorch/README.md",
    "content": "# Compression examples (PyTorch)\n\n## Requirements\n\nThe base requirements for Auptimizer apply here.\n\nAdditionally, in order for the examples to work, torch >= 1.7.0 is needed.\n\n## Example details\nWe provide an example configuration file and a corresponding training script for each of the compressors supported. Due to the fact that some compressors require additional modification of the training script, we provide individual training scripts for those compressors for clarity.\n\nFor pruners, we also provide the configuration files for both one-time compression and automatic compression experiments. For one-time compression, the configuration file is named as ``exp_<pruner_name>.json``. For automatic compression, the configuration file is named as ``exp_auto<pruner_name>.json``.  \n\nFor quantizers, the configuration file is named as ``exp_<quantizer_name>.json``.\n\nTo further demonstrate the usage of automatic compression experiments using different Proposers and hyperparameter settings, we provide multiple examples for each of the Proposer. The corresponding configuration files are named ``exp_auto_fpgm_<Proposer_name>.json``. \n\nIn addition, to showcase the two use cases where the user can assign the same or different hyperparameter values for a group of layers, the configuration files ``exp_auto_fpgm_random_no_expand.json`` and ``exp_auto_fpgm_random.json`` can be used as references comparatively.\n\nFinally, ``exp_auto_fpgm_aup_args.json`` and ``mnist_aup_args.py`` demonstrate how to use the decorator \n``@aup_args`` to launch a compression experiment.\n\n## Running the examples\n\nFor one-time compression:\n\n```sh\npython -m aup.compression exp_level.json\n```\n\nFor automatic compression:\n\n```sh\npython -m aup.compression exp_auto_level.json --automatic\n```\n\nThe ``--launch_dashboard`` flag can be added to the command if the user wants to show the dashboard while running the experiment."
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_activation_apoz_rank.json",
    "content": "{\n    \"name\": \"PyTorch MNIST Activation APoZ Rank Filter Pruner\",\n    \"script\": \"mnist.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"activation_apoz_rank_filter\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_activation_apoz_rank_dependency_aware.json",
    "content": "{\n    \"name\": \"PyTorch MNIST Activation APoZ Rank Filter Pruner (dependency aware)\",\n    \"script\": \"mnist_dependency_aware.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"activation_apoz_rank_filter\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_activation_mean_rank.json",
    "content": "{\n    \"name\": \"PyTorch MNIST Activation Mean Rank Filter Pruner\",\n    \"script\": \"mnist.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"activation_mean_rank_filter\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_activation_mean_rank_dependency_aware.json",
    "content": "{\n    \"name\": \"PyTorch MNIST Activation Mean Rank Filter Pruner (dependency aware)\",\n    \"script\": \"mnist_dependency_aware.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"activation_mean_rank_filter\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_admm.json",
    "content": "{\n    \"name\": \"PyTorch MNIST ADMM Pruner\",\n    \"script\": \"mnist_admm.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"admm\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"],\n                \"op_names\": [\"conv1\"]\n            }, {\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"],\n                \"op_names\": [\"conv2\"]\n            }\n        ]\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_agp.json",
    "content": "{\n    \"name\": \"PyTorch MNIST AGP Pruner\",\n    \"script\": \"mnist_agp.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"agp\",\n        \"config_list\": [{    \n                \"initial_sparsity\": 0.0,\n                \"final_sparsity\": 0.8,\n                \"start_epoch\": 0,\n                \"end_epoch\": 2,\n                \"frequency\": 1,\n                \"op_names\": [\"conv1\", \"conv2\", \"fc1\", \"fc2\"],\n                \"op_types\": [\"default\"]\n            }\n        ]\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_amc.json",
    "content": "{\n    \"name\": \"PyTorch MNIST AMC Pruner\",\n    \"script\": \"mnist_amc.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"amc\",\n        \"config_list\": [{\n                \"op_types\": [\"Conv2d\", \"Linear\"]\n            }\n        ]\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_auto_activation_apoz_rank.json",
    "content": "{\n    \"name\": \"PyTorch MNIST Activation APoZ Rank Filter Pruner (automatic)\",\n    \"script\": \"mnist.py\",\n    \"resource\": \"cpu\",\n    \"resource_args\": {\n        \"save_model\": true\n    },\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"activation_apoz_rank_filter\",\n        \"config_list\": [{\n                \"sparsity\": {\n                    \"range\": [0.1, 0.9],\n                    \"type\": \"float\"\n                },\n                \"op_names\": [\"conv1\", \"conv2\"]\n            }\n        ]\n    },\n    \"proposer\": \"random\",\n    \"n_parallel\": 4,\n    \"target\": \"max\",\n    \"n_samples\": 5\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_auto_activation_mean_rank.json",
    "content": "{\n    \"name\": \"PyTorch MNIST Activation Mean Rank Filter Pruner (automatic)\",\n    \"script\": \"mnist.py\",\n    \"resource\": \"cpu\",\n    \"resource_args\": {\n        \"save_model\": true\n    },\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"activation_mean_rank_filter\",\n        \"config_list\": [{\n                \"sparsity\": {\n                    \"range\": [0.1, 0.9],\n                    \"type\": \"float\"\n                },\n                \"op_names\": [\"conv1\", \"conv2\"]\n            }\n        ]\n    },\n    \"proposer\": \"random\",\n    \"n_parallel\": 4,\n    \"target\": \"max\",\n    \"n_samples\": 5\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_auto_admm.json",
    "content": "{\n    \"name\": \"PyTorch MNIST ADMM Pruner (automatic)\",\n    \"script\": \"mnist_admm.py\",\n    \"resource\": \"cpu\",\n    \"resource_args\": {\n        \"save_model\": true\n    },\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"admm\",\n        \"config_list\": [{\n            \"sparsity\": {\n                \"range\": [0.1, 0.9],\n                \"type\": \"float\"\n            },\n            \"op_names\": [\"conv1\", \"conv2\"],\n            \"op_types\": [\"Conv2d\"]\n        }]\n    },\n    \"proposer\": \"random\",\n    \"n_parallel\": 4,\n    \"target\": \"max\",\n    \"n_samples\": 5\n}\n  \n"
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_auto_agp.json",
    "content": "{\n    \"name\": \"PyTorch MNIST AGP Pruner (automatic)\",\n    \"script\": \"mnist_no_speedup.py\",\n    \"resource\": \"cpu\",\n    \"resource_args\": {\n        \"save_model\": true\n    },\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"agp\",\n        \"config_list\": [{\n                \"initial_sparsity\": 0.0,\n                \"final_sparsity\": {\n                    \"range\": [0.0, 0.9],\n                    \"type\": \"float\"\n                },\n                \"start_epoch\": 0,\n                \"end_epoch\": 2,\n                \"frequency\": 1,\n                \"op_names\": [\"conv1\", \"conv2\", \"fc1\", \"fc2\"]\n            }\n        ]\n    },\n    \"proposer\": \"random\",\n    \"n_parallel\": 4,\n    \"target\": \"max\",\n    \"n_samples\": 5\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_auto_fpgm_aup_args.json",
    "content": "{\n    \"name\": \"PyTorch MNIST FPGM Pruner (@aup_args) (automatic)\",\n    \"script\": \"mnist_aup_args.py\",\n    \"resource\": \"cpu\",\n    \"resource_args\": {\n        \"save_model\": true\n    },\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"fpgm\",\n        \"config_list\": [{\n                \"sparsity\": {\n                    \"range\": [0.1, 0.9],\n                    \"type\": \"float\"\n                },\n                \"op_names\": [\"conv1\", \"conv2\"]\n            }\n        ]\n    },\n    \"proposer\": \"random\",\n    \"n_parallel\": 4,\n    \"target\": \"max\",\n    \"n_samples\": 5\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_auto_fpgm_bohb.json",
    "content": "{\n    \"name\": \"PyTorch MNIST FPGM Pruner (automatic)\",\n    \"script\": \"mnist.py\",\n    \"resource\": \"cpu\",\n    \"resource_args\": {\n        \"save_model\": true\n    },\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"fpgm\",\n        \"config_list\": [{\n                \"sparsity\": {\n                    \"range\": [0.1, 0.9],\n                    \"type\": \"float\"\n                },\n                \"op_names\": [\"conv1\", \"conv2\"]\n            }\n        ]\n    },\n    \"proposer\": \"bohb\",\n    \"n_parallel\": 4,\n    \"target\": \"max\",\n    \"n_samples\": 5,\n    \"num_samples\": 4\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_auto_fpgm_hyperband.json",
    "content": "{\n    \"name\": \"PyTorch MNIST FPGM Pruner (automatic)\",\n    \"script\": \"mnist.py\",\n    \"resource\": \"cpu\",\n    \"resource_args\": {\n        \"save_model\": true\n    },\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"fpgm\",\n        \"config_list\": [{\n                \"sparsity\": {\n                    \"range\": [0.1, 0.9],\n                    \"type\": \"float\"\n                },\n                \"op_names\": [\"conv1\", \"conv2\"]\n            }\n        ]\n    },\n    \"proposer\": \"hyperband\",\n    \"n_parallel\": 4,\n    \"target\": \"max\",\n    \"n_samples\": 5\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_auto_fpgm_hyperopt.json",
    "content": "{\n    \"name\": \"PyTorch MNIST FPGM Pruner (automatic)\",\n    \"script\": \"mnist.py\",\n    \"resource\": \"cpu\",\n    \"resource_args\": {\n        \"save_model\": true\n    },\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"fpgm\",\n        \"config_list\": [{\n                \"sparsity\": {\n                    \"range\": [0.1, 0.9],\n                    \"type\": \"float\"\n                },\n                \"op_names\": [\"conv1\", \"conv2\"]\n            }\n        ]\n    },\n    \"proposer\": \"hyperopt\",\n    \"n_parallel\": 4,\n    \"target\": \"max\",\n    \"n_samples\": 5\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_auto_fpgm_no_expand.json",
    "content": "{\n    \"name\": \"PyTorch MNIST FPGM Pruner (automatic)\",\n    \"script\": \"mnist.py\",\n    \"resource\": \"cpu\",\n    \"resource_args\": {\n        \"save_model\": true\n    },\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"fpgm\",\n        \"config_list\": [{\n                \"sparsity\": {\n                    \"range\": [0.1, 0.9],\n                    \"type\": \"float\"\n                },\n                \"op_names\": [\"conv1\"]\n            }, {\n                \"sparsity\": {\n                    \"range\": [0.1, 0.9],\n                    \"type\": \"float\"\n                },\n                \"op_names\": [\"conv2\"]\n            }\n        ]\n    },\n    \"proposer\": \"random\",\n    \"n_parallel\": 4,\n    \"target\": \"max\",\n    \"n_samples\": 5\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_auto_fpgm_random.json",
    "content": "{\n    \"name\": \"PyTorch MNIST FPGM Pruner (automatic)\",\n    \"script\": \"mnist.py\",\n    \"resource\": \"cpu\",\n    \"resource_args\": {\n        \"save_model\": true\n    },\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"fpgm\",\n        \"config_list\": [{\n                \"sparsity\": {\n                    \"range\": [0.1, 0.9],\n                    \"type\": \"float\"\n                },\n                \"op_names\": [\"conv1\", \"conv2\"]\n            }\n        ]\n    },\n    \"proposer\": \"random\",\n    \"n_parallel\": 4,\n    \"target\": \"max\",\n    \"n_samples\": 5\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_auto_fpgm_random_no_expand.json",
    "content": "{\n    \"name\": \"PyTorch MNIST FPGM Pruner (automatic)\",\n    \"script\": \"mnist.py\",\n    \"resource\": \"cpu\",\n    \"resource_args\": {\n        \"save_model\": true\n    },\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"fpgm\",\n        \"config_list\": [{\n                \"sparsity\": {\n                    \"range\": [0.1, 0.9],\n                    \"type\": \"float\"\n                },\n                \"expand_op_names\": false,\n                \"op_names\": [\"conv1\", \"conv2\"]\n            }\n        ]\n    },\n    \"proposer\": \"random\",\n    \"n_parallel\": 4,\n    \"target\": \"max\",\n    \"n_samples\": 5\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_auto_fpgm_sequence.json",
    "content": "{\n    \"name\": \"PyTorch MNIST FPGM Pruner (automatic)\",\n    \"script\": \"mnist.py\",\n    \"resource\": \"cpu\",\n    \"resource_args\": {\n        \"save_model\": true\n    },\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"fpgm\",\n        \"config_list\": [{\n                \"sparsity\": {\n                    \"range\": [0.1, 0.9],\n                    \"type\": \"float\",\n                    \"interval\": 0.2\n                },\n                \"op_names\": [\"conv1\", \"conv2\"]\n            }\n        ]\n    },\n    \"proposer\": \"sequence\",\n    \"n_parallel\": 4,\n    \"target\": \"max\",\n    \"n_samples\": 5\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_auto_fpgm_spearmint.json",
    "content": "{\n    \"name\": \"PyTorch MNIST FPGM Pruner (automatic)\",\n    \"script\": \"mnist.py\",\n    \"resource\": \"cpu\",\n    \"resource_args\": {\n        \"save_model\": true\n    },\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"fpgm\",\n        \"config_list\": [{\n                \"sparsity\": {\n                    \"range\": [0.1, 0.9],\n                    \"type\": \"float\"\n                },\n                \"op_names\": [\"conv1\", \"conv2\"]\n            }\n        ]\n    },\n    \"proposer\": \"spearmint\",\n    \"n_parallel\": 4,\n    \"target\": \"max\",\n    \"n_samples\": 5\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_auto_l1filter.json",
    "content": "{\n    \"name\": \"PyTorch MNIST L1 Filter Pruner (automatic)\",\n    \"script\": \"mnist.py\",\n    \"resource\": \"cpu\",\n    \"resource_args\": {\n        \"save_model\": true\n    },\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"l1_filter\",\n        \"config_list\": [{\n                \"sparsity\": {\n                    \"range\": [0.1, 0.9],\n                    \"type\": \"float\"\n                },\n                \"op_names\": [\"conv1\", \"conv2\"]\n            }\n        ]\n    },\n    \"proposer\": \"random\",\n    \"n_parallel\": 4,\n    \"target\": \"max\",\n    \"n_samples\": 5\n}\n  \n"
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_auto_l2filter.json",
    "content": "{\n    \"name\": \"PyTorch MNIST L2 Filter Pruner (automatic)\",\n    \"script\": \"mnist.py\",\n    \"resource\": \"cpu\",\n    \"resource_args\": {\n        \"save_model\": true\n    },\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"l2_filter\",\n        \"config_list\": [{\n                \"sparsity\": {\n                    \"range\": [0.1, 0.9],\n                    \"type\": \"float\"\n                },\n                \"op_names\": [\"conv1\", \"conv2\"]\n            }\n        ]\n    },\n    \"proposer\": \"random\",\n    \"n_parallel\": 4,\n    \"target\": \"max\",\n    \"n_samples\": 5\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_auto_level.json",
    "content": "{\n    \"name\": \"PyTorch MNIST Level Pruner (automatic)\",\n    \"script\": \"mnist_no_speedup.py\",\n    \"resource\": \"cpu\",\n    \"resource_args\": {\n        \"save_model\": true\n    },\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"level\",\n        \"config_list\": [{\n                \"sparsity\": {\n                    \"range\": [0.1, 0.9],\n                    \"type\": \"float\"\n                },\n                \"op_names\": [\"conv1\", \"conv2\", \"fc1\", \"fc2\"]\n            }\n        ]\n    },\n    \"proposer\": \"random\",\n    \"n_parallel\": 4,\n    \"target\": \"max\",\n    \"n_samples\": 5\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_auto_lottery_ticket.json",
    "content": "{\n    \"name\": \"PyTorch MNIST Lottery Ticket Pruner (automatic)\",\n    \"script\": \"mnist_lottery_ticket.py\",\n    \"resource\": \"cpu\",\n    \"resource_args\": {\n        \"save_model\": true\n    },\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"lottery_ticket\",\n        \"config_list\": [{\n                \"prune_iterations\": {\n                    \"range\": [1, 10],\n                    \"type\": \"int\"\n                },\n                \"sparsity\": {\n                    \"range\": [0.1, 0.9],\n                    \"type\": \"float\"\n                },\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    },\n    \"proposer\": \"random\",\n    \"n_parallel\": 4,\n    \"target\": \"max\",\n    \"n_samples\": 5\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_auto_taylor_fo.json",
    "content": "{\n    \"name\": \"PyTorch MNIST Taylor FO Weight Filter Pruner (automatic)\",\n    \"script\": \"mnist.py\",\n    \"resource\": \"cpu\",\n    \"resource_args\": {\n        \"save_model\": true\n    },\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"taylor_fo_weight_filter\",\n        \"config_list\": [{\n                \"sparsity\": {\n                    \"range\": [0.1, 0.9],\n                    \"type\": \"float\"\n                },\n                \"op_names\": [\"conv1\", \"conv2\"]\n            }\n        ]\n    },\n    \"proposer\": \"random\",\n    \"n_parallel\": 4,\n    \"target\": \"max\",\n    \"n_samples\": 5\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_autocompress.json",
    "content": "{\n    \"name\": \"PyTorch MNIST Auto Compress Pruner\",\n    \"script\": \"mnist_autocompress.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"auto_compress\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_fpgm.json",
    "content": "{\n    \"name\": \"PyTorch MNIST FPGM Pruner\",\n    \"script\": \"mnist.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"fpgm\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n}\n  \n"
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_fpgm_aup_args.json",
    "content": "{\n    \"name\": \"PyTorch MNIST FPGM Pruner (@aup_args)\",\n    \"script\": \"mnist_aup_args.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"fpgm\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n}\n  \n"
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_fpgm_dependency_aware.json",
    "content": "{\n    \"name\": \"PyTorch MNIST FPGM Pruner (dependency aware)\",\n    \"script\": \"mnist_dependency_aware.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"fpgm\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n}\n  \n"
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_l1filter.json",
    "content": "{\n    \"name\": \"PyTorch MNIST L1 Filter Pruner\",\n    \"script\": \"mnist.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"l1_filter\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_l1filter_dependency_aware.json",
    "content": "{\n    \"name\": \"PyTorch MNIST L1 Filter Pruner (dependency aware)\",\n    \"script\": \"mnist_dependency_aware.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"l1_filter\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_l2filter.json",
    "content": "{\n    \"name\": \"PyTorch MNIST L2 Filter Pruner\",\n    \"script\": \"mnist.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"l2_filter\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_l2filter_dependency_aware.json",
    "content": "{\n    \"name\": \"PyTorch MNIST L2 Filter Pruner (dependency aware)\",\n    \"script\": \"mnist_dependency_aware.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"l2_filter\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_level.json",
    "content": "{\n    \"name\": \"PyTorch MNIST Level Pruner\",\n    \"script\": \"mnist_no_speedup.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"level\",\n        \"config_list\": [{\n                \"sparsity\": 0.8,\n                \"op_types\": [\"default\"]\n            }\n        ]\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_lottery_ticket.json",
    "content": "{\n    \"name\": \"PyTorch MNIST Lottery Ticket Pruner\",\n    \"script\": \"mnist_lottery_ticket.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"lottery_ticket\",\n        \"config_list\": [{\n                \"prune_iterations\": 5,\n                \"sparsity\": 0.8,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_net_adapt.json",
    "content": "{\n    \"name\": \"PyTorch MNIST NetAdapt Pruner\",\n    \"script\": \"mnist_net_adapt.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"net_adapt\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_quantization_bnn.json",
    "content": "{\n    \"name\": \"PyTorch MNIST BNN Quantizer\",\n    \"script\": \"mnist_no_speedup.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"quantization\",\n        \"compressor\": \"bnn\",\n        \"config_list\": [{\n                \"quant_bits\": 1,\n                \"quant_types\": [\"weight\"],\n                \"op_types\": [\"Conv2d\", \"Linear\"],\n                \"op_names\": [\"conv1\", \"conv2\", \"fc1\", \"fc2\"]\n            }]\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_quantization_dorefa.json",
    "content": "{\n    \"name\": \"PyTorch MNIST DoReFa Quantizer\",\n    \"script\": \"mnist_no_speedup.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"quantization\",\n        \"compressor\": \"dorefa\",\n        \"config_list\": [{\n            \"quant_types\": [\"weight\"],\n            \"quant_bits\": 8, \n            \"op_types\": [\"default\"] \n        }]\n    }\n}\n"
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_quantization_naive.json",
    "content": "{\n    \"name\": \"PyTorch MNIST Naive Quantizer\",\n    \"script\": \"mnist_no_speedup.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"quantization\",\n        \"compressor\": \"naive\",\n        \"config_list\": []\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_quantization_qat.json",
    "content": "{\n    \"name\": \"PyTorch MNIST QAT Quantizer\",\n    \"script\": \"mnist_no_speedup.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"quantization\",\n        \"compressor\": \"qat\",\n        \"config_list\": [{\n            \"quant_types\": [\"weight\"],\n            \"quant_bits\": {\n                \"weight\": 8\n            },\n            \"op_types\": [\"Conv2d\", \"Linear\"]\n        }, {\n            \"quant_types\": [\"output\"],\n            \"quant_bits\": 8,\n            \"quant_start_step\": 7000,\n            \"op_types\":[\"ReLU6\"]\n        }]\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_sensitivity.json",
    "content": "{\n    \"name\": \"PyTorch MNIST Sensitivity Pruner\",\n    \"script\": \"mnist_sensitivity.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"sensitivity\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_simulated_annealing.json",
    "content": "{\n    \"name\": \"PyTorch MNIST Simulated Annealing Pruner\",\n    \"script\": \"mnist_simulated_annealing.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"simulated_annealing\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_taylor_fo.json",
    "content": "{\n    \"name\": \"PyTorch MNIST Taylor FO Weight Filter Pruner\",\n    \"script\": \"mnist.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"taylor_fo_weight_filter\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/exp_taylor_fo_dependency_aware.json",
    "content": "{\n    \"name\": \"PyTorch MNIST Taylor FO Weight Filter Pruner (dependency aware)\",\n    \"script\": \"mnist_dependency_aware.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"taylor_fo_weight_filter\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_pytorch/mnist.py",
    "content": "#!/usr/bin/env python3\n\n\"\"\"\nMNIST convolutional network using pytorch\n============================================\n\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\n\nfrom __future__ import print_function\nimport argparse\nimport sys\nimport time\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch.optim as optim\nfrom torchvision import datasets, transforms\nfrom torch.optim.lr_scheduler import StepLR\n\nimport aup\n\n\nclass Net(nn.Module):\n    def __init__(self):\n        super(Net, self).__init__()\n        self.conv1 = nn.Conv2d(1, 32, 3, 1)\n        self.conv2 = nn.Conv2d(32, 64, 3, 1)\n        self.dropout1 = nn.Dropout2d(0.25)\n        self.dropout2 = nn.Dropout2d(0.5)\n        self.fc1 = nn.Linear(9216, 128)\n        self.fc2 = nn.Linear(128, 10)\n\n    def forward(self, x):\n        x = self.conv1(x)\n        x = F.relu(x)\n        x = self.conv2(x)\n        x = F.relu(x)\n        x = F.max_pool2d(x, 2)\n        x = self.dropout1(x)\n        x = torch.flatten(x, 1)\n        x = self.fc1(x)\n        x = F.relu(x)\n        x = self.dropout2(x)\n        x = self.fc2(x)\n        output = F.log_softmax(x, dim=1)\n        return output\n\n\ndef train(args, model, device, train_loader, optimizer, epoch):\n    model.train()\n    for batch_idx, (data, target) in enumerate(train_loader):\n        data, target = data.to(device), target.to(device)\n        optimizer.zero_grad()\n        output = model(data)\n        loss = F.nll_loss(output, target)\n        loss.backward()\n        optimizer.step()\n        if batch_idx % args.log_interval == 0:\n            print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n                epoch, batch_idx * len(data), len(train_loader.dataset),\n                100. * batch_idx / len(train_loader), loss.item()))\n            if args.dry_run:\n                break\n\n\ndef test(model, device, test_loader):\n    model.eval()\n    test_loss = 0\n    correct = 0\n    with torch.no_grad():\n        for data, target in test_loader:\n            data, target = data.to(device), target.to(device)\n            output = model(data)\n            test_loss += F.nll_loss(output, target, reduction='sum').item()  # sum up batch loss\n            pred = output.argmax(dim=1, keepdim=True)  # get the index of the max log-probability\n            correct += pred.eq(target.view_as(pred)).sum().item()\n\n    test_loss /= len(test_loader.dataset)\n\n    print('\\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n        test_loss, correct, len(test_loader.dataset),\n        100. * correct / len(test_loader.dataset)))\n    \n    return test_loss, correct / len(test_loader.dataset)\n\n\ndef main(config):\n    # Training settings\n    parser = argparse.ArgumentParser(description='PyTorch MNIST Example')\n    parser.add_argument('--batch-size', type=int, default=64, metavar='N',\n                        help='input batch size for training (default: 64)')\n    parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',\n                        help='input batch size for testing (default: 1000)')\n    parser.add_argument('--epochs', type=int, default=1, metavar='N',\n                        help='number of epochs to train (default: 14)')\n    parser.add_argument('--lr', type=float, default=1.0, metavar='LR',\n                        help='learning rate (default: 1.0)')\n    parser.add_argument('--gamma', type=float, default=0.7, metavar='M',\n                        help='Learning rate step gamma (default: 0.7)')\n    parser.add_argument('--no-cuda', action='store_true', default=False,\n                        help='disables CUDA training')\n    parser.add_argument('--dry-run', action='store_true', default=False,\n                        help='quickly check a single pass')\n    parser.add_argument('--seed', type=int, default=1, metavar='S',\n                        help='random seed (default: 1)')\n    parser.add_argument('--log-interval', type=int, default=10, metavar='N',\n                        help='how many batches to wait before logging training status')\n    args, _ = parser.parse_known_args()\n\n    use_cuda = not args.no_cuda and torch.cuda.is_available()\n\n    torch.manual_seed(args.seed)\n\n    device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n\n    kwargs = {'batch_size': args.batch_size}\n    if use_cuda:\n        kwargs.update({'num_workers': 1,\n                       'pin_memory': True,\n                       'shuffle': True},\n                     )\n\n    transform = transforms.Compose([\n        transforms.ToTensor(),\n        transforms.Normalize((0.1307,), (0.3081,))\n    ])\n    dataset1 = datasets.MNIST('/tmp/torch_mnist_data', train=True, download=True, transform=transform)\n    dataset2 = datasets.MNIST('/tmp/torch_mnist_data', train=False, transform=transform)\n    train_loader = torch.utils.data.DataLoader(dataset1, **kwargs)\n    test_loader = torch.utils.data.DataLoader(dataset2, **kwargs)\n\n    model = Net().to(device)\n    model.load_state_dict(torch.load(\"mnist_pretrained.pth\", map_location=lambda storage, location: storage))\n    optimizer = optim.Adadelta(model.parameters(), lr=args.lr)\n    _, test_acc = test(model, device, test_loader)\n\n    compressor = aup.compression.create_compressor(model, config, optimizer=optimizer)\n    model = compressor.compress()\n\n    scheduler = StepLR(optimizer, step_size=1, gamma=args.gamma)\n    for epoch in range(1, args.epochs + 1):\n        train(args, model, device, train_loader, optimizer, epoch)\n        _, test_acc = test(model, device, test_loader)\n        scheduler.step()\n\n    model = compressor.apply_speedup(dummy_input=torch.randn(1, 1, 28, 28).to(device))\n    flops, _, _ = compressor.count_flops_params((1, 1, 28, 28))\n    flops = int(flops)\n    print(\"test_acc={} flops={}\".format(test_acc, flops))\n\n    if \"save_model\" in config and config[\"save_model\"]:\n        compressor.export_model(\n            model_path=\"mnist_compressed.pth\",\n            speedup=True,\n            folder_name=config[\"folder_name\"])\n\n    aup.print_result((test_acc - 1.) / np.log(flops))\n\n\nif __name__ == '__main__':\n    config = aup.BasicConfig().load(sys.argv[1])\n    main(config)\n"
  },
  {
    "path": "Examples/compression/mnist_pytorch/mnist_admm.py",
    "content": "#!/usr/bin/env python3\n\nfrom __future__ import print_function\nimport argparse\nimport sys\nimport time\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch.optim as optim\nfrom torchvision import datasets, transforms\nfrom torch.optim.lr_scheduler import StepLR\n\nimport aup\n\n\nclass Net(nn.Module):\n    def __init__(self):\n        super(Net, self).__init__()\n        self.conv1 = nn.Conv2d(1, 32, 3, 1)\n        self.conv2 = nn.Conv2d(32, 64, 3, 1)\n        self.dropout1 = nn.Dropout2d(0.25)\n        self.dropout2 = nn.Dropout2d(0.5)\n        self.fc1 = nn.Linear(9216, 128)\n        self.fc2 = nn.Linear(128, 10)\n\n    def forward(self, x):\n        x = self.conv1(x)\n        x = F.relu(x)\n        x = self.conv2(x)\n        x = F.relu(x)\n        x = F.max_pool2d(x, 2)\n        x = self.dropout1(x)\n        x = torch.flatten(x, 1)\n        x = self.fc1(x)\n        x = F.relu(x)\n        x = self.dropout2(x)\n        x = self.fc2(x)\n        output = F.log_softmax(x, dim=1)\n        return output\n\n\ndef train(args, model, device, train_loader, optimizer, epoch):\n    model.train()\n    for batch_idx, (data, target) in enumerate(train_loader):\n        data, target = data.to(device), target.to(device)\n        optimizer.zero_grad()\n        output = model(data)\n        loss = F.nll_loss(output, target)\n        loss.backward()\n        optimizer.step()\n        if batch_idx % args.log_interval == 0:\n            print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n                epoch, batch_idx * len(data), len(train_loader.dataset),\n                100. * batch_idx / len(train_loader), loss.item()))\n            if args.dry_run:\n                break\n\n\ndef test(model, device, test_loader):\n    model.eval()\n    test_loss = 0\n    correct = 0\n    with torch.no_grad():\n        for data, target in test_loader:\n            data, target = data.to(device), target.to(device)\n            output = model(data)\n            test_loss += F.nll_loss(output, target, reduction='sum').item()  # sum up batch loss\n            pred = output.argmax(dim=1, keepdim=True)  # get the index of the max log-probability\n            correct += pred.eq(target.view_as(pred)).sum().item()\n\n    test_loss /= len(test_loader.dataset)\n\n    print('\\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n        test_loss, correct, len(test_loader.dataset),\n        100. * correct / len(test_loader.dataset)))\n    \n    return test_loss, correct / len(test_loader.dataset)\n\n\ndef main(config):\n    # Training settings\n    parser = argparse.ArgumentParser(description='PyTorch MNIST Example')\n    parser.add_argument('--batch-size', type=int, default=64, metavar='N',\n                        help='input batch size for training (default: 64)')\n    parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',\n                        help='input batch size for testing (default: 1000)')\n    parser.add_argument('--epochs', type=int, default=2, metavar='N',\n                        help='number of epochs to train (default: 14)')\n    parser.add_argument('--lr', type=float, default=1.0, metavar='LR',\n                        help='learning rate (default: 1.0)')\n    parser.add_argument('--gamma', type=float, default=0.7, metavar='M',\n                        help='Learning rate step gamma (default: 0.7)')\n    parser.add_argument('--no-cuda', action='store_true', default=False,\n                        help='disables CUDA training')\n    parser.add_argument('--dry-run', action='store_true', default=False,\n                        help='quickly check a single pass')\n    parser.add_argument('--seed', type=int, default=1, metavar='S',\n                        help='random seed (default: 1)')\n    parser.add_argument('--log-interval', type=int, default=10, metavar='N',\n                        help='how many batches to wait before logging training status')\n    args, _ = parser.parse_known_args()\n\n    use_cuda = not args.no_cuda and torch.cuda.is_available()\n\n    torch.manual_seed(args.seed)\n\n    device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n\n    kwargs = {'batch_size': args.batch_size}\n    if use_cuda:\n        kwargs.update({'num_workers': 1,\n                       'pin_memory': True,\n                       'shuffle': True},\n                     )\n\n    transform = transforms.Compose([\n        transforms.ToTensor(),\n        transforms.Normalize((0.1307,), (0.3081,))\n    ])\n    dataset1 = datasets.MNIST('/tmp/torch_mnist_data', train=True, download=True, transform=transform)\n    dataset2 = datasets.MNIST('/tmp/torch_mnist_data', train=False, transform=transform)\n    train_loader = torch.utils.data.DataLoader(dataset1, **kwargs)\n    test_loader = torch.utils.data.DataLoader(dataset2, **kwargs)\n\n    model = Net().to(device)\n    model.load_state_dict(torch.load(\"mnist_pretrained.pth\", map_location=lambda storage, location: storage))\n    optimizer = optim.Adadelta(model.parameters(), lr=args.lr)\n    scheduler = StepLR(optimizer, step_size=1, gamma=args.gamma)\n    _, test_acc = test(model, device, test_loader)\n\n    def short_term_fine_tuner(model, criterion, optimizer, epoch, callback):\n        model.train()\n        for batch_idx, (data, target) in enumerate(train_loader):\n            data, target = data.to(device), target.to(device)\n            optimizer.zero_grad()\n            output = model(data)\n            loss = criterion(output, target)\n            loss.backward()\n            if callback:\n                callback()\n            optimizer.step()\n            if batch_idx % args.log_interval == 0:\n                print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n                    epoch, batch_idx * len(data), len(train_loader.dataset),\n                    100. * batch_idx / len(train_loader), loss.item()))\n                if args.dry_run:\n                    break\n        scheduler.step()\n\n    def evaluator(model):\n        _, test_acc = test(model, device, test_loader)\n        return test_acc\n\n    compressor = aup.compression.create_compressor(model, config, trainer=short_term_fine_tuner, num_iterations=30, training_epochs=1)\n    model = compressor.compress()\n\n    model = compressor.apply_speedup(dummy_input=torch.randn(1, 1, 28, 28).to(device))\n    flops, _, _ = compressor.count_flops_params((1, 1, 28, 28))\n    flops = int(flops)\n    print(\"test_acc={} flops={}\".format(test_acc, flops))\n\n    compressor.export_model(\n        model_path=\"mnist_compressed.pth\",\n        save_best_only=True,\n        speedup=True,\n        **config)\n\n    aup.print_result((test_acc - 1.) / np.log(flops))\n\n\nif __name__ == '__main__':\n    config = aup.BasicConfig().load(sys.argv[1])\n    main(config)"
  },
  {
    "path": "Examples/compression/mnist_pytorch/mnist_agp.py",
    "content": "#!/usr/bin/env python3\n\nfrom __future__ import print_function\nimport argparse\nimport sys\nimport time\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch.optim as optim\nfrom torchvision import datasets, transforms\nfrom torch.optim.lr_scheduler import StepLR\n\nimport aup\n\n\nclass Net(nn.Module):\n    def __init__(self):\n        super(Net, self).__init__()\n        self.conv1 = nn.Conv2d(1, 32, 3, 1)\n        self.conv2 = nn.Conv2d(32, 64, 3, 1)\n        self.dropout1 = nn.Dropout2d(0.25)\n        self.dropout2 = nn.Dropout2d(0.5)\n        self.fc1 = nn.Linear(9216, 128)\n        self.fc2 = nn.Linear(128, 10)\n\n    def forward(self, x):\n        x = self.conv1(x)\n        x = F.relu(x)\n        x = self.conv2(x)\n        x = F.relu(x)\n        x = F.max_pool2d(x, 2)\n        x = self.dropout1(x)\n        x = torch.flatten(x, 1)\n        x = self.fc1(x)\n        x = F.relu(x)\n        x = self.dropout2(x)\n        x = self.fc2(x)\n        output = F.log_softmax(x, dim=1)\n        return output\n\n\ndef train(args, model, device, train_loader, optimizer, epoch):\n    model.train()\n    for batch_idx, (data, target) in enumerate(train_loader):\n        data, target = data.to(device), target.to(device)\n        optimizer.zero_grad()\n        output = model(data)\n        loss = F.nll_loss(output, target)\n        loss.backward()\n        optimizer.step()\n        if batch_idx % args.log_interval == 0:\n            print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n                epoch, batch_idx * len(data), len(train_loader.dataset),\n                100. * batch_idx / len(train_loader), loss.item()))\n            if args.dry_run:\n                break\n\n\ndef test(model, device, test_loader):\n    model.eval()\n    test_loss = 0\n    correct = 0\n    with torch.no_grad():\n        for data, target in test_loader:\n            data, target = data.to(device), target.to(device)\n            output = model(data)\n            test_loss += F.nll_loss(output, target, reduction='sum').item()  # sum up batch loss\n            pred = output.argmax(dim=1, keepdim=True)  # get the index of the max log-probability\n            correct += pred.eq(target.view_as(pred)).sum().item()\n\n    test_loss /= len(test_loader.dataset)\n\n    print('\\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n        test_loss, correct, len(test_loader.dataset),\n        100. * correct / len(test_loader.dataset)))\n    \n    return test_loss, correct / len(test_loader.dataset)\n\n\ndef main(config):\n    # Training settings\n    parser = argparse.ArgumentParser(description='PyTorch MNIST Example')\n    parser.add_argument('--batch-size', type=int, default=64, metavar='N',\n                        help='input batch size for training (default: 64)')\n    parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',\n                        help='input batch size for testing (default: 1000)')\n    parser.add_argument('--epochs', type=int, default=2, metavar='N',\n                        help='number of epochs to train (default: 14)')\n    parser.add_argument('--lr', type=float, default=1.0, metavar='LR',\n                        help='learning rate (default: 1.0)')\n    parser.add_argument('--gamma', type=float, default=0.7, metavar='M',\n                        help='Learning rate step gamma (default: 0.7)')\n    parser.add_argument('--no-cuda', action='store_true', default=False,\n                        help='disables CUDA training')\n    parser.add_argument('--dry-run', action='store_true', default=False,\n                        help='quickly check a single pass')\n    parser.add_argument('--seed', type=int, default=1, metavar='S',\n                        help='random seed (default: 1)')\n    parser.add_argument('--log-interval', type=int, default=10, metavar='N',\n                        help='how many batches to wait before logging training status')\n    args, _ = parser.parse_known_args()\n\n    use_cuda = not args.no_cuda and torch.cuda.is_available()\n\n    torch.manual_seed(args.seed)\n\n    device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n\n    kwargs = {'batch_size': args.batch_size}\n    if use_cuda:\n        kwargs.update({'num_workers': 1,\n                       'pin_memory': True,\n                       'shuffle': True},\n                     )\n\n    transform = transforms.Compose([\n        transforms.ToTensor(),\n        transforms.Normalize((0.1307,), (0.3081,))\n    ])\n    dataset1 = datasets.MNIST('/tmp/torch_mnist_data', train=True, download=True, transform=transform)\n    dataset2 = datasets.MNIST('/tmp/torch_mnist_data', train=False, transform=transform)\n    train_loader = torch.utils.data.DataLoader(dataset1, **kwargs)\n    test_loader = torch.utils.data.DataLoader(dataset2, **kwargs)\n\n    model = Net().to(device)\n    model.load_state_dict(torch.load(\"mnist_pretrained.pth\", map_location=lambda storage, location: storage))\n    optimizer = optim.Adadelta(model.parameters(), lr=args.lr)\n    _, test_acc = test(model, device, test_loader)\n\n    compressor = aup.compression.create_compressor(model, config, optimizer=optimizer)\n    model = compressor.compress()\n\n    scheduler = StepLR(optimizer, step_size=1, gamma=args.gamma)\n    for epoch in range(1, args.epochs + 1):\n        train(args, model, device, train_loader, optimizer, epoch)\n        _, test_acc = test(model, device, test_loader)\n        scheduler.step()\n        compressor.update_epoch(epoch)\n\n    flops, _, _ = compressor.count_flops_params((1, 1, 28, 28))\n    flops = int(flops)\n    print(\"test_acc={} flops={}\".format(test_acc, flops))\n\n    compressor.export_model(\n        model_path=\"mnist_compressed.pth\", \n        mask_path=\"mnist_compressed_mask.pth\",\n        save_best_only=True,\n        **config)\n\n    aup.print_result((test_acc - 1.) / np.log(flops))\n\n\nif __name__ == '__main__':\n    config = aup.BasicConfig().load(sys.argv[1])\n    main(config)"
  },
  {
    "path": "Examples/compression/mnist_pytorch/mnist_amc.py",
    "content": "#!/usr/bin/env python3\n\nfrom __future__ import print_function\nimport argparse\nimport sys\nimport time\n\nimport numpy as np\nfrom PIL import Image\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch.optim as optim\nimport torchvision\nfrom torchvision import datasets, transforms\nfrom torch.optim.lr_scheduler import StepLR\n\nimport aup\n\n\ndef train(args, model, device, train_loader, optimizer, epoch):\n    model.train()\n    for batch_idx, (data, target) in enumerate(train_loader):\n        data, target = data.to(device), target.to(device)\n        optimizer.zero_grad()\n        output = model(data)\n        loss = F.nll_loss(output, target)\n        loss.backward()\n        optimizer.step()\n        if batch_idx % args.log_interval == 0:\n            print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n                epoch, batch_idx * len(data), len(train_loader.dataset),\n                100. * batch_idx / len(train_loader), loss.item()))\n            if args.dry_run:\n                break\n\n\ndef test(model, device, test_loader):\n    model.eval()\n    test_loss = 0\n    correct = 0\n    with torch.no_grad():\n        for data, target in test_loader:\n            data, target = data.to(device), target.to(device)\n            output = model(data)\n            test_loss += F.nll_loss(output, target, reduction='sum').item()  # sum up batch loss\n            pred = output.argmax(dim=1, keepdim=True)  # get the index of the max log-probability\n            correct += pred.eq(target.view_as(pred)).sum().item()\n\n    test_loss /= len(test_loader.dataset)\n\n    print('\\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n        test_loss, correct, len(test_loader.dataset),\n        100. * correct / len(test_loader.dataset)))\n    \n    return test_loss, correct / len(test_loader.dataset)\n\n\ndef main(config):\n    # Training settings\n    parser = argparse.ArgumentParser(description='PyTorch MNIST Example')\n    parser.add_argument('--batch-size', type=int, default=64, metavar='N',\n                        help='input batch size for training (default: 64)')\n    parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',\n                        help='input batch size for testing (default: 1000)')\n    parser.add_argument('--epochs', type=int, default=1, metavar='N',\n                        help='number of epochs to train (default: 14)')\n    parser.add_argument('--lr', type=float, default=1.0, metavar='LR',\n                        help='learning rate (default: 1.0)')\n    parser.add_argument('--gamma', type=float, default=0.7, metavar='M',\n                        help='Learning rate step gamma (default: 0.7)')\n    parser.add_argument('--no-cuda', action='store_true', default=False,\n                        help='disables CUDA training')\n    parser.add_argument('--dry-run', action='store_true', default=False,\n                        help='quickly check a single pass')\n    parser.add_argument('--seed', type=int, default=1, metavar='S',\n                        help='random seed (default: 1)')\n    parser.add_argument('--log-interval', type=int, default=10, metavar='N',\n                        help='how many batches to wait before logging training status')\n    args, _ = parser.parse_known_args()\n\n    use_cuda = not args.no_cuda and torch.cuda.is_available()\n\n    torch.manual_seed(args.seed)\n\n    device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n\n    kwargs = {'batch_size': args.batch_size}\n    if use_cuda:\n        kwargs.update({'num_workers': 1,\n                       'pin_memory': True,\n                       'shuffle': True},\n                     )\n\n    def new_getitem(self, index):\n        img, target = self.data[index], int(self.targets[index])\n\n        # doing this so that it is consistent with all other datasets\n        # to return a PIL Image\n        img = Image.fromarray(img.numpy(), mode='L')\n        img = img.convert('RGB')\n\n        if self.transform is not None:\n            img = self.transform(img)\n\n        if self.target_transform is not None:\n            target = self.target_transform(target)\n\n        return img, target\n    \n    datasets.mnist.MNIST.__getitem__ = new_getitem\n\n    transform = transforms.Compose([\n        transforms.Resize(256),\n        transforms.CenterCrop(224),\n        transforms.ToTensor(),\n        transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),\n    ])\n    dataset1 = datasets.MNIST('/tmp/torch_mnist_data', train=True, download=True, transform=transform)\n    dataset2 = datasets.MNIST('/tmp/torch_mnist_data', train=False, transform=transform)\n    train_loader = torch.utils.data.DataLoader(dataset1, **kwargs)\n    test_loader = torch.utils.data.DataLoader(dataset2, **kwargs)\n\n    model = torch.hub.load('pytorch/vision:v{}'.format(torchvision.__version__), 'mobilenet_v2', pretrained=True).to(device)\n    optimizer = optim.Adadelta(model.parameters(), lr=args.lr)\n    scheduler = StepLR(optimizer, step_size=1, gamma=args.gamma)\n    _, test_acc = test(model, device, test_loader)\n\n    def evaluator(val_loader, model):\n        _, test_acc = test(model, device, val_loader)\n        return test_acc\n\n    compressor = aup.compression.create_compressor(\n        model, config, evaluator=evaluator, val_loader=test_loader, \n        flops_ratio=0.5, model_type=\"mobilenetv2\", n_calibration_batches=1,\n        n_points_per_layer=1, warmup=1, hidden1=32, hidden2=32,\n        train_episode=1, max_episode_length=1)\n    compressor.compress()\n\n    flops, _, _ = compressor.count_flops_params((1, 3, 28, 28))\n    print(\"test_acc={} flops={}\".format(test_acc, flops))\n\n    if \"save_model\" in config and config[\"save_model\"]:\n        compressor.export_model(\n            model_path=\"mnist_compressed.pth\", \n            mask_path=\"mnist_compressed_mask.pth\",\n            save_best_only=True,\n            folder_name=config[\"folder_name\"])\n\n    aup.print_result((test_acc - 1.) / np.log(flops))\n\n\nif __name__ == '__main__':\n    config = aup.BasicConfig().load(sys.argv[1])\n    main(config)"
  },
  {
    "path": "Examples/compression/mnist_pytorch/mnist_aup_args.py",
    "content": "#!/usr/bin/env python3\n\nfrom __future__ import print_function\nimport argparse\nimport sys\nimport time\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch.optim as optim\nfrom torchvision import datasets, transforms\nfrom torch.optim.lr_scheduler import StepLR\n\nimport aup\n\n\nclass Net(nn.Module):\n    def __init__(self):\n        super(Net, self).__init__()\n        self.conv1 = nn.Conv2d(1, 32, 3, 1)\n        self.conv2 = nn.Conv2d(32, 64, 3, 1)\n        self.dropout1 = nn.Dropout2d(0.25)\n        self.dropout2 = nn.Dropout2d(0.5)\n        self.fc1 = nn.Linear(9216, 128)\n        self.fc2 = nn.Linear(128, 10)\n\n    def forward(self, x):\n        x = self.conv1(x)\n        x = F.relu(x)\n        x = self.conv2(x)\n        x = F.relu(x)\n        x = F.max_pool2d(x, 2)\n        x = self.dropout1(x)\n        x = torch.flatten(x, 1)\n        x = self.fc1(x)\n        x = F.relu(x)\n        x = self.dropout2(x)\n        x = self.fc2(x)\n        output = F.log_softmax(x, dim=1)\n        return output\n\n\ndef train(args, model, device, train_loader, optimizer, epoch):\n    model.train()\n    for batch_idx, (data, target) in enumerate(train_loader):\n        data, target = data.to(device), target.to(device)\n        optimizer.zero_grad()\n        output = model(data)\n        loss = F.nll_loss(output, target)\n        loss.backward()\n        optimizer.step()\n        if batch_idx % args.log_interval == 0:\n            print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n                epoch, batch_idx * len(data), len(train_loader.dataset),\n                100. * batch_idx / len(train_loader), loss.item()))\n            if args.dry_run:\n                break\n\n\ndef test(model, device, test_loader):\n    model.eval()\n    test_loss = 0\n    correct = 0\n    with torch.no_grad():\n        for data, target in test_loader:\n            data, target = data.to(device), target.to(device)\n            output = model(data)\n            test_loss += F.nll_loss(output, target, reduction='sum').item()  # sum up batch loss\n            pred = output.argmax(dim=1, keepdim=True)  # get the index of the max log-probability\n            correct += pred.eq(target.view_as(pred)).sum().item()\n\n    test_loss /= len(test_loader.dataset)\n\n    print('\\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n        test_loss, correct, len(test_loader.dataset),\n        100. * correct / len(test_loader.dataset)))\n    \n    return test_loss, correct / len(test_loader.dataset)\n\n\n@aup.aup_args\ndef main(compression_type, compression_framework, compressor, config_list):\n    config = locals()\n    \n    # Training settings\n    parser = argparse.ArgumentParser(description='PyTorch MNIST Example')\n    parser.add_argument('--batch-size', type=int, default=64, metavar='N',\n                        help='input batch size for training (default: 64)')\n    parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',\n                        help='input batch size for testing (default: 1000)')\n    parser.add_argument('--epochs', type=int, default=1, metavar='N',\n                        help='number of epochs to train (default: 14)')\n    parser.add_argument('--lr', type=float, default=1.0, metavar='LR',\n                        help='learning rate (default: 1.0)')\n    parser.add_argument('--gamma', type=float, default=0.7, metavar='M',\n                        help='Learning rate step gamma (default: 0.7)')\n    parser.add_argument('--no-cuda', action='store_true', default=False,\n                        help='disables CUDA training')\n    parser.add_argument('--dry-run', action='store_true', default=False,\n                        help='quickly check a single pass')\n    parser.add_argument('--seed', type=int, default=1, metavar='S',\n                        help='random seed (default: 1)')\n    parser.add_argument('--log-interval', type=int, default=10, metavar='N',\n                        help='how many batches to wait before logging training status')\n    args, _ = parser.parse_known_args()\n\n    use_cuda = not args.no_cuda and torch.cuda.is_available()\n\n    torch.manual_seed(args.seed)\n\n    device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n\n    kwargs = {'batch_size': args.batch_size}\n    if use_cuda:\n        kwargs.update({'num_workers': 1,\n                       'pin_memory': True,\n                       'shuffle': True},\n                     )\n\n    transform = transforms.Compose([\n        transforms.ToTensor(),\n        transforms.Normalize((0.1307,), (0.3081,))\n    ])\n    dataset1 = datasets.MNIST('/tmp/torch_mnist_data', train=True, download=True, transform=transform)\n    dataset2 = datasets.MNIST('/tmp/torch_mnist_data', train=False, transform=transform)\n    train_loader = torch.utils.data.DataLoader(dataset1, **kwargs)\n    test_loader = torch.utils.data.DataLoader(dataset2, **kwargs)\n\n    model = Net().to(device)\n    model.load_state_dict(torch.load(\"mnist_pretrained.pth\", map_location=lambda storage, location: storage))\n    optimizer = optim.Adadelta(model.parameters(), lr=args.lr)\n    _, test_acc = test(model, device, test_loader)\n\n    compressor = aup.compression.create_compressor(model, config, optimizer=optimizer)\n    model = compressor.compress()\n\n    scheduler = StepLR(optimizer, step_size=1, gamma=args.gamma)\n    for epoch in range(1, args.epochs + 1):\n        train(args, model, device, train_loader, optimizer, epoch)\n        _, test_acc = test(model, device, test_loader)\n        scheduler.step()\n\n    model = compressor.apply_speedup(dummy_input=torch.randn(1, 1, 28, 28).to(device))\n    flops, _, _ = compressor.count_flops_params((1, 1, 28, 28))\n    flops = int(flops)\n    print(\"test_acc={} flops={}\".format(test_acc, flops))\n\n    aup.aup_save_model(\n        compressor.export_model,\n        model_path=\"mnist_compressed.pth\",\n        speedup=True)\n\n    return (test_acc - 1.) / np.log(flops)\n\n\nif __name__ == '__main__':\n    if len(sys.argv) < 2:\n        print(\"config file required\")\n        exit(1)\n\n    main(sys.argv[1])\n"
  },
  {
    "path": "Examples/compression/mnist_pytorch/mnist_autocompress.py",
    "content": "#!/usr/bin/env python3\n\nfrom __future__ import print_function\nimport argparse\nimport sys\nimport time\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch.optim as optim\nfrom torchvision import datasets, transforms\nfrom torch.optim.lr_scheduler import StepLR\n\nimport aup\n\n\nclass Net(nn.Module):\n    def __init__(self):\n        super(Net, self).__init__()\n        self.conv1 = nn.Conv2d(1, 32, 3, 1)\n        self.conv2 = nn.Conv2d(32, 64, 3, 1)\n        self.dropout1 = nn.Dropout2d(0.25)\n        self.dropout2 = nn.Dropout2d(0.5)\n        self.fc1 = nn.Linear(9216, 128)\n        self.fc2 = nn.Linear(128, 10)\n\n    def forward(self, x):\n        x = self.conv1(x)\n        x = F.relu(x)\n        x = self.conv2(x)\n        x = F.relu(x)\n        x = F.max_pool2d(x, 2)\n        x = self.dropout1(x)\n        x = torch.flatten(x, 1)\n        x = self.fc1(x)\n        x = F.relu(x)\n        x = self.dropout2(x)\n        x = self.fc2(x)\n        output = F.log_softmax(x, dim=1)\n        return output\n\n\ndef train(args, model, device, train_loader, optimizer, epoch):\n    model.train()\n    for batch_idx, (data, target) in enumerate(train_loader):\n        data, target = data.to(device), target.to(device)\n        optimizer.zero_grad()\n        output = model(data)\n        loss = F.nll_loss(output, target)\n        loss.backward()\n        optimizer.step()\n        if batch_idx % args.log_interval == 0:\n            print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n                epoch, batch_idx * len(data), len(train_loader.dataset),\n                100. * batch_idx / len(train_loader), loss.item()))\n            if args.dry_run:\n                break\n\n\ndef test(model, device, test_loader):\n    model.eval()\n    test_loss = 0\n    correct = 0\n    with torch.no_grad():\n        for data, target in test_loader:\n            data, target = data.to(device), target.to(device)\n            output = model(data)\n            test_loss += F.nll_loss(output, target, reduction='sum').item()  # sum up batch loss\n            pred = output.argmax(dim=1, keepdim=True)  # get the index of the max log-probability\n            correct += pred.eq(target.view_as(pred)).sum().item()\n\n    test_loss /= len(test_loader.dataset)\n\n    print('\\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n        test_loss, correct, len(test_loader.dataset),\n        100. * correct / len(test_loader.dataset)))\n    \n    return test_loss, correct / len(test_loader.dataset)\n\n\ndef main(config):\n    # Training settings\n    parser = argparse.ArgumentParser(description='PyTorch MNIST Example')\n    parser.add_argument('--batch-size', type=int, default=64, metavar='N',\n                        help='input batch size for training (default: 64)')\n    parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',\n                        help='input batch size for testing (default: 1000)')\n    parser.add_argument('--epochs', type=int, default=2, metavar='N',\n                        help='number of epochs to train (default: 14)')\n    parser.add_argument('--lr', type=float, default=1.0, metavar='LR',\n                        help='learning rate (default: 1.0)')\n    parser.add_argument('--gamma', type=float, default=0.7, metavar='M',\n                        help='Learning rate step gamma (default: 0.7)')\n    parser.add_argument('--no-cuda', action='store_true', default=False,\n                        help='disables CUDA training')\n    parser.add_argument('--dry-run', action='store_true', default=False,\n                        help='quickly check a single pass')\n    parser.add_argument('--seed', type=int, default=1, metavar='S',\n                        help='random seed (default: 1)')\n    parser.add_argument('--log-interval', type=int, default=10, metavar='N',\n                        help='how many batches to wait before logging training status')\n    args, _ = parser.parse_known_args()\n\n    use_cuda = not args.no_cuda and torch.cuda.is_available()\n\n    torch.manual_seed(args.seed)\n\n    device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n\n    kwargs = {'batch_size': args.batch_size}\n    if use_cuda:\n        kwargs.update({'num_workers': 1,\n                       'pin_memory': True,\n                       'shuffle': True},\n                     )\n\n    transform = transforms.Compose([\n        transforms.ToTensor(),\n        transforms.Normalize((0.1307,), (0.3081,))\n    ])\n    dataset1 = datasets.MNIST('/tmp/torch_mnist_data', train=True, download=True, transform=transform)\n    dataset2 = datasets.MNIST('/tmp/torch_mnist_data', train=False, transform=transform)\n    train_loader = torch.utils.data.DataLoader(dataset1, **kwargs)\n    test_loader = torch.utils.data.DataLoader(dataset2, **kwargs)\n\n    model = Net().to(device)\n    model.load_state_dict(torch.load(\"mnist_pretrained.pth\", map_location=lambda storage, location: storage))\n    optimizer = optim.Adadelta(model.parameters(), lr=args.lr)\n    scheduler = StepLR(optimizer, step_size=1, gamma=args.gamma)\n    _, test_acc = test(model, device, test_loader)\n\n    def short_term_fine_tuner(model, optimizer, criterion, epoch, callback):\n        model.train()\n        for batch_idx, (data, target) in enumerate(train_loader):\n            data, target = data.to(device), target.to(device)\n            optimizer.zero_grad()\n            output = model(data)\n            loss = criterion(output, target)\n            loss.backward()\n            if callback:\n                callback()\n            optimizer.step()\n            if batch_idx % args.log_interval == 0:\n                print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n                    epoch, batch_idx * len(data), len(train_loader.dataset),\n                    100. * batch_idx / len(train_loader), loss.item()))\n                if args.dry_run:\n                    break\n        scheduler.step()\n\n    def evaluator(model):\n        _, test_acc = test(model, device, test_loader)\n        return test_acc\n\n    compressor = aup.compression.create_compressor(\n        model, config, trainer=short_term_fine_tuner, evaluator=evaluator, \n        dummy_input=torch.randn(1, 1, 28, 28).to(device), optimize_mode=\"maximize\",\n        num_iterations=1, admm_num_iterations=1, admm_training_epochs=1,\n        experiment_data_dir=\"./autocompress\")\n    model = compressor.compress()\n\n    flops, _, _ = compressor.count_flops_params((1, 1, 28, 28))\n    flops = int(flops)\n    print(\"test_acc={} flops={}\".format(test_acc, flops))\n\n    compressor.export_model(\n        model_path=\"mnist_compressed.pth\", \n        mask_path=\"mnist_compressed_mask.pth\",\n        save_best_only=True,\n        **config)\n\n    aup.print_result((test_acc - 1.) / np.log(flops))\n\n\nif __name__ == '__main__':\n    config = aup.BasicConfig().load(sys.argv[1])\n    main(config)"
  },
  {
    "path": "Examples/compression/mnist_pytorch/mnist_dependency_aware.py",
    "content": "#!/usr/bin/env python3\n\nfrom __future__ import print_function\nimport argparse\nimport sys\nimport time\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch.optim as optim\nfrom torchvision import datasets, transforms\nfrom torch.optim.lr_scheduler import StepLR\n\nimport aup\n\n\nclass Net(nn.Module):\n    def __init__(self):\n        super(Net, self).__init__()\n        self.conv1 = nn.Conv2d(1, 32, 3, 1)\n        self.conv2 = nn.Conv2d(32, 64, 3, 1)\n        self.dropout1 = nn.Dropout2d(0.25)\n        self.dropout2 = nn.Dropout2d(0.5)\n        self.fc1 = nn.Linear(9216, 128)\n        self.fc2 = nn.Linear(128, 10)\n\n    def forward(self, x):\n        x = self.conv1(x)\n        x = F.relu(x)\n        x = self.conv2(x)\n        x = F.relu(x)\n        x = F.max_pool2d(x, 2)\n        x = self.dropout1(x)\n        x = torch.flatten(x, 1)\n        x = self.fc1(x)\n        x = F.relu(x)\n        x = self.dropout2(x)\n        x = self.fc2(x)\n        output = F.log_softmax(x, dim=1)\n        return output\n\n\ndef train(args, model, device, train_loader, optimizer, epoch):\n    model.train()\n    for batch_idx, (data, target) in enumerate(train_loader):\n        data, target = data.to(device), target.to(device)\n        optimizer.zero_grad()\n        output = model(data)\n        loss = F.nll_loss(output, target)\n        loss.backward()\n        optimizer.step()\n        if batch_idx % args.log_interval == 0:\n            print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n                epoch, batch_idx * len(data), len(train_loader.dataset),\n                100. * batch_idx / len(train_loader), loss.item()))\n            if args.dry_run:\n                break\n\n\ndef test(model, device, test_loader):\n    model.eval()\n    test_loss = 0\n    correct = 0\n    with torch.no_grad():\n        for data, target in test_loader:\n            data, target = data.to(device), target.to(device)\n            output = model(data)\n            test_loss += F.nll_loss(output, target, reduction='sum').item()  # sum up batch loss\n            pred = output.argmax(dim=1, keepdim=True)  # get the index of the max log-probability\n            correct += pred.eq(target.view_as(pred)).sum().item()\n\n    test_loss /= len(test_loader.dataset)\n\n    print('\\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n        test_loss, correct, len(test_loader.dataset),\n        100. * correct / len(test_loader.dataset)))\n    \n    return test_loss, correct / len(test_loader.dataset)\n\n\ndef main(config):\n    # Training settings\n    parser = argparse.ArgumentParser(description='PyTorch MNIST Example')\n    parser.add_argument('--batch-size', type=int, default=64, metavar='N',\n                        help='input batch size for training (default: 64)')\n    parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',\n                        help='input batch size for testing (default: 1000)')\n    parser.add_argument('--epochs', type=int, default=1, metavar='N',\n                        help='number of epochs to train (default: 14)')\n    parser.add_argument('--lr', type=float, default=1.0, metavar='LR',\n                        help='learning rate (default: 1.0)')\n    parser.add_argument('--gamma', type=float, default=0.7, metavar='M',\n                        help='Learning rate step gamma (default: 0.7)')\n    parser.add_argument('--no-cuda', action='store_true', default=False,\n                        help='disables CUDA training')\n    parser.add_argument('--dry-run', action='store_true', default=False,\n                        help='quickly check a single pass')\n    parser.add_argument('--seed', type=int, default=1, metavar='S',\n                        help='random seed (default: 1)')\n    parser.add_argument('--log-interval', type=int, default=10, metavar='N',\n                        help='how many batches to wait before logging training status')\n    args, _ = parser.parse_known_args()\n\n    use_cuda = not args.no_cuda and torch.cuda.is_available()\n\n    torch.manual_seed(args.seed)\n\n    device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n\n    kwargs = {'batch_size': args.batch_size}\n    if use_cuda:\n        kwargs.update({'num_workers': 1,\n                       'pin_memory': True,\n                       'shuffle': True},\n                     )\n\n    transform = transforms.Compose([\n        transforms.ToTensor(),\n        transforms.Normalize((0.1307,), (0.3081,))\n    ])\n    dataset1 = datasets.MNIST('/tmp/torch_mnist_data', train=True, download=True, transform=transform)\n    dataset2 = datasets.MNIST('/tmp/torch_mnist_data', train=False, transform=transform)\n    train_loader = torch.utils.data.DataLoader(dataset1, **kwargs)\n    test_loader = torch.utils.data.DataLoader(dataset2, **kwargs)\n\n    model = Net().to(device)\n    model.load_state_dict(torch.load(\"mnist_pretrained.pth\", map_location=lambda storage, location: storage))\n    optimizer = optim.Adadelta(model.parameters(), lr=args.lr)\n    _, test_acc = test(model, device, test_loader)\n\n    compressor = aup.compression.create_compressor(model, config, optimizer=optimizer, dependency_aware=True, dummy_input=torch.randn(1, 1, 28, 28).to(device))\n    model = compressor.compress()\n\n    scheduler = StepLR(optimizer, step_size=1, gamma=args.gamma)\n    for epoch in range(1, args.epochs + 1):\n        train(args, model, device, train_loader, optimizer, epoch)\n        _, test_acc = test(model, device, test_loader)\n        scheduler.step()\n\n    model = compressor.apply_speedup(dummy_input=torch.randn(1, 1, 28, 28).to(device))\n    flops, _, _ = compressor.count_flops_params((1, 1, 28, 28))\n    flops = int(flops)\n    print(\"test_acc={} flops={}\".format(test_acc, flops))\n\n    if \"save_model\" in config and config[\"save_model\"]:\n        compressor.export_model(\n            model_path=\"mnist_compressed.pth\",\n            save_best_only=True,\n            speedup=True,\n            folder_name=config[\"folder_name\"])\n\n    aup.print_result((test_acc - 1.) / np.log(flops))\n\n\nif __name__ == '__main__':\n    config = aup.BasicConfig().load(sys.argv[1])\n    main(config)"
  },
  {
    "path": "Examples/compression/mnist_pytorch/mnist_lottery_ticket.py",
    "content": "#!/usr/bin/env python3\n\nfrom __future__ import print_function\nimport argparse\nimport sys\nimport time\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch.optim as optim\nfrom torchvision import datasets, transforms\nfrom torch.optim.lr_scheduler import StepLR\n\nimport aup\n\n\nclass Net(nn.Module):\n    def __init__(self):\n        super(Net, self).__init__()\n        self.conv1 = nn.Conv2d(1, 32, 3, 1)\n        self.conv2 = nn.Conv2d(32, 64, 3, 1)\n        self.dropout1 = nn.Dropout2d(0.25)\n        self.dropout2 = nn.Dropout2d(0.5)\n        self.fc1 = nn.Linear(9216, 128)\n        self.fc2 = nn.Linear(128, 10)\n\n    def forward(self, x):\n        x = self.conv1(x)\n        x = F.relu(x)\n        x = self.conv2(x)\n        x = F.relu(x)\n        x = F.max_pool2d(x, 2)\n        x = self.dropout1(x)\n        x = torch.flatten(x, 1)\n        x = self.fc1(x)\n        x = F.relu(x)\n        x = self.dropout2(x)\n        x = self.fc2(x)\n        output = F.log_softmax(x, dim=1)\n        return output\n\n\ndef train(args, model, device, train_loader, optimizer, epoch):\n    model.train()\n    for batch_idx, (data, target) in enumerate(train_loader):\n        data, target = data.to(device), target.to(device)\n        optimizer.zero_grad()\n        output = model(data)\n        loss = F.nll_loss(output, target)\n        loss.backward()\n        optimizer.step()\n        if batch_idx % args.log_interval == 0:\n            print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n                epoch, batch_idx * len(data), len(train_loader.dataset),\n                100. * batch_idx / len(train_loader), loss.item()))\n            if args.dry_run:\n                break\n\n\ndef test(model, device, test_loader):\n    model.eval()\n    test_loss = 0\n    correct = 0\n    with torch.no_grad():\n        for data, target in test_loader:\n            data, target = data.to(device), target.to(device)\n            output = model(data)\n            test_loss += F.nll_loss(output, target, reduction='sum').item()  # sum up batch loss\n            pred = output.argmax(dim=1, keepdim=True)  # get the index of the max log-probability\n            correct += pred.eq(target.view_as(pred)).sum().item()\n\n    test_loss /= len(test_loader.dataset)\n\n    print('\\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n        test_loss, correct, len(test_loader.dataset),\n        100. * correct / len(test_loader.dataset)))\n    \n    return test_loss, correct / len(test_loader.dataset)\n\n\ndef main(config):\n    # Training settings\n    parser = argparse.ArgumentParser(description='PyTorch MNIST Example')\n    parser.add_argument('--batch-size', type=int, default=64, metavar='N',\n                        help='input batch size for training (default: 64)')\n    parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',\n                        help='input batch size for testing (default: 1000)')\n    parser.add_argument('--epochs', type=int, default=1, metavar='N',\n                        help='number of epochs to train (default: 14)')\n    parser.add_argument('--lr', type=float, default=1.0, metavar='LR',\n                        help='learning rate (default: 1.0)')\n    parser.add_argument('--gamma', type=float, default=0.7, metavar='M',\n                        help='Learning rate step gamma (default: 0.7)')\n    parser.add_argument('--no-cuda', action='store_true', default=False,\n                        help='disables CUDA training')\n    parser.add_argument('--dry-run', action='store_true', default=False,\n                        help='quickly check a single pass')\n    parser.add_argument('--seed', type=int, default=1, metavar='S',\n                        help='random seed (default: 1)')\n    parser.add_argument('--log-interval', type=int, default=10, metavar='N',\n                        help='how many batches to wait before logging training status')\n    args, _ = parser.parse_known_args()\n\n    use_cuda = not args.no_cuda and torch.cuda.is_available()\n\n    torch.manual_seed(args.seed)\n\n    device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n\n    kwargs = {'batch_size': args.batch_size}\n    if use_cuda:\n        kwargs.update({'num_workers': 1,\n                       'pin_memory': True,\n                       'shuffle': True},\n                     )\n\n    transform = transforms.Compose([\n        transforms.ToTensor(),\n        transforms.Normalize((0.1307,), (0.3081,))\n    ])\n    dataset1 = datasets.MNIST('/tmp/torch_mnist_data', train=True, download=True, transform=transform)\n    dataset2 = datasets.MNIST('/tmp/torch_mnist_data', train=False, transform=transform)\n    train_loader = torch.utils.data.DataLoader(dataset1, **kwargs)\n    test_loader = torch.utils.data.DataLoader(dataset2, **kwargs)\n\n    model = Net().to(device)\n    model.load_state_dict(torch.load(\"mnist_pretrained.pth\", map_location=lambda storage, location: storage))\n    optimizer = optim.Adadelta(model.parameters(), lr=args.lr)\n    scheduler = StepLR(optimizer, step_size=1, gamma=args.gamma)\n    _, test_acc = test(model, device, test_loader)\n\n    compressor = aup.compression.create_compressor(model, config, optimizer=optimizer, lr_scheduler=scheduler)\n    model = compressor.compress()\n\n    for _ in compressor.get_prune_iterations():\n        compressor.prune_iteration_start()\n        for epoch in range(1, args.epochs + 1):\n            train(args, model, device, train_loader, optimizer, epoch)\n            _, test_acc = test(model, device, test_loader)\n            scheduler.step()\n\n    flops, _, _ = compressor.count_flops_params((1, 1, 28, 28))\n    flops = int(flops)\n    print(\"test_acc={} flops={}\".format(test_acc, flops))\n\n    compressor.export_model(\n        model_path=\"mnist_compressed.pth\", \n        mask_path=\"mnist_compressed_mask.pth\",\n        save_best_only=True,\n        **config)\n\n    aup.print_result((test_acc - 1.) / np.log(flops))\n\n\nif __name__ == '__main__':\n    config = aup.BasicConfig().load(sys.argv[1])\n    main(config)"
  },
  {
    "path": "Examples/compression/mnist_pytorch/mnist_net_adapt.py",
    "content": "#!/usr/bin/env python3\n\nfrom __future__ import print_function\nimport argparse\nimport sys\nimport time\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch.optim as optim\nfrom torchvision import datasets, transforms\nfrom torch.optim.lr_scheduler import StepLR\n\nimport aup\n\n\nclass Net(nn.Module):\n    def __init__(self):\n        super(Net, self).__init__()\n        self.conv1 = nn.Conv2d(1, 32, 3, 1)\n        self.conv2 = nn.Conv2d(32, 64, 3, 1)\n        self.dropout1 = nn.Dropout2d(0.25)\n        self.dropout2 = nn.Dropout2d(0.5)\n        self.fc1 = nn.Linear(9216, 128)\n        self.fc2 = nn.Linear(128, 10)\n\n    def forward(self, x):\n        x = self.conv1(x)\n        x = F.relu(x)\n        x = self.conv2(x)\n        x = F.relu(x)\n        x = F.max_pool2d(x, 2)\n        x = self.dropout1(x)\n        x = torch.flatten(x, 1)\n        x = self.fc1(x)\n        x = F.relu(x)\n        x = self.dropout2(x)\n        x = self.fc2(x)\n        output = F.log_softmax(x, dim=1)\n        return output\n\n\ndef train(args, model, device, train_loader, optimizer, epoch):\n    model.train()\n    for batch_idx, (data, target) in enumerate(train_loader):\n        data, target = data.to(device), target.to(device)\n        optimizer.zero_grad()\n        output = model(data)\n        loss = F.nll_loss(output, target)\n        loss.backward()\n        optimizer.step()\n        if batch_idx % args.log_interval == 0:\n            print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n                epoch, batch_idx * len(data), len(train_loader.dataset),\n                100. * batch_idx / len(train_loader), loss.item()))\n            if args.dry_run:\n                break\n\n\ndef test(model, device, test_loader):\n    model.eval()\n    test_loss = 0\n    correct = 0\n    with torch.no_grad():\n        for data, target in test_loader:\n            data, target = data.to(device), target.to(device)\n            output = model(data)\n            test_loss += F.nll_loss(output, target, reduction='sum').item()  # sum up batch loss\n            pred = output.argmax(dim=1, keepdim=True)  # get the index of the max log-probability\n            correct += pred.eq(target.view_as(pred)).sum().item()\n\n    test_loss /= len(test_loader.dataset)\n\n    print('\\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n        test_loss, correct, len(test_loader.dataset),\n        100. * correct / len(test_loader.dataset)))\n    \n    return test_loss, correct / len(test_loader.dataset)\n\n\ndef main(config):\n    # Training settings\n    parser = argparse.ArgumentParser(description='PyTorch MNIST Example')\n    parser.add_argument('--batch-size', type=int, default=64, metavar='N',\n                        help='input batch size for training (default: 64)')\n    parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',\n                        help='input batch size for testing (default: 1000)')\n    parser.add_argument('--epochs', type=int, default=2, metavar='N',\n                        help='number of epochs to train (default: 14)')\n    parser.add_argument('--lr', type=float, default=1.0, metavar='LR',\n                        help='learning rate (default: 1.0)')\n    parser.add_argument('--gamma', type=float, default=0.7, metavar='M',\n                        help='Learning rate step gamma (default: 0.7)')\n    parser.add_argument('--no-cuda', action='store_true', default=False,\n                        help='disables CUDA training')\n    parser.add_argument('--dry-run', action='store_true', default=False,\n                        help='quickly check a single pass')\n    parser.add_argument('--seed', type=int, default=1, metavar='S',\n                        help='random seed (default: 1)')\n    parser.add_argument('--log-interval', type=int, default=10, metavar='N',\n                        help='how many batches to wait before logging training status')\n    args, _ = parser.parse_known_args()\n\n    use_cuda = not args.no_cuda and torch.cuda.is_available()\n\n    torch.manual_seed(args.seed)\n\n    device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n\n    kwargs = {'batch_size': args.batch_size}\n    if use_cuda:\n        kwargs.update({'num_workers': 1,\n                       'pin_memory': True,\n                       'shuffle': True},\n                     )\n\n    transform = transforms.Compose([\n        transforms.ToTensor(),\n        transforms.Normalize((0.1307,), (0.3081,))\n    ])\n    dataset1 = datasets.MNIST('/tmp/torch_mnist_data', train=True, download=True, transform=transform)\n    dataset2 = datasets.MNIST('/tmp/torch_mnist_data', train=False, transform=transform)\n    train_loader = torch.utils.data.DataLoader(dataset1, **kwargs)\n    test_loader = torch.utils.data.DataLoader(dataset2, **kwargs)\n\n    model = Net().to(device)\n    model.load_state_dict(torch.load(\"mnist_pretrained.pth\", map_location=lambda storage, location: storage))\n    optimizer = optim.Adadelta(model.parameters(), lr=args.lr)\n    scheduler = StepLR(optimizer, step_size=1, gamma=args.gamma)\n    _, test_acc = test(model, device, test_loader)\n\n    def short_term_fine_tuner(model):\n        train(args, model, device, train_loader, optimizer, 1)\n        scheduler.step()\n\n    def evaluator(model):\n        _, test_acc = test(model, device, test_loader)\n        return test_acc\n\n    compressor = aup.compression.create_compressor(model, config, short_term_fine_tuner=short_term_fine_tuner, evaluator=evaluator, optimize_mode=\"maximize\")\n    model = compressor.compress()\n\n    model = compressor.apply_speedup(dummy_input=torch.randn(1, 1, 28, 28).to(device))\n    flops, _, _ = compressor.count_flops_params((1, 1, 28, 28))\n    flops = int(flops)\n    print(\"test_acc={} flops={}\".format(test_acc, flops))\n\n    compressor.export_model(\n        model_path=\"mnist_compressed.pth\",\n        save_best_only=True,\n        speedup=True,\n        **config)\n\n    aup.print_result((test_acc - 1.) / np.log(flops))\n\n\nif __name__ == '__main__':\n    config = aup.BasicConfig().load(sys.argv[1])\n    main(config)"
  },
  {
    "path": "Examples/compression/mnist_pytorch/mnist_no_speedup.py",
    "content": "#!/usr/bin/env python3\n\nfrom __future__ import print_function\nimport argparse\nimport sys\nimport time\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch.optim as optim\nfrom torchvision import datasets, transforms\nfrom torch.optim.lr_scheduler import StepLR\n\nimport aup\n\n\nclass Net(nn.Module):\n    def __init__(self):\n        super(Net, self).__init__()\n        self.conv1 = nn.Conv2d(1, 32, 3, 1)\n        self.conv2 = nn.Conv2d(32, 64, 3, 1)\n        self.dropout1 = nn.Dropout2d(0.25)\n        self.dropout2 = nn.Dropout2d(0.5)\n        self.fc1 = nn.Linear(9216, 128)\n        self.fc2 = nn.Linear(128, 10)\n\n    def forward(self, x):\n        x = self.conv1(x)\n        x = F.relu(x)\n        x = self.conv2(x)\n        x = F.relu(x)\n        x = F.max_pool2d(x, 2)\n        x = self.dropout1(x)\n        x = torch.flatten(x, 1)\n        x = self.fc1(x)\n        x = F.relu(x)\n        x = self.dropout2(x)\n        x = self.fc2(x)\n        output = F.log_softmax(x, dim=1)\n        return output\n\n\ndef train(args, model, device, train_loader, optimizer, epoch):\n    model.train()\n    for batch_idx, (data, target) in enumerate(train_loader):\n        data, target = data.to(device), target.to(device)\n        optimizer.zero_grad()\n        output = model(data)\n        loss = F.nll_loss(output, target)\n        loss.backward()\n        optimizer.step()\n        if batch_idx % args.log_interval == 0:\n            print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n                epoch, batch_idx * len(data), len(train_loader.dataset),\n                100. * batch_idx / len(train_loader), loss.item()))\n            if args.dry_run:\n                break\n\n\ndef test(model, device, test_loader):\n    model.eval()\n    test_loss = 0\n    correct = 0\n    with torch.no_grad():\n        for data, target in test_loader:\n            data, target = data.to(device), target.to(device)\n            output = model(data)\n            test_loss += F.nll_loss(output, target, reduction='sum').item()  # sum up batch loss\n            pred = output.argmax(dim=1, keepdim=True)  # get the index of the max log-probability\n            correct += pred.eq(target.view_as(pred)).sum().item()\n\n    test_loss /= len(test_loader.dataset)\n\n    print('\\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n        test_loss, correct, len(test_loader.dataset),\n        100. * correct / len(test_loader.dataset)))\n    \n    return test_loss, correct / len(test_loader.dataset)\n\n\ndef main(config):\n    # Training settings\n    parser = argparse.ArgumentParser(description='PyTorch MNIST Example')\n    parser.add_argument('--batch-size', type=int, default=64, metavar='N',\n                        help='input batch size for training (default: 64)')\n    parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',\n                        help='input batch size for testing (default: 1000)')\n    parser.add_argument('--epochs', type=int, default=1, metavar='N',\n                        help='number of epochs to train (default: 14)')\n    parser.add_argument('--lr', type=float, default=1.0, metavar='LR',\n                        help='learning rate (default: 1.0)')\n    parser.add_argument('--gamma', type=float, default=0.7, metavar='M',\n                        help='Learning rate step gamma (default: 0.7)')\n    parser.add_argument('--no-cuda', action='store_true', default=False,\n                        help='disables CUDA training')\n    parser.add_argument('--dry-run', action='store_true', default=False,\n                        help='quickly check a single pass')\n    parser.add_argument('--seed', type=int, default=1, metavar='S',\n                        help='random seed (default: 1)')\n    parser.add_argument('--log-interval', type=int, default=10, metavar='N',\n                        help='how many batches to wait before logging training status')\n    args, _ = parser.parse_known_args()\n\n    use_cuda = not args.no_cuda and torch.cuda.is_available()\n\n    torch.manual_seed(args.seed)\n\n    device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n\n    kwargs = {'batch_size': args.batch_size}\n    if use_cuda:\n        kwargs.update({'num_workers': 1,\n                       'pin_memory': True,\n                       'shuffle': True},\n                     )\n\n    transform = transforms.Compose([\n        transforms.ToTensor(),\n        transforms.Normalize((0.1307,), (0.3081,))\n    ])\n    dataset1 = datasets.MNIST('/tmp/torch_mnist_data', train=True, download=True, transform=transform)\n    dataset2 = datasets.MNIST('/tmp/torch_mnist_data', train=False, transform=transform)\n    train_loader = torch.utils.data.DataLoader(dataset1, **kwargs)\n    test_loader = torch.utils.data.DataLoader(dataset2, **kwargs)\n\n    model = Net().to(device)\n    model.load_state_dict(torch.load(\"mnist_pretrained.pth\", map_location=lambda storage, location: storage))\n    optimizer = optim.Adadelta(model.parameters(), lr=args.lr)\n    _, test_acc = test(model, device, test_loader)\n\n    compressor = aup.compression.create_compressor(model, config, optimizer=optimizer)\n    model = compressor.compress()\n\n    scheduler = StepLR(optimizer, step_size=1, gamma=args.gamma)\n    for epoch in range(1, args.epochs + 1):\n        train(args, model, device, train_loader, optimizer, epoch)\n        _, test_acc = test(model, device, test_loader)\n        scheduler.step()\n\n    flops, _, _ = compressor.count_flops_params((1, 1, 28, 28))\n    flops = int(flops)\n    print(\"test_acc={} flops={}\".format(test_acc, flops))\n\n    compressor.export_model(\n        model_path=\"mnist_compressed.pth\", \n        mask_path=\"mnist_compressed_mask.pth\",\n        save_best_only=True,\n        **config)\n\n    aup.print_result((test_acc - 1.) / np.log(flops))\n\n\nif __name__ == '__main__':\n    config = aup.BasicConfig().load(sys.argv[1])\n    main(config)"
  },
  {
    "path": "Examples/compression/mnist_pytorch/mnist_pretrained.py",
    "content": "from __future__ import print_function\nimport argparse\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch.optim as optim\nfrom torchvision import datasets, transforms\nfrom torch.optim.lr_scheduler import StepLR\n\n\nclass Net(nn.Module):\n    def __init__(self):\n        super(Net, self).__init__()\n        self.conv1 = nn.Conv2d(1, 32, 3, 1)\n        self.conv2 = nn.Conv2d(32, 64, 3, 1)\n        self.dropout1 = nn.Dropout2d(0.25)\n        self.dropout2 = nn.Dropout2d(0.5)\n        self.fc1 = nn.Linear(9216, 128)\n        self.fc2 = nn.Linear(128, 10)\n\n    def forward(self, x):\n        x = self.conv1(x)\n        x = F.relu(x)\n        x = self.conv2(x)\n        x = F.relu(x)\n        x = F.max_pool2d(x, 2)\n        x = self.dropout1(x)\n        x = torch.flatten(x, 1)\n        x = self.fc1(x)\n        x = F.relu(x)\n        x = self.dropout2(x)\n        x = self.fc2(x)\n        output = F.log_softmax(x, dim=1)\n        return output\n\n\ndef train(args, model, device, train_loader, optimizer, epoch):\n    model.train()\n    for batch_idx, (data, target) in enumerate(train_loader):\n        data, target = data.to(device), target.to(device)\n        optimizer.zero_grad()\n        output = model(data)\n        loss = F.nll_loss(output, target)\n        loss.backward()\n        optimizer.step()\n        if batch_idx % args.log_interval == 0:\n            print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n                epoch, batch_idx * len(data), len(train_loader.dataset),\n                100. * batch_idx / len(train_loader), loss.item()))\n            if args.dry_run:\n                break\n\n\ndef test(model, device, test_loader):\n    model.eval()\n    test_loss = 0\n    correct = 0\n    with torch.no_grad():\n        for data, target in test_loader:\n            data, target = data.to(device), target.to(device)\n            output = model(data)\n            test_loss += F.nll_loss(output, target, reduction='sum').item()  # sum up batch loss\n            pred = output.argmax(dim=1, keepdim=True)  # get the index of the max log-probability\n            correct += pred.eq(target.view_as(pred)).sum().item()\n\n    test_loss /= len(test_loader.dataset)\n\n    print('\\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n        test_loss, correct, len(test_loader.dataset),\n        100. * correct / len(test_loader.dataset)))\n\n\ndef main():\n    # Training settings\n    parser = argparse.ArgumentParser(description='PyTorch MNIST Example')\n    parser.add_argument('--batch-size', type=int, default=64, metavar='N',\n                        help='input batch size for training (default: 64)')\n    parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',\n                        help='input batch size for testing (default: 1000)')\n    parser.add_argument('--epochs', type=int, default=14, metavar='N',\n                        help='number of epochs to train (default: 14)')\n    parser.add_argument('--lr', type=float, default=1.0, metavar='LR',\n                        help='learning rate (default: 1.0)')\n    parser.add_argument('--gamma', type=float, default=0.7, metavar='M',\n                        help='Learning rate step gamma (default: 0.7)')\n    parser.add_argument('--no-cuda', action='store_true', default=False,\n                        help='disables CUDA training')\n    parser.add_argument('--dry-run', action='store_true', default=False,\n                        help='quickly check a single pass')\n    parser.add_argument('--seed', type=int, default=1, metavar='S',\n                        help='random seed (default: 1)')\n    parser.add_argument('--log-interval', type=int, default=10, metavar='N',\n                        help='how many batches to wait before logging training status')\n    parser.add_argument('--save-model', action='store_true', default=False,\n                        help='For Saving the current Model')\n    parser.add_argument('--speedup-model', action='store_true', default=False,\n                        help='For speeding up the current Model')\n    args = parser.parse_args()\n    use_cuda = not args.no_cuda and torch.cuda.is_available()\n\n    torch.manual_seed(args.seed)\n\n    device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n\n    kwargs = {'batch_size': args.batch_size}\n    if use_cuda:\n        kwargs.update({'num_workers': 1,\n                       'pin_memory': True,\n                       'shuffle': True},\n                     )\n\n    transform = transforms.Compose([\n        transforms.ToTensor(),\n        transforms.Normalize((0.1307,), (0.3081,))\n    ])\n    dataset1 = datasets.MNIST('/tmp/torch_mnist_data', train=True, download=True, transform=transform)\n    dataset2 = datasets.MNIST('/tmp/torch_mnist_data', train=False, transform=transform)\n    train_loader = torch.utils.data.DataLoader(dataset1, **kwargs)\n    test_loader = torch.utils.data.DataLoader(dataset2, **kwargs)\n\n    model = Net().to(device)\n    optimizer = optim.Adadelta(model.parameters(), lr=args.lr)\n\n    scheduler = StepLR(optimizer, step_size=1, gamma=args.gamma)\n    for epoch in range(1, args.epochs + 1):\n        train(args, model, device, train_loader, optimizer, epoch)\n        test(model, device, test_loader)\n        scheduler.step()\n\n    torch.save(model.state_dict(), \"mnist_pretrained.pth\")\n\n\nif __name__ == '__main__':\n    main()"
  },
  {
    "path": "Examples/compression/mnist_pytorch/mnist_sensitivity.py",
    "content": "#!/usr/bin/env python3\n\nfrom __future__ import print_function\nimport argparse\nimport sys\nimport time\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch.optim as optim\nfrom torchvision import datasets, transforms\nfrom torch.optim.lr_scheduler import StepLR\n\nimport aup\n\n\nclass Net(nn.Module):\n    def __init__(self):\n        super(Net, self).__init__()\n        self.conv1 = nn.Conv2d(1, 32, 3, 1)\n        self.conv2 = nn.Conv2d(32, 64, 3, 1)\n        self.dropout1 = nn.Dropout2d(0.25)\n        self.dropout2 = nn.Dropout2d(0.5)\n        self.fc1 = nn.Linear(9216, 128)\n        self.fc2 = nn.Linear(128, 10)\n\n    def forward(self, x):\n        x = self.conv1(x)\n        x = F.relu(x)\n        x = self.conv2(x)\n        x = F.relu(x)\n        x = F.max_pool2d(x, 2)\n        x = self.dropout1(x)\n        x = torch.flatten(x, 1)\n        x = self.fc1(x)\n        x = F.relu(x)\n        x = self.dropout2(x)\n        x = self.fc2(x)\n        output = F.log_softmax(x, dim=1)\n        return output\n\n\ndef train(args, model, device, train_loader, optimizer, epoch):\n    model.train()\n    for batch_idx, (data, target) in enumerate(train_loader):\n        data, target = data.to(device), target.to(device)\n        optimizer.zero_grad()\n        output = model(data)\n        loss = F.nll_loss(output, target)\n        loss.backward()\n        optimizer.step()\n        if batch_idx % args.log_interval == 0:\n            print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n                epoch, batch_idx * len(data), len(train_loader.dataset),\n                100. * batch_idx / len(train_loader), loss.item()))\n            if args.dry_run:\n                break\n\n\ndef test(model, device, test_loader):\n    model.eval()\n    test_loss = 0\n    correct = 0\n    with torch.no_grad():\n        for data, target in test_loader:\n            data, target = data.to(device), target.to(device)\n            output = model(data)\n            test_loss += F.nll_loss(output, target, reduction='sum').item()  # sum up batch loss\n            pred = output.argmax(dim=1, keepdim=True)  # get the index of the max log-probability\n            correct += pred.eq(target.view_as(pred)).sum().item()\n\n    test_loss /= len(test_loader.dataset)\n\n    print('\\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n        test_loss, correct, len(test_loader.dataset),\n        100. * correct / len(test_loader.dataset)))\n    \n    return test_loss, correct / len(test_loader.dataset)\n\n\ndef main(config):\n    # Training settings\n    parser = argparse.ArgumentParser(description='PyTorch MNIST Example')\n    parser.add_argument('--batch-size', type=int, default=64, metavar='N',\n                        help='input batch size for training (default: 64)')\n    parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',\n                        help='input batch size for testing (default: 1000)')\n    parser.add_argument('--epochs', type=int, default=1, metavar='N',\n                        help='number of epochs to train (default: 14)')\n    parser.add_argument('--lr', type=float, default=1.0, metavar='LR',\n                        help='learning rate (default: 1.0)')\n    parser.add_argument('--gamma', type=float, default=0.7, metavar='M',\n                        help='Learning rate step gamma (default: 0.7)')\n    parser.add_argument('--no-cuda', action='store_true', default=False,\n                        help='disables CUDA training')\n    parser.add_argument('--dry-run', action='store_true', default=False,\n                        help='quickly check a single pass')\n    parser.add_argument('--seed', type=int, default=1, metavar='S',\n                        help='random seed (default: 1)')\n    parser.add_argument('--log-interval', type=int, default=10, metavar='N',\n                        help='how many batches to wait before logging training status')\n    args, _ = parser.parse_known_args()\n\n    use_cuda = not args.no_cuda and torch.cuda.is_available()\n\n    torch.manual_seed(args.seed)\n\n    device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n\n    kwargs = {'batch_size': args.batch_size}\n    if use_cuda:\n        kwargs.update({'num_workers': 1,\n                       'pin_memory': True,\n                       'shuffle': True},\n                     )\n\n    transform = transforms.Compose([\n        transforms.ToTensor(),\n        transforms.Normalize((0.1307,), (0.3081,))\n    ])\n    dataset1 = datasets.MNIST('/tmp/torch_mnist_data', train=True, download=True, transform=transform)\n    dataset2 = datasets.MNIST('/tmp/torch_mnist_data', train=False, transform=transform)\n    train_loader = torch.utils.data.DataLoader(dataset1, **kwargs)\n    test_loader = torch.utils.data.DataLoader(dataset2, **kwargs)\n\n    model = Net().to(device)\n    model.load_state_dict(torch.load(\"mnist_pretrained.pth\", map_location=lambda storage, location: storage))\n    optimizer = optim.Adadelta(model.parameters(), lr=args.lr)\n    scheduler = StepLR(optimizer, step_size=1, gamma=args.gamma)\n    _, test_acc = test(model, device, test_loader)\n\n    def short_term_fine_tuner(model):\n        train(args, model, device, train_loader, optimizer, 1)\n        scheduler.step()\n\n    def evaluator(model):\n        _, test_acc = test(model, device, test_loader)\n        return test_acc\n\n    compressor = aup.compression.create_compressor(model, config, finetuner=short_term_fine_tuner, evaluator=evaluator)\n    model = compressor.compress(eval_args=[model], finetune_args=[model])\n\n    model = compressor.apply_speedup(dummy_input=torch.randn(1, 1, 28, 28).to(device))\n    flops, _, _ = compressor.count_flops_params((1, 1, 28, 28))\n    flops = int(flops)\n    print(\"test_acc={} flops={}\".format(test_acc, flops))\n\n    compressor.export_model(\n        model_path=\"mnist_compressed.pth\",\n        save_best_only=True,\n        speedup=True,\n        **config)\n\n    aup.print_result((test_acc - 1.) / np.log(flops))\n\n\nif __name__ == '__main__':\n    config = aup.BasicConfig().load(sys.argv[1])\n    main(config)"
  },
  {
    "path": "Examples/compression/mnist_pytorch/mnist_simulated_annealing.py",
    "content": "#!/usr/bin/env python3\n\nfrom __future__ import print_function\nimport argparse\nimport sys\nimport time\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch.optim as optim\nfrom torchvision import datasets, transforms\nfrom torch.optim.lr_scheduler import StepLR\n\nimport aup\n\n\nclass Net(nn.Module):\n    def __init__(self):\n        super(Net, self).__init__()\n        self.conv1 = nn.Conv2d(1, 32, 3, 1)\n        self.conv2 = nn.Conv2d(32, 64, 3, 1)\n        self.dropout1 = nn.Dropout2d(0.25)\n        self.dropout2 = nn.Dropout2d(0.5)\n        self.fc1 = nn.Linear(9216, 128)\n        self.fc2 = nn.Linear(128, 10)\n\n    def forward(self, x):\n        x = self.conv1(x)\n        x = F.relu(x)\n        x = self.conv2(x)\n        x = F.relu(x)\n        x = F.max_pool2d(x, 2)\n        x = self.dropout1(x)\n        x = torch.flatten(x, 1)\n        x = self.fc1(x)\n        x = F.relu(x)\n        x = self.dropout2(x)\n        x = self.fc2(x)\n        output = F.log_softmax(x, dim=1)\n        return output\n\n\ndef train(args, model, device, train_loader, optimizer, epoch):\n    model.train()\n    for batch_idx, (data, target) in enumerate(train_loader):\n        data, target = data.to(device), target.to(device)\n        optimizer.zero_grad()\n        output = model(data)\n        loss = F.nll_loss(output, target)\n        loss.backward()\n        optimizer.step()\n        if batch_idx % args.log_interval == 0:\n            print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n                epoch, batch_idx * len(data), len(train_loader.dataset),\n                100. * batch_idx / len(train_loader), loss.item()))\n            if args.dry_run:\n                break\n\n\ndef test(model, device, test_loader):\n    model.eval()\n    test_loss = 0\n    correct = 0\n    with torch.no_grad():\n        for data, target in test_loader:\n            data, target = data.to(device), target.to(device)\n            output = model(data)\n            test_loss += F.nll_loss(output, target, reduction='sum').item()  # sum up batch loss\n            pred = output.argmax(dim=1, keepdim=True)  # get the index of the max log-probability\n            correct += pred.eq(target.view_as(pred)).sum().item()\n\n    test_loss /= len(test_loader.dataset)\n\n    print('\\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n        test_loss, correct, len(test_loader.dataset),\n        100. * correct / len(test_loader.dataset)))\n    \n    return test_loss, correct / len(test_loader.dataset)\n\n\ndef main(config):\n    # Training settings\n    parser = argparse.ArgumentParser(description='PyTorch MNIST Example')\n    parser.add_argument('--batch-size', type=int, default=64, metavar='N',\n                        help='input batch size for training (default: 64)')\n    parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',\n                        help='input batch size for testing (default: 1000)')\n    parser.add_argument('--epochs', type=int, default=1, metavar='N',\n                        help='number of epochs to train (default: 14)')\n    parser.add_argument('--lr', type=float, default=1.0, metavar='LR',\n                        help='learning rate (default: 1.0)')\n    parser.add_argument('--gamma', type=float, default=0.7, metavar='M',\n                        help='Learning rate step gamma (default: 0.7)')\n    parser.add_argument('--no-cuda', action='store_true', default=False,\n                        help='disables CUDA training')\n    parser.add_argument('--dry-run', action='store_true', default=False,\n                        help='quickly check a single pass')\n    parser.add_argument('--seed', type=int, default=1, metavar='S',\n                        help='random seed (default: 1)')\n    parser.add_argument('--log-interval', type=int, default=10, metavar='N',\n                        help='how many batches to wait before logging training status')\n    args, _ = parser.parse_known_args()\n\n    use_cuda = not args.no_cuda and torch.cuda.is_available()\n\n    torch.manual_seed(args.seed)\n\n    device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n\n    kwargs = {'batch_size': args.batch_size}\n    if use_cuda:\n        kwargs.update({'num_workers': 1,\n                       'pin_memory': True,\n                       'shuffle': True},\n                     )\n\n    transform = transforms.Compose([\n        transforms.ToTensor(),\n        transforms.Normalize((0.1307,), (0.3081,))\n    ])\n    dataset1 = datasets.MNIST('/tmp/torch_mnist_data', train=True, download=True, transform=transform)\n    dataset2 = datasets.MNIST('/tmp/torch_mnist_data', train=False, transform=transform)\n    train_loader = torch.utils.data.DataLoader(dataset1, **kwargs)\n    test_loader = torch.utils.data.DataLoader(dataset2, **kwargs)\n\n    model = Net().to(device)\n    model.load_state_dict(torch.load(\"mnist_pretrained.pth\", map_location=lambda storage, location: storage))\n    optimizer = optim.Adadelta(model.parameters(), lr=args.lr)\n    scheduler = StepLR(optimizer, step_size=1, gamma=args.gamma)\n    _, test_acc = test(model, device, test_loader)\n\n    def evaluator(model):\n        _, test_acc = test(model, device, test_loader)\n        return test_acc\n\n    compressor = aup.compression.create_compressor(model, config, evaluator=evaluator, optimize_mode=\"maximize\")\n    model = compressor.compress()\n\n    flops, _, _ = compressor.count_flops_params((1, 1, 28, 28))\n    flops = int(flops)\n    print(\"test_acc={} flops={}\".format(test_acc, flops))\n\n    compressor.export_model(\n        model_path=\"mnist_compressed.pth\", \n        mask_path=\"mnist_compressed_mask.pth\",\n        save_best_only=True,\n        **config)\n\n    aup.print_result((test_acc - 1.) / np.log(flops))\n\n\nif __name__ == '__main__':\n    config = aup.BasicConfig().load(sys.argv[1])\n    main(config)"
  },
  {
    "path": "Examples/compression/mnist_tensorflow/README.md",
    "content": "# Compression examples (Tensorflow)\n\n## Requirements\n\nThe basic requirements for Auptimizer apply here.\n\nAdditionally, in order for the examples to work, the following packages are required:\n* tensorflow >= 2.0\n\n## Running the examples\n\nFor non-automatic examples:\n\n```sh\npython -m aup.compression exp_fpgm.json\n```\n\nFor automatic examples:\n\n```sh\npython -m aup.compression exp_auto_fpgm.json --automatic\n```\nThe ``--launch_dashboard`` flag can be added to the command if the user wants to show the dashboard while running the experiment."
  },
  {
    "path": "Examples/compression/mnist_tensorflow/exp_auto_level.json",
    "content": "{\n    \"name\": \"Tensorflow MNIST Level Pruner (automatic)\",\n    \"script\": \"mnist.py\",\n    \"resource\": \"cpu\",\n    \"resource_args\": {\n        \"save_model\": true\n    },\n    \"compression\": {\n        \"framework\": \"tensorflow\",\n        \"type\": \"pruning\",\n        \"compressor\": \"level\",\n        \"config_list\": [{\n                \"sparsity\": {\n                    \"range\": [0.1, 0.9],\n                    \"type\": \"float\"\n                },\n                \"op_names\": [\"conv1\", \"conv2\", \"fc1\", \"fc2\"]\n            }\n        ]\n    },\n    \"proposer\": \"hyperopt\",\n    \"n_parallel\": 4,\n    \"target\": \"max\",\n    \"n_samples\": 5\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_tensorflow/exp_level.json",
    "content": "{\n    \"name\": \"Tensorflow MNIST Level Pruner\",\n    \"script\": \"mnist.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"tensorflow\",\n        \"type\": \"pruning\",\n        \"compressor\": \"level\",\n        \"config_list\": [{\n                \"sparsity\": 0.8,\n                \"op_types\": [\"default\"]\n            }\n        ]\n    }\n}\n  "
  },
  {
    "path": "Examples/compression/mnist_tensorflow/mnist.py",
    "content": "#!/usr/bin/env python3\n\n\"\"\"\nMNIST convolutional network using pytorch\n============================================\n\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\n\nfrom aup import print_result, aup_args\n\nimport tensorflow as tf\nimport numpy as np\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\nimport tqdm\n\nfrom math import log\n\nimport sys\n\nimport aup\n\nnum_epochs = 1\nbatch_size = 64\nnum_classes = 10\ninput_shape = (28, 28, 1)\n\n\ndef get_model(**kwargs):\n    model = keras.Sequential(\n      [\n          keras.Input(shape=input_shape),\n          layers.Conv2D(kwargs['conv1'], kernel_size=(3, 3), activation=\"relu\"),\n          layers.MaxPooling2D(pool_size=(2, 2)),\n          layers.Conv2D(kwargs['conv2'], kernel_size=(3, 3), activation=\"relu\"),\n          layers.MaxPooling2D(pool_size=(2, 2)),\n          layers.Flatten(),\n          layers.Dropout(kwargs['dropout']),\n          layers.Dense(num_classes, activation=\"softmax\"),\n      ]\n    )\n\n    return model\n\n    \ndef test_model(model, test_dataset):\n  correct = []\n  for (batch, (images, labels)) in enumerate(test_dataset):\n    logits = model(images)\n    correct += list(labels.numpy() == np.argmax(logits.numpy(), axis=1))\n  return np.mean(correct)\n\n\ndef main(config):\n  (train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()\n\n  train_dataset = tf.data.Dataset.from_tensor_slices(\n    (tf.cast(train_images[...,tf.newaxis]/255, tf.float32),\n    tf.cast(train_labels,tf.int64)))\n  train_dataset = train_dataset.shuffle(1000).batch(32)\n  \n  test_dataset = tf.data.Dataset.from_tensor_slices(\n    (tf.cast(test_images[...,tf.newaxis]/255, tf.float32),\n    tf.cast(test_labels,tf.int64)))\n  test_dataset = test_dataset.shuffle(1000).batch(32)\n\n  model = get_model(dropout=0.1, conv1=32, conv2=64)\n  optimizer = tf.keras.optimizers.Adam()\n  loss_object = tf.keras.losses.SparseCategoricalCrossentropy()\n\n  model.load_weights(\"mnist_pretrained.h5\")\n\n  def train_step(images, labels):\n    with tf.GradientTape() as tape:\n      logits = model(images, training=True)\n      tf.debugging.assert_equal(logits.shape, (32, 10))\n      loss_value = loss_object(labels, logits)\n\n    grads = tape.gradient(loss_value, model.trainable_variables)\n    optimizer.apply_gradients(zip(grads, model.trainable_variables))\n\n  compressor = aup.compression.create_compressor(model, config)\n  compressor.compress()\n\n  for epoch in range(num_epochs):\n    for (batch, (images, labels)) in enumerate(train_dataset):\n      train_step(images, labels)\n    acc = test_model(model, test_dataset)\n    print ('Epoch {} finished - test_acc={}'.format(epoch, acc))\n\n  compressor.export_model(\"mnist_compressed.h5\", **config)\n\n  aup.print_result(acc - 1.)\n\n\nif __name__ == '__main__':\n  config = aup.BasicConfig().load(sys.argv[1])\n  main(config)\n\n"
  },
  {
    "path": "Examples/compression/mnist_tensorflow/mnist_pretrained.py",
    "content": "#!/usr/bin/env python3\n\nfrom aup import print_result, aup_args\n\nimport tensorflow as tf\nimport numpy as np\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\nimport tqdm\n\nfrom math import log\n\nimport sys\n\nnum_epochs = 14\nbatch_size = 64\nnum_classes = 10\ninput_shape = (28, 28, 1)\n\n\ndef get_model(**kwargs):\n    model = keras.Sequential(\n      [\n          keras.Input(shape=input_shape),\n          layers.Conv2D(kwargs['conv1'], kernel_size=(3, 3), activation=\"relu\"),\n          layers.MaxPooling2D(pool_size=(2, 2)),\n          layers.Conv2D(kwargs['conv2'], kernel_size=(3, 3), activation=\"relu\"),\n          layers.MaxPooling2D(pool_size=(2, 2)),\n          layers.Flatten(),\n          layers.Dropout(kwargs['dropout']),\n          layers.Dense(num_classes, activation=\"softmax\"),\n      ]\n    )\n\n    return model\n\n    \ndef test_model(model, test_dataset):\n  correct = []\n  for (batch, (images, labels)) in enumerate(test_dataset):\n    logits = model(images)\n    correct += list(labels.numpy() == np.argmax(logits.numpy(), axis=1))\n  return np.mean(correct)\n\n\ndef main():\n  (train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()\n\n  train_dataset = tf.data.Dataset.from_tensor_slices(\n    (tf.cast(train_images[...,tf.newaxis]/255, tf.float32),\n    tf.cast(train_labels,tf.int64)))\n  train_dataset = train_dataset.shuffle(1000).batch(32)\n  \n  test_dataset = tf.data.Dataset.from_tensor_slices(\n    (tf.cast(test_images[...,tf.newaxis]/255, tf.float32),\n    tf.cast(test_labels,tf.int64)))\n  test_dataset = test_dataset.shuffle(1000).batch(32)\n\n  model = get_model(dropout=0.1, conv1=32, conv2=64)\n\n  optimizer = tf.keras.optimizers.Adam()\n  loss_object = tf.keras.losses.SparseCategoricalCrossentropy()\n\n  def train_step(images, labels):\n    with tf.GradientTape() as tape:\n      logits = model(images, training=True)\n      tf.debugging.assert_equal(logits.shape, (32, 10))\n      loss_value = loss_object(labels, logits)\n\n    grads = tape.gradient(loss_value, model.trainable_variables)\n    optimizer.apply_gradients(zip(grads, model.trainable_variables))\n\n  for epoch in range(num_epochs):\n    for (batch, (images, labels)) in enumerate(tqdm.tqdm(train_dataset)):\n      train_step(images, labels)\n    acc = test_model(model, test_dataset)\n    print ('Epoch {} finished - test_acc={}'.format(epoch, acc))\n\n  model.save(\"mnist_pretrained.h5\")\n\n  print(\"test_acc={}\".format(acc))\n\n\nif __name__ == '__main__':\n  main()\n\n"
  },
  {
    "path": "Examples/compression/utility_functions/README.md",
    "content": "# Compression utility functions\n\nThis example provides an example training script ``mnist.py``, where the compression utility functions sensitivity analysis and channel dependency analysis are applied. To just use these utility functions, there is no need to launch an Auptimizer experiment. The analysis outputs will be saved to folder ``output``. "
  },
  {
    "path": "Examples/compression/utility_functions/mnist.py",
    "content": "#!/usr/bin/env python3\n\n\"\"\"\nMNIST convolutional network using pytorch\n============================================\n\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\n\nfrom __future__ import print_function\nimport argparse\nimport os\nimport sys\nimport time\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch.optim as optim\nfrom torchvision import datasets, transforms\nfrom torch.optim.lr_scheduler import StepLR\n\nimport aup\n\n\nOUT_DIR = \"output\"\n\n\nclass Net(nn.Module):\n    def __init__(self):\n        super(Net, self).__init__()\n        self.conv1 = nn.Conv2d(1, 32, 3, 1)\n        self.conv2 = nn.Conv2d(32, 64, 3, 1)\n        self.dropout1 = nn.Dropout2d(0.25)\n        self.dropout2 = nn.Dropout2d(0.5)\n        self.fc1 = nn.Linear(9216, 128)\n        self.fc2 = nn.Linear(128, 10)\n\n    def forward(self, x):\n        x = self.conv1(x)\n        x = F.relu(x)\n        x = self.conv2(x)\n        x = F.relu(x)\n        x = F.max_pool2d(x, 2)\n        x = self.dropout1(x)\n        x = torch.flatten(x, 1)\n        x = self.fc1(x)\n        x = F.relu(x)\n        x = self.dropout2(x)\n        x = self.fc2(x)\n        output = F.log_softmax(x, dim=1)\n        return output\n\n\ndef train(args, model, device, train_loader, optimizer, epoch):\n    model.train()\n    for batch_idx, (data, target) in enumerate(train_loader):\n        data, target = data.to(device), target.to(device)\n        optimizer.zero_grad()\n        output = model(data)\n        loss = F.nll_loss(output, target)\n        loss.backward()\n        optimizer.step()\n        if batch_idx % args.log_interval == 0:\n            print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n                epoch, batch_idx * len(data), len(train_loader.dataset),\n                100. * batch_idx / len(train_loader), loss.item()))\n            if args.dry_run:\n                break\n\n\ndef test(model, device, test_loader):\n    model.eval()\n    test_loss = 0\n    correct = 0\n    with torch.no_grad():\n        for data, target in test_loader:\n            data, target = data.to(device), target.to(device)\n            output = model(data)\n            test_loss += F.nll_loss(output, target, reduction='sum').item()  # sum up batch loss\n            pred = output.argmax(dim=1, keepdim=True)  # get the index of the max log-probability\n            correct += pred.eq(target.view_as(pred)).sum().item()\n\n    test_loss /= len(test_loader.dataset)\n\n    print('\\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n        test_loss, correct, len(test_loader.dataset),\n        100. * correct / len(test_loader.dataset)))\n    \n    return test_loss, correct / len(test_loader.dataset)\n\n\ndef main():\n    # Training settings\n    parser = argparse.ArgumentParser(description='PyTorch MNIST Example')\n    parser.add_argument('--batch-size', type=int, default=64, metavar='N',\n                        help='input batch size for training (default: 64)')\n    parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',\n                        help='input batch size for testing (default: 1000)')\n    parser.add_argument('--epochs', type=int, default=1, metavar='N',\n                        help='number of epochs to train (default: 14)')\n    parser.add_argument('--lr', type=float, default=1.0, metavar='LR',\n                        help='learning rate (default: 1.0)')\n    parser.add_argument('--gamma', type=float, default=0.7, metavar='M',\n                        help='Learning rate step gamma (default: 0.7)')\n    parser.add_argument('--no-cuda', action='store_true', default=False,\n                        help='disables CUDA training')\n    parser.add_argument('--dry-run', action='store_true', default=False,\n                        help='quickly check a single pass')\n    parser.add_argument('--seed', type=int, default=1, metavar='S',\n                        help='random seed (default: 1)')\n    parser.add_argument('--log-interval', type=int, default=10, metavar='N',\n                        help='how many batches to wait before logging training status')\n    args, _ = parser.parse_known_args()\n\n    use_cuda = not args.no_cuda and torch.cuda.is_available()\n\n    torch.manual_seed(args.seed)\n\n    device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n\n    kwargs = {'batch_size': args.batch_size}\n    if use_cuda:\n        kwargs.update({'num_workers': 1,\n                       'pin_memory': True,\n                       'shuffle': True},\n                     )\n\n    transform = transforms.Compose([\n        transforms.ToTensor(),\n        transforms.Normalize((0.1307,), (0.3081,))\n    ])\n    dataset1 = datasets.MNIST('/tmp/torch_mnist_data', train=True, download=True, transform=transform)\n    dataset2 = datasets.MNIST('/tmp/torch_mnist_data', train=False, transform=transform)\n    train_loader = torch.utils.data.DataLoader(dataset1, **kwargs)\n    test_loader = torch.utils.data.DataLoader(dataset2, **kwargs)\n\n    model = Net().to(device)\n    model.load_state_dict(torch.load(\"../mnist_pytorch/mnist_pretrained.pth\", map_location=lambda storage, location: storage))\n    optimizer = optim.Adadelta(model.parameters(), lr=args.lr)\n\n    os.makedirs(OUT_DIR, exist_ok=True)\n\n    # Example of Sensitivity Analysis usage\n    s_analyzer = aup.compression.sensitivity_analysis.SensitivityAnalysis(model=model, val_func=lambda model: test(model, device, test_loader))\n    sensitivity = s_analyzer.analysis(val_args=[model])\n    s_analyzer.export(os.path.join(OUT_DIR, \"sensitivity_analysis.log\"))\n\n    # ChannelDependency\n    data = torch.ones(1, 1, 28, 28).to(device)\n    channel_depen = aup.compression.shape_dependency.ChannelDependency(model, data)\n    channel_depen.export(os.path.join(OUT_DIR, \"channel_dependency.csv\"))\n\n\nif __name__ == '__main__':\n    main()"
  },
  {
    "path": "Examples/converter_examples/Convert_Benchmark/.gitignore",
    "content": ".ipynb_checkpoints/\n*.tflite\n*.h5\n*.tgz\npytorch/"
  },
  {
    "path": "Examples/converter_examples/Convert_Benchmark/Benchmark.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Using TensorFlow backend.\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"\\\"\\\"\\\"\\n\",\n    \"  Copyright (c) 2018 LG Electronics Inc.\\n\",\n    \"  SPDX-License-Identifier: GPL-3.0-or-later\\n\",\n    \"\\\"\\\"\\\" \\n\",\n    \"import keras\\n\",\n    \"import subprocess\\n\",\n    \"from os import path\\n\",\n    \"import pandas as pd\\n\",\n    \"import json\\n\",\n    \"\\n\",\n    \"# see models here - https://www.tensorflow.org/lite/guide/hosted_models\\n\",\n    \"STORAGE_LINK = \\\"https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_2018_08_02/\\\"\\n\",\n    \"ADB_LOCAL = path.expanduser(\\\"~/Library/Android/sdk/platform-tools/adb\\\")  # for MacOS\\n\",\n    \"\\n\",\n    \"ALPHA = [\\\"1.0\\\",\\\"0.75\\\",\\\"0.5\\\",\\\"0.25\\\"]\\n\",\n    \"SIZE = [\\\"224\\\",\\\"192\\\",\\\"160\\\",\\\"128\\\"]\\n\",\n    \"REP_DATA = \\\"repdata.py\\\"\\n\",\n    \"\\n\",\n    \"OP_TYPE = [\\\"float\\\", \\\"float16\\\", \\\"uint8\\\", \\\"int8\\\"]\\n\",\n    \"\\n\",\n    \"KEYS = [[a,b] for a in ALPHA for b in SIZE]\\n\",\n    \"MOBILENET = \\\"mobilenet_v1\\\"\\n\",\n    \"df = pd.DataFrame({\\\"model\\\":[], \\\"alpha\\\":[], \\\"size\\\":[], \\\"gpu\\\":[], \\\"nnapi\\\":[], \\\"op\\\": [], \\\"size_init\\\":[],\\n\",\n    \"                   \\\"size_peak\\\":[], \\\"warmup\\\":[], \\\"init\\\":[], \\\"inference\\\":[]})\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def preprocess(name):\\n\",\n    \"    try:\\n\",\n    \"        process = subprocess.Popen(\\\" wget \\\" + STORAGE_LINK + name + \\\".tgz \\\", shell=True).wait()\\n\",\n    \"    except:\\n\",\n    \"        print(\\\"Could not retrieve\\\")\\n\",\n    \"        return 0\\n\",\n    \"\\n\",\n    \"    try:\\n\",\n    \"        process = subprocess.Popen(\\\" tar -xzf \\\" + name + \\\".tgz\\\", shell=True).wait()\\n\",\n    \"    except:\\n\",\n    \"        print(\\\"Could not unpack\\\")\\n\",\n    \"        return 0\\n\",\n    \"\\n\",\n    \"    return 1\\n\",\n    \"\\n\",\n    \"def push_to_device(name):\\n\",\n    \"    try:\\n\",\n    \"        process = subprocess.Popen(ADB_LOCAL + \\\" push \\\" + name + \\\".tflite /data/local/tmp/\\\",\\n\",\n    \"                                   shell=True, stdout=subprocess.DEVNULL).wait()\\n\",\n    \"    except:\\n\",\n    \"        print(\\\"Could not push\\\")\\n\",\n    \"        return 0\\n\",\n    \"    return 1\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"def run_benchmark(name):\\n\",\n    \"    command_template = ADB_LOCAL + \\\" shell /data/local/tmp/benchmark_model --graph=/data/local/tmp/\\\"\\n\",\n    \"    command = command_template + name + \\\".tflite --num_threads=4\\\"\\n\",\n    \"    process2 = subprocess.Popen(command.split(), stdout=subprocess.PIPE)\\n\",\n    \"    output, error = process2.communicate()\\n\",\n    \"    output = output.decode('utf-8')\\n\",\n    \"    output = output.split(\\\"\\\\n\\\")\\n\",\n    \"    infer, memo = \\\"\\\",\\\"\\\"\\n\",\n    \"    for p in output:\\n\",\n    \"        if \\\"Inference timings\\\" in p:\\n\",\n    \"            infer = p\\n\",\n    \"        if \\\"Peak memory footprint\\\" in p:\\n\",\n    \"            memo = p\\n\",\n    \"    #output = output.split(\\\"\\\\n\\\")\\n\",\n    \"    #infer = output\\n\",\n    \"    return (infer, memo)\\n\",\n    \"\\n\",\n    \"def compile_results(infer, memo, df, of, op, alpha, size):\\n\",\n    \"    data = []\\n\",\n    \"    try:\\n\",\n    \"        idx = memo.find(\\\"init=\\\")\\n\",\n    \"        max_size = float(memo[idx+5:idx + memo[idx:].find(\\\" \\\")-1])\\n\",\n    \"    except:\\n\",\n    \"        max_size = float('nan')\\n\",\n    \"    idx = memo.find(\\\"overall=\\\")\\n\",\n    \"    try:\\n\",\n    \"        malloc_size = float(memo[idx+8:])\\n\",\n    \"    except:\\n\",\n    \"        malloc_size = float('nan')\\n\",\n    \"    idx = infer.find(\\\"Warmup (avg):\\\")\\n\",\n    \"    try:\\n\",\n    \"        warmup = float(infer[idx+14:idx + infer[idx:].find(\\\",\\\")])\\n\",\n    \"    except:\\n\",\n    \"        warmup = float('nan')\\n\",\n    \"    idx = infer.find(\\\"Init:\\\")\\n\",\n    \"    try:\\n\",\n    \"        init = float(infer[idx+6:idx + infer[idx:].find(\\\",\\\")])\\n\",\n    \"    except:\\n\",\n    \"        init = float('nan')\\n\",\n    \"    idx = infer.find(\\\"Inference (avg):\\\")\\n\",\n    \"    try:\\n\",\n    \"        no_stat = float(infer[idx+17:])\\n\",\n    \"    except:\\n\",\n    \"        no_stat = float('nan')\\n\",\n    \"    df = df.append(pd.Series([of, alpha, size, op, max_size, malloc_size,\\n\",\n    \"                              warmup, init, no_stat], index=df.columns), ignore_index=True)\\n\",\n    \"    return df\\n\",\n    \"\\n\",\n    \"def convert(name, size, op):\\n\",\n    \"    json_dic = {}\\n\",\n    \"    json_dic[\\\"convert_from\\\"] = name+\\\"_frozen.pb\\\"\\n\",\n    \"    json_dic[\\\"convert_to\\\"] = name+\\\"_\\\"+op+\\\"_converted.tflite\\\"\\n\",\n    \"    json_dic[\\\"input_nodes\\\"] = \\\"input\\\"\\n\",\n    \"    json_dic[\\\"output_nodes\\\"] = \\\"MobilenetV1/Predictions/Reshape_1:0\\\"\\n\",\n    \"    command = \\\"\\\"\\n\",\n    \"    if op == 'float':\\n\",\n    \"        command = json.dumps([json_dic])\\n\",\n    \"    if op == 'float16':\\n\",\n    \"        quant_dic = {}\\n\",\n    \"        quant_dic[\\\"type\\\"]=\\\"float16\\\"\\n\",\n    \"        quant_dic[\\\"opsset\\\"] = \\\"tf\\\"\\n\",\n    \"        json_dic[\\\"quantization\\\"] = quant_dic\\n\",\n    \"        command = json.dumps([json_dic])\\n\",\n    \"    if op == 'int8':\\n\",\n    \"        quant_dic = {}\\n\",\n    \"        quant_dic[\\\"type\\\"]=\\\"int8\\\"\\n\",\n    \"        quant_dic[\\\"opsset\\\"] = \\\"int8\\\"\\n\",\n    \"        quant_dic[\\\"load\\\"] = REP_DATA + \\\" --custom_data '1,\\\" + size + \\\",\\\" + size + \\\",\\\" + \\\"3,1000' --undefok custom_data\\\"\\n\",\n    \"        json_dic[\\\"quantization\\\"] = quant_dic\\n\",\n    \"        command = json.dumps([json_dic])\\n\",\n    \"    if op == 'uint8':\\n\",\n    \"        quant_dic = {}\\n\",\n    \"        quant_dic[\\\"type\\\"]=\\\"uint8\\\"\\n\",\n    \"        quant_dic[\\\"opsset\\\"] = \\\"tf\\\"\\n\",\n    \"        quant_dic[\\\"load\\\"] = REP_DATA + \\\" --custom_data '1,\\\" + size + \\\",\\\" + size + \\\",\\\" + \\\"3,1000' --undefok custom_data\\\"\\n\",\n    \"        json_dic[\\\"quantization\\\"] = quant_dic\\n\",\n    \"        command = json.dumps([json_dic])\\n\",\n    \"    try:\\n\",\n    \"        process = subprocess.Popen(\\\"python3 -m aup.dlconvert -d \\\" + \\\"'\\\" + str(command)  + \\\"'\\\", shell=True).wait()\\n\",\n    \"    except:\\n\",\n    \"        print(\\\"Could not Convert= \\\" + str(command))\\n\",\n    \"        return 0\\n\",\n    \"    return 1\\n\",\n    \"    \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"for key in KEYS:\\n\",\n    \"\\n\",\n    \"    name = MOBILENET + \\\"_\\\" + key[0] + \\\"_\\\" + key[1]\\n\",\n    \"\\n\",\n    \"    print(\\\"Starting \\\" + str(name))\\n\",\n    \"\\n\",\n    \"    if(not preprocess(name)):\\n\",\n    \"        continue\\n\",\n    \"\\n\",\n    \"    if(not push_to_device(name)):\\n\",\n    \"        continue\\n\",\n    \"\\n\",\n    \"    infer,memo = run_benchmark(name)\\n\",\n    \"\\n\",\n    \"    df = compile_results(infer, memo, df, \\\"official\\\", \\\"float\\\", key[0], key[1])\\n\",\n    \"\\n\",\n    \"    new_name = name + \\\"_quant\\\"\\n\",\n    \"\\n\",\n    \"    print(\\\"Starting \\\" + str(new_name))\\n\",\n    \"\\n\",\n    \"    if(not preprocess(new_name)):\\n\",\n    \"        continue\\n\",\n    \"\\n\",\n    \"    if(not push_to_device(new_name)):\\n\",\n    \"        continue\\n\",\n    \"\\n\",\n    \"    infer,memo = run_benchmark(new_name)\\n\",\n    \"\\n\",\n    \"    df = compile_results(infer, memo , df, \\\"official\\\", \\\"int8\\\", key[0], key[1])\\n\",\n    \"    \\n\",\n    \"    print(\\\"Starting converted tflite benchmarking\\\")\\n\",\n    \"\\n\",\n    \"    for op in OP_TYPE:\\n\",\n    \"\\n\",\n    \"        converted = convert(name, key[1], op)\\n\",\n    \"\\n\",\n    \"        if not converted:\\n\",\n    \"            print(\\\"Failed \\\" + str(name) + \\\" \\\" + str(op))\\n\",\n    \"            continue\\n\",\n    \"\\n\",\n    \"        print(\\\"testing= \\\" + str(name) + \\\" \\\" + str(op))\\n\",\n    \"\\n\",\n    \"        new_name = name + \\\"_\\\" + op + \\\"_converted\\\"\\n\",\n    \"\\n\",\n    \"        if(not push_to_device(new_name)):\\n\",\n    \"            continue\\n\",\n    \"\\n\",\n    \"        infer,memo = run_benchmark(new_name)\\n\",\n    \"\\n\",\n    \"        df = compile_results(infer, memo, df, \\\"converted\\\", str(op), key[0], key[1])\\n\",\n    \"        \\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"        model alpha size       op  size_init  size_peak    warmup    init  inference\\n\",\n      \"0    official   1.0  224    float    0.78906   26.74220  33998.60  2196.0   33562.00\\n\",\n      \"1    official   1.0  224     int8    0.87890    7.19531  24491.30  2017.0   23836.70\\n\",\n      \"2   converted   1.0  224    float    0.79687   26.69530  34708.60  1929.0   33686.70\\n\",\n      \"3   converted   1.0  224  float16    0.79296   34.55470  35102.30  2033.0   32647.30\\n\",\n      \"4   converted   1.0  224    uint8    1.39060    8.44531  24231.40  3134.0   23624.50\\n\",\n      \"5   converted   1.0  224     int8    1.39060    8.47266  27206.70  2890.0   23835.60\\n\",\n      \"6    official   1.0  192    float    0.78906   25.14060  25100.70  1669.0   24425.90\\n\",\n      \"7    official   1.0  192     int8    0.76562    6.64844  18825.00  2148.0   18390.10\\n\",\n      \"8   converted   1.0  192    float    0.79687   25.37500  24657.60  1756.0   24129.00\\n\",\n      \"9   converted   1.0  192  float16    0.79296   33.19920  26244.60  2075.0   25446.30\\n\",\n      \"10  converted   1.0  192    uint8    1.39060    7.90234  18417.10  3117.0   18072.60\\n\",\n      \"11  converted   1.0  192     int8    1.39060    8.06641  18780.40  2770.0   18272.40\\n\",\n      \"12   official   1.0  160    float    0.78906   23.96480  18737.10  1639.0   18147.10\\n\",\n      \"13   official   1.0  160     int8    0.76562    6.42969  14405.30  2022.0   13266.50\\n\",\n      \"14  converted   1.0  160    float    0.79687   24.06640  18471.30  1768.0   19325.60\\n\",\n      \"15  converted   1.0  160  float16    0.79687   31.91020  19203.30  1973.0   17638.40\\n\",\n      \"16  converted   1.0  160    uint8    1.39060    7.23828  17993.90  2886.0   13290.70\\n\",\n      \"17  converted   1.0  160     int8    1.39060    7.44141  21174.00  2649.0   20724.60\\n\",\n      \"18   official   1.0  128    float    0.78515   22.92970  12444.20  1581.0   11945.00\\n\",\n      \"19   official   1.0  128     int8    0.76562    6.20703  13523.20  2059.0   13424.40\\n\",\n      \"20  converted   1.0  128    float    0.79296   22.69530  12496.10  1804.0   11959.30\\n\",\n      \"21  converted   1.0  128  float16    0.78906   30.79300  13551.10  1828.0   12529.10\\n\",\n      \"22  converted   1.0  128    uint8    1.28120    6.80469   8976.34  2915.0    8992.86\\n\",\n      \"23  converted   1.0  128     int8    1.28120    6.92188  13422.40  2487.0   10108.50\\n\",\n      \"24   official  0.75  224    float    0.76562   17.43360  21263.80  1878.0   21159.90\\n\",\n      \"25   official  0.75  224     int8    0.82812    4.98047  17237.40  1988.0   16508.00\\n\",\n      \"26  converted  0.75  224    float    0.78120   17.39450  22503.70  1607.0   21283.40\\n\",\n      \"27  converted  0.75  224  float16    0.78120   22.75780  22192.10  2129.0   21192.60\\n\",\n      \"28  converted  0.75  224    uint8    1.21870    6.03516  22660.10  2414.0   16021.80\\n\",\n      \"29  converted  0.75  224     int8    1.21870    6.30859  15966.20  2838.0   15849.00\\n\",\n      \"30   official  0.75  192    float    0.76562   16.13670  16253.70  1612.0   15627.30\\n\",\n      \"31   official  0.75  192     int8    0.76562    4.30469  17908.20  1741.0   16690.40\\n\",\n      \"32  converted  0.75  192    float    0.78120   16.42580  16129.60  1602.0   16212.00\\n\",\n      \"33  converted  0.75  192  float16    0.78515   21.24220  15744.60  1838.0   15032.60\\n\",\n      \"34  converted  0.75  192    uint8    1.21870    5.56250  12433.50  2599.0   12068.50\\n\",\n      \"35  converted  0.75  192     int8    1.21870    5.62109  12045.20  2587.0   11737.50\\n\",\n      \"36   official  0.75  160    float    0.76562   15.27340  11488.00  1807.0   11356.20\\n\",\n      \"37   official  0.75  160     int8    0.76562    4.49219   9148.42  1905.0    9103.98\\n\",\n      \"38  converted  0.75  160    float    0.78515   15.10160  11819.20  1928.0   11335.40\\n\",\n      \"39  converted  0.75  160  float16    0.78515   19.90620  11790.90  1945.0   11200.20\\n\",\n      \"40  converted  0.75  160    uint8    1.02340    5.09375   9288.87  2472.0    9114.61\\n\",\n      \"41  converted  0.75  160     int8    1.02340    5.11328   9300.00  2543.0    9019.50\\n\",\n      \"42   official  0.75  128    float    0.76171   14.07810  10167.30  1584.0    9786.01\\n\",\n      \"43   official  0.75  128     int8    0.76562    3.81250   6325.96  1982.0    6249.11\\n\",\n      \"44  converted  0.75  128    float    0.77734   14.44530   7544.64  1898.0    7422.35\\n\",\n      \"45  converted  0.75  128  float16    0.78120   19.16020   8644.24  2002.0    8227.14\\n\",\n      \"46  converted  0.75  128    uint8    1.02340    4.91016   6686.88  2458.0    5826.48\\n\",\n      \"47  converted  0.75  128     int8    1.02340    4.85547   5921.82  2732.0    5877.53\\n\",\n      \"48   official   0.5  224    float    0.75781   11.06250  12346.40  1864.0   11818.80\\n\",\n      \"49   official   0.5  224     int8    0.76562    3.47656   9217.15  1663.0    9174.97\\n\",\n      \"50  converted   0.5  224    float    0.75781   10.81250  12604.10  1658.0   11342.90\\n\",\n      \"51  converted   0.5  224  float16    0.77734   13.45700  12766.20  1729.0   11792.10\\n\",\n      \"52  converted   0.5  224    uint8    1.07810    4.51172   9011.44  2313.0    8938.94\\n\",\n      \"53  converted   0.5  224     int8    1.07810    4.55078   9348.15  2308.0    9034.15\\n\",\n      \"54   official   0.5  192    float    0.75781    9.57031   9739.80  1711.0    8417.13\\n\",\n      \"55   official   0.5  192     int8    0.76562    2.90625   6879.19  1806.0    7067.31\\n\",\n      \"56  converted   0.5  192    float    0.75781    9.56641  14427.00  1585.0   11264.40\\n\",\n      \"57  converted   0.5  192  float16    0.77734   12.27340   9537.10  2055.0    9057.24\\n\",\n      \"58  converted   0.5  192    uint8    1.07810    3.95703   6889.69  2352.0    6899.43\\n\",\n      \"59  converted   0.5  192     int8    1.07810    3.68359   6866.42  2086.0    6884.52\\n\",\n      \"60   official   0.5  160    float    0.75390    8.84375   6275.54  1826.0    6035.32\\n\",\n      \"61   official   0.5  160     int8    0.76562    2.87109   8104.90  1843.0    7316.42\\n\",\n      \"62  converted   0.5  160    float    0.75390    8.88281   6463.68  2811.0    6170.63\\n\",\n      \"63  converted   0.5  160  float16    0.77343   11.58980   6799.38  1878.0    6314.49\\n\",\n      \"64  converted   0.5  160    uint8    1.02340    3.66797   5131.54  2370.0    4970.17\\n\",\n      \"65  converted   0.5  160     int8    1.02340    3.50781   5028.12  2082.0    4984.45\\n\",\n      \"66   official   0.5  128    float    0.75390    7.90234   6759.62  1512.0    5552.03\\n\",\n      \"67   official   0.5  128     int8    0.76562    2.24609   3510.57  1807.0    3630.16\\n\",\n      \"68  converted   0.5  128    float    0.75390    7.99609   6622.07  1956.0    6976.16\\n\",\n      \"69  converted   0.5  128  float16    0.77343   10.48830   4392.34  1880.0    4282.03\\n\",\n      \"70  converted   0.5  128    uint8    1.02340    2.83984   3540.63  2307.0    3417.62\\n\",\n      \"71  converted   0.5  128     int8    1.02340    3.18750   3475.96  2033.0    3435.91\\n\",\n      \"72   official  0.25  224    float    0.73437    6.48438   6391.63  1487.0    6242.10\\n\",\n      \"73   official  0.25  224     int8    0.50781    2.35156   4271.29  1878.0    4192.14\\n\",\n      \"74  converted  0.25  224    float    0.74609    6.46484   4858.95  1478.0    4722.11\\n\",\n      \"75  converted  0.25  224  float16    0.70000    7.48438   5223.81  1822.0    4951.89\\n\",\n      \"76  converted  0.25  224    uint8    0.76562    3.60156   7467.73  2050.0    4353.84\\n\",\n      \"77  converted  0.25  224     int8    0.76562    3.61719   4379.18  1977.0    4262.76\\n\",\n      \"78   official  0.25  192    float    0.73046    5.38672   3590.72  1661.0    3483.75\\n\",\n      \"79   official  0.25  192     int8    0.50781    1.98047   5196.78  1905.0    4826.97\\n\",\n      \"80  converted  0.25  192    float    0.74218    5.38672   6775.37  1907.0    5215.93\\n\",\n      \"81  converted  0.25  192  float16    0.74609    6.32812   5244.89  1851.0    4777.14\\n\",\n      \"82  converted  0.25  192    uint8    0.76562    2.92969   4020.21  2084.0    3792.61\\n\",\n      \"83  converted  0.25  192     int8    0.76562    3.05078   3359.21  2063.0    3350.96\\n\",\n      \"84   official  0.25  160    float    0.73046    4.32812   2661.74  1759.0    2663.75\\n\",\n      \"85   official  0.25  160     int8    0.50781    1.82031   2533.19  1761.0    2412.00\\n\",\n      \"86  converted  0.25  160    float    0.74218    4.53125   3285.08  1705.0    2617.05\\n\",\n      \"87  converted  0.25  160  float16    0.74609    5.35156   2636.35  1803.0    2572.78\\n\",\n      \"88  converted  0.25  160    uint8    0.76562    2.35156   2531.91  2044.0    2494.01\\n\",\n      \"89  converted  0.25  160     int8    0.76562    2.44922   2601.15  1997.0    2512.17\\n\",\n      \"90   official  0.25  128    float    0.50781    3.79297   2639.18  1623.0    2469.44\\n\",\n      \"91   official  0.25  128     int8    0.50781    1.55078   1830.96  1647.0    1757.80\\n\",\n      \"92  converted  0.25  128    float    0.50781    3.69531   1923.96  1845.0    1857.89\\n\",\n      \"93  converted  0.25  128  float16    0.75390    4.66797   2439.37  1901.0    2373.20\\n\",\n      \"94  converted  0.25  128    uint8    0.76562    2.08984   1878.13  2049.0    1788.82\\n\",\n      \"95  converted  0.25  128     int8    0.76562    1.95312   2336.19  2063.0    1838.06\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"df = pd.read_pickle(\\\"./data_mobilenet.pkl\\\")\\n\",\n    \"print(df.to_string())\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import subprocess\\n\",\n    \"from os import path\\n\",\n    \"import pandas as pd\\n\",\n    \"import logging\\n\",\n    \"import matplotlib.pylab as plt\\n\",\n    \"%matplotlib inline\\n\",\n    \"%config InlineBackend.figure_format = 'retina'\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 16,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def visualize(d, target, taget_label=None):\\n\",\n    \"    d['size'] = d['size'].astype('int')\\n\",\n    \"\\n\",\n    \"    alphas = d['alpha'].unique().tolist()\\n\",\n    \"    labels = ['converted-float', 'converted-int8', 'official-float', 'official-int8']  # sorted((d['model'] + \\\"-\\\" + d['op']).unique().tolist())\\n\",\n    \"    shapes = ['ob','og','+b','+g'] # ['or','oy','ok','oc','+r','+k']\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"    fig, axes = plt.subplots(figsize=(8,8), ncols=2, nrows=2, sharex=True, sharey=True)\\n\",\n    \"    for i, alpha in enumerate(alphas):\\n\",\n    \"        ax = axes[i%2][i//2]\\n\",\n    \"        for label, shape in zip(labels,shapes):\\n\",\n    \"            model, op = label.split(\\\"-\\\")\\n\",\n    \"            t = d[(d['alpha']==alpha) & (d['model']==model) & (d['op']==op)]\\n\",\n    \"            ax.plot(t['size'], t[target], shape, label=label)\\n\",\n    \"        ax.xaxis.set_major_formatter(plt.FormatStrFormatter('%d'))\\n\",\n    \"        if i==0:\\n\",\n    \"            ax.set_ylabel(taget_label)\\n\",\n    \"        if i==1:\\n\",\n    \"            ax.set_ylabel(taget_label)\\n\",\n    \"            ax.set_xlabel('input size')\\n\",\n    \"        if i==3:\\n\",\n    \"            ax.set_xlabel('input size')\\n\",\n    \"        ax.legend(title=\\\"Model alpha=%.2f\\\"%float(alpha))\\n\",\n    \"    plt.tight_layout()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 17,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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O++8k6uuuqpQxx8VFcWhQ4c8Lmzff/89HTt25Pnnn2fevHn53t+KFSvYuHEjoaGhAIwfP557772X//znP/z1r3/1uEDv37+fVq1asXDhQipXrgxAfHw8zZo14/XXX2fYsGH4+fm56m/atInGjRu77SM9PZ1u3boxYcIEBg0aRL169VzbEhMTSUxMzPf4gUteHSA3P/30EwDNmjXzur1p06YA/PzzzwVqs2DBAn7++WeiNfGFSLkSEFCy7URELgeK3RW755Q9di9MvJ0fjz32mNvP1atXZ/z48R531Vxxsbu1Vq/L9AWsi4iIsBeTlJRkk5KSLlqvsABbr149a6213333nQXsyJEjrbXWJicnWx8fH/voo49aa6198cUXLWATEhJc7ZcvX24B2759e6/779SpkwXskiVLrLXWpqen2ypVqtjq1avbY8eOedSPjY21gI2Pj3eVbdy40QK2d+/eXvuYM2eOBew//vEPV1lCQoLHWAurR48e1t/f36anp7vKdu7caQEbGxvrdfyjRo3y2M/27dutj4+PDQsLcysPDQ21gN22bZtHmwcffNAC9scff8zXWD/99FML2OnTp7uVx8fHW6BAr7w4j79jx475Gld2Y8eOtYB98cUXvW7/97//bQH7yCOPuMoGDhxoATtlyhSvbYYNG2YBO27cuAKPJz+K+3MociXbtMlaKPhr06bC9RcREWGBdbYMxAK2APGAiJR9JREvKHa/OMXuhYu38/Luu+/ajz/+2O7atcueOXPGbt++3b766qu2evXqFrD/+te/3OqXZuye389hUcYDuuNGStTNN9/M9ddfz9SpU3nppZd45513yMzMzPNWy/Xr1wNZWW9voqKiWL58ORs2bCAyMpKtW7dy+vRpbrnlFgIDAz3q33rrrR7Py65atQqAtLQ0r3eB/PrrrwBs2bIlX8eZm//+97+8/fbbrF27liNHjnjMwn/kyBFCQkLyta/OnTt7lDVq1IgGDRqQnJzMsWPH3GZkDwwMpEmTJh5tGjRoAOCxZN7u3buZOHEiixYtYvfu3Zw5c8Zt+759+9x+HjFiRLHdQSMicilatoTIyIJNUNy5syYmFhFR7K7YvaQMGDDA7edGjRrx9NNPc80119CjRw9efPFFHn744UueC7O8UuJGStzAgQN54oknmDdvHgkJCbRp04Ybbrgh1/ppaWkAuV4UneXHjh1zq5/bbZF169b1KEtJSQFg4cKFLFy4MNexnDx5MtdtFzN58mQGDx5MzZo1uf3222nYsCFVqlTBGMOcOXP4/vvvOXfuXL73l9fx7dq1i7S0NLeLv7dl9QDXKgEXLlxwle3YsYObbrqJo0ePcssttxATE0NgYCAVKlQgOTmZ6dOnF2isJc35pe/8XcjJWZ7zy7GgbUSk/Bg+HGJi8rckuI8PlPGpvERESoxid8Xu3pRU7Ny9e3fq1avHvn37SEpK4vrrry/R/ssKJW6kxD3wwAM899xzDBo0iH379jF8+PA86zs/lAcPHvS6/cCBA271nO+HDh3yWt/bfpxtJk+ezBNPPJGPoyiY8+fPM2LECOrWrcv69es9vsicfzUoiEOHDnHNNdd4lDuPz9tfLPLrtddeIyUlhYSEBOLi4ty2zZw50+sM/2VpjhvnecntmVrnagbZn4ktTBsRKT+io+Hf/4ZHHsk7eePjA1OmZNUXERHF7ordf5M9di/J2LlOnTrs27fPbYWoKy12V+JGSlyNGjXo3bu3a/m4fv365VnfmdHP7cLinFE8IiICgObNm1OlShU2btxIWlqax0XQ237atWsHwLJly4rl4n/kyBGOHTvGPffc43HhP3nypOuW0oJYsmQJkZGRbmU7duxgz549hIWFXVJ2+ZdffgGgV69eXvv1JjExkZEjRxaon+JK3LRr147KlSuzYsUKTpw44TapXGZmpmuJyC5durjKnf+9YMECMjMz3WanP3HiBCtWrKBKlSqu3xURKX8efhjCwmD0aPB2KevcOetOGyVtRER+o9hdsbtT9ti9MPF2YaSlpbF161aMMYSHh7vKr7TYXcuBS6kYM2YMn332GfPnz/eYqT2njh07cs0117B8+XJmz57ttm327NksW7aMZs2a0alTJwD8/Pzo378/J06c8EgMrF27lg8++MCjj7Zt23LLLbfwn//8h6lTp3odx48//sjhw4cLcJS/CQ4OpkqVKqxbt87tls2MjAyefPJJjhw5UuB9Tp48mV27drl+zszMZOjQoWRmZvLQQw8VapxOYWFhgOcX5fz58z2WhHQaMWJEYSbMvGRbt25l69atbmXVqlXjgQce4NSpUx6/A2+++SbJycl07dqVRo0aucobN25MTEwMycnJ/OMf/3BrEx8fz6lTp3jggQeoWrVqkYxbREpHdDQkJsKmTTB5clYSZ/LkrJ8TE5W0ERHxRrF7FsXuvylMvA2wfft2tm7dSkZGhqvs4MGD7N2712OMJ0+eJC4ujrNnz3Lbbbe5PW52pcXuuuNGSkXDhg1p2LBhvuoaY5g+fTq33347ffv2pWfPnjRv3pyffvqJOXPmUL16dd577z23LOu4ceNYtGgRf/vb31i7di2dOnXiwIEDfPzxx9xxxx18/vnnHv18+OGHREVF8fDDD/PGG29w8803U6NGDfbu3csPP/zApk2bWLVqFcHBwQU+Xh8fH5544gkmTJjA9ddfT8+ePUlPT2fx4sWkpqbSpUsX118f8qtjx460bt2avn37EhgYyPz58/n+++9p06YNzz77bIHHmN1jjz1GQkIC9957L7179+bqq69m06ZNfP311/Tp04ePP/74kvafm+XLl7u+XJxfktu2bXO75XPatGlubVq0aAHg8WUybtw4EhMTee2119i4cSM33XQTW7ZsYe7cuQQHB3tc4AHeeustOnTowBNPPMGiRYto0aIF//vf/1i8eDHNmjVj7NixRXi0IlKaWrbU5MMiIvml2F2xuzeFibejo6PZtWsXO3fudCWctm7dym233Ub79u1p1qwZwcHB7Nu3j4ULF3Lw4EEaNWrkNQF1RcXuRbE0lV5l80UZXA78YrwtKei0detW+8c//tHWrVvX+vr62rp169r+/fvbrVu3et3XgQMH7EMPPWSDgoJspUqVbKtWrWxCQoJdvHixx5KCTsePH7djx461ERERtmrVqrZSpUo2LCzM3nHHHfZf//qXPXnypKtuQZcUzMjIsJMmTbItWrSwlSpVsldddZX94x//aJOTk13LBO7cudNV/2JLCjqXyLvmmmusv7+/vfrqq+2TTz5p09LSPPoODQ21oaGhXsflXApw8eLFbuUrVqywXbp0sTVq1LDVqlWzHTt2tJ999lme5+9SOc9pXq+cciu31tqUlBT7xBNP2IYNG1o/Pz9bt25d+9BDD9k9e/bkOobdu3fbuLg4W7duXevn52cbNmxon3zySZuamlpkx+mNlgMXuXxoOXARKS4lvRz4xSh23+mqfyXG7tYWPN52LnWe/dzt3r3bPvLII/aGG26wQUFB1tfX1wYEBNgbb7zRjhkzxh4/fjzX/ksjdi+N5cCNtUXzuIKUPcaYdRERERHr1q3Ls55zmTznnQtStsXFxTF9+nS3LLWUf/ocilw+2rRpw/r169dba9uU9lgg//GAiJR9ihfKH8Xul5/8fg6LMh7QHDciIiIiIiIiImWUEjciIiIiIiIiImWUEjciIiIiIiIiImWUEjci5cy0adOw1uoZWRERERGRMk6xuxQFJW5ERERERERERMooJW5ERERERERERMooJW5ERERERERERMooJW5ERERERERERMooJW5ERERERERERMooJW5ERERERERERMooJW5ERERERERERMooJW5ERERERERERMooJW5ERERERERERMooJW5EpEwwxnDrrbcWqE1GRgbx8fE0bdoUf39/jDHMmTOH5ORkjDHExcUVy1hFRERERK5kit1LlhI3UqI2b4Y33oAxY7LeN28u7RFJbkaMGIExhsTExNIeSq4mTZrEqFGjuPrqq3nmmWeIj4+nefPmpTqmwnyJiYiIiJQ1itvLF8XuhVNeYnff0h6AXBkWLYJRo2DpUs9tkZEwfDhER5f8uKR8+/LLL6lWrRoLFy6kYsWKrvLk5OTSG5SIiIhIOaa4XYqLYvfC0x03UuzefRdiYrxf/CGrPCYGpk4t2XFJ+bd//35q167tduEXERERkcJR3C7FSbF74SlxI8Vq0SJ45BHIzMy7XmYmDByYVb+0rV69mr59+1KvXj38/f0JCQkhJiaGTz75xK3eJ598QmRkJIGBgVSuXJnrr7+e8ePHc+7cOY99hoWFERYWxqlTpxg6dCgNGzbE39+fJk2aMHHiRKy1rrrfffcdxhjuvvvuXMfYokUL/P39SU1NdSufP38+d9xxB0FBQfj7+9O4cWOGDh3KsWPHch3T8ePHeeqppwgLC8PPz48RI0YQFhbGyJEjAejSpQvGGNcru9OnTzN+/Hhat25N1apVqVatGu3bt2fmzJlex52ens7o0aNp3Lgx/v7+hIeH89JLL3k9Z3mJi4vDGMPOnTvZtWuXa2xhYWEXbXvgwAH+/Oc/ExYWRsWKFalTpw733HMP69at86iblpbGX//6V6Kioqhfv76r/p133smqVavc6k6bNs11fpYsWeJ2zkaMGFGg4xMREREpaeUxbgfF7ordf3M5x+56VEqK1ahRF7/4O2VmwujRpXvr5ZQpU3j00UepUKECd955J02bNuXw4cOsXbuWt956iz59+gAwbNgwxo8fT1BQEPfffz/VqlVj3rx5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bduzZ0+7evVqr30kJCTYVq1a2SpVqtjatWvbu+66y/7www+5/rsdOnTI9uvXzwYHB1sfHx8L2Pj4+Isei5YDF7l8aDlwESkuits9KXb/jWL3kondS2M5cGOzvtDlMmSMWRcRERGxbt26POs5l33L+Sxgcdi8GRYtylo6MCAgK1Nfms/GipQVJfk5FJHi1aZNG9avX7/eWtumtMcC+Y8HRKTsU9wuUvry+zksynhAj0pJiWrZUhd8EREREZGyTnG7SNmhyYlFRERERERERMooJW5ERERERERERMooJW5ERERERERERMooJW5ERERERERERMooJW5ERERERERERMqocpe4McZMNMYsMsbsMcacMcakGmM2GGPijTG1c2nTwRjzlaPuGWPMD8aYwcaYCnn0090Yk2iMSTPGnDTG/M8YE3uRscUaY1Y76qc52nfPo34FY8wQx3icx/KVMaZD/s+IiIiIiIiIiFyuyl3iBhgCVAUWApOBD4DzwAjgB2NMg+yVjTE9gaVAJPAZ8CZQEXgd+MhbB8aYx4EvgOuAGcAU4GpgmjHm1VzavApMA0Ic9WcA1wNfOPaXs75x9P+aYzxvOsYXCSx1jFtERERERERErmC+pT2AQgiw1p7NWWiMGQsMA14AHnOUBZCVRLkA3GqtXesofxn4FuhtjLnPWvtRtv2EAa8CqUBba22yo3wUsAZ42hjzqbV2VbY2HYCnge3Ajdbao47yvwLrgFeNMV869+VwH9AbWAlEO4/JGPM2sByYYoz51lp7ovCnSkRERERERETKs3J3x423pI3DJ473ptnKegN1gI+cSZts+3jJ8eOjOfYzAPAH3syeaHEkY8Y5fhyUo43z57HOpI2jTTLwD8f+HsrRxtnvS9mPyVq7BvjYMe7eXo5TRERERERERK4Q5S5xk4cejvcfspVFOd6/9lJ/KXAa6GCM8c9nm3k56hSqjTGmEtDB0f+yAvQjIiIiIiIiIleQ8vioFADGmGeAakAg0BboRFbSZkK2atc43n/O2d5ae94YsxNoCTQCtuSjzQFjzCmgvjGmirX2tDGmKlAPOGmtPeBlqNsc782ylTUGKgA7rLXn89kmV8aYdblsap6f9iIiIlL+KR4QERG5PJXbxA3wDHBVtp+/BuKstb9mKwt0vKflsg9neY0CtqnqqHe6GPvI2UZERERERERErjDl9lEp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v/wlO+20U4/73lMf+chHOP3009lnn316tZ1169bR2NjI/fffz0EHHcR73vMeRo4cyYMPPsjXv/51vvWtb7FkyRIOOeSQXu2HJEnScDZU7tvBe/fe5L177zNxI/XQ//zP/wCw1157bVbZ6NGjGT16dI/b3Xrrrdf/34G+NmrUKEaNGtXr7dx2223cf//9NDY2snDhQmpqXp3VOWvWLGbPns3ll1/Odddd1+t9kSRJ0uDnvXvv8d6997nGjdTOzTffTH19PTvttBPbbbcdr3/96/nsZz/L2rVrgVfnl86aNQuA4447joggIpg/fz4RweTJkwH44Ac/uEEZbHqe7AMPPMBpp53GmDFjGDlyJKNHj2bixIncfPPN6+t0Nk/217/+NRdccAFveMMb2H333Rk5ciRjx45l+vTprFixopTPprN5shHBscceyx//+EemT5/O6NGjGTlyJHV1dVx//fUb1D3zzDM57rjjALjkkkvWfz5tr7t06VIATjzxxA1+8QNMmjQJgD/84Q+lvCdJkiQNXt67d85796HDETdSGxdeeCGf/exnGTVqFO9973t5zWtew913382FF17IPffcw8KFC9l3332ZNWsWixYtYvHixUyePJl9990XgPHjxzNr1iweffRRvve97zFp0qT1C5tVj52ZO3cuZ599NiNGjODkk0/mgAMOYOXKlTz00ENcffXVvPvd795k/L/927/xzW9+k+OOO44JEyawzTbb0NLSwrXXXssdd9zBQw891OMhnt3x3HPP8eY3v5ltttmGU045hbVr13LLLbcwZcoUampq1v9BrC4Cd8MNN9DQ0MCxxx67/hrVz7Gurg6Au+++m3PPPXeDPwB33nknAG95y1t67b1IkiRp4PPevee8dx9kMnPQPIDdgA8BtwG/Bf4MrAJ+BEwFatrV3xfITTwWbKKtycADwAuVNhYBJ22i/gjg48AvKv16BrgLmLCJmO2AS4BfAWuAlcDNwMElfV4PH3HEEdmVxx9/PB9//PEu65WFi0kups/a664lS5YkkHvvvXc+9dRT68+//PLLedJJJyWQl1122frzs2bNSiDvu+++ja51/fXXJ5DXX3/9RmWTJ09OIJctW7b+XEtLS2611Va5yy675GOPPbZRzH//93+vf75s2bIEcvLkyRvUWbFiRa5Zs2aj2HvuuSdramryrLPO2uD8fffdl0DOmjVro5jOdPaeqz9TU6dOzXXr1m3wvkaMGJEHH3zwZrXd2tqa73znOxPIQw45JD/60Y/mJz7xiTzuuONy6623znPOOSdffvnlbvd7MOjrn0NJveeII45I4OEcAPdOuRn3A5IGPu/bX+W9e9e8d+8d3f05LPN+YLCNuDkV+AbwFHAf8CTwV8A7gWuBt0XEqZnZfvWsnwO3d3C9xzpqJCIuB84HVgBzgW2A04E7IuKczLyyXf0AFgCnUCRhrgR2BU4DmiPiXZn5vXYxI4HvA28GHgK+CuxdeY8nRsTxmfnTLj+RAa66oFl3y/pz4bPqnMuLLrpog1Xkt9pqK770pS9x1113ce211260YFkZvvGNb7Bu3TpmzJixPmPd1mtf+9our9FZRn7ixInU1dVxzz33bHE/N2X77bfniiuuYMSIEevPHXLIIbz5zW+mubmZF154gde85jXdulZEcOutt3LJJZdw6aWX8vjjj68va2xs5L3vfS9bbTXYfn1JkiQNXIPpvh28d99S3rsPLoPt0/s1cDLw75nZWj0ZERdSjI55F0US57vt4h7NzIu700BETKBI2vwOOCozn62c/yLwMHB5RNyZmcvbhJ1OkbRZAjRm5ppKzDcpRgPNjYh7M/P5NjHnUSRtbgVOq76fiLiJIsl0XUS8vu37VO965JFHADj++OM3Knvd617Ha1/7WpYtW8aqVatKXxX+Jz/5CQBve9vbenyNzORf//VfmT9/Pj//+c959tlneeWVV9aXb7PNNl1e4/bbb+fRRx/d4Nz48ePXD5HclAMOOIDa2tqNzu+9994APPvss93+5b9mzRo+8IEPcPfdd3PVVVcxadIktt9+e+6//34++tGPUl9fzy233LJ+zqwkSZKGF+/dvXcfTgZV4iYz7+3k/NOVJMllwLFsnLjZHGdVjpdVkzaVNpZHxFXADOCDwKw2MWdXjhdVkzaVmAcriZgzKBI718P6ETrVdj7VNjmTmd+LiB8CxwANFCOLBq2OMvEDdVvBVatWAXS6avzo0aN58sknee6550r/5f/cc88BnWfeu+O8887jK1/5CqNHj+bv//7vGTNmDNtttx0A8+fP54knnujyGrfffjs33HDDBucmT57crV/+O++8c4fnq9n1tn+IuvK5z32OW265ha9+9av8wz/8w/rzb3vb27j11lsZP3485557rr/8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G0mqWbOmRo8eLcm11lFVxowbAECWvn376vHHH9ebb76p22+/Pat9/vz52rdvnyZPnqyffvrJZ+zq1av1u9/9TkePHtVtt92mdu3a6YcfftCsWbM0b948ff7557r66quz+u/fv1+dO3fW9u3b1bVrV3Xt2lW7d+/WsGHDFBMT4/McaWlpuvHGG5WamqobbrhBt9xyi44fP66PP/5Yt9xyi/79739ryJAhxb7+pKQkPffcc+rWrZvuuusu1a1bV1u3btXs2bM1f/58rVy5Uh07diz08UaOHKmkpCTdc8896t27txYvXqx//vOfWr58uVasWKFatWrl6H/mzBndfPPN2rVrl3r06KHq1atr7ty5+tvf/qZTp0553Vr08MMPKyIiQlFRUWratKkOHDigTz75RP369dOWLVsUFxdX7M/Cl6+++konT55UTEyM6tWrl2Ofw+HQzTffrKlTp2rp0qWFmhrty/z587Vnzx5FRUWpbdu2PvucPn1as2bN0s8//6zAwEBdfvnlioqKUrVq1Yp1TgCAN3ICcoL8lEVOIEk1atSQJK9ZXx5VJSegcAMAyFKvXj3dd999mjFjhnbu3KnmzZtLkqZNm6agoCDdc889Pu91t9aqf//+OnLkiGbNmqUHHngga9/777+v++67T/369dOmTZvkcLgme44ePVrbt2/XiBEj9NJLL2X1Hz58uK6//nqf4xswYIDS0tL03nvv6b777stqP3TokG688UY9+uijuu2223ThhRcW6/q7d++uvXv3eiUg3377rbp06aK//e1vWrRoUaGPt3LlSm3YsEGhoaGSpGeffVZ33323/ve//+kf//iHxowZk6P/rl271LFjR3322WeqXbu2JGncuHG65JJL9NJLL2n06NFZCYwkbdy4Ua1bt85xjIyMDPXo0UPPPfechg0bpmbNmmXtW7ZsWZG/scr+LdqWLVskSZdcconPvm3atJEk/fjjj0U6R3ZTp06VJP3hD3/Is8+ePXvUr1+/HG3h4eGKj49XdHR0sc8NAPgNOQE5QW5lnRNI0ltvvSVJuuWWW3zurzI5gbWWVyV9SVobGRlpAVR8mzZtsps2bSq140uyzZo1s9Za+9VXX1lJdvz48dZaa1NTU63D4bAPP/ywtdbap556ykqy8fHxWfErVqywkuz111/v8/hdu3a1kmxiYqK11tqMjAxbp04dW69ePXvo0CGv/gMGDLCS7Lhx47LaNmzYYCXZPn36+DzH3LlzrST72muvZbXFx8d7jbW4evXqZQMCAmxGRkZWW0pKipVkBwwY4HP8EyZM8DrOtm3brMPhsGFhYTnaQ0NDrSS7detWr5j+/ftbSfb7778v1FjnzJljJdmZM2fmaB83bpyVVKRXds8884yVZJ966imf5506daqVZIcOHVqoceaWkpJijTG2UaNG9tSpUz77xMbG2oSEBLtnzx57/Phx+/3339s//OEP1hhja9eubTds2FCscxdGYX8OIyMjraS11g9yAUs+AFQqpZ0PWEtOUBjkBKWfE1hr7bx586wxxjZv3tymp6d77S+vnKA88gFm3AAAcrj22mvVoUMHvfXWW3r66af15ptvKjMzM9/pxuvWrZPk+nbKl+7du2vFihVav369oqKi9MMPP+jEiRO64YYbFBwc7NX/xhtv9LqvfdWqVZKkw4cP+1yE7tdff5Ukbd68uVDXmZeFCxfqjTfe0Jo1a7R//36vp2Xs379fTZs2LdSxfH3T06pVK7Vo0UKpqak6dOiQ6tevn7UvODhYF198sVdMixYtJEkHDx7M0f7zzz9r8uTJSkhI0M8//6yTJ0/m2P/LL7/keB8bG+vXC/hNmzZN1loNGDDA56LEkrymhrdv315vvPGG6tatqxdeeEGxsbEslAkAJYScgJygvHz55Ze6//77FRgYqDlz5qhBgwZefapSTkDhBgDgZciQIXr00Ue1aNEixcfHq1OnTrryyivz7H/48GFJyjN58bQfOnQoR/+8pi83adLEq+3AgQOSpM8++0yfffZZnmM5duxYnvsK8vLLL2vEiBFq0KCBbrrpJrVs2VJ16tSRMUZz587Vt99+q9OnTxf6ePldX1pamg4fPpwjScv+5+w893WfO3cuq2379u265pprdPDgQd1www2KiYlRcHCwqlWrptTUVM2cObNIYy0MT0Lt+fvLzdOe13Xk5+zZs4qPj5dUvEWJhw0bphdeeEFJSUlFjgUA5I2cgJzAl9LMCVatWqUePXrI4XBo0aJFuuaaa4oUXxlzAgo3AAAv/fr101//+lcNGzZMv/zyi8aOHZtvf88v7z179vjcv3v37hz9PNu9e/f67O/rOJ6Yl19+WY8++mghrqJozp49q9jYWDVp0kTr1q3zSjg93+4Vxd69e3XppZd6tXuuz9c3i4X14osv6sCBA4qPj9fAgQNz7Hvvvfd8PonjfO9n91xLXvere54Uktf97vlZsGCBdu/erejoaJ+fWUEuuOACSa4ncAAASg45ATmBR1nkBMuXL9fvf/97ORwOLV68WNddd12R4qXKmRNQuAEAeKlfv7769OmT9ZjHvn375tvf881bXgnA0qVLJUmRkZGSpLZt26pOnTrasGGDDh8+7JWs+DqO5xf38uXLSyVJ279/vw4dOqQ777zTK0E7duxY1tTvokhMTFRUVFSOtu3bt2vHjh0KCwsr1rdQHp4nedx1110+z+vLsmXLNH78+CKdJ3uSdt1116l27dpauXKljh49mmPBxszMzKzHr3br1q1I55B+W5S4uI8A/+qrryTpvJ5cAQDwRk5ATuBR2jnBF198oV69eikgIECLFy/O8eSxoqiMOYGjvAcAAPBPEydO1EcffaTFixd7PVEhty5duujSSy/VihUrNHv27Bz7Zs+ereXLl+uSSy5R165dJbke7fjAAw/o6NGjXvdXr1mzRu+++67XOa666irdcMMN+t///pf1hIHcvv/+e+3bt68IV/mbkJAQ1alTR2vXrs0xtfrMmTN67LHHtH///iIf8+WXX1ZaWlrW+8zMTI0aNUqZmZl66KGHijVOj7CwMEneCe3ixYv15ptv+oyJjY0tzsK2WerWrat+/frp+PHjXn9vr776qlJTU3XzzTd7JUrbtm3TDz/8oDNnzvgcV1pampYsWaJGjRr5TDo9Nm/e7PPbs9TUVA0fPlyS9OCDD+YZDwAoHnICF3KC35R0TrBkyRL17NlTtWvXVkJCQoFFm6qWEzDjBgDgU8uWLdWyZctC9TXGaObMmbrpppt07/Cua4QAACAASURBVL33qnfv3mrbtq22bNmiuXPnql69enr77bezHvspSZMmTVJCQoL++c9/as2aNeratat2796t999/X7feeqvmz5/vdZ7//Oc/6t69uwYPHqwpU6bo2muvVf369bVz505999132rhxo1atWqWQkJAiX6/D4dCjjz6q5557Th06dFDv3r2VkZGhpUuXKj09Xd26dcv6lrCwunTpoiuuuEL33nuvgoODtXjxYn377bfq1KmT/vKXvxR5jNk98sgjio+P1913360+ffrooosu0saNG/Xpp5/qnnvu0fvvv39ex8/LpEmTtGzZMr34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O1zDnJ2dXaRdRQK0TH8AV1111Xb7mz59epE2q1evLvjmrbDSPsvBgweXuN/SpUsrNN7KeOWV1Krkfv36lSjbY489+P73v09+fj7vvvvu7h6aJNUINS0eAGOCnWFMkFKTYwITN5JUh3Vr040+2X12qk3f7L50a1NyLfnucMwxxwAwefLk7dbr2bMnkPrWpbgPP/yQ5cuX07lz5zK/TSuvJk2acPbZZ/Ppp5/y+uuv8/vf/56tW7eW+GYtM/Y1a9awaNGiSvVZWL169YDSv4n6/ve/T1ZWFm+++Wa575eTk0N+fj5vvfVWibLSPsvdKSsrq8xv3DLHkpZ1vGfmevETQyRJKTUtHgBjguKMCVJqa0xg4kaS6rgb+9xIVijfn4OskMXwPslvSFdel112GfXr12f06NEsXry4RPny5csBGDJkCABjxowp8od727ZtXHvtteTn53PxxRcnMqbMUZRPPfUUTz31FPXr1+eCCy4oUe+qq64CYOjQoXz66aclyr/++uuC9frllZk+vWzZshJlbdq04YILLmDu3LmMHj261ADno48+YsmSJQU/X3TRRQD89re/ZePGjQXXV69eXeSI0Kqwzz778M9//rPUsuOOOw6ARx99tMQ3r5MnT+btt9+mcePG9OrVa5ePU5JqqpoUD4AxQXHGBCm1NSZwjxtJquNy98/l0dMe5ZJXLiE/5pdZLytkMfZHY8ndv+qmRR966KE89NBDXHrppfTs2ZMBAwbQtWtXVq1axZw5c2jatCnTp0+nV69eXHfdddx+++10796dgQMHsueeezJ58mQWLlxI7969+dWvfpXImI499lgOOOAAJk6cyJYtW/jRj35U6mkFubm53HrrrfzmN7+ha9eu/Pu//zudO3dmw4YNfPLJJ8ycOZPevXvzxz/+sdx99+vXj6ysLH7zm9+wcOFCWrRoAaROzgB44IEH+Mc//sGNN97I7373O3r37s33vvc9Pv30U95//33mzJnDs88+S+fOnQE477zzeO655/if//kfunfvzoABA9iyZQsvvPACRx99NB999FECn1jF5ObmMmHCBH70ox+Rk5NDgwYN6NOnD3369GHgwIGceOKJvP766xxyyCH8+Mc/pm3btrz//vu88sorxBi59dZbi+wTIEkqqibFA2BMUJwxQS2PCZI4U9xX9XwB83JycqKkmm/x4sVx8eLFu7SP1z96PfYd1zcyghKvvuP6xtc/en2X9r8zZs+eHX/yk5/E1q1bxwYNGsR27drFk08+OU6cOLFIvWeffTYee+yxca+99oqNGjWKhx56aBwzZkz89ttvS9wzOzs7Zmdnl9pfXl5eBOL06dNLLR89enQEIhBfeOGF7Y79zTffjGeddVZs165dbNCgQWzVqlU84ogj4lVXXRXnzJlT7jFl/O53v4tHHHFEbNy4ccEYCtu0aVO8//774w9+8IPYtGnT2LBhw9ixY8d4wgknxLvvvjt++eWXJeqPHDkydu7cOTZs2DBmZ2fHYcOGxY0bN0Yg9u3bd7vjKWz69OkRiHl5eUWu9+3bt8Q4M8aNGxeBOG7cuCLXP//883jeeefFNm3axKysrBL33bx5c7z77rvjv/3bv8W999471qtXL7Zu3TqeeuqpccqUKeUe8/aU9/cwJycnAvNiNYgFovGAVKsYD5RkTPAdY4KUXR0TVEU8EGLqD7pqoRDCvJycnJx58+ZV9VAkVVLmeMZDDjlkl/e1aOUipi2ZxlebvqJpo6bkds6t0jXsUnVR3t/DI488kvnz58+PMR65O8a1I8YDUu1hPCBVvaqIB1wqJUkqolubbgZmkiTVccYDUvXh5sSSJEmSJEnVlIkbSZIkSZKkasrEjSRJkiRJUjVl4kaSJEmSJKmaMnEjSZIkSZJUTZm4kSRJkiRJqqZM3EiSJEmSJFVTJm4kSZIkSZKqKRM3kiRJkiRJ1ZSJG0mSJEmSpGrKxI0kSZIkSVI1ZeJGkiRJkiSpmjJxI0mq1aZOnUqvXr1o3rw5IQTOOOOMgrK5c+dy0kkn0apVK0II9OjRA4DBgwcTQmDp0qUV6nPp0qWEEBg8eHClxj5jxgxCCIwYMWKn2q1YsYJBgwbRoUMH6tWrRwiBtWvXMn78eEIIjB8/vlLjkiSpJjImMCaoqepX9QAkSdpVli5dyoABA2jevDlDhgyhadOmHHzwwQB89dVXnHrqqWzcuJELL7yQVq1a0bZt2yoecTIGDx7M1KlTOe+88zjggAMIIdC4ceMqG8+MGTPo168feXl5Ox1wSpKUBGMCY4KazMSNJKmEEFLvMVbtOCrr9ddfZ+PGjdx5552cf/75RcreeecdVq5cyU033cSwYcOKlN1yyy1cf/31tG/fvkL9tm/fnvfff59mzZpVeOwVtXnzZl577TVOPPFEnnnmmd3evySp9qgt8QAYExgT1GwmbiRJtdann34KwL777rtTZe3ataNdu3YV7rdBgwYF3+LtbitWrCA/P7/U55Ikqa4yJlBN5h43kqQa5/nnn6dPnz40a9aMJk2acNhhh3HLLbewadMm4Lt14Hl5eQD069ePEELBWu4QAoMGDQLgoosuKlIG21/P/s4773DOOefQvn17GjVqRLt27ejfvz/PP/98QZ2y1rN/8MEHXH/99Rx11FG0bt2aRo0akZ2dzSWXXMLy5csr/bl06tSJ7OxsAJ588smC5yrPuvp58+Zx5pln0qZNm4Jx/fznP+ezzz4rUXdnnmPw4MH069cPgJEjRxaMKYTAjBkzKv3MkqS6zZigdMYEtYszbiRJNcqwYcO45ZZbaNWqFeeffz577bUXkydPZtiwYUyZMoWpU6fSqVMn8vLymDFjBjNnzmTQoEF06tQJgB49epCXl8eCBQt46aWXGDBgQMEGhJn3sowdO5bLLruMevXqcfrpp9O1a1dWrlzJ3Llzeeihhzj77LO32/4Pf/gDjzzyCP369aNXr140bNiQRYsW8dhjj/Hyyy8zd+7cCk/FBrjyyitZunQp9957L0cccUTBpos7eq5XXnmFM888kxgjAwcOJDs7m3nz5vHwww/z0ksv8dZbb9G5c+cKPUdmDE8++SR9+/bl+OOPL7hP5r+JJEkVYUxQNmOCWibG6KuWvoB5OTk5UVLNt3jx4rh48eLd1l9qNftu667cZs+eHYHYsWPH+NlnnxVc37JlSzzttNMiEG+66aaC63l5eRGI06dPL3GvcePGRSCOGzeuRNmgQYMiEJcsWVJwbdGiRbF+/fqxRYsWceHChSXa/POf/yz495IlSyIQBw0aVKTO8uXL48aNG0u0nTJlSszKyoqXXnppkevTp0+PQMzLyyvRpixl9R1j6c+8fv362LJly5iVlRVnzZpVpP6tt94agXjSSSft9ueojsr7e5iTkxOBebEaxALReECqVYwHvmNMsGPGBLtGVcQDLpWSpDouhJKv8pRVhSeeeAKAG264ochpD/Xr1+fOO+8kKyuLxx57bJf0/fDDD7N161aGDx9Ot27dSpR36NBhh/fITKUurn///nTr1o0pU6YkMtad8dJLL7F69WrOOeccjjvuuCJl11xzDZ06deK1115j2bJlBder43NIkiqnJsUDYEywKxgTVF8ulZIk1Rjz588H4IQTTihRduCBB9KhQweWLFnCunXrEj+94c9//jMAp5xySoXvEWPkmWeeYfz48fzlL39hzZo1bNu2raC8YcOGO7zHpEmTWLBgQZFrPXr0KJh+vLO295nWr1+fPn36sHTpUt59913222+/xJ5DkqTKMCYwJqhLTNxIUh0XSznis7oe/7lu3TqAMk93aNeuHcuWLWPt2rWJB2lr164FqNR686uvvpp77rmHdu3acfLJJ9O+fXuaNGkCwPjx4/nkk092eI9Jkybx5JNPFrk2aNCgCgdp5flM4bvnT+o5JEnVS02KB8CYAIwJ6hITN5KkGiMTeK1YsYIuXbqUKM+cdpB0gAbQvHlzAP71r39V6FjPlStXct9999G9e3dmz57N3nvvXaT82WefLdd9xo8fX3DSRRIKf6alKf6ZJvUckiRVhjGBMUFd4h43kqQao2fPngClHhn54Ycfsnz5cjp37lwQUCXpmGOOAWDy5MkVav/xxx+Tn59P//79SwQ2y5cv5+OPP670GCtie5/p1q1befPNNwHIyckBKvYc9erVAygydVqSpMowJkieMUH1ZeJGklRjDBkyBIAxY8bwxRdfFFzftm0b1157Lfn5+Vx88cW7pO/LLruM+vXrM3r0aBYvXlyifPny5dttnznm8q233ioSrGzYsIGhQ4eydevWRMdbXmeccQYtW7bk2WefLVizn3HPPfewZMkSTjzxxIK17BV5jn322QegyGaGkiRVhjFB8owJqi+XSkmSaoxevXpx3XXXcfvtt9O9e3cGDhzInnvuyeTJk1m4cCG9e/fmV7/61S7p+9BDD+Whhx7i0ksvpWfPngwYMICuXbuyatUq5syZQ9OmTZk+fXqZ7du2bcu5557LhAkT6NGjB/3792fdunW89tprNG7cmB49epTYYHB32GuvvXjiiSc466yz6Nu3L2eddRb77bcf8+bNY+rUqbRt25b/+q//qtRzHHTQQbRv354JEybQoEEDsrOzCSFw4YUXkp2dvbsfWZJUCxgTJM+YoPoycSNJKqE6bkKYcdttt9GzZ08eeOABnnrqKbZs2UKXLl0YM2YM11xzzS49vWDo0KF0796dO+64gxkzZjBp0iRatWrF4Ycfzs9+9rMdtn/88cfZf//9ee6553jwwQdp3bo1p59+OqNGjeLMM8/c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\\n\",\n      \"text/plain\": [\n       \"<Figure size 576x576 with 4 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"image/png\": {\n       \"height\": 566,\n       \"width\": 567\n      },\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"visualize(df, 'inference', 'avg inference [us]')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 18,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAABG0AAARsCAYAAAAkMmtiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3XlYlXX+//HnfQSRVHBBEjdwza1UdMrUICFxbDJq3FK/BuroWNPPtLLMUnDJpbTSmmqy3NKsrNQ2EiPAXEpFrRG0RUXFXVBcEZT79wdxxuM5KDsHfD2u61zEZ7k/7/vQubrPu89imKaJiIiIiIiIiIg4F0tZByAiIiIiIiIiIvaUtBERERERERERcUJK2oiIiIiIiIiIOCElbUREREREREREnJCSNiIiIiIiIiIiTkhJGxERERERERERJ6SkjYiIiIiIiIiIE1LSRkRERERERETECSlpIyIiIiIiIiLihJS0ERERERERERFxQkraiIiIiIiIiIg4ISVtRERERERERESckJI2IiIiIiIiIiJOSEkbEREREREREREnpKSNiIiIiIiIiIgTUtJGRERERERERMQJuZR1AOWdYRj7AA8guYxDERERkcLxA86Yptm4rAMBPVuIiIhUAH4U07OFkjZF5+Hu7l6rVatWtco6EBERESm4Xbt2cfHixbIO42p6thARESnHivPZQkmboktu1apVrYSEhLKOQ0RERAqhY8eObNu2Lbms47iKni1ERETKseJ8ttCeNiIiIiIiIiIiTkhJGxERERERERERJ6SkjYiIiIiIiIiIE1LSRkRERERERETECSlpIyIiIiIiIiLihJS0ERERERERERFxQkraiIiIiIiIiIg4IZeyDkBERERERERuLDs7m7S0NM6ePculS5cwTbOsQxKp8AzDwM3NjerVq1OrVi0sltKd+6KkjYiIiIiIiJPLzs7m4MGDXLhwoaxDEbmpmKZJRkYGGRkZnD9/noYNG5Zq4kZJGxERERERESeXlpbGhQsXcHFxoW7dulStWrXU/4+/yM0oOzub8+fPc/ToUS5cuEBaWhpeXl6lNr4+5SIiIiIiIk7u7NmzANStW5fq1asrYSNSSiwWC9WrV6du3brA/z6LpTZ+qY4mIiIiIiIiBXbp0iUAqlatWsaRiNyccj97uZ/F0qKkjYiI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Nmzg7NmzNhs2Z2dnW49d7969e4HGuFZ6ejq7d+/GMAwaN25sLc+9bnR0NNnZ2TYnSJ09e5YNGzZwyy23WP9dqQh05LeIiIg4reBgiIuDnTth7tycBM7cuTm/x8UpYSMiUpKmTZvGypUrWbNmjd1pStfq2rUrt912G+vXr+fTTz+1qfv000/54YcfaNGiBd26dQPA1dWVwYMHc/bsWbs9VrZu3cqyZcvsxujUqRP33HMPn3/+OQsWLHAYx3//+1+OHz9egLv8H29vb2655RYSEhJsllhlZWXx5JNPcvLkyQJfc+7cuezfv9/6e3Z2NuPGjSM7O5uhQ4cWKs5cfn5+gH2Ca82aNXZHtueKjIzENM0Cva5WrVo1hgwZwvnz5+3+bm+++SbJycn07NmTJk2a2NTt2bOH3bt3k5WVZS07evQoKSkpdjGeO3eO8PBwMjIyuO+++2yWmDVt2pSQkBCSk5P597//bdMvIiKC8+fPM2TIEKpWrerw/ssjzbQRERERp9emjTYaFhEpbY0aNaJRo0b5amsYBosXL6ZHjx4MGDCA0NBQWrZsya+//sqqVauoXr06S5YssZkZMX36dGJiYnj99dfZunUr3bp148iRI3z88cfcf//9fPHFF3bjfPjhhwQFBTF8+HDmzZvHXXfdRY0aNUhJSeGXX35h586dbNq0Kc9ToK7HYrEwevRoZs6cye23305oaCiZmZnExsaSlpZG9+7drTOG8qtr1660b9+eAQMG4OnpyZo1a/j555/p2LEjzz77bIFjvNrjjz/OwoUL6devH3379qVevXrs3LmTb7/9lv79+/Pxxx8X6fp5mT59OnFxcbz66qvs2LGDO++8k127drF69Wq8vb3tkikAwcHB7N+/n3379lmTTbt37+a+++7j7rvvpkWLFnh7e3Po0CHWrl3L0aNHadKkicPk01tvvUWXLl0YPXo0MTExtGrVip9++onY2FhatGjBSy+9VCL3XVY000ZERERERESK7K677mLLli0MGjSITZs28corr7Bx40YGDhzIli1buOuuu2zae3l5sWHDBoYOHcru3bt5/fXX2bFjB2+//TZjx451OEaDBg1ISEjgpZdeolKlSixbtox58+axceNGGjVqxH/+8x/rprWFMXXqVObMmYO7uzv/+c9/+Pzzz+nUqRObN2/OdwLraq+99hovvvgicXFx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PMowjDBgCnAF+AEY7WCqWLJpmov+/OdXgeaGYWwEUv4suwPI3Y1qommaG0s0aBEREREREScWHAzvvgsjR0J2dt7tLBaYP79sT4Zs3bo1b731FqNGjaJDhw6EhobSvHlzUlNT2bJlCx4eHsTGxtKlSxeeffZZXn75Zdq2bUvfvn2pWrUqUVFR7Ny5k27dujFu3Lhiialr1640a9aMFStWkJWVRe/evfH29rZrFxwczMyZM3n++edp3rw5999/P40bN+bcuXPs37+f+Ph4unXrxrfffpvvsbt3747FYuH5559n586d1KxZE8g5NQvgzTfHLlusAAAgAElEQVTf5Pfff2fSpEl88MEHdOvWjVtvvZXDhw+za9cutmzZwvLly2ncuDEAAwcO5OOPP+aLL76gbdu2hIaGkpWVxaeffspf/vIX9uzZUwzv2PW98847dO3alXHjxhEdHU2nTp04ePAgK1aswGKxsHDhQqpXr25tP3bsWOu/D3369MHV1ZUNGzaQlJRE7969+fLLL+3GCA4O5qOPPqJ37974+/vj6upKQEAAAQWddlYaiuPc8NJ6AZGAeYNX3FXthwNfAcnAOeAScAD4GLinmGJK8Pf3v+E57SIiIuKc/P39TSDBdIJnHVPPFiKSh6SkJDMpKalEx/juO9MMDMxd7Gz7CgzMqXcWGzduNP/+97+bderUMV1dXU0fHx+zZ8+e5ooVK2zaLV++3OzatatZrVo1083NzWzdurU5bdo08+LFi3bX9PX1NX19fR2OFxERYQJmbGysw/qpU6dav5N++umn1439hx9+MPv162f6+PiYrq6uppeXl9muXTtz7Nix5pYtW/IdU64PPvjAbNeunVmlShVrDFe7dOmS+cYbb5h333236eHhYVauXNls2LChGRQUZL722mvmyZMn7dpPnjzZbNy4sVm5cmXT19fXnDBhgpmRkWECZmBg4HXjuVZe97Bv3z4TMMPCwuzqUlJSzFGjRpmNGjUyXV1dzdq1a5uhoaHm5s2bHY6xcOFCs127duYtt9xi1q5d23zooYfMX375Jc+/27Fjx8yBAwea3t7epsViMQEzIiLihveS389hcT5bGKY2HygSwzAS/P39/RMSEso6FBERESmEjh07sm3btm1mHkdwlzY9W4iII7nHMl+7b0dJSEyEmJicY709PHJm1pTVHjYiziS/n8Pi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4H7gPiDXbM0FFlDSRkREREREREQkFwVN2jzqlShERERERERERIqowjrDqEBJG2vtFG8FIiIiIiIiIp4ZY7DWkpmZiY+PT2GHI3LDcSRtLrEdjNfp3S4iIiIiIlLE+fv7A3Dq1KlCjkTkxuR47znei1eLkjYiIiIiIiJFXKlSpQA4cOAAJ06cIDMzs9CWa4jcKByz206cOMGBAweAP96LV0u+l0cZY+YD06y1HxXG9SIiIiIiIjeKsmXLcurUKU6fPs3evXsLOxyRG1KJEiUoW7bsVR2zIDNt/gzUKMTrRUREREREbgg+Pj5UrlyZ8uXLExAQcNX31RC5URljCAgIoHz58lSuXPmq7ylV0NOjGhljHvFKJCIiIiIiIpIjHx8fQkJCCAkJKexQROQqKWjS5j6gcz6uU1pYRERERERERCQXBUnaPOqF8Td5oQ8RERERERERketOvpM21top3gxERERERERERET+oCO/RURERERERESKICVtRERERERERESKICVtRERERERERESKICVtRERERERERESKICVtRERERERERESKICVtRERERERERESKICVtRERERERERESKIN8r0akxpg5QF7jJWvvhlRhDREREREREROR65tWkjTGmEfA+0Dhb8YcX6toAC4CHrLXzvDmuiEhRlJmZSWpqKidOnODcuXNYaws7JJHrnjEGf39/SpUqRdmyZfHx0aRiERERuXZ57ZOMMaYWkATUBsaTlaDJbjmQCnT11pgiIkVVZmYme/bs4ffff+fs2bNK2IhcJdZazp49y++//86ePXvIzMws7JBERERE8s2bM23igeJAU2ttsjEmHujoqLTWWmPMauB2L44pIlIkpaamcvr0aXx9falQoQIlS5bU//iLXAWZmZmcOnWKAwcOcPr0aVJTUwkJCSnssERERETyxZu/QcQAn1lrk3Npswe4xYtjiogUSSdOnACgQoUKlCpVSgkbkavEx8eHUqVKUaFCBeCP96KIiIjItcibv0WUAfZeoo0hazaOiMh17dy5cwCULFmykCMRuTE53nuO96KIiIjItcibSZuDQI1LtKlP1mwbEZHrmmMPG82wESkcxhgA7SclIiIi1zRv/jbxLXCPMaa2p0pjzO1kLaFa6MUxRURERNw4kjYiIiIi1zJvJm1GAxnAcmPM41zYu8YYU//C83nACeA1L44pIiIiIiIiInJd8trpUdban4wxXYAZwNsXig3w44WvR4EHrLW7vTWmiIiIiIiIiMj1yqubLVhrvwaqAk8DnwDfAJ8Bg4Aa1tpvvTmeiIgUDUlJSRhjSEhIKFA/iYmJGGNITEz0SlwX27lzJ8YY4uLiCtxXREQEERERBe5HRERERCQnXt8h01p71Fo73lrb3Vrb3lr7oLV2nLU21dtjiYjcqIwxGGPw8fHh119/zbFd27ZtnW2vVCJEirbFixfzz3/+k5iYGMqVK4cxhtatW+e7v9TUVAYMGEBERAT+/v7ccsst9O7dm717cz5Acu/evfTu3ZtbbrkFf39/IiIiGDBgAEeOHMl3HCIiIiI3Aq8lbYwxUcaYppdoU8UYE+WtMUVEbmS+vr5Ya/nggw881v/8888kJSXh6+u1lbByDXrnnXd4/fXXWbVqFbfcckuB+kpJSaFFixaMHz+e6tWrM3DgQJo1a8bkyZNp0qQJ27dvd7vm119/pUmTJkyePJlmzZoxcOBAqlWrxvjx42nRogUpKSkFiklERETkeubNmTZJwH+MMbltNPwosNSLY4qI3LBuvvlmmjZtyuTJk8nIyHCrf//99wG45557rnZoUoQ899xzbN68mZMnTzJv3rwC9TV48GD+97//8fTTT7NkyRLGjBnDnDlzGD9+PIcOHeKJJ55wu+aJJ57g0KFDTJgwgTlz5jBmzBi+/fZbBg4cyE8//cSLL75YoJhERERErmfeXh51DhhojPnUGBPg5b5FROQiffr04cCBA3z55Zcu5enp6SQmJtKyZUvq1auX4/U///wzjzzyCJUqVaJ48eLccsstPPLII/z8888e2x88eJDHHnuMm2++mcDAQBo1asSUKVNyjTE1NZUXXniBunXrEhgYSHBwMDExMSxatOjyb/gi+/btY/jw4bRq1YoKFSo476FHjx4kJyfnuZ+4uDiMMWzfvp3XX3+dOnXqEBAQQFhYGAMHDuT48eM5Xnvq1CkGDRpElSpV8Pf3p0aNGowdOxZrrVvbxMREunTpQrVq1QgMDCQoKIhWrVoxbdq0fN1/XrRo0YL69etTrFixAvVz8uRJPvzwQ0qWLOm2d9FTTz1FeHg4CxcudJlt8+uvv7Jo0SIiIiJ48sknXa4ZNmwYJUuW5MMPP+TUqVMFik1ERETkeuXtpM044EPgfiDJGFPey/2LiEg23bt3p2TJks5ZNQ5z587l0KFD9OnTJ8dr165dS9OmTZk2bRq33347zzzzDM2bN2fatGk0bdqUtWvXurQ/fPgwLVu2ZNKkSdSqVYsBAwbQqFEj+vbtyxtvvOFxjF27dtGkSRPGjBlD+fLl6du3Lw899BBbt27lz3/+MxMnTizQ/S9fvpwxY8ZQunRpunTpwsCBA2nevDmzZ8+mWbNm/PDDD5fV38CBAxkxYgRt2rShf//+hISE8OabbxIdHc3Zs2fd2qenp9OhQwc+/fRTOnbsyF//+lfOnDnD888/z/Dhw93aP/744+zatYuoqCgGDBjAww8/zK5du+jVqxdDhgzJ9+twNXz//fecOXOGVq1aUapUKZc6Hx8fOnToAMDSpX9MqHX8uX379vj4uH7kKFWqFK1ateL06dN8//33Vzh6ERERkWuTtzc6SLfWxhljtgMJwPfGmLuttT95eRwRESHrF9+HH36YxMRE9u7dS1hYGAATJ04kKCiIbt26MWrUKLfrrLU88sgjHD9+nGnTptGzZ09n3ccff8zDDz9Mr169SE5Odv6yPXjwYLZv386AAQNckjRPPfUULVq08BhfbGwsu3btYsaMGTz88MPO8qNHj3LXXXfRr18/7r33Xm6++eZ83X90dDQHDx50SyL88MMPtGrViueff54FCxbkub+VK1eyadMmwsPDARg9ejQPPvggn332Ga+++qpbYmXfvn00bNiQxYsXExgYCEB8fDy1atXijTfeYPDgwfj5+Tnbb968merVq7v0kZaWRseOHRkzZgx9+/alUqVKzrqkpCSSkpLyHD9Q4BO8cvLTT1n/lNeqVctjfc2aNQH43//+d1nXLFq0iP/973/ExMR4M1wRERGR68IV2Z3SWjvcGPMr8AGwyhjTxVqbdCXGEhG50fXp04cPPviASZMmMXToUHbt2sXixYv5+9//TokSJTxes2rVKrZt20aLFi1cEjYADz30EG+//TYrVqxgxYoVREVFkZ6ezvTp0ylVqpRbUqBp06b07NnTbZnUDz/8wLJly+jatatLwgagdOnSDBs2jPvuu49PP/3U414oeREaGuqxvGHDhkRHR7No0SLS09NdEie56d+/vzNhA1kzSF599VXmzJnDpEmTPM6GmTBhgjNh44ipc+fOTJ06lZ9++okGDRo46y5O2AAUL16cJ598km+//ZYlS5bwyCOPOOuSkpIYNmxYnmJ3uFJJm2PHjgEQHBzssd5RfvTo0QJdIyIiIiJ/uGJHilhrpxtj9gKfA18bY/52pcYSEbmR3XHHHdx6661MmjSJl156iffff5/MzMxcl0Zt2LAByJqp4kl0dDQrVqxg48aNREVFsW3bNk6fPs2dd97p8Rfwu+66yy1ps3r1aiDrF3dPiYTff/8dgK1bt+bpPnPy1Vdf8a9//Yt169Zx+PBht02ZDx8+TMWKFfPUV5s2bdzKqlWrRuXKldm5cydHjx6ldOnSzrrg4GBq1Kjhdk3lypUB3I603r17N2PHjmXJkiXs3r2bM2fOuNT/9ttvLs8TEhKuWBJGRERERIq+K3oOrLV2mTGmJfAVMBlwPwtUREQKrE+fPvTr148FCxY4j19u3Lhxju0dMyBySmY4yh0zIBztc1rGVKFCBbcyx1HOixcvZvHixTnGcvLkyRzrLmX8+PEMGDCAMmXK0K5dO6pUqUKJEiUwxjBnzhx++OEHzp07l+f+cru/Xbt2cezYMZekTfY/Z+c4Zv38+fPOsu3bt9OsWTOOHDnCnXfeSfv27QkODqZYsWLs3LmTKVOmXFasV5sjWef4WbiYo/zipNblXiMiIiIif7iiSRsAa+02Y8wdwDzgDsD9OA0RESmQXr168dxzz9G3b19+++03hg4dmmt7xy/TBw4c8Fi/f/9+l3aOrwcPHvTY3lM/jmvGjx9Pv3798nAXlycjI4OEhAQqVKjAhg0b3BJQjpk+l+PgwYPUrl3brdxxfzkt88mL119/nZSUFCZPnkxcXJxL3YwZMzyewlWU9rRxvC7Z96zJznHiWPb9a/JzjYiIiIj8wZtJm7bATk8V1trDxpi7gP5AoKc2IiKSf6VLl6Zr167OI5m7d++ea3vHLJycEgKOU38iIyMBqFOnDiVKlGDTpk0cO3bMLXnhqZ/mzZsD8N13312RpM3hw4c5evQoDzzwgFvC5uTJk84lYJdj2bJlREVFuZRt376dPXv2EBERUaAZIb/88gsAXbp08TiuJ0VpT5vmzZsTGBjIypUrOXHihMvmz5mZmc4j3Nu2bessd/x50aJFZGZmupwgdeLECVauXEmJEiWcPysiIiIi4sprR35ba5dZa3flUn/OWvuKtfbyPn2KiEiejBw5ks8//5yFCxe6naZ0sVatWlG7dm1WrFjB7NmzXepmz57Nd999R61atWjdujUAfn5+9OzZkxMnTrglBdatW8f06dPdxmjatCl33nknn332GZMmTfIYx3//+18OHTp0GXf5h9DQUEqUKMH69etdllilp6fTv39/Dh8+fNl9jh8/nl27/vinLDMzk0GDBpGZmcmjjz6arzgdIiIiAPcE18KFC92ObHdISEjAWntZD2/Ytm0b27Ztcym76aab6NWrF6dOnXL7GXj77bfZuXMnHTp0oFq1as7y6tWr0759e3bu3Mk777zjck18fDynTp2iV69elCxZ0itxi4iIiFxvrvjyKBERuTqqVKlClSpV8tTWGMOUKVNo164dDz30EJ07d6ZOnTr89NNPzJkzh1KlSjF16lSXmRGjRo1iyZIlvPnmm6xbt47WrVuzf/9+Pv74Y+6++27mzp3rNs5HH31EdHQ0jz32GBMmTOCOO+6gdOnS7N27lx9//JHNmzezevXqHE+Byo2Pjw/9+vVjzJgx3HrrrXTu3Jm0tDSWLl1Kamoqbdu2dc4YyqtWrVrRqFEjHnroIYKDg1m4cCE//PADTZo04dlnn73sGLN74oknmDx5Mg8++CBdu3bllltuYfPmzXz99dd069aNjz/+uED952TFihXOpJAjufXzzz+7LNFKTEx0uaZu3boAbkmgUaNGkZSUxOuvv86mTZto1qwZW7du5YsvviA0NNQtMQPw7rvv0rJlS/r168eSJUuoW7cu//nPf1i6dCm1atXi5Zdf9uLdioiIiFxf8p20McZ8S9b+NLHW2r0XnueFtdbG5HdcERHxjjvuuIO1a9cycuRIvvnmG+bNm0dISAjdu3dnyJAhbnu7hISEsHLlSgYPHsy8efNYt24dtWvX5r333iMiIsJj0iYsLIz169fz1ltv8emnnzJ9+nTOnz9PhQoVqFevHv/4xz+49dZb830PI0aMoHz58rz//vv83//9H8HBwbRr146RI0cSHx9/2f298cYbfP7550ycOJGdO3dSrlw5+vfvz/DhwwkICMh3nAC33XYbS5cu5aWXXuKrr74iIyODhg0b8tlnn1G6dOkrlrT55Zdf3PbLOXTokEvZxUmbnJQrV47Vq1czbNgw5syZw3fffUe5cuV49NFHGT58OGFhYW7XVK9enXXr1jF06FC+/vpr5s+fT8WKFenfvz/x8fGUKVOmQPcnIiIicj0z+Z1KbYzJJCtpU9da+78Lz/PCWmuL5WvQIsgYsz4yMjJy/fr1hR2KiBQhjmOsHTMWpGiLi4tjypQp7Nixw7mMSa59eX0fNmnShA0bNmyw1ja5GnFdij5biIiIXNu8+dki3zNtrLU+uT0XEREREREREZH8U6JFRERERERERKQIuipJG2NMGWOMjoYQEREREREREckjryVtjDExxphXjDFlspWFGmOWAYeBVGPM694aT0RExFsSExOx1mo/GxEREREpUrw50+YfwAPW2iPZyl4D7gR+BVKA/saYbl4cU0RERERERETkuuTNpE1DYIXjiTEmEOgKLLbW1gJqA3uAvl4cU0RERERERETkuuTNpE0osC/b8zuAACARwFp7AviSrOSNiIiIiIiIiIjkwptJm3NAYLbndwIWWJ6t7DhQ1otjioiIiIiIiIhcl7yZtNkBRGd73gX42Vr7W7ayymRtSiwiIiIiIiIiIrnwZtJmCnCrMeY/xpjvgFuBjy5qcxvwkxfHFBERERERERG5LnkzafMeMBNoCrQia/+asY5KY0wDshI5SV4cU0RERERERETkuuTrrY6stelAD2NM36yn9sRFTQ4AjYGd3hpTREREREREROR65bWkjYO19ngO5YfRfjYiIiIiIiIiInnizeVRIiIiUsQYY7jrrrsu65r09HTi4+OpWbMm/v7+GGOYM2cOO3fuxBhDXFzcFYlVRERERFwpaSMico3bsgUmTICRI7O+btlS2BFJbhISEjDGkJSUVNih5GjcuHEMHz6cW265hWeeeYb4+Hjq1KlTqDHlJ/kkIiIicq3z+vIoERG5OpYsgeHDYfly97qoKBg6FGJirn5ccu378ssvuemmm1i8eDHFixd3lu/cubPwghIRERG5AWmmjYjINeiDD6B9e88JG8gqb98eJk26unHJ9WHfvn2UK1fOJWEjIiIiIlefkjYiIteYJUvgb3+DzMzc22VmQp8+We2LgjVr1vDQQw9RqVIl/P39qVixIu3bt+eTTz5xaffJJ58QFRVFcHAwgYGB3HrrrYwePZpz58659RkREUFERASnTp1i0KBBVKlSBX9/f2rUqMHYsWOx1jrbfv/99xhjuP/++3OMsW7duvj7+5OamupSvnDhQu6++25CQkLw9/enevXqDBo0iKNHj+YY0/Hjx3n66aeJiIjAz8+PhIQEIiIiGDZsGABt27bFGON8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t5k6dSrp6elUr16dkSNH8s9//tOrS2ViY2OdR2J7Whrl8Nxzz9GqVSsmTJjAihUr+OKLLwgODqZSpUr87W9/o0ePHpc1bt26dZkyZQqvvfYa7777rnN2jCNpExQUxLJly/j3v//NRx99xKeffsrZs2e5+eabqVmzJm+88Qbt2rVz9meMYdasWYwZM4bExETefvttKlasyKOPPsrQoUNdjgG/2saPH48xhiVLljB//nwyMzOJj48nKioKHx8f5s+fzzvvvMPMmTP5/PPPOX36NGXLluXuu++mX79+tG/fvtBiFxERESkKjLXWOx0ZkwkkWGuH59LmRWC4tbaYVwYtAowx6yMjIyPXr19f2KGISBHiOJK5bt26V3ysLYe2sGTHEo6fO06QfxAxVWMKdQ8bkaIir+/DJk2asGHDhg3W2iZXI65L0WcLERGRa5s3P1tc7eVRpYC0qzymiMh1rX5ofSVpRERERESuQwVK2hhjqlxUVNpDGUAxoArQBdhekDFFRERERERERG4EBZ1psxPIvr6q/4VHTgzwdAHHFBERERERERG57hU0aTOVrKSNAR4BfgQ2eWh3HkgBllhrFxVwTBERERERERGR616BkjbW2jjHn40xjwCf57YRsYiIiIiIiIiI5I3XNiK21vp4qy8RERERERERkRudEi0iIiIiIiIiIkWQV4/8NsaUBXoDzYAyZJ0adTFrrY3x5rgiIiIiIiIiItcbryVtjDF1gCSgPFkbE+fE5lInIiIiIiIiIiJ4d3nUa0AoMBaoBvhZa308PDzNvhERERERERERkWy8uTzqTuAra+1gL/YpIiIiIiIiInJD8uZMGwMke7E/EREREREREZEbljeTNuuB2l7sT0RERERERETkhuXNpM1w4G5jzF1e7FNERG5AixYtomXLlpQuXRpjDPfdd5+zbt26dbRr146QkBCMMTRq1AiAuLg4jDHs3LkzX2Pu3LkTYwxxcXEFij0pKQljDAkJCZd13YEDB4iNjSUsLIxixYphjOHo0aMkJiZijCExMbFAcYmIiIjItcebe9pUBr4AFhljZpA18+aop4bW2qleHFdERK4jO3fupHPnzpQuXZrevXsTFBREnTp1ADh+/Dh/+ctfOHv2LL169SIkJIQKFSoUcsTeERcXx6JFi+jevTs1atTAGENAQEChxZOUlETbtm2Jj4+/7ASU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yfYkSW3T4sWLGTp0KD169CCEwLnnnltx7rnnnuO0006jZ8+ehBAYNGgQAGPGjCGEwJo1axrV5po1awghMGbMmCb1fcmSJYQQmDp1ar3vmTp1KiEElixZ0qS2JUmS1LYkuTyqQoxxJ/BiczxbktS2rVmzhhEjRtCjRw8uueQSMjMzOfroowHYsmULZ511Ftu3b+eiiy6iZ8+e9OrVK8U9Th9Llixh+PDhTJkypcbQaMeOHcycOZN58+ZRUlLC9u3b6du3L6eddhpXXXUVWVlZLdtpSZIk1ahZQhtJUssK1wUA4pSY4p403Z///Ge2b9/OzTffzKhRoyqde+aZZ9iwYQM/+tGPmDixcom0G264gauvvpo+ffo0qt0+ffrw0ksv0b1790b3vbG+/e1vM3LkSA477LBmbWfnzp3k5eWxbNkyjj76aL761a/SuXNnnn32WX7xi1/w61//mieffJJjjz22WfshSZKUDkLZEJqYxkPoRoc2IYT/B0RgdIxx3a6v6yPGGPMa264kqW178803ATjkkEMadK5379707t270e3utddeFTN6WlrPnj3p2bNns7fzwAMPsGzZMvLy8li8eDEZGf9eJT1lyhQKCgq46aabmD17drP3RZIkSXVrSk2bYbs+9tnj6/p8SJLamd/97nfk5OTQvXt3unTpwnHHHccNN9zAjh07gH/XgpkyZQoAw4cPJ4RACIG5c+cSQmD06NEAfP3rX690DmqvafPMM8/wla98hT59+tC5c2d69+5Nfn4+v/vd7yquqammzcsvv8zVV1/Npz/9aQ488EA6d+5MVlYW48ePZ926dYm8NzXVtAkhMGzYMN555x3Gjx9P79696dy5M9nZ2cyZM6fStWPGjGH48OEAXHfddRXvz+7PLSkpAeCss86qFNgAjBgxAoB//etfibwmSZIkNV2jZ9rEGDNq+1qSpHITJ07khhtuoGfPnowaNYp9992XhQsXMnHiRBYtWsTixYvp168fU6ZMYcmSJSxdupTRo0fTr18/AAYNGsSUKVNYuXIlDz74ICNGjKgoQFz+uSYzZszg0ksvpUOHDpxzzjkcccQRbNiwgeeee4477riDCy+8sNb777//fu666y6GDx/O0KFD6dSpE8XFxcycOZOHHnqI5557rtFLsupj06ZNnHTSSXTq1IkLLriAHTt2cN9993HJJZeQkZFREWSVF2ueN28eubm5DBs2rOIZ5e9jdnY2AAsXLuTyyy+vFNw8/PDDAHzxi19sttciSZKULoqL//3Pt90GeXmwa6iUVqxpI0lqVk899RQ33HADffv25ZlnnqkoHHzDDTfwn//5nzz88MPcdNNNTJw4kalTpzJ16lSWLl3KmDFjKgUPgwYNYu7cuTz44IOce+659drladWqVXzrW98iMzOTxx9/vCK0KFefmTIXXXQR3/nOd+jcuXOl44sXL+bMM8/k+uuv584776z7jWikF154gbFjx/KrX/2KDh06AHDFFVdw/PHHc+ONN1YKbXr06MG8efMYNmxYtYWIzzrrLM477zzuv/9+jjvuOL74xS/SqVMnli9fzhNPPMH//M//8N///d/N9lokSZJSrbAQCgqgqOjfxy6/vOxzTg5MnlwW4KSLFgltQgj7AR/FGLe1RHuS1JaVFx2u77lUFycur49y7bXXVtrpqWPHjtx888386U9/YubMmVUKCyfhzjvvZOfOnUyaNKlKYANw6KGH1vmMmmbR5Ofnk52dzaJFi5rcz9rss88+/OxnP6sIbACOPfZYTjrpJIqKinj//ffZd9996/WsEAK///3vue6667j++utZtWpVxbm8vDxGjRpFx47+PUeSJLU9oeYhdIWiIiifdJwuxYkTG5mFEPKA04EbYozv7Tp2EHAfcDKwM4Rwe4zxyqTalCSlvxUrVgBw6qmnVjl35JFHcuihh7J69Wo2b96c+M5NTz/9NABnnnlmo58RY+S3v/0tc+fO5YUXXuC9997jk08+qTjfqVOnOp+xYMECVq5cWenYoEGDKpY01eaII44gMzOzyvG+ffsC8N5779U7tNm+fTsXX3wxCxcu5Pbbb2fEiBHss88+LFu2jMsuu4ycnBzuu+++ivo2kiRJ7VVhYXrMuEnyz2n/AwyMMX5/t2M3AacArwL7ApeHEJ6OMf6uugdIkupW3cyZdN7ye/PmzQA17uzUu3dvXnvtNTZt2pR4aLNp0yag5tky9XHllVdyyy230Lt3b04//XT69OlDly5dAJg7dy5r166t8xkLFixg3rx5lY6NHj26XqFNjx49qj1ePiNm9wCpLj/5yU+47777uPXWW/nmN79ZcfzMM8/k97//PYMGDeLyyy83tJEkSW1OTk7lJVF1mTat7YU2JwBLy78IIXQBLgAejTGeHkLoBvwNmAAY2khSO1EexKxfv57DDz+8yvm33nqr0nVJKg883njjjUZt571hwwZuu+02Bg4cyJNPPkm3bt0qnb/77rvr9Zy5c+dW7HKVSuXFhst3mdrdCSecwH777cfatWt59913OeCAA1q6e5IkSc2iuLhhgQ3A0qVl96W6OHGSOz4dBLy529efA/YG5gLEGLcCDwNHJdimJCnNDR48GKDKdtYAr776KuvWraN///41zihpis9//vNA2W5JjVFSUkJpaSn5+flVApt169ZVbKGdLsrr3tQ0+6Z8e/XqtvXesWMHW7duBeq35EuSJKm1KCxs2fuSlGRoswPostvXpwAR2D3P2gLsn2CbkqQ0d8kllwBw/fXXVwoLPvnkE7773e9SWlrK2LFjm6XtSy+9lI4dOzJt2rRKRXfL1bV7VPlW2U888USlIOT9999n3Lhx7Ny5M9H+NlX57JjXXnut2vOnnHIKAD/+8Y8rApxyU6dOZefOnXzmM5+pElBJkiS1Zlu2tOx9SUpyedRqYPcqk+cDr8QY39jtWF/gnQTblCSluaFDh/L973+fn/70pwwcOJALLriArl27snDhQl588UVOPvlkvve97zVL28ceeyx33HEHEyZMYPDgwYwYMYIjjjiCd999l2effZbMzEwee+yxGu/v1asXI0eO5J577mHQoEHk5+ezefNmHn30Ufbee28GDRpUpcBwKh111FH06dOHe+65h7322ousrCxCCFx00UVkZWVxzTXX8NBDD1FYWMjRRx/NGWecQZcuXVi2bBnPPPMMXbp04dZbb031y5AkSUpUNXs6NOt9SUoytJkH3BJC+AvwEXAccN0e1xwP/CPBNiVJpGcB4t3deOONDB48mF/+8pf8+te/5uOPP+bwww/n+uuv56qrrmrW5Tjjxo1j4MCB3HTTTSxZsoQFCxbQs2dPjj/+eL7xjW/Uef+sWbMYMGAA9957L7fffjsHHngg55xzDgUFBZx//vnN1u/G6NChAw888ABXX3019913H1u3biXGyMknn0xWVhZ9+vRhxYoV3HjjjTzyyCPMmTOH0tJSevfuzZgxY/jBD37QqNo/kiRJ6ayxBYXToRBxiAltPh5C2Iuy4OYrQAAeAi6MMe7YdX4g8Fdgcozx+kQaTQMhhOVDhgwZsnz58lR3RVIaeemllwA45phjUtwTqf2q78/hiSee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48c3obeSpFRzXOG4ojZJjiv69OnDt771rUqBDUCnTp2YOHEiUFbbqL1zpo0ktXJf/epXufLKK5k5cybnnntuxfE//vGPbNiwgRtvvJFXX3212nufffZZvvjFL7J161bOOeccjj32WP7+978zf/58HnzwQf785z/zmc98puL6d955h6FDh1JSUsLJJ5/MySefzFtvvcWECRPIz8+vto21a9cybNgw1qxZwymnnMIZZ5zBtm3bePjhhznjjDP41a9+xbhx4xr9+ouKivjJT37C8OHDOf/889l333155ZVX+P3vf88f//hHli1bxgknnFDv533nO9+hqKiICy+8kBEjRrBo0SJuueUWHn/8cZ544gn23nvvStd//PHHnH766bz55puceeaZdOzYkQULFnD11Vezffv2KsuJLr30UrKzs8nJyaF37968++67/OlPf+Kiiy7iH//4B9OmTWv0e1Gdp59+mg8//JD8/Hy6detW6VxGRgann34606dP57HHHqvXVObq/PGPf2T9+vXk5ORw9NFHV3vNjh07mD9/Pq+99hpdu3bl+OOPJycnhw4dOjSqTUlS83Bc4biiNi0xrgDYa6+9AKrM9irXnsYVhjaS1Mp169aNkSNHMnfuXNatW8ehhx4KwIwZM8jMzOTCCy+sdl16jJGLL76YLVu2MH/+fP7rv/6r4ty9997LyJEjueiii1i1ahUZGWUTMydOnEhJSQlXXHEFP//5zyuu//a3v80XvvCFavs3evRo1q5dy913383IkSMrjm/atIlhw4Zx2WWXcc4553DwwQc36vWfeuqpvP3221UGDi+88AInnXQSV199NQsXLqz385YtW8bKlSvJysoC4IYbbuDLX/4y999/P//7v//LpEmTKl3/5ptvcsIJJ/Doo4/SpUsXAKZMmcKRRx7Jz3/+cyZOnFgx8AB48cUXOfzwwys946OPPuLMM8/kJz/5CRMmTKBPnz4V55YsWdLgvzLt/pevf/zjHwAceeSR1V57xBFHAPDyyy83qI3dTZ8+HYBvfvObNV6zfv16LrrookrH+vfvz5w5c8jNzW1025KkZDmucFyxp5YeVwDMnj0bgDPOOKPa8+1qXBFj9KMJH8DyIUOGREna3apVq+KqVauatQ0g9unTJ8YY49NPPx2BeN1118UYY1yzZk3MyMiIl156aYwxxmuuuSYCcc6cORX3P/HEExGIX/jCF6p9/sknnxyBuHTp0hhjjB999FHcZ599Yrdu3eKmTZuqXD969OgIxClTplQcW7lyZQTiBRdcUG0bCxYsiEC8/fbbK47NmTOnSl8b6+yzz46dO3eOH330UcWx1atXRyCOHj262v4XFBRUec4///nPmJGREfv161fpeFZWVgTiK6+8UuWeiy++OALxb3/7W736+oc//CECcd68eZWOT5kyJQIN+tjdj370owjEa665ptp2p0+fHoE4fvz4evVzT6tXr44hhHjAAQfE7du3V3vN1KlTY2FhYVy/fn3ctm1b/Nvf/ha/+c1vxhBC7NKlS1y5cmWj2q5LfX8OhwwZEoHlMQ3GFdGxhaQaNPfYwnFF3RxXNP+4IsYYH3zwwRhCiIceemjcuHFjlfOpGlfEmJqxhTNtJKkN+NznPsdxxx3H7Nmzufbaa5k5cyalpaW1Tg9esWIFUPYXpeqceuqpPPHEEzz//PPk5OTw97//nQ8++IBTTjmF7t27V7l+2LBhVdagP/XUUwBs3ry52mJx//rXvwB46aWX6vU6a/LII49w11138dxzz/HOO+9U2dHinXfeoXfv3vV6VnV/nRkwYAB9+/ZlzZo1bNq0iR49elSc6969O5/61Keq3NO3b18A3nvvvUrHX3vtNW688UYKCwt57bXX+PDDDyudf+ONNyp9PXXq1LQutDdjxgxijIwePbraAsRAlancAwcO5K677mLffffl5ptvZurUqRa0lKQ04rjCcUWqPPnkk4waNYquXbvyhz/8gf3226/KNe1tXGFoI0ltxLhx47jssstYuHAhc+bM4cQTT2Tw4ME1Xr9582aAGgcd5cc3bdpU6fqaphv36tWryrF3330XgEcffZRHH320xr68//77NZ6ry6233soVV1zBfvvtx2mnncZhhx3GPvvsQwiBBQsW8MILL7Bjx456P6+217d27Vo2b95caXC1+z/vrnwN9ieffFJxrKSkhM9+9rO89957nHLKKeTn59O9e3c6dOjAmjVrmDdvXoP6Wh/lA+Hyf397Kj9e0+uozc6dO5kzZw7QuALEEyZM4Oabb6aoqKjB90qSmpfjCscV1WnOccVTTz3FmWeeSUZGBgsXLuSzn/1sg+5vq+MKQxtJaiMuuugifvCDHzBhwgTeeOMNJk+eXOv15f/TXb9+fbXn33rrrUrXlX9+++23q72+uueU33Prrbdy2WWX1eNVNMzOnTuZOnUqvXr1YsWKFVUGiuV/kWuIt99+m6OOOqrK8fLXV91fA+vrZz/7Ge+++y5z5sxhzJgxlc7dfffd1e6W0dS15+Wvpaa15eW7edS0Nr02Dz30EG+99Ra5ubnVvmd1OfDAA4GyXTIkSenFcYXjinItMa54/PHHOeuss8jIyGDRokV8/vOfb9D90HbHFYY2ktRG9OjRgwsuuKBiG8avfvWrtV5f/teymv7H/dhjjwEwZMgQAI4++mj22WcfVq5cyebNm6sMMqp7Tvn/cB9//PFmGVy98847bNq0ifPOO6/KwOr999+vmKrdEEuXLiUnJ6fSsZKSEl5//XX69evXqL8clSvfbeP888+vtt3/z96dx1VdJf4ffx0E0VTckJFcgMxyK5GsTA1DEsey0FwabQyybLRfU1pZZhmopNk327cZLZcyTawwK8IlUHMZFXVKsabFjdQsF1ILBTm/P5Cb1wuKcIELvp+Px30wnHM+n3M+l+74fpz7+ZxTmLS0NMaPH39e/Zwerjp16kTNmjVZtWoVR44ccVpYMS8vz7E9akRExHn1AX8uQFzSbb7Xrl0LUKrdJUREpGwoVyhXFCjrXPHFF19wyy234OvrS0pKitMOY+ejquYKr4oegIiIuE9CQgIfffQRKSkpLrsenKlLly5cfvnlfPnllyxYsMCpbsGCBaxcuZLLLruMrl27AvlbL95xxx0cOXLE5VnoDRs2MGfOHJc+OnbsyPXXX8+HH37o2AXgTF9//TX79+8/j6v8U0BAABdddBHp6elOt0Ln5OTw4IMP8uuvv573OV966SV27tzp+D0vL4/Ro0eTl5fHXXfdVaJxFggODgZcg2hKSgrTp08v9Jj4+PiSLGTrULt2bYYMGcKxY8dc/m6vvvoqO3bsoGfPni4B54cffuCbb74hJyen0HHt3LmTxYsX07Bhw0LDYoFt27YV+o3Xjh07uP/++wH4+9//XuTxIiJScZQr8ilX/MnduWLx4sX07t2bmjVrsmzZsnNO2FyIuUJ32oiIVCHNmzenefPmxWprjGHWrFn06NGD22+/nejoaFq1asW3335LUlISderUYfbs2Y5tOQEmTZrEsmXLePHFF9mwYQNdu3Zl7969vP/++9x00018/PHHLv289957dO/enbvvvpuXX36Za6+9lnr16pGZmclXX33Fli1bWLNmDQEBAed9vV5eXjzwwAM888wzXHHFFURHR3PixAlSU1M5ePAgERERjm/2iqtLly6EhoZy++23U7duXVJSUvjvf//LVVddxaOPPnreYzzdfffdx4wZMxgwYAD9+/fn4osvZsuWLXz++ecMHDiQ999/v1TnL8qkSZNIS0vj+eefZ/PmzVxzzTVs27aNhQsXEhAQwGuvveZyTGRkJDt37mT79u2OUHi6gkUpz7YAMeRv8zp16lTCw8MJCgqiTp06/PDDD3z66adkZ2dz00038cgjj7jzckVExE2UK5QrCuOuXPHtt98SHR3tyAMLFy5k4cKFLseePjl0IeYKTdqIiFzArr32WtavX09CQgJLly5l0aJF+Pv7M2jQIMaNG+fyDLa/vz+rVq1i7NixLFq0iA0bNnD55ZfzxhtvEBwcXGi4atq0Kenp6bzyyit88MEHzJkzh5MnT9K4cWPatGnDP//5T6644ooSX8PEiRNp1KgR06dP51//+hd169alR48eJCQkuOwuUBwvvPACH330EdOmTWPHjh00bNiQBx98kAkTJlCjRo0SjxPgyiuvJDU1lSeffJJPP/2U3Nxc2rdvz4cffki9evXKLFw1bNiQNWvWMH78eJKSkli5ciUNGzbkrrvuYsKECTRt2vS8znfy5EnHN5znejQqIiKCb7/9lk2bNrFq1SqOHTtGvXr16Nq1K0OGDGHIkCEYY0p8bSIi4jmUK1wpVxRt7969ZGdnA/DBBx/wwQcfFNru9EmbCzFXmDNvd5LzY4xJDwsLC0tPT6/ooYiIBynYarJ169YVPBIprtjYWGbNmlXknSVS+RT3c3jVVVexcePGjdbaq8pjXOeibCEihVG2qFyUK6qmisgWWtNGRERERERERMQDadJGRERERERERMQDadJGRERERERERMQDadJGREQEmDlzJtZaPXcuIiIipaZcIe6iSRsREREREREREQ+kSRsREREREREREQ+kH5JzXAAAIABJREFUSRsREREREREREQ+kSRsREREREREREQ+kSRsREREREREREQ+kSRsREREREREREQ+kSRsREREREREREQ+kSRsREREREREREQ+kSRsREREREREREQ9UqSZtjDENjTH3GGM+MsZ8b4z5wxiTZYz50hhztzHG64z2wcYYe5bXvIq6FhER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tpC09uxbYFpr7cSJEy1gAbtgwYKzjn3lypV2wIABNjAw0Pr4+Fh/f3/bvn17O2rUKLt+/fpij6nAO++8Y9u3b29r1KjhGMPpjh8/bl955RV73XXXWT8/P1u9enXbrFkz2717d/vCCy/YX3/91aX9+PHjbUhIiK1evboNCgqyY8eOtdnZ2WW+NWeBzMxMO3z4cNu8eXPr4+NjGzZsaKOjo+26desK7WPGjBm2ffv29qKLLrINGza0ffr0sV999VWRf7eff/7ZDho0yAYEBFgvLy8L2Li4uLNeh6dv+V3US9lCRAqjbOFMueJPyhXlkyusrZhsYWx+OJASMsakh4WFhaWnp1f0UETEgxRsnXjms7VlYetWWLYsf+tNP7/8b78qcg0bEU9R3M/hVVddxcaNGzfaIrbgLm/KFiJSGGULkYpXEdmisj0eJSIiZ2jbVkFKRERE3EfZQsRzVKqFiEVERERERERELhSatBERERERERER8UCatBERERERERER8UCatBERERERERER8UCatBERERERERER8UCatBERERERERER8UCatBERERERERER8UCatBERERERERER8UCatBERERERERER8UCatBERERERERER8UCatBERERERERER8UCatBERERERERER8UCatBEREanCjDHccMMNxW6flpaGMYb4+PgyG5OIiIhUTsoV5U+TNiIildzW/Vt5+T8vk7AigZf/8zJb92+t6CHJWcTHx2OMIS0traKHUuaKE+w+/fRToqKiaNq0KTVr1uSSSy5hwIABrFmzpnwGKSIiLpQtKg/lCmdVMVd4V/QARESkZJb9uIwJKyawYucKl7rwoHCeCn+KyEsiK2BkUpldc801bNu2DX9//zLv67HHHuPZZ5+lYcOG9OnTB39/f77//nsWLlzIBx98wOzZs/n73/9e5uMQEZF8yhbibsoVpadJGxGRSuitjW9x7yf3kmfzCq1fsXMFUe9GMe2WaQztMLScRyeV2UUXXUSrVq3KvJ99+/bx3HPP8Ze//IWvvvqKgIAAR11qairdu3fnqaeeqpThSkSkMlK2kLKgXFF6ejxKRKSSWfbjsrOGqgJ5No9hi4ax7Mdl5TSys1u3bh233347TZo0wdfXl8DAQKKiopg/f75Tu/nz5xMeHk7dunWpWbMmV1xxBZMnT+b48eMu5wwODiY4OJhj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\\n\",\n      \"text/plain\": [\n       \"<Figure size 576x576 with 4 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"image/png\": {\n       \"height\": 566,\n       \"width\": 566\n      },\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"visualize(df, 'size_peak', 'Max resident set size [MB]')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"'2.0.0'\"\n      ]\n     },\n     \"execution_count\": 1,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"import tensorflow as tf\\n\",\n    \"tf.__version__\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"'2.2.4-tf'\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"from tensorflow.python import keras\\n\",\n    \"keras.__version__\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.7.3\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}"
  },
  {
    "path": "Examples/converter_examples/Convert_Benchmark/README.md",
    "content": "# Quantization Benchmarking on Android Phone\n\nIn this example, we use Converter to quantize and convert models into TensorFlow Lite format. \n\nWe ran the experiment for image classification task using different configurations of MobileNet and obtained benchmarking results by deploying models on the LG G6 smartphone. The results reaffirm the benefits of model quantization for edge deployments in terms of inference speed and peak memory usage. \n\nThe experiments are presented in the [Benchmark](Benchmark.ipynb) file along with figures showing model performance. To obtain the data pickle file, either run `Benchmark.ipynb` or `script_mobilenet.py`.\n\nThe script first downloads different MobileNets in the Protobuf format and converts them to TensorFlow Lite using different quantization configurations. The script also downloads the official TensorFlow Lite versions (int8 and float32) of MobileNet to compare the performance of the converted models.\n\nTo set up the mobile benchmarking pipeline please follow these steps.\n\n### Setup\n\n1. Android Studio / [adb](https://developer.android.com/studio/command-line/adb)\n\n\t```bash\n\texport PATH=$PATH:~/Library/Android/sdk/platform-tools/\n\t```\n\t\n2. Compile model_benchmark\n\n\tSee [step 1](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/tools/benchmark#on-android):\n\tNeeds Ubuntu system / Android Studio.\n\t\n\t```bash\n\tgit clone git@github.com:tensorflow/tensorflow.git\n\tcd tensorflow\n\tbazel clean --expunge\n\tbazel build -c opt --config=android_arm --cxxopt='--std=c++11' tensorflow/lite/tools/benchmark:benchmark_model\n\t```\n\n3. Prepare data on the phone\n\n\tSee [step 2-4](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/tools/benchmark#on-android)\n\t\n\t```\n\tAndroid/Sdk/platform-tools/adb push bazel-bin/tensorflow/lite/tools/benchmark/benchmark_model /data/local/tmp\n\t```\n\t\n\tIf the device is not connected, follow instructions [here](https://askubuntu.com/questions/863587/adb-device-list-doesnt-show-phone)\n\t\n\tCopy model\n\t\n\t```bash\n\tadb push model.tflite /data/local/tmp\n\t```\n\t\n4. Measure performance\n\n\tSee [here](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/tools/benchmark#parameters) for more control arguments.\n\t\n\t```bash\n\tadb shell /data/local/tmp/benchmark_model \\\n       --num_threads=4 \\\n       --graph=/data/local/tmp/model.tflite \\\n\t   --warmup_runs=1 \\\n\t   --num_runs=50\n\t```\n\n"
  },
  {
    "path": "Examples/converter_examples/Convert_Benchmark/repdata.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nCreate a synthetic tf.dataset for inference speed measure\n\"\"\"\nimport numpy as np\nfrom absl import flags\nimport sys\n\ndef parse_arg():\n    try:\n        idx = sys.argv.index(\"--custom_data\")\n        custom_data = str(sys.argv[idx+1:][0])\n    except ValueError:\n        custom_data = \"1,224,224,3,1000\"\n    return custom_data\n\ndef get_dataset():\n    custom_data = parse_arg()\n    print(custom_data)\n    batch_size, img_len, img_wid, channel_size, label_size = [int(x) for x in custom_data.split(\",\")] \n\n    labels = np.random.randint(0, label_size, size=batch_size).astype(np.float)\n    imgs = np.random.random(size=(batch_size, img_len, img_wid, channel_size))\n    \n    class Dataset:\n        def __init__(self, data):\n            self.data = data\n        \n        def numpy(self):\n            return self.data[np.newaxis,:]\n\n    for i in range(batch_size):\n        yield Dataset(imgs[i]), Dataset(labels[i])\n"
  },
  {
    "path": "Examples/converter_examples/Convert_Benchmark/script_mobilenet.py",
    "content": "\"\"\"\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\"\"\" \nimport keras\nimport subprocess\nfrom os import path\nimport pandas as pd\nimport json\n\n# see models here - https://www.tensorflow.org/lite/guide/hosted_models\nSTORAGE_LINK = \"https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_2018_08_02/\"\nADB_LOCAL = path.expanduser(\"~/Library/Android/sdk/platform-tools/adb\")  # for MacOS\n\nALPHA = [\"1.0\",\"0.75\",\"0.5\",\"0.25\"]\nSIZE = [\"224\",\"192\",\"160\",\"128\"]\n\nREP_DATA = \"repdata.py\"\n\nOP_TYPE = [\"float\", \"float16\", \"uint8\", \"int8\"]\n\nKEYS = [[a,b] for a in ALPHA for b in SIZE]\nMOBILENET = \"mobilenet_v1\"\ndf = pd.DataFrame({\"model\":[], \"alpha\":[], \"size\":[], \"op\": [], \"size_init\":[],\n                   \"size_peak\":[], \"warmup\":[], \"init\":[], \"inference\":[]})\n\ndef preprocess(name):\n    try:\n        process = subprocess.Popen(\" wget \" + STORAGE_LINK + name + \".tgz \", shell=True).wait()\n    except:\n        print(\"Could not retrieve\")\n        return 0\n\n    try:\n        process = subprocess.Popen(\" tar -xzf \" + name + \".tgz\", shell=True).wait()\n    except:\n        print(\"Could not unpack\")\n        return 0\n\n    return 1\n\ndef push_to_device(name):\n    try:\n        process = subprocess.Popen(ADB_LOCAL + \" push \" + name + \".tflite /data/local/tmp/\",\n                                   shell=True, stdout=subprocess.DEVNULL).wait()\n    except:\n        print(\"Could not push\")\n        return 0\n    return 1\n\n\ndef run_benchmark(name):\n    command_template = ADB_LOCAL + \" shell /data/local/tmp/benchmark_model --graph=/data/local/tmp/\"\n    command = command_template + name + \".tflite --num_threads=4\"\n    process2 = subprocess.Popen(command.split(), stdout=subprocess.PIPE)\n    output, error = process2.communicate()\n    output = output.decode('utf-8')\n    output = output.split(\"\\n\")\n    infer, memo = \"\",\"\"\n    for p in output:\n        if \"Inference timings\" in p:\n            infer = p\n        if \"Peak memory footprint\" in p:\n            memo = p\n    #output = output.split(\"\\n\")\n    #infer = output\n    return (infer, memo)\n\ndef compile_results(infer, memo, df, of, op, alpha, size):\n    data = []\n    try:\n        idx = memo.find(\"init=\")\n        max_size = float(memo[idx+5:idx + memo[idx:].find(\" \")-1])\n    except:\n        max_size = float('nan')\n    idx = memo.find(\"overall=\")\n    try:\n        malloc_size = float(memo[idx+8:])\n    except:\n        malloc_size = float('nan')\n    idx = infer.find(\"Warmup (avg):\")\n    try:\n        warmup = float(infer[idx+14:idx + infer[idx:].find(\",\")])\n    except:\n        warmup = float('nan')\n    idx = infer.find(\"Init:\")\n    try:\n        init = float(infer[idx+6:idx + infer[idx:].find(\",\")])\n    except:\n        init = float('nan')\n    idx = infer.find(\"Inference (avg):\")\n    try:\n        no_stat = float(infer[idx+17:])\n    except:\n        no_stat = float('nan')\n    df = df.append(pd.Series([of, alpha, size, op, max_size, malloc_size,\n                              warmup, init, no_stat], index=df.columns), ignore_index=True)\n    return df\n\ndef convert(name, size, op):\n    json_dic = {}\n    json_dic[\"convert_from\"] = name+\"_frozen.pb\"\n    json_dic[\"convert_to\"] = name+\"_\"+op+\"_converted.tflite\"\n    json_dic[\"input_nodes\"] = \"input\"\n    json_dic[\"output_nodes\"] = \"MobilenetV1/Predictions/Reshape_1:0\"\n    command = \"\"\n    if op == 'float':\n        command = json.dumps([json_dic])\n    if op == 'float16':\n        quant_dic = {}\n        quant_dic[\"type\"]=\"float16\"\n        quant_dic[\"opsset\"] = \"tf\"\n        json_dic[\"quantization\"] = quant_dic\n        command = json.dumps([json_dic])\n    if op == 'int8':\n        quant_dic = {}\n        quant_dic[\"type\"]=\"int8\"\n        quant_dic[\"opsset\"] = \"int8\"\n        quant_dic[\"load\"] = REP_DATA + \" --custom_data '1,\" + size + \",\" + size + \",\" + \"3,1000' --undefok custom_data\"\n        json_dic[\"quantization\"] = quant_dic\n        command = json.dumps([json_dic])\n    if op == 'uint8':\n        quant_dic = {}\n        quant_dic[\"type\"]=\"uint8\"\n        quant_dic[\"opsset\"] = \"tf\"\n        quant_dic[\"load\"] = REP_DATA + \" --custom_data '1,\" + size + \",\" + size + \",\" + \"3,1000' --undefok custom_data\"\n        json_dic[\"quantization\"] = quant_dic\n        command = json.dumps([json_dic])\n    try:\n        process = subprocess.Popen(\"python3 -m aup.dlconvert -d \" + \"'\" + str(command)  + \"'\", shell=True).wait()\n    except:\n        print(\"Could not Convert= \" + str(command))\n        return 0\n    return 1\n    \nfor key in KEYS:\n\n    name = MOBILENET + \"_\" + key[0] + \"_\" + key[1]\n\n    print(\"Starting \" + str(name))\n\n    if(not preprocess(name)):\n        continue\n\n    if(not push_to_device(name)):\n        continue\n\n    infer,memo = run_benchmark(name)\n\n    df = compile_results(infer, memo, df, \"official\", \"float\", key[0], key[1])\n\n    new_name = name + \"_quant\"\n\n    print(\"Starting \" + str(new_name))\n\n    if(not preprocess(new_name)):\n        continue\n\n    if(not push_to_device(new_name)):\n        continue\n\n    infer,memo = run_benchmark(new_name)\n\n    df = compile_results(infer, memo , df, \"official\", \"int8\", key[0], key[1])\n    \n    print(\"Starting converted tflite benchmarking\")\n\n    for op in OP_TYPE:\n\n        converted = convert(name, key[1], op)\n\n        if not converted:\n            print(\"Failed \" + str(name) + \" \" + str(op))\n            continue\n\n        print(\"testing= \" + str(name) + \" \" + str(op))\n\n        new_name = name + \"_\" + op + \"_converted\"\n\n        if(not push_to_device(new_name)):\n            continue\n\n        infer,memo = run_benchmark(new_name)\n\n        df = compile_results(infer, memo, df, \"converted\", str(op), key[0], key[1])\n        \nprint(df.to_string())\ndf.to_pickle(\"./data_mobilenet.pkl\")\n"
  },
  {
    "path": "Examples/converter_examples/Convert_Profiler/.gitignore",
    "content": "mobilenet*\ninput_models\noutput_models\n*.tgz\nDockerfile_*\ndensenet*\nnasnet*\nsqueezenet*\n"
  },
  {
    "path": "Examples/converter_examples/Convert_Profiler/README.md",
    "content": "# Profiling TensorFlow Lite/ONNX model performance for CPU\nIn this example, we show how to use Converter to convert models into edge device-friendly formats (TensorFlow Lite and ONNX) and then profile their performance (i.e. runtime and memory usage) on CPU using Auptimizer's Profiler package. \n\nWe use standard image classification models in Protobuf format and convert them to TensorFlow or ONNX. Once we have models in a common format, we can benchmark their performance using Profiler with different hardware settings.\n\nBy pairing Auptimizer's Converter and Profiler capabilities, you can significantly reduce the effort needed to prepare an ML model for edge deployment. You can simply download models from various DL platforms and libraries, convert them to a common edge-friendly standard and estimate the script's runtime and memory usage for your target device constraints.\n\n\n## How to run this example\n- *Step 1*: Download a few protobuf models for testing \n  ``` \n  python download_test_models.py \n  ```\n  and create a new folder called `output\\_models`. \nThe `download_test_models.py` script should download the squeezenet, densenet, and nasnet-mobile models into `input_models` directory.\n\n- *Step 2*: Convert the models to TensorFlow Lite:\n\n  ``` \n  python -m aup.dlconvert -f convert_tflite.json\n  ```\n- *Step 3*: Profile the converted TensorFlow Lite models and the downloaded official TensorFlow Lite models released by TensorFlow for the same model architecture. Run the following to do profiling:\n  ```bash\n  python -m aup.profiler -e env_tflite.template -f model_names_tflite.txt\n  ```\n\n  This creates an output text file with the details of the model performance. The Docker settings can be edited using the `env_tflite.template` file and the test script can be edited using `test_perf_tflite.py`.\n  \nWe show output from running the example on MacOS. From `tflite_output.txt`, we see that the performances of the converted models are very close to those of the official TensorFlow Lite models, which validates that the conversion from Protobuf to TensorFlow Lite works correctly.\n\nYou can similarly convert the models to ONNX and profile the performances. The sample conversion configuration json file `convert_onnx.json` and the Profiling environment file `env_onnx.template` are provided.\n"
  },
  {
    "path": "Examples/converter_examples/Convert_Profiler/convert_onnx.json",
    "content": "[\n    {\n        \"convert_from\":\"input_models/densenet/densenet.pb\",\n        \"convert_to\":\"output_models/densenet_converted.onnx\",\n        \"input_nodes\":\"Placeholder:0\",\n        \"output_nodes\":\"softmax_tensor:0,ArgMax:0\"\n    },\n\n    {\n        \"convert_from\":\"input_models/squeezenet.pb\",\n        \"convert_to\":\"output_models/squeezenet_converted.onnx\",\n        \"input_nodes\":\"Placeholder:0\",\n        \"output_nodes\":\"softmax_tensor:0\"\n    },\n\n    {\n        \"convert_from\":\"input_models/nasnet_mobile.pb\",\n        \"convert_to\":\"output_models/nasnet_mobile_converted.onnx\",\n        \"input_nodes\":\"input:0\",\n        \"output_nodes\":\"final_layer/predictions:0\"\n    }\n]\n"
  },
  {
    "path": "Examples/converter_examples/Convert_Profiler/convert_tflite.json",
    "content": "[\n    {\n        \"convert_from\":\"input_models/squeezenet.pb\",\n        \"convert_to\":\"output_models/squeezenet_converted.tflite\",\n        \"input_nodes\":\"Placeholder:0\",\n        \"output_nodes\":\"softmax_tensor:0\"\n    },\n    \n    {\n        \"convert_from\":\"input_models/densenet/densenet.pb\",\n        \"convert_to\":\"output_models/densenet_converted.tflite\",\n        \"input_nodes\":\"Placeholder:0\",\n        \"output_nodes\":\"softmax_tensor:0,ArgMax:0\"\n    },\n\n    {\n        \"convert_from\":\"input_models/nasnet_mobile.pb\",\n        \"convert_to\":\"output_models/nasnet_mobile_converted.tflite\",\n        \"input_nodes\":\"input:0\",\n        \"output_nodes\":\"final_layer/predictions:0\"\n    }\n]\n"
  },
  {
    "path": "Examples/converter_examples/Convert_Profiler/download_test_models.py",
    "content": "#  Copyright (c) 2020 LG Electronics Inc.\n#  SPDX-License-Identifier: GPL-3.0-or-later\n\nimport os\nimport json\nimport argparse\nimport logging\nimport requests\nimport shutil\n\nall_urls = {\"densenet\": \"https://storage.googleapis.com/download.tensorflow.org/models/tflite/model_zoo/upload_20180427/densenet_2018_04_27.tgz\",\n      \"squeezenet\": \"https://storage.googleapis.com/download.tensorflow.org/models/tflite/model_zoo/upload_20180427/squeezenet_2018_04_27.tgz\",\n      \"nasnet_mobile\": \"https://storage.googleapis.com/download.tensorflow.org/models/tflite/model_zoo/upload_20180427/nasnet_mobile_2018_04_27.tgz\"}\nmodel_folder = \"input_models\"\n\ndef download_all_url(all_urls, model_folder):\n\n    for model, url in all_urls.items():\n        tarFilename = url.split('/')[-1]\n\n        # check if the tar file already exists on disk\n        # if not tarFilename[0].isdigit() and os.path.isfile(tarFilename):\n        if os.path.isfile(tarFilename):\n            print (\"File already exists, skipping \", url)\n            continue\n        print(\"Downloading \", url)\n        response = requests.get(url, stream=True)\n        if response.status_code == 200:\n            with open(tarFilename, 'wb') as f:\n                f.write(response.raw.read())\n        save_folder = model_folder\n        shutil.unpack_archive(tarFilename, save_folder)\n\n\n\nif __name__ == '__main__':\n    download_all_url(all_urls, model_folder)\n"
  },
  {
    "path": "Examples/converter_examples/Convert_Profiler/env_onnx.template",
    "content": "#  Copyright (c) 2020 LG Electronics Inc.\n#  SPDX-License-Identifier: GPL-3.0-or-later\n#User data Variables\nIMAGEREPO=tensorflow/tensorflow:1.15.0-py3\nAPTREQUIREMENTS=\"wget\"\nPRERUN=\"pip install onnxruntime\"\nDIR=./\nSCRIPT=test_perf_onnx.py\nCOMMAND=python\nSAMPLETIME=3\nOUTPUTFILE=onnx_output.txt\nDOCFILE=Dockerfile\nDOCKCPUS=\"4.0\"\nDOCKMEMORY=\"2.0g\"\n# Additional docker arguments could be passed as following:\n# To run Docker container with privilege capability change to 'true'\n# To use Volume instead of copying data with the current folder\n# use the format \"-v /path/in/source:/path/in/destination\" as string\n# DOCKER_ARGS=\"--privileged -v /data:/mnist_data\"\nDOCKER_ARGS="
  },
  {
    "path": "Examples/converter_examples/Convert_Profiler/env_tflite.template",
    "content": "#  Copyright (c) 2020 LG Electronics Inc.\n#  SPDX-License-Identifier: GPL-3.0-or-later\n#User data Variables\nIMAGEREPO=tensorflow/tensorflow:1.15.0-py3\nAPTREQUIREMENTS=\"wget\"\n# PIPREQUIREMENTS=\"ipython numpy\"\nPRERUN=\"wget https://dl.google.com/coral/python/tflite_runtime-1.14.0-cp36-cp36m-linux_x86_64.whl; pip install tflite_runtime-1.14.0-cp36-cp36m-linux_x86_64.whl\"\nDIR=./\nSCRIPT=test_perf_tflite.py\nCOMMAND=python\nSAMPLETIME=3\nOUTPUTFILE=tflite_output.txt\nDOCFILE=Dockerfile\nDOCKCPUS=\"4.0\"\nDOCKMEMORY=\"2.0g\"\n# Additional docker arguments could be passed as following:\n# To run Docker container with privilege capability change to 'true'\n# To use Volume instead of copying data with the current folder\n# use the format \"-v /path/in/source:/path/in/destination\" as string\n# DOCKER_ARGS=\"--privileged -v /data:/mnist_data\"\nDOCKER_ARGS="
  },
  {
    "path": "Examples/converter_examples/Convert_Profiler/model_names_tflite.txt",
    "content": "input_models/densenet/densenet.tflite\noutput_models/densenet_converted.tflite\ninput_models/squeezenet.tflite\noutput_models/squeezenet_converted.tflite\ninput_models/nasnet_mobile.tflite\noutput_models/nasnet_mobile_converted.tflite"
  },
  {
    "path": "Examples/converter_examples/Convert_Profiler/test_perf_onnx.py",
    "content": "#  Copyright (c) 2020 LG Electronics Inc.\n#  SPDX-License-Identifier: GPL-3.0-or-later\n\n# Compute the overall inference time for a given tflite model\n\nimport onnxruntime as rt\nimport numpy as np\nimport time\n\n\nWARMUP = 10\nITER = 600\nCONSTANT = 0.5\n\n\ndef compute(model_path):\n    now = time.monotonic()\n    sess = rt.InferenceSession(model_path)\n    input_det = sess.get_inputs()[0]\n    label_det = sess.get_outputs()[0]\n    input_name = input_det.name\n    input_shape = input_det.shape\n    \n    if 'N' in input_shape:\n        input_shape[input_shape.index('N')] = 1\n    input_shape[0] = 1\n    print(\"input_shape\", input_shape)    \n    t1 = time.monotonic() - now\n    now = time.monotonic()\n    \n    for i in range(WARMUP):\n        X_test = np.random.random(size=input_shape).astype(np.float32)\n        pred_onx = sess.run(None, {input_name: X_test})[0]\n    t2 = time.monotonic() - now\n    now = time.monotonic()\n    for i in range(ITER):\n        X_test = np.random.random(size=input_shape).astype(np.float32)\n        pred_onx = sess.run(None, {input_name: X_test})[0]\n    t3 = time.monotonic() - now    \n    return t1, t2/float(WARMUP), t3/float(ITER)\n\n\nif __name__ == \"__main__\":\n    import sys\n\n    if len(sys.argv) != 2:\n        print(\"test_perf_onnx.py <model_path>\")\n        \n    print(compute(sys.argv[1]))"
  },
  {
    "path": "Examples/converter_examples/Convert_Profiler/test_perf_tflite.py",
    "content": "#  Copyright (c) 2020 LG Electronics Inc.\n#  SPDX-License-Identifier: GPL-3.0-or-later\n\n# Compute the overall inference time for a given tflite model\nimport tensorflow as tf\nfrom tflite_runtime.interpreter import Interpreter\nimport tensorflow.random\nimport numpy as np\nimport time\nimport os\n\n\nWARMUP = 10\nITER = 300\nCONSTANT = 0.5\n\n\ndef compute(model_path):\n    now = time.monotonic()\n    intp = Interpreter(model_path)\n    x = intp.tensor(intp.get_input_details()[0]['index'])\n    iy = intp.get_output_details()[0]['index']\n    intp.allocate_tensors()\n    t1 = time.monotonic() - now\n    now = time.monotonic()\n    \n    for i in range(WARMUP):\n        #x().fill(CONSTANT)\n        x =np.random.rand()\n        intp.invoke()\n        y = intp.get_tensor(iy)\n    t2 = time.monotonic() - now\n    now = time.monotonic()\n    for i in range(ITER):\n        #x().fill(CONSTANT)\n        x =np.random.rand()\n        intp.invoke()\n        y = intp.get_tensor(iy)\n    t3 = time.monotonic() - now    \n    return t1, t2/float(WARMUP), t3/float(ITER)\n\n\nif __name__ == \"__main__\":\n    import sys\n\n    if len(sys.argv) != 2:\n        print(\"test_perf_tflite.py <model_path>\")\n        \n    print(compute(sys.argv[1]))"
  },
  {
    "path": "Examples/converter_examples/Convert_Profiler/tflite_output.txt",
    "content": "Usage stats for Experiment ran on : 2020-10-08 10:26:18.302189\nNAME                     AVG CPU %      PEAK CPU  AVG MEM USAGE / LIMIT    PEAK MEM    NET I/O           BLOCK I/O        TOTAL TIME (ms)\n-----------------------  -----------  ----------  -----------------------  ----------  ----------------  -------------  -----------------\ndensenet                 256.601%         260.97  162.9 MiB / 1.9 GiB      163.0 MiB   850.0 B / 42.0 B  0.0 B / 0.0 B              27640\ndensenet_converted       254.545%         259.71  162.9 MiB / 1.9 GiB      163.0 MiB   843.0 B / 42.0 B  0.0 B / 0.0 B              27635\nsqueezenet               272.655%         274.36  127.6 MiB / 1.9 GiB      127.7 MiB   773.0 B / 42.0 B  0.0 B / 0.0 B               3132\nsqueezenet_converted     274.83%          276.06  129.7 MiB / 1.9 GiB      129.8 MiB   731.0 B / 0.0 B   0.0 B / 0.0 B               3067\nnasnet_mobile            155.766%         159.16  135.1 MiB / 1.9 GiB      135.3 MiB   839.0 B / 42.0 B  0.0 B / 0.0 B              24549\nnasnet_mobile_converted  154.046%         159.38  123.0 MiB / 1.9 GiB      134.7 MiB   854.0 B / 42.0 B  0.0 B / 0.0 B              24515\n\n"
  },
  {
    "path": "Examples/converter_examples/README.md",
    "content": "# Model Conversion Examples\n\nThis folder contains examples that demonstrate Converter coverage and efficacy.\n\n### - Evaluating supported model architectures \n[Tested_Models](/Examples/converter_examples/Tested_Models) - This example evaluates common model architecture coverage by the individual conversion functions. It also summarizes known issues. **We strongly recommend that users review this example first before running their conversion tasks.**\n\n### - Benchmarking quantized TensorFlow Lite models on an Android phone\n[Convert_Benchmark](/Examples/converter_examples/Convert_Benchmark) - This example demonstrates how to benchmark quantized TensorFlow Lite model performance (i.e. running time and memory usage) on an Android phone. Specifically, we converted models from a TensorFlow frozen protobuf file to a quantized .tflite file, and benchmarked their performance on an LG G6 mobile phone. \n\nThis example shows that models converted and quantized with Converter match the performance of the official quantized\nmodels provided in the [TensorFlow repo](https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md).\n\n### - Profiling performances of converted models using Auptimizer Profiler\n[Convert_Profiler](/Examples/converter_examples/Convert_Profiler) - This example demonstrates how to use Auptimizer-Profiler to profile TensorFlow or ONNX model performance on CPU. Performance benchmarking scripts are provided for TensorFlow and ONNX. \n\n### How to run the examples\n\nIf you have not done so, please install the packages in `dlconvert_requirements.txt` before running the examples included in this directory.\n\n```bash\npip install -r dlconvert_requirements.txt\n```\n\nWe provide specific instructions for each example in the respective folder.\n\n\n"
  },
  {
    "path": "Examples/converter_examples/Tested_Models/.gitignore",
    "content": "test_models/\nconverted_models/\n*.tgz\n*.gz\n*.pb\n*.h5\n*_internal*\n"
  },
  {
    "path": "Examples/converter_examples/Tested_Models/README.md",
    "content": "# Model Coverage\nIn this example, we have evaluated the capabilities and limitations of Converter conversion functions by applying the tool to select models in various supported formats.  \n\nWe tested the official models hosted/released by TensorFlow or PyTorch. Our goal was to cover as many models as possible. However, due to the limited availability of officially released models and the large number of model architectures, this evaluation does not aim to test all models exhaustively. Rather, its purpose is to identify and address common model conversion issues.\n\n**We strongly recommended reviewing model coverage and known issues for the specific conversions, before you start using Converter.**\n\n## How to run the evaluation tests\n- *Step 0*: Make sure you have installed required packages listed in [dlconvert_requirement.txt](../dlconvert_requirements.txt).  \n\n- *Step 1*: Prepare test models.   \nThere are two ways to get the test models: 1) Direct download via URLs and 2) Create the models using Python scripts.  \n\nTo download models, run `python download_models.py`. This will automatically download models from the URLs list in `download_urls.json` and save them into a `test_models` folder. The downloaded models are in Protobuf, Checkpoint or Savedmodel formats.  \n\nTo create models, run `python create_test_models.py`. This will create Keras and PyTorch models and save them into the `test_models` folder.\n\n- *Step 2*: Convert test models to TensorFlow Lite/ONNX.  \nThe configuration json files for each type of conversion (from one source format to either TensorFlow Lite or ONNX) are located in [conversion_jsons](/conversion_jsons). You can run model conversion with each json file individually to test a certain conversion; e.g., \n   ```bash\n   python3 -m aup.dlconvert -f conversion_jsons/convert_keras_to_onnx.json\n   ```\nIn the json files, we set `skip:True` for the models that were tested but failed the conversion.\n\n## Model support and known issues\nHere we share the findings from the evaluation test for each individual conversion function. The model names corresponds to their names in `download_models.py` or `create_test_models.py`.\n\nFor the failed models, some failures were caused by non-supported operators in the conversion tool, while others by more model-specific issues that Converter cannot handle. Any model that is not listed below has not been tested.\n\nIf not specified, the (un)supported models apply to both TensorFlow v2.3 and TensorFlow v1.15. Please make sure you are using the TensorFlow version no lower than v1.15 to run the tests.\n\n\n\n### Savedmodel to TensorFlow Lite\n- Supported:  \nresnet_50_TF2, efficientnet_b1_TF2, lstm, gru\n\n- Not supported:  \nNon-supported operators: object detection models from [TensorFlow 2 Detection Model Zoo](https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf2_detection_zoo.md), transformer models  \nModel-specific issues: ssd_mobilenet_v1_coco, ssd_mobilenet_v2_coco\n\n- Known issues:  \n  - This conversion is only supported by Tensorflow v2.x.   \n  - For some models downloaded from [TensorFlow Hub](https://tfhub.dev/) in Savedmodel format, the signature is empty. Conversion from Savedmodel format requires non-empty signature and tag.\n\n### Savedmodel to ONNX\n- Supported:  \nresnet_50_TF2, efficientnet_b1_TF2, lstm, gru, ssd_mobilenet_v1_coco, ssd_mobilenet_v2_coco\n\n- Not supported:  \nNon-supported operators: object detection models from [TensorFlow 2 Detection Model Zoo](https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf2_detection_zoo.md), transformer models\n\n- Known issues:   \n  - This conversion is only supported by Tensorflow v2.x.   \n  - Conversion from Savedmodel format requires non-empty signature and tag.\n\n### Protobuf to TensorFlow Lite\n- Supported:  \ndensenet, squeezenet, nasnet_mobile, inception_v3, mobilenet_v1_0.25_224  \n\n- Not supported:  \nNon-supported input type uint 8: ssd_mobilenet_v1, ssd_mobilenet_v2\n\n- Known issues:  \n  - Conversion requires correct input_nodes name and output_nodes name. When using the [summarize graph tool](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/graph_transforms#inspecting-graphs), you can get the names correctly. But you need to make them into format `input_name:0` or `output_name:0`; i.e., adding `:0` after the name you found from the summarize graph tool.\n  - The model to be converted and the input should be in float32 format.\n  - Issue with Tensorflow v1.15: None dimension is only allowed for the 1st dimension of the input. When saving model to protobuf, please specify input dimension.\n\n### Protobuf to ONNX\n- Supported:  \ndensenet, squeezenet, nasnet_mobile, inception_v3, mobilenet_v1_0.25_224, ssd_mobilenet_v1, ssd_mobilenet_v2\n\n- Known issues:  \n  - Conversion requires correct input_nodes name and output_nodes name. When using the [summarize graph tool](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/graph_transforms#inspecting-graphs), you can get the names correctly. But you need to make them into format `input_name:0` or `output_name:0`; i.e., adding `:0` after the name you found from the summarize graph tool.\n\n### Keras to TensorFlow Lite\n- Supported: \nVGG16, ResNet50, InceptionV3, MobileNet, MobileNetV2, DenseNet121, NASNetMobile, gru (supported by TF v2.3 only)\n\n- Not supported:  \nModel-specific conversion error: lstm\n\n- Known issues:\n  - Need to set parameter `quantization: opsset` to `tf` to enable successful conversion.\n\n### Keras to ONNX\n- Supported:  \nVGG16, ResNet50, MobileNet, MobileNetV2, DenseNet121, NASNetMobile, lstm, gru (supported by TF v2.3 only), InceptionV3 (supported by TF v1.15 only)\n\n### Checkpoint to TensorFlow Lite\n- Known issues:\n  - This conversion is experimental. There is no direct conversion tool available. Therefore, the approach taken is to convert a checkpoint file to frozen protobuf first, then to TensorFlow Lite. Hence, this conversion can be fragile. \n\n### Checkpoint to ONNX\n- Supported:  \nmobilenet_v1_0.25_224, ssd_mobilenet_v1, ssd_mobilenet_v2, lstm\n\n### PyTorch to TensorFlow Lite\n- Supported:  \nall **image classification** models in [torchvision.models](https://pytorch.org/docs/stable/torchvision/models.html#)\n\n- Not supported:  \nNon-supported operators: fcn_resnet50, deeplabv3_resnet50, rnn models, resnet_3d, resnet_MC, resnet(2+1)d (the last three models all have 3D convolution layers)\n\n- Known issues:  \n  - To use the converter properly, please make changes in your `~/.keras/keras.json`: \n  ```bash\n  \"backend\": \"tensorflow\", \n  \"image_data_format\": \"channels_first\"\n  ```\n  - Models with `BatchNorm2d`/`BatchNorm3d` layers are not supported in TF v1.15.\n\n### PyTorch to ONNX\n- Supported:  \nall **image classification**, **semantic segmentation**, and **video classification** models in [torchvision.models](https://pytorch.org/docs/stable/torchvision/models.html#)\n\n- Not supported:  \nNon-supported operators: rnn models\n\n- Known issues:\n  - For supported models, all models can be converted using `torch==1.5.1` and `torchvision==0.6.1`, while some models fail when using `torch==1.6.0` and `torchvision==0.7.0`.\n  - Models with `BatchNorm2d`/`BatchNorm3d` layers are not supported in TF v1.15.\n\n## More resources\nAuptimizer model conversion tools integrates [TFLite converter](https://www.tensorflow.org/lite/convert), [tf2onnx](https://github.com/onnx/tensorflow-onnx), [keras2onnx](https://github.com/onnx/keras-onnx), and [pytorch2keras](https://github.com/nerox8664/pytorch2keras) packages. Please check those resources for more info on model support.\n"
  },
  {
    "path": "Examples/converter_examples/Tested_Models/conversion_jsons/convert_checkpoint_to_onnx.json",
    "content": "[\n    {\n        \"convert_from\":\"test_models/mobilenet_v1_0.25_224/mobilenet_v1_0.25_224.ckpt.meta\",\n        \"convert_to\":\"converted_models/mobilenet_v1_0.25_224_ckpt_converted.onnx\",\n        \"input_nodes\":\"batch:0\",\n        \"output_nodes\":\"MobilenetV1/Predictions/Reshape_1:0\",\n        \"input_shape\":\"1,224,224,3\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/ssd_mobilenet_v1_coco_2018_01_28/model.ckpt.meta\",\n        \"convert_to\":\"converted_models/ssd_mobilenet_v1_ckpt_converted.onnx\",\n        \"input_nodes\":\"image_tensor:0\",\n        \"output_nodes\":\"detection_boxes:0,detection_scores:0,num_detections:0,detection_classes:0\",\n        \"input_shape\":\"1,224,224,3\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/ssd_mobilenet_v2_coco_2018_03_29/model.ckpt.meta\",\n        \"convert_to\":\"converted_models/ssd_mobilenet_v2_ckpt_converted.onnx\",\n        \"input_nodes\":\"image_tensor:0\",\n        \"output_nodes\":\"num_detections:0,detection_classes:0,detection_scores:0,detection_boxes:0\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/lstm_ckpt/ckpt.meta\",\n        \"convert_to\":\"converted_models/lstm_ckpt_converted.onnx\",\n        \"input_nodes\":\"embedding_input:0\",\n        \"output_nodes\":\"dense/BiasAdd:0\",\n        \"skip\": \"False\"\n    }\n\n\n]"
  },
  {
    "path": "Examples/converter_examples/Tested_Models/conversion_jsons/convert_checkpoint_to_tflite.json",
    "content": "[\n    {\n        \"convert_from\":\"test_models/mobilenet_v1_0.25_224/mobilenet_v1_0.25_224.ckpt.meta\",\n        \"convert_to\":\"converted_models/mobilenet_v1_0.25_224_ckpt_converted.tflite\",\n        \"input_nodes\":\"batch:0\",\n        \"output_nodes\":\"MobilenetV1/Predictions/Reshape_1:0\",\n        \"skip\": \"True\"\n    },\n\n    {\n        \"convert_from\":\"test_models/ssd_mobilenet_v1_coco_2018_01_28/model.ckpt.meta\",\n        \"convert_to\":\"converted_models/ssd_mobilenet_v1_ckpt_converted.tflite\",\n        \"input_nodes\":\"image_tensor:0\",\n        \"output_nodes\":\"detection_boxes:0,detection_scores:0,num_detections:0,detection_classes:0\",\n        \"input_shape\": \"1,224,224,3\",\n        \"skip\": \"True\"\n    },\n\n    {\n        \"convert_from\":\"test_models/ssd_mobilenet_v2_coco_2018_03_29/model.ckpt.meta\",\n        \"convert_to\":\"converted_models/ssd_mobilenet_v2_ckpt_converted.tflite\",\n        \"input_nodes\":\"image_tensor:0\",\n        \"output_nodes\":\"num_detections:0,detection_classes:0,detection_scores:0,detection_boxes:0\",\n        \"skip\": \"True\"\n    },\n\n    {\n        \"convert_from\":\"test_models/lstm_ckpt/ckpt.meta\",\n        \"convert_to\":\"converted_models/lstm_ckpt_converted.tflite\",\n        \"input_nodes\":\"embedding_input:0\",\n        \"output_nodes\":\"dense/BiasAdd:0\",\n        \"input_shape\":\"1,53\",\n        \"skip\": \"True\"\n    }\n\n]"
  },
  {
    "path": "Examples/converter_examples/Tested_Models/conversion_jsons/convert_keras_to_onnx.json",
    "content": "[\n    {\n        \"convert_from\":\"test_models/VGG16.h5\",\n        \"convert_to\":\"converted_models/VGG16_keras.onnx\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/ResNet50.h5\",\n        \"convert_to\":\"converted_models/ResNet50_keras.onnx\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/InceptionV3.h5\",\n        \"convert_to\":\"converted_models/InceptionV3_keras.onnx\",\n        \"skip\":\"True\"\n    },\n\n    {\n        \"convert_from\":\"test_models/MobileNet.h5\",\n        \"convert_to\":\"converted_models/MobileNet_keras.onnx\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/MobileNetV2.h5\",\n        \"convert_to\":\"converted_models/MobileNetV2_keras.onnx\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/DenseNet121.h5\",\n        \"convert_to\":\"converted_models/DenseNet121_keras.onnx\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/NASNetMobile.h5\",\n        \"convert_to\":\"converted_models/NASNetMobile_keras.onnx\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/lstm.h5\",\n        \"convert_to\":\"converted_models/lstm_keras.onnx\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/gru.h5\",\n        \"convert_to\":\"converted_models/gru_keras.onnx\",\n        \"skip\":\"False\"\n    }\n]"
  },
  {
    "path": "Examples/converter_examples/Tested_Models/conversion_jsons/convert_keras_to_tflite.json",
    "content": "[\n    {\n        \"convert_from\":\"test_models/VGG16.h5\",\n        \"convert_to\":\"converted_models/VGG16_keras.tflite\",\n        \"quantization\": {\n            \"opsset\":\"tf\"\n        },\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/ResNet50.h5\",\n        \"convert_to\":\"converted_models/ResNet50_keras.tflite\",\n        \"quantization\": {\n            \"opsset\":\"tf\"\n        },\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/InceptionV3.h5\",\n        \"convert_to\":\"converted_models/InceptionV3_keras.tflite\",\n        \"quantization\": {\n            \"opsset\":\"tf\"\n        },\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/MobileNet.h5\",\n        \"convert_to\":\"converted_models/MobileNet_keras.tflite\",\n        \"quantization\": {\n            \"opsset\":\"tf\"\n        },\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/MobileNetV2.h5\",\n        \"convert_to\":\"converted_models/MobileNetV2_keras.tflite\",\n        \"quantization\": {\n            \"opsset\":\"tf\"\n        },\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/DenseNet121.h5\",\n        \"convert_to\":\"converted_models/DenseNet121_keras.tflite\",\n        \"quantization\": {\n            \"opsset\":\"tf\"\n        },\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/NASNetMobile.h5\",\n        \"convert_to\":\"converted_models/NASNetMobile_keras.tflite\",\n        \"quantization\": {\n            \"opsset\":\"tf\"\n        },\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/lstm.h5\",\n        \"convert_to\":\"converted_models/lstm_keras.tflite\",\n        \"skip\":\"True\"\n    },\n\n    {\n        \"convert_from\":\"test_models/gru.h5\",\n        \"convert_to\":\"converted_models/gru_keras.tflite\",\n        \"skip\":\"False\"\n    }\n]"
  },
  {
    "path": "Examples/converter_examples/Tested_Models/conversion_jsons/convert_protobuf_to_onnx.json",
    "content": "[\n    {\n        \"convert_from\":\"test_models/densenet/densenet.pb\",\n        \"convert_to\":\"converted_models/densenet_converted.onnx\",\n        \"input_nodes\":\"Placeholder:0\",\n        \"output_nodes\":\"softmax_tensor:0,ArgMax:0\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/squeezenet.pb\",\n        \"convert_to\":\"converted_models/squeezenet_converted.onnx\",\n        \"input_nodes\":\"Placeholder:0\",\n        \"output_nodes\":\"softmax_tensor:0\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/nasnet_mobile.pb\",\n        \"convert_to\":\"converted_models/nasnet_mobile_converted.onnx\",\n        \"input_nodes\":\"input:0\",\n        \"output_nodes\":\"final_layer/predictions:0\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/inception_v3.pb\",\n        \"convert_to\":\"converted_models/inception_v3_converted.onnx\",\n        \"input_nodes\":\"input:0\",\n        \"output_nodes\":\"InceptionV3/Predictions/Reshape_1:0\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/mobilenet_v1_0.25_224/mobilenet_v1_0.25_224_frozen.pb\",\n        \"convert_to\":\"converted_models/mobilenet_v1_0.25_224_converted.onnx\",\n        \"input_nodes\":\"input:0\",\n        \"output_nodes\":\"MobilenetV1/Predictions/Reshape_1:0\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/ssd_mobilenet_v1_coco_2018_01_28/frozen_inference_graph.pb\",\n        \"convert_to\":\"converted_models/ssd_mobilenet_v1_converted.onnx\",\n        \"input_nodes\":\"image_tensor:0\",\n        \"output_nodes\":\"detection_boxes:0,detection_scores:0,num_detections:0,detection_classes:0\",\n        \"input_shape\":\"1,224,224,3\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/ssd_mobilenet_v2_coco_2018_03_29/frozen_inference_graph.pb\",\n        \"convert_to\":\"converted_models/ssd_mobilenet_v2_converted.onnx\",\n        \"input_nodes\":\"image_tensor:0\",\n        \"output_nodes\":\"num_detections:0,detection_classes:0,detection_scores:0,detection_boxes:0\",\n        \"skip\": \"False\"\n    }\n\n]"
  },
  {
    "path": "Examples/converter_examples/Tested_Models/conversion_jsons/convert_protobuf_to_tflite.json",
    "content": "[\n    {\n        \"convert_from\":\"test_models/densenet/densenet.pb\",\n        \"convert_to\":\"converted_models/densenet_converted.tflite\",\n        \"input_nodes\":\"Placeholder\",\n        \"output_nodes\":\"softmax_tensor:0,ArgMax:0\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/squeezenet.pb\",\n        \"convert_to\":\"converted_models/squeezenet_converted.tflite\",\n        \"input_nodes\":\"Placeholder\",\n        \"output_nodes\":\"softmax_tensor:0\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/nasnet_mobile.pb\",\n        \"convert_to\":\"converted_models/nasnet_mobile_converted.tflite\",\n        \"input_nodes\":\"input:0\",\n        \"output_nodes\":\"final_layer/predictions:0\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/inception_v3.pb\",\n        \"convert_to\":\"converted_models/inception_v3_converted.tflite\",\n        \"input_nodes\":\"input:0\",\n        \"output_nodes\":\"InceptionV3/Predictions/Reshape_1:0\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/mobilenet_v1_0.25_224/mobilenet_v1_0.25_224_frozen.pb\",\n        \"convert_to\":\"converted_models/mobilenet_v1_0.25_224_converted.tflite\",\n        \"input_nodes\":\"input:0\",\n        \"output_nodes\":\"MobilenetV1/Predictions/Reshape_1:0\",\n        \"input_shape\": \"1,224,224,3\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/ssd_mobilenet_v1_coco_2018_01_28/frozen_inference_graph.pb\",\n        \"convert_to\":\"converted_models/ssd_mobilenet_v1_converted.tflite\",\n        \"input_nodes\":\"image_tensor:0\",\n        \"output_nodes\":\"detection_boxes:0,detection_scores:0,num_detections:0,detection_classes:0\",\n        \"input_shape\": \"1,224,224,3\",\n        \"skip\": \"True\"\n    },\n\n    {\n        \"convert_from\":\"test_models/ssd_mobilenet_v2_coco_2018_03_29/frozen_inference_graph.pb\",\n        \"convert_to\":\"converted_models/ssd_mobilenet_v2_converted.tflite\",\n        \"input_nodes\":\"image_tensor:0\",\n        \"output_nodes\":\"num_detections:0,detection_classes:0,detection_scores:0,detection_boxes:0\",\n        \"input_shape\": \"1,224,224,3\",\n        \"skip\": \"True\"\n    }\n\n]"
  },
  {
    "path": "Examples/converter_examples/Tested_Models/conversion_jsons/convert_pytorch_to_onnx.json",
    "content": "[\n    {\n        \"convert_from\":\"test_models/resnet18.pt\",\n        \"convert_to\":\"converted_models/resnet_torch.onnx\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Classification\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/alexnet.pt\",\n        \"convert_to\":\"converted_models/alexnet_torch.onnx\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Classification\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/squeezenet1_0.pt\",\n        \"convert_to\":\"converted_models/squeezenet1_0_torch.onnx\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Classification\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/densenet161.pt\",\n        \"convert_to\":\"converted_models/densenet161_torch.onnx\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Classification\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/googlenet.pt\",\n        \"convert_to\":\"converted_models/googlenet_torch.onnx\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Classification\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/shufflenet_v2_x1_0.pt\",\n        \"convert_to\":\"converted_models/shufflenet_v2_x1_0_torch.onnx\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Classification\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/mobilenet_v2.pt\",\n        \"convert_to\":\"converted_models/mobilenet_v2_x1_0_torch.onnx\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Classification\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/resnext50_32x4d.pt\",\n        \"convert_to\":\"converted_models/resnext50_32x4d_torch.onnx\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Classification\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/wide_resnet50_2.pt\",\n        \"convert_to\":\"converted_models/wide_resnet50_2_torch.onnx\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Classification\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/mnasnet1_0.pt\",\n        \"convert_to\":\"converted_models/mnasnet1_0_torch.onnx\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Classification\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/inception_v3.pt\",\n        \"convert_to\":\"converted_models/inception_v3_torch.onnx\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,299,299\",\n        \"network_name\":\"Test_Model_Classification\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/fcn_resnet50.pt\",\n        \"convert_to\":\"converted_models/fcn_resnet50_torch.onnx\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Segmentation\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/deeplabv3_resnet50.pt\",\n        \"convert_to\":\"converted_models/deeplabv3_resnet50_torch.onnx\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Segmentation\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/r3d_18.pt\",\n        \"convert_to\":\"converted_models/r3d_18_torch.onnx\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,16,112,112\",\n        \"network_name\":\"Test_Model_Video\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/mc3_18.pt\",\n        \"convert_to\":\"converted_models/mc3_18_torch.onnx\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,16,112,112\",\n        \"network_name\":\"Test_Model_Video\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/r2plus1d_18.pt\",\n        \"convert_to\":\"converted_models/r2plus1d_18_torch.onnx\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,16,112,112\",\n        \"network_name\":\"Test_Model_Video\",\n        \"skip\":\"False\"\n    }\n\n]"
  },
  {
    "path": "Examples/converter_examples/Tested_Models/conversion_jsons/convert_pytorch_to_tflite.json",
    "content": "[\n    {\n        \"convert_from\":\"test_models/resnet18.pt\",\n        \"convert_to\":\"converted_models/resnet_torch.tflite\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Classification\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/alexnet.pt\",\n        \"convert_to\":\"converted_models/alexnet_torch.tflite\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Classification\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/squeezenet1_0.pt\",\n        \"convert_to\":\"converted_models/squeezenet1_0_torch.tflite\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Classification\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/densenet161.pt\",\n        \"convert_to\":\"converted_models/densenet161_torch.tflite\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Classification\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/googlenet.pt\",\n        \"convert_to\":\"converted_models/googlenet_torch.tflite\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Classification\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/shufflenet_v2_x1_0.pt\",\n        \"convert_to\":\"converted_models/shufflenet_v2_x1_0_torch.tflite\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Classification\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/mobilenet_v2.pt\",\n        \"convert_to\":\"converted_models/mobilenet_v2_x1_0_torch.tflite\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Classification\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/resnext50_32x4d.pt\",\n        \"convert_to\":\"converted_models/resnext50_32x4d_torch.tflite\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Classification\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/wide_resnet50_2.pt\",\n        \"convert_to\":\"converted_models/wide_resnet50_2_torch.tflite\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Classification\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/mnasnet1_0.pt\",\n        \"convert_to\":\"converted_models/mnasnet1_0_torch.tflite\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Classification\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/inception_v3.pt\",\n        \"convert_to\":\"converted_models/inception_v3_torch.tflite\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,299,299\",\n        \"network_name\":\"Test_Model_Classification\",\n        \"skip\":\"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/fcn_resnet50.pt\",\n        \"convert_to\":\"converted_models/fcn_resnet50_torch.tflite\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Segmentation\",\n        \"skip\":\"True\"\n    },\n\n    {\n        \"convert_from\":\"test_models/deeplabv3_resnet50.pt\",\n        \"convert_to\":\"converted_models/deeplabv3_resnet50_torch.tflite\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,224,224\",\n        \"network_name\":\"Test_Model_Segmentation\",\n        \"skip\":\"True\"\n    },\n\n    {\n        \"convert_from\":\"test_models/r3d_18.pt\",\n        \"convert_to\":\"converted_models/r3d_18_torch.tflite\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,16,112,112\",\n        \"network_name\":\"Test_Model_Video\",\n        \"skip\":\"True\"\n    },\n\n    {\n        \"convert_from\":\"test_models/mc3_18.pt\",\n        \"convert_to\":\"converted_models/mc3_18_torch.tflite\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,16,112,112\",\n        \"network_name\":\"Test_Model_Video\",\n        \"skip\":\"True\"\n    },\n\n    {\n        \"convert_from\":\"test_models/r2plus1d_18.pt\",\n        \"convert_to\":\"converted_models/r2plus1d_18_torch.tflite\",\n        \"network_script\":\"create_test_models.py\",\n        \"input_shape\":\"1,3,16,112,112\",\n        \"network_name\":\"Test_Model_Video\",\n        \"skip\":\"True\"\n    }\n\n]"
  },
  {
    "path": "Examples/converter_examples/Tested_Models/conversion_jsons/convert_savedmodel_to_onnx.json",
    "content": "[\n    {\n        \"convert_from\":\"test_models/resnet_50_TF2\",\n        \"convert_to\":\"converted_models/resnet_50_TF2_converted.onnx\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/efficientnet_b1_TF2\",\n        \"convert_to\":\"converted_models/efficientnet_b1_TF2_converted.onnx\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/ssd_mobilenet_v1_coco_2018_01_28/saved_model\",\n        \"convert_to\":\"converted_models/ssd_mobilenet_v1_converted.onnx\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/ssd_mobilenet_v2_coco_2018_03_29/saved_model\",\n        \"convert_to\":\"converted_models/ssd_mobilenet_v2_converted.onnx\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/lstm_savedmodel\",\n        \"convert_to\":\"converted_models/lstm_savedmodel_converted.onnx\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/gru_savedmodel\",\n        \"convert_to\":\"converted_models/gru_savedmodel_converted.onnx\",\n        \"skip\": \"False\"\n    }\n]"
  },
  {
    "path": "Examples/converter_examples/Tested_Models/conversion_jsons/convert_savedmodel_to_tflite.json",
    "content": "[\n    {\n        \"convert_from\":\"test_models/resnet_50_TF2\",\n        \"convert_to\":\"converted_models/resnet_50_TF2_converted.tflite\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/efficientnet_b1_TF2\",\n        \"convert_to\":\"converted_models/efficientnet_b1_TF2_converted.tflite\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/lstm_savedmodel\",\n        \"convert_to\":\"converted_models/lstm_savedmodel_converted.tflite\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/gru_savedmodel\",\n        \"convert_to\":\"converted_models/gru_savedmodel_converted.tflite\",\n        \"skip\": \"False\"\n    },\n\n    {\n        \"convert_from\":\"test_models/ssd_mobilenet_v1_coco_2018_01_28/saved_model\",\n        \"convert_to\":\"converted_models/ssd_mobilenet_v1_converted.tflite\",\n        \"skip\": \"True\"\n    },\n\n    {\n        \"convert_from\":\"test_models/ssd_mobilenet_v1_coco_2018_01_28/saved_model\",\n        \"convert_to\":\"converted_models/ssd_mobilenet_v1_converted.tflite\",\n        \"skip\": \"True\"\n    }\n\n]"
  },
  {
    "path": "Examples/converter_examples/Tested_Models/convert_pb_to_tflite.json",
    "content": "[\n    {\n        \"convert_from\":\"test_models/densenet/densenet.pb\",\n        \"convert_to\":\"converted_models/densenet_converted.tflite\",\n        \"input_nodes\":\"Placeholder\",\n        \"output_nodes\":\"softmax_tensor:0,ArgMax:0\"\n    }\n]\n"
  },
  {
    "path": "Examples/converter_examples/Tested_Models/create_test_models.py",
    "content": "#  Copyright (c) 2020 LG Electronics Inc.\n#  SPDX-License-Identifier: GPL-3.0-or-later\n\nimport torchvision.models as models\nimport torch\nimport torch.nn as nn\nimport tensorflow.keras.applications as applications\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\nfrom tensorflow.python.util import deprecation\nimport string\ndeprecation._PRINT_DEPRECATION_WARNINGS = False\n\nkeras_model_list = [\n    \"VGG16\", \"ResNet50\", \"InceptionV3\", \"MobileNet\", \"MobileNetV2\", \"DenseNet121\", \"NASNetMobile\"\n]\n\nclassification_model_list = [\n    \"resnet18\", \"alexnet\", \"squeezenet1_0\", \"densenet161\", \"inception_v3\",\n    \"googlenet\", \"shufflenet_v2_x1_0\", \"mobilenet_v2\", \"resnext50_32x4d\",\n    \"wide_resnet50_2\", \"mnasnet1_0\"\n]\n\nsegmentation_model_list = [\n    \"fcn_resnet50\", \"deeplabv3_resnet50\"\n]\n\nvideo_model_list = [\n    \"r3d_18\", \"mc3_18\", \"r2plus1d_18\"\n]\n\nclass Test_Model_Classification(object):\n    def __init__(self, model_name):\n        self.func = getattr(models, model_name)\n\n    def create_model(self):\n        model = self.func()\n        return model\n\nclass Test_Model_Segmentation(object):\n    def __init__(self, model_name):\n        self.func = getattr(models.segmentation, model_name)\n\n    def create_model(self):\n        model = self.func()\n        return model\n\nclass Test_Model_Video(object):\n    def __init__(self, model_name):\n        self.func = getattr(models.video, model_name)\n\n    def create_model(self):\n        model = self.func()\n        return model\n\ndef create_torch_cnn_models():\n    \n    for model_name in classification_model_list:\n        if model_name == \"inception_v3\":\n            x = torch.randn(1, 3, 299, 299)\n        else:\n            x = torch.randn(1, 3, 224, 224)\n        print(\"Creating model\", model_name)\n        model = Test_Model_Classification(model_name).create_model()\n        model.eval()\n        y = model(x)\n        save_path = \"test_models/\" + model_name + \".pt\"\n        torch.save(model, save_path)\n        print(\"Created Pytorch model saved to\", save_path)\n\n    for model_name in segmentation_model_list:\n        x = torch.randn(1, 3, 224, 224)\n        print(\"Creating model\", model_name)\n        model = Test_Model_Segmentation(model_name).create_model()\n        model.eval()\n        y = model(x)\n        save_path = \"test_models/\" + model_name + \".pt\"\n        torch.save(model, save_path)\n        print(\"Created Pytorch model saved to\", save_path)\n\n    for model_name in video_model_list:\n        x = torch.randn(1, 3, 16, 112, 112)\n        print(\"Creating model\", model_name)\n        model = Test_Model_Video(model_name).create_model()\n        model.eval()\n        y = model(x)\n        save_path = \"test_models/\" + model_name + \".pt\"\n        torch.save(model, save_path)\n        print(\"Created Pytorch model saved to\", save_path)\n\ndef create_keras_cnn_models():\n    for cls_name in keras_model_list:\n        model_func = getattr(applications, cls_name)\n        model = model_func(weights = None)\n        save_path = \"test_models/\" + cls_name + \".h5\"\n        model.save(save_path) \n        print(\"Created Keras model saved to\", save_path)\n\ndef create_tf_lstm_model():\n    tf.compat.v1.disable_eager_execution()\n    \n    # Create a test lstm network based on Pytorch doc\n    model = keras.Sequential()\n    # Add an Embedding layer expecting input vocab of size 1000, and\n    # output embedding dimension of size 64.\n    model.add(layers.Embedding(input_dim=1000, output_dim=64))\n    model.add(layers.LSTM(128))\n    model.add(layers.Dense(10))\n    \n    # save checkpoint\n    model.save_weights(\"test_models/lstm_ckpt/ckpt\")\n    ckpt_meta = \"test_models/lstm_ckpt/ckpt.meta\"\n    tf.compat.v1.train.export_meta_graph(filename=ckpt_meta)\n\n    # save keras model\n    model.save(\"test_models/lstm.h5\")\n\n    # save TF savedmodel\n    model.save(\"test_models/lstm_savedmodel\", save_format='tf')\n\n    # print model input/output names\n    print(\"lstm model input name:\", model.input)\n    print(\"lstm model output name:\",model.output)\n\n\ndef create_tf_gru_model():\n    tf.compat.v1.disable_eager_execution()\n\n    # Create a test rnn network based on Pytorch doc\n    model = keras.Sequential()\n    model.add(layers.Embedding(input_dim=1000, output_dim=64))\n    # The output of GRU will be a 3D tensor of shape (batch_size, timesteps, 256)\n    model.add(layers.GRU(256, return_sequences=True))\n    # The output of SimpleRNN will be a 2D tensor of shape (batch_size, 128)\n    model.add(layers.SimpleRNN(128))\n    model.add(layers.Dense(10))\n    \n    # save keras model\n    model.save(\"test_models/gru_TF1.h5\")\n    # save TF savedmodel\n    model.save(\"test_models/gru_savedmodel\",save_format='tf')\n    # print model input/output names\n    print(\"gru model input name:\", model.input)\n    print(\"gru model output name:\", model.output)\n\n\nif __name__ == \"__main__\":\n    create_torch_cnn_models()\n    create_keras_cnn_models()\n    create_tf_lstm_model()\n    create_tf_gru_model()"
  },
  {
    "path": "Examples/converter_examples/Tested_Models/download_models.py",
    "content": "#  Copyright (c) 2020 LG Electronics Inc.\n#  SPDX-License-Identifier: GPL-3.0-or-later\n\nimport os\nimport json\nimport argparse\nimport logging\nimport requests\nimport shutil\n\ndef download_all_url(url_file, model_folder):\n    try:\n        with open(url_file) as f:\n           all_urls = json.load(f)\n    except Exception as e:\n        logging.fatal(\"The url json file could not be opened\")\n        raise e\n\n    for model_type in all_urls:\n        url_list = all_urls[model_type]\n        for model_name in url_list:\n            url = url_list[model_name]\n            # print(url)\n            tarFilename = url.split('/')[-1]\n\n            # check if the tar file already exists on disk\n            # if not tarFilename[0].isdigit() and os.path.isfile(tarFilename):\n            if os.path.isfile(tarFilename):\n                print (\"File already exists, skipping \", url)\n                continue\n            print(\"Downloading \", url)\n            response = requests.get(url, stream=True)\n            if response.status_code == 200:\n                with open(tarFilename, 'wb') as f:\n                    f.write(response.raw.read())\n            if tarFilename[0].isdigit():\n                save_folder = model_folder + \"/\" + model_name\n            else:\n                save_folder = model_folder\n            shutil.unpack_archive(tarFilename, save_folder)\n\n\n\nif __name__ == '__main__':\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"--url_file\", required=True, help=\"Json file with urls for downloading models\")\n    parser.add_argument(\"--model_folder\", default=\"test_models\", help=\"folder path for saving downloaded models\")\n    args, unknownargs = parser.parse_known_args()\n    download_all_url(args.url_file, \"test_models\")\n"
  },
  {
    "path": "Examples/converter_examples/Tested_Models/download_urls.json",
    "content": "{   \n    \"protobuf_checkpoint\":{\n      \"densenet\": \"https://storage.googleapis.com/download.tensorflow.org/models/tflite/model_zoo/upload_20180427/densenet_2018_04_27.tgz\",\n      \"squeezenet\": \"https://storage.googleapis.com/download.tensorflow.org/models/tflite/model_zoo/upload_20180427/squeezenet_2018_04_27.tgz\",\n      \"nasnet_mobile\": \"https://storage.googleapis.com/download.tensorflow.org/models/tflite/model_zoo/upload_20180427/nasnet_mobile_2018_04_27.tgz\",\n      \"inception_v3\": \"https://storage.googleapis.com/download.tensorflow.org/models/tflite/model_zoo/upload_20180427/inception_v3_2018_04_27.tgz\",\n      \"mobilenet_v1_0.25_224\": \"https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_2018_02_22/mobilenet_v1_0.25_224.tgz\",\n      \"ssd_mobilenet_v1\": \"http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_coco_2018_01_28.tar.gz\",\n      \"ssd_mobilenet_v2\": \"http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v2_coco_2018_03_29.tar.gz\"\n    },\n\n    \"savedmodel\":{\n      \"resnet_50_TF2\": \"https://storage.googleapis.com/tfhub-modules/tensorflow/resnet_50/classification/1.tar.gz\",\n      \"efficientnet_b1_TF2\": \"https://storage.googleapis.com/tfhub-modules/tensorflow/efficientnet/b1/feature-vector/1.tar.gz\"\n    }\n\n\n}"
  },
  {
    "path": "Examples/converter_examples/dlconvert_requirements.txt",
    "content": "keras2onnx==1.7.0\ntf2onnx\npytest\npytest-cov\ntorch\npytorch2keras"
  },
  {
    "path": "Examples/decorator_example/origin.py",
    "content": "#----------------------------------\ndef func(hyperparameter):\n    return 'training results'\n\n\n\n\n\n\n\n\n#----------------------------------\nimport tensorflow as tf\nFLAGS = tf.app.flags.FLAGS\n# some arguments defined in flags\n\ndef main(unused):\n    return \"training results\"\n\nif __name__ == \"__main__\":\n    tf.app.run()\n    \n    \n\n\n#----------------------------------\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "Examples/decorator_example/use_decorator.py",
    "content": "#----------------------------------\n#!/usr/bin/env python\nimport sys\nfrom aup import aup_args\n\n@aup_args\ndef func(hyperparameter):\n    return 'training results'\n\nif __name__ == \"__main__\":\n    func(sys.argv[1])\n#----------------------------------\n#!/usr/bin/env python\nimport tensorflow as tf\nfrom aup import aup_flags\n\nFLAGS = tf.app.flags.FLAGS\n# some arguments defined in flags\n\n@aup_flags(FLAGS)\ndef main():\n    return \"training results\"\n\nif __name__ == \"__main__\":\n    tf.app.run()\n#----------------------------------\n\n\n\n\n"
  },
  {
    "path": "Examples/demo/.gitignore",
    "content": "env_template.ini\nhpo.py\n.aup/\nexperiment.json\n"
  },
  {
    "path": "Examples/demo/demo.yml",
    "content": "# The configurations that used for the recording, feel free to edit them\nconfig:\n\n  # Specify a command to be executed\n  # like `/bin/bash -l`, `ls`, or any other commands\n  # the default is bash for Linux\n  # or powershell.exe for Windows\n  command: bash -l\n  \n  # Specify the current working directory path\n  # the default is the current working directory path\n  cwd: ./Examples/demo\n  \n  # Export additional ENV variables\n  env:\n    recording: true\n  \n  # Explicitly set the number of columns\n  # or use `auto` to take the current\n  # number of columns of your shell\n  cols: 105\n  \n  # Explicitly set the number of rows\n  # or use `auto` to take the current\n  # number of rows of your shell\n  rows: 24\n  \n  # Amount of times to repeat GIF\n  # If value is -1, play once\n  # If value is 0, loop indefinitely\n  # If value is a positive number, loop n times\n  repeat: 0\n  \n  # Quality\n  # 1 - 100\n  quality: 80\n  \n  # Delay between frames in ms\n  # If the value is `auto` use the actual recording delays\n  frameDelay: auto\n  \n  # Maximum delay between frames in ms\n  # Ignored if the `frameDelay` isn't set to `auto`\n  # Set to `auto` to prevent limiting the max idle time\n  maxIdleTime: 2000\n  \n  # The surrounding frame box\n  # The `type` can be null, window, floating, or solid`\n  # To hide the title use the value null\n  # Don't forget to add a backgroundColor style with a null as type\n  frameBox:\n    type: solid\n    title: LGE-ARC-AdvancedAI/auptimizer\n    style:\n      border: 0px black solid\n      # boxShadow: none\n      # margin: 0px\n  \n  # Add a watermark image to the rendered gif\n  # You need to specify an absolute path for\n  # the image on your machine or a URL, and you can also\n  # add your own CSS styles\n  watermark:\n    imagePath: /Users/jason.liu/.terminalizer/SVL-aai.png\n    style:\n      position: absolute\n      right: 15px\n      bottom: 15px\n      width: 100px\n      opacity: 0.9\n  \n  # Cursor style can be one of\n  # `block`, `underline`, or `bar`\n  cursorStyle: block\n  \n  # Font family\n  # You can use any font that is installed on your machine\n  # in CSS-like syntax\n  fontFamily: \"Monaco, Lucida Console, Ubuntu Mono, Monospace\"\n  \n  # The size of the font\n  fontSize: 24\n  \n  # The height of lines\n  lineHeight: 1\n  \n  # The spacing between letters\n  letterSpacing: 0\n  \n  # Theme\n  theme:\n    background: \"transparent\"\n    foreground: \"#afafaf\"\n    cursor: \"#c7c7c7\"\n    black: \"#232628\"\n    red: \"#fc4384\"\n    green: \"#b3e33b\"\n    yellow: \"#ffa727\"\n    blue: \"#75dff2\"\n    magenta: \"#ae89fe\"\n    cyan: \"#708387\"\n    white: \"#d5d5d0\"\n    brightBlack: \"#626566\"\n    brightRed: \"#ff7fac\"\n    brightGreen: \"#c8ed71\"\n    brightYellow: \"#ebdf86\"\n    brightBlue: \"#75dff2\"\n    brightMagenta: \"#ae89fe\"\n    brightCyan: \"#b1c6ca\"\n    brightWhite: \"#f9f9f4\"\n  \n# Records, feel free to edit them\nrecords:\n  - delay: 476\n    content: \"\\e[H\\e[2J\"\n  - delay: 10\n    content: \"\\e]1337;RemoteHost=local\\a\\e]1337;CurrentDir=./Examples/demo\\a\\e]1337;ShellIntegrationVersion=13;shell=bash\\a\"\n  - delay: 12\n    content: \"\\e]133;C;\\a\\e]1337;RemoteHost=local\\a\\e]1337;CurrentDir=./Examples/demo\\a\\e]133;D;0\\a\\e]133;A\\a\\e[0;35m>demo$> \\e[0m\\e]133;B\\a\"\n  - delay: 1093\n    content: l\n  - delay: 96\n    content: s\n  - delay: 232\n    content: \"\\r\\n\"\n  - delay: 13\n    content: \"\\e]133;C;\\a\\e[34m.\\e[m\\e[m         \\e[34m..\\e[m\\e[m        origin.py\\r\\n\"\n  - delay: 5\n    content: \"\\e]1337;RemoteHost=local\\a\\e]1337;CurrentDir=./Examples/demo\\a\\e]133;D;0\\a\\e]133;A\\a\\e[0;35m>demo$> \\e[0m\\e]133;B\\a\"\n  - delay: 1112\n    content: p\n  - delay: 152\n    content: 'y'\n  - delay: 48\n    content: t\n  - delay: 144\n    content: h\n  - delay: 57\n    content: o\n  - delay: 128\n    content: 'n'\n  - delay: 135\n    content: ' '\n  - delay: 112\n    content: '-'\n  - delay: 200\n    content: m\n  - delay: 103\n    content: ' '\n  - delay: 162\n    content: a\n  - delay: 87\n    content: u\n  - delay: 89\n    content: p\n  - delay: 304\n    content: .\n  - delay: 191\n    content: s\n  - delay: 65\n    content: e\n  - delay: 111\n    content: t\n  - delay: 137\n    content: u\n  - delay: 64\n    content: p\n  - delay: 439\n    content: \"\\r\\n\"\n  - delay: 15\n    content: \"\\e]133;C;\\a\"\n  - delay: 130\n    content: \"\\e[1;30mINFO\\e[0m - Using default user jason.liu\\r\\nEnvironment file, or hit ENTER to fill in details:\"\n  - delay: 703\n    content: \"\\r\\nAuptimizer Environment path - Auptimizer_PATH (.aup):\"\n  - delay: 296\n    content: \"\\r\\nAuptimizer Temp folder - TMP_FOLDER (/tmp/auptmp):\"\n  - delay: 233\n    content: \"\\r\\nNumber of CPUs (4):\"\n  - delay: 207\n    content: \"\\r\\nGPU template file or comma-separated IDs (none):\"\n  - delay: 200\n    content: \"\\r\\nNode template file (none) or comma-separated nodes (user@ip:[port] [keyfile]):\"\n  - delay: 216\n    content: \"\\r\\nAWS template file (none) or comma-separated nodes (user@ip):[port] [keyfile])\"\n  - delay: 416\n    content: \"\\r\\nUsername (jason.liu):\"\n  - delay: 431\n    content: \"\\r\\nOverwrite (y/N)\"\n  - delay: 423\n    content: \"\\r\\n\\e[1;30mINFO\\e[0m - Write env.ini to .aup/env.ini\\r\\n\"\n  - delay: 138\n    content: \"\\e[32m2019-07-25 14:33:46\\e[0m - \\e[34maup.setupdb.sqlite\\e[0m - \\e[1;30mINFO\\e[0m - SQLite3 Database is created at .aup/sqlite3.db\\r\\n\"\n  - delay: 11\n    content: \"\\e[1;30mINFO\\e[0m - Following commands have finished automatically\\r\\n/usr/local/opt/python/bin/python3.7 -m aup.setupdb.sqlite .aup/env.ini --user jason.liu --cpu 4 --log info\\r\\n\"\n  - delay: 20\n    content: \"\\e]1337;RemoteHost=local\\a\\e]1337;CurrentDir=./Examples/demo\\a\\e]133;D;0\\a\\e]133;A\\a\\e[0;35m>demo$> \\e[0m\\e]133;B\\a\"\n  - delay: 1316\n    content: l\n  - delay: 120\n    content: s\n  - delay: 144\n    content: ' '\n  - delay: 472\n    content: .\n  - delay: 207\n    content: a\n  - delay: 104\n    content: u\n  - delay: 104\n    content: p\n  - delay: 256\n    content: \"\\r\\n\"\n  - delay: 14\n    content: \"\\e]133;C;\\a\\e[34m.\\e[m\\e[m          \\e[34m..\\e[m\\e[m         env.ini    sqlite3.db\\r\\n\"\n  - delay: 5\n    content: \"\\e]1337;RemoteHost=local\\a\\e]1337;CurrentDir=./Examples/demo\\a\\e]133;D;0\\a\\e]133;A\\a\\e[0;35m>demo$> \\e[0m\\e]133;B\\a\"\n  - delay: 248\n    content: m\n  - delay: 88\n    content: o\n  - delay: 79\n    content: r\n  - delay: 65\n    content: e\n  - delay: 81\n    content: ' '\n  - delay: 191\n    content: .\n  - delay: 201\n    content: a\n  - delay: 103\n    content: u\n  - delay: 88\n    content: p\n  - delay: 264\n    content: /\n  - delay: 198\n    content: e\n  - delay: 74\n    content: 'n'\n  - delay: 217\n    content: 'v.ini '\n  - delay: 184\n    content: \"\\r\\n\"\n  - delay: 17\n    content: \"\\e]133;C;\\a\\e[?1h\\e=\\r[Auptimizer]\\r\\nAuptimizer_PATH = .aup\\r\\nTMP_FOLDER = /tmp/auptmp\\r\\nSQL_ENGINE = sqlite\\r\\nSQLITE_FILE = .aup/sqlite3.db\\r\\n\\r\\n\\e[7m.aup/env.ini (END)\\e[m\\e[K\"\n  - delay: 826\n    content: \"\\r\\e[K\\e[?1l\\e>\"\n  - delay: 5\n    content: \"\\e]1337;RemoteHost=local\\a\\e]1337;CurrentDir=./Examples/demo\\a\\e]133;D;0\\a\\e]133;A\\a\\e[0;35m>demo$> \\e[0m\\e]133;B\\a\"\n  - delay: 977\n    content: p\n  - delay: 185\n    content: 'y'\n  - delay: 71\n    content: t\n  - delay: 136\n    content: h\n  - delay: 48\n    content: o\n  - delay: 144\n    content: 'n'\n  - delay: 136\n    content: ' '\n  - delay: 200\n    content: '-'\n  - delay: 457\n    content: m\n  - delay: 126\n    content: ' '\n  - delay: 1089\n    content: a\n  - delay: 120\n    content: u\n  - delay: 89\n    content: p\n  - delay: 304\n    content: .\n  - delay: 350\n    content: i\n  - delay: 177\n    content: 'n'\n  - delay: 130\n    content: i\n  - delay: 230\n    content: t\n  - delay: 433\n    content: \"\\r\\n\"\n  - delay: 13\n    content: \"\\e]133;C;\\a\"\n  - delay: 122\n    content: \"\\e[34maup.utils\\e[0m - \\e[1;30mINFO\\e[0m - Auptimizer environment at .aup\\r\\n\"\n  - delay: 6\n    content: \"\\e[34maup.utils\\e[0m - \\e[1;30mINFO\\e[0m - Use default connector at .aup/sqlite3.db\\r\\nscript name []:\"\n  - delay: 626\n    content: h\n  - delay: 96\n    content: p\n  - delay: 88\n    content: o\n  - delay: 264\n    content: .\n  - delay: 192\n    content: p\n  - delay: 144\n    content: 'y'\n  - delay: 296\n    content: \"\\r\\ncomputing resource for experiment [cpu]:\"\n  - delay: 1128\n    content: \"\\r\\nNumber of parallel execution on cpu, up to 4 [1]:\"\n  - delay: 1159\n    content: '2'\n  - delay: 191\n    content: \"\\r\\nmax/min the score [max]:\"\n  - delay: 1361\n    content: m\n  - delay: 120\n    content: i\n  - delay: 193\n    content: 'n'\n  - delay: 591\n    content: \"\\r\\nworking path, [default:./Examples/demo]:\"\n  - delay: 823\n    content: \"\\r\\nproposer [random]:\"\n  - delay: 1385\n    content: \"\\r\\n\"\n  - delay: 113\n    content: 'number of jobs [1]:'\n  - delay: 1862\n    content: '1'\n  - delay: 224\n    content: '0'\n  - delay: 208\n    content: \"\\r\\nrandom seed [0]\"\n  - delay: 927\n    content: \"\\r\\nstart adding hyperparameters, use 'stop' for variable name or ctrl+c to exit\\r\\nname:\"\n  - delay: 1022\n    content: x\n  - delay: 273\n    content: \"\\r\\nrange (separated by ,):\"\n  - delay: 1512\n    content: '0'\n  - delay: 280\n    content: ','\n  - delay: 752\n    content: '5'\n  - delay: 225\n    content: \"\\r\\ntype: [choice]:\"\n  - delay: 1263\n    content: f\n  - delay: 144\n    content: l\n  - delay: 168\n    content: o\n  - delay: 64\n    content: a\n  - delay: 104\n    content: t\n  - delay: 80\n    content: \"\\r\\nname:\"\n  - delay: 358\n    content: s\n  - delay: 113\n    content: t\n  - delay: 112\n    content: o\n  - delay: 584\n    content: p\n  - delay: 288\n    content: \"\\r\\n\\e[34maup.init\\e[0m - \\e[1;30mINFO\\e[0m - Write experiment config to experiment.json\\r\\n\"\n  - delay: 28\n    content: \"\\e]1337;RemoteHost=local\\a\\e]1337;CurrentDir=./Examples/demo\\a\\e]133;D;0\\a\\e]133;A\\a\\e[0;35m>demo$> \\e[0m\\e]133;B\\a\"\n  - delay: 602\n    content: m\n  - delay: 64\n    content: o\n  - delay: 49\n    content: r\n  - delay: 71\n    content: e\n  - delay: 113\n    content: ' '\n  - delay: 2554\n    content: \"\\r\\n.aup/            experiment.json  origin.py        \\r\\n\\e]133;D;0\\a\\e]133;A\\a\\e[0;35m>demo$> \\e[0m\\e]133;B\\amore \"\n  - delay: 168\n    content: \"\\r\\n.aup/            experiment.json  origin.py        \\r\\n\\e]133;D;0\\a\\e]133;A\\a\\e[0;35m>demo$> \\e[0m\\e]133;B\\amore \"\n  - delay: 864\n    content: o\n  - delay: 303\n    content: r\n  - delay: 105\n    content: i\n  - delay: 136\n    content: 'gin.py '\n  - delay: 199\n    content: \"\\r\\n\"\n  - delay: 13\n    content: \"\\e]133;C;\\a\\e[?1h\\e=\\r# Demonstration code for 1D function, centered around a=1\\r\\nfrom time import sleep\\r\\n\\r\\n\\r\\ndef demo_func(x, a=1, b=0):\\r\\n    sleep(1)\\r\\n    return (x-a)*(x-a)+b\\r\\n\\r\\n\\e[7morigin.py (END)\\e[m\\e[K\"\n  - delay: 1609\n    content: \"\\r\\e[K\\e[?1l\\e>\"\n  - delay: 5\n    content: \"\\e]1337;RemoteHost=local\\a\\e]1337;CurrentDir=./Examples/demo\\a\\e]133;D;0\\a\\e]133;A\\a\\e[0;35m>demo$> \\e[0m\\e]133;B\\a\"\n  - delay: 2168\n    content: p\n  - delay: 241\n    content: 'y'\n  - delay: 183\n    content: t\n  - delay: 56\n    content: h\n  - delay: 103\n    content: o\n  - delay: 184\n    content: 'n'\n  - delay: 688\n    content: ' '\n  - delay: 136\n    content: '-'\n  - delay: 257\n    content: m\n  - delay: 151\n    content: ' '\n  - delay: 760\n    content: a\n  - delay: 128\n    content: u\n  - delay: 104\n    content: p\n  - delay: 329\n    content: .\n  - delay: 193\n    content: c\n  - delay: 55\n    content: o\n  - delay: 113\n    content: 'n'\n  - delay: 55\n    content: v\n  - delay: 217\n    content: e\n  - delay: 79\n    content: r\n  - delay: 168\n    content: t\n  - delay: 129\n    content: ' '\n  - delay: 656\n    content: o\n  - delay: 208\n    content: r\n  - delay: 111\n    content: i\n  - delay: 136\n    content: g\n  - delay: 88\n    content: i\n  - delay: 47\n    content: 'n'\n  - delay: 273\n    content: .\n  - delay: 208\n    content: 'py '\n  - delay: 568\n    content: e\n  - delay: 247\n    content: x\n  - delay: 120\n    content: p\n  - delay: 128\n    content: e\n  - delay: 97\n    content: r\n  - delay: 176\n    content: 'iment.json '\n  - delay: 663\n    content: d\n  - delay: 329\n    content: e\n  - delay: 415\n    content: m\n  - delay: 96\n    content: o\n  - delay: 255\n    content: _\n  - delay: 219\n    content: f\n  - delay: 87\n    content: u\n  - delay: 199\n    content: 'n'\n  - delay: 112\n    content: c\n  - delay: 457\n    content: \"\\r\\n\"\n  - delay: 14\n    content: \"\\e]133;C;\\a\"\n  - delay: 106\n    content: \"\\e]1337;RemoteHost=local\\a\\e]1337;CurrentDir=./Examples/demo\\a\\e]133;D;0\\a\\e]133;A\\a\\e[0;35m>demo$> \\e[0m\\e]133;B\\a\"\n  - delay: 669\n    content: l\n  - delay: 80\n    content: s\n  - delay: 120\n    content: \"\\r\\n\"\n  - delay: 14\n    content: \"\\e]133;C;\\a\\e[34m.\\e[m\\e[m               \\e[34m..\\e[m\\e[m              \\e[34m.aup\\e[m\\e[m            experiment.json \\e[31mhpo.py\\e[m\\e[m          origin.py\\r\\n\\e]1337;RemoteHost=local\\a\\e]1337;CurrentDir=./Examples/demo\\a\\e]133;D;0\\a\\e]133;A\\a\\e[0;35m>demo$> \\e[0m\\e]133;B\\a\"\n  - delay: 497\n    content: m\n  - delay: 79\n    content: o\n  - delay: 32\n    content: r\n  - delay: 89\n    content: e\n  - delay: 95\n    content: ' '\n  - delay: 280\n    content: h\n  - delay: 96\n    content: p\n  - delay: 64\n    content: o\n  - delay: 281\n    content: .\n  - delay: 184\n    content: p\n  - delay: 111\n    content: 'y'\n  - delay: 248\n    content: \"\\r\\n\"\n  - delay: 13\n    content: \"\\e]133;C;\\a\\e[?1h\\e=\\r#!/usr/bin/env python\\r\\n# Demonstration code for 1D function, centered around a=1\\r\\nfrom time import sleep\\r\\n\\r\\n\\r\\ndef demo_func(x, a=1, b=0):\\r\\n    sleep(1)\\r\\n    return (x-a)*(x-a)+b\\r\\n\\r\\n\\r\\ndef aup_wrapper(config):\\r\\n    res = demo_func(x=config['x']) \\r\\n    print_result(res)\\r\\n\\r\\nif __name__ == \\\"__main__\\\":\\r\\n    import sys\\r\\n    from aup import BasicConfig, print_result\\r\\n    if len(sys.argv) != 2:\\r\\n        print(\\\"config file required\\\")\\r\\n        exit(1)\\r\\n    config = BasicConfig().load(sys.argv[1])\\r\\n    aup_wrapper(config)\\r\\n\\e[7mhpo.py (END)\\e[m\\e[K\"\n  - delay: 2905\n    content: \"\\r\\e[K\\e[?1l\\e>\"\n  - delay: 5\n    content: \"\\e]1337;RemoteHost=local\\a\\e]1337;CurrentDir=./Examples/demo\\a\\e]133;D;0\\a\\e]133;A\\a\\e[0;35m>demo$> \\e[0m\\e]133;B\\a\"\n  - delay: 808\n    content: p\n  - delay: 160\n    content: 'y'\n  - delay: 96\n    content: t\n  - delay: 120\n    content: h\n  - delay: 72\n    content: o\n  - delay: 136\n    content: 'n'\n  - delay: 127\n    content: ' '\n  - delay: 129\n    content: '-'\n  - delay: 215\n    content: m\n  - delay: 129\n    content: ' '\n  - delay: 327\n    content: a\n  - delay: 113\n    content: u\n  - delay: 103\n    content: p\n  - delay: 265\n    content: .\n  - delay: 1072\n    content: \"\\b\\e[K\"\n  - delay: 96\n    content: ' '\n  - delay: 1023\n    content: e\n  - delay: 216\n    content: x\n  - delay: 105\n    content: p\n  - delay: 127\n    content: e\n  - delay: 120\n    content: r\n  - delay: 152\n    content: i\n  - delay: 129\n    content: 'ment.json '\n  - delay: 816\n    content: \"\\r\\n\"\n  - delay: 21\n    content: \"\\e]133;C;\\a\"\n  - delay: 120\n    content: \"\\e[32m2019-07-25 14:34:52\\e[0m - \\e[34mroot\\e[0m - \\e[1;30mINFO\\e[0m - Using default user jason.liu\\r\\n\\e[32m2019-07-25 14:34:52\\e[0m - \\e[34maup.utils\\e[0m - \\e[1;30mINFO\\e[0m - Auptimizer environment at .aup\\r\\n\"\n  - delay: 5\n    content: \"\\e[32m2019-07-25 14:34:52\\e[0m - \\e[34maup.utils\\e[0m - \\e[1;30mINFO\\e[0m - Use default connector at .aup/sqlite3.db\\r\\n\"\n  - delay: 75\n    content: \"\\e[32m2019-07-25 14:34:52\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mINFO\\e[0m - Experiment 1 is created\\r\\n\\e[32m2019-07-25 14:34:52\\e[0m - \\e[34maup\\e[0m - \\e[1;30mINFO\\e[0m - # Running Experiment\\r\\n\\e[32m2019-07-25 14:34:52\\e[0m - \\e[34maup.EE.Job\\e[0m - \\e[1;30mWARNING\\e[0m - \\e[33mUsing default local path for script as ./hpo.py\\e[0m\\r\\n\\e[32m2019-07-25 14:34:52\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mINFO\\e[0m - Submitting job 1 with resource 2 in experiment 1\\r\\n\\e[32m2019-07-25 14:34:52\\e[0m - \\e[34maup.EE.Job\\e[0m - \\e[1;30mWARNING\\e[0m - \\e[33mCreate missing directory ./Examples/demo/jobs\\e[0m\\r\\n\"\n  - delay: 5\n    content: \"\\e[32m2019-07-25 14:34:52\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mINFO\\e[0m - Submitting job 2 with resource 1 in experiment 1\\r\\n\"\n  - delay: 1090\n    content: \"\\e[32m2019-07-25 14:34:54\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mINFO\\e[0m - Job 1 is finished with result 3.041771513051445\\r\\n\\e[32m2019-07-25 14:34:54\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mINFO\\e[0m - Submitting job 3 with resource 3 in experiment 1\\r\\n\\e[32m2019-07-25 14:34:54\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mINFO\\e[0m - Job 2 is finished with result 6.635502080580377\\r\\n\\e[32m2019-07-25 14:34:54\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mINFO\\e[0m - Submitting job 4 with resource 4 in experiment 1\\r\\n\"\n  - delay: 1100\n    content: \"\\e[32m2019-07-25 14:34:55\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mINFO\\e[0m - Job 3 is finished with result 4.0554584276157115\\r\\n\\e[32m2019-07-25 14:34:55\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mINFO\\e[0m - Submitting job 5 with resource 2 in experiment 1\\r\\n\"\n  - delay: 5\n    content: \"\\e[32m2019-07-25 14:34:55\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mINFO\\e[0m - Job 4 is finished with result 2.973610247851776\\r\\n\\e[32m2019-07-25 14:34:55\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mINFO\\e[0m - Submitting job 6 with resource 1 in experiment 1\\r\\n\"\n  - delay: 1100\n    content: \"\\e[32m2019-07-25 14:34:56\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mINFO\\e[0m - Job 5 is finished with result 1.2505367316831435\\r\\n\\e[32m2019-07-25 14:34:56\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mINFO\\e[0m - Submitting job 7 with resource 4 in experiment 1\\r\\n\\e[32m2019-07-25 14:34:56\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mINFO\\e[0m - Job 6 is finished with result 4.970539001687499\\r\\n\\e[32m2019-07-25 14:34:56\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mINFO\\e[0m - Submitting job 8 with resource 3 in experiment 1\\r\\n\"\n  - delay: 1103\n    content: \"\\e[32m2019-07-25 14:34:57\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mINFO\\e[0m - Job 7 is finished with result 1.4111920738895818\\r\\n\\e[32m2019-07-25 14:34:57\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mINFO\\e[0m - Submitting job 9 with resource 1 in experiment 1\\r\\n\\e[32m2019-07-25 14:34:57\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mINFO\\e[0m - Job 8 is finished with result 11.963747115276082\\r\\n\\e[32m2019-07-25 14:34:57\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mINFO\\e[0m - Submitting job 10 with resource 4 in experiment 1\\r\\n\"\n  - delay: 1101\n    content: \"\\e[32m2019-07-25 14:34:58\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mINFO\\e[0m - Job 9 is finished with result 14.579520294401313\\r\\n\\e[32m2019-07-25 14:34:58\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mINFO\\e[0m - Job 10 is finished with result 0.8412697707277041\\r\\n\"\n  - delay: 488\n    content: \"\\e[32m2019-07-25 14:34:58\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mINFO\\e[0m - Finished\\r\\n\\e[32m2019-07-25 14:34:58\\e[0m - \\e[34maup.EE.Experiment\\e[0m - \\e[1;30mCRITICAL\\e[0m - \\e[1;31mBest job (10) with score 0.841270 in experiment 1\\e[0m\\r\\n\"\n  - delay: 37\n    content: \"\\e]1337;RemoteHost=local\\a\\e]1337;CurrentDir=./Examples/demo\\a\\e]133;D;0\\a\\e]133;A\\a\\e[0;35m>demo$> \\e[0m\\e]133;B\\a\"\n  - delay: 2077\n    content: l\n  - delay: 88\n    content: s\n  - delay: 145\n    content: ' '\n  - delay: 167\n    content: j\n  - delay: 72\n    content: o\n  - delay: 96\n    content: b\n  - delay: 169\n    content: s\n  - delay: 135\n    content: \"\\r\\n\"\n  - delay: 13\n    content: \"\\e]133;C;\\a\\e[34m.\\e[m\\e[m       1.json  10.json 2.json  3.json  4.json  5.json  6.json  7.json  8.json  9.json\\r\\n\\e[34m..\\e[m\\e[m      1.out   10.out  2.out   3.out   4.out   5.out   6.out   7.out   8.out   9.out\\r\\n\"\n  - delay: 5\n    content: \"\\e]1337;RemoteHost=local\\a\\e]1337;CurrentDir=./Examples/demo\\a\\e]133;D;0\\a\\e]133;A\\a\\e[0;35m>demo$> \\e[0m\\e]133;B\\a\"\n"
  },
  {
    "path": "Examples/demo/experiment_wrapper.json",
    "content": "{\n  \"name\": \"./demo/experiment_wrapper.json\",\n  \"script\": \"hpo_wrapper.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 2,\n  \"target\": \"min\",\n  \"workingdir\": \"./\",\n  \"proposer\": \"random\",\n  \"n_samples\": 10,\n  \"random_seed\": 0,\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        0,\n        5\n      ],\n      \"type\": \"float\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/demo/hpo_wrapper.py",
    "content": "#!/usr/bin/env python\n# Demonstration code for 1D function, centered around a=1\nfrom time import sleep\nfrom aup import aup_args\nimport sys\n\n@aup_args\ndef demo_func(x, a=1, b=0):\n    sleep(1)\n    return (x-a)*(x-a)+b\n\n\nif __name__ == \"__main__\":\n    demo_func(sys.argv[1])\n"
  },
  {
    "path": "Examples/demo/origin.py",
    "content": "# Demonstration code for 1D function, centered around a=1\nfrom time import sleep\n\n\ndef demo_func(x, a=1, b=0):\n    sleep(1)\n    return (x-a)*(x-a)+b\n\n"
  },
  {
    "path": "Examples/early_stopping/README.md",
    "content": "# Early stopping of jobs\n\n## Usage\n\nIn order to use early stopping to accelerate the HPO experiment,\nwe need to add the following lines in the JSON configuration file:\n\n    \"resource_args\": \n        {\n            \"early_stop\":\n                {\n                    \"aup_policy\": \"X\",\n                    \"aup_policy_steps\": Y\n                    ...\n                }\n        }\n\nX can be bandit, median, truncation or curve_fitting.\nY refers to the interval of epochs/iterations by which the ES policy is applied.\n\nIn order to report intermediate results, \"aup.print_result\" should be called from the user script; e.g. at the end of an epoch, at the end of N iterations, etc.\n\nExamples can be found at Examples/early_stopping/quad_equation_min and Examples/early_stopping/mnist_keras.\n\nAn additional parameter of \"warmup\" can also be used for all ES strategies (default is 0). \"warmup\" defines the number of initial iterations that should finish without an early stopping criterion.\n\n\n## Strategies\n\nWe provide 4 strategies for early stopping: bandit, truncation, median and curve fitting. Please checkout [early stopping document](https://lge-arc-advancedai.github.io/auptimizer/early_stop.html) for detailed usages.\n\n"
  },
  {
    "path": "Examples/early_stopping/mnist_keras/cpu.ini",
    "content": "[Auptimizer]\n# Auptimizer environment folder to be created, this file will be copied over\nAuptimizer_PATH=./.aup\n# Temp folder\nTMP_FOLDER=./aup_tmp\n# SQL engine\nSQL_ENGINE=sqlite\n"
  },
  {
    "path": "Examples/early_stopping/mnist_keras/exp_BOHB_bandit.json",
    "content": "{\n  \"name\": \"./early_stopping/mnist_keras/exp_BOHB_bandit.json\",\n  \"proposer\": \"bohb\",\n  \"script\": \"mnist.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"max\",\n  \"n_iterations\": 50,\n  \"num_samples\": 64,\n  \"random_fraction\": 0.3333333333333333,\n  \"bandwidth_factor\": 3,\n  \"min_bandwidth\": 0.001,\n  \"eta\": 3,\n  \"min_budget\": 1,\n  \"max_budget\": 5,\n  \"resource_args\": \n    {\n      \"early_stop\":\n        {\n          \"aup_policy\": \"bandit\",\n          \"aup_policy_steps\": 10,\n          \"bandit_factor\": 0.5\n        }\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/early_stopping/mnist_keras/exp_BOHB_curve_fitting.json",
    "content": "{\n  \"name\": \"./early_stopping/mnist_keras/exp_BOHB_curve_fitting.json\",\n  \"proposer\": \"bohb\",\n  \"script\": \"mnist.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"max\",\n  \"n_iterations\": 50,\n  \"num_samples\": 64,\n  \"random_fraction\": 0.3333333333333333,\n  \"bandwidth_factor\": 3,\n  \"min_bandwidth\": 0.001,\n  \"eta\": 3,\n  \"min_budget\": 1,\n  \"max_budget\": 5,\n  \"resource_args\": \n    {\n      \"early_stop\":\n        {\n          \"aup_policy\": \"curve_fitting\",\n          \"aup_policy_steps\": 10,\n          \"curve_fitting_max_iters\": 235,\n          \"curve_fitting_threshold\": 0.95,\n          \"curve_fitting_timeout\": 60\n        }\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/early_stopping/mnist_keras/exp_BOHB_median.json",
    "content": "{\n  \"name\": \"./early_stopping/mnist_keras/exp_BOHB_median.json\",\n  \"proposer\": \"bohb\",\n  \"script\": \"mnist.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"max\",\n  \"n_iterations\": 50,\n  \"num_samples\": 64,\n  \"random_fraction\": 0.3333333333333333,\n  \"bandwidth_factor\": 3,\n  \"min_bandwidth\": 0.001,\n  \"eta\": 3,\n  \"min_budget\": 1,\n  \"max_budget\": 5,\n  \"resource_args\": \n    {\n      \"early_stop\":\n        {\n          \"aup_policy\": \"median\",\n          \"aup_policy_steps\": 10\n        }\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/early_stopping/mnist_keras/exp_BOHB_trunc.json",
    "content": "{\n  \"name\": \"./early_stopping/mnist_keras/exp_BOHB_trunc.json\",\n  \"proposer\": \"bohb\",\n  \"script\": \"mnist.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"max\",\n  \"n_iterations\": 50,\n  \"num_samples\": 64,\n  \"random_fraction\": 0.3333333333333333,\n  \"bandwidth_factor\": 3,\n  \"min_bandwidth\": 0.001,\n  \"eta\": 3,\n  \"min_budget\": 1,\n  \"max_budget\": 5,\n  \"resource_args\": \n    {\n      \"early_stop\":\n        {\n          \"aup_policy\": \"truncation\",\n          \"aup_policy_steps\": 10,\n          \"truncation_percentage\": 0.3\n        }\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/early_stopping/mnist_keras/exp_random_bandit.json",
    "content": "{\n  \"name\": \"./early_stopping/mnist_keras/exp_random_bandit.json\",\n  \"proposer\": \"random\",\n  \"script\": \"mnist.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"max\",\n  \"n_samples\": 50,\n  \"resource_args\": \n    {\n      \"early_stop\":\n        {\n          \"aup_policy\": \"bandit\",\n          \"aup_policy_steps\": 10,\n          \"bandit_factor\": 0.5\n        }\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/early_stopping/mnist_keras/exp_random_curve_fitting.json",
    "content": "{\n  \"name\": \"./early_stopping/mnist_keras/exp_random_curve_fitting.json\",\n  \"proposer\": \"random\",\n  \"script\": \"mnist.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"max\",\n  \"n_samples\": 50,\n  \"resource_args\": \n    {\n      \"early_stop\":\n        {\n          \"aup_policy\": \"curve_fitting\",\n          \"aup_policy_steps\": 10,\n          \"curve_fitting_max_iters\": 235,\n          \"curve_fitting_threshold\": 0.95,\n          \"curve_fitting_timeout\": 60\n        }\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/early_stopping/mnist_keras/exp_random_median.json",
    "content": "{\n  \"name\": \"./early_stopping/mnist_keras/exp_random_median.json\",\n  \"proposer\": \"random\",\n  \"script\": \"mnist.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"max\",\n  \"n_samples\": 50,\n  \"resource_args\": \n    {\n      \"early_stop\":\n        {\n          \"aup_policy\": \"median\",\n          \"aup_policy_steps\": 10\n        }\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/early_stopping/mnist_keras/exp_random_trunc.json",
    "content": "{\n  \"name\": \"./early_stopping/mnist_keras/exp_random_trunc.json\",\n  \"proposer\": \"random\",\n  \"script\": \"mnist.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"max\",\n  \"n_samples\": 50,\n  \"resource_args\": \n    {\n      \"early_stop\":\n        {\n          \"aup_policy\": \"truncation\",\n          \"aup_policy_steps\": 10,\n          \"truncation_percentage\": 0.3\n        }\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/early_stopping/mnist_keras/exp_spearmint_bandit.json",
    "content": "{\n  \"name\": \"./early_stopping/mnist_keras/exp_spearmint_bandit.json\",\n  \"proposer\": \"spearmint\",\n  \"script\": \"mnist.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"max\",\n  \"engine\":\"GPEIChooser\",\n  \"n_samples\": 50,\n  \"resource_args\": \n    {\n      \"early_stop\":\n        {\n          \"aup_policy\": \"bandit\",\n          \"aup_policy_steps\": 10,\n          \"bandit_factor\": 0.5\n        }\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/early_stopping/mnist_keras/exp_spearmint_curve_fitting.json",
    "content": "{\n  \"name\": \"./early_stopping/mnist_keras/exp_spearmint_curve_fitting.json\",\n  \"proposer\": \"spearmint\",\n  \"script\": \"mnist.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"max\",\n  \"engine\":\"GPEIChooser\",\n  \"n_samples\": 50,\n  \"resource_args\": \n    {\n      \"early_stop\":\n        {\n          \"aup_policy\": \"curve_fitting\",\n          \"aup_policy_steps\": 10,\n          \"curve_fitting_max_iters\": 235,\n          \"curve_fitting_threshold\": 0.95,\n          \"curve_fitting_timeout\": 60\n        }\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/early_stopping/mnist_keras/exp_spearmint_median.json",
    "content": "{\n  \"name\": \"./early_stopping/mnist_keras/exp_spearmint_median.json\",\n  \"proposer\": \"spearmint\",\n  \"script\": \"mnist.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"max\",\n  \"engine\":\"GPEIChooser\",\n  \"n_samples\": 50,\n  \"resource_args\": \n    {\n      \"early_stop\":\n        {\n          \"aup_policy\": \"median\",\n          \"aup_policy_steps\": 10\n        }\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/early_stopping/mnist_keras/exp_spearmint_trunc.json",
    "content": "{\n  \"name\": \"./early_stopping/mnist_keras/exp_spearmint_trunc.json\",\n  \"proposer\": \"spearmint\",\n  \"script\": \"mnist.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"max\",\n  \"engine\":\"GPEIChooser\",\n  \"n_samples\": 50,\n  \"resource_args\": \n    {\n      \"early_stop\":\n        {\n          \"aup_policy\": \"truncation\",\n          \"aup_policy_steps\": 10,\n          \"truncation_percentage\": 0.3\n        }\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/early_stopping/mnist_keras/mnist.py",
    "content": "#!/usr/bin/env python3\n\n\"\"\"\nMNIST convolutional network using Keras\n============================================\n\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\n\nimport aup\n\nimport tensorflow as tf\nimport numpy as np\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\n\nfrom math import log\n\nimport sys\n\nnum_epochs = 5\nbatch_size = 64\nnum_classes = 10\ninput_shape = (28, 28, 1)\n\n# Load example MNIST data and pre-process it\n# the data, split between train and test sets\n(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()\n\n# Scale images to the [0, 1] range\nx_train = x_train.astype(\"float32\") / 255\nx_test = x_test.astype(\"float32\") / 255\n# Make sure images have shape (28, 28, 1)\nx_train = np.expand_dims(x_train, -1)\nx_test = np.expand_dims(x_test, -1)\n\n# convert class vectors to binary class matrices\ny_train = keras.utils.to_categorical(y_train, num_classes)\ny_test = keras.utils.to_categorical(y_test, num_classes)\n\ndef get_flops():\n    run_meta = tf.RunMetadata()\n    opts = tf.profiler.ProfileOptionBuilder.float_operation()\n\n    # We use the Keras session graph in the call to the profiler.\n    flops = tf.profiler.profile(graph=keras.backend.get_session().graph,\n                                run_meta=run_meta, cmd='op', options=opts)\n\n    return flops.total_float_ops  # Prints the \"flops\" of the model.\n  \ndef get_model(**kwargs):\n    model = keras.Sequential(\n      [\n          keras.Input(shape=input_shape),\n          layers.Conv2D(kwargs['conv1'], kernel_size=(3, 3), activation=\"relu\"),\n          layers.MaxPooling2D(pool_size=(2, 2)),\n          layers.Conv2D(kwargs['conv2'], kernel_size=(3, 3), activation=\"relu\"),\n          layers.MaxPooling2D(pool_size=(2, 2)),\n          layers.Flatten(),\n          layers.Dropout(kwargs['dropout']),\n          layers.Dense(num_classes, activation=\"softmax\"),\n      ]\n    )\n\n    model.compile(loss=\"categorical_crossentropy\",\n                optimizer=keras.optimizers.Adam(learning_rate=kwargs['learning_rate']),\n                metrics=[\"accuracy\"])\n\n    return model\n\nclass CustomCallback(keras.callbacks.Callback):\n    flops = None\n\n    def on_train_batch_end(self, batch, logs=None):\n      if batch % 10 == 0:\n        val_acc = logs[\"acc\"]\n        aup.print_result((val_acc-1.0) / (log(self.flops)))\n\n    def on_train_begin(self, logs=None):\n      self.flops = get_flops()\n\ndef init(**kwargs):\n  global model\n  model = get_model(**kwargs)\n\n@aup.aup_args\ndef do_train(learning_rate=0.001, dropout=0.1, conv1=32, conv2=64):\n  global model\n\n  model.fit(\n    x_train,\n    y_train,\n    batch_size=batch_size,\n    epochs=num_epochs,\n    verbose=1,\n    validation_split=0.5,\n    callbacks=[CustomCallback()],\n  )\n\n  res = model.evaluate(\n    x_test,\n    y_test,\n    batch_size=batch_size,\n    verbose=1,\n  )\n\n  flops = get_flops()\n\n  return (res[1]-1.0) / log(flops)\n\n\nif __name__ == '__main__':\n\n  if len(sys.argv) < 2:\n      print(\"config file required\")\n      exit(1)\n\n  do_train(sys.argv[1])\n\n"
  },
  {
    "path": "Examples/early_stopping/quad_equation_min/cpu.ini",
    "content": "[Auptimizer]\n# Auptimizer environment folder to be created, this file will be copied over\nAuptimizer_PATH=./.aup\n# Temp folder\nTMP_FOLDER=./aup_tmp\n# SQL engine\nSQL_ENGINE=sqlite\n"
  },
  {
    "path": "Examples/early_stopping/quad_equation_min/quad_min.py",
    "content": "#!/usr/bin/env python\n\"\"\"\nModified Rosenbrock function for HPO and aup\n============================================\n\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\n\nimport sys\n\nimport aup\nfrom time import sleep\n\ndef rosenbrock(x, a=2, b=4, c=5):\n    sleep(1)\n    \n    it = 1.0\n    for _ in range(10):\n        res = x*x*a + x*b + c\n        res += it\n        it -= 1.0 / 10\n        aup.print_result(res)\n\n\nif __name__ == \"__main__\":\n    if len(sys.argv) != 2:\n        print(\"config file required\")\n        exit(1)\n    config = aup.BasicConfig().load(sys.argv[1])\n    rosenbrock(config['x'])\n"
  },
  {
    "path": "Examples/early_stopping/quad_equation_min/quad_min_BOHB_bandit.json",
    "content": "{\n  \"name\": \"./early_stopping/quad_equation_min/quad_min_BOHB_bandit.json\",\n  \"proposer\": \"bohb\",\n  \"script\": \"quad_min.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"min\",\n  \"n_iterations\": 100,\n  \"num_samples\": 64,\n  \"random_fraction\": 0.3333333333333333,\n  \"bandwidth_factor\": 3,\n  \"min_bandwidth\": 0.001,\n  \"eta\": 3,\n  \"min_budget\": 1,\n  \"max_budget\": 5,\n  \"resource_args\": \n    {\n      \"early_stop\":\n        {\n          \"aup_policy\": \"bandit\",\n          \"aup_policy_steps\": 1,\n          \"bandit_factor\": 0.5\n        }\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [-1.0, 100.0],\n      \"type\": \"float\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/early_stopping/quad_equation_min/quad_min_BOHB_median.json",
    "content": "{\n  \"name\": \"./early_stopping/quad_equation_min/quad_min_BOHB_median.json\",\n  \"proposer\": \"bohb\",\n  \"script\": \"quad_min.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"min\",\n  \"n_iterations\": 100,\n  \"num_samples\": 64,\n  \"random_fraction\": 0.3333333333333333,\n  \"bandwidth_factor\": 3,\n  \"min_bandwidth\": 0.001,\n  \"eta\": 3,\n  \"min_budget\": 1,\n  \"max_budget\": 5,\n  \"resource_args\": \n    {\n      \"early_stop\":\n        {\n          \"aup_policy\": \"median\",\n          \"aup_policy_steps\": 1\n        }\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [-1.0, 100.0],\n      \"type\": \"float\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/early_stopping/quad_equation_min/quad_min_BOHB_trunc.json",
    "content": "{\n  \"name\": \"./early_stopping/quad_equation_min/quad_min_BOHB_trunc.json\",\n  \"proposer\": \"bohb\",\n  \"script\": \"quad_min.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"min\",\n  \"n_iterations\": 100,\n  \"num_samples\": 64,\n  \"random_fraction\": 0.3333333333333333,\n  \"bandwidth_factor\": 3,\n  \"min_bandwidth\": 0.001,\n  \"eta\": 3,\n  \"min_budget\": 1,\n  \"max_budget\": 5,\n  \"resource_args\": \n    {\n      \"early_stop\":\n        {\n          \"aup_policy\": \"truncation\",\n          \"aup_policy_steps\": 1,\n          \"truncation_percentage\": 0.7\n        }\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [-1.0, 100.0],\n      \"type\": \"float\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/early_stopping/quad_equation_min/quad_min_random_bandit.json",
    "content": "{\n  \"name\": \"./early_stopping/quad_equation_min/quad_min_random_bandit.json\",\n  \"proposer\": \"random\",\n  \"script\": \"quad_min.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"min\",\n  \"n_samples\": 200,\n  \"resource_args\": \n    {\n      \"early_stop\":\n        {\n          \"aup_policy\": \"bandit\",\n          \"aup_policy_steps\": 1,\n          \"bandit_factor\": 0.5\n        }\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [-1.0, 100.0],\n      \"type\": \"float\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/early_stopping/quad_equation_min/quad_min_random_median.json",
    "content": "{\n  \"name\": \"./early_stopping/quad_equation_min/quad_min_random_median.json\",\n  \"proposer\": \"random\",\n  \"script\": \"quad_min.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"min\",\n  \"n_samples\": 200,\n  \"resource_args\": \n    {\n      \"early_stop\":\n        {\n          \"aup_policy\": \"median\",\n          \"aup_policy_steps\": 1\n        }\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [-1.0, 100.0],\n      \"type\": \"float\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/early_stopping/quad_equation_min/quad_min_random_trunc.json",
    "content": "{\n  \"name\": \"./early_stopping/quad_equation_min/quad_min_random_trunc.json\",\n  \"proposer\": \"random\",\n  \"script\": \"quad_min.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"min\",\n  \"n_samples\": 200,\n  \"resource_args\": \n    {\n      \"early_stop\":\n        {\n          \"aup_policy\": \"truncation\",\n          \"aup_policy_steps\": 1,\n          \"truncation_percentage\": 0.7\n        }\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [-1.0, 100.0],\n      \"type\": \"float\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/early_stopping/quad_equation_min/quad_min_spearmint_bandit.json",
    "content": "{\n  \"name\": \"./early_stopping/quad_equation_min/quad_min_spearmint_bandit.json\",\n  \"proposer\": \"spearmint\",\n  \"script\": \"quad_min.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"min\",\n  \"n_samples\": 50,\n  \"engine\":\"GPEIChooser\",\n  \"resource_args\": \n    {\n      \"early_stop\":\n        {\n          \"aup_policy\": \"bandit\",\n          \"aup_policy_steps\": 1,\n          \"bandit_factor\": 0.5\n        }\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [-1.0, 100.0],\n      \"type\": \"float\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/early_stopping/quad_equation_min/quad_min_spearmint_median.json",
    "content": "{\n  \"name\": \"./early_stopping/quad_equation_min/quad_min_spearmint_median.json\",\n  \"proposer\": \"spearmint\",\n  \"script\": \"quad_min.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"min\",\n  \"n_samples\": 50,\n  \"engine\":\"GPEIChooser\",\n  \"resource_args\": \n    {\n      \"early_stop\":\n        {\n          \"aup_policy\": \"median\",\n          \"aup_policy_steps\": 1\n        }\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [-1.0, 100.0],\n      \"type\": \"float\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/early_stopping/quad_equation_min/quad_min_spearmint_trunc.json",
    "content": "{\n  \"name\": \"./early_stopping/quad_equation_min/quad_min_spearmint_trunc.json\",\n  \"proposer\": \"spearmint\",\n  \"script\": \"quad_min.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"min\",\n  \"n_samples\": 50,\n  \"engine\":\"GPEIChooser\",\n  \"resource_args\": \n    {\n      \"early_stop\":\n        {\n          \"aup_policy\": \"truncation\",\n          \"aup_policy_steps\": 1,\n          \"truncation_percentage\": 0.7\n        }\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [-1.0, 100.0],\n      \"type\": \"float\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/hpo_mnist/.gitignore",
    "content": "input_data/\n.aup/\n__pycache__/\nlogs/\n"
  },
  {
    "path": "Examples/hpo_mnist/MNIST Hyperparameter Optimization Demo.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# MNIST Hyperparameter Optimization Demo\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The MNIST database of handwritten digits, available publicly, has a training set of 60,000 examples, and a test set of 10,000 examples. The digits have been size-normalized and centered in a fixed-size image.\\n\",\n    \"It is a good database for people who want to experiment on learning techniques and pattern recognition methods on real-world data while spending minimal efforts on preprocessing and formatting. For these reasons, MNIST is a very popular baseline dataset for AI researchers exploring effectiveness of their Neural Network architectures, hyperparameter tuning or optimization techniques.\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"In this tutorial we will show how to perform Hyperparameter Optimization on MNIST using LeNet (http://yann.lecun.com/exdb/lenet/), a basic and popular neural network.  \\n\",\n    \"We modify a public implementation (https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/convolutional_network.py\\n\",\n    \"), to find the best hyperparameter configuration for LeNet. We also demonstrate how to effectively switch between various HPO proposers such as Spearmint and Hyperband.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Running the Experiments \"\n   ]\n  },\n  {\n   \"attachments\": {},\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"We use the ‘mnist_hpo_demo.py’ file to accept hyperparameters from Auptimizer and run an Experiment. Since the values of the hyperparameters can widely swing the performance of the classification algorithm, finding an optimal configuration is very important. We define the range of hyperparameters for Auptimizer to consider in ‘exp_hpo_demo.json’. We choose the following hyperparameter ranges to optimize –\\n\",\n    \"\\n\",\n    \"1) Learning Rate: [ 0.001, 0.01 ]\\n\",\n    \"\\n\",\n    \"2) Dropout Probability: [ 0.0, 0.5 ]\\n\",\n    \"\\n\",\n    \"3) 1st layer Convolution filters: [ 20, 50 ]\\n\",\n    \"\\n\",\n    \"4) 2nd Layer Convolution filters: [ 40, 80 ]\\n\",\n    \"\\n\",\n    \"5) Fully Connected layer size: [ 700, 2000 ]\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"While we iterate over different Proposer algorithms.\\n\"\n   ]\n  },\n  {\n   \"attachments\": {},\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Each instance of 'mnist_hpo_demo.py' would accept an experiment configuration of hyperparameters, train the defined neural network, evaluate the network, and return the final performance statistics. The ‘exp_hpo_demo.json’ file contains code to perform HPO using AWS resources and consider 100 samples for each proposer. We can easily switch between proposers and see how they choose different configurations to optimize the final performance.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"To run the experiment use command- \\n\",\n    \"\\n\",\n    \"'python3 -m aup exp_hpo_demo.json' \\n\",\n    \"\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Analysis \"\n   ]\n  },\n  {\n   \"attachments\": {},\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"We next analyze the experiment results using the sqlite database for our experiments. The details for the experiment can be found inn the jobs profile, but here we aim to compare the proposers. Experiment 1 is performed using Grid Search, and Random, Spearmint, Hyperband, Hyperopt Proposers for Experiments 2,3,4 and 5 respectively.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 26,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"'''\\n\",\n    \"Connect to the Auptimizer database\\n\",\n    \"''' \\n\",\n    \"\\n\",\n    \"import sqlite3\\n\",\n    \"import time\\n\",\n    \"import datetime\\n\",\n    \"import random\\n\",\n    \"\\n\",\n    \"conn = sqlite3.connect('sqlite3.db')\\n\",\n    \"c = conn.cursor()\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"'''\\n\",\n    \"Function to compile and return details from a Auptimizer experiment. \\n\",\n    \"Takes experiment id as input, returns score, jobs ran for the experiments, and end time for each job.\\n\",\n    \"''' \\n\",\n    \"\\n\",\n    \"def graph_data(ex):\\n\",\n    \"    c.execute('SELECT score, jid, end_time FROM job WHERE eid = '+ str(ex))\\n\",\n    \"    data = c.fetchall()\\n\",\n    \"\\n\",\n    \"    jobs = []\\n\",\n    \"    score = []\\n\",\n    \"    times =[]\\n\",\n    \"    \\n\",\n    \"    for row in data:\\n\",\n    \"        times.append(row[2])\\n\",\n    \"        jobs.append(row[1])\\n\",\n    \"        score.append(row[0])\\n\",\n    \"\\n\",\n    \"    times = [a-min(times) for a in times] \\n\",\n    \"    jobs = [a-min(jobs) for a in jobs]\\n\",\n    \"    \\n\",\n    \"    print(score)\\n\",\n    \"    print(jobs)\\n\",\n    \"    \\n\",\n    \"    return (score, times, jobs)\\n\",\n    \"    \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 15,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[0.9895, 0.9893, 0.9677, 0.9602, 0.9852, 0.9886, 0.9685, 0.9698, 0.9899, 0.9908, 0.9738, 0.9701, 0.9911, 0.9899, 0.9699, 0.9699, 0.9875, 0.9907, 0.9672, 0.9697, 0.9892, 0.9901, 0.9597, 0.9636, 0.9898, 0.9914, 0.9755, 0.9628, 0.9914, 0.9892, 0.9693, 0.9737, 0.9904, 0.992, 0.9691, 0.9591, 0.9898, 0.9873, 0.9662, 0.9525, 0.9815, 0.9892, 0.9613, 0.951, 0.9905, 0.9892, 0.9722, 0.9591, 0.9876, 0.9922, 0.9446, 0.9528, 0.9883, 0.9898, 0.9641, 0.9619, 0.9905, 0.9893, 0.9697, 0.9629, 0.9891, 0.9908, 0.976, 0.954, 0.9911, 0.9892, 0.9598, 0.9606, 0.9878, 0.9883, 0.9621, 0.9584, 0.9871, 0.9901, 0.9663, 0.956, 0.9896, 0.9869, 0.9628, 0.9437, 0.9908, 0.9885, 0.9543, 0.9586, 0.9874, 0.9905, 0.9665, 0.9712, 0.9912, 0.9902, 0.9665, 0.9494, 0.9897, 0.9903, 0.9603, 0.9562, 0.9853, 0.9894, 0.9614, 0.9498, 0.9889, 0.9907, 0.9595, 0.9494, 0.9899, 0.9891, 0.9627, 0.9544]\\n\",\n      \"[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107]\\n\",\n      \"[0.9619, 0.9742, 0.9828, 0.9662, 0.983, 0.9693, 0.9753, 0.9749, 0.9682, 0.9758, 0.9672, 0.9834, 0.9834, 0.9764, 0.9711, 0.9835, 0.9712, 0.9721, 0.973, 0.9769, 0.9898, 0.9687, 0.9678, 0.977, 0.9603, 0.9868, 0.9759, 0.9739, 0.9611, 0.9891, 0.9752, 0.9729, 0.978, 0.9828, 0.9913, 0.9774, 0.9657, 0.9671, 0.9667, 0.9791, 0.9742, 0.9649, 0.9812, 0.9289, 0.9847, 0.9828, 0.9875, 0.9572, 0.9715, 0.9867, 0.9771, 0.9885, 0.9789, 0.981, 0.9705, 0.9863, 0.9877, 0.9851, 0.9746, 0.9549, 0.9886, 0.9867, 0.9781, 0.964, 0.9679, 0.9641, 0.9631, 0.9904, 0.9864, 0.9709, 0.9701, 0.9602, 0.9897, 0.9878, 0.9747, 0.9912, 0.9648, 0.9821, 0.9842, 0.9841, 0.9709, 0.9722, 0.9774, 0.9819, 0.9698, 0.9647, 0.9802, 0.9668, 0.9766, 0.9811, 0.9837, 0.9871, 0.9708, 0.9727, 0.9826, 0.9768, 0.9554, 0.9612, 0.9824, 0.9801]\\n\",\n      \"[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]\\n\",\n      \"[0.9886, 0.9869, 0.9802, 0.9821, 0.9686, 0.977, 0.9865, 0.9705, 0.9627, 0.9614, 0.9912, 0.986, 0.9685, 0.9595, 0.9877, 0.9904, 0.9897, 0.9575, 0.9849, 0.983, 0.9874, 0.9662, 0.9892, 0.9903, 0.9914, 0.9731, 0.9896, 0.9892, 0.9586, 0.9882, 0.9686, 0.9742, 0.9623, 0.9891, 0.9878, 0.9906, 0.9899, 0.9869, 0.9874, 0.9825, 0.9699, 0.9891, 0.9879, 0.9863, 0.9911, 0.9906, 0.9844, 0.9834, 0.9919, 0.9727, 0.9884, 0.9832, 0.9643, 0.9889, 0.964, 0.9888, 0.988, 0.9882, 0.9838, 0.9851, 0.9893, 0.9909, 0.9821, 0.9907, 0.9757, 0.9867, 0.9874, 0.97, 0.9908, 0.9892, 0.985, 0.9891, 0.9901, 0.988, 0.9886, 0.9837, 0.988, 0.9662, 0.9735, 0.9882, 0.9891, 0.9899, 0.9897, 0.9903, 0.9933, 0.9891, 0.9875, 0.9884, 0.9912, 0.9908, 0.9913, 0.9901, 0.9813, 0.9877, 0.9887, 0.9874, 0.9907, 0.9895, 0.9884, 0.987]\\n\",\n      \"[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]\\n\",\n      \"[0.9865, 0.9888, 0.9604, 0.9827, 0.9897, 0.9713, 0.9831, 0.9824, 0.9876, 0.9786, 0.9817, 0.9782, 0.9631, 0.9725, 0.9708, 0.987, 0.9544, 0.9729, 0.9849, 0.9894, 0.9905, 0.9871, 0.9675, 0.952, 0.985, 0.9791, 0.9754, 0.9677, 0.969, 0.9712, 0.9767, 0.9719, 0.9631, 0.9851, 0.9787, 0.9724, 0.9738, 0.9822, 0.9435, 0.9738, 0.9748, 0.9775, 0.9859, 0.9863, 0.9764, 0.9736, 0.9759, 0.9724, 0.9857, 0.9821, 0.98, 0.9832, 0.9766, 0.9617, 0.9837, 0.9778, 0.9794, 0.9891, 0.9774, 0.9742, 0.9705, 0.9852, 0.9625, 0.9809, 0.9838, 0.9518, 0.9797, 0.9771, 0.973, 0.9747, 0.9849, 0.989, 0.9758, 0.9666, 0.9658, 0.9799, 0.9489, 0.9776, 0.9831, 0.9736, 0.9851, 0.9844, 0.9885, 0.9896, 0.9846, 0.9896, 0.9883, 0.9891, 0.9881, 0.9888, 0.9866, 0.9875, 0.9854, 0.9851, 0.9885, 0.9885, 0.9861, 0.9753, 0.9742, 0.9859, 0.9887, 0.9823, 0.9811, 0.9839, 0.9774, 0.9837, 0.9868, 0.9752, 0.9899, 0.9882, 0.9881, 0.9882, 0.9886, 0.987, 0.9887, 0.9871, 0.9884, 0.9911, 0.9901, 0.9852, 0.9878, 0.9788, 0.9701, 0.9858, 0.9871, 0.9871, 0.9834, 0.9845, 0.9725, 0.9873, 0.9851, 0.972, 0.9701, 0.986, 0.9645, 0.9909, 0.9878, 0.9883, 0.984, 0.9719, 0.9644, 0.9727, 0.9645]\\n\",\n      \"[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142]\\n\",\n      \"[0.9682, 0.9748, 0.987, 0.9662, 0.9826, 0.9829, 0.9693, 0.9435, 0.9792, 0.9882, 0.9818, 0.9792, 0.9751, 0.9765, 0.9747, 0.9896, 0.9624, 0.9741, 0.9804, 0.975, 0.9903, 0.9875, 0.9865, 0.9876, 0.9858, 0.9898, 0.9875, 0.9865, 0.9814, 0.9873, 0.9876, 0.9867, 0.9857, 0.9557, 0.9832, 0.9846, 0.9835, 0.9823, 0.9764, 0.9761, 0.9642, 0.9882, 0.9911, 0.9677, 0.9826, 0.9866, 0.9754, 0.9852, 0.9815, 0.9902, 0.9678, 0.9712, 0.9862, 0.985, 0.9896, 0.9891, 0.9836, 0.9747, 0.9769, 0.9672, 0.9764, 0.9837, 0.988, 0.9845, 0.9831, 0.9907, 0.9913, 0.9883, 0.9905, 0.9845, 0.986, 0.9825, 0.9848, 0.9847, 0.9897, 0.9867, 0.9886, 0.9897, 0.9768, 0.9862, 0.9827, 0.9846, 0.9881, 0.9841, 0.9793, 0.9769, 0.9852, 0.9856, 0.9825, 0.9881, 0.9859, 0.9676, 0.9856, 0.9918, 0.9835, 0.9662, 0.9874, 0.9758, 0.9889, 0.9735]\\n\",\n      \"[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"'''\\n\",\n    \"Compile results for grid search, random, spearmint, hyperband, hyperopt Proposers\\n\",\n    \"''' \\n\",\n    \"\\n\",\n    \"s_gri, t_gri, j_gri = graph_data(1)\\n\",\n    \"s_ran, t_ran, j_ran = graph_data(2)\\n\",\n    \"s_spe, t_spe, j_spe = graph_data(3)\\n\",\n    \"s_hpb, t_hpb, j_hpb = graph_data(4)\\n\",\n    \"s_opt, t_opt, j_opt = graph_data(5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Visualization\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"We can easily visualize the performance of the hyperparameter optimization algorithms for our current experiment and how configurations can affect the final performance. In the plots below we compare job performance and time with accuracy achieved. \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 23,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<Figure size 1440x1080 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"'''\\n\",\n    \"Plots for the experiment results\\n\",\n    \"'''\\n\",\n    \"\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"\\n\",\n    \"plt.figure(figsize=(20,15))\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"plt.plot(j_gri[:100], s_gri[:100])\\n\",\n    \"plt.plot(j_ran, s_ran)\\n\",\n    \"plt.plot(j_spe, s_spe)\\n\",\n    \"plt.plot(j_hpb[:100], s_hpb[:100])\\n\",\n    \"plt.plot(j_opt, s_opt)\\n\",\n    \"\\n\",\n    \"plt.legend(['y = grid','y = random', 'y = spearmint', 'y = hyperband', 'y = hyperopt'], loc='upper left')\\n\",\n    \"\\n\",\n    \"plt.title('Hyperparameter Optimization using various proposers on MNIST')\\n\",\n    \"plt.xlabel('Jobs')\\n\",\n    \"plt.ylabel('Accuracy')\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 24,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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/lzu/TNmzCAiIoK5c+ditVqJjIwkKiqqVLvhw4eTlZVVavmCBQsYNWpUsWV///vf+emnn2jTpg3p6en25VFRURw4cAB/f38GDhzI2LFjCQgIYMWKFWzbtg0vLy/mzJnDsmXLmDp1Ki+//DJNmzalsLCQkSNHsn//fsLCwgAICgrit99+A+D999/H29ub3bt3s2jRIsaPH090dDRNmzalc+fOPPHEEwQFBRUb4549ezh48CCtW7fmuuuuY9u2bTz22GP861//YuPGjQQHBzu/k4UQQgghhBCiDDnmHKLOR3Fvj3sJ8AqgS+MukvEkRB1UbwJP7hASEkJQUBB79uwhMTGRfv36lQrSAGzZssXpPq+77jqmT5/O3XffTUREhH356NGj7X1HRESwdetWPD09iY6OZuDAgQDk5eXRvHlzAL744gs+/PBDLBYL58+f59ChQ/bA06RJk4qtc9y4cQD07t2bXr160apVKwA6depEbGxsqW0aNGgQbdu2BaBv377ExMRw/fXXO72NQgghhBBCCFGZree2YraaCW9vzKjo06wPP57+Eau24qFkco8QdUW9CTxVlJnkSjNnzmTJkiUkJCQwY8aMMttUJePp/fff59dff+W7777j2muvJTrauGSoUqpYO6UUWmumTZvGK6+8Uuy+06dPs2DBAnbt2kWTJk2YPn06+fn59vsDAgKKtffx8QHAw8PDfrvob4vFUmrcjm1MJlOZbYQQQgghhBCiJjbGbqSJTxP6NusLQFizMFYeW8npjNN0btzZzaMTQhSpN4End5kwYQLz58/HbDazfPnyMttUJePp5MmTDB48mMGDB/PDDz8QGxsLwLp160hNTcXPz4/Vq1fzySef4O/vz/jx43niiSdo3rw5qampZGVlkZmZSUBAAIGBgSQmJvLDDz8wYsSI2tjcCjVs2JCsrCyZaieEEEIIIYSoEbPVzOa4zdzU7iZMHibAyHgCo8C4BJ6EqDsk8ORi3t7ehIeH07hxY0wmU437e/rppzl+/Dhaa0aOHEmfPn3Yu3cvgwYNYuLEicTFxXHfffcxYMAAAF566SXGjBmD1WrFy8uLd999lyFDhtCvXz969OhBu3btuO6662o8LmfMmjWLW265hdatW7Nx48bLsk4hhBBCCCHE1ee3xN/IKsiyT7MD6NCoA428G7Hvwj4mdJ3gxtEJIRwprbW7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\\n\",\n      \"text/plain\": [\n       \"<Figure size 1440x1080 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"'''\\n\",\n    \"Plots for the experiment results\\n\",\n    \"'''\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"\\n\",\n    \"plt.figure(figsize=(20,15))\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"plt.plot(t_gri[:100], s_gri[:100])\\n\",\n    \"plt.plot(t_ran, s_ran)\\n\",\n    \"plt.plot(t_spe, s_spe)\\n\",\n    \"plt.plot(t_hpb[:100], s_hpb[:100])\\n\",\n    \"plt.plot(t_opt, s_opt)\\n\",\n    \"\\n\",\n    \"plt.legend(['y = grid','y = random', 'y = spearmint', 'y = hyperband', 'y = hyperopt'], loc='upper left')\\n\",\n    \"\\n\",\n    \"plt.title('Hyperparameter Optimization using various proposers on MNIST')\\n\",\n    \"plt.xlabel('Time')\\n\",\n    \"plt.ylabel('Accuracy')\\n\",\n    \"\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 25,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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f//9LFy4kPj4+AJHG5Vk5FNhQkJCrjiniIiIiIiIiMiVUvHJRWPGjGHGjBlkZmayePHifNuUZORT3759efvttxk/fjxLliwp1j4DBw7kn//8J5MmTeLEiROsXr2au+++u9jPKSIiIiIiIiJSGBWfXFSjRg2GDBlCWFgYvr6+V93frFmzmDBhAs899xw33XQToaGhRe4zZswYVq1aRVRUFC1atKBfv35XnUNERERERERE5CIVn1zk8XjYsGEDy5YtK5X+mjZtyoYNGzDGsGTJEvbs2QPA4MGDGTx48CVtz549C4Axhrlz55bK84uIiIiIiIiI5KXik0t27tzJrbfeypgxY4iMjCyVPjdt2sQjjzyCtZawsDDmz59fKv2KiIiIiIiIiFwpFZ9cEhUVxYEDB0q1zwEDBvDdd9+Vap8iIiIiIiIiIlfDx+0AIiIiIiIiIiJSdan4JCIiIiIiIiIiZUbFJxERERERERERKTMqPomIiIiIiIiISJlR8UkKtHDhQh555BG3Y4iIiIiIiIhIJabiUxWVlZXldgQRERERERERERWf3DJjxgxmzZqV8/NTTz3F7Nmzr6rPyZMn89BDD9GnTx+efPJJNm7cSL9+/ejevTv9+/dnz549gDOiKTo6mptuuonIyEiefPLJnD4WLFhAu3bt6N27N1999VXO9tjYWIYOHUqXLl0YNmwYhw8fznnOhx9+mL59+9K6dWvWrFnDlClT6NixI5MnT76q4xERERERERGRys/P7QAVwse/gvjvS7fPRp3h5v8r8OEpU6YQHR3NtGnT8Hg8LFmyhI0bN17WbsCAAaSmpl62febMmQwfPvyy7XFxcaxfvx5fX1/OnDnD2rVr8fPz47PPPuM3v/kNb7/9NgBbt25ly5YtBAQE0L59ex599FH8/Px4+umn2bRpE6GhoQwZMoTu3bsD8OijjzJp0iQmTZrE/Pnz+dnPfsaKFSsASEpK4uuvv+a9995j5MiRfPXVV7zyyiv06tWLrVu30q1btys6hSIiIiIiIiJS+an45JKIiAjCw8PZsmULCQkJdO/enfDw8MvarV27tkT93n777fj6+gKQkpLCpEmT2Lt3L8YYMjMzc9oNGzaM0NBQAKKiojh06BCnTp1i8ODB1K9fH4Dx48fzww8/APD111/zn//8B4B77733ktFSt912G8YYOnfuTMOGDencuTMAnTp1IjY2VsUnERERERERkWpMxScodIRSWbr//vtZuHAh8fHxTJkyJd82JR35FBISkvP97373O4YMGcI777xDbGwsgwcPznksICAg53tfX9+rWiPqYl8+Pj6X9Ovj46O1p0RERERERESqORWfXDRmzBhmzJhBZmYmixcvzrdNSUc+5ZaSkkLTpk0BZ52novTp04fHHnuM06dPU7t2bZYtW0bXrl0B6N+/P0uWLOHee+/ljTfeYMCAAVecS0RERERERESqDxWfXFSjRg2GDBlCWFhYzlS50vTkk08yadIknn32WUaMGFFk+8aNG/PMM8/Qr18/wsLCLpku9/e//50f//jH/L//9/+oX78+CxYsKPW8IiIiIiIiIlL1GGut2xnKXM+ePW1MTMwl23bt2kXHjh1dSuTweDz06NGDZcuWERkZ6WqWyqIivG4iIiIiIiIiAsaYTdbankW18ymPMHK5nTt30rZtW4YNG6bCk4iIiIiIiIhUWZp255KoqCgOHDjgdgwRERERERERkTKl4pOIiIiIiIhUe5meTGLiY8jy6I7dUraC/ILo2ajImWpViopPIiIiIiIiUu29s/cd/rjhj27HkGogonYE74953+0Y5UrFJxEREREREan2Vh5aScvaLfnT9X9yO4pUcQG+AW5HKHcqPomIiIiIiEi1dibjDDHxMUzsNJEu9bu4HUekytHd7qTM9e/fv8g2s2bN4vz58+WQRkRERERE5FLr4taRZbMY2mKo21FEqiQVn+SKZGdnF7vt+vXri2yj4pOIiIiIiLhl1ZFV1AuqR+d6nd2OIlIlqfjkkhkzZjBr1qycn5966ilmz559VX0uW7aMa665hq5duzJw4EAAFi5cyKhRoxg8eDCRkZH8/ve/z2m/aNEievfuTbdu3XjwwQdzCkoPP/wwPXv2pFOnTjz99NM57SMiIvjlL39Jjx49WLZsGYMHD2b69On07NmTjh078u233xIdHU1kZCS//e1vc/arWbMmAGvWrGHw4MGMGzeODh06cM8992CtZc6cORw7dowhQ4YwZMiQqzoHIiIiIiIiJZGRncG6o+sY1GwQPkYfkUXKgtZ8Av688c/sTtxdqn12qNuBX/b+ZYGPT5kyhejoaKZNm4bH42HJkiVs3LjxsnYDBgwgNTX1su0zZ85k+PDhl2z7wx/+wH//+1+aNm1KcnJy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\\n\",\n      \"text/plain\": [\n       \"<Figure size 1440x1080 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"'''\\n\",\n    \"Plots for the experiment results\\n\",\n    \"'''\\n\",\n    \"\\n\",\n    \"def max_so_far(arr):\\n\",\n    \"    mmax=-1\\n\",\n    \"    new_arr=[]\\n\",\n    \"    for _,x in enumerate(arr):\\n\",\n    \"        if x>mmax:\\n\",\n    \"            mmax=x\\n\",\n    \"        new_arr.append(mmax)\\n\",\n    \"    return new_arr\\n\",\n    \"\\n\",\n    \"plt.figure(figsize=(20,15))\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"plt.plot(j_gri[:100], max_so_far(s_gri[:100]))\\n\",\n    \"plt.plot(j_ran, max_so_far(s_ran))\\n\",\n    \"plt.plot(j_spe, max_so_far(s_spe))\\n\",\n    \"plt.plot(j_hpb[:100], max_so_far(s_hpb[:100]))\\n\",\n    \"plt.plot(j_opt, max_so_far(s_opt))\\n\",\n    \"\\n\",\n    \"plt.legend(['y = grid','y = random', 'y = spearmint', 'y = hyperband', 'y = hyperopt'], loc='upper left')\\n\",\n    \"\\n\",\n    \"plt.title('Hyperparameter Optimization using various proposers on MNIST')\\n\",\n    \"plt.xlabel('Jobs')\\n\",\n    \"plt.ylabel('Max Accuracy')\\n\",\n    \"\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.7.3\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "Examples/hpo_mnist/README.md",
    "content": "# HPO on MNIST data using Auptimizer\n\nThis folder contains demonstrating how to use Auptimizer for Hyperparameter Optimization on the MNIST dataset.\nThe original source code is from [Tensorflow Tutorial](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/tutorials/mnist).\nWe modified `mnist_with_summaries.py` to use **Auptimizer** for model tuning.\n\n**Tensorflow** package is needed for this demo.  \nUsing the CPU version will slow down the demonstration to more than 1 minute per job, but it should not be a limiting factor.\n\n## Changes\n\nWe need to parse the input for hyperparameter values.  So we add the following lines \nto parse the values original stored in `FLAGS`, which is commonly used in `Tensorflow`\nfor parameter sharing.\n\n\n    config = BasicConfig(**FLAGS.__dict__).load(sys.argv[1])\n    FLAGS.__dict__.update(config)\n    \n    # for hyperband only\n    if \"n_iterations\" in FLAGS:\n    FLAGS.max_steps = int(FLAGS.n_iterations)\n\n## Runtime\n\nFirst, we could test the script with a testing configuration `demo.json`:\n\n    python mnist_hpo.py demo.json\n    \nOnce the script runs smoothly, it will print\n\n    #Auptimizer:0.9592\n    \nAt the end of the run.\n\nNow it is the time to run **Auptimizer** for a large scale experiment.\nSet up the **Auptimizer**, if you haven't done that by `python -m aup.setup <aup config>`.\nThen run as `python -m aup <experiment.json>`\n\n\nThe following table lists the minor differences in the configuration of HPO algorithms.\n\n\n| Name | Comments |\n| ---- | -------- |\n| Random | `n_samples` specifies the total jobs to run |\n| Sequence | `n` or `interval` specifies the grid for each parameter |\n| Hyperband | `max_iter` specify the total iterations for training and `engine` specify the underneath proposer |\n| BOHB |  Uses many extra parameters. Refer to the documentation for details. |\n| Spearmint | None |\n| Hyperopt | None |\n\n## Analysis\n\n`MNIST Hyperparameter Optimization Demo.ipynb` presents detailed analysis of different HPO proposers under similar experimental settings for mnist.py. \n\n## Additional Examples - Running with AWS and Job failure capabilities.\n\nWe provide further examples to show the full array of Auptimizers capabilities to handle large scale HPO in an asynchronous cloud based distributed setting with job retry and experiment persistence capabilities.\n\n- `exp_aws_demo.json` : Demo experiment to run MNIST HPO using AWS instances. Ensure AWS instances are registered as resources and have the correct working directory.\n- `exp_aws_async.json` : Builds on the demo experiment, with a larger search space using asynchornous connections to AWS instances. Refer to the documentation for more details on async parameters.  \n- `exp_aws_retry_job.json` : Builds on the demo experiment, with a larger search space on AWS instances using job failure and experiment persistence capabilities. Refer to the documentation for more details on job failure parameters.\n\n\n\n"
  },
  {
    "path": "Examples/hpo_mnist/demo.json",
    "content": "{\n  \"name\": \"./hpo_mnist/demo.json\",\n  \"drop_out\":0.9,\n  \"learning_rate\":0.01\n}"
  },
  {
    "path": "Examples/hpo_mnist/exp_aws_async.json",
    "content": "{\n  \"name\": \"./hpo_mnist/exp_hpo_demo.json\",\n  \"workingdir\": \"/home/ubuntu/aup/mnist_try/\",\n  \"proposer\": \"random\",\n  \"script\": \"mnist_hpo_demo.py\",\n  \"runtime_args\": {\n    \"prescript\": \"source /home/ubuntu/.bashrc; source /home/ubuntu/.profile; source activate tensorflow_p36\",\n    \"postscript\": \"source deactivate\",\n    \"overwrite\" : true\n  },\n  \"resource_args\":{\n    \"shutdown\":false,\n    \"connection_retry\": 5,\n    \"async_run\":true,\n    \"async_reconnect\": 60,\n    \"async_timeout\":1000\n  },\n  \"resource\": \"aws\",\n  \"n_parallel\": 5,\n  \"target\":\"max\",\n  \"n_samples\":100,\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"fc1\",\n      \"range\": [\n        700,\n        2000\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n\n"
  },
  {
    "path": "Examples/hpo_mnist/exp_aws_demo.json",
    "content": "{\n  \"name\": \"./hpo_mnist/exp_aws.json\",\n  \"workingdir\": \"/home/ubuntu/aup/mnist_try/\",\n  \"proposer\": \"random\",\n  \"script\": \"mnist_hpo_demo.py\",\n  \"runtime_args\": {\n    \"prescript\": \"source /home/ubuntu/.bashrc; source /home/ubuntu/.profile; source activate tensorflow_p36\",\n    \"postscript\": \"source deactivate\"\n  },\n  \"resource_args\":{\n    \"shutdown\":false,\n    \"connection_retry\": 5\n  },\n  \"resource\": \"aws\",\n  \"n_parallel\": 1,\n  \"target\":\"max\",\n  \"n_samples\":6,\n  \"parameter_config\": [\n    {\n      \"name\": \"drop_out\",\n      \"range\": [0.5, 0.9],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.01,\n        0.05,\n        0.001\n      ],\n      \"type\": \"choice\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/hpo_mnist/exp_aws_retry_job.json",
    "content": "{\n  \"proposer\": \"random\",\n  \"script\": \"mnist_hpo_fail.py\",\n  \"workingdir\": \"/home/ubuntu/aup/mnist_try/\",\n  \"resource\": \"aws\",\n  \"n_parallel\": 4,\n  \"target\":\"max\",\n  \"n_samples\": 100,\n  \"runtime_args\": {\n    \"prescript\": \"source /home/ubuntu/.bashrc; source /home/ubuntu/.profile; source activate tensorflow_p36\",\n    \"postscript\": \"source deactivate\",\n    \"overwrite\" : true\n  },\n  \"job_failure\": {\n    \"ignore_fail\": true,\n    \"job_retries\": 3\n  },\n  \"resource_args\":{\n    \"shutdown\":false,\n    \"connection_retry\": 5\n  },\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"fc1\",\n      \"range\": [\n        700,\n        2000\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/hpo_mnist/exp_bohb.json",
    "content": "{\n  \"name\": \"./hpo_mnist/exp_bohb.json\",\n  \"script\": \"mnist_hpo_demo.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\": \"max\",\n  \"proposer\": \"bohb\",\n  \"n_iterations\": 16,\n  \"min_points_in_model\": \"\",\n  \"top_n_percent\": 15,\n  \"num_samples\": 64,\n  \"random_fraction\": 0.3333333333333333,\n  \"bandwidth_factor\": 3,\n  \"min_bandwidth\": 0.001,\n  \"eta\": 3,\n  \"min_budget\": 10,\n  \"max_budget\": 100,\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"fc1\",\n      \"range\": [\n        700,\n        2000\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/hpo_mnist/exp_hyperband.json",
    "content": "{\n  \"name\": \"./hpo_mnist/exp_hyperband.json\",\n  \"proposer\": \"hyperband\",\n  \"script\": \"mnist_hpo_demo.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"max\",\n  \"max_iter\": 243,\n  \"engine\": \"random\",\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"fc1\",\n      \"range\": [\n        700,\n        2000\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/hpo_mnist/exp_hyperopt.json",
    "content": "{\n  \"name\": \"./hpo_mnist/exp_hyperopt.json\",\n  \"proposer\": \"hyperopt\",\n  \"script\": \"mnist_hpo_demo.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"max\",\n  \"n_samples\": 100,\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"fc1\",\n      \"range\": [\n        700,\n        2000\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/hpo_mnist/exp_random.json",
    "content": "{\n  \"name\": \"./hpo_mnist/exp_random.json\",\n  \"proposer\": \"random\",\n  \"script\": \"mnist_hpo_demo.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"max\",\n  \"n_samples\": 100,\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"fc1\",\n      \"range\": [\n        700,\n        2000\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/hpo_mnist/exp_random_async.json",
    "content": "{\n  \"name\": \"./hpo_mnist/exp_random_async.json\",\n  \"proposer\": \"random\",\n  \"script\": \"mnist_hpo_demo.py\",\n  \"workingdir\": \"/home/ubuntu/\",\n  \"resource\": \"aws\",\n  \"resource_args\":  {\n    \"async_run\": true,\n    \"async_reconnect\": 60\n  },\n  \"n_parallel\": 4,\n  \"target\":\"max\",\n  \"n_samples\": 100,\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"fc1\",\n      \"range\": [\n        700,\n        2000\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/hpo_mnist/exp_sequence.json",
    "content": "{\n  \"name\": \"./hpo_mnist/exp_sequence.json\",\n  \"proposer\": \"sequence\",\n  \"script\": \"mnist_hpo_demo.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"max\",\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\",\n      \"n\":3\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\",\n      \"n\":3\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\",\n      \"n\":3\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\",\n      \"n\":3\n    },\n    {\n      \"name\": \"fc1\",\n      \"range\": [\n        700,\n        2000\n      ],\n      \"type\": \"int\",\n      \"n\":3\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/hpo_mnist/exp_spearmint.json",
    "content": "{\n  \"name\": \"./hpo_mnist/exp_spearmint.json\",\n  \"proposer\": \"spearmint\",\n  \"script\": \"mnist_hpo_demo.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"max\",\n  \"n_samples\": 100,\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"fc1\",\n      \"range\": [\n        700,\n        2000\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/hpo_mnist/job_retries_random.json",
    "content": "{\n  \"name\": \"./hpo_mnist/job_retries_random.json\",\n  \"proposer\": \"random\",\n  \"script\": \"mnist_hpo_demo.py\",\n  \"workingdir\": \"/home/ubuntu/\",\n  \"resource\": \"aws\",\n  \"n_parallel\": 4,\n  \"target\":\"max\",\n  \"n_samples\": 100,\n  \"job_failure\": {\n    \"ignore_fail\": true,\n    \"job_retries\": 3\n  },\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"fc1\",\n      \"range\": [\n        700,\n        2000\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/hpo_mnist/mnist_hpo_demo.py",
    "content": "#!/usr/bin/env python3\n\n# Modified from https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/convolutional_network.py\n# The trained model is evaluated by a combination of accuracy and FLOP.\n#\n# Original License\n\"\"\"\nThe MIT License (MIT)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nAll contributions by Aymeric Damien:\nCopyright (c) 2015, Aymeric Damien.\nAll rights reserved.\n\nAll other contributions:\nCopyright (c) 2015, the respective contributors.\nAll rights reserved.\n\nEach contributor holds copyright over their respective contributions.\nThe project versioning (Git) records all such contribution source information.\n\"\"\"\n\n\nfrom __future__ import division, print_function, absolute_import\n\nimport argparse\nimport os\nimport sys\nfrom datetime import datetime\nfrom math import log\n\nimport tensorflow as tf\n# Import MNIST data\nfrom tensorflow.examples.tutorials.mnist import input_data\n\nfrom aup import BasicConfig, print_result\n\n# Training Parameters\nnum_steps = 2000\nbatch_size = 128\n\n# Network Parameters\nnum_input = 784 # MNIST data input (img shape: 28*28)\nnum_classes = 10 # MNIST total classes (0-9 digits)\n\n\n# Create the neural network\ndef conv_net(x_dict, n_classes, reuse, is_training):\n    # Define a scope for reusing the variables\n    with tf.variable_scope('ConvNet', reuse=reuse):\n        # TF Estimator input is a dict, in case of multiple inputs\n        x = x_dict['images']\n\n        # MNIST data input is a 1-D vector of 784 features (28*28 pixels)\n        # Reshape to match picture format [Height x Width x Channel]\n        # Tensor input become 4-D: [Batch Size, Height, Width, Channel]\n        x = tf.reshape(x, shape=[-1, 28, 28, 1])\n\n        # Convolution Layer with 32 filters and a kernel size of 5\n        conv1 = tf.layers.conv2d(x, FLAGS.conv1, 5, activation=tf.nn.relu)\n        # Max Pooling (down-sampling) with strides of 2 and kernel size of 2\n        conv1 = tf.layers.max_pooling2d(conv1, 2, 2)\n\n        # Convolution Layer with 64 filters and a kernel size of 3\n        conv2 = tf.layers.conv2d(conv1, FLAGS.conv2, 3, activation=tf.nn.relu)\n        # Max Pooling (down-sampling) with strides of 2 and kernel size of 2\n        conv2 = tf.layers.max_pooling2d(conv2, 2, 2)\n\n        # Flatten the data to a 1-D vector for the fully connected layer\n        fc1 = tf.contrib.layers.flatten(conv2)\n\n        # Fully connected layer (in tf contrib folder for now)\n        fc1 = tf.layers.dense(fc1, FLAGS.fc1)\n        # Apply Dropout (if is_training is False, dropout is not applied)\n        fc1 = tf.layers.dropout(fc1, rate=FLAGS.dropout, training=is_training)\n\n        # Output layer, class prediction\n        out = tf.layers.dense(fc1, n_classes)\n\n    return out\n\n\n# Define the model function (following TF Estimator Template)\ndef model_fn(features, labels, mode):\n    # Build the neural network\n    # Because Dropout have different behavior at training and prediction time, we\n    # need to create 2 distinct computation graphs that still share the same weights.\n    logits_train = conv_net(features, num_classes, reuse=False,\n                            is_training=True)\n    logits_test = conv_net(features, num_classes, reuse=True,\n                           is_training=False)\n\n    # Predictions\n    pred_classes = tf.argmax(logits_test, axis=1)\n    pred_probas = tf.nn.softmax(logits_test)\n\n    # If prediction mode, early return\n    if mode == tf.estimator.ModeKeys.PREDICT:\n        return tf.estimator.EstimatorSpec(mode, predictions=pred_classes)\n\n        # Define loss and optimizer\n    loss_op = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(\n        logits=logits_train, labels=tf.cast(labels, dtype=tf.int32)))\n    optimizer = tf.train.AdamOptimizer(learning_rate=FLAGS.learning_rate)\n    train_op = optimizer.minimize(loss_op,\n                                  global_step=tf.train.get_global_step())\n\n    # Evaluate the accuracy of the model\n    acc_op = tf.metrics.accuracy(labels=labels, predictions=pred_classes)\n\n    # TF Estimators requires to return a EstimatorSpec, that specify\n    # the different ops for training, evaluating, ...\n    estim_specs = tf.estimator.EstimatorSpec(\n        mode=mode,\n        predictions=pred_classes,\n        loss=loss_op,\n        train_op=train_op,\n        eval_metric_ops={'accuracy': acc_op})\n\n    return estim_specs\n\ndef train():\n    # Build the Estimator\n    mnist = input_data.read_data_sets(\"./input_data/\", one_hot=False)\n    \n    model = tf.estimator.Estimator(model_fn)\n\n    # Define the input function for training\n    input_fn = tf.estimator.inputs.numpy_input_fn(\n        x={'images': mnist.train.images}, y=mnist.train.labels,\n        batch_size=batch_size, num_epochs=None, shuffle=True)\n    # Train the Model\n    model.train(input_fn, steps=num_steps)\n\n    # Evaluate the Model\n    # Define the input function for evaluating\n    input_fn = tf.estimator.inputs.numpy_input_fn(\n        x={'images': mnist.test.images}, y=mnist.test.labels,\n        batch_size=batch_size, shuffle=False)\n    # Use the Estimator 'evaluate' method\n    e = model.evaluate(input_fn)\n\n    print(\"Testing Accuracy:\", e['accuracy'])\n    \n    \n    return e['accuracy']\n\ndef get_flop():\n    run_meta = tf.RunMetadata()\n    with tf.Session(graph=tf.Graph()) as sess:\n        x = tf.zeros([1,784])\n        out = conv_net({'images':x}, 10, False, False)\n        \n        opts = tf.profiler.ProfileOptionBuilder.float_operation()    \n        flops = tf.profiler.profile(sess.graph, run_meta=run_meta, cmd='op', options=opts)\n    print(\"Model FLOPs is %d\"%flops.total_float_ops)\n    return flops.total_float_ops\n\n\ndef main(_):\n    log_dir = FLAGS.log_dir + \"%s\" % datetime.now()\n    if tf.gfile.Exists(log_dir):\n        tf.gfile.DeleteRecursively(log_dir)\n    tf.gfile.MakeDirs(log_dir)\n    acc =  train()\n    flop = get_flop()\n    return (acc-1)/log(flop)  # metric used in AMC\n\n\nif __name__ == '__main__':\n\n    if len(sys.argv) < 2:\n        print(\"config file required\")\n        exit(1)\n\n    parser = argparse.ArgumentParser()\n    parser.add_argument('--learning_rate', type=float, default=0.001,\n                        help='Initial learning rate')\n    parser.add_argument('--dropout', type=float, default=0.1,\n                        help='drop probability for training dropout.')\n    parser.add_argument('--conv1', type=int, default=32,\n                        help='Conv1 layer size.')\n    parser.add_argument('--conv2', type=int, default=64,\n                        help='Conv2 layer size.')\n    parser.add_argument('--fc1', type=int, default=1024,\n                        help='FC1 layer size.')\n    parser.add_argument(\n        '--data_dir',\n        type=str,\n        default=os.path.join(os.getenv('TEST_TMPDIR', './'),\n                            'input_data/'),\n        help='Directory for storing input data')\n    parser.add_argument(\n        '--log_dir',\n        type=str,\n        default=os.path.join(os.getenv('TEST_TMPDIR', './'),\n                            'logs/'),\n        help='Summaries log directory')\n\n    FLAGS, unparsed = parser.parse_known_args()\n\n    config = BasicConfig(**FLAGS.__dict__).load(sys.argv[1])\n    FLAGS.__dict__.update(config)\n    # for hyperband\n    if \"n_iterations\" in FLAGS:\n        FLAGS.max_steps = int(FLAGS.n_iterations * 100)  # 100 times n_iteration units\n    print(\"FLAGS => \" + str(FLAGS))\n\n    val = main(config)\n    print(str(val))\n    \n    \n    print_result(val)\n"
  },
  {
    "path": "Examples/hpo_mnist/mnist_hpo_fail.py",
    "content": "#!/usr/bin/env python3\n\n# Modified from https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/convolutional_network.py\n# The trained model is evaluated by a combination of accuracy and FLOP.\n#\n# Original License\n\"\"\"\nThe MIT License (MIT)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nAll contributions by Aymeric Damien:\nCopyright (c) 2015, Aymeric Damien.\nAll rights reserved.\n\nAll other contributions:\nCopyright (c) 2015, the respective contributors.\nAll rights reserved.\n\nEach contributor holds copyright over their respective contributions.\nThe project versioning (Git) records all such contribution source information.\n\"\"\"\n\n\nfrom __future__ import division, print_function, absolute_import\n\nimport argparse\nimport os\nimport sys\nfrom datetime import datetime\nfrom math import log\n\nimport tensorflow as tf\n# Import MNIST data\nfrom tensorflow.examples.tutorials.mnist import input_data\n\nfrom aup import BasicConfig, print_result\n\n# Training Parameters\nnum_steps = 2000\nbatch_size = 128\n\n# Network Parameters\nnum_input = 784 # MNIST data input (img shape: 28*28)\nnum_classes = 10 # MNIST total classes (0-9 digits)\n\n\n# Create the neural network\ndef conv_net(x_dict, n_classes, reuse, is_training):\n    # Define a scope for reusing the variables\n    with tf.variable_scope('ConvNet', reuse=reuse):\n        # TF Estimator input is a dict, in case of multiple inputs\n        x = x_dict['images']\n\n        # MNIST data input is a 1-D vector of 784 features (28*28 pixels)\n        # Reshape to match picture format [Height x Width x Channel]\n        # Tensor input become 4-D: [Batch Size, Height, Width, Channel]\n        x = tf.reshape(x, shape=[-1, 28, 28, 1])\n\n        # Convolution Layer with 32 filters and a kernel size of 5\n        conv1 = tf.layers.conv2d(x, FLAGS.conv1, 5, activation=tf.nn.relu)\n        # Max Pooling (down-sampling) with strides of 2 and kernel size of 2\n        conv1 = tf.layers.max_pooling2d(conv1, 2, 2)\n\n        # Convolution Layer with 64 filters and a kernel size of 3\n        conv2 = tf.layers.conv2d(conv1, FLAGS.conv2, 3, activation=tf.nn.relu)\n        # Max Pooling (down-sampling) with strides of 2 and kernel size of 2\n        conv2 = tf.layers.max_pooling2d(conv2, 2, 2)\n\n        # Flatten the data to a 1-D vector for the fully connected layer\n        fc1 = tf.contrib.layers.flatten(conv2)\n\n        # Fully connected layer (in tf contrib folder for now)\n        fc1 = tf.layers.dense(fc1, FLAGS.fc1)\n        # Apply Dropout (if is_training is False, dropout is not applied)\n        fc1 = tf.layers.dropout(fc1, rate=FLAGS.dropout, training=is_training)\n\n        # Output layer, class prediction\n        out = tf.layers.dense(fc1, n_classes)\n\n    return out\n\n\n# Define the model function (following TF Estimator Template)\ndef model_fn(features, labels, mode):\n    # Build the neural network\n    # Because Dropout have different behavior at training and prediction time, we\n    # need to create 2 distinct computation graphs that still share the same weights.\n    logits_train = conv_net(features, num_classes, reuse=False,\n                            is_training=True)\n    logits_test = conv_net(features, num_classes, reuse=True,\n                           is_training=False)\n\n    # Predictions\n    pred_classes = tf.argmax(logits_test, axis=1)\n    pred_probas = tf.nn.softmax(logits_test)\n\n    # If prediction mode, early return\n    if mode == tf.estimator.ModeKeys.PREDICT:\n        return tf.estimator.EstimatorSpec(mode, predictions=pred_classes)\n\n        # Define loss and optimizer\n    loss_op = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(\n        logits=logits_train, labels=tf.cast(labels, dtype=tf.int32)))\n    optimizer = tf.train.AdamOptimizer(learning_rate=FLAGS.learning_rate)\n    train_op = optimizer.minimize(loss_op,\n                                  global_step=tf.train.get_global_step())\n\n    # Evaluate the accuracy of the model\n    acc_op = tf.metrics.accuracy(labels=labels, predictions=pred_classes)\n\n    # TF Estimators requires to return a EstimatorSpec, that specify\n    # the different ops for training, evaluating, ...\n    estim_specs = tf.estimator.EstimatorSpec(\n        mode=mode,\n        predictions=pred_classes,\n        loss=loss_op,\n        train_op=train_op,\n        eval_metric_ops={'accuracy': acc_op})\n\n    return estim_specs\n\ndef train():\n    # Build the Estimator\n    mnist = input_data.read_data_sets(\"./input_data/\", one_hot=False)\n    \n    model = tf.estimator.Estimator(model_fn)\n\n    # Define the input function for training\n    input_fn = tf.estimator.inputs.numpy_input_fn(\n        x={'images': mnist.train.images}, y=mnist.train.labels,\n        batch_size=batch_size, num_epochs=None, shuffle=True)\n    # Train the Model\n    model.train(input_fn, steps=num_steps)\n\n    # Evaluate the Model\n    # Define the input function for evaluating\n    input_fn = tf.estimator.inputs.numpy_input_fn(\n        x={'images': mnist.test.images}, y=mnist.test.labels,\n        batch_size=batch_size, shuffle=False)\n    # Use the Estimator 'evaluate' method\n    e = model.evaluate(input_fn)\n\n    print(\"Testing Accuracy:\", e['accuracy'])\n    \n    \n    return e['accuracy']\n\ndef get_flop():\n    run_meta = tf.RunMetadata()\n    with tf.Session(graph=tf.Graph()) as sess:\n        x = tf.zeros([1,784])\n        out = conv_net({'images':x}, 10, False, False)\n        \n        opts = tf.profiler.ProfileOptionBuilder.float_operation()    \n        flops = tf.profiler.profile(sess.graph, run_meta=run_meta, cmd='op', options=opts)\n    print(\"Model FLOPs is %d\"%flops.total_float_ops)\n    return flops.total_float_ops\n\n\ndef main(_):\n    log_dir = FLAGS.log_dir + \"%s\" % datetime.now()\n    if tf.gfile.Exists(log_dir):\n        tf.gfile.DeleteRecursively(log_dir)\n    tf.gfile.MakeDirs(log_dir)\n    acc =  train()\n    flop = get_flop()\n    return (acc-1)/log(flop)  # metric used in AMC\n\n\nif __name__ == '__main__':\n\n    if len(sys.argv) < 2:\n        print(\"config file required\")\n        exit(1)\n        \n    import random\n    if random.random()>0.75:\n        raise Exception('failed', 'test123')\n\n    parser = argparse.ArgumentParser()\n    parser.add_argument('--learning_rate', type=float, default=0.001,\n                        help='Initial learning rate')\n    parser.add_argument('--dropout', type=float, default=0.1,\n                        help='drop probability for training dropout.')\n    parser.add_argument('--conv1', type=int, default=32,\n                        help='Conv1 layer size.')\n    parser.add_argument('--conv2', type=int, default=64,\n                        help='Conv2 layer size.')\n    parser.add_argument('--fc1', type=int, default=1024,\n                        help='FC1 layer size.')\n    parser.add_argument(\n        '--data_dir',\n        type=str,\n        default=os.path.join(os.getenv('TEST_TMPDIR', './'),\n                            'input_data/'),\n        help='Directory for storing input data')\n    parser.add_argument(\n        '--log_dir',\n        type=str,\n        default=os.path.join(os.getenv('TEST_TMPDIR', './'),\n                            'logs/'),\n        help='Summaries log directory')\n\n    FLAGS, unparsed = parser.parse_known_args()\n\n    config = BasicConfig(**FLAGS.__dict__).load(sys.argv[1])\n    FLAGS.__dict__.update(config)\n    # for hyperband\n    if \"n_iterations\" in FLAGS:\n        FLAGS.max_steps = int(FLAGS.n_iterations * 100)  # 100 times n_iteration units\n    print(\"FLAGS => \" + str(FLAGS))\n\n    val = main(config)\n    print(str(val))\n    \n    \n    print_result(val)\n"
  },
  {
    "path": "Examples/intermediate_results/README.md",
    "content": "# Intermediate Results\n\n## Usage\n\nIntermediate results are non-final results for each job of an experiment used\nin order to better tell the evolution of a job through time. Each intermediate\n\"result\" can be one or multiple values.\n\nIn order to let auptimizer know that intermediate results are to be tracked,\nthe flag \"track_intermediate_results\" should be passed in the experiment config\nunder \"resource_args\":\n\n    \"resource_args\":\n    {\n        \"track_intermediate_results\": true\n    }\n\nThe script used in the experiment then has to call `aup.print_result` each time \nan intermediate result is to be saved. The last reported result will always be taken \nas the final result of a job. Please refer to `quad_euation_min/quad_min.py` for training script modification.\n\nThe intermediate results will be shown on the dashboard if tracked.\n\n## Examples\n\nTake the following main function in a user script:\n\n    def main(x, a=2, b=4, c=5, n=10):\n        it = 1.0\n        for _ in range(n):\n            res = x*x*a + x*b + c\n            res += it\n            it -= 1.0 / 10\n            aup.print_result(res)\n\n1. If \"track_intermediate_results\" is `false` or missing, all results except the last one will be discarded:\n\n```json\n{\n    \"proposer\": ...,\n    \"script\": ...,\n    \"resource\": ...,\n    \"n_parallel\": ...,\n    \"target\": \"min\",\n    \"n_samples\": ...,\n    \"parameter_config\": [\n        {\n            \"name\": \"x\",\n            \"range\": [-1.0, 100.0],\n            \"type\": \"float\"\n        }\n    ]\n}  \n```\n```\nsqlite> SELECT COUNT(*) FROM intermediate_result;\nCOUNT(*)\n0\n```\n\n2. If \"track_intermediate_results\" is present in the config and is set to `true`, then the values will be found in the database (200 jobs with 10 intermediate results each):\n\n```json\n{\n    \"proposer\": ...,\n    \"script\": ...,\n    \"resource\": ...,\n    \"n_parallel\": ...,\n    \"target\": \"min\",\n    \"n_samples\": ...,\n    \"resource_args\": \n    {\n        \"track_intermediate_results\": true\n    },\n    \"parameter_config\": [\n        {\n            \"name\": \"x\",\n            \"range\": [-1.0, 100.0],\n            \"type\": \"float\"\n        }\n    ]\n}  \n```\n```\nsqlite> SELECT COUNT(*) FROM intermediate_result;\n2000\n```"
  },
  {
    "path": "Examples/intermediate_results/quad_equation_min/quad_min.py",
    "content": "#!/usr/bin/env python\n\"\"\"\nModified Rosenbrock function for HPO and aup\n============================================\n\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\n\nimport sys\n\nimport aup\nfrom time import sleep\n\ndef rosenbrock(x, a=2, b=4, c=5):\n    sleep(1)\n    \n    it = 1.0\n    for _ in range(10):\n        res = x*x*a + x*b + c\n        res += it\n        it -= 1.0 / 10\n        aup.print_result(res)\n\n\nif __name__ == \"__main__\":\n    if len(sys.argv) != 2:\n        print(\"config file required\")\n        exit(1)\n    config = aup.BasicConfig().load(sys.argv[1])\n    rosenbrock(config['x'])\n"
  },
  {
    "path": "Examples/intermediate_results/quad_equation_min/quad_min_BOHB.json",
    "content": "{\n  \"name\": \"./intermediate_results/quad_equation_min/quad_min_BOHB_bandit.json\",\n  \"proposer\": \"bohb\",\n  \"script\": \"quad_min.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"min\",\n  \"n_iterations\": 100,\n  \"num_samples\": 64,\n  \"random_fraction\": 0.3333333333333333,\n  \"bandwidth_factor\": 3,\n  \"min_bandwidth\": 0.001,\n  \"eta\": 3,\n  \"min_budget\": 1,\n  \"max_budget\": 5,\n  \"resource_args\": \n    {\n      \"track_intermediate_results\": true\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [-1.0, 100.0],\n      \"type\": \"float\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/intermediate_results/quad_equation_min/quad_min_random.json",
    "content": "{\n  \"name\": \"./intermediate_results/quad_equation_min/quad_min_random_bandit.json\",\n  \"proposer\": \"random\",\n  \"script\": \"quad_min.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"min\",\n  \"n_samples\": 200,\n  \"resource_args\": \n    {\n      \"track_intermediate_results\": true\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [-1.0, 100.0],\n      \"type\": \"float\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/intermediate_results/quad_equation_min/quad_min_spearmint.json",
    "content": "{\n  \"name\": \"./intermediate_results/quad_equation_min/quad_min_spearmint_bandit.json\",\n  \"proposer\": \"spearmint\",\n  \"script\": \"quad_min.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"min\",\n  \"n_samples\": 50,\n  \"engine\":\"GPEIChooser\",\n  \"resource_args\": \n    {\n      \"track_intermediate_results\": true\n    },\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [-1.0, 100.0],\n      \"type\": \"float\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/job_failure_control/README.md",
    "content": "# Job Failure control Examples\n\nThis folder contains examples that demonstrate the different scenarios under job failure conditions and how Auptimizer handles them gracefully. \nThe examples can be broadly divided into two categories - \n\n## 1. Job failures based on incorrect or incomplete experiment configuration (For debugging purposes only) \n\n`experiment_no_*.json` files demonstrate an ill-configured experiment setup. They will result in standard error conditions and Auptimizer will report them, providing users with detailed description of the failure.\n\n- `experiment_no_nsample.json` : Auptimizer Error ( KeyError: \"Specify number of samples to randomly draw\")\n- `experiment_no_param_config.json` : Auptimizer Error (KeyError: \"Specify the parameter configuration 'parameter_config' to be searched\")\n- `experiment_no_proposer.json` : Auptimizer Error (KeyError: \"Specify the optimization 'proposer'\")\n- `experiment_no_resource.json` : Auptimizer Error (KeyError: \"Missing required value for 'resource'\")\n- `experiment_no_script.json` : Auptimizer Error (KeyError: \"Missing required value for 'script'\")\n- `experiment_extra_argument.json` : No Auptimizer Error (for extra variable c)\n\n## 2. Experiment persistence and job retries upon job failure\n\nThe following examples show how Auptimizer provides control for allowing job retries and experiment continuation upon job failures. \n\n- `experiment_job_retries.json` : Auptimizer retries failed job 3 times.\n- `experiment_job_ignore_fail.json` : Auptimizer ignores failed job, and continues the experiment\n- `experiment_job_retries_ignore_fail.json` : Auptimizer retries failed job 3 times. If all retries fail, Auptimizer ignores the failed job and continues the experiment.\n\nAuptimizer uses the `job_failure` variable to control this behavior, with the following parameters:\n- `job_retries` : number of times to retry a failed job, default is 0. Preference is given to a different resource, if multiple resources are available.\n- `ignore_fail` : whether to continue the experiment if a job fails, default is False. Currently [BOHB, EAS, Hyperband] proposers do not support experiment continuation upon job failure.\n\nThe examples use `test.py` file, which will fail to return any result when `time=3`. When we run the base case `experiment_test.json` as:\n\n    python3 -m aup experiment_test.json\n    \nIt will print something like:\n\n    2018-10-17 12:02:02 - aup.EE.Resource.CPUResourceManager - CRITICAL - Failed to run job:\n    ******/Examples/job_failure_control/test.py\n    ******/Examples/job_failure_control/jobs/79.json\n    2018-10-17 12:02:02 - aup.EE.Experiment - CRITICAL - Stop Experiment due to job failure\n    Best job (80) with score 4.000000 in experiment 14\n\n\n## experiment ill-configuration\n\nOther `experiment_no_*.json` files demonstrate ill-configured experiment setup.\n"
  },
  {
    "path": "Examples/job_failure_control/experiment_extra_argument.json",
    "content": "{\n  \"name\": \"./job_failure_control/experiment_extra_argument.json\",\n  \"script\": \"rosenbrock_hpo.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 2,\n  \"target\": \"min\",\n  \"proposer\": \"random\",\n  \"n_samples\": 20,\n  \"random_seed\": 0,\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        0,\n        10\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"y\",\n      \"range\": [\n        0,\n        10\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"c\",\n      \"range\": [\n        0,\n        1\n      ],\n      \"type\": \"float\"\n    }\n  ]\n}"
  },
  {
    "path": "Examples/job_failure_control/experiment_job_ignore_fail.json",
    "content": "{\n  \"name\": \"./job_failure_control/experiment_job_ignore_fail.json\",\n  \"proposer\": \"sequence\",\n  \"n_samples\": 10,\n  \"random_seed\": 1,\n  \"script\": \"test.py\",\n  \"job_failure\": {\n    \"ignore_fail\": true\n  },\n  \"parameter_config\": [\n    {\n      \"name\": \"time\",\n      \"range\": [\n          1,\n          10\n      ],\n      \"type\": \"int\"\n    }\n  ],\n  \"resource\": \"cpu\",\n  \"n_parallel\": 2,\n  \"target\":\"max\"\n}\n"
  },
  {
    "path": "Examples/job_failure_control/experiment_job_retries.json",
    "content": "{\n  \"name\": \"./job_failure_control/experiment_job_retries.json\",\n  \"proposer\": \"sequence\",\n  \"n_samples\": 10,\n  \"random_seed\": 1,\n  \"script\": \"test.py\",\n  \"job_failure\": {\n    \"job_retries\": 3\n  },\n  \"parameter_config\": [\n    {\n      \"name\": \"time\",\n      \"range\": [\n          1,\n          10\n      ],\n      \"type\": \"int\"\n    }\n  ],\n  \"resource\": \"cpu\",\n  \"n_parallel\": 2,\n  \"target\":\"max\"\n}\n"
  },
  {
    "path": "Examples/job_failure_control/experiment_job_retries_ignore_fail.json",
    "content": "{\n  \"name\": \"./job_failure_control/experiment_job_retries_ignore_fail.json\",\n  \"proposer\": \"sequence\",\n  \"n_samples\": 10,\n  \"random_seed\": 1,\n  \"script\": \"test.py\",\n  \"job_failure\": {\n    \"job_retries\": 3,\n    \"ignore_fail\": true\n  },\n  \"parameter_config\": [\n    {\n      \"name\": \"time\",\n      \"range\": [\n          1,\n          10\n      ],\n      \"type\": \"int\"\n    }\n  ],\n  \"resource\": \"cpu\",\n  \"n_parallel\": 2,\n  \"target\":\"max\"\n}\n"
  },
  {
    "path": "Examples/job_failure_control/experiment_no_nsample.json",
    "content": "{\n  \"name\": \"./job_failure_control/experiment_no_nsample.json\",\n  \"proposer\": \"random\",\n  \"random_seed\": 1,\n  \"script\": \"rosenbrock_hpo.py\",\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"y\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    }\n  ],\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"min\"\n}\n"
  },
  {
    "path": "Examples/job_failure_control/experiment_no_param_config.json",
    "content": "{\n  \"name\": \"./job_failure_control/experiment_no_param_config.json\",\n  \"proposer\": \"random\",\n  \"n_samples\": 30,\n  \"random_seed\": 1,\n  \"script\": \"rosenbrock_hpo.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"min\"\n}\n"
  },
  {
    "path": "Examples/job_failure_control/experiment_no_proposer.json",
    "content": "{\n  \"name\": \"./job_failure_control/experiment_no_proposer.json\",\n\n  \"n_samples\": 30,\n  \"random_seed\": 1,\n  \"script\": \"rosenbrock_hpo.py\",\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"y\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    }\n  ],\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"min\"\n}\n"
  },
  {
    "path": "Examples/job_failure_control/experiment_no_resource.json",
    "content": "{\n  \"name\": \"./job_failure_control/experiment_no_resource.json\",\n  \"proposer\": \"random\",\n  \"n_samples\": 30,\n  \"random_seed\": 1,\n  \"script\": \"rosenbrock_hpo.py\",\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"y\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    }\n  ],\n  \"n_parallel\": 4,\n  \"target\":\"min\"\n}\n"
  },
  {
    "path": "Examples/job_failure_control/experiment_no_script.json",
    "content": "{\n  \"name\": \"./job_failure_control/experiment_no_script.json\",\n  \"proposer\": \"random\",\n  \"n_samples\": 30,\n  \"random_seed\": 1,\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"y\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    }\n  ],\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"min\"\n}\n"
  },
  {
    "path": "Examples/job_failure_control/experiment_test.json",
    "content": "{\n  \"name\": \"./job_failure_control/experiment_test.json\",\n  \"proposer\": \"sequence\",\n  \"n_samples\": 10,\n  \"random_seed\": 1,\n  \"script\": \"test.py\",\n  \"parameter_config\": [\n    {\n      \"name\": \"time\",\n      \"range\": [\n          1,\n          10\n      ],\n      \"type\": \"int\"\n    }\n  ],\n  \"resource\": \"cpu\",\n  \"n_parallel\": 2,\n  \"target\":\"max\"\n}\n"
  },
  {
    "path": "Examples/job_failure_control/rosenbrock_hpo.py",
    "content": "#!/usr/bin/env python\n\"\"\"\nModified Rosenbrock function for HPO and aup\n============================================\n\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\n\nimport sys\n\n\"\"\"\nfrom aup import BasicConfig, print_result\ndef rosenbrock(conf, a=1, b=100):\n    x = conf.x\n    y = conf.y\n    return (a-x)*(a-x) + b*(y-x*x)*(y-x*x)\n\n\nif __name__ == \"__main__\":\n    if len(sys.argv) != 2:\n        print(\"config file required\")\n        exit(1)\n    config = BasicConfig().load(sys.argv[1])\n    val = rosenbrock(config)\n    print_result(val)\n\"\"\"\nfrom aup import aup_args\n\n@aup_args\ndef rosenbrock(x, y, a=1, b=100):\n    return (a-x)*(a-x) + b*(y-x*x)*(y-x*x)\n\nif __name__ == \"__main__\":\n    if len(sys.argv) != 2:\n        print(\"config file required\")\n        exit(1)\n    \n    rosenbrock(sys.argv[1])\n"
  },
  {
    "path": "Examples/job_failure_control/test.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\nJob will fail when sleep time is 1\n============================================\n\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\n\nimport sys\nfrom time import sleep\n\nfrom aup import BasicConfig, print_result\n\n\nif __name__ == \"__main__\":\n    if len(sys.argv) != 2:\n        print(\"config file required\")\n        exit(1)\n    config = BasicConfig().load(sys.argv[1])\n    sleep(1+config.time/10.)\n    if config.time == 3:\n        exit(1)\n    print_result(config.time)\n"
  },
  {
    "path": "Examples/mnist_keras_save_model/README.md",
    "content": "# Save best model feature\n\nThis example showcases how to use saving the best model feature. This feature allows the user to save the best performing model after running the HPO experiment. This is achieved by running the training script again using the best hyperparamters obtained during HPO the experiment. \nThe model, by default, will be saved to path ``aup_models/models_<eid>/<user_defined_model_path>``.\n\n## Usage\n\nIn order to use this feature, please add to the configuration file:\n\n\t\"resource_args\": {\n\t\t\"save_model\": true\n  \t}\n\nDepending on whether ``@aup_args`` is used, the training script needs to be changed differently. \nPlease check ``mnist.py`` and ``mnist_wo_decorator.py`` for examples of adapting the training script \nwith and without using the decorator, respectively.\n\n## Run experiment\n\nTo run the experiment on the remote machine, make sure to change the ``node.txt`` file and \"workingdir\" \nin ``exp_random_node.json`` to the your own settings. Then run\n```sh\npython -m aup.setup\npython -m aup exp_random_node.json\n```\n\nTo run the experiment using the local cpu, please run\n```sh\npython -m aup.setup cpu.ini\npython -m aup exp_random_cpu.json\n```\n\n"
  },
  {
    "path": "Examples/mnist_keras_save_model/cpu.ini",
    "content": "[Auptimizer]\n# Auptimizer environment folder to be created, this file will be copied over\nAuptimizer_PATH=./.aup\n# Temp folder\nTMP_FOLDER=./aup_tmp\n# SQL engine\nSQL_ENGINE=sqlite\n"
  },
  {
    "path": "Examples/mnist_keras_save_model/exp_random_cpu.json",
    "content": "{\n  \"name\": \"random_wo_decorator\",\n  \"proposer\": \"random\",\n  \"script\": \"mnist_wo_decorator.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"max\",\n  \"n_samples\": 10,\n  \"resource_args\": {\n    \"save_model\": true\n  },\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/mnist_keras_save_model/exp_random_node.json",
    "content": "{\n  \"name\": \"random_w_decorator_remote\",\n  \"workingdir\": \"/home/usr/aup_demo\",\n  \"proposer\": \"random\",\n  \"script\": \"mnist.py\",\n  \"resource\": \"node\",\n  \"n_parallel\": 4,\n  \"target\":\"max\",\n  \"n_samples\": 10,\n  \"resource_args\": {\n    \"save_model\": true\n  },\n  \"runtime_args\": {\n    \"overwrite\": true\n  },\n  \"parameter_config\": [\n    {\n      \"name\": \"dropout\",\n      \"range\": [0.0, 0.5],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"learning_rate\",\n      \"range\": [\n        0.001,\n        0.01\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"conv1\",\n      \"range\": [\n        20,\n        50\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"conv2\",\n      \"range\": [\n        40,\n        80\n      ],\n      \"type\": \"int\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/mnist_keras_save_model/mnist.py",
    "content": "#!/usr/bin/env python3\n\n\"\"\"\nMNIST convolutional network using Keras\n============================================\n\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\n\nfrom aup import print_result, aup_args, aup_save_model\n\nimport tensorflow as tf\nimport numpy as np\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\n\nfrom math import log\n\nimport sys\n\nnum_epochs = 5\nbatch_size = 64\nnum_classes = 10\ninput_shape = (28, 28, 1)\n\n# Load example MNIST data and pre-process it\n# the data, split between train and test sets\n(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()\n\n# Scale images to the [0, 1] range\nx_train = x_train.astype(\"float32\") / 255\nx_test = x_test.astype(\"float32\") / 255\n# Make sure images have shape (28, 28, 1)\nx_train = np.expand_dims(x_train, -1)\nx_test = np.expand_dims(x_test, -1)\n\n# convert class vectors to binary class matrices\ny_train = keras.utils.to_categorical(y_train, num_classes)\ny_test = keras.utils.to_categorical(y_test, num_classes)\n\ndef get_flops():\n    run_meta = tf.RunMetadata()\n    opts = tf.profiler.ProfileOptionBuilder.float_operation()\n\n    # We use the Keras session graph in the call to the profiler.\n    flops = tf.profiler.profile(graph=keras.backend.get_session().graph,\n                                run_meta=run_meta, cmd='op', options=opts)\n\n    return flops.total_float_ops  # Prints the \"flops\" of the model.\n\ndef get_model(**kwargs):\n    model = keras.Sequential(\n      [\n          keras.Input(shape=input_shape),\n          layers.Conv2D(kwargs['conv1'], kernel_size=(3, 3), activation=\"relu\"),\n          layers.MaxPooling2D(pool_size=(2, 2)),\n          layers.Conv2D(kwargs['conv2'], kernel_size=(3, 3), activation=\"relu\"),\n          layers.MaxPooling2D(pool_size=(2, 2)),\n          layers.Flatten(),\n          layers.Dropout(kwargs['dropout']),\n          layers.Dense(num_classes, activation=\"softmax\"),\n      ]\n    )\n\n    model.compile(loss=\"categorical_crossentropy\",\n                optimizer=keras.optimizers.Adam(learning_rate=kwargs['learning_rate']),\n                metrics=[\"accuracy\"])\n\n    return model\n\n@aup_args\ndef do_train(learning_rate=0.001, dropout=0.1, conv1=32, conv2=64):\n  model = get_model(**locals())\n\n  model.fit(\n    x_train,\n    y_train,\n    batch_size=batch_size,\n    epochs=num_epochs,\n    verbose=1,\n    validation_split=0.5,\n  )\n\n  res = model.evaluate(\n    x_test,\n    y_test,\n    batch_size=batch_size,\n    verbose=1,\n  )\n\n  # register the saving model function\n  # add model as argument\n  aup_save_model(save_model, model)\n\n  flops = get_flops()\n\n  return (res[1]-1.0) / log(flops)\n\ndef save_model(model):\n  import os\n\n  # dummy folders as example\n  os.makedirs('f1/f2')\n  os.makedirs('f1/f3')\n\n  # actual model\n  model.save('./f1/f2/mnist.h5')\n\nif __name__ == '__main__':\n\n  if len(sys.argv) < 2:\n      print(\"config file required\")\n      exit(1)\n\n  do_train(sys.argv[1])\n\n"
  },
  {
    "path": "Examples/mnist_keras_save_model/mnist_wo_decorator.py",
    "content": "#!/usr/bin/env python3\n\n\"\"\"\nMNIST convolutional network using Keras\n============================================\n\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\n\nfrom aup import BasicConfig, print_result\n\nimport tensorflow as tf\nimport numpy as np\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\n\nfrom math import log\n\nimport sys\n\n\nnum_epochs = 5\nbatch_size = 64\nnum_classes = 10\ninput_shape = (28, 28, 1)\n\n# Load example MNIST data and pre-process it\n# the data, split between train and test sets\n(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()\n\n# Scale images to the [0, 1] range\nx_train = x_train.astype(\"float32\") / 255\nx_test = x_test.astype(\"float32\") / 255\n# Make sure images have shape (28, 28, 1)\nx_train = np.expand_dims(x_train, -1)\nx_test = np.expand_dims(x_test, -1)\n\n# convert class vectors to binary class matrices\ny_train = keras.utils.to_categorical(y_train, num_classes)\ny_test = keras.utils.to_categorical(y_test, num_classes)\n\ndef get_flops():\n    run_meta = tf.RunMetadata()\n    opts = tf.profiler.ProfileOptionBuilder.float_operation()\n\n    # We use the Keras session graph in the call to the profiler.\n    flops = tf.profiler.profile(graph=keras.backend.get_session().graph,\n                                run_meta=run_meta, cmd='op', options=opts)\n\n    return flops.total_float_ops  # Prints the \"flops\" of the model.\n\ndef get_model(**kwargs):\n    model = keras.Sequential(\n      [\n          keras.Input(shape=input_shape),\n          layers.Conv2D(kwargs['conv1'], kernel_size=(3, 3), activation=\"relu\"),\n          layers.MaxPooling2D(pool_size=(2, 2)),\n          layers.Conv2D(kwargs['conv2'], kernel_size=(3, 3), activation=\"relu\"),\n          layers.MaxPooling2D(pool_size=(2, 2)),\n          layers.Flatten(),\n          layers.Dropout(kwargs['dropout']),\n          layers.Dense(num_classes, activation=\"softmax\"),\n      ]\n    )\n\n    model.compile(loss=\"categorical_crossentropy\",\n                optimizer=keras.optimizers.Adam(learning_rate=kwargs['learning_rate']),\n                metrics=[\"accuracy\"])\n\n    return model\n\ndef do_train(learning_rate=0.001, dropout=0.1, conv1=32, conv2=64,\n              save_model=False, folder_name=None):\n  model = get_model(**locals())\n\n  model.fit(\n    x_train,\n    y_train,\n    batch_size=batch_size,\n    epochs=num_epochs,\n    verbose=1,\n    validation_split=0.5,\n  )\n\n  res = model.evaluate(\n    x_test,\n    y_test,\n    batch_size=batch_size,\n    verbose=1,\n  )\n\n  # this means we are in best job context\n  # config also contains save_model flag and\n  # folder_name path\n  if save_model is True:\n    import shutil\n    import os\n\n    path = os.path.join('aup_models', folder_name)\n\n    if os.path.exists('aup_models') is False:\n        os.makedirs('aup_models')\n\n    if os.path.exists(path) is True:\n        shutil.rmtree(path)\n\n    os.makedirs(path)\n    os.chdir(path)\n\n    save_model_fun(model)\n\n  flops = get_flops()\n\n  return (res[1]-1.0) / log(flops)\n\ndef save_model_fun(model):\n  import os\n\n  # dummy folders as example\n  os.makedirs('f1/f2')\n  os.makedirs('f1/f3')\n\n  # actual model\n  model.save('./f1/f2/mnist.h5')\n\nif __name__ == '__main__':\n\n  if len(sys.argv) < 2:\n      print(\"config file required\")\n      exit(1)\n\n  config = BasicConfig()\n  config.load(sys.argv[1])\n\n  val = do_train(**config)\n  print(str(val))\n\n  print_result(val)\n\n"
  },
  {
    "path": "Examples/mnist_keras_save_model/node.txt",
    "content": "user@192.168.XX.XX\nuser@192.168.XX.XX\n"
  },
  {
    "path": "Examples/profiler_examples/README.md",
    "content": "For more details about how to use Profiler and run the examples in this folder refer to [Profiler](https://github.com/LGE-ARC-AdvancedAI/auptimizer/tree/master/src/aup/profiler).\nWe have also provided detailed experiments we performed using Profiler to estimate the performance of various edge-devices under [Experiments]( https://github.com/LGE-ARC-AdvancedAI/auptimizer/tree/master/Examples/profiler_examples/experiments).\n"
  },
  {
    "path": "Examples/profiler_examples/bench/download.sh",
    "content": "#  Copyright (c) 2020 LG Electronics Inc.\n#  SPDX-License-Identifier: GPL-3.0-or-later\n\nwget https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_2018_02_22/mobilenet_v1_1.0_224.tgz\nwget https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_2018_02_22/mobilenet_v1_0.75_224.tgz\n\ntar -xvzf mobilenet_v1_1.0_224.tgz\ntar -xvzf mobilenet_v1_0.75_224.tgz"
  },
  {
    "path": "Examples/profiler_examples/bench/test_perf.py",
    "content": "#  Copyright (c) 2020 LG Electronics Inc.\n#  SPDX-License-Identifier: GPL-3.0-or-later\n\n# Compute the overall inference time for a given tflite model\nimport tensorflow as tf\nfrom tflite_runtime.interpreter import Interpreter\nimport tensorflow.random\nimport numpy as np\nimport time\nimport os\n\n\nWARMUP = 1\nITER = 500\nCONSTANT = 0.5\n\n\ndef compute(model_path):\n    now = time.monotonic()\n    intp = Interpreter(model_path)\n    x = intp.tensor(intp.get_input_details()[0]['index'])\n    iy = intp.get_output_details()[0]['index']\n    intp.allocate_tensors()\n    t1 = time.monotonic() - now\n    now = time.monotonic()\n    \n    for i in range(WARMUP):\n        #x().fill(CONSTANT)\n        x =np.random.rand()\n        intp.invoke()\n        y = intp.get_tensor(iy)\n    t2 = time.monotonic() - now\n    now = time.monotonic()\n    for i in range(ITER):\n        #x().fill(CONSTANT)\n        x =np.random.rand()\n        intp.invoke()\n        y = intp.get_tensor(iy)\n    t3 = time.monotonic() - now    \n    return t1, t2/float(WARMUP), t3/float(ITER)\n\n\nif __name__ == \"__main__\":\n    import sys\n\n    if len(sys.argv) != 2:\n        print(\"test_acc.py <model_path>\")\n        \n    print(compute(sys.argv[1]))"
  },
  {
    "path": "Examples/profiler_examples/env_benchmark.template",
    "content": "#  Copyright (c) 2020 LG Electronics Inc.\n#  SPDX-License-Identifier: GPL-3.0-or-later\n#User data Variables\nIMAGEREPO=tensorflow/tensorflow:1.15.0-py3\nAPTREQUIREMENTS=\"wget\"\n# PIPREQUIREMENTS=\"ipython numpy\"\nPRERUN=\"wget https://dl.google.com/coral/python/tflite_runtime-1.14.0-cp36-cp36m-linux_x86_64.whl; pip install tflite_runtime-1.14.0-cp36-cp36m-linux_x86_64.whl\"\nDIR=bench\nSCRIPT=test_perf.py\nCOMMAND=python\nSAMPLETIME=3\nOUTPUTFILE=out.txt\nDOCFILE=Dockerfile\nDOCKCPUS=\"4.0\"\nDOCKMEMORY=\"2.0g\"\n# Additional docker arguments could be passed as following:\n# To run Docker container with privilege capability change to 'true'\n# To use Volume instead of copying data with the current folder\n# use the format \"-v /path/in/source:/path/in/destination\" as string\n# DOCKER_ARGS=\"--privileged -v /data:/mnist_data\"\nDOCKER_ARGS="
  },
  {
    "path": "Examples/profiler_examples/env_mnist.template",
    "content": "#  Copyright (c) 2020 LG Electronics Inc.\n#  SPDX-License-Identifier: GPL-3.0-or-later\n#User data Variables\nIMAGEREPO=tensorflow/tensorflow:1.3.0\n# APTREQUIREMENTS=\"curl vim\"\n# PIPREQUIREMENTS=\"ipython numpy\"\nDIR=mnist\nSCRIPT=mnist.py\nCOMMAND=python\nSAMPLETIME=3\nOUTPUTFILE=out.txt\nDOCFILE=Dockerfile\nDOCKCPUS=\"4.0\"\nDOCKMEMORY=\"2.0g\"\n# Additional docker arguments could be passed as following:\n# To run Docker container with privilege capability change to 'true'\n# To use Volume instead of copying data with the current folder\n# use the format \"-v /path/in/source:/path/in/destination\" as string\n# DOCKER_ARGS=\"--privileged -v /data:~/Documents/Data/mnist1\"\nDOCKER_ARGS=\n"
  },
  {
    "path": "Examples/profiler_examples/experiments/Readme.md",
    "content": "# Use Profiler for On-Device Resource Footprint Estimation\nProfiler can be used to estimate model script performance and resource requirements for a target device on the development machine. Given a set of models and the resource constraints (i.e. memory and CPU) to reflect *target device specs* or *the desired resource budget*, Profiler can help with the following **two scenarios**:  \n1. The ranking of the runtimes and memory usages of the model scripts measured using Profiler on the development machine is indicative of their ranking on the target device. For instance, if `Model1` is faster than `Model2` when measured using Profiler on the development machine, `Model1` will be faster than `Model2` on the device. This ranking is valid only when the CPUs are running at **full utilization**.\n\n2. The runtimes and memory usages of the model scripts measured using Profiler on the development machine is related by a simple **linear relationship** to the usage measured with a native profiling tool on the actual device. In other words, if a model runs in time `x` when measured using Profiler, it will run approximately in time `(a*x+b)` on the target device (where `a` and `b` can be discovered by profiling a few models on the device with a native profiling tool). The strength of this relationship depends on the architectural similarity between the models. In general, the models designed for the same task are architecturally similar as they are composed of the same set of layers, making Profiler a useful tool for model selection.\n\nTo support these claims and showcase Profiler's capabilities, we have conducted extensive experiments on three devices: LG G6, Samsung S8, and NVIDIA Jetson Nano. For anyone interested in conducting similar experiments on their own devices, we have put together the following Experiment Guidelines.   \n\n## Guidelines for Experiment Setup\nThe goal of the experiment is to explore the relationship of model runtime and resource footprint measured using Profiler on the development machine and model runtime and resource footprint measured with a native profiling tool on a target device. \n\n**For the first scenario**, to get a performance ordering of models, the user can acquire the CPU and memory constraints of the target device, and run Profiler on a desktop CPU with those constraints. Please make sure that the models used in Profiler match those to be deployed on-device (e.g., both are TFLite models). Our experiments show that the output from Profiler should provide the relative goodness of models for CPU-based devices.\n\nIn some cases, when two models are very close in performance (e.g., with peak memory usage difference of ~10MB), a flipped ordering might be observed on-device compared to Profiler output. However, the performances should still be close to each other.\n\n**For the second scenario**, to acquire a linear relationship between Profiler estimates and on-device performance, the user needs to profile a set of models both using Profiler on the development machine and with a native profiling tool on the target device. Below, are the general steps to conduct this experiment.  \n\n- ***Step 1***: Prepare the models and profiling scripts for both Profiler and the target device. The models running on Profiler and on-device should be in the same format / generated using the same framework. The scripts running on Profiler and on-device may be written in different programming languages, but should implement the same functionality (e.g., both running inference using batch size 1 for 500 iterations).\n- ***Step 2***: Acquire device resource constraints (i.e. number of CPU cores/threads and memory limit), and input these constraints in the Profiler user variables in `env.template`.\n- ***Step 3***: Run experiments.\n  - Run the profiling script using Profiler for all models on a desktop CPU. \n  - Run the profiling script using a native profiling tool on the target device.\n- ***Step 4***: Due to possible variances across experiments, we recommend running Step 3 multiple times and taking the averages of the measured metrics for further analysis.\n- ***Step 5 (optional)***: Use any regression analysis tool to establish the relationship between Profiler outputs and the on-device measurements for the profiled models.\n\n## Experiment I - Profiler and TFLite Model Benchmark for LG G6 and Samsung S8 Deployments\n### Experiment Configurations:\n- ***Models:*** InceptionV3, SqueezeNet, MobileNetV2-0.25x, -0.5x, -0.75x, -1.0x\n- ***Profiling script:*** Profile inference performance. Run inference using a selected model for 500 iterations with batchsize 1 on randomly generated input\n- ***Framework:*** TFLite\n- ***CPU:*** CPU = 1, 2, 4 for Profiler, use Thread = 1, 2, 4 on the phone\n- ***Memory:*** Max memory is 4 GB for both phones, but the memory variable is set to 2 GB in Profiler, which simulates a lower memory limit.\n- ***On-device profiling tool:*** [TFLite Model Benchmark Tool](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/tools/benchmark)\n\n### Results:\nThe experiment was conducted 5 times. We measured the average inference time on one input sample across 500 iterations, and the peak memory usage. The averages of 5 experiments are shown in Figures 1 and 2. The formula and R-squared value for the best fitting line are also shown in the plots.\n\nEven though Profiler only outputs the script's total execution time, users can utilize the Profiler environment and measure the execution time of different functions in their profiling script like we did in this experiment. An example script for measuring the inference time is provided in [script](https://github.com/LGE-ARC-AdvancedAI/auptimizer/blob/master/Examples/profiler_examples/bench/test_perf.py).\n\n|![image](figures/G6_S8_time.png)|\n|:--:| \n| *Figure 1: Model inference time measured with Profiler on the desktop vs TFLite Model Benchmark on LG G6, and Profiler on the desktop vs TFLite Model Benchmark on Samsung S8.* |\n\nFor both phones, a linear relationship can be established between the inference time measured in the Profiler environment and the inference time measured on the phones, for various numbers of CPUs/threads. \n\n|![image](figures/G6_S8_peakmemory.png)|\n|:--:| \n| *Figure 2: Peak memory usage measured on Profiler vs LG G6, and Profiler vs Samsung S8.* |\n\nThe peak memory usage does not vary much across the number of CPUs/threads. So we only present one representative plot with `CPU/thread = 1` for both phones. Again, a linear relationship can be observed. The dot on the right-upper corner represents the InceptionV3 model, in both Figures 1 and 2, which has a significantly larger resource footprint than the rest of the models.\n\n## Experiment II - Profiler and Jetson Stats for Nvidia Jetson Nano Deployment\n### Experiment Configurations:\n- ***Models:***  \n*Image classification models*: ShuffleNetV2-0.5x, SqueezeNet, MobileNetV2-1.0x, ResNet18, InceptionV3  \n*Video classification models*: 3D-SqueezeNet, 3D-ShuffleNetV2-0.25x, -0.5x, -1.0x, -1.5x, -2.0x, 3D-MobileNetV2-0.25x, -0.5x, -0.75x, -1.0x, -2.0x  \n(model credit to [Efficient-3DCNNs](https://github.com/okankop/Efficient-3DCNNs))  \n- ***Profiling script:*** Profile inference performance. Run inference using a selected model for 500 iterations with batchsize 1 on randomly generated input\n- ***Framework:*** Pytorch\n- ***CPU:*** CPU = 1 for Profiler, use 1 CPU core on NVIDIA Jetson Nano \n- ***Memory Limit:*** Max memory on NVIDIA Jetson Nano is 4 GB. The memory variable is set to 4 GB in Profiler.\n- ***On-device profiling tool:*** [jetson-stats](https://github.com/rbonghi/jetson_stats)\n\n\n### Results:\nWe ran the experiment 5 times. For this experiment, we measured the script's total execution time (direct output from Profiler, denoted as `Runtime` in figures), average memory usage, and peak memory usage. The averages of these measures across five experiments are shown in Figures 3 and 4. The formula and R-squared value for the best fitting line are also shown in the plots.\n\n|![image](figures/nano_image_models.png)|\n|:--:| \n| *Figure 3: Image model performances measured using Profiler on the desktop and Jetson Stats on NVIDIA Jetson Nano.* |\n\n|![image](figures/nano_video_models.png)|\n|:--:| \n| *Figure 4: Video model performances measured using Profiler on the desktop and Jetson Stats on NVIDIA Jetson Nano.* |\n\nNote that separate plots are made for image models and video models, respectively. This is due to the fact that video models profiled here are architecturally different from the image models. As we have discussed, Profiler estimation is only valid for models with similar architectures or layers. \n\n## Conclusion\nFrom the experimental results shared above, we have shown that Profiler can help users build a good estimate of model runtime and memory usage on LG G6, Samsung S8, and NVIDIA Jetson Nano, for some popular image/video recognition models. We hope that Profiler's estimation capability can enable leaner and faster model development for resource-constrained devices.  \n\nProfiler might have limitations for certain models/devices, resulting in inconsistencies between Profiler outputs and on-device measurements. Therefore, we welcome the community to run experiments on their device of choice and **report any inconsistencies or limitations via GitHub Issues**.   \n"
  },
  {
    "path": "Examples/profiler_examples/internal/ImageNet Experiments.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#  Copyright (c) 2020 LG Electronics Inc.\\n\",\n    \"#  SPDX-License-Identifier: GPL-3.0-or-later\\n\",\n    \"# ImageNet Experiments with MobileNet Inference using Profiler\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"output_type\": \"error\",\n     \"ename\": \"SyntaxError\",\n     \"evalue\": \"invalid syntax (<ipython-input-2-cc0a05a592e8>, line 1)\",\n     \"traceback\": [\n      \"\\u001b[0;36m  File \\u001b[0;32m\\\"<ipython-input-2-cc0a05a592e8>\\\"\\u001b[0;36m, line \\u001b[0;32m1\\u001b[0m\\n\\u001b[0;31m    We performed many ImageNet Experiments in the inference mode under different Compute constraints using Profiler. We used different MobileNet versions for the experiments detailed in https://www.tensorflow.org/lite/guide/hosted_models.\\u001b[0m\\n\\u001b[0m               ^\\u001b[0m\\n\\u001b[0;31mSyntaxError\\u001b[0m\\u001b[0;31m:\\u001b[0m invalid syntax\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"We performed many ImageNet Experiments in the inference mode under different Compute constraints using Profiler. We used different MobileNet versions for the experiments detailed in https://www.tensorflow.org/lite/guide/hosted_models.\\n\",\n    \"\\n\",\n    \"The source code used for Inference is available at 'https://gitlab.lgsvl.net/jason.liu/compression/tree/compression_profiler/src/mobilenet' \\n\",\n    \"and specifically 'test_perf.py'\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The experimental settings used 'Mobilenet_V1_0.25_224', 'Mobilenet_V1_0.50_224', 'Mobilenet_V1_0.75_224', 'Mobilenet_V1_1.0_224'. The CPU contraints were 4, 2, 1, 0.5 and Inference was performed with 500 and 5000 iterations over a single validation TFrecord.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"We recorded the time taken for the inference process to finish per each iteration under these conditions and observed the following results\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Iter = 5000\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"| Exp   |      Mob 1.0      |  Mob 0.75  |Mob 0.5   |Mob 0.25   |\\n\",\n    \"|----------|:-------------:|:-------------:|:-------------:|:-------------:|\\n\",\n    \"|  CPU = 4  |  0.02016684028 | 0.01380343905 | 0.008244011551 | 0.004547368029 |\\n\",\n    \"| CPU = 2   |   0.02899219721 | 0.01863248097 | 0.01087483355 |0.005579292277 |\\n\",\n    \"| CPU = 1  |   0.05820066958 | 0.03714312666 | 0.02166576314 | 0.0111540261   |\\n\",\n    \"| CPU = 0.5  |   0.1165416765 | 0.07581892986 | 0.04407729727 | 0.02251805596 |\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAlgAAAFzCAYAAADi5Xe0AAAhZUlEQVR42u3dDZBVdf34cfjxg0CmoRqIgQgqEWigLOiBCGqCYWooevAX/eo/UJAmBdG4gk9AKURqSuv4zzKd0X85SslDDyz2QzBDYFQMRbCEkhB8AORpQZZddGE//9/3zNw7u7AsLOyF5e7rNXMG793D7nI+3nvee+65Z1sFAABNqpVNAAAgsAAABBYAgMACAEBgAQAILAAAgQUAgMACABBYAAACCwAAgQUAILAAAAQWAIDAAgBAYAEACCwAAIEFAIDAAgAQWAAAAgsAAIEFACCwAAAEVm179uyJq666Kn7xi18c97F9+/bFK6+8ct5urMWLF2f/tvqW+++/v866R44ciUcffTRuueWWuO666+Lmm2+ORx55JI4ePXrc5y3UugBAkQfWli1bYvr06bFmzZrzdmPdfffdpxxY8+bNO6X1CrkuAFDkgfX0009n95/PgTVr1qy49dZbT7reP//5z+zf+uMf/zj+9a9/xZtvvhkvvPBCdjvdnz5e6HUBAIHV7FVUVJzykaLf/OY32bopgmpLMZTuv++++wq+LgBQ5IFV38tar732Wv7jVVVVsWTJkrjpppvi2muvjTlz5sTvf//7LGpqu/fee+PGG2+MnTt3ZkeSZsyYEb/73e/OyobavHlz9n2n859OZvbs2XH99ddHTU1NnfvT7RtuuCFbCr0uANCCA6uysjLmzp1b73lFKbgOHjxYJ7BSfNVe/6GHHmrw+0nrn+i8qdzypz/96aT/rtWrV2frrly5Mn79619ncfejH/0oO2q0a9euOrGY1vvlL39Z7+e58847s4+nf3eh1gUAWkBgJSd6iXDhwoXZ/SnC0pGp6urq2Lt3bxY96f4HHnigTmCl+372s59l66R3zp3s3XNNFVi57/Oaa6457u//8Ic/jFdffTVbr7y8vMGX63Iv86V3VBZqXQCgBQdWuuRAemdhaWnpcS97Jeldeylo3njjjTqBtX79+rO+oe64447se0mXREixk04wf/nll+Ouu+7Kvqf0b0jSkbljw7C2dH/uCF6h1gUAWnBgbd++/aRHl9Kybdu2OoGVjl41Fym00nlh6ftKR+DS93YqR5pSpBVqXQCgBQfWv//971MKrE2bNtUJrMacZ9RULxE25MEHH8w+z/PPP599b+m/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\\n\",\n      \"text/plain\": [\n       \"<IPython.core.display.Image object>\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"from IPython.display import Image\\n\",\n    \"Image(filename='exp_img/5000_1.png') \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAlgAAAFzCAYAAADi5Xe0AAAnSElEQVR42u3dC7hVZZ0/cBwGHpQpakb//kGSLngLmxp5vGTS/wmGmaIsu9A0jT5p/4rS6B9BZUQXSFNL0czUtHGyKS0u3sBEMEWkvHQ08QYFIXjhoNzlcoAD5/33W8w67bPP3vvsc9iHy+HzeZ73Oey9Fnutvda79vru933X2t0SAAA11c0mAAAQsAAABCwAAAELAAABCwBAwAIAELAAABCwAAAELAAAAQsAAAELAEDAAgAQsAAABCwAAAQsAAABCwBAwAIAQMACABCwAAAELAAABCwAAAELAEDAKrR69er05S9/Of3oRz9qNW3t2rXphRde2Gfe/B133JGta6ny85//vMW8O3bsSPfee2/63ve+l772ta+liy++ON1zzz1p586drV63s+Zty/PPP5+mTp2avdb48ePTN77xjXTNNdekRx99NDU1NbWYd+7cuSXf91e/+tX0rW99K/t/f/jDH1r8n9/+9rfZPLG+5WzZsiWb59JLL21zfX/2s59l877yyiuOxP1AqePXPgTYywFr6dKl2Un/4Ycf3mfe/HXXXVd1wLrpppuqmq8z5y0nwtNdd92VvvKVr5R9P7/4xS9ahKxyAau4RNgTsCh3/NqHAHs5YEUrSjy/LwWsiRMnpu9///ttzvfHP/4xW/fvfOc76U9/+lPavn17Wrx4cfY4no/pnT1vJbNnz87m//rXv57uvvvu9NJLL2WvtWHDhvTQQw9lLVIxfdasWa0C1rx581q8VrScbdq0KQtREdjOP//85pNnrQMW+4998fgFELD2wQ/oCBHVthTdeOON2bwRggpFGIrn41t8Z89bToSp6NaL7sVly5aVnCe6dSIoRQBraGioGLAK/dd//Vc2T+w7AUvAErAA9rGAVaobLIJBLk76M2fOTBdddFEWBC644IJ0yy23ZCGo0A033JC++93vppUrV2YtTxEYfvnLX3ZoPZcsWdJmWMhNmjQpawUqHscUj7/97W9npbPnLefXv/519j5iPFlb88W2evnll6sOWPlr5/N0dhfhT3/606xVMdYxwuc3v/nNLDheddVVaeHChSWXNWPGjKzexHxRN6I1r3D8Wlt1ptq6FyLAxjpHC2PMO2HChGzdHn/88Vb777777kuTJ0/OutXiffz4xz8u+R7a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q6MBK8T2j9sDXH755c13W48TYlzJVngz0M4MWPmJOO6NFS1+EexiG8aJvDBItlVnqq17sY7RqhnLivcb2zi6cKMe57f2yG9QGy0u0boVV1LGPoiWxQhojzzySKv9UO3y2xLvOb/XVKn62551KqXc8dsZAauW2wWgywQsAAABCwAAAQsAQMACABCwAAAQsAAABCwAAAELAAABCwBAwAIAELAAABCwAAAELAAAAQsAQMACAEDAAgAQsAAABCwAAAQsAAABC/aYm2++Of3zP/9zeuMb35hOPvnk9IMf/CA1NTVl09asWZP69evXXPr3759OOumkdN1112XTN2zYkD0f8xWK6WeddVZN1u+3v/1tOu6441o9/9nPfjY99dRT2foOHjw4velNb0ojR45My5Yts707oK3tmG/v3KRJk9IPf/hD9Xs3lduO+fb+3e9+l975zndm6/+FL3whbdu2reTrTJgwocV7efe73+3DDQEL9pbLL788nXbaaenBBx9MDQ0N2Qf6u971rnTxxRe3OAHFiSbs3LkzPfnkk+nYY49N8+bN6/QT0JYtW9Kpp56ajjnmmBbPx3rEet57771pyJAhWRjYvHlz+ta3vpXe//73297tdN9991Xcjvn2jmCydevWbHqsx74esPbl+l1pO+bbO/bFW97yljRz5sy0du3a9IlPfCJdcsklJV/vox/9aLr//vt9qCFgwd62fv36NGDAgLRw4cIWz//hD3/IvimXOgHlPvaxj2Unmc4OWHEC+spXvtIqYBWuY6GXXnopHXnkkc0tFLZ3xxRvx8J1HD16dPrMZz6T/d2XA9a+vr0rbcd8HefMmZPe9773NT8f7+XEE08s+Xpve9vbsv0GAha009ALN7WrtGXWrFnp7W9/e8V5ik9A27dvz7osjj766FRXV9fuE1B8Ey/sxsjLbbfd1mreRx99NL3nPe9Jzz77bKuAdcUVV6Rp06a1+j933nln+td//deabO+Xh53YrrK/b+9K27Fwe+cn8fHjx9c0YDXe87ftKvv79q60HfPtHcv54he/2Px8dA/G60XLVqFYzwjEEQwHDhyYPvjBD6YlS5b40ETAgr0RsH75y1+m9773vVWdgPLyute9LhvH0tljVOJEMmzYsPT000+n5557rlXA+tCHPpRefvnlFs+98MIL2Rii6NrZFwPWvry929qOpbb3vh6w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6NoBa9y4cemiiy6yZwAAAWt3NTQ0pDFjxqRu3boJWACAgFULZ555Zho5cmT2V8ACAASsGqivr8/+nnfeeQIWACBg1VI1AWvFihWprq5OURRFURSlZiXyxQEdsAAAtGAJWACAgCVgAQAIWAAAAhYAgIAFAICABQAgYAEACFgAAAhYAAACFgCAgAUAIGABACBgAQAIWAAAAhYAAAIWAICABQAgYAEAIGABAAhYAAACFgAAAhYAgIAFACBgAQAIWAAACFgAAAIWAICABQCAgAUAIGABAAhYAAAIWAAAAhYAgIAFAICABQAgYAEACFhp7ty56dhjj00HH3xwOuuss9LWrVtLzjd69OjUrVu35jJ48GB7BwAQsIpt3rw5HXbYYWnatGlp9erV6fTTT08TJkwoOe+wYcPS7Nmz7REAQMCqZMaMGemUU05pfvzEE0+kI488suS8ffv2TfX19fYIACBgVTJ58uR09tlnNz+O7sHo/tu0aVOL+datW5d69OiRhg8fnnr37p2GDBmSFi1aZO8AAAJWsUmTJqVzzz23xXMHHXRQWrVqVYvn5s+fn/r06ZP93bBhQxo7dmwaNGhQampqsocAAAGr0KWXXprOOeec5sd5C9aWLVsq/r/GxsbUs2fPtGzZspLTV6xYkerq6hRFURRFUWpWIl/sFwHrjjvuSKeddlrz4wULFqT+/fu3+f8igHXv3j2tXLlSBAYAtGAVirFWhx56aJoyZUrzVYTjxo1rNd/UqVPTwIEDswC2fv36NGrUqDR06FB7BwAQsEp54IEH0vHHH58NXh85cmR264bc4Ycfnl1pGCZOnJj69euXevXqlUaMGFHTZjoAgC4VsAAABCwAAAQsAAABCwBAwAIAQMACABCwAAAELAAABCwAAAELAEDAAgAQsAAAELAAAAQsAAABCwAAAQsAQMACABCwAAAQsAAABCwAAAELAAABCwBAwAIAELAAAAQsAAAELAAAAQsAQMACAEDAAgAQsAAABCwAAAQsAAABCwBAwKqBuXPnpmOPPTYdfPDB6ayzzkpbt261dwAAAaujNm/enA477LA0bdq0tHr16nT66aenCRMm2DsAgIDVUTNmzEinnHJK8+MnnngiHXnkkfYOACBgddTkyZPT2Wef3fw4uge7deuWNm3aZA8BAAJWR0yaNCmde+65LZ476KCD0qpVq+whAEDA6ohLL700nXPOOc2P8xasLVu2lJz/xz/+cRo8eLCiKIqiKErNSuSLLhWw7rjjjnTaaac1P16wYEHq37+/+AsAaMHqqBhrdeihh6YpU6Y0X0U4btw4ewcAELB2xwMPPJCOP/741Lt37zRy5Mjs1g0AAAIWAAACFgCAgAUAIGABAAhYdJLnn38+u7/X29/+9lbTPvnJT2bT6uvrK77Ggw8+mI455ph2LTeuyLzooovKTvdD2127HlSzfy+//PJsucUl1jWMHj26xfNxvxgOrDqiHqgLhS644ILsdkqHHHJIGjp0aFqyZIl6ImDt3QOle/fuaeDAgem5555rfn7btm3p1FNPrfmB0tDQkMaMGZO9brmA5Ye2u3Y96Oj+jV9W+NSnPtX8eNiwYWn27Nl23gFeR9QDdSHMmjUre70IVXGbpTjPxLqoJwLWXj9QvvSlL2W/v5iLG62ef/75LQ6U22+/PR133HHpVa96VXrf+96XXnjhheYD5U1velP69Kc/nV7zmtekd73rXWn58uUll3fmmWdmt7yIv+UClh/a7tr1oCP7N26Z0rdv3/TKK680PxeP2/oQp+vXEfVAXSgllt+jR4/U1NSknghYe/dAuf/++1tU4o9//OPpoYceaj5QFi9enF772tdm3xLWrVuXPve5z6V3vvOdzQdKzHfxxRen9evXZ98conm2XKUP5513XtmA5Ye2u3Y96Mj+jW+i11xzTfPjWHZ8eA4fPjy7T92QIUPSokWL7MgDrI6oB+pCOdOnT08nnHCCeiJg7f0DZceOHVkzbDT3xu8tHn300Vnyzw+U+G3G6PvOxTw9e/ZML774YnagRL93/k0hmnTjNeOgKadSwPJD2127HrR3/z788MPZrypE93Ju/vz5qU+fPtnfDRs2pLFjx6ZBgwY1L5sDo46oB+pCKdESFq89Z84c9UTA2vsHSohvCZdddln280Cf/exnd+2M/zlQvvjFL7bq9z7iiCPSI488kh0ohX3dIU6Ilb4hVApY7f2hbfavetDe/fv5z38+qy+VNDY2Zh/cy5YtszMPwDqiHqgLuaVLl6ajjjoq3XTTTeqJgLXvHCi33XZbdlXIhz/84axJt/BAiWbcwm8i8W0jKuizzz6bHShveMMbmqfFOJl4zUpNuJUClh/a7tr1oL37N8Zp5OtRTnzYxrJWrlxpZx6AdUQ9UBfCwoULs1a0mTNnqicC1r51oESli/7pww8/PLsapPBA+dOf/pQNUrz77ruzJtzoS8/7t/O+9CuvvDLr645vMWeccUbF5VYKWH5ou2vXg/bs37Vr12avuWLFihbPT506NbuCKT5sYz1GjRpVdtwfXbeOqAfqQm7NmjVpwIABad68eeqJgLXvHSjhAx/4QPrYxz72151RcDXILbfc0nwvkn/5l3/JvoXkB8qJJ56YPvShD2UH2ogRI9JLL73U7oAVB2hcMRL80HbXrgeV9m9hPXjssceysROlTJw4MfXr1y/16tUrW1ZxCOPAqCPqgboQdWH8+PEl75u3ceNG9UTAAgAQsAAABCwAAAELAAABCwBAwAIAELAAABCwAAAELAAAAQsAAAELAEDAAgAQsAAAELAAAAQsAAABCwBAwAIAQMACABCwAAAELAAABCwAAAELAEDAAqiF7du3p6amJhsCELAAdseAAQPSfffdl3bu3Jne/OY3p4aGhj2y3NGjR6du3bo1l8GDBzdPmzt3bjr22GPTwQcfnM4666y0devW3Z4GCFgAezxgNTY2ZkFnTwWsYcOGpdmzZ7d6fvPmzemwww5L06ZNS6tXr06nn356mjBhwm5NAwQsgL0SsE4++eTm1qT6+vo0Z86c9Ja3vCW9+tWvTh/5yEfS2rVrs/kffPDBdNJJJ6VTTjklHXHEEWnLli0dWm7fvn2z5RSbMWNG9tq5J554Ih155JG7NQ0QsAD2SsAqbMF68cUX06te9ap06623pvXr12fdeR//+MebA1bMN3PmzPTSSy+1eK2pU6e26PbLy80339xivnXr1qUePXqk4cOHp969e6chQ4akRYsWZdMmT56czj777OZ5o5svXmPTpk0dngYIWAB7PWBdddVVWRdbLrrfIhBt27YtC1j/8A//sFvLnD9/furTp0/2d8OGDWns2LFp0KBB2QD7SZMmpXPPPbfF/AcddFBatWpVh6cBAhbAXg9Y559/fsmWqMWLF2cBKwbD11Isu2fPnmnZsmXp0ksvTeecc07ztLwlKroiOzoNELAA9nrAuuKKK7Kr8EqJgBWtTaVU20VYLEJQ9+7d08qVK9Mdd9yRTjvttOZpCxYsSP3798/+3dFpgIAFsFcCVvibv/mbtHz58rR06dKsC++uu+7KuvCuv/76LKzEfbIqBaxqRRAbOHBgFoJijNeoUaPS0KFDs2kxZurQQw9NU6ZMab4acNy4cbs1DRCwAPZawIqB7NFV9/TTT6df//rX6fjjj8/uKXXiiSemurq6bJ5aBKwwceLE1K9fv9SrV680YsSItGLFiuZpDzzwQLbsGAA/cuTIbAzY7k4DBCwAAAQsAAABCwBAwAIAQMACABCwAAAELAAABCwAAAELAEDAAgBAwAIAELAAAAQsAAABCwAAAQsAQMACABCwAAAQsAAABCwAAAELAAABCwBAwAIA2D/9f3dZ1r6a8XUzAAAAAElFTkSuQmCC\\n\",\n      \"text/plain\": [\n       \"<IPython.core.display.Image object>\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"Image(filename='exp_img/5000_2.png') \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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CwBAD5aABQAIWAIWAMC+ELAAAAQsAAAELAAAAQsAQMACABCwAAAQsAAABCwAAAELAAABCwBAwAIAELAAABCwAAAELAAAAQsAAAELAEDAAgAQsAAABCwAAAQsAAABCwBAwAIAQMACABCwAAAELAAABCwAAAELAEDAAgBAwAIAELAAAAQsAAABCwAAAQsAQMACABCwAAAQsAAABCwAAAELAAABCwBAwAIAELAAAAQsAAAELAAAAQsAQMBqPzNmzEh9+vRJhxxySDr77LPTtm3bKi43bNiw1KNHj0Lp16+f2gEABKxymzdvTkcccUSaOHFiWr16dTr99NPTyJEjKy47cODANG3aNDUCAAhY1UyZMiX179+/8POzzz6bjjnmmIrLHnXUUWn58uVqBAAQsKoZN25cOueccwo/x/BgDP9t2rSpZLl169alnj17pkGDBqVDDz00nXbaaWnBggVqBwAQsMqNHj06nX/++SWPHXDAAWnVqlUlj82ePTsddthh2b8bNmxIF154YTrhhBNSY2OjGgIABKxiY8eOTUOHDi38nPdgbdmypervNTQ0pIMOOigtWbKk4vPLli1Lc+fOVRRFURRFabcS+aJbBKzJkyenU089tfDzvHnz0tFHH93i70UAO/DAA9OKFStEYABAD1axmGt1+OGHp/HjxxeuIhwxYkST5SZMmJB69+6dBbD169en8847Lw0YMEDtAAACViWzZs1Kffv2zSavDxkyJLt1Q+7II4/MrjQMo0aNSr169UoHH3xwGjx4cLt20wEA7FMBCwBAwAIAQMACABCwAAAELAAABCwAAAELAEDAAgBAwAIAELAAAAQsAAABCwAAAQsAQMACABCwAAAQsAAABCwAAAELAAABCwBAwAIAELAAABCwAAAELAAAAQsAQMACAEDAAgAQsAAABCwAAAQsAAABCwBAwAIAQMACABCwAAAELAAABCwAAAELAEDAAgAQsAAAELAAAAQsAAABCwAAAQsAQMACABCwAADo+gFrxowZqU+fPumQQw5JZ599dtq2bZvaAQAErNbavHlzOuKII9LEiRPT6tWr0+mnn55GjhypdgAAAau1pkyZkvr371/4+dlnn03HHHOM2gEABKzWGjduXDrnnHMKP8fwYI8ePdKmTZvUEAAgYLXG6NGj0/nnn1/y2AEHHJBWrVqlhgAAAas1xo4dm4YOHVr4Oe/B2rJlS8Xlr7/++tSvXz9FURRFUZR2K5Ev9qmANXny5HTqqacWfp43b146+uijxV8AQA9Wa8Vcq8MPPzyNHz++cBXhiBEj1A4AIGC1xaxZs1Lfvn3ToYcemoYMGZLdugEAQMACAEDAAgAQsAAABCwAAAGLDnTTTTelE088Mfuj1u985zvT5ZdfnhobG7Pn4saqcf+vvLzlLW9Jxx57bLr66quz59etW5c9Xn4D1nj+Ix/5SLu8vwcffDD94R/+oYqyX2Quu+yy7JYpb33rW9OAAQPSwoULVZZjRSau9B4zZoyK2g/3gRkzZqQ+ffpk7+vss8/O7l1ZybBhw0reY9xnSsCiQ8Qd64877rj08MMPZzdRffrpp9MJJ5yQLrnkkpIvTHwxwq5du9JTTz2V3v72t6fp06d3+EEzrtzs3bt3Ouyww1SW/SLdd9996fjjj89CVdxKZfjw4emUU05RYfv5sWLr1q3ZvhDrF7D2v30g2okjjjgiTZw4sXBbpZEjR1ZcduDAgWnatGl6sOhYa9euTQcddFD2h6yLPfbYY9kZQKUvTG7QoEHZ32vs6ID1pS99KZ177rkClv2iouXLl6eePXsWzqDZP/eJs846K7uVTvwrYO1/+8CUKVNS//79Cz/HezzmmGMqLnvUUUdlxw0Biw515513pne9611Vlyn/wmzfvj3rin3b296WHnnkkbq/MBMmTCjpns3L7bff3mTZOXPmpL/9279NL7/8soBlv6ho0qRJ6aSTTlJp+/k+kTeYF1xwgYC1H+4DEd7OOeecws/5n7aLXu5i8fpxQhaBL+5vedppp6UFCxYIWLS/m2++Ob3//e+v6QuTlwMPPDAbd48dOt9hO+KMJL4gf/VXf5WeeeaZtHjxYgHLftHE0qVLs7lYMfSAfULA2n/3gRi6PP/880seO+CAA5q8zuzZs7O2JP7dsGFDuvDCC7Mhzv2pB1zA6iRTp07Ndv5KVq5cWfGMpFyMw8fz5V2u3/nOd9IZZ5zR6vd26aWXFsbQBSz7RblFixal97znPem2225TYfYJAWs/3wfGjh2bhg4dWnKCHq8Tr1dNQ0NDNuy5ZMkSAYv2tX79+vT7v//7TcbUn3jiiaz7dOPGjS1+YUJMYHz88cebHOjiao1ytXb5xkTmSsvtz2Pn9os95s+fn020jQM+9gkByz4wefLkdOqppxZ+njdvXta73ZIIYNHLtmLFCgGL9he9RHFpa3SZxs4WExbj57z3qJYvzGc/+9nscvnoaYqrOeJKrz/6oz/KrjRpD3qw7Be5NWvWZJd9z5w5UyXZJwQs+0Am5lodfvjhafz48YWrCOOWHZUCW1yVHgEsAuN5552XvZf9iYDViWLsObpnY7glzk5iEuNVV13V5L4m1b4wceYSV/r9yZ/8SbaOGNO+9dZb2+09Clj2i1xcDl7pjDZeC8cKAWv/3QdmzZqV+vbtm/WmxRWlEd5yRx55ZHalYRg1alTq1atXOvjgg9PgwYPTsmXLBCwAAAQsAAABCwBAwAIAQMACABCwAAAELAAABCwAAAELAEDAAgAQsAAAELAAAAQsAAABCwAAAQsAQMACABCwAAAQsAAABCwAAAELAAABCwBAwAIAELAAarFjx47U2NhoQwACFkBbHHvssemhhx5Ku3btSn/5l3+Ztm7d2imvO2zYsNSjR49C6devX+G5GTNmpD59+qRDDjkknX322Wnbtm1tfg4QsAA6PWA1NDRkQaezAtbAgQPTtGnTmjy+efPmdMQRR6SJEyem1atXp9NPPz2NHDmyTc8BAhbAXglY73//+wu9ScuXL0/Tp09P733ve9Mf/MEfpDPPPDOtXbs2W37OnDnpfe97X+rfv396xzvekbZs2dKq1z3qqKOy1yk3ZcqUbN25Z599Nh1zzDFteg4QsAD2SsAq7sF6/fXX09ve9rZ0xx13pPXr12fDeZ/85CcLASuWmzp1alq5cmXJuiZMmFAy7JeX22+/vWS5devWpZ49e6ZBgwalQw89NJ122mlpwYIF2XPjxo1L55xzTmHZGOaLdWzatKnVzwECFsBeD1jXXnttNsSWi+G3CETbt2/PAtYf//Eft+k1Z8+enQ477LDs3w0bNqQLL7wwnXDCCdkE+9GjR6fzzz+/ZPkDDjggrVq1qtXPAQIWwF4PWBdffHHFnqiXX345C1gxGb49xWsfdNBBacmSJWns2LFp6NChhefynqgYimztc4CABbDXA9Y111yTXYVXSQSs6G2qpNYhwnIRgg488MC0YsWKNHny5HTqqacWnps3b146+uijs/+39jlAwALYKwErvOUtb0lLly5NixYtyobw7r333mwI78Ybb8zCStwnq1rAqlUEsd69e2chKOZ4nXfeeWnAgAHZczFn6vDDD0/jx48vXA04YsSINj0HCFgAey1gxUT2GKp74YUX0j333JP69u2b3VPq5JNPTnPnzs2WaY+AFUaNGpV69eqVDj744DR48OC0bNmywnOzZs3KXjsmwA8ZMiSbA9bW5wABCwAAAQsAQMACABCwAAAQsAAABCwAAAELAAABCwBAwAIAELAAABCwAAAELAAAAQsAQMACAEDAAgAQsAAABCwAAAQsAAABCwBAwAIAQMACABCwAAC6p/8PUna0/E1hinMAAAAASUVORK5CYII=\\n\",\n      \"text/plain\": [\n       \"<IPython.core.display.Image object>\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"Image(filename='exp_img/5000_3.png') \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Iter = 500\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"| Exp   |      Mob 1.0      |  Mob 0.75  |Mob 0.5   |Mob 0.25   |\\n\",\n    \"|----------|:-------------:|:-------------:|:-------------:|:-------------:|\\n\",\n    \"|  CPU = 4  |  0.02051069524 | 0.01426426142 | 0.008495391378 | 0.004515069188 |\\n\",\n    \"| CPU = 2   | 0.02922545242 | 0.01855015136 | 0.01072093597 | 0.005292796298 |\\n\",\n    \"| CPU = 1  |  0.05900840658 | 0.03781192797 | 0.02081295101 | 0.01101532969 |\\n\",\n    \"| CPU = 0.5  |  0.1174173313 | 0.07161711947 | 0.04177759899 | 0.02059194843 |\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAlgAAAFzCAYAAADi5Xe0AAAhcElEQVR42u3dDZBVdf34cYgfBDIN1UAMRFCJQANlQQ9EUBMMU0PRg7/oZzNQkCYF0biCT0ApRGK6reMvy3RG/+UoJQ89sNgPwQyBUTEUwRJKQvABkKcFWXbRhf38+56Ze2cXlmV32YVl9/WaOYP37mF3OR/vPe8999yzbQIAgEbVxiYAABBYAAACCwBAYAEAILAAAAQWAIDAAgBAYAEACCwAAIEFAIDAAgAQWAAAAgsAQGABACCwAAAEFgCAwAIAQGABAAgsAACBBQCAwAIAEFgAAAKrqn379sXVV18dv/jFL0762IEDB+KVV145bzfW0qVLs39bTcv9999fbd1jx47Fo48+Grfccktcf/31cfPNN8cjjzwSx48fP+nz1mddAEBg5W3bti1mzpwZ69atO2831t13313nwFqwYEGd1qvvugCAwMp7+umns/vP58CaM2dO3Hrrradd75///Gf2b/3xj38c//rXv+LNN9+MF154Ibud7k8fb8i6AIDAalGBVVpaWuejSr/5zW+ydVMwVZXCKd1/3333NWhdAEBg5e+r6SWw1157Lf/x8vLyWLZsWcyfPz+uu+66mDdvXvz+97/Poqaqe++9N2666abYvXt3diRp1qxZ8bvf/e6sbKitW7dm33c6V+p05s6dGzfccENUVlZWuz/dvvHGG7OlIesCAAKrToFVVlYWhYWFNZ6DlILr8OHD1QIrxVfV9R966KFav5+0/qnOm8otf/rTn07771q7dm227urVq+PXv/51Fnc/+tGPsiNMe/bsqRaLab1f/vKXNX6eO++8M/t4+nfXZ10AQGDV+SXCxYsXZ/enCEtHpioqKmL//v1Z9KT7H3jggWqBle772c9+lq2T3mV3unfaNVZg5b7Pa6+99qS//8Mf/jBeffXVbL2SkpJaX9rLvSSY3lFZn3UBAIFVp8BKlydI7ywsKio66SWyJL1rLwXNG2+8US2wNm7ceNY31B133JF9L+nyCSmM0snoL7/8ctx1113Z95T+DUk6MndiGFaV7s8dwavPugCAwKpTYO3cufO0R5fSsmPHjmqBlY5eNRcptNJ5Yen7Skfg0vdWl6NSKdLqsy4AILDqFFj//ve/6xRYW7ZsqRZY9TknqbFeIqzNgw8+mH2e559/Pvve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\\n\",\n      \"text/plain\": [\n       \"<IPython.core.display.Image object>\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"Image(filename='exp_img/500_1.png') \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAlgAAAFzCAYAAADi5Xe0AAAuPElEQVR42u3dCXxU1f33cSx/eKE8lvZffHhACloRULCLvNzF/yOU1uJaW1proWKr4oaPCFqkVAtFUYuAS12wtWotKIsLQYHgwhIFMS4gCApCWEzYk0BWsvyefE9yhpvJzGQmGSAkn/frdV6QmZuZm3vPnfu955x7ppkBAAAgqZqxCQAAAAhYAAAABCwAAAACFgAAAAhYAAAABCwAAAACFgAAAAhYAAAABCwAAAACFgAAAAhYAAAABCwAAAACFgAAAAELAAAABCwAAAACFgAAAAELAAAABCwAAAACFgAAAAELAAAABCwAAAACFgAAAAEraNeuXXbnnXfa3//+9xrP7dmzx7Zu3dpg/vjZs2e7dY1UXnzxxWrLlpaW2jvvvGMPPfSQ3X333fbAAw/YW2+9ZWVlZTVeN5Fla7NlyxabMWOGe61Ro0bZn//8Z3vyySfto48+svLy8mrLLly4MOLf8sc//tHuvfde93uffPJJtd9577333DJa32gKCgrcMhMmTKh1fV944QW37N69ezm6jgCRjkn2IQAcQQFrw4YNLiB88MEHDeaPnzJlStwBa+rUqXEtl+iy0Sg8zZ071+66666o6/if//ynWsiKFrDCi8IeAQvRjkn2IQAcQQFLLS56vCEFrDFjxtjf/va3Wpf74osv3Lr/9a9/tS+//NL2799v69atcz/rcT1fl2VjSU1Ndcv/6U9/svnz59v27dvda+Xm5tqyZctci5SenzdvXo2AtXjx4mqvpZazvLw8F6IU2EaOHBk6eSY7YOHI0RCPSQAgYB3hAUuBI95Wpeeff94tq8AUpOCkx3XFX5dlo1GYUreeuhczMjIiLqNuHQUlBbDCwsKYASvoX//6l1tG+4OARcAiYAHAERywInWZKUR4Cghz5syx8ePHu9Awbtw4e+WVV1wICnr22Wft/vvvt23btrmWJ4WLl156qU7ruX79+lqDhTd27FjXYhQ+5kk//+Uvf3GlLstG8+abb7p10xix2pbT379jx464A5Z/bb/Mwe4ifO6551xLodZR4fOee+5xwfHxxx+3NWvWRHyvlJQUVxe0nPa3WvOC49dqqwfx1idRgNU6q4VRy44ePdqt26efflpj/7377rs2ceJE162mv+Ppp5+O+Dck8v7hXn31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Ovyks2pxUeuW7qTUPlDLogLa8uXLa+yHeN+/Nvqb/VxTkepkIusUSbRj8mAErGRuFwBokgELAACAgAUAAAACFgAAAAELAACAgAUAAAACFgAAAAELAACAgAUAAAACFgAAAAELAACAgAUAAAACFgAAAAELAACAgAUAAEDAAgAAAAELAACAgAUAAEDAAgAAAAELAACAgAUcMtOmTbMf//jH9r3vfc/OOusse+SRR6y8vNw9t3v3buvQoUOodOzY0c4880ybMmWKez43N9c9ruWC9PygQYOSsn7vvfeenXLKKTUev/HGG23VqlVufXv16mUnnXSSDRgwwDIyMtjedVDbdvTb2xs7dqw99thj1O96irYd/fZ+//337YILLnDrf9ttt1lxcXHE1xk9enS1v+Wiiy7iww0ELOBwmTRpkp1//vm2dOlSKywsdB/oF154oT3wwAPVTkA60UhZWZl99tln1r17d1u8ePFBPwEVFBTYueeea926dav2uNZD6/nOO+9Y7969XRjIz8+3e++91y677DK2d4LefffdmNvRb28Fk6KiIve81qOhB6yGXL9jbUe/vbUvTjvtNJszZ47t2bPHrrnmGnvwwQcjvt6vfvUrW7RoER9qIGABh1tOTo517tzZ1qxZU+3xTz75xF0pRzoBeVdddZU7yRzsgKUT0F133VUjYAXXMWj79u3WqVOnUAsF27tuwrdjcB2HDh1qN9xwg/u3IQeshr69Y21Hv44LFiywSy65JPS4/pYzzjgj4uv98Ic/dPsNIGABCepzX15CpTbz5s2zc845J+Yy4Seg/fv3uy6Lrl27Wnp6esInIF2JB7sxfHnttddqLPvRRx/Zz372M9u4cWONgDV58mSbOXNmjd9544037Kc//WlStveOvmckVI707R1rOwa3tz+Jjxo1KqkBq+St/0qoHOnbO9Z29Ntb73P77beHHlf3oF5PLVtBWk8FYgXDLl262M9//nNbv349H5ogYAGHI2C99NJLdvHFF8d1AvLlu9/9rhvHcrDHqOhE0rdvX1u9erVt3ry5RsC68sorbceOHdUe27p1qxtDpK6dhhiwGvL2rm07RtreDT1gHSnbO9J29NtbXZx33313teeOP/74GuuzfPlyd4zo371799qYMWNCXboAAQs4xAHrrbfecieTSHbu3BnxCj+cxrXo+fCuiSeffNKuu+66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\\n\",\n      \"text/plain\": [\n       \"<IPython.core.display.Image object>\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"Image(filename='exp_img/500_2.png') \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<IPython.core.display.Image object>\"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"Image(filename='exp_img/500_3.png') \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Caveat - \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"An important factor to note about these results is that the code used reaches a threshold at CPU=4 where despite availablability of further resources, The average CPU utilization is throttled at (270% , 300%) range. Hence the code cannot scale beyond more computation resources. This is reflected in the results as well, where CPU = 4 becomes an outlier/\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.7.3-final\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}"
  },
  {
    "path": "Examples/profiler_examples/issues.md",
    "content": "# Known issues\n\n+ Remove any dangling Dockerfiles in the profiler directory before executing Profiler as they might interfere.\n \n+ Once Docker has started running, if you hit Ctrl+Z, you will only exit from the Profiler script. Docker will continue to run in the background until completion unless you stop the Docker process separately."
  },
  {
    "path": "Examples/profiler_examples/mnist/mnist.py",
    "content": "\"\"\" Convolutional Neural Network.\nBuild and train a convolutional neural network with TensorFlow.\nThis example is using the MNIST database of handwritten digits\n(http://yann.lecun.com/exdb/mnist/)\nThis example is using TensorFlow layers API, see 'convolutional_network_raw' \nexample for a raw implementation with variables.\nAuthor: Aymeric Damien\nProject: https://github.com/aymericdamien/TensorFlow-Examples/\n\"\"\"\nfrom __future__ import division, print_function, absolute_import\n\n# Import MNIST data\nfrom tensorflow.examples.tutorials.mnist import input_data\nmnist = input_data.read_data_sets(\"/mnist_data\", one_hot=False)\n\nimport tensorflow as tf\n\n# Training Parameters\nlearning_rate = 0.001\nnum_steps = 2000\nbatch_size = 128\n\n# Network Parameters\nnum_input = 784 # MNIST data input (img shape: 28*28)\nnum_classes = 10 # MNIST total classes (0-9 digits)\ndropout = 0.25 # Dropout, probability to drop a unit\n\n\n# Create the neural network\ndef conv_net(x_dict, n_classes, dropout, reuse, is_training):\n    # Define a scope for reusing the variables\n    with tf.variable_scope('ConvNet', reuse=reuse):\n        # TF Estimator input is a dict, in case of multiple inputs\n        x = x_dict['images']\n\n        # MNIST data input is a 1-D vector of 784 features (28*28 pixels)\n        # Reshape to match picture format [Height x Width x Channel]\n        # Tensor input become 4-D: [Batch Size, Height, Width, Channel]\n        x = tf.reshape(x, shape=[-1, 28, 28, 1])\n\n        # Convolution Layer with 32 filters and a kernel size of 5\n        conv1 = tf.layers.conv2d(x, 32, 5, activation=tf.nn.relu)\n        # Max Pooling (down-sampling) with strides of 2 and kernel size of 2\n        conv1 = tf.layers.max_pooling2d(conv1, 2, 2)\n\n        # Convolution Layer with 64 filters and a kernel size of 3\n        conv2 = tf.layers.conv2d(conv1, 64, 3, activation=tf.nn.relu)\n        # Max Pooling (down-sampling) with strides of 2 and kernel size of 2\n        conv2 = tf.layers.max_pooling2d(conv2, 2, 2)\n\n        # Flatten the data to a 1-D vector for the fully connected layer\n        fc1 = tf.contrib.layers.flatten(conv2)\n\n        # Fully connected layer (in tf contrib folder for now)\n        fc1 = tf.layers.dense(fc1, 1024)\n        # Apply Dropout (if is_training is False, dropout is not applied)\n        fc1 = tf.layers.dropout(fc1, rate=dropout, training=is_training)\n\n        # Output layer, class prediction\n        out = tf.layers.dense(fc1, n_classes)\n\n    return out\n\n\n# Define the model function (following TF Estimator Template)\ndef model_fn(features, labels, mode):\n    # Build the neural network\n    # Because Dropout have different behavior at training and prediction time, we\n    # need to create 2 distinct computation graphs that still share the same weights.\n    logits_train = conv_net(features, num_classes, dropout, reuse=False,\n                            is_training=True)\n    logits_test = conv_net(features, num_classes, dropout, reuse=True,\n                           is_training=False)\n\n    # Predictions\n    pred_classes = tf.argmax(logits_test, axis=1)\n    pred_probas = tf.nn.softmax(logits_test)\n\n    # If prediction mode, early return\n    if mode == tf.estimator.ModeKeys.PREDICT:\n        return tf.estimator.EstimatorSpec(mode, predictions=pred_classes)\n\n        # Define loss and optimizer\n    loss_op = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(\n        logits=logits_train, labels=tf.cast(labels, dtype=tf.int32)))\n    optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)\n    train_op = optimizer.minimize(loss_op,\n                                  global_step=tf.train.get_global_step())\n\n    # Evaluate the accuracy of the model\n    acc_op = tf.metrics.accuracy(labels=labels, predictions=pred_classes)\n\n    # TF Estimators requires to return a EstimatorSpec, that specify\n    # the different ops for training, evaluating, ...\n    estim_specs = tf.estimator.EstimatorSpec(\n        mode=mode,\n        predictions=pred_classes,\n        loss=loss_op,\n        train_op=train_op,\n        eval_metric_ops={'accuracy': acc_op})\n\n    return estim_specs\n\n# Build the Estimator\nmodel = tf.estimator.Estimator(model_fn)\n\n# Define the input function for training\ninput_fn = tf.estimator.inputs.numpy_input_fn(\n    x={'images': mnist.train.images}, y=mnist.train.labels,\n    batch_size=batch_size, num_epochs=None, shuffle=True)\n# Train the Model\nmodel.train(input_fn, steps=num_steps)\n\n# Evaluate the Model\n# Define the input function for evaluating\ninput_fn = tf.estimator.inputs.numpy_input_fn(\n    x={'images': mnist.test.images}, y=mnist.test.labels,\n    batch_size=batch_size, shuffle=False)\n# Use the Estimator 'evaluate' method\ne = model.evaluate(input_fn)\n\nprint(\"Testing Accuracy:\", e['accuracy'])\n"
  },
  {
    "path": "Examples/profiler_examples/model_names.txt",
    "content": "mobilenet_v1_0.75_224.tflite\nmobilenet_v1_1.0_224.tflite\n"
  },
  {
    "path": "Examples/quad_equation_min/QUAD_MIN_Demo.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Minimum of quadratic function Demo\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"In this tutorial we will show how to find the minimum of a quadratic function using Auptimizer. We also demonstrate how to effectively switch between various HPO proposers such as Spearmint and BOHB.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Running the Experiments \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"In this experiment we try to find the best X such that f(X) is minimal.\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Each instance of 'quad_min.py' would accept an X that calculates the value of the quadratic function. The ‘quad_min_[proposer].json’ file contains code to perform HPO using CPU resources and consider 50 samples for each proposer. We can easily switch between proposers and see how they choose different configurations to optimize the final performance.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"To run the experiment use command- \\n\",\n    \"\\n\",\n    \"'python3 -m aup quad_min_[proposer].json' \\n\",\n    \"\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Analysis \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"We next analyze the experiment results using the sqlite database for our experiments. The details for the experiment can be found inn the jobs profile, but here we aim to compare the proposers. Experiment 1 is performed using BOHB, then random and finally Spearmint.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"'''\\n\",\n    \"Connect to the Auptimizer database\\n\",\n    \"''' \\n\",\n    \"\\n\",\n    \"import sqlite3\\n\",\n    \"import time\\n\",\n    \"import datetime\\n\",\n    \"import random\\n\",\n    \"\\n\",\n    \"conn = sqlite3.connect('sqlite3.db')\\n\",\n    \"c = conn.cursor()\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"'''\\n\",\n    \"Function to compile and return details from a Auptimizer experiment. \\n\",\n    \"Takes experiment id as input, returns score, jobs ran for the experiments, and end time for each job.\\n\",\n    \"''' \\n\",\n    \"\\n\",\n    \"def graph_data(ex, cursor):\\n\",\n    \"    cursor.execute('SELECT score, jid, end_time FROM job WHERE typeof(score)==\\\\'real\\\\' and eid = '+ str(ex))\\n\",\n    \"    data = cursor.fetchall()\\n\",\n    \"\\n\",\n    \"    jobs = []\\n\",\n    \"    score = []\\n\",\n    \"    times =[]\\n\",\n    \"    \\n\",\n    \"    for row in data:\\n\",\n    \"        times.append(row[2])\\n\",\n    \"        jobs.append(row[1])\\n\",\n    \"        score.append(row[0])\\n\",\n    \"\\n\",\n    \"    times = [a-min(times) for a in times] \\n\",\n    \"    jobs = [a-min(jobs) for a in jobs]\\n\",\n    \"    \\n\",\n    \"    print(score)\\n\",\n    \"    print(jobs)\\n\",\n    \"    \\n\",\n    \"    return (score, times, jobs)\\n\",\n    \"    \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[6148.106139221136, 10438.637919012073, 7415.6298730541, 6060.406530867955, 3664.920102436913, 8514.390146411502, 3909.7273413323915, 16227.975850616904, 18949.333977751823, 3002.7529813288706, 12791.65578998259, 5710.14811693708, 6586.3076663701, 17482.08784937461, 106.05097215471763, 157.98208630594334, 11.44000290631149, 14146.904978499952, 12357.080808454182, 15445.805059455917, 19541.970126709333, 13032.9272883446, 4347.975242825175, 12432.524670292085, 288.5003098979952, 8357.696833979042, 422.36446655402744, 18209.8318006542, 5559.088337974499, 3511.112188373727, 1431.0292860232905, 12232.83011505206, 4248.207908109023, 6595.336180527122, 10.303060762137134, 7785.924535077077, 7646.9372673592525, 7768.255367710197, 18174.35420915232, 9487.559731339637, 2639.9754755905624, 3899.819338147345, 9932.534803401542, 77.10024584741284, 9073.377353360214, 9179.004614490392, 906.1092905253714, 342.22184461100574, 2032.997899250835, 2701.989279003208, 6636.2871314115855, 3927.859009848557, 19933.46377839, 215.54895165905884, 893.2290434271752, 533.9755569510351, 8705.582990730807, 1312.0236859821218, 4439.427923863416, 1221.9944362568633, 518.6856445554187, 251.65086979919593, 8791.639549216163, 392.6665611417196, 791.5276376934777, 2776.9202466736824, 13754.657682272258, 195.46347563258027, 14328.398330600858, 191.5105114029914, 19455.857917184265, 4484.071823536638, 19467.877481863343, 7466.92897242087, 11153.010073705345, 34.43100582618657, 1634.8474324227357, 297.8520463070646, 1792.335336437659, 290.69212600328666, 2066.013595105786, 3504.3653315921824, 87.0522160740486, 9786.218811810271, 6552.901115759534, 1440.0451339462006, 5588.933496367393, 183.1439686948838, 6770.736489897746, 17622.0922085697, 2073.62099265998, 9090.897825009191, 357.4965426541574, 10471.869381877272, 1711.8875991265356, 687.7722504762877, 7021.3354179159505, 11.34880226594397, 14022.162352737285, 3.5498130271587858, 9376.498124625585, 1490.493642592927, 11030.590123862217, 18891.41025923904, 1265.537535038463, 6775.692304218736, 7154.279454332183, 6684.18871558561, 1018.4139931903604, 18522.62131186837, 4081.8903679691225, 14619.248688302143, 9985.2121771267, 1808.0392280530514, 13514.669117373822, 3210.637205107219, 15842.046702461934, 6896.490066536726, 15864.782780740976, 9787.899266421542, 10734.424903633586, 5130.655824921306, 18652.484890178817, 8464.286331511501, 3668.3825908448157, 7505.175120324333, 10.615665529087309, 1858.6082438067806, 8894.885290153567, 1719.826661417118, 7795.502523945654, 3753.8567029765054, 377.5424368139047, 1818.313802637847, 6630.89370838516, 7126.0629089348, 6732.689324891997, 8708.048088287565, 8678.819442186163, 3800.3583189517426, 16402.1418816525, 2759.445461044005, 3879.035911233086, 16233.447387479662, 13263.35435616637, 10111.45733426073, 208.04684124025985, 17251.935746920182, 10410.989214492674, 20358.080378288647, 458.77450320056, 15378.921455929238, 541.7934658303482, 7733.6948016532115, 315.8909810941599, 14674.544558677915, 13300.387110585678, 6610.811025411567, 3385.7156422877497, 100.70466265645877, 9926.773443429818, 4199.811088150739, 10639.974218597716, 15317.215264171993, 19418.50430156459, 14945.51176006914, 5.8995577127201795, 2646.8769892878286, 10875.044685497587, 604.076534276305, 5541.817516386234, 63.33929155979352, 819.1516406209234, 10.099046262581181, 12855.46321611145, 1026.102509359792, 2436.4013161142993, 17576.054370302154, 10126.56525189996, 23.781863082338973, 556.4872180953723, 7883.074702833368, 6800.900393126976, 1157.7102730040097, 17809.063707527817, 7693.719488126548, 5856.484798397378, 7102.869103694476, 10878.960987263978, 1988.4120955376934, 3238.4494536360403, 901.489808070223, 710.3931786214773, 18198.403582086852, 11161.675591300796, 4910.797895877393, 1058.2386603574305, 1323.052678739327, 71.8013571039346, 3853.320648659735]\\n\",\n      \"[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199]\\n\",\n      \"[3.1, 3.1, 5103.6, 11479.225, 1278.225, 20402.609597487746, 255.96139678955078, 3.1000760033726693, 14.541851735115051, 118.45974311828613, 91.58624259978532, 130.55955605059862, 19.182313656806947, 91.25851605683565, 93.73128578662872, 81.09230492860078, 67.8494772747159, 78.19406831860542, 90.44185981750488, 90.60488705188035, 92.24351976662874, 93.89735315591096, 101.00944475680589, 96.91255895644426, 94.89694951325654, 85.93881199359893, 78.11853996701538, 79.8653064802289, 83.57548712044954, 90.27898458987474, 100.83699310421943, 91.42230332493781, 96.40660450458526, 84.35946190953254, 85.147236867249, 100.7508242804557, 103.52707547731697, 92.90322904139757, 94.64653740115463, 88.01469211131334, 83.41914818286895, 87.05340145379304, 73.72963020801544, 90.11626136898994, 99.46285212635993, 61.423164105415346, 79.10337266921997, 107.31894074231386, 97.08151445388793, 57.62550358325243]\\n\",\n      \"[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]\\n\",\n      \"[18979.21737542377, 10497.40426337924, 9084.777253670089, 1626.7190672055335, 14096.376058669908, 268.50144260897343, 18979.21737542377, 9877.485035005397, 1556.5394610585156, 271.0992430993217, 9819.855781400875, 19716.036917848396, 9877.485035005397, 3207.843110329192, 19551.05251353619, 19689.349388015635, 19742.153301964954, 19677.51246064784, 19716.036917848396, 19633.343953874253, 19713.289439959462, 19712.24227687632, 19725.254604338556, 9295.909023220589, 19713.289439959462, 17317.693515832267, 19731.12717887784, 19733.216794325952, 19737.628596809598, 7446.474946617792, 19731.12717887784, 2476.1773148555417, 8345.886366596742, 19739.3868119695, 19740.456360036816, 19742.194761087318, 8345.886366596742, 19738.781705770016, 19741.95688885989, 19746.456647336945, 2713.676016023622, 1309.4209515403686, 19742.194761087318, 19744.750109136494, 19745.66982152892, 19744.34078633421, 19741.194753359396, 8832.95573481031, 19745.66982152892, 9127.999213721223, 7251.815216566596, 19741.060733514478, 1590.6745786114336, 19747.68389984932, 9127.999213721223, 19742.6247419077, 19744.476725744116, 246.40151623307847, 3669.688925237476, 19745.476732496467, 19747.68389984932, 13713.17457638431, 19744.68561151229, 19742.783368158573, 19745.921504493457, 19747.592473779277, 19745.476732496467, 19742.386375027792, 19747.328560705166, 3579.6167810146503, 19746.203188789626, 19747.82926204643, 19747.592473779277, 19746.297771278998, 19743.895074749948, 19744.35998019022, 19745.803931349496, 877.765253830673, 19747.82926204643, 19751.47664617664, 19746.031270812986, 19752.979148038638, 19746.946310211188, 19742.570869463092, 19751.47664617664, 19748.36504786568, 19748.431933352636, 17770.905960331205, 11995.819917720033, 19747.829082206645, 19748.431933352636, 19749.075901273456, 19466.617572533705, 19752.381577633278, 4969.7059505406505, 17986.83995564123, 19749.075901273456, 19746.896069134582, 19752.08201039945, 19738.11134102032, 498.84938563626804, 19749.19249969937, 19752.08201039945, 19747.896118769637, 13601.619408698383, 19743.260052504305, 5135.726070979244, 3133.919968644151, 19749.19249969937, 19753.853767755834, 19750.87022180548, 7298.115437640935, 19751.536408207703, 19752.884480408073, 19753.853767755834, 19751.542936109065, 19743.659117157807, 19760.302930084134, 19751.59945855852, 155.5773758426209, 19752.884480408073, 19755.991748653338, 19752.848989854927, 19755.563943464425, 19756.570167465317, 19755.165796254398, 19755.991748653338, 650.7690257847578, 19754.41195073914, 19754.28124965953, 19748.34824238597, 18766.323660913975, 19755.165796254398, 19755.60056741995, 19754.622690785753, 367.3642336334456, 19755.873657926197, 19756.508036857296, 19755.60056741995, 896.5164168797209, 19754.35601348591, 19752.144031455326, 19758.934314172016, 19757.074107499466, 19756.508036857296, 19754.32508982097, 832.1434461672089, 19755.20497131739, 19759.584197574448, 1538.0075030758635, 19757.074107499466, 19761.133662230972, 19753.245506417017, 13092.52239813087, 19755.795496009916, 19761.03190742165, 19761.133662230972, 2833.7605702102355, 17897.963529724206, 12634.212612740075, 2124.1020040114136, 19768.180504463475, 19761.03190742165, 7370.455989808017, 19.68243774657819, 19761.025772048826, 19756.31579370775, 19758.785769706912, 19768.180504463475, 19754.827785827918, 8326.354828157624, 15510.591799173293, 19762.62750619028, 3454.7163394186455, 19758.785769706912, 19758.84516555402, 19757.229152422216, 15161.613822921197, 19760.613475738526, 11572.67413015717, 19758.84516555402, 4596.1173031221815, 19758.406050973317, 19765.02777169259, 19766.450367628546, 19757.71886826186, 19758.406050973317, 947.87754489118, 19759.648783668217, 6099.361165615458, 19763.894327864342, 19765.454229586278, 19759.648783668217, 7173.26535664318, 6593.733650972089, 16764.745687285093, 19761.162153941772, 19761.21269354197, 19765.454229586278, 19760.80146521984, 19764.942853018514, 19769.653476055715, 19764.458245166665, 19763.86148253791, 19764.942853018514, 19780.862477780596, 17509.968569680586, 1188.7126078128838, 2948.7390915310903, 19767.273057036124, 19780.862477780596, 19770.83449841099, 19762.24796241168, 19763.014907286077, 19774.493144593405, 19767.817147789738, 19770.83449841099, 19763.606051752115, 19766.647667721933, 19769.9669115918, 19765.245253123256, 19772.13609427558, 19767.817147789738, 19766.82965303794, 2021.0541706174527, 19767.018690237168, 19768.163866661707, 343.13581503560255, 19772.13609427558, 15497.754482203469, 2259.588169542944, 19768.520159473534, 3842.342404806207, 19770.515286477763, 15497.754482203469, 19771.618744039686, 840.6255719899882, 19772.29882048401, 3934.568916780458, 19771.779838303763, 19771.618744039686, 19769.272677170917, 19769.576530850543, 19774.06668734663, 19767.990555865745, 19770.71086662648, 19771.779838303763, 19769.298004300243, 20289.809991203307, 19774.009803237353, 19768.58680843855, 19769.898960254384, 20289.809991203307, 332.94766286057086, 13180.818897143856, 19770.658513369137, 19770.759098203314, 19772.181931828116, 19769.898960254384, 4.609652930357215, 19768.017935004573, 19775.780817380066, 19769.57671490288, 4071.1011003611598, 19772.181931828116, 19773.04814379857, 19770.31847903407, 19771.740975815937, 98.7419864464947, 19768.273187442115, 19773.04814379857, 19783.255165380335, 301.34496071138784, 19770.150298601307, 19778.30606851176, 19769.072046836565, 19783.255165380335, 19769.9782000595, 19768.143609604238, 13592.892915751581, 19774.67576404146, 5043.185009066357, 19769.9782000595, 19772.504137017688, 19777.070430468226, 19782.794211123328, 19776.787553892347, 1566.1128553495048, 19777.070430468226, 3962.414046441464, 19774.87037405038, 19776.070188033074, 3759.439600325705, 19775.58958600117, 19774.87037405038, 19773.81023731156, 19777.767151405817, 377.6584150002128, 19778.81655239048]\\n\",\n      \"[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298]\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"'''\\n\",\n    \"Compile results for grid search, random, spearmint, hyperband, hyperopt Proposers\\n\",\n    \"''' \\n\",\n    \"\\n\",\n    \"s_ran, t_ran, j_ran = graph_data(2, c)\\n\",\n    \"s_spe, t_spe, j_spe = graph_data(3, c)\\n\",\n    \"s_bohb, t_bohb, j_bohb = graph_data(1, c)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Visualization\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"We can easily visualize the performance of the hyperparameter optimization algorithms for our current experiment and how configurations can affect the final performance. In the plots below we compare job performance and time with accuracy achieved. \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"<Figure size 2000x1500 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"'''\\n\",\n    \"Plots for the experiment results\\n\",\n    \"'''\\n\",\n    \"\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"\\n\",\n    \"plt.figure(figsize=(20,15))\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"plt.plot(j_bohb, s_bohb)\\n\",\n    \"plt.plot(j_ran, s_ran)\\n\",\n    \"plt.plot(j_spe, s_spe)\\n\",\n    \"\\n\",\n    \"plt.legend(['y = bohb','y = random', 'y = spearmint'], loc='upper left')\\n\",\n    \"\\n\",\n    \"plt.title('Hyperparameter Optimization using various proposers on Quad min')\\n\",\n    \"plt.xlabel('Jobs')\\n\",\n    \"plt.ylabel('Accuracy')\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<Figure size 1440x1080 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"'''\\n\",\n    \"Plots for the experiment results\\n\",\n    \"'''\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"\\n\",\n    \"plt.figure(figsize=(20,15))\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"plt.plot(t_bohb, s_bohb)\\n\",\n    \"plt.plot(t_ran, s_ran)\\n\",\n    \"plt.plot(t_spe, s_spe)\\n\",\n    \"\\n\",\n    \"plt.legend(['y = bohb','y = random', 'y = spearmint'], loc='upper left')\\n\",\n    \"\\n\",\n    \"plt.title('Hyperparameter Optimization using various proposers on Quad min')\\n\",\n    \"plt.xlabel('Time')\\n\",\n    \"plt.ylabel('AMC score (less is better)')\\n\",\n    \"\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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H/nIR+a2/9rXvpZjjjkma9asySmnnLLRvl72spfl4IMPzrp163Ldddfd5bkBAAAA259VKz2BSfPq//OFXPy1G+/WfR50/91z2tMPXvL+k046Kccdd1xe+tKXZmZmJmeddVbOO++822135JFH5qabbrrd+Omnn54nPelJtxu/4oorct555+Wyyy7L0UcfnS9/+ct585vfnKrK5z73uVxyySV58pOfnC996UtJkosuuigXXnhhdtpppxxwwAE5+eSTs+++++a73/1u1q5dmz/+4z/Oa17zmrz61a/Om970prtwRgAAAIDtkSBqAuy3335ZvXp1Lrzwwlx77bU57LDDsnr16tttd84559yh/T7rWc/KaDTKmjVr8uAHPziXXHJJPv7xj+fkk09Okjz0oQ/Nj/zIj8wFUevWrcsee+yRJDnooINy5ZVXZt99981oNMrxxx+fJHnOc56T44477q4cLgAAALCdEkQtsKnKpS3p+c9/ftavX59rrrkmJ5100qLb3NGKqKra5O8L7bTTTnO3p6amcuutty663eb2AwAAALAYa0RNiGc+85n5p3/6p3zmM5/JU57ylEW3Oeecc3LRRRfd7mexECpJzj777MzMzOSyyy7L5ZdfngMOOCBHHnlk3vnOdyZJvvSlL+WrX/1qDjjggE3ObWZmZu4KfGeeeWae8IQn3IUjBQAAALZXKqImxI477pijjz46e+65Z6ampu6WfT7wgQ/M4YcfnhtvvDFvectbsvPOO+fFL35xXvSiF+WQQw7JqlWrsn79+o0qoRaz66675rzzzstrX/va3Oc+98m73vWuu2V+AAAAwPalWmsrPYetau3ate3888/faOyLX/xiDjzwwBWa0djMzEwe+chH5uyzz86aNWtWdC6TbBJeKwAAAGBjVXVBa23t5rbTmjcBLr744uy///5Zt26dEAoAAADYZmnNmwAHHXRQLr/88pWeBgAAAMAWpSIKAAAAgK1CEAUAAADAViGIAgAAAGCrEEQBAAAAsFUIoliW9evX5yUveclKTwMAAADomCBqO3Drrbeu9BQAAAAABFGT4NRTT80b3vCGud9f+cpX5owzzrhL+zzxxBPzwhe+MEcccUROOeWUnHfeeXnsYx+bww47LI973OPyH//xH0nGlU7HHXdcjjnmmKxZsyannHLK3D7+8i//Mg95yENy+OGH59xzz50bv+KKK/LjP/7jefjDH55169blq1/96txzvuhFL8pjHvOYPPjBD85HP/rRnHTSSTnwwANz4okn3qXjAQAAAPq3aqUnMHE++BvJNZ+7e/f5Xw5Jnvr7S9590kkn5bjjjstLX/rSzMzM5Kyzzsp55513u+2OPPLI3HTTTbcbP/300/OkJz3pduMbNmzIJz7xiUxNTeXGG2/MOeeck1WrVuXDH/5wfuu3fivvfe97kyQXXXRRLrzwwuy000454IADcvLJJ2fVqlU57bTTcsEFF2SPPfbI0UcfncMOOyxJcvLJJ+eEE07ICSeckLe97W35tV/7tbzvfe9Lknzzm9/MJz/5ybz//e/PM57xjJx77rn58z//8zz60Y/ORRddlEMPPfROnUIAAACgf4KoCbDffvtl9erVufDCC3PttdfmsMMOy+rVq2+33TnnnHOH9vtzP/dzmZqaSpJ8+9vfzgknnJBLL700VZVbbrllbrt169Zljz32SJIcdNBBufLKK/ONb3wjRx11VPbee+8kyfHHH58vfelLSZJPfvKT+du//dskyS/90i9tVEX19Kc/PVWVQw45JPe9731zyCGHJEkOPvjgXHHFFYIoAAAA2I4JohbaROXSlvT85z8/69evzzXXXJOTTjpp0W3uaEXUrrvuOnf7d37nd3L00Ufn7/7u73LFFVfkqKOOmrtvp512mrs9NTV1l9aUmt3XaDTaaL+j0chaVQAAALCdE0RNiGc+85k59dRTc8stt+TMM89cdJs7WhE137e//e084AEPSDJeF2pzjjjiiPz6r/96rr/++uy+++45++yz84hHPCJJ8rjHPS5nnXVWfumXfinvfOc7c+SRR97peQEAAADbD0HUhNhxxx1z9NFHZ88995xrp7s7nXLKKTnhhBPy2te+Nk972tM2u/397ne/vOpVr8pjH/vY7Lnnnhu11P3Jn/xJnve85+UP//APs/fee+cv//Iv7/b5AgAAANueaq2t9By2qrVr17bzzz9/o7EvfvGLOfDAA1doRmMzMzN55CMfmbPPPjtr1qxZ0blMskl4rQAAAICNVdUFrbW1m9tutDUmw6ZdfPHF2X///bNu3TohFAAAALDN0po3AQ466KBcfvnlKz0NAAAAgC1KRVSHpmdmcuP3b8kt0zMrPRUAAACAZRNEdegHt87kiuu/m+//cHqlpwIAAACwbIKoDtXw7/a1zDwAAADQO0FUl0RRAAAAQH8EUR2qIYdqHeZQj3vc4za7zRve8IZ873vf2wqzAQAAALYmQRR32fT08teq+sQnPrHZbQRRAAAAsG0SRE2AU089NW94wxvmfn/lK1+ZM8444y7t8+yzz87DHvawPOIRj8gTn/jEJMn69etz7LHH5qijjsqaNWvy6le/em77d7zjHTn88MNz6KGH5ld/9VfnwqUXvehFWbt2bQ4++OCcdtppc9vvt99+ecUrXpFHPvKROfvss3PUUUflZS97WdauXZsDDzwwn/nMZ3LcccdlzZo1+e3f/u25x93znvdMknz0ox/NUUcdlZ/92Z/NQx/60PziL/5iWmt54xvfmK997Ws5+uijc/TRR9+lcwAAAABMllUrPYFJ8wfn/UEuueGSu3WfD93roXnF4a9Y8v6TTjopxx13XF760pdmZmYmZ511Vs4777zbbXfkkUfmpptuSmvJD26dzg5To0yNKqeffnqe9KQnbbTta17zmvzzP/9zHvCAB+Rb3/rW3Ph5552Xz3/+87nHPe6RRz/60Xna056WXXfdNe9617ty7rnnZocddsiLX/zivPOd78xzn/vcvO51r8tee+2V6enprFu3Lp/97Gfz8Ic/PEmyevXq/Pu//3uS5C1veUt23HHHnH/++TnjjDNy7LHH5oILLshee+2VH/3RH83LXvayrF69eqM5XnjhhfnCF76Q+9///nn84x+fc889N7/2a7+WP/qjP8pHPvKR3Pve977T5xwAAACYPIKoCbDffvtl9erVufDCC3PttdfmsMMOu11okyTnnHNOkuSHt07nkmtuyj73ukf22nXHRff5+Mc/PieeeGKe9axn5bjjjpsb/4mf+Im5fR933HH5+Mc/nlWrVuWCCy7Iox/96CTJ97///dznPvdJkrz73e/OW9/61tx66625+uqrc/HFF88FUccff/xGz/mMZzwjSXLIIYfk4IMPzv3ud78kyYMf/OBcddVVtzumww8/PPvss0+S5NBDD80VV1yRJzzhCXfgzAEAAAA9EUQtsKnKpS3p+c9/ftavX59rrrkmJ5100qLb3JGKqLe85S359Kc/nQ984AN51KMelQsuuCBJUrMrnQ+qKq21nHDCCXn961+/0X1f+cpXcvrpp+czn/lM7nWve+XEE0/MzTffPHf/rrvuutH2O+20U5JkNBrN3Z79/dZbb73d8czfZmpqatFtAAAAgG2HIGpCPPOZz8ypp56aW265JWeeeeai29xWETWTS665MQ+41y5ZvetOi2572WWX5YgjjsgRRxyRD37wg7nqqquSJB/60Idyww03ZJdddsn73ve+vO1tb8s97nGPHHvssXnZy16W+9znPrnhhhty00035cYbb8yuu+6aPfbYI9dee20++MEP5qijjtoixz/fbrvtlptuuklrHgAAAGxjBFETYscdd8zRRx+dPffcM1NTU5vcdq6oqS29zctf/vJceumlaa1l3bp1ecQjHpGLLroohx9+eH7mZ34mGzZsyHOe85ysXbs2SfLa1742T37ykzMzM5Mddtghb37zm/OYxzwmhx12WB760Idm3333zeMf//i76Wg37QUveEGOOeaY3P/+989HPvKRrfKcAAAAwJZXrW0izdgGrV27tp1//vkbjX3xi1/MgQceuEIzGpuZmZm7At2aNWs2ue0t0zP54tU35gF77pLV91y8Imox69evz/nnn583velNd3W6K2YSXisAAABgY1V1QWtt7ea2G22NybBpF198cfbff/+sW7dusyFUkiyjIAoAAABg4mjNmwAHHXRQLr/88jv+wDuYRJ144ok58cQT7/jzAAAAANwNVEQNempRnF0jqp8Z3z16eo0AAACA2xNEJdl5551z/fXXdxR0bH/Nea21XH/99dl5551XeioAAADAnaQ1L8k+++yTDRs25LrrrlvpqSxLay3Xfuvm3LzLqnxj5x1Wejpbzc4775x99tlnpacBAAAA3EmCqCQ77LBDHvSgB630NJbtB7dO5yd/+5/y8qcckP969P4rPR0AAACAZdGa16GpYZGomZntpzUPAAAA6J8gqkOjIYia7mZNKwAAAABBVJdGIxVRAAAAQH8EUZ0aVSKHAgAAAHoiiOrU1Ki05gEAAABdEUR1alSVGUEUAAAA0BFBVKdGVdaIAgAAALoiiOrU1KgyPbPSswAAAABYPkFUp8aLlauIAgAAAPohiOrUaGSNKAAAAKAvgqhOTVVl2hpRAAAAQEcEUZ0aV0St9CwAAAAAlk8Q1alRxVXzAAAAgK4Iojo1VdaIAgAAAPoiiOpUVWVaEAUAAAB0RBDVqalRac0DAAAAuiKI6tSUxcoBAACAzgiiOlUVrXkAAABAVwRRnZoqrXkAAABA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\\n\",\n      \"text/plain\": [\n       \"<Figure size 1440x1080 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"'''\\n\",\n    \"Plots for the experiment results\\n\",\n    \"'''\\n\",\n    \"\\n\",\n    \"import sys\\n\",\n    \"\\n\",\n    \"def min_so_far(arr):\\n\",\n    \"    mmin=float('inf')\\n\",\n    \"    new_arr=[]\\n\",\n    \"    for _,x in enumerate(arr):\\n\",\n    \"        if x<mmin:\\n\",\n    \"            mmin=x\\n\",\n    \"        new_arr.append(mmin)\\n\",\n    \"    return new_arr\\n\",\n    \"\\n\",\n    \"plt.figure(figsize=(20,15))\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"plt.plot(j_bohb, min_so_far(s_bohb))\\n\",\n    \"plt.plot(j_ran, min_so_far(s_ran))\\n\",\n    \"plt.plot(j_spe, min_so_far(s_spe))\\n\",\n    \"\\n\",\n    \"plt.legend(['y = bohb','y = random', 'y = spearmint'], loc='upper left')\\n\",\n    \"\\n\",\n    \"plt.title('Hyperparameter Optimization using various proposers on Quad Min')\\n\",\n    \"plt.xlabel('Jobs')\\n\",\n    \"plt.ylabel('Min score')\\n\",\n    \"\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Using early stop to accelerate experiment convergence \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"In order to use the early stop functionality, please check Examples/early_stopping/README.md. We will next compare\\n\",\n    \"the efficiency of early stop with 3 policies: truncation, median and bandit.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[3.1986507685687813, 3.1240212831079313]\\n\",\n      \"[0, 7]\\n\",\n      \"[11588.561807897513, 10264.661252507878, 13259.660327218779, 9756.147263836081, 192.30551743308826, 54.01004445189671, 10.657509615206326, 3.542402417237454]\\n\",\n      \"[0, 1, 2, 3, 4, 13, 66, 81]\\n\",\n      \"[196.24204025146446, 46.05975048965503, 23.17190918287609, 3.2179274925402535, 9.197393904968242]\\n\",\n      \"[0, 1, 2, 10, 69]\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"conn2 = sqlite3.connect('../early_stopping/quad_equation_min/sqlite3.db')\\n\",\n    \"c2 = conn2.cursor()\\n\",\n    \"\\n\",\n    \"s_bohb_median, t_bohb_median, j_bohb_median = graph_data(7, c2)\\n\",\n    \"s_bohb_bandit, t_bohb_bandit, j_bohb_bandit = graph_data(8, c2)\\n\",\n    \"s_bohb_trunc, t_bohb_trunc, j_bohb_trunc = graph_data(5, c2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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7PMrncOled1ARxQAAAA70MaNGzNt2jQhVMOVUjJt2rSX1PkmiOoGPT1J7wQdUQAAAOwwQqju8FJ/zoKobtEa0BEFAAAAdJQgqlv09QuiAAAAgI4SRHWLVn8yJIgCAACAF+Kkk07KFVdc8YKPHxwczOmnn77N+yZPnry9ynpRtqzp4osvzmc+85mO1LEln5rXLfoGkmFrRAEAAEA3OvXUUztdQhJBVPfQEQUAAMAYOPerN+TGuzds13POeeUu+fB/fO2z3n/22Wdn1113zZlnnpkk+dCHPpTp06dn6dKlL+l5r7rqqnzsYx/Lhg0bcuGFF+aYY47Jxo0bc9ppp2X16tVptVq58MILs2DBgiTJ3XffnaOPPjrr1q3LokWL8vGPf3zzuc4666x885vfzO67757LL788u+222zaf84gjjsjcuXOzcuXKPPLII/nMZz6T888/P2vXrnXaSfkAAB/wSURBVM3xxx+f8847L0nyuc99Ln/1V3+VJ554Ioceemj++q//Or29vfn0pz+d888/P1OnTs2BBx6YiRMnJknOOeecTJ48Oe973/vyt3/7t7nkkkvyxBNP5NWvfnU++9nPZqeddspJJ52UXXbZJatXr869996bj3/84zn22GNf0vfwmVya1y1a/TqiAAAAaKQlS5ZsvuxsZGQkl19+eU444YStjps/f34OOuigrb6uuuqqbZ73tttuy6pVq/L1r389p556ajZu3Jhly5allJK1a9fm85//fE488cRs3Dja+LFmzZosX748a9euzfLly3PnnXcmSR555JHMmzcvN9xwQ974xjfm3HPPfc7XM2HChKxevTqnnnpq3vrWt2bZsmW5/vrrMzg4mAceeCA33XRTli9fnu9973tZs2ZNent7c+mll+aee+7Jhz/84Xzve9/L1VdfnRtvvHGb51+8eHGuueaa/Ou//mv233//fPKTn9x83z333JOrr746X/va1/KBD3zg+b/5L5KOqG7R15888WinqwAAAKDhnqtzaUeZOXNmpk2bluuuuy733Xdf5s6dm2nTpm113MqVK1/UeY877rj09PRk1qxZ2XfffXPzzTfn6quvzhlnnJEk2W+//bL33nvnlltuSZIsXLgwU6ZMSZLMmTMnt99+e2bMmJGenp4cf/zxSZITTjghixcvfs7n/b3f+70kyQEHHJDXvva12WOPPZIk++67b+68885cffXVufbaa/Obv/mbSZLHHnss06dPzw9+8IMcccQRm7utjj/++M21ben666/PH//xH+cXv/hFHn744bz5zW/efN/b3va29PT0ZM6cObnvvvte1PfrhRBEdYvWQPLoA0n6O10JAAAAbHennHJKBgcHc++992bJkiXbPGb+/Pl56KGHthq/4IILcuSRR241Xkp5zv1n2nQZXJL09vZmeHh4m8e90PP09PQ87Zw9PT0ZHh5OVVU58cQTc/755z/tcV/+8pef87ybnHTSSfnyl7+cAw88MIODg/nnf/7nbb6Gqqpe0PleDJfmdYs+a0QBAADQXIsWLcqVV16Za6655mkdPltauXJl1qxZs9XXtkKoJFmxYkVGRkaybt26rF+/PrNnz878+fNz6aWXJkluueWW3HHHHZk9e/Zz1jYyMrL5E/guu+yyHH744S/hlY52Xl1xxRX56U9/miR58MEHc/vtt+fQQw/Nv/zLv+SBBx7I0NBQVqxYsc3HP/TQQ9ljjz0yNDS0+bWMFR1R3aI1kAwLogAAAGimCRMmZMGCBZk6dWp6e3u3yzn32muvHHLIIdmwYUMuvvji9Pf35z3veU9OO+20HHDAAWm1WhkcHHxaF9G2TJo0KatWrcp5552X6dOnZ/ny5S+prjlz5uS8887LUUcdlZGRkfT19WXZsmU57LDDcs455+T1r399pk6dmoMOOmibj//oRz+aQw89NLvttlsOPfTQbXaJ7ShlR7RZ1dm8efOq1atXd7qMsfe1s5Ibv5Jb/2mf7DRvXl75Zx/rdEUAAAA0xE033ZT999+/ozWMjIzk4IMPzooVKzJr1qyO1tJ02/p5l1Kurapq3vM91qV53UJHFAAAAA1144035tWvfnUWLlwohKo5l+Z1i77+ZOixTlcBAAAA292cOXOyfv36Tpfxorz3ve/N9773vaeNLV26NCeffHKHKhobgqhu0RpIqieTdNelmAAAAFBHy5Yt63QJHeHSvG7R1z+67bI1wQAAAID6EER1i1Y7iNIRBQAAAHSIIKpb9A2MbnVEAQAAAB0iiOoWOqIAAACADrNYebdoPbVG1BN33JFffOGLna0HXoL+1702/bNnd7oMAACgwU466aQcc8wxOfbYY1/Q8YODg1m9enUuuuiire6bPHlyHn744Rd0niOOOCIXXHBB5s2b96LqfTH1XXzxxdlpp53yrne9K4ODgznqqKPyyle+crs+37MRRHWL9mLlvVN3zmPXXZfHrruuwwXBS9DTkymLF6X18pd3uhIYV3b6jXmZPP/wTpcBADTd//5Acu/a7XvO3Q9Ifudj2/ecXezUU0/dfHtwcDCve93rBFFsZ63RNaL2Pn9pntzltR0uBn511fBwHvi7T+aXX/5yqpGRTpcD48eTT+bh13xHEAUANNLZZ5+dXXfdNWeeeWaS5EMf+lCmT5+epUuXvqTzXnXVVfnYxz6WDRs25MILL8wxxxyTjRs35rTTTsvq1avTarVy4YUXZsGCBUmSu+++O0cffXTWrVuXRYsW5eMf//jmc5111ln55je/md133z2XX355dtttt2d93s9+9rM55ZRTMjw8nE996lM55JBDsmrVqixdujQbN27MwMBAPv3pT2f27NkZHBzMV77ylTz66KNbPe+nP/3pnH/++Zk6dWoOPPDATJw4MUlyzjnnZPLkyZk5c2ZWr16dd77znRkYGMj3v//9DAwMvKTv2fMRRI1D9zx8T/7Xv/2vnD739Lx84AV2hLQ7onp6nkzPq161A6uDHW+Pj34ke3z0I50uA8aVu/7b0jzx4/WdLgMA6AYd6FxasmRJFi9enDPPPDMjIyO5/PLLs2rVqq2Omz9/fh566KGtxi+44IIceeSRW43fdtttWbVqVdatW5cFCxbk1ltvzbJly1JKydq1a3PzzTfnqKOOyi233JIkWbNmTa677rpMnDgxs2fPzhlnnJEZM2bkkUceybx58/KJT3wiH/nIR3Luuedu8xK+TR599NGsWbMm3/3ud7NkyZJcf/312W+//bJy5cq0Wq1cddVV+eAHP5gvfOELz/q8rVYrH/7wh3PttddmypQpWbBgQebOnfu05zn22GNz0UUX7ZBLAZ+NIGocemLkiXzxR1/MywdentPnnv7CHrTLq5KevuQb708m7pzM9C/iAAAANMPMmTMzbdq0XHfddbnvvvsyd+7cTJs2bavjVq5c+aLOe9xxx6WnpyezZs3Kvvvum5tvvjlXX311zjjjjCTJfvvtl7333ntzELVw4cJMmTIlSTJnzpzcfvvtmTFjRnp6enL88ccnSU444YQsXrz4OZ/3He94R5LkDW94QzZs2JBf/OIXeeihh3LiiSfmRz/6UUopGRoa2nz8tp73Zz/7WY444ojN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ffbZ+Yu/+IvN+x/60Ifyl3/5ly/5vFdddVXmzZuX17zmNfna176WJNm4cWNOPvnkHHDAAZk7d26+853vbD7+7rvvztFHH51Zs2bl/e9//9POddZZZ+W1r31tFi5cmPvvv3+bz3fFFVdk9erVeec735mDDjoojz32WGbOnJk//MM/zMEHH5wVK1bkiCOOyOrVq5MkP/vZzzJz5swkowHW4sWLt/n8V155ZQ4++OAceOCBWbhw4Uv+vrwU474jCgAAAKiPTnQuLVmyJIsXL86ZZ56ZkZGRXH755Vm1atVWx82fPz8PPfTQVuMXXHBBjjzyyK3Gb7vttqxatSrr1q3LggULcuutt2bZsmUppWTt2rW5+eabc9RRR+WWW25JkqxZsybXXXddJk6cmNmzZ+eMM87IjBkz8sgjj2TevHn5xCc+kY985CM599xzc9FFF231fMcee2wuuuiiXHDBBZk3b97m8WnTpuWHP/xhkuTiiy9+1u/Dtp6/v78//+W//Jd897vfzT777JMHH3zw+b+hO5AgCgAAABjXZs6cmWnTpuW6667Lfffdl7lz52batGlbHbdy5coXdd7jjjsuPT09mTVrVvbdd9/cfPPNufrqq3PGGWckSfbbb7/svffem4OohQsXZsqUKUmSOXPm5Pbbb8+MGTPS09OT448/PklywgknZPHixS+qjk2PfT7bev6f//znecMb3pB99tknSbLrrru+qOfe3gRRAAAAwLh3yimnZHBwMPfee2+WLFmyzWNebEdUKeU5959p4sSJm2/39vZmeHh4m8c933meadKkSZtvt1qtjIyMJBm9TPBXef5OskYUAAAAMO4tWrQoV155Za655pq8+c1v3uYxK1euzJo1a7b62lYIlSQrVqzIyMhI1q1bl/Xr12f27NmZP39+Lr300iTJLbfckjvuuCOzZ89+ztpGRkY2fwLfZZddlsMPP/xZj9155523GZZtMnPmzFx77bVJ8oI+1e+www7Ld7/73fz4xz9OEpfmAQAAALxUEyZMyIIFCzJ16tTt9slye+21Vw455JBs2LAhF198cfr7+/Oe97wnp512Wg444IC0Wq0MDg4+rRNpWyZNmpRVq1blvPPOy/Tp07N8+fJnPfakk07KqaeemoGBgXz/+9/f6v73ve99Oe6443LJJZfkLW95y/O+ht122y2XXHJJFi9enJGRkUyfPj3f+ta3nv/F7yClqqqOPXknzJs3r9q0ujwAAADw0t10003Zf//9O1rDyMjI5k+WmzVrVkdrabpt/bxLKddWVTXvWR6ymUvzAAAAgHHtxhtvzKtf/eosXLhQCFVzLs0DAAAAxrU5c+Zk/fr1nS7jRXnve9+b733ve08bW7p0aU4++eQOVTQ2BFEAAAAAY2zZsmWdLqEjXJoHAAAAwJgQRAEAAAAwJgRRAAAAAIwJQRQAAADAM5x00km54oorXvDxg4ODOf3007d53+TJk7dXWeOeIAoAAACAMeFT8wAAAIDt5t7/8T/y+E03b9dzTtx/v+z+wQ8+6/1nn312dt1115x55plJkg996EOZPn16li5d+pKe96qrrsrHPvaxbNiwIRdeeGGOOeaYbNy4MaeddlpWr16dVquVCy+8MAsWLEiS3H333Tn66KOzbt26LFq0KB//+Mc3n+uss87KN7/5zey+++65/PLLs9tuu72k2sYrHVEAAADAuLZkyZJ85jOfSZKMjIzk8ssvzwknnLDVcfPnz89BBx201ddVV121zfPedtttWbVqVb7+9a/n1FNPzcaNG7Ns2bKUUrJ27dp8/vOfz4knnpiNGzcmSdasWZPly5dn7dq1Wb58ee68884kySOPPJJ58+blhhtuyBvf+Mace+65O+g7UX86ogAAAIDt5rk6l3aUmTNnZtq0abnuuuty3333Ze7cuZk2bdpWx61cufJFnfe4445LT09PZs2alX333Tc333xzrr766pxxxhlJkv322y977713brnlliTJwoULM2XKlCTJnDlzcvvtt2fGjBnp6enJ8ccfnyQ54YQTsnjx4pfycsc1QRQAAAAw7p1yyikZHBzMvffemyVLlmzzmPnz5+ehhx7aavyCCy7IkUceudV4KeU5959p4sSJm2/39vZmeHh4m8c933mazKV5AAAAwLi3aNGiXHnllbnmmmvy5je/eZvHrFy5MmvWrNnqa1shVJKsWLEiIyMjWbduXdavX5/Zs2dn/vz5ufTSS5Mkt9xyS+64447Mnj37OWsbGRnZ/Al8l112WQ4//PCX8ErHNx1RAAAAwLg3YcKELFiwIFOnTk1vb+92Oedee+2VQw45JBs2bMjFF1+c/v7+vOc978lpp52WAw44IK1WK4ODg0/rhNqWSZMmZdWqVTnvvPMyffr0LF++fLvU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\\n\",\n      \"text/plain\": [\n       \"<Figure size 1440x1080 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"plt.figure(figsize=(20,15))\\n\",\n    \"\\n\",\n    \"plt.plot(t_bohb_median, min_so_far(s_bohb_median))\\n\",\n    \"plt.plot(t_bohb_bandit, min_so_far(s_bohb_bandit))\\n\",\n    \"plt.plot(t_bohb_trunc, min_so_far(s_bohb_trunc))\\n\",\n    \"plt.plot(t_bohb, min_so_far(s_bohb))\\n\",\n    \"\\n\",\n    \"plt.legend(['y = bohb_median','y = bohb_bandit', 'y = bohb_trunc', 'y = bohb'], loc='lower right')\\n\",\n    \"\\n\",\n    \"plt.title('Hyperparameter Optimization using ES with various policies on Quad min')\\n\",\n    \"plt.xlabel('Time')\\n\",\n    \"plt.ylabel('Min res')\\n\",\n    \"\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[6060.406530867955, 3664.920102436913, 3909.7273413323915, 3002.7529813288706, 106.05097215471763, 157.98208630594334, 11.44000290631149, 288.5003098979952, 422.36446655402744, 10.303060762137134, 77.10024584741284, 215.54895165905884, 251.65086979919593, 195.46347563258027, 191.5105114029914, 34.43100582618657, 87.0522160740486, 183.1439686948838, 11.34880226594397, 3.5498130271587858, 10.615665529087309, 100.70466265645877, 5.8995577127201795, 63.33929155979352, 10.099046262581181, 23.781863082338973, 71.8013571039346]\\n\",\n      \"[0, 1, 3, 6, 11, 12, 13, 21, 23, 31, 40, 50, 58, 64, 66, 72, 79, 84, 94, 96, 123, 156, 163, 168, 170, 176, 195]\\n\",\n      \"[6060.406530867955, 3664.920102436913, 3002.7529813288706, 106.05097215471763, 157.98208630594334, 11.44000290631149, 10.303060762137134, 77.10024584741284, 34.43100582618657, 11.34880226594397, 3.5498130271587858, 10.615665529087309, 5.8995577127201795, 10.099046262581181]\\n\",\n      \"[0, 1, 6, 11, 12, 13, 31, 40, 72, 94, 96, 123, 163, 170]\\n\",\n      \"[6148.106139221136, 7415.6298730541, 6060.406530867955, 3664.920102436913, 3909.7273413323915, 3002.7529813288706, 106.05097215471763, 157.98208630594334, 11.44000290631149, 10.303060762137134, 11.34880226594397, 3.5498130271587858]\\n\",\n      \"[0, 2, 3, 4, 6, 9, 14, 15, 16, 34, 97, 99]\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"s_random_median, t_random_median, j_random_median = graph_data(2, c2)\\n\",\n    \"s_random_trunc, t_random_trunc, j_random_trunc = graph_data(6, c2)\\n\",\n    \"s_random_bandit, t_random_bandit, j_random_bandit = graph_data(1, c2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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L7rookxMTOT666/PU5/61Pzcz/1cXvOa12TXrl2ZnJzM5Zdfni1btuSKK67IJz7xiTz44IP51re+lRe84AV5+9vfniS5/PLL8zu/8zs55phj8vjHPz6dTidJsn379lx88cX5wQ9+kI0bN+byyy/PySefnIsuuiiTk5O5/vrrc9ddd+UDH/hAPvShD+Waa67JueeemyuuuGLoedetW5dXvOIV+eQnP5njjz8+b33rW3PppZfmu9/9bn7v934vF1xwQaanp/P6178+n//857N79+688pWvzC//8i+nrutccskl+fSnP52TTjop7XZ77nPPO++8XHbZZTnnnHPyile8Itdee2127tyZF77whXnzm9+cJDnllFOydevW/MVf/EWmpqby0Y9+NKeffvqK/90PoqWOedrN3n+ku7tTgx+oOoaGAwAAsCoXX3xxPvShDyVJZmZmcuWVV+YXfuEXFjz3tKc9LWedddaCP5/5zGcGfu5tt92WL3/5y3nHO96R008/PVdffXWuv/76vOUtb8kb3vCGueduuOGGfPjDH85Xv/rVfPjDH873vve93HHHHXnTm96UL33pS/niF784ry3tkksuydatW3PjjTfm53/+5/PqV7967rX77rsv11xzTd75znfmggsuyOte97rcdNNN+epXv5obbrhh6L+DBx54IM94xjNy0003Zf369fmN3/iNfPrTn85VV12VN77xjUmS97///Tn66KNz7bXX5tprr80f/uEf5jvf+U6uuuqqfP3rX8+2bdvyoQ99KF/+8pcHfsdv//Zv57rrrsuNN96YL3zhC7nxxhvnXjvuuOPyD//wD3nFK16Ryy67bOg5V0qFE/N0+i11D+zZkxw14IHWpMAJAADgCLJYJdJaOeWUU7Jhw4Zcf/31ufPOO3P22Wdnw4YNC567+uqrl/W5L3rRi9JsNpMkO3bsyNatW3PLLbeklJKpqb2FFeeff36OPvroJMkZZ5yRW2+9NT/4wQ9y3nnnZePGjUmSF7/4xfnGN76RJLnmmmvy8Y9/PEny0pe+NJdeeuncZz33uc9NKSVnnnlmNm3alDPPPDNJ8tjHPjbbt2/PWWedNfCs7XY7z372s5MkZ555ZjqdTlqtVs4888xs3749SfJXf/VXufHGG+fmM+3YsSO33HJL/uZv/iYveclL0mw2c8IJJ+QZz3jGwO/4yEc+kve+973pdru54447sm3btjzucY9Lklx44YVJkp/6qZ+a+7uNksCJedr9wOnBqSFzmqqOLXUAAACs2ste9rJcccUV+f73v5+LL7544DNPe9rTcv/99y+4f9lll+WZz3zmgvtHHbW3cuK//Jf/kqc//em56qqrsn379px33nlzr822yiVJs9lMt9td8d9j9rMajca8z200Got+bqvVSillwXv3fV9d13nXu96VZz3rWfPe+8lPfvKA5/rOd76Tyy67LNdee22OPfbYXHTRRdm1a+//z89+32r//sNoqWOe2cBp59DAadKWOgAAAFbtBS94Qf7yL/8y11577YJAZdbVV1+dG264YcGfQWHT/nbs2JETTzwxSRadpTTr3HPPzRe+8IXcc889c3ONZj3lKU/JlVdemST54z/+4zztaU9bwt9w9Z71rGflPe95z1x11je+8Y088MAD+Zf/8l/mwx/+cKanp3PHHXfkc5/73IL3/uhHP8pRRx2Vo48+OnfeeWc+9alPHZQzz1LhxDyd/gynB6f2DH7AljoAAABGoN1u5+lPf3qOOeaYuTa4Ubr00kuzdevW/NZv/Vae85znHPD5448/Pr/5m7+ZJz/5yTnmmGPmtcK9613vyi/+4i/mv/23/zY3NPxgeNnLXpbt27fnCU94Quq6zsaNG/Nnf/ZnecELXpC//uu/zhlnnJGTTz45T37ykxe89/GPf3zOPvvsnH766TnppJPy1Kc+9aCceVap6/qgfuHBcM4559TXXXfdoT7GYeltX/hY/nj7m3PZUy7Ps049Z+EDn3tr8oXfTd70w6Rf+rcWbv/VX82um7+Wn/jUgcsEAQAAWJ6bb745j3nMYw7pGWZmZvKEJzwhH/3oR3Pqqace0rOw0KD/Rkopf1/X9YCwYCEtdcwzUfUqnIa31E30rqqcAAAAWKFt27bl0Y9+dM4//3xh0xFKSx3zzAVO3WEtdZO9a3dnr70OAAAAlumMM87It7/97UN9jIPi3HPPze7d84s2/uiP/mhum92RSuDEPLOB065hM5yq/sT9qV3J5EE6FAAAABym/u7v/u5QH+GQ0FLHPBOtfuDUnRr8QDVb4bRr8OsAAADA2BM4Mc9E1UqS7BraUjc7w0ngBAAAAAympY55HtLqtcx97rtX5/49D+Z1T/nZrO/s0zs3OzT8pquS2/++9/PEMcnpzxn91rojcIMiAAAAjAOBE/M88thNqetmvrPnM/nOdz+TJHnj039h7wMPPbF3/cLvzn/jy7+QnHDWyM5RbdqcPZ/8VL73qldl06WXpn3yySP7bAAAAGBtaaljnlOPOz6fev5n8r6nfzx13cy2H3x9/gPHPy75tW8lr/1q789Fn+zdv/OmkZ5j42tfk42ve10e+PI1+fZz/m3uesc7M/3jB0b6HQAAADDMFVdckVe96lVr9vnr1q1bk8+96KKL8rGPfSxJ8rKXvSzbtm1Lkrz1rW9dk+8bRoUTC5x0zHE56Zjj0prelNsf+M7CB446bu/PDz2x12Z317aRnqHR6eS4X355jn7+83L3O96Re9773uy46qps/E+/mqMvuCClISsFAAAYiU+9Pvn+V0f7mZvPTP7120b7mcvQ7XZTVSKP973vfXM/v/Wtb80b3vCGg/bd/q+doR7WPjk7Zr63+EONZrJxy8gDp1mtTZtywu/+bk658k9Sbd6cO17/n7P9JS/Jzn/8xzX5PgAAANbeG9/4xvze7/3e3D//+q//en7/939/VZ950UUX5Vd+5Vdy7rnn5tJLL81XvvKVPPnJT87ZZ5+dpzzlKfn613sdPFdccUUuvPDCPPvZz86pp56aSy+9dO4zLr/88px22mn56Z/+6XzpS1+au799+/Y84xnPyOMe97icf/75+e53vzv3na94xSvypCc9KY961KPy+c9/PhdffHEe85jH5KKLLjrgmV/3utflsY99bM4///zcfffdSZI//MM/zBOf+MQ8/vGPz8/+7M/mwQcfnPuuV7/61XnKU56SRz3qUXNVTHVd51WvelW2bNmSZz7zmbnrrrvmPv+8887Lddddl9e//vXZuXNnzjrrrPz8z//8qv49L5W4j6FOWf8TuWvH3+bOH/8wm9YdM/zBh5+RfPvza3qWybPOyikfvjI7/vwTuesd/2e2v/jncvTzn5+Nv/q6tB7+8DX9bgAAgCPaIahEuvjii3PhhRfmta99bWZmZnLllVfmK1/5yoLnnva0p+X+++9fcP+yyy7LM5/5zAX3b7vttnz5y19Os9nMj370o1x99dWpqiqf+cxn8oY3vCF/+qd/miS54YYbcv3116fT6WTLli255JJLUlVV3vSmN+Xv//7vc/TRR+fpT396zj777CTJJZdckq1bt2br1q35wAc+kFe/+tX5sz/7syTJfffdl2uuuSaf+MQncsEFF+RLX/pS3ve+9+WJT3xibrjhhpx11uB5xw888EDOOeecvPOd78xb3vKWvPnNb8673/3uXHjhhfkP/+E/JEl+4zd+I+9///tzySWXJEnuuOOOfPGLX8zXvva1XHDBBXnhC1+Yq666Kl//+tezbdu23HnnnTnjjDNy8cUXz/uut73tbXn3u9+dG264Yam/olUTODHUT27ckq/sSP7mO/+UF535vw1/8OGPSf7xT5IH700e8rA1O09pNHLMC56f9f/qX+We//f/yb1XfDD3/9VfZcOv/EoedtHWNNrtNftuAAAARueUU07Jhg0bcv311+fOO+/M2WefnQ0bNix47uqrr17W577oRS9Ks9lMkuzYsSNbt27NLbfcklJKpqam5p47//zzc/TRRydJzjjjjNx66635wQ9+kPPOOy8bN25Mkrz4xS/ON77xjSTJNddck49//ONJkpe+9KXzqqKe+9znppSSM888M5s2bcqZZ56ZJHnsYx+b7du3Dw2cGo1GXvziFydJ/v/27j446ure4/jnu5uQ8FBAKNAUVKRESDQh4UZDEtMhRK/0VihQH69iYsow7ZSnmd5JEctDn6y2TFsL3jvTQRJlsNGgKHaqt0Wtpkh5usktlKgIN1QsRB4DFKEJOfeP/WVJSBCQzf7y8H7N7OT3O7+zZ7+78zub3373nLMPPPCApk2bJknasWOHvve97+nYsWM6efKkbr/99vB9pkyZokAgoOTkZNXW1kqS3n77bd13330KBoP64he/qAkTJlzWa9ZemFKHC8q++kZJ0ta/V396xcHJob8H323niEKCfXpr8He+oxG/fUW9srJ08Oc/1547JunE66/LOReVGAAAAAAAV2bGjBkqLS1VSUlJqxE5TXJzc5WWltbqtn79+jbr9+7dO7y9cOFC5eXlaceOHXrllVd0+vTp8LG4uLjwdjAYVENDw2d+Hk1tBQKBFu0GAoHLatfMJIWmzi1fvlzbt2/X4sWLLxh3R//8S8IJF/QvQ0fINfbQ+0d3fXrFwUmhv+20jtOF9Lj2Wl395HJd/dQKWY9Y7fv2LH34jRk6s+si8QIAAAAAfDd16lS99tpr2rJlS4tRPM1VVFSoqqqq1a2t6XTnq6ur09ChQyWF1m26mMzMTL311ls6fPiw6uvrVV5eHj6WnZ2tsrIySdLq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\\n\",\n      \"text/plain\": [\n       \"<Figure size 1440x1080 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"plt.figure(figsize=(20,15))\\n\",\n    \"\\n\",\n    \"plt.plot(t_random_median, min_so_far(s_random_median))\\n\",\n    \"plt.plot(t_random_bandit, min_so_far(s_random_bandit))\\n\",\n    \"plt.plot(t_random_trunc, min_so_far(s_random_trunc))\\n\",\n    \"plt.plot(t_ran, min_so_far(s_ran))\\n\",\n    \"\\n\",\n    \"plt.legend(['y = random_median','y = random_bandit', 'y = random_trunc', 'y = random'], loc='lower right')\\n\",\n    \"\\n\",\n    \"plt.title('Hyperparameter Optimization using ES with various policies on Quad min')\\n\",\n    \"plt.xlabel('Time')\\n\",\n    \"plt.ylabel('Min res')\\n\",\n    \"\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[3.1, 3.1]\\n\",\n      \"[0, 1]\\n\",\n      \"[6148.106139221136, 7415.6298730541, 6060.406530867955, 3664.920102436913, 3909.7273413323915, 3002.7529813288706, 106.05097215471763, 157.98208630594334, 11.44000290631149, 10.303060762137134, 11.34880226594397, 3.5498130271587858]\\n\",\n      \"[0, 2, 3, 4, 6, 9, 14, 15, 16, 34, 97, 99]\\n\",\n      \"[11588.561807897513, 10264.661252507878, 13259.660327218779, 9756.147263836081, 192.30551743308826, 54.01004445189671, 10.657509615206326, 3.542402417237454]\\n\",\n      \"[0, 1, 2, 3, 4, 13, 66, 81]\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"s_spearmint_median, t_spearmint_median, j_spearmint_median = graph_data(9, c2)\\n\",\n    \"s_spearmint_trunc, t_spearmint_trunc, j_spearmint_trunc = graph_data(1, c2)\\n\",\n    \"s_spearmint_bandit, t_spearmint_bandit, j_spearmint_bandit = graph_data(8, c2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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Z/d7zooVK3T06NETnlNRUZGtJXVTX1+vdevWSZKWLFmipqYmSdI999yTk8/rC3fNgzSkRlrysvTiP0ubHpA++j/SokelQdVJX4KteQAAAAAwwL1wi7Tv99m95hcmSX97X3avOYBEIhH5/f6kzn3zzTf7PWfFihVavHixysrKMl1aRn72s58lnt9zzz364Q9/mLfPZiIKMVap9PUV0mWPSi3vSKvOkf74UtJvT2zNa2ciCgAAAAAQc/vtt2vFihWJn2+99VY9+OCDGV1z7dq1OuOMMzRlyhSdd955kqTVq1drwYIFmjNnjsaOHas777wzcf4TTzyhmTNnaurUqbrhhhsUiUQkSTfeeKNqa2s1ceJE3XHHHYnza2pq9IMf/EDTp0/X2rVrNWfOHN18882qra3V+PHj1dDQoIULF2rs2LG67bbbEu+LTzK99tprmjNnjhYtWqRx48bp6quvluu6euihh/Txxx9r7ty5mjt37gm/480336yJEyeqrq5O+/fvlyT99Kc/1YwZMzRlyhRddtllicmq+vp6LV26VGeffbZOPfXUxNST67r6p3/6J51++um64IIL9MknnySuP2fOHDU2NuqWW25RW1ubpk6dqquvvjrt/yapYCIK3U1aJI2aKq2tl/7jcunspVLd7ZLfOuHbgnZQhgwddpiIAgAAAIABqQCTS9ddd50WLlyom266SdFoVE899ZQ2b97c47xzzz1Xhw/3/Pfk8uXLdcEFF3Q7tmzZMr300kuqqqrSwYMHE8c3b96sd955R2VlZZoxY4YuueQSlZeXa82aNXrjjTdkWZa+9a1v6cknn9Q111yju+++W0OHDlUkElFdXZ22b9+uyZMnS5IqKyv19ttvS5JWrVol27bV2NioBx98UAsWLNCWLVs0dOhQnXbaabr55ptVWVnZbY1bt27Vu+++q9GjR2v27Nl64403tHTpUv34xz/Whg0bNGzYsD5/Z0eOHFFtba0eeOABLVu2THfeeadWrlyphQsX6h/+4R8kSbfddpseffRRfec735Ek7d27V5s2bdJ7772n+fPna9GiRXrmmWf0hz/8QU1NTWppadGECRN03XXXdfus++67TytXrtS2bdv6XE+2EUShp2Ffjm3Ve+mfpTcfkv7839Kin0uDx/T5Fp/hU4VVoVf+/Ir2H42ltYZh6O/+r7/ThMoJWV/i0a3b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t9+WJK1atUq2bauxsVEPPvigFixYoC1btmjo0KE67bTTdPPNN6uysrLbGrdu3ap3331Xo0eP1uzZs/XGG29o6dKl+vGPf6wNGzb0ORF13333aeXKldq2bZskadeuXdq5c6d+8Ytf6Kyzzur39713715t2rRJ7733nubPn69FixbphRde0K9+9Su99dZbKisr04EDB/q9Ti4RRAEAAAAAgJyoqalRZWWltm7dqpaWFk2bNq1HaCNJGzduTPqas2fPVn19vS6//HItXLgwcfzCCy9MXHvhwoXatGmTTNPUli1bNGPGDElSW1ubRowYIUl6+umn9cgjjygcDmvv3r1qampKBFFXXHFFt8+cP3++JGnSpEmaOHGiRo0aJUk69dRTtXv37h7faebMmaqurpYkTZ06Vbt27dI555yT9Hfs6otf/GJSIZQkfeMb35DP59OECRPU0tIiSXr55Zf193//9yorK5MkDR06NK11ZAtBFAAAAAAAyJklS5Zo9erV2rdvn6677rpez0llImrVqlV666239Pzzz+vMM8/Uli1bJEmGYXQ7zzAMua6ra6+9Vvfee2+31z788EMtX75cDQ0NGjJkiOrr63Xs2LHE6+Xl5d3ODwQCkiSfz5d4Hv85HA73WHfXc/x+f6/nJOv4tXT9nl3XfPznDtROcDqiAAAAAABAzlx66aV68cUX1dDQoIsvvrjXczZu3Kht27b1+HN8CCVJ77//vmbNmqVly5Zp+PDh2r17tyRp/fr1OnDggNra2vTss89q9uzZqqur07p16/TJJ59Ikg4cOKCPPvpIhw4dUnl5uQYNGqSWlha98MILufsFdBEMBnsN3LqyLEuO4/T5+siRI7Vjxw5Fo1E988wz/X7mhRdeqH//939P3K2PrXkAAAAAAKBo2batuXPnavDgwVm5A933vvc97dy5U67rqq6uTlOmTNG2bds0c+ZMXXbZZWpubtbixYtVWxu7gdtdd92liy66SNFoVJZl6eGHH9ZZZ52ladOmady4cRozZoxmz56d8bqScf3112vevHkaPXq0NmzY0Oc5kydP1vTp03X33Xf3eP2+++7T1772NQ0fPly1tbW93mGvq3nz5mnbtm2qra2Vbdv66le/qnvuuScr3ycdxkAd1cqV2tpat7GxsdDLAAAAAAAg53bs2KHx48cXdA3RaDRxB7qxY8fm5DNWr16txsZGrVy5MifXR3e9/b0yDGOL67q1/b2XrXkAAAAAACAnmpqa9OUvf1l1dXU5C6FwcmFrHgAAAAAAyIkJEybogw8+yPnn1NfXq76+Puefk02zZs1Se3t7t2OPP/64Jk2aVKAV5QdBFPD/t3f3MVaV+QHHvz+GgRGw6Mw4u8LQ4gsNYBRGXutgAqKGrhupSGSbpTJlDak2FUir2WqCYmBpE+K7lpitYV20CrvF3dQQJS5WxBSYEQoI26joBpC3woIg+ALz9I854IzQFcV7LsP9fpKbe57nPPfe352cH5z7u+d5riRJkiRJOVu5cmWxQygKp+ZJkiRJkiQpFxaiJEmSJEmSlAsLUZIkSZIkScqFhShJkiRJkqTTdNVVV33lmIcffphDhw7lEM2Zy0KUJEmSJEnSSRw9evSUx7755ptfOcZClL+aJ0mSJElSSdjxk5/w6abffqvP2blfX757zz3/7/4ZM2ZQWVnJtGnTALj33nupqalh6tSp3/g1Fy1axMyZMykrK6N79+68/vrrzJ8/n8WLF7N//362bdvGxIkTue+++wBYsGABjz76KJ999hnDhg3jySefpKysjNtvv53Vq1dz+PBhxo8fz8yZMwHo3bs3EyZMYOnSpdx9993MmzePuro6li9fzscff8wzzzzDnDlzWL9+PRMmTGDWrFkAdOvWjYMHD/Laa69x//33U11dzYYNGxg0aBALFizgscce48MPP2TUqFFUV1ezbNmyb/w3aM8sREmSJEmSpIKYPHky48aNY9q0aTQ3N/P888+zatWqE8ZdffXVHDhw4IT+uXPncu2117bpe+CBB3j55Zfp2bMn+/btO96/atUqNmzYQJcuXRgyZAg33HADXbt25YUXXmDFihWUl5dzxx138Oyzz3Lrrbcye/ZsKisrOXr0KKNHj2bdunVcccUVAFRVVfHWW28BMG/ePDp16kRjYyOPPPIIY8eOpampicrKSi655BKmT59OVVVVmxjXrFnD22+/TY8ePaivr2fFihXceeedPPjggyxbtozq6urT/tu2VxaiJEmSJEkqAX/oyqVC6d27N1VVVaxZs4adO3dSV1d3QtEGYPny5af8nPX19TQ0NHDLLbcwbty44/3XXXfd8eceN24cb7zxBh07dqSpqYkhQ4YAcPjwYWpqagBYuHAhTz31FEeOHGH79u1s3LjxeCFq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\\n\",\n      \"text/plain\": [\n       \"<Figure size 1440x1080 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"plt.figure(figsize=(20,15))\\n\",\n    \"\\n\",\n    \"plt.plot(t_spearmint_median, min_so_far(s_spearmint_median))\\n\",\n    \"plt.plot(t_spearmint_bandit, min_so_far(s_spearmint_bandit))\\n\",\n    \"plt.plot(t_spearmint_trunc, min_so_far(s_spearmint_trunc))\\n\",\n    \"plt.plot(t_ran, min_so_far(s_ran))\\n\",\n    \"\\n\",\n    \"plt.legend(['y = spearmint_median','y = spearmint_bandit', 'y = spearmint_trunc', 'y = spearmint'], loc='lower right')\\n\",\n    \"\\n\",\n    \"plt.title('Hyperparameter Optimization using ES with various policies on Quad min')\\n\",\n    \"plt.xlabel('Time')\\n\",\n    \"plt.ylabel('Min res')\\n\",\n    \"\\n\",\n    \"plt.show()\\n\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.5.2\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "Examples/quad_equation_min/cpu.ini",
    "content": "[Auptimizer]\n# Auptimizer environment folder to be created, this file will be copied over\nAuptimizer_PATH=./.aup\n# Temp folder\nTMP_FOLDER=./aup_tmp\n# SQL engine\nSQL_ENGINE=sqlite\n"
  },
  {
    "path": "Examples/quad_equation_min/quad_min.py",
    "content": "#!/usr/bin/env python\n\"\"\"\nModified Rosenbrock function for HPO and aup\n============================================\n\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\n\nimport sys\n\"\"\" # ver 1.0 - modify existing code\nfrom aup import BasicConfig, print_result\n\ndef rosenbrock(conf, a=1, b=100):\n    x = conf.x\n    y = conf.y\n    return (a-x)*(a-x) + b*(y-x*x)*(y-x*x)\n\n\nif __name__ == \"__main__\":\n    if len(sys.argv) != 2:\n        print(\"config file required\")\n        exit(1)\n    config = BasicConfig().load(sys.argv[1])\n    val = rosenbrock(config)\n    print_result(val)\n\"\"\"\n\nfrom aup import aup_args\nfrom time import sleep\n\n@aup_args\ndef rosenbrock(x, a=2, b=4, c=5):\n    global it\n\n    it = 1.0\n    res = None\n\n    for _ in range(0, 10):\n        sleep(1)\n        res = x*x*a + x*b + c\n        res += it\n        it -= 1.0 / 10\n\n    return res\n\nif __name__ == \"__main__\":\n    if len(sys.argv) != 2:\n        print(\"config file required\")\n        exit(1)\n    \n    rosenbrock(sys.argv[1])\n"
  },
  {
    "path": "Examples/quad_equation_min/quad_min_BOHB.json",
    "content": "{\n  \"name\": \"./quad_equation_min/quad_min_BOHB.json\",\n  \"proposer\": \"bohb\",\n  \"script\": \"quad_min.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"min\",\n  \"n_iterations\": 100,\n  \"num_samples\": 64,\n  \"random_fraction\": 0.3333333333333333,\n  \"bandwidth_factor\": 3,\n  \"min_bandwidth\": 0.001,\n  \"eta\": 3,\n  \"min_budget\": 1,\n  \"max_budget\": 5,\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [-1.0, 100.0],\n      \"type\": \"float\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/quad_equation_min/quad_min_random.json",
    "content": "{\n  \"name\": \"./quad_equation_min/quad_min_random.json\",\n  \"proposer\": \"random\",\n  \"script\": \"quad_min.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"min\",\n  \"n_samples\": 200,\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [-1.0, 100.0],\n      \"type\": \"float\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/quad_equation_min/quad_min_spearmint.json",
    "content": "{\n  \"name\": \"./quad_equation_min/quad_min_spearmint.json\",\n  \"proposer\": \"spearmint\",\n  \"script\": \"quad_min.py\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 4,\n  \"target\":\"min\",\n  \"n_samples\": 50,\n  \"engine\":\"GPEIChooser\",\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [-1.0, 100.0],\n      \"type\": \"float\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Examples/tf_flags/README.md",
    "content": "# Demo for tf.app.flags\n\nTensorflow flags is widely used for tensorflow to parse input arguments.\nIt is naturally supported by **Auptimizer** with minor modification on you existing code.\n\nSimilar to adopting **Auptimizer** for plain python training code, there are two parts of changes.\n\nA working example is shown as `rosenbrock_hpo.py`, whereas the plain code is `rosenbrock_tf.py`.\n\n## Modification on training code\n\nBecause `tf.flags` already takes care of the input argument, we just insert `aup.BasicConfig` properly:\n\n```python\ndef main(unused_arguments):\n  config = BasicConfig().load(unused[1])\n  config.to_flags(FLAGS)\t\n\t\nif __name__ == \"__main__\"\n  tf.app.run()\n```\n\n`config = BasicConfig().load(unused[1])` parses the input file for the parameter values.\nAnd `config.to_flags(FLAGS)` assigns the value to `tensorflow.app.flags.FLAGS`, thus it can be used without changing how to access those values in the original code.\n\nSimilar to other examples, you need to call `aup.print_result()` at the end of the program to return your target to optimize.\n\n## Modification on experiment configuration\n\nThe same configuration of experiment can be used.  See other examples for reference.\n\n\n## Run\n\nSame to other example, you now can run **Auptimizer** as\n\n```bash\npython -m aup experiment.json\n```\n\nto initiate your continuous training experiment.\n\n\n\n\n\n\n"
  },
  {
    "path": "Examples/tf_flags/experiment.json",
    "content": "{\n  \"name\": \"./tf_flags/experiment.json\",\n  \"proposer\": \"random\",\n  \"n_samples\": 10,\n  \"random_seed\": 1,\n  \"script\": \"rosenbrock_hpo.py\",\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"y\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    }\n  ],\n  \"resource\": \"cpu\",\n  \"n_parallel\": 2,\n  \"target\":\"min\"\n}\n"
  },
  {
    "path": "Examples/tf_flags/rosenbrock_hpo.py",
    "content": "#!/usr/bin/env python\n\"\"\"\nModified Rosenbrock function with tf.app.flags\n==============================================\n\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\n\nimport tensorflow as tf\n\"\"\"\nfrom aup import print_result, BasicConfig\n\nflags = tf.app.flags\nFLAGS = flags.FLAGS\n\nflags.DEFINE_float(\"x\", 0, \"x value\")\nflags.DEFINE_float(\"y\", 0, \"y value\")\n\n\ndef rosenbrock(x, y, a=1, b=100):\n    return (a-x)*(a-x) + b*(y-x*x)*(y-x*x)\n\n\ndef main(unused):\n    ## change\n    config = BasicConfig().load(unused[1])\n    config.to_flags(FLAGS)\n    ## \n    val = rosenbrock(FLAGS.x, FLAGS.y)\n    print_result(val)\n\n\nif __name__ == \"__main__\":\n    tf.app.run()\n\"\"\"\n\nfrom aup import aup_flags\n\nflags = tf.app.flags\nFLAGS = flags.FLAGS\n\nflags.DEFINE_float(\"x\", 0, \"x value\")\nflags.DEFINE_float(\"y\", 0, \"y value\")\n\n\ndef rosenbrock(x, y, a=1, b=100):\n    return (a-x)*(a-x) + b*(y-x*x)*(y-x*x)\n\n\n@aup_flags(FLAGS)\ndef main(unused):\n    return rosenbrock(FLAGS.x, FLAGS.y)\n\n\nif __name__ == \"__main__\":\n    tf.app.run()\n"
  },
  {
    "path": "Examples/tf_flags/rosenbrock_tf.py",
    "content": "#!/usr/bin/env python\n\"\"\"\nModified Rosenbrock function with tf.app.flags\n==============================================\n\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\n\nimport sys\nimport tensorflow as tf\n\nflags = tf.app.flags\nFLAGS = flags.FLAGS\n\nflags.DEFINE_float(\"x\", 0, \"x value\")\nflags.DEFINE_float(\"y\", 0, \"y value\")\n\n\ndef rosenbrock(x, y, a=1, b=100):\n    return (a-x)*(a-x) + b*(y-x*x)*(y-x*x)\n\n\ndef main(unused):\n    val = rosenbrock(FLAGS.x, FLAGS.y)\n    print(val)\n\n\nif __name__ == \"__main__\":\n    tf.app.run()\n"
  },
  {
    "path": "Examples/tf_iris_diff_opt/History.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import os\\n\",\n    \"import pandas as pd\\n\",\n    \"import matplotlib.pylab as plt\\n\",\n    \"from aup.ET.Connector.SQLiteConnector import SQLiteConnector\\n\",\n    \"import json\\n\",\n    \"%matplotlib inline\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# connect to the result (The database is copied from ~/.aup/sqlite3.db)\\n\",\n    \"sql = SQLiteConnector(\\\"./sqlite3.db\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"[1, 2, 3, 4]\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# Get all experiments (this run is for iris using hyperopt, sequence, spearmint, random)\\n\",\n    \"eids = sql.get_all_experiment()\\n\",\n    \"eids\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"(2,\\n\",\n       \" 1,\\n\",\n       \" 1534397382,\\n\",\n       \" 1534397474,\\n\",\n       \" '{\\\"script\\\": \\\"premade_estimator_hpo.py\\\", \\\"n_parallel\\\": 2, \\\"parameter_config\\\": [{\\\"type\\\": \\\"int\\\", \\\"name\\\": \\\"layer1\\\", \\\"range\\\": [2, 6]}, {\\\"type\\\": \\\"int\\\", \\\"name\\\": \\\"layer2\\\", \\\"range\\\": [2, 6]}], \\\"resource\\\": \\\"gpu\\\", \\\"proposer\\\": \\\"sequence\\\", \\\"target\\\": \\\"max\\\", \\\"workingdir\\\": \\\"Examples/tf_iris_diff_opt\\\"}')\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# Show details in one experiment\\n\",\n    \"sql.cursor.execute(\\\"SELECT * FROM experiment where eid = ?\\\", (eids[1],))\\n\",\n    \"sql.cursor.fetchone()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>jid</th>\\n\",\n       \"      <th>score</th>\\n\",\n       \"      <th>eid</th>\\n\",\n       \"      <th>rid</th>\\n\",\n       \"      <th>start_time</th>\\n\",\n       \"      <th>end_time</th>\\n\",\n       \"      <th>job_config</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0.966667</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1534397309</td>\\n\",\n       \"      <td>1534397318</td>\\n\",\n       \"      <td>{'layer2': 2, 'tid': 0, 'layer1': 2}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0.933333</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1534397309</td>\\n\",\n       \"      <td>1534397318</td>\\n\",\n       \"      <td>{'layer2': 5, 'tid': 1, 'layer1': 2}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0.966667</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1534397318</td>\\n\",\n       \"      <td>1534397325</td>\\n\",\n       \"      <td>{'layer2': 4, 'tid': 2, 'layer1': 3}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>0.966667</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1534397318</td>\\n\",\n       \"      <td>1534397325</td>\\n\",\n       \"      <td>{'layer2': 4, 'tid': 3, 'layer1': 3}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>0.966667</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1534397325</td>\\n\",\n       \"      <td>1534397332</td>\\n\",\n       \"      <td>{'layer2': 4, 'tid': 4, 'layer1': 4}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>0.966667</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1534397325</td>\\n\",\n       \"      <td>1534397332</td>\\n\",\n       \"      <td>{'layer2': 3, 'tid': 5, 'layer1': 5}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>7</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1534397332</td>\\n\",\n       \"      <td>1534397339</td>\\n\",\n       \"      <td>{'layer2': 3, 'tid': 6, 'layer1': 5}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>0.266667</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1534397332</td>\\n\",\n       \"      <td>1534397340</td>\\n\",\n       \"      <td>{'layer2': 2, 'tid': 7, 'layer1': 2}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>0.966667</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1534397339</td>\\n\",\n       \"      <td>1534397346</td>\\n\",\n       \"      <td>{'layer2': 5, 'tid': 8, 'layer1': 5}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>10</td>\\n\",\n       \"      <td>0.966667</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1534397340</td>\\n\",\n       \"      <td>1534397347</td>\\n\",\n       \"      <td>{'layer2': 3, 'tid': 9, 'layer1': 2}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>11</td>\\n\",\n       \"      <td>0.966667</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1534397347</td>\\n\",\n       \"      <td>1534397354</td>\\n\",\n       \"      <td>{'layer2': 5, 'tid': 10, 'layer1': 5}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>12</td>\\n\",\n       \"      <td>0.966667</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1534397347</td>\\n\",\n       \"      <td>1534397354</td>\\n\",\n       \"      <td>{'layer2': 5, 'tid': 11, 'layer1': 4}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>13</td>\\n\",\n       \"      <td>0.266667</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1534397354</td>\\n\",\n       \"      <td>1534397361</td>\\n\",\n       \"      <td>{'layer2': 3, 'tid': 12, 'layer1': 5}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>14</td>\\n\",\n       \"      <td>0.966667</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1534397354</td>\\n\",\n       \"      <td>1534397361</td>\\n\",\n       \"      <td>{'layer2': 5, 'tid': 13, 'layer1': 3}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>15</td>\\n\",\n       \"      <td>0.966667</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1534397361</td>\\n\",\n       \"      <td>1534397368</td>\\n\",\n       \"      <td>{'layer2': 4, 'tid': 14, 'layer1': 5}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>16</td>\\n\",\n       \"      <td>0.966667</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1534397361</td>\\n\",\n       \"      <td>1534397368</td>\\n\",\n       \"      <td>{'layer2': 4, 'tid': 15, 'layer1': 4}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>17</td>\\n\",\n       \"      <td>0.966667</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1534397368</td>\\n\",\n       \"      <td>1534397375</td>\\n\",\n       \"      <td>{'layer2': 3, 'tid': 16, 'layer1': 4}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1534397368</td>\\n\",\n       \"      <td>1534397375</td>\\n\",\n       \"      <td>{'layer2': 5, 'tid': 17, 'layer1': 2}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>19</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1534397375</td>\\n\",\n       \"      <td>1534397382</td>\\n\",\n       \"      <td>{'layer2': 4, 'tid': 18, 'layer1': 3}</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>20</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1534397375</td>\\n\",\n       \"      <td>1534397382</td>\\n\",\n       \"      <td>{'layer2': 4, 'tid': 19, 'layer1': 2}</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"    jid     score  eid  rid  start_time    end_time  \\\\\\n\",\n       \"0     1  0.966667    1    1  1534397309  1534397318   \\n\",\n       \"1     2  0.933333    1    2  1534397309  1534397318   \\n\",\n       \"2     3  0.966667    1    1  1534397318  1534397325   \\n\",\n       \"3     4  0.966667    1    2  1534397318  1534397325   \\n\",\n       \"4     5  0.966667    1    1  1534397325  1534397332   \\n\",\n       \"5     6  0.966667    1    2  1534397325  1534397332   \\n\",\n       \"6     7  1.000000    1    1  1534397332  1534397339   \\n\",\n       \"7     8  0.266667    1    2  1534397332  1534397340   \\n\",\n       \"8     9  0.966667    1    1  1534397339  1534397346   \\n\",\n       \"9    10  0.966667    1    2  1534397340  1534397347   \\n\",\n       \"10   11  0.966667    1    1  1534397347  1534397354   \\n\",\n       \"11   12  0.966667    1    2  1534397347  1534397354   \\n\",\n       \"12   13  0.266667    1    1  1534397354  1534397361   \\n\",\n       \"13   14  0.966667    1    2  1534397354  1534397361   \\n\",\n       \"14   15  0.966667    1    1  1534397361  1534397368   \\n\",\n       \"15   16  0.966667    1    2  1534397361  1534397368   \\n\",\n       \"16   17  0.966667    1    1  1534397368  1534397375   \\n\",\n       \"17   18  1.000000    1    2  1534397368  1534397375   \\n\",\n       \"18   19  1.000000    1    1  1534397375  1534397382   \\n\",\n       \"19   20  1.000000    1    2  1534397375  1534397382   \\n\",\n       \"\\n\",\n       \"                               job_config  \\n\",\n       \"0    {'layer2': 2, 'tid': 0, 'layer1': 2}  \\n\",\n       \"1    {'layer2': 5, 'tid': 1, 'layer1': 2}  \\n\",\n       \"2    {'layer2': 4, 'tid': 2, 'layer1': 3}  \\n\",\n       \"3    {'layer2': 4, 'tid': 3, 'layer1': 3}  \\n\",\n       \"4    {'layer2': 4, 'tid': 4, 'layer1': 4}  \\n\",\n       \"5    {'layer2': 3, 'tid': 5, 'layer1': 5}  \\n\",\n       \"6    {'layer2': 3, 'tid': 6, 'layer1': 5}  \\n\",\n       \"7    {'layer2': 2, 'tid': 7, 'layer1': 2}  \\n\",\n       \"8    {'layer2': 5, 'tid': 8, 'layer1': 5}  \\n\",\n       \"9    {'layer2': 3, 'tid': 9, 'layer1': 2}  \\n\",\n       \"10  {'layer2': 5, 'tid': 10, 'layer1': 5}  \\n\",\n       \"11  {'layer2': 5, 'tid': 11, 'layer1': 4}  \\n\",\n       \"12  {'layer2': 3, 'tid': 12, 'layer1': 5}  \\n\",\n       \"13  {'layer2': 5, 'tid': 13, 'layer1': 3}  \\n\",\n       \"14  {'layer2': 4, 'tid': 14, 'layer1': 5}  \\n\",\n       \"15  {'layer2': 4, 'tid': 15, 'layer1': 4}  \\n\",\n       \"16  {'layer2': 3, 'tid': 16, 'layer1': 4}  \\n\",\n       \"17  {'layer2': 5, 'tid': 17, 'layer1': 2}  \\n\",\n       \"18  {'layer2': 4, 'tid': 18, 'layer1': 3}  \\n\",\n       \"19  {'layer2': 4, 'tid': 19, 'layer1': 2}  \"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# show details in job history for one experiment\\n\",\n    \"history = sql.get_all_history(1)\\n\",\n    \"history = pd.DataFrame(history)\\n\",\n    \"history.columns = ['jid', 'score','eid','rid','start_time','end_time','job_config']\\n\",\n    \"history\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"Text(0,0.5,'Best Accuracy so far')\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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1/CBpg/U9HoZZOPnwc4nIH3A/2ujTXDe/4Cm/1b/don4FY7C6ZMgOWqoWyIiIgFhzrmhboMvkyZNcs3NzUPdDBEROUaY2Sbn3KShbkeQqW8WkWPdrl27OO+884a6Gcekno5tX/tmjZkVERERERE5zowePZp33nlnqJvRLwpmRUREREREAsQ5R6FQGOpmDDmNmRUREREREemjv3zjG3Tu2l3XfcbOG8tf3X33EbdpaWlh1qxZXHbZZWzatInJkyezfft2UqkUf/d3f8eyZcuAYsb1hhtu4Je//CXZbJaf//znjB07lnfffZf58+fz+uuvM2XKFKqHm95///388Ic/BGDhwoXcfvvttLS0MHv2bC6//HJefPFFLr30Um688UaWLl3K22+/zcMPP8zkyZPrehz8UmZWREREREQkAF555RU+97nP8fLLL/Otb32L5uZmtm3bxnPPPce2bdsq240aNYrNmzdz8803s3z5cgCWLVvGRz/6UV5++WWuu+46XnvtNQA2bdrEypUreemll1i/fj3f//73+f3vfw/Aq6++yp133snu3bvZvXs3q1evZt26dSxfvpxvfOMbg38ADqPMrIiIiIiISB8dLYM6kM466ywuv/xyAH72s5/xve99j1wux5tvvsnOnTsZP348AHPmFJfsmzhxIo899hgAzz//fOX+Jz7xCUaOHAnAunXruO6662hqaqq89oUXXuCaa65hzJgxjBs3DoALLriAj33sY5gZ48aNo6WlZdB+794omBUREREREQmAcsD5pz/9ieXLl7Nx40ZGjhzJggULSKfTle1isRgAoVCIXC5X8/uV9wPgeV7lsed5/dpvvajMWEREREREJEAOHjxIU1MTI0aM4K233mLt2rVHfc0VV1zB6tWrAVi7di2tra0ATJs2jTVr1tDR0UF7ezuPP/4406ZNG9D214sysyIiIiIiIgFy0UUXcfHFFzN27FjOPPNMpk6detTXLF26lPnz53PBBRfwkY98hA9+8IMAXHLJJSxYsKAymdPChQu5+OKLG6KM+GiseharINDC7CIiUk99XZhdeqe+WUSOdbt27eK8884b6mYck3o6tn3tm1VmLCIiIiIiIoGjYFZEREREREQCR8GsiIiIiIjIUQRteGYQ9PeYKpgVERERERE5gng8zrvvvquAto6cc7z77rvE4/Ga96HZjEVERERE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\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x105e7f438>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"plt.figure(figsize=(16,8))\\n\",\n    \"plt.subplot(121)\\n\",\n    \"for i in eids:\\n\",\n    \"    history = sql.get_all_history(i)\\n\",\n    \"    history = pd.DataFrame(history)\\n\",\n    \"    history.columns = ['jid', 'score','eid','rid','start_time','end_time','job_config']\\n\",\n    \"    sql.cursor.execute(\\\"SELECT * FROM experiment where eid = ?\\\", (i,))\\n\",\n    \"    label = json.loads(sql.cursor.fetchone()[4])['proposer']\\n\",\n    \"    plt.plot(history.score, label=label)\\n\",\n    \"plt.legend()\\n\",\n    \"plt.xlabel(\\\"Iteration\\\")\\n\",\n    \"plt.ylabel(\\\"Accuracy\\\")\\n\",\n    \"\\n\",\n    \"plt.subplot(122)\\n\",\n    \"for i in eids:\\n\",\n    \"    history = sql.get_all_history(i)\\n\",\n    \"    history = pd.DataFrame(history)\\n\",\n    \"    history.columns = ['jid', 'score','eid','rid','start_time','end_time','job_config']\\n\",\n    \"    sql.cursor.execute(\\\"SELECT * FROM experiment where eid = ?\\\", (i,))\\n\",\n    \"    label = json.loads(sql.cursor.fetchone()[4])['proposer']\\n\",\n    \"    plt.plot(history.score.cummax(), label=label)\\n\",\n    \"plt.legend()\\n\",\n    \"plt.xlabel(\\\"Iteration\\\")\\n\",\n    \"plt.ylabel(\\\"Best Accuracy so far\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"sql.close()\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.6.4\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "Examples/tf_iris_diff_opt/README.md",
    "content": "# Tensorflow Iris Example\n\nHere we demonstrate how to adopt an existing [tensorflow code](https://raw.githubusercontent.com/tensorflow/models/master/samples/core/get_started/premade_estimator.py) for **Auptimizer** using the automatic code generation tool.\n\n## Steps\n1. The original `premade_estimator.py` use two hyperparameters, `batch_size` and `train_steps`. To make the code more relevant to our hyperparameter search, we drop them as input arguments and use fixed values instead.\n2. We add two hyperparameters into the `main()` function to update the number of neurons in each layer, i.e. `layer1` and `layer2`.  The model is constructed accordingly in line 51.\n3. Add the return value `probability` in the `main()` function and also remove the \"__main__\" segments as we will create it automatically.\nSee `premade_estimator_hyper.py` for the changed script.\n4. Write an experiment configution JSON file, such as:\n\n```JSON\n{\n  \"proposer\": \"random\",\n  \"script\": \"premade_estimator_wrapper.py\",\n  \"n_samples\": 20,\n  \"random_seed\": 1,\n  \"parameter_config\": [\n    {\n      \"name\": \"layer1\",\n      \"range\": [\n        2,\n        6\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"layer2\",\n      \"range\": [\n        2,\n        6\n      ],\n      \"type\": \"int\"\n    }\n  ],\n  \"resource\": \"cpu\",\n  \"n_parallel\": 2,\n  \"target\":\"max\"\n}\n```\n\n4. Run code conversion as: `python -m aup.convert premade_estimator_hyper.py experiment_random.json main`.  The output file is saved as `premade_estimator_wrapper.py`.\n\nNow we have the code for **Auptimizer** to tune.\n\n## Run \n\n\n1. If you haven't setup **Auptimzier** yet, run `python -m aup.setup ../../FirstTime/env_local_template.ini` to setup a local environment for testing (with CPU only).  Then following instruction on the screen to run `python -m aup.setupdb.sqlite ./.aup/env.ini`.\n2. Run **Auptimizer** as: `python -m aup experiment_demo.json`.\n"
  },
  {
    "path": "Examples/tf_iris_diff_opt/experiment_demo.json",
    "content": "{\n  \"name\": \"./tf_iris_diff_opt/experiment_demo.json\",\n  \"proposer\": \"random\",\n  \"script\": \"premade_estimator_wrapper.py\",\n  \"n_samples\": 4,\n  \"random_seed\": 1,\n  \"parameter_config\": [\n    {\n      \"name\": \"layer1\",\n      \"range\": [\n        2,\n        6\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"layer2\",\n      \"range\": [\n        2,\n        6\n      ],\n      \"type\": \"int\"\n    }\n  ],\n  \"resource\": \"cpu\",\n  \"n_parallel\": 2,\n  \"target\":\"max\"\n}\n"
  },
  {
    "path": "Examples/tf_iris_diff_opt/experiment_hpo.json",
    "content": "{\n  \"name\": \"./tf_iris_diff_opt/experiment_hpo.json\",\n  \"proposer\": \"hyperopt\",\n  \"random_seed\": 1,\n  \"engine\":\"tpe\",\n  \"n_samples\": 20,\n  \"script\": \"premade_estimator_hpo.py\",\n  \"parameter_config\": [\n    {\n      \"name\": \"layer1\",\n      \"range\": [\n        2,\n        6\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"layer2\",\n      \"range\": [\n        2,\n        6\n      ],\n      \"type\": \"int\"\n    }\n  ],\n  \"resource\": \"gpu\",\n  \"n_parallel\": 2,\n  \"target\":\"max\"\n}\n"
  },
  {
    "path": "Examples/tf_iris_diff_opt/experiment_hyperband.json",
    "content": "{\n  \"name\": \"./tf_iris_diff_opt/experiment_hyperband.json\",\n  \"proposer\": \"hyperopt\",\n  \"random_seed\": 1,\n  \"engine\":\"tpe\",\n  \"n_samples\": 20,\n  \"script\": \"premade_estimator_hpo.py\",\n  \"parameter_config\": [\n    {\n      \"name\": \"layer1\",\n      \"range\": [\n        2,\n        6\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"layer2\",\n      \"range\": [\n        2,\n        6\n      ],\n      \"type\": \"int\"\n    }\n  ],\n  \"resource\": \"gpu\",\n  \"n_parallel\": 2,\n  \"target\":\"max\"\n}\n"
  },
  {
    "path": "Examples/tf_iris_diff_opt/experiment_random.json",
    "content": "{\n  \"name\": \"./tf_iris_diff_opt/experiment_random.json\",\n  \"proposer\": \"random\",\n  \"script\": \"premade_estimator_hpo.py\",\n  \"n_samples\": 20,\n  \"random_seed\": 1,\n  \"parameter_config\": [\n    {\n      \"name\": \"layer1\",\n      \"range\": [\n        2,\n        6\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"layer2\",\n      \"range\": [\n        2,\n        6\n      ],\n      \"type\": \"int\"\n    }\n  ],\n  \"resource\": \"gpu\",\n  \"n_parallel\": 2,\n  \"target\":\"max\"\n}\n"
  },
  {
    "path": "Examples/tf_iris_diff_opt/experiment_sequence.json",
    "content": "{\n  \"name\": \"./tf_iris_diff_opt/experiment_sequence.json\",\n  \"proposer\": \"sequence\",\n  \"script\": \"premade_estimator_hpo.py\",\n  \"parameter_config\": [\n    {\n      \"name\": \"layer1\",\n      \"range\": [\n        2,\n        6\n      ],\n      \"type\": \"int\"\n    },\n    {\n      \"name\": \"layer2\",\n      \"range\": [\n        2,\n        6\n      ],\n      \"type\": \"int\"\n    }\n  ],\n  \"resource\": \"gpu\",\n  \"n_parallel\": 2,\n  \"target\":\"max\"\n}\n"
  },
  {
    "path": "Examples/tf_iris_diff_opt/experiment_spearmint.json",
    "content": "{\n  \"name\": \"./tf_iris_diff_opt/experiment_spearmint.json\",\n  \"proposer\": \"spearmint\",\n  \"n_samples\": 20,\n  \"random_seed\": 1,\n  \"script\": \"premade_estimator_hpo.py\",\n  \"engine\":\"GPEIChooser\",\n  \"parameter_config\": [\n    {\n      \"name\": \"layer1\",\n      \"range\": [\n        2,\n        6\n      ],\n      \"type\": \"int\",\n      \"size\": 1\n    },\n    {\n      \"name\": \"layer2\",\n      \"range\": [\n        2,\n        6\n      ],\n      \"type\": \"int\",\n      \"size\": 1\n    }\n  ],\n  \"resource\": \"gpu\",\n  \"n_parallel\": 2,\n  \"target\":\"max\"\n}\n\n"
  },
  {
    "path": "Examples/tf_iris_diff_opt/iris_data.py",
    "content": "# Download from https://raw.githubusercontent.com/tensorflow/models/master/samples/core/get_started/iris_data.py\n# Date: Jun 11, 2018\nimport pandas as pd\nimport tensorflow as tf\n\nTRAIN_URL = \"http://download.tensorflow.org/data/iris_training.csv\"\nTEST_URL = \"http://download.tensorflow.org/data/iris_test.csv\"\n\nCSV_COLUMN_NAMES = ['SepalLength', 'SepalWidth',\n                    'PetalLength', 'PetalWidth', 'Species']\nSPECIES = ['Setosa', 'Versicolor', 'Virginica']\n\ndef maybe_download():\n    train_path = tf.keras.utils.get_file(TRAIN_URL.split('/')[-1], TRAIN_URL)\n    test_path = tf.keras.utils.get_file(TEST_URL.split('/')[-1], TEST_URL)\n\n    return train_path, test_path\n\ndef load_data(y_name='Species'):\n    \"\"\"Returns the iris dataset as (train_x, train_y), (test_x, test_y).\"\"\"\n    train_path, test_path = maybe_download()\n\n    train = pd.read_csv(train_path, names=CSV_COLUMN_NAMES, header=0)\n    train_x, train_y = train, train.pop(y_name)\n\n    test = pd.read_csv(test_path, names=CSV_COLUMN_NAMES, header=0)\n    test_x, test_y = test, test.pop(y_name)\n\n    return (train_x, train_y), (test_x, test_y)\n\n\ndef train_input_fn(features, labels, batch_size):\n    \"\"\"An input function for training\"\"\"\n    # Convert the inputs to a Dataset.\n    dataset = tf.data.Dataset.from_tensor_slices((dict(features), labels))\n\n    # Shuffle, repeat, and batch the examples.\n    dataset = dataset.shuffle(1000).repeat().batch(batch_size)\n\n    # Return the dataset.\n    return dataset\n\n\ndef eval_input_fn(features, labels, batch_size):\n    \"\"\"An input function for evaluation or prediction\"\"\"\n    features=dict(features)\n    if labels is None:\n        # No labels, use only features.\n        inputs = features\n    else:\n        inputs = (features, labels)\n\n    # Convert the inputs to a Dataset.\n    dataset = tf.data.Dataset.from_tensor_slices(inputs)\n\n    # Batch the examples\n    assert batch_size is not None, \"batch_size must not be None\"\n    dataset = dataset.batch(batch_size)\n\n    # Return the dataset.\n    return dataset\n\n\n# The remainder of this file contains a simple example of a csv parser,\n#     implemented using the `Dataset` class.\n\n# `tf.parse_csv` sets the types of the outputs to match the examples given in\n#     the `record_defaults` argument.\nCSV_TYPES = [[0.0], [0.0], [0.0], [0.0], [0]]\n\ndef _parse_line(line):\n    # Decode the line into its fields\n    fields = tf.decode_csv(line, record_defaults=CSV_TYPES)\n\n    # Pack the result into a dictionary\n    features = dict(zip(CSV_COLUMN_NAMES, fields))\n\n    # Separate the label from the features\n    label = features.pop('Species')\n\n    return features, label\n\n\ndef csv_input_fn(csv_path, batch_size):\n    # Create a dataset containing the text lines.\n    dataset = tf.data.TextLineDataset(csv_path).skip(1)\n\n    # Parse each line.\n    dataset = dataset.map(_parse_line)\n\n    # Shuffle, repeat, and batch the examples.\n    dataset = dataset.shuffle(1000).repeat().batch(batch_size)\n\n    # Return the dataset.\n    return dataset\n"
  },
  {
    "path": "Examples/tf_iris_diff_opt/premade_estimator.py",
    "content": "# Download from https://raw.githubusercontent.com/tensorflow/models/master/samples/core/get_started/premade_estimator.py\n# Date: Jun 11, 2018\n# This the original code.  The converted version for Auptimizer is `premade_estimator_hpo.py`\n# #########################################################################################################\n#  Copyright 2016 The TensorFlow Authors. All Rights Reserved.\n#\n#  Licensed under the Apache License, Version 2.0 (the \"License\");\n#  you may not use this file except in compliance with the License.\n#  You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n#  Unless required by applicable law or agreed to in writing, software\n#  distributed under the License is distributed on an \"AS IS\" BASIS,\n#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#  See the License for the specific language governing permissions and\n#  limitations under the License.\n\"\"\"An Example of a DNNClassifier for the Iris dataset.\"\"\"\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport argparse\nimport tensorflow as tf\n\nimport iris_data\n\n\nparser = argparse.ArgumentParser()\nparser.add_argument('--batch_size', default=100, type=int, help='batch size')\nparser.add_argument('--train_steps', default=1000, type=int,\n                    help='number of training steps')\n\ndef main(argv):\n    args = parser.parse_args(argv[1:])\n\n    # Fetch the data\n    (train_x, train_y), (test_x, test_y) = iris_data.load_data()\n\n    # Feature columns describe how to use the input.\n    my_feature_columns = []\n    for key in train_x.keys():\n        my_feature_columns.append(tf.feature_column.numeric_column(key=key))\n\n    # Build 2 hidden layer DNN with 10, 10 units respectively.\n    classifier = tf.estimator.DNNClassifier(\n        feature_columns=my_feature_columns,\n        # Two hidden layers of 10 nodes each.\n        hidden_units=[10, 10],\n        # The model must choose between 3 classes.\n        n_classes=3)\n\n    # Train the Model.\n    classifier.train(\n        input_fn=lambda:iris_data.train_input_fn(train_x, train_y,\n                                                 args.batch_size),\n        steps=args.train_steps)\n\n    # Evaluate the model.\n    eval_result = classifier.evaluate(\n        input_fn=lambda:iris_data.eval_input_fn(test_x, test_y,\n                                                args.batch_size))\n\n    print('\\nTest set accuracy: {accuracy:0.3f}\\n'.format(**eval_result))\n\n    # Generate predictions from the model\n    expected = ['Setosa', 'Versicolor', 'Virginica']\n    predict_x = {\n        'SepalLength': [5.1, 5.9, 6.9],\n        'SepalWidth': [3.3, 3.0, 3.1],\n        'PetalLength': [1.7, 4.2, 5.4],\n        'PetalWidth': [0.5, 1.5, 2.1],\n    }\n\n    predictions = classifier.predict(\n        input_fn=lambda:iris_data.eval_input_fn(predict_x,\n                                                labels=None,\n                                                batch_size=args.batch_size))\n\n    template = ('\\nPrediction is \"{}\" ({:.1f}%), expected \"{}\"')\n\n    for pred_dict, expec in zip(predictions, expected):\n        class_id = pred_dict['class_ids'][0]\n        probability = pred_dict['probabilities'][class_id]\n\n        print(template.format(iris_data.SPECIES[class_id],\n                              100 * probability, expec))\n\n\nif __name__ == '__main__':\n    tf.logging.set_verbosity(tf.logging.INFO)\n    tf.app.run(main)\n"
  },
  {
    "path": "Examples/tf_iris_diff_opt/premade_estimator_hpo.py",
    "content": "#!/usr/bin/env python3\n# Download from https://raw.githubusercontent.com/tensorflow/models/master/samples/core/get_started/premade_estimator.py\n# Date: Jun 11, 2018\n# Modified for auptimizer\n########################################################################################################################\n#  Copyright 2016 The TensorFlow Authors. All Rights Reserved.\n#\n#  Licensed under the Apache License, Version 2.0 (the \"License\");\n#  you may not use this file except in compliance with the License.\n#  You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n#  Unless required by applicable law or agreed to in writing, software\n#  distributed under the License is distributed on an \"AS IS\" BASIS,\n#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#  See the License for the specific language governing permissions and\n#  limitations under the License.\n\"\"\"An Example of a DNNClassifier for the Iris dataset.\"\"\"\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport tensorflow as tf\nimport sys\nimport iris_data\nfrom aup import BasicConfig, print_result\n\n#\n# ChangeLog:\n# + remove argparse and set default batch_size, and train_step\n# + add aup config and change __main__\n# + change main() to get conf, which contains the number of nodes per layer\n# + change main() to  return eval_result[\"accuracy\"].\n# + add shebang line and execute permission\n# + change train_steps to be consistent with hyperband\n\nbatch_size = 100\n\n\nconfig = tf.ConfigProto()\nconfig.gpu_options.allow_growth=True\nsess = tf.Session(config=config)\n\n\ndef main(conf):\n    # Fetch the data\n    (train_x, train_y), (test_x, test_y) = iris_data.load_data()\n\n    if \"n_iterations\" in config:\n        train_steps = 100 * config.n_iterations\n    else:\n        train_steps = 1000\n    # Feature columns describe how to use the input.\n    my_feature_columns = []\n    for key in train_x.keys():\n        my_feature_columns.append(tf.feature_column.numeric_column(key=key))\n\n    # Build 2 hidden layer DNN with 10, 10 units respectively.\n    classifier = tf.estimator.DNNClassifier(\n        feature_columns=my_feature_columns,\n        # Two hidden layers of 10 nodes each.\n        hidden_units=[conf[\"layer1\"], conf[\"layer2\"]],\n        # The model must choose between 3 classes.\n        n_classes=3)\n\n    # Train the Model.\n    classifier.train(input_fn=lambda:iris_data.train_input_fn(train_x, train_y,batch_size), steps=train_steps)\n\n    # Evaluate the model.\n    eval_result = classifier.evaluate(input_fn=lambda:iris_data.eval_input_fn(test_x, test_y,batch_size))\n\n    print('\\nTest set accuracy: {accuracy:0.3f}\\n'.format(**eval_result))\n\n    # Generate predictions from the model\n    expected = ['Setosa', 'Versicolor', 'Virginica']\n    predict_x = {\n        'SepalLength': [5.1, 5.9, 6.9],\n        'SepalWidth': [3.3, 3.0, 3.1],\n        'PetalLength': [1.7, 4.2, 5.4],\n        'PetalWidth': [0.5, 1.5, 2.1],\n    }\n\n    predictions = classifier.predict(input_fn=lambda:iris_data.eval_input_fn(predict_x, labels=None, batch_size=batch_size))\n\n    template = ('\\nPrediction is \"{}\" ({:.1f}%), expected \"{}\"')\n\n    for pred_dict, expec in zip(predictions, expected):\n        class_id = pred_dict['class_ids'][0]\n        probability = pred_dict['probabilities'][class_id]\n\n        print(template.format(iris_data.SPECIES[class_id],\n                              100 * probability, expec))\n    return eval_result[\"accuracy\"]\n\n\nif __name__ == '__main__':\n    if len(sys.argv) != 2:\n        print(\"config file required\")\n        exit(1)\n    config = BasicConfig().load(sys.argv[1])\n    val = main(config)\n    print_result(val)\n"
  },
  {
    "path": "Examples/tf_iris_diff_opt/premade_estimator_hyper.py",
    "content": "# Download from https://raw.githubusercontent.com/tensorflow/models/master/samples/core/get_started/premade_estimator.py\n# Date: Jun 11, 2018\n# Modified to work with aup.convert\n########################################################################################################################\n#  Copyright 2016 The TensorFlow Authors. All Rights Reserved.\n#\n#  Licensed under the Apache License, Version 2.0 (the \"License\");\n#  you may not use this file except in compliance with the License.\n#  You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n#  Unless required by applicable law or agreed to in writing, software\n#  distributed under the License is distributed on an \"AS IS\" BASIS,\n#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#  See the License for the specific language governing permissions and\n#  limitations under the License.\n\"\"\"An Example of a DNNClassifier for the Iris dataset.\"\"\"\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport argparse\nimport tensorflow as tf\n\nimport iris_data\n\n\n#parser = argparse.ArgumentParser()\n#parser.add_argument('--batch_size', default=100, type=int, help='batch size')\n#parser.add_argument('--train_steps', default=1000, type=int,\n#                    help='number of training steps')\n\nbatch_size=100\ntrain_steps=1000\n\n                    \ndef main(layer1, layer2):\n    #args = parser.parse_args(argv[1:])\n\n    # Fetch the data\n    (train_x, train_y), (test_x, test_y) = iris_data.load_data()\n\n    # Feature columns describe how to use the input.\n    my_feature_columns = []\n    for key in train_x.keys():\n        my_feature_columns.append(tf.feature_column.numeric_column(key=key))\n\n    # Build 2 hidden layer DNN with 10, 10 units respectively.\n    classifier = tf.estimator.DNNClassifier(\n        feature_columns=my_feature_columns,\n        # Two hidden layers of 10 nodes each.\n        hidden_units=[layer1, layer2],\n        # The model must choose between 3 classes.\n        n_classes=3)\n\n    # Train the Model.\n    classifier.train(\n        input_fn=lambda:iris_data.train_input_fn(train_x, train_y,\n                                                 batch_size),\n        steps=train_steps)\n\n    # Evaluate the model.\n    eval_result = classifier.evaluate(\n        input_fn=lambda:iris_data.eval_input_fn(test_x, test_y,\n                                                batch_size))\n\n    print('\\nTest set accuracy: {accuracy:0.3f}\\n'.format(**eval_result))\n\n    # Generate predictions from the model\n    expected = ['Setosa', 'Versicolor', 'Virginica']\n    predict_x = {\n        'SepalLength': [5.1, 5.9, 6.9],\n        'SepalWidth': [3.3, 3.0, 3.1],\n        'PetalLength': [1.7, 4.2, 5.4],\n        'PetalWidth': [0.5, 1.5, 2.1],\n    }\n\n    predictions = classifier.predict(\n        input_fn=lambda:iris_data.eval_input_fn(predict_x,\n                                                labels=None,\n                                                batch_size=batch_size))\n\n    template = ('\\nPrediction is \"{}\" ({:.1f}%), expected \"{}\"')\n\n    for pred_dict, expec in zip(predictions, expected):\n        class_id = pred_dict['class_ids'][0]\n        probability = pred_dict['probabilities'][class_id]\n\n        print(template.format(iris_data.SPECIES[class_id],\n                              100 * probability, expec))\n    return probability\n\n#if __name__ == '__main__':\n#    tf.logging.set_verbosity(tf.logging.INFO)\n#    tf.app.run(main)\n"
  },
  {
    "path": "Examples/tf_iris_diff_opt/premade_estimator_wrapper.py",
    "content": "#!/usr/bin/env python\n# Download from https://raw.githubusercontent.com/tensorflow/models/master/samples/core/get_started/premade_estimator.py\n# Date: Jun 11, 2018\n# This is created by aup.convert\n########################################################################################################################\n#  Copyright 2016 The TensorFlow Authors. All Rights Reserved.\n#\n#  Licensed under the Apache License, Version 2.0 (the \"License\");\n#  you may not use this file except in compliance with the License.\n#  You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n#  Unless required by applicable law or agreed to in writing, software\n#  distributed under the License is distributed on an \"AS IS\" BASIS,\n#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#  See the License for the specific language governing permissions and\n#  limitations under the License.\n\"\"\"An Example of a DNNClassifier for the Iris dataset.\"\"\"\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport argparse\nimport tensorflow as tf\n\nimport iris_data\n\n\n#parser = argparse.ArgumentParser()\n#parser.add_argument('--batch_size', default=100, type=int, help='batch size')\n#parser.add_argument('--train_steps', default=1000, type=int,\n#                    help='number of training steps')\n\nbatch_size=100\ntrain_steps=1000\n\n                    \ndef main(layer1, layer2):\n    #args = parser.parse_args(argv[1:])\n\n    # Fetch the data\n    (train_x, train_y), (test_x, test_y) = iris_data.load_data()\n\n    # Feature columns describe how to use the input.\n    my_feature_columns = []\n    for key in train_x.keys():\n        my_feature_columns.append(tf.feature_column.numeric_column(key=key))\n\n    # Build 2 hidden layer DNN with 10, 10 units respectively.\n    classifier = tf.estimator.DNNClassifier(\n        feature_columns=my_feature_columns,\n        # Two hidden layers of 10 nodes each.\n        hidden_units=[layer1, layer2],\n        # The model must choose between 3 classes.\n        n_classes=3)\n\n    # Train the Model.\n    classifier.train(\n        input_fn=lambda:iris_data.train_input_fn(train_x, train_y,\n                                                 batch_size),\n        steps=train_steps)\n\n    # Evaluate the model.\n    eval_result = classifier.evaluate(\n        input_fn=lambda:iris_data.eval_input_fn(test_x, test_y,\n                                                batch_size))\n\n    print('\\nTest set accuracy: {accuracy:0.3f}\\n'.format(**eval_result))\n\n    # Generate predictions from the model\n    expected = ['Setosa', 'Versicolor', 'Virginica']\n    predict_x = {\n        'SepalLength': [5.1, 5.9, 6.9],\n        'SepalWidth': [3.3, 3.0, 3.1],\n        'PetalLength': [1.7, 4.2, 5.4],\n        'PetalWidth': [0.5, 1.5, 2.1],\n    }\n\n    predictions = classifier.predict(\n        input_fn=lambda:iris_data.eval_input_fn(predict_x,\n                                                labels=None,\n                                                batch_size=batch_size))\n\n    template = ('\\nPrediction is \"{}\" ({:.1f}%), expected \"{}\"')\n\n    for pred_dict, expec in zip(predictions, expected):\n        class_id = pred_dict['class_ids'][0]\n        probability = pred_dict['probabilities'][class_id]\n\n        print(template.format(iris_data.SPECIES[class_id],\n                              100 * probability, expec))\n    return probability\n\n#if __name__ == '__main__':\n#    tf.logging.set_verbosity(tf.logging.INFO)\n#    tf.app.run(main)\n\ndef aup_wrapper(config):\n    res = main(layer1=config['layer1'],layer2=config['layer2'])\n    print_result(res)\n\nif __name__ == \"__main__\":\n    import sys\n    from aup import BasicConfig, print_result\n    if len(sys.argv) != 2:\n        print(\"config file required\")\n        exit(1)\n    config = BasicConfig().load(sys.argv[1])\n    aup_wrapper(config)\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    <program>  Copyright (C) <year>  <name of author>\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<https://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<https://www.gnu.org/licenses/why-not-lgpl.html>."
  },
  {
    "path": "MANIFEST.in",
    "content": "include LICENSE\ninclude README.md\nrecursive-include src/aup/dashboard/frontend/febuild/auptimizer-dashboard/ *"
  },
  {
    "path": "R-src/README.md",
    "content": "# Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\n# R Package for Auptimizer\n\n## Installation\n\n*IMPORTANT:*  Auptimizer is well tested on Unix or similar OS.  Windows users may have to make some changes to run Aptimizer.\n\n1. [Install Python Auptimizer](../README.md)\n2. Install Auptimizer for R, (run R from `R-src` folder):\n\n    ```R\n    install.packages(\"devtools\")\n    devtools::install(\"Rpackage\")\n    ```\n\n## Usage\n\nThe workflow for Auptimizer is the same as the Python version.  The difference is in how to change existing R code to use Auptimizer.\n\n1. Setup Python Auptimizer environment using `python -m aup.setup`\n\n2. Change your R script:\n\n   a. Make all hyperparameters global variables.\n\n   b. Add `#!/usr/bin/env Rscript` as the first line.\n\n   c. Add `source(\"auptimizer\")`.\n\n   d. Add `get_config()`, which will automatically update the hyperparameters (set globally in step 2a).\n\n   e. Add `print_result(score)` to return the target score you want to optimize for your script.\n\n   f. Change file permission using `chmod u+x <your_R_script>`.\n\n   g. Add them into an Auptimizer experiment using `python -m aup.init`.\n\n3. Run Auptimizer using `python -m aup experiment.json`.\n\n## Examples\n\nSee examples in [example].\n\n+ `exp_ridge.R` for synthetic Ridge regression. Run as `python -m aup ridge.json`.\n+ `exp_rosenbrock.R` for analytic Rosenbrock function. Run as `python -m aup rosenbrock.json`.\n"
  },
  {
    "path": "R-src/Rpackage/DESCRIPTION",
    "content": "Package: auptimizer\nTitle: R Helper Functions for Auptimizer\nVersion: 0.0.2\nAuthors@R: c(\n    person(given = \"Jiayi\",\n           family = \"Liu\",\n           role = c(\"aut\",\"cre\"),\n           email = \"Jason.Liu@lge.com\",\n           comment = c(ORCID = \"0000-0001-6007-5256\")),\n    person(given = \"Sauptik\",\n           family = \"Dhar\",\n           role = c(\"aut\"),\n           email = \"Sauptik.Dhar@lge.com\"),\n    person(given = \"\",\n           family = \"LG Electronics Inc.\",\n           role = c(\"cph\", \"asn\"),\n           email = \"auptimizer@lge.com\")\n    )\nDescription: Enable R users to use Auptimizer\n    <https://github.com/LGE-ARC-AdvancedAI/auptimizer> for hyperparameter \n    optimization (HPO).  Auptimizer helps data scientists to easily apply HPO \n    in their work and to speed up model training jobs by executing jobs \n    asynchronously when computing resources are available.\nLicense: GPL (>=3)\nEncoding: UTF-8\nLazyData: true\nImports:\n    rjson\nURL: https://github.com/LGE-ARC-AdvancedAI/auptimizer\nBugReports: https://github.com/LGE-ARC-AdvancedAI/auptimizer/issues\nRoxygenNote: 6.1.1\nSuggests: \n    testthat,\n    knitr,\n    rmarkdown\nVignetteBuilder: knitr\n"
  },
  {
    "path": "R-src/Rpackage/NAMESPACE",
    "content": "# Generated by roxygen2: do not edit by hand\n\nexport(get_config)\nexport(print_result)\n"
  },
  {
    "path": "R-src/Rpackage/R/auptimizer.R",
    "content": "# Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\n#' Get hyperparameter configuration\n#'\n#' This function loads a configuration file in JSON format. It assumes that the first argument of the running script is\n#' the configuraiton file.  It will parse and inject the hyperparameter variables into the global environment and return\n#' them.\n#' \n#' \n#' Assuming the R script is used as follows: `./test.R config.json`, the script should look like below:\n#' \n#' \\preformatted{\n#' #!Rscript\n#' \n#' # hyperparameter definitions\n#' get_config() \n#' # use hyperparamter to train model, \n#' # after training, return optimization target (e.g. validation accuracy) as score\n#' print_result(score)\n#' }\n#' \n#' \n#' \n#' @param filename optional JSON filename containing hyperparameters as dict, default to first argument in command line.\n#' @param env optional environment containing hyperparameters, default to global env.\n#' @return a matrix of hyperparameters as name-value pairs\n#' @export\nget_config <- function(filename, env) {\n    if (missing(filename)){\n        args <- commandArgs(TRUE)\n        if (length(args) < 1) {\n            warning(\"R script requires an input configuration file for Auptimzier experiment.\")\n            return()\n        } else if (length(args) > 1) {\n            warning(\"R script takes the first input as configuration file.\")\n        }\n        filename = args[1]\n    }\n    \n    data <- rjson::fromJSON(file=filename)\n    if (missing(env)){\n        env = globalenv()\n    }\n    for (name in names(data)) {\n        if (length(data[name]) > 1){\n            warning(\"Auptimizer only supports hyperparameter as a single value, not a list. Only first value is used\")\n        }\n        # set to global variables\n        assign(name, data[name][[1]], envir = env)\n    }\n    return(data)\n}\n\n\n#' Report result to Auptimizer\n#'\n#' This function reports the results to Auptimizer.  A numerical score will be converted to string automatically.  If \n#' you want to report multiple scores, use ',' to seperate them and only the first value will be used by Auptimzier for\n#' Optimization.\n#' \n#' \n#' Assume the R script is used as follows `./test.R config.json`, the script should look like below:\n#' \n#' \\preformatted{\n#' #!Rscript\n#' \n#' # hyperparameter definitions\n#' get_config() \n#' # use hyperparamter to train model,\n#' # after training, return optimization target (e.g. validation accuracy) as score\n#' print_result(score)\n#' }\n#'\n#' @param score Score to be reported back to Auptimizer\n#' @export\nprint_result <- function(score) {\n    message(paste(\"\\n#Auptimizer:\", score))\n}"
  },
  {
    "path": "R-src/Rpackage/man/get_config.Rd",
    "content": "% Generated by roxygen2: do not edit by hand\n% Please edit documentation in R/auptimizer.R\n\\name{get_config}\n\\alias{get_config}\n\\title{Get hyperparameter configuration}\n\\usage{\nget_config(filename, env)\n}\n\\arguments{\n\\item{filename}{optional JSON filename contains hyperparameters as dict, default to first argument in command line.}\n\n\\item{env}{optional environment contains hyperparameters, de fault to global env.}\n}\n\\value{\nA matrix of the infile\n}\n\\description{\nThis function loads a configuration file in JSON format. It assumes that the first argument of the running script is\nthe configuraiton file.  It will parse and inject the hyperparameter variables into the global environment and return\nthem.\n}\n\\details{\nAssume an R script is used as `./test.R config.json`, the script should look like below:\n\n\\preformatted{\n#!Rscript\n\n# hyperparameter definitions\nget_config() \n# use hyperparamter to train model, \n# after training, return optimization target (e.g. validation accuracy) as score\nprint_result(score)\n}\n}\n"
  },
  {
    "path": "R-src/Rpackage/man/print_result.Rd",
    "content": "% Generated by roxygen2: do not edit by hand\n% Please edit documentation in R/auptimizer.R\n\\name{print_result}\n\\alias{print_result}\n\\title{Report result to Auptimizer}\n\\usage{\nprint_result(score)\n}\n\\arguments{\n\\item{score}{Score to be reported back to Auptimizer}\n}\n\\description{\nThis function reports the results to Auptimizer.  A numerical score will be converted to string automatically.  If \nyou want to report multiple scores, use ',' to seperate them and only the first value will be used by Auptimzier for\nOptimization.\n}\n\\details{\nAssume an R script is used as `./test.R config.json`, the script should look like below:\n\n\\preformatted{\n#!Rscript\n\n# hyperparameter definitions\nget_config() \n# use hyperparamter to train model,\n# after training, return optimization target (e.g. validation accuracy) as score\nprint_result(score)\n}\n}\n"
  },
  {
    "path": "R-src/Rpackage/tests/testthat/test_IO.R",
    "content": "# Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\nlibrary(auptimizer)\n\n\ntest_that(\"auptimizer output format\", {\n  expect_message(print_result(1), '\\n#Auptimizer: 1')\n})\n\n\ntest_that(\"auptimizer input format\", {\n  a <- 2\n  b <- TRUE\n  expect_equal(a, 2)\n  get_config(\"test_io.json\", environment())\n  expect_equal(b, FALSE)\n  expect_equal(a, 1)\n})"
  },
  {
    "path": "R-src/Rpackage/tests/testthat/test_io.json",
    "content": "{\"a\":1,\"b\":false}"
  },
  {
    "path": "R-src/Rpackage/tests/testthat.R",
    "content": "library(testthat)\nlibrary(auptimizer)\n\ntest_check(\"auptimizer\")\n"
  },
  {
    "path": "R-src/Rpackage/vignettes/.gitignore",
    "content": "*.html\n*.R\n"
  },
  {
    "path": "R-src/Rpackage/vignettes/auptimizer.Rmd",
    "content": "<!--  Copyright (c) 2018 LG Electronics Inc.\n SPDX-License-Identifier: GPL-3.0-or-later -->\n---\ntitle: \"Auptimizer\"\noutput: rmarkdown::html_vignette\nvignette: >\n  %\\VignetteIndexEntry{auptimizer}\n  %\\VignetteEngine{knitr::rmarkdown}\n  %\\VignetteEncoding{UTF-8}\n---\n\n\n# R Package for Auptimizer\n\n## Installation\n\n*IMPORTANT:*  Auptimizer is well tested on Unix or similar OS.  Windows users may have to make some changes to run Aptimizer.\n\n1. [Install Python Auptimizer](https://github.com/LGE-ARC-AdvancedAI/auptimizer)\n2. Install R Auptimizer\n\n    ```R\n    install.packages(\"auptimizer\")\n    ```\n\n## Usage\n\nThe workflow for Auptimizer is the same as the Python version.  The difference is in how to change existing R code to use Auptimizer.\n\n1. Setup Python Auptimizer environment using `python -m aup.setup`\n2. Change your R script:\n   a. Make all hyperparameters global variables.\n   b. Add `#!/usr/bin/env Rscript` as the first line.\n   c. Add `library(\"auptimizer\")`.\n   d. Add `get_config()`, which will automatically update the hyperparameters (set globally in step 2a).\n   e. Add `print_result(score)` to return the target score you want to optimize for your script.\n   f. Change file permission using `chmod u+x <your_R_script>`.\n   g. Add them into an Auptimizer experiment using `python -m aup.init`.\n3. Run Auptimizer using `python -m aup experiment.json`.\n\n## Examples\n\nThere are more examples in the `R-src/example` folder on the [Auptimizer Github repo](https://github.com/LGE-ARC-AdvancedAI/auptimizer/).\n\n+ `exp_ridge.R` for synthetic Ridge regression. Run as `python -m aup ridge.json`.\n+ `exp_rosenbrock.R` for analytic Rosenbrock function. Run as `python -m aup rosenbrock.json`.\n\n"
  },
  {
    "path": "R-src/examples/exp_ridge.R",
    "content": "#!/usr/bin/env Rscript\n# Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n#\n# Example code to use Auptimzier.\nlibrary(\"auptimizer\")\nsource(\"ridgeRegression.R\")\n\n\n# Synthetic Data\nNt = 90\nD = 100\nw<-rnorm(D)\ntrainX<-matrix(rnorm(Nt*D,0,1),nrow=Nt,ncol=D)\ntrainy<-trainX%*%w + rnorm(Nt,0,1) # Add Gaussian noise\n\nNv = 40\nvalX<-matrix(rnorm(Nv*D,0,1),nrow=Nv,ncol=D)\nvaly<-valX%*%w + rnorm(Nv,0,1) # Add Gaussian noise\n\n\n# Hyperparameters\nlambda = 1.0\n\nhp <- get_config()\nscore <- ridgeRegression(trainX,trainy,valX,valy,lambda)\nprint_result(score)\n"
  },
  {
    "path": "R-src/examples/exp_rosenbrock.R",
    "content": "#!/usr/bin/env Rscript\n# Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n#\n# Example code to use Auptimzier.\nlibrary(\"auptimizer\")\nsource(\"rosenbrock.R\")\n\n# Hyperparameters\nx <- 10\ny <- 20\n\nget_config()\nscore <- rosen(c(x, y))\nprint_result(score)\n"
  },
  {
    "path": "R-src/examples/ridge.json",
    "content": "{\n  \"script\": \"exp_ridge.R\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 1,\n  \"target\": \"min\",\n  \"workingdir\": \"./\",\n  \"proposer\": \"random\",\n  \"n_samples\": 10,\n  \"random_seed\": 0,\n  \"parameter_config\": [\n    {\n      \"name\": \"lambda\",\n      \"range\": [\n        0.001,\n        10\n      ],\n      \"type\": \"float\"\n    }\n  ]\n}"
  },
  {
    "path": "R-src/examples/ridgeRegression.R",
    "content": "# Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\nridgeRegression<-function(trainX,trainy,valX,valy,lambda){\n  #######################################################\n  # A Typical Ridge Regression Problem\n  #######################################################\n  \n  # N =  No. of Training samples, D = Dimension of Problem\n  N<-nrow(trainX)\n  D <-ncol(trainX)\n  I <- diag(D)\n  \n  \n  # Closed form solution for Ridge regression:  min (1/2N)*sum_i (w'*x_i - y_i)^2 + (lambda/2)*||w||^2\n  w <- solve((t(trainX)%*%trainX)/N + lambda*I) %*% ((t(trainX)%*%trainy)/N)\n  \n  \n  # Predict on the validation samples and return the error.\n  valErr<-MSE(valX,valy,w)\n  return(valErr)\n}\n\nMSE<-function(X,y,w){\n  #####################################################\n  # This is the mean squared error\n  #####################################################\n  N <- nrow(X)\n  return((0.5*N)*norm(X%*%w-y))\n}\n\n"
  },
  {
    "path": "R-src/examples/rosenbrock.R",
    "content": "rosen <- function(xx)\n{\n  ##########################################################################\n  #\n  # ROSENBROCK FUNCTION\n  #\n  # Authors: Sonja Surjanovic, Simon Fraser University\n  #          Derek Bingham, Simon Fraser University\n  # Questions/Comments: Please email Derek Bingham at dbingham@stat.sfu.ca.\n  #\n  # Copyright 2013. Derek Bingham, Simon Fraser University.\n  #\n  # THERE IS NO WARRANTY, EXPRESS OR IMPLIED. WE DO NOT ASSUME ANY LIABILITY\n  # FOR THE USE OF THIS SOFTWARE.  If software is modified to produce\n  # derivative works, such modified software should be clearly marked.\n  # Additionally, this program is free software; you can redistribute it \n  # and/or modify it under the terms of the GNU General Public License as \n  # published by the Free Software Foundation; version 2.0 of the License. \n  # Accordingly, this program is distributed in the hope that it will be \n  # useful, but WITHOUT ANY WARRANTY; without even the implied warranty \n  # of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU \n  # General Public License for more details.\n  #\n  # For function details and reference information, see:\n  # http://www.sfu.ca/~ssurjano/\n  #\n  ##########################################################################\n  #\n  # INPUT:\n  #\n  # xx = c(x1, x2, ..., xd)\n  #\n  ##########################################################################\n  \n  d <- length(xx)\n  xi <- xx[1:(d-1)]\n  xnext <- xx[2:d]\n\t\n  sum <- sum(100*(xnext-xi^2)^2 + (xi-1)^2)\n\t\n  y <- sum\n  return(y)\n}\n\n"
  },
  {
    "path": "R-src/examples/rosenbrock.json",
    "content": "{\n  \"script\": \"exp_rosenbrock.R\",\n  \"resource\": \"cpu\",\n  \"n_parallel\": 1,\n  \"target\": \"min\",\n  \"workingdir\": \"./\",\n  \"proposer\": \"random\",\n  \"n_samples\": 10,\n  \"random_seed\": 0,\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        0,\n        10\n      ],\n      \"type\": \"float\"\n    },\n    {\n      \"name\": \"y\",\n      \"range\": [\n        0,\n        10\n      ],\n      \"type\": \"float\"\n    }\n  ]\n}"
  },
  {
    "path": "README.md",
    "content": "# ![Auptimizer Logo](AuptimizerBlackLong.png)\n\n[![Documentation](https://img.shields.io/badge/doc-reference-blue.svg)](https://LGE-ARC-AdvancedAI.github.io/auptimizer)\n[![GPL 3.0 License](https://img.shields.io/badge/License-GPL%203.0-blue.svg)](https://opensource.org/licenses/GPL-3.0)\n[![Build Status](https://travis-ci.com/LGE-ARC-AdvancedAI/auptimizer.svg?branch=master)](https://travis-ci.com/LGE-ARC-AdvancedAI/auptimizer)\n[![coverage report](https://codecov.io/gh/LGE-ARC-AdvancedAI/auptimizer/branch/master/graph/badge.svg)](https://codecov.io/gh/LGE-ARC-AdvancedAI/auptimizer)\n\n**Auptimizer** is an optimization tool for Machine Learning (ML) that automates many of the tedious parts of the model building and deployment process.\nCurrently, **Auptimizer** helps with:\n\n+ **Getting the best models in minimum time** - Generate optimal models and achieve better performance by employing\nstate-of-the-art hyperparameter optimization (HPO) and model compression techniques. Auptimizer will run and record sophisticated HPO and model compression experiments on compute resources of your choice with effortless consistency and reproducibility.\n\n+ **Making your models edge-ready** - Get model-device compatibility and enhanced on-device performance by converting models into the industry-standard ONNX and TensorFlow Lite formats. Auptimizer-Converter provides validated conversion techniques to ensure worry-free format transformations.\n\n+ **Selecting the most suitable model for your edge deployment effortlessly** - Compare how different models will perform under specific compute and memory constraints on a CPU-based edge device. Auptimizer-Profiler will help you identify the most efficient models without the hustle of going through multiple physical deployment cycles.\n\nBest of all, **Auptimizer** offers a consistent interface that allows users to switch between different HPO and compression algorithms, conversion frameworks, and computing resources with minimal changes to the existing code.\n\n## What's New in Auptimizer v2.0\nAuptimizer v2.0 introduces two core capabilities - Dashboard and Compressor!\n\n### Dashboard\n\n[**Auptimizer Dashboard**](https://lge-arc-advancedai.github.io/auptimizer/dashboard.html) is a powerful analytics tool that complements Auptimizer's core hyperparameter optimization (HPO) and model compression capabilities. It provides insightful visualizations to help you track experiment progress, analyze and contrast jobs, experiments, and optimization approaches. Additionally, it can be used to control an experiment or even set up a new Auptimizer environment.\n\n### Compressor\n[**Compressor**](https://lge-arc-advancedai.github.io/auptimizer/compression_main.html) is a model compression tool that helps reduce memory complexity and inference time of neural networks. It is particularly useful for adapting ML models for deployment on resource-constrained edge devices.\n\nSimilar to Auptimizer-Hyperparameter Optimization (HPO), Compressor aims to provide a unified interface to the existing state-of-the-art toolkits. Currently, Compressor leverages [NNI (version 2.0)](https://nni.readthedocs.io/en/latest/model_compression.html) model compression modules. NNI is an open-source toolkit that supports two types of compression, pruning and quantization, for TensorFlow, and PyTorch models. In the future, we will be integrating other off-the-shelf toolkits to expand the selection of model compression approaches.\n\n## Capabilities\n### Hyperparameter Optimization\n\nAuptimizer automates tedious experimentation by performing and recording hyperparameter optimization experiments. Auptimizer provides a single seamless access point to top-notch HPO algorithms, including Bayesian optimization and multi-armed bandit. You can even integrate your own proprietary solution. Moreover, with Auptimizer, you can make the best use of your compute-resources. Whether you are using a couple of GPUs or AWS, Auptimizer will help you orchestrate compute resources for faster hyperparameter tuning. \n\nThe table below shows a full list of currently supported techniques and resources for hyperparameter optimization.\n\n| Supported HPO Algorithms      | Supported Infrastructure |\n| ----------- | ----------- |\n| Random<br>Grid<br>[Hyperband](https://github.com/zygmuntz/hyperband)<br>[Hyperopt](https://github.com/hyperopt/hyperopt)<br>[Spearmint](https://github.com/JasperSnoek/spearmint)<br>[BOHB](https://github.com/automl/HpBandSter)<br>[EAS (experimental)](https://github.com/han-cai/EAS)<br>Passive      | Multiple CPUs<br>Multiple GPUs<br>Multiple Machines (SSH)<br>AWS EC2 instances |\n\n\n### Profiler\n[**Profiler**](https://lge-arc-advancedai.github.io/auptimizer/profiler.html) is a simulator for profiling performance of machine learning model scripts. Given compute- and memory resource constraints for a CPU-based Edge device, Profiler can provide estimates of compute and memory usage for model scripts on the device. These estimations can be used to choose the best performing models or, in certain cases, to predict how much compute and memory models will use on the target device. \n\nBecause Profiler mimics the target device environment on the user's development machine, the user can gain insights into the performance and resource needs of a model script without having to deploy it on the target device. Profiler helps accelerate the model selection cycle and simplifies finding model-device fit. Please see [Profiler](https://github.com/LGE-ARC-AdvancedAI/auptimizer/tree/master/src/aup/profiler) for usages.\n\n### Converter\n[**Converter**](https://lge-arc-advancedai.github.io/auptimizer/dlconvert.html) is a format conversion tool for machine learning models. It encapsulates best practices of individual machine learning model conversions under a single API. Converter makes ML models suitable for edge (on-device) deployments by transforming them into the industry-standard ONNX and TensorFlow Lite formats and reducing model size through quantization.\n\n## Install\n\n**Auptimizer** currently is well tested on Linux systems, it may require some tweaks for Windows users.\n\n```\npip install auptimizer\n```\n\n**Note** Dependencies are not included. Using `pip install`\n[requirements.txt](https://github.com/LGE-ARC-AdvancedAI/auptimizer/blob/master/requirements.txt) will install\nnecessary libraries for all functionalities.\n\nUsage for the UI dashboard:\n```\ndashboard --path <Auptimizer database path> --port <frontend port>\n```\n\n## Documentation\n\nSee more in [documentation](https://lge-arc-advancedai.github.io/auptimizer/) \n\n## Example\n\n```\ncd Examples/demo\n# Setup environment (Interactively create the environment file based on user input)\npython -m aup.setup\n# Setup experiment\npython -m aup.init\n# Create training script - auto.py\npython -m aup.convert origin.py experiment.json demo_func\n# Run aup for this experiment\npython -m aup experiment.json\n```\n\nEach job's hyperparameter configuration is saved separately under `jobs/*.json` and is also recorded in the SQLite file `.aup/sqlite3.db`.\n\n![gif demo](docs/images/demo.gif)\n\nMore examples are under [Examples](https://github.com/LGE-ARC-AdvancedAI/auptimizer/tree/master/Examples).\n\n## License\n\n[GPL 3.0 License](./LICENSE)\n\n\n## Cite\n\nIf you have used this software for research, please cite the following paper (accepted at IEEE Big Data 2019):\n\n```\n@misc{liu2019auptimizer,\n    title={Auptimizer -- an Extensible, Open-Source Framework for Hyperparameter Tuning},\n    author={Jiayi Liu and Samarth Tripathi and Unmesh Kurup and Mohak Shah},\n    year={2019},\n    eprint={1911.02522},\n    archivePrefix={arXiv},\n    primaryClass={cs.LG}\n}\n```\n"
  },
  {
    "path": "docs/Database/schema.dot",
    "content": "/*\n * Graphviz of '<_io.TextIOWrapper name='<stdin>' mode='r' encoding='UTF-8'>', created 2018-08-14 18:52:17.684968\n * Generated from https://github.com/rm-hull/sql_graphviz\n */\ndigraph g { graph [ rankdir = \"LR\" ];\n\n  \"user\" [\n    shape=none\n    label=<\n      <table border=\"0\" cellspacing=\"0\" cellborder=\"1\">\n        <tr><td bgcolor=\"lightblue2\"><font face=\"Times-bold\" point-size=\"20\">user</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"uid\"><font face=\"Times-bold\">uid</font>  <font color=\"#535353\">INTEGER PRIMARY KEY NOT NULL</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"name\"><font face=\"Times-bold\">name</font>  <font color=\"#535353\">TEXT UNIQUE</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"permission\"><font face=\"Times-bold\">permission</font>  <font color=\"#535353\">BLOB</font></td></tr>\n      </table>\n    >];\n\n  \"resource\" [\n    shape=none\n    label=<\n      <table border=\"0\" cellspacing=\"0\" cellborder=\"1\">\n        <tr><td bgcolor=\"lightblue2\"><font face=\"Times-bold\" point-size=\"20\">resource</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"rid\"><font face=\"Times-bold\">rid</font>  <font color=\"#535353\">INTEGER PRIMARY KEY NOT NULL</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"name\"><font face=\"Times-bold\">name</font>  <font color=\"#535353\">TEXT</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"type\"><font face=\"Times-bold\">type</font>  <font color=\"#535353\">TEXT</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"status\"><font face=\"Times-bold\">status</font>  <font color=\"#535353\">TEXT</font></td></tr>\n      </table>\n    >];\n\n  \"experiment\" [\n    shape=none\n    label=<\n      <table border=\"0\" cellspacing=\"0\" cellborder=\"1\">\n        <tr><td bgcolor=\"lightblue2\"><font face=\"Times-bold\" point-size=\"20\">experiment</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"eid\"><font face=\"Times-bold\">eid</font>  <font color=\"#535353\">INTEGER PRIMARY KEY NOT NULL</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"uid\"><font face=\"Times-bold\">uid</font>  <font color=\"#535353\">INTEGER</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"start_time\"><font face=\"Times-bold\">start_time</font>  <font color=\"#535353\">INTEGER</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"end_time\"><font face=\"Times-bold\">end_time</font>  <font color=\"#535353\">INTEGER</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"exp_config\"><font face=\"Times-bold\">exp_config</font>  <font color=\"#535353\">BLOB</font></td></tr>\n      </table>\n    >];\n\n  \"job\" [\n    shape=none\n    label=<\n      <table border=\"0\" cellspacing=\"0\" cellborder=\"1\">\n        <tr><td bgcolor=\"lightblue2\"><font face=\"Times-bold\" point-size=\"20\">job</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"jid\"><font face=\"Times-bold\">jid</font>  <font color=\"#535353\">INTEGER PRIMARY KEY NOT NULL</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"score\"><font face=\"Times-bold\">score</font>  <font color=\"#535353\">REAL</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"eid\"><font face=\"Times-bold\">eid</font>  <font color=\"#535353\">INTEGER</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"rid\"><font face=\"Times-bold\">rid</font>  <font color=\"#535353\">INTEGER</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"start_time\"><font face=\"Times-bold\">start_time</font>  <font color=\"#535353\">INTEGER</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"end_time\"><font face=\"Times-bold\">end_time</font>  <font color=\"#535353\">INTEGER</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"job_config\"><font face=\"Times-bold\">job_config</font>  <font color=\"#535353\">BLOB</font></td></tr>\n      </table>\n    >];\n\n  \"job_attempt\" [\n    shape=none\n    label=<\n      <table border=\"0\" cellspacing=\"0\" cellborder=\"1\">\n        <tr><td bgcolor=\"lightblue2\"><font face=\"Times-bold\" point-size=\"20\">job_attempt</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"jaid\"><font face=\"Times-bold\">jaid</font>  <font color=\"#535353\">INTEGER PRIMARY KEY NOT NULL</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"jid\"><font face=\"Times-bold\">jid</font>  <font color=\"#535353\">INTEGER</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"num\"><font face=\"Times-bold\">num</font>  <font color=\"#535353\">INTEGER</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"rid\"><font face=\"Times-bold\">rid</font>  <font color=\"#535353\">INTEGER</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"start_time\"><font face=\"Times-bold\">start_time</font>  <font color=\"#535353\">INTEGER</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"end_time\"><font face=\"Times-bold\">end_time</font>  <font color=\"#535353\">INTEGER</font></td></tr>\n      </table>\n    >];\n\n  \"intermediate_result\" [\n    shape=none\n    label=<\n      <table border=\"0\" cellspacing=\"0\" cellborder=\"1\">\n        <tr><td bgcolor=\"lightblue2\"><font face=\"Times-bold\" point-size=\"20\">intermediate_result</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"irid\"><font face=\"Times-bold\">irid</font>  <font color=\"#535353\">INTEGER PRIMARY KEY NOT NULL</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"num\"><font face=\"Times-bold\">num</font>  <font color=\"#535353\">INTEGER</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"score\"><font face=\"Times-bold\">score</font>  <font color=\"#535353\">REAL</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"jid\"><font face=\"Times-bold\">jid</font>  <font color=\"#535353\">INTEGER</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"receive_time\"><font face=\"Times-bold\">receive_time</font>  <font color=\"#535353\">INTEGER</font></td></tr>\n      </table>\n    >];\n\n  \"multiple_result\" [\n    shape=none\n    label=<\n      <table border=\"0\" cellspacing=\"0\" cellborder=\"1\">\n        <tr><td bgcolor=\"lightblue2\"><font face=\"Times-bold\" point-size=\"20\">multiple_result</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"mrid\"><font face=\"Times-bold\">mrid</font>  <font color=\"#535353\">INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"label_order\"><font face=\"Times-bold\">label_order</font>  <font color=\"#535353\">INTEGER</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"value\"><font face=\"Times-bold\">value</font>  <font color=\"#535353\">REAL</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"receive_time\"><font face=\"Times-bold\">receive_time</font>  <font color=\"#535353\">INTEGER</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"jid\"><font face=\"Times-bold\">jid</font>  <font color=\"#535353\">INTEGER</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"irid\"><font face=\"Times-bold\">irid</font>  <font color=\"#535353\">INTEGER</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"eid\"><font face=\"Times-bold\">eid</font>  <font color=\"#535353\">INTEGER</font></td></tr>\n        <tr><td bgcolor=\"grey96\" align=\"left\" port=\"is_last_result\"><font face=\"Times-bold\">is_last_result</font>  <font color=\"#535353\">INTEGER</font></td></tr>\n      </table>\n    >];\n\n  \"experiment\":uid -> \"user\":uid;\n  \"job\":eid -> \"experiment\":eid;\n  \"job\":rid -> \"resource\":rid; \n  \"job\":jid -> \"job_attempt\":jid;\n  \"job\":jid -> \"intermediate_result\":jid;\n  \"job\":jid -> \"multiple_result\":jid;\n  \"intermediate_result\":irid -> \"multiple_result\":irid\n}\n"
  },
  {
    "path": "docs/Database/schema.sql",
    "content": "CREATE TABLE user\n    (uid INTEGER PRIMARY KEY NOT NULL, name TEXT UNIQUE, permission BLOB);\nCREATE TABLE resource\n    (rid INTEGER PRIMARY KEY NOT NULL, name TEXT, type TEXT, status TEXT);\nCREATE TABLE experiment \n    (eid INTEGER PRIMARY KEY NOT NULL, uid INTEGER, start_time INTEGER, end_time INTEGER, exp_config BLOB,\n    FOREIGN KEY(uid) REFERENCES user(uid));\nCREATE TABLE job\n    (jid INTEGER PRIMARY KEY NOT NULL, score REAL, eid INTEGER, rid INTEGER, start_time INTEGER, end_time INTEGER,\n    job_config BLOB,\n    FOREIGN KEY(eid) REFERENCES experiment(eid),\n    FOREIGN KEY(rid) REFERENCES resource(rid));\nCREATE TABLE job_attempt\n        (jaid INTEGER PRIMARY KEY NOT NULL, jid INTEGER, num INTEGER, rid INTEGER, start_time INTEGER, end_time INTEGER,\n        FOREIGN KEY(jid) REFERENCES job(jid),\n        FOREIGN KEY(rid) REFERENCES resource(rid));\nCREATE TABLE intermediate_result\n        (irid INTEGER PRIMARY KEY NOT NULL, num INTEGER, score REAL, jid INTEGER, receive_time INTEGER,\n        FOREIGN KEY(jid) REFERENCES job(jid));\nCREATE TABLE multiple_result\n        (mrid INTEGER PRIMARY KEY NOT NULL, label_order INTEGER, value REAL, receive_time INTEGER,\n        jid INTEGER, irid INTEGER, eid INTEGER, is_last_result INTERGER,\n        FOREIGN KEY(jid) REFERENCES job(jid),\n        FOREIGN KEY(irid) REFERENCES intermediate_result(irid),\n        FOREIGN KEY(eid) REFERENCES experiment(eid));\n"
  },
  {
    "path": "docs/Database/sql_graphviz.py",
    "content": "#!/usr/bin/env python\n# https://github.com/rm-hull/sql_graphviz\n# run  dot -Tpdf schema.dot > schema.pdf\nimport sys\nfrom datetime import datetime\nfrom pyparsing import alphas, alphanums, Literal, Word, Forward, OneOrMore, ZeroOrMore, CharsNotIn, Suppress, QuotedString, Optional\n\n\ndef field_act(s, loc, tok):\n    return '<tr><td bgcolor=\"grey96\" align=\"left\" port=\"{0}\"><font face=\"Times-bold\">{0}</font>  <font color=\"#535353\">{1}</font></td></tr>'.format(tok[0].replace('\"', ''), ' '.join(tok[1::]).replace('\"', '\\\\\"'))\n\n\ndef field_list_act(s, loc, tok):\n    return \"\\n        \".join(tok)\n\n\ndef create_table_act(s, loc, tok):\n    return '''\n  \"{tableName}\" [\n    shape=none\n    label=<\n      <table border=\"0\" cellspacing=\"0\" cellborder=\"1\">\n        <tr><td bgcolor=\"lightblue2\"><font face=\"Times-bold\" point-size=\"20\">{tableName}</font></td></tr>\n        {fields}\n      </table>\n    >];'''.format(**tok)\n\n\ndef add_fkey_act(s, loc, tok):\n    return '  \"{tableName}\":{keyName} -> \"{fkTable}\":{fkCol}'.format(**tok)\n\n\ndef other_statement_act(s, loc, tok):\n    return \"\"\n\n\ndef grammar():\n    parenthesis = Forward()\n    parenthesis <<= \"(\" + ZeroOrMore(CharsNotIn(\"()\") | parenthesis) + \")\"\n\n    field_def = OneOrMore(Word(alphanums + \"_\\\"'`:-\") | parenthesis)\n    field_def.setParseAction(field_act)\n\n    tablename_def = ( Word(alphas + \"`_\") | QuotedString(\"\\\"\") )\n\n    field_list_def = field_def + ZeroOrMore(Suppress(\",\") + field_def)\n    field_list_def.setParseAction(field_list_act)\n\n    create_table_def = Literal(\"CREATE\") + \"TABLE\" + tablename_def.setResultsName(\"tableName\") + \"(\" + field_list_def.setResultsName(\"fields\") + \")\" + \";\"\n    create_table_def.setParseAction(create_table_act)\n\n    add_fkey_def = Literal(\"FOREIGN\") + \"KEY\" + \"(\" + Word(alphanums).setResultsName(\"keyName\") + \")\" + \"REFERENCES\" + Word(alphanums).setResultsName(\"fkTable\") + \"(\" + Word(alphanums + \"_\").setResultsName(\"fkCol\") + \")\" + Optional(Literal(\"DEFERRABLE\")) + \";\"\n    add_fkey_def.setParseAction(add_fkey_act)\n\n    other_statement_def = OneOrMore(CharsNotIn(\";\")) + \";\"\n    other_statement_def.setParseAction(other_statement_act)\n\n    comment_def = \"--\" + ZeroOrMore(CharsNotIn(\"\\n\"))\n    comment_def.setParseAction(other_statement_act)\n\n    return OneOrMore(comment_def | create_table_def | add_fkey_def | other_statement_def)\n\n\ndef graphviz(filename):\n    print(\"/*\")\n    print(\" * Graphviz of '%s', created %s\" % (filename, datetime.now()))\n    print(\" * Generated from https://github.com/rm-hull/sql_graphviz\")\n    print(\" */\")\n    print(\"digraph g { graph [ rankdir = \\\"LR\\\" ];\")\n\n    for i in grammar().parseFile(filename):\n        if i != \"\":\n            print(i)\n    print(\"}\")\n\nif __name__ == '__main__':\n    filename = sys.stdin if len(sys.argv) == 1 else sys.argv[1]\n    graphviz(filename)\n"
  },
  {
    "path": "docs/Dockerfile",
    "content": "FROM nginx\nCOPY _build/html /usr/share/nginx/html\n\n# fix version urls\nRUN mkdir /usr/share/nginx/html/archive\nRUN mv /usr/share/nginx/html/_static/*.whl /usr/share/nginx/html/archive\nRUN mv /usr/share/nginx/html/_static/aup.py /usr/share/nginx/html/archive/"
  },
  {
    "path": "docs/LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    <program>  Copyright (C) <year>  <name of author>\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<https://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<https://www.gnu.org/licenses/why-not-lgpl.html>."
  },
  {
    "path": "docs/Makefile",
    "content": "# Minimal makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS    =\nSPHINXBUILD   = sphinx-build\nSPHINXPROJ    = ContinuousTrainingEngine\nSOURCEDIR     = .\nBUILDDIR      = _build\n\n# Put it first so that \"make\" without argument is like \"make help\".\nhelp:\n\t@$(SPHINXBUILD) -M help \"$(SOURCEDIR)\" \"$(BUILDDIR)\" $(SPHINXOPTS) $(O)\n\n.PHONY: help Makefile\n\n# Catch-all target: route all unknown targets to Sphinx using the new\n# \"make mode\" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).\n%: Makefile\n\t# pandoc ../README.md -o tmp.rst;sed 's/docs\\///g' tmp.rst > README.rst;rm tmp.rst\n\t@$(SPHINXBUILD) -M $@ \"$(SOURCEDIR)\" \"$(BUILDDIR)\" $(SPHINXOPTS) $(O)"
  },
  {
    "path": "docs/README.rst",
    "content": "Auptimizer Quickstart\n=====================\n\n|GPL 3.0 License| |pipeline status| |coverage report| |repo url|\n\n**Auptimizer** is an optimization tool for Machine Learning (ML) that automates many of the tedious parts of the model building and deployment process.\nCurrently, **Auptimizer** helps with:\n\n-  **Getting the best models in minimum time** - Generate optimal models \n   and achieve better performance by employing state-of-the-art hyperparameter \n   optimization (HPO) and model compression techniques techniques. Auptimizer will run and record sophisticated \n   HPO and model compression experiments on compute resources of your choice with effortless consistency \n   and reproducibility.\n\n-  **Making your models edge-ready** - Get model-device compatibility and \n   enhanced on-device performance by converting models into the industry-standard \n   ONNX and TensorFlow Lite formats. Auptimizer-Converter provides validated \n   conversion techniques to ensure worry-free format transformations.\n\n-  **Selecting the most suitable model for your edge deployment effortlessly** \n   - Compare how different models will perform under specific compute and memory \n   constraints on a CPU-based edge device. Auptimizer-Profiler will help you identify \n   the most efficient models without the hustle of going through multiple physical \n   deployment cycles.\n\nBest of all, **Auptimizer** offers a consistent interface that allows\nusers to switch between different HPO and compression algorithms, conversion frameworks, \nand computing resources with minimal changes to the existing code.\n\nWhat's New in Auptimizer v2.0\n-----------------------------\nAuptimizer v2.0 introduces two core capabilites - Dashboard and Compressor!\n\nDashboard\n~~~~~~~~~\n`Auptimizer Dashboard <https://lge-arc-advancedai.github.io/auptimizer/dashboard.html>`__ \nis a powerful analytics tool that complements Auptimizer's core hyperparameter optimization \n(HPO) and model compression capabilities. It provides insightful visualizations to help you \ntrack experiment progress, analyze and contrast jobs, experiments, and optimization approaches. \nAdditionally, it can be used to control an experiment or even set up a new Auptimizer environment.\n\nCompressor\n~~~~~~~~~~\n`Compressor <https://lge-arc-advancedai.github.io/auptimizer/compression_main.html>`__ \nis a model compression tool that helps reduce memory complexity and inference time of \nneural networks. It is particularly useful for adapting ML models for deployment on \nresource-constrained edge devices.\n\nSimilar to Auptimizer-Hyperparameter Optimization (HPO), Compressor aims to provide \na unified interface to the existing state-of-the-art toolkits. Currently, Compressor \nleverages `NNI (version 2.0) <https://nni.readthedocs.io/en/latest/model_compression.html>`__ \nmodel compression modules. NNI is an open-source toolkit that supports two types of compression, \npruning and quantization, for TensorFlow, and PyTorch models. In the future, we will be integrating \nother off-the-shelf toolkits to expand the selection of model compression approaches.\n\nCapabilities\n------------\nHyperparameter Optimization\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\nAuptimizer automates tedious experimentation by performing and recording \nhyperparameter experiments. Auptimizer provides a single seamless access \npoint to top-notch HPO algorithms, including Bayesian optimization and multi-armed \nbandit. You can even integrate your own proprietary solution. Moreover, with \nAuptimizer, you can make the best use of your compute-resources. Whether you are \nusing a couple of GPUs or AWS, Auptimizer will help you orchestrate compute resources \nfor faster hyperparameter tuning. \n\nThe table below shows a full list of currently supported techniques and resources \nfor hyperparameter optimization.\n\n+----------------------------------------------------------------+-----------------------------------+\n| Supported HPO Algorithms                                       | Supported Infrastructure          |\n+================================================================+===================================+\n| | Random                                                       | | Multiple CPUs                   |\n| | Grid                                                         | | Multiple GPUs                   |\n| | `Hyperband <https://github.com/zygmuntz/hyperband>`__        | | Multiple Machines (SSH)         |\n| | `Hyperopt <https://github.com/hyperopt/hyperopt>`__          | | EC2 instances                   |\n| | `Spearmint <https://github.com/JasperSnoek/spearmint>`__     |                                   |\n| | `BOHB <https://github.com/automl/HpBandSter>`__              |                                   |\n| | `EAS (experimental) <https://github.com/han-cai/EAS>`__      |                                   |\n| | Passive                                                      |                                   |\n+----------------------------------------------------------------+-----------------------------------+\n\nProfiler\n~~~~~~~~\n`Profiler <https://lge-arc-advancedai.github.io/auptimizer/profiler.html>`__ \nis a simulator for profiling performance of machine learning model scripts. Given compute- and memory \nresource constraints for a CPU-based Edge device, Profiler can provide estimates of compute and memory \nusage for model scripts on the device. These estimations can be used to choose best performing models or, \nin certain cases, to predict how much compute and memory models will use on the target device. \n\nBecause Profiler mimics the target device environment on the user's development machine, the user \ncan gain insights about the performance and resource needs of a model script without having to \ndeploy it on the target device. Profiler helps accelerate the model selection cycle and simplifies \nfinding model-device fit. Please see :doc:`prof_readme` for usages.\n\nConverter\n~~~~~~~~~\n`Converter <https://lge-arc-advancedai.github.io/auptimizer/dlconvert.html>`__ \nis a format conversion tool for machine learning models. It encapsulates best practices of individual \nmachine learning model conversions under a single API. Converter makes ML models suitable for edge \n(on-device) deployments by transforming them into the industry-standard ONNX and TensorFlow Lite formats \nand reducing model size through quantization. Please see :doc:`dlconvert_readme` for usages.\n\nInstall\n-------\n\n**Auptimizer** currently is well tested on Linux systems, it may require\nsome tweaks for Windows users.\n\n::\n\n   pip install auptimizer\n\n**Note** Dependencies are not included. Using ``pip install -r``\n`requirements.txt <https://github.com/LGE-ARC-AdvancedAI/auptimizer/blob/master/requirements.txt>`_ will install\nnecessary libraries for all functionalities.\n\nExample\n-------\n\n::\n\n   cd Examples/demo\n   # Setup environment (Interactively create the environment file based on user input)\n   python -m aup.setup\n   # Setup experiment\n   python -m aup.init\n   # Create training script - auto.py\n   python -m aup.convert origin.py experiment.json demo_func\n   # Run aup for this experiment\n   python -m aup experiment.json\n\nEach job’s hyperparameter configuration is saved separately under\n``jobs/*.json`` and is also recorded in the SQLite file\n``.aup/sqlite3.db``.\n\n.. figure:: ./images/demo.gif\n   :alt: demo\n\nLicense\n-------\n\n`GPL 3.0 License <./LICENSE>`__\n\n.. |GPL 3.0 License| image:: https://img.shields.io/badge/License-GPL%203.0-blue.svg\n    :target: https://opensource.org/licenses/GPL-3.0\n.. |pipeline status| image:: https://travis-ci.org/LGE-ARC-AdvancedAI/auptimizer.svg?branch=master\n   :target: https://travis-ci.org/LGE-ARC-AdvancedAI/auptimizer\n.. |coverage report| image:: https://codecov.io/gh/LGE-ARC-AdvancedAI/auptimizer/branch/master/graph/badge.svg\n   :target: https://codecov.io/gh/LGE-ARC-AdvancedAI/auptimizer\n.. |repo url| image:: https://img.shields.io/badge/github-repo-information.svg\n    :target: https://github.com/LGE-ARC-AdvancedAI/auptimizer\n\n\nCite\n----\n\nIf you have used this software for research, please cite the following paper (accepted at IEEE Big Data 2019):\n\n.. code-block:: none\n\n   @misc{liu2019auptimizer,\n    title={Auptimizer -- an Extensible, Open-Source Framework for Hyperparameter Tuning},\n    author={Jiayi Liu and Samarth Tripathi and Unmesh Kurup and Mohak Shah},\n    year={2019},\n    eprint={1911.02522},\n    archivePrefix={arXiv},\n    primaryClass={cs.LG}\n   }"
  },
  {
    "path": "docs/_static/.gitkeep",
    "content": ""
  },
  {
    "path": "docs/algorithm.rst",
    "content": "Configure HPO Algorithm\n=======================\n\nSupported algorithms\n--------------------\n\n**Auptimizer** supports a number of different HPO algorithms.  The names and descriptions are listed below:\n\n===========  ============================================================================================================================\nName         Algorithm\n===========  ============================================================================================================================\npassive      Manually run job (for debug purpose)\nrandom       Random search\nsequence     Grid Search\nspearmint    `Spearmint <https://github.com/JasperSnoek/spearmint>`_: Bayesian Optimization based on Gaussian Process\nbohb         `HpBandSter <https://automl.github.io/HpBandSter/build/html/index.html>`_: Bayesian Optimization and HyperBand\nhyperopt     `Hyperopt <http://hyperopt.github.io/hyperopt/>`_: Bayesian Optimization with Tree of Parzen Estimators (TPE)\nhyperband    `Hyperband <https://github.com/zygmuntz/hyperband>`_: Multi-armed bandit approach\neas          `EAS <https://github.com/han-cai/EAS>`_: Efficient Architecture Search by Network Transformation (Illustration purpose)\n===========  ============================================================================================================================\n\n\nUse ``python -m aup.init`` to set up the experiment configuration interactively.\n\nFor finer control, advanced users can change the configuration manually by directly modifying the ``experiment.json``\nfile.\n\nConfiguration details\n---------------------\n\nBelow we cover the most common pieces. For requirements related to specific algorithms, please refer to the respective\ndocumentation.\n\nThe general structure of the configuration file is as follows::\n\n {\n  \"proposer\": \"random\",\n  \"n_samples\": 10,\n  \"random_seed\": 1,\n  \"script\": \"auto.py\",\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        -5,\n        5\n      ],\n      \"type\": \"float\"\n    }\n  ],\n  \"resource\": \"cpu\",\n  \"resource_args\": {\n    \"save_model\": true\n  },\n  \"job_failure\": {\n    \"job_retries\": 3,\n    \"ignore_fail\": true\n  },\n  \"n_parallel\": 3,\n  \"target\":\"min\",\n  \"workingdir:\"./\"\n }\n\n\n================ ======== ==============================================================================\nName             Default  Explanation\n================ ======== ==============================================================================\nproposer         random   hpo method used to propose new hyperparameter values (see below for full list)\nn_samples        10       number of jobs to run\nscript           -        script to run\nn_parallel       1        number of parallel jobs\njob_retries      0        number of retries for failed jobs. \nignore_fail      False    whether to continue the experiment if a job fails. \ntarget           max      search for max or min\nresource         -        type of resource to run the experiment, [cpu, gpu, aws, node, passive]\nparameter_config {}       hyperparameter specification (see below)\nworkingdir       \"./\"     path to run the script, important for running jobs remotely (SSH/AWS)\nresource_args    {}       other parameters to enable features like tracking intermediate results, saving best model, etc (see below)\n================ ======== ==============================================================================\n\nfor ``parameter_config``:\n\n================= ======================================================================================\nName              Content                                                                               \n================= ======================================================================================\nname              name of the hyperparameter variable. Must be the same as used in the training script\nrange             [min, max] or a list of values                                                   \ntype              `float`, `int`, `choice` types are supported                                     \n================= ======================================================================================\n\nMinor modifications or changes may be required for each algorithm. These options can be found at the corresponding API\npages under :doc:`aup.Proposer` (see API links below).\n\nfor ``resource_args``:\n\n========================== ======== ==============================================================================\nName                       Default  Explanation\n========================== ======== ==============================================================================\nsave_model                 False    whether to save the best performing model (see below)\nmulti_res_labels           None     a list of additional results to be tracked, e.g. [\"flops\", \"param\"]\ntrack_intermediate_results False    if true, intermediate results during training epoches will be tracked\nearly_stop                 None     parameters related to early stopping strategies\n========================== ======== ==============================================================================\n\nFor details of the ``early_stop`` parameter and how to apply early stopping strategies to HPO experiments, please refer to \n:doc:`Early Stopping <early_stop>`. \n\n``resource_args`` can also include SSH/AWS specific parameters, please refer to :ref:`AWSRuntimeAnchor` for more details.\n\n**Note**: \n\n| If ``job_failure`` is not specified, the experiment will stop whenever a job fails.\n| For ``job_retries``, preferance is given to a different resource, if multiple resources are available.\n| For ``ignore_fail``, currently [BOHB, EAS, Hyperband] proposers do not support experiment continuation upon job failure.\n\nAdditional functionalities\n--------------------------\nTrack intermediate results\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThis feature allows the user to save and track multiple intermediate results at different points during the HPO experiment. Auptimizer still uses the final result as the main result for the HPO algorithm, but saves the intermediate records in the database under the table ``intermediate_results``.\n\n\nUsage\n@@@@@\n\nThe feature can be used by adding the following parameter to the experiment configuration file::\n\n\n  \"resource_args\": {\n    \"track_intermediate_results\": true\n   }\n\nThen in the training script, ``aup.print_result(res)`` should be placed where the user wants the results to be tracked::\n\n  def main(*args, **kwargs):\n      # model and data preparation\n      for epoch in range(n_epochs):\n          # training for one epoch\n          aup.print_result(res)\n\nIn the above example, the intermediate results are returned every epoch. The result at last epoch is regarded as the main result for the user script and is then used by the HPO algorithm.\n\nThe intermediate results will be shown on the dashboard if tracked.\n\n**Note**: It is possible to use multiple results feature in conjunction with intermediate results to track multiple intermediate results as well.\n\n\n\nSave the best model\n~~~~~~~~~~~~~~~~~~~\nThis feature allows the user to save the best performing model after running the HPO experiment. This is achieved by\nrunning the training script again using the best hyperparamters obtained during HPO the experiment. \nThe model, by default, will be saved to path ``aup_models/models_<eid>/<user_defined_model_path>``. \n\nUsage\n@@@@@\n\nIn order to use this feature, please add the following parameter to the experiment configuration file::\n\n  \"resource_args\": {\n    \"save_model\": true\n   }\n\nDepending on whether the ``@aup_args`` decorator is used, the training script needs the following additional modifications.\n\nIf ``@aup_args`` is used, the user needs to define a funtion to save the model, and register this function with ``aup_save_model``. \nWe suggest using this approach if running the experiment on remote machines (SSH/AWS) to be able to correctly locate and retrieve the model saved \non the remote machine. \n\nPlease see the example below::\n\n  # define a function \"save_model(model)\" to save the model to a user-defined path\n  def save_model(model):\n      os.makedirs('model_train')\n      model.save('./model_train/mnist.h5')\n  \n  @aup_args\n  def main(*args, **kwargs):\n      # training code\n      ...\n      # register the model saving function with model as argument\n      aup.aup_save_model(save_model, model)\n\n      ...\n\nIf ``@aup_args`` is not used, the user needs to manually check whether the ``save_model`` parameter is True in the job's \nconfiguration. The main function should also take ``save_model`` and ``folder_name`` as arguments. Please see the \nexample below::\n\n  def main(*args, **kwargs, save_model=False, folder_name=None):\n      # training code\n      ...\n      if save_model is True:\n          # manually locate the path for saving the model\n          # this is important if running on remote machines\n          path = os.path.join('aup_models', folder_name)\n\n          if os.path.exists('aup_models') is False:\n              os.makedirs('aup_models')\n\n          if os.path.exists(path) is True:\n              shutil.rmtree(path)\n\n          os.makedirs(path)\n          os.chdir(path)\n\n          model.save('./model_train/mnist.h5')\n      ...\n\nReturn multiple results\n~~~~~~~~~~~~~~~~~~~~~~~\n\n\nThis feature allows the user to save and track multiple secondary results along with the primary result for the HPO experiment. Auptimizer still uses the main result for the HPO algorithm, but saves the secondary results in the database under the table ``multiple_results``. There is no upper limit \non how many secondary results the user can track.\n\n\nUsage \n@@@@@\n\n\nThe feature can be used by adding the following parameter to the experiment configuration file::\n\n  \"resource_args\": {\n    \"multi_res_labels\": [\"x\", \"y\"]\n  }\n\nIn the above configuration file, ``x`` and ``y`` are the secondary results the user wants to track and record. The user script would then return the results as a list including the primary result ``res`` along with the secondary parameters as follows::\n\n  @aup_args\n  def HPO():\n    res = calculate_results()\n    return [res, x, y]\n\nIn the above example, ``res`` is the primary result which is always placed at the first index of the returned list, which will be used by the HPO algorithm. The remaining results are matched directly with the list provided in ``multi_res_labels``. Hence, the length of the returned list from user script is  1 + length of ``multi_res_labels`` parameter.\n\n**Note**: It is possible to use multiple results feature in conjunction with intermediate results to track multiple intermediate results as well.\n\n\n\nPause and resume jobs\n~~~~~~~~~~~~~~~~~~~~~\n+ Serial: optimize parameters by running jobs sequentially\n+ Parallel: optimize parameters by running jobs in parallel\n+ Pause: pause and save current HPO status\n+ Resume: resume previously paused HPO process\n\n+-----------+-------------------------------------------------+--------+----------+--------------+--------+\n| Algorithm | Documentation                                   | Serial | Parallel | Pause (save) | Resume |\n+===========+=================================================+========+==========+==============+========+\n| Random    | :class:`aup.Proposer.RandomProposer`            | |Y|    | |Y|      | |Y|          | |Y|    |\n+-----------+-------------------------------------------------+--------+----------+--------------+--------+\n| Sequence  | :class:`aup.Proposer.SequenceProposer`          | |Y|    | |Y|      | |Y|          | |Y|    |\n+-----------+-------------------------------------------------+--------+----------+--------------+--------+\n| Passive   | :class:`aup.EE.Resource.PassiveResourceManager` | |Y|    | |Y|      | |Y|          | |Y|    |\n+-----------+-------------------------------------------------+--------+----------+--------------+--------+\n| Spearmint | :class:`aup.Proposer.SpearmintProposer`         | |Y|    | |Y|      | |N|          | |N|    |\n+-----------+-------------------------------------------------+--------+----------+--------------+--------+\n| Hyperopt  | :class:`aup.Proposer.HyperoptProposer`          | |Y|    | |Y|      | |N|          | |N|    |\n+-----------+-------------------------------------------------+--------+----------+--------------+--------+\n| Hyperband | :class:`aup.Proposer.HyperbandProposer`         | |Y|    | |Y|      | |N|          | |N|    |\n+-----------+-------------------------------------------------+--------+----------+--------------+--------+\n| BOHB      | :class:`aup.Proposer.BOHBProposer`              | |Y|    | |Y|      | |N|          | |N|    |\n+-----------+-------------------------------------------------+--------+----------+--------------+--------+\n| EAS       | :class:`aup.Proposer.EASProposer`               | |Y|    | |N|      | |N|          | |N|    |\n+-----------+-------------------------------------------------+--------+----------+--------------+--------+\n\n\n.. |Y| unicode:: U+2713 .. checked\n.. |N| unicode:: U+274C .. no check\n.. |?| unicode:: U+274C .. check pending\n\n\n"
  },
  {
    "path": "docs/archive/aup.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nAuptimizer client side functions\n================================\n\nThis file can be copied to a remote machine instead of installing the whole Auptimizer package for job execution.\n\nAPIs\n----\n\"\"\"\nfrom __future__ import print_function\n\nimport logging\nimport json\nimport pickle\nimport sys\nimport inspect\nimport functools\nimport os\nimport shutil\n\nlogger = logging.getLogger(\"aup-minimal\")\n\n# supported data loading format\n_SUPPORT_FORMAT = (\"pkl\", \"json\")\n\nglobal user_callback_fn\nglobal user_args\nglobal user_kwargs\n\nuser_callback_fn = None\nuser_args = []\nuser_kwargs = {}\n\ndef print_result(result):\n    \"\"\"Function to print the result for :func:`parse_result`.\n    This function should be the last line of your training code\n\n    :param result: result from training code\n    :type result: str\n    \"\"\"\n    if result is list:\n        result = ','.join([str(r) for r in result])\n    else:\n        result = str(result).lstrip()  # avoid line break\n    # force flush to get intermediate results in real time\n    print(\"\\n#Auptimizer:%s\" % result, file=sys.stderr, flush=True)\n\nclass BasicConfig(dict):\n    \"\"\"\n    User-friendly :class:`dict` supports:\n\n    * load and save for json/pickle format (.json/.pkl)\n    * easy key/value access as config.key or config[\"key\"]\n    * compatible with :class:`dict`\n\n    :param kwargs: key-value pairs to initialize the configuration\n    :type kwargs: dict\n    \"\"\"\n    def load(self, filename):\n        \"\"\"Load config parameters from JSON/pickle file\n\n        :param filename: file name ends with [.json|.pkl]\n        :type filename: string\n        :return: configuration parsed from file\n        :rtype: aup.BasicConfig\n        \"\"\"\n        name = \"_load_\" + BasicConfig._get_format(filename)\n        func = getattr(self, name)\n        data = func(filename)\n        if type(data) is not dict:\n            raise TypeError(\"Config must be dict\")\n        self.update(data)\n        logger.debug(\"Load config from %s: %s\" % (filename, data.__str__()))\n        return self\n\n    def save(self, filename):\n        \"\"\"\n        Save configuration as dict in JSON/pickle\n\n        :param filename: file name ends with [.json|.pkl]\n        :type filename: string\n        \"\"\"\n        name = \"_save_\" + BasicConfig._get_format(filename)\n        func = getattr(self, name)\n        func(filename)\n        logger.debug(\"Config saved to %s\" % filename)\n\n    @staticmethod\n    def _get_format(filename):\n        name = filename.split(\".\")[-1].lower()\n        if name not in _SUPPORT_FORMAT:\n            raise ValueError(\"Un-support file format, choose from %s.\" % \",\".join(_SUPPORT_FORMAT))\n        return name\n\n    @staticmethod\n    def _load_json(filename):\n        with open(filename, 'r') as f:\n            return json.load(f)\n\n    @staticmethod\n    def _load_pkl(filename):\n        with open(filename, 'rb') as f:\n            return pickle.load(f)\n\n    def _save_json(self, filename):\n        with open(filename, 'w') as f:\n            json.dump(self, f)\n\n    def _save_pkl(self, filename):\n        with open(filename, 'wb') as f:\n            pickle.dump(dict(self), f)\n\n    @staticmethod\n    def save_flags(filename):\n        \"\"\"\n        Save tf flags for reuse - not used, not tested\n\n        :param filename: output file\n        \"\"\"\n        from absl import flags\n        logger.info(\"Write flags into %s\")\n        with open(filename, 'w') as f:\n            f.write(flags.FLAGS.flags_into_string())\n\n    def to_flags(self, FLAGS):\n        \"\"\"\n        Update values in FLAGS from BasicConfig\n\n        :param FLAGS: tensorflow/absl FLAGS\n        \"\"\"\n        for i in FLAGS:\n            if i in self:\n                logger.debug(\"set %s in FLAGS\", i)\n                setattr(FLAGS, i, self[i])\n            else:\n                logger.debug(\"Use default %s\", i)\n\n    def __setattr__(self, key, value):\n        self.__setitem__(key, value)\n\n    def __getattr__(self, key):\n        return self.__getitem__(key)\n\n    def __delattr__(self, key):\n        self.__delitem__(key)\n\n    def __hash__(self):\n        return super(BasicConfig, self).__hash__()\n\n\ndef aup_args(func):\n    \"\"\"Decorator to wrap optimization target function `func`.\n    \n    Arguments:\n        func {function} -- A function computes optimization target with specified hyperparameters\n    \"\"\"\n    @functools.wraps(func)\n    def wrapper(filename, **kwargs):\n        \"\"\"wrapper function\n        \n        Arguments:\n            filename {str} -- configuration file\n            kwargs {dict} -- additional arguments will overwrite existing configuration value\n        Raises:\n            ValueError: if a parameter is not assigned in config\n        \"\"\"\n        # get current frame stack\n        frm = inspect.stack()[1]\n        # get module from stack\n        mod = inspect.getmodule(frm[0])\n        # get functions that contain \"init\" in name and call them\n        functions_list = inspect.getmembers(sys.modules[mod.__name__], inspect.isfunction)\n        functions_list = sorted(list(filter(lambda x: \"init\" in x[0], functions_list)))\n\n        config = BasicConfig().load(filename)\n        if kwargs:\n            logger.critical(\"Overwritting config values from script, be cautious!\")\n            config.update(kwargs)\n\n        for f in functions_list:\n            f[1](**config)\n\n        parameters = inspect.signature(func).parameters\n        for p in parameters.items():\n            if p[0] not in config:\n                if p[1].default is inspect.Parameter.empty:\n                    raise ValueError(\"`%s` is required in `%s()` but is not assigned in config file %s\" % \n                                     (p[0], func.__name__, filename))\n                logger.info(\"Using default value for %s\", p[0])\n        run_config = dict()\n        for p in config:\n            if p in parameters:\n                run_config[p] = config[p]\n            else:\n                logger.warning(\"%s is not used in optimization\"%p)\n\n        val = func(**run_config)\n        print_result(val)\n\n        save_model = config.get('save_model', False)\n        if save_model is True:\n            # this means this is the \"best job\" found\n            # the user wants to save the model\n            try:\n                dir = config.get('folder_name', None)\n                previous_dir = os.getcwd()\n\n                if os.path.exists(dir) is True:\n                    logger.warning('Deleting {}'.format(dir))\n                    shutil.rmtree(dir)\n\n                os.makedirs(dir)\n                os.chdir(dir)\n\n                assert user_callback_fn is not None, \\\n                    \"Please use 'aup_save_model' to register the save model callback fn\"\n                user_callback_fn(*user_args, **user_kwargs)\n            except Exception as e:\n                raise e\n            finally:\n                os.chdir(previous_dir)\n\n    return wrapper\n\ndef aup_flags(flags):\n    \"\"\"wrapper function for absl flags (or tf.app). \n\n    It will assign values to flags parameters using the given configuration file as the first argument when executed\n    from the command line.\n        \n    Arguments:\n        args {list} -- a list of unused arguments passed by app.run()\n    \"\"\"\n    def decorator_wrapper(func):\n        @functools.wraps(func)\n        def wrapper(args):\n            config = BasicConfig(**flags.__dict__).load(args[1])\n            flags.__dict__.update()\n            parameters = inspect.signature(func).parameters\n            if parameters:\n                logger.warning(\"TF FLAG main() should not accept arguments with Auptimizer, it has %s\", \n                               parameters.keys())\n                val = func({p:None for p in parameters})\n            else:\n                val = func()\n            print_result(val)\n        return wrapper\n    return decorator_wrapper\n\ndef aup_save_model(callback_fn, *args, **kwargs):\n    global user_callback_fn\n    global user_args\n    global user_kwargs\n\n    user_callback_fn = callback_fn\n    user_args = args\n    user_kwargs = kwargs"
  },
  {
    "path": "docs/aup.EE.Experiment.rst",
    "content": ".. automodule:: aup.EE.Experiment\n    :members:\n    :undoc-members:\n    :show-inheritance:"
  },
  {
    "path": "docs/aup.EE.Job.rst",
    "content": ".. automodule:: aup.EE.Job\n    :members:\n    :undoc-members:\n    :show-inheritance:"
  },
  {
    "path": "docs/aup.EE.Resource.rst",
    "content": "Resource Managers\n=================\n\n.. automodule:: aup.EE.Resource.AbstractResourceManager\n   :members:\n   :undoc-members:\n   :show-inheritance:\n\n.. automodule:: aup.EE.Resource.CPUResourceManager\n   :members:\n   :show-inheritance:\n\n.. automodule:: aup.EE.Resource.GPUResourceManager\n   :members:\n   :show-inheritance:\n\n\n.. automodule:: aup.EE.Resource.SSHResourceManager\n   :members:\n   :show-inheritance:\n\n.. automodule:: aup.EE.Resource.AWSResourceManager\n   :members:\n   :show-inheritance:\n\n.. automodule:: aup.EE.Resource.PassiveResourceManager\n   :members:\n   :show-inheritance:"
  },
  {
    "path": "docs/aup.EE.rst",
    "content": "aup.EE - Experiment execution\n=============================\n\nOverview\n--------\n\n:mod:`aup.EE` supports all experiment execution-related code.\n\n+ :mod:`aup.EE.Experiment` controls the flow of an experiment.\n+ :mod:`aup.EE.Job` takes care of job execution.\n+ :mod:`aup.EE.Resource` provides the backbone where :mod:`aup.EE.Job` runs on.\n\nAPIs\n----\n\n.. toctree::\n   :maxdepth: 1\n\n   aup.EE.Experiment\n   aup.EE.Job\n   aup.EE.Resource\n"
  },
  {
    "path": "docs/aup.ET.Connector.rst",
    "content": "aup.ET.Connector package\n========================\n\n.. automodule:: aup.ET.Connector.AbstractConnector\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: aup.ET.Connector.SQLiteConnector\n    :members:\n    :undoc-members:\n    :show-inheritance:"
  },
  {
    "path": "docs/aup.ET.rst",
    "content": "aup.ET - Experiment tracking package\n====================================\n\n.. toctree::\n    :caption: Modules for experiment tracking\n\n    aup.ET.Connector\n\n"
  },
  {
    "path": "docs/aup.Proposer.BOHBProposer.rst",
    "content": ".. automodule:: aup.Proposer.BOHBProposer\n    :members:\n    :undoc-members:\n    :show-inheritance:"
  },
  {
    "path": "docs/aup.Proposer.EASProposer.rst",
    "content": ".. automodule:: aup.Proposer.EASProposer\n    :members:\n    :show-inheritance:"
  },
  {
    "path": "docs/aup.Proposer.HyperbandProposer.rst",
    "content": ".. automodule:: aup.Proposer.HyperbandProposer\n    :members:\n    :undoc-members:\n    :show-inheritance:"
  },
  {
    "path": "docs/aup.Proposer.HyperoptProposer.rst",
    "content": ".. automodule:: aup.Proposer.HyperoptProposer\n    :members:\n    :undoc-members:\n    :show-inheritance:"
  },
  {
    "path": "docs/aup.Proposer.RandomProposer.rst",
    "content": ".. automodule:: aup.Proposer.RandomProposer\n    :members:\n    :undoc-members:\n    :show-inheritance:"
  },
  {
    "path": "docs/aup.Proposer.SequenceProposer.rst",
    "content": ".. automodule:: aup.Proposer.SequenceProposer\n    :members:\n    :undoc-members:\n    :show-inheritance:"
  },
  {
    "path": "docs/aup.Proposer.SpearmintProposer.rst",
    "content": ".. automodule:: aup.Proposer.SpearmintProposer\n    :members:\n    :undoc-members:\n    :show-inheritance:"
  },
  {
    "path": "docs/aup.Proposer.rst",
    "content": "aup.Proposer package\n====================\n\nThe proposer is the core component to optimize hyperparameters for model training.\n\nUse :func:`aup.Proposer.AbstractProposer.get_proposer` to initialize proposer.\n\nAll of them adopt the same interface as described below.\n\n\nProposers\n---------\n\n.. toctree::\n   :maxdepth: 1\n\n   aup.Proposer.HyperbandProposer\n   aup.Proposer.HyperoptProposer\n   aup.Proposer.RandomProposer\n   aup.Proposer.SequenceProposer\n   aup.Proposer.SpearmintProposer\n   aup.Proposer.BOHBProposer\n   aup.Proposer.EASProposer\n\n.. automodule:: aup.Proposer.AbstractProposer\n    :members:\n    :undoc-members:\n    :show-inheritance:"
  },
  {
    "path": "docs/aup.__main__.rst",
    "content": ".. automodule:: aup.__main__\n    :members:\n    :undoc-members:\n    :show-inheritance:"
  },
  {
    "path": "docs/aup.compression.rst",
    "content": "Compression main entry\n======================\n\n.. automodule:: aup.compression.__main__\n    :members:\n    :undoc-members:\n    :show-inheritance:"
  },
  {
    "path": "docs/aup.convert.rst",
    "content": ".. automodule:: aup.convert\n    :members:\n    :undoc-members:\n    :show-inheritance:"
  },
  {
    "path": "docs/aup.dlconvert.rst",
    "content": "DLconvert - Model conversion\n============================\n\n.. automodule:: aup.dlconvert.__main__\n    :members:\n    :undoc-members:\n    :show-inheritance:"
  },
  {
    "path": "docs/aup.dlconvert_API.rst",
    "content": "aup.dlconvert package\n========================\n\n.. automodule:: aup.dlconvert.checkpoint_to_onnx\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: aup.dlconvert.checkpoint_to_pb\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: aup.dlconvert.checkpoint_to_tflite\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: aup.dlconvert.keras_to_onnx\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: aup.dlconvert.keras_to_pb\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: aup.dlconvert.keras_to_tflite\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: aup.dlconvert.pb_to_onnx\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: aup.dlconvert.pb_to_tflite\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: aup.dlconvert.pytorch_to_keras\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: aup.dlconvert.pytorch_to_onnx\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: aup.dlconvert.pytorch_to_tflite\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: aup.dlconvert.savedmodel_to_onnx\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: aup.dlconvert.savedmodel_to_tflite\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: aup.dlconvert.to_frozen_pb\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: aup.dlconvert.to_onnx\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: aup.dlconvert.to_tflite\n    :members:\n    :undoc-members:\n    :show-inheritance:"
  },
  {
    "path": "docs/aup.init.rst",
    "content": ".. automodule:: aup.init\n    :members:\n    :undoc-members:\n    :show-inheritance:"
  },
  {
    "path": "docs/aup.profiler.rst",
    "content": "Profiler - Profiling model scripts\n==================================\n\n.. automodule:: aup.profiler.__main__\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/aup.rst",
    "content": "**Auptimizer** APIs\n===================\n\nMain Entry\n----------\n\n.. toctree::\n   :maxdepth: 1\n\n   aup.__main__\n   aup.compression\n   aup.setup\n   aup.init\n   aup.convert\n   aup.setupdb\n   aup.profiler\n   aup.dlconvert\n   \nInternal modules and packages\n-----------------------------\n\n.. toctree::\n   :maxdepth: 2\n\n   aup.EE\n   aup.ET\n   aup.Proposer\n   aup.utils\n   aup.setupdb_API\n   aup.dlconvert_API\n   \n"
  },
  {
    "path": "docs/aup.setup.rst",
    "content": ".. automodule:: aup.setup\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/aup.setupdb.rst",
    "content": "Database setup and reset\n========================\n\n.. automodule:: aup.setupdb.__main__\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\n.. automodule:: aup.setupdb.reset\n"
  },
  {
    "path": "docs/aup.setupdb.sqlite.rst",
    "content": ".. automodule:: aup.setupdb.sqlite\n    :members:\n    :undoc-members:\n    :show-inheritance:"
  },
  {
    "path": "docs/aup.setupdb_API.rst",
    "content": "aup.setupdb package\n===================\n\n.. toctree::\n   :maxdepth: 1\n\n   aup.setupdb.sqlite\n"
  },
  {
    "path": "docs/aup.utils.rst",
    "content": ".. automodule:: aup.utils\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: aup.aup\n    :members:\n    :undoc-members:\n    :show-inheritance:\n    :imported-members:"
  },
  {
    "path": "docs/aup.visualize.rst",
    "content": ".. automodule:: aup.visualize\n    :members:\n    :undoc-members:\n    :show-inheritance:"
  },
  {
    "path": "docs/compression.rst",
    "content": "Compressor\n==========\n\n**Compressor** is a model compression tool that helps reduce memory complexity and inference time of neural networks.\n\nWith Compressor, you can:\n\n1. **Make your ML models suitable for deployment on resource-constrained devices.** Use Compressor to optimize models for Edge device's limited memory, compute, or power and enable uncompromised on-device intelligence.\n2. **Slash latency and enhance the user experience of your AI-powered application.** Tap Compressor's speed-up functionality to accelerate your model's inference time.\n3. **Maximize the cost-effectiveness of your neural nets.** Cut down on cloud or on-prem model storage and compute costs by reducing their footprint.\n\nSimilar to Auptimizer-Hyperparameter Optimization (HPO), Compressor aims to provide a unified interface to the existing state-of-the-art toolkits. Currently, Compressor leverages `NNI (version 2.0) <https://nni.readthedocs.io/en/latest/model_compression.html>`__ model compression modules. NNI is an open-source toolkit that supports two types of compression, pruning and quantization, for TensorFlow, and PyTorch models. You can find more detail on supported compression algorithms (compressors) in the `NNI Compression documentation <https://nni.readthedocs.io/en/stable/model_compression.html>`__.\n\nIn the future, we will be integrating other off-the-shelf toolkits to expand the selection of model compression approaches.\n\nHow to run compression experiments\n----------------------------------\n\nRunning a compression experiment is similar to running an HPO experiment and requires just a few steps: \n\n1. Install Auptimizer and set up Auptimizer environment\n2. Prepare an experiment configuration file\n3. Modify a few lines in the training script \n4. Run the experiment\n\n\nAuptimizer also includes the NNI `compression utility functions <https://nni.readthedocs.io/en/stable/Compression/CompressionUtils.html>`__ that will help \nyou design compression experiments more efficiently. These utility functions enable layer sensitivity \nand channel dependency analysis, which can guide the selection of layers to be pruned and the target \nsparsity levels. We recommend running this analysis to have a better understanding of the model architecture. \nFor more details, please check :doc:`Utility functions <compression_utilities>`.\n\nStep #1. Installation and environment setup\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nCompressor is automatically installed as a part of Auptimizer. \n\nFor PyTorch compression algorithms, Pytorch version >= 1.7.0 is required. For \nTensorflow compression algorithms, TensorFlow version >= 2.0 is required. \n\nCompression experiments use the same Auptimizer environment as the HPO experiments. Please refer\nto the :doc:`Install and setup Auptimizer <setup>` and :doc:`Set up environment \n<environment>` sections for detail on how to set up your Auptimizer environment.\n\nStep #2. Prepare an experiment configuration file\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nCompressor supports two compression paradigms: \n\n1. one-time compression \n2. automatic compression. \n\nA **one-time compression** experiment runs one compression job with a fixed set of parameters. \nWhereas an **automatic compression** experiment leverages Auptimizer's HPO \nmodule to find the best possible parameters of a compression algorithm that generates the \nbest compressed model. \n\nOne-time approach is a good option for performing a dry-run or an experiment with a specific set of parameters. Alternatively, use automatic compression if you are not certain about \nthe compression parameters or would like to explore the relationship between compressed model performance \nand different parameter settings. \n\nBelow, we explain the differences between one-time and automatic compression configuration files.\n\nOne-time compression configuration\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\nHere is an example of the configuration file for one-time compression using the `L1Filter` pruning method::\n    \n    {\n        \"name\": \"MNIST L1 Filter Pruner\",\n        \"script\": \"mnist.py\",\n        \"resource\": \"cpu\",\n        \"compression\": {\n            \"framework\": \"torch\",\n            \"type\": \"pruning\",\n            \"compressor\": \"l1_filter\",\n            \"config_list\": [\n                {\n                    \"sparsity\": 0.8,\n                    \"op_types\": [\"Conv2d\"]\n                },\n                {\n                    \"sparsity\": 0.6,\n                    \"op_names\": [\"conv1\", \"conv2\"]\n                },\n                {\n                    \"exclude\": True,\n                    \"op_names\": [\"conv3\"]\n                }\n            ]\n        }\n    }\n\nOne-time compression experiment configurations take the following parameters, where all parameters except for **compression**\nhave the same meaning as in :doc:`Configure HPO Algorithm <algorithm>`:\n\n+ **name**: name of the experiment\n+ **script**: script to run\n+ **resource**: type of resource to run the experiment, [cpu, gpu, passive, node]\n+ **workingdir**: path to run the script, important for running jobs remotely (SSH/AWS)\n+ **compression**: compression-specific parameters\n    \n    + **framework**: either \"torch\" or \"tensorflow\"\n\n    + **type**: either \"pruning\" or \"quantization\"\n    \n    + **compressor**: string, one from the list of supported compression algorithms for the given\n      framework and type (see below)\n    \n    + **config_list**: a list of parameters which define the specific requirements for the chosen NNI \n      compression algorithm\n\nThe ``config_list`` parameter is specific to individual NNI compression algorithms. However, there a few parameters\ncommon among all compressors:\n\n+ **op_types**: list of strings, the names of the specific type of layers to be compressed.\n  If not specified, will use ``default`` as the value which denotes the default layer types \n  supported by the chosen compression algorithm. \n+ **op_names**: list of strings, the names of the layers to be compressed. Will overwrite \n  ``op_types`` if both are provided. The layer names can be found using ``model.state_dict().keys()``. \n+ **exclude**: \"True\" or \"False\" (default is \"False\"). When set to \"True\", the layers \n  defined in ``op_types`` or ``op_names`` will be excluded from compression.\n\nIn the above example, \"config_list\" means pruning all layers of the type \"Conv2d\" to 0.8 sparsity, except for\nlayers named \"conv1\" and \"conv2\" which should be pruned to 0.6 sparsity and layer \"conv3\" which should be \nexcluded from the pruning.\n\nPlease refer to the `NNI docs <https://nni.readthedocs.io/en/stable/Compression/QuickStart.html#specification-of-config-list>`__\nfor more description of the \"config_list\" parameter. Each compressor will have\nan example of its supported \"config_list\".\n\nAutomatic compression configuration\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\nHere is an example of the configuration file for automatic compression using the \n`L1Filter` pruning method::\n\n    {\n        \"name\": \"MNIST L1 Filter Pruner (automatic)\",\n        \"script\": \"mnist.py\",\n        \"resource\": \"cpu\",\n        \"compression\": {\n            \"framework\": \"torch\",\n            \"type\": \"pruning\",\n            \"compressor\": \"l1_filter\",\n            \"config_list\": [\n                {\n                    \"sparsity\": {\n                        \"range\": [0.6, 0.8],\n                        \"type\": \"float\"\n                    }\n                    \"op_types\": ['Conv2d']\n                },\n\n                {\n                    \"sparsity\": {\n                        \"range\": [0.1, 0.9],\n                        \"type\": \"float\"\n                    },\n                    \"op_names\": [\"conv1\", \"conv2\"]\n                },\n\n                {\n                    \"exclude\": True,\n                    \"op_names\": [\"conv3\"]\n                }  \n            ]\n        },\n        \"proposer\": \"random\",\n        \"n_parallel\": 4,\n        \"target\": \"max\",\n        \"n_samples\": 4\n    }\n\nAn automatic compression experiment uses HPO to find the best hyperparameters of a chosen compression algorithm. \nThe experiment is launched as an HPO experiment, therefore, its configuration recognizes all parameters\nin an HPO experiment (see :doc:`Configure HPO Algorithm <algorithm>` for parameter definitions). \nSome important parameters include:\n\n+ **proposer**: HPO method used to propose new hyperparameter values \n+ **target**: \"min\" or \"max\", minimizing or maximizing user-defined HPO metric\n+ **n_samples**: total number of jobs to run\n+ **n_parallel**: number of parallel jobs\n\nAnother notable difference in automatic compression configuration is that for the values of the \nparameters in ``config_list``, a search space is defined via the following parameters:\n\n+ **range**: [min, max] or a list of values\n+ **type**:  `float`, `int`, `choice` types are supported\n\nAdditional parameters may be needed for specific Proposers (see \n:doc:`Configure HPO Algorithm <algorithm>`).\n\nThere are two potential scenarios for identifying the best hyperparameters. We will \nuse hyperparameter \"sparsity\" as an example. In the first scenario, the user may set the same search range for the sparsity for\na group of layers defined in ``op_names`` or ``op_types``, however, the user allows the Proposer to choose a different value in the defined \nrange for each layer in the group. While in the second scenario, the user would like to use the same sparsity value for \nall layers in the group due to the dependency among those layers.\n\nTo handle these two scenarios, we introduce an additional parameter ``expand_op_names`` (\"true\" or \"false\", default is \"true\"). \nIf set to \"true\", Auptimizer will propose a different hyperparameter value for each layer defined in the group; whereas \nwhen set to \"false\", the same hyperparameter value will apply to all layers defined in the group.\n\nFor example, if the configuration is written as follows, in one job, the hyperparameter Proposer may assign sparsity value 0.2 and 0.4\nto \"conv1\" and \"conv2\" layers, respectively.  However, if the ``expand_op_names`` is set to \"false\" in the following example, the Proposer\nwill always assign the same value (e.g., 0.2) to both \"conv1\" and \"conv2\" layers::\n\n    [\n        {\n            'sparsity': {\n                'range': [0.1, 0.9],\n                'type': 'float'\n            },\n            'op_names': ['conv1', 'conv2'],\n            'expand_op_names': true,\n            'op_types': ['default']\n        }\n    ]\n\nStep #3. Modify the training script\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nOnly a few modifications to the training script are needed to run a compression experiment. The  \nmodifications are the same for both one-time and automatic compression experiments. We first present \nan example training script and then explain the changes below::\n    \n    #!/usr/bin/env python   #Step 1: add shebang line to make script executable\n\n    import aup               #Step 2: import auptimizer package\n\n    def main(config):        #Step 3a: the main function should take \"config\" as argument\n        \n        ... # code to generate model and load dataset ...\n        \n        #Step 4: create a compressor and call the compress method to compress the model\n        compressor = aup.compression.create_compressor(model, config, optimizer=optimizer)\n        model = compressor.compress()\n\n        #Step 5 (optional): speed-up the model by removing zero weights\n        model = compressor.apply_speedup(dummy_input=torch.randn(1, 1, 28, 28).to(device))\n        \n        ... code for model fine-tuning after compression ...\n\n        #Step 6 (optional): export the compressed model and the mask\n        compressor.export_model(\n            model_path=\"model_compressed.pth\",\n            mask_path=\"model_mask.pth\",\n            speedup=True,\n            folder_name=\".\")\n        \n        #Step 7: return the metric for HPO or any metric for one-time compression\n        aup.print_result(validation_acc)\n\n    # Step 3b: parse the configuration file and call the main function as follows\n    if __name__ == '__main__': \n        config = aup.BasicConfig().load(sys.argv[1])\n        main(config)\n\n\n1. Add Shebang line ``#!/usr/bin/env python`` on top of the script and make the script executable \n   (``chmod u+x script.py``).\n\n2. Import Auptimizer package by ``import aup``\n\n3. Parse the configuration file using ``aup.BasicConfig.load(sys.argv[1])``.\n\n4. Create the compressor and apply compression\n\n   + this can happen before the optimizer is created: \n     ``compressor = aup.compression.create_compressor(model, config)``\n    \n   + or after the optimizer is defined: \n     ``compressor = aup.compression.create_compressor(model, config, optimizer=optimizer)``\n      \n   Note: any additional arguments specifically required by the compression algorithms must be \n   passed here.\n\n   Apply compression by ``compressor.compress()``.\n\n5. (Optional) Speed-up can be applied for pruned models: \n   ``model = compressor.apply_speedup(dummy_input=torch.randn(*input_shape).to(device))``\n   This will modify the actual architecture of the model by removing zero parameters. \n   ``dummy_input`` should be a ``pytorch tensor`` that conforms \n   to the model input shape. We recommend fine-tuning the model after applying model speed-up \n   as pruning zero parameters may affect the accuracy of the model.\n   \n   Note: Not all pruners support speed-up, please refer to the **Model Speed-Up** section below for more detail.\n\n6. (Optional) Export the model::\n\n    compressor.export_model(\n            model_path=\"model_compressed.pth\",\n            mask_path=\"model_mask.pth\",\n            speedup=True,\n            folder_name=\".\")\n\n   This saves the model to disk. Note that the speed-up is only applied if it has not been applied\n   yet; otherwise, the model is saved as it is.\n\n   + ``model_path``: the path where the compressed model will be saved\n   + ``mask_path``: is a pruning-only argument, the path where the pruning mask will be saved.\n   + ``speedup``: must be present and True if speed-up has been applied; can be True if speed-up has not\n     been applied yet, and will apply speed-up before saving the model.\n   + ``folder_name``: (optional) the directory relative to the working directory to save the model,\n     the model and mask files will be saved to ``working_directory/folder_name/model(mask)_path``.\n   + ``dummy_input``: (optional) a ``pytorch tensor`` that conforms to the model input \n     shape required only for applying speedup when speedup has not been applied yet. \n\n7. Return the final result or any intermediate result by using ``aup.print_result``:\n\n   + For one-time compression, this result can be any metric the user would like to visualize on the dashboard\n   + For automatic compression, this result should be the metric to use in HPO\n\nA few compression algorithms require additional changes in training procedures. \nPlease refer to :doc:`Supported Compression Algorithms <compressors>` section for specific requirements\nof each compressor.\n\n\nStep #4. Run experiment\n~~~~~~~~~~~~~~~~~~~~~~~\n\nA one-shot compression experiment is run by issuing the ``aup.compression`` \ncommand::\n\n    python -m aup.compression experiment.json\n\nAutomatic compression experiments require the ``--automatic`` flag::\n\n    python -m aup.compression experiment.json --automatic\n\n\nAdvanced usages\n---------------\nUse decorator to modify training script\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nAn alternative way to pass the configuration file to the training script is to use the decorator \n``aup_args`` with the following changes::\n\n    @aup.aup_args\n    def main(compression_type, compression_framework, compressor, config_list, folder_name = None, save_model = False):\n        config = locals()\n        ...\n\n    if __name__ == '__main__':\n        main(sys.argv[1])\n\nSave the best model\n~~~~~~~~~~~~~~~~~~~\nAutomatic compression experiments can use the \"save best model\" feature in HPO. If this \nfeature is enabled, only the compressed model and mask obtained using the best hyperparameter \ncombination will be exported, instead of all the models and masks for every hyperparameter \ncombinations explored.\n\nTo use this feature, please make sure to define the following in the configuration file::\n\n        \"resource_args\": {\n            \"save_model\": true\n        }\n\nThere are two ways to modify the code for exporting only the best model and its mask:\n\n+ In case the ``@aup_args`` decorator is used, then the compressor's export_model method\n  can be registered as a model saving function::\n\n    aup_save_model(\n        compressor.export_model,\n        model_path=\"model_compressed.pth\",\n        mask_path=\"model_mask.pth\",\n        speedup=False)\n\n+ Alternatively, if the decorator is not used, apply the following code::\n\n    if \"save_model\" in config and config[\"save_model\"]:\n        compressor.export_model(\n            model_path=\"model_compressed.pth\",\n            mask_path=\"model_mask.pth\",\n            speedup=False,\n            folder_name=config[\"folder_name\"])\n\n\nModel Speed-up\n--------------\n\nNNI compression provides a `model speedup module <https://nni.readthedocs.io/en/stable/Compression/ModelSpeedup.html>`__ \nwhich aims to export models with their architecture modified to reflect \nthe effect of pruning methods. Normally, users would export the model with its \nstructure unchanged and, for pruning, a mask of the pruned weights. However, with \nmodel speed-up, the mask is applied to the model before exporting. \n\n**Important:** Note that without applying model speed-up, compression will not result in model size reduction or inference acceleration.\n\nIn order to use model speed-up, the script should call ``compressor.apply_speedup`` \nwith the appropriate parameters. Model speed-up can also be used \nduring ``compressor.export_model``. Please see `Modify the Training Script` step above for detailed usages.\n\nNot all compression algorithms support model speed-up. Compressors that support model speed-up include:\n\n+ ActivationAPoZRankFilter Pruner\n+ ActivationMeanRankFilter Pruner\n+ ADMM Pruner\n+ FPGM Pruner\n+ L1Filter Pruner\n+ L2Filter Pruner\n+ NetAdapt Pruner\n+ Sensitivity Pruner\n+ TaylorFOWeightFilter Pruner"
  },
  {
    "path": "docs/compression_main.rst",
    "content": "Model Compression\n-----------------\n.. toctree::\n   :maxdepth: 1\n\n   compression\n   compressors\n   compression_utilities"
  },
  {
    "path": "docs/compression_utilities.rst",
    "content": "Utility Functions\n=================\nThe utility functions of the NNI compression module are also integrated into Auptimizer. They are useful for analyzing  \nthe network topology, making informed decisions on the target sparsity levels, and measuring model parameters and FLOPS. \nThe basic usages are presented below. Please refer to `NNI compression utilities <https://nni.readthedocs.io/en/stable/Compression/CompressionUtils.html>`__ \nfor more advanced applications.\n\nSensitivity analysis\n--------------------\nSensitivity analysis prunes the layers one-by-one to measure the sentivity of each layer to different levels of target sparsity::\n \n  # Example of Sensitivity Analysis usage\n  # Define a test function to measure the model performance after pruning each layer\n  def test(model, device, test_loader):\n      ...\n      return accuracy # return a metric for evaluation\n\n  s_analyzer = aup.compression.sensitivity_analysis.SensitivityAnalysis(model=model, val_func=lambda model: test(model, device, test_loader))\n  sensitivity = s_analyzer.analysis(val_args=[model])\n  s_analyzer.export(os.path.join(OUT_DIR, \"sensitivity_analysis.log\")) \n\nThe sensitivity analysis result will be saved to \"sensitivity_analysis.log\".\n\nChannel dependency\n------------------\nWe recommend that users run a channel dependency analysis if they want to manually assign target sparsity levels to selected layers, as the \nlayers with dependency on each other need to be assigned the same sparsity. Channel dependency can be \ndone as follows::\n\n  # Assume input has dimension (1, 1, 28, 28)\n  data = torch.ones(1, 1, 28, 28).to(device)\n  channel_depen = aup.compression.shape_dependency.ChannelDependency(model, data)\n  channel_depen.export(os.path.join(OUT_DIR, \"channel_dependency.csv\"))\n\nThe channel dependency result will be saved to \"channel_dependency.csv\".\n\nParameters / FLOPs counter\n--------------------------\n\nThe FLOPs, number of parameters, and detailed information per layer (\"flops\", \"params\", \n\"weight_size\", \"input_size\", \"output_size\", etc) can be measured using::\n\n    flops, params, results = compressor.count_flops_params(input_shape_tuple)\n    print(results)\n    \nThe per layer information is saved in \"results\". "
  },
  {
    "path": "docs/compressors.rst",
    "content": "Supported Compression Algorithms\n================================\nFor a high-level introduction of all NNI pruners and quantizers, and the full list of parameters required for each compression algorithm in ``config_list``,\nplease refer to `compressors <https://nni.readthedocs.io/en/stable/Compression/Overview.html#supported-algorithms>`__.\nWe maintain the same parameters for each compression algorithm as in the original NNI compression module.\n\n\nIn this section, we provide examples for all of the supported compression algorithms that include:\n\n+ An example configuration (for one-time compression) to present the required \"framework\",\n  \"type\" and \"compressor\" parameters.\n+ An example of a``aup.create_compressor`` call. If the compressor supports `\"dependency-aware\" mode <https://nni.readthedocs.io/en/latest/Compression/DependencyAware.html>`__, \n  it will be included in the call.\n\nPruners\n-------\n\nLevel Pruner\n~~~~~~~~~~~~\n\nSupports both TensorFlow and PyTorch.\n\n**Configuration**::\n\n    \"compression\": {\n        \"framework\": \"tensorflow\" | \"torch\"\n        \"type\": \"pruning\",\n        \"compressor\": \"level\",\n        \"config_list\": [{\n                \"sparsity\": 0.8,\n                \"op_types\": [\"default\"]\n            }\n        ]\n    }\n\n**Example creation**::\n\n    aup.create_compressor(model, config, optimizer=None)\n\nSlim Pruner\n~~~~~~~~~~~\n\n**Configuration**::\n\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"slim\",\n        \"config_list\": [{\n                \"sparsity\": 0.8,\n                \"op_types\": [\"BatchNorm2d\"]\n            }\n        ]\n    }\n\n**Example creation**::\n\n    aup.create_compressor(model, config, optimizer=None)\n\nFPGM Pruner\n~~~~~~~~~~~\n\nThis pruner supports a dependency-aware mode to get better speed-up from the pruning. \n\n**Configuration**::\n\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"fpgm\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n  \n**Example creation**::\n\n    aup.create_compressor(model, config, optimizer=None, dependency_aware=False, dummy_input=None)\n\nL1Filter Pruner\n~~~~~~~~~~~~~~~\n\nThis pruner supports the dependency-aware mode.\n\n**Configuration**::\n\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"l1_filter\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n\n  \n**Example creation**::\n\n    aup.create_compressor(model, config, optimizer=None, dependency_aware=False, dummy_input=None)\n\nL2Filter Pruner\n~~~~~~~~~~~~~~~\n\nThis pruner supports the dependency-aware mode.\n\n**Configuration**::\n\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"l2_filter\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n  \n**Example creation**::\n\n    aup.create_compressor(model, config, optimizer=None, dependency_aware=False, dummy_input=None)\n\nActivationAPoZRankFilter Pruner\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThis pruner supports the dependency-aware mode.\n\n**Configuration**::\n\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"activation_apoz_rank_filter\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n  \n**Example creation**::\n\n    aup.create_compressor(model, config, optimizer=None, activation='relu', statistics_batch_num=1, dependency_aware=False, dummy_input=None)\n\nActivationMeanRankFilter Pruner\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThis pruner supports the dependency-aware mode.\n\n**Configuration**::\n\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"activation_mean_rank_filter\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n  \n**Example creation**::\n\n    aup.create_compressor(model, config, optimizer=None, activation='relu', statistics_batch_num=1, dependency_aware=False, dummy_input=None)\n\nTaylorFOWeightFilter Pruner\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThis pruner supports the dependency-aware mode.\n\n**Configuration**::\n\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"taylor_fo_weight_filter\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n  \n**Example creation**::\n\n    aup.create_compressor(model, config, optimizer=None, statistics_batch_num=1, dependency_aware=False, dummy_input=None)\n\nAGP Pruner\n~~~~~~~~~~\n\n**Special requirements for usage** (example)::\n\n    compressor = aup.compression.create_compressor(model, config, optimizer=optimizer)\n    model = compressor.compress()\n\n    for epoch in range(1, args.epochs + 1):\n        # ... train the model here for one epoch\n        compressor.update_epoch(epoch)\n \nUse ``compressor.update_epoch(epoch)`` to update epoch number when you finish one epoch in \nyour training code.\n\n**Configuration**::\n\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"agp\",\n        \"config_list\": [{    \n                \"initial_sparsity\": 0.0,\n                \"final_sparsity\": 0.8,\n                \"start_epoch\": 0,\n                \"end_epoch\": 10,\n                \"frequency\": 1,\n                \"op_types\": [\"default\"]\n            }\n        ]\n    }\n  \n**Example creation**::\n\n    aup.create_compressor(model, config, optimizer, pruning_algorithm='level')\n\nNetAdapt Pruner\n~~~~~~~~~~~~~~~\n\n**Configuration**::\n\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"net_adapt\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n  \n**Example creation**::\n\n    aup.create_compressor(model, config, short_term_fine_tuner, evaluator, optimize_mode='maximize', base_algo='l1', sparsity_per_iteration=0.05, experiment_data_dir='./')\n\nSimulatedAnnealing Pruner\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\n**Configuration**::\n\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"simulated_annealing\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n  \n**Example creation**::\n\n    aup.create_compressor(model, config, evaluator, optimize_mode='maximize', base_algo='l1', start_temperature=100, stop_temperature=20, cool_down_rate=0.9, perturbation_magnitude=0.35, experiment_data_dir='./')\n\nAutoCompress Pruner\n~~~~~~~~~~~~~~~~~~~\n\n**Configuration**::\n\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"auto_compress\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n  \n**Example creation**::\n\n    aup.create_compressor(model, config, trainer, evaluator, dummy_input, num_iterations=3, optimize_mode='maximize', base_algo='l1', start_temperature=100, stop_temperature=20, cool_down_rate=0.9, perturbation_magnitude=0.35, admm_num_iterations=30, admm_training_epochs=5, row=0.0001, experiment_data_dir='./')\n\nAMC Pruner\n~~~~~~~~~~\n\n**Configuration**::\n\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"amc\",\n        \"config_list\": [{\n                \"op_types\": [\"Conv2d\", \"Linear\"]\n            }\n        ]\n    }\n\n**Example creation**::\n\n    aup.create_compressor(model, config, evaluator, val_loader, suffix=None, model_type='mobilenet', dataset='cifar10', flops_ratio=0.5, lbound=0.2, rbound=1.0, reward='acc_reward', n_calibration_batches=60, n_points_per_layer=10, channel_round=8, hidden1=300, hidden2=300, lr_c=0.001, lr_a=0.0001, warmup=100, discount=1.0, bsize=64, rmsize=100, window_length=1, tau=0.01, init_delta=0.5, delta_decay=0.99, max_episode_length=1000000000.0, output_dir='./logs', debug=False, train_episode=800, epsilon=50000, seed=None)\n\nADMM Pruner\n~~~~~~~~~~~\n\n**Configuration**::\n\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"admm\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"],\n                \"op_names\": [\"conv1\"]\n            }, {\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"],\n                \"op_names\": [\"conv2\"]\n            }\n        ]\n    }\n  \n**Example creation**::\n\n    aup.create_compressor(model, config, trainer, num_iterations=30, training_epochs=5, row=0.0001, base_algo='l1')\n\nLottery Ticket Hypothesis Pruner\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n**Special requirements for usage** (example)::\n\n    compressor = aup.compression.create_compressor(model, config, optimizer=optimizer, lr_scheduler=scheduler)\n    model = compressor.compress()\n\n    for _ in compressor.get_prune_iterations():\n        compressor.prune_iteration_start()\n        for epoch in range(1, args.epochs + 1):\n            # ... train model here for one epoch\n\n**Configuration**::\n\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"lottery_ticket\",\n        \"config_list\": [{\n                \"prune_iterations\": 5,\n                \"sparsity\": 0.8,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n  \n**Example creation**::\n\n    aup.create_compressor(model, config, optimizer=None, lr_scheduler=None, reset_weights=True)\n\nSensitivity Pruner\n~~~~~~~~~~~~~~~~~~\n\n**Special requirements for usage** (example)::\n\n    compressor = aup.compression.create_compressor(model, config, finetuner=short_term_fine_tuner, evaluator=evaluator)\n    model = compressor.compress(eval_args=[model], finetune_args=[model])\n\nNotice the arguments passed to ``compressor.compress``.\n\n**Configuration**::\n\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"sensitivity\",\n        \"config_list\": [{\n                \"sparsity\": 0.5,\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    }\n  \n**Example creation**::\n\n    aup.create_compressor(model, config_list, evaluator, finetuner=None, base_algo='l1', sparsity_proportion_calc=None, sparsity_per_iter=0.1, acc_drop_threshold=0.05, checkpoint_dir=None)\n\nQuantizers\n----------\n\nNaive Quantizer\n~~~~~~~~~~~~~~~\n\n**Configuration**::\n\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"quantization\",\n        \"compressor\": \"naive\",\n        \"config_list\": []\n    }\n  \n**Example creation**::\n\n    aup.create_compressor(model, config)\n\nQAT Quantizer\n~~~~~~~~~~~~~\n\n**Configuration**::\n\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"quantization\",\n        \"compressor\": \"qat\",\n        \"config_list\": [{\n            \"quant_types\": [\"weight\"],\n            \"quant_bits\": {\n                \"weight\": 8\n            },\n            \"op_types\": [\"Conv2d\", \"Linear\"]\n        }, {\n            \"quant_types\": [\"output\"],\n            \"quant_bits\": 8,\n            \"quant_start_step\": 7000,\n            \"op_types\":[\"ReLU6\"]\n        }]\n    }\n\n  \n**Example creation**::\n\n    aup.create_compressor(model, config)\n\nDoReFa Quantizer\n~~~~~~~~~~~~~~~~\n\n**Configuration**::\n\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"quantization\",\n        \"compressor\": \"dorefa\",\n        \"config_list\": [{\n            \"quant_types\": [\"weight\"],\n            \"quant_bits\": 8, \n            \"op_types\": [\"default\"] \n        }]\n    }\n  \n**Example creation**::\n\n    aup.create_compressor(model, config)\n\nBNN Quantizer\n~~~~~~~~~~~~~\n\n**Configuration**::\n\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"quantization\",\n        \"compressor\": \"bnn\",\n        \"config_list\": [{\n                \"quant_bits\": 1,\n                \"quant_types\": [\"weight\"],\n                \"op_types\": [\"Conv2d\", \"Linear\"],\n                \"op_names\": [\"conv1\", \"conv2\", \"fc1\", \"fc2\"]\n            }, {\n                \"quant_bits\": 1,\n                \"quant_types\": [\"output\"],\n                \"op_types\": [\"relu\"],\n                \"op_names\": [\"relu1\", \"relu2\", \"relu3\"]\n        }]\n    }\n  \n**Example creation**::\n\n    aup.create_compressor(model, config)"
  },
  {
    "path": "docs/conf.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Configuration file for the Sphinx documentation builder.\n#\n# This file does only contain a selection of the most common options. For a\n# full list see the documentation:\n# http://www.sphinx-doc.org/en/stable/config\n\n# -- Path setup --------------------------------------------------------------\n\n# If extensions (or modules to document with autodoc) are in another directory,\n# add these directories to sys.path here. If the directory is relative to the\n# documentation root, use os.path.abspath to make it absolute, like shown here.\n#\nimport os\nimport sys\nsys.path.insert(0, os.path.abspath('../src'))\nimport aup\n\n# -- Project information -----------------------------------------------------\n\nproject = 'Auptimizer'\ncopyright = '2018, LG Electronics Inc.'\nauthor = 'LG Electronics Inc.'\n\n# The short X.Y version\nversion = aup.__version__\n# The full version, including alpha/beta/rc tags\nrelease = ''\n\n\n# -- General configuration ---------------------------------------------------\n\n# If your documentation needs a minimal Sphinx version, state it here.\n#\n# needs_sphinx = '1.0'\n\n# Add any Sphinx extension module names here, as strings. They can be\n# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom\n# ones.\nextensions = [\n    'sphinx.ext.autodoc',\n    'sphinx.ext.coverage',\n    'sphinx.ext.mathjax',\n    'sphinx.ext.viewcode',\n    'sphinx.ext.intersphinx',\n    'sphinx.ext.autosummary',\n    'sphinxcontrib.programoutput',\n    'sphinx.ext.autosectionlabel'\n]\n\n# Add any paths that contain templates here, relative to this directory.\ntemplates_path = ['_templates']\n\n# The suffix(es) of source filenames.\n# You can specify multiple suffix as a list of string:\n#\n#source_parsers = {\n#    '.md': 'recommonmark.parser.CommonMarkParser',\n#}\n\n#source_suffix = ['.rst', '.md']\nsource_suffix = '.rst'\n\n# The master toctree document.\nmaster_doc = 'index'\n\n# The language for content autogenerated by Sphinx. Refer to documentation\n# for a list of supported languages.\n#\n# This is also used if you do content translation via gettext catalogs.\n# Usually you set \"language\" from the command line for these cases.\nlanguage = None\n\n# List of patterns, relative to source directory, that match files and\n# directories to ignore when looking for source files.\n# This pattern also affects html_static_path and html_extra_path .\nexclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', 'wiki']\n\n# The name of the Pygments (syntax highlighting) style to use.\npygments_style = 'sphinx'\n\n\n# -- Options for HTML output -------------------------------------------------\n\n# The theme to use for HTML and HTML Help pages.  See the documentation for\n# a list of builtin themes.\n#\nhtml_theme = 'sphinx_rtd_theme'\n\nhtml_logo = \"images/AuptimizerWhiteLong.png\"\n\n# Theme options are theme-specific and customize the look and feel of a theme\n# further.  For a list of options available for each theme, see the\n# documentation.\n#\n# html_theme_options = {}\n\n# Add any paths that contain custom static files (such as style sheets) here,\n# relative to this directory. They are copied after the builtin static files,\n# so a file named \"default.css\" will overwrite the builtin \"default.css\".\nhtml_static_path = ['_static', 'archive']\n\n# Custom sidebar templates, must be a dictionary that maps document names\n# to template names.\n#\n# The default sidebars (for documents that don't match any pattern) are\n# defined by theme itself.  Builtin themes are using these templates by\n# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',\n# 'searchbox.html']``.\n#\n# html_sidebars = { '**': [ 'globaltoc.html','about.html','navigation.html','relations.html','searchbox.html',]}\n\n\n# -- Options for HTMLHelp output ---------------------------------------------\n\n# Output file base name for HTML help builder.\nhtmlhelp_basename = 'Auptimizerdoc'\n\n\n# -- Options for LaTeX output ------------------------------------------------\n\nlatex_elements = {\n    # The paper size ('letterpaper' or 'a4paper').\n    #\n    # 'papersize': 'letterpaper',\n\n    # The font size ('10pt', '11pt' or '12pt').\n    #\n    # 'pointsize': '10pt',\n\n    # Additional stuff for the LaTeX preamble.\n    #\n    # 'preamble': '',\n\n    # Latex figure (float) alignment\n    #\n    # 'figure_align': 'htbp',\n}\n\n# Grouping the document tree into LaTeX files. List of tuples\n# (source start file, target name, title,\n#  author, documentclass [howto, manual, or own class]).\nlatex_documents = [\n    (master_doc, 'Auptimizer.tex', 'Auptimizer Documentation',\n     'LG Electronics Inc.', 'manual'),\n]\n\n\n# -- Options for manual page output ------------------------------------------\n\n# One entry per manual page. List of tuples\n# (source start file, name, description, authors, manual section).\nman_pages = [\n    (master_doc, 'Auptimizer', 'Auptimizer Documentation',\n     [author], 1)\n]\n\n\n# -- Options for Texinfo output ----------------------------------------------\n\n# Grouping the document tree into Texinfo files. List of tuples\n# (source start file, target name, title, author,\n#  dir menu entry, description, category)\ntexinfo_documents = [\n    (master_doc, 'Auptimizer', 'Auptimizer Documentation',\n     author, 'Auptimizer', 'One line description of project.',\n     'Miscellaneous'),\n]\n\n# Additional\nadd_module_names = False\nmodindex_common_prefix = [\".\",\".aup.\",\"aup.\"]\n\n\n# -- Extension configuration -------------------------------------------------\n\nautodoc_inherit_docstrings = True\n\nhtml_theme_options = {\n    #'canonical_url': '',\n    #'analytics_id': 'UA-XXXXXXX-1',  #  Provided by Google in your dashboard\n    'logo_only': True,\n    'display_version': True,\n    'prev_next_buttons_location': 'bottom',\n    'style_external_links': False,\n    # 'vcs_pageview_mode': '',\n    #'style_nav_header_background': 'black',\n    # Toc options\n    'collapse_navigation': True,\n    'sticky_navigation': True,\n    'navigation_depth': 4,\n    'includehidden': True,\n    'titles_only': False\n}"
  },
  {
    "path": "docs/dashboard.rst",
    "content": "Auptimizer Dashboard\n====================\n\n**Dashboard** is a powerful analytics tool that complements Auptimizer's core hyperparameter optimization (HPO) and model compression capabilities. \n\nUse the Dashboard to:\n\n- **Supercharge the analysis of your HPO or model compression experiments.** The dashboard provides insightful visualizations to help you analyze and contrast jobs, experiments, and optimization approaches. Get to the root of your experiment results by exploring the interplay of hyperparameters, the progression of intermediate results, and the efficacies of different HPO algorithms.\n- **Get a snapshot of the information that matters.** Use the dashboard to track experiment progress and get clutter-free insights on the ongoing and completed experiments.\n- **Run your experiments with ease.** Create, launch or stop an experiment or even set up a new Auptimizer environment using the dashboard.\n\n\nLaunch the dashboard\n---------------------\nThere are two ways to launch the dashboard:\n\n1. In terminal, use the ``dashboard`` command to visualize an exisiting Auptimizer experiment that is currently running or has been completed::\n\n     dashboard --port <port_number> --path <path_to_database>\n\n   The ``port`` is the port number to show the dashboard on the local machine. The ``path`` should point to the database (default is `sqlite3.db`) for the corresponding experiment.\n\n2. Use the ``launch_dashboard`` flag and the ``dashboard_port`` flag (optional) when starting an HPO or compression experiment:: \n\n     python3 -m aup exp_config.json --launch_dashboard --dashboard_port <port_number>\n     python3 -m aup.compression exp_compression.json --launch_dashboard --dashboard_port <port_number>\n   \n   If ``dashboard_port`` is not provided, a random port will be assigned. The local host address will be shown in the console when the experiment starts.\n\n   **Important:** With this second approach, some dashboard functionalities, like starting a new experiment or restarting a past experiment, will be disabled. For full functionalities of the dashboard, please, use the first approach.\n\n\nTrack experiment status and visualize results\n---------------------------------------------\n\nMain page\n~~~~~~~~~\nWhen you open the dashboard in a web browser, you will first land on the main page with a list of completed and active experiments. This page presents the meta info of each experiment. \n\nYou can check the experiment configuration via the ``CONFIG`` button, and access detailed results via the ``RESULTS`` button. Here, you can also stop or start an experiment. \n\nThe page also offers a *tile view* layout that provides the same information as the *list view*.\n\n.. figure:: images/dashboard/main_page_list.png\n   :alt: main_page_list\n\n   Main Page List View\n\n.. figure:: images/dashboard/main_page_tile.png\n   :alt: main_page_tile\n\n   Main Page Tile View\n\nExperiment overview\n~~~~~~~~~~~~~~~~~~~\nThis page provides a summary of an experiment's status and the best result and corresponding best hyperparameters so far. \nYou can also select other experiments to view without going back to the main page.\n\n.. figure:: images/dashboard/overview.png\n   :alt: overview\n\n   Experiment Overview\n\nJob status\n~~~~~~~~~~\nThe Job Status page shows the status, result, and hyperparameters of each job. Job details are presented in a scatter plot and a table.\n\nBy default, the user-defined score used for HPO will be plotted for each job, while the best result over finished jobs is shown with a line. You can zoom in/out, \ncheck out details of each data point, and change the range of axes on the plot. Please refer to ``INTERACTION GUIDE`` for exploring the plot. If you return multiple \nmetrics in an experiment, the other metrics can be shown on this plot as well.\n\n.. figure:: images/dashboard/job_status_plot.png\n   :alt: job_status_plot\n\n   Job Status Plot\n\nThe job status table presents more detail for each job, including status, score, start/end time, all hyperparameters, etc. \nThe table can be sorted by each column and exported as xls/xlsx/csv/txt file.\n\n.. figure:: images/dashboard/job_status_table.png\n   :alt: job_status_table\n\n   Job Status Table\n\nHyperparameter interaction graph\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nThe hyperparameter interaction graph (HIG) is a parallel coordinate graph that is commonly used to show the interplay among different hyperparameters. \nEach vertical axis represents the range of one hyperparameter. You can interact with this graph by selecting certain hyperparameters, moving the \nvertical axes, highlighting certain ranges of one or multiple hyperparameters, etc. This HIG can provide more insights into the impact of each hyperparameter\non the evaluation metric.\n\n.. figure:: images/dashboard/hig.png\n   :alt: hig\n\n   Hyperparameter Interaction Graph\n\nIntermediate results\n~~~~~~~~~~~~~~~~~~~~\nIf you enable tracking intermediate results or use early stopping strategies, this page will show the intermediate \nresults plotted over time for the selected jobs within one experiment.\n\n.. figure:: images/dashboard/intermediate_results.png\n   :alt: intermediate_results\n\n   Intermediate Results\n\n\nMulti-experiment comparison\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\nYou can view the HPO progress for multiple experiments on this page. The best result for each experiment can be plotted\nover jobs or time. This can be particularly useful if you want to compare different HPO strategies.\n\n.. figure:: images/dashboard/multi_experiment.png\n   :alt: multi_experiment\n\n   Multi-Experiment Comparison\n\n\nCreate new experiment\n---------------------\nIn addition to visualizing the results of existing experiments, you can also use the dashboard to create and run new experiments. \nThere are two ways to do so:\n\n1. click on the ``CREATE NEW EXPERIMENT`` button on the main page, \n2. click on the ``Create experiment from copy`` button located on each experiment entry on the main page. \n\nBoth approaches will open the following page, where on the top you will need to specify your working directory for the\nnew experiment, and in the left panel, you can input the experiment configuration in json format. If you choose\n``Create experiment from copy``, the configuration json file of the selected experiment will be copied over to the left panel for \nfurther modification. The right panel is for validation purposes. You can check the argument values parsed from \nthe json file in the right panel to make sure everything in the configuration json file is correct.\n\n.. figure:: images/dashboard/create_experiment.png\n   :alt: create_experiment\n\n   Create New Experiment\n\nPlease review the ``INTERACTION GUIDE`` for a complete guide on setting up the experiment. After clicking on \nthe ``CREATE EXPERIMENT`` button, this experiment will be shown on top of the experiment list on the main page. You can \nclick on the ``START`` button to run the experiment.\n\nReset Auptimizer environment\n----------------------------\nYou can also reset the Auptimizer environment via the dashboard. After you click on the ``RESET AUPTIMIZER ENVIRONMENT`` button on the \nmain page, a software wizard will lead you through the Auptimizer environment set-up process. \n\n**Important:** the existing Auptimizer environment in the same working directory will be overwritten, which will erase existing databases. We \nsuggest the user back up their databases for finished experiments before resetting the Auptimizer environment in the same working directory.\n\n.. figure:: images/dashboard/setup_environment.png\n   :alt: setup_environment\n\n   Set Up Auptimizer Environment\n\nCompression experiments\n-----------------------\nFor **one-shot compression experiments**, as each experiment contains only one job and there are no hyperparameters to be tuned or visualized, the dashboard will have a few modifications:\n\n1. The `Experiment Overview` page will only show the experiment configuration instead of hyperparameters.\n2. The `Job status` page will only show one job.\n3. The `Hyperparameter Interaction Graph` page will not show a graph.\n4. The `Multi-Experiment Comparison` page will show one data point for the experiment.\n\nFor **automatic compression experiments**, the dashboard will function in the same way as for the HPO experiments. Note that in compression experiments, the hyperparameter names may not be explicitly specified\nin the configuration file. For example, the target sparsity for multiple layers might be a single hyperparameter. However, on the dashboard, the hyperparameter names will be rephrased for better clarity.\n\n.. figure:: images/dashboard/overview_compression.png\n   :alt: overview_compression\n\n   Experiment Overview for Automatic Compression experiments\n\n.. figure:: images/dashboard/hig_compression.png\n   :alt: hig_compression\n\n   Hyperparameter Interaction Graph for Automatic Compression experiments \n\nDark mode\n---------\nAll pages are also available in the *dark mode*.\n\n.. figure:: images/dashboard/dark_mode.png\n   :alt: dark_mode\n\n   Experiment Overview in Dark Mode"
  },
  {
    "path": "docs/demo.rst",
    "content": "Examples\n========\n\nAn easy way to get started with **Auptimizer** is to modify the demo code in the ``Examples`` folder.\n\n+-----------------------------------------+-------------------------+-------------------------------------------------------------------------------+\n| Example                                 | Folder                  | Purpose                                                                       |\n+=========================================+=========================+===============================================================================+\n| Basic Demo                              | ``demo``                | Tutorial                                                                      |\n+-----------------------------------------+-------------------------+-------------------------------------------------------------------------------+\n| `2D function with different HPOs`       | ``2dfunc_diff_opt``     | Show how to switch between different optimizers                               |\n+-----------------------------------------+-------------------------+-------------------------------------------------------------------------------+\n| `2D function with different resources`  | ``2dfunc_diff_res``     | Show how to switch between different resources                                |\n+-----------------------------------------+-------------------------+-------------------------------------------------------------------------------+\n| `MNIST DNN`                             | ``hpo_mnist``           | Show HPO usage for DNN                                                        |\n+-----------------------------------------+-------------------------+-------------------------------------------------------------------------------+\n| `Tensorflow flags`                      | ``tf_flags``            | Show how to integrate with Tensorflow Flags                                   |\n+-----------------------------------------+-------------------------+-------------------------------------------------------------------------------+\n| `Tensorflow Iris`                       | ``tf_iris_diff_opt``    | Show example on Iris data                                                     |\n+-----------------------------------------+-------------------------+-------------------------------------------------------------------------------+\n| `NAS integration`                       | ``cai_nas``             | Show how to do NAS (uses a publicly available open-source NAS implementation) |\n+-----------------------------------------+-------------------------+-------------------------------------------------------------------------------+\n| `Failure Control`                       | ``job_failure_control`` | Show job failure control cases                                                |\n+-----------------------------------------+-------------------------+-------------------------------------------------------------------------------+\n \n\nAuto convert\n~~~~~~~~~~~~\n\nIn example ``2dfunc_diff_opt``, the ``experiment_auto.json`` shows how experiment configuration is managed.\nThe user can use::\n\n  python -m aup.convert rosenbrock_origin.py experiment_auto.json rosenbrock\n\nto automatically convert the original file to the **Auptimizer** version.\nThe output file name is defined in ``experiment_auto.json`` as ``script``.\n\nManual modification\n~~~~~~~~~~~~~~~~~~~\n\nWe also provide a modified training script in example ``2dfunc_diff_opt`` for users' reference. In ``rosenbrock_hpo.py``, we show how to manually convert the function for tuning with **Auptimizer**.\n\nFor the end-user’s experiment, simply replacing the ``rosenbrock()`` function with their code is enough to use **Auptimizer** (**Need to return the score in that function**).\n\nExperiment configurations\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\nDifferent ``experiment*.json`` files in multiple examples illustrate how to specify the configuration for different HPO algorithms. Most of\nthem are identical. To set up a new experiment, please define the corresponding ``parameter_config`` in the ``JSON``\nfile.\n"
  },
  {
    "path": "docs/developer.rst",
    "content": "For Developers\n---------------------------\n.. toctree::\n   :maxdepth: 1\n\n   developer_guide\n   version\n   errors"
  },
  {
    "path": "docs/developer_guide.rst",
    "content": "Developer Guide\n===============\n\nFor Machine Learning development\n--------------------------------\n\n**Auptimizer** makes it a little easier to debug your experiment / job in the following ways.\n\nSet level of logging\n~~~~~~~~~~~~~~~~~~~~\n\nLogging can be activated using the :code:`--log` flag. (E.g. :code:`python -m aup <experiment> --log <level>`).\nThe following logging levels are available:\n\n1. **error** - everything stops the process\n2. **warn** - using default values\n3. **info** - progress update\n4. **debug** - everything else\n\nTest in passive mode\n~~~~~~~~~~~~~~~~~~~~\n\nChange :code:`resource` in :code:`experiment.json` to :code:`\"passive\"` and then run::\n\n    python -m aup <experiment config>\n\nBy doing so, **Auptimizer** will run in a passive mode where it interactively prints running script with its working\npath and asks for the returned value. You should run your script in a second terminal to see whether it finishes\ncorrectly. And then you can return that value back to **Auptimizer**\\'s command line.\n\nFor Auptimizer Software Development\n-----------------------------------\n\nEnvironment\n~~~~~~~~~~~\n\nEither use :code:`virtualenv`::\n\n    virtualenv testenv\n    source testenv/bin/activate\n    pip install -r requirements.txt\n    export PYTHONPATH=`pwd`:$PYTHONPATH\n\nor::\n\n    export PYTHONPATH=<repo folder>:$PYTHONPATH\n\nUnit testing\n~~~~~~~~~~~~\n\nIf you make changes to the **Auptimizer** code, you can run the included unit tests to make sure that you didn't break anything.\n\nIf it's the first time you are running these tests, do::\n\n    chmod u+x tests/EE/test_Job.py\n\nto set the correct permissions.  You can then run the tests using::\n\n    python -m unittest\n\n"
  },
  {
    "path": "docs/dlconvert.rst",
    "content": "Converter\n---------\n.. toctree::\n   :maxdepth: 1\n\n   dlconvert_readme\n   dlconvert_example"
  },
  {
    "path": "docs/dlconvert_example.rst",
    "content": "Examples\n========\n\nWe provide extensive examples to demonstrate Converter coverage and efficacy. Please check out `converter_examples <https://github.com/LGE-ARC-AdvancedAI/auptimizer/tree/master/Examples/converter_examples>`__ for detailed usages. We provide specific instructions for each example in the respective folder.\n\nEvaluating supported model architectures \n----------------------------------------\n`Tested_Models <https://github.com/LGE-ARC-AdvancedAI/auptimizer/tree/master/Examples/converter_examples/Tested_Models>`__ - This example evaluates common model architecture coverage by the individual conversion functions. It also summarizes known issues. **We strongly recommend that users review this example first before running their conversion tasks.**\n\nBenchmarking quantized TensorFlow Lite models on an Android phone\n-----------------------------------------------------------------\n`Convert_Benchmark <https://github.com/LGE-ARC-AdvancedAI/auptimizer/tree/master/Examples/converter_examples/Convert_Benchmark>`__ - This example demonstrates how to benchmark quantized TensorFlow Lite model performance (i.e. running time and memory usage) on an Android phone. Specifically, we converted models from a TensorFlow frozen protobuf file to a quantized .tflite file, and benchmarked their performance on an LG G6 mobile phone. \n\nThis example shows that models converted and quantized with Converter match the performance of the official quantized models provided in the `TensorFlow repo <https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md>`__.\n\nProfiling performances of converted models using Auptimizer Profiler\n--------------------------------------------------------------------\n`Convert_Profiler <https://github.com/LGE-ARC-AdvancedAI/auptimizer/tree/master/Examples/converter_examples/Convert_Profiler>`__ - This example demonstrates how to use Auptimizer-Profiler to profile TensorFlow or ONNX model performance on CPU. Performance benchmarking scripts are provided for TensorFlow and ONNX. \n"
  },
  {
    "path": "docs/dlconvert_readme.rst",
    "content": "How to use Converter\n====================\n\n**Converter** is a format conversion tool for machine learning models. It encapsulates best practices of individual Machine Learning model conversions under a single API.\n\nConverter allows you to:\n\n1. **Make your models edge device-friendly.** Transform models in Checkpoint (.meta), Keras (.h5/.hdf5), SavedModel (directory name), Protobuf (.pb), and Pytorch (.pt) into edge-optimized ONNX (.onnx) and TensorFlow Lite (.tflite) formats.\n\n2. **Enhance model interoperability through standardization.** Boost model compatibility with countless compilers, inference engines, and SoCs by converting it into the industry-standard ONNX format.\n\n3. **Get a smaller and faster model.** Make your model more compact and efficient by leveraging Quantization_ built into the TensorFlow Lite converter.\n\nThe following source model formats (and file extensions) can be converted to **TensorFlow Lite (.tflite)** and **ONNX (.onnx)**:  \n\n- **Checkpoint (.meta)**  \n- **Keras (.h5/.hdf5)**  \n- **SavedModel (directory name)**  \n- **Protobuf (.pb)**  \n- **PyTorch (.pt)**    \n\nAdditionally, Converter supports conversions:  \n\n- from Checkpoint to Protobuf\n- from Keras to Protobuf\n- from PyTorch to Keras\n\nTensorFlow 1.15, 2.1 - 2.3 and PyTorch 1.6.0 are tested. The conversion from SavedModel to TensorFlow Lite/ONNX requires TensorFlow version 2.x. Other conversions can be run using both TensorFlow 1.15 or 2.x. \n\nInstall\n-------\n\n*Note:* Converter leverages conversion libraries that have different version requirements (mainly for TensorFlow).\nIt is highly recommended to use Docker or Python's virtualenv to isolate your environment. \n\n1. Install Auptimizer  \n2. Install additional libraries for using Converter:  \n\n   If you would like to convert from Checkpoint/Keras/Protobuf/SavedModel model formats, please run: ``pip install keras2onnx tf2onnx``. If you would like to convert from PyTorch format, please run:``pip install pytorch2keras keras2onnx tf2onnx``\n\nUsage\n-----\n\n1. **Recommended:** Check whether your model architecture is supported for the target conversion `here <https://github.com/LGE-ARC-AdvancedAI/auptimizer/tree/master/Examples/converter_examples/Tested_Models>`__.\n\n2. **Important:** Ensure that you can load and run your model, otherwise you will not be able to convert it successfully.\n\n3. Specify conversion parameters. There are certain parameters to specify for each type of conversion. These parameters need to be written in a configuration *.json* file. You can list configurations for multiple model conversion tasks in a single .json file to execute model conversions sequentially.   \n   \n   An example configuration for converting a VGG16 Keras model to ONNX is as follows::\n    \n    {\n        \"convert_from\":\"test_models/VGG16.h5\",\n        \"convert_to\":\"converted_models/VGG16_keras.onnx\",\n    }\n\n4. After preparing the configuration .json file, run the following command to start the conversions::\n\n    python -m aup.dlconvert -f <configuration json file> \n\n  Alternatively, you can also write the configuration in a *json dictionary* format, and run ::\n\n    python -m aup.dlconvert -d <configuration json dictionary> \n\n\n\nParameters\n----------\n\nFor **all** conversions, the two required parameters are **convert_from** and **convert_to**.\n\nFor each specific conversion, there can be additional parameters needed. These parameters are usually dependent on the source- and target model formats, and are summarized in the following chart:\n\n\n+------------+----------------+--------------+-------------+--------------+-----------------+-------------+------------+------------+----------------------+\n|  | From    || To            || quantization|| input_nodes|| output_nodes| | network_script|| input_shape|| onnx_opset|| frozen    || savedmodel_tag      |\n|            |                |              |             |              | | network_name  |             |            |            || savedmodel_signature|         \n+============+================+==============+=============+==============+=================+=============+============+============+======================+\n| Keras      |TensorFlow Lite | Optional     |             |              |                 |             |            |            |                      |  \n+------------+----------------+--------------+-------------+--------------+-----------------+-------------+------------+------------+----------------------+\n| SavedModel |TensorFlow Lite | Optional     |             |              |                 |             |            |            |                      |\n+------------+----------------+--------------+-------------+--------------+-----------------+-------------+------------+------------+----------------------+\n| Checkpoint |TensorFlow Lite | Optional     | Required    |Required      |                 | Optional    |            |            |                      |\n+------------+----------------+--------------+-------------+--------------+-----------------+-------------+------------+------------+----------------------+\n| Protobuf   |TensorFlow Lite | Optional     |Required     | Required     |                 | Optional    |            |            |                      |\n+------------+----------------+--------------+-------------+--------------+-----------------+-------------+------------+------------+----------------------+\n| PyTorch    |TensorFlow Lite | Optional     |             |              |Required         |Required     |            |            |                      |\n+------------+----------------+--------------+-------------+--------------+-----------------+-------------+------------+------------+----------------------+\n| Keras      |ONNX            |              |             |              |                 |             |Optional    |            |                      |\n+------------+----------------+--------------+-------------+--------------+-----------------+-------------+------------+------------+----------------------+\n| SavedModel |ONNX            |              |             |              |                 |             |Optional    |            | Optional             |\n+------------+----------------+--------------+-------------+--------------+-----------------+-------------+------------+------------+----------------------+\n| Checkpoint |ONNX            |              |Required     | Required     |                 | Optional    |Optional    |            |                      |\n+------------+----------------+--------------+-------------+--------------+-----------------+-------------+------------+------------+----------------------+    \n| Protobuf   |ONNX            |              |Required     | Required     |                 | Optional    |Optional    |            |                      |\n+------------+----------------+--------------+-------------+--------------+-----------------+-------------+------------+------------+----------------------+ \n| PyTorch    |ONNX            |              |             |              | Required        |Required     | Optional   |            |                      |\n+------------+----------------+--------------+-------------+--------------+-----------------+-------------+------------+------------+----------------------+\n| Keras      |Protobuf        |              |             | Required     |                 |             |            |Optional    |                      |\n+------------+----------------+--------------+-------------+--------------+-----------------+-------------+------------+------------+----------------------+\n| Checkpoint |Protobuf        |              |             | Required     |                 |             |            |Optional    |                      |\n+------------+----------------+--------------+-------------+--------------+-----------------+-------------+------------+------------+----------------------+\n| PyTorch    |Keras           |              |             |              | Required        | Required    |            |            |                      |\n+------------+----------------+--------------+-------------+--------------+-----------------+-------------+------------+------------+----------------------+\n\n\n``convert_from``\nRequired for **all** conversions. Input model file with one of the supported extensions: `.meta`, `.h5/.hdf5`, `.pb`, `.pt`, or a directory path for SavedModel.  \n\n``convert_to``  \nRequired for **all** conversions. Output model name with one of the supported extensions: `.tflite`, `.onnx`, `.pb`, or `.h5/.hdf5`.  \n\n.. _Quantization:\n\n``quantization``\nParameter *quantization* includes a group of parameters used for enabling quantization while converting to TensorFlow Lite format. Post-training quantization is a built-in functionality of the TensorFlow Lite Converter. The Converter API supports calling this functionality.\n\nTo specify quantization parameters, write in the configuration .json file::\n\n   {\n        \"convert_from\":\"test_models/VGG16.h5\",\n        \"convert_to\":\"converted_models/VGG16_keras.tflite\",\n        \"quantization\": {\n            \"optimization\":\"default\",\n            \"type\":\"float16\",\n            \"opsset\":\"tf\",\n            \"load\":\"repdata.py\"\n        }\n    }\n\nMore detail on post-training quantization capabilities and parameter setting can be found in `Post-training quantization <https://www.tensorflow.org/lite/performance/post_training_integer_quant#convert_to_a_tensorflow_lite_model>`__\n\n``optimization``\nEnable/disable quantization for conversion. Choose from `none` or `default`. Default is `none`. When using `none`, no quantization will be performed and the converted TensorFlow Lite model will be in float32 format. When using `default`, best practices will be applied for quantization with the other given information via `--type`, `--opsset`, and `--load`.\n\n``type``  \nTarget data type for constant values of the converted TensorFlow Lite model. Choose from `float32`, `float16`, `int8`,and `uint8`. Default is `float32`. \n\n``opsset``  \nSet of OpsSet options supported by the target device (experimental). Choose from\n\n1. `tflite`, which refers to `[tensorflow.lite.OpsSet.TFLITE_BUILTINS]`  \n2. `tf`, which refers to `[tensorflow.lite.OpsSet.SELECT_TF_OPS, tensorflow.lite.OpsSet.TFLITE_BUILTINS]`  \n3. `int8`, which refers to `[tensorflow.lite.OpsSet.TFLITE_BUILTINS_INT8]`\n\nDefault is `tflite`. \n\n``load``\nA python script that implements a data generation function that generates representative data for quantizing variable data, such as feature maps. The function should be named `get_dataset`, and it should be a generator function that yields large enough dataset to represent typical data values. Check `representative data <https://github.com/LGE-ARC-AdvancedAI/auptimizer/tree/master/Examples/converter_examples/Convert_Benchmark/repdata.py>`__ for example.\n \n``input_nodes``  \nModel input names (separated by comma), which can be found with `summarize graph tool <https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/graph_transforms#inspecting-graphs>`__. Those names typically end with `:0`, for example `input:0`.\n\n``output_nodes`` \nModel output names (separated by comma). which can be found with `summarize graph tool <https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/graph_transforms#inspecting-graphs>`__. Those names typically end with `:0`, for example `output/Softmax:0`.\n\n``input_shape`` \nIf the `input_nodes` in *protobuf* or *checkpoint* has unspecified shapes other than the 1st dimension, the `input_shape` needs to be specified by a comma separated string, for example `1,3,224,224`. For multiple `input_nodes`, use `;` to separate their corresponding `input_shape`.  \nThe shape of `input_nodes` can also be checked using the `summarize graph tool <https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/graph_transforms#inspecting-graphs>`__, where unspecified shape is usually represented by **-1**. \n\n``network_script`` \nPath to a Python script that contains the model definition of the PyTorch model to be converted.\n\n``network_name``  \nClass name of the model to be converted, defined in the script specified in `network_script` .\n\n``onnx_opset``  \nOpset version to use for ONNX. Default is `10`. The ONNX opset version updates can be found in `ONNX release notes <https://github.com/onnx/onnx/releases>`__.\n\n``frozen``  \nFlag to control whether to create a frozen Protobuf. Default is `True`.  \n\n``savedmodel_tag``  \nTag to use for SavedModel. Default is `serve`. The SavedModel to be converted *cannot have an emtpy tag*.\n\n``savedmodel_signature``  \nSignature to use for SavedModel within the specified `--tag` value. Default is `serving_default`. The SavedModel to be converted *cannot have an emtpy signature*.\n\n``skip``\nThis parameter is for converting selected models when there are multiple conversion configurations in the json file. When set to `True`, the model will be skipped and not be converted. Default is `False`. \n\nKnown Issues\n------------\n1. Limited support on certain model architectures\n2. Quantization for TensorFlow Lite conversion can lead to `significant accuracy loss <https://github.com/tensorflow/tensorflow/issues/40000>`__"
  },
  {
    "path": "docs/early_stop.rst",
    "content": "Early Stopping\n==============\n\nEarly stopping (ES) strategies provide increased efficiency for HPO algorithms by reducing the computational cost. This is \ndone by detecting the poor performance of certain hyperparameter settings early in the training and stopping the corresponding jobs. \nAs a result, better hyperparameter configurations can be found sooner with reduced compute resources. \n\nES is especially useful in the context of deep learning where the search space grows exponentially over increasing hyperparameters. \nES strategies provide users with advanced tools to aggressively explore larger search spaces over limited resources, \nwith tradeoffs between HPO speed and final model performance. \n\nAuptimizer provides 4 popular ES strategies namely – Bandit, Median, Truncation and Curve-Fitting, which can be applied to all Proposers.\nThe Bandit, Median and Curve-Fitting strategies are inspired by the following papers, while the Truncation strategy is provided to be used\nas a benchmark for other ES strategies: \n\n===============  ==============================================================================================================================================================================================================\nStrategy         Algorithm\n===============  ==============================================================================================================================================================================================================\nBandit           `HYPERBAND: Bandit-Based Configuration Evaluation For Hyperparameter Optimization <https://openreview.net/pdf?id=ry18Ww5ee>`__\nMedian           `Google Vizier: A Service for Black-Box Optimization <https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/46180.pdf>`__\nCurve-fitting    `Speeding up Automatic Hyperparameter Optimization of Deep Neural Networks by Extrapolation of Learning Curves <http://aad.informatik.uni-freiburg.de/papers/15-IJCAI-Extrapolation_of_Learning_Curves.pdf>`__\n===============  ==============================================================================================================================================================================================================\n\nUsage\n@@@@@\n\nThe feature can be used by adding the following parameter to the experiment configuration file::\n\n  \"resource_args\": {\n    \"early_stop\":\n        {\n            \"aup_policy\": \"bandit\",\n            \"aup_policy_steps\": 5\n            ...\n        }\n   }\n   \n+ ``aup_policy``: the early stopping strategy in [\"bandit\", \"median\", \"truncation\" or \"curve_fitting\"]. \n+ ``aup_policy_steps``: integer, the interval of epochs, by which the intermediate results are compared among jobs and the ES policy is applied.\n\n``aup_policy`` and ``aup_policy_steps`` are the two parameters required for all ES strategies. There are also strategy-specifc parameters, which will be introduced below.\n\nIn order to track the intermediate results to be used in ES, ``aup.print_result`` should be called from the user script in the training loop, e.g.::\n  \n  def main(*args, **kwargs):\n    # model and data preparation code\n    for epoch in range(10):\n        # training code for one epoch\n        aup.print_result(res)\n\nExamples can be found in Auptimizer Gibhub repository at ``Examples/early_stopping/quad_equation_min`` and ``Examples/early_stopping/mnist_keras``. \n\nAdditionally, when using ES, the ``track_intermediate_results`` feature will be triggerd automatically. This means that the resulting intermediate results will be stored in the database in the ``intermediate_results`` table and \ncan be visualized via dashboard. This also means that the presence of ``track_intermediate_results`` in the experiment configuration file with any value, even false, will be ignored. \n\nAn optional parameter of ``warmup`` can also be used for all ES strategies (default is 0). ``warmup`` defines the number of initial epochs that should finish before the ES strategy starts to apply.\n\n\nStrategies\n@@@@@@@@@@\n\nBandit\n~~~~~~~\n\nThe bandit policy stops jobs that have a result lower than a specified percentage of the global best result of all jobs. This percentage is defined by the parameter ``bandit_factor``. The result to be compared among jobs is the best result obtained by \nthe job up to the same epoch.\n\nExample::\n\n    \"resource_args\": \n    {\n        \"early_stop\":\n        {\n            \"aup_policy\": \"bandit\",\n            \"aup_policy_steps\": 10,\n            \"bandit_factor\": 0.5\n        }\n    }\n\nIn this example, we stop jobs with the best result which is worse than 0.5 of the global best result. \nThis comparison and job cut-off is carried out every 10 epochs. \nDefault value for ``bandit_factor`` is 0.5, with higher values indicating more aggressive ES strategy.\n\n\nTruncation\n~~~~~~~~~~\n\nThe truncation policy cuts a fraction of the worst performing jobs, based on the jobs' best result obtained up to the same epoch. The fraction is specified by the parameter ``truncation_percentage``.\n\nExample::\n\n    \"resource_args\": \n    {\n        \"early_stop\":\n        {\n            \"aup_policy\": \"truncation\",\n            \"aup_policy_steps\": 10,\n            \"truncation_percentage\": 0.6\n        }\n    }\n    \nThis example stops 60% of the jobs every 10 epochs. Default value for ``truncation_percentage`` is 0.3, with higher values indicating more aggressive ES strategy. \n\n\nMedian\n~~~~~~~\n\nThe median policy stops the jobs that yield worse results than the median of the running average of results of all jobs up to the same epoch. \n\nExample::\n\n    \"resource_args\": \n    {\n        \"early_stop\":\n        {\n            \"aup_policy\": \"median\",\n            \"aup_policy_steps\": 10\n        }\n    }\n    \n\nCurve Fitting\n~~~~~~~~~~~~~~\n\nThe curve fitting policy attempts to fit each job's history to a weighted combination of multiple, pre-selected functions, in order to predict its final (best) value. It then stops jobs that fail to attain at least a threshold of the best overall result across all jobs. The implementation is adapted from `NNI <https://github.com/microsoft/nni/blob/master/docs/en_US/Assessor/CurvefittingAssessor.md>`__.\n\n**Caveats:** the biggest downside to curve fitting is that it is usually time-consuming. This makes curve fitting less applicable for small datasets, or tasks that train quickly. In order to address this issue, users should always provide a timeout for the maximum time allowed for each curve fitting process (default: 30s). After the specified time has run out, the curve-fitting process will be stopped and the last result obtained will be used. The longer the timeout, the better the results.\n\nExample::\n\n    \"resource_args\": \n    {\n        \"early_stop\":\n        {\n            \"aup_policy\": \"curve_fitting\",\n            \"aup_policy_steps\": 10,\n            \"curve_fitting_threshold\": 0.95,\n            \"curve_fitting_timeout\": 60\n        }\n    }\n\nExample for scripts that use ``aup.print_result`` for result reporting instead::\n\n    \"resource_args\":\n    {\n        \"early_stop\":\n        {\n            \"aup_policy\": \"curve_fitting\",\n            \"aup_policy_steps\": 10,\n            \"curve_fitting_threshold\": 0.95,\n            \"curve_fitting_timeout\": 60,\n            \"curve_fitting_max_iters\": 100\n        }\n    }\n    \nDefault values for ``curve_fitting_threshold``, ``curve_fitting_timeout`` are 0.95 and 60. ``curve_fitting_max_iters`` defaults to None.  \n"
  },
  {
    "path": "docs/edge.rst",
    "content": "Edge Deployment Tools\n---------------------\n.. toctree::\n   :maxdepth: 1\n\n   profiler.rst\n   dlconvert.rst"
  },
  {
    "path": "docs/environment.rst",
    "content": "Set up environment\n==================\n\n**Auptimizer** needs to be initialized properly before use, either through `python -m aup.setup` for interactive setup or `python -m aup.setup <config.ini>` with the specified configuration file. \\\n**We recommend users use the interactive setup when using auptimizer for the first time**.\n\nThe configuration file is used to set up **all** environment-related information for **Auptimizer**, such as number of CPUs, GPUs, or remote servers.\nAll your experiments and jobs will use the configuration.\n\nConfiguration Options\n---------------------\n\nTwo templates can be found at :code:`Examples/2dfunc_diff_res/*.ini`.\nThe detailed options are as follows.\n\nEnvironment Template File (\\*.ini)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nFor a normal workstation, an example template is at :code:`Examples/2dfunc_diff_res/env_user_template.ini` for direct use. The command below will create a user environment profile (at `~/.aup/env.ini`) for quick-start::\n\n  python -m aup.setup ./Examples/2dfunc_diff_res/env_user_template.ini\n\nor to create a local environment folder for a particular experiment (in working folder `./.aup/env.ini`), use::\n\n  python -m aup.setup ./Examples/2dfunc_diff_res/env_local_template.ini\n\nThe content of the template is the following:\n\n+------------------+-----------------------------+--------------------------------------+\n| Name             | Purpose                     | Default value                        |\n+==================+=============================+======================================+\n| Auptimizer_PATH  | configuration folder for    | ``.aup``                             |\n|                  | Auptimizer, containing this |                                      |\n|                  | ``env.ini`` file and        |                                      |\n|                  | database file               |                                      |\n+------------------+-----------------------------+--------------------------------------+\n| SQL_ENGINE       | database engine, currently  | ``sqlite``                           |\n|                  | only supports sqlite        |                                      |\n+------------------+-----------------------------+--------------------------------------+\n| TMP_FOLDER       | temp folder for logging /   | ``/tmp/aup`` or ``./aup_tmp``        |\n|                  | scratch                     |                                      |\n+------------------+-----------------------------+--------------------------------------+\n\nAvailable resources for model training are specified by additional arguments, or via interactive questions.\n\n========= ======== =====================================================================================================\nArgument  Default  Details\n========= ======== =====================================================================================================\n--aws     none     a file containing ``user@instance-id``, or a comma-separated list\n--cpu     4        Number of processors to use on a single machine.\n--gpu     none     a file containing the GPU id number on a machine, or a comma-separated list.\n--node    none     a file containing ``user@IP`` for training, or a comma-separated list\n========= ======== =====================================================================================================\n\nAWS Mapping Configuration (--aws)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n**Auptimizer** has the capability to start and stop AWS instances and assign jobs dynamically to the instances depending\non availability. To allow fragmented resource utilization within the AWS instance, edit the resources available to\n**Auptimizer** when installing it on the remote instance.\n\n1. To use the Auptimizer’s AWS option, install and configure `boto3 <https://pypi.org/project/boto3/>`_ and ensure your AWS\ninstances can be accessed with boto3. Then proceed to `install configure AWS\nCLI <https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html>`_.\n\n2. To run jobs on multiple AWS instances, we need to specify an AWS mapping file with `--aws <aws_mapping_file>`. \nSimilar to the above-mentioned node case, `<aws_mapping_file>` is a text file containing the username, AWS instance id\nand the SSH key file (.pem file).\n\nThe format of the file must be one of the following:\n\n  + `<username>@<instance_id> <ssh_key_file>`\n  + `<username>@<instance_id>`\n  + `<username>@<instance_id>:port`\n  + `<username>@<instance_id>:port <ssh_key_file>`\n\nwith each instance on a separate line, or if you setup the configuration interactively, you can provide them as\ncomma-separated values. The ``username`` is the one used to log into the instance.  The ``instance_id`` can be the EC2\ninstance ID, IP, or public DNS.\n\nRefer to ``Examples/2dfunc_diff_res/aws.txt`` for an example.\n\n3. Either you need to install **Auptimizer** on every node, or you need to copy ``<repo>/src/aup.py`` to your remote working\ndirectory.\n\n4. Finally, the environment of the instances might be *sourced* correspondingly for environment variables, e.g. ``PATH``.  For\ninstance, if you want to activate virtualenv on the instance before job running, use `prescript` in experiment.json (See\n:ref:`AWSRuntimeAnchor` for more detail).\n\n\nCPU Configuration (``--cpu``)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nWe can specify how many parallel jobs to be run on CPUs.\nThe current implementation does **NOT** provide real isolation of hardware.\n\nGPU Mapping Configuration (``--gpu``)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nTo run jobs on multiple GPUs, we need to specify a GPU mapping file with ``--gpu <gpu_mapping_file>``.\nThis file is a text file containing the IDs of GPU cards to use (in ``CUDA_VISIBLE_DEVICES``).\nSpecifically, each line contains a GPU id as an integer.\n\n+ For single GPU without parallel execution, use ``Examples/2dfunc_diff_res/plainGPU.txt``.\n+ Assign multiple jobs to run on the same device by assigning multiple\n  resource IDs to the same GPU id, i.e. ``0,0``). See ``Examples/2dfunc_diff_res/singleGPU.txt``.\n+ Assign multiple jobs on different GPUs on a local machine, i.e.::\n    \n    0\n    1\n\n  See ``Examples/2dfunc_diff_res/twoGPUs.txt``.\n\nNode Mapping Configuration (``--node``)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nSimilar to GPU mapping, users can specify the computing nodes to be used with ``--node <node mapping file>`` during setup\n\nA node configuration file contains each node per line (e.g., ``username@hostname``.)\nAn SSH connection without password authentication is required\n(use ``ssh-keygen`` to create keyless access).\n\nThe format of the file must be one of the followings:\n\n+ `<username>@<IP> <ssh_key_file>`\n+ `<username>@<IP>`\n+ `<username>@<IP>:port`\n+ `<username>@<IP>:port <ssh_key_file>`\n\nwith each instance on a separate line, or if you setup the configuration interactively, you can provide them as\ncomma-separated values.\n\nFor remote execution, **Auptimizer** will not copy all job-related files to the remote machine.  User should make sure\nthe job script can run on the remote machine first.\n\nRefer to ``Examples/2dfunc_diff_res/node.txt`` for an example.\n\n\nEither you need to install **Auptimizer** on every node, or you need to copy ``<repo>/src/aup.py`` to your remote working\ndirectory.\n\nOptional arguments\n~~~~~~~~~~~~~~~~~~\n\n+ ``--overwrite`` - overwrite existing ``.aup`` folder. Otherwise, do nothing\n+ ``--log`` - choose log level from ``[debug,info,warn,error]``\n+ ``--user`` - not used. It specifies the user ownership for experiments.\n\nExamples\n~~~~~~~~\n\nPlease refer to ``Examples/2dfunc_diff_res/README.md`` for examples of \nhow to use different resources with **Auptimizer**.\n\n\nDatabase Setup\n--------------\n\nDuring the setup, **Auptimizer** creates a SQL database to track the jobs and experiments (currently\nonly ``sqlite`` is supported).\nTypically, users do not need to manually access it.\nHere we provide a little more detail for users to retrieve additional records for their analyses.\n\nThe database schema is described below:\n\n.. figure:: images/schema.png\n   :alt: SQL Schema\n\n   SQL Schema\n\nRefresh tables\n~~~~~~~~~~~~~~\n\nTo (re)create the database, users just need to follow the command printed\nafter ``python -m aup.setup``::\n\n  python -m aup.setupdb .aup/env.ini\n\nThis will parse the ``.aup/env.ini`` file to create the new database.\n\nRefresh tables with additional modification\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe following argument can be customized by changing it in the\nheadings or from the command line to overwrite the ``aup.setup`` configuration:\n\n+-----------------------+-----------------------+-----------------------+\n| Name                  | Purpose               | Default value         |\n+=======================+=======================+=======================+\n| --cpu                 | Number of CPUs to be  | 4                     |\n|                       | used.                 |                       |\n+-----------------------+-----------------------+-----------------------+\n| --name                | Name for resources    | “localhost” ,         |\n|                       |                       | Currently not in use. |\n+-----------------------+-----------------------+-----------------------+\n| --user                | username for          | Currently not in use. |\n|                       | experiment tracking   |                       |\n|                       | and control           |                       |\n+-----------------------+-----------------------+-----------------------+\n\nFor example, if user wants to set maximum 2 jobs to be run on CPU in\nparallel, under name ``test``::\n\n    python -m aup.setupdb <path to env.ini> --cpus 2 --user test\n\nThen you can see the allocated ``resource`` table as::\n\n    echo \"select * from resource;\" | sqlite3 .aup/sqlite3.db\n\n    1|test|gpu|free\n    2|test|cpu|free\n    3|test|cpu|free\n    4|test|passive|free\n\nReset\n-----\n\nTo reset the history of **Auptimizer** experiments, there are two levels.\n\nFull reset\n~~~~~~~~~~\n\nRemoving :code:`.aup` folder will completely remove all history saved by **Auptimizer** as well as any configurations.\n\nUsing ``python -m aup.setup --overwrite <config.ini>`` will overwrite the existing folder and remove only the history.\n\nDatabase reset\n~~~~~~~~~~~~~~\n\nCurrently, **Auptimizer** experiments and jobs history is saved in ``.aup/sqlite.db`` database. There are two levels to reset the database itself.\n\nReset all\n@@@@@@@@@\n\nWe can also just refresh the database for the history by resetting the database file.\n\nUse (locally in working folder)::\n\n  python -m aup.setupdb .aup/env.ini\n\nor (user account-wise)::\n\n  python -m aup.setupdb ~/.aup/env.ini\n\nReset job status\n@@@@@@@@@@@@@@@@\n\nSometimes, when **Auptimizer** accidentally exits, the resources are not marked as free in the database and will prevent\nyou from using them within **Auptimizer**.  In such scenarios, you might want to reset the status of resources by::\n\n  python -m aup.setupdb.reset env.ini\n"
  },
  {
    "path": "docs/errors.rst",
    "content": "Errors and Solutions\n====================\n\nSetup stage\n-----------\n\n+ ``Failed to load environment template %s using ConfigParser``\n\n  Check the input ``env.ini`` template for potential mistakes or typos.\n\n+ ``SQL engine XXX is not implemented``\n\n  Currently only ``sqlite`` is supported.\n\n+ ``Cant' find XXX file for resource XXX``\n\n  The resource file is not found for Auptimizer\n\n+ ``Error while finding module specification for XXX``\n\n  XXX can be either ``aup.init`` or ``aup.setup``.  Double check whether you put the `aup.py` file for remote execution in your PYTHONPATH instead of the `aup` package.\n\nRun Experiment\n--------------\n\n+ Sometimes, when **Auptimizer** accidentally exits, the resources are not marked as free in the database and will prevent you from using them within **Auptimizer**.  In such scenarios, you might want to reset the status of resources by::\n\n    python -m aup.setupdb.reset env.ini"
  },
  {
    "path": "docs/experiment.rst",
    "content": "Create and run a new experiment\n===============================\n\n**Auptimizer** only needs a modified training script and an experiment configuration file (.json) to run a new experiment. \n\n1. Create the ``experiment.json`` file to specify the experiment configuration and hyperparameters. Using ``python -m aup.init`` will guide you interactively. This json file structure is generally the same for most algorithms with minor modifications. See :doc:`algorithm` for more details. \n\n2. Modify your training script. We provide three approaches for modifying the training script:\n\n   + `Manual conversion <#manual-modification-of-training-code>`_;\n   + `Python decorator <#code-conversion-with-decorator>`_;\n   + `Auto conversion for script (beta) <#auto-code-conversion>`_.  \n\n3. Your experiment is now ready to run via ``python -m aup experiment.json``. For more details, see `Run experiment`_. \n\nTerminology\n-----------\n\nFor data science applications, the **user** (AI scientist/engineer) solves a given data mining problem with a specified\nmachine learning model.\n\nA script (**code**) is written and some hyperparameters are identified to be explored during model training.\n\nTypically, the user carries out an **experiment** to examine a range of hyperparameter combinations  and measures the\n**performance** of the model on a hold-out dataset. For example, testing a deep learning model by exploring the learning\nrate between 0 and 1, and dropout between 0.4 and 0.6. the performance is measured by accuracy.\n\nEach individual training process for a given selection of hyperparameters (e.g., learning rate = 0.1, dropout = 0.5)  is\ncalled a **job**.\n\nAll jobs run on an assigned computational **resource**, e.g. CPU, GPU. And after all jobs are finished, the user\nretrieves the best model from the training history for further analysis or application.\n\nManual modification of training code \n------------------------------------\n\nIf you plan to change your training script manually, the general flow of the conversion process is as follows: \n\n  a. parse the configuration file (first argument from command line, i.e. ``sys.argv[1]``) using ``aup.BasicConfig.load(sys.argv[1])``.  And use the hyperparameters parsed from the ``BasicConfig`` in your code, such as ``config.param_name`` or ``config['param_name']``, where ``param_name`` need to be consistent with the one  used in ``experiment.json``.\n  b. to report the result by using ``aup.print_result``.\n  c. Add Shebang line ``#!/usr/bin/env python`` and make the script executable (``chmod u+x script.py``).\n\nCode conversion with decorator\n------------------------------\n\nFor better control, you can use `aup_args` or `aup_flags` to decorate your code.  The examples are in below:\n\n\n.. figure:: images/comparison.png\n   :alt: Code comparison\n\n   Example of using decorator for code conversion.\n\nAuto code conversion\n--------------------\n\nIf your training function takes all hyperparameters as input, then  **Auptimizer** converts code to run if the training script is well defined as follows::\n\n  python -m aup.convert <script> <exp_json> <func_name> -o [output]\n\n* ``script`` the original script used for training, it must contain the function with name ``func_name``.  Also no \"__main__\" inside the script.\n* ``exp_json`` experiment configuration defined by the user.  It must contain the hyperparameters used by ``func_name``.\n* ``func_name`` the entry function used for training. It uses all hyperparameters defined in ``exp_json``. All other inputs need to be optional and not overlapping with the hyperparameter names.\n* ``output`` optional name for output ``code``.  If not specified, it creates a file with the name specified in ``exp_json``.\n\nCheck out the folder ``Examples/2dfunc_diff_opt/README.md`` in the repository for example usage.\n\nRun experiment\n--------------\n\nOnce the experiment has been correctly set up, it is very easy to start the experiment::\n\n  python -m aup experiment.json\n\nAdditional arguments\n~~~~~~~~~~~~~~~~~~~~\n\n+ ``--test``: will run in test mode by executing one job\n+ ``--aup_folder``: manually specify the ``.aup`` folder\n+ ``--log``: set log level to ``[debug,info,warn,error]``\n+ ``--resume``: path to a pickled file saved by a previous experiment, will resume experiment from previous saved proposer state\n+ ``--sleep``: time delay for sequential jobs (avoid database collision)\n\n.. _AWSRuntimeAnchor:\n\nAdditional runtime configuration for Node/AWS\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe user should either have Auptimizer installed on the remote machine, or at a minimum, copy the ``<repo>/src/aup.py`` script to the remote machine that can be imported by the jobs.\n\nAdditional configuration for node/AWS environment for runtime can be specified under the ``runtime_args`` in the ``experiment.json``.\nThis is important for setting up the environment on the remote machine.\nThe specific arguments are:\n\n+ ``prescript``: any script to be run before the job. (use ; to separate different commands)\n+ ``postscript``: any script to be run after the job.\n+ ``overwrite``: remove the existing job file if exists.  Otherwise, it will use the existing file on the node.\n+ ``env``: other environment variables, listed as dictionary `{\"CUDA_VISIBLE_DEVICES\":\"0\"}`\n\nOther resource-related arguments are under ``resource_args``:\n\n+ ``reconn_wait_time``: number of seconds to wait if SSH open connection is broken, before reconnecting.  Default is 30 (seconds).\n+ ``max_retries``: number of retry attempts, with 'reconn_wait_time' seconds before the job is tagged as failed. Default is 3.\n+ ``async_run``: whether to run the job asynchronously on the remote instance. This will allow Auptimizer to run the job on the instance and check periodically for completion, instead of maintaining an open connection. Default is False (boolean).\n+ ``async_reconnect``: number of seconds to wait and reconnect to check job status of async job. Default is 30 (seconds).\n+ ``async_timeout``: total number of seconds to wait from async job start before the job is tagged as failed and discarded. Default is None (seconds).\n+ ``shutdown``: turn off AWS instance after Experiment finishes. (only for AWS)\n+ ``connection_retry``: If starting a stopped instance, AWS connections attempts might fail initially. This variable controls the number of retry attempts every 30 seconds. Default is 10 (only for AWS).\n\nSee ``Examples/2dfunc_diff_res/`` for more examples of experiment json files.\n\n\nResults / further analysis\n--------------------------\n\nThe output of an experiment is saved in two places: \n\n+ ``jobs/`` folder contains the configuration of each job in ``<job_id>.json`` and output of each job in ``<job_id>.out``.\n+ ``.aup/sqlite.db`` database file contains the experiment history (configurations and results).  All jobs for different\n  experiments are all saved under unique IDs, unless it has been reset.\n\n"
  },
  {
    "path": "docs/hpo.rst",
    "content": "Hyperparameter Optimization\n---------------------------\n.. toctree::\n   :maxdepth: 1\n\n   experiment\n   algorithm\n   early_stop\n   demo\n   r_user"
  },
  {
    "path": "docs/index.rst",
    "content": ".. aup documentation master file, created by\n   sphinx-quickstart on Wed Oct 17 10:49:22 2018.\n   You can adapt this file completely to your liking, but it should at least\n   contain the root `toctree` directive.\n\n.. toctree::\n    :maxdepth: 2\n    :hidden:\n    \n    README\n\n.. include:: README.rst\n\nAdditional Resources\n====================\n\nInstall and setup\n-----------------\n.. toctree::\n   :maxdepth: 2\n\n   install\n\nHPO\n---\n.. toctree::\n   :maxdepth: 2\n\n   hpo\n\n   \nCompression\n-----------\n\n.. toctree::\n   :maxdepth: 2\n\n   compression_main\n\n   \nTools\n-----\n.. toctree::\n   :maxdepth: 2\n\n   edge\n\n\nDashboard\n---------\n\n.. toctree::\n   :maxdepth: 2\n\n   dashboard\n\nFor developers\n--------------\n\n.. toctree::\n   :maxdepth: 2\n\n   developer\n\nAPIs\n====\n\n.. toctree::\n   :maxdepth: 3\n\n   aup\n\nIndices and tables\n==================\n\n* :ref:`genindex`\n* :ref:`modindex`\n"
  },
  {
    "path": "docs/install.rst",
    "content": "Install and Setup Auptimizer\n----------------------------\n.. toctree::\n   :maxdepth: 1\n\n   setup\n   environment\n   "
  },
  {
    "path": "docs/prepare.sh",
    "content": "#!/usr/bin/env bash\n# this file is used for generating doc for github CI environment\n\ncd docs\npip install -r requirements.txt\npip install tensorflow==2.3.1\n\nmkdir ~/.aws\ncat > ~/.aws/config << EOL\n[default]\nregion=us-east-1\noutput=json\nEOL\n\ncd .."
  },
  {
    "path": "docs/prof_example.rst",
    "content": "Examples\n========\n\nWe present some examples on how to use profiler in\n`Profiler\nExamples <https://github.com/LGE-ARC-AdvancedAI/auptimizer/tree/master/Examples/profiler_examples>`__ folder.\n\n\nTensorFlow Lite inference benchmarking\n--------------------------------------\n\nTo use Profiler on TensorFlow Lite Inference Benchmarking classification\nin the `benchmark <https://github.com/LGE-ARC-AdvancedAI/auptimizer/tree/master/Examples/profiler_examples/bench>`__ folder.\n\n1. [Optional] Use the bench/download.sh script (wget must be installed on your system) to download mobilenet_v1_0.75_224 and\n   mobilenet_v1_1.0_224 (Alternatively, you can download a different set of TensorFlow Lite models from\n   (https://www.tensorflow.org/lite/guide/hosted_models) and save them\n   in `benchmark <https://github.com/LGE-ARC-AdvancedAI/auptimizer/tree/master/Examples/profiler_examples/bench>`__ folder.)\n\n2. If needed, change arguments in ``env_benchmark.template``.\n\n3. Run ``python -m aup.profiler -e env_benchmark.template -m mobilenet_v1_0.75_224.tflite,mobilenet_v1_1.0_224.tflite``.\n\nThis will create Docker images ``mobilenet_v1_0.75_224_img`` and\n``mobilenet_v1_1.0_224_img`` and corresponding Docker containers\n``mobilenet_v1_0.75_224_con`` and ``mobilenet_v1_1.0_224_con``. It will\nexecute ``test_perf.py`` within these containers using the\n``Docker Volume`` command to run inference on the specified models. Once\nexecution finishes, Profiler will output the following statistics:\n\n::\n\n   Final Usage Stats\n   NAME                   AVG CPU %      PEAK CPU  AVG MEM USAGE / LIMIT    PEAK MEM    NET I/O          BLOCK I/O        TOTAL TIME (ms)\n   ---------------------  -----------  ----------  -----------------------  ----------  ---------------  -------------  -----------------\n   mobilenet_v1_0.75_224  225.09%          226.68  117.9 MiB / 1.9 GiB      117.9 MiB   742.0 B / 0.0 B  0.0 B / 0.0 B               6164\n   mobilenet_v1_1.0_224   244.258%         250.83  122.4 MiB / 1.9 GiB      126.9 MiB   766.0 B / 0.0 B  0.0 B / 0.0 B              12354\n\nThe results from each timestamp and each individual model are saved in\n``model_name``\\ +\\ ``out.txt`` (can be user-defined via ``OUTPUTFILE``\nin ``env_benchmark.template``). Additionally, a general summary is\nprovided in ``out.txt`` containing the final stats for all the tested\nmodels.\n\nMNIST training benchmarking\n---------------------------\n\nYou can also use Profiler to profile training. MNIST classification\nexample can be found in the `mnist <https://github.com/LGE-ARC-AdvancedAI/auptimizer/tree/master/Examples/profiler_examples/mnist>`__ folder.\n\n1. [Optional] Download the MNIST dataset from\n   (http://yann.lecun.com/exdb/mnist/). Add the ``.gz`` files to the\n   data folder. Then open ``env_mnist.template`` file and edit the\n   ``DOCKER_ARGS`` option with the absolute path to the ``data`` folder\n   as ``-v /data/:/mnist_data``.\n\n2. Change other arguments in the ``env_mnist.template`` if you want.\n\n3. Run ``python -m aup.profiler -e env_mnist.template``.\n\nThis will create a Docker Image named ``test_image``, and a\ncorresponding Docker Container ``test_container``. It will execute\n``mnist.py`` within the container using Docker Volume command to load\nthe data. Once the execution finishes, the Profiler will output the\nfollowing statistics:\n\n::\n\n   Final Usage Stats\n   NAME            AVG CPU %      PEAK CPU  AVG MEM USAGE / LIMIT    PEAK MEM    NET I/O              BLOCK I/O        TOTAL TIME (ms)\n   --------------  -----------  ----------  -----------------------  ----------  -------------------  -------------  -----------------\n   test_container  316.532%         337.98  502.3 MiB / 1.9 GiB      537.0 MiB   12.0 MiB / 151.4 kB  0.0 B / 0.0 B             220842\n\nThe results from each timestamp are saved in ``out.txt`` (set via\n``OUTPUTFILE`` in ``env_mnist.template``)."
  },
  {
    "path": "docs/prof_readme.rst",
    "content": "How to use Profiler\n===================\n\n**Profiler is a simulator for profiling performance of Machine Learning\n(ML) model scripts.** Given compute- and memory resource constraints for\na CPU-based Edge device, Profiler can provide estimates of compute- and\nmemory usage for model scripts on the device. These estimations can be\nused to choose best performing models or, in certain cases, to predict\nhow much compute and memory models will use on the target device.\nBecause Profiler mimics the target device environment on the user’s\ndevelopment machine, the user can gain insights about the performance\nand resource needs of a model script without having to deploy it on the\ntarget device.\n\nCurrently, Profiler can be used to:\n\n1. **Select the most efficient model for your target deployment.** With\n   Profiler, you can compare how different models will perform under\n   specific compute and memory constraints. Our studies show that the\n   ranking of models based on runtime or memory use under Profiler\n   mirrors the ranking on a device with the same constraints.\n\n2. **Make model script performance and resource requirements at the Edge\n   more transparent.** Use Profiler to estimate model script’s runtime\n   or memory usage on a device. For similar classes of models (such as\n   different versions of MobileNet or ShuffleNet), there is a straight\n   line fit between model performance under Profiler and on the target\n   device. Once you run two or three models on the device, you can use\n   the results to find that straight line and predict a new model’s\n   performance with Profiler.\n\n3. **Foster lean ML model deployment at the Edge.** By using Profiler,\n   you can assess model-device compatibility and select the most\n   suitable model for your needs without the hustle of going through\n   multiple physical deployment cycles.\n\nHow Profiler works\n------------------\n\n1. **Simulates Device Constraints.** Profiler allows developers to\n   simulate different **compute** and **memory** constraints for the\n   execution of the application. This is especially useful for ML model\n   deployment, where testing on different edge devices can be tedious\n   and require actual deployment to individual devices to ensure\n   resource constraints are satisfied. Profiler can help easily\n   *approximate* these constraints on a single host device.\n\n2. **Provides Container Support.** Profiler encapsulates the\n   application, its requirements, and corresponding data into a Docker\n   container. It uses user inputs to build a corresponding Docker Image\n   so the application can run independently and without external\n   dependencies. It can then easily be scaled and ported to ease future\n   development and deployment. Profiler also removes the need for a\n   developer to acquaint themselves with internal workings of Docker.\n\n3. **Logs Resource Utilization.** Profiler also tracks and records\n   various resource utilization statistics of the application for\n   debugging purposes. It currently tracks Average CPU Utilization,\n   Memory Usage, and Block I/O. The logger also supports setting the\n   ``Sample Time`` to control how frequently Profiler samples\n   utilization statistics from the Docker container.\n\nWe have conducted over 300 experiments across multiple models, devices,\nand compute settings. Full results are available\n`here. <https://github.com/LGE-ARC-AdvancedAI/auptimizer/tree/master/Examples/profiler_examples/experiments>`__\n\n\nUsage\n-----\n\nInstallation and requirements\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nProfiler is automatically installed as part of Auptimizer, further\nrequiring only Docker installation. Please refer to `Docker\ninstallation <https://docs.docker.com/install/>`__ on how to install\nDocker on your system.\n\nUsing Profiler\n~~~~~~~~~~~~~~\n\nUsing Profiler is simple and requires only a few steps. Once Docker and\nAuptimizer are installed, all you need to do is: \n\n1. Ensure that the prerequisites below are met \n2. Set up the Profiler user variables in ``env.template`` \n3. Have a script that will train or perform inference on your model \n4. run ``python -m aup.profiler`` on your model file(s) (multiple models can be provided as a comma-separated list using the ``-m`` or ``--modellist`` flags or as in a txt file using the ``-f`` or ``--modelfile`` flags)\n\n**Profiler flags:** \n\n1. -e or –environment : path to the environment file. \n2. -f or –modelfile : path to the text file containing different model names on new lines. \n3. -m or –modellist : list of model names as comma(‘,’) separated string (no spaces).\n\nPrerequisites\n~~~~~~~~~~~~~\n\nThe following prerequisites help to simplify the profiling procedure.\nExperienced users should feel free to modify it as needed.\n\n1. Consolidate your project into a single directory, such that the\n   primary application can run without any internal dependencies (the\n   data itself can be in a separate location).\n2. Consolidate your application into a single entry point for execution.\n   Use a wrapper file if needed. This single point of entry is needed\n   because Profiler will execute one command to run a single application\n   file. The application can accept different models as input.\n\nSet up Profiler user variables\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nProfiler can accept two arguments as inputs - the environment file\n(necessary) and model name list or file (optional). Refer to\n``env_mnist.template`` and ``env_benchmark.template`` in `Profiler\nExamples <https://github.com/LGE-ARC-AdvancedAI/auptimizer/tree/master/Examples/profiler_examples>`__ for examples.\n\nCreate ``env.template``, and add the following variables as needed:\n\n1.  ``IMAGEREPO`` - **REQUIRED** Enter the name of base Docker\n    repository to use. Refer to https://hub.docker.com/ for public\n    repositories. Your base image could be anything from\n    ``tensorflow:1.3.0``, ``python3``, ``ubuntu`` etc.\n\n2.  ``APTREQUIREMENTS`` - **OPTIONAL** Enter all linux packages required\n    to run the application as a space-separated string. For example\n    “curl vim”. These packages will be installed using the command\n    ``apt-get install`` so ensure the packages are supported. This\n    variable can also be left empty (using \"\").\n\n3.  ``PIPREQUIREMENTS`` - **OPTIONAL** Enter all python libraries\n    required to run the application as a space-separated string. For\n    example “ipython numpy”. These packages will be installed using the\n    command ``pip install``, so ensure the libraries are supported. This\n    variable can also be left empty (using “”).\n\n4.  ``PRERUN`` - **OPTIONAL** Enter commands to execute before running\n    the applicati0on. ``PRERUN`` can be used to install any libraries\n    that cannot be installed through ``APTREQUIREMENTS`` or\n    ``PIPREQUIREMENTS``. For example, if you need a different version of\n    a library than what is available through pip, you can use PRERUN to\n    install it. See ``env_benchmark.template`` for an example.\n\n5.  ``DIR`` - **REQUIRED** Enter the local path to the users\n    consolidated directory containing the application. This directory\n    will be copied over to the Docker container.\n\n6.  ``SCRIPT`` - **REQUIRED** The name of the primary application file,\n    along with the path relative to the aforementioned ``DIR``. This\n    allows the container to find and execute the application file.\n\n7.  ``COMMAND`` - **REQUIRED** The command used to execute the\n    aforementioned script. For example ``python``.\n\n8.  ``SAMPLETIME`` - **REQUIRED** The wait period in seconds, when\n    Profiler will query the Docker for resource utilization. Avoid using\n    time periods smaller than 3 seconds since Profiler internally uses\n    the ``docker stats`` command which takes approximately 3 seconds to\n    finish. User can use decimal points.\n\n9.  ``OUTPUTFILE`` - **REQUIRED** The name of the file which will\n    contain all the resource utilization logs with timestamps.\n\n10. ``DOCFILE`` - **REQUIRED** The name of a user-defined Dockerfile,\n    path relative to Profiler directory. This command will supersede all\n    previous variables and build the Docker image from the ``DOCFILE``.\n    The user should only use this variable if they have already tested\n    their Dockerfile with the application to make sure they are\n    compatible.\n\n11. ``DOCKCPUS`` - **OPTIONAL** The amount of CPU processing compute\n    power allowed to the application. Must be real number. Can be a\n    floating point decimal. For example “2.5”. Refer to\n    https://docs.docker.com/config/containers/resource_constraints/. Can\n    be empty - no CPU constraint.\n\n12. ``DOCKMEMORY`` - **OPTIONAL** The amount of memory allowed to the\n    application. Must be a positive integer, followed by a suffix of b,\n    k, m, g, to indicate bytes, kilobytes, megabytes, or gigabytes . For\n    example “156m”. Refer to\n    https://docs.docker.com/config/containers/resource_constraints/. Can\n    be empty - no memory constraint.\n\n13. ``DOCK_ARGS`` - **OPTIONAL** Additional Docker-related arguments are\n    added here. For instance, to allow Docker to run the container with\n    the Privileged tag, use ``--privileged``. Refer to\n    https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities.\n    To use volume to mount additional folder (e.g. data folder), use\n    ``-v /path/in/source:/path/in/destination``.\n\nIf your primary application needs external model weight files as\narguments, you can further provide a list of the names of model weight\nfiles. This list can be provided as a list of comma(‘,’) separated\nstrings of the model names or a text file with strings of the model\nnames, each on a new line.\n\nInterpreting results\n--------------------\n\nA summary of each Profiler run can be found in ``out.txt`` (the filename\ncan be user-specified using the ``OUTPUTFILE`` argument in the\nenvironment file).\n\nThe individual model ``OUTPUTFILE``\\ s contain the raw values of\ndifferent metrics profiled at distinct ``SAMPLETIME`` intervals using\n``docker stats`` as a subroutine (https://docs.docker.com/engine/reference/commandline/stats/)\n\nEach row contains the following values:\n\n1. Name - name of the Docker container.\n2. CPU % - the instantaneous cpu utilization (https://docs.docker.com/config/containers/resource_constraints/).\n3. MEM USAGE / LIMIT - the instantaneous memory utilization and corresponding limit (https://docs.docker.com/config/containers/resource_constraints/).\n4. NET I/O - refers to network input/output, the total amount of data the container has sent and received (https://docs.docker.com/engine/reference/commandline/stats/).\n5. BLOCK I/O - refers to the amount of data the container has read to and written from block devices (this could be memory external to the container or to actual HDD use) on the host (https://docs.docker.com/engine/reference/commandline/stats/).\n6. TIME - the current timestamp of the measurement.\n\nThe Usage Stats table shows the average utilization over the container’s\nlifetime for the aforementioned CPU % and MEM USAGE / LIMIT. For NET I/O\nand BLOCK I/O the total input/output data metrics are returned, instead\nof the average statistics.\n\nThe final usage stats from each run of Profiler is appended to\n``OUTPUTFILE`` and provides a quick overview of the result of running\nProfiler multiple times.\n\nExamples\n--------\n\nWe present some examples on how to use profiler in\n`Profiler\nExamples <https://github.com/LGE-ARC-AdvancedAI/auptimizer/tree/master/Examples/profiler_examples>`__ folder.\n\n\nTensorFlow Lite Inference Benchmarking\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nTo use Profiler on TensorFlow Lite Inference Benchmarking classification\nin the `benchmark <https://github.com/LGE-ARC-AdvancedAI/auptimizer/tree/master/Examples/profiler_examples/bench>`__ folder.\n\n1. [Optional] Use the bench/download.sh script (wget must be installed on your system) to download mobilenet_v1_0.75_224 and\n   mobilenet_v1_1.0_224 (Alternatively, you can download a different set of TensorFlow Lite models from\n   (https://www.tensorflow.org/lite/guide/hosted_models) and save them\n   in `benchmark <https://github.com/LGE-ARC-AdvancedAI/auptimizer/tree/master/Examples/profiler_examples/bench>`__ folder.)\n\n2. If needed, change arguments in ``env_benchmark.template``.\n\n3. Run ``python -m aup.profiler -e env_benchmark.template -m mobilenet_v1_0.75_224.tflite,mobilenet_v1_1.0_224.tflite``.\n\nThis will create Docker images ``mobilenet_v1_0.75_224_img`` and\n``mobilenet_v1_1.0_224_img`` and corresponding Docker containers\n``mobilenet_v1_0.75_224_con`` and ``mobilenet_v1_1.0_224_con``. It will\nexecute ``test_perf.py`` within these containers using the\n``Docker Volume`` command to run inference on the specified models. Once\nexecution finishes, Profiler will output the following statistics:\n\n::\n\n   Final Usage Stats\n   NAME                   AVG CPU %      PEAK CPU  AVG MEM USAGE / LIMIT    PEAK MEM    NET I/O          BLOCK I/O        TOTAL TIME (ms)\n   ---------------------  -----------  ----------  -----------------------  ----------  ---------------  -------------  -----------------\n   mobilenet_v1_0.75_224  225.09%          226.68  117.9 MiB / 1.9 GiB      117.9 MiB   742.0 B / 0.0 B  0.0 B / 0.0 B               6164\n   mobilenet_v1_1.0_224   244.258%         250.83  122.4 MiB / 1.9 GiB      126.9 MiB   766.0 B / 0.0 B  0.0 B / 0.0 B              12354\n\nThe results from each timestamp and each individual model are saved in\n``model_name``\\ +\\ ``out.txt`` (can be user-defined via ``OUTPUTFILE``\nin ``env_benchmark.template``). Additionally, a general summary is\nprovided in ``out.txt`` containing the final stats for all the tested\nmodels.\n\nMNIST Training Benchmarking\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nYou can also use Profiler to profile training. MNIST classification\nexample can be found in the `mnist <https://github.com/LGE-ARC-AdvancedAI/auptimizer/tree/master/Examples/profiler_examples/mnist>`__ folder.\n\n1. [Optional] Download the MNIST dataset from\n   (http://yann.lecun.com/exdb/mnist/). Add the ``.gz`` files to the\n   data folder. Then open ``env_mnist.template`` file and edit the\n   ``DOCKER_ARGS`` option with the absolute path to the ``data`` folder\n   as ``-v /data/:/mnist_data``.\n\n2. Change other arguments in the ``env_mnist.template`` if you want.\n\n3. Run ``python -m aup.profiler -e env_mnist.template``.\n\nThis will create a Docker Image named ``test_image``, and a\ncorresponding Docker Container ``test_container``. It will execute\n``mnist.py`` within the container using Docker Volume command to load\nthe data. Once the execution finishes, the Profiler will output the\nfollowing statistics:\n\n::\n\n   Final Usage Stats\n   NAME            AVG CPU %      PEAK CPU  AVG MEM USAGE / LIMIT    PEAK MEM    NET I/O              BLOCK I/O        TOTAL TIME (ms)\n   --------------  -----------  ----------  -----------------------  ----------  -------------------  -------------  -----------------\n   test_container  316.532%         337.98  502.3 MiB / 1.9 GiB      537.0 MiB   12.0 MiB / 151.4 kB  0.0 B / 0.0 B             220842\n\nThe results from each timestamp are saved in ``out.txt`` (set via\n``OUTPUTFILE`` in ``env_mnist.template``).\n"
  },
  {
    "path": "docs/profiler.rst",
    "content": "Profiler\n--------\n.. toctree::\n   :maxdepth: 1\n\n   prof_readme\n   prof_example"
  },
  {
    "path": "docs/r_user.rst",
    "content": "Setup for R\n===========\n\nInstall Auptimizer for R User\n-----------------------------\n\nFrom the `R-src` folder, run the following command in `R` will install the `Auptimzier` R interface:\n\n.. code:: R\n\n    install.packages('devtools')\n    devtools::install('Rpackage')\n\nSee below for setting up Auptimizer.\n\nExperiment Setup\n----------------\n\nAuptimizer is running in Python.  See setup in Python first.\n\nThe main workflow is blow:\n\n1. Setup Python Auptimizer environment by ``python -m aup.setup``\n2. Change your R script:\n\n   a. Make all hyperparameters as global variables.\n   b. Add ``#!/usr/bin/env Rscript`` as the first line.\n   c. Add ``source(\"auptimizer\")``.\n   d. Add ``get_config()``, which will automatically update the hyperparameters globally set in step a.\n   e. Add ``print_result(score)`` to return the target score you want to optimize for you script.\n   f. Change file permission as ``chmod u+x <your_R_script>``.\n   g. Add them into an Auptimizer experiment by ``python -m aup.init``.\n\n3. Run Auptimizer as ``python -m aup experiment.json``.\n\nExamples\n--------\n\nWe provide two simple examples to use auptimizer on `Github <https://github.com/LGE-ARC-AdvancedAI/auptimizer/R-src/example>`__.\n\nMore Information\n----------------\n\nSee `Auptimizer Github <https://github.com/LGE-ARC-AdvancedAI/auptimizer>`__ for more information."
  },
  {
    "path": "docs/requirements.txt",
    "content": "Sphinx\nsphinx_rtd_theme\nsphinxcontrib-programoutput"
  },
  {
    "path": "docs/setup.rst",
    "content": "First time installation\n=======================\n\n\nInstallation\n~~~~~~~~~~~~\n\n**Auptimizer** has been well tested on the Linux environment. It has not been well tested under Windows and there exists the potential for issues.\n\n*NOTE*: To avoid potential issues with version or permission, use :code:`virtualenv` or :code:`pip install --user` for local installation.\n\nReleased version\n@@@@@@@@@@@@@@@@\n\nRun the following command from :code:`bash` to install:\n\n::\n\n   pip install auptimizer\n\n**Note** Dependencies are not included. Using ``pip install``\n`requirements.txt <https://github.com/LGE-ARC-AdvancedAI/auptimizer/blob/master/requirements.txt>`_ will install\nnecessary libraries for all functionalities.\n\nDevelopment version\n@@@@@@@@@@@@@@@@@@@\n\nRun the following command from :code:`bash` to install the latest version of **Auptimizer**::\n\n  git clone <source code repo link>\n  cd Auptimizer\n  pip install -r requirements.txt\n  python setup.py install\n\nNote: Python2 is required for `spearmint` package, and Python>3=3.6 is recommended for `BOHB` algorithm.\n\nEnvironment Setup\n~~~~~~~~~~~~~~~~~\n\nCurrently, **Auptimizer** relies on an environment folder to access the system resources and track experiment history.\nUsing `python -m aup.setup` will guide you through the setup.\n:doc:`environment` has more detailed explanations about the different configurations.\n\nThere are two places you can save the environment file - **Auptimizer** will first search the folder named `.aup` in\nyour working folder (where you run your command) and then your home folder (`~`). Otherwise, you specify it at runtime\nwith the `--aup` argument. An error will be thrown if this environment file cannot be found.\n\nYou are now ready to use **Auptimizer** for your experiment.  See :doc:`experiment` to learn how to change your code.\n"
  },
  {
    "path": "docs/version.rst",
    "content": "Version History\n===============\nversion 2.0\n~~~~~~~~~~~\n\n+ Add Dashboard to provide insightful visualizations to help users track experiment progress, analyze and contrast jobs, experiments, and optimization approaches\n+ Add Compressor - a model compression tool that helps reduce memory complexity and inference time of neural networks\n+ Add 4 early stopping strategies to improve the efficiency of HPO experiments\n+ Add feature to track intermediate results of both HPO and compression experiments\n+ Add feature to save the best model with the best hyperparameter combination\n+ Add feature to track multiple results returned from the HPO experiment\n+ Refactor documentation\n+ Minor bug fixes\n\n+ :download:`Auptimizer 2.0 wheel python2 or python3 <archive/Auptimizer-2.0-py2.py3-none-any.whl>`\n\nversion 1.4\n~~~~~~~~~~~~\n\n+ Add Converter to convert models in various formats into TensorFlow Lite or ONNX\n+ Add feature to enhance SSH connection robustness: re-establish SSH connection upon connection failure\n+ Add feature to enhance experiment robustness: retry failed jobs and resume experiment from job failure\n+ Refactor documentation\n+ Minor bug fixes\n\n+ :download:`Auptimizer 1.4 wheel python2 or python3 <archive/Auptimizer-1.4-py2.py3-none-any.whl>`\n\nversion 1.3\n~~~~~~~~~~~~\n\n+ Add Profiler for profiling model scripts\n\n+ :download:`Auptimizer 1.3 wheel python2 <archive/Auptimizer-1.3-py2-none-any.whl>`\n+ :download:`Auptimizer 1.3 wheel python3 <archive/Auptimizer-1.3-py3-none-any.whl>`\n\nversion 1.2\n~~~~~~~~~~~\n\n+ Add BOHB proposer\n+ Add decorator to simplify the experiment setup\n+ Minor changes and bug fixes\n\n+ :download:`Auptimizer 1.2 wheel python2 <archive/Auptimizer-1.2-py2-none-any.whl>`\n+ :download:`Auptimizer 1.2 wheel python3 <archive/Auptimizer-1.2-py3-none-any.whl>`\n\nversion 1.1\n~~~~~~~~~~~~~~\n\n+ Add R interface.\n+ Minor changes and bug fixes.\n\n+ :download:`Auptimizer 1.1 wheel python2 <archive/Auptimizer-1.1-py2-none-any.whl>`\n+ :download:`Auptimizer 1.1 wheel python3 <archive/Auptimizer-1.1-py3-none-any.whl>`\n\n\nversion 1.0\n~~~~~~~~~~~~~~\n\nRelease to Github\n\n+ :download:`Auptimizer 1.0 wheel python2 <archive/Auptimizer-1.0-py2-none-any.whl>`\n+ :download:`Auptimizer 1.0 wheel python3 <archive/Auptimizer-1.0-py3-none-any.whl>`\n\n"
  },
  {
    "path": "oss-package.info",
    "content": "## Package Information\nPackageName: EAS\nPackageVersion: b20c48a\nPackageFileName: eas\nPackageDownloadLocation: https://github.com/han-cai/EAS\nPackageHomePage: https://github.com/han-cai/EAS\nPackageLicenseConcluded: MIT\n\n## Package Information\nPackageName: hyperband\nPackageVersion: a632209\nPackageFileName: HyperbandProposer.py\nPackageDownloadLocation: https://github.com/zygmuntz/hyperband\nPackageHomePage: https://github.com/zygmuntz/hyperband\nPackageLicenseConcluded: modified BSD-2-Clause (https://github.com/zygmuntz/hyperband/blob/master/LICENSE)\n\n## Package Information\nPackageName: HyperOpt\nPackageVersion: 762e89\nPackageFileName: hyperopt\nPackageDownloadLocation: https://github.com/hyperopt/hyperopt\nPackageHomePage: https://github.com/hyperopt/hyperopt\nPackageLicenseConcluded: https://github.com/hyperopt/hyperopt/blob/master/LICENSE.txt\n\n## Package Information\nPackageName: spearmint\nPackageVersion: 70309f0\nPackageFileName: spearmint\nPackageDownloadLocation: https://github.com/JasperSnoek/spearmint\nPackageHomePage: https://github.com/JasperSnoek/spearmint\nPackageLicenseConcluded: https://github.com/JasperSnoek/spearmint\n\n## Package Information\nPackageName: HpBandSter\nPackageVersion: 841db4b\nPackageFileName: hpbandster\nPackageDownloadLocation: https://github.com/automl/HpBandSter\nPackageHomePage: https://automl.github.io/HpBandSter/build/html/index.html\nPackageLicenseConcluded: BSD-3\n"
  },
  {
    "path": "publish.sh",
    "content": "#!/usr/bin/env bash\n# Publish documentation on github.io\n# Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\nset -e \n\nflag=$(python -c 'import platform; major, minor, patch = platform.python_version_tuple();print(major==\"3\" and minor==\"7\")')\n\nif [ $flag == \"False\" ]; then\n  echo \"Only publish with python3.7\"\n  exit 0\nfi\n\n\nCOMMIT=$(git show --format=\"%h\" --no-patch)\n\ncd docs\nmake html\n\ncd ../..\ngit clone -b gh-pages \"https://$GH_TOKEN@github.com/$ORG/$REPO.git\" gh-pages\ncd gh-pages\n\n\ngit config user.name \"Travis Builder\"\ngit config user.email \"$EMAIL\"\n\n\nsed 's/docs\\/images\\/demo.gif/_images\\/demo.gif/g' ../$REPO/README.md > ./README.md\n\ncp ../$REPO/AuptimizerBlackLong.png .\ncp -R ../$REPO/docs/_build/html/* ./\ngit add -A .\ngit commit -m \"[ci skip] Autodoc commit for $COMMIT.\"\ngit push -q origin gh-pages\n"
  },
  {
    "path": "requirements.txt",
    "content": "click\nnumpy\ncoloredlogs\nsix==1.12.0\nfutures; python_version == '2.7'\nprotobuf\nweave; python_version == '2.7'\nmatplotlib\npandas\nnetworkx\nhyperopt\nnose\nparamiko==2.7.1\nboto3\nmock; python_version < '3.3'\nfuture\nConfigSpace; python_version >= '3'\npytest-cov\ncodecov\ntabulate\nschema\njson_tricks\ntqdm\nhpbandster; python_version >= '3'\nmock-ssh-server==0.8.2\nconnexion[swagger-ui]==2.5.0\nflask==1.1.2\nflask-cors==3.0.8\nrequests==2.23.0\nprettytable\npsutil\nscikit-learn\nthop\npsutil\n"
  },
  {
    "path": "setup.py",
    "content": "# Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\nfrom setuptools import setup, find_packages\n\nBASE_URL=\"https://github.com/LGE-ARC-AdvancedAI/auptimizer\"\n\nCONSOLE_SCRIPTS = []\nCONSOLE_SCRIPTS.append('dashboard = aup.dashboard.dashboard:main')\n\ndef find_version():\n    # based on https://packaging.python.org/guides/single-sourcing-package-version/\n    # find version number\n    import os\n    import re\n    file = os.path.join(os.path.abspath(os.path.dirname(__file__)), \"src\", \"aup\", \"__init__.py\")\n    with open(file, 'r') as fp:\n        content = fp.read()\n    match = re.search(r\"^__version__ = ['\\\"]([^'\\\"]*)['\\\"]\", content, re.M)\n    if match:\n        return match.group(1)\n    else:\n        raise RuntimeError(\"Failed to find version in __init__.py\")\n\n\nsetup(\n    name='Auptimizer',\n    version=find_version(),\n    author=\"LG Electronics Inc.\",\n    author_email=\"auptimizer@lge.com\",\n    scripts=['src/aup/profiler/profiler.sh', 'src/aup/profiler/statscript.sh'],\n    license='SPDX-License-Identifier: GPL-3.0-or-later',\n    long_description=open('README.md').read(),\n    long_description_content_type='text/markdown',\n    url=BASE_URL,\n    project_urls={\n        \"Bug Tracker\": BASE_URL+\"/issues\",\n        \"Documentation\": \"https://lge-arc-advancedai.github.io/auptimizer/\",\n        \"Source Code\": BASE_URL,\n    },\n    # install_requires=open(\"requirements.txt\").readlines(),\n    packages=find_packages(\"src\", exclude=[\"tests\"]),\n    package_dir={\"\": \"src\"},\n    entry_points={\n        'console_scripts': CONSOLE_SCRIPTS,\n    },\n    zip_safe=False,\n    include_package_data=True\n)\n"
  },
  {
    "path": "src/aup/EE/Experiment.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\naup.EE.Experiment module\n========================\n\n:mod:`aup.EE.Experiment` is called by `aup.__main__` to start an experiment.\n\nSee :doc:`algorithm` for configuration specification.\n\nAPIs\n----\n\"\"\"\n\nimport json\nimport logging\nimport os\nimport signal\nimport sys\nimport _thread\nimport threading\nimport time\n\nfrom ..Proposer import get_proposer, SPECIAL_EXIT_PROPOSERS\nfrom .Job import Job\nfrom .Resource import get_resource_manager\nfrom ..aup import BasicConfig\nfrom ..utils import set_default_keyvalue, check_missing_key, get_default_connector, get_default_username\nfrom ..compression.utils import *\nfrom ..Proposer import ProposerStatus\n\nlogger = logging.getLogger(__name__)\n\n\ndef _verify_config(config):\n    \"\"\"\n    verify the experiment configuration is fulfilled for experiment\n\n    :param config: experiment configuration\n    :return: config if verified\n    \"\"\"\n    check_missing_key(config, \"script\", \"Missing required value for 'script'.\", log=logger)\n    check_missing_key(config, \"resource\", \"Missing required value for 'resource'\", log=logger)\n    check_missing_key(config, \"name\", \"Missing required value for 'name'\", log=logger)\n    return config\n\n\nclass Experiment:\n    \"\"\"\n    Experiment Class - create and run an experiment\n\n    :param exp_config: configuration of the experiment\n    :type exp_config: BasicConfig.BasicConfig\n    :param username: username, default: None - will use login username\n    :type username: str\n    :param connector: connector to database\n    :type connector: AbstractConnector\n    :param auppath: Auptimizer env.ini file folder, default is either ``./.aup`` or ``~/.aup``\n    :type auppath: str\n    :param sleep_time: time to pause between jobs\n    :type sleep_time: int\n    \"\"\"\n\n    def __init__(self,\n                 exp_config,\n                 username=None,\n                 connector=None,\n                 auppath=os.path.join(\".aup\"),\n                 sleep_time=1,\n                 eid=None,\n                 start=True,\n                 request_stop_time=5):\n        self.sleep_time = sleep_time\n        self.fail_safe = False\n        self.job_retries = 0\n        self.exp_config = _verify_config(exp_config)\n        self.resource_args = None\n        self.connector = connector if connector else get_default_connector(auppath=auppath, log=logger)\n        self.username = get_default_username(username)\n        self.is_compression_exp = False\n        self.compression_params = []\n        self.request_stop_thr = None\n        self.request_stop_time = request_stop_time\n        self.submitted = False\n\n        if \"job_failure\" in self.exp_config:\n            set_default_keyvalue(\"ignore_fail\", False, self.exp_config[\"job_failure\"], log=logger)\n            set_default_keyvalue(\"job_retries\", 3, self.exp_config[\"job_failure\"], log=logger)\n            self.fail_safe = self.exp_config[\"job_failure\"][\"ignore_fail\"]\n            self.job_retries = self.exp_config[\"job_failure\"][\"job_retries\"]\n\n        if \"compression\" in self.exp_config:\n            self.is_compression_exp = True\n            self.exp_config, self.compression_params = translate_compression_config(self.exp_config)\n\n        set_default_keyvalue(\"cwd\", os.getcwd(), self.exp_config, log=logger)\n        set_default_keyvalue(\"workingdir\", os.getcwd(), self.exp_config, log=logger)\n        set_default_keyvalue(\"n_parallel\", 1, self.exp_config, log=logger)\n        check_missing_key(self.exp_config, \"target\", \"Specify max/min for target\", log=logger)\n        check_missing_key(self.exp_config, \"proposer\", \"Specify the optimization `proposer`\", log=logger)\n        self.proposer = get_proposer(self.exp_config['proposer'])(self.exp_config)\n        if \"resource_args\" in self.exp_config:\n            if \"early_stop\" in self.exp_config[\"resource_args\"]:\n                self.exp_config[\"resource_args\"][\"track_intermediate_results\"] = True\n            self.resource_manager = get_resource_manager(self.exp_config[\"resource\"], self.connector,\n                                                         self.exp_config[\"n_parallel\"], auppath=auppath,\n                                                         maximize=(self.exp_config[\"target\"] == \"max\"),\n                                                         **self.exp_config[\"resource_args\"],\n                                                         workingdir=self.exp_config['workingdir'],\n                                                         script=self.exp_config['script'],\n                                                         runtime_args = exp_config.get('runtime_args', {}))\n            self.resource_args = self.exp_config[\"resource_args\"]\n        else:\n            self.resource_manager = get_resource_manager(self.exp_config[\"resource\"], self.connector,\n                                                         self.exp_config[\"n_parallel\"], auppath=auppath,\n                                                         maximize=(self.exp_config[\"target\"] == \"max\"),\n                                                         workingdir=self.exp_config['workingdir'],\n                                                         script=self.exp_config['script'],\n                                                         runtime_args = exp_config.get('runtime_args', {}))\n        if eid is None:\n            if start is True:\n                self.eid = self.resource_manager.connector.start_experiment(self.username, self.exp_config[\"name\"], \\\n                                json.dumps(self.exp_config))\n            else:\n                self.eid = self.resource_manager.connector.create_experiment(self.username, self.exp_config[\"name\"], \\\n                                json.dumps(self.exp_config))\n        else:\n            self.eid = eid\n            self.resource_manager.connector.start_experiment_by_eid(self.eid)\n        self.resource_manager.eid = self.eid\n        self.pending_jobs = {}\n        if 'runtime_args' in exp_config:\n            self.runtime_args = exp_config['runtime_args']\n        else:\n            self.runtime_args = {}\n        logger.info(\"Experiment %d is created\" % self.eid)\n        logger.debug(\"Experiment config is %s\" % json.dumps(self.exp_config))\n\n    def add_suspend_signal(self):\n        signal.signal(signal.SIGINT, lambda x, y: self._suspend(x, y))\n\n    def add_refresh_signal(self):\n        signal.signal(signal.SIGUSR1, lambda x, y: self._force_refresh(x, y))\n\n    def finish(self):\n        \"\"\"\n        Finish experiment if no job is running\n\n        :return: job id, best score\n        :rtype: (int, float)\n        \"\"\"\n        while self.proposer.get_status() == ProposerStatus.RUNNING:\n            logger.debug(\"Waiting for proposer\")\n            time.sleep(self.sleep_time)\n\n        while len(self.pending_jobs) != 0:\n            # resource manager will prevent experiment shutdown with pending jobs.\n            # but just in case\n            logger.debug(\"Waiting for pending job\")\n            time.sleep(self.sleep_time)\n\n        result = self.resource_manager.finish(status=self.proposer.get_status().name)\n        self.connector.close()\n\n        if self.request_stop_thr is not None:\n            self.request_stop_thr.join()\n\n        if result is None or len(result) == 0:\n            logger.warning(\"No result so far\")\n            return None, -1\n        else:\n            logger.info(\"Finished\")\n            logger.critical(\"Best job (%d) with score %f in experiment %d\" % (result[0], result[1], self.eid))\n            try:\n                self.proposer.save(os.path.join(\".\", \"exp%d.pkl\" % self.eid))\n            except NotImplementedError:\n                pass\n            return result[:2]\n\n    def resume(self, filename):\n        \"\"\"\n        Restore previous experiment, previous job during suspension won't be run in this round\n\n        :param filename: filename (saved by pickle as exp%d.pkl)\n        :type filename: str\n        \"\"\"\n        self.proposer.reload(filename)   # Note: previously failed jobs won't be execute again.\n        self.start()\n\n    def start(self):\n        \"\"\"\n        Start experiment\n        \"\"\"\n        remaining_jobs = self.proposer.get_remaining_jobs()\n        parallel_jobs = min(remaining_jobs, self.exp_config.n_parallel)\n\n        self.request_stop_thr = threading.Thread(target=self._check_status)\n        self.request_stop_thr.start()\n\n        for i in range(parallel_jobs - len(self.pending_jobs)):\n            rc = self.submit_job()\n            self.submitted = self.submitted or rc\n            if not self.submitted:\n                logger.fatal(\"No job is running; quit\")\n                self.proposer.set_status(ProposerStatus.FAILED)\n                raise Exception(\"Cannot run experiment!\")\n            elif not rc:\n                logger.warning(\"Job submission failed, keep running\")\n\n    def submit_job(self, job=None, rid_blacklist=None):\n        \"\"\"\n        Submit a new job to run if there is resource available\n        :param job: optional job parameter in case a job needs resubmitting\n        :type job: aup.EE.Job.Job object\n        :param rid_blacklist: resource ids to exclude when submitting job\n        :type rid_blacklist: [int]\n\n        :return: True if job submitted, else False\n        \"\"\"\n        rid = self.resource_manager.get_available(self.username, self.exp_config[\"resource\"], rid_blacklist=rid_blacklist)\n        if rid is None:\n            self.resource_manager.log_error_message(\"Not enough resources!\")\n            logger.warning(\"Increase resource or reduce n_parallel, no enough resources\")\n            return False\n\n        if job is None:\n            proposal = self.proposer.get()\n            if proposal is not None and self.is_compression_exp:\n                proposal = deserialize_compression_proposal(self.exp_config, self.compression_params, proposal)\n            self.proposer.increment_job_counter()\n        if job is None and proposal is None:\n            if self.exp_config['proposer'] in SPECIAL_EXIT_PROPOSERS:\n                logger.info(\"%s is waiting to finish.\" % self.exp_config['proposer'])\n                return True\n            else:\n                logger.warning(\"Waiting other jobs finished\\n\"\n                               \"Think about rebalance your task loads, if you see this message shows up too many\")\n                return False\n        else:\n            if job is None:\n                job_config = BasicConfig(**proposal)\n                job = Job(self.exp_config[\"script\"], job_config, self.exp_config[\"workingdir\"], retries=self.job_retries)\n                job.jid = self.resource_manager.connector.job_started(self.eid, rid, job_config)\n            else:\n                self.resource_manager.connector.job_retry(rid, job.jid)\n            logger.info(\"Submitting job %d with resource %d in experiment %d\" % (job.jid, rid, self.eid))\n            job.was_executed = False\n            self.pending_jobs[job.jid] = job\n            # update the status, but after appending to pending_jobs\n            # to avoid premature termination\n            self.proposer.check_termination()\n            self.resource_manager.run_job(job, rid, self.exp_config, self.update, **self.runtime_args)\n            return True\n\n    def update(self, score, jid):\n        \"\"\"\n        Callback function passed to :mod:`aup.EE.Resource.AbstractResourceManager` to\n         update the job history (also proposer and connector)\n\n        :param score: score returned from job (using :func:`aup.utils.print_result`)\n        :type score: float\n        :param jid: job id\n        :type jid: int\n        \"\"\"\n        if score == \"ERROR\":\n            job = self.pending_jobs.pop(jid)\n            if job.jid in self.resource_manager.jobs and \\\n                job.curr_retries < job.retries:\n                rid = self.resource_manager.jobs[jid]\n                job.rid_blacklist.add(rid)\n                self.resource_manager.connector.job_failed(rid, jid)\n                job.curr_retries += 1\n                logger.info(\"Retrying job %d (%d/%d)\" % (jid, job.curr_retries, job.retries))\n                self.submit_job(job, rid_blacklist=job.rid_blacklist)\n            elif not self.fail_safe:\n                self.resource_manager.finish_job(jid, None, \"FAILED\")\n                self.proposer.set_status(ProposerStatus.FAILED)\n                logger.fatal(\"Stop Experiment due to job failure (ignore_fail flag set to false)\")\n            else:\n                self.resource_manager.finish_job(jid, None, \"FAILED\")\n                try:\n                    self.proposer.failed(job)\n                except Exception as ex:\n                    self.proposer.set_status(ProposerStatus.FAILED)\n                    logger.fatal(\"Stop Experiment due to job failure (failed jobs unsupported by proposer)\")\n                logger.info(\"Job %d is finished (failed)\" % (jid))\n                if self.proposer.get_status() == ProposerStatus.RUNNING:\n                    self.start()\n        elif score == \"EARLY STOPPED\":\n            self.pending_jobs.pop(jid)\n            self.resource_manager.finish_job(jid, score, \"EARLY_STOPPED\")\n            logger.info(\"Job %d was early stopped\" % (jid))\n            if self.proposer.get_status() == ProposerStatus.RUNNING:\n                self.start()\n        else:\n            self.proposer.update(score, self.pending_jobs[jid])\n            self.pending_jobs.pop(jid)\n            self.resource_manager.finish_job(jid, score, \"FINISHED\")\n            logger.info(\"Job %d is finished with result %s\" % (jid, score))\n\n            if self.proposer.get_status() == ProposerStatus.RUNNING:\n                self.start()\n\n    def _suspend(self, sig, frame):\n        \"\"\"\n        Stop experiment by enter \"Ctrl-C\"\n        \"\"\"\n        logger.fatal(\"Experiment ended at user's request\")\n        for i in self.pending_jobs:\n            logger.warning(\"Job with ID %d is cancelled\" % i)         # Note: cancelled job won't be run again.\n        try:\n            self.proposer.save(os.path.join(\".\", \"exp%d.pkl\" % self.eid))\n        except NotImplementedError:\n            pass\n        self.resource_manager.suspend()\n        result = self.resource_manager.finish(status=\"STOPPED\")\n        self.connector.close()\n        if result is None:\n            logger.warning(\"No valid result so far\")\n        else:\n            logger.critical(\"Best job (%d) with score %f in experiment %d\" % (result[0], result[1], self.eid))\n        if self.request_stop_thr is not None:\n            self.request_stop_thr.join()\n        sys.exit(1)\n\n    def _check_status(self):\n        \"\"\"\n        Checks the database status of the experiment for external stopping requests\n\n        This method is run continuously in a separate \"clean-up\" thread in order to check for\n        external modifications to the experiment status in the database, in case a user\n        wants to stop an experiment remotely (e.g. from another process).\n        \"\"\"\n        if self.connector is None or self.eid is None:\n            logger.warning(\"Could not start thread for checking external experiment stopping requests.\")\n            return\n\n        while True:\n            try:\n                if self.connector.is_closed():\n                    logger.debug(\"Closing down clean-up thread.\")\n                    return\n\n                status = self.connector.maybe_get_experiment_status(self.eid)\n                if status == \"REQUEST_STOP\":\n                    return _thread.interrupt_main()\n\n                time.sleep(self.request_stop_time)\n            except Exception as ex:\n                logger.debug(\"Error in clean-up thread: {}\".format(ex))\n\n    def _force_refresh(self, sig, frame):\n        # currently useful for async resource manager timers\n        self.resource_manager.refresh()\n"
  },
  {
    "path": "src/aup/EE/Job.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\naup.EE.Job module\n=================\n\nWrap Job information for :mod:`aup.EE.Resource` to execute.\n\nAPIs\n----\n\"\"\"\nimport logging\nimport os\nimport stat\nfrom time import sleep\n\nfrom ..utils import open_sftp_with_timeout\n\ntry:\n    FileNotFoundError\nexcept NameError:\n    FileNotFoundError = IOError\n\nlogger = logging.getLogger(__name__)\n\n\nclass Job:\n    local_warning = True\n\n    def __init__(self, script, config, path=\".\", retries=3):\n        \"\"\"\n        Job wrapper give to resource manager to execute\n\n        :param script: script file name\n        :type script: str\n        :param config: job configuration\n        :type config: aup.BasicConfig\n        :param path: working path\n        :type path: str\n        :param retries: max number of retries for one job in the case of job failure\n        :type retries: int\n        \"\"\"\n        logger.debug(\"Input: %s,%s\", script, path)\n        self.config = config\n        self.path = os.path.abspath(os.path.expanduser(path))\n        if script[0] not in ('.', '/'):\n            script = os.path.join(\".\", script)\n            if Job.local_warning:\n                logger.warning(\"Using default local path for script as %s\", script)\n                Job.local_warning = False  # only warning once\n        self.script = script\n        self.jid = 0\n        self.was_executed = False\n        self.retries = retries\n        self.curr_retries = 0\n        self.rid_blacklist = set()\n\n        # if true, it means this is the best job\n        self.save_model_flag = config.get('save_model', False)\n\n    def verify_local(self):\n        \"\"\"\n        Verify the job script is correctly set - for local machine running only\n\n        :return: whether all paths are set correctly\n        :rtype: bool\n        \"\"\"\n        job_path = os.path.join(self.path, \"jobs\")\n        script = os.path.join(self.path, self.script.split()[0])  # avoid additional arguments in the script\n        if not os.path.isdir(self.path):\n            msg = \"Working folder %s does not exist\" % self.path\n            logger.fatal(msg)\n            raise EnvironmentError(msg)\n\n        if not os.path.exists(job_path):  # job config file dir, also used in ResourceManagers.\n            logger.warning(\"Create missing directory %s\", job_path)\n            os.makedirs(job_path)\n        logger.debug(\"Create Job %s\", script)\n\n        if not os.path.isfile(script):\n            logger.fatal(\"Job script %s is not exist\", self.script)\n            raise EnvironmentError(\"Missing script\")\n        if not os.access(script, os.X_OK):\n            logger.fatal(\"Job script is not executable, try `chmod u+x %s`\"%self.script)\n            raise EnvironmentError(\"Wrong permission for %s\" % self.script)\n        return True\n\n    def verify_remote(self, remote, overwrite=False):  # pragma: no cover\n        \"\"\"\n        Verify the files and folder are correct on the remote machine\n\n        :param remote: paramiko.SSHClient\n        :param overwrite: whether to overwrite existing script file and folder\n        :return: whether the files are set correctly\n        :rtype: bool\n        \"\"\"\n\n        sftp = open_sftp_with_timeout(remote.client, 5)\n        local_script = self.script.split()[0]\n        local_job_path = os.path.join(os.path.dirname(local_script), 'jobs')\n        if not os.path.isdir(local_job_path):\n            logger.warning(\"Create missing local job config directory %s\", local_job_path)\n            os.makedirs(local_job_path)\n        remote_script = os.path.join(self.path, os.path.basename(self.script))\n        try:\n            sftp.stat(self.path)\n        except FileNotFoundError:\n            logger.warning(\"Create missing folder %s\", self.path)\n            sftp.mkdir(self.path)\n        try:\n            path = os.path.join(self.path, \"jobs\")\n            stats = sftp.stat(path)\n            if not (stats.st_mode & stat.S_IWRITE):\n                logger.warning(\"%s/jobs is not writable, changed\", path)\n                sftp.chmod(path, stat.S_IWRITE)\n        except FileNotFoundError:\n            logger.warning(\"create jobs %s\", os.path.join(self.path, \"jobs\"))\n            sftp.mkdir(os.path.join(self.path, \"jobs\"))\n\n        if overwrite:\n            logger.info(\"Overwrite script %s\", remote_script)\n            sftp.put(local_script, remote_script)\n            sftp.chmod(remote_script, stat.S_IRWXU)\n        try:\n            sftp.stat(remote_script)\n        except FileNotFoundError:\n            logger.warning(\"script not found, copy local file over\")\n            sftp.put(local_script, remote_script)\n            sftp.chmod(remote_script, stat.S_IRWXU)\n\n        stats = sftp.stat(remote_script)\n        if not (stats.st_mode & stat.S_IEXEC):\n            logger.warning(\"Assign correct permission\")\n            sftp.chmod(remote_script, stat.S_IRWXU)\n        sftp.close()\n        return True\n"
  },
  {
    "path": "src/aup/EE/Resource/AWSResourceManager.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\naup.EE.Resource.AWSResourceManager\n==================================\n\nAPIs\n----\n\"\"\"\nimport logging\nimport time\n\nimport boto3\nimport paramiko as pm\nfrom botocore.exceptions import ClientError\n\nfrom .SSHResourceManager import SSHResourceManager, Remote, parse_hostname\n\nlogger = logging.getLogger(__name__)\nlogging.getLogger(\"botocore\").setLevel(logger.getEffectiveLevel())\nlogging.getLogger(\"boto3\").setLevel(logger.getEffectiveLevel())\nlogging.getLogger(\"urllib3\").setLevel(logger.getEffectiveLevel())\n\nretry = 10  # number of retries\nDEFAULT_SHUTDOWN = False  # shutdown after experiment\nprescript = \"\" # commands to be executed before script\npostscript = \"\" # commands to be executed after script\n\n\ndef _is_instance_id(hostname):\n    return 'i-' in hostname\n\n\nclass AWSRemote(Remote):  # pragma: no cover\n    ec2_resource = boto3.resource('ec2')\n    ec2_client = boto3.client('ec2')\n\n    @classmethod\n    def change_status(cls, hostnames, target='start'):\n        \"\"\"\n        Changes status of the AWS machine depending on the target status and permissions.\n        \"\"\"\n        if target == 'start':\n            action = cls.ec2_client.start_instances\n        else:\n            action = cls.ec2_client.stop_instances\n        try:\n            action(InstanceIds=hostnames, DryRun=True)\n        except ClientError as e:\n            if 'DryRunOperation' in str(e):\n                logger.debug(\"Permission to start/stop EC2 instance granted\")\n            else:\n                logger.fatal(\"You don't have permissions\")\n                raise e\n        try:\n            response = action(InstanceIds=hostnames, DryRun=False)\n            logger.debug(response)\n        except ClientError as e:\n            logger.debug(e)\n            if e.response['Error']['Code'] in ('IncorrectInstanceState'):\n                retry_counter = 0\n                while retry_counter < retry:\n                    try:\n                        response = action(InstanceIds=hostnames, DryRun=False)\n                        break\n                    except ClientError:\n                        retry_counter += 1\n                        logger.warning(\"Instance not yet ready for starting, retry in 30 sec (%d/%d)\", retry_counter, \n                                       retry)\n                        time.sleep(30)\n                if retry_counter == retry:\n                    logger.fatal('cannot start instance, there might be some issues')\n                    raise EnvironmentError(\"Failed to start AWS instance with in %d retries\", retry)\n\n    @classmethod\n    def verify(cls, hostname):\n        \"\"\"\n        Verifies if instance can be loaded, returns the instance object if true.\n        \"\"\"\n        instance = cls.ec2_resource.Instance(hostname)\n        try:\n            instance.load()\n        except ClientError as e:\n            logger.fatal(\"\"\"There is an error running on instance %s\n                         There can be many reasons, such as wrong instance name, insufficient permissions or\n                         incorrect AWS confirmations\"\"\", hostname)\n            raise e\n        return instance\n\n    def __init__(self, instance):\n        \"\"\"\n\n        :param instance: string formatted according to :code:`.SSHResourceManager.parse_hostname`\n        :type instance: str\n        \"\"\"\n        super(AWSRemote, self).__init__(instance)\n\n        if not _is_instance_id(self.hostname):  # use SSHResourceManager\n            logger.debug(\"AWS connection profile %s %s\", self.username, self.hostname)\n            return\n\n        instance = self.verify(self.hostname)\n        if instance.state['Name'] == 'running':\n            logger.debug('Instance is already running')\n            self.hostname = instance.public_dns_name\n            logger.debug(\"New Hostname= %s\", str(self.hostname))\n        else:\n            logger.debug(\"Instance was not running, Starting instance\")\n            self.change_status([self.hostname])\n            instance = self.ec2_resource.Instance(self.hostname)\n            try:\n                instance.wait_until_running()\n            except Exception as e:\n                logger.fatal(\"Catch unexpected problem with AWS instance\")\n                raise e\n            self.hostname = instance.public_dns_name\n            while instance.state['Name'] != 'running':\n                logger.warning(\"waiting instance %s to start, wait 10 sec\", instance.state['Name'])\n                time.sleep(10)\n                instance.load()  # additional waiting time for SSH service ready\n            logger.debug('...instance is %s', instance.state['Name'])\n        logger.debug(\"AWS connection profile %s %s\", self.username, self.hostname)\n\n    def exec_command(self, command, *args, **kwargs):\n        return self.client.exec_command(command, *args, **kwargs)\n\n    def __enter__(self):\n        retry_counter = 0\n        while retry_counter < retry:\n            try:\n                self.client.connect(hostname=self.hostname, username=self.username, pkey=self.key, timeout=180,\n                                    auth_timeout=180)\n                logger.debug(\"Connected to AWS instance\")\n                break\n            except pm.ssh_exception.NoValidConnectionsError:\n                retry_counter += 1\n                logger.warning(\"Instance not yet ready for ssh, retry in 30 sec (%d/%d)\", retry_counter, retry)\n                time.sleep(30)\n        if retry_counter == retry:\n            logger.fatal('cannot connect to instance, there might be some issues')\n            raise EnvironmentError(\"Failed to start AWS instance with in %d retries\" % retry)\n        return self\n\n\nclass AWSResourceManager(SSHResourceManager):  # pragma: no cover\n    def __init__(self, *args, **kwargs):\n        super(AWSResourceManager, self).__init__(*args, key=\"aws_mapping\", **kwargs)\n        self.remote_class = AWSRemote\n        self.shutdown = kwargs.get(\"shutdown\", DEFAULT_SHUTDOWN)\n        global retry\n        retry = kwargs.get(\"connection_retry\", retry)\n        self.used_resource = set()\n\n    def __del__(self):\n        if not self.shutdown:\n            logger.debug(\"AWS EC2 keeps running\")\n            return\n        to_stop = []\n        try:\n            for rid in self.used_resource:\n                _, hostname, _, _ = parse_hostname(self.mapping[rid])\n                if not _is_instance_id(hostname):\n                    logger.info(\"Not AWS instance ID, won't stop %s\", hostname)\n                    continue\n                logger.debug(\"Stopping instance with name %s\", hostname)\n                instance = AWSRemote.verify(hostname)\n                if instance.state['Name'] == 'stopped':\n                    logger.warning('instance is already stopped')\n                else:\n                    to_stop.append(hostname)\n            AWSRemote.change_status(to_stop, target='stop')\n            logger.info(\"Following instances '%s' are stopped\", ','.join(to_stop))\n        except Exception as e:\n            logger.fatal(\"Encounter error %s during shutdown, instances may not be stopped correctly\", e)\n\n    def run(self, job, rid, *args, **kwargs):\n        self.used_resource.add(rid)\n        super(AWSResourceManager, self).run(job, rid, *args, **kwargs)\n\n"
  },
  {
    "path": "src/aup/EE/Resource/AbstractResourceManager.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\naup.EE.Resource.AbstractResourceManager\n=======================================\n\nAbstract Interface of Resource Managers.\n\nUsing :func:`get_resource_manager` to create the corresponding object with the following resource type.\n\nFor different resource supports, see :doc:`environment`.\n\nAPIs\n----\n\"\"\"\nimport abc\nimport copy\nimport importlib\nimport logging\nimport random\nimport threading\nimport time\nimport numpy as np\nimport math\nimport warnings\n\nfrom ...utils import DEFAULT_AUPTIMIZER_PATH\nfrom .utils.curve_fitting import CurveModel\n\nABC = abc.ABCMeta('ABC', (object,), {'__slots__': ()})\nEARLY_STOPPING_SLEEP = 1\nCURVE_FITTING_MIN_ITS = 4\nlogger = logging.getLogger(__name__)\n\n_SupportResource = {\"gpu\": \"GPUResourceManager\",\n                    \"cpu\": \"CPUResourceManager\",\n                    \"node\": \"SSHResourceManager\",\n                    \"aws\": \"AWSResourceManager\",\n                    \"passive\": \"PassiveResourceManager\"}\n\n\ndef get_resource_manager(resource, connector, n_parallel, auppath=DEFAULT_AUPTIMIZER_PATH, **kwargs):\n    \"\"\"\n    Get resource manager for a specific resource type\n\n    :param resource: gpu or cpu type resource\n    :type resource: str\n    :param connector: database connector\n    :type connector: AbstractConnector\n    :param n_parallel: how many parallel jobs to be run\n    :type n_parallel: int\n    :param auppath: aup environment folder\n    :type auppath: str\n    :return: resource manager\n    :rtype: AbstractResourceManager\n    \"\"\"\n    try:\n        resource = _SupportResource[resource]\n    except KeyError:\n        raise KeyError(\"%s not implemented\" % resource)\n\n    mod = importlib.import_module(\".%s\" % resource, \"aup.EE.Resource\")\n    return mod.__dict__[resource](connector, n_parallel, auppath=auppath, **kwargs)\n\n\nclass AbstractResourceManager(ABC):\n    \"\"\"\n    Create Resource to run jobs.\n\n    :param connector: Connector to database\n    :type connector: AbstractConnector\n    \"\"\"\n\n    def __init__(self, connector, n_parallel, *args, **kwargs):\n        self.connector = connector\n        self.jobs = dict()\n\n        warnings.filterwarnings(\"ignore\")\n\n        self.curr_global_iteration = 0\n        self.maximize = kwargs.get(\"maximize\", True)\n        self.stopped_jobs = None\n        self.stopped_jobs_lock = threading.Lock()\n        self.n_parallel = n_parallel\n        self.eid = kwargs.get(\"eid\", None)\n        self.result_labels = kwargs.get('multi_res_labels', None)\n\n        self.track_intermediate_results = kwargs.get(\"track_intermediate_results\", False)\n        self.interm_job_res = None\n        if self.track_intermediate_results:\n            self.interm_job_res = dict()\n\n        # variables for early stop impl\n        if \"early_stop\" in kwargs:\n            self.policy = kwargs[\"early_stop\"][\"aup_policy\"]\n            self.policy_steps = kwargs[\"early_stop\"][\"aup_policy_steps\"]\n            self.warmup = kwargs[\"early_stop\"].get(\"warmup\", 0)\n            self.bandit_factor = kwargs[\"early_stop\"].get(\"bandit_factor\", 0.5)\n            self.truncation_percentage = kwargs[\"early_stop\"].get(\"truncation_percentage\", 0.3)\n            self.curve_fitting_threshold = kwargs[\"early_stop\"].get(\"curve_fitting_threshold\", 0.95)\n            self.curve_fitting_max_iters = kwargs[\"early_stop\"].get(\"curve_fitting_max_iters\", None)\n            self.curve_fitting_timeout = kwargs[\"early_stop\"].get(\"curve_fitting_timeout\", 60)\n            self.job_checked = dict()\n            self.early_stop_daemon_finished = False\n            self.stopped_jobs = set()\n            if self.policy == \"curve_fitting\" and self.curve_fitting_max_iters is None:\n                raise ValueError(\"Curve fitting policy requires argument \\\"curve_fitting_max_iters\\\" representing \" +\n                                 \"the total number of intermediate results that the script will provide.\")\n            self.early_stop_daemon = threading.Thread(target=AbstractResourceManager.early_stop_daemon_fun,\n                                        args=(self,), daemon=True)\n            self.early_stop_daemon.start()\n        else:\n            self.warmup = None\n            self.policy = None\n            self.policy_steps = 0\n            self.job_checked = dict()\n            self.early_stop_daemon_finished = True\n            self.early_stop_daemon = None\n            self.stopped_jobs = None\n\n    def finish(self, status=\"FINISHED\"):\n        \"\"\"\n        Finish up the resource allocation.\n        :param status: status of the experiment\n        :type status: string\n\n        :return: Max/Min result in experiment (job id, score)\n        :rtype: None | [int, float]\n        \"\"\"\n        self.connector.end_experiment(self.eid, status)\n        if self.early_stop_daemon != None:\n            self.early_stop_daemon_finished = True\n            self.early_stop_daemon.join()\n        return self.connector.get_best_result(self.eid, maximize=self.maximize)\n\n    def finish_job(self, jid, score, status=None):\n        \"\"\"\n        Finish one job\n\n        :param jid: job ID\n        :type jid: int\n        :param score: job for the experiment\n        :type score: float | None\n        \"\"\"\n        if jid in self.jobs:\n            rid = self.jobs.pop(jid)\n            self.connector.job_finished(rid, jid, score, status)\n        else:\n            logger.warning(\"Job %d finished after job suspension, result may lose\" % jid)\n\n    def get_available(self, username, rtype, rid_blacklist=None):\n        \"\"\"\n        method to get the available resource to run a job\n\n        :param username: username for job running\n        :type username: str\n        :param rtype: resource type\n        :type rtype: str\n        :param rid_blacklist: resource ids to ignore\n        :type rid_blacklist: [int]\n        :return: a random selection of all available resource IDs\n        :rtype: int\n        \"\"\"\n        rids = self.connector.get_available_resource(username, rtype, rid_blacklist)\n        logger.debug(\"Request resource (%s) for user %s and get %s\" % (rtype, username, rids.__str__()))\n        return random.choice(rids) if rids else None\n\n    def run_job(self, job, rid, exp_config, call_back_func, **kwargs):\n        \"\"\"\n        Job running interface, this is called by :mod:`aup.EE.Experiment`.\n\n        It is a wrapper for :func:`run`.\n\n        :param job: Job to run\n        :type job: Job\n        :param rid: resource ID\n        :type rid: int\n        :param exp_config: experiment configuration\n        :type exp_config: BasicConfig\n        :param call_back_func: call back function to update result\n        :type call_back_func: function object\n        \"\"\"\n        self.connector.take_available_resource(rid)\n        self.jobs[job.jid] = rid\n\n        if self.interm_job_res != None:\n            self.interm_job_res[job.jid] = list()\n            self.job_checked[job.jid] = list()\n\n        try:\n            self.run(job, rid, exp_config, call_back_func, **kwargs)\n        except EnvironmentError as e:\n            self.connector.free_used_resource(rid)\n            logger.fatal(\"Experiment interrupted.\")\n            raise(e)\n\n    def append_interm_res(self, jid, interm_res):\n        if self.interm_job_res == None:\n            return None\n\n        if jid in self.interm_job_res:\n            self.interm_job_res[jid].append(interm_res)\n            if self.connector:\n                return self.connector.save_intermediate_result(jid, interm_res)\n            else:\n                logger.warning(\"Could not save intermediate result: no connector attached to resource manager\")\n            return None\n        else:\n            logger.fatal(\"Job {} should have already started!\".format(jid))\n            return None\n\n    def append_multiple_results(self, jid, irid, eid, scores):\n        if self.result_labels is None or len(scores) == 0:\n            return\n\n        assert len(self.result_labels) == len(scores), \\\n                \"labels size mismatch with the provided scores\"\n\n        if self.connector is not None:\n            self.connector.save_multiple_results(jid, irid, eid, self.result_labels, scores)\n\n    def set_last_multiple_results(self, eid, jid):\n        if self.result_labels is None:\n            return\n\n        if self.connector is not None:\n            self.connector.set_last_multiple_results(eid, jid, len(self.result_labels))\n\n    def stop_job(self, jid):\n        \"\"\"\n        Stop a job for early stopping strategies\n\n        :param jid: job ID\n        :type jid: int\n        \"\"\"\n        if jid not in self.jobs:\n            logger.debug(\"Tried to stop job {} not in currently running jobs.\".format(jid))\n        with self.stopped_jobs_lock:\n            self.stopped_jobs.add(jid)\n\n    def is_job_stopped(self, jid):\n        \"\"\"\n        Returns whether or not a specific job stop is pending\n\n        :param jid: job ID\n        :type jid: int\n        :return: whether or not the given job ID is in the list of pending job stops\n        :rtype: bool\n        \"\"\"\n        with self.stopped_jobs_lock:\n            return self.stopped_jobs is not None and jid in self.stopped_jobs\n\n    @abc.abstractmethod\n    def run(self, job, rid, exp_config, call_back_func, **kwargs):\n        \"\"\"\n        Job running implemented for the specific resource manager. \n        It is called by :func:`run_job`.\n\n        :param job: a job object\n        :type job: Job\n        :param rid: resource id returned from :func:`get_available`.\n        :type rid: int\n        :param exp_config: experiment configuration\n        :type exp_config: BasicConfig\n        :param call_back_func: function to trigger after job finished\n        :type call_back_func: function object\n        \"\"\"\n        raise NotImplementedError\n\n    def suspend(self):\n        \"\"\"\n        Suspend job upon request\n        \"\"\"\n        for jid in list(self.jobs.keys()):\n            self.finish_job(jid, None)\n            logger.warning(\"Job %d is canceled\" % jid)\n\n    def run_curve_fitting(self, interm_res, c_jid, step, comp_fn, curve_fitting_threshold, best_val):\n        curvemodel = CurveModel(self.curve_fitting_max_iters)\n        predict_y = curvemodel.predict(interm_res, timeout=self.curve_fitting_timeout)\n        if predict_y is None:\n            return\n        if not comp_fn(predict_y, curve_fitting_threshold * best_val):\n            if self.is_job_stopped(c_jid):\n                return\n            self.stop_job(c_jid)\n            logger.info(\"Stopping job {} early (step {}): predicted end value {:.4f} is lower than the best value so far {:.4f} within the given {:.2f}% threshold (={:.4f})\".format(\n                c_jid, step, predict_y, best_val, 100. * curve_fitting_threshold, curve_fitting_threshold * best_val))\n\n    def early_stop_daemon_fun(self):\n        while not self.early_stop_daemon_finished:\n            # do not consider the early stopped jobs\n            with self.stopped_jobs_lock:\n                current_jobs = set(self.jobs) - self.stopped_jobs\n\n            finished_interm_job_res = self.connector.get_intermediate_results_experiment(self.eid, \"FINISHED\")\n            current_interm_job_res = self.connector.get_intermediate_results_jobs(list(current_jobs))\n            interm_job_res = {**current_interm_job_res, **finished_interm_job_res}\n\n            best_fn = np.max if self.maximize else np.min\n            comp_fn = (lambda x, target: x >= target) if self.maximize else \\\n                      (lambda x, target: x <= target)\n\n            curve_fitting_threads = []\n\n            for c_jid, c_interm_res in current_interm_job_res.items():\n                if len(c_interm_res) < self.warmup:\n                    continue\n\n                if c_jid not in self.job_checked:\n                    self.job_checked[c_jid] = []\n\n                k = len(c_interm_res) // self.policy_steps\n                if k < 1:\n                    time.sleep(EARLY_STOPPING_SLEEP)\n                    continue\n\n                step = k * self.policy_steps\n                if step in self.job_checked[c_jid]: # job already compared up until this step, waiting for next k multiple\n                    time.sleep(EARLY_STOPPING_SLEEP)\n                    continue\n\n                comp_interm_job_res = {jid: vals for jid, vals in interm_job_res.items() if len(vals) >= step and jid != c_jid}\n                if len(comp_interm_job_res) < 1: # too few jobs \n                    time.sleep(EARLY_STOPPING_SLEEP)\n                    continue\n\n                if self.policy == \"median\":\n                    avgs = [np.average(vals[:step]) for vals in comp_interm_job_res.values()]\n                    median = np.median(avgs)\n                    best_val = np.average(c_interm_res[:step])\n                    if not comp_fn(best_val, median):\n                        self.stop_job(c_jid)\n                        logger.info(\"Stopping job {} early (step {}): best value so far {:.4f} worse than median of averages {:.4f} for {} other jobs\".format(\n                            c_jid, step, best_val, median, len(comp_interm_job_res)))\n                elif self.policy == \"bandit\":\n                    bandit_best_val = best_fn([best_fn(vals[:step]) for vals in comp_interm_job_res.values()])\n                    best_val = best_fn(c_interm_res[:step])\n                    bandit_factor = self.bandit_factor if ((self.maximize and np.sign(bandit_best_val) == 1) or (not self.maximize and np.sign(bandit_best_val) == -1)) else \\\n                                    2 - self.bandit_factor\n                    if not comp_fn(best_val, bandit_factor * bandit_best_val):\n                        self.stop_job(c_jid)\n                        logger.info(\"Stopping job {} early (step {}): best value so far {:.4f} worse than a factor {:.4f} of best overall value {:.4f} (={:.4f}) for {} other jobs\".format(\n                            c_jid, step, best_val, bandit_factor, bandit_best_val, bandit_factor * bandit_best_val, len(comp_interm_job_res)))\n                elif self.policy == \"truncation\":\n                    best_vals = sorted([(jid, best_fn(vals[:step])) for jid, vals in (list(comp_interm_job_res.items()) + [(c_jid, c_interm_res)])], \n                                        key=lambda t: t[1], reverse=not self.maximize)\n                    best_val_idx = next((idx for idx, (jid, val) in enumerate(best_vals) if jid == c_jid)) + 1\n                    perc = float(best_val_idx) / len(best_vals)\n                    if perc <= self.truncation_percentage:\n                        self.stop_job(c_jid)\n                        logger.info(\"Stopping job {} early (step {}): best value so far {:.4f} is in the bottom {:.2f}% of {} jobs, which is lower than the {:.2f}% cutoff\".format(\n                            c_jid, step, best_vals[best_val_idx-1][1], 100. * best_val_idx / len(best_vals), len(best_vals), 100. * self.truncation_percentage))\n                elif self.policy == \"curve_fitting\":\n                    if len(finished_interm_job_res) < 1 or step <= CURVE_FITTING_MIN_ITS:\n                        continue\n                    interm_res = copy.deepcopy(c_interm_res)\n                    best_val = best_fn([best_fn(vals) for vals in finished_interm_job_res.values()])\n                    if not self.maximize:\n                        interm_res *= -1\n                        best_val *= -1\n                    curve_fitting_threshold = self.curve_fitting_threshold if np.sign(best_val) == 1 else \\\n                                              2 - self.curve_fitting_threshold\n                    cf_thread = threading.Thread(target=self.run_curve_fitting, \n                        args=(interm_res[:step], c_jid, step, (lambda x, target: x >= target), curve_fitting_threshold, best_val))\n                    cf_thread.start()\n                    curve_fitting_threads += [cf_thread]\n\n                self.job_checked[c_jid] += [step]\n            \n            for thread in curve_fitting_threads:\n                thread.join()\n\n            time.sleep(EARLY_STOPPING_SLEEP)\n\n    def refresh(self):\n        '''\n        Method for refreshing timers/variables etc\n        '''\n        pass\n\n    def log_error_message(self, msg):\n        self.connector.log_error_message(self.eid, msg)\n"
  },
  {
    "path": "src/aup/EE/Resource/CPUResourceManager.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n  \naup.EE.Resource.CPUResourceManager\n==================================\n\nResource Manager for CPUs on a single machine.\n\nHowever, user can specify arbitrary number for parallel computing, no real control of resources (yet).\n\nAPIs\n----\n\"\"\"\nimport logging\nimport os\nimport subprocess\nimport threading\nimport sys\nimport json\nfrom numpy import random\n\nfrom .AbstractResourceManager import AbstractResourceManager\nfrom ...utils import parse_result, parse_one_line\nfrom .AbstractResourceManager import _SupportResource\nfrom ...aup import BasicConfig\nfrom ..Job import Job\nfrom .utils.ResourceThreadPoolExecutor import ResourceThreadPoolExecutor\n\nlogger = logging.getLogger(__name__)\n\n\nclass CPUResourceManager(AbstractResourceManager):\n    def __init__(self, connector, n_parallel, *args, **kwargs):\n        super(CPUResourceManager, self).__init__(connector, n_parallel, *args, **kwargs)\n        self.executor = ResourceThreadPoolExecutor(max_workers=n_parallel)\n        self.n_parallel = n_parallel\n        self.lock = threading.Lock()\n        self.running = []\n        self.save_model = kwargs.get('save_model', False)\n        self.script = kwargs.get('script', None)\n        self.workingdir = kwargs.get('workingdir', None)\n        self.one_shot = kwargs.get(\"one_shot\", False)\n        self.runtime_args = kwargs.get('runtime_args', {})\n\n    def finish(self, maximize=True, status=\"FINISHED\"):\n        self.executor.shutdown(wait=True)\n        best_result = super(CPUResourceManager, self).finish(status)\n\n        self.connector.free_all_resources()\n\n        if self.save_model is True and best_result is not None and status == 'FINISHED':\n            logger.info(\"Experiment finished, starting best job\")\n\n            # re-run the best job, but also save the model on the disk\n            self.executor = ResourceThreadPoolExecutor(max_workers=1)\n            best_job_config_str = self.connector.get_best_result_config(self.eid, self.maximize)\n            best_job_config = BasicConfig()\n            best_job_config.update(json.loads(best_job_config_str[0]))\n            best_job_config['save_model'] = True\n            best_job_config['folder_name'] = 'models_{}'.format(self.eid)\n\n            # todo improve\n            _rtype = None\n            for res, cname in _SupportResource.items():\n                if cname == self.__class__.__name__:\n                    _rtype = res\n                    break\n\n            # all should be free, but just in case\n            rids = self.connector.get_available_resource(None, _rtype)\n            free_rid = random.choice(rids) if rids else None\n            best_job = Job(self.script, best_job_config, self.workingdir)\n            # special job id for best job\n            best_job.jid = best_result[0]\n\n            def best_job_callback(score, jid):\n                if score != 'ERROR':\n                    logger.info(\"Best job finished, please check aup_models/models_{} folder\".format(self.eid))\n\n            self.run(best_job, free_rid, None, best_job_callback, **self.runtime_args)\n\n            self.executor.shutdown(wait=True)\n\n        return best_result\n\n    def run(self, job, rid, exp_config, call_back_func, **kwargs):\n        if \"env\" not in kwargs:\n            # make sure not over step on GPUs\n            kwargs[\"env\"] = os.environ\n            # todo -1 or empty?\n            kwargs[\"env\"][\"CUDA_VISIBLE_DEVICES\"] = \"\"\n        else:\n            kwargs[\"env\"] = kwargs[\"env\"]\n\n        def job_run():\n            logger.debug(\"Job %d started\" % job.jid)\n            save_model_flag = job.config.get('save_model', False)\n            config_path = None\n            log_dump_path = None\n            result = None\n            res = \"ERROR\"\n            proc = None\n            script = None\n            output = None\n\n            try:\n                if save_model_flag is not True or self.one_shot:\n                    config_path = os.path.join(job.path, \"jobs\", \"%d.json\" % job.jid)\n                    log_dump_path = os.path.join(job.path, \"jobs\", \"%d.%d.out\" % (job.jid, job.curr_retries))\n                else:\n                    config_path = os.path.join(job.path, \"jobs\", 'best_job_%d.json' % self.eid)\n                    log_dump_path = os.path.join(job.path, \"jobs\", \"best_job_%d.out\" % self.eid)\n\n                result = \"%s\\n%s\" % (job.script, config_path)\n\n                job.verify_local()\n                job.config.save(config_path)\n\n                script = job.script.split(\" \") + [config_path]\n                proc = subprocess.Popen(script, cwd=job.path,\n                                        stdout=subprocess.PIPE, stderr=subprocess.STDOUT,\n                                        **kwargs)\n                output = \"\"\n                with open(log_dump_path, 'w') as fp:\n                    while True:\n                        if self.is_job_stopped(job.jid) == True:\n                            proc.kill()\n                            raise StopIteration()\n\n                        line = proc.stdout.readline()\n                        if not line:\n                            break\n\n                        line_str = line.decode(sys.stdin.encoding if sys.stdin.encoding is not None else 'UTF-8')\n                        output += line_str\n\n                        interm_res = parse_one_line(line_str)\n                        if interm_res != None:\n                            res = interm_res[0]\n                            irid = self.append_interm_res(job.jid, interm_res[0])\n                            self.append_multiple_results(job.jid, irid, self.eid, interm_res[1:])\n\n                        # continuously write to jid.out file\n                        fp.write(line_str)\n\n                # set the flag in multiple_result table\n                self.set_last_multiple_results(self.eid, job.jid)\n\n                if res == \"ERROR\":\n                    raise ValueError\n\n            except StopIteration:\n                logger.debug(\"Job stopped\")\n                res = \"EARLY STOPPED\"\n            except ValueError:\n                logger.fatal(\"Failed to parse result, check %s\", log_dump_path)\n            except subprocess.CalledProcessError as e:\n                logger.fatal(\"Failed to run job:\\n%s\", result)\n                output = e.output\n            except (Exception, EnvironmentError) as e:  # pragma: no cover\n                logger.fatal(\"Failed to run job:\\n%s\", result)\n                logger.fatal(\"Error message might not be right: %s\", e)\n                output = str(e)\n            finally:\n                if res == \"ERROR\" and output is not None:\n                    self.log_error_message(output)\n                # should be already terminated, but just in case\n                if proc is not None:\n                    proc.kill()\n\n                return res, job.jid\n\n        def call_back(future3):\n            \"\"\"\n            Use to collect result. Don't change.\n            \"\"\"\n            logger.debug(\"Callback for job %d\" % job.jid)\n            try:\n                self.lock.acquire(True)\n                if future3.exception():\n                    logger.fatal(\"Error happened with job script with following error message (not reliable)\")\n                    logger.fatal(type(future3.exception()))\n                    logger.fatal(future3.exception())\n                    raise ChildProcessError\n                result = future3.result()\n                logger.debug(\"Callback result: %s\" % result.__str__())\n                call_back_func(*result)\n            except ChildProcessError:\n                logger.fatal(\"Use ctrl+c to stop experiment\")\n            finally:\n                self.running.pop(self.running.index(future3))\n                self.lock.release()\n\n        future = self.executor.submit(job_run)\n        if future is not None:\n            self.running.append(future)\n            future.add_done_callback(call_back) \n"
  },
  {
    "path": "src/aup/EE/Resource/GPUResourceManager.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\naup.EE.Resource.GPUResourceManager\n==================================\n\nResource manager for Single GPU machine.\n\nIt supports:\n\n1. Multiple Cards\n2. Multiple jobs running on a shared card (no control over GPU resource limit)\n\nAPIs\n----\n\"\"\"\nimport json\nimport logging\nimport os\n\nfrom .CPUResourceManager import CPUResourceManager\nfrom ...utils import check_missing_key, load_default_env, DEFAULT_AUPTIMIZER_PATH\n\nlogger = logging.getLogger(__name__)\n\n\ndef _load_gpu_mapping(auppath=DEFAULT_AUPTIMIZER_PATH):\n    \"\"\"\n    loads GPU mapping based on environment and config\n    \"\"\"\n    config = load_default_env(auppath=auppath)\n    check_missing_key(config, \"gpu_mapping\", \"Missing gpu_mapping parameter in aup config file\", log=logger)\n    # need to reverse the type for GPU mapping\n    d = json.loads(config[\"gpu_mapping\"])\n    return {int(k): str(d[k]) for k in d}\n\n\nclass GPUResourceManager(CPUResourceManager):\n    def __init__(self, connector, n_parallel, auppath=DEFAULT_AUPTIMIZER_PATH, *args, **kwargs):\n        super(GPUResourceManager, self).__init__(connector, n_parallel, *args, **kwargs)\n        self.mapping = _load_gpu_mapping(auppath=auppath)\n\n    def run(self, job, rid, exp_config, call_back_func, **kwargs):\n        logger.debug(\"Job %d started on GPU %s\", job.jid, self.mapping[rid])\n        env = os.environ\n        env[\"CUDA_VISIBLE_DEVICES\"] = self.mapping[rid]\n        super(GPUResourceManager, self).run(job, rid, exp_config, call_back_func, env=env)\n\n"
  },
  {
    "path": "src/aup/EE/Resource/PassiveResourceManager.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\naup.EE.Resource.PassiveResourceManger\n=====================================\n\nLeave the user to run script interactively.\n\n+ It supports only one job running at a time.\n+ It prints the command on the screen and asks user to return the value\n\nAPIs\n----\n\"\"\"\nimport logging\nimport os\n\nfrom six.moves import input\n\nfrom .AbstractResourceManager import AbstractResourceManager\n\nlogger = logging.getLogger(__name__)\n\n\nclass PassiveResourceManager(AbstractResourceManager):\n    def __init__(self, connector, *args, **kwargs):\n        super(PassiveResourceManager, self).__init__(connector, *args, **kwargs)\n        self.running = False\n\n    def get_available(self, username, rtype):\n        if not self.running:\n            rid = super(PassiveResourceManager, self).get_available(username, rtype)\n            if rid:\n                return rid\n            else:\n                logger.fatal(\"Resource passive is exhausted.  Free it from the database or create more for testing.\")\n                return None\n        else:\n            return None\n\n    def run(self, job, rid, exp_config, call_back_func, **kwargs):\n        job.verify_local()\n        self.running = True\n        config_path = os.path.join(job.path, \"jobs\", \"%d.json\" % job.jid)\n        job.config.save(config_path)\n        value = input(\"\"\"# Job running path is %s\n        # Config is at %s\n        Job command is:\n        %s\n        Please run the job and manually type in results:\\n\"\"\" % (job.path, config_path, job.script))\n        value = float(value)\n        self.running = False\n        call_back_func(value, job.jid)\n"
  },
  {
    "path": "src/aup/EE/Resource/SSHResourceManager.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\naup.EE.Resource.SSHResourceManager\n==================================\n\nAPIs\n----\n\"\"\"\nimport json\nimport logging\nimport os\nimport sys\nimport time\nimport threading\n\nimport paramiko as pm\n\nfrom .CPUResourceManager import CPUResourceManager\nfrom ...utils import check_missing_key, load_default_env, parse_result, DEFAULT_AUPTIMIZER_PATH, block_until_ready\nfrom ...utils import open_sftp_with_timeout, parse_one_line\nfrom ..Job import Job\n\nlogger = logging.getLogger(__name__)\n# logging.getLogger(\"paramiko\").setLevel(logger.getEffectiveLevel())\nlogging.getLogger(\"paramiko\").setLevel(logging.CRITICAL)\n\n\ndef parse_hostname(host):\n    \"\"\"\n    Parse the host name, in the following formats:\n\n    + `username@ip` or\n    + `username@ip:port` or\n    + `username@ip ssh_key` or\n    + `username@ip:port ssh_key`\n\n    :param host: host name string\n    :type host: str\n    :return: username, hostname, port=22, key (parsed from ~/.ssh/id_rsa)\n    \"\"\"\n    if \"@\" not in host:\n        logger.fatal(\"Username@IP is minimal requirement\")\n        raise ValueError(\"host name %s is not correct\" % host)\n    try:\n        username, hostname = host.split(\"@\")\n        if \" \" in hostname:\n            hostname, key = hostname.split(\" \")\n            key = pm.RSAKey.from_private_key_file(key)\n        else:\n            key = None  # use default\n        if \":\" in hostname:\n            hostname, port = hostname.split(\":\")\n            port = int(port)\n        else:\n            hostname = hostname\n            port = 22\n    except Exception as e:\n        logger.fatal(\"Catch other error when parsing the remote resource configuration.  Check documentation please.\")\n        raise e\n    return username, hostname, port, key\n\n\nclass Remote(object):  # pragma: no cover\n    def __init__(self, host):\n        \"\"\"\n        parse host name string into full host spec:\n        `username@ip` or `username@ip:port` or `username@ip ssh_key` or `username@ip:port ssh_key`\n        :param host: host name string\n        \"\"\"\n        self.username, self.hostname, self.port, self.key = parse_hostname(host)\n\n        client = pm.SSHClient()\n        client.load_system_host_keys()\n        client.set_missing_host_key_policy(pm.AutoAddPolicy())\n        self.client = client\n\n    def exec_command(self, command, command_async=None, *args, **kwargs):\n        return self.client.exec_command(command, *args, **kwargs)\n\n    def __enter__(self):\n        self.client.connect(self.hostname, self.port, self.username, pkey=self.key,\n                            timeout=5, auth_timeout=5, banner_timeout=5)\n        return self\n\n    def __exit__(self, exc_type, exc_val, exc_tb):\n        self.client.close()\n\n\nclass SSHResourceManager(CPUResourceManager):  # pragma: no cover\n    def __init__(self, connector, n_parallel, key=\"node_mapping\", auppath=DEFAULT_AUPTIMIZER_PATH,\n                async_reconnect=30, async_timeout=None,\n                async_run=False, reconn_wait_time=30, max_retries=3, **kwargs):\n        \"\"\"\n        :param connector: SQL connector\n        :param n_parallel: number of parallel jobs\n        :param key: where to find the node assignment in aup env.ini\n        :param auppath: aup environment path\n        :param async_run: whether the ssh job should be run asynchronously\n        :param async_reconnect: number of seconds to reconnect and check job status of async job\n        :param async_timeout: maximum number of seconds to try reconnection to the async job, otherwise failure\n        :param reconn_wait_time: for non-async jobs, maximum number of seconds to try reconnection to the job, otherwise failure\n        :param max_retries: for both async and non-async jobs, maximum number of retries for each job.\n        :param kwargs: experiment.json -> resource_args will be loaded here.\n        \"\"\"\n        super(SSHResourceManager, self).__init__(connector, n_parallel, **kwargs)\n        self.mapping = self.load_node_mapping(key=key, auppath=auppath)\n        self.verified = set()\n        self.remote_class = Remote\n        self._wait_time = reconn_wait_time\n        self._n_tries = max_retries\n        self._async_run = async_run\n        self._async_reconnect = async_reconnect\n        self._async_timeout = async_timeout\n        # refresh rate of 1 second for async\n        self._get_interm_res = 0.1\n        self.refresh_lock = threading.Lock()\n        self.s_passed_recon = 0\n        self.s_passed_interm = 0\n\n    @staticmethod\n    def load_node_mapping(key=\"node_mapping\", auppath=DEFAULT_AUPTIMIZER_PATH):\n        \"\"\"\n        Loads ssh configurations from file.\n        \"\"\"\n        config = load_default_env(auppath=auppath)\n        check_missing_key(config, key, \"Missing %s parameter in aup config\" % key, log=logger)\n        d = json.loads(config[key])\n        logger.debug(\"Load resources %s\", json.dumps(d))\n        return {int(i): d[i] for i in d}\n\n    def run(self, job, rid, exp_config, call_back_func, **kwargs):\n        # experiment.json -> runtime_args will be loaded here\n        logger.debug(\"Job %d started on node %s\", job.jid, self.mapping)\n        overwrite = kwargs.get('overwrite', False)\n        env = kwargs.get('env', {})\n        logger.debug(\"Environment variables - %s\", env)\n        prescript = kwargs.get(\"prescript\", \"\").strip()\n        if prescript and prescript[-1] != \";\":\n            prescript += \";\"\n        postscript = kwargs.get(\"postscript\", \"\").strip()\n        if postscript and postscript[0] != \";\":\n            postscript = \";\" + postscript\n\n        curr_number_of_tries = 0\n        logger.debug(\"path:%s; script:%s\", job.path, job.script)\n        local_script = job.script.split()[0]\n        local_job_path = os.path.join(os.path.dirname(local_script))\n        local_config = None\n        local_out = None\n        config_path = None\n\n        save_model_flag = job.config.get('save_model', False)\n        local_model_path = None\n        remote_model_path = None\n        log_dump_path = None\n        # for async run\n        done_file_path = None\n\n        if save_model_flag is True and not self.one_shot:\n            local_model_path = os.path.join(local_job_path, \"aup_models\", \"models_{}\".format(self.eid))\n            remote_model_path = os.path.join(job.path, \"aup_models\", \"models_{}\".format(self.eid))\n            config_path = os.path.join(job.path, \"jobs\", 'best_job_%d.json' % self.eid)\n            log_dump_path = os.path.join(job.path, \"jobs\", \"best_job_%d.out\" % self.eid)\n            local_config = os.path.join(local_job_path, \"jobs\", \"best_job_%d.json\" % self.eid)\n            local_out = os.path.join(local_job_path, \"jobs\", \"best_job_%d.out\" % self.eid)\n            done_file_path = os.path.join(job.path, \"jobs\", \"best_job_%d.done\" % self.eid)\n        else:\n            config_path = os.path.join(job.path, \"jobs\", \"%d.json\" % job.jid)\n            log_dump_path = os.path.join(job.path, \"jobs\", \"%d.%d.out\" % (job.jid, job.curr_retries))\n            local_config = os.path.join(local_job_path, \"jobs\", \"%d.json\" % job.jid)\n            local_out = os.path.join(local_job_path, \"jobs\", \"%d.%d.out\" % (job.jid, job.curr_retries))\n            done_file_path = os.path.join(job.path, \"jobs\", \"%d.done\" % job.jid)\n\n        result = \"workingdir:%s\\njob:%s\\n,config:%s\" % (job.path, job.script, config_path)\n        res = \"ERROR\"\n\n        # in case save_model is true\n        def download_model_files(sftp, remote_dir, local_dir):\n            from stat import S_ISDIR\n\n            os.path.exists(local_dir) or os.makedirs(local_dir)\n            dir_items = sftp.listdir_attr(remote_dir)\n            for item in dir_items:\n                remote_path = os.path.join(remote_dir, item.filename)\n                local_path = os.path.join(local_dir, item.filename)\n                if S_ISDIR(item.st_mode):\n                    download_model_files(sftp, remote_path, local_path)\n                else:\n                    sftp.get(remote_path, local_path)\n\n        def sync_job_run():\n            nonlocal curr_number_of_tries\n            nonlocal local_job_path\n            nonlocal local_config\n            nonlocal local_out\n            nonlocal config_path\n            nonlocal save_model_flag\n            nonlocal local_model_path\n            nonlocal remote_model_path\n            nonlocal log_dump_path\n            nonlocal res\n            nonlocal result\n\n            output = None\n\n            # Auptimizer tries to run each job over ssh connection, 'max_retries' number of times.\n            while curr_number_of_tries < self._n_tries:\n                try:  # TODO-change it such that no need to keep ssh connection alive\n                    with self.remote_class(self.mapping[rid]) as remote:\n                        if rid not in self.verified:\n                            job.verify_remote(remote, overwrite=overwrite)\n                            self.verified.add(rid)\n                        job.config.save(local_config)\n                        sftp = open_sftp_with_timeout(remote.client, 5)\n\n                        # The job is run by copying over the script and required context, along with setting up the correct environments and preprocessing and post processing scripts.\n\n                        stdout = None\n                        output = \"\"\n                        if job.was_executed == False:\n                            sftp.put(local_config, config_path)\n\n                            logger.debug(\"Running the following commands- \")\n                            command = \"%scd %s; ./%s %s 2>&1 | tee %s%s\" % \\\n                                        (prescript, job.path, os.path.basename(job.script), config_path, log_dump_path, postscript)\n                            logger.debug(command)\n                            stdin, stdout, stderr = remote.exec_command(command, environment=env)\n\n                            with open(local_out, 'w') as fp:\n                                while True:\n                                    if self.is_job_stopped(job.jid) == True:\n                                        sftp.close()\n                                        raise StopIteration()\n\n                                    line = stdout.readline()\n                                    if not line:\n                                        break\n                                    output += line\n\n                                    logger.debug(line)\n\n                                    interm_res = parse_one_line(line)\n                                    if interm_res != None:\n                                        res = interm_res[0]\n                                        irid = self.append_interm_res(job.jid, interm_res[0])\n                                        self.append_multiple_results(job.jid, irid, self.eid, interm_res[1:])\n\n                                    fp.write(line)\n\n                            self.set_last_multiple_results(self.eid, job.jid)\n\n                            job.was_executed = True\n\n                        if save_model_flag is True:\n                            download_model_files(sftp, remote_model_path, local_model_path)\n\n                        sftp.close()\n\n                    if res == \"ERROR\":\n                        raise ValueError\n                except StopIteration:\n                    logger.info(\"Job stopped\")\n                    res = \"EARLY STOPPED\"\n                    break\n                except ValueError as e:\n                    logger.fatal(\"Failed to parse result, check %s files at local, or %s at remote\", \n                        local_out, log_dump_path)\n                    break\n                except pm.SSHException as e:\n                    logger.fatal(\"Failed to run job over ssh due to unknown reason: %s\", str(e))\n                    logger.fatal(\"%s\", result)\n                    logger.fatal(\"Something went wrong, retrying job with id: \"+str(job.jid))\n                    curr_number_of_tries += 1\n                    time.sleep(self._wait_time)\n                    output = str(e)\n                    continue\n                except Exception as e:\n                    logger.fatal(\"catch unexpected error %s\", e)\n                    logger.fatal(\"%s\", result)\n                    logger.fatal(\"Something went wrong, retrying job with id: \"+str(job.jid))\n                    curr_number_of_tries += 1\n                    time.sleep(self._wait_time)\n                    output = str(e)\n                    continue\n                if job.was_executed == True:\n                    logger.debug(\"return %s,%d\", res, job.jid)\n                    break\n            if res == \"ERROR\":\n                if output is not None:\n                    self.log_error_message(output)\n                logger.fatal(\"Unable to run job with id: \"+str(job.jid))\n            return res, job.jid\n\n        def async_job_run():\n            nonlocal curr_number_of_tries\n            nonlocal local_job_path\n            nonlocal local_config\n            nonlocal local_out\n            nonlocal config_path\n            nonlocal save_model_flag\n            nonlocal local_model_path\n            nonlocal remote_model_path\n            nonlocal log_dump_path\n            nonlocal done_file_path\n            nonlocal res\n            nonlocal result\n\n            # touch local_out\n            open(local_out, 'w').close()\n\n            time_job_start = time.time()\n            output = None\n\n            while curr_number_of_tries < self._n_tries:\n                try:  # TODO-change it such that no need to keep ssh connection alive\n                    with self.remote_class(self.mapping[rid]) as remote:\n                        if rid not in self.verified:\n                            job.verify_remote(remote, overwrite=overwrite)\n                            self.verified.add(rid)\n                        job.config.save(local_config)\n                        sftp = open_sftp_with_timeout(remote.client, 5)\n\n                        # The job is run by copying over the script and required context, along with setting up the correct environments and preprocessing and post processing scripts.\n                        \n                        stdout = None\n                        if job.was_executed == False:\n                            sftp.put(local_config, config_path)\n\n                            logger.debug(\"Running the following commands- \")\n                            command = \"%scd %s; rm -f %s; ((./%s %s >%s 2>&1 && echo '1' > %s) || echo '0' > %s%s) &\" % \\\n                                    (prescript, job.path, done_file_path, os.path.basename(job.script), config_path, log_dump_path, \\\n                                        done_file_path, done_file_path, postscript)\n\n                            logger.debug(command)\n                            stdin, stdout, stderr = remote.exec_command(command, environment=env)\n                            block_until_ready(remote.client, stdout, env)\n                            stdout.channel.recv_exit_status()   # block #TODO entry for issue regarding persistence\n\n                            job.was_executed = True\n\n                    # Jobs that are run with async as true, run using an asynchronous agent, which reconnects every 'async_timeout' seconds to check if the job has finished\n                    # The async job and Auptimizer correspond using a dummy log outputfile ('done_file_path').\n                    # Auptimizer checks the async job for timeout, success or failure using different encodings.\n                    done_status = False\n                    check_command = \"test -f %s && cat %s\" % (done_file_path, done_file_path)\n                    with self.refresh_lock:\n                        self.s_passed_recon = 0\n                        self.s_passed_interm = 0\n                    num_lines = 0\n                    ret = 1\n                    start_time = time.time()\n                    output = \"\"\n\n                    while ret != 0:\n                        end_time = time.time()\n                        passed_time = (end_time - start_time)\n                        with self.refresh_lock:\n                            self.s_passed_recon += passed_time\n                            self.s_passed_interm += passed_time\n\n                        start_time = end_time\n\n                        if self.is_job_stopped(job.jid) == True:\n                            sftp.close()\n                            raise StopIteration()\n\n                        if self._async_timeout is not None and time.time() - time_job_start > self._async_timeout:\n                            logger.critical(\"Asynchronous job timed out\")\n                            raise Exception(\"Job timedout\")\n\n                        # if the counter reached the async reconnect point\n                        with self.refresh_lock:\n                            if self.s_passed_recon > self._async_reconnect:\n                                logger.debug(\"Checking job status\")\n                                with self.remote_class(self.mapping[rid]) as remote:\n                                    stdin, stdout, _ = remote.exec_command(check_command, environment=env)\n                                    block_until_ready(remote.client, stdout, env)\n                                    ret = stdout.channel.recv_exit_status()\n                                    done_status = bool(stdout.read().decode(sys.stdin.encoding if sys.stdin.encoding is not None else 'UTF-8'))\n\n                                    self.s_passed_recon = 0\n                        # if the counter reached the interm res gather or we finished the job\n                        with self.refresh_lock:\n                            if self.s_passed_interm > self._get_interm_res or ret == 0:\n                                logger.debug(\"Getting the produced lines\")\n                                # get the last produced lines\n                                get_interm_command = \"tail -n \\\"$(($(cat %s | wc -l)-%d))\\\" %s\" % \\\n                                    (log_dump_path, num_lines, log_dump_path)\n                                with self.remote_class(self.mapping[rid]) as remote:\n                                    stdin, stdout, _ = remote.exec_command(get_interm_command, environment=env)\n                                    block_until_ready(remote.client, stdout, env)\n\n                                    with open(local_out, 'a') as fp:\n                                        while True:\n                                            line = stdout.readline()\n                                            if not line:\n                                                break\n                                            output += line\n\n                                            num_lines += 1\n                                            logger.debug(line)\n\n                                            interm_res = parse_one_line(line)\n                                            if interm_res != None:\n                                                res = interm_res[0]\n                                                irid = self.append_interm_res(job.jid, interm_res[0])\n                                                self.append_multiple_results(job.jid, irid, self.eid, interm_res[1:])\n\n                                            fp.write(line)\n\n                                self.s_passed_interm = 0\n\n                        # let other threads run\n                        time.sleep(0.01)\n\n                    # set the flag in multiple_result table\n                    self.set_last_multiple_results(self.eid, job.jid)\n\n                    with self.remote_class(self.mapping[rid]) as remote:\n                        sftp = remote.client.open_sftp()\n\n                        if save_model_flag is True:\n                            download_model_files(sftp, remote_model_path, local_model_path)\n\n                        sftp.close()\n                    if not done_status:\n                        res = \"ERROR\"\n\n                    if res == \"ERROR\":\n                        raise ValueError\n                except StopIteration as si:\n                    terminate_command = \"kill $(ps -axo pid:1,cmd:2 | grep '%s %s$' | head -n 1 | cut -d' ' -f1)\" % (os.path.basename(job.script), config_path)\n                    with self.remote_class(self.mapping[rid]) as remote:\n                        _, stdout, _ = remote.exec_command(terminate_command, environment=env)\n                        block_until_ready(remote.client, stdout, env)\n                        ret = stdout.channel.recv_exit_status()\n                        if ret != 0:\n                            logger.warning(\"Could not terminate remote process; possible hanging process remaining\")\n                    logger.info(\"Job stopped\")\n                    res = \"EARLY STOPPED\"\n                    break\n                except ValueError as e:\n                    logger.fatal(\"Failed to parse result, check %s at local, or %s at remote\", local_out, log_dump_path)\n                    break\n                except pm.SSHException as e:\n                    logger.fatal(\"Failed to run job over ssh due to unknown reason: %s\", str(e))\n                    logger.fatal(\"%s\", result)\n                    logger.fatal(\"Something went wrong, retrying job with id: \"+str(job.jid))\n                    curr_number_of_tries += 1\n                    time.sleep(self._wait_time)\n                    output = str(e)\n                    continue\n                except Exception as e:\n                    logger.fatal(\"catch unexpected error %s\", e)\n                    logger.fatal(\"%s\", result)\n                    logger.fatal(\"Something went wrong, retrying job with id: \"+str(job.jid))\n                    curr_number_of_tries += 1\n                    time.sleep(self._wait_time)\n                    output = str(e)\n                    continue\n                if job.was_executed == True:\n                    logger.debug(\"return %s,%d\", res, job.jid)\n                    break\n            if res == \"ERROR\":\n                if output is not None:\n                    self.log_error_message(output)\n                logger.fatal(\"Unable to run job with id: \"+str(job.jid))\n            return res, job.jid\n\n        def call_back(future3):\n            logger.debug(\"Callback for job %d\", job.jid)\n            try:\n                self.lock.acquire(True)\n                if future3.exception():  # If error happens, please report.  It is tricky to debug here.\n                    logger.fatal(\"Error happened in job execution that not captured.\")\n                    logger.fatal(future3.exception())\n                result = future3.result()\n                logger.debug(\"Callback result: %s\", result.__str__())\n                self.running.pop(self.running.index(future3))\n                call_back_func(*result)\n            finally:\n                self.lock.release()\n\n        future = None\n        if self._async_run is True:\n            future = self.executor.submit(async_job_run)\n        else:\n            future = self.executor.submit(sync_job_run)\n\n        if future is not None:\n            self.running.append(future)\n            future.add_done_callback(call_back)\n\n    def refresh(self):\n        # force a timer reset for async\n        with self.refresh_lock:\n            self.s_passed_recon = 2 * self._async_reconnect\n            self.s_passed_interm = 2 * self._get_interm_res\n"
  },
  {
    "path": "src/aup/EE/Resource/__init__.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nfrom .AbstractResourceManager import get_resource_manager\n\n"
  },
  {
    "path": "src/aup/EE/Resource/utils/ResourceThreadPoolExecutor.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\naup.EE.Resource.util.ResourceThreadPoolExecutor\n=======================================\n\nChild class of python std ThreadPoolExecutor, extended for customization reasons.\n\nAPIs\n----\n\"\"\"\n\nfrom concurrent.futures import _base\nfrom concurrent.futures import ThreadPoolExecutor\nfrom concurrent.futures.thread import _WorkItem\n\n\nclass ResourceThreadPoolExecutor(ThreadPoolExecutor):\n    def __init__(self, *args, **kwargs):\n        super(ResourceThreadPoolExecutor, self).__init__(*args, **kwargs)\n    \n    def submit(self, fn, *args, **kwargs):\n        with self._shutdown_lock:\n            if self._shutdown:\n                return None\n\n            f = _base.Future()\n            w = _WorkItem(f, fn, args, kwargs)\n\n            self._work_queue.put(w)\n            self._adjust_thread_count()\n            return f\n"
  },
  {
    "path": "src/aup/EE/Resource/utils/__init__.py",
    "content": ""
  },
  {
    "path": "src/aup/EE/Resource/utils/curve_fitting.py",
    "content": "import scipy\nimport logging\nimport numpy as np\nimport time\n\nfrom scipy import optimize\n\nlogger = logging.getLogger(__name__)\n\n\ndef vap(x, a, b, c):\n    return np.exp(a+b/x+c*np.log(x))\n\ndef pow3(x, c, a, alpha):\n    return c - a * x**(-alpha)\n\ndef linear(x, a, b):\n    return a*x + b\n\ndef logx_linear(x, a, b):\n    x = np.log(x)\n    return a*x + b\n\ndef dr_hill_zero_background(x, theta, eta, kappa):\n    return (theta * x**eta) / (kappa**eta + x**eta)\n\ndef log_power(x, a, b, c):\n    return a/(1.+(x/np.exp(b))**c)\n\ndef pow4(x, alpha, a, b, c):\n    return c - (a*x+b)**-alpha\n\ndef mmf(x, alpha, beta, kappa, delta):\n    return alpha - (alpha - beta) / (1. + (kappa * x)**delta)\n\ndef exp4(x, c, a, b, alpha):\n    return c - np.exp(-a*(x**alpha)+b)\n\ndef ilog2(x, c, a):\n    return c - a / np.log(x)\n\ndef weibull(x, alpha, beta, kappa, delta):\n    return alpha - (alpha - beta) * np.exp(-(kappa * x)**delta)\n\ndef janoschek(x, a, beta, k, delta):\n    return a - (a - beta) * np.exp(-k*x**delta)\n\nCURVE_FIT_FUNCS = {\n    \"vap\": vap,\n    \"pow3\": pow3,\n    \"linear\": linear,\n    \"logx_linear\": logx_linear,\n    \"dr_hill_zero_background\": dr_hill_zero_background,\n    \"log_power\": log_power,\n    \"pow4\": pow4,\n    \"mmf\": mmf,\n    \"exp4\": exp4,\n    \"ilog2\": ilog2,\n    \"weibull\": weibull,\n    \"janoschek\": janoschek,\n}\n\n\nclass CurveModel:\n    LEAST_FITTED_FUNCTION = 4\n    NUM_INSTANCE = 10\n    STEP_SIZE = 0.0005\n\n    def __init__(self, iterations):\n        self.iterations = iterations\n\n    def fit_theta(self):\n        x = range(1, self.step + 1)\n        y = self.interm_res\n        func_params = {}\n        for func_name, func in CURVE_FIT_FUNCS.items():\n            try:\n                params = scipy.optimize.curve_fit(func, x, y)[0]\n                func_params[func_name] = params\n            except RuntimeError:\n                pass\n            except (FloatingPointError, OverflowError, ZeroDivisionError) as exception:\n                logger.warning(\"Mathematical error encountered in fit_theta: {}\".format(exception))\n            except Exception as exception:\n                logger.critical(\"Exceptions in fit_theta: {}\".format(exception))\n                raise exception\n        return func_params\n\n    def filter_curve(self, func_params):\n        standard = self.step * np.mean(self.interm_res) ** 2\n        predict_data = []\n        funcs = {}\n        for func_name, func in CURVE_FIT_FUNCS.items():\n            if func_name not in func_params:\n                continue\n            var = 0\n            for idx in range(1, self.step+1):\n                y = func(idx, *func_params[func_name])\n                var += (y - self.interm_res[idx-1]) ** 2\n            if var < standard:\n                predict_data += [y]\n                funcs[func_name] = func\n        final_funcs = {}\n        median = np.median(predict_data)\n        stddev = np.std(predict_data)\n        for func_name, func in funcs.items():\n            y = func(self.iterations, *func_params[func_name])\n            epsilon = self.step / 10 * stddev\n            if y < median + epsilon and y > median - epsilon:\n                final_funcs[func_name] = func\n        return final_funcs\n\n    def normalize_weights(self, samples, num_funcs):\n        for i in range(CurveModel.NUM_INSTANCE):\n            total = 0\n            for j in range(num_funcs):\n                total += samples[i][j]\n            for j in range(num_funcs):\n                samples[i][j] /= total\n        return samples\n    \n    def f_comb(self, pos, sample, funcs, func_params):\n        ret = 0\n        for idx, (func_name, func) in enumerate(funcs.items()):\n            y = func(pos, *func_params[func_name])\n            ret += sample[idx] * y\n        return ret\n    \n    def sigma_sq(self, sample, funcs, func_params):\n        ret = 0\n        for i in range(1, self.step + 1):\n            temp = self.interm_res[i - 1] - self.f_comb(i, sample, funcs, func_params)\n            ret += temp * temp\n        return 1.0 * ret / self.step\n\n    def normal_distribution(self, pos, sample, funcs, func_params):\n        curr_sigma_sq = self.sigma_sq(sample, funcs, func_params)\n        delta = self.interm_res[pos-1] - self.f_comb(pos, sample, funcs, func_params)\n        return np.exp(np.square(delta) / (-2.0 * curr_sigma_sq)) / np.sqrt(2 * np.pi * np.sqrt(curr_sigma_sq))\n\n    def likelihood(self, samples, funcs, func_params):\n        ret = np.ones(CurveModel.NUM_INSTANCE)\n        for i in range(CurveModel.NUM_INSTANCE):\n            for j in range(1, self.step + 1):\n                ret[i] *= self.normal_distribution(j, samples[i], funcs, func_params)\n        return ret\n    \n    def prior(self, samples, funcs, func_params):\n        ret = np.ones(CurveModel.NUM_INSTANCE)\n        for i in range(CurveModel.NUM_INSTANCE):\n            for j in range(len(funcs)):\n                if not samples[i][j] > 0:\n                    ret[i] = 0\n            if self.f_comb(1, samples[i], funcs, func_params) >= self.f_comb(self.iterations, samples[i], funcs, func_params):\n                ret[i] = 0\n        return ret\n\n    def target_distribution(self, samples, funcs, func_params):\n        curr_likelihood = self.likelihood(samples, funcs, func_params)\n        curr_prior = self.prior(samples, funcs, func_params)\n        ret = np.ones(CurveModel.NUM_INSTANCE)\n        for i in range(CurveModel.NUM_INSTANCE):\n            ret[i] = curr_likelihood[i] * curr_prior[i]\n        return ret\n\n    def mcmc_sampling(self, filtered_funcs, func_params, timeout):\n        t0 = time.time()\n        init_weight = np.ones((len(filtered_funcs),), dtype=np.float32) / len(filtered_funcs)\n        weights_samples = np.broadcast_to(init_weight, (CurveModel.NUM_INSTANCE, len(filtered_funcs)))\n        while True:\n            new_values = np.random.randn(CurveModel.NUM_INSTANCE, len(filtered_funcs)) * CurveModel.STEP_SIZE + weights_samples\n            new_values = self.normalize_weights(new_values, len(filtered_funcs))\n            alpha = np.minimum(1, self.target_distribution(new_values, filtered_funcs, func_params) / self.target_distribution(weights_samples, filtered_funcs, func_params))\n            u = np.random.rand(CurveModel.NUM_INSTANCE)\n            change_value_flag = (u < alpha).astype(np.int)\n            for idx in range(CurveModel.NUM_INSTANCE):\n                new_values[idx] = weights_samples[idx] * (1 - change_value_flag[idx]) + new_values[idx] * change_value_flag[idx]\n            weights_samples = new_values\n            if time.time() - t0 > timeout:\n                break\n        return weights_samples\n\n    def predict(self, interm_res, timeout):\n        self.interm_res = interm_res\n        self.step = len(interm_res)\n        func_params = self.fit_theta()\n        filtered_funcs = self.filter_curve(func_params)\n        final_keys = set(func_params.keys()) & set(filtered_funcs.keys())\n        filtered_funcs = {func_name: filtered_funcs[func_name] for func_name in final_keys}\n        func_params = {func_name: func_params[func_name] for func_name in final_keys}\n        if len(filtered_funcs) < CurveModel.LEAST_FITTED_FUNCTION:\n            return None\n        weights_samples = self.mcmc_sampling(filtered_funcs, func_params, timeout)\n        f_res = [self.f_comb(self.iterations, weight_sample, filtered_funcs, func_params) for weight_sample in weights_samples]\n        return np.mean(f_res) \n\n"
  },
  {
    "path": "src/aup/EE/__init__.py",
    "content": "\"\"\"\nModule for job execution\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\n"
  },
  {
    "path": "src/aup/ET/Connector/AbstractConnector.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\naup.ET.Connector.AbstractConnector\n==================================\n\nDefine the basic interface between experiment tracking and executor engine.\n\nCurrently, SQLite is the only one implemented.\n\nAPIs\n----\n\"\"\"\nimport abc\nimport logging\n\nABC = abc.ABCMeta('ABC', (object,), {'__slots__': ()})\nlogger = logging.getLogger(__name__)\n\n\nclass AbstractConnector(ABC):\n    # ################ General Part #################\n    @abc.abstractmethod\n    def close(self):\n        \"\"\"\n        Mark the connector as closed. A closed connector should not be used anymore.\n        \"\"\"\n        pass\n\n    @abc.abstractmethod\n    def is_closed(self):\n        \"\"\"\n        Return whether or not the connector is closed. A closed connector should not be used anymore.\n        \"\"\"\n        return False\n\n    # ################ Resource Related Part #################\n    @abc.abstractmethod\n    def free_used_resource(self, rid):\n        \"\"\"\n        Mark resource as free (opposite to :func:take_available_resource)\n\n        :param rid: Resource ID(s)\n        :type rid: int\n        \"\"\"\n        raise NotImplementedError\n\n    @abc.abstractmethod\n    def get_resource_type(self):\n        \"\"\"\n        Get the resource type for a given user\n        :return: list of resource types\n        :rtype: list\n        \"\"\"\n        raise NotImplementedError\n\n    @abc.abstractmethod\n    def get_available_resource(self, username, rtype):\n        \"\"\"\n        Get available resource for a user and resource type.\n        Currently there is no limitation/requirement for user\n\n        :param username: username\n        :type username: str\n        :param rtype: Resource type\n        :type rtype: str\n        :return: Resource Id\n        :rtype: list(int)\n        \"\"\"\n        raise NotImplementedError\n\n    @abc.abstractmethod\n    def take_available_resource(self, rid):\n        \"\"\"\n        Mark resource as used\n\n        TODO - currently where is prevention for async update, might not be relevant in the near future\n\n        :param rid: Resource ID(s)\n        :type rid: int\n        :return: True/False\n        \"\"\"\n        raise NotImplementedError\n\n    # ################ Experiment Related Part ################\n    @abc.abstractmethod\n    def end_experiment(self, eid):\n        \"\"\"\n        Mark experiment as finished\n\n        :param eid: Experiment ID\n        :type eid: int\n        \"\"\"\n        raise NotImplementedError\n\n    @abc.abstractmethod\n    def get_best_result(self, eid, maximize=True):\n        \"\"\"\n        Retrieve the best job id and score from the database for experiment eid\n\n        :param eid: Experiment ID\n        :type eid: int\n        :param maximize: whether to choose max or min\n        :type maximize: bool\n        :return: Job ID, score\n        :rtype: list(int, float)\n        \"\"\"\n        raise NotImplementedError\n\n    @abc.abstractmethod\n    def start_experiment(self, username, name, exp_config_blob):\n        \"\"\"\n        Create an Experiment and track it\n\n        :param username: username\n        :type username: str\n        :param name: experiment name\n        :type name: str\n        :param exp_config_blob: configuration of experiment\n        :type exp_config_blob: str\n        :return: experiment ID\n        :rtype: int\n        \"\"\"\n        raise NotImplementedError\n\n    # ################ Job Related Part #######################\n    @abc.abstractmethod\n    def end_job(self, jid, score, status):\n        \"\"\"\n        Mark a job ended\n\n        :param jid: Job ID\n        :type jid: int\n        :param score: score of the Job\n        :type score: str\n        :param status: status of the Job\n        :type status: enumeration\n        \"\"\"\n        raise NotImplementedError\n\n    @abc.abstractmethod\n    def get_all_experiment(self, username=None):\n        \"\"\"\n        Get all Experiment IDs\n\n        :param username: to get experiments for a specific user\n        :type username: str\n        :return: Experiment IDs\n        :rtype: list(int)\n        \"\"\"\n        raise NotImplementedError\n\n    @abc.abstractmethod\n    def get_all_history(self, eid):\n        \"\"\"\n        Get full history of an Experiment\n\n        :param eid: Experiment ID\n        :type eid: int\n        :return:\n        \"\"\"\n        raise NotImplementedError\n\n    @abc.abstractmethod\n    def get_running_job(self, eid):\n        \"\"\"\n        Get running Job IDs\n\n        :param eid: Experiment ID\n        :type eid: int\n        :return: list of Job IDs\n        :rtype: list(int)\n        \"\"\"\n        raise NotImplementedError\n\n    @abc.abstractmethod\n    def start_job(self, eid, rid, job_config):\n        \"\"\"\n        Start a job with job configuration and track it\n\n        :param eid: Experiment ID\n        :type eid: int\n        :param rid: Resource ID\n        :type rid: int\n        :param job_config: Configuration for :class:`aup.EE.Job.Job`\n        :type job_config: BasicConfig\n        :return: Job ID (jid)\n        :rtype: int\n        \"\"\"\n        raise NotImplementedError\n\n    @abc.abstractmethod\n    def start_job_attempt(self, rid, jid):\n        \"\"\"\n        Starts a job attempt for a given job, using the given resource\n\n        :param rid: Resource ID\n        :type rid: int\n        :param jid: Job ID\n        :type jid: int\n        :return: Job Attempt ID (jaid)\n        :rtype: int\n        \"\"\"\n        raise NotImplementedError\n\n    @abc.abstractmethod\n    def end_job_attempt(self, jid):\n        \"\"\"\n        Ends a job attempt, but not a job (leaving room for retries)\n\n        :param id: Job ID\n        :type id: int\n        \"\"\"\n        raise NotImplementedError\n\n    def update_job_status(self, jid, status):\n        \"\"\"\n        Change a job's status\n\n        :param jid: Job ID\n        :type jid: int\n        :param status: new status\n        :type status: enumeration\n        \"\"\"\n        raise NotImplementedError\n\n    # ################ Job interface for Experiment ##############\n    def job_finished(self, rid, jid, score=None, status=None):\n        \"\"\"\n        Clean up Job when it is finished\n\n        :param rid: Resource ID to be free\n        :type rid: int\n        :param jid: Job ID\n        :type jid: int\n        :param score: score returned by Job (error case will be ERROR)\n        :type score: float / str\n        :param status: job status\n        :type status: enumeration\n        \"\"\"\n        logger.debug(\"Job %d is finished on %d, score is %s\" % (jid, rid, score))\n        self.free_used_resource(rid)\n        self.end_job_attempt(jid)\n        self.end_job(jid, score, status)\n\n    def job_started(self, eid, rid, job_config):\n        \"\"\"\n        Interface to automatically take resource and run job.\n\n        :param eid: Experiment ID\n        :type eid: int\n        :param rid: Resource ID\n        :type rid: int\n        :param job_config: Configuration for Job\n        :type job_config: BasicConfig\n        :return: Job ID\n        :rtype: int\n        \"\"\"\n        self.take_available_resource(rid)\n        return self.start_job(eid, rid, job_config)\n\n    def job_failed(self, rid, jid):\n        \"\"\"\n        Interface to take care of job failure in case of possible retries\n        \n        :param rid: Resource ID\n        :type rid: int\n        :param jid: Job ID\n        :type jid: int\n        \"\"\"\n        self.free_used_resource(rid)\n        self.end_job_attempt(jid)\n    \n    def job_retry(self, rid, jid):\n        \"\"\"\n        Interface to mark the beginning of a job retry\n\n        :param rid: Resource ID\n        :type rid: int\n        :param jid: Job ID\n        :type jid: int\n        \"\"\"\n        self.take_available_resource(rid)\n        return self.start_job_attempt(rid, jid)\n\n    def save_intermediate_result(self, jid, score):\n        \"\"\"\n        Interface for saving intermediate result for a job.\n\n        :param jid: Job ID\n        :type jid: int\n        :param score: the intermediate result\n        :type score: float\n        :return: intermediate_result table id\n        :rtype: int\n        \"\"\"\n        raise NotImplementedError\n\n    def get_intermediate_results_job(self, jid):\n        \"\"\"\n        Interface for extracting all intermediate results available for a given job.\n\n        :param jid: Job ID\n        :type jid: int\n        :return: list of intermediate results, in order\n        :rtype: float list\n        \"\"\"\n        raise NotImplementedError\n\n    def get_intermediate_results_jobs(self, jids):\n        \"\"\"\n        Interface for extracting all intermediate results available for a given list of jobs.\n\n        :param jids: Job IDs\n        :type jids: int list\n        :return: dictionary mapping job IDs to lists of intermediate results, in order\n        :rtype: dict<int, float list>\n        \"\"\"\n        raise NotImplementedError\n\n    def get_intermediate_results_experiment(self, eid, status):\n        \"\"\"\n        Interface for extracting all intermediate results for all jobs of a given experiment, \n        fitting a given status.\n\n        :param eid: Experiment ID\n        :type eid: int\n        :param status: Desired status for filtering jobs\n        :type status: enumeration\n        :return: dictionary mapping job IDs to lists of intermediate results, in order\n        :rtype: dict<int, float list>\n        \"\"\"\n        raise NotImplementedError\n\n    def create_experiment(self, username, name, exp_config_blob):\n        \"\"\"\n        Interface for creating an experiment without starting it\n        \"\"\"\n        raise NotImplementedError\n\n    def delete_experiment(self, eid):\n        \"\"\"\n        Interface for deleting an experiment by eid\n        \"\"\"\n        raise NotImplementedError\n\n    def get_experiment_status(self, eid):\n        \"\"\"\n        Interface for getting the database status of an experiment\n        \"\"\"\n        raise NotImplementedError\n\n    def start_experiment_by_eid(self, eid):\n        \"\"\"\n        Interface for (re)starting an experiment by eid\n        \"\"\"\n        raise NotImplementedError\n\n    def log_error_message(self, eid, msg):\n        \"\"\"\n        Log in database the error message\n        \"\"\"\n        raise NotImplementedError\n\n    def save_multiple_results(self, jid, irid, eid, labels, scores):\n        \"\"\"\n        Save in database other results desired by user\n        \"\"\"\n        raise NotImplementedError\n\n    def set_last_multiple_results(self, eid, jid, num_labels):\n        \"\"\"\n        Set the 'is_last_result' flag to true for this jid\n        \"\"\"\n        raise NotImplementedError\n"
  },
  {
    "path": "src/aup/ET/Connector/SQLiteConnector.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\naup.ET.Connector.SQLiteConnector\n================================\n\nIf encounter \"Failed to query SQLite after xx times\" error,\nincrease DELAY_INTERVAL and REPEATED_TIME to prevent problem temporarily.\n\nAPIs\n----\n\"\"\"\nimport logging\nimport re\nimport sqlite3\nimport threading\nfrom time import sleep\nimport json\nfrom datetime import datetime\n\nfrom .AbstractConnector import AbstractConnector\n\nlogger = logging.getLogger(__name__)\n\nDELAY_INTERVAL = 0.1\nREPEATED_TIME = 5\nLOCK = threading.Lock()\n\ndef _delayed(func):\n    def wrapper(*args, **kwargs):\n        flag = 0\n        while flag < REPEATED_TIME:\n            try:\n                LOCK.acquire() # make sure not to call @_delayed functions recursively from one another\n                results = func(*args, **kwargs)\n                return results\n            except sqlite3.ProgrammingError as ex:  # pragma: no cover\n                logger.critical(\"update is too frequent, delayed for 1 sec\")\n                logger.debug(\"sqlite3 programming error: {}\".format(ex))\n                sleep(DELAY_INTERVAL)\n                flag += 1\n            finally:\n                LOCK.release()\n        raise Exception(\"Failed to query SQLite after %d times\" % flag)  # pragma: no cover\n\n    return wrapper\n\n\nclass SQLiteConnector(AbstractConnector):\n    def __init__(self, filename):\n        super(SQLiteConnector, self).__init__()\n        self.connector = sqlite3.connect(filename, check_same_thread=False)\n        self.cursor = self.connector.cursor()\n        self.cursor.execute(\"PRAGMA FOREIGN_KEYS = ON;\")\n        self.closed = False\n\n    def _fix_name(self, name):\n        self.cursor.execute(\"SELECT name FROM experiment WHERE name = ?\", (name,))\n        names = [i[0] for i in self.cursor.fetchall()]\n        if not names:\n            return name\n        self.cursor.execute(\"SELECT name FROM experiment WHERE name LIKE ?\", (\"{} (%)\".format(name),))\n        last_index = 0\n        names = [i[0] for i in self.cursor.fetchall()]\n        if names:\n            names = [name for name in names if re.findall(r\"\\(\\d+\\)$\", name)]\n            if names:\n                indexes = [int(re.findall(r\"\\(\\d+\\)$\", name)[-1][1:-1]) for name in names]\n                last_index = max(indexes)\n        return name + \" ({})\".format(last_index + 1)\n\n    def _mark_resource(self, rid, status):\n        if not isinstance(rid, int):\n            raise ValueError(\"Resource ID is not integer, %s\"%type(rid))\n        self.cursor.execute(\"UPDATE resource SET status=? WHERE rid=?\", (status, rid))\n        self.connector.commit()\n        # other utils\n\n    @_delayed\n    def free_all_resources(self):\n        self.cursor.execute(\"UPDATE resource SET status='free'\")\n        self.connector.commit()\n\n    @_delayed\n    def close(self):\n        self.connector.commit()\n        self.connector.close()\n        self.closed = True\n\n    @_delayed\n    def is_closed(self):\n        return self.closed\n\n    @_delayed\n    def end_experiment(self, eid, status=\"FINISHED\"):\n        self.cursor.execute(\"UPDATE experiment SET end_time=strftime('%s','now'), status=? WHERE eid=?\", (status, eid))\n        self.connector.commit()\n\n    @_delayed\n    def change_experiment_status(self, eid, status=\"FINISHED\"):\n        self.cursor.execute(\"UPDATE experiment SET status=? WHERE eid=?\", (status, eid))\n        self.connector.commit()\n\n    @_delayed\n    def end_job(self, jid, score=None, status=None):\n        self.cursor.execute(\"UPDATE job SET end_time=strftime('%s','now'), status=?, score=? WHERE jid=?\", (status, score, jid))\n        self.connector.commit()\n\n    @_delayed\n    def end_job_attempt(self, jid):\n        self.cursor.execute(\"\"\"UPDATE job_attempt SET end_time=strftime('%s', 'now') WHERE jaid=(\n                                    SELECT jaid FROM job_attempt jt WHERE jt.jid=? ORDER BY num DESC LIMIT 1)\"\"\", (jid,))\n        self.connector.commit()\n\n    @_delayed\n    def free_used_resource(self, rid):\n        self._mark_resource(rid, 'free')\n        return True\n\n    @_delayed\n    def get_all_experiment(self, username=None):\n        if username:\n            self.cursor.execute(\"SELECT uid FROM user WHERE name = ?\", (username,))\n            uid = self.cursor.fetchone()\n            if uid is None:\n                raise ValueError(\"User %s does not exist\" % username)\n            self.cursor.execute(\"SELECT eid FROM experiment WHERE uid = ?\", (uid[0],))\n        else:\n            self.cursor.execute(\"SELECT eid FROM experiment\")\n        eids = self.cursor.fetchall()\n        return [e[0] for e in eids]  # unzip tuple of one element\n\n    @_delayed\n    def get_available_resource(self, username, rtype, rid_blacklist=None):\n        rids = []\n        if rid_blacklist:\n            # Initial approach:\n            # self.cursor.execute(\"SELECT rid FROM resource WHERE status = 'free' AND type = ? AND rid NOT IN ?;\", (rtype, rid_blacklist))\n            # However, this does not work with sqlite3, so the following approach was ultimately selected\n            self.cursor.execute(\"SELECT rid FROM resource WHERE status = 'free' AND type = ? AND rid NOT IN ({});\".format(\n                                    \",\".join(\"?\" * len(rid_blacklist))), (rtype,) + tuple(rid_blacklist))\n            rids = [i[0] for i in self.cursor.fetchall()]\n        if not rids:\n            # An attempt was made to filter out resources, but this was not possible (the only\n            # available resource are the ones blacklisted)\n            self.cursor.execute(\"SELECT rid FROM resource WHERE status = 'free' AND instr(?, type) != 0;\", (rtype,))\n            rids = [i[0] for i in self.cursor.fetchall()]\n        return rids\n\n    @_delayed\n    def get_all_history(self, eid):\n        self.cursor.execute(\"SELECT * FROM job WHERE eid = ?\", (eid,))\n        return self.cursor.fetchall()\n\n    @_delayed\n    def get_best_result(self, eid, maximize=True):\n        if maximize:\n            self.cursor.execute(\"\"\"SELECT jid, score \n                FROM job WHERE eid = ? AND score=(select max(score) from job where eid=? AND typeof(score) = 'real')\"\"\", (eid, eid))\n        else:\n            self.cursor.execute(\"\"\"SELECT jid, score \n                FROM job WHERE eid = ? AND score=(select min(score) from job where eid=? AND typeof(score) = 'real')\"\"\", (eid, eid))\n        t = self.cursor.fetchone()\n        if t is None:\n            self.cursor.execute(\"\"\"select * from experiment where eid=?\"\"\", (eid,))\n            t = self.cursor.fetchone()\n            if t is None:\n                raise KeyError(\"Experiment ID %d not exist\" % eid)\n            else:\n                return None\n        return list(t)\n\n    @_delayed\n    def get_best_result_config(self, eid, maximize=True):\n        if maximize:\n            self.cursor.execute(\"\"\"SELECT job_config \n                FROM job WHERE eid = ? AND score=(select max(score) from job where eid=? AND typeof(score) = 'real')\"\"\", (eid, eid))\n        else:\n            self.cursor.execute(\"\"\"SELECT job_config \n                FROM job WHERE eid = ? AND score=(select min(score) from job where eid=? AND typeof(score) = 'real')\"\"\", (eid, eid))\n        t = self.cursor.fetchone()\n\n        return t\n\n    @_delayed\n    def get_running_job(self, eid):\n        self.cursor.execute(\"SELECT jid FROM job WHERE eid = ?\", (eid,))\n        jid = [i[0] for i in self.cursor.fetchall()]\n        logger.debug(\"%s\" % jid)\n        return jid\n\n    @_delayed\n    def get_resource_type(self):\n        self.cursor.execute(\"SELECT DISTINCT type from resource;\")\n        return [i[0] for i in self.cursor.fetchall()]\n\n    @_delayed\n    def start_experiment(self, username, name, exp_config_blob):\n        self.cursor.execute(\"SELECT uid FROM user WHERE name = ?\", (username,))\n        uid = self.cursor.fetchone()\n        if uid is None:\n            raise ValueError(\"username %s is not existed\" % username)\n        uid = uid[0]\n        name = self._fix_name(name)\n        self.cursor.execute(\"INSERT INTO experiment (uid, name, exp_config, start_time, error_msg, status) \\\n                                VALUES (?,?,?, strftime('%s','now'), NULL, 'RUNNING')\",\n                            (uid, name, exp_config_blob))\n\n        self.connector.commit()\n        return self.cursor.lastrowid\n\n    @_delayed\n    def start_experiment_by_eid(self, eid):\n        self.cursor.execute(\"DELETE FROM multiple_result WHERE eid={eid}\".format(eid=eid))\n        self.connector.commit()\n        self.cursor.execute(\"DELETE FROM job_attempt WHERE jid in (SELECT jid FROM job WHERE eid={eid})\".format(eid=eid))\n        self.connector.commit()\n        self.cursor.execute(\"DELETE FROM intermediate_result WHERE jid in (SELECT jid FROM job WHERE eid={eid})\".format(eid=eid))\n        self.connector.commit()\n        self.cursor.execute(\"DELETE FROM job WHERE eid={eid}\".format(eid=eid))\n        self.connector.commit()\n        self.cursor.execute(\"UPDATE experiment SET start_time = strftime('%s','now'), end_time = NULL, \\\n                            error_msg = NULL, status = 'RUNNING' WHERE eid={eid}\".format(eid=eid))\n        self.connector.commit()\n\n    @_delayed\n    def start_job(self, eid, rid, job_config):\n        self.cursor.execute(\"INSERT INTO job (eid, start_time, job_config, status) VALUES (?, strftime('%s','now'), ?, 'RUNNING')\",\n                            (eid, json.dumps(job_config)))\n        self.connector.commit()\n        jid = self.cursor.lastrowid\n        self.cursor.execute(\"INSERT INTO job_attempt (jid, num, rid, start_time) VALUES (?, 0, ?, (SELECT start_time FROM job j WHERE j.jid=?))\",\n                            (jid, rid, jid))\n        self.connector.commit()\n        return jid\n    \n    @_delayed\n    def start_job_attempt(self, rid, jid):\n        self.cursor.execute(\"INSERT INTO job_attempt (jid, num, rid, start_time) \\\n                            VALUES (?, (SELECT num FROM job_attempt jt WHERE jt.jid=? ORDER BY num DESC LIMIT 1)+1, ?, strftime('%s', 'now'))\",\n                            (jid, jid, rid))\n        self.connector.commit()\n        return self.cursor.lastrowid\n\n    @_delayed\n    def update_job_status(self, jid, status):\n        self.cursor.execute(\"UPDATE job SET status=? WHERE jid=?\", (status, jid))\n        self.connector.commit()\n\n    @_delayed\n    def take_available_resource(self, rid):\n        self._mark_resource(rid, 'busy')\n        return True\n\n    @_delayed\n    def save_intermediate_result(self, jid, score):\n        self.cursor.execute(\"\"\"\n            INSERT INTO intermediate_result (num, jid, score, receive_time) \n            VALUES ((SELECT CASE EXISTS(SELECT num FROM intermediate_result ir WHERE ir.jid=?) \n                        WHEN 0 THEN -1 \n                        WHEN 1 THEN (SELECT num FROM intermediate_result ir WHERE ir.jid=? ORDER BY num DESC LIMIT 1) END) + 1,\n                    ?, ?, strftime('%s', 'now'))\"\"\",\n            (jid, jid, jid, score))\n        self.connector.commit()\n        return self.cursor.lastrowid\n\n    @_delayed\n    def get_intermediate_results_job(self, jid):\n        self.cursor.execute(\"\"\"\n            SELECT score\n            FROM intermediate_result ir\n            WHERE ir.jid=?\n            ORDER BY ir.num ASC;\"\"\", (jid,))\n        rows = [row[0] for row in self.cursor.fetchall()]\n        return rows\n\n    @_delayed\n    def get_intermediate_results_jobs(self, jids):\n        self.cursor.execute(\"\"\"\n            SELECT jid, score\n            FROM intermediate_result ir\n            WHERE ir.jid in ({})\n            ORDER BY ir.jid, ir.num ASC;\"\"\".format(\",\".join(\"?\" * len(jids))), tuple(jids))\n        rows = self.cursor.fetchall()\n        results = {}\n        for jid, score in rows:\n            if jid not in results:\n                results[jid] = []\n            results[jid] += [score]\n        return results\n\n    @_delayed\n    def get_intermediate_results_experiment(self, eid, status):\n        self.cursor.execute(\"\"\"\n            SELECT jid, score\n            FROM intermediate_result ir\n            WHERE EXISTS(SELECT 1 FROM job j WHERE j.jid=ir.jid AND j.eid=? AND j.status=?)\n            ORDER BY ir.jid, ir.num ASC;\"\"\", (eid, status))\n        rows = self.cursor.fetchall()\n        results = {}\n        for jid, score in rows:\n            if jid not in results:\n                results[jid] = []\n            results[jid] += [score]\n        return results\n\n    @_delayed\n    def create_experiment(self, username, name, exp_config_blob):\n        self.cursor.execute(\"SELECT uid FROM user WHERE name = ?\", (username,))\n        uid = self.cursor.fetchone()\n        if uid is None:\n            raise ValueError(\"username %s is not existed\" % username)\n        uid = uid[0]\n        name = self._fix_name(name)\n        self.cursor.execute(\"INSERT INTO experiment (uid, name, exp_config, start_time, end_time, error_msg, status) \\\n                            VALUES (?,?,?, NULL, NULL, NULL, 'CREATED')\",\n                            (uid, name, exp_config_blob))\n        self.connector.commit()\n        return self.cursor.lastrowid\n\n    @_delayed\n    def delete_experiment(self, eid):\n        self.cursor.execute(\"SELECT eid FROM experiment WHERE eid = ?\", (eid,))\n        check_eid = self.cursor.fetchone()\n        if check_eid is None:\n            return False\n\n        self.cursor.execute(\"DELETE FROM multiple_result WHERE eid={eid};\".format(eid=eid))\n        self.cursor.execute(\"DELETE FROM job_attempt WHERE jid in (SELECT jid FROM job WHERE eid={eid})\".format(eid=eid))\n        self.cursor.execute(\"DELETE FROM intermediate_result WHERE jid in (SELECT jid FROM job WHERE eid={eid})\".format(eid=eid))\n        self.cursor.execute(\"DELETE FROM job WHERE eid={eid}\".format(eid=eid))\n        self.cursor.execute(\"DELETE from experiment WHERE eid={eid}\".format(eid=eid))\n        self.connector.commit()\n\n        return True\n\n    @_delayed\n    def get_experiment_status(self, eid):\n        self.cursor.execute(\"SELECT status FROM experiment WHERE eid = ? LIMIT 1\", (eid,))\n        status = self.cursor.fetchone()\n        \n        if status is None:\n            raise ValueError(\"Requested experiment for get_experiment_status not found in database!\")\n        \n        return status[0]\n    \n    @_delayed\n    def maybe_get_experiment_status(self, eid):\n        # TODO: we need a way to recursively call these functions without locking issues (due to @_delayed)\n        if self.closed:\n            return None\n\n        self.cursor.execute(\"SELECT status FROM experiment WHERE eid = ? LIMIT 1\", (eid,))\n        status = self.cursor.fetchone()\n\n        if status is None:\n            raise ValueError(\"Requested experiment for get_experiment_status not found in database!\")\n\n        return status[0]\n\n    @_delayed\n    def log_error_message(self, eid, msg):\n        self.cursor.execute(\"UPDATE experiment SET error_msg=? WHERE eid=? and error_msg is NULL\", (msg, eid))\n        self.connector.commit()\n\n    @_delayed\n    def save_multiple_results(self, jid, irid, eid, labels, scores):\n        receive_time = int(datetime.now().timestamp())\n\n        self.cursor.execute(\"\"\"\n                    SELECT count(*) FROM sqlite_master WHERE type='table' AND name='multiple_result'\"\"\")\n        res = self.cursor.fetchone()[0]\n\n        if res == 0:\n            logger.warning(\"multiple_result table not found, continuing without saving multiple results! \\n \\\n                            Please consider updating Auptimizer to >=1.5\")\n            return\n\n        for idx in range(len(scores)):\n            self.cursor.execute(\"\"\"\n                    INSERT INTO multiple_result (label_order, value, receive_time, jid, irid, eid, is_last_result)\n                    VALUES (?, ?, ?, ?, ?, ?, 0)\"\"\",\n                    (idx+1, scores[idx], receive_time, jid, irid, eid))\n\n        self.connector.commit()\n\n    @_delayed\n    def set_last_multiple_results(self, eid, jid, num_labels):\n        self.cursor.execute(\"\"\"\n                    SELECT mrid FROM multiple_result WHERE eid=? AND jid=?\n                    ORDER BY mrid DESC LIMIT 0,?\"\"\", (eid, jid, num_labels))\n        res = self.cursor.fetchall()\n\n        for mrid in res:\n            self.cursor.execute(\"\"\"\n                            UPDATE multiple_result SET is_last_result=1 WHERE mrid=?\"\"\", (mrid[0],))\n\n        self.connector.commit()\n\n"
  },
  {
    "path": "src/aup/ET/Connector/__init__.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\""
  },
  {
    "path": "src/aup/ET/__init__.py",
    "content": "\"\"\"\nModule for Experiment Tracking\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\""
  },
  {
    "path": "src/aup/Proposer/AbstractProposer.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\naup.Proposer.AbstractProposer\n=============================\n\n:mod:`aup.Proposer.AbstractProposer` provide interface for Hyperparameter Optimization Modules.\n\nAPIs\n----\n\"\"\"\nimport abc\nimport logging\nimport pickle\nimport json\nimport threading\nfrom six.moves import input\n\nfrom ..utils import set_default_keyvalue, check_missing_key, get_from_options\nfrom . import ProposerStatus\n\nABC = abc.ABCMeta('ABC', (object,), {'__slots__': ()})\n\nlogger = logging.getLogger(__name__)\n\n\ndef create_param_config(name, vrange, vtype):\n    \"\"\"\n    Reads the configuration file and checks for errors.\n    \"\"\"\n    if vtype not in ('float', 'int', 'choice'):\n        raise ValueError(\"%s is not supported as hyperparameter type\" % vtype)\n    if vtype != 'choice' and len(vrange) != 2:\n        raise ValueError(\"Range need to be a two element tuple for %s\" % vtype)\n\n    return {'name': name, 'range': vrange, 'type': vtype}\n\nclass AbstractProposer(ABC):\n    \"\"\"\n    Proposer to generate new values for hyperparameters\n\n    :param config: experiment configuration\n    :type config: BasicConfig\n    \"\"\"\n\n    def __init__(self, config):\n        self.nSamples = 0   # number of total jobs for an experiment\n        self.counter = 0    # number of executed jobs\n        self.current_proposal = dict()\n        self.status = ProposerStatus.RUNNING  # whether the experiment is finished\n        self.status_lock = threading.Lock()\n        AbstractProposer.verify_config(self, config)\n\n    def set_status(self, status):\n        with self.status_lock:\n            self.status = status\n\n    def get_status(self):\n        with self.status_lock:\n            return self.status\n\n    def increment_job_counter(self):\n        with self.status_lock:\n            self.counter += 1\n\n    def check_termination(self):\n        with self.status_lock:\n            if self.counter >= self.nSamples:\n                self.status = ProposerStatus.FINISHED\n\n    def get_remaining_jobs(self):\n        with self.status_lock:\n            return self.nSamples - self.counter\n\n    @staticmethod\n    def setup_config():  # pragma: no cover\n        config = []\n        try:\n            print(\"start adding hyperparameters, use 'stop' for variable name or ctrl+c to exit\")\n            while True:\n                name = input(\"variable name:\")\n                if name == \"stop\":\n                    break\n                try:\n                    res = input(\"range (separated by ,):\")\n                    if \"'\" in res:\n                        res = res.replace(\"'\", '\"')\n                    if res[0] == '[' and res[-1] == ']':\n                        vrange = json.loads(res)\n                    else:\n                        vrange = json.loads(\"[\" + res + \"]\")\n                except ValueError:\n                    logger.critical(\"failed to parse range, treat it as strings separated by ','\")\n                    vrange = res.split(\",\")\n                if len(vrange) == 0:\n                    raise ValueError(\"range needs at least one element\")\n                vtype = get_from_options(\"type:\", (\"choice\", \"float\", \"int\"))\n                config.append({'name': name, \"range\": vrange, \"type\": vtype})\n        except KeyboardInterrupt:\n            print(\"Config interrupted, completed variables are saved.\")\n        return {\"parameter_config\": config}\n\n    @staticmethod\n    def parse_param_config(config):\n        \"\"\"\n        Parse the given experiment configuration of ``parameter_config``\n        If values are missing, fill in defaults.\n\n        :param config: config[\"param_config\"]\n        :type config: dict\n        :return: updated config\n        :rtype: dict\n        \"\"\"\n        check_missing_key(config, \"name\",\n                          \"Missing name of the parameter, need to be consistent with your training code\",\n                          log=logger)\n        set_default_keyvalue(\"type\", \"int\", config, log=logger)\n        set_default_keyvalue(\"range\", [0, 1], config, log=logger)\n        return config\n\n    def get(self, **kwargs):\n        \"\"\"\n        Wrapper for specific :func:`get_param` to update ``current_proposal`` and ``counter``.\n\n        :param kwargs: any arguments to be passed to :func:`get_param`\n        :type kwargs: dict\n        :return: parameter values\n        :rtype: dict\n        \"\"\"\n        self.check_termination()\n        if self.get_status() != ProposerStatus.RUNNING:\n            return None\n        self.current_proposal = self.get_param(**kwargs)\n\n        logger.debug(self.current_proposal)\n        if not self.current_proposal:\n            return None\n\n        return self.current_proposal.copy()\n\n    @abc.abstractmethod\n    def get_param(self, **kwargs):\n        \"\"\"\n        Get new proposed parameter values\n        \"\"\"\n        raise NotImplementedError\n\n    def reload(self, path):\n        \"\"\"\n        Reload Proposer state from path\n\n        :param path: path to reload\n        :type path: str\n        \"\"\"\n        logger.info(\"Reload %s, previous cancelled job won't be run\", path)\n        with open(path, 'rb') as f:\n            d = pickle.load(f)\n        for i in d.__dict__:\n            self.__dict__[i] = d.__dict__[i]\n        return self\n\n    def reset(self):\n        \"\"\"\n        Reset proposer\n        \"\"\"\n        with self.status_lock:\n            self.counter = 0\n            self.status = ProposerStatus.RUNNING\n\n    def save(self, path):\n        \"\"\"\n        Save Proposer state to path.\n        \n        **Some proposer can not generate new parameters after saving.**\n\n        :param path: path to save\n        :type path: str\n        \"\"\"\n        with open(path, 'wb') as f:\n            pickle.dump(self, f)\n\n    def update(self, score, job):\n        \"\"\"\n        Update scores in proposer history\n\n        :param score: score returned by Job\n        :type score: float\n        :param job: Finished job\n        :type job: Job\n        \"\"\"\n        logger.debug(\"Get score ({}) for job {}\".format(score, job.jid))\n\n    def failed(self, job):\n        \"\"\"\n        Mark job as failed in proposer history.\n        \n        :param job: Failed job\n        :type job: Job\n        \"\"\"\n        logger.debug(\"Job {} marked as failed\".format(job.jid))\n\n    def verify_config(self, config):\n        \"\"\"\n        Verify the input configuration is enough for the proposer\n\n        :param config: Experiment configuration of ``parameter_config``\n        :type config: dict\n        :return: config\n        :rtype: dict\n        \"\"\"\n        check_missing_key(config, \"parameter_config\",\n                          \"Specify the parameter configuration `parameter_config` to be searched\", log=logger)\n        for i in config[\"parameter_config\"]:\n            check_missing_key(i, \"name\", \"hyperparameter name is missing\", log=logger)\n        return config\n\n    def __getstate__(self):\n        state = self.__dict__.copy()\n        del state['status_lock']\n        return state\n\n    def __setstate__(self, state):\n        self.__dict__.update(state)\n        self.status_lock = threading.Lock()\n\n"
  },
  {
    "path": "src/aup/Proposer/BOHBProposer.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\naup.Proposer.BOHBProposer\n=========================\n\nBOBH proposer inherited from `HpBandSter <https://automl.github.io/HpBandSter/build/html/index.html>`_ to showcase\nthe simplicity of Auptimizer to integrate new HPO algorithms.  The `get_params()` method is based on the\n`master.py <https://github.com/automl/HpBandSter/blob/master/hpbandster/core/master.py>`_ from the original BOHB implementation.\n\nConfiguration\n-------------\n\nGeneral parameters\n~~~~~~~~~~~~~~~~~~\n\nDetailed explanations availale on the `HpBandSter API documentation page\n<https://automl.github.io/HpBandSter/build/html/optimizers/bohb.html>`_.\n\n==================== =================== ========================================\nName                 Default value       Explanation\n==================== =================== ========================================\nn_iterations         4                   General iterations\nmin_points_in_model  None                Number of points to construct KDE\ntop_n_percent        15                  Percentage to keep\nnum_samples          64                  Number of samples for EI\nrandom_fraction      0.3333333333333333  Fraction to explore randomly\nbandwidth_factor     3                   Widening factor for KDE\nmin_bandwidth        0.001               Minimum sample bandwidth\n==================== =================== ========================================\n\n\nAPIs\n----\n\"\"\"\n\nimport logging\n\nimport numpy as np\nfrom six.moves import input\nfrom six import PY3\n\nfrom .AbstractProposer import AbstractProposer\nfrom . import ProposerStatus\nfrom ..utils import set_default_keyvalue\nfrom .hpbandster.optimizers.bohb import BOHB\nfrom .hpbandster.optimizers.iterations import SuccessiveHalving\n\nimport ConfigSpace as CS\n\nfrom hpbandster.optimizers.config_generators.bohb import BOHB\nfrom hpbandster.core.dispatcher import Job\n\nlogger = logging.getLogger(__name__)\n\nassert PY3, \"BOHB hpbandster supports Python 3 only!\"\n\nBOHB_DEFAULT = dict(min_points_in_model=None,\n                    top_n_percent=15,\n                    num_samples=64,\n                    random_fraction=0.3333333333333333,\n                    bandwidth_factor=3,\n                    min_bandwidth=0.001)\n\nSH_DEFAULT = dict(eta=3,\n                  min_budget=0.01,\n                  max_budget=1)\n\n\nclass BOHBProposer(AbstractProposer):\n    def __init__(self, config):\n        super(BOHBProposer, self).__init__(config)\n        self.tid = 0\n        self.target = 1 if config['target'] == min else -1  # bohb targets for loss only\n\n        # BOHB config parameters\n        set_default_keyvalue(\"n_iterations\", 4, config)\n        for k, v in BOHB_DEFAULT.items():\n            set_default_keyvalue(k, v, config)\n        if not config['min_points_in_model']:\n            config['min_points_in_model'] = None\n        # hyperband related parameters\n        for k, v in SH_DEFAULT.items():\n            set_default_keyvalue(k, v, config)\n        # Hyperband related settings - modified from hpbandster/optimizers/bohb.py\n        self.eta = config['eta']\n        self.min_budget = config['min_budget']\n        self.max_budget = config['max_budget']\n        self.max_SH_iter = -int(np.log(self.min_budget / self.max_budget) / np.log(self.eta)) + 1\n        self.budgets = self.max_budget * np.power(self.eta, -np.linspace(self.max_SH_iter - 1, 0, self.max_SH_iter))\n        self.n_iterations = config['n_iterations']\n\n        self.nSamples = self._get_nSample()\n        bohb_config = {k: config[k] for k in BOHB_DEFAULT}\n        configspace = self.create_configspace(config['parameter_config'])\n\n        self.config_generator = BOHB(configspace, **bohb_config)\n\n        ## Based on master.py\n        self.iterations = []\n        self.running_jobs = {}\n\n    def get_param(self):\n        \"\"\"\n        Get the next hyperparameter values, return None when experiment is finished.\n        :return: hyperparameters in dictionary\n        \"\"\"\n        while True:\n            next_run = None\n            for i in self.active_iterations():\n                next_run = self.iterations[i].get_next_run()\n                if next_run is not None:\n                    break\n\n            if next_run is not None:\n                logger.debug(\"new hyperparameters %s\" % (next_run,))\n                break\n            else:\n                if self.n_iterations > 0:\n                    logger.debug(\"create new iteration for %d\" % self.n_iterations)\n                    self.iterations.append(self.get_next_iteration(len(self.iterations)))\n                    self.n_iterations -= 1\n                else:\n                    self.set_status(ProposerStatus.FINISHED)\n                    return None\n\n        config_id, config, budget = next_run\n        job = Job(config_id, config=config, budget=budget)\n        job.time_it(\"started\")\n        self.running_jobs[self.tid] = job\n        config = config.copy()\n        config['tid'] = self.tid\n        config['n_iterations'] = budget  # for job execution\n        self.tid += 1\n        return config\n\n    def update(self, score, job):\n        \"\"\"\n        Wrap result and transfer to HpBandSter\n        :param score: result\n        :param job: job contains job id for configuration matching\n        \"\"\"\n        i = job.config['tid']\n        job = self.running_jobs[i]\n        job.time_it(\"finished\")\n        job.result = {'loss': score * self.target}\n        self.iterations[job.id[0]].register_result(job)\n        self.config_generator.new_result(job)\n        del self.running_jobs[i]\n\n    def failed(self, job):\n        \"\"\"\n        Failed jobs unsupported by BOHB Proposer.\n\n        :param job: Failed job, containing job id\n        :type job: Job\n        \"\"\"\n        super().failed(job)\n        raise NotImplementedError(\"BOHBProposer does not support failed jobs\")\n\n    def get_next_iteration(self, iteration, iteration_kwargs={}):\n        \"\"\" Copied from https://github.com/automl/HpBandSter/blob/master/hpbandster/optimizers/bohb.py\n        \"\"\"\n        s = self.max_SH_iter - 1 - (iteration % self.max_SH_iter)\n        n0 = int(np.floor(self.max_SH_iter / (s + 1)) * self.eta ** s)\n        ns = [max(int(n0 * (self.eta ** (-i))), 1) for i in range(s + 1)]\n        return (SuccessiveHalving(HPB_iter=iteration, num_configs=ns, budgets=self.budgets[(-s - 1):],\n                                  config_sampler=self.config_generator.get_config, **iteration_kwargs))\n\n    def _get_nSample(self):\n        nSamples = 0\n        for iteration in range(self.n_iterations):\n            s = self.max_SH_iter - 1 - (iteration % self.max_SH_iter)\n            n0 = int(np.floor(self.max_SH_iter / (s + 1)) * self.eta ** s)\n            ns = [max(int(n0 * (self.eta ** (-i))), 1) for i in range(s + 1)]\n            nSamples += sum(ns)\n        logger.debug(\"total exp %d:\" % nSamples)\n        return nSamples\n\n    @staticmethod\n    def create_configspace(parameter_config):\n        \"\"\"\n        Wrap the Worker's get_configspace() function for HpBandSter interface\n        \"\"\"\n        cs = CS.ConfigurationSpace()\n        params = []\n        for config in parameter_config:\n            p = AbstractProposer.parse_param_config(config)\n            if p['type'] == 'choice':\n                param = CS.CategoricalHyperparameter(p['name'], choices=p['range'])\n            else:  # for int or float\n                param = dict(name=p['name'])\n                param['lower'], param['upper'] = min(p['range']), max(p['range'])\n                if p['type'] == 'int':\n                    param = CS.UniformIntegerHyperparameter(**param)\n                else:\n                    param = CS.UniformFloatHyperparameter(**param)\n            params.append(param)\n        cs.add_hyperparameters(params)\n        return cs\n\n    @staticmethod\n    def setup_config():  # pragma: no cover\n        config = dict()\n        for k, v in BOHB_DEFAULT.items():\n            if k == \"min_points_in_model\":\n                config[k] = input(\"%s [%s]:\" % (k, v))\n                if config[k]:\n                    config[k] = int(config[k])\n            else:\n                config[k] = type(v)(input(\"%s [%s]:\" % (k, v)) or v)\n        for k, v in SH_DEFAULT.items():\n            config[k] = type(v)(input(\"%s [%s]:\" % (k, v)) or v)\n        config.update(AbstractProposer.setup_config())\n        return config\n\n    def active_iterations(self):  # pragma: no cover\n        \"\"\"\n        Based on :func:`hpbandster.core.master.Master.active_iterations`.\n        \"\"\"\n        return list(filter(lambda idx: not self.iterations[idx].is_finished, range(len(self.iterations))))\n\n    def save(self, path):\n        msg = \"Save and restore not supported yet\"\n        logger.fatal(msg)\n        raise NotImplementedError(msg)\n\n    def reload(self, path):\n        msg = \"Save and restore not supported yet\"\n        logger.fatal(msg)\n        raise NotImplementedError(msg)"
  },
  {
    "path": "src/aup/Proposer/EASProposer.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\naup.Proposer.EASProposer\n========================\n\nThe code is based on `Efficient Architecture Search by Network Transformation, github commit 6ef7229 <https://github.com/han-cai/EAS>`_.\n\nSee `license <https://github.com/han-cai/EAS/blob/master/LICENSE>`_ for redistribution.\n\nConfiguration\n-------------\n\nGeneral parameters\n~~~~~~~~~~~~~~~~~~\n\n============= ============== ========================================\nName          Default value  Explanation\n============= ============== ========================================\nproposer      eas            Efficient Architecture Search\n============= ============== ========================================\n\n\nThe Proposer demonstrates how to integrate Neural Architecture Search based approaches with *Auptimizer*.\n\nFor other purpose, users need to modify this file with the following steps.\nThe ``init`` function is used to initialize the parameters and static values for the algorithm.\nThe ``get_param`` function uses the ``setup`` function to get different strings representing new NAS architectures based on previous architectures and their performance. A similar paradigm can be adopted for integrating other NAS based algorithms with *Auptimizer*.\n\n\"\"\"\nimport re\nimport numpy as np\n\nimport logging\nlogger = logging.getLogger(__name__)\n\ntry:\n    from .AbstractProposer import AbstractProposer\n    from .eas.arch_search import arch_search_convnet_net2net\nexcept ImportError as e:\n    logger.critical(\"Error happend during importing. Check 3rd party package dependency\")\n    print(e)\n\nclass EASProposer(AbstractProposer):\n\n    def get_net_str(self, net_configs):\n        if isinstance(net_configs, list):\n            if len(net_configs) == 1:\n                net_config = net_configs[0]\n                net_str = []\n                for layer in net_config.layer_cascade.layers[:-1]:\n                    if isinstance(layer, arch_search_convnet_net2net.ConvLayer):\n                        net_str.append('conv-%d-%d' % (layer.filter_num, layer.kernel_size))\n                    elif isinstance(layer, arch_search_convnet_net2net.FCLayer):\n                        net_str.append('fc-%d' % layer.units)\n                    else:\n                        net_str.append('pool')\n                return ['_'.join(net_str)]\n            else:\n                net_str_list = []\n                for net_config in net_configs:\n                    net_str_list += arch_search_convnet_net2net.get_net_str([net_config])\n                return net_str_list\n        else:\n            return arch_search_convnet_net2net.get_net_str([net_configs])[0]\n\n    def get_net_seq(net_configs, vocabulary, num_steps):\n        net_str_list = arch_search_convnet_net2net.get_net_str(net_configs)\n        net_seq = []\n        seq_len = []\n        for net_str in net_str_list:\n            net_str = re.split('_', net_str)\n            net_code = vocabulary.get_code(net_str)\n            _len = len(net_code)\n            net_code += [vocabulary.pad_code for _ in range(len(net_code), num_steps)]\n            net_seq.append(net_code)\n            seq_len.append(_len)\n        return arch_search_convnet_net2net.np.array(net_seq), arch_search_convnet_net2net.np.array(seq_len)\n\n    def get_block_layer_num(net_configs):\n        if len(net_configs) == 1:\n            net_config = net_configs[0]\n            block_layer_num = []\n            _count = 0\n            for layer in net_config.layer_cascade.layers[:-1]:\n                if isinstance(layer, arch_search_convnet_net2net.PoolLayer):\n                    block_layer_num.append(_count)\n                    _count = 0\n                else:\n                    _count += 1\n            block_layer_num.append(_count)\n            return arch_search_convnet_net2net.np.array([block_layer_num])\n        else:\n            block_layer_num = []\n            for net_config in net_configs:\n                block_layer_num.append(arch_search_convnet_net2net.get_block_layer_num([net_config]))\n            return arch_search_convnet_net2net.np.concatenate(block_layer_num, axis=0)\n\n    def apply_wider_decision(wider_decision, net_configs, filter_num_list, units_num_list, noise):\n        if len(net_configs) == 1:\n            decision = wider_decision[0]\n            net_config = net_configs[0]\n            decision_mask = []\n            for _i, layer in enumerate(net_config.layer_cascade.layers[:-1]):\n                if isinstance(layer, arch_search_convnet_net2net.ConvLayer):\n                    if layer.filter_num >= filter_num_list[-1]:\n                        decision_mask.append(0.0)\n                    else:\n                        decision_mask.append(1.0)\n                        if decision[_i]:\n                            new_filter_number = layer.filter_num\n                            for fn in filter_num_list:\n                                if fn > new_filter_number:\n                                    new_filter_number = fn\n                                    break\n                            net_config.widen(\n                                layer_idx=_i, new_width=new_filter_number, noise=noise\n                            )\n                elif isinstance(layer, arch_search_convnet_net2net.FCLayer):\n                    if layer.units >= units_num_list[-1]:\n                        decision_mask.append(0.0)\n                    else:\n                        decision_mask.append(1.0)\n                        if decision[_i]:\n                            new_units_num = layer.units\n                            for un in units_num_list:\n                                if un > new_units_num:\n                                    new_units_num = un\n                                    break\n                            net_config.widen(\n                                layer_idx=_i, new_width=new_units_num, noise=noise,\n                            )\n                else:\n                    decision_mask.append(0.0)\n            decision_mask += [0.0] * (len(decision) - len(decision_mask))\n            return arch_search_convnet_net2net.np.array([decision_mask])\n        else:\n            decision_mask = []\n            for _i, net_config in enumerate(net_configs):\n                decision = wider_decision[_i]\n                mask = arch_search_convnet_net2net.apply_wider_decision([decision], [net_config], filter_num_list,\n                                                                        units_num_list, noise)\n                decision_mask.append(mask)\n            return arch_search_convnet_net2net.np.concatenate(decision_mask, axis=0)\n\n    def apply_deeper_decision(deeper_decision, net_configs, kernel_size_list, noise):\n        if len(net_configs) == 1:\n            decision = deeper_decision[0]\n            net_config = net_configs[0]\n\n            block_decision, layer_idx_decision, ks_decision = decision\n            decision_mask = [1.0, 1.0]\n            block_idx, _pt = 0, 0\n            to_set_layers = []\n            for _i, layer in enumerate(net_config.layer_cascade.layers[:-1]):\n                if _pt == block_decision:\n                    real_layer_idx = _i + layer_idx_decision\n                    prev_layer = net_config.layer_cascade.layers[real_layer_idx]\n                    if isinstance(prev_layer, arch_search_convnet_net2net.ConvLayer):\n                        if 'conv' in net_config.drop_scheme['type']:\n                            keep_prob = net_config.drop_scheme.get('conv_drop', 1.0)\n                        else:\n                            keep_prob = 1.0\n                        decision_mask.append(1.0)\n                        ks = kernel_size_list[ks_decision]\n                        new_layer, prev_layer = net_config.deepen(\n                            layer_idx=real_layer_idx,\n                            new_layer_config={'name': 'conv', 'kernel_size': ks, 'pre_activation': False,\n                                              'keep_prob': keep_prob},\n                        )\n                        to_set_layers.append([new_layer, prev_layer])\n                    elif isinstance(prev_layer, arch_search_convnet_net2net.FCLayer):\n                        if 'fc' in net_config.drop_scheme['type']:\n                            keep_prob = net_config.drop_scheme.get('fc_drop', 1.0)\n                        else:\n                            keep_prob = 1.0\n                        decision_mask.append(0.0)\n                        new_layer, prev_layer = net_config.deepen(\n                            layer_idx=real_layer_idx,\n                            new_layer_config={'name': 'fc', 'keep_prob': keep_prob},\n                        )\n                        to_set_layers.append([new_layer, prev_layer])\n                    else:\n                        raise ValueError\n                    break\n                if isinstance(layer, arch_search_convnet_net2net.PoolLayer):\n                    _pt += 1\n            return arch_search_convnet_net2net.np.array([decision_mask]), to_set_layers\n        else:\n            decision_mask = []\n            to_set_layers = []\n            for _i, net_config in enumerate(net_configs):\n                decision = deeper_decision[_i]\n                mask, to_set = arch_search_convnet_net2net.apply_deeper_decision([decision], [net_config],\n                                                                                 kernel_size_list, noise)\n                decision_mask.append(mask)\n                to_set_layers.append(to_set)\n            return arch_search_convnet_net2net.np.concatenate(decision_mask, axis=0), to_set_layers\n\n    def __init__(self, config):\n        super().__init__(config)\n        self.start_net_path = '../start_nets/start_net_convnet_small_C10+'\n        self.arch_search_folder = '../arch_search/Convnet/C10+/Conv_C10+_rl_small'\n        self.net_pool_folder = '../net_pool/Convnet/C10+/Conv_C10+_rl_small'\n        self.max_episodes = 3  # changed from 15\n        self.random = False\n        self.exp_list = []\n        self.idx_to_task = {}\n        self.episode_batches = 3\n        self.nSamples = self.max_episodes * self.episode_batches\n        self.finished_tasks = 0\n        self.results = {}\n\n        self.filter_num_list = [_i for _i in range(4, 44, 4)]\n        self.units_num_list = [_i for _i in range(8, 88, 8)]\n        # filter_num_list = [16, 32, 64, 96, 128, 192, 256, 320, 384, 448, 512, 576, 640]\n        # units_num_list = [64, 128, 256, 384, 512, 640, 768, 896, 1024, 1152, 1280]\n        self.kernel_size_list = [1, 3, 5]\n\n        # encoder config\n        self.layer_token_list = ['conv-%d-%d' % (f, k) for f in self.filter_num_list for k in [1, 3, 5]]\n        self.layer_token_list += ['fc-%d' % u for u in self.units_num_list] + ['pool']\n        self.encoder_config = {\n            'num_steps': 50,\n            'vocab': arch_search_convnet_net2net.Vocabulary(self.layer_token_list),\n            'embedding_dim': 16,\n            'rnn_units': 50,\n            'rnn_type': 'bi_lstm',\n            'rnn_layers': 1,\n        }\n\n        # wider actor config\n        self.wider_actor_config = {\n            'out_dim': 1,\n            'num_steps': self.encoder_config['num_steps'],\n            'net_type': 'simple',\n            'net_config': None,\n        }\n\n        # deeper actor config\n        self.deeper_actor_config = {\n            'decision_num': 3,\n            'out_dims': [5, 10, len(self.kernel_size_list)],\n            'embedding_dim': self.encoder_config['embedding_dim'],\n            'cell_type': 'lstm',\n            'rnn_layers': 1,\n            'attention_config': None,\n        }\n\n        # meta-controller config\n        self.entropy_penalty = 1e-5\n        self.learning_rate = 2e-3\n        self.opt_config = ['adam', {}]\n\n        # net2net noise config\n        self.noise_config = {\n            'wider': {'type': 'normal', 'ratio': 1e-2},\n            'deeper': {'type': 'normal', 'ratio': 1e-3},\n        }\n\n        # episode config\n        self.episode_config = {\n            'batch_size': self.episode_batches,\n            'wider_action_num': 4,\n            'deeper_action_num': 5,\n        }\n\n        # arch search run config\n        self.arch_search_run_config = {\n            'n_epochs': 20,\n            'init_lr': 0.02,\n            'validation_size': 5000,\n            'other_lr_schedule': {'type': 'cosine'},\n            'batch_size': 64,\n            'include_extra': False,\n        }\n\n        # reward config\n        self.reward_config = {\n            'func': 'tan',\n            'decay': 0.95,\n        }\n\n        self.arch_manager = arch_search_convnet_net2net.ArchManager(self.start_net_path, self.arch_search_folder,\n                                                                    self.net_pool_folder)\n        _, self.run_config, _ = self.arch_manager.get_start_net()\n        self.run_config.update(self.arch_search_run_config)\n\n        self.encoder = arch_search_convnet_net2net.EncoderNet(**self.encoder_config)\n        self.wider_actor = arch_search_convnet_net2net.WiderActorNet(**self.wider_actor_config)\n        self.deeper_actor = arch_search_convnet_net2net.DeeperActorNet(**self.deeper_actor_config)\n        self.meta_controller = arch_search_convnet_net2net.ReinforceNet2NetController(\n            self.arch_manager.meta_controller_path, self.entropy_penalty,\n            self.encoder, self.wider_actor, self.deeper_actor, self.opt_config)\n        self.meta_controller.load()\n\n        self.episode = 0\n\n        logger.info(\"Finishing init\")\n\n        self.setup()\n\n    def setup(self):\n\n        logger.info('episode. %d start. current time: %s' % (self.episode,\n                                                       arch_search_convnet_net2net.strftime(\"%a, %d %b %Y %H:%M:%S\",\n                                                                                            arch_search_convnet_net2net.gmtime())))\n        start_time = arch_search_convnet_net2net.time()\n\n        self.nets = [self.arch_manager.get_start_net(copy=True) for _ in range(self.episode_config['batch_size'])]\n        self.net_configs = [net_config for net_config, _, _ in self.nets]\n        logger.info(self.net_configs)\n        # feed_dict for update the controller\n        self.wider_decision_trajectory, self.wider_decision_mask = [], []\n        self.deeper_decision_trajectory, self.deeper_decision_mask = [], []\n        self.deeper_block_layer_num = []\n        self.encoder_input_seq, self.encoder_seq_len = [], []\n        self.wider_seg_deeper = 0\n        if self.random:\n            # random search\n            self.remain_wider_num = self.episode_config['wider_action_num']\n            self.remain_deeper_num = self.episode_config['deeper_action_num']\n            while self.remain_wider_num > 0 or self.remain_deeper_num > 0:\n                self.rand_idx = arch_search_convnet_net2net.np.random.randint(0,\n                                                                              self.remain_wider_num + self.remain_deeper_num)\n                if self.rand_idx < self.remain_wider_num:\n                    self.wider_decision = arch_search_convnet_net2net.np.random.choice(2, [\n                        self.episode_config['batch_size'], self.encoder.num_steps])\n                    self.arch_search_convnet_net2net.apply_wider_decision(self.wider_decision, self.net_configs,\n                                                                          self.filter_num_list, self.units_num_list,\n                                                                          self.noise_config)\n                    self.remain_wider_num -= 1\n                else:\n                    self.block_layer_num = arch_search_convnet_net2net.get_block_layer_num(self.net_configs)\n                    self.deeper_decision = arch_search_convnet_net2net.np.zeros(\n                        [self.episode_config['batch_size'], self.deeper_actor.decision_num],\n                        arch_search_convnet_net2net.np.int)\n                    self.deeper_decision[:, 0] = arch_search_convnet_net2net.np.random.choice(\n                        self.deeper_actor.out_dims[0], self.deeper_decision[:, 0].shape)\n                    for _k, block_decision in enumerate(self.deeper_decision[:, 0]):\n                        available_layer_num = self.block_layer_num[_k, block_decision]\n                        self.deeper_decision[_k, 1] = arch_search_convnet_net2net.np.random.randint(0,\n                                                                                                    available_layer_num)\n                        self.deeper_decision[:, 2] = arch_search_convnet_net2net.np.random.choice(\n                            self.deeper_actor.out_dims[2], self.deeper_decision[:, 2].shape)\n\n                    _, to_set_layers = arch_search_convnet_net2net.apply_deeper_decision(self.deeper_decision,\n                                                                                         self.net_configs,\n                                                                                         self.kernel_size_list,\n                                                                                         self.noise_config)\n                    for _k, net_config in enumerate(self.net_configs):\n                        net_config.set_identity4deepen(to_set_layers[_k], self.arch_manager.data_provider,\n                                                       batch_size=64, batch_num=1, noise=self.noise_config)\n                    self.remain_deeper_num -= 1\n        else:\n            # on-policy training\n            for _j in range(self.episode_config['wider_action_num']):\n                self.input_seq, self.seq_len = arch_search_convnet_net2net.get_net_seq(self.net_configs,\n                                                                                       self.encoder.vocab,\n                                                                                       self.encoder.num_steps)\n                self.wider_decision, self.wider_probs = self.meta_controller.sample_wider_decision(self.input_seq,\n                                                                                                   self.seq_len)\n                # modify net config according to wider_decision\n                self.wider_mask = arch_search_convnet_net2net.apply_wider_decision(self.wider_decision,\n                                                                                   self.net_configs,\n                                                                                   self.filter_num_list,\n                                                                                   self.units_num_list,\n                                                                                   self.noise_config)\n\n                self.wider_decision_trajectory.append(self.wider_decision)\n                self.wider_decision_mask.append(self.wider_mask)\n                self.wider_seg_deeper += len(self.net_configs)\n                self.encoder_input_seq.append(self.input_seq)\n                self.encoder_seq_len.append(self.seq_len)\n\n            self.to_set_layers = [[] for _ in range(self.episode_config['batch_size'])]\n            for _j in range(self.episode_config['deeper_action_num']):\n                self.input_seq, self.seq_len = arch_search_convnet_net2net.get_net_seq(self.net_configs,\n                                                                                       self.encoder.vocab,\n                                                                                       self.encoder.num_steps)\n                self.block_layer_num = arch_search_convnet_net2net.get_block_layer_num(self.net_configs)\n                self.deeper_decision, self.deeper_probs = self.meta_controller.sample_deeper_decision(self.input_seq,\n                                                                                                      self.seq_len,\n                                                                                                      self.block_layer_num)\n                # modify net config according to deeper_decision\n                self.deeper_mask, self.to_set = arch_search_convnet_net2net.apply_deeper_decision(self.deeper_decision,\n                                                                                                  self.net_configs,\n                                                                                                  self.kernel_size_list,\n                                                                                                  self.noise_config)\n                for _k in range(self.episode_config['batch_size']):\n                    self.to_set_layers[_k] += self.to_set[_k]\n\n                self.deeper_decision_trajectory.append(self.deeper_decision)\n                self.deeper_decision_mask.append(self.deeper_mask)\n                self.deeper_block_layer_num.append(self.block_layer_num)\n                self.encoder_input_seq.append(self.input_seq)\n                self.encoder_seq_len.append(self.seq_len)\n\n            for _k, self.net_config in enumerate(self.net_configs):\n                self.net_config.set_identity4deepen(self.to_set_layers[_k], self.arch_manager.data_provider,\n                                                    batch_size=64, batch_num=1, noise=self.noise_config)\n            # prepare feed dict\n            self.encoder_input_seq = arch_search_convnet_net2net.np.concatenate(self.encoder_input_seq, axis=0)\n            self.encoder_seq_len = arch_search_convnet_net2net.np.concatenate(self.encoder_seq_len, axis=0)\n            if self.episode_config['wider_action_num'] > 0:\n                self.wider_decision_trajectory = arch_search_convnet_net2net.np.concatenate(\n                    self.wider_decision_trajectory, axis=0)\n                self.wider_decision_mask = arch_search_convnet_net2net.np.concatenate(self.wider_decision_mask, axis=0)\n            else:\n                self.wider_decision_trajectory = -arch_search_convnet_net2net.np.ones(\n                    [1, self.meta_controller.encoder.num_steps])\n                self.wider_decision_mask = -arch_search_convnet_net2net.np.ones(\n                    [1, self.meta_controller.encoder.num_steps])\n            if self.episode_config['deeper_action_num'] > 0:\n                self.deeper_decision_trajectory = arch_search_convnet_net2net.np.concatenate(\n                    self.deeper_decision_trajectory, axis=0)\n                self.deeper_decision_mask = arch_search_convnet_net2net.np.concatenate(self.deeper_decision_mask,\n                                                                                       axis=0)\n                self.deeper_block_layer_num = arch_search_convnet_net2net.np.concatenate(self.deeper_block_layer_num,\n                                                                                         axis=0)\n            else:\n                self.deeper_decision_trajectory = - arch_search_convnet_net2net.np.ones(\n                    [1, self.meta_controller.deeper_actor.decision_num])\n                self.deeper_decision_mask = - arch_search_convnet_net2net.np.ones(\n                    [1, self.meta_controller.deeper_actor.decision_num])\n                self.deeper_block_layer_num = arch_search_convnet_net2net.np.ones(\n                    [1, self.meta_controller.deeper_actor.out_dims[0]])\n\n        self.run_configs = [self.run_config] * len(self.net_configs)\n\n        self.net_str_list = self.get_net_str(self.net_configs)\n\n        tasks = self.arch_manager.get_net_tasks(self.net_str_list, self.net_configs, self.run_configs)\n        self.idx_to_task = {}\n        self.exp_list = []\n        for task in tasks:\n            self.idx_to_task[task[0]] = task[1][0]\n            self.exp_list.append(task[0])\n\n    def get_param(self, **kwargs):\n\n        if (self.finished_tasks != self.episode_batches and len(self.exp_list) == 0):\n            return None\n\n        if (self.finished_tasks == self.episode_batches and len(self.exp_list) == 0):\n\n            logger.info(\"finished episode\" + str(self.episode))\n            net_val_list = [-1] * len(self.net_str_list)\n            logger.info(self.results)\n            logger.info(self.idx_to_task)\n            for folder in self.idx_to_task.keys():\n                net_val_list[self.idx_to_task[folder]] = self.results[folder]\n            rewards = self.arch_manager.reward(net_val_list, self.reward_config)\n            rewards = np.concatenate([rewards for _ in range(self.episode_config['wider_action_num'] +\n                                                             self.episode_config['deeper_action_num'])])\n            rewards /= self.episode_config['batch_size']\n            # update the agent\n            if not self.random:\n                self.meta_controller.update_controller(self.learning_rate, self.wider_seg_deeper,\n                                                       self.wider_decision_trajectory,\n                                                       self.wider_decision_mask, self.deeper_decision_trajectory,\n                                                       self.deeper_decision_mask,\n                                                       rewards, self.deeper_block_layer_num, self.encoder_input_seq,\n                                                       self.encoder_seq_len)\n\n                self.meta_controller.save()\n            self.episode += 1\n\n            self.exp_list = []\n            self.idx_to_task = {}\n            self.finished_tasks = 0\n            self.results = {}\n\n            if (self.episode == self.max_episodes):\n                raise Exception(\"Exceeded Max Episodes\")\n            self.setup()\n\n            logger.info(\"Starting Episode \" + str(self.episode))\n\n        logger.debug(\"***********************Exp_list*****************\")\n        logger.debug(self.exp_list)\n        logger.debug(\"***********************Fin_list*****************\")\n        logger.debug(self.finished_tasks)\n        logger.debug(\"************************************************\")\n        logger.info(\"Starting Task\")\n        task = self.exp_list.pop()\n\n        return {\"expdir\": task}\n\n    def update(self, score, job):\n        # super().update(score, job)\n        logger.debug(score)\n        logger.debug(job.config)\n        logger.debug(job.script)\n        logger.debug(\"************************************************\")\n        self.finished_tasks += 1\n        self.results[job.config[\"folderpath\"]] = score\n\n    def failed(self, job):\n        super().failed(job)\n        raise NotImplementedError(\"EASProposer does not support failed jobs\")\n\n    def save(self, path):\n        msg = \"Save and restore not supported yet\"\n        logger.fatal(msg)\n        raise NotImplementedError(msg)\n\n    def reload(self, path):\n        msg = \"Save and restore not supported yet\"\n        logger.fatal(msg)\n        raise NotImplementedError(msg)\n"
  },
  {
    "path": "src/aup/Proposer/HyperbandProposer.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n  \naup.Proposer.HyperbandProposer\n==============================\n\nThe code is based on `hyperband github commit a632209 <https://github.com/zygmuntz/hyperband>`_.\n\nSee `license <https://github.com/zygmuntz/hyperband/blob/master/LICENSE>`_ for redistribution.\n\nConfiguration\n-------------\n\nGeneral parameters\n~~~~~~~~~~~~~~~~~~\n\n============= ============== ========================================\nName          Default value  Explanation\n============= ============== ========================================\nproposer      -              hyperband\nrandom_seed   0              [Optional] seed for random generator\nmax_iter      81             Max iterations (e.g. epochs) per configuration\neta           3              downsampling rate, choose 3 for training from scratch\nskip_last     0              whether skip last element\nengine        random         engine to generate configurations for hyperband\n============= ============== ========================================\n\nSpecific parameters for ``parameter_config``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n======= ==========================================================================\nName    Explanation\n======= ==========================================================================\nname    name of the variable, will be used in the job config, i.e. training code\ntype    type of the parameter to be sampled: choose from \"float\",\"int\",\"choice\"\nrange   range of the parameter.  For \"choice\", list all the feasible values\n======= ==========================================================================\n\n\nIn the returned job_config, it has ``n_iterations`` and ``tid`` for tracking the HPO process.\n``n_iterations`` marks how much resource should be allocated for this round of training (e.g. epochs);\n``tid`` is used to recover the previous trained model if needed (i.e. finetune)\n\nAPIs\n----\n\"\"\"\nimport logging\nimport random\nfrom math import log, ceil\n\nfrom six.moves import input\n\nfrom aup.Proposer import get_proposer\nfrom .AbstractProposer import AbstractProposer\nfrom ..utils import set_default_keyvalue, get_from_options\n\nlogger = logging.getLogger(__name__)\n\n\nclass HyperbandProposer(AbstractProposer):\n    def __init__(self, config):\n        super(HyperbandProposer, self).__init__(config)\n        self.verify_config(config)\n        self.target = -1 if config[\"target\"] == \"max\" else 1\n        self.max_iter = config[\"max_iter\"]\n        self.eta = config[\"eta\"]\n        self.skip_last = config[\"skip_last\"]\n        self.s_max = int(log(self.max_iter)/log(self.eta))\n        self.B = (self.s_max+1)*self.max_iter\n\n        self.results = []\n\n        self.best_counter = -1\n        self.s = self.s_max+1\n        self.config = config\n\n        self.nSamples = 0\n        for s in reversed(range(self.s_max + 1)):\n            self.nSamples += int(ceil(self.B / self.max_iter / (s + 1) * self.eta ** s))\n        logger.info(\"Total number of samples is %d\"%self.nSamples)\n        set_default_keyvalue(\"random_seed\", 0, config)\n        random.seed(config[\"random_seed\"])\n        self.t = 0\n        self.i = 0\n        self.n = 0\n        self.test_set = []\n        self.r = 0\n        self.n_configs = 0\n        self.n_iterations = 0\n        self.scores = {}\n        self.setup(self.s_max)\n\n    def setup(self, s):\n        # Follow the hyperband paper, set up internal variables based on s_max\n        self.s = s\n        self.n = int(ceil(self.B / self.max_iter / (s + 1) * self.eta ** s))\n        self.r = self.max_iter * self.eta ** (-s)\n        gen_config = self.config.copy()\n        gen_config[\"n_samples\"] = self.n\n        gen_config[\"random_seed\"] = random.randint(0, 100)\n        gen_config[\"proposer\"] = gen_config[\"engine\"]\n        proposer = get_proposer(gen_config['proposer'])(gen_config)\n        self.test_set = [proposer.get for _ in range(self.n)]\n        self.t = 0\n        self.i = 0\n        self.n_configs = self.n * self.eta ** (-self.i)\n        self.n_iterations = self.r * self.eta ** self.i\n\n    def verify_config(self, config):\n        for i in config[\"parameter_config\"]:\n            if i['name'] == \"tid\":\n                msg = \"`tid` is reserved for Hyperband\"\n                logger.fatal(msg)\n                raise KeyError(msg)\n        set_default_keyvalue(\"max_iter\", 81, config, log=logger)\n        set_default_keyvalue(\"eta\", 3, config, log=logger)\n        set_default_keyvalue(\"skip_last\", 0, config, log=logger)\n        set_default_keyvalue(\"engine\", \"random\", config, log=logger)\n\n    def get_param(self):\n        if self.t == len(self.test_set):\n            if len(self.scores) != self.t:\n                self.current_proposal = None\n                return None\n            tids = sorted(self.scores, key=self.scores.get)\n            tids = tids[0:int(self.n_configs / self.eta)]\n            self.test_set = [self.test_set[i] for i in tids]\n            self.scores = {}\n            self.i += 1\n            self.t = 0\n            self.n_configs = self.n * self.eta ** (-self.i)\n            self.n_iterations = self.r * self.eta ** self.i\n\n        if self.i == (self.s+1-int(self.skip_last)):\n            self.i = 0\n            self.setup(self.s-1)\n            logger.debug(\"\\n*** {} configurations x {:.1f} iterations each\".format(\n                self.n_configs, self.n_iterations))\n\n        if type(self.test_set[self.t]) != dict:\n            self.test_set[self.t] = self.test_set[self.t]()\n        self.test_set[self.t]['tid'] = self.t\n        self.test_set[self.t][\"n_iterations\"] = self.n_iterations\n\n        self.t += 1\n        return self.test_set[self.t-1]  # return parameter configuration\n\n    def update(self, score, job):\n        self.scores[job.config[\"tid\"]] = score * self.target\n\n    def failed(self, job):\n        super(HyperbandProposer, self).failed(job)\n        raise NotImplementedError(\"HyperbandProposer does not support failed jobs\")\n\n    def save(self, path):\n        msg = \"Save and restore not supported yet\"\n        logger.fatal(msg)\n        raise NotImplementedError(msg)\n\n    def reload(self, path):\n        msg = \"Save and restore not supported yet\"\n        logger.fatal(msg)\n        raise NotImplementedError(msg)\n\n    @staticmethod\n    def setup_config():  # pragma: no cover\n        config = dict()\n        config['max_iter'] = int(input(\"max iteration [81]:\") or 81)\n        config['eta'] = int(input(\"ita [3]\") or 3)\n        config[\"skip_last\"] = int(input(\"skip last [0]\") or '0')\n        config[\"engine\"] = get_from_options(\"Hyperparameter sampling engine\", [\"random\", \"sequence\"])\n        config.update(get_proposer(config['engine']).setup_config())\n        return config\n"
  },
  {
    "path": "src/aup/Proposer/HyperoptProposer.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n  \naup.Proposer.HyperoptProposer\n=============================\n\n\nThis is converted from `Hyperopt repo commit 762e89f <https://github.com/hyperopt/hyperopt>`_\n\nConfiguration\n-------------\n\nGeneral parameters\n~~~~~~~~~~~~~~~~~~\n============= ============== ========================================\nName          Default value  Explanation\n============= ============== ========================================\nproposer      -              hyperopt\nrandom_seed   0              [Optional] seed for random generator\nengine        tpe            engine to generate configurations for HyperOpt\nn_samples     -              max_evals in hyperopt\n============= ============== ========================================\n\nSpecific parameters for ``parameter_config``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n======= ==========================================================================\nName    Explanation\n======= ==========================================================================\nname    name of the variable, will be used in the job config, i.e. training code\ntype    type of the parameter to be sampled: choose from \"float\",\"int\",\"choice\"\nrange   range of the parameter.  For \"choice\", list all the feasible values\n======= ==========================================================================\n\nAPIs\n----\n\"\"\"\nimport importlib\nimport logging\n\nimport numpy as np\nfrom six.moves import input\n\nfrom .AbstractProposer import AbstractProposer\nfrom .hyperopt import hp, base\nfrom .hyperopt.utils import coarse_utcnow\nfrom ..utils import set_default_keyvalue, check_missing_key, get_from_options\n\nlogger = logging.getLogger(__name__)\n\n\ndef _get_algo(engine):\n    module = importlib.import_module(\".hyperopt.%s\" % engine, \"aup.Proposer\")\n    return module.suggest\n\n\ndef _convert(param_config):\n    d = {}\n    for param in param_config:\n        if param['type'] == 'int':\n            d[param['name']] = hp.randint(param['name'], param['range'][1] - param['range'][0])\n            # hyperopt doesn't support [low, high] for int\n        elif param['type'] == 'float':\n            if len(param['range']) != 2:\n                raise ValueError(\"HyperOpt: range for float only has two numbers, you have %d\"%len(param['range']))\n            param['range'] = sorted(param['range'])\n            d[param['name']] = hp.uniform(param['name'], param['range'][0], param['range'][1])\n        elif param['type'] == 'choice':\n            d[param['name']] = hp.choice(param['name'], param['range'])\n        else:\n            msg = \"%s is not supported type, choose int, float, choice\" % param['type']\n            logger.fatal(msg)\n            raise KeyError(msg)\n    return d\n\n\nclass HyperoptProposer(AbstractProposer):\n\n    def __init__(self, config, random_seed=0):\n        super(HyperoptProposer, self).__init__(config)\n\n        set_default_keyvalue(\"engine\", \"tpe\", config, log=logger)\n        set_default_keyvalue(\"random_seed\", random_seed, config, log=logger)\n\n        self.target = -1 if config[\"target\"] == \"max\" else 1  # default is to minimize\n        self.verify_config(config)\n        self.nSamples = config[\"n_samples\"]\n        self.parameter_config = config[\"parameter_config\"]\n        self.space = _convert(self.parameter_config)\n        self.rstate = np.random.RandomState(config[\"random_seed\"])\n        self.domain = base.Domain(lambda x: logger.fatal(\"should not be run\"), self.space)\n        self.trials = base.Trials()\n        self.algo = _get_algo(config[\"engine\"])\n\n    @staticmethod\n    def setup_config():  # pragma: no cover\n        config = dict()\n        config['n_samples'] = int(input(\"number of model samples, `n_samples`, [1]:\") or 1)\n        config['random_seed'] = int(input(\"random seed, `random_seed`, [0]:\") or 0)\n        config['engine'] = get_from_options(\"search engine, `engine`\", ['tpe', 'random'])\n        config.update(AbstractProposer.setup_config())\n        return config\n\n    def get_param(self, **kwargs):\n        \"\"\"\n        Restructure of hyperopt.fmin `run()`, `serial_evaluate()`.\n        \"\"\"\n        new_ids = self.trials.new_trial_ids(1)  # only one config each time\n        trial = self.algo(new_ids, self.domain, self.trials, self.rstate.randint(2 ** 31 - 1))[0]\n\n        trial['state'] = base.JOB_STATE_RUNNING\n        now = coarse_utcnow()\n        trial['book_time'] = now\n        trial['refresh_time'] = now\n        spec = base.spec_from_misc(trial['misc'])\n\n        self.trials.insert_trial_docs([trial])\n        self.trials.refresh()\n\n        for param in self.parameter_config:\n            if param['type'] == \"int\":\n                spec[param['name']] = int(spec[param['name']] + param['range'][0])\n            if param['type'] == \"choice\":\n                spec[param['name']] = param['range'][spec[param['name']]]\n        spec['tid'] = trial['tid']\n        return spec\n\n    def reload(self, path):\n        super(HyperoptProposer, self).reload(path)\n        self.domain = base.Domain(lambda x: logger.fatal(\"should not be run\"), self.space)\n\n    def save(self, path):\n        del self.domain\n        super(HyperoptProposer, self).save(path)\n\n    def update(self, score, job):\n        \"\"\"\n        Restructure of hyperopt.fmin `serial_evaluation`.\n        \n        :param score: score returned from the training script\n        :param job: job object contains tid for hyperopt internal update\n        \"\"\"\n        super(HyperoptProposer, self).update(score, job)\n        tid = job.config['tid']\n        if score is not None:\n            result = {'loss': score * self.target, 'status': 'ok'}\n            state = base.JOB_STATE_DONE\n        else:\n            result = {'loss': None, 'status': 'fail'}\n            state = base.JOB_STATE_ERROR\n        for trial in self.trials._dynamic_trials:\n            if tid == trial['tid']:\n                trial['state'] = state\n                trial['result'] = result\n                trial['refresh_time'] = coarse_utcnow()\n                self.trials.refresh()\n                return\n        msg = \"Failed to locate job tid=%d\" % tid\n        logger.fatal(msg)\n        raise KeyError(msg)\n\n    def failed(self, job):\n        \"\"\"\n        Failed jobs unsupported by Hyperopt Proposer.\n\n        :param job: Failed job, containing job id\n        :type job: Job\n        \"\"\"\n        super(HyperoptProposer, self).failed(job)\n        self.update(None, job)\n\n    def verify_config(self, config):\n        check_missing_key(config, \"n_samples\", \"Specify number of samples to randomly draw\", log=logger)\n        for param in config[\"parameter_config\"]:\n            if \"tid\" in param[\"name\"]:\n                msg = \"Parameter `tid` is conflict with hyperopt internal control parameter, please change the name\"\n                logger.fatal(msg)\n                raise KeyError(msg)\n        return config\n"
  },
  {
    "path": "src/aup/Proposer/Hyperopt_LICENSE",
    "content": "LICENSE\n=======\n\nCopyright (c) 2013, James Bergstra\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n    * Neither the name of hyperopt nor the names of its contributors may be\n      used to endorse or promote products derived from this software without\n      specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "src/aup/Proposer/RandomProposer.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\naup.Proposer.RandomProposer\n===========================\n\nRandom sampling of the parameters\n\nConfiguration\n-------------\n\nGeneral parameters\n~~~~~~~~~~~~~~~~~~\n\n============ ============= ========================================\nName         Default value Explanation\n============ ============= ========================================\nproposer     -             random\nn_samples    -             Total number of trials to sample\nrandom_seed  0             [Optional] seed for random generator\n============ ============= ========================================\n\nSpecific parameters for ``parameter_config``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n======= ==========================================================================\nName    Explanation\n======= ==========================================================================\nname    name of the variable, will be used in the job config, i.e. training code\ntype    type of the parameter to be sampled: choose from \"float\",\"int\",\"choice\"\nrange   range of the parameter.  For \"choice\", list all the feasible values\n======= ==========================================================================\n\nAPIs\n----\n\"\"\"\nimport logging\n\nfrom numpy import random\nfrom six.moves import input\n\nfrom .AbstractProposer import AbstractProposer\nfrom ..utils import check_missing_key, set_default_keyvalue\n\nlogger = logging.getLogger(__name__)\n\n\ndef _random_int(x):\n    if len(x) != 2:\n        msg = (\"Range of random integer should have two elements, got %d\" % len(x))\n        logger.fatal(msg)\n        raise ValueError(msg)\n    return lambda: random.randint(x[0], x[1] + 1)\n\n\ndef _random_float(x):\n    if len(x) != 2:\n        msg = (\"Range of random float should have two elements, got %d\" % len(x))\n        logger.fatal(msg)\n        raise ValueError(msg)\n    return lambda: random.rand() * (x[1] - x[0]) + x[0]\n\n\ndef _random_choice(x):\n    if len(x) < 1:\n        msg = \"Range of random choice should have some elements, got nothing\"\n        logger.fatal(msg)\n        raise ValueError(msg)\n    return lambda: x[random.choice(len(x))]\n\n\n_random_fun = {\n    'int': _random_int,\n    'float': _random_float,\n    'choice': _random_choice\n}\n\n\nclass RandomProposer(AbstractProposer):\n    \"\"\"\n    Random proposer\n\n    :param config: experiment configuration contains the details searching space\n    :param random_seed: default random seed if not in config\n    \"\"\"\n\n    def __init__(self, config, random_seed=0):\n        super(RandomProposer, self).__init__(config)\n        self.verify_config(config)\n        self.nSamples = config[\"n_samples\"]\n        set_default_keyvalue(\"random_seed\", random_seed, config, log=logger)\n        random.seed(config[\"random_seed\"])\n        self.random_state = None  # for suspend and resume\n        self.params_gen = {}\n        for param in config[\"parameter_config\"]:\n            p = self.parse_param_config(param)\n            self.params_gen[p['name']] = _random_fun[p['type']](p['range'])\n\n    @staticmethod\n    def setup_config():  # pragma: no cover\n        \"\"\"\n        Set up experiment configuration\n        :return: experiment config in dict.\n        \"\"\"\n        config = dict()\n        config['n_samples'] = int(input(\"number of model samples to draw randomly, `n_samples`, [1]:\") or 1)\n        config['random_seed'] = int(input(\"random seed, `random_seed`, [0]:\") or 0)\n        config.update(AbstractProposer.setup_config())\n        return config\n\n    def get_param(self, **kwargs):\n        \"\"\"\n        Get the next parameter set\n        :return: parameter name and value pairs in dict\n        \"\"\"\n        if 'params_gen' not in self.__dict__:\n            return None\n\n        for i in self.params_gen:\n            self.current_proposal[i] = self.params_gen[i]()\n        logger.debug(self.current_proposal)\n        return self.current_proposal\n\n    def reload(self, path):\n        super(RandomProposer, self).reload(path)\n        random.set_state(self.random_state)\n        self.random_state = None\n        return self\n\n    def save(self, path):\n        if 'params_gen' in self.__dict__:\n            del self.params_gen\n        self.random_state = random.get_state()\n        super(RandomProposer, self).save(path)\n\n    def verify_config(self, config):\n        check_missing_key(config, \"n_samples\", \"Specify number of samples to randomly draw\", log=logger)\n        return config\n"
  },
  {
    "path": "src/aup/Proposer/SequenceProposer.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\naup.Proposer.SequenceProposer\n=============================\n\nSequence proposer of the parameters\n\nConfiguration\n-------------\n\nGeneral parameters\n~~~~~~~~~~~~~~~~~~\n\n============  ========================================\nName          Explanation\n============  ========================================\nproposer      sequence\n============  ========================================\n\nSpecific parameters for ``parameter_config``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n========= ==========================================================================\nName      Explanation\n========= ==========================================================================\nname      name of the variable, will be used in the job config, i.e. training code\ntype      type of the parameter to be sampled: choose from \"float\",\"int\",\"choice\"\nrange     range of the parameter.  For \"choice\", list all the feasible values\ninterval  interval of sequence, default of 1 for int and float; overwrite n\nn         number of samples for this variable, will compute interval; >=2\n========= ==========================================================================\n\nAPIs\n----\n\"\"\"\nimport abc\nimport logging\nfrom ast import literal_eval\nfrom math import floor\n\nfrom six.moves import reduce, input\n\nfrom .AbstractProposer import AbstractProposer\nfrom ..utils import check_missing_key, get_from_options\n\nABC = abc.ABCMeta('ABC', (object,), {'__slots__': ()})\n\nlogger = logging.getLogger(__name__)\n\n\n# could add conditional proposer\n\n\nclass _AbstractGen(object):\n    def __init__(self, conf):\n        self.name = conf[\"name\"]\n        self.current = None\n        self.len = 0\n\n    @abc.abstractmethod\n    def get(self, next_flag=True):  # pragma: no cover\n        # next_flag is for retrieve the first element in the grid space.\n        raise NotImplementedError\n\n    @classmethod\n    def get_gen(cls, conf):\n        if conf['type'].lower() == \"int\":\n            return _IntGen(conf)\n        elif conf['type'].lower() == \"float\":\n            return _FloatGen(conf)\n        elif conf['type'].lower() == \"choice\":\n            return _ChoiceGen(conf)\n        else:\n            msg = \"Data type %s is not supported\" % conf['type']\n            logger.fatal(msg)\n            raise KeyError(msg)\n\n\nclass _IntGen(_AbstractGen):\n    def __init__(self, conf):\n        super(_IntGen, self).__init__(conf)\n        self.min, self.max = conf[\"range\"]\n        if \"interval\" in conf:\n            self.interval = conf[\"interval\"]\n        elif \"n\" in conf:\n            self.interval = floor((self.max - self.min) / (conf[\"n\"] - 1))\n        else:\n            logger.warning(\"Using default interval of 1\")\n            self.interval = 1\n        self.len = floor((self.max - self.min) / self.interval) + 1\n        self.current = self.min\n\n    def get(self, next_flag=True):\n        if next_flag:\n            val = self.current + self.interval\n            if val > self.max:\n                self.current = self.min\n                return self.current, True\n            else:\n                self.current = val\n                return self.current, False\n        else:\n            return self.current, False\n\n\nclass _FloatGen(_AbstractGen):\n    def __init__(self, conf):\n        super(_FloatGen, self).__init__(conf)\n        self.min, self.max = conf[\"range\"]\n        if \"interval\" in conf:\n            self.interval = conf[\"interval\"]\n        elif \"n\" in conf:\n            self.interval = (self.max - self.min) / float(conf[\"n\"] - 1)\n        else:\n            logger.warning(\"Using default interval of 1\")\n            self.interval = 1\n        self.len = floor((self.max - self.min) / self.interval) + 1\n        self.current = self.min\n        self.max += self.interval*0.1 # avoid precision error for comparison.\n\n    def get(self, next_flag=True):\n        if next_flag:\n            val = self.current + self.interval\n            if val > self.max:  # loop back\n                self.current = self.min\n                return self.current, True\n            else:\n                self.current = val\n                return self.current, False\n        else:\n            return self.current, False\n\n\nclass _ChoiceGen(_AbstractGen):\n    def __init__(self, conf):\n        super(_ChoiceGen, self).__init__(conf)\n        self.range = conf[\"range\"]\n        self.len = len(self.range)\n        self.current = 0\n\n    def get(self, next_flag=True):\n        if next_flag:\n            self.current += 1\n            if self.current < self.len:\n                return self.range[self.current], False\n            else:\n                self.current = 0\n                return self.range[self.current], True\n        else:\n            return self.range[self.current], False\n\n\nclass SequenceProposer(AbstractProposer):\n    def __init__(self, config):\n        super(SequenceProposer, self).__init__(config)\n        self.params_gen = []\n        for param in config[\"parameter_config\"]:\n            check_missing_key(param, \"name\",\n                              \"Missing name of the parameter, need to be consistent with your training code\",\n                              log=logger)\n            p = super(SequenceProposer, self).parse_param_config(param)\n            self.params_gen.append(_AbstractGen.get_gen(p))\n        self.nSamples = reduce(lambda x, y: x * y, [i.len for i in self.params_gen])\n\n    @staticmethod\n    def setup_config():  # pragma: no cover\n        config = []\n        try:\n            print(\"start adding hyperparameters, use 'stop' or ctrl+c to exit\")\n            while True:\n                name = input(\"variable name:\")\n                if name == \"stop\":\n                    break\n                vrange = literal_eval(\"[\" + input(\"range (separated by ,):\") + \"]\")\n                if len(vrange) == 0:\n                    raise ValueError(\"range needs at least one element\")\n                vtype = get_from_options(\"type:\", (\"choice\", \"float\", \"int\"))\n                c = {'name': name, \"range\": vrange, \"type\": vtype}\n                if vtype != \"choice\":\n                    interval = input(\"interval for grid search, or skip to use total number for this variable:\")\n                    if not interval:\n                        n = int(input(\"number of values for this variable [2]:\") or 2)\n                        if n < 2:\n                            raise ValueError(\"number of values should be larger than 2, or use choice type\")\n                        c['n'] = n\n                    else:\n                        if vtype == 'float':\n                            c['interval'] = float(interval)\n                        else:\n                            c['interval'] = int(interval)\n                config.append(c)\n        except KeyboardInterrupt:\n            pass\n        return {\"parameter_config\": config}\n\n    def get_param(self, **kwargs):\n        if self.counter == 0:\n            self.current_proposal[self.params_gen[0].name], next_flag = self.params_gen[0].get(next_flag=False)\n        else:\n            self.current_proposal[self.params_gen[0].name], next_flag = self.params_gen[0].get(next_flag=True)\n        for i in self.params_gen[1:]:\n            self.current_proposal[i.name], next_flag = i.get(next_flag=next_flag)\n        logger.debug(self.current_proposal)\n        return self.current_proposal\n"
  },
  {
    "path": "src/aup/Proposer/SpearmintProposer.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\naup.Proposer.SpearmintProposer\n==============================\n\nRe-implementation of Spearmint.  Most of the Spearmint code has not been changed\nMainly wrap main.py\n\nBe aware - all variables are vectorized except size=1 case.  (different from spearmint original implementation)\n\nThe original source is forked from `Spearmint github commit 70309f0\n<https://github.com/JasperSnoek/spearmint/tree/master/spearmint>`_.\n\nConfiguration\n-------------\n\nGeneral parameters\n~~~~~~~~~~~~~~~~~~\n\n============= ============== ========================================\nName          Default value  Explanation\n============= ============== ========================================\nproposer      -              spearmint\nengine        GPEIOptChooser\nengine_config -              Options for spearmint chooser\ngrid_size     20000          Option for spearmint\nn_samples     -              Total number of trials to sample\nrandom_seed   0              [Optional] seed for random generator\nspearmint_dir spearmint      Spearmint working directory\n============= ============== ========================================\n\nSpecific parameters for ``parameter_config``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n======= ==========================================================================\nName    Explanation\n======= ==========================================================================\nname    name of the variable, will be used in the job config, i.e. training code\ntype    type of the parameter to be sampled: choose from \"float\",\"int\",\"choice\"\nrange   range of the parameter.  For \"choice\", list all the feasible values\n======= ==========================================================================\n\nAPIs\n----\n\"\"\"\nimport importlib\nimport logging\nimport os\nimport shutil\n\nfrom six.moves import input\n\nfrom .AbstractProposer import AbstractProposer\nfrom .spearmint import ExperimentGrid\nfrom ..aup import BasicConfig\nfrom ..utils import set_default_keyvalue, check_missing_key, get_from_options\n\nlogger = logging.getLogger(__name__)\n\n\nclass SpearmintProposer(AbstractProposer):\n    def __init__(self, config):\n        super(SpearmintProposer, self).__init__(config)\n\n        if os.path.isdir(config[\"workingdir\"]):  # local folder exist\n            set_default_keyvalue(\"spearmint_dir\",\n                                 os.path.join(config[\"workingdir\"], \"spearmint\"),\n                                 config, log=logger)\n        else:  # local folder not exist (esp. run remotely)\n            set_default_keyvalue(\"spearmint_dir\", \"spearmint\", config, log=logger)\n        self.expt_dir = config[\"spearmint_dir\"]\n        set_default_keyvalue(\"random_seed\", 0, config, log=logger)\n        set_default_keyvalue(\"engine\", \"GPEIChooser\", config, log=logger)\n        set_default_keyvalue(\"engine_config\", {}, config, log=logger)\n        set_default_keyvalue(\"grid_size\", 20000, config, log=logger)\n\n        self.nSamples = config[\"n_samples\"]\n        self.seed = config[\"random_seed\"]\n        self.target = -1 if config[\"target\"] == \"max\" else 1\n        self.variables = []\n        self.grid_size = config[\"grid_size\"]\n\n        for param in config[\"parameter_config\"]:\n            p = self.parse_param_config(param)\n            if \"job_id\" == p['name']:\n                msg = \"`job_id` is preserved for HPO\"\n                logger.fatal(msg)\n                raise ValueError(msg)\n            if p[\"type\"] == \"choice\":\n                p[\"type\"] = \"enum\"\n            set_default_keyvalue('size', 1, p)\n            self.variables.append(BasicConfig(**p))\n\n        try:\n            module = importlib.import_module(\".spearmint.chooser.\" + config[\"engine\"], package='aup.Proposer')\n            self.chooser = module.init(self.expt_dir, config[\"engine_config\"])\n            self.verify_config(config)\n        except ImportError:\n            msg = \"%s doesn't exist in spearmint\" % config[\"engine\"]\n            logger.fatal(msg)\n            raise KeyError(msg)\n\n    @staticmethod\n    def setup_config():  # pragma: no cover\n        config = dict()\n        logger.critical(\"The following step only setup the basic configuration, edit file direct for advanced tuning.\")\n        config['engine'] = get_from_options(\"HPO Engine, `engine`,\", [\"GPEIOptChooser\"])\n        config['engine_config'] = dict()\n        config['grid_size'] = int(input(\"Grid size for hyperparameters, `grid_size`, [20000]:\") or 20000)\n        config['n_samples'] = int(input(\"number of model samples to draw randomly, `n_samples`, [1]:\") or 1)\n        config['random_seed'] = int(input(\"random seed, `random_seed`, [0]:\") or 0)\n        config.update(AbstractProposer.setup_config())\n        for i in config['parameter_config']:\n            i.update({'size': 1})\n        return config\n\n    def get_param(self, **kwargs):\n        expt_grid = ExperimentGrid(self.expt_dir, self.variables, self.grid_size, self.seed)\n        grid, values, durations = expt_grid.get_grid()\n        candidates = expt_grid.get_candidates()\n        pending = expt_grid.get_pending()\n        complete = expt_grid.get_complete()\n\n        job_id = self.chooser.next(grid, values, durations, candidates, pending, complete)\n\n        if isinstance(job_id, tuple):\n            (job_id, candidate) = job_id\n            job_id = expt_grid.add_to_grid(candidate)\n\n        expt_grid.set_submitted(job_id, 0)\n        job_config = expt_grid.get_params(job_id)\n        for i in job_config:\n            if len(job_config[i]) == 1:  # spearmint returns list, other methods return value.\n                job_config[i] = job_config[i][0]\n            else:\n                raise NotImplementedError(\"Parameter with dimension larger than 1 is not supported yet\")\n        job_config[\"job_id\"] = job_id\n        expt_grid.set_running(job_id)\n        self.current_proposal = job_config\n        return self.current_proposal\n\n    def save(self, path):\n        msg = \"Save and restore not supported yet\"\n        logger.fatal(msg)\n        raise NotImplementedError(msg)\n\n    def reload(self, path):\n        msg = \"Save and restore not supported yet\"\n        logger.fatal(msg)\n        raise NotImplementedError(msg)\n\n    def update(self, score, job):\n        ExperimentGrid.job_complete(self.expt_dir, job.config[\"job_id\"], score * self.target, 0)\n\n    def failed(self, job):\n        super(SpearmintProposer, self).failed(job)\n        ExperimentGrid.job_broken(self.expt_dir, job.config[\"job_id\"])\n\n    def verify_config(self, config):\n        check_missing_key(config, \"n_samples\", \"Specify number of samples to randomly draw\", log=logger)\n\n        if os.path.exists(self.expt_dir):\n            logger.warning(\"Removing folder %s\" % self.expt_dir)\n            shutil.rmtree(self.expt_dir)\n        os.mkdir(self.expt_dir)\n        return config\n"
  },
  {
    "path": "src/aup/Proposer/Spearmint_LICENSE",
    "content": "From https://github.com/JasperSnoek/spearmint\nNote that the new repository is under a non-commercial license with a contributor license agreement. If you prefer not to agree to the license, you can freely use code here (though it is a bit older).\n\n\n"
  },
  {
    "path": "src/aup/Proposer/__init__.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport importlib\nimport logging\nfrom enum import Enum\n\nlogger = logging.getLogger(__name__)\n\nPROPOSERS = {\n    \"random\": \"RandomProposer\",\n    \"sequence\": \"SequenceProposer\",\n    \"spearmint\": \"SpearmintProposer\",\n    \"hyperband\": \"HyperbandProposer\",\n    \"hyperopt\": \"HyperoptProposer\",\n    \"bohb\": \"BOHBProposer\",\n    \"eas\": \"EASProposer\"\n}\n\nProposerStatus = Enum('ProposerStatus', 'RUNNING FINISHED FAILED')\n\nSPECIAL_EXIT_PROPOSERS = (\"bohb\",\"hyperband\")\n\n\ndef get_proposer(proposer, disable_proposer_logging=False):\n    \"\"\"\n    Create Proposer\n\n    :param proposer: name of proposer\n    :type proposer: str\n    :return: A proposer class\n    :rtype: AbstractProposer\n    \"\"\"\n    logger.debug(\"choose %s as proposer\" % proposer)\n    try:\n        proposer = PROPOSERS[proposer.lower()]\n    except KeyError:\n        logger.fatal((\"%s proposer is not implemented\" % proposer))\n        raise ValueError(\"%s proposer is not implemented\" % proposer)\n\n    mod = importlib.import_module(\".\" + proposer, \"aup.Proposer\")\n    _logger = logging.getLogger(mod.__name__)\n    _logger.disabled = disable_proposer_logging\n    cls = getattr(mod, proposer)\n    return cls\n"
  },
  {
    "path": "src/aup/Proposer/eas/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2019 Han Cai\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "src/aup/Proposer/eas/__init__.py",
    "content": "\n"
  },
  {
    "path": "src/aup/Proposer/eas/arch_search/__init__.py",
    "content": ""
  },
  {
    "path": "src/aup/Proposer/eas/arch_search/arch_search_convnet_net2net.py",
    "content": "from ..expdir_monitor.arch_manager import ArchManager\nfrom ..meta_controller.base_controller import Vocabulary, EncoderNet, WiderActorNet, DeeperActorNet\nfrom ..meta_controller.rl_controller import ReinforceNet2NetController\nfrom time import gmtime, strftime, time\nfrom datetime import timedelta\nfrom ..models.layers import ConvLayer, FCLayer, PoolLayer\nimport re\nimport numpy as np\n\n\ndef get_net_str(net_configs):\n\tif isinstance(net_configs, list):\n\t\tif len(net_configs) == 1:\n\t\t\tnet_config = net_configs[0]\n\t\t\tnet_str = []\n\t\t\tfor layer in net_config.layer_cascade.layers[:-1]:\n\t\t\t\tif isinstance(layer, ConvLayer):\n\t\t\t\t\tnet_str.append('conv-%d-%d' % (layer.filter_num, layer.kernel_size))\n\t\t\t\telif isinstance(layer, FCLayer):\n\t\t\t\t\tnet_str.append('fc-%d' % layer.units)\n\t\t\t\telse:\n\t\t\t\t\tnet_str.append('pool')\n\t\t\treturn ['_'.join(net_str)]\n\t\telse:\n\t\t\tnet_str_list = []\n\t\t\tfor net_config in net_configs:\n\t\t\t\tnet_str_list += get_net_str([net_config])\n\t\t\treturn net_str_list\n\telse:\n\t\treturn get_net_str([net_configs])[0]\n\n\ndef get_net_seq(net_configs, vocabulary, num_steps):\n\tnet_str_list = get_net_str(net_configs)\n\tnet_seq = []\n\tseq_len = []\n\tfor net_str in net_str_list:\n\t\tnet_str = re.split('_', net_str)\n\t\tnet_code = vocabulary.get_code(net_str)\n\t\t_len = len(net_code)\n\t\tnet_code += [vocabulary.pad_code for _ in range(len(net_code), num_steps)]\n\t\tnet_seq.append(net_code)\n\t\tseq_len.append(_len)\n\treturn np.array(net_seq), np.array(seq_len)\n\n\ndef get_block_layer_num(net_configs):\n\tif len(net_configs) == 1:\n\t\tnet_config = net_configs[0]\n\t\tblock_layer_num = []\n\t\t_count = 0\n\t\tfor layer in net_config.layer_cascade.layers[:-1]:\n\t\t\tif isinstance(layer, PoolLayer):\n\t\t\t\tblock_layer_num.append(_count)\n\t\t\t\t_count = 0\n\t\t\telse:\n\t\t\t\t_count += 1\n\t\tblock_layer_num.append(_count)\n\t\treturn np.array([block_layer_num])\n\telse:\n\t\tblock_layer_num = []\n\t\tfor net_config in net_configs:\n\t\t\tblock_layer_num.append(get_block_layer_num([net_config]))\n\t\treturn np.concatenate(block_layer_num, axis=0)\n\n\ndef apply_wider_decision(wider_decision, net_configs, filter_num_list, units_num_list, noise):\n\tif len(net_configs) == 1:\n\t\tdecision = wider_decision[0]\n\t\tnet_config = net_configs[0]\n\t\tdecision_mask = []\n\t\tfor _i, layer in enumerate(net_config.layer_cascade.layers[:-1]):\n\t\t\tif isinstance(layer, ConvLayer):\n\t\t\t\tif layer.filter_num >= filter_num_list[-1]:\n\t\t\t\t\tdecision_mask.append(0.0)\n\t\t\t\telse:\n\t\t\t\t\tdecision_mask.append(1.0)\n\t\t\t\t\tif decision[_i]:\n\t\t\t\t\t\tnew_filter_number = layer.filter_num\n\t\t\t\t\t\tfor fn in filter_num_list:\n\t\t\t\t\t\t\tif fn > new_filter_number:\n\t\t\t\t\t\t\t\tnew_filter_number = fn\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tnet_config.widen(\n\t\t\t\t\t\t\tlayer_idx=_i, new_width=new_filter_number, noise=noise\n\t\t\t\t\t\t)\n\t\t\telif isinstance(layer, FCLayer):\n\t\t\t\tif layer.units >= units_num_list[-1]:\n\t\t\t\t\tdecision_mask.append(0.0)\n\t\t\t\telse:\n\t\t\t\t\tdecision_mask.append(1.0)\n\t\t\t\t\tif decision[_i]:\n\t\t\t\t\t\tnew_units_num = layer.units\n\t\t\t\t\t\tfor un in units_num_list:\n\t\t\t\t\t\t\tif un > new_units_num:\n\t\t\t\t\t\t\t\tnew_units_num = un\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tnet_config.widen(\n\t\t\t\t\t\t\tlayer_idx=_i, new_width=new_units_num, noise=noise,\n\t\t\t\t\t\t)\n\t\t\telse:\n\t\t\t\tdecision_mask.append(0.0)\n\t\tdecision_mask += [0.0] * (len(decision) - len(decision_mask))\n\t\treturn np.array([decision_mask])\n\telse:\n\t\tdecision_mask = []\n\t\tfor _i, net_config in enumerate(net_configs):\n\t\t\tdecision = wider_decision[_i]\n\t\t\tmask = apply_wider_decision([decision], [net_config], filter_num_list, units_num_list, noise)\n\t\t\tdecision_mask.append(mask)\n\t\treturn np.concatenate(decision_mask, axis=0)\n\n\ndef apply_deeper_decision(deeper_decision, net_configs, kernel_size_list, noise):\n\tif len(net_configs) == 1:\n\t\tdecision = deeper_decision[0]\n\t\tnet_config = net_configs[0]\n\n\t\tblock_decision, layer_idx_decision, ks_decision = decision\n\t\tdecision_mask = [1.0, 1.0]\n\t\tblock_idx, _pt = 0, 0\n\t\tto_set_layers = []\n\t\tfor _i, layer in enumerate(net_config.layer_cascade.layers[:-1]):\n\t\t\tif _pt == block_decision:\n\t\t\t\treal_layer_idx = _i + layer_idx_decision\n\t\t\t\tprev_layer = net_config.layer_cascade.layers[real_layer_idx]\n\t\t\t\tif isinstance(prev_layer, ConvLayer):\n\t\t\t\t\tif 'conv' in net_config.drop_scheme['type']:\n\t\t\t\t\t\tkeep_prob = net_config.drop_scheme.get('conv_drop', 1.0)\n\t\t\t\t\telse:\n\t\t\t\t\t\tkeep_prob = 1.0\n\t\t\t\t\tdecision_mask.append(1.0)\n\t\t\t\t\tks = kernel_size_list[ks_decision]\n\t\t\t\t\tnew_layer, prev_layer = net_config.deepen(\n\t\t\t\t\t\tlayer_idx=real_layer_idx,\n\t\t\t\t\t\tnew_layer_config={'name': 'conv', 'kernel_size': ks, 'pre_activation': False,\n\t\t\t\t\t\t\t\t\t\t  'keep_prob': keep_prob},\n\t\t\t\t\t)\n\t\t\t\t\tto_set_layers.append([new_layer, prev_layer])\n\t\t\t\telif isinstance(prev_layer, FCLayer):\n\t\t\t\t\tif 'fc' in net_config.drop_scheme['type']:\n\t\t\t\t\t\tkeep_prob = net_config.drop_scheme.get('fc_drop', 1.0)\n\t\t\t\t\telse:\n\t\t\t\t\t\tkeep_prob = 1.0\n\t\t\t\t\tdecision_mask.append(0.0)\n\t\t\t\t\tnew_layer, prev_layer = net_config.deepen(\n\t\t\t\t\t\tlayer_idx=real_layer_idx,\n\t\t\t\t\t\tnew_layer_config={'name': 'fc', 'keep_prob': keep_prob},\n\t\t\t\t\t)\n\t\t\t\t\tto_set_layers.append([new_layer, prev_layer])\n\t\t\t\telse:\n\t\t\t\t\traise ValueError\n\t\t\t\tbreak\n\t\t\tif isinstance(layer, PoolLayer):\n\t\t\t\t_pt += 1\n\t\treturn np.array([decision_mask]), to_set_layers\n\telse:\n\t\tdecision_mask = []\n\t\tto_set_layers = []\n\t\tfor _i, net_config in enumerate(net_configs):\n\t\t\tdecision = deeper_decision[_i]\n\t\t\tmask, to_set = apply_deeper_decision([decision], [net_config], kernel_size_list, noise)\n\t\t\tdecision_mask.append(mask)\n\t\t\tto_set_layers.append(to_set)\n\t\treturn np.concatenate(decision_mask, axis=0), to_set_layers\n\t\n\ndef arch_search_convnet(start_net_path, arch_search_folder, net_pool_folder, max_episodes, random=False):\n\tfilter_num_list = [_i for _i in range(4, 44, 4)]\n\tunits_num_list = [_i for _i in range(8, 88, 8)]\n\t# filter_num_list = [16, 32, 64, 96, 128, 192, 256, 320, 384, 448, 512, 576, 640]\n\t# units_num_list = [64, 128, 256, 384, 512, 640, 768, 896, 1024, 1152, 1280]\n\tkernel_size_list = [1, 3, 5]\n\t\n\t# encoder config\n\tlayer_token_list = ['conv-%d-%d' % (f, k) for f in filter_num_list for k in [1, 3, 5]]\n\tlayer_token_list += ['fc-%d' % u for u in units_num_list] + ['pool']\n\tencoder_config = {\n\t\t'num_steps': 50,\n\t\t'vocab': Vocabulary(layer_token_list),\n\t\t'embedding_dim': 16,\n\t\t'rnn_units': 50,\n\t\t'rnn_type': 'bi_lstm',\n\t\t'rnn_layers': 1,\n\t}\n\t\n\t# wider actor config\n\twider_actor_config = {\n\t\t'out_dim': 1,\n\t\t'num_steps': encoder_config['num_steps'],\n\t\t'net_type': 'simple',\n\t\t'net_config': None,\n\t}\n\t\n\t# deeper actor config\n\tdeeper_actor_config = {\n\t\t'decision_num': 3,\n\t\t'out_dims': [5, 10, len(kernel_size_list)],\n\t\t'embedding_dim': encoder_config['embedding_dim'],\n\t\t'cell_type': 'lstm',\n\t\t'rnn_layers': 1,\n\t\t'attention_config': None,\n\t}\n\t\n\t# meta-controller config\n\tentropy_penalty = 1e-5\n\tlearning_rate = 2e-3\n\topt_config = ['adam', {}]\n\t\n\t# net2net noise config\n\tnoise_config = {\n\t\t'wider': {'type': 'normal', 'ratio': 1e-2},\n\t\t'deeper': {'type': 'normal', 'ratio': 1e-3},\n\t}\n\t\n\t# episode config\n\tepisode_config = {\n\t\t'batch_size': 10,\n\t\t'wider_action_num': 4,\n\t\t'deeper_action_num': 5,\n\t}\n\t\n\t# arch search run config\n\tarch_search_run_config = {\n\t\t'n_epochs': 20,\n\t\t'init_lr': 0.02,\n\t\t'validation_size': 5000,\n\t\t'other_lr_schedule': {'type': 'cosine'},\n\t\t'batch_size': 64,\n\t\t'include_extra': False,\n\t}\n\t\n\t# reward config\n\treward_config = {\n\t\t'func': 'tan',\n\t\t'decay': 0.95,\n\t}\n\t\n\tarch_manager = ArchManager(start_net_path, arch_search_folder, net_pool_folder)\n\t_, run_config, _ = arch_manager.get_start_net()\n\trun_config.update(arch_search_run_config)\n\t\n\tencoder = EncoderNet(**encoder_config)\n\twider_actor = WiderActorNet(**wider_actor_config)\n\tdeeper_actor = DeeperActorNet(**deeper_actor_config)\n\tmeta_controller = ReinforceNet2NetController(arch_manager.meta_controller_path, entropy_penalty,\n\t\t\t\t\t\t\t\t\t\t\t\t encoder, wider_actor, deeper_actor, opt_config)\n\tmeta_controller.load()\n\t\n\tfor _i in range(arch_manager.episode + 1, max_episodes + 1):\n\t\tprint('episode. %d start. current time: %s' % (_i, strftime(\"%a, %d %b %Y %H:%M:%S\", gmtime())))\n\t\tstart_time = time()\n\t\t\n\t\tnets = [arch_manager.get_start_net(copy=True) for _ in range(episode_config['batch_size'])]\n\t\tnet_configs = [net_config for net_config, _, _ in nets]\n\t\t\n\t\t# feed_dict for update the controller\n\t\twider_decision_trajectory, wider_decision_mask = [], []\n\t\tdeeper_decision_trajectory, deeper_decision_mask = [], []\n\t\tdeeper_block_layer_num = []\n\t\tencoder_input_seq, encoder_seq_len = [], []\n\t\twider_seg_deeper = 0\n\t\t\n\t\tif random:\n\t\t\t# random search\n\t\t\tremain_wider_num = episode_config['wider_action_num']\n\t\t\tremain_deeper_num = episode_config['deeper_action_num']\n\t\t\twhile remain_wider_num > 0 or remain_deeper_num > 0:\n\t\t\t\trand_idx = np.random.randint(0, remain_wider_num + remain_deeper_num)\n\t\t\t\tif rand_idx < remain_wider_num:\n\t\t\t\t\twider_decision = np.random.choice(2, [episode_config['batch_size'], encoder.num_steps])\n\t\t\t\t\tapply_wider_decision(wider_decision, net_configs, filter_num_list, units_num_list, noise_config)\n\t\t\t\t\tremain_wider_num -= 1\n\t\t\t\telse:\n\t\t\t\t\tblock_layer_num = get_block_layer_num(net_configs)\n\t\t\t\t\tdeeper_decision = np.zeros([episode_config['batch_size'], deeper_actor.decision_num], np.int)\n\t\t\t\t\tdeeper_decision[:, 0] = np.random.choice(deeper_actor.out_dims[0], deeper_decision[:, 0].shape)\n\t\t\t\t\tfor _k, block_decision in enumerate(deeper_decision[:, 0]):\n\t\t\t\t\t\tavailable_layer_num = block_layer_num[_k, block_decision]\n\t\t\t\t\t\tdeeper_decision[_k, 1] = np.random.randint(0, available_layer_num)\n\t\t\t\t\tdeeper_decision[:, 2] = np.random.choice(deeper_actor.out_dims[2],  deeper_decision[:, 2].shape)\n\t\t\t\t\t\n\t\t\t\t\t_, to_set_layers = apply_deeper_decision(deeper_decision, net_configs,\n\t\t\t\t\t                                         kernel_size_list, noise_config)\n\t\t\t\t\tfor _k, net_config in enumerate(net_configs):\n\t\t\t\t\t\tnet_config.set_identity4deepen(to_set_layers[_k], arch_manager.data_provider,\n\t\t\t\t\t\t                               batch_size=64, batch_num=1, noise=noise_config)\n\t\t\t\t\tremain_deeper_num -= 1\n\t\telse:\n\t\t\t# on-policy training\n\t\t\tfor _j in range(episode_config['wider_action_num']):\n\t\t\t\tinput_seq, seq_len = get_net_seq(net_configs, encoder.vocab, encoder.num_steps)\n\t\t\t\twider_decision, wider_probs = meta_controller.sample_wider_decision(input_seq, seq_len)\n\t\t\t\t# modify net config according to wider_decision\n\t\t\t\twider_mask = apply_wider_decision(wider_decision, net_configs, filter_num_list,\n\t\t\t\t\t\t\t\t\t\t\t\t  units_num_list, noise_config)\n\t\t\t\t\n\t\t\t\twider_decision_trajectory.append(wider_decision)\n\t\t\t\twider_decision_mask.append(wider_mask)\n\t\t\t\twider_seg_deeper += len(net_configs)\n\t\t\t\tencoder_input_seq.append(input_seq)\n\t\t\t\tencoder_seq_len.append(seq_len)\n\t\t\t\n\t\t\tto_set_layers = [[] for _ in range(episode_config['batch_size'])]\n\t\t\tfor _j in range(episode_config['deeper_action_num']):\n\t\t\t\tinput_seq, seq_len = get_net_seq(net_configs, encoder.vocab, encoder.num_steps)\n\t\t\t\tblock_layer_num = get_block_layer_num(net_configs)\n\t\t\t\tdeeper_decision, deeper_probs = meta_controller.sample_deeper_decision(input_seq, seq_len,\n\t\t\t\t                                                                       block_layer_num)\n\t\t\t\t# modify net config according to deeper_decision\n\t\t\t\tdeeper_mask, to_set = apply_deeper_decision(deeper_decision, net_configs,\n\t\t\t\t                                            kernel_size_list, noise_config)\n\t\t\t\tfor _k in range(episode_config['batch_size']):\n\t\t\t\t\tto_set_layers[_k] += to_set[_k]\n\t\t\t\t\n\t\t\t\tdeeper_decision_trajectory.append(deeper_decision)\n\t\t\t\tdeeper_decision_mask.append(deeper_mask)\n\t\t\t\tdeeper_block_layer_num.append(block_layer_num)\n\t\t\t\tencoder_input_seq.append(input_seq)\n\t\t\t\tencoder_seq_len.append(seq_len)\n\t\t\t\n\t\t\tfor _k, net_config in enumerate(net_configs):\n\t\t\t\tnet_config.set_identity4deepen(to_set_layers[_k], arch_manager.data_provider,\n\t\t\t\t                               batch_size=64, batch_num=1, noise=noise_config)\n\t\t\t# prepare feed dict\n\t\t\tencoder_input_seq = np.concatenate(encoder_input_seq, axis=0)\n\t\t\tencoder_seq_len = np.concatenate(encoder_seq_len, axis=0)\n\t\t\tif episode_config['wider_action_num'] > 0:\n\t\t\t\twider_decision_trajectory = np.concatenate(wider_decision_trajectory, axis=0)\n\t\t\t\twider_decision_mask = np.concatenate(wider_decision_mask, axis=0)\n\t\t\telse:\n\t\t\t\twider_decision_trajectory = -np.ones([1, meta_controller.encoder.num_steps])\n\t\t\t\twider_decision_mask = -np.ones([1, meta_controller.encoder.num_steps])\n\t\t\tif episode_config['deeper_action_num'] > 0:\n\t\t\t\tdeeper_decision_trajectory = np.concatenate(deeper_decision_trajectory, axis=0)\n\t\t\t\tdeeper_decision_mask = np.concatenate(deeper_decision_mask, axis=0)\n\t\t\t\tdeeper_block_layer_num = np.concatenate(deeper_block_layer_num, axis=0)\n\t\t\telse:\n\t\t\t\tdeeper_decision_trajectory = - np.ones([1, meta_controller.deeper_actor.decision_num])\n\t\t\t\tdeeper_decision_mask = - np.ones([1, meta_controller.deeper_actor.decision_num])\n\t\t\t\tdeeper_block_layer_num = np.ones([1, meta_controller.deeper_actor.out_dims[0]])\n\t\t\n\t\trun_configs = [run_config] * len(net_configs)\n\t\tnet_str_list = get_net_str(net_configs)\n\t\t\n\t\tnet_vals = arch_manager.get_net_vals(net_str_list, net_configs, run_configs)\n\t\trewards = arch_manager.reward(net_vals, reward_config)\n\t\t\n\t\trewards = np.concatenate([rewards for _ in range(episode_config['wider_action_num'] +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t episode_config['deeper_action_num'])])\n\t\trewards /= episode_config['batch_size']\n\t\t\n\t\t# update the agent\n\t\tif not random:\n\t\t\tmeta_controller.update_controller(learning_rate, wider_seg_deeper, wider_decision_trajectory,\n\t\t\t\t\t\t\t\t\t\t\t  wider_decision_mask, deeper_decision_trajectory, deeper_decision_mask,\n\t\t\t\t\t\t\t\t\t\t\t  rewards, deeper_block_layer_num, encoder_input_seq, encoder_seq_len)\n\t\t\t\n\t\t\tmeta_controller.save()\n\t\t# episode end\n\t\ttime_per_episode = time() - start_time\n\t\tseconds_left = int((max_episodes - _i) * time_per_episode)\n\t\tprint('Time per Episode: %s, Est. complete in: %s' % (\n\t\t\tstr(timedelta(seconds=time_per_episode)),\n\t\t\tstr(timedelta(seconds=seconds_left))))\n"
  },
  {
    "path": "src/aup/Proposer/eas/arch_search/arch_search_densenet_net2net.py",
    "content": "from ..expdir_monitor.arch_manager import ArchManager\nfrom ..meta_controller.base_controller import Vocabulary, EncoderNet, WiderActorNet, DeeperActorNet\nfrom ..meta_controller.rl_controller import ReinforceNet2NetController\nfrom time import gmtime, strftime, time\nfrom datetime import timedelta\nfrom ..models.dense_net import DenseBlock, TransitionBlock\nimport re\nimport numpy as np\n\n\ndef get_net_str(net_configs):\n\tif len(net_configs) == 1:\n\t\tnet_config = net_configs[0]\n\t\tnet_str = []\n\t\tfor block in net_config.blocks:\n\t\t\tif isinstance(block, DenseBlock):\n\t\t\t\tblock_str = []\n\t\t\t\tfor miniblock in block.miniblocks:\n\t\t\t\t\tblock_str.append('g%d' % miniblock.out_features_dim)\n\t\t\t\tblock_str = '-'.join(block_str)\n\t\t\t\tnet_str.append(block_str)\n\t\t\telse:\n\t\t\t\tnet_str.append('t')\n\t\treturn ['_'.join(net_str)]\n\telse:\n\t\tnet_str_list = []\n\t\tfor net_config in net_configs:\n\t\t\tnet_str_list += get_net_str([net_config])\n\t\treturn net_str_list\n\n\ndef get_net_seq(net_configs, vocabulary, num_steps):\n\tnet_str_list = get_net_str(net_configs)\n\tnet_seq = []\n\tseq_len = []\n\tfor net_str in net_str_list:\n\t\tnet_str = re.split('_|-', net_str)\n\t\tnet_code = vocabulary.get_code(net_str)\n\t\t_len = len(net_code)\n\t\tnet_code += [vocabulary.pad_code for _ in range(len(net_code), num_steps)]\n\t\tnet_seq.append(net_code)\n\t\tseq_len.append(_len)\n\treturn np.array(net_seq), np.array(seq_len)\n\n\ndef get_block_layer_num(net_configs):\n\tif len(net_configs) == 1:\n\t\tnet_config = net_configs[0]\n\t\tblock_layer_num = []\n\t\tfor block in net_config.blocks:\n\t\t\tif isinstance(block, DenseBlock):\n\t\t\t\tblock_layer_num.append(len(block.miniblocks))\n\t\treturn np.array([block_layer_num])\n\telse:\n\t\tblock_layer_num = []\n\t\tfor net_config in net_configs:\n\t\t\tblock_layer_num.append(get_block_layer_num([net_config]))\n\t\treturn np.concatenate(block_layer_num, axis=0)\n\n\ndef apply_wider_decision(wider_decision, net_configs, growth_rate_list, noise):\n\tif len(net_configs) == 1:\n\t\tdecision = wider_decision[0]\n\t\tnet_config = net_configs[0]\n\t\t_pt = 0\n\t\tdecision_mask = []\n\t\tfor block_idx, block in enumerate(net_config.blocks):\n\t\t\tif isinstance(block, DenseBlock):\n\t\t\t\tfor miniblock_idx, miniblock in enumerate(block.miniblocks):\n\t\t\t\t\tgrowth_rate = miniblock.out_features_dim\n\t\t\t\t\tif growth_rate >= growth_rate_list[-1]:\n\t\t\t\t\t\tdecision_mask.append(0.0)\n\t\t\t\t\telse:\n\t\t\t\t\t\tdecision_mask.append(1.0)\n\t\t\t\t\t\tnew_gr = growth_rate\n\t\t\t\t\t\tfor gr in growth_rate_list:\n\t\t\t\t\t\t\tif gr > new_gr:\n\t\t\t\t\t\t\t\tnew_gr = gr\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tif decision[_pt]:\n\t\t\t\t\t\t\tnet_config.widen(\n\t\t\t\t\t\t\t\tloc={'block': block_idx, 'miniblock': miniblock_idx,\n\t\t\t\t\t\t\t\t\t 'multi-branch': 'in_bottle', 'layer': 0},\n\t\t\t\t\t\t\t\tnew_width=net_config.bc_ratio * new_gr,\n\t\t\t\t\t\t\t\tnoise=noise,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tnet_config.widen(\n\t\t\t\t\t\t\t\tloc={'block': block_idx, 'miniblock': miniblock_idx,\n\t\t\t\t\t\t\t\t\t 'multi-branch': 'branch', 'branch': 0, 'layer': 0},\n\t\t\t\t\t\t\t\tnew_width=new_gr,\n\t\t\t\t\t\t\t\tnoise=noise,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t_pt += 1\n\t\t\telse:\n\t\t\t\tdecision_mask.append(0.0)\n\t\t\t\t_pt += 1\n\t\tdecision_mask += [0.0] * (len(decision) - len(decision_mask))\n\t\treturn np.array([decision_mask])\n\telse:\n\t\tdecision_mask = []\n\t\tfor _i, net_config in enumerate(net_configs):\n\t\t\tdecision = wider_decision[_i]\n\t\t\tmask = apply_wider_decision([decision], [net_config], growth_rate_list, noise)\n\t\t\tdecision_mask.append(mask)\n\t\treturn np.concatenate(decision_mask, axis=0)\n\n\ndef apply_deeper_decision(deeper_decision, net_configs, noise):\n\tif len(net_configs) == 1:\n\t\tdecision = deeper_decision[0]\n\t\tnet_config = net_configs[0]\n\n\t\tblock_decision, layer_idx_decision = decision\n\t\tdecision_mask = [1.0, 1.0]\n\t\tblock_idx, _pt = 0, 0\n\t\tfor _i, block in enumerate(net_config.blocks):\n\t\t\tif isinstance(block, DenseBlock):\n\t\t\t\tif _pt == block_decision:\n\t\t\t\t\tblock_idx = _i\n\t\t\t\t\tbreak\n\t\t\t\t_pt += 1\n\t\tnet_config.insert_miniblock(\n\t\t\tloc={'block': block_idx, 'miniblock': layer_idx_decision},\n\t\t\tminiblock_config={'bc_mode': True},\n\t\t\tnoise=noise,\n\t\t)\n\t\treturn np.array([decision_mask])\n\telse:\n\t\tdecision_mask = []\n\t\tfor _i, net_config in enumerate(net_configs):\n\t\t\tdecision = deeper_decision[_i]\n\t\t\tmask = apply_deeper_decision([decision], [net_config], noise)\n\t\t\tdecision_mask.append(mask)\n\t\treturn np.concatenate(decision_mask, axis=0)\n\n\ndef widen_transition(net_configs, noise):\n\tfor net_config in net_configs:\n\t\tnew_out_dim = int(net_config.average_growth_rate * net_config.first_ratio)\n\t\tif new_out_dim > net_config.blocks[0].out_features_dim:\n\t\t\tnet_config.widen(\n\t\t\t\tloc={'block': 0, 'layer': 0},\n\t\t\t\tnew_width=new_out_dim,\n\t\t\t\tnoise=noise,\n\t\t\t)\n\t\tout_features_dim = new_out_dim\n\t\tfor _i, block in enumerate(net_config.blocks[2:-1], 2):\n\t\t\tif isinstance(block, TransitionBlock):\n\t\t\t\tnew_out_dim = int(net_config.blocks[_i - 1].out_features_dim(net_config.blocks[_i - 2].out_features_dim)\n\t\t\t\t\t\t\t\t  * net_config.reduction)\n\t\t\t\tif new_out_dim > block.out_features_dim:\n\t\t\t\t\tnet_config.widen(\n\t\t\t\t\t\tloc={'block': _i, 'layer': 0},\n\t\t\t\t\t\tnew_width=new_out_dim,\n\t\t\t\t\t\tnoise=noise,\n\t\t\t\t\t)\n\t\t\t\tout_features_dim = block.out_features_dim\n\t\t\telse:\n\t\t\t\tout_features_dim = block.out_features_dim(out_features_dim)\n\t\t\t\n\ndef arch_search_densenet(start_net_path, arch_search_folder, net_pool_folder, max_episodes):\n\tgrowth_rate_list = [_i for _i in range(4, 50, 2)]\n\t# encoder config\n\tlayer_token_list = ['g%d' % growth_rate for growth_rate in growth_rate_list]\n\tencoder_config = {\n\t\t'num_steps': 50,\n\t\t'vocab': Vocabulary(layer_token_list + ['t']),\n\t\t'embedding_dim': 16,\n\t\t'rnn_units': 50,\n\t\t'rnn_type': 'bi_lstm',\n\t\t'rnn_layers': 1,\n\t}\n\t\n\t# wider actor config\n\twider_actor_config = {\n\t\t'out_dim': 1,\n\t\t'num_steps': encoder_config['num_steps'],\n\t\t'net_type': 'simple',\n\t\t'net_config': None,\n\t}\n\t\n\t# deeper actor config\n\tdeeper_actor_config = {\n\t\t'decision_num': 2,\n\t\t'out_dims': [3, 20],\n\t\t'embedding_dim': encoder_config['embedding_dim'],\n\t\t'cell_type': 'lstm',\n\t\t'rnn_layers': 1,\n\t\t'attention_config': None,\n\t}\n\t\n\t# meta-controller config\n\tentropy_penalty = 1e-5\n\tlearning_rate = 2e-3\n\topt_config = ['adam', {}]\n\t\n\t# net2net noise config\n\tnoise_config = {\n\t\t'wider': {'type': 'normal', 'ratio': 1e-2},\n\t\t'deeper': {'type': 'normal', 'ratio': 1e-3},\n\t}\n\t\n\t# episode config\n\tepisode_config = {\n\t\t'batch_size': 10,\n\t\t'wider_action_num': 10,\n\t\t'deeper_action_num': 5,\n\t}\n\t\n\t# arch search run config\n\tarch_search_run_config = {\n\t\t'n_epochs': 20,\n\t\t'init_lr': 0.02,\n\t\t'validation_size': 5000,\n\t\t'other_lr_schedule': {'type': 'cosine'},\n\t\t'batch_size': 64,\n\t\t'include_extra': False,\n\t}\n\t\n\t# reward config\n\treward_config = {\n\t\t'func': 'tan',\n\t\t'decay': 0.95,\n\t}\n\t\n\tarch_manager = ArchManager(start_net_path, arch_search_folder, net_pool_folder)\n\t_, run_config, _ = arch_manager.get_start_net()\n\trun_config.update(arch_search_run_config)\n\t\n\tencoder = EncoderNet(**encoder_config)\n\twider_actor = WiderActorNet(**wider_actor_config)\n\tdeeper_actor = DeeperActorNet(**deeper_actor_config)\n\tmeta_controller = ReinforceNet2NetController(arch_manager.meta_controller_path, entropy_penalty,\n\t\t\t\t\t\t\t\t\t\t\t\t encoder, wider_actor, deeper_actor, opt_config)\n\tmeta_controller.load()\n\t\n\tfor _i in range(arch_manager.episode + 1, max_episodes + 1):\n\t\tprint('episode. %d start. current time: %s' % (_i, strftime(\"%a, %d %b %Y %H:%M:%S\", gmtime())))\n\t\tstart_time = time()\n\t\t\n\t\tnets = [arch_manager.get_start_net(copy=True) for _ in range(episode_config['batch_size'])]\n\t\tnet_configs = [net_config for net_config, _, _ in nets]\n\t\t\n\t\t# feed_dict for update the controller\n\t\twider_decision_trajectory, wider_decision_mask = [], []\n\t\tdeeper_decision_trajectory, deeper_decision_mask = [], []\n\t\tdeeper_block_layer_num = []\n\t\tencoder_input_seq, encoder_seq_len = [], []\n\t\twider_seg_deeper = 0\n\t\t\n\t\t# on-policy training\n\t\tfor _j in range(episode_config['wider_action_num']):\n\t\t\tinput_seq, seq_len = get_net_seq(net_configs, encoder.vocab, encoder.num_steps)\n\t\t\twider_decision, wider_probs = meta_controller.sample_wider_decision(input_seq, seq_len)\n\t\t\t# modify net config according to wider_decision\n\t\t\twider_mask = apply_wider_decision(wider_decision, net_configs, growth_rate_list, noise_config)\n\t\t\t\n\t\t\twider_decision_trajectory.append(wider_decision)\n\t\t\twider_decision_mask.append(wider_mask)\n\t\t\twider_seg_deeper += len(net_configs)\n\t\t\tencoder_input_seq.append(input_seq)\n\t\t\tencoder_seq_len.append(seq_len)\n\t\t\n\t\tfor _j in range(episode_config['deeper_action_num']):\n\t\t\tinput_seq, seq_len = get_net_seq(net_configs, encoder.vocab, encoder.num_steps)\n\t\t\tblock_layer_num = get_block_layer_num(net_configs)\n\t\t\tdeeper_decision, deeper_probs = meta_controller.sample_deeper_decision(input_seq, seq_len, block_layer_num)\n\t\t\t# modify net config according to deeper_decision\n\t\t\tdeeper_mask = apply_deeper_decision(deeper_decision, net_configs, noise_config)\n\t\t\t\n\t\t\tdeeper_decision_trajectory.append(deeper_decision)\n\t\t\tdeeper_decision_mask.append(deeper_mask)\n\t\t\tdeeper_block_layer_num.append(block_layer_num)\n\t\t\tencoder_input_seq.append(input_seq)\n\t\t\tencoder_seq_len.append(seq_len)\n\t\t\n\t\twiden_transition(net_configs, noise_config)\n\t\t\n\t\trun_configs = [run_config] * len(net_configs)\n\t\tnet_str_list = get_net_str(net_configs)\n\t\t\n\t\tnet_vals = arch_manager.get_net_vals(net_str_list, net_configs, run_configs)\n\t\trewards = arch_manager.reward(net_vals, reward_config)\n\t\t\n\t\t# prepare feed dict\n\t\tencoder_input_seq = np.concatenate(encoder_input_seq, axis=0)\n\t\tencoder_seq_len = np.concatenate(encoder_seq_len, axis=0)\n\t\tif episode_config['wider_action_num'] > 0:\n\t\t\twider_decision_trajectory = np.concatenate(wider_decision_trajectory, axis=0)\n\t\t\twider_decision_mask = np.concatenate(wider_decision_mask, axis=0)\n\t\telse:\n\t\t\twider_decision_trajectory = -np.ones([1, meta_controller.encoder.num_steps])\n\t\t\twider_decision_mask = -np.ones([1, meta_controller.encoder.num_steps])\n\t\tif episode_config['deeper_action_num'] > 0:\n\t\t\tdeeper_decision_trajectory = np.concatenate(deeper_decision_trajectory, axis=0)\n\t\t\tdeeper_decision_mask = np.concatenate(deeper_decision_mask, axis=0)\n\t\t\tdeeper_block_layer_num = np.concatenate(deeper_block_layer_num, axis=0)\n\t\telse:\n\t\t\tdeeper_decision_trajectory = - np.ones([1, meta_controller.deeper_actor.decision_num])\n\t\t\tdeeper_decision_mask = - np.ones([1, meta_controller.deeper_actor.decision_num])\n\t\t\tdeeper_block_layer_num = np.ones([1, meta_controller.deeper_actor.out_dims[0]])\n\t\trewards = np.concatenate([rewards for _ in range(episode_config['wider_action_num'] +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t episode_config['deeper_action_num'])])\n\t\trewards /= episode_config['batch_size']\n\t\t\n\t\t# update the agent\n\t\tmeta_controller.update_controller(learning_rate, wider_seg_deeper, wider_decision_trajectory,\n\t\t\t\t\t\t\t\t\t\t  wider_decision_mask, deeper_decision_trajectory, deeper_decision_mask,\n\t\t\t\t\t\t\t\t\t\t  rewards, deeper_block_layer_num, encoder_input_seq, encoder_seq_len)\n\t\t\n\t\tmeta_controller.save()\n\t\t# episode end\n\t\ttime_per_episode = time() - start_time\n\t\tseconds_left = int((max_episodes - _i) * time_per_episode)\n\t\tprint('Time per Episode: %s, Est. complete in: %s' % (\n\t\t\tstr(timedelta(seconds=time_per_episode)),\n\t\t\tstr(timedelta(seconds=seconds_left))))\n\n"
  },
  {
    "path": "src/aup/Proposer/eas/arch_search.py",
    "content": "import argparse\nimport numpy as np\nfrom .arch_search.arch_search_densenet_net2net import arch_search_densenet\nfrom .arch_search.arch_search_convnet_net2net import arch_search_convnet\n\n_SEED = 110\nnp.random.seed(_SEED)\n\n\nparser = argparse.ArgumentParser()\nparser.add_argument(\n\t'--setting', type=str, default='convnet', choices=['convnet', 'densenet'],\n)\n\nargs = parser.parse_args()\nif args.setting == 'convnet':\n\t\"\"\"\n\tArchitecture Search on Convnet\n\t\"\"\"\n\tarch_search_convnet(\n\t\tstart_net_path='../start_nets/start_net_convnet_small_C10+',\n\t\tarch_search_folder='../arch_search/Convnet/C10+/Conv_C10+_rl_small',\n\t\tnet_pool_folder='../net_pool/Convnet/C10+/Conv_C10+_rl_small',\n\t\tmax_episodes=3, #changed from 15\n\t\trandom=False,\n\t)\nelif args.setting == 'densenet':\n\t\"\"\"\n\tArchitecture Search on DenseNet\n\t\"\"\"\n\tarch_search_densenet(\n\t\tstart_net_path='placeholder',\n\t\tarch_search_folder='placeholder',\n\t\tnet_pool_folder='placeholder',\n\t\tmax_episodes=15,\n\t)\nelse:\n\tpass\n"
  },
  {
    "path": "src/aup/Proposer/eas/client.py",
    "content": "\"\"\"\nThe file to run in the client side\nTrain the network and return the validation performance\n\"\"\"\nimport os\nfrom .expdir_monitor.expdir_monitor import ExpdirMonitor\nimport time\nos.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'\n\n\ndef run(expdir):\n\tstart_time = time.time()\n\texpdir_monitor = ExpdirMonitor(expdir)\n\tvalid_performance = expdir_monitor.run(pure=True, restore=False)\n\tend_time = time.time()\n\tprint('running time: %s' % (end_time - start_time))\n\tprint('valid performance: %s' % valid_performance)\n\t#print('pid: ' + str(os.getpid()))\n\n\ndef main():\n\texpdir = input().strip('\\n')\n\trun(expdir)\n\n\nif __name__ == \"__main__\":\n\ttry:\n\t\tmain()\n\texcept KeyboardInterrupt:\n\t\tpass\n"
  },
  {
    "path": "src/aup/Proposer/eas/data_providers/__init__.py",
    "content": ""
  },
  {
    "path": "src/aup/Proposer/eas/data_providers/base_provider.py",
    "content": "import numpy as np\n\n\nclass DataSet:\n\t\"\"\"Class to represent some dataset: train, validation, test\"\"\"\n\t\n\t@property\n\tdef num_examples(self):\n\t\t\"\"\"Return qtty of examples in dataset\"\"\"\n\t\traise NotImplementedError\n\t\n\tdef next_batch(self, batch_size):\n\t\t\"\"\"Return batch of required size of data, labels\"\"\"\n\t\traise NotImplementedError\n\n\nclass ImagesDataSet(DataSet):\n\t\"\"\"Dataset for images that provide some often used methods\"\"\"\n\t\n\t@staticmethod\n\tdef measure_mean_and_std(images):\n\t\t# for every channel in image\n\t\tmeans = []\n\t\tstds = []\n\t\t# for every channel in image(assume this is last dimension)\n\t\tfor ch in range(images.shape[-1]):\n\t\t\tmeans.append(np.mean(images[:, :, :, ch]))\n\t\t\tstds.append(np.std(images[:, :, :, ch]))\n\t\treturn means, stds\n\t\n\t@staticmethod\n\tdef shuffle_images_and_labels(images, labels):\n\t\trand_indexes = np.random.permutation(images.shape[0])\n\t\tshuffled_images = images[rand_indexes]\n\t\tshuffled_labels = labels[rand_indexes]\n\t\treturn shuffled_images, shuffled_labels\n\t\n\t@staticmethod\n\tdef normalize_images(images, normalization_type, meanstd=None):\n\t\t\"\"\"\n\t\tArgs:\n\t\t\timages: numpy 4D array\n\t\t\tnormalization_type: `str`, available choices:\n\t\t\t\t- divide_255\n\t\t\t\t- divide_256\n\t\t\t\t- by_channels\n\t\t\tmeanstd\n\t\t\"\"\"\n\t\tif normalization_type is not None:\n\t\t\tif normalization_type == 'divide_255':\n\t\t\t\timages = images / 255\n\t\t\telif normalization_type == 'divide_256':\n\t\t\t\timages = images / 256\n\t\t\telif normalization_type == 'by_channels':\n\t\t\t\timages = images.astype('float64')\n\t\t\t\t# for every channel in image(assume this is last dimension)\n\t\t\t\tmeans, stds = meanstd\n\t\t\t\tfor i in range(images.shape[-1]):\n\t\t\t\t\timages[:, :, :, i] = ((images[:, :, :, i] - means[i]) / stds[i])\n\t\t\telse:\n\t\t\t\traise Exception('Unknown type of normalization')\n\t\treturn images\n\t\n\t\nclass DataProvider:\n\t_SEED = 88\n\t\n\t@property\n\tdef data_shape(self):\n\t\t\"\"\"Return shape as python list of one data entry\"\"\"\n\t\traise NotImplementedError\n\t\n\t@property\n\tdef n_classes(self):\n\t\t\"\"\"Return `int` of num classes\"\"\"\n\t\traise NotImplementedError\n\t\n\tdef labels_to_one_hot(self, labels):\n\t\t\"\"\"Convert 1D array of labels to one hot representation\n\t\t\n\t\tArgs:\n\t\t\tlabels: 1D numpy array\n\t\t\"\"\"\n\t\tnew_labels = np.zeros((labels.shape[0], self.n_classes))\n\t\tnew_labels[range(labels.shape[0]), labels] = np.ones(labels.shape)\n\t\treturn new_labels\n\t\n\t@staticmethod\n\tdef labels_from_one_hot(labels):\n\t\t\"\"\"Convert 2D array of labels to 1D class based representation\n\t\t\n\t\tArgs:\n\t\t\tlabels: 2D numpy array\n\t\t\"\"\"\n\t\treturn np.argmax(labels, axis=1)\n"
  },
  {
    "path": "src/aup/Proposer/eas/data_providers/cifar.py",
    "content": "import tempfile\nimport os\nimport pickle\nimport random\n\nimport numpy as np\n\nfrom ..data_providers.base_provider import ImagesDataSet, DataProvider\nfrom ..data_providers.downloader import download_data_url\n\n\ndef augment_image(image, pad):\n\t\"\"\"Perform zero padding, randomly crop image to original size,\n\tmaybe mirror horizontally\"\"\"\n\tinit_shape = image.shape\n\tnew_shape = [init_shape[0] + pad * 2,\n\t\t\t\t init_shape[1] + pad * 2,\n\t\t\t\t init_shape[2]]\n\tzeros_padded = np.zeros(new_shape)\n\tzeros_padded[pad:init_shape[0] + pad, pad:init_shape[1] + pad, :] = image\n\t# randomly crop to original size\n\tinit_x = np.random.randint(0, pad * 2)\n\tinit_y = np.random.randint(0, pad * 2)\n\tcropped = zeros_padded[\n\t\t\t  init_x: init_x + init_shape[0],\n\t\t\t  init_y: init_y + init_shape[1],\n\t\t\t  :]\n\tflip = random.getrandbits(1)\n\tif flip:\n\t\tcropped = cropped[:, ::-1, :]\n\treturn cropped\n\n\ndef augment_all_images(initial_images, pad=4):\n\tnew_images = np.zeros(initial_images.shape)\n\tfor i in range(initial_images.shape[0]):\n\t\tnew_images[i] = augment_image(initial_images[i], pad)\n\treturn new_images\n\n\nclass CifarDataSet(ImagesDataSet):\n\tdef __init__(self, images, labels, n_classes, shuffle, normalization, augmentation, meanstd):\n\t\t\"\"\"\n\t\tArgs:\n\t\t\timages: 4D numpy array\n\t\t\tlabels: 2D or 1D numpy array\n\t\t\tn_classes: `int`, number of cifar classes - 10 or 100\n\t\t\tshuffle: `str` or None\n\t\t\t\tNone: no any shuffling\n\t\t\t\tonce_prior_train: shuffle train data only once prior train\n\t\t\t\tevery_epoch: shuffle train data prior every epoch\n\t\t\tnormalization: `str` or None\n\t\t\t\tNone: no any normalization\n\t\t\t\tdivide_255: divide all pixels by 255\n\t\t\t\tdivide_256: divide all pixels by 256\n\t\t\t\tby_channels: substract mean of every chanel and divide each\n\t\t\t\t\tchanel data by it's standard deviation\n\t\t\taugmentation: `bool`\n\t\t\"\"\"\n\t\tif shuffle is None:\n\t\t\tself.shuffle_every_epoch = False\n\t\telif shuffle == 'once_prior_train':\n\t\t\tself.shuffle_every_epoch = False\n\t\t\timages, labels = self.shuffle_images_and_labels(images, labels)\n\t\telif shuffle == 'every_epoch':\n\t\t\tself.shuffle_every_epoch = True\n\t\telse:\n\t\t\traise Exception('Unknown type of shuffling')\n\t\tself._batch_counter, self.epoch_images, self.epoch_labels = 0, None, None\n\t\t\n\t\tself.images = images\n\t\tself.labels = labels\n\t\tself.n_classes = n_classes\n\t\tself.augmentation = augmentation\n\t\tself.normalization = normalization\n\t\tself.meanstd = meanstd\n\t\tself.images = self.normalize_images(images, self.normalization, self.meanstd)\n\t\tself.start_new_epoch()\n\t\n\tdef start_new_epoch(self):\n\t\tself._batch_counter = 0\n\t\tif self.shuffle_every_epoch:\n\t\t\timages, labels = self.shuffle_images_and_labels(\n\t\t\t\tself.images, self.labels)\n\t\telse:\n\t\t\timages, labels = self.images, self.labels\n\t\tif self.augmentation:\n\t\t\timages = augment_all_images(images, pad=4)\n\t\tself.epoch_images = images\n\t\tself.epoch_labels = labels\n\t\n\t@property\n\tdef num_examples(self):\n\t\treturn self.labels.shape[0]\n\t\n\tdef next_batch(self, batch_size):\n\t\tstart = self._batch_counter * batch_size\n\t\tend = (self._batch_counter + 1) * batch_size\n\t\tself._batch_counter += 1\n\t\timages_slice = self.epoch_images[start: end]\n\t\tlabels_slice = self.epoch_labels[start: end]\n\t\tif images_slice.shape[0] != batch_size:\n\t\t\tself.start_new_epoch()\n\t\t\treturn self.next_batch(batch_size)\n\t\telse:\n\t\t\treturn images_slice, labels_slice\n\n\nclass CifarDataProvider(DataProvider):\n\t\"\"\"Abstract class for cifar readers\"\"\"\n\tdef __init__(self, save_path=None, validation_size=None, shuffle=None, normalization=None,\n\t\t\t\t one_hot=True, **kwargs):\n\t\t\"\"\"\n\t\tArgs:\n\t\t\tsave_path: `str`\n\t\t\tvalidation_set: `bool`.\n\t\t\tvalidation_split: `float` or None\n\t\t\t\tfloat: chunk of `train set` will be marked as `validation set`.\n\t\t\t\tNone: if 'validation set' == True, `validation set` will be\n\t\t\t\t\tcopy of `test set`\n\t\t\tshuffle: `str` or None\n\t\t\t\tNone: no any shuffling\n\t\t\t\tonce_prior_train: shuffle train data only once prior train\n\t\t\t\tevery_epoch: shuffle train data prior every epoch\n\t\t\tnormalization: `str` or None\n\t\t\t\tNone: no any normalization\n\t\t\t\tdivide_255: divide all pixels by 255\n\t\t\t\tdivide_256: divide all pixels by 256\n\t\t\t\tby_channels: substract mean of every chanel and divide each\n\t\t\t\t\tchanel data by it's standard deviation\n\t\t\tone_hot: `bool`, return laels one hot encoded\n\t\t\"\"\"\n\t\tself._save_path = save_path\n\t\tself.one_hot = one_hot\n\t\tdownload_data_url(self.data_url, self.save_path)\n\t\ttrain_fnames, test_fnames = self.get_filenames(self.save_path)\n\t\t\n\t\t# add train and validations datasets\n\t\timages, labels = self.read_cifar(train_fnames)\n\t\ttrain_meanstd = ImagesDataSet.measure_mean_and_std(images)\n\t\tif validation_size is not None:\n\t\t\tnp.random.seed(DataProvider._SEED)\n\t\t\trand_indexes = np.random.permutation(images.shape[0])\n\t\t\tvalid_indexes = rand_indexes[:validation_size]\n\t\t\ttrain_indexes = rand_indexes[validation_size:]\n\t\t\tself.train = CifarDataSet(\n\t\t\t\timages=images[train_indexes], labels=labels[train_indexes],\n\t\t\t\tn_classes=self.n_classes, shuffle=shuffle,\n\t\t\t\tnormalization=normalization,\n\t\t\t\taugmentation=self.data_augmentation, meanstd=train_meanstd)\n\t\t\tself.validation = CifarDataSet(\n\t\t\t\timages=images[valid_indexes], labels=labels[valid_indexes],\n\t\t\t\tn_classes=self.n_classes, shuffle=None,\n\t\t\t\tnormalization=normalization,\n\t\t\t\taugmentation=False, meanstd=train_meanstd)\n\t\telse:\n\t\t\tself.train = CifarDataSet(\n\t\t\t\timages=images, labels=labels,\n\t\t\t\tn_classes=self.n_classes, shuffle=shuffle,\n\t\t\t\tnormalization=normalization,\n\t\t\t\taugmentation=self.data_augmentation, meanstd=train_meanstd)\n\t\t\n\t\t# add test set\n\t\timages, labels = self.read_cifar(test_fnames)\n\t\tself.test = CifarDataSet(\n\t\t\timages=images, labels=labels,\n\t\t\tshuffle=None, n_classes=self.n_classes,\n\t\t\tnormalization=normalization,\n\t\t\taugmentation=False, meanstd=train_meanstd)\n\t\t\n\t\tif validation_size is None:\n\t\t\tself.validation = self.test\n\t\n\t@property\n\tdef save_path(self):\n\t\tif self._save_path is None:\n\t\t\tself._save_path = os.path.join(\n\t\t\t\ttempfile.gettempdir(), 'cifar%d' % self.n_classes)\n\t\treturn self._save_path\n\t\n\t@property\n\tdef data_url(self):\n\t\t\"\"\"Return url for downloaded data depends on cifar class\"\"\"\n\t\tdata_url = ('http://www.cs.toronto.edu/'\n\t\t\t\t\t'~kriz/cifar-%d-python.tar.gz' % self.n_classes)\n\t\treturn data_url\n\t\n\t@property\n\tdef data_shape(self):\n\t\treturn 32, 32, 3\n\t\n\t@property\n\tdef n_classes(self):\n\t\treturn self._n_classes\n\t\n\tdef get_filenames(self, save_path):\n\t\t\"\"\"Return two lists of train and test filenames for dataset\"\"\"\n\t\traise NotImplementedError\n\t\n\tdef read_cifar(self, filenames):\n\t\tif self.n_classes == 10:\n\t\t\tlabels_key = b'labels'\n\t\telif self.n_classes == 100:\n\t\t\tlabels_key = b'fine_labels'\n\t\t\n\t\timages_res = []\n\t\tlabels_res = []\n\t\tfor fname in filenames:\n\t\t\twith open(fname, 'rb') as f:\n\t\t\t\timages_and_labels = pickle.load(f, encoding='bytes')\n\t\t\timages = images_and_labels[b'data']\n\t\t\timages = images.reshape(-1, 3, 32, 32)\n\t\t\timages = images.swapaxes(1, 3).swapaxes(1, 2)\n\t\t\timages_res.append(images)\n\t\t\tlabels_res.append(images_and_labels[labels_key])\n\t\timages_res = np.vstack(images_res)\n\t\tlabels_res = np.hstack(labels_res)\n\t\tif self.one_hot:\n\t\t\tlabels_res = self.labels_to_one_hot(labels_res)\n\t\treturn images_res, labels_res\n\n\nclass Cifar10DataProvider(CifarDataProvider):\n\t_n_classes = 10\n\tdata_augmentation = False\n\t\n\tdef get_filenames(self, save_path):\n\t\tsub_save_path = os.path.join(save_path, 'cifar-10-batches-py')\n\t\ttrain_filenames = [\n\t\t\tos.path.join(\n\t\t\t\tsub_save_path,\n\t\t\t\t'data_batch_%d' % i) for i in range(1, 6)]\n\t\ttest_filenames = [os.path.join(sub_save_path, 'test_batch')]\n\t\treturn train_filenames, test_filenames\n\n\nclass Cifar100DataProvider(CifarDataProvider):\n\t_n_classes = 100\n\tdata_augmentation = False\n\t\n\tdef get_filenames(self, save_path):\n\t\tsub_save_path = os.path.join(save_path, 'cifar-100-python')\n\t\ttrain_filenames = [os.path.join(sub_save_path, 'train')]\n\t\ttest_filenames = [os.path.join(sub_save_path, 'test')]\n\t\treturn train_filenames, test_filenames\n\n\nclass Cifar10AugmentedDataProvider(Cifar10DataProvider):\n\t_n_classes = 10\n\tdata_augmentation = True\n\n\nclass Cifar100AugmentedDataProvider(Cifar100DataProvider):\n\t_n_classes = 100\n\tdata_augmentation = True\n\n"
  },
  {
    "path": "src/aup/Proposer/eas/data_providers/downloader.py",
    "content": "import sys\nimport os\nfrom six.moves.urllib import request\nimport tarfile\nimport zipfile\n\n\ndef report_download_progress(count, block_size, total_size):\n\tpct_complete = float(count * block_size) / total_size\n\tmsg = '\\r {0:.1%} already downloaded'.format(pct_complete)\n\tsys.stdout.write(msg)\n\tsys.stdout.flush()\n\n\ndef download_data_url(url, download_dir):\n\tfilename = url.split('/')[-1]\n\tfile_path = os.path.join(download_dir, filename)\n\t\n\tif not os.path.exists(file_path):\n\t\tos.makedirs(download_dir, exist_ok=True)\n\t\t\n\t\tprint('Download %s to %s' % (url, file_path))\n\t\tfile_path, _ = request.urlretrieve(\n\t\t\turl=url,\n\t\t\tfilename=file_path,\n\t\t\treporthook=report_download_progress)\n\t\t\n\t\tprint('\\nExtracting files')\n\t\tif file_path.endswith('.zip'):\n\t\t\tzipfile.ZipFile(file=file_path, mode='r').extractall(download_dir)\n\t\telif file_path.endswith(('.tar.gz', '.tgz')):\n\t\t\ttarfile.open(name=file_path, mode='r:gz').extractall(download_dir)\n"
  },
  {
    "path": "src/aup/Proposer/eas/data_providers/svhn.py",
    "content": "import tempfile\nimport os\nimport scipy.io\n\nimport numpy as np\n\nfrom ..data_providers.base_provider import ImagesDataSet, DataProvider\nfrom ..data_providers.downloader import download_data_url\n\n\nclass SVHNDataSet(ImagesDataSet):\n\tn_classes = 10\n\t\n\tdef __init__(self, images, labels, shuffle, normalization):\n\t\t\"\"\"\n\t\tArgs:\n\t\t\timages: 4D numpy array\n\t\t\tlabels: 2D or 1D numpy array\n\t\t\tshuffle: `bool`, should shuffle data or not\n\t\t\tnormalization: `str` or None\n\t\t\t\tNone: no any normalization\n\t\t\t\tdivide_255: divide all pixels by 255\n\t\t\t\tdivide_256: divide all pixels by 256\n\t\t\t\tby_channels: substract mean of every chanel and divide each\n\t\t\t\t\tchanel data by it's standard deviation\n\t\t\"\"\"\n\t\tself._batch_counter, self.epoch_images, self.epoch_labels = 0, None, None\n\t\t\n\t\tself.shuffle = shuffle\n\t\tself.images = images\n\t\tself.labels = labels\n\t\tself.normalization = normalization\n\t\tself.start_new_epoch()\n\t\n\tdef start_new_epoch(self):\n\t\tself._batch_counter = 0\n\t\tif self.shuffle:\n\t\t\tself.epoch_images, self.epoch_labels = self.shuffle_images_and_labels(\n\t\t\t\tself.images, self.labels)\n\t\telse:\n\t\t\tself.epoch_images, self.epoch_labels = self.images, self.labels\n\t\n\t@property\n\tdef num_examples(self):\n\t\treturn self.labels.shape[0]\n\t\n\tdef next_batch(self, batch_size):\n\t\tstart = self._batch_counter * batch_size\n\t\tend = (self._batch_counter + 1) * batch_size\n\t\tself._batch_counter += 1\n\t\timages_slice = self.epoch_images[start: end]\n\t\tlabels_slice = self.epoch_labels[start: end]\n\t\t# due to memory error it should be done inside batch\n\t\tif self.normalization is not None:\n\t\t\timages_slice = self.normalize_images(\n\t\t\t\timages_slice, self.normalization)\n\t\tif images_slice.shape[0] != batch_size:\n\t\t\tself.start_new_epoch()\n\t\t\treturn self.next_batch(batch_size)\n\t\telse:\n\t\t\treturn images_slice, labels_slice\n\n\nclass SVHNDataProvider(DataProvider):\n\tdef __init__(self, save_path=None, validation_size=None, shuffle=False, normalization=None,\n\t\t\t\t one_hot=True, include_extra=True, **kwargs):\n\t\t\"\"\"\n\t\tArgs:\n\t\t\tsave_path: `str`\n\t\t\tvalidation_set: `bool`.\n\t\t\tvalidation_split: `int` or None\n\t\t\t\tfloat: chunk of `train set` will be marked as `validation set`.\n\t\t\t\tNone: if 'validation set' == True, `validation set` will be\n\t\t\t\t\tcopy of `test set`\n\t\t\tshuffle: `bool`, should shuffle data or not\n\t\t\tnormalization: `str` or None\n\t\t\t\tNone: no any normalization\n\t\t\t\tdivide_255: divide all pixels by 255\n\t\t\t\tdivide_256: divide all pixels by 256\n\t\t\t\tby_chanels: substract mean of every chanel and divide each\n\t\t\t\t\tchanel data by it's standart deviation\n\t\t\tone_hot: `bool`, return lasels one hot encoded\n\t\t\"\"\"\n\t\tself._save_path = save_path\n\t\ttrain_images = []\n\t\ttrain_labels = []\n\t\tif include_extra:\n\t\t\ttrain_data_src = ['train', 'extra']\n\t\telse:\n\t\t\ttrain_data_src = ['train']\n\t\tfor part in train_data_src:\n\t\t\timages, labels = self.get_images_and_labels(part, one_hot)\n\t\t\ttrain_images.append(images)\n\t\t\ttrain_labels.append(labels)\n\t\ttrain_images = np.vstack(train_images)\n\t\tif one_hot:\n\t\t\ttrain_labels = np.vstack(train_labels)\n\t\telse:\n\t\t\ttrain_labels = np.hstack(train_labels)\n\t\tif validation_size is not None:\n\t\t\tnp.random.seed(DataProvider._SEED)\n\t\t\trand_indexes = np.random.permutation(train_images.shape[0])\n\t\t\tvalid_indexes = rand_indexes[:validation_size]\n\t\t\ttrain_indexes = rand_indexes[validation_size:]\n\t\t\tvalid_images, valid_labels = train_images[valid_indexes], train_labels[valid_indexes]\n\t\t\ttrain_images, train_labels = train_images[train_indexes], train_labels[train_indexes]\n\t\t\tself.validation = SVHNDataSet(\n\t\t\t\tvalid_images, valid_labels, False, normalization)\n\t\t\n\t\tself.train = SVHNDataSet(\n\t\t\ttrain_images, train_labels, shuffle, normalization)\n\t\t\n\t\ttest_images, test_labels = self.get_images_and_labels('test', one_hot)\n\t\tself.test = SVHNDataSet(test_images, test_labels, False, normalization)\n\t\t\n\t\tif validation_size is None:\n\t\t\tself.validation = self.test\n\t\n\tdef get_images_and_labels(self, name_part, one_hot=False):\n\t\turl = self.data_url + name_part + '_32x32.mat'\n\t\tdownload_data_url(url, self.save_path)\n\t\tfilename = os.path.join(self.save_path, name_part + '_32x32.mat')\n\t\tdata = scipy.io.loadmat(filename)\n\t\timages = data['X'].transpose(3, 0, 1, 2)\n\t\tlabels = data['y'].reshape((-1))\n\t\tlabels[labels == 10] = 0\n\t\tif one_hot:\n\t\t\tlabels = self.labels_to_one_hot(labels)\n\t\treturn images, labels\n\t\n\t@property\n\tdef n_classes(self):\n\t\treturn 10\n\t\n\t@property\n\tdef save_path(self):\n\t\tif self._save_path is None:\n\t\t\tself._save_path = os.path.join(tempfile.gettempdir(), 'svhn')\n\t\treturn self._save_path\n\t\n\t@property\n\tdef data_url(self):\n\t\treturn 'http://ufldl.stanford.edu/housenumbers/'\n\t\n\t@property\n\tdef data_shape(self):\n\t\treturn 32, 32, 3\n"
  },
  {
    "path": "src/aup/Proposer/eas/data_providers/utils.py",
    "content": "from ..data_providers.cifar import Cifar10DataProvider, Cifar100DataProvider, \\\n\tCifar10AugmentedDataProvider, Cifar100AugmentedDataProvider\nfrom ..data_providers.svhn import SVHNDataProvider\n\n\ndef get_data_provider_by_name(name, train_params):\n\t\"\"\"Return required data provider class\"\"\"\n\tif name == 'C10':\n\t\treturn Cifar10DataProvider(**train_params)\n\tif name == 'C10+':\n\t\treturn Cifar10AugmentedDataProvider(**train_params)\n\tif name == 'C100':\n\t\treturn Cifar100DataProvider(**train_params)\n\tif name == 'C100+':\n\t\treturn Cifar100AugmentedDataProvider(**train_params)\n\tif name == 'SVHN':\n\t\treturn SVHNDataProvider(**train_params)\n\telse:\n\t\tprint('Sorry, data provider for `%s` dataset '\n\t\t\t  'was not implemented yet' % name)\n\t\texit()\n"
  },
  {
    "path": "src/aup/Proposer/eas/expdir_monitor/__init__.py",
    "content": ""
  },
  {
    "path": "src/aup/Proposer/eas/expdir_monitor/arch_manager.py",
    "content": "\"\"\"\nManage the folder for architecture search\n\"\"\"\nimport os\nimport subprocess\nimport json\nimport pickle\nimport numpy as np\nfrom ..data_providers.utils import get_data_provider_by_name\nfrom .expdir_monitor import ExpdirMonitor\nfrom ..expdir_monitor import distributed\n\n\nclass NetPool:\n\tdef __init__(self, path):\n\t\tself.path = os.path.realpath(path)\n\t\tos.makedirs(self.path, exist_ok=True)\n\t\t\n\t\tself.net_str2id = {}\n\t\tself.net_id2val = {}\n\t\tself.running_set = {'stone': 0}\n\t\t\n\t\tself.on_load()\n\t\n\t@property\n\tdef str2id_path(self):\n\t\treturn '%s/net.str2id' % self.path\n\t\n\t@property\n\tdef id2val_path(self):\n\t\treturn '%s/net.id2val' % self.path\n\t\n\tdef on_load(self):\n\t\tif os.path.isfile(self.str2id_path):\n\t\t\tself.net_str2id = json.load(open(self.str2id_path, 'r'))\n\t\tif os.path.isfile(self.id2val_path):\n\t\t\tnet_id2val = json.load(open(self.id2val_path, 'r'))\n\t\t\tfor key in net_id2val:\n\t\t\t\tself.net_id2val[int(key)] = net_id2val[key]\n\t\tto_rename = []\n\t\tfor folder in os.listdir(self.path):\n\t\t\tif folder.startswith('#'):\n\t\t\t\tout_file = '%s/%s/output' % (self.path, folder)\n\t\t\t\tif not os.path.isfile(out_file):\n\t\t\t\t\tsubprocess.run(['rm', '-rf', os.path.join(self.path, folder)])\n\t\t\t\telse:\n\t\t\t\t\tnet_str = json.load(open('%s/%s/net.str' % (self.path, folder), 'r'))['net_str']\n\t\t\t\t\tif self.net_str2id.get(net_str) is None:\n\t\t\t\t\t\trecord = json.load(open(out_file, 'r'))\n\t\t\t\t\t\tnet_val = float(record['valid_acc'])\n\t\t\t\t\t\tnet_id = self.add_net(net_str, net_val)\n\t\t\t\t\t\tfolder_path = self.get_net_folder(net_id)\n\t\t\t\t\telse:\n\t\t\t\t\t\tnet_id = self.net_str2id[net_str]\n\t\t\t\t\t\tfolder_path = self.get_net_folder(net_id)\n\t\t\t\t\tif folder_path != folder:\n\t\t\t\t\t\tto_rename.append([folder, folder_path])\n\t\tfor src_folder, dst_folder in to_rename:\n\t\t\tsrc_folder = os.path.join(self.path, src_folder)\n\t\t\tdst_folder = os.path.join(self.path, dst_folder)\n\t\t\tos.rename(src_folder, dst_folder)\n\t\n\tdef add_net(self, net_str, net_val):\n\t\tassert self.net_str2id.get(net_str) is None, '%s exists' % net_str\n\t\tnet_id = net_str.__hash__()\n\t\twhile net_id in self.net_id2val:\n\t\t\tnet_id += 1\n\t\tself.net_str2id[net_str] = net_id\n\t\tself.net_id2val[net_id] = net_val\n\t\treturn net_id\n\t\n\tdef get_net_val(self, net_str):\n\t\tnet_id = self.net_str2id.get(net_str)\n\t\tif net_id is None:\n\t\t\tif net_str in self.running_set:\n\t\t\t\trunning_id = self.running_set[net_str]\n\t\t\telse:\n\t\t\t\trunning_id = net_str.__hash__()\n\t\t\t\twhile running_id in self.running_set.values():\n\t\t\t\t\trunning_id += 1\n\t\t\t\tself.running_set[net_str] = running_id\n\t\t\tnet_folder = '%s/#Running_%s' % (self.path, running_id)\n\t\t\treturn None, net_folder\n\t\telse:\n\t\t\tnet_val = self.net_id2val[net_id]\n\t\t\tnet_folder = '%s/%s' % (self.path, self.get_net_folder(net_id))\n\t\t\treturn net_val, net_folder\n\t\n\tdef on_running_finished(self, net_str, net_folder, net_val):\n\t\tnet_id = self.add_net(net_str, net_val)\n\t\t# folder_path = self.get_net_folder(net_id)\n\t\t# self.running_set.pop(net_str)\n\t\t# os.rename(net_folder, os.path.join(self.path, folder_path))\n\t\n\tdef save(self):\n\t\tjson.dump(self.net_str2id, open(self.str2id_path, 'w'), indent=4)\n\t\tjson.dump(self.net_id2val, open(self.id2val_path, 'w'), indent=4)\n\t\n\t@staticmethod\n\tdef get_net_folder(net_id):\n\t\treturn '#%s' % net_id\n\t\t\n\nclass ArchManager:\n\tdef __init__(self, start_net_path, arch_path, net_pool_path):\n\t\tself.start_net_monitor = ExpdirMonitor(start_net_path)\n\n\t\tself.start_net_config, self.data_provider = None, None\n\t\tself.net_pool = NetPool(net_pool_path)\n\t\t\n\t\tself.arch_path = os.path.realpath(arch_path)\n\t\tos.makedirs(self.arch_path, exist_ok=True)\n\t\t\n\t\tself.episode = 0\n\t\tself.net_val_wrt_episode = []\n\t\t\n\t\tself.val_log_writer = open(self.val_logs_path, 'a')\n\t\tself.net_log_writer = open(self.net_logs_path, 'a')\n\t\tself.on_load()\n\t\n\t@property\n\tdef meta_controller_path(self):\n\t\treturn '%s/controller' % self.arch_path\n\n\t@property\n\tdef val_logs_path(self):\n\t\treturn '%s/val.log' % self.arch_path\n\t\n\t@property\n\tdef net_logs_path(self):\n\t\treturn '%s/net.log' % self.arch_path\n\t\n\tdef on_load(self):\n\t\tif os.path.isfile(self.val_logs_path):\n\t\t\twith open(self.val_logs_path, 'r') as fin:\n\t\t\t\tfor line in fin.readlines():\n\t\t\t\t\tline = line[:-1]\n\t\t\t\t\tself.episode += 1\n\t\t\t\t\tnet_val_list = line.split('\\t')[4:]\n\t\t\t\t\tnet_val_list = [float(net_val) for net_val in net_val_list]\n\t\t\t\t\tself.net_val_wrt_episode.append(net_val_list)\n\t\t\t\t\n\tdef get_start_net(self, copy=False):\n\t\tif self.start_net_config is None:\n\t\t\t# prepare start net\n\t\t\tprint('Load start net from %s' % self.start_net_monitor.expdir)\n\t\t\tinit = self.start_net_monitor.load_init()\n\t\t\tdataset = 'C10+' if init is None else init.get('dataset', 'C10+')\n\t\t\trun_config = self.start_net_monitor.load_run_config(print_info=True, dataset=dataset)\n\t\t\trun_config.renew_logs = False\n\n\t\t\tnet_config, model_name = self.start_net_monitor.load_net_config(init, print_info=True)\n\t\t\tself.data_provider = get_data_provider_by_name(run_config.dataset, run_config.get_config())\n\t\t\tself.start_net_config = [net_config, run_config, model_name]\n\t\tif copy:\n\t\t\tnet_config, run_config, model_name = self.start_net_config[:3]\n\t\t\treturn [\n\t\t\t\tnet_config.copy(), run_config.copy(), model_name\n\t\t\t]\n\t\telse:\n\t\t\treturn self.start_net_config\n\t\n\t@staticmethod\n\tdef prepare_folder_for_valid(net_str, net_config, run_config, exp_dir):\n\t\tos.makedirs(exp_dir, exist_ok=True)\n\t\tmonitor = ExpdirMonitor(exp_dir)\n\t\tjson.dump(net_config.get_config(), open(monitor.net_config_path, 'w'), indent=4)\n\t\tjson.dump(run_config.get_config(), open(monitor.run_config_path, 'w'), indent=4)\n\t\tpickle.dump(net_config.renew_init(None), open(monitor.init, 'wb'))\n\t\tjson.dump({'net_str': net_str}, open(os.path.join(monitor.expdir, 'net.str'), 'w'), indent=4)\n\t\n\tdef get_net_tasks(self, net_str_list, net_configs, run_configs):\n\t\tnet_val_list = [-1] * len(net_str_list)\n\t\t\n\t\tto_run = {}\n\t\tfor _i, net_str in enumerate(net_str_list):\n\t\t\tnet_val, net_folder = self.net_pool.get_net_val(net_str)\n\t\t\tif net_val is None:\n\t\t\t\tif net_folder in to_run: to_run[net_folder] += [_i]\n\t\t\t\telse:\n\t\t\t\t\tto_run[net_folder] = [_i]\n\t\t\t\t\tself.prepare_folder_for_valid(net_str, net_configs[_i], run_configs[_i], net_folder)\n\t\t\telse:\n\t\t\t\tnet_val_list[_i] = net_val\n\t\t\n\t\ttask_list = [[net_folder, to_run[net_folder]] for net_folder in to_run]\n\t\treturn task_list\n\t\t#distributed.run(task_list)\n\t\t\"\"\"episode_total_running_time = 0\n\t\tfor net_folder, idx, net_val in task_list:\n\t\t\tnet_str = net_str_list[idx[0]]\n\t\t\tnet_val, running_time = net_val\n\t\t\tepisode_total_running_time += running_time\n\t\t\tself.net_pool.on_running_finished(net_str, net_folder, net_val)\n\t\t\tfor _id in idx:\n\t\t\t\tnet_val_list[_id] = net_val\n\t\tself.log_nets(net_str_list, episode_total_running_time)\n\t\tself.net_pool.save()\n\t\treturn net_val_list\"\"\"\n\t\n\tdef val2reward(self, net_val_list, func=None):\n\t\trewards = []\n\t\tfor net_val in net_val_list:\n\t\t\tif func is None:\n\t\t\t\trewards.append(net_val)\n\t\t\telif func == 'tan':\n\t\t\t\treward = np.tan(net_val * np.pi / 2)\n\t\t\t\trewards.append(reward)\n\t\t\telse:\n\t\t\t\traise NotImplementedError\n\t\treturn rewards\n\t\t\n\tdef reward(self, net_val_list, reward_config):\n\t\trewards = self.val2reward(net_val_list, reward_config.get('func'))\n\t\trewards = np.array(rewards)\n\t\t# baseline function\n\t\tdecay = reward_config['decay']\n\t\tif 'exp_moving_avg' not in self.__dict__:\n\t\t\tself.exp_moving_avg = 0\n\t\t\tfor old_net_val_list in self.net_val_wrt_episode[:-1]:\n\t\t\t\told_rewards = self.val2reward(old_net_val_list, reward_config.get('func'))\n\t\t\t\tself.exp_moving_avg += decay * (np.mean(old_rewards) - self.exp_moving_avg)\n\t\tself.exp_moving_avg += decay * (np.mean(rewards) - self.exp_moving_avg)\n\t\treturn rewards - self.exp_moving_avg\n\t\n\tdef log_nets(self, net_str_list, running_time, print_info=True):\n\t\tnet_id_list = [self.net_pool.net_str2id[net_str] for net_str in net_str_list]\n\t\tnets_num = len(net_id_list)\n\t\tnew_nets_num = len(set(net_id_list))\n\t\t\n\t\tnet_val_list = [self.net_pool.net_id2val[net_id] for net_id in net_id_list]\n\t\tmean_val, max_val = np.mean(net_val_list), np.max(net_val_list)\n\t\tself.net_log_writer.write('%d.\\t nets=%d (total=%d)\\t%s\\n' % (self.episode, new_nets_num, nets_num,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'\\t'.join([str(net_id) for net_id in net_id_list])))\n\t\tlog_str = '%d.\\t nets=%d (total=%d)\\t mean_val=%s (max_val=%s)\\t using %s(min)\\t%s' % \\\n\t\t\t\t  (self.episode + 1, new_nets_num, nets_num, mean_val, max_val, running_time,\n\t\t\t\t   '\\t'.join([str(net_val) for net_val in net_val_list]))\n\t\tif print_info:\n\t\t\tprint(log_str)\n\t\tself.val_log_writer.write(log_str + '\\n')\n\t\t\n\t\tself.val_log_writer.flush()\n\t\tself.net_log_writer.flush()\n\t\tself.net_val_wrt_episode.append(net_val_list)\n\t\tself.episode += 1\n"
  },
  {
    "path": "src/aup/Proposer/eas/expdir_monitor/distributed.py",
    "content": "from subprocess import Popen, PIPE\nfrom threading import Thread, Lock\nfrom queue import Queue\nfrom time import sleep\nfrom sys import stderr\nimport re\nimport json\n#import shlex\n#import ipdb\n#import os\n#import signal\n\nmax_running_machine = 2\n\n_max_used_mem = 0.3\n_max_used_gpu = 0.3\nconfig_file = 'server_config'\n\n\nclass GpuChecker:\n\tdef __init__(self, nvidia_getter, gpuid):\n\t\tself.nvidia_getter = nvidia_getter\n\t\tself.gpuid = gpuid\n\t\n\tdef state_parser(self, state_str):\n\t\tresult = []\n\t\tfor line in state_str.split('\\n'):\n\t\t\t# .*?(\\d*)C.*\\|(.*?)MiB.*?/(.*?)MiB.*?\\|.*?(\\d*)\\%\n\t\t\t# .*?(\\d*)C.*\\|(.*?)MiB.*?/(.*?)MiB.*?\\|.*?(\\d*)%\n\t\t\tpattern = re.search('.*?(\\d*)C.*\\|(.*?)MiB.*?/(.*?)MiB.*?\\|.*?(\\d*)%', line)\n\t\t\tif pattern is not None:\n\t\t\t\tresult.append([int(x) for x in pattern.groups()])\n\t\tif self.gpuid >= len(result):\n\t\t\treturn None\n\t\t# assert self.gpuid < len(result), 'Parsing error or not enough gpus.'\n\t\treturn result[self.gpuid]\n\t\n\tdef instance_available(self, state_str):\n\t\tparse_result = self.state_parser(state_str)\n\t\tif parse_result is None: return False\n\t\t_, used_mem, total_mem, occupation = parse_result\n\t\toccupation /= 100\n\t\treturn used_mem / total_mem < _max_used_mem and occupation < _max_used_gpu\n\t\n\tdef check(self):\n\t\t_check_times = 3\n\t\ttry:\n\t\t\tfor _i in range(_check_times):\n\t\t\t\tassert self.instance_available(self.nvidia_getter())\n\t\t\t\tif _i < _check_times - 1:\n\t\t\t\t\tsleep(0.5)\n\t\texcept AssertionError:\n\t\t\treturn False\n\t\treturn True\n\t\n\tdef is_on(self):\n\t\ttry:\n\t\t\tparse_result = self.state_parser(self.nvidia_getter())\n\t\t\tif parse_result is None:\n\t\t\t\treturn False\n\t\t\telse:\n\t\t\t\treturn True\n\t\texcept Exception:\n\t\t\treturn False\n\n\nclass RemoteController:\n\tdef __init__(self, remote, gpuid, executive):\n\t\tself.remote = remote\n\t\tself.gpuid = gpuid\n\t\tself.executive = executive\n\t\t\n\t\tself.gpu_checker = GpuChecker(lambda: self.run('nvidia-smi'), self.gpuid)\n\t\t\n\t\tself._lock = Lock()\n\t\tself._occupied = False\n\t\tself._on_running = None\n\t\tself.proc_pid = -1\n\t\n\t@property\n\tdef occupied(self):\n\t\t#print(\"Here Check 4 yy\")\n\t\twith self._lock:\n\t\t\treturn self._occupied\n\t\n\t@occupied.setter\n\tdef occupied(self, val):\n\t\tassert isinstance(val, bool), 'Occupied must be True or False, but {} received.'.format(val)\n\t\tprint(\"Here Check 3 yy\")\n\t\twith self._lock:\n\t\t\tself._occupied = val\n\t\n\tdef run(self, cmd, stdin=None):\n\t\tproc = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE,\n\t\t\t\t\t universal_newlines=True)\n\t\t#print(\"**********************Process id****************\")\n\t\t#print(proc.pid)\n\t\tself.proc_pid = proc.pid\n\t\treturn proc.communicate(input=stdin)[0]\n\t\n\t@property\n\tdef gpu_state(self):\n\t\treturn self.gpu_checker.check()\n\t\n\t@property\n\tdef exe_cmd(self):\n\t\treturn 'CUDA_VISIBLE_DEVICES={gpuid} python3 {executive}'.format(\n\t\t\texecutive=self.executive,\n\t\t\tgpuid=self.gpuid\n\t\t)\n\t\n\tdef check_on(self, queue):\n\t\t#print(\"Here Check 1 yy\")\n\t\tif not self.gpu_checker.is_on():\n\t\t\tprint(\"Here Check 2\")\n\t\t\tif self._on_running is not None:\n\t\t\t\tqueue.put(self._on_running)\n\t\t\t\tself._on_running = None\n\t\t\t\tprint('Remote Error.')\n\t\t\treturn False\n\t\treturn True\n\t\n\tdef remote_executer(self, idx, expdir, queue):\n\t\tself.occupied = True\n\t\tcmd = self.exe_cmd\n\t\tprint('{}: {} {}'.format(self.remote, cmd, expdir), file=stderr)\n\t\tresult = self.run(cmd, stdin=expdir)\n\t\t#ipdb.set_trace()\n\t\ttry:\n\t\t\tresult = str(result).split('\\n')\n\t\t\tused_time = result[-3]\n\t\t\tresult = result[-2]\n\t\t\tassert result.startswith('valid performance: ') and used_time.startswith('running time: '), \\\n\t\t\t\t'Invalid return: %s, %s' % (used_time, result)\n\t\t\tused_time = used_time[len('running time: '):]\n\t\t\tused_time = float(used_time) / 60  # minutes\n\t\t\tresult = result[len('valid performance: '):]\n\t\t\tprint(\"**********************Putting queue*******************\")\n\t\t\tprint(queue.qsize())\n\t\t\tresult = float(result)\n\t\t\tqueue.put([idx, (result, used_time)])\n\t\t\tprint(\"**********************Printing queue*******************\")\n\t\t\tprint(queue.qsize())\n\t\t\tprint('{}th task: {} is successfully executed, result is {}, using {} min.'.\n\t\t\t\t  format(idx, expdir, result, used_time), file=stderr)\n\t\texcept Exception:\n\t\t\tqueue.put([idx, expdir])\n\t\t\tprint('{}th task: {} fails, with return: %s.'.format(idx, expdir, result), file=stderr)\n\n\t\t#os.kill(pid,signal.SIGKILL)\n\n\t\tself.occupied = False\n\t\tself.check_on(queue)\n\t\n\tdef execute(self, idx, expdir, queue):\n\t\tif self.occupied or not self.gpu_state:\n\t\t\tqueue.put([idx, expdir])\n\t\t\tprint(\"*********************Queue Waiting*******************\")\n\t\t\tprint(queue.qsize())\n\t\telse:\n\t\t\tself._on_running = [idx, expdir]\n\t\t\tthr = Thread(target=self.remote_executer, args=(idx, expdir, queue))\n\t\t\tthr.start()\n\t\t\tself._on_running = None\n\t\t\tprint(\"*********************Queue Starting*******************\")\n\t\t\tprint(queue.qsize())\n\n\nclass ClusterController:\n\tdef __init__(self, config_list):\n\t\t#ipdb.set_trace()\n\t\tself.cluster = [RemoteController(*config) for config in config_list]\n\t\tself._pt = 0\n\t\n\tdef choice(self, queue):\n\t\tremotes_available, occupy_num = self.get_available(queue)\n\t\tprint(\"Here Check 5 yy\")\n\t\twhile occupy_num >= max_running_machine:\n\t\t\tsleep(0.5)\n\t\t\tremotes_available, occupy_num = self.get_available(queue)\n\t\twhile not remotes_available[self._pt]:\n\t\t\tself._pt = (self._pt + 1) % len(self.cluster)\n\t\tprint(\"Here Check 6 yy\")\n\t\tchoose_remote = self.cluster[self._pt]\n\t\tself._pt = (self._pt + 1) % len(self.cluster)\n\t\treturn choose_remote\n\t\t# return random.choice(self.cluster)\n\t\n\tdef get_available(self, queue):\n\t\tremotes_available = [False] * len(self.cluster)\n\t\toccupy_num = len(self.cluster)\n\t\t#print(\"Here Check 7 yy\")\n\t\tfor _i, remote in enumerate(self.cluster):\n\t\t\t#print(\"Here Check 8 yy\")\n\t\t\tif not remote.check_on(queue):\n\t\t\t\toccupy_num -= 1\n\t\t\t\tcontinue\n\t\t\tif not remote.occupied:\n\t\t\t\tremotes_available[_i] = True\n\t\t\t\toccupy_num -= 1\n\n\t\treturn remotes_available, occupy_num\n\t\n\tdef execute(self, idx, expdir, queue):\n\t\tprint(\"Here Check 9 yy\")\n\t\tself.choice(queue).execute(idx, expdir, queue)\n\n\ndef run_tasks(config_list, expdir_list):\n\tcontroller = ClusterController(config_list)\n\tresult_list = [None for _ in expdir_list]\n\t\n\tqueue = Queue()\n\tfor idx, expdir in enumerate(expdir_list):\n\t\tqueue.put([idx, expdir])\n\tprint(\"Here Check 10 yy\")\n\tremained = len(result_list)\n\tprint(remained)\n\twhile remained > 0:\n\t\tidx, val = queue.get()\n\t\tprint(idx)\n\t\tprint(val)\n\t\tprint(\"Here Check 11 yy\")\n\t\tif isinstance(val, str):\n\t\t\t# expdir, need to execute\n\t\t\tprint(\"Here Check 14 yy\")\n\t\t\tcontroller.execute(idx, val, queue)\n\t\t\tprint(\"Here Check 15 yy\")\n\t\telif isinstance(val, tuple):\n\t\t\t# result, need to be put in result_list\n\t\t\tresult_list[idx] = val\n\t\t\tremained -= 1\n\t\t\tprint(\"Here Check 16 yy\")\n\treturn result_list\n\n\ndef run(task_list):\n\twith open(config_file, 'r') as f:\n\t\tconfig_list = json.load(f)\n\tprint(\"Here Check 12 yy\")\n\texpdir_list = [expdir for expdir, *_ in task_list]\n\tresult_list = run_tasks(config_list, expdir_list)\n\tfor idx, _ in enumerate(task_list):\n\t\ttask_list[idx].append(result_list[idx])\n\t\tprint(\"Here Check 13 yy\")\n"
  },
  {
    "path": "src/aup/Proposer/eas/expdir_monitor/expdir_monitor.py",
    "content": "import json\nimport os\nimport subprocess\nfrom ..models.utils import RunConfig, get_model_config_by_name, get_model_by_name\nfrom ..data_providers.utils import get_data_provider_by_name\nimport pickle\n\n\nclass ExpdirMonitor:\n\tdef __init__(self, expdir):\n\t\tself.expdir = os.path.realpath(expdir)\n\t\tos.makedirs(self.expdir, exist_ok=True)\n\n\t@property\n\tdef logs(self): return '%s/logs' % self.expdir\n\t\n\t@property\n\tdef checkpoint(self): return '%s/checkpoint' % self.expdir\n\t\n\t@property\n\tdef snapshot(self): return '%s/snapshot' % self.expdir\n\t\n\t@property\n\tdef output(self): return '%s/output' % self.expdir\n\t\n\t@property\n\tdef init(self): return '%s/init' % self.expdir\n\t\n\t@property\n\tdef run_config_path(self): return '%s/run.config' % self.expdir\n\t\n\t@property\n\tdef net_config_path(self): return '%s/net.config' % self.expdir\n\t\n\tdef load_run_config(self, print_info=False, dataset='C10+'):\n\t\tif os.path.isfile(self.run_config_path):\n\t\t\trun_config = json.load(open(self.run_config_path, 'r'))\n\t\telse:\n\t\t\tprint('Use Default Run Config for %s' % dataset)\n\t\t\trun_config = RunConfig.get_default_run_config(dataset)\n\t\tif print_info:\n\t\t\tprint('Run config:')\n\t\t\tfor k, v in run_config.items():\n\t\t\t\tprint('\\t%s: %s' % (k, v))\n\t\treturn RunConfig(**run_config)\n\t\n\tdef load_init(self):\n\t\tinit_path = '%s/init' % self.expdir\n\t\tif os.path.isfile(init_path):\n\t\t\treturn pickle.load(open(self.init, 'rb'))\n\t\telse:\n\t\t\treturn None\n\n\tdef load_net_config(self, init, print_info=False):\n\t\tassert os.path.isfile(self.net_config_path), \\\n\t\t\t'Net configs do not exist in the given expdir <%s>' % self.expdir\n\t\tnet_config_json = json.load(open(self.net_config_path, 'r'))\n\t\tnet_config = get_model_config_by_name(net_config_json['name'])()\n\t\tnet_config.set_net_from_config(net_config_json, init=init, print_info=print_info)\n\t\treturn net_config, net_config_json['name']\n\t\n\tdef run(self, pure=True, restore=False, test=False, valid=False, valid_size=-1):\n\t\tif not restore:\n\t\t\t_clear_files = ['logs', 'checkpoint', 'snapshot', 'output']\n\t\t\tfor file in _clear_files:\n\t\t\t\tsubprocess.run(['rm', '-rf', os.path.join(self.expdir, file)])\n\t\tinit = self.load_init()\n\t\tdataset = 'C10+' if init is None else init.get('dataset', 'C10+')\n\t\trun_config = self.load_run_config(print_info=(not pure), dataset=dataset)\n\t\trun_config.renew_logs = False\n\t\tif valid_size > 0:\n\t\t\trun_config.validation_size = valid_size\n\t\t\n\t\tdata_provider = get_data_provider_by_name(run_config.dataset, run_config.get_config())\n\t\tnet_config, model_name = self.load_net_config(init, print_info=(not pure))\n\t\tmodel = get_model_by_name(model_name)(self.expdir, data_provider, run_config, net_config, pure=pure)\n\t\tstart_epoch = 1\n\t\tif restore:\n\t\t\tmodel.load_model()\n\t\t\tepoch_info_file = '%s/checkpoint/epoch.info' % self.expdir\n\t\t\tif os.path.isfile(epoch_info_file):\n\t\t\t\tstart_epoch = json.load(open(epoch_info_file, 'r'))['epoch']\n\t\t\t\tif not pure:\n\t\t\t\t\tprint('start epoch: %d' % start_epoch)\n\t\tif test:\n\t\t\tprint('Testing...')\n\t\t\tloss, accuracy = model.test(data_provider.test, batch_size=200)\n\t\t\tprint('mean cross_entropy: %f, mean accuracy: %f' % (loss, accuracy))\n\t\t\tjson.dump({'test_loss': '%s' % loss, 'test_acc': '%s' % accuracy}, open(self.output, 'w'))\n\t\telif valid:\n\t\t\tprint('validating...')\n\t\t\tloss, accuracy = model.test(data_provider.validation, batch_size=200)\n\t\t\tprint('mean cross_entropy: %f, mean accuracy: %f' % (loss, accuracy))\n\t\t\tjson.dump({'valid_loss': '%s' % loss, 'valid_acc': '%s' % accuracy}, open(self.output, 'w'))\n\t\telif pure:\n\t\t\tmodel.pure_train()\n\t\t\tloss, accuracy = model.test(data_provider.validation, batch_size=200)\n\t\t\tjson.dump({'valid_loss': '%s' % loss, 'valid_acc': '%s' % accuracy}, open(self.output, 'w'))\n\t\t\tmodel.save_init(self.snapshot, print_info=(not pure))\n\t\t\tmodel.save_config(self.expdir, print_info=(not pure))\n\t\telse:\n\t\t\t# train the model\n\t\t\tprint('Data provider train images: ', data_provider.train.num_examples)\n\t\t\tmodel.train_all_epochs(start_epoch)\n\t\t\tprint('Data provider test images: ', data_provider.test.num_examples)\n\t\t\tprint('Testing...')\n\t\t\tloss, accuracy = model.test(data_provider.test, batch_size=200)\n\t\t\tprint('mean cross_entropy: %f, mean accuracy: %f' % (loss, accuracy))\n\t\t\tjson.dump({'test_loss': '%s' % loss, 'test_acc': '%s' % accuracy}, open(self.output, 'w'))\n\t\t\tmodel.save_init(self.snapshot, print_info=(not pure))\n\t\t\tmodel.save_config(self.expdir, print_info=(not pure))\n\t\treturn accuracy\n"
  },
  {
    "path": "src/aup/Proposer/eas/main.py",
    "content": "from .expdir_monitor.expdir_monitor import ExpdirMonitor\nimport argparse\n\n\n\"\"\"\nGiven a expdir, run the exp\n\"\"\"\nparser = argparse.ArgumentParser()\nparser.add_argument(\n\t'--test', action='store_true',\n\thelp='Test model for required dataset if pretrained model exists.'\n)\nparser.add_argument(\n\t'--valid', action='store_true',\n)\nparser.add_argument(\n\t'--valid_size', type=int, default=-1,\n)\nparser.add_argument('--path', type=str)\nparser.add_argument('--restore', action='store_true')\nargs = parser.parse_args()\nexpdir_monitor = ExpdirMonitor(args.path)\ntest_performance = expdir_monitor.run(pure=False, restore=args.restore, test=args.test, valid=args.valid,\n                                      valid_size=args.valid_size)\nif args.valid:\n\tprint('validation performance: %s' % test_performance)\nelse:\n\tprint('test performance: %s' % test_performance)\n"
  },
  {
    "path": "src/aup/Proposer/eas/meta_controller/__init__.py",
    "content": ""
  },
  {
    "path": "src/aup/Proposer/eas/meta_controller/base_controller.py",
    "content": "import tensorflow as tf\nfrom tensorflow.contrib import rnn\nfrom tensorflow.python.ops import array_ops\nfrom ..models.basic_model import BasicModel\nimport numpy as np\nimport os\n\n\nclass BaseController:\n\tdef __init__(self, path):\n\t\tself.path = os.path.realpath(path)\n\t\tos.makedirs(self.path, exist_ok=True)\n\t\t\n\tdef load(self):\n\t\traise NotImplementedError\n\t\n\tdef save(self, global_step=None):\n\t\traise NotImplementedError\n\t\n\t@property\n\tdef save_path(self):\n\t\treturn '%s/model.ckpt' % self.path\n\t\n\t@property\n\tdef logs_path(self):\n\t\treturn '%s/logs' % self.path\n\n\nclass Vocabulary:\n\tdef __init__(self, token_list):\n\t\ttoken_list = ['PAD'] + token_list\n\t\tself.vocab = {}\n\t\tfor idx, token in enumerate(token_list):\n\t\t\tself.vocab[token] = idx\n\t\t\tself.vocab[idx] = token\n\t\n\t@property\n\tdef size(self):\n\t\treturn len(self.vocab) // 2\n\t\n\tdef get_code(self, token_list):\n\t\treturn [self.vocab[token] for token in token_list]\n\t\n\tdef get_token(self, code_list):\n\t\treturn [self.vocab[code] for code in code_list]\n\t\n\t@property\n\tdef pad_code(self):\n\t\treturn self.vocab['PAD']\n\n\ndef embedding(_input, vocab_size, embedding_dim, name='embedding'):\n\t\"\"\"\n\t_input: [batch_size, max_num_steps]\n\toutput: [batch_size, max_num_steps, embedding_dim]\n\t\"\"\"\n\t# embedding\n\tembedding_var = tf.get_variable(\n\t\tname=name,\n\t\tshape=[vocab_size, embedding_dim],\n\t\tinitializer=tf.random_uniform_initializer(-np.sqrt(3), np.sqrt(3)),\n\t\tdtype=tf.float32,\n\t)  # Initialize embeddings to have variance=1.\n\toutput = tf.nn.embedding_lookup(embedding_var, _input)\n\treturn output\n\n\ndef build_cell(units, cell_type='lstm', num_layers=1):\n\tif num_layers > 1:\n\t\tcell = rnn.MultiRNNCell([\n\t\t\tbuild_cell(units, cell_type, 1) for _ in range(num_layers)\n\t\t])\n\telse:\n\t\tif cell_type == \"lstm\":\n\t\t\tcell = rnn.LSTMCell(units)\n\t\telif cell_type == \"gru\":\n\t\t\tcell = rnn.GRUCell(units)\n\t\telse:\n\t\t\traise ValueError('Do not support %s' % cell_type)\n\treturn cell\n\n\ndef seq_len(sequence):\n\t\"\"\"\n\tassume padding with zero vectors\n\tsequence: [batch_size, num_steps, features]\n\tlength: [batch_size]\n\t\"\"\"\n\tused = tf.sign(tf.reduce_max(tf.abs(sequence), 2))\n\tlength = tf.reduce_sum(used, 1)\n\tlength = tf.cast(length, tf.int32)\n\treturn length\n\n\nclass EncoderNet:\n\tdef __init__(self, num_steps, vocab, embedding_dim, rnn_units, rnn_type='bi_lstm', rnn_layers=1):\n\t\tself.num_steps = num_steps\n\t\tself.vocab = vocab\n\t\tself.embedding_dim = embedding_dim\n\t\t\n\t\tself.rnn_units = rnn_units\n\t\tself.rnn_type = rnn_type\n\t\tself.rnn_layers = rnn_layers\n\t\t\n\t\t# placeholder\n\t\tself.seq_len, self.input_seq = None, None\n\t\t# op\n\t\tself.encoder_output, self.encoder_state = None, None\n\t\n\t@property\n\tdef bidirectional(self):\n\t\treturn self.rnn_type.startswith('bi')\n\t\n\t@property\n\tdef cell_type(self):\n\t\treturn self.rnn_type.split('_')[-1]\n\t\n\tdef _define_input(self):\n\t\tself.seq_len = tf.placeholder(\n\t\t\ttf.int32,\n\t\t\t[None],\n\t\t\t'seq_len'\n\t\t)  # length of each sequence, shape = [batch_size, ]\n\t\t\n\t\tself.input_seq = tf.placeholder(\n\t\t\ttf.int32,\n\t\t\t[None, self.num_steps],\n\t\t\t'input_seq'\n\t\t)  # input sequence, shape = [batch_size, num_steps]\n\t\n\tdef build(self):\n\t\tself._define_input()\n\t\t\n\t\toutput = self.input_seq\n\t\toutput = embedding(output, self.vocab.size, self.embedding_dim, name='layer_embedding')\n\t\tinput_dim = self.embedding_dim\n\t\t\n\t\t# Prepare data shape to match rnn function requirements\n\t\t# Current data input shape: [batch_size, num_steps, input_dim]\n\t\t# Required shape: 'num_steps' tensors list of shape [batch_size, input_dim]\n\t\toutput = tf.transpose(output, [1, 0, 2])\n\t\toutput = tf.reshape(output, [-1, input_dim])\n\t\toutput = tf.split(output, self.num_steps, 0)\n\t\t\n\t\tif self.bidirectional:\n\t\t\t# 'num_steps' tensors list of shape [batch_size, rnn_units * 2]\n\t\t\tfw_cell = build_cell(self.rnn_units, self.cell_type, self.rnn_layers)\n\t\t\tbw_cell = build_cell(self.rnn_units, self.cell_type, self.rnn_layers)\n\t\t\toutput, state_fw, state_bw = rnn.static_bidirectional_rnn(\n\t\t\t\tfw_cell, bw_cell, output, dtype=tf.float32, sequence_length=self.seq_len, scope='encoder')\n\t\t\t\n\t\t\tif isinstance(state_fw, tf.contrib.rnn.LSTMStateTuple):\n\t\t\t\tencoder_state_c = tf.concat([state_fw.c, state_bw.c], axis=1, name='bidirectional_concat_c')\n\t\t\t\tencoder_state_h = tf.concat([state_fw.h, state_bw.h], axis=1, name='bidirectional_concat_h')\n\t\t\t\tstate = tf.contrib.rnn.LSTMStateTuple(c=encoder_state_c, h=encoder_state_h)\n\t\t\telif isinstance(state_fw, tf.Tensor):\n\t\t\t\tstate = tf.concat([state_fw, state_bw], axis=1, name='bidirectional_concat')\n\t\t\telse:\n\t\t\t\traise ValueError\n\t\telse:\n\t\t\t# 'num_steps' tensors list of shape [batch_size, rnn_units]\n\t\t\tcell = build_cell(self.rnn_units, self.cell_type, self.rnn_layers)\n\t\t\toutput, state = rnn.static_rnn(cell, output, dtype=tf.float32, sequence_length=self.seq_len,\n\t\t\t\t\t\t\t\t\t\t   scope='encoder')\n\t\t\n\t\toutput = tf.stack(output, axis=0)  # [num_steps, batch_size, rnn_units]\n\t\toutput = tf.transpose(output, [1, 0, 2])  # [batch_size, num_steps, rnn_units]\n\t\tself.encoder_output = output\n\t\tself.encoder_state = state\n\t\treturn output, state\n\n\nclass WiderActorNet:\n\tdef __init__(self, out_dim, num_steps, net_type='simple', net_config=None):\n\t\tself.out_dim = out_dim\n\t\tself.num_steps = num_steps\n\t\tself.net_type = net_type\n\t\tself.net_config = net_config\n\t\t\n\t\t# placeholder\n\t\tself.decision, self.probs = None, None\n\t\n\tdef build_forward(self, _input):\n\t\toutput = _input  # [batch_size, num_steps, rnn_units]\n\t\tfeature_dim = int(output.get_shape()[2])  # rnn_units\n\t\toutput = tf.reshape(output, [-1, feature_dim])  # [batch_size * num_steps, rnn_units]\n\t\tfinal_activation = 'sigmoid' if self.out_dim == 1 else 'softmax'\n\t\tif self.net_type == 'simple':\n\t\t\tnet_config = [] if self.net_config is None else self.net_config\n\t\t\twith tf.variable_scope('wider_actor'):\n\t\t\t\tfor layer in net_config:\n\t\t\t\t\tunits, activation = layer.get('units'), layer.get('activation', 'relu')\n\t\t\t\t\toutput = BasicModel.fc_layer(output, units, use_bias=True)\n\t\t\t\t\toutput = BasicModel.activation(output, activation)\n\t\t\t\tlogits = BasicModel.fc_layer(output, self.out_dim, use_bias=True)  # [batch_size * num_steps, out_dim]\n\t\t\tprobs = BasicModel.activation(logits, final_activation)  # [batch_size * num_steps, out_dim]\n\t\t\tprobs_dim = self.out_dim\n\t\t\tif self.out_dim == 1:\n\t\t\t\tprobs = tf.concat([1 - probs, probs], axis=1)\n\t\t\t\tprobs_dim = 2\n\t\t\t\t\n\t\t\tself.decision = tf.multinomial(tf.log(probs), 1)  # [batch_size * num_steps, 1]\n\t\t\tself.decision = tf.reshape(self.decision, [-1, self.num_steps])  # [batch_size, num_steps]\n\t\t\tself.probs = tf.reshape(probs, [-1, self.num_steps, probs_dim])  # [batch_size, num_steps, out_dim]\n\t\telse:\n\t\t\traise ValueError('Do not support %s' % self.net_type)\n\n\nclass DeeperActorNet:\n\tdef __init__(self, decision_num, out_dims, embedding_dim,\n\t\t\t\t cell_type='lstm', rnn_layers=1, attention_config=None):\n\t\tself.decision_num = decision_num\n\t\tself.out_dims = out_dims\n\t\tself.embedding_dim = embedding_dim\n\t\t\n\t\tself.cell_type = cell_type\n\t\tself.rnn_layers = rnn_layers\n\t\tself.attention_config = attention_config\n\t\t\n\t\t# placeholder\n\t\tself.block_layer_num = None\n\t\t# op\n\t\tself.decision, self.probs = None, None\n\t\n\tdef _define_input(self):\n\t\tself.block_layer_num = tf.placeholder(\n\t\t\ttf.int32,\n\t\t\tshape=[None, self.out_dims[0]]\n\t\t)  # [batch_size, block_num]\n\t\n\tdef build_decoder_cell(self, encoder_state):\n\t\tif isinstance(encoder_state, tf.contrib.rnn.LSTMStateTuple):\n\t\t\trnn_units = int(encoder_state.c.get_shape()[1])\n\t\t\tassert self.cell_type == 'lstm', 'Do not match'\n\t\telse:\n\t\t\trnn_units = int(encoder_state.get_shape()[1])\n\t\tcell = build_cell(rnn_units, self.cell_type, self.rnn_layers)\n\t\treturn cell\n\t\n\tdef build_forward(self, encoder_output, encoder_state, is_training, decision_trajectory):\n\t\tself._define_input()\n\t\tself.decision, self.probs = [], []\n\t\t\n\t\tbatch_size = array_ops.shape(encoder_output)[0]\n\t\tif self.attention_config is None:\n\t\t\tcell = self.build_decoder_cell(encoder_state)\n\t\t\tcell_state = encoder_state\n\t\t\tcell_input = tf.zeros(shape=[batch_size], dtype=tf.int32)\n\t\t\twith tf.variable_scope('deeper_actor'):\n\t\t\t\tfor _i in range(self.decision_num):\n\t\t\t\t\tcell_input_embed = embedding(cell_input, 1 if _i == 0 else self.out_dims[_i - 1],\n\t\t\t\t\t\t\t\t\t\t\t\t self.embedding_dim, name='deeper_actor_embedding_%d' % _i)\n\t\t\t\t\twith tf.variable_scope('rnn', reuse=(_i > 0)):\n\t\t\t\t\t\tcell_output, cell_state = cell(cell_input_embed, cell_state)\n\t\t\t\t\twith tf.variable_scope('classifier_%d' % _i):\n\t\t\t\t\t\tlogits_i = BasicModel.fc_layer(cell_output, self.out_dims[_i], use_bias=True)\n\t\t\t\t\tact_i = 'softmax'\n\t\t\t\t\tprobs_i = BasicModel.activation(logits_i, activation=act_i)  # [batch_size, out_dim_i]\n\t\t\t\t\tif _i == 1:\n\t\t\t\t\t\t# determine the layer index for deeper actor\n\t\t\t\t\t\t# require mask\n\t\t\t\t\t\tone_hot_block_decision = tf.one_hot(cell_input, depth=self.out_dims[0], dtype=tf.int32)\n\t\t\t\t\t\tmax_layer_num = tf.multiply(self.block_layer_num, one_hot_block_decision)\n\t\t\t\t\t\tmax_layer_num = tf.reduce_max(max_layer_num, axis=1)  # [batch_size]\n\t\t\t\t\t\tlayer_mask = tf.sequence_mask(max_layer_num, self.out_dims[1], dtype=tf.float32)\n\t\t\t\t\t\tprobs_i = tf.multiply(probs_i, layer_mask)\n\t\t\t\t\t\t# rescale the sum to 1\n\t\t\t\t\t\tprobs_i = tf.divide(probs_i, tf.reduce_sum(probs_i, axis=1, keep_dims=True))\n\t\t\t\t\tdecision_i = tf.multinomial(tf.log(probs_i), 1)  # [batch_size, 1]\n\t\t\t\t\tdecision_i = tf.cast(decision_i, tf.int32)\n\t\t\t\t\tdecision_i = tf.reshape(decision_i, shape=[-1])  # [batch_size]\n\t\t\t\t\t\n\t\t\t\t\tcell_input = tf.cond(\n\t\t\t\t\t\tis_training,\n\t\t\t\t\t\tlambda: decision_trajectory[:, _i],\n\t\t\t\t\t\tlambda: decision_i,\n\t\t\t\t\t)\n\t\t\t\t\tself.decision.append(decision_i)\n\t\t\t\t\tself.probs.append(probs_i)\n\t\t\t\tself.decision = tf.stack(self.decision, axis=1)  # [batch_size, decision_num]\n\t\telse:\n\t\t\traise NotImplementedError\n\n\n"
  },
  {
    "path": "src/aup/Proposer/eas/meta_controller/rl_controller.py",
    "content": "from ..meta_controller.base_controller import WiderActorNet, DeeperActorNet, EncoderNet, BaseController\nimport tensorflow as tf\nimport os\nfrom tensorflow.python.ops import array_ops\nfrom ..models.basic_model import BasicModel\nimport shutil\nimport numpy as np\n\n\nclass RLNet2NetController(BaseController):\n\tdef save(self, global_step=None):\n\t\tself.saver.save(self.sess, self.save_path, global_step=global_step)\n\t\n\tdef load(self):\n\t\tif os.path.isfile('%s/model.ckpt.index' % self.path):\n\t\t\ttry:\n\t\t\t\tself.saver.restore(self.sess, self.save_path)\n\t\t\texcept Exception:\n\t\t\t\tprint('Failed to to load model '\n\t\t\t\t\t\t\t\t'from save path: %s' % self.save_path)\n\t\t\tprint('Successfully load model from save path: %s' % self.save_path)\n\t\telse:\n\t\t\tprint('No model files in ' + '%s/model.ckpt.index' % self.path)\n\t\n\tdef __init__(self, path, entropy_penalty,\n\t\t\t\t encoder: EncoderNet, wider_actor: WiderActorNet, deeper_actor: DeeperActorNet, opt_config):\n\t\tBaseController.__init__(self, path)\n\t\tself.entropy_penalty = entropy_penalty\n\t\t\n\t\tself.encoder = encoder\n\t\tself.wider_actor = wider_actor\n\t\tself.deeper_actor = deeper_actor\n\t\tself.opt_config = opt_config\n\t\t\n\t\tself.graph = tf.Graph()\n\t\tself.obj, self.train_step = None, None\n\t\twith self.graph.as_default():\n\t\t\tself._define_input()\n\t\t\tself.build_forward()\n\t\t\tself.build_training_process()\n\t\t\tself.global_variables_initializer = tf.global_variables_initializer()\n\t\t\tself.saver = tf.train.Saver()\n\t\tself._initialize_session()\n\t\n\tdef _define_input(self):\n\t\tself.learning_rate = tf.placeholder(\n\t\t\ttf.float32,\n\t\t\tshape=[],\n\t\t\tname='learning_rate')\n\t\tself.is_training = tf.placeholder(tf.bool, shape=[], name='is_training')\n\t\tself.wider_seg_deeper = tf.placeholder(tf.int32, shape=[], name='wider_seg_deeper')\n\t\t\n\t\tself.wider_decision_trajectory = tf.placeholder(\n\t\t\ttf.int32,\n\t\t\tshape=[None, self.encoder.num_steps],\n\t\t\tname='wider_decision_trajectory',\n\t\t)  # [wider_batch_size, num_steps]\n\t\tself.wider_decision_mask = tf.placeholder(\n\t\t\ttf.float32,\n\t\t\tshape=[None, self.encoder.num_steps],\n\t\t\tname='wider_decision_mask',\n\t\t)  # [wider_batch_size, num_steps]\n\t\t\n\t\tself.deeper_decision_trajectory = tf.placeholder(\n\t\t\ttf.int32,\n\t\t\tshape=[None, self.deeper_actor.decision_num],\n\t\t\tname='deeper_decision_trajectory',\n\t\t)  # [deeper_batch_size, deeper_decision_num]\n\t\t\n\t\tself.deeper_decision_mask = tf.placeholder(\n\t\t\ttf.float32,\n\t\t\tshape=[None, self.deeper_actor.decision_num],\n\t\t\tname='deeper_decision_mask',\n\t\t)  # [deeper_batch_size, deeper_decision_num]\n\t\t\n\t\tself.reward = tf.placeholder(\n\t\t\ttf.float32,\n\t\t\tshape=[None],\n\t\t\tname='reward',\n\t\t)  # [batch_size]\n\t\tself.has_deeper = tf.placeholder(\n\t\t\ttf.bool,\n\t\t\tshape=[],\n\t\t\tname='has_deeper',\n\t\t)\n\t\t\n\tdef update_controller(self, learning_rate, wider_seg_deeper, wider_decision_trajectory, wider_decision_mask,\n\t\t\t\t\t\t  deeper_decision_trajectory, deeper_decison_mask, reward, block_layer_num, input_seq, seq_len):\n\t\thas_deeper = wider_seg_deeper < len(input_seq)\n\t\tfeed_dict = {\n\t\t\tself.learning_rate: learning_rate,\n\t\t\tself.wider_seg_deeper: wider_seg_deeper,\n\t\t\tself.wider_decision_trajectory: wider_decision_trajectory,\n\t\t\tself.wider_decision_mask: wider_decision_mask,\n\t\t\tself.deeper_decision_trajectory: deeper_decision_trajectory,\n\t\t\tself.deeper_decision_mask: deeper_decison_mask,\n\t\t\tself.reward: reward,\n\t\t\tself.is_training: True and has_deeper,\n\t\t\tself.deeper_actor.block_layer_num: block_layer_num,\n\t\t\tself.encoder.input_seq: input_seq,\n\t\t\tself.encoder.seq_len: seq_len,\n\t\t\tself.has_deeper: has_deeper,\n\t\t}\n\t\tself.sess.run(self.train_step, feed_dict=feed_dict)\n\t\t\n\tdef build_forward(self):\n\t\tencoder_output, encoder_state = self.encoder.build()\n\t\tfeed2wider_output = encoder_output[:self.wider_seg_deeper]\n\t\tfeed2deeper_output = encoder_output[self.wider_seg_deeper:]\n\t\tif isinstance(encoder_state, tf.contrib.rnn.LSTMStateTuple):\n\t\t\tencoder_state_c = encoder_state.c\n\t\t\tencoder_state_h = encoder_state.h\n\t\t\t\n\t\t\tfeed2wider_c = encoder_state_c[:self.wider_seg_deeper]\n\t\t\tfeed2wider_h = encoder_state_h[:self.wider_seg_deeper]\n\t\t\tfeed2wider_state = tf.contrib.rnn.LSTMStateTuple(c=feed2wider_c, h=feed2wider_h)\n\t\t\t\n\t\t\tfeed2deeper_c = encoder_state_c[self.wider_seg_deeper:]\n\t\t\tfeed2deeper_h = encoder_state_h[self.wider_seg_deeper:]\n\t\t\tfeed2deeper_state = tf.contrib.rnn.LSTMStateTuple(c=feed2deeper_c, h=feed2deeper_h)\n\t\telif isinstance(encoder_state, tf.Tensor):\n\t\t\tfeed2wider_state = encoder_state[:self.wider_seg_deeper]\n\t\t\tfeed2deeper_state = encoder_state[self.wider_seg_deeper:]\n\t\telse:\n\t\t\traise ValueError\n\t\t\n\t\tself.wider_actor.build_forward(feed2wider_output)\n\t\tself.deeper_actor.build_forward(feed2deeper_output, feed2deeper_state, self.is_training,\n\t\t\t\t\t\t\t\t\t\tself.deeper_decision_trajectory)\n\t\t\n\tdef build_training_process(self):\n\t\traise NotImplementedError\n\t\n\tdef sample_wider_decision(self, input_seq, seq_len):\n\t\tbatch_size = len(seq_len)\n\t\twider_decision, wider_probs = self.sess.run(\n\t\t\tfetches=[self.wider_actor.decision, self.wider_actor.probs],\n\t\t\tfeed_dict={\n\t\t\t\tself.encoder.input_seq: input_seq,\n\t\t\t\tself.encoder.seq_len: seq_len,\n\t\t\t\tself.wider_seg_deeper: batch_size,\n\t\t\t}\n\t\t)  # [batch_size, num_steps]\n\t\treturn wider_decision, wider_probs\n\t\n\tdef sample_deeper_decision(self, input_seq, seq_len, block_layer_num):\n\t\tdeeper_decision, deeper_probs = self.sess.run(\n\t\t\tfetches=[self.deeper_actor.decision, self.deeper_actor.probs],\n\t\t\tfeed_dict={\n\t\t\t\tself.encoder.input_seq: input_seq,\n\t\t\t\tself.encoder.seq_len: seq_len,\n\t\t\t\tself.wider_seg_deeper: 0,\n\t\t\t\tself.is_training: False,\n\t\t\t\tself.deeper_actor.block_layer_num: block_layer_num,\n\t\t\t\tself.deeper_decision_trajectory: -np.ones([len(seq_len), self.deeper_actor.decision_num])\n\t\t\t}\n\t\t)  # [batch_size, decision_num]\n\t\treturn deeper_decision, deeper_probs\n\t\n\tdef _initialize_session(self):\n\t\tconfig = tf.ConfigProto()\n\t\t# restrict model GPU memory utilization to min required\n\t\tconfig.gpu_options.allow_growth = True\n\t\tself.sess = tf.Session(graph=self.graph, config=config)\n\t\t\n\t\tself.sess.run(self.global_variables_initializer)\n\t\tshutil.rmtree(self.logs_path, ignore_errors=True)\n\t\tself.summary_writer = tf.summary.FileWriter(self.logs_path, graph=self.graph)\n\n\tdef get_wider_entropy(self):\n\t\twider_entropy = -tf.multiply(tf.log(self.wider_actor.probs), self.wider_actor.probs)\n\t\twider_entropy = tf.reduce_sum(wider_entropy, axis=2)\n\t\twider_entropy = tf.multiply(wider_entropy, self.wider_decision_mask)\n\t\twider_entropy = tf.div(tf.reduce_sum(wider_entropy, axis=1), tf.reduce_sum(self.wider_decision_mask, axis=1))\n\t\twider_entropy = tf.reduce_mean(wider_entropy)\n\t\treturn wider_entropy\n\t\n\tdef get_deeper_entropy(self):\n\t\tdeeper_entropy = []\n\t\tfor _i in range(self.deeper_actor.decision_num):\n\t\t\tdeeper_probs = self.deeper_actor.probs[_i]\n\t\t\tentropy = -tf.multiply(tf.log(deeper_probs + 1e-10), deeper_probs)\n\t\t\tentropy = tf.reduce_sum(entropy, axis=1)\n\t\t\tdeeper_entropy.append(entropy)\n\t\tdeeper_entropy = tf.reduce_mean(deeper_entropy)\n\t\treturn deeper_entropy\n\t\n\nclass ReinforceNet2NetController(RLNet2NetController):\n\tdef build_training_process(self):\n\t\twider_side_obj, wider_entropy = tf.cond(\n\t\t\ttf.greater(self.wider_seg_deeper, 0),\n\t\t\tlambda: self.get_wider_side_obj(),\n\t\t\tlambda: (tf.constant(0.0, dtype=tf.float32), tf.constant(0.0, dtype=tf.float32))\n\t\t)\n\t\tbatch_size = array_ops.shape(self.reward)[0]\n\t\tdeeper_side_obj, deeper_entropy = tf.cond(\n\t\t\tself.has_deeper,\n\t\t\tlambda: self.get_deeper_side_obj(),\n\t\t\tlambda: (tf.constant(0.0, dtype=tf.float32), tf.constant(0.0, dtype=tf.float32))\n\t\t)\n\t\tself.obj = wider_side_obj + deeper_side_obj\n\t\tentropy_term = wider_entropy * tf.cast(self.wider_seg_deeper, tf.float32) + \\\n\t\t\t\t\t   deeper_entropy * tf.cast(batch_size - self.wider_seg_deeper, tf.float32)\n\t\tentropy_term /= tf.cast(batch_size, tf.float32)\n\t\t\n\t\toptimizer = BasicModel.build_optimizer(self.learning_rate, self.opt_config[0], self.opt_config[1])\n\t\tself.train_step = optimizer.minimize(- self.obj - self.entropy_penalty * entropy_term)\n\t\t\n\tdef get_wider_side_obj(self):\n\t\twider_side_reward = self.reward[:self.wider_seg_deeper]\n\n\t\t# obj from wider side\n\t\twider_trajectory = tf.one_hot(self.wider_decision_trajectory, depth=max(self.wider_actor.out_dim, 2))\n\t\twider_probs = tf.reduce_max(tf.multiply(wider_trajectory, self.wider_actor.probs), axis=2)\n\t\twider_probs = tf.log(wider_probs)  # [wider_batch_size, num_steps]\n\t\twider_probs = tf.multiply(wider_probs, self.wider_decision_mask)\n\t\twider_probs = tf.multiply(wider_probs, tf.reshape(wider_side_reward, shape=[-1, 1]))\n\t\t\n\t\twider_side_obj = tf.reduce_sum(wider_probs)\n\t\treturn wider_side_obj, self.get_wider_entropy()\n\t\n\tdef get_deeper_side_obj(self):\n\t\tdeeper_side_reward = self.reward[self.wider_seg_deeper:]\n\n\t\t# obj from deeper side\n\t\tdeeper_side_obj = []\n\t\tfor _i in range(self.deeper_actor.decision_num):\n\t\t\tdecision_trajectory = self.deeper_decision_trajectory[:, _i]\n\t\t\tdeeper_decision_mask = self.deeper_decision_mask[:, _i]\n\t\t\tdecision_trajectory = tf.one_hot(decision_trajectory, depth=self.deeper_actor.out_dims[_i])\n\t\t\tdeeper_probs = tf.reduce_max(tf.multiply(decision_trajectory, self.deeper_actor.probs[_i]), axis=1)\n\t\t\tdeeper_probs = tf.log(deeper_probs)  # [deeper_batch_size]\n\t\t\tdeeper_probs = tf.multiply(deeper_probs, deeper_decision_mask)\n\t\t\tdeeper_probs = tf.multiply(deeper_probs, deeper_side_reward)\n\t\t\t\n\t\t\tdeeper_side_obj.append(tf.reduce_sum(deeper_probs))\n\t\tdeeper_side_obj = tf.reduce_sum(deeper_side_obj)\n\t\treturn deeper_side_obj, self.get_deeper_entropy()\n\n"
  },
  {
    "path": "src/aup/Proposer/eas/models/__init__.py",
    "content": ""
  },
  {
    "path": "src/aup/Proposer/eas/models/basic_model.py",
    "content": "import os\nimport shutil\nimport tensorflow as tf\nimport numpy as np\nimport time\nfrom datetime import timedelta\nimport json\nimport pickle\n\t\n\nclass BasicModel:\n\tdef __init__(self, path, data_provider, run_config, net_config, pure=False, only_forward=False):\n\t\tif only_forward: pure = True\n\t\tself.graph = tf.Graph()\n\t\t\n\t\tself.data_provider = data_provider\n\t\tself._path = path\n\t\tself.run_config = run_config\n\t\tself.net_config = net_config\n\t\t\n\t\tself.data_shape = data_provider.data_shape\n\t\tself.n_classes = data_provider.n_classes\n\t\t\n\t\tself._save_path, self._logs_path = None, None\n\t\tself.batches_step = 0\n\t\t\n\t\tself.cross_entropy, self.train_step, self.accuracy = None, None, None\n\t\twith self.graph.as_default():\n\t\t\tself._define_inputs()\n\t\t\tself._build_graph(only_forward=only_forward)\n\t\t\tself.global_variables_initializer = tf.global_variables_initializer()\n\t\t\tif not pure:\n\t\t\t\tself._count_trainable_params()\n\t\t\t\tself.saver = tf.train.Saver()\n\t\tself._initialize_session(set_logs=(not pure))\n\t\n\t@property\n\tdef save_path(self):\n\t\tif self._save_path is None:\n\t\t\tsave_path = '%s/checkpoint' % self._path\n\t\t\tos.makedirs(save_path, exist_ok=True)\n\t\t\tsave_path = os.path.join(save_path, 'model.ckpt')\n\t\t\tself._save_path = save_path\n\t\treturn self._save_path\n\t\n\t@property\n\tdef logs_path(self):\n\t\tif self._logs_path is None:\n\t\t\tlogs_path = '%s/logs' % self._path\n\t\t\tif self.run_config.renew_logs:\n\t\t\t\tshutil.rmtree(logs_path, ignore_errors=True)\n\t\t\tos.makedirs(logs_path, exist_ok=True)\n\t\t\tself._logs_path = logs_path\n\t\treturn self._logs_path\n\t\n\tdef _build_graph(self, only_forward=False):\n\t\traise NotImplementedError\n\t\n\tdef _define_inputs(self):\n\t\tshape = [None]\n\t\tshape.extend(self.data_shape)\n\t\tself.images = tf.placeholder(\n\t\t\ttf.float32,\n\t\t\tshape=shape,\n\t\t\tname='input_images')\n\t\tself.labels = tf.placeholder(\n\t\t\ttf.float32,\n\t\t\tshape=[None, self.n_classes],\n\t\t\tname='labels')\n\t\tself.learning_rate = tf.placeholder(\n\t\t\ttf.float32,\n\t\t\tshape=[],\n\t\t\tname='learning_rate')\n\t\tself.is_training = tf.placeholder(tf.bool, shape=[], name='is_training')\n\t\t\n\tdef _initialize_session(self, set_logs=True):\n\t\t\"\"\"Initialize session, variables\"\"\"\n\t\tconfig = tf.ConfigProto()\n\t\t# restrict model GPU memory utilization to min required\n\t\tconfig.gpu_options.allow_growth = True\n\t\tself.sess = tf.Session(graph=self.graph, config=config)\n\t\t\n\t\tself.sess.run(self.global_variables_initializer)\n\t\tif set_logs:\n\t\t\tlogswriter = tf.summary.FileWriter\n\t\t\tself.summary_writer = logswriter(self.logs_path, graph=self.graph)\n\t\n\tdef train_all_epochs(self, start_epoch=1):\n\t\tn_epochs = self.run_config.n_epochs\n\t\tlearning_rate = self.run_config.init_lr\n\t\tbatch_size = self.run_config.batch_size\n\t\t\n\t\ttotal_start_time = time.time()\n\t\tfor epoch in range(start_epoch, n_epochs + 1):\n\t\t\tprint('\\n', '-' * 30, 'Train epoch: %d' % epoch, '-' * 30, '\\n')\n\t\t\tstart_time = time.time()\n\t\t\tnew_lr = self.run_config.learning_rate(epoch)\n\t\t\tif new_lr != learning_rate:\n\t\t\t\tlearning_rate = new_lr\n\t\t\t\tprint('Decrease learning rate, new lr = %f' % learning_rate)\n\t\t\t\n\t\t\tprint('Training...')\n\t\t\tloss, acc = self.train_one_epoch(\n\t\t\t\tself.data_provider.train, batch_size, learning_rate)\n\t\t\t# save logs about \"loss\" and \"acc\" if the option is true\n\t\t\tif self.run_config.should_save_logs:\n\t\t\t\tself.log_loss_accuracy(loss, acc, epoch, prefix='train')\n\t\t\t\n\t\t\tif self.run_config.validation_frequency and epoch % self.run_config.validation_frequency == 0:\n\t\t\t\tprint('Validation...')\n\t\t\t\tloss, acc = self.test(self.data_provider.validation, batch_size)\n\t\t\t\tif self.run_config.should_save_logs:\n\t\t\t\t\tself.log_loss_accuracy(loss, acc, epoch, prefix='valid')\n\t\t\t\tif self.run_config.should_save_model:\n\t\t\t\t\tself.save_model()\n\t\t\t\t\tjson.dump({'epoch': epoch + 1}, open('%s/checkpoint/epoch.info' % self._path, 'w'))\n\t\t\t\n\t\t\ttime_per_epoch = time.time() - start_time\n\t\t\tseconds_left = int((n_epochs - epoch) * time_per_epoch)\n\t\t\tprint('Time per epoch: %s, Est. complete in: %s' % (\n\t\t\t\tstr(timedelta(seconds=time_per_epoch)),\n\t\t\t\tstr(timedelta(seconds=seconds_left))))\n\t\t\n\t\tif self.run_config.should_save_model:\n\t\t\tself.save_model()\n\t\t\n\t\ttotal_training_time = time.time() - total_start_time\n\t\tprint('\\nTotal training time: %s' % str(timedelta(\n\t\t\tseconds=total_training_time)))\n\t\n\tdef train_one_epoch(self, data, batch_size, learning_rate):\n\t\tnum_examples = data.num_examples\n\t\ttotal_loss = []\n\t\ttotal_accuracy = []\n\t\tfor i in range(num_examples // batch_size):\n\t\t\tbatch = data.next_batch(batch_size)\n\t\t\timages, labels = batch\n\t\t\tfeed_dict = {\n\t\t\t\tself.images: images,\n\t\t\t\tself.labels: labels,\n\t\t\t\tself.learning_rate: learning_rate,\n\t\t\t\tself.is_training: True,\n\t\t\t}\n\t\t\tfetches = [self.train_step, self.cross_entropy, self.accuracy]\n\t\t\tresult = self.sess.run(fetches, feed_dict=feed_dict)\n\t\t\t_, loss, accuracy = result\n\t\t\ttotal_loss.append(loss)\n\t\t\ttotal_accuracy.append(accuracy)\n\t\t\t# save logs about \"loss\" and \"acc\" if the option is true\n\t\t\tif self.run_config.should_save_logs:\n\t\t\t\tself.batches_step += 1\n\t\t\t\tself.log_loss_accuracy(\n\t\t\t\t\tloss, accuracy, self.batches_step, prefix='per_batch',\n\t\t\t\t\tshould_print=False)\n\t\tmean_loss = np.mean(total_loss)\n\t\tmean_accuracy = np.mean(total_accuracy)\n\t\treturn mean_loss, mean_accuracy\n\t\n\tdef test(self, data, batch_size):\n\t\tnum_examples = data.num_examples\n\t\ttotal_loss = []\n\t\ttotal_accuracy = []\n\t\tfor i in range(num_examples // batch_size):\n\t\t\tbatch = data.next_batch(batch_size)\n\t\t\tfeed_dict = {\n\t\t\t\tself.images: batch[0],\n\t\t\t\tself.labels: batch[1],\n\t\t\t\tself.is_training: False,\n\t\t\t}\n\t\t\tfetches = [self.cross_entropy, self.accuracy]\n\t\t\tloss, accuracy = self.sess.run(fetches, feed_dict=feed_dict)\n\t\t\ttotal_loss.append(loss)\n\t\t\ttotal_accuracy.append(accuracy)\n\t\tmean_loss = np.mean(total_loss)\n\t\tmean_accuracy = np.mean(total_accuracy)\n\t\tremain_num = num_examples % batch_size\n\t\tif remain_num != 0:\n\t\t\tbatch = data.next_batch(remain_num)\n\t\t\tfeed_dict = {\n\t\t\t\tself.images: batch[0],\n\t\t\t\tself.labels: batch[1],\n\t\t\t\tself.is_training: False,\n\t\t\t}\n\t\t\tfetches = [self.cross_entropy, self.accuracy]\n\t\t\tloss, accuracy = self.sess.run(fetches, feed_dict=feed_dict)\n\t\t\t\n\t\t\tmean_loss = (mean_loss * (num_examples - remain_num) + loss * remain_num) / num_examples\n\t\t\tmean_accuracy = (mean_accuracy * (num_examples - remain_num) + accuracy * remain_num) / num_examples\n\t\treturn mean_loss, mean_accuracy\n\t\n\tdef save_config(self, save_path, print_info=True):\n\t\tos.makedirs(save_path, exist_ok=True)\n\t\tnet_save_path = os.path.join(save_path, 'net.config')\n\t\tjson.dump(self.net_config.get_config(), open(net_save_path, 'w'), indent=4)\n\t\tif print_info: print('Network configs dump to %s' % save_path)\n\t\trun_save_path = os.path.join(save_path, 'run.config')\n\t\tjson.dump(self.run_config.get_config(), open(run_save_path, 'w'), indent=4)\n\t\tif print_info: print('Run configs dump to %s' % run_save_path)\n\t\n\tdef save_init(self, save_path, print_info=True):\n\t\tos.makedirs(save_path, exist_ok=True)\n\t\tsave_path = os.path.join(save_path, 'init')\n\t\tto_save_init = self.net_config.renew_init(self)\n\t\tto_save_init['dataset'] = self.run_config.dataset\n\t\tpickle.dump(to_save_init, open(save_path, 'wb'))\n\t\tif print_info: print('Network weights dump to %s' % save_path)\n\t\n\tdef pure_train(self):\n\t\tn_epochs = self.run_config.n_epochs\n\t\tbatch_size = self.run_config.batch_size\n\n\t\tfor epoch in range(1, n_epochs + 1):\n\t\t\tlearning_rate = self.run_config.learning_rate(epoch)\n\t\t\t\n\t\t\t# train one epoch\n\t\t\tdata = self.data_provider.train\n\t\t\tnum_examples = data.num_examples\n\t\t\tfor i in range(num_examples // batch_size):\n\t\t\t\tbatch = data.next_batch(batch_size)\n\t\t\t\timages, labels = batch\n\t\t\t\tfeed_dict = {\n\t\t\t\t\tself.images: images,\n\t\t\t\t\tself.labels: labels,\n\t\t\t\t\tself.learning_rate: learning_rate,\n\t\t\t\t\tself.is_training: True,\n\t\t\t\t}\n\t\t\t\tfetches = self.train_step\n\t\t\t\tself.sess.run(fetches, feed_dict=feed_dict)\n\t\n\tdef save_model(self, global_step=None):\n\t\tself.saver.save(self.sess, self.save_path, global_step=global_step)\n\t\n\tdef load_model(self):\n\t\ttry:\n\t\t\tself.saver.restore(self.sess, self.save_path)\n\t\texcept Exception:\n\t\t\traise IOError('Failed to to load model '\n\t\t\t\t\t\t  'from save path: %s' % self.save_path)\n\t\tprint('Successfully load model from save path: %s' % self.save_path)\n\t\n\tdef log_loss_accuracy(self, loss, accuracy, epoch, prefix, should_print=True, write2file=True):\n\t\tif should_print:\n\t\t\tprint('mean cross_entropy: %f, mean accuracy: %f' % (loss, accuracy))\n\t\tsummary = tf.Summary(value=[\n\t\t\ttf.Summary.Value(\n\t\t\t\ttag='loss_%s' % prefix, simple_value=float(loss)),\n\t\t\ttf.Summary.Value(\n\t\t\t\ttag='accuracy_%s' % prefix, simple_value=float(accuracy))\n\t\t])\n\t\tself.summary_writer.add_summary(summary, epoch)\n\t\tif write2file and prefix == 'valid':\n\t\t\twith open('%s/console.txt' % self.logs_path, 'a') as fout:\n\t\t\t\tfout.write('%d: mean cross_entropy: %f, mean accuracy: %f\\n' % (epoch, loss, accuracy))\n\t\n\t@staticmethod\n\tdef _count_trainable_params():\n\t\ttotal_parameters = 0\n\t\tfor variable in tf.trainable_variables():\n\t\t\tshape = variable.get_shape()\n\t\t\tvariable_parameters = 1\n\t\t\tfor dim in shape:\n\t\t\t\tvariable_parameters *= dim.value\n\t\t\ttotal_parameters += variable_parameters\n\t\tprint('Total training params: %.2fM' % (total_parameters / 1e6))\n\t\n\t@staticmethod\n\tdef dropout(_input, keep_prob, is_training):\n\t\tif keep_prob < 1:\n\t\t\toutput = tf.cond(\n\t\t\t\tis_training,\n\t\t\t\tlambda: tf.nn.dropout(_input, keep_prob),\n\t\t\t\tlambda: _input\n\t\t\t)\n\t\telse:\n\t\t\toutput = _input\n\t\treturn output\n\t\n\t@staticmethod\n\tdef weight_variable(shape, name, initializer):\n\t\treturn tf.get_variable(\n\t\t\tname,\n\t\t\tshape=shape,\n\t\t\tinitializer=initializer,\n\t\t)\n\t\t\n\t@staticmethod\n\tdef avg_pool(_input, k=2, s=2):\n\t\tksize = [1, k, k, 1]\n\t\tstrides = [1, s, s, 1]\n\t\tpadding = 'VALID'\n\t\t# if stride = 1, keep the image size unchanged\n\t\tif s == 1: padding = 'SAME'\n\t\toutput = tf.nn.avg_pool(_input, ksize, strides, padding)\n\t\treturn output\n\t\n\t@staticmethod\n\tdef max_pool(_input, k=2, s=2):\n\t\tksize = [1, k, k, 1]\n\t\tstrides = [1, s, s, 1]\n\t\tpadding = 'VALID'\n\t\t# if stride = 1, keep the image size unchanged\n\t\tif s == 1: padding = 'SAME'\n\t\toutput = tf.nn.max_pool(_input, ksize, strides, padding)\n\t\treturn output\n\n\t@staticmethod\n\tdef conv2d(_input, out_features, kernel_size, strides=1, padding='SAME', param_initializer=None):\n\t\tif kernel_size == 1: padding = 'VALID'\n\t\t\n\t\tin_features = int(_input.get_shape()[-1])\n\t\tif not param_initializer: param_initializer = {}\n\t\tkernel = BasicModel.weight_variable(\n\t\t\t[kernel_size, kernel_size, in_features, out_features],\n\t\t\tname='kernel',\n\t\t\tinitializer=param_initializer.get('kernel', tf.contrib.layers.variance_scaling_initializer())\n\t\t)\n\t\toutput = tf.nn.conv2d(_input, kernel, [1, strides, strides, 1], padding)\n\t\treturn output\n\t\n\t@staticmethod\n\tdef fc_layer(_input, out_units, use_bias=False, param_initializer=None):\n\t\tfeatures_total = int(_input.get_shape()[-1])\n\t\tif not param_initializer: param_initializer = {}\n\t\tW = BasicModel.weight_variable(\n\t\t\t[features_total, out_units], name='W',\n\t\t\tinitializer=param_initializer.get('W', tf.contrib.layers.xavier_initializer())\n\t\t)\n\t\toutput = tf.matmul(_input, W)\n\t\tif use_bias:\n\t\t\tbias = BasicModel.weight_variable(\n\t\t\t\t[out_units], name='bias',\n\t\t\t\tinitializer=param_initializer.get('bias', tf.constant_initializer([0.0] * out_units))\n\t\t\t)\n\t\t\toutput += bias\n\t\treturn output\n\t\t\n\t@staticmethod\n\tdef batch_norm(_input, is_training, epsilon=1e-3, decay=0.999, param_initializer=None):\n\t\toutput = tf.contrib.layers.batch_norm(\n\t\t\t_input, scale=True, is_training=is_training, param_initializers=param_initializer,\n\t\t\tupdates_collections=None, epsilon=epsilon, decay=decay)\n\t\treturn output\n\n\t@staticmethod\n\tdef activation(_input, activation='relu'):\n\t\tif activation == 'relu':\n\t\t\treturn tf.nn.relu(_input)\n\t\telif activation == 'tanh':\n\t\t\treturn tf.tanh(_input)\n\t\telif activation == 'sigmoid':\n\t\t\treturn tf.sigmoid(_input)\n\t\telif activation == 'softmax':\n\t\t\treturn tf.nn.softmax(_input)\n\t\telif activation is None:\n\t\t\treturn _input\n\t\telse:\n\t\t\traise ValueError('Do not support %s' % activation)\n\n\t@staticmethod\n\tdef build_optimizer(learning_rate, opt_name, opt_param):\n\t\tif opt_name == 'momentum':\n\t\t\treturn tf.train.MomentumOptimizer(learning_rate, **opt_param)\n\t\telif opt_name == 'adam':\n\t\t\treturn tf.train.AdamOptimizer(learning_rate, **opt_param)\n\t\telse:\n\t\t\traise ValueError('Do not support the optimizer type: %s' % opt_name)\n\t\n\t@staticmethod\n\tdef flatten(_input):\n\t\tinput_shape = _input.shape.as_list()\n\t\tif len(input_shape) != 2:\n\t\t\treturn tf.reshape(_input, [-1, np.prod(input_shape[1:])])\n\t\telse:\n\t\t\treturn _input\n"
  },
  {
    "path": "src/aup/Proposer/eas/models/convnet.py",
    "content": "from .basic_model import BasicModel\nfrom ..data_providers.base_provider import DataProvider\nfrom .layers import ConvLayer, PoolLayer, FCLayer\nfrom .layer_cascade import LayerCascade\nimport tensorflow as tf\nimport numpy as np\n\n\nclass SimpleConvnetConfig:\n\tdef __init__(self):\n\t\tself.net_config = {\n\t\t\t'weight_decay': None,\n\t\t\t'bn_epsilon': None,\n\t\t\t'bn_decay': None,\n\t\t\t'drop_scheme': None,\n\t\t}\n\t\tself.layer_cascade = None\n\t\n\t@property\n\tdef weight_decay(self): return self.net_config['weight_decay']\n\t\n\t@property\n\tdef bn_epsilon(self): return self.net_config['bn_epsilon']\n\t\n\t@property\n\tdef bn_decay(self): return self.net_config['bn_decay']\n\t\n\t@property\n\tdef drop_scheme(self): return self.net_config['drop_scheme']\n\t\n\t@property\n\tdef depth(self): return self.layer_cascade.depth\n\t\n\tdef get_config(self):\n\t\treturn {\n\t\t\t'name': 'SimpleConvnet',\n\t\t\t**self.net_config,\n\t\t\t'layer_cascade': self.layer_cascade.get_config()\n\t\t}\n\n\tdef copy(self):\n\t\tnet_config = SimpleConvnetConfig()\n\t\tnet_config.set_net_from_config(self.get_config(), self.renew_init(None), print_info=False)\n\t\treturn net_config\n\t\n\tdef renew_init(self, convnet):\n\t\treturn {\n\t\t\t'layer_cascade': self.layer_cascade.renew_init(convnet)\n\t\t}\n\t\n\tdef set_standard_convnet(self, data_provider: DataProvider, conv_blocks_config, fc_block_config, weight_decay,\n\t\t\t\t\t\t\t drop_scheme, bn_epsilon, bn_decay, print_info=True, **kwargs):\n\t\tself.net_config = {\n\t\t\t'weight_decay': weight_decay,\n\t\t\t'bn_epsilon': bn_epsilon,\n\t\t\t'bn_decay': bn_decay,\n\t\t\t'drop_scheme': drop_scheme,\n\t\t}\n\t\t\n\t\timage_size = data_provider.data_shape[0]\n\t\t\n\t\tlayers = []\n\t\tconv_id = 0\n\t\tfor _i, block_config in enumerate(conv_blocks_config):\n\t\t\tnum_layers, kernel_size, filter_num = block_config\n\t\t\tfor _j in range(num_layers):\n\t\t\t\tkeep_prob = 1.0\n\t\t\t\tif 'conv' in drop_scheme['type']:\n\t\t\t\t\tkeep_prob = 1.0 if _i + _j == 0 else drop_scheme.get('conv_drop', 1.0)\n\t\t\t\tconv_layer = ConvLayer('conv_%d' % conv_id, filter_num, kernel_size=kernel_size, keep_prob=keep_prob,\n\t\t\t\t\t\t\t\t\t   pre_activation=False)\n\t\t\t\tconv_id += 1\n\t\t\t\tlayers.append(conv_layer)\n\t\t\tif _i < len(conv_blocks_config) - 1:\n\t\t\t\tkeep_prob = 1.0\n\t\t\t\tif 'pool' in drop_scheme['type']:\n\t\t\t\t\tkeep_prob = drop_scheme.get('pool_drop', 1.0)\n\t\t\t\tpool_layer = PoolLayer('pool_%d' % _i, 'max', keep_prob=keep_prob, pre_activation=False)\n\t\t\t\tlayers.append(pool_layer)\n\t\t\t\timage_size = image_size // 2\n\t\tglobal_avg_pool = PoolLayer('pool_%d' % len(conv_blocks_config), 'avg',\n\t\t\t\t\t\t\t\t\tkernel_size=image_size, strides=image_size, pre_activation=False)\n\t\tlayers.append(global_avg_pool)\n\t\tfor _i, units in enumerate(fc_block_config):\n\t\t\tkeep_prob = 1.0\n\t\t\tif 'fc' in drop_scheme['type']:\n\t\t\t\tkeep_prob = drop_scheme.get('fc_drop', 1.0)\n\t\t\tfc_layer = FCLayer('fc_%d' % _i, units, keep_prob=keep_prob)\n\t\t\tlayers.append(fc_layer)\n\t\tfinal_fc_layer = FCLayer('fc_%d' % len(fc_block_config), data_provider.n_classes, use_bn=False, use_bias=True,\n\t\t\t\t\t\t\t\t activation=None)\n\t\tlayers.append(final_fc_layer)\n\t\tself.layer_cascade = LayerCascade('SimpleConvNet', layers)\n\t\t\n\t\tif print_info:\n\t\t\tpass\n\t\treturn self\n\t\n\tdef set_net_from_config(self, net_config_json, init=None, print_info=True):\n\t\tfor key in self.net_config.keys():\n\t\t\tself.net_config[key] = net_config_json[key]\n\t\tinit = init['layer_cascade'] if init is not None else None\n\t\tself.layer_cascade = LayerCascade.set_from_config(net_config_json['layer_cascade'], init)\n\t\tif print_info:\n\t\t\tpass\n\t\treturn self\n\t\n\tdef widen(self, layer_idx, new_width, widen_type='output_dim', noise=None):\n\t\tchange_out_dim, _, _ = self.layer_cascade.widen(layer_idx, new_width, widen_type, noise)\n\t\tif change_out_dim:\n\t\t\traise ValueError('Can not change the final logits number')\n\t\n\tdef deepen(self, layer_idx, new_layer_config):\n\t\treturn self.layer_cascade.deepen(layer_idx, new_layer_config, None)\n\t\n\tdef set_identity4deepen(self, to_set_layers, data_provider, batch_size, batch_num=1, strict=True, noise=None):\n\t\t\"\"\"\n\t\tto_set_layers = [(new_layer, prev_layer), ...]\n\t\t\"\"\"\n\t\ttask_list = {}\n\t\tfor new_layer, prev_layer in to_set_layers:\n\t\t\tif new_layer.ready: continue\n\t\t\tif new_layer.use_bn and strict:\n\t\t\t\ttask_id = id(prev_layer)\n\t\t\t\tif task_id in task_list:\n\t\t\t\t\ttask_list[task_id][1].append(new_layer)\n\t\t\t\telse:\n\t\t\t\t\ttask_list[task_id] = (prev_layer, [new_layer])\n\t\t\telse:\n\t\t\t\tnew_layer.set_identity_layer(strict=strict, noise=noise)\n\t\tif len(task_list) > 0:\n\t\t\tmodel = SimpleConvnet(None, data_provider, None, net_config=self, only_forward=True)\n\t\t\ttask_list = list(task_list.values())\n\t\t\tfetches = [prev_layer.output_op for prev_layer, _ in task_list]\n\t\t\tstatistics = [[0, 0] for _ in task_list]\n\t\t\tfor _i in range(batch_num):\n\t\t\t\tinput_images, _ = data_provider.train.next_batch(batch_size)\n\t\t\t\toutputs = model.sess.run(fetches, feed_dict={model.images: input_images, model.is_training: False})\n\t\t\t\tfor _j, out in enumerate(outputs):\n\t\t\t\t\tout = out.astype('float32')\n\t\t\t\t\taxis = tuple(range(len(out.shape) - 1))\n\t\t\t\t\tmean = np.mean(out, axis=axis, keepdims=True)\n\t\t\t\t\tvariance = np.mean(np.square(out - mean), axis=axis, keepdims=True)\n\t\t\t\t\tmean, variance = np.squeeze(mean), np.squeeze(variance)\n\t\t\t\t\tstatistics[_j][0] += mean\n\t\t\t\t\tstatistics[_j][1] += variance\n\t\t\tfor _j, (prev_layer, new_layers) in enumerate(task_list):\n\t\t\t\tmean, variance = statistics[_j][0] / batch_num, statistics[_j][1] / batch_num\n\t\t\t\tfor new_layer in new_layers:\n\t\t\t\t\tif new_layer.ready: continue\n\t\t\t\t\tparam = {\n\t\t\t\t\t\t'moving_mean': mean,\n\t\t\t\t\t\t'moving_variance': variance,\n\t\t\t\t\t\t'epsilon': self.bn_epsilon,\n\t\t\t\t\t}\n\t\t\t\t\tnew_layer.set_identity_layer(strict=strict, param=param, noise=noise)\n\t\n\t\nclass SimpleConvnet(BasicModel):\n\tdef _build_graph(self, only_forward=False):\n\t\t_input = self.images\n\t\toutput = _input\n\t\t\n\t\toutput = self.net_config.layer_cascade.build(output, self, store_output_op=only_forward)\n\t\t\n\t\tif not only_forward:\n\t\t\tlogits = output\n\t\t\twith tf.variable_scope('L2_Loss'):\n\t\t\t\tl2_loss = tf.add_n([tf.nn.l2_loss(var) for var in tf.trainable_variables()])\n\t\t\t\n\t\t\tprediction = tf.nn.softmax(logits)\n\t\t\t\n\t\t\t# losses\n\t\t\tcross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(\n\t\t\t\tlogits=logits, labels=self.labels))\n\t\t\tself.cross_entropy = cross_entropy\n\t\t\t\n\t\t\t# optimizer and train step\n\t\t\toptimizer = self.build_optimizer(self.learning_rate,\n\t\t\t\t\t\t\t\t\t\t\t self.run_config.opt_config[0], self.run_config.opt_config[1])\n\t\t\tself.train_step = optimizer.minimize(\n\t\t\t\tcross_entropy + l2_loss * self.net_config.weight_decay)\n\t\t\tcorrect_prediction = tf.equal(\n\t\t\t\ttf.argmax(prediction, 1),\n\t\t\t\ttf.argmax(self.labels, 1))\n\t\t\tself.accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))\n"
  },
  {
    "path": "src/aup/Proposer/eas/models/dense_net.py",
    "content": "import tensorflow as tf\nfrom .basic_model import BasicModel\nfrom .layers import ConvLayer, FCLayer, PoolLayer, get_magnifier, apply_noise\nfrom ..data_providers.base_provider import DataProvider\nfrom .layer_cascade import LayerCascade\nfrom .layer_multi_branch import LayerMultiBranch\nimport numpy as np\n\n\ndef get_block_by_name(name):\n\tif name == 'transition':\n\t\treturn TransitionBlock\n\telif name == 'dense_block':\n\t\treturn DenseBlock\n\telse:\n\t\traise ValueError('Unsupported block type: %s' % name)\n\t\n\nclass TransitionBlock(LayerCascade):\n\tdef get_config(self):\n\t\treturn {\n\t\t\t'name': 'transition',\n\t\t\t**super(TransitionBlock, self).get_config(),\n\t\t}\n\t\t\n\t@staticmethod\n\tdef set_from_config(config_json, init=None, return_class=True):\n\t\t_id, layers = LayerCascade.set_from_config(config_json, init, return_class=False)\n\t\treturn TransitionBlock(_id, layers)\n\t\n\tdef prev_widen(self, indices, magnifier, noise=None):\n\t\tsuper(TransitionBlock, self).prev_widen(indices, magnifier, noise=noise)\n\t\treturn False, None, None\n\t\n\tdef widen(self, loc, new_width, widen_type='output_dim', noise=None, input_dim=None):\n\t\treturn super(TransitionBlock, self).widen(loc['layer'], new_width, widen_type, noise=noise)\n\t\n\tdef deepen(self, loc, new_layer_config, input_dim):\n\t\treturn super(TransitionBlock, self).deepen(loc['layer'], new_layer_config, input_dim)\n\t\n\nclass DenseBlock:\n\tdef __init__(self, _id, miniblocks):\n\t\tself._id = _id\n\t\tself.miniblocks = miniblocks\n\t\t\n\t\tself.output_op = None\n\t\n\t@property\n\tdef id(self):\n\t\treturn self._id\n\t\n\t@id.setter\n\tdef id(self, value):\n\t\tself._id = value\n\t\n\t@property\n\tdef depth(self):\n\t\tdepth = 0\n\t\tfor miniblock in self.miniblocks:\n\t\t\tdepth += miniblock.depth\n\t\treturn depth\n\t\n\tdef out_features_dim(self, in_features_dim):\n\t\tout_features_dim = in_features_dim\n\t\tfor miniblock in self.miniblocks:\n\t\t\tout_features_dim += miniblock.out_features_dim\n\t\treturn out_features_dim\n\t\n\tdef build(self, _input, densenet, store_output_op=False):\n\t\toutput = _input\n\t\twith tf.variable_scope(self._id):\n\t\t\tfor miniblock in self.miniblocks:\n\t\t\t\tcomp_out = miniblock.build(output, densenet, store_output_op=store_output_op)\n\t\t\t\toutput = tf.concat(axis=3, values=(output, comp_out))\n\t\tif store_output_op:\n\t\t\tself.output_op = output\n\t\treturn output\n\t\n\tdef get_config(self):\n\t\treturn {\n\t\t\t'name': 'dense_block',\n\t\t\t'_id': self._id,\n\t\t\t'miniblocks': [miniblock.get_config() for miniblock in self.miniblocks]\n\t\t}\n\t\n\tdef renew_init(self, densenet):\n\t\treturn {\n\t\t\t'_id': self._id,\n\t\t\t'miniblocks': [miniblock.renew_init(densenet) for miniblock in self.miniblocks]\n\t\t}\n\t\n\t@staticmethod\n\tdef set_from_config(config_json, init=None):\n\t\t_id = config_json['_id']\n\t\tminiblocks = []\n\t\tfor _i, miniblock_config in enumerate(config_json['miniblocks']):\n\t\t\tminiblock_init = init['miniblocks'][_i] if init is not None else None\n\t\t\tminiblock = LayerMultiBranch.set_from_config(miniblock_config, miniblock_init)\n\t\t\tminiblocks.append(miniblock)\n\t\treturn DenseBlock(_id, miniblocks)\n\t\n\t\"\"\"\n\tNetwork Transformation Operations\n\t\"\"\"\n\tdef insert_miniblock(self, idx, miniblock_config, input_dim, noise=None, scheme=0):\n\t\tassert 0 <= idx < len(self.miniblocks), 'Invalid miniblock index %d' % idx\n\t\tif miniblock_config['bc_mode']:\n\t\t\t# DenseNet-BC\n\t\t\tif scheme == 0:\n\t\t\t\tcopy_idx = idx\n\t\t\t\tcopy_miniblock = self.miniblocks[copy_idx]\n\t\t\t\tnew_in_bottle = copy_miniblock.in_bottle.copy()\n\t\t\t\tnew_in_layer = new_in_bottle.layers[0]\n\t\t\t\tpad_kernel_shape = list(new_in_layer.init['kernel'].shape)\n\t\t\t\tpad_kernel_shape[2] = copy_miniblock.out_features_dim\n\t\t\t\tnew_in_layer.init['kernel'] = \\\n\t\t\t\t\tnp.concatenate([new_in_layer.init['kernel'], np.zeros(pad_kernel_shape)], axis=2)\n\t\t\t\tif new_in_layer.pre_activation and new_in_layer.use_bn:\n\t\t\t\t\tnew_in_layer.init['beta'] = \\\n\t\t\t\t\t\tnp.concatenate([new_in_layer.init['beta'], np.zeros([copy_miniblock.out_features_dim])])\n\t\t\t\t\tnew_in_layer.init['gamma'] = \\\n\t\t\t\t\t\tnp.concatenate([new_in_layer.init['gamma'], np.ones([copy_miniblock.out_features_dim])])\n\t\t\t\t\tnew_in_layer.init['moving_mean'] = \\\n\t\t\t\t\t\tnp.concatenate([new_in_layer.init['moving_mean'], np.zeros([copy_miniblock.out_features_dim])])\n\t\t\t\t\tnew_in_layer.init['moving_variance'] = \\\n\t\t\t\t\t\tnp.concatenate([new_in_layer.init['moving_variance'], np.ones([copy_miniblock.out_features_dim])])\n\t\t\t\tnew_in_layer.init['kernel'] = apply_noise(new_in_layer.init['kernel'], noise.get('wider'))\n\t\t\t\tif copy_miniblock.out_bottle is None:\n\t\t\t\t\tnew_branches, indices = copy_miniblock.remapped_branches(noise=noise)\n\t\t\t\t\tnew_miniblock = LayerMultiBranch('M_%d' % (idx + 2), new_branches,\n\t\t\t\t\t\t\t\t\t\t\t\t\t merge=copy_miniblock.merge, in_bottle=new_in_bottle)\n\t\t\t\t\told_size = len(indices)\n\t\t\t\t\tindices = np.concatenate([np.arange(old_size), indices])\n\t\t\t\t\tmagnifier = get_magnifier(old_size, indices)\n\t\t\t\t\t\n\t\t\t\t\tprev_miniblock_out_dim = input_dim\n\t\t\t\t\tfor _i in range(0, idx):\n\t\t\t\t\t\tprev_miniblock_out_dim += self.miniblocks[_i].out_features_dim\n\t\t\t\t\tindices = np.concatenate([\n\t\t\t\t\t\tnp.arange(prev_miniblock_out_dim),\n\t\t\t\t\t\tindices + prev_miniblock_out_dim,\n\t\t\t\t\t])\n\t\t\t\t\tmagnifier = np.concatenate([\n\t\t\t\t\t\t[1] * prev_miniblock_out_dim,\n\t\t\t\t\t\tmagnifier,\n\t\t\t\t\t])\n\t\t\t\t\tprev_miniblock_out_dim += old_size\n\t\t\t\t\tfor _i in range(idx + 1, len(self.miniblocks)):\n\t\t\t\t\t\tminiblock_out_dim = self.miniblocks[_i].out_features_dim\n\t\t\t\t\t\tself.miniblocks[_i].id = 'M_%d' % (_i + 2)\n\t\t\t\t\t\tself.miniblocks[_i].prev_widen(indices, magnifier, noise=noise)\n\t\t\t\t\t\tindices = np.concatenate([\n\t\t\t\t\t\t\tindices,\n\t\t\t\t\t\t\tnp.arange(prev_miniblock_out_dim, prev_miniblock_out_dim + miniblock_out_dim)\n\t\t\t\t\t\t])\n\t\t\t\t\t\tmagnifier = np.concatenate([\n\t\t\t\t\t\t\tmagnifier,\n\t\t\t\t\t\t\t[1] * miniblock_out_dim,\n\t\t\t\t\t\t])\n\t\t\t\t\t\tprev_miniblock_out_dim += miniblock_out_dim\n\t\t\t\t\tself.miniblocks = self.miniblocks[:idx + 1] + [new_miniblock] + self.miniblocks[idx + 1:]\n\t\t\t\t\treturn indices, magnifier\n\t\t\t\telse:\n\t\t\t\t\traise NotImplementedError\n\t\t\telse:\n\t\t\t\t# identity scheme\n\t\t\t\traise NotImplementedError\n\t\telse:\n\t\t\t# DenseNet without BC\n\t\t\traise NotImplementedError\n\t\n\tdef prev_widen(self, indices, magnifier, noise=None):\n\t\told_size = np.max(indices) + 1\n\t\tprev_miniblock_out_dim = old_size\n\t\tfor miniblock in self.miniblocks:\n\t\t\tminiblock_out_dim = miniblock.out_features_dim\n\t\t\tminiblock.prev_widen(indices, magnifier, noise=noise)\n\t\t\tindices = np.concatenate([\n\t\t\t\tindices,\n\t\t\t\tnp.arange(prev_miniblock_out_dim, prev_miniblock_out_dim + miniblock_out_dim)\n\t\t\t])\n\t\t\tmagnifier = np.concatenate([\n\t\t\t\tmagnifier,\n\t\t\t\t[1] * miniblock_out_dim,\n\t\t\t])\n\t\t\tprev_miniblock_out_dim += miniblock_out_dim\n\t\treturn True, indices, magnifier\n\t\n\tdef widen(self, loc, new_width, widen_type='output_dim', noise=None, input_dim=3):\n\t\tminiblock_idx = loc['miniblock']\n\t\tminiblock = self.miniblocks[miniblock_idx]\n\t\told_miniblock_out_dim = miniblock.out_features_dim\n\t\tchange_out_dim, indices, magnifier = miniblock.widen(loc, new_width, widen_type, noise=noise)\n\t\tif change_out_dim:\n\t\t\tprev_miniblock_out_dim = input_dim\n\t\t\tfor _i in range(0, miniblock_idx):\n\t\t\t\tprev_miniblock_out_dim += self.miniblocks[_i].out_features_dim\n\t\t\tindices = np.concatenate([\n\t\t\t\tnp.arange(prev_miniblock_out_dim),\n\t\t\t\tindices + prev_miniblock_out_dim,\n\t\t\t])\n\t\t\tmagnifier = np.concatenate([\n\t\t\t\t[1] * prev_miniblock_out_dim,\n\t\t\t\tmagnifier,\n\t\t\t])\n\t\t\tprev_miniblock_out_dim += old_miniblock_out_dim\n\t\t\tfor _i in range(miniblock_idx + 1, len(self.miniblocks)):\n\t\t\t\tminiblock_out_dim = self.miniblocks[_i].out_features_dim\n\t\t\t\tself.miniblocks[_i].prev_widen(indices, magnifier, noise=noise)\n\t\t\t\tindices = np.concatenate([\n\t\t\t\t\tindices,\n\t\t\t\t\tnp.arange(prev_miniblock_out_dim, prev_miniblock_out_dim + miniblock_out_dim)\n\t\t\t\t])\n\t\t\t\tmagnifier = np.concatenate([\n\t\t\t\t\tmagnifier,\n\t\t\t\t\t[1] * miniblock_out_dim,\n\t\t\t\t])\n\t\t\t\tprev_miniblock_out_dim += miniblock_out_dim\n\t\t\treturn True, indices, magnifier\n\t\telse:\n\t\t\treturn False, None, None\n\t\n\tdef deepen(self, loc, new_layer_config, input_dim):\n\t\tminiblock_idx = loc['miniblock']\n\t\tfor _i in range(0, miniblock_idx):\n\t\t\tinput_dim += self.miniblocks[_i].out_features_dim\n\t\treturn self.miniblocks[miniblock_idx].deepen(loc, new_layer_config, input_dim)\n\t\t\n\nclass DenseNetConfig:\n\tdef __init__(self):\n\t\tself.net_config = {\n\t\t\t'model_type': None,\n\t\t\t'weight_decay': None,\n\t\t\t'first_ratio': None,\n\t\t\t'reduction': None,\n\t\t\t'bc_ratio': None,\n\t\t\t'bn_epsilon': None,\n\t\t\t'bn_decay': None,\n\t\t\t'pre_activation': None,\n\t\t}\n\t\tself.blocks = None\n\t\n\t@property\n\tdef model_type(self): return self.net_config['model_type']\n\t\n\t@property\n\tdef weight_decay(self): return self.net_config['weight_decay']\n\t\n\t@property\n\tdef first_ratio(self): return self.net_config['first_ratio']\n\t\n\t@property\n\tdef reduction(self): return self.net_config['reduction']\n\t\n\t@property\n\tdef bc_ratio(self): return self.net_config['bc_ratio']\n\t\n\t@property\n\tdef bn_epsilon(self): return self.net_config['bn_epsilon']\n\t\n\t@property\n\tdef bn_decay(self): return self.net_config['bn_decay']\n\t\n\t@property\n\tdef depth(self):\n\t\tdepth = 0\n\t\tfor block in self.blocks:\n\t\t\tdepth += block.depth\n\t\treturn depth\n\t\n\t@property\n\tdef average_growth_rate(self):\n\t\tgrowth_rate_list = []\n\t\tfor block in self.blocks:\n\t\t\tif isinstance(block, DenseBlock):\n\t\t\t\tfor miniblock in block.miniblocks:\n\t\t\t\t\tgrowth_rate = miniblock.out_features_dim\n\t\t\t\t\tgrowth_rate_list.append(growth_rate)\n\t\treturn np.mean(growth_rate_list)\n\t\n\tdef copy(self):\n\t\tnet_config = DenseNetConfig()\n\t\tnet_config.set_net_from_config(self.get_config(), self.renew_init(None), print_info=False)\n\t\treturn net_config\n\t\n\tdef get_config(self):\n\t\treturn {\n\t\t\t'name': 'DenseNet',\n\t\t\t**self.net_config,\n\t\t\t'blocks': [block.get_config() for block in self.blocks]\n\t\t}\n\n\tdef renew_init(self, densenet):\n\t\treturn {\n\t\t\t'blocks': [block.renew_init(densenet) for block in self.blocks]\n\t\t}\n\t\n\tdef set_standard_dense_net(self, data_provider: DataProvider, growth_rate, depth, total_blocks,\n\t\t\t\t\t\t\t   keep_prob, weight_decay, model_type,\n\t\t\t\t\t\t\t   first_ratio=2, reduction=1.0, bc_ratio=4,\n\t\t\t\t\t\t\t   bn_epsilon=1e-5, bn_decay=0.9, print_info=True,\n\t\t\t\t\t\t\t   pre_activation=True, **kwargs):\n\t\tself.net_config = {\n\t\t\t'model_type': model_type,\n\t\t\t'weight_decay': weight_decay,\n\t\t\t'first_ratio': first_ratio,\n\t\t\t'reduction': reduction,\n\t\t\t'bc_ratio': bc_ratio,\n\t\t\t'bn_epsilon': bn_epsilon,\n\t\t\t'bn_decay': bn_decay,\n\t\t\t'pre_activation': pre_activation,\n\t\t}\n\t\t\n\t\timage_size = data_provider.data_shape[0]\n\t\t\n\t\tfirst_output_features = growth_rate * first_ratio\n\t\tbc_mode = (model_type == 'DenseNet-BC')\n\t\tlayers_per_block = (depth - (total_blocks + 1)) // total_blocks\n\t\tif bc_mode: layers_per_block = layers_per_block // 2\n\t\t\n\t\t# initial conv\n\t\tif pre_activation:\n\t\t\tinit_conv_layer = ConvLayer('conv_0', first_output_features, kernel_size=3, activation=None, use_bn=False)\n\t\telse:\n\t\t\tinit_conv_layer = ConvLayer('conv_0', first_output_features, kernel_size=3, pre_activation=False)\n\t\tinit_transition = TransitionBlock('T_0_first', [init_conv_layer])\n\t\tself.blocks = [init_transition]\n\t\t\n\t\t# Dense Blocks\n\t\tin_features_dim = first_output_features\n\t\tfor block_idx in range(1, total_blocks + 1):\n\t\t\tminiblocks = []\n\t\t\tblock_id = 'D_%d' % block_idx\n\t\t\tfor miniblock_idx in range(1, layers_per_block + 1):\n\t\t\t\tminiblock_id = 'M_%d' % miniblock_idx\n\t\t\t\tin_bottle = None\n\t\t\t\tif bc_mode:\n\t\t\t\t\tbottelneck_layer = ConvLayer('conv_0', growth_rate * bc_ratio, kernel_size=1, keep_prob=keep_prob,\n\t\t\t\t\t\t\t\t\t\t\t\t pre_activation=pre_activation)\n\t\t\t\t\tin_bottle = LayerCascade('in_bottle', [bottelneck_layer])\n\t\t\t\t\n\t\t\t\tbranch_0 = LayerCascade('B_0', [\n\t\t\t\t\tConvLayer('conv_0', growth_rate, kernel_size=3,\n\t\t\t\t\t\t\t  keep_prob=keep_prob, pre_activation=pre_activation)\n\t\t\t\t])\n\t\t\t\tminiblocks.append(LayerMultiBranch(miniblock_id, [branch_0], in_bottle=in_bottle))\n\t\t\tdense_block = DenseBlock(block_id, miniblocks)\n\t\t\tself.blocks += [dense_block]\n\t\t\t\n\t\t\tout_features_dim = dense_block.out_features_dim(in_features_dim)\n\t\t\tif block_idx != total_blocks:\n\t\t\t\tout_features_dim = int(out_features_dim * reduction)\n\t\t\t\ttransition_id = 'T_%d_middle' % block_idx\n\t\t\t\tconv_layer = ConvLayer('conv_0', out_features_dim, kernel_size=1, keep_prob=keep_prob,\n\t\t\t\t\t\t\t\t\t   pre_activation=pre_activation)\n\t\t\t\tavg_pool_layer = PoolLayer('pool_0', 'avg', kernel_size=2, strides=2)\n\t\t\t\ttransition = TransitionBlock(transition_id, [conv_layer, avg_pool_layer])\n\t\t\t\tself.blocks.append(transition)\n\t\t\t\timage_size = image_size // 2\n\t\t\tin_features_dim = out_features_dim\n\t\t\n\t\t# Transition to classes\n\t\tif pre_activation:\n\t\t\tglobal_avg_pool = PoolLayer('pool_0', 'avg', kernel_size=image_size, strides=image_size,\n\t\t\t\t\t\t\t\t\t\tactivation='relu', use_bn=True)\n\t\telse:\n\t\t\tglobal_avg_pool = PoolLayer('pool_0', 'avg', kernel_size=image_size, strides=image_size,\n\t\t\t\t\t\t\t\t\t\tpre_activation=False)\n\t\tfinal_fc_layer = FCLayer('fc_0', data_provider.n_classes, use_bn=False, use_bias=True, activation=None)\n\t\ttransition_to_classes = TransitionBlock('T_to_classes', [global_avg_pool, final_fc_layer])\n\t\tself.blocks.append(transition_to_classes)\n\t\t\n\t\t# print information about the network\n\t\tif print_info:\n\t\t\tprint('Set Standard %s' % model_type)\n\t\t\n\t\t\tif not bc_mode:\n\t\t\t\tprint('Build %s model with %d blocks, '\n\t\t\t\t\t  '%d composite layers each.' % (model_type, total_blocks, layers_per_block))\n\t\t\tif bc_mode:\n\t\t\t\tprint('Build %s model with %d blocks, '\n\t\t\t\t\t  '%d bottleneck layers and %d composite layers each.' % (\n\t\t\t\t\t\t  model_type, total_blocks, layers_per_block, layers_per_block))\n\t\t\tprint('Reduction at transition layers: %.2f' % reduction)\n\t\treturn self\n\t\t\n\tdef set_net_from_config(self, net_config_json, init=None, print_info=True):\n\t\t# load config and init (if exist)\n\t\tfor key in self.net_config.keys():\n\t\t\tself.net_config[key] = net_config_json[key]\n\t\tself.blocks = []\n\t\tfor _i, block_config in enumerate(net_config_json['blocks']):\n\t\t\tblock_init = init['blocks'][_i] if init is not None else None\n\t\t\tblock = get_block_by_name(block_config['name'])\n\t\t\tself.blocks.append(block.set_from_config(block_config, block_init))\n\t\tif print_info:\n\t\t\tprint('Set DenseNet from config:')\n\t\t\tfor k, v in self.net_config.items():\n\t\t\t\tprint('\\t%s: %s' % (k, v))\n\t\t\tprint('\\t%s: %d' % ('depth', self.depth))\n\t\treturn self\n\t\n\tdef widen(self, loc, new_width, widen_type='output_dim', noise=None, image_channel=3):\n\t\t\"\"\"\n\t\twiden_type: \"output_dim\" or \"kernel\"\n\t\t\"\"\"\n\t\tblock_idx = loc['block']\n\t\tif block_idx == 0:\n\t\t\tinput_dim = image_channel\n\t\telif isinstance(self.blocks[block_idx - 1], TransitionBlock):\n\t\t\tinput_dim = self.blocks[block_idx - 1].out_features_dim\n\t\telse:\n\t\t\tinput_dim = self.blocks[block_idx - 1].out_features_dim(self.blocks[block_idx - 2].out_features_dim)\n\t\t\n\t\tchange_out_dim, indices, magnifier = \\\n\t\t\tself.blocks[block_idx].widen(loc, new_width, widen_type, noise=noise, input_dim=input_dim)\n\t\twhile change_out_dim:\n\t\t\tchange_out_dim, indices, magnifier = self.blocks[block_idx + 1].prev_widen(indices, magnifier, noise=noise)\n\t\t\tblock_idx += 1\n\t\t\n\tdef deepen(self, loc, new_layer_config, image_channel=3):\n\t\tnew_layer_config['pre_activation'] = self.net_config['pre_activation']\n\t\tblock_idx = loc['block']\n\t\tif block_idx == 0:\n\t\t\tinput_dim = image_channel\n\t\telif isinstance(self.blocks[block_idx - 1], TransitionBlock):\n\t\t\tinput_dim = self.blocks[block_idx - 1].out_features_dim\n\t\telse:\n\t\t\tinput_dim = self.blocks[block_idx - 1].out_features_dim(self.blocks[block_idx - 2].out_features_dim)\n\t\t\n\t\treturn self.blocks[block_idx].deepen(loc, new_layer_config, input_dim)\n\t\n\tdef set_identity4deepen(self, to_set_layers, data_provider, batch_size, batch_num=1, strict=True, noise=None):\n\t\t\"\"\"\n\t\tto_set_layers = [(new_layer, prev_layer), ...]\n\t\t\"\"\"\n\t\ttask_list = {}\n\t\tfor new_layer, prev_layer in to_set_layers:\n\t\t\tif new_layer.ready: continue\n\t\t\tif new_layer.use_bn and strict:\n\t\t\t\ttask_id = id(prev_layer)\n\t\t\t\tif task_id in task_list:\n\t\t\t\t\ttask_list[task_id][1].append(new_layer)\n\t\t\t\telse:\n\t\t\t\t\ttask_list[task_id] = (prev_layer, [new_layer])\n\t\t\telse:\n\t\t\t\tnew_layer.set_identity_layer(strict=strict, noise=noise)\n\t\tif len(task_list) > 0:\n\t\t\tmodel = DenseNet(None, data_provider, None, net_config=self, only_forward=True)\n\t\t\ttask_list = list(task_list.values())\n\t\t\tfetches = [prev_layer.output_op for prev_layer, _ in task_list]\n\t\t\tstatistics = [[0, 0] for _ in task_list]\n\t\t\tfor _i in range(batch_num):\n\t\t\t\tinput_images, _ = data_provider.train.next_batch(batch_size)\n\t\t\t\toutputs = model.sess.run(fetches, feed_dict={model.images: input_images, model.is_training: False})\n\t\t\t\tfor _j, out in enumerate(outputs):\n\t\t\t\t\tout = out.astype('float32')\n\t\t\t\t\taxis = tuple(range(len(out.shape) - 1))\n\t\t\t\t\tmean = np.mean(out, axis=axis, keepdims=True)\n\t\t\t\t\tvariance = np.mean(np.square(out - mean), axis=axis, keepdims=True)\n\t\t\t\t\tmean, variance = np.squeeze(mean), np.squeeze(variance)\n\t\t\t\t\tstatistics[_j][0] += mean\n\t\t\t\t\tstatistics[_j][1] += variance\n\t\t\tfor _j, (prev_layer, new_layers) in enumerate(task_list):\n\t\t\t\tmean, variance = statistics[_j][0] / batch_num, statistics[_j][1] / batch_num\n\t\t\t\tfor new_layer in new_layers:\n\t\t\t\t\tif new_layer.ready: continue\n\t\t\t\t\tparam = {\n\t\t\t\t\t\t'moving_mean': mean,\n\t\t\t\t\t\t'moving_variance': variance,\n\t\t\t\t\t\t'epsilon': self.bn_epsilon,\n\t\t\t\t\t}\n\t\t\t\t\tnew_layer.set_identity_layer(strict=strict, param=param, noise=noise)\n\t\n\tdef insert_miniblock(self, loc, miniblock_config, image_channel=3, noise=None):\n\t\tblock_idx = loc['block']\n\t\tif block_idx == 0:\n\t\t\tinput_dim = image_channel\n\t\telif isinstance(self.blocks[block_idx - 1], TransitionBlock):\n\t\t\tinput_dim = self.blocks[block_idx - 1].out_features_dim\n\t\telse:\n\t\t\tinput_dim = self.blocks[block_idx - 1].out_features_dim(self.blocks[block_idx - 2].out_features_dim)\n\t\t\n\t\tassert isinstance(self.blocks[block_idx], DenseBlock), 'Invalid'\n\t\tindices, magnifier = \\\n\t\t\tself.blocks[block_idx].insert_miniblock(loc['miniblock'], miniblock_config, input_dim, noise=noise)\n\t\tself.blocks[block_idx + 1].prev_widen(indices, magnifier, noise=noise)\n\t\t\n\t\t\nclass DenseNet(BasicModel):\n\tdef _build_graph(self, only_forward=False):\n\t\t_input = self.images\n\t\toutput = _input\n\t\t# building blocks (transition and dense)\n\t\tfor block in self.net_config.blocks:\n\t\t\toutput = block.build(output, self, store_output_op=only_forward)\n\t\t\n\t\tif not only_forward:\n\t\t\tlogits = output\n\t\t\twith tf.variable_scope('L2_Loss'):\n\t\t\t\tl2_loss = tf.add_n([tf.nn.l2_loss(var) for var in tf.trainable_variables()])\n\t\t\t\n\t\t\tprediction = tf.nn.softmax(logits)\n\t\t\t\n\t\t\t# losses\n\t\t\tcross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(\n\t\t\t\tlogits=logits, labels=self.labels))\n\t\t\tself.cross_entropy = cross_entropy\n\t\t\t\n\t\t\t# optimizer and train step\n\t\t\toptimizer = self.build_optimizer(self.learning_rate,\n\t\t\t\t\t\t\t\t\t\t\t self.run_config.opt_config[0], self.run_config.opt_config[1])\n\t\t\tself.train_step = optimizer.minimize(\n\t\t\t\tcross_entropy + l2_loss * self.net_config.weight_decay)\n\t\t\tcorrect_prediction = tf.equal(\n\t\t\t\ttf.argmax(prediction, 1),\n\t\t\t\ttf.argmax(self.labels, 1))\n\t\t\tself.accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))\n"
  },
  {
    "path": "src/aup/Proposer/eas/models/layer_cascade.py",
    "content": "from .layers import ConvLayer, FCLayer, PoolLayer, get_layer_by_name\nimport tensorflow as tf\n\n\nclass LayerCascade:\n\tdef __init__(self, _id, layers):\n\t\tself._id = _id\n\t\tself.layers = layers\n\t\t\n\t\tself.output_op = None\n\t\n\t@property\n\tdef id(self):\n\t\treturn self._id\n\t\n\t@id.setter\n\tdef id(self, value):\n\t\tself._id = value\n\t\n\t@property\n\tdef out_features_dim(self):\n\t\tfor layer in self.layers[::-1]:\n\t\t\tif isinstance(layer, ConvLayer):\n\t\t\t\treturn layer.filter_num\n\t\t\telif isinstance(layer, FCLayer):\n\t\t\t\treturn layer.units\n\t\treturn None\n\t\n\t@property\n\tdef depth(self):\n\t\tdepth = 0\n\t\tfor layer in self.layers:\n\t\t\tif isinstance(layer, ConvLayer) or isinstance(layer, FCLayer):\n\t\t\t\tdepth += 1\n\t\treturn depth\n\t\n\tdef get_str(self):\n\t\tlayers_str = [layer.layer_str for layer in self.layers]\n\t\treturn '-'.join(layers_str)\n\t\n\tdef build(self, _input, densenet, store_output_op=False):\n\t\toutput = _input\n\t\twith tf.variable_scope(self._id):\n\t\t\tfor layer in self.layers:\n\t\t\t\toutput = layer.build(output, densenet, store_output_op=store_output_op)\n\t\tif store_output_op:\n\t\t\tself.output_op = output\n\t\treturn output\n\t\n\tdef get_config(self):\n\t\treturn {\n\t\t\t'_id': self._id,\n\t\t\t'layers': [layer.get_config() for layer in self.layers]\n\t\t}\n\t\n\tdef renew_init(self, densenet):\n\t\treturn {\n\t\t\t'_id': self._id,\n\t\t\t'layers': [layer.renew_init(densenet) for layer in self.layers]\n\t\t}\n\t\n\tdef copy(self):\n\t\treturn self.set_from_config(self.get_config(), init=self.renew_init(None))\n\t\n\t@staticmethod\n\tdef set_from_config(config_json, init=None, return_class=True):\n\t\t_id = config_json['_id']\n\t\tlayers = []\n\t\tfor _i, layer_config in enumerate(config_json['layers']):\n\t\t\tlayer_init = init['layers'][_i] if init is not None else None\n\t\t\tlayer = get_layer_by_name(layer_config['name'])\n\t\t\tlayers.append(layer.set_from_config(layer_config, layer_init))\n\t\tif return_class:\n\t\t\treturn LayerCascade(_id, layers)\n\t\telse:\n\t\t\treturn _id, layers\n\t\n\t\"\"\"\n\tNetwork Transformation Operations\n\t\"\"\"\n\t\n\tdef prev_widen(self, indices, magnifier, noise=None):\n\t\tfor layer in self.layers:\n\t\t\tif isinstance(layer, ConvLayer) or isinstance(layer, FCLayer):\n\t\t\t\tlayer.prev_widen(indices, magnifier, noise=noise)\n\t\t\t\tbreak\n\t\t\telse:\n\t\t\t\tlayer.prev_widen(indices, magnifier, noise=noise)\n\t\n\tdef widen(self, idx, new_width, widen_type='output_dim', noise=None):\n\t\tassert idx < len(self.layers), 'Index out of range: %d' % idx\n\t\tif widen_type == 'output_dim':\n\t\t\tassert isinstance(self.layers[idx], ConvLayer) or \\\n\t\t\t\t   isinstance(self.layers[idx], FCLayer), 'Operation not available'\n\t\t\tto_widen_layer = self.layers[idx]\n\t\t\t\n\t\t\tif isinstance(to_widen_layer, ConvLayer):\n\t\t\t\tindices, magnifier = to_widen_layer.widen_filters(new_filter_num=new_width, noise=noise)\n\t\t\telse:\n\t\t\t\tindices, magnifier = to_widen_layer.widen_units(new_units_num=new_width, noise=noise)\n\t\t\tafter_widen_layer = None\n\t\t\tfor _i in range(idx + 1, len(self.layers)):\n\t\t\t\tif isinstance(self.layers[_i], ConvLayer) or isinstance(self.layers[_i], FCLayer):\n\t\t\t\t\tself.layers[_i].prev_widen(indices, magnifier, noise=noise)\n\t\t\t\t\tafter_widen_layer = self.layers[_i]\n\t\t\t\t\tbreak\n\t\t\t\telse:\n\t\t\t\t\tself.layers[_i].prev_widen(indices, magnifier, noise=noise)\n\t\t\treturn after_widen_layer is None, indices, magnifier\n\t\telse:\n\t\t\traise ValueError('%s is not supported' % widen_type)\n\t\n\tdef deepen(self, idx, new_layer_config, input_dim):\n\t\tassert idx < len(self.layers), 'Index out of range: %d' % idx\n\t\tif new_layer_config['name'] == 'fc':\n\t\t\tassert idx == len(self.layers) - 1 or isinstance(self.layers[idx + 1], FCLayer), 'Invalid'\n\t\t\tassert isinstance(self.layers[idx], FCLayer) or isinstance(self.layers[idx], PoolLayer), 'Invalid'\n\t\t\t# prepare the new fc layer\n\t\t\tunits = input_dim\n\t\t\tfor _i in range(idx, -1, -1):\n\t\t\t\tif isinstance(self.layers[_i], FCLayer):\n\t\t\t\t\tunits = self.layers[_i].units\n\t\t\t\t\tbreak\n\t\t\t\telif isinstance(self.layers[_i], ConvLayer):\n\t\t\t\t\tunits = self.layers[_i].filter_num\n\t\t\t\t\tbreak\n\t\t\tfc_idx = 0\n\t\t\tfor _i in range(0, idx + 1):\n\t\t\t\tif isinstance(self.layers[_i], FCLayer):\n\t\t\t\t\tfc_idx += 1\n\t\t\t_id = 'fc_%d' % fc_idx\n\t\t\t# change the id of following fc layers\n\t\t\tfor _i in range(idx + 1, len(self.layers)):\n\t\t\t\tif isinstance(self.layers[_i], FCLayer):\n\t\t\t\t\tself.layers[_i].id = 'fc_%d' % (fc_idx + 1)\n\t\t\t\t\tfc_idx += 1\n\t\t\tprev_layer = None\n\t\t\tfor _i in range(idx, -1, -1):\n\t\t\t\tif self.layers[_i].ready:\n\t\t\t\t\tprev_layer = self.layers[_i]\n\t\t\t\t\tbreak\n\t\t\tassert prev_layer is not None, 'Invalid'\n\t\t\tnew_fc_layer = FCLayer(_id, units, ready=False, **new_layer_config)\n\t\t\t# insert the new layer into the cascade\n\t\t\tself.layers = self.layers[:idx + 1] + [new_fc_layer] + self.layers[idx + 1:]\n\t\t\treturn new_fc_layer, prev_layer\n\t\telif new_layer_config['name'] == 'conv':\n\t\t\tassert idx == len(self.layers) - 1 or not isinstance(self.layers[idx + 1], FCLayer), 'Invalid'\n\t\t\tassert isinstance(self.layers[idx], ConvLayer) or isinstance(self.layers[idx], FCLayer), 'Invalid'\n\t\t\t# prepare the new conv layer\n\t\t\tfilter_num = input_dim\n\t\t\tfor _i in range(idx, -1, -1):\n\t\t\t\tif isinstance(self.layers[_i], ConvLayer):\n\t\t\t\t\tfilter_num = self.layers[_i].filter_num\n\t\t\t\t\tbreak\n\t\t\tconv_idx = 0\n\t\t\tfor _i in range(0, idx + 1):\n\t\t\t\tif isinstance(self.layers[_i], ConvLayer):\n\t\t\t\t\tconv_idx += 1\n\t\t\t_id = 'conv_%d' % conv_idx\n\t\t\t# change the id of following conv layers\n\t\t\tfor _i in range(idx + 1, len(self.layers)):\n\t\t\t\tif isinstance(self.layers[_i], ConvLayer):\n\t\t\t\t\tself.layers[_i].id = 'conv_%d' % (conv_idx + 1)\n\t\t\t\t\tconv_idx += 1\n\t\t\tprev_layer = None\n\t\t\tfor _i in range(idx, -1, -1):\n\t\t\t\tif self.layers[_i].ready:\n\t\t\t\t\tprev_layer = self.layers[_i]\n\t\t\t\t\tbreak\n\t\t\tassert prev_layer is not None, 'Invalid'\n\t\t\tnew_conv_layer = ConvLayer(_id, filter_num, ready=False, **new_layer_config)\n\t\t\tself.layers = self.layers[:idx + 1] + [new_conv_layer] + self.layers[idx + 1:]\n\t\t\treturn new_conv_layer, prev_layer\n\t\telse:\n\t\t\traise ValueError('Not support to insert a %s layer' % new_layer_config['name'])\n"
  },
  {
    "path": "src/aup/Proposer/eas/models/layer_multi_branch.py",
    "content": "import tensorflow as tf\nimport numpy as np\nfrom .layer_cascade import LayerCascade\n\n\nclass LayerMultiBranch:\n\tdef __init__(self, _id, branches, merge=None, in_bottle=None, out_bottle=None):\n\t\tself._id = _id\n\t\tself.in_bottle = in_bottle\n\t\tself.branches = branches\n\t\tself.out_bottle = out_bottle\n\t\tself.merge = merge\n\t\tif self.merge == 'add':\n\t\t\tout_dim = []\n\t\t\tfor branch in self.branches:\n\t\t\t\tout_dim.append(branch.out_features_dim)\n\t\t\tassert np.std(out_dim) == 0, '<%s> require the output dim of all branches are the same' % self.merge\n\t\telif self.merge is None:\n\t\t\tassert len(self.branches) == 1, 'Invalid'\n\t\t\n\t\tself.output_op = None\n\t\n\t@property\n\tdef id(self):\n\t\treturn self._id\n\t\n\t@id.setter\n\tdef id(self, value):\n\t\tself._id = value\n\t\n\t@property\n\tdef out_features_dim(self):\n\t\tif self.out_bottle:\n\t\t\treturn self.out_bottle.out_features_dim\n\t\tout_dim = []\n\t\tfor branch in self.branches:\n\t\t\tout_dim.append(branch.out_features_dim)\n\t\tif self.merge == 'concat':\n\t\t\treturn np.sum(out_dim)\n\t\telif self.merge == 'add' or self.merge is None:\n\t\t\treturn out_dim[0]\n\t\telse:\n\t\t\tpass\n\t\n\t@property\n\tdef depth(self):\n\t\tdepth = 0\n\t\tif self.in_bottle:\n\t\t\tdepth += self.in_bottle.depth\n\t\tif self.out_bottle:\n\t\t\tdepth += self.out_bottle.depth\n\t\tbranch_depth = []\n\t\tfor branch in self.branches:\n\t\t\tbranch_depth.append(branch.depth)\n\t\tdepth += np.max(branch_depth)\n\t\treturn depth\n\t\n\tdef get_str(self):\n\t\tin_bottle_str = 'N' if self.in_bottle is None else self.in_bottle.get_str()\n\t\tbranches_str = [branch.get_str() for branch in self.branches]\n\t\tbranches_str = '+'.join(branches_str)\n\t\tout_bottle_str = 'N' if self.out_bottle is None else self.out_bottle.get_str()\n\t\treturn '%s~%s~%s' % (in_bottle_str, branches_str, out_bottle_str)\n\t\n\tdef build(self, _input, densenet, store_output_op=False):\n\t\twith tf.variable_scope(self._id):\n\t\t\toutput = _input\n\t\t\t# in bottle\n\t\t\tif self.in_bottle:\n\t\t\t\toutput = self.in_bottle.build(output, densenet, store_output_op=store_output_op)\n\t\t\t# branches\n\t\t\tbranch_out = []\n\t\t\tfor branch in self.branches:\n\t\t\t\tbranch_out.append(branch.build(output, densenet, store_output_op=store_output_op))\n\t\t\tif self.merge == 'concat':\n\t\t\t\toutput = tf.concat(branch_out, axis=3)\n\t\t\telif self.merge == 'add':\n\t\t\t\toutput = tf.add_n(branch_out)\n\t\t\telif self.merge is None:\n\t\t\t\toutput = branch_out[0]\n\t\t\telse:\n\t\t\t\traise ValueError('Do not support <%s>' % self.merge)\n\t\t\t# out bottle\n\t\t\tif self.out_bottle:\n\t\t\t\toutput = self.out_bottle.build(output, densenet, store_output_op=store_output_op)\n\t\tif store_output_op:\n\t\t\tself.output_op = output\n\t\treturn output\n\t\n\tdef get_config(self):\n\t\treturn {\n\t\t\t'_id': self._id,\n\t\t\t'merge': self.merge,\n\t\t\t'branches': [branch.get_config() for branch in self.branches],\n\t\t\t'in_bottle': None if self.in_bottle is None else self.in_bottle.get_config(),\n\t\t\t'out_bottle': None if self.out_bottle is None else self.out_bottle.get_config(),\n\t\t}\n\t\n\tdef renew_init(self, densenet):\n\t\treturn {\n\t\t\t'_id': self._id,\n\t\t\t'branches': [branch.renew_init(densenet) for branch in self.branches],\n\t\t\t'in_bottle': None if self.in_bottle is None else self.in_bottle.renew_init(densenet),\n\t\t\t'out_bottle': None if self.out_bottle is None else self.out_bottle.renew_init(densenet),\n\t\t}\n\t\n\t@staticmethod\n\tdef set_from_config(config_json, init=None):\n\t\t_id = config_json['_id']\n\t\tmerge = config_json['merge']\n\t\tbranches = []\n\t\tfor _i, branch_config in enumerate(config_json['branches']):\n\t\t\tbranch_init = init['branches'][_i] if init is not None else None\n\t\t\tbranch = LayerCascade.set_from_config(branch_config, branch_init)\n\t\t\tbranches.append(branch)\n\t\tin_bottle = config_json['in_bottle']\n\t\tif in_bottle:\n\t\t\tin_bottle_init = init['in_bottle'] if init is not None else None\n\t\t\tin_bottle = LayerCascade.set_from_config(in_bottle, in_bottle_init)\n\t\tout_bottle = config_json['out_bottle']\n\t\tif out_bottle:\n\t\t\tout_bottle_init = init['out_bottle'] if init is not None else None\n\t\t\tout_bottle = LayerCascade.set_from_config(out_bottle, out_bottle_init)\n\t\treturn LayerMultiBranch(_id, branches, merge, in_bottle=in_bottle, out_bottle=out_bottle)\n\t\n\t\"\"\"\n\tNetwork Transformation Operations\n\t\"\"\"\n\t\n\tdef prev_widen(self, indices, magnifier, noise=None):\n\t\tif self.in_bottle:\n\t\t\tself.in_bottle.prev_widen(indices, magnifier, noise=noise)\n\t\telse:\n\t\t\tfor branch in self.branches:\n\t\t\t\tbranch.prev_widen(indices, magnifier, noise=noise)\n\t\n\tdef widen(self, loc, new_width, widen_type='output_dim', noise=None):\n\t\tif loc['multi-branch'] == 'in_bottle':\n\t\t\tassert self.in_bottle is not None, 'Invalid'\n\t\t\tchange_out_dim, indices, magnifier = self.in_bottle.widen(loc['layer'], new_width, widen_type, noise=noise)\n\t\t\tif change_out_dim:\n\t\t\t\tfor branch in self.branches:\n\t\t\t\t\tbranch.prev_widen(indices, magnifier, noise=noise)\n\t\t\treturn False, None, None\n\t\telif loc['multi-branch'] == 'out_bottle':\n\t\t\tassert self.out_bottle is not None, 'Invalid'\n\t\t\tchange_out_dim, indices, magnifier = self.out_bottle.widen(loc['layer'], new_width, widen_type, noise=noise)\n\t\t\treturn change_out_dim, indices, magnifier\n\t\telif loc['multi-branch'] == 'branch':\n\t\t\tbranch_idx = loc['branch']\n\t\t\tbranch = self.branches[branch_idx]\n\t\t\told_branch_out_dim = branch.out_features_dim\n\t\t\tchange_out_dim, indices, magnifier = branch.widen(loc['layer'], new_width, widen_type, noise=noise)\n\t\t\tif change_out_dim:\n\t\t\t\tassert self.merge != 'add', 'Invalid'\n\t\t\t\tprev_branch_out_dim = 0\n\t\t\t\tfor _i in range(0, branch_idx):\n\t\t\t\t\tprev_branch_out_dim += self.branches[_i].out_features_dim\n\t\t\t\tpost_branch_out_dim = 0\n\t\t\t\tfor _i in range(branch_idx + 1, len(self.branches)):\n\t\t\t\t\tpost_branch_out_dim += self.branches[_i].out_features_dim\n\t\t\t\told_size = prev_branch_out_dim + old_branch_out_dim + post_branch_out_dim\n\t\t\t\tbase = np.arange(old_size)\n\t\t\t\tindices = np.concatenate([\n\t\t\t\t\tbase[:prev_branch_out_dim],\n\t\t\t\t\tindices + prev_branch_out_dim,\n\t\t\t\t\tbase[prev_branch_out_dim + old_branch_out_dim:]\n\t\t\t\t])\n\t\t\t\tmagnifier = np.concatenate([\n\t\t\t\t\t[1] * prev_branch_out_dim,\n\t\t\t\t\tmagnifier,\n\t\t\t\t\t[1] * post_branch_out_dim,\n\t\t\t\t])\n\t\t\t\tif self.out_bottle is None:\n\t\t\t\t\treturn True, indices, magnifier\n\t\t\t\telse:\n\t\t\t\t\tself.out_bottle.prev_widen(indices, magnifier, noise=noise)\n\t\t\t\t\treturn False, None, None\n\t\t\telse:\n\t\t\t\treturn False, None, None\n\t\telse:\n\t\t\traise ValueError('Do not support %s' % loc['multi-branch'])\n\t\n\tdef deepen(self, loc, new_layer_config, input_dim):\n\t\tif loc['multi-branch'] == 'in_bottle':\n\t\t\tassert self.in_bottle is not None, 'Invalid'\n\t\t\treturn self.in_bottle.deepen(loc['layer'], new_layer_config, input_dim)\n\t\telif loc['multi-branch'] == 'out_bottle':\n\t\t\tassert self.out_bottle is not None, 'Invalid'\n\t\t\tif self.merge == 'concat': input_dim = np.sum([branch.out_features_dim for branch in self.branches])\n\t\t\telse: input_dim = self.branches[0].out_features_dim\n\t\t\treturn self.out_bottle.deepen(loc['layer'], new_layer_config, input_dim)\n\t\telif loc['multi-branch'] == 'branch':\n\t\t\tif self.in_bottle is not None: input_dim = self.in_bottle.out_features_dim\n\t\t\treturn self.branches[loc['branch']].deepen(loc['layer'], new_layer_config, input_dim)\n\t\telse:\n\t\t\traise ValueError('Do not support %s' % loc['multi-branch'])\n\t\t\n\tdef remapped_branches(self, noise=None):\n\t\tif self.merge == 'add' or self.merge is None:\n\t\t\tsize = self.out_features_dim\n\t\t\tindices = np.random.choice(np.arange(size), size)\n\t\t\tnew_branches = []\n\t\t\tfor branch in self.branches:\n\t\t\t\tnew_layers = [layer.copy() for layer in branch.layers[:-1]]\n\t\t\t\tlast_layer = branch.layers[-1].copy().remap(indices, noise=noise)\n\t\t\t\tnew_layers.append(last_layer)\n\t\t\t\tnew_branch = LayerCascade(branch.id, new_layers)\n\t\t\t\tnew_branches.append(new_branch)\n\t\telif self.merge == 'concat':\n\t\t\tnew_branches = []\n\t\t\toffset = 0\n\t\t\tindices = []\n\t\t\tfor branch in self.branches:\n\t\t\t\tsize = branch.out_features_dim\n\t\t\t\tsub_indices = np.random.choice(np.arange(size), size)\n\t\t\t\tnew_layers = [layer.copy() for layer in branch.layers[:-1]]\n\t\t\t\tlast_layer = branch.layers[-1].copy().remap(sub_indices, noise=noise)\n\t\t\t\tnew_layers.append(last_layer)\n\t\t\t\tnew_branch = LayerCascade(branch.id, new_layers)\n\t\t\t\tnew_branches.append(new_branch)\n\t\t\t\tindices.append(sub_indices + offset)\n\t\t\t\toffset += size\n\t\t\tindices = np.concatenate(indices)\n\t\telse:\n\t\t\traise NotImplementedError\n\t\treturn new_branches, indices\n"
  },
  {
    "path": "src/aup/Proposer/eas/models/layers.py",
    "content": "from .basic_model import BasicModel\nimport tensorflow as tf\nimport numpy as np\nimport copy\n\n\ndef apply_noise(weights, noise_config):\n\tif noise_config is None:\n\t\treturn weights\n\tnoise_type = noise_config.get('type', 'normal')\n\tif noise_type == 'normal':\n\t\tratio = noise_config.get('ratio', 1e-3)\n\t\tstd = np.std(weights)\n\t\tnoise = np.random.normal(0, std * ratio, size=weights.shape)\n\telif noise_type == 'uniform':\n\t\tratio = noise_config.get('ratio', 1e-3)\n\t\tmean, _max = np.mean(weights), np.max(weights)\n\t\twidth = (_max - mean) * ratio\n\t\tnoise = np.random.uniform(-width, width, size=weights.shape)\n\telse:\n\t\traise NotImplementedError\n\treturn weights + noise\n\n\ndef get_layer_by_name(name):\n\tif name == 'conv':\n\t\treturn ConvLayer\n\telif name == 'fc':\n\t\treturn FCLayer\n\telif name == 'pool':\n\t\treturn PoolLayer\n\telse:\n\t\traise ValueError('Unknown layer type: %s' % name)\n\n\ndef get_magnifier(old_size, indices):\n\t_l = np.zeros(old_size)\n\tfor x in indices:\n\t\t_l[x] += 1\n\tmagnifier = (1.0 / _l)[indices]\n\treturn magnifier\n\n\ndef get_random_remapping(old_size, new_size):\n\tbase = np.arange(old_size)\n\tindices = np.concatenate([base, np.random.choice(base, new_size - old_size)])\n\t\n\tmagnifier = get_magnifier(old_size, indices)\n\treturn indices, magnifier\n\n\nclass BaseLayer:\n\t\"\"\"\n\t_id, batch normalization, activation, dropout, ready\n\t\"\"\"\n\tdef __init__(self, _id, use_bn=True, activation='relu', keep_prob=1.0, ready=True, pre_activation=True):\n\t\tself._id = _id\n\t\tself.use_bn = use_bn\n\t\tself.activation = activation\n\t\tself.keep_prob = keep_prob\n\t\tself.ready = ready\n\t\tself.pre_activation = pre_activation\n\t\t\n\t\tself._scope = None\n\t\tself._init = None\n\t\tself.output_op = None\n\t\n\t@property\n\tdef id(self): return self._id\n\t\n\t@id.setter\n\tdef id(self, value): self._id = value\n\t\n\t@property\n\tdef init(self):\n\t\treturn self._init\n\t\n\t@property\n\tdef param_initializer(self):\n\t\tif self._init is None:\n\t\t\treturn None\n\t\tparam_initializer = {}\n\t\tfor key in self.variable_list.keys():\n\t\t\tif self._init[key] is not None:\n\t\t\t\tparam_initializer[key] = tf.constant_initializer(self._init[key])\n\t\tif len(param_initializer) == 0:\n\t\t\tparam_initializer = None\n\t\treturn param_initializer\n\t\n\tdef renew_init(self, net: BasicModel):\n\t\tif net is None:\n\t\t\treturn copy.deepcopy(self._init)\n\t\t\n\t\tself._init = {}\n\t\tfor key, var_name in self.variable_list.items():\n\t\t\tvar = net.graph.get_tensor_by_name('%s/%s' % (self._scope, var_name))\n\t\t\tself._init[key] = net.sess.run(var)\n\t\tif len(self._init) == 0:\n\t\t\tself._init = None\n\t\treturn copy.deepcopy(self._init)\n\t\n\tdef copy(self):\n\t\treturn self.set_from_config(self.get_config(), layer_init=copy.deepcopy(self._init))\n\t\n\tdef get_config(self):\n\t\treturn {\n\t\t\t'_id': self.id,\n\t\t\t'use_bn': self.use_bn,\n\t\t\t'activation': self.activation,\n\t\t\t'keep_prob': self.keep_prob,\n\t\t\t'pre_activation': self.pre_activation,\n\t\t}\n\t\n\t@property\n\tdef variable_list(self):\n\t\t\"\"\"\n\t\tbeta: mean scale\n\t\tgamma: variance scale\n\t\ty = gamma * (x - moving_mean) / sqrt(epsilon + moving_variance) + beta\n\t\t\"\"\"\n\t\tif self.use_bn:\n\t\t\treturn {\n\t\t\t\t'moving_mean': 'BatchNorm/moving_mean:0',\n\t\t\t\t'moving_variance': 'BatchNorm/moving_variance:0',\n\t\t\t\t'beta': 'BatchNorm/beta:0',\n\t\t\t\t'gamma': 'BatchNorm/gamma:0',\n\t\t\t}\n\t\telse:\n\t\t\treturn {}\n\t\n\t@staticmethod\n\tdef set_from_config(layer_config, layer_init):\n\t\traise NotImplementedError\n\t\n\tdef build(self, _input, net, store_output_op):\n\t\traise NotImplementedError\n\t\n\tdef prev_widen(self, indices, magnifier, noise=None):\n\t\traise NotImplementedError\n\t\n\tdef set_identity_layer(self, strict, param, noise):\n\t\traise NotImplementedError\n\t\n\tdef widen_bn(self, indices, magnifier, noise=None):\n\t\tif self.use_bn:\n\t\t\tself._init['beta'] = self._init['beta'][indices]\n\t\t\tself._init['gamma'] = self._init['gamma'][indices]\n\t\t\tself._init['moving_mean'] = self._init['moving_mean'][indices]\n\t\t\tself._init['moving_variance'] = self._init['moving_variance'][indices]\n\t\n\tdef set_bn_identity(self, strict=True, param=None, noise=None):\n\t\tif self.use_bn:\n\t\t\tif strict:\n\t\t\t\tself._init['moving_mean'] = param['moving_mean']\n\t\t\t\tself._init['moving_variance'] = param['moving_variance']\n\t\t\t\tself._init['beta'] = self._init['moving_mean']\n\t\t\t\tself._init['gamma'] = np.sqrt(self._init['moving_variance'] + param['epsilon'])\n\t\t\telse:\n\t\t\t\t# use default initialization for batch normalization layer\n\t\t\t\tself._init['moving_mean'], self._init['moving_variance'] = None, None\n\t\t\t\tself._init['beta'], self._init['gamma'] = None, None\n\t\n\t\nclass ConvLayer(BaseLayer):\n\tdef __init__(self, _id, filter_num, kernel_size=3, strides=1,\n\t\t\t\t use_bn=True, activation='relu', keep_prob=1.0, ready=True, pre_activation=True, **kwargs):\n\t\tBaseLayer.__init__(self, _id, use_bn, activation, keep_prob, ready, pre_activation)\n\t\tself.filter_num = filter_num\n\t\tself.kernel_size = kernel_size\n\t\tself.strides = strides\n\t\n\t@property\n\tdef layer_str(self):\n\t\treturn 'C%d,%d,%d' % (self.filter_num, self.kernel_size, self.strides)\n\t\t\n\t@property\n\tdef variable_list(self):\n\t\tvar_list = {'kernel': 'kernel:0'}\n\t\tvar_list.update(super(ConvLayer, self).variable_list)\n\t\treturn var_list\n\t\n\tdef get_config(self):\n\t\treturn {\n\t\t\t'name': 'conv',\n\t\t\t'filter_num': self.filter_num,\n\t\t\t'kernel_size': self.kernel_size,\n\t\t\t'strides': self.strides,\n\t\t\t**super(ConvLayer, self).get_config(),\n\t\t}\n\t\n\t@staticmethod\n\tdef set_from_config(layer_config, layer_init=None):\n\t\tconv_layer = ConvLayer(**layer_config)\n\t\tconv_layer._init = layer_init\n\t\treturn conv_layer\n\t\n\tdef build(self, _input, net: BasicModel, store_output_op=False):\n\t\toutput = _input\n\t\tif not self.ready:\n\t\t\treturn output\n\t\twith tf.variable_scope(self._id):\n\t\t\tself._scope = tf.get_variable_scope().name\n\t\t\tparam_initializer = self.param_initializer\n\t\t\tif self.pre_activation:\n\t\t\t\t# batch normalization\n\t\t\t\tif self.use_bn:\n\t\t\t\t\toutput = BasicModel.batch_norm(output, net.is_training, net.net_config.bn_epsilon,\n\t\t\t\t\t\t\t\t\t\t\t\t   net.net_config.bn_decay, param_initializer=param_initializer)\n\t\t\t\t# activation\n\t\t\t\toutput = BasicModel.activation(output, self.activation)\n\t\t\t\t# convolutional\n\t\t\t\toutput = BasicModel.conv2d(output, self.filter_num, self.kernel_size, self.strides,\n\t\t\t\t\t\t\t\t\t\t   param_initializer=param_initializer)\n\t\t\telse:\n\t\t\t\t# convolutional\n\t\t\t\toutput = BasicModel.conv2d(output, self.filter_num, self.kernel_size, self.strides,\n\t\t\t\t\t\t\t\t\t\t   param_initializer=param_initializer)\n\t\t\t\t# batch normalization\n\t\t\t\tif self.use_bn:\n\t\t\t\t\toutput = BasicModel.batch_norm(output, net.is_training, net.net_config.bn_epsilon,\n\t\t\t\t\t\t\t\t\t\t\t\t   net.net_config.bn_decay, param_initializer=param_initializer)\n\t\t\t\t# activation\n\t\t\t\toutput = BasicModel.activation(output, self.activation)\n\t\t\t# dropout\n\t\t\toutput = BasicModel.dropout(output, self.keep_prob, net.is_training)\n\t\tif store_output_op:\n\t\t\tself.output_op = output\n\t\treturn output\n\t\n\tdef widen_filters(self, new_filter_num, noise=None):\n\t\t\"\"\"\n\t\tIncrease the filter number of a conv layer while preserving the functionality\n\t\tProposed in 'Net2Net': https://arxiv.org/abs/1511.05641\n\t\t\"\"\"\n\t\tassert new_filter_num > self.filter_num, 'Invalid new filter number: %d' % new_filter_num\n\t\tassert self._init is not None, 'Uninitialized layer'\n\t\told_size, new_size = self.filter_num, new_filter_num\n\t\tindices, magnifier = get_random_remapping(old_size, new_size)\n\t\t# more filters\n\t\tself.filter_num = new_filter_num\n\t\tnew_kernel = self._init['kernel'][:, :, :, indices]\n\t\tnew_kernel[:, :, :, old_size:] = apply_noise(new_kernel[:, :, :, old_size:], noise.get('wider'))\n\t\tself._init['kernel'] = new_kernel\n\t\tif not self.pre_activation:\n\t\t\t# widen batch norm variables if use batch norm\n\t\t\tself.widen_bn(indices, magnifier, noise=noise)\n\t\treturn indices, magnifier\n\t\n\tdef prev_widen(self, indices, magnifier, noise=None):\n\t\tassert self._init is not None, 'Uninitialized layer'\n\t\t# rescale kernel\n\t\tself._init['kernel'] = self._init['kernel'][:, :, indices, :] * magnifier.reshape([1, 1, -1, 1])\n\t\tif self.pre_activation:\n\t\t\tself.widen_bn(indices, magnifier, noise=noise)\n\t\t\n\tdef set_identity_layer(self, strict=True, param=None, noise=None):\n\t\tself._init = {}\n\t\tself.set_bn_identity(strict, param, noise=noise)\n\t\tmid = self.kernel_size // 2\n\t\tself._init['kernel'] = np.zeros([self.kernel_size, self.kernel_size, self.filter_num, self.filter_num])\n\t\tself._init['kernel'][mid, mid] = np.eye(self.filter_num)\n\t\tself._init['kernel'] = apply_noise(self._init['kernel'], noise.get('deeper'))\n\t\tself.ready = True\n\n\tdef remap(self, indices, noise=None):\n\t\tself.filter_num = len(indices)\n\t\tself._init['kernel'] = self._init['kernel'][:, :, :, indices]\n\t\tself._init['kernel'] = apply_noise(self._init['kernel'], noise.get('wider'))\n\t\tif not self.pre_activation:\n\t\t\tself.widen_bn(indices, None, noise=noise)\n\t\treturn self\n\t\t\n\t\t\nclass FCLayer(BaseLayer):\n\tdef __init__(self, _id, units, use_bn=True, use_bias=False, activation='relu', keep_prob=1.0, ready=True,\n\t\t\t\t pre_activation=False, **kwargs):\n\t\tBaseLayer.__init__(self, _id, use_bn, activation, keep_prob, ready, pre_activation)\n\t\tself.units = units\n\t\tself.use_bias = use_bias\n\t\n\t@property\n\tdef layer_str(self):\n\t\treturn 'FC%d' % self.units\n\t\n\t@property\n\tdef variable_list(self):\n\t\tvar_list = {'W': 'W:0'}\n\t\tif self.use_bias:\n\t\t\tvar_list['bias'] = 'bias:0'\n\t\tvar_list.update(super(FCLayer, self).variable_list)\n\t\treturn var_list\n\t\n\tdef get_config(self):\n\t\treturn {\n\t\t\t'name': 'fc',\n\t\t\t'units': self.units,\n\t\t\t'use_bias': self.use_bias,\n\t\t\t**super(FCLayer, self).get_config(),\n\t\t}\n\t\n\t@staticmethod\n\tdef set_from_config(layer_config, layer_init=None):\n\t\tfc_layer = FCLayer(**layer_config)\n\t\tfc_layer._init = layer_init\n\t\treturn fc_layer\n\t\n\tdef build(self, _input, net: BasicModel, store_output_op=False):\n\t\toutput = _input\n\t\tif not self.ready:\n\t\t\treturn output\n\t\twith tf.variable_scope(self._id):\n\t\t\tself._scope = tf.get_variable_scope().name\n\t\t\tparam_initializer = self.param_initializer\n\t\t\t# flatten if not\n\t\t\toutput = BasicModel.flatten(output)\n\t\t\tif self.pre_activation:\n\t\t\t\t# batch normalization\n\t\t\t\tif self.use_bn:\n\t\t\t\t\toutput = BasicModel.batch_norm(output, net.is_training, net.net_config.bn_epsilon,\n\t\t\t\t\t\t\t\t\t\t\t\t   net.net_config.bn_decay, param_initializer=param_initializer)\n\t\t\t\t# activation\n\t\t\t\toutput = BasicModel.activation(output, self.activation)\n\t\t\t\t# FC\n\t\t\t\toutput = BasicModel.fc_layer(output, self.units, self.use_bias, param_initializer=param_initializer)\n\t\t\telse:\n\t\t\t\t# FC\n\t\t\t\toutput = BasicModel.fc_layer(output, self.units, self.use_bias, param_initializer=param_initializer)\n\t\t\t\t# batch normalization\n\t\t\t\tif self.use_bn:\n\t\t\t\t\toutput = BasicModel.batch_norm(output, net.is_training, net.net_config.bn_epsilon,\n\t\t\t\t\t\t\t\t\t\t\t\t   net.net_config.bn_decay, param_initializer=param_initializer)\n\t\t\t\t# activation\n\t\t\t\toutput = BasicModel.activation(output, self.activation)\n\t\t\t# dropout\n\t\t\toutput = BasicModel.dropout(output, self.keep_prob, net.is_training)\n\t\tif store_output_op:\n\t\t\tself.output_op = output\n\t\treturn output\n\t\n\tdef widen_units(self, new_units_num, noise=None):\n\t\t\"\"\"\n\t\tIncrease the units number of a fc layer while preserving the functionality\n\t\tProposed in 'Net2Net': https://arxiv.org/abs/1511.05641\n\t\tW: [in_dim, out_units]\n\t\tbias: [out_units]\n\t\t\"\"\"\n\t\tassert new_units_num > self.units, 'Invalid new units number: %d' % new_units_num\n\t\tassert self._init is not None, 'Uninitialized layer'\n\t\told_size, new_size = self.units, new_units_num\n\t\tindices, magnifier = get_random_remapping(old_size, new_size)\n\t\t# more units\n\t\tself._init['W'] = self._init['W'][:, indices]\n\t\tself._init['W'][:, old_size:] = apply_noise(self._init['W'][:, old_size:], noise.get('wider'))\n\t\tself.units = new_units_num\n\t\t# widen bias variable if exist\n\t\tif self.use_bias:\n\t\t\tself._init['bias'] = self._init['bias'][indices]\n\t\t\tself._init['bias'][old_size:] = apply_noise(self._init['bias'][old_size:], noise.get('wider'))\n\t\tif not self.pre_activation:\n\t\t\t# widen batch norm variables if use batch norm\n\t\t\tself.widen_bn(indices, magnifier, noise=noise)\n\t\treturn indices, magnifier\n\t\t\t\n\tdef prev_widen(self, indices, magnifier, noise=None):\n\t\tassert self._init is not None, 'Uninitialized layer'\n\t\t# rescale W\n\t\tself._init['W'] = self._init['W'][indices] * magnifier.reshape([-1, 1])\n\t\tif self.pre_activation:\n\t\t\tself.widen_bn(indices, magnifier, noise=noise)\n\t\n\tdef set_identity_layer(self, strict=True, param=None, noise=None):\n\t\tself._init = {}\n\t\tself.set_bn_identity(strict, param, noise=noise)\n\t\tif self.use_bias:\n\t\t\tself._init['bias'] = [0.0] * self.units\n\t\tself._init['W'] = np.eye(self.units)\n\t\tself._init['W'] = apply_noise(self._init['W'], noise.get('deeper'))\n\t\tself.ready = True\n\t\n\tdef remap(self, indices, noise=None):\n\t\tself.units = len(indices)\n\t\tself._init['W'] = self._init['W'][:, indices]\n\t\tself._init['W'] = apply_noise(self._init['W'], noise.get('wider'))\n\t\tif self.use_bias:\n\t\t\tself._init['bias'] = self._init['bias'][indices]\n\t\tif not self.pre_activation:\n\t\t\tself.widen_bn(indices, None, noise=noise)\n\t\treturn self\n\t\n\t\t\nclass PoolLayer(BaseLayer):\n\tdef __init__(self, _id, _type, kernel_size=2, strides=2, use_bn=False, activation=None, keep_prob=1.0,\n\t\t\t\t ready=True, pre_activation=True, **kwargs):\n\t\tBaseLayer.__init__(self, _id, use_bn, activation, keep_prob, ready, pre_activation)\n\t\t\n\t\tself._type = _type\n\t\tself.kernel_size = kernel_size\n\t\tself.strides = strides\n\t\n\t@property\n\tdef layer_str(self):\n\t\treturn 'P%d,%d' % (self.kernel_size, self.strides)\n\t\t\n\tdef get_config(self):\n\t\treturn {\n\t\t\t'name': 'pool',\n\t\t\t'_type': self._type,\n\t\t\t'kernel_size': self.kernel_size,\n\t\t\t'strides': self.strides,\n\t\t\t**super(PoolLayer, self).get_config(),\n\t\t}\n\t\n\t@staticmethod\n\tdef set_from_config(layer_config, layer_init=None):\n\t\tpool_layer = PoolLayer(**layer_config)\n\t\tpool_layer._init = layer_init\n\t\treturn pool_layer\n\t\n\tdef build(self, _input, net: BasicModel, store_output_op=False):\n\t\toutput = _input\n\t\tif not self.ready:\n\t\t\treturn output\n\t\twith tf.variable_scope(self._id):\n\t\t\tself._scope = tf.get_variable_scope().name\n\t\t\tparam_initializer = self.param_initializer\n\t\t\tif self.pre_activation:\n\t\t\t\t# batch normalization\n\t\t\t\tif self.use_bn:\n\t\t\t\t\toutput = BasicModel.batch_norm(output, net.is_training, net.net_config.bn_epsilon,\n\t\t\t\t\t\t\t\t\t\t\t\t   net.net_config.bn_decay, param_initializer=param_initializer)\n\t\t\t\t# activation\n\t\t\t\toutput = BasicModel.activation(output, self.activation)\n\t\t\t\t# Pooling\n\t\t\t\tif self._type == 'avg':\n\t\t\t\t\toutput = BasicModel.avg_pool(output, k=self.kernel_size, s=self.strides)\n\t\t\t\telif self._type == 'max':\n\t\t\t\t\toutput = BasicModel.max_pool(output, k=self.kernel_size, s=self.strides)\n\t\t\t\telse:\n\t\t\t\t\traise ValueError('Do not support the pooling type: %s' % self._type)\n\t\t\telse:\n\t\t\t\t# Pooling\n\t\t\t\tif self._type == 'avg':\n\t\t\t\t\toutput = BasicModel.avg_pool(output, k=self.kernel_size, s=self.strides)\n\t\t\t\telif self._type == 'max':\n\t\t\t\t\toutput = BasicModel.max_pool(output, k=self.kernel_size, s=self.strides)\n\t\t\t\telse:\n\t\t\t\t\traise ValueError('Do not support the pooling type: %s' % self._type)\n\t\t\t\t# batch normalization\n\t\t\t\tif self.use_bn:\n\t\t\t\t\toutput = BasicModel.batch_norm(output, net.is_training, net.net_config.bn_epsilon,\n\t\t\t\t\t\t\t\t\t\t\t\t   net.net_config.bn_decay, param_initializer=param_initializer)\n\t\t\t\t# activation\n\t\t\t\toutput = BasicModel.activation(output, self.activation)\n\t\t\t# dropout\n\t\t\toutput = BasicModel.dropout(output, self.keep_prob, net.is_training)\n\t\tif store_output_op:\n\t\t\tself.output_op = output\n\t\treturn output\n\n\tdef set_identity_layer(self, strict=True, param=None, noise=None):\n\t\traise ValueError('Pooling layer can never be an identity layer')\n\t\n\tdef prev_widen(self, indices, magnifier, noise=None):\n\t\tself.widen_bn(indices, magnifier, noise=noise)\n"
  },
  {
    "path": "src/aup/Proposer/eas/models/utils.py",
    "content": "from .dense_net import DenseNetConfig, DenseNet\nfrom .convnet import SimpleConvnetConfig, SimpleConvnet\nimport numpy as np\n\n\ndef get_model_config_by_name(name):\n\tif name == 'DenseNet':\n\t\treturn DenseNetConfig\n\telif name == 'SimpleConvnet':\n\t\treturn SimpleConvnetConfig\n\telse:\n\t\traise ValueError('Unknown model type %s' % name)\n\n\ndef get_model_by_name(name):\n\tif name == 'DenseNet':\n\t\treturn DenseNet\n\telif name == 'SimpleConvnet':\n\t\treturn SimpleConvnet\n\telse:\n\t\traise ValueError('Unknown model type %s' % name)\n\n\nclass RunConfig:\n\tdef __init__(self, batch_size, n_epochs, init_lr, reduce_lr_epochs, reduce_lr_factors, opt_config,\n\t\t\t\t dataset, validation_size, validation_frequency, shuffle, normalization, should_save_logs,\n\t\t\t\t should_save_model, renew_logs=False, other_lr_schedule=None, include_extra=True, **kwargs):\n\t\t\n\t\tself.batch_size = batch_size\n\t\tself.n_epochs = n_epochs\n\t\tself.init_lr = init_lr\n\t\tself.reduce_lr_epochs = reduce_lr_epochs\n\t\tself.reduce_lr_factors = reduce_lr_factors\n\t\tself.opt_config = opt_config\n\t\tself.dataset = dataset\n\t\tself.validation_size = validation_size\n\t\tself.validation_frequency = validation_frequency\n\t\tself.shuffle = shuffle\n\t\tself.normalization = normalization\n\t\tself.should_save_logs = should_save_logs\n\t\tself.should_save_model = should_save_model\n\t\tself.renew_logs = renew_logs\n\t\tself.other_lr_schedule = other_lr_schedule\n\t\tself.include_extra = include_extra\n\t\n\tdef get_config(self):\n\t\treturn self.__dict__\n\t\n\tdef update(self, new_config):\n\t\tself.__dict__.update(new_config)\n\t\n\tdef copy(self):\n\t\treturn RunConfig(**self.get_config())\n\t\t\n\tdef learning_rate(self, epoch):\n\t\tif self.other_lr_schedule is None or self.other_lr_schedule.get('type') is None:\n\t\t\tlr = self.init_lr\n\t\t\tfor reduce_lr_epoch, reduce_factor in zip(self.reduce_lr_epochs, self.reduce_lr_factors):\n\t\t\t\tif epoch >= reduce_lr_epoch * self.n_epochs:\n\t\t\t\t\tlr /= reduce_factor\n\t\telse:\n\t\t\tif self.other_lr_schedule['type'] == 'cosine':\n\t\t\t\tlr_max = self.init_lr\n\t\t\t\tlr_min = self.other_lr_schedule.get('lr_min', 0)\n\t\t\t\tlr = lr_min + 0.5 * (lr_max - lr_min) * (1 + np.cos((epoch - 1) / self.n_epochs * np.pi))\n\t\t\telse:\n\t\t\t\traise ValueError('Do not support %s' % self.other_lr_schedule['type'])\n\t\treturn lr\n\n\t@staticmethod\n\tdef get_default_run_config(dataset='C10+'):\n\t\tif dataset in ['C10', 'C10+', 'C100', 'C100+']:\n\t\t\trun_config = {\n\t\t\t\t'batch_size': 64,\n\t\t\t\t'n_epochs': 30,\n\t\t\t\t'init_lr': 0.1,\n\t\t\t\t'reduce_lr_epochs': [0.5, 0.75],  # epochs * 0.5, epochs * 0.75\n\t\t\t\t'reduce_lr_factors': [10, 10],\n\t\t\t\t'opt_config': ['momentum', {'momentum': 0.9, 'use_nesterov': True}],\n\t\t\t\t'dataset': dataset,  # choices = [C10, C10+, C100, C100+]\n\t\t\t\t'validation_size': None,  # None or int\n\t\t\t\t'validation_frequency': 10,\n\t\t\t\t'shuffle': 'every_epoch',  # None, once_prior_train, every_epoch\n\t\t\t\t'normalization': 'by_channels',  # None, divide_256, divide_255, by_channels\n\t\t\t\t'should_save_logs': True,\n\t\t\t\t'should_save_model': True,\n\t\t\t\t'renew_logs': True,\n\t\t\t\t'other_lr_schedule': {'type': 'cosine'},  # None, or cosine\n\t\t\t}\n\t\telif dataset in ['SVHN']:\n\t\t\trun_config = {\n\t\t\t\t'batch_size': 64,\n\t\t\t\t'n_epochs': 40,\n\t\t\t\t'init_lr': 0.1,\n\t\t\t\t'reduce_lr_epochs': [0.5, 0.75],  # epochs * 0.5, epochs * 0.75\n\t\t\t\t'reduce_lr_factors': [10, 10],\n\t\t\t\t'opt_config': ['momentum', {'momentum': 0.9, 'use_nesterov': True}],\n\t\t\t\t'dataset': dataset,  # choices = [C10, C10+, C100, C100+]\n\t\t\t\t'validation_size': None,  # None or int\n\t\t\t\t'validation_frequency': 1,\n\t\t\t\t'shuffle': True,\n\t\t\t\t'normalization': 'divide_255',  # None, divide_256, divide_255, by_channels\n\t\t\t\t'should_save_logs': True,\n\t\t\t\t'should_save_model': True,\n\t\t\t\t'renew_logs': True,\n\t\t\t\t'other_lr_schedule': {'type': 'cosine'},  # None, or cosine\n\t\t\t\t'include_extra': False,\n\t\t\t}\n\t\telse:\n\t\t\traise ValueError\n\t\treturn run_config\n\n"
  },
  {
    "path": "src/aup/Proposer/eas/run_dense_net.py",
    "content": "import argparse\nimport os\nfrom models.dense_net import DenseNet, DenseNetConfig\nfrom data_providers.utils import get_data_provider_by_name\nfrom models.utils import RunConfig\nimport json\n\nrun_config_cifar = {\n\t'batch_size': 64,\n\t'n_epochs': 30,\n\t'init_lr': 0.1,\n\t'reduce_lr_epochs': [0.5, 0.75],  # epochs * 0.5, epochs * 0.75\n\t'reduce_lr_factors': [10, 10],\n\t'opt_config': ['momentum', {'momentum': 0.9, 'use_nesterov': True}],\n\t'dataset': 'C10+',  # choices = [C10, C10+, C100, C100+]\n\t'validation_size': 10000,  # None or int\n\t'validation_frequency': 10,\n\t'shuffle': 'every_epoch',  # None, once_prior_train, every_epoch\n\t'normalization': 'by_channels',  # None, divide_256, divide_255, by_channels\n\t'should_save_logs': True,\n\t'should_save_model': True,\n\t'renew_logs': True,\n\t'other_lr_schedule': {'type': 'cosine'},  # None, or cosine\n}\n\nstandard_net_config_cifar = {\n\t'model_type': 'DenseNet-BC',\n\t'weight_decay':  1e-4,\n\t'first_ratio': 2,\n\t'reduction': 0.5,\n\t'bc_ratio': 4,\n\t'bn_epsilon': 1e-5,\n\t'bn_decay': 0.9,\n\t'growth_rate': 4,\n\t'depth': 10,\n\t'total_blocks': 3,\n\t'keep_prob': 0.8,\n\t'pre_activation': True,\n}\n\n\nif __name__ == '__main__':\n\tparser = argparse.ArgumentParser()\n\tparser.add_argument(\n\t\t'--train', action='store_true')\n\tparser.add_argument(\n\t\t'--test', action='store_true',\n\t\thelp='Test model for required dataset if pretrained model exists.')\n\tparser.add_argument(\n\t\t'--dataset', type=str, default='C10+', choices=['C10', 'C10+', 'C100', 'C100+'],\n\t)\n\t\n\tparser.add_argument('--path', type=str, default='')\n\tparser.add_argument('--save_config', action='store_true', help='Whether to save config in the path')\n\tparser.add_argument('--save_init', action='store_true')\n\tparser.add_argument('--load_model', action='store_true')\n\t\n\targs = parser.parse_args()\n\tif args.dataset in ['C10', 'C100', 'C10+', 'C100+']:\n\t\trun_config_cifar['dataset'] = args.dataset\n\t\trun_config = RunConfig(**run_config_cifar)\n\t\tnet_config = standard_net_config_cifar\n\telse:\n\t\traise ValueError\n\tif len(args.path) == 0:\n\t\targs.path = '../trained_nets/DenseNet/vs=%s_%s_%s_L=%d_K=%d_%s' % \\\n\t\t\t\t\t(run_config.validation_size, os.uname()[1], net_config['model_type'], net_config['depth'],\n\t\t\t\t\t net_config['growth_rate'], run_config.dataset)\n\t\n\tif run_config.dataset in ['C10+', 'C100+']:\n\t\tnet_config['keep_prob'] = 1.0\n\tif standard_net_config_cifar['model_type'] == 'DenseNet':\n\t\tnet_config['reduction'] = 1.0\n\tif args.test: args.load_model = True\n\t\n\t# print configurations\n\tprint('Run config:')\n\tfor k, v in run_config.get_config().items():\n\t\tprint('\\t%s: %s' % (k, v))\n\tprint('Network config:')\n\tfor k, v in net_config.items():\n\t\tprint('\\t%s: %s' % (k, v))\n\t\n\tprint('Prepare training data...')\n\tdata_provider = get_data_provider_by_name(run_config.dataset, run_config.get_config())\n\t\n\t# set net config\n\tnet_config = DenseNetConfig().set_standard_dense_net(data_provider=data_provider, **net_config)\n\tprint('Initialize the model...')\n\tmodel = DenseNet(args.path, data_provider, run_config, net_config)\n\t\n\t# save configs\n\tif args.save_config:\n\t\tmodel.save_config(args.path)\n\t\t\n\tif args.load_model: model.load_model()\n\tif args.test:\n\t\t# test\n\t\tprint('Data provider test images: ', data_provider.test.num_examples)\n\t\tprint('Testing...')\n\t\tloss, accuracy = model.test(data_provider.test, batch_size=200)\n\t\tprint('mean cross_entropy: %f, mean accuracy: %f' % (loss, accuracy))\n\t\tjson.dump({'test_loss': '%s' % loss, 'test_acc': '%s' % accuracy}, open('%s/output' % args.path, 'w'))\n\telif args.train:\n\t\t# train the model\n\t\tprint('Data provider train images: ', data_provider.train.num_examples)\n\t\tmodel.train_all_epochs()\n\t\tprint('Data provider test images: ', data_provider.test.num_examples)\n\t\tprint('Testing...')\n\t\tloss, accuracy = model.test(data_provider.test, batch_size=200)\n\t\tprint('mean cross_entropy: %f, mean accuracy: %f' % (loss, accuracy))\n\n\t\t# save inits\n\t\tif args.save_init:\n\t\t\tmodel.save_init(os.path.join(args.path, 'snapshot'))\n\t\tjson.dump({'test_loss': '%s' % loss, 'test_acc': '%s' % accuracy}, open('%s/output' % args.path, 'w'))\n\t\t\n\n"
  },
  {
    "path": "src/aup/Proposer/eas/run_simple_convnet.py",
    "content": "import argparse\nimport os\nfrom .models.convnet import SimpleConvnetConfig, SimpleConvnet\nfrom .data_providers.utils import get_data_provider_by_name\nfrom .models.utils import RunConfig\nimport json\nimport copy\n\n\nrun_config_cifar = {\n\t'batch_size': 64,\n\t'n_epochs': 20,\n\t'init_lr': 0.1,\n\t'reduce_lr_epochs': [0.5, 0.75],  # epochs * 0.5, epochs * 0.75\n\t'reduce_lr_factors': [10, 10],\n\t'opt_config': ['momentum', {'momentum': 0.9, 'use_nesterov': True}],\n\t'dataset': 'C10+',  # choices = [C10, C10+, C100, C100+]\n\t'validation_size': 10000,  # None or int\n\t'validation_frequency': 10,\n\t'shuffle': 'every_epoch',  # None, once_prior_train, every_epoch\n\t'normalization': 'by_channels',  # None, divide_256, divide_255, by_channels\n\t'should_save_logs': True,\n\t'should_save_model': True,\n\t'renew_logs': True,\n\t'other_lr_schedule': {'type': 'cosine'},  # None, or cosine\n}\n\nstandard_net_config = {\n\t'conv_blocks_config': [\n\t\t[1, 3, 4],\n\t\t[1, 4, 4],\n\t\t[1, 5, 4],\n\t\t[1, 5, 3],\n\t],\n\t'fc_block_config': [8],\n\t'weight_decay': 1e-4,\n\t'drop_scheme': {'type': 'conv', 'conv_drop': 0.8, 'pool_drop': 0.7, 'fc_drop': 0.5},\n\t'bn_epsilon': 1e-5,\n\t'bn_decay': 0.9,\n}\n\nrun_config_svhn = copy.deepcopy(run_config_cifar)\nrun_config_svhn.update({\n\t'n_epochs': 40,\n\t'dataset': 'SVHN',\n\t'validation_size': 10000,\n\t'validation_frequency': 1,\n\t'normalization': 'divide_255',\n\t'other_lr_schedule': {'type': 'cosine'},\n\t'include_extra': False,\n\t'shuffle': True,\n})\n\n\nrun_str = '_'.join(['{}-{}-{}'.format(*block_config) for block_config in\n\t\t\t\t\tstandard_net_config['conv_blocks_config']])\nrun_str += '_%s' % '_'.join([str(units) for units in standard_net_config['fc_block_config']])\n\nif __name__ == '__main__':\n\tparser = argparse.ArgumentParser()\n\tparser.add_argument(\n\t\t'--train', action='store_true')\n\tparser.add_argument(\n\t\t'--test', action='store_true',\n\t\thelp='Test model for required dataset if pretrained model exists.')\n\tparser.add_argument(\n\t\t'--dataset', type=str, default='C10+', choices=['C10', 'C10+', 'C100', 'C100+', 'SVHN'],\n\t)\n\tparser.add_argument('--path', type=str, default='')\n\tparser.add_argument('--save_config', action='store_true', help='Whether to save config in the path')\n\tparser.add_argument('--save_init', action='store_true')\n\tparser.add_argument('--load_model', action='store_true')\n\t\n\targs = parser.parse_args()\n\tif args.dataset in ['C10', 'C100', 'C10+', 'C100+']:\n\t\trun_config_cifar['dataset'] = args.dataset\n\t\trun_config = RunConfig(**run_config_cifar)\n\telif args.dataset in ['SVHN']:\n\t\trun_config = RunConfig(**run_config_svhn)\n\telse:\n\t\traise ValueError\n\tif len(args.path) == 0:\n\t\targs.path = '../trained_nets/Convnet/vs=%s_Convnet_%s_%s_%s' % \\\n\t\t\t\t\t(run_config.validation_size, os.uname()[1], run_str, run_config.dataset)\n\tif args.test: args.load_model = True\n\t\n\t# print configurations\n\tprint('Run config:')\n\tfor k, v in run_config.get_config().items():\n\t\tprint('\\t%s: %s' % (k, v))\n\tprint('Network config:')\n\tfor k, v in standard_net_config.items():\n\t\tprint('\\t%s: %s' % (k, v))\n\t\n\tprint('Prepare training data...')\n\tdata_provider = get_data_provider_by_name(run_config.dataset, run_config.get_config())\n\t\n\t# set net config\n\tnet_config = SimpleConvnetConfig()\n\tnet_config.set_standard_convnet(data_provider=data_provider, **standard_net_config)\n\tprint('Initialize the model...')\n\tmodel = SimpleConvnet(args.path, data_provider, run_config, net_config)\n\t\n\t# save configs\n\tif args.save_config:\n\t\tmodel.save_config(args.path)\n\t\n\tif args.load_model: model.load_model()\n\tif args.test:\n\t\t# test\n\t\tprint('Data provider test images: ', data_provider.test.num_examples)\n\t\tprint('Testing...')\n\t\tloss, accuracy = model.test(data_provider.test, batch_size=200)\n\t\tprint('mean cross_entropy: %f, mean accuracy: %f' % (loss, accuracy))\n\t\tjson.dump({'test_loss': '%s' % loss, 'test_acc': '%s' % accuracy}, open('%s/output' % args.path, 'w'))\n\telif args.train:\n\t\t# train the model\n\t\tprint('Data provider train images: ', data_provider.train.num_examples)\n\t\tmodel.train_all_epochs()\n\t\tprint('Data provider test images: ', data_provider.test.num_examples)\n\t\tprint('Testing...')\n\t\tloss, accuracy = model.test(data_provider.test, batch_size=200)\n\t\tprint('mean cross_entropy: %f, mean accuracy: %f' % (loss, accuracy))\n\t\t\n\t\t# save inits\n\t\tif args.save_init:\n\t\t\tmodel.save_init(os.path.join(args.path, 'snapshot'))\n\t\tjson.dump({'test_loss': '%s' % loss, 'test_acc': '%s' % accuracy}, open('%s/output' % args.path, 'w'))\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/__init__.py",
    "content": "\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/core/__init__.py",
    "content": ""
  },
  {
    "path": "src/aup/Proposer/hpbandster/core/base_config_generator.py",
    "content": "import logging\nimport traceback\n\nclass base_config_generator(object):\n\t\"\"\"\n\tThe config generator determines how new configurations are sampled. This can take very different levels of\n\tcomplexity, from random sampling to the construction of complex empirical prediction models for promising\n\tconfigurations.\n\t\"\"\"\n\tdef __init__(self, logger=None):\n\t\t\"\"\"\n\t\tParameters\n\t\t----------\n\n\t\tdirectory: string\n\t\t\twhere the results are logged\n\t\tlogger: hpbandster.utils.result_logger_v??\n\t\t\tthe logger to store the data, defaults to v1\n\t\toverwrite: bool\n\t\t\twhether or not existing data will be overwritten\n\t\tlogger: logging.logger\n\t\t\tfor some debug output\n\n\t\t\"\"\"\n\n\t\tif logger is None:\n\t\t\tself.logger=logging.getLogger('hpbandster')\n\t\telse:\n\t\t\tself.logger=logger\n\n\tdef get_config(self, budget):\n\t\t\"\"\"\n\t\tfunction to sample a new configuration\n\n\t\tThis function is called inside Hyperband to query a new configuration\n\n\t\tParameters\n\t\t----------\n\t\tbudget: float\n\t\t\tthe budget for which this configuration is scheduled\n\n\t\treturns: (config, info_dict)\n\t\t\tmust return a valid configuration and a (possibly empty) info dict\n\t\t\"\"\"\n\t\traise NotImplementedError('This function needs to be overwritten in %s.'%(self.__class__.__name__))\n\n\tdef new_result(self, job, update_model=True):\n\t\t\"\"\"\n\t\tregisters finished runs\n\n\t\tEvery time a run has finished, this function should be called\n\t\tto register it with the result logger. If overwritten, make\n\t\tsure to call this method from the base class to ensure proper\n\t\tlogging.\n\n\n\t\tParameters\n\t\t----------\n\t\tjob: instance of hpbandster.distributed.dispatcher.Job\n\t\t\tcontains all necessary information about the job\n\t\tupdate_model: boolean\n\t\t\tdetermines whether a model inside the config_generator should be updated\n\t\t\"\"\"\n\t\tif not job.exception is None:\n\t\t\tself.logger.warning(\"job {} failed with exception\\n{}\".format(job.id, job.exception))\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/core/base_iteration.py",
    "content": "import sys\n\n\nimport logging\nimport numpy as np\nimport pdb\n\nfrom hpbandster.core.dispatcher import Job\n\n\nclass Datum(object):\n\tdef __init__(self, config, config_info, results=None, time_stamps=None, exceptions=None, status='QUEUED', budget=0):\n\t\tself.config\t\t= config\n\t\tself.config_info= config_info\n\t\tself.results\t= results\t\tif not results is None else {}\n\t\tself.time_stamps= time_stamps\tif not time_stamps is None else {}\n\t\tself.exceptions\t= exceptions\tif not exceptions is None else {}\n\t\tself.status\t\t= status\n\t\tself.budget\t\t= budget\n\n\tdef __repr__(self):\n\t\treturn(\\\n\t\t\t\"\\nconfig:{}\\n\".format(self.config) + \\\n\t\t\t\"config_info:\\n{}\\n\"%self.config_info + \\\n\t\t\t\"losses:\\n\"\n\t\t\t'\\t'.join([\"{}: {}\\t\".format(k, v['loss']) for k,v in self.results.items()]) + \\\n\t\t\t\"time stamps: {}\".format(self.time_stamps)\n\t\t)\n\n\n\nclass BaseIteration(object):\n\t\"\"\"\n\tBase class for various iteration possibilities. This decides what configuration should be run on what budget\n\tnext. Typical choices are e.g. successive halving. Results from runs are processed and (depending on the\n\timplementations) determine the further development.\n\t\"\"\"\n\tdef __init__(self, HPB_iter, num_configs, budgets, config_sampler, logger=None, result_logger=None):\n\t\t\"\"\"\n\t\tParameters\n\t\t----------\n\n\t\tHPB_iter: int\n\t\t\tThe current HPBandSter iteration index.\n\t\tnum_configs: list of ints\n\t\t\tthe number of configurations in each stage of SH\n\t\tbudgets: list of floats\n\t\t\tthe budget associated with each stage\n\t\tconfig_sample: callable\n\t\t\ta function that returns a valid configuration. Its only\n\t\t\targument should be the budget that this config is first\n\t\t\tscheduled for. This might be used to pick configurations\n\t\t\tthat perform best after this particular budget is exhausted\n\t\t\tto build a better autoML system.\n\t\tlogger: a logger\n\t\tresult_logger: hpbandster.api.results.util.json_result_logger object\n\t\t\ta result logger that writes live results to disk\n\t\t\"\"\"\n\n\t\tself.data = {}\t\t\t\t\t# this holds all the configs and results of this iteration\n\t\tself.is_finished = False\n\t\tself.HPB_iter = HPB_iter\n\t\tself.stage = 0\t\t\t\t\t# internal iteration, but different name for clarity\n\t\tself.budgets = budgets\n\t\tself.num_configs = num_configs\n\t\tself.actual_num_configs = [0]*len(num_configs)\n\t\tself.config_sampler = config_sampler\n\t\tself.num_running = 0\n\t\tself.logger=logger if not logger is None else logging.getLogger('hpbandster')\n\t\tself.result_logger = result_logger\n\n\tdef add_configuration(self, config = None, config_info={}):\n\t\t\"\"\"\n\t\tfunction to add a new configuration to the current iteration\n\t\t\n\t\tParameters\n\t\t----------\n\t\t\n\t\tconfig : valid configuration\n\t\t\tThe configuration to add. If None, a configuration is sampled from the config_sampler\n\t\tconfig_info: dict\n\t\t\tSome information about the configuration that will be stored in the results\n\t\t\"\"\"\n\t\t\n\t\tif config is None:\n\t\t\tconfig, config_info = self.config_sampler(self.budgets[self.stage])\n\t\t\n\t\tif self.is_finished:\n\t\t\traise RuntimeError(\"This HPBandSter iteration is finished, you can't add more configurations!\")\n\n\t\tif self.actual_num_configs[self.stage] == self.num_configs[self.stage]:\n\t\t\traise RuntimeError(\"Can't add another configuration to stage %i in HPBandSter iteration %i.\"%(self.stage, self.HPB_iter))\n\n\t\tconfig_id = (self.HPB_iter, self.stage, self.actual_num_configs[self.stage])\n\n\t\tself.data[config_id] = Datum(config=config, config_info=config_info, budget = self.budgets[self.stage])\n\n\t\tself.actual_num_configs[self.stage] += 1\n\t\t\n\t\tif not self.result_logger is None:\n\t\t    self.result_logger.new_config(config_id, config, config_info)\n\t\t\n\t\treturn(config_id)\n\n\tdef register_result(self, job, skip_sanity_checks=False):\n\t\t\"\"\"\n\t\tfunction to register the result of a job\n\n\t\tThis function is called from HB_master, don't call this from\n\t\tyour script.\n\t\t\"\"\"\n\n\t\tif self.is_finished:\n\t\t\traise RuntimeError(\"This HB iteration is finished, you can't register more results!\")\n\n\t\tconfig_id = job.id\n\t\tconfig = job.kwargs['config']\n\t\tbudget = job.kwargs['budget']\n\t\ttimestamps = job.timestamps\n\t\tresult = job.result\n\t\texception = job.exception\n\t\t\n\t\td = self.data[config_id]\n\t\t\n\t\tif not skip_sanity_checks:\n\t\t\tassert d.config == config, 'Configurations differ!'\n\t\t\tassert d.status == 'RUNNING', \"Configuration wasn't scheduled for a run.\"\n\t\t\tassert d.budget == budget, 'Budgets differ (%f != %f)!'%(self.data[config_id]['budget'], budget)\n\n\t\td.time_stamps[budget] = timestamps\n\t\td.results[budget] = result\n\n\t\tif (not job.result is None) and np.isfinite(result['loss']):\n\t\t\td.status = 'REVIEW'\n\t\telse:\n\t\t\td.status = 'CRASHED'\n\n\t\td.exceptions[budget] = exception\n\t\tself.num_running -= 1\n\t\t\n\tdef get_next_run(self):\n\t\t\"\"\"\n\t\tfunction to return the next configuration and budget to run.\n\n\t\tThis function is called from HB_master, don't call this from\n\t\tyour script.\n\n\t\tIt returns None if this run of SH is finished or there are\n\t\tpending jobs that need to finish to progress to the next stage.\n\n\t\tIf there are empty slots to be filled in the current SH stage\n\t\t(which never happens in the original SH version), a new\n\t\tconfiguration will be sampled and scheduled to run next.\n\t\t\"\"\"\n\n\t\tif self.is_finished:\n\t\t\treturn(None)\n\t\t\n\t\tfor k,v in self.data.items():\n\t\t\tif v.status == 'QUEUED':\n\t\t\t\tassert v.budget == self.budgets[self.stage], 'Configuration budget does not align with current stage!'\n\t\t\t\tv.status = 'RUNNING'\n\t\t\t\tself.num_running += 1\n\t\t\t\treturn(k, v.config, v.budget)\n\n\t\t# check if there are still slots to fill in the current stage and return that\n\t\tif (self.actual_num_configs[self.stage] < self.num_configs[self.stage]):\n\t\t\tself.add_configuration()\n\t\t\treturn(self.get_next_run())\n\n\t\tif self.num_running == 0:\n\t\t\t# at this point a stage is completed\n\t\t\tself.process_results()\n\t\t\treturn(self.get_next_run())\n\n\t\treturn(None)\n\n\tdef _advance_to_next_stage(self, config_ids, losses):\n\t\t\"\"\"\n\t\tFunction that implements the strategy to advance configs within this iteration\n\t\t\n\t\tOverload this to implement different strategies, like\n\t\tSuccessiveHalving, SuccessiveResampling.\n\t\t\n\t\tParameters\n\t\t----------\n\t\t\tconfig_ids: list\n\t\t\t\tall config ids to be considered\n\t\t\tlosses: list\n\t\t\t\tlosses of the run on the current budget\n\t\t\t\t\n\t\tReturns\n\t\t-------\n\t\t\tlist of bool\n\t\t\t\tA boolean for each entry in config_ids indicating whether to advance it or not\n\t\t\n\t\t\n\t\t\"\"\"\n\t\traise NotImplementedError('_advance_to_next_stage not implemented for %s'%type(self).__name__)\n\n\tdef process_results(self):\n\t\t\"\"\"\n\t\tfunction that is called when a stage is completed and\n\t\tneeds to be analyzed befor further computations.\n\n\t\tThe code here implements the original SH algorithms by\n\t\tadvancing the k-best (lowest loss) configurations at the current\n\t\tbudget. k is defined by the num_configs list (see __init__)\n\t\tand the current stage value.\n\n\t\tFor more advanced methods like resampling after each stage,\n\t\toverload this function only.\n\t\t\"\"\"\n\t\tself.stage += 1\n\t\t\n\t\t# collect all config_ids that need to be compared\n\t\tconfig_ids = list(filter(lambda cid: self.data[cid].status == 'REVIEW', self.data.keys()))\n\n\t\tif (self.stage >= len(self.num_configs)):\n\t\t\tself.finish_up()\n\t\t\treturn\n\n\t\tbudgets = [self.data[cid].budget for cid in config_ids]\n\t\tif len(set(budgets)) > 1:\n\t\t\traise RuntimeError('Not all configurations have the same budget!')\n\t\tbudget = self.budgets[self.stage-1]\n\n\t\tlosses = np.array([self.data[cid].results[budget]['loss'] for cid in config_ids])\n\n\t\tadvance = self._advance_to_next_stage(config_ids, losses)\n\n\t\tfor i, a in enumerate(advance):\n\t\t\tif a:\n\t\t\t\tself.logger.debug('ITERATION: Advancing config %s to next budget %f'%(config_ids[i], self.budgets[self.stage]))\n\n\t\tfor i, cid in enumerate(config_ids):\n\t\t\tif advance[i]:\n\t\t\t\tself.data[cid].status = 'QUEUED'\n\t\t\t\tself.data[cid].budget = self.budgets[self.stage]\n\t\t\t\tself.actual_num_configs[self.stage] += 1\n\t\t\telse:\n\t\t\t\tself.data[cid].status = 'TERMINATED'\n\n\tdef finish_up(self):\n\t\tself.is_finished = True\n\n\t\tfor k,v in self.data.items():\n\t\t\tassert v.status in ['TERMINATED', 'REVIEW', 'CRASHED'], 'Configuration has not finshed yet!'\n\t\t\tv.status = 'COMPLETED'\n\n\nclass WarmStartIteration(BaseIteration):\n\t\"\"\"\n\titeration that imports a privious Result for warm starting\n\t\"\"\"\n\n\tdef __init__(self, Result, config_generator):\n\t\t\n\t\tself.is_finished=False\n\t\tself.stage = 0\n\n\t\t\n\t\tid2conf = Result.get_id2config_mapping()\n\t\tdelta_t = - max(map(lambda r: r.time_stamps['finished'], Result.get_all_runs()))\n\n\t\tsuper().__init__(-1, [len(id2conf)]\t, [None], None)\n\t\t\n\t\t\n\t\tfor i, id in enumerate(id2conf):\n\t\t\tnew_id = self.add_configuration(config=id2conf[id]['config'], config_info=id2conf[id]['config_info'])\n\t\t\t\n\t\t\tfor r in Result.get_runs_by_id(id):\n\t\t\t\n\t\t\t\t\n\t\t\t\tj = Job(new_id, config=id2conf[id]['config'], budget=r.budget)\n\t\t\t\t\n\t\t\t\tj.result = {'loss': r.loss, 'info': r.info}\n\t\t\t\tj.error_logs = r.error_logs\n\t\t\t\t\n\t\t\t\tfor k,v in r.time_stamps.items():\n\t\t\t\t\tj.timestamps[k] = v + delta_t\n\t\t\t\t\n\t\t\t\tself.register_result(j , skip_sanity_checks=True)\n\t\t\t\t\n\t\t\t\tconfig_generator.new_result(j, update_model=(i==len(id2conf)-1))\n\t\t\t\t\n\t\t# mark as finished, as no more runs should be executed from these runs\n\t\tself.is_finished = True\n\t\t\n\tdef fix_timestamps(self, time_ref):\n\t\t\"\"\"\n\t\t\tmanipulates internal time stamps such that the last run ends at time 0\n\t\t\"\"\"\n\t\t\n\t\tfor k,v in self.data.items():\n\t\t\tfor kk, vv in v.time_stamps.items():\n\t\t\t\tfor kkk,vvv in vv.items():\n\t\t\t\t\tself.data[k].time_stamps[kk][kkk] += time_ref\n\t\t\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/core/dispatcher.py",
    "content": "import threading\nimport logging\nimport queue\nimport time\n\nimport Pyro4\n\n\nclass Job(object):\n\tdef __init__(self, id, **kwargs):\n\t\tself.id = id\n\t\t\n\t\tself.kwargs = kwargs\n\t\t\n\t\tself.timestamps = {}\n\n\t\tself.result = None\n\t\tself.exception = None\n\n\t\tself.worker_name = None\n\n\tdef time_it(self, which_time):\n\t\tself.timestamps[which_time] = time.time()\n\n\tdef __repr__(self):\n\t\treturn(\\\n\t\t\t\"job_id: \" +str(self.id) + \"\\n\" + \\\n\t\t\t\"kwargs: \" + str(self.kwargs) + \"\\n\" + \\\n\t\t\t\"result: \" + str(self.result)+ \"\\n\" +\\\n\t\t\t\"exception: \"+ str(self.exception) + \"\\n\"\n\t\t)\n\tdef recreate_from_run(self, run):\n\t\t\n\t\trun.config_id\n\t\trun.budget\n\t\trun.error_logs  \n\t\trun.loss        \n\t\trun.info        \n\t\trun.time_stamps \n\n\n\n\nclass Worker(object):\n\tdef __init__(self, name, uri):\n\t\tself.name = name\n\t\tself.proxy = Pyro4.Proxy(uri)\n\t\tself.runs_job = None\n\n\tdef is_alive(self):\n\t\ttry:\n\t\t\tself.proxy._pyroReconnect(1)\n\t\texcept Pyro4.errors.ConnectionClosedError:\n\t\t\treturn False\n\t\texcept:\n\t\t\traise\n\t\treturn(True)\n\t\n\tdef shutdown(self):\n\t\tself.proxy.shutdown()\n\n\tdef is_busy(self):\n\t\treturn(self.proxy.is_busy())\n\t\t\n\tdef __repr__(self):\n\t\treturn(self.name)\n\n\nclass Dispatcher(object):\n\t\"\"\"\n\tThe dispatcher is responsible for assigning tasks to free workers, report results back to the master and\n\tcommunicate to the nameserver.\n\t\"\"\"\n\tdef __init__(self, new_result_callback, run_id='0',\n\t\t\t\t\tping_interval=10, nameserver='localhost',\n\t\t\t\t\tnameserver_port=None, \n\t\t\t\t\thost=None, logger=None, queue_callback=None):\n\t\t\"\"\"\n\t\tParameters\n\t\t----------\n\t\tnew_result_callback: function\n\t\t    function that will be called with a `Job instance <hpbandster.core.dispatcher.Job>`_ as argument.\n\t\t    From the `Job` the result can be read and e.g. logged.\n\t\trun_id: str\n\t\t    unique run_id associated with the HPB run\n\t\tping_interval: int\n\t\t    how often to ping for workers (in seconds)\n\t\tnameserver: str\n\t\t    address of the Pyro4 nameserver\n\t\tnameserver_port: int\n\t\t    port of Pyro4 nameserver\n\t\thost: str\n\t\t    ip (or name that resolves to that) of the network interface to use\n\t\tlogger: logging.Logger\n\t\t    logger-instance for info and debug\n\t\tqueue_callback: function\n\t\t    gets called with the number of workers in the pool on every update-cycle\n\t\t\"\"\"\n\n\t\tself.new_result_callback = new_result_callback\n\t\tself.queue_callback = queue_callback\n\t\tself.run_id = run_id\n\t\tself.nameserver = nameserver\n\t\tself.nameserver_port = nameserver_port\n\t\tself.host = host\n\t\tself.ping_interval = int(ping_interval)\n\t\tself.shutdown_all_threads = False\n\n\n\t\tif logger is None:\n\t\t\tself.logger = logging.getLogger('hpbandster')\n\t\telse:\n\t\t\tself.logger = logger\n\n\t\tself.worker_pool = {}\n\n\t\tself.waiting_jobs = queue.Queue()\n\t\tself.running_jobs = {}\n\t\tself.idle_workers = set()\n\n\n\t\tself.thread_lock = threading.Lock()\n\t\tself.runner_cond = threading.Condition(self.thread_lock)\n\t\tself.discover_cond = threading.Condition(self.thread_lock)\n\n\t\tself.pyro_id=\"hpbandster.run_%s.dispatcher\"%self.run_id\n\n\n\tdef run(self):\n\t\twith self.discover_cond:\n\t\t\tt1 = threading.Thread(target=self.discover_workers, name='discover_workers')\n\t\t\tt1.start()\n\t\t\tself.logger.info('DISPATCHER: started the \\'discover_worker\\' thread')\n\t\t\tt2 = threading.Thread(target=self.job_runner, name='job_runner')\n\t\t\tt2.start()\n\t\t\tself.logger.info('DISPATCHER: started the \\'job_runner\\' thread')\n\t\n\n\t\t\tself.pyro_daemon = Pyro4.core.Daemon(host=self.host)\n\n\t\t\twith Pyro4.locateNS(host=self.nameserver, port=self.nameserver_port) as ns:\n\t\t\t\turi = self.pyro_daemon.register(self, self.pyro_id)\n\t\t\t\tns.register(self.pyro_id, uri)\n\n\t\t\tself.logger.info(\"DISPATCHER: Pyro daemon running on %s\"%(self.pyro_daemon.locationStr))\n\n\t\t\n\t\tself.pyro_daemon.requestLoop()\n\n\n\t\twith self.discover_cond:\n\t\t\tself.shutdown_all_threads = True\n\t\t\tself.logger.info('DISPATCHER: Dispatcher shutting down')\n\t\t\t\n\t\t\tself.runner_cond.notify_all()\n\t\t\tself.discover_cond.notify_all()\n\t\t\t\n\t\t\t\n\t\t\n\t\t\twith Pyro4.locateNS(self.nameserver, port=self.nameserver_port) as ns:\n\t\t\t\tns.remove(self.pyro_id)\n\n\t\tt1.join()\n\t\tself.logger.debug('DISPATCHER: \\'discover_worker\\' thread exited')\n\t\tt2.join()\n\t\tself.logger.debug('DISPATCHER: \\'job_runner\\' thread exited')\n\t\tself.logger.info('DISPATCHER: shut down complete')\n\n\tdef shutdown_all_workers(self, rediscover=False):\n\t\twith self.discover_cond:\n\t\t\tfor worker in self.worker_pool.values():\n\t\t\t\tworker.shutdown()\n\t\t\tif rediscover:\n\t\t\t\ttime.sleep(1)\n\t\t\t\tself.discover_cond.notify()\n\n\tdef shutdown(self, shutdown_workers=False):\n\t\tif shutdown_workers:\n\t\t\tself.shutdown_all_workers()\n\n\t\twith self.runner_cond:\n\t\t\tself.pyro_daemon.shutdown()\n\t\n\t@Pyro4.expose\n\t@Pyro4.oneway\n\tdef trigger_discover_worker(self):\n\t\t#time.sleep(1)\n\t\tself.logger.info(\"DISPATCHER: A new worker triggered discover_worker\")\n\t\twith self.discover_cond:\n\t\t\tself.discover_cond.notify()\n\n\t\n\tdef discover_workers(self):\n\t\tself.discover_cond.acquire()\n\t\tsleep_interval = 1\n\t\t\n\t\twhile True:\n\t\t\tself.logger.debug('DISPATCHER: Starting worker discovery')\n\t\t\tupdate = False\n\t\t\n\t\t\twith Pyro4.locateNS(host=self.nameserver, port=self.nameserver_port) as ns:\n\t\t\t\tworker_names = ns.list(prefix=\"hpbandster.run_%s.worker.\"%self.run_id)\n\t\t\t\tself.logger.debug(\"DISPATCHER: Found %i potential workers, %i currently in the pool.\"%(len(worker_names), len(self.worker_pool)))\n\t\t\t\t\n\t\t\t\tfor wn, uri in worker_names.items():\n\t\t\t\t\tif not wn in self.worker_pool:\n\t\t\t\t\t\tw = Worker(wn, uri)\n\t\t\t\t\t\tif not w.is_alive():\n\t\t\t\t\t\t\tself.logger.debug('DISPATCHER: skipping dead worker, %s'%wn)\n\t\t\t\t\t\t\tcontinue \n\t\t\t\t\t\tupdate = True\n\t\t\t\t\t\tself.logger.info('DISPATCHER: discovered new worker, %s'%wn)\n\t\t\t\t\t\tself.worker_pool[wn] = w\n\n\t\t\t# check the current list of workers\n\t\t\tcrashed_jobs = set()\n\n\t\t\tall_workers = list(self.worker_pool.keys())\n\t\t\tfor wn in all_workers:\n\t\t\t\t# remove dead entries from the nameserver\n\t\t\t\tif not self.worker_pool[wn].is_alive():\n\t\t\t\t\tself.logger.info('DISPATCHER: removing dead worker, %s'%wn)\n\t\t\t\t\tupdate = True\n\t\t\t\t\t# todo check if there were jobs running on that that need to be rescheduled\n\n\t\t\t\t\tcurrent_job = self.worker_pool[wn].runs_job\n\n\t\t\t\t\tif not current_job is None:\n\t\t\t\t\t\tself.logger.info('Job %s was not completed'%str(current_job))\n\t\t\t\t\t\tcrashed_jobs.add(current_job)\n\n\t\t\t\t\tdel self.worker_pool[wn]\n\t\t\t\t\tself.idle_workers.discard(wn)\n\t\t\t\t\tcontinue\n\t\t\t\t\t\n\t\t\t\tif not self.worker_pool[wn].is_busy():\n\t\t\t\t\tself.idle_workers.add(wn)\n\n\n\t\t\t# try to submit more jobs if something changed\n\t\t\tif update:\n\t\t\t\tif not self.queue_callback is None:\n\t\t\t\t\tself.discover_cond.release()\n\t\t\t\t\tself.queue_callback(len(self.worker_pool))\n\t\t\t\t\tself.discover_cond.acquire()\n\t\t\t\tself.runner_cond.notify()\n\n\t\t\tfor crashed_job in crashed_jobs:\n\t\t\t\tself.discover_cond.release()\n\t\t\t\tself.register_result(crashed_job, {'result': None, 'exception': 'Worker died unexpectedly.'})\n\t\t\t\tself.discover_cond.acquire()\n\n\t\t\tself.logger.debug('DISPATCHER: Finished worker discovery')\n\n\t\t\t#if (len(self.worker_pool) == 0 ): # ping for new workers if no workers are currently available\n\t\t\t#\tself.logger.debug('No workers available! Keep pinging')\n\t\t\t#\tself.discover_cond.wait(sleep_interval)\n\t\t\t#\tsleep_interval *= 2\n\t\t\t#else:\n\t\t\tself.discover_cond.wait(self.ping_interval)\n\n\t\t\tif self.shutdown_all_threads:\n\t\t\t\tself.logger.debug('DISPATCHER: discover_workers shutting down')\n\t\t\t\tself.runner_cond.notify()\n\t\t\t\tself.discover_cond.release()\n\t\t\t\treturn\n\n\tdef number_of_workers(self):\n\t\twith self.discover_cond:\n\t\t\treturn(len(self.worker_pool))\n\n\tdef job_runner(self):\n\t\t\n\t\tself.runner_cond.acquire()\n\t\twhile True:\n\t\t\t\n\t\t\twhile self.waiting_jobs.empty() or len(self.idle_workers) == 0:\n\t\t\t\tself.logger.debug('DISPATCHER: jobs to submit = %i, number of idle workers = %i -> waiting!'%(self.waiting_jobs.qsize(),  len(self.idle_workers) ))\n\t\t\t\tself.runner_cond.wait()\n\t\t\t\tself.logger.debug('DISPATCHER: Trying to submit another job.')\n\t\t\t\tif self.shutdown_all_threads:\n\t\t\t\t\tself.logger.debug('DISPATCHER: job_runner shutting down')\n\t\t\t\t\tself.discover_cond.notify()\n\t\t\t\t\tself.runner_cond.release()\n\t\t\t\t\treturn\n\t\t\t\n\t\t\tjob = self.waiting_jobs.get()\n\t\t\twn = self.idle_workers.pop()\n\n\t\t\tworker = self.worker_pool[wn]\n\t\t\tself.logger.debug('DISPATCHER: starting job %s on %s'%(str(job.id),worker.name))\n\t\t\n\t\t\tjob.time_it('started')\n\t\t\tworker.runs_job = job.id\n\t\t\n\t\t\tworker.proxy.start_computation(self, job.id, **job.kwargs)\n\n\t\t\tjob.worker_name = wn\n\t\t\tself.running_jobs[job.id] = job\n\n\t\t\tself.logger.debug('DISPATCHER: job %s dispatched on %s'%(str(job.id),worker.name))\n\n\n\tdef submit_job(self, id, **kwargs):\n\t\tself.logger.debug('DISPATCHER: trying to submit job %s'%str(id))\n\t\twith self.runner_cond:\n\t\t\tjob = Job(id, **kwargs)\n\t\t\tjob.time_it('submitted')\n\t\t\tself.waiting_jobs.put(job)\n\t\t\tself.logger.debug('DISPATCHER: trying to notify the job_runner thread.')\n\t\t\tself.runner_cond.notify()\n\n\t@Pyro4.expose\n\t@Pyro4.callback\n\t@Pyro4.oneway\n\tdef register_result(self, id=None, result=None):\n\t\tself.logger.debug('DISPATCHER: job %s finished'%(str(id)))\n\t\twith self.runner_cond:\n\t\t\tself.logger.debug('DISPATCHER: register_result: lock acquired')\n\t\t\t# fill in missing information\n\t\t\tjob = self.running_jobs[id]\n\t\t\tjob.time_it('finished')\n\t\t\tjob.result = result['result']\n\t\t\tjob.exception = result['exception']\n\n\t\t\tself.logger.debug('DISPATCHER: job %s on %s finished'%(str(job.id),job.worker_name))\n\t\t\tself.logger.debug(str(job))\n\t\t\t\n\t\t\t# delete job\n\t\t\tdel self.running_jobs[id]\n\n\t\t\t# label worker as idle again\n\t\t\ttry:\n\t\t\t\tself.worker_pool[job.worker_name].runs_job = None\n\t\t\t\tself.worker_pool[job.worker_name].proxy._pyroRelease()\n\t\t\t\tself.idle_workers.add(job.worker_name)\n\t\t\t\t# notify the job_runner to check for more jobs to run\n\t\t\t\tself.runner_cond.notify()\n\t\t\texcept KeyError:\n\t\t\t\t# happens for crashed workers, but we can just continue\n\t\t\t\tpass\n\t\t\texcept:\n\t\t\t\traise\n\n\t\t# call users callback function to register the result\n\t\t# needs to be with the condition released, as the master can call\n\t\t# submit_job quickly enough to cause a dead-lock\n\t\tself.new_result_callback(job)\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/core/master.py",
    "content": "import os\nimport threading\nimport time\nimport math\nimport pdb\nimport copy\nimport logging\n\nimport numpy as np\n\n\nfrom hpbandster.core.dispatcher import Dispatcher\nfrom hpbandster.core.result import Result\nfrom hpbandster.core.base_iteration import WarmStartIteration\n\n\n\n\nclass Master(object):\n\tdef __init__(self,\n\t\t\trun_id,\n\t\t\tconfig_generator,\n\t\t\tworking_directory='.',\n\t\t\tping_interval=60,\n\t\t\tnameserver='127.0.0.1',\n\t\t\tnameserver_port=None,\n\t\t\thost=None,\n\t\t\tshutdown_workers=True,\n\t\t\tjob_queue_sizes=(-1,0),\n\t\t\tdynamic_queue_size=True,\n\t\t\tlogger=None,\n\t\t\tresult_logger=None,\n\t\t\tprevious_result = None,\n\t\t\t):\n\t\t\"\"\"The Master class is responsible for the book keeping and to decide what to run next. Optimizers are\n                instantiations of Master, that handle the important steps of deciding what configurations to run on what\n                budget when.\n\t\t\n\t\tParameters\n\t\t----------\n\t\trun_id : string\n\t\t\tA unique identifier of that Hyperband run. Use, for example, the cluster's JobID when running multiple\n\t\t\tconcurrent runs to separate them\n\t\tconfig_generator: hpbandster.config_generators object\n\t\t\tAn object that can generate new configurations and registers results of executed runs\n\t\tworking_directory: string\n\t\t\tThe top level working directory accessible to all compute nodes(shared filesystem).\n\t\teta : float\n\t\t\tIn each iteration, a complete run of sequential halving is executed. In it,\n\t\t\tafter evaluating each configuration on the same subset size, only a fraction of\n\t\t\t1/eta of them 'advances' to the next round.\n\t\t\tMust be greater or equal to 2.\n\t\tmin_budget : float\n\t\t\tThe smallest budget to consider. Needs to be positive!\n\t\tmax_budget : float\n\t\t\tthe largest budget to consider. Needs to be larger than min_budget!\n\t\t\tThe budgets will be geometrically distributed :math:`\\sim \\eta^k` for\n\t\t\t:math:`k\\in [0, 1, ... , num\\_subsets - 1]`.\n\t\tping_interval: int\n\t\t\tnumber of seconds between pings to discover new nodes. Default is 60 seconds.\n\t\tnameserver: str\n\t\t\taddress of the Pyro4 nameserver\n\t\tnameserver_port: int\n\t\t\tport of Pyro4 nameserver\n\t\thost: str\n\t\t\tip (or name that resolves to that) of the network interface to use\n\t\tshutdown_workers: bool\n\t\t\tflag to control whether the workers are shutdown after the computation is done\n\t\tjob_queue_size: tuple of ints\n\t\t\tmin and max size of the job queue. During the run, when the number of jobs in the queue\n\t\t\treaches the min value, it will be filled up to the max size. Default: (0,1)\n\t\tdynamic_queue_size: bool\n\t\t\tWhether or not to change the queue size based on the number of workers available.\n\t\t\tIf true (default), the job_queue_sizes are relative to the current number of workers.\n\t\tlogger: logging.logger like object\n\t\t\tthe logger to output some (more or less meaningful) information\n\t\tresult_logger: hpbandster.api.results.util.json_result_logger object\n\t\t\ta result logger that writes live results to disk\n\t\tprevious_result: hpbandster.core.result.Result object\n\t\t\tprevious run to warmstart the run\n\t\t\"\"\"\n\n\t\tself.working_directory = working_directory\n\t\tos.makedirs(self.working_directory, exist_ok=True)\n\t\t\n\n\t\tif logger is None:\n\t\t\tself.logger = logging.getLogger('hpbandster')\n\t\telse:\n\t\t\tself.logger = logger\n\n\t\tself.result_logger = result_logger\n\n\n\t\tself.config_generator = config_generator\n\t\tself.time_ref = None\n\n\n\t\tself.iterations = []\n\t\tself.jobs = []\n\n\t\tself.num_running_jobs = 0\n\t\tself.job_queue_sizes = job_queue_sizes\n\t\tself.user_job_queue_sizes = job_queue_sizes\n\t\tself.dynamic_queue_size = dynamic_queue_size\n\n\t\tif job_queue_sizes[0] >= job_queue_sizes[1]:\n\t\t\traise ValueError(\"The queue size range needs to be (min, max) with min<max!\")\n\n\t\tif previous_result is None:\n\t\t\tself.warmstart_iteration = []\n\n\t\telse:\n\t\t\tself.warmstart_iteration = [WarmStartIteration(previous_result, self.config_generator)]\n\n\t\t# condition to synchronize the job_callback and the queue\n\t\tself.thread_cond = threading.Condition()\n\n\t\tself.config = {\n\t\t\t\t\t\t'time_ref'   : self.time_ref\n\t\t\t\t\t}\n\n\t\tself.dispatcher = Dispatcher( self.job_callback, queue_callback=self.adjust_queue_size, run_id=run_id, ping_interval=ping_interval, nameserver=nameserver, nameserver_port=nameserver_port, host=host)\n\n\t\tself.dispatcher_thread = threading.Thread(target=self.dispatcher.run)\n\t\tself.dispatcher_thread.start()\n\n\n\tdef shutdown(self, shutdown_workers=False):\n\t\tself.logger.debug('HBMASTER: shutdown initiated, shutdown_workers = %s'%(str(shutdown_workers)))\n\t\tself.dispatcher.shutdown(shutdown_workers)\n\t\tself.dispatcher_thread.join()\n\n\n\tdef wait_for_workers(self, min_n_workers=1):\n\t\t\"\"\"\n\t\thelper function to hold execution until some workers are active\n\n\t\tParameters\n\t\t----------\n\t\tmin_n_workers: int\n\t\t\tminimum number of workers present before the run starts\t\t\n\t\t\"\"\"\n\t\n\t\tself.logger.debug('wait_for_workers trying to get the condition')\n\t\twith self.thread_cond:\n\t\t\twhile (self.dispatcher.number_of_workers() < min_n_workers):\n\t\t\t\tself.logger.debug('HBMASTER: only %i worker(s) available, waiting for at least %i.'%(self.dispatcher.number_of_workers(), min_n_workers))\n\t\t\t\tself.thread_cond.wait(1)\n\t\t\t\tself.dispatcher.trigger_discover_worker()\n\t\t\t\t\n\t\tself.logger.debug('Enough workers to start this run!')\n\t\t\t\n\n\tdef get_next_iteration(self, iteration, iteration_kwargs):\n\t\t\"\"\"\n\t\tinstantiates the next iteration\n\n\t\tOverwrite this to change the iterations for different optimizers\n\n\t\tParameters\n\t\t----------\n\t\t\titeration: int\n\t\t\t\tthe index of the iteration to be instantiated\n\t\t\titeration_kwargs: dict\n\t\t\t\tadditional kwargs for the iteration class\n\n\t\tReturns\n\t\t-------\n\t\t\tHB_iteration: a valid HB iteration object\n\t\t\"\"\"\n\t\t\n\t\traise NotImplementedError('implement get_next_iteration for %s'%(type(self).__name__))\n\n\n\tdef run(self, n_iterations=1, min_n_workers=1, iteration_kwargs = {},):\n\t\t\"\"\"\n\t\t\trun n_iterations of SuccessiveHalving\n\n\t\tParameters\n\t\t----------\n\t\tn_iterations: int\n\t\t\tnumber of iterations to be performed in this run\n\t\tmin_n_workers: int\n\t\t\tminimum number of workers before starting the run\n\t\t\"\"\"\n\n\t\tself.wait_for_workers(min_n_workers)\n\t\t\n\t\titeration_kwargs.update({'result_logger': self.result_logger})\n\n\t\tif self.time_ref is None:\n\t\t\tself.time_ref = time.time()\n\t\t\tself.config['time_ref'] = self.time_ref\n\t\t\n\t\t\tself.logger.info('HBMASTER: starting run at %s'%(str(self.time_ref)))\n\n\t\tself.thread_cond.acquire()\n\t\twhile True:\n\n\t\t\tself._queue_wait()\n\t\t\t\n\t\t\tnext_run = None\n\t\t\t# find a new run to schedule\n\t\t\tfor i in self.active_iterations():\n\t\t\t\tnext_run = self.iterations[i].get_next_run()\n\t\t\t\tif not next_run is None: break\n\n\t\t\tif not next_run is None:\n\t\t\t\tself.logger.debug('HBMASTER: schedule new run for iteration %i'%i)\n\t\t\t\tself._submit_job(*next_run)\n\t\t\t\tcontinue\n\t\t\telse:\n\t\t\t\tif n_iterations > 0:\t#we might be able to start the next iteration\n\t\t\t\t\tself.iterations.append(self.get_next_iteration(len(self.iterations), iteration_kwargs))\n\t\t\t\t\tn_iterations -= 1\n\t\t\t\t\tcontinue\n\n\t\t\t# at this point there is no imediate run that can be scheduled,\n\t\t\t# so wait for some job to finish if there are active iterations\n\t\t\tif self.active_iterations():\n\t\t\t\tself.thread_cond.wait()\n\t\t\telse:\n\t\t\t\tbreak\n\n\t\tself.thread_cond.release()\n\t\t\n\t\tfor i in self.warmstart_iteration:\n\t\t\ti.fix_timestamps(self.time_ref)\n\t\t\t\n\t\tws_data = [i.data for i in self.warmstart_iteration]\n\t\t\n\t\treturn Result([copy.deepcopy(i.data) for i in self.iterations] + ws_data, self.config)\n\n\n\tdef adjust_queue_size(self, number_of_workers=None):\n\n\t\tself.logger.debug('HBMASTER: number of workers changed to %s'%str(number_of_workers))\n\t\twith self.thread_cond:\n\t\t\tself.logger.debug('adjust_queue_size: lock accquired')\n\t\t\tif self.dynamic_queue_size:\n\t\t\t\tnw = self.dispatcher.number_of_workers() if number_of_workers is None else number_of_workers\n\t\t\t\tself.job_queue_sizes = (self.user_job_queue_sizes[0] + nw, self.user_job_queue_sizes[1] + nw)\n\t\t\t\tself.logger.info('HBMASTER: adjusted queue size to %s'%str(self.job_queue_sizes))\n\t\t\tself.thread_cond.notify_all()\n\n\n\tdef job_callback(self, job):\n\t\t\"\"\"\n\t\tmethod to be called when a job has finished\n\n\t\tthis will do some book keeping and call the user defined\n\t\tnew_result_callback if one was specified\n\t\t\"\"\"\n\t\tself.logger.debug('job_callback for %s started'%str(job.id))\n\t\twith self.thread_cond:\n\t\t\tself.logger.debug('job_callback for %s got condition'%str(job.id))\n\t\t\tself.num_running_jobs -= 1\n\n\t\t\tif not self.result_logger is None:\n\t\t\t\tself.result_logger(job)\n\t\t\tself.iterations[job.id[0]].register_result(job)\n\t\t\tself.config_generator.new_result(job)\n\n\t\t\tif self.num_running_jobs <= self.job_queue_sizes[0]:\n\t\t\t\tself.logger.debug(\"HBMASTER: Trying to run another job!\")\n\t\t\t\tself.thread_cond.notify()\n\n\t\tself.logger.debug('job_callback for %s finished'%str(job.id))\n\n\tdef _queue_wait(self):\n\t\t\"\"\"\n\t\thelper function to wait for the queue to not overflow/underload it\n\t\t\"\"\"\n\t\t\n\t\tif self.num_running_jobs >= self.job_queue_sizes[1]:\n\t\t\twhile(self.num_running_jobs > self.job_queue_sizes[0]):\n\t\t\t\tself.logger.debug('HBMASTER: running jobs: %i, queue sizes: %s -> wait'%(self.num_running_jobs, str(self.job_queue_sizes)))\n\t\t\t\tself.thread_cond.wait()\n\n\tdef _submit_job(self, config_id, config, budget):\n\t\t\"\"\"\n\t\thidden function to submit a new job to the dispatcher\n\n\t\tThis function handles the actual submission in a\n\t\t(hopefully) thread save way\n\t\t\"\"\"\n\t\tself.logger.debug('HBMASTER: trying submitting job %s to dispatcher'%str(config_id))\n\t\twith self.thread_cond:\n\t\t\tself.logger.debug('HBMASTER: submitting job %s to dispatcher'%str(config_id))\n\t\t\tself.dispatcher.submit_job(config_id, config=config, budget=budget, working_directory=self.working_directory)\n\t\t\tself.num_running_jobs += 1\n\n\t\t#shouldn't the next line be executed while holding the condition?\n\t\tself.logger.debug(\"HBMASTER: job %s submitted to dispatcher\"%str(config_id))\n\n\tdef active_iterations(self):\n\t\t\"\"\"\n\t\tfunction to find active (not marked as finished) iterations \n\n\t\tReturns\n\t\t-------\n\t\t\tlist: all active iteration objects (empty if there are none)\n\t\t\"\"\"\n\n\t\tl = list(filter(lambda idx: not self.iterations[idx].is_finished, range(len(self.iterations))))\n\t\treturn(l)\n\n\tdef __del__(self):\n\t\tpass\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/core/nameserver.py",
    "content": "import os\nimport pickle\nimport json\nimport threading\n\nimport Pyro4.naming\n\n\ndef nic_name_to_host(nic_name):\n\t\"\"\" helper function to translate the name of a network card into a valid host name\"\"\"\n\tfrom netifaces import ifaddresses, AF_INET\n\thost = ifaddresses(nic_name).setdefault(AF_INET, [{'addr': 'No IP addr'}] )[0]['addr']\n\treturn(host)\n\n\nclass NameServer(object):\n\t\"\"\"\n\tThe nameserver serves as a phonebook-like lookup table for your workers. Unique names are created so the workers\n\tcan work in parallel and register their results without creating racing conditions. The implementation uses\n\t`PYRO4 <https://pythonhosted.org/Pyro4/nameserver.html>`_ as a backend and this class is basically a wrapper.\n\t\"\"\"\n\tdef __init__(self, run_id, working_directory=None, host=None, port=0, nic_name=None):\n\t\t\"\"\"\n\t\tParameters\n\t\t----------\n\t\t\trun_id: str\n\t\t\t\tunique run_id associated with the HPB run\n\t\t\tworking_directory: str\n\t\t\t\tpath to the working directory of the HPB run to store the nameservers credentials.\n\t\t\t\tIf None, no config file will be written.\n\t\t\thost: str\n\t\t\t\tthe hostname to use for the nameserver\n\t\t\tport: int\n\t\t\t\tthe port to be used. Default (=0) means a random port\n\t\t\tnic_name: str\n\t\t\t\tname of the network interface to use (only used if host is not given)\n\t\t\"\"\"\n\t\tself.run_id = run_id\n\t\tself.host = host\n\t\tself.nic_name = nic_name\n\t\tself.port = port\n\t\tself.dir = working_directory\n\t\tself.conf_fn = None\n\t\tself.pyro_ns = None\n\n\n\n\tdef start(self):\n\t\t\"\"\"\t\n\t\tstarts a Pyro4 nameserver in a separate thread\n\t\t\n\t\tReturns\n\t\t-------\n\t\t\ttuple (str, int):\n\t\t\t\tthe host name and the used port\n\t\t\"\"\"\n\t\n\t\tif self.host is None:\n\t\t\tif self.nic_name is None:\n\t\t\t\tself.host = 'localhost'\n\t\t\telse:\n\t\t\t\tself.host = nic_name_to_host(self.nic_name)\n\n\t\turi, self.pyro_ns, _ = Pyro4.naming.startNS(host=self.host, port=self.port)\n\n\t\tself.host, self.port = self.pyro_ns.locationStr.split(':')\n\t\tself.port = int(self.port)\n\t\t\n\t\tthread = threading.Thread(target=self.pyro_ns.requestLoop, name='Pyro4 nameserver started by HpBandSter')\n\t\tthread.start()\n\n\t\tif not self.dir is None:\n\t\t\tos.makedirs(self.dir, exist_ok=True)\n\t\t\tself.conf_fn = os.path.join(self.dir, 'HPB_run_%s_pyro.pkl'%self.run_id)\n\n\t\t\twith open(self.conf_fn, 'wb') as fh:\n\t\t\t\tpickle.dump((self.host, self.port), fh)\n\t\t\n\t\treturn(self.host, self.port)\n\n\n\tdef shutdown(self):\n\t\t\"\"\"\n\t\t\tclean shutdown of the nameserver and the config file (if written)\n\t\t\"\"\"\n\t\tif not self.pyro_ns is None:\n\t\t\tself.pyro_ns.shutdown()\n\t\t\tself.pyro_ns = None\n\t\t\n\t\tif not self.conf_fn is None:\n\t\t\tos.remove(self.conf_fn)\n\t\t\tself.conf_fn = None\n\n\n\tdef __del__(self):\n\t\tself.shutdown()\n\n\n\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/core/result.py",
    "content": "import copy\nimport os\nimport json\n\nfrom hpbandster.core.base_iteration import  Datum\n\nclass Run(object):\n\t\"\"\"\n\t\tNot a proper class, more a 'struct' to bundle important\n\t\tinformation about a particular run\n\t\"\"\"\n\tdef __init__(self, config_id, budget, loss, info, time_stamps, error_logs):\n\t\tself.config_id   = config_id\n\t\tself.budget      = budget\n\t\tself.error_logs  = error_logs\n\t\tself.loss        = loss\n\t\tself.info        = info\n\t\tself.time_stamps = time_stamps\n\n\tdef __repr__(self):\n\t\treturn(\\\n\t\t\t\"config_id: %s\\t\"%(self.config_id,) + \\\n\t\t\t\"budget: %f\\t\"%self.budget + \\\n\t\t\t\"loss: %s\\n\"%self.loss + \\\n\t\t\t\"time_stamps: {submitted} (submitted), {started} (started), {finished} (finished)\\n\".format(**self.time_stamps) + \\\n\t\t\t\"info: %s\\n\"%self.info\n\t\t)\n\tdef __getitem__ (self, k):\n\t\t\"\"\"\n\t\t\t in case somebody wants to use it like a dictionary\n\t\t\"\"\"\n\t\treturn(getattr(self, k))\n\n\ndef extract_HBS_learning_curves(runs):\n\t\"\"\"\n\tfunction to get the hyperband learning curves\n\n\tThis is an example function showing the interface to use the\n\tHB_result.get_learning_curves method.\n\n\tParameters\n\t----------\n\n\truns: list of HB_result.run objects\n\t\tthe performed runs for an unspecified config\n\n\tReturns\n\t-------\n\n\tlist of learning curves: list of lists of tuples\n\t\tAn individual learning curve is a list of (t, x_t) tuples.\n\t\tThis function must return a list of these. One could think\n\t\tof cases where one could extract multiple learning curves\n\t\tfrom these runs, e.g. if each run is an independent training\n\t\trun of a neural network on the data.\n\t\t\n\t\"\"\"\n\tsr = sorted(runs, key=lambda r: r.budget)\n\tlc = list(filter(lambda t: not t[1] is None, [(r.budget, r.loss) for r in sr]))\n\treturn([lc,])\n\t\t\n\nclass json_result_logger(object):\n\tdef __init__(self, directory, overwrite=False):\n\t\t\"\"\"\n\t\tconvenience logger for 'semi-live-results'\n\n\t\tLogger that writes job results into two files (configs.json and results.json).\n\t\tBoth files contain propper json objects in each line.\n\n\t\tThis version opens and closes the files for each result.\n\t\tThis might be very slow if individual runs are fast and the\n\t\tfilesystem is rather slow (e.g. a NFS).\n\n\t\tParameters\n\t\t----------\n\n\t\tdirectory: string\n\t\t\tthe directory where the two files 'configs.json' and\n\t\t\t'results.json' are stored\n\t\toverwrite: bool\n\t\t\tIn case the files already exist, this flag controls the\n\t\t\tbehavior:\n\t\t\t\n\t\t\t\t* True:   The existing files will be overwritten. Potential risk of deleting previous results\n\t\t\t\t* False:  A FileExistsError is raised and the files are not modified.\n\t\t\"\"\"\n\n\t\tos.makedirs(directory, exist_ok=True)\n\n\t\t\n\t\tself.config_fn  = os.path.join(directory, 'configs.json')\n\t\tself.results_fn = os.path.join(directory, 'results.json')\n\n\n\t\ttry:\n\t\t\twith open(self.config_fn, 'x') as fh: pass\n\t\texcept FileExistsError:\n\t\t\tif overwrite:\n\t\t\t\twith open(self.config_fn, 'w') as fh: pass\n\t\t\telse:\n\t\t\t\traise FileExistsError('The file %s already exists.'%self.config_fn)\n\t\texcept:\n\t\t\traise\n\n\t\ttry:\n\t\t\twith open(self.results_fn, 'x') as fh: pass\n\t\texcept FileExistsError:\n\t\t\tif overwrite:\n\t\t\t\twith open(self.results_fn, 'w') as fh: pass\n\t\t\telse:\n\t\t\t\traise FileExistsError('The file %s already exists.'%self.config_fn)\n\n\t\texcept:\n\t\t\traise\n\n\t\tself.config_ids = set()\n\n\tdef new_config(self, config_id, config, config_info):\n\t\tif not config_id in self.config_ids:\n\t\t\tself.config_ids.add(config_id)\n\t\t\twith open(self.config_fn, 'a') as fh:\n\t\t\t\tfh.write(json.dumps([config_id, config, config_info]))\n\t\t\t\tfh.write('\\n')\n\n\tdef __call__(self, job):\n\t\tif not job.id in self.config_ids:\n\t\t\t#should never happen! TODO: log warning here!\n\t\t\tself.config_ids.add(job.id)\n\t\t\twith open(self.config_fn, 'a') as fh:\n\t\t\t\tfh.write(json.dumps([job.id, job.kwargs['config'], {}]))\n\t\t\t\tfh.write('\\n')\n\t\twith open(self.results_fn, 'a') as fh:\n\t\t\tfh.write(json.dumps([job.id, job.kwargs['budget'], job.timestamps, job.result, job.exception]))\n\t\t\tfh.write(\"\\n\")\n\n\ndef logged_results_to_HBS_result(directory):\n\t\"\"\"\n\tfunction to import logged 'live-results' and return a HB_result object\n\n\tYou can load live run results with this function and the returned\n\tHB_result object gives you access to the results the same way\n\ta finished run would.\n\t\n\tParameters\n\t----------\n\tdirectory: str\n\t\tthe directory containing the results.json and config.json files\n\n\tReturns\n\t-------\n\thpbandster.core.result.Result: :object:\n\t\tTODO\n\t\n\t\"\"\"\n\tdata = {}\n\ttime_ref = float('inf')\n\tbudget_set = set()\n\t\n\twith open(os.path.join(directory, 'configs.json')) as fh:\n\t\tfor line in fh:\n\t\t\t\n\t\t\tline = json.loads(line)\n\t\t\t\n\t\t\tif len(line) == 3:\n\t\t\t\tconfig_id, config, config_info = line\n\t\t\tif len(line) == 2:\n\t\t\t\tconfig_id, config, = line\n\t\t\t\tconfig_info = 'N/A'\n\n\t\t\tdata[tuple(config_id)] = Datum(config=config, config_info=config_info)\n\n\twith open(os.path.join(directory, 'results.json')) as fh:\n\t\tfor line in fh:\n\t\t\tconfig_id, budget,time_stamps, result, exception = json.loads(line)\n\n\t\t\tid = tuple(config_id)\n\t\t\t\n\t\t\tdata[id].time_stamps[budget] = time_stamps\n\t\t\tdata[id].results[budget] = result\n\t\t\tdata[id].exceptions[budget] = exception\n\n\t\t\tbudget_set.add(budget)\n\t\t\ttime_ref = min(time_ref, time_stamps['submitted'])\n\n\n\t# infer the hyperband configuration from the data\n\tbudget_list = sorted(list(budget_set))\n\t\n\tHB_config = {\n\t\t\t\t\t\t'eta'        : None if len(budget_list) < 2 else budget_list[1]/budget_list[0],\n\t\t\t\t\t\t'min_budget' : min(budget_set),\n\t\t\t\t\t\t'max_budget' : max(budget_set),\n\t\t\t\t\t\t'budgets'    : budget_list,\n\t\t\t\t\t\t'max_SH_iter': len(budget_set),\n\t\t\t\t\t\t'time_ref'   : time_ref\n\t\t\t\t}\n\treturn(Result([data], HB_config))\n\n\nclass Result(object):\n\t\"\"\"\n\tObject returned by the HB_master.run function\n\n\tThis class offers a simple API to access the information from\n\ta Hyperband run.\n\t\"\"\"\n\tdef __init__ (self, HB_iteration_data, HB_config):\n\t\tself.data = HB_iteration_data\n\t\tself.HB_config = HB_config\n\t\tself._merge_results()\n\n\tdef __getitem__(self, k):\n\t\treturn(self.data[k])\n\n\n\tdef get_incumbent_id(self):\n\t\t\"\"\"\n\t\tFind the config_id of the incumbent.\n\n\t\tThe incumbent here is the configuration with the smallest loss\n\t\tamong all runs on the maximum budget! If no run finishes on the\n\t\tmaximum budget, None is returned!\n\t\t\"\"\"\n\t\ttmp_list = []\n\t\tfor k,v in self.data.items():\n\t\t\ttry:\n\t\t\t\t# only things run for the max budget are considered\n\t\t\t\tres = v.results[self.HB_config['max_budget']]\n\t\t\t\tif not res is None:\n\t\t\t\t\ttmp_list.append((res['loss'], k))\n\t\t\texcept KeyError as e:\n\t\t\t\tpass\n\t\t\texcept:\n\t\t\t\traise\n\n\t\tif len(tmp_list) > 0:\n\t\t\treturn(min(tmp_list)[1])\n\t\treturn(None)\n\n\n\n\tdef get_incumbent_trajectory(self, all_budgets=True, bigger_is_better=True, non_decreasing_budget=True):\n\t\t\"\"\"\n\t\tReturns the best configurations over time\n\t\t\n\t\t\n\t\tParameters\n\t\t----------\n\t\t\tall_budgets: bool\n\t\t\t\tIf set to true all runs (even those not with the largest budget) can be the incumbent.\n\t\t\t\tOtherwise, only full budget runs are considered\n\t\t\tbigger_is_better:bool\n\t\t\t\tflag whether an evaluation on a larger budget is always considered better.\n\t\t\t\tIf True, the incumbent might increase for the first evaluations on a bigger budget\n\t\t\tnon_decreasing_budget: bool\n\t\t\t\tflag whether the budget of a new incumbent should be at least as big as the one for\n\t\t\t\tthe current incumbent.\n\t\tReturns\n\t\t-------\n\t\t\tdict:\n\t\t\t\tdictionary with all the config IDs, the times the runs\n\t\t\t\tfinished, their respective budgets, and corresponding losses\n\t\t\"\"\"\n\t\tall_runs = self.get_all_runs(only_largest_budget = not all_budgets)\n\t\t\n\t\tif not all_budgets:\n\t\t\tall_runs = list(filter(lambda r: r.budget==res.HB_config['max_budget'], all_runs))\n\t\t\n\t\tall_runs.sort(key=lambda r: r.time_stamps['finished'])\n\t\t\n\t\treturn_dict = { 'config_ids' : [],\n\t\t\t\t\t\t'times_finished': [],\n\t\t\t\t\t\t'budgets'    : [],\n\t\t\t\t\t\t'losses'     : [],\n\t\t}\n\t\n\t\tcurrent_incumbent = float('inf')\n\t\tincumbent_budget = self.HB_config['min_budget']\n\t\t\n\t\tfor r in all_runs:\n\t\t\tif r.loss is None: continue\n\t\t\t\n\t\t\tnew_incumbent = False\n\t\t\t\n\t\t\tif bigger_is_better and r.budget > incumbent_budget:\n\t\t\t\tnew_incumbent = True\n\t\t\t\n\t\t\t\n\t\t\tif r.loss < current_incumbent:\n\t\t\t\tnew_incumbent = True\n\t\t\t\n\t\t\tif non_decreasing_budget and r.budget < incumbent_budget:\n\t\t\t\tnew_incumbent = False\n\t\t\t\n\t\t\tif new_incumbent:\n\t\t\t\tcurrent_incumbent = r.loss\n\t\t\t\tincumbent_budget  = r.budget\n\t\t\t\t\n\t\t\t\treturn_dict['config_ids'].append(r.config_id)\n\t\t\t\treturn_dict['times_finished'].append(r.time_stamps['finished'])\n\t\t\t\treturn_dict['budgets'].append(r.budget)\n\t\t\t\treturn_dict['losses'].append(r.loss)\n\n\t\tif current_incumbent != r.loss:\n\t\t\tr = all_runs[-1]\n\t\t\n\t\t\treturn_dict['config_ids'].append(return_dict['config_ids'][-1])\n\t\t\treturn_dict['times_finished'].append(r.time_stamps['finished'])\n\t\t\treturn_dict['budgets'].append(return_dict['budgets'][-1])\n\t\t\treturn_dict['losses'].append(return_dict['losses'][-1])\n\n\t\t\t\n\t\treturn (return_dict)\n\n\n\tdef get_runs_by_id(self, config_id):\n\t\t\"\"\"\n\t\treturns a list of runs for a given config id\n\n\t\tThe runs are sorted by ascending budget, so '-1' will give\n\t\tthe longest run for this config.\n\t\t\"\"\"\n\t\td = self.data[config_id]\n\n\t\truns = []\n\t\tfor b in d.results.keys():\n\t\t\ttry:\n\t\t\t\terr_logs = d.exceptions.get(b, None)\n\n\t\t\t\tif d.results[b] is None:\n\t\t\t\t\tr = Run(config_id, b, None, None , d.time_stamps[b], err_logs)\n\t\t\t\telse:\n\t\t\t\t\tr = Run(config_id, b, d.results[b]['loss'], d.results[b]['info'] , d.time_stamps[b], err_logs)\n\t\t\t\truns.append(r)\n\t\t\texcept:\n\t\t\t\traise\n\t\truns.sort(key=lambda r: r.budget)\n\t\treturn(runs)\n\n\n\tdef get_learning_curves(self, lc_extractor=extract_HBS_learning_curves, config_ids=None):\n\t\t\"\"\"\n\t\textracts all learning curves from all run configurations\n\n\t\tParameters\n\t\t----------\n\t\t\tlc_extractor: callable\n\t\t\t\ta function to return a list of learning_curves.\n\t\t\t\tdefaults to hpbanster.HB_result.extract_HP_learning_curves\n\t\t\tconfig_ids: list of valid config ids\n\t\t\t\tif only a subset of the config ids is wanted\n\n\t\tReturns\n\t\t-------\n\t\t\tdict\n\t\t\t\ta dictionary with the config_ids as keys and the\n\t\t\t\tlearning curves as values\n\t\t\"\"\"\n\n\t\tconfig_ids = self.data.keys() if config_ids is None else config_ids\n\t\t\n\t\tlc_dict = {}\n\t\t\n\t\tfor id in config_ids:\n\t\t\truns = self.get_runs_by_id(id)\n\t\t\tlc_dict[id] = lc_extractor(runs)\n\t\t\t\n\t\treturn(lc_dict)\n\n\n\tdef get_all_runs(self, only_largest_budget=False):\n\t\t\"\"\"\n\t\treturns all runs performed\n\n\t\tParameters\n\t\t----------\n\t\t\tonly_largest_budget: boolean\n\t\t\t\tif True, only the largest budget for each configuration\n\t\t\t\tis returned. This makes sense if the runs are continued\n\t\t\t\tacross budgets and the info field contains the information\n\t\t\t\tyou care about. If False, all runs of a configuration\n\t\t\t\tare returned\n\t\t\"\"\"\n\t\tall_runs = []\n\n\t\tfor k in self.data.keys():\n\t\t\truns = self.get_runs_by_id(k)\n\n\t\t\tif len(runs) > 0:\n\t\t\t\tif only_largest_budget:\n\t\t\t\t\tall_runs.append(runs[-1])\n\t\t\t\telse:\n\t\t\t\t\tall_runs.extend(runs)\n\n\t\treturn(all_runs)\n\n\tdef get_id2config_mapping(self):\n\t\t\"\"\"\n\t\treturns a dict where the keys are the config_ids and the values\n\t\tare the actual configurations\n\t\t\"\"\"\n\t\tnew_dict = {}\n\t\tfor k, v in self.data.items():\n\t\t\tnew_dict[k] = {}\n\t\t\tnew_dict[k]['config'] = copy.deepcopy(v.config)\n\t\t\ttry:\n\t\t\t\tnew_dict[k]['config_info'] = copy.deepcopy(v.config_info)\n\t\t\texcept:\n\t\t\t\tpass\n\t\treturn(new_dict)\n\n\tdef _merge_results(self):\n\t\t\"\"\"\n\t\thidden function to merge the list of results into one\n\t\tdictionary and 'normalize' the time stamps\n\t\t\"\"\"\n\t\tnew_dict = {}\n\t\tfor it in self.data:\n\t\t\tnew_dict.update(it)\n\n\t\tfor k,v in new_dict.items():\n\t\t\tfor kk, vv in v.time_stamps.items():\n\t\t\t\tfor kkk,vvv in vv.items():\n\t\t\t\t\tnew_dict[k].time_stamps[kk][kkk] = vvv - self.HB_config['time_ref']\n\n\t\tself.data = new_dict\n\n\tdef num_iterations(self):\n\t\treturn(max([k[0] for k in self.data.keys()]) + 1)\n\t\t\n\n\tdef get_fANOVA_data(self, config_space, budgets=None, loss_fn=lambda r: r.loss, failed_loss=None):\n\n\t\timport numpy as np\n\t\timport ConfigSpace as CS\n\n\t\tid2conf = self.get_id2config_mapping()\n\n\t\tif budgets is None:\n\t\t\tbudgets = self.HB_config['budgets']\n\n\t\tif len(budgets)>1:\n\t\t\tconfig_space.add_hyperparameter(CS.UniformFloatHyperparameter('budget', min(budgets), max(budgets), log=True))\n\t\t\n\t\thp_names = config_space.get_hyperparameter_names()\n\t\thps = config_space.get_hyperparameters()\n\t\tneeds_transform = list(map(lambda h: isinstance(h, CS.CategoricalHyperparameter), hps))\n\n\t\tall_runs = self.get_all_runs(only_largest_budget=False)\n\n\n\t\tall_runs=list(filter( lambda r: r.budget in budgets, all_runs))\n\n\t\tX = []\n\t\ty = []\n\n\t\tfor r in all_runs:\n\t\t\tif r.loss is None:\n\t\t\t\tif failed_loss is None: continue\n\t\t\t\telse: y.append(failed_loss)\n\t\t\telse:\n\t\t\t\ty.append(loss_fn(r))\n\t\t\t\t\n\t\t\tconfig = id2conf[r.config_id]['config']\n\t\t\tif len(budgets)>1:\n\t\t\t\tconfig['budget'] = r.budget\n\n\t\t\tconfig = CS.Configuration(config_space, config)\n\t\t\t\n\t\t\tx = []\n\t\t\tfor (name, hp, transform) in zip(hp_names, hps, needs_transform):\n\t\t\t\tif transform:\n\t\t\t\t\tx.append(hp._inverse_transform(config[name]))\n\t\t\t\telse:\n\t\t\t\t\tx.append(config[name])\n\t\t\t\n\t\t\tX.append(x)\n\n\t\treturn(np.array(X), np.array(y), config_space)\n\n\n\tdef get_pandas_dataframe(self, budgets=None, loss_fn=lambda r: r.loss):\n\n\t\timport numpy as np\n\t\timport pandas as pd\n\n\t\tid2conf = self.get_id2config_mapping()\n\n\t\tdf_x = pd.DataFrame()\n\t\tdf_y = pd.DataFrame()\n\n\n\t\tif budgets is None:\n\t\t\tbudgets = self.HB_config['budgets']\n\n\t\tall_runs = self.get_all_runs(only_largest_budget=False)\n\t\tall_runs=list(filter( lambda r: r.budget in budgets, all_runs))\n\n\n\n\t\tall_configs = []\n\t\tall_losses = []\n\n\t\tfor r in all_runs:\n\t\t\tif r.loss is None: continue\n\t\t\tconfig = id2conf[r.config_id]['config']\n\t\t\tif len(budgets)>1:\n\t\t\t\tconfig['budget'] = r.budget\n\n\t\t\tall_configs.append(config)\n\t\t\tall_losses.append({'loss': r.loss})\n\t\t\t\n\t\t\t#df_x = df_x.append(config, ignore_index=True)\n\t\t\t#df_y = df_y.append({'loss': r.loss}, ignore_index=True)\n\t\t\n\t\tdf_X = pd.DataFrame(all_configs)\n\t\tdf_y = pd.DataFrame(all_losses)\n\n\t\treturn(df_X, df_y)\n\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/core/worker.py",
    "content": "import time\nimport logging\nimport pickle\nimport os, socket\n\n\nimport traceback\nimport threading\nimport Pyro4\n\n\n\nclass Worker(object):\n\t\"\"\"\n\tThe worker is responsible for evaluating a single configuration on a single budget at a time.\n\tCommunication to the individual workers goes via the nameserver, management of the worker-pool and job\n\tscheduling is done by the Dispatcher and jobs are determined by the Master. In distributed systems, each\n\tcluster-node runs a Worker-instance. To implement your own worker, overwrite the `__init__`- and the `compute`-method.\n\tThe first allows to perform inital computations, e.g. loading the dataset, when the worker is started, while the\n\tlatter is repeatedly called during the optimization and evaluates a given configuration yielding the associated loss.\n\t\"\"\"\n\tdef __init__(self, run_id, nameserver=None, nameserver_port=None, logger=None, host=None, id=None, timeout=None):\n\t\t\"\"\"\n\t\t\n\t\tParameters\n\t\t----------\n\t\trun_id: anything with a __str__ method\n\t\t\tunique id to identify individual HpBandSter run\n\t\tnameserver: str\n\t\t\thostname or IP of the nameserver\n\t\tnameserver_port: int\n\t\t\tport of the nameserver\n\t\tlogger: logging.logger instance\n\t\t\tlogger used for debugging output\n\t\thost: str\n\t\t\thostname for this worker process\n\t\tid: anything with a __str__method\n\t\t\tif multiple workers are started in the same process, you MUST provide a unique id for each one of them using the `id` argument.\n\t\ttimeout: int or float\n\t\t\tspecifies the timeout a worker will wait for a new after finishing a computation before shutting down.\n\t\t\tTowards the end of a long run with multiple workers, this helps to shutdown idling workers. We recommend\n\t\t\ta timeout that is roughly half the time it would take for the second largest budget to finish.\n\t\t\tThe default (None) means that the worker will wait indefinitely and never shutdown on its own.\n\t\t\"\"\"\n\t\tself.run_id = run_id\n\t\tself.host = host\n\t\tself.nameserver = nameserver\n\t\tself.nameserver_port = nameserver_port\n\t\tself.worker_id =  \"hpbandster.run_%s.worker.%s.%i\"%(self.run_id, socket.gethostname(), os.getpid())\n\t\t\n\t\tself.timeout = timeout\n\t\tself.timer = None\n\t\t\n\t\t\n\t\tif not id is None:\n\t\t\tself.worker_id +='.%s'%str(id)\n\n\t\tself.thread=None\n\n\t\tif logger is None:\n\t\t\tlogging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(message)s',  datefmt='%H:%M:%S')\n\t\t\tself.logger = logging.getLogger(self.worker_id)\n\t\telse:\n\t\t\tself.logger = logger\n\n\t\tself.busy = False\n\t\tself.thread_cond = threading.Condition(threading.Lock())\n\n\n\tdef load_nameserver_credentials(self, working_directory, num_tries=60, interval=1):\n\t\t\"\"\"\n\t\tloads the nameserver credentials in cases where master and workers share a filesystem\n\n\t\tParameters\n\t\t----------\n\t\t\tworking_directory: str\n\t\t\t\tthe working directory for the HPB run (see master)\n\t\t\tnum_tries: int\n\t\t\t\tnumber of attempts to find the file (default 60)\n\t\t\tinterval: float\n\t\t\t\twaiting period between the attempts\n\t\t\"\"\"\n\t\tfn = os.path.join(working_directory, 'HPB_run_%s_pyro.pkl'%self.run_id)\n\t\t\n\t\tfor i in range(num_tries):\n\t\t\ttry:\n\t\t\t\twith open(fn, 'rb') as fh:\n\t\t\t\t\tself.nameserver, self.nameserver_port = pickle.load(fh)\n\t\t\t\treturn\n\t\t\texcept FileNotFoundError:\n\t\t\t\tself.logger.warning('config file %s not found (trail %i/%i)'%(fn, i+1, num_tries))\n\t\t\t\ttime.sleep(interval)\n\t\t\texcept:\n\t\t\t\traise\n\t\traise RuntimeError(\"Could not find the nameserver information, aborting!\")\n\n\n\tdef run(self, background=False):\n\t\t\"\"\"\n\t\tMethod to start the worker.\n\t\t\n\t\tParameters\n\t\t----------\n\t\t\tbackground: bool\n\t\t\t\tIf set to False (Default). the worker is executed in the current thread.\n\t\t\t\tIf True, a new daemon thread is created that runs the worker. This is\n\t\t\t\tuseful in a single worker scenario/when the compute function only simulates\n\t\t\t\twork.\n\t\t\"\"\"\n\t\tif background:\n\t\t\tself.worker_id += str(threading.get_ident())\n\t\t\tself.thread = threading.Thread(target=self._run, name='worker %s thread'%self.worker_id)\n\t\t\tself.thread.daemon=True\n\t\t\tself.thread.start()\n\t\telse:\n\t\t\tself._run()\n\n\tdef _run(self):\n\t\t# initial ping to the dispatcher to register the worker\n\t\t\n\t\ttry:\n\t\t\twith Pyro4.locateNS(host=self.nameserver, port=self.nameserver_port) as ns:\n\t\t\t\tself.logger.debug('WORKER: Connected to nameserver %s'%(str(ns)))\n\t\t\t\tdispatchers = ns.list(prefix=\"hpbandster.run_%s.dispatcher\"%self.run_id)\n\t\texcept Pyro4.errors.NamingError:\n\t\t\tif self.thread is None:\n\t\t\t\traise RuntimeError('No nameserver found. Make sure the nameserver is running at that the host (%s) and port (%s) are correct'%(self.nameserver, self.nameserver_port))\n\t\t\telse:\n\t\t\t\tself.logger.error('No nameserver found. Make sure the nameserver is running at that the host (%s) and port (%s) are correct'%(self.nameserver, self.nameserver_port))\n\t\t\t\texit(1)\n\t\texcept:\n\t\t\traise\n\t\t\t\n\t\t\t\n\t\tfor dn, uri in dispatchers.items():\n\t\t\ttry:\n\t\t\t\tself.logger.debug('WORKER: found dispatcher %s'%dn)\n\t\t\t\twith Pyro4.Proxy(uri) as dispatcher_proxy:\n\t\t\t\t\tdispatcher_proxy.trigger_discover_worker()\n\n\t\t\texcept Pyro4.errors.CommunicationError:\n\t\t\t\tself.logger.debug('WORKER: Dispatcher did not respond. Waiting for one to initiate contact.')\n\t\t\t\tpass\n\t\t\texcept:\n\t\t\t\traise\n\n\t\tif len(dispatchers) == 0:\n\t\t\tself.logger.debug('WORKER: No dispatcher found. Waiting for one to initiate contact.')\n\n\t\tself.logger.info('WORKER: start listening for jobs')\n\n\t\tself.pyro_daemon = Pyro4.core.Daemon(host=self.host)\n\n\t\twith Pyro4.locateNS(self.nameserver, port=self.nameserver_port) as ns:\n\t\t\turi = self.pyro_daemon.register(self, self.worker_id)\n\t\t\tns.register(self.worker_id, uri)\n\t\t\n\t\tself.pyro_daemon.requestLoop()\n\n\t\twith Pyro4.locateNS(self.nameserver, port=self.nameserver_port) as ns:\n\t\t\tns.remove(self.worker_id)\n\t\t\n\t\t\n\n\tdef compute(self, config_id, config, budget, working_directory):\n\t\t\"\"\" The function you have to overload implementing your computation.\n\t\t\n\t\tParameters\n\t\t----------\n\t\tconfig_id: tuple\n\t\t\ta triplet of ints that uniquely identifies a configuration. the convention is\n\t\t\tid = (iteration, budget index, running index) with the following meaning:\n\t\t\t- iteration: the iteration of the optimization algorithms. E.g, for Hyperband that is one round of Successive Halving\n\t\t\t- budget index: the budget (of the current iteration) for which this configuration was sampled by the optimizer. This is only nonzero if the majority of the runs fail and Hyperband resamples to fill empty slots, or you use a more 'advanced' optimizer.\n\t\t\t- running index: this is simply an int >= 0 that sort the configs into the order they where sampled, i.e. (x,x,0) was sampled before (x,x,1).\n\t\tconfig: dict\n\t\t\tthe actual configuration to be evaluated.\n\t\tbudget: float\n\t\t\tthe budget for the evaluation\n\t\tworking_directory: str\n\t\t\ta name of a directory that is unique to this configuration. Use this to store intermediate results on lower budgets that can be reused later for a larger budget (for iterative algorithms, for example).\n\t\tReturns\n\t\t-------\n\t\tdict:\n\t\t\tneeds to return a dictionary with two mandatory entries:\n\t\t\t\t- 'loss': a numerical value that is MINIMIZED\n\t\t\t\t- 'info': This can be pretty much any build in python type, e.g. a dict with lists as value. Due to Pyro4 handling the remote function calls, 3rd party types like numpy arrays are not supported!\n\t\t\"\"\"\n\t\t\n\t\traise NotImplementedError(\"Subclass hpbandster.distributed.worker and overwrite the compute method in your worker script\")\n\n\t@Pyro4.expose\n\t@Pyro4.oneway\n\tdef start_computation(self, callback, id, *args, **kwargs):\n\n\t\twith self.thread_cond:\n\t\t\twhile self.busy:\n\t\t\t\tself.thread_cond.wait()\n\t\t\tself.busy = True\n\t\tif not self.timeout is None and not self.timer is None:\n\t\t\tself.timer.cancel()\n\t\tself.logger.info('WORKER: start processing job %s'%str(id))\n\t\tself.logger.debug('WORKER: args: %s'%(str(args)))\n\t\tself.logger.debug('WORKER: kwargs: %s'%(str(kwargs)))\n\t\ttry:\n\t\t\tresult = {'result': self.compute(*args, config_id=id, **kwargs),\n\t\t\t\t\t\t'exception' : None}\n\t\texcept Exception as e:\n\t\t\tresult = {'result': None,\n\t\t\t\t\t\t'exception' : traceback.format_exc()}\n\t\tfinally:\n\t\t\tself.logger.debug('WORKER: done with job %s, trying to register it.'%str(id))\n\t\t\twith self.thread_cond:\n\t\t\t\tself.busy =  False\n\t\t\t\tcallback.register_result(id, result)\n\t\t\t\tself.thread_cond.notify()\n\t\tself.logger.info('WORKER: registered result for job %s with dispatcher'%str(id))\n\t\tif not self.timeout is None:\n\t\t\tself.timer = threading.Timer(self.timeout, self.shutdown)\n\t\t\tself.timer.daemon=True\n\t\t\tself.timer.start()\n\t\treturn(result)\n\n\t@Pyro4.expose\t\n\tdef is_busy(self):\n\t\treturn(self.busy)\n\t\n\t@Pyro4.expose\n\t@Pyro4.oneway\n\tdef shutdown(self):\n\t\tself.logger.debug('WORKER: shutting down now!')\n\t\tself.pyro_daemon.shutdown()\n\t\tif not self.thread is None:\n\t\t\tself.thread.join()\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/examples/README.txt",
    "content": "Examples - How to use HpBandSter\n================================\n\nThis is a collection of examples of how to use the HpBandster Module.\n\n\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/examples/__init__.py",
    "content": "\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/examples/commons.py",
    "content": "\"\"\"\nWorker for Examples 1-4\n=======================\n\nThis class implements a very simple worker used in the firt examples.\n\"\"\"\n\nimport numpy\nimport time\n\nimport ConfigSpace as CS\nfrom hpbandster.core.worker import Worker\n\n\nclass MyWorker(Worker):\n\n    def __init__(self, *args, sleep_interval=0, **kwargs):\n        super().__init__(*args, **kwargs)\n\n        self.sleep_interval = sleep_interval\n\n    def compute(self, config, budget, **kwargs):\n        \"\"\"\n        Simple example for a compute function\n        The loss is just a the config + some noise (that decreases with the budget)\n\n        For dramatization, the function can sleep for a given interval to emphasizes\n        the speed ups achievable with parallel workers.\n\n        Args:\n            config: dictionary containing the sampled configurations by the optimizer\n            budget: (float) amount of time/epochs/etc. the model can use to train\n\n        Returns:\n            dictionary with mandatory fields:\n                'loss' (scalar)\n                'info' (dict)\n        \"\"\"\n\n        res = numpy.clip(config['x'] + numpy.random.randn()/budget, config['x']/2, 1.5*config['x'])\n        time.sleep(self.sleep_interval)\n\n        return({\n                    'loss': float(res),  # this is the a mandatory field to run hyperband\n                    'info': res  # can be used for any user-defined information - also mandatory\n                })\n    \n    @staticmethod\n    def get_configspace():\n        config_space = CS.ConfigurationSpace()\n        config_space.add_hyperparameter(CS.UniformFloatHyperparameter('x', lower=0, upper=1))\n        return(config_space)\n\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/examples/example_1_local_sequential.py",
    "content": "\"\"\"\nExample 1 - Local and Sequential\n================================\n\n\"\"\"\nimport logging\nlogging.basicConfig(level=logging.WARNING)\n\nimport argparse\n\nimport hpbandster.core.nameserver as hpns\nimport hpbandster.core.result as hpres\n\nfrom hpbandster.optimizers import BOHB as BOHB\nfrom hpbandster.examples.commons import MyWorker\n\n\n\nparser = argparse.ArgumentParser(description='Example 1 - sequential and local execution.')\nparser.add_argument('--min_budget',   type=float, help='Minimum budget used during the optimization.',    default=9)\nparser.add_argument('--max_budget',   type=float, help='Maximum budget used during the optimization.',    default=243)\nparser.add_argument('--n_iterations', type=int,   help='Number of iterations performed by the optimizer', default=4)\nargs=parser.parse_args()\n\n\n# Step 1: Start a nameserver\n# Every run needs a nameserver. It could be a 'static' server with a\n# permanent address, but here it will be started for the local machine with the default port.\n# The nameserver manages the concurrent running workers across all possible threads or clusternodes.\n# Note the run_id argument. This uniquely identifies a run of any HpBandSter optimizer.\nNS = hpns.NameServer(run_id='example1', host='127.0.0.1', port=None)\nNS.start()\n\n# Step 2: Start a worker\n# Now we can instantiate a worker, providing the mandatory information\n# Besides the sleep_interval, we need to define the nameserver information and\n# the same run_id as above. After that, we can start the worker in the background,\n# where it will wait for incoming configurations to evaluate.\nw = MyWorker(sleep_interval = 0, nameserver='127.0.0.1',run_id='example1')\nw.run(background=True)\n\n# Step 3: Run an optimizer\n# Now we can create an optimizer object and start the run.\n# Here, we run BOHB, but that is not essential.\n# The run method will return the `Result` that contains all runs performed.\nbohb = BOHB(  configspace = w.get_configspace(),\n              run_id = 'example1', nameserver='127.0.0.1',\n              min_budget=args.min_budget, max_budget=args.max_budget\n           )\nres = bohb.run(n_iterations=args.n_iterations)\n\n# Step 4: Shutdown\n# After the optimizer run, we must shutdown the master and the nameserver.\nbohb.shutdown(shutdown_workers=True)\nNS.shutdown()\n\n# Step 5: Analysis\n# Each optimizer returns a hpbandster.core.result.Result object.\n# It holds informations about the optimization run like the incumbent (=best) configuration.\n# For further details about the Result object, see its documentation.\n# Here we simply print out the best config and some statistics about the performed runs.\nid2config = res.get_id2config_mapping()\nincumbent = res.get_incumbent_id()\n\nprint('Best found configuration:', id2config[incumbent]['config'])\nprint('A total of %i unique configurations where sampled.' % len(id2config.keys()))\nprint('A total of %i runs where executed.' % len(res.get_all_runs()))\nprint('Total budget corresponds to %.1f full function evaluations.'%(sum([r.budget for r in res.get_all_runs()])/args.max_budget))\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/examples/example_2_local_parallel_threads.py",
    "content": "\"\"\"\nExample 2 - Local and Parallel (using threads)\n==============================================\n\nThis example extends example 1 to multiple parallel workers.\nFor demonstrational purposes, the workers are started in separate threads.\nThis is probably not the most common use case but serves as a nice example.\nThe setup can be useful if the workers do their computations outside Python's Global Interpreter Lock, e.g. in some 3rd party extension in C/C++.\nIn that case, all workers can truely work in parallel.\n\n\"\"\"\nimport logging\nlogging.basicConfig(level=logging.WARNING)\n\nimport argparse\n\nimport hpbandster.core.nameserver as hpns\nimport hpbandster.core.result as hpres\n\nfrom hpbandster.optimizers import BOHB as BOHB\nfrom hpbandster.examples.commons import MyWorker\n\n\n\nparser = argparse.ArgumentParser(description='Example 1 - sequential and local execution.')\nparser.add_argument('--min_budget',   type=float, help='Minimum budget used during the optimization.',    default=9)\nparser.add_argument('--max_budget',   type=float, help='Maximum budget used during the optimization.',    default=243)\nparser.add_argument('--n_iterations', type=int,   help='Number of iterations performed by the optimizer', default=4)\nparser.add_argument('--n_workers', type=int,   help='Number of workers to run in parallel.', default=2)\n\nargs=parser.parse_args()\n\n\n# Step 1: Start a nameserver (see example_1)\nNS = hpns.NameServer(run_id='example2', host='127.0.0.1', port=None)\nNS.start()\n\n# Step 2: Start the workers\n# Now we can instantiate the specified number of workers. To emphasize the effect,\n# we introduce a sleep_interval of one second, which makes every function evaluation\n# take a bit of time. Note the additional id argument that helps separating the\n# individual workers. This is necessary because every worker uses its processes\n# ID which is the same for all threads here.\nworkers=[]\nfor i in range(args.n_workers):\n\tw = MyWorker(sleep_interval = 0.5, nameserver='127.0.0.1',run_id='example2', id=i)\n\tw.run(background=True)\n\tworkers.append(w)\n\n# Step 3: Run an optimizer\n# Now we can create an optimizer object and start the run.\n# We add the min_n_workers argument to the run methods to make the optimizer wait\n# for all workers to start. This is not mandatory, and workers can be added\n# at any time, but if the timing of the run is essential, this can be used to\n# synchronize all workers right at the start.\nbohb = BOHB(  configspace = w.get_configspace(),\n              run_id = 'example2',\n              min_budget=args.min_budget, max_budget=args.max_budget\n           )\nres = bohb.run(n_iterations=args.n_iterations, min_n_workers=args.n_workers)\n\n# Step 4: Shutdown\n# After the optimizer run, we must shutdown the master and the nameserver.\nbohb.shutdown(shutdown_workers=True)\nNS.shutdown()\n\n# Step 5: Analysis\n# Each optimizer returns a hpbandster.core.result.Result object.\n# It holds informations about the optimization run like the incumbent (=best) configuration.\n# For further details about the Result object, see its documentation.\n# Here we simply print out the best config and some statistics about the performed runs.\nid2config = res.get_id2config_mapping()\nincumbent = res.get_incumbent_id()\n\nall_runs = res.get_all_runs()\n\nprint('Best found configuration:', id2config[incumbent]['config'])\nprint('A total of %i unique configurations where sampled.' % len(id2config.keys()))\nprint('A total of %i runs where executed.' % len(res.get_all_runs()))\nprint('Total budget corresponds to %.1f full function evaluations.'%(sum([r.budget for r in all_runs])/args.max_budget))\nprint('Total budget corresponds to %.1f full function evaluations.'%(sum([r.budget for r in all_runs])/args.max_budget))\nprint('The run took  %.1f seconds to complete.'%(all_runs[-1].time_stamps['finished'] - all_runs[0].time_stamps['started']))\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/examples/example_3_local_parallel_processes.py",
    "content": "\"\"\"\nExample 3 - Local and Parallel (using processes)\n================================================\n\nGetting closer to a distributed setup, this examples shows how to connect a nameserver, an optimizer and several workers running in different processes.\nThis would also allow true parallelism if the workers do all the computation in Python, such that the thread based paralelization of example 2 would not work.\n\n\"\"\"\nimport logging\nlogging.basicConfig(level=logging.INFO)\n\nimport argparse\n\nimport hpbandster.core.nameserver as hpns\nimport hpbandster.core.result as hpres\n\nfrom hpbandster.optimizers import BOHB as BOHB\nfrom hpbandster.examples.commons import MyWorker\n\n\n\nparser = argparse.ArgumentParser(description='Example 3 - Local and Parallel Execution.')\nparser.add_argument('--min_budget',   type=float, help='Minimum budget used during the optimization.',    default=9)\nparser.add_argument('--max_budget',   type=float, help='Maximum budget used during the optimization.',    default=243)\nparser.add_argument('--n_iterations', type=int,   help='Number of iterations performed by the optimizer', default=4)\nparser.add_argument('--n_workers', type=int,   help='Number of workers to run in parallel.', default=2)\nparser.add_argument('--worker', help='Flag to turn this into a worker process', action='store_true')\n\nargs=parser.parse_args()\n\n\n\nif args.worker:\n\tw = MyWorker(sleep_interval = 0.5, nameserver='127.0.0.1',run_id='example3')\n\tw.run(background=False)\n\texit(0)\n\n# Start a nameserver (see example_1)\nNS = hpns.NameServer(run_id='example3', host='127.0.0.1', port=None)\nNS.start()\n\n\n# Run an optimizer (see example_2)\nbohb = BOHB(  configspace = MyWorker.get_configspace(),\n\t\t\t  run_id = 'example3',\n\t\t\t  min_budget=args.min_budget, max_budget=args.max_budget\n\t\t   )\nres = bohb.run(n_iterations=args.n_iterations, min_n_workers=args.n_workers)\n\n# Step 4: Shutdown\n# After the optimizer run, we must shutdown the master and the nameserver.\nbohb.shutdown(shutdown_workers=True)\nNS.shutdown()\n\n# Step 5: Analysis\n# Each optimizer returns a hpbandster.core.result.Result object.\n# It holds informations about the optimization run like the incumbent (=best) configuration.\n# For further details about the Result object, see its documentation.\n# Here we simply print out the best config and some statistics about the performed runs.\nid2config = res.get_id2config_mapping()\nincumbent = res.get_incumbent_id()\n\nall_runs = res.get_all_runs()\n\nprint('Best found configuration:', id2config[incumbent]['config'])\nprint('A total of %i unique configurations where sampled.' % len(id2config.keys()))\nprint('A total of %i runs where executed.' % len(res.get_all_runs()))\nprint('Total budget corresponds to %.1f full function evaluations.'%(sum([r.budget for r in all_runs])/args.max_budget))\nprint('Total budget corresponds to %.1f full function evaluations.'%(sum([r.budget for r in all_runs])/args.max_budget))\nprint('The run took  %.1f seconds to complete.'%(all_runs[-1].time_stamps['finished'] - all_runs[0].time_stamps['started']))\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/examples/example_4_cluster.py",
    "content": "\"\"\"\nExample 4 - on the cluster\n==========================\n\nThis example shows how to run HpBandster in a cluster environment.\nThe actual python code does differ substantially from example 3, except for a\nshared directory that is used to communicate the location of the nameserver to\nevery worker, and the fact that the communication is done over the network instead\nof just the loop back interface.\n\n\nTo actually run it as a batch job, usually a shell script is required.\nThose differer slightly from scheduler to scheduler.\nHere we provide an example script for the Sun Grid Engine (SGE), but adapting that to\nany other scheduler should be easy.\nThe script simply specifies the logging files for output (`-o`) and error `-e`),\nloads a virtual environment, and then executes the master for the first array task\nand a worker otherwise.\nArray jobs execute the same source multiple times and are bundled together into one job,\nwhere each task gets a unique task ID.\nFor SGE those IDs are positive integers and we simply say the first task is the master.\n\n\n.. code-block:: bash\n\n   # submit via qsub -t 1-4 -q test_core.q example_4_cluster_submit_me.sh\n\n   #$ -cwd\n   #$ -o $JOB_ID-$TASK_ID.o\n   #$ -e $JOB_ID-$TASK_ID.e\n\n   # enter the virtual environment\n   source ~sfalkner/virtualenvs/HpBandSter_tests/bin/activate\n\n\n   if [ $SGE_TASK_ID -eq 1]\n      then python3 example_4_cluster.py --run_id $JOB_ID --nic_name eth0 --working_dir .\n   else \n      python3 example_4_cluster.py --run_id $JOB_ID --nic_name eth0  --working_dir . --worker\n   fi\n\nYou can simply copy the above code into a file, say submit_me.sh, and tell SGE to run it via:\n\n.. code-block:: bash\n\n   qsub -t 1-4 -q your_queue_name submit_me.sh\n\n\nNow to the actual python source:\n\"\"\"\nimport logging\nlogging.basicConfig(level=logging.INFO)\n\nimport argparse\nimport pickle\nimport time\n\nimport hpbandster.core.nameserver as hpns\nimport hpbandster.core.result as hpres\n\nfrom hpbandster.optimizers import BOHB as BOHB\nfrom hpbandster.examples.commons import MyWorker\n\n\n\nparser = argparse.ArgumentParser(description='Example 1 - sequential and local execution.')\nparser.add_argument('--min_budget',   type=float, help='Minimum budget used during the optimization.',    default=9)\nparser.add_argument('--max_budget',   type=float, help='Maximum budget used during the optimization.',    default=243)\nparser.add_argument('--n_iterations', type=int,   help='Number of iterations performed by the optimizer', default=4)\nparser.add_argument('--n_workers', type=int,   help='Number of workers to run in parallel.', default=2)\nparser.add_argument('--worker', help='Flag to turn this into a worker process', action='store_true')\nparser.add_argument('--run_id', type=str, help='A unique run id for this optimization run. An easy option is to use the job id of the clusters scheduler.')\nparser.add_argument('--nic_name',type=str, help='Which network interface to use for communication.')\nparser.add_argument('--shared_directory',type=str, help='A directory that is accessible for all processes, e.g. a NFS share.')\n\n\nargs=parser.parse_args()\n\n# Every process has to lookup the hostname\nhost = hpns.nic_name_to_host(args.nic_name)\n\n\nif args.worker:\n\ttime.sleep(5)\t# short artificial delay to make sure the nameserver is already running\n\tw = MyWorker(sleep_interval = 0.5,run_id=args.run_id, host=host)\n\tw.load_nameserver_credentials(working_directory=args.shared_directory)\n\tw.run(background=False)\n\texit(0)\n\n# Start a nameserver:\n# We now start the nameserver with the host name from above and a random open port (by setting the port to 0)\nNS = hpns.NameServer(run_id=args.run_id, host=host, port=0, working_directory=args.shared_directory)\nns_host, ns_port = NS.start()\n\n# Most optimizers are so computationally inexpensive that we can affort to run a\n# worker in parallel to it. Note that this one has to run in the background to\n# not plock!\nw = MyWorker(sleep_interval = 0.5,run_id=args.run_id, host=host, nameserver=ns_host, nameserver_port=ns_port)\nw.run(background=True)\n\n# Run an optimizer\n# We now have to specify the host, and the nameserver information\nbohb = BOHB(  configspace = MyWorker.get_configspace(),\n\t\t\t  run_id = args.run_id,\n\t\t\t  host=host,\n\t\t\t  nameserver=ns_host,\n\t\t\t  nameserver_port=ns_port,\n\t\t\t  min_budget=args.min_budget, max_budget=args.max_budget\n\t\t   )\nres = bohb.run(n_iterations=args.n_iterations, min_n_workers=args.n_workers)\n\n\n# In a cluster environment, you usually want to store the results for later analysis.\n# One option is to simply pickle the Result object \nwith open(os.path.join(args.shared_directory, 'results.pkl'), 'wb') as fh:\n\tpickle.dump(res, fh)\n\n\n# Step 4: Shutdown\n# After the optimizer run, we must shutdown the master and the nameserver.\nbohb.shutdown(shutdown_workers=True)\nNS.shutdown()\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/examples/example_5_keras_worker.py",
    "content": "\"\"\"\nWorker for Example 5 - Keras\n============================\n\nIn this example implements a small CNN in Keras to train it on MNIST.\nThe configuration space shows the most common types of hyperparameters and\neven contains conditional dependencies.\n\nWe'll optimise the following hyperparameters:\n\n+-------------------------+----------------+-----------------+------------------------+\n| Parameter Name          | Parameter type |  Range/Choices  | Comment                |\n+=========================+================+=================+========================+\n| Learning rate           |  float         | [1e-6, 1e-2]    | varied logarithmically |\n+-------------------------+----------------+-----------------+------------------------+\n| Optimizer               | categorical    | {Adam, SGD }    | discrete choice        |\n+-------------------------+----------------+-----------------+------------------------+\n| SGD momentum            |  float         | [0, 0.99]       | only active if         |\n|                         |                |                 | optimizer == SGD       |\n+-------------------------+----------------+-----------------+------------------------+\n| Number of conv layers   | integer        | [1,3]           | can only take integer  |\n|                         |                |                 | values 1, 2, or 3      |\n+-------------------------+----------------+-----------------+------------------------+\n| Number of filters in    | integer        | [4, 64]         | logarithmically varied |\n| the first conf layer    |                |                 | integer values         |\n+-------------------------+----------------+-----------------+------------------------+\n| Number of filters in    | integer        | [4, 64]         | only active if number  |\n| the second conf layer   |                |                 | of layers >= 2         |\n+-------------------------+----------------+-----------------+------------------------+\n| Number of filters in    | integer        | [4, 64]         | only active if number  |\n| the third conf layer    |                |                 | of layers == 3         |\n+-------------------------+----------------+-----------------+------------------------+\n| Dropout rate            |  float         | [0, 0.9]        | standard continuous    |\n|                         |                |                 | parameter              |\n+-------------------------+----------------+-----------------+------------------------+\n| Number of hidden units  | integer        | [8,256]         | logarithmically varied |\n| in fully connected layer|                |                 | integer values         |\n+-------------------------+----------------+-----------------+------------------------+\n\nPlease refer to the compute method below to see how those are defined using the\nConfigSpace package.\n\t  \nThe network does not achieve stellar performance when a random configuration is samples,\nbut a few iterations should yield an accuracy of >90%. To speed up training, only\n8192 images are used for training, 1024 for validation.\nThe purpose is not to achieve state of the art on MNIST, but to show how to use\nKeras inside HpBandSter, and to demonstrate a more complicated search space.\n\"\"\"\n\ntry:\n\timport keras\n\tfrom keras.datasets import mnist\n\tfrom keras.models import Sequential\n\tfrom keras.layers import Dense, Dropout, Flatten\n\tfrom keras.layers import Conv2D, MaxPooling2D\n\tfrom keras import backend as K\nexcept:\n\traise ImportError(\"For this example you need to install keras.\")\n\ntry:\n\timport torchvision\n\timport torchvision.transforms as transforms\nexcept:\n\traise ImportError(\"For this example you need to install pytorch-vision.\")\n\n\n\nimport ConfigSpace as CS\nimport ConfigSpace.hyperparameters as CSH\n\nfrom hpbandster.core.worker import Worker\n\nimport logging\nlogging.basicConfig(level=logging.DEBUG)\n\n\n\n\n\nclass KerasWorker(Worker):\n\tdef __init__(self, N_train=8192, N_valid=1024, **kwargs):\n\t\tsuper().__init__(**kwargs)\n\n\t\tself.batch_size = 64\n\t\t\n\t\timg_rows = 28\n\t\timg_cols = 28\n\t\tself.num_classes = 10\n\t\t\n\t\t# the data, split between train and test sets\n\t\t(x_train, y_train), (x_test, y_test) = mnist.load_data()\n\n\t\tif K.image_data_format() == 'channels_first':\n\t\t\tx_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)\n\t\t\tx_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)\n\t\t\tself.input_shape = (1, img_rows, img_cols)\n\t\telse:\n\t\t\tx_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)\n\t\t\tx_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)\n\t\t\tself.input_shape = (img_rows, img_cols, 1)\n\n\t\t\n\t\tx_train = x_train.astype('float32')\n\t\tx_test = x_test.astype('float32')\n\t\t# zero-one normalization\n\t\tx_train /= 255\n\t\tx_test /= 255\n\t\t\n\t\t\n\t\t# convert class vectors to binary class matrices\n\t\ty_train = keras.utils.to_categorical(y_train, self.num_classes)\n\t\ty_test = keras.utils.to_categorical(y_test, self.num_classes)\n\t\t\n\t\t\n\t\tself.x_train, self.y_train = x_train[:N_train], y_train[:N_train]\n\t\tself.x_validation, self.y_validation = x_train[-N_valid:], y_train[-N_valid:]\n\t\tself.x_test, self.y_test   = x_test, y_test\n\t\t\n\t\tself.input_shape = (img_rows, img_cols, 1)\n\n\n\n\n\tdef compute(self, config, budget, working_directory, *args, **kwargs):\n\t\t\"\"\"\n\t\tSimple example for a compute function using a feed forward network.\n\t\tIt is trained on the MNIST dataset.\n\t\tThe input parameter \"config\" (dictionary) contains the sampled configurations passed by the bohb optimizer\n\t\t\"\"\"\n\n\t\tmodel = Sequential()\n\t\t\n\t\tmodel.add(Conv2D(config['num_filters_1'], kernel_size=(3,3),\n\t\t\t\t\t\t activation='relu',\n\t\t\t\t\t\t input_shape=self.input_shape))\n\t\tmodel.add(MaxPooling2D(pool_size=(2, 2)))\n\n\t\tif config['num_conv_layers'] > 1:\n\t\t\tmodel.add(Conv2D(config['num_filters_2'], kernel_size=(3, 3),\n\t\t\t\t\t\t\t activation='relu',\n\t\t\t\t\t\t\t input_shape=self.input_shape))\n\t\t\tmodel.add(MaxPooling2D(pool_size=(2, 2)))\t\n\t\t\n\t\tif config['num_conv_layers'] > 2:\n\t\t\tmodel.add(Conv2D(config['num_filters_3'], kernel_size=(3, 3),\n\t\t\t\t\t\t activation='relu',\n\t\t\t\t\t\t input_shape=self.input_shape))\n\t\t\tmodel.add(MaxPooling2D(pool_size=(2, 2)))\n\t\t\t\n\t\tmodel.add(Dropout(config['dropout_rate']))\n\t\tmodel.add(Flatten())\n\t\tmodel.add(Dense(config['num_fc_units'], activation='relu'))\n\t\tmodel.add(Dropout(config['dropout_rate']))\n\t\tmodel.add(Dense(self.num_classes, activation='softmax'))\n\n\n\t\tif config['optimizer'] == 'Adam':\n\t\t\toptimizer = keras.optimizers.Adam(lr=config['lr'])\n\t\telse:\n\t\t\toptimizer = keras.optimizers.SGD(lr=config['lr'], momentum=config['sgd_momentum'])\n\n\t\tmodel.compile(loss=keras.losses.categorical_crossentropy,\n\t\t\t\t\t  optimizer=optimizer,\n\t\t\t\t\t  metrics=['accuracy'])\n\n\t\tmodel.fit(self.x_train, self.y_train,\n\t\t\t\t  batch_size=self.batch_size,\n\t\t\t\t  epochs=int(budget),\n\t\t\t\t  verbose=0,\n\t\t\t\t  validation_data=(self.x_test, self.y_test))\n\t\t\n\t\ttrain_score = model.evaluate(self.x_train, self.y_train, verbose=0)\n\t\tval_score = model.evaluate(self.x_validation, self.y_validation, verbose=0)\n\t\ttest_score = model.evaluate(self.x_test, self.y_test, verbose=0)\n\n\t\t#import IPython; IPython.embed()\n\t\treturn ({\n\t\t\t'loss': 1-val_score[1], # remember: HpBandSter always minimizes!\n\t\t\t'info': {\t'test accuracy': test_score[1],\n\t\t\t\t\t\t'train accuracy': train_score[1],\n\t\t\t\t\t\t'validation accuracy': val_score[1],\n\t\t\t\t\t\t'number of parameters': model.count_params(),\n\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t})\n\n\n\t@staticmethod\n\tdef get_configspace():\n\t\t\"\"\"\n\t\tIt builds the configuration space with the needed hyperparameters.\n\t\tIt is easily possible to implement different types of hyperparameters.\n\t\tBeside float-hyperparameters on a log scale, it is also able to handle categorical input parameter.\n\t\t:return: ConfigurationsSpace-Object\n\t\t\"\"\"\n\t\tcs = CS.ConfigurationSpace()\n\n\t\tlr = CSH.UniformFloatHyperparameter('lr', lower=1e-6, upper=1e-1, default_value='1e-2', log=True)\n\n\t\t# For demonstration purposes, we add different optimizers as categorical hyperparameters.\n\t\t# To show how to use conditional hyperparameters with ConfigSpace, we'll add the optimizers 'Adam' and 'SGD'.\n\t\t# SGD has a different parameter 'momentum'.\n\t\toptimizer = CSH.CategoricalHyperparameter('optimizer', ['Adam', 'SGD'])\n\n\t\tsgd_momentum = CSH.UniformFloatHyperparameter('sgd_momentum', lower=0.0, upper=0.99, default_value=0.9, log=False)\n\n\t\tcs.add_hyperparameters([lr, optimizer, sgd_momentum])\n\n\n\n\t\tnum_conv_layers =  CSH.UniformIntegerHyperparameter('num_conv_layers', lower=1, upper=3, default_value=2)\n\t\t\n\t\tnum_filters_1 = CSH.UniformIntegerHyperparameter('num_filters_1', lower=4, upper=64, default_value=16, log=True)\n\t\tnum_filters_2 = CSH.UniformIntegerHyperparameter('num_filters_2', lower=4, upper=64, default_value=16, log=True)\n\t\tnum_filters_3 = CSH.UniformIntegerHyperparameter('num_filters_3', lower=4, upper=64, default_value=16, log=True)\n\n\t\tcs.add_hyperparameters([num_conv_layers, num_filters_1, num_filters_2, num_filters_3])\n\n\n\t\tdropout_rate = CSH.UniformFloatHyperparameter('dropout_rate', lower=0.0, upper=0.9, default_value=0.5, log=False)\n\t\tnum_fc_units = CSH.UniformIntegerHyperparameter('num_fc_units', lower=8, upper=256, default_value=32, log=True)\n\n\t\tcs.add_hyperparameters([dropout_rate, num_fc_units])\n\n\n\t\t# The hyperparameter sgd_momentum will be used,if the configuration\n\t\t# contains 'SGD' as optimizer.\n\t\tcond = CS.EqualsCondition(sgd_momentum, optimizer, 'SGD')\n\t\tcs.add_condition(cond)\n\t\t\n\t\t# You can also use inequality conditions:\n\t\tcond = CS.GreaterThanCondition(num_filters_2, num_conv_layers, 1)\n\t\tcs.add_condition(cond)\n\n\t\tcond = CS.GreaterThanCondition(num_filters_3, num_conv_layers, 2)\n\t\tcs.add_condition(cond)\n\n\t\treturn cs\n\n\n\n\nif __name__ == \"__main__\":\n\tworker = KerasWorker(run_id='0')\n\tcs = worker.get_configspace()\n\t\n\tconfig = cs.sample_configuration().get_dictionary()\n\tprint(config)\n\tres = worker.compute(config=config, budget=1, working_directory='.')\n\tprint(res)\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/examples/example_5_mnist.py",
    "content": "\"\"\"\nExample 5 - MNIST\n=================\n\nSmall CNN for MNIST implementet in both Keras and PyTorch.\nThis example also shows how to log results to disk during the optimization\nwhich is useful for long runs, because intermediate results are directly available\nfor analysis. It also contains a more realistic search space with different types\nof variables to be optimized.\n\n\"\"\"\nimport os\nimport pickle\nimport argparse\n\nimport hpbandster.core.nameserver as hpns\nimport hpbandster.core.result as hpres\n\nfrom hpbandster.optimizers import BOHB\n\nimport logging\nlogging.basicConfig(level=logging.DEBUG)\n\n\n\nparser = argparse.ArgumentParser(description='Example 5 - CNN on MNIST')\nparser.add_argument('--min_budget',   type=float, help='Minimum number of epochs for training.',    default=1)\nparser.add_argument('--max_budget',   type=float, help='Maximum number of epochs for training.',    default=9)\nparser.add_argument('--n_iterations', type=int,   help='Number of iterations performed by the optimizer', default=16)\nparser.add_argument('--worker', help='Flag to turn this into a worker process', action='store_true')\nparser.add_argument('--run_id', type=str, help='A unique run id for this optimization run. An easy option is to use the job id of the clusters scheduler.')\nparser.add_argument('--nic_name',type=str, help='Which network interface to use for communication.', default='lo')\nparser.add_argument('--shared_directory',type=str, help='A directory that is accessible for all processes, e.g. a NFS share.', default='.')\nparser.add_argument('--backend',help='Toggles which worker is used. Choose between a pytorch and a keras implementation.', choices=['pytorch', 'keras'], default='keras')\n\nargs=parser.parse_args()\n\n\nif args.backend == 'pytorch':\n\tfrom example_5_pytorch_worker import PyTorchWorker as worker\nelse:\n\tfrom example_5_keras_worker import KerasWorker as worker\n\n\n# Every process has to lookup the hostname\nhost = hpns.nic_name_to_host(args.nic_name)\n\n\nif args.worker:\n\timport time\n\ttime.sleep(5)\t# short artificial delay to make sure the nameserver is already running\n\tw = worker(run_id=args.run_id, host=host, timeout=120)\n\tw.load_nameserver_credentials(working_directory=args.shared_directory)\n\tw.run(background=False)\n\texit(0)\n\n\n# This example shows how to log live results. This is most useful\n# for really long runs, where intermediate results could already be\n# interesting. The core.result submodule contains the functionality to\n# read the two generated files (results.json and configs.json) and\n# create a Result object.\nresult_logger = hpres.json_result_logger(directory=args.shared_directory, overwrite=False)\n\n\n# Start a nameserver:\nNS = hpns.NameServer(run_id=args.run_id, host=host, port=0, working_directory=args.shared_directory)\nns_host, ns_port = NS.start()\n\n# Start local worker\nw = worker(run_id=args.run_id, host=host, nameserver=ns_host, nameserver_port=ns_port, timeout=120)\nw.run(background=True)\n\n# Run an optimizer\nbohb = BOHB(  configspace = worker.get_configspace(),\n\t\t\t  run_id = args.run_id,\n\t\t\t  host=host,\n\t\t\t  nameserver=ns_host,\n\t\t\t  nameserver_port=ns_port,\n\t\t\t  result_logger=result_logger,\n\t\t\t  min_budget=args.min_budget, max_budget=args.max_budget, \n\t\t   )\nres = bohb.run(n_iterations=args.n_iterations)\n\n# store results\nwith open(os.path.join(args.shared_directory, 'results.pkl'), 'wb') as fh:\n\tpickle.dump(res, fh)\n\n# shutdown\nbohb.shutdown(shutdown_workers=True)\nNS.shutdown()\n\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/examples/example_5_pytorch_worker.py",
    "content": "\"\"\"\nWorker for Example 5 - PyTorch\n==============================\n\nIn this example implements a small CNN in PyTorch to train it on MNIST.\nThe configuration space shows the most common types of hyperparameters and\neven contains conditional dependencies.\nIn this example implements a small CNN in Keras to train it on MNIST.\nThe configuration space shows the most common types of hyperparameters and\neven contains conditional dependencies.\n\nWe'll optimise the following hyperparameters:\n\n+-------------------------+----------------+-----------------+------------------------+\n| Parameter Name          | Parameter type |  Range/Choices  | Comment                |\n+=========================+================+=================+========================+\n| Learning rate           |  float         | [1e-6, 1e-2]    | varied logarithmically |\n+-------------------------+----------------+-----------------+------------------------+\n| Optimizer               | categorical    | {Adam, SGD }    | discrete choice        |\n+-------------------------+----------------+-----------------+------------------------+\n| SGD momentum            |  float         | [0, 0.99]       | only active if         |\n|                         |                |                 | optimizer == SGD       |\n+-------------------------+----------------+-----------------+------------------------+\n| Number of conv layers   | integer        | [1,3]           | can only take integer  |\n|                         |                |                 | values 1, 2, or 3      |\n+-------------------------+----------------+-----------------+------------------------+\n| Number of filters in    | integer        | [4, 64]         | logarithmically varied |\n| the first conf layer    |                |                 | integer values         |\n+-------------------------+----------------+-----------------+------------------------+\n| Number of filters in    | integer        | [4, 64]         | only active if number  |\n| the second conf layer   |                |                 | of layers >= 2         |\n+-------------------------+----------------+-----------------+------------------------+\n| Number of filters in    | integer        | [4, 64]         | only active if number  |\n| the third conf layer    |                |                 | of layers == 3         |\n+-------------------------+----------------+-----------------+------------------------+\n| Dropout rate            |  float         | [0, 0.9]        | standard continuous    |\n|                         |                |                 | parameter              |\n+-------------------------+----------------+-----------------+------------------------+\n| Number of hidden units  | integer        | [8,256]         | logarithmically varied |\n| in fully connected layer|                |                 | integer values         |\n+-------------------------+----------------+-----------------+------------------------+\n\nPlease refer to the compute method below to see how those are defined using the\nConfigSpace package.\n\t  \nThe network does not achieve stellar performance when a random configuration is samples,\nbut a few iterations should yield an accuracy of >90%. To speed up training, only\n8192 images are used for training, 1024 for validation.\nThe purpose is not to achieve state of the art on MNIST, but to show how to use\nPyTorch inside HpBandSter, and to demonstrate a more complicated search space.\n\"\"\"\n\ntry:\n\timport torch\n\timport torch.utils.data\n\timport torch.nn as nn\n\timport torch.nn.functional as F\nexcept:\n\traise ImportError(\"For this example you need to install pytorch.\")\n\ntry:\n\timport torchvision\n\timport torchvision.transforms as transforms\nexcept:\n\traise ImportError(\"For this example you need to install pytorch-vision.\")\n\n\n\nimport ConfigSpace as CS\nimport ConfigSpace.hyperparameters as CSH\n\nfrom hpbandster.core.worker import Worker\n\nimport logging\nlogging.basicConfig(level=logging.DEBUG)\n\n\n\nclass PyTorchWorker(Worker):\n\tdef __init__(self, N_train = 8192, N_valid = 1024, **kwargs):\n\t\tsuper().__init__(**kwargs)\n\n\t\tbatch_size = 64\n\n\t\t# Load the MNIST Data here\n\t\ttrain_dataset = torchvision.datasets.MNIST(root='../../data', train=True, transform=transforms.ToTensor(), download=True)\n\t\ttest_dataset = torchvision.datasets.MNIST(root='../../data', train=False, transform=transforms.ToTensor())\n\t\t\n\t\ttrain_sampler = torch.utils.data.sampler.SubsetRandomSampler(range(N_train))\n\t\tvalidation_sampler = torch.utils.data.sampler.SubsetRandomSampler(range(N_train, N_train+N_valid))\n\n\t\t\n\t\tself.train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=batch_size, sampler=train_sampler)\n\t\tself.validation_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=1024, sampler=validation_sampler)\n\n\t\tself.test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=1024, shuffle=False)\n\n\n\tdef compute(self, config, budget, working_directory, *args, **kwargs):\n\t\t\"\"\"\n\t\tSimple example for a compute function using a feed forward network.\n\t\tIt is trained on the MNIST dataset.\n\t\tThe input parameter \"config\" (dictionary) contains the sampled configurations passed by the bohb optimizer\n\t\t\"\"\"\n\n\t\t# device = torch.device('cpu')\n\t\tmodel = MNISTConvNet(num_conv_layers=config['num_conv_layers'],\n\t\t\t\t\t\t\tnum_filters_1=config['num_filters_1'],\n\t\t\t\t\t\t\tnum_filters_2=config['num_filters_2'] if 'num_filters_2' in config else None,\n\t\t\t\t\t\t\tnum_filters_3=config['num_filters_3'] if 'num_filters_3' in config else None,\n\t\t\t\t\t\t\tdropout_rate=config['dropout_rate'],\n\t\t\t\t\t\t\tnum_fc_units=config['num_fc_units'],\n\t\t\t\t\t\t\tkernel_size=3\n\t\t)\n\n\t\tcriterion = torch.nn.CrossEntropyLoss()\n\t\tif config['optimizer'] == 'Adam':\n\t\t\toptimizer = torch.optim.Adam(model.parameters(), lr=config['lr'])\n\t\telse:\n\t\t\toptimizer = torch.optim.SGD(model.parameters(), lr=config['lr'], momentum=config['sgd_momentum'])\n\n\t\tfor epoch in range(int(budget)):\n\t\t\tloss = 0\n\t\t\tmodel.train()\n\t\t\tfor i, (x, y) in enumerate(self.train_loader):\n\t\t\t\toptimizer.zero_grad()\n\t\t\t\toutput = model(x)\n\t\t\t\tloss = F.nll_loss(output, y)\n\t\t\t\tloss.backward()\n\t\t\t\toptimizer.step()\n\n\t\ttrain_accuracy = self.evaluate_accuracy(model, self.train_loader)\n\t\tvalidation_accuracy = self.evaluate_accuracy(model, self.validation_loader)\n\t\ttest_accuracy = self.evaluate_accuracy(model, self.test_loader)\n\n\t\treturn ({\n\t\t\t'loss': 1-validation_accuracy, # remember: HpBandSter always minimizes!\n\t\t\t'info': {\t'test accuracy': test_accuracy,\n\t\t\t\t\t\t'train accuracy': train_accuracy,\n\t\t\t\t\t\t'validation accuracy': validation_accuracy,\n\t\t\t\t\t\t'number of parameters': model.number_of_parameters(),\n\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t})\n\n\tdef evaluate_accuracy(self, model, data_loader):\n\t\tmodel.eval()\n\t\tcorrect=0\n\t\twith torch.no_grad():\n\t\t\tfor x, y in data_loader:\n\t\t\t\toutput = model(x)\n\t\t\t\t#test_loss += F.nll_loss(output, target, reduction='sum').item() # sum up batch loss\n\t\t\t\tpred = output.max(1, keepdim=True)[1] # get the index of the max log-probability\n\t\t\t\tcorrect += pred.eq(y.view_as(pred)).sum().item()\n\t\t#import pdb; pdb.set_trace()\t\n\t\taccuracy = correct/len(data_loader.sampler)\n\t\treturn(accuracy)\n\n\n\t@staticmethod\n\tdef get_configspace():\n\t\t\"\"\"\n\t\tIt builds the configuration space with the needed hyperparameters.\n\t\tIt is easily possible to implement different types of hyperparameters.\n\t\tBeside float-hyperparameters on a log scale, it is also able to handle categorical input parameter.\n\t\t:return: ConfigurationsSpace-Object\n\t\t\"\"\"\n\t\tcs = CS.ConfigurationSpace()\n\n\t\tlr = CSH.UniformFloatHyperparameter('lr', lower=1e-6, upper=1e-1, default_value='1e-2', log=True)\n\n\t\t# For demonstration purposes, we add different optimizers as categorical hyperparameters.\n\t\t# To show how to use conditional hyperparameters with ConfigSpace, we'll add the optimizers 'Adam' and 'SGD'.\n\t\t# SGD has a different parameter 'momentum'.\n\t\toptimizer = CSH.CategoricalHyperparameter('optimizer', ['Adam', 'SGD'])\n\n\t\tsgd_momentum = CSH.UniformFloatHyperparameter('sgd_momentum', lower=0.0, upper=0.99, default_value=0.9, log=False)\n\n\t\tcs.add_hyperparameters([lr, optimizer, sgd_momentum])\n\n\t\t# The hyperparameter sgd_momentum will be used,if the configuration\n\t\t# contains 'SGD' as optimizer.\n\t\tcond = CS.EqualsCondition(sgd_momentum, optimizer, 'SGD')\n\t\tcs.add_condition(cond)\n\n\t\tnum_conv_layers =  CSH.UniformIntegerHyperparameter('num_conv_layers', lower=1, upper=3, default_value=2)\n\t\t\n\t\tnum_filters_1 = CSH.UniformIntegerHyperparameter('num_filters_1', lower=4, upper=64, default_value=16, log=True)\n\t\tnum_filters_2 = CSH.UniformIntegerHyperparameter('num_filters_2', lower=4, upper=64, default_value=16, log=True)\n\t\tnum_filters_3 = CSH.UniformIntegerHyperparameter('num_filters_3', lower=4, upper=64, default_value=16, log=True)\n\n\n\t\tcs.add_hyperparameters([num_conv_layers, num_filters_1, num_filters_2, num_filters_3])\n\t\t\n\t\t# You can also use inequality conditions:\n\t\tcond = CS.GreaterThanCondition(num_filters_2, num_conv_layers, 1)\n\t\tcs.add_condition(cond)\n\n\t\tcond = CS.GreaterThanCondition(num_filters_3, num_conv_layers, 2)\n\t\tcs.add_condition(cond)\n\n\n\t\tdropout_rate = CSH.UniformFloatHyperparameter('dropout_rate', lower=0.0, upper=0.9, default_value=0.5, log=False)\n\t\tnum_fc_units = CSH.UniformIntegerHyperparameter('num_fc_units', lower=8, upper=256, default_value=32, log=True)\n\n\t\tcs.add_hyperparameters([dropout_rate, num_fc_units])\n\n\t\treturn cs\n\n\n\n\nclass MNISTConvNet(torch.nn.Module):\n\tdef __init__(self, num_conv_layers, num_filters_1, num_filters_2, num_filters_3, dropout_rate, num_fc_units, kernel_size):\n\t\tsuper().__init__()\n\t\t\n\t\tself.conv1 = nn.Conv2d(1, num_filters_1, kernel_size=kernel_size)\n\t\tself.conv2 = None\n\t\tself.conv3 = None\n\t\t\n\t\toutput_size = (28-kernel_size + 1)//2\n\t\tnum_output_filters = num_filters_1\n\t\t\n\t\tif num_conv_layers > 1:\n\t\t\tself.conv2 = nn.Conv2d(num_filters_1, num_filters_2, kernel_size=kernel_size)\n\t\t\tnum_output_filters = num_filters_2\n\t\t\toutput_size = (output_size - kernel_size + 1)//2\n\n\t\tif num_conv_layers > 2:\n\t\t\tself.conv3 = nn.Conv2d(num_filters_2, num_filters_3, kernel_size=kernel_size)\n\t\t\tnum_output_filters = num_filters_3\n\t\t\toutput_size = (output_size - kernel_size + 1)//2\n\t\t\n\t\tself.dropout = nn.Dropout(p = dropout_rate)\n\n\t\tself.conv_output_size = num_output_filters*output_size*output_size\n\n\t\tself.fc1 = nn.Linear(self.conv_output_size, num_fc_units)\n\t\tself.fc2 = nn.Linear(num_fc_units, 10)\n\t\t\n\n\n\tdef forward(self, x):\n\t\t\n\t\t# switched order of pooling and relu compared to the original example\n\t\t# to make it identical to the keras worker\n\t\t# seems to also give better accuracies\n\t\tx = F.max_pool2d(F.relu(self.conv1(x)), 2)\n\t\t\n\t\tif not self.conv2 is None:\n\t\t\tx = F.max_pool2d(F.relu(self.conv2(x)), 2)\n\n\t\tif not self.conv3 is None:\n\t\t\tx = F.max_pool2d(F.relu(self.conv3(x)), 2)\n\n\t\tx = self.dropout(x)\n\t\t\n\t\tx = x.view(-1, self.conv_output_size)\n\t\tx = F.relu(self.fc1(x))\n\t\tx = self.dropout(x)\n\t\tx = self.fc2(x)\n\t\treturn F.log_softmax(x, dim=1)\n\n\n\tdef number_of_parameters(self):\n\t\treturn(sum(p.numel() for p in self.parameters() if p.requires_grad))\n\n\n\nif __name__ == \"__main__\":\n\tworker = PyTorchWorker(run_id='0')\n\tcs = worker.get_configspace()\n\t\n\tconfig = cs.sample_configuration().get_dictionary()\n\tprint(config)\n\tres = worker.compute(config=config, budget=2, working_directory='.')\n\tprint(res)\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/examples/example_5_run/configs.json",
    "content": "[[0, 0, 0], {\"dropout_rate\": 0.5999213678456241, \"lr\": 3.617188990516118e-06, \"num_conv_layers\": 3, \"num_fc_units\": 201, \"num_filters_1\": 6, \"optimizer\": \"Adam\", \"num_filters_2\": 11, \"num_filters_3\": 43}, {\"model_based_pick\": false}]\n[[0, 0, 1], {\"dropout_rate\": 0.7762748896964241, \"lr\": 0.012640178330274952, \"num_conv_layers\": 1, \"num_fc_units\": 244, \"num_filters_1\": 6, \"optimizer\": \"Adam\"}, {\"model_based_pick\": false}]\n[[0, 0, 2], {\"dropout_rate\": 0.07805354215436296, \"lr\": 0.006498095037232474, \"num_conv_layers\": 2, \"num_fc_units\": 69, \"num_filters_1\": 44, \"optimizer\": \"SGD\", \"num_filters_2\": 33, \"sgd_momentum\": 0.645108101486194}, {\"model_based_pick\": false}]\n[[0, 0, 3], {\"dropout_rate\": 0.3960206380036088, \"lr\": 0.002221433955587195, \"num_conv_layers\": 2, \"num_fc_units\": 23, \"num_filters_1\": 21, \"optimizer\": \"SGD\", \"num_filters_2\": 28, \"sgd_momentum\": 0.44770354730788436}, {\"model_based_pick\": false}]\n[[0, 0, 4], {\"dropout_rate\": 0.15569094605935674, \"lr\": 4.897288561324329e-06, \"num_conv_layers\": 1, \"num_fc_units\": 92, \"num_filters_1\": 39, \"optimizer\": \"Adam\"}, {\"model_based_pick\": false}]\n[[0, 0, 5], {\"dropout_rate\": 0.32643880075916465, \"lr\": 1.4658987550588868e-06, \"num_conv_layers\": 2, \"num_fc_units\": 51, \"num_filters_1\": 43, \"optimizer\": \"SGD\", \"num_filters_2\": 6, \"sgd_momentum\": 0.8071857690522759}, {\"model_based_pick\": false}]\n[[0, 0, 6], {\"dropout_rate\": 0.2122508394115222, \"lr\": 0.00023491991849530254, \"num_conv_layers\": 1, \"num_fc_units\": 178, \"num_filters_1\": 6, \"optimizer\": \"Adam\"}, {\"model_based_pick\": false}]\n[[0, 0, 7], {\"dropout_rate\": 0.7104812790984504, \"lr\": 0.05612690224246151, \"num_conv_layers\": 2, \"num_fc_units\": 80, \"num_filters_1\": 4, \"optimizer\": \"Adam\", \"num_filters_2\": 49}, {\"model_based_pick\": false}]\n[[0, 0, 8], {\"dropout_rate\": 0.383380048336226, \"lr\": 0.00016554436581491495, \"num_conv_layers\": 1, \"num_fc_units\": 103, \"num_filters_1\": 4, \"optimizer\": \"SGD\", \"sgd_momentum\": 0.5778572799661081}, {\"model_based_pick\": false}]\n[[1, 0, 0], {\"dropout_rate\": 0.1970421632501469, \"lr\": 0.0025744814048482413, \"num_conv_layers\": 1, \"num_fc_units\": 84, \"num_filters_1\": 14, \"optimizer\": \"Adam\"}, {\"model_based_pick\": false}]\n[[1, 0, 1], {\"dropout_rate\": 0.6818677453540218, \"lr\": 5.861304807200231e-05, \"num_conv_layers\": 3, \"num_fc_units\": 203, \"num_filters_1\": 30, \"optimizer\": \"SGD\", \"num_filters_2\": 36, \"num_filters_3\": 4, \"sgd_momentum\": 0.8588277234880717}, {\"model_based_pick\": false}]\n[[1, 0, 2], {\"dropout_rate\": 0.1153282322976054, \"lr\": 0.0004471135161375109, \"num_conv_layers\": 1, \"num_fc_units\": 93, \"num_filters_1\": 14, \"optimizer\": \"Adam\"}, {\"model_based_pick\": false}]\n[[2, 0, 0], {\"dropout_rate\": 0.44558242302619744, \"lr\": 8.788974573621606e-05, \"num_conv_layers\": 1, \"num_fc_units\": 49, \"num_filters_1\": 43, \"optimizer\": \"SGD\", \"sgd_momentum\": 0.07693809294487831}, {\"model_based_pick\": false}]\n[[2, 0, 1], {\"dropout_rate\": 0.18537311182663255, \"lr\": 0.0013780616330577792, \"num_conv_layers\": 3, \"num_fc_units\": 9, \"num_filters_1\": 7, \"optimizer\": \"SGD\", \"num_filters_2\": 58, \"num_filters_3\": 9, \"sgd_momentum\": 0.8652053827501732}, {\"model_based_pick\": false}]\n[[2, 0, 2], {\"dropout_rate\": 0.4919576957563415, \"lr\": 0.030473659184482648, \"num_conv_layers\": 2, \"num_fc_units\": 162, \"num_filters_1\": 7, \"optimizer\": \"SGD\", \"num_filters_2\": 52, \"sgd_momentum\": 0.10953481016300384}, {\"model_based_pick\": false}]\n[[3, 0, 0], {\"dropout_rate\": 0.8406087045211336, \"lr\": 0.0011056682989205402, \"num_conv_layers\": 1, \"num_fc_units\": 13, \"num_filters_1\": 40, \"optimizer\": \"SGD\", \"sgd_momentum\": 0.1424674489090377}, {\"model_based_pick\": false}]\n[[3, 0, 1], {\"dropout_rate\": 0.5358789062941323, \"lr\": 2.914782830490925e-05, \"num_conv_layers\": 3, \"num_fc_units\": 112, \"num_filters_1\": 14, \"optimizer\": \"SGD\", \"num_filters_2\": 29, \"num_filters_3\": 64, \"sgd_momentum\": 0.3318098042305089}, {\"model_based_pick\": false}]\n[[3, 0, 2], {\"dropout_rate\": 0.5792543518006915, \"lr\": 1.302909760183976e-05, \"num_conv_layers\": 1, \"num_fc_units\": 160, \"num_filters_1\": 4, \"optimizer\": \"SGD\", \"sgd_momentum\": 0.5897570642342187}, {\"model_based_pick\": false}]\n[[3, 0, 3], {\"dropout_rate\": 0.06785183153585433, \"lr\": 0.023705791652790163, \"num_conv_layers\": 3, \"num_fc_units\": 27, \"num_filters_1\": 4, \"optimizer\": \"SGD\", \"num_filters_2\": 46, \"num_filters_3\": 48, \"sgd_momentum\": 0.31987121086923637}, {\"model_based_pick\": false}]\n[[3, 0, 4], {\"dropout_rate\": 0.2211330699529247, \"lr\": 3.367922490573815e-05, \"num_conv_layers\": 2, \"num_fc_units\": 167, \"num_filters_1\": 6, \"optimizer\": \"SGD\", \"num_filters_2\": 21, \"sgd_momentum\": 0.5489102819392425}, {\"model_based_pick\": false}]\n[[3, 0, 5], {\"dropout_rate\": 0.8652854705083068, \"lr\": 8.536420131053225e-06, \"num_conv_layers\": 2, \"num_fc_units\": 72, \"num_filters_1\": 6, \"optimizer\": \"SGD\", \"num_filters_2\": 46, \"sgd_momentum\": 0.07208858177003881}, {\"model_based_pick\": false}]\n[[3, 0, 6], {\"dropout_rate\": 0.5996688032840921, \"lr\": 0.00011267180129858354, \"num_conv_layers\": 1, \"num_fc_units\": 87, \"num_filters_1\": 20, \"optimizer\": \"SGD\", \"sgd_momentum\": 0.9492807760570003}, {\"model_based_pick\": false}]\n[[3, 0, 7], {\"dropout_rate\": 0.7418397353939303, \"lr\": 0.009690409166668938, \"num_conv_layers\": 2, \"num_fc_units\": 61, \"num_filters_1\": 24, \"optimizer\": \"Adam\", \"num_filters_2\": 18}, {\"model_based_pick\": false}]\n[[3, 0, 8], {\"dropout_rate\": 0.4416164530511352, \"lr\": 0.005653822311301511, \"num_conv_layers\": 3, \"num_fc_units\": 38, \"num_filters_1\": 25, \"optimizer\": \"Adam\", \"num_filters_2\": 13, \"num_filters_3\": 13}, {\"model_based_pick\": false}]\n[[4, 0, 0], {\"dropout_rate\": 0.5210984027636242, \"lr\": 1.9319973395014715e-06, \"num_conv_layers\": 3, \"num_fc_units\": 83, \"num_filters_1\": 42, \"optimizer\": \"Adam\", \"num_filters_2\": 8, \"num_filters_3\": 22}, {\"model_based_pick\": false}]\n[[4, 0, 1], {\"dropout_rate\": 0.15263075376063992, \"lr\": 0.00014161176011616503, \"num_conv_layers\": 1, \"num_fc_units\": 82, \"num_filters_1\": 46, \"optimizer\": \"Adam\"}, {\"model_based_pick\": false}]\n[[4, 0, 2], {\"dropout_rate\": 0.6814013007162276, \"lr\": 0.0001379144073446831, \"num_conv_layers\": 1, \"num_fc_units\": 14, \"num_filters_1\": 30, \"optimizer\": \"SGD\", \"sgd_momentum\": 0.3005761195196397}, {\"model_based_pick\": false}]\n[[5, 0, 0], {\"dropout_rate\": 0.5907938637021071, \"lr\": 0.0002591857763112099, \"num_conv_layers\": 3, \"num_fc_units\": 41, \"num_filters_1\": 16, \"optimizer\": \"SGD\", \"num_filters_2\": 25, \"num_filters_3\": 40, \"sgd_momentum\": 0.612252994050663}, {\"model_based_pick\": false}]\n[[5, 0, 1], {\"dropout_rate\": 0.4274707055875042, \"lr\": 1.9898306405580674e-06, \"num_conv_layers\": 2, \"num_fc_units\": 175, \"num_filters_1\": 8, \"optimizer\": \"Adam\", \"num_filters_2\": 5}, {\"model_based_pick\": false}]\n[[5, 0, 2], {\"dropout_rate\": 0.0625662529116842, \"lr\": 0.00013466807754210737, \"num_conv_layers\": 2, \"num_fc_units\": 36, \"num_filters_1\": 52, \"optimizer\": \"Adam\", \"num_filters_2\": 25}, {\"model_based_pick\": false}]\n[[6, 0, 0], {\"dropout_rate\": 0.8448968900137181, \"lr\": 0.00021100179998889302, \"num_conv_layers\": 2, \"num_fc_units\": 172, \"num_filters_1\": 19, \"optimizer\": \"SGD\", \"num_filters_2\": 24, \"sgd_momentum\": 0.16686598067264335}, {\"model_based_pick\": false}]\n[[6, 0, 1], {\"dropout_rate\": 0.3921587259226272, \"lr\": 0.0020906273239169808, \"num_conv_layers\": 2, \"num_fc_units\": 9, \"num_filters_1\": 5, \"optimizer\": \"SGD\", \"num_filters_2\": 15, \"sgd_momentum\": 0.883720170753489}, {\"model_based_pick\": false}]\n[[6, 0, 2], {\"dropout_rate\": 0.009316330953318868, \"lr\": 0.0001807337200738664, \"num_conv_layers\": 2, \"num_fc_units\": 75, \"num_filters_1\": 9, \"optimizer\": \"SGD\", \"num_filters_2\": 45, \"sgd_momentum\": 0.8869957137503033}, {\"model_based_pick\": true}]\n[[6, 0, 3], {\"dropout_rate\": 0.03663300504459616, \"lr\": 1.4769499283629445e-05, \"num_conv_layers\": 3, \"num_fc_units\": 87, \"num_filters_1\": 12, \"optimizer\": \"SGD\", \"num_filters_2\": 61, \"num_filters_3\": 5, \"sgd_momentum\": 0.8644613615547619}, {\"model_based_pick\": true}]\n[[6, 0, 4], {\"dropout_rate\": 0.27372579672329866, \"lr\": 0.008704261713517668, \"num_conv_layers\": 3, \"num_fc_units\": 151, \"num_filters_1\": 16, \"optimizer\": \"SGD\", \"num_filters_2\": 23, \"num_filters_3\": 6, \"sgd_momentum\": 0.7587983936902449}, {\"model_based_pick\": true}]\n[[6, 0, 5], {\"dropout_rate\": 0.437559506170816, \"lr\": 5.519942579478461e-06, \"num_conv_layers\": 1, \"num_fc_units\": 21, \"num_filters_1\": 11, \"optimizer\": \"Adam\"}, {\"model_based_pick\": false}]\n[[6, 0, 6], {\"dropout_rate\": 0.2839966364461612, \"lr\": 1.8992044323476375e-06, \"num_conv_layers\": 1, \"num_fc_units\": 33, \"num_filters_1\": 9, \"optimizer\": \"SGD\", \"sgd_momentum\": 0.6566551155915287}, {\"model_based_pick\": false}]\n[[6, 0, 7], {\"dropout_rate\": 0.02861998355105469, \"lr\": 0.00021226497267628024, \"num_conv_layers\": 3, \"num_fc_units\": 14, \"num_filters_1\": 4, \"optimizer\": \"Adam\", \"num_filters_2\": 63, \"num_filters_3\": 16}, {\"model_based_pick\": true}]\n[[6, 0, 8], {\"dropout_rate\": 0.4391654504231229, \"lr\": 0.0008834651965672059, \"num_conv_layers\": 1, \"num_fc_units\": 188, \"num_filters_1\": 24, \"optimizer\": \"Adam\"}, {\"model_based_pick\": false}]\n[[7, 0, 0], {\"dropout_rate\": 0.6220677697014024, \"lr\": 4.130270202514247e-06, \"num_conv_layers\": 3, \"num_fc_units\": 12, \"num_filters_1\": 10, \"optimizer\": \"Adam\", \"num_filters_2\": 9, \"num_filters_3\": 13}, {\"model_based_pick\": false}]\n[[7, 0, 1], {\"dropout_rate\": 0.19771518938052457, \"lr\": 0.027766149327597765, \"num_conv_layers\": 1, \"num_fc_units\": 14, \"num_filters_1\": 4, \"optimizer\": \"Adam\"}, {\"model_based_pick\": true}]\n[[7, 0, 2], {\"dropout_rate\": 0.45387166821931807, \"lr\": 0.009323092142710501, \"num_conv_layers\": 3, \"num_fc_units\": 11, \"num_filters_1\": 5, \"optimizer\": \"SGD\", \"num_filters_2\": 6, \"num_filters_3\": 13, \"sgd_momentum\": 0.826152675020036}, {\"model_based_pick\": true}]\n[[8, 0, 0], {\"dropout_rate\": 0.30670467961729386, \"lr\": 0.0006427849417333647, \"num_conv_layers\": 1, \"num_fc_units\": 160, \"num_filters_1\": 7, \"optimizer\": \"SGD\", \"sgd_momentum\": 0.7240274363957195}, {\"model_based_pick\": true}]\n[[8, 0, 1], {\"dropout_rate\": 0.09606953914896248, \"lr\": 0.05868924933925578, \"num_conv_layers\": 1, \"num_fc_units\": 79, \"num_filters_1\": 62, \"optimizer\": \"SGD\", \"sgd_momentum\": 0.723244049633405}, {\"model_based_pick\": true}]\n[[8, 0, 2], {\"dropout_rate\": 0.16452090402712627, \"lr\": 0.00011698444440680476, \"num_conv_layers\": 1, \"num_fc_units\": 171, \"num_filters_1\": 61, \"optimizer\": \"SGD\", \"sgd_momentum\": 0.5951249822697731}, {\"model_based_pick\": true}]\n[[9, 0, 0], {\"dropout_rate\": 0.16181607709865675, \"lr\": 0.0634067871136405, \"num_conv_layers\": 2, \"num_fc_units\": 68, \"num_filters_1\": 62, \"optimizer\": \"SGD\", \"num_filters_2\": 20, \"sgd_momentum\": 0.5565906427775413}, {\"model_based_pick\": true}]\n[[9, 0, 1], {\"dropout_rate\": 0.11052481013872445, \"lr\": 5.4507686783703426e-05, \"num_conv_layers\": 1, \"num_fc_units\": 78, \"num_filters_1\": 30, \"optimizer\": \"SGD\", \"sgd_momentum\": 0.8974496778822904}, {\"model_based_pick\": true}]\n[[9, 0, 2], {\"dropout_rate\": 0.02991456374412696, \"lr\": 0.00953443304046064, \"num_conv_layers\": 1, \"num_fc_units\": 184, \"num_filters_1\": 21, \"optimizer\": \"Adam\"}, {\"model_based_pick\": true}]\n[[9, 0, 3], {\"dropout_rate\": 0.6933778820114268, \"lr\": 1.0468356468379587e-06, \"num_conv_layers\": 3, \"num_fc_units\": 46, \"num_filters_1\": 10, \"optimizer\": \"Adam\", \"num_filters_2\": 22, \"num_filters_3\": 9}, {\"model_based_pick\": false}]\n[[9, 0, 4], {\"dropout_rate\": 0.8398463531347977, \"lr\": 1.5220479657255865e-06, \"num_conv_layers\": 3, \"num_fc_units\": 24, \"num_filters_1\": 9, \"optimizer\": \"SGD\", \"num_filters_2\": 47, \"num_filters_3\": 18, \"sgd_momentum\": 0.9829704036524965}, {\"model_based_pick\": false}]\n[[9, 0, 5], {\"dropout_rate\": 0.35589841024179875, \"lr\": 3.935448474651147e-05, \"num_conv_layers\": 1, \"num_fc_units\": 160, \"num_filters_1\": 59, \"optimizer\": \"Adam\"}, {\"model_based_pick\": true}]\n[[9, 0, 6], {\"dropout_rate\": 0.44644105157197506, \"lr\": 0.06116567916408646, \"num_conv_layers\": 1, \"num_fc_units\": 60, \"num_filters_1\": 55, \"optimizer\": \"SGD\", \"sgd_momentum\": 0.6261087688262339}, {\"model_based_pick\": true}]\n[[9, 0, 7], {\"dropout_rate\": 0.12345936548794836, \"lr\": 0.049658377203417925, \"num_conv_layers\": 3, \"num_fc_units\": 30, \"num_filters_1\": 50, \"optimizer\": \"Adam\", \"num_filters_2\": 15, \"num_filters_3\": 13}, {\"model_based_pick\": true}]\n[[9, 0, 8], {\"dropout_rate\": 0.6788467551002703, \"lr\": 0.00022468576209951053, \"num_conv_layers\": 1, \"num_fc_units\": 168, \"num_filters_1\": 42, \"optimizer\": \"SGD\", \"sgd_momentum\": 0.6110172608033076}, {\"model_based_pick\": true}]\n[[10, 0, 0], {\"dropout_rate\": 0.1969852652660527, \"lr\": 0.028733617731259552, \"num_conv_layers\": 1, \"num_fc_units\": 127, \"num_filters_1\": 61, \"optimizer\": \"SGD\", \"sgd_momentum\": 0.6301118971476714}, {\"model_based_pick\": true}]\n[[10, 0, 1], {\"dropout_rate\": 0.491562725784941, \"lr\": 0.00024293647090531888, \"num_conv_layers\": 3, \"num_fc_units\": 37, \"num_filters_1\": 12, \"optimizer\": \"SGD\", \"num_filters_2\": 35, \"num_filters_3\": 13, \"sgd_momentum\": 0.9692241605388984}, {\"model_based_pick\": false}]\n[[10, 0, 2], {\"dropout_rate\": 0.14855458419568168, \"lr\": 1.8700342549754326e-05, \"num_conv_layers\": 1, \"num_fc_units\": 54, \"num_filters_1\": 37, \"optimizer\": \"Adam\"}, {\"model_based_pick\": true}]\n[[11, 0, 0], {\"dropout_rate\": 0.0027948306115244794, \"lr\": 2.360605760880578e-06, \"num_conv_layers\": 2, \"num_fc_units\": 30, \"num_filters_1\": 7, \"optimizer\": \"Adam\", \"num_filters_2\": 13}, {\"model_based_pick\": false}]\n[[11, 0, 1], {\"dropout_rate\": 0.43275367639960605, \"lr\": 1.4125454753645953e-06, \"num_conv_layers\": 1, \"num_fc_units\": 62, \"num_filters_1\": 14, \"optimizer\": \"Adam\"}, {\"model_based_pick\": false}]\n[[11, 0, 2], {\"dropout_rate\": 0.8913936389580757, \"lr\": 0.024437266065391365, \"num_conv_layers\": 1, \"num_fc_units\": 182, \"num_filters_1\": 20, \"optimizer\": \"Adam\"}, {\"model_based_pick\": true}]\n[[12, 0, 0], {\"dropout_rate\": 0.481549265733221, \"lr\": 0.01518702246204953, \"num_conv_layers\": 1, \"num_fc_units\": 190, \"num_filters_1\": 8, \"optimizer\": \"SGD\", \"sgd_momentum\": 0.6098179427569045}, {\"model_based_pick\": true}]\n[[12, 0, 1], {\"dropout_rate\": 0.7866273790429396, \"lr\": 0.004156358879701281, \"num_conv_layers\": 1, \"num_fc_units\": 236, \"num_filters_1\": 9, \"optimizer\": \"Adam\"}, {\"model_based_pick\": true}]\n[[12, 0, 2], {\"dropout_rate\": 0.5268972231741008, \"lr\": 0.008241102752464265, \"num_conv_layers\": 1, \"num_fc_units\": 141, \"num_filters_1\": 6, \"optimizer\": \"SGD\", \"sgd_momentum\": 0.5564670702618016}, {\"model_based_pick\": true}]\n[[12, 0, 3], {\"dropout_rate\": 0.26745297084761693, \"lr\": 0.00020796028148634073, \"num_conv_layers\": 1, \"num_fc_units\": 228, \"num_filters_1\": 4, \"optimizer\": \"Adam\"}, {\"model_based_pick\": true}]\n[[12, 0, 4], {\"dropout_rate\": 0.4745099074160295, \"lr\": 0.0009709159161219443, \"num_conv_layers\": 1, \"num_fc_units\": 162, \"num_filters_1\": 19, \"optimizer\": \"Adam\"}, {\"model_based_pick\": true}]\n[[12, 0, 5], {\"dropout_rate\": 0.05213870500273513, \"lr\": 1.3521797602206373e-05, \"num_conv_layers\": 1, \"num_fc_units\": 235, \"num_filters_1\": 5, \"optimizer\": \"SGD\", \"sgd_momentum\": 0.5855404816784786}, {\"model_based_pick\": true}]\n[[12, 0, 6], {\"dropout_rate\": 0.19592674364646145, \"lr\": 0.0011665407664276208, \"num_conv_layers\": 1, \"num_fc_units\": 173, \"num_filters_1\": 18, \"optimizer\": \"Adam\"}, {\"model_based_pick\": true}]\n[[12, 0, 7], {\"dropout_rate\": 0.7623541673766989, \"lr\": 0.006293055021429959, \"num_conv_layers\": 1, \"num_fc_units\": 158, \"num_filters_1\": 30, \"optimizer\": \"SGD\", \"sgd_momentum\": 0.2399510560294365}, {\"model_based_pick\": false}]\n[[12, 0, 8], {\"dropout_rate\": 0.2505675031815419, \"lr\": 0.00018471183910805648, \"num_conv_layers\": 1, \"num_fc_units\": 128, \"num_filters_1\": 10, \"optimizer\": \"Adam\"}, {\"model_based_pick\": true}]\n[[13, 0, 0], {\"dropout_rate\": 0.7688294779454429, \"lr\": 0.037474097743132755, \"num_conv_layers\": 1, \"num_fc_units\": 139, \"num_filters_1\": 10, \"optimizer\": \"Adam\"}, {\"model_based_pick\": true}]\n[[13, 0, 1], {\"dropout_rate\": 0.5913633223790101, \"lr\": 0.09042378081158058, \"num_conv_layers\": 2, \"num_fc_units\": 14, \"num_filters_1\": 38, \"optimizer\": \"Adam\", \"num_filters_2\": 35}, {\"model_based_pick\": false}]\n[[13, 0, 2], {\"dropout_rate\": 0.41804028557603107, \"lr\": 0.025799477116383165, \"num_conv_layers\": 1, \"num_fc_units\": 127, \"num_filters_1\": 9, \"optimizer\": \"Adam\"}, {\"model_based_pick\": true}]\n[[14, 0, 0], {\"dropout_rate\": 0.45916987342801024, \"lr\": 9.95848700716531e-05, \"num_conv_layers\": 2, \"num_fc_units\": 45, \"num_filters_1\": 13, \"optimizer\": \"SGD\", \"num_filters_2\": 54, \"sgd_momentum\": 0.5283668583711117}, {\"model_based_pick\": false}]\n[[14, 0, 1], {\"dropout_rate\": 0.427856952625464, \"lr\": 2.491678998253731e-05, \"num_conv_layers\": 3, \"num_fc_units\": 35, \"num_filters_1\": 53, \"optimizer\": \"Adam\", \"num_filters_2\": 6, \"num_filters_3\": 36}, {\"model_based_pick\": false}]\n[[14, 0, 2], {\"dropout_rate\": 0.10426285302265659, \"lr\": 0.004434825122780982, \"num_conv_layers\": 1, \"num_fc_units\": 92, \"num_filters_1\": 43, \"optimizer\": \"Adam\"}, {\"model_based_pick\": true}]\n[[15, 0, 0], {\"dropout_rate\": 0.7763545006276671, \"lr\": 0.0010188867049428564, \"num_conv_layers\": 1, \"num_fc_units\": 175, \"num_filters_1\": 15, \"optimizer\": \"SGD\", \"sgd_momentum\": 0.22167467264735866}, {\"model_based_pick\": true}]\n[[15, 0, 1], {\"dropout_rate\": 0.6480860095332619, \"lr\": 0.06133647899122241, \"num_conv_layers\": 1, \"num_fc_units\": 226, \"num_filters_1\": 16, \"optimizer\": \"Adam\"}, {\"model_based_pick\": true}]\n[[15, 0, 2], {\"dropout_rate\": 0.4063870636435224, \"lr\": 0.001542410596253079, \"num_conv_layers\": 1, \"num_fc_units\": 143, \"num_filters_1\": 5, \"optimizer\": \"SGD\", \"sgd_momentum\": 0.06667927770314006}, {\"model_based_pick\": true}]\n[[15, 0, 3], {\"dropout_rate\": 0.042587918366874866, \"lr\": 5.390749154638182e-06, \"num_conv_layers\": 3, \"num_fc_units\": 10, \"num_filters_1\": 53, \"optimizer\": \"SGD\", \"num_filters_2\": 9, \"num_filters_3\": 9, \"sgd_momentum\": 0.3474104055165017}, {\"model_based_pick\": false}]\n[[15, 0, 4], {\"dropout_rate\": 0.35945982544753763, \"lr\": 0.021927139947719117, \"num_conv_layers\": 3, \"num_fc_units\": 80, \"num_filters_1\": 50, \"optimizer\": \"SGD\", \"num_filters_2\": 37, \"num_filters_3\": 35, \"sgd_momentum\": 0.9149883778638317}, {\"model_based_pick\": false}]\n[[15, 0, 5], {\"dropout_rate\": 0.2169929192448439, \"lr\": 0.01678096066753335, \"num_conv_layers\": 1, \"num_fc_units\": 78, \"num_filters_1\": 22, \"optimizer\": \"Adam\"}, {\"model_based_pick\": true}]\n[[15, 0, 6], {\"dropout_rate\": 0.31781019641891406, \"lr\": 0.011817679906184667, \"num_conv_layers\": 1, \"num_fc_units\": 85, \"num_filters_1\": 21, \"optimizer\": \"Adam\"}, {\"model_based_pick\": true}]\n[[15, 0, 7], {\"dropout_rate\": 0.7670408549792626, \"lr\": 7.900434187373369e-05, \"num_conv_layers\": 2, \"num_fc_units\": 58, \"num_filters_1\": 4, \"optimizer\": \"Adam\", \"num_filters_2\": 4}, {\"model_based_pick\": false}]\n[[15, 0, 8], {\"dropout_rate\": 0.17061930912654238, \"lr\": 0.0012139484871552123, \"num_conv_layers\": 2, \"num_fc_units\": 162, \"num_filters_1\": 37, \"optimizer\": \"SGD\", \"num_filters_2\": 59, \"sgd_momentum\": 0.3024375815858683}, {\"model_based_pick\": true}]\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/examples/example_5_run/results.json",
    "content": "[[0, 0, 0], 1.0, {\"submitted\": 1534077946.9809837, \"started\": 1534077946.9812114, \"finished\": 1534077955.1262262}, {\"loss\": 0.94140625, \"info\": {\"test accuracy\": 0.0608, \"train accuracy\": 0.0609130859375, \"validation accuracy\": 0.05859375, \"number of parameters\": 15829}}, null]\n[[0, 0, 1], 1.0, {\"submitted\": 1534077955.1280613, \"started\": 1534077955.128285, \"finished\": 1534077971.22352}, {\"loss\": 0.134765625, \"info\": {\"test accuracy\": 0.8926, \"train accuracy\": 0.89697265625, \"validation accuracy\": 0.865234375, \"number of parameters\": 250170}}, null]\n[[0, 0, 3], 1.0, {\"submitted\": 1534077971.2274995, \"started\": 1534077971.2277982, \"finished\": 1534078008.893444}, {\"loss\": 0.9248046875, \"info\": {\"test accuracy\": 0.0893, \"train accuracy\": 0.0875244140625, \"validation accuracy\": 0.0751953125, \"number of parameters\": 21893}}, null]\n[[0, 0, 2], 1.0, {\"submitted\": 1534077956.3174653, \"started\": 1534077956.3177817, \"finished\": 1534078049.9295325}, {\"loss\": 0.4541015625, \"info\": {\"test accuracy\": 0.5294, \"train accuracy\": 0.531005859375, \"validation accuracy\": 0.5458984375, \"number of parameters\": 71235}}, null]\n[[0, 0, 5], 1.0, {\"submitted\": 1534078016.323819, \"started\": 1534078016.324111, \"finished\": 1534078053.121933}, {\"loss\": 0.93359375, \"info\": {\"test accuracy\": 0.0571, \"train accuracy\": 0.063720703125, \"validation accuracy\": 0.06640625, \"number of parameters\": 10979}}, null]\n[[0, 0, 4], 1.0, {\"submitted\": 1534078008.895346, \"started\": 1534078008.8955743, \"finished\": 1534078066.0833273}, {\"loss\": 0.5693359375, \"info\": {\"test accuracy\": 0.3974, \"train accuracy\": 0.40869140625, \"validation accuracy\": 0.4306640625, \"number of parameters\": 607784}}, null]\n[[0, 0, 6], 1.0, {\"submitted\": 1534078049.9328, \"started\": 1534078049.933269, \"finished\": 1534078066.1050158}, {\"loss\": 0.3017578125, \"info\": {\"test accuracy\": 0.7058, \"train accuracy\": 0.706787109375, \"validation accuracy\": 0.6982421875, \"number of parameters\": 182520}}, null]\n[[0, 0, 8], 1.0, {\"submitted\": 1534078066.0864556, \"started\": 1534078066.0868094, \"finished\": 1534078074.848093}, {\"loss\": 0.912109375, \"info\": {\"test accuracy\": 0.0908, \"train accuracy\": 0.0849609375, \"validation accuracy\": 0.087890625, \"number of parameters\": 70811}}, null]\n[[0, 0, 7], 1.0, {\"submitted\": 1534078053.124773, \"started\": 1534078053.1251373, \"finished\": 1534078076.7504587}, {\"loss\": 0.888671875, \"info\": {\"test accuracy\": 0.1135, \"train accuracy\": 0.1136474609375, \"validation accuracy\": 0.111328125, \"number of parameters\": 100743}}, null]\n[[1, 0, 0], 3.0, {\"submitted\": 1534078066.1072466, \"started\": 1534078066.107508, \"finished\": 1534078108.803373}, {\"loss\": 0.083984375, \"info\": {\"test accuracy\": 0.9384, \"train accuracy\": 0.9539794921875, \"validation accuracy\": 0.916015625, \"number of parameters\": 199818}}, null]\n[[0, 0, 1], 3.0, {\"submitted\": 1534078076.7520137, \"started\": 1534078076.7523074, \"finished\": 1534078116.9820807}, {\"loss\": 0.1025390625, \"info\": {\"test accuracy\": 0.9126, \"train accuracy\": 0.9249267578125, \"validation accuracy\": 0.8974609375, \"number of parameters\": 250170}}, null]\n[[0, 0, 6], 3.0, {\"submitted\": 1534078116.9844825, \"started\": 1534078116.9847417, \"finished\": 1534078149.1949239}, {\"loss\": 0.125, \"info\": {\"test accuracy\": 0.8931, \"train accuracy\": 0.8988037109375, \"validation accuracy\": 0.875, \"number of parameters\": 182520}}, null]\n[[1, 0, 2], 3.0, {\"submitted\": 1534078149.1990957, \"started\": 1534078149.1993365, \"finished\": 1534078193.0237331}, {\"loss\": 0.1123046875, \"info\": {\"test accuracy\": 0.9106, \"train accuracy\": 0.917236328125, \"validation accuracy\": 0.8876953125, \"number of parameters\": 221211}}, null]\n[[1, 0, 1], 3.0, {\"submitted\": 1534078074.8509104, \"started\": 1534078074.8511684, \"finished\": 1534078241.6619704}, {\"loss\": 0.9248046875, \"info\": {\"test accuracy\": 0.0892, \"train accuracy\": 0.0875244140625, \"validation accuracy\": 0.0751953125, \"number of parameters\": 14411}}, null]\n[[0, 0, 2], 3.0, {\"submitted\": 1534078108.8048053, \"started\": 1534078108.8051345, \"finished\": 1534078340.6200562}, {\"loss\": 0.1533203125, \"info\": {\"test accuracy\": 0.8707, \"train accuracy\": 0.8739013671875, \"validation accuracy\": 0.8466796875, \"number of parameters\": 71235}}, null]\n[[1, 0, 0], 9.0, {\"submitted\": 1534078241.6634505, \"started\": 1534078241.6637251, \"finished\": 1534078351.7842968}, {\"loss\": 0.0390625, \"info\": {\"test accuracy\": 0.9668, \"train accuracy\": 0.990478515625, \"validation accuracy\": 0.9609375, \"number of parameters\": 199818}}, null]\n[[2, 0, 0], 9.0, {\"submitted\": 1534078193.0261428, \"started\": 1534078193.0264144, \"finished\": 1534078431.2033453}, {\"loss\": 0.80859375, \"info\": {\"test accuracy\": 0.1811, \"train accuracy\": 0.1998291015625, \"validation accuracy\": 0.19140625, \"number of parameters\": 357062}}, null]\n[[0, 0, 1], 9.0, {\"submitted\": 1534078340.62164, \"started\": 1534078340.6220474, \"finished\": 1534078453.6660807}, {\"loss\": 0.109375, \"info\": {\"test accuracy\": 0.9251, \"train accuracy\": 0.9332275390625, \"validation accuracy\": 0.890625, \"number of parameters\": 250170}}, null]\n[[3, 0, 0], 1.0, {\"submitted\": 1534078453.6686552, \"started\": 1534078453.668938, \"finished\": 1534078481.5328903}, {\"loss\": 0.8974609375, \"info\": {\"test accuracy\": 0.1032, \"train accuracy\": 0.0977783203125, \"validation accuracy\": 0.1025390625, \"number of parameters\": 88433}}, null]\n[[3, 0, 1], 1.0, {\"submitted\": 1534078481.536586, \"started\": 1534078481.5371003, \"finished\": 1534078528.245691}, {\"loss\": 0.9033203125, \"info\": {\"test accuracy\": 0.0978, \"train accuracy\": 0.0941162109375, \"validation accuracy\": 0.0966796875, \"number of parameters\": 29001}}, null]\n[[3, 0, 2], 1.0, {\"submitted\": 1534078528.249856, \"started\": 1534078528.2502975, \"finished\": 1534078540.7399237}, {\"loss\": 0.89453125, \"info\": {\"test accuracy\": 0.0968, \"train accuracy\": 0.09765625, \"validation accuracy\": 0.10546875, \"number of parameters\": 109970}}, null]\n[[2, 0, 1], 9.0, {\"submitted\": 1534078351.787298, \"started\": 1534078351.787706, \"finished\": 1534078554.324813}, {\"loss\": 0.85546875, \"info\": {\"test accuracy\": 0.1374, \"train accuracy\": 0.13916015625, \"validation accuracy\": 0.14453125, \"number of parameters\": 8679}}, null]\n[[3, 0, 3], 1.0, {\"submitted\": 1534078540.7448194, \"started\": 1534078540.7451968, \"finished\": 1534078572.642063}, {\"loss\": 0.880859375, \"info\": {\"test accuracy\": 0.1192, \"train accuracy\": 0.1241455078125, \"validation accuracy\": 0.119140625, \"number of parameters\": 23265}}, null]\n[[3, 0, 4], 1.0, {\"submitted\": 1534078554.3288164, \"started\": 1534078554.3291817, \"finished\": 1534078576.8490589}, {\"loss\": 0.892578125, \"info\": {\"test accuracy\": 0.0969, \"train accuracy\": 0.096435546875, \"validation accuracy\": 0.107421875, \"number of parameters\": 90737}}, null]\n[[3, 0, 5], 1.0, {\"submitted\": 1534078572.645699, \"started\": 1534078572.646184, \"finished\": 1534078604.5593724}, {\"loss\": 0.904296875, \"info\": {\"test accuracy\": 0.098, \"train accuracy\": 0.10009765625, \"validation accuracy\": 0.095703125, \"number of parameters\": 86192}}, null]\n[[3, 0, 6], 1.0, {\"submitted\": 1534078576.853337, \"started\": 1534078576.8537502, \"finished\": 1534078610.014326}, {\"loss\": 0.63671875, \"info\": {\"test accuracy\": 0.3585, \"train accuracy\": 0.364990234375, \"validation accuracy\": 0.36328125, \"number of parameters\": 295227}}, null]\n[[3, 0, 8], 1.0, {\"submitted\": 1534078610.0182652, \"started\": 1534078610.018557, \"finished\": 1534078648.6510396}, {\"loss\": 0.3310546875, \"info\": {\"test accuracy\": 0.6852, \"train accuracy\": 0.6875, \"validation accuracy\": 0.6689453125, \"number of parameters\": 5644}}, null]\n[[3, 0, 7], 1.0, {\"submitted\": 1534078604.5636516, \"started\": 1534078604.5641036, \"finished\": 1534078650.5057604}, {\"loss\": 0.888671875, \"info\": {\"test accuracy\": 0.1135, \"train accuracy\": 0.1136474609375, \"validation accuracy\": 0.111328125, \"number of parameters\": 32277}}, null]\n[[2, 0, 2], 9.0, {\"submitted\": 1534078431.2066822, \"started\": 1534078431.2070377, \"finished\": 1534078683.2877214}, {\"loss\": 0.0673828125, \"info\": {\"test accuracy\": 0.9596, \"train accuracy\": 0.963134765625, \"validation accuracy\": 0.9326171875, \"number of parameters\": 215790}}, null]\n[[3, 0, 3], 3.0, {\"submitted\": 1534078650.509242, \"started\": 1534078650.5097528, \"finished\": 1534078714.7456903}, {\"loss\": 0.5048828125, \"info\": {\"test accuracy\": 0.503, \"train accuracy\": 0.506591796875, \"validation accuracy\": 0.4951171875, \"number of parameters\": 23265}}, null]\n[[4, 0, 0], 3.0, {\"submitted\": 1534078648.6557488, \"started\": 1534078648.6562583, \"finished\": 1534078746.0107768}, {\"loss\": 0.8974609375, \"info\": {\"test accuracy\": 0.1032, \"train accuracy\": 0.0977783203125, \"validation accuracy\": 0.1025390625, \"number of parameters\": 7807}}, null]\n[[3, 0, 6], 3.0, {\"submitted\": 1534078683.2891963, \"started\": 1534078683.2896552, \"finished\": 1534078753.6329956}, {\"loss\": 0.3681640625, \"info\": {\"test accuracy\": 0.6382, \"train accuracy\": 0.64208984375, \"validation accuracy\": 0.6318359375, \"number of parameters\": 295227}}, null]\n[[3, 0, 8], 3.0, {\"submitted\": 1534078714.7472363, \"started\": 1534078714.747646, \"finished\": 1534078797.0800912}, {\"loss\": 0.162109375, \"info\": {\"test accuracy\": 0.8473, \"train accuracy\": 0.8616943359375, \"validation accuracy\": 0.837890625, \"number of parameters\": 5644}}, null]\n[[4, 0, 2], 3.0, {\"submitted\": 1534078753.6360078, \"started\": 1534078753.6365583, \"finished\": 1534078802.2274923}, {\"loss\": 0.8955078125, \"info\": {\"test accuracy\": 0.1009, \"train accuracy\": 0.1011962890625, \"validation accuracy\": 0.1044921875, \"number of parameters\": 71444}}, null]\n[[4, 0, 1], 3.0, {\"submitted\": 1534078746.0150514, \"started\": 1534078746.0155206, \"finished\": 1534078895.3387547}, {\"loss\": 0.12890625, \"info\": {\"test accuracy\": 0.9045, \"train accuracy\": 0.9090576171875, \"validation accuracy\": 0.87109375, \"number of parameters\": 638840}}, null]\n[[3, 0, 8], 9.0, {\"submitted\": 1534078797.0826092, \"started\": 1534078797.0829394, \"finished\": 1534079004.023227}, {\"loss\": 0.3193359375, \"info\": {\"test accuracy\": 0.6837, \"train accuracy\": 0.687255859375, \"validation accuracy\": 0.6806640625, \"number of parameters\": 5644}}, null]\n[[5, 0, 0], 9.0, {\"submitted\": 1534078802.2326608, \"started\": 1534078802.2330415, \"finished\": 1534079042.7092674}, {\"loss\": 0.888671875, \"info\": {\"test accuracy\": 0.1135, \"train accuracy\": 0.1136474609375, \"validation accuracy\": 0.111328125, \"number of parameters\": 14926}}, null]\n[[5, 0, 1], 9.0, {\"submitted\": 1534079004.0266259, \"started\": 1534079004.0270538, \"finished\": 1534079060.9084756}, {\"loss\": 0.8994140625, \"info\": {\"test accuracy\": 0.1045, \"train accuracy\": 0.1004638671875, \"validation accuracy\": 0.1005859375, \"number of parameters\": 24255}}, null]\n[[6, 0, 0], 1.0, {\"submitted\": 1534079060.9112055, \"started\": 1534079060.9115949, \"finished\": 1534079106.1845555}, {\"loss\": 0.921875, \"info\": {\"test accuracy\": 0.0743, \"train accuracy\": 0.082763671875, \"validation accuracy\": 0.078125, \"number of parameters\": 109420}}, null]\n[[6, 0, 1], 1.0, {\"submitted\": 1534079106.187933, \"started\": 1534079106.188207, \"finished\": 1534079116.4678123}, {\"loss\": 0.875, \"info\": {\"test accuracy\": 0.1222, \"train accuracy\": 0.121826171875, \"validation accuracy\": 0.125, \"number of parameters\": 4224}}, null]\n[[6, 0, 2], 1.0, {\"submitted\": 1534079116.5533617, \"started\": 1534079116.5536442, \"finished\": 1534079153.6400893}, {\"loss\": 0.8232421875, \"info\": {\"test accuracy\": 0.1766, \"train accuracy\": 0.1712646484375, \"validation accuracy\": 0.1767578125, \"number of parameters\": 88990}}, null]\n[[6, 0, 3], 1.0, {\"submitted\": 1534079153.7248573, \"started\": 1534079153.725336, \"finished\": 1534079207.0001056}, {\"loss\": 0.888671875, \"info\": {\"test accuracy\": 0.1135, \"train accuracy\": 0.1136474609375, \"validation accuracy\": 0.111328125, \"number of parameters\": 10921}}, null]\n[[6, 0, 4], 1.0, {\"submitted\": 1534079207.0819495, \"started\": 1534079207.082282, \"finished\": 1534079239.306753}, {\"loss\": 0.87890625, \"info\": {\"test accuracy\": 0.1306, \"train accuracy\": 0.1336669921875, \"validation accuracy\": 0.12109375, \"number of parameters\": 7320}}, null]\n[[4, 0, 1], 9.0, {\"submitted\": 1534078895.3414958, \"started\": 1534078895.3417966, \"finished\": 1534079240.8148444}, {\"loss\": 0.078125, \"info\": {\"test accuracy\": 0.9412, \"train accuracy\": 0.9564208984375, \"validation accuracy\": 0.921875, \"number of parameters\": 638840}}, null]\n[[6, 0, 5], 1.0, {\"submitted\": 1534079239.3118844, \"started\": 1534079239.3121634, \"finished\": 1534079248.9909885}, {\"loss\": 0.8955078125, \"info\": {\"test accuracy\": 0.1043, \"train accuracy\": 0.1063232421875, \"validation accuracy\": 0.1044921875, \"number of parameters\": 39390}}, null]\n[[6, 0, 6], 1.0, {\"submitted\": 1534079240.8175128, \"started\": 1534079240.8177874, \"finished\": 1534079250.299205}, {\"loss\": 0.8994140625, \"info\": {\"test accuracy\": 0.0852, \"train accuracy\": 0.09033203125, \"validation accuracy\": 0.1005859375, \"number of parameters\": 50656}}, null]\n[[6, 0, 7], 1.0, {\"submitted\": 1534079249.0812438, \"started\": 1534079249.08161, \"finished\": 1534079275.9643953}, {\"loss\": 0.8818359375, \"info\": {\"test accuracy\": 0.1285, \"train accuracy\": 0.12646484375, \"validation accuracy\": 0.1181640625, \"number of parameters\": 11847}}, null]\n[[7, 0, 0], 3.0, {\"submitted\": 1534079275.9680607, \"started\": 1534079275.9683464, \"finished\": 1534079302.8765209}, {\"loss\": 0.904296875, \"info\": {\"test accuracy\": 0.0979, \"train accuracy\": 0.10009765625, \"validation accuracy\": 0.095703125, \"number of parameters\": 2283}}, null]\n[[7, 0, 1], 3.0, {\"submitted\": 1534079302.9566538, \"started\": 1534079302.9569774, \"finished\": 1534079311.7301135}, {\"loss\": 0.888671875, \"info\": {\"test accuracy\": 0.1135, \"train accuracy\": 0.1136474609375, \"validation accuracy\": 0.111328125, \"number of parameters\": 9668}}, null]\n[[6, 0, 8], 1.0, {\"submitted\": 1534079250.3040202, \"started\": 1534079250.3043444, \"finished\": 1534079312.116849}, {\"loss\": 0.1201171875, \"info\": {\"test accuracy\": 0.9008, \"train accuracy\": 0.904052734375, \"validation accuracy\": 0.8798828125, \"number of parameters\": 764846}}, null]\n[[7, 0, 2], 3.0, {\"submitted\": 1534079311.813298, \"started\": 1534079311.8136752, \"finished\": 1534079326.286058}, {\"loss\": 0.806640625, \"info\": {\"test accuracy\": 0.2024, \"train accuracy\": 0.2069091796875, \"validation accuracy\": 0.193359375, \"number of parameters\": 1315}}, null]\n[[6, 0, 1], 3.0, {\"submitted\": 1534079312.1209419, \"started\": 1534079312.1213357, \"finished\": 1534079332.4735613}, {\"loss\": 0.8076171875, \"info\": {\"test accuracy\": 0.2051, \"train accuracy\": 0.201171875, \"validation accuracy\": 0.1923828125, \"number of parameters\": 4224}}, null]\n[[6, 0, 2], 3.0, {\"submitted\": 1534079326.2884002, \"started\": 1534079326.288702, \"finished\": 1534079403.312808}, {\"loss\": 0.89453125, \"info\": {\"test accuracy\": 0.1092, \"train accuracy\": 0.103759765625, \"validation accuracy\": 0.10546875, \"number of parameters\": 88990}}, null]\n[[7, 0, 2], 9.0, {\"submitted\": 1534079403.3155093, \"started\": 1534079403.3159204, \"finished\": 1534079441.488023}, {\"loss\": 0.529296875, \"info\": {\"test accuracy\": 0.4635, \"train accuracy\": 0.4700927734375, \"validation accuracy\": 0.470703125, \"number of parameters\": 1315}}, null]\n[[6, 0, 8], 3.0, {\"submitted\": 1534079332.476237, \"started\": 1534079332.4766493, \"finished\": 1534079458.7839022}, {\"loss\": 0.080078125, \"info\": {\"test accuracy\": 0.9381, \"train accuracy\": 0.954833984375, \"validation accuracy\": 0.919921875, \"number of parameters\": 764846}}, null]\n[[8, 0, 0], 9.0, {\"submitted\": 1534079441.5697434, \"started\": 1534079441.5701993, \"finished\": 1534079527.047776}, {\"loss\": 0.24609375, \"info\": {\"test accuracy\": 0.7741, \"train accuracy\": 0.770751953125, \"validation accuracy\": 0.75390625, \"number of parameters\": 191120}}, null]\n[[5, 0, 2], 9.0, {\"submitted\": 1534079042.7122047, \"started\": 1534079042.7125654, \"finished\": 1534079595.6498716}, {\"loss\": 0.0859375, \"info\": {\"test accuracy\": 0.9427, \"train accuracy\": 0.9488525390625, \"validation accuracy\": 0.9140625, \"number of parameters\": 35151}}, null]\n[[6, 0, 8], 9.0, {\"submitted\": 1534079458.786479, \"started\": 1534079458.7868557, \"finished\": 1534079760.0689821}, {\"loss\": 0.046875, \"info\": {\"test accuracy\": 0.9657, \"train accuracy\": 0.984619140625, \"validation accuracy\": 0.953125, \"number of parameters\": 764846}}, null]\n[[9, 0, 0], 1.0, {\"submitted\": 1534079760.1387112, \"started\": 1534079760.1389775, \"finished\": 1534079859.5954046}, {\"loss\": 0.1279296875, \"info\": {\"test accuracy\": 0.9058, \"train accuracy\": 0.904296875, \"validation accuracy\": 0.8720703125, \"number of parameters\": 46558}}, null]\n[[9, 0, 1], 1.0, {\"submitted\": 1534079859.674024, \"started\": 1534079859.6742868, \"finished\": 1534079899.2589366}, {\"loss\": 0.869140625, \"info\": {\"test accuracy\": 0.1286, \"train accuracy\": 0.13427734375, \"validation accuracy\": 0.130859375, \"number of parameters\": 396628}}, null]\n[[8, 0, 1], 9.0, {\"submitted\": 1534079527.1330595, \"started\": 1534079527.1335132, \"finished\": 1534079940.838189}, {\"loss\": 0.0439453125, \"info\": {\"test accuracy\": 0.9652, \"train accuracy\": 0.995361328125, \"validation accuracy\": 0.9560546875, \"number of parameters\": 829261}}, null]\n[[9, 0, 2], 1.0, {\"submitted\": 1534079899.3370104, \"started\": 1534079899.3373642, \"finished\": 1534079950.758372}, {\"loss\": 0.08984375, \"info\": {\"test accuracy\": 0.9274, \"train accuracy\": 0.9423828125, \"validation accuracy\": 0.91015625, \"number of parameters\": 655260}}, null]\n[[9, 0, 3], 1.0, {\"submitted\": 1534079940.8412042, \"started\": 1534079940.8414962, \"finished\": 1534079962.0594563}, {\"loss\": 0.8984375, \"info\": {\"test accuracy\": 0.1028, \"train accuracy\": 0.10693359375, \"validation accuracy\": 0.1015625, \"number of parameters\": 4823}}, null]\n[[9, 0, 4], 1.0, {\"submitted\": 1534079950.7650363, \"started\": 1534079950.7654252, \"finished\": 1534079987.49696}, {\"loss\": 0.8974609375, \"info\": {\"test accuracy\": 0.1032, \"train accuracy\": 0.0977783203125, \"validation accuracy\": 0.1025390625, \"number of parameters\": 12282}}, null]\n[[9, 0, 6], 1.0, {\"submitted\": 1534079987.57919, \"started\": 1534079987.579474, \"finished\": 1534080047.7124681}, {\"loss\": 0.1455078125, \"info\": {\"test accuracy\": 0.8727, \"train accuracy\": 0.88916015625, \"validation accuracy\": 0.8544921875, \"number of parameters\": 558920}}, null]\n[[9, 0, 5], 1.0, {\"submitted\": 1534079962.1512523, \"started\": 1534079962.1516776, \"finished\": 1534080089.9164019}, {\"loss\": 0.248046875, \"info\": {\"test accuracy\": 0.7796, \"train accuracy\": 0.779052734375, \"validation accuracy\": 0.751953125, \"number of parameters\": 1597720}}, null]\n[[9, 0, 7], 1.0, {\"submitted\": 1534080047.8082197, \"started\": 1534080047.8087225, \"finished\": 1534080114.752742}, {\"loss\": 0.888671875, \"info\": {\"test accuracy\": 0.1135, \"train accuracy\": 0.1136474609375, \"validation accuracy\": 0.111328125, \"number of parameters\": 9763}}, null]\n[[9, 0, 8], 1.0, {\"submitted\": 1534080090.0060263, \"started\": 1534080090.006536, \"finished\": 1534080188.1655166}, {\"loss\": 0.849609375, \"info\": {\"test accuracy\": 0.1645, \"train accuracy\": 0.1494140625, \"validation accuracy\": 0.150390625, \"number of parameters\": 1194742}}, null]\n[[8, 0, 2], 9.0, {\"submitted\": 1534079595.7374818, \"started\": 1534079595.7377372, \"finished\": 1534080285.8741453}, {\"loss\": 0.298828125, \"info\": {\"test accuracy\": 0.7163, \"train accuracy\": 0.7222900390625, \"validation accuracy\": 0.701171875, \"number of parameters\": 1765340}}, null]\n[[10, 0, 0], 3.0, {\"submitted\": 1534080114.8324127, \"started\": 1534080114.8327684, \"finished\": 1534080333.179283}, {\"loss\": 0.08984375, \"info\": {\"test accuracy\": 0.931, \"train accuracy\": 0.9451904296875, \"validation accuracy\": 0.91015625, \"number of parameters\": 1311260}}, null]\n[[9, 0, 2], 3.0, {\"submitted\": 1534080285.8776364, \"started\": 1534080285.8782377, \"finished\": 1534080389.0053365}, {\"loss\": 0.0546875, \"info\": {\"test accuracy\": 0.9626, \"train accuracy\": 0.9879150390625, \"validation accuracy\": 0.9453125, \"number of parameters\": 655260}}, null]\n[[9, 0, 0], 3.0, {\"submitted\": 1534080188.1717954, \"started\": 1534080188.1720622, \"finished\": 1534080394.4725192}, {\"loss\": 0.056640625, \"info\": {\"test accuracy\": 0.9613, \"train accuracy\": 0.9677734375, \"validation accuracy\": 0.943359375, \"number of parameters\": 46558}}, null]\n[[9, 0, 6], 3.0, {\"submitted\": 1534080333.1821487, \"started\": 1534080333.1825066, \"finished\": 1534080456.9452422}, {\"loss\": 0.0732421875, \"info\": {\"test accuracy\": 0.9371, \"train accuracy\": 0.950927734375, \"validation accuracy\": 0.9267578125, \"number of parameters\": 558920}}, null]\n[[10, 0, 1], 3.0, {\"submitted\": 1534080389.0107596, \"started\": 1534080389.0111227, \"finished\": 1534080462.7245514}, {\"loss\": 0.904296875, \"info\": {\"test accuracy\": 0.098, \"train accuracy\": 0.10009765625, \"validation accuracy\": 0.095703125, \"number of parameters\": 8941}}, null]\n[[10, 0, 2], 3.0, {\"submitted\": 1534080394.554551, \"started\": 1534080394.5548887, \"finished\": 1534080474.4072585}, {\"loss\": 0.2431640625, \"info\": {\"test accuracy\": 0.7808, \"train accuracy\": 0.7752685546875, \"validation accuracy\": 0.7568359375, \"number of parameters\": 338636}}, null]\n[[11, 0, 0], 9.0, {\"submitted\": 1534080462.7280803, \"started\": 1534080462.728346, \"finished\": 1534080524.6957557}, {\"loss\": 0.8935546875, \"info\": {\"test accuracy\": 0.0982, \"train accuracy\": 0.0989990234375, \"validation accuracy\": 0.1064453125, \"number of parameters\": 10992}}, null]\n[[11, 0, 1], 9.0, {\"submitted\": 1534080524.6996427, \"started\": 1534080524.6999502, \"finished\": 1534080613.082907}, {\"loss\": 0.79296875, \"info\": {\"test accuracy\": 0.1764, \"train accuracy\": 0.1864013671875, \"validation accuracy\": 0.20703125, \"number of parameters\": 147524}}, null]\n[[9, 0, 2], 9.0, {\"submitted\": 1534080456.9486861, \"started\": 1534080456.9489598, \"finished\": 1534080717.923157}, {\"loss\": 0.03515625, \"info\": {\"test accuracy\": 0.9644, \"train accuracy\": 0.9952392578125, \"validation accuracy\": 0.96484375, \"number of parameters\": 655260}}, null]\n[[12, 0, 0], 1.0, {\"submitted\": 1534080717.9995546, \"started\": 1534080717.9999418, \"finished\": 1534080739.369449}, {\"loss\": 0.1796875, \"info\": {\"test accuracy\": 0.84, \"train accuracy\": 0.8448486328125, \"validation accuracy\": 0.8203125, \"number of parameters\": 259060}}, null]\n[[12, 0, 1], 1.0, {\"submitted\": 1534080739.4413722, \"started\": 1534080739.4416614, \"finished\": 1534080767.8865676}, {\"loss\": 0.1650390625, \"info\": {\"test accuracy\": 0.8578, \"train accuracy\": 0.8614501953125, \"validation accuracy\": 0.8349609375, \"number of parameters\": 361652}}, null]\n[[12, 0, 2], 1.0, {\"submitted\": 1534080767.981734, \"started\": 1534080767.9820757, \"finished\": 1534080781.765319}, {\"loss\": 0.7119140625, \"info\": {\"test accuracy\": 0.2926, \"train accuracy\": 0.2935791015625, \"validation accuracy\": 0.2880859375, \"number of parameters\": 144595}}, null]\n[[12, 0, 3], 1.0, {\"submitted\": 1534080781.8491576, \"started\": 1534080781.8495874, \"finished\": 1534080795.5450816}, {\"loss\": 0.2236328125, \"info\": {\"test accuracy\": 0.7987, \"train accuracy\": 0.7987060546875, \"validation accuracy\": 0.7763671875, \"number of parameters\": 156686}}, null]\n[[12, 0, 4], 1.0, {\"submitted\": 1534080795.6150842, \"started\": 1534080795.6153662, \"finished\": 1534080839.713566}, {\"loss\": 0.1123046875, \"info\": {\"test accuracy\": 0.899, \"train accuracy\": 0.906005859375, \"validation accuracy\": 0.8876953125, \"number of parameters\": 522164}}, null]\n[[12, 0, 5], 1.0, {\"submitted\": 1534080839.7928646, \"started\": 1534080839.7933977, \"finished\": 1534080856.2271786}, {\"loss\": 0.927734375, \"info\": {\"test accuracy\": 0.057, \"train accuracy\": 0.05810546875, \"validation accuracy\": 0.072265625, \"number of parameters\": 201220}}, null]\n[[11, 0, 2], 9.0, {\"submitted\": 1534080613.185155, \"started\": 1534080613.1856816, \"finished\": 1534080857.7188282}, {\"loss\": 0.888671875, \"info\": {\"test accuracy\": 0.1135, \"train accuracy\": 0.1136474609375, \"validation accuracy\": 0.111328125, \"number of parameters\": 617372}}, null]\n[[12, 0, 6], 1.0, {\"submitted\": 1534080856.3069746, \"started\": 1534080856.3073237, \"finished\": 1534080899.8793943}, {\"loss\": 0.1123046875, \"info\": {\"test accuracy\": 0.9036, \"train accuracy\": 0.914306640625, \"validation accuracy\": 0.8876953125, \"number of parameters\": 528359}}, null]\n[[12, 0, 8], 1.0, {\"submitted\": 1534080899.955764, \"started\": 1534080899.9560812, \"finished\": 1534080920.6971123}, {\"loss\": 0.2255859375, \"info\": {\"test accuracy\": 0.7981, \"train accuracy\": 0.7978515625, \"validation accuracy\": 0.7744140625, \"number of parameters\": 217838}}, null]\n[[12, 0, 7], 1.0, {\"submitted\": 1534080857.7226233, \"started\": 1534080857.7229373, \"finished\": 1534080924.0502822}, {\"loss\": 0.3662109375, \"info\": {\"test accuracy\": 0.6386, \"train accuracy\": 0.64208984375, \"validation accuracy\": 0.6337890625, \"number of parameters\": 803108}}, null]\n[[13, 0, 0], 3.0, {\"submitted\": 1534080920.7758017, \"started\": 1534080920.7761717, \"finished\": 1534080964.245705}, {\"loss\": 0.8984375, \"info\": {\"test accuracy\": 0.1028, \"train accuracy\": 0.10693359375, \"validation accuracy\": 0.1015625, \"number of parameters\": 236549}}, null]\n[[12, 0, 1], 3.0, {\"submitted\": 1534080924.051724, \"started\": 1534080924.0520108, \"finished\": 1534080981.9013703}, {\"loss\": 0.083984375, \"info\": {\"test accuracy\": 0.9378, \"train accuracy\": 0.94287109375, \"validation accuracy\": 0.916015625, \"number of parameters\": 361652}}, null]\n[[10, 0, 0], 9.0, {\"submitted\": 1534080474.4107075, \"started\": 1534080474.4110196, \"finished\": 1534081031.9636998}, {\"loss\": 0.0576171875, \"info\": {\"test accuracy\": 0.9523, \"train accuracy\": 0.9752197265625, \"validation accuracy\": 0.9423828125, \"number of parameters\": 1311260}}, null]\n[[12, 0, 4], 3.0, {\"submitted\": 1534080964.2489371, \"started\": 1534080964.2492244, \"finished\": 1534081049.419592}, {\"loss\": 0.0693359375, \"info\": {\"test accuracy\": 0.9453, \"train accuracy\": 0.958251953125, \"validation accuracy\": 0.9306640625, \"number of parameters\": 522164}}, null]\n[[12, 0, 6], 3.0, {\"submitted\": 1534080981.9045327, \"started\": 1534080981.9048197, \"finished\": 1534081066.7152627}, {\"loss\": 0.0751953125, \"info\": {\"test accuracy\": 0.9425, \"train accuracy\": 0.96240234375, \"validation accuracy\": 0.9248046875, \"number of parameters\": 528359}}, null]\n[[13, 0, 2], 3.0, {\"submitted\": 1534081049.5023756, \"started\": 1534081049.5027394, \"finished\": 1534081085.3070076}, {\"loss\": 0.076171875, \"info\": {\"test accuracy\": 0.9364, \"train accuracy\": 0.9527587890625, \"validation accuracy\": 0.923828125, \"number of parameters\": 194664}}, null]\n[[13, 0, 1], 3.0, {\"submitted\": 1534081031.973278, \"started\": 1534081031.9736636, \"finished\": 1534081231.4716845}, {\"loss\": 0.8984375, \"info\": {\"test accuracy\": 0.1028, \"train accuracy\": 0.10693359375, \"validation accuracy\": 0.1015625, \"number of parameters\": 24799}}, null]\n[[12, 0, 4], 9.0, {\"submitted\": 1534081066.7164984, \"started\": 1534081066.7168388, \"finished\": 1534081284.1877267}, {\"loss\": 0.048828125, \"info\": {\"test accuracy\": 0.9645, \"train accuracy\": 0.9832763671875, \"validation accuracy\": 0.951171875, \"number of parameters\": 522164}}, null]\n[[13, 0, 2], 9.0, {\"submitted\": 1534081231.4730344, \"started\": 1534081231.4733896, \"finished\": 1534081322.6940641}, {\"loss\": 0.0625, \"info\": {\"test accuracy\": 0.9549, \"train accuracy\": 0.976318359375, \"validation accuracy\": 0.9375, \"number of parameters\": 194664}}, null]\n[[14, 0, 0], 9.0, {\"submitted\": 1534081085.3098252, \"started\": 1534081085.31015, \"finished\": 1534081376.9450753}, {\"loss\": 0.888671875, \"info\": {\"test accuracy\": 0.1136, \"train accuracy\": 0.1136474609375, \"validation accuracy\": 0.111328125, \"number of parameters\": 67757}}, null]\n[[15, 0, 0], 1.0, {\"submitted\": 1534081377.031154, \"started\": 1534081377.0316553, \"finished\": 1534081414.3873372}, {\"loss\": 0.8232421875, \"info\": {\"test accuracy\": 0.1866, \"train accuracy\": 0.1866455078125, \"validation accuracy\": 0.1767578125, \"number of parameters\": 445710}}, null]\n[[15, 0, 1], 1.0, {\"submitted\": 1534081414.4693282, \"started\": 1534081414.4698677, \"finished\": 1534081463.2749565}, {\"loss\": 0.89453125, \"info\": {\"test accuracy\": 0.101, \"train accuracy\": 0.1019287109375, \"validation accuracy\": 0.10546875, \"number of parameters\": 613760}}, null]\n[[15, 0, 2], 1.0, {\"submitted\": 1534081463.351995, \"started\": 1534081463.3524225, \"finished\": 1534081475.5845509}, {\"loss\": 0.873046875, \"info\": {\"test accuracy\": 0.1071, \"train accuracy\": 0.1129150390625, \"validation accuracy\": 0.126953125, \"number of parameters\": 122468}}, null]\n[[14, 0, 1], 9.0, {\"submitted\": 1534081284.191862, \"started\": 1534081284.1921797, \"finished\": 1534081517.1601944}, {\"loss\": 0.71875, \"info\": {\"test accuracy\": 0.2542, \"train accuracy\": 0.2703857421875, \"validation accuracy\": 0.28125, \"number of parameters\": 7033}}, null]\n[[15, 0, 3], 1.0, {\"submitted\": 1534081475.587032, \"started\": 1534081475.587304, \"finished\": 1534081529.2796805}, {\"loss\": 0.888671875, \"info\": {\"test accuracy\": 0.0958, \"train accuracy\": 0.1002197265625, \"validation accuracy\": 0.111328125, \"number of parameters\": 5780}}, null]\n[[15, 0, 5], 1.0, {\"submitted\": 1534081529.375023, \"started\": 1534081529.3753588, \"finished\": 1534081559.5891235}, {\"loss\": 0.0791015625, \"info\": {\"test accuracy\": 0.9334, \"train accuracy\": 0.9481201171875, \"validation accuracy\": 0.9208984375, \"number of parameters\": 291092}}, null]\n[[15, 0, 6], 1.0, {\"submitted\": 1534081559.6667824, \"started\": 1534081559.6670945, \"finished\": 1534081590.3603728}, {\"loss\": 0.0859375, \"info\": {\"test accuracy\": 0.9367, \"train accuracy\": 0.9521484375, \"validation accuracy\": 0.9140625, \"number of parameters\": 302820}}, null]\n[[15, 0, 7], 1.0, {\"submitted\": 1534081590.364006, \"started\": 1534081590.3642995, \"finished\": 1534081596.1196048}, {\"loss\": 0.86328125, \"info\": {\"test accuracy\": 0.1108, \"train accuracy\": 0.119140625, \"validation accuracy\": 0.13671875, \"number of parameters\": 6636}}, null]\n[[14, 0, 2], 9.0, {\"submitted\": 1534081322.7739668, \"started\": 1534081322.7743661, \"finished\": 1534081646.752329}, {\"loss\": 0.041015625, \"info\": {\"test accuracy\": 0.9716, \"train accuracy\": 0.997314453125, \"validation accuracy\": 0.958984375, \"number of parameters\": 670016}}, null]\n[[15, 0, 4], 1.0, {\"submitted\": 1534081517.165494, \"started\": 1534081517.1657941, \"finished\": 1534081649.702712}, {\"loss\": 0.3310546875, \"info\": {\"test accuracy\": 0.668, \"train accuracy\": 0.6805419921875, \"validation accuracy\": 0.6689453125, \"number of parameters\": 32567}}, null]\n[[15, 0, 8], 1.0, {\"submitted\": 1534081596.1999125, \"started\": 1534081596.200272, \"finished\": 1534081744.8011317}, {\"loss\": 0.9033203125, \"info\": {\"test accuracy\": 0.1042, \"train accuracy\": 0.099853515625, \"validation accuracy\": 0.0966796875, \"number of parameters\": 260818}}, null]\n[[15, 0, 5], 3.0, {\"submitted\": 1534081744.8067439, \"started\": 1534081744.8074381, \"finished\": 1534081800.8448093}, {\"loss\": 0.0712890625, \"info\": {\"test accuracy\": 0.9421, \"train accuracy\": 0.956787109375, \"validation accuracy\": 0.9287109375, \"number of parameters\": 291092}}, null]\n[[15, 0, 6], 3.0, {\"submitted\": 1534081744.8068984, \"started\": 1534081744.8077588, \"finished\": 1534081801.568248}, {\"loss\": 0.064453125, \"info\": {\"test accuracy\": 0.955, \"train accuracy\": 0.971435546875, \"validation accuracy\": 0.935546875, \"number of parameters\": 302820}}, null]\n[[15, 0, 4], 3.0, {\"submitted\": 1534081744.8065667, \"started\": 1534081744.8071163, \"finished\": 1534082012.8458457}, {\"loss\": 0.09375, \"info\": {\"test accuracy\": 0.9238, \"train accuracy\": 0.9296875, \"validation accuracy\": 0.90625, \"number of parameters\": 32567}}, null]\n[[15, 0, 6], 9.0, {\"submitted\": 1534082012.846661, \"started\": 1534082012.846856, \"finished\": 1534082117.80023}, {\"loss\": 0.04296875, \"info\": {\"test accuracy\": 0.9713, \"train accuracy\": 0.995361328125, \"validation accuracy\": 0.95703125, \"number of parameters\": 302820}}, null]\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/examples/example_8_mnist_continued.py",
    "content": "\"\"\"\nExample 8 - Warmstarting for MNIST\n==================================\n\nSometimes it is desired to continue an already finished run because the optimization\nrequires more function evaluations. In other cases, one might wish to use results\nfrom previous runs to speed up the optimization. This might be useful if initial\nruns were done with relatively small budgets, or on only a subset of the data to\nget an initial understanding of the problem.\n\nHere we shall see how to use the results from example 5 to initialize BOHB's model.\nWhat changed are\n- the number of training points is increased from 8192 to 32768\n- the number of validation points is increased from 1024 to 16384\n- the mimum budget is now 3 instead of 1 because we have already quite a few runs for a small number of epochs\n\nNote that the loaded runs will show up in the results of the new run. They are all\ncombined into an iteration with the index -1 and their time stamps are manipulated\nsuch that the last run finishes at time 0 with all other times being negative.\nThat info can be used to filter those runs when analysing the run.\n\n\"\"\"\nimport os\nimport pickle\nimport argparse\n\nimport hpbandster.core.nameserver as hpns\nimport hpbandster.core.result as hpres\n\nfrom hpbandster.optimizers import BOHB\n\nimport logging\nlogging.basicConfig(level=logging.DEBUG)\n\n\n\nparser = argparse.ArgumentParser(description='Example 1 - sequential and local execution.')\nparser.add_argument('--min_budget',   type=float, help='Minimum number of epochs for training.',    default=3)\nparser.add_argument('--max_budget',   type=float, help='Maximum number of epochs for training.',    default=9)\nparser.add_argument('--n_iterations', type=int,   help='Number of iterations performed by the optimizer', default=4)\nparser.add_argument('--worker', help='Flag to turn this into a worker process', action='store_true')\nparser.add_argument('--run_id', type=str, help='A unique run id for this optimization run. An easy option is to use the job id of the clusters scheduler.')\nparser.add_argument('--nic_name',type=str, help='Which network interface to use for communication.', default='lo')\nparser.add_argument('--shared_directory',type=str, help='A directory that is accessible for all processes, e.g. a NFS share.', default='.')\nparser.add_argument('--backend',help='Toggles which worker is used. Choose between a pytorch and a keras implementation.', choices=['pytorch', 'keras'], default='keras')\nparser.add_argument('--previous_run_dir',type=str, help='A directory that contains a config.json and results.json for the same configuration space.', default='./example_5_run/')\n\nargs=parser.parse_args()\n\n\nif args.backend == 'pytorch':\n\tfrom example_5_pytorch_worker import PyTorchWorker as worker\nelse:\n\tfrom example_5_keras_worker import KerasWorker as worker\n\n\n# Every process has to lookup the hostname\nhost = hpns.nic_name_to_host(args.nic_name)\n\n\nif args.worker:\n\timport time\n\ttime.sleep(5)\t# short artificial delay to make sure the nameserver is already running\n\tw = worker(run_id=args.run_id, host=host, timeout=120)\n\tw.load_nameserver_credentials(working_directory=args.shared_directory)\n\tw.run(background=False)\n\texit(0)\n\n\n# This example shows how to log live results. This is most useful\n# for really long runs, where intermediate results could already be\n# interesting. The core.result submodule contains the functionality to\n# read the two generated files (results.json and configs.json) and\n# create a Result object.\nresult_logger = hpres.json_result_logger(directory=args.shared_directory, overwrite=False)\n\n\n# Start a nameserver:\nNS = hpns.NameServer(run_id=args.run_id, host=host, port=0, working_directory=args.shared_directory)\nns_host, ns_port = NS.start()\n\n# Start local worker\nw = worker(run_id=args.run_id, host=host, nameserver=ns_host, nameserver_port=ns_port, timeout=120)\nw.run(background=True)\n\n\n# Let us load the old run now to use its results to warmstart a new run with slightly\n# different budgets in terms of datapoints and epochs.\n# Note that the search space has to be identical though!\nprevious_run = hpres.logged_results_to_HBS_result(args.previous_run_dir)\n\n\n# Run an optimizer\nbohb = BOHB(  configspace = worker.get_configspace(),\n\t\t\t  run_id = args.run_id,\n\t\t\t  host=host,\n\t\t\t  nameserver=ns_host,\n\t\t\t  nameserver_port=ns_port,\n\t\t\t  result_logger=result_logger,\n\t\t\t  min_budget=args.min_budget, max_budget=args.max_budget, \n\t\t\t  previous_result = previous_run,\t\t\t\t# this is how you tell any optimizer about previous runs\n\t\t   )\nres = bohb.run(n_iterations=args.n_iterations)\n\n# store results\nwith open(os.path.join(args.shared_directory, 'results.pkl'), 'wb') as fh:\n\tpickle.dump(res, fh)\n\n# shutdown\nbohb.shutdown(shutdown_workers=True)\nNS.shutdown()\n\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/examples/plot_example_6_analysis.py",
    "content": "\"\"\"\nExample 6 -  Analysis of a Run\n==============================\n\nThis example takes a run from example 5 and performs some analysis of it.\nIt shows how to get the best performing configuration, and its attributes.\nMore advanced analysis plots provide some insights into a run and the problem.\n\n\"\"\"\n\nimport matplotlib.pyplot as plt\nimport hpbandster.core.result as hpres\nimport hpbandster.visualization as hpvis\n\n\n\n# load the example run from the log files\nresult = hpres.logged_results_to_HBS_result('example_5_run/')\n\n# get all executed runs\nall_runs = result.get_all_runs()\n\n# get the 'dict' that translates config ids to the actual configurations\nid2conf = result.get_id2config_mapping()\n\n\n# Here is how you get he incumbent (best configuration)\ninc_id = result.get_incumbent_id()\n\n# let's grab the run on the highest budget \ninc_runs = result.get_runs_by_id(inc_id)\ninc_run = inc_runs[-1]\n\n\n# We have access to all information: the config, the loss observed during\n#optimization, and all the additional information\ninc_loss = inc_run.loss\ninc_config = id2conf[inc_id]['config']\ninc_test_loss = inc_run.info['test accuracy']\n\nprint('Best found configuration:')\nprint(inc_config)\nprint('It achieved accuracies of %f (validation) and %f (test).'%(1-inc_loss, inc_test_loss))\n\n\n# Let's plot the observed losses grouped by budget,\nhpvis.losses_over_time(all_runs) \n\n# the number of concurent runs,\nhpvis.concurrent_runs_over_time(all_runs) \n\n# and the number of finished runs.\nhpvis.finished_runs_over_time(all_runs)\n\n# This one visualizes the spearman rank correlation coefficients of the losses\n# between different budgets.\nhpvis.correlation_across_budgets(result)\n\n# For model based optimizers, one might wonder how much the model actually helped.\n# The next plot compares the performance of configs picked by the model vs. random ones\nhpvis.performance_histogram_model_vs_random(all_runs, id2conf) \n\nplt.show()\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/examples/plot_example_7_interactive_plot.py",
    "content": "\"\"\"\nExample 7 - Interactive Exploration of the Results\n==================================================\n\nThis example takes a run from example 5 and allows you to interactively look at\nall runs performed and the associated loss.\nThe plot allows you to only include certain iterations (selected by the checkboxes on the left).\nBy hovering over the learning curves (all runs of a single configuration on all respective budets)\nyou see some information about the configuration and its performance.\nClicking on it will make the tool tip persistent.Clicking on the curve again, will remove it again.\n\nThis tool is not very mature, but maybe it can help you to explore the structure hidden in your\nresults.  Please refer to the documentation of the visualization submodule to see all\noptions.\n\"\"\"\n\nimport matplotlib.pyplot as plt\nimport hpbandster.core.result as hpres\nimport hpbandster.visualization as hpvis\n\n\n\n# load the example run from the log files\nresult = hpres.logged_results_to_HBS_result('example_5_run/')\n\n# get all executed runs\nall_runs = result.get_all_runs()\n\n# get the 'dict' that translates config ids to the actual configurations\nid2conf = result.get_id2config_mapping()\n\nlcs = result.get_learning_curves()\n\nhpvis.interactive_HBS_plot(lcs, tool_tip_strings=hpvis.default_tool_tips(result, lcs))\n\n\n\n\ndef realtime_learning_curves(runs):\n\t\"\"\"\n\texample how to extract a different kind of learning curve.\n\t\n\tThe x values are now the time the runs finished, not the budget anymore.\n\tWe no longer plot the validation loss on the y axis, but now the test accuracy.\n\t\n\tThis is just to show how to get different information into the interactive plot.\n\t\n\t\"\"\"\n\tsr = sorted(runs, key=lambda r: r.budget)\n\tlc = list(filter(lambda t: not t[1] is None, [(r.time_stamps['finished'], r.info['test accuracy']) for r in sr]))\n\treturn([lc,])\n\t\nlcs = result.get_learning_curves(lc_extractor=realtime_learning_curves)\n\nhpvis.interactive_HBS_plot(lcs, tool_tip_strings=hpvis.default_tool_tips(result, lcs))\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/optimizers/__init__.py",
    "content": "from hpbandster.optimizers.randomsearch import RandomSearch\nfrom hpbandster.optimizers.hyperband import HyperBand\nfrom hpbandster.optimizers.bohb import BOHB\nfrom hpbandster.optimizers.h2bo import H2BO\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/optimizers/bohb.py",
    "content": "import os\nimport time\nimport math\nimport copy\nimport logging\n\nimport numpy as np\n\n\nimport ConfigSpace as CS\n\nfrom hpbandster.core.master import Master\nfrom hpbandster.optimizers.iterations import SuccessiveHalving\nfrom hpbandster.optimizers.config_generators.bohb import BOHB as CG_BOHB\n\nclass BOHB(Master):\n\tdef __init__(self, configspace = None,\n\t\t\t\t\teta=3, min_budget=0.01, max_budget=1,\n\t\t\t\t\tmin_points_in_model = None,\ttop_n_percent=15,\n\t\t\t\t\tnum_samples = 64, random_fraction=1/3, bandwidth_factor=3,\n\t\t\t\t\tmin_bandwidth=1e-3,\n\t\t\t\t\t**kwargs ):\n\t\t\"\"\"\n                BOHB performs robust and efficient hyperparameter optimization\n                at scale by combining the speed of Hyperband searches with the\n                guidance and guarantees of convergence of Bayesian\n                Optimization. Instead of sampling new configurations at random,\n                BOHB uses kernel density estimators to select promising candidates.\n\n                .. highlight:: none\n\n                For reference: ::\n\n\t\t\t@InProceedings{falkner-icml-18,\n\t\t\t  title =        {{BOHB}: Robust and Efficient Hyperparameter Optimization at Scale},\n\t\t\t  author =       {Falkner, Stefan and Klein, Aaron and Hutter, Frank},\n\t\t\t  booktitle =    {Proceedings of the 35th International Conference on Machine Learning},\n\t\t\t  pages =        {1436--1445},\n\t\t\t  year =         {2018},\n\t\t\t}\n\n\t\tParameters\n\t\t----------\n\t\tconfigspace: ConfigSpace object\n\t\t\tvalid representation of the search space\n\t\teta : float\n\t\t\tIn each iteration, a complete run of sequential halving is executed. In it,\n\t\t\tafter evaluating each configuration on the same subset size, only a fraction of\n\t\t\t1/eta of them 'advances' to the next round.\n\t\t\tMust be greater or equal to 2.\n\t\tmin_budget : float\n\t\t\tThe smallest budget to consider. Needs to be positive!\n\t\tmax_budget : float\n\t\t\tThe largest budget to consider. Needs to be larger than min_budget!\n\t\t\tThe budgets will be geometrically distributed\n                        :math:`a^2 + b^2 = c^2 \\sim \\eta^k` for :math:`k\\in [0, 1, ... , num\\_subsets - 1]`.\n\t\tmin_points_in_model: int\n\t\t\tnumber of observations to start building a KDE. Default 'None' means\n\t\t\tdim+1, the bare minimum.\n\t\ttop_n_percent: int\n\t\t\tpercentage ( between 1 and 99, default 15) of the observations that are considered good.\n\t\tnum_samples: int\n\t\t\tnumber of samples to optimize EI (default 64)\n\t\trandom_fraction: float\n\t\t\tfraction of purely random configurations that are sampled from the\n\t\t\tprior without the model.\n\t\tbandwidth_factor: float\n\t\t\tto encourage diversity, the points proposed to optimize EI, are sampled\n\t\t\tfrom a 'widened' KDE where the bandwidth is multiplied by this factor (default: 3)\n\t\tmin_bandwidth: float\n\t\t\tto keep diversity, even when all (good) samples have the same value for one of the parameters,\n\t\t\ta minimum bandwidth (Default: 1e-3) is used instead of zero.\n\t\titeration_kwargs: dict\n\t\t\tkwargs to be added to the instantiation of each iteration\n\t\t\"\"\"\n\n\n\n\t\t# TODO: Propper check for ConfigSpace object!\n\t\tif configspace is None:\n\t\t\traise ValueError(\"You have to provide a valid CofigSpace object\")\n\n\n\n\t\tcg = CG_BOHB( configspace = configspace,\n\t\t\t\t\tmin_points_in_model = min_points_in_model,\n\t\t\t\t\ttop_n_percent=top_n_percent,\n\t\t\t\t\tnum_samples = num_samples,\n\t\t\t\t\trandom_fraction=random_fraction,\n\t\t\t\t\tbandwidth_factor=bandwidth_factor,\n\t\t\t\t\tmin_bandwidth = min_bandwidth\n\t\t\t\t\t)\n\n\t\tsuper().__init__(config_generator=cg, **kwargs)\n\n\t\t# Hyperband related stuff\n\t\tself.eta = eta\n\t\tself.min_budget = min_budget\n\t\tself.max_budget = max_budget\n\n\t\t# precompute some HB stuff\n\t\tself.max_SH_iter = -int(np.log(min_budget/max_budget)/np.log(eta)) + 1\n\t\tself.budgets = max_budget * np.power(eta, -np.linspace(self.max_SH_iter-1, 0, self.max_SH_iter))\n\n\t\tself.config.update({\n\t\t\t\t\t\t'eta'        : eta,\n\t\t\t\t\t\t'min_budget' : min_budget,\n\t\t\t\t\t\t'max_budget' : max_budget,\n\t\t\t\t\t\t'budgets'    : self.budgets,\n\t\t\t\t\t\t'max_SH_iter': self.max_SH_iter,\n\t\t\t\t\t\t'min_points_in_model' : min_points_in_model,\n\t\t\t\t\t\t'top_n_percent' : top_n_percent,\n\t\t\t\t\t\t'num_samples' : num_samples,\n\t\t\t\t\t\t'random_fraction' : random_fraction,\n\t\t\t\t\t\t'bandwidth_factor' : bandwidth_factor,\n\t\t\t\t\t\t'min_bandwidth': min_bandwidth\n\t\t\t\t\t})\n\n\tdef get_next_iteration(self, iteration, iteration_kwargs={}):\n\t\t\"\"\"\n\t\tBO-HB uses (just like Hyperband) SuccessiveHalving for each iteration.\n\t\tSee Li et al. (2016) for reference.\n\t\t\n\t\tParameters\n\t\t----------\n\t\t\titeration: int\n\t\t\t\tthe index of the iteration to be instantiated\n\n\t\tReturns\n\t\t-------\n\t\t\tSuccessiveHalving: the SuccessiveHalving iteration with the\n\t\t\t\tcorresponding number of configurations\n\t\t\"\"\"\n\t\t\n\t\t# number of 'SH rungs'\n\t\ts = self.max_SH_iter - 1 - (iteration%self.max_SH_iter)\n\t\t# number of configurations in that bracket\n\t\tn0 = int(np.floor((self.max_SH_iter)/(s+1)) * self.eta**s)\n\t\tns = [max(int(n0*(self.eta**(-i))), 1) for i in range(s+1)]\n\n\t\treturn(SuccessiveHalving(HPB_iter=iteration, num_configs=ns, budgets=self.budgets[(-s-1):], config_sampler=self.config_generator.get_config, **iteration_kwargs))\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/optimizers/config_generators/__init__.py",
    "content": "from hpbandster.optimizers.config_generators.random_sampling import RandomSampling\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/optimizers/config_generators/bohb.py",
    "content": "import logging\nfrom copy import deepcopy\nimport traceback\n\n\nimport ConfigSpace\nimport ConfigSpace.hyperparameters\nimport ConfigSpace.util\nimport numpy as np\nimport scipy.stats as sps\nimport scipy.optimize as spo\nimport statsmodels.api as sm\n\nfrom hpbandster.core.base_config_generator import base_config_generator\n\n\nclass BOHB(base_config_generator):\n\tdef __init__(self, configspace, min_points_in_model = None,\n\t\t\t\t top_n_percent=15, num_samples = 64, random_fraction=1/3,\n\t\t\t\t bandwidth_factor=3, min_bandwidth=1e-3,\n\t\t\t\t**kwargs):\n\t\t\"\"\"\n\t\t\tFits for each given budget a kernel density estimator on the best N percent of the\n\t\t\tevaluated configurations on this budget.\n\n\n\t\t\tParameters:\n\t\t\t-----------\n\t\t\tconfigspace: ConfigSpace\n\t\t\t\tConfiguration space object\n\t\t\ttop_n_percent: int\n\t\t\t\tDetermines the percentile of configurations that will be used as training data\n\t\t\t\tfor the kernel density estimator, e.g if set to 10 the 10% best configurations will be considered\n\t\t\t\tfor training.\n\t\t\tmin_points_in_model: int\n\t\t\t\tminimum number of datapoints needed to fit a model\n\t\t\tnum_samples: int\n\t\t\t\tnumber of samples drawn to optimize EI via sampling\n\t\t\trandom_fraction: float\n\t\t\t\tfraction of random configurations returned\n\t\t\tbandwidth_factor: float\n\t\t\t\twidens the bandwidth for contiuous parameters for proposed points to optimize EI\n\t\t\tmin_bandwidth: float\n\t\t\t\tto keep diversity, even when all (good) samples have the same value for one of the parameters,\n\t\t\t\ta minimum bandwidth (Default: 1e-3) is used instead of zero. \n\n\t\t\"\"\"\n\t\tsuper().__init__(**kwargs)\n\t\tself.top_n_percent=top_n_percent\n\t\tself.configspace = configspace\n\t\tself.bw_factor = bandwidth_factor\n\t\tself.min_bandwidth = min_bandwidth\n\n\t\tself.min_points_in_model = min_points_in_model\n\t\tif min_points_in_model is None:\n\t\t\tself.min_points_in_model = len(self.configspace.get_hyperparameters())+1\n\t\t\n\t\tif self.min_points_in_model < len(self.configspace.get_hyperparameters())+1:\n\t\t\tself.logger.warning('Invalid min_points_in_model value. Setting it to %i'%(len(self.configspace.get_hyperparameters())+1))\n\t\t\tself.min_points_in_model =len(self.configspace.get_hyperparameters())+1\n\t\t\n\t\tself.num_samples = num_samples\n\t\tself.random_fraction = random_fraction\n\n\t\thps = self.configspace.get_hyperparameters()\n\n\t\tself.kde_vartypes = \"\"\n\t\tself.vartypes = []\n\n\n\t\tfor h in hps:\n\t\t\tif hasattr(h, 'sequence'):\n\t\t\t\traise RuntimeError('This version on BOHB does not support ordinal hyperparameters. Please encode %s as an integer parameter!'%(h.name))\n\t\t\t\n\t\t\tif hasattr(h, 'choices'):\n\t\t\t\tself.kde_vartypes += 'u'\n\t\t\t\tself.vartypes +=[ len(h.choices)]\n\t\t\telse:\n\t\t\t\tself.kde_vartypes += 'c'\n\t\t\t\tself.vartypes +=[0]\n\t\t\n\t\tself.vartypes = np.array(self.vartypes, dtype=int)\n\n\t\t# store precomputed probs for the categorical parameters\n\t\tself.cat_probs = []\n\t\t\n\n\t\tself.configs = dict()\n\t\tself.losses = dict()\n\t\tself.good_config_rankings = dict()\n\t\tself.kde_models = dict()\n\n\n\tdef largest_budget_with_model(self):\n\t\tif len(self.kde_models) == 0:\n\t\t\treturn(-float('inf'))\n\t\treturn(max(self.kde_models.keys()))\n\n\tdef get_config(self, budget):\n\t\t\"\"\"\n\t\t\tFunction to sample a new configuration\n\n\t\t\tThis function is called inside Hyperband to query a new configuration\n\n\n\t\t\tParameters:\n\t\t\t-----------\n\t\t\tbudget: float\n\t\t\t\tthe budget for which this configuration is scheduled\n\n\t\t\treturns: config\n\t\t\t\tshould return a valid configuration\n\n\t\t\"\"\"\n\t\t\n\t\tself.logger.debug('start sampling a new configuration.')\n\t\t\n\n\t\tsample = None\n\t\tinfo_dict = {}\n\t\t\n\t\t# If no model is available, sample from prior\n\t\t# also mix in a fraction of random configs\n\t\tif len(self.kde_models.keys()) == 0 or np.random.rand() < self.random_fraction:\n\t\t\tsample =  self.configspace.sample_configuration()\n\t\t\tinfo_dict['model_based_pick'] = False\n\n\t\tbest = np.inf\n\t\tbest_vector = None\n\n\t\tif sample is None:\n\t\t\ttry:\n\t\t\t\t\n\t\t\t\t#sample from largest budget\n\t\t\t\tbudget = max(self.kde_models.keys())\n\n\t\t\t\tl = self.kde_models[budget]['good'].pdf\n\t\t\t\tg = self.kde_models[budget]['bad' ].pdf\n\t\t\t\n\t\t\t\tminimize_me = lambda x: max(1e-32, g(x))/max(l(x),1e-32)\n\t\t\t\t\n\t\t\t\tkde_good = self.kde_models[budget]['good']\n\t\t\t\tkde_bad = self.kde_models[budget]['bad']\n\n\t\t\t\tfor i in range(self.num_samples):\n\t\t\t\t\tidx = np.random.randint(0, len(kde_good.data))\n\t\t\t\t\tdatum = kde_good.data[idx]\n\t\t\t\t\tvector = []\n\t\t\t\t\t\n\t\t\t\t\tfor m,bw,t in zip(datum, kde_good.bw, self.vartypes):\n\t\t\t\t\t\t\n\t\t\t\t\t\tbw = max(bw, self.min_bandwidth)\n\t\t\t\t\t\tif t == 0:\n\t\t\t\t\t\t\tbw = self.bw_factor*bw\n\t\t\t\t\t\t\ttry:\n\t\t\t\t\t\t\t\tvector.append(sps.truncnorm.rvs(-m/bw,(1-m)/bw, loc=m, scale=bw))\n\t\t\t\t\t\t\texcept:\n\t\t\t\t\t\t\t\tself.logger.warning(\"Truncated Normal failed for:\\ndatum=%s\\nbandwidth=%s\\nfor entry with value %s\"%(datum, kde_good.bw, m))\n\t\t\t\t\t\t\t\tself.logger.warning(\"data in the KDE:\\n%s\"%kde_good.data)\n\t\t\t\t\t\telse:\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif np.random.rand() < (1-bw):\n\t\t\t\t\t\t\t\tvector.append(int(m))\n\t\t\t\t\t\t\telse:\n\t\t\t\t\t\t\t\tvector.append(np.random.randint(t))\n\t\t\t\t\tval = minimize_me(vector)\n\n\t\t\t\t\tif not np.isfinite(val):\n\t\t\t\t\t\tself.logger.warning('sampled vector: %s has EI value %s'%(vector, val))\n\t\t\t\t\t\tself.logger.warning(\"data in the KDEs:\\n%s\\n%s\"%(kde_good.data, kde_bad.data))\n\t\t\t\t\t\tself.logger.warning(\"bandwidth of the KDEs:\\n%s\\n%s\"%(kde_good.bw, kde_bad.bw))\n\t\t\t\t\t\tself.logger.warning(\"l(x) = %s\"%(l(vector)))\n\t\t\t\t\t\tself.logger.warning(\"g(x) = %s\"%(g(vector)))\n\n\t\t\t\t\t\t# right now, this happens because a KDE does not contain all values for a categorical parameter\n\t\t\t\t\t\t# this cannot be fixed with the statsmodels KDE, so for now, we are just going to evaluate this one\n\t\t\t\t\t\t# if the good_kde has a finite value, i.e. there is no config with that value in the bad kde, so it shouldn't be terrible.\n\t\t\t\t\t\tif np.isfinite(l(vector)):\n\t\t\t\t\t\t\tbest_vector = vector\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\tif val < best:\n\t\t\t\t\t\tbest = val\n\t\t\t\t\t\tbest_vector = vector\n\n\t\t\t\tif best_vector is None:\n\t\t\t\t\tself.logger.debug(\"Sampling based optimization with %i samples failed -> using random configuration\"%self.num_samples)\n\t\t\t\t\tsample = self.configspace.sample_configuration().get_dictionary()\n\t\t\t\t\tinfo_dict['model_based_pick']  = False\n\t\t\t\telse:\n\t\t\t\t\tself.logger.debug('best_vector: {}, {}, {}, {}'.format(best_vector, best, l(best_vector), g(best_vector)))\n\t\t\t\t\tfor i, hp_value in enumerate(best_vector):\n\t\t\t\t\t\tif isinstance(\n\t\t\t\t\t\t\tself.configspace.get_hyperparameter(\n\t\t\t\t\t\t\t\tself.configspace.get_hyperparameter_by_idx(i)\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tConfigSpace.hyperparameters.CategoricalHyperparameter\n\t\t\t\t\t\t):\n\t\t\t\t\t\t\tbest_vector[i] = int(np.rint(best_vector[i]))\n\t\t\t\t\tsample = ConfigSpace.Configuration(self.configspace, vector=best_vector).get_dictionary()\n\t\t\t\t\t\n\t\t\t\t\ttry:\n\t\t\t\t\t\tsample = ConfigSpace.util.deactivate_inactive_hyperparameters(\n\t\t\t\t\t\t\t\t\tconfiguration_space=self.configspace,\n\t\t\t\t\t\t\t\t\tconfiguration=sample\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\tinfo_dict['model_based_pick'] = True\n\n\t\t\t\t\texcept Exception as e:\n\t\t\t\t\t\tself.logger.warning((\"=\"*50 + \"\\n\")*3 +\\\n\t\t\t\t\t\t\t\t\"Error converting configuration:\\n%s\"%sample+\\\n\t\t\t\t\t\t\t\t\"\\n here is a traceback:\" +\\\n\t\t\t\t\t\t\t\ttraceback.format_exc())\n\t\t\t\t\t\traise(e)\n\n\t\t\texcept:\n\t\t\t\tself.logger.warning(\"Sampling based optimization with %i samples failed\\n %s \\nUsing random configuration\"%(self.num_samples, traceback.format_exc()))\n\t\t\t\tsample = self.configspace.sample_configuration()\n\t\t\t\tinfo_dict['model_based_pick']  = False\n\n\n\t\ttry:\n\t\t\tsample = ConfigSpace.util.deactivate_inactive_hyperparameters(\n\t\t\t\tconfiguration_space=self.configspace,\n\t\t\t\tconfiguration=sample.get_dictionary()\n\t\t\t).get_dictionary()\n\t\texcept Exception as e:\n\t\t\tself.logger.warning(\"Error (%s) converting configuration: %s -> \"\n\t\t\t\t\t\t\t\t\"using random configuration!\",\n\t\t\t\t\t\t\t\te,\n\t\t\t\t\t\t\t\tsample)\n\t\t\tsample = self.configspace.sample_configuration().get_dictionary()\n\t\tself.logger.debug('done sampling a new configuration.')\n\t\treturn sample, info_dict\n\n\n\n\tdef impute_conditional_data(self, array):\n\n\t\treturn_array = np.empty_like(array)\n\n\t\tfor i in range(array.shape[0]):\n\t\t\tdatum = np.copy(array[i])\n\t\t\tnan_indices = np.argwhere(np.isnan(datum)).flatten()\n\n\t\t\twhile (np.any(nan_indices)):\n\t\t\t\tnan_idx = nan_indices[0]\n\t\t\t\tvalid_indices = np.argwhere(np.isfinite(array[:,nan_idx])).flatten()\n\n\t\t\t\tif len(valid_indices) > 0:\n\t\t\t\t\t# pick one of them at random and overwrite all NaN values\n\t\t\t\t\trow_idx = np.random.choice(valid_indices)\n\t\t\t\t\tdatum[nan_indices] = array[row_idx, nan_indices]\n\n\t\t\t\telse:\n\t\t\t\t\t# no good point in the data has this value activated, so fill it with a valid but random value\n\t\t\t\t\tt = self.vartypes[nan_idx]\n\t\t\t\t\tif t == 0:\n\t\t\t\t\t\tdatum[nan_idx] = np.random.rand()\n\t\t\t\t\telse:\n\t\t\t\t\t\tdatum[nan_idx] = np.random.randint(t)\n\n\t\t\t\tnan_indices = np.argwhere(np.isnan(datum)).flatten()\n\t\t\treturn_array[i,:] = datum\n\t\treturn(return_array)\n\n\tdef new_result(self, job, update_model=True):\n\t\t\"\"\"\n\t\t\tfunction to register finished runs\n\n\t\t\tEvery time a run has finished, this function should be called\n\t\t\tto register it with the result logger. If overwritten, make\n\t\t\tsure to call this method from the base class to ensure proper\n\t\t\tlogging.\n\n\n\t\t\tParameters:\n\t\t\t-----------\n\t\t\tjob: hpbandster.distributed.dispatcher.Job object\n\t\t\t\tcontains all the info about the run\n\t\t\"\"\"\n\n\t\tsuper().new_result(job)\n\n\t\tif job.result is None:\n\t\t\t# One could skip crashed results, but we decided to\n\t\t\t# assign a +inf loss and count them as bad configurations\n\t\t\tloss = np.inf\n\t\telse:\n\t\t\t# same for non numeric losses.\n\t\t\t# Note that this means losses of minus infinity will count as bad!\n\t\t\tloss = job.result[\"loss\"] if np.isfinite(job.result[\"loss\"]) else np.inf\n\n\t\tbudget = job.kwargs[\"budget\"]\n\n\t\tif budget not in self.configs.keys():\n\t\t\tself.configs[budget] = []\n\t\t\tself.losses[budget] = []\n\n\t\t# skip model building if we already have a bigger model\n\t\tif max(list(self.kde_models.keys()) + [-np.inf]) > budget:\n\t\t\treturn\n\n\t\t# We want to get a numerical representation of the configuration in the original space\n\n\t\tconf = ConfigSpace.Configuration(self.configspace, job.kwargs[\"config\"])\n\t\tself.configs[budget].append(conf.get_array())\n\t\tself.losses[budget].append(loss)\n\n\t\t\n\t\t# skip model building:\n\t\t#\t\ta) if not enough points are available\n\t\tif len(self.configs[budget]) <= self.min_points_in_model-1:\n\t\t\tself.logger.debug(\"Only %i run(s) for budget %f available, need more than %s -> can't build model!\"%(len(self.configs[budget]), budget, self.min_points_in_model+1))\n\t\t\treturn\n\n\t\t#\t\tb) during warnm starting when we feed previous results in and only update once\n\t\tif not update_model:\n\t\t\treturn\n\n\t\ttrain_configs = np.array(self.configs[budget])\n\t\ttrain_losses =  np.array(self.losses[budget])\n\n\t\tn_good= max(self.min_points_in_model, (self.top_n_percent * train_configs.shape[0])//100 )\n\t\t#n_bad = min(max(self.min_points_in_model, ((100-self.top_n_percent)*train_configs.shape[0])//100), 10)\n\t\tn_bad = max(self.min_points_in_model, ((100-self.top_n_percent)*train_configs.shape[0])//100)\n\n\t\t# Refit KDE for the current budget\n\t\tidx = np.argsort(train_losses)\n\n\t\ttrain_data_good = self.impute_conditional_data(train_configs[idx[:n_good]])\n\t\ttrain_data_bad  = self.impute_conditional_data(train_configs[idx[n_good:n_good+n_bad]])\n\n\t\tif train_data_good.shape[0] <= train_data_good.shape[1]:\n\t\t\treturn\n\t\tif train_data_bad.shape[0] <= train_data_bad.shape[1]:\n\t\t\treturn\n\t\t\n\t\t#more expensive crossvalidation method\n\t\t#bw_estimation = 'cv_ls'\n\n\t\t# quick rule of thumb\n\t\tbw_estimation = 'normal_reference'\n\n\t\tbad_kde = sm.nonparametric.KDEMultivariate(data=train_data_bad,  var_type=self.kde_vartypes, bw=bw_estimation)\n\t\tgood_kde = sm.nonparametric.KDEMultivariate(data=train_data_good, var_type=self.kde_vartypes, bw=bw_estimation)\n\n\t\tbad_kde.bw = np.clip(bad_kde.bw, self.min_bandwidth,None)\n\t\tgood_kde.bw = np.clip(good_kde.bw, self.min_bandwidth,None)\n\n\t\tself.kde_models[budget] = {\n\t\t\t\t'good': good_kde,\n\t\t\t\t'bad' : bad_kde\n\t\t}\n\n\t\t# update probs for the categorical parameters for later sampling\n\t\tself.logger.debug('done building a new model for budget %f based on %i/%i split\\nBest loss for this budget:%f\\n\\n\\n\\n\\n'%(budget, n_good, n_bad, np.min(train_losses)))\n\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/optimizers/config_generators/h2bo.py",
    "content": "import logging\nfrom copy import deepcopy\nimport traceback\n\n\nimport ConfigSpace\nimport ConfigSpace.hyperparameters\nimport ConfigSpace.util\nimport numpy as np\nimport scipy.stats as sps\n\nfrom hpbandster.core.base_config_generator import base_config_generator\nfrom hpbandster.optimizers.kde.mvkde import MultivariateKDE\n\nclass H2BO(base_config_generator):\n\tdef __init__(self, configspace, min_points_in_model = None,\n\t\t\t\t top_n_percent=15, num_samples = 64, random_fraction=1/3,\n\t\t\t\t min_bandwidth=1e-3, bw_estimator='scott', fully_dimensional=True,\n\t\t\t\t**kwargs):\n\t\t\"\"\"\n\t\t\tFits for each given budget a kernel density estimator on the best N percent of the\n\t\t\tevaluated configurations on this budget.\n\n\n\t\t\tParameters:\n\t\t\t-----------\n\t\t\tconfigspace: ConfigSpace\n\t\t\t\tConfiguration space object\n\t\t\ttop_n_percent: int\n\t\t\t\tDetermines the percentile of configurations that will be used as training data\n\t\t\t\tfor the kernel density estimator, e.g if set to 10 the 10% best configurations will be considered\n\t\t\t\tfor training.\n\t\t\tmin_points_in_model: int\n\t\t\t\tminimum number of datapoints needed to fit a model\n\t\t\tnum_samples: int\n\t\t\t\tnumber of samples drawn to optimize EI via sampling\n\t\t\trandom_fraction: float\n\t\t\t\tfraction of random configurations returned\n\t\t\tbw_estimator: string\n\t\t\t\thow the bandwidths is estimated. Possible values are 'scott' and 'mlcv' for maximum likelihood estimation\n\t\t\tmin_bandwidth: float\n\t\t\t\tto keep diversity, even when all (good) samples have the same value for one of the parameters,\n\t\t\t\ta minimum bandwidth (Default: 1e-3) is used instead of zero. \n\t\t\tfully_dimensional: bool\n\t\t\t\tif true, the KDE is uses factored kernel across all dimensions, otherwise the PDF is a product of 1d PDFs\n\n\t\t\"\"\"\n\t\tsuper().__init__(**kwargs)\n\t\tself.top_n_percent=top_n_percent\n\t\tself.configspace = configspace\n\t\tself.bw_estimator = bw_estimator\n\t\tself.min_bandwidth = min_bandwidth\n\t\tself.fully_dimensional = fully_dimensional\n\n\t\tself.min_points_in_model = min_points_in_model\n\t\tif min_points_in_model is None:\n\t\t\tself.min_points_in_model = len(self.configspace.get_hyperparameters())+1\n\t\t\n\t\t#if self.min_points_in_model < len(self.configspace.get_hyperparameters())+1:\n\t\t#\tself.logger.warning('Invalid min_points_in_model value. Setting it to %i'%(len(self.configspace.get_hyperparameters())+1))\n\t\t#\tself.min_points_in_model =len(self.configspace.get_hyperparameters())+1\n\t\t\n\t\tself.num_samples = num_samples\n\t\tself.random_fraction = random_fraction\n\n\t\tself.configs = dict()\n\t\tself.losses = dict()\n\t\tself.good_config_rankings = dict()\n\t\tself.kde_models = dict()\n\n\n\tdef largest_budget_with_model(self):\n\t\tif len(self.kde_models) == 0:\n\t\t\treturn(-np.inf)\n\t\treturn(max(self.kde_models.keys()))\n\n\tdef get_config(self, budget):\n\t\t\"\"\"\n\t\t\tFunction to sample a new configuration\n\n\t\t\tThis function is called inside Hyperband to query a new configuration\n\n\n\t\t\tParameters:\n\t\t\t-----------\n\t\t\tbudget: float\n\t\t\t\tthe budget for which this configuration is scheduled\n\n\t\t\treturns: config\n\t\t\t\tshould return a valid configuration\n\n\t\t\"\"\"\n\t\tsample = None\n\t\tinfo_dict = {}\n\t\t\n\t\t# If no model is available, sample from prior\n\t\t# also mix in a fraction of random configs\n\t\tif len(self.kde_models.keys()) == 0 or np.random.rand() < self.random_fraction:\n\t\t\tsample =  self.configspace.sample_configuration()\n\t\t\tinfo_dict['model_based_pick'] = False\n\n\n\t\tif sample is None:\n\t\t\ttry:\n\t\t\t\t#import pdb; pdb.set_trace()\n\t\t\t\tsamples = self.kde_models[budget]['good'].sample(self.num_samples)\n\t\t\t\tei = self.kde_models[budget]['good'].pdf(samples)/self.kde_models[budget]['bad'].pdf(samples)\n\t\t\t\t\n\t\t\t\tbest_idx = np.argmax(ei)\n\t\t\t\tbest_vector = samples[best_idx]\n\n\t\t\t\tsample = ConfigSpace.Configuration(self.configspace, vector=best_vector)\n\n\n\t\t\t\tsample = ConfigSpace.util.deactivate_inactive_hyperparameters(\n\t\t\t\t\t\t\tconfiguration_space=self.configspace,\n\t\t\t\t\t\t\tconfiguration=sample.get_dictionary()\n\t\t\t\t\t\t\t)\n\t\t\t\tinfo_dict['model_based_pick'] = True\n\n\t\t\texcept Exception as e:\n\t\t\t\tself.logger.warning((\"=\"*50 + \"\\n\")*3 +\\\n\t\t\t\t\t\t\"Error sampling a configuration!\\n\"+\\\n\t\t\t\t\t\t\"Models for budgets: %s\"%(self.kde_models.keys()) +\\\n\t\t\t\t\t\t\"\\n here is a traceback:\" +\\\n\t\t\t\t\t\ttraceback.format_exc())\n\n\t\t\t\tfor b,l in self.losses.items():\n\t\t\t\t\tself.logger.debug(\"budget: {}\\nlosses:{}\".format(b,l))\n\t\t\t\t\n\t\t\t\tsample =  self.configspace.sample_configuration()\n\t\t\t\tinfo_dict['model_based_pick'] = False\n\t\t\t\t\n\t\treturn sample.get_dictionary(), info_dict\n\n\n\n\tdef impute_conditional_data(self, array):\n\n\t\treturn_array = np.empty_like(array)\n\n\t\tfor i in range(array.shape[0]):\n\t\t\tdatum = np.copy(array[i])\n\t\t\tnan_indices = np.argwhere(np.isnan(datum)).flatten()\n\n\t\t\twhile (np.any(nan_indices)):\n\t\t\t\tnan_idx = nan_indices[0]\n\t\t\t\tvalid_indices = np.argwhere(np.isfinite(array[:,nan_idx])).flatten()\n\n\t\t\t\tif len(valid_indices) > 0:\n\t\t\t\t\t# pick one of them at random and overwrite all NaN values\n\t\t\t\t\trow_idx = np.random.choice(valid_indices)\n\t\t\t\t\tdatum[nan_indices] = array[row_idx, nan_indices]\n\n\t\t\t\telse:\n\t\t\t\t\t# no good point in the data has this value activated, so fill it with a valid but random value\n\t\t\t\t\tt = self.vartypes[nan_idx]\n\t\t\t\t\tif t == 0:\n\t\t\t\t\t\tdatum[nan_idx] = np.random.rand()\n\t\t\t\t\telse:\n\t\t\t\t\t\tdatum[nan_idx] = np.random.randint(t)\n\n\t\t\t\tnan_indices = np.argwhere(np.isnan(datum)).flatten()\n\t\t\treturn_array[i,:] = datum\n\t\treturn(return_array)\n\n\tdef new_result(self, job, update_model=True):\n\t\t\"\"\"\n\t\t\tfunction to register finished runs\n\n\t\t\tEvery time a run has finished, this function should be called\n\t\t\tto register it with the result logger. If overwritten, make\n\t\t\tsure to call this method from the base class to ensure proper\n\t\t\tlogging.\n\n\n\t\t\tParameters:\n\t\t\t-----------\n\t\t\tjob: hpbandster.distributed.dispatcher.Job object\n\t\t\t\tcontains all the info about the run\n\t\t\"\"\"\n\n\t\tsuper().new_result(job)\n\n\t\tif job.result is None:\n\t\t\t# One could skip crashed results, but we decided \n\t\t\t# assign a +inf loss and count them as bad configurations\n\t\t\tloss = np.inf\n\t\telse:\n\t\t\tloss = job.result[\"loss\"]\n\n\t\tbudget = job.kwargs[\"budget\"]\n\n\t\tif budget not in self.configs.keys():\n\t\t\tself.configs[budget] = []\n\t\t\tself.losses[budget] = []\n\t\n\t\t\t\n\t\tif len(self.configs.keys()) == 1:\n\t\t\tmin_num_points = 6\n\t\telse:\n\t\t\tmin_num_points = self.min_points_in_model\n\n\n\t\t# skip model building if we already have a bigger model\n\t\tif max(list(self.kde_models.keys()) + [-np.inf]) > budget:\n\t\t\treturn\n\n\t\t# We want to get a numerical representation of the configuration in the original space\n\n\t\tconf = ConfigSpace.Configuration(self.configspace, job.kwargs[\"config\"]).get_array().tolist()\n\t\t\n\t\t\t\n\t\t#import pdb; pdb.set_trace()\n\t\t\n\t\t\n\t\tif conf in self.configs[budget]:\n\t\t\ti = self.configs[budget].index(conf)\n\t\t\tself.losses[budget][i].append(loss)\n\t\t\tprint('-'*50)\n\t\t\tprint('ran config %s with loss %f again'%(conf, loss))\n\t\telse:\n\t\t\tself.configs[budget].append(conf)\n\t\t\tself.losses[budget].append([loss])\n\n\t\t\n\t\t# skip model building:\n\t\t#\t\ta) if not enough points are available\n\t\t\n\t\ttmp = np.array([np.mean(r) for r in self.losses[budget]])\n\t\tif np.sum(np.isfinite(tmp)) < min_num_points:\n\t\t\tself.logger.debug(\"Only %i successful run(s) for budget %f available, need more than %s -> can't build model!\"%(np.sum(np.isfinite(tmp)), budget, min_num_points))\n\t\t\treturn\n\n\t\t#\t\tb) during warnm starting when we feed previous results in and only update once\n\t\tif not update_model:\n\t\t\treturn\n\n\n\n\t\tif budget not in self.kde_models.keys():\n\t\t\tself.kde_models[budget] = {\n\t\t\t\t'good': MultivariateKDE(self.configspace, min_bandwidth=self.min_bandwidth, fully_dimensional=self.fully_dimensional),\n\t\t\t\t'bad' : MultivariateKDE(self.configspace, min_bandwidth=self.min_bandwidth, fully_dimensional=self.fully_dimensional)\n\t\t\t}\t\n\n\n\t\t#import pdb; pdb.set_trace()\n\t\tnum_configs = len(self.losses[budget])\n\t\t\n\t\ttrain_configs = np.array(self.configs[budget][-num_configs:])\n\t\ttrain_losses =  np.array(list(map(np.mean, self.losses[budget][-num_configs:])))\n\n\t\tn_good= max(3,(num_configs * self.top_n_percent) // 100)\n\t\tn_bad = num_configs-n_good\n\n\t\t# Refit KDE for the current budget\n\t\tidx = np.argsort(train_losses)\n\n\t\ttrain_data_good = self.impute_conditional_data(train_configs[idx[:n_good]])\n\t\ttrain_data_bad  = self.impute_conditional_data(train_configs[idx[n_good:n_good+n_bad+1]])\n\n\n\t\tself.kde_models[budget]['bad'].fit(train_data_bad, bw_estimator=self.bw_estimator)\n\t\tself.kde_models[budget]['good'].fit(train_data_good, bw_estimator=self.bw_estimator)\n\t\t\n\t\t\n\t\tif self.bw_estimator in ['mlcv'] and n_good < 3:\n\t\t\tself.kde_models[budget]['good'].bandwidths[:] = self.kde_models[budget]['bad'].bandwidths\n\n\t\t# update probs for the categorical parameters for later sampling\n\t\tself.logger.debug('done building a new model for budget %f based on %i/%i split\\nBest loss for this budget:%f\\n\\n\\n\\n\\n'%(budget, n_good, n_bad, np.min(train_losses)))\n\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/optimizers/config_generators/kde.py",
    "content": "import ConfigSpace\nimport numpy as np\nimport scipy.stats as sps\nimport statsmodels.api as sm\n\nfrom hpbandster.config_generators.base import base_config_generator\n\n\nclass KernelDensityEstimator(base_config_generator):\n\t\n\tdef __init__(self, configspace, top_n_percent=10, update_after_n_points=50,\n\t\t\t\t min_points_in_model = None,\n\t\t\t\t *kwargs):\n\t\t\"\"\"\n\t\t\tFits for each given budget a kernel density estimator on the best N percent of the\n\t\t\tevaluated configurations on this budget.\n\n\n\t\t\tParameters:\n\t\t\t-----------\n\t\t\tconfigspace: ConfigSpace\n\t\t\t\tConfiguration space object\n\t\t\ttop_n_percent: int\n\t\t\t\tDetermines the percentile of configurations that will be used as training data\n\t\t\t\tfor the kernel density estimator, e.g if set to 10 the 10% best configurations will be considered\n\t\t\t\tfor training.\n\t\t\tupdate_after_n_points: int\n\t\t\t\tSpecifies after how many new observed points the kernel density will be retrained.\n\t\t\tmin_points_in_model: int\n\t\t\t\tminimum number of datapoints needed to fit a model\n\n\t\t\"\"\"\n\t\tsuper(KernelDensityEstimator, self).__init__(**kwargs)\n\n\t\tself.top_n_percent = top_n_percent\n\t\tself.update_after_n_points = update_after_n_points\n\t\tself.configspace = configspace\n\t\t\n\t\tself.min_points_in_model = min_points_in_model\n\t\tif min_points_in_model is None:\n\t\t\tself.min_points_in_model = len(self.configspace.get_hyperparameters())+1\n\n\n\t\t# TODO: so far we only consider continuous configuration spaces\n\t\tself.var_type = \"c\" * len(self.configspace.get_hyperparameters())\n\t\tself.configs = dict()\n\t\tself.losses = dict()\n\t\tself.kde_models = dict()\n\t\t\n\tdef get_config(self, budget):\n\t\t\"\"\"\n\t\t\tFunction to sample a new configuration\n\n\t\t\tThis function is called inside Hyperband to query a new configuration\n\n\n\t\t\tParameters:\n\t\t\t-----------\n\t\t\tbudget: float\n\t\t\t\tthe budget for which this configuration is scheduled\n\n\t\t\treturns: config\n\t\t\t\tshould return a valid configuration\n\n\t\t\"\"\"\n\t\t# No observations available for this budget sample from the prior\n\t\tif len(self.kde_models.keys()) == 0:\n\t\t\treturn self.configspace.sample_configuration().get_dictionary()\n\t\t# If we haven't seen anything with this budget, we sample from the kde trained on the highest budget\n\t\tif budget not in self.kde_models.keys():\n\t\t\tbudget = sorted(self.kde_models.keys())[-1]\n\t\t# TODO: This only works in continuous space and with gaussian kernels\n\t\tkde = self.kde_models[budget]\n\t\tidx = np.random.randint(0, len(self.kde_models[budget].data))\n\n\t\tvector = [sps.truncnorm.rvs(-m/bw,(1-m)/bw, loc=m, scale=bw) for m,bw in zip(self.kde_models[budget].data[idx], kde.bw)]\n\t\t\n\t\tif np.any(np.array(vector)>1) or np.any(np.array(vector)<0):\n\t\t\traise RuntimeError(\"truncated normal sampling problems!\")\n\t\t\n\t\tsample = ConfigSpace.Configuration(self.configspace, vector=vector)\n\t\treturn sample.get_dictionary(), {}\n\n\tdef new_result(self, job):\n\t\t\"\"\"\n\t\t\tfunction to register finished runs\n\n\t\t\tEvery time a run has finished, this function should be called\n\t\t\tto register it with the result logger. If overwritten, make\n\t\t\tsure to call this method from the base class to ensure proper\n\t\t\tlogging.\n\n\n\t\t\tParameters:\n\t\t\t-----------\n\t\t\tjob_id: dict\n\t\t\t\ta dictionary containing all the info about the run\n\t\t\tjob_result: dict\n\t\t\t\tcontains all the results of the job, i.e. it's a dict with\n\t\t\t\tthe keys 'loss' and 'info'\n\n\t\t\"\"\"\n\n\t\tsuper(KernelDensityEstimator, self).new_result(job)\n\t\tbudget = job.kwargs[\"budget\"]\n\t\tif budget not in self.configs.keys():\n\t\t\tself.configs[budget] = []\n\t\t\tself.losses[budget] = []\n\n\t\t# We want to get a numerical representation of the configuration in the original space\n\t\tconf = ConfigSpace.Configuration(self.configspace, job.kwargs['config'])\n\t\tself.configs[budget].append(conf.get_array())\n\t\tself.losses[budget].append(job.result['result'][\"loss\"])\n\n\n\t\t# Check if we have enough data points to fit a KDE\n\t\tif len(self.configs[budget]) % self.update_after_n_points == 0:\n\t\t\ttrain_configs, train_losses = [], []\n\t\t\n\t\t\ttrain_configs.extend(self.configs[budget])\n\t\t\ttrain_losses.extend(self.losses[budget])\n\n\t\t\tn = int(self.top_n_percent * len(train_configs) / 100.)\n\t\t\t\n\t\t\tremaining_budgets = list(self.configs.keys())\n\t\t\tremaining_budgets.remove(budget)\n\t\t\tremaining_budgets.sort(reverse=True)\n\n\n\t\t\tfor b in remaining_budgets:\n\t\t\t\tif  n >= self.min_points_in_model: break\n\t\t\t\ttrain_configs.extend(self.configs[b])\n\t\t\t\ttrain_losses.extend(self.losses[b])\n\t\t\t\tn = int(self.top_n_percent * len(train_configs) / 100.)\n\n\t\t\tif  len(train_losses) < self.min_points_in_model:\n\t\t\t\treturn\n\t\t\t\n\t\t\tn = max(self.min_points_in_model, n)\n\t\t\t\n\t\t\t# Refit KDE for the current budget\n\t\t\tidx = np.argsort(train_losses)\n\n\t\t\ttrain_data = (np.array(train_configs)[idx])[:n]\n\t\t\tself.kde_models[budget] = sm.nonparametric.KDEMultivariate(data=train_data,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t var_type=self.var_type,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t bw='cv_ls')\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/optimizers/config_generators/lcnet.py",
    "content": "import ConfigSpace\nimport numpy as np\nimport threading\n\nfrom robo.models.lcnet import LCNet, get_lc_net\n\nfrom hpbandster.core.base_config_generator import base_config_generator\n\n\ndef smoothing(lc):\n    new_lc = []\n    curr_best = np.inf\n    for i in range(len(lc)):\n        if lc[i] < curr_best:\n            curr_best = lc[i]\n        new_lc.append(curr_best)\n    return new_lc\n\n\nclass LCNetWrapper(base_config_generator):\n    def __init__(self,\n                 configspace,\n                 max_budget,\n                 n_points=2000,\n                 delta=1.0,\n                 n_candidates=1024,\n                 **kwargs):\n        \"\"\"\n        Parameters:\n        -----------\n\n        directory: string\n            where the results are logged\n        logger: hpbandster.utils.result_logger_v??\n            the logger to store the data, defaults to v1\n        overwrite: bool\n            whether or not existing data will be overwritten\n\n        \"\"\"\n\n        super(LCNetWrapper, self).__init__(**kwargs)\n\n        self.n_candidates = n_candidates\n        self.model = LCNet(sampling_method=\"sghmc\",\n                           l_rate=np.sqrt(1e-4),\n                           mdecay=.05,\n                           n_nets=100,\n                           burn_in=500,\n                           n_iters=3000,\n                           get_net=get_lc_net,\n                           precondition=True)\n\n        self.config_space = configspace\n        self.max_budget = max_budget\n        self.train = None\n        self.train_targets = None\n        self.n_points = n_points\n        self.is_trained = False\n        self.counter = 0\n        self.delta = delta\n        self.lock = threading.Lock()\n\n    def get_config(self, budget):\n        \"\"\"\n            function to sample a new configuration\n\n            This function is called inside Hyperband to query a new configuration\n\n\n            Parameters:\n            -----------\n            budget: float\n                the budget for which this configuration is scheduled\n\n            returns: config\n                should return a valid configuration\n\n        \"\"\"\n        self.lock.acquire()\n        if not self.is_trained:\n            c = self.config_space.sample_configuration().get_array()\n        else:\n            candidates = np.array([self.config_space.sample_configuration().get_array()\n                                   for _ in range(self.n_candidates)])\n\n            # We are only interested on the asymptotic value\n            projected_candidates = np.concatenate((candidates, np.ones([self.n_candidates, 1])), axis=1)\n\n            # Compute the upper confidence bound of the function at the asymptote\n            m, v = self.model.predict(projected_candidates)\n\n            ucb_values = m + self.delta * np.sqrt(v)\n            print(ucb_values)\n            # Sample a configuration based on the ucb values\n            p = np.ones(self.n_candidates) * (ucb_values / np.sum(ucb_values))\n            idx = np.random.choice(self.n_candidates, 1, False, p)\n\n            c = candidates[idx][0]\n\n        config = ConfigSpace.Configuration(self.config_space, vector=c)\n\n        self.lock.release()\n        return config.get_dictionary(), {}\n\n    def new_result(self, job):\n        \"\"\"\n            function to register finished runs\n\n            Every time a run has finished, this function should be called\n            to register it with the result logger. If overwritten, make\n            sure to call this method from the base class to ensure proper\n            logging.\n\n\n            Parameters:\n            -----------\n            job_id: dict\n                a dictionary containing all the info about the run\n            job_result: dict\n                contains all the results of the job, i.e. it's a dict with\n                the keys 'loss' and 'info'\n\n        \"\"\"\n        super().new_result(job)\n\n        conf = ConfigSpace.Configuration(self.config_space, job.kwargs['config']).get_array()\n\n        epochs = len(job.result[\"info\"][\"learning_curve\"])\n        budget = int(job.kwargs[\"budget\"])\n\n        t_idx = np.linspace(budget / epochs, budget, epochs) / self.max_budget\n        x_new = np.repeat(conf[None, :], t_idx.shape[0], axis=0)\n\n        x_new = np.concatenate((x_new, t_idx[:, None]), axis=1)\n\n        # Smooth learning curve\n        lc = smoothing(job.result[\"info\"][\"learning_curve\"])\n\n        # Flip learning curves since LC-Net wants increasing curves\n        lc_new = [1 - y for y in lc]\n\n        if self.train is None:\n            self.train = x_new\n            self.train_targets = lc_new\n        else:\n            self.train = np.append(self.train, x_new, axis=0)\n            self.train_targets = np.append(self.train_targets, lc_new, axis=0)\n\n        if self.counter >= self.n_points:\n\n            self.lock.acquire()\n            y_min = np.min(self.train_targets)\n            y_max = np.max(self.train_targets)\n\n            train_targets = (self.train_targets - y_min) / (y_max - y_min)\n\n            self.model.train(self.train, train_targets)\n            self.is_trained = True\n            self.counter = 0\n            self.lock.release()\n\n        else:\n            self.counter += epochs\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/optimizers/config_generators/random_sampling.py",
    "content": "from hpbandster.core.base_config_generator import base_config_generator\n\n\n\n\nclass RandomSampling(base_config_generator):\n    \"\"\"\n        class to implement random sampling from a ConfigSpace\n    \"\"\"\n\n    def __init__(self, configspace, **kwargs):\n        \"\"\"\n\n        Parameters:\n        -----------\n\n        configspace: ConfigSpace.ConfigurationSpace\n            The configuration space to sample from. It contains the full\n            specification of the Hyperparameters with their priors\n        **kwargs:\n            see  hyperband.config_generators.base.base_config_generator for additional arguments\n        \"\"\"\n\n        super().__init__(**kwargs)\n        self.configspace = configspace\n\n\n    def get_config(self, budget):\n        return(self.configspace.sample_configuration().get_dictionary(), {})\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/optimizers/h2bo.py",
    "content": "import os\nimport time\nimport math\nimport copy\nimport logging\n\nimport numpy as np\n\n\nimport ConfigSpace as CS\n\nfrom hpbandster.core.master import Master\nfrom hpbandster.optimizers.iterations import SuccessiveHalving\nfrom hpbandster.optimizers.config_generators.h2bo import H2BO as CG_H2BO\n\nclass H2BO(Master):\n\tdef __init__(self,\n\t\t\t\t\tconfigspace = None,\n\t\t\t\t\teta=3, min_budget=0.01, max_budget=1,\n\t\t\t\t\tmin_points_in_model = None,\ttop_n_percent=15,\n\t\t\t\t\tnum_samples = 32, random_fraction=1/3, bandwidth_factor=1,\n\t\t\t\t\tmin_bandwidth=1e-3,bw_estimator='scott',fully_dimensional=True,\n\t\t\t\t\t**kwargs\n\t\t\t\t\t):\n\t\t\"\"\"\n\n\t\tParameters\n\t\t----------\n\t\tconfigspace: ConfigSpace object\n\t\t\tvalid representation of the search space\n\t\teta : float\n\t\t\tIn each iteration, a complete run of sequential halving is executed. In it,\n\t\t\tafter evaluating each configuration on the same subset size, only a fraction of\n\t\t\t1/eta of them 'advances' to the next round.\n\t\t\tMust be greater or equal to 2.\n\t\tmin_budget : float\n\t\t\tThe smallest budget to consider. Needs to be positive!\n\t\tmax_budget : float\n\t\t\tthe largest budget to consider. Needs to be larger than min_budget!\n\t\t\tThe budgets will be geometrically distributed $\\sim \\eta^k$ for\n\t\t\t$k\\in [0, 1, ... , num_subsets - 1]$.\n\t\tmin_points_in_model: int\n\t\t\tnumber of observations to start building a KDE. Default 'None' means\n\t\t\tdim+1, the bare minimum.\n\t\ttop_n_percent: int\n\t\t\tpercentage ( between 1 and 99, default 15) of the observations that are considered good.\n\t\tnum_samples: int\n\t\t\tnumber of samples to optimize EI (default 64)\n\t\trandom_fraction: float\n\t\t\tfraction of purely random configurations that are sampled from the\n\t\t\tprior without the model.\n\t\tbw_estimator: str\n\t\t\tcontrols the way the bandwidths are estimator. For 'scott' a quick rule of thumb based\n\t\t\ton the empirical variance is used, for 'mlvc' the likelihood based on \n\t\t\tleave on out cross validation is maximized.\n\t\tmin_bandwidth: float\n\t\t\tto keep diversity, even when all (good) samples have the same value for one of the parameters,\n\t\t\ta minimum bandwidth (Default: 1e-3) is used instead of zero. \n\t\titeration_kwargs: dict\n\t\t\tkwargs to be added to the instantiation of each iteration\n\t\tfully_dimensional: bool\n\t\t\tif true, the KDE is uses factored kernel across all dimensions, otherwise the PDF is a product of 1d PDFs\n\t\t\"\"\"\n\n\n\n\t\t# TODO: Propper check for ConfigSpace object!\n\t\tif configspace is None:\n\t\t\traise ValueError(\"You have to provide a valid CofigSpace object\")\n\n\n\n\t\tcg = CG_H2BO( configspace = configspace,\n\t\t\t\t\tmin_points_in_model = min_points_in_model,\n\t\t\t\t\ttop_n_percent=top_n_percent,\n\t\t\t\t\tnum_samples = num_samples,\n\t\t\t\t\trandom_fraction=random_fraction,\n\t\t\t\t\tbw_estimator=bw_estimator,\n\t\t\t\t\tmin_bandwidth = min_bandwidth,\n\t\t\t\t\tfully_dimensional=fully_dimensional\n\t\t\t\t\t)\n\n\t\tsuper().__init__(config_generator=cg, **kwargs)\n\n\t\t# Hyperband related stuff\n\t\tself.eta = eta\n\t\tself.min_budget = min_budget\n\t\tself.max_budget = max_budget\n\t\t\n\t\t\n\t\t# precompute some HB stuff\n\t\tself.max_SH_iter = -int(np.log(min_budget/max_budget)/np.log(eta)) + 1\n\t\tself.budgets = max_budget * np.power(eta, -np.linspace(self.max_SH_iter-1, 0, self.max_SH_iter))\n\n\n\n\t\t# max total budget for one iteration\n\t\tself.budget_per_iteration = sum([b*self.eta**i for i, b in enumerate(self.budgets[::-1])])\n\t\t\n\t\tself.config.update({\n\t\t\t\t\t\t'eta'        : eta,\n\t\t\t\t\t\t'min_budget' : min_budget,\n\t\t\t\t\t\t'max_budget' : max_budget,\n\t\t\t\t\t\t'budgets'    : self.budgets,\n\t\t\t\t\t\t'max_SH_iter': self.max_SH_iter,\n\t\t\t\t\t\t'min_points_in_model' : min_points_in_model,\n\t\t\t\t\t\t'top_n_percent' : top_n_percent,\n\t\t\t\t\t\t'num_samples' : num_samples,\n\t\t\t\t\t\t'random_fraction' : random_fraction,\n\t\t\t\t\t\t'min_bandwidth': min_bandwidth,\n\t\t\t\t\t\t'bw_estimator': bw_estimator,\n\t\t\t\t\t\t'fully_dimensional': fully_dimensional,\n\t\t\t\t\t})\n\n\tdef get_next_iteration(self, iteration, iteration_kwargs={}):\n\t\t\"\"\"\n\t\t\tBO-HB uses (just like Hyperband) SuccessiveHalving for each iteration.\n\t\t\tSee Li et al. (2016) for reference.\n\t\t\t\n\t\t\tParameters:\n\t\t\t-----------\n\t\t\t\titeration: int\n\t\t\t\t\tthe index of the iteration to be instantiated\n\n\t\t\tReturns:\n\t\t\t--------\n\t\t\t\tSuccessiveHalving: the SuccessiveHalving iteration with the\n\t\t\t\t\tcorresponding number of configurations\n\t\t\"\"\"\n\t\t\n\t\tmin_budget = max( self.min_budget, self.config_generator.largest_budget_with_model())\n\t\tmax_budget = self.max_budget\n\t\teta = self.eta\n\n\t\t# precompute some HB stuff\n\t\tmax_SH_iter = -int(np.log(min_budget/max_budget)/np.log(eta)) + 1\n\t\tbudgets = max_budget * np.power(eta, -np.linspace(max_SH_iter-1, 0, max_SH_iter))\n\n\t\t\n\t\t# number of 'SH rungs'\n\t\ts = max_SH_iter - 1\n\t\t# number of configurations in that bracket\n\t\tn0 = int(np.floor((self.max_SH_iter)/(s+1)) * eta**s)\n\t\tns = np.array([max(int(n0*(eta**(-i))), 1) for i in range(s+1)])\n\t\t\n\t\twhile (ns * budgets[-s-1:]).sum() <= self.budget_per_iteration:\n\t\t    n0 += 1\n\t\t    ns = np.array([max(int(n0*(eta**(-i))), 1) for i in range(s+1)])\n\t\t\n\t\tn0 -= 1\n\t\tns = np.array([max(int(n0*(eta**(-i))), 1) for i in range(s+1)])\n\t\t\n\t\tassert (ns * budgets[-s-1:]).sum() <= self.budget_per_iteration, 'Sampled iteration exceeds the budget per iteration!'\n\t\t\n\t\treturn(SuccessiveHalving(HPB_iter=iteration, num_configs=ns, budgets=budgets, config_sampler=self.config_generator.get_config, **iteration_kwargs))\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/optimizers/hyperband.py",
    "content": "import os\nimport time\nimport math\nimport pdb\nimport copy\nimport logging\n\nimport numpy as np\n\n\nimport ConfigSpace as CS\n\nfrom hpbandster.core.master import Master\nfrom hpbandster.optimizers.iterations import SuccessiveHalving\nfrom hpbandster.optimizers.config_generators import RandomSampling\n\nclass HyperBand(Master):\n\tdef __init__(self, configspace = None,\n\t\t\t\t\teta=3, min_budget=0.01, max_budget=1,\n\t\t\t\t\t**kwargs ):\n\t\t\"\"\"\n                Hyperband implements hyperparameter optimization by sampling\n                candidates at random and \"trying\" them first, running them for\n                a specific budget. The approach is iterative, promising\n                candidates are run for a longer time, increasing the fidelity\n                for their performance. While this is a very efficient racing\n                approach, random sampling makes no use of the knowledge gained\n                about the candidates during optimization.\n\n\t\tParameters\n\t\t----------\n\t\tconfigspace: ConfigSpace object\n\t\t\tvalid representation of the search space\n\t\teta : float\n\t\t\tIn each iteration, a complete run of sequential halving is executed. In it,\n\t\t\tafter evaluating each configuration on the same subset size, only a fraction of\n\t\t\t1/eta of them 'advances' to the next round.\n\t\t\tMust be greater or equal to 2.\n\t\tmin_budget : float\n\t\t\tThe smallest budget to consider. Needs to be positive!\n\t\tmax_budget : float\n\t\t\tthe largest budget to consider. Needs to be larger than min_budget!\n\t\t\tThe budgets will be geometrically distributed $\\sim \\eta^k$ for\n\t\t\t$k\\in [0, 1, ... , num_subsets - 1]$.\n\t\t\"\"\"\n\n\n\t\t# TODO: Propper check for ConfigSpace object!\n\t\tif configspace is None:\n\t\t\traise ValueError(\"You have to provide a valid CofigSpace object\")\n\n\t\tsuper().__init__(config_generator=RandomSampling(configspace), **kwargs)\n\n\t\t# Hyperband related stuff\n\t\tself.eta = eta\n\t\tself.min_budget = min_budget\n\t\tself.max_budget = max_budget\n\n\t\t# precompute some HB stuff\n\t\tself.max_SH_iter = -int(np.log(min_budget/max_budget)/np.log(eta)) + 1\n\t\tself.budgets = max_budget * np.power(eta, -np.linspace(self.max_SH_iter-1, 0, self.max_SH_iter))\n\n\t\tself.config.update({\n\t\t\t\t\t\t'eta'        : eta,\n\t\t\t\t\t\t'min_budget' : min_budget,\n\t\t\t\t\t\t'max_budget' : max_budget,\n\t\t\t\t\t\t'budgets'    : self.budgets,\n\t\t\t\t\t\t'max_SH_iter': self.max_SH_iter,\n\t\t\t\t\t})\n\n\n\n\tdef get_next_iteration(self, iteration, iteration_kwargs={}):\n\t\t\"\"\"\n\t\tHyperband uses SuccessiveHalving for each iteration.\n\t\tSee Li et al. (2016) for reference.\n\t\t\n\t\tParameters\n\t\t----------\n\t\t\titeration: int\n\t\t\t\tthe index of the iteration to be instantiated\n\n\t\tReturns\n\t\t-------\n\t\t\tSuccessiveHalving: the SuccessiveHalving iteration with the\n\t\t\t\tcorresponding number of configurations\n\t\t\"\"\"\n\t\t\n\t\t# number of 'SH rungs'\n\t\ts = self.max_SH_iter - 1 - (iteration%self.max_SH_iter)\n\t\t# number of configurations in that bracket\n\t\tn0 = int(np.floor((self.max_SH_iter)/(s+1)) * self.eta**s)\n\t\tns = [max(int(n0*(self.eta**(-i))), 1) for i in range(s+1)]\n\n\t\treturn(SuccessiveHalving(HPB_iter=iteration, num_configs=ns, budgets=self.budgets[(-s-1):], config_sampler=self.config_generator.get_config, **iteration_kwargs))\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/optimizers/iterations/__init__.py",
    "content": "from hpbandster.optimizers.iterations.successivehalving import SuccessiveHalving\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/optimizers/iterations/successivehalving.py",
    "content": "from hpbandster.core.base_iteration import BaseIteration\nimport numpy as np\n\n\nclass SuccessiveHalving(BaseIteration):\n\n\tdef _advance_to_next_stage(self, config_ids, losses):\n\t\t\"\"\"\n\t\t\tSuccessiveHalving simply continues the best based on the current loss.\n\t\t\"\"\"\n\t\tranks = np.argsort(np.argsort(losses))\n\t\treturn(ranks < self.num_configs[self.stage])\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/optimizers/iterations/successiveresampling.py",
    "content": "import sys\n\nfrom hpbandster.iterations.base import BaseIteration\n\nimport numpy as np\n\n\nclass SuccessiveResampling(BaseIteration):\n\t\n\tdef __init__(self, *args, resampling_rate = 0.5, min_samples_advance = 1, **kwargs):\n\t\t\"\"\"\n\t\t\tIteration class to resample new configurations along side keeping the good ones\n\t\t\tin SuccessiveHalving.\n\t\t\t\n\t\t\tParameters:\n\t\t\t-----------\n\t\t\t\tresampling_rate: float\n\t\t\t\t\tfraction of configurations that are resampled at each stage\n\t\t\t\tmin_samples_advance:int\n\t\t\t\t\tnumber of samples that are guaranteed to proceed to the next\n\t\t\t\t\tstage regardless of the fraction.\n\t\t\n\t\t\"\"\"\n\t\tself.resampling_rate = resampling_rate\n\t\tself.min_samples_advance = min_samples_advance\n\n\n\tdef _advance_to_next_stage(self, config_ids, losses):\n\t\t\"\"\"\n\t\t\tSuccessiveHalving simply continues the best based on the current loss.\n\t\t\"\"\"\n\t\t\n\t\tranks = np.argsort(np.argsort(losses))\n\t\treturn(ranks < max(self.min_samples_advance, self.num_configs[self.stage] * (1-self.resampling_rate)) )\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/optimizers/kde/__init__.py",
    "content": ""
  },
  {
    "path": "src/aup/Proposer/hpbandster/optimizers/kde/kernels.py",
    "content": "import numpy as np\nimport scipy.optimize as spo\n\nimport ConfigSpace as CS\n\nfrom scipy.special import erf\n\nfrom pdb import set_trace\n\n\nclass BaseKernel(object):\n\tdef __init__(self, data=None, bandwidth=None, fix_boundary=False, num_values=None):\n\t\t\n\t\tself.data = data\n\t\tself.bw = bandwidth\n\t\tself.fix_boundary=fix_boundary\n\t\t\n\t\tif num_values is None:\n\t\t\tnum_values = len(np.unique(data))\n\t\tself.num_values = num_values\n\t\t\n\t\tif not data is None:\n\t\t\tself.weights = self._compute_weights()\t\n\n\tdef set_bandwidth(self, bandwidth):\n\t\tself.bw = bandwidth\n\t\tself.weights = self._compute_weights()\n\n\tdef _compute_weights(self):\n\t\treturn(1.)\n\n\tdef __call__(self, x_test):\n\t\traise NotImplementedError\n\n\tdef sample(self, sample_indices=None, num_samples=1):\n\t\traise NotImplementedError\n\n\nclass Gaussian(BaseKernel):\n\n\tdef _compute_weights(self):\n\t\tif not self.fix_boundary:\n\t\t\treturn(1.)\n\n\t\tweights = np.zeros(self.data.shape[0])\n\t\tfor i,d in enumerate(self.data):\n\t\t\tweights[i] = 2./(erf((1-d)/(np.sqrt(2)*self.bw)) + erf(d/(np.sqrt(2)*self.bw)))\n\t\t\n\t\treturn(weights[:,None])\n\t\t\n\tdef __call__(self, x_test):\n\t\tdistances = x_test[None,:] - self.data[:,None]\n\t\tpdfs = np.exp(-0.5* np.power(distances/self.bw, 2))/(2.5066282746310002 * self.bw)\n\t\t\n\t\t# reweigh to compensate for boundaries\n\t\tpdfs *= self.weights\n\t\t\n\t\treturn(pdfs)\n\n\tdef sample(self, sample_indices=None, num_samples=1):\n\t\t\"\"\" returns samples according to the KDE\n\t\t\n\t\t\tParameters\n\t\t\t----------\n\t\t\t\tsample_inices: list of ints\n\t\t\t\t\tIndices into the training data used as centers for the samples\n\t\t\t\t\n\t\t\t\tnum_samples: int\n\t\t\t\t\tif samples_indices is None, this specifies how many samples\n\t\t\t\t\tare drawn.\n\t\t\t\t\n\t\t\"\"\"\n\t\tif sample_indices is None:\n\t\t\tsample_indices = np.random.choice(self.data.shape[0], size=num_samples)\n\n\t\tsamples = self.data[sample_indices]\n\n\t\tdelta = np.random.normal(size=num_samples)*self.bw\n\t\tsamples += delta\n\t\toob_idx  = np.argwhere(np.logical_or(samples > 1, samples < 0)).flatten()\n\n\t\twhile len(oob_idx) > 0:\n\t\t\tsamples[oob_idx] -= delta[oob_idx]\t\t# revert move\n\t\t\tdelta[oob_idx] = np.random.normal(size=len(oob_idx))*self.bw\n\t\t\tsamples[oob_idx] += delta[oob_idx]\n\t\t\toob_idx = oob_idx[np.argwhere(np.logical_or(samples[oob_idx] > 1, samples[oob_idx] < 0))].flatten()\n\n\t\treturn(samples)\n\nclass AitchisonAitken(BaseKernel):\n\tdef __call__(self, x_test):\n\t\tdistances = np.rint(x_test[None,:] - self.data[:,None])\n\n\t\tidx = np.abs(distances) == 0\n\t\tdistances[idx] = 1 - self.bw\n\t\tdistances[~idx] = self.bw/(self.num_values-1)\n\t\t\n\t\treturn(distances)\n\n\n\tdef sample(self, sample_indices=None, num_samples=1):\n\t\t\"\"\" returns samples according to the KDE\n\t\t\n\t\t\tParameters\n\t\t\t----------\n\t\t\t\tsample_inices: list of ints\n\t\t\t\t\tIndices into the training data used as centers for the samples\n\t\t\t\t\n\t\t\t\tnum_samples: int\n\t\t\t\t\tif samples_indices is None, this specifies how many samples\n\t\t\t\t\tare drawn.\n\t\t\t\t\n\t\t\"\"\"\n\t\tif sample_indices is None:\n\t\t\tsample_indices = np.random.choice(self.data.shape[0], size=num_samples)\n\t\tsamples = self.data[sample_indices]\n\n\t\tsamples = samples.squeeze()\n\t\t\n\t\tif self.num_values == 1:\n\t\t\t# handle cases where there is only one value!\n\t\t\treturn(samples)\n\t\t\n\t\tprobs = self.bw * np.ones(self.num_values)/(self.num_values-1)\n\t\tprobs[0] = 1-self.bw\n\t\t\n\t\tdelta = np.random.choice(self.num_values, size=num_samples, p = probs)\n\t\tsamples = np.mod(samples + delta, self.num_values)\t\n\n\t\treturn(samples)\n\nclass WangRyzinOrdinal(BaseKernel):\n\t\t\n\tdef _compute_weights(self):\n\t\tif not self.fix_boundary:\n\t\t\treturn(1.)\n\t\tnp.zeros(self.data.shape[0])\n\t\tself.weights=1.\n\t\tx_test = np.arange(self.num_values)\n\t\tpdfs  = self.__call__(x_test)\n\t\tweights = 1./pdfs.sum(axis=1)[:,None]\n\t\treturn(weights)\n\t\t\n\tdef __call__(self, x_test):\n\t\tdistances = x_test[None,:] - self.data[:,None]\n\n\t\tidx = np.abs(distances) < .1 # distances smaller than that are considered zero\n\t\t\n\t\tpdfs = np.zeros_like(distances, dtype=np.float)\n\t\tpdfs[idx] = (1-self.bw)\n\t\tpdfs[~idx] = 0.5*(1-self.bw) * np.power(self.bw, np.abs(distances[~idx]))\n\t\t# reweigh to compensate for boundaries\n\t\tpdfs *= self.weights\n\n\t\treturn(pdfs)\n\n\tdef sample(self, sample_indices=None, num_samples=1):\n\t\t\"\"\" returns samples according to the KDE\n\t\t\n\t\t\tParameters\n\t\t\t----------\n\t\t\t\tsample_inices: list of ints\n\t\t\t\t\tIndices into the training data used as centers for the samples\n\t\t\t\t\n\t\t\t\tnum_samples: int\n\t\t\t\t\tif samples_indices is None, this specifies how many samples\n\t\t\t\t\tare drawn.\n\t\t\t\t\n\t\t\"\"\"\n\t\tif sample_indices is None:\n\t\t\tsample_indices = np.random.choice(self.data.shape[0], size=num_samples)\n\t\tsamples = self.data[sample_indices]\n\n\t\tpossible_steps = np.arange(-self.num_values+1,self.num_values)\n\t\tidx = (np.abs(possible_steps) < 1e-2)\n\t\t\n\t\tps = 0.5*(1-self.bw) * np.power(self.bw, np.abs(possible_steps))\n\t\tps[idx] = (1-self.bw)\n\t\tps /= ps.sum()\n\t\t\n\t\tdelta = np.zeros_like(samples)\n\t\toob_idx = np.arange(samples.shape[0])\n\n\t\twhile len(oob_idx) > 0:\n\t\t\tsamples[oob_idx] -= delta[oob_idx]\t\t# revert move\n\t\t\tdelta[oob_idx] = np.random.choice(possible_steps, size=len(oob_idx), p=ps)\n\t\t\tsamples[oob_idx] += delta[oob_idx]\n\t\t\t#import pdb; pdb.set_trace()\n\t\t\toob_idx = oob_idx[np.argwhere(np.logical_or(samples[oob_idx] > self.num_values-0.9, samples[oob_idx] < -0.1)).flatten()]\n\t\treturn(np.rint(samples))\n\nclass WangRyzinInteger(BaseKernel):\n\tdef _compute_weights(self):\n\t\tif not self.fix_boundary:\n\t\t\treturn(1.)\n\t\tweights = np.zeros(self.data.shape[0], dtype=np.float)\n\t\tx_test = np.linspace(1/(2*self.num_values), 1-(1/(2*self.num_values)), self.num_values, endpoint=True)\n\t\tself.weights = 1.\n\t\tpdfs  = self.__call__(x_test)\n\t\tweights = 1./pdfs.sum(axis=1)[:,None]\n\t\treturn(weights)\n\t\t\n\tdef __call__(self, x_test):\n\t\tdistances = (x_test[None,:] - self.data[:,None])\n\t\t\n\t\tpdfs = np.zeros_like(distances, dtype=np.float)\n\n\t\tidx = np.abs(distances) < 1/(3*self.num_values) # distances smaller than that are considered zero\n\t\tpdfs[idx] = (1-self.bw)\n\t\tpdfs[~idx] = 0.5*(1-self.bw) * np.power(self.bw, np.abs(distances[~idx])*self.num_values)\n\t\t# reweigh to compensate for boundaries\n\t\tpdfs *= self.weights\n\t\t\t\t\n\t\treturn(pdfs)\n\n\tdef sample(self, sample_indices=None, num_samples=1):\n\t\t\"\"\" returns samples according to the KDE\n\t\t\n\t\t\tParameters\n\t\t\t----------\n\t\t\t\tsample_inices: list of ints\n\t\t\t\t\tIndices into the training data used as centers for the samples\n\t\t\t\t\n\t\t\t\tnum_samples: int\n\t\t\t\t\tif samples_indices is None, this specifies how many samples\n\t\t\t\t\tare drawn.\n\t\t\t\t\n\t\t\"\"\"\n\t\tif sample_indices is None:\n\t\t\tsample_indices = np.random.choice(self.data.shape[0], size=num_samples)\n\t\tsamples = self.data[sample_indices]\n\n\t\tpossible_steps = np.arange(-self.num_values+1,self.num_values) / self.num_values\n\t\tps = 0.5*(1-self.bw) * np.power(self.bw, np.abs(possible_steps))\n\t\tps[self.num_values-1] = (1-self.bw)\n\t\tps /= ps.sum()\n\t\t\n\t\tdelta = np.zeros_like(samples)\n\t\toob_idx = np.arange(samples.shape[0])\n\n\t\twhile len(oob_idx) > 0:\n\t\t\tsamples[oob_idx] -= delta[oob_idx]\t\t# revert move\n\t\t\tdelta[oob_idx] = np.random.choice(possible_steps, size=len(oob_idx), p=ps)\n\t\t\tsamples[oob_idx] += delta[oob_idx]\n\t\t\toob_idx = oob_idx[np.argwhere(np.logical_or(samples[oob_idx] > 1-1/(3*self.num_values), samples[oob_idx] < 1/(3*self.num_values))).flatten()]\n\n\t\t\n\t\treturn(samples)\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/optimizers/kde/mvkde.py",
    "content": "import numpy as np\nimport scipy.optimize as spo\n\nimport ConfigSpace as CS\n\nfrom hpbandster.optimizers.kde.kernels import Gaussian, AitchisonAitken, WangRyzinOrdinal, WangRyzinInteger\n\n\nclass MultivariateKDE(object):\n\tdef __init__(self, configspace, fully_dimensional=True, min_bandwidth=1e-4, fix_boundary=True):\n\t\t\"\"\"\n\t\tParameters:\n\t\t-----------\n\t\t\tconfigspace: ConfigSpace.ConfigurationSpace object\n\t\t\t\tdescription of the configuration space\n\t\t\tfully_dimensional: bool\n\t\t\t\tif True, a true multivariate KDE is build, otherwise it's approximated by\n\t\t\t\tthe product of one dimensional KDEs\n\t\t\t\t\n\t\t\tmin_bandwidth: float\n\t\t\t\ta lower limit to the bandwidths which can insure 'uncertainty'\n\t\t\n\t\t\"\"\"\n\t\tself.configspace = configspace\n\t\tself.types, self.num_values = self._get_types()\n\t\tself.min_bandwidth=min_bandwidth\n\t\tself.fully_dimensional=fully_dimensional\n\t\tself.fix_boundary = fix_boundary\n\t\t\n\t\t\n\t\t# precompute bandwidth bounds\n\t\tself.bw_bounds = []\n\t\t\n\t\tmax_bw_cont=0.5\n\t\tmax_bw_cat = 0.999\n\t\t\n\t\tfor t in self.types:\n\t\t\tif t == 'C':\n\t\t\t\tself.bw_bounds.append((min_bandwidth, max_bw_cont))\n\t\t\telse:\n\t\t\t\tself.bw_bounds.append((min_bandwidth, max_bw_cat))\n\t\t\n\t\tself.bw_clip = np.array([ bwb[1] for bwb in self.bw_bounds ])\n\n\t\t# initialize other vars\n\t\tself.bandwidths = np.array([float('NaN')]*len(self.types))\n\t\tself.kernels = []\n\t\tfor t,n in zip(self.types, self.num_values):\n\t\t\t\n\t\t\tkwargs = {'num_values':n, 'fix_boundary':fix_boundary}\n\t\t\t\n\t\t\tif t == 'I':\tself.kernels.append(WangRyzinInteger(**kwargs))\n\t\t\tif t == 'C':\tself.kernels.append(Gaussian(**kwargs))\n\t\t\tif t == 'O':\tself.kernels.append(WangRyzinOrdinal(**kwargs))\n\t\t\tif t == 'U':\tself.kernels.append(AitchisonAitken(**kwargs))\t\t\t\n\t\tself.data = None\n\t\t\n\t\n\t\n\tdef fit(self, data, weights=None, bw_estimator='scott', efficient_bw_estimation=True, update_bandwidth=True):\n\t\t\"\"\"\n\t\t\tfits the KDE to the data by estimating the bandwidths and storing the data\n\t\t\t\n\t\t\tParameters\n\t\t\t----------\n\t\t\t\tdata: 2d-array, shape N x M\n\t\t\t\t\tN datapoints in an M dimensional space to which the KDE is fit\n\t\t\t\tweights: 1d array\n\t\t\t\t\tN weights, one for every data point.\n\t\t\t\t\tThey will be normalized to sum up to one\n\t\t\t\tfix_boundary_effects: bool\n\t\t\t\t\twhether to reweigh points close to the bondary no fix the pdf\n\t\t\t\tbw_estimator: str\n\t\t\t\t\tallowed values are 'scott' and 'mlcv' for Scott's rule of thumb\n\t\t\t\t\tand the maximum likelihood via cross-validation\n\t\t\t\tefficient_bw_estimation: bool\n\t\t\t\t\tif true, start bandwidth optimization from the previous value, otherwise\n\t\t\t\t\tstart from Scott's values\n\t\t\t\tupdate_bandwidths: bool\n\t\t\t\t\twhether to update the bandwidths at all\n\t\t\"\"\"\n\t\t\n\t\tif self.data is None:\n\t\t\t# overwrite some values in case this is the first fit of the KDE\n\t\t\tefficient_bw_estimation = False\n\t\t\tupdate_bandwidth=True\n\n\t\tself.data = np.asfortranarray(data)\n\t\tfor i,k in enumerate(self.kernels):\n\t\t\t\tself.kernels[i].data = self.data[:,i]\n\n\t\tself.weights = self._normalize_weights(weights)\n\n\t\tif not update_bandwidth:\n\t\t\treturn\n\t\t\n\t\tif not efficient_bw_estimation or bw_estimator == 'scott':\n\t\t\t# inspired by the the statsmodels code\n\t\t\tsigmas = np.std(self.data, ddof=1, axis=0)\n\t\t\tIQRs = np.subtract.reduce(np.percentile(self.data, [75,25], axis=0))\n\t\t\tself.bandwidths = 1.059 * np.minimum(sigmas, IQRs) * np.power(self.data.shape[0], -0.2)\n\t\t\t# crop bandwidths for categorical parameters\n\t\t\tself.bandwidths = np.clip(self.bandwidths , self.min_bandwidth, self.bw_clip)\n\t\t\t\n\t\tif bw_estimator == 'mlcv':\n\t\t\t# optimize bandwidths here\n\t\t\tdef opt_me(bw):\n\t\t\t\tself.bandwidths=bw\n\t\t\t\tself._set_kernel_bandwidths()\n\t\t\t\treturn(self.loo_negloglikelihood())\n\t\t\t\n\t\t\tres = spo.minimize(opt_me, self.bandwidths, bounds=self.bw_bounds, method='SLSQP')\n\t\t\tself.optimizer_result = res\n\t\t\tself.bandwidths[:] = res.x\n\t\tself._set_kernel_bandwidths()\n\n\tdef _set_kernel_bandwidths(self):\n\t\tfor i,b in enumerate(self.bandwidths):\n\t\t\tself.kernels[i].set_bandwidth(b)\n\n\n\tdef set_bandwidths(self, bandwidths):\n\t\tself.bandwidths[:] = bandwidths\n\t\tself._set_kernel_bandwidths()\n\n\tdef _normalize_weights(self, weights):\n\t\t\n\t\tweights = np.ones(self.data.shape[0]) if weights is None else weights\n\t\tweights /= weights.sum()\n\t\t\n\t\treturn(weights)\n\n\n\tdef _individual_pdfs(self, x_test):\n\t\n\t\tpdfs = np.zeros(shape=[x_test.shape[0], self.data.shape[0], self.data.shape[1]], dtype=np.float)\n\n\t\tfor i, k in enumerate(self.kernels):\n\t\t\tpdfs[:,:,i] = k(x_test[:,i]).T\n\t\t\n\t\treturn(pdfs)\n\n\n\tdef loo_negloglikelihood(self):\n\t\t# get all pdf values of the training data (including 'self interaction')\n\t\tpdfs = self._individual_pdfs(self.data)\n\t\t\n\t\t# get indices to remove diagonal values for LOO part :)\n\t\tindices = np.diag_indices(pdfs.shape[0])\n\n\t\t# combine values based on fully_dimensional!\n\t\tif self.fully_dimensional:\n\t\t\tpdfs[indices] = 0 # remove self interaction\t\t\n\t\t\t\n\t\t\tpdfs2 = np.sum(np.prod(pdfs, axis=-1), axis=-1)\n\t\t\tsm_return_value = -np.log(pdfs2).sum()\n\t\t\tpdfs = np.prod(pdfs, axis=-1)\n\t\t\t\n\t\t\t# take weighted average (accounts for LOO!)\n\t\t\tlhs = np.sum(pdfs*self.weights, axis=-1)/(1-self.weights)\n\t\telse:\n\t\t\t#import pdb; pdb.set_trace()\n\t\t\tpdfs[indices] = 0 # we sum first so 0 is the appropriate value\n\t\t\tpdfs *= self.weights[:,None,None]\n\t\t\t\n\t\t\tpdfs = pdfs.sum(axis=-2)/(1-self.weights[:,None])\n\t\t\tlhs = np.prod(pdfs, axis=-1)\n\t\t\t\n\t\treturn(-np.sum(self.weights*np.log(lhs)))\n\n\n\tdef pdf(self, x_test):\n\t\t\"\"\"\n\t\t\tComputes the probability density function at all x_test\n\t\t\"\"\"\n\t\tN,D = self.data.shape\n\t\tx_test = np.asfortranarray(x_test)\n\t\tx_test = x_test.reshape([-1, D])\n\t\t\n\t\tpdfs = self._individual_pdfs(x_test)\n\t\t#import pdb; pdb.set_trace()\n\t\t# combine values based on fully_dimensional!\n\t\tif self.fully_dimensional:\n\t\t\t# first the product of the individual pdfs for each point in the data across dimensions and then the average (factorized kernel)\n\t\t\tpdfs = np.sum(np.prod(pdfs, axis=-1)*self.weights[None, :], axis=-1)\n\t\telse:\n\t\t\t# first the average over the 1d pdfs and the the product over dimensions (TPE like factorization of the pdf)\n\t\t\tpdfs = np.prod(np.sum(pdfs*self.weights[None,:,None], axis=-2), axis=-1)\n\t\treturn(pdfs)\n\n\n\tdef sample(self, num_samples=1):\n\t\t\n\t\t\n\t\tsamples = np.zeros([num_samples, len(self.types)], dtype=np.float)\n\n\t\tif self.fully_dimensional:\n\t\t\tsample_indices = np.random.choice(self.data.shape[0], size=num_samples)\n\t\t\t\n\t\telse:\n\t\t\tsample_indices=None\n\n\t\tfor i,k in enumerate(self.kernels):\n\t\t\tsamples[:,i] = k.sample(sample_indices, num_samples)\n\n\n\t\treturn(samples)\n\t\t\n\n\tdef _get_types(self):\n\t\t\"\"\" extracts the needed types from the configspace for faster retrival later\n\t\t\n\t\t\ttype = 0 - numerical (continuous or integer) parameter\n\t\t\ttype >=1 - categorical parameter\n\t\t\t\n\t\t\tTODO: figure out a way to properly handle ordinal parameters\n\t\t\n\t\t\"\"\"\n\t\ttypes = []\n\t\tnum_values = []\n\t\tfor hp in self.configspace.get_hyperparameters():\n\t\t\t#print(hp)\n\t\t\tif isinstance(hp, CS.CategoricalHyperparameter):\n\t\t\t\ttypes.append('U')\n\t\t\t\tnum_values.append(len(hp.choices))\n\t\t\telif isinstance(hp, CS.UniformIntegerHyperparameter):\n\t\t\t\ttypes.append('I')\n\t\t\t\tnum_values.append((hp.upper - hp.lower + 1))\n\t\t\telif isinstance(hp, CS.UniformFloatHyperparameter):\n\t\t\t\ttypes.append('C')\n\t\t\t\tnum_values.append(np.inf)\n\t\t\telif isinstance(hp, CS.OrdinalHyperparameter):\n\t\t\t\ttypes.append('O')\n\t\t\t\tnum_values.append(len(hp.sequence))\n\t\t\telse:\n\t\t\t\traise ValueError('Unsupported Parametertype %s'%type(hp))\n\t\treturn(types, num_values)\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/optimizers/lcnet.py",
    "content": "import os\nimport time\nimport math\nimport copy\nimport logging\n\nimport numpy as np\n\nimport ConfigSpace as CS\n\nfrom hpbandster.core.master import Master\nfrom hpbandster.optimizers.iterations import SuccessiveHalving\nfrom hpbandster.optimizers.config_generators.lcnet import LCNetWrapper as CG_LCNet\n# from hpbandster.optimizers.config_generators import RandomSampling\n\n\nclass LCNet(Master):\n    def __init__(self, configspace=None,\n                 eta=3, min_budget=0.01, max_budget=1,\n                 min_points_in_model=None, top_n_percent=15,\n                 num_samples=64, random_fraction=1 / 3, bandwidth_factor=3,\n                 min_bandwidth=1e-3, n_points=200, n_candidates=1024, delta=1,\n                 **kwargs):\n        \"\"\"\n\n        Parameters\n        ----------\n        configspace: ConfigSpace object\n            valid representation of the search space\n        eta : float\n            In each iteration, a complete run of sequential halving is executed. In it,\n            after evaluating each configuration on the same subset size, only a fraction of\n            1/eta of them 'advances' to the next round.\n            Must be greater or equal to 2.\n        min_budget : float\n            The smallest budget to consider. Needs to be positive!\n        max_budget : float\n            the largest budget to consider. Needs to be larger than min_budget!\n            The budgets will be geometrically distributed $\\sim \\eta^k$ for\n            $k\\in [0, 1, ... , num_subsets - 1]$.\n        min_points_in_model: int\n            number of observations to start building a KDE. Default 'None' means\n            dim+1, the bare minimum.\n        top_n_percent: int\n            percentage ( between 1 and 99, default 15) of the observations that are considered good.\n        num_samples: int\n            number of samples to optimize EI (default 64)\n        random_fraction: float\n            fraction of purely random configurations that are sampled from the\n            prior without the model.\n        bandwidth_factor: float\n            to encourage diversity, the points proposed to optimize EI, are sampled\n            from a 'widened' KDE where the bandwidth is multiplied by this factor (default: 3)\n        min_bandwidth: float\n            to keep diversity, even when all (good) samples have the same value for one of the parameters,\n            a minimum bandwidth (Default: 1e-3) is used instead of zero.\n        iteration_kwargs: dict\n            kwargs to be added to the instantiation of each iteration\n        \"\"\"\n\n        # TODO: Propper check for ConfigSpace object!\n        if configspace is None:\n            raise ValueError(\"You have to provide a valid CofigSpace object\")\n\n        cg = CG_LCNet(configspace=configspace,\n                      max_budget=max_budget,\n                      n_points=n_points,\n                      n_candidates=n_candidates,\n                      delta=delta)\n\n        # cg = RandomSampling(configspace)\n\n        super().__init__(config_generator=cg, **kwargs)\n\n        # Hyperband related stuff\n        self.eta = eta\n        self.min_budget = min_budget\n        self.max_budget = max_budget\n\n        # precompute some HB stuff\n        self.max_SH_iter = -int(np.log(min_budget / max_budget) / np.log(eta)) + 1\n        self.budgets = max_budget * np.power(eta, -np.linspace(self.max_SH_iter - 1, 0, self.max_SH_iter))\n\n        self.config.update({\n            'eta': eta,\n            'min_budget': min_budget,\n            'max_budget': max_budget,\n            'budgets': self.budgets,\n            'max_SH_iter': self.max_SH_iter,\n            'min_points_in_model': min_points_in_model,\n            'top_n_percent': top_n_percent,\n            'num_samples': num_samples,\n            'random_fraction': random_fraction,\n            'bandwidth_factor': bandwidth_factor,\n            'min_bandwidth': min_bandwidth\n        })\n\n    def get_next_iteration(self, iteration, iteration_kwargs={}):\n        \"\"\"\n            BO-HB uses (just like Hyperband) SuccessiveHalving for each iteration.\n            See Li et al. (2016) for reference.\n\n            Parameters:\n            -----------\n                iteration: int\n                    the index of the iteration to be instantiated\n\n            Returns:\n            --------\n                SuccessiveHalving: the SuccessiveHalving iteration with the\n                    corresponding number of configurations\n        \"\"\"\n\n        # number of 'SH rungs'\n        s = self.max_SH_iter - 1 - (iteration % self.max_SH_iter)\n        # number of configurations in that bracket\n        n0 = int(np.floor((self.max_SH_iter) / (s + 1)) * self.eta ** s)\n        ns = [max(int(n0 * (self.eta ** (-i))), 1) for i in range(s + 1)]\n\n        return (SuccessiveHalving(HPB_iter=iteration, num_configs=ns, budgets=self.budgets[(-s - 1):],\n                                  config_sampler=self.config_generator.get_config, **iteration_kwargs))\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/optimizers/learning_curve_models/__init__.py",
    "content": ""
  },
  {
    "path": "src/aup/Proposer/hpbandster/optimizers/learning_curve_models/arif.py",
    "content": "import sys\nsys.path.append(\"../../\")\n\nimport numpy as np\nfrom sklearn.ensemble import RandomForestRegressor as rfr\n\nfrom hpbandster.learning_curve_models.base import LCModel as lcm_base\n\nfrom IPython import embed\n\nclass ARIF(lcm_base):\n    \"\"\"\n        An 'Auto Regressive Integrated (Random) Forest'\n    \"\"\"\n    def __init__(self, order=2, diff_order=0):\n        \"\"\"\n            Parameters:\n            -----------\n\n            order: int\n                the order of the 'autoregressiveness'\n            diff_order: int\n                the differencing order used\n                TODO: Not used so far!\n        \"\"\"\n        self.order = order\n        self.diff_order = diff_order\n\n    def apply_differencing(self, series, order=None):\n\n        if order is None: order = self.diff_order\n\n        for o in range(order):\n            series = series[1:]-series[:-1] \n        return series\n            \n\n    def invert_differencing(self, initial_part, differenced_rest, order=None):\n        \"\"\"\n            function to invert the differencing\n        \"\"\"\n\n        if order is None: order = self.diff_order\n\n        # compute the differenced values of the initial part:\n        starting_points = [ self.apply_differencing(initial_part, order=order)[-1] for order in range(self.diff_order)]\n        \n        actual_predictions = differenced_rest\n        import pdb\n        pdb.set_trace()\n        for s in starting_points[::-1]:\n            actual_predictions = np.cumsum(np.hstack([s, actual_predictions]))[1:]\n\n        return(actual_predictions)\n\n    def fit(self, losses, configs=None):\n\n        if configs is None:\n            configs = [[]]*len(times)\n\n        # convert learning curves into X and y data\n\n        X = []\n        y = []\n\n        for l,c in zip(losses, configs):\n            l = self.apply_differencing(l)\n\n            for i in range(self.order, len(l)):\n                X.append(np.hstack([l[i-self.order:i], c]))\n                y.append(l[i])\n\n        self.X = np.array(X)\n        self.y = np.array(y)\n\n\n        self.rfr = rfr().fit(self.X,self.y)\n\n        \n    def extend_partial(self, obs_losses, num_steps, config=None):\n        # TODO: add variance predictions\n        if config is None:\n            config = []\n\n        d_losses = self.apply_differencing(obs_losses)\n\n\n        for t in range(num_steps):\n            x = np.hstack([d_losses[-self.order:], config])\n            y = self.rfr.predict([x])\n            d_losses = np.hstack([d_losses, y])\n\n\n        prediction = self.invert_differencing( obs_losses, d_losses[-num_steps:])\n\n        return(prediction)\n\n\nif __name__ == \"__main__\":\n\n    sys.path.append(\"/home/sfalkner/repositories/bitbucket/learning_curve_prediction\")\n    \n\n    \n    from lc_prediction.utils import load_configs\n    \n    \n    #data = load_configs(\"/home/sfalkner/repositories/bitbucket/learning_curve_prediction/data/conv_net_cifar10\", 256+128)\n    data = load_configs(\"/home/sfalkner/repositories/bitbucket/learning_curve_prediction/data/fc_net_mnist\", 1024)\n    #data = load_configs(\"/home/sfalkner/repositories/bitbucket/learning_curve_prediction/data/lr_mnist\", 1024)\n    \n    data = (data[0], data[1][:,:40])\n    \n    import matplotlib.pyplot as plt\n    \n    #plt.plot(data[1].T)\n    #plt.show()\n    \n    \n    full_lcs =  [ lc for lc in data[1]]\n    \n    T_max = len(full_lcs[0])\n    \n    learning_curves = [ lc[:np.random.randint(lc.shape[0]-8) + 8]for lc in data[1]]\n    #learning_curves = [ lc[:4+ int(np.random.exponential(5))] for lc in data[1]]\n    times = [np.arange(1, lc.shape[0]+1) for lc in learning_curves]\n    \n    lc_model = ARIF(order=3, diff_order=2)\n    \n    \n    \n    test_order = 2\n    random_sequence = np.random.rand(5)\n    tmp = lc_model.apply_differencing(random_sequence, order=test_order)\n    \n    for i in range(test_order+1):\n        print(lc_model.apply_differencing(random_sequence, order=i))\n    reconstruction = lc_model.invert_differencing(random_sequence[:1+test_order], tmp, order=test_order)\n    \n    embed()\n    \n    \n    \n    lc_model.fit(learning_curves, data[0])\n    \n    for i in range(16):\n        pred_times = range(times[i][-1]+1, T_max)\n        #pred = lc_model.extend_partial(learning_curves[i], min(10, T_max - len(learning_curves[i])), config=data[0][i])\n        pred = lc_model.extend_partial(learning_curves[i], T_max - len(learning_curves[i]), config=data[0][i])\n        plt.plot(full_lcs[i])\n        plt.plot(range(len(learning_curves[i]), len(learning_curves[i])+ len(pred)), pred, '--')\n    plt.show()\n    \n    embed()\n    \n    \n    \n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/optimizers/learning_curve_models/base.py",
    "content": "class LCModel():\n    \"\"\"\n        base class for simple learning curve models\n    \"\"\"\n    \n    def fit(self, times, losses, configs=None):\n        \"\"\"\n            function to train the model on the observed data\n\n            Parameters:\n            -----------\n\n            times: list\n                list of numpy arrays of the timesteps for each curve\n            losses: list\n                list of numpy arrays of the loss (the actual learning curve)\n            configs: list or None\n                list of the configurations for each sample. Each element\n                has to be a numpy array. Set to None, if no configuration\n                information is available.\n        \"\"\"\n        raise NotImplementedError()\n\n\n    def predict_unseen(self, times, config):\n        \"\"\"\n            predict the loss of an unseen configuration\n\n            Parameters:\n            -----------\n\n            times: numpy array\n                times where to predict the loss\n            config: numpy array\n                the numerical representation of the config\n\n            Returns:\n            --------\n            \n            mean and variance prediction at input times for the given config\n        \"\"\"\n        raise NotImplementedError()\n\n\n    def extend_partial(self, times, obs_times, obs_losses, config=None):\n        \"\"\"\n            extends a partially observed curve\n\n            Parameters:\n            -----------\n\n            times: numpy array\n                times where to predict the loss\n            obs_times: numpy array\n                times where the curve has already been observed\n            obs_losses: numpy array\n                corresponding observed losses\n            config: numpy array\n                numerical reperesentation of the config; None if no config\n                information is available\n                \n            Returns:\n            --------\n            \n            mean and variance prediction at input times\n                \n                \n        \"\"\"\n\n    \n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/optimizers/learning_curve_models/lcnet.py",
    "content": "import numpy as np\n\nfrom hpbandster.learning_curve_models.base import LCModel\n\nfrom robo.models.lcnet import LCNet, get_lc_net\n\n\nclass LCNetWrapper(LCModel):\n    \"\"\"\n        Wrapper around LC-Net\n    \"\"\"\n\n    def __init__(self, max_num_epochs):\n        self.max_num_epochs = max_num_epochs\n        self.model = LCNet(sampling_method=\"sghmc\",\n                           l_rate=np.sqrt(1e-4),\n                           mdecay=.05,\n                           n_nets=100,\n                           burn_in=5000,\n                           n_iters=30000,\n                           get_net=get_lc_net,\n                           precondition=True)\n    \n    def fit(self, times, losses, configs=None):\n        \"\"\"\n            function to train the model on the observed data\n\n            Parameters:\n            -----------\n\n            times: list\n                list of numpy arrays of the timesteps for each curve\n            losses: list\n                list of numpy arrays of the loss (the actual learning curve)\n            configs: list or None\n                list of the configurations for each sample. Each element\n                has to be a numpy array. Set to None, if no configuration\n                information is available.\n        \"\"\"\n\n        assert np.all(times > 0) and np.all(times <= self.max_num_epochs)\n\n        train = None\n        targets = None\n\n        for i in range(len(configs)):\n\n            t_idx = times[i] / self.max_num_epochs\n\n            x = np.repeat(np.array(configs[i])[None, :], t_idx.shape[0], axis=0)\n            x = np.concatenate((x, t_idx[:, None]), axis=1)\n\n            # LCNet assumes increasing curves, if we feed in losses here we have to flip the curves\n            lc = [1 - l for l in losses[i]]\n\n            if train is None:\n                train = x\n                targets = lc\n            else:\n                train = np.concatenate((train, x), 0)\n                targets = np.concatenate((targets, lc), 0)\n\n        self.model.train(train, targets)\n\n    def predict_unseen(self, times, config):\n        \"\"\"\n            predict the loss of an unseen configuration\n\n            Parameters:\n            -----------\n\n            times: numpy array\n                times where to predict the loss\n            config: numpy array\n                the numerical representation of the config\n\n            Returns:\n            --------\n            \n            mean and variance prediction at input times for the given config\n        \"\"\"\n\n        assert np.all(times > 0) and np.all(times <= self.max_num_epochs)\n\n        x = np.array(config)[None, :]\n\n        idx = times / self.max_num_epochs\n        x = np.repeat(x, idx.shape[0], axis=0)\n\n        x = np.concatenate((x, idx[:, None]), axis=1)\n\n        mean, var = self.model.predict(x)\n        return 1 - mean, var\n\n    def extend_partial(self, times, obs_times, obs_losses, config=None):\n        \"\"\"\n            extends a partially observed curve\n\n            Parameters:\n            -----------\n\n            times: numpy array\n                times where to predict the loss\n            obs_times: numpy array\n                times where the curve has already been observed\n            obs_losses: numpy array\n                corresponding observed losses\n            config: numpy array\n                numerical reperesentation of the config; None if no config\n                information is available\n                \n            Returns:\n            --------\n            \n            mean and variance prediction at input times\n                \n                \n        \"\"\"\n        return self.predict_unseen(times, config)\n\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/optimizers/randomsearch.py",
    "content": "import os\nimport time\nimport math\nimport copy\nimport logging\n\nimport numpy as np\n\n\nimport ConfigSpace as CS\n\nfrom hpbandster.core.master import Master\nfrom hpbandster.optimizers.iterations import SuccessiveHalving\nfrom hpbandster.optimizers.config_generators.random_sampling import RandomSampling as RS\n\nclass RandomSearch(Master):\n\tdef __init__(self, configspace = None,\n\t\t\t\t\teta = 3, min_budget=1, max_budget=1,\n\t\t\t\t\t**kwargs\n\t\t\t\t\t):\n\t\t\"\"\"\n                Implements a random search across the search space for comparison.\n                Candidates are sampled at random and run on the maximum budget.\n\n\t\tParameters\n\t\t----------\n\t\tconfigspace: ConfigSpace object\n\t\t\tvalid representation of the search space\n\t\teta : float\n\t\t\tIn each iteration, a complete run of sequential halving is executed. In it,\n\t\t\tafter evaluating each configuration on the same subset size, only a fraction of\n\t\t\t1/eta of them 'advances' to the next round.\n\t\t\tMust be greater or equal to 2.\n\t\tbudget : float\n\t\t\tbudget for the evaluation\n\t\t\"\"\"\n\n\t\t# TODO: Propper check for ConfigSpace object!\n\t\tif configspace is None:\n\t\t\traise ValueError(\"You have to provide a valid ConfigSpace object\")\n\n\n\n\t\tcg = RS( configspace = configspace )\n\n\t\tsuper().__init__(config_generator=cg, **kwargs)\n\n\t\t# Hyperband related stuff\n\t\tself.eta = eta\n\t\tself.min_budget = max_budget\n\t\tself.max_budget = max_budget\n\t\t\n\t\t\n\t\t# precompute some HB stuff\n\t\tself.max_SH_iter = -int(np.log(min_budget/max_budget)/np.log(eta)) + 1\n\t\tself.budgets = max_budget * np.power(eta, -np.linspace(self.max_SH_iter-1, 0, self.max_SH_iter))\n\n\t\t# max total budget for one iteration\n\t\tself.budget_per_iteration = sum([b*self.eta**i for i, b in enumerate(self.budgets[::-1])])\n\t\t\n\t\tself.config.update({\n\t\t\t\t\t\t'eta'        : eta,\n\t\t\t\t\t\t'min_budget' : max_budget,\n\t\t\t\t\t\t'max_budget' : max_budget,\n\t\t\t\t\t})\n\n\tdef get_next_iteration(self, iteration, iteration_kwargs={}):\n\t\t\"\"\"\n\t\tReturns a SH iteration with only evaluations on the biggest budget\n\t\t\n\t\tParameters\n\t\t----------\n\t\t\titeration: int\n\t\t\t\tthe index of the iteration to be instantiated\n\n\t\tReturns\n\t\t-------\n\t\t\tSuccessiveHalving: the SuccessiveHalving iteration with the\n\t\t\t\tcorresponding number of configurations\n\t\t\"\"\"\n\t\t\n\t\t\n\t\tbudgets = [self.max_budget]\n\t\tns = [self.budget_per_iteration//self.max_budget]\n\t\t\n\t\treturn(SuccessiveHalving(HPB_iter=iteration, num_configs=ns, budgets=budgets, config_sampler=self.config_generator.get_config, **iteration_kwargs))\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/utils.py",
    "content": "import os.path\nimport json\nimport threading\n\nimport Pyro4\nimport Pyro4.naming\n\n\nfrom hpbandster.core.result import Result\nfrom hpbandster.core.base_iteration import Datum\n\n\n\ndef nic_name_to_host(nic_name):\n\t\"\"\" translates the name of a network card into a valid host name\"\"\"\n\tfrom netifaces import ifaddresses, AF_INET\n\thost = ifaddresses(nic_name).setdefault(AF_INET, [{'addr': 'No IP addr'}] )[0]['addr']\n\treturn(host)\n\n\n\ndef start_local_nameserver(host=None, port=0, nic_name=None):\n\t\"\"\"\n\t\tstarts a Pyro4 nameserver in a daemon thread\n\t\t\n\t\tParameters:\n\t\t-----------\n\t\t\thost: str\n\t\t\t\tthe hostname to use for the nameserver\n\t\t\tport: int\n\t\t\t\tthe port to be used. Default =0 means a random port\n\t\t\tnic_name: str\n\t\t\t\tname of the network interface to use\n\t\t\n\t\tReturns:\n\t\t--------\n\t\t\ttuple (str, int):\n\t\t\t\tthe host name and the used port\n\t\"\"\"\n\t\n\tif host is None:\n\t\tif nic_name is None:\n\t\t\thost = 'localhost'\n\t\telse:\n\t\t\thost = nic_name_to_host(nic_name)\n\n\turi, ns, _ = Pyro4.naming.startNS(host=host, port=port)\n\thost, port = ns.locationStr.split(':')\n\t\n\t\n\tthread = threading.Thread(target=ns.requestLoop, name='Pyro4 nameserver started by HpBandSter')\n\tthread.daemon=True\n\t\n\tthread.start()\n\treturn(host, int(port))\n\n\n\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/visualization.py",
    "content": "import copy\n\nimport numpy as np\nimport scipy.stats as sps\nimport matplotlib.pyplot as plt\nfrom matplotlib.widgets import CheckButtons,Button\n\n\n\ndef default_tool_tips(result_object, learning_curves, include_run_info=False):\n\n\ttool_tips = {}\n\tid2conf = result_object.get_id2config_mapping()\n\t\n\tfor id in learning_curves.keys():\n\t\t\n\t\tconfig = id2conf[id]['config']\n\t\tconfig_info = id2conf[id]['config_info']\n\n\t\tall_runs =  result_object.get_runs_by_id(id)\n\t\tif len(all_runs) == 0:\n\t\t\tcontinue\n\t\tlongest_run = all_runs[-1]\n\t\n\t\twhile longest_run.loss is None:\n\t\t\tall_runs.pop()\n\t\t\tif len(all_runs) == 0: break\n\t\t\tlongest_run = all_runs[-1]\n\t\t\t\n\t\tif len(all_runs) == 0: continue\n\t\t\n\t\ts = ['id: %s'%str(id), 'duration (sec): %f'%((longest_run['time_stamps']['finished'] - longest_run['time_stamps']['started']))]\n\n\t\tif not longest_run.loss is None:\n\t\t\ts += [str(k) + \"=\" +str(v) for k,v in sorted(id2conf[id]['config'].items()) ]\n\t\t\ttry:\n\t\t\t\ts += [str(k) + \"=\" +str(v) for k,v in sorted(id2conf[id]['config_info'].items()) ]\n\t\t\texcept:\n\t\t\t\tpass\n\t\t\t\n\t\t\ts += ['losses: {}'.format([r.loss for r in all_runs])]\n\t\t\tif include_run_info:\n\t\t\t\ts += ['longest run info: {}'.format(longest_run.info)]\n\t\t\t\n\t\ttool_tips[id] = \"\\n\".join(s)\n\treturn(tool_tips)\n\ndef concurrent_runs_over_time(runs, num_points = 512, show=False):\n\t\n\tdata = np.array([(r.time_stamps['started'], r.time_stamps['finished']) for r in runs])\n\tts = np.linspace(data.min(), data.max(), 512)\n\tn_workers = np.array([ ((data[:,0] <= t)*(data[:,1]>t)).sum() for t in ts])\n\n\tfig, ax = plt.subplots()\n\tax.plot(ts, n_workers)\n\tax.set_xlabel('time [s]')\n\tax.set_ylabel('number of concurent runs')\n\t\n\tif show:\n\t\tplt.show()\n\treturn(fig, ax)\n\n\ndef finished_runs_over_time(runs, show=False):\n\tbudgets = set([r.budget for r in runs])\n\t\n\ttimes = {}\n\tfor b in budgets:\n\t\ttimes[b] = [0]\n\t\n\tfor r in runs:\n\t\ttimes[r.budget].append(r.time_stamps['finished'])\n\t\n\tfor b in budgets:\n\t\ttimes[b].sort()\n\t\n\t\n\tfig, ax = plt.subplots()\n\n\tfor b in budgets:\n\t\tax.plot(times[b], np.arange(len(times[b])), label='b = %f'%b)\n\n\n\tax.set_xlabel('time [s]')\n\tax.set_ylabel('number of finished runs')\n\tax.legend()\n\t\n\tif show:\n\t\tplt.show()\n\treturn(fig,ax)\n\ndef performance_histogram_model_vs_random(runs, id2conf, show=False):\n\tmodel_based_runs = list(filter(lambda r: id2conf[r.config_id]['config_info']['model_based_pick'], runs))\n\trandom_runs = list(filter(lambda r: not id2conf[r.config_id]['config_info']['model_based_pick'], runs))\n\n\tbudgets = list(set([r.budget for r in runs]))\n\tbudgets.sort()\n\n\tlosses = {}\n\tfor b in budgets:\n\t\tlosses[b] = {'model_based': [], 'random': []}\n\n\tfor r in model_based_runs:\n\t\tif r.loss is None or not np.isfinite(r.loss):\n\t\t\tcontinue\n\t\tlosses[r.budget]['model_based'].append(r.loss)\n\n\tfor r in random_runs:\n\t\tif r.loss is None or not np.isfinite(r.loss):\n\t\t\tcontinue\n\t\tlosses[r.budget]['random'].append(r.loss)\n\n\tfig, axarr = plt.subplots(len(budgets), 2, sharey='row', sharex='row')\n\tplt.suptitle('Loss of model based configurations (left) vs. random configuration (right)')\n\n\tfor i,b in enumerate(budgets):\n\t\tmbax, rax = axarr[i]\n\t\tmbax.hist(losses[b]['model_based'], label='b = %f \\n n = %i'%(b,len(losses[b]['model_based'])))\n\t\tmbax.set_ylabel('frequency')\n\t\tmbax.legend()\n\t\t\n\t\t\n\t\t\n\t\trax.hist(losses[b]['random'],label='b = %f \\n n = %i'%(b,len(losses[b]['random'])))\n\t\trax.legend()\n\t\t\n\t\t\n\t\tif i == len(budgets)-1:\n\t\t\tmbax.set_xlabel('loss')\n\t\t\trax.set_xlabel('loss')\n\tif show:\t\t\n\t\tplt.show()\n\t\t\n\treturn(fig, axarr)\n\n\ndef correlation_across_budgets(results_object, show=False):\n\t\n\truns = results_object.get_all_runs()\n\tid2conf = results_object.get_id2config_mapping()\n\n\tbudgets = list(set([r.budget for r in runs]))\n\tbudgets.sort()\n\n\timport itertools\n\n\tloss_pairs = {}\n\tfor b in budgets[:-1]:\n\t\tloss_pairs[b] = {}\n\n\tfor b1,b2 in itertools.combinations(budgets, 2):\n\t\tloss_pairs[b1][b2]= []\n\n\tfor cid in id2conf.keys():\n\t\truns = results_object.get_runs_by_id(cid)\n\t\tif len(runs) < 2: continue\n\t\t\n\t\tfor r1,r2 in itertools.combinations(runs,2):\n\t\t\tif r1.loss is None or r2.loss is None: continue\n\t\t\tif not np.isfinite(r1.loss) or not np.isfinite(r2.loss): continue\n\t\t\tloss_pairs[float(r1.budget)][float(r2.budget)].append((r1.loss, r2.loss))\n\t\t\n\t\t\n\n\trhos = np.eye(len(budgets)-1)\n\trhos.fill(np.nan)\n\n\tps = np.eye(len(budgets)-1)\n\tps.fill(np.nan)\n\n\tfor i in range(len(budgets)-1):\n\t\tfor j in range(i+1,len(budgets)):\n\t\t\tspr = sps.spearmanr(loss_pairs[budgets[i]][budgets[j]])\n\t\t\trhos[i][j-1] = spr.correlation\n\t\t\tps[i][j-1] = spr.pvalue\n\n\n\tfig, ax = plt.subplots()\n\n\tcax = ax.matshow(rhos, vmin=-1, vmax=1)\n\tfig.colorbar(cax)\n\n\n\tax.set_yticks( range(len(budgets)-1))\n\tax.set_yticklabels(budgets[:-1],)\n\n\tax.set_xticks( range(len(budgets)-1))\n\tax.set_xticklabels(budgets[1:],)\n\t\n\tax.set_title('Rank correlation of the loss across the budgets')\n\n\tfor i in range(len(budgets)-1):\n\t\tfor j in range(i+1,len(budgets)):\n\t\t\tplt.text(j-1,i, r'$\\rho_{spearman}= %f$'%rhos[i][j-1] + '\\n' + r'$p = %f$'%ps[i][j-1] + '\\n' + r'$n = %i$'%len(loss_pairs[budgets[i]][budgets[j]]),\n\t\t\t\t\t\thorizontalalignment='center', verticalalignment='center')\n\n\tif show:\n\t\tplt.show()\n\treturn(fig,ax)\n\n\n\ndef losses_over_time(runs, get_loss_from_run_fn = lambda r: r.loss, cmap = plt.get_cmap(\"tab10\"), show=False):\n\n\tbudgets = set([r.budget for r in runs])\n\n\tdata = {}\n\tfor b in budgets:\n\t\tdata[b] = []\n\n\tfor r in runs:\n\t\tif r.loss is None:\n\t\t\tcontinue\n\t\tb = r.budget\n\t\tt = r.time_stamps['finished']\n\t\tl = get_loss_from_run_fn(r)\n\t\tdata[b].append((t,l))\n\n\tfor b in budgets:\n\t\tdata[b].sort()\n\n\n\tfig, ax = plt.subplots()\n\n\tfor i, b in enumerate(budgets):\n\t\tdata[b] = np.array(data[b])\n\t\tax.scatter(data[b][:,0], data[b][:,1], color=cmap(i), label='b=%f'%b)\n\t\t\n\t\tax.step(data[b][:,0], np.minimum.accumulate(data[b][:,1]), where='post')\n\n\tax.set_title('Losses for different budgets over time')\n\tax.set_xlabel('wall clock time [s]')\n\tax.set_ylabel('loss')\n\tax.legend()\n\tif show:\n\t\tplt.show()\n\treturn(fig,ax)\n\n\n\n\n\ndef interactive_HBS_plot(learning_curves, tool_tip_strings=None,log_y=False, log_x=False, reset_times=False, color_map='Set3', colors_floats=None, title='', show=True):\n\n\ttimes, losses, config_ids, = [], [], []\n\n\tfor k,v in learning_curves.items():\n\t\tfor l in v:\n\t\t\tif len(l) == 0: continue\n\t\t\ttmp = list(zip(*l))\n\t\t\ttry:\n\t\t\t\ttimes.append(tmp[0])\n\t\t\t\tlosses.append(tmp[1])\n\t\t\t\tconfig_ids.append(k)\n\t\t\texcept:\n\t\t\t\timport pdb; pdb.set_trace()\n\n\n\n\tnum_curves = len(times)\n\tHB_iterations = [id[0] for id in config_ids]\n\t\n\tnum_iterations = len(set(HB_iterations))\n\t\n\tcmap = plt.get_cmap(color_map)\n\t\n\n\t\n\tif reset_times:\n\t\ttimes = [np.array(ts) - ts[0] for ts in times]\n\t\n\t\n\tif colors_floats is None:\n\t\tcolor_floats = []\n\t\tfor i in range(num_curves):\n\t\t\tseed = 100*np.abs(config_ids[i][0]) + 10*config_ids[i][1] + config_ids[i][2]\n\t\t\tnp.random.seed(seed)\n\t\t\tcolor_floats.append(np.random.rand())\n\n\tfig, ax = plt.subplots()\n\t\n\tlines = [[] for i in range(num_iterations)]\n\n\titeration_labels  = list(range(num_iterations))\n\tif HB_iterations[-1] == -1:\n\t\titeration_labels[-1] = 'warmstart data'\n\t\n\t\n\n\tall_lines = []\n\t\n\tfor i in range(num_curves):\n\t\tl, = ax.plot(times[i], losses[i], color=cmap(color_floats[i]), marker='o', gid=i, picker=True)\n\t\tlines[HB_iterations[i]].append(l)\n\t\tall_lines.append(l)\n\n\tif log_y:\n\t\tplt.yscale('log')\n\n\tax.set_title(title)\n\n\thover_annotation = ax.annotate(\"BLABLA\", xy=(0,0), xytext=(20,20),textcoords=\"offset points\",\n\t\t\t\t\tbbox=dict(boxstyle=\"round\", fc=\"w\"),\n\t\t\t\t\tarrowprops=dict(arrowstyle=\"->\"))\n\thover_annotation.set_visible(False)\n\n\n\tpermanent_annotations = {}\n\n\n\tplt.subplots_adjust(left=0.2)\n\trax = plt.axes([0.05, 0.1, 0.1, 0.8])\n\n\t\n\taxnone = plt.axes([0.05, 0, 0.05, 0.1])\n\taxall = plt.axes([0.1, 0, 0.05  , 0.1])\n\t\t\n\tcheck = CheckButtons(rax, iteration_labels, [True for i in range(num_iterations)])\n\t\n\tnone_button = Button(axnone, 'None')\n\tall_button = Button(axall, 'All')\n\t\n\n\tdef change_visibility(label, value=None):\n\t\tif label == 'warmstart data':\n\t\t\tindex = -1\n\t\telse:\n\t\t\tindex = int(label)\n\t\t\n\t\tif value is None:\n\t\t\tvalue = not lines[index][0].get_visible()\n\t\t[l.set_visible(value) for l in lines[index]]\n\t\tplt.draw()\n\n\t\t\n\tdef show_all(event):\n\t\tfor label in range(num_iterations):\n\t\t\tif not lines[label][0].get_visible():\n\t\t\t\tchange_visibility(label, False)\n\t\t\t\tcheck.set_active(label)\n\n\tdef hide_all(event):\n\t\tfor label in range(num_iterations):\n\t\t\tif lines[label][0].get_visible():\n\t\t\t\tchange_visibility(label, True)\n\t\t\t\tcheck.set_active(label)\n\t\t\t\n\tcheck.on_clicked(change_visibility)\n\tnone_button.on_clicked(hide_all)\n\tall_button.on_clicked(show_all)\n\n\n\tdef update_hover_annotation(line, annotation=hover_annotation):\n\t\txdata = line.get_xdata()\n\t\tydata = line.get_ydata()\n\t\tidx = line.get_gid()        \n\t\tannotation.xy = (xdata[-1], ydata[-1])\n\n\t\tif not tool_tip_strings is None:\n\t\t\tannotation.set_text(tool_tip_strings[config_ids[idx]])\n\t\telse:\n\t\t\tannotation.set_text(str(config_ids[idx]))\n\n\t\tfig.canvas.draw_idle()\n\n\tdef onpick1(event):\n\n\t\tline = event.artist\n\n\t\tif not line in all_lines:\n\t\t\treturn\n\t\t\n\t\tgid = line.get_gid()\n\n\t\tif gid in permanent_annotations:\n\t\t\t# remove permanent annotation\n\t\t\tpermanent_annotations[gid].set_visible(False)\n\t\t\tdel permanent_annotations[gid]\n\t\t\tfig.canvas.draw_idle()\n\n\t\telse:\n\t\t\t# add a new annotation\n\n\t\t\txdata = line.get_xdata()\n\t\t\tydata = line.get_ydata()\n\t\t\tidx = line.get_gid()\n\n\t\t\tif not tool_tip_strings is None:\n\t\t\t\ttext = tool_tip_strings[config_ids[idx]]\n\t\t\telse:\n\t\t\t\ttext = str(config_ids[idx])\n\t\t\t\n\t\t\tpermanent_annotations[gid] = ax.annotate(text, copy.deepcopy((xdata[-1],ydata[-1])),\n\t\t\t\t\t\t\txytext=(20,20),textcoords=\"offset points\",\n\t\t\t\t\t\t\tbbox=dict(boxstyle=\"round\", fc=\"w\", linewidth=3),\n\t\t\t\t\t\t\tarrowprops=dict(arrowstyle=\"->\"))\n\t\t\tpermanent_annotations[gid].draggable()\n\t\t\tfig.canvas.draw_idle()            \n\n\tdef hover(event):\n\t\tvis = hover_annotation.get_visible()\n\t\tif event.inaxes == ax:\n\t\t\tactive_lines = list(filter(lambda l: l.contains(event)[0], all_lines))\n\t\t\tif len(active_lines) > 0:\n\t\t\t\thover_annotation.set_visible(True)\n\t\t\t\tupdate_hover_annotation(active_lines[0])\n\t\t\telif vis:\n\t\t\t\thover_annotation.set_visible(False)\n\t\t\t\tfig.canvas.draw_idle()\n\n\n\n\tfig.canvas.mpl_connect('pick_event', onpick1)\n\tfig.canvas.mpl_connect(\"motion_notify_event\", hover)\n\n\n\tif show:\n\t\tplt.show()\n\treturn(fig, ax, check, none_button, all_button)\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/workers/__init__.py",
    "content": "\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster/workers/hpolibbenchmark.py",
    "content": "\nimport ConfigSpace as CS\nfrom hpbandster.core.worker import Worker\n\nclass HPOlib2Worker(Worker):\n\tdef __init__(self,benchmark, configspace=None, budget_name='budget', budget_preprocessor=None, measure_test_loss=False, config_as_array=True, **kwargs):\n\t\t\n\t\tsuper().__init__(**kwargs)\n\t\tself.benchmark = benchmark\n\t\t\n\t\tif configspace is None:\n\t\t\tself.configspace = benchmark.get_configuration_space()\n\t\telse:\n\t\t\tself.configspace = configspace\n\t\t\n\t\tself.budget_name=budget_name\n\n\t\tif budget_preprocessor is None:\n\t\t\tself.budget_preprocessor = lambda b: b\n\t\telse:\n\t\t\tself.budget_preprocessor = budget_preprocessor\n\n\t\tself.config_as_array = config_as_array\n\n\t\tself.measure_test_loss = measure_test_loss\n\n\tdef compute(self, config, budget, **kwargs):\n\n\t\tif self.config_as_array:\n\t\t\tc = CS.Configuration(self.configspace, values=config)\n\t\telse:\n\t\t\tc = config\n\t\t\n\t\tkwargs = {self.budget_name: self.budget_preprocessor(budget)}\n\t\tres = self.benchmark.objective_function(c, **kwargs)\n\t\tif self.measure_test_loss:\n\t\t\tdel kwargs[self.budget_name]\n\t\t\tres['test_loss'] = self.benchmark.objective_function_test(c, **kwargs)['function_value']\n\t\treturn({\n\t\t\t'loss': res['function_value'],\n\t\t\t'info': res\n\t\t})\n"
  },
  {
    "path": "src/aup/Proposer/hpbandster_LICENSE",
    "content": "BSD 3-Clause License\n\nCopyright (c) 2017-2018, ML4AAD\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\n* Neither the name of the copyright holder nor the names of its\n  contributors may be used to endorse or promote products derived from\n  this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "src/aup/Proposer/hyperband_LICENSE",
    "content": "Licence information for https://github.com/zygmuntz/hyperband\n-------------------------------------------------------------\n\nCopyright (c) 2017, Zygmunt Zając\nAll rights reserved.\n\nThis software is licensed as follows:\n\n1. All Russian, Chinese and United States government agencies are strictly\nprohibited from using this software.\n\n2. For other entities the license is BSD-2-clause, as follows.\n\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/LICENSE.txt",
    "content": "LICENSE\n=======\n\nCopyright (c) 2013, James Bergstra\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n    * Neither the name of hyperopt nor the names of its contributors may be\n      used to endorse or promote products derived from this software without\n      specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/__init__.py",
    "content": "from __future__ import absolute_import\n\nfrom .base import STATUS_STRINGS\nfrom .base import STATUS_NEW\nfrom .base import STATUS_RUNNING\nfrom .base import STATUS_SUSPENDED\nfrom .base import STATUS_OK\nfrom .base import STATUS_FAIL\n\nfrom .base import JOB_STATES\nfrom .base import JOB_STATE_NEW\nfrom .base import JOB_STATE_RUNNING\nfrom .base import JOB_STATE_DONE\nfrom .base import JOB_STATE_ERROR\n\nfrom .base import Ctrl\nfrom .base import Trials\nfrom .base import trials_from_docs\nfrom .base import Domain\n\nfrom .fmin import fmin\nfrom .fmin import fmin_pass_expr_memo_ctrl\nfrom .fmin import FMinIter\nfrom .fmin import partial\nfrom .fmin import space_eval\n\n# -- syntactic sugar\nfrom . import hp\n\n# -- exceptions\nfrom . import exceptions\n\n# -- Import built-in optimization algorithms\nfrom . import rand\nfrom . import tpe\nfrom . import mix\nfrom . import anneal\n\n__version__ = '0.2'\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/algobase.py",
    "content": "\"\"\" Support code for new-style search algorithms.\n\"\"\"\nfrom __future__ import print_function\nfrom builtins import object\nimport copy\nfrom collections import deque\n\nimport numpy as np\n\nfrom . import pyll\nfrom .base import miscs_update_idxs_vals\n\n__authors__ = \"James Bergstra\"\n__license__ = \"3-clause BSD License\"\n__contact__ = \"github.com/hyperopt/hyperopt\"\n\n\nclass ExprEvaluator(object):\n    def __init__(self, expr,\n                 deepcopy_inputs=False,\n                 max_program_len=None,\n                 memo_gc=True):\n        \"\"\"\n        Parameters\n        ----------\n\n        expr - pyll Apply instance to be evaluated\n\n        deepcopy_inputs - deepcopy inputs to every node prior to calling that\n            node's function on those inputs. If this leads to a different\n            return value, then some function (XXX add more complete DebugMode\n            functionality) in your graph is modifying its inputs and causing\n            mis-calculation. XXX: This is not a fully-functional DebugMode\n            because if the offender happens on account of the toposort order\n            to be the last user of said input, then it will not be detected as\n            a potential problem.\n\n        max_program_len : int (default pyll.base.DEFAULT_MAX_PROGRAM_LEN)\n            If more than this many nodes are evaluated in the course of\n            evaluating `expr`, then evaluation is aborted under the assumption\n            that an infinite recursion is underway.\n\n        memo_gc : bool\n            If True, values computed for apply nodes within `expr` may be\n            cleared during computation. The bookkeeping required to do this\n            takes a bit of extra time, but usually no big deal.\n\n        \"\"\"\n        self.expr = pyll.as_apply(expr)\n        if deepcopy_inputs not in (0, 1, False, True):\n            # -- I've been calling rec_eval(expr, memo) by accident a few times\n            #    this error would have been appreciated.\n            #\n            # TODO: Good candidate for Py3K keyword-only argument\n            raise ValueError('deepcopy_inputs should be bool', deepcopy_inputs)\n        self.deepcopy_inputs = deepcopy_inputs\n        if max_program_len is None:\n            self.max_program_len = pyll.base.DEFAULT_MAX_PROGRAM_LEN\n        else:\n            self.max_program_len = max_program_len\n        self.memo_gc = memo_gc\n\n    def eval_nodes(self, memo=None):\n        if memo is None:\n            memo = {}\n        else:\n            memo = dict(memo)\n\n        # TODO: optimize dfs to not recurse past the items in memo\n        #       this is especially important for evaluating Lambdas\n        #       which cause rec_eval to recurse\n        #\n        # N.B. that Lambdas may expand the graph during the evaluation\n        #      so that this iteration may be an incomplete\n        if self.memo_gc:\n            clients = self.clients = {}\n            for aa in pyll.dfs(self.expr):\n                clients.setdefault(aa, set())\n                for ii in aa.inputs():\n                    clients.setdefault(ii, set()).add(aa)\n\n        todo = deque([self.expr])\n        while todo:\n            if len(todo) > self.max_program_len:\n                raise RuntimeError('Probably infinite loop in document')\n            node = todo.pop()\n\n            if node in memo:\n                # -- we've already computed this, move on.\n                continue\n\n            # -- different kinds of nodes are treated differently:\n            if node.name == 'switch':\n                waiting_on = self.on_switch(memo, node)\n                if waiting_on is None:\n                    continue\n            elif isinstance(node, pyll.Literal):\n                # -- constants go straight into the memo\n                self.set_in_memo(memo, node, node.obj)\n                continue\n            else:\n                # -- normal instruction-type nodes have inputs\n                waiting_on = [v for v in node.inputs() if v not in memo]\n\n            if waiting_on:\n                # -- Necessary inputs have yet to be evaluated.\n                #    push the node back in the queue, along with the\n                #    inputs it still needs\n                todo.append(node)\n                todo.extend(waiting_on)\n            else:\n                rval = self.on_node(memo, node)\n                if isinstance(rval, pyll.Apply):\n                    # -- if an instruction returns a Pyll apply node\n                    # it means evaluate that too. Lambdas do this.\n                    #\n                    # XXX: consider if it is desirable, efficient, buggy\n                    #      etc. to keep using the same memo dictionary.\n                    #      I think it is OK because by using the same\n                    #      dictionary all of the nodes are stored in the memo\n                    #      so all keys are preserved until the entire outer\n                    #      function returns\n                    evaluator = self.__class__(rval,\n                                               self.deep_copy_inputs,\n                                               self.max_program_len,\n                                               self.memo_gc)\n                    foo = evaluator(memo)\n                    self.set_in_memo(memo, node, foo)\n                else:\n                    self.set_in_memo(memo, node, rval)\n        return memo\n\n    def set_in_memo(self, memo, k, v):\n        \"\"\"Assign memo[k] = v\n\n        This is implementation optionally drops references to the arguments\n        \"clients\" required to compute apply-node `k`, which allows those\n        objects to be garbage-collected. This feature is enabled by\n        `self.memo_gc`.\n\n        \"\"\"\n        if self.memo_gc:\n            assert v is not pyll.base.GarbageCollected\n            memo[k] = v\n            for ii in k.inputs():\n                # -- if all clients of ii are already in the memo\n                #    then we can free memo[ii] by replacing it\n                #    with a dummy symbol\n                if all(iic in memo for iic in self.clients[ii]):\n                    memo[ii] = pyll.base.GarbageCollected\n        else:\n            memo[k] = v\n\n    def on_switch(self, memo, node):\n        # -- pyll.base.switch is a control-flow expression.\n        #\n        #    It's signature is\n        #       int, option0, option1, option2, ..., optionN\n        #\n        #    The semantics of a switch node are to only evaluate the option\n        #    corresponding to the value of the leading integer. (Think of\n        #    a switch block in the C language.)\n        #\n        #    This is a helper-function to self.eval_nodes.  It returns None,\n        #    or a list of apply-nodes required to evaluate the given switch\n        #    node.\n        #\n        #    When it returns None, the memo has been updated so that\n        #    memo[`node`] has been assigned the computed value for the given\n        #    switch node.\n        #\n        switch_i_var = node.pos_args[0]\n        if switch_i_var in memo:\n            switch_i = memo[switch_i_var]\n            try:\n                int(switch_i)\n            except:\n                raise TypeError('switch argument was', switch_i)\n            if switch_i != int(switch_i) or switch_i < 0:\n                raise ValueError('switch pos must be positive int',\n                                 switch_i)\n            rval_var = node.pos_args[switch_i + 1]\n            if rval_var in memo:\n                self.set_in_memo(memo, node, memo[rval_var])\n                return\n            else:\n                return [rval_var]\n        else:\n            return [switch_i_var]\n\n    def on_node(self, memo, node):\n        # -- Retrieve computed arguments of apply node\n        args = _args = [memo[v] for v in node.pos_args]\n        kwargs = _kwargs = dict([(k, memo[v])\n                                 for (k, v) in node.named_args])\n\n        if self.memo_gc:\n            # -- Ensure no computed argument has been (accidentally) freed for\n            #    garbage-collection.\n            for aa in args + list(kwargs.values()):\n                assert aa is not pyll.base.GarbageCollected\n\n        if self.deepcopy_inputs:\n            # -- I think this is supposed to be skipped if node.pure == True\n            #    because that attribute is supposed to mark the node as having\n            #    no side-effects that affect expression-evaluation.\n            #\n            #    HOWEVER That has not been tested in a while, and it's hard to\n            #    verify (with e.g. unit tests) that a node marked \"pure\" isn't\n            #    lying. So we hereby ignore the `pure` attribute and copy\n            #    everything to be on the safe side.\n            args = copy.deepcopy(_args)\n            kwargs = copy.deepcopy(_kwargs)\n\n        return pyll.scope._impls[node.name](*args, **kwargs)\n\n\nclass SuggestAlgo(ExprEvaluator):\n    \"\"\"Add constructor and call signature to match suggest()\n\n    Also, detect when on_node is handling a hyperparameter, and\n    delegate that to an `on_node_hyperparameter` method. This method\n    must be implemented by a derived class.\n    \"\"\"\n    def __init__(self, domain, trials, seed):\n        ExprEvaluator.__init__(self, domain.s_idxs_vals)\n        self.domain = domain\n        self.trials = trials\n        self.label_by_node = dict([\n            (n, l) for l, n in list(self.domain.vh.vals_by_label().items())])\n        self._seed = seed\n        self.rng = np.random.RandomState(seed)\n\n    def __call__(self, new_id):\n        self.rng.seed(self._seed + new_id)\n        memo = self.eval_nodes(\n            memo={\n                self.domain.s_new_ids: [new_id],\n                self.domain.s_rng: self.rng,\n            })\n        idxs, vals = memo[self.expr]\n        new_result = self.domain.new_result()\n        new_misc = dict(\n            tid=new_id,\n            cmd=self.domain.cmd,\n            workdir=self.domain.workdir)\n        miscs_update_idxs_vals([new_misc], idxs, vals)\n        rval = self.trials.new_trial_docs(\n            [new_id], [None], [new_result], [new_misc])\n        return rval\n\n    def on_node(self, memo, node):\n        if node in self.label_by_node:\n            label = self.label_by_node[node]\n            return self.on_node_hyperparameter(memo, node, label)\n        else:\n            return ExprEvaluator.on_node(self, memo, node)\n\n    def batch(self, new_ids):\n        new_ids = list(new_ids)\n        self.rng.seed([self._seed] + new_ids)\n        memo = self.eval_nodes(\n            memo={\n                self.domain.s_new_ids: new_ids,\n                self.domain.s_rng: self.rng,\n            })\n        idxs, vals = memo[self.expr]\n        return idxs, vals\n\n# -- flake-8 abhors blank line EOF\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/anneal.py",
    "content": "\"\"\"\nAnnealing algorithm for hyperopt\n\nAnnealing is a simple but effective variant on random search that\ntakes some advantage of a smooth response surface.\n\nThe simple (but not overly simple) code of simulated annealing makes this file\na good starting point for implementing new search algorithms.\n\n\"\"\"\nfrom __future__ import print_function\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom builtins import zip\nfrom past.utils import old_div\nimport logging\nimport numpy as np\nfrom .pyll.stochastic import (\n    categorical,\n    normal,\n    lognormal,\n    qnormal,\n    qlognormal,\n    uniform,\n    loguniform,\n    quniform,\n    qloguniform,\n)\nfrom .base import miscs_to_idxs_vals\nfrom .algobase import (\n    SuggestAlgo,\n    ExprEvaluator,\n)\n\n__authors__ = \"James Bergstra\"\n__license__ = \"3-clause BSD License\"\n__contact__ = \"github.com/hyperopt/hyperopt\"\n\nlogger = logging.getLogger(__name__)\n\n\nclass AnnealingAlgo(SuggestAlgo):\n    \"\"\"\n    This simple annealing algorithm begins by sampling from the prior,\n    but tends over time to sample from points closer and closer to the best\n    ones observed.\n\n    In addition to the value of this algorithm as a baseline optimization\n    strategy, it is a simple starting point for implementing new algorithms.\n\n    # The Annealing Algorithm\n\n    The annealing algorithm is to choose one of the previous trial points\n    as a starting point, and then to sample each hyperparameter from a similar\n    distribution to the one specified in the prior, but whose density is more\n    concentrated around the trial point we selected.\n\n    This algorithm is a simple variation on random search that leverages\n    smoothness in the response surface.  The annealing rate is not adaptive.\n\n    ## Choosing a Best Trial\n\n    The algorithm formalizes the notion of \"one of the best trials\" by\n    sampling a position from a geometric distribution whose mean is the\n    `avg_best_idx` parameter.  The \"best trial\" is the trial thus selected\n    from the set of all trials (`self.trials`).\n\n    It may happen that in the process of ancestral sampling, we may find that\n    the best trial at some ancestral point did not use the hyperparameter we\n    need to draw.  In such a case, this algorithm will draw a new \"runner up\"\n    best trial, and use that one as if it had been chosen as the best trial.\n\n    The set of best trials, and runner-up best trials obtained during the\n    process of choosing all hyperparameters is kept sorted by the validation\n    loss, and at each point where the best trial does not define a\n    required hyperparameter value, we actually go through all the list of\n    runners-up too, before giving up and adding a new runner-up trial.\n\n\n    ## Concentrating Prior Distributions\n\n    To sample a hyperparameter X within a search space, we look at\n    what kind of hyperparameter it is (what kind of distribution it's from)\n    and the previous successful values of that hyperparameter, and make\n    a new proposal for that hyperparameter independently of other\n    hyperparameters (except technically any choice nodes that led us to use\n    this current hyperparameter in the first place).\n\n    For example, if X is a uniform-distributed hyperparameters drawn from\n    `U(l, h)`, we look at the value `x` of the hyperparameter in the selected\n    trial, and draw from a new uniform density `U(x - w/2, x + w/2)`, where w\n    is related to the initial range, and the number of observations we have for\n    X so far. If W is the initial range, and T is the number of observations\n    we have, then w = W / (1 + T * shrink_coef).  If the resulting range would\n    extend either below l or above h, we shift it to fit into the original\n    bounds.\n\n    \"\"\"\n\n    def __init__(self, domain, trials, seed,\n                 avg_best_idx=2.0,\n                 shrink_coef=0.1):\n        \"\"\"\n        Parameters\n        ----------\n        avg_best_idx: float\n            Mean of geometric distribution over which trial to explore around,\n            selecting from trials sorted by score (0 is best)\n\n        shrink_coef: float\n            Rate of reduction in the size of sampling neighborhood as more\n            points have been explored.\n        \"\"\"\n        SuggestAlgo.__init__(self, domain, trials, seed=seed)\n        self.avg_best_idx = avg_best_idx\n        self.shrink_coef = shrink_coef\n        doc_by_tid = {}\n        for doc in trials.trials:\n            # get either this docs own tid or the one that it's from\n            tid = doc['tid']\n            loss = domain.loss(doc['result'], doc['spec'])\n            if loss is None:\n                # -- associate infinite loss to new/running/failed jobs\n                loss = float('inf')\n            else:\n                loss = float(loss)\n            doc_by_tid[tid] = (doc, loss)\n        self.tid_docs_losses = sorted(doc_by_tid.items())\n        self.tids = np.asarray([t for (t, (d, l)) in self.tid_docs_losses])\n        self.losses = np.asarray([l for (t, (d, l)) in self.tid_docs_losses])\n        self.tid_losses_dct = dict(list(zip(self.tids, self.losses)))\n        # node_tids: dict from hp label -> trial ids (tids) using that hyperparam\n        # node_vals: dict from hp label -> values taken by that hyperparam\n        self.node_tids, self.node_vals = miscs_to_idxs_vals(\n            [d['misc'] for (tid, (d, l)) in self.tid_docs_losses],\n            keys=list(domain.params.keys()))\n        self.best_tids = []\n\n    def shrinking(self, label):\n        \"\"\"Return fraction of original search width\n\n        Parameters\n        ----------\n        label: string\n            the name of a hyperparameter\n        \"\"\"\n        T = len(self.node_vals[label])\n        return old_div(1.0, (1.0 + T * self.shrink_coef))\n\n    def choose_ltv(self, label, size):\n        \"\"\"Returns (loss, tid, val) of best/runner-up trial\n        \"\"\"\n        tids = self.node_tids[label]\n        vals = self.node_vals[label]\n        losses = [self.tid_losses_dct[tid] for tid in tids]\n\n        if size == 1:\n            # -- try to return the value corresponding to one of the\n            #    trials that was previously chosen (non-independence\n            #    of hyperparameter values)\n            # This doesn't really make sense if we're sampling a lot of\n            # points at a time.\n            tid_set = set(tids)\n            for tid in self.best_tids:\n                if tid in tid_set:\n                    idx = tids.index(tid)\n                    rval = losses[idx], tid, vals[idx]\n                    return rval\n\n        # -- choose a new good seed point\n        good_idx = self.rng.geometric(old_div(1.0, self.avg_best_idx), size=size) - 1\n        good_idx = np.clip(good_idx, 0, len(tids) - 1).astype('int32')\n\n        picks = np.argsort(losses)[good_idx]\n        picks_loss = np.asarray(losses)[picks]\n        picks_tids = np.asarray(tids)[picks]\n        picks_vals = np.asarray(vals)[picks]\n\n        if size == 1:\n            self.best_tids.append(int(picks_tids))\n        return picks_loss, picks_tids, picks_vals\n\n    def on_node_hyperparameter(self, memo, node, label):\n        \"\"\"\n        Return a new value for one hyperparameter.\n\n        Parameters:\n        -----------\n\n        memo - a partially-filled dictionary of node -> list-of-values\n               for the nodes in a vectorized representation of the\n               original search space.\n\n        node - an Apply instance in the vectorized search space,\n               which corresponds to a hyperparameter\n\n        label - a string, the name of the hyperparameter\n\n\n        Returns: a list with one value in it: the suggested value for this\n        hyperparameter\n\n\n        Notes\n        -----\n\n        This function works by delegating to self.hp_HPTYPE functions to\n        handle each of the kinds of hyperparameters in hyperopt.pyll_utils.\n\n        Other search algorithms can implement this function without\n        delegating based on the hyperparameter type, but it's a pattern\n        I've used a few times so I show it here.\n\n        \"\"\"\n        n_observations = len(self.node_vals[label])\n        if n_observations > 0:\n            # -- Pick a previous trial on which to base the new sample\n            size = memo[node.arg['size']]\n            loss, tid, val = self.choose_ltv(label, size=size)\n            try:\n                handler = getattr(self, 'hp_%s' % node.name)\n            except AttributeError:\n                raise NotImplementedError('Annealing', node.name)\n            return handler(memo, node, label, tid, val)\n        else:\n            # -- Draw the new sample from the prior\n            return ExprEvaluator.on_node(self, memo, node)\n\n    def hp_uniform(self, memo, node, label, tid, val,\n                   log_scale=False,\n                   pass_q=False,\n                   uniform_like=uniform):\n        \"\"\"\n        Return a new value for a uniform hyperparameter.\n\n        Parameters:\n        -----------\n\n        memo - (see on_node_hyperparameter)\n\n        node - (see on_node_hyperparameter)\n\n        label - (see on_node_hyperparameter)\n\n        tid - trial-identifier of the model trial on which to base a new sample\n\n        val - the value of this hyperparameter on the model trial\n\n        Returns: a list with one value in it: the suggested value for this\n        hyperparameter\n        \"\"\"\n        if log_scale:\n            midpt = np.log(val)\n        else:\n            midpt = val\n        high = memo[node.arg['high']]\n        low = memo[node.arg['low']]\n        width = (high - low) * self.shrinking(label)\n        half = .5 * width\n        min_midpt = low + half\n        max_midpt = high - half\n        clipped_midpt = np.clip(midpt, min_midpt, max_midpt)\n\n        # if pass_q:\n        #    assert low <= val <= high, (low, val, high)\n        # else:\n        #    val = min(high, max(val, low))\n        # new_high = min(high, val + width / 2)\n        # if new_high == high:\n        #    new_low = new_high - width\n        # else:\n        #    new_low = max(low, val - width / 2)\n        #    if new_low == low:\n        #        new_high = min(high, new_low + width)\n        # assert low <= new_low <= new_high <= high\n        if pass_q:\n            return uniform_like(\n                low=clipped_midpt - half,\n                high=clipped_midpt + half,\n                rng=self.rng,\n                q=memo[node.arg['q']],\n                size=memo[node.arg['size']])\n        else:\n            return uniform_like(\n                low=clipped_midpt - half,\n                high=clipped_midpt + half,\n                rng=self.rng,\n                size=memo[node.arg['size']])\n\n    def hp_quniform(self, *args, **kwargs):\n        return self.hp_uniform(\n            pass_q=True,\n            uniform_like=quniform,\n            *args,\n            **kwargs)\n\n    def hp_loguniform(self, *args, **kwargs):\n        return self.hp_uniform(\n            log_scale=True,\n            pass_q=False,\n            uniform_like=loguniform,\n            *args,\n            **kwargs)\n\n    def hp_qloguniform(self, *args, **kwargs):\n        return self.hp_uniform(\n            log_scale=True,\n            pass_q=True,\n            uniform_like=qloguniform,\n            *args,\n            **kwargs)\n\n    def hp_randint(self, memo, node, label, tid, val):\n        \"\"\"\n        Parameters: See `hp_uniform`\n        \"\"\"\n        upper = memo[node.arg['upper']]\n        val1 = np.atleast_1d(val)\n        if val1.size:\n            counts = old_div(np.bincount(val1, minlength=upper), float(val1.size))\n        else:\n            counts = np.zeros(upper)\n            prior = 1.0\n        prior = self.shrinking(label)\n        p = (1 - prior) * counts + prior * (old_div(1.0, upper))\n        rval = categorical(p=p, upper=upper, rng=self.rng,\n                           size=memo[node.arg['size']])\n        return rval\n\n    def hp_categorical(self, memo, node, label, tid, val):\n        \"\"\"\n        Parameters: See `hp_uniform`\n        \"\"\"\n        size = memo[node.arg['size']]\n        if size == 0:\n            return []\n        val1 = np.atleast_1d(val)\n        p = p_orig = np.asarray(memo[node.arg['p']])\n        if p.ndim == 2:\n            if len(p) not in (1, len(val1)):\n                print(node)\n                print(p)\n                print(np.asarray(p).shape)\n            assert len(p) in (1, len(val1))\n        else:\n            assert p.ndim == 1\n            p = p[np.newaxis, :]\n        upper = memo[node.arg['upper']]\n        if val1.size:\n            counts = old_div(np.bincount(val1, minlength=upper), float(val1.size))\n            prior = self.shrinking(label)\n        else:\n            counts = np.zeros(upper)\n            prior = 1.0\n        new_p = (1 - prior) * counts + prior * p\n        assert new_p.ndim == 2\n        rval = categorical(p=new_p, rng=self.rng, size=size)\n        if p_orig.ndim == 1:\n            assert len(rval) == 1\n            return rval[0]\n        else:\n            return rval\n\n    def hp_normal(self, memo, node, label, tid, val):\n        \"\"\"\n        Parameters: See `hp_uniform`\n        \"\"\"\n        return normal(\n            mu=val,\n            sigma=memo[node.arg['sigma']] * self.shrinking(label),\n            rng=self.rng,\n            size=memo[node.arg['size']])\n\n    def hp_lognormal(self, memo, node, label, tid, val):\n        \"\"\"\n        Parameters: See `hp_uniform`\n        \"\"\"\n        return lognormal(\n            mu=np.log(val),\n            sigma=memo[node.arg['sigma']] * self.shrinking(label),\n            rng=self.rng,\n            size=memo[node.arg['size']])\n\n    def hp_qlognormal(self, memo, node, label, tid, val):\n        \"\"\"\n        Parameters: See `hp_uniform`\n        \"\"\"\n        return qlognormal(\n            # -- prevent log(0) without messing up algo\n            mu=np.log(1e-16 + val),\n            sigma=memo[node.arg['sigma']] * self.shrinking(label),\n            q=memo[node.arg['q']],\n            rng=self.rng,\n            size=memo[node.arg['size']])\n\n    def hp_qnormal(self, memo, node, label, tid, val):\n        \"\"\"\n        Parameters: See `hp_uniform`\n        \"\"\"\n        return qnormal(\n            mu=val,\n            sigma=memo[node.arg['sigma']] * self.shrinking(label),\n            q=memo[node.arg['q']],\n            rng=self.rng,\n            size=memo[node.arg['size']])\n\n\ndef suggest(new_ids, domain, trials, seed, *args, **kwargs):\n    new_id, = new_ids\n    return AnnealingAlgo(domain, trials, seed, *args, **kwargs)(new_id)\n\n\ndef suggest_batch(new_ids, domain, trials, seed, *args, **kwargs):\n    return AnnealingAlgo(domain, trials, seed, *args, **kwargs).batch(new_ids)\n\n# -- flake-8 abhors blank line EOF\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/base.py",
    "content": "\"\"\"Base classes / Design\n\nThe design is that there are three components fitting together in this project:\n\n- Trials - a list of documents including at least sub-documents:\n    ['spec'] - the specification of hyper-parameters for a job\n    ['result'] - the result of Domain.evaluate(). Typically includes:\n        ['status'] - one of the STATUS_STRINGS\n        ['loss'] - real-valued scalar that hyperopt is trying to minimize\n    ['idxs'] - compressed representation of spec\n    ['vals'] - compressed representation of spec\n    ['tid'] - trial id (unique in Trials list)\n\n- Domain - specifies a search problem\n\n- Ctrl - a channel for two-way communication\n         between an Experiment and Domain.evaluate.\n         Experiment subclasses may subclass Ctrl to match. For example, if an\n         experiment is going to dispatch jobs in other threads, then an\n         appropriate thread-aware Ctrl subclass should go with it.\n\n\"\"\"\nfrom __future__ import print_function\nfrom __future__ import absolute_import\nfrom builtins import str\nfrom builtins import map\nfrom builtins import zip\nfrom builtins import range\nfrom past.builtins import basestring\nfrom builtins import object\nimport logging\nimport datetime\nimport sys\n\nimport numpy as np\n\ntry:\n    import bson  # -- comes with pymongo\n    from bson.objectid import ObjectId\n    have_bson = True\nexcept ImportError:\n    have_bson = False\n\nfrom . import pyll\nfrom .pyll.stochastic import recursive_set_rng_kwarg\n\nfrom .exceptions import (\n    DuplicateLabel, InvalidTrial, InvalidResultStatus, InvalidLoss)\nfrom .utils import pmin_sampled\nfrom .utils import use_obj_for_literal_in_memo\nfrom .vectorize import VectorizeHelper\n\n__authors__ = \"James Bergstra\"\n__license__ = \"3-clause BSD License\"\n__contact__ = \"github.com/hyperopt/hyperopt\"\n\nlogger = logging.getLogger(__name__)\n\n\n# -- STATUS values\n#    An eval_fn returning a dictionary must have a status key with\n#    one of these values. They are used by optimization routines\n#    and plotting functions.\n\nSTATUS_NEW = 'new'\nSTATUS_RUNNING = 'running'\nSTATUS_SUSPENDED = 'suspended'\nSTATUS_OK = 'ok'\nSTATUS_FAIL = 'fail'\nSTATUS_STRINGS = (\n    'new',        # computations have not started\n    'running',    # computations are in prog\n    'suspended',  # computations have been suspended, job is not finished\n    'ok',         # computations are finished, terminated normally\n    'fail')       # computations are finished, terminated with error\n#   - result['status_fail'] should contain more info\n\n\n# -- JOBSTATE values\n# These are used internally by the scheduler.\n# These values are used to communicate between an Experiment\n# and a worker process. Consider moving them to mongoexp.\n\n# -- named constants for job execution pipeline\nJOB_STATE_NEW = 0\nJOB_STATE_RUNNING = 1\nJOB_STATE_DONE = 2\nJOB_STATE_ERROR = 3\nJOB_STATES = [\n    JOB_STATE_NEW,\n    JOB_STATE_RUNNING,\n    JOB_STATE_DONE,\n    JOB_STATE_ERROR]\n\n\nTRIAL_KEYS = [\n    'tid',\n    'spec',\n    'result',\n    'misc',\n    'state',\n    'owner',\n    'book_time',\n    'refresh_time',\n    'exp_key']\n\nTRIAL_MISC_KEYS = [\n    'tid',\n    'cmd',\n    'idxs',\n    'vals']\n\n\ndef _all_same(*args):\n    return 1 == len(set(args))\n\n\ndef SONify(arg, memo=None):\n    if not have_bson:\n        return arg\n    add_arg_to_raise = True\n    try:\n        if memo is None:\n            memo = {}\n        if id(arg) in memo:\n            rval = memo[id(arg)]\n        if isinstance(arg, ObjectId):\n            rval = arg\n        elif isinstance(arg, datetime.datetime):\n            rval = arg\n        elif isinstance(arg, np.floating):\n            rval = float(arg)\n        elif isinstance(arg, np.integer):\n            rval = int(arg)\n        elif isinstance(arg, (list, tuple)):\n            rval = type(arg)([SONify(ai, memo) for ai in arg])\n        elif isinstance(arg, dict):\n            rval = dict(\n                [(SONify(k, memo), SONify(v, memo)) for k, v in list(arg.items())])\n        elif isinstance(arg, (basestring, float, int, int, type(None))):\n            rval = arg\n        elif isinstance(arg, np.ndarray):\n            if arg.ndim == 0:\n                rval = SONify(arg.sum())\n            else:\n                rval = list(map(SONify, arg))  # N.B. memo None\n        # -- put this after ndarray because ndarray not hashable\n        elif arg in (True, False):\n            rval = int(arg)\n        else:\n            add_arg_to_raise = False\n            raise TypeError('SONify', arg)\n    except Exception as e:\n        if add_arg_to_raise:\n            e.args = e.args + (arg,)\n        raise\n    memo[id(rval)] = rval\n    return rval\n\n\ndef miscs_update_idxs_vals(miscs, idxs, vals,\n                           assert_all_vals_used=True,\n                           idxs_map=None):\n    \"\"\"\n    Unpack the idxs-vals format into the list of dictionaries that is\n    `misc`.\n\n    idxs_map: a dictionary of id->id mappings so that the misc['idxs'] can\n        contain different numbers than the idxs argument. XXX CLARIFY\n    \"\"\"\n    if idxs_map is None:\n        idxs_map = {}\n\n    assert set(idxs.keys()) == set(vals.keys())\n\n    misc_by_id = dict([(m['tid'], m) for m in miscs])\n    for m in miscs:\n        m['idxs'] = dict([(key, []) for key in idxs])\n        m['vals'] = dict([(key, []) for key in idxs])\n\n    for key in idxs:\n        assert len(idxs[key]) == len(vals[key])\n        for tid, val in zip(idxs[key], vals[key]):\n            tid = idxs_map.get(tid, tid)\n            if assert_all_vals_used or tid in misc_by_id:\n                misc_by_id[tid]['idxs'][key] = [tid]\n                misc_by_id[tid]['vals'][key] = [val]\n\n    return miscs\n\n\ndef miscs_to_idxs_vals(miscs, keys=None):\n    if keys is None:\n        if len(miscs) == 0:\n            raise ValueError('cannot infer keys from empty miscs')\n        keys = list(miscs[0]['idxs'].keys())\n    idxs = dict([(k, []) for k in keys])\n    vals = dict([(k, []) for k in keys])\n    for misc in miscs:\n        for node_id in idxs:\n            t_idxs = misc['idxs'][node_id]\n            t_vals = misc['vals'][node_id]\n            assert len(t_idxs) == len(t_vals)\n            assert t_idxs == [] or t_idxs == [misc['tid']]\n            idxs[node_id].extend(t_idxs)\n            vals[node_id].extend(t_vals)\n    return idxs, vals\n\n\ndef spec_from_misc(misc):\n    spec = {}\n    for k, v in list(misc['vals'].items()):\n        if len(v) == 0:\n            pass\n        elif len(v) == 1:\n            spec[k] = v[0]\n        else:\n            raise NotImplementedError('multiple values', (k, v))\n    return spec\n\n\nclass Trials(object):\n    \"\"\"Database interface supporting data-driven model-based optimization.\n\n    The model-based optimization algorithms used by hyperopt's fmin function\n    work by analyzing samples of a response surface--a history of what points\n    in the search space were tested, and what was discovered by those tests.\n    A Trials instance stores that history and makes it available to fmin and\n    to the various optimization algorithms.\n\n    This class (`base.Trials`) is a pure-Python implementation of the database\n    in terms of lists of dictionaries.  Subclass `mongoexp.MongoTrials`\n    implements the same API in terms of a mongodb database running in another\n    process. Other subclasses may be implemented in future.\n\n    The elements of `self.trials` represent all of the completed, in-progress,\n    and scheduled evaluation points from an e.g. `fmin` call.\n\n    Each element of `self.trials` is a dictionary with *at least* the following\n    keys:\n\n    * **tid**: a unique trial identification object within this Trials instance\n      usually it is an integer, but it isn't obvious that other sortable,\n      hashable objects couldn't be used at some point.\n\n    * **result**: a sub-dictionary representing what was returned by the fmin\n      evaluation function. This sub-dictionary has a key 'status' with a value\n      from `STATUS_STRINGS` and the status is `STATUS_OK`, then there should be\n      a 'loss' key as well with a floating-point value.  Other special keys in\n      this sub-dictionary may be used by optimization algorithms  (see them\n      for details). Other keys in this sub-dictionary can be used by the\n      evaluation function to store miscelaneous diagnostics and debugging\n      information.\n\n    * **misc**: despite generic name, this is currently where the trial's\n      hyperparameter assigments are stored. This sub-dictionary has two\n      elements: `'idxs'` and `'vals'`. The `vals` dictionary is\n      a sub-sub-dictionary mapping each hyperparameter to either `[]` (if the\n      hyperparameter is inactive in this trial), or `[<val>]` (if the\n      hyperparameter is active). The `idxs` dictionary is technically\n      redundant -- it is the same as `vals` but it maps hyperparameter names\n      to either `[]` or `[<tid>]`.\n\n    \"\"\"\n\n    asynchronous = False\n\n    def __init__(self, exp_key=None, refresh=True):\n        self._ids = set()\n        self._dynamic_trials = []\n        self._exp_key = exp_key\n        self.attachments = {}\n        if refresh:\n            self.refresh()\n\n    def view(self, exp_key=None, refresh=True):\n        rval = object.__new__(self.__class__)\n        rval._exp_key = exp_key\n        rval._ids = self._ids\n        rval._dynamic_trials = self._dynamic_trials\n        rval.attachments = self.attachments\n        if refresh:\n            rval.refresh()\n        return rval\n\n    def aname(self, trial, name):\n        return 'ATTACH::%s::%s' % (trial['tid'], name)\n\n    def trial_attachments(self, trial):\n        \"\"\"\n        Support syntax for load:  self.trial_attachments(doc)[name]\n        # -- does this work syntactically?\n        #    (In any event a 2-stage store will work)\n        Support syntax for store: self.trial_attachments(doc)[name] = value\n        \"\"\"\n\n        # don't offer more here than in MongoCtrl\n        class Attachments(object):\n\n            def __contains__(_self, name):\n                return self.aname(trial, name) in self.attachments\n\n            def __getitem__(_self, name):\n                return self.attachments[self.aname(trial, name)]\n\n            def __setitem__(_self, name, value):\n                self.attachments[self.aname(trial, name)] = value\n\n            def __delitem__(_self, name):\n                del self.attachments[self.aname(trial, name)]\n\n        return Attachments()\n\n    def __iter__(self):\n        try:\n            return iter(self._trials)\n        except AttributeError:\n            print(\"You have to refresh before you iterate\", file=sys.stderr)\n            raise\n\n    def __len__(self):\n        try:\n            return len(self._trials)\n        except AttributeError:\n            print(\"You have to refresh before you compute len\", file=sys.stderr)\n            raise\n\n    def __getitem__(self, item):\n        # -- how to make it obvious whether indexing is by _trials position\n        #    or by tid if both are integers?\n        raise NotImplementedError('')\n\n    def refresh(self):\n        # In MongoTrials, this method fetches from database\n        if self._exp_key is None:\n            self._trials = [\n                tt for tt in self._dynamic_trials\n                if tt['state'] != JOB_STATE_ERROR]\n        else:\n            self._trials = [tt\n                            for tt in self._dynamic_trials\n                            if (tt['state'] != JOB_STATE_ERROR and\n                                tt['exp_key'] == self._exp_key)]\n        self._ids.update([tt['tid'] for tt in self._trials])\n\n    @property\n    def trials(self):\n        return self._trials\n\n    @property\n    def tids(self):\n        return [tt['tid'] for tt in self._trials]\n\n    @property\n    def specs(self):\n        return [tt['spec'] for tt in self._trials]\n\n    @property\n    def results(self):\n        return [tt['result'] for tt in self._trials]\n\n    @property\n    def miscs(self):\n        return [tt['misc'] for tt in self._trials]\n\n    @property\n    def idxs_vals(self):\n        return miscs_to_idxs_vals(self.miscs)\n\n    @property\n    def idxs(self):\n        return self.idxs_vals[0]\n\n    @property\n    def vals(self):\n        return self.idxs_vals[1]\n\n    def assert_valid_trial(self, trial):\n        if not (hasattr(trial, 'keys') and hasattr(trial, 'values')):\n            raise InvalidTrial('trial should be dict-like', trial)\n        for key in TRIAL_KEYS:\n            if key not in trial:\n                raise InvalidTrial('trial missing key %s', key)\n        for key in TRIAL_MISC_KEYS:\n            if key not in trial['misc']:\n                raise InvalidTrial('trial[\"misc\"] missing key', key)\n        if trial['tid'] != trial['misc']['tid']:\n            raise InvalidTrial(\n                'tid mismatch between root and misc',\n                trial)\n        # -- check for SON-encodable\n        if have_bson:\n            try:\n                bson.BSON.encode(trial)\n            except:\n                # TODO: save the trial object somewhere to inspect, fix, re-insert\n                #       so that precious data is not simply deallocated and lost.\n                print('-' * 80)\n                print(\"CANT ENCODE\")\n                print('-' * 80)\n                raise\n        if trial['exp_key'] != self._exp_key:\n            raise InvalidTrial('wrong exp_key',\n                               (trial['exp_key'], self._exp_key))\n        # XXX how to assert that tids are unique?\n        return trial\n\n    def _insert_trial_docs(self, docs):\n        \"\"\"insert with no error checking\n        \"\"\"\n        rval = [doc['tid'] for doc in docs]\n        self._dynamic_trials.extend(docs)\n        return rval\n\n    def insert_trial_doc(self, doc):\n        \"\"\"insert trial after error checking\n\n        Does not refresh. Call self.refresh() for the trial to appear in\n        self.specs, self.results, etc.\n        \"\"\"\n        doc = self.assert_valid_trial(SONify(doc))\n        return self._insert_trial_docs([doc])[0]\n        # refreshing could be done fast in this base implementation, but with\n        # a real DB the steps should be separated.\n\n    def insert_trial_docs(self, docs):\n        \"\"\" trials - something like is returned by self.new_trial_docs()\n        \"\"\"\n        docs = [self.assert_valid_trial(SONify(doc))\n                for doc in docs]\n        return self._insert_trial_docs(docs)\n\n    def new_trial_ids(self, N):\n        aa = len(self._ids)\n        rval = list(range(aa, aa + N))\n        self._ids.update(rval)\n        return rval\n\n    def new_trial_docs(self, tids, specs, results, miscs):\n        assert len(tids) == len(specs) == len(results) == len(miscs)\n        rval = []\n        for tid, spec, result, misc in zip(tids, specs, results, miscs):\n            doc = dict(\n                state=JOB_STATE_NEW,\n                tid=tid,\n                spec=spec,\n                result=result,\n                misc=misc)\n            doc['exp_key'] = self._exp_key\n            doc['owner'] = None\n            doc['version'] = 0\n            doc['book_time'] = None\n            doc['refresh_time'] = None\n            rval.append(doc)\n        return rval\n\n    def source_trial_docs(self, tids, specs, results, miscs, sources):\n        assert _all_same(list(map(len, [tids, specs, results, miscs, sources])))\n        rval = []\n        for tid, spec, result, misc, source in zip(tids, specs, results, miscs,\n                                                   sources):\n            doc = dict(\n                version=0,\n                tid=tid,\n                spec=spec,\n                result=result,\n                misc=misc,\n                state=source['state'],\n                exp_key=source['exp_key'],\n                owner=source['owner'],\n                book_time=source['book_time'],\n                refresh_time=source['refresh_time'],\n            )\n            # -- ensure that misc has the following fields,\n            #    some of which may already by set correctly.\n            assign = ('tid', tid), ('cmd', None), ('from_tid', source['tid'])\n            for k, v in assign:\n                assert doc['misc'].setdefault(k, v) == v\n            rval.append(doc)\n        return rval\n\n    def delete_all(self):\n        self._dynamic_trials = []\n        self.attachments = {}\n        self.refresh()\n\n    def count_by_state_synced(self, arg, trials=None):\n        \"\"\"\n        Return trial counts by looking at self._trials\n        \"\"\"\n        if trials is None:\n            trials = self._trials\n        if arg in JOB_STATES:\n            queue = [doc for doc in trials if doc['state'] == arg]\n        elif hasattr(arg, '__iter__'):\n            states = set(arg)\n            assert all([x in JOB_STATES for x in states])\n            queue = [doc for doc in trials if doc['state'] in states]\n        else:\n            raise TypeError(arg)\n        rval = len(queue)\n        return rval\n\n    def count_by_state_unsynced(self, arg):\n        \"\"\"\n        Return trial counts that count_by_state_synced would return if we\n        called refresh() first.\n        \"\"\"\n        if self._exp_key is not None:\n            exp_trials = [tt\n                          for tt in self._dynamic_trials\n                          if tt['exp_key'] == self._exp_key]\n        else:\n            exp_trials = self._dynamic_trials\n        return self.count_by_state_synced(arg, trials=exp_trials)\n\n    def losses(self, bandit=None):\n        if bandit is None:\n            return [r.get('loss') for r in self.results]\n        else:\n            return list(map(bandit.loss, self.results, self.specs))\n\n    def statuses(self, bandit=None):\n        if bandit is None:\n            return [r.get('status') for r in self.results]\n        else:\n            return list(map(bandit.status, self.results, self.specs))\n\n    def average_best_error(self, bandit=None):\n        \"\"\"Return the average best error of the experiment\n\n        Average best error is defined as the average of bandit.true_loss,\n        weighted by the probability that the corresponding bandit.loss is best.\n\n        For domains with loss measurement variance of 0, this function simply\n        returns the true_loss corresponding to the result with the lowest loss.\n        \"\"\"\n\n        if bandit is None:\n            results = self.results\n            loss = [r['loss']\n                    for r in results if r['status'] == STATUS_OK]\n            loss_v = [r.get('loss_variance', 0)\n                      for r in results if r['status'] == STATUS_OK]\n            true_loss = [r.get('true_loss', r['loss'])\n                         for r in results if r['status'] == STATUS_OK]\n        else:\n            def fmap(f):\n                rval = np.asarray([\n                    f(r, s)\n                    for (r, s) in zip(self.results, self.specs)\n                    if bandit.status(r) == STATUS_OK]).astype('float')\n                if not np.all(np.isfinite(rval)):\n                    raise ValueError()\n                return rval\n            loss = fmap(bandit.loss)\n            loss_v = fmap(bandit.loss_variance)\n            true_loss = fmap(bandit.true_loss)\n        loss3 = list(zip(loss, loss_v, true_loss))\n        if not loss3:\n            raise ValueError('Empty loss vector')\n        loss3.sort()\n        loss3 = np.asarray(loss3)\n        if np.all(loss3[:, 1] == 0):\n            best_idx = np.argmin(loss3[:, 0])\n            return loss3[best_idx, 2]\n        else:\n            cutoff = 0\n            sigma = np.sqrt(loss3[0][1])\n            while (cutoff < len(loss3) and\n                   loss3[cutoff][0] < loss3[0][0] + 3 * sigma):\n                cutoff += 1\n            pmin = pmin_sampled(loss3[:cutoff, 0], loss3[:cutoff, 1])\n            avg_true_loss = (pmin * loss3[:cutoff, 2]).sum()\n            return avg_true_loss\n\n    @property\n    def best_trial(self):\n        \"\"\"Trial with lowest loss and status=STATUS_OK\n        \"\"\"\n        candidates = [t for t in self.trials\n                      if t['result']['status'] == STATUS_OK]\n        losses = [float(t['result']['loss']) for t in candidates]\n        assert not np.any(np.isnan(losses))\n        best = np.argmin(losses)\n        return candidates[best]\n\n    @property\n    def argmin(self):\n        best_trial = self.best_trial\n        vals = best_trial['misc']['vals']\n        # unpack the one-element lists to values\n        # and skip over the 0-element lists\n        rval = {}\n        for k, v in list(vals.items()):\n            if v:\n                rval[k] = v[0]\n        return rval\n\n    def fmin(self, fn, space, algo, max_evals,\n             rstate=None,\n             verbose=0,\n             pass_expr_memo_ctrl=None,\n             catch_eval_exceptions=False,\n             return_argmin=True,\n             ):\n        \"\"\"Minimize a function over a hyperparameter space.\n\n        For most parameters, see `hyperopt.fmin.fmin`.\n\n        Parameters\n        ----------\n\n        catch_eval_exceptions : bool, default False\n            If set to True, exceptions raised by either the evaluation of the\n            configuration space from hyperparameters or the execution of `fn`\n            , will be caught by fmin, and recorded in self._dynamic_trials as\n            error jobs (JOB_STATE_ERROR).  If set to False, such exceptions\n            will not be caught, and so they will propagate to calling code.\n\n\n        \"\"\"\n        # -- Stop-gap implementation!\n        #    fmin should have been a Trials method in the first place\n        #    but for now it's still sitting in another file.\n        from .fmin import fmin\n        return fmin(\n            fn, space, algo, max_evals,\n            trials=self,\n            rstate=rstate,\n            verbose=verbose,\n            allow_trials_fmin=False,  # -- prevent recursion\n            pass_expr_memo_ctrl=pass_expr_memo_ctrl,\n            catch_eval_exceptions=catch_eval_exceptions,\n            return_argmin=return_argmin)\n\n\ndef trials_from_docs(docs, validate=True, **kwargs):\n    \"\"\"Construct a Trials base class instance from a list of trials documents\n    \"\"\"\n    rval = Trials(**kwargs)\n    if validate:\n        rval.insert_trial_docs(docs)\n    else:\n        rval._insert_trial_docs(docs)\n    rval.refresh()\n    return rval\n\n\nclass Ctrl(object):\n    \"\"\"Control object for interruptible, checkpoint-able evaluation\n    \"\"\"\n    info = logger.info\n    warn = logger.warn\n    error = logger.error\n    debug = logger.debug\n\n    def __init__(self, trials, current_trial=None):\n        # -- attachments should be used like\n        #      attachments[key]\n        #      attachments[key] = value\n        #    where key and value are strings. Client code should not\n        #    expect any dictionary-like behaviour beyond that (no update)\n        if trials is None:\n            self.trials = Trials()\n        else:\n            self.trials = trials\n        self.current_trial = current_trial\n\n    def checkpoint(self, r=None):\n        assert self.current_trial in self.trials._trials\n        if r is not None:\n            self.current_trial['result'] = r\n\n    @property\n    def attachments(self):\n        \"\"\"\n        Support syntax for load:  self.attachments[name]\n        Support syntax for store: self.attachments[name] = value\n        \"\"\"\n        return self.trials.trial_attachments(trial=self.current_trial)\n\n    def inject_results(self, specs, results, miscs, new_tids=None):\n        \"\"\"Inject new results into self.trials\n\n        Returns ??? XXX\n\n        new_tids can be None, in which case new tids will be generated\n        automatically\n\n        \"\"\"\n        trial = self.current_trial\n        assert trial is not None\n        num_news = len(specs)\n        assert len(specs) == len(results) == len(miscs)\n        if new_tids is None:\n            new_tids = self.trials.new_trial_ids(num_news)\n        new_trials = self.trials.source_trial_docs(tids=new_tids,\n                                                   specs=specs,\n                                                   results=results,\n                                                   miscs=miscs,\n                                                   sources=[trial])\n        for t in new_trials:\n            t['state'] = JOB_STATE_DONE\n        return self.trials.insert_trial_docs(new_trials)\n\n\nclass Domain(object):\n    \"\"\"Picklable representation of search space and evaluation function.\n\n    \"\"\"\n    rec_eval_print_node_on_error = False\n\n    # -- the Ctrl object is not used directly, but rather\n    #    a live Ctrl instance is inserted for the pyll_ctrl\n    #    in self.evaluate so that it can be accessed from within\n    #    the pyll graph describing the search space.\n    pyll_ctrl = pyll.as_apply(Ctrl)\n\n    def __init__(self, fn, expr,\n                 workdir=None,\n                 pass_expr_memo_ctrl=None,\n                 name=None,\n                 loss_target=None,\n                 ):\n        \"\"\"\n        Paramaters\n        ----------\n\n        fn : callable\n            This stores the `fn` argument to `fmin`. (See `hyperopt.fmin.fmin`)\n\n        expr : hyperopt.pyll.Apply\n            This is the `space` argument to `fmin`. (See `hyperopt.fmin.fmin`)\n\n        workdir : string (or None)\n            If non-None, the current working directory will be `workdir`while\n            `expr` and `fn` are evaluated. (XXX Currently only respected by\n            jobs run via MongoWorker)\n\n        pass_expr_memo_ctrl : bool\n            If True, `fn` will be called like this:\n            `fn(self.expr, memo, ctrl)`,\n            where `memo` is a dictionary mapping `Apply` nodes to their\n            computed values, and `ctrl` is a `Ctrl` instance for communicating\n            with a Trials database.  This lower-level calling convention is\n            useful if you want to call e.g. `hyperopt.pyll.rec_eval` yourself\n            in some customized way.\n\n        name : string (or None)\n            Label, used for pretty-printing.\n\n        loss_target : float (or None)\n            The actual or estimated minimum of `fn`.\n            Some optimization algorithms may behave differently if their first\n            objective is to find an input that achieves a certain value,\n            rather than the more open-ended objective of pure minimization.\n            XXX: Move this from Domain to be an fmin arg.\n\n        \"\"\"\n        self.fn = fn\n        if pass_expr_memo_ctrl is None:\n            self.pass_expr_memo_ctrl = getattr(fn,\n                                               'fmin_pass_expr_memo_ctrl',\n                                               False)\n        else:\n            self.pass_expr_memo_ctrl = pass_expr_memo_ctrl\n\n        self.expr = pyll.as_apply(expr)\n\n        self.params = {}\n        for node in pyll.dfs(self.expr):\n            if node.name == 'hyperopt_param':\n                label = node.arg['label'].obj\n                if label in self.params:\n                    raise DuplicateLabel(label)\n                self.params[label] = node.arg['obj']\n\n        self.loss_target = loss_target\n        self.name = name\n\n        self.workdir = workdir\n        self.s_new_ids = pyll.Literal('new_ids')  # -- list at eval-time\n        before = pyll.dfs(self.expr)\n        # -- raises exception if expr contains cycles\n        pyll.toposort(self.expr)\n        vh = self.vh = VectorizeHelper(self.expr, self.s_new_ids)\n        # -- raises exception if v_expr contains cycles\n        pyll.toposort(vh.v_expr)\n\n        idxs_by_label = vh.idxs_by_label()\n        vals_by_label = vh.vals_by_label()\n        after = pyll.dfs(self.expr)\n        # -- try to detect if VectorizeHelper screwed up anything inplace\n        assert before == after\n        assert set(idxs_by_label.keys()) == set(vals_by_label.keys())\n        assert set(idxs_by_label.keys()) == set(self.params.keys())\n\n        self.s_rng = pyll.Literal('rng-placeholder')\n        # -- N.B. operates inplace:\n        self.s_idxs_vals = recursive_set_rng_kwarg(\n            pyll.scope.pos_args(idxs_by_label, vals_by_label),\n            self.s_rng)\n\n        # -- raises an exception if no topological ordering exists\n        pyll.toposort(self.s_idxs_vals)\n\n        # -- Protocol for serialization.\n        #    self.cmd indicates to e.g. MongoWorker how this domain\n        #    should be [un]serialized.\n        #    XXX This mechanism deserves review as support for ipython\n        #        workers improves.\n        self.cmd = ('domain_attachment', 'FMinIter_Domain')\n\n    def memo_from_config(self, config):\n        memo = {}\n        for node in pyll.dfs(self.expr):\n            if node.name == 'hyperopt_param':\n                label = node.arg['label'].obj\n                # -- hack because it's not really garbagecollected\n                #    this does have the desired effect of crashing the\n                #    function if rec_eval actually needs a value that\n                #    the the optimization algorithm thought to be unnecessary\n                memo[node] = config.get(label, pyll.base.GarbageCollected)\n        return memo\n\n    def evaluate(self, config, ctrl, attach_attachments=True):\n        memo = self.memo_from_config(config)\n        use_obj_for_literal_in_memo(self.expr, ctrl, Ctrl, memo)\n        if self.pass_expr_memo_ctrl:\n            rval = self.fn(expr=self.expr, memo=memo, ctrl=ctrl)\n        else:\n            # -- the \"work\" of evaluating `config` can be written\n            #    either into the pyll part (self.expr)\n            #    or the normal Python part (self.fn)\n            pyll_rval = pyll.rec_eval(\n                self.expr,\n                memo=memo,\n                print_node_on_error=self.rec_eval_print_node_on_error)\n            rval = self.fn(pyll_rval)\n\n        if isinstance(rval, (float, int, np.number)):\n            dict_rval = {'loss': float(rval), 'status': STATUS_OK}\n        else:\n            dict_rval = dict(rval)\n            status = dict_rval['status']\n            if status not in STATUS_STRINGS:\n                raise InvalidResultStatus(dict_rval)\n\n            if status == STATUS_OK:\n                # -- make sure that the loss is present and valid\n                try:\n                    dict_rval['loss'] = float(dict_rval['loss'])\n                except (TypeError, KeyError):\n                    raise InvalidLoss(dict_rval)\n\n        if attach_attachments:\n            attachments = dict_rval.pop('attachments', {})\n            for key, val in list(attachments.items()):\n                ctrl.attachments[key] = val\n\n        # -- don't do this here because SON-compatibility is only a requirement\n        #    for trials destined for a mongodb. In-memory rvals can contain\n        #    anything.\n        return dict_rval\n\n    def evaluate_async(self, config, ctrl, attach_attachments=True,):\n        '''\n        this is the first part of async evaluation for ipython parallel engines (see ipy.py)\n\n        This breaks evaluate into two parts to allow for the apply_async call\n        to only pass the objective function and arguments.\n        '''\n        memo = self.memo_from_config(config)\n        use_obj_for_literal_in_memo(self.expr, ctrl, Ctrl, memo)\n        if self.pass_expr_memo_ctrl:\n            pyll_rval = self.fn(expr=self.expr, memo=memo, ctrl=ctrl)\n        else:\n            # -- the \"work\" of evaluating `config` can be written\n            #    either into the pyll part (self.expr)\n            #    or the normal Python part (self.fn)\n            pyll_rval = pyll.rec_eval(\n                self.expr,\n                memo=memo,\n                print_node_on_error=self.rec_eval_print_node_on_error)\n            return (self.fn, pyll_rval)\n\n    def evaluate_async2(self, rval, ctrl, attach_attachments=True):\n        '''\n        this is the second part of async evaluation for ipython parallel engines (see ipy.py)\n        '''\n        if isinstance(rval, (float, int, np.number)):\n            dict_rval = {'loss': float(rval), 'status': STATUS_OK}\n        else:\n            dict_rval = dict(rval)\n            status = dict_rval['status']\n            if status not in STATUS_STRINGS:\n                raise InvalidResultStatus(dict_rval)\n\n            if status == STATUS_OK:\n                # -- make sure that the loss is present and valid\n                try:\n                    dict_rval['loss'] = float(dict_rval['loss'])\n                except (TypeError, KeyError):\n                    raise InvalidLoss(dict_rval)\n\n        if attach_attachments:\n            attachments = dict_rval.pop('attachments', {})\n            for key, val in list(attachments.items()):\n                ctrl.attachments[key] = val\n\n        # -- don't do this here because SON-compatibility is only a requirement\n        #    for trials destined for a mongodb. In-memory rvals can contain\n        #    anything.\n        return dict_rval\n\n    def short_str(self):\n        return 'Domain{%s}' % str(self.fn)\n\n    def loss(self, result, config=None):\n        \"\"\"Extract the scalar-valued loss from a result document\n        \"\"\"\n        return result.get('loss', None)\n\n    def loss_variance(self, result, config=None):\n        \"\"\"Return the variance in the estimate of the loss\"\"\"\n        return result.get('loss_variance', 0.0)\n\n    def true_loss(self, result, config=None):\n        \"\"\"Return a true loss, in the case that the `loss` is a surrogate\"\"\"\n        # N.B. don't use get() here, it evaluates self.loss un-necessarily\n        try:\n            return result['true_loss']\n        except KeyError:\n            return self.loss(result, config=config)\n\n    def true_loss_variance(self, config=None):\n        \"\"\"Return the variance in  true loss,\n        in the case that the `loss` is a surrogate.\n        \"\"\"\n        raise NotImplementedError()\n\n    def status(self, result, config=None):\n        \"\"\"Extract the job status from a result document\n        \"\"\"\n        return result['status']\n\n    def new_result(self):\n        \"\"\"Return a JSON-encodable object\n        to serve as the 'result' for new jobs.\n        \"\"\"\n        return {'status': STATUS_NEW}\n\n\n# -- flake8 doesn't like blank last line\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/criteria.py",
    "content": "\"\"\"Criteria for Bayesian optimization\n\"\"\"\nfrom __future__ import division\nfrom past.utils import old_div\nimport numpy as np\nimport scipy.stats\n\n\ndef EI_empirical(samples, thresh):\n    \"\"\"Expected Improvement over threshold from samples\n\n    (See example usage in EI_gaussian_empirical)\n    \"\"\"\n    improvement = np.maximum(samples - thresh, 0)\n    return improvement.mean()\n\n\ndef EI_gaussian_empirical(mean, var, thresh, rng, N):\n    \"\"\"Expected Improvement of Gaussian over threshold\n\n    (estimated empirically)\n    \"\"\"\n    return EI_empirical(rng.randn(N) * np.sqrt(var) + mean, thresh)\n\n\ndef EI_gaussian(mean, var, thresh):\n    \"\"\"Expected Improvement of Gaussian over threshold\n\n    (estimated analytically)\n    \"\"\"\n    sigma = np.sqrt(var)\n    score = old_div((mean - thresh), sigma)\n    n = scipy.stats.norm\n    return sigma * (score * n.cdf(score) + n.pdf(score))\n\n\ndef logEI_gaussian(mean, var, thresh):\n    \"\"\"Return log(EI(mean, var, thresh))\n\n    This formula avoids underflow in cdf for\n        thresh >= mean + 37 * sqrt(var)\n\n    \"\"\"\n    assert np.asarray(var).min() >= 0\n    sigma = np.sqrt(var)\n    score = old_div((mean - thresh), sigma)\n    n = scipy.stats.norm\n    try:\n        float(mean)\n        is_scalar = True\n    except TypeError:\n        is_scalar = False\n\n    if is_scalar:\n        if score < 0:\n            pdf = n.logpdf(score)\n            r = np.exp(np.log(-score) + n.logcdf(score) - pdf)\n            rval = np.log(sigma) + pdf + np.log1p(-r)\n            if not np.isfinite(rval):\n                return -np.inf\n            else:\n                return rval\n        else:\n            return np.log(sigma) + np.log(score * n.cdf(score) + n.pdf(score))\n    else:\n        score = np.asarray(score)\n        rval = np.zeros_like(score)\n\n        olderr = np.seterr(all='ignore')\n        try:\n            negs = score < 0\n            nonnegs = np.logical_not(negs)\n            negs_score = score[negs]\n            negs_pdf = n.logpdf(negs_score)\n            r = np.exp(np.log(-negs_score) +\n                       n.logcdf(negs_score) -\n                       negs_pdf)\n            rval[negs] = np.log(sigma[negs]) + negs_pdf + np.log1p(-r)\n            nonnegs_score = score[nonnegs]\n            rval[nonnegs] = np.log(sigma[nonnegs]) + np.log(\n                nonnegs_score * n.cdf(nonnegs_score) + n.pdf(nonnegs_score))\n            rval[np.logical_not(np.isfinite(rval))] = -np.inf\n        finally:\n            np.seterr(**olderr)\n        return rval\n\n\ndef UCB(mean, var, zscore):\n    \"\"\"Upper Confidence Bound\n\n    For a model which predicts a Gaussian-distributed outcome, the UCB is\n\n        mean + zscore * sqrt(var)\n    \"\"\"\n    return mean + np.sqrt(var) * zscore\n\n\n# -- flake8\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/exceptions.py",
    "content": "\"\"\"\n\"\"\"\nfrom builtins import str\n\n\nclass BadSearchSpace(Exception):\n    \"\"\"Something is wrong in the description of the search space\"\"\"\n\n\nclass DuplicateLabel(BadSearchSpace):\n    \"\"\"A search space included a duplicate label \"\"\"\n\n\nclass InvalidTrial(ValueError):\n    \"\"\"Non trial-like object used as Trial\"\"\"\n    def __init__(self, msg, obj):\n        ValueError.__init__(self, msg + ' ' + str(obj))\n        self.obj = obj\n\n\nclass InvalidResultStatus(ValueError):\n    \"\"\"Status of fmin evaluation was not in base.STATUS_STRINGS\"\"\"\n    def __init__(self, result):\n        ValueError.__init__(self)\n        self.result = result\n\n\nclass InvalidLoss(ValueError):\n    \"\"\"fmin evaluation returned invalid loss value\"\"\"\n    def __init__(self, result):\n        ValueError.__init__(self)\n        self.result = result\n\n# -- flake8 doesn't like blank last line\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/fmin.py",
    "content": "from __future__ import print_function\nfrom __future__ import absolute_import\nfrom future import standard_library\nfrom builtins import str\nfrom builtins import object\n\nimport functools\nimport logging\nimport os\nimport sys\nimport time\n\nimport numpy as np\n\nfrom . import pyll\nfrom .utils import coarse_utcnow\nfrom . import base\n\nstandard_library.install_aliases()\nlogger = logging.getLogger(__name__)\n\n\ntry:\n    import dill as pickler\nexcept Exception as e:\n    logger.info('Failed to load dill, try installing dill via \"pip install dill\" for enhanced pickling support.')\n    import six.moves.cPickle as pickler\n\n\ndef generate_trial(tid, space):\n    variables = space.keys()\n    idxs = {v: [tid] for v in variables}\n    vals = {k: [v] for k, v in space.items()}\n    return {'state': base.JOB_STATE_NEW,\n            'tid': tid,\n            'spec': None,\n            'result': {'status': 'new'},\n            'misc': {'tid': tid,\n                     'cmd': ('domain_attachment',\n                             'FMinIter_Domain'),\n                     'workdir': None,\n                     'idxs': idxs,\n                     'vals': vals},\n            'exp_key': None,\n            'owner': None,\n            'version': 0,\n            'book_time': None,\n            'refresh_time': None,\n            }\n\n\ndef generate_trials_to_calculate(points):\n    \"\"\"\n    Function that generates trials to be evaluated from list of points\n\n    :param points: List of points to be inserted in trials object in form of\n        dictionary with variable names as keys and variable values as dict\n        values. Example value:\n        [{'x': 0.0, 'y': 0.0}, {'x': 1.0, 'y': 1.0}]\n\n    :return: object of class base.Trials() with points which will be calculated\n        before optimisation start if passed to fmin().\n    \"\"\"\n    trials = base.Trials()\n    new_trials = [generate_trial(tid, x) for tid, x in enumerate(points)]\n    trials.insert_trial_docs(new_trials)\n    return trials\n\n\ndef fmin_pass_expr_memo_ctrl(f):\n    \"\"\"\n    Mark a function as expecting kwargs 'expr', 'memo' and 'ctrl' from\n    hyperopt.fmin.\n\n    expr - the pyll expression of the search space\n    memo - a partially-filled memo dictionary such that\n           `rec_eval(expr, memo=memo)` will build the proposed trial point.\n    ctrl - the Experiment control object (see base.Ctrl)\n\n    \"\"\"\n    f.fmin_pass_expr_memo_ctrl = True\n    return f\n\n\ndef partial(fn, **kwargs):\n    \"\"\"functools.partial work-alike for functions decorated with\n    fmin_pass_expr_memo_ctrl\n    \"\"\"\n    rval = functools.partial(fn, **kwargs)\n    if hasattr(fn, 'fmin_pass_expr_memo_ctrl'):\n        rval.fmin_pass_expr_memo_ctrl = fn.fmin_pass_expr_memo_ctrl\n    return rval\n\n\nclass FMinIter(object):\n    \"\"\"Object for conducting search experiments.\n    \"\"\"\n    catch_eval_exceptions = False\n    pickle_protocol = -1\n\n    def __init__(self, algo, domain, trials, rstate, asynchronous=None,\n                 max_queue_len=1,\n                 poll_interval_secs=1.0,\n                 max_evals=sys.maxsize,\n                 verbose=0,\n                 ):\n        self.algo = algo\n        self.domain = domain\n        self.trials = trials\n        if asynchronous is None:\n            self.asynchronous = trials.asynchronous\n        else:\n            self.asynchronous = asynchronous\n        self.poll_interval_secs = poll_interval_secs\n        self.max_queue_len = max_queue_len\n        self.max_evals = max_evals\n        self.rstate = rstate\n\n        if self.asynchronous:\n            if 'FMinIter_Domain' in trials.attachments:\n                logger.warn('over-writing old domain trials attachment')\n            msg = pickler.dumps(domain)\n            # -- sanity check for unpickling\n            pickler.loads(msg)\n            trials.attachments['FMinIter_Domain'] = msg\n\n    def serial_evaluate(self, N=-1):\n        for trial in self.trials._dynamic_trials:\n            if trial['state'] == base.JOB_STATE_NEW:\n                trial['state'] = base.JOB_STATE_RUNNING\n                now = coarse_utcnow()\n                trial['book_time'] = now\n                trial['refresh_time'] = now\n                spec = base.spec_from_misc(trial['misc'])\n                ctrl = base.Ctrl(self.trials, current_trial=trial)\n                try:\n                    result = self.domain.evaluate(spec, ctrl)\n                except Exception as e:\n                    logger.info('job exception: %s' % str(e))\n                    trial['state'] = base.JOB_STATE_ERROR\n                    trial['misc']['error'] = (str(type(e)), str(e))\n                    trial['refresh_time'] = coarse_utcnow()\n                    if not self.catch_eval_exceptions:\n                        # -- JOB_STATE_ERROR means this trial\n                        #    will be removed from self.trials.trials\n                        #    by this refresh call.\n                        self.trials.refresh()\n                        raise\n                else:\n                    trial['state'] = base.JOB_STATE_DONE\n                    trial['result'] = result\n                    trial['refresh_time'] = coarse_utcnow()\n                N -= 1\n                if N == 0:\n                    break\n        self.trials.refresh()\n\n    def block_until_done(self):\n        already_printed = False\n        if self.asynchronous:\n            unfinished_states = [base.JOB_STATE_NEW, base.JOB_STATE_RUNNING]\n\n            def get_queue_len():\n                return self.trials.count_by_state_unsynced(unfinished_states)\n\n            qlen = get_queue_len()\n            while qlen > 0:\n                if not already_printed:\n                    logger.info('Waiting for %d jobs to finish ...' % qlen)\n                    already_printed = True\n                time.sleep(self.poll_interval_secs)\n                qlen = get_queue_len()\n            self.trials.refresh()\n        else:\n            self.serial_evaluate()\n\n    def run(self, N, block_until_done=True):\n        \"\"\"\n        block_until_done  means that the process blocks until ALL jobs in\n        trials are not in running or new state\n\n        \"\"\"\n        trials = self.trials\n        algo = self.algo\n        n_queued = 0\n\n        def get_queue_len():\n            return self.trials.count_by_state_unsynced(base.JOB_STATE_NEW)\n\n        stopped = False\n        while n_queued < N:\n            qlen = get_queue_len()\n            while qlen < self.max_queue_len and n_queued < N:\n                n_to_enqueue = min(self.max_queue_len - qlen, N - n_queued)\n                new_ids = trials.new_trial_ids(n_to_enqueue)\n                self.trials.refresh()\n                if 0:\n                    for d in self.trials.trials:\n                        print('trial %i %s %s' % (d['tid'], d['state'],\n                                                  d['result'].get('status')))\n                new_trials = algo(new_ids, self.domain, trials,\n                                  self.rstate.randint(2 ** 31 - 1))\n                assert len(new_ids) >= len(new_trials)\n                if len(new_trials):\n                    self.trials.insert_trial_docs(new_trials)\n                    self.trials.refresh()\n                    n_queued += len(new_trials)\n                    qlen = get_queue_len()\n                else:\n                    stopped = True\n                    break\n\n            if self.asynchronous:\n                # -- wait for workers to fill in the trials\n                time.sleep(self.poll_interval_secs)\n            else:\n                # -- loop over trials and do the jobs directly\n                self.serial_evaluate()\n\n            if stopped:\n                break\n\n        if block_until_done:\n            self.block_until_done()\n            self.trials.refresh()\n            logger.info('Queue empty, exiting run.')\n        else:\n            qlen = get_queue_len()\n            if qlen:\n                msg = 'Exiting run, not waiting for %d jobs.' % qlen\n                logger.info(msg)\n\n    def __iter__(self):\n        return self\n\n    def __next__(self):\n        self.run(1, block_until_done=self.asynchronous)\n        if len(self.trials) >= self.max_evals:\n            raise StopIteration()\n        return self.trials\n\n    def exhaust(self):\n        n_done = len(self.trials)\n        self.run(self.max_evals - n_done, block_until_done=self.asynchronous)\n        self.trials.refresh()\n        return self\n\n\ndef fmin(fn, space, algo, max_evals, trials=None, rstate=None,\n         allow_trials_fmin=True, pass_expr_memo_ctrl=None,\n         catch_eval_exceptions=False,\n         verbose=0,\n         return_argmin=True,\n         points_to_evaluate=None\n         ):\n    \"\"\"Minimize a function over a hyperparameter space.\n\n    More realistically: *explore* a function over a hyperparameter space\n    according to a given algorithm, allowing up to a certain number of\n    function evaluations.  As points are explored, they are accumulated in\n    `trials`\n\n\n    Parameters\n    ----------\n\n    fn : callable (trial point -> loss)\n        This function will be called with a value generated from `space`\n        as the first and possibly only argument.  It can return either\n        a scalar-valued loss, or a dictionary.  A returned dictionary must\n        contain a 'status' key with a value from `STATUS_STRINGS`, must\n        contain a 'loss' key if the status is `STATUS_OK`. Particular\n        optimization algorithms may look for other keys as well.  An\n        optional sub-dictionary associated with an 'attachments' key will\n        be removed by fmin its contents will be available via\n        `trials.trial_attachments`. The rest (usually all) of the returned\n        dictionary will be stored and available later as some 'result'\n        sub-dictionary within `trials.trials`.\n\n    space : hyperopt.pyll.Apply node\n        The set of possible arguments to `fn` is the set of objects\n        that could be created with non-zero probability by drawing randomly\n        from this stochastic program involving involving hp_<xxx> nodes\n        (see `hyperopt.hp` and `hyperopt.pyll_utils`).\n\n    algo : search algorithm\n        This object, such as `hyperopt.rand.suggest` and\n        `hyperopt.tpe.suggest` provides logic for sequential search of the\n        hyperparameter space.\n\n    max_evals : int\n        Allow up to this many function evaluations before returning.\n\n    trials : None or base.Trials (or subclass)\n        Storage for completed, ongoing, and scheduled evaluation points.  If\n        None, then a temporary `base.Trials` instance will be created.  If\n        a trials object, then that trials object will be affected by\n        side-effect of this call.\n\n    rstate : numpy.RandomState, default numpy.random or `$HYPEROPT_FMIN_SEED`\n        Each call to `algo` requires a seed value, which should be different\n        on each call. This object is used to draw these seeds via `randint`.\n        The default rstate is\n        `numpy.random.RandomState(int(env['HYPEROPT_FMIN_SEED']))`\n        if the `HYPEROPT_FMIN_SEED` environment variable is set to a non-empty\n        string, otherwise np.random is used in whatever state it is in.\n\n    verbose : int\n        Print out some information to stdout during search.\n\n    allow_trials_fmin : bool, default True\n        If the `trials` argument\n\n    pass_expr_memo_ctrl : bool, default False\n        If set to True, `fn` will be called in a different more low-level\n        way: it will receive raw hyperparameters, a partially-populated\n        `memo`, and a Ctrl object for communication with this Trials\n        object.\n\n    return_argmin : bool, default True\n        If set to False, this function returns nothing, which can be useful\n        for example if it is expected that `len(trials)` may be zero after\n        fmin, and therefore `trials.argmin` would be undefined.\n\n    points_to_evaluate : list, default None\n        Only works if trials=None. If points_to_evaluate equals None then the\n        trials are evaluated normally. If list of dicts is passed then\n        given points are evaluated before optimisation starts, so the overall\n        number of optimisation steps is len(points_to_evaluate) + max_evals.\n        Elements of this list must be in a form of a dictionary with variable\n        names as keys and variable values as dict values. Example\n        points_to_evaluate value is [{'x': 0.0, 'y': 0.0}, {'x': 1.0, 'y': 2.0}]\n\n    Returns\n    -------\n\n    argmin : None or dictionary\n        If `return_argmin` is False, this function returns nothing.\n        Otherwise, it returns `trials.argmin`.  This argmin can be converted\n        to a point in the configuration space by calling\n        `hyperopt.space_eval(space, best_vals)`.\n\n\n    \"\"\"\n    if rstate is None:\n        env_rseed = os.environ.get('HYPEROPT_FMIN_SEED', '')\n        if env_rseed:\n            rstate = np.random.RandomState(int(env_rseed))\n        else:\n            rstate = np.random.RandomState()\n\n    if allow_trials_fmin and hasattr(trials, 'fmin'):\n        return trials.fmin(\n            fn, space,\n            algo=algo,\n            max_evals=max_evals,\n            rstate=rstate,\n            pass_expr_memo_ctrl=pass_expr_memo_ctrl,\n            verbose=verbose,\n            catch_eval_exceptions=catch_eval_exceptions,\n            return_argmin=return_argmin,\n        )\n\n    if trials is None:\n        if points_to_evaluate is None:\n            trials = base.Trials()\n        else:\n            assert type(points_to_evaluate) == list\n            trials = generate_trials_to_calculate(points_to_evaluate)\n\n    domain = base.Domain(fn, space,\n                         pass_expr_memo_ctrl=pass_expr_memo_ctrl)\n\n    rval = FMinIter(algo, domain, trials, max_evals=max_evals,\n                    rstate=rstate,\n                    verbose=verbose)\n    rval.catch_eval_exceptions = catch_eval_exceptions\n    rval.exhaust()\n    if return_argmin:\n        return trials.argmin\n\n\ndef space_eval(space, hp_assignment):\n    \"\"\"Compute a point in a search space from a hyperparameter assignment.\n\n    Parameters:\n    -----------\n    space - a pyll graph involving hp nodes (see `pyll_utils`).\n\n    hp_assignment - a dictionary mapping hp node labels to values.\n    \"\"\"\n    space = pyll.as_apply(space)\n    nodes = pyll.toposort(space)\n    memo = {}\n    for node in nodes:\n        if node.name == 'hyperopt_param':\n            label = node.arg['label'].eval()\n            if label in hp_assignment:\n                memo[node] = hp_assignment[label]\n    rval = pyll.rec_eval(space, memo=memo)\n    return rval\n\n# -- flake8 doesn't like blank last line\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/graphviz.py",
    "content": "\"\"\"\nUse graphviz's dot language to express the relationship between hyperparamters\nin a search space.\n\n\"\"\"\nfrom __future__ import print_function\nfrom __future__ import absolute_import\nfrom future import standard_library\n\nimport io\nfrom .pyll_utils import expr_to_config\n\nstandard_library.install_aliases()\n\n\ndef dot_hyperparameters(expr):\n    \"\"\"\n    Return a dot language specification of a graph which describes the\n    relationship between hyperparameters. Each hyperparameter within the\n    pyll expression `expr` is represented by a rectangular node, and\n    each value of each choice node that creates a conditional variable\n    in the search space is represented by an elliptical node.\n\n    The direction of the arrows corresponds to the sequence of events\n    in an ancestral sampling process.\n\n    E.g.:\n    >>> open('foo.dot', 'wb').write(dot_hyperparameters(search_space()))\n\n    Then later from the shell, type e.g.\n    dot -Tpng foo.dot > foo.png && eog foo.png\n\n    Graphviz has other tools too: http://www.graphviz.org\n\n    \"\"\"\n    conditions = ()\n    hps = {}\n    expr_to_config(expr, conditions, hps)\n    rval = io.StringIO()\n    print(\"digraph {\", file=rval)\n    edges = set()\n\n    def var_node(a):\n        print('\"%s\" [ shape=box];' % a, file=rval)\n\n    def cond_node(a):\n        print('\"%s\" [ shape=ellipse];' % a, file=rval)\n\n    def edge(a, b):\n        text = '\"%s\" -> \"%s\";' % (a, b)\n        if text not in edges:\n            print(text, file=rval)\n            edges.add(text)\n\n    for hp, dct in list(hps.items()):\n        # create the node\n        var_node(hp)\n\n        # create an edge from anything it depends on\n        for and_conds in dct['conditions']:\n            if len(and_conds) > 1:\n                parent_label = ' & '.join([\n                    '%(name)s%(op)s%(val)s' % cond.__dict__\n                    for cond in and_conds])\n                cond_node(parent_label)\n                edge(parent_label, hp)\n                for cond in and_conds:\n                    sub_parent_label = '%s%s%s' % (\n                        cond.name, cond.op, cond.val)\n                    cond_node(sub_parent_label)\n                    edge(cond.name, sub_parent_label)\n                    edge(sub_parent_label, parent_label)\n            elif len(and_conds) == 1:\n                parent_label = '%s%s%s' % (\n                    and_conds[0].name, and_conds[0].op, and_conds[0].val)\n                edge(and_conds[0].name, parent_label)\n                cond_node(parent_label)\n                edge(parent_label, hp)\n    print(\"}\", file=rval)\n    return rval.getvalue()\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/hp.py",
    "content": "\"\"\"\nSupport nicer user syntax:\n    from hyperopt import hp\n    hp.uniform('x', 0, 1)\n\"\"\"\nfrom __future__ import absolute_import\nfrom .pyll_utils import hp_choice as choice\nfrom .pyll_utils import hp_randint as randint\nfrom .pyll_utils import hp_pchoice as pchoice\n\nfrom .pyll_utils import hp_uniform as uniform\nfrom .pyll_utils import hp_quniform as quniform\nfrom .pyll_utils import hp_loguniform as loguniform\nfrom .pyll_utils import hp_qloguniform as qloguniform\n\nfrom .pyll_utils import hp_normal as normal\nfrom .pyll_utils import hp_qnormal as qnormal\nfrom .pyll_utils import hp_lognormal as lognormal\nfrom .pyll_utils import hp_qlognormal as qlognormal\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/ipy.py",
    "content": "\"\"\"Utilities for Parallel Model Selection with\non\n\nAuthor: James Bergstra <james.bergstra@gmail.com>\nLicensed: MIT\n\"\"\"\nfrom __future__ import print_function\nfrom __future__ import absolute_import\nfrom builtins import zip\nfrom builtins import str\nfrom builtins import object\nfrom time import sleep, time\n\nimport numpy as np\n\nfrom .base import Trials\nfrom .base import Domain\nfrom .base import JOB_STATE_NEW\nfrom .base import JOB_STATE_RUNNING\nfrom .base import JOB_STATE_DONE\nfrom .base import JOB_STATE_ERROR\nfrom .base import spec_from_misc\nfrom .base import Ctrl\nfrom .utils import coarse_utcnow\n\nimport sys\nprint(sys.stderr, \"WARNING: IPythonTrials is not as complete, stable\", file=sys.stderr)\nprint(\"         or well tested as Trials or MongoTrials.\", file=sys.stderr)\n\n\nclass LostEngineError(RuntimeError):\n    \"\"\"An IPEngine disappeared during computation, and a job with it.\"\"\"\n\n\nclass IPythonTrials(Trials):\n\n    def __init__(self, client,\n                 job_error_reaction='raise',\n                 save_ipy_metadata=True):\n        self._client = client\n        self._clientlbv = client.load_balanced_view()\n        self.job_map = {}\n        self.job_error_reaction = job_error_reaction\n        self.save_ipy_metadata = save_ipy_metadata\n        Trials.__init__(self)\n        self._testing_fmin_was_called = False\n\n    def _insert_trial_docs(self, docs):\n        rval = [doc['tid'] for doc in docs]\n        self._dynamic_trials.extend(docs)\n        return rval\n\n    def refresh(self):\n        job_map = {}\n\n        # -- carry over state for active engines\n        for eid in self._client.ids:\n            job_map[eid] = self.job_map.pop(eid, (None, None))\n\n        # -- deal with lost engines, abandoned promises\n        for eid, (p, tt) in list(self.job_map.items()):\n            if self.job_error_reaction == 'raise':\n                raise LostEngineError(p)\n            elif self.job_error_reaction == 'log':\n                tt['error'] = 'LostEngineError (%s)' % str(p)\n                tt['state'] = JOB_STATE_ERROR\n            else:\n                raise ValueError(self.job_error_reaction)\n\n        # -- remove completed jobs from job_map\n        for eid, (p, tt) in list(job_map.items()):\n            if p is None:\n                continue\n            if p.ready():\n                try:\n                    tt['result'] = p.get()\n                    tt['state'] = JOB_STATE_DONE\n                    job_map[eid] = (None, None)\n                except Exception as e:\n                    if self.job_error_reaction == 'raise':\n                        raise\n                    elif self.job_error_reaction == 'log':\n                        tt['error'] = str(e)\n                        tt['state'] = JOB_STATE_ERROR\n                    else:\n                        raise ValueError(self.job_error_reaction)\n                if self.save_ipy_metadata:\n                    tt['ipy_metadata'] = p.metadata\n                tt['refresh_time'] = coarse_utcnow()\n                del job_map[eid]\n\n        self.job_map = job_map\n        Trials.refresh(self)\n\n    def fmin(self, fn, space, **kw):\n        # TODO: all underscore variables are completely unused throughout.\n        algo = kw.get('algo')\n        max_evals = kw.get('max_evals')\n        rstate = kw.get('rstate', None)\n        _allow_trials_fmin = True,\n        _pass_expr_memo_ctrl = None,\n        _catch_eval_exceptions = False,\n        verbose = kw.get('verbose', 0)\n        _return_argmin = True,\n        wait = True,\n        pass_expr_memo_ctrl = None,\n\n        if rstate is None:\n            rstate = np.random\n\n        # -- used in test_ipy\n        self._testing_fmin_was_called = True\n\n        if pass_expr_memo_ctrl is None:\n            try:\n                pass_expr_memo_ctrl = fn.pass_expr_memo_ctrl\n            except AttributeError:\n                pass_expr_memo_ctrl = False\n\n        domain = Domain(fn, space, None,\n                        pass_expr_memo_ctrl=False)\n\n        last_print_time = 0\n\n        while len(self._dynamic_trials) < max_evals:\n            self.refresh()\n\n            if verbose and last_print_time + 1 < time():\n                print('fmin: %4i/%4i/%4i/%4i  %f' % (\n                    self.count_by_state_unsynced(JOB_STATE_NEW),\n                    self.count_by_state_unsynced(JOB_STATE_RUNNING),\n                    self.count_by_state_unsynced(JOB_STATE_DONE),\n                    self.count_by_state_unsynced(JOB_STATE_ERROR),\n                    min([float('inf')] + [l for l in self.losses() if l is not None])\n                ))\n                last_print_time = time()\n\n            idles = [eid for (eid, (p, tt)) in list(self.job_map.items()) if p is None]\n\n            if idles:\n                new_ids = self.new_trial_ids(len(idles))\n                new_trials = algo(new_ids, domain, self, rstate.randint(2 ** 31 - 1))\n                if len(new_trials) == 0:\n                    break\n                else:\n                    assert len(idles) >= len(new_trials)\n                    for eid, new_trial in zip(idles, new_trials):\n                        now = coarse_utcnow()\n                        new_trial['book_time'] = now\n                        new_trial['refresh_time'] = now\n                        tid, = self.insert_trial_docs([new_trial])\n                        promise = call_domain(\n                            domain,\n                            spec_from_misc(new_trial['misc']),\n                            Ctrl(self, current_trial=new_trial),\n                            new_trial,\n                            self._clientlbv,\n                            eid,\n                            tid,\n                        )\n\n                        # -- XXX bypassing checks because 'ar'\n                        # is not ok for SONify... but should check\n                        # for all else being SONify\n\n                        tt = self._dynamic_trials[-1]\n                        assert tt['tid'] == tid\n                        self.job_map[eid] = (promise, tt)\n                        tt['state'] = JOB_STATE_RUNNING\n\n        if wait:\n            if verbose:\n                print('fmin: Waiting on remaining jobs...')\n            self.wait(verbose=verbose)\n\n        return self.argmin\n\n    def wait(self, verbose=False, verbose_print_interval=1.0):\n        last_print_time = 0\n        while True:\n            self.refresh()\n            if verbose and last_print_time + verbose_print_interval < time():\n                print('fmin: %4i/%4i/%4i/%4i  %f' % (\n                    self.count_by_state_unsynced(JOB_STATE_NEW),\n                    self.count_by_state_unsynced(JOB_STATE_RUNNING),\n                    self.count_by_state_unsynced(JOB_STATE_DONE),\n                    self.count_by_state_unsynced(JOB_STATE_ERROR),\n                    min([float('inf')] +\n                        [l for l in self.losses() if l is not None])\n                ))\n                last_print_time = time()\n            if self.count_by_state_unsynced(JOB_STATE_NEW):\n                sleep(1e-1)\n                continue\n            if self.count_by_state_unsynced(JOB_STATE_RUNNING):\n                sleep(1e-1)\n                continue\n            break\n\n    def __getstate__(self):\n        rval = dict(self.__dict__)\n        del rval['_client']\n        del rval['_trials']\n        del rval['job_map']\n        # print rval.keys()\n        return rval\n\n    def __setstate__(self, dct):\n        self.__dict__ = dct\n        self.job_map = {}\n        Trials.refresh(self)\n\n\n# Monkey patching to allow the apply_async call and response to\n# be handled on behalf of the domain.\nclass IPYAsync(object):\n\n    def __init__(self, asynchronous, domain, rv, eid, tid, ctrl):\n        self.asynchronous = asynchronous\n        self.domain = domain\n        self.rv = rv\n        self.metadata = self.asynchronous.metadata\n        self.eid = eid\n        self.tid = tid\n        self.ctrl = ctrl\n\n    def ready(self):\n        return self.asynchronous.ready()\n\n    def get(self):\n        if self.asynchronous.successful():\n            val = self.asynchronous.get()\n            return self.domain.evaluate_async2(val, self.ctrl)\n        else:\n            return self.rv\n    pass\n\n# @interactive\n\n\ndef call_domain(domain, spec, ctrl, trial, view, eid, tid):\n    rv = {'loss': None, 'status': 'fail'}\n    # TODO: rt unused\n    rt = coarse_utcnow()\n    # print \"in call domain for spec\", str(spec)\n    promise = None\n    fn, pyll_rval = domain.evaluate_async(spec, ctrl)\n    promise = IPYAsync(view.apply_async(fn, pyll_rval), domain, rv, eid, tid, ctrl)\n\n    return promise\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/main.py",
    "content": "#!/usr/bin/env python\n\n\"\"\"\nEntry point for bin/* scripts\n\"\"\"\nfrom __future__ import absolute_import\nfrom future import standard_library\nimport logging\nimport os\nfrom . import utils\nfrom .base import SerialExperiment\nimport sys\n\nstandard_library.install_aliases()\nlogger = logging.getLogger(__name__)\n\n\ntry:\n    import dill as pickler\nexcept Exception as e:\n    logger.info('Failed to load dill, try installing dill via \"pip install dill\" for enhanced pickling support.')\n    import six.moves.cPickle as pickler\n\n__authors__ = \"James Bergstra\"\n__license__ = \"3-clause BSD License\"\n__contact__ = \"github.com/hyperopt/hyperopt\"\n\n\ndef main_search():\n    from optparse import OptionParser\n    parser = OptionParser(\n        usage=\"%prog [options] [<bandit> <bandit_algo>]\")\n    parser.add_option('--load',\n                      default='',\n                      dest=\"load\",\n                      metavar='FILE',\n                      help=\"unpickle experiment from here on startup\")\n    parser.add_option('--save',\n                      default='experiment.pkl',\n                      dest=\"save\",\n                      metavar='FILE',\n                      help=\"pickle experiment to here on exit\")\n    parser.add_option(\"--steps\",\n                      dest='steps',\n                      default='100',\n                      metavar='N',\n                      help=\"exit after queuing this many jobs (default: 100)\")\n    parser.add_option(\"--workdir\",\n                      dest=\"workdir\",\n                      default=os.path.expanduser('~/.hyperopt.workdir'),\n                      help=\"create workdirs here\",\n                      metavar=\"DIR\")\n    parser.add_option(\"--bandit-argfile\",\n                      dest=\"bandit_argfile\",\n                      default=None,\n                      help=\"path to file containing arguments bandit constructor \\\n                  file format: pickle of dictionary containing two keys,\\\n                  {'args' : tuple of positional arguments, \\\n                   'kwargs' : dictionary of keyword arguments}\")\n    parser.add_option(\"--bandit-algo-argfile\",\n                      dest=\"bandit_algo_argfile\",\n                      default=None,\n                      help=\"path to file containing arguments for bandit_algo \"\n                      \"constructor.  File format is pickled dictionary containing \"\n                      \"two keys: 'args', a tuple of positional arguments, and \"\n                      \"'kwargs', a dictionary of keyword arguments. \"\n                      \"NOTE: bandit is pre-pended as first element of arg tuple.\")\n\n    (options, args) = parser.parse_args()\n    try:\n        bandit_json, bandit_algo_json = args\n    except:\n        parser.print_help()\n        return -1\n\n    try:\n        if not options.load:\n            raise IOError()\n        handle = open(options.load, 'rb')\n        self = pickler.load(handle)\n        handle.close()\n    except IOError:\n        bandit = utils.get_obj(bandit_json, argfile=options.bandit_argfile)\n        bandit_algo = utils.get_obj(bandit_algo_json,\n                                    argfile=options.bandit_algo_argfile,\n                                    args=(bandit,))\n        self = SerialExperiment(bandit_algo)\n\n    try:\n        self.run(int(options.steps))\n    finally:\n        if options.save:\n            pickler.dump(self, open(options.save, 'wb'))\n\n\ndef main(cmd, fn_pos=1):\n    \"\"\"\n    Entry point for bin/* scripts\n    XXX\n    \"\"\"\n    logging.basicConfig(\n        stream=sys.stderr,\n        level=logging.INFO)\n    try:\n        runner = dict(\n            search='main_search',\n            dryrun='main_dryrun',\n            plot_history='main_plot_history',\n        )[cmd]\n    except KeyError:\n        logger.error(\"Command not recognized: %s\" % cmd)\n        # XXX: Usage message\n        sys.exit(1)\n    try:\n        # TODO: argv1 never used\n        argv1 = sys.argv[fn_pos]\n    except IndexError:\n        logger.error('Module name required (XXX: print Usage)')\n        return 1\n\n    # TODO: datasets is not imported at this point\n    fn = datasets.main.load_tokens(sys.argv[fn_pos].split('.') + [runner])\n    sys.exit(fn(sys.argv[fn_pos + 1:]))\n\nif __name__ == '__main__':\n    cmd = sys.argv[1]\n    sys.exit(main(cmd, 2))\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/mix.py",
    "content": "from builtins import zip\nimport numpy as np\n\n\ndef suggest(new_ids, domain, trials, seed, p_suggest):\n    \"\"\"Return the result of a randomly-chosen suggest function\n\n    For exampl to search by sometimes using random search, sometimes anneal,\n    and sometimes tpe, type:\n\n        fmin(...,\n            algo=partial(mix.suggest,\n                p_suggest=[\n                    (.1, rand.suggest),\n                    (.2, anneal.suggest),\n                    (.7, tpe.suggest),]),\n            )\n\n\n    Parameters\n    ----------\n\n    p_suggest: list of (probability, suggest) pairs\n        Make a suggestion from one of the suggest functions,\n        in proportion to its corresponding probability.\n        sum(probabilities) must be [close to] 1.0\n\n    \"\"\"\n    rng = np.random.RandomState(seed)\n    ps, suggests = list(zip(*p_suggest))\n    assert len(ps) == len(suggests) == len(p_suggest)\n    if not np.isclose(sum(ps), 1.0):\n        raise ValueError('Probabilities should sum to 1', ps)\n    idx = rng.multinomial(n=1, pvals=ps).argmax()\n    return suggests[idx](new_ids, domain, trials,\n                         seed=int(rng.randint(2 ** 31)))\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/mongoexp.py",
    "content": "\"\"\"\nMongodb-based Trials Object\n===========================\n\nComponents involved:\n\n- mongo\n    e.g. mongod ...\n\n- driver\n    e.g. hyperopt-mongo-search mongo://address bandit_json bandit_algo_json\n\n- worker\n    e.g. hyperopt-mongo-worker --loop mongo://address\n\n\nMongo\n=====\n\nMongo (daemon process mongod) is used for IPC between the driver and worker.\nConfigure it as you like, so that hyperopt-mongo-search can communicate with it.\nI think there is some support in this file for an ssh+mongo connection type.\n\nThe experiment uses the following collections for IPC:\n\n* jobs - documents of a standard form used to store suggested trials and their\n    results.  These documents have keys:\n    * spec : subdocument returned by bandit_algo.suggest\n    * exp_key: an identifier of which driver suggested this trial\n    * cmd: a tuple (protocol, ...) identifying bandit.evaluate\n    * state: 0, 1, 2, 3 for job state (new, running, ok, fail)\n    * owner: None for new jobs, (hostname, pid) for started jobs\n    * book_time: time a job was reserved\n    * refresh_time: last time the process running the job checked in\n    * result: the subdocument returned by bandit.evaluate\n    * error: for jobs of state 3, a reason for failure.\n    * logs: a dict of sequences of strings received by ctrl object\n        * info: info messages\n        * warn: warning messages\n        * error: error messages\n\n* fs - a gridfs storage collection (used for pickling)\n\n* drivers - documents describing drivers. These are used to prevent two drivers\n    from using the same exp_key simultaneously, and to attach saved states.\n    * exp_key\n    * workdir: [optional] path where workers should chdir to\n    Attachments:\n        * pkl: [optional] saved state of experiment class\n        * bandit_args_kwargs: [optional] pickled (clsname, args, kwargs) to\n             reconstruct bandit in worker processes\n\nThe MongoJobs, and CtrlObj classes as well as the main_worker\nmethod form the abstraction barrier around this database layout.\n\n\nWorker\n======\n\nA worker looks up a job in a mongo database, maps that job document to a\nrunnable python object, calls that object, and writes the return value back to\nthe database.\n\nA worker *reserves* a job by atomically identifying a document in the jobs\ncollection whose owner is None and whose state is 0, and setting the state to\n1.  If it fails to identify such a job, it loops with a random sleep interval\nof a few seconds and polls the database.\n\nIf hyperopt-mongo-worker is called with a --loop argument then it goes back to\nthe database after finishing a job to identify and perform another one.\n\nCtrlObj\n-------\n\nThe worker allocates a CtrlObj and passes it to bandit.evaluate in addition to\nthe subdocument found at job['spec'].  A bandit can use ctrl.info, ctrl.warn,\nctrl.error and so on like logger methods, and those messages will be written\nto the mongo database (to job['logs']).  They are not written synchronously\nthough, they are written when the bandit.evaluate function calls\nctrl.checkpoint().\n\nCtrl.checkpoint does several things:\n* flushes logging messages to the database\n* updates the refresh_time\n* optionally updates the result subdocument\n\nThe main_worker routine calls Ctrl.checkpoint(rval) once after the\nbandit.evalute function has returned before setting the state to 2 or 3 to\nfinalize the job in the database.\n\n\"\"\"\nfrom __future__ import print_function\nfrom __future__ import absolute_import\nfrom future import standard_library\nimport copy\n# import hashlib\nimport logging\nimport optparse\nimport os\n# import shutil\nimport signal\nimport socket\nimport subprocess\nimport sys\nimport time\nimport urllib.parse\nimport warnings\n\nimport numpy\nimport pymongo\nimport gridfs\nfrom bson import SON\n\nfrom .base import JOB_STATES\nfrom .base import (JOB_STATE_NEW, JOB_STATE_RUNNING, JOB_STATE_DONE,\n                   JOB_STATE_ERROR)\nfrom .base import Trials\nfrom .base import InvalidTrial\nfrom .base import Ctrl\nfrom .base import SONify\nfrom .base import spec_from_misc\nfrom .utils import coarse_utcnow\nfrom .utils import fast_isin\nfrom .utils import get_most_recent_inds\nfrom .utils import json_call\nfrom .utils import working_dir, temp_dir\nimport six\nfrom six.moves import map\nfrom six.moves import range\n\n__authors__ = [\"James Bergstra\", \"Dan Yamins\"]\n__license__ = \"3-clause BSD License\"\n__contact__ = \"github.com/hyperopt/hyperopt\"\n\nstandard_library.install_aliases()\nlogger = logging.getLogger(__name__)\n\ntry:\n    import dill as pickler\nexcept Exception as e:\n    logger.info('Failed to load dill, try installing dill via \"pip install dill\" for enhanced pickling support.')\n    import six.moves.cPickle as pickler\n\n\nclass OperationFailure(Exception):\n    \"\"\"Proxy that could be factored out if we also want to use CouchDB and\n    JobmanDB classes with this interface\n    \"\"\"\n\n\nclass Shutdown(Exception):\n    \"\"\"\n    Exception for telling mongo_worker loop to quit\n    \"\"\"\n\n\nclass WaitQuit(Exception):\n    \"\"\"\n    Exception for telling mongo_worker loop to quit\n    \"\"\"\n\n\nclass InvalidMongoTrial(InvalidTrial):\n    pass\n\n\nclass DomainSwapError(Exception):\n    \"\"\"Raised when the search program tries to change the bandit attached to\n    an experiment.\n    \"\"\"\n\n\nclass ReserveTimeout(Exception):\n    \"\"\"No job was reserved in the alotted time\n    \"\"\"\n\n\ndef read_pw():\n    return open(os.path.join(os.getenv('HOME'), \".hyperopt\")).read()[:-1]\n\n\ndef parse_url(url, pwfile=None):\n    \"\"\"Unpacks a url of the form\n        protocol://[username[:pw]]@hostname[:port]/db/collection\n\n    :rtype: tuple of strings\n    :returns: protocol, username, password, hostname, port, dbname, collection\n\n    :note:\n    If the password is not given in the url but the username is, then\n    this function will read the password from file by calling\n    ``open(pwfile).read()[:-1]``\n\n    \"\"\"\n\n    protocol = url[:url.find(':')]\n    ftp_url = 'ftp' + url[url.find(':'):]\n\n    # -- parse the string as if it were an ftp address\n    tmp = urllib.parse.urlparse(ftp_url)\n    query_params = urllib.parse.parse_qs(tmp.query)\n\n    logger.info('PROTOCOL %s' % protocol)\n    logger.info('USERNAME %s' % tmp.username)\n    logger.info('HOSTNAME %s' % tmp.hostname)\n    logger.info('PORT %s' % tmp.port)\n    logger.info('PATH %s' % tmp.path)\n    \n    authdbname = None\n    if 'authSource' in query_params and len(query_params['authSource']):\n        authdbname = query_params['authSource'][-1]\n        \n    logger.info('AUTH DB %s' % authdbname)\n    \n    try:\n        _, dbname, collection = tmp.path.split('/')\n    except:\n        print(\"Failed to parse '%s'\" % (str(tmp.path)), file=sys.stderr)\n        raise\n    logger.info('DB %s' % dbname)\n    logger.info('COLLECTION %s' % collection)\n\n    if tmp.password is None:\n        if (tmp.username is not None) and pwfile:\n            password = open(pwfile).read()[:-1]\n        else:\n            password = None\n    else:\n        password = tmp.password\n    if password is not None:\n        logger.info('PASS ***')\n    port = int(float(tmp.port))  # port has to be casted explicitly here.\n\n    return (protocol, tmp.username, password, tmp.hostname, port, dbname, collection, authdbname)\n\n\ndef connection_with_tunnel(dbname, host='localhost',\n                           auth_dbname=None, port=27017,\n                           ssh=False, user='hyperopt', pw=None):\n    if ssh:\n        local_port = numpy.random.randint(low=27500, high=28000)\n        # -- forward from local to remote machine\n        ssh_tunnel = subprocess.Popen(\n            ['ssh', '-NTf', '-L',\n                    '%i:%s:%i' % (local_port, '127.0.0.1', port),\n                    host],\n        )\n        # -- give the subprocess time to set up\n        time.sleep(.5)\n        connection = pymongo.MongoClient('127.0.0.1', local_port,\n                                         document_class=SON, w=1, j=True)\n    else:\n        connection = pymongo.MongoClient(host, port, document_class=SON, w=1, j=True)\n        if user:\n            if not pw:\n                pw = read_pw()\n                \n            if user == 'hyperopt' and not auth_dbname:\n                auth_dbname = 'admin'\n                    \n            connection[dbname].authenticate(user, pw, source=auth_dbname)\n            \n        ssh_tunnel = None\n\n    # Note that the w=1 and j=True args to MongoClient above should:\n    # -- Ensure that changes are written to at least one server.\n    # -- Ensure that changes are written to the journal if there is one.\n\n    return connection, ssh_tunnel\n\n\ndef connection_from_string(s):\n    protocol, user, pw, host, port, db, collection, authdb = parse_url(s)\n    if protocol == 'mongo':\n        ssh = False\n    elif protocol in ('mongo+ssh', 'ssh+mongo'):\n        ssh = True\n    else:\n        raise ValueError('unrecognized protocol for MongoJobs', protocol)\n    connection, tunnel = connection_with_tunnel(\n        dbname=db,\n        ssh=ssh,\n        user=user,\n        pw=pw,\n        host=host,\n        port=port,\n        auth_dbname=authdb\n    )\n    return connection, tunnel, connection[db], connection[db][collection]\n\n\nclass MongoJobs(object):\n    \"\"\"\n    # Interface to a Jobs database structured like this\n    #\n    # Collections:\n    #\n    # db.jobs - structured {config_name, 'cmd', 'owner', 'book_time',\n    #                  'refresh_time', 'state', 'exp_key', 'owner', 'result'}\n    #    This is the collection that the worker nodes write to\n    #\n    # db.gfs - file storage via gridFS for all collections\n    #\n    \"\"\"\n\n    def __init__(self, db, jobs, gfs, conn, tunnel, config_name):\n        \"\"\"\n        Parameters\n        ----------\n\n        db - Mongo Database (e.g. `Connection()[dbname]`)\n            database in which all job-related info is stored\n\n        jobs - Mongo Collection handle\n            collection within `db` to use for job arguments, return vals,\n            and various bookkeeping stuff and meta-data. Typically this is\n            `db['jobs']`\n\n        gfs - Mongo GridFS handle\n            GridFS is used to store attachments - binary blobs that don't fit\n            or are awkward to store in the `jobs` collection directly.\n\n        conn - Mongo Connection\n            Why we need to keep this, I'm not sure.\n\n        tunnel - something for ssh tunneling if you're doing that\n            See `connection_with_tunnel` for more info.\n\n        config_name - string\n            XXX: No idea what this is for, seems unimportant.\n\n        \"\"\"\n        self.db = db\n        self.jobs = jobs\n        self.gfs = gfs\n        self.conn = conn\n        self.tunnel = tunnel\n        self.config_name = config_name\n\n    # TODO: rename jobs -> coll throughout\n    coll = property(lambda s: s.jobs)\n\n    @classmethod\n    def alloc(cls, dbname, host='localhost',\n              auth_dbname='admin', port=27017,\n              jobs_coll='jobs', gfs_coll='fs', ssh=False, user=None, pw=None):\n        connection, tunnel = connection_with_tunnel(\n            dbname, host, auth_dbname, port, ssh, user, pw)\n        db = connection[dbname]\n        gfs = gridfs.GridFS(db, collection=gfs_coll)\n        return cls(db, db[jobs_coll], gfs, connection, tunnel)\n\n    @classmethod\n    def new_from_connection_str(cls, conn_str, gfs_coll='fs', config_name='spec'):\n        connection, tunnel, db, coll = connection_from_string(conn_str)\n        gfs = gridfs.GridFS(db, collection=gfs_coll)\n        return cls(db, coll, gfs, connection, tunnel, config_name)\n\n    def __iter__(self):\n        return self.jobs.find()\n\n    def __len__(self):\n        try:\n            return self.jobs.count()\n        except:\n            return 0\n\n    def create_jobs_indexes(self):\n        jobs = self.db.jobs\n        for k in ['exp_key', 'result.loss', 'book_time']:\n            jobs.create_index(k)\n\n    def create_drivers_indexes(self):\n        drivers = self.db.drivers\n        drivers.create_index('exp_key', unique=True)\n\n    def create_indexes(self):\n        self.create_jobs_indexes()\n        self.create_drivers_indexes()\n\n    def jobs_complete(self, cursor=False):\n        c = self.jobs.find(filter=dict(state=JOB_STATE_DONE))\n        return c if cursor else list(c)\n\n    def jobs_error(self, cursor=False):\n        c = self.jobs.find(filter=dict(state=JOB_STATE_ERROR))\n        return c if cursor else list(c)\n\n    def jobs_running(self, cursor=False):\n        if cursor:\n            raise NotImplementedError()\n        rval = list(self.jobs.find(filter=dict(state=JOB_STATE_RUNNING)))\n        # TODO: mark some as MIA\n        rval = [r for r in rval if not r.get('MIA', False)]\n        return rval\n\n    def jobs_dead(self, cursor=False):\n        if cursor:\n            raise NotImplementedError()\n        rval = list(self.jobs.find(filter=dict(state=JOB_STATE_RUNNING)))\n        # TODO: mark some as MIA\n        rval = [r for r in rval if r.get('MIA', False)]\n        return rval\n\n    def jobs_queued(self, cursor=False):\n        c = self.jobs.find(filter=dict(state=JOB_STATE_NEW))\n        return c if cursor else list(c)\n\n    def insert(self, job):\n        \"\"\"Return a job dictionary by inserting the job dict into the database\"\"\"\n        try:\n            cpy = copy.deepcopy(job)\n            # -- this call adds an _id field to cpy\n            _id = self.jobs.insert(cpy, check_keys=True)\n            # -- so now we return the dict with the _id field\n            assert _id == cpy['_id']\n            return cpy\n        except pymongo.errors.OperationFailure as e:\n            # -- translate pymongo error class into hyperopt error class\n            #    This was meant to make it easier to catch insertion errors\n            #    in a generic way even if different databases were used.\n            #    ... but there's just MongoDB so far, so kinda goofy.\n            raise OperationFailure(e)\n\n    def delete(self, job):\n        \"\"\"Delete job[s]\"\"\"\n        try:\n            self.jobs.remove(job)\n        except pymongo.errors.OperationFailure as e:\n            # -- translate pymongo error class into hyperopt error class\n            #    see insert() code for rationale.\n            raise OperationFailure(e)\n\n    def delete_all(self, cond=None):\n        \"\"\"Delete all jobs and attachments\"\"\"\n        if cond is None:\n            cond = {}\n        try:\n            for d in self.jobs.find(filter=cond, projection=['_id', '_attachments']):\n                logger.info('deleting job %s' % d['_id'])\n                for name, file_id in d.get('_attachments', []):\n                    try:\n                        self.gfs.delete(file_id)\n                    except gridfs.errors.NoFile:\n                        logger.error('failed to remove attachment %s:%s' % (\n                            name, file_id))\n                self.jobs.remove(d)\n        except pymongo.errors.OperationFailure as e:\n            # -- translate pymongo error class into hyperopt error class\n            #    see insert() code for rationale.\n            raise OperationFailure(e)\n\n    def delete_all_error_jobs(self):\n        return self.delete_all(cond={'state': JOB_STATE_ERROR})\n\n    def reserve(self, host_id, cond=None, exp_key=None):\n        now = coarse_utcnow()\n        if cond is None:\n            cond = {}\n        else:\n            cond = copy.copy(cond)  # copy is important, will be modified, but only the top-level\n\n        if exp_key is not None:\n            cond['exp_key'] = exp_key\n\n        # having an owner of None implies state==JOB_STATE_NEW, so this effectively\n        # acts as a filter to make sure that only new jobs get reserved.\n        if cond.get('owner') is not None:\n            raise ValueError('refusing to reserve owned job')\n        else:\n            cond['owner'] = None\n            cond['state'] = JOB_STATE_NEW  # theoretically this is redundant, theoretically\n\n        try:\n            rval = self.jobs.find_and_modify(\n                cond,\n                {'$set':\n                    {'owner': host_id,\n                     'book_time': now,\n                     'state': JOB_STATE_RUNNING,\n                     'refresh_time': now,\n                     }\n                 },\n                new=True,\n                upsert=False)\n        except pymongo.errors.OperationFailure as e:\n            logger.error('Error during reserve_job: %s' % str(e))\n            rval = None\n        return rval\n\n    def refresh(self, doc):\n        self.update(doc, dict(refresh_time=coarse_utcnow()))\n\n    def update(self, doc, dct, collection=None, do_sanity_checks=True):\n        \"\"\"Return union of doc and dct, after making sure that dct has been\n        added to doc in `collection`.\n\n        This function does not modify either `doc` or `dct`.\n\n        \"\"\"\n        if collection is None:\n            collection = self.coll\n\n        dct = copy.deepcopy(dct)\n        if '_id' not in doc:\n            raise ValueError('doc must have an \"_id\" key to be updated')\n\n        if '_id' in dct:\n            if dct['_id'] != doc['_id']:\n                raise ValueError('cannot update the _id field')\n            del dct['_id']\n\n        if 'version' in dct:\n            if dct['version'] != doc['version']:\n                warnings.warn('Ignoring \"version\" field in update dictionary')\n\n        if 'version' in doc:\n            doc_query = dict(_id=doc['_id'], version=doc['version'])\n            dct['version'] = doc['version'] + 1\n        else:\n            doc_query = dict(_id=doc['_id'])\n            dct['version'] = 1\n        try:\n            # warning - if doc matches nothing then this function succeeds\n            # N.B. this matches *at most* one entry, and possibly zero\n            collection.update(\n                doc_query,\n                {'$set': dct},\n                upsert=False,\n                multi=False,)\n        except pymongo.errors.OperationFailure as e:\n            # -- translate pymongo error class into hyperopt error class\n            #    see insert() code for rationale.\n            raise OperationFailure(e)\n\n        # update doc in-place to match what happened on the server side\n        doc.update(dct)\n\n        if do_sanity_checks:\n            server_doc = collection.find_one(\n                dict(_id=doc['_id'], version=doc['version']))\n            if server_doc is None:\n                raise OperationFailure('updated doc not found : %s'\n                                       % str(doc))\n            elif server_doc != doc:\n                if 0:  # This is all commented out because it is tripping on the fact that\n                    # str('a') != unicode('a').\n                    # TODO: eliminate false alarms and catch real ones\n                    mismatching_keys = []\n                    for k, v in list(server_doc.items()):\n                        if k in doc:\n                            if doc[k] != v:\n                                mismatching_keys.append((k, v, doc[k]))\n                        else:\n                            mismatching_keys.append((k, v, '<missing>'))\n                    for k, v in list(doc.items()):\n                        if k not in server_doc:\n                            mismatching_keys.append((k, '<missing>', v))\n\n                    raise OperationFailure('local and server doc documents are out of sync: %s' %\n                                           repr((doc, server_doc, mismatching_keys)))\n        return doc\n\n    def attachment_names(self, doc):\n        def as_str(name_id):\n            assert isinstance(name_id[0], six.string_types), name_id\n            return str(name_id[0])\n        return list(map(as_str, doc.get('_attachments', [])))\n\n    def set_attachment(self, doc, blob, name, collection=None):\n        \"\"\"Attach potentially large data string `blob` to `doc` by name `name`\n\n        blob must be a string\n\n        doc must have been saved in some collection (must have an _id), but not\n        necessarily the jobs collection.\n\n        name must be a string\n\n        Returns None\n        \"\"\"\n\n        # If there is already a file with the given name for this doc, then we will delete it\n        # after writing the new file\n        attachments = doc.get('_attachments', [])\n        name_matches = [a for a in attachments if a[0] == name]\n\n        # the filename is set to something so that fs.list() will display the file\n        new_file_id = self.gfs.put(blob, filename='%s_%s' % (doc['_id'], name))\n        logger.info('stored blob of %i bytes with id=%s and filename %s_%s' % (\n            len(blob), str(new_file_id), doc['_id'], name))\n\n        new_attachments = ([a for a in attachments if a[0] != name] +\n                           [(name, new_file_id)])\n\n        try:\n            ii = 0\n            doc = self.update(doc, {'_attachments': new_attachments},\n                              collection=collection)\n            # there is a database leak until we actually delete the files that\n            # are no longer pointed to by new_attachments\n            while ii < len(name_matches):\n                self.gfs.delete(name_matches[ii][1])\n                ii += 1\n        except:\n            while ii < len(name_matches):\n                logger.warning(\"Leak during set_attachment: old_file_id=%s\" % (\n                    name_matches[ii][1]))\n                ii += 1\n            raise\n        assert len([n for n in self.attachment_names(doc) if n == name]) == 1\n        # return new_file_id\n\n    def get_attachment(self, doc, name):\n        \"\"\"Retrieve data attached to `doc` by `attach_blob`.\n\n        Raises OperationFailure if `name` does not correspond to an attached blob.\n\n        Returns the blob as a string.\n        \"\"\"\n        attachments = doc.get('_attachments', [])\n        file_ids = [a[1] for a in attachments if a[0] == name]\n        if not file_ids:\n            raise OperationFailure('Attachment not found: %s' % name)\n        if len(file_ids) > 1:\n            raise OperationFailure('multiple name matches', (name, file_ids))\n        return self.gfs.get(file_ids[0]).read()\n\n    def delete_attachment(self, doc, name, collection=None):\n        attachments = doc.get('_attachments', [])\n        file_id = None\n        for i, a in enumerate(attachments):\n            if a[0] == name:\n                file_id = a[1]\n                break\n        if file_id is None:\n            raise OperationFailure('Attachment not found: %s' % name)\n        del attachments[i]\n        self.update(doc, {'_attachments': attachments}, collection=collection)\n        self.gfs.delete(file_id)\n\n\nclass MongoTrials(Trials):\n    \"\"\"Trials maps on to an entire mongo collection. It's basically a wrapper\n    around MongoJobs for now.\n\n    As a concession to performance, this object permits trial filtering based\n    on the exp_key, but I feel that's a hack. The case of `cmd` is similar--\n    the exp_key and cmd are semantically coupled.\n\n    WRITING TO THE DATABASE\n    -----------------------\n    The trials object is meant for *reading* a trials database. Writing\n    to a database is different enough from writing to an in-memory\n    collection that no attempt has been made to abstract away that\n    difference.  If you want to update the documents within\n    a MongoTrials collection, then retrieve the `.handle` attribute (a\n    MongoJobs instance) and use lower-level methods, or pymongo's\n    interface directly.  When you are done writing, call refresh() or\n    refresh_tids() to bring the MongoTrials up to date.\n    \"\"\"\n    asynchronous = True\n\n    def __init__(self, arg, exp_key=None, cmd=None, workdir=None,\n                 refresh=True):\n        if isinstance(arg, MongoJobs):\n            self.handle = arg\n        else:\n            connection_string = arg\n            self.handle = MongoJobs.new_from_connection_str(connection_string)\n        self.handle.create_indexes()\n        self._exp_key = exp_key\n        self.cmd = cmd\n        self.workdir = workdir\n        if refresh:\n            self.refresh()\n\n    def view(self, exp_key=None, cmd=None, workdir=None, refresh=True):\n        rval = self.__class__(self.handle,\n                              exp_key=self._exp_key if exp_key is None else exp_key,\n                              cmd=self.cmd if cmd is None else cmd,\n                              workdir=self.workdir if workdir is None else workdir,\n                              refresh=refresh)\n        return rval\n\n    def refresh_tids(self, tids):\n        \"\"\" Sync documents with `['tid']` in the list of `tids` from the\n        database (not *to* the database).\n\n        Local trial documents whose tid is not in `tids` are not\n        affected by this call.  Local trial documents whose tid is in `tids` may\n        be:\n\n        * *deleted* (if db no longer has corresponding document), or\n        * *updated* (if db has an updated document) or,\n        * *left alone* (if db document matches local one).\n\n        Additionally, if the db has a matching document, but there is no\n        local trial with a matching tid, then the db document will be\n        *inserted* into the local collection.\n\n        \"\"\"\n        exp_key = self._exp_key\n        if exp_key != None:\n            query = {'exp_key': exp_key}\n        else:\n            query = {}\n        t0 = time.time()\n        query['state'] = {'$ne': JOB_STATE_ERROR}\n        if tids is not None:\n            query['tid'] = {'$in': list(tids)}\n        orig_trials = getattr(self, '_trials', [])\n        _trials = orig_trials[:]  # copy to make sure it doesn't get screwed up\n        if _trials:\n            db_data = list(self.handle.jobs.find(query,\n                                                 projection=['_id', 'version']))\n            # -- pull down a fresh list of ids from mongo\n            if db_data:\n                # make numpy data arrays\n                db_data = numpy.rec.array([(x['_id'], int(x['version']))\n                                           for x in db_data],\n                                          names=['_id', 'version'])\n                db_data.sort(order=['_id', 'version'])\n                db_data = db_data[get_most_recent_inds(db_data)]\n\n                existing_data = numpy.rec.array([(x['_id'],\n                                                  int(x['version'])) for x in _trials],\n                                                names=['_id', 'version'])\n                existing_data.sort(order=['_id', 'version'])\n\n                # which records are in db but not in existing, and vice versa\n                db_in_existing = fast_isin(db_data['_id'], existing_data['_id'])\n                existing_in_db = fast_isin(existing_data['_id'], db_data['_id'])\n\n                # filtering out out-of-date records\n                _trials = [_trials[_ind] for _ind in existing_in_db.nonzero()[0]]\n\n                # new data is what's in db that's not in existing\n                new_data = db_data[numpy.invert(db_in_existing)]\n\n                # having removed the new and out of data data,\n                # concentrating on data in db and existing for state changes\n                db_data = db_data[db_in_existing]\n                existing_data = existing_data[existing_in_db]\n                try:\n                    assert len(db_data) == len(existing_data)\n                    assert (existing_data['_id'] == db_data['_id']).all()\n                    assert (existing_data['version'] <= db_data['version']).all()\n                except:\n                    reportpath = os.path.join(os.getcwd(),\n                                              'hyperopt_refresh_crash_report_' +\n                                              str(numpy.random.randint(1e8)) + '.pkl')\n                    logger.error('HYPEROPT REFRESH ERROR: writing error file to %s' % reportpath)\n                    _file = open(reportpath, 'w')\n                    pickler.dump({'db_data': db_data,\n                                 'existing_data': existing_data},\n                                _file)\n                    _file.close()\n                    raise\n\n                same_version = existing_data['version'] == db_data['version']\n                _trials = [_trials[_ind] for _ind in same_version.nonzero()[0]]\n                version_changes = existing_data[numpy.invert(same_version)]\n\n                # actually get the updated records\n                update_ids = new_data['_id'].tolist() + version_changes['_id'].tolist()\n                num_new = len(update_ids)\n                update_query = copy.deepcopy(query)\n                update_query['_id'] = {'$in': update_ids}\n                updated_trials = list(self.handle.jobs.find(update_query))\n                _trials.extend(updated_trials)\n            else:\n                num_new = 0\n                _trials = []\n        else:\n            # this case is for performance, though should be able to be removed\n            # without breaking correctness.\n            _trials = list(self.handle.jobs.find(query))\n            if _trials:\n                _trials = [_trials[_i] for _i in get_most_recent_inds(_trials)]\n            num_new = len(_trials)\n\n        logger.debug('Refresh data download took %f seconds for %d ids' %\n                     (time.time() - t0, num_new))\n\n        if tids is not None:\n            # -- If tids were given, then _trials only contains\n            #    documents with matching tids. Here we augment these\n            #    fresh matching documents, with our current ones whose\n            #    tids don't match.\n            new_trials = _trials\n            tids_set = set(tids)\n            assert all(t['tid'] in tids_set for t in new_trials)\n            old_trials = [t for t in orig_trials if t['tid'] not in tids_set]\n            _trials = new_trials + old_trials\n\n        # -- reassign new trials to self, in order of increasing tid\n        jarray = numpy.array([j['_id'] for j in _trials])\n        jobsort = jarray.argsort()\n        self._trials = [_trials[_idx] for _idx in jobsort]\n        self._specs = [_trials[_idx]['spec'] for _idx in jobsort]\n        self._results = [_trials[_idx]['result'] for _idx in jobsort]\n        self._miscs = [_trials[_idx]['misc'] for _idx in jobsort]\n\n    def refresh(self):\n        self.refresh_tids(None)\n\n    def _insert_trial_docs(self, docs):\n        rval = []\n        for doc in docs:\n            rval.append(self.handle.jobs.insert(doc))\n        return rval\n\n    def count_by_state_unsynced(self, arg):\n        exp_key = self._exp_key\n        # TODO: consider searching by SON rather than dict\n        if isinstance(arg, int):\n            if arg not in JOB_STATES:\n                raise ValueError('invalid state', arg)\n            query = dict(state=arg)\n        else:\n            assert hasattr(arg, '__iter__')\n            states = list(arg)\n            assert all([x in JOB_STATES for x in states])\n            query = dict(state={'$in': states})\n        if exp_key != None:\n            query['exp_key'] = exp_key\n        rval = self.handle.jobs.find(query).count()\n        return rval\n\n    def delete_all(self, cond=None):\n        if cond is None:\n            cond = {}\n        else:\n            cond = dict(cond)\n\n        if self._exp_key:\n            cond['exp_key'] = self._exp_key\n        # -- remove all documents matching condition\n        self.handle.delete_all(cond)\n        gfs = self.handle.gfs\n        for filename in gfs.list():\n            try:\n                fdoc = gfs.get_last_version(filename=filename, **cond)\n            except gridfs.errors.NoFile:\n                continue\n            gfs.delete(fdoc._id)\n        self.refresh()\n\n    def new_trial_ids(self, N):\n        db = self.handle.db\n        # N.B. that the exp key is *not* used here. It was once, but it caused\n        # a nasty bug: tids were generated by a global experiment\n        # with exp_key=None, running a suggest() that introduced sub-experiments\n        # with exp_keys, which ran jobs that did result injection.  The tids of\n        # injected jobs were sometimes unique within an experiment, and\n        # sometimes not. Hilarious!\n        #\n        # Solution: tids are generated to be unique across the db, not just\n        # within an exp_key.\n        #\n\n        # -- mongo docs say you can't upsert an empty document\n        query = {'a': 0}\n\n        doc = None\n        while doc is None:\n            doc = db.job_ids.find_and_modify(\n                query,\n                {'$inc': {'last_id': N}},\n                upsert=True)\n            if doc is None:\n                logger.warning('no last_id found, re-trying')\n                time.sleep(1.0)\n        lid = doc.get('last_id', 0)\n        return list(range(lid, lid + N))\n\n    def trial_attachments(self, trial):\n        \"\"\"\n        Attachments to a single trial (e.g. learned weights)\n\n        Returns a dictionary interface to the attachments.\n        \"\"\"\n\n        # don't offer more here than in MongoCtrl\n        class Attachments(object):\n\n            def __contains__(_self, name):\n                return name in self.handle.attachment_names(doc=trial)\n\n            def __len__(_self):\n                return len(self.handle.attachment_names(doc=trial))\n\n            def __iter__(_self):\n                return iter(self.handle.attachment_names(doc=trial))\n\n            def __getitem__(_self, name):\n                try:\n                    return self.handle.get_attachment(\n                        doc=trial,\n                        name=name)\n                except OperationFailure:\n                    raise KeyError(name)\n\n            def __setitem__(_self, name, value):\n                self.handle.set_attachment(\n                    doc=trial,\n                    blob=value,\n                    name=name,\n                    collection=self.handle.db.jobs)\n\n            def __delitem__(_self, name):\n                raise NotImplementedError('delete trial_attachment')\n\n            def keys(self):\n                return [k for k in self]\n\n            def values(self):\n                return [self[k] for k in self]\n\n            def items(self):\n                return [(k, self[k]) for k in self]\n\n        return Attachments()\n\n    @property\n    def attachments(self):\n        \"\"\"\n        Attachments to a Trials set (such as bandit args).\n\n        Support syntax for load:  self.attachments[name]\n        Support syntax for store: self.attachments[name] = value\n        \"\"\"\n        gfs = self.handle.gfs\n\n        query = {}\n        if self._exp_key:\n            query['exp_key'] = self._exp_key\n\n        class Attachments(object):\n\n            def __iter__(_self):\n                if query:\n                    # -- gfs.list does not accept query kwargs\n                    #    (at least, as of pymongo 2.4)\n                    filenames = [fname\n                                 for fname in gfs.list()\n                                 if fname in _self]\n                else:\n                    filenames = gfs.list()\n                return iter(filenames)\n\n            def __contains__(_self, name):\n                return gfs.exists(filename=name, **query)\n\n            def __getitem__(_self, name):\n                try:\n                    rval = gfs.get_version(filename=name, **query).read()\n                    return rval\n                except gridfs.NoFile:\n                    raise KeyError(name)\n\n            def __setitem__(_self, name, value):\n                if gfs.exists(filename=name, **query):\n                    gout = gfs.get_last_version(filename=name, **query)\n                    gfs.delete(gout._id)\n                gfs.put(value, filename=name, encoding='utf-8', **query)\n\n            def __delitem__(_self, name):\n                gout = gfs.get_last_version(filename=name, **query)\n                gfs.delete(gout._id)\n\n        return Attachments()\n\n\nclass MongoWorker(object):\n    poll_interval = 3.0  # -- seconds\n    workdir = None\n\n    def __init__(self, mj,\n                 poll_interval=poll_interval,\n                 workdir=workdir,\n                 exp_key=None,\n                 logfilename='logfile.txt',\n                 ):\n        \"\"\"\n        mj - MongoJobs interface to jobs collection\n        poll_interval - seconds\n        workdir - string\n        exp_key - restrict reservations to this key\n        \"\"\"\n        self.mj = mj\n        self.poll_interval = poll_interval\n        self.workdir = workdir\n        self.exp_key = exp_key\n        self.logfilename = logfilename\n\n    def make_log_handler(self):\n        self.log_handler = logging.FileHandler(self.logfilename)\n        self.log_handler.setFormatter(\n            logging.Formatter(\n                fmt='%(levelname)s (%(name)s): %(message)s'))\n        self.log_handler.setLevel(logging.INFO)\n\n    def run_one(self,\n                host_id=None,\n                reserve_timeout=None,\n                erase_created_workdir=False,\n                ):\n        if host_id == None:\n            host_id = '%s:%i' % (socket.gethostname(), os.getpid()),\n        job = None\n        start_time = time.time()\n        mj = self.mj\n        while job is None:\n            if (reserve_timeout and\n               (time.time() - start_time) > reserve_timeout):\n                raise ReserveTimeout()\n            job = mj.reserve(host_id, exp_key=self.exp_key)\n            if not job:\n                interval = (1 +\n                            numpy.random.rand() *\n                            (float(self.poll_interval) - 1.0))\n                logger.info('no job found, sleeping for %.1fs' % interval)\n                time.sleep(interval)\n\n        logger.debug('job found: %s' % str(job))\n\n        # -- don't let the cmd mess up our trial object\n        spec = spec_from_misc(job['misc'])\n\n        ctrl = MongoCtrl(\n            trials=MongoTrials(mj, exp_key=job['exp_key'], refresh=False),\n            read_only=False,\n            current_trial=job)\n        if self.workdir is None:\n            workdir = job['misc'].get('workdir', os.getcwd())\n            if workdir is None:\n                workdir = ''\n            workdir = os.path.join(workdir, str(job['_id']))\n        else:\n            workdir = self.workdir\n        workdir = os.path.abspath(os.path.expanduser(workdir))\n        try:\n            root_logger = logging.getLogger()\n            if self.logfilename:\n                self.make_log_handler()\n                root_logger.addHandler(self.log_handler)\n\n            cmd = job['misc']['cmd']\n            cmd_protocol = cmd[0]\n            try:\n                if cmd_protocol == 'cpickled fn':\n                    worker_fn = pickler.loads(cmd[1])\n                elif cmd_protocol == 'call evaluate':\n                    bandit = pickler.loads(cmd[1])\n                    worker_fn = bandit.evaluate\n                elif cmd_protocol == 'token_load':\n                    cmd_toks = cmd[1].split('.')\n                    cmd_module = '.'.join(cmd_toks[:-1])\n                    worker_fn = exec_import(cmd_module, cmd[1])\n                elif cmd_protocol == 'bandit_json evaluate':\n                    bandit = json_call(cmd[1])\n                    worker_fn = bandit.evaluate\n                elif cmd_protocol == 'driver_attachment':\n                    # name = 'driver_attachment_%s' % job['exp_key']\n                    blob = ctrl.trials.attachments[cmd[1]]\n                    bandit_name, bandit_args, bandit_kwargs = pickler.loads(blob)\n                    worker_fn = json_call(bandit_name,\n                                          args=bandit_args,\n                                          kwargs=bandit_kwargs).evaluate\n                elif cmd_protocol == 'domain_attachment':\n                    blob = ctrl.trials.attachments[cmd[1]]\n                    try:\n                        domain = pickler.loads(blob)\n                    except BaseException as e:\n                        logger.info(\n                            'Error while unpickling.')\n                        raise\n                    worker_fn = domain.evaluate\n                else:\n                    raise ValueError('Unrecognized cmd protocol', cmd_protocol)\n\n                with temp_dir(workdir, erase_created_workdir), working_dir(workdir):\n                    result = worker_fn(spec, ctrl)\n                    result = SONify(result)\n            except BaseException as e:\n                # XXX: save exception to database, but if this fails, then\n                #      at least raise the original traceback properly\n                logger.info('job exception: %s' % str(e))\n                ctrl.checkpoint()\n                mj.update(job,\n                          {'state': JOB_STATE_ERROR,\n                           'error': (str(type(e)), str(e))})\n                raise\n        finally:\n            if self.logfilename:\n                root_logger.removeHandler(self.log_handler)\n\n        logger.info('job finished: %s' % str(job['_id']))\n        attachments = result.pop('attachments', {})\n        for aname, aval in list(attachments.items()):\n            logger.info(\n                'mongoexp: saving attachment name=%s (%i bytes)' % (\n                    aname, len(aval)))\n            ctrl.attachments[aname] = aval\n        ctrl.checkpoint(result)\n        mj.update(job, {'state': JOB_STATE_DONE})\n\n\nclass MongoCtrl(Ctrl):\n    \"\"\"\n    Attributes:\n\n    current_trial - current job document\n    jobs - MongoJobs object in which current_trial resides\n    read_only - True means don't change the db\n\n    \"\"\"\n\n    def __init__(self, trials, current_trial, read_only):\n        self.trials = trials\n        self.current_trial = current_trial\n        self.read_only = read_only\n\n    def debug(self, *args, **kwargs):\n        # XXX: This is supposed to log to db\n        return logger.debug(*args, **kwargs)\n\n    def info(self, *args, **kwargs):\n        # XXX: This is supposed to log to db\n        return logger.info(*args, **kwargs)\n\n    def warn(self, *args, **kwargs):\n        # XXX: This is supposed to log to db\n        return logger.warn(*args, **kwargs)\n\n    def error(self, *args, **kwargs):\n        # XXX: This is supposed to log to db\n        return logger.error(*args, **kwargs)\n\n    def checkpoint(self, result=None):\n        if not self.read_only:\n            handle = self.trials.handle\n            handle.refresh(self.current_trial)\n            if result is not None:\n                return handle.update(self.current_trial, dict(result=result))\n\n    @property\n    def attachments(self):\n        \"\"\"\n        Support syntax for load:  self.attachments[name]\n        Support syntax for store: self.attachments[name] = value\n        \"\"\"\n        return self.trials.trial_attachments(trial=self.current_trial)\n\n    @property\n    def set_attachment(self):\n        # XXX: Is there a better deprecation error?\n        raise RuntimeError(\n            'set_attachment deprecated. Use `self.attachments[name] = value`')\n\n\ndef exec_import(cmd_module, cmd):\n    worker_fn = None\n    exec('import %s; worker_fn = %s' % (cmd_module, cmd))\n    return worker_fn\n\n\ndef as_mongo_str(s):\n    if s.startswith('mongo://'):\n        return s\n    else:\n        return 'mongo://%s' % s\n\n\ndef main_worker_helper(options, args):\n    N = int(options.max_jobs)\n    if options.last_job_timeout is not None:\n        last_job_timeout = time.time() + float(options.last_job_timeout)\n    else:\n        last_job_timeout = None\n\n    def sighandler_shutdown(signum, frame):\n        logger.info('Caught signal %i, shutting down.' % signum)\n        raise Shutdown(signum)\n\n    def sighandler_wait_quit(signum, frame):\n        logger.info('Caught signal %i, shutting down.' % signum)\n        raise WaitQuit(signum)\n\n    signal.signal(signal.SIGINT, sighandler_shutdown)\n    signal.signal(signal.SIGHUP, sighandler_shutdown)\n    signal.signal(signal.SIGTERM, sighandler_shutdown)\n    signal.signal(signal.SIGUSR1, sighandler_wait_quit)\n\n    if N > 1:\n        proc = None\n        cons_errs = 0\n        if last_job_timeout and time.time() > last_job_timeout:\n            logger.info(\"Exiting due to last_job_timeout\")\n            return\n\n        while N and cons_errs < int(options.max_consecutive_failures):\n            try:\n                # recursive Popen, dropping N from the argv\n                # By using another process to run this job\n                # we protect ourselves from memory leaks, bad cleanup\n                # and other annoying details.\n                # The tradeoff is that a large dataset must be reloaded once for\n                # each subprocess.\n                sub_argv = [sys.argv[0],\n                            '--poll-interval=%s' % options.poll_interval,\n                            '--max-jobs=1',\n                            '--mongo=%s' % options.mongo,\n                            '--reserve-timeout=%s' % options.reserve_timeout]\n                if options.workdir is not None:\n                    sub_argv.append('--workdir=%s' % options.workdir)\n                if options.exp_key is not None:\n                    sub_argv.append('--exp-key=%s' % options.exp_key)\n                proc = subprocess.Popen(sub_argv)\n                retcode = proc.wait()\n                proc = None\n\n            except Shutdown:\n                # this is the normal way to stop the infinite loop (if originally N=-1)\n                if proc:\n                    # proc.terminate() is only available as of 2.6\n                    os.kill(proc.pid, signal.SIGTERM)\n                    return proc.wait()\n                else:\n                    return 0\n\n            except WaitQuit:\n                # -- sending SIGUSR1 to a looping process will cause it to\n                # break out of the loop after the current subprocess finishes\n                # normally.\n                if proc:\n                    return proc.wait()\n                else:\n                    return 0\n\n            if retcode != 0:\n                cons_errs += 1\n            else:\n                cons_errs = 0\n            N -= 1\n        logger.info(\"exiting with N=%i after %i consecutive exceptions\" % (\n            N, cons_errs))\n    elif N == 1:\n        # XXX: the name of the jobs collection is a parameter elsewhere,\n        #      so '/jobs' should not be hard-coded here\n        mj = MongoJobs.new_from_connection_str(\n            as_mongo_str(options.mongo) + '/jobs')\n\n        mworker = MongoWorker(mj,\n                              float(options.poll_interval),\n                              workdir=options.workdir,\n                              exp_key=options.exp_key)\n        mworker.run_one(reserve_timeout=float(options.reserve_timeout))\n    else:\n        raise ValueError(\"N <= 0\")\n\n\ndef main_worker():\n    parser = optparse.OptionParser(usage=\"%prog [options]\")\n\n    parser.add_option(\"--exp-key\",\n                      dest='exp_key',\n                      default=None,\n                      metavar='str',\n                      help=\"identifier for this workers's jobs\")\n    parser.add_option(\"--last-job-timeout\",\n                      dest='last_job_timeout',\n                      metavar='T',\n                      default=None,\n                      help=\"Do not reserve a job after T seconds have passed\")\n    parser.add_option(\"--max-consecutive-failures\",\n                      dest=\"max_consecutive_failures\",\n                      metavar='N',\n                      default=4,\n                      help=\"stop if N consecutive jobs fail (default: 4)\")\n    parser.add_option(\"--max-jobs\",\n                      dest='max_jobs',\n                      default=sys.maxsize,\n                      help=\"stop after running this many jobs (default: inf)\")\n    parser.add_option(\"--mongo\",\n                      dest='mongo',\n                      default='localhost/hyperopt',\n                      help=\"<host>[:port]/<db> for IPC and job storage\")\n    parser.add_option(\"--poll-interval\",\n                      dest='poll_interval',\n                      metavar='N',\n                      default=5,\n                      help=\"check work queue every 1 < T < N seconds (default: 5\")\n    parser.add_option(\"--reserve-timeout\",\n                      dest='reserve_timeout',\n                      metavar='T',\n                      default=120.0,\n                      help=\"poll database for up to T seconds to reserve a job\")\n    parser.add_option(\"--workdir\",\n                      dest=\"workdir\",\n                      default=None,\n                      help=\"root workdir (default: load from mongo)\",\n                      metavar=\"DIR\")\n\n    (options, args) = parser.parse_args()\n\n    if args:\n        parser.print_help()\n        return -1\n\n    return main_worker_helper(options, args)\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/plotting.py",
    "content": "\"\"\"\nFunctions to visualize an Experiment.\n\n\"\"\"\nfrom __future__ import print_function\nimport math\nimport sys\nfrom past.builtins import xrange\nfrom hyperopt.mongoexp import MongoJobs\ntry:\n    unicode = unicode\nexcept NameError:\n    basestring = (str, bytes)\nelse:\n    basestring = basestring\n# -- don't import this here because it locks in the backend\n#    and we want the unittests to be able to set the backend\n# TODO: this is really bad style, create a backend plotting\n# module for this that defaults to matplotlib.\n# import matplotlib.pyplot as plt\n\nimport numpy as np\nfrom . import base\nfrom .base import miscs_to_idxs_vals\n\n__authors__ = \"James Bergstra\"\n__license__ = \"3-clause BSD License\"\n__contact__ = \"github.com/hyperopt/hyperopt\"\n\ndefault_status_colors = {\n    base.STATUS_NEW: 'k',\n    base.STATUS_RUNNING: 'g',\n    base.STATUS_OK: 'b',\n    base.STATUS_FAIL: 'r'}\n\n\ndef algo_as_str(algo):\n    if isinstance(algo, basestring):\n        return algo\n    return str(algo)\n\n\ndef main_plot_history(trials, bandit=None, algo=None, do_show=True,\n                      status_colors=None):\n    # -- import here because file-level import is too early\n    import matplotlib.pyplot as plt\n\n    # self is an Experiment\n    if status_colors is None:\n        status_colors = default_status_colors\n\n    # XXX: show the un-finished or error trials\n    Ys, colors = zip(*[(y, status_colors[s])\n                       for y, s in zip(trials.losses(bandit), trials.statuses(bandit))\n                       if y is not None])\n    plt.scatter(range(len(Ys)), Ys, c=colors)\n    plt.xlabel('time')\n    plt.ylabel('loss')\n\n    if bandit is not None and bandit.loss_target is not None:\n        plt.axhline(bandit.loss_target)\n        ymin = min(np.min(Ys), bandit.loss_target)\n        ymax = max(np.max(Ys), bandit.loss_target)\n        yrange = ymax - ymin\n        ymean = (ymax + ymin) / 2.0\n        plt.ylim(\n            ymean - 0.53 * yrange,\n            ymean + 0.53 * yrange,\n        )\n    best_err = trials.average_best_error(bandit)\n    print(\"avg best error:\", best_err)\n    plt.axhline(best_err, c='g')\n\n    plt.title('bandit: %s algo: %s' % (\n        bandit.short_str() if bandit else '-',\n        algo_as_str(algo)))\n    if do_show:\n        plt.show()\n\n\ndef main_plot_histogram(trials, bandit=None, algo=None, do_show=True):\n    # -- import here because file-level import is too early\n    import matplotlib.pyplot as plt\n\n    status_colors = default_status_colors\n    Xs, Ys, Ss, Cs = zip(*[(x, y, s, status_colors[s])\n                           for (x, y, s) in zip(trials.specs, trials.losses(bandit),\n                                                trials.statuses(bandit))\n                           if y is not None])\n\n    # XXX: deal with ok vs. un-finished vs. error trials\n    print('Showing Histogram of %i jobs' % len(Ys))\n    plt.hist(Ys)\n    plt.xlabel('loss')\n    plt.ylabel('frequency')\n\n    plt.title('bandit: %s algo: %s' % (\n        bandit.short_str() if bandit else '-',\n        algo_as_str(algo)))\n    if do_show:\n        plt.show()\n\n\ndef main_plot_vars(trials, bandit=None, do_show=True, fontsize=10,\n                   colorize_best=None,\n                   columns=5,\n                   ):\n    # -- import here because file-level import is too early\n    import matplotlib.pyplot as plt\n\n    idxs, vals = miscs_to_idxs_vals(trials.miscs)\n    losses = trials.losses()\n    finite_losses = [y for y in losses if y not in (None, float('inf'))]\n    asrt = np.argsort(finite_losses)\n    if colorize_best != None:\n        colorize_thresh = finite_losses[asrt[colorize_best + 1]]\n    else:\n        # -- set to lower than best (disabled)\n        colorize_thresh = finite_losses[asrt[0]] - 1\n\n    loss_min = min(finite_losses)\n    loss_max = max(finite_losses)\n    print('finite loss range', loss_min, loss_max, colorize_thresh)\n\n    loss_by_tid = dict(zip(trials.tids, losses))\n\n    def color_fn(lossval):\n        if lossval is None:\n            return (1, 1, 1)\n        else:\n            t = 4 * (lossval - loss_min) / (loss_max - loss_min + .0001)\n            if t < 1:\n                return t, 0, 0\n            if t < 2:\n                return 2 - t, t - 1, 0\n            if t < 3:\n                return 0, 3 - t, t - 2\n            return 0, 0, 4 - t\n\n    def color_fn_bw(lossval):\n        if lossval in (None, float('inf')):\n            return (1, 1, 1)\n        else:\n            t = (lossval - loss_min) / (loss_max - loss_min + .0001)\n            if lossval < colorize_thresh:\n                return (0., 1. - t, 0.)  # -- red best black worst\n            else:\n                return (t, t, t)    # -- white=worst, black=best\n\n    all_labels = list(idxs.keys())\n    titles = ['%s (%s)' % (label, bandit.params[label].name)\n              for label in all_labels]\n    order = np.argsort(titles)\n\n    C = columns\n    R = int(np.ceil(len(all_labels) / float(C)))\n\n    for plotnum, varnum in enumerate(order):\n        label = all_labels[varnum]\n        plt.subplot(R, C, plotnum + 1)\n\n        # hide x ticks\n        ticks_num, ticks_txt = plt.xticks()\n        plt.xticks(ticks_num, ['' for i in xrange(len(ticks_num))])\n\n        dist_name = bandit.params[label].name\n        x = idxs[label]\n        if 'log' in dist_name:\n            y = np.log(vals[label])\n        else:\n            y = vals[label]\n        plt.title(titles[varnum], fontsize=fontsize)\n        c = list(map(color_fn_bw, [loss_by_tid[ii] for ii in idxs[label]]))\n        if len(y):\n            plt.scatter(x, y, c=c)\n        if 'log' in dist_name:\n            nums, texts = plt.yticks()\n            plt.yticks(nums, ['%.2e' % np.exp(t) for t in nums])\n\n    if do_show:\n        plt.show()\n\n\nif 0:\n    def erf(x):\n        \"\"\"Erf impl that doesn't require scipy.\n        \"\"\"\n        # from http://www.math.sfu.ca/~cbm/aands/frameindex.htm\n        # via\n        # http://stackoverflow.com/questions/457408/\n        #      is-there-an-easily-available-implementation-of-erf-for-python\n        #\n        #\n\n        # save the sign of x\n        sign = 1\n        if x < 0:\n            sign = -1\n        x = abs(x)\n\n        # constants\n        a1 = 0.254829592\n        a2 = -0.284496736\n        a3 = 1.421413741\n        a4 = -1.453152027\n        a5 = 1.061405429\n        p = 0.3275911\n\n        # A&S formula 7.1.26\n        t = 1.0 / (1.0 + p * x)\n        y = 1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * math.exp(-x * x)\n        return sign * y  # erf(-x) = -erf(x)\n\n    def mixed_max_erf(scores, n_valid):\n        scores = list(scores)  # shallow copy\n        scores.sort()         # sort the copy\n        scores.reverse()      # reverse the order\n\n        # this is valid for classification\n        # where the scores are the means of Bernoulli variables.\n        best_mean = scores[0][0]\n        best_variance = best_mean * (1.0 - best_mean) / (n_valid - 1)\n\n        rval = 0.0\n        rval_denom = 0.0\n\n        for i, (vscore, tscore) in enumerate(scores):\n            mean = vscore\n            variance = mean * (1.0 - mean) / (n_valid - 1)\n            diff_mean = mean - best_mean\n            diff_variance = variance + best_variance\n            # for scores, which should approach 1, the diff here will be negative (or zero).\n            # so the probability of the current point being the best is the probability that\n            # the current gaussian puts on positive values.\n            assert diff_mean <= 0.0\n            p_current_is_best = 0.5 - 0.5 * erf(-diff_mean / math.sqrt(diff_variance))\n            rval += p_current_is_best * tscore\n            rval_denom += p_current_is_best\n            if p_current_is_best < 0.001:\n                break\n        return rval / rval_denom\n\n    def mixed_max_sampled(scores, n_valid, n_samples=100, rng=None):\n        scores = list(scores)  # shallow copy\n        scores.sort()         # sort the copy\n        scores.reverse()      # reverse the order\n\n        # this is valid for classification\n        # where the scores are the means of Bernoulli variables.\n        best_mean = scores[0][0]\n        best_variance = best_mean * (1.0 - best_mean) / (n_valid - 1)\n        mu = []\n        sigma = []\n        tscores = []\n        for i, (vscore, tscore) in enumerate(scores):\n            mean = vscore\n            variance = mean * (1.0 - mean) / (n_valid - 1)\n            diff_mean = mean - best_mean\n            diff_variance = variance + best_variance\n            # for scores, which should approach 1, the diff here will be negative (or zero).\n            # so the probability of the current point being the best is the probability that\n            # the current gaussian puts on positive values.\n\n            if -diff_mean / np.sqrt(diff_variance) > 3:\n                # print 'breaking after', len(tscores), len(scores)\n                break\n            else:\n                mu.append(diff_mean)\n                sigma.append(np.sqrt(diff_variance))\n                tscores.append(tscore)\n\n        if rng is None:\n            rng = np.random.RandomState(232342)\n\n        mu = np.asarray(mu)\n        sigma = np.asarray(sigma)\n        tscores = np.asarray(tscores)\n\n        nrml = rng.randn(n_samples, len(mu)) * sigma + mu\n        winners = (nrml.T == nrml.max(axis=1))\n        p_best_ = winners.sum(axis=0)\n        p_best = p_best_ / p_best_.sum()\n\n        # TODO: t_scores is undefined\n        return np.dot(p_best, t_scores), p_best\n\n\nif 0:\n    def rexp_plot_acc(scores, n_valid, n_test, pbest_n_samples=100, rng=None):\n        \"\"\"\n        Uses the current pyplot figure to show efficiency of random experiment.\n\n        :type scores: a list of (validation accuracy, test accuracy)  pairs\n        :param scores: results from the trials of a random experiment\n\n        :type n_valid: integer\n        :param n_valid: size of the validation set\n\n        :type n_test: integer\n        :param n_test: size of the test set\n\n        :type mixed_max: function like mixed_max_erf or mixed_max_sampled\n        :param mixed_max: the function to estimate the maximum of a validation sample\n\n        \"\"\"\n        if rng is None:\n            rng = np.random.RandomState(232342)\n        K = 1\n        scatter_x = []\n        scatter_y = []\n        scatter_c = []\n        box_x = []\n        log_K = 0\n        while K < len(scores):\n            n_batches_of_K = len(scores) // K\n            if n_batches_of_K < 2:\n                break\n\n            def best_score(i):\n                scores_i = scores[i * K:(i + 1) * K]\n                rval = np.dot(\n                    [tscore for (vscore, tscore) in scores_i],\n                    # TODO: where is pbest_sampled defined?\n                    pbest_sampled(\n                        [vscore for (vscore, tscore) in scores_i],\n                        n_valid,\n                        n_samples=pbest_n_samples,\n                        rng=rng))\n                # print rval\n                return rval\n\n            if n_batches_of_K < 10:\n                # use scatter plot\n                for i in xrange(n_batches_of_K):\n                    scatter_x.append(log_K + 1)\n                    scatter_y.append(best_score(i))\n                    scatter_c.append((0, 0, 0))\n                box_x.append([])\n            else:\n                # use box plot\n                box_x.append([best_score(i) for i in xrange(n_batches_of_K)])\n            K *= 2\n            log_K += 1\n        plt.scatter(scatter_x, scatter_y, c=scatter_c, marker='+', linewidths=0.2,\n                    edgecolors=scatter_c)\n        boxplot_lines = plt.boxplot(box_x)\n        for key in boxplot_lines:\n            plt.setp(boxplot_lines[key], color='black')\n        # plt.setp(boxplot_lines['medians'], color=(.5,.5,.5))\n\n        # draw the spans\n        #\n        # the 'test performance of the best model' is a mixture of gaussian-distributed quantity\n        # with components comp_mean, and comp_var and weights w\n        #\n        # w[i] is prob. of i'th model being best in validation\n        w = pbest_sampled([vs for (vs, ts) in scores], n_valid, n_samples=pbest_n_samples, rng=rng)\n        comp_mean = np.asarray([ts for (vs, ts) in scores])\n        comp_var = (comp_mean * (1 - comp_mean)) / (n_test - 1)\n\n        # the mean of the mixture is\n        mean = np.dot(w, comp_mean)\n\n        # the variance of the mixture is\n        var = np.dot(w, comp_mean**2 + comp_var) - mean**2\n\n        # test average is distributed according to a mixture of gaussians, so we\n        # have to use the following fo\n        std = math.sqrt(var)\n        # plt.axhline(mean, color=(1.0,1.0,1.0), linestyle='--', linewidth=0.1)\n        # plt.axhspan(mean-1.96*std, mean+1.96*std, color=(0.5,0.5,0.5))\n        plt.axhline(mean - 1.96 * std, color=(0.0, 0.0, 0.0))\n        plt.axhline(mean + 1.96 * std, color=(0.0, 0.0, 0.0))\n\n        # get margin:\n        if 0:\n            margin = 1.0 - mean\n            plt.ylim(0.5 - margin, 1.0)\n\n        # set ticks\n        ticks_num, ticks_txt = plt.xticks()\n        plt.xticks(ticks_num, ['%i' % (2**i) for i in xrange(len(ticks_num))])\n\n    def rexp_pairs_raw(x, y, vscores):\n        if len(x) != len(y):\n            raise ValueError()\n        if len(x) != len(vscores):\n            raise ValueError()\n\n        vxy = zip(vscores, x, y)\n        vxy.sort()\n        vscores, x, y = zip(*vxy)\n\n        vscores = np.asarray(vscores)\n\n        max_score = vscores.max()\n        min_score = vscores.min()\n        colors = np.outer(0.9 - 0.89 * (vscores - min_score) / (max_score - min_score), [1, 1, 1])\n        plt.scatter(x, y, c=colors, marker='o', linewidths=0.1)\n\n        # remove ticks labels\n        nums, texts = plt.xticks()\n        plt.xticks(nums, [''] * len(nums))\n        nums, texts = plt.yticks()\n        plt.yticks(nums, [''] * len(nums))\n\n    class CoordType(object):\n        pass\n\n    class RealCoord(CoordType):\n\n        @staticmethod\n        def preimage(x):\n            return np.asarray(x)\n\n    class LogCoord(CoordType):\n\n        @staticmethod\n        def preimage(x):\n            return np.log(x)\n\n    class Log0Coord(CoordType):\n\n        @staticmethod\n        def preimage(x):\n            x = np.asarray(x)\n            return np.log(x + (x == 0) * x.min() / 2)\n    IntCoord = RealCoord\n    LogIntCoord = LogCoord\n\n    class CategoryCoord(CoordType):\n\n        def __init__(self, categories=None):\n            self.categories = categories\n\n        def preimage(self, x):\n            if self.categories:\n                return np.asarray([self.categories.index(xi) for xi in x])\n            else:\n                return x\n\n    def rexp_pairs(x, y, vscores, xtype, ytype):\n        return rexp_pairs_raw(xtype.preimage(x), ytype.preimage(y), vscores)\n\n    class MultiHistory(object):\n        \"\"\"\n        Show the history of multiple optimization algorithms.\n        \"\"\"\n\n        def __init__(self):\n            self.histories = []\n\n        def add_experiment(self, mj, y_fn, start=0, stop=sys.maxint,\n                           color=None,\n                           label=None):\n            trials = [(job['book_time'], job, y_fn(job))\n                      for job in mj if ('book_time' in job and\n                                        y_fn(job) is not None and\n                                        np.isfinite(y_fn(job)))]\n            trials.sort()\n            trials = trials[start:stop]\n            if trials:\n                self.histories.append((\n                    [t[1] for t in trials],\n                    [t[2] for t in trials],\n                    color, label))\n            else:\n                print('NO TRIALS')\n\n        def add_scatters(self):\n            for t, y, c, l in self.histories:\n                print('setting label', l)\n                plt.scatter(\n                    np.arange(len(y)),\n                    y,\n                    c=c,\n                    label=l,\n                    s=12)\n\n        def main_show(self, title=None):\n            self.add_scatters()\n            if title:\n                plt.title(title)\n            # plt.axvline(25) # make a parameter\n            # plt.axhline(.2)\n            # plt.axhline(.3)\n            plt.show()\n\n    def main_plot_histories(cls):\n        import plotting\n        conn_str_template = sys.argv[2]\n        algos = sys.argv[3].split(',')\n        dataset_name = sys.argv[4]\n        start = int(sys.argv[5]) if len(sys.argv) > 5 else 0\n        stop = int(sys.argv[6]) if len(sys.argv) > 6 else sys.maxint\n        mh = plotting.MultiHistory()\n        colors = ['r', 'y', 'b', 'g', 'c', 'k']\n\n        def custom_err_fn(trial):\n            if 2 == trial['status']:\n                rval = 1.0 - trial['result']['best_epoch_valid']\n                if rval > dict(\n                        convex=.4,\n                        mnist_rotated_background_images=2)[dataset_name]:\n                    return None\n                else:\n                    return rval\n\n        for c, algo in zip(colors, algos):\n            conn_str = conn_str_template % (algo, dataset_name)\n            print('algo', algo)\n            mh.add_experiment(\n                mj=MongoJobs.new_from_connection_str(conn_str),\n                y_fn=custom_err_fn,\n                color=c,\n                label=algo,\n                start=start,\n                stop=stop)\n        plt = plotting.plt\n        # TODO: icml07 undefined\n        plt.axhline(\n            1.0 - icml07.dbn3_scores[dataset_name],\n            c='k', label='manual+grid')  # , dashes=[0,1])\n        mh.add_scatters()\n        plt.legend()\n        plt.title(dataset_name)\n        plt.show()\n\n    class ScatterByConf(object):\n        trial_color_dict = {0: 'k', 1: 'g', 2: 'b', 3: 'r'}\n\n        def __init__(self, conf_template, confs, status, y):\n            self.conf_template = conf_template\n            self.confs = confs\n            self.y = np.asarray(y)\n            assert self.y.ndim == 1\n            self.status = status\n\n            self.colors = np.asarray(\n                [self.trial_color_dict.get(s, None) for s in self.status])\n\n            self.a_choices = np.array([[e['choice']\n                                        for e in t.flatten()]\n                                       for t in confs])\n            self.nones = np.array([[None\n                                    for e in t.flatten()]\n                                   for t in confs])\n            self.a_names = conf_template.flatten_names()\n            self.a_vars = [not np.all(self.a_choices[:, i] == self.nones[:, i])\n                           for i, name in enumerate(self.a_names)]\n\n            assert len(self.y) == len(self.a_choices)\n            assert len(self.y) == len(self.colors)\n\n        def trial_color(self, t):\n            return self.trial_color_dict.get(t['status'], None)\n\n        def scatter_one(self, column):\n            assert self.a_vars[column]\n\n            non_missing = self.a_choices[:, column] != self.nones[:, column]\n            x = self.a_choices[non_missing, column]\n            y = self.y[non_missing]\n            c = self.colors[non_missing]\n            plt.xlabel(self.a_names[column])\n            plt.scatter(x, y, c=c)\n\n        def main_show_one(self, column):\n            # show all conf effects in a grid of scatter-plots\n            self.scatter_one(column)\n            plt.show()\n\n        def main_show_all(self, columns=None):\n            if columns == None:\n                columns = range(len(self.a_vars))\n\n            columns = [c for c in columns if c < len(self.a_vars)]\n\n            n_vars = np.sum(self.a_vars[c] for c in columns)\n            print(n_vars)\n            n_rows = 1\n            n_cols = 10000\n            n_vars -= 1\n            while n_cols > 5 and n_cols > 3 * n_rows:  # while \"is ugly\"\n                n_vars += 1  # leave one more space at the end...\n                n_rows = int(np.sqrt(n_vars))\n                while n_vars % n_rows:\n                    n_rows -= 1\n                n_cols = n_vars / n_rows\n            print(n_rows, n_cols)\n\n            subplot_idx = 0\n            for var_idx in columns:\n                if self.a_vars[var_idx]:\n                    plt.subplot(n_rows, n_cols, subplot_idx + 1)\n                    self.scatter_one(var_idx)\n                    subplot_idx += 1\n            plt.show()\n\n    def main_plot_scatter(self, argv):\n        low_col = int(argv[0])\n        high_col = int(argv[1])\n        # upgrade jobs in db to ht_dist2-compatible things\n        scatter_by_conf = ScatterByConf(\n            self.bandit.template,\n            self.trials,\n            status=self.statuses(),\n            y=self.losses())\n        return scatter_by_conf.main_show_all(range(low_col, high_col))\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/pyll/__init__.py",
    "content": "from __future__ import absolute_import\nfrom .base import Apply\nfrom .base import Literal\nfrom .base import as_apply\nfrom .base import scope\nfrom .base import rec_eval\nfrom .base import clone\nfrom .base import clone_merge\nfrom .base import dfs\nfrom .base import toposort\n\n# -- adds symbols to scope\nfrom . import stochastic\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/pyll/base.py",
    "content": "# file is called AST to not collide with std lib module 'ast'\n#\n# It provides types to build ASTs in a simple lambda-notation style\n#\nfrom __future__ import print_function\nfrom __future__ import absolute_import\nfrom future import standard_library\nimport copy\nimport logging\nimport operator\nimport time\n\nfrom collections import deque\n\nimport networkx as nx\n\n# TODO: move things depending on numpy (among others too) to a library file\nimport numpy as np\nimport six\nfrom six import StringIO\nfrom six.moves import zip\nfrom six.moves import map\nfrom six.moves import range\n\nstandard_library.install_aliases()\nlogger = logging.getLogger(__name__)\nnp_versions = list(map(int, np.__version__.split('.')[:2]))\n\nDEFAULT_MAX_PROGRAM_LEN = 100000\n\n\nclass PyllImportError(ImportError):\n    \"\"\"A pyll symbol was not defined in the scope \"\"\"\n\n\nclass MissingArgument(object):\n    \"\"\"Object to represent a missing argument to a function application\n    \"\"\"\n\n\nclass SymbolTable(object):\n    \"\"\"\n    An object whose methods generally allocate Apply nodes.\n\n    _impls is a dictionary containing implementations for those nodes.\n\n    >>> self.add(a, b)          # -- creates a new 'add' Apply node\n    >>> self._impl['add'](a, b) # -- this computes a + b\n    \"\"\"\n\n    def __init__(self):\n        # -- list and dict are special because they are Python builtins\n        self._impls = {\n            'list': list,\n            'dict': dict,\n            'range': range,\n            'len': len,\n            'int': int,\n            'float': float,\n            'map': map,\n            'max': max,\n            'min': min,\n            'getattr': getattr,\n        }\n\n    def _new_apply(self, name, args, kwargs, o_len, pure):\n        pos_args = [as_apply(a) for a in args]\n        named_args = [(k, as_apply(v)) for (k, v) in list(kwargs.items())]\n        named_args.sort()\n        return Apply(name,\n                     pos_args=pos_args,\n                     named_args=named_args,\n                     o_len=o_len,\n                     pure=pure)\n\n    def dict(self, *args, **kwargs):\n        # XXX: figure out len\n        return self._new_apply('dict', args, kwargs, o_len=None,\n                               pure=True)\n\n    def int(self, arg):\n        return self._new_apply('int', [as_apply(arg)], {}, o_len=None,\n                               pure=True)\n\n    def float(self, arg):\n        return self._new_apply('float', [as_apply(arg)], {}, o_len=None,\n                               pure=True)\n\n    def len(self, obj):\n        return self._new_apply('len', [obj], {}, o_len=None,\n                               pure=True)\n\n    def list(self, init):\n        return self._new_apply('list', [as_apply(init)], {}, o_len=None,\n                               pure=True)\n\n    def map(self, fn, seq, pure=False):\n        \"\"\"\n        pure - True is assertion that fn does not modify seq[i]\n        \"\"\"\n        return self._new_apply('map', [as_apply(fn), as_apply(seq)], {},\n                               o_len=seq.o_len, pure=pure)\n\n    def range(self, *args):\n        return self._new_apply('range', args, {}, o_len=None, pure=True)\n\n    def max(self, *args):\n        \"\"\" return max of args \"\"\"\n        return self._new_apply('max', list(map(as_apply, args)), {},\n                               o_len=None, pure=True)\n\n    def min(self, *args):\n        \"\"\" return min of args \"\"\"\n        return self._new_apply('min', list(map(as_apply, args)), {},\n                               o_len=None, pure=True)\n\n    def getattr(self, obj, attr, *args):\n        return self._new_apply(\n            'getattr',\n            [as_apply(obj), as_apply(attr)] + list(map(as_apply, args)),\n            {},\n            o_len=None,\n            pure=True)\n\n    def _define(self, f, o_len, pure):\n        name = f.__name__\n        entry = SymbolTableEntry(self, name, o_len, pure)\n        setattr(self, name, entry)\n        self._impls[name] = f\n        return f\n\n    def define(self, f, o_len=None, pure=False):\n        \"\"\"Decorator for adding python functions to self\n        \"\"\"\n        name = f.__name__\n        if hasattr(self, name):\n            raise ValueError('Cannot override existing symbol', name)\n        return self._define(f, o_len, pure)\n\n    def define_if_new(self, f, o_len=None, pure=False):\n        \"\"\"Pass silently if f matches the current implementation\n        for f.__name__\"\"\"\n        name = f.__name__\n        if hasattr(self, name) and self._impls[name] is not f:\n            raise ValueError('Cannot redefine existing symbol', name)\n        return self._define(f, o_len, pure)\n\n    def undefine(self, f):\n        if isinstance(f, six.string_types):\n            name = f\n        else:\n            name = f.__name__\n        del self._impls[name]\n        delattr(self, name)\n\n    def define_pure(self, f):\n        return self.define(f, o_len=None, pure=True)\n\n    def define_info(self, o_len=None, pure=False):\n        def wrapper(f):\n            return self.define(f, o_len=o_len, pure=pure)\n        return wrapper\n\n    def inject(self, *args, **kwargs):\n        \"\"\"\n        Add symbols from self into a dictionary and return the dict.\n\n        This is used for import-like syntax: see `import_`.\n        \"\"\"\n        rval = {}\n        for k in args:\n            try:\n                rval[k] = getattr(self, k)\n            except AttributeError:\n                raise PyllImportError(k)\n        for k, origk in list(kwargs.items()):\n            try:\n                rval[k] = getattr(self, origk)\n            except AttributeError:\n                raise PyllImportError(origk)\n        return rval\n\n    def import_(self, _globals, *args, **kwargs):\n        _globals.update(self.inject(*args, **kwargs))\n\n\nclass SymbolTableEntry(object):\n    \"\"\"A functools.partial-like class for adding symbol table entries.\n    \"\"\"\n    def __init__(self, symbol_table, apply_name, o_len, pure):\n        self.symbol_table = symbol_table\n        self.apply_name = apply_name\n        self.o_len = o_len\n        self.pure = pure\n\n    def __call__(self, *args, **kwargs):\n        return self.symbol_table._new_apply(\n            self.apply_name,\n            args,\n            kwargs,\n            self.o_len,\n            self.pure)\n\nscope = SymbolTable()\n\n\ndef as_apply(obj):\n    \"\"\"Smart way of turning object into an Apply\n    \"\"\"\n    if isinstance(obj, Apply):\n        rval = obj\n    elif isinstance(obj, tuple):\n        rval = Apply('pos_args', [as_apply(a) for a in obj], {}, len(obj))\n    elif isinstance(obj, list):\n        rval = Apply('pos_args', [as_apply(a) for a in obj], {}, None)\n    elif isinstance(obj, dict):\n        items = list(obj.items())\n        # -- should be fine to allow numbers and simple things\n        #    but think about if it's ok to allow Applys\n        #    it messes up sorting at the very least.\n        items.sort()\n        if all(isinstance(k, six.string_types) for k in obj):\n            named_args = [(k, as_apply(v)) for (k, v) in items]\n            rval = Apply('dict', [], named_args, len(named_args))\n        else:\n            new_items = [(k, as_apply(v)) for (k, v) in items]\n            rval = Apply('dict', [as_apply(new_items)], {}, o_len=None)\n    else:\n        rval = Literal(obj)\n    assert isinstance(rval, Apply)\n    return rval\n\n\nclass Apply(object):\n    \"\"\"\n    Represent a symbolic application of a symbol to arguments.\n\n    o_len - None or int if the function is guaranteed to return a fixed number\n        `o_len` of outputs if it returns successfully\n    pure - True only if the function has no relevant side-effects\n    \"\"\"\n\n    def __init__(self, name, pos_args, named_args,\n                 o_len=None, pure=False, define_params=None):\n        self.name = name\n        # -- tuples or arrays -> lists\n        self.pos_args = list(pos_args)\n        self.named_args = [[kw, arg] for (kw, arg) in named_args]\n        # -- o_len is attached this early to support tuple unpacking and\n        #    list coersion.\n        self.o_len = o_len\n        self.pure = pure\n        # -- define_params lets us cope with stuff that may be in the\n        #    SymbolTable on the master but not on the worker.\n        self.define_params = define_params\n        assert all(isinstance(v, Apply) for v in pos_args)\n        assert all(isinstance(v, Apply) for k, v in named_args)\n        assert all(isinstance(k, six.string_types) for k, v in named_args)\n\n    def __setstate__(self, state):\n        self.__dict__.update(state)\n        # -- On deserialization, update scope if need be.\n        if self.define_params:\n            scope.define_if_new(**self.define_params)\n\n    def eval(self, memo=None):\n        \"\"\"\n        Recursively evaluate an expression graph.\n\n        This method operates directly on the graph of extended inputs to this\n        node, making no attempt to modify or optimize the expression graph.\n\n        Caveats:\n\n          * If there are nodes in the graph that do not represent expressions,\n            (e.g. nodes that correspond to statement blocks or assertions)\n            then it's not clear what this routine should do, and you should\n            probably not call it.\n\n          * If there are Lambdas in the graph, this procedure will not evluate\n            them -- see rec_eval for that.\n\n        However, for many cases that are pure expression graphs, this\n        offers a quick and simple way to evaluate them.\n        \"\"\"\n        if memo is None:\n            memo = {}\n        if id(self) in memo:\n            return memo[id(self)]\n        else:\n            args = [a.eval() for a in self.pos_args]\n            kwargs = dict([(n, a.eval()) for (n, a) in self.named_args])\n            f = scope._impls[self.name]\n            memo[id(self)] = rval = f(*args, **kwargs)\n            return rval\n\n    def inputs(self):\n        # -- this function gets called a lot and it's not 100% safe to cache\n        #    so the if/else is a small optimization\n        if self.named_args:\n            rval = self.pos_args + [v for (k, v) in self.named_args]\n        else:\n            rval = self.pos_args\n        return rval\n\n    @property\n    def arg(self):\n        # XXX: move this introspection to __init__, and change\n        #      the basic data-structure to not use pos_args and named_args.\n        # XXX: think though... we want the binding to be updated if pos_args\n        # and named_args is modified... so maybe this is an ok way to do it?\n        #\n        # XXX: extend something to deal with Lambda objects instead of\n        # decorated python functions.\n        #\n        # http://docs.python.org/reference/expressions.html#calls\n        #\n        binding = {}\n\n        fn = scope._impls[self.name]\n        # XXX does not work for builtin functions\n        defaults = fn.__defaults__  # right-aligned default values for params\n        code = fn.__code__\n\n        extra_args_ok = bool(code.co_flags & 0x04)\n        extra_kwargs_ok = bool(code.co_flags & 0x08)\n\n        # -- assert that my understanding of calling protocol is correct\n        try:\n            if extra_args_ok and extra_kwargs_ok:\n                assert len(code.co_varnames) >= code.co_argcount + 2\n                param_names = code.co_varnames[:code.co_argcount + 2]\n                args_param = param_names[code.co_argcount]\n                kwargs_param = param_names[code.co_argcount + 1]\n                pos_params = param_names[:code.co_argcount]\n            elif extra_kwargs_ok:\n                assert len(code.co_varnames) >= code.co_argcount + 1\n                param_names = code.co_varnames[:code.co_argcount + 1]\n                kwargs_param = param_names[code.co_argcount]\n                pos_params = param_names[:code.co_argcount]\n            elif extra_args_ok:\n                assert len(code.co_varnames) >= code.co_argcount + 1\n                param_names = code.co_varnames[:code.co_argcount + 1]\n                args_param = param_names[code.co_argcount]\n                pos_params = param_names[:code.co_argcount]\n            else:\n                assert len(code.co_varnames) >= code.co_argcount\n                param_names = code.co_varnames[:code.co_argcount]\n                pos_params = param_names[:code.co_argcount]\n        except AssertionError:\n            print('YIKES: MISUNDERSTANDING OF CALL PROTOCOL:')\n            print(code.co_argcount)\n            print(code.co_varnames)\n            print('%x' % code.co_flags)\n            raise\n\n        if extra_args_ok:\n            binding[args_param] == []\n\n        if extra_kwargs_ok:\n            binding[kwargs_param] == {}\n\n        if len(self.pos_args) > code.co_argcount and not extra_args_ok:\n            raise TypeError('Argument count exceeds number of positional params')\n\n        # -- bind positional arguments\n        for param_i, arg_i in zip(param_names, self.pos_args):\n            binding[param_i] = arg_i\n\n        if extra_args_ok:\n            # XXX: THIS IS NOT BEING TESTED AND IS OBVIOUSLY BROKEN\n            # TODO: 'args' does not even exist at this point\n            binding[args_param].extend(args[code.co_argcount:])\n\n        # -- bind keyword arguments\n        for aname, aval in self.named_args:\n            try:\n                pos = pos_params.index(aname)\n            except ValueError:\n                if extra_kwargs_ok:\n                    binding[kwargs_param][aname] = aval\n                    continue\n                else:\n                    raise TypeError('Unrecognized keyword argument', aname)\n            param = param_names[pos]\n            if param in binding:\n                raise TypeError('Duplicate argument for parameter', param)\n            binding[param] = aval\n\n        assert len(binding) <= len(param_names)\n\n        if len(binding) < len(param_names):\n            for p in param_names:\n                if p not in binding:\n                    binding[p] = MissingArgument\n\n        return binding\n\n    def set_kwarg(self, name, value):\n        for ii, (key, val) in enumerate(self.named_args):\n            if key == name:\n                self.named_args[ii][1] = as_apply(value)\n                return\n        arg = self.arg\n        if name in arg and arg[name] != MissingArgument:\n            raise NotImplementedError('change pos arg to kw arg')\n        else:\n            self.named_args.append([name, as_apply(value)])\n            self.named_args.sort()\n\n    def clone_from_inputs(self, inputs, o_len='same'):\n        if len(inputs) != len(self.inputs()):\n            raise TypeError()\n        L = len(self.pos_args)\n        pos_args = list(inputs[:L])\n        named_args = [[kw, inputs[L + ii]]\n                      for ii, (kw, arg) in enumerate(self.named_args)]\n        # -- danger cloning with new inputs can change the o_len\n        if o_len == 'same':\n            o_len = self.o_len\n        return self.__class__(self.name, pos_args, named_args, o_len)\n\n    def replace_input(self, old_node, new_node):\n        rval = []\n        for ii, aa in enumerate(self.pos_args):\n            if aa is old_node:\n                self.pos_args[ii] = new_node\n                rval.append(ii)\n        for ii, (nn, aa) in enumerate(self.named_args):\n            if aa is old_node:\n                self.named_args[ii][1] = new_node\n                rval.append(ii + len(self.pos_args))\n        return rval\n\n    def pprint(self, ofile, lineno=None, indent=0, memo=None):\n        if memo is None:\n            memo = {}\n        if lineno is None:\n            lineno = [0]\n\n        if self in memo:\n            print(lineno[0], ' ' * indent + memo[self], file=ofile)\n            lineno[0] += 1\n        else:\n            memo[self] = self.name + ('  [line:%i]' % lineno[0])\n            print(lineno[0], ' ' * indent + self.name, file=ofile)\n            lineno[0] += 1\n            for arg in self.pos_args:\n                arg.pprint(ofile, lineno, indent + 2, memo)\n            for name, arg in self.named_args:\n                print(lineno[0], ' ' * indent + ' ' + name + ' =', file=ofile)\n                lineno[0] += 1\n                arg.pprint(ofile, lineno, indent + 2, memo)\n\n    def __str__(self):\n        sio = StringIO()\n        self.pprint(sio)\n        return sio.getvalue()[:-1]  # remove trailing '\\n'\n\n    def __add__(self, other):\n        return scope.add(self, other)\n\n    def __radd__(self, other):\n        return scope.add(other, self)\n\n    def __sub__(self, other):\n        return scope.sub(self, other)\n\n    def __rsub__(self, other):\n        return scope.sub(other, self)\n\n    def __neg__(self):\n        return scope.neg(self)\n\n    def __mul__(self, other):\n        return scope.mul(self, other)\n\n    def __rmul__(self, other):\n        return scope.mul(other, self)\n\n    def __div__(self, other):\n        return scope.div(self, other)\n\n    def __rdiv__(self, other):\n        return scope.div(other, self)\n\n    def __truediv__(self, other):\n        return scope.truediv(self, other)\n\n    def __rtruediv__(self, other):\n        return scope.truediv(other, self)\n\n    def __floordiv__(self, other):\n        return scope.floordiv(self, other)\n\n    def __rfloordiv__(self, other):\n        return scope.floordiv(other, self)\n\n    def __pow__(self, other):\n        return scope.pow(self, other)\n\n    def __rpow__(self, other):\n        return scope.pow(other, self)\n\n    def __gt__(self, other):\n        return scope.gt(self, other)\n\n    def __ge__(self, other):\n        return scope.ge(self, other)\n\n    def __lt__(self, other):\n        return scope.lt(self, other)\n\n    def __le__(self, other):\n        return scope.le(self, other)\n\n    def __getitem__(self, idx):\n        if self.o_len is not None and isinstance(idx, int):\n            if idx >= self.o_len:\n                #  -- this IndexError is essential for supporting\n                #     tuple-unpacking syntax or list coersion of self.\n                raise IndexError()\n        return scope.getitem(self, idx)\n\n    def __len__(self):\n        if self.o_len is None:\n            raise TypeError('len of pyll.Apply either undefined or unknown')\n        return self.o_len\n\n    def __call__(self, *args, **kwargs):\n        return scope.call(self, args, kwargs)\n\n\ndef apply(name, *args, **kwargs):\n    pos_args = [as_apply(a) for a in args]\n    named_args = [(k, as_apply(v)) for (k, v) in list(kwargs.items())]\n    named_args.sort()\n    return Apply(name,\n                 pos_args=pos_args,\n                 named_args=named_args,\n                 o_len=None)\n\n\nclass Literal(Apply):\n    def __init__(self, obj=None):\n        try:\n            o_len = len(obj)\n        except TypeError:\n            o_len = None\n        Apply.__init__(self, 'literal', [], {}, o_len, pure=True)\n        self._obj = obj\n\n    def eval(self, memo=None):\n        if memo is None:\n            memo = {}\n        return memo.setdefault(id(self), self._obj)\n\n    @property\n    def obj(self):\n        return self._obj\n\n    @property\n    def arg(self):\n        return {}\n\n    def pprint(self, ofile, lineno=None, indent=0, memo=None):\n        if lineno is None:\n            lineno = [0]\n        if memo is None:\n            memo = {}\n        if self in memo:\n            print(lineno[0], ' ' * indent + memo[self], file=ofile)\n        else:\n            # TODO: set up a registry for this\n            if isinstance(self._obj, np.ndarray):\n                msg = 'Literal{np.ndarray,shape=%s,min=%f,max=%f}' % (\n                      self._obj.shape, self._obj.min(), self._obj.max())\n            else:\n                msg = 'Literal{%s}' % str(self._obj)\n            memo[self] = '%s  [line:%i]' % (msg, lineno[0])\n            print(lineno[0], ' ' * indent + msg, file=ofile)\n        lineno[0] += 1\n\n    def replace_input(self, old_node, new_node):\n        return []\n\n    def clone_from_inputs(self, inputs, o_len='same'):\n        return self.__class__(self._obj)\n\n\nclass Lambda(object):\n\n    # XXX: Extend Lambda objects to have a list of exception clauses.\n    #      If the code of the expr() throws an error, these clauses convert\n    #      that error to a return value.\n\n    def __init__(self, name, params, expr):\n        self.__name__ = name  # like a python function\n        self.params = params  # list of (name, symbol[, default_value]) tuples\n        self.expr = expr      # pyll graph defining this Lambda\n\n    def __call__(self, *args, **kwargs):\n        # -- return `expr` cloned from given args and kwargs\n        if len(args) > len(self.params):\n            raise TypeError('too many arguments')\n        memo = {}\n        for arg, param in zip(args, self.params):\n            # print('applying with arg', param, arg)\n            memo[param[1]] = as_apply(arg)\n        if len(args) != len(self.params) or kwargs:\n            raise NotImplementedError('named / default arguments',\n                                      (args, self.params))\n        rval = clone(self.expr, memo)\n        return rval\n\n\nclass UndefinedValue(object):\n    pass\n\n\n# -- set up some convenience symbols to use as parameters in Lambda definitions\np0 = Literal(UndefinedValue)\np1 = Literal(UndefinedValue)\np2 = Literal(UndefinedValue)\np3 = Literal(UndefinedValue)\np4 = Literal(UndefinedValue)\n\n\n@scope.define\ndef call(fn, args=(), kwargs={}):\n    \"\"\" call fn with given args and kwargs.\n\n    This is used to represent Apply.__call__\n    \"\"\"\n    return fn(*args, **kwargs)\n\n\n@scope.define\ndef callpipe1(fn_list, arg):\n    \"\"\"\n\n    fn_list: a list lambdas  that return either pyll expressions or python\n        values\n\n    arg: the argument to the first function in the list\n\n    return: `fn_list[-1]( ... (fn_list[1](fn_list[0](arg))))`\n\n    \"\"\"\n    # XXX: in current implementation, if fs are `partial`, then\n    #      this loop will expand all functions f at once, so that they\n    #      will all be evaluated in the same scope/memo by rec_eval.\n    #      Normally programming languages would evaluate each f in a private\n    #      scope\n    for f in fn_list:\n        arg = f(arg)\n    return arg\n\n\n@scope.define\ndef partial(name, *args, **kwargs):\n    # TODO: introspect the named instruction, to retrieve the\n    #       list of parameters *not* accounted for by args and kwargs\n    # then delete these stupid functions and just have one `partial`\n    try:\n        name = name.apply_name  # to retrieve name from scope.foo methods\n    except AttributeError:\n        pass\n\n    my_id = len(scope._impls)\n    # -- create a function with this name\n    #    the name is the string used index into scope._impls\n    temp_name = 'partial_%s_id%i' % (name, my_id)\n    l = Lambda(temp_name, [('x', p0)],\n               expr=apply(name, *(args + (p0,)), **kwargs))\n    scope.define(l)\n    # assert that the next partial will get a different id\n    # XXX; THIS ASSUMES THAT SCOPE ONLY GROWS\n    assert my_id < len(scope._impls)\n    rval = getattr(scope, temp_name)\n    return rval\n\n\ndef dfs(aa, seq=None, seqset=None):\n    if seq is None:\n        assert seqset is None\n        seq = []\n        seqset = {}\n    # -- seqset is the set of all nodes we have seen (which may be still on\n    #    the stack)\n    #    N.B. it used to be a stack, but now it's a dict mapping to inputs\n    #    because that's an optimization saving us from having to call inputs\n    #    so often.\n    if aa in seqset:\n        return\n    assert isinstance(aa, Apply)\n    seqset[aa] = aa.inputs()\n    for ii in seqset[aa]:\n        dfs(ii, seq, seqset)\n    seq.append(aa)\n    return seq\n\n\ndef toposort(expr):\n    \"\"\"\n    Return apply nodes of `expr` sub-tree as a list in topological order.\n\n    Raises networkx.NetworkXUnfeasible if subtree contains cycle.\n\n    \"\"\"\n    G = nx.DiGraph()\n    for node in dfs(expr):\n        G.add_edges_from([(n_in, node) for n_in in node.inputs()])\n    order = list(nx.topological_sort(G))\n    assert order[-1] == expr\n    return order\n\n\ndef clone(expr, memo=None):\n    if memo is None:\n        memo = {}\n    nodes = dfs(expr)\n    for node in nodes:\n        if node not in memo:\n            new_inputs = [memo[arg] for arg in node.inputs()]\n            new_node = node.clone_from_inputs(new_inputs)\n            memo[node] = new_node\n    return memo[expr]\n\n\ndef clone_merge(expr, memo=None, merge_literals=False):\n    nodes = dfs(expr)\n    if memo is None:\n        memo = {}\n    # -- args are somewhat slow to construct, so cache them out front\n    #    XXX node.arg does not always work (builtins, weird co_flags)\n    node_args = [(node.pos_args, node.named_args) for node in nodes]\n    try:\n        del node\n    except:\n        pass\n    for ii, node_ii in enumerate(nodes):\n        if node_ii in memo:\n            continue\n        new_ii = None\n        if node_ii.pure:\n            for jj in range(ii):\n                node_jj = nodes[jj]\n                if node_ii.name != node_jj.name:\n                    continue\n                if node_ii.name == 'literal':\n                    if not merge_literals:\n                        continue\n                    if node_ii._obj != node_jj._obj:\n                        continue\n                else:\n                    if node_args[ii] != node_args[jj]:\n                        continue\n                logger.debug('clone_merge %s %i <- %i' % (\n                    node_ii.name, jj, ii))\n                new_ii = node_jj\n                break\n        if new_ii is None:\n            new_inputs = [memo[arg] for arg in node_ii.inputs()]\n            new_ii = node_ii.clone_from_inputs(new_inputs)\n        memo[node_ii] = new_ii\n\n    return memo[expr]\n\n\n##############################################################################\n##############################################################################\n\n\nclass GarbageCollected(object):\n    '''Placeholder representing a garbage-collected value '''\n\n\ndef rec_eval(expr, deepcopy_inputs=False, memo=None,\n             max_program_len=None,\n             memo_gc=True,\n             print_trace=False,\n             print_node_on_error=True,\n             ):\n    \"\"\"\n    expr - pyll Apply instance to be evaluated\n\n    memo - optional dictionary of values to use for particular nodes\n\n    deepcopy_inputs - deepcopy inputs to every node prior to calling that\n        node's function on those inputs. If this leads to a different return\n        value, then some function (XXX add more complete DebugMode\n        functionality) in your graph is modifying its inputs and causing\n        mis-calculation. XXX: This is not a fully-functional DebugMode because\n        if the offender happens on account of the toposort order to be the last\n        user of said input, then it will not be detected as a potential\n        problem.\n\n    \"\"\"\n    if max_program_len == None:\n        max_program_len = DEFAULT_MAX_PROGRAM_LEN\n\n    if deepcopy_inputs not in (0, 1, False, True):\n        # -- I've been calling rec_eval(expr, memo) by accident a few times\n        #    this error would have been appreciated.\n        raise ValueError('deepcopy_inputs should be bool', deepcopy_inputs)\n\n    node = as_apply(expr)\n    topnode = node\n\n    if memo is None:\n        memo = {}\n    else:\n        memo = dict(memo)\n\n    # -- hack for speed\n    #    since the inputs are constant during rec_eval\n    #    but not constant in general\n    node_inputs = {}\n    node_list = []\n    dfs(node, node_list, seqset=node_inputs)\n\n    # TODO: optimize dfs to not recurse past the items in memo\n    #       this is especially important for evaluating Lambdas\n    #       which cause rec_eval to recurse\n    #\n    # N.B. that Lambdas may expand the graph during the evaluation\n    #      so that this iteration may be an incomplete\n    if memo_gc:\n        clients = {}\n        for aa in node_list:\n            clients.setdefault(aa, set())\n            for ii in node_inputs[aa]:\n                clients.setdefault(ii, set()).add(aa)\n\n        def set_memo(k, v):\n            assert v is not GarbageCollected\n            memo[k] = v\n            for ii in node_inputs[k]:\n                # -- if all clients of ii are already in the memo\n                #    then we can free memo[ii] by replacing it\n                #    with a dummy symbol\n                if all(iic in memo for iic in clients[ii]):\n                    memo[ii] = GarbageCollected\n    else:\n        def set_memo(k, v):\n            memo[k] = v\n\n    todo = deque([topnode])\n    while todo:\n        if len(todo) > max_program_len:\n            raise RuntimeError('Probably infinite loop in document')\n        node = todo.pop()\n        if print_trace:\n            print('rec_eval:print_trace', len(todo), node.name)\n\n        if node in memo:\n            # -- we've already computed this, move on.\n            continue\n\n        # -- different kinds of nodes are treated differently:\n        if node.name == 'switch':\n            # -- switch is the conditional evaluation node\n            switch_i_var = node.pos_args[0]\n            if switch_i_var in memo:\n                switch_i = memo[switch_i_var]\n                try:\n                    int(switch_i)\n                except:\n                    raise TypeError('switch argument was', switch_i)\n                if switch_i != int(switch_i) or switch_i < 0:\n                    raise ValueError('switch pos must be positive int',\n                                     switch_i)\n                rval_var = node.pos_args[int(switch_i) + 1]\n                if rval_var in memo:\n                    set_memo(node, memo[rval_var])\n                    continue\n                else:\n                    waiting_on = [rval_var]\n            else:\n                waiting_on = [switch_i_var]\n        elif isinstance(node, Literal):\n            # -- constants go straight into the memo\n            set_memo(node, node.obj)\n            continue\n        else:\n            # -- normal instruction-type nodes have inputs\n            waiting_on = [v for v in node_inputs[node] if v not in memo]\n\n        if waiting_on:\n            # -- Necessary inputs have yet to be evaluated.\n            #    push the node back in the queue, along with the\n            #    inputs it still needs\n            todo.append(node)\n            todo.extend(waiting_on)\n        else:\n            # -- not waiting on anything;\n            #    this instruction can be evaluated.\n            args = _args = [memo[v] for v in node.pos_args]\n            kwargs = _kwargs = dict(\n                [(k, memo[v]) for (k, v) in node.named_args]\n            )\n\n            if memo_gc:\n                for aa in args + list(kwargs.values()):\n                    assert aa is not GarbageCollected\n\n            if deepcopy_inputs:\n                args = copy.deepcopy(_args)\n                kwargs = copy.deepcopy(_kwargs)\n\n            try:\n                rval = scope._impls[node.name](*args, **kwargs)\n\n            except Exception as e:\n                if print_node_on_error:\n                    print('=' * 80)\n                    print('ERROR in rec_eval')\n                    print('EXCEPTION', type(e), str(e))\n                    print('NODE')\n                    print(node)  # -- typically a multi-line string\n                    print('=' * 80)\n                raise\n\n            if isinstance(rval, Apply):\n                # -- if an instruction returns a Pyll apply node\n                # it means evaluate that too. Lambdas do this.\n                #\n                # XXX: consider if it is desirable, efficient, buggy\n                #      etc. to keep using the same memo dictionary\n                foo = rec_eval(rval, deepcopy_inputs, memo,\n                               memo_gc=memo_gc)\n                set_memo(node, foo)\n            else:\n                set_memo(node, rval)\n\n    return memo[topnode]\n\n\n############################################################################\n############################################################################\n\n@scope.define_pure\ndef pos_args(*args):\n    return args\n\n\n@scope.define_pure\ndef identity(obj):\n    return obj\n\n\n# -- We used to define these as Python functions in this file, but the operator\n#    module already provides them, is slightly more efficient about it. Since\n#    searchspaces uses the same convention, we can more easily map graphs back\n#    and forth and reduce the amount of code in both codebases.\nscope.define_pure(operator.getitem)\nscope.define_pure(operator.add)\nscope.define_pure(operator.sub)\nscope.define_pure(operator.mul)\ntry:\n    scope.define_pure(operator.div)\nexcept AttributeError:\n    pass  # No more operator.div in Python3, but truediv also exists since Python2.2\nscope.define_pure(operator.truediv)\nscope.define_pure(operator.floordiv)\nscope.define_pure(operator.neg)\nscope.define_pure(operator.eq)\nscope.define_pure(operator.lt)\nscope.define_pure(operator.le)\nscope.define_pure(operator.gt)\nscope.define_pure(operator.ge)\n\n\n@scope.define_pure\ndef exp(a):\n    return np.exp(a)\n\n\n@scope.define_pure\ndef log(a):\n    return np.log(a)\n\n\n@scope.define_pure\ndef pow(a, b):\n    return a ** b\n\n\n@scope.define_pure\ndef sin(a):\n    return np.sin(a)\n\n\n@scope.define_pure\ndef cos(a):\n    return np.cos(a)\n\n\n@scope.define_pure\ndef tan(a):\n    return np.tan(a)\n\n\n@scope.define_pure\ndef sum(x, axis=None):\n    if axis is None:\n        return np.sum(x)\n    else:\n        return np.sum(x, axis=axis)\n\n\n@scope.define_pure\ndef sqrt(x):\n    return np.sqrt(x)\n\n\n@scope.define_pure\ndef minimum(x, y):\n    return np.minimum(x, y)\n\n\n@scope.define_pure\ndef maximum(x, y):\n    return np.maximum(x, y)\n\n\n@scope.define_pure\ndef array_union1(args):\n    s = set()\n    for a in args:\n        s.update(a)\n    return np.asarray(sorted(s))\n\n\n@scope.define_pure\ndef array_union(*args):\n    return array_union1(args)\n\n\n@scope.define_pure\ndef asarray(a, dtype=None):\n    if dtype is None:\n        return np.asarray(a)\n    else:\n        return np.asarray(a, dtype=dtype)\n\n\n@scope.define_pure\ndef str_join(s, seq):\n    return s.join(seq)\n\n\ndef _bincount_slow(x, weights=None, minlength=None):\n    \"\"\"backport of np.bincount post numpy 1.6\n    \"\"\"\n    if weights is not None:\n        raise NotImplementedError()\n    if minlength is None:\n        rlen = np.max(x) + 1\n    else:\n        rlen = max(np.max(x) + 1, minlength)\n    rval = np.zeros(rlen, dtype='int')\n    for xi in np.asarray(x).flatten():\n        rval[xi] += 1\n    return rval\n\n\n@scope.define_pure\ndef bincount(x, weights=None, minlength=None):\n    if np_versions[0] == 1 and np_versions[1] < 6:\n        # -- np.bincount doesn't have minlength arg\n        return _bincount_slow(x, weights, minlength)\n    else:\n        if np.asarray(x).size:\n            return np.bincount(x, weights, minlength)\n        else:\n            # -- currently numpy rejects this case,\n            #    but it seems sensible enough to me.\n            return np.zeros(minlength, dtype='int')\n\n\n@scope.define_pure\ndef repeat(n_times, obj):\n    return [obj] * n_times\n\n\n@scope.define\ndef call_method(obj, methodname, *args, **kwargs):\n    method = getattr(obj, methodname)\n    return method(*args, **kwargs)\n\n\n@scope.define_pure\ndef call_method_pure(obj, methodname, *args, **kwargs):\n    method = getattr(obj, methodname)\n    return method(*args, **kwargs)\n\n\n@scope.define_pure\ndef copy_call_method_pure(obj, methodname, *args, **kwargs):\n    # -- this method copies object before calling the method\n    #    so that in the case where args and kwargs are not modified\n    #    the call_method can be done in a no-side-effect way.\n    #\n    #    It is a mistake to use this method when args or kwargs are modified\n    #    by the call to method.\n    method = getattr(copy.copy(obj), methodname)\n    return method(*args, **kwargs)\n\n\n@scope.define_pure\ndef switch(pos, *args):\n    # switch is an unusual expression, in that it affects control flow\n    # when executed with rec_eval. args are not all evaluated, only\n    # args[pos] is evaluated.\n    # raise RuntimeError('switch is not meant to be evaluated')\n    #\n    # .. However, in quick-evaluation schemes it is handy that this be defined\n    # as follows:\n    return args[pos]\n\n\ndef _kwswitch(kw, **kwargs):\n    \"\"\"conditional evaluation according to string value\"\"\"\n    # Get the index of the string in kwargs to use switch\n    keys, values = list(zip(*sorted(kwargs.items())))\n    match_idx = scope.call_method_pure(keys, 'index', kw)\n    return scope.switch(match_idx, *values)\n\nscope.kwswitch = _kwswitch\n\n\n@scope.define_pure\ndef Raise(etype, *args, **kwargs):\n    raise etype(*args, **kwargs)\n\n\n@scope.define_info(o_len=2)\ndef curtime(obj):\n    return time.time(), obj\n\n\n@scope.define\ndef pdb_settrace(obj):\n    import pdb\n    pdb.set_trace()\n    return obj\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/pyll/stochastic.py",
    "content": "\"\"\"\nConstructs for annotating base graphs.\n\"\"\"\nfrom __future__ import print_function\nfrom __future__ import division\nfrom builtins import range\nfrom past.utils import old_div\nimport sys\nimport numpy as np\nfrom .base import scope, as_apply, dfs, rec_eval, clone\n\n################################################################################\n################################################################################\n\n\ndef ERR(msg):\n    print(msg, file=sys.stderr)\n\n\nimplicit_stochastic_symbols = set()\n\n\ndef implicit_stochastic(f):\n    implicit_stochastic_symbols.add(f.__name__)\n    return f\n\n\n@scope.define\ndef rng_from_seed(seed):\n    return np.random.RandomState(seed)\n\n\n# -- UNIFORM\n\n@implicit_stochastic\n@scope.define\ndef uniform(low, high, rng=None, size=()):\n    return rng.uniform(low, high, size=size)\n\n\n@implicit_stochastic\n@scope.define\ndef loguniform(low, high, rng=None, size=()):\n    draw = rng.uniform(low, high, size=size)\n    return np.exp(draw)\n\n\n@implicit_stochastic\n@scope.define\ndef quniform(low, high, q, rng=None, size=()):\n    draw = rng.uniform(low, high, size=size)\n    return np.round(old_div(draw, q)) * q\n\n\n@implicit_stochastic\n@scope.define\ndef qloguniform(low, high, q, rng=None, size=()):\n    draw = np.exp(rng.uniform(low, high, size=size))\n    return np.round(old_div(draw, q)) * q\n\n\n# -- NORMAL\n\n@implicit_stochastic\n@scope.define\ndef normal(mu, sigma, rng=None, size=()):\n    return rng.normal(mu, sigma, size=size)\n\n\n@implicit_stochastic\n@scope.define\ndef qnormal(mu, sigma, q, rng=None, size=()):\n    draw = rng.normal(mu, sigma, size=size)\n    return np.round(old_div(draw, q)) * q\n\n\n@implicit_stochastic\n@scope.define\ndef lognormal(mu, sigma, rng=None, size=()):\n    draw = rng.normal(mu, sigma, size=size)\n    return np.exp(draw)\n\n\n@implicit_stochastic\n@scope.define\ndef qlognormal(mu, sigma, q, rng=None, size=()):\n    draw = np.exp(rng.normal(mu, sigma, size=size))\n    return np.round(old_div(draw, q)) * q\n\n\n# -- CATEGORICAL\n\n\n@implicit_stochastic\n@scope.define\ndef randint(upper, rng=None, size=()):\n    # this is tricky because numpy doesn't support\n    # upper being a list of len size[0]\n    if isinstance(upper, (list, tuple)):\n        if isinstance(size, int):\n            assert len(upper) == size\n            return np.asarray([rng.randint(uu) for uu in upper])\n        elif len(size) == 1:\n            assert len(upper) == size[0]\n            return np.asarray([rng.randint(uu) for uu in upper])\n    return rng.randint(upper, size=size)\n\n\n@implicit_stochastic\n@scope.define\ndef categorical(p, upper=None, rng=None, size=()):\n    \"\"\"Draws i with probability p[i]\"\"\"\n    if len(p) == 1 and isinstance(p[0], np.ndarray):\n        p = p[0]\n    p = np.asarray(p)\n\n    if size == ():\n        size = (1,)\n    elif isinstance(size, (int, np.number)):\n        size = (size,)\n    else:\n        size = tuple(size)\n\n    if size == (0,):\n        return np.asarray([])\n    assert len(size)\n\n    if p.ndim == 0:\n        raise NotImplementedError()\n    elif p.ndim == 1:\n        n_draws = int(np.prod(size))\n        sample = rng.multinomial(n=1, pvals=p, size=int(n_draws))\n        assert sample.shape == size + (len(p),)\n        rval = np.dot(sample, np.arange(len(p)))\n        rval.shape = size\n        return rval\n    elif p.ndim == 2:\n        n_draws_, n_choices = p.shape\n        n_draws, = size\n        assert n_draws == n_draws_\n        rval = [np.where(rng.multinomial(pvals=p[ii], n=1))[0][0]\n                for ii in range(n_draws)]\n        rval = np.asarray(rval)\n        rval.shape = size\n        return rval\n    else:\n        raise NotImplementedError()\n\n\ndef choice(args):\n    return scope.one_of(*args)\nscope.choice = choice\n\n\ndef one_of(*args):\n    ii = scope.randint(len(args))\n    return scope.switch(ii, *args)\nscope.one_of = one_of\n\n\ndef recursive_set_rng_kwarg(expr, rng=None):\n    \"\"\"\n    Make all of the stochastic nodes in expr use the rng\n\n    uniform(0, 1) -> uniform(0, 1, rng=rng)\n    \"\"\"\n    if rng is None:\n        rng = np.random.RandomState()\n    lrng = as_apply(rng)\n    for node in dfs(expr):\n        if node.name in implicit_stochastic_symbols:\n            for ii, (name, arg) in enumerate(list(node.named_args)):\n                if name == 'rng':\n                    node.named_args[ii] = ('rng', lrng)\n                    break\n            else:\n                node.named_args.append(('rng', lrng))\n    return expr\n\n\ndef sample(expr, rng=None, **kwargs):\n    \"\"\"\n    Parameters:\n    expr - a pyll expression to be evaluated\n\n    rng - a np.random.RandomState instance\n          default: `np.random.RandomState()`\n\n    **kwargs - optional arguments passed along to\n               `hyperopt.pyll.rec_eval`\n\n    \"\"\"\n    if rng is None:\n        rng = np.random.RandomState()\n    foo = recursive_set_rng_kwarg(clone(as_apply(expr)), as_apply(rng))\n    return rec_eval(foo, **kwargs)\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/pyll_utils.py",
    "content": "from __future__ import absolute_import\nfrom builtins import str\nfrom builtins import zip\nfrom builtins import range\nfrom past.builtins import basestring\nfrom builtins import object\nfrom functools import partial, wraps\nfrom .base import DuplicateLabel\nfrom .pyll.base import Apply, Literal\nfrom .pyll import scope\nfrom .pyll import as_apply\n\n\ndef validate_label(f):\n    @wraps(f)\n    def wrapper(label, *args, **kwargs):\n        is_real_string = isinstance(label, basestring)\n        is_literal_string = (isinstance(label, Literal) and\n                             isinstance(label.obj, basestring))\n        if not is_real_string and not is_literal_string:\n            raise TypeError('require string label')\n        return f(label, *args, **kwargs)\n    return wrapper\n\n\n#\n# Hyperparameter Types\n#\n\n@scope.define\ndef hyperopt_param(label, obj):\n    \"\"\" A graph node primarily for annotating - VectorizeHelper looks out\n    for these guys, and optimizes subgraphs of the form:\n\n        hyperopt_param(<stochastic_expression>(...))\n\n    \"\"\"\n    return obj\n\n\n@validate_label\ndef hp_pchoice(label, p_options):\n    \"\"\"\n    label: string\n    p_options: list of (probability, option) pairs\n    \"\"\"\n    p, options = list(zip(*p_options))\n    n_options = len(options)\n    ch = scope.hyperopt_param(label,\n                              scope.categorical(\n                                  p,\n                                  upper=n_options))\n    return scope.switch(ch, *options)\n\n\n@validate_label\ndef hp_choice(label, options):\n    ch = scope.hyperopt_param(label,\n                              scope.randint(len(options)))\n    return scope.switch(ch, *options)\n\n\n@validate_label\ndef hp_randint(label, *args, **kwargs):\n    return scope.hyperopt_param(label,\n                                scope.randint(*args, **kwargs))\n\n\n@validate_label\ndef hp_uniform(label, *args, **kwargs):\n    return scope.float(\n        scope.hyperopt_param(label,\n                             scope.uniform(*args, **kwargs)))\n\n\n@validate_label\ndef hp_quniform(label, *args, **kwargs):\n    return scope.float(\n        scope.hyperopt_param(label,\n                             scope.quniform(*args, **kwargs)))\n\n\n@validate_label\ndef hp_loguniform(label, *args, **kwargs):\n    return scope.float(\n        scope.hyperopt_param(label,\n                             scope.loguniform(*args, **kwargs)))\n\n\n@validate_label\ndef hp_qloguniform(label, *args, **kwargs):\n    return scope.float(\n        scope.hyperopt_param(label,\n                             scope.qloguniform(*args, **kwargs)))\n\n\n@validate_label\ndef hp_normal(label, *args, **kwargs):\n    return scope.float(\n        scope.hyperopt_param(label,\n                             scope.normal(*args, **kwargs)))\n\n\n@validate_label\ndef hp_qnormal(label, *args, **kwargs):\n    return scope.float(\n        scope.hyperopt_param(label,\n                             scope.qnormal(*args, **kwargs)))\n\n\n@validate_label\ndef hp_lognormal(label, *args, **kwargs):\n    return scope.float(\n        scope.hyperopt_param(label,\n                             scope.lognormal(*args, **kwargs)))\n\n\n@validate_label\ndef hp_qlognormal(label, *args, **kwargs):\n    return scope.float(\n        scope.hyperopt_param(label,\n                             scope.qlognormal(*args, **kwargs)))\n\n\n#\n# Tools for extracting a search space from a Pyll graph\n#\n\n\nclass Cond(object):\n\n    def __init__(self, name, val, op):\n        self.op = op\n        self.name = name\n        self.val = val\n\n    def __str__(self):\n        return 'Cond{%s %s %s}' % (self.name, self.op, self.val)\n\n    def __eq__(self, other):\n        return self.op == other.op and self.name == other.name and self.val == other.val\n\n    def __hash__(self):\n        return hash((self.op, self.name, self.val))\n\n    def __repr__(self):\n        return str(self)\n\nEQ = partial(Cond, op='=')\n\n\ndef _expr_to_config(expr, conditions, hps):\n    if expr.name == 'switch':\n        idx = expr.inputs()[0]\n        options = expr.inputs()[1:]\n        assert idx.name == 'hyperopt_param'\n        assert idx.arg['obj'].name in (\n            'randint',     # -- in case of hp.choice\n            'categorical',  # -- in case of hp.pchoice\n        )\n        _expr_to_config(idx, conditions, hps)\n        for ii, opt in enumerate(options):\n            _expr_to_config(opt,\n                            conditions + (EQ(idx.arg['label'].obj, ii),),\n                            hps)\n    elif expr.name == 'hyperopt_param':\n        label = expr.arg['label'].obj\n        if label in hps:\n            if hps[label]['node'] != expr.arg['obj']:\n                raise DuplicateLabel(label)\n            hps[label]['conditions'].add(conditions)\n        else:\n            hps[label] = {'node': expr.arg['obj'],\n                          'conditions': set((conditions,)),\n                          'label': label,\n                          }\n    else:\n        for ii in expr.inputs():\n            _expr_to_config(ii, conditions, hps)\n\n\ndef expr_to_config(expr, conditions, hps):\n    \"\"\"\n    Populate dictionary `hps` with the hyperparameters in pyll graph `expr`\n    and conditions for participation in the evaluation of `expr`.\n\n    Arguments:\n    expr       - a pyll expression root.\n    conditions - a tuple of conditions (`Cond`) that must be True for\n                 `expr` to be evaluated.\n    hps        - dictionary to populate\n\n    Creates `hps` dictionary:\n        label -> { 'node': apply node of hyperparameter distribution,\n                   'conditions': `conditions` + tuple,\n                   'label': label\n                   }\n    \"\"\"\n    expr = as_apply(expr)\n    if conditions is None:\n        conditions = ()\n    assert isinstance(expr, Apply)\n    _expr_to_config(expr, conditions, hps)\n    _remove_allpaths(hps, conditions)\n\n\ndef _remove_allpaths(hps, conditions):\n    \"\"\"Hacky way to recognize some kinds of false dependencies\n    Better would be logic programming.\n    \"\"\"\n    potential_conds = {}\n    for k, v in list(hps.items()):\n        if v['node'].name in ('randint', 'categorical'):\n            upper = v['node'].arg['upper'].obj\n            potential_conds[k] = frozenset([EQ(k, ii) for ii in range(upper)])\n\n    for k, v in list(hps.items()):\n        if len(v['conditions']) > 1:\n            all_conds = [[c for c in cond if c is not True]\n                         for cond in v['conditions']]\n            all_conds = [cond for cond in all_conds if len(cond) >= 1]\n            if len(all_conds) == 0:\n                v['conditions'] = set([conditions])\n                continue\n\n            depvar = all_conds[0][0].name\n\n            all_one_var = all(len(cond) == 1 and cond[0].name == depvar\n                              for cond in all_conds)\n            if all_one_var:\n                conds = [cond[0] for cond in all_conds]\n                if frozenset(conds) == potential_conds[depvar]:\n                    v['conditions'] = set([conditions])\n                    continue\n\n\n# -- eof\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/rand.py",
    "content": "\"\"\"\nRandom search - presented as hyperopt.fmin_random\n\"\"\"\nfrom __future__ import absolute_import\nimport logging\nimport numpy as np\n\nfrom . import pyll\n\nfrom .base import miscs_update_idxs_vals\n\nlogger = logging.getLogger(__name__)\n\n\ndef suggest(new_ids, domain, trials, seed):\n    rng = np.random.RandomState(seed)\n    rval = []\n    for ii, new_id in enumerate(new_ids):\n        # -- sample new specs, idxs, vals\n        idxs, vals = pyll.rec_eval(\n            domain.s_idxs_vals,\n            memo={\n                domain.s_new_ids: [new_id],\n                domain.s_rng: rng,\n            })\n        new_result = domain.new_result()\n        new_misc = dict(tid=new_id, cmd=domain.cmd, workdir=domain.workdir)\n        miscs_update_idxs_vals([new_misc], idxs, vals)\n        rval.extend(trials.new_trial_docs([new_id],\n                    [None], [new_result], [new_misc]))\n    return rval\n\n\ndef suggest_batch(new_ids, domain, trials, seed):\n\n    rng = np.random.RandomState(seed)\n    # -- sample new specs, idxs, vals\n    idxs, vals = pyll.rec_eval(\n        domain.s_idxs_vals,\n        memo={\n            domain.s_new_ids: new_ids,\n            domain.s_rng: rng,\n        })\n    return idxs, vals\n\n\n# flake8 likes no trailing blank line\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/rdists.py",
    "content": "\"\"\"\nExtra distributions to complement scipy.stats\n\n\"\"\"\nfrom __future__ import division\nfrom builtins import map\nfrom builtins import object\nfrom past.utils import old_div\nimport numpy as np\nimport numpy.random as mtrand\nimport scipy.stats\nfrom scipy.stats import rv_continuous  # , rv_discrete\n\n\nclass loguniform_gen(rv_continuous):\n    \"\"\" Stats for Y = e^X where X ~ U(low, high).\n\n    \"\"\"\n\n    def __init__(self, low=0, high=1):\n        rv_continuous.__init__(self,\n                               a=np.exp(low),\n                               b=np.exp(high))\n        self._low = low\n        self._high = high\n\n    def _rvs(self):\n        rval = np.exp(mtrand.uniform(\n            self._low,\n            self._high,\n            self._size))\n        return rval\n\n    def _pdf(self, x):\n        return old_div(1.0, (x * (self._high - self._low)))\n\n    def _logpdf(self, x):\n        return - np.log(x) - np.log(self._high - self._low)\n\n    def _cdf(self, x):\n        return old_div((np.log(x) - self._low), (self._high - self._low))\n\n\nfrom scipy.stats._continuous_distns import lognorm_gen as scipy_lognorm_gen\n\nclass lognorm_gen(scipy_lognorm_gen):\n    def __init__(self, mu, sigma):\n        self.mu_ = mu\n        self.s_ = sigma\n        scipy_lognorm_gen.__init__(self)\n\n        # I still don't understand what scipy stats objects are\n        # doing re: this stuff\n        del self.__dict__['_parse_args']\n        del self.__dict__['_parse_args_stats']\n        del self.__dict__['_parse_args_rvs']\n\n    def _parse_args(self, *args, **kwds):\n        assert not args, args\n        assert not kwds, kwds\n        args = (self.s_,)\n        loc = 0\n        scale = np.exp(self.mu_)\n        return args, loc, scale\n\n\ndef qtable_pmf(x, q, qlow, xs, ps):\n    qx = np.round(old_div(np.atleast_1d(x).astype(np.float), q)) * q\n    is_multiple = np.isclose(qx, x)\n    ix = np.round(old_div((qx - qlow), q)).astype(np.int)\n    is_inbounds = np.logical_and(ix >= 0, ix < len(ps))\n    oks = np.logical_and(is_multiple, is_inbounds)\n    rval = np.zeros_like(qx)\n    rval[oks] = np.asarray(ps)[ix[oks]]\n    if isinstance(x, np.ndarray):\n        return rval.reshape(x.shape)\n    else:\n        return float(rval)\n\n\ndef qtable_logpmf(x, q, qlow, xs, ps):\n    p = qtable_pmf(np.atleast_1d(x), q, qlow, xs, ps)\n    # -- this if/else avoids np warning about underflow\n    rval = np.zeros_like(p)\n    rval[p == 0] = -np.inf\n    rval[p != 0] = np.log(p[p != 0])\n    if isinstance(x, np.ndarray):\n        return rval\n    else:\n        return float(rval)\n\n\nclass quniform_gen(object):\n    # -- not inheriting from scipy.stats.rv_discrete\n    #    because I don't understand the design of those rv classes\n    \"\"\" Stats for Y = q * round(X / q) where X ~ U(low, high).\n\n    \"\"\"\n\n    def __init__(self, low, high, q):\n        low, high, q = list(map(float, (low, high, q)))\n        qlow = np.round(old_div(low, q)) * q\n        qhigh = np.round(old_div(high, q)) * q\n        if qlow == qhigh:\n            xs = [qlow]\n            ps = [1.0]\n        else:\n            lowmass = 1 - (old_div((low - qlow + .5 * q), q))\n            assert 0 <= lowmass <= 1.0, (lowmass, low, qlow, q)\n            highmass = old_div((high - qhigh + .5 * q), q)\n            assert 0 <= highmass <= 1.0, (highmass, high, qhigh, q)\n            # -- xs: qlow to qhigh inclusive\n            xs = np.arange(qlow, qhigh + .5 * q, q)\n            ps = np.ones(len(xs))\n            ps[0] = lowmass\n            ps[-1] = highmass\n            ps /= ps.sum()\n\n        self.low = low\n        self.high = high\n        self.q = q\n        self.qlow = qlow\n        self.qhigh = qhigh\n        self.xs = np.asarray(xs)\n        self.ps = np.asarray(ps)\n\n    def pmf(self, x):\n        return qtable_pmf(x, self.q, self.qlow, self.xs, self.ps)\n\n    def logpmf(self, x):\n        return qtable_logpmf(x, self.q, self.qlow, self.xs, self.ps)\n\n    def rvs(self, size=()):\n        rval = mtrand.uniform(low=self.low, high=self.high, size=size)\n        rval = np.round(old_div(rval, self.q)) * self.q\n        return rval\n\n\nclass qloguniform_gen(quniform_gen):\n    \"\"\" Stats for Y = q * round(e^X / q) where X ~ U(low, high).\n\n    \"\"\"\n    # -- not inheriting from scipy.stats.rv_discrete\n    #    because I don't understand the design of those rv classes\n\n    def __init__(self, low, high, q):\n        low, high, q = list(map(float, (low, high, q)))\n        elow = np.exp(low)\n        ehigh = np.exp(high)\n        qlow = np.round(old_div(elow, q)) * q\n        qhigh = np.round(old_div(ehigh, q)) * q\n\n        # -- loguniform for using the CDF\n        lu = loguniform_gen(low=low, high=high)\n\n        cut_low = np.exp(low)  # -- lowest possible pre-round value\n        cut_high = min(qlow + .5 * q,  # -- highest value that would ...\n                       ehigh)         # -- round to qlow\n        xs = [qlow]\n        ps = [lu.cdf(cut_high)]\n        ii = 0\n        cdf_high = ps[0]\n\n        while cut_high < (ehigh - 1e-10):\n            # TODO: cut_low never used\n            cut_high, cut_low = min(cut_high + q, ehigh), cut_high\n            cdf_high, cdf_low = lu.cdf(cut_high), cdf_high\n            ii += 1\n            xs.append(qlow + ii * q)\n            ps.append(cdf_high - cdf_low)\n\n        ps = np.asarray(ps)\n        ps /= ps.sum()\n\n        self.low = low\n        self.high = high\n        self.q = q\n        self.qlow = qlow\n        self.qhigh = qhigh\n        self.xs = np.asarray(xs)\n        self.ps = ps\n\n    def pmf(self, x):\n        return qtable_pmf(x, self.q, self.qlow, self.xs, self.ps)\n\n    def logpmf(self, x):\n        return qtable_logpmf(x, self.q, self.qlow, self.xs, self.ps)\n\n    def rvs(self, size=()):\n        x = mtrand.uniform(low=self.low, high=self.high, size=size)\n        rval = np.round(old_div(np.exp(x), self.q)) * self.q\n        return rval\n\n\nclass qnormal_gen(object):\n    \"\"\"Stats for Y = q * round(X / q) where X ~ N(mu, sigma)\n    \"\"\"\n\n    def __init__(self, mu, sigma, q):\n        self.mu, self.sigma, self.q = list(map(float, (mu, sigma, q)))\n        # -- distfn for using the CDF\n        self._norm_logcdf = scipy.stats.norm(loc=mu, scale=sigma).logcdf\n\n    def in_domain(self, x):\n        return np.isclose(x, np.round(old_div(x, self.q)) * self.q)\n\n    def pmf(self, x):\n        return np.exp(self.logpmf(x))\n\n    def logpmf(self, x):\n        x1 = np.atleast_1d(x)\n        in_domain = self.in_domain(x1)\n        rval = np.zeros_like(x1, dtype=np.float) - np.inf\n        x_in_domain = x1[in_domain]\n\n        ubound = x_in_domain + self.q * 0.5\n        lbound = x_in_domain - self.q * 0.5\n        # -- reflect intervals right of mu to other side\n        #    for more accurate calculation\n        flip = (lbound > self.mu)\n        tmp = lbound[flip].copy()\n        lbound[flip] = self.mu - (ubound[flip] - self.mu)\n        ubound[flip] = self.mu - (tmp - self.mu)\n\n        assert np.all(ubound > lbound)\n        a = self._norm_logcdf(ubound)\n        b = self._norm_logcdf(lbound)\n        rval[in_domain] = a + np.log1p(- np.exp(b - a))\n        if isinstance(x, np.ndarray):\n            return rval\n        else:\n            return float(rval)\n\n    def rvs(self, size=()):\n        x = mtrand.normal(loc=self.mu, scale=self.sigma, size=size)\n        rval = np.round(old_div(x, self.q)) * self.q\n        return rval\n\n\nclass qlognormal_gen(object):\n    \"\"\"Stats for Y = q * round(exp(X) / q) where X ~ N(mu, sigma)\n    \"\"\"\n\n    def __init__(self, mu, sigma, q):\n        self.mu, self.sigma, self.q = list(map(float, (mu, sigma, q)))\n        # -- distfn for using the CDF\n        self._norm_cdf = scipy.stats.norm(loc=mu, scale=sigma).cdf\n\n    def in_domain(self, x):\n        return np.logical_and((x >= 0),\n                              np.isclose(x, np.round(old_div(x, self.q)) * self.q))\n\n    def pmf(self, x):\n        x1 = np.atleast_1d(x)\n        in_domain = self.in_domain(x1)\n        x1_in_domain = x1[in_domain]\n        rval = np.zeros_like(x1, dtype=np.float)\n        rval_in_domain = self._norm_cdf(np.log(x1_in_domain + 0.5 * self.q))\n        rval_in_domain[x1_in_domain != 0] -= self._norm_cdf(\n            np.log(x1_in_domain[x1_in_domain != 0] - 0.5 * self.q))\n        rval[in_domain] = rval_in_domain\n        if isinstance(x, np.ndarray):\n            return rval\n        else:\n            return float(rval)\n\n    def logpmf(self, x):\n        pmf = self.pmf(np.atleast_1d(x))\n        assert np.all(pmf >= 0)\n        pmf[pmf == 0] = -np.inf\n        pmf[pmf > 0] = np.log(pmf[pmf > 0])\n        if isinstance(x, np.ndarray):\n            return pmf\n        else:\n            return float(pmf)\n\n    def rvs(self, size=()):\n        x = mtrand.normal(loc=self.mu, scale=self.sigma, size=size)\n        rval = np.round(old_div(np.exp(x), self.q)) * self.q\n        return rval\n\n\n# -- non-empty last line for flake8\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/tpe.py",
    "content": "\"\"\"\nGraphical model (GM)-based optimization algorithm using Theano\n\"\"\"\nfrom __future__ import print_function\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom builtins import str\nfrom builtins import map\nfrom builtins import zip\nfrom builtins import range\nfrom past.utils import old_div\nimport logging\nimport time\n\nimport numpy as np\nfrom scipy.special import erf\nfrom . import pyll\nfrom .pyll import scope\nfrom .pyll.stochastic import implicit_stochastic\n\nfrom .base import miscs_to_idxs_vals\nfrom .base import miscs_update_idxs_vals\n# from .base import Trials\nfrom . import rand\n\n__authors__ = \"James Bergstra\"\n__license__ = \"3-clause BSD License\"\n__contact__ = \"github.com/jaberg/hyperopt\"\nlogger = logging.getLogger(__name__)\n\nEPS = 1e-12\n\n# -- default linear forgetting. don't try to change by writing this variable\n# because it's captured in function default args when this file is read\nDEFAULT_LF = 25\n\n\nadaptive_parzen_samplers = {}\n\n\ndef adaptive_parzen_sampler(name):\n    def wrapper(f):\n        assert name not in adaptive_parzen_samplers\n        adaptive_parzen_samplers[name] = f\n        return f\n    return wrapper\n\n\n#\n# These are some custom distributions\n# that are used to represent posterior distributions.\n#\n\n# -- Categorical\n\n@scope.define\ndef categorical_lpdf(sample, p, upper):\n    \"\"\"\n    \"\"\"\n    if sample.size:\n        return np.log(np.asarray(p)[sample])\n    else:\n        return np.asarray([])\n\n\n# -- Bounded Gaussian Mixture Model (BGMM)\n\n@implicit_stochastic\n@scope.define\ndef GMM1(weights, mus, sigmas, low=None, high=None, q=None, rng=None,\n         size=()):\n    \"\"\"Sample from truncated 1-D Gaussian Mixture Model\"\"\"\n    weights, mus, sigmas = list(map(np.asarray, (weights, mus, sigmas)))\n    assert len(weights) == len(mus) == len(sigmas)\n    n_samples = int(np.prod(size))\n    # n_components = len(weights)\n    if low is None and high is None:\n        # -- draw from a standard GMM\n        active = np.argmax(rng.multinomial(1, weights, (n_samples,)), axis=1)\n        samples = rng.normal(loc=mus[active], scale=sigmas[active])\n    else:\n        # -- draw from truncated components\n        # TODO: one-sided-truncation\n        low = float(low)\n        high = float(high)\n        if low >= high:\n            raise ValueError('low >= high', (low, high))\n        samples = []\n        while len(samples) < n_samples:\n            active = np.argmax(rng.multinomial(1, weights))\n            draw = rng.normal(loc=mus[active], scale=sigmas[active])\n            if low <= draw < high:\n                samples.append(draw)\n    samples = np.reshape(np.asarray(samples), size)\n    # print 'SAMPLES', samples\n    if q is None:\n        return samples\n    else:\n        return np.round(old_div(samples, q)) * q\n\n\n@scope.define\ndef normal_cdf(x, mu, sigma):\n    top = (x - mu)\n    bottom = np.maximum(np.sqrt(2) * sigma, EPS)\n    z = old_div(top, bottom)\n    return 0.5 * (1 + erf(z))\n\n\n@scope.define\ndef GMM1_lpdf(samples, weights, mus, sigmas, low=None, high=None, q=None):\n    verbose = 0\n    samples, weights, mus, sigmas = list(map(np.asarray,\n                                         (samples, weights, mus, sigmas)))\n    if samples.size == 0:\n        return np.asarray([])\n    if weights.ndim != 1:\n        raise TypeError('need vector of weights', weights.shape)\n    if mus.ndim != 1:\n        raise TypeError('need vector of mus', mus.shape)\n    if sigmas.ndim != 1:\n        raise TypeError('need vector of sigmas', sigmas.shape)\n    assert len(weights) == len(mus) == len(sigmas)\n    _samples = samples\n    samples = _samples.flatten()\n\n    if verbose:\n        print('GMM1_lpdf:samples', set(samples))\n        print('GMM1_lpdf:weights', weights)\n        print('GMM1_lpdf:mus', mus)\n        print('GMM1_lpdf:sigmas', sigmas)\n        print('GMM1_lpdf:low', low)\n        print('GMM1_lpdf:high', high)\n        print('GMM1_lpdf:q', q)\n\n    if low is None and high is None:\n        p_accept = 1\n    else:\n        p_accept = np.sum(\n            weights * (\n                normal_cdf(high, mus, sigmas) -\n                normal_cdf(low, mus, sigmas)))\n\n    if q is None:\n        dist = samples[:, None] - mus\n        mahal = (old_div(dist, np.maximum(sigmas, EPS))) ** 2\n        # mahal shape is (n_samples, n_components)\n        Z = np.sqrt(2 * np.pi * sigmas ** 2)\n        coef = weights / Z / p_accept\n        rval = logsum_rows(- 0.5 * mahal + np.log(coef))\n    else:\n        prob = np.zeros(samples.shape, dtype='float64')\n        for w, mu, sigma in zip(weights, mus, sigmas):\n            if high is None:\n                ubound = samples + old_div(q, 2.0)\n            else:\n                ubound = np.minimum(samples + old_div(q, 2.0), high)\n            if low is None:\n                lbound = samples - old_div(q, 2.0)\n            else:\n                lbound = np.maximum(samples - old_div(q, 2.0), low)\n            # -- two-stage addition is slightly more numerically accurate\n            inc_amt = w * normal_cdf(ubound, mu, sigma)\n            inc_amt -= w * normal_cdf(lbound, mu, sigma)\n            prob += inc_amt\n        rval = np.log(prob) - np.log(p_accept)\n\n    if verbose:\n        print('GMM1_lpdf:rval:', dict(list(zip(samples, rval))))\n\n    rval.shape = _samples.shape\n    return rval\n\n\n# -- Mixture of Log-Normals\n\n@scope.define\ndef lognormal_cdf(x, mu, sigma):\n    # wikipedia claims cdf is\n    # .5 + .5 erf( log(x) - mu / sqrt(2 sigma^2))\n    #\n    # the maximum is used to move negative values and 0 up to a point\n    # where they do not cause nan or inf, but also don't contribute much\n    # to the cdf.\n    if len(x) == 0:\n        return np.asarray([])\n    if x.min() < 0:\n        raise ValueError('negative arg to lognormal_cdf', x)\n    olderr = np.seterr(divide='ignore')\n    try:\n        top = np.log(np.maximum(x, EPS)) - mu\n        bottom = np.maximum(np.sqrt(2) * sigma, EPS)\n        z = old_div(top, bottom)\n        return .5 + .5 * erf(z)\n    finally:\n        np.seterr(**olderr)\n\n\n@scope.define\ndef lognormal_lpdf(x, mu, sigma):\n    # formula copied from wikipedia\n    # http://en.wikipedia.org/wiki/Log-normal_distribution\n    assert np.all(sigma >= 0)\n    sigma = np.maximum(sigma, EPS)\n    Z = sigma * x * np.sqrt(2 * np.pi)\n    E = 0.5 * (old_div((np.log(x) - mu), sigma)) ** 2\n    rval = -E - np.log(Z)\n    return rval\n\n\n@scope.define\ndef qlognormal_lpdf(x, mu, sigma, q):\n    # casting rounds up to nearest step multiple.\n    # so lpdf is log of integral from x-step to x+1 of P(x)\n\n    # XXX: subtracting two numbers potentially very close together.\n    return np.log(\n        lognormal_cdf(x, mu, sigma) -\n        lognormal_cdf(x - q, mu, sigma))\n\n\n@implicit_stochastic\n@scope.define\ndef LGMM1(weights, mus, sigmas, low=None, high=None, q=None,\n          rng=None, size=()):\n    weights, mus, sigmas = list(map(np.asarray, (weights, mus, sigmas)))\n    n_samples = np.prod(size)\n    # n_components = len(weights)\n    if low is None and high is None:\n        active = np.argmax(\n            rng.multinomial(1, weights, (n_samples,)),\n            axis=1)\n        assert len(active) == n_samples\n        samples = np.exp(\n            rng.normal(\n                loc=mus[active],\n                scale=sigmas[active]))\n    else:\n        # -- draw from truncated components\n        # TODO: one-sided-truncation\n        low = float(low)\n        high = float(high)\n        if low >= high:\n            raise ValueError('low >= high', (low, high))\n        samples = []\n        while len(samples) < n_samples:\n            active = np.argmax(rng.multinomial(1, weights))\n            draw = rng.normal(loc=mus[active], scale=sigmas[active])\n            if low <= draw < high:\n                samples.append(np.exp(draw))\n        samples = np.asarray(samples)\n\n    samples = np.reshape(np.asarray(samples), size)\n    if q is not None:\n        samples = np.round(old_div(samples, q)) * q\n    return samples\n\n\ndef logsum_rows(x):\n    R, C = x.shape\n    m = x.max(axis=1)\n    return np.log(np.exp(x - m[:, None]).sum(axis=1)) + m\n\n\n@scope.define\ndef LGMM1_lpdf(samples, weights, mus, sigmas, low=None, high=None, q=None):\n    samples, weights, mus, sigmas = list(map(np.asarray,\n                                         (samples, weights, mus, sigmas)))\n    assert weights.ndim == 1\n    assert mus.ndim == 1\n    assert sigmas.ndim == 1\n    _samples = samples\n    if samples.ndim != 1:\n        samples = samples.flatten()\n\n    if low is None and high is None:\n        p_accept = 1\n    else:\n        p_accept = np.sum(\n            weights * (\n                normal_cdf(high, mus, sigmas) -\n                normal_cdf(low, mus, sigmas)))\n\n    if q is None:\n        # compute the lpdf of each sample under each component\n        lpdfs = lognormal_lpdf(samples[:, None], mus, sigmas)\n        rval = logsum_rows(lpdfs + np.log(weights))\n    else:\n        # compute the lpdf of each sample under each component\n        prob = np.zeros(samples.shape, dtype='float64')\n        for w, mu, sigma in zip(weights, mus, sigmas):\n            if high is None:\n                ubound = samples + old_div(q, 2.0)\n            else:\n                ubound = np.minimum(samples + old_div(q, 2.0), np.exp(high))\n            if low is None:\n                lbound = samples - old_div(q, 2.0)\n            else:\n                lbound = np.maximum(samples - old_div(q, 2.0), np.exp(low))\n            lbound = np.maximum(0, lbound)\n            # -- two-stage addition is slightly more numerically accurate\n            inc_amt = w * lognormal_cdf(ubound, mu, sigma)\n            inc_amt -= w * lognormal_cdf(lbound, mu, sigma)\n            prob += inc_amt\n        rval = np.log(prob) - np.log(p_accept)\n    rval.shape = _samples.shape\n    return rval\n\n\n#\n# This is the weird heuristic ParzenWindow estimator used for continuous\n# distributions in various ways.\n#\n\n@scope.define_info(o_len=3)\ndef adaptive_parzen_normal_orig(mus, prior_weight, prior_mu, prior_sigma):\n    \"\"\"\n    A heuristic estimator for the mu and sigma values of a GMM\n    TODO: try to find this heuristic in the literature, and cite it - Yoshua\n    mentioned the term 'elastic' I think?\n\n    mus - matrix (N, M) of M, N-dimensional component centers\n    \"\"\"\n    mus_orig = np.array(mus)\n    mus = np.array(mus)\n    assert str(mus.dtype) != 'object'\n\n    if mus.ndim != 1:\n        raise TypeError('mus must be vector', mus)\n    if len(mus) == 0:\n        mus = np.asarray([prior_mu])\n        sigma = np.asarray([prior_sigma])\n    elif len(mus) == 1:\n        mus = np.asarray([prior_mu] + [mus[0]])\n        sigma = np.asarray([prior_sigma, prior_sigma * .5])\n    elif len(mus) >= 2:\n        order = np.argsort(mus)\n        mus = mus[order]\n        sigma = np.zeros_like(mus)\n        sigma[1:-1] = np.maximum(\n            mus[1:-1] - mus[0:-2],\n            mus[2:] - mus[1:-1])\n        if len(mus) > 2:\n            lsigma = mus[2] - mus[0]\n            usigma = mus[-1] - mus[-3]\n        else:\n            lsigma = mus[1] - mus[0]\n            usigma = mus[-1] - mus[-2]\n\n        sigma[0] = lsigma\n        sigma[-1] = usigma\n\n        # XXX: is sorting them necessary anymore?\n        # un-sort the mus and sigma\n        mus[order] = mus.copy()\n        sigma[order] = sigma.copy()\n\n        if not np.all(mus_orig == mus):\n            print('orig', mus_orig)\n            print('mus', mus)\n        assert np.all(mus_orig == mus)\n\n        # put the prior back in\n        mus = np.asarray([prior_mu] + list(mus))\n        sigma = np.asarray([prior_sigma] + list(sigma))\n\n    maxsigma = prior_sigma\n    # -- magic formula:\n    minsigma = old_div(prior_sigma, np.sqrt(1 + len(mus)))\n\n    sigma = np.clip(sigma, minsigma, maxsigma)\n\n    weights = np.ones(len(mus), dtype=mus.dtype)\n    weights[0] = prior_weight\n\n    weights = old_div(weights, weights.sum())\n    if 0:\n        print('WEIGHTS', weights)\n        print('MUS', mus)\n        print('SIGMA', sigma)\n\n    return weights, mus, sigma\n\n\n@scope.define\ndef linear_forgetting_weights(N, LF):\n    assert N >= 0\n    assert LF > 0\n    if N == 0:\n        return np.asarray([])\n    elif N < LF:\n        return np.ones(N)\n    else:\n        ramp = np.linspace(old_div(1.0, N), 1.0, num=N - LF)\n        flat = np.ones(LF)\n        weights = np.concatenate([ramp, flat], axis=0)\n        assert weights.shape == (N,), (weights.shape, N)\n        return weights\n\n# XXX: make TPE do a post-inference pass over the pyll graph and insert\n# non-default LF argument\n\n\n@scope.define_info(o_len=3)\ndef adaptive_parzen_normal(mus, prior_weight, prior_mu, prior_sigma,\n                           LF=DEFAULT_LF):\n    \"\"\"\n    mus - matrix (N, M) of M, N-dimensional component centers\n    \"\"\"\n    mus = np.array(mus)\n    assert str(mus.dtype) != 'object'\n\n    if mus.ndim != 1:\n        raise TypeError('mus must be vector', mus)\n    if len(mus) == 0:\n        srtd_mus = np.asarray([prior_mu])\n        sigma = np.asarray([prior_sigma])\n        prior_pos = 0\n    elif len(mus) == 1:\n        if prior_mu < mus[0]:\n            prior_pos = 0\n            srtd_mus = np.asarray([prior_mu, mus[0]])\n            sigma = np.asarray([prior_sigma, prior_sigma * .5])\n        else:\n            prior_pos = 1\n            srtd_mus = np.asarray([mus[0], prior_mu])\n            sigma = np.asarray([prior_sigma * .5, prior_sigma])\n    elif len(mus) >= 2:\n\n        # create new_mus, which is sorted, and in which\n        # the prior has been inserted\n        order = np.argsort(mus)\n        prior_pos = np.searchsorted(mus[order], prior_mu)\n        srtd_mus = np.zeros(len(mus) + 1)\n        srtd_mus[:prior_pos] = mus[order[:prior_pos]]\n        srtd_mus[prior_pos] = prior_mu\n        srtd_mus[prior_pos + 1:] = mus[order[prior_pos:]]\n        sigma = np.zeros_like(srtd_mus)\n        sigma[1:-1] = np.maximum(\n            srtd_mus[1:-1] - srtd_mus[0:-2],\n            srtd_mus[2:] - srtd_mus[1:-1])\n        lsigma = srtd_mus[1] - srtd_mus[0]\n        usigma = srtd_mus[-1] - srtd_mus[-2]\n        sigma[0] = lsigma\n        sigma[-1] = usigma\n\n    if LF and LF < len(mus):\n        unsrtd_weights = linear_forgetting_weights(len(mus), LF)\n        srtd_weights = np.zeros_like(srtd_mus)\n        assert len(unsrtd_weights) + 1 == len(srtd_mus)\n        srtd_weights[:prior_pos] = unsrtd_weights[order[:prior_pos]]\n        srtd_weights[prior_pos] = prior_weight\n        srtd_weights[prior_pos + 1:] = unsrtd_weights[order[prior_pos:]]\n\n    else:\n        srtd_weights = np.ones(len(srtd_mus))\n        srtd_weights[prior_pos] = prior_weight\n\n    # -- magic formula:\n    maxsigma = old_div(prior_sigma, 1.0)\n    minsigma = old_div(prior_sigma, min(100.0, (1.0 + len(srtd_mus))))\n\n    sigma = np.clip(sigma, minsigma, maxsigma)\n\n    sigma[prior_pos] = prior_sigma\n    assert prior_sigma > 0\n    assert maxsigma > 0\n    assert minsigma > 0\n    assert np.all(sigma > 0), (sigma.min(), minsigma, maxsigma)\n\n    srtd_weights /= srtd_weights.sum()\n    if 0:\n        print('WEIGHTS', srtd_weights)\n        print('MUS', srtd_mus)\n        print('SIGMA', sigma)\n\n    return srtd_weights, srtd_mus, sigma\n\n#\n# Adaptive Parzen Samplers\n# These produce conditional estimators for various prior distributions\n#\n# NOTE: These are actually used in a fairly complicated way.\n# They are actually returning pyll.Apply AST (Abstract Syntax Tree) objects.\n# This AST is then manipulated and the corresponding _lpdf function is called\n# (e.g  GMM1_lpdf)\n#\n# Please see the build_posterior function for details\n\n# -- Uniform\n\n\n@adaptive_parzen_sampler('uniform')\ndef ap_uniform_sampler(obs, prior_weight, low, high, size=(), rng=None):\n    prior_mu = 0.5 * (high + low)\n    prior_sigma = 1.0 * (high - low)\n    weights, mus, sigmas = scope.adaptive_parzen_normal(obs,\n                                                        prior_weight, prior_mu, prior_sigma)\n    return scope.GMM1(weights, mus, sigmas, low=low, high=high, q=None,\n                      size=size, rng=rng)\n\n\n@adaptive_parzen_sampler('quniform')\ndef ap_quniform_sampler(obs, prior_weight, low, high, q, size=(), rng=None):\n    prior_mu = 0.5 * (high + low)\n    prior_sigma = 1.0 * (high - low)\n    weights, mus, sigmas = scope.adaptive_parzen_normal(obs,\n                                                        prior_weight, prior_mu, prior_sigma)\n    return scope.GMM1(weights, mus, sigmas, low=low, high=high, q=q,\n                      size=size, rng=rng)\n\n\n@adaptive_parzen_sampler('loguniform')\ndef ap_loguniform_sampler(obs, prior_weight, low, high,\n                          size=(), rng=None):\n    prior_mu = 0.5 * (high + low)\n    prior_sigma = 1.0 * (high - low)\n    weights, mus, sigmas = scope.adaptive_parzen_normal(\n        scope.log(obs), prior_weight, prior_mu, prior_sigma)\n    rval = scope.LGMM1(weights, mus, sigmas, low=low, high=high,\n                       size=size, rng=rng)\n    return rval\n\n\n@adaptive_parzen_sampler('qloguniform')\ndef ap_qloguniform_sampler(obs, prior_weight, low, high, q,\n                           size=(), rng=None):\n    prior_mu = 0.5 * (high + low)\n    prior_sigma = 1.0 * (high - low)\n    weights, mus, sigmas = scope.adaptive_parzen_normal(\n        scope.log(\n            # -- map observations that were quantized to be below exp(low)\n            #    (particularly 0) back up to exp(low) where they will\n            #    interact in a reasonable way with the AdaptiveParzen\n            #    thing.\n            scope.maximum(\n                obs,\n                scope.maximum(  # -- protect against exp(low) underflow\n                    EPS,\n                    scope.exp(low)))),\n        prior_weight, prior_mu, prior_sigma)\n    return scope.LGMM1(weights, mus, sigmas, low, high, q=q,\n                       size=size, rng=rng)\n\n\n# -- Normal\n\n@adaptive_parzen_sampler('normal')\ndef ap_normal_sampler(obs, prior_weight, mu, sigma, size=(), rng=None):\n    weights, mus, sigmas = scope.adaptive_parzen_normal(\n        obs, prior_weight, mu, sigma)\n    return scope.GMM1(weights, mus, sigmas, size=size, rng=rng)\n\n\n@adaptive_parzen_sampler('qnormal')\ndef ap_qnormal_sampler(obs, prior_weight, mu, sigma, q, size=(), rng=None):\n    weights, mus, sigmas = scope.adaptive_parzen_normal(\n        obs, prior_weight, mu, sigma)\n    return scope.GMM1(weights, mus, sigmas, q=q, size=size, rng=rng)\n\n\n@adaptive_parzen_sampler('lognormal')\ndef ap_loglognormal_sampler(obs, prior_weight, mu, sigma, size=(), rng=None):\n    weights, mus, sigmas = scope.adaptive_parzen_normal(\n        scope.log(obs), prior_weight, mu, sigma)\n    rval = scope.LGMM1(weights, mus, sigmas, size=size, rng=rng)\n    return rval\n\n\n@adaptive_parzen_sampler('qlognormal')\ndef ap_qlognormal_sampler(obs, prior_weight, mu, sigma, q, size=(), rng=None):\n    log_obs = scope.log(scope.maximum(obs, EPS))\n    weights, mus, sigmas = scope.adaptive_parzen_normal(\n        log_obs, prior_weight, mu, sigma)\n    rval = scope.LGMM1(weights, mus, sigmas, q=q, size=size, rng=rng)\n    return rval\n\n\n# -- Categorical\n\n@adaptive_parzen_sampler('randint')\ndef ap_categorical_sampler(obs, prior_weight, upper,\n                           size=(), rng=None, LF=DEFAULT_LF):\n    weights = scope.linear_forgetting_weights(scope.len(obs), LF=LF)\n    counts = scope.bincount(obs, minlength=upper, weights=weights)\n    # -- add in some prior pseudocounts\n    pseudocounts = counts + prior_weight\n    return scope.categorical(old_div(pseudocounts, scope.sum(pseudocounts)),\n                             upper=upper, size=size, rng=rng)\n\n\n# @adaptive_parzen_sampler('categorical')\n# def ap_categorical_sampler(obs, prior_weight, p, upper, size=(), rng=None,\n#                            LF=DEFAULT_LF):\n#     return scope.categorical(p, upper, size=size, rng\n#                              =rng)\n\n@scope.define\ndef tpe_cat_pseudocounts(counts, upper, prior_weight, p, size):\n    if size == 0 or np.prod(size) == 0:\n        return []\n    if p.ndim == 2:\n        assert np.all(p == p[0])\n        p = p[0]\n    pseudocounts = counts + upper * (prior_weight * p)\n    return old_div(pseudocounts, np.sum(pseudocounts))\n\n\n# TODO: this seems to be a redefinition of the function\n# starting in line 573.\n@adaptive_parzen_sampler('categorical')\ndef ap_categorical_sampler(obs, prior_weight, p, upper=None,\n                           size=(), rng=None, LF=DEFAULT_LF):\n    weights = scope.linear_forgetting_weights(scope.len(obs), LF=LF)\n    counts = scope.bincount(obs, minlength=upper, weights=weights)\n    pseudocounts = scope.tpe_cat_pseudocounts(counts, upper, prior_weight, p, size)\n    return scope.categorical(pseudocounts, upper=upper, size=size, rng=rng)\n\n#\n# Posterior clone performs symbolic inference on the pyll graph of priors.\n#\n\n\n@scope.define_info(o_len=2)\ndef ap_filter_trials(o_idxs, o_vals, l_idxs, l_vals, gamma,\n                     gamma_cap=DEFAULT_LF):\n    \"\"\"Return the elements of o_vals that correspond to trials whose losses\n    were above gamma, or below gamma.\n    \"\"\"\n    o_idxs, o_vals, l_idxs, l_vals = list(map(np.asarray,\n                                          [o_idxs, o_vals, l_idxs, l_vals]))\n\n    # XXX if this is working, refactor this sort for efficiency\n\n    # Splitting is done this way to cope with duplicate loss values.\n    n_below = min(int(np.ceil(gamma * np.sqrt(len(l_vals)))), gamma_cap)\n    l_order = np.argsort(l_vals)\n\n    keep_idxs = set(l_idxs[l_order[:n_below]])\n    below = [v for i, v in zip(o_idxs, o_vals) if i in keep_idxs]\n\n    if 0:\n        print('DEBUG: thresh', l_vals[l_order[:n_below]])\n\n    keep_idxs = set(l_idxs[l_order[n_below:]])\n    above = [v for i, v in zip(o_idxs, o_vals) if i in keep_idxs]\n\n    return np.asarray(below), np.asarray(above)\n\n\ndef build_posterior(specs, prior_idxs, prior_vals, obs_idxs, obs_vals,\n                    oloss_idxs, oloss_vals, oloss_gamma, prior_weight):\n    \"\"\"\n    This method clones a posterior inference graph by iterating forward in\n    topological order, and replacing prior random-variables (prior_vals) with\n    new posterior distributions that make use of observations (obs_vals).\n\n    \"\"\"\n    assert all(isinstance(arg, pyll.Apply)\n               for arg in [oloss_idxs, oloss_vals, oloss_gamma])\n\n    expr = pyll.as_apply([specs, prior_idxs, prior_vals])\n    nodes = pyll.dfs(expr)\n\n    # build the joint posterior distribution as the values in this memo\n    memo = {}\n    # map prior RVs to observations\n    obs_memo = {}\n\n    for nid in prior_vals:\n        # construct the leading args for each call to adaptive_parzen_sampler\n        # which will permit the \"adaptive parzen samplers\" to adapt to the\n        # correct samples.\n        obs_below, obs_above = scope.ap_filter_trials(\n            obs_idxs[nid], obs_vals[nid],\n            oloss_idxs, oloss_vals, oloss_gamma)\n        obs_memo[prior_vals[nid]] = [obs_below, obs_above]\n    for node in nodes:\n        if node not in memo:\n            new_inputs = [memo[arg] for arg in node.inputs()]\n            if node in obs_memo:\n                # -- this case corresponds to an observed Random Var\n                # node.name is a distribution like \"normal\", \"randint\", etc.\n                obs_below, obs_above = obs_memo[node]\n                aa = [memo[a] for a in node.pos_args]\n                fn = adaptive_parzen_samplers[node.name]\n                b_args = [obs_below, prior_weight] + aa\n                named_args = [[kw, memo[arg]]\n                              for (kw, arg) in node.named_args]\n                b_post = fn(*b_args, **dict(named_args))\n                a_args = [obs_above, prior_weight] + aa\n                a_post = fn(*a_args, **dict(named_args))\n\n                # fn is a function e.g ap_uniform_sampler, ap_normal_sampler, etc\n                # b_post and a_post are pyll.Apply objects that are\n                # AST (Abstract Syntax Trees).  They create the distribution,\n                # (e.g. using adaptive_parzen_normal), and then\n                # call a function to sample randomly from that distibution\n                # (e.g. using scope.GMM1) which return\n                # those samples.\n                #\n                # However we are only interested in using the samples from b_post.\n                # This codes looks at the AST and grabs the function name that we used\n                # for sampling (e.g. scope.GMM1)   and modifies it, e.g. to \"scope.GMM1_lpdf\".\n                # It then calls this function, passing in the samples as the first parameter.a_args\n                #\n                # The result is that we are effectively calling, for example:\n                # below_llik = GMM1_lpdf( b_post, *adaptive_parzen_normal(obs_below, ...))\n                # above_llik = GMM1_lpdf( b_post, *adaptive_parzen_normal(obs_above, ...))\n\n                assert a_post.name == b_post.name\n                fn_lpdf = getattr(scope, a_post.name + '_lpdf')\n                a_kwargs = dict([(n, a) for n, a in a_post.named_args\n                                 if n not in ('rng', 'size')])\n                b_kwargs = dict([(n, a) for n, a in b_post.named_args\n                                 if n not in ('rng', 'size')])\n\n                # calculate the log likelihood of b_post under both distributions\n                below_llik = fn_lpdf(*([b_post] + b_post.pos_args), **b_kwargs)\n                above_llik = fn_lpdf(*([b_post] + a_post.pos_args), **a_kwargs)\n\n                # improvement = below_llik - above_llik\n                # new_node = scope.broadcast_best(b_post, improvement)\n                new_node = scope.broadcast_best(b_post, below_llik, above_llik)\n            elif hasattr(node, 'obj'):\n                # -- keep same literals in the graph\n                new_node = node\n            else:\n                # -- this case is for all the other stuff in the graph\n                new_node = node.clone_from_inputs(new_inputs)\n            memo[node] = new_node\n    post_specs = memo[specs]\n    post_idxs = dict([(nid, memo[idxs])\n                      for nid, idxs in list(prior_idxs.items())])\n    post_vals = dict([(nid, memo[vals])\n                      for nid, vals in list(prior_vals.items())])\n    assert set(post_idxs.keys()) == set(post_vals.keys())\n    assert set(post_idxs.keys()) == set(prior_idxs.keys())\n    return post_specs, post_idxs, post_vals\n\n\n@scope.define\ndef idxs_prod(full_idxs, idxs_by_label, llik_by_label):\n    \"\"\"Add all of the  log-likelihoods together by id.\n\n    Example arguments:\n    full_idxs = [0, 1, ... N-1]\n    idxs_by_label = {'node_a': [1, 3], 'node_b': [3]}\n    llik_by_label = {'node_a': [0.1, -3.3], node_b: [1.0]}\n\n    This would return N elements: [0, 0.1, 0, -2.3, 0, 0, ... ]\n    \"\"\"\n    assert len(set(full_idxs)) == len(full_idxs)\n    full_idxs = list(full_idxs)\n    rval = np.zeros(len(full_idxs))\n    pos_of_tid = dict(list(zip(full_idxs, list(range(len(full_idxs))))))\n    assert set(idxs_by_label.keys()) == set(llik_by_label.keys())\n    for nid in idxs_by_label:\n        idxs = idxs_by_label[nid]\n        llik = llik_by_label[nid]\n        assert np.all(np.asarray(idxs) > 1)\n        assert len(set(idxs)) == len(idxs)\n        assert len(idxs) == len(llik)\n        for ii, ll in zip(idxs, llik):\n            rval[pos_of_tid[ii]] += ll\n    return rval\n\n\n@scope.define\ndef broadcast_best(samples, below_llik, above_llik):\n    if len(samples):\n        score = below_llik - above_llik\n        if len(samples) != len(score):\n            raise ValueError()\n        best = np.argmax(score)\n        return [samples[best]] * len(samples)\n    else:\n        return []\n\n\n_default_prior_weight = 1.0\n\n# -- suggest best of this many draws on every iteration\n_default_n_EI_candidates = 24\n\n# -- gamma * sqrt(n_trials) is fraction of to use as good\n_default_gamma = 0.25\n\n_default_n_startup_jobs = 20\n\n_default_linear_forgetting = DEFAULT_LF\n\n\ndef tpe_transform(domain, prior_weight, gamma):\n    s_prior_weight = pyll.Literal(float(prior_weight))\n\n    # -- these dummy values will be replaced in suggest1() and never used\n    observed = dict(\n        idxs=pyll.Literal(),\n        vals=pyll.Literal())\n    observed_loss = dict(\n        idxs=pyll.Literal(),\n        vals=pyll.Literal())\n\n    specs, idxs, vals = build_posterior(\n        # -- vectorized clone of bandit template\n        domain.vh.v_expr,\n        # -- this dict and next represent prior dists\n        domain.vh.idxs_by_label(),\n        domain.vh.vals_by_label(),\n        observed['idxs'],\n        observed['vals'],\n        observed_loss['idxs'],\n        observed_loss['vals'],\n        pyll.Literal(gamma),\n        s_prior_weight\n    )\n\n    return (s_prior_weight, observed, observed_loss,\n            specs, idxs, vals)\n\n\ndef suggest(new_ids, domain, trials, seed,\n            prior_weight=_default_prior_weight,\n            n_startup_jobs=_default_n_startup_jobs,\n            n_EI_candidates=_default_n_EI_candidates,\n            gamma=_default_gamma,\n            linear_forgetting=_default_linear_forgetting,\n            ):\n\n    new_id = new_ids[0]\n\n    t0 = time.time()\n    (s_prior_weight, observed, observed_loss, specs, opt_idxs, opt_vals) \\\n        = tpe_transform(domain, prior_weight, gamma)\n    tt = time.time() - t0\n    logger.info('tpe_transform took %f seconds' % tt)\n\n    best_docs = dict()\n    best_docs_loss = dict()\n    for doc in trials.trials:\n        # get either this docs own tid or the one that it's from\n        tid = doc['misc'].get('from_tid', doc['tid'])\n        loss = domain.loss(doc['result'], doc['spec'])\n        if loss is None:\n            # -- associate infinite loss to new/running/failed jobs\n            loss = float('inf')\n        else:\n            loss = float(loss)\n        best_docs_loss.setdefault(tid, loss)\n        if loss <= best_docs_loss[tid]:\n            best_docs_loss[tid] = loss\n            best_docs[tid] = doc\n\n    tid_docs = list(best_docs.items())\n    # -- sort docs by order of suggestion\n    #    so that linear_forgetting removes the oldest ones\n    tid_docs.sort()\n    losses = [best_docs_loss[k] for k, v in tid_docs]\n    tids = [k for k, v in tid_docs]\n    docs = [v for k, v in tid_docs]\n\n    if docs:\n        logger.info('TPE using %i/%i trials with best loss %f' % (\n            len(docs), len(trials), min(best_docs_loss.values())))\n    else:\n        logger.info('TPE using 0 trials')\n\n    if len(docs) < n_startup_jobs:\n        # N.B. THIS SEEDS THE RNG BASED ON THE new_id\n        return rand.suggest(new_ids, domain, trials, seed)\n\n    #    Sample and compute log-probability.\n    if tids:\n        # -- the +2 co-ordinates with an assertion above\n        #    to ensure that fake ids are used during sampling\n        fake_id_0 = max(max(tids), new_id) + 2\n    else:\n        # -- weird - we're running the TPE algo from scratch\n        assert n_startup_jobs <= 0\n        fake_id_0 = new_id + 2\n\n    fake_ids = list(range(fake_id_0, fake_id_0 + n_EI_candidates))\n\n    # -- this dictionary will map pyll nodes to the values\n    #    they should take during the evaluation of the pyll program\n    memo = {\n        domain.s_new_ids: fake_ids,\n        domain.s_rng: np.random.RandomState(seed),\n    }\n\n    o_idxs_d, o_vals_d = miscs_to_idxs_vals(\n        [d['misc'] for d in docs], keys=list(domain.params.keys()))\n    memo[observed['idxs']] = o_idxs_d\n    memo[observed['vals']] = o_vals_d\n\n    memo[observed_loss['idxs']] = tids\n    memo[observed_loss['vals']] = losses\n\n    idxs, vals = pyll.rec_eval([opt_idxs, opt_vals], memo=memo,\n                               print_node_on_error=False)\n\n    # -- retrieve the best of the samples and form the return tuple\n    # the build_posterior makes all specs the same\n\n    rval_specs = [None]  # -- specs are deprecated\n    rval_results = [domain.new_result()]\n    rval_miscs = [dict(tid=new_id, cmd=domain.cmd, workdir=domain.workdir)]\n\n    miscs_update_idxs_vals(rval_miscs, idxs, vals,\n                           idxs_map={fake_ids[0]: new_id},\n                           assert_all_vals_used=False)\n    rval_docs = trials.new_trial_docs([new_id],\n                                      rval_specs, rval_results, rval_miscs)\n\n    return rval_docs\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/utils.py",
    "content": "from __future__ import absolute_import\nfrom __future__ import division\nfrom future import standard_library\nfrom builtins import str\nfrom builtins import range\nfrom past.builtins import basestring\nfrom past.utils import old_div\nimport datetime\nimport numpy as np\nimport logging\nimport os\nimport shutil\nimport numpy\nfrom . import pyll\nfrom contextlib import contextmanager\n\nstandard_library.install_aliases()\nlogger = logging.getLogger(__name__)\n\ntry:\n    import dill as pickler\nexcept Exception as e:\n    logger.info('Failed to load dill, try installing dill via \"pip install dill\" for enhanced pickling support.')\n    import six.moves.cPickle as pickler\n\n\ndef import_tokens(tokens):\n    # XXX Document me\n    # import as many as we can\n    rval = None\n    for i in range(len(tokens)):\n        modname = '.'.join(tokens[:i + 1])\n        # XXX: try using getattr, and then merge with load_tokens\n        try:\n            logger.info('importing %s' % modname)\n            exec(\"import {}\".format(modname))\n            exec(\"rval = {}\".format(modname))\n        except ImportError as e:\n            logger.info('failed to import %s' % modname)\n            logger.info('reason: %s' % str(e))\n            break\n    return rval, tokens[i:]\n\n\ndef load_tokens(tokens):\n    # XXX: merge with import_tokens\n    logger.info('load_tokens: %s' % str(tokens))\n    symbol, remainder = import_tokens(tokens)\n    for attr in remainder:\n        symbol = getattr(symbol, attr)\n    return symbol\n\n\ndef json_lookup(json):\n    symbol = load_tokens(json.split('.'))\n    return symbol\n\n\ndef json_call(json, args=(), kwargs=None):\n    \"\"\"\n    Return a dataset class instance based on a string, tuple or dictionary\n\n    .. code-block:: python\n\n        iris = json_call('datasets.toy.Iris')\n\n    This function works by parsing the string, and calling import and getattr a\n    lot. (XXX)\n\n    \"\"\"\n    if kwargs is None:\n        kwargs = {}\n    if isinstance(json, basestring):\n        symbol = json_lookup(json)\n        return symbol(*args, **kwargs)\n    elif isinstance(json, dict):\n        raise NotImplementedError('dict calling convention undefined', json)\n    elif isinstance(json, (tuple, list)):\n        raise NotImplementedError('seq calling convention undefined', json)\n    else:\n        raise TypeError(json)\n\n\ndef get_obj(f, argfile=None, argstr=None, args=(), kwargs=None):\n    \"\"\"\n    XXX: document me\n    \"\"\"\n    if kwargs is None:\n        kwargs = {}\n    if argfile is not None:\n        argstr = open(argfile).read()\n    if argstr is not None:\n        argd = pickler.loads(argstr)\n    else:\n        argd = {}\n    args = args + argd.get('args', ())\n    kwargs.update(argd.get('kwargs', {}))\n    return json_call(f, args=args, kwargs=kwargs)\n\n\ndef pmin_sampled(mean, var, n_samples=1000, rng=None):\n    \"\"\"Probability that each Gaussian-dist R.V. is less than the others\n\n    :param vscores: mean vector\n    :param var: variance vector\n\n    This function works by sampling n_samples from every (gaussian) mean distribution,\n    and counting up the number of times each element's sample is the best.\n\n    \"\"\"\n    if rng is None:\n        rng = numpy.random.RandomState(232342)\n\n    samples = rng.randn(n_samples, len(mean)) * numpy.sqrt(var) + mean\n    winners = (samples.T == samples.min(axis=1)).T\n    wincounts = winners.sum(axis=0)\n    assert wincounts.shape == mean.shape\n    return old_div(wincounts.astype('float64'), wincounts.sum())\n\n\ndef fast_isin(X, Y):\n    \"\"\"\n    Indices of elements in a numpy array that appear in another.\n\n    Fast routine for determining indices of elements in numpy array `X` that\n    appear in numpy array `Y`, returning a boolean array `Z` such that::\n\n            Z[i] = X[i] in Y\n\n    \"\"\"\n    if len(Y) > 0:\n        T = Y.copy()\n        T.sort()\n        D = T.searchsorted(X)\n        T = np.append(T, np.array([0]))\n        W = (T[D] == X)\n        if isinstance(W, bool):\n            return np.zeros((len(X),), bool)\n        else:\n            return (T[D] == X)\n    else:\n        return np.zeros((len(X),), bool)\n\n\ndef get_most_recent_inds(obj):\n    data = numpy.rec.array([(x['_id'], int(x['version']))\n                            for x in obj],\n                           names=['_id', 'version'])\n    s = data.argsort(order=['_id', 'version'])\n    data = data[s]\n    recent = (data['_id'][1:] != data['_id'][:-1]).nonzero()[0]\n    recent = numpy.append(recent, [len(data) - 1])\n    return s[recent]\n\n\ndef use_obj_for_literal_in_memo(expr, obj, lit, memo):\n    \"\"\"\n    Set `memo[node] = obj` for all nodes in expr such that `node.obj == lit`\n\n    This is a useful routine for fmin-compatible functions that are searching\n    domains that include some leaf nodes that are complicated\n    runtime-generated objects. One option is to make such leaf nodes pyll\n    functions, but it can be easier to construct those objects the normal\n    Python way in the fmin function, and just stick them into the evaluation\n    memo.  The experiment ctrl object itself is inserted using this technique.\n    \"\"\"\n    for node in pyll.dfs(expr):\n        try:\n            if node.obj == lit:\n                memo[node] = obj\n        except AttributeError:\n            # -- non-literal nodes don't have node.obj\n            pass\n    return memo\n\n\ndef coarse_utcnow():\n    \"\"\"\n    # MongoDB stores only to the nearest millisecond\n    # This is mentioned in a footnote here:\n    # http://api.mongodb.org/python/current/api/bson/son.html#dt\n    \"\"\"\n    now = datetime.datetime.utcnow()\n    microsec = (now.microsecond // 10 ** 3) * (10 ** 3)\n    return datetime.datetime(now.year, now.month, now.day, now.hour,\n                             now.minute, now.second, microsec)\n\n\n@contextmanager\ndef working_dir(dir):\n    cwd = os.getcwd()\n    os.chdir(dir)\n    yield\n    os.chdir(cwd)\n\n\ndef path_split_all(path):\n    \"\"\"split a path at all path separaters, return list of parts\"\"\"\n    parts = []\n    while True:\n        path, fn = os.path.split(path)\n        if len(fn) == 0:\n            break\n        parts.append(fn)\n    return reversed(parts)\n\n\ndef get_closest_dir(workdir):\n    \"\"\"\n    returns the topmost already-existing directory in the given path\n    erasing work-dirs should never progress above this file.\n    Also returns the name of first non-existing dir for use as filename.\n    \"\"\"\n    closest_dir = ''\n    for wdi in path_split_all(workdir):\n        if os.path.isdir(os.path.join(closest_dir, wdi)):\n            closest_dir = os.path.join(closest_dir, wdi)\n        else:\n            break\n    assert closest_dir != workdir\n    return closest_dir, wdi\n\n\n@contextmanager\ndef temp_dir(dir, erase_after=False, with_sentinel=True):\n    created_by_me = False\n    if not os.path.exists(dir):\n        if os.pardir in dir:\n            raise RuntimeError(\"workdir contains os.pardir ('..')\")\n        if erase_after and with_sentinel:\n            closest_dir, fn = get_closest_dir(dir)\n            sentinel = os.path.join(closest_dir, fn + \".inuse\")\n            open(sentinel, 'w').close()\n        os.makedirs(dir)\n        created_by_me = True\n    else:\n        assert os.path.isdir(dir)\n    yield\n    if erase_after and created_by_me:\n        # erase all files in workdir\n        shutil.rmtree(dir)\n        if with_sentinel:\n            # put dir back as starting point for recursive remove\n            os.mkdir(dir)\n\n            # also try to erase any other empty directories up to\n            # sentinel file\n            os.removedirs(dir)\n\n            # remove sentinel file\n            os.remove(sentinel)\n"
  },
  {
    "path": "src/aup/Proposer/hyperopt/vectorize.py",
    "content": "from __future__ import print_function\nfrom __future__ import absolute_import\nfrom builtins import str\nfrom builtins import zip\nfrom builtins import range\nfrom builtins import object\nimport sys\n\nimport numpy as np\n\nfrom .pyll import Apply\nfrom .pyll import as_apply\nfrom .pyll import dfs\nfrom .pyll import toposort\nfrom .pyll import scope\nfrom .pyll import stochastic\n\nstoch = stochastic.implicit_stochastic_symbols\n\n\ndef ERR(msg):\n    print('hyperopt.vectorize.ERR', msg, file=sys.stderr)\n\n\n@scope.define_pure\ndef vchoice_split(idxs, choices, n_options):\n    rval = [[] for ii in range(n_options)]\n    if len(idxs) != len(choices):\n        raise ValueError('idxs and choices different len',\n                         (len(idxs), len(choices)))\n    for ii, cc in zip(idxs, choices):\n        rval[cc].append(ii)\n    return rval\n\n\n@scope.define_pure\ndef vchoice_merge(idxs, choices, *vals):\n    rval = []\n    assert len(idxs) == len(choices)\n    for idx, ch in zip(idxs, choices):\n        vi, vv = vals[ch]\n        rval.append(vv[list(vi).index(idx)])\n    return rval\n\n\n@scope.define_pure\ndef idxs_map(idxs, cmd, *args, **kwargs):\n    \"\"\"\n    Return the cmd applied at positions idxs, by retrieving args and kwargs\n    from the (idxs, vals) pair elements of `args` and `kwargs`.\n\n    N.B. args and kwargs may generally include information for more idx values\n    than are requested by idxs.\n    \"\"\"\n    # XXX: consider insisting on sorted idxs\n    # XXX: use np.searchsorted instead of dct\n\n    if 0:  # these should all be true, but evaluating them is slow\n        for ii, (idxs_ii, vals_ii) in enumerate(args):\n            for jj in idxs:\n                assert jj in idxs_ii\n        for kw, (idxs_kw, vals_kw) in list(kwargs.items()):\n            for jj in idxs:\n                assert jj in idxs_kw\n\n    args_imap = []\n    for idxs_j, vals_j in args:\n        if len(idxs_j):\n            args_imap.append(dict(list(zip(idxs_j, vals_j))))\n        else:\n            args_imap.append({})\n\n    kwargs_imap = {}\n    for kw, (idxs_j, vals_j) in list(kwargs.items()):\n        if len(idxs_j):\n            kwargs_imap[kw] = dict(list(zip(idxs_j, vals_j)))\n        else:\n            kwargs_imap[kw] = {}\n\n    f = scope._impls[cmd]\n    rval = []\n    for ii in idxs:\n        try:\n            args_nn = [arg_imap[ii] for arg_imap in args_imap]\n        except:\n            ERR('args_nn %s' % cmd)\n            ERR('ii %s' % ii)\n            ERR('arg_imap %s' % str(args_imap))\n            ERR('args_imap %s' % str(args_imap))\n            raise\n        try:\n            kwargs_nn = dict([(kw, arg_imap[ii])\n                              for kw, arg_imap in list(kwargs_imap.items())])\n        except:\n            ERR('args_nn %s' % cmd)\n            ERR('ii %s' % ii)\n            ERR('kw %s' % kw)\n            ERR('arg_imap %s' % str(args_imap))\n            raise\n        try:\n            rval_nn = f(*args_nn, **kwargs_nn)\n        except:\n            ERR('error calling impl of %s' % cmd)\n            raise\n        rval.append(rval_nn)\n    return rval\n\n\n@scope.define_pure\ndef idxs_take(idxs, vals, which):\n    \"\"\"\n    Return `vals[which]` where `which` is a subset of `idxs`\n    \"\"\"\n    # TODO: consider insisting on sorted idxs\n    # TODO: use np.searchsorted instead of dct\n    assert len(idxs) == len(vals)\n    table = dict(list(zip(idxs, vals)))\n    return np.asarray([table[w] for w in which])\n\n\n@scope.define_pure\ndef uniq(lst):\n    s = set()\n    rval = []\n    for l in lst:\n        if id(l) not in s:\n            s.add(id(l))\n            rval.append(l)\n    return rval\n\n\ndef vectorize_stochastic(orig):\n    if orig.name == 'idxs_map' and orig.pos_args[1]._obj in stoch:\n        # -- this is an idxs_map of a random draw of distribution `dist`\n        idxs = orig.pos_args[0]\n        dist = orig.pos_args[1]._obj\n\n        def foo(arg):\n            # -- each argument is an idxs, vals pair\n            assert arg.name == 'pos_args'\n            assert len(arg.pos_args) == 2\n            arg_vals = arg.pos_args[1]\n\n            # XXX: write a pattern-substitution rule for this case\n            if arg_vals.name == 'idxs_take':\n                if arg_vals.arg['vals'].name == 'asarray':\n                    if arg_vals.arg['vals'].inputs()[0].name == 'repeat':\n                        # -- draws are iid, so forget about\n                        #    repeating the distribution parameters\n                        repeated_thing = arg_vals.arg['vals'].inputs()[0].inputs()[1]\n                        return repeated_thing\n            if arg.pos_args[0] is idxs:\n                return arg_vals\n            else:\n                # -- arg.pos_args[0] is a superset of idxs\n                #    TODO: slice out correct elements using\n                #    idxs_take, but more importantly - test this case.\n                raise NotImplementedError()\n        new_pos_args = [foo(arg) for arg in orig.pos_args[2:]]\n        new_named_args = [[aname, foo(arg)]\n                          for aname, arg in orig.named_args]\n        vnode = Apply(dist, new_pos_args, new_named_args, o_len=None)\n        n_times = scope.len(idxs)\n        if 'size' in dict(vnode.named_args):\n            raise NotImplementedError('random node already has size')\n        vnode.named_args.append(['size', n_times])\n        return vnode\n    else:\n        return orig\n\n\ndef replace_repeat_stochastic(expr, return_memo=False):\n    nodes = dfs(expr)\n    memo = {}\n    for ii, orig in enumerate(nodes):\n        if orig.name == 'idxs_map' and orig.pos_args[1]._obj in stoch:\n            # -- this is an idxs_map of a random draw of distribution `dist`\n            idxs = orig.pos_args[0]\n            dist = orig.pos_args[1]._obj\n\n            def foo(arg):\n                # -- each argument is an idxs, vals pair\n                assert arg.name == 'pos_args'\n                assert len(arg.pos_args) == 2\n                arg_vals = arg.pos_args[1]\n                if (arg_vals.name == 'asarray' and\n                   arg_vals.inputs()[0].name == 'repeat'):\n                    # -- draws are iid, so forget about\n                    #    repeating the distribution parameters\n                    repeated_thing = arg_vals.inputs()[0].inputs()[1]\n                    return repeated_thing\n                else:\n                    if arg.pos_args[0] is idxs:\n                        return arg_vals\n                    else:\n                        # -- arg.pos_args[0] is a superset of idxs\n                        #    TODO: slice out correct elements using\n                        #    idxs_take, but more importantly - test this case.\n                        raise NotImplementedError()\n            new_pos_args = [foo(arg) for arg in orig.pos_args[2:]]\n            new_named_args = [[aname, foo(arg)]\n                              for aname, arg in orig.named_args]\n            vnode = Apply(dist, new_pos_args, new_named_args, None)\n            n_times = scope.len(idxs)\n            if 'size' in dict(vnode.named_args):\n                raise NotImplementedError('random node already has size')\n            vnode.named_args.append(['size', n_times])\n            # -- loop over all nodes that *use* this one, and change them\n            for client in nodes[ii + 1:]:\n                client.replace_input(orig, vnode)\n            if expr is orig:\n                expr = vnode\n            memo[orig] = vnode\n    if return_memo:\n        return expr, memo\n    else:\n        return expr\n\n\nclass VectorizeHelper(object):\n    \"\"\"\n    Convert a pyll expression representing a single trial into a pyll\n    expression representing multiple trials.\n\n    The resulting multi-trial expression is not meant to be evaluated\n    directly. It is meant to serve as the input to a suggest algo.\n\n    idxs_memo - node in expr graph -> all elements we might need for it\n    take_memo - node in expr graph -> all exprs retrieving computed elements\n\n    \"\"\"\n\n    def __init__(self, expr, expr_idxs, build=True):\n        self.expr = expr\n        self.expr_idxs = expr_idxs\n        self.dfs_nodes = dfs(expr)\n        self.params = {}\n        for ii, node in enumerate(self.dfs_nodes):\n            if node.name == 'hyperopt_param':\n                label = node.arg['label'].obj\n                self.params[label] = node.arg['obj']\n        # -- recursive construction\n        #    This makes one term in each idxs, vals memo for every\n        #    directed path through the switches in the graph.\n\n        self.idxs_memo = {}  # node -> union, all idxs computed\n        self.take_memo = {}  # node -> list of idxs_take retrieving node vals\n        self.v_expr = self.build_idxs_vals(expr, expr_idxs)\n\n        # TODO: graph-optimization pass to remove cruft:\n        #  - unions of 1\n        #  - unions of full sets with their subsets\n        #  - idxs_take that can be merged\n\n        self.assert_integrity_idxs_take()\n\n    def assert_integrity_idxs_take(self):\n        idxs_memo = self.idxs_memo\n        take_memo = self.take_memo\n        after = dfs(self.expr)\n        assert after == self.dfs_nodes\n        assert set(idxs_memo.keys()) == set(take_memo.keys())\n        for node in idxs_memo:\n            idxs = idxs_memo[node]\n            assert idxs.name == 'array_union'\n            vals = take_memo[node][0].pos_args[1]\n            for take in take_memo[node]:\n                assert take.name == 'idxs_take'\n                assert [idxs, vals] == take.pos_args[:2]\n\n    def build_idxs_vals(self, node, wanted_idxs):\n        \"\"\"\n        This recursive procedure should be called on an output-node.\n        \"\"\"\n        checkpoint_asserts = False\n\n        def checkpoint():\n            if checkpoint_asserts:\n                self.assert_integrity_idxs_take()\n                if node in self.idxs_memo:\n                    toposort(self.idxs_memo[node])\n                if node in self.take_memo:\n                    for take in self.take_memo[node]:\n                        toposort(take)\n\n        checkpoint()\n\n        # wanted_idxs are fixed, whereas idxs_memo\n        # is full of unions, that can grow in subsequent recursive\n        # calls to build_idxs_vals with node as argument.\n        assert wanted_idxs != self.idxs_memo.get(node)\n\n        # -- easy exit case\n        if node.name == 'hyperopt_param':\n            # -- ignore, not vectorizing\n            return self.build_idxs_vals(node.arg['obj'], wanted_idxs)\n\n        # -- easy exit case\n        elif node.name == 'hyperopt_result':\n            # -- ignore, not vectorizing\n            return self.build_idxs_vals(node.arg['obj'], wanted_idxs)\n\n        # -- literal case: always take from universal set\n        elif node.name == 'literal':\n            if node in self.idxs_memo:\n                all_idxs, all_vals = self.take_memo[node][0].pos_args[:2]\n                wanted_vals = scope.idxs_take(all_idxs, all_vals, wanted_idxs)\n                self.take_memo[node].append(wanted_vals)\n                checkpoint()\n            else:\n                # -- initialize idxs_memo to full set\n                all_idxs = self.expr_idxs\n                n_times = scope.len(all_idxs)\n                # -- put array_union into graph for consistency, though it is\n                # not necessary\n                all_idxs = scope.array_union(all_idxs)\n                self.idxs_memo[node] = all_idxs\n                all_vals = scope.asarray(scope.repeat(n_times, node))\n                wanted_vals = scope.idxs_take(all_idxs, all_vals, wanted_idxs)\n                assert node not in self.take_memo\n                self.take_memo[node] = [wanted_vals]\n                checkpoint()\n            return wanted_vals\n\n        # -- switch case: complicated\n        elif node.name == 'switch':\n            if (node in self.idxs_memo and\n               wanted_idxs in self.idxs_memo[node].pos_args):\n                # -- phew, easy case\n                all_idxs, all_vals = self.take_memo[node][0].pos_args[:2]\n                wanted_vals = scope.idxs_take(all_idxs, all_vals, wanted_idxs)\n                self.take_memo[node].append(wanted_vals)\n                checkpoint()\n            else:\n                # -- we need to add some indexes\n                if node in self.idxs_memo:\n                    all_idxs = self.idxs_memo[node]\n                    assert all_idxs.name == 'array_union'\n                    all_idxs.pos_args.append(wanted_idxs)\n                else:\n                    all_idxs = scope.array_union(wanted_idxs)\n\n                choice = node.pos_args[0]\n                all_choices = self.build_idxs_vals(choice, all_idxs)\n\n                options = node.pos_args[1:]\n                args_idxs = scope.vchoice_split(all_idxs, all_choices,\n                                                len(options))\n                all_vals = scope.vchoice_merge(all_idxs, all_choices)\n                for opt_ii, idxs_ii in zip(options, args_idxs):\n                    all_vals.pos_args.append(\n                        as_apply([\n                            idxs_ii,\n                            self.build_idxs_vals(opt_ii, idxs_ii),\n                        ]))\n\n                wanted_vals = scope.idxs_take(\n                    all_idxs,     # -- may grow in future\n                    all_vals,     # -- may be replaced in future\n                    wanted_idxs)  # -- fixed.\n                if node in self.idxs_memo:\n                    assert self.idxs_memo[node].name == 'array_union'\n                    self.idxs_memo[node].pos_args.append(wanted_idxs)\n                    for take in self.take_memo[node]:\n                        assert take.name == 'idxs_take'\n                        take.pos_args[1] = all_vals\n                    self.take_memo[node].append(wanted_vals)\n                else:\n                    self.idxs_memo[node] = all_idxs\n                    self.take_memo[node] = [wanted_vals]\n                checkpoint()\n\n        # -- general case\n        else:\n            # -- this is a general node.\n            #    It is generally handled with idxs_memo,\n            #    but vectorize_stochastic may immediately transform it into\n            #    a more compact form.\n            if (node in self.idxs_memo and\n               wanted_idxs in self.idxs_memo[node].pos_args):\n                # -- phew, easy case\n                for take in self.take_memo[node]:\n                    if take.pos_args[2] == wanted_idxs:\n                        return take\n                raise NotImplementedError('how did this happen?')\n                # all_idxs, all_vals = self.take_memo[node][0].pos_args[:2]\n                # wanted_vals = scope.idxs_take(all_idxs, all_vals, wanted_idxs)\n                # self.take_memo[node].append(wanted_vals)\n                # checkpoint()\n            else:\n                # XXX\n                # -- determine if wanted_idxs is actually a subset of the idxs\n                # that we are already computing.  This is not only an\n                # optimization, but prevents the creation of cycles, which\n                # would otherwise occur if we have a graph of the form\n                # switch(f(a), g(a), 0). If there are other switches inside f\n                # and g, does this get trickier?\n\n                # -- assume we need to add some indexes\n                checkpoint()\n                if node in self.idxs_memo:\n                    all_idxs = self.idxs_memo[node]\n\n                else:\n                    all_idxs = scope.array_union(wanted_idxs)\n                checkpoint()\n\n                all_vals = scope.idxs_map(all_idxs, node.name)\n                for ii, aa in enumerate(node.pos_args):\n                    all_vals.pos_args.append(as_apply([\n                        all_idxs, self.build_idxs_vals(aa, all_idxs)]))\n                    checkpoint()\n                for ii, (nn, aa) in enumerate(node.named_args):\n                    all_vals.named_args.append([nn, as_apply([\n                        all_idxs, self.build_idxs_vals(aa, all_idxs)])])\n                    checkpoint()\n                all_vals = vectorize_stochastic(all_vals)\n\n                checkpoint()\n                wanted_vals = scope.idxs_take(\n                    all_idxs,     # -- may grow in future\n                    all_vals,     # -- may be replaced in future\n                    wanted_idxs)  # -- fixed.\n                if node in self.idxs_memo:\n                    assert self.idxs_memo[node].name == 'array_union'\n                    self.idxs_memo[node].pos_args.append(wanted_idxs)\n                    toposort(self.idxs_memo[node])\n                    # -- this catches the cycle bug mentioned above\n                    for take in self.take_memo[node]:\n                        assert take.name == 'idxs_take'\n                        take.pos_args[1] = all_vals\n                    self.take_memo[node].append(wanted_vals)\n                else:\n                    self.idxs_memo[node] = all_idxs\n                    self.take_memo[node] = [wanted_vals]\n                checkpoint()\n\n        return wanted_vals\n\n    def idxs_by_label(self):\n        return dict([(name, self.idxs_memo[node])\n                     for name, node in list(self.params.items())])\n\n    def vals_by_label(self):\n        return dict([(name, self.take_memo[node][0].pos_args[1])\n                     for name, node in list(self.params.items())])\n"
  },
  {
    "path": "src/aup/Proposer/spearmint/ExperimentGrid.py",
    "content": "##\n# Copyright (C) 2012 Jasper Snoek, Hugo Larochelle and Ryan P. Adams\n#\n# This code is written for research and educational purposes only to\n# supplement the paper entitled\n# \"Practical Bayesian Optimization of Machine Learning Algorithms\"\n# by Snoek, Larochelle and Adams\n# Advances in Neural Information Processing Systems, 2012\n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation, either version 3 of the License, or\n# (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with this program.  If not, see <http://www.gnu.org/licenses/>.\nimport os\nimport sys\nimport tempfile\nimport pickle\n\nimport numpy        as np\nimport numpy.random as npr\n\nfrom .spearmint_pb2 import *\nfrom .Locker        import *\nfrom .sobol_lib     import *\nfrom .helpers       import *\n\n\nimport logging\nlogger = logging.getLogger(__name__)\nlog = logger.debug\n\nCANDIDATE_STATE = 0\nSUBMITTED_STATE = 1\nRUNNING_STATE   = 2\nCOMPLETE_STATE  = 3\nBROKEN_STATE    = -1\n\nEXPERIMENT_GRID_FILE = 'expt-grid.pkl'\n\n\nclass ExperimentGrid:\n\n    @staticmethod\n    def job_running(expt_dir, id):\n        expt_grid = ExperimentGrid(expt_dir)\n        expt_grid.set_running(id)\n\n    @staticmethod\n    def job_complete(expt_dir, id, value, duration):\n        log(\"setting job %d complete\" % id)\n        expt_grid = ExperimentGrid(expt_dir)\n        expt_grid.set_complete(id, value, duration)\n        log(\"set...\")\n\n    @staticmethod\n    def job_broken(expt_dir, id):\n        expt_grid = ExperimentGrid(expt_dir)\n        expt_grid.set_broken(id)\n\n    def __init__(self, expt_dir, variables=None, grid_size=None, grid_seed=1):\n        self.expt_dir = expt_dir\n        self.jobs_pkl = os.path.join(expt_dir, EXPERIMENT_GRID_FILE)\n        self.locker   = Locker()\n\n        # Only one process at a time is allowed to have access to the grid.\n        self.locker.lock_wait(self.jobs_pkl)\n\n        # Set up the grid for the first time if it doesn't exist.\n        if variables is not None and not os.path.exists(self.jobs_pkl):\n            self.seed     = grid_seed\n            self.vmap     = GridMap(variables, grid_size)\n            self.grid     = self._hypercube_grid(self.vmap.card(), grid_size)\n            self.status   = np.zeros(grid_size, dtype=int) + CANDIDATE_STATE\n            self.values   = np.zeros(grid_size) + np.nan\n            self.durs     = np.zeros(grid_size) + np.nan\n            self.proc_ids = np.zeros(grid_size, dtype=int)\n            self._save_jobs()\n\n        # Or load in the grid from the pickled file.\n        else:\n            self._load_jobs()\n\n\n    def __del__(self):\n        self._save_jobs()\n        if self.locker.unlock(self.jobs_pkl):\n            pass\n        else:\n            raise Exception(\"Could not release lock on job grid.\\n\")\n\n    def get_grid(self):\n        return self.grid, self.values, self.durs\n\n    def get_candidates(self):\n        return np.nonzero(self.status == CANDIDATE_STATE)[0]\n\n    def get_pending(self):\n        return np.nonzero((self.status == SUBMITTED_STATE) | (self.status == RUNNING_STATE))[0]\n\n    def get_complete(self):\n        return np.nonzero(self.status == COMPLETE_STATE)[0]\n\n    def get_broken(self):\n        return np.nonzero(self.status == BROKEN_STATE)[0]\n\n    def get_params(self, index):\n        return self.vmap.get_params(self.grid[index,:])\n\n    def get_best(self):\n        finite = self.values[np.isfinite(self.values)]\n        if len(finite) > 0:\n            cur_min = np.min(finite)\n            index   = np.nonzero(self.values==cur_min)[0][0]\n            return cur_min, index\n        else:\n            return np.nan, -1\n\n    def get_proc_id(self, id):\n        return self.proc_ids[id]\n\n    def add_to_grid(self, candidate):\n        # Checks to prevent numerical over/underflow from corrupting the grid\n        candidate[candidate > 1.0] = 1.0\n        candidate[candidate < 0.0] = 0.0\n\n        # Set up the grid\n        self.grid   = np.vstack((self.grid, candidate))\n        self.status = np.append(self.status, np.zeros(1, dtype=int) +\n                                int(CANDIDATE_STATE))\n\n        self.values = np.append(self.values, np.zeros(1)+np.nan)\n        self.durs   = np.append(self.durs, np.zeros(1)+np.nan)\n        self.proc_ids = np.append(self.proc_ids, np.zeros(1,dtype=int))\n\n        # Save this out.\n        self._save_jobs()\n        return self.grid.shape[0]-1\n\n    def set_candidate(self, id):\n        self.status[id] = CANDIDATE_STATE\n        self._save_jobs()\n\n    def set_submitted(self, id, proc_id):\n        self.status[id] = SUBMITTED_STATE\n        self.proc_ids[id] = proc_id\n        self._save_jobs()\n\n    def set_running(self, id):\n        self.status[id] = RUNNING_STATE\n        self._save_jobs()\n\n    def set_complete(self, id, value, duration):\n        self.status[id] = COMPLETE_STATE\n        self.values[id] = value\n        self.durs[id]   = duration\n        self._save_jobs()\n\n    def set_broken(self, id):\n        self.status[id] = BROKEN_STATE\n        self._save_jobs()\n\n    def _load_jobs(self):\n        fh   = open(self.jobs_pkl, 'rb')\n        jobs = pickle.load(fh)\n        fh.close()\n\n        self.vmap   = jobs['vmap']\n        self.grid   = jobs['grid']\n        self.status = jobs['status']\n        self.values = jobs['values']\n        self.durs   = jobs['durs']\n        self.proc_ids = jobs['proc_ids']\n\n    def _save_jobs(self):\n\n        # Write everything to a temporary file first.\n        fh = tempfile.NamedTemporaryFile(mode='wb', delete=False)\n        pickle.dump({ 'vmap'   : self.vmap,\n                       'grid'   : self.grid,\n                       'status' : self.status,\n                       'values' : self.values,\n                       'durs'   : self.durs,\n                       'proc_ids' : self.proc_ids }, fh, protocol=-1)\n        fh.close()\n\n        # Use an atomic move for better NFS happiness.\n        cmd = 'mv \"%s\" \"%s\"' % (fh.name, self.jobs_pkl)\n        os.system(cmd) # TODO: Should check system-dependent return status.\n\n    def _hypercube_grid(self, dims, size):\n        # Generate from a sobol sequence\n        sobol_grid = np.transpose(i4_sobol_generate(dims,size,self.seed))\n\n        return sobol_grid\n\nclass GridMap:\n\n    def __init__(self, variables, grid_size):\n        self.variables   = []\n        self.cardinality = 0\n\n        # Count the total number of dimensions and roll into new format.\n        for variable in variables:\n            self.cardinality += variable.size\n\n            if variable.type == \"int\":\n                self.variables.append({ 'name' : variable.name,\n                                        'size' : variable.size,\n                                        'type' : 'int',\n                                        'min'  : int(variable.range[0]),\n                                        'max'  : int(variable.range[1])})\n\n            elif variable.type == \"float\":\n                self.variables.append({ 'name' : variable.name,\n                                        'size' : variable.size,\n                                        'type' : 'float',\n                                        'min'  : float(variable.range[0]),\n                                        'max'  : float(variable.range[1])})\n\n            elif variable.type == \"enum\":\n                self.variables.append({ 'name'    : variable.name,\n                                        'size'    : variable.size,\n                                        'type'    : 'enum',\n                                        'options' : variable.range})\n            else:\n                raise Exception(\"Unknown parameter type.\")\n        log(\"Optimizing over %d dimensions\\n\" % (self.cardinality))\n\n    def get_params(self, u):\n        if u.shape[0] != self.cardinality:\n            raise Exception(\"Hypercube dimensionality is incorrect.\")\n\n        params = {}\n        index  = 0\n        for variable in self.variables:\n\n            param = []\n            if variable['type'] == 'int':\n                for dd in range(variable['size']):\n                    param.append(variable['min'] + self._index_map(u[index], variable['max']-variable['min']+1))\n                    index += 1\n\n            elif variable['type'] == 'float':\n                for dd in range(variable['size']):\n                    param.append(variable['min'] + u[index]*(variable['max']-variable['min']))\n                    index += 1\n\n            elif variable['type'] == 'enum':\n                for dd in range(variable['size']):\n                    ii = self._index_map(u[index], len(variable['options']))\n                    index += 1\n                    param.append(variable['options'][ii])\n            else:\n                raise Exception(\"Unknown parameter type.\")\n\n            params[variable['name']]=param\n\n        return params\n\n    def card(self):\n        return self.cardinality\n\n    def _index_map(self, u, items):\n        u = np.max((u, 0.0))\n        u = np.min((u, 1.0))\n        return int(np.floor((1-np.finfo(float).eps) * u * float(items)))\n"
  },
  {
    "path": "src/aup/Proposer/spearmint/Locker.py",
    "content": "##\n# Copyright (C) 2012 Jasper Snoek, Hugo Larochelle and Ryan P. Adams\n#\n# This code is written for research and educational purposes only to\n# supplement the paper entitled\n# \"Practical Bayesian Optimization of Machine Learning Algorithms\"\n# by Snoek, Larochelle and Adams\n# Advances in Neural Information Processing Systems, 2012\n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation, either version 3 of the License, or\n# (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with this program.  If not, see <http://www.gnu.org/licenses/>.\nimport os\nimport sys\nimport time\n\ndef safe_delete(filename):\n    cmd  = 'mv \"%s\" \"%s.delete\" && rm \"%s.delete\"' % (filename, filename,\n                                                      filename)\n    fail = os.system(cmd)\n    return not fail\n\nclass Locker:\n\n    def __init__(self):\n        self.locks = {}\n\n    def __del__(self):\n\n        for filename in list(self.locks.keys()):\n            self.locks[filename] = 1\n            self.unlock(filename)\n\n    def lock(self, filename):\n        if filename in self.locks:\n            self.locks[filename] += 1\n            return True\n        else:\n            cmd = 'ln -s /dev/null \"%s.lock\" 2> /dev/null' % (filename)\n            fail = os.system(cmd)\n            if not fail:\n                self.locks[filename] = 1\n            return not fail\n\n    def unlock(self, filename):\n        if not filename in self.locks:\n            #sys.stderr.write(\"Trying to unlock not-locked file %s.\\n\" % (filename))\n            return True\n        if self.locks[filename] == 1:\n            success = safe_delete('%s.lock' % (filename))\n            if not success:\n                sys.stderr.write(\"Could not unlock file: %s.\\n\" % (filename))\n            del self.locks[filename]\n            return success\n        else:\n            self.locks[filename] -= 1\n            return True\n\n    def lock_wait(self, filename):\n        while not self.lock(filename):\n          time.sleep(0.01)\n\n"
  },
  {
    "path": "src/aup/Proposer/spearmint/__init__.py",
    "content": "##\n# Copyright (C) 2012 Jasper Snoek, Hugo Larochelle and Ryan P. Adams\n# \n# This code is written for research and educational purposes only to \n# supplement the paper entitled\n# \"Practical Bayesian Optimization of Machine Learning Algorithms\"\n# by Snoek, Larochelle and Adams\n# Advances in Neural Information Processing Systems, 2012\n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation, either version 3 of the License, or\n# (at your option) any later version.\n# \n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n# \n# You should have received a copy of the GNU General Public License\n# along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\n\nfrom .ExperimentGrid import ExperimentGrid"
  },
  {
    "path": "src/aup/Proposer/spearmint/chooser/CMAChooser.py",
    "content": "from cma import CMAEvolutionStrategy\nfrom spearmint import util\nimport Locker\n\ndef init(expt_dir, arg_string):\n    args = util.unpack_args(arg_string)\n    return CMAChooser(expt_dir, **args)\n\n\"\"\"\nChooser module for the CMA-ES evolutionary optimizer.\n\"\"\"\nclass CMAChooser:\n\n    def __init__(self, expt_dir):\n\n        raise NotImplementedError('The CMA chooser is not yet implemented!')\n        \n        self.state_pkl = os.path.join(expt_dir, self.__module__ + \".pkl\")\n\n        #TODO: params needs to be an array of starting values\n        # - need to figure out how to map Spearmint params into\n        # all floats usable by the evolution strategy.\n        self.optimizer = CMAEvolutionStrategy(params)\n\n    def _real_init(self, dims, values):\n\n        raise NotImplementedError('The CMA chooser is not yet implemented!')\n        self.locker.lock_wait(self.state_pkl)\n\n        if os.path.exists(self.state_pkl):\n            fh    = open(self.state_pkl, 'rb')\n            state = pickle.load(fh)\n            fh.close()\n\n            #TODO: setup config and state values from state, or setup fresh\n            #defaults\n\n    def __del__(self):\n\n        raise NotImplementedError('The CMA chooser is not yet implemented!')\n        self.locker.lock_wait(self.state_pkl)\n\n        # Write the hyperparameters out to a Pickle.\n        fh = tempfile.NamedTemporaryFile(mode='wb', delete=False)\n\n        # do this to save the optimizer state\n#    >>> pickle.dump(es, open('saved-cma-object.pkl', 'wb'))\n\n        # and this to load it back...\n#    >>> es = pickle.load(open('saved-cma-object.pkl', 'rb'))\n\n        pickle.dump({ 'dims'   : self.D,\n                       'ls'     : self.ls,\n                       'amp2'   : self.amp2,\n                       'noise'  : self.noise,\n                       'mean'   : self.mean },\n                     fh)\n        fh.close()\n\n        # Use an atomic move for better NFS happiness.\n        cmd = 'mv \"%s\" \"%s\"' % (fh.name, self.state_pkl)\n        os.system(cmd) # TODO: Should check system-dependent return status.\n\n        self.locker.unlock(self.state_pkl)\n\n    def next(self, grid, values, durations, candidates, pending, complete):\n\n        raise NotImplementedError('The CMA chooser is not yet implemented!')\n\n        # Perform the real initialization.\n        if self.D == -1:\n            self._real_init(grid.shape[1], values[complete])\n\n        # Grab out the relevant sets.\n        comp = grid[complete,:]\n        cand = grid[candidates,:]\n        pend = grid[pending,:]\n        vals = values[complete]\n\n        # TODO: tell the optimizer about any new f-values, get the next proposed\n        # sample, or maybe generate a population of samples and iterate through\n        # them?\n\n#    ...         X = es.ask()    # get list of new solutions\n#    ...         fit = [cma.fcts.rastrigin(x) for x in X]  # evaluate each solution\n#    ...         es.tell(X, fit) # besides for termination only the ranking in fit is used\n"
  },
  {
    "path": "src/aup/Proposer/spearmint/chooser/GPConstrainedEIChooser.py",
    "content": "##\n# Copyright (C) 2012 Jasper Snoek, Hugo Larochelle and Ryan P. Adams\n#\n# This code is written for research and educational purposes only to\n# supplement the paper entitled\n# \"Practical Bayesian Optimization of Machine Learning Algorithms\"\n# by Snoek, Larochelle and Adams\n# Advances in Neural Information Processing Systems, 2012\n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation, either version 3 of the License, or\n# (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with this program.  If not, see <http://www.gnu.org/licenses/>.\nimport os\nfrom .. import gp\nimport sys\nfrom .. import util\nimport tempfile\nimport numpy          as np\nimport math\nimport numpy.random   as npr\nimport scipy.linalg   as spla\nimport scipy.stats    as sps\nimport scipy.optimize as spo\nimport pickle\nimport matplotlib.pyplot as plt\nimport multiprocessing\nimport copy\n\nfrom ..helpers import *\nfrom ..Locker  import *\n\nimport logging\nlogger = logging.getLogger(__name__)\nlog = logger.debug\n\n# Wrapper function to pass to parallel ei optimization calls\ndef optimize_pt(c, b, comp, pend, vals, labels, model):\n    ret = spo.fmin_l_bfgs_b(model.grad_optimize_ei_over_hypers,\n                            c.flatten(), args=(comp, pend, vals, labels),\n                            bounds=b, disp=0)\n    return ret[0]\n\ndef init(expt_dir, arg_string):\n    args = util.unpack_args(arg_string)\n    return GPConstrainedEIChooser(expt_dir, **args)\n\n\"\"\"\nChooser module for Constrained Gaussian process expected improvement.\nCandidates are sampled densely in the unit hypercube and then a subset\nof the most promising points are optimized to maximize constrained EI\nover hyperparameter samples.  Slice sampling is used to sample\nGaussian process hyperparameters for two GPs, one over the objective\nfunction and the other a probit likelihood classification GP that estimates the\nprobability that a point is outside of the constraint space.\n\"\"\"\nclass GPConstrainedEIChooser:\n\n    def __init__(self, expt_dir, covar=\"Matern52\", mcmc_iters=20,\n                 pending_samples=100, noiseless=False, burnin=100,\n                 grid_subset=20, constraint_violating_value=np.inf,\n                 verbosity=0, visualize2D=False):\n        self.cov_func        = getattr(gp, covar)\n        self.locker          = Locker()\n        self.state_pkl       = os.path.join(expt_dir, self.__module__ + \".pkl\")\n\n        self.stats_file      = os.path.join(expt_dir,\n                                   self.__module__ + \"_hyperparameters.txt\")\n        self.mcmc_iters      = int(mcmc_iters)\n        self.burnin          = int(burnin)\n        self.needs_burnin    = True\n        self.pending_samples = pending_samples\n        self.D               = -1\n        self.hyper_iters     = 1\n        # Number of points to optimize EI over\n        self.grid_subset     = int(grid_subset)\n        self.noiseless       = bool(int(noiseless))\n        self.hyper_samples   = []\n        self.constraint_hyper_samples = []\n        self.ff              = None\n        self.ff_samples      = []\n        self.verbosity       = int(verbosity)\n\n        self.noise_scale = 0.1  # horseshoe prior\n        self.amp2_scale  = 1    # zero-mean log normal prior\n        self.max_ls      = 2    # top-hat prior on length scales\n\n        self.constraint_noise_scale = 0.1  # horseshoe prior\n        self.constraint_amp2_scale  = 1    # zero-mean log normal prio\n        self.constraint_gain        = 1   # top-hat prior on length scales\n        self.constraint_max_ls      = 2   # top-hat prior on length scales\n        self.bad_value = float(constraint_violating_value)\n        self.visualize2D            = visualize2D\n\n        self.ls = None\n        self.amp2 = None\n        self.noise = None\n        self.mean = None\n        self.constraint_ls = None\n        self.constraint_amp2 = None\n        self.constraint_mean = None\n        self.constraint_noise = None\n\n    # A simple function to dump out hyperparameters to allow for a hot start\n    # if the optimization is restarted.\n    def dump_hypers(self):\n        self.locker.lock_wait(self.state_pkl)\n\n        # Write the hyperparameters out to a Pickle.\n        fh = tempfile.NamedTemporaryFile(mode='wb', delete=False)\n        pickle.dump({ 'dims'        : self.D,\n                       'ls'          : self.ls,\n                       'amp2'        : self.amp2,\n                       'noise'       : self.noise,\n                       'mean'        : self.mean,\n                       'constraint_ls'     : self.constraint_ls,\n                       'constraint_amp2'   : self.constraint_amp2,\n                       'constraint_noise'  : self.constraint_noise,\n                       'constraint_mean'   : self.constraint_mean },\n                     fh)\n        fh.close()\n\n        # Use an atomic move for better NFS happiness.\n        cmd = 'mv \"%s\" \"%s\"' % (fh.name, self.state_pkl)\n        os.system(cmd) # TODO: Should check system-dependent return status.\n\n        self.locker.unlock(self.state_pkl)\n\n        # Write the hyperparameters out to a human readable file as well\n        fh    = open(self.stats_file, 'w')\n        fh.write('Mean Noise Amplitude <length scales>\\n')\n        fh.write('-----------ALL SAMPLES-------------\\n')\n        meanhyps = 0*np.hstack(self.hyper_samples[0])\n        for i in self.hyper_samples:\n            hyps = np.hstack(i)\n            meanhyps += (1/float(len(self.hyper_samples)))*hyps\n            for j in hyps:\n                fh.write(str(j) + ' ')\n            fh.write('\\n')\n\n        fh.write('-----------MEAN OF SAMPLES-------------\\n')\n        for j in meanhyps:\n            fh.write(str(j) + ' ')\n        fh.write('\\n')\n        fh.close()\n\n    def _real_init(self, dims, values, durations):\n\n        self.locker.lock_wait(self.state_pkl)\n\n        self.randomstate = npr.get_state()\n        if os.path.exists(self.state_pkl):\n            fh    = open(self.state_pkl, 'rb')\n            state = pickle.load(fh)\n            fh.close()\n\n            self.D                = state['dims']\n            self.ls               = state['ls']\n            self.amp2             = state['amp2']\n            self.noise            = state['noise']\n            self.mean             = state['mean']\n            self.constraint_ls    = state['constraint_ls']\n            self.constraint_amp2  = state['constraint_amp2']\n            self.constraint_noise = state['constraint_noise']\n            self.constraint_mean  = state['constraint_mean']\n            self.constraint_gain  = state['constraint_gain']\n            self.needs_burnin     = False\n        else:\n\n            # Identify constraint violations\n            # Note that we'll treat NaNs and Infs as these values as well\n            # as an optional user defined value\n            goodvals = np.nonzero(np.logical_and(values != self.bad_value,\n                                                 np.isfinite(values)))[0]\n\n            # Input dimensionality.\n            self.D = dims\n\n            # Initial length scales.\n            self.ls = np.ones(self.D)\n            self.constraint_ls = np.ones(self.D)\n\n            # Initial amplitude.\n            self.amp2 = np.std(values[goodvals])+1e-4\n            self.constraint_amp2 = 1.0\n\n            # Initial observation noise.\n            self.noise = 1e-3\n            self.constraint_noise = 1e-3\n            self.constraint_gain = 1\n\n            # Initial mean.\n            self.mean = np.mean(values[goodvals])\n            self.constraint_mean = 0.5\n\n        self.locker.unlock(self.state_pkl)\n\n    def cov(self, amp2, ls, x1, x2=None):\n        if x2 is None:\n            return amp2 * (self.cov_func(ls, x1, None)\n                           + 1e-6*np.eye(x1.shape[0]))\n        else:\n            return amp2 * self.cov_func(ls, x1, x2)\n\n    # Given a set of completed 'experiments' in the unit hypercube with\n    # corresponding objective 'values', pick from the next experiment to\n    # run according to the acquisition function.\n    def next(self, grid, values, durations,\n             candidates, pending, complete):\n\n        # Don't bother using fancy GP stuff at first.\n        if complete.shape[0] < 2:\n            return int(candidates[0])\n\n        # Grab out the relevant sets.\n        comp = grid[complete,:]\n        cand = grid[candidates,:]\n        pend = grid[pending,:]\n        vals = values[complete]\n\n        # Identify constraint violations\n        # Note that we'll treat NaNs and Infs as these values as well\n        # as an optional user defined value\n        idx = np.logical_and(vals != self.bad_value,\n                             np.isfinite(vals))\n        goodvals = np.nonzero(idx)[0]\n        badvals = np.nonzero(np.logical_not(idx))[0]\n\n        log('Found %d constraint violating jobs' % (badvals.shape[0]))\n\n        # There's no point regressing on one observation\n        log('Received %d valid results' % (goodvals.shape[0]))\n        if goodvals.shape[0] < 2:\n            return int(candidates[0])\n\n        labels = np.zeros(vals.shape[0])\n        labels[goodvals] = 1\n\n        if np.sum(labels) < 2:\n            return int(candidates[0])\n\n        # Perform the real initialization.\n        if self.D == -1:\n            self._real_init(grid.shape[1], values[complete],\n                            durations[complete])\n\n        # Spray a set of candidates around the min so far\n        numcand = cand.shape[0]\n        best_comp = np.argmin(vals)\n        cand2 = np.vstack((np.random.randn(10,comp.shape[1])*0.001 +\n                           comp[best_comp,:], cand))\n\n        if self.mcmc_iters > 0:\n\n            # Possibly burn in.\n            if self.needs_burnin:\n                for mcmc_iter in range(self.burnin):\n                    self.sample_constraint_hypers(comp, labels)\n                    self.sample_hypers(comp[goodvals,:], vals[goodvals])\n                    log(\"BURN %d/%d] mean: %.2f  amp: %.2f \"\n                                     \"noise: %.4f  min_ls: %.4f  max_ls: %.4f\"\n                                     % (mcmc_iter+1, self.burnin, self.mean,\n                                        np.sqrt(self.amp2), self.noise,\n                                        np.min(self.ls), np.max(self.ls)))\n                self.needs_burnin = False\n\n            # Sample from hyperparameters.\n            # Adjust the candidates to hit ei/sec peaks\n            self.hyper_samples = []\n            for mcmc_iter in range(self.mcmc_iters):\n                self.sample_constraint_hypers(comp, labels)\n                self.sample_hypers(comp[goodvals,:], vals[goodvals])\n                if self.verbosity > 0:\n                    log(\"%d/%d] mean: %.2f  amp: %.2f noise: %.4f \"\n                                     \"min_ls: %.4f  max_ls: %.4f\"\n                                     % (mcmc_iter+1, self.mcmc_iters, self.mean,\n                                        np.sqrt(self.amp2), self.noise,\n                                        np.min(self.ls), np.max(self.ls)))\n\n                    log(\"%d/%d] constraint_mean: %.2f \"\n                                     \"constraint_amp: %.2f \"\n                                     \"constraint_gain: %.4f \"\n                                     \"constraint_min_ls: %.4f \"\n                                     \"constraint_max_ls: \"\n                                     \"%.4f\"\n                                     % (mcmc_iter+1, self.mcmc_iters,\n                                        self.constraint_mean,\n                                        np.sqrt(self.constraint_amp2),\n                                        self.constraint_gain,\n                                        np.min(self.constraint_ls),\n                                        np.max(self.constraint_ls)))\n            self.dump_hypers()\n            comp_preds = np.zeros(labels.shape[0]).flatten()\n\n            preds = self.pred_constraint_voilation(cand, comp, labels).flatten()\n            for ii in range(self.mcmc_iters):\n                constraint_hyper = self.constraint_hyper_samples[ii]\n                self.ff = self.ff_samples[ii]\n                self.constraint_mean = constraint_hyper[0]\n                self.constraint_gain = constraint_hyper[1]\n                self.constraint_amp2 = constraint_hyper[2]\n                self.constraint_ls = constraint_hyper[3]\n                comp_preds += self.pred_constraint_voilation(comp, comp,\n                                                             labels).flatten()\n            comp_preds = comp_preds / float(self.mcmc_iters)\n            log('Predicting %.2f%% constraint violations (%d/%d): ' % (np.mean(preds < 0.5)*100, np.sum(preds < 0.5), preds.shape[0]))\n            if self.verbosity > 0:\n                log('Prediction` %f%% train accuracy (%d/%d): ' % (\n                    np.mean((comp_preds > 0.5) == labels),\n                    np.sum((comp_preds > 0.5) == labels), comp_preds.shape[0]))\n\n            if self.visualize2D:\n                delta = 0.025\n                x = np.arange(0, 1.0, delta)\n                y = np.arange(0, 1.0, delta)\n                X, Y = np.meshgrid(x, y)\n\n                cpreds = np.zeros((X.shape[0], X.shape[1]))\n                predei = np.zeros((X.shape[0], X.shape[1]))\n                predei2 = np.zeros((X.shape[0], X.shape[1]))\n                for ii in range(self.mcmc_iters):\n                    constraint_hyper = self.constraint_hyper_samples[ii]\n                    self.ff = self.ff_samples[ii]\n                    self.constraint_mean = constraint_hyper[0]\n                    self.constraint_gain = constraint_hyper[1]\n                    self.constraint_amp2 = constraint_hyper[2]\n                    self.constraint_ls = constraint_hyper[3]\n\n                    cpred = self.pred_constraint_voilation(\n                        np.hstack((X.flatten()[:,np.newaxis],\n                                   Y.flatten()[:,np.newaxis])), comp, labels)\n                    pei = self.compute_constrained_ei(\n                        comp, pend, np.hstack(\n                            (X.flatten()[:,np.newaxis],\n                             Y.flatten()[:,np.newaxis])), vals, labels)\n                    pei2 = self.compute_ei(\n                        comp, pend, np.hstack(\n                            (X.flatten()[:,np.newaxis],\n                             Y.flatten()[:,np.newaxis])), vals, labels)\n\n                    cpreds += np.reshape(cpred, (X.shape[0], X.shape[1]))\n                    predei += np.reshape(pei, (X.shape[0], X.shape[1]))\n                    predei2 += np.reshape(pei2, (X.shape[0], X.shape[1]))\n\n                plt.figure(1)\n                plt.clf()\n                cpreds = cpreds/float(self.mcmc_iters)\n                CS = plt.contour(X,Y,cpreds)\n                plt.clabel(CS, inline=1, fontsize=10)\n                plt.plot(comp[labels == 0,0], comp[labels == 0,1], 'rx')\n                plt.plot(comp[labels == 1,0], comp[labels == 1,1], 'bx')\n                plt.title(\n                    'Contours of Classification GP (Prob of not being a '\n                    'constraint violation)')\n                plt.legend(('Constraint Violations', 'Good points'),\n                           'lower left')\n                plt.savefig('constrained_ei_chooser_class_contour.pdf')\n\n                plt.figure(2)\n                plt.clf()\n                predei = predei/float(self.mcmc_iters)\n                CS = plt.contour(X,Y,predei)\n                plt.clabel(CS, inline=1, fontsize=10)\n                plt.plot(comp[labels == 0,0], comp[labels == 0,1], 'rx')\n                plt.plot(comp[labels == 1,0], comp[labels == 1,1], 'bx')\n                plt.title('Contours of EI*P(not violating constraint)')\n                plt.legend(('Constraint Violations', 'Good points'),\n                           'lower left')\n                plt.savefig('constrained_ei_chooser_eitimesprob_contour.pdf')\n\n                plt.figure(3)\n                plt.clf()\n                predei2 = predei2/float(self.mcmc_iters)\n                CS = plt.contour(X,Y,predei2)\n                plt.clabel(CS, inline=1, fontsize=10)\n                plt.plot(comp[labels == 0,0], comp[labels == 0,1], 'rx')\n                plt.plot(comp[labels == 1,0], comp[labels == 1,1], 'bx')\n                plt.title('Contours of EI')\n                plt.legend(('Constraint Violations', 'Good points'),\n                           'lower left')\n                plt.savefig('constrained_ei_chooser_ei_contour.pdf')\n                #plt.show()\n\n            # Pick the top candidates to optimize over\n            overall_ei = self.ei_over_hypers(comp,pend,cand2,vals,labels)\n            inds = np.argsort(np.mean(overall_ei, axis=1))[-self.grid_subset:]\n            cand2 = cand2[inds,:]\n\n            # Adjust the candidates to hit ei peaks\n            b = []# optimization bounds\n            for i in range(0, cand.shape[1]):\n                b.append((0, 1))\n\n            # Optimize each point in parallel\n            pool = multiprocessing.Pool(self.grid_subset)\n            results = [pool.apply_async(optimize_pt,args=(\n                        c,b,comp,pend,vals,labels, copy.copy(self))) for c in cand2]\n            for res in results:\n                cand = np.vstack((cand, res.get(1024)))\n            pool.close()\n\n            #for i in range(0, cand2.shape[0]):\n            #    log(\"Optimizing candidate %d/%d\\n\" %\n            #                     (i+1, cand2.shape[0]))\n            #    self.check_grad_ei(cand2[i,:], comp, pend, vals, labels)\n            #    ret = spo.fmin_l_bfgs_b(self.grad_optimize_ei_over_hypers,\n            #                            cand2[i,:].flatten(),\n            #                            args=(comp,pend,vals,labels,True),\n            #                            bounds=b, disp=0)\n            #    cand2[i,:] = ret[0]\n\n            cand = np.vstack((cand, cand2))\n\n            overall_ei = self.ei_over_hypers(comp,pend,cand,vals,labels)\n            best_cand = np.argmax(np.mean(overall_ei, axis=1))\n\n            self.dump_hypers()\n            if (best_cand >= numcand):\n                return (int(numcand), cand[best_cand,:])\n\n            return int(candidates[best_cand])\n\n        else:\n            log('This Chooser module permits only slice sampling with > 0 '\n                   'samples.')\n            raise Exception('mcmc_iters <= 0')\n\n    # Predict constraint voilating points\n    def pred_constraint_voilation(self, cand, comp, vals):\n        # The primary covariances for prediction.\n        comp_cov   = self.cov(self.constraint_amp2, self.constraint_ls, comp)\n        cand_cross = self.cov(self.constraint_amp2, self.constraint_ls, comp,\n                              cand)\n\n        # Compute the required Cholesky.\n        obsv_cov  = comp_cov + self.constraint_noise*np.eye(comp.shape[0])\n        obsv_chol = spla.cholesky(obsv_cov, lower=True)\n\n        cov_grad_func = getattr(gp, 'grad_' + self.cov_func.__name__)\n        cand_cross_grad = cov_grad_func(self.constraint_ls, comp, cand)\n\n        # Predictive things.\n        # Solve the linear systems.\n        alpha  = spla.cho_solve((obsv_chol, True), self.ff)\n        beta   = spla.solve_triangular(obsv_chol, cand_cross, lower=True)\n\n        # Predict the marginal means and variances at candidates.\n        func_m = np.dot(cand_cross.T, alpha)# + self.constraint_mean\n        func_m = sps.norm.cdf(func_m*self.constraint_gain)\n\n        return func_m\n\n    # Compute EI over hyperparameter samples\n    def ei_over_hypers(self,comp,pend,cand,vals,labels):\n        overall_ei = np.zeros((cand.shape[0], self.mcmc_iters))\n        for mcmc_iter in range(self.mcmc_iters):\n            hyper = self.hyper_samples[mcmc_iter]\n            constraint_hyper = self.constraint_hyper_samples[mcmc_iter]\n            self.mean = hyper[0]\n            self.noise = hyper[1]\n            self.amp2 = hyper[2]\n            self.ls = hyper[3]\n\n            self.constraint_mean = constraint_hyper[0]\n            self.constraint_gain = constraint_hyper[1]\n            self.constraint_amp2 = constraint_hyper[2]\n            self.constraint_ls = constraint_hyper[3]\n            overall_ei[:,mcmc_iter] = self.compute_constrained_ei(comp, pend,\n                                                                  cand, vals,\n                                                                  labels)\n\n        return overall_ei\n\n    # Adjust points by optimizing EI over a set of hyperparameter samples\n    def grad_optimize_ei_over_hypers(self, cand, comp, pend, vals, labels,\n                                     compute_grad=True):\n        summed_ei = 0\n        summed_grad_ei = np.zeros(cand.shape).flatten()\n\n        for mcmc_iter in range(self.mcmc_iters):\n            hyper = self.hyper_samples[mcmc_iter]\n            constraint_hyper = self.constraint_hyper_samples[mcmc_iter]\n            self.mean = hyper[0]\n            self.noise = hyper[1]\n            self.amp2 = hyper[2]\n            self.ls = hyper[3]\n\n            self.constraint_mean = constraint_hyper[0]\n            self.constraint_gain = constraint_hyper[1]\n            self.constraint_amp2 = constraint_hyper[2]\n            self.constraint_ls = constraint_hyper[3]\n            if compute_grad:\n                (ei,g_ei) = self.grad_optimize_ei(cand, comp, pend, vals, labels,\n                                                  compute_grad)\n                summed_grad_ei = summed_grad_ei + g_ei\n            else:\n                ei = self.grad_optimize_ei(cand, comp, pend, vals,\n                                           labels, compute_grad)\n\n            summed_ei += ei\n\n        if compute_grad:\n            return (summed_ei, summed_grad_ei)\n        else:\n            return summed_ei\n\n    def check_grad_ei(self, cand, comp, pend, vals, labels):\n        (ei,dx1) = self.grad_optimize_ei_over_hypers(cand, comp, pend, vals, labels)\n        dx2 = dx1*0\n        idx = np.zeros(cand.shape[0])\n        for i in range(0, cand.shape[0]):\n            idx[i] = 1e-6\n            (ei1,tmp) = self.grad_optimize_ei_over_hypers(\n                cand + idx, comp, pend, vals, labels)\n            (ei2,tmp) = self.grad_optimize_ei_over_hypers(\n                cand - idx, comp, pend, vals, labels)\n            dx2[i] = (ei - ei2)/(2*1e-6)\n            idx[i] = 0\n        log('computed grads %s' % dx1)\n        log('finite diffs %s'%dx2)\n        log (dx1/dx2)\n        log(np.sum((dx1 - dx2)**2))\n        time.sleep(2)\n\n    def grad_optimize_ei(self, cand, comp, pend, vals, labels, compute_grad=True):\n        if pend.shape[0] == 0:\n            return self.grad_optimize_ei_nopend(cand, comp, vals, labels,\n                                                compute_grad=True)\n        else:\n            return self.grad_optimize_ei_pend(cand, comp, pend, vals, labels,\n                                              compute_grad=True)\n\n    def grad_optimize_ei_pend(self, cand, comp, pend, vals, labels, compute_grad=True):\n        # Here we have to compute the gradients for constrained ei\n        # This means deriving through the two kernels, the one for predicting\n        # constraint violations and the one predicting ei\n\n        # First pull out violating points\n        compfull = comp.copy()\n        comp = comp[labels > 0, :]\n        vals = vals[labels > 0]\n\n        # Use standard EI if there aren't enough observations of either\n        # positive or negative constraint violations\n        use_vanilla_ei = (np.all(labels > 0) or np.all(labels <= 0))\n\n        best = np.min(vals)\n        cand = np.reshape(cand, (-1, comp.shape[1]))\n        func_constraint_m = 1\n\n        if (not use_vanilla_ei):\n\n            # First we make predictions for the durations\n            # Compute covariances\n            comp_constraint_cov   = self.cov(self.constraint_amp2,\n                                             self.constraint_ls,\n                                             compfull)\n            cand_constraint_cross = self.cov(self.constraint_amp2,\n                                             self.constraint_ls,\n                                             compfull,cand)\n\n            # Cholesky decompositions\n            obsv_constraint_cov  = (comp_constraint_cov +\n                 self.constraint_noise*np.eye(compfull.shape[0]))\n            obsv_constraint_chol = spla.cholesky(obsv_constraint_cov,lower=True)\n\n            # Linear systems\n            t_alpha  = spla.cho_solve((obsv_constraint_chol, True), self.ff)\n\n            # Predict marginal mean times and (possibly) variances\n            ff = np.dot(cand_constraint_cross.T, t_alpha)\n\n            # Squash through Gaussian cdf\n            func_constraint_m = sps.norm.cdf(self.constraint_gain*ff)\n\n            # Apply covariance function\n            cov_grad_func = getattr(gp, 'grad_' + self.cov_func.__name__)\n            cand_cross_grad = cov_grad_func(self.constraint_ls, compfull, cand)\n            grad_cross_t = np.squeeze(cand_cross_grad)\n\n        # Now compute the gradients w.r.t. ei\n        # The primary covariances for prediction.\n        comp_cov   = self.cov(self.amp2, self.ls, comp)\n        cand_cross = self.cov(self.amp2, self.ls, comp, cand)\n        comp_cov_full   = self.cov(self.amp2, self.ls, compfull)\n        cand_cross_full = self.cov(self.amp2, self.ls, compfull, cand)\n\n        # Create a composite vector of complete and pending.\n        comp_pend = np.concatenate((comp, pend))\n\n        # Compute the covariance and Cholesky decomposition.\n        comp_pend_cov  = (self.cov(self.amp2, self.ls, comp_pend) +\n                          self.noise*np.eye(comp_pend.shape[0]))\n        comp_pend_chol = spla.cholesky(comp_pend_cov, lower=True)\n\n        # Compute submatrices.\n        pend_cross = self.cov(self.amp2, self.ls, comp, pend)\n        pend_kappa = self.cov(self.amp2,self.ls, pend)\n\n        # Use the sub-Cholesky.\n        obsv_chol = comp_pend_chol[:comp.shape[0],:comp.shape[0]]\n\n        # Compute the required Cholesky.\n        #obsv_cov  = comp_cov + self.noise*np.eye(comp.shape[0])\n        #obsv_chol = spla.cholesky(obsv_cov, lower=True)\n        obsv_cov_full  = comp_cov_full + self.noise*np.eye(compfull.shape[0])\n        obsv_chol_full = spla.cholesky( obsv_cov_full, lower=True)\n\n        # Predictive things.\n        # Solve the linear systems.\n        alpha  = spla.cho_solve((obsv_chol, True), vals - self.mean)\n        beta   = spla.cho_solve((obsv_chol, True), pend_cross)\n\n        # Finding predictive means and variances.\n        pend_m = np.dot(pend_cross.T, alpha) + self.mean\n        pend_K = pend_kappa - np.dot(pend_cross.T, beta)\n\n        # Take the Cholesky of the predictive covariance.\n        pend_chol = spla.cholesky(pend_K, lower=True)\n\n        # Make predictions.\n        npr.set_state(self.randomstate)\n        pend_fant = np.dot(pend_chol, npr.randn(pend.shape[0],self.pending_samples)) + pend_m[:,None]\n\n        # Include the fantasies.\n        fant_vals = np.concatenate(\n            (np.tile(vals[:,np.newaxis],\n                     (1,self.pending_samples)), pend_fant))\n\n        # Compute bests over the fantasies.\n        bests = np.min(fant_vals, axis=0)\n\n        # Now generalize from these fantasies.\n        cand_cross = self.cov(self.amp2, self.ls, comp_pend, cand)\n        cov_grad_func = getattr(gp, 'grad_' + self.cov_func.__name__)\n        cand_cross_grad = cov_grad_func(self.ls, comp_pend, cand)\n\n        # Solve the linear systems.\n        alpha  = spla.cho_solve((comp_pend_chol, True),\n                                fant_vals - self.mean)\n        beta   = spla.solve_triangular(comp_pend_chol, cand_cross,\n                                       lower=True)\n\n        # Predict the marginal means and variances at candidates.\n        func_m = np.dot(cand_cross.T, alpha) + self.mean\n        func_v = self.amp2*(1+1e-6) - np.sum(beta**2, axis=0)\n\n        #beta  = spla.solve_triangular(obsv_chol_full, cand_cross_full,\n        #                               lower=True)\n        #beta   = spla.solve_triangular(obsv_chol, cand_cross,\n        #                               lower=True)\n\n        # Predict the marginal means and variances at candidates.\n        func_m = np.dot(cand_cross.T, alpha) + self.mean\n        func_v = self.amp2*(1+1e-6) - np.sum(beta**2, axis=0)\n\n        # Expected improvement\n        func_s = np.sqrt(func_v)\n        u      = (best - func_m) / func_s\n        ncdf   = sps.norm.cdf(u)\n        npdf   = sps.norm.pdf(u)\n        ei     = func_s*(u*ncdf + npdf)\n\n        constrained_ei = -np.sum(ei*func_constraint_m)\n        if not compute_grad:\n            return constrained_ei\n\n        # Gradients of ei w.r.t. mean and variance\n        g_ei_m = -ncdf\n        g_ei_s2 = 0.5*npdf / func_s\n\n        # Apply covariance function\n        grad_cross = np.squeeze(cand_cross_grad)\n\n        grad_xp_m = np.dot(alpha.transpose(),grad_cross)\n        grad_xp_v = np.dot(-2*spla.cho_solve(\n                (comp_pend_chol, True),cand_cross).transpose(), grad_cross)\n\n        grad_xp = 0.5*self.amp2*(grad_xp_m*np.tile(g_ei_m,(comp.shape[1],1)).T + (grad_xp_v.T*g_ei_s2).T)\n\n        grad_xp = np.sum(grad_xp,axis=0)\n\n        if use_vanilla_ei:\n            return -np.sum(ei), grad_xp.flatten()\n\n        grad_constraint_xp_m = np.dot(t_alpha.transpose(),grad_cross_t)\n        grad_constraint_xp_m = (0.5*self.constraint_amp2*\n                                self.constraint_gain*\n                                grad_constraint_xp_m*\n                                sps.norm.pdf(self.constraint_gain*ff))\n\n        grad_xp = (func_constraint_m*grad_xp + np.sum(ei)*grad_constraint_xp_m)\n\n        return constrained_ei, grad_xp.flatten()\n\n    def grad_optimize_ei_nopend(self, cand, comp, vals, labels, compute_grad=True):\n        # Here we have to compute the gradients for constrained ei\n        # This means deriving through the two kernels, the one for predicting\n        # constraint violations and the one predicting ei\n\n        # First pull out violating points\n        compfull = comp.copy()\n        comp = comp[labels > 0, :]\n        vals = vals[labels > 0]\n\n        # Use standard EI if there aren't enough observations of either\n        # positive or negative constraint violations\n        use_vanilla_ei = (np.all(labels > 0) or np.all(labels <= 0))\n\n        best = np.min(vals)\n        cand = np.reshape(cand, (-1, comp.shape[1]))\n        func_constraint_m = 1\n\n        if (not use_vanilla_ei):\n\n            # First we make predictions for the durations\n            # Compute covariances\n            comp_constraint_cov   = self.cov(self.constraint_amp2,\n                                             self.constraint_ls,\n                                             compfull)\n            cand_constraint_cross = self.cov(self.constraint_amp2,\n                                             self.constraint_ls,\n                                             compfull,cand)\n\n            # Cholesky decompositions\n            obsv_constraint_cov  = (comp_constraint_cov +\n                 self.constraint_noise*np.eye(compfull.shape[0]))\n            obsv_constraint_chol = spla.cholesky(obsv_constraint_cov,lower=True)\n\n            # Linear systems\n            t_alpha  = spla.cho_solve((obsv_constraint_chol, True), self.ff)\n\n            # Predict marginal mean times and (possibly) variances\n            ff = np.dot(cand_constraint_cross.T, t_alpha)\n\n            # Squash through Gaussian cdf\n            func_constraint_m = sps.norm.cdf(self.constraint_gain*ff)\n\n        # Now compute the gradients w.r.t. ei\n        # The primary covariances for prediction.\n        comp_cov   = self.cov(self.amp2, self.ls, comp)\n        cand_cross = self.cov(self.amp2, self.ls, comp, cand)\n        comp_cov_full   = self.cov(self.amp2, self.ls, compfull)\n        cand_cross_full = self.cov(self.amp2, self.ls, compfull, cand)\n\n        # Compute the required Cholesky.\n        obsv_cov  = comp_cov + self.noise*np.eye(comp.shape[0])\n        obsv_chol = spla.cholesky(obsv_cov, lower=True)\n        obsv_cov_full  = comp_cov_full + self.noise*np.eye(compfull.shape[0])\n        obsv_chol_full = spla.cholesky( obsv_cov_full, lower=True)\n\n        # Predictive things.\n        # Solve the linear systems.\n        alpha  = spla.cho_solve((obsv_chol, True), vals - self.mean)\n        beta   = spla.solve_triangular(obsv_chol_full, cand_cross_full,\n                                       lower=True)\n\n        # Predict the marginal means and variances at candidates.\n        func_m = np.dot(cand_cross.T, alpha) + self.mean\n        func_v = self.amp2*(1+1e-6) - np.sum(beta**2, axis=0)\n\n        # Expected improvement\n        func_s = np.sqrt(func_v)\n        u      = (best - func_m) / func_s\n        ncdf   = sps.norm.cdf(u)\n        npdf   = sps.norm.pdf(u)\n        ei     = func_s*(u*ncdf + npdf)\n\n        constrained_ei = -np.sum(ei*func_constraint_m)\n        if not compute_grad:\n            return constrained_ei\n\n        # Gradients of ei w.r.t. mean and variance\n        g_ei_m = -ncdf\n        g_ei_s2 = 0.5*npdf / func_s\n\n        # Apply covariance function\n        cov_grad_func = getattr(gp, 'grad_' + self.cov_func.__name__)\n        cand_cross_grad = cov_grad_func(self.ls, comp, cand)\n        grad_cross = np.squeeze(cand_cross_grad)\n\n        cand_cross_grad_full = cov_grad_func(self.ls, compfull, cand)\n        grad_cross_full = np.squeeze(cand_cross_grad_full)\n\n        grad_xp_m = np.dot(alpha.transpose(),grad_cross)\n        grad_xp_v = np.dot(-2*spla.cho_solve((obsv_chol_full, True),\n                                             cand_cross_full).transpose(),\n                            grad_cross_full)\n\n        grad_xp = 0.5*self.amp2*(grad_xp_m*g_ei_m + grad_xp_v*g_ei_s2)\n\n        if use_vanilla_ei:\n            return -np.sum(ei), grad_xp.flatten()\n\n        # Apply constraint classifier\n        cand_cross_grad = cov_grad_func(self.constraint_ls, compfull, cand)\n        grad_cross_t = np.squeeze(cand_cross_grad)\n\n        grad_constraint_xp_m = np.dot(t_alpha.transpose(),grad_cross_t)\n        grad_constraint_xp_m = (0.5*self.constraint_amp2*\n                                self.constraint_gain*\n                                grad_constraint_xp_m*\n                                sps.norm.pdf(self.constraint_gain*ff))\n\n        grad_xp = (func_constraint_m*grad_xp + ei*grad_constraint_xp_m)\n\n        return constrained_ei, grad_xp.flatten()\n\n\n    def compute_constrained_ei(self, comp, pend, cand, vals, labels):\n        # First we make predictions for the durations as that\n        # doesn't depend on pending experiments\n        # First pull out violating points\n        compfull = comp.copy()\n        comp = comp[labels > 0, :]\n        vals = vals[labels > 0]\n\n        # Use standard EI if there aren't enough observations of either\n        # positive or negative constraint violations\n        if (np.all(labels > 0) or np.all(labels <= 0)):\n            func_constraint_m = 1\n        else:\n            # Compute covariances\n            comp_constraint_cov   = self.cov(self.constraint_amp2,\n                                             self.constraint_ls,\n                                             compfull)\n            cand_constraint_cross = self.cov(self.constraint_amp2,\n                                             self.constraint_ls,\n                                             compfull,cand)\n\n            # Cholesky decompositions\n            obsv_constraint_cov  = (comp_constraint_cov +\n                self.constraint_noise*np.eye(compfull.shape[0]))\n            obsv_constraint_chol = spla.cholesky(\n                obsv_constraint_cov, lower=True)\n\n            # Linear systems\n            t_alpha  = spla.cho_solve((obsv_constraint_chol, True), self.ff)\n            t_beta   = spla.solve_triangular(obsv_constraint_chol,\n                                             cand_constraint_cross, lower=True)\n\n            # Predict marginal mean times and (possibly) variances\n            func_constraint_m = (np.dot(cand_constraint_cross.T, t_alpha))\n\n        # Squash through a probit\n        func_constraint_m = sps.norm.cdf(self.constraint_gain*func_constraint_m)\n        if pend.shape[0] == 0:\n            # If there are no pending, don't do anything fancy.\n            # Current best.\n            best = np.min(vals)\n\n            # The primary covariances for prediction.\n            comp_cov   = self.cov(self.amp2, self.ls, comp)\n            comp_cov_full = self.cov(self.amp2, self.ls, compfull)\n            cand_cross = self.cov(self.amp2, self.ls, comp, cand)\n            cand_cross_full = self.cov(self.amp2, self.ls, compfull, cand)\n\n            # Compute the required Cholesky.\n            obsv_cov  = comp_cov + self.noise*np.eye(comp.shape[0])\n            obsv_cov_full  = (comp_cov_full +\n                              self.noise*np.eye(compfull.shape[0]))\n            obsv_chol = spla.cholesky( obsv_cov, lower=True)\n            obsv_chol_full = spla.cholesky( obsv_cov_full, lower=True)\n\n            # Solve the linear systems.\n            alpha  = spla.cho_solve((obsv_chol, True), vals - self.mean)\n            beta   = spla.solve_triangular(obsv_chol, cand_cross, lower=True)\n            #beta   = spla.solve_triangular(obsv_chol_full, cand_cross_full,\n            #                               lower=True)\n\n            # Predict the marginal means and variances at candidates.\n            func_m = np.dot(cand_cross.T, alpha) + self.mean\n            func_v = self.amp2*(1+1e-6) - np.sum(beta**2, axis=0)\n\n            # Expected improvement\n            func_s = np.sqrt(func_v)\n            u      = (best - func_m) / func_s\n            ncdf   = sps.norm.cdf(u)\n            npdf   = sps.norm.pdf(u)\n            ei     = func_s*( u*ncdf + npdf)\n\n            constrained_ei = ei*func_constraint_m\n            return constrained_ei\n        else:\n            # If there are pending experiments, fantasize their outcomes.\n\n            # Create a composite vector of complete and pending.\n            comp_pend = np.concatenate((comp, pend))\n\n            # Compute the covariance and Cholesky decomposition.\n            comp_pend_cov  = (self.cov(self.amp2, self.ls, comp_pend) +\n                              self.noise*np.eye(comp_pend.shape[0]))\n            comp_pend_chol = spla.cholesky(comp_pend_cov, lower=True)\n\n            # Compute submatrices.\n            pend_cross = self.cov(self.amp2, self.ls, comp, pend)\n            pend_kappa = self.cov(self.amp2, self.ls, pend)\n\n            # Use the sub-Cholesky.\n            obsv_chol = comp_pend_chol[:comp.shape[0],:comp.shape[0]]\n\n            # Solve the linear systems.\n            alpha  = spla.cho_solve((obsv_chol, True), vals - self.mean)\n            beta   = spla.cho_solve((obsv_chol, True), pend_cross)\n\n            # Finding predictive means and variances.\n            pend_m = np.dot(pend_cross.T, alpha) + self.mean\n            pend_K = pend_kappa - np.dot(pend_cross.T, beta)\n\n            # Take the Cholesky of the predictive covariance.\n            pend_chol = spla.cholesky(pend_K, lower=True)\n\n            # Make predictions.\n            pend_fant = np.dot(pend_chol, npr.randn(pend.shape[0],\n                               self.pending_samples)) + pend_m[:,None]\n\n            # Include the fantasies.\n            fant_vals = np.concatenate((np.tile(vals[:,np.newaxis],\n                                       (1,self.pending_samples)), pend_fant))\n\n            # Compute bests over the fantasies.\n            bests = np.min(fant_vals, axis=0)\n\n            # Now generalize from these fantasies.\n            cand_cross = self.cov(self.amp2, self.ls, comp_pend, cand)\n\n            # Solve the linear systems.\n            alpha  = spla.cho_solve((comp_pend_chol, True),\n                                    fant_vals - self.mean)\n            beta   = spla.solve_triangular(comp_pend_chol, cand_cross,\n                                           lower=True)\n\n            # Predict the marginal means and variances at candidates.\n            func_m = np.dot(cand_cross.T, alpha) + self.mean\n            func_v = self.amp2*(1+1e-6) - np.sum(beta**2, axis=0)\n\n            # Expected improvement\n            func_s = np.sqrt(func_v[:,np.newaxis])\n            u      = (bests[np.newaxis,:] - func_m) / func_s\n            ncdf   = sps.norm.cdf(u)\n            npdf   = sps.norm.pdf(u)\n            ei     = func_s*( u*ncdf + npdf)\n\n            return np.mean(ei, axis=1)*func_constraint_m\n\n    def compute_ei(self, comp, pend, cand, vals, labels):\n        # First we make predictions for the durations as that\n        # doesn't depend on pending experiments\n        # First pull out violating points\n        compfull = comp.copy()\n        comp = comp[labels > 0, :]\n        vals = vals[labels > 0]\n\n        # Compute covariances\n        comp_constraint_cov   = self.cov(self.constraint_amp2,\n                                         self.constraint_ls,\n                                         compfull)\n        cand_constraint_cross = self.cov(self.constraint_amp2,\n                                         self.constraint_ls,\n                                         compfull,cand)\n\n        # Cholesky decompositions\n        obsv_constraint_cov  = (comp_constraint_cov +\n                                self.constraint_noise*np.eye(\n            compfull.shape[0]))\n        obsv_constraint_chol = spla.cholesky( obsv_constraint_cov, lower=True )\n\n        # Linear systems\n        t_alpha  = spla.cho_solve((obsv_constraint_chol, True), self.ff)\n\n        # Predict marginal mean times and (possibly) variances\n        func_constraint_m = (np.dot(cand_constraint_cross.T, t_alpha))\n\n        # Squash through a probit to get prob of not violating a constraint\n        func_constraint_m = 1./(1+np.exp(-self.constraint_gain*\n                                          func_constraint_m))\n\n        if pend.shape[0] == 0:\n            # If there are no pending, don't do anything fancy.\n\n            # Current best.\n            best = np.min(vals)\n\n            # The primary covariances for prediction.\n            comp_cov   = self.cov(self.amp2, self.ls, comp)\n            comp_cov_full = self.cov(self.amp2, self.ls, compfull)\n            cand_cross = self.cov(self.amp2, self.ls, comp, cand)\n            cand_cross_full = self.cov(self.amp2, self.ls, compfull, cand)\n\n            # Compute the required Cholesky.\n            obsv_cov  = comp_cov + self.noise*np.eye(comp.shape[0])\n            obsv_cov_full  = (comp_cov_full +\n                              self.noise*np.eye(compfull.shape[0]))\n            obsv_chol = spla.cholesky( obsv_cov, lower=True )\n            obsv_chol_full = spla.cholesky( obsv_cov_full, lower=True )\n\n            # Solve the linear systems.\n            alpha  = spla.cho_solve((obsv_chol, True), vals - self.mean)\n            beta   = spla.solve_triangular(obsv_chol, cand_cross, lower=True)\n            #beta   = spla.solve_triangular(obsv_chol_full, cand_cross_full,\n                                #lower=True)\n\n            # Predict the marginal means and variances at candidates.\n            func_m = np.dot(cand_cross.T, alpha) + self.mean\n            func_v = self.amp2*(1+1e-6) - np.sum(beta**2, axis=0)\n\n            # Expected improvement\n            func_s = np.sqrt(func_v)\n            u      = (best - func_m) / func_s\n            ncdf   = sps.norm.cdf(u)\n            npdf   = sps.norm.pdf(u)\n            ei     = func_s*( u*ncdf + npdf)\n\n            return ei\n        else:\n            return 0\n\n    def sample_constraint_hypers(self, comp, labels):\n        # The latent GP projection\n        # The latent GP projection\n        if (self.ff is None or self.ff.shape[0] < comp.shape[0]):\n            self.ff_samples = []\n            comp_cov  = self.cov(self.constraint_amp2, self.constraint_ls, comp)\n            obsv_cov  = comp_cov + 1e-6*np.eye(comp.shape[0])\n            obsv_chol = spla.cholesky(obsv_cov, lower=True)\n            self.ff = np.dot(obsv_chol,npr.randn(obsv_chol.shape[0]))\n\n        self._sample_constraint_noisy(comp, labels)\n        self._sample_constraint_ls(comp, labels)\n        self.constraint_hyper_samples.append((self.constraint_mean,\n                                              self.constraint_gain,\n                                              self.constraint_amp2,\n                                              self.constraint_ls))\n        self.ff_samples.append(self.ff)\n\n    def sample_hypers(self, comp, vals):\n        if self.noiseless:\n            self.noise = 1e-3\n            self._sample_noiseless(comp, vals)\n        else:\n            self._sample_noisy(comp, vals)\n        self._sample_ls(comp, vals)\n\n        self.hyper_samples.append((self.mean, self.noise, self.amp2, self.ls))\n\n    def _sample_ls(self, comp, vals):\n        def logprob(ls):\n            if np.any(ls < 0) or np.any(ls > self.max_ls):\n                return -np.inf\n\n            cov   = (self.amp2 * (self.cov_func(ls, comp, None) +\n                                  1e-6*np.eye(comp.shape[0])) +\n                     self.noise*np.eye(comp.shape[0]))\n            chol  = spla.cholesky(cov, lower=True)\n            solve = spla.cho_solve((chol, True), vals - self.mean)\n            lp    = (-np.sum(np.log(np.diag(chol))) -\n                      0.5*np.dot(vals-self.mean, solve))\n            return lp\n\n        self.ls = util.slice_sample(self.ls, logprob, compwise=True)\n\n    def _sample_constraint_ls(self, comp, vals):\n        def lpProbit(ff, gain=self.constraint_gain):\n            probs = sps.norm.cdf(ff*gain)\n            probs[probs <= 0] = 1e-12\n            probs[probs >= 1] = 1-1e-12\n            llh = np.sum(vals*np.log(probs) +\n                         (1-vals)*np.log(1-probs))\n\n            return llh\n\n        def lpSigmoid(ff, gain=self.constraint_gain):\n            probs = 1./(1. + np.exp(-gain*ff));\n            probs[probs <= 0] = 1e-12\n            probs[probs >= 1] = 1-1e-12\n            llh   = np.sum(vals*np.log(probs) + (1-vals)*np.log(1-probs));\n            return llh\n\n        def updateGain(gain):\n            if gain < 0.01 or gain > 10:\n                return -np.inf\n\n            cov   = (self.constraint_amp2 * (self.cov_func(\n                        self.constraint_ls, comp, None) +\n                                             1e-6*np.eye(comp.shape[0])) +\n                     self.constraint_noise*np.eye(comp.shape[0]))\n            chol  = spla.cholesky(cov, lower=True)\n            solve = spla.cho_solve((chol, True), vals)\n            lp   = lpProbit(self.ff, gain)\n\n            return lp\n\n        def logprob(ls):\n            if np.any(ls < 0) or np.any(ls > self.constraint_max_ls):\n                return -np.inf\n\n            cov   = self.constraint_amp2 * (self.cov_func(ls, comp, None) + 1e-6*np.eye(comp.shape[0])) + self.constraint_noise*np.eye(comp.shape[0])\n            chol  = spla.cholesky(cov, lower=True)\n            solve = spla.cho_solve((chol, True), self.ff)\n            lp   = lpProbit(self.ff)\n\n            return lp\n\n        hypers = util.slice_sample(self.constraint_ls, logprob, compwise=True)\n        self.constraint_ls = hypers\n\n        cov   = self.constraint_amp2 * (self.cov_func(self.constraint_ls, comp, None) + 1e-6*np.eye(comp.shape[0])) + self.constraint_noise*np.eye(comp.shape[0])\n        chol  = spla.cholesky(cov, lower=False)\n        ff = self.ff\n        for jj in range(20):\n            (ff, lpell) = self.elliptical_slice(ff, chol, lpProbit)\n\n        self.ff = ff\n\n        # Update gain\n        hypers = util.slice_sample(np.array([self.constraint_gain]),\n                                   updateGain, compwise=True)\n        self.constraint_gain = hypers[0]\n\n    def _sample_noisy(self, comp, vals):\n        def logprob(hypers):\n            mean  = hypers[0]\n            amp2  = hypers[1]\n            noise = hypers[2]\n\n            # This is pretty hacky, but keeps things sane.\n            if mean > np.max(vals) or mean < np.min(vals):\n                return -np.inf\n\n            if amp2 < 0 or noise < 0:\n                return -np.inf\n\n            cov   = amp2 * ((self.cov_func(self.ls, comp, None) +\n                            1e-6*np.eye(comp.shape[0])) +\n                            noise*np.eye(comp.shape[0]))\n            chol  = spla.cholesky(cov, lower=True)\n            solve = spla.cho_solve((chol, True), vals - mean)\n            lp    = -np.sum(np.log(np.diag(chol)))-0.5*np.dot(vals-mean, solve)\n\n            # Roll in noise horseshoe prior.\n            lp += np.log(np.log(1 + (self.noise_scale/noise)**2))\n\n            # Roll in amplitude lognormal prior\n            lp -= 0.5*(np.log(amp2)/self.amp2_scale)**2\n\n            return lp\n\n        hypers = util.slice_sample(np.array(\n                    [self.mean, self.amp2, self.noise]),\n                                   logprob, compwise=False)\n        self.mean  = hypers[0]\n        self.amp2  = hypers[1]\n        self.noise = hypers[2]\n\n    def _sample_constraint_noisy(self, comp, vals):\n        def lpProbit(ff, gain=self.constraint_gain):\n            probs = sps.norm.cdf(ff*gain)\n            probs[probs <= 0] = 1e-12\n            probs[probs >= 1] = 1-1e-12\n            llh = np.sum(vals*np.log(probs) +\n                         (1-vals)*np.log(1-probs))\n            if np.any(np.isnan(probs)):\n                log(probs)\n            return llh\n\n        def lpSigmoid(ff,gain=self.constraint_gain):\n            probs = 1./(1. + np.exp(-gain*ff));\n            probs[probs <= 0] = 1e-12\n            probs[probs >= 1] = 1-1e-12\n            llh   = np.sum(vals*np.log(probs) + (1-vals)*np.log(1-probs));\n            return llh\n\n        def logprob(hypers):\n            amp2  = hypers[0]\n            ff = hypers[1:]\n\n            if amp2 < 0:\n                return -np.inf\n\n            noise = self.constraint_noise\n            cov   = amp2 * (self.cov_func(self.constraint_ls, comp, None) + 1e-6*np.eye(comp.shape[0])) + noise*np.eye(comp.shape[0])\n            chol  = spla.cholesky(cov, lower=True)\n            solve = spla.cho_solve((chol, True), ff)\n            lp    = -np.sum(np.log(np.diag(chol)))-0.5*np.dot(ff, solve)\n\n            # Roll in amplitude lognormal prior\n            lp -= 0.5*(np.log(amp2)/self.constraint_amp2_scale)**2\n\n            lp   += lpProbit(ff,self.constraint_gain)\n\n            return lp\n\n        hypers = util.slice_sample(np.hstack((np.array([self.constraint_amp2]),\n                                            self.ff)), logprob, compwise=False)\n        self.constraint_amp2  = hypers[0]\n        self.ff = hypers[1:]\n        cov   = self.constraint_amp2 * ((\n                    self.cov_func(self.constraint_ls, comp, None) +\n                    1e-6*np.eye(comp.shape[0])) +\n                                self.constraint_noise*np.eye(comp.shape[0]))\n        chol  = spla.cholesky(cov, lower=False)\n        ff = self.ff\n        for jj in range(50):\n            (ff, lpell) = self.elliptical_slice(ff, chol, lpProbit)\n        self.ff = ff\n\n    def _sample_noiseless(self, comp, vals):\n        def logprob(hypers):\n            mean  = hypers[0]\n            amp2  = hypers[1]\n            noise = 1e-3\n\n            # This is pretty hacky, but keeps things sane.\n            if mean > np.max(vals) or mean < np.min(vals):\n                return -np.inf\n\n            if amp2 < 0:\n                return -np.inf\n\n            cov   = amp2 * ((self.cov_func(self.ls, comp, None) +\n                             1e-6*np.eye(comp.shape[0])) +\n                            noise*np.eye(comp.shape[0]))\n            chol  = spla.cholesky(cov, lower=True)\n            solve = spla.cho_solve((chol, True), vals - mean)\n            lp    = -np.sum(np.log(np.diag(chol)))-0.5*np.dot(vals-mean, solve)\n\n            # Roll in amplitude lognormal prior\n            lp -= 0.5*(np.log(amp2)/self.amp2_scale)**2\n\n            return lp\n\n        hypers = util.slice_sample(np.array(\n                 [self.mean, self.amp2, self.noise]), logprob, compwise=False)\n        self.mean  = hypers[0]\n        self.amp2  = hypers[1]\n        self.noise = 1e-3\n\n    def elliptical_slice(self, xx, chol_Sigma, log_like_fn, cur_log_like=None,\n                         angle_range=0):\n        D = xx.shape[0]\n\n        if cur_log_like is None:\n            cur_log_like = log_like_fn(xx)\n\n        nu = np.dot(chol_Sigma.T,np.random.randn(D, 1)).flatten()\n        hh = np.log(np.random.rand()) + cur_log_like\n\n        # Set up a bracket of angles and pick a first proposal.\n        # \"phi = (theta'-theta)\" is a change in angle.\n        if angle_range <= 0:\n            # Bracket whole ellipse with both edges at first proposed point\n            phi = np.random.rand()*2*math.pi;\n            phi_min = phi - 2*math.pi;\n            phi_max = phi;\n        else:\n            # Randomly center bracket on current point\n            phi_min = -angle_range*np.random.rand();\n            phi_max = phi_min + angle_range;\n            phi = np.random.rand()*(phi_max - phi_min) + phi_min;\n\n        # Slice sampling loop\n        while True:\n            # Compute xx for proposed angle difference\n            # and check if it's on the slice\n            xx_prop = xx*np.cos(phi) + nu*np.sin(phi);\n\n            cur_log_like = log_like_fn(xx_prop);\n            if cur_log_like > hh:\n                # New point is on slice, ** EXIT LOOP **\n                break;\n\n            # Shrink slice to rejected point\n            if phi > 0:\n                phi_max = phi;\n            elif phi < 0:\n                phi_min = phi;\n            else:\n                raise Exception('BUG DETECTED: Shrunk to current position '\n                                'and still not acceptable.');\n\n            # Propose new angle difference\n            phi = np.random.rand()*(phi_max - phi_min) + phi_min;\n\n        xx = xx_prop;\n        return (xx, cur_log_like)\n"
  },
  {
    "path": "src/aup/Proposer/spearmint/chooser/GPEIChooser.py",
    "content": "##\n# Copyright (C) 2012 Jasper Snoek, Hugo Larochelle and Ryan P. Adams\n#\n# This code is written for research and educational purposes only to\n# supplement the paper entitled\n# \"Practical Bayesian Optimization of Machine Learning Algorithms\"\n# by Snoek, Larochelle and Adams\n# Advances in Neural Information Processing Systems, 2012\n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation, either version 3 of the License, or\n# (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with this program.  If not, see <http://www.gnu.org/licenses/>.\nimport os\nfrom .. import gp\nimport sys\nfrom .. import util\nimport tempfile\nimport numpy          as np\nimport numpy.random   as npr\nimport scipy.linalg   as spla\nimport scipy.stats    as sps\nimport scipy.optimize as spo\nimport pickle\n\nfrom ..Locker  import *\nfrom ..helpers import *\n\nimport logging\nlogger = logging.getLogger(__name__)\nlog = logger.debug\n\ndef init(expt_dir, arg_string):\n    args = util.unpack_args(arg_string)\n    return GPEIChooser(expt_dir, **args)\n\n\"\"\"\nChooser module for the Gaussian process expected improvement\nacquisition function.  Candidates are sampled densely in the unit\nhypercube and then the highest EI point is selected.  Slice sampling\nis used to sample Gaussian process hyperparameters for the GP.\n\"\"\"\nclass GPEIChooser:\n\n    def __init__(self, expt_dir, covar=\"Matern52\", mcmc_iters=10,\n                 pending_samples=100, noiseless=False):\n        self.cov_func        = getattr(gp, covar)\n        self.locker          = Locker()\n        self.state_pkl       = os.path.join(expt_dir, self.__module__ + \".pkl\")\n\n        self.mcmc_iters      = int(mcmc_iters)\n        self.pending_samples = pending_samples\n        self.D               = -1\n        self.hyper_iters     = 1\n        self.noiseless       = bool(int(noiseless))\n\n        self.noise_scale = 0.1  # horseshoe prior\n        self.amp2_scale  = 1    # zero-mean log normal prior\n        self.max_ls      = 2    # top-hat prior on length scales\n\n        self.amp2 = None\n        self.ls = None\n        self.noise = None\n        self.mean = None\n\n    def __del__(self):\n        self.locker.lock_wait(self.state_pkl)\n\n        # Write the hyperparameters out to a Pickle.\n        fh = tempfile.NamedTemporaryFile(mode='wb', delete=False)\n        pickle.dump({ 'dims'   : self.D,\n                       'ls'     : self.ls,\n                       'amp2'   : self.amp2,\n                       'noise'  : self.noise,\n                       'mean'   : self.mean },\n                     fh)\n        fh.close()\n\n        # Use an atomic move for better NFS happiness.\n        cmd = 'mv \"%s\" \"%s\"' % (fh.name, self.state_pkl)\n        os.system(cmd) # TODO: Should check system-dependent return status.\n\n        self.locker.unlock(self.state_pkl)\n\n    def _real_init(self, dims, values):\n        self.locker.lock_wait(self.state_pkl)\n\n        if os.path.exists(self.state_pkl):\n            fh    = open(self.state_pkl, 'rb')\n            state = pickle.load(fh)\n            fh.close()\n\n            self.D     = state['dims']\n            self.ls    = state['ls']\n            self.amp2  = state['amp2']\n            self.noise = state['noise']\n            self.mean  = state['mean']\n        else:\n            # Input dimensionality.\n            self.D = dims\n\n            # Initial length scales.\n            self.ls = np.ones(self.D)\n\n            # Initial amplitude.\n            self.amp2 = np.std(values)+1e-4\n\n            # Initial observation noise.\n            self.noise = 1e-3\n\n            # Initial mean.\n            self.mean = np.mean(values)\n\n        self.locker.unlock(self.state_pkl)\n\n    def cov(self, x1, x2=None):\n        if x2 is None:\n            return self.amp2 * (self.cov_func(self.ls, x1, None)\n                               + 1e-6*np.eye(x1.shape[0]))\n        else:\n            return self.amp2 * self.cov_func(self.ls, x1, x2)\n\n    def next(self, grid, values, durations, candidates, pending, complete):\n        # Don't bother using fancy GP stuff at first.\n        if complete.shape[0] < 2:\n            return int(candidates[0])\n\n        # Perform the real initialization.\n        if self.D == -1:\n            self._real_init(grid.shape[1], values[complete])\n\n        # Grab out the relevant sets.\n        comp = grid[complete,:]\n        cand = grid[candidates,:]\n        pend = grid[pending,:]\n        vals = values[complete]\n\n        if self.mcmc_iters > 0:\n            # Sample from hyperparameters.\n\n            overall_ei = np.zeros((cand.shape[0], self.mcmc_iters))\n\n            for mcmc_iter in range(self.mcmc_iters):\n\n                self.sample_hypers(comp, vals)\n                log(\"mean: %f  amp: %f  noise: %f  min_ls: %f  max_ls: %f\"\n                                 % (self.mean, np.sqrt(self.amp2), self.noise, np.min(self.ls), np.max(self.ls)))\n\n                overall_ei[:,mcmc_iter] = self.compute_ei(comp, pend, cand, vals)\n\n            best_cand = np.argmax(np.mean(overall_ei, axis=1))\n\n            return int(candidates[best_cand])\n\n        else:\n            # Optimize hyperparameters\n            try:\n                self.optimize_hypers(comp, vals)\n            except:\n                # Initial length scales.\n                self.ls = np.ones(self.D)\n                # Initial amplitude.\n                self.amp2 = np.std(vals)\n                # Initial observation noise.\n                self.noise = 1e-3\n            log(\"mean: %f  amp: %f  noise: %f  min_ls: %f  max_ls: %f\"\n                             % (self.mean, np.sqrt(self.amp2), self.noise, np.min(self.ls),\n                                np.max(self.ls)))\n\n            ei = self.compute_ei(comp, pend, cand, vals)\n\n            best_cand = np.argmax(ei)\n\n            return int(candidates[best_cand])\n\n    def compute_ei(self, comp, pend, cand, vals):\n        if pend.shape[0] == 0:\n            # If there are no pending, don't do anything fancy.\n\n            # Current best.\n            best = np.min(vals)\n\n            # The primary covariances for prediction.\n            comp_cov   = self.cov(comp)\n            cand_cross = self.cov(comp, cand)\n\n            # Compute the required Cholesky.\n            obsv_cov  = comp_cov + self.noise*np.eye(comp.shape[0])\n            obsv_chol = spla.cholesky( obsv_cov, lower=True )\n\n            # Solve the linear systems.\n            alpha  = spla.cho_solve((obsv_chol, True), vals - self.mean)\n            beta   = spla.solve_triangular(obsv_chol, cand_cross, lower=True)\n\n            # Predict the marginal means and variances at candidates.\n            func_m = np.dot(cand_cross.T, alpha) + self.mean\n            func_v = self.amp2*(1+1e-6) - np.sum(beta**2, axis=0)\n\n            # Expected improvement\n            func_s = np.sqrt(func_v)\n            u      = (best - func_m) / func_s\n            ncdf   = sps.norm.cdf(u)\n            npdf   = sps.norm.pdf(u)\n            ei     = func_s*( u*ncdf + npdf)\n\n            return ei\n        else:\n            # If there are pending experiments, fantasize their outcomes.\n\n            # Create a composite vector of complete and pending.\n            comp_pend = np.concatenate((comp, pend))\n\n            # Compute the covariance and Cholesky decomposition.\n            comp_pend_cov  = self.cov(comp_pend) + self.noise*np.eye(comp_pend.shape[0])\n            comp_pend_chol = spla.cholesky(comp_pend_cov, lower=True)\n\n            # Compute submatrices.\n            pend_cross = self.cov(comp, pend)\n            pend_kappa = self.cov(pend)\n\n            # Use the sub-Cholesky.\n            obsv_chol = comp_pend_chol[:comp.shape[0],:comp.shape[0]]\n\n            # Solve the linear systems.\n            alpha  = spla.cho_solve((obsv_chol, True), vals - self.mean)\n            beta   = spla.cho_solve((obsv_chol, True), pend_cross)\n\n            # Finding predictive means and variances.\n            pend_m = np.dot(pend_cross.T, alpha) + self.mean\n            pend_K = pend_kappa - np.dot(pend_cross.T, beta)\n\n            # Take the Cholesky of the predictive covariance.\n            pend_chol = spla.cholesky(pend_K, lower=True)\n\n            # Make predictions.\n            pend_fant = (np.dot(pend_chol, npr.randn(pend.shape[0],self.pending_samples))\n                         + pend_m[:,None])\n\n            # Include the fantasies.\n            fant_vals = np.concatenate((np.tile(vals[:,np.newaxis],\n                                                (1,self.pending_samples)), pend_fant))\n\n            # Compute bests over the fantasies.\n            bests = np.min(fant_vals, axis=0)\n\n            # Now generalize from these fantasies.\n            cand_cross = self.cov(comp_pend, cand)\n\n            # Solve the linear systems.\n            alpha  = spla.cho_solve((comp_pend_chol, True), fant_vals - self.mean)\n            beta   = spla.solve_triangular(comp_pend_chol, cand_cross, lower=True)\n\n            # Predict the marginal means and variances at candidates.\n            func_m = np.dot(cand_cross.T, alpha) + self.mean\n            func_v = self.amp2*(1+1e-6) - np.sum(beta**2, axis=0)\n\n            # Expected improvement\n            func_s = np.sqrt(func_v[:,np.newaxis])\n            u      = (bests[np.newaxis,:] - func_m) / func_s\n            ncdf   = sps.norm.cdf(u)\n            npdf   = sps.norm.pdf(u)\n            ei     = func_s*( u*ncdf + npdf)\n\n            return np.mean(ei, axis=1)\n\n    def sample_hypers(self, comp, vals):\n        if self.noiseless:\n            self.noise = 1e-3\n            self._sample_noiseless(comp, vals)\n        else:\n            self._sample_noisy(comp, vals)\n        self._sample_ls(comp, vals)\n\n    def _sample_ls(self, comp, vals):\n        def logprob(ls):\n            if np.any(ls < 0) or np.any(ls > self.max_ls):\n                return -np.inf\n\n            cov   = self.amp2 * (self.cov_func(ls, comp, None) + 1e-6*np.eye(comp.shape[0])) + self.noise*np.eye(comp.shape[0])\n            chol  = spla.cholesky(cov, lower=True)\n            solve = spla.cho_solve((chol, True), vals - self.mean)\n            lp    = -np.sum(np.log(np.diag(chol)))-0.5*np.dot(vals-self.mean, solve)\n            return lp\n\n        self.ls = util.slice_sample(self.ls, logprob, compwise=True)\n\n    def _sample_noisy(self, comp, vals):\n        def logprob(hypers):\n            mean  = hypers[0]\n            amp2  = hypers[1]\n            noise = hypers[2]\n\n            # This is pretty hacky, but keeps things sane.\n            if mean > np.max(vals) or mean < np.min(vals):\n                return -np.inf\n\n            if amp2 < 0 or noise < 0:\n                return -np.inf\n\n            cov   = amp2 * (self.cov_func(self.ls, comp, None) +\n                            1e-6*np.eye(comp.shape[0])) + noise*np.eye(comp.shape[0])\n            chol  = spla.cholesky(cov, lower=True)\n            solve = spla.cho_solve((chol, True), vals - mean)\n            lp    = -np.sum(np.log(np.diag(chol)))-0.5*np.dot(vals-mean, solve)\n\n            # Roll in noise horseshoe prior.\n            lp += np.log(np.log(1 + (self.noise_scale/noise)**2))\n\n            # Roll in amplitude lognormal prior\n            lp -= 0.5*(np.log(amp2)/self.amp2_scale)**2\n\n            return lp\n\n        hypers = util.slice_sample(np.array([self.mean, self.amp2, self.noise]),\n                                   logprob, compwise=False)\n        self.mean  = hypers[0]\n        self.amp2  = hypers[1]\n        self.noise = hypers[2]\n\n    def _sample_noiseless(self, comp, vals):\n        def logprob(hypers):\n            mean  = hypers[0]\n            amp2  = hypers[1]\n            noise = 1e-3\n\n            if amp2 < 0:\n                return -np.inf\n\n            cov   = amp2 * (self.cov_func(self.ls, comp, None) +\n                            1e-6*np.eye(comp.shape[0])) + noise*np.eye(comp.shape[0])\n            chol  = spla.cholesky(cov, lower=True)\n            solve = spla.cho_solve((chol, True), vals - mean)\n            lp    = -np.sum(np.log(np.diag(chol)))-0.5*np.dot(vals-mean, solve)\n\n            # Roll in amplitude lognormal prior\n            lp -= 0.5*(np.log(amp2)/self.amp2_scale)**2\n\n            return lp\n\n        hypers = util.slice_sample(np.array([self.mean, self.amp2, self.noise]), logprob,\n                                   compwise=False)\n        self.mean  = hypers[0]\n        self.amp2  = hypers[1]\n        self.noise = 1e-3\n\n    def optimize_hypers(self, comp, vals):\n        mygp = gp.GP(self.cov_func.__name__)\n        mygp.real_init(comp.shape[1], vals)\n        mygp.optimize_hypers(comp,vals)\n        self.mean = mygp.mean\n        self.ls = mygp.ls\n        self.amp2 = mygp.amp2\n        self.noise = mygp.noise\n\n        # Save hyperparameter samples\n        #self.hyper_samples.append((self.mean, self.noise, self.amp2, self.ls))\n        #self.dump_hypers()\n\n        return\n\n"
  },
  {
    "path": "src/aup/Proposer/spearmint/chooser/GPEIOptChooser.py",
    "content": "##\n# Copyright (C) 2012 Jasper Snoek, Hugo Larochelle and Ryan P. Adams\n#\n# This code is written for research and educational purposes only to\n# supplement the paper entitled\n# \"Practical Bayesian Optimization of Machine Learning Algorithms\"\n# by Snoek, Larochelle and Adams\n# Advances in Neural Information Processing Systems, 2012\n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation, either version 3 of the License, or\n# (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with this program.  If not, see <http://www.gnu.org/licenses/>.\nimport os\nfrom .. import gp\nimport sys\nfrom .. import util\nimport tempfile\nimport pickle\nimport copy\nimport numpy          as np\nimport numpy.random   as npr\nimport scipy.linalg   as spla\nimport scipy.stats    as sps\nimport scipy.optimize as spo\nimport multiprocessing\n\nfrom ..helpers import *\nfrom ..Locker  import *\n\nimport logging\nlogger = logging.getLogger(__name__)\nlog = logger.debug\n\ndef optimize_pt(c, b, comp, pend, vals, model):\n    ret = spo.fmin_l_bfgs_b(model.grad_optimize_ei_over_hypers,\n                            c.flatten(), args=(comp, pend, vals),\n                            bounds=b, disp=0)\n    return ret[0]\n\ndef init(expt_dir, arg_string):\n    args = util.unpack_args(arg_string)\n    return GPEIOptChooser(expt_dir, **args)\n\"\"\"\nChooser module for the Gaussian process expected improvement (EI)\nacquisition function where points are sampled densely in the unit\nhypercube and then a subset of the points are optimized to maximize EI\nover hyperparameter samples.  Slice sampling is used to sample\nGaussian process hyperparameters.\n\"\"\"\nclass GPEIOptChooser:\n\n    def __init__(self, expt_dir, covar=\"Matern52\", mcmc_iters=10,\n                 pending_samples=100, noiseless=False, burnin=100,\n                 grid_subset=20, use_multiprocessing=True):\n        self.cov_func        = getattr(gp, covar)\n        self.locker          = Locker()\n        self.state_pkl       = os.path.join(expt_dir, self.__module__ + \".pkl\")\n        self.stats_file      = os.path.join(expt_dir,\n                                   self.__module__ + \"_hyperparameters.txt\")\n        self.mcmc_iters      = int(mcmc_iters)\n        self.burnin          = int(burnin)\n        self.needs_burnin    = True\n        self.pending_samples = int(pending_samples)\n        self.D               = -1\n        self.hyper_iters     = 1\n        # Number of points to optimize EI over\n        self.grid_subset     = int(grid_subset)\n        self.noiseless       = bool(int(noiseless))\n        self.hyper_samples = []\n\n        self.noise_scale = 0.1  # horseshoe prior\n        self.amp2_scale  = 1    # zero-mean log normal prior\n        self.max_ls      = 2    # top-hat prior on length scales\n\n        # If multiprocessing fails or deadlocks, set this to False\n        self.use_multiprocessing = bool(int(use_multiprocessing))\n\n        self.ls = None\n        self.amp2 = None\n        self.mean = None\n        self.noise = None\n\n    def dump_hypers(self):\n        self.locker.lock_wait(self.state_pkl)\n\n        # Write the hyperparameters out to a Pickle.\n        fh = tempfile.NamedTemporaryFile(mode='wb', delete=False)\n        pickle.dump({ 'dims'          : self.D,\n                       'ls'            : self.ls,\n                       'amp2'          : self.amp2,\n                       'noise'         : self.noise,\n                       'hyper_samples' : self.hyper_samples,\n                       'mean'          : self.mean },\n                     fh)\n        fh.close()\n\n        # Use an atomic move for better NFS happiness.\n        cmd = 'mv \"%s\" \"%s\"' % (fh.name, self.state_pkl)\n        os.system(cmd) # TODO: Should check system-dependent return status.\n\n        self.locker.unlock(self.state_pkl)\n\n        # Write the hyperparameters out to a human readable file as well\n        fh    = open(self.stats_file, 'w')\n        fh.write('Mean Noise Amplitude <length scales>\\n')\n        fh.write('-----------ALL SAMPLES-------------\\n')\n        meanhyps = 0*np.hstack(self.hyper_samples[0])\n        for i in self.hyper_samples:\n            hyps = np.hstack(i)\n            meanhyps += (1/float(len(self.hyper_samples)))*hyps\n            for j in hyps:\n                fh.write(str(j) + ' ')\n            fh.write('\\n')\n\n        fh.write('-----------MEAN OF SAMPLES-------------\\n')\n        for j in meanhyps:\n            fh.write(str(j) + ' ')\n        fh.write('\\n')\n        fh.close()\n\n    # This passes out html or javascript to display interesting\n    # stats - such as the length scales (sensitivity to various\n    # dimensions).\n    def generate_stats_html(self):\n        # Need this because the model may not necessarily be\n        # initialized when this code is called.\n        if not self._read_only():\n            return 'Chooser not yet ready to display output'\n\n        mean_mean  = np.mean(np.vstack([h[0] for h in self.hyper_samples]))\n        mean_noise = np.mean(np.vstack([h[1] for h in self.hyper_samples]))\n        mean_ls    = np.mean(np.vstack([h[3][np.newaxis,:] for h in self.hyper_samples]),0)\n\n        try:\n            output = (\n                '<br /><span class=\\\"label label-info\\\">Estimated mean:</span> ' + str(mean_mean) +\n                '<br /><span class=\\\"label label-info\\\">Estimated noise:</span> ' + str(mean_noise) +\n                '<br /><br /><span class=\\\"label label-info\\\">Inverse parameter sensitivity' +\n                ' - Gaussian Process length scales</span><br /><br />' +\n                '<div id=\\\"lschart\\\"></div><script type=\\\"text/javascript\\\">' +\n                'var lsdata = [' + ','.join(['%.2f' % i for i in mean_ls]) + '];')\n        except:\n            return 'Chooser not yet ready to display output.'\n\n        output += ('bar_chart(\"#lschart\", lsdata, ' + str(self.max_ls) + ');' +\n                   '</script>')\n        return output\n\n    # Read in the chooser from file. Returns True only on success\n    def _read_only(self):\n        if os.path.exists(self.state_pkl):\n            fh    = open(self.state_pkl, 'rb')\n            state = pickle.load(fh)\n            fh.close()\n\n            self.D             = state['dims']\n            self.ls            = state['ls']\n            self.amp2          = state['amp2']\n            self.noise         = state['noise']\n            self.mean          = state['mean']\n            self.hyper_samples = state['hyper_samples']\n            self.needs_burnin  = False\n            return True\n\n        return False\n\n    def _real_init(self, dims, values):\n        self.locker.lock_wait(self.state_pkl)\n\n        self.randomstate = npr.get_state()\n        if os.path.exists(self.state_pkl):\n            fh    = open(self.state_pkl, 'r')\n            state = pickle.load(fh)\n            fh.close()\n\n            self.D             = state['dims']\n            self.ls            = state['ls']\n            self.amp2          = state['amp2']\n            self.noise         = state['noise']\n            self.mean          = state['mean']\n            self.hyper_samples = state['hyper_samples']\n            self.needs_burnin  = False\n        else:\n\n            # Input dimensionality.\n            self.D = dims\n\n            # Initial length scales.\n            self.ls = np.ones(self.D)\n\n            # Initial amplitude.\n            self.amp2 = np.std(values)+1e-4\n\n            # Initial observation noise.\n            self.noise = 1e-3\n\n            # Initial mean.\n            self.mean = np.mean(values)\n\n            # Save hyperparameter samples\n            self.hyper_samples.append((self.mean, self.noise, self.amp2,\n                                       self.ls))\n\n        self.locker.unlock(self.state_pkl)\n\n    def cov(self, x1, x2=None):\n        if x2 is None:\n            return self.amp2 * (self.cov_func(self.ls, x1, None)\n                               + 1e-6*np.eye(x1.shape[0]))\n        else:\n            return self.amp2 * self.cov_func(self.ls, x1, x2)\n\n    # Given a set of completed 'experiments' in the unit hypercube with\n    # corresponding objective 'values', pick from the next experiment to\n    # run according to the acquisition function.\n    def next(self, grid, values, durations,\n             candidates, pending, complete):\n\n        # Don't bother using fancy GP stuff at first.\n        if complete.shape[0] < 2:\n            return int(candidates[0])\n\n        # Perform the real initialization.\n        if self.D == -1:\n            self._real_init(grid.shape[1], values[complete])\n\n        # Grab out the relevant sets.\n        comp = grid[complete,:]\n        cand = grid[candidates,:]\n        pend = grid[pending,:]\n        vals = values[complete]\n        numcand = cand.shape[0]\n\n        # Spray a set of candidates around the min so far\n        best_comp = np.argmin(vals)\n        cand2 = np.vstack((np.random.randn(10,comp.shape[1])*0.001 +\n                           comp[best_comp,:], cand))\n\n        if self.mcmc_iters > 0:\n\n            # Possibly burn in.\n            if self.needs_burnin:\n                for mcmc_iter in range(self.burnin):\n                    self.sample_hypers(comp, vals)\n                    log(\"BURN %d/%d] mean: %.2f  amp: %.2f \"\n                                     \"noise: %.4f  min_ls: %.4f  max_ls: %.4f\"\n                                     % (mcmc_iter+1, self.burnin, self.mean,\n                                        np.sqrt(self.amp2), self.noise,\n                                        np.min(self.ls), np.max(self.ls)))\n                self.needs_burnin = False\n\n            # Sample from hyperparameters.\n            # Adjust the candidates to hit ei peaks\n            self.hyper_samples = []\n            for mcmc_iter in range(self.mcmc_iters):\n                self.sample_hypers(comp, vals)\n                log(\"%d/%d] mean: %.2f  amp: %.2f  noise: %.4f \"\n                                 \"min_ls: %.4f  max_ls: %.4f\"\n                                 % (mcmc_iter+1, self.mcmc_iters, self.mean,\n                                    np.sqrt(self.amp2), self.noise,\n                                    np.min(self.ls), np.max(self.ls)))\n            self.dump_hypers()\n\n            b = []# optimization bounds\n            for i in range(0, cand.shape[1]):\n                b.append((0, 1))\n\n            overall_ei = self.ei_over_hypers(comp,pend,cand2,vals)\n            inds = np.argsort(np.mean(overall_ei,axis=1))[-self.grid_subset:]\n            cand2 = cand2[inds,:]\n\n            # Optimize each point in parallel\n            if self.use_multiprocessing:\n                pool = multiprocessing.Pool(self.grid_subset)\n                results = [pool.apply_async(optimize_pt,args=(\n                            c,b,comp,pend,vals,copy.copy(self))) for c in cand2]\n                for res in results:\n                    cand = np.vstack((cand, res.get(1e8)))\n                pool.close()\n            else:\n                # This is old code to optimize each point in parallel.\n                for i in range(0, cand2.shape[0]):\n                    log(\"Optimizing candidate %d/%d\" %\n                        (i+1, cand2.shape[0]))\n                    #self.check_grad_ei(cand2[i,:].flatten(), comp, pend, vals)\n                    ret = spo.fmin_l_bfgs_b(self.grad_optimize_ei_over_hypers,\n                                            cand2[i,:].flatten(), args=(comp,pend,vals),\n                                            bounds=b, disp=0)\n                    cand2[i,:] = ret[0]\n                cand = np.vstack((cand, cand2))\n\n            overall_ei = self.ei_over_hypers(comp,pend,cand,vals)\n            best_cand = np.argmax(np.mean(overall_ei, axis=1))\n\n            if (best_cand >= numcand):\n                return (int(numcand), cand[best_cand,:])\n\n            return int(candidates[best_cand])\n\n        else:\n            # Optimize hyperparameters\n            self.optimize_hypers(comp, vals)\n\n            log(\"mean: %.2f  amp: %.2f  noise: %.4f  \"\n                             \"min_ls: %.4f  max_ls: %.4f\"\n                             % (self.mean, np.sqrt(self.amp2), self.noise,\n                                np.min(self.ls), np.max(self.ls)))\n\n            # Optimize over EI\n            b = []# optimization bounds\n            for i in range(0, cand.shape[1]):\n                b.append((0, 1))\n\n            for i in range(0, cand2.shape[0]):\n                ret = spo.fmin_l_bfgs_b(self.grad_optimize_ei,\n                                        cand2[i,:].flatten(), args=(comp,vals,True),\n                                        bounds=b, disp=0)\n                cand2[i,:] = ret[0]\n            cand = np.vstack((cand, cand2))\n\n            ei = self.compute_ei(comp, pend, cand, vals)\n            best_cand = np.argmax(ei)\n\n            if (best_cand >= numcand):\n                return (int(numcand), cand[best_cand,:])\n\n            return int(candidates[best_cand])\n\n    # Compute EI over hyperparameter samples\n    def ei_over_hypers(self,comp,pend,cand,vals):\n        overall_ei = np.zeros((cand.shape[0], self.mcmc_iters))\n        for mcmc_iter in range(self.mcmc_iters):\n            hyper = self.hyper_samples[mcmc_iter]\n            self.mean = hyper[0]\n            self.noise = hyper[1]\n            self.amp2 = hyper[2]\n            self.ls = hyper[3]\n            overall_ei[:,mcmc_iter] = self.compute_ei(comp, pend, cand,\n                                                      vals)\n        return overall_ei\n\n    def check_grad_ei(self, cand, comp, pend, vals):\n        (ei,dx1) = self.grad_optimize_ei_over_hypers(cand, comp, pend, vals)\n        dx2 = dx1*0\n        idx = np.zeros(cand.shape[0])\n        for i in range(0, cand.shape[0]):\n            idx[i] = 1e-6\n            (ei1,tmp) = self.grad_optimize_ei_over_hypers(cand + idx, comp, pend, vals)\n            (ei2,tmp) = self.grad_optimize_ei_over_hypers(cand - idx, comp, pend, vals)\n            dx2[i] = (ei - ei2)/(2*1e-6)\n            idx[i] = 0\n        print('computed grads', dx1)\n        print('finite diffs', dx2)\n        print(dx1/dx2)\n        print(np.sum((dx1 - dx2)**2))\n        time.sleep(2)\n\n    # Adjust points by optimizing EI over a set of hyperparameter samples\n    def grad_optimize_ei_over_hypers(self, cand, comp, pend, vals, compute_grad=True):\n        summed_ei = 0\n        summed_grad_ei = np.zeros(cand.shape).flatten()\n        ls = self.ls.copy()\n        amp2 = self.amp2\n        mean = self.mean\n        noise = self.noise\n\n        for hyper in self.hyper_samples:\n            self.mean = hyper[0]\n            self.noise = hyper[1]\n            self.amp2 = hyper[2]\n            self.ls = hyper[3]\n            if compute_grad:\n                (ei,g_ei) = self.grad_optimize_ei(cand,comp,pend,vals,compute_grad)\n                summed_grad_ei = summed_grad_ei + g_ei\n            else:\n                ei = self.grad_optimize_ei(cand,comp,pend,vals,compute_grad)\n            summed_ei += ei\n\n        self.mean = mean\n        self.amp2 = amp2\n        self.noise = noise\n        self.ls = ls.copy()\n\n        if compute_grad:\n            return (summed_ei, summed_grad_ei)\n        else:\n            return summed_ei\n\n    # Adjust points based on optimizing their ei\n    def grad_optimize_ei(self, cand, comp, pend, vals, compute_grad=True):\n        if pend.shape[0] == 0:\n            best = np.min(vals)\n            cand = np.reshape(cand, (-1, comp.shape[1]))\n\n            # The primary covariances for prediction.\n            comp_cov   = self.cov(comp)\n            cand_cross = self.cov(comp, cand)\n\n            # Compute the required Cholesky.\n            obsv_cov  = comp_cov + self.noise*np.eye(comp.shape[0])\n            obsv_chol = spla.cholesky(obsv_cov, lower=True)\n\n            cov_grad_func = getattr(gp, 'grad_' + self.cov_func.__name__)\n            cand_cross_grad = cov_grad_func(self.ls, comp, cand)\n\n            # Predictive things.\n            # Solve the linear systems.\n            alpha  = spla.cho_solve((obsv_chol, True), vals - self.mean)\n            beta   = spla.solve_triangular(obsv_chol, cand_cross, lower=True)\n\n            # Predict the marginal means and variances at candidates.\n            func_m = np.dot(cand_cross.T, alpha) + self.mean\n            func_v = self.amp2*(1+1e-6) - np.sum(beta**2, axis=0)\n\n            # Expected improvement\n            func_s = np.sqrt(func_v)\n            u      = (best - func_m) / func_s\n            ncdf   = sps.norm.cdf(u)\n            npdf   = sps.norm.pdf(u)\n            ei     = func_s*( u*ncdf + npdf)\n\n            if not compute_grad:\n                return ei\n\n            # Gradients of ei w.r.t. mean and variance\n            g_ei_m = -ncdf\n            g_ei_s2 = 0.5*npdf / func_s\n\n            # Apply covariance function\n            grad_cross = np.squeeze(cand_cross_grad)\n\n            grad_xp_m = np.dot(alpha.transpose(),grad_cross)\n            grad_xp_v = np.dot(-2*spla.cho_solve(\n                    (obsv_chol, True),cand_cross).transpose(), grad_cross)\n\n            grad_xp = 0.5*self.amp2*(grad_xp_m*g_ei_m + grad_xp_v*g_ei_s2)\n            ei = -np.sum(ei)\n\n            return ei, grad_xp.flatten()\n\n        else:\n            # If there are pending experiments, fantasize their outcomes.\n            cand = np.reshape(cand, (-1, comp.shape[1]))\n\n            # Create a composite vector of complete and pending.\n            comp_pend = np.concatenate((comp, pend))\n\n            # Compute the covariance and Cholesky decomposition.\n            comp_pend_cov  = (self.cov(comp_pend) +\n                              self.noise*np.eye(comp_pend.shape[0]))\n            comp_pend_chol = spla.cholesky(comp_pend_cov, lower=True)\n\n            # Compute submatrices.\n            pend_cross = self.cov(comp, pend)\n            pend_kappa = self.cov(pend)\n\n            # Use the sub-Cholesky.\n            obsv_chol = comp_pend_chol[:comp.shape[0],:comp.shape[0]]\n\n            # Solve the linear systems.\n            alpha  = spla.cho_solve((obsv_chol, True), vals - self.mean)\n            beta   = spla.cho_solve((obsv_chol, True), pend_cross)\n\n            # Finding predictive means and variances.\n            pend_m = np.dot(pend_cross.T, alpha) + self.mean\n            pend_K = pend_kappa - np.dot(pend_cross.T, beta)\n\n            # Take the Cholesky of the predictive covariance.\n            pend_chol = spla.cholesky(pend_K, lower=True)\n\n            # Make predictions.\n            npr.set_state(self.randomstate)\n            pend_fant = np.dot(pend_chol, npr.randn(pend.shape[0],self.pending_samples)) + pend_m[:,None]\n\n            # Include the fantasies.\n            fant_vals = np.concatenate(\n                (np.tile(vals[:,np.newaxis],\n                         (1,self.pending_samples)), pend_fant))\n\n            # Compute bests over the fantasies.\n            bests = np.min(fant_vals, axis=0)\n\n            # Now generalize from these fantasies.\n            cand_cross = self.cov(comp_pend, cand)\n            cov_grad_func = getattr(gp, 'grad_' + self.cov_func.__name__)\n            cand_cross_grad = cov_grad_func(self.ls, comp_pend, cand)\n\n            # Solve the linear systems.\n            alpha  = spla.cho_solve((comp_pend_chol, True),\n                                    fant_vals - self.mean)\n            beta   = spla.solve_triangular(comp_pend_chol, cand_cross,\n                                           lower=True)\n\n            # Predict the marginal means and variances at candidates.\n            func_m = np.dot(cand_cross.T, alpha) + self.mean\n            func_v = self.amp2*(1+1e-6) - np.sum(beta**2, axis=0)\n\n            # Expected improvement\n            func_s = np.sqrt(func_v[:,np.newaxis])\n            u      = (bests[np.newaxis,:] - func_m) / func_s\n            ncdf   = sps.norm.cdf(u)\n            npdf   = sps.norm.pdf(u)\n            ei     = func_s*( u*ncdf + npdf)\n\n            # Gradients of ei w.r.t. mean and variance\n            g_ei_m = -ncdf\n            g_ei_s2 = 0.5*npdf / func_s\n\n            # Apply covariance function\n            # Squeeze can break the 1D case be careful\n            if pend.shape[1] == 1:\n                grad_cross = np.squeeze(cand_cross_grad, axis=(2,))\n            else:\n                grad_cross = np.squeeze(cand_cross_grad)\n\n            grad_xp_m = np.dot(alpha.transpose(),grad_cross)\n            grad_xp_v = np.dot(-2*spla.cho_solve(\n                    (comp_pend_chol, True),cand_cross).transpose(), grad_cross)\n\n            grad_xp = 0.5*self.amp2*(grad_xp_m*np.tile(g_ei_m,(comp.shape[1],1)).T + (grad_xp_v.T*g_ei_s2).T)\n            ei = -np.mean(ei, axis=1)\n            grad_xp = np.mean(grad_xp,axis=0)\n\n            return ei, grad_xp.flatten()\n\n    def compute_ei(self, comp, pend, cand, vals):\n        if pend.shape[0] == 0:\n            # If there are no pending, don't do anything fancy.\n\n            # Current best.\n            best = np.min(vals)\n\n            # The primary covariances for prediction.\n            comp_cov   = self.cov(comp)\n            cand_cross = self.cov(comp, cand)\n\n            # Compute the required Cholesky.\n            obsv_cov  = comp_cov + self.noise*np.eye(comp.shape[0])\n            obsv_chol = spla.cholesky( obsv_cov, lower=True )\n\n            # Solve the linear systems.\n            alpha  = spla.cho_solve((obsv_chol, True), vals - self.mean)\n            beta   = spla.solve_triangular(obsv_chol, cand_cross, lower=True)\n\n            # Predict the marginal means and variances at candidates.\n            func_m = np.dot(cand_cross.T, alpha) + self.mean\n            func_v = self.amp2*(1+1e-6) - np.sum(beta**2, axis=0)\n\n            # Expected improvement\n            func_s = np.sqrt(func_v)\n            u      = (best - func_m) / func_s\n            ncdf   = sps.norm.cdf(u)\n            npdf   = sps.norm.pdf(u)\n            ei     = func_s*( u*ncdf + npdf)\n\n            return ei\n        else:\n            # If there are pending experiments, fantasize their outcomes.\n\n            # Create a composite vector of complete and pending.\n            comp_pend = np.concatenate((comp, pend))\n\n            # Compute the covariance and Cholesky decomposition.\n            comp_pend_cov  = (self.cov(comp_pend) +\n                              self.noise*np.eye(comp_pend.shape[0]))\n            comp_pend_chol = spla.cholesky(comp_pend_cov, lower=True)\n\n            # Compute submatrices.\n            pend_cross = self.cov(comp, pend)\n            pend_kappa = self.cov(pend)\n\n            # Use the sub-Cholesky.\n            obsv_chol = comp_pend_chol[:comp.shape[0],:comp.shape[0]]\n\n            # Solve the linear systems.\n            alpha  = spla.cho_solve((obsv_chol, True), vals - self.mean)\n            beta   = spla.cho_solve((obsv_chol, True), pend_cross)\n\n            # Finding predictive means and variances.\n            pend_m = np.dot(pend_cross.T, alpha) + self.mean\n            pend_K = pend_kappa - np.dot(pend_cross.T, beta)\n\n            # Take the Cholesky of the predictive covariance.\n            pend_chol = spla.cholesky(pend_K, lower=True)\n\n            # Make predictions.\n            npr.set_state(self.randomstate)\n            pend_fant = np.dot(pend_chol, npr.randn(pend.shape[0],self.pending_samples)) + pend_m[:,None]\n\n            # Include the fantasies.\n            fant_vals = np.concatenate(\n                (np.tile(vals[:,np.newaxis],\n                         (1,self.pending_samples)), pend_fant))\n\n            # Compute bests over the fantasies.\n            bests = np.min(fant_vals, axis=0)\n\n            # Now generalize from these fantasies.\n            cand_cross = self.cov(comp_pend, cand)\n\n            # Solve the linear systems.\n            alpha  = spla.cho_solve((comp_pend_chol, True),\n                                    fant_vals - self.mean)\n            beta   = spla.solve_triangular(comp_pend_chol, cand_cross,\n                                           lower=True)\n\n            # Predict the marginal means and variances at candidates.\n            func_m = np.dot(cand_cross.T, alpha) + self.mean\n            func_v = self.amp2*(1+1e-6) - np.sum(beta**2, axis=0)\n\n            # Expected improvement\n            func_s = np.sqrt(func_v[:,np.newaxis])\n            u      = (bests[np.newaxis,:] - func_m) / func_s\n            ncdf   = sps.norm.cdf(u)\n            npdf   = sps.norm.pdf(u)\n            ei     = func_s*( u*ncdf + npdf)\n\n            return np.mean(ei, axis=1)\n\n    def sample_hypers(self, comp, vals):\n        if self.noiseless:\n            self.noise = 1e-3\n            self._sample_noiseless(comp, vals)\n        else:\n            self._sample_noisy(comp, vals)\n        self._sample_ls(comp, vals)\n        self.hyper_samples.append((self.mean, self.noise, self.amp2, self.ls))\n\n    def _sample_ls(self, comp, vals):\n        def logprob(ls):\n            if np.any(ls < 0) or np.any(ls > self.max_ls):\n                return -np.inf\n\n            cov   = (self.amp2 * (self.cov_func(ls, comp, None) +\n                1e-6*np.eye(comp.shape[0])) + self.noise*np.eye(comp.shape[0]))\n            chol  = spla.cholesky(cov, lower=True)\n            solve = spla.cho_solve((chol, True), vals - self.mean)\n            lp    = (-np.sum(np.log(np.diag(chol))) -\n                      0.5*np.dot(vals-self.mean, solve))\n            return lp\n\n        self.ls = util.slice_sample(self.ls, logprob, compwise=True)\n\n    def _sample_noisy(self, comp, vals):\n        def logprob(hypers):\n            mean  = hypers[0]\n            amp2  = hypers[1]\n            noise = hypers[2]\n\n            # This is pretty hacky, but keeps things sane.\n            if mean > np.max(vals) or mean < np.min(vals):\n                return -np.inf\n\n            if amp2 < 0 or noise < 0:\n                return -np.inf\n\n            cov   = (amp2 * (self.cov_func(self.ls, comp, None) +\n                1e-6*np.eye(comp.shape[0])) + noise*np.eye(comp.shape[0]))\n            chol  = spla.cholesky(cov, lower=True)\n            solve = spla.cho_solve((chol, True), vals - mean)\n            lp    = -np.sum(np.log(np.diag(chol)))-0.5*np.dot(vals-mean, solve)\n\n            # Roll in noise horseshoe prior.\n            lp += np.log(np.log(1 + (self.noise_scale/noise)**2))\n\n            # Roll in amplitude lognormal prior\n            lp -= 0.5*(np.log(np.sqrt(amp2))/self.amp2_scale)**2\n\n            return lp\n\n        hypers = util.slice_sample(np.array(\n                [self.mean, self.amp2, self.noise]), logprob, compwise=False)\n        self.mean  = hypers[0]\n        self.amp2  = hypers[1]\n        self.noise = hypers[2]\n\n    def _sample_noiseless(self, comp, vals):\n        def logprob(hypers):\n            mean  = hypers[0]\n            amp2  = hypers[1]\n            noise = 1e-3\n\n            # This is pretty hacky, but keeps things sane.\n            if mean > np.max(vals) or mean < np.min(vals):\n                return -np.inf\n\n            if amp2 < 0:\n                return -np.inf\n\n            cov   = (amp2 * (self.cov_func(self.ls, comp, None) +\n                1e-6*np.eye(comp.shape[0])) + noise*np.eye(comp.shape[0]))\n            chol  = spla.cholesky(cov, lower=True)\n            solve = spla.cho_solve((chol, True), vals - mean)\n            lp    = -np.sum(np.log(np.diag(chol)))-0.5*np.dot(vals-mean, solve)\n\n            # Roll in amplitude lognormal prior\n            lp -= 0.5*(np.log(np.sqrt(amp2))/self.amp2_scale)**2\n\n            return lp\n\n        hypers = util.slice_sample(np.array(\n                [self.mean, self.amp2, self.noise]), logprob, compwise=False)\n        self.mean  = hypers[0]\n        self.amp2  = hypers[1]\n        self.noise = 1e-3\n\n    def optimize_hypers(self, comp, vals):\n        mygp = gp.GP(self.cov_func.__name__)\n        mygp.real_init(comp.shape[1], vals)\n        mygp.optimize_hypers(comp,vals)\n        self.mean = mygp.mean\n        self.ls = mygp.ls\n        self.amp2 = mygp.amp2\n        self.noise = mygp.noise\n\n        # Save hyperparameter samples\n        self.hyper_samples.append((self.mean, self.noise, self.amp2, self.ls))\n        self.dump_hypers()\n\n        return\n"
  },
  {
    "path": "src/aup/Proposer/spearmint/chooser/GPEIperSecChooser.py",
    "content": "##\n# Copyright (C) 2012 Jasper Snoek, Hugo Larochelle and Ryan P. Adams\n#\n# This code is written for research and educational purposes only to\n# supplement the paper entitled\n# \"Practical Bayesian Optimization of Machine Learning Algorithms\"\n# by Snoek, Larochelle and Adams\n# Advances in Neural Information Processing Systems, 2012\n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation, either version 3 of the License, or\n# (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with this program.  If not, see <http://www.gnu.org/licenses/>.\nimport os\nfrom .. import gp\nimport sys\nfrom .. import util\nimport tempfile\nimport numpy          as np\nimport numpy.random   as npr\nimport scipy.linalg   as spla\nimport scipy.stats    as sps\nimport scipy.optimize as spo\nimport pickle\n\nfrom ..helpers import *\nfrom ..Locker  import *\n\nimport logging\nlogger = logging.getLogger(__name__)\nlog = logger.debug\n\ndef init(expt_dir, arg_string):\n    args = util.unpack_args(arg_string)\n    return GPEIperSecChooser(expt_dir, **args)\n\n\"\"\"\nChooser module for the Gaussian process expected improvement per\nsecond (EI) acquisition function.  Candidates are sampled densely in the unit\nhypercube and then a subset of the most promising points are optimized to maximize\nEI per second over hyperparameter samples.  Slice sampling is used to sample\nGaussian process hyperparameters for two GPs, one over the objective function and\nthe other over the running time of the algorithm.\n\"\"\"\nclass GPEIperSecChooser:\n\n    def __init__(self, expt_dir, covar=\"Matern52\", mcmc_iters=10,\n                 pending_samples=100, noiseless=False, burnin=100,\n                 grid_subset=20):\n        self.cov_func        = getattr(gp, covar)\n        self.locker          = Locker()\n        self.state_pkl       = os.path.join(expt_dir, self.__module__ + \".pkl\")\n\n        self.stats_file      = os.path.join(expt_dir,\n                                   self.__module__ + \"_hyperparameters.txt\")\n        self.mcmc_iters      = int(mcmc_iters)\n        self.burnin          = int(burnin)\n        self.needs_burnin    = True\n        self.pending_samples = pending_samples\n        self.D               = -1\n        self.hyper_iters     = 1\n        # Number of points to optimize EI over\n        self.grid_subset     = int(grid_subset)\n        self.noiseless       = bool(int(noiseless))\n        self.hyper_samples = []\n        self.time_hyper_samples = []\n\n        self.noise_scale = 0.1  # horseshoe prior\n        self.amp2_scale  = 1    # zero-mean log normal prior\n        self.max_ls      = 10    # top-hat prior on length scales\n\n        self.time_noise_scale = 0.1  # horseshoe prior\n        self.time_amp2_scale  = 1    # zero-mean log normal prior\n        self.time_max_ls      = 10   # top-hat prior on length scales\n\n        self.ls = None\n        self.amp2 = None\n        self.noise = None\n        self.mean = None\n        self.time_ls = None\n        self.time_amp2 = None\n        self.time_mean = None\n        self.time_noise = None\n\n\n    # A simple function to dump out hyperparameters to allow for a hot start\n    # if the optimization is restarted.\n    def dump_hypers(self):\n        self.locker.lock_wait(self.state_pkl)\n\n        # Write the hyperparameters out to a Pickle.\n        fh = tempfile.NamedTemporaryFile(mode='wb', delete=False)\n        pickle.dump({ 'dims'        : self.D,\n                       'ls'          : self.ls,\n                       'amp2'        : self.amp2,\n                       'noise'       : self.noise,\n                       'mean'        : self.mean,\n                       'time_ls'     : self.time_ls,\n                       'time_amp2'   : self.time_amp2,\n                       'time_noise'  : self.time_noise,\n                       'time_mean'   : self.time_mean },\n                     fh)\n        fh.close()\n\n        # Use an atomic move for better NFS happiness.\n        cmd = 'mv \"%s\" \"%s\"' % (fh.name, self.state_pkl)\n        os.system(cmd) # TODO: Should check system-dependent return status.\n\n        self.locker.unlock(self.state_pkl)\n\n    def _real_init(self, dims, values, durations):\n        self.locker.lock_wait(self.state_pkl)\n\n        if os.path.exists(self.state_pkl):\n            fh    = open(self.state_pkl, 'rb')\n            state = pickle.load(fh)\n            fh.close()\n\n            self.D          = state['dims']\n            self.ls         = state['ls']\n            self.amp2       = state['amp2']\n            self.noise      = state['noise']\n            self.mean       = state['mean']\n            self.time_ls    = state['time_ls']\n            self.time_amp2  = state['time_amp2']\n            self.time_noise = state['time_noise']\n            self.time_mean  = state['time_mean']\n        else:\n\n            # Input dimensionality.\n            self.D = dims\n\n            # Initial length scales.\n            self.ls = np.ones(self.D)\n            self.time_ls = np.ones(self.D)\n\n            # Initial amplitude.\n            self.amp2 = np.std(values)+1e-4\n            self.time_amp2 = np.std(durations)+1e-4\n\n            # Initial observation noise.\n            self.noise = 1e-3\n            self.time_noise = 1e-3\n\n            # Initial mean.\n            self.mean = np.mean(values)\n            self.time_mean = np.mean(np.log(durations))\n\n        self.locker.unlock(self.state_pkl)\n\n    def cov(self, amp2, ls, x1, x2=None):\n        if x2 is None:\n            return amp2 * (self.cov_func(ls, x1, None)\n                           + 1e-6*np.eye(x1.shape[0]))\n        else:\n            return amp2 * self.cov_func(ls, x1, x2)\n\n    # Given a set of completed 'experiments' in the unit hypercube with\n    # corresponding objective 'values', pick from the next experiment to\n    # run according to the acquisition function.\n    def next(self, grid, values, durations,\n             candidates, pending, complete):\n\n        # Don't bother using fancy GP stuff at first.\n        if complete.shape[0] < 2:\n            return int(candidates[0])\n\n        # Perform the real initialization.\n        if self.D == -1:\n            self._real_init(grid.shape[1], values[complete],\n                            durations[complete])\n\n        # Grab out the relevant sets.\n        comp = grid[complete,:]\n        cand = grid[candidates,:]\n        pend = grid[pending,:]\n        vals = values[complete]\n        durs = durations[complete]\n\n        # Bring time into the log domain before we do anything\n        # to maintain strict positivity\n        durs = np.log(durs)\n\n        # Spray a set of candidates around the min so far\n        numcand = cand.shape[0]\n        best_comp = np.argmin(vals)\n        cand2 = np.vstack((np.random.randn(10,comp.shape[1])*0.001 +\n                           comp[best_comp,:], cand))\n\n        if self.mcmc_iters > 0:\n\n            # Possibly burn in.\n            if self.needs_burnin:\n                for mcmc_iter in range(self.burnin):\n                    self.sample_hypers(comp, vals, durs)\n                    log(\"BURN %d/%d] mean: %.2f  amp: %.2f \"\n                                     \"noise: %.4f  min_ls: %.4f  max_ls: %.4f\"\n                                     % (mcmc_iter+1, self.burnin, self.mean,\n                                        np.sqrt(self.amp2), self.noise,\n                                        np.min(self.ls), np.max(self.ls)))\n                self.needs_burnin = False\n\n            # Sample from hyperparameters.\n            # Adjust the candidates to hit ei/sec peaks\n            self.hyper_samples = []\n            for mcmc_iter in range(self.mcmc_iters):\n                self.sample_hypers(comp, vals, durs)\n                log(\"%d/%d] mean: %.2f  amp: %.2f  noise: %.4f \"\n                                 \"min_ls: %.4f  max_ls: %.4f\"\n                                 % (mcmc_iter+1, self.mcmc_iters, self.mean,\n                                    np.sqrt(self.amp2), self.noise,\n                                    np.min(self.ls), np.max(self.ls)))\n\n                log(\"%d/%d] time_mean: %.2fs time_amp: %.2f  time_noise: %.4f \"\n                                 \"time_min_ls: %.4f  time_max_ls: %.4f\"\n                                 % (mcmc_iter+1, self.mcmc_iters, np.exp(self.time_mean),\n                                    np.sqrt(self.time_amp2), np.exp(self.time_noise),\n                                    np.min(self.time_ls), np.max(self.time_ls)))\n            self.dump_hypers()\n\n            # Pick the top candidates to optimize over\n            overall_ei = self.ei_over_hypers(comp,pend,cand2,vals,durs)\n            inds = np.argsort(np.mean(overall_ei, axis=1))[-self.grid_subset:]\n            cand2 = cand2[inds,:]\n\n            # Adjust the candidates to hit ei peaks\n            b = []# optimization bounds\n            for i in range(0, cand.shape[1]):\n                b.append((0, 1))\n\n            for i in range(0, cand2.shape[0]):\n                log(\"Optimizing candidate %d/%d\" %\n                                 (i+1, cand2.shape[0]))\n                ret = spo.fmin_l_bfgs_b(self.grad_optimize_ei_over_hypers,\n                                        cand2[i,:].flatten(),\n                                        args=(comp,vals,durs,True),\n                                        bounds=b, disp=0)\n                cand2[i,:] = ret[0]\n\n            cand = np.vstack((cand, cand2))\n\n            overall_ei = self.ei_over_hypers(comp,pend,cand,vals,durs)\n            best_cand = np.argmax(np.mean(overall_ei, axis=1))\n            self.dump_hypers()\n            if (best_cand >= numcand):\n                return (int(numcand), cand[best_cand,:])\n\n            return int(candidates[best_cand])\n\n        else:\n            # Optimize hyperparameters\n            self.optimize_hypers(comp, vals, durs)\n\n            log(\"mean: %f  amp: %f  noise: %f \"\n                             \"min_ls: %f  max_ls: %f\"\n                             % (self.mean, np.sqrt(self.amp2),\n                                self.noise, np.min(self.ls), np.max(self.ls)))\n\n            # Pick the top candidates to optimize over\n            ei = self.compute_ei_per_s(comp, pend, cand2, vals, durs)\n            inds = np.argsort(np.mean(overall_ei, axis=1))[-self.grid_subset:]\n            cand2 = cand2[inds,:]\n\n            # Adjust the candidates to hit ei peaks\n            b = []# optimization bounds\n            for i in range(0, cand.shape[1]):\n                b.append((0, 1))\n\n            for i in range(0, cand2.shape[0]):\n                log(\"Optimizing candidate %d/%d\" %\n                                 (i+1, cand2.shape[0]))\n                ret = spo.fmin_l_bfgs_b(self.grad_optimize_ei,\n                                        cand2[i,:].flatten(),\n                                        args=(comp,vals,durs,True),\n                                        bounds=b, disp=0)\n                cand2[i,:] = ret[0]\n\n            cand = np.vstack((cand, cand2))\n            ei = self.compute_ei_per_s(comp, pend, cand, vals, durs)\n\n            best_cand = np.argmax(ei)\n            self.dump_hypers()\n\n            if (best_cand >= numcand):\n                return (int(numcand), cand[best_cand,:])\n\n            return int(candidates[best_cand])\n\n    # Compute EI over hyperparameter samples\n    def ei_over_hypers(self,comp,pend,cand,vals,durs):\n        overall_ei = np.zeros((cand.shape[0], self.mcmc_iters))\n        for mcmc_iter in range(self.mcmc_iters):\n            hyper = self.hyper_samples[mcmc_iter]\n            time_hyper = self.time_hyper_samples[mcmc_iter]\n            self.mean = hyper[0]\n            self.noise = hyper[1]\n            self.amp2 = hyper[2]\n            self.ls = hyper[3]\n\n            self.time_mean = time_hyper[0]\n            self.time_noise = time_hyper[1]\n            self.time_amp2 = time_hyper[2]\n            self.time_ls = time_hyper[3]\n\n            overall_ei[:,mcmc_iter] = self.compute_ei_per_s(comp, pend, cand,\n                                                            vals, durs.squeeze())\n\n            return overall_ei\n\n    def check_grad_ei_per(self, cand, comp, vals, durs):\n        (ei,dx1) = self.grad_optimize_ei_over_hypers(cand, comp, vals, durs)\n        dx2 = dx1*0\n        idx = np.zeros(cand.shape[0])\n        for i in range(0, cand.shape[0]):\n            idx[i] = 1e-6\n            (ei1,tmp) = self.grad_optimize_ei_over_hypers(cand + idx, comp, vals, durs)\n            (ei2,tmp) = self.grad_optimize_ei_over_hypers(cand - idx, comp, vals, durs)\n            dx2[i] = (ei - ei2)/(2*1e-6)\n            idx[i] = 0\n        log('computed grads %s'%dx1)\n        log('finite diffs %s'% dx2)\n        log(dx1/dx2)\n        log(np.sum((dx1 - dx2)**2))\n        time.sleep(2)\n\n    # Adjust points by optimizing EI over a set of hyperparameter samples\n    def grad_optimize_ei_over_hypers(self, cand, comp, vals, durs, compute_grad=True):\n        summed_ei = 0\n        summed_grad_ei = np.zeros(cand.shape).flatten()\n\n        for mcmc_iter in range(self.mcmc_iters):\n            hyper = self.hyper_samples[mcmc_iter]\n            time_hyper = self.time_hyper_samples[mcmc_iter]\n            self.mean = hyper[0]\n            self.noise = hyper[1]\n            self.amp2 = hyper[2]\n            self.ls = hyper[3]\n\n            self.time_mean = time_hyper[0]\n            self.time_noise = time_hyper[1]\n            self.time_amp2 = time_hyper[2]\n            self.time_ls = time_hyper[3]\n\n            if compute_grad:\n                (ei,g_ei) = self.grad_optimize_ei(cand,comp,vals,durs,compute_grad)\n                summed_grad_ei = summed_grad_ei + g_ei\n            else:\n                ei = self.grad_optimize_ei(cand,comp,vals,durs,compute_grad)\n\n            summed_ei += ei\n\n        if compute_grad:\n            return (summed_ei, summed_grad_ei)\n        else:\n            return summed_ei\n\n    def grad_optimize_ei(self, cand, comp, vals, durs, compute_grad=True):\n        # Here we have to compute the gradients for ei per second\n        # This means deriving through the two kernels, the one for predicting\n        # time and the one predicting ei\n        best = np.min(vals)\n        cand = np.reshape(cand, (-1, comp.shape[1]))\n\n        # First we make predictions for the durations\n        # Compute covariances\n        comp_time_cov   = self.cov(self.time_amp2, self.time_ls, comp)\n        cand_time_cross = self.cov(self.time_amp2, self.time_ls,comp,cand)\n\n        # Cholesky decompositions\n        obsv_time_cov  = comp_time_cov + self.time_noise*np.eye(comp.shape[0])\n        obsv_time_chol = spla.cholesky( obsv_time_cov, lower=True )\n\n        # Linear systems\n        t_alpha  = spla.cho_solve((obsv_time_chol, True), durs - self.time_mean)\n\n        # Predict marginal mean times and (possibly) variances\n        func_time_m = np.dot(cand_time_cross.T, t_alpha) + self.time_mean\n\n        # We don't really need the time variances now\n        #func_time_v = self.time_amp2*(1+1e-6) - np.sum(t_beta**2, axis=0)\n\n        # Bring time out of the log domain\n        func_time_m = np.exp(func_time_m)\n\n        # Compute derivative of cross-distances.\n        grad_cross_r = gp.grad_dist2(self.time_ls, comp, cand)\n\n        # Apply covariance function\n        cov_grad_func = getattr(gp, 'grad_' + self.cov_func.__name__)\n        cand_cross_grad = cov_grad_func(self.time_ls, comp, cand)\n        grad_cross_t = np.squeeze(cand_cross_grad)\n\n        # Now compute the gradients w.r.t. ei\n        # The primary covariances for prediction.\n        comp_cov   = self.cov(self.amp2, self.ls, comp)\n        cand_cross = self.cov(self.amp2, self.ls, comp, cand)\n\n        # Compute the required Cholesky.\n        obsv_cov  = comp_cov + self.noise*np.eye(comp.shape[0])\n        obsv_chol = spla.cholesky( obsv_cov, lower=True )\n\n        cand_cross_grad = cov_grad_func(self.ls, comp, cand)\n\n        # Predictive things.\n        # Solve the linear systems.\n        alpha  = spla.cho_solve((obsv_chol, True), vals - self.mean)\n        beta   = spla.solve_triangular(obsv_chol, cand_cross, lower=True)\n\n        # Predict the marginal means and variances at candidates.\n        func_m = np.dot(cand_cross.T, alpha) + self.mean\n        func_v = self.amp2*(1+1e-6) - np.sum(beta**2, axis=0)\n\n        # Expected improvement\n        func_s = np.sqrt(func_v)\n        u      = (best - func_m) / func_s\n        ncdf   = sps.norm.cdf(u)\n        npdf   = sps.norm.pdf(u)\n        ei     = func_s*(u*ncdf + npdf)\n\n        ei_per_s = -np.sum(ei/func_time_m)\n        if not compute_grad:\n            return ei\n\n        grad_time_xp_m = np.dot(t_alpha.transpose(),grad_cross_t)\n\n        # Gradients of ei w.r.t. mean and variance\n        g_ei_m = -ncdf\n        g_ei_s2 = 0.5*npdf / func_s\n\n        # Apply covariance function\n        grad_cross = np.squeeze(cand_cross_grad)\n\n        grad_xp_m = np.dot(alpha.transpose(),grad_cross)\n        grad_xp_v = np.dot(-2*spla.cho_solve((obsv_chol, True),\n                                             cand_cross).transpose(),grad_cross)\n\n        grad_xp = 0.5*self.amp2*(grad_xp_m*g_ei_m + grad_xp_v*g_ei_s2)\n        grad_time_xp_m = 0.5*self.time_amp2*grad_time_xp_m*func_time_m\n        grad_xp = (func_time_m*grad_xp - ei*grad_time_xp_m)/(func_time_m**2)\n\n        return ei_per_s, grad_xp.flatten()\n\n    def compute_ei_per_s(self, comp, pend, cand, vals, durs):\n        # First we make predictions for the durations as that\n        # doesn't depend on pending experiments\n\n        # Compute covariances\n        comp_time_cov   = self.cov(self.time_amp2, self.time_ls, comp)\n        cand_time_cross = self.cov(self.time_amp2, self.time_ls,comp,cand)\n\n        # Cholesky decompositions\n        obsv_time_cov  = comp_time_cov + self.time_noise*np.eye(comp.shape[0])\n        obsv_time_chol = spla.cholesky( obsv_time_cov, lower=True )\n\n        # Linear systems\n        t_alpha  = spla.cho_solve((obsv_time_chol, True), durs - self.time_mean)\n        #t_beta   = spla.solve_triangular(obsv_time_chol, cand_time_cross, lower=True)\n\n        # Predict marginal mean times and (possibly) variances\n        func_time_m = np.dot(cand_time_cross.T, t_alpha) + self.time_mean\n        # We don't really need the time variances now\n        #func_time_v = self.time_amp2*(1+1e-6) - np.sum(t_beta**2, axis=0)\n\n        # Bring time out of the log domain\n        func_time_m = np.exp(func_time_m)\n\n        if pend.shape[0] == 0:\n            # If there are no pending, don't do anything fancy.\n\n            # Current best.\n            best = np.min(vals)\n\n            # The primary covariances for prediction.\n            comp_cov   = self.cov(self.amp2, self.ls, comp)\n            cand_cross = self.cov(self.amp2, self.ls, comp, cand)\n\n            # Compute the required Cholesky.\n            obsv_cov  = comp_cov + self.noise*np.eye(comp.shape[0])\n            obsv_chol = spla.cholesky( obsv_cov, lower=True )\n\n            # Solve the linear systems.\n            alpha  = spla.cho_solve((obsv_chol, True), vals - self.mean)\n            beta   = spla.solve_triangular(obsv_chol, cand_cross, lower=True)\n\n            # Predict the marginal means and variances at candidates.\n            func_m = np.dot(cand_cross.T, alpha) + self.mean\n            func_v = self.amp2*(1+1e-6) - np.sum(beta**2, axis=0)\n\n            # Expected improvement\n            func_s = np.sqrt(func_v)\n            u      = (best - func_m) / func_s\n            ncdf   = sps.norm.cdf(u)\n            npdf   = sps.norm.pdf(u)\n            ei     = func_s*( u*ncdf + npdf)\n\n            ei_per_s = ei/func_time_m\n            return ei_per_s\n        else:\n            # If there are pending experiments, fantasize their outcomes.\n\n            # Create a composite vector of complete and pending.\n            comp_pend = np.concatenate((comp, pend))\n\n            # Compute the covariance and Cholesky decomposition.\n            comp_pend_cov  = self.cov(self.amp2, self.ls, comp_pend) + self.noise*np.eye(comp_pend.shape[0])\n            comp_pend_chol = spla.cholesky(comp_pend_cov, lower=True)\n\n            # Compute submatrices.\n            pend_cross = self.cov(self.amp2, self.ls, comp, pend)\n            pend_kappa = self.cov(self.amp2, self.ls, pend)\n\n            # Use the sub-Cholesky.\n            obsv_chol = comp_pend_chol[:comp.shape[0],:comp.shape[0]]\n\n            # Solve the linear systems.\n            alpha  = spla.cho_solve((obsv_chol, True), vals - self.mean)\n            beta   = spla.cho_solve((obsv_chol, True), pend_cross)\n\n            # Finding predictive means and variances.\n            pend_m = np.dot(pend_cross.T, alpha) + self.mean\n            pend_K = pend_kappa - np.dot(pend_cross.T, beta)\n\n            # Take the Cholesky of the predictive covariance.\n            pend_chol = spla.cholesky(pend_K, lower=True)\n\n            # Make predictions.\n            pend_fant = np.dot(pend_chol, npr.randn(pend.shape[0],self.pending_samples)) + pend_m[:,None]\n\n            # Include the fantasies.\n            fant_vals = np.concatenate((np.tile(vals[:,np.newaxis],\n                                                (1,self.pending_samples)), pend_fant))\n\n            # Compute bests over the fantasies.\n            bests = np.min(fant_vals, axis=0)\n\n            # Now generalize from these fantasies.\n            cand_cross = self.cov(self.amp2, self.ls, comp_pend, cand)\n\n            # Solve the linear systems.\n            alpha  = spla.cho_solve((comp_pend_chol, True), fant_vals - self.mean)\n            beta   = spla.solve_triangular(comp_pend_chol, cand_cross, lower=True)\n\n            # Predict the marginal means and variances at candidates.\n            func_m = np.dot(cand_cross.T, alpha) + self.mean\n            func_v = self.amp2*(1+1e-6) - np.sum(beta**2, axis=0)\n\n            # Expected improvement\n            func_s = np.sqrt(func_v[:,np.newaxis])\n            u      = (bests[np.newaxis,:] - func_m) / func_s\n            ncdf   = sps.norm.cdf(u)\n            npdf   = sps.norm.pdf(u)\n            ei     = func_s*( u*ncdf + npdf)\n\n            return np.divide(np.mean(ei, axis=1), func_time_m)\n\n    def sample_hypers(self, comp, vals, durs):\n        if self.noiseless:\n            self.noise = 1e-3\n            self._sample_noiseless(comp, vals)\n        else:\n            self._sample_noisy(comp, vals)\n        self._sample_ls(comp, vals)\n\n        self._sample_time_noisy(comp, durs.squeeze())\n        self._sample_time_ls(comp, durs.squeeze())\n\n        self.hyper_samples.append((self.mean, self.noise, self.amp2, self.ls))\n        self.time_hyper_samples.append((self.time_mean, self.time_noise, self.time_amp2,\n                                        self.time_ls))\n\n    def _sample_ls(self, comp, vals):\n        def logprob(ls):\n            if np.any(ls < 0) or np.any(ls > self.max_ls):\n                return -np.inf\n\n            cov   = self.amp2 * (self.cov_func(ls, comp, None) + 1e-6*np.eye(comp.shape[0])) + self.noise*np.eye(comp.shape[0])\n            chol  = spla.cholesky(cov, lower=True)\n            solve = spla.cho_solve((chol, True), vals - self.mean)\n            lp    = -np.sum(np.log(np.diag(chol)))-0.5*np.dot(vals-self.mean, solve)\n            return lp\n\n        self.ls = util.slice_sample(self.ls, logprob, compwise=True)\n\n    def _sample_time_ls(self, comp, vals):\n        def logprob(ls):\n            if np.any(ls < 0) or np.any(ls > self.time_max_ls):\n                return -np.inf\n\n            cov   = self.time_amp2 * (self.cov_func(ls, comp, None) + 1e-6*np.eye(comp.shape[0])) + self.time_noise*np.eye(comp.shape[0])\n            chol  = spla.cholesky(cov, lower=True)\n            solve = spla.cho_solve((chol, True), vals - self.time_mean)\n            lp    = -np.sum(np.log(np.diag(chol)))-0.5*np.dot(vals-self.time_mean, solve)\n            return lp\n\n        self.time_ls = util.slice_sample(self.time_ls, logprob, compwise=True)\n\n    def _sample_noisy(self, comp, vals):\n        def logprob(hypers):\n            mean  = hypers[0]\n            amp2  = hypers[1]\n            noise = hypers[2]\n\n            # This is pretty hacky, but keeps things sane.\n            if mean > np.max(vals) or mean < np.min(vals):\n                return -np.inf\n\n            if amp2 < 0 or noise < 0:\n                return -np.inf\n\n            cov   = amp2 * (self.cov_func(self.ls, comp, None) + 1e-6*np.eye(comp.shape[0])) + noise*np.eye(comp.shape[0])\n            chol  = spla.cholesky(cov, lower=True)\n            solve = spla.cho_solve((chol, True), vals - mean)\n            lp    = -np.sum(np.log(np.diag(chol)))-0.5*np.dot(vals-mean, solve)\n\n            # Roll in noise horseshoe prior.\n            lp += np.log(np.log(1 + (self.noise_scale/noise)**2))\n            #lp -= 0.5*(np.log(noise)/self.noise_scale)**2\n\n            # Roll in amplitude lognormal prior\n            lp -= 0.5*(np.log(amp2)/self.amp2_scale)**2\n\n            return lp\n\n        hypers = util.slice_sample(np.array([self.mean, self.amp2, self.noise]), logprob, compwise=False)\n        self.mean  = hypers[0]\n        self.amp2  = hypers[1]\n        self.noise = hypers[2]\n\n    def _sample_time_noisy(self, comp, vals):\n        def logprob(hypers):\n            mean  = hypers[0]\n            amp2  = hypers[1]\n            noise = hypers[2]\n\n            # This is pretty hacky, but keeps things sane.\n            if mean > np.max(vals) or mean < np.min(vals):\n                return -np.inf\n\n            if amp2 < 0 or noise < 0:\n                return -np.inf\n\n            cov   = amp2 * (self.cov_func(self.time_ls, comp, None) + 1e-6*np.eye(comp.shape[0])) + noise*np.eye(comp.shape[0])\n            chol  = spla.cholesky(cov, lower=True)\n            solve = spla.cho_solve((chol, True), vals - mean)\n            lp    = -np.sum(np.log(np.diag(chol)))-0.5*np.dot(vals-mean, solve)\n\n            # Roll in noise horseshoe prior.\n            lp += np.log(np.log(1 + (self.time_noise_scale/noise)**2))\n            #lp -= 0.5*(np.log(noise)/self.time_noise_scale)**2\n\n            # Roll in amplitude lognormal prior\n            lp -= 0.5*(np.log(np.sqrt(amp2))/self.time_amp2_scale)**2\n\n            return lp\n\n        hypers = util.slice_sample(np.array([self.time_mean, self.time_amp2, self.time_noise]), logprob, compwise=False)\n        self.time_mean  = hypers[0]\n        self.time_amp2  = hypers[1]\n        self.time_noise = hypers[2]\n\n    def _sample_noiseless(self, comp, vals):\n        def logprob(hypers):\n            mean  = hypers[0]\n            amp2  = hypers[1]\n            noise = 1e-3\n\n            # This is pretty hacky, but keeps things sane.\n            if mean > np.max(vals) or mean < np.min(vals):\n                return -np.inf\n\n            if amp2 < 0:\n                return -np.inf\n\n            cov   = amp2 * (self.cov_func(self.ls, comp, None) + 1e-6*np.eye(comp.shape[0])) + noise*np.eye(comp.shape[0])\n            chol  = spla.cholesky(cov, lower=True)\n            solve = spla.cho_solve((chol, True), vals - mean)\n            lp    = -np.sum(np.log(np.diag(chol)))-0.5*np.dot(vals-mean, solve)\n\n            # Roll in amplitude lognormal prior\n            lp -= 0.5*(np.log(amp2)/self.amp2_scale)**2\n\n            return lp\n\n        hypers = util.slice_sample(np.array([self.mean, self.amp2, self.noise]), logprob, compwise=False)\n        self.mean  = hypers[0]\n        self.amp2  = hypers[1]\n        self.noise = 1e-3\n\n    def optimize_hypers(self, comp, vals, durs):\n        # First the GP to observations\n        mygp = gp.GP(self.cov_func.__name__)\n        mygp.real_init(comp.shape[1], vals)\n        mygp.optimize_hypers(comp,vals)\n        self.mean = mygp.mean\n        self.ls = mygp.ls\n        self.amp2 = mygp.amp2\n        self.noise = mygp.noise\n\n        # Now the GP to times\n        timegp = gp.GP(self.cov_func.__name__)\n        timegp.real_init(comp.shape[1], durs)\n        timegp.optimize_hypers(comp, durs)\n        self.time_mean  = timegp.mean\n        self.time_amp2  = timegp.amp2\n        self.time_noise = timegp.noise\n        self.time_ls    = timegp.ls\n\n        # Save hyperparameter samples\n        self.hyper_samples.append((self.mean, self.noise, self.amp2, self.ls))\n        self.time_hyper_samples.append((self.time_mean, self.time_noise, self.time_amp2,\n                                        self.time_ls))\n        self.dump_hypers()\n"
  },
  {
    "path": "src/aup/Proposer/spearmint/chooser/RandomChooser.py",
    "content": "##\n# Copyright (C) 2012 Jasper Snoek, Hugo Larochelle and Ryan P. Adams\n#\n# This code is written for research and educational purposes only to\n# supplement the paper entitled\n# \"Practical Bayesian Optimization of Machine Learning Algorithms\"\n# by Snoek, Larochelle and Adams\n# Advances in Neural Information Processing Systems, 2012\n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation, either version 3 of the License, or\n# (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with this program.  If not, see <http://www.gnu.org/licenses/>.\nimport numpy        as np\nimport numpy.random as npr\n\ndef init(expt_dir, arg_string):\n    return RandomChooser()\n\nclass RandomChooser:\n\n    def __init__(self):\n        pass\n\n    def next(self, grid, values, durations,\n             candidates, pending, complete):\n        return int(candidates[int(np.floor(candidates.shape[0]*npr.rand()))])\n\n"
  },
  {
    "path": "src/aup/Proposer/spearmint/chooser/RandomForestEIChooser.py",
    "content": "import numpy        as np\nimport numpy.random as npr\nimport scipy.stats  as sps\nimport sklearn.ensemble\nimport sklearn.ensemble.forest\nfrom .. import util\n\nimport logging\nlogger = logging.getLogger(__name__)\nlog = logger.debug\nfrom sklearn.externals.joblib import Parallel, delayed\n\ndef init(expt_dir, arg_string):\n    args = util.unpack_args(arg_string)\n    return RandomForestEIChooser(**args)\n\nclass RandomForestRegressorWithVariance(sklearn.ensemble.RandomForestRegressor):\n\n    def predict(self,X):\n        # Check data\n        X = np.atleast_2d(X)\n\n        all_y_hat = [ tree.predict(X) for tree in self.estimators_ ]\n\n        # Reduce\n        y_hat = sum(all_y_hat) / self.n_estimators\n        y_var = np.var(all_y_hat,axis=0,ddof=1)\n\n        return y_hat, y_var\n\nclass RandomForestEIChooser:\n\n    def __init__(self,n_trees=50,\n                 max_depth=None,\n                 min_samples_split=1,\n                 max_monkeys=7,\n                 max_features=\"auto\",\n                 n_jobs=1,\n                 random_state=None):\n        self.n_trees = float(n_trees)\n        self.max_depth = max_depth\n        self.min_samples_split = min_samples_split\n        self.max_features = max_features\n        self.n_jobs = float(n_jobs)\n        self.random_state = random_state\n        self.rf = RandomForestRegressorWithVariance(n_estimators=n_trees,\n                                                    max_depth=max_depth,\n                                                    min_samples_split=min_samples_split,\n                                                    max_features=max_features,\n                                                    n_jobs=n_jobs,\n                                                    random_state=random_state)\n\n    def next(self, grid, values, durations,\n             candidates, pending, complete):\n        # Grab out the relevant sets.\n\n        # Don't bother using fancy RF stuff at first.\n        if complete.shape[0] < 2:\n            return int(candidates[0])\n\n        # Grab out the relevant sets.\n        comp = grid[complete,:]\n        cand = grid[candidates,:]\n        pend = grid[pending,:]\n        vals = values[complete]\n\n        self.rf.fit(comp,vals)\n\n        if pend.shape[0] != 0:\n            # Generate fantasies for pending\n            func_m, func_v = self.rf.predict(pend)\n            vals_pend = func_m + np.sqrt(func_v) + npr.randn(func_m.shape[0])\n\n            # Re-fit using fantasies\n            self.rf.fit(np.vstack[comp,pend],np.hstack[vals,vals_pend])\n\n            # Predict the marginal means and variances at candidates.\n        func_m, func_v = self.rf.predict(cand)\n\n        # Current best.\n        best = np.min(vals)\n\n        # Expected improvement\n        func_s = np.sqrt(func_v) + 0.0001\n        u      = (best - func_m) / func_s\n        ncdf   = sps.norm.cdf(u)\n        npdf   = sps.norm.pdf(u)\n        ei     = func_s*( u*ncdf + npdf)\n\n        best_cand = np.argmax(ei)\n        ei.sort()\n\n        return int(candidates[best_cand])\n"
  },
  {
    "path": "src/aup/Proposer/spearmint/chooser/SequentialChooser.py",
    "content": "##\n# Copyright (C) 2012 Jasper Snoek, Hugo Larochelle and Ryan P. Adams\n# \n# This code is written for research and educational purposes only to \n# supplement the paper entitled\n# \"Practical Bayesian Optimization of Machine Learning Algorithms\"\n# by Snoek, Larochelle and Adams\n# Advances in Neural Information Processing Systems, 2012\n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation, either version 3 of the License, or\n# (at your option) any later version.\n# \n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n# \n# You should have received a copy of the GNU General Public License\n# along with this program.  If not, see <http://www.gnu.org/licenses/>.\nimport numpy as np\n\ndef init(expt_dir, arg_string):\n    return SequentialChooser()\n\nclass SequentialChooser:\n\n    def __init__(self):\n        pass\n\n    def next(self, grid, values, durations,\n             candidates, pending, complete):\n        return int(candidates[0])\n\n"
  },
  {
    "path": "src/aup/Proposer/spearmint/chooser/__init__.py",
    "content": ""
  },
  {
    "path": "src/aup/Proposer/spearmint/chooser/cma.py",
    "content": "#!/usr/bin/env python\n\"\"\"Module cma implements the CMA-ES, Covariance Matrix Adaptation Evolution\nStrategy, a stochastic optimizer for robust non-linear non-convex\nderivative-free function minimization for Python versions 2.6, 2.7, 3.x\n(for Python 2.5 class SolutionDict would need to be re-implemented, because\nit depends on collections.MutableMapping, since version 0.91.01).\n\nCMA-ES searches for a minimizer (a solution x in R**n) of an\nobjective function f (cost function), such that f(x) is\nminimal. Regarding f, only function values for candidate solutions\nneed to be available, gradients are not necessary. Even less\nrestrictive, only a passably reliable ranking of the candidate\nsolutions in each iteration is necessary, the function values\nitself do not matter. Some termination criteria however depend\non actual f-values.\n\nTwo interfaces are provided:\n\n  - function `fmin(func, x0, sigma0,...)`\n        runs a complete minimization\n        of the objective function func with CMA-ES.\n\n  - class `CMAEvolutionStrategy`\n      allows for minimization such that the\n      control of the iteration loop remains with the user.\n\n\nUsed packages:\n\n    - unavoidable: `numpy` (see `barecmaes2.py` if `numpy` is not\n      available),\n    - avoidable with small changes: `time`, `sys`\n    - optional: `matplotlib.pylab` (for `plot` etc., highly\n      recommended), `pprint` (pretty print), `pickle` (in class\n      `Sections`), `doctest`, `inspect`, `pygsl` (never by default)\n\nTesting\n-------\nThe code can be tested on a given system. Typing::\n\n    python cma.py --test\n\nor in the Python shell ``ipython -pylab``::\n\n    run cma.py --test\n\nruns ``doctest.testmod(cma)`` showing only exceptions (and not the\ntests that fail due to small differences in the output) and should\nrun without complaints in about under two minutes. On some systems,\nthe pop up windows must be closed manually to continue and finish\nthe test.\n\nInstall\n-------\nThe code can be installed by::\n\n    python cma.py --install\n\nwhich solely calls the ``setup`` function from the ``distutils.core``\npackage for installation.\n\nExample\n-------\n::\n\n    import cma\n    help(cma)  # \"this\" help message, use cma? in ipython\n    help(cma.fmin)\n    help(cma.CMAEvolutionStrategy)\n    help(cma.Options)\n    cma.Options('tol')  # display 'tolerance' termination options\n    cma.Options('verb') # display verbosity options\n    res = cma.fmin(cma.Fcts.tablet, 15 * [1], 1)\n    res[0]  # best evaluated solution\n    res[5]  # mean solution, presumably better with noise\n\n:See: `fmin()`, `Options`, `CMAEvolutionStrategy`\n\n:Author: Nikolaus Hansen, 2008-2012\n\n:License: GPL 2 and 3\n\n\"\"\"\nfrom __future__ import division  # future is >= 3.0, this code has mainly been used with 2.6 & 2.7\nfrom __future__ import with_statement  # only necessary for python 2.5 and not in heavy use\n# from __future__ import collections.MutableMapping # does not exist in future, otherwise 2.5 would work\nfrom __future__ import print_function  # for cross-checking, available from python 2.6\nimport sys\nif sys.version.startswith('3'):  # in python 3.x\n    range = range\n    raw_input = input\n\n__version__ = \"0.92.04 $Revision: 3322 $ $Date: 2012-11-22 18:05:10 +0100 (Thu, 22 Nov 2012) $\"\n#    bash: svn propset svn:keywords 'Date Revision' cma.py\n\n#\n#    This program is free software: you can redistribute it and/or modify\n#    it under the terms of the GNU General Public License as published by\n#    the Free Software Foundation, version 2 or 3.\n#\n#    This program is distributed in the hope that it will be useful,\n#    but WITHOUT ANY WARRANTY; without even the implied warranty of\n#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n#    GNU General Public License for more details.\n#\n#    You should have received a copy of the GNU General Public License\n#    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n#\n\n# for testing:\n#   pyflakes cma.py   # finds bugs by static analysis\n#   pychecker --limit 60 cma.py  # also executes, gives 60 warnings (all checked)\n#   python cma.py -t -quiet # executes implemented tests based on doctest\n\n# to create a html documentation file:\n#    pydoc -w cma  # edit the header (remove local pointers)\n#    epydoc cma.py  # comes close to javadoc but does not find the\n#                   # links of function references etc\n#    doxygen needs @package cma as first line in the module docstring\n#       some things like class attributes are not interpreted correctly\n#    sphinx: doc style of doc.python.org, could not make it work\n\n# TODO: make those options that are only used in fmin an error in init of CMA, but still Options() should\n#       work as input to CMA.\n# TODO: add a default logger in CMAEvolutionStrategy, see fmin() and optimize() first\n#        tell() should probably not add data, but optimize() should handle even an after_iteration_handler.\n# TODO: CMAEvolutionStrategy(ones(10), 1).optimize(cma.fcts.elli)  # should work like fmin\n#       one problem: the data logger is not default and seemingly cannot be attached in one line\n# TODO: check combination of boundary handling and transformation: penalty must be computed\n#       on gp.pheno(x_geno, bounds=None), but without bounds, check/remove usage of .geno everywhere\n# TODO: check whether all new solutions are put into self.sent_solutions\n# TODO: separate initialize==reset_state from __init__\n# TODO: introduce Zpos == diffC which makes the code more consistent and the active update \"exact\"\n# TODO: split tell into a variable transformation part and the \"pure\" functionality\n#       usecase: es.tell_geno(X, [func(es.pheno(x)) for x in X])\n#       genotypic repair is not part of tell_geno\n# TODO: read settable \"options\" from a (properties) file, see myproperties.py\n#\n# typical parameters in scipy.optimize: disp, xtol, ftol, maxiter, maxfun, callback=None\n#         maxfev, diag (A sequency of N positive entries that serve as\n#                 scale factors for the variables.)\n#           full_output -- non-zero to return all optional outputs.\n#   If xtol < 0.0, xtol is set to sqrt(machine_precision)\n#    'infot -- a dictionary of optional outputs with the keys:\n#                      'nfev': the number of function calls...\n#\n#    see eg fmin_powell\n# typical returns\n#        x, f, dictionary d\n#        (xopt, {fopt, gopt, Hopt, func_calls, grad_calls, warnflag}, <allvecs>)\n#\n# TODO: keep best ten solutions\n# TODO: implement constraints handling\n# TODO: option full_output -- non-zero to return all optional outputs.\n# TODO: extend function unitdoctest, or use unittest?\n# TODO: implement equal-fitness termination, covered by stagnation?\n# TODO: apply style guide: no capitalizations!?\n# TODO: check and test dispdata()\n# TODO: eigh(): thorough testing would not hurt\n#\n# TODO (later): implement readSignals from a file like properties file (to be called after tell())\n\nimport time  # not really essential\nimport collections, numpy as np # arange, cos, size, eye, inf, dot, floor, outer, zeros, linalg.eigh, sort, argsort, random, ones,...\nfrom numpy import inf, array, dot, exp, log, sqrt, sum   # to access the built-in sum fct:  __builtins__.sum or del sum removes the imported sum and recovers the shadowed\ntry:\n    import matplotlib.pylab as pylab  # also: use ipython -pylab\n    show = pylab.show\n    savefig = pylab.savefig   # we would like to be able to use cma.savefig() etc\n    closefig = pylab.close\nexcept:\n    pylab = None\n    print('  Could not import matplotlib.pylab, therefore ``cma.plot()`` etc. is not available')\n    def show():\n        pass\n\n__docformat__ = \"reStructuredText\"  # this hides some comments entirely?\n\nsys.py3kwarning = True  # TODO: out-comment from version 2.6\n\n# why not package math?\n\n# TODO: check scitools.easyviz and how big the adaptation would be\n\n# changes:\n# 12/10/25: removed useless check_points from fmin interface\n# 12/10/17: bug fix printing number of infeasible samples, moved not-in-use methods\n#           timesCroot and divCroot to the right class\n# 12/10/16 (0.92.00): various changes commit: bug bound[0] -> bounds[0], more_to_write fixed,\n#   sigma_vec introduced, restart from elitist, trace normalization, max(mu,popsize/2)\n#   is used for weight calculation.\n# 12/07/23: (bug:) BoundPenalty.update respects now genotype-phenotype transformation\n# 12/07/21: convert value True for noisehandling into 1 making the output compatible\n# 12/01/30: class Solution and more old stuff removed r3101\n# 12/01/29: class Solution is depreciated, GenoPheno and SolutionDict do the job (v0.91.00, r3100)\n# 12/01/06: CMA_eigenmethod option now takes a function (integer still works)\n# 11/09/30: flat fitness termination checks also history length\n# 11/09/30: elitist option (using method clip_or_fit_solutions)\n# 11/09/xx: method clip_or_fit_solutions for check_points option for all sorts of\n#           injected or modified solutions and even reliable adaptive encoding\n# 11/08/19: fixed: scaling and typical_x type clashes 1 vs array(1) vs ones(dim) vs dim * [1]\n# 11/07/25: fixed: fmin wrote first and last line even with verb_log==0\n#           fixed: method settableOptionsList, also renamed to versatileOptions\n#           default seed depends on time now\n# 11/07/xx (0.9.92): added: active CMA, selective mirrored sampling, noise/uncertainty handling\n#           fixed: output argument ordering in fmin, print now only used as function\n#           removed: parallel option in fmin\n# 11/07/01: another try to get rid of the memory leak by replacing self.unrepaired = self[:]\n# 11/07/01: major clean-up and reworking of abstract base classes and of the documentation,\n#           also the return value of fmin changed and attribute stop is now a method.\n# 11/04/22: bug-fix: option fixed_variables in combination with scaling\n# 11/04/21: stopdict is not a copy anymore\n# 11/04/15: option fixed_variables implemented\n# 11/03/23: bug-fix boundary update was computed even without boundaries\n# 11/03/12: bug-fix of variable annotation in plots\n# 11/02/05: work around a memory leak in numpy\n# 11/02/05: plotting routines improved\n# 10/10/17: cleaning up, now version 0.9.30\n# 10/10/17: bug-fix: return values of fmin now use phenotyp (relevant\n#           if input scaling_of_variables is given)\n# 08/10/01: option evalparallel introduced,\n#           bug-fix for scaling being a vector\n# 08/09/26: option CMAseparable becomes CMA_diagonal\n# 08/10/18: some names change, test functions go into a class\n# 08/10/24: more refactorizing\n# 10/03/09: upper bound exp(min(1,...)) for step-size control\n\n\n# TODO: this would define the visible interface\n# __all__ = ['fmin', 'CMAEvolutionStrategy', 'plot', ...]\n#\n\n\n# emptysets = ('', (), [], {}) # array([]) does not work but also np.size(.) == 0\n# \"x in emptysets\" cannot be well replaced by \"not x\"\n# which is also True for array([]) and None, but also for 0 and False, and False for NaN\n\nuse_sent_solutions = True  # 5-30% CPU slower, particularly for large lambda, will be mandatory soon\n\n#____________________________________________________________\n#____________________________________________________________\n#\ndef unitdoctest():\n    \"\"\"is used to describe test cases and might in future become helpful\n    as an experimental tutorial as well. The main testing feature at the\n    moment is by doctest with ``cma._test()`` or conveniently by\n    ``python cma.py --test``. With the ``--verbose`` option added, the\n    results will always slightly differ and many \"failed\" test cases\n    might be reported.\n\n    A simple first overall test:\n        >>> import cma\n        >>> res = cma.fmin(cma.fcts.elli, 3*[1], 1, CMA_diagonal=2, seed=1, verb_time=0)\n        (3_w,7)-CMA-ES (mu_w=2.3,w_1=58%) in dimension 3 (seed=1)\n           Covariance matrix is diagonal for 2 iterations (1/ccov=7.0)\n        Iterat #Fevals   function value     axis ratio  sigma   minstd maxstd min:sec\n            1       7 1.453161670768570e+04 1.2e+00 1.08e+00  1e+00  1e+00\n            2      14 3.281197961927601e+04 1.3e+00 1.22e+00  1e+00  2e+00\n            3      21 1.082851071704020e+04 1.3e+00 1.24e+00  1e+00  2e+00\n          100     700 8.544042012075362e+00 1.4e+02 3.18e-01  1e-03  2e-01\n          200    1400 5.691152415221861e-12 1.0e+03 3.82e-05  1e-09  1e-06\n          220    1540 3.890107746209078e-15 9.5e+02 4.56e-06  8e-11  7e-08\n        termination on tolfun : 1e-11\n        final/bestever f-value = 3.89010774621e-15 2.52273602735e-15\n        mean solution:  [ -4.63614606e-08  -3.42761465e-10   1.59957987e-11]\n        std deviation: [  6.96066282e-08   2.28704425e-09   7.63875911e-11]\n\n    Test on the Rosenbrock function with 3 restarts. The first trial only\n    finds the local optimum, which happens in about 20% of the cases.\n        >>> import cma\n        >>> res = cma.fmin(cma.fcts.rosen, 4*[-1],1, ftarget=1e-6, restarts=3, verb_time=0, verb_disp=500, seed=3)\n        (4_w,8)-CMA-ES (mu_w=2.6,w_1=52%) in dimension 4 (seed=3)\n        Iterat #Fevals   function value     axis ratio  sigma   minstd maxstd min:sec\n            1       8 4.875315645656848e+01 1.0e+00 8.43e-01  8e-01  8e-01\n            2      16 1.662319948123120e+02 1.1e+00 7.67e-01  7e-01  8e-01\n            3      24 6.747063604799602e+01 1.2e+00 7.08e-01  6e-01  7e-01\n          184    1472 3.701428610430019e+00 4.3e+01 9.41e-07  3e-08  5e-08\n        termination on tolfun : 1e-11\n        final/bestever f-value = 3.70142861043 3.70142861043\n        mean solution:  [-0.77565922  0.61309336  0.38206284  0.14597202]\n        std deviation: [  2.54211502e-08   3.88803698e-08   4.74481641e-08   3.64398108e-08]\n        (8_w,16)-CMA-ES (mu_w=4.8,w_1=32%) in dimension 4 (seed=4)\n        Iterat #Fevals   function value     axis ratio  sigma   minstd maxstd min:sec\n            1    1489 2.011376859371495e+02 1.0e+00 8.90e-01  8e-01  9e-01\n            2    1505 4.157106647905128e+01 1.1e+00 8.02e-01  7e-01  7e-01\n            3    1521 3.548184889359060e+01 1.1e+00 1.02e+00  8e-01  1e+00\n          111    3249 6.831867555502181e-07 5.1e+01 2.62e-02  2e-04  2e-03\n        termination on ftarget : 1e-06\n        final/bestever f-value = 6.8318675555e-07 1.18576673231e-07\n        mean solution:  [ 0.99997004  0.99993938  0.99984868  0.99969505]\n        std deviation: [ 0.00018973  0.00038006  0.00076479  0.00151402]\n        >>> assert res[1] <= 1e-6\n\n    Notice the different termination conditions. Termination on the target\n    function value ftarget prevents further restarts.\n\n    Test of scaling_of_variables option\n        >>> import cma\n        >>> opts = cma.Options()\n        >>> opts['seed'] = 456\n        >>> opts['verb_disp'] = 0\n        >>> opts['CMA_active'] = 1\n        >>> # rescaling of third variable: for searching in  roughly\n        >>> #   x0 plus/minus 1e3*sigma0 (instead of plus/minus sigma0)\n        >>> opts.scaling_of_variables = [1, 1, 1e3, 1]\n        >>> res = cma.fmin(cma.fcts.rosen, 4 * [0.1], 0.1, **opts)\n        termination on tolfun : 1e-11\n        final/bestever f-value = 2.68096173031e-14 1.09714829146e-14\n        mean solution:  [ 1.00000001  1.00000002  1.00000004  1.00000007]\n        std deviation: [  3.00466854e-08   5.88400826e-08   1.18482371e-07   2.34837383e-07]\n\n    The printed std deviations reflect the actual true value (not the one\n    in the internal representation which would be different).\n        >>> import cma\n        >>> r = cma.fmin(cma.fcts.diffpow, 15 * [1], 1, CMA_dampsvec_fac=0.5, ftarget=1e-9)\n        >>> assert(r[1] < 1e-9)\n        >>> assert(r[2] < 13000)  # only passed with CMA_dampsvec_fac\n\n\n\t:See: cma.main(), cma._test()\n\n    \"\"\"\n\n    pass\n\n\n#____________________________________________________________\n#____________________________________________________________\n#\nclass BlancClass(object):\n    \"\"\"blanc container class for having a collection of attributes\"\"\"\n\n#_____________________________________________________________________\n#_____________________________________________________________________\n#\nclass DerivedDictBase(collections.MutableMapping):\n    \"\"\"for conveniently adding features to a dictionary. The actual\n    dictionary is in ``self.data``. Copy-paste\n    and modify setitem, getitem, and delitem, if necessary\"\"\"\n    def __init__(self, *args, **kwargs):\n        # collections.MutableMapping.__init__(self)\n        super(DerivedDictBase, self).__init__()\n        # super(SolutionDict, self).__init__()  # the same\n        self.data = dict(*args, **kwargs)\n    def __len__(self):\n        return len(self.data)\n    def __contains__(self, value):\n        return value in self.data\n    def __iter__(self):\n        return iter(self.data)\n    def __setitem__(self, key, value):\n        \"\"\"defines self[key] = value\"\"\"\n        self.data[key] = value\n    def __getitem__(self, key):\n        \"\"\"defines self[key]\"\"\"\n        return self.data[key]\n    def __delitem__(self, key):\n        del self.data[key]\n\nclass SolutionDict(DerivedDictBase):\n    \"\"\"dictionary with computation of an hash key for the inserted solutions and\n    a stack of previously inserted same solutions.\n    Each entry is meant to store additional information related to the solution.\n\n        >>> import cma, numpy as np\n        >>> d = cma.SolutionDict()\n        >>> x = np.array([1,2,4])\n        >>> d[x] = {'x': x, 'iteration': 1}\n        >>> d.get(x) == (d[x] if d.key(x) in d.keys() else None)\n\n    The last line is always true.\n\n    TODO: data_with_same_key behaves like a stack (see setitem and delitem), but rather should behave like a queue?!\n    A queue is less consistent with the operation self[key] = ..., if self.data_with_same_key[key] is not empty.\n\n    \"\"\"\n    def __init__(self, *args, **kwargs):\n        DerivedDictBase.__init__(self, *args, **kwargs)\n        self.data_with_same_key = {}\n    def key(self, x):\n        try:\n            return tuple(x)\n        except TypeError:\n            return x\n    def __setitem__(self, key, value):\n        \"\"\"defines self[key] = value\"\"\"\n        key = self.key(key)\n        if key in self.data_with_same_key:\n            self.data_with_same_key[key] += [self.data[key]]\n        elif key in self.data:\n            self.data_with_same_key[key] = [self.data[key]]\n        self.data[key] = value\n    def __getitem__(self, key):\n        \"\"\"defines self[key]\"\"\"\n        return self.data[self.key(key)]\n    def __delitem__(self, key):\n        \"\"\"remove only most current key-entry\"\"\"\n        key = self.key(key)\n        if key in self.data_with_same_key:\n            if len(self.data_with_same_key[key]) == 1:\n                self.data[key] = self.data_with_same_key.pop(key)[0]\n            else:\n                self.data[key] = self.data_with_same_key[key].pop(-1)\n        else:\n            del self.data[key]\n    def truncate(self, max_len, min_iter):\n        if len(self) > max_len:\n            for k in list(self.keys()):\n                if self[k]['iteration'] < min_iter:\n                    del self[k]  # only deletes one item with k as key, should delete all?\n\nclass SolutionDictOld(dict):\n    \"\"\"depreciated, SolutionDict should do, to be removed after SolutionDict\n    has been successfully applied.\n    dictionary with computation of an hash key for the inserted solutions and\n    stack of previously inserted same solutions.\n    Each entry is meant to store additional information related to the solution.\n    Methods ``pop`` and ``get`` are modified accordingly.\n\n        d = SolutionDict()\n        x = array([1,2,4])\n        d.insert(x, {'x': x, 'iteration': 1})\n        d.get(x) == d[d.key(x)] if d.key(x) in d.keys() else d.get(x) is None\n\n    TODO: not yet tested\n    TODO: behaves like a stack (see _pop_derived), but rather should behave like a queue?!\n    A queue is less consistent with the operation self[key] = ..., if self.more[key] is not empty.\n\n    \"\"\"\n    def __init__(self):\n        self.more = {}  # previously inserted same solutions\n        self._pop_base = self.pop\n        self.pop = self._pop_derived\n        self._get_base = self.get\n        self.get = self._get_derived\n    def key(self, x):\n        \"\"\"compute the hash key of ``x``\"\"\"\n        return tuple(x)\n    def insert(self, x, datadict):\n        key = self.key(x)\n        if key in self.more:\n            self.more[key] += [self[key]]\n        elif key in self:\n            self.more[key] = [self[key]]\n        self[key] = datadict\n    def _get_derived(self, x, default=None):\n        return self._get_base(self.key(x), default)\n    def _pop_derived(self, x):\n        key = self.key(x)\n        res = self[key]\n        if key in self.more:\n            if len(self.more[key]) == 1:\n                self[key] = self.more.pop(key)[0]\n            else:\n                self[key] = self.more[key].pop(-1)\n        return res\nclass BestSolution(object):\n    \"\"\"container to keep track of the best solution seen\"\"\"\n    def __init__(self, x=None, f=np.inf, evals=None):\n        \"\"\"initialize the best solution with `x`, `f`, and `evals`.\n        Better solutions have smaller `f`-values.\n\n        \"\"\"\n        self.x = x\n        self.x_geno = None\n        self.f = f if f is not None and f is not np.nan else np.inf\n        self.evals = evals\n        self.evalsall = evals\n        self.last = BlancClass()\n        self.last.x = x\n        self.last.f = f\n    def update(self, arx, xarchive=None, arf=None, evals=None):\n        \"\"\"checks for better solutions in list `arx`, based on the smallest\n        corresponding value in `arf`, alternatively, `update` may be called\n        with a `BestSolution` instance like ``update(another_best_solution)``\n        in which case the better solution becomes the current best.\n\n        `xarchive` is used to retrieve the genotype of a solution.\n\n        \"\"\"\n        if arf is not None:  # find failsave minimum\n            minidx = np.nanargmin(arf)\n            if minidx is np.nan:\n                return\n            minarf = arf[minidx]\n            # minarf = reduce(lambda x, y: y if y and y is not np.nan and y < x else x, arf, np.inf)\n        if type(arx) == BestSolution:\n            if self.evalsall is None:\n                self.evalsall = arx.evalsall\n            elif arx.evalsall is not None:\n                self.evalsall = max((self.evalsall, arx.evalsall))\n            if arx.f is not None and arx.f < np.inf:\n                self.update([arx.x], xarchive, [arx.f], arx.evals)\n            return self\n        elif minarf < np.inf and (minarf < self.f or self.f is None):\n            self.x, self.f = arx[minidx], arf[minidx]\n            self.x_geno = xarchive[self.x]['geno'] if xarchive is not None else None\n            self.evals = None if not evals else evals - len(arf) + minidx+1\n            self.evalsall = evals\n        elif evals:\n            self.evalsall = evals\n        self.last.x = arx[minidx]\n        self.last.f = minarf\n    def get(self):\n        \"\"\"return ``(x, f, evals)`` \"\"\"\n        return self.x, self.f, self.evals, self.x_geno\n\n#____________________________________________________________\n#____________________________________________________________\n#\nclass BoundPenalty(object):\n    \"\"\"Computes the boundary penalty. Must be updated each iteration,\n    using the `update` method.\n\n    Details\n    -------\n    The penalty computes like ``sum(w[i] * (x[i]-xfeas[i])**2)``,\n    where `xfeas` is the closest feasible (in-bounds) solution from `x`.\n    The weight `w[i]` should be updated during each iteration using\n    the update method.\n\n    This class uses `GenoPheno.into_bounds` in method `update` to access\n    domain boundary values and repair. This inconsistency is going to be\n    removed in future.\n\n    \"\"\"\n    def __init__(self, bounds=None):\n        \"\"\"Argument bounds can be `None` or ``bounds[0]`` and ``bounds[1]``\n        are lower  and upper domain boundaries, each is either `None` or\n        a scalar or a list or array of appropriate size.\n        \"\"\"\n        ##\n        # bounds attribute reminds the domain boundary values\n        self.bounds = bounds\n\n        self.gamma = 1  # a very crude assumption\n        self.weights_initialized = False  # gamma becomes a vector after initialization\n        self.hist = []  # delta-f history\n\n    def has_bounds(self):\n        \"\"\"return True, if any variable is bounded\"\"\"\n        bounds = self.bounds\n        if bounds in (None, [None, None]):\n            return False\n        for i in range(bounds[0]):\n            if bounds[0][i] is not None and bounds[0][i] > -np.inf:\n                return True\n        for i in range(bounds[1]):\n            if bounds[1][i] is not None and bounds[1][i] < np.inf:\n                return True\n        return False\n\n    def repair(self, x, bounds=None, copy=False, copy_always=False):\n        \"\"\"sets out-of-bounds components of ``x`` on the bounds.\n\n        Arguments\n        ---------\n            `bounds`\n                can be `None`, in which case the \"default\" bounds are used,\n                or ``[lb, ub]``, where `lb` and `ub`\n                represent lower and upper domain bounds respectively that\n                can be `None` or a scalar or a list or array of length ``len(self)``\n\n        code is more or less copy-paste from Solution.repair, but never tested\n\n        \"\"\"\n        # TODO (old data): CPU(N,lam,iter=20,200,100): 3.3s of 8s for two bounds, 1.8s of 6.5s for one bound\n        # TODO: test whether np.max([bounds[0], x], axis=0) etc is speed relevant\n\n        if bounds is None:\n            bounds = self.bounds\n        if copy_always:\n            x_out = array(x, copy=True)\n        if bounds not in (None, [None, None], (None, None)):  # solely for effiency\n            x_out = array(x, copy=True) if copy and not copy_always else x\n            if bounds[0] is not None:\n                if np.isscalar(bounds[0]):\n                    for i in range(len(x)):\n                        x_out[i] = max([bounds[0], x[i]])\n                else:\n                    for i in range(len(x)):\n                        if bounds[0][i] is not None:\n                            x_out[i] = max([bounds[0][i], x[i]])\n            if bounds[1] is not None:\n                if np.isscalar(bounds[1]):\n                    for i in range(len(x)):\n                        x_out[i] = min([bounds[1], x[i]])\n                else:\n                    for i in range(len(x)):\n                        if bounds[1][i] is not None:\n                            x_out[i] = min([bounds[1][i], x[i]])\n        return x_out  # convenience return\n\n    #____________________________________________________________\n    #\n    def __call__(self, x, archive, gp):\n        \"\"\"returns the boundary violation penalty for `x` ,where `x` is a\n        single solution or a list or array of solutions.\n        If `bounds` is not `None`, the values in `bounds` are used, see `__init__`\"\"\"\n        if x in (None, (), []):\n            return x\n        if gp.bounds in (None, [None, None], (None, None)):\n            return 0.0 if np.isscalar(x[0]) else [0.0] * len(x) # no penalty\n\n        x_is_single_vector = np.isscalar(x[0])\n        x = [x] if x_is_single_vector else x\n\n        pen = []\n        for xi in x:\n            # CAVE: this does not work with already repaired values!!\n            # CPU(N,lam,iter=20,200,100)?: 3s of 10s, array(xi): 1s (check again)\n            # remark: one deep copy can be prevented by xold = xi first\n            xpheno = gp.pheno(archive[xi]['geno'])\n            xinbounds = gp.into_bounds(xpheno)\n            fac = 1  # exp(0.1 * (log(self.scal) - np.mean(self.scal)))\n            pen.append(sum(self.gamma * ((xinbounds - xpheno) / fac)**2) / len(xi))\n\n        return pen[0] if x_is_single_vector else pen\n\n    #____________________________________________________________\n    #\n    def feasible_ratio(self, solutions):\n        \"\"\"counts for each coordinate the number of feasible values in\n        ``solutions`` and returns an array of length ``len(solutions[0])``\n        with the ratios.\n\n        `solutions` is a list or array of repaired `Solution` instances\n\n        \"\"\"\n        count = np.zeros(len(solutions[0]))\n        for x in solutions:\n            count += x.unrepaired == x\n        return count / float(len(solutions))\n\n    #____________________________________________________________\n    #\n    def update(self, function_values, es, bounds=None):\n        \"\"\"updates the weights for computing a boundary penalty.\n\n        Arguments\n        ---------\n        `function_values`\n            all function values of recent population of solutions\n        `es`\n            `CMAEvolutionStrategy` object instance, in particular the\n            method `into_bounds` of the attribute `gp` of type `GenoPheno`\n            is used.\n        `bounds`\n            not (yet) in use other than for ``bounds == [None, None]`` nothing\n            is updated.\n\n        Reference: Hansen et al 2009, A Method for Handling Uncertainty...\n        IEEE TEC, with addendum at http://www.lri.fr/~hansen/TEC2009online.pdf\n\n        \"\"\"\n        if bounds is None:\n            bounds = self.bounds\n        if bounds is None or (bounds[0] is None and bounds[1] is None):  # no bounds ==> no penalty\n            return self  # len(function_values) * [0.0]  # case without voilations\n\n        N = es.N\n        ### prepare\n        # compute varis = sigma**2 * C_ii\n        varis = es.sigma**2 * array(N * [es.C] if np.isscalar(es.C) else (  # scalar case\n                                es.C if np.isscalar(es.C[0]) else  # diagonal matrix case\n                                [es.C[i][i] for i in range(N)]))  # full matrix case\n\n        # dmean = (es.mean - es.gp.into_bounds(es.mean)) / varis**0.5\n        dmean = (es.mean - es.gp.geno(es.gp.into_bounds(es.gp.pheno(es.mean)))) / varis**0.5\n\n        ### Store/update a history of delta fitness value\n        fvals = sorted(function_values)\n        l = 1 + len(fvals)\n        val = fvals[3*l // 4] - fvals[l // 4] # exact interquartile range apart interpolation\n        val = val / np.mean(varis)  # new: val is normalized with sigma of the same iteration\n        # insert val in history\n        if np.isfinite(val) and val > 0:\n            self.hist.insert(0, val)\n        elif val == inf and len(self.hist) > 1:\n            self.hist.insert(0, max(self.hist))\n        else:\n            pass  # ignore 0 or nan values\n        if len(self.hist) > 20 + (3*N) / es.popsize:\n            self.hist.pop()\n\n        ### prepare\n        dfit = np.median(self.hist)  # median interquartile range\n        damp = min(1, es.sp.mueff/10./N)\n\n        ### set/update weights\n        # Throw initialization error\n        if len(self.hist) == 0:\n            raise _Error('wrongful initialization, no feasible solution sampled. ' +\n                'Reasons can be mistakenly set bounds (lower bound not smaller than upper bound) or a too large initial sigma0 or... ' +\n                'See description of argument func in help(cma.fmin) or an example handling infeasible solutions in help(cma.CMAEvolutionStrategy). ')\n        # initialize weights\n        if (dmean.any() and (not self.weights_initialized or es.countiter == 2)):  # TODO\n            self.gamma = array(N * [2*dfit])\n            self.weights_initialized = True\n        # update weights gamma\n        if self.weights_initialized:\n            edist = array(abs(dmean) - 3 * max(1, N**0.5/es.sp.mueff))\n            if 1 < 3:  # this is better, around a factor of two\n                # increase single weights possibly with a faster rate than they can decrease\n                #     value unit of edst is std dev, 3==random walk of 9 steps\n                self.gamma *= exp((edist>0) * np.tanh(edist/3) / 2.)**damp\n                # decrease all weights up to the same level to avoid single extremely small weights\n                #    use a constant factor for pseudo-keeping invariance\n                self.gamma[self.gamma > 5 * dfit] *= exp(-1./3)**damp\n                #     self.gamma[idx] *= exp(5*dfit/self.gamma[idx] - 1)**(damp/3)\n            elif 1 < 3 and (edist>0).any():  # previous method\n                # CAVE: min was max in TEC 2009\n                self.gamma[edist>0] *= 1.1**min(1, es.sp.mueff/10./N)\n                # max fails on cigtab(N=12,bounds=[0.1,None]):\n                # self.gamma[edist>0] *= 1.1**max(1, es.sp.mueff/10./N) # this was a bug!?\n                # self.gamma *= exp((edist>0) * np.tanh(edist))**min(1, es.sp.mueff/10./N)\n            else:  # alternative version, but not better\n                solutions = es.pop  # this has not been checked\n                r = self.feasible_ratio(solutions)  # has to be the averaged over N iterations\n                self.gamma *= exp(np.max([N*[0], 0.3 - r], axis=0))**min(1, es.sp.mueff/10/N)\n        es.more_to_write += list(self.gamma) if self.weights_initialized else N * [1.0]\n        ### return penalty\n        # es.more_to_write = self.gamma if not np.isscalar(self.gamma) else N*[1]\n        return self  # bound penalty values\n\n#____________________________________________________________\n#____________________________________________________________\n#\nclass GenoPhenoBase(object):\n    \"\"\"depreciated, abstract base class for genotyp-phenotype transformation,\n    to be implemented.\n\n    See (and rather use) option ``transformation`` of ``fmin`` or ``CMAEvolutionStrategy``.\n\n    Example\n    -------\n    ::\n\n        import cma\n        class Mygpt(cma.GenoPhenoBase):\n            def pheno(self, x):\n                return x  # identity for the time being\n        gpt = Mygpt()\n        optim = cma.CMAEvolutionStrategy(...)\n        while not optim.stop():\n            X = optim.ask()\n            f = [func(gpt.pheno(x)) for x in X]\n            optim.tell(X, f)\n\n    In case of a repair, we might pass the repaired solution into `tell()`\n    (with check_points being True).\n\n    TODO: check usecases in `CMAEvolutionStrategy` and implement option GenoPhenoBase\n\n    \"\"\"\n    def pheno(self, x):\n        raise NotImplementedError()\n        return x\n\n#____________________________________________________________\n#____________________________________________________________\n#\nclass GenoPheno(object):\n    \"\"\"Genotype-phenotype transformation.\n\n    Method `pheno` provides the transformation from geno- to phenotype,\n    that is from the internal representation to the representation used\n    in the objective function. Method `geno` provides the \"inverse\" pheno-\n    to genotype transformation. The geno-phenotype transformation comprises,\n    in this order:\n\n       - insert fixed variables (with the phenotypic and therefore quite\n         possibly \"wrong\" values)\n       - affine linear transformation (scaling and shift)\n       - user-defined transformation\n       - projection into feasible domain (boundaries)\n       - assign fixed variables their original phenotypic value\n\n    By default all transformations are the identity. The boundary\n    transformation is only applied, if the boundaries are given as argument to\n    the method `pheno` or `geno` respectively.\n\n    ``geno`` is not really necessary and might disappear in future.\n\n    \"\"\"\n    def __init__(self, dim, scaling=None, typical_x=None, bounds=None, fixed_values=None, tf=None):\n        \"\"\"return `GenoPheno` instance with fixed dimension `dim`.\n\n        Keyword Arguments\n        -----------------\n            `scaling`\n                the diagonal of a scaling transformation matrix, multipliers\n                in the genotyp-phenotyp transformation, see `typical_x`\n            `typical_x`\n                ``pheno = scaling*geno + typical_x``\n            `bounds` (obsolete, might disappear)\n                list with two elements,\n                lower and upper bounds both can be a scalar or a \"vector\"\n                of length dim or `None`. Without effect, as `bounds` must\n                be given as argument to `pheno()`.\n            `fixed_values`\n                a dictionary of variable indices and values, like ``{0:2.0, 2:1.1}``,\n                that are not subject to change, negative indices are ignored\n                (they act like incommenting the index), values are phenotypic\n                values.\n            `tf`\n                list of two user-defined transformation functions, or `None`.\n\n                ``tf[0]`` is a function that transforms the internal representation\n                as used by the optimizer into a solution as used by the\n                objective function. ``tf[1]`` does the back-transformation.\n                For example ::\n\n                    tf_0 = lambda x: [xi**2 for xi in x]\n                    tf_1 = lambda x: [abs(xi)**0.5 fox xi in x]\n\n                or \"equivalently\" without the `lambda` construct ::\n\n                    def tf_0(x):\n                        return [xi**2 for xi in x]\n                    def tf_1(x):\n                        return [abs(xi)**0.5 fox xi in x]\n\n                ``tf=[tf_0, tf_1]`` is a reasonable way to guaranty that only positive\n                values are used in the objective function.\n\n        Details\n        -------\n        If ``tf_1`` is ommitted, the initial x-value must be given as genotype (as the\n        phenotype-genotype transformation is unknown) and injection of solutions\n        might lead to unexpected results.\n\n        \"\"\"\n        self.N = dim\n        self.bounds = bounds\n        self.fixed_values = fixed_values\n        if tf is not None:\n            self.tf_pheno = tf[0]\n            self.tf_geno = tf[1]  # TODO: should not necessarily be needed\n            # r = np.random.randn(dim)\n            # assert all(tf[0](tf[1](r)) - r < 1e-7)\n            # r = np.random.randn(dim)\n            # assert all(tf[0](tf[1](r)) - r > -1e-7)\n            print(\"WARNING in class GenoPheno: user defined transformations have not been tested thoroughly\")\n        else:\n            self.tf_geno = None\n            self.tf_pheno = None\n\n        if fixed_values:\n            if type(fixed_values) is not dict:\n                raise _Error(\"fixed_values must be a dictionary {index:value,...}\")\n            if max(fixed_values.keys()) >= dim:\n                raise _Error(\"max(fixed_values.keys()) = \" + str(max(fixed_values.keys())) +\n                    \" >= dim=N=\" + str(dim) + \" is not a feasible index\")\n            # convenience commenting functionality: drop negative keys\n            for k in list(fixed_values.keys()):\n                if k < 0:\n                    fixed_values.pop(k)\n        if bounds:\n            if len(bounds) != 2:\n                raise _Error('len(bounds) must be 2 for lower and upper bounds')\n            for i in (0,1):\n                if bounds[i] is not None:\n                    bounds[i] = array(dim * [bounds[i]] if np.isscalar(bounds[i]) else\n                                        [b for b in bounds[i]])\n\n        def vec_is_default(vec, default_val=0):\n            \"\"\"return True if `vec` has the value `default_val`,\n            None or [None] are also recognized as default\"\"\"\n            try:\n                if len(vec) == 1:\n                    vec = vec[0]  # [None] becomes None and is always default\n                else:\n                    return False\n            except TypeError:\n                pass  # vec is a scalar\n\n            if vec is None or vec == array(None) or vec == default_val:\n                return True\n            return False\n\n        self.scales = array(scaling)\n        if vec_is_default(self.scales, 1):\n            self.scales = 1  # CAVE: 1 is not array(1)\n        elif self.scales.shape is not () and len(self.scales) != self.N:\n            raise _Error('len(scales) == ' + str(len(self.scales)) +\n                         ' does not match dimension N == ' + str(self.N))\n\n        self.typical_x = array(typical_x)\n        if vec_is_default(self.typical_x, 0):\n            self.typical_x = 0\n        elif self.typical_x.shape is not () and len(self.typical_x) != self.N:\n            raise _Error('len(typical_x) == ' + str(len(self.typical_x)) +\n                         ' does not match dimension N == ' + str(self.N))\n\n        if (self.scales is 1 and\n                self.typical_x is 0 and\n                self.bounds in (None, [None, None]) and\n                self.fixed_values is None and\n                self.tf_pheno is None):\n            self.isidentity = True\n        else:\n            self.isidentity = False\n\n    def into_bounds(self, y, bounds=None, copy_never=False, copy_always=False):\n        \"\"\"Argument `y` is a phenotypic vector,\n        return `y` put into boundaries, as a copy iff ``y != into_bounds(y)``.\n\n        Note: this code is duplicated in `Solution.repair` and might\n        disappear in future.\n\n        \"\"\"\n        bounds = bounds if bounds is not None else self.bounds\n        if bounds in (None, [None, None]):\n            return y if not copy_always else array(y, copy=True)\n        if bounds[0] is not None:\n            if len(bounds[0]) not in (1, len(y)):\n                raise ValueError('len(bounds[0]) = ' + str(len(bounds[0])) +\n                                 ' and len of initial solution (' + str(len(y)) + ') disagree')\n            if copy_never:  # is rather slower\n                for i in range(len(y)):\n                    y[i] = max(bounds[0][i], y[i])\n            else:\n                y = np.max([bounds[0], y], axis=0)\n        if bounds[1] is not None:\n            if len(bounds[1]) not in (1, len(y)):\n                raise ValueError('len(bounds[1]) = ' + str(len(bounds[1])) +\n                                    ' and initial solution (' + str(len(y)) + ') disagree')\n            if copy_never:\n                for i in range(len(y)):\n                    y[i] = min(bounds[1][i], y[i])\n            else:\n                y = np.min([bounds[1], y], axis=0)\n        return y\n\n    def pheno(self, x, bounds=None, copy=True, copy_always=False):\n        \"\"\"maps the genotypic input argument into the phenotypic space,\n        boundaries are only applied if argument ``bounds is not None``, see\n        help for class `GenoPheno`\n\n        \"\"\"\n        if copy_always and not copy:\n            raise ValueError('arguments copy_always=' + str(copy_always) +\n                             ' and copy=' + str(copy) + ' have inconsistent values')\n        if self.isidentity and bounds in (None, [None, None], (None, None)):\n            return x if not copy_always else array(x, copy=copy_always)\n\n        if self.fixed_values is None:\n            y = array(x, copy=copy)  # make a copy, in case\n        else:  # expand with fixed values\n            y = list(x)  # is a copy\n            for i in sorted(self.fixed_values.keys()):\n                y.insert(i, self.fixed_values[i])\n            y = array(y, copy=False)\n\n        if self.scales is not 1:  # just for efficiency\n            y *= self.scales\n\n        if self.typical_x is not 0:\n            y += self.typical_x\n\n        if self.tf_pheno is not None:\n            y = array(self.tf_pheno(y), copy=False)\n\n        if bounds is not None:\n            y = self.into_bounds(y, bounds)\n\n        if self.fixed_values is not None:\n            for i, k in list(self.fixed_values.items()):\n                y[i] = k\n\n        return y\n\n    def geno(self, y, bounds=None, copy=True, copy_always=False, archive=None):\n        \"\"\"maps the phenotypic input argument into the genotypic space.\n        If `bounds` are given, first `y` is projected into the feasible\n        domain. In this case ``copy==False`` leads to a copy.\n\n        by default a copy is made only to prevent to modify ``y``\n\n        method geno is only needed if external solutions are injected\n        (geno(initial_solution) is depreciated and will disappear)\n\n        TODO: arg copy=True should become copy_never=False\n\n        \"\"\"\n        if archive is not None and bounds is not None:\n            try:\n                return archive[y]['geno']\n            except:\n                pass\n\n        x = array(y, copy=(copy and not self.isidentity) or copy_always)\n\n        # bounds = self.bounds if bounds is None else bounds\n        if bounds is not None:  # map phenotyp into bounds first\n            x = self.into_bounds(x, bounds)\n\n        if self.isidentity:\n            return x\n\n        # user-defined transformation\n        if self.tf_geno is not None:\n            x = array(self.tf_geno(x), copy=False)\n        else:\n            _Error('t1 of options transformation was not defined but is needed as being the inverse of t0')\n\n        # affine-linear transformation: shift and scaling\n        if self.typical_x is not 0:\n            x -= self.typical_x\n        if self.scales is not 1:  # just for efficiency\n            x /= self.scales\n\n        # kick out fixed_values\n        if self.fixed_values is not None:\n            # keeping the transformed values does not help much\n            # therefore it is omitted\n            if 1 < 3:\n                keys = sorted(self.fixed_values.keys())\n                x = array([x[i] for i in range(len(x)) if i not in keys], copy=False)\n            else:  # TODO: is this more efficient?\n                x = list(x)\n                for key in sorted(list(self.fixed_values.keys()), reverse=True):\n                    x.remove(key)\n                x = array(x, copy=False)\n        return x\n#____________________________________________________________\n#____________________________________________________________\n# check out built-in package abc: class ABCMeta, abstractmethod, abstractproperty...\n# see http://docs.python.org/whatsnew/2.6.html PEP 3119 abstract base classes\n#\nclass OOOptimizer(object):\n    \"\"\"\"abstract\" base class for an OO optimizer interface with methods\n    `__init__`, `ask`, `tell`, `stop`, `result`, and `optimize`. Only\n    `optimize` is fully implemented in this base class.\n\n    Examples\n    --------\n    All examples minimize the function `elli`, the output is not shown.\n    (A preferred environment to execute all examples is ``ipython -pylab``.)\n    First we need ::\n\n        from cma import CMAEvolutionStrategy, CMADataLogger  # CMAEvolutionStrategy derives from the OOOptimizer class\n        elli = lambda x: sum(1e3**((i-1.)/(len(x)-1.)*x[i])**2 for i in range(len(x)))\n\n    The shortest example uses the inherited method `OOOptimizer.optimize()`::\n\n        res = CMAEvolutionStrategy(8 * [0.1], 0.5).optimize(elli)\n\n    The input parameters to `CMAEvolutionStrategy` are specific to this\n    inherited class. The remaining functionality is based on interface\n    defined by `OOOptimizer`. We might have a look at the result::\n\n        print(res[0])  # best solution and\n        print(res[1])  # its function value\n\n    `res` is the return value from method\n    `CMAEvolutionStrategy.result()` appended with `None` (no logger).\n    In order to display more exciting output we rather do ::\n\n        logger = CMADataLogger()  # derives from the abstract BaseDataLogger class\n        res = CMAEvolutionStrategy(9 * [0.5], 0.3).optimize(elli, logger)\n        logger.plot()  # if matplotlib is available, logger == res[-1]\n\n    or even shorter ::\n\n        res = CMAEvolutionStrategy(9 * [0.5], 0.3).optimize(elli, CMADataLogger())\n        res[-1].plot()  # if matplotlib is available\n\n    Virtually the same example can be written with an explicit loop\n    instead of using `optimize()`. This gives the necessary insight into\n    the `OOOptimizer` class interface and gives entire control over the\n    iteration loop::\n\n        optim = CMAEvolutionStrategy(9 * [0.5], 0.3)  # a new CMAEvolutionStrategy instance calling CMAEvolutionStrategy.__init__()\n        logger = CMADataLogger(optim)  # get a logger instance\n\n        # this loop resembles optimize()\n        while not optim.stop(): # iterate\n            X = optim.ask()     # get candidate solutions\n            f = [elli(x) for x in X]  # evaluate solutions\n            #  maybe do something else that needs to be done\n            optim.tell(X, f)    # do all the real work: prepare for next iteration\n            optim.disp(20)      # display info every 20th iteration\n            logger.add()        # log another \"data line\"\n\n        # final output\n        print('termination by', optim.stop())\n        print('best f-value =', optim.result()[1])\n        print('best solution =', optim.result()[0])\n        logger.plot()  # if matplotlib is available\n        raw_input('press enter to continue')  # prevents exiting and closing figures\n\n    Details\n    -------\n    Most of the work is done in the method `tell(...)`. The method `result()` returns\n    more useful output.\n\n    \"\"\"\n    def __init__(self, xstart, **more_args):\n        \"\"\"``xstart`` is a mandatory argument\"\"\"\n        self.xstart = xstart\n        self.more_args = more_args\n        self.initialize()\n    def initialize(self):\n        \"\"\"(re-)set to the initial state\"\"\"\n        self.countiter = 0\n        self.xcurrent = self.xstart[:]\n        raise NotImplementedError('method initialize() must be implemented in derived class')\n    def ask(self):\n        \"\"\"abstract method, AKA \"get\" or \"sample_distribution\", deliver new candidate solution(s), a list of \"vectors\"\n        \"\"\"\n        raise NotImplementedError('method ask() must be implemented in derived class')\n    def tell(self, solutions, function_values):\n        \"\"\"abstract method, AKA \"update\", prepare for next iteration\"\"\"\n        self.countiter += 1\n        raise NotImplementedError('method tell() must be implemented in derived class')\n    def stop(self):\n        \"\"\"abstract method, return satisfied termination conditions in a dictionary like\n        ``{'termination reason': value, ...}``, for example ``{'tolfun': 1e-12}``, or the empty\n        dictionary ``{}``. The implementation of `stop()` should prevent an infinite loop.\n        \"\"\"\n        raise NotImplementedError('method stop() is not implemented')\n    def disp(self, modulo=None):\n        \"\"\"abstract method, display some iteration infos if ``self.iteration_counter % modulo == 0``\"\"\"\n        raise NotImplementedError('method disp() is not implemented')\n    def result(self):\n        \"\"\"abstract method, return ``(x, f(x), ...)``, that is, the minimizer, its function value, ...\"\"\"\n        raise NotImplementedError('method result() is not implemented')\n\n    def optimize(self, objectivefct, logger=None, verb_disp=20, iterations=None):\n        \"\"\"find minimizer of `objectivefct` by iterating over `OOOptimizer` `self`\n        with verbosity `verb_disp`, using `BaseDataLogger` `logger` with at\n        most `iterations` iterations. ::\n\n            return self.result() + (self.stop(), self, logger)\n\n        Example\n        -------\n        >>> import cma\n        >>> res = cma.CMAEvolutionStrategy(7 * [0.1], 0.5).optimize(cma.fcts.rosen, cma.CMADataLogger(), 100)\n        (4_w,9)-CMA-ES (mu_w=2.8,w_1=49%) in dimension 7 (seed=630721393)\n        Iterat #Fevals   function value     axis ratio  sigma   minstd maxstd min:sec\n            1       9 3.163954777181882e+01 1.0e+00 4.12e-01  4e-01  4e-01 0:0.0\n            2      18 3.299006223906629e+01 1.0e+00 3.60e-01  3e-01  4e-01 0:0.0\n            3      27 1.389129389866704e+01 1.1e+00 3.18e-01  3e-01  3e-01 0:0.0\n          100     900 2.494847340045985e+00 8.6e+00 5.03e-02  2e-02  5e-02 0:0.3\n          200    1800 3.428234862999135e-01 1.7e+01 3.77e-02  6e-03  3e-02 0:0.5\n          300    2700 3.216640032470860e-04 5.6e+01 6.62e-03  4e-04  9e-03 0:0.8\n          400    3600 6.155215286199821e-12 6.6e+01 7.44e-06  1e-07  4e-06 0:1.1\n          438    3942 1.187372505161762e-14 6.0e+01 3.27e-07  4e-09  9e-08 0:1.2\n          438    3942 1.187372505161762e-14 6.0e+01 3.27e-07  4e-09  9e-08 0:1.2\n        ('termination by', {'tolfun': 1e-11})\n        ('best f-value =', 1.1189867885201275e-14)\n        ('solution =', array([ 1.        ,  1.        ,  1.        ,  0.99999999,  0.99999998,\n                0.99999996,  0.99999992]))\n        >>> print(res[0])\n        [ 1.          1.          1.          0.99999999  0.99999998  0.99999996\n          0.99999992]\n\n        \"\"\"\n        if logger is None:\n            if hasattr(self, 'logger'):\n                logger = self.logger\n\n        citer = 0\n        while not self.stop():\n            if iterations is not None and citer >= iterations:\n                return self.result()\n            citer += 1\n\n            X = self.ask()         # deliver candidate solutions\n            fitvals = [objectivefct(x) for x in X]\n            self.tell(X, fitvals)  # all the work is done here\n\n            self.disp(verb_disp)\n            logger.add(self) if logger else None\n\n        logger.add(self, modulo=bool(logger.modulo)) if logger else None\n        if verb_disp:\n            self.disp(1)\n        if verb_disp in (1, True):\n            print('termination by', self.stop())\n            print('best f-value =', self.result()[1])\n            print('solution =', self.result()[0])\n\n        return self.result() + (self.stop(), self, logger)\n\n#____________________________________________________________\n#____________________________________________________________\n#\nclass CMAEvolutionStrategy(OOOptimizer):\n    \"\"\"CMA-ES stochastic optimizer class with ask-and-tell interface.\n\n    See `fmin` for the one-line-call functional interface.\n\n    Calling sequence\n    ================\n    ``optim = CMAEvolutionStrategy(x0, sigma0, opts)``\n    returns a class instance.\n\n    Arguments\n    ---------\n        `x0`\n            initial solution, starting point (phenotype).\n        `sigma0`\n            initial standard deviation.  The problem\n            variables should have been scaled, such that a single\n            standard deviation on all variables is useful and the\n            optimum is expected to lie within about `x0` +- ``3*sigma0``.\n            See also options `scaling_of_variables`.\n            Often one wants to check for solutions close to the initial\n            point. This allows for an easier check for consistency of\n            the objective function and its interfacing with the optimizer.\n            In this case, a much smaller `sigma0` is advisable.\n        `opts`\n            options, a dictionary with optional settings,\n            see class `Options`.\n\n    Main interface / usage\n    ======================\n    The ask-and-tell interface is inherited from the generic `OOOptimizer`\n    interface for iterative optimization algorithms (see there). With ::\n\n        optim = CMAEvolutionStrategy(8 * [0.5], 0.2)\n\n    an object instance is generated. In each iteration ::\n\n        solutions = optim.ask()\n\n    is used to ask for new candidate solutions (possibly several times) and ::\n\n        optim.tell(solutions, func_values)\n\n    passes the respective function values to `optim`. Instead of `ask()`,\n    the class `CMAEvolutionStrategy` also provides ::\n\n        (solutions, func_values) = optim.ask_and_eval(objective_func)\n\n    Therefore, after initialization, an entire optimization can be written\n    in two lines like ::\n\n        while not optim.stop():\n            optim.tell(*optim.ask_and_eval(objective_func))\n\n    Without the freedom of executing additional lines within the iteration,\n    the same reads in a single line as ::\n\n        optim.optimize(objective_func)\n\n    Besides for termination criteria, in CMA-ES only\n    the ranks of the `func_values` are relevant.\n\n    Attributes and Properties\n    =========================\n        - `inputargs` -- passed input arguments\n        - `inopts` -- passed options\n        - `opts` -- actually used options, some of them can be changed any\n          time, see class `Options`\n        - `popsize` -- population size lambda, number of candidate solutions\n          returned by `ask()`\n\n    Details\n    =======\n    The following two enhancements are turned off by default.\n\n    **Active CMA** is implemented with option ``CMA_active`` and conducts\n    an update of the covariance matrix with negative weights. The\n    exponential update is implemented, where from a mathematical\n    viewpoint positive definiteness is guarantied. The update is applied\n    after the default update and only before the covariance matrix is\n    decomposed, which limits the additional computational burden to be\n    at most a factor of three (typically smaller). A typical speed up\n    factor (number of f-evaluations) is between 1.1 and two.\n\n    References: Jastrebski and Arnold, CEC 2006, Glasmachers et al, GECCO 2010.\n\n    **Selective mirroring** is implemented with option ``CMA_mirrors`` in\n    the method ``get_mirror()``. Only the method `ask_and_eval()` will\n    then sample selectively mirrored vectors. In selective mirroring, only\n    the worst solutions are mirrored. With the default small number of mirrors,\n    *pairwise selection* (where at most one of the two mirrors contribute to the\n    update of the distribution mean) is implicitely guarantied under selective\n    mirroring and therefore not explicitly implemented.\n\n    References: Brockhoff et al, PPSN 2010, Auger et al, GECCO 2011.\n\n    Examples\n    ========\n    Super-short example, with output shown:\n\n    >>> import cma\n    >>> # construct an object instance in 4-D, sigma0=1\n    >>> es = cma.CMAEvolutionStrategy(4 * [1], 1, {'seed':234})\n    (4_w,8)-CMA-ES (mu_w=2.6,w_1=52%) in dimension 4 (seed=234)\n    >>>\n    >>> # iterate until termination\n    >>> while not es.stop():\n    ...    X = es.ask()\n    ...    es.tell(X, [cma.fcts.elli(x) for x in X])\n    ...    es.disp()  # by default sparse, see option verb_disp\n    Iterat #Fevals   function value     axis ratio  sigma   minstd maxstd min:sec\n        1       8 2.093015112685775e+04 1.0e+00 9.27e-01  9e-01  9e-01 0:0.0\n        2      16 4.964814235917688e+04 1.1e+00 9.54e-01  9e-01  1e+00 0:0.0\n        3      24 2.876682459926845e+05 1.2e+00 1.02e+00  9e-01  1e+00 0:0.0\n      100     800 6.809045875281943e-01 1.3e+02 1.41e-02  1e-04  1e-02 0:0.2\n      200    1600 2.473662150861846e-10 8.0e+02 3.08e-05  1e-08  8e-06 0:0.5\n      233    1864 2.766344961865341e-14 8.6e+02 7.99e-07  8e-11  7e-08 0:0.6\n    >>>\n    >>> cma.pprint(es.result())\n    (Solution([ -1.98546755e-09,  -1.10214235e-09,   6.43822409e-11,\n            -1.68621326e-11]),\n     4.5119610261406537e-16,\n     1666,\n     1672,\n     209,\n     array([ -9.13545269e-09,  -1.45520541e-09,  -6.47755631e-11,\n            -1.00643523e-11]),\n     array([  3.20258681e-08,   3.15614974e-09,   2.75282215e-10,\n             3.27482983e-11]))\n    >>>\n    >>> # help(es.result) shows\n    result(self) method of cma.CMAEvolutionStrategy instance\n       return ``(xbest, f(xbest), evaluations_xbest, evaluations, iterations, pheno(xmean), effective_stds)``\n\n    Using the multiprocessing module, we can evaluate the function in parallel with a simple\n    modification of the example ::\n\n        import multiprocessing\n        # prepare es = ...\n        pool = multiprocessing.Pool(es.popsize)\n        while not es.stop():\n            X = es.ask()\n            es.tell(X, pool.map_async(cma.felli, X).get()) # use chunksize parameter as popsize/len(pool)?\n\n    Example with a data logger, lower bounds (at zero) and handling infeasible solutions:\n\n    >>> import cma\n    >>> import numpy as np\n    >>> es = cma.CMAEvolutionStrategy(10 * [0.2], 0.5, {'bounds': [0, np.inf]})\n    >>> logger = cma.CMADataLogger().register(es)\n    >>> while not es.stop():\n    ...     fit, X = [], []\n    ...     while len(X) < es.popsize:\n    ...         curr_fit = np.NaN\n    ...         while curr_fit is np.NaN:\n    ...             x = es.ask(1)[0]\n    ...             curr_fit = cma.fcts.somenan(x, cma.fcts.elli) # might return np.NaN\n    ...         X.append(x)\n    ...         fit.append(curr_fit)\n    ...     es.tell(X, fit)\n    ...     logger.add()\n    ...     es.disp()\n    <output omitted>\n    >>>\n    >>> assert es.result()[1] < 1e-9\n    >>> assert es.result()[2] < 9000  # by internal termination\n    >>> logger.plot()  # plot data\n    >>> cma.show()\n    >>> print('  *** if execution stalls close the figure window to continue (and check out ipython --pylab) ***')\n\n    Example implementing restarts with increasing popsize (IPOP), output is not displayed:\n\n    >>> import cma, numpy as np\n    >>>\n    >>> # restart with increasing population size (IPOP)\n    >>> bestever = cma.BestSolution()\n    >>> for lam in 10 * 2**np.arange(7):  # 10, 20, 40, 80, ..., 10 * 2**6\n    ...     es = cma.CMAEvolutionStrategy('6 - 8 * np.random.rand(9)',  # 9-D\n    ...                                   5,         # initial std sigma0\n    ...                                   {'popsize': lam,\n    ...                                    'verb_append': bestever.evalsall})   # pass options\n    ...     logger = cma.CMADataLogger().register(es, append=bestever.evalsall)\n    ...     while not es.stop():\n    ...         X = es.ask()    # get list of new solutions\n    ...         fit = [cma.fcts.rastrigin(x) for x in X]  # evaluate each solution\n    ...         es.tell(X, fit) # besides for termination only the ranking in fit is used\n    ...\n    ...         # display some output\n    ...         logger.add()  # add a \"data point\" to the log, writing in files\n    ...         es.disp()  # uses option verb_disp with default 100\n    ...\n    ...     print('termination:', es.stop())\n    ...     cma.pprint(es.best.__dict__)\n    ...\n    ...     bestever.update(es.best)\n    ...\n    ...     # show a plot\n    ...     logger.plot();\n    ...     if bestever.f < 1e-8:  # global optimum was hit\n    ...         break\n    <output omitted>\n    >>> assert es.result()[1] < 1e-8\n\n    On the Rastrigin function, usually after five restarts the global optimum\n    is located.\n\n    The final example shows how to resume:\n\n    >>> import cma, pickle\n    >>>\n    >>> es = cma.CMAEvolutionStrategy(12 * [0.1],  # a new instance, 12-D\n    ...                               0.5)         # initial std sigma0\n    >>> logger = cma.CMADataLogger().register(es)\n    >>> es.optimize(cma.fcts.rosen, logger, iterations=100)\n    >>> logger.plot()\n    >>> pickle.dump(es, open('saved-cma-object.pkl', 'wb'))\n    >>> print('saved')\n    >>> del es, logger  # let's start fresh\n    >>>\n    >>> es = pickle.load(open('saved-cma-object.pkl', 'rb'))\n    >>> print('resumed')\n    >>> logger = cma.CMADataLogger(es.opts['verb_filenameprefix']  # use same name\n    ...                           ).register(es, True)  # True: append to old log data\n    >>> es.optimize(cma.fcts.rosen, logger, verb_disp=200)\n    >>> assert es.result()[2] < 15000\n    >>> cma.pprint(es.result())\n    >>> logger.plot()\n\n    Missing Features\n    ================\n    Option ``randn`` to pass a random number generator.\n\n    :See: `fmin()`, `Options`, `plot()`, `ask()`, `tell()`, `ask_and_eval()`\n\n    \"\"\"\n\n    # __all__ = ()  # TODO this would be the interface\n\n    #____________________________________________________________\n    @property  # read only attribute decorator for a method\n    def popsize(self):\n        \"\"\"number of samples by default returned by` ask()`\n        \"\"\"\n        return self.sp.popsize\n\n    # this is not compatible with python2.5:\n    #     @popsize.setter\n    #     def popsize(self, p):\n    #         \"\"\"popsize cannot be set (this might change in future)\n    #         \"\"\"\n    #         raise _Error(\"popsize cannot be changed (this might change in future)\")\n\n    #____________________________________________________________\n    #____________________________________________________________\n    def stop(self, check=True):\n        \"\"\"return a dictionary with the termination status.\n        With ``check==False``, the termination conditions are not checked and\n        the status might not reflect the current situation.\n        \"\"\"\n\n        if (check and self.countiter > 0 and self.opts['termination_callback'] and\n                self.opts['termination_callback'] != str(self.opts['termination_callback'])):\n            self.callbackstop = self.opts['termination_callback'](self)\n\n        return self.stopdict(self if check else None)  # update the stopdict and return a Dict\n\n    #____________________________________________________________\n    #____________________________________________________________\n    def __init__(self, x0, sigma0, inopts = {}):\n        \"\"\"see class `CMAEvolutionStrategy`\n\n        \"\"\"\n        self.inputargs = dict(locals()) # for the record\n        del self.inputargs['self'] # otherwise the instance self has a cyclic reference\n        self.inopts = inopts\n        opts = Options(inopts).complement()  # Options() == fmin([],[]) == defaultOptions()\n\n        if opts['noise_handling'] and eval(opts['noise_handling']):\n            raise ValueError('noise_handling not available with class CMAEvolutionStrategy, use function fmin')\n        if opts['restarts'] and eval(opts['restarts']):\n            raise ValueError('restarts not available with class CMAEvolutionStrategy, use function fmin')\n\n        if x0 == str(x0):\n            x0 = eval(x0)\n        self.mean = array(x0)  # should not have column or row, is just 1-D\n        if self.mean.ndim == 2:\n            print('WARNING: input x0 should be a list or 1-D array, trying to flatten ' +\n                    str(self.mean.shape) + '-array')\n            if self.mean.shape[0] == 1:\n                self.mean = self.mean[0]\n            elif self.mean.shape[1] == 1:\n                self.mean = array([x[0] for x in self.mean])\n        if self.mean.ndim != 1:\n            raise _Error('x0 must be 1-D array')\n        if len(self.mean) <= 1:\n            raise _Error('optimization in 1-D is not supported (code was never tested)')\n\n        self.N = self.mean.shape[0]\n        N = self.N\n        self.mean.resize(N) # 1-D array, not really necessary?!\n        self.x0 = self.mean\n        self.mean = self.x0.copy()  # goes to initialize\n\n        self.sigma0 = sigma0\n        if isinstance(sigma0, str):  # TODO: no real need here (do rather in fmin)\n            self.sigma0 = eval(sigma0)  # like '1./N' or 'np.random.rand(1)[0]+1e-2'\n        if np.size(self.sigma0) != 1 or np.shape(self.sigma0):\n            raise _Error('input argument sigma0 must be (or evaluate to) a scalar')\n        self.sigma = self.sigma0  # goes to inialize\n\n        # extract/expand options\n        opts.evalall(locals())  # using only N\n        self.opts = opts\n\n        self.randn = opts['randn']\n        self.gp = GenoPheno(N, opts['scaling_of_variables'], opts['typical_x'],\n            opts['bounds'], opts['fixed_variables'], opts['transformation'])\n        self.boundPenalty = BoundPenalty(self.gp.bounds)\n        s = self.gp.geno(self.mean)\n        self.mean = self.gp.geno(self.mean, bounds=self.gp.bounds)\n        self.N = len(self.mean)\n        N = self.N\n        if (self.mean != s).any():\n            print('WARNING: initial solution is out of the domain boundaries:')\n            print('  x0   = ' + str(self.inputargs['x0']))\n            print('  ldom = ' + str(self.gp.bounds[0]))\n            print('  udom = ' + str(self.gp.bounds[1]))\n        self.fmean = np.NaN             # TODO name should change? prints nan (OK with matlab&octave)\n        self.fmean_noise_free = 0.  # for output only\n\n        self.sp = CMAParameters(N, opts)\n        self.sp0 = self.sp  # looks useless, as it is not a copy\n\n        # initialization of state variables\n        self.countiter = 0\n        self.countevals = max((0, opts['verb_append'])) if type(opts['verb_append']) is not bool else 0\n        self.ps = np.zeros(N)\n        self.pc = np.zeros(N)\n\n        stds = np.ones(N)\n        self.sigma_vec = np.ones(N) if np.isfinite(self.sp.dampsvec) else 1\n        if np.all(self.opts['CMA_teststds']):  # also 0 would not make sense\n            stds = self.opts['CMA_teststds']\n            if np.size(stds) != N:\n                raise _Error('CMA_teststds option must have dimension = ' + str(N))\n        if self.opts['CMA_diagonal']:  # is True or > 0\n            # linear time and space complexity\n            self.B = array(1) # works fine with np.dot(self.B, anything) and self.B.T\n            self.C = stds**2  # TODO: remove this!?\n            self.dC = self.C\n        else:\n            self.B = np.eye(N) # identity(N), do not from matlib import *, as eye is a matrix there\n            # prevent equal eigenvals, a hack for np.linalg:\n            self.C = np.diag(stds**2 * exp(1e-6*(np.random.rand(N)-0.5)))\n            self.dC = np.diag(self.C)\n            self.Zneg = np.zeros((N, N))\n        self.D = stds\n\n        self.flgtelldone = True\n        self.itereigenupdated = self.countiter\n        self.noiseS = 0  # noise \"signal\"\n        self.hsiglist = []\n\n        if not opts['seed']:\n            np.random.seed()\n            six_decimals = (time.time() - 1e6 * (time.time() // 1e6))\n            opts['seed'] = 1e5 * np.random.rand() + six_decimals + 1e5 * (time.time() % 1)\n        opts['seed'] = int(opts['seed'])\n        np.random.seed(opts['seed'])\n\n        self.sent_solutions = SolutionDict()\n        self.best = BestSolution()\n\n        out = {}  # TODO: obsolete, replaced by method results()?\n        out['best'] = self.best\n        # out['hsigcount'] = 0\n        out['termination'] = {}\n        self.out = out\n\n        self.const = BlancClass()\n        self.const.chiN = N**0.5*(1-1./(4.*N)+1./(21.*N**2)) # expectation of norm(randn(N,1))\n\n        # attribute for stopping criteria in function stop\n        self.stopdict = CMAStopDict()\n        self.callbackstop = 0\n\n        self.fit = BlancClass()\n        self.fit.fit = []   # not really necessary\n        self.fit.hist = []  # short history of best\n        self.fit.histbest = []   # long history of best\n        self.fit.histmedian = [] # long history of median\n\n        self.more_to_write = []  #[1, 1, 1, 1]  #  N*[1]  # needed when writing takes place before setting\n\n        # say hello\n        if opts['verb_disp'] > 0:\n            sweighted = '_w' if self.sp.mu > 1 else ''\n            smirr = 'mirr%d' % (self.sp.lam_mirr) if self.sp.lam_mirr else ''\n            print('(%d' % (self.sp.mu) + sweighted + ',%d' % (self.sp.popsize) + smirr + ')-CMA-ES' +\n                  ' (mu_w=%2.1f,w_1=%d%%)' % (self.sp.mueff, int(100*self.sp.weights[0])) +\n                  ' in dimension %d (seed=%d, %s)' % (N, opts['seed'], time.asctime())) # + func.__name__\n            if opts['CMA_diagonal'] and self.sp.CMA_on:\n                s = ''\n                if opts['CMA_diagonal'] is not True:\n                    s = ' for '\n                    if opts['CMA_diagonal'] < np.inf:\n                        s += str(int(opts['CMA_diagonal']))\n                    else:\n                        s += str(np.floor(opts['CMA_diagonal']))\n                    s += ' iterations'\n                    s += ' (1/ccov=' + str(round(1./(self.sp.c1+self.sp.cmu))) + ')'\n                print('   Covariance matrix is diagonal' + s)\n\n    #____________________________________________________________\n    #____________________________________________________________\n    def ask(self, number=None, xmean=None, sigma_fac=1):\n        \"\"\"get new candidate solutions, sampled from a multi-variate\n        normal distribution and transformed to f-representation\n        (phenotype) to be evaluated.\n\n        Arguments\n        ---------\n            `number`\n                number of returned solutions, by default the\n                population size ``popsize`` (AKA ``lambda``).\n            `xmean`\n                distribution mean\n            `sigma`\n                multiplier for internal sample width (standard\n                deviation)\n\n        Return\n        ------\n        A list of N-dimensional candidate solutions to be evaluated\n\n        Example\n        -------\n        >>> import cma\n        >>> es = cma.CMAEvolutionStrategy([0,0,0,0], 0.3)\n        >>> while not es.stop() and es.best.f > 1e-6:  # my_desired_target_f_value\n        ...     X = es.ask()  # get list of new solutions\n        ...     fit = [cma.fcts.rosen(x) for x in X]  # call function rosen with each solution\n        ...     es.tell(X, fit)  # feed values\n\n        :See: `ask_and_eval`, `ask_geno`, `tell`\n\n        \"\"\"\n        pop_geno = self.ask_geno(number, xmean, sigma_fac)\n\n\n        # N,lambda=20,200: overall CPU 7s vs 5s == 40% overhead, even without bounds!\n        #                  new data: 11.5s vs 9.5s == 20%\n        # TODO: check here, whether this is necessary?\n        # return [self.gp.pheno(x, copy=False, bounds=self.gp.bounds) for x in pop]  # probably fine\n        # return [Solution(self.gp.pheno(x, copy=False), copy=False) for x in pop]  # here comes the memory leak, now solved\n        # pop_pheno = [Solution(self.gp.pheno(x, copy=False), copy=False).repair(self.gp.bounds) for x in pop_geno]\n        pop_pheno = [self.gp.pheno(x, copy=True, bounds=self.gp.bounds) for x in pop_geno]\n\n        if not self.gp.isidentity or use_sent_solutions:  # costs 25% in CPU performance with N,lambda=20,200\n            # archive returned solutions, first clean up archive\n            if self.countiter % 30/self.popsize**0.5 < 1:\n                self.sent_solutions.truncate(0, self.countiter - 1 - 3 * self.N/self.popsize**0.5)\n            # insert solutions\n            for i in range(len(pop_geno)):\n                self.sent_solutions[pop_pheno[i]] = {'geno': pop_geno[i],\n                                            'pheno': pop_pheno[i],\n                                            'iteration': self.countiter}\n        return pop_pheno\n\n    #____________________________________________________________\n    #____________________________________________________________\n    def ask_geno(self, number=None, xmean=None, sigma_fac=1):\n        \"\"\"get new candidate solutions in genotyp, sampled from a\n        multi-variate normal distribution.\n\n        Arguments are\n            `number`\n                number of returned solutions, by default the\n                population size `popsize` (AKA lambda).\n            `xmean`\n                distribution mean\n            `sigma_fac`\n                multiplier for internal sample width (standard\n                deviation)\n\n        `ask_geno` returns a list of N-dimensional candidate solutions\n        in genotyp representation and is called by `ask`.\n\n        :See: `ask`, `ask_and_eval`\n\n        \"\"\"\n\n        if number is None or number < 1:\n            number = self.sp.popsize\n        if xmean is None:\n            xmean = self.mean\n\n        if self.countiter == 0:\n            self.tic = time.clock()  # backward compatible\n            self.elapsed_time = ElapsedTime()\n\n        if self.opts['CMA_AII']:\n            if self.countiter == 0:\n                self.aii = AII(self.x0, self.sigma0)\n            self.flgtelldone = False\n            pop = self.aii.ask(number)\n            return pop\n\n        sigma = sigma_fac * self.sigma\n\n        # update parameters for sampling the distribution\n        #        fac  0      1      10\n        # 150-D cigar:\n        #           50749  50464   50787\n        # 200-D elli:               == 6.9\n        #                  99900   101160\n        #                 100995   103275 == 2% loss\n        # 100-D elli:               == 6.9\n        #                 363052   369325  < 2% loss\n        #                 365075   365755\n\n        # update distribution\n        if self.sp.CMA_on and (\n                (self.opts['updatecovwait'] is None and\n                 self.countiter >=\n                     self.itereigenupdated + 1./(self.sp.c1+self.sp.cmu)/self.N/10\n                 ) or\n                (self.opts['updatecovwait'] is not None and\n                 self.countiter > self.itereigenupdated + self.opts['updatecovwait']\n                 )):\n            self.updateBD()\n\n        # sample distribution\n        if self.flgtelldone:  # could be done in tell()!?\n            self.flgtelldone = False\n            self.ary = []\n\n        # each row is a solution\n        arz = self.randn((number, self.N))\n        if 11 < 3:  # mutate along the principal axes only\n            perm = np.random.permutation(self.N) # indices for mutated principal component\n            for i in range(min((len(arz), self.N))):\n                # perm = np.random.permutation(self.N)  # random principal component, should be much worse\n                l = sum(arz[i]**2)**0.5\n                arz[i] *= 0\n                if 11 < 3: # mirrored sampling\n                    arz[i][perm[int(i/2)]] = l * (2 * (i % 2) - 1)\n                else:\n                    arz[i][perm[i % self.N]] = l * np.sign(np.random.rand(1) - 0.5)\n        if number == self.sp.popsize:\n            self.arz = arz  # is never used\n        else:\n            pass\n\n        if 11 < 3:  # normalize the length to chiN\n            for i in range(len(arz)):\n                # arz[i] *= exp(self.randn(1)[0] / 8)\n                ss = sum(arz[i]**2)**0.5\n                arz[i] *= self.const.chiN / ss\n            # or to average\n            # arz *= 1 * self.const.chiN / np.mean([sum(z**2)**0.5 for z in arz])\n\n        # fac = np.mean(sum(arz**2, 1)**0.5)\n        # print fac\n        # arz *= self.const.chiN / fac\n        self.ary = self.sigma_vec * np.dot(self.B, (self.D * arz).T).T\n        pop = xmean + sigma * self.ary\n        self.evaluations_per_f_value = 1\n\n        return pop\n\n    def get_mirror(self, x):\n        \"\"\"return ``pheno(self.mean - (geno(x) - self.mean))``.\n\n        TODO: this implementation is yet experimental.\n\n        Selectively mirrored sampling improves to a moderate extend but\n        overadditively with active CMA for quite understandable reasons.\n\n        Optimal number of mirrors are suprisingly small: 1,2,3 for maxlam=7,13,20\n        however note that 3,6,10 are the respective maximal possible mirrors that\n        must be clearly suboptimal.\n\n        \"\"\"\n        try:\n            # dx = x.geno - self.mean, repair or boundary handling is not taken into account\n            dx = self.sent_solutions[x]['geno'] - self.mean\n        except:\n            print('WARNING: use of geno is depreciated')\n            dx = self.gp.geno(x, copy=True) - self.mean\n        dx *= sum(self.randn(self.N)**2)**0.5 / self.mahalanobisNorm(dx)\n        x = self.mean - dx\n        y = self.gp.pheno(x, bounds=self.gp.bounds)\n        if not self.gp.isidentity or use_sent_solutions:  # costs 25% in CPU performance with N,lambda=20,200\n            self.sent_solutions[y] = {'geno': x,\n                                        'pheno': y,\n                                        'iteration': self.countiter}\n        return y\n\n    def mirror_penalized(self, f_values, idx):\n        \"\"\"obsolete and subject to removal (TODO),\n        return modified f-values such that for each mirror one becomes worst.\n\n        This function is useless when selective mirroring is applied with no\n        more than (lambda-mu)/2 solutions.\n\n        Mirrors are leading and trailing values in ``f_values``.\n\n        \"\"\"\n        assert len(f_values) >= 2 * len(idx)\n        m = np.max(np.abs(f_values))\n        for i in len(idx):\n            if f_values[idx[i]] > f_values[-1-i]:\n                f_values[idx[i]] += m\n            else:\n                f_values[-1-i] += m\n        return f_values\n\n    def mirror_idx_cov(self, f_values, idx1):  # will most likely be removed\n        \"\"\"obsolete and subject to removal (TODO),\n        return indices for negative (\"active\") update of the covariance matrix\n        assuming that ``f_values[idx1[i]]`` and ``f_values[-1-i]`` are\n        the corresponding mirrored values\n\n        computes the index of the worse solution sorted by the f-value of the\n        better solution.\n\n        TODO: when the actual mirror was rejected, it is better\n        to return idx1 instead of idx2.\n\n        Remark: this function might not be necessary at all: if the worst solution\n        is the best mirrored, the covariance matrix updates cancel (cave: weights\n        and learning rates), which seems what is desirable. If the mirror is bad,\n        as strong negative update is made, again what is desirable.\n        And the fitness--step-length correlation is in part addressed by\n        using flat weights.\n\n        \"\"\"\n        idx2 = np.arange(len(f_values) - 1, len(f_values) - 1 - len(idx1), -1)\n        f = []\n        for i in range(len(idx1)):\n            f.append(min((f_values[idx1[i]], f_values[idx2[i]])))\n            # idx.append(idx1[i] if f_values[idx1[i]] > f_values[idx2[i]] else idx2[i])\n        return idx2[np.argsort(f)][-1::-1]\n\n    #____________________________________________________________\n    #____________________________________________________________\n    #\n    def ask_and_eval(self, func, args=(), number=None, xmean=None, sigma_fac=1,\n                     evaluations=1, aggregation=np.median):\n        \"\"\"samples `number` solutions and evaluates them on `func`, where\n        each solution `s` is resampled until ``func(s) not in (numpy.NaN, None)``.\n\n        Arguments\n        ---------\n            `func`\n                objective function\n            `args`\n                additional parameters for `func`\n            `number`\n                number of solutions to be sampled, by default\n                population size ``popsize`` (AKA lambda)\n            `xmean`\n                mean for sampling the solutions, by default ``self.mean``.\n            `sigma_fac`\n                multiplier for sampling width, standard deviation, for example\n                to get a small perturbation of solution `xmean`\n            `evaluations`\n                number of evaluations for each sampled solution\n            `aggregation`\n                function that aggregates `evaluations` values to\n                as single value.\n\n        Return\n        ------\n        ``(X, fit)``, where\n            X -- list of solutions\n            fit -- list of respective function values\n\n        Details\n        -------\n        When ``func(x)`` returns `NaN` or `None` a new solution is sampled until\n        ``func(x) not in (numpy.NaN, None)``.  The argument to `func` can be\n        freely modified within `func`.\n\n        Depending on the ``CMA_mirrors`` option, some solutions are not sampled\n        independently but as mirrors of other bad solutions. This is a simple\n        derandomization that can save 10-30% of the evaluations in particular\n        with small populations, for example on the cigar function.\n\n        Example\n        -------\n        >>> import cma\n        >>> x0, sigma0 = 8*[10], 1  # 8-D\n        >>> es = cma.CMAEvolutionStrategy(x0, sigma0)\n        >>> while not es.stop():\n        ...     X, fit = es.ask_and_eval(cma.fcts.elli)  # handles NaN with resampling\n        ...     es.tell(X, fit)  # pass on fitness values\n        ...     es.disp(20) # print every 20-th iteration\n        >>> print('terminated on ' + str(es.stop()))\n        <output omitted>\n\n        A single iteration step can be expressed in one line, such that\n        an entire optimization after initialization becomes\n        ::\n\n            while not es.stop():\n                es.tell(*es.ask_and_eval(cma.fcts.elli))\n\n        \"\"\"\n        # initialize\n        popsize = self.sp.popsize\n        if number is not None:\n            popsize = number\n        selective_mirroring = True\n        nmirrors = self.sp.lam_mirr\n        if popsize != self.sp.popsize:\n            nmirrors = Mh.sround(popsize * self.sp.lam_mirr / self.sp.popsize)\n            # TODO: now selective mirroring might be impaired\n        assert nmirrors <= popsize // 2\n        self.mirrors_idx = np.arange(nmirrors)  # might never be used\n        self.mirrors_rejected_idx = []  # might never be used\n        if xmean is None:\n            xmean = self.mean\n\n        # do the work\n        fit = []  # or np.NaN * np.empty(number)\n        X_first = self.ask(popsize)\n        X = []\n        for k in range(int(popsize)):\n            nreject = -1\n            f = np.NaN\n            while f in (np.NaN, None):  # rejection sampling\n                nreject += 1\n                if k < popsize - nmirrors or nreject:\n                    if nreject:\n                        x = self.ask(1, xmean, sigma_fac)[0]\n                    else:\n                        x = X_first.pop(0)\n                else:  # mirrored sample\n                    if k == popsize - nmirrors and selective_mirroring:\n                        self.mirrors_idx = np.argsort(fit)[-1:-1-nmirrors:-1]\n                    x = self.get_mirror(X[self.mirrors_idx[popsize - 1 - k]])\n                if nreject == 1 and k >= popsize - nmirrors:\n                    self.mirrors_rejected_idx.append(k)\n\n                # contraints handling test hardwired ccccccccccc\n                if 11 < 3 and self.opts['vv'] and nreject < 2:  # trying out negative C-update as constraints handling\n                    if not hasattr(self, 'constraints_paths'):\n                        k = 1\n                        self.constraints_paths = [np.zeros(self.N) for _i in range(k)]\n                    Izero = np.zeros([self.N, self.N])\n                    for i in range(self.N):\n                        if x[i] < 0:\n                            Izero[i][i] = 1\n                            self.C -= self.opts['vv'] * Izero\n                            Izero[i][i] = 0\n                    if 1 < 3 and sum([ (9 + i + 1) * x[i] for i in range(self.N)]) > 50e3:\n                        self.constraints_paths[0] = 0.9 * self.constraints_paths[0] + 0.1 * (x - self.mean) / self.sigma\n                        self.C -= (self.opts['vv'] / self.N) * np.outer(self.constraints_paths[0], self.constraints_paths[0])\n\n                f = func(x, *args)\n                if f not in (np.NaN, None) and evaluations > 1:\n                    f = aggregation([f] + [func(x, *args) for _i in range(int(evaluations-1))])\n                if nreject + 1 % 1000 == 0:\n                    print('  %d solutions rejected (f-value NaN or None) at iteration %d' %\n                          (nreject, self.countiter))\n            fit.append(f)\n            X.append(x)\n        self.evaluations_per_f_value = int(evaluations)\n        return X, fit\n\n\n    #____________________________________________________________\n    def tell(self, solutions, function_values, check_points=None, copy=False):\n        \"\"\"pass objective function values to prepare for next\n        iteration. This core procedure of the CMA-ES algorithm updates\n        all state variables, in particular the two evolution paths, the\n        distribution mean, the covariance matrix and a step-size.\n\n        Arguments\n        ---------\n            `solutions`\n                list or array of candidate solution points (of\n                type `numpy.ndarray`), most presumably before\n                delivered by method `ask()` or `ask_and_eval()`.\n            `function_values`\n                list or array of objective function values\n                corresponding to the respective points. Beside for termination\n                decisions, only the ranking of values in `function_values`\n                is used.\n            `check_points`\n                If ``check_points is None``, only solutions that are not generated\n                by `ask()` are possibly clipped (recommended). ``False`` does not clip\n                any solution (not recommended).\n                If ``True``, clips solutions that realize long steps (i.e. also\n                those that are unlikely to be generated with `ask()`). `check_points`\n                can be a list of indices to be checked in solutions.\n            `copy`\n                ``solutions`` can be modified in this routine, if ``copy is False``\n\n        Details\n        -------\n        `tell()` updates the parameters of the multivariate\n        normal search distribution, namely covariance matrix and\n        step-size and updates also the attributes `countiter` and\n        `countevals`. To check the points for consistency is quadratic\n        in the dimension (like sampling points).\n\n        Bugs\n        ----\n        The effect of changing the solutions delivered by `ask()` depends on whether\n        boundary handling is applied. With boundary handling, modifications are\n        disregarded. This is necessary to apply the default boundary handling that\n        uses unrepaired solutions but might change in future.\n\n        Example\n        -------\n        ::\n\n            import cma\n            func = cma.fcts.elli  # choose objective function\n            es = cma.CMAEvolutionStrategy(cma.np.random.rand(10), 1)\n            while not es.stop():\n               X = es.ask()\n               es.tell(X, [func(x) for x in X])\n            es.result()  # where the result can be found\n\n        :See: class `CMAEvolutionStrategy`, `ask()`, `ask_and_eval()`, `fmin()`\n\n        \"\"\"\n    #____________________________________________________________\n    # TODO: consider an input argument that flags injected trust-worthy solutions (which means\n    #       that they can be treated \"absolut\" rather than \"relative\")\n        if self.flgtelldone:\n            raise _Error('tell should only be called once per iteration')\n\n        lam = len(solutions)\n        if lam != array(function_values).shape[0]:\n            raise _Error('for each candidate solution '\n                        + 'a function value must be provided')\n        if lam + self.sp.lam_mirr < 3:\n            raise _Error('population size ' + str(lam) + ' is too small when option CMA_mirrors * popsize < 0.5')\n\n        if not np.isscalar(function_values[0]):\n            if np.isscalar(function_values[0][0]):\n                if self.countiter <= 1:\n                    print('WARNING: function values are not a list of scalars (further warnings are suppressed)')\n                function_values = [val[0] for val in function_values]\n            else:\n                raise _Error('objective function values must be a list of scalars')\n\n\n        ### prepare\n        N = self.N\n        sp = self.sp\n        if 11 < 3 and lam != sp.popsize:  # turned off, because mu should stay constant, still not desastrous\n            print('WARNING: population size has changed, recomputing parameters')\n            self.sp.set(self.opts, lam)  # not really tested\n        if lam < sp.mu:  # rather decrease cmean instead of having mu > lambda//2\n            raise _Error('not enough solutions passed to function tell (mu>lambda)')\n\n        self.countiter += 1  # >= 1 now\n        self.countevals += sp.popsize * self.evaluations_per_f_value\n        self.best.update(solutions, self.sent_solutions, function_values, self.countevals)\n\n        flgseparable = self.opts['CMA_diagonal'] is True \\\n                       or self.countiter <= self.opts['CMA_diagonal']\n        if not flgseparable and len(self.C.shape) == 1:  # C was diagonal ie 1-D\n            # enter non-separable phase (no easy return from here)\n            self.B = np.eye(N) # identity(N)\n            self.C = np.diag(self.C)\n            idx = np.argsort(self.D)\n            self.D = self.D[idx]\n            self.B = self.B[:,idx]\n            self.Zneg = np.zeros((N, N))\n\n        ### manage fitness\n        fit = self.fit  # make short cut\n\n        # CPU for N,lam=20,200: this takes 10s vs 7s\n        fit.bndpen = self.boundPenalty.update(function_values, self)(solutions, self.sent_solutions, self.gp)\n        # for testing:\n        # fit.bndpen = self.boundPenalty.update(function_values, self)([s.unrepaired for s in solutions])\n        fit.idx = np.argsort(array(fit.bndpen) + array(function_values))\n        fit.fit = array(function_values, copy=False)[fit.idx]\n\n        # update output data TODO: this is obsolete!? However: need communicate current best x-value?\n        # old: out['recent_x'] = self.gp.pheno(pop[0])\n        self.out['recent_x'] = array(solutions[fit.idx[0]])  # TODO: change in a data structure(?) and use current as identify\n        self.out['recent_f'] = fit.fit[0]\n\n        # fitness histories\n        fit.hist.insert(0, fit.fit[0])\n        # if len(self.fit.histbest) < 120+30*N/sp.popsize or  # does not help, as tablet in the beginning is the critical counter-case\n        if ((self.countiter % 5) == 0):  # 20 percent of 1e5 gen.\n            fit.histbest.insert(0, fit.fit[0])\n            fit.histmedian.insert(0, np.median(fit.fit) if len(fit.fit) < 21\n                                    else fit.fit[self.popsize // 2])\n        if len(fit.histbest) > 2e4: # 10 + 30*N/sp.popsize:\n            fit.histbest.pop()\n            fit.histmedian.pop()\n        if len(fit.hist) > 10 + 30*N/sp.popsize:\n            fit.hist.pop()\n\n        if self.opts['CMA_AII']:\n            self.aii.tell(solutions, function_values)\n            self.flgtelldone = True\n            # for output:\n            self.mean = self.aii.mean\n            self.dC = self.aii.sigmai**2\n            self.sigma = self.aii.sigma\n            self.D = 1e-11 + (self.aii.r**2)**0.5\n            self.more_to_write += [self.aii.sigma_r]\n            return\n\n        # TODO: clean up inconsistency when an unrepaired solution is available and used\n        pop = []  # create pop from input argument solutions\n        for s in solutions:  # use phenotype before Solution.repair()\n            if use_sent_solutions:\n                x = self.sent_solutions.pop(s, None)  # 12.7s vs 11.3s with N,lambda=20,200\n                if x is not None:\n                    pop.append(x['geno'])\n                    # TODO: keep additional infos or don't pop s from sent_solutions in the first place\n                else:\n                    # print 'WARNING: solution not found in ``self.sent_solutions`` (is expected for injected solutions)'\n                    pop.append(self.gp.geno(s, copy=copy))  # cannot recover the original genotype with boundary handling\n                    if check_points in (None, True, 1):\n                        self.repair_genotype(pop[-1])  # necessary if pop[-1] was changed or injected by the user.\n            else:  # TODO: to be removed?\n                # print 'WARNING: ``geno`` mapping depreciated'\n                pop.append(self.gp.geno(s, copy=copy))\n                if check_points in (None, True, 1):\n                    self.repair_genotype(pop[-1])  # necessary or not?\n                # print 'repaired'\n\n        mold = self.mean\n        sigma_fac = 1\n\n        # check and normalize each x - m\n        # check_points is a flag (None is default: check non-known solutions) or an index list\n        # should also a number possible (first check_points points)?\n        if check_points not in (None, False, 0, [], ()):  # useful in case of injected solutions and/or adaptive encoding, however is automatic with use_sent_solutions\n            try:\n                if len(check_points):\n                    idx = check_points\n            except:\n                idx = range(sp.popsize)\n\n            for k in idx:\n                self.repair_genotype(pop[k])\n\n        # sort pop\n        if type(pop) is not array: # only arrays can be multiple indexed\n            pop = array(pop, copy=False)\n\n        pop = pop[fit.idx]\n\n        if self.opts['CMA_elitist'] and self.best.f < fit.fit[0]:\n            if self.best.x_geno is not None:\n                xp = [self.best.x_geno]\n                # xp = [self.best.xdict['geno']]\n                # xp = [self.gp.geno(self.best.x[:])]  # TODO: remove\n                # print self.mahalanobisNorm(xp[0]-self.mean)\n                self.clip_or_fit_solutions(xp, [0])\n                pop = array([xp[0]] + list(pop))\n            else:\n                print('genotype for elitist not found')\n\n        # compute new mean\n        self.mean = mold + self.sp.cmean * \\\n                    (sum(sp.weights * pop[0:sp.mu].T, 1) - mold)\n\n\n        # check Delta m (this is not default, but could become at some point)\n        # CAVE: upper_length=sqrt(2)+2 is too restrictive, test upper_length = sqrt(2*N) thoroughly.\n        # simple test case injecting self.mean:\n        # self.mean = 1e-4 * self.sigma * np.random.randn(N)\n        if 11 < 3 and self.opts['vv'] and check_points:  # TODO: check_points might be an index-list\n            cmean = self.sp.cmean / min(1, (sqrt(self.opts['vv']*N)+2) / ( # abuse of cmean\n                (sqrt(self.sp.mueff) / self.sp.cmean) *\n                self.mahalanobisNorm(self.mean - mold)))\n        else:\n            cmean = self.sp.cmean\n\n        if 11 < 3:  # plot length of mean - mold\n            self.more_to_write += [sqrt(sp.mueff) *\n                sum(((1./self.D) * dot(self.B.T, self.mean - mold))**2)**0.5 /\n                       self.sigma / sqrt(N) / cmean]\n\n        # get learning rate constants\n        cc, c1, cmu = sp.cc, sp.c1, sp.cmu\n        if flgseparable:\n            cc, c1, cmu = sp.cc_sep, sp.c1_sep, sp.cmu_sep\n\n        # now the real work can start\n\n        # evolution paths\n        self.ps = (1-sp.cs) * self.ps + \\\n                  (sqrt(sp.cs*(2-sp.cs)*sp.mueff)  / self.sigma / cmean) * \\\n                  dot(self.B, (1./self.D) * dot(self.B.T, (self.mean - mold) / self.sigma_vec))\n\n        # \"hsig\", correction with self.countiter seems not necessary, also pc starts with zero\n        hsig = sum(self.ps**2) / (1-(1-sp.cs)**(2*self.countiter)) / self.N < 2 + 4./(N+1)\n        if 11 < 3:\n            # hsig = 1\n            # sp.cc = 4 / (N + 4)\n            # sp.cs = 4 / (N + 4)\n            # sp.cc = 1\n            # sp.damps = 2  #\n            # sp.CMA_on = False\n            # c1 = 0  # 2 / ((N + 1.3)**2 + 0 * sp.mu) # 1 / N**2\n            # cmu = min([1 - c1, cmu])\n            if self.countiter == 1:\n                print('parameters modified')\n        # hsig = sum(self.ps**2) / self.N < 2 + 4./(N+1)\n        # adjust missing variance due to hsig, in 4-D with damps=1e99 and sig0 small\n        #       hsig leads to premature convergence of C otherwise\n        #hsiga = (1-hsig**2) * c1 * cc * (2-cc)  # to be removed in future\n        c1a = c1 - (1-hsig**2) * c1 * cc * (2-cc)  # adjust for variance loss\n\n        if 11 < 3:  # diagnostic data\n            self.out['hsigcount'] += 1 - hsig\n            if not hsig:\n                self.hsiglist.append(self.countiter)\n        if 11 < 3:  # diagnostic message\n            if not hsig:\n                print(str(self.countiter) + ': hsig-stall')\n        if 11 < 3:  # for testing purpose\n            hsig = 1 # TODO:\n            #       put correction term, but how?\n            if self.countiter == 1:\n                print('hsig=1')\n\n        self.pc = (1-cc) * self.pc + \\\n                  hsig * (sqrt(cc*(2-cc)*sp.mueff) / self.sigma / cmean) * \\\n                  (self.mean - mold)  / self.sigma_vec\n\n        # covariance matrix adaptation/udpate\n        if sp.CMA_on:\n            # assert sp.c1 + sp.cmu < sp.mueff / N  # ??\n            assert c1 + cmu <= 1\n\n            # default full matrix case\n            if not flgseparable:\n                Z = (pop[0:sp.mu] - mold) / (self.sigma * self.sigma_vec)\n                Z = dot((cmu * sp.weights) * Z.T, Z)  # learning rate integrated\n                if self.sp.neg.cmuexp:\n                    tmp = (pop[-sp.neg.mu:] - mold) / (self.sigma * self.sigma_vec)\n                    self.Zneg *= 1 - self.sp.neg.cmuexp  # for some reason necessary?\n                    self.Zneg += dot(sp.neg.weights * tmp.T, tmp) - self.C\n                    # self.update_exponential(dot(sp.neg.weights * tmp.T, tmp) - 1 * self.C, -1*self.sp.neg.cmuexp)\n\n                if 11 < 3: # ?3 to 5 times slower??\n                    Z = np.zeros((N,N))\n                    for k in range(sp.mu):\n                        z = (pop[k]-mold)\n                        Z += np.outer((cmu * sp.weights[k] / (self.sigma * self.sigma_vec)**2) * z, z)\n\n                self.C *= 1 - c1a - cmu\n                self.C += np.outer(c1 * self.pc, self.pc) + Z\n                self.dC = np.diag(self.C)  # for output and termination checking\n\n            else: # separable/diagonal linear case\n                assert(c1+cmu <= 1)\n                Z = np.zeros(N)\n                for k in range(sp.mu):\n                    z = (pop[k]-mold) / (self.sigma * self.sigma_vec) # TODO see above\n                    Z += sp.weights[k] * z * z  # is 1-D\n                self.C = (1-c1a-cmu) * self.C + c1 * self.pc * self.pc + cmu * Z\n                # TODO: self.C *= exp(cmuneg * (N - dot(sp.neg.weights,  **2)\n                self.dC = self.C\n                self.D = sqrt(self.C)  # C is a 1-D array\n                self.itereigenupdated = self.countiter\n\n                # idx = self.mirror_idx_cov()  # take half of mirrored vectors for negative update\n\n        # qqqqqqqqqqq\n        if 1 < 3 and np.isfinite(sp.dampsvec):\n            if self.countiter == 1:\n                print(\"WARNING: CMA_dampsvec option is experimental\")\n            sp.dampsvec *= np.exp(sp.dampsvec_fading/self.N)\n            # TODO: rank-lambda update: *= (1 + sum(z[z>1]**2-1) * exp(sum(z[z<1]**2-1))\n            self.sigma_vec *= np.exp((sp.cs/sp.dampsvec/2) * (self.ps**2 - 1))\n            # self.sigma_vec *= np.exp((sp.cs/sp.dampsvec) * (abs(self.ps) - (2/np.pi)**0.5))\n            self.more_to_write += [exp(np.mean((self.ps**2 - 1)**2))]\n            # TODO: rank-mu update\n\n        # step-size adaptation, adapt sigma\n        if 1 < 3:  #\n            self.sigma *= sigma_fac * \\\n                            np.exp((min((1, (sp.cs/sp.damps) *\n                                    (sqrt(sum(self.ps**2))/self.const.chiN - 1)))))\n        else:\n            self.sigma *= sigma_fac * \\\n                            np.exp((min((1000, (sp.cs/sp.damps/2) *\n                                    (sum(self.ps**2)/N - 1)))))\n        if 11 < 3:\n            # derandomized MSR = natural gradient descent using mean(z**2) instead of mu*mean(z)**2\n            lengths = array([sum(z**2)**0.5 for z in self.arz[fit.idx[:self.sp.mu]]])\n            # print lengths[0::int(self.sp.mu/5)]\n            self.sigma *= np.exp(self.sp.mueff**0.5 * dot(self.sp.weights, lengths / self.const.chiN - 1))**(2/(N+1))\n\n        if 11 < 3 and self.opts['vv']:\n            if self.countiter < 2:\n                print('constant sigma applied')\n                print(self.opts['vv'])  # N=10,lam=10: 0.8 is optimal\n            self.sigma = self.opts['vv'] * self.sp.mueff * sum(self.mean**2)**0.5 / N\n\n        if self.sigma * min(self.dC)**0.5 < self.opts['minstd']:\n            self.sigma = self.opts['minstd'] / min(self.dC)**0.5\n        # g = self.countiter\n        # N = self.N\n        mindx = eval(self.opts['mindx']) if type(self.opts['mindx']) == type('') else self.opts['mindx']\n        if self.sigma * min(self.D) < mindx:  # TODO: sigma_vec is missing here\n            self.sigma = mindx / min(self.D)\n\n        if self.sigma > 1e9 * self.sigma0:\n            alpha = self.sigma / max(self.D)\n            self.multiplyC(alpha)\n            self.sigma /= alpha**0.5\n            self.opts['tolupsigma'] /= alpha**0.5  # to be compared with sigma\n\n        # TODO increase sigma in case of a plateau?\n\n        # Uncertainty noise measurement is done on an upper level\n\n        # output, has moved up, e.g. as part of fmin, TODO to be removed\n        if 11 < 3 and self.opts['verb_log'] > 0 and (self.countiter < 4 or\n                                          self.countiter % self.opts['verb_log'] == 0):\n            # this assumes that two logger with the same name access the same data!\n            CMADataLogger(self.opts['verb_filenameprefix']).register(self, append=True).add()\n            # self.writeOutput(solutions[fit.idx[0]])\n\n        self.flgtelldone = True\n    # end tell()\n\n    def result(self):\n        \"\"\"return ``(xbest, f(xbest), evaluations_xbest, evaluations, iterations, pheno(xmean), effective_stds)``\"\"\"\n        # TODO: how about xcurrent?\n        return self.best.get() + (\n            self.countevals, self.countiter, self.gp.pheno(self.mean), self.gp.scales * self.sigma * self.sigma_vec * self.dC**0.5)\n\n    def clip_or_fit_solutions(self, pop, idx):\n        \"\"\"make sure that solutions fit to sample distribution, this interface will probably change.\n\n        In particular the frequency of long vectors appearing in pop[idx] - self.mean is limited.\n\n        \"\"\"\n        for k in idx:\n            self.repair_genotype(pop[k])\n\n    def repair_genotype(self, x):\n        \"\"\"make sure that solutions fit to sample distribution, this interface will probably change.\n\n        In particular the frequency of x - self.mean being long is limited.\n\n        \"\"\"\n        mold = self.mean\n        if 1 < 3:  # hard clip at upper_length\n            upper_length = self.N**0.5 + 2 * self.N / (self.N+2)  # should become an Option, but how? e.g. [0, 2, 2]\n            fac = self.mahalanobisNorm(x - mold) / upper_length\n\n            if fac > 1:\n                x = (x - mold) / fac + mold\n                # print self.countiter, k, fac, self.mahalanobisNorm(pop[k] - mold)\n                # adapt also sigma: which are the trust-worthy/injected solutions?\n            elif 11 < 3:\n                return exp(np.tanh(((upper_length*fac)**2/self.N-1)/2) / 2)\n        else:\n            if 'checktail' not in self.__dict__:  # hasattr(self, 'checktail')\n                raise NotImplementedError\n                # from check_tail_smooth import CheckTail  # for the time being\n                # self.checktail = CheckTail()\n                # print('untested feature checktail is on')\n            fac = self.checktail.addchin(self.mahalanobisNorm(x - mold))\n\n            if fac < 1:\n                x = fac * (x - mold) + mold\n\n        return 1.0  # sigma_fac, not in use\n\n\n    #____________________________________________________________\n    #____________________________________________________________\n    #\n    def updateBD(self):\n        \"\"\"update internal variables for sampling the distribution with the\n        current covariance matrix C. This method is O(N^3), if C is not diagonal.\n\n        \"\"\"\n        # itereigenupdated is always up-to-date in the diagonal case\n        # just double check here\n        if self.itereigenupdated == self.countiter:\n            return\n\n        if self.sp.neg.cmuexp:  # cave:\n            self.update_exponential(self.Zneg, -self.sp.neg.cmuexp)\n            # self.C += self.Zpos  # pos update after Zneg would be the correct update, overall:\n            # self.C = self.Zpos + Cs * Mh.expms(-self.sp.neg.cmuexp*Csi*self.Zneg*Csi) * Cs\n            self.Zneg = np.zeros((self.N, self.N))\n\n        if self.sigma_vec is not 1 and not np.all(self.sigma_vec == 1):\n            self.C = dot(dot(np.diag(self.sigma_vec), self.C), np.diag(self.sigma_vec))\n            self.sigma_vec[:] = 1\n\n        if self.opts['CMA_const_trace'] in (True, 1, 2):  # normalize trace of C\n            if self.opts['CMA_const_trace'] == 2:\n                s = np.exp(np.mean(np.log(self.dC)))\n            else:\n                s = np.mean(self.dC)\n            self.C /= s\n            self.dC /= s\n        self.C = (self.C + self.C.T) / 2\n        # self.C = np.triu(self.C) + np.triu(self.C,1).T  # should work as well\n        # self.D, self.B = eigh(self.C) # hermitian, ie symmetric C is assumed\n\n        if type(self.opts['CMA_eigenmethod']) == type(1):\n            print('WARNING: option CMA_eigenmethod should be a function, not an integer')\n            if self.opts['CMA_eigenmethod'] == -1:\n                # pygsl\n                # easy to install (well, in Windows install gsl binaries first,\n                # set system path to respective libgsl-0.dll (or cp the dll to\n                # python\\DLLS ?), in unzipped pygsl edit\n                # gsl_dist/gsl_site_example.py into gsl_dist/gsl_site.py\n                # and run \"python setup.py build\" and \"python setup.py install\"\n                # in MINGW32)\n                if 1 < 3:  # import pygsl on the fly\n                    try:\n                        import pygsl.eigen.eigenvectors  # TODO efficient enough?\n                    except ImportError:\n                        print('WARNING: could not find pygsl.eigen module, either install pygsl \\n' +\n                              '  or set option CMA_eigenmethod=1 (is much slower), option set to 1')\n                        self.opts['CMA_eigenmethod'] = 0  # use 0 if 1 is too slow\n\n                    self.D, self.B = pygsl.eigen.eigenvectors(self.C)\n\n            elif self.opts['CMA_eigenmethod'] == 0:\n                # TODO: thoroughly test np.linalg.eigh\n                #       numpy.linalg.eig crashes in 200-D\n                #       and EVecs with same EVals are not orthogonal\n                self.D, self.B = np.linalg.eigh(self.C)  # self.B[i] is a row and not an eigenvector\n            else:  # is overall two;ten times slower in 10;20-D\n                self.D, self.B = Misc.eig(self.C)  # def eig, see below\n        else:\n            self.D, self.B = self.opts['CMA_eigenmethod'](self.C)\n\n\n        # assert(sum(self.D-DD) < 1e-6)\n        # assert(sum(sum(np.dot(BB, BB.T)-np.eye(self.N))) < 1e-6)\n        # assert(sum(sum(np.dot(BB * DD, BB.T) - self.C)) < 1e-6)\n        idx = np.argsort(self.D)\n        self.D = self.D[idx]\n        self.B = self.B[:,idx]  # self.B[i] is a row, columns self.B[:,i] are eigenvectors\n        # assert(all(self.B[self.countiter % self.N] == self.B[self.countiter % self.N,:]))\n\n        # qqqqqqqqqq\n        if 11 < 3:  # limit condition number to 1e13\n            climit = 1e13  # cave: conditioncov termination is 1e14\n            if self.D[-1] / self.D[0] > climit:\n                self.D += self.D[-1] / climit\n            for i in range(self.N):\n                self.C[i][i] += self.D[-1] / climit\n\n        if 11 < 3 and any(abs(sum(self.B[:,0:self.N-1] * self.B[:,1:], 0)) > 1e-6):\n            print('B is not orthogonal')\n            print(self.D)\n            print(sum(self.B[:,0:self.N-1] * self.B[:,1:], 0))\n        else:\n            # is O(N^3)\n            # assert(sum(abs(self.C - np.dot(self.D * self.B,  self.B.T))) < N**2*1e-11)\n            pass\n        self.D **= 0.5\n        self.itereigenupdated = self.countiter\n\n    def multiplyC(self, alpha):\n        \"\"\"multiply C with a scalar and update all related internal variables (dC, D,...)\"\"\"\n        self.C *= alpha\n        if self.dC is not self.C:\n            self.dC *= alpha\n        self.D *= alpha**0.5\n    def update_exponential(self, Z, eta, BDpair=None):\n        \"\"\"exponential update of C that guarantees positive definiteness, that is,\n        instead of the assignment ``C = C + eta * Z``,\n        C gets C**.5 * exp(eta * C**-.5 * Z * C**-.5) * C**.5.\n\n        Parameter Z should have expectation zero, e.g. sum(w[i] * z[i] * z[i].T) - C\n        if E z z.T = C.\n\n        This function conducts two eigendecompositions, assuming that\n        B and D are not up to date, unless `BDpair` is given. Given BDpair,\n        B is the eigensystem and D is the vector of sqrt(eigenvalues), one\n        eigendecomposition is omitted.\n\n        Reference: Glasmachers et al 2010, Exponential Natural Evolution Strategies\n\n        \"\"\"\n        if eta == 0:\n            return\n        if BDpair:\n            B, D = BDpair\n        else:\n            D, B = self.opts['CMA_eigenmethod'](self.C)\n            D **= 0.5\n        Csi = dot(B, (B / D).T)\n        Cs = dot(B, (B * D).T)\n        self.C = dot(Cs, dot(Mh.expms(eta * dot(Csi, dot(Z, Csi)), self.opts['CMA_eigenmethod']), Cs))\n\n    #____________________________________________________________\n    #____________________________________________________________\n    #\n    def _updateCholesky(self, A, Ainv, p, alpha, beta):\n        \"\"\"not yet implemented\"\"\"\n        # BD is A, p is A*Normal(0,I) distributed\n        # input is assumed to be numpy arrays\n        # Ainv is needed to compute the evolution path\n        # this is a stump and is not tested\n\n        raise _Error(\"not yet implemented\")\n        # prepare\n        alpha = float(alpha)\n        beta = float(beta)\n        y = np.dot(Ainv, p)\n        y_sum = sum(y**2)\n\n        # compute scalars\n        tmp = sqrt(1 + beta * y_sum / alpha)\n        fac = (sqrt(alpha) / sum(y**2)) * (tmp - 1)\n        facinv = (1. / (sqrt(alpha) * sum(y**2))) * (1 - 1. / tmp)\n\n        # update matrices\n        A *= sqrt(alpha)\n        A += np.outer(fac * p, y)\n        Ainv /= sqrt(alpha)\n        Ainv -= np.outer(facinv * y, np.dot(y.T, Ainv))\n\n    #____________________________________________________________\n    #____________________________________________________________\n    def feedForResume(self, X, function_values):\n        \"\"\"Given all \"previous\" candidate solutions and their respective\n        function values, the state of a `CMAEvolutionStrategy` object\n        can be reconstructed from this history. This is the purpose of\n        function `feedForResume`.\n\n        Arguments\n        ---------\n            `X`\n              (all) solution points in chronological order, phenotypic\n              representation. The number of points must be a multiple\n              of popsize.\n            `function_values`\n              respective objective function values\n\n        Details\n        -------\n        `feedForResume` can be called repeatedly with only parts of\n        the history. The part must have the length of a multiple\n        of the population size.\n        `feedForResume` feeds the history in popsize-chunks into `tell`.\n        The state of the random number generator might not be\n        reconstructed, but this would be only relevant for the future.\n\n        Example\n        -------\n        ::\n\n            import cma\n\n            # prepare\n            (x0, sigma0) = ... # initial values from previous trial\n            X = ... # list of generated solutions from a previous trial\n            f = ... # respective list of f-values\n\n            # resume\n            es = cma.CMAEvolutionStrategy(x0, sigma0)\n            es.feedForResume(X, f)\n\n            # continue with func as objective function\n            while not es.stop():\n               X = es.ask()\n               es.tell(X, [func(x) for x in X])\n\n        Credits to Dirk Bueche and Fabrice Marchal for the feeding idea.\n\n        :See: class `CMAEvolutionStrategy` for a simple dump/load to resume\n\n        \"\"\"\n        if self.countiter > 0:\n            print('WARNING: feed should generally be used with a new object instance')\n        if len(X) != len(function_values):\n            raise _Error('number of solutions ' + str(len(X)) +\n                ' and number function values ' +\n                str(len(function_values))+' must not differ')\n        popsize = self.sp.popsize\n        if (len(X) % popsize) != 0:\n            raise _Error('number of solutions ' + str(len(X)) +\n                    ' must be a multiple of popsize (lambda) ' +\n                    str(popsize))\n        for i in range(len(X) / popsize):\n            # feed in chunks of size popsize\n            self.ask()  # a fake ask, mainly for a conditioned calling of updateBD\n                        # and secondary to get possibly the same random state\n            self.tell(X[i*popsize:(i+1)*popsize], function_values[i*popsize:(i+1)*popsize])\n\n    #____________________________________________________________\n    #____________________________________________________________\n    def readProperties(self):\n        \"\"\"reads dynamic parameters from property file (not implemented)\n        \"\"\"\n        print('not yet implemented')\n\n    #____________________________________________________________\n    #____________________________________________________________\n    def mahalanobisNorm(self, dx):\n        \"\"\"\n        compute the Mahalanobis norm that is induced by the adapted covariance\n        matrix C times sigma**2.\n\n        Argument\n        --------\n        A *genotype* difference `dx`.\n\n        Example\n        -------\n        >>> import cma, numpy\n        >>> es = cma.CMAEvolutionStrategy(numpy.ones(10), 1)\n        >>> xx = numpy.random.randn(2, 10)\n        >>> d = es.mahalanobisNorm(es.gp.geno(xx[0]-xx[1]))\n\n        `d` is the distance \"in\" the true sample distribution,\n        sampled points have a typical distance of ``sqrt(2*es.N)``,\n        where `N` is the dimension. In the example, `d` is the\n        Euclidean distance, because C = I and sigma = 1.\n\n        \"\"\"\n        return sqrt(sum((self.D**-1 * np.dot(self.B.T, dx))**2)) / self.sigma\n\n    #____________________________________________________________\n    #____________________________________________________________\n    #\n    def timesCroot(self, mat):\n        \"\"\"return C**0.5 times mat, where mat can be a vector or matrix.\n        Not functional, because _Croot=C**0.5 is never computed (should be in updateBD)\n        \"\"\"\n        print(\"WARNING: timesCroot is not yet tested\")\n        if self.opts['CMA_diagonal'] is True \\\n                       or self.countiter <= self.opts['CMA_diagonal']:\n            res = (self._Croot * mat.T).T\n        else:\n            res = np.dot(self._Croot, mat)\n        return res\n    def divCroot(self, mat):\n        \"\"\"return C**-1/2 times mat, where mat can be a vector or matrix\"\"\"\n        print(\"WARNING: divCroot is not yet tested\")\n        if self.opts['CMA_diagonal'] is True \\\n                       or self.countiter <= self.opts['CMA_diagonal']:\n            res = (self._Crootinv * mat.T).T\n        else:\n            res = np.dot(self._Crootinv, mat)\n        return res\n\n    #____________________________________________________________\n    #____________________________________________________________\n    def disp_annotation(self):\n        \"\"\"print annotation for `disp()`\"\"\"\n        print('Iterat #Fevals   function value     axis ratio  sigma   minstd maxstd min:sec')\n        sys.stdout.flush()\n\n    #____________________________________________________________\n    #____________________________________________________________\n    def disp(self, modulo=None):  # TODO: rather assign opt['verb_disp'] as default?\n        \"\"\"prints some infos according to `disp_annotation()`, if\n        ``iteration_counter % modulo == 0``\n\n        \"\"\"\n        if modulo is None:\n            modulo = self.opts['verb_disp']\n\n        # console display\n        if modulo:\n            if (self.countiter-1) % (10 * modulo) < 1:\n                self.disp_annotation()\n            if self.countiter > 0 and (self.stop() or self.countiter < 4\n                              or self.countiter % modulo < 1):\n                if self.opts['verb_time']:\n                    toc = self.elapsed_time()\n                    stime = str(int(toc//60))+':'+str(round(toc%60,1))\n                else:\n                    stime = ''\n                print(' '.join((repr(self.countiter).rjust(5),\n                                repr(self.countevals).rjust(7),\n                                '%.15e' % (min(self.fit.fit)),\n                                '%4.1e' % (self.D.max()/self.D.min()),\n                                '%6.2e' % self.sigma,\n                                '%6.0e' % (self.sigma * sqrt(min(self.dC))),\n                                '%6.0e' % (self.sigma * sqrt(max(self.dC))),\n                                stime)))\n                # if self.countiter < 4:\n                sys.stdout.flush()\n\nclass Options(dict):\n    \"\"\"``Options()`` returns a dictionary with the available options and their\n    default values for function fmin and for class CMAEvolutionStrategy.\n\n    ``Options(opts)`` returns the subset of recognized options in dict(opts).\n\n    ``Options('pop')`` returns a subset of recognized options that contain\n    'pop' in there keyword name, value or description.\n\n    Option values can be \"written\" in a string and, when passed to fmin\n    or CMAEvolutionStrategy, are evaluated using \"N\" and \"popsize\" as\n    known values for dimension and population size (sample size, number\n    of new solutions per iteration). All default option values are such\n    a string.\n\n    Details\n    -------\n    All Options are originally defined via the input arguments of\n    `fmin()`.\n\n    Options starting with ``tol`` are termination \"tolerances\".\n\n    For `tolstagnation`, the median over the first and the second half\n    of at least `tolstagnation` iterations are compared for both, the\n    per-iteration best and per-iteration median function value.\n    Some options are, as mentioned (`restarts`,...), only used with `fmin`.\n\n    Example\n    -------\n    ::\n\n        import cma\n        cma.Options('tol')\n\n    is a shortcut for cma.Options().match('tol') that returns all options\n    that contain 'tol' in their name or description.\n\n    :See: `fmin`(), `CMAEvolutionStrategy`, `CMAParameters`\n\n    \"\"\"\n\n    # @classmethod # self is the class, not the instance\n    # @property\n    # def default(self):\n    #     \"\"\"returns all options with defaults\"\"\"\n    #     return fmin([],[])\n\n    @staticmethod\n    def defaults():\n        \"\"\"return a dictionary with default option values and description,\n        calls `fmin([], [])`\"\"\"\n        return fmin([], [])\n\n    @staticmethod\n    def versatileOptions():\n        \"\"\"return list of options that can be changed at any time (not only be\n        initialized), however the list might not be entirely up to date. The\n        string ' #v ' in the default value indicates a 'versatile' option\n        that can be changed any time.\n\n        \"\"\"\n        return tuple(sorted(i[0] for i in list(Options.defaults().items()) if i[1].find(' #v ') > 0))\n\n    def __init__(self, s=None, unchecked=False):\n        \"\"\"return an `Options` instance, either with the default options,\n        if ``s is None``, or with all options whose name or description\n        contains `s`, if `s` is a string (case is disregarded),\n        or with entries from dictionary `s` as options, not complemented\n        with default options or settings\n\n        Returns: see above.\n\n        \"\"\"\n        # if not Options.defaults:  # this is different from self.defaults!!!\n        #     Options.defaults = fmin([],[])\n        if s is None:\n            super(Options, self).__init__(Options.defaults())\n            # self = Options.defaults()\n        elif type(s) is str:\n            super(Options, self).__init__(Options().match(s))\n            # we could return here\n        else:\n            super(Options, self).__init__(s)\n\n        if not unchecked:\n            for key in list(self.keys()):\n                if key not in Options.defaults():\n                    print('Warning in cma.Options.__init__(): invalid key ``' + str(key) + '`` popped')\n                    self.pop(key)\n        # self.evaluated = False  # would become an option entry\n\n    def init(self, dict_or_str, val=None, warn=True):\n        \"\"\"initialize one or several options.\n\n        Arguments\n        ---------\n            `dict_or_str`\n                a dictionary if ``val is None``, otherwise a key.\n                If `val` is provided `dict_or_str` must be a valid key.\n            `val`\n                value for key\n\n        Details\n        -------\n        Only known keys are accepted. Known keys are in `Options.defaults()`\n\n        \"\"\"\n        #dic = dict_or_key if val is None else {dict_or_key:val}\n        dic = dict_or_str\n        if val is not None:\n            dic = {dict_or_str:val}\n\n        for key, val in list(dic.items()):\n            if key not in Options.defaults():\n                # TODO: find a better solution?\n                if warn:\n                    print('Warning in cma.Options.init(): key ' +\n                        str(key) + ' ignored')\n            else:\n                self[key] = val\n\n        return self\n\n    def set(self, dic, val=None, warn=True):\n        \"\"\"set can assign versatile options from `Options.versatileOptions()`\n        with a new value, use `init()` for the others.\n\n        Arguments\n        ---------\n            `dic`\n                either a dictionary or a key. In the latter\n                case, val must be provided\n            `val`\n                value for key\n            `warn`\n                bool, print a warning if the option cannot be changed\n                and is therefore omitted\n\n        This method will be most probably used with the ``opts`` attribute of\n        a `CMAEvolutionStrategy` instance.\n\n        \"\"\"\n        if val is not None:  # dic is a key in this case\n            dic = {dic:val}  # compose a dictionary\n        for key, val in list(dic.items()):\n            if key in Options.versatileOptions():\n                self[key] = val\n            elif warn:\n                print('Warning in cma.Options.set(): key ' + str(key) + ' ignored')\n        return self  # to allow o = Options(o).set(new)\n\n    def complement(self):\n        \"\"\"add all missing options with their default values\"\"\"\n\n        for key in Options.defaults():\n            if key not in self:\n                self[key] = Options.defaults()[key]\n        return self\n\n    def settable(self):\n        \"\"\"return the subset of those options that are settable at any\n        time.\n\n        Settable options are in `versatileOptions()`, but the\n        list might be incomlete.\n\n        \"\"\"\n        return Options([i for i in list(self.items())\n                                if i[0] in Options.versatileOptions()])\n\n    def __call__(self, key, default=None, loc=None):\n        \"\"\"evaluate and return the value of option `key` on the fly, or\n        returns those options whose name or description contains `key`,\n        case disregarded.\n\n        Details\n        -------\n        Keys that contain `filename` are not evaluated.\n        For ``loc==None``, `self` is used as environment\n        but this does not define `N`.\n\n        :See: `eval()`, `evalall()`\n\n        \"\"\"\n        try:\n            val = self[key]\n        except:\n            return self.match(key)\n\n        if loc is None:\n            loc = self  # TODO: this hack is not so useful: popsize could be there, but N is missing\n        try:\n            if type(val) is str:\n                val = val.split('#')[0].strip()  # remove comments\n                if type(val) == type('') and key.find('filename') < 0 and key.find('mindx') < 0:\n                    val = eval(val, globals(), loc)\n            # invoke default\n            # TODO: val in ... fails with array type, because it is applied element wise!\n            # elif val in (None,(),[],{}) and default is not None:\n            elif val is None and default is not None:\n                val = eval(str(default), globals(), loc)\n        except:\n            pass  # slighly optimistic: the previous is bug-free\n        return val\n\n    def eval(self, key, default=None, loc=None):\n        \"\"\"Evaluates and sets the specified option value in\n        environment `loc`. Many options need `N` to be defined in\n        `loc`, some need `popsize`.\n\n        Details\n        -------\n        Keys that contain 'filename' are not evaluated.\n        For `loc` is None, the self-dict is used as environment\n\n        :See: `evalall()`, `__call__`\n\n        \"\"\"\n        self[key] = self(key, default, loc)\n        return self[key]\n\n    def evalall(self, loc=None):\n        \"\"\"Evaluates all option values in environment `loc`.\n\n        :See: `eval()`\n\n        \"\"\"\n        # TODO: this needs rather the parameter N instead of loc\n        if 'N' in list(loc.keys()):  # TODO: __init__ of CMA can be simplified\n            popsize = self('popsize', Options.defaults()['popsize'], loc)\n            for k in list(self.keys()):\n                self.eval(k, Options.defaults()[k],\n                          {'N':loc['N'], 'popsize':popsize})\n        return self\n\n    def match(self, s=''):\n        \"\"\"return all options that match, in the name or the description,\n        with string `s`, case is disregarded.\n\n        Example: ``cma.Options().match('verb')`` returns the verbosity options.\n\n        \"\"\"\n        match = s.lower()\n        res = {}\n        for k in sorted(self):\n            s = str(k) + '=\\'' + str(self[k]) + '\\''\n            if match in s.lower():\n                res[k] = self[k]\n        return Options(res)\n\n    def pp(self):\n        pprint(self)\n\n    def printme(self, linebreak=80):\n        for i in sorted(Options.defaults().items()):\n            s = str(i[0]) + \"='\" + str(i[1]) + \"'\"\n            a = s.split(' ')\n\n            # print s in chunks\n            l = ''  # start entire to the left\n            while a:\n                while a and len(l) + len(a[0]) < linebreak:\n                    l += ' ' + a.pop(0)\n                print(l)\n                l = '        '  # tab for subsequent lines\n\n#____________________________________________________________\n#____________________________________________________________\nclass CMAParameters(object):\n    \"\"\"strategy parameters like population size and learning rates.\n\n    Note:\n        contrary to `Options`, `CMAParameters` is not (yet) part of the\n        \"user-interface\" and subject to future changes (it might become\n        a `collections.namedtuple`)\n\n    Example\n    -------\n    >>> import cma\n    >>> es = cma.CMAEvolutionStrategy(20 * [0.1], 1)\n    (6_w,12)-CMA-ES (mu_w=3.7,w_1=40%) in dimension 20 (seed=504519190)  # the seed is \"random\" by default\n    >>>\n    >>> type(es.sp)  # sp contains the strategy parameters\n    <class 'cma.CMAParameters'>\n    >>>\n    >>> es.sp.disp()\n    {'CMA_on': True,\n     'N': 20,\n     'c1': 0.004181139918745593,\n     'c1_sep': 0.034327992810300939,\n     'cc': 0.17176721127681213,\n     'cc_sep': 0.25259494835857677,\n     'cmean': 1.0,\n     'cmu': 0.0085149624979034746,\n     'cmu_sep': 0.057796356229390715,\n     'cs': 0.21434997799189287,\n     'damps': 1.2143499779918929,\n     'mu': 6,\n     'mu_f': 6.0,\n     'mueff': 3.7294589343030671,\n     'popsize': 12,\n     'rankmualpha': 0.3,\n     'weights': array([ 0.40240294,  0.25338908,  0.16622156,  0.10437523,  0.05640348,\n            0.01720771])}\n    >>>\n    >> es.sp == cma.CMAParameters(20, 12, cma.Options().evalall({'N': 20}))\n    True\n\n    :See: `Options`, `CMAEvolutionStrategy`\n\n    \"\"\"\n    def __init__(self, N, opts, ccovfac=1, verbose=True):\n        \"\"\"Compute strategy parameters, mainly depending on\n        dimension and population size, by calling `set`\n\n        \"\"\"\n        self.N = N\n        if ccovfac == 1:\n            ccovfac = opts['CMA_on']  # that's a hack\n        self.set(opts, ccovfac=ccovfac, verbose=verbose)\n\n    def set(self, opts, popsize=None, ccovfac=1, verbose=True):\n        \"\"\"Compute strategy parameters as a function\n        of dimension and population size \"\"\"\n\n        alpha_cc = 1.0  # cc-correction for mueff, was zero before\n\n        def cone(df, mu, N, alphacov=2.0):\n            \"\"\"rank one update learning rate, ``df`` is disregarded and obsolete, reduce alphacov on noisy problems, say to 0.5\"\"\"\n            return alphacov / ((N + 1.3)**2 + mu)\n\n        def cmu(df, mu, alphamu=0.0, alphacov=2.0):\n            \"\"\"rank mu learning rate, disregarding the constrant cmu <= 1 - cone\"\"\"\n            c = alphacov * (alphamu + mu - 2 + 1/mu) / ((N + 2)**2 + alphacov * mu / 2)\n            # c = alphacov * (alphamu + mu - 2 + 1/mu) / (2 * (N + 2)**1.5 + alphacov * mu / 2)\n            # print 'cmu =', c\n            return c\n\n        def conedf(df, mu, N):\n            \"\"\"used for computing separable learning rate\"\"\"\n            return 1. / (df + 2.*sqrt(df) + float(mu)/N)\n\n        def cmudf(df, mu, alphamu):\n            \"\"\"used for computing separable learning rate\"\"\"\n            return (alphamu + mu - 2. + 1./mu) / (df + 4.*sqrt(df) + mu/2.)\n\n        sp = self\n        N = sp.N\n        if popsize:\n            opts.evalall({'N':N, 'popsize':popsize})\n        else:\n            popsize = opts.evalall({'N':N})['popsize']  # the default popsize is computed in Options()\n        sp.popsize = popsize\n        if opts['CMA_mirrors'] < 0.5:\n            sp.lam_mirr = int(0.5 + opts['CMA_mirrors'] * popsize)\n        elif opts['CMA_mirrors'] > 1:\n            sp.lam_mirr = int(0.5 + opts['CMA_mirrors'])\n        else:\n            sp.lam_mirr = int(0.5 + 0.16 * min((popsize, 2 * N + 2)) + 0.29)  # 0.158650... * popsize is optimal\n            # lam = arange(2,22)\n            # mirr = 0.16 + 0.29/lam\n            # print(lam); print([int(0.5 + l) for l in mirr*lam])\n            # [ 2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21]\n            # [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4]\n\n        sp.mu_f = sp.popsize / 2.0  # float value of mu\n        if opts['CMA_mu'] is not None:\n            sp.mu_f = opts['CMA_mu']\n        sp.mu = int(sp.mu_f + 0.499999) # round down for x.5\n        # in principle we have mu_opt = popsize/2 + lam_mirr/2,\n        # which means in particular weights should only be negative for q > 0.5+mirr_frac/2\n        if sp.mu > sp.popsize - 2 * sp.lam_mirr + 1:\n            print(\"WARNING: pairwise selection is not implemented, therefore \" +\n                  \" mu = %d > %d = %d - 2*%d + 1 = popsize - 2*mirr + 1 can produce a bias\" % (\n                    sp.mu, sp.popsize - 2 * sp.lam_mirr + 1, sp.popsize, sp.lam_mirr))\n        if sp.lam_mirr > sp.popsize // 2:\n            raise _Error(\"fraction of mirrors in the population as read from option CMA_mirrors cannot be larger 0.5, \" +\n                         \"theoretically optimal is 0.159\")\n        sp.weights = log(max([sp.mu, sp.popsize / 2.0]) + 0.5) - log(1 + np.arange(sp.mu))\n        if 11 < 3:  # equal recombination weights\n            sp.mu = sp.popsize // 4\n            sp.weights = np.ones(sp.mu)\n            print(sp.weights[:10])\n        sp.weights /= sum(sp.weights)\n        sp.mueff = 1 / sum(sp.weights**2)\n        sp.cs = (sp.mueff + 2) / (N + sp.mueff + 3)\n        # TODO: clean up (here the cumulation constant is shorter if sigma_vec is used)\n        sp.dampsvec = opts['CMA_dampsvec_fac'] * (N + 2) if opts['CMA_dampsvec_fac'] else np.Inf\n        sp.dampsvec_fading = opts['CMA_dampsvec_fade']\n        if np.isfinite(sp.dampsvec):\n            sp.cs = ((sp.mueff + 2) / (N + sp.mueff + 3))**0.5\n        # sp.cs = (sp.mueff + 2) / (N + 1.5*sp.mueff + 1)\n        sp.cc = (4 + alpha_cc * sp.mueff / N) / (N + 4 + alpha_cc * 2 * sp.mueff / N)\n        sp.cc_sep = (1 + 1/N + alpha_cc * sp.mueff / N) / (N**0.5 + 1/N + alpha_cc * 2 * sp.mueff / N) # \\not\\gg\\cc\n        sp.rankmualpha = opts['CMA_rankmualpha']\n        # sp.rankmualpha = _evalOption(opts['CMA_rankmualpha'], 0.3)\n        sp.c1 = ccovfac * min(1, sp.popsize/6) * cone((N**2 + N) / 2, sp.mueff, N) # 2. / ((N+1.3)**2 + sp.mucov)\n        sp.c1_sep = ccovfac * conedf(N, sp.mueff, N)\n        if 11 < 3:\n            sp.c1 = 0.\n            print('c1 is zero')\n        if opts['CMA_rankmu'] != 0:  # also empty\n            sp.cmu = min(1 - sp.c1, ccovfac * cmu((N**2+N)/2, sp.mueff, sp.rankmualpha))\n            sp.cmu_sep = min(1 - sp.c1_sep, ccovfac * cmudf(N, sp.mueff, sp.rankmualpha))\n        else:\n            sp.cmu = sp.cmu_sep = 0\n\n        sp.neg = BlancClass()\n        if opts['CMA_active']:\n            # in principle we have mu_opt = popsize/2 + lam_mirr/2,\n            # which means in particular weights should only be negative for q > 0.5+mirr_frac/2\n            sp.neg.mu_f = popsize - (popsize + sp.lam_mirr) / 2  if popsize > 2 else 1\n            sp.neg.weights = log(sp.mu_f + 0.5) - log(1 + np.arange(sp.popsize - int(sp.neg.mu_f), sp.popsize))\n            sp.neg.mu = len(sp.neg.weights)  # maybe never useful?\n            sp.neg.weights /= sum(sp.neg.weights)\n            sp.neg.mueff = 1 / sum(sp.neg.weights**2)\n            sp.neg.cmuexp = opts['CMA_activefac'] * 0.25 * sp.neg.mueff / ((N+2)**1.5 + 2 * sp.neg.mueff)\n            assert sp.neg.mu >= sp.lam_mirr  # not really necessary\n            # sp.neg.minresidualvariance = 0.66  # not it use, keep at least 0.66 in all directions, small popsize is most critical\n        else:\n            sp.neg.cmuexp = 0\n\n        sp.CMA_on = sp.c1 + sp.cmu > 0\n        # print(sp.c1_sep / sp.cc_sep)\n\n        if not opts['CMA_on'] and opts['CMA_on'] not in (None,[],(),''):\n            sp.CMA_on = False\n            # sp.c1 = sp.cmu = sp.c1_sep = sp.cmu_sep = 0\n\n        sp.damps = opts['CMA_dampfac'] * (0.5 +\n                                          0.5 * min([1, (sp.lam_mirr/(0.159*sp.popsize) - 1)**2])**1 +\n                                          2 * max([0, ((sp.mueff-1) / (N+1))**0.5 - 1]) + sp.cs\n                                          )\n        if 11 < 3:\n            # this is worse than damps = 1 + sp.cs for the (1,10000)-ES on 40D parabolic ridge\n            sp.damps = 0.3 + 2 * max([sp.mueff/sp.popsize, ((sp.mueff-1)/(N+1))**0.5 - 1]) + sp.cs\n        if 11 < 3:\n            # this does not work for lambda = 4*N^2 on the parabolic ridge\n            sp.damps = opts['CMA_dampfac'] * (2 - 0*sp.lam_mirr/sp.popsize) * sp.mueff/sp.popsize + 0.3 + sp.cs  # nicer future setting\n            print('damps =', sp.damps)\n        if 11 < 3:\n            sp.damps = 10 * sp.damps  # 1e99 # (1 + 2*max(0,sqrt((sp.mueff-1)/(N+1))-1)) + sp.cs;\n            # sp.damps = 20 # 1. + 20 * sp.cs**-1  # 1e99 # (1 + 2*max(0,sqrt((sp.mueff-1)/(N+1))-1)) + sp.cs;\n            print('damps is %f' % (sp.damps))\n\n        sp.cmean = float(opts['CMA_cmean'])\n        # sp.kappa = 1  # 4-D, lam=16, rank1, kappa < 4 does not influence convergence rate\n                        # in larger dim it does, 15-D with defaults, kappa=8 factor 2\n        if sp.cmean != 1:\n            print('  cmean = %f' % (sp.cmean))\n\n        if verbose:\n            if not sp.CMA_on:\n                print('covariance matrix adaptation turned off')\n            if opts['CMA_mu'] != None:\n                print('mu = %f' % (sp.mu_f))\n\n        # return self  # the constructor returns itself\n\n    def disp(self):\n        pprint(self.__dict__)\n\n#____________________________________________________________\n#____________________________________________________________\nclass CMAStopDict(dict):\n    \"\"\"keep and update a termination condition dictionary, which is\n    \"usually\" empty and returned by `CMAEvolutionStrategy.stop()`.\n\n    Details\n    -------\n    This could be a nested class, but nested classes cannot be serialized.\n\n    :See: `stop()`\n\n    \"\"\"\n    def __init__(self, d={}):\n        update = (type(d) == CMAEvolutionStrategy)\n        inherit = (type(d) == CMAStopDict)\n        super(CMAStopDict, self).__init__({} if update else d)\n        self._stoplist = d._stoplist if inherit else []    # multiple entries\n        self.lastiter = d.lastiter if inherit else 0  # probably not necessary\n        if update:\n            self._update(d)\n\n    def __call__(self, es):\n        \"\"\"update the dictionary\"\"\"\n        return self._update(es)\n\n    def _addstop(self, key, cond, val=None):\n        if cond:\n            self.stoplist.append(key)  # can have the same key twice\n            if key in list(self.opts.keys()):\n                val = self.opts[key]\n            self[key] = val\n\n    def _update(self, es):\n        \"\"\"Test termination criteria and update dictionary.\n\n        \"\"\"\n        if es.countiter == self.lastiter:\n            if es.countiter == 0:\n                self.__init__()\n                return self\n            try:\n                if es == self.es:\n                    return self\n            except: # self.es not yet assigned\n                pass\n\n        self.lastiter = es.countiter\n        self.es = es\n\n        self.stoplist = []\n\n        N = es.N\n        opts = es.opts\n        self.opts = opts  # a hack to get _addstop going\n\n        # fitness: generic criterion, user defined w/o default\n        self._addstop('ftarget',\n                     es.best.f < opts['ftarget'])\n        # maxiter, maxfevals: generic criteria\n        self._addstop('maxfevals',\n                     es.countevals - 1 >= opts['maxfevals'])\n        self._addstop('maxiter',\n                     es.countiter >= opts['maxiter'])\n        # tolx, tolfacupx: generic criteria\n        # tolfun, tolfunhist (CEC:tolfun includes hist)\n        self._addstop('tolx',\n                     all([es.sigma*xi < opts['tolx'] for xi in es.pc]) and \\\n                     all([es.sigma*xi < opts['tolx'] for xi in sqrt(es.dC)]))\n        self._addstop('tolfacupx',\n                     any([es.sigma * sig > es.sigma0 * opts['tolfacupx']\n                          for sig in sqrt(es.dC)]))\n        self._addstop('tolfun',\n                     es.fit.fit[-1] - es.fit.fit[0] < opts['tolfun'] and \\\n                     max(es.fit.hist) - min(es.fit.hist) < opts['tolfun'])\n        self._addstop('tolfunhist',\n                     len(es.fit.hist) > 9 and \\\n                     max(es.fit.hist) - min(es.fit.hist) <  opts['tolfunhist'])\n\n        # worst seen false positive: table N=80,lam=80, getting worse for fevals=35e3 \\approx 50 * N**1.5\n        # but the median is not so much getting worse\n        # / 5 reflects the sparsity of histbest/median\n        # / 2 reflects the left and right part to be compared\n        l = int(max(opts['tolstagnation'] / 5. / 2, len(es.fit.histbest) / 10));\n        # TODO: why max(..., len(histbest)/10) ???\n        # TODO: the problem in the beginning is only with best ==> ???\n        if 11 < 3:  #\n            print(es.countiter, (opts['tolstagnation'], es.countiter > N * (5 + 100 / es.popsize),\n                        len(es.fit.histbest) > 100,\n                        np.median(es.fit.histmedian[:l]) >= np.median(es.fit.histmedian[l:2*l]),\n                        np.median(es.fit.histbest[:l]) >= np.median(es.fit.histbest[l:2*l])))\n        # equality should handle flat fitness\n        self._addstop('tolstagnation', # leads sometimes early stop on ftablet, fcigtab, N>=50?\n                    1 < 3 and opts['tolstagnation'] and es.countiter > N * (5 + 100 / es.popsize) and\n                    len(es.fit.histbest) > 100 and 2*l < len(es.fit.histbest) and\n                    np.median(es.fit.histmedian[:l]) >= np.median(es.fit.histmedian[l:2*l]) and\n                    np.median(es.fit.histbest[:l]) >= np.median(es.fit.histbest[l:2*l]))\n        # iiinteger: stagnation termination can prevent to find the optimum\n\n        self._addstop('tolupsigma', opts['tolupsigma'] and\n                      es.sigma / es.sigma0 / np.max(es.D) > opts['tolupsigma'])\n\n        if 11 < 3 and 2*l < len(es.fit.histbest):  # TODO: this might go wrong, because the nb of written columns changes\n            tmp = np.array((-np.median(es.fit.histmedian[:l]) + np.median(es.fit.histmedian[l:2*l]),\n                        -np.median(es.fit.histbest[:l]) + np.median(es.fit.histbest[l:2*l])))\n            es.more_to_write += [(10**t if t < 0 else t + 1) for t in tmp] # the latter to get monotonicy\n\n        if 1 < 3:\n            # non-user defined, method specific\n            # noeffectaxis (CEC: 0.1sigma), noeffectcoord (CEC:0.2sigma), conditioncov\n            self._addstop('noeffectcoord',\n                         any([es.mean[i] == es.mean[i] + 0.2*es.sigma*sqrt(es.dC[i])\n                              for i in range(N)]))\n            if opts['CMA_diagonal'] is not True and es.countiter > opts['CMA_diagonal']:\n                i = es.countiter % N\n                self._addstop('noeffectaxis',\n                             sum(es.mean == es.mean + 0.1 * es.sigma * es.D[i] * es.B[:, i]) == N)\n            self._addstop('conditioncov',\n                         es.D[-1] > 1e7 * es.D[0], 1e14)  # TODO\n\n            self._addstop('callback', es.callbackstop)  # termination_callback\n        if len(self):\n            self._addstop('flat fitness: please (re)consider how to compute the fitness more elaborate',\n                         len(es.fit.hist) > 9 and \\\n                         max(es.fit.hist) == min(es.fit.hist))\n        if 11 < 3 and opts['vv'] == 321:\n            self._addstop('||xmean||^2<ftarget', sum(es.mean**2) <= opts['ftarget'])\n\n        return self\n\n#_____________________________________________________________________\n#_____________________________________________________________________\n#\nclass BaseDataLogger2(DerivedDictBase):\n    \"\"\"\"abstract\" base class for a data logger that can be used with an `OOOptimizer`\"\"\"\n    def add(self, optim=None, more_data=[]):\n        \"\"\"abstract method, add a \"data point\" from the state of `optim` into the\n        logger, the argument `optim` can be omitted if it was `register()`-ed before,\n        acts like an event handler\"\"\"\n        raise NotImplementedError()\n    def register(self, optim):\n        \"\"\"abstract method, register an optimizer `optim`, only needed if `add()` is\n        called without a value for the `optim` argument\"\"\"\n        self.optim = optim\n    def disp(self):\n        \"\"\"display some data trace (not implemented)\"\"\"\n        print('method BaseDataLogger.disp() not implemented, to be done in subclass ' + str(type(self)))\n    def plot(self):\n        \"\"\"plot data (not implemented)\"\"\"\n        print('method BaseDataLogger.plot() is not implemented, to be done in subclass ' + str(type(self)))\n    def data(self):\n        \"\"\"return logged data in a dictionary (not implemented)\"\"\"\n        print('method BaseDataLogger.data() is not implemented, to be done in subclass ' + str(type(self)))\nclass BaseDataLogger(object):\n    \"\"\"\"abstract\" base class for a data logger that can be used with an `OOOptimizer`\"\"\"\n    def add(self, optim=None, more_data=[]):\n        \"\"\"abstract method, add a \"data point\" from the state of `optim` into the\n        logger, the argument `optim` can be omitted if it was `register()`-ed before,\n        acts like an event handler\"\"\"\n        raise NotImplementedError()\n    def register(self, optim):\n        \"\"\"abstract method, register an optimizer `optim`, only needed if `add()` is\n        called without a value for the `optim` argument\"\"\"\n        self.optim = optim\n    def disp(self):\n        \"\"\"display some data trace (not implemented)\"\"\"\n        print('method BaseDataLogger.disp() not implemented, to be done in subclass ' + str(type(self)))\n    def plot(self):\n        \"\"\"plot data (not implemented)\"\"\"\n        print('method BaseDataLogger.plot() is not implemented, to be done in subclass ' + str(type(self)))\n    def data(self):\n        \"\"\"return logged data in a dictionary (not implemented)\"\"\"\n        print('method BaseDataLogger.data() is not implemented, to be done in subclass ' + str(type(self)))\n\n#_____________________________________________________________________\n#_____________________________________________________________________\n#\nclass CMADataLogger(BaseDataLogger):  # might become a dict at some point\n    \"\"\"data logger for class `CMAEvolutionStrategy`. The logger is\n    identified by its name prefix and writes or reads according\n    data files.\n\n    Examples\n    ========\n    ::\n\n        import cma\n        es = cma.CMAEvolutionStrategy(...)\n        data = cma.CMADataLogger().register(es)\n        while not es.stop():\n            ...\n            data.add()  # add can also take an argument\n\n        data.plot() # or a short cut can be used:\n        cma.plot()  # plot data from logger with default name\n\n\n        data2 = cma.CMADataLogger(another_filename_prefix).load()\n        data2.plot()\n        data2.disp()\n\n    ::\n\n        import cma\n        from pylab import *\n        res = cma.fmin(cma.Fcts.sphere, rand(10), 1e-0)\n        dat = res[-1]  # the CMADataLogger\n        dat.load()  # by \"default\" data are on disk\n        semilogy(dat.f[:,0], dat.f[:,5])  # plot f versus iteration, see file header\n        show()\n\n    Details\n    =======\n    After loading data, the logger has the attributes `xmean`, `xrecent`, `std`, `f`, and `D`,\n    corresponding to xmean, xrecentbest, stddev, fit, and axlen filename trails.\n\n    :See: `disp()`, `plot()`\n\n    \"\"\"\n    default_prefix = 'outcmaes'\n    # names = ('axlen','fit','stddev','xmean','xrecentbest')\n    # key_names_with_annotation = ('std', 'xmean', 'xrecent')\n\n    def __init__(self, name_prefix=default_prefix, modulo=1, append=False):\n        \"\"\"initialize logging of data from a `CMAEvolutionStrategy` instance,\n        default modulo expands to 1 == log with each call\n\n        \"\"\"\n        # super(CMAData, self).__init__({'iter':[], 'stds':[], 'D':[], 'sig':[], 'fit':[], 'xm':[]})\n        # class properties:\n        self.file_names = ('axlen','fit','stddev','xmean','xrecentbest') # used in load, however hard-coded in add\n        self.key_names = ('D', 'f', 'std', 'xmean', 'xrecent') # used in load, however hard-coded in plot\n        self.key_names_with_annotation = ('std', 'xmean', 'xrecent') # used in load\n        self.modulo = modulo  # allows calling with None\n        self.append = append\n        self.counter = 0  # number of calls of add, should initial value depend on `append`?\n        self.name_prefix = name_prefix if name_prefix else CMADataLogger.default_prefix\n        if type(self.name_prefix) == CMAEvolutionStrategy:\n            self.name_prefix = self.name_prefix.opts.eval('verb_filenameprefix')\n        self.registered = False\n\n    def register(self, es, append=None, modulo=None):\n        \"\"\"register a `CMAEvolutionStrategy` instance for logging,\n        ``append=True`` appends to previous data logged under the same name,\n        by default previous data are overwritten.\n\n        \"\"\"\n        if type(es) != CMAEvolutionStrategy:\n            raise TypeError(\"only class CMAEvolutionStrategy can be registered for logging\")\n        self.es = es\n        if append is not None:\n            self.append = append\n        if modulo is not None:\n            self.modulo = modulo\n        if not self.append and self.modulo != 0:\n            self.initialize()  # write file headers\n        self.registered = True\n        return self\n\n    def initialize(self, modulo=None):\n        \"\"\"reset logger, overwrite original files, `modulo`: log only every modulo call\"\"\"\n        if modulo is not None:\n            self.modulo = modulo\n        try:\n            es = self.es  # must have been registered\n        except AttributeError:\n            pass  # TODO: revise usage of es... that this can pass\n            raise _Error('call register() before initialize()')\n\n        self.counter = 0  # number of calls of add\n\n        # write headers for output\n        fn = self.name_prefix + 'fit.dat'\n        strseedtime = 'seed=%d, %s' % (es.opts['seed'], time.asctime())\n\n        try:\n            with open(fn, 'w') as f:\n                f.write('% # columns=\"iteration, evaluation, sigma, axis ratio, ' +\n                        'bestever, best, median, worst objective function value, ' +\n                        'further objective values of best\", ' +\n                        strseedtime +\n                        # strftime(\"%Y/%m/%d %H:%M:%S\", localtime()) + # just asctime() would do\n                        '\\n')\n        except (IOError, OSError):\n            print('could not open file ' + fn)\n\n        fn = self.name_prefix + 'axlen.dat'\n        try:\n            f = open(fn, 'w')\n            f.write('%  columns=\"iteration, evaluation, sigma, max axis length, ' +\n                    ' min axis length, all principle axes lengths ' +\n                    ' (sorted square roots of eigenvalues of C)\", ' +\n                    strseedtime +\n                    '\\n')\n            f.close()\n        except (IOError, OSError):\n            print('could not open file ' + fn)\n        finally:\n            f.close()\n        fn = self.name_prefix + 'stddev.dat'\n        try:\n            f = open(fn, 'w')\n            f.write('% # columns=[\"iteration, evaluation, sigma, void, void, ' +\n                    ' stds==sigma*sqrt(diag(C))\", ' +\n                    strseedtime +\n                    '\\n')\n            f.close()\n        except (IOError, OSError):\n            print('could not open file ' + fn)\n        finally:\n            f.close()\n\n        fn = self.name_prefix + 'xmean.dat'\n        try:\n            with open(fn, 'w') as f:\n                f.write('% # columns=\"iteration, evaluation, void, void, void, xmean\", ' +\n                        strseedtime)\n                f.write(' # scaling_of_variables: ')\n                if np.size(es.gp.scales) > 1:\n                    f.write(' '.join(map(str, es.gp.scales)))\n                else:\n                    f.write(str(es.gp.scales))\n                f.write(', typical_x: ')\n                if np.size(es.gp.typical_x) > 1:\n                    f.write(' '.join(map(str, es.gp.typical_x)))\n                else:\n                    f.write(str(es.gp.typical_x))\n                f.write('\\n')\n                f.close()\n        except (IOError, OSError):\n            print('could not open/write file ' + fn)\n\n        fn = self.name_prefix + 'xrecentbest.dat'\n        try:\n            with open(fn, 'w') as f:\n                f.write('% # iter+eval+sigma+0+fitness+xbest, ' +\n                        strseedtime +\n                        '\\n')\n        except (IOError, OSError):\n            print('could not open/write file ' + fn)\n\n        return self\n    # end def __init__\n\n    def load(self, filenameprefix=None):\n        \"\"\"loads data from files written and return a data dictionary, *not*\n        a prerequisite for using `plot()` or `disp()`.\n\n        Argument `filenameprefix` is the filename prefix of data to be loaded (five files),\n        by default ``'outcmaes'``.\n\n        Return data dictionary with keys `xrecent`, `xmean`, `f`, `D`, `std`\n\n        \"\"\"\n        if not filenameprefix:\n            filenameprefix = self.name_prefix\n        for i in range(len(self.file_names)):\n            fn = filenameprefix + self.file_names[i] + '.dat'\n            try:\n                self.__dict__[self.key_names[i]] = _fileToMatrix(fn)\n            except:\n                print('WARNING: reading from file \"' + fn + '\" failed')\n            if self.key_names[i] in self.key_names_with_annotation:\n                self.__dict__[self.key_names[i]].append(self.__dict__[self.key_names[i]][-1])  # copy last row to later fill in annotation position for display\n            self.__dict__[self.key_names[i]] = array(self.__dict__[self.key_names[i]], copy=False)\n        return self\n\n    def add(self, es=None, more_data=[], modulo=None): # TODO: find a different way to communicate current x and f\n        \"\"\"append some logging data from `CMAEvolutionStrategy` class instance `es`,\n        if ``number_of_times_called % modulo`` equals to zero, never if ``modulo==0``.\n\n        The sequence ``more_data`` must always have the same length.\n\n        When used for a different optimizer class, this function can be\n        (easily?) adapted by changing the assignments under INTERFACE\n        in the implemention.\n\n        \"\"\"\n        self.counter += 1\n        mod = modulo if modulo is not None else self.modulo\n        if mod == 0 or (self.counter > 3 and self.counter % mod):\n            return\n        if es is None:\n            try:\n                es = self.es  # must have been registered\n            except AttributeError :\n                raise _Error('call `add` with argument `es` or ``register(es)`` before ``add()``')\n        elif not self.registered:\n            self.register(es) # calls initialize\n\n        # --- INTERFACE, can be changed if necessary ---\n        if type(es) is not CMAEvolutionStrategy: # not necessary\n            print('WARNING: <type \\'CMAEvolutionStrategy\\'> expected, found '\n                            + str(type(es)) + ' in method CMADataLogger.add')\n        evals = es.countevals\n        iteration = es.countiter\n        sigma = es.sigma\n        axratio = es.D.max()/es.D.min()\n        xmean = es.mean # TODO: should be optionally phenotype?\n        fmean_noise_free = es.fmean_noise_free\n        fmean = es.fmean\n        try:\n            besteverf = es.best.f\n            bestf = es.fit.fit[0]\n            medianf = es.fit.fit[es.sp.popsize//2]\n            worstf = es.fit.fit[-1]\n        except:\n            if self.counter > 1: # first call without f-values is OK\n                raise\n        try:\n            xrecent = es.best.last.x\n        except:\n            xrecent = None\n        maxD = es.D.max()\n        minD = es.D.min()\n        diagD = es.D\n        diagC = es.sigma*es.sigma_vec*sqrt(es.dC)\n        more_to_write = es.more_to_write\n        es.more_to_write = []\n        # --- end interface ---\n\n        try:\n\n            # fit\n            if self.counter > 1:\n                fn = self.name_prefix + 'fit.dat'\n                with open(fn, 'a') as f:\n                    f.write(str(iteration) + ' '\n                            + str(evals) + ' '\n                            + str(sigma) + ' '\n                            + str(axratio) + ' '\n                            + str(besteverf) + ' '\n                            + '%.16e' % bestf + ' '\n                            + str(medianf) + ' '\n                            + str(worstf) + ' '\n                            # + str(es.sp.popsize) + ' '\n                            # + str(10**es.noiseS) + ' '\n                            # + str(es.sp.cmean) + ' '\n                            + ' '.join(str(i) for i in more_to_write)\n                            + ' '.join(str(i) for i in more_data)\n                            + '\\n')\n            # axlen\n            fn = self.name_prefix + 'axlen.dat'\n            with open(fn, 'a') as f:  # does not rely on reference counting\n                f.write(str(iteration) + ' '\n                        + str(evals) + ' '\n                        + str(sigma) + ' '\n                        + str(maxD) + ' '\n                        + str(minD) + ' '\n                        + ' '.join(map(str, diagD))\n                        + '\\n')\n            # stddev\n            fn = self.name_prefix + 'stddev.dat'\n            with open(fn, 'a') as f:\n                f.write(str(iteration) + ' '\n                        + str(evals) + ' '\n                        + str(sigma) + ' '\n                        + '0 0 '\n                        + ' '.join(map(str, diagC))\n                        + '\\n')\n            # xmean\n            fn = self.name_prefix + 'xmean.dat'\n            with open(fn, 'a') as f:\n                if iteration < 1: # before first iteration\n                    f.write('0 0 0 0 0 '\n                            + ' '.join(map(str, xmean))\n                            + '\\n')\n                else:\n                    f.write(str(iteration) + ' '\n                            + str(evals) + ' '\n                            # + str(sigma) + ' '\n                            + '0 '\n                            + str(fmean_noise_free) + ' '\n                            + str(fmean) + ' '  # TODO: this does not make sense\n                            # TODO should be optional the phenotyp?\n                            + ' '.join(map(str, xmean))\n                            + '\\n')\n            # xrecent\n            fn = self.name_prefix + 'xrecentbest.dat'\n            if iteration > 0 and xrecent is not None:\n                with open(fn, 'a') as f:\n                    f.write(str(iteration) + ' '\n                            + str(evals) + ' '\n                            + str(sigma) + ' '\n                            + '0 '\n                            + str(bestf) + ' '\n                            + ' '.join(map(str, xrecent))\n                            + '\\n')\n\n        except (IOError, OSError):\n            if iteration <= 1:\n                print('could not open/write file')\n\n    def closefig(self):\n        pylab.close(self.fighandle)\n\n    def save(self, nameprefix, switch=False):\n        \"\"\"saves logger data to a different set of files, for\n        ``switch=True`` also the loggers name prefix is switched to\n        the new value\n\n        \"\"\"\n        if not nameprefix or type(nameprefix) is not str:\n            _Error('filename prefix must be a nonempty string')\n\n        if nameprefix == self.default_prefix:\n            _Error('cannot save to default name \"' + nameprefix + '...\", chose another name')\n\n        if nameprefix == self.name_prefix:\n            return\n\n        for name in CMADataLogger.names:\n            open(nameprefix+name+'.dat', 'w').write(open(self.name_prefix+name+'.dat').read())\n\n        if switch:\n            self.name_prefix = nameprefix\n\n    def plot(self, fig=None, iabscissa=1, iteridx=None, plot_mean=True,  # TODO: plot_mean default should be False\n             foffset=1e-19, x_opt = None, fontsize=10):\n        \"\"\"\n        plot data from a `CMADataLogger` (using the files written by the logger).\n\n        Arguments\n        ---------\n            `fig`\n                figure number, by default 325\n            `iabscissa`\n                ``0==plot`` versus iteration count,\n                ``1==plot`` versus function evaluation number\n            `iteridx`\n                iteration indices to plot\n\n        Return `CMADataLogger` itself.\n\n        Examples\n        --------\n        ::\n\n            import cma\n            logger = cma.CMADataLogger()  # with default name\n            # try to plot the \"default logging\" data (e.g. from previous fmin calls)\n            logger.plot() # to continue you might need to close the pop-up window\n                          # once and call plot() again.\n                          # This behavior seems to disappear in subsequent\n                          # calls of plot(). Also using ipython with -pylab\n                          # option might help.\n            cma.savefig('fig325.png')  # save current figure\n            logger.closefig()\n\n        Dependencies: matlabplotlib/pylab.\n\n        \"\"\"\n\n        dat = self.load(self.name_prefix)\n\n        try:\n            # pylab: prodedural interface for matplotlib\n            from  matplotlib.pylab import figure, ioff, ion, subplot, semilogy, hold, plot, grid, \\\n                 axis, title, text, xlabel, isinteractive, draw, gcf\n\n        except ImportError:\n            ImportError('could not find matplotlib.pylab module, function plot() is not available')\n            return\n\n        if fontsize and pylab.rcParams['font.size'] != fontsize:\n            print('global variable pylab.rcParams[\\'font.size\\'] set (from ' +\n                  str(pylab.rcParams['font.size']) + ') to ' + str(fontsize))\n            pylab.rcParams['font.size'] = fontsize  # subtracted in the end, but return can happen inbetween\n\n        if fig:\n            figure(fig)\n        else:\n            figure(325)\n            # show()  # should not be necessary\n        self.fighandle = gcf()  # fighandle.number\n\n        if iabscissa not in (0,1):\n            iabscissa = 1\n        interactive_status = isinteractive()\n        ioff() # prevents immediate drawing\n\n        dat.x = dat.xmean    # this is the genotyp\n        if not plot_mean:\n            try:\n                dat.x = dat.xrecent\n            except:\n                pass\n        if len(dat.x) < 2:\n            print('not enough data to plot')\n            return {}\n\n        if iteridx is not None:\n            dat.f = dat.f[np.where([x in iteridx for x in dat.f[:,0]])[0],:]\n            dat.D = dat.D[np.where([x in iteridx for x in dat.D[:,0]])[0],:]\n            iteridx.append(dat.x[-1,1])  # last entry is artificial\n            dat.x = dat.x[np.where([x in iteridx for x in dat.x[:,0]])[0],:]\n            dat.std = dat.std[np.where([x in iteridx for x in dat.std[:,0]])[0],:]\n\n        if iabscissa == 0:\n            xlab = 'iterations'\n        elif iabscissa == 1:\n            xlab = 'function evaluations'\n\n        # use fake last entry in x and std for line extension-annotation\n        if dat.x.shape[1] < 100:\n            minxend = int(1.06*dat.x[-2, iabscissa])\n            # write y-values for individual annotation into dat.x\n            dat.x[-1, iabscissa] = minxend  # TODO: should be ax[1]\n            idx = np.argsort(dat.x[-2,5:])\n            idx2 = np.argsort(idx)\n            if x_opt is None:\n                dat.x[-1,5+idx] = np.linspace(np.min(dat.x[:,5:]),\n                            np.max(dat.x[:,5:]), dat.x.shape[1]-5)\n            else:\n                dat.x[-1,5+idx] = np.logspace(np.log10(np.min(abs(dat.x[:,5:]))),\n                            np.log10(np.max(abs(dat.x[:,5:]))), dat.x.shape[1]-5)\n        else:\n            minxend = 0\n\n        if len(dat.f) == 0:\n            print('nothing to plot')\n            return\n\n        # not in use anymore, see formatter above\n        # xticklocs = np.arange(5) * np.round(minxend/4., -int(np.log10(minxend/4.)))\n\n        # dfit(dfit<1e-98) = NaN;\n\n        ioff() # turns update off\n\n        # TODO: if abscissa==0 plot in chunks, ie loop over subsets where dat.f[:,0]==countiter is monotonous\n\n        subplot(2,2,1)\n        self.plotdivers(dat, iabscissa, foffset)\n\n        # TODO: modularize also the remaining subplots\n        subplot(2,2,2)\n        hold(False)\n        if x_opt is not None:  # TODO: differentate neg and pos?\n            semilogy(dat.x[:, iabscissa], abs(dat.x[:,5:]) - x_opt, '-')\n        else:\n            plot(dat.x[:, iabscissa], dat.x[:,5:],'-')\n        hold(True)\n        grid(True)\n        ax = array(axis())\n        # ax[1] = max(minxend, ax[1])\n        axis(ax)\n        ax[1] -= 1e-6\n        if dat.x.shape[1] < 100:\n            yy = np.linspace(ax[2]+1e-6, ax[3]-1e-6, dat.x.shape[1]-5)\n            #yyl = np.sort(dat.x[-1,5:])\n            idx = np.argsort(dat.x[-1,5:])\n            idx2 = np.argsort(idx)\n            if x_opt is not None:\n                semilogy([dat.x[-1, iabscissa], ax[1]], [abs(dat.x[-1,5:]), yy[idx2]], 'k-') # line from last data point\n                semilogy(np.dot(dat.x[-2, iabscissa],[1,1]), array([ax[2]+1e-6, ax[3]-1e-6]), 'k-')\n            else:\n                # plot([dat.x[-1, iabscissa], ax[1]], [dat.x[-1,5:], yy[idx2]], 'k-') # line from last data point\n                plot(np.dot(dat.x[-2, iabscissa],[1,1]), array([ax[2]+1e-6, ax[3]-1e-6]), 'k-')\n            # plot(array([dat.x[-1, iabscissa], ax[1]]),\n            #      reshape(array([dat.x[-1,5:], yy[idx2]]).flatten(), (2,4)), '-k')\n            for i in range(len(idx)):\n                # TODOqqq: annotate phenotypic value!?\n                # text(ax[1], yy[i], 'x(' + str(idx[i]) + ')=' + str(dat.x[-2,5+idx[i]]))\n                text(dat.x[-1,iabscissa], dat.x[-1,5+i], 'x(' + str(i) + ')=' + str(dat.x[-2,5+i]))\n\n        i = 2  # find smallest i where iteration count differs (in case the same row appears twice)\n        while i < len(dat.f) and dat.f[-i][0] == dat.f[-1][0]:\n            i += 1\n        title('Object Variables (' + ('mean' if plot_mean else 'curr best') +\n                ', ' + str(dat.x.shape[1]-5) + '-D, popsize~' +\n                (str(int((dat.f[-1][1] - dat.f[-i][1]) / (dat.f[-1][0] - dat.f[-i][0])))\n                    if len(dat.f.T[0]) > 1 and dat.f[-1][0] > dat.f[-i][0] else 'NA')\n                + ')')\n        # pylab.xticks(xticklocs)\n\n        # Scaling\n        subplot(2,2,3)\n        hold(False)\n        semilogy(dat.D[:, iabscissa], dat.D[:,5:], '-b')\n        hold(True)\n        grid(True)\n        ax = array(axis())\n        # ax[1] = max(minxend, ax[1])\n        axis(ax)\n        title('Scaling (All Main Axes)')\n        # pylab.xticks(xticklocs)\n        xlabel(xlab)\n\n        # standard deviations\n        subplot(2,2,4)\n        hold(False)\n        # remove sigma from stds (graphs become much better readible)\n        dat.std[:,5:] = np.transpose(dat.std[:,5:].T / dat.std[:,2].T)\n        # ax = array(axis())\n        # ax[1] = max(minxend, ax[1])\n        # axis(ax)\n        if 1 < 2 and dat.std.shape[1] < 100:\n            # use fake last entry in x and std for line extension-annotation\n            minxend = int(1.06*dat.x[-2, iabscissa])\n            dat.std[-1, iabscissa] = minxend  # TODO: should be ax[1]\n            idx = np.argsort(dat.std[-2,5:])\n            idx2 = np.argsort(idx)\n            dat.std[-1,5+idx] = np.logspace(np.log10(np.min(dat.std[:,5:])),\n                            np.log10(np.max(dat.std[:,5:])), dat.std.shape[1]-5)\n\n            dat.std[-1, iabscissa] = minxend  # TODO: should be ax[1]\n            yy = np.logspace(np.log10(ax[2]), np.log10(ax[3]), dat.std.shape[1]-5)\n            #yyl = np.sort(dat.std[-1,5:])\n            idx = np.argsort(dat.std[-1,5:])\n            idx2 = np.argsort(idx)\n            # plot(np.dot(dat.std[-2, iabscissa],[1,1]), array([ax[2]+1e-6, ax[3]-1e-6]), 'k-') # vertical separator\n            # vertical separator\n            plot(np.dot(dat.std[-2, iabscissa],[1,1]), array([np.min(dat.std[-2,5:]), np.max(dat.std[-2,5:])]), 'k-')\n            hold(True)\n            # plot([dat.std[-1, iabscissa], ax[1]], [dat.std[-1,5:], yy[idx2]], 'k-') # line from last data point\n            for i in range(len(idx)):\n                # text(ax[1], yy[i], ' '+str(idx[i]))\n                text(dat.std[-1, iabscissa], dat.std[-1, 5+i], ' '+str(i))\n        semilogy(dat.std[:, iabscissa], dat.std[:,5:], '-')\n        grid(True)\n        title('Standard Deviations in All Coordinates')\n        # pylab.xticks(xticklocs)\n        xlabel(xlab)\n        draw()  # does not suffice\n        if interactive_status:\n            ion()  # turns interactive mode on (again)\n            draw()\n        show()\n\n        return self\n\n\n    #____________________________________________________________\n    #____________________________________________________________\n    #\n    @staticmethod\n    def plotdivers(dat, iabscissa, foffset):\n        \"\"\"helper function for `plot()` that plots all what is\n        in the upper left subplot like fitness, sigma, etc.\n\n        Arguments\n        ---------\n            `iabscissa` in ``(0,1)``\n                0==versus fevals, 1==versus iteration\n            `foffset`\n                offset to fitness for log-plot\n\n         :See: `plot()`\n\n        \"\"\"\n        from  matplotlib.pylab import semilogy, hold, grid, \\\n                 axis, title, text\n        fontsize = pylab.rcParams['font.size']\n\n        hold(False)\n\n        dfit = dat.f[:,5]-min(dat.f[:,5])\n        dfit[dfit<1e-98] = np.NaN\n\n        if dat.f.shape[1] > 7:\n            # semilogy(dat.f[:, iabscissa], abs(dat.f[:,[6, 7, 10, 12]])+foffset,'-k')\n            semilogy(dat.f[:, iabscissa], abs(dat.f[:,[6, 7]])+foffset,'-k')\n            hold(True)\n\n        # (larger indices): additional fitness data, for example constraints values\n        if dat.f.shape[1] > 8:\n            # dd = abs(dat.f[:,7:]) + 10*foffset\n            # dd = np.where(dat.f[:,7:]==0, np.NaN, dd) # cannot be\n            semilogy(dat.f[:, iabscissa], np.abs(dat.f[:,8:]) + 10*foffset, 'm')\n            hold(True)\n\n        idx = np.where(dat.f[:,5]>1e-98)[0]  # positive values\n        semilogy(dat.f[idx, iabscissa], dat.f[idx,5]+foffset, '.b')\n        hold(True)\n        grid(True)\n\n        idx = np.where(dat.f[:,5] < -1e-98)  # negative values\n        semilogy(dat.f[idx, iabscissa], abs(dat.f[idx,5])+foffset,'.r')\n\n        semilogy(dat.f[:, iabscissa],abs(dat.f[:,5])+foffset,'-b')\n        semilogy(dat.f[:, iabscissa], dfit, '-c')\n\n        if 11 < 3:  # delta-fitness as points\n            dfit = dat.f[1:, 5] - dat.f[:-1,5]  # should be negative usually\n            semilogy(dat.f[1:,iabscissa],  # abs(fit(g) - fit(g-1))\n                np.abs(dfit)+foffset, '.c')\n            i = dfit > 0\n            # print(np.sum(i) / float(len(dat.f[1:,iabscissa])))\n            semilogy(dat.f[1:,iabscissa][i],  # abs(fit(g) - fit(g-1))\n                np.abs(dfit[i])+foffset, '.r')\n\n        # overall minimum\n        i = np.argmin(dat.f[:,5])\n        semilogy(dat.f[i, iabscissa]*np.ones(2), dat.f[i,5]*np.ones(2), 'rd')\n        # semilogy(dat.f[-1, iabscissa]*np.ones(2), dat.f[-1,4]*np.ones(2), 'rd')\n\n        # AR and sigma\n        semilogy(dat.f[:, iabscissa], dat.f[:,3], '-r') # AR\n        semilogy(dat.f[:, iabscissa], dat.f[:,2],'-g') # sigma\n        semilogy(dat.std[:-1, iabscissa], np.vstack([list(map(max, dat.std[:-1,5:])), list(map(min, dat.std[:-1,5:]))]).T,\n                     '-m', linewidth=2)\n        text(dat.std[-2, iabscissa], max(dat.std[-2, 5:]), 'max std', fontsize=fontsize)\n        text(dat.std[-2, iabscissa], min(dat.std[-2, 5:]), 'min std', fontsize=fontsize)\n        ax = array(axis())\n        # ax[1] = max(minxend, ax[1])\n        axis(ax)\n        text(ax[0]+0.01, ax[2], # 10**(log10(ax[2])+0.05*(log10(ax[3])-log10(ax[2]))),\n             '.f_recent=' + repr(dat.f[-1,5]) )\n\n        # title('abs(f) (blue), f-min(f) (cyan), Sigma (green), Axis Ratio (red)')\n        title('blue:abs(f), cyan:f-min(f), green:sigma, red:axis ratio', fontsize=fontsize-1)\n        # pylab.xticks(xticklocs)\n\n\n    def downsampling(self, factor=10, first=3, switch=True):\n        \"\"\"\n        rude downsampling of a `CMADataLogger` data file by `factor`, keeping\n        also the first `first` entries. This function is a stump and subject\n        to future changes.\n\n        Arguments\n        ---------\n           - `factor` -- downsampling factor\n           - `first` -- keep first `first` entries\n           - `switch` -- switch the new logger name to oldname+'down'\n\n        Details\n        -------\n        ``self.name_prefix+'down'`` files are written\n\n        Example\n        -------\n        ::\n\n            import cma\n            cma.downsampling()  # takes outcmaes* files\n            cma.plot('outcmaesdown')\n\n        \"\"\"\n        newprefix = self.name_prefix + 'down'\n        for name in CMADataLogger.names:\n            f = open(newprefix+name+'.dat','w')\n            iline = 0\n            cwritten = 0\n            for line in open(self.name_prefix+name+'.dat'):\n                if iline < first or iline % factor == 0:\n                    f.write(line)\n                    cwritten += 1\n                iline += 1\n            f.close()\n            print('%d' % (cwritten) + ' lines written in ' + newprefix+name+'.dat')\n        if switch:\n            self.name_prefix += 'down'\n        return self\n\n    #____________________________________________________________\n    #____________________________________________________________\n    #\n    def disp(self, idx=100):  # r_[0:5,1e2:1e9:1e2,-10:0]):\n        \"\"\"displays selected data from (files written by) the class `CMADataLogger`.\n\n        Arguments\n        ---------\n           `idx`\n               indices corresponding to rows in the data file;\n               if idx is a scalar (int), the first two, then every idx-th,\n               and the last three rows are displayed. Too large index values are removed.\n\n        Example\n        -------\n        >>> import cma, numpy as np\n        >>> res = cma.fmin(cma.fcts.elli, 7 * [0.1], 1, verb_disp=1e9)  # generate data\n        >>> assert res[1] < 1e-9\n        >>> assert res[2] < 4400\n        >>> l = cma.CMADataLogger()  # == res[-1], logger with default name, \"points to\" above data\n        >>> l.disp([0,-1])  # first and last\n        >>> l.disp(20)  # some first/last and every 20-th line\n        >>> l.disp(np.r_[0:999999:100, -1]) # every 100-th and last\n        >>> l.disp(np.r_[0, -10:0]) # first and ten last\n        >>> cma.disp(l.name_prefix, np.r_[0::100, -10:])  # the same as l.disp(...)\n\n        Details\n        -------\n        The data line with the best f-value is displayed as last line.\n\n        :See: `disp()`\n\n        \"\"\"\n\n        filenameprefix=self.name_prefix\n\n        def printdatarow(dat, iteration):\n            \"\"\"print data of iteration i\"\"\"\n            i = np.where(dat.f[:, 0] == iteration)[0][0]\n            j = np.where(dat.std[:, 0] == iteration)[0][0]\n            print('%5d' % (int(dat.f[i,0])) + ' %6d' % (int(dat.f[i,1])) + ' %.14e' % (dat.f[i,5]) +\n                  ' %5.1e' % (dat.f[i,3]) +\n                  ' %6.2e' % (max(dat.std[j,5:])) + ' %6.2e' % min(dat.std[j,5:]))\n\n        dat = CMADataLogger(filenameprefix).load()\n        ndata = dat.f.shape[0]\n\n        # map index to iteration number, is difficult if not all iteration numbers exist\n        # idx = idx[np.where(map(lambda x: x in dat.f[:,0], idx))[0]] # TODO: takes pretty long\n        # otherwise:\n        if idx is None:\n            idx = 100\n        if np.isscalar(idx):\n            # idx = np.arange(0, ndata, idx)\n            if idx:\n                idx = np.r_[0, 1, idx:ndata-3:idx, -3:0]\n            else:\n                idx = np.r_[0, 1, -3:0]\n\n        idx = array(idx)\n        idx = idx[idx<ndata]\n        idx = idx[-idx<=ndata]\n        iters = dat.f[idx, 0]\n        idxbest = np.argmin(dat.f[:,5])\n        iterbest = dat.f[idxbest, 0]\n\n        if len(iters) == 1:\n            printdatarow(dat, iters[0])\n        else:\n            self.disp_header()\n            for i in iters:\n                printdatarow(dat, i)\n            self.disp_header()\n            printdatarow(dat, iterbest)\n        sys.stdout.flush()\n    def disp_header(self):\n        heading = 'Iterat Nfevals  function value    axis ratio maxstd   minstd'\n        print(heading)\n\n# end class CMADataLogger\n\n#____________________________________________________________\n#____________________________________________________________\n#\n#_____________________________________________________________________\n#_____________________________________________________________________\n#\nclass DEAPCMADataLogger(BaseDataLogger):  # might become a dict at some point\n    \"\"\"data logger for class `Strategy`. The logger is\n    identified by its name prefix and writes or reads according\n    data files.\n\n    Examples\n    ========\n    ::\n\n        import cma_logger\n        es = deap.cma.Strategy(...)\n        data = cma_logger.DEAPCMADataLogger().register(es)\n        while not es.stop():\n            ...\n            data.add(fitness_values)  # add can also take `es` as additional argument\n\n        data.plot() # or a short cut can be used:\n        cma.plot()  # plot data from logger with default name\n\n\n        data2 = cma_logger.DEAPCMADataLogger(another_filename_prefix).load()\n        data2.plot()\n        data2.disp()\n\n    ::\n\n        import cma\n        from pylab import *\n        res = cma.fmin(cma.Fcts.sphere, rand(10), 1e-0)\n        dat = res[-1]  # the CMADataLogger\n        dat.load()  # by \"default\" data are on disk\n        semilogy(dat.f[:,0], dat.f[:,5])  # plot f versus iteration, see file header\n        show()\n\n    Details\n    =======\n    After loading data, the logger has the attributes `xmean`, `xrecent`, `std`, `f`, and `D`,\n    corresponding to xmean, xrecentbest, stddev, fit, and axlen filename trails.\n\n    :See: `disp()`, `plot()`\n\n    \"\"\"\n    default_prefix = 'outcmaes'\n    names = ('axlen','fit','stddev','xmean') # ,'xrecentbest')\n    key_names_with_annotation = ('std', 'xmean')\n\n    def __init__(self, name_prefix=default_prefix, modulo=1, append=False):\n        \"\"\"initialize logging of data from a `CMAEvolutionStrategy` instance,\n        default modulo expands to 1 == log with each call\n\n        \"\"\"\n        # super(CMAData, self).__init__({'iter':[], 'stds':[], 'D':[], 'sig':[], 'fit':[], 'xm':[]})\n        # class properties:\n        self.counter = 0  # number of calls of add\n        self.best_fitness = np.inf\n        self.modulo = modulo  # allows calling with None\n        self.append = append\n        self.name_prefix = name_prefix if name_prefix else CMADataLogger.default_prefix\n        if type(self.name_prefix) == CMAEvolutionStrategy:\n            self.name_prefix = self.name_prefix.opts.eval('verb_filenameprefix')\n        self.registered = False\n\n    def register(self, es, append=None, modulo=None):\n        \"\"\"register a `CMAEvolutionStrategy` instance for logging,\n        ``append=True`` appends to previous data logged under the same name,\n        by default previous data are overwritten.\n\n        \"\"\"\n        self.es = es\n        if append is not None:\n            self.append = append\n        if modulo is not None:\n            self.modulo = modulo\n        if not self.append and self.modulo != 0:\n            self.initialize()  # write file headers\n        self.registered = True\n        return self\n\n    def initialize(self, modulo=None):\n        \"\"\"reset logger, overwrite original files, `modulo`: log only every modulo call\"\"\"\n        if modulo is not None:\n            self.modulo = modulo\n        try:\n            es = self.es  # must have been registered\n        except AttributeError:\n            pass  # TODO: revise usage of es... that this can pass\n            raise _Error('call register() before initialize()')\n\n        # write headers for output\n        fn = self.name_prefix + 'fit.dat'\n        if 11 < 3:\n            strseedtime = 'seed=%d, %s' % (es.opts['seed'], time.asctime())\n        else:\n            strseedtime = 'seed=unkown, %s' % (time.asctime())\n\n        try:\n            with open(fn, 'w') as f:\n                f.write('% # columns=\"iteration, evaluation, sigma, axis ratio, ' +\n                        'bestever, best, median, worst objective function value, ' +\n                        'further objective values of best\", ' +\n                        strseedtime +\n                        # strftime(\"%Y/%m/%d %H:%M:%S\", localtime()) + # just asctime() would do\n                        '\\n')\n        except (IOError, OSError):\n            print('could not open file ' + fn)\n\n        fn = self.name_prefix + 'axlen.dat'\n        try:\n            f = open(fn, 'w')\n            f.write('%  columns=\"iteration, evaluation, sigma, max axis length, ' +\n                    ' min axis length, all principle axes lengths ' +\n                    ' (sorted square roots of eigenvalues of C)\", ' +\n                    strseedtime +\n                    '\\n')\n            f.close()\n        except (IOError, OSError):\n            print('could not open file ' + fn)\n        finally:\n            f.close()\n        fn = self.name_prefix + 'stddev.dat'\n        try:\n            f = open(fn, 'w')\n            f.write('% # columns=[\"iteration, evaluation, sigma, void, void, ' +\n                    ' stds==sigma*sqrt(diag(C))\", ' +\n                    strseedtime +\n                    '\\n')\n            f.close()\n        except (IOError, OSError):\n            print('could not open file ' + fn)\n        finally:\n            f.close()\n\n        fn = self.name_prefix + 'xmean.dat'\n        try:\n            with open(fn, 'w') as f:\n                f.write('% # columns=\"iteration, evaluation, void, void, void, xmean\", ' +\n                        strseedtime)\n                if 11 < 3:\n                    f.write(' # scaling_of_variables: ')\n                    if np.size(es.gp.scales) > 1:\n                        f.write(' '.join(map(str, es.gp.scales)))\n                    else:\n                        f.write(str(es.gp.scales))\n                    f.write(', typical_x: ')\n                    if np.size(es.gp.typical_x) > 1:\n                        f.write(' '.join(map(str, es.gp.typical_x)))\n                    else:\n                        f.write(str(es.gp.typical_x))\n                f.write('\\n')\n                f.close()\n        except (IOError, OSError):\n            print('could not open/write file ' + fn)\n\n        if 11 < 3:\n            fn = self.name_prefix + 'xrecentbest.dat'\n            try:\n                with open(fn, 'w') as f:\n                    f.write('% # iter+eval+sigma+0+fitness+xbest, ' +\n                            strseedtime +\n                            '\\n')\n            except (IOError, OSError):\n                print('could not open/write file ' + fn)\n\n        return self\n    # end def __init__\n\n    def load(self, filenameprefix=None):\n        \"\"\"loads data from files written and return a data dictionary, *not*\n        a prerequisite for using `plot()` or `disp()`.\n\n        Argument `filenameprefix` is the filename prefix of data to be loaded (five files),\n        by default ``'outcmaes'``.\n\n        Return data dictionary with keys `xrecent`, `xmean`, `f`, `D`, `std`\n\n        \"\"\"\n        if not filenameprefix:\n            filenameprefix = self.name_prefix\n        dat = self  # historical\n        # dat.xrecent = _fileToMatrix(filenameprefix + 'xrecentbest.dat')\n        dat.xmean = _fileToMatrix(filenameprefix + 'xmean.dat')\n        dat.std = _fileToMatrix(filenameprefix + 'stddev' + '.dat')\n        # a hack to later write something into the last entry\n        for key in ['xmean', 'std']:  # 'xrecent',\n            dat.__dict__[key].append(dat.__dict__[key][-1])  # copy last row to later fill in annotation position for display\n            dat.__dict__[key] = array(dat.__dict__[key], copy=False)\n        dat.f = array(_fileToMatrix(filenameprefix + 'fit.dat'))\n        dat.D = array(_fileToMatrix(filenameprefix + 'axlen' + '.dat'))\n        return dat\n\n\n    def add(self, fitness_values, es=None, more_data=[], modulo=None): # TODO: find a different way to communicate current x and f\n        \"\"\"append some logging data from `CMAEvolutionStrategy` class instance `es`,\n        if ``number_of_times_called % modulo`` equals to zero, never if ``modulo==0``.\n\n        The sequence ``more_data`` must always have the same length.\n\n        \"\"\"\n        self.counter += 1\n        fitness_values = np.sort(fitness_values)\n        if fitness_values[0] < self.best_fitness:\n            self.best_fitness = fitness_values[0]\n        mod = modulo if modulo is not None else self.modulo\n        if mod == 0 or (self.counter > 3 and self.counter % mod):\n            return\n        if es is None:\n            try:\n                es = self.es  # must have been registered\n            except AttributeError :\n                raise _Error('call register() before add() or add(es)')\n        elif not self.registered:\n            self.register(es)\n\n        if 11 < 3:\n            try: # TODO: find a more decent interface to store and pass recent_x\n                xrecent = es.best.last.x\n            except:\n                if self.counter == 2:  # by now a recent_x should be available\n                    print('WARNING: es.out[\\'recent_x\\'] not found in CMADataLogger.add, count='\n                          + str(self.counter))\n        try:\n            # fit\n            if es.update_count > 0:\n                # fit = es.fit.fit[0]  # TODO: where do we get the fitness from?\n                fn = self.name_prefix + 'fit.dat'\n                with open(fn, 'a') as f:\n                    f.write(str(es.update_count) + ' '\n                            + str(es.update_count * es.lambda_) + ' '\n                            + str(es.sigma) + ' '\n                            + str(es.diagD[-1]/es.diagD[0]) + ' '\n                            + str(self.best_fitness) + ' '\n                            + '%.16e' % fitness_values[0] + ' '\n                            + str(fitness_values[es.lambda_//2]) + ' '\n                            + str(fitness_values[-1]) + ' '\n                            # + str(es.sp.popsize) + ' '\n                            # + str(10**es.noiseS) + ' '\n                            # + str(es.sp.cmean) + ' '\n                            # + ' '.join(str(i) for i in es.more_to_write)\n                            + ' '.join(str(i) for i in more_data)\n                            + '\\n')\n                    # es.more_to_write = []\n            # axlen\n            fn = self.name_prefix + 'axlen.dat'\n            with open(fn, 'a') as f:  # does not rely on reference counting\n                f.write(str(es.update_count) + ' '\n                        + str(es.update_count * es.lambda_) + ' '\n                        + str(es.sigma) + ' '\n                        + str(es.diagD[-1]) + ' '\n                        + str(es.diagD[0]) + ' '\n                        + ' '.join(map(str, es.diagD))\n                        + '\\n')\n            # stddev\n            fn = self.name_prefix + 'stddev.dat'\n            with open(fn, 'a') as f:\n                f.write(str(es.update_count) + ' '\n                        + str(es.update_count * es.lambda_) + ' '\n                        + str(es.sigma) + ' '\n                        + '0 0 '\n                        + ' '.join(map(str, es.sigma*np.sqrt([es.C[i][i] for i in range(es.dim)])))\n                        + '\\n')\n            # xmean\n            fn = self.name_prefix + 'xmean.dat'\n            with open(fn, 'a') as f:\n                if es.update_count < 1:\n                    f.write('0 0 0 0 0 '\n                            + ' '.join(map(str,\n                                              # TODO should be optional the phenotyp?\n                                              # es.gp.geno(es.x0)\n                                              es.mean))\n                            + '\\n')\n                else:\n                    f.write(str(es.update_count) + ' '\n                            + str(es.update_count * es.lambda_) + ' '\n                            # + str(es.sigma) + ' '\n                            + '0 0 0 '\n                            # + str(es.fmean_noise_free) + ' '\n                            # + str(es.fmean) + ' '  # TODO: this does not make sense\n                            # TODO should be optional the phenotyp?\n                            + ' '.join(map(str, es.centroid))\n                            + '\\n')\n            # xrecent\n            if 11 < 3:\n                fn = self.name_prefix + 'xrecentbest.dat'\n                if es.countiter > 0 and xrecent is not None:\n                    with open(fn, 'a') as f:\n                        f.write(str(es.countiter) + ' '\n                                + str(es.countevals) + ' '\n                                + str(es.sigma) + ' '\n                                + '0 '\n                                + str(es.fit.fit[0]) + ' '\n                                + ' '.join(map(str, xrecent))\n                                + '\\n')\n\n        except (IOError, OSError):\n            if es.countiter == 1:\n                print('could not open/write file')\n\n    def closefig(self):\n        pylab.close(self.fighandle)\n\n    def save(self, nameprefix, switch=False):\n        \"\"\"saves logger data to a different set of files, for\n        ``switch=True`` also the loggers name prefix is switched to\n        the new value\n\n        \"\"\"\n        if not nameprefix or type(nameprefix) is not str:\n            _Error('filename prefix must be a nonempty string')\n\n        if nameprefix == self.default_prefix:\n            _Error('cannot save to default name \"' + nameprefix + '...\", chose another name')\n\n        if nameprefix == self.name_prefix:\n            return\n\n        for name in CMADataLogger.names:\n            open(nameprefix+name+'.dat', 'w').write(open(self.name_prefix+name+'.dat').read())\n\n        if switch:\n            self.name_prefix = nameprefix\n\n    def plot(self, fig=None, iabscissa=1, iteridx=None, plot_mean=True,  # TODO: plot_mean default should be False\n             foffset=1e-19, x_opt = None, fontsize=10):\n        \"\"\"\n        plot data from a `CMADataLogger` (using the files written by the logger).\n\n        Arguments\n        ---------\n            `fig`\n                figure number, by default 325\n            `iabscissa`\n                ``0==plot`` versus iteration count,\n                ``1==plot`` versus function evaluation number\n            `iteridx`\n                iteration indices to plot\n\n        Return `CMADataLogger` itself.\n\n        Examples\n        --------\n        ::\n\n            import cma\n            logger = cma.CMADataLogger()  # with default name\n            # try to plot the \"default logging\" data (e.g. from previous fmin calls)\n            logger.plot() # to continue you might need to close the pop-up window\n                          # once and call plot() again.\n                          # This behavior seems to disappear in subsequent\n                          # calls of plot(). Also using ipython with -pylab\n                          # option might help.\n            cma.savefig('fig325.png')  # save current figure\n            logger.closefig()\n\n        Dependencies: matlabplotlib/pylab.\n\n        \"\"\"\n\n        dat = self.load(self.name_prefix)\n\n        try:\n            # pylab: prodedural interface for matplotlib\n            from  matplotlib.pylab import figure, ioff, ion, subplot, semilogy, hold, plot, grid, \\\n                 axis, title, text, xlabel, isinteractive, draw, gcf\n\n        except ImportError:\n            ImportError('could not find matplotlib.pylab module, function plot() is not available')\n            return\n\n        if fontsize and pylab.rcParams['font.size'] != fontsize:\n            print('global variable pylab.rcParams[\\'font.size\\'] set (from ' +\n                  str(pylab.rcParams['font.size']) + ') to ' + str(fontsize))\n            pylab.rcParams['font.size'] = fontsize  # subtracted in the end, but return can happen inbetween\n\n        if fig:\n            figure(fig)\n        else:\n            figure(325)\n            # show()  # should not be necessary\n        self.fighandle = gcf()  # fighandle.number\n\n        if iabscissa not in (0,1):\n            iabscissa = 1\n        interactive_status = isinteractive()\n        ioff() # prevents immediate drawing\n\n        if 11 < 3:\n            dat.x = dat.xrecent\n            if len(dat.x) < 2:\n                print('not enough data to plot')\n                return {}\n        # if plot_mean:\n        dat.x = dat.xmean    # this is the genotyp\n        if iteridx is not None:\n            dat.f = dat.f[np.where([x in iteridx for x in dat.f[:,0]])[0],:]\n            dat.D = dat.D[np.where([x in iteridx for x in dat.D[:,0]])[0],:]\n            iteridx.append(dat.x[-1,1])  # last entry is artificial\n            dat.x = dat.x[np.where([x in iteridx for x in dat.x[:,0]])[0],:]\n            dat.std = dat.std[np.where([x in iteridx for x in dat.std[:,0]])[0],:]\n\n        if iabscissa == 0:\n            xlab = 'iterations'\n        elif iabscissa == 1:\n            xlab = 'function evaluations'\n\n        # use fake last entry in x and std for line extension-annotation\n        if dat.x.shape[1] < 100:\n            minxend = int(1.06*dat.x[-2, iabscissa])\n            # write y-values for individual annotation into dat.x\n            dat.x[-1, iabscissa] = minxend  # TODO: should be ax[1]\n            idx = np.argsort(dat.x[-2,5:])\n            idx2 = np.argsort(idx)\n            if x_opt is None:\n                dat.x[-1,5+idx] = np.linspace(np.min(dat.x[:,5:]),\n                            np.max(dat.x[:,5:]), dat.x.shape[1]-5)\n            else:\n                dat.x[-1,5+idx] = np.logspace(np.log10(np.min(abs(dat.x[:,5:]))),\n                            np.log10(np.max(abs(dat.x[:,5:]))), dat.x.shape[1]-5)\n        else:\n            minxend = 0\n\n        if len(dat.f) == 0:\n            print('nothing to plot')\n            return\n\n        # not in use anymore, see formatter above\n        # xticklocs = np.arange(5) * np.round(minxend/4., -int(np.log10(minxend/4.)))\n\n        # dfit(dfit<1e-98) = NaN;\n\n        ioff() # turns update off\n\n        # TODO: if abscissa==0 plot in chunks, ie loop over subsets where dat.f[:,0]==countiter is monotonous\n\n        subplot(2,2,1)\n        self.plotdivers(dat, iabscissa, foffset)\n\n        # TODO: modularize also the remaining subplots\n        subplot(2,2,2)\n        hold(False)\n        if x_opt is not None:  # TODO: differentate neg and pos?\n            semilogy(dat.x[:, iabscissa], abs(dat.x[:,5:]) - x_opt, '-')\n        else:\n            plot(dat.x[:, iabscissa], dat.x[:,5:],'-')\n        hold(True)\n        grid(True)\n        ax = array(axis())\n        # ax[1] = max(minxend, ax[1])\n        axis(ax)\n        ax[1] -= 1e-6\n        if dat.x.shape[1] < 100:\n            yy = np.linspace(ax[2]+1e-6, ax[3]-1e-6, dat.x.shape[1]-5)\n            #yyl = np.sort(dat.x[-1,5:])\n            idx = np.argsort(dat.x[-1,5:])\n            idx2 = np.argsort(idx)\n            if x_opt is not None:\n                semilogy([dat.x[-1, iabscissa], ax[1]], [abs(dat.x[-1,5:]), yy[idx2]], 'k-') # line from last data point\n                semilogy(np.dot(dat.x[-2, iabscissa],[1,1]), array([ax[2]+1e-6, ax[3]-1e-6]), 'k-')\n            else:\n                # plot([dat.x[-1, iabscissa], ax[1]], [dat.x[-1,5:], yy[idx2]], 'k-') # line from last data point\n                plot(np.dot(dat.x[-2, iabscissa],[1,1]), array([ax[2]+1e-6, ax[3]-1e-6]), 'k-')\n            # plot(array([dat.x[-1, iabscissa], ax[1]]),\n            #      reshape(array([dat.x[-1,5:], yy[idx2]]).flatten(), (2,4)), '-k')\n            for i in range(len(idx)):\n                # TODOqqq: annotate phenotypic value!?\n                # text(ax[1], yy[i], 'x(' + str(idx[i]) + ')=' + str(dat.x[-2,5+idx[i]]))\n                text(dat.x[-1,iabscissa], dat.x[-1,5+i], 'x(' + str(i) + ')=' + str(dat.x[-2,5+i]))\n\n        i = 2  # find smallest i where iteration count differs (in case the same row appears twice)\n        while i < len(dat.f) and dat.f[-i][0] == dat.f[-1][0]:\n            i += 1\n        title('Object Variables (' + ('mean' if plot_mean else 'curr best') +\n                ', ' + str(dat.x.shape[1]-5) + '-D, popsize~' +\n                (str(int((dat.f[-1][1] - dat.f[-i][1]) / (dat.f[-1][0] - dat.f[-i][0])))\n                    if len(dat.f.T[0]) > 1 and dat.f[-1][0] > dat.f[-i][0] else 'NA')\n                + ')')\n        # pylab.xticks(xticklocs)\n\n        # Scaling\n        subplot(2,2,3)\n        hold(False)\n        semilogy(dat.D[:, iabscissa], dat.D[:,5:], '-b')\n        hold(True)\n        grid(True)\n        ax = array(axis())\n        # ax[1] = max(minxend, ax[1])\n        axis(ax)\n        title('Scaling (All Main Axes)')\n        # pylab.xticks(xticklocs)\n        xlabel(xlab)\n\n        # standard deviations\n        subplot(2,2,4)\n        hold(False)\n        # remove sigma from stds (graphs become much better readible)\n        dat.std[:,5:] = np.transpose(dat.std[:,5:].T / dat.std[:,2].T)\n        # ax = array(axis())\n        # ax[1] = max(minxend, ax[1])\n        # axis(ax)\n        if 1 < 2 and dat.std.shape[1] < 100:\n            # use fake last entry in x and std for line extension-annotation\n            minxend = int(1.06*dat.x[-2, iabscissa])\n            dat.std[-1, iabscissa] = minxend  # TODO: should be ax[1]\n            idx = np.argsort(dat.std[-2,5:])\n            idx2 = np.argsort(idx)\n            dat.std[-1,5+idx] = np.logspace(np.log10(np.min(dat.std[:,5:])),\n                            np.log10(np.max(dat.std[:,5:])), dat.std.shape[1]-5)\n\n            dat.std[-1, iabscissa] = minxend  # TODO: should be ax[1]\n            yy = np.logspace(np.log10(ax[2]), np.log10(ax[3]), dat.std.shape[1]-5)\n            #yyl = np.sort(dat.std[-1,5:])\n            idx = np.argsort(dat.std[-1,5:])\n            idx2 = np.argsort(idx)\n            # plot(np.dot(dat.std[-2, iabscissa],[1,1]), array([ax[2]+1e-6, ax[3]-1e-6]), 'k-') # vertical separator\n            # vertical separator\n            plot(np.dot(dat.std[-2, iabscissa],[1,1]), array([np.min(dat.std[-2,5:]), np.max(dat.std[-2,5:])]), 'k-')\n            hold(True)\n            # plot([dat.std[-1, iabscissa], ax[1]], [dat.std[-1,5:], yy[idx2]], 'k-') # line from last data point\n            for i in range(len(idx)):\n                # text(ax[1], yy[i], ' '+str(idx[i]))\n                text(dat.std[-1, iabscissa], dat.std[-1, 5+i], ' '+str(i))\n        semilogy(dat.std[:, iabscissa], dat.std[:,5:], '-')\n        grid(True)\n        title('Standard Deviations in All Coordinates')\n        # pylab.xticks(xticklocs)\n        xlabel(xlab)\n        draw()  # does not suffice\n        if interactive_status:\n            ion()  # turns interactive mode on (again)\n            draw()\n        show()\n\n        return self\n\n\n    #____________________________________________________________\n    #____________________________________________________________\n    #\n    @staticmethod\n    def plotdivers(dat, iabscissa, foffset):\n        \"\"\"helper function for `plot()` that plots all what is\n        in the upper left subplot like fitness, sigma, etc.\n\n        Arguments\n        ---------\n            `iabscissa` in ``(0,1)``\n                0==versus fevals, 1==versus iteration\n            `foffset`\n                offset to fitness for log-plot\n\n         :See: `plot()`\n\n        \"\"\"\n        from  matplotlib.pylab import semilogy, hold, grid, \\\n                 axis, title, text\n        fontsize = pylab.rcParams['font.size']\n\n        hold(False)\n\n        dfit = dat.f[:,5]-min(dat.f[:,5])\n        dfit[dfit<1e-98] = np.NaN\n\n        if dat.f.shape[1] > 7:\n            # semilogy(dat.f[:, iabscissa], abs(dat.f[:,[6, 7, 10, 12]])+foffset,'-k')\n            semilogy(dat.f[:, iabscissa], abs(dat.f[:,[6, 7]])+foffset,'-k')\n            hold(True)\n\n        # (larger indices): additional fitness data, for example constraints values\n        if dat.f.shape[1] > 8:\n            # dd = abs(dat.f[:,7:]) + 10*foffset\n            # dd = np.where(dat.f[:,7:]==0, np.NaN, dd) # cannot be\n            semilogy(dat.f[:, iabscissa], np.abs(dat.f[:,8:]) + 10*foffset, 'm')\n            hold(True)\n\n        idx = np.where(dat.f[:,5]>1e-98)[0]  # positive values\n        semilogy(dat.f[idx, iabscissa], dat.f[idx,5]+foffset, '.b')\n        hold(True)\n        grid(True)\n\n        idx = np.where(dat.f[:,5] < -1e-98)  # negative values\n        semilogy(dat.f[idx, iabscissa], abs(dat.f[idx,5])+foffset,'.r')\n\n        semilogy(dat.f[:, iabscissa],abs(dat.f[:,5])+foffset,'-b')\n        semilogy(dat.f[:, iabscissa], dfit, '-c')\n\n        if 11 < 3:  # delta-fitness as points\n            dfit = dat.f[1:, 5] - dat.f[:-1,5]  # should be negative usually\n            semilogy(dat.f[1:,iabscissa],  # abs(fit(g) - fit(g-1))\n                np.abs(dfit)+foffset, '.c')\n            i = dfit > 0\n            # print(np.sum(i) / float(len(dat.f[1:,iabscissa])))\n            semilogy(dat.f[1:,iabscissa][i],  # abs(fit(g) - fit(g-1))\n                np.abs(dfit[i])+foffset, '.r')\n\n        # overall minimum\n        i = np.argmin(dat.f[:,5])\n        semilogy(dat.f[i, iabscissa]*np.ones(2), dat.f[i,5]*np.ones(2), 'rd')\n        # semilogy(dat.f[-1, iabscissa]*np.ones(2), dat.f[-1,4]*np.ones(2), 'rd')\n\n        # AR and sigma\n        semilogy(dat.f[:, iabscissa], dat.f[:,3], '-r') # AR\n        semilogy(dat.f[:, iabscissa], dat.f[:,2],'-g') # sigma\n        semilogy(dat.std[:-1, iabscissa], np.vstack([list(map(max, dat.std[:-1,5:])), list(map(min, dat.std[:-1,5:]))]).T,\n                     '-m', linewidth=2)\n        text(dat.std[-2, iabscissa], max(dat.std[-2, 5:]), 'max std', fontsize=fontsize)\n        text(dat.std[-2, iabscissa], min(dat.std[-2, 5:]), 'min std', fontsize=fontsize)\n        ax = array(axis())\n        # ax[1] = max(minxend, ax[1])\n        axis(ax)\n        text(ax[0]+0.01, ax[2], # 10**(log10(ax[2])+0.05*(log10(ax[3])-log10(ax[2]))),\n             '.f_recent=' + repr(dat.f[-1,5]) )\n\n        # title('abs(f) (blue), f-min(f) (cyan), Sigma (green), Axis Ratio (red)')\n        title('blue:abs(f), cyan:f-min(f), green:sigma, red:axis ratio', fontsize=fontsize-1)\n        # pylab.xticks(xticklocs)\n\n\n    def downsampling(self, factor=10, first=3, switch=True):\n        \"\"\"\n        rude downsampling of a `CMADataLogger` data file by `factor`, keeping\n        also the first `first` entries. This function is a stump and subject\n        to future changes.\n\n        Arguments\n        ---------\n           - `factor` -- downsampling factor\n           - `first` -- keep first `first` entries\n           - `switch` -- switch the new logger name to oldname+'down'\n\n        Details\n        -------\n        ``self.name_prefix+'down'`` files are written\n\n        Example\n        -------\n        ::\n\n            import cma\n            cma.downsampling()  # takes outcmaes* files\n            cma.plot('outcmaesdown')\n\n        \"\"\"\n        newprefix = self.name_prefix + 'down'\n        for name in CMADataLogger.names:\n            f = open(newprefix+name+'.dat','w')\n            iline = 0\n            cwritten = 0\n            for line in open(self.name_prefix+name+'.dat'):\n                if iline < first or iline % factor == 0:\n                    f.write(line)\n                    cwritten += 1\n                iline += 1\n            f.close()\n            print('%d' % (cwritten) + ' lines written in ' + newprefix+name+'.dat')\n        if switch:\n            self.name_prefix += 'down'\n        return self\n\n    #____________________________________________________________\n    #____________________________________________________________\n    #\n    def disp_header(self):\n        heading = 'Iterat Nfevals  function value    axis ratio maxstd   minstd'\n        print(heading)\n\n    def disp(self, idx=100):  # r_[0:5,1e2:1e9:1e2,-10:0]):\n        \"\"\"displays selected data from (files written by) the class `CMADataLogger`.\n\n        Arguments\n        ---------\n           `idx`\n               indices corresponding to rows in the data file;\n               if idx is a scalar (int), the first two, then every idx-th,\n               and the last three rows are displayed. Too large index values are removed.\n               If ``len(idx) == 1``, only a single row is displayed, e.g. the last\n               entry when ``idx == [-1]``.\n\n        Example\n        -------\n        >>> import cma, numpy as np\n        >>> res = cma.fmin(cma.fcts.elli, 7 * [0.1], 1, verb_disp=1e9)  # generate data\n        >>> assert res[1] < 1e-9\n        >>> assert res[2] < 4400\n        >>> l = cma.CMADataLogger()  # == res[-1], logger with default name, \"points to\" above data\n        >>> l.disp([0,-1])  # first and last\n        >>> l.disp(20)  # some first/last and every 20-th line\n        >>> l.disp(np.r_[0:999999:100, -1]) # every 100-th and last\n        >>> l.disp(np.r_[0, -10:0]) # first and ten last\n        >>> cma.disp(l.name_prefix, np.r_[0::100, -10:])  # the same as l.disp(...)\n\n        Details\n        -------\n        The data line with the best f-value is displayed as last line.\n\n        :See: `disp()`\n\n        \"\"\"\n\n        filenameprefix=self.name_prefix\n\n        def printdatarow(dat, iteration):\n            \"\"\"print data of iteration i\"\"\"\n            i = np.where(dat.f[:, 0] == iteration)[0][0]\n            j = np.where(dat.std[:, 0] == iteration)[0][0]\n            print('%5d' % (int(dat.f[i,0])) + ' %6d' % (int(dat.f[i,1])) + ' %.14e' % (dat.f[i,5]) +\n                  ' %5.1e' % (dat.f[i,3]) +\n                  ' %6.2e' % (max(dat.std[j,5:])) + ' %6.2e' % min(dat.std[j,5:]))\n\n        dat = CMADataLogger(filenameprefix).load()\n        ndata = dat.f.shape[0]\n\n        # map index to iteration number, is difficult if not all iteration numbers exist\n        # idx = idx[np.where(map(lambda x: x in dat.f[:,0], idx))[0]] # TODO: takes pretty long\n        # otherwise:\n        if idx is None:\n            idx = 100\n        if np.isscalar(idx):\n            # idx = np.arange(0, ndata, idx)\n            if idx:\n                idx = np.r_[0, 1, idx:ndata-3:idx, -3:0]\n            else:\n                idx = np.r_[0, 1, -3:0]\n\n        idx = array(idx)\n        idx = idx[idx<=ndata]  # TODO: shouldn't this be \"<\"?\n        idx = idx[-idx<=ndata]\n        iters = dat.f[idx, 0]\n        idxbest = np.argmin(dat.f[:,5])\n        iterbest = dat.f[idxbest, 0]\n        if len(iters) == 1:\n            printdatarow(dat, iters[0])\n        else:\n            self.disp_header()\n            for i in iters:\n                printdatarow(dat, i)\n            self.disp_header()\n            printdatarow(dat, iterbest)\n        sys.stdout.flush()\n\ndef irg(ar):\n    return range(len(ar))\nclass AII(object):\n    \"\"\"unstable experimental code, updates ps, sigma, sigmai, pr, r, sigma_r, mean,\n    all from self.\n\n    Depends on that the ordering of solutions has not change upon calling update\n\n    should become a OOOptimizer in far future?\n\n    \"\"\"\n    # Try: ps**2 - 1 instead of (ps**2)**0.5 / chi1 - 1: compare learning rate etc\n    # and dito for psr\n\n    def __init__(self, x0, sigma0, randn=np.random.randn):\n        \"\"\"TODO: check scaling of r-learing: seems worse than linear: 9e3 25e3 65e3 (10,20,40-D)\"\"\"\n        self.N = len(x0)\n        N = self.N\n        # parameters to play with:\n        # PROBLEM: smaller eta_r even fails on *axparallel* cigar!! Also dampi needs to be smaller then!\n        self.dampi = 4 * N  # two times smaller is\n        self.eta_r = 0 / N / 3   # c_r learning rate for direction, cigar: 4/N/3 is optimal in 10-D, 10/N/3 still works (15 in 20-D) but not on the axparallel cigar with recombination\n        self.mu = 1\n        self.use_abs_sigma = 1    # without it is a problem on 20=D axpar-cigar!!, but why?? Because dampi is just boarderline\n        self.use_abs_sigma_r = 1  #\n\n        self.randn = randn\n        self.x0 = array(x0, copy=True)\n        self.sigma0 = sigma0\n\n        self.cs = 1 / N**0.5  # evolution path for step-size(s)\n        self.damps = 1\n        self.use_sign = 0\n        self.use_scalar_product = 0  # sometimes makes it somewhat worse on Rosenbrock, don't know why\n        self.csr = 1 / N**0.5  # cumulation for sigma_r\n        self.dampsr = (4 * N)**0.5\n        self.chi1 = (2/np.pi)**0.5\n        self.chiN = N**0.5*(1-1./(4.*N)+1./(21.*N**2)) # expectation of norm(randn(N,1))\n        self.initialize()\n    def initialize(self):\n        \"\"\"alias ``reset``, set all state variables to initial values\"\"\"\n        N = self.N\n        self.mean = array(self.x0, copy=True)\n        self.sigma = self.sigma0\n        self.sigmai = np.ones(N)\n        self.ps = np.zeros(N)  # path for individual and globalstep-size(s)\n        self.r = np.zeros(N)\n        self.pr = 0         # cumulation for zr = N(0,1)\n        self.sigma_r = 0\n    def ask(self, popsize):\n        if popsize == 1:\n            raise NotImplementedError()\n        self.Z = [self.randn(self.N) for _i in range(popsize)]\n        self.zr = list(self.randn(popsize))\n        pop = [self.mean + self.sigma * (self.sigmai * self.Z[k])\n                + self.zr[k] * self.sigma_r * self.r\n                for k in range(popsize)]\n        if not np.isfinite(pop[0][0]):\n            raise ValueError()\n        return pop\n    def tell(self, X, f):\n        \"\"\"update \"\"\"\n        mu = 1 if self.mu else int(len(f) / 4)\n        idx = np.argsort(f)[:mu]\n        zr = [self.zr[i] for i in idx]\n        Z = [self.Z[i] for i in idx]\n        X = [X[i] for i in idx]\n        xmean = np.mean(X, axis=0)\n\n        self.ps *= 1 - self.cs\n        self.ps += (self.cs*(2-self.cs))**0.5 * mu**0.5 * np.mean(Z, axis=0)\n        self.sigma *= np.exp((self.cs/self.damps) * (sum(self.ps**2)**0.5 / self.chiN - 1))\n        if self.use_abs_sigma:\n            self.sigmai *= np.exp((1/self.dampi) * (np.abs(self.ps) / self.chi1 - 1))\n        else:\n            self.sigmai *= np.exp((1.3/self.dampi/2) * (self.ps**2 - 1))\n\n        self.pr *= 1 - self.csr\n        self.pr += (self.csr*(2-self.csr))**0.5 * mu**0.5 * np.mean(zr)\n        fac = 1\n        if self.use_sign:\n            fac = np.sign(self.pr)  # produces readaptations on the cigar\n        else:\n            self.pr = max([0, self.pr])\n        if self.use_scalar_product:\n            if np.sign(sum(self.r * (xmean - self.mean))) < 0: # and self.pr > 1:\n            # if np.sign(sum(self.r * self.ps)) < 0:\n                self.r *= -1\n        if self.eta_r:\n            self.r *= (1 - self.eta_r) * self.sigma_r\n            self.r += fac * self.eta_r * mu**0.5 * (xmean - self.mean)\n            self.r /= sum(self.r**2)**0.5\n        if self.use_abs_sigma_r:\n            self.sigma_r *= np.exp((1/self.dampsr) * ((self.pr**2)**0.5 / self.chi1 - 1))\n        else:\n            # this is worse on the cigar, where the direction vector(!) behaves strangely\n            self.sigma_r *= np.exp((1/self.dampsr) * (self.pr**2 - 1) / 2)\n        self.sigma_r = max([self.sigma * sum(self.sigmai**2)**0.5 / 3, self.sigma_r])\n        # self.sigma_r = 0\n        self.mean = xmean\ndef fmin(func, x0, sigma0=None, args=()\n    # the follow string arguments are evaluated, besides the verb_filenameprefix\n    , CMA_active='False  # exponential negative update, conducted after the original update'\n    , CMA_activefac='1  # learning rate multiplier for active update'\n    , CMA_cmean='1  # learning rate for the mean value'\n    , CMA_const_trace='False  # normalize trace, value CMA_const_trace=2 normalizes sum log eigenvalues to zero'\n    , CMA_diagonal='0*100*N/sqrt(popsize)  # nb of iterations with diagonal covariance matrix, True for always' # TODO 4/ccov_separable?\n    , CMA_eigenmethod='np.linalg.eigh  # 0=numpy-s eigh, -1=pygsl, otherwise cma.Misc.eig (slower)'\n    , CMA_elitist='False # elitism likely impairs global search performance'\n    , CMA_mirrors='popsize < 6  # values <0.5 are interpreted as fraction, values >1 as numbers (rounded), otherwise about 0.16 is used'\n    , CMA_mu='None  # parents selection parameter, default is popsize // 2'\n    , CMA_on='True  # False or 0 for no adaptation of the covariance matrix'\n    , CMA_rankmu='True  # False or 0 for omitting rank-mu update of covariance matrix'\n    , CMA_rankmualpha='0.3  # factor of rank-mu update if mu=1, subject to removal, default might change to 0.0'\n    , CMA_dampfac='1  #v positive multiplier for step-size damping, 0.3 is close to optimal on the sphere'\n    , CMA_dampsvec_fac='np.Inf  # tentative and subject to changes, 0.5 would be a \"default\" damping for sigma vector update'\n    , CMA_dampsvec_fade='0.1  # tentative fading out parameter for sigma vector update'\n    , CMA_teststds='None  # factors for non-isotropic initial distr. mainly for test purpose, see scaling_...'\n    , CMA_AII='False  # not yet tested'\n    , bounds='[None, None]  # lower (=bounds[0]) and upper domain boundaries, each a scalar or a list/vector'\n    , eval_parallel='False  # when True, func might be called with more than one solution as first argument'\n    , eval_initial_x='False  # '\n    , fixed_variables='None  # dictionary with index-value pairs like {0:1.1, 2:0.1} that are not optimized'\n    , ftarget='-inf  #v target function value, minimization'\n    , incpopsize='2  # in fmin(): multiplier for increasing popsize before each restart'\n    , maxfevals='inf  #v maximum number of function evaluations'\n    , maxiter='100 + 50 * (N+3)**2 // popsize**0.5  #v maximum number of iterations'\n    , mindx='0  #v minimal std in any direction, cave interference with tol*'\n    , minstd='0  #v minimal std in any coordinate direction, cave interference with tol*'\n    , noise_handling='False  # maximal number of evaluations for noise treatment, only fmin'\n    , noise_reevals=' 1.5 + popsize/20  # number of solution to be reevaluated for noise measurement, only fmin'\n    , noise_eps='1e-7  # perturbation factor for noise handling reevaluations, only fmin'\n    , noise_change_sigma='True  # exponent to default sigma increment'\n    , popsize='4+int(3*log(N))  # population size, AKA lambda, number of new solution per iteration'\n    , randn='np.random.standard_normal  #v randn((lam, N)) must return an np.array of shape (lam, N)'\n    , restarts='0  # in fmin(): number of restarts'\n    , restart_from_best='False'\n    , scaling_of_variables='None  # scale for each variable, sigma0 is interpreted w.r.t. this scale, in that effective_sigma0 = sigma0*scaling. Internally the variables are divided by scaling_of_variables and sigma is unchanged, default is ones(N)'\n    , seed='None  # random number seed'\n    , termination_callback='None  #v a function returning True for termination, called after each iteration step and could be abused for side effects'\n    , tolfacupx='1e3  #v termination when step-size increases by tolfacupx (diverges). That is, the initial step-size was chosen far too small and better solutions were found far away from the initial solution x0'\n    , tolupsigma='1e20  #v sigma/sigma0 > tolupsigma * max(sqrt(eivenvals(C))) indicates \"creeping behavior\" with usually minor improvements'\n    , tolfun='1e-11  #v termination criterion: tolerance in function value, quite useful'\n    , tolfunhist='1e-12  #v termination criterion: tolerance in function value history'\n    , tolstagnation='int(100 + 100 * N**1.5 / popsize)  #v termination if no improvement over tolstagnation iterations'\n    , tolx='1e-11  #v termination criterion: tolerance in x-changes'\n    , transformation='None  # [t0, t1] are two mappings, t0 transforms solutions from CMA-representation to f-representation (tf_pheno), t1 is the (optional) back transformation, see class GenoPheno'\n    , typical_x='None  # used with scaling_of_variables'\n    , updatecovwait='None  #v number of iterations without distribution update, name is subject to future changes' # TODO: rename: iterwaitupdatedistribution?\n    , verb_append='0  # initial evaluation counter, if append, do not overwrite output files'\n    , verb_disp='100  #v verbosity: display console output every verb_disp iteration'\n    , verb_filenameprefix='outcmaes  # output filenames prefix'\n    , verb_log='1  #v verbosity: write data to files every verb_log iteration, writing can be time critical on fast to evaluate functions'\n    , verb_plot='0  #v in fmin(): plot() is called every verb_plot iteration'\n    , verb_time='True  #v output timings on console'\n    , vv='0  #? versatile variable for hacking purposes, value found in self.opts[\\'vv\\']'\n     ):\n    \"\"\"functional interface to the stochastic optimizer CMA-ES\n    for non-convex function minimization.\n\n    Calling Sequences\n    =================\n        ``fmin([],[])``\n            returns all optional arguments, that is,\n            all keyword arguments to fmin with their default values\n            in a dictionary.\n        ``fmin(func, x0, sigma0)``\n            minimizes `func` starting at `x0` and with standard deviation\n            `sigma0` (step-size)\n        ``fmin(func, x0, sigma0, ftarget=1e-5)``\n            minimizes `func` up to target function value 1e-5\n        ``fmin(func, x0, sigma0, args=('f',), **options)``\n            minimizes `func` called with an additional argument ``'f'``.\n            `options` is a dictionary with additional keyword arguments, e.g.\n            delivered by `Options()`.\n        ``fmin(func, x0, sigma0, **{'ftarget':1e-5, 'popsize':40})``\n            the same as ``fmin(func, x0, sigma0, ftarget=1e-5, popsize=40)``\n        ``fmin(func, esobj, **{'maxfevals': 1e5})``\n            uses the `CMAEvolutionStrategy` object instance `esobj` to optimize\n            `func`, similar to `CMAEvolutionStrategy.optimize()`.\n\n    Arguments\n    =========\n        `func`\n            function to be minimized. Called as\n            ``func(x,*args)``. `x` is a one-dimensional `numpy.ndarray`. `func`\n            can return `numpy.NaN`,\n            which is interpreted as outright rejection of solution `x`\n            and invokes an immediate resampling and (re-)evaluation\n            of a new solution not counting as function evaluation.\n        `x0`\n            list or `numpy.ndarray`, initial guess of minimum solution\n            or `cma.CMAEvolutionStrategy` object instance. In this case\n            `sigma0` can be omitted.\n        `sigma0`\n            scalar, initial standard deviation in each coordinate.\n            `sigma0` should be about 1/4 of the search domain width where the\n            optimum is to be expected. The variables in `func` should be\n            scaled such that they presumably have similar sensitivity.\n            See also option `scaling_of_variables`.\n\n    Keyword Arguments\n    =================\n    All arguments besides `args` and `verb_filenameprefix` are evaluated\n    if they are of type `str`, see class `Options` for details. The following\n    list might not be fully up-to-date, use ``cma.Options()`` or\n    ``cma.fmin([],[])`` to get the actual list.\n    ::\n\n        args=() -- additional arguments for func, not in `cma.Options()`\n        CMA_active='False  # exponential negative update, conducted after the original\n                update'\n        CMA_activefac='1  # learning rate multiplier for active update'\n        CMA_cmean='1  # learning rate for the mean value'\n        CMA_dampfac='1  #v positive multiplier for step-size damping, 0.3 is close to\n                optimal on the sphere'\n        CMA_diagonal='0*100*N/sqrt(popsize)  # nb of iterations with diagonal\n                covariance matrix, True for always'\n        CMA_eigenmethod='np.linalg.eigh  # 0=numpy-s eigh, -1=pygsl, alternative: Misc.eig (slower)'\n        CMA_elitist='False # elitism likely impairs global search performance'\n        CMA_mirrors='0  # values <0.5 are interpreted as fraction, values >1 as numbers\n                (rounded), otherwise about 0.16 is used'\n        CMA_mu='None  # parents selection parameter, default is popsize // 2'\n        CMA_on='True  # False or 0 for no adaptation of the covariance matrix'\n        CMA_rankmu='True  # False or 0 for omitting rank-mu update of covariance\n                matrix'\n        CMA_rankmualpha='0.3  # factor of rank-mu update if mu=1, subject to removal,\n                default might change to 0.0'\n        CMA_teststds='None  # factors for non-isotropic initial distr. mainly for test\n                purpose, see scaling_...'\n        bounds='[None, None]  # lower (=bounds[0]) and upper domain boundaries, each a\n                scalar or a list/vector'\n        eval_initial_x='False  # '\n        fixed_variables='None  # dictionary with index-value pairs like {0:1.1, 2:0.1}\n                that are not optimized'\n        ftarget='-inf  #v target function value, minimization'\n        incpopsize='2  # in fmin(): multiplier for increasing popsize before each\n                restart'\n        maxfevals='inf  #v maximum number of function evaluations'\n        maxiter='long(1e3*N**2/sqrt(popsize))  #v maximum number of iterations'\n        mindx='0  #v minimal std in any direction, cave interference with tol*'\n        minstd='0  #v minimal std in any coordinate direction, cave interference with\n                tol*'\n        noise_eps='1e-7  # perturbation factor for noise handling reevaluations, only\n                fmin'\n        noise_handling='False  # maximal number of evaluations for noise treatment,\n                only fmin'\n        noise_reevals=' 1.5 + popsize/20  # number of solution to be reevaluated for\n                noise measurement, only fmin'\n        popsize='4+int(3*log(N))  # population size, AKA lambda, number of new solution\n                per iteration'\n        randn='np.random.standard_normal  #v randn((lam, N)) must return an np.array of\n                shape (lam, N)'\n        restarts='0  # in fmin(): number of restarts'\n        scaling_of_variables='None  # scale for each variable, sigma0 is interpreted\n                w.r.t. this scale, in that effective_sigma0 = sigma0*scaling.\n                Internally the variables are divided by scaling_of_variables and sigma\n                is unchanged, default is ones(N)'\n        seed='None  # random number seed'\n        termination_callback='None  #v in fmin(): a function returning True for\n                termination, called after each iteration step and could be abused for\n                side effects'\n        tolfacupx='1e3  #v termination when step-size increases by tolfacupx\n                (diverges). That is, the initial step-size was chosen far too small and\n                better solutions were found far away from the initial solution x0'\n        tolupsigma='1e20  #v sigma/sigma0 > tolupsigma * max(sqrt(eivenvals(C)))\n                indicates \"creeping behavior\" with usually minor improvements'\n        tolfun='1e-11  #v termination criterion: tolerance in function value, quite\n                useful'\n        tolfunhist='1e-12  #v termination criterion: tolerance in function value\n                history'\n        tolstagnation='int(100 * N**1.5 / popsize)  #v termination if no improvement\n                over tolstagnation iterations'\n        tolx='1e-11  #v termination criterion: tolerance in x-changes'\n        transformation='None  # [t0, t1] are two mappings, t0 transforms solutions from\n                CMA-representation to f-representation, t1 is the back transformation,\n                see class GenoPheno'\n        typical_x='None  # used with scaling_of_variables'\n        updatecovwait='None  #v number of iterations without distribution update, name\n                is subject to future changes'\n        verb_append='0  # initial evaluation counter, if append, do not overwrite\n                output files'\n        verb_disp='100  #v verbosity: display console output every verb_disp iteration'\n        verb_filenameprefix='outcmaes  # output filenames prefix'\n        verb_log='1  #v verbosity: write data to files every verb_log iteration,\n                writing can be time critical on fast to evaluate functions'\n        verb_plot='0  #v in fmin(): plot() is called every verb_plot iteration'\n        verb_time='True  #v output timings on console'\n        vv='0  #? versatile variable for hacking purposes, value found in\n                self.opts['vv']'\n\n    Subsets of options can be displayed, for example like ``cma.Options('tol')``,\n    see also class `Options`.\n\n    Return\n    ======\n    Similar to `OOOptimizer.optimize()` and/or `CMAEvolutionStrategy.optimize()`, return the\n    list provided by `CMAEvolutionStrategy.result()` appended with an `OOOptimizer` and an\n    `BaseDataLogger`::\n\n        res = optim.result() + (optim.stop(), optim, logger)\n\n    where\n        - ``res[0]`` (``xopt``) -- best evaluated solution\n        - ``res[1]`` (``fopt``) -- respective function value\n        - ``res[2]`` (``evalsopt``) -- respective number of function evaluations\n        - ``res[3]`` (``evals``) -- number of overall conducted objective function evaluations\n        - ``res[4]`` (``iterations``) -- number of overall conducted iterations\n        - ``res[5]`` (``xmean``) -- mean of the final sample distribution\n        - ``res[6]`` (``stds``) -- effective stds of the final sample distribution\n        - ``res[-3]`` (``stop``) -- termination condition(s) in a dictionary\n        - ``res[-2]`` (``cmaes``) -- class `CMAEvolutionStrategy` instance\n        - ``res[-1]`` (``logger``) -- class `CMADataLogger` instance\n\n    Details\n    =======\n    This function is an interface to the class `CMAEvolutionStrategy`. The\n    class can be used when full control over the iteration loop of the\n    optimizer is desired.\n\n    The noise handling follows closely [Hansen et al 2009, A Method for Handling\n    Uncertainty in Evolutionary Optimization...] in the measurement part, but the\n    implemented treatment is slightly different: for ``noiseS > 0``, ``evaluations``\n    (time) and sigma are increased by ``alpha``. For ``noiseS < 0``, ``evaluations``\n    (time) is decreased by ``alpha**(1/4)``. The option ``noise_handling`` switches\n    the uncertainty handling on/off, the given value defines the maximal number\n    of evaluations for a single fitness computation. If ``noise_handling`` is a list,\n    the smallest element defines the minimal number and if the list has three elements,\n    the median value is the start value for ``evaluations``. See also class\n    `NoiseHandler`.\n\n    Examples\n    ========\n    The following example calls `fmin` optimizing the Rosenbrock function\n    in 10-D with initial solution 0.1 and initial step-size 0.5. The\n    options are specified for the usage with the `doctest` module.\n\n    >>> import cma\n    >>> # cma.Options()  # returns all possible options\n    >>> options = {'CMA_diagonal':10, 'seed':1234, 'verb_time':0}\n    >>>\n    >>> res = cma.fmin(cma.fcts.rosen, [0.1] * 10, 0.5, **options)\n    (5_w,10)-CMA-ES (mu_w=3.2,w_1=45%) in dimension 10 (seed=1234)\n       Covariance matrix is diagonal for 10 iterations (1/ccov=29.0)\n    Iterat #Fevals   function value     axis ratio  sigma   minstd maxstd min:sec\n        1      10 1.264232686260072e+02 1.1e+00 4.40e-01  4e-01  4e-01\n        2      20 1.023929748193649e+02 1.1e+00 4.00e-01  4e-01  4e-01\n        3      30 1.214724267489674e+02 1.2e+00 3.70e-01  3e-01  4e-01\n      100    1000 6.366683525319511e+00 6.2e+00 2.49e-02  9e-03  3e-02\n      200    2000 3.347312410388666e+00 1.2e+01 4.52e-02  8e-03  4e-02\n      300    3000 1.027509686232270e+00 1.3e+01 2.85e-02  5e-03  2e-02\n      400    4000 1.279649321170636e-01 2.3e+01 3.53e-02  3e-03  3e-02\n      500    5000 4.302636076186532e-04 4.6e+01 4.78e-03  3e-04  5e-03\n      600    6000 6.943669235595049e-11 5.1e+01 5.41e-06  1e-07  4e-06\n      650    6500 5.557961334063003e-14 5.4e+01 1.88e-07  4e-09  1e-07\n    termination on tolfun : 1e-11\n    final/bestever f-value = 5.55796133406e-14 2.62435631419e-14\n    mean solution:  [ 1.          1.00000001  1.          1.\n        1.          1.00000001  1.00000002  1.00000003 ...]\n    std deviation: [ 3.9193387e-09  3.7792732e-09  4.0062285e-09  4.6605925e-09\n        5.4966188e-09   7.4377745e-09   1.3797207e-08   2.6020765e-08 ...]\n    >>>\n    >>> print('best solutions fitness = %f' % (res[1]))\n    best solutions fitness = 2.62435631419e-14\n    >>> assert res[1] < 1e-12\n\n    The method ::\n\n        cma.plot();\n\n    (based on `matplotlib.pylab`) produces a plot of the run and, if necessary::\n\n        cma.show()\n\n    shows the plot in a window. To continue you might need to\n    close the pop-up window. This behavior seems to disappear in\n    subsequent calls of `cma.plot()` and is avoided by using\n    `ipython` with `-pylab` option. Finally ::\n\n        cma.savefig('myfirstrun')  # savefig from matplotlib.pylab\n\n    will save the figure in a png.\n\n    :See: `CMAEvolutionStrategy`, `OOOptimizer.optimize(), `plot()`, `Options`, `scipy.optimize.fmin()`\n\n    \"\"\" # style guides say there should be the above empty line\n    try: # pass on KeyboardInterrupt\n        opts = locals()  # collect all local variables (i.e. arguments) in a dictionary\n        del opts['func'] # remove those without a default value\n        del opts['args']\n        del opts['x0']      # is not optional, no default available\n        del opts['sigma0']  # is not optional for the constructor CMAEvolutionStrategy\n        if not func:  # return available options in a dictionary\n            return Options(opts, True)  # these opts are by definition valid\n\n        # TODO: this is very ugly:\n        incpopsize = Options({'incpopsize':incpopsize}).eval('incpopsize')\n        restarts = Options({'restarts':restarts}).eval('restarts')\n        del opts['restarts']\n        noise_handling = Options({'noise_handling': noise_handling}).eval('noise_handling')\n        del opts['noise_handling']# otherwise CMA throws an error\n\n        irun = 0\n        best = BestSolution()\n        while 1:\n            # recover from a CMA object\n            if irun == 0 and isinstance(x0, CMAEvolutionStrategy):\n                es = x0\n                x0 = es.inputargs['x0']  # for the next restarts\n                if sigma0 is None or not np.isscalar(array(sigma0)):\n                    sigma0 = es.inputargs['sigma0']  # for the next restarts\n                # ignore further input args and keep original options\n            else:  # default case\n                if irun and opts['restart_from_best']:\n                    print('CAVE: restart_from_best is typically not useful')\n                    es = CMAEvolutionStrategy(best.x, sigma0, opts)\n                else:\n                    es = CMAEvolutionStrategy(x0, sigma0, opts)\n                if opts['eval_initial_x']:\n                    x = es.gp.pheno(es.mean, bounds=es.gp.bounds)\n                    es.best.update([x], None, [func(x, *args)], 1)\n                    es.countevals += 1\n\n            opts = es.opts  # processed options, unambiguous\n\n            append = opts['verb_append'] or es.countiter > 0 or irun > 0\n            logger = CMADataLogger(opts['verb_filenameprefix'], opts['verb_log'])\n            logger.register(es, append).add()  # initial values, not fitness values\n\n            # if es.countiter == 0 and es.opts['verb_log'] > 0 and not es.opts['verb_append']:\n            #    logger = CMADataLogger(es.opts['verb_filenameprefix']).register(es)\n            #    logger.add()\n            # es.writeOutput()  # initial values for sigma etc\n\n            noisehandler = NoiseHandler(es.N, noise_handling, np.median, opts['noise_reevals'], opts['noise_eps'], opts['eval_parallel'])\n            while not es.stop():\n                X, fit = es.ask_and_eval(func, args, evaluations=noisehandler.evaluations,\n                                         aggregation=np.median) # treats NaN with resampling\n                # TODO: check args and in case use args=(noisehandler.evaluations, )\n\n                if 11 < 3 and opts['vv']:  # inject a solution\n                    # use option check_point = [0]\n                    if 0 * np.random.randn() >= 0:\n                        X[0] = 0 + opts['vv'] * es.sigma**0 * np.random.randn(es.N)\n                        fit[0] = func(X[0], *args)\n                        # print fit[0]\n                es.tell(X, fit)  # prepare for next iteration\n                if noise_handling:\n                    es.sigma *= noisehandler(X, fit, func, es.ask, args)**opts['noise_change_sigma']\n                    es.countevals += noisehandler.evaluations_just_done  # TODO: this is a hack, not important though\n\n                es.disp()\n                logger.add(more_data=[noisehandler.evaluations, 10**noisehandler.noiseS] if noise_handling else [],\n                           modulo=1 if es.stop() and logger.modulo else None)\n                if opts['verb_log'] and opts['verb_plot'] and \\\n                    (es.countiter % max(opts['verb_plot'], opts['verb_log']) == 0 or es.stop()):\n                    logger.plot(324, fontsize=10)\n\n            # end while not es.stop\n            mean_pheno = es.gp.pheno(es.mean, bounds=es.gp.bounds)\n            fmean = func(mean_pheno, *args)\n            es.countevals += 1\n\n            es.best.update([mean_pheno], None, [fmean], es.countevals)\n            best.update(es.best)  # in restarted case\n\n            # final message\n            if opts['verb_disp']:\n                srestarts = (' after %i restart' + ('s' if irun > 1 else '')) % irun if irun else ''\n                for k, v in list(es.stop().items()):\n                    print('termination on %s=%s%s (%s)' % (k, str(v), srestarts, time.asctime()))\n\n                print('final/bestever f-value = %e %e' % (es.best.last.f, best.f))\n                if es.N < 9:\n                    print('mean solution: ' + str(es.gp.pheno(es.mean)))\n                    print('std deviation: ' + str(es.sigma * sqrt(es.dC) * es.gp.scales))\n                else:\n                    print('mean solution: %s ...]' % (str(es.gp.pheno(es.mean)[:8])[:-1]))\n                    print('std deviations: %s ...]' % (str((es.sigma * sqrt(es.dC) * es.gp.scales)[:8])[:-1]))\n\n            irun += 1\n            if irun > restarts or 'ftarget' in es.stopdict or 'maxfunevals' in es.stopdict:\n                break\n            opts['verb_append'] = es.countevals\n            opts['popsize'] = incpopsize * es.sp.popsize # TODO: use rather options?\n            opts['seed'] += 1\n\n        # while irun\n\n        es.out['best'] = best  # TODO: this is a rather suboptimal type for inspection in the shell\n        if 1 < 3:\n            return es.result() + (es.stop(), es, logger)\n\n        else: # previously: to be removed\n            return (best.x.copy(), best.f, es.countevals,\n                    dict((('stopdict', CMAStopDict(es.stopdict))\n                          ,('mean', es.gp.pheno(es.mean))\n                          ,('std', es.sigma * sqrt(es.dC) * es.gp.scales)\n                          ,('out', es.out)\n                          ,('opts', es.opts)  # last state of options\n                          ,('cma', es)\n                          ,('inputargs', es.inputargs)\n                          ))\n                   )\n        # TODO refine output, can #args be flexible?\n        # is this well usable as it is now?\n    except KeyboardInterrupt:  # Exception, e:\n        if opts['verb_disp'] > 0:\n            print(' in/outcomment ``raise`` in last line of cma.fmin to prevent/restore KeyboardInterrupt exception')\n        raise  # cave: swallowing this exception can silently mess up experiments, if ctrl-C is hit\ndef plot(name=None, fig=None, abscissa=1, iteridx=None, plot_mean=True,  # TODO: plot_mean default should be False\n    foffset=1e-19, x_opt=None, fontsize=10):\n    \"\"\"\n    plot data from files written by a `CMADataLogger`,\n    the call ``cma.plot(name, **argsdict)`` is a shortcut for\n    ``cma.CMADataLogger(name).plot(**argsdict)``\n\n    Arguments\n    ---------\n        `name`\n            name of the logger, filename prefix, None evaluates to\n            the default 'outcmaes'\n        `fig`\n            filename or figure number, or both as a tuple (any order)\n        `abscissa`\n            0==plot versus iteration count,\n            1==plot versus function evaluation number\n        `iteridx`\n            iteration indices to plot\n\n    Return `None`\n\n    Examples\n    --------\n    ::\n\n       cma.plot();  # the optimization might be still\n                    # running in a different shell\n       cma.show()  # to continue you might need to close the pop-up window\n                   # once and call cma.plot() again.\n                   # This behavior seems to disappear in subsequent\n                   # calls of cma.plot(). Also using ipython with -pylab\n                   # option might help.\n       cma.savefig('fig325.png')\n       cma.close()\n\n       cdl = cma.CMADataLogger().downsampling().plot()\n\n    Details\n    -------\n    Data from codes in other languages (C, Java, Matlab, Scilab) have the same\n    format and can be plotted just the same.\n\n    :See: `CMADataLogger`, `CMADataLogger.plot()`\n\n    \"\"\"\n    CMADataLogger(name).plot(fig, abscissa, iteridx, plot_mean, foffset, x_opt, fontsize)\ndef disp(name=None, idx=None):\n    \"\"\"displays selected data from (files written by) the class `CMADataLogger`.\n\n    The call ``cma.disp(name, idx)`` is a shortcut for ``cma.CMADataLogger(name).disp(idx)``.\n\n    Arguments\n    ---------\n        `name`\n            name of the logger, filename prefix, `None` evaluates to\n            the default ``'outcmaes'``\n        `idx`\n            indices corresponding to rows in the data file; by\n            default the first five, then every 100-th, and the last\n            10 rows. Too large index values are removed.\n\n    Examples\n    --------\n    ::\n\n       import cma, numpy\n       # assume some data are available from previous runs\n       cma.disp(None,numpy.r_[0,-1])  # first and last\n       cma.disp(None,numpy.r_[0:1e9:100,-1]) # every 100-th and last\n       cma.disp(idx=numpy.r_[0,-10:0]) # first and ten last\n       cma.disp(idx=numpy.r_[0:1e9:1e3,-10:0])\n\n    :See: `CMADataLogger.disp()`\n\n    \"\"\"\n    return CMADataLogger(name if name else 'outcmaes'\n                         ).disp(idx)\n\n#____________________________________________________________\ndef _fileToMatrix(file_name):\n    \"\"\"rudimentary method to read in data from a file\"\"\"\n    # TODO: np.loadtxt() might be an alternative\n    #     try:\n    if 1 < 3:\n        lres = []\n        for line in open(file_name, 'r').readlines():\n            if len(line) > 0 and line[0] not in ('%', '#'):\n                lres.append(list(map(float, line.split())))\n        res = lres\n    else:\n        fil = open(file_name, 'r')\n        fil.readline() # rudimentary, assume one comment line\n        lineToRow = lambda line: list(map(float, line.split()))\n        res = list(map(lineToRow, fil.readlines()))\n        fil.close()  # close file could be omitted, reference counting should do during garbage collection, but...\n\n    while res != [] and res[0] == []:  # remove further leading empty lines\n        del res[0]\n    return res\n    #     except:\n    print('could not read file ' + file_name)\n\n#____________________________________________________________\n#____________________________________________________________\nclass NoiseHandler(object):\n    \"\"\"Noise handling according to [Hansen et al 2009, A Method for Handling\n    Uncertainty in Evolutionary Optimization...]\n\n    The interface of this class is yet versatile and subject to changes.\n\n    The attribute ``evaluations`` serves to control the noise via number of\n    evaluations, for example with `ask_and_eval()`, see also parameter\n    ``maxevals`` and compare the example.\n\n    Example\n    -------\n    >>> import cma, numpy as np\n    >>> func = cma.Fcts.noisysphere\n    >>> es = cma.CMAEvolutionStrategy(np.ones(10), 1)\n    >>> logger = cma.CMADataLogger().register(es)\n    >>> nh = cma.NoiseHandler(es.N, maxevals=[1, 30])\n    >>> while not es.stop():\n    ...     X, fit = es.ask_and_eval(func, evaluations=nh.evaluations)\n    ...     es.tell(X, fit)  # prepare for next iteration\n    ...     es.sigma *= nh(X, fit, func, es.ask)  # see method __call__\n    ...     es.countevals += nh.evaluations_just_done  # this is a hack, not important though\n    ...     logger.add(more_data = [nh.evaluations, nh.noiseS])  # add a data point\n    ...     es.disp()\n    ...     # nh.maxevals = ...  it might be useful to start with smaller values and then increase\n    >>> print(es.stop())\n    >>> print(es.result()[-2])  # take mean value, the best solution is totally off\n    >>> assert sum(es.result()[-2]**2) < 1e-9\n    >>> print(X[np.argmin(fit)])  # not bad, but probably worse than the mean\n    >>> logger.plot()\n\n    The noise options of `fmin()` control a `NoiseHandler` instance similar to this\n    example. The command ``cma.Options('noise')`` lists in effect the parameters of\n    `__init__` apart from ``aggregate``.\n\n    Details\n    -------\n    The parameters reevals, theta, c_s, and alpha_t are set differently\n    than in the original publication, see method `__init__()`. For a\n    very small population size, say popsize <= 5, the measurement\n    technique based on rank changes is likely to fail.\n\n    Missing Features\n    ----------------\n    In case no noise is found, ``self.lam_reeval`` should be adaptive\n    and get at least as low as 1 (however the possible savings from this\n    are rather limited). Another option might be to decide during the\n    first call by a quantitative analysis of fitness values whether\n    ``lam_reeval`` is set to zero. More generally, an automatic noise\n    mode detection might also set the covariance matrix learning rates\n    to smaller values.\n\n    :See: `fmin()`, `ask_and_eval()`\n\n    \"\"\"\n    def __init__(self, N, maxevals=10, aggregate=np.median, reevals=None, epsilon=1e-7, parallel=False):\n        \"\"\"parameters are\n            `N`\n                dimension\n            `maxevals`\n                maximal value for ``self.evaluations``, where\n                ``self.evaluations`` function calls are aggregated for\n                noise treatment. With ``maxevals == 0`` the noise\n                handler is (temporarily) \"switched off\". If `maxevals`\n                is a list, min value and (for >2 elements) median are\n                used to define minimal and initial value of\n                ``self.evaluations``. Choosing ``maxevals > 1`` is only\n                reasonable, if also the original ``fit`` values (that\n                are passed to `__call__`) are computed by aggregation of\n                ``self.evaluations`` values (otherwise the values are\n                not comparable), as it is done within `fmin()`.\n            `aggregate`\n                function to aggregate single f-values to a 'fitness', e.g.\n                ``np.median``.\n            `reevals`\n                number of solutions to be reevaluated for noise measurement,\n                can be a float, by default set to ``1.5 + popsize/20``,\n                zero switches noise handling off.\n            `epsilon`\n                multiplier for perturbation of the reevaluated solutions\n            `parallel`\n                a single f-call with all resampled solutions\n\n            :See: `fmin()`, `Options`, `CMAEvolutionStrategy.ask_and_eval()`\n\n        \"\"\"\n        self.lam_reeval = reevals  # 2 + popsize/20, see method indices(), originally 2 + popsize/10\n        self.epsilon = epsilon\n        self.parallel = parallel\n        self.theta = 0.5  # originally 0.2\n        self.cum = 0.3  # originally 1, 0.3 allows one disagreement of current point with resulting noiseS\n        self.alphasigma = 1 + 2 / (N+10)\n        self.alphaevals = 1 + 2 / (N+10)  # originally 1.5\n        self.alphaevalsdown = self.alphaevals**-0.25  # originally 1/1.5\n        self.evaluations = 1  # to aggregate for a single f-evaluation\n        self.minevals = 1\n        self.maxevals = int(np.max(maxevals))\n        if hasattr(maxevals, '__contains__'):  # i.e. can deal with ``in``\n            if len(maxevals) > 1:\n                self.minevals = min(maxevals)\n                self.evaluations = self.minevals\n            if len(maxevals) > 2:\n                self.evaluations = np.median(maxevals)\n        self.f_aggregate = aggregate\n        self.evaluations_just_done = 0  # actually conducted evals, only for documentation\n        self.noiseS = 0\n\n    def __call__(self, X, fit, func, ask=None, args=()):\n        \"\"\"proceed with noise measurement, set anew attributes ``evaluations``\n        (proposed number of evaluations to \"treat\" noise) and ``evaluations_just_done``\n        and return a factor for increasing sigma.\n\n        Parameters\n        ----------\n            `X`\n                a list/sequence/vector of solutions\n            `fit`\n                the respective list of function values\n            `func`\n                the objective function, ``fit[i]`` corresponds to ``func(X[i], *args)``\n            `ask`\n                a method to generate a new, slightly disturbed solution. The argument\n                is mandatory if ``epsilon`` is not zero, see `__init__()`.\n            `args`\n                optional additional arguments to `func`\n\n        Details\n        -------\n        Calls the methods ``reeval()``, ``update_measure()`` and ``treat()`` in this order.\n        ``self.evaluations`` is adapted within the method `treat()`.\n\n        \"\"\"\n        self.evaluations_just_done = 0\n        if not self.maxevals or self.lam_reeval == 0:\n            return 1.0\n        res = self.reeval(X, fit, func, ask, args)\n        if not len(res):\n            return 1.0\n        self.update_measure()\n        return self.treat()\n\n    def get_evaluations(self):\n        \"\"\"return ``self.evaluations``, the number of evalutions to get a single fitness measurement\"\"\"\n        return self.evaluations\n\n    def treat(self):\n        \"\"\"adapt self.evaluations depending on the current measurement value\n        and return ``sigma_fac in (1.0, self.alphasigma)``\n\n        \"\"\"\n        if self.noiseS > 0:\n            self.evaluations = min((self.evaluations * self.alphaevals, self.maxevals))\n            return self.alphasigma\n        else:\n            self.evaluations = max((self.evaluations * self.alphaevalsdown, self.minevals))\n            return 1.0\n\n    def reeval(self, X, fit, func, ask, args=()):\n        \"\"\"store two fitness lists, `fit` and ``fitre`` reevaluating some\n        solutions in `X`.\n        ``self.evaluations`` evaluations are done for each reevaluated\n        fitness value.\n        See `__call__()`, where `reeval()` is called.\n\n        \"\"\"\n        self.fit = list(fit)\n        self.fitre = list(fit)\n        self.idx = self.indices(fit)\n        if not len(self.idx):\n            return self.idx\n        evals = int(self.evaluations) if self.f_aggregate else 1\n        fagg = np.median if self.f_aggregate is None else self.f_aggregate\n        for i in self.idx:\n            if self.epsilon:\n                if self.parallel:\n                    self.fitre[i] = fagg(func(ask(evals, X[i], self.epsilon), *args))\n                else:\n                    self.fitre[i] = fagg([func(ask(1, X[i], self.epsilon)[0], *args)\n                                            for _k in range(evals)])\n            else:\n                self.fitre[i] = fagg([func(X[i], *args) for _k in range(evals)])\n        self.evaluations_just_done = evals * len(self.idx)\n        return self.fit, self.fitre, self.idx\n\n    def update_measure(self):\n        \"\"\"updated noise level measure using two fitness lists ``self.fit`` and\n        ``self.fitre``, return ``self.noiseS, all_individual_measures``.\n\n        Assumes that `self.idx` contains the indices where the fitness\n        lists differ\n\n        \"\"\"\n        lam = len(self.fit)\n        idx = np.argsort(self.fit + self.fitre)\n        ranks = np.argsort(idx).reshape((2, lam))\n        rankDelta = ranks[0] - ranks[1] - np.sign(ranks[0] - ranks[1])\n\n        # compute rank change limits using both ranks[0] and ranks[1]\n        r = np.arange(1, 2 * lam)  # 2 * lam - 2 elements\n        limits = [0.5 * (Mh.prctile(np.abs(r - (ranks[0,i] + 1 - (ranks[0,i] > ranks[1,i]))),\n                                      self.theta*50) +\n                         Mh.prctile(np.abs(r - (ranks[1,i] + 1 - (ranks[1,i] > ranks[0,i]))),\n                                      self.theta*50))\n                    for i in self.idx]\n        # compute measurement\n        #                               max: 1 rankchange in 2*lambda is always fine\n        s = np.abs(rankDelta[self.idx]) - Mh.amax(limits, 1)  # lives roughly in 0..2*lambda\n        self.noiseS += self.cum * (np.mean(s) - self.noiseS)\n        return self.noiseS, s\n\n    def indices(self, fit):\n        \"\"\"return the set of indices to be reevaluted for noise measurement,\n        taking the ``lam_reeval`` best from the first ``2 * lam_reeval + 2``\n        values.\n\n        Given the first values are the earliest, this is a useful policy also\n        with a time changing objective.\n\n        \"\"\"\n        lam = self.lam_reeval if self.lam_reeval else 2 + len(fit) / 20\n        reev = int(lam) + ((lam % 1) > np.random.rand())\n        return np.argsort(array(fit, copy=False)[:2 * (reev + 1)])[:reev]\n\n#____________________________________________________________\n#____________________________________________________________\nclass Sections(object):\n    \"\"\"plot sections through an objective function. A first\n    rational thing to do, when facing an (expensive) application.\n    By default 6 points in each coordinate are evaluated.\n    This class is still experimental.\n\n    Examples\n    --------\n\n    >>> import cma, numpy as np\n    >>> s = cma.Sections(cma.Fcts.rosen, np.zeros(3)).do(plot=False)\n    >>> s.do(plot=False)  # evaluate the same points again, i.e. check for noise\n    >>> try:\n    ...     s.plot()\n    ... except:\n    ...     print('plotting failed: pylab package is missing?')\n\n    Details\n    -------\n    Data are saved after each function call during `do()`. The filename is attribute\n    ``name`` and by default ``str(func)``, see `__init__()`.\n\n    A random (orthogonal) basis can be generated with ``cma.Rotation()(np.eye(3))``.\n\n    The default name is unique in the function name, but it should be unique in all\n    parameters of `__init__()` but `plot_cmd` and `load`.\n\n    ``self.res`` is a dictionary with an entry for each \"coordinate\" ``i`` and with an\n    entry ``'x'``, the middle point. Each entry ``i`` is again a dictionary with keys\n    being different dx values and the value being a sequence of f-values.\n    For example ``self.res[2][0.1] == [0.01, 0.01]``, which is generated using the\n    difference vector ``self.basis[2]`` like\n    ``self.res[2][dx] += func(self.res['x'] + dx * self.basis[2])``.\n\n    :See: `__init__()`\n\n    \"\"\"\n    def __init__(self, func, x, args=(), basis=None, name=None,\n                 plot_cmd=pylab.plot if pylab else None, load=True):\n        \"\"\"\n        Parameters\n        ----------\n            `func`\n                objective function\n            `x`\n                point in search space, middle point of the sections\n            `args`\n                arguments passed to `func`\n            `basis`\n                evaluated points are ``func(x + locations[j] * basis[i]) for i in len(basis) for j in len(locations)``,\n                see `do()`\n            `name`\n                filename where to save the result\n            `plot_cmd`\n                command used to plot the data, typically matplotlib pylabs `plot` or `semilogy`\n            `load`\n                load previous data from file ``str(func) + '.pkl'``\n\n        \"\"\"\n        self.func = func\n        self.args = args\n        self.x = x\n        self.name = name if name else str(func).replace(' ', '_').replace('>', '').replace('<', '')\n        self.plot_cmd = plot_cmd  # or semilogy\n        self.basis = np.eye(len(x)) if basis is None else basis\n\n        try:\n            self.load()\n            if any(self.res['x'] != x):\n                self.res = {}\n                self.res['x'] = x  # TODO: res['x'] does not look perfect\n            else:\n                print(self.name + ' loaded')\n        except:\n            self.res = {}\n            self.res['x'] = x\n\n    def do(self, repetitions=1, locations=np.arange(-0.5, 0.6, 0.2), plot=True):\n        \"\"\"generates, plots and saves function values ``func(y)``,\n        where ``y`` is 'close' to `x` (see `__init__()`). The data are stored in\n        the ``res`` attribute and the class instance is saved in a file\n        with (the weired) name ``str(func)``.\n\n        Parameters\n        ----------\n            `repetitions`\n                for each point, only for noisy functions is >1 useful. For\n                ``repetitions==0`` only already generated data are plotted.\n            `locations`\n                coordinated wise deviations from the middle point given in `__init__`\n\n        \"\"\"\n        if not repetitions:\n            self.plot()\n            return\n\n        res = self.res\n        for i in range(len(self.basis)): # i-th coordinate\n            if i not in res:\n                res[i] = {}\n            # xx = np.array(self.x)\n            # TODO: store res[i]['dx'] = self.basis[i] here?\n            for dx in locations:\n                xx = self.x + dx * self.basis[i]\n                xkey = dx  # xx[i] if (self.basis == np.eye(len(self.basis))).all() else dx\n                if xkey not in res[i]:\n                    res[i][xkey] = []\n                n = repetitions\n                while n > 0:\n                    n -= 1\n                    res[i][xkey].append(self.func(xx, *self.args))\n                    if plot:\n                        self.plot()\n                    self.save()\n        return self\n\n    def plot(self, plot_cmd=None, tf=lambda y: y):\n        \"\"\"plot the data we have, return ``self``\"\"\"\n        if not plot_cmd:\n            plot_cmd = self.plot_cmd\n        colors = 'bgrcmyk'\n        pylab.hold(False)\n        res = self.res\n\n        flatx, flatf = self.flattened()\n        minf = np.inf\n        for i in flatf:\n            minf = min((minf, min(flatf[i])))\n        addf = 1e-9 - minf  if minf <= 0 else 0\n        for i in sorted(res.keys()):  # we plot not all values here\n            if type(i) is int:\n                color = colors[i % len(colors)]\n                arx = sorted(res[i].keys())\n                plot_cmd(arx, [tf(np.median(res[i][x]) + addf) for x in arx], color + '-')\n                pylab.text(arx[-1], tf(np.median(res[i][arx[-1]])), i)\n                pylab.hold(True)\n                plot_cmd(flatx[i], tf(np.array(flatf[i]) + addf), color + 'o')\n        pylab.ylabel('f + ' + str(addf))\n        pylab.draw()\n        show()\n        # raw_input('press return')\n        return self\n\n    def flattened(self):\n        \"\"\"return flattened data ``(x, f)`` such that for the sweep through\n        coordinate ``i`` we have for data point ``j`` that ``f[i][j] == func(x[i][j])``\n\n        \"\"\"\n        flatx = {}\n        flatf = {}\n        for i in self.res:\n            if type(i) is int:\n                flatx[i] = []\n                flatf[i] = []\n                for x in sorted(self.res[i]):\n                    for d in sorted(self.res[i][x]):\n                        flatx[i].append(x)\n                        flatf[i].append(d)\n        return flatx, flatf\n\n    def save(self, name=None):\n        \"\"\"save to file\"\"\"\n        import pickle\n        name = name if name else self.name\n        fun = self.func\n        del self.func  # instance method produces error\n        pickle.dump(self, open(name + '.pkl', \"wb\" ))\n        self.func = fun\n        return self\n\n    def load(self, name=None):\n        \"\"\"load from file\"\"\"\n        import pickle\n        name = name if name else self.name\n        s = pickle.load(open(name + '.pkl', 'rb'))\n        self.res = s.res  # disregard the class\n        return self\n#____________________________________________________________\n#____________________________________________________________\nclass _Error(Exception):\n    \"\"\"generic exception of cma module\"\"\"\n    pass\n\n#____________________________________________________________\n#____________________________________________________________\n#\nclass ElapsedTime(object):\n    \"\"\"32-bit C overflows after int(2**32/1e6) == 4294s about 72 min\"\"\"\n    def __init__(self):\n        self.tic0 = time.clock()\n        self.tic = self.tic0\n        self.lasttoc = time.clock()\n        self.lastdiff = time.clock() - self.lasttoc\n        self.time_to_add = 0\n        self.messages = 0\n\n    def __call__(self):\n        toc = time.clock()\n        if toc - self.tic >= self.lasttoc - self.tic:\n            self.lastdiff = toc - self.lasttoc\n            self.lasttoc = toc\n        else:  # overflow, reset self.tic\n            if self.messages < 3:\n                self.messages += 1\n                print('  in cma.ElapsedTime: time measure overflow, last difference estimated from',\n                        self.tic0, self.tic, self.lasttoc, toc, toc - self.lasttoc, self.lastdiff)\n\n            self.time_to_add += self.lastdiff + self.lasttoc - self.tic\n            self.tic = toc  # reset\n            self.lasttoc = toc\n        self.elapsedtime = toc - self.tic + self.time_to_add\n        return self.elapsedtime\n\n#____________________________________________________________\n#____________________________________________________________\n#\nclass TimeIt(object):\n    def __init__(self, fct, args=(), seconds=1):\n        pass\n\nclass Misc(object):\n    #____________________________________________________________\n    #____________________________________________________________\n    #\n    class MathHelperFunctions(object):\n        \"\"\"static convenience math helper functions, if the function name\n        is preceded with an \"a\", a numpy array is returned\n\n        \"\"\"\n        @staticmethod\n        def aclamp(x, upper):\n            return -Misc.MathHelperFunctions.apos(-x, -upper)\n        @staticmethod\n        def expms(A, eig=np.linalg.eigh):\n            \"\"\"matrix exponential for a symmetric matrix\"\"\"\n            # TODO: check that this works reliably for low rank matrices\n            # first: symmetrize A\n            D, B = eig(A)\n            return np.dot(B, (np.exp(D) * B).T)\n        @staticmethod\n        def amax(vec, vec_or_scalar):\n            return array(Misc.MathHelperFunctions.max(vec, vec_or_scalar))\n        @staticmethod\n        def max(vec, vec_or_scalar):\n            b = vec_or_scalar\n            if np.isscalar(b):\n                m = [max(x, b) for x in vec]\n            else:\n                m = [max(vec[i], b[i]) for i in range(len(vec))]\n            return m\n        @staticmethod\n        def amin(vec_or_scalar, vec_or_scalar2):\n            return array(Misc.MathHelperFunctions.min(vec_or_scalar, vec_or_scalar2))\n        @staticmethod\n        def min(a, b):\n            iss = np.isscalar\n            if iss(a) and iss(b):\n                return min(a, b)\n            if iss(a):\n                a, b = b, a\n            # now only b can be still a scalar\n            if iss(b):\n                return [min(x, b) for x in a]\n            else:  # two non-scalars must have the same length\n                return [min(a[i], b[i]) for i in range(len(a))]\n        @staticmethod\n        def norm(vec, expo=2):\n            return sum(vec**expo)**(1/expo)\n        @staticmethod\n        def apos(x, lower=0):\n            \"\"\"clips argument (scalar or array) from below at lower\"\"\"\n            if lower == 0:\n                return (x > 0) * x\n            else:\n                return lower + (x > lower) * (x - lower)\n        @staticmethod\n        def prctile(data, p_vals=[0, 25, 50, 75, 100], sorted_=False):\n            \"\"\"``prctile(data, 50)`` returns the median, but p_vals can\n            also be a sequence.\n\n            Provides for small samples better values than matplotlib.mlab.prctile,\n            however also slower.\n\n            \"\"\"\n            ps = [p_vals] if np.isscalar(p_vals) else p_vals\n\n            if not sorted_:\n                data = sorted(data)\n            n = len(data)\n            d = []\n            for p in ps:\n                fi = p * n / 100 - 0.5\n                if fi <= 0:  # maybe extrapolate?\n                    d.append(data[0])\n                elif fi >= n - 1:\n                    d.append(data[-1])\n                else:\n                    i = int(fi)\n                    d.append((i+1 - fi) * data[i] + (fi - i) * data[i+1])\n            return d[0] if np.isscalar(p_vals) else d\n        @staticmethod\n        def sround(nb):  # TODO: to be vectorized\n            \"\"\"return stochastic round: floor(nb) + (rand()<remainder(nb))\"\"\"\n            return nb // 1 + (np.random.rand(1)[0] < (nb % 1))\n\n        @staticmethod\n        def cauchy_with_variance_one():\n            n = np.random.randn() / np.random.randn()\n            while abs(n) > 1000:\n                n = np.random.randn() / np.random.randn()\n            return n / 25\n        @staticmethod\n        def standard_finite_cauchy(size=1):\n            try:\n                l = len(size)\n            except TypeError:\n                l = 0\n\n            if l == 0:\n                return array([Mh.cauchy_with_variance_one() for _i in range(size)])\n            elif l == 1:\n                return array([Mh.cauchy_with_variance_one() for _i in range(size[0])])\n            elif l == 2:\n                return array([[Mh.cauchy_with_variance_one() for _i in range(size[1])]\n                             for _j in range(size[0])])\n            else:\n                raise _Error('len(size) cannot be large than two')\n\n\n    @staticmethod\n    def likelihood(x, m=None, Cinv=None, sigma=1, detC=None):\n        \"\"\"return likelihood of x for the normal density N(m, sigma**2 * Cinv**-1)\"\"\"\n        # testing: MC integrate must be one: mean(p(x_i)) * volume(where x_i are uniformely sampled)\n        # for i in range(3): print mean([cma.likelihood(20*r-10, dim * [0], None, 3) for r in rand(10000,dim)]) * 20**dim\n        if m is None:\n            dx = x\n        else:\n            dx = x - m  # array(x) - array(m)\n        n = len(x)\n        s2pi = (2*np.pi)**(n/2.)\n        if Cinv is None:\n            return exp(-sum(dx**2) / sigma**2 / 2) / s2pi / sigma**n\n        if detC is None:\n            detC = 1. / np.linalg.linalg.det(Cinv)\n        return  exp(-np.dot(dx, np.dot(Cinv, dx)) / sigma**2 / 2) / s2pi / abs(detC)**0.5 / sigma**n\n\n    @staticmethod\n    def loglikelihood(self, x, previous=False):\n        \"\"\"return log-likelihood of `x` regarding the current sample distribution\"\"\"\n        # testing of original fct: MC integrate must be one: mean(p(x_i)) * volume(where x_i are uniformely sampled)\n        # for i in range(3): print mean([cma.likelihood(20*r-10, dim * [0], None, 3) for r in rand(10000,dim)]) * 20**dim\n        # TODO: test this!!\n        # c=cma.fmin...\n        # c[3]['cma'].loglikelihood(...)\n\n        if previous and hasattr(self, 'lastiter'):\n            sigma = self.lastiter.sigma\n            Crootinv = self.lastiter._Crootinv\n            xmean = self.lastiter.mean\n            D = self.lastiter.D\n        elif previous and self.countiter > 1:\n            raise _Error('no previous distribution parameters stored, check options importance_mixing')\n        else:\n            sigma = self.sigma\n            Crootinv = self._Crootinv\n            xmean = self.mean\n            D = self.D\n\n        dx = array(x) - xmean  # array(x) - array(m)\n        n = self.N\n        logs2pi = n * log(2*np.pi) / 2.\n        logdetC = 2 * sum(log(D))\n        dx = np.dot(Crootinv, dx)\n        res = -sum(dx**2) / sigma**2 / 2 - logs2pi - logdetC/2 - n*log(sigma)\n        if 1 < 3: # testing\n            s2pi = (2*np.pi)**(n/2.)\n            detC = np.prod(D)**2\n            res2 = -sum(dx**2) / sigma**2 / 2 - log(s2pi * abs(detC)**0.5 * sigma**n)\n            assert res2 < res + 1e-8 or res2 > res - 1e-8\n        return res\n\n    #____________________________________________________________\n    #____________________________________________________________\n    #\n    # C and B are arrays rather than matrices, because they are\n    # addressed via B[i][j], matrices can only be addressed via B[i,j]\n\n    # tred2(N, B, diagD, offdiag);\n    # tql2(N, diagD, offdiag, B);\n\n\n    # Symmetric Householder reduction to tridiagonal form, translated from JAMA package.\n    @staticmethod\n    def eig(C):\n        \"\"\"eigendecomposition of a symmetric matrix, much slower than\n        `numpy.linalg.eigh`, return ``(EVals, Basis)``, the eigenvalues\n        and an orthonormal basis of the corresponding eigenvectors, where\n\n            ``Basis[i]``\n                the i-th row of ``Basis``\n            columns of ``Basis``, ``[Basis[j][i] for j in range(len(Basis))]``\n                the i-th eigenvector with eigenvalue ``EVals[i]``\n\n        \"\"\"\n\n    # class eig(object):\n    #     def __call__(self, C):\n\n    # Householder transformation of a symmetric matrix V into tridiagonal form.\n        # -> n             : dimension\n        # -> V             : symmetric nxn-matrix\n        # <- V             : orthogonal transformation matrix:\n        #                    tridiag matrix == V * V_in * V^t\n        # <- d             : diagonal\n        # <- e[0..n-1]     : off diagonal (elements 1..n-1)\n\n        # Symmetric tridiagonal QL algorithm, iterative\n        # Computes the eigensystem from a tridiagonal matrix in roughtly 3N^3 operations\n        # -> n     : Dimension.\n        # -> d     : Diagonale of tridiagonal matrix.\n        # -> e[1..n-1] : off-diagonal, output from Householder\n        # -> V     : matrix output von Householder\n        # <- d     : eigenvalues\n        # <- e     : garbage?\n        # <- V     : basis of eigenvectors, according to d\n\n\n        #  tred2(N, B, diagD, offdiag); B=C on input\n        #  tql2(N, diagD, offdiag, B);\n\n        #  private void tred2 (int n, double V[][], double d[], double e[]) {\n        def tred2 (n, V, d, e):\n            #  This is derived from the Algol procedures tred2 by\n            #  Bowdler, Martin, Reinsch, and Wilkinson, Handbook for\n            #  Auto. Comp., Vol.ii-Linear Algebra, and the corresponding\n            #  Fortran subroutine in EISPACK.\n\n            num_opt = False  # factor 1.5 in 30-D\n\n            for j in range(n):\n                d[j] = V[n-1][j] # d is output argument\n\n            # Householder reduction to tridiagonal form.\n\n            for i in range(n-1,0,-1):\n                # Scale to avoid under/overflow.\n                h = 0.0\n                if not num_opt:\n                    scale = 0.0\n                    for k in range(i):\n                        scale = scale + abs(d[k])\n                else:\n                    scale = sum(abs(d[0:i]))\n\n                if scale == 0.0:\n                    e[i] = d[i-1]\n                    for j in range(i):\n                        d[j] = V[i-1][j]\n                        V[i][j] = 0.0\n                        V[j][i] = 0.0\n                else:\n\n                    # Generate Householder vector.\n                    if not num_opt:\n                        for k in range(i):\n                            d[k] /= scale\n                            h += d[k] * d[k]\n                    else:\n                        d[:i] /= scale\n                        h = np.dot(d[:i],d[:i])\n\n                    f = d[i-1]\n                    g = h**0.5\n\n                    if f > 0:\n                        g = -g\n\n                    e[i] = scale * g\n                    h = h - f * g\n                    d[i-1] = f - g\n                    if not num_opt:\n                        for j in range(i):\n                            e[j] = 0.0\n                    else:\n                        e[:i] = 0.0\n\n                    # Apply similarity transformation to remaining columns.\n\n                    for j in range(i):\n                        f = d[j]\n                        V[j][i] = f\n                        g = e[j] + V[j][j] * f\n                        if not num_opt:\n                            for k in range(j+1, i):\n                                g += V[k][j] * d[k]\n                                e[k] += V[k][j] * f\n                            e[j] = g\n                        else:\n                            e[j+1:i] += V.T[j][j+1:i] * f\n                            e[j] = g + np.dot(V.T[j][j+1:i],d[j+1:i])\n\n                    f = 0.0\n                    if not num_opt:\n                        for j in range(i):\n                            e[j] /= h\n                            f += e[j] * d[j]\n                    else:\n                        e[:i] /= h\n                        f += np.dot(e[:i],d[:i])\n\n                    hh = f / (h + h)\n                    if not num_opt:\n                        for j in range(i):\n                            e[j] -= hh * d[j]\n                    else:\n                        e[:i] -= hh * d[:i]\n\n                    for j in range(i):\n                        f = d[j]\n                        g = e[j]\n                        if not num_opt:\n                            for k in range(j, i):\n                                V[k][j] -= (f * e[k] + g * d[k])\n                        else:\n                            V.T[j][j:i] -= (f * e[j:i] + g * d[j:i])\n\n                        d[j] = V[i-1][j]\n                        V[i][j] = 0.0\n\n                d[i] = h\n            # end for i--\n\n            # Accumulate transformations.\n\n            for i in range(n-1):\n                V[n-1][i] = V[i][i]\n                V[i][i] = 1.0\n                h = d[i+1]\n                if h != 0.0:\n                    if not num_opt:\n                        for k in range(i+1):\n                            d[k] = V[k][i+1] / h\n                    else:\n                        d[:i+1] = V.T[i+1][:i+1] / h\n\n                    for j in range(i+1):\n                        if not num_opt:\n                            g = 0.0\n                            for k in range(i+1):\n                                g += V[k][i+1] * V[k][j]\n                            for k in range(i+1):\n                                V[k][j] -= g * d[k]\n                        else:\n                            g = np.dot(V.T[i+1][0:i+1], V.T[j][0:i+1])\n                            V.T[j][:i+1] -= g * d[:i+1]\n\n                if not num_opt:\n                    for k in range(i+1):\n                        V[k][i+1] = 0.0\n                else:\n                    V.T[i+1][:i+1] = 0.0\n\n\n            if not num_opt:\n                for j in range(n):\n                    d[j] = V[n-1][j]\n                    V[n-1][j] = 0.0\n            else:\n                d[:n] = V[n-1][:n]\n                V[n-1][:n] = 0.0\n\n            V[n-1][n-1] = 1.0\n            e[0] = 0.0\n\n\n        # Symmetric tridiagonal QL algorithm, taken from JAMA package.\n        # private void tql2 (int n, double d[], double e[], double V[][]) {\n        # needs roughly 3N^3 operations\n        def tql2 (n, d, e, V):\n\n            #  This is derived from the Algol procedures tql2, by\n            #  Bowdler, Martin, Reinsch, and Wilkinson, Handbook for\n            #  Auto. Comp., Vol.ii-Linear Algebra, and the corresponding\n            #  Fortran subroutine in EISPACK.\n\n            num_opt = False  # using vectors from numpy makes it faster\n\n            if not num_opt:\n                for i in range(1,n): # (int i = 1; i < n; i++):\n                    e[i-1] = e[i]\n            else:\n                e[0:n-1] = e[1:n]\n            e[n-1] = 0.0\n\n            f = 0.0\n            tst1 = 0.0\n            eps = 2.0**-52.0\n            for l in range(n): # (int l = 0; l < n; l++) {\n\n                # Find small subdiagonal element\n\n                tst1 = max(tst1, abs(d[l]) + abs(e[l]))\n                m = l\n                while m < n:\n                    if abs(e[m]) <= eps*tst1:\n                        break\n                    m += 1\n\n                # If m == l, d[l] is an eigenvalue,\n                # otherwise, iterate.\n\n                if m > l:\n                    iiter = 0\n                    while 1: # do {\n                        iiter += 1  # (Could check iteration count here.)\n\n                        # Compute implicit shift\n\n                        g = d[l]\n                        p = (d[l+1] - g) / (2.0 * e[l])\n                        r = (p**2 + 1)**0.5  # hypot(p,1.0)\n                        if p < 0:\n                            r = -r\n\n                        d[l] = e[l] / (p + r)\n                        d[l+1] = e[l] * (p + r)\n                        dl1 = d[l+1]\n                        h = g - d[l]\n                        if not num_opt:\n                            for i in range(l+2, n):\n                                d[i] -= h\n                        else:\n                            d[l+2:n] -= h\n\n                        f = f + h\n\n                        # Implicit QL transformation.\n\n                        p = d[m]\n                        c = 1.0\n                        c2 = c\n                        c3 = c\n                        el1 = e[l+1]\n                        s = 0.0\n                        s2 = 0.0\n\n                        # hh = V.T[0].copy()  # only with num_opt\n                        for i in range(m-1, l-1, -1): # (int i = m-1; i >= l; i--) {\n                            c3 = c2\n                            c2 = c\n                            s2 = s\n                            g = c * e[i]\n                            h = c * p\n                            r = (p**2 + e[i]**2)**0.5  # hypot(p,e[i])\n                            e[i+1] = s * r\n                            s = e[i] / r\n                            c = p / r\n                            p = c * d[i] - s * g\n                            d[i+1] = h + s * (c * g + s * d[i])\n\n                            # Accumulate transformation.\n\n                            if not num_opt: # overall factor 3 in 30-D\n                                for k in range(n): # (int k = 0; k < n; k++) {\n                                    h = V[k][i+1]\n                                    V[k][i+1] = s * V[k][i] + c * h\n                                    V[k][i] = c * V[k][i] - s * h\n                            else: # about 20% faster in 10-D\n                                hh = V.T[i+1].copy()\n                                # hh[:] = V.T[i+1][:]\n                                V.T[i+1] = s * V.T[i] + c * hh\n                                V.T[i] = c * V.T[i] - s * hh\n                                # V.T[i] *= c\n                                # V.T[i] -= s * hh\n\n                        p = -s * s2 * c3 * el1 * e[l] / dl1\n                        e[l] = s * p\n                        d[l] = c * p\n\n                        # Check for convergence.\n                        if abs(e[l]) <= eps*tst1:\n                            break\n                    # } while (Math.abs(e[l]) > eps*tst1);\n\n                d[l] = d[l] + f\n                e[l] = 0.0\n\n\n            # Sort eigenvalues and corresponding vectors.\n            if 11 < 3:\n                for i in range(n-1): # (int i = 0; i < n-1; i++) {\n                    k = i\n                    p = d[i]\n                    for j in range(i+1, n): # (int j = i+1; j < n; j++) {\n                        if d[j] < p: # NH find smallest k>i\n                            k = j\n                            p = d[j]\n\n                    if k != i:\n                        d[k] = d[i] # swap k and i\n                        d[i] = p\n                        for j in range(n): # (int j = 0; j < n; j++) {\n                            p = V[j][i]\n                            V[j][i] = V[j][k]\n                            V[j][k] = p\n        # tql2\n\n        N = len(C[0])\n        if 11 < 3:\n            V = np.array([x[:] for x in C])  # copy each \"row\"\n            N = V[0].size\n            d = np.zeros(N)\n            e = np.zeros(N)\n        else:\n            V = [[x[i] for i in range(N)] for x in C]  # copy each \"row\"\n            d = N * [0.]\n            e = N * [0.]\n\n        tred2(N, V, d, e)\n        tql2(N, d, e, V)\n        return (array(d), array(V))\nMh = Misc.MathHelperFunctions\ndef pprint(to_be_printed):\n    \"\"\"nicely formated print\"\"\"\n    try:\n        import pprint as pp\n        # generate an instance PrettyPrinter\n        # pp.PrettyPrinter().pprint(to_be_printed)\n        pp.pprint(to_be_printed)\n    except ImportError:\n        print('could not use pprint module, will apply regular print')\n        print(to_be_printed)\nclass Rotation(object):\n    \"\"\"Rotation class that implements an orthogonal linear transformation,\n    one for each dimension. Used to implement non-separable test functions.\n\n    Example:\n\n    >>> import cma, numpy as np\n    >>> R = cma.Rotation()\n    >>> R2 = cma.Rotation() # another rotation\n    >>> x = np.array((1,2,3))\n    >>> print(R(R(x), inverse=1))\n    [ 1.  2.  3.]\n\n    \"\"\"\n    dicMatrices = {}  # store matrix if necessary, for each dimension\n    def __init__(self):\n        self.dicMatrices = {} # otherwise there might be shared bases which is probably not what we want\n    def __call__(self, x, inverse=False): # function when calling an object\n        \"\"\"Rotates the input array `x` with a fixed rotation matrix\n           (``self.dicMatrices['str(len(x))']``)\n        \"\"\"\n        N = x.shape[0]  # can be an array or matrix, TODO: accept also a list of arrays?\n        if str(N) not in self.dicMatrices: # create new N-basis for once and all\n            B = np.random.randn(N, N)\n            for i in range(N):\n                for j in range(0, i):\n                    B[i] -= np.dot(B[i], B[j]) * B[j]\n                B[i] /= sum(B[i]**2)**0.5\n            self.dicMatrices[str(N)] = B\n        if inverse:\n            return np.dot(self.dicMatrices[str(N)].T, x)  # compute rotation\n        else:\n            return np.dot(self.dicMatrices[str(N)], x)  # compute rotation\n# Use rotate(x) to rotate x\nrotate = Rotation()\n\n#____________________________________________________________\n#____________________________________________________________\n#\nclass FitnessFunctions(object):\n    \"\"\" versatile container for test objective functions \"\"\"\n\n    def __init__(self):\n        self.counter = 0  # number of calls or any other practical use\n    def rot(self, x, fun, rot=1, args=()):\n        \"\"\"returns ``fun(rotation(x), *args)``, ie. `fun` applied to a rotated argument\"\"\"\n        if len(np.shape(array(x))) > 1:  # parallelized\n            res = []\n            for x in x:\n                res.append(self.rot(x, fun, rot, args))\n            return res\n\n        if rot:\n            return fun(rotate(x, *args))\n        else:\n            return fun(x)\n    def somenan(self, x, fun, p=0.1):\n        \"\"\"returns sometimes np.NaN, otherwise fun(x)\"\"\"\n        if np.random.rand(1) < p:\n            return np.NaN\n        else:\n            return fun(x)\n    def rand(self, x):\n        \"\"\"Random test objective function\"\"\"\n        return np.random.random(1)[0]\n    def linear(self, x):\n        return -x[0]\n    def lineard(self, x):\n        if 1 < 3 and any(array(x) < 0):\n            return np.nan\n        if 1 < 3 and sum([ (10 + i) * x[i] for i in range(len(x))]) > 50e3:\n            return np.nan\n        return -sum(x)\n    def sphere(self, x):\n        \"\"\"Sphere (squared norm) test objective function\"\"\"\n        # return np.random.rand(1)[0]**0 * sum(x**2) + 1 * np.random.rand(1)[0]\n        return sum((x+0)**2)\n    def spherewithoneconstraint(self, x):\n        return sum((x+0)**2) if x[0] > 1 else np.nan\n    def elliwithoneconstraint(self, x, idx=[-1]):\n        return self.ellirot(x) if all(array(x)[idx] > 1) else np.nan\n\n    def spherewithnconstraints(self, x):\n        return sum((x+0)**2) if all(array(x) > 1) else np.nan\n\n    def noisysphere(self, x, noise=4.0, cond=1.0):\n        \"\"\"noise=10 does not work with default popsize, noise handling does not help \"\"\"\n        return self.elli(x, cond=cond) * (1 + noise * np.random.randn() / len(x))\n    def spherew(self, x):\n        \"\"\"Sphere (squared norm) with sum x_i = 1 test objective function\"\"\"\n        # return np.random.rand(1)[0]**0 * sum(x**2) + 1 * np.random.rand(1)[0]\n        # s = sum(abs(x))\n        # return sum((x/s+0)**2) - 1/len(x)\n        # return sum((x/s)**2) - 1/len(x)\n        return -0.01*x[0] + abs(x[0])**-2 * sum(x[1:]**2)\n    def partsphere(self, x):\n        \"\"\"Sphere (squared norm) test objective function\"\"\"\n        self.counter += 1\n        # return np.random.rand(1)[0]**0 * sum(x**2) + 1 * np.random.rand(1)[0]\n        dim = len(x)\n        x = array([x[i % dim] for i in range(2*dim)])\n        N = 8\n        i = self.counter % dim\n        #f = sum(x[i:i + N]**2)\n        f = sum(x[np.random.randint(dim, size=N)]**2)\n        return f\n    def sectorsphere(self, x):\n        \"\"\"asymmetric Sphere (squared norm) test objective function\"\"\"\n        return sum(x**2) + (1e6-1) * sum(x[x<0]**2)\n    def cornersphere(self, x):\n        \"\"\"Sphere (squared norm) test objective function constraint to the corner\"\"\"\n        nconstr = len(x) - 0\n        if any(x[:nconstr] < 1):\n            return np.NaN\n        return sum(x**2) - nconstr\n    def cornerelli(self, x):\n        \"\"\" \"\"\"\n        if any(x < 1):\n            return np.NaN\n        return self.elli(x) - self.elli(np.ones(len(x)))\n    def cornerellirot(self, x):\n        \"\"\" \"\"\"\n        if any(x < 1):\n            return np.NaN\n        return self.ellirot(x)\n    def normalSkew(self, f):\n        N = np.random.randn(1)[0]**2\n        if N < 1:\n            N = f * N  # diminish blow up lower part\n        return N\n    def noiseC(self, x, func=sphere, fac=10, expon=0.8):\n        f = func(self, x)\n        N = np.random.randn(1)[0]/np.random.randn(1)[0]\n        return max(1e-19, f + (float(fac)/len(x)) * f**expon * N)\n    def noise(self, x, func=sphere, fac=10, expon=1):\n        f = func(self, x)\n        #R = np.random.randn(1)[0]\n        R = np.log10(f) + expon * abs(10-np.log10(f)) * np.random.rand(1)[0]\n        # sig = float(fac)/float(len(x))\n        # R = log(f) + 0.5*log(f) * random.randn(1)[0]\n        # return max(1e-19, f + sig * (f**np.log10(f)) * np.exp(R))\n        # return max(1e-19, f * np.exp(sig * N / f**expon))\n        # return max(1e-19, f * normalSkew(f**expon)**sig)\n        return f + 10**R  # == f + f**(1+0.5*RN)\n    def cigar(self, x, rot=0, cond=1e6):\n        \"\"\"Cigar test objective function\"\"\"\n        if rot:\n            x = rotate(x)\n        x = [x] if np.isscalar(x[0]) else x  # scalar into list\n        f = [x[0]**2 + cond * sum(x[1:]**2) for x in x]\n        return f if len(f) > 1 else f[0]  # 1-element-list into scalar\n    def tablet(self, x, rot=0):\n        \"\"\"Tablet test objective function\"\"\"\n        if rot:\n            x = rotate(x)\n        x = [x] if np.isscalar(x[0]) else x  # scalar into list\n        f = [1e6*x[0]**2 + sum(x[1:]**2) for x in x]\n        return f if len(f) > 1 else f[0]  # 1-element-list into scalar\n    def cigtab(self, y):\n        \"\"\"Cigtab test objective function\"\"\"\n        X = [y] if np.isscalar(y[0]) else y\n        f = [1e-4 * x[0]**2 + 1e4 * x[1]**2 + sum(x[2:]**2) for x in X]\n        return f if len(f) > 1 else f[0]\n    def twoaxes(self, y):\n        \"\"\"Cigtab test objective function\"\"\"\n        X = [y] if np.isscalar(y[0]) else y\n        N2 = len(X[0]) // 2\n        f = [1e6 * sum(x[0:N2]**2) + sum(x[N2:]**2) for x in X]\n        return f if len(f) > 1 else f[0]\n    def ellirot(self, x):\n        return fcts.elli(array(x), 1)\n    def hyperelli(self, x):\n        N = len(x)\n        return sum((np.arange(1, N+1) * x)**2)\n    def elli(self, x, rot=0, xoffset=0, cond=1e6, actuator_noise=0.0, both=False):\n        \"\"\"Ellipsoid test objective function\"\"\"\n        if not np.isscalar(x[0]):  # parallel evaluation\n            return [self.elli(xi, rot) for xi in x]  # could save 20% overall\n        if rot:\n            x = rotate(x)\n        N = len(x)\n        if actuator_noise:\n            x = x + actuator_noise * np.random.randn(N)\n\n        ftrue = sum(cond**(np.arange(N)/(N-1.))*(x+xoffset)**2)\n\n        alpha = 0.49 + 1./N\n        beta = 1\n        felli = np.random.rand(1)[0]**beta * ftrue * \\\n                max(1, (10.**9 / (ftrue+1e-99))**(alpha*np.random.rand(1)[0]))\n        # felli = ftrue + 1*np.random.randn(1)[0] / (1e-30 +\n        #                                           np.abs(np.random.randn(1)[0]))**0\n        if both:\n            return (felli, ftrue)\n        else:\n            # return felli  # possibly noisy value\n            return ftrue # + np.random.randn()\n    def elliconstraint(self, x, cfac = 1e8, tough=True, cond=1e6):\n        \"\"\"ellipsoid test objective function with \"constraints\" \"\"\"\n        N = len(x)\n        f = sum(cond**(np.arange(N)[-1::-1]/(N-1)) * x**2)\n        cvals = (x[0] + 1,\n                 x[0] + 1 + 100*x[1],\n                 x[0] + 1 - 100*x[1])\n        if tough:\n            f += cfac * sum(max(0,c) for c in cvals)\n        else:\n            f += cfac * sum(max(0,c+1e-3)**2 for c in cvals)\n        return f\n    def rosen(self, x, alpha=1e2):\n        \"\"\"Rosenbrock test objective function\"\"\"\n        x = [x] if np.isscalar(x[0]) else x  # scalar into list\n        f = [sum(alpha*(x[:-1]**2-x[1:])**2 + (1.-x[:-1])**2) for x in x]\n        return f if len(f) > 1 else f[0]  # 1-element-list into scalar\n    def diffpow(self, x, rot=0):\n        \"\"\"Diffpow test objective function\"\"\"\n        N = len(x)\n        if rot:\n            x = rotate(x)\n        return sum(np.abs(x)**(2.+4.*np.arange(N)/(N-1.)))**0.5\n    def rosenelli(self, x):\n        N = len(x)\n        return self.rosen(x[:N/2]) + self.elli(x[N/2:], cond=1)\n    def ridge(self, x, expo=2):\n        x = [x] if np.isscalar(x[0]) else x  # scalar into list\n        f = [x[0] + 100*np.sum(x[1:]**2)**(expo/2.) for x in x]\n        return f if len(f) > 1 else f[0]  # 1-element-list into scalar\n    def ridgecircle(self, x, expo=0.5):\n        \"\"\"happy cat by HG Beyer\"\"\"\n        a = len(x)\n        s = sum(x**2)\n        return ((s - a)**2)**(expo/2) + s/a + sum(x)/a\n    def happycat(self, x, alpha=1./8):\n        s = sum(x**2)\n        return ((s - len(x))**2)**alpha + (s/2 + sum(x)) / len(x) + 0.5\n    def flat(self,x):\n        return 1\n        return 1 if np.random.rand(1) < 0.9 else 1.1\n        return np.random.randint(1,30)\n    def branin(self, x):\n        # in [0,15]**2\n        y = x[1]\n        x = x[0] + 5\n        return (y - 5.1*x**2 / 4 / np.pi**2 + 5 * x / np.pi - 6)**2 + 10 * (1 - 1/8/np.pi) * np.cos(x) + 10 - 0.397887357729738160000\n    def goldsteinprice(self, x):\n        x1 = x[0]\n        x2 = x[1]\n        return (1 + (x1 +x2 + 1)**2 * (19 - 14 * x1 + 3 * x1**2 - 14 * x2 + 6 * x1 * x2 + 3 * x2**2)) * (\n                30 + (2 * x1 - 3 * x2)**2 * (18 - 32 * x1 + 12 * x1**2 + 48 * x2 - 36 * x1 * x2 + 27 * x2**2)) - 3\n    def griewank(self, x):\n        # was in [-600 600]\n        x = (600./5) * x\n        return 1 - np.prod(np.cos(x/sqrt(1.+np.arange(len(x))))) + sum(x**2)/4e3\n    def rastrigin(self, x):\n        \"\"\"Rastrigin test objective function\"\"\"\n        if not np.isscalar(x[0]):\n            N = len(x[0])\n            return [10*N + sum(xi**2 - 10*np.cos(2*np.pi*xi)) for xi in x]\n            # return 10*N + sum(x**2 - 10*np.cos(2*np.pi*x), axis=1)\n        N = len(x)\n        return 10*N + sum(x**2 - 10*np.cos(2*np.pi*x))\n    def schaffer(self, x):\n        \"\"\" Schaffer function x0 in [-100..100]\"\"\"\n        N = len(x);\n        s = x[0:N-1]**2 + x[1:N]**2;\n        return sum(s**0.25 * (np.sin(50*s**0.1)**2 + 1))\n\n    def schwefelelli(self, x):\n        s = 0\n        f = 0\n        for i in range(len(x)):\n            s += x[i]\n            f += s**2\n        return f\n    def schwefelmult(self, x, pen_fac = 1e4):\n        \"\"\"multimodal Schwefel function with domain -500..500\"\"\"\n        y = [x] if np.isscalar(x[0]) else x\n        N = len(y[0])\n        f = array([418.9829*N - 1.27275661e-5*N - sum(x * np.sin(np.abs(x)**0.5))\n                + pen_fac * sum((abs(x) > 500) * (abs(x) - 500)**2) for x in y])\n        return f if len(f) > 1 else f[0]\n    def optprob(self, x):\n        n = np.arange(len(x)) + 1\n        f = n * x * (1-x)**(n-1)\n        return sum(1-f)\n    def lincon(self, x, theta=0.01):\n        \"\"\"ridge like linear function with one linear constraint\"\"\"\n        if x[0] < 0:\n            return np.NaN\n        return theta * x[1] + x[0]\n    def rosen_nesterov(self, x, rho=100):\n        \"\"\"needs exponential number of steps in a non-increasing f-sequence.\n\n        x_0 = (-1,1,...,1)\n        See Jarre (2011) \"On Nesterov's Smooth Chebyshev-Rosenbrock Function\"\n\n        \"\"\"\n        f = 0.25 * (x[0] - 1)**2\n        f += rho * sum((x[1:] - 2 * x[:-1]**2 + 1)**2)\n        return f\n\nfcts = FitnessFunctions()\nFcts = fcts  # for cross compatibility, as if the functions were static members of class Fcts\ndef felli(x): # unbound function, needed to test multiprocessor\n    return sum(1e6**(np.arange(len(x))/(len(x)-1))*(x)**2)\n\n\n#____________________________________________\n#____________________________________________________________\ndef _test(module=None):  # None is fine when called from inside the module\n    import doctest\n    print(doctest.testmod(module))  # this is pretty coool!\ndef process_test(stream=None):\n    \"\"\" \"\"\"\n    import fileinput\n    s1 = \"\"\n    s2 = \"\"\n    s3 = \"\"\n    state = 0\n    for line in fileinput.input(stream):  # takes argv as file or stdin\n        if 1 < 3:\n            s3 += line\n            if state < -1 and line.startswith('***'):\n                print(s3)\n            if line.startswith('***'):\n                s3 = \"\"\n\n        if state == -1:  # found a failed example line\n            s1 += '\\n\\n*** Failed Example:' + line\n            s2 += '\\n\\n\\n'   # line\n            # state = 0  # wait for 'Expected:' line\n\n        if line.startswith('Expected:'):\n            state = 1\n            continue\n        elif line.startswith('Got:'):\n            state = 2\n            continue\n        elif line.startswith('***'):  # marks end of failed example\n            state = 0\n        elif line.startswith('Failed example:'):\n            state = -1\n        elif line.startswith('Exception raised'):\n            state = -2\n\n        # in effect more else:\n        if state == 1:\n            s1 += line + ''\n        if state == 2:\n            s2 += line + ''\n\n#____________________________________________________________\n#____________________________________________________________\n#\ndef main(argv=None):\n    \"\"\"to install and/or test from the command line use::\n\n        python cma.py [options | func dim sig0 [optkey optval][optkey optval]...]\n\n    --test (or -t) to run the doctest, ``--test -v`` to get (much) verbosity\n    and ``--test -q`` to run it quietly with output only in case of errors.\n\n    install to install cma.py (uses setup from distutils.core).\n\n    --fcts and --doc for more infos or start ipython --pylab.\n\n    Examples\n    --------\n    First, testing with the local python distribution::\n\n        python cma.py --test\n\n    If succeeded install (uses setup from distutils.core)::\n\n        python cma.py install\n\n    A single run on the ellipsoid function::\n\n        python cma.py elli 10 1\n\n    \"\"\"\n    if argv is None:\n        argv = sys.argv  # should have better been sys.argv[1:]\n\n    # uncomment for unit test\n    # _test()\n    # handle input arguments, getopt might be helpful ;-)\n    if len(argv) >= 1:  # function and help\n        if len(argv) == 1 or argv[1].startswith('-h') or argv[1].startswith('--help'):\n            print(main.__doc__)\n            fun = None\n        elif argv[1].startswith('-t') or argv[1].startswith('--test'):\n            import doctest\n            if len(argv) > 2 and (argv[2].startswith('--v') or argv[2].startswith('-v')):  # verbose\n                print('doctest for cma.py: due to different platforms and python versions')\n                print('and in some cases due to a missing unique random seed')\n                print('many examples will \"fail\". This is OK, if they give a similar')\n                print('to the expected result and if no exception occurs. ')\n                # if argv[1][2] == 'v':\n                doctest.testmod(report=True)  # this is quite cool!\n            else:  # was: if len(argv) > 2 and (argv[2].startswith('--qu') or argv[2].startswith('-q')):\n                print('doctest for cma.py: launching (it might be necessary to close a few pop up windows to finish)')\n                fn = '__cma_doctest__.txt'\n                stdout = sys.stdout\n                try:\n                    with open(fn, 'w') as f:\n                        sys.stdout = f\n                        doctest.testmod(report=True)  # this is quite cool!\n                finally:\n                    sys.stdout = stdout\n                process_test(fn)\n                print('doctest for cma.py: finished (no other output should be seen after launching)')\n            return\n        elif argv[1] == '--doc':\n            print(__doc__)\n            print(CMAEvolutionStrategy.__doc__)\n            print(fmin.__doc__)\n            fun = None\n        elif argv[1] == '--fcts':\n            print('List of valid function names:')\n            print([d for d in dir(fcts) if not d.startswith('_')])\n            fun = None\n        elif argv[1] in ('install', '--install'):\n            from distutils.core import setup\n            setup(name = \"cma\",\n                  version = __version__,\n                  author = \"Nikolaus Hansen\",\n                  #    packages = [\"cma\"],\n                  py_modules = [\"cma\"],\n                  )\n            fun = None\n        elif argv[1] in ('plot',):\n            plot()\n            raw_input('press return')\n            fun = None\n        elif len(argv) > 3:\n            fun = eval('fcts.' + argv[1])\n        else:\n            print('try -h option')\n            fun = None\n\n    if fun is not None:\n\n        if len(argv) > 2:  # dimension\n            x0 = np.ones(eval(argv[2]))\n        if len(argv) > 3:  # sigma\n            sig0 = eval(argv[3])\n\n        opts = {}\n        for i in range(5, len(argv), 2):\n            opts[argv[i-1]] = eval(argv[i])\n\n        # run fmin\n        if fun is not None:\n            tic = time.time()\n            fmin(fun, x0, sig0, **opts)  # ftarget=1e-9, tolfacupx=1e9, verb_log=10)\n            # plot()\n            # print ' best function value ', res[2]['es'].best[1]\n            print('elapsed time [s]: + %.2f', round(time.time() - tic, 2))\n\n    elif not len(argv):\n        fmin(fcts.elli, np.ones(6)*0.1, 0.1, ftarget=1e-9)\n\n\n#____________________________________________________________\n#____________________________________________________________\n#\n# mainly for testing purpose\n# executed when called from an OS shell\nif __name__ == \"__main__\":\n    # for i in range(1000):  # how to find the memory leak\n    #     main([\"cma.py\", \"rastrigin\", \"10\", \"5\", \"popsize\", \"200\", \"maxfevals\", \"24999\", \"verb_log\", \"0\"])\n    main()\n\n"
  },
  {
    "path": "src/aup/Proposer/spearmint/gp.py",
    "content": "##\n# Copyright (C) 2012 Jasper Snoek, Hugo Larochelle and Ryan P. Adams\n# \n# This code is written for research and educational purposes only to \n# supplement the paper entitled\n# \"Practical Bayesian Optimization of Machine Learning Algorithms\"\n# by Snoek, Larochelle and Adams\n# Advances in Neural Information Processing Systems, 2012\n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation, either version 3 of the License, or\n# (at your option) any later version.\n# \n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n# \n# You should have received a copy of the GNU General Public License\n# along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\"\"\"\ngp.py contains utility functions related to computation in Gaussian processes.\n\"\"\"\nimport numpy as np\nimport scipy.linalg as spla\nimport scipy.optimize as spo\nimport scipy.io as sio\n\nSQRT_3 = np.sqrt(3.0)\nSQRT_5 = np.sqrt(5.0)\n\ndef dist2(ls, x1, x2=None):\n    # Assumes NxD and MxD matrices.\n    # Compute the squared distance matrix, given length scales.\n    \n    if x2 is None:\n        # Find distance with self for x1.\n\n        # Rescale.\n        xx1 = x1 / ls        \n        xx2 = xx1\n\n    else:\n        # Rescale.\n        xx1 = x1 / ls\n        xx2 = x2 / ls\n    \n    r2 = np.maximum(-(np.dot(xx1, 2*xx2.T) \n                       - np.sum(xx1*xx1, axis=1)[:,np.newaxis]\n                       - np.sum(xx2*xx2, axis=1)[:,np.newaxis].T), 0.0)\n\n    return r2\n\ndef grad_dist2(ls, x1, x2=None):\n    if x2 is None:\n        x2 = x1\n        \n    # Rescale.\n    x1 = x1 / ls\n    x2 = x2 / ls\n    \n    N = x1.shape[0]\n    M = x2.shape[0]\n    D = x1.shape[1]\n    gX = np.zeros((x1.shape[0],x2.shape[0],x1.shape[1]))\n\n    code = \\\n    \"\"\"\n    for (int i=0; i<N; i++)\n      for (int j=0; j<M; j++)\n        for (int d=0; d<D; d++)\n          gX(i,j,d) = (2/ls(d))*(x1(i,d) - x2(j,d));\n    \"\"\"\n    try:\n        scipy.weave.inline(code, ['x1','x2','gX','ls','M','N','D'], \\\n                       type_converters=scipy.weave.converters.blitz, \\\n                       compiler='gcc')\n    except:\n        # The C code weave above is 10x faster than this:\n        for i in range(0,x1.shape[0]):\n            gX[i,:,:] = 2*(x1[i,:] - x2[:,:])*(1/ls)\n\n    return gX\n\ndef SE(ls, x1, x2=None, grad=False):\n    ls = np.ones(ls.shape)\n    cov = np.exp(-0.5 * dist2(ls, x1, x2))\n    if grad:\n        return (cov, grad_ARDSE(ls, x1, x2))\n    else:\n        return cov\n\ndef ARDSE(ls, x1, x2=None, grad=False):\n    cov = np.exp(-0.5 * dist2(ls, x1, x2))\n    if grad:\n        return (cov, grad_ARDSE(ls, x1, x2))\n    else:\n        return cov\n\ndef grad_ARDSE(ls, x1, x2=None):\n    r2 = dist2(ls, x1, x2)\n    r  = np.sqrt(r2)\n    return -0.5*np.exp(-0.5*r2)[:,:,np.newaxis] * grad_dist2(ls, x1, x2)\n\ndef Matern32(ls, x1, x2=None, grad=False):\n    r   = np.sqrt(dist2(ls, x1, x2))\n    cov = (1 + SQRT_3*r) * np.exp(-SQRT_3*r)\n    if grad:\n        return (cov, grad_Matern32(ls, x1, x2))\n    else:\n        return cov\n\ndef grad_Matern32(ls, x1, x2=None):\n    r       = np.sqrt(dist2(ls, x1, x2))\n    grad_r2 = -1.5*np.exp(-SQRT_3*r)\n    return grad_r2[:,:,np.newaxis] * grad_dist2(ls, x1, x2)\n\ndef Matern52(ls, x1, x2=None, grad=False):\n    r2  = np.abs(dist2(ls, x1, x2))\n    r   = np.sqrt(r2)\n    cov = (1.0 + SQRT_5*r + (5.0/3.0)*r2) * np.exp(-SQRT_5*r)\n    if grad:\n        return (cov, grad_Matern52(ls, x1, x2))\n    else:\n        return cov\n\ndef grad_Matern52(ls, x1, x2=None):\n    r       = np.sqrt(dist2(ls, x1, x2))\n    grad_r2 = -(5.0/6.0)*np.exp(-SQRT_5*r)*(1 + SQRT_5*r)\n    return grad_r2[:,:,np.newaxis] * grad_dist2(ls, x1, x2)\n\nclass GP:\n    def __init__(self, covar=\"Matern52\", mcmc_iters=10, noiseless=False):\n        self.cov_func        = globals()[covar]\n        self.mcmc_iters      = int(mcmc_iters)\n        self.D               = -1\n        self.hyper_iters     = 1\n        self.noiseless       = bool(int(noiseless))\n        self.hyper_samples = []\n        \n        self.noise_scale = 0.1  # horseshoe prior \n        self.amp2_scale  = 1    # zero-mean log normal prior\n        self.max_ls      = 2    # top-hat prior on length scales \n\n    def real_init(self, dims, values):\n        # Input dimensionality. \n        self.D = dims\n\n        # Initial length scales.               \n        self.ls = np.ones(self.D)\n\n        # Initial amplitude.        \n        self.amp2 = np.std(values)\n\n        # Initial observation noise.                                          \n        self.noise = 1e-3\n\n        # Initial mean.\n        self.mean = np.mean(values)\n\n    def cov(self, x1, x2=None):\n        if x2 is None:\n            return self.amp2 * (self.cov_func(self.ls, x1, None)\n                                + 1e-6*np.eye(x1.shape[0]))\n        else:\n            return self.amp2 * self.cov_func(self.ls, x1, x2)\n\n    def logprob(self, comp, vals):\n            mean  = self.mean\n            amp2  = self.amp2\n            noise = self.noise\n            \n            cov   = amp2 * (self.cov_func(self.ls, comp, None) + 1e-6*np.eye(comp.shape[0])) + noise*np.eye(comp.shape[0])\n            chol  = spla.cholesky(cov, lower=True)\n            solve = spla.cho_solve((chol, True), vals - mean)\n            lp    = -np.sum(np.log(np.diag(chol)))-0.5*np.dot(vals-mean, solve)\n            return lp\n\n    def optimize_hypers(self, comp, vals):\n        self.mean = np.mean(vals)\n        diffs     = vals - self.mean\n\n        state = { }\n\n        def jitter_chol(covmat):\n            passed = False\n            jitter = 1e-8\n            val = 0\n            while not passed:\n                if (jitter > 100000):\n                    val = spla.cholesky(np.eye(covmat.shape[0]))\n                    break\n                try:\n                    val = spla.cholesky(covmat +\n                        jitter*np.eye(covmat.shape[0]), lower=True)\n                    passed = True\n                except ValueError:\n                    jitter = jitter*1.1\n                    print(\"Covariance matrix not PSD, adding jitter:\", jitter)\n                    passed = False\n            return val\n        \n        def memoize(amp2, noise, ls):\n            if ( 'corr' not in state\n                 or state['amp2'] != amp2\n                 or state['noise'] != noise\n                 or np.any(state['ls'] != ls)):\n\n                # Get the correlation matrix\n                (corr, grad_corr) = self.cov_func(ls, comp, None, grad=True)\n        \n                # Scale and add noise & jitter.\n                covmat = (amp2 * (corr + 1e-6*np.eye(comp.shape[0])) \n                          + noise * np.eye(comp.shape[0]))\n\n                # Memoize\n                state['corr']      = corr\n                state['grad_corr'] = grad_corr\n                state['chol']      = jitter_chol(covmat)\n                state['amp2']      = amp2\n                state['noise']     = noise\n                state['ls']        = ls\n                \n            return (state['chol'], state['corr'], state['grad_corr'])\n\n        def nlogprob(hypers):\n            amp2  = np.exp(hypers[0])\n            noise = np.exp(hypers[1])\n            ls    = np.exp(hypers[2:])\n\n            chol  = memoize(amp2, noise, ls)[0]\n            solve = spla.cho_solve((chol, True), diffs)\n            lp    = -np.sum(np.log(np.diag(chol)))-0.5*np.dot(diffs, solve)\n            return -lp\n\n        def grad_nlogprob(hypers):\n            amp2  = np.exp(hypers[0])\n            noise = np.exp(hypers[1])\n            ls    = np.exp(hypers[2:])\n\n            chol, corr, grad_corr = memoize(amp2, noise, ls)\n            solve   = spla.cho_solve((chol, True), diffs)\n            inv_cov = spla.cho_solve((chol, True), np.eye(chol.shape[0]))\n\n            jacobian = np.outer(solve, solve) - inv_cov\n\n            grad = np.zeros(self.D + 2)\n\n            # Log amplitude gradient.\n            grad[0] = 0.5 * np.trace(np.dot( jacobian, corr + 1e-6*np.eye(chol.shape[0]))) * amp2\n\n            # Log noise gradient.\n            grad[1] = 0.5 * np.trace(np.dot( jacobian, np.eye(chol.shape[0]))) * noise\n\n            # Log length scale gradients.\n            for dd in range(self.D):\n                grad[dd+2] = 1 * np.trace(np.dot( jacobian, -amp2*grad_corr[:,:,dd]*comp[:,dd][:,np.newaxis]/(np.exp(ls[dd]))))*np.exp(ls[dd])\n\n            # Roll in the prior variance.\n            #grad -= 2*hypers/self.hyper_prior\n\n            return -grad\n        \n        # Initial length scales.\n        self.ls = np.ones(self.D)\n        # Initial amplitude.\n        self.amp2 = np.std(vals)\n        # Initial observation noise.\n        self.noise = 1e-3\n        \n        hypers     = np.zeros(self.ls.shape[0]+2)\n        hypers[0]  = np.log(self.amp2)\n        hypers[1]  = np.log(self.noise)\n        hypers[2:] = np.log(self.ls)\n        \n        # Use a bounded bfgs just to prevent the length-scales and noise from \n        # getting into regions that are numerically unstable\n        b = [(-10,10),(-10,10)]\n        for i in range(comp.shape[1]):\n            b.append((-10,5))\n  \n        hypers = spo.fmin_l_bfgs_b(nlogprob, hypers, grad_nlogprob, args=(), bounds=b, disp=0)\n                \n        #hypers = spo.fmin_bfgs(nlogprob, hypers, grad_nlogprob, maxiter=100)\n        hypers = hypers[0]\n        #hypers = spo.fmin_bfgs(nlogprob, hypers, grad_nlogprob, maxiter=100)\n\n        self.amp2  = np.exp(hypers[0])\n        self.noise = np.exp(hypers[1])\n        self.ls    = np.exp(hypers[2:])\n\ndef main():\n    try:\n        import matplotlib.pyplot as plt\n    except:\n        pass\n\n    # Let's start with some random values\n    x = np.linspace(0,1,10)[:,np.newaxis]*10#np.random.rand(100)[:,np.newaxis]\n    y = np.random.randn(10)\n    mygp = GP(covar='ARDSE')\n    mygp.real_init(x.shape[1], y)\n\n    # Sample some functions given these hyperparameters and plot them\n    for i in range(0,5):\n        x = np.linspace(0,1,100)[:,np.newaxis]*10\n        K = mygp.cov(x)\n        y = np.random.randn(100)\n    \n        fsamp = mygp.mean + np.dot(spla.cholesky(K).transpose(), y)\n        try:\n            plt.plot(x, fsamp)\n        except:\n            pass\n\n    print('Loglikelihood before optimizing: ', mygp.logprob(x,y))\n    mygp.optimize_hypers(x,y)\n    print('Loglikelihood after optimizing: ', mygp.logprob(x,y))\n        \n    try:\n        plt.show()\n    except:\n        print('Install matplotlib to get figures')\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "src/aup/Proposer/spearmint/helpers.py",
    "content": "import os\nimport sys\nimport subprocess\nimport tempfile\n\nfrom google.protobuf import text_format\nfrom .spearmint_pb2   import *\n\n\ndef log(*args):\n    '''Write a msg to stderr.'''\n    for v in args:\n        sys.stderr.write(str(v))\n    sys.stderr.write(\"\\n\")\n\n\ndef sh(cmd):\n    '''Run a shell command (blocking until completion).'''\n    subprocess.check_call(cmd, shell=True)\n\n\ndef redirect_output(path):\n    '''Redirect stdout and stderr to a file.'''\n    outfile    = open(path, 'a')\n    sys.stdout = outfile\n    sys.stderr = outfile\n\n\ndef check_dir(path):\n    '''Create a directory if it doesn't exist.'''\n    if not os.path.exists(path):\n        os.mkdir(path)\n\n\ndef grid_for(job):\n    return os.path.join(job.expt_dir, 'expt-grid.pkl')\n\n\n\ndef file_write_safe(path, data):\n    '''Write data to a temporary file, then move to the destination path.'''\n    fh = tempfile.NamedTemporaryFile(mode='w', delete=False)\n    fh.write(data)\n    fh.close()\n    cmd = 'mv \"%s\" \"%s\"' % (fh.name, path)\n    sh(cmd)\n\n\ndef save_experiment(filename, expt):\n    file_write_safe(filename, text_format.MessageToString(expt))\n\n\ndef load_experiment(filename):\n    fh = open(filename, 'rb')\n    expt = Experiment()\n    text_format.Merge(fh.read(), expt)\n    fh.close()\n    return expt\n\n\ndef job_output_file(job):\n    return os.path.join(job.expt_dir, 'output', '%08d.out' % (job.id))\n\n\ndef job_file_for(job):\n    '''Get the path to the job file corresponding to a job object.'''\n    return os.path.join(job.expt_dir, 'jobs', '%08d.pb' % (job.id))\n\n\ndef save_job(job):\n    filename = job_file_for(job)\n    file_write_safe(filename, job.SerializeToString())\n\n\ndef load_job(filename):\n    fh = open(filename, 'rb')\n    job = Job()\n    job.ParseFromString(fh.read())\n    fh.close()\n    return job\n\n"
  },
  {
    "path": "src/aup/Proposer/spearmint/runner.py",
    "content": "import sys\nimport os\nimport traceback\n\nfrom spearmint_pb2   import *\nfrom ExperimentGrid  import *\nfrom helpers         import *\n\n\n# System dependent modules\nDEFAULT_MODULES = [ 'packages/epd/7.1-2',\n                    'packages/matlab/r2011b',\n                    'mpi/openmpi/1.2.8/intel',\n                    'libraries/mkl/10.0',\n                    'packages/cuda/4.0',\n                    ]\n\nMCR_LOCATION = \"/home/matlab/v715\" # hack\n\n\ndef job_runner(job):\n    '''This fn runs in a new process.  Now we are going to do a little\n    bookkeeping and then spin off the actual job that does whatever it is we're\n    trying to achieve.'''\n\n    redirect_output(job_output_file(job))\n    log(\"Running in wrapper mode for '%s'\\n\" % (job.id))\n\n    ExperimentGrid.job_running(job.expt_dir, job.id)\n\n    # Update metadata and save the job file, which will be read by the job wrappers.\n    job.start_t = int(time.time())\n    job.status  = 'running'\n    save_job(job)\n\n    success    = False\n    start_time = time.time()\n\n    try:\n        if job.language == MATLAB:   run_matlab_job(job)\n        elif job.language == PYTHON: run_python_job(job)\n        elif job.language == SHELL:  run_torch_job(job)\n        elif job.language == MCR:    run_mcr_job(job)\n        else:\n            raise Exception(\"That function type has not been implemented.\")\n\n        success = True\n    except:\n        log(\"-\" * 40)\n        log(\"Problem running the job:\")\n        log(sys.exc_info())\n        log(traceback.print_exc(limit=1000))\n        log(\"-\" * 40)\n\n    end_time = time.time()\n    duration = end_time - start_time\n\n    # The job output is written back to the job file, so we read it back in to\n    # get the results.\n    job_file = job_file_for(job)\n    job      = load_job(job_file)\n\n    log(\"Job file reloaded.\")\n\n    if not job.HasField(\"value\"):\n        log(\"Could not find value in output file.\")\n        success = False\n\n    if success:\n        log(\"Completed successfully in %0.2f seconds. [%f]\"\n                         % (duration, job.value))\n\n        # Update the status for this job.\n        ExperimentGrid.job_complete(job.expt_dir, job.id,\n                                    job.value, duration)\n        job.status = 'complete'\n    else:\n        log(\"Job failed in %0.2f seconds.\" % (duration))\n\n        # Update the experiment status for this job.\n        ExperimentGrid.job_broken(job.expt_dir, job.id)\n        job.status = 'broken'\n\n    job.end_t    = int(time.time())\n    job.duration = duration\n\n    save_job(job)\n\n\ndef run_matlab_job(job):\n    '''Run it as a Matlab function.'''\n\n    log(\"Running matlab job.\")\n\n    job_file      = job_file_for(job)\n    function_call = \"matlab_wrapper('%s'),quit;\" % (job_file)\n    matlab_cmd    = ('matlab -nosplash -nodesktop -r \"%s\"' %\n                     (function_call))\n    log(matlab_cmd)\n    sh(matlab_cmd)\n\n\n# TODO: change this function to be more flexible when running python jobs\n# regarding the python path, experiment directory, etc...\ndef run_python_job(job):\n    '''Run a Python function.'''\n\n    log(\"Running python job.\\n\")\n\n    # Add experiment directory to the system path.\n    sys.path.append(os.path.realpath(job.expt_dir))\n\n    # Convert the PB object into useful parameters.\n    params = {}\n    for param in job.param:\n        dbl_vals = param.dbl_val._values\n        int_vals = param.int_val._values\n        str_vals = param.str_val._values\n\n        if len(dbl_vals) > 0:\n            params[param.name] = np.array(dbl_vals)\n        elif len(int_vals) > 0:\n            params[param.name] = np.array(int_vals, dtype=int)\n        elif len(str_vals) > 0:\n            params[param.name] = str_vals\n        else:\n            raise Exception(\"Unknown parameter type.\")\n\n    # Load up this module and run\n    module  = __import__(job.name)\n    result = module.main(job.id, params)\n\n    log(\"Got result %f\\n\" % (result))\n\n    # Store the result.\n    job.value = result\n    save_job(job)\n\n\ndef run_torch_job(job):\n    '''Run a torch based job.'''\n\n    params = {}\n    for param in job.param:\n        dbl_vals = param.dbl_val._values\n        int_vals = param.int_val._values\n        str_vals = param.str_val._values\n\n        if len(dbl_vals) > 0:\n            params[param.name] = dbl_vals\n        elif len(int_vals) > 0:\n            params[param.name] = int_vals\n        elif len(str_vals) > 0:\n            params[param.name] = str_vals\n        else:\n            raise Exception(\"Unknown parameter type.\")\n\n    #TODO: this passes args correctly for experiment utils, but we need to\n    # figure out how to get the result back out when the experiment completes.\n\n    param_str = \"\"\n    for pname, pval in params.iteritems():\n        if len(pval) == 1:\n            pval = str(pval[0])\n        else:\n            pval = ','.join([str(v) for v in pval])\n\n        param_str += \"-\" + pname + \" \" + pval + \" \"\n\n    cmd = \"./%s %s\" % (job.name, param_str)\n    log(\"Executing command: %s\\n\" % (cmd))\n    sh(cmd)\n\n\ndef run_shell_job(job):\n    '''Run a shell based job.'''\n\n    log(\"Running shell job.\\n\")\n\n    # Change into the directory.\n    os.chdir(job.expt_dir)\n\n    cmd      = './%s %s' % (job.name, job_file_for(job))\n    log(\"Executing command '%s'\\n\" % (cmd))\n\n    sh(cmd)\n\n\ndef run_mcr_job(job):\n    '''Run a compiled Matlab job.'''\n\n    log(\"Running a compiled Matlab job.\\n\")\n\n    # Change into the directory.\n    os.chdir(job.expt_dir)\n\n    if os.environ.has_key('MATLAB'):\n        mcr_loc = os.environ['MATLAB']\n    else:\n        mcr_loc = MCR_LOCATION\n\n    cmd = './run_%s.sh %s %s' % (job.name, mcr_loc, job_file_for(job))\n    log(\"Executing command '%s'\\n\" % (cmd))\n    sh(cmd)\n\n\n"
  },
  {
    "path": "src/aup/Proposer/spearmint/sobol_lib.py",
    "content": "from __future__ import print_function\nimport math\nfrom numpy import *\ndef i4_bit_hi1 ( n ):\n#*****************************************************************************80\n#\n## I4_BIT_HI1 returns the position of the high 1 bit base 2 in an integer.\n#\n#  Example:\n#\n#       N    Binary     BIT\n#    ----    --------  ----\n#       0           0     0\n#       1           1     1\n#       2          10     2\n#       3          11     2 \n#       4         100     3\n#       5         101     3\n#       6         110     3\n#       7         111     3\n#       8        1000     4\n#       9        1001     4\n#      10        1010     4\n#      11        1011     4\n#      12        1100     4\n#      13        1101     4\n#      14        1110     4\n#      15        1111     4\n#      16       10000     5\n#      17       10001     5\n#    1023  1111111111    10\n#    1024 10000000000    11\n#    1025 10000000001    11\n#\n#  \tLicensing:\n#\n#    \t\tThis code is distributed under the GNU LGPL license.\n#\n#  \tModified:\n#\n#    \t\t26 Nov 2011\n#\n#\tAuthor:\n#\n#\t\tOriginal MATLAB version by John Burkardt.\n#\t\tPYTHON version by Corrado Chisari\n#               Modified by Jasper Snoek to scale to 1111 dimensions\n#\n#  \tParameters:\n#\n#    \t\tInput, integer N, the integer to be measured.\n#    \t\tN should be nonnegative.  If N is nonpositive, the value will always be 0.\n#\n#    \t\tOutput, integer BIT, the number of bits base 2.\n#\n\ti = math.floor ( n )\n\tbit = 0\n\twhile ( 1 ):\n\t\tif ( i <= 0 ):\n\t\t\tbreak\n\t\tbit += 1\n\t\ti = math.floor ( i / 2. )\n\treturn bit\ndef i4_bit_lo0 ( n ):\n#*****************************************************************************80\n#\n## I4_BIT_LO0 returns the position of the low 0 bit base 2 in an integer.\n#\n#  Example:\n#\n#       N    Binary     BIT\n#    ----    --------  ----\n#       0           0     1\n#       1           1     2\n#       2          10     1\n#       3          11     3 \n#       4         100     1\n#       5         101     2\n#       6         110     1\n#       7         111     4\n#       8        1000     1\n#       9        1001     2\n#      10        1010     1\n#      11        1011     3\n#      12        1100     1\n#      13        1101     2\n#      14        1110     1\n#      15        1111     5\n#      16       10000     1\n#      17       10001     2\n#    1023  1111111111     1\n#    1024 10000000000     1\n#    1025 10000000001     1\n#\n#  \tLicensing:\n#\n#    This code is distributed under the GNU LGPL license.\n#\n#  \tModified:\n#\n#    \t\t22 February 2011\n#\n#\tAuthor:\n#\n#\t\tOriginal MATLAB version by John Burkardt.\n#\t\tPYTHON version by Corrado Chisari\n#\n#  Parameters:\n#\n#    \t\tInput, integer N, the integer to be measured.\n#    \t\tN should be nonnegative.\n#\n#    \t\tOutput, integer BIT, the position of the low 1 bit.\n#\n\tbit = 0\n\ti = math.floor ( n )\n\twhile ( 1 ):\n\t\tbit = bit + 1\n\t\ti2 = math.floor ( i / 2. )\n\t\tif ( i == 2 * i2 ):\n\t\t\tbreak\n\n\t\ti = i2\n\treturn bit\n\t\ndef i4_sobol_generate ( m, n, skip ):\n#*****************************************************************************80\n#\n## I4_SOBOL_GENERATE generates a Sobol dataset.\n#\n#\tLicensing:\n#\n#\t\tThis code is distributed under the GNU LGPL license.\n#\n#  \tModified:\n#\n#    \t\t22 February 2011\n#\n#\tAuthor:\n#\n#\t\tOriginal MATLAB version by John Burkardt.\n#\t\tPYTHON version by Corrado Chisari\n#\n#\tParameters:\n#\n#\t\tInput, integer M, the spatial dimension.\n#\n#\t\tInput, integer N, the number of points to generate.\n#\n#\t\tInput, integer SKIP, the number of initial points to skip.\n#\n#\t\tOutput, real R(M,N), the points.\n#\n\tr=zeros((m,n))\n\tfor j in range (1, n+1):\n\t\tseed = skip + j - 2\n\t\t[ r[0:m,j-1], seed ] = i4_sobol ( m, seed )\n\treturn r\ndef i4_sobol ( dim_num, seed ):\n#*****************************************************************************80\n#\n## I4_SOBOL generates a new quasirandom Sobol vector with each call.\n#\n#\tDiscussion:\n#\n#\t\tThe routine adapts the ideas of Antonov and Saleev.\n#\n#\tLicensing:\n#\n#\t\tThis code is distributed under the GNU LGPL license.\n#\n#\tModified:\n#\n#    \t\t26 February 2013\n#\n#\tAuthor:\n#\n#\t\tOriginal FORTRAN77 version by Bennett Fox.\n#\t\tMATLAB version by John Burkardt.\n#\t\tPYTHON version by Corrado Chisari\n#               PYTHON version modified by Jasper Snoek to scale (Joe & Kuo)\n#\n#\tReference:\n#\n#\t\tAntonov, Saleev,\n#\t\tUSSR Computational Mathematics and Mathematical Physics,\n#\t\tVolume 19, 1980, pages 252 - 256.\n#\n#\t\tPaul Bratley, Bennett Fox,\n#\t\tAlgorithm 659:\n#\t\tImplementing Sobol's Quasirandom Sequence Generator,\n#\t\tACM Transactions on Mathematical Software,\n#\t\tVolume 14, Number 1, pages 88-100, 1988.\n#\n#\t\tBennett Fox,\n#\t\tAlgorithm 647:\n#\t\tImplementation and Relative Efficiency of Quasirandom \n#\t\tSequence Generators,\n#\t\tACM Transactions on Mathematical Software,\n#\t\tVolume 12, Number 4, pages 362-376, 1986.\n#\n#\t\tIlya Sobol,\n#\t\tUSSR Computational Mathematics and Mathematical Physics,\n#\t\tVolume 16, pages 236-242, 1977.\n#\n#\t\tIlya Sobol, Levitan, \n#\t\tThe Production of Points Uniformly Distributed in a Multidimensional \n#\t\tCube (in Russian),\n#\t\tPreprint IPM Akad. Nauk SSSR, \n#\t\tNumber 40, Moscow 1976.\n#\n#               Stephen Joe, Frances Kuo,\n#               Remark on Algorithm 659: Implementing Sobol's Quasirandom Sequence Generator,\n#               ACM Transactions on Mathematical Software,\n#               Volume 29, Number 1, March 2003, pages 49-57.\n#\n#\tParameters:\n#\n#\t\tInput, integer DIM_NUM, the number of spatial dimensions.\n#\t\tDIM_NUM must satisfy 1 <= DIM_NUM <= 1111.\n#\n#\t\tInput/output, integer SEED, the \"seed\" for the sequence.\n#\t\tThis is essentially the index in the sequence of the quasirandom\n#\t\tvalue to be generated.\tOn output, SEED has been set to the\n#\t\tappropriate next value, usually simply SEED+1.\n#\t\tIf SEED is less than 0 on input, it is treated as though it were 0.\n#\t\tAn input value of 0 requests the first (0-th) element of the sequence.\n#\n#\t\tOutput, real QUASI(DIM_NUM), the next quasirandom vector.\n#\n\tglobal atmost\n\tglobal dim_max\n\tglobal dim_num_save\n\tglobal initialized\n\tglobal lastq\n\tglobal log_max\n\tglobal maxcol\n\tglobal poly\n\tglobal recipd\n\tglobal seed_save\n\tglobal v\n\n\tif ( not 'initialized' in globals().keys() ):\n\t\tinitialized = 0\n\t\tdim_num_save = -1\n\n\tif ( not initialized or dim_num != dim_num_save ):\n\t\tinitialized = 1\n\t\tdim_max = 1111\n\t\tdim_num_save = -1\n\t\tlog_max = 30\n\t\tseed_save = -1\n#\n#\tInitialize (part of) V.\n#\n\t\tv = zeros((dim_max,log_max))\n\t\tv[0,0] = 1\n\t\tv[1,0] = 1\n\t\tv[2,0] = 1\n\t\tv[3,0] = 1\n\t\tv[4,0] = 1\n\t\tv[5,0] = 1\n\t\tv[6,0] = 1\n\t\tv[7,0] = 1\n\t\tv[8,0] = 1\n\t\tv[9,0] = 1\n\t\tv[10,0] = 1\n\t\tv[11,0] = 1\n\t\tv[12,0] = 1\n\t\tv[13,0] = 1\n\t\tv[14,0] = 1\n\t\tv[15,0] = 1\n\t\tv[16,0] = 1\n\t\tv[17,0] = 1\n\t\tv[18,0] = 1\n\t\tv[19,0] = 1\n\t\tv[20,0] = 1\n\t\tv[21,0] = 1\n\t\tv[22,0] = 1\n\t\tv[23,0] = 1\n\t\tv[24,0] = 1\n\t\tv[25,0] = 1\n\t\tv[26,0] = 1\n\t\tv[27,0] = 1\n\t\tv[28,0] = 1\n\t\tv[29,0] = 1\n\t\tv[30,0] = 1\n\t\tv[31,0] = 1\n\t\tv[32,0] = 1\n\t\tv[33,0] = 1\n\t\tv[34,0] = 1\n\t\tv[35,0] = 1\n\t\tv[36,0] = 1\n\t\tv[37,0] = 1\n\t\tv[38,0] = 1\n\t\tv[39,0] = 1\n\t\tv[40,0] = 1\n\t\tv[41,0] = 1\n\t\tv[42,0] = 1\n\t\tv[43,0] = 1\n\t\tv[44,0] = 1\n\t\tv[45,0] = 1\n\t\tv[46,0] = 1\n\t\tv[47,0] = 1\n\t\tv[48,0] = 1\n\t\tv[49,0] = 1\n\t\tv[50,0] = 1\n\t\tv[51,0] = 1\n\t\tv[52,0] = 1\n\t\tv[53,0] = 1\n\t\tv[54,0] = 1\n\t\tv[55,0] = 1\n\t\tv[56,0] = 1\n\t\tv[57,0] = 1\n\t\tv[58,0] = 1\n\t\tv[59,0] = 1\n\t\tv[60,0] = 1\n\t\tv[61,0] = 1\n\t\tv[62,0] = 1\n\t\tv[63,0] = 1\n\t\tv[64,0] = 1\n\t\tv[65,0] = 1\n\t\tv[66,0] = 1\n\t\tv[67,0] = 1\n\t\tv[68,0] = 1\n\t\tv[69,0] = 1\n\t\tv[70,0] = 1\n\t\tv[71,0] = 1\n\t\tv[72,0] = 1\n\t\tv[73,0] = 1\n\t\tv[74,0] = 1\n\t\tv[75,0] = 1\n\t\tv[76,0] = 1\n\t\tv[77,0] = 1\n\t\tv[78,0] = 1\n\t\tv[79,0] = 1\n\t\tv[80,0] = 1\n\t\tv[81,0] = 1\n\t\tv[82,0] = 1\n\t\tv[83,0] = 1\n\t\tv[84,0] = 1\n\t\tv[85,0] = 1\n\t\tv[86,0] = 1\n\t\tv[87,0] = 1\n\t\tv[88,0] = 1\n\t\tv[89,0] = 1\n\t\tv[90,0] = 1\n\t\tv[91,0] = 1\n\t\tv[92,0] = 1\n\t\tv[93,0] = 1\n\t\tv[94,0] = 1\n\t\tv[95,0] = 1\n\t\tv[96,0] = 1\n\t\tv[97,0] = 1\n\t\tv[98,0] = 1\n\t\tv[99,0] = 1\n\t\tv[100,0] = 1\n\t\tv[101,0] = 1\n\t\tv[102,0] = 1\n\t\tv[103,0] = 1\n\t\tv[104,0] = 1\n\t\tv[105,0] = 1\n\t\tv[106,0] = 1\n\t\tv[107,0] = 1\n\t\tv[108,0] = 1\n\t\tv[109,0] = 1\n\t\tv[110,0] = 1\n\t\tv[111,0] = 1\n\t\tv[112,0] = 1\n\t\tv[113,0] = 1\n\t\tv[114,0] = 1\n\t\tv[115,0] = 1\n\t\tv[116,0] = 1\n\t\tv[117,0] = 1\n\t\tv[118,0] = 1\n\t\tv[119,0] = 1\n\t\tv[120,0] = 1\n\t\tv[121,0] = 1\n\t\tv[122,0] = 1\n\t\tv[123,0] = 1\n\t\tv[124,0] = 1\n\t\tv[125,0] = 1\n\t\tv[126,0] = 1\n\t\tv[127,0] = 1\n\t\tv[128,0] = 1\n\t\tv[129,0] = 1\n\t\tv[130,0] = 1\n\t\tv[131,0] = 1\n\t\tv[132,0] = 1\n\t\tv[133,0] = 1\n\t\tv[134,0] = 1\n\t\tv[135,0] = 1\n\t\tv[136,0] = 1\n\t\tv[137,0] = 1\n\t\tv[138,0] = 1\n\t\tv[139,0] = 1\n\t\tv[140,0] = 1\n\t\tv[141,0] = 1\n\t\tv[142,0] = 1\n\t\tv[143,0] = 1\n\t\tv[144,0] = 1\n\t\tv[145,0] = 1\n\t\tv[146,0] = 1\n\t\tv[147,0] = 1\n\t\tv[148,0] = 1\n\t\tv[149,0] = 1\n\t\tv[150,0] = 1\n\t\tv[151,0] = 1\n\t\tv[152,0] = 1\n\t\tv[153,0] = 1\n\t\tv[154,0] = 1\n\t\tv[155,0] = 1\n\t\tv[156,0] = 1\n\t\tv[157,0] = 1\n\t\tv[158,0] = 1\n\t\tv[159,0] = 1\n\t\tv[160,0] = 1\n\t\tv[161,0] = 1\n\t\tv[162,0] = 1\n\t\tv[163,0] = 1\n\t\tv[164,0] = 1\n\t\tv[165,0] = 1\n\t\tv[166,0] = 1\n\t\tv[167,0] = 1\n\t\tv[168,0] = 1\n\t\tv[169,0] = 1\n\t\tv[170,0] = 1\n\t\tv[171,0] = 1\n\t\tv[172,0] = 1\n\t\tv[173,0] = 1\n\t\tv[174,0] = 1\n\t\tv[175,0] = 1\n\t\tv[176,0] = 1\n\t\tv[177,0] = 1\n\t\tv[178,0] = 1\n\t\tv[179,0] = 1\n\t\tv[180,0] = 1\n\t\tv[181,0] = 1\n\t\tv[182,0] = 1\n\t\tv[183,0] = 1\n\t\tv[184,0] = 1\n\t\tv[185,0] = 1\n\t\tv[186,0] = 1\n\t\tv[187,0] = 1\n\t\tv[188,0] = 1\n\t\tv[189,0] = 1\n\t\tv[190,0] = 1\n\t\tv[191,0] = 1\n\t\tv[192,0] = 1\n\t\tv[193,0] = 1\n\t\tv[194,0] = 1\n\t\tv[195,0] = 1\n\t\tv[196,0] = 1\n\t\tv[197,0] = 1\n\t\tv[198,0] = 1\n\t\tv[199,0] = 1\n\t\tv[200,0] = 1\n\t\tv[201,0] = 1\n\t\tv[202,0] = 1\n\t\tv[203,0] = 1\n\t\tv[204,0] = 1\n\t\tv[205,0] = 1\n\t\tv[206,0] = 1\n\t\tv[207,0] = 1\n\t\tv[208,0] = 1\n\t\tv[209,0] = 1\n\t\tv[210,0] = 1\n\t\tv[211,0] = 1\n\t\tv[212,0] = 1\n\t\tv[213,0] = 1\n\t\tv[214,0] = 1\n\t\tv[215,0] = 1\n\t\tv[216,0] = 1\n\t\tv[217,0] = 1\n\t\tv[218,0] = 1\n\t\tv[219,0] = 1\n\t\tv[220,0] = 1\n\t\tv[221,0] = 1\n\t\tv[222,0] = 1\n\t\tv[223,0] = 1\n\t\tv[224,0] = 1\n\t\tv[225,0] = 1\n\t\tv[226,0] = 1\n\t\tv[227,0] = 1\n\t\tv[228,0] = 1\n\t\tv[229,0] = 1\n\t\tv[230,0] = 1\n\t\tv[231,0] = 1\n\t\tv[232,0] = 1\n\t\tv[233,0] = 1\n\t\tv[234,0] = 1\n\t\tv[235,0] = 1\n\t\tv[236,0] = 1\n\t\tv[237,0] = 1\n\t\tv[238,0] = 1\n\t\tv[239,0] = 1\n\t\tv[240,0] = 1\n\t\tv[241,0] = 1\n\t\tv[242,0] = 1\n\t\tv[243,0] = 1\n\t\tv[244,0] = 1\n\t\tv[245,0] = 1\n\t\tv[246,0] = 1\n\t\tv[247,0] = 1\n\t\tv[248,0] = 1\n\t\tv[249,0] = 1\n\t\tv[250,0] = 1\n\t\tv[251,0] = 1\n\t\tv[252,0] = 1\n\t\tv[253,0] = 1\n\t\tv[254,0] = 1\n\t\tv[255,0] = 1\n\t\tv[256,0] = 1\n\t\tv[257,0] = 1\n\t\tv[258,0] = 1\n\t\tv[259,0] = 1\n\t\tv[260,0] = 1\n\t\tv[261,0] = 1\n\t\tv[262,0] = 1\n\t\tv[263,0] = 1\n\t\tv[264,0] = 1\n\t\tv[265,0] = 1\n\t\tv[266,0] = 1\n\t\tv[267,0] = 1\n\t\tv[268,0] = 1\n\t\tv[269,0] = 1\n\t\tv[270,0] = 1\n\t\tv[271,0] = 1\n\t\tv[272,0] = 1\n\t\tv[273,0] = 1\n\t\tv[274,0] = 1\n\t\tv[275,0] = 1\n\t\tv[276,0] = 1\n\t\tv[277,0] = 1\n\t\tv[278,0] = 1\n\t\tv[279,0] = 1\n\t\tv[280,0] = 1\n\t\tv[281,0] = 1\n\t\tv[282,0] = 1\n\t\tv[283,0] = 1\n\t\tv[284,0] = 1\n\t\tv[285,0] = 1\n\t\tv[286,0] = 1\n\t\tv[287,0] = 1\n\t\tv[288,0] = 1\n\t\tv[289,0] = 1\n\t\tv[290,0] = 1\n\t\tv[291,0] = 1\n\t\tv[292,0] = 1\n\t\tv[293,0] = 1\n\t\tv[294,0] = 1\n\t\tv[295,0] = 1\n\t\tv[296,0] = 1\n\t\tv[297,0] = 1\n\t\tv[298,0] = 1\n\t\tv[299,0] = 1\n\t\tv[300,0] = 1\n\t\tv[301,0] = 1\n\t\tv[302,0] = 1\n\t\tv[303,0] = 1\n\t\tv[304,0] = 1\n\t\tv[305,0] = 1\n\t\tv[306,0] = 1\n\t\tv[307,0] = 1\n\t\tv[308,0] = 1\n\t\tv[309,0] = 1\n\t\tv[310,0] = 1\n\t\tv[311,0] = 1\n\t\tv[312,0] = 1\n\t\tv[313,0] = 1\n\t\tv[314,0] = 1\n\t\tv[315,0] = 1\n\t\tv[316,0] = 1\n\t\tv[317,0] = 1\n\t\tv[318,0] = 1\n\t\tv[319,0] = 1\n\t\tv[320,0] = 1\n\t\tv[321,0] = 1\n\t\tv[322,0] = 1\n\t\tv[323,0] = 1\n\t\tv[324,0] = 1\n\t\tv[325,0] = 1\n\t\tv[326,0] = 1\n\t\tv[327,0] = 1\n\t\tv[328,0] = 1\n\t\tv[329,0] = 1\n\t\tv[330,0] = 1\n\t\tv[331,0] = 1\n\t\tv[332,0] = 1\n\t\tv[333,0] = 1\n\t\tv[334,0] = 1\n\t\tv[335,0] = 1\n\t\tv[336,0] = 1\n\t\tv[337,0] = 1\n\t\tv[338,0] = 1\n\t\tv[339,0] = 1\n\t\tv[340,0] = 1\n\t\tv[341,0] = 1\n\t\tv[342,0] = 1\n\t\tv[343,0] = 1\n\t\tv[344,0] = 1\n\t\tv[345,0] = 1\n\t\tv[346,0] = 1\n\t\tv[347,0] = 1\n\t\tv[348,0] = 1\n\t\tv[349,0] = 1\n\t\tv[350,0] = 1\n\t\tv[351,0] = 1\n\t\tv[352,0] = 1\n\t\tv[353,0] = 1\n\t\tv[354,0] = 1\n\t\tv[355,0] = 1\n\t\tv[356,0] = 1\n\t\tv[357,0] = 1\n\t\tv[358,0] = 1\n\t\tv[359,0] = 1\n\t\tv[360,0] = 1\n\t\tv[361,0] = 1\n\t\tv[362,0] = 1\n\t\tv[363,0] = 1\n\t\tv[364,0] = 1\n\t\tv[365,0] = 1\n\t\tv[366,0] = 1\n\t\tv[367,0] = 1\n\t\tv[368,0] = 1\n\t\tv[369,0] = 1\n\t\tv[370,0] = 1\n\t\tv[371,0] = 1\n\t\tv[372,0] = 1\n\t\tv[373,0] = 1\n\t\tv[374,0] = 1\n\t\tv[375,0] = 1\n\t\tv[376,0] = 1\n\t\tv[377,0] = 1\n\t\tv[378,0] = 1\n\t\tv[379,0] = 1\n\t\tv[380,0] = 1\n\t\tv[381,0] = 1\n\t\tv[382,0] = 1\n\t\tv[383,0] = 1\n\t\tv[384,0] = 1\n\t\tv[385,0] = 1\n\t\tv[386,0] = 1\n\t\tv[387,0] = 1\n\t\tv[388,0] = 1\n\t\tv[389,0] = 1\n\t\tv[390,0] = 1\n\t\tv[391,0] = 1\n\t\tv[392,0] = 1\n\t\tv[393,0] = 1\n\t\tv[394,0] = 1\n\t\tv[395,0] = 1\n\t\tv[396,0] = 1\n\t\tv[397,0] = 1\n\t\tv[398,0] = 1\n\t\tv[399,0] = 1\n\t\tv[400,0] = 1\n\t\tv[401,0] = 1\n\t\tv[402,0] = 1\n\t\tv[403,0] = 1\n\t\tv[404,0] = 1\n\t\tv[405,0] = 1\n\t\tv[406,0] = 1\n\t\tv[407,0] = 1\n\t\tv[408,0] = 1\n\t\tv[409,0] = 1\n\t\tv[410,0] = 1\n\t\tv[411,0] = 1\n\t\tv[412,0] = 1\n\t\tv[413,0] = 1\n\t\tv[414,0] = 1\n\t\tv[415,0] = 1\n\t\tv[416,0] = 1\n\t\tv[417,0] = 1\n\t\tv[418,0] = 1\n\t\tv[419,0] = 1\n\t\tv[420,0] = 1\n\t\tv[421,0] = 1\n\t\tv[422,0] = 1\n\t\tv[423,0] = 1\n\t\tv[424,0] = 1\n\t\tv[425,0] = 1\n\t\tv[426,0] = 1\n\t\tv[427,0] = 1\n\t\tv[428,0] = 1\n\t\tv[429,0] = 1\n\t\tv[430,0] = 1\n\t\tv[431,0] = 1\n\t\tv[432,0] = 1\n\t\tv[433,0] = 1\n\t\tv[434,0] = 1\n\t\tv[435,0] = 1\n\t\tv[436,0] = 1\n\t\tv[437,0] = 1\n\t\tv[438,0] = 1\n\t\tv[439,0] = 1\n\t\tv[440,0] = 1\n\t\tv[441,0] = 1\n\t\tv[442,0] = 1\n\t\tv[443,0] = 1\n\t\tv[444,0] = 1\n\t\tv[445,0] = 1\n\t\tv[446,0] = 1\n\t\tv[447,0] = 1\n\t\tv[448,0] = 1\n\t\tv[449,0] = 1\n\t\tv[450,0] = 1\n\t\tv[451,0] = 1\n\t\tv[452,0] = 1\n\t\tv[453,0] = 1\n\t\tv[454,0] = 1\n\t\tv[455,0] = 1\n\t\tv[456,0] = 1\n\t\tv[457,0] = 1\n\t\tv[458,0] = 1\n\t\tv[459,0] = 1\n\t\tv[460,0] = 1\n\t\tv[461,0] = 1\n\t\tv[462,0] = 1\n\t\tv[463,0] = 1\n\t\tv[464,0] = 1\n\t\tv[465,0] = 1\n\t\tv[466,0] = 1\n\t\tv[467,0] = 1\n\t\tv[468,0] = 1\n\t\tv[469,0] = 1\n\t\tv[470,0] = 1\n\t\tv[471,0] = 1\n\t\tv[472,0] = 1\n\t\tv[473,0] = 1\n\t\tv[474,0] = 1\n\t\tv[475,0] = 1\n\t\tv[476,0] = 1\n\t\tv[477,0] = 1\n\t\tv[478,0] = 1\n\t\tv[479,0] = 1\n\t\tv[480,0] = 1\n\t\tv[481,0] = 1\n\t\tv[482,0] = 1\n\t\tv[483,0] = 1\n\t\tv[484,0] = 1\n\t\tv[485,0] = 1\n\t\tv[486,0] = 1\n\t\tv[487,0] = 1\n\t\tv[488,0] = 1\n\t\tv[489,0] = 1\n\t\tv[490,0] = 1\n\t\tv[491,0] = 1\n\t\tv[492,0] = 1\n\t\tv[493,0] = 1\n\t\tv[494,0] = 1\n\t\tv[495,0] = 1\n\t\tv[496,0] = 1\n\t\tv[497,0] = 1\n\t\tv[498,0] = 1\n\t\tv[499,0] = 1\n\t\tv[500,0] = 1\n\t\tv[501,0] = 1\n\t\tv[502,0] = 1\n\t\tv[503,0] = 1\n\t\tv[504,0] = 1\n\t\tv[505,0] = 1\n\t\tv[506,0] = 1\n\t\tv[507,0] = 1\n\t\tv[508,0] = 1\n\t\tv[509,0] = 1\n\t\tv[510,0] = 1\n\t\tv[511,0] = 1\n\t\tv[512,0] = 1\n\t\tv[513,0] = 1\n\t\tv[514,0] = 1\n\t\tv[515,0] = 1\n\t\tv[516,0] = 1\n\t\tv[517,0] = 1\n\t\tv[518,0] = 1\n\t\tv[519,0] = 1\n\t\tv[520,0] = 1\n\t\tv[521,0] = 1\n\t\tv[522,0] = 1\n\t\tv[523,0] = 1\n\t\tv[524,0] = 1\n\t\tv[525,0] = 1\n\t\tv[526,0] = 1\n\t\tv[527,0] = 1\n\t\tv[528,0] = 1\n\t\tv[529,0] = 1\n\t\tv[530,0] = 1\n\t\tv[531,0] = 1\n\t\tv[532,0] = 1\n\t\tv[533,0] = 1\n\t\tv[534,0] = 1\n\t\tv[535,0] = 1\n\t\tv[536,0] = 1\n\t\tv[537,0] = 1\n\t\tv[538,0] = 1\n\t\tv[539,0] = 1\n\t\tv[540,0] = 1\n\t\tv[541,0] = 1\n\t\tv[542,0] = 1\n\t\tv[543,0] = 1\n\t\tv[544,0] = 1\n\t\tv[545,0] = 1\n\t\tv[546,0] = 1\n\t\tv[547,0] = 1\n\t\tv[548,0] = 1\n\t\tv[549,0] = 1\n\t\tv[550,0] = 1\n\t\tv[551,0] = 1\n\t\tv[552,0] = 1\n\t\tv[553,0] = 1\n\t\tv[554,0] = 1\n\t\tv[555,0] = 1\n\t\tv[556,0] = 1\n\t\tv[557,0] = 1\n\t\tv[558,0] = 1\n\t\tv[559,0] = 1\n\t\tv[560,0] = 1\n\t\tv[561,0] = 1\n\t\tv[562,0] = 1\n\t\tv[563,0] = 1\n\t\tv[564,0] = 1\n\t\tv[565,0] = 1\n\t\tv[566,0] = 1\n\t\tv[567,0] = 1\n\t\tv[568,0] = 1\n\t\tv[569,0] = 1\n\t\tv[570,0] = 1\n\t\tv[571,0] = 1\n\t\tv[572,0] = 1\n\t\tv[573,0] = 1\n\t\tv[574,0] = 1\n\t\tv[575,0] = 1\n\t\tv[576,0] = 1\n\t\tv[577,0] = 1\n\t\tv[578,0] = 1\n\t\tv[579,0] = 1\n\t\tv[580,0] = 1\n\t\tv[581,0] = 1\n\t\tv[582,0] = 1\n\t\tv[583,0] = 1\n\t\tv[584,0] = 1\n\t\tv[585,0] = 1\n\t\tv[586,0] = 1\n\t\tv[587,0] = 1\n\t\tv[588,0] = 1\n\t\tv[589,0] = 1\n\t\tv[590,0] = 1\n\t\tv[591,0] = 1\n\t\tv[592,0] = 1\n\t\tv[593,0] = 1\n\t\tv[594,0] = 1\n\t\tv[595,0] = 1\n\t\tv[596,0] = 1\n\t\tv[597,0] = 1\n\t\tv[598,0] = 1\n\t\tv[599,0] = 1\n\t\tv[600,0] = 1\n\t\tv[601,0] = 1\n\t\tv[602,0] = 1\n\t\tv[603,0] = 1\n\t\tv[604,0] = 1\n\t\tv[605,0] = 1\n\t\tv[606,0] = 1\n\t\tv[607,0] = 1\n\t\tv[608,0] = 1\n\t\tv[609,0] = 1\n\t\tv[610,0] = 1\n\t\tv[611,0] = 1\n\t\tv[612,0] = 1\n\t\tv[613,0] = 1\n\t\tv[614,0] = 1\n\t\tv[615,0] = 1\n\t\tv[616,0] = 1\n\t\tv[617,0] = 1\n\t\tv[618,0] = 1\n\t\tv[619,0] = 1\n\t\tv[620,0] = 1\n\t\tv[621,0] = 1\n\t\tv[622,0] = 1\n\t\tv[623,0] = 1\n\t\tv[624,0] = 1\n\t\tv[625,0] = 1\n\t\tv[626,0] = 1\n\t\tv[627,0] = 1\n\t\tv[628,0] = 1\n\t\tv[629,0] = 1\n\t\tv[630,0] = 1\n\t\tv[631,0] = 1\n\t\tv[632,0] = 1\n\t\tv[633,0] = 1\n\t\tv[634,0] = 1\n\t\tv[635,0] = 1\n\t\tv[636,0] = 1\n\t\tv[637,0] = 1\n\t\tv[638,0] = 1\n\t\tv[639,0] = 1\n\t\tv[640,0] = 1\n\t\tv[641,0] = 1\n\t\tv[642,0] = 1\n\t\tv[643,0] = 1\n\t\tv[644,0] = 1\n\t\tv[645,0] = 1\n\t\tv[646,0] = 1\n\t\tv[647,0] = 1\n\t\tv[648,0] = 1\n\t\tv[649,0] = 1\n\t\tv[650,0] = 1\n\t\tv[651,0] = 1\n\t\tv[652,0] = 1\n\t\tv[653,0] = 1\n\t\tv[654,0] = 1\n\t\tv[655,0] = 1\n\t\tv[656,0] = 1\n\t\tv[657,0] = 1\n\t\tv[658,0] = 1\n\t\tv[659,0] = 1\n\t\tv[660,0] = 1\n\t\tv[661,0] = 1\n\t\tv[662,0] = 1\n\t\tv[663,0] = 1\n\t\tv[664,0] = 1\n\t\tv[665,0] = 1\n\t\tv[666,0] = 1\n\t\tv[667,0] = 1\n\t\tv[668,0] = 1\n\t\tv[669,0] = 1\n\t\tv[670,0] = 1\n\t\tv[671,0] = 1\n\t\tv[672,0] = 1\n\t\tv[673,0] = 1\n\t\tv[674,0] = 1\n\t\tv[675,0] = 1\n\t\tv[676,0] = 1\n\t\tv[677,0] = 1\n\t\tv[678,0] = 1\n\t\tv[679,0] = 1\n\t\tv[680,0] = 1\n\t\tv[681,0] = 1\n\t\tv[682,0] = 1\n\t\tv[683,0] = 1\n\t\tv[684,0] = 1\n\t\tv[685,0] = 1\n\t\tv[686,0] = 1\n\t\tv[687,0] = 1\n\t\tv[688,0] = 1\n\t\tv[689,0] = 1\n\t\tv[690,0] = 1\n\t\tv[691,0] = 1\n\t\tv[692,0] = 1\n\t\tv[693,0] = 1\n\t\tv[694,0] = 1\n\t\tv[695,0] = 1\n\t\tv[696,0] = 1\n\t\tv[697,0] = 1\n\t\tv[698,0] = 1\n\t\tv[699,0] = 1\n\t\tv[700,0] = 1\n\t\tv[701,0] = 1\n\t\tv[702,0] = 1\n\t\tv[703,0] = 1\n\t\tv[704,0] = 1\n\t\tv[705,0] = 1\n\t\tv[706,0] = 1\n\t\tv[707,0] = 1\n\t\tv[708,0] = 1\n\t\tv[709,0] = 1\n\t\tv[710,0] = 1\n\t\tv[711,0] = 1\n\t\tv[712,0] = 1\n\t\tv[713,0] = 1\n\t\tv[714,0] = 1\n\t\tv[715,0] = 1\n\t\tv[716,0] = 1\n\t\tv[717,0] = 1\n\t\tv[718,0] = 1\n\t\tv[719,0] = 1\n\t\tv[720,0] = 1\n\t\tv[721,0] = 1\n\t\tv[722,0] = 1\n\t\tv[723,0] = 1\n\t\tv[724,0] = 1\n\t\tv[725,0] = 1\n\t\tv[726,0] = 1\n\t\tv[727,0] = 1\n\t\tv[728,0] = 1\n\t\tv[729,0] = 1\n\t\tv[730,0] = 1\n\t\tv[731,0] = 1\n\t\tv[732,0] = 1\n\t\tv[733,0] = 1\n\t\tv[734,0] = 1\n\t\tv[735,0] = 1\n\t\tv[736,0] = 1\n\t\tv[737,0] = 1\n\t\tv[738,0] = 1\n\t\tv[739,0] = 1\n\t\tv[740,0] = 1\n\t\tv[741,0] = 1\n\t\tv[742,0] = 1\n\t\tv[743,0] = 1\n\t\tv[744,0] = 1\n\t\tv[745,0] = 1\n\t\tv[746,0] = 1\n\t\tv[747,0] = 1\n\t\tv[748,0] = 1\n\t\tv[749,0] = 1\n\t\tv[750,0] = 1\n\t\tv[751,0] = 1\n\t\tv[752,0] = 1\n\t\tv[753,0] = 1\n\t\tv[754,0] = 1\n\t\tv[755,0] = 1\n\t\tv[756,0] = 1\n\t\tv[757,0] = 1\n\t\tv[758,0] = 1\n\t\tv[759,0] = 1\n\t\tv[760,0] = 1\n\t\tv[761,0] = 1\n\t\tv[762,0] = 1\n\t\tv[763,0] = 1\n\t\tv[764,0] = 1\n\t\tv[765,0] = 1\n\t\tv[766,0] = 1\n\t\tv[767,0] = 1\n\t\tv[768,0] = 1\n\t\tv[769,0] = 1\n\t\tv[770,0] = 1\n\t\tv[771,0] = 1\n\t\tv[772,0] = 1\n\t\tv[773,0] = 1\n\t\tv[774,0] = 1\n\t\tv[775,0] = 1\n\t\tv[776,0] = 1\n\t\tv[777,0] = 1\n\t\tv[778,0] = 1\n\t\tv[779,0] = 1\n\t\tv[780,0] = 1\n\t\tv[781,0] = 1\n\t\tv[782,0] = 1\n\t\tv[783,0] = 1\n\t\tv[784,0] = 1\n\t\tv[785,0] = 1\n\t\tv[786,0] = 1\n\t\tv[787,0] = 1\n\t\tv[788,0] = 1\n\t\tv[789,0] = 1\n\t\tv[790,0] = 1\n\t\tv[791,0] = 1\n\t\tv[792,0] = 1\n\t\tv[793,0] = 1\n\t\tv[794,0] = 1\n\t\tv[795,0] = 1\n\t\tv[796,0] = 1\n\t\tv[797,0] = 1\n\t\tv[798,0] = 1\n\t\tv[799,0] = 1\n\t\tv[800,0] = 1\n\t\tv[801,0] = 1\n\t\tv[802,0] = 1\n\t\tv[803,0] = 1\n\t\tv[804,0] = 1\n\t\tv[805,0] = 1\n\t\tv[806,0] = 1\n\t\tv[807,0] = 1\n\t\tv[808,0] = 1\n\t\tv[809,0] = 1\n\t\tv[810,0] = 1\n\t\tv[811,0] = 1\n\t\tv[812,0] = 1\n\t\tv[813,0] = 1\n\t\tv[814,0] = 1\n\t\tv[815,0] = 1\n\t\tv[816,0] = 1\n\t\tv[817,0] = 1\n\t\tv[818,0] = 1\n\t\tv[819,0] = 1\n\t\tv[820,0] = 1\n\t\tv[821,0] = 1\n\t\tv[822,0] = 1\n\t\tv[823,0] = 1\n\t\tv[824,0] = 1\n\t\tv[825,0] = 1\n\t\tv[826,0] = 1\n\t\tv[827,0] = 1\n\t\tv[828,0] = 1\n\t\tv[829,0] = 1\n\t\tv[830,0] = 1\n\t\tv[831,0] = 1\n\t\tv[832,0] = 1\n\t\tv[833,0] = 1\n\t\tv[834,0] = 1\n\t\tv[835,0] = 1\n\t\tv[836,0] = 1\n\t\tv[837,0] = 1\n\t\tv[838,0] = 1\n\t\tv[839,0] = 1\n\t\tv[840,0] = 1\n\t\tv[841,0] = 1\n\t\tv[842,0] = 1\n\t\tv[843,0] = 1\n\t\tv[844,0] = 1\n\t\tv[845,0] = 1\n\t\tv[846,0] = 1\n\t\tv[847,0] = 1\n\t\tv[848,0] = 1\n\t\tv[849,0] = 1\n\t\tv[850,0] = 1\n\t\tv[851,0] = 1\n\t\tv[852,0] = 1\n\t\tv[853,0] = 1\n\t\tv[854,0] = 1\n\t\tv[855,0] = 1\n\t\tv[856,0] = 1\n\t\tv[857,0] = 1\n\t\tv[858,0] = 1\n\t\tv[859,0] = 1\n\t\tv[860,0] = 1\n\t\tv[861,0] = 1\n\t\tv[862,0] = 1\n\t\tv[863,0] = 1\n\t\tv[864,0] = 1\n\t\tv[865,0] = 1\n\t\tv[866,0] = 1\n\t\tv[867,0] = 1\n\t\tv[868,0] = 1\n\t\tv[869,0] = 1\n\t\tv[870,0] = 1\n\t\tv[871,0] = 1\n\t\tv[872,0] = 1\n\t\tv[873,0] = 1\n\t\tv[874,0] = 1\n\t\tv[875,0] = 1\n\t\tv[876,0] = 1\n\t\tv[877,0] = 1\n\t\tv[878,0] = 1\n\t\tv[879,0] = 1\n\t\tv[880,0] = 1\n\t\tv[881,0] = 1\n\t\tv[882,0] = 1\n\t\tv[883,0] = 1\n\t\tv[884,0] = 1\n\t\tv[885,0] = 1\n\t\tv[886,0] = 1\n\t\tv[887,0] = 1\n\t\tv[888,0] = 1\n\t\tv[889,0] = 1\n\t\tv[890,0] = 1\n\t\tv[891,0] = 1\n\t\tv[892,0] = 1\n\t\tv[893,0] = 1\n\t\tv[894,0] = 1\n\t\tv[895,0] = 1\n\t\tv[896,0] = 1\n\t\tv[897,0] = 1\n\t\tv[898,0] = 1\n\t\tv[899,0] = 1\n\t\tv[900,0] = 1\n\t\tv[901,0] = 1\n\t\tv[902,0] = 1\n\t\tv[903,0] = 1\n\t\tv[904,0] = 1\n\t\tv[905,0] = 1\n\t\tv[906,0] = 1\n\t\tv[907,0] = 1\n\t\tv[908,0] = 1\n\t\tv[909,0] = 1\n\t\tv[910,0] = 1\n\t\tv[911,0] = 1\n\t\tv[912,0] = 1\n\t\tv[913,0] = 1\n\t\tv[914,0] = 1\n\t\tv[915,0] = 1\n\t\tv[916,0] = 1\n\t\tv[917,0] = 1\n\t\tv[918,0] = 1\n\t\tv[919,0] = 1\n\t\tv[920,0] = 1\n\t\tv[921,0] = 1\n\t\tv[922,0] = 1\n\t\tv[923,0] = 1\n\t\tv[924,0] = 1\n\t\tv[925,0] = 1\n\t\tv[926,0] = 1\n\t\tv[927,0] = 1\n\t\tv[928,0] = 1\n\t\tv[929,0] = 1\n\t\tv[930,0] = 1\n\t\tv[931,0] = 1\n\t\tv[932,0] = 1\n\t\tv[933,0] = 1\n\t\tv[934,0] = 1\n\t\tv[935,0] = 1\n\t\tv[936,0] = 1\n\t\tv[937,0] = 1\n\t\tv[938,0] = 1\n\t\tv[939,0] = 1\n\t\tv[940,0] = 1\n\t\tv[941,0] = 1\n\t\tv[942,0] = 1\n\t\tv[943,0] = 1\n\t\tv[944,0] = 1\n\t\tv[945,0] = 1\n\t\tv[946,0] = 1\n\t\tv[947,0] = 1\n\t\tv[948,0] = 1\n\t\tv[949,0] = 1\n\t\tv[950,0] = 1\n\t\tv[951,0] = 1\n\t\tv[952,0] = 1\n\t\tv[953,0] = 1\n\t\tv[954,0] = 1\n\t\tv[955,0] = 1\n\t\tv[956,0] = 1\n\t\tv[957,0] = 1\n\t\tv[958,0] = 1\n\t\tv[959,0] = 1\n\t\tv[960,0] = 1\n\t\tv[961,0] = 1\n\t\tv[962,0] = 1\n\t\tv[963,0] = 1\n\t\tv[964,0] = 1\n\t\tv[965,0] = 1\n\t\tv[966,0] = 1\n\t\tv[967,0] = 1\n\t\tv[968,0] = 1\n\t\tv[969,0] = 1\n\t\tv[970,0] = 1\n\t\tv[971,0] = 1\n\t\tv[972,0] = 1\n\t\tv[973,0] = 1\n\t\tv[974,0] = 1\n\t\tv[975,0] = 1\n\t\tv[976,0] = 1\n\t\tv[977,0] = 1\n\t\tv[978,0] = 1\n\t\tv[979,0] = 1\n\t\tv[980,0] = 1\n\t\tv[981,0] = 1\n\t\tv[982,0] = 1\n\t\tv[983,0] = 1\n\t\tv[984,0] = 1\n\t\tv[985,0] = 1\n\t\tv[986,0] = 1\n\t\tv[987,0] = 1\n\t\tv[988,0] = 1\n\t\tv[989,0] = 1\n\t\tv[990,0] = 1\n\t\tv[991,0] = 1\n\t\tv[992,0] = 1\n\t\tv[993,0] = 1\n\t\tv[994,0] = 1\n\t\tv[995,0] = 1\n\t\tv[996,0] = 1\n\t\tv[997,0] = 1\n\t\tv[998,0] = 1\n\t\tv[999,0] = 1\n\t\tv[1000,0] = 1\n\t\tv[1001,0] = 1\n\t\tv[1002,0] = 1\n\t\tv[1003,0] = 1\n\t\tv[1004,0] = 1\n\t\tv[1005,0] = 1\n\t\tv[1006,0] = 1\n\t\tv[1007,0] = 1\n\t\tv[1008,0] = 1\n\t\tv[1009,0] = 1\n\t\tv[1010,0] = 1\n\t\tv[1011,0] = 1\n\t\tv[1012,0] = 1\n\t\tv[1013,0] = 1\n\t\tv[1014,0] = 1\n\t\tv[1015,0] = 1\n\t\tv[1016,0] = 1\n\t\tv[1017,0] = 1\n\t\tv[1018,0] = 1\n\t\tv[1019,0] = 1\n\t\tv[1020,0] = 1\n\t\tv[1021,0] = 1\n\t\tv[1022,0] = 1\n\t\tv[1023,0] = 1\n\t\tv[1024,0] = 1\n\t\tv[1025,0] = 1\n\t\tv[1026,0] = 1\n\t\tv[1027,0] = 1\n\t\tv[1028,0] = 1\n\t\tv[1029,0] = 1\n\t\tv[1030,0] = 1\n\t\tv[1031,0] = 1\n\t\tv[1032,0] = 1\n\t\tv[1033,0] = 1\n\t\tv[1034,0] = 1\n\t\tv[1035,0] = 1\n\t\tv[1036,0] = 1\n\t\tv[1037,0] = 1\n\t\tv[1038,0] = 1\n\t\tv[1039,0] = 1\n\t\tv[1040,0] = 1\n\t\tv[1041,0] = 1\n\t\tv[1042,0] = 1\n\t\tv[1043,0] = 1\n\t\tv[1044,0] = 1\n\t\tv[1045,0] = 1\n\t\tv[1046,0] = 1\n\t\tv[1047,0] = 1\n\t\tv[1048,0] = 1\n\t\tv[1049,0] = 1\n\t\tv[1050,0] = 1\n\t\tv[1051,0] = 1\n\t\tv[1052,0] = 1\n\t\tv[1053,0] = 1\n\t\tv[1054,0] = 1\n\t\tv[1055,0] = 1\n\t\tv[1056,0] = 1\n\t\tv[1057,0] = 1\n\t\tv[1058,0] = 1\n\t\tv[1059,0] = 1\n\t\tv[1060,0] = 1\n\t\tv[1061,0] = 1\n\t\tv[1062,0] = 1\n\t\tv[1063,0] = 1\n\t\tv[1064,0] = 1\n\t\tv[1065,0] = 1\n\t\tv[1066,0] = 1\n\t\tv[1067,0] = 1\n\t\tv[1068,0] = 1\n\t\tv[1069,0] = 1\n\t\tv[1070,0] = 1\n\t\tv[1071,0] = 1\n\t\tv[1072,0] = 1\n\t\tv[1073,0] = 1\n\t\tv[1074,0] = 1\n\t\tv[1075,0] = 1\n\t\tv[1076,0] = 1\n\t\tv[1077,0] = 1\n\t\tv[1078,0] = 1\n\t\tv[1079,0] = 1\n\t\tv[1080,0] = 1\n\t\tv[1081,0] = 1\n\t\tv[1082,0] = 1\n\t\tv[1083,0] = 1\n\t\tv[1084,0] = 1\n\t\tv[1085,0] = 1\n\t\tv[1086,0] = 1\n\t\tv[1087,0] = 1\n\t\tv[1088,0] = 1\n\t\tv[1089,0] = 1\n\t\tv[1090,0] = 1\n\t\tv[1091,0] = 1\n\t\tv[1092,0] = 1\n\t\tv[1093,0] = 1\n\t\tv[1094,0] = 1\n\t\tv[1095,0] = 1\n\t\tv[1096,0] = 1\n\t\tv[1097,0] = 1\n\t\tv[1098,0] = 1\n\t\tv[1099,0] = 1\n\t\tv[1100,0] = 1\n\t\tv[1101,0] = 1\n\t\tv[1102,0] = 1\n\t\tv[1103,0] = 1\n\t\tv[1104,0] = 1\n\t\tv[1105,0] = 1\n\t\tv[1106,0] = 1\n\t\tv[1107,0] = 1\n\t\tv[1108,0] = 1\n\t\tv[1109,0] = 1\n\t\tv[1110,0] = 1\n\n\t\tv[2,1] = 1\n\t\tv[3,1] = 3\n\t\tv[4,1] = 1\n\t\tv[5,1] = 3\n\t\tv[6,1] = 1\n\t\tv[7,1] = 3\n\t\tv[8,1] = 3\n\t\tv[9,1] = 1\n\t\tv[10,1] = 3\n\t\tv[11,1] = 1\n\t\tv[12,1] = 3\n\t\tv[13,1] = 1\n\t\tv[14,1] = 3\n\t\tv[15,1] = 1\n\t\tv[16,1] = 1\n\t\tv[17,1] = 3\n\t\tv[18,1] = 1\n\t\tv[19,1] = 3\n\t\tv[20,1] = 1\n\t\tv[21,1] = 3\n\t\tv[22,1] = 1\n\t\tv[23,1] = 3\n\t\tv[24,1] = 3\n\t\tv[25,1] = 1\n\t\tv[26,1] = 1\n\t\tv[27,1] = 1\n\t\tv[28,1] = 3\n\t\tv[29,1] = 1\n\t\tv[30,1] = 3\n\t\tv[31,1] = 1\n\t\tv[32,1] = 3\n\t\tv[33,1] = 3\n\t\tv[34,1] = 1\n\t\tv[35,1] = 3\n\t\tv[36,1] = 1\n\t\tv[37,1] = 1\n\t\tv[38,1] = 1\n\t\tv[39,1] = 3\n\t\tv[40,1] = 1\n\t\tv[41,1] = 3\n\t\tv[42,1] = 1\n\t\tv[43,1] = 1\n\t\tv[44,1] = 1\n\t\tv[45,1] = 3\n\t\tv[46,1] = 3\n\t\tv[47,1] = 1\n\t\tv[48,1] = 3\n\t\tv[49,1] = 3\n\t\tv[50,1] = 1\n\t\tv[51,1] = 1\n\t\tv[52,1] = 3\n\t\tv[53,1] = 3\n\t\tv[54,1] = 1\n\t\tv[55,1] = 3\n\t\tv[56,1] = 3\n\t\tv[57,1] = 3\n\t\tv[58,1] = 1\n\t\tv[59,1] = 3\n\t\tv[60,1] = 1\n\t\tv[61,1] = 3\n\t\tv[62,1] = 1\n\t\tv[63,1] = 1\n\t\tv[64,1] = 3\n\t\tv[65,1] = 3\n\t\tv[66,1] = 1\n\t\tv[67,1] = 1\n\t\tv[68,1] = 1\n\t\tv[69,1] = 1\n\t\tv[70,1] = 3\n\t\tv[71,1] = 1\n\t\tv[72,1] = 1\n\t\tv[73,1] = 3\n\t\tv[74,1] = 1\n\t\tv[75,1] = 1\n\t\tv[76,1] = 1\n\t\tv[77,1] = 3\n\t\tv[78,1] = 3\n\t\tv[79,1] = 1\n\t\tv[80,1] = 3\n\t\tv[81,1] = 3\n\t\tv[82,1] = 1\n\t\tv[83,1] = 3\n\t\tv[84,1] = 3\n\t\tv[85,1] = 3\n\t\tv[86,1] = 1\n\t\tv[87,1] = 3\n\t\tv[88,1] = 3\n\t\tv[89,1] = 3\n\t\tv[90,1] = 1\n\t\tv[91,1] = 3\n\t\tv[92,1] = 3\n\t\tv[93,1] = 1\n\t\tv[94,1] = 3\n\t\tv[95,1] = 3\n\t\tv[96,1] = 3\n\t\tv[97,1] = 1\n\t\tv[98,1] = 3\n\t\tv[99,1] = 1\n\t\tv[100,1] = 3\n\t\tv[101,1] = 1\n\t\tv[102,1] = 1\n\t\tv[103,1] = 3\n\t\tv[104,1] = 3\n\t\tv[105,1] = 1\n\t\tv[106,1] = 3\n\t\tv[107,1] = 3\n\t\tv[108,1] = 1\n\t\tv[109,1] = 1\n\t\tv[110,1] = 1\n\t\tv[111,1] = 3\n\t\tv[112,1] = 3\n\t\tv[113,1] = 1\n\t\tv[114,1] = 3\n\t\tv[115,1] = 3\n\t\tv[116,1] = 1\n\t\tv[117,1] = 3\n\t\tv[118,1] = 1\n\t\tv[119,1] = 1\n\t\tv[120,1] = 3\n\t\tv[121,1] = 3\n\t\tv[122,1] = 3\n\t\tv[123,1] = 1\n\t\tv[124,1] = 1\n\t\tv[125,1] = 1\n\t\tv[126,1] = 3\n\t\tv[127,1] = 1\n\t\tv[128,1] = 1\n\t\tv[129,1] = 3\n\t\tv[130,1] = 1\n\t\tv[131,1] = 1\n\t\tv[132,1] = 3\n\t\tv[133,1] = 3\n\t\tv[134,1] = 1\n\t\tv[135,1] = 3\n\t\tv[136,1] = 1\n\t\tv[137,1] = 3\n\t\tv[138,1] = 3\n\t\tv[139,1] = 3\n\t\tv[140,1] = 3\n\t\tv[141,1] = 1\n\t\tv[142,1] = 1\n\t\tv[143,1] = 1\n\t\tv[144,1] = 3\n\t\tv[145,1] = 3\n\t\tv[146,1] = 1\n\t\tv[147,1] = 1\n\t\tv[148,1] = 3\n\t\tv[149,1] = 1\n\t\tv[150,1] = 1\n\t\tv[151,1] = 1\n\t\tv[152,1] = 1\n\t\tv[153,1] = 1\n\t\tv[154,1] = 1\n\t\tv[155,1] = 3\n\t\tv[156,1] = 1\n\t\tv[157,1] = 3\n\t\tv[158,1] = 1\n\t\tv[159,1] = 1\n\t\tv[160,1] = 1\n\t\tv[161,1] = 3\n\t\tv[162,1] = 1\n\t\tv[163,1] = 3\n\t\tv[164,1] = 1\n\t\tv[165,1] = 3\n\t\tv[166,1] = 3\n\t\tv[167,1] = 3\n\t\tv[168,1] = 1\n\t\tv[169,1] = 1\n\t\tv[170,1] = 3\n\t\tv[171,1] = 3\n\t\tv[172,1] = 1\n\t\tv[173,1] = 3\n\t\tv[174,1] = 1\n\t\tv[175,1] = 3\n\t\tv[176,1] = 1\n\t\tv[177,1] = 1\n\t\tv[178,1] = 3\n\t\tv[179,1] = 1\n\t\tv[180,1] = 3\n\t\tv[181,1] = 1\n\t\tv[182,1] = 3\n\t\tv[183,1] = 1\n\t\tv[184,1] = 3\n\t\tv[185,1] = 1\n\t\tv[186,1] = 1\n\t\tv[187,1] = 1\n\t\tv[188,1] = 3\n\t\tv[189,1] = 3\n\t\tv[190,1] = 1\n\t\tv[191,1] = 3\n\t\tv[192,1] = 3\n\t\tv[193,1] = 1\n\t\tv[194,1] = 3\n\t\tv[195,1] = 1\n\t\tv[196,1] = 1\n\t\tv[197,1] = 1\n\t\tv[198,1] = 3\n\t\tv[199,1] = 1\n\t\tv[200,1] = 3\n\t\tv[201,1] = 1\n\t\tv[202,1] = 1\n\t\tv[203,1] = 3\n\t\tv[204,1] = 1\n\t\tv[205,1] = 1\n\t\tv[206,1] = 3\n\t\tv[207,1] = 3\n\t\tv[208,1] = 1\n\t\tv[209,1] = 1\n\t\tv[210,1] = 3\n\t\tv[211,1] = 3\n\t\tv[212,1] = 3\n\t\tv[213,1] = 1\n\t\tv[214,1] = 3\n\t\tv[215,1] = 3\n\t\tv[216,1] = 3\n\t\tv[217,1] = 1\n\t\tv[218,1] = 3\n\t\tv[219,1] = 1\n\t\tv[220,1] = 3\n\t\tv[221,1] = 1\n\t\tv[222,1] = 1\n\t\tv[223,1] = 1\n\t\tv[224,1] = 3\n\t\tv[225,1] = 1\n\t\tv[226,1] = 1\n\t\tv[227,1] = 1\n\t\tv[228,1] = 3\n\t\tv[229,1] = 1\n\t\tv[230,1] = 1\n\t\tv[231,1] = 1\n\t\tv[232,1] = 1\n\t\tv[233,1] = 1\n\t\tv[234,1] = 3\n\t\tv[235,1] = 3\n\t\tv[236,1] = 3\n\t\tv[237,1] = 1\n\t\tv[238,1] = 1\n\t\tv[239,1] = 1\n\t\tv[240,1] = 1\n\t\tv[241,1] = 3\n\t\tv[242,1] = 3\n\t\tv[243,1] = 3\n\t\tv[244,1] = 1\n\t\tv[245,1] = 3\n\t\tv[246,1] = 3\n\t\tv[247,1] = 1\n\t\tv[248,1] = 1\n\t\tv[249,1] = 1\n\t\tv[250,1] = 1\n\t\tv[251,1] = 3\n\t\tv[252,1] = 1\n\t\tv[253,1] = 1\n\t\tv[254,1] = 3\n\t\tv[255,1] = 1\n\t\tv[256,1] = 3\n\t\tv[257,1] = 3\n\t\tv[258,1] = 1\n\t\tv[259,1] = 1\n\t\tv[260,1] = 3\n\t\tv[261,1] = 3\n\t\tv[262,1] = 1\n\t\tv[263,1] = 1\n\t\tv[264,1] = 1\n\t\tv[265,1] = 1\n\t\tv[266,1] = 3\n\t\tv[267,1] = 1\n\t\tv[268,1] = 3\n\t\tv[269,1] = 3\n\t\tv[270,1] = 1\n\t\tv[271,1] = 3\n\t\tv[272,1] = 3\n\t\tv[273,1] = 1\n\t\tv[274,1] = 1\n\t\tv[275,1] = 1\n\t\tv[276,1] = 3\n\t\tv[277,1] = 3\n\t\tv[278,1] = 3\n\t\tv[279,1] = 1\n\t\tv[280,1] = 3\n\t\tv[281,1] = 3\n\t\tv[282,1] = 1\n\t\tv[283,1] = 3\n\t\tv[284,1] = 3\n\t\tv[285,1] = 1\n\t\tv[286,1] = 3\n\t\tv[287,1] = 1\n\t\tv[288,1] = 3\n\t\tv[289,1] = 3\n\t\tv[290,1] = 3\n\t\tv[291,1] = 1\n\t\tv[292,1] = 3\n\t\tv[293,1] = 1\n\t\tv[294,1] = 1\n\t\tv[295,1] = 3\n\t\tv[296,1] = 1\n\t\tv[297,1] = 3\n\t\tv[298,1] = 1\n\t\tv[299,1] = 1\n\t\tv[300,1] = 1\n\t\tv[301,1] = 3\n\t\tv[302,1] = 3\n\t\tv[303,1] = 3\n\t\tv[304,1] = 1\n\t\tv[305,1] = 1\n\t\tv[306,1] = 3\n\t\tv[307,1] = 1\n\t\tv[308,1] = 3\n\t\tv[309,1] = 1\n\t\tv[310,1] = 1\n\t\tv[311,1] = 1\n\t\tv[312,1] = 1\n\t\tv[313,1] = 1\n\t\tv[314,1] = 1\n\t\tv[315,1] = 3\n\t\tv[316,1] = 1\n\t\tv[317,1] = 1\n\t\tv[318,1] = 3\n\t\tv[319,1] = 1\n\t\tv[320,1] = 3\n\t\tv[321,1] = 3\n\t\tv[322,1] = 1\n\t\tv[323,1] = 1\n\t\tv[324,1] = 1\n\t\tv[325,1] = 1\n\t\tv[326,1] = 3\n\t\tv[327,1] = 1\n\t\tv[328,1] = 3\n\t\tv[329,1] = 1\n\t\tv[330,1] = 3\n\t\tv[331,1] = 1\n\t\tv[332,1] = 1\n\t\tv[333,1] = 1\n\t\tv[334,1] = 1\n\t\tv[335,1] = 3\n\t\tv[336,1] = 3\n\t\tv[337,1] = 1\n\t\tv[338,1] = 1\n\t\tv[339,1] = 1\n\t\tv[340,1] = 1\n\t\tv[341,1] = 1\n\t\tv[342,1] = 3\n\t\tv[343,1] = 3\n\t\tv[344,1] = 3\n\t\tv[345,1] = 1\n\t\tv[346,1] = 1\n\t\tv[347,1] = 3\n\t\tv[348,1] = 3\n\t\tv[349,1] = 3\n\t\tv[350,1] = 3\n\t\tv[351,1] = 3\n\t\tv[352,1] = 1\n\t\tv[353,1] = 3\n\t\tv[354,1] = 3\n\t\tv[355,1] = 1\n\t\tv[356,1] = 3\n\t\tv[357,1] = 3\n\t\tv[358,1] = 3\n\t\tv[359,1] = 3\n\t\tv[360,1] = 1\n\t\tv[361,1] = 1\n\t\tv[362,1] = 1\n\t\tv[363,1] = 1\n\t\tv[364,1] = 1\n\t\tv[365,1] = 1\n\t\tv[366,1] = 3\n\t\tv[367,1] = 1\n\t\tv[368,1] = 1\n\t\tv[369,1] = 3\n\t\tv[370,1] = 1\n\t\tv[371,1] = 1\n\t\tv[372,1] = 1\n\t\tv[373,1] = 3\n\t\tv[374,1] = 1\n\t\tv[375,1] = 1\n\t\tv[376,1] = 1\n\t\tv[377,1] = 3\n\t\tv[378,1] = 3\n\t\tv[379,1] = 3\n\t\tv[380,1] = 1\n\t\tv[381,1] = 3\n\t\tv[382,1] = 1\n\t\tv[383,1] = 1\n\t\tv[384,1] = 3\n\t\tv[385,1] = 3\n\t\tv[386,1] = 3\n\t\tv[387,1] = 1\n\t\tv[388,1] = 3\n\t\tv[389,1] = 3\n\t\tv[390,1] = 1\n\t\tv[391,1] = 3\n\t\tv[392,1] = 1\n\t\tv[393,1] = 3\n\t\tv[394,1] = 3\n\t\tv[395,1] = 1\n\t\tv[396,1] = 3\n\t\tv[397,1] = 3\n\t\tv[398,1] = 3\n\t\tv[399,1] = 1\n\t\tv[400,1] = 1\n\t\tv[401,1] = 3\n\t\tv[402,1] = 3\n\t\tv[403,1] = 1\n\t\tv[404,1] = 3\n\t\tv[405,1] = 1\n\t\tv[406,1] = 3\n\t\tv[407,1] = 1\n\t\tv[408,1] = 1\n\t\tv[409,1] = 1\n\t\tv[410,1] = 3\n\t\tv[411,1] = 3\n\t\tv[412,1] = 3\n\t\tv[413,1] = 3\n\t\tv[414,1] = 1\n\t\tv[415,1] = 3\n\t\tv[416,1] = 1\n\t\tv[417,1] = 1\n\t\tv[418,1] = 3\n\t\tv[419,1] = 1\n\t\tv[420,1] = 3\n\t\tv[421,1] = 1\n\t\tv[422,1] = 1\n\t\tv[423,1] = 1\n\t\tv[424,1] = 3\n\t\tv[425,1] = 1\n\t\tv[426,1] = 3\n\t\tv[427,1] = 1\n\t\tv[428,1] = 3\n\t\tv[429,1] = 1\n\t\tv[430,1] = 3\n\t\tv[431,1] = 3\n\t\tv[432,1] = 3\n\t\tv[433,1] = 3\n\t\tv[434,1] = 3\n\t\tv[435,1] = 3\n\t\tv[436,1] = 3\n\t\tv[437,1] = 3\n\t\tv[438,1] = 1\n\t\tv[439,1] = 3\n\t\tv[440,1] = 3\n\t\tv[441,1] = 3\n\t\tv[442,1] = 3\n\t\tv[443,1] = 3\n\t\tv[444,1] = 1\n\t\tv[445,1] = 3\n\t\tv[446,1] = 1\n\t\tv[447,1] = 3\n\t\tv[448,1] = 3\n\t\tv[449,1] = 3\n\t\tv[450,1] = 1\n\t\tv[451,1] = 3\n\t\tv[452,1] = 1\n\t\tv[453,1] = 3\n\t\tv[454,1] = 1\n\t\tv[455,1] = 3\n\t\tv[456,1] = 3\n\t\tv[457,1] = 1\n\t\tv[458,1] = 3\n\t\tv[459,1] = 3\n\t\tv[460,1] = 3\n\t\tv[461,1] = 3\n\t\tv[462,1] = 3\n\t\tv[463,1] = 3\n\t\tv[464,1] = 3\n\t\tv[465,1] = 3\n\t\tv[466,1] = 3\n\t\tv[467,1] = 1\n\t\tv[468,1] = 1\n\t\tv[469,1] = 1\n\t\tv[470,1] = 1\n\t\tv[471,1] = 1\n\t\tv[472,1] = 1\n\t\tv[473,1] = 3\n\t\tv[474,1] = 3\n\t\tv[475,1] = 1\n\t\tv[476,1] = 1\n\t\tv[477,1] = 3\n\t\tv[478,1] = 3\n\t\tv[479,1] = 1\n\t\tv[480,1] = 1\n\t\tv[481,1] = 1\n\t\tv[482,1] = 3\n\t\tv[483,1] = 3\n\t\tv[484,1] = 1\n\t\tv[485,1] = 1\n\t\tv[486,1] = 3\n\t\tv[487,1] = 3\n\t\tv[488,1] = 3\n\t\tv[489,1] = 3\n\t\tv[490,1] = 1\n\t\tv[491,1] = 1\n\t\tv[492,1] = 3\n\t\tv[493,1] = 1\n\t\tv[494,1] = 3\n\t\tv[495,1] = 3\n\t\tv[496,1] = 1\n\t\tv[497,1] = 3\n\t\tv[498,1] = 3\n\t\tv[499,1] = 1\n\t\tv[500,1] = 1\n\t\tv[501,1] = 1\n\t\tv[502,1] = 3\n\t\tv[503,1] = 3\n\t\tv[504,1] = 3\n\t\tv[505,1] = 1\n\t\tv[506,1] = 1\n\t\tv[507,1] = 3\n\t\tv[508,1] = 3\n\t\tv[509,1] = 3\n\t\tv[510,1] = 3\n\t\tv[511,1] = 3\n\t\tv[512,1] = 1\n\t\tv[513,1] = 1\n\t\tv[514,1] = 1\n\t\tv[515,1] = 3\n\t\tv[516,1] = 1\n\t\tv[517,1] = 3\n\t\tv[518,1] = 3\n\t\tv[519,1] = 1\n\t\tv[520,1] = 3\n\t\tv[521,1] = 3\n\t\tv[522,1] = 3\n\t\tv[523,1] = 3\n\t\tv[524,1] = 1\n\t\tv[525,1] = 1\n\t\tv[526,1] = 3\n\t\tv[527,1] = 1\n\t\tv[528,1] = 1\n\t\tv[529,1] = 3\n\t\tv[530,1] = 1\n\t\tv[531,1] = 3\n\t\tv[532,1] = 1\n\t\tv[533,1] = 3\n\t\tv[534,1] = 1\n\t\tv[535,1] = 3\n\t\tv[536,1] = 3\n\t\tv[537,1] = 1\n\t\tv[538,1] = 1\n\t\tv[539,1] = 3\n\t\tv[540,1] = 3\n\t\tv[541,1] = 1\n\t\tv[542,1] = 3\n\t\tv[543,1] = 3\n\t\tv[544,1] = 1\n\t\tv[545,1] = 3\n\t\tv[546,1] = 3\n\t\tv[547,1] = 1\n\t\tv[548,1] = 1\n\t\tv[549,1] = 3\n\t\tv[550,1] = 1\n\t\tv[551,1] = 3\n\t\tv[552,1] = 3\n\t\tv[553,1] = 1\n\t\tv[554,1] = 1\n\t\tv[555,1] = 3\n\t\tv[556,1] = 1\n\t\tv[557,1] = 3\n\t\tv[558,1] = 1\n\t\tv[559,1] = 3\n\t\tv[560,1] = 1\n\t\tv[561,1] = 1\n\t\tv[562,1] = 3\n\t\tv[563,1] = 3\n\t\tv[564,1] = 1\n\t\tv[565,1] = 1\n\t\tv[566,1] = 1\n\t\tv[567,1] = 3\n\t\tv[568,1] = 3\n\t\tv[569,1] = 1\n\t\tv[570,1] = 3\n\t\tv[571,1] = 1\n\t\tv[572,1] = 1\n\t\tv[573,1] = 3\n\t\tv[574,1] = 3\n\t\tv[575,1] = 1\n\t\tv[576,1] = 1\n\t\tv[577,1] = 3\n\t\tv[578,1] = 1\n\t\tv[579,1] = 3\n\t\tv[580,1] = 1\n\t\tv[581,1] = 1\n\t\tv[582,1] = 1\n\t\tv[583,1] = 1\n\t\tv[584,1] = 1\n\t\tv[585,1] = 3\n\t\tv[586,1] = 1\n\t\tv[587,1] = 1\n\t\tv[588,1] = 1\n\t\tv[589,1] = 1\n\t\tv[590,1] = 3\n\t\tv[591,1] = 1\n\t\tv[592,1] = 3\n\t\tv[593,1] = 1\n\t\tv[594,1] = 1\n\t\tv[595,1] = 3\n\t\tv[596,1] = 3\n\t\tv[597,1] = 1\n\t\tv[598,1] = 1\n\t\tv[599,1] = 3\n\t\tv[600,1] = 1\n\t\tv[601,1] = 3\n\t\tv[602,1] = 1\n\t\tv[603,1] = 3\n\t\tv[604,1] = 3\n\t\tv[605,1] = 3\n\t\tv[606,1] = 1\n\t\tv[607,1] = 3\n\t\tv[608,1] = 3\n\t\tv[609,1] = 3\n\t\tv[610,1] = 1\n\t\tv[611,1] = 1\n\t\tv[612,1] = 3\n\t\tv[613,1] = 3\n\t\tv[614,1] = 3\n\t\tv[615,1] = 1\n\t\tv[616,1] = 1\n\t\tv[617,1] = 1\n\t\tv[618,1] = 1\n\t\tv[619,1] = 3\n\t\tv[620,1] = 1\n\t\tv[621,1] = 3\n\t\tv[622,1] = 1\n\t\tv[623,1] = 3\n\t\tv[624,1] = 1\n\t\tv[625,1] = 1\n\t\tv[626,1] = 3\n\t\tv[627,1] = 3\n\t\tv[628,1] = 1\n\t\tv[629,1] = 1\n\t\tv[630,1] = 1\n\t\tv[631,1] = 3\n\t\tv[632,1] = 3\n\t\tv[633,1] = 1\n\t\tv[634,1] = 3\n\t\tv[635,1] = 1\n\t\tv[636,1] = 3\n\t\tv[637,1] = 1\n\t\tv[638,1] = 1\n\t\tv[639,1] = 1\n\t\tv[640,1] = 1\n\t\tv[641,1] = 1\n\t\tv[642,1] = 1\n\t\tv[643,1] = 3\n\t\tv[644,1] = 1\n\t\tv[645,1] = 3\n\t\tv[646,1] = 3\n\t\tv[647,1] = 1\n\t\tv[648,1] = 3\n\t\tv[649,1] = 3\n\t\tv[650,1] = 3\n\t\tv[651,1] = 1\n\t\tv[652,1] = 3\n\t\tv[653,1] = 1\n\t\tv[654,1] = 1\n\t\tv[655,1] = 3\n\t\tv[656,1] = 3\n\t\tv[657,1] = 1\n\t\tv[658,1] = 1\n\t\tv[659,1] = 3\n\t\tv[660,1] = 3\n\t\tv[661,1] = 1\n\t\tv[662,1] = 1\n\t\tv[663,1] = 1\n\t\tv[664,1] = 3\n\t\tv[665,1] = 1\n\t\tv[666,1] = 3\n\t\tv[667,1] = 3\n\t\tv[668,1] = 1\n\t\tv[669,1] = 1\n\t\tv[670,1] = 3\n\t\tv[671,1] = 1\n\t\tv[672,1] = 1\n\t\tv[673,1] = 3\n\t\tv[674,1] = 1\n\t\tv[675,1] = 3\n\t\tv[676,1] = 1\n\t\tv[677,1] = 1\n\t\tv[678,1] = 1\n\t\tv[679,1] = 3\n\t\tv[680,1] = 3\n\t\tv[681,1] = 3\n\t\tv[682,1] = 3\n\t\tv[683,1] = 1\n\t\tv[684,1] = 1\n\t\tv[685,1] = 3\n\t\tv[686,1] = 3\n\t\tv[687,1] = 1\n\t\tv[688,1] = 1\n\t\tv[689,1] = 1\n\t\tv[690,1] = 1\n\t\tv[691,1] = 3\n\t\tv[692,1] = 1\n\t\tv[693,1] = 1\n\t\tv[694,1] = 3\n\t\tv[695,1] = 3\n\t\tv[696,1] = 3\n\t\tv[697,1] = 1\n\t\tv[698,1] = 1\n\t\tv[699,1] = 3\n\t\tv[700,1] = 3\n\t\tv[701,1] = 1\n\t\tv[702,1] = 3\n\t\tv[703,1] = 3\n\t\tv[704,1] = 1\n\t\tv[705,1] = 1\n\t\tv[706,1] = 3\n\t\tv[707,1] = 3\n\t\tv[708,1] = 3\n\t\tv[709,1] = 3\n\t\tv[710,1] = 3\n\t\tv[711,1] = 3\n\t\tv[712,1] = 3\n\t\tv[713,1] = 1\n\t\tv[714,1] = 3\n\t\tv[715,1] = 3\n\t\tv[716,1] = 1\n\t\tv[717,1] = 3\n\t\tv[718,1] = 1\n\t\tv[719,1] = 3\n\t\tv[720,1] = 1\n\t\tv[721,1] = 1\n\t\tv[722,1] = 3\n\t\tv[723,1] = 3\n\t\tv[724,1] = 1\n\t\tv[725,1] = 1\n\t\tv[726,1] = 1\n\t\tv[727,1] = 3\n\t\tv[728,1] = 1\n\t\tv[729,1] = 3\n\t\tv[730,1] = 3\n\t\tv[731,1] = 1\n\t\tv[732,1] = 3\n\t\tv[733,1] = 3\n\t\tv[734,1] = 1\n\t\tv[735,1] = 3\n\t\tv[736,1] = 1\n\t\tv[737,1] = 1\n\t\tv[738,1] = 3\n\t\tv[739,1] = 3\n\t\tv[740,1] = 3\n\t\tv[741,1] = 1\n\t\tv[742,1] = 1\n\t\tv[743,1] = 1\n\t\tv[744,1] = 3\n\t\tv[745,1] = 1\n\t\tv[746,1] = 1\n\t\tv[747,1] = 1\n\t\tv[748,1] = 3\n\t\tv[749,1] = 3\n\t\tv[750,1] = 3\n\t\tv[751,1] = 1\n\t\tv[752,1] = 3\n\t\tv[753,1] = 3\n\t\tv[754,1] = 1\n\t\tv[755,1] = 3\n\t\tv[756,1] = 1\n\t\tv[757,1] = 1\n\t\tv[758,1] = 3\n\t\tv[759,1] = 3\n\t\tv[760,1] = 3\n\t\tv[761,1] = 1\n\t\tv[762,1] = 3\n\t\tv[763,1] = 3\n\t\tv[764,1] = 1\n\t\tv[765,1] = 1\n\t\tv[766,1] = 1\n\t\tv[767,1] = 3\n\t\tv[768,1] = 1\n\t\tv[769,1] = 3\n\t\tv[770,1] = 3\n\t\tv[771,1] = 3\n\t\tv[772,1] = 3\n\t\tv[773,1] = 3\n\t\tv[774,1] = 3\n\t\tv[775,1] = 3\n\t\tv[776,1] = 3\n\t\tv[777,1] = 1\n\t\tv[778,1] = 3\n\t\tv[779,1] = 3\n\t\tv[780,1] = 1\n\t\tv[781,1] = 3\n\t\tv[782,1] = 1\n\t\tv[783,1] = 1\n\t\tv[784,1] = 3\n\t\tv[785,1] = 3\n\t\tv[786,1] = 3\n\t\tv[787,1] = 1\n\t\tv[788,1] = 3\n\t\tv[789,1] = 3\n\t\tv[790,1] = 3\n\t\tv[791,1] = 3\n\t\tv[792,1] = 3\n\t\tv[793,1] = 1\n\t\tv[794,1] = 3\n\t\tv[795,1] = 3\n\t\tv[796,1] = 3\n\t\tv[797,1] = 1\n\t\tv[798,1] = 1\n\t\tv[799,1] = 1\n\t\tv[800,1] = 3\n\t\tv[801,1] = 3\n\t\tv[802,1] = 1\n\t\tv[803,1] = 3\n\t\tv[804,1] = 3\n\t\tv[805,1] = 1\n\t\tv[806,1] = 3\n\t\tv[807,1] = 1\n\t\tv[808,1] = 3\n\t\tv[809,1] = 1\n\t\tv[810,1] = 3\n\t\tv[811,1] = 1\n\t\tv[812,1] = 3\n\t\tv[813,1] = 3\n\t\tv[814,1] = 3\n\t\tv[815,1] = 3\n\t\tv[816,1] = 3\n\t\tv[817,1] = 3\n\t\tv[818,1] = 1\n\t\tv[819,1] = 1\n\t\tv[820,1] = 3\n\t\tv[821,1] = 1\n\t\tv[822,1] = 3\n\t\tv[823,1] = 1\n\t\tv[824,1] = 1\n\t\tv[825,1] = 1\n\t\tv[826,1] = 1\n\t\tv[827,1] = 1\n\t\tv[828,1] = 3\n\t\tv[829,1] = 1\n\t\tv[830,1] = 1\n\t\tv[831,1] = 1\n\t\tv[832,1] = 3\n\t\tv[833,1] = 1\n\t\tv[834,1] = 3\n\t\tv[835,1] = 1\n\t\tv[836,1] = 1\n\t\tv[837,1] = 3\n\t\tv[838,1] = 3\n\t\tv[839,1] = 3\n\t\tv[840,1] = 1\n\t\tv[841,1] = 3\n\t\tv[842,1] = 1\n\t\tv[843,1] = 3\n\t\tv[844,1] = 1\n\t\tv[845,1] = 1\n\t\tv[846,1] = 3\n\t\tv[847,1] = 1\n\t\tv[848,1] = 3\n\t\tv[849,1] = 3\n\t\tv[850,1] = 1\n\t\tv[851,1] = 3\n\t\tv[852,1] = 1\n\t\tv[853,1] = 3\n\t\tv[854,1] = 3\n\t\tv[855,1] = 1\n\t\tv[856,1] = 3\n\t\tv[857,1] = 3\n\t\tv[858,1] = 1\n\t\tv[859,1] = 3\n\t\tv[860,1] = 3\n\t\tv[861,1] = 3\n\t\tv[862,1] = 3\n\t\tv[863,1] = 3\n\t\tv[864,1] = 3\n\t\tv[865,1] = 1\n\t\tv[866,1] = 3\n\t\tv[867,1] = 1\n\t\tv[868,1] = 1\n\t\tv[869,1] = 3\n\t\tv[870,1] = 3\n\t\tv[871,1] = 3\n\t\tv[872,1] = 1\n\t\tv[873,1] = 1\n\t\tv[874,1] = 3\n\t\tv[875,1] = 3\n\t\tv[876,1] = 3\n\t\tv[877,1] = 3\n\t\tv[878,1] = 3\n\t\tv[879,1] = 3\n\t\tv[880,1] = 3\n\t\tv[881,1] = 1\n\t\tv[882,1] = 3\n\t\tv[883,1] = 3\n\t\tv[884,1] = 3\n\t\tv[885,1] = 3\n\t\tv[886,1] = 1\n\t\tv[887,1] = 3\n\t\tv[888,1] = 1\n\t\tv[889,1] = 3\n\t\tv[890,1] = 3\n\t\tv[891,1] = 3\n\t\tv[892,1] = 1\n\t\tv[893,1] = 3\n\t\tv[894,1] = 1\n\t\tv[895,1] = 3\n\t\tv[896,1] = 1\n\t\tv[897,1] = 1\n\t\tv[898,1] = 1\n\t\tv[899,1] = 3\n\t\tv[900,1] = 3\n\t\tv[901,1] = 1\n\t\tv[902,1] = 3\n\t\tv[903,1] = 1\n\t\tv[904,1] = 1\n\t\tv[905,1] = 3\n\t\tv[906,1] = 3\n\t\tv[907,1] = 1\n\t\tv[908,1] = 3\n\t\tv[909,1] = 1\n\t\tv[910,1] = 1\n\t\tv[911,1] = 1\n\t\tv[912,1] = 1\n\t\tv[913,1] = 3\n\t\tv[914,1] = 1\n\t\tv[915,1] = 3\n\t\tv[916,1] = 1\n\t\tv[917,1] = 1\n\t\tv[918,1] = 3\n\t\tv[919,1] = 1\n\t\tv[920,1] = 3\n\t\tv[921,1] = 1\n\t\tv[922,1] = 3\n\t\tv[923,1] = 3\n\t\tv[924,1] = 3\n\t\tv[925,1] = 3\n\t\tv[926,1] = 3\n\t\tv[927,1] = 3\n\t\tv[928,1] = 1\n\t\tv[929,1] = 3\n\t\tv[930,1] = 3\n\t\tv[931,1] = 3\n\t\tv[932,1] = 3\n\t\tv[933,1] = 1\n\t\tv[934,1] = 3\n\t\tv[935,1] = 3\n\t\tv[936,1] = 1\n\t\tv[937,1] = 3\n\t\tv[938,1] = 3\n\t\tv[939,1] = 3\n\t\tv[940,1] = 3\n\t\tv[941,1] = 3\n\t\tv[942,1] = 1\n\t\tv[943,1] = 1\n\t\tv[944,1] = 1\n\t\tv[945,1] = 1\n\t\tv[946,1] = 3\n\t\tv[947,1] = 3\n\t\tv[948,1] = 3\n\t\tv[949,1] = 1\n\t\tv[950,1] = 3\n\t\tv[951,1] = 3\n\t\tv[952,1] = 1\n\t\tv[953,1] = 1\n\t\tv[954,1] = 3\n\t\tv[955,1] = 3\n\t\tv[956,1] = 1\n\t\tv[957,1] = 1\n\t\tv[958,1] = 3\n\t\tv[959,1] = 3\n\t\tv[960,1] = 1\n\t\tv[961,1] = 3\n\t\tv[962,1] = 1\n\t\tv[963,1] = 1\n\t\tv[964,1] = 3\n\t\tv[965,1] = 1\n\t\tv[966,1] = 3\n\t\tv[967,1] = 3\n\t\tv[968,1] = 3\n\t\tv[969,1] = 3\n\t\tv[970,1] = 3\n\t\tv[971,1] = 1\n\t\tv[972,1] = 3\n\t\tv[973,1] = 1\n\t\tv[974,1] = 1\n\t\tv[975,1] = 3\n\t\tv[976,1] = 3\n\t\tv[977,1] = 3\n\t\tv[978,1] = 3\n\t\tv[979,1] = 1\n\t\tv[980,1] = 3\n\t\tv[981,1] = 1\n\t\tv[982,1] = 1\n\t\tv[983,1] = 3\n\t\tv[984,1] = 3\n\t\tv[985,1] = 3\n\t\tv[986,1] = 3\n\t\tv[987,1] = 3\n\t\tv[988,1] = 3\n\t\tv[989,1] = 1\n\t\tv[990,1] = 1\n\t\tv[991,1] = 3\n\t\tv[992,1] = 1\n\t\tv[993,1] = 3\n\t\tv[994,1] = 1\n\t\tv[995,1] = 1\n\t\tv[996,1] = 3\n\t\tv[997,1] = 1\n\t\tv[998,1] = 1\n\t\tv[999,1] = 1\n\t\tv[1000,1] = 1\n\t\tv[1001,1] = 3\n\t\tv[1002,1] = 3\n\t\tv[1003,1] = 1\n\t\tv[1004,1] = 1\n\t\tv[1005,1] = 3\n\t\tv[1006,1] = 1\n\t\tv[1007,1] = 1\n\t\tv[1008,1] = 1\n\t\tv[1009,1] = 3\n\t\tv[1010,1] = 1\n\t\tv[1011,1] = 3\n\t\tv[1012,1] = 1\n\t\tv[1013,1] = 1\n\t\tv[1014,1] = 3\n\t\tv[1015,1] = 3\n\t\tv[1016,1] = 1\n\t\tv[1017,1] = 3\n\t\tv[1018,1] = 1\n\t\tv[1019,1] = 1\n\t\tv[1020,1] = 3\n\t\tv[1021,1] = 3\n\t\tv[1022,1] = 3\n\t\tv[1023,1] = 3\n\t\tv[1024,1] = 3\n\t\tv[1025,1] = 1\n\t\tv[1026,1] = 3\n\t\tv[1027,1] = 1\n\t\tv[1028,1] = 1\n\t\tv[1029,1] = 1\n\t\tv[1030,1] = 3\n\t\tv[1031,1] = 1\n\t\tv[1032,1] = 1\n\t\tv[1033,1] = 1\n\t\tv[1034,1] = 3\n\t\tv[1035,1] = 1\n\t\tv[1036,1] = 1\n\t\tv[1037,1] = 3\n\t\tv[1038,1] = 1\n\t\tv[1039,1] = 3\n\t\tv[1040,1] = 3\n\t\tv[1041,1] = 3\n\t\tv[1042,1] = 3\n\t\tv[1043,1] = 3\n\t\tv[1044,1] = 1\n\t\tv[1045,1] = 1\n\t\tv[1046,1] = 1\n\t\tv[1047,1] = 3\n\t\tv[1048,1] = 3\n\t\tv[1049,1] = 3\n\t\tv[1050,1] = 3\n\t\tv[1051,1] = 1\n\t\tv[1052,1] = 3\n\t\tv[1053,1] = 3\n\t\tv[1054,1] = 3\n\t\tv[1055,1] = 3\n\t\tv[1056,1] = 1\n\t\tv[1057,1] = 1\n\t\tv[1058,1] = 3\n\t\tv[1059,1] = 3\n\t\tv[1060,1] = 3\n\t\tv[1061,1] = 1\n\t\tv[1062,1] = 3\n\t\tv[1063,1] = 1\n\t\tv[1064,1] = 1\n\t\tv[1065,1] = 3\n\t\tv[1066,1] = 3\n\t\tv[1067,1] = 1\n\t\tv[1068,1] = 3\n\t\tv[1069,1] = 3\n\t\tv[1070,1] = 1\n\t\tv[1071,1] = 1\n\t\tv[1072,1] = 1\n\t\tv[1073,1] = 1\n\t\tv[1074,1] = 1\n\t\tv[1075,1] = 3\n\t\tv[1076,1] = 1\n\t\tv[1077,1] = 1\n\t\tv[1078,1] = 3\n\t\tv[1079,1] = 3\n\t\tv[1080,1] = 1\n\t\tv[1081,1] = 1\n\t\tv[1082,1] = 1\n\t\tv[1083,1] = 3\n\t\tv[1084,1] = 1\n\t\tv[1085,1] = 1\n\t\tv[1086,1] = 3\n\t\tv[1087,1] = 3\n\t\tv[1088,1] = 1\n\t\tv[1089,1] = 3\n\t\tv[1090,1] = 3\n\t\tv[1091,1] = 3\n\t\tv[1092,1] = 3\n\t\tv[1093,1] = 3\n\t\tv[1094,1] = 3\n\t\tv[1095,1] = 3\n\t\tv[1096,1] = 3\n\t\tv[1097,1] = 1\n\t\tv[1098,1] = 1\n\t\tv[1099,1] = 3\n\t\tv[1100,1] = 3\n\t\tv[1101,1] = 1\n\t\tv[1102,1] = 1\n\t\tv[1103,1] = 3\n\t\tv[1104,1] = 1\n\t\tv[1105,1] = 3\n\t\tv[1106,1] = 3\n\t\tv[1107,1] = 3\n\t\tv[1108,1] = 3\n\t\tv[1109,1] = 3\n\t\tv[1110,1] = 1\n\n\t\tv[3,2] = 7\n\t\tv[4,2] = 5\n\t\tv[5,2] = 1\n\t\tv[6,2] = 3\n\t\tv[7,2] = 3\n\t\tv[8,2] = 7\n\t\tv[9,2] = 5\n\t\tv[10,2] = 5\n\t\tv[11,2] = 7\n\t\tv[12,2] = 7\n\t\tv[13,2] = 1\n\t\tv[14,2] = 3\n\t\tv[15,2] = 3\n\t\tv[16,2] = 7\n\t\tv[17,2] = 5\n\t\tv[18,2] = 1\n\t\tv[19,2] = 1\n\t\tv[20,2] = 5\n\t\tv[21,2] = 3\n\t\tv[22,2] = 7\n\t\tv[23,2] = 1\n\t\tv[24,2] = 7\n\t\tv[25,2] = 5\n\t\tv[26,2] = 1\n\t\tv[27,2] = 3\n\t\tv[28,2] = 7\n\t\tv[29,2] = 7\n\t\tv[30,2] = 1\n\t\tv[31,2] = 1\n\t\tv[32,2] = 1\n\t\tv[33,2] = 5\n\t\tv[34,2] = 7\n\t\tv[35,2] = 7\n\t\tv[36,2] = 5\n\t\tv[37,2] = 1\n\t\tv[38,2] = 3\n\t\tv[39,2] = 3\n\t\tv[40,2] = 7\n\t\tv[41,2] = 5\n\t\tv[42,2] = 5\n\t\tv[43,2] = 5\n\t\tv[44,2] = 3\n\t\tv[45,2] = 3\n\t\tv[46,2] = 3\n\t\tv[47,2] = 1\n\t\tv[48,2] = 1\n\t\tv[49,2] = 5\n\t\tv[50,2] = 1\n\t\tv[51,2] = 1\n\t\tv[52,2] = 5\n\t\tv[53,2] = 3\n\t\tv[54,2] = 3\n\t\tv[55,2] = 3\n\t\tv[56,2] = 3\n\t\tv[57,2] = 1\n\t\tv[58,2] = 3\n\t\tv[59,2] = 7\n\t\tv[60,2] = 5\n\t\tv[61,2] = 7\n\t\tv[62,2] = 3\n\t\tv[63,2] = 7\n\t\tv[64,2] = 1\n\t\tv[65,2] = 3\n\t\tv[66,2] = 3\n\t\tv[67,2] = 5\n\t\tv[68,2] = 1\n\t\tv[69,2] = 3\n\t\tv[70,2] = 5\n\t\tv[71,2] = 5\n\t\tv[72,2] = 7\n\t\tv[73,2] = 7\n\t\tv[74,2] = 7\n\t\tv[75,2] = 1\n\t\tv[76,2] = 1\n\t\tv[77,2] = 3\n\t\tv[78,2] = 3\n\t\tv[79,2] = 1\n\t\tv[80,2] = 1\n\t\tv[81,2] = 5\n\t\tv[82,2] = 1\n\t\tv[83,2] = 5\n\t\tv[84,2] = 7\n\t\tv[85,2] = 5\n\t\tv[86,2] = 1\n\t\tv[87,2] = 7\n\t\tv[88,2] = 5\n\t\tv[89,2] = 3\n\t\tv[90,2] = 3\n\t\tv[91,2] = 1\n\t\tv[92,2] = 5\n\t\tv[93,2] = 7\n\t\tv[94,2] = 1\n\t\tv[95,2] = 7\n\t\tv[96,2] = 5\n\t\tv[97,2] = 1\n\t\tv[98,2] = 7\n\t\tv[99,2] = 3\n\t\tv[100,2] = 1\n\t\tv[101,2] = 7\n\t\tv[102,2] = 1\n\t\tv[103,2] = 7\n\t\tv[104,2] = 3\n\t\tv[105,2] = 3\n\t\tv[106,2] = 5\n\t\tv[107,2] = 7\n\t\tv[108,2] = 3\n\t\tv[109,2] = 3\n\t\tv[110,2] = 5\n\t\tv[111,2] = 1\n\t\tv[112,2] = 3\n\t\tv[113,2] = 3\n\t\tv[114,2] = 1\n\t\tv[115,2] = 3\n\t\tv[116,2] = 5\n\t\tv[117,2] = 1\n\t\tv[118,2] = 3\n\t\tv[119,2] = 3\n\t\tv[120,2] = 3\n\t\tv[121,2] = 7\n\t\tv[122,2] = 1\n\t\tv[123,2] = 1\n\t\tv[124,2] = 7\n\t\tv[125,2] = 3\n\t\tv[126,2] = 1\n\t\tv[127,2] = 3\n\t\tv[128,2] = 7\n\t\tv[129,2] = 5\n\t\tv[130,2] = 5\n\t\tv[131,2] = 7\n\t\tv[132,2] = 5\n\t\tv[133,2] = 5\n\t\tv[134,2] = 3\n\t\tv[135,2] = 1\n\t\tv[136,2] = 3\n\t\tv[137,2] = 3\n\t\tv[138,2] = 3\n\t\tv[139,2] = 1\n\t\tv[140,2] = 3\n\t\tv[141,2] = 3\n\t\tv[142,2] = 7\n\t\tv[143,2] = 3\n\t\tv[144,2] = 3\n\t\tv[145,2] = 1\n\t\tv[146,2] = 7\n\t\tv[147,2] = 5\n\t\tv[148,2] = 1\n\t\tv[149,2] = 7\n\t\tv[150,2] = 7\n\t\tv[151,2] = 5\n\t\tv[152,2] = 7\n\t\tv[153,2] = 5\n\t\tv[154,2] = 1\n\t\tv[155,2] = 3\n\t\tv[156,2] = 1\n\t\tv[157,2] = 7\n\t\tv[158,2] = 3\n\t\tv[159,2] = 7\n\t\tv[160,2] = 3\n\t\tv[161,2] = 5\n\t\tv[162,2] = 7\n\t\tv[163,2] = 3\n\t\tv[164,2] = 1\n\t\tv[165,2] = 3\n\t\tv[166,2] = 3\n\t\tv[167,2] = 3\n\t\tv[168,2] = 1\n\t\tv[169,2] = 5\n\t\tv[170,2] = 7\n\t\tv[171,2] = 3\n\t\tv[172,2] = 3\n\t\tv[173,2] = 7\n\t\tv[174,2] = 7\n\t\tv[175,2] = 7\n\t\tv[176,2] = 5\n\t\tv[177,2] = 3\n\t\tv[178,2] = 1\n\t\tv[179,2] = 7\n\t\tv[180,2] = 1\n\t\tv[181,2] = 3\n\t\tv[182,2] = 7\n\t\tv[183,2] = 5\n\t\tv[184,2] = 3\n\t\tv[185,2] = 3\n\t\tv[186,2] = 3\n\t\tv[187,2] = 7\n\t\tv[188,2] = 1\n\t\tv[189,2] = 1\n\t\tv[190,2] = 3\n\t\tv[191,2] = 1\n\t\tv[192,2] = 5\n\t\tv[193,2] = 7\n\t\tv[194,2] = 1\n\t\tv[195,2] = 3\n\t\tv[196,2] = 5\n\t\tv[197,2] = 3\n\t\tv[198,2] = 5\n\t\tv[199,2] = 3\n\t\tv[200,2] = 3\n\t\tv[201,2] = 7\n\t\tv[202,2] = 5\n\t\tv[203,2] = 5\n\t\tv[204,2] = 3\n\t\tv[205,2] = 3\n\t\tv[206,2] = 1\n\t\tv[207,2] = 3\n\t\tv[208,2] = 7\n\t\tv[209,2] = 7\n\t\tv[210,2] = 7\n\t\tv[211,2] = 1\n\t\tv[212,2] = 5\n\t\tv[213,2] = 7\n\t\tv[214,2] = 1\n\t\tv[215,2] = 3\n\t\tv[216,2] = 1\n\t\tv[217,2] = 1\n\t\tv[218,2] = 7\n\t\tv[219,2] = 1\n\t\tv[220,2] = 3\n\t\tv[221,2] = 1\n\t\tv[222,2] = 7\n\t\tv[223,2] = 1\n\t\tv[224,2] = 5\n\t\tv[225,2] = 3\n\t\tv[226,2] = 5\n\t\tv[227,2] = 3\n\t\tv[228,2] = 1\n\t\tv[229,2] = 1\n\t\tv[230,2] = 5\n\t\tv[231,2] = 5\n\t\tv[232,2] = 3\n\t\tv[233,2] = 3\n\t\tv[234,2] = 5\n\t\tv[235,2] = 7\n\t\tv[236,2] = 1\n\t\tv[237,2] = 5\n\t\tv[238,2] = 3\n\t\tv[239,2] = 7\n\t\tv[240,2] = 7\n\t\tv[241,2] = 3\n\t\tv[242,2] = 5\n\t\tv[243,2] = 3\n\t\tv[244,2] = 3\n\t\tv[245,2] = 1\n\t\tv[246,2] = 7\n\t\tv[247,2] = 3\n\t\tv[248,2] = 1\n\t\tv[249,2] = 3\n\t\tv[250,2] = 5\n\t\tv[251,2] = 7\n\t\tv[252,2] = 1\n\t\tv[253,2] = 3\n\t\tv[254,2] = 7\n\t\tv[255,2] = 1\n\t\tv[256,2] = 5\n\t\tv[257,2] = 1\n\t\tv[258,2] = 3\n\t\tv[259,2] = 1\n\t\tv[260,2] = 5\n\t\tv[261,2] = 3\n\t\tv[262,2] = 1\n\t\tv[263,2] = 7\n\t\tv[264,2] = 1\n\t\tv[265,2] = 5\n\t\tv[266,2] = 5\n\t\tv[267,2] = 5\n\t\tv[268,2] = 3\n\t\tv[269,2] = 7\n\t\tv[270,2] = 1\n\t\tv[271,2] = 1\n\t\tv[272,2] = 7\n\t\tv[273,2] = 3\n\t\tv[274,2] = 1\n\t\tv[275,2] = 1\n\t\tv[276,2] = 7\n\t\tv[277,2] = 5\n\t\tv[278,2] = 7\n\t\tv[279,2] = 5\n\t\tv[280,2] = 7\n\t\tv[281,2] = 7\n\t\tv[282,2] = 3\n\t\tv[283,2] = 7\n\t\tv[284,2] = 1\n\t\tv[285,2] = 3\n\t\tv[286,2] = 7\n\t\tv[287,2] = 7\n\t\tv[288,2] = 3\n\t\tv[289,2] = 5\n\t\tv[290,2] = 1\n\t\tv[291,2] = 1\n\t\tv[292,2] = 7\n\t\tv[293,2] = 1\n\t\tv[294,2] = 5\n\t\tv[295,2] = 5\n\t\tv[296,2] = 5\n\t\tv[297,2] = 1\n\t\tv[298,2] = 5\n\t\tv[299,2] = 1\n\t\tv[300,2] = 7\n\t\tv[301,2] = 5\n\t\tv[302,2] = 5\n\t\tv[303,2] = 7\n\t\tv[304,2] = 1\n\t\tv[305,2] = 1\n\t\tv[306,2] = 7\n\t\tv[307,2] = 1\n\t\tv[308,2] = 7\n\t\tv[309,2] = 7\n\t\tv[310,2] = 1\n\t\tv[311,2] = 1\n\t\tv[312,2] = 3\n\t\tv[313,2] = 3\n\t\tv[314,2] = 3\n\t\tv[315,2] = 7\n\t\tv[316,2] = 7\n\t\tv[317,2] = 5\n\t\tv[318,2] = 3\n\t\tv[319,2] = 7\n\t\tv[320,2] = 3\n\t\tv[321,2] = 1\n\t\tv[322,2] = 3\n\t\tv[323,2] = 7\n\t\tv[324,2] = 5\n\t\tv[325,2] = 3\n\t\tv[326,2] = 3\n\t\tv[327,2] = 5\n\t\tv[328,2] = 7\n\t\tv[329,2] = 1\n\t\tv[330,2] = 1\n\t\tv[331,2] = 5\n\t\tv[332,2] = 5\n\t\tv[333,2] = 7\n\t\tv[334,2] = 7\n\t\tv[335,2] = 1\n\t\tv[336,2] = 1\n\t\tv[337,2] = 1\n\t\tv[338,2] = 1\n\t\tv[339,2] = 5\n\t\tv[340,2] = 5\n\t\tv[341,2] = 5\n\t\tv[342,2] = 7\n\t\tv[343,2] = 5\n\t\tv[344,2] = 7\n\t\tv[345,2] = 1\n\t\tv[346,2] = 1\n\t\tv[347,2] = 3\n\t\tv[348,2] = 5\n\t\tv[349,2] = 1\n\t\tv[350,2] = 3\n\t\tv[351,2] = 3\n\t\tv[352,2] = 7\n\t\tv[353,2] = 3\n\t\tv[354,2] = 7\n\t\tv[355,2] = 5\n\t\tv[356,2] = 3\n\t\tv[357,2] = 5\n\t\tv[358,2] = 3\n\t\tv[359,2] = 1\n\t\tv[360,2] = 7\n\t\tv[361,2] = 1\n\t\tv[362,2] = 7\n\t\tv[363,2] = 7\n\t\tv[364,2] = 1\n\t\tv[365,2] = 1\n\t\tv[366,2] = 7\n\t\tv[367,2] = 7\n\t\tv[368,2] = 7\n\t\tv[369,2] = 5\n\t\tv[370,2] = 5\n\t\tv[371,2] = 1\n\t\tv[372,2] = 1\n\t\tv[373,2] = 7\n\t\tv[374,2] = 5\n\t\tv[375,2] = 5\n\t\tv[376,2] = 7\n\t\tv[377,2] = 5\n\t\tv[378,2] = 1\n\t\tv[379,2] = 1\n\t\tv[380,2] = 5\n\t\tv[381,2] = 5\n\t\tv[382,2] = 5\n\t\tv[383,2] = 5\n\t\tv[384,2] = 5\n\t\tv[385,2] = 5\n\t\tv[386,2] = 1\n\t\tv[387,2] = 3\n\t\tv[388,2] = 1\n\t\tv[389,2] = 5\n\t\tv[390,2] = 7\n\t\tv[391,2] = 3\n\t\tv[392,2] = 3\n\t\tv[393,2] = 5\n\t\tv[394,2] = 7\n\t\tv[395,2] = 3\n\t\tv[396,2] = 7\n\t\tv[397,2] = 1\n\t\tv[398,2] = 7\n\t\tv[399,2] = 7\n\t\tv[400,2] = 1\n\t\tv[401,2] = 3\n\t\tv[402,2] = 5\n\t\tv[403,2] = 1\n\t\tv[404,2] = 5\n\t\tv[405,2] = 5\n\t\tv[406,2] = 3\n\t\tv[407,2] = 7\n\t\tv[408,2] = 3\n\t\tv[409,2] = 7\n\t\tv[410,2] = 7\n\t\tv[411,2] = 5\n\t\tv[412,2] = 7\n\t\tv[413,2] = 5\n\t\tv[414,2] = 7\n\t\tv[415,2] = 1\n\t\tv[416,2] = 1\n\t\tv[417,2] = 5\n\t\tv[418,2] = 3\n\t\tv[419,2] = 5\n\t\tv[420,2] = 1\n\t\tv[421,2] = 5\n\t\tv[422,2] = 3\n\t\tv[423,2] = 7\n\t\tv[424,2] = 1\n\t\tv[425,2] = 5\n\t\tv[426,2] = 7\n\t\tv[427,2] = 7\n\t\tv[428,2] = 3\n\t\tv[429,2] = 5\n\t\tv[430,2] = 1\n\t\tv[431,2] = 3\n\t\tv[432,2] = 5\n\t\tv[433,2] = 1\n\t\tv[434,2] = 5\n\t\tv[435,2] = 3\n\t\tv[436,2] = 3\n\t\tv[437,2] = 3\n\t\tv[438,2] = 7\n\t\tv[439,2] = 3\n\t\tv[440,2] = 5\n\t\tv[441,2] = 1\n\t\tv[442,2] = 3\n\t\tv[443,2] = 7\n\t\tv[444,2] = 7\n\t\tv[445,2] = 3\n\t\tv[446,2] = 7\n\t\tv[447,2] = 5\n\t\tv[448,2] = 3\n\t\tv[449,2] = 3\n\t\tv[450,2] = 1\n\t\tv[451,2] = 7\n\t\tv[452,2] = 5\n\t\tv[453,2] = 1\n\t\tv[454,2] = 1\n\t\tv[455,2] = 3\n\t\tv[456,2] = 7\n\t\tv[457,2] = 1\n\t\tv[458,2] = 7\n\t\tv[459,2] = 1\n\t\tv[460,2] = 7\n\t\tv[461,2] = 3\n\t\tv[462,2] = 7\n\t\tv[463,2] = 3\n\t\tv[464,2] = 5\n\t\tv[465,2] = 7\n\t\tv[466,2] = 3\n\t\tv[467,2] = 5\n\t\tv[468,2] = 3\n\t\tv[469,2] = 1\n\t\tv[470,2] = 1\n\t\tv[471,2] = 1\n\t\tv[472,2] = 5\n\t\tv[473,2] = 7\n\t\tv[474,2] = 7\n\t\tv[475,2] = 3\n\t\tv[476,2] = 3\n\t\tv[477,2] = 1\n\t\tv[478,2] = 1\n\t\tv[479,2] = 1\n\t\tv[480,2] = 5\n\t\tv[481,2] = 5\n\t\tv[482,2] = 7\n\t\tv[483,2] = 3\n\t\tv[484,2] = 1\n\t\tv[485,2] = 1\n\t\tv[486,2] = 3\n\t\tv[487,2] = 3\n\t\tv[488,2] = 7\n\t\tv[489,2] = 3\n\t\tv[490,2] = 3\n\t\tv[491,2] = 5\n\t\tv[492,2] = 1\n\t\tv[493,2] = 3\n\t\tv[494,2] = 7\n\t\tv[495,2] = 3\n\t\tv[496,2] = 3\n\t\tv[497,2] = 7\n\t\tv[498,2] = 3\n\t\tv[499,2] = 5\n\t\tv[500,2] = 7\n\t\tv[501,2] = 5\n\t\tv[502,2] = 7\n\t\tv[503,2] = 7\n\t\tv[504,2] = 3\n\t\tv[505,2] = 3\n\t\tv[506,2] = 5\n\t\tv[507,2] = 1\n\t\tv[508,2] = 3\n\t\tv[509,2] = 5\n\t\tv[510,2] = 3\n\t\tv[511,2] = 1\n\t\tv[512,2] = 3\n\t\tv[513,2] = 5\n\t\tv[514,2] = 1\n\t\tv[515,2] = 1\n\t\tv[516,2] = 3\n\t\tv[517,2] = 7\n\t\tv[518,2] = 7\n\t\tv[519,2] = 1\n\t\tv[520,2] = 5\n\t\tv[521,2] = 1\n\t\tv[522,2] = 3\n\t\tv[523,2] = 7\n\t\tv[524,2] = 3\n\t\tv[525,2] = 7\n\t\tv[526,2] = 3\n\t\tv[527,2] = 5\n\t\tv[528,2] = 1\n\t\tv[529,2] = 7\n\t\tv[530,2] = 1\n\t\tv[531,2] = 1\n\t\tv[532,2] = 3\n\t\tv[533,2] = 5\n\t\tv[534,2] = 3\n\t\tv[535,2] = 7\n\t\tv[536,2] = 1\n\t\tv[537,2] = 5\n\t\tv[538,2] = 5\n\t\tv[539,2] = 1\n\t\tv[540,2] = 1\n\t\tv[541,2] = 3\n\t\tv[542,2] = 1\n\t\tv[543,2] = 3\n\t\tv[544,2] = 3\n\t\tv[545,2] = 7\n\t\tv[546,2] = 1\n\t\tv[547,2] = 7\n\t\tv[548,2] = 3\n\t\tv[549,2] = 1\n\t\tv[550,2] = 7\n\t\tv[551,2] = 3\n\t\tv[552,2] = 1\n\t\tv[553,2] = 7\n\t\tv[554,2] = 3\n\t\tv[555,2] = 5\n\t\tv[556,2] = 3\n\t\tv[557,2] = 5\n\t\tv[558,2] = 7\n\t\tv[559,2] = 3\n\t\tv[560,2] = 3\n\t\tv[561,2] = 3\n\t\tv[562,2] = 5\n\t\tv[563,2] = 1\n\t\tv[564,2] = 7\n\t\tv[565,2] = 7\n\t\tv[566,2] = 1\n\t\tv[567,2] = 3\n\t\tv[568,2] = 1\n\t\tv[569,2] = 3\n\t\tv[570,2] = 7\n\t\tv[571,2] = 7\n\t\tv[572,2] = 1\n\t\tv[573,2] = 3\n\t\tv[574,2] = 7\n\t\tv[575,2] = 3\n\t\tv[576,2] = 1\n\t\tv[577,2] = 5\n\t\tv[578,2] = 3\n\t\tv[579,2] = 1\n\t\tv[580,2] = 1\n\t\tv[581,2] = 1\n\t\tv[582,2] = 5\n\t\tv[583,2] = 3\n\t\tv[584,2] = 3\n\t\tv[585,2] = 7\n\t\tv[586,2] = 1\n\t\tv[587,2] = 5\n\t\tv[588,2] = 3\n\t\tv[589,2] = 5\n\t\tv[590,2] = 1\n\t\tv[591,2] = 3\n\t\tv[592,2] = 1\n\t\tv[593,2] = 3\n\t\tv[594,2] = 1\n\t\tv[595,2] = 5\n\t\tv[596,2] = 7\n\t\tv[597,2] = 7\n\t\tv[598,2] = 1\n\t\tv[599,2] = 1\n\t\tv[600,2] = 5\n\t\tv[601,2] = 3\n\t\tv[602,2] = 1\n\t\tv[603,2] = 5\n\t\tv[604,2] = 1\n\t\tv[605,2] = 1\n\t\tv[606,2] = 7\n\t\tv[607,2] = 7\n\t\tv[608,2] = 3\n\t\tv[609,2] = 5\n\t\tv[610,2] = 5\n\t\tv[611,2] = 1\n\t\tv[612,2] = 7\n\t\tv[613,2] = 1\n\t\tv[614,2] = 5\n\t\tv[615,2] = 1\n\t\tv[616,2] = 1\n\t\tv[617,2] = 3\n\t\tv[618,2] = 1\n\t\tv[619,2] = 5\n\t\tv[620,2] = 7\n\t\tv[621,2] = 5\n\t\tv[622,2] = 7\n\t\tv[623,2] = 7\n\t\tv[624,2] = 1\n\t\tv[625,2] = 5\n\t\tv[626,2] = 1\n\t\tv[627,2] = 1\n\t\tv[628,2] = 3\n\t\tv[629,2] = 5\n\t\tv[630,2] = 1\n\t\tv[631,2] = 5\n\t\tv[632,2] = 5\n\t\tv[633,2] = 3\n\t\tv[634,2] = 1\n\t\tv[635,2] = 3\n\t\tv[636,2] = 1\n\t\tv[637,2] = 5\n\t\tv[638,2] = 5\n\t\tv[639,2] = 3\n\t\tv[640,2] = 3\n\t\tv[641,2] = 3\n\t\tv[642,2] = 3\n\t\tv[643,2] = 1\n\t\tv[644,2] = 1\n\t\tv[645,2] = 3\n\t\tv[646,2] = 1\n\t\tv[647,2] = 3\n\t\tv[648,2] = 5\n\t\tv[649,2] = 5\n\t\tv[650,2] = 7\n\t\tv[651,2] = 5\n\t\tv[652,2] = 5\n\t\tv[653,2] = 7\n\t\tv[654,2] = 5\n\t\tv[655,2] = 7\n\t\tv[656,2] = 1\n\t\tv[657,2] = 3\n\t\tv[658,2] = 7\n\t\tv[659,2] = 7\n\t\tv[660,2] = 3\n\t\tv[661,2] = 5\n\t\tv[662,2] = 5\n\t\tv[663,2] = 7\n\t\tv[664,2] = 5\n\t\tv[665,2] = 5\n\t\tv[666,2] = 3\n\t\tv[667,2] = 3\n\t\tv[668,2] = 3\n\t\tv[669,2] = 1\n\t\tv[670,2] = 7\n\t\tv[671,2] = 1\n\t\tv[672,2] = 5\n\t\tv[673,2] = 5\n\t\tv[674,2] = 5\n\t\tv[675,2] = 3\n\t\tv[676,2] = 3\n\t\tv[677,2] = 5\n\t\tv[678,2] = 1\n\t\tv[679,2] = 3\n\t\tv[680,2] = 1\n\t\tv[681,2] = 3\n\t\tv[682,2] = 3\n\t\tv[683,2] = 3\n\t\tv[684,2] = 7\n\t\tv[685,2] = 1\n\t\tv[686,2] = 7\n\t\tv[687,2] = 7\n\t\tv[688,2] = 3\n\t\tv[689,2] = 7\n\t\tv[690,2] = 1\n\t\tv[691,2] = 1\n\t\tv[692,2] = 5\n\t\tv[693,2] = 7\n\t\tv[694,2] = 1\n\t\tv[695,2] = 7\n\t\tv[696,2] = 1\n\t\tv[697,2] = 7\n\t\tv[698,2] = 7\n\t\tv[699,2] = 1\n\t\tv[700,2] = 3\n\t\tv[701,2] = 7\n\t\tv[702,2] = 5\n\t\tv[703,2] = 1\n\t\tv[704,2] = 3\n\t\tv[705,2] = 5\n\t\tv[706,2] = 5\n\t\tv[707,2] = 5\n\t\tv[708,2] = 1\n\t\tv[709,2] = 1\n\t\tv[710,2] = 7\n\t\tv[711,2] = 1\n\t\tv[712,2] = 7\n\t\tv[713,2] = 1\n\t\tv[714,2] = 7\n\t\tv[715,2] = 7\n\t\tv[716,2] = 3\n\t\tv[717,2] = 1\n\t\tv[718,2] = 1\n\t\tv[719,2] = 5\n\t\tv[720,2] = 1\n\t\tv[721,2] = 5\n\t\tv[722,2] = 1\n\t\tv[723,2] = 5\n\t\tv[724,2] = 3\n\t\tv[725,2] = 5\n\t\tv[726,2] = 5\n\t\tv[727,2] = 5\n\t\tv[728,2] = 5\n\t\tv[729,2] = 5\n\t\tv[730,2] = 3\n\t\tv[731,2] = 3\n\t\tv[732,2] = 7\n\t\tv[733,2] = 3\n\t\tv[734,2] = 3\n\t\tv[735,2] = 5\n\t\tv[736,2] = 5\n\t\tv[737,2] = 3\n\t\tv[738,2] = 7\n\t\tv[739,2] = 1\n\t\tv[740,2] = 5\n\t\tv[741,2] = 7\n\t\tv[742,2] = 5\n\t\tv[743,2] = 1\n\t\tv[744,2] = 5\n\t\tv[745,2] = 5\n\t\tv[746,2] = 3\n\t\tv[747,2] = 5\n\t\tv[748,2] = 5\n\t\tv[749,2] = 7\n\t\tv[750,2] = 5\n\t\tv[751,2] = 3\n\t\tv[752,2] = 5\n\t\tv[753,2] = 5\n\t\tv[754,2] = 5\n\t\tv[755,2] = 1\n\t\tv[756,2] = 5\n\t\tv[757,2] = 5\n\t\tv[758,2] = 5\n\t\tv[759,2] = 5\n\t\tv[760,2] = 1\n\t\tv[761,2] = 3\n\t\tv[762,2] = 5\n\t\tv[763,2] = 3\n\t\tv[764,2] = 1\n\t\tv[765,2] = 7\n\t\tv[766,2] = 5\n\t\tv[767,2] = 5\n\t\tv[768,2] = 7\n\t\tv[769,2] = 1\n\t\tv[770,2] = 5\n\t\tv[771,2] = 3\n\t\tv[772,2] = 3\n\t\tv[773,2] = 1\n\t\tv[774,2] = 5\n\t\tv[775,2] = 3\n\t\tv[776,2] = 7\n\t\tv[777,2] = 1\n\t\tv[778,2] = 7\n\t\tv[779,2] = 5\n\t\tv[780,2] = 1\n\t\tv[781,2] = 1\n\t\tv[782,2] = 3\n\t\tv[783,2] = 1\n\t\tv[784,2] = 1\n\t\tv[785,2] = 7\n\t\tv[786,2] = 1\n\t\tv[787,2] = 5\n\t\tv[788,2] = 5\n\t\tv[789,2] = 3\n\t\tv[790,2] = 7\n\t\tv[791,2] = 3\n\t\tv[792,2] = 7\n\t\tv[793,2] = 5\n\t\tv[794,2] = 3\n\t\tv[795,2] = 1\n\t\tv[796,2] = 1\n\t\tv[797,2] = 3\n\t\tv[798,2] = 1\n\t\tv[799,2] = 3\n\t\tv[800,2] = 5\n\t\tv[801,2] = 5\n\t\tv[802,2] = 7\n\t\tv[803,2] = 5\n\t\tv[804,2] = 3\n\t\tv[805,2] = 7\n\t\tv[806,2] = 7\n\t\tv[807,2] = 7\n\t\tv[808,2] = 3\n\t\tv[809,2] = 7\n\t\tv[810,2] = 3\n\t\tv[811,2] = 7\n\t\tv[812,2] = 1\n\t\tv[813,2] = 3\n\t\tv[814,2] = 1\n\t\tv[815,2] = 7\n\t\tv[816,2] = 7\n\t\tv[817,2] = 1\n\t\tv[818,2] = 7\n\t\tv[819,2] = 3\n\t\tv[820,2] = 7\n\t\tv[821,2] = 3\n\t\tv[822,2] = 7\n\t\tv[823,2] = 3\n\t\tv[824,2] = 7\n\t\tv[825,2] = 3\n\t\tv[826,2] = 5\n\t\tv[827,2] = 1\n\t\tv[828,2] = 1\n\t\tv[829,2] = 7\n\t\tv[830,2] = 3\n\t\tv[831,2] = 1\n\t\tv[832,2] = 5\n\t\tv[833,2] = 5\n\t\tv[834,2] = 7\n\t\tv[835,2] = 1\n\t\tv[836,2] = 5\n\t\tv[837,2] = 5\n\t\tv[838,2] = 5\n\t\tv[839,2] = 7\n\t\tv[840,2] = 1\n\t\tv[841,2] = 5\n\t\tv[842,2] = 5\n\t\tv[843,2] = 1\n\t\tv[844,2] = 5\n\t\tv[845,2] = 5\n\t\tv[846,2] = 3\n\t\tv[847,2] = 1\n\t\tv[848,2] = 3\n\t\tv[849,2] = 1\n\t\tv[850,2] = 7\n\t\tv[851,2] = 3\n\t\tv[852,2] = 1\n\t\tv[853,2] = 3\n\t\tv[854,2] = 5\n\t\tv[855,2] = 7\n\t\tv[856,2] = 7\n\t\tv[857,2] = 7\n\t\tv[858,2] = 1\n\t\tv[859,2] = 1\n\t\tv[860,2] = 7\n\t\tv[861,2] = 3\n\t\tv[862,2] = 1\n\t\tv[863,2] = 5\n\t\tv[864,2] = 5\n\t\tv[865,2] = 5\n\t\tv[866,2] = 1\n\t\tv[867,2] = 1\n\t\tv[868,2] = 1\n\t\tv[869,2] = 1\n\t\tv[870,2] = 1\n\t\tv[871,2] = 5\n\t\tv[872,2] = 3\n\t\tv[873,2] = 5\n\t\tv[874,2] = 1\n\t\tv[875,2] = 3\n\t\tv[876,2] = 5\n\t\tv[877,2] = 3\n\t\tv[878,2] = 1\n\t\tv[879,2] = 1\n\t\tv[880,2] = 1\n\t\tv[881,2] = 1\n\t\tv[882,2] = 3\n\t\tv[883,2] = 7\n\t\tv[884,2] = 3\n\t\tv[885,2] = 7\n\t\tv[886,2] = 5\n\t\tv[887,2] = 7\n\t\tv[888,2] = 1\n\t\tv[889,2] = 5\n\t\tv[890,2] = 5\n\t\tv[891,2] = 7\n\t\tv[892,2] = 5\n\t\tv[893,2] = 3\n\t\tv[894,2] = 3\n\t\tv[895,2] = 7\n\t\tv[896,2] = 5\n\t\tv[897,2] = 3\n\t\tv[898,2] = 1\n\t\tv[899,2] = 1\n\t\tv[900,2] = 3\n\t\tv[901,2] = 1\n\t\tv[902,2] = 3\n\t\tv[903,2] = 1\n\t\tv[904,2] = 1\n\t\tv[905,2] = 3\n\t\tv[906,2] = 7\n\t\tv[907,2] = 1\n\t\tv[908,2] = 7\n\t\tv[909,2] = 1\n\t\tv[910,2] = 1\n\t\tv[911,2] = 5\n\t\tv[912,2] = 1\n\t\tv[913,2] = 7\n\t\tv[914,2] = 5\n\t\tv[915,2] = 3\n\t\tv[916,2] = 7\n\t\tv[917,2] = 3\n\t\tv[918,2] = 5\n\t\tv[919,2] = 3\n\t\tv[920,2] = 1\n\t\tv[921,2] = 1\n\t\tv[922,2] = 5\n\t\tv[923,2] = 5\n\t\tv[924,2] = 1\n\t\tv[925,2] = 7\n\t\tv[926,2] = 7\n\t\tv[927,2] = 3\n\t\tv[928,2] = 7\n\t\tv[929,2] = 3\n\t\tv[930,2] = 7\n\t\tv[931,2] = 1\n\t\tv[932,2] = 5\n\t\tv[933,2] = 1\n\t\tv[934,2] = 5\n\t\tv[935,2] = 3\n\t\tv[936,2] = 7\n\t\tv[937,2] = 3\n\t\tv[938,2] = 5\n\t\tv[939,2] = 7\n\t\tv[940,2] = 7\n\t\tv[941,2] = 7\n\t\tv[942,2] = 3\n\t\tv[943,2] = 3\n\t\tv[944,2] = 1\n\t\tv[945,2] = 1\n\t\tv[946,2] = 5\n\t\tv[947,2] = 5\n\t\tv[948,2] = 3\n\t\tv[949,2] = 7\n\t\tv[950,2] = 1\n\t\tv[951,2] = 1\n\t\tv[952,2] = 1\n\t\tv[953,2] = 3\n\t\tv[954,2] = 5\n\t\tv[955,2] = 3\n\t\tv[956,2] = 1\n\t\tv[957,2] = 1\n\t\tv[958,2] = 3\n\t\tv[959,2] = 3\n\t\tv[960,2] = 7\n\t\tv[961,2] = 5\n\t\tv[962,2] = 1\n\t\tv[963,2] = 1\n\t\tv[964,2] = 3\n\t\tv[965,2] = 7\n\t\tv[966,2] = 1\n\t\tv[967,2] = 5\n\t\tv[968,2] = 7\n\t\tv[969,2] = 3\n\t\tv[970,2] = 7\n\t\tv[971,2] = 5\n\t\tv[972,2] = 5\n\t\tv[973,2] = 7\n\t\tv[974,2] = 3\n\t\tv[975,2] = 5\n\t\tv[976,2] = 3\n\t\tv[977,2] = 1\n\t\tv[978,2] = 5\n\t\tv[979,2] = 3\n\t\tv[980,2] = 1\n\t\tv[981,2] = 1\n\t\tv[982,2] = 7\n\t\tv[983,2] = 5\n\t\tv[984,2] = 1\n\t\tv[985,2] = 7\n\t\tv[986,2] = 3\n\t\tv[987,2] = 7\n\t\tv[988,2] = 5\n\t\tv[989,2] = 1\n\t\tv[990,2] = 7\n\t\tv[991,2] = 1\n\t\tv[992,2] = 7\n\t\tv[993,2] = 7\n\t\tv[994,2] = 1\n\t\tv[995,2] = 1\n\t\tv[996,2] = 7\n\t\tv[997,2] = 1\n\t\tv[998,2] = 5\n\t\tv[999,2] = 5\n\t\tv[1000,2] = 1\n\t\tv[1001,2] = 1\n\t\tv[1002,2] = 7\n\t\tv[1003,2] = 5\n\t\tv[1004,2] = 7\n\t\tv[1005,2] = 1\n\t\tv[1006,2] = 5\n\t\tv[1007,2] = 3\n\t\tv[1008,2] = 5\n\t\tv[1009,2] = 3\n\t\tv[1010,2] = 3\n\t\tv[1011,2] = 7\n\t\tv[1012,2] = 1\n\t\tv[1013,2] = 5\n\t\tv[1014,2] = 1\n\t\tv[1015,2] = 1\n\t\tv[1016,2] = 5\n\t\tv[1017,2] = 5\n\t\tv[1018,2] = 3\n\t\tv[1019,2] = 3\n\t\tv[1020,2] = 7\n\t\tv[1021,2] = 5\n\t\tv[1022,2] = 5\n\t\tv[1023,2] = 1\n\t\tv[1024,2] = 1\n\t\tv[1025,2] = 1\n\t\tv[1026,2] = 3\n\t\tv[1027,2] = 1\n\t\tv[1028,2] = 5\n\t\tv[1029,2] = 7\n\t\tv[1030,2] = 7\n\t\tv[1031,2] = 1\n\t\tv[1032,2] = 7\n\t\tv[1033,2] = 5\n\t\tv[1034,2] = 7\n\t\tv[1035,2] = 3\n\t\tv[1036,2] = 7\n\t\tv[1037,2] = 3\n\t\tv[1038,2] = 1\n\t\tv[1039,2] = 3\n\t\tv[1040,2] = 7\n\t\tv[1041,2] = 3\n\t\tv[1042,2] = 1\n\t\tv[1043,2] = 5\n\t\tv[1044,2] = 5\n\t\tv[1045,2] = 3\n\t\tv[1046,2] = 5\n\t\tv[1047,2] = 1\n\t\tv[1048,2] = 3\n\t\tv[1049,2] = 5\n\t\tv[1050,2] = 5\n\t\tv[1051,2] = 5\n\t\tv[1052,2] = 1\n\t\tv[1053,2] = 1\n\t\tv[1054,2] = 7\n\t\tv[1055,2] = 7\n\t\tv[1056,2] = 1\n\t\tv[1057,2] = 5\n\t\tv[1058,2] = 5\n\t\tv[1059,2] = 1\n\t\tv[1060,2] = 3\n\t\tv[1061,2] = 5\n\t\tv[1062,2] = 1\n\t\tv[1063,2] = 5\n\t\tv[1064,2] = 3\n\t\tv[1065,2] = 5\n\t\tv[1066,2] = 3\n\t\tv[1067,2] = 3\n\t\tv[1068,2] = 7\n\t\tv[1069,2] = 5\n\t\tv[1070,2] = 7\n\t\tv[1071,2] = 3\n\t\tv[1072,2] = 7\n\t\tv[1073,2] = 3\n\t\tv[1074,2] = 1\n\t\tv[1075,2] = 3\n\t\tv[1076,2] = 7\n\t\tv[1077,2] = 7\n\t\tv[1078,2] = 3\n\t\tv[1079,2] = 3\n\t\tv[1080,2] = 1\n\t\tv[1081,2] = 1\n\t\tv[1082,2] = 3\n\t\tv[1083,2] = 3\n\t\tv[1084,2] = 3\n\t\tv[1085,2] = 3\n\t\tv[1086,2] = 3\n\t\tv[1087,2] = 5\n\t\tv[1088,2] = 5\n\t\tv[1089,2] = 3\n\t\tv[1090,2] = 3\n\t\tv[1091,2] = 3\n\t\tv[1092,2] = 1\n\t\tv[1093,2] = 3\n\t\tv[1094,2] = 5\n\t\tv[1095,2] = 7\n\t\tv[1096,2] = 7\n\t\tv[1097,2] = 1\n\t\tv[1098,2] = 5\n\t\tv[1099,2] = 7\n\t\tv[1100,2] = 3\n\t\tv[1101,2] = 7\n\t\tv[1102,2] = 1\n\t\tv[1103,2] = 1\n\t\tv[1104,2] = 3\n\t\tv[1105,2] = 5\n\t\tv[1106,2] = 7\n\t\tv[1107,2] = 5\n\t\tv[1108,2] = 3\n\t\tv[1109,2] = 3\n\t\tv[1110,2] = 3\n\n\t\tv[5,3] = 1\n\t\tv[6,3] = 7\n\t\tv[7,3] = 9\n\t\tv[8,3] = 13\n\t\tv[9,3] = 11\n\t\tv[10,3] = 1\n\t\tv[11,3] = 3\n\t\tv[12,3] = 7\n\t\tv[13,3] = 9\n\t\tv[14,3] = 5\n\t\tv[15,3] = 13\n\t\tv[16,3] = 13\n\t\tv[17,3] = 11\n\t\tv[18,3] = 3\n\t\tv[19,3] = 15\n\t\tv[20,3] = 5\n\t\tv[21,3] = 3\n\t\tv[22,3] = 15\n\t\tv[23,3] = 7\n\t\tv[24,3] = 9\n\t\tv[25,3] = 13\n\t\tv[26,3] = 9\n\t\tv[27,3] = 1\n\t\tv[28,3] = 11\n\t\tv[29,3] = 7\n\t\tv[30,3] = 5\n\t\tv[31,3] = 15\n\t\tv[32,3] = 1\n\t\tv[33,3] = 15\n\t\tv[34,3] = 11\n\t\tv[35,3] = 5\n\t\tv[36,3] = 11\n\t\tv[37,3] = 1\n\t\tv[38,3] = 7\n\t\tv[39,3] = 9\n\t\tv[40,3] = 7\n\t\tv[41,3] = 7\n\t\tv[42,3] = 1\n\t\tv[43,3] = 15\n\t\tv[44,3] = 15\n\t\tv[45,3] = 15\n\t\tv[46,3] = 13\n\t\tv[47,3] = 3\n\t\tv[48,3] = 3\n\t\tv[49,3] = 15\n\t\tv[50,3] = 5\n\t\tv[51,3] = 9\n\t\tv[52,3] = 7\n\t\tv[53,3] = 13\n\t\tv[54,3] = 3\n\t\tv[55,3] = 7\n\t\tv[56,3] = 5\n\t\tv[57,3] = 11\n\t\tv[58,3] = 9\n\t\tv[59,3] = 1\n\t\tv[60,3] = 9\n\t\tv[61,3] = 1\n\t\tv[62,3] = 5\n\t\tv[63,3] = 7\n\t\tv[64,3] = 13\n\t\tv[65,3] = 9\n\t\tv[66,3] = 9\n\t\tv[67,3] = 1\n\t\tv[68,3] = 7\n\t\tv[69,3] = 3\n\t\tv[70,3] = 5\n\t\tv[71,3] = 1\n\t\tv[72,3] = 11\n\t\tv[73,3] = 11\n\t\tv[74,3] = 13\n\t\tv[75,3] = 7\n\t\tv[76,3] = 7\n\t\tv[77,3] = 9\n\t\tv[78,3] = 9\n\t\tv[79,3] = 1\n\t\tv[80,3] = 1\n\t\tv[81,3] = 3\n\t\tv[82,3] = 9\n\t\tv[83,3] = 15\n\t\tv[84,3] = 1\n\t\tv[85,3] = 5\n\t\tv[86,3] = 13\n\t\tv[87,3] = 1\n\t\tv[88,3] = 9\n\t\tv[89,3] = 9\n\t\tv[90,3] = 9\n\t\tv[91,3] = 9\n\t\tv[92,3] = 9\n\t\tv[93,3] = 13\n\t\tv[94,3] = 11\n\t\tv[95,3] = 3\n\t\tv[96,3] = 5\n\t\tv[97,3] = 11\n\t\tv[98,3] = 11\n\t\tv[99,3] = 13\n\t\tv[100,3] = 5\n\t\tv[101,3] = 3\n\t\tv[102,3] = 15\n\t\tv[103,3] = 1\n\t\tv[104,3] = 11\n\t\tv[105,3] = 11\n\t\tv[106,3] = 7\n\t\tv[107,3] = 13\n\t\tv[108,3] = 15\n\t\tv[109,3] = 11\n\t\tv[110,3] = 13\n\t\tv[111,3] = 9\n\t\tv[112,3] = 11\n\t\tv[113,3] = 15\n\t\tv[114,3] = 15\n\t\tv[115,3] = 13\n\t\tv[116,3] = 3\n\t\tv[117,3] = 15\n\t\tv[118,3] = 7\n\t\tv[119,3] = 9\n\t\tv[120,3] = 11\n\t\tv[121,3] = 13\n\t\tv[122,3] = 11\n\t\tv[123,3] = 9\n\t\tv[124,3] = 9\n\t\tv[125,3] = 5\n\t\tv[126,3] = 13\n\t\tv[127,3] = 9\n\t\tv[128,3] = 1\n\t\tv[129,3] = 13\n\t\tv[130,3] = 7\n\t\tv[131,3] = 7\n\t\tv[132,3] = 7\n\t\tv[133,3] = 7\n\t\tv[134,3] = 7\n\t\tv[135,3] = 5\n\t\tv[136,3] = 9\n\t\tv[137,3] = 7\n\t\tv[138,3] = 13\n\t\tv[139,3] = 11\n\t\tv[140,3] = 9\n\t\tv[141,3] = 11\n\t\tv[142,3] = 15\n\t\tv[143,3] = 3\n\t\tv[144,3] = 13\n\t\tv[145,3] = 11\n\t\tv[146,3] = 1\n\t\tv[147,3] = 11\n\t\tv[148,3] = 3\n\t\tv[149,3] = 3\n\t\tv[150,3] = 9\n\t\tv[151,3] = 11\n\t\tv[152,3] = 1\n\t\tv[153,3] = 7\n\t\tv[154,3] = 1\n\t\tv[155,3] = 15\n\t\tv[156,3] = 15\n\t\tv[157,3] = 3\n\t\tv[158,3] = 1\n\t\tv[159,3] = 9\n\t\tv[160,3] = 1\n\t\tv[161,3] = 7\n\t\tv[162,3] = 13\n\t\tv[163,3] = 11\n\t\tv[164,3] = 3\n\t\tv[165,3] = 13\n\t\tv[166,3] = 11\n\t\tv[167,3] = 7\n\t\tv[168,3] = 3\n\t\tv[169,3] = 3\n\t\tv[170,3] = 5\n\t\tv[171,3] = 13\n\t\tv[172,3] = 11\n\t\tv[173,3] = 5\n\t\tv[174,3] = 11\n\t\tv[175,3] = 1\n\t\tv[176,3] = 3\n\t\tv[177,3] = 9\n\t\tv[178,3] = 7\n\t\tv[179,3] = 15\n\t\tv[180,3] = 7\n\t\tv[181,3] = 5\n\t\tv[182,3] = 13\n\t\tv[183,3] = 7\n\t\tv[184,3] = 9\n\t\tv[185,3] = 13\n\t\tv[186,3] = 15\n\t\tv[187,3] = 13\n\t\tv[188,3] = 9\n\t\tv[189,3] = 7\n\t\tv[190,3] = 15\n\t\tv[191,3] = 7\n\t\tv[192,3] = 9\n\t\tv[193,3] = 5\n\t\tv[194,3] = 11\n\t\tv[195,3] = 11\n\t\tv[196,3] = 13\n\t\tv[197,3] = 13\n\t\tv[198,3] = 9\n\t\tv[199,3] = 3\n\t\tv[200,3] = 5\n\t\tv[201,3] = 13\n\t\tv[202,3] = 9\n\t\tv[203,3] = 11\n\t\tv[204,3] = 15\n\t\tv[205,3] = 11\n\t\tv[206,3] = 7\n\t\tv[207,3] = 1\n\t\tv[208,3] = 7\n\t\tv[209,3] = 13\n\t\tv[210,3] = 3\n\t\tv[211,3] = 13\n\t\tv[212,3] = 3\n\t\tv[213,3] = 13\n\t\tv[214,3] = 9\n\t\tv[215,3] = 15\n\t\tv[216,3] = 7\n\t\tv[217,3] = 13\n\t\tv[218,3] = 13\n\t\tv[219,3] = 3\n\t\tv[220,3] = 13\n\t\tv[221,3] = 15\n\t\tv[222,3] = 15\n\t\tv[223,3] = 11\n\t\tv[224,3] = 9\n\t\tv[225,3] = 13\n\t\tv[226,3] = 9\n\t\tv[227,3] = 15\n\t\tv[228,3] = 1\n\t\tv[229,3] = 1\n\t\tv[230,3] = 15\n\t\tv[231,3] = 11\n\t\tv[232,3] = 11\n\t\tv[233,3] = 7\n\t\tv[234,3] = 1\n\t\tv[235,3] = 11\n\t\tv[236,3] = 13\n\t\tv[237,3] = 9\n\t\tv[238,3] = 13\n\t\tv[239,3] = 3\n\t\tv[240,3] = 5\n\t\tv[241,3] = 11\n\t\tv[242,3] = 13\n\t\tv[243,3] = 9\n\t\tv[244,3] = 9\n\t\tv[245,3] = 13\n\t\tv[246,3] = 1\n\t\tv[247,3] = 11\n\t\tv[248,3] = 15\n\t\tv[249,3] = 13\n\t\tv[250,3] = 3\n\t\tv[251,3] = 13\n\t\tv[252,3] = 7\n\t\tv[253,3] = 15\n\t\tv[254,3] = 1\n\t\tv[255,3] = 15\n\t\tv[256,3] = 3\n\t\tv[257,3] = 3\n\t\tv[258,3] = 11\n\t\tv[259,3] = 7\n\t\tv[260,3] = 13\n\t\tv[261,3] = 7\n\t\tv[262,3] = 7\n\t\tv[263,3] = 9\n\t\tv[264,3] = 7\n\t\tv[265,3] = 5\n\t\tv[266,3] = 15\n\t\tv[267,3] = 9\n\t\tv[268,3] = 5\n\t\tv[269,3] = 5\n\t\tv[270,3] = 7\n\t\tv[271,3] = 15\n\t\tv[272,3] = 13\n\t\tv[273,3] = 15\n\t\tv[274,3] = 5\n\t\tv[275,3] = 15\n\t\tv[276,3] = 5\n\t\tv[277,3] = 3\n\t\tv[278,3] = 1\n\t\tv[279,3] = 11\n\t\tv[280,3] = 7\n\t\tv[281,3] = 1\n\t\tv[282,3] = 5\n\t\tv[283,3] = 7\n\t\tv[284,3] = 9\n\t\tv[285,3] = 3\n\t\tv[286,3] = 11\n\t\tv[287,3] = 1\n\t\tv[288,3] = 15\n\t\tv[289,3] = 1\n\t\tv[290,3] = 3\n\t\tv[291,3] = 15\n\t\tv[292,3] = 11\n\t\tv[293,3] = 13\n\t\tv[294,3] = 5\n\t\tv[295,3] = 13\n\t\tv[296,3] = 1\n\t\tv[297,3] = 7\n\t\tv[298,3] = 1\n\t\tv[299,3] = 15\n\t\tv[300,3] = 7\n\t\tv[301,3] = 5\n\t\tv[302,3] = 1\n\t\tv[303,3] = 1\n\t\tv[304,3] = 15\n\t\tv[305,3] = 13\n\t\tv[306,3] = 11\n\t\tv[307,3] = 11\n\t\tv[308,3] = 13\n\t\tv[309,3] = 5\n\t\tv[310,3] = 11\n\t\tv[311,3] = 7\n\t\tv[312,3] = 9\n\t\tv[313,3] = 7\n\t\tv[314,3] = 1\n\t\tv[315,3] = 5\n\t\tv[316,3] = 3\n\t\tv[317,3] = 9\n\t\tv[318,3] = 5\n\t\tv[319,3] = 5\n\t\tv[320,3] = 11\n\t\tv[321,3] = 5\n\t\tv[322,3] = 1\n\t\tv[323,3] = 7\n\t\tv[324,3] = 1\n\t\tv[325,3] = 11\n\t\tv[326,3] = 7\n\t\tv[327,3] = 9\n\t\tv[328,3] = 13\n\t\tv[329,3] = 15\n\t\tv[330,3] = 13\n\t\tv[331,3] = 3\n\t\tv[332,3] = 1\n\t\tv[333,3] = 11\n\t\tv[334,3] = 13\n\t\tv[335,3] = 15\n\t\tv[336,3] = 1\n\t\tv[337,3] = 1\n\t\tv[338,3] = 11\n\t\tv[339,3] = 9\n\t\tv[340,3] = 13\n\t\tv[341,3] = 3\n\t\tv[342,3] = 13\n\t\tv[343,3] = 11\n\t\tv[344,3] = 15\n\t\tv[345,3] = 13\n\t\tv[346,3] = 9\n\t\tv[347,3] = 9\n\t\tv[348,3] = 9\n\t\tv[349,3] = 5\n\t\tv[350,3] = 5\n\t\tv[351,3] = 5\n\t\tv[352,3] = 5\n\t\tv[353,3] = 1\n\t\tv[354,3] = 15\n\t\tv[355,3] = 5\n\t\tv[356,3] = 9\n\t\tv[357,3] = 11\n\t\tv[358,3] = 7\n\t\tv[359,3] = 15\n\t\tv[360,3] = 5\n\t\tv[361,3] = 3\n\t\tv[362,3] = 13\n\t\tv[363,3] = 5\n\t\tv[364,3] = 3\n\t\tv[365,3] = 11\n\t\tv[366,3] = 5\n\t\tv[367,3] = 1\n\t\tv[368,3] = 11\n\t\tv[369,3] = 13\n\t\tv[370,3] = 9\n\t\tv[371,3] = 11\n\t\tv[372,3] = 3\n\t\tv[373,3] = 7\n\t\tv[374,3] = 13\n\t\tv[375,3] = 15\n\t\tv[376,3] = 1\n\t\tv[377,3] = 7\n\t\tv[378,3] = 11\n\t\tv[379,3] = 1\n\t\tv[380,3] = 13\n\t\tv[381,3] = 1\n\t\tv[382,3] = 15\n\t\tv[383,3] = 1\n\t\tv[384,3] = 9\n\t\tv[385,3] = 7\n\t\tv[386,3] = 3\n\t\tv[387,3] = 9\n\t\tv[388,3] = 11\n\t\tv[389,3] = 1\n\t\tv[390,3] = 9\n\t\tv[391,3] = 13\n\t\tv[392,3] = 13\n\t\tv[393,3] = 3\n\t\tv[394,3] = 11\n\t\tv[395,3] = 7\n\t\tv[396,3] = 9\n\t\tv[397,3] = 1\n\t\tv[398,3] = 7\n\t\tv[399,3] = 15\n\t\tv[400,3] = 9\n\t\tv[401,3] = 1\n\t\tv[402,3] = 5\n\t\tv[403,3] = 13\n\t\tv[404,3] = 5\n\t\tv[405,3] = 11\n\t\tv[406,3] = 3\n\t\tv[407,3] = 9\n\t\tv[408,3] = 15\n\t\tv[409,3] = 11\n\t\tv[410,3] = 13\n\t\tv[411,3] = 5\n\t\tv[412,3] = 1\n\t\tv[413,3] = 7\n\t\tv[414,3] = 7\n\t\tv[415,3] = 5\n\t\tv[416,3] = 13\n\t\tv[417,3] = 7\n\t\tv[418,3] = 7\n\t\tv[419,3] = 9\n\t\tv[420,3] = 5\n\t\tv[421,3] = 11\n\t\tv[422,3] = 11\n\t\tv[423,3] = 1\n\t\tv[424,3] = 1\n\t\tv[425,3] = 15\n\t\tv[426,3] = 3\n\t\tv[427,3] = 13\n\t\tv[428,3] = 9\n\t\tv[429,3] = 13\n\t\tv[430,3] = 9\n\t\tv[431,3] = 9\n\t\tv[432,3] = 11\n\t\tv[433,3] = 5\n\t\tv[434,3] = 5\n\t\tv[435,3] = 13\n\t\tv[436,3] = 15\n\t\tv[437,3] = 3\n\t\tv[438,3] = 9\n\t\tv[439,3] = 15\n\t\tv[440,3] = 3\n\t\tv[441,3] = 11\n\t\tv[442,3] = 11\n\t\tv[443,3] = 15\n\t\tv[444,3] = 15\n\t\tv[445,3] = 3\n\t\tv[446,3] = 11\n\t\tv[447,3] = 15\n\t\tv[448,3] = 15\n\t\tv[449,3] = 3\n\t\tv[450,3] = 1\n\t\tv[451,3] = 3\n\t\tv[452,3] = 1\n\t\tv[453,3] = 3\n\t\tv[454,3] = 3\n\t\tv[455,3] = 1\n\t\tv[456,3] = 3\n\t\tv[457,3] = 13\n\t\tv[458,3] = 1\n\t\tv[459,3] = 11\n\t\tv[460,3] = 5\n\t\tv[461,3] = 15\n\t\tv[462,3] = 7\n\t\tv[463,3] = 15\n\t\tv[464,3] = 9\n\t\tv[465,3] = 1\n\t\tv[466,3] = 7\n\t\tv[467,3] = 1\n\t\tv[468,3] = 9\n\t\tv[469,3] = 11\n\t\tv[470,3] = 15\n\t\tv[471,3] = 1\n\t\tv[472,3] = 13\n\t\tv[473,3] = 9\n\t\tv[474,3] = 13\n\t\tv[475,3] = 11\n\t\tv[476,3] = 7\n\t\tv[477,3] = 3\n\t\tv[478,3] = 7\n\t\tv[479,3] = 3\n\t\tv[480,3] = 13\n\t\tv[481,3] = 7\n\t\tv[482,3] = 9\n\t\tv[483,3] = 7\n\t\tv[484,3] = 7\n\t\tv[485,3] = 3\n\t\tv[486,3] = 3\n\t\tv[487,3] = 9\n\t\tv[488,3] = 9\n\t\tv[489,3] = 7\n\t\tv[490,3] = 5\n\t\tv[491,3] = 11\n\t\tv[492,3] = 13\n\t\tv[493,3] = 13\n\t\tv[494,3] = 7\n\t\tv[495,3] = 7\n\t\tv[496,3] = 15\n\t\tv[497,3] = 9\n\t\tv[498,3] = 5\n\t\tv[499,3] = 5\n\t\tv[500,3] = 3\n\t\tv[501,3] = 3\n\t\tv[502,3] = 13\n\t\tv[503,3] = 3\n\t\tv[504,3] = 9\n\t\tv[505,3] = 3\n\t\tv[506,3] = 1\n\t\tv[507,3] = 11\n\t\tv[508,3] = 1\n\t\tv[509,3] = 3\n\t\tv[510,3] = 11\n\t\tv[511,3] = 15\n\t\tv[512,3] = 11\n\t\tv[513,3] = 11\n\t\tv[514,3] = 11\n\t\tv[515,3] = 9\n\t\tv[516,3] = 13\n\t\tv[517,3] = 7\n\t\tv[518,3] = 9\n\t\tv[519,3] = 15\n\t\tv[520,3] = 9\n\t\tv[521,3] = 11\n\t\tv[522,3] = 1\n\t\tv[523,3] = 3\n\t\tv[524,3] = 3\n\t\tv[525,3] = 9\n\t\tv[526,3] = 7\n\t\tv[527,3] = 15\n\t\tv[528,3] = 13\n\t\tv[529,3] = 13\n\t\tv[530,3] = 7\n\t\tv[531,3] = 15\n\t\tv[532,3] = 9\n\t\tv[533,3] = 13\n\t\tv[534,3] = 9\n\t\tv[535,3] = 15\n\t\tv[536,3] = 13\n\t\tv[537,3] = 15\n\t\tv[538,3] = 9\n\t\tv[539,3] = 13\n\t\tv[540,3] = 1\n\t\tv[541,3] = 11\n\t\tv[542,3] = 7\n\t\tv[543,3] = 11\n\t\tv[544,3] = 3\n\t\tv[545,3] = 13\n\t\tv[546,3] = 5\n\t\tv[547,3] = 1\n\t\tv[548,3] = 7\n\t\tv[549,3] = 15\n\t\tv[550,3] = 3\n\t\tv[551,3] = 13\n\t\tv[552,3] = 7\n\t\tv[553,3] = 13\n\t\tv[554,3] = 13\n\t\tv[555,3] = 11\n\t\tv[556,3] = 3\n\t\tv[557,3] = 5\n\t\tv[558,3] = 3\n\t\tv[559,3] = 13\n\t\tv[560,3] = 11\n\t\tv[561,3] = 9\n\t\tv[562,3] = 9\n\t\tv[563,3] = 3\n\t\tv[564,3] = 11\n\t\tv[565,3] = 11\n\t\tv[566,3] = 7\n\t\tv[567,3] = 9\n\t\tv[568,3] = 13\n\t\tv[569,3] = 11\n\t\tv[570,3] = 7\n\t\tv[571,3] = 15\n\t\tv[572,3] = 13\n\t\tv[573,3] = 7\n\t\tv[574,3] = 5\n\t\tv[575,3] = 3\n\t\tv[576,3] = 1\n\t\tv[577,3] = 5\n\t\tv[578,3] = 15\n\t\tv[579,3] = 15\n\t\tv[580,3] = 3\n\t\tv[581,3] = 11\n\t\tv[582,3] = 1\n\t\tv[583,3] = 7\n\t\tv[584,3] = 3\n\t\tv[585,3] = 15\n\t\tv[586,3] = 11\n\t\tv[587,3] = 5\n\t\tv[588,3] = 5\n\t\tv[589,3] = 3\n\t\tv[590,3] = 5\n\t\tv[591,3] = 5\n\t\tv[592,3] = 1\n\t\tv[593,3] = 15\n\t\tv[594,3] = 5\n\t\tv[595,3] = 1\n\t\tv[596,3] = 5\n\t\tv[597,3] = 3\n\t\tv[598,3] = 7\n\t\tv[599,3] = 5\n\t\tv[600,3] = 11\n\t\tv[601,3] = 3\n\t\tv[602,3] = 13\n\t\tv[603,3] = 9\n\t\tv[604,3] = 13\n\t\tv[605,3] = 15\n\t\tv[606,3] = 5\n\t\tv[607,3] = 3\n\t\tv[608,3] = 5\n\t\tv[609,3] = 9\n\t\tv[610,3] = 5\n\t\tv[611,3] = 3\n\t\tv[612,3] = 11\n\t\tv[613,3] = 1\n\t\tv[614,3] = 13\n\t\tv[615,3] = 9\n\t\tv[616,3] = 15\n\t\tv[617,3] = 3\n\t\tv[618,3] = 5\n\t\tv[619,3] = 11\n\t\tv[620,3] = 9\n\t\tv[621,3] = 1\n\t\tv[622,3] = 3\n\t\tv[623,3] = 15\n\t\tv[624,3] = 9\n\t\tv[625,3] = 9\n\t\tv[626,3] = 9\n\t\tv[627,3] = 11\n\t\tv[628,3] = 7\n\t\tv[629,3] = 5\n\t\tv[630,3] = 13\n\t\tv[631,3] = 1\n\t\tv[632,3] = 15\n\t\tv[633,3] = 3\n\t\tv[634,3] = 13\n\t\tv[635,3] = 9\n\t\tv[636,3] = 13\n\t\tv[637,3] = 5\n\t\tv[638,3] = 1\n\t\tv[639,3] = 5\n\t\tv[640,3] = 1\n\t\tv[641,3] = 13\n\t\tv[642,3] = 13\n\t\tv[643,3] = 7\n\t\tv[644,3] = 7\n\t\tv[645,3] = 1\n\t\tv[646,3] = 9\n\t\tv[647,3] = 5\n\t\tv[648,3] = 11\n\t\tv[649,3] = 9\n\t\tv[650,3] = 11\n\t\tv[651,3] = 13\n\t\tv[652,3] = 3\n\t\tv[653,3] = 15\n\t\tv[654,3] = 15\n\t\tv[655,3] = 13\n\t\tv[656,3] = 15\n\t\tv[657,3] = 7\n\t\tv[658,3] = 5\n\t\tv[659,3] = 7\n\t\tv[660,3] = 9\n\t\tv[661,3] = 7\n\t\tv[662,3] = 9\n\t\tv[663,3] = 9\n\t\tv[664,3] = 9\n\t\tv[665,3] = 11\n\t\tv[666,3] = 9\n\t\tv[667,3] = 3\n\t\tv[668,3] = 11\n\t\tv[669,3] = 15\n\t\tv[670,3] = 13\n\t\tv[671,3] = 13\n\t\tv[672,3] = 5\n\t\tv[673,3] = 9\n\t\tv[674,3] = 15\n\t\tv[675,3] = 1\n\t\tv[676,3] = 1\n\t\tv[677,3] = 9\n\t\tv[678,3] = 5\n\t\tv[679,3] = 13\n\t\tv[680,3] = 3\n\t\tv[681,3] = 13\n\t\tv[682,3] = 15\n\t\tv[683,3] = 3\n\t\tv[684,3] = 1\n\t\tv[685,3] = 3\n\t\tv[686,3] = 11\n\t\tv[687,3] = 13\n\t\tv[688,3] = 1\n\t\tv[689,3] = 15\n\t\tv[690,3] = 9\n\t\tv[691,3] = 9\n\t\tv[692,3] = 3\n\t\tv[693,3] = 1\n\t\tv[694,3] = 9\n\t\tv[695,3] = 1\n\t\tv[696,3] = 9\n\t\tv[697,3] = 1\n\t\tv[698,3] = 13\n\t\tv[699,3] = 11\n\t\tv[700,3] = 15\n\t\tv[701,3] = 7\n\t\tv[702,3] = 11\n\t\tv[703,3] = 15\n\t\tv[704,3] = 13\n\t\tv[705,3] = 15\n\t\tv[706,3] = 1\n\t\tv[707,3] = 9\n\t\tv[708,3] = 9\n\t\tv[709,3] = 7\n\t\tv[710,3] = 3\n\t\tv[711,3] = 5\n\t\tv[712,3] = 11\n\t\tv[713,3] = 7\n\t\tv[714,3] = 3\n\t\tv[715,3] = 9\n\t\tv[716,3] = 5\n\t\tv[717,3] = 15\n\t\tv[718,3] = 7\n\t\tv[719,3] = 5\n\t\tv[720,3] = 3\n\t\tv[721,3] = 13\n\t\tv[722,3] = 7\n\t\tv[723,3] = 1\n\t\tv[724,3] = 1\n\t\tv[725,3] = 9\n\t\tv[726,3] = 15\n\t\tv[727,3] = 15\n\t\tv[728,3] = 15\n\t\tv[729,3] = 11\n\t\tv[730,3] = 3\n\t\tv[731,3] = 5\n\t\tv[732,3] = 15\n\t\tv[733,3] = 13\n\t\tv[734,3] = 7\n\t\tv[735,3] = 15\n\t\tv[736,3] = 15\n\t\tv[737,3] = 11\n\t\tv[738,3] = 11\n\t\tv[739,3] = 9\n\t\tv[740,3] = 5\n\t\tv[741,3] = 15\n\t\tv[742,3] = 9\n\t\tv[743,3] = 7\n\t\tv[744,3] = 3\n\t\tv[745,3] = 13\n\t\tv[746,3] = 1\n\t\tv[747,3] = 1\n\t\tv[748,3] = 5\n\t\tv[749,3] = 1\n\t\tv[750,3] = 3\n\t\tv[751,3] = 1\n\t\tv[752,3] = 7\n\t\tv[753,3] = 1\n\t\tv[754,3] = 1\n\t\tv[755,3] = 5\n\t\tv[756,3] = 1\n\t\tv[757,3] = 11\n\t\tv[758,3] = 11\n\t\tv[759,3] = 9\n\t\tv[760,3] = 9\n\t\tv[761,3] = 5\n\t\tv[762,3] = 13\n\t\tv[763,3] = 7\n\t\tv[764,3] = 7\n\t\tv[765,3] = 7\n\t\tv[766,3] = 1\n\t\tv[767,3] = 1\n\t\tv[768,3] = 9\n\t\tv[769,3] = 9\n\t\tv[770,3] = 11\n\t\tv[771,3] = 11\n\t\tv[772,3] = 15\n\t\tv[773,3] = 7\n\t\tv[774,3] = 5\n\t\tv[775,3] = 5\n\t\tv[776,3] = 3\n\t\tv[777,3] = 11\n\t\tv[778,3] = 1\n\t\tv[779,3] = 3\n\t\tv[780,3] = 7\n\t\tv[781,3] = 13\n\t\tv[782,3] = 7\n\t\tv[783,3] = 7\n\t\tv[784,3] = 7\n\t\tv[785,3] = 3\n\t\tv[786,3] = 15\n\t\tv[787,3] = 15\n\t\tv[788,3] = 11\n\t\tv[789,3] = 9\n\t\tv[790,3] = 3\n\t\tv[791,3] = 9\n\t\tv[792,3] = 3\n\t\tv[793,3] = 15\n\t\tv[794,3] = 13\n\t\tv[795,3] = 5\n\t\tv[796,3] = 3\n\t\tv[797,3] = 3\n\t\tv[798,3] = 3\n\t\tv[799,3] = 5\n\t\tv[800,3] = 9\n\t\tv[801,3] = 15\n\t\tv[802,3] = 9\n\t\tv[803,3] = 9\n\t\tv[804,3] = 1\n\t\tv[805,3] = 5\n\t\tv[806,3] = 9\n\t\tv[807,3] = 9\n\t\tv[808,3] = 15\n\t\tv[809,3] = 5\n\t\tv[810,3] = 15\n\t\tv[811,3] = 7\n\t\tv[812,3] = 9\n\t\tv[813,3] = 1\n\t\tv[814,3] = 9\n\t\tv[815,3] = 9\n\t\tv[816,3] = 5\n\t\tv[817,3] = 11\n\t\tv[818,3] = 5\n\t\tv[819,3] = 15\n\t\tv[820,3] = 15\n\t\tv[821,3] = 11\n\t\tv[822,3] = 7\n\t\tv[823,3] = 7\n\t\tv[824,3] = 7\n\t\tv[825,3] = 1\n\t\tv[826,3] = 1\n\t\tv[827,3] = 11\n\t\tv[828,3] = 11\n\t\tv[829,3] = 13\n\t\tv[830,3] = 15\n\t\tv[831,3] = 3\n\t\tv[832,3] = 13\n\t\tv[833,3] = 5\n\t\tv[834,3] = 1\n\t\tv[835,3] = 7\n\t\tv[836,3] = 1\n\t\tv[837,3] = 11\n\t\tv[838,3] = 3\n\t\tv[839,3] = 13\n\t\tv[840,3] = 15\n\t\tv[841,3] = 3\n\t\tv[842,3] = 5\n\t\tv[843,3] = 3\n\t\tv[844,3] = 5\n\t\tv[845,3] = 7\n\t\tv[846,3] = 3\n\t\tv[847,3] = 9\n\t\tv[848,3] = 9\n\t\tv[849,3] = 5\n\t\tv[850,3] = 1\n\t\tv[851,3] = 7\n\t\tv[852,3] = 11\n\t\tv[853,3] = 9\n\t\tv[854,3] = 3\n\t\tv[855,3] = 5\n\t\tv[856,3] = 11\n\t\tv[857,3] = 13\n\t\tv[858,3] = 13\n\t\tv[859,3] = 13\n\t\tv[860,3] = 9\n\t\tv[861,3] = 15\n\t\tv[862,3] = 5\n\t\tv[863,3] = 7\n\t\tv[864,3] = 1\n\t\tv[865,3] = 15\n\t\tv[866,3] = 11\n\t\tv[867,3] = 9\n\t\tv[868,3] = 15\n\t\tv[869,3] = 15\n\t\tv[870,3] = 13\n\t\tv[871,3] = 13\n\t\tv[872,3] = 13\n\t\tv[873,3] = 1\n\t\tv[874,3] = 11\n\t\tv[875,3] = 9\n\t\tv[876,3] = 15\n\t\tv[877,3] = 9\n\t\tv[878,3] = 5\n\t\tv[879,3] = 15\n\t\tv[880,3] = 5\n\t\tv[881,3] = 7\n\t\tv[882,3] = 3\n\t\tv[883,3] = 11\n\t\tv[884,3] = 3\n\t\tv[885,3] = 15\n\t\tv[886,3] = 7\n\t\tv[887,3] = 13\n\t\tv[888,3] = 11\n\t\tv[889,3] = 7\n\t\tv[890,3] = 3\n\t\tv[891,3] = 7\n\t\tv[892,3] = 13\n\t\tv[893,3] = 5\n\t\tv[894,3] = 13\n\t\tv[895,3] = 15\n\t\tv[896,3] = 5\n\t\tv[897,3] = 13\n\t\tv[898,3] = 9\n\t\tv[899,3] = 1\n\t\tv[900,3] = 15\n\t\tv[901,3] = 11\n\t\tv[902,3] = 5\n\t\tv[903,3] = 5\n\t\tv[904,3] = 1\n\t\tv[905,3] = 11\n\t\tv[906,3] = 3\n\t\tv[907,3] = 3\n\t\tv[908,3] = 7\n\t\tv[909,3] = 1\n\t\tv[910,3] = 9\n\t\tv[911,3] = 7\n\t\tv[912,3] = 15\n\t\tv[913,3] = 9\n\t\tv[914,3] = 9\n\t\tv[915,3] = 3\n\t\tv[916,3] = 11\n\t\tv[917,3] = 15\n\t\tv[918,3] = 7\n\t\tv[919,3] = 1\n\t\tv[920,3] = 3\n\t\tv[921,3] = 1\n\t\tv[922,3] = 1\n\t\tv[923,3] = 1\n\t\tv[924,3] = 9\n\t\tv[925,3] = 1\n\t\tv[926,3] = 5\n\t\tv[927,3] = 15\n\t\tv[928,3] = 15\n\t\tv[929,3] = 7\n\t\tv[930,3] = 5\n\t\tv[931,3] = 5\n\t\tv[932,3] = 7\n\t\tv[933,3] = 9\n\t\tv[934,3] = 7\n\t\tv[935,3] = 15\n\t\tv[936,3] = 13\n\t\tv[937,3] = 13\n\t\tv[938,3] = 11\n\t\tv[939,3] = 1\n\t\tv[940,3] = 9\n\t\tv[941,3] = 11\n\t\tv[942,3] = 1\n\t\tv[943,3] = 13\n\t\tv[944,3] = 1\n\t\tv[945,3] = 7\n\t\tv[946,3] = 15\n\t\tv[947,3] = 15\n\t\tv[948,3] = 5\n\t\tv[949,3] = 5\n\t\tv[950,3] = 1\n\t\tv[951,3] = 11\n\t\tv[952,3] = 3\n\t\tv[953,3] = 9\n\t\tv[954,3] = 11\n\t\tv[955,3] = 9\n\t\tv[956,3] = 9\n\t\tv[957,3] = 9\n\t\tv[958,3] = 1\n\t\tv[959,3] = 9\n\t\tv[960,3] = 3\n\t\tv[961,3] = 5\n\t\tv[962,3] = 15\n\t\tv[963,3] = 1\n\t\tv[964,3] = 1\n\t\tv[965,3] = 9\n\t\tv[966,3] = 7\n\t\tv[967,3] = 3\n\t\tv[968,3] = 3\n\t\tv[969,3] = 1\n\t\tv[970,3] = 9\n\t\tv[971,3] = 9\n\t\tv[972,3] = 11\n\t\tv[973,3] = 9\n\t\tv[974,3] = 9\n\t\tv[975,3] = 13\n\t\tv[976,3] = 13\n\t\tv[977,3] = 3\n\t\tv[978,3] = 13\n\t\tv[979,3] = 11\n\t\tv[980,3] = 13\n\t\tv[981,3] = 5\n\t\tv[982,3] = 1\n\t\tv[983,3] = 5\n\t\tv[984,3] = 5\n\t\tv[985,3] = 9\n\t\tv[986,3] = 9\n\t\tv[987,3] = 3\n\t\tv[988,3] = 13\n\t\tv[989,3] = 13\n\t\tv[990,3] = 9\n\t\tv[991,3] = 15\n\t\tv[992,3] = 9\n\t\tv[993,3] = 11\n\t\tv[994,3] = 7\n\t\tv[995,3] = 11\n\t\tv[996,3] = 9\n\t\tv[997,3] = 13\n\t\tv[998,3] = 9\n\t\tv[999,3] = 1\n\t\tv[1000,3] = 15\n\t\tv[1001,3] = 9\n\t\tv[1002,3] = 7\n\t\tv[1003,3] = 7\n\t\tv[1004,3] = 1\n\t\tv[1005,3] = 7\n\t\tv[1006,3] = 9\n\t\tv[1007,3] = 9\n\t\tv[1008,3] = 15\n\t\tv[1009,3] = 1\n\t\tv[1010,3] = 11\n\t\tv[1011,3] = 1\n\t\tv[1012,3] = 13\n\t\tv[1013,3] = 13\n\t\tv[1014,3] = 15\n\t\tv[1015,3] = 9\n\t\tv[1016,3] = 13\n\t\tv[1017,3] = 7\n\t\tv[1018,3] = 15\n\t\tv[1019,3] = 3\n\t\tv[1020,3] = 9\n\t\tv[1021,3] = 3\n\t\tv[1022,3] = 1\n\t\tv[1023,3] = 13\n\t\tv[1024,3] = 7\n\t\tv[1025,3] = 5\n\t\tv[1026,3] = 9\n\t\tv[1027,3] = 3\n\t\tv[1028,3] = 1\n\t\tv[1029,3] = 7\n\t\tv[1030,3] = 1\n\t\tv[1031,3] = 1\n\t\tv[1032,3] = 13\n\t\tv[1033,3] = 3\n\t\tv[1034,3] = 3\n\t\tv[1035,3] = 11\n\t\tv[1036,3] = 1\n\t\tv[1037,3] = 7\n\t\tv[1038,3] = 13\n\t\tv[1039,3] = 15\n\t\tv[1040,3] = 15\n\t\tv[1041,3] = 5\n\t\tv[1042,3] = 7\n\t\tv[1043,3] = 13\n\t\tv[1044,3] = 13\n\t\tv[1045,3] = 15\n\t\tv[1046,3] = 11\n\t\tv[1047,3] = 13\n\t\tv[1048,3] = 1\n\t\tv[1049,3] = 13\n\t\tv[1050,3] = 13\n\t\tv[1051,3] = 3\n\t\tv[1052,3] = 9\n\t\tv[1053,3] = 15\n\t\tv[1054,3] = 15\n\t\tv[1055,3] = 11\n\t\tv[1056,3] = 15\n\t\tv[1057,3] = 9\n\t\tv[1058,3] = 15\n\t\tv[1059,3] = 1\n\t\tv[1060,3] = 13\n\t\tv[1061,3] = 15\n\t\tv[1062,3] = 1\n\t\tv[1063,3] = 1\n\t\tv[1064,3] = 5\n\t\tv[1065,3] = 11\n\t\tv[1066,3] = 5\n\t\tv[1067,3] = 1\n\t\tv[1068,3] = 11\n\t\tv[1069,3] = 11\n\t\tv[1070,3] = 5\n\t\tv[1071,3] = 3\n\t\tv[1072,3] = 9\n\t\tv[1073,3] = 1\n\t\tv[1074,3] = 3\n\t\tv[1075,3] = 5\n\t\tv[1076,3] = 13\n\t\tv[1077,3] = 9\n\t\tv[1078,3] = 7\n\t\tv[1079,3] = 7\n\t\tv[1080,3] = 1\n\t\tv[1081,3] = 9\n\t\tv[1082,3] = 9\n\t\tv[1083,3] = 15\n\t\tv[1084,3] = 7\n\t\tv[1085,3] = 5\n\t\tv[1086,3] = 5\n\t\tv[1087,3] = 15\n\t\tv[1088,3] = 13\n\t\tv[1089,3] = 9\n\t\tv[1090,3] = 7\n\t\tv[1091,3] = 13\n\t\tv[1092,3] = 3\n\t\tv[1093,3] = 13\n\t\tv[1094,3] = 11\n\t\tv[1095,3] = 13\n\t\tv[1096,3] = 7\n\t\tv[1097,3] = 9\n\t\tv[1098,3] = 13\n\t\tv[1099,3] = 13\n\t\tv[1100,3] = 13\n\t\tv[1101,3] = 15\n\t\tv[1102,3] = 9\n\t\tv[1103,3] = 5\n\t\tv[1104,3] = 5\n\t\tv[1105,3] = 3\n\t\tv[1106,3] = 3\n\t\tv[1107,3] = 3\n\t\tv[1108,3] = 1\n\t\tv[1109,3] = 3\n\t\tv[1110,3] = 15\n\n\t\tv[7,4] = 9\n\t\tv[8,4] = 3\n\t\tv[9,4] = 27\n\t\tv[10,4] = 15\n\t\tv[11,4] = 29\n\t\tv[12,4] = 21\n\t\tv[13,4] = 23\n\t\tv[14,4] = 19\n\t\tv[15,4] = 11\n\t\tv[16,4] = 25\n\t\tv[17,4] = 7\n\t\tv[18,4] = 13\n\t\tv[19,4] = 17\n\t\tv[20,4] = 1\n\t\tv[21,4] = 25\n\t\tv[22,4] = 29\n\t\tv[23,4] = 3\n\t\tv[24,4] = 31\n\t\tv[25,4] = 11\n\t\tv[26,4] = 5\n\t\tv[27,4] = 23\n\t\tv[28,4] = 27\n\t\tv[29,4] = 19\n\t\tv[30,4] = 21\n\t\tv[31,4] = 5\n\t\tv[32,4] = 1\n\t\tv[33,4] = 17\n\t\tv[34,4] = 13\n\t\tv[35,4] = 7\n\t\tv[36,4] = 15\n\t\tv[37,4] = 9\n\t\tv[38,4] = 31\n\t\tv[39,4] = 25\n\t\tv[40,4] = 3\n\t\tv[41,4] = 5\n\t\tv[42,4] = 23\n\t\tv[43,4] = 7\n\t\tv[44,4] = 3\n\t\tv[45,4] = 17\n\t\tv[46,4] = 23\n\t\tv[47,4] = 3\n\t\tv[48,4] = 3\n\t\tv[49,4] = 21\n\t\tv[50,4] = 25\n\t\tv[51,4] = 25\n\t\tv[52,4] = 23\n\t\tv[53,4] = 11\n\t\tv[54,4] = 19\n\t\tv[55,4] = 3\n\t\tv[56,4] = 11\n\t\tv[57,4] = 31\n\t\tv[58,4] = 7\n\t\tv[59,4] = 9\n\t\tv[60,4] = 5\n\t\tv[61,4] = 17\n\t\tv[62,4] = 23\n\t\tv[63,4] = 17\n\t\tv[64,4] = 17\n\t\tv[65,4] = 25\n\t\tv[66,4] = 13\n\t\tv[67,4] = 11\n\t\tv[68,4] = 31\n\t\tv[69,4] = 27\n\t\tv[70,4] = 19\n\t\tv[71,4] = 17\n\t\tv[72,4] = 23\n\t\tv[73,4] = 7\n\t\tv[74,4] = 5\n\t\tv[75,4] = 11\n\t\tv[76,4] = 19\n\t\tv[77,4] = 19\n\t\tv[78,4] = 7\n\t\tv[79,4] = 13\n\t\tv[80,4] = 21\n\t\tv[81,4] = 21\n\t\tv[82,4] = 7\n\t\tv[83,4] = 9\n\t\tv[84,4] = 11\n\t\tv[85,4] = 1\n\t\tv[86,4] = 5\n\t\tv[87,4] = 21\n\t\tv[88,4] = 11\n\t\tv[89,4] = 13\n\t\tv[90,4] = 25\n\t\tv[91,4] = 9\n\t\tv[92,4] = 7\n\t\tv[93,4] = 7\n\t\tv[94,4] = 27\n\t\tv[95,4] = 15\n\t\tv[96,4] = 25\n\t\tv[97,4] = 15\n\t\tv[98,4] = 21\n\t\tv[99,4] = 17\n\t\tv[100,4] = 19\n\t\tv[101,4] = 19\n\t\tv[102,4] = 21\n\t\tv[103,4] = 5\n\t\tv[104,4] = 11\n\t\tv[105,4] = 3\n\t\tv[106,4] = 5\n\t\tv[107,4] = 29\n\t\tv[108,4] = 31\n\t\tv[109,4] = 29\n\t\tv[110,4] = 5\n\t\tv[111,4] = 5\n\t\tv[112,4] = 1\n\t\tv[113,4] = 31\n\t\tv[114,4] = 27\n\t\tv[115,4] = 11\n\t\tv[116,4] = 13\n\t\tv[117,4] = 1\n\t\tv[118,4] = 3\n\t\tv[119,4] = 7\n\t\tv[120,4] = 11\n\t\tv[121,4] = 7\n\t\tv[122,4] = 3\n\t\tv[123,4] = 23\n\t\tv[124,4] = 13\n\t\tv[125,4] = 31\n\t\tv[126,4] = 17\n\t\tv[127,4] = 1\n\t\tv[128,4] = 27\n\t\tv[129,4] = 11\n\t\tv[130,4] = 25\n\t\tv[131,4] = 1\n\t\tv[132,4] = 23\n\t\tv[133,4] = 29\n\t\tv[134,4] = 17\n\t\tv[135,4] = 25\n\t\tv[136,4] = 7\n\t\tv[137,4] = 25\n\t\tv[138,4] = 27\n\t\tv[139,4] = 17\n\t\tv[140,4] = 13\n\t\tv[141,4] = 17\n\t\tv[142,4] = 23\n\t\tv[143,4] = 5\n\t\tv[144,4] = 17\n\t\tv[145,4] = 5\n\t\tv[146,4] = 13\n\t\tv[147,4] = 11\n\t\tv[148,4] = 21\n\t\tv[149,4] = 5\n\t\tv[150,4] = 11\n\t\tv[151,4] = 5\n\t\tv[152,4] = 9\n\t\tv[153,4] = 31\n\t\tv[154,4] = 19\n\t\tv[155,4] = 17\n\t\tv[156,4] = 9\n\t\tv[157,4] = 9\n\t\tv[158,4] = 27\n\t\tv[159,4] = 21\n\t\tv[160,4] = 15\n\t\tv[161,4] = 15\n\t\tv[162,4] = 1\n\t\tv[163,4] = 1\n\t\tv[164,4] = 29\n\t\tv[165,4] = 5\n\t\tv[166,4] = 31\n\t\tv[167,4] = 11\n\t\tv[168,4] = 17\n\t\tv[169,4] = 23\n\t\tv[170,4] = 19\n\t\tv[171,4] = 21\n\t\tv[172,4] = 25\n\t\tv[173,4] = 15\n\t\tv[174,4] = 11\n\t\tv[175,4] = 5\n\t\tv[176,4] = 5\n\t\tv[177,4] = 1\n\t\tv[178,4] = 19\n\t\tv[179,4] = 19\n\t\tv[180,4] = 19\n\t\tv[181,4] = 7\n\t\tv[182,4] = 13\n\t\tv[183,4] = 21\n\t\tv[184,4] = 17\n\t\tv[185,4] = 17\n\t\tv[186,4] = 25\n\t\tv[187,4] = 23\n\t\tv[188,4] = 19\n\t\tv[189,4] = 23\n\t\tv[190,4] = 15\n\t\tv[191,4] = 13\n\t\tv[192,4] = 5\n\t\tv[193,4] = 19\n\t\tv[194,4] = 25\n\t\tv[195,4] = 9\n\t\tv[196,4] = 7\n\t\tv[197,4] = 3\n\t\tv[198,4] = 21\n\t\tv[199,4] = 17\n\t\tv[200,4] = 25\n\t\tv[201,4] = 1\n\t\tv[202,4] = 27\n\t\tv[203,4] = 25\n\t\tv[204,4] = 27\n\t\tv[205,4] = 25\n\t\tv[206,4] = 9\n\t\tv[207,4] = 13\n\t\tv[208,4] = 3\n\t\tv[209,4] = 17\n\t\tv[210,4] = 25\n\t\tv[211,4] = 23\n\t\tv[212,4] = 9\n\t\tv[213,4] = 25\n\t\tv[214,4] = 9\n\t\tv[215,4] = 13\n\t\tv[216,4] = 17\n\t\tv[217,4] = 17\n\t\tv[218,4] = 3\n\t\tv[219,4] = 15\n\t\tv[220,4] = 7\n\t\tv[221,4] = 7\n\t\tv[222,4] = 29\n\t\tv[223,4] = 3\n\t\tv[224,4] = 19\n\t\tv[225,4] = 29\n\t\tv[226,4] = 29\n\t\tv[227,4] = 19\n\t\tv[228,4] = 29\n\t\tv[229,4] = 13\n\t\tv[230,4] = 15\n\t\tv[231,4] = 25\n\t\tv[232,4] = 27\n\t\tv[233,4] = 1\n\t\tv[234,4] = 3\n\t\tv[235,4] = 9\n\t\tv[236,4] = 9\n\t\tv[237,4] = 13\n\t\tv[238,4] = 31\n\t\tv[239,4] = 29\n\t\tv[240,4] = 31\n\t\tv[241,4] = 5\n\t\tv[242,4] = 15\n\t\tv[243,4] = 29\n\t\tv[244,4] = 1\n\t\tv[245,4] = 19\n\t\tv[246,4] = 5\n\t\tv[247,4] = 9\n\t\tv[248,4] = 19\n\t\tv[249,4] = 5\n\t\tv[250,4] = 15\n\t\tv[251,4] = 3\n\t\tv[252,4] = 5\n\t\tv[253,4] = 7\n\t\tv[254,4] = 15\n\t\tv[255,4] = 17\n\t\tv[256,4] = 17\n\t\tv[257,4] = 23\n\t\tv[258,4] = 11\n\t\tv[259,4] = 9\n\t\tv[260,4] = 23\n\t\tv[261,4] = 19\n\t\tv[262,4] = 3\n\t\tv[263,4] = 17\n\t\tv[264,4] = 1\n\t\tv[265,4] = 27\n\t\tv[266,4] = 9\n\t\tv[267,4] = 9\n\t\tv[268,4] = 17\n\t\tv[269,4] = 13\n\t\tv[270,4] = 25\n\t\tv[271,4] = 29\n\t\tv[272,4] = 23\n\t\tv[273,4] = 29\n\t\tv[274,4] = 11\n\t\tv[275,4] = 31\n\t\tv[276,4] = 25\n\t\tv[277,4] = 21\n\t\tv[278,4] = 29\n\t\tv[279,4] = 19\n\t\tv[280,4] = 27\n\t\tv[281,4] = 31\n\t\tv[282,4] = 3\n\t\tv[283,4] = 5\n\t\tv[284,4] = 3\n\t\tv[285,4] = 3\n\t\tv[286,4] = 13\n\t\tv[287,4] = 21\n\t\tv[288,4] = 9\n\t\tv[289,4] = 29\n\t\tv[290,4] = 3\n\t\tv[291,4] = 17\n\t\tv[292,4] = 11\n\t\tv[293,4] = 11\n\t\tv[294,4] = 9\n\t\tv[295,4] = 21\n\t\tv[296,4] = 19\n\t\tv[297,4] = 7\n\t\tv[298,4] = 17\n\t\tv[299,4] = 31\n\t\tv[300,4] = 25\n\t\tv[301,4] = 1\n\t\tv[302,4] = 27\n\t\tv[303,4] = 5\n\t\tv[304,4] = 15\n\t\tv[305,4] = 27\n\t\tv[306,4] = 29\n\t\tv[307,4] = 29\n\t\tv[308,4] = 29\n\t\tv[309,4] = 25\n\t\tv[310,4] = 27\n\t\tv[311,4] = 25\n\t\tv[312,4] = 3\n\t\tv[313,4] = 21\n\t\tv[314,4] = 17\n\t\tv[315,4] = 25\n\t\tv[316,4] = 13\n\t\tv[317,4] = 15\n\t\tv[318,4] = 17\n\t\tv[319,4] = 13\n\t\tv[320,4] = 23\n\t\tv[321,4] = 9\n\t\tv[322,4] = 3\n\t\tv[323,4] = 11\n\t\tv[324,4] = 7\n\t\tv[325,4] = 9\n\t\tv[326,4] = 9\n\t\tv[327,4] = 7\n\t\tv[328,4] = 17\n\t\tv[329,4] = 7\n\t\tv[330,4] = 1\n\t\tv[331,4] = 27\n\t\tv[332,4] = 1\n\t\tv[333,4] = 9\n\t\tv[334,4] = 5\n\t\tv[335,4] = 31\n\t\tv[336,4] = 21\n\t\tv[337,4] = 25\n\t\tv[338,4] = 25\n\t\tv[339,4] = 21\n\t\tv[340,4] = 11\n\t\tv[341,4] = 1\n\t\tv[342,4] = 23\n\t\tv[343,4] = 19\n\t\tv[344,4] = 27\n\t\tv[345,4] = 15\n\t\tv[346,4] = 3\n\t\tv[347,4] = 5\n\t\tv[348,4] = 23\n\t\tv[349,4] = 9\n\t\tv[350,4] = 25\n\t\tv[351,4] = 7\n\t\tv[352,4] = 29\n\t\tv[353,4] = 11\n\t\tv[354,4] = 9\n\t\tv[355,4] = 13\n\t\tv[356,4] = 5\n\t\tv[357,4] = 11\n\t\tv[358,4] = 1\n\t\tv[359,4] = 3\n\t\tv[360,4] = 31\n\t\tv[361,4] = 27\n\t\tv[362,4] = 3\n\t\tv[363,4] = 17\n\t\tv[364,4] = 27\n\t\tv[365,4] = 11\n\t\tv[366,4] = 13\n\t\tv[367,4] = 15\n\t\tv[368,4] = 29\n\t\tv[369,4] = 15\n\t\tv[370,4] = 1\n\t\tv[371,4] = 15\n\t\tv[372,4] = 23\n\t\tv[373,4] = 25\n\t\tv[374,4] = 13\n\t\tv[375,4] = 21\n\t\tv[376,4] = 15\n\t\tv[377,4] = 3\n\t\tv[378,4] = 29\n\t\tv[379,4] = 29\n\t\tv[380,4] = 5\n\t\tv[381,4] = 25\n\t\tv[382,4] = 17\n\t\tv[383,4] = 11\n\t\tv[384,4] = 7\n\t\tv[385,4] = 15\n\t\tv[386,4] = 5\n\t\tv[387,4] = 21\n\t\tv[388,4] = 7\n\t\tv[389,4] = 31\n\t\tv[390,4] = 13\n\t\tv[391,4] = 11\n\t\tv[392,4] = 23\n\t\tv[393,4] = 5\n\t\tv[394,4] = 7\n\t\tv[395,4] = 23\n\t\tv[396,4] = 27\n\t\tv[397,4] = 21\n\t\tv[398,4] = 29\n\t\tv[399,4] = 15\n\t\tv[400,4] = 7\n\t\tv[401,4] = 27\n\t\tv[402,4] = 27\n\t\tv[403,4] = 19\n\t\tv[404,4] = 7\n\t\tv[405,4] = 15\n\t\tv[406,4] = 27\n\t\tv[407,4] = 27\n\t\tv[408,4] = 19\n\t\tv[409,4] = 19\n\t\tv[410,4] = 9\n\t\tv[411,4] = 15\n\t\tv[412,4] = 1\n\t\tv[413,4] = 3\n\t\tv[414,4] = 29\n\t\tv[415,4] = 29\n\t\tv[416,4] = 5\n\t\tv[417,4] = 27\n\t\tv[418,4] = 31\n\t\tv[419,4] = 9\n\t\tv[420,4] = 1\n\t\tv[421,4] = 7\n\t\tv[422,4] = 3\n\t\tv[423,4] = 19\n\t\tv[424,4] = 19\n\t\tv[425,4] = 29\n\t\tv[426,4] = 9\n\t\tv[427,4] = 3\n\t\tv[428,4] = 21\n\t\tv[429,4] = 31\n\t\tv[430,4] = 29\n\t\tv[431,4] = 25\n\t\tv[432,4] = 1\n\t\tv[433,4] = 3\n\t\tv[434,4] = 9\n\t\tv[435,4] = 27\n\t\tv[436,4] = 5\n\t\tv[437,4] = 27\n\t\tv[438,4] = 25\n\t\tv[439,4] = 21\n\t\tv[440,4] = 11\n\t\tv[441,4] = 29\n\t\tv[442,4] = 31\n\t\tv[443,4] = 27\n\t\tv[444,4] = 21\n\t\tv[445,4] = 29\n\t\tv[446,4] = 17\n\t\tv[447,4] = 9\n\t\tv[448,4] = 17\n\t\tv[449,4] = 13\n\t\tv[450,4] = 11\n\t\tv[451,4] = 25\n\t\tv[452,4] = 15\n\t\tv[453,4] = 21\n\t\tv[454,4] = 11\n\t\tv[455,4] = 19\n\t\tv[456,4] = 31\n\t\tv[457,4] = 3\n\t\tv[458,4] = 19\n\t\tv[459,4] = 5\n\t\tv[460,4] = 3\n\t\tv[461,4] = 3\n\t\tv[462,4] = 9\n\t\tv[463,4] = 13\n\t\tv[464,4] = 13\n\t\tv[465,4] = 3\n\t\tv[466,4] = 29\n\t\tv[467,4] = 7\n\t\tv[468,4] = 5\n\t\tv[469,4] = 9\n\t\tv[470,4] = 23\n\t\tv[471,4] = 13\n\t\tv[472,4] = 21\n\t\tv[473,4] = 23\n\t\tv[474,4] = 21\n\t\tv[475,4] = 31\n\t\tv[476,4] = 11\n\t\tv[477,4] = 7\n\t\tv[478,4] = 7\n\t\tv[479,4] = 3\n\t\tv[480,4] = 23\n\t\tv[481,4] = 1\n\t\tv[482,4] = 23\n\t\tv[483,4] = 5\n\t\tv[484,4] = 9\n\t\tv[485,4] = 17\n\t\tv[486,4] = 21\n\t\tv[487,4] = 1\n\t\tv[488,4] = 17\n\t\tv[489,4] = 29\n\t\tv[490,4] = 7\n\t\tv[491,4] = 5\n\t\tv[492,4] = 17\n\t\tv[493,4] = 13\n\t\tv[494,4] = 25\n\t\tv[495,4] = 17\n\t\tv[496,4] = 9\n\t\tv[497,4] = 19\n\t\tv[498,4] = 9\n\t\tv[499,4] = 5\n\t\tv[500,4] = 7\n\t\tv[501,4] = 21\n\t\tv[502,4] = 19\n\t\tv[503,4] = 13\n\t\tv[504,4] = 9\n\t\tv[505,4] = 7\n\t\tv[506,4] = 3\n\t\tv[507,4] = 9\n\t\tv[508,4] = 3\n\t\tv[509,4] = 15\n\t\tv[510,4] = 31\n\t\tv[511,4] = 29\n\t\tv[512,4] = 29\n\t\tv[513,4] = 25\n\t\tv[514,4] = 13\n\t\tv[515,4] = 9\n\t\tv[516,4] = 21\n\t\tv[517,4] = 9\n\t\tv[518,4] = 31\n\t\tv[519,4] = 7\n\t\tv[520,4] = 15\n\t\tv[521,4] = 5\n\t\tv[522,4] = 31\n\t\tv[523,4] = 7\n\t\tv[524,4] = 15\n\t\tv[525,4] = 27\n\t\tv[526,4] = 25\n\t\tv[527,4] = 19\n\t\tv[528,4] = 9\n\t\tv[529,4] = 9\n\t\tv[530,4] = 25\n\t\tv[531,4] = 25\n\t\tv[532,4] = 23\n\t\tv[533,4] = 1\n\t\tv[534,4] = 9\n\t\tv[535,4] = 7\n\t\tv[536,4] = 11\n\t\tv[537,4] = 15\n\t\tv[538,4] = 19\n\t\tv[539,4] = 15\n\t\tv[540,4] = 27\n\t\tv[541,4] = 17\n\t\tv[542,4] = 11\n\t\tv[543,4] = 11\n\t\tv[544,4] = 31\n\t\tv[545,4] = 13\n\t\tv[546,4] = 25\n\t\tv[547,4] = 25\n\t\tv[548,4] = 9\n\t\tv[549,4] = 7\n\t\tv[550,4] = 13\n\t\tv[551,4] = 29\n\t\tv[552,4] = 19\n\t\tv[553,4] = 5\n\t\tv[554,4] = 19\n\t\tv[555,4] = 31\n\t\tv[556,4] = 25\n\t\tv[557,4] = 13\n\t\tv[558,4] = 25\n\t\tv[559,4] = 15\n\t\tv[560,4] = 5\n\t\tv[561,4] = 9\n\t\tv[562,4] = 29\n\t\tv[563,4] = 31\n\t\tv[564,4] = 9\n\t\tv[565,4] = 29\n\t\tv[566,4] = 27\n\t\tv[567,4] = 25\n\t\tv[568,4] = 27\n\t\tv[569,4] = 11\n\t\tv[570,4] = 17\n\t\tv[571,4] = 5\n\t\tv[572,4] = 17\n\t\tv[573,4] = 3\n\t\tv[574,4] = 23\n\t\tv[575,4] = 15\n\t\tv[576,4] = 9\n\t\tv[577,4] = 9\n\t\tv[578,4] = 17\n\t\tv[579,4] = 17\n\t\tv[580,4] = 31\n\t\tv[581,4] = 11\n\t\tv[582,4] = 19\n\t\tv[583,4] = 25\n\t\tv[584,4] = 13\n\t\tv[585,4] = 23\n\t\tv[586,4] = 15\n\t\tv[587,4] = 25\n\t\tv[588,4] = 21\n\t\tv[589,4] = 31\n\t\tv[590,4] = 19\n\t\tv[591,4] = 3\n\t\tv[592,4] = 11\n\t\tv[593,4] = 25\n\t\tv[594,4] = 7\n\t\tv[595,4] = 15\n\t\tv[596,4] = 19\n\t\tv[597,4] = 7\n\t\tv[598,4] = 5\n\t\tv[599,4] = 3\n\t\tv[600,4] = 13\n\t\tv[601,4] = 13\n\t\tv[602,4] = 1\n\t\tv[603,4] = 23\n\t\tv[604,4] = 5\n\t\tv[605,4] = 25\n\t\tv[606,4] = 11\n\t\tv[607,4] = 25\n\t\tv[608,4] = 15\n\t\tv[609,4] = 13\n\t\tv[610,4] = 21\n\t\tv[611,4] = 11\n\t\tv[612,4] = 23\n\t\tv[613,4] = 29\n\t\tv[614,4] = 5\n\t\tv[615,4] = 17\n\t\tv[616,4] = 27\n\t\tv[617,4] = 9\n\t\tv[618,4] = 19\n\t\tv[619,4] = 15\n\t\tv[620,4] = 5\n\t\tv[621,4] = 29\n\t\tv[622,4] = 23\n\t\tv[623,4] = 19\n\t\tv[624,4] = 1\n\t\tv[625,4] = 27\n\t\tv[626,4] = 3\n\t\tv[627,4] = 23\n\t\tv[628,4] = 21\n\t\tv[629,4] = 19\n\t\tv[630,4] = 27\n\t\tv[631,4] = 11\n\t\tv[632,4] = 17\n\t\tv[633,4] = 13\n\t\tv[634,4] = 27\n\t\tv[635,4] = 11\n\t\tv[636,4] = 31\n\t\tv[637,4] = 23\n\t\tv[638,4] = 5\n\t\tv[639,4] = 9\n\t\tv[640,4] = 21\n\t\tv[641,4] = 31\n\t\tv[642,4] = 29\n\t\tv[643,4] = 11\n\t\tv[644,4] = 21\n\t\tv[645,4] = 17\n\t\tv[646,4] = 15\n\t\tv[647,4] = 7\n\t\tv[648,4] = 15\n\t\tv[649,4] = 7\n\t\tv[650,4] = 9\n\t\tv[651,4] = 21\n\t\tv[652,4] = 27\n\t\tv[653,4] = 25\n\t\tv[654,4] = 29\n\t\tv[655,4] = 11\n\t\tv[656,4] = 3\n\t\tv[657,4] = 21\n\t\tv[658,4] = 13\n\t\tv[659,4] = 23\n\t\tv[660,4] = 19\n\t\tv[661,4] = 27\n\t\tv[662,4] = 17\n\t\tv[663,4] = 29\n\t\tv[664,4] = 25\n\t\tv[665,4] = 17\n\t\tv[666,4] = 9\n\t\tv[667,4] = 1\n\t\tv[668,4] = 19\n\t\tv[669,4] = 23\n\t\tv[670,4] = 5\n\t\tv[671,4] = 23\n\t\tv[672,4] = 1\n\t\tv[673,4] = 17\n\t\tv[674,4] = 17\n\t\tv[675,4] = 13\n\t\tv[676,4] = 27\n\t\tv[677,4] = 23\n\t\tv[678,4] = 7\n\t\tv[679,4] = 7\n\t\tv[680,4] = 11\n\t\tv[681,4] = 13\n\t\tv[682,4] = 17\n\t\tv[683,4] = 13\n\t\tv[684,4] = 11\n\t\tv[685,4] = 21\n\t\tv[686,4] = 13\n\t\tv[687,4] = 23\n\t\tv[688,4] = 1\n\t\tv[689,4] = 27\n\t\tv[690,4] = 13\n\t\tv[691,4] = 9\n\t\tv[692,4] = 7\n\t\tv[693,4] = 1\n\t\tv[694,4] = 27\n\t\tv[695,4] = 29\n\t\tv[696,4] = 5\n\t\tv[697,4] = 13\n\t\tv[698,4] = 25\n\t\tv[699,4] = 21\n\t\tv[700,4] = 3\n\t\tv[701,4] = 31\n\t\tv[702,4] = 15\n\t\tv[703,4] = 13\n\t\tv[704,4] = 3\n\t\tv[705,4] = 19\n\t\tv[706,4] = 13\n\t\tv[707,4] = 1\n\t\tv[708,4] = 27\n\t\tv[709,4] = 15\n\t\tv[710,4] = 17\n\t\tv[711,4] = 1\n\t\tv[712,4] = 3\n\t\tv[713,4] = 13\n\t\tv[714,4] = 13\n\t\tv[715,4] = 13\n\t\tv[716,4] = 31\n\t\tv[717,4] = 29\n\t\tv[718,4] = 27\n\t\tv[719,4] = 7\n\t\tv[720,4] = 7\n\t\tv[721,4] = 21\n\t\tv[722,4] = 29\n\t\tv[723,4] = 15\n\t\tv[724,4] = 17\n\t\tv[725,4] = 17\n\t\tv[726,4] = 21\n\t\tv[727,4] = 19\n\t\tv[728,4] = 17\n\t\tv[729,4] = 3\n\t\tv[730,4] = 15\n\t\tv[731,4] = 5\n\t\tv[732,4] = 27\n\t\tv[733,4] = 27\n\t\tv[734,4] = 3\n\t\tv[735,4] = 31\n\t\tv[736,4] = 31\n\t\tv[737,4] = 7\n\t\tv[738,4] = 21\n\t\tv[739,4] = 3\n\t\tv[740,4] = 13\n\t\tv[741,4] = 11\n\t\tv[742,4] = 17\n\t\tv[743,4] = 27\n\t\tv[744,4] = 25\n\t\tv[745,4] = 1\n\t\tv[746,4] = 9\n\t\tv[747,4] = 7\n\t\tv[748,4] = 29\n\t\tv[749,4] = 27\n\t\tv[750,4] = 21\n\t\tv[751,4] = 23\n\t\tv[752,4] = 13\n\t\tv[753,4] = 25\n\t\tv[754,4] = 29\n\t\tv[755,4] = 15\n\t\tv[756,4] = 17\n\t\tv[757,4] = 29\n\t\tv[758,4] = 9\n\t\tv[759,4] = 15\n\t\tv[760,4] = 3\n\t\tv[761,4] = 21\n\t\tv[762,4] = 15\n\t\tv[763,4] = 17\n\t\tv[764,4] = 17\n\t\tv[765,4] = 31\n\t\tv[766,4] = 9\n\t\tv[767,4] = 9\n\t\tv[768,4] = 23\n\t\tv[769,4] = 19\n\t\tv[770,4] = 25\n\t\tv[771,4] = 3\n\t\tv[772,4] = 1\n\t\tv[773,4] = 11\n\t\tv[774,4] = 27\n\t\tv[775,4] = 29\n\t\tv[776,4] = 1\n\t\tv[777,4] = 31\n\t\tv[778,4] = 29\n\t\tv[779,4] = 25\n\t\tv[780,4] = 29\n\t\tv[781,4] = 1\n\t\tv[782,4] = 23\n\t\tv[783,4] = 29\n\t\tv[784,4] = 25\n\t\tv[785,4] = 13\n\t\tv[786,4] = 3\n\t\tv[787,4] = 31\n\t\tv[788,4] = 25\n\t\tv[789,4] = 5\n\t\tv[790,4] = 5\n\t\tv[791,4] = 11\n\t\tv[792,4] = 3\n\t\tv[793,4] = 21\n\t\tv[794,4] = 9\n\t\tv[795,4] = 23\n\t\tv[796,4] = 7\n\t\tv[797,4] = 11\n\t\tv[798,4] = 23\n\t\tv[799,4] = 11\n\t\tv[800,4] = 1\n\t\tv[801,4] = 1\n\t\tv[802,4] = 3\n\t\tv[803,4] = 23\n\t\tv[804,4] = 25\n\t\tv[805,4] = 23\n\t\tv[806,4] = 1\n\t\tv[807,4] = 23\n\t\tv[808,4] = 3\n\t\tv[809,4] = 27\n\t\tv[810,4] = 9\n\t\tv[811,4] = 27\n\t\tv[812,4] = 3\n\t\tv[813,4] = 23\n\t\tv[814,4] = 25\n\t\tv[815,4] = 19\n\t\tv[816,4] = 29\n\t\tv[817,4] = 29\n\t\tv[818,4] = 13\n\t\tv[819,4] = 27\n\t\tv[820,4] = 5\n\t\tv[821,4] = 9\n\t\tv[822,4] = 29\n\t\tv[823,4] = 29\n\t\tv[824,4] = 13\n\t\tv[825,4] = 17\n\t\tv[826,4] = 3\n\t\tv[827,4] = 23\n\t\tv[828,4] = 19\n\t\tv[829,4] = 7\n\t\tv[830,4] = 13\n\t\tv[831,4] = 3\n\t\tv[832,4] = 19\n\t\tv[833,4] = 23\n\t\tv[834,4] = 5\n\t\tv[835,4] = 29\n\t\tv[836,4] = 29\n\t\tv[837,4] = 13\n\t\tv[838,4] = 13\n\t\tv[839,4] = 5\n\t\tv[840,4] = 19\n\t\tv[841,4] = 5\n\t\tv[842,4] = 17\n\t\tv[843,4] = 9\n\t\tv[844,4] = 11\n\t\tv[845,4] = 11\n\t\tv[846,4] = 29\n\t\tv[847,4] = 27\n\t\tv[848,4] = 23\n\t\tv[849,4] = 19\n\t\tv[850,4] = 17\n\t\tv[851,4] = 25\n\t\tv[852,4] = 13\n\t\tv[853,4] = 1\n\t\tv[854,4] = 13\n\t\tv[855,4] = 3\n\t\tv[856,4] = 11\n\t\tv[857,4] = 1\n\t\tv[858,4] = 17\n\t\tv[859,4] = 29\n\t\tv[860,4] = 1\n\t\tv[861,4] = 13\n\t\tv[862,4] = 17\n\t\tv[863,4] = 9\n\t\tv[864,4] = 17\n\t\tv[865,4] = 21\n\t\tv[866,4] = 1\n\t\tv[867,4] = 11\n\t\tv[868,4] = 1\n\t\tv[869,4] = 1\n\t\tv[870,4] = 25\n\t\tv[871,4] = 5\n\t\tv[872,4] = 7\n\t\tv[873,4] = 29\n\t\tv[874,4] = 29\n\t\tv[875,4] = 19\n\t\tv[876,4] = 19\n\t\tv[877,4] = 1\n\t\tv[878,4] = 29\n\t\tv[879,4] = 13\n\t\tv[880,4] = 3\n\t\tv[881,4] = 1\n\t\tv[882,4] = 31\n\t\tv[883,4] = 15\n\t\tv[884,4] = 13\n\t\tv[885,4] = 3\n\t\tv[886,4] = 1\n\t\tv[887,4] = 11\n\t\tv[888,4] = 19\n\t\tv[889,4] = 5\n\t\tv[890,4] = 29\n\t\tv[891,4] = 13\n\t\tv[892,4] = 29\n\t\tv[893,4] = 23\n\t\tv[894,4] = 3\n\t\tv[895,4] = 1\n\t\tv[896,4] = 31\n\t\tv[897,4] = 13\n\t\tv[898,4] = 19\n\t\tv[899,4] = 17\n\t\tv[900,4] = 5\n\t\tv[901,4] = 5\n\t\tv[902,4] = 1\n\t\tv[903,4] = 29\n\t\tv[904,4] = 23\n\t\tv[905,4] = 3\n\t\tv[906,4] = 19\n\t\tv[907,4] = 25\n\t\tv[908,4] = 19\n\t\tv[909,4] = 27\n\t\tv[910,4] = 9\n\t\tv[911,4] = 27\n\t\tv[912,4] = 13\n\t\tv[913,4] = 15\n\t\tv[914,4] = 29\n\t\tv[915,4] = 23\n\t\tv[916,4] = 13\n\t\tv[917,4] = 25\n\t\tv[918,4] = 25\n\t\tv[919,4] = 17\n\t\tv[920,4] = 19\n\t\tv[921,4] = 17\n\t\tv[922,4] = 15\n\t\tv[923,4] = 27\n\t\tv[924,4] = 3\n\t\tv[925,4] = 25\n\t\tv[926,4] = 17\n\t\tv[927,4] = 27\n\t\tv[928,4] = 3\n\t\tv[929,4] = 27\n\t\tv[930,4] = 31\n\t\tv[931,4] = 23\n\t\tv[932,4] = 13\n\t\tv[933,4] = 31\n\t\tv[934,4] = 11\n\t\tv[935,4] = 15\n\t\tv[936,4] = 7\n\t\tv[937,4] = 21\n\t\tv[938,4] = 19\n\t\tv[939,4] = 27\n\t\tv[940,4] = 19\n\t\tv[941,4] = 21\n\t\tv[942,4] = 29\n\t\tv[943,4] = 7\n\t\tv[944,4] = 31\n\t\tv[945,4] = 13\n\t\tv[946,4] = 9\n\t\tv[947,4] = 9\n\t\tv[948,4] = 7\n\t\tv[949,4] = 21\n\t\tv[950,4] = 13\n\t\tv[951,4] = 11\n\t\tv[952,4] = 9\n\t\tv[953,4] = 11\n\t\tv[954,4] = 29\n\t\tv[955,4] = 19\n\t\tv[956,4] = 11\n\t\tv[957,4] = 19\n\t\tv[958,4] = 21\n\t\tv[959,4] = 5\n\t\tv[960,4] = 29\n\t\tv[961,4] = 13\n\t\tv[962,4] = 7\n\t\tv[963,4] = 19\n\t\tv[964,4] = 19\n\t\tv[965,4] = 27\n\t\tv[966,4] = 23\n\t\tv[967,4] = 31\n\t\tv[968,4] = 1\n\t\tv[969,4] = 27\n\t\tv[970,4] = 21\n\t\tv[971,4] = 7\n\t\tv[972,4] = 3\n\t\tv[973,4] = 7\n\t\tv[974,4] = 11\n\t\tv[975,4] = 23\n\t\tv[976,4] = 13\n\t\tv[977,4] = 29\n\t\tv[978,4] = 11\n\t\tv[979,4] = 31\n\t\tv[980,4] = 19\n\t\tv[981,4] = 1\n\t\tv[982,4] = 5\n\t\tv[983,4] = 5\n\t\tv[984,4] = 11\n\t\tv[985,4] = 5\n\t\tv[986,4] = 3\n\t\tv[987,4] = 27\n\t\tv[988,4] = 5\n\t\tv[989,4] = 7\n\t\tv[990,4] = 11\n\t\tv[991,4] = 31\n\t\tv[992,4] = 1\n\t\tv[993,4] = 27\n\t\tv[994,4] = 31\n\t\tv[995,4] = 31\n\t\tv[996,4] = 23\n\t\tv[997,4] = 5\n\t\tv[998,4] = 21\n\t\tv[999,4] = 27\n\t\tv[1000,4] = 9\n\t\tv[1001,4] = 25\n\t\tv[1002,4] = 3\n\t\tv[1003,4] = 15\n\t\tv[1004,4] = 19\n\t\tv[1005,4] = 1\n\t\tv[1006,4] = 19\n\t\tv[1007,4] = 9\n\t\tv[1008,4] = 5\n\t\tv[1009,4] = 25\n\t\tv[1010,4] = 21\n\t\tv[1011,4] = 15\n\t\tv[1012,4] = 25\n\t\tv[1013,4] = 29\n\t\tv[1014,4] = 15\n\t\tv[1015,4] = 21\n\t\tv[1016,4] = 11\n\t\tv[1017,4] = 19\n\t\tv[1018,4] = 15\n\t\tv[1019,4] = 3\n\t\tv[1020,4] = 7\n\t\tv[1021,4] = 13\n\t\tv[1022,4] = 11\n\t\tv[1023,4] = 25\n\t\tv[1024,4] = 17\n\t\tv[1025,4] = 1\n\t\tv[1026,4] = 5\n\t\tv[1027,4] = 31\n\t\tv[1028,4] = 13\n\t\tv[1029,4] = 29\n\t\tv[1030,4] = 23\n\t\tv[1031,4] = 9\n\t\tv[1032,4] = 5\n\t\tv[1033,4] = 29\n\t\tv[1034,4] = 7\n\t\tv[1035,4] = 17\n\t\tv[1036,4] = 27\n\t\tv[1037,4] = 7\n\t\tv[1038,4] = 17\n\t\tv[1039,4] = 31\n\t\tv[1040,4] = 9\n\t\tv[1041,4] = 31\n\t\tv[1042,4] = 9\n\t\tv[1043,4] = 9\n\t\tv[1044,4] = 7\n\t\tv[1045,4] = 21\n\t\tv[1046,4] = 3\n\t\tv[1047,4] = 3\n\t\tv[1048,4] = 3\n\t\tv[1049,4] = 9\n\t\tv[1050,4] = 11\n\t\tv[1051,4] = 21\n\t\tv[1052,4] = 11\n\t\tv[1053,4] = 31\n\t\tv[1054,4] = 9\n\t\tv[1055,4] = 25\n\t\tv[1056,4] = 5\n\t\tv[1057,4] = 1\n\t\tv[1058,4] = 31\n\t\tv[1059,4] = 13\n\t\tv[1060,4] = 29\n\t\tv[1061,4] = 9\n\t\tv[1062,4] = 29\n\t\tv[1063,4] = 1\n\t\tv[1064,4] = 11\n\t\tv[1065,4] = 19\n\t\tv[1066,4] = 7\n\t\tv[1067,4] = 27\n\t\tv[1068,4] = 13\n\t\tv[1069,4] = 31\n\t\tv[1070,4] = 7\n\t\tv[1071,4] = 31\n\t\tv[1072,4] = 7\n\t\tv[1073,4] = 25\n\t\tv[1074,4] = 23\n\t\tv[1075,4] = 21\n\t\tv[1076,4] = 29\n\t\tv[1077,4] = 11\n\t\tv[1078,4] = 11\n\t\tv[1079,4] = 13\n\t\tv[1080,4] = 11\n\t\tv[1081,4] = 27\n\t\tv[1082,4] = 1\n\t\tv[1083,4] = 23\n\t\tv[1084,4] = 31\n\t\tv[1085,4] = 21\n\t\tv[1086,4] = 23\n\t\tv[1087,4] = 21\n\t\tv[1088,4] = 19\n\t\tv[1089,4] = 31\n\t\tv[1090,4] = 5\n\t\tv[1091,4] = 31\n\t\tv[1092,4] = 25\n\t\tv[1093,4] = 25\n\t\tv[1094,4] = 19\n\t\tv[1095,4] = 17\n\t\tv[1096,4] = 11\n\t\tv[1097,4] = 25\n\t\tv[1098,4] = 7\n\t\tv[1099,4] = 13\n\t\tv[1100,4] = 1\n\t\tv[1101,4] = 29\n\t\tv[1102,4] = 17\n\t\tv[1103,4] = 23\n\t\tv[1104,4] = 15\n\t\tv[1105,4] = 7\n\t\tv[1106,4] = 29\n\t\tv[1107,4] = 17\n\t\tv[1108,4] = 13\n\t\tv[1109,4] = 3\n\t\tv[1110,4] = 17\n\n\t\tv[13,5] = 37\n\t\tv[14,5] = 33\n\t\tv[15,5] = 7\n\t\tv[16,5] = 5\n\t\tv[17,5] = 11\n\t\tv[18,5] = 39\n\t\tv[19,5] = 63\n\t\tv[20,5] = 59\n\t\tv[21,5] = 17\n\t\tv[22,5] = 15\n\t\tv[23,5] = 23\n\t\tv[24,5] = 29\n\t\tv[25,5] = 3\n\t\tv[26,5] = 21\n\t\tv[27,5] = 13\n\t\tv[28,5] = 31\n\t\tv[29,5] = 25\n\t\tv[30,5] = 9\n\t\tv[31,5] = 49\n\t\tv[32,5] = 33\n\t\tv[33,5] = 19\n\t\tv[34,5] = 29\n\t\tv[35,5] = 11\n\t\tv[36,5] = 19\n\t\tv[37,5] = 27\n\t\tv[38,5] = 15\n\t\tv[39,5] = 25\n\t\tv[40,5] = 63\n\t\tv[41,5] = 55\n\t\tv[42,5] = 17\n\t\tv[43,5] = 63\n\t\tv[44,5] = 49\n\t\tv[45,5] = 19\n\t\tv[46,5] = 41\n\t\tv[47,5] = 59\n\t\tv[48,5] = 3\n\t\tv[49,5] = 57\n\t\tv[50,5] = 33\n\t\tv[51,5] = 49\n\t\tv[52,5] = 53\n\t\tv[53,5] = 57\n\t\tv[54,5] = 57\n\t\tv[55,5] = 39\n\t\tv[56,5] = 21\n\t\tv[57,5] = 7\n\t\tv[58,5] = 53\n\t\tv[59,5] = 9\n\t\tv[60,5] = 55\n\t\tv[61,5] = 15\n\t\tv[62,5] = 59\n\t\tv[63,5] = 19\n\t\tv[64,5] = 49\n\t\tv[65,5] = 31\n\t\tv[66,5] = 3\n\t\tv[67,5] = 39\n\t\tv[68,5] = 5\n\t\tv[69,5] = 5\n\t\tv[70,5] = 41\n\t\tv[71,5] = 9\n\t\tv[72,5] = 19\n\t\tv[73,5] = 9\n\t\tv[74,5] = 57\n\t\tv[75,5] = 25\n\t\tv[76,5] = 1\n\t\tv[77,5] = 15\n\t\tv[78,5] = 51\n\t\tv[79,5] = 11\n\t\tv[80,5] = 19\n\t\tv[81,5] = 61\n\t\tv[82,5] = 53\n\t\tv[83,5] = 29\n\t\tv[84,5] = 19\n\t\tv[85,5] = 11\n\t\tv[86,5] = 9\n\t\tv[87,5] = 21\n\t\tv[88,5] = 19\n\t\tv[89,5] = 43\n\t\tv[90,5] = 13\n\t\tv[91,5] = 13\n\t\tv[92,5] = 41\n\t\tv[93,5] = 25\n\t\tv[94,5] = 31\n\t\tv[95,5] = 9\n\t\tv[96,5] = 11\n\t\tv[97,5] = 19\n\t\tv[98,5] = 5\n\t\tv[99,5] = 53\n\t\tv[100,5] = 37\n\t\tv[101,5] = 7\n\t\tv[102,5] = 51\n\t\tv[103,5] = 45\n\t\tv[104,5] = 7\n\t\tv[105,5] = 7\n\t\tv[106,5] = 61\n\t\tv[107,5] = 23\n\t\tv[108,5] = 45\n\t\tv[109,5] = 7\n\t\tv[110,5] = 59\n\t\tv[111,5] = 41\n\t\tv[112,5] = 1\n\t\tv[113,5] = 29\n\t\tv[114,5] = 61\n\t\tv[115,5] = 37\n\t\tv[116,5] = 27\n\t\tv[117,5] = 47\n\t\tv[118,5] = 15\n\t\tv[119,5] = 31\n\t\tv[120,5] = 35\n\t\tv[121,5] = 31\n\t\tv[122,5] = 17\n\t\tv[123,5] = 51\n\t\tv[124,5] = 13\n\t\tv[125,5] = 25\n\t\tv[126,5] = 45\n\t\tv[127,5] = 5\n\t\tv[128,5] = 5\n\t\tv[129,5] = 33\n\t\tv[130,5] = 39\n\t\tv[131,5] = 5\n\t\tv[132,5] = 47\n\t\tv[133,5] = 29\n\t\tv[134,5] = 35\n\t\tv[135,5] = 47\n\t\tv[136,5] = 63\n\t\tv[137,5] = 45\n\t\tv[138,5] = 37\n\t\tv[139,5] = 47\n\t\tv[140,5] = 59\n\t\tv[141,5] = 21\n\t\tv[142,5] = 59\n\t\tv[143,5] = 33\n\t\tv[144,5] = 51\n\t\tv[145,5] = 9\n\t\tv[146,5] = 27\n\t\tv[147,5] = 13\n\t\tv[148,5] = 25\n\t\tv[149,5] = 43\n\t\tv[150,5] = 3\n\t\tv[151,5] = 17\n\t\tv[152,5] = 21\n\t\tv[153,5] = 59\n\t\tv[154,5] = 61\n\t\tv[155,5] = 27\n\t\tv[156,5] = 47\n\t\tv[157,5] = 57\n\t\tv[158,5] = 11\n\t\tv[159,5] = 17\n\t\tv[160,5] = 39\n\t\tv[161,5] = 1\n\t\tv[162,5] = 63\n\t\tv[163,5] = 21\n\t\tv[164,5] = 59\n\t\tv[165,5] = 17\n\t\tv[166,5] = 13\n\t\tv[167,5] = 31\n\t\tv[168,5] = 3\n\t\tv[169,5] = 31\n\t\tv[170,5] = 7\n\t\tv[171,5] = 9\n\t\tv[172,5] = 27\n\t\tv[173,5] = 37\n\t\tv[174,5] = 23\n\t\tv[175,5] = 31\n\t\tv[176,5] = 9\n\t\tv[177,5] = 45\n\t\tv[178,5] = 43\n\t\tv[179,5] = 31\n\t\tv[180,5] = 63\n\t\tv[181,5] = 21\n\t\tv[182,5] = 39\n\t\tv[183,5] = 51\n\t\tv[184,5] = 27\n\t\tv[185,5] = 7\n\t\tv[186,5] = 53\n\t\tv[187,5] = 11\n\t\tv[188,5] = 1\n\t\tv[189,5] = 59\n\t\tv[190,5] = 39\n\t\tv[191,5] = 23\n\t\tv[192,5] = 49\n\t\tv[193,5] = 23\n\t\tv[194,5] = 7\n\t\tv[195,5] = 55\n\t\tv[196,5] = 59\n\t\tv[197,5] = 3\n\t\tv[198,5] = 19\n\t\tv[199,5] = 35\n\t\tv[200,5] = 13\n\t\tv[201,5] = 9\n\t\tv[202,5] = 13\n\t\tv[203,5] = 15\n\t\tv[204,5] = 23\n\t\tv[205,5] = 9\n\t\tv[206,5] = 7\n\t\tv[207,5] = 43\n\t\tv[208,5] = 55\n\t\tv[209,5] = 3\n\t\tv[210,5] = 19\n\t\tv[211,5] = 9\n\t\tv[212,5] = 27\n\t\tv[213,5] = 33\n\t\tv[214,5] = 27\n\t\tv[215,5] = 49\n\t\tv[216,5] = 23\n\t\tv[217,5] = 47\n\t\tv[218,5] = 19\n\t\tv[219,5] = 7\n\t\tv[220,5] = 11\n\t\tv[221,5] = 55\n\t\tv[222,5] = 27\n\t\tv[223,5] = 35\n\t\tv[224,5] = 5\n\t\tv[225,5] = 5\n\t\tv[226,5] = 55\n\t\tv[227,5] = 35\n\t\tv[228,5] = 37\n\t\tv[229,5] = 9\n\t\tv[230,5] = 33\n\t\tv[231,5] = 29\n\t\tv[232,5] = 47\n\t\tv[233,5] = 25\n\t\tv[234,5] = 11\n\t\tv[235,5] = 47\n\t\tv[236,5] = 53\n\t\tv[237,5] = 61\n\t\tv[238,5] = 59\n\t\tv[239,5] = 3\n\t\tv[240,5] = 53\n\t\tv[241,5] = 47\n\t\tv[242,5] = 5\n\t\tv[243,5] = 19\n\t\tv[244,5] = 59\n\t\tv[245,5] = 5\n\t\tv[246,5] = 47\n\t\tv[247,5] = 23\n\t\tv[248,5] = 45\n\t\tv[249,5] = 53\n\t\tv[250,5] = 3\n\t\tv[251,5] = 49\n\t\tv[252,5] = 61\n\t\tv[253,5] = 47\n\t\tv[254,5] = 39\n\t\tv[255,5] = 29\n\t\tv[256,5] = 17\n\t\tv[257,5] = 57\n\t\tv[258,5] = 5\n\t\tv[259,5] = 17\n\t\tv[260,5] = 31\n\t\tv[261,5] = 23\n\t\tv[262,5] = 41\n\t\tv[263,5] = 39\n\t\tv[264,5] = 5\n\t\tv[265,5] = 27\n\t\tv[266,5] = 7\n\t\tv[267,5] = 29\n\t\tv[268,5] = 29\n\t\tv[269,5] = 33\n\t\tv[270,5] = 31\n\t\tv[271,5] = 41\n\t\tv[272,5] = 31\n\t\tv[273,5] = 29\n\t\tv[274,5] = 17\n\t\tv[275,5] = 29\n\t\tv[276,5] = 29\n\t\tv[277,5] = 9\n\t\tv[278,5] = 9\n\t\tv[279,5] = 31\n\t\tv[280,5] = 27\n\t\tv[281,5] = 53\n\t\tv[282,5] = 35\n\t\tv[283,5] = 5\n\t\tv[284,5] = 61\n\t\tv[285,5] = 1\n\t\tv[286,5] = 49\n\t\tv[287,5] = 13\n\t\tv[288,5] = 57\n\t\tv[289,5] = 29\n\t\tv[290,5] = 5\n\t\tv[291,5] = 21\n\t\tv[292,5] = 43\n\t\tv[293,5] = 25\n\t\tv[294,5] = 57\n\t\tv[295,5] = 49\n\t\tv[296,5] = 37\n\t\tv[297,5] = 27\n\t\tv[298,5] = 11\n\t\tv[299,5] = 61\n\t\tv[300,5] = 37\n\t\tv[301,5] = 49\n\t\tv[302,5] = 5\n\t\tv[303,5] = 63\n\t\tv[304,5] = 63\n\t\tv[305,5] = 3\n\t\tv[306,5] = 45\n\t\tv[307,5] = 37\n\t\tv[308,5] = 63\n\t\tv[309,5] = 21\n\t\tv[310,5] = 21\n\t\tv[311,5] = 19\n\t\tv[312,5] = 27\n\t\tv[313,5] = 59\n\t\tv[314,5] = 21\n\t\tv[315,5] = 45\n\t\tv[316,5] = 23\n\t\tv[317,5] = 13\n\t\tv[318,5] = 15\n\t\tv[319,5] = 3\n\t\tv[320,5] = 43\n\t\tv[321,5] = 63\n\t\tv[322,5] = 39\n\t\tv[323,5] = 19\n\t\tv[324,5] = 63\n\t\tv[325,5] = 31\n\t\tv[326,5] = 41\n\t\tv[327,5] = 41\n\t\tv[328,5] = 15\n\t\tv[329,5] = 43\n\t\tv[330,5] = 63\n\t\tv[331,5] = 53\n\t\tv[332,5] = 1\n\t\tv[333,5] = 63\n\t\tv[334,5] = 31\n\t\tv[335,5] = 7\n\t\tv[336,5] = 17\n\t\tv[337,5] = 11\n\t\tv[338,5] = 61\n\t\tv[339,5] = 31\n\t\tv[340,5] = 51\n\t\tv[341,5] = 37\n\t\tv[342,5] = 29\n\t\tv[343,5] = 59\n\t\tv[344,5] = 25\n\t\tv[345,5] = 63\n\t\tv[346,5] = 59\n\t\tv[347,5] = 47\n\t\tv[348,5] = 15\n\t\tv[349,5] = 27\n\t\tv[350,5] = 19\n\t\tv[351,5] = 29\n\t\tv[352,5] = 45\n\t\tv[353,5] = 35\n\t\tv[354,5] = 55\n\t\tv[355,5] = 39\n\t\tv[356,5] = 19\n\t\tv[357,5] = 43\n\t\tv[358,5] = 21\n\t\tv[359,5] = 19\n\t\tv[360,5] = 13\n\t\tv[361,5] = 17\n\t\tv[362,5] = 51\n\t\tv[363,5] = 37\n\t\tv[364,5] = 5\n\t\tv[365,5] = 33\n\t\tv[366,5] = 35\n\t\tv[367,5] = 49\n\t\tv[368,5] = 25\n\t\tv[369,5] = 45\n\t\tv[370,5] = 1\n\t\tv[371,5] = 63\n\t\tv[372,5] = 47\n\t\tv[373,5] = 9\n\t\tv[374,5] = 63\n\t\tv[375,5] = 15\n\t\tv[376,5] = 25\n\t\tv[377,5] = 25\n\t\tv[378,5] = 15\n\t\tv[379,5] = 41\n\t\tv[380,5] = 13\n\t\tv[381,5] = 3\n\t\tv[382,5] = 19\n\t\tv[383,5] = 51\n\t\tv[384,5] = 49\n\t\tv[385,5] = 37\n\t\tv[386,5] = 25\n\t\tv[387,5] = 49\n\t\tv[388,5] = 13\n\t\tv[389,5] = 53\n\t\tv[390,5] = 47\n\t\tv[391,5] = 23\n\t\tv[392,5] = 35\n\t\tv[393,5] = 29\n\t\tv[394,5] = 33\n\t\tv[395,5] = 21\n\t\tv[396,5] = 35\n\t\tv[397,5] = 23\n\t\tv[398,5] = 3\n\t\tv[399,5] = 43\n\t\tv[400,5] = 31\n\t\tv[401,5] = 63\n\t\tv[402,5] = 9\n\t\tv[403,5] = 1\n\t\tv[404,5] = 61\n\t\tv[405,5] = 43\n\t\tv[406,5] = 3\n\t\tv[407,5] = 11\n\t\tv[408,5] = 55\n\t\tv[409,5] = 11\n\t\tv[410,5] = 35\n\t\tv[411,5] = 1\n\t\tv[412,5] = 63\n\t\tv[413,5] = 35\n\t\tv[414,5] = 49\n\t\tv[415,5] = 19\n\t\tv[416,5] = 45\n\t\tv[417,5] = 9\n\t\tv[418,5] = 57\n\t\tv[419,5] = 51\n\t\tv[420,5] = 1\n\t\tv[421,5] = 47\n\t\tv[422,5] = 41\n\t\tv[423,5] = 9\n\t\tv[424,5] = 11\n\t\tv[425,5] = 37\n\t\tv[426,5] = 19\n\t\tv[427,5] = 55\n\t\tv[428,5] = 23\n\t\tv[429,5] = 55\n\t\tv[430,5] = 55\n\t\tv[431,5] = 13\n\t\tv[432,5] = 7\n\t\tv[433,5] = 47\n\t\tv[434,5] = 37\n\t\tv[435,5] = 11\n\t\tv[436,5] = 43\n\t\tv[437,5] = 17\n\t\tv[438,5] = 3\n\t\tv[439,5] = 25\n\t\tv[440,5] = 19\n\t\tv[441,5] = 55\n\t\tv[442,5] = 59\n\t\tv[443,5] = 37\n\t\tv[444,5] = 33\n\t\tv[445,5] = 43\n\t\tv[446,5] = 1\n\t\tv[447,5] = 5\n\t\tv[448,5] = 21\n\t\tv[449,5] = 5\n\t\tv[450,5] = 63\n\t\tv[451,5] = 49\n\t\tv[452,5] = 61\n\t\tv[453,5] = 21\n\t\tv[454,5] = 51\n\t\tv[455,5] = 15\n\t\tv[456,5] = 19\n\t\tv[457,5] = 43\n\t\tv[458,5] = 47\n\t\tv[459,5] = 17\n\t\tv[460,5] = 9\n\t\tv[461,5] = 53\n\t\tv[462,5] = 45\n\t\tv[463,5] = 11\n\t\tv[464,5] = 51\n\t\tv[465,5] = 25\n\t\tv[466,5] = 11\n\t\tv[467,5] = 25\n\t\tv[468,5] = 47\n\t\tv[469,5] = 47\n\t\tv[470,5] = 1\n\t\tv[471,5] = 43\n\t\tv[472,5] = 29\n\t\tv[473,5] = 17\n\t\tv[474,5] = 31\n\t\tv[475,5] = 15\n\t\tv[476,5] = 59\n\t\tv[477,5] = 27\n\t\tv[478,5] = 63\n\t\tv[479,5] = 11\n\t\tv[480,5] = 41\n\t\tv[481,5] = 51\n\t\tv[482,5] = 29\n\t\tv[483,5] = 7\n\t\tv[484,5] = 27\n\t\tv[485,5] = 63\n\t\tv[486,5] = 31\n\t\tv[487,5] = 43\n\t\tv[488,5] = 3\n\t\tv[489,5] = 29\n\t\tv[490,5] = 39\n\t\tv[491,5] = 3\n\t\tv[492,5] = 59\n\t\tv[493,5] = 59\n\t\tv[494,5] = 1\n\t\tv[495,5] = 53\n\t\tv[496,5] = 63\n\t\tv[497,5] = 23\n\t\tv[498,5] = 63\n\t\tv[499,5] = 47\n\t\tv[500,5] = 51\n\t\tv[501,5] = 23\n\t\tv[502,5] = 61\n\t\tv[503,5] = 39\n\t\tv[504,5] = 47\n\t\tv[505,5] = 21\n\t\tv[506,5] = 39\n\t\tv[507,5] = 15\n\t\tv[508,5] = 3\n\t\tv[509,5] = 9\n\t\tv[510,5] = 57\n\t\tv[511,5] = 61\n\t\tv[512,5] = 39\n\t\tv[513,5] = 37\n\t\tv[514,5] = 21\n\t\tv[515,5] = 51\n\t\tv[516,5] = 1\n\t\tv[517,5] = 23\n\t\tv[518,5] = 43\n\t\tv[519,5] = 27\n\t\tv[520,5] = 25\n\t\tv[521,5] = 11\n\t\tv[522,5] = 13\n\t\tv[523,5] = 21\n\t\tv[524,5] = 43\n\t\tv[525,5] = 7\n\t\tv[526,5] = 11\n\t\tv[527,5] = 33\n\t\tv[528,5] = 55\n\t\tv[529,5] = 1\n\t\tv[530,5] = 37\n\t\tv[531,5] = 35\n\t\tv[532,5] = 27\n\t\tv[533,5] = 61\n\t\tv[534,5] = 39\n\t\tv[535,5] = 5\n\t\tv[536,5] = 19\n\t\tv[537,5] = 61\n\t\tv[538,5] = 61\n\t\tv[539,5] = 57\n\t\tv[540,5] = 59\n\t\tv[541,5] = 21\n\t\tv[542,5] = 59\n\t\tv[543,5] = 61\n\t\tv[544,5] = 57\n\t\tv[545,5] = 25\n\t\tv[546,5] = 55\n\t\tv[547,5] = 27\n\t\tv[548,5] = 31\n\t\tv[549,5] = 41\n\t\tv[550,5] = 33\n\t\tv[551,5] = 63\n\t\tv[552,5] = 19\n\t\tv[553,5] = 57\n\t\tv[554,5] = 35\n\t\tv[555,5] = 13\n\t\tv[556,5] = 63\n\t\tv[557,5] = 35\n\t\tv[558,5] = 17\n\t\tv[559,5] = 11\n\t\tv[560,5] = 11\n\t\tv[561,5] = 49\n\t\tv[562,5] = 41\n\t\tv[563,5] = 55\n\t\tv[564,5] = 5\n\t\tv[565,5] = 45\n\t\tv[566,5] = 17\n\t\tv[567,5] = 35\n\t\tv[568,5] = 5\n\t\tv[569,5] = 31\n\t\tv[570,5] = 31\n\t\tv[571,5] = 37\n\t\tv[572,5] = 17\n\t\tv[573,5] = 45\n\t\tv[574,5] = 51\n\t\tv[575,5] = 1\n\t\tv[576,5] = 39\n\t\tv[577,5] = 49\n\t\tv[578,5] = 55\n\t\tv[579,5] = 19\n\t\tv[580,5] = 41\n\t\tv[581,5] = 13\n\t\tv[582,5] = 5\n\t\tv[583,5] = 51\n\t\tv[584,5] = 5\n\t\tv[585,5] = 49\n\t\tv[586,5] = 1\n\t\tv[587,5] = 21\n\t\tv[588,5] = 13\n\t\tv[589,5] = 17\n\t\tv[590,5] = 59\n\t\tv[591,5] = 51\n\t\tv[592,5] = 11\n\t\tv[593,5] = 3\n\t\tv[594,5] = 61\n\t\tv[595,5] = 1\n\t\tv[596,5] = 33\n\t\tv[597,5] = 37\n\t\tv[598,5] = 33\n\t\tv[599,5] = 61\n\t\tv[600,5] = 25\n\t\tv[601,5] = 27\n\t\tv[602,5] = 59\n\t\tv[603,5] = 7\n\t\tv[604,5] = 49\n\t\tv[605,5] = 13\n\t\tv[606,5] = 63\n\t\tv[607,5] = 3\n\t\tv[608,5] = 33\n\t\tv[609,5] = 3\n\t\tv[610,5] = 15\n\t\tv[611,5] = 9\n\t\tv[612,5] = 13\n\t\tv[613,5] = 35\n\t\tv[614,5] = 39\n\t\tv[615,5] = 11\n\t\tv[616,5] = 59\n\t\tv[617,5] = 59\n\t\tv[618,5] = 1\n\t\tv[619,5] = 57\n\t\tv[620,5] = 11\n\t\tv[621,5] = 5\n\t\tv[622,5] = 57\n\t\tv[623,5] = 13\n\t\tv[624,5] = 31\n\t\tv[625,5] = 13\n\t\tv[626,5] = 11\n\t\tv[627,5] = 55\n\t\tv[628,5] = 45\n\t\tv[629,5] = 9\n\t\tv[630,5] = 55\n\t\tv[631,5] = 55\n\t\tv[632,5] = 19\n\t\tv[633,5] = 25\n\t\tv[634,5] = 41\n\t\tv[635,5] = 23\n\t\tv[636,5] = 45\n\t\tv[637,5] = 29\n\t\tv[638,5] = 63\n\t\tv[639,5] = 59\n\t\tv[640,5] = 27\n\t\tv[641,5] = 39\n\t\tv[642,5] = 21\n\t\tv[643,5] = 37\n\t\tv[644,5] = 7\n\t\tv[645,5] = 61\n\t\tv[646,5] = 49\n\t\tv[647,5] = 35\n\t\tv[648,5] = 39\n\t\tv[649,5] = 9\n\t\tv[650,5] = 29\n\t\tv[651,5] = 7\n\t\tv[652,5] = 25\n\t\tv[653,5] = 23\n\t\tv[654,5] = 57\n\t\tv[655,5] = 5\n\t\tv[656,5] = 19\n\t\tv[657,5] = 15\n\t\tv[658,5] = 33\n\t\tv[659,5] = 49\n\t\tv[660,5] = 37\n\t\tv[661,5] = 25\n\t\tv[662,5] = 17\n\t\tv[663,5] = 45\n\t\tv[664,5] = 29\n\t\tv[665,5] = 15\n\t\tv[666,5] = 25\n\t\tv[667,5] = 3\n\t\tv[668,5] = 3\n\t\tv[669,5] = 49\n\t\tv[670,5] = 11\n\t\tv[671,5] = 39\n\t\tv[672,5] = 15\n\t\tv[673,5] = 19\n\t\tv[674,5] = 57\n\t\tv[675,5] = 39\n\t\tv[676,5] = 15\n\t\tv[677,5] = 11\n\t\tv[678,5] = 3\n\t\tv[679,5] = 57\n\t\tv[680,5] = 31\n\t\tv[681,5] = 55\n\t\tv[682,5] = 61\n\t\tv[683,5] = 19\n\t\tv[684,5] = 5\n\t\tv[685,5] = 41\n\t\tv[686,5] = 35\n\t\tv[687,5] = 59\n\t\tv[688,5] = 61\n\t\tv[689,5] = 39\n\t\tv[690,5] = 41\n\t\tv[691,5] = 53\n\t\tv[692,5] = 53\n\t\tv[693,5] = 63\n\t\tv[694,5] = 31\n\t\tv[695,5] = 9\n\t\tv[696,5] = 59\n\t\tv[697,5] = 13\n\t\tv[698,5] = 35\n\t\tv[699,5] = 55\n\t\tv[700,5] = 41\n\t\tv[701,5] = 49\n\t\tv[702,5] = 5\n\t\tv[703,5] = 41\n\t\tv[704,5] = 25\n\t\tv[705,5] = 27\n\t\tv[706,5] = 43\n\t\tv[707,5] = 5\n\t\tv[708,5] = 5\n\t\tv[709,5] = 43\n\t\tv[710,5] = 5\n\t\tv[711,5] = 5\n\t\tv[712,5] = 17\n\t\tv[713,5] = 5\n\t\tv[714,5] = 15\n\t\tv[715,5] = 27\n\t\tv[716,5] = 29\n\t\tv[717,5] = 17\n\t\tv[718,5] = 9\n\t\tv[719,5] = 3\n\t\tv[720,5] = 55\n\t\tv[721,5] = 31\n\t\tv[722,5] = 1\n\t\tv[723,5] = 45\n\t\tv[724,5] = 45\n\t\tv[725,5] = 13\n\t\tv[726,5] = 57\n\t\tv[727,5] = 17\n\t\tv[728,5] = 3\n\t\tv[729,5] = 61\n\t\tv[730,5] = 15\n\t\tv[731,5] = 49\n\t\tv[732,5] = 15\n\t\tv[733,5] = 47\n\t\tv[734,5] = 9\n\t\tv[735,5] = 37\n\t\tv[736,5] = 45\n\t\tv[737,5] = 9\n\t\tv[738,5] = 51\n\t\tv[739,5] = 61\n\t\tv[740,5] = 21\n\t\tv[741,5] = 33\n\t\tv[742,5] = 11\n\t\tv[743,5] = 21\n\t\tv[744,5] = 63\n\t\tv[745,5] = 63\n\t\tv[746,5] = 47\n\t\tv[747,5] = 57\n\t\tv[748,5] = 61\n\t\tv[749,5] = 49\n\t\tv[750,5] = 9\n\t\tv[751,5] = 59\n\t\tv[752,5] = 19\n\t\tv[753,5] = 29\n\t\tv[754,5] = 21\n\t\tv[755,5] = 23\n\t\tv[756,5] = 55\n\t\tv[757,5] = 23\n\t\tv[758,5] = 43\n\t\tv[759,5] = 41\n\t\tv[760,5] = 57\n\t\tv[761,5] = 9\n\t\tv[762,5] = 39\n\t\tv[763,5] = 27\n\t\tv[764,5] = 41\n\t\tv[765,5] = 35\n\t\tv[766,5] = 61\n\t\tv[767,5] = 29\n\t\tv[768,5] = 57\n\t\tv[769,5] = 63\n\t\tv[770,5] = 21\n\t\tv[771,5] = 31\n\t\tv[772,5] = 59\n\t\tv[773,5] = 35\n\t\tv[774,5] = 49\n\t\tv[775,5] = 3\n\t\tv[776,5] = 49\n\t\tv[777,5] = 47\n\t\tv[778,5] = 49\n\t\tv[779,5] = 33\n\t\tv[780,5] = 21\n\t\tv[781,5] = 19\n\t\tv[782,5] = 21\n\t\tv[783,5] = 35\n\t\tv[784,5] = 11\n\t\tv[785,5] = 17\n\t\tv[786,5] = 37\n\t\tv[787,5] = 23\n\t\tv[788,5] = 59\n\t\tv[789,5] = 13\n\t\tv[790,5] = 37\n\t\tv[791,5] = 35\n\t\tv[792,5] = 55\n\t\tv[793,5] = 57\n\t\tv[794,5] = 1\n\t\tv[795,5] = 29\n\t\tv[796,5] = 45\n\t\tv[797,5] = 11\n\t\tv[798,5] = 1\n\t\tv[799,5] = 15\n\t\tv[800,5] = 9\n\t\tv[801,5] = 33\n\t\tv[802,5] = 19\n\t\tv[803,5] = 53\n\t\tv[804,5] = 43\n\t\tv[805,5] = 39\n\t\tv[806,5] = 23\n\t\tv[807,5] = 7\n\t\tv[808,5] = 13\n\t\tv[809,5] = 13\n\t\tv[810,5] = 1\n\t\tv[811,5] = 19\n\t\tv[812,5] = 41\n\t\tv[813,5] = 55\n\t\tv[814,5] = 1\n\t\tv[815,5] = 13\n\t\tv[816,5] = 15\n\t\tv[817,5] = 59\n\t\tv[818,5] = 55\n\t\tv[819,5] = 15\n\t\tv[820,5] = 3\n\t\tv[821,5] = 57\n\t\tv[822,5] = 37\n\t\tv[823,5] = 31\n\t\tv[824,5] = 17\n\t\tv[825,5] = 1\n\t\tv[826,5] = 3\n\t\tv[827,5] = 21\n\t\tv[828,5] = 29\n\t\tv[829,5] = 25\n\t\tv[830,5] = 55\n\t\tv[831,5] = 9\n\t\tv[832,5] = 37\n\t\tv[833,5] = 33\n\t\tv[834,5] = 53\n\t\tv[835,5] = 41\n\t\tv[836,5] = 51\n\t\tv[837,5] = 19\n\t\tv[838,5] = 57\n\t\tv[839,5] = 13\n\t\tv[840,5] = 63\n\t\tv[841,5] = 43\n\t\tv[842,5] = 19\n\t\tv[843,5] = 7\n\t\tv[844,5] = 13\n\t\tv[845,5] = 37\n\t\tv[846,5] = 33\n\t\tv[847,5] = 19\n\t\tv[848,5] = 15\n\t\tv[849,5] = 63\n\t\tv[850,5] = 51\n\t\tv[851,5] = 11\n\t\tv[852,5] = 49\n\t\tv[853,5] = 23\n\t\tv[854,5] = 57\n\t\tv[855,5] = 47\n\t\tv[856,5] = 51\n\t\tv[857,5] = 15\n\t\tv[858,5] = 53\n\t\tv[859,5] = 41\n\t\tv[860,5] = 1\n\t\tv[861,5] = 15\n\t\tv[862,5] = 37\n\t\tv[863,5] = 61\n\t\tv[864,5] = 11\n\t\tv[865,5] = 35\n\t\tv[866,5] = 29\n\t\tv[867,5] = 33\n\t\tv[868,5] = 23\n\t\tv[869,5] = 55\n\t\tv[870,5] = 11\n\t\tv[871,5] = 59\n\t\tv[872,5] = 19\n\t\tv[873,5] = 61\n\t\tv[874,5] = 61\n\t\tv[875,5] = 45\n\t\tv[876,5] = 13\n\t\tv[877,5] = 49\n\t\tv[878,5] = 13\n\t\tv[879,5] = 63\n\t\tv[880,5] = 5\n\t\tv[881,5] = 61\n\t\tv[882,5] = 5\n\t\tv[883,5] = 31\n\t\tv[884,5] = 17\n\t\tv[885,5] = 61\n\t\tv[886,5] = 63\n\t\tv[887,5] = 13\n\t\tv[888,5] = 27\n\t\tv[889,5] = 57\n\t\tv[890,5] = 1\n\t\tv[891,5] = 21\n\t\tv[892,5] = 5\n\t\tv[893,5] = 11\n\t\tv[894,5] = 39\n\t\tv[895,5] = 57\n\t\tv[896,5] = 51\n\t\tv[897,5] = 53\n\t\tv[898,5] = 39\n\t\tv[899,5] = 25\n\t\tv[900,5] = 41\n\t\tv[901,5] = 39\n\t\tv[902,5] = 37\n\t\tv[903,5] = 23\n\t\tv[904,5] = 31\n\t\tv[905,5] = 25\n\t\tv[906,5] = 33\n\t\tv[907,5] = 17\n\t\tv[908,5] = 57\n\t\tv[909,5] = 29\n\t\tv[910,5] = 27\n\t\tv[911,5] = 23\n\t\tv[912,5] = 47\n\t\tv[913,5] = 41\n\t\tv[914,5] = 29\n\t\tv[915,5] = 19\n\t\tv[916,5] = 47\n\t\tv[917,5] = 41\n\t\tv[918,5] = 25\n\t\tv[919,5] = 5\n\t\tv[920,5] = 51\n\t\tv[921,5] = 43\n\t\tv[922,5] = 39\n\t\tv[923,5] = 29\n\t\tv[924,5] = 7\n\t\tv[925,5] = 31\n\t\tv[926,5] = 45\n\t\tv[927,5] = 51\n\t\tv[928,5] = 49\n\t\tv[929,5] = 55\n\t\tv[930,5] = 17\n\t\tv[931,5] = 43\n\t\tv[932,5] = 49\n\t\tv[933,5] = 45\n\t\tv[934,5] = 9\n\t\tv[935,5] = 29\n\t\tv[936,5] = 3\n\t\tv[937,5] = 5\n\t\tv[938,5] = 47\n\t\tv[939,5] = 9\n\t\tv[940,5] = 15\n\t\tv[941,5] = 19\n\t\tv[942,5] = 51\n\t\tv[943,5] = 45\n\t\tv[944,5] = 57\n\t\tv[945,5] = 63\n\t\tv[946,5] = 9\n\t\tv[947,5] = 21\n\t\tv[948,5] = 59\n\t\tv[949,5] = 3\n\t\tv[950,5] = 9\n\t\tv[951,5] = 13\n\t\tv[952,5] = 45\n\t\tv[953,5] = 23\n\t\tv[954,5] = 15\n\t\tv[955,5] = 31\n\t\tv[956,5] = 21\n\t\tv[957,5] = 15\n\t\tv[958,5] = 51\n\t\tv[959,5] = 35\n\t\tv[960,5] = 9\n\t\tv[961,5] = 11\n\t\tv[962,5] = 61\n\t\tv[963,5] = 23\n\t\tv[964,5] = 53\n\t\tv[965,5] = 29\n\t\tv[966,5] = 51\n\t\tv[967,5] = 45\n\t\tv[968,5] = 31\n\t\tv[969,5] = 29\n\t\tv[970,5] = 5\n\t\tv[971,5] = 35\n\t\tv[972,5] = 29\n\t\tv[973,5] = 53\n\t\tv[974,5] = 35\n\t\tv[975,5] = 17\n\t\tv[976,5] = 59\n\t\tv[977,5] = 55\n\t\tv[978,5] = 27\n\t\tv[979,5] = 51\n\t\tv[980,5] = 59\n\t\tv[981,5] = 27\n\t\tv[982,5] = 47\n\t\tv[983,5] = 15\n\t\tv[984,5] = 29\n\t\tv[985,5] = 37\n\t\tv[986,5] = 7\n\t\tv[987,5] = 49\n\t\tv[988,5] = 55\n\t\tv[989,5] = 5\n\t\tv[990,5] = 19\n\t\tv[991,5] = 45\n\t\tv[992,5] = 29\n\t\tv[993,5] = 19\n\t\tv[994,5] = 57\n\t\tv[995,5] = 33\n\t\tv[996,5] = 53\n\t\tv[997,5] = 45\n\t\tv[998,5] = 21\n\t\tv[999,5] = 9\n\t\tv[1000,5] = 3\n\t\tv[1001,5] = 35\n\t\tv[1002,5] = 29\n\t\tv[1003,5] = 43\n\t\tv[1004,5] = 31\n\t\tv[1005,5] = 39\n\t\tv[1006,5] = 3\n\t\tv[1007,5] = 45\n\t\tv[1008,5] = 1\n\t\tv[1009,5] = 41\n\t\tv[1010,5] = 29\n\t\tv[1011,5] = 5\n\t\tv[1012,5] = 59\n\t\tv[1013,5] = 41\n\t\tv[1014,5] = 33\n\t\tv[1015,5] = 35\n\t\tv[1016,5] = 27\n\t\tv[1017,5] = 19\n\t\tv[1018,5] = 13\n\t\tv[1019,5] = 25\n\t\tv[1020,5] = 27\n\t\tv[1021,5] = 43\n\t\tv[1022,5] = 33\n\t\tv[1023,5] = 35\n\t\tv[1024,5] = 17\n\t\tv[1025,5] = 17\n\t\tv[1026,5] = 23\n\t\tv[1027,5] = 7\n\t\tv[1028,5] = 35\n\t\tv[1029,5] = 15\n\t\tv[1030,5] = 61\n\t\tv[1031,5] = 61\n\t\tv[1032,5] = 53\n\t\tv[1033,5] = 5\n\t\tv[1034,5] = 15\n\t\tv[1035,5] = 23\n\t\tv[1036,5] = 11\n\t\tv[1037,5] = 13\n\t\tv[1038,5] = 43\n\t\tv[1039,5] = 55\n\t\tv[1040,5] = 47\n\t\tv[1041,5] = 25\n\t\tv[1042,5] = 43\n\t\tv[1043,5] = 15\n\t\tv[1044,5] = 57\n\t\tv[1045,5] = 45\n\t\tv[1046,5] = 1\n\t\tv[1047,5] = 49\n\t\tv[1048,5] = 63\n\t\tv[1049,5] = 57\n\t\tv[1050,5] = 15\n\t\tv[1051,5] = 31\n\t\tv[1052,5] = 31\n\t\tv[1053,5] = 7\n\t\tv[1054,5] = 53\n\t\tv[1055,5] = 27\n\t\tv[1056,5] = 15\n\t\tv[1057,5] = 47\n\t\tv[1058,5] = 23\n\t\tv[1059,5] = 7\n\t\tv[1060,5] = 29\n\t\tv[1061,5] = 53\n\t\tv[1062,5] = 47\n\t\tv[1063,5] = 9\n\t\tv[1064,5] = 53\n\t\tv[1065,5] = 3\n\t\tv[1066,5] = 25\n\t\tv[1067,5] = 55\n\t\tv[1068,5] = 45\n\t\tv[1069,5] = 63\n\t\tv[1070,5] = 21\n\t\tv[1071,5] = 17\n\t\tv[1072,5] = 23\n\t\tv[1073,5] = 31\n\t\tv[1074,5] = 27\n\t\tv[1075,5] = 27\n\t\tv[1076,5] = 43\n\t\tv[1077,5] = 63\n\t\tv[1078,5] = 55\n\t\tv[1079,5] = 63\n\t\tv[1080,5] = 45\n\t\tv[1081,5] = 51\n\t\tv[1082,5] = 15\n\t\tv[1083,5] = 27\n\t\tv[1084,5] = 5\n\t\tv[1085,5] = 37\n\t\tv[1086,5] = 43\n\t\tv[1087,5] = 11\n\t\tv[1088,5] = 27\n\t\tv[1089,5] = 5\n\t\tv[1090,5] = 27\n\t\tv[1091,5] = 59\n\t\tv[1092,5] = 21\n\t\tv[1093,5] = 7\n\t\tv[1094,5] = 39\n\t\tv[1095,5] = 27\n\t\tv[1096,5] = 63\n\t\tv[1097,5] = 35\n\t\tv[1098,5] = 47\n\t\tv[1099,5] = 55\n\t\tv[1100,5] = 17\n\t\tv[1101,5] = 17\n\t\tv[1102,5] = 17\n\t\tv[1103,5] = 3\n\t\tv[1104,5] = 19\n\t\tv[1105,5] = 21\n\t\tv[1106,5] = 13\n\t\tv[1107,5] = 49\n\t\tv[1108,5] = 61\n\t\tv[1109,5] = 39\n\t\tv[1110,5] = 15\n\n\t\tv[19,6] = 13\n\t\tv[20,6] = 33\n\t\tv[21,6] = 115\n\t\tv[22,6] = 41\n\t\tv[23,6] = 79\n\t\tv[24,6] = 17\n\t\tv[25,6] = 29\n\t\tv[26,6] = 119\n\t\tv[27,6] = 75\n\t\tv[28,6] = 73\n\t\tv[29,6] = 105\n\t\tv[30,6] = 7\n\t\tv[31,6] = 59\n\t\tv[32,6] = 65\n\t\tv[33,6] = 21\n\t\tv[34,6] = 3\n\t\tv[35,6] = 113\n\t\tv[36,6] = 61\n\t\tv[37,6] = 89\n\t\tv[38,6] = 45\n\t\tv[39,6] = 107\n\t\tv[40,6] = 21\n\t\tv[41,6] = 71\n\t\tv[42,6] = 79\n\t\tv[43,6] = 19\n\t\tv[44,6] = 71\n\t\tv[45,6] = 61\n\t\tv[46,6] = 41\n\t\tv[47,6] = 57\n\t\tv[48,6] = 121\n\t\tv[49,6] = 87\n\t\tv[50,6] = 119\n\t\tv[51,6] = 55\n\t\tv[52,6] = 85\n\t\tv[53,6] = 121\n\t\tv[54,6] = 119\n\t\tv[55,6] = 11\n\t\tv[56,6] = 23\n\t\tv[57,6] = 61\n\t\tv[58,6] = 11\n\t\tv[59,6] = 35\n\t\tv[60,6] = 33\n\t\tv[61,6] = 43\n\t\tv[62,6] = 107\n\t\tv[63,6] = 113\n\t\tv[64,6] = 101\n\t\tv[65,6] = 29\n\t\tv[66,6] = 87\n\t\tv[67,6] = 119\n\t\tv[68,6] = 97\n\t\tv[69,6] = 29\n\t\tv[70,6] = 17\n\t\tv[71,6] = 89\n\t\tv[72,6] = 5\n\t\tv[73,6] = 127\n\t\tv[74,6] = 89\n\t\tv[75,6] = 119\n\t\tv[76,6] = 117\n\t\tv[77,6] = 103\n\t\tv[78,6] = 105\n\t\tv[79,6] = 41\n\t\tv[80,6] = 83\n\t\tv[81,6] = 25\n\t\tv[82,6] = 41\n\t\tv[83,6] = 55\n\t\tv[84,6] = 69\n\t\tv[85,6] = 117\n\t\tv[86,6] = 49\n\t\tv[87,6] = 127\n\t\tv[88,6] = 29\n\t\tv[89,6] = 1\n\t\tv[90,6] = 99\n\t\tv[91,6] = 53\n\t\tv[92,6] = 83\n\t\tv[93,6] = 15\n\t\tv[94,6] = 31\n\t\tv[95,6] = 73\n\t\tv[96,6] = 115\n\t\tv[97,6] = 35\n\t\tv[98,6] = 21\n\t\tv[99,6] = 89\n\t\tv[100,6] = 5\n\t\tv[101,6] = 1\n\t\tv[102,6] = 91\n\t\tv[103,6] = 53\n\t\tv[104,6] = 35\n\t\tv[105,6] = 95\n\t\tv[106,6] = 83\n\t\tv[107,6] = 19\n\t\tv[108,6] = 85\n\t\tv[109,6] = 55\n\t\tv[110,6] = 51\n\t\tv[111,6] = 101\n\t\tv[112,6] = 33\n\t\tv[113,6] = 41\n\t\tv[114,6] = 55\n\t\tv[115,6] = 45\n\t\tv[116,6] = 95\n\t\tv[117,6] = 61\n\t\tv[118,6] = 27\n\t\tv[119,6] = 37\n\t\tv[120,6] = 89\n\t\tv[121,6] = 75\n\t\tv[122,6] = 57\n\t\tv[123,6] = 61\n\t\tv[124,6] = 15\n\t\tv[125,6] = 117\n\t\tv[126,6] = 15\n\t\tv[127,6] = 21\n\t\tv[128,6] = 27\n\t\tv[129,6] = 25\n\t\tv[130,6] = 27\n\t\tv[131,6] = 123\n\t\tv[132,6] = 39\n\t\tv[133,6] = 109\n\t\tv[134,6] = 93\n\t\tv[135,6] = 51\n\t\tv[136,6] = 21\n\t\tv[137,6] = 91\n\t\tv[138,6] = 109\n\t\tv[139,6] = 107\n\t\tv[140,6] = 45\n\t\tv[141,6] = 15\n\t\tv[142,6] = 93\n\t\tv[143,6] = 127\n\t\tv[144,6] = 3\n\t\tv[145,6] = 53\n\t\tv[146,6] = 81\n\t\tv[147,6] = 79\n\t\tv[148,6] = 107\n\t\tv[149,6] = 79\n\t\tv[150,6] = 87\n\t\tv[151,6] = 35\n\t\tv[152,6] = 109\n\t\tv[153,6] = 73\n\t\tv[154,6] = 35\n\t\tv[155,6] = 83\n\t\tv[156,6] = 107\n\t\tv[157,6] = 1\n\t\tv[158,6] = 51\n\t\tv[159,6] = 7\n\t\tv[160,6] = 59\n\t\tv[161,6] = 33\n\t\tv[162,6] = 115\n\t\tv[163,6] = 43\n\t\tv[164,6] = 111\n\t\tv[165,6] = 45\n\t\tv[166,6] = 121\n\t\tv[167,6] = 105\n\t\tv[168,6] = 125\n\t\tv[169,6] = 87\n\t\tv[170,6] = 101\n\t\tv[171,6] = 41\n\t\tv[172,6] = 95\n\t\tv[173,6] = 75\n\t\tv[174,6] = 1\n\t\tv[175,6] = 57\n\t\tv[176,6] = 117\n\t\tv[177,6] = 21\n\t\tv[178,6] = 27\n\t\tv[179,6] = 67\n\t\tv[180,6] = 29\n\t\tv[181,6] = 53\n\t\tv[182,6] = 117\n\t\tv[183,6] = 63\n\t\tv[184,6] = 1\n\t\tv[185,6] = 77\n\t\tv[186,6] = 89\n\t\tv[187,6] = 115\n\t\tv[188,6] = 49\n\t\tv[189,6] = 127\n\t\tv[190,6] = 15\n\t\tv[191,6] = 79\n\t\tv[192,6] = 81\n\t\tv[193,6] = 29\n\t\tv[194,6] = 65\n\t\tv[195,6] = 103\n\t\tv[196,6] = 33\n\t\tv[197,6] = 73\n\t\tv[198,6] = 79\n\t\tv[199,6] = 29\n\t\tv[200,6] = 21\n\t\tv[201,6] = 113\n\t\tv[202,6] = 31\n\t\tv[203,6] = 33\n\t\tv[204,6] = 107\n\t\tv[205,6] = 95\n\t\tv[206,6] = 111\n\t\tv[207,6] = 59\n\t\tv[208,6] = 99\n\t\tv[209,6] = 117\n\t\tv[210,6] = 63\n\t\tv[211,6] = 63\n\t\tv[212,6] = 99\n\t\tv[213,6] = 39\n\t\tv[214,6] = 9\n\t\tv[215,6] = 35\n\t\tv[216,6] = 63\n\t\tv[217,6] = 125\n\t\tv[218,6] = 99\n\t\tv[219,6] = 45\n\t\tv[220,6] = 93\n\t\tv[221,6] = 33\n\t\tv[222,6] = 93\n\t\tv[223,6] = 9\n\t\tv[224,6] = 105\n\t\tv[225,6] = 75\n\t\tv[226,6] = 51\n\t\tv[227,6] = 115\n\t\tv[228,6] = 11\n\t\tv[229,6] = 37\n\t\tv[230,6] = 17\n\t\tv[231,6] = 41\n\t\tv[232,6] = 21\n\t\tv[233,6] = 43\n\t\tv[234,6] = 73\n\t\tv[235,6] = 19\n\t\tv[236,6] = 93\n\t\tv[237,6] = 7\n\t\tv[238,6] = 95\n\t\tv[239,6] = 81\n\t\tv[240,6] = 93\n\t\tv[241,6] = 79\n\t\tv[242,6] = 81\n\t\tv[243,6] = 55\n\t\tv[244,6] = 9\n\t\tv[245,6] = 51\n\t\tv[246,6] = 63\n\t\tv[247,6] = 45\n\t\tv[248,6] = 89\n\t\tv[249,6] = 73\n\t\tv[250,6] = 19\n\t\tv[251,6] = 115\n\t\tv[252,6] = 39\n\t\tv[253,6] = 47\n\t\tv[254,6] = 81\n\t\tv[255,6] = 39\n\t\tv[256,6] = 5\n\t\tv[257,6] = 5\n\t\tv[258,6] = 45\n\t\tv[259,6] = 53\n\t\tv[260,6] = 65\n\t\tv[261,6] = 49\n\t\tv[262,6] = 17\n\t\tv[263,6] = 105\n\t\tv[264,6] = 13\n\t\tv[265,6] = 107\n\t\tv[266,6] = 5\n\t\tv[267,6] = 5\n\t\tv[268,6] = 19\n\t\tv[269,6] = 73\n\t\tv[270,6] = 59\n\t\tv[271,6] = 43\n\t\tv[272,6] = 83\n\t\tv[273,6] = 97\n\t\tv[274,6] = 115\n\t\tv[275,6] = 27\n\t\tv[276,6] = 1\n\t\tv[277,6] = 69\n\t\tv[278,6] = 103\n\t\tv[279,6] = 3\n\t\tv[280,6] = 99\n\t\tv[281,6] = 103\n\t\tv[282,6] = 63\n\t\tv[283,6] = 67\n\t\tv[284,6] = 25\n\t\tv[285,6] = 121\n\t\tv[286,6] = 97\n\t\tv[287,6] = 77\n\t\tv[288,6] = 13\n\t\tv[289,6] = 83\n\t\tv[290,6] = 103\n\t\tv[291,6] = 41\n\t\tv[292,6] = 11\n\t\tv[293,6] = 27\n\t\tv[294,6] = 81\n\t\tv[295,6] = 37\n\t\tv[296,6] = 33\n\t\tv[297,6] = 125\n\t\tv[298,6] = 71\n\t\tv[299,6] = 41\n\t\tv[300,6] = 41\n\t\tv[301,6] = 59\n\t\tv[302,6] = 41\n\t\tv[303,6] = 87\n\t\tv[304,6] = 123\n\t\tv[305,6] = 43\n\t\tv[306,6] = 101\n\t\tv[307,6] = 63\n\t\tv[308,6] = 45\n\t\tv[309,6] = 39\n\t\tv[310,6] = 21\n\t\tv[311,6] = 97\n\t\tv[312,6] = 15\n\t\tv[313,6] = 97\n\t\tv[314,6] = 111\n\t\tv[315,6] = 21\n\t\tv[316,6] = 49\n\t\tv[317,6] = 13\n\t\tv[318,6] = 17\n\t\tv[319,6] = 79\n\t\tv[320,6] = 91\n\t\tv[321,6] = 65\n\t\tv[322,6] = 105\n\t\tv[323,6] = 75\n\t\tv[324,6] = 1\n\t\tv[325,6] = 45\n\t\tv[326,6] = 67\n\t\tv[327,6] = 83\n\t\tv[328,6] = 107\n\t\tv[329,6] = 125\n\t\tv[330,6] = 87\n\t\tv[331,6] = 15\n\t\tv[332,6] = 81\n\t\tv[333,6] = 95\n\t\tv[334,6] = 105\n\t\tv[335,6] = 65\n\t\tv[336,6] = 45\n\t\tv[337,6] = 59\n\t\tv[338,6] = 103\n\t\tv[339,6] = 23\n\t\tv[340,6] = 103\n\t\tv[341,6] = 99\n\t\tv[342,6] = 67\n\t\tv[343,6] = 99\n\t\tv[344,6] = 47\n\t\tv[345,6] = 117\n\t\tv[346,6] = 71\n\t\tv[347,6] = 89\n\t\tv[348,6] = 35\n\t\tv[349,6] = 53\n\t\tv[350,6] = 73\n\t\tv[351,6] = 9\n\t\tv[352,6] = 115\n\t\tv[353,6] = 49\n\t\tv[354,6] = 37\n\t\tv[355,6] = 1\n\t\tv[356,6] = 35\n\t\tv[357,6] = 9\n\t\tv[358,6] = 45\n\t\tv[359,6] = 81\n\t\tv[360,6] = 19\n\t\tv[361,6] = 127\n\t\tv[362,6] = 17\n\t\tv[363,6] = 17\n\t\tv[364,6] = 105\n\t\tv[365,6] = 89\n\t\tv[366,6] = 49\n\t\tv[367,6] = 101\n\t\tv[368,6] = 7\n\t\tv[369,6] = 37\n\t\tv[370,6] = 33\n\t\tv[371,6] = 11\n\t\tv[372,6] = 95\n\t\tv[373,6] = 95\n\t\tv[374,6] = 17\n\t\tv[375,6] = 111\n\t\tv[376,6] = 105\n\t\tv[377,6] = 41\n\t\tv[378,6] = 115\n\t\tv[379,6] = 5\n\t\tv[380,6] = 69\n\t\tv[381,6] = 101\n\t\tv[382,6] = 27\n\t\tv[383,6] = 27\n\t\tv[384,6] = 101\n\t\tv[385,6] = 103\n\t\tv[386,6] = 53\n\t\tv[387,6] = 9\n\t\tv[388,6] = 21\n\t\tv[389,6] = 43\n\t\tv[390,6] = 79\n\t\tv[391,6] = 91\n\t\tv[392,6] = 65\n\t\tv[393,6] = 117\n\t\tv[394,6] = 87\n\t\tv[395,6] = 125\n\t\tv[396,6] = 55\n\t\tv[397,6] = 45\n\t\tv[398,6] = 63\n\t\tv[399,6] = 85\n\t\tv[400,6] = 83\n\t\tv[401,6] = 97\n\t\tv[402,6] = 45\n\t\tv[403,6] = 83\n\t\tv[404,6] = 87\n\t\tv[405,6] = 113\n\t\tv[406,6] = 93\n\t\tv[407,6] = 95\n\t\tv[408,6] = 5\n\t\tv[409,6] = 17\n\t\tv[410,6] = 77\n\t\tv[411,6] = 77\n\t\tv[412,6] = 127\n\t\tv[413,6] = 123\n\t\tv[414,6] = 45\n\t\tv[415,6] = 81\n\t\tv[416,6] = 85\n\t\tv[417,6] = 121\n\t\tv[418,6] = 119\n\t\tv[419,6] = 27\n\t\tv[420,6] = 85\n\t\tv[421,6] = 41\n\t\tv[422,6] = 49\n\t\tv[423,6] = 15\n\t\tv[424,6] = 107\n\t\tv[425,6] = 21\n\t\tv[426,6] = 51\n\t\tv[427,6] = 119\n\t\tv[428,6] = 11\n\t\tv[429,6] = 87\n\t\tv[430,6] = 101\n\t\tv[431,6] = 115\n\t\tv[432,6] = 63\n\t\tv[433,6] = 63\n\t\tv[434,6] = 37\n\t\tv[435,6] = 121\n\t\tv[436,6] = 109\n\t\tv[437,6] = 7\n\t\tv[438,6] = 43\n\t\tv[439,6] = 69\n\t\tv[440,6] = 19\n\t\tv[441,6] = 77\n\t\tv[442,6] = 49\n\t\tv[443,6] = 71\n\t\tv[444,6] = 59\n\t\tv[445,6] = 35\n\t\tv[446,6] = 7\n\t\tv[447,6] = 13\n\t\tv[448,6] = 55\n\t\tv[449,6] = 101\n\t\tv[450,6] = 127\n\t\tv[451,6] = 103\n\t\tv[452,6] = 85\n\t\tv[453,6] = 109\n\t\tv[454,6] = 29\n\t\tv[455,6] = 61\n\t\tv[456,6] = 67\n\t\tv[457,6] = 21\n\t\tv[458,6] = 111\n\t\tv[459,6] = 67\n\t\tv[460,6] = 23\n\t\tv[461,6] = 57\n\t\tv[462,6] = 75\n\t\tv[463,6] = 71\n\t\tv[464,6] = 101\n\t\tv[465,6] = 123\n\t\tv[466,6] = 41\n\t\tv[467,6] = 107\n\t\tv[468,6] = 101\n\t\tv[469,6] = 107\n\t\tv[470,6] = 125\n\t\tv[471,6] = 27\n\t\tv[472,6] = 47\n\t\tv[473,6] = 119\n\t\tv[474,6] = 41\n\t\tv[475,6] = 19\n\t\tv[476,6] = 127\n\t\tv[477,6] = 33\n\t\tv[478,6] = 31\n\t\tv[479,6] = 109\n\t\tv[480,6] = 7\n\t\tv[481,6] = 91\n\t\tv[482,6] = 91\n\t\tv[483,6] = 39\n\t\tv[484,6] = 125\n\t\tv[485,6] = 105\n\t\tv[486,6] = 47\n\t\tv[487,6] = 125\n\t\tv[488,6] = 123\n\t\tv[489,6] = 91\n\t\tv[490,6] = 9\n\t\tv[491,6] = 103\n\t\tv[492,6] = 45\n\t\tv[493,6] = 23\n\t\tv[494,6] = 117\n\t\tv[495,6] = 9\n\t\tv[496,6] = 125\n\t\tv[497,6] = 73\n\t\tv[498,6] = 11\n\t\tv[499,6] = 37\n\t\tv[500,6] = 61\n\t\tv[501,6] = 79\n\t\tv[502,6] = 21\n\t\tv[503,6] = 5\n\t\tv[504,6] = 47\n\t\tv[505,6] = 117\n\t\tv[506,6] = 67\n\t\tv[507,6] = 53\n\t\tv[508,6] = 85\n\t\tv[509,6] = 33\n\t\tv[510,6] = 81\n\t\tv[511,6] = 121\n\t\tv[512,6] = 47\n\t\tv[513,6] = 61\n\t\tv[514,6] = 51\n\t\tv[515,6] = 127\n\t\tv[516,6] = 29\n\t\tv[517,6] = 65\n\t\tv[518,6] = 45\n\t\tv[519,6] = 41\n\t\tv[520,6] = 95\n\t\tv[521,6] = 57\n\t\tv[522,6] = 73\n\t\tv[523,6] = 33\n\t\tv[524,6] = 117\n\t\tv[525,6] = 61\n\t\tv[526,6] = 111\n\t\tv[527,6] = 59\n\t\tv[528,6] = 123\n\t\tv[529,6] = 65\n\t\tv[530,6] = 47\n\t\tv[531,6] = 105\n\t\tv[532,6] = 23\n\t\tv[533,6] = 29\n\t\tv[534,6] = 107\n\t\tv[535,6] = 37\n\t\tv[536,6] = 81\n\t\tv[537,6] = 67\n\t\tv[538,6] = 29\n\t\tv[539,6] = 115\n\t\tv[540,6] = 119\n\t\tv[541,6] = 75\n\t\tv[542,6] = 73\n\t\tv[543,6] = 99\n\t\tv[544,6] = 103\n\t\tv[545,6] = 7\n\t\tv[546,6] = 57\n\t\tv[547,6] = 45\n\t\tv[548,6] = 61\n\t\tv[549,6] = 95\n\t\tv[550,6] = 49\n\t\tv[551,6] = 101\n\t\tv[552,6] = 101\n\t\tv[553,6] = 35\n\t\tv[554,6] = 47\n\t\tv[555,6] = 119\n\t\tv[556,6] = 39\n\t\tv[557,6] = 67\n\t\tv[558,6] = 31\n\t\tv[559,6] = 103\n\t\tv[560,6] = 7\n\t\tv[561,6] = 61\n\t\tv[562,6] = 127\n\t\tv[563,6] = 87\n\t\tv[564,6] = 3\n\t\tv[565,6] = 35\n\t\tv[566,6] = 29\n\t\tv[567,6] = 73\n\t\tv[568,6] = 95\n\t\tv[569,6] = 103\n\t\tv[570,6] = 71\n\t\tv[571,6] = 75\n\t\tv[572,6] = 51\n\t\tv[573,6] = 87\n\t\tv[574,6] = 57\n\t\tv[575,6] = 97\n\t\tv[576,6] = 11\n\t\tv[577,6] = 105\n\t\tv[578,6] = 87\n\t\tv[579,6] = 41\n\t\tv[580,6] = 73\n\t\tv[581,6] = 109\n\t\tv[582,6] = 69\n\t\tv[583,6] = 35\n\t\tv[584,6] = 121\n\t\tv[585,6] = 39\n\t\tv[586,6] = 111\n\t\tv[587,6] = 1\n\t\tv[588,6] = 77\n\t\tv[589,6] = 39\n\t\tv[590,6] = 47\n\t\tv[591,6] = 53\n\t\tv[592,6] = 91\n\t\tv[593,6] = 3\n\t\tv[594,6] = 17\n\t\tv[595,6] = 51\n\t\tv[596,6] = 83\n\t\tv[597,6] = 39\n\t\tv[598,6] = 125\n\t\tv[599,6] = 85\n\t\tv[600,6] = 111\n\t\tv[601,6] = 21\n\t\tv[602,6] = 69\n\t\tv[603,6] = 85\n\t\tv[604,6] = 29\n\t\tv[605,6] = 55\n\t\tv[606,6] = 11\n\t\tv[607,6] = 117\n\t\tv[608,6] = 1\n\t\tv[609,6] = 47\n\t\tv[610,6] = 17\n\t\tv[611,6] = 65\n\t\tv[612,6] = 63\n\t\tv[613,6] = 47\n\t\tv[614,6] = 117\n\t\tv[615,6] = 17\n\t\tv[616,6] = 115\n\t\tv[617,6] = 51\n\t\tv[618,6] = 25\n\t\tv[619,6] = 33\n\t\tv[620,6] = 123\n\t\tv[621,6] = 123\n\t\tv[622,6] = 83\n\t\tv[623,6] = 51\n\t\tv[624,6] = 113\n\t\tv[625,6] = 95\n\t\tv[626,6] = 121\n\t\tv[627,6] = 51\n\t\tv[628,6] = 91\n\t\tv[629,6] = 109\n\t\tv[630,6] = 43\n\t\tv[631,6] = 55\n\t\tv[632,6] = 35\n\t\tv[633,6] = 55\n\t\tv[634,6] = 87\n\t\tv[635,6] = 33\n\t\tv[636,6] = 37\n\t\tv[637,6] = 5\n\t\tv[638,6] = 3\n\t\tv[639,6] = 45\n\t\tv[640,6] = 21\n\t\tv[641,6] = 105\n\t\tv[642,6] = 127\n\t\tv[643,6] = 35\n\t\tv[644,6] = 17\n\t\tv[645,6] = 35\n\t\tv[646,6] = 37\n\t\tv[647,6] = 97\n\t\tv[648,6] = 97\n\t\tv[649,6] = 21\n\t\tv[650,6] = 77\n\t\tv[651,6] = 123\n\t\tv[652,6] = 17\n\t\tv[653,6] = 89\n\t\tv[654,6] = 53\n\t\tv[655,6] = 105\n\t\tv[656,6] = 75\n\t\tv[657,6] = 25\n\t\tv[658,6] = 125\n\t\tv[659,6] = 13\n\t\tv[660,6] = 47\n\t\tv[661,6] = 21\n\t\tv[662,6] = 125\n\t\tv[663,6] = 23\n\t\tv[664,6] = 55\n\t\tv[665,6] = 63\n\t\tv[666,6] = 61\n\t\tv[667,6] = 5\n\t\tv[668,6] = 17\n\t\tv[669,6] = 93\n\t\tv[670,6] = 57\n\t\tv[671,6] = 121\n\t\tv[672,6] = 69\n\t\tv[673,6] = 73\n\t\tv[674,6] = 93\n\t\tv[675,6] = 121\n\t\tv[676,6] = 105\n\t\tv[677,6] = 75\n\t\tv[678,6] = 91\n\t\tv[679,6] = 67\n\t\tv[680,6] = 95\n\t\tv[681,6] = 75\n\t\tv[682,6] = 9\n\t\tv[683,6] = 69\n\t\tv[684,6] = 97\n\t\tv[685,6] = 99\n\t\tv[686,6] = 93\n\t\tv[687,6] = 11\n\t\tv[688,6] = 53\n\t\tv[689,6] = 19\n\t\tv[690,6] = 73\n\t\tv[691,6] = 5\n\t\tv[692,6] = 33\n\t\tv[693,6] = 79\n\t\tv[694,6] = 107\n\t\tv[695,6] = 65\n\t\tv[696,6] = 69\n\t\tv[697,6] = 79\n\t\tv[698,6] = 125\n\t\tv[699,6] = 25\n\t\tv[700,6] = 93\n\t\tv[701,6] = 55\n\t\tv[702,6] = 61\n\t\tv[703,6] = 17\n\t\tv[704,6] = 117\n\t\tv[705,6] = 69\n\t\tv[706,6] = 97\n\t\tv[707,6] = 87\n\t\tv[708,6] = 111\n\t\tv[709,6] = 37\n\t\tv[710,6] = 93\n\t\tv[711,6] = 59\n\t\tv[712,6] = 79\n\t\tv[713,6] = 95\n\t\tv[714,6] = 53\n\t\tv[715,6] = 115\n\t\tv[716,6] = 53\n\t\tv[717,6] = 85\n\t\tv[718,6] = 85\n\t\tv[719,6] = 65\n\t\tv[720,6] = 59\n\t\tv[721,6] = 23\n\t\tv[722,6] = 75\n\t\tv[723,6] = 21\n\t\tv[724,6] = 67\n\t\tv[725,6] = 27\n\t\tv[726,6] = 99\n\t\tv[727,6] = 79\n\t\tv[728,6] = 27\n\t\tv[729,6] = 3\n\t\tv[730,6] = 95\n\t\tv[731,6] = 27\n\t\tv[732,6] = 69\n\t\tv[733,6] = 19\n\t\tv[734,6] = 75\n\t\tv[735,6] = 47\n\t\tv[736,6] = 59\n\t\tv[737,6] = 41\n\t\tv[738,6] = 85\n\t\tv[739,6] = 77\n\t\tv[740,6] = 99\n\t\tv[741,6] = 55\n\t\tv[742,6] = 49\n\t\tv[743,6] = 93\n\t\tv[744,6] = 93\n\t\tv[745,6] = 119\n\t\tv[746,6] = 51\n\t\tv[747,6] = 125\n\t\tv[748,6] = 63\n\t\tv[749,6] = 13\n\t\tv[750,6] = 15\n\t\tv[751,6] = 45\n\t\tv[752,6] = 61\n\t\tv[753,6] = 19\n\t\tv[754,6] = 105\n\t\tv[755,6] = 115\n\t\tv[756,6] = 17\n\t\tv[757,6] = 83\n\t\tv[758,6] = 7\n\t\tv[759,6] = 7\n\t\tv[760,6] = 11\n\t\tv[761,6] = 61\n\t\tv[762,6] = 37\n\t\tv[763,6] = 63\n\t\tv[764,6] = 89\n\t\tv[765,6] = 95\n\t\tv[766,6] = 119\n\t\tv[767,6] = 113\n\t\tv[768,6] = 67\n\t\tv[769,6] = 123\n\t\tv[770,6] = 91\n\t\tv[771,6] = 33\n\t\tv[772,6] = 37\n\t\tv[773,6] = 99\n\t\tv[774,6] = 43\n\t\tv[775,6] = 11\n\t\tv[776,6] = 33\n\t\tv[777,6] = 65\n\t\tv[778,6] = 81\n\t\tv[779,6] = 79\n\t\tv[780,6] = 81\n\t\tv[781,6] = 107\n\t\tv[782,6] = 63\n\t\tv[783,6] = 63\n\t\tv[784,6] = 55\n\t\tv[785,6] = 89\n\t\tv[786,6] = 91\n\t\tv[787,6] = 25\n\t\tv[788,6] = 93\n\t\tv[789,6] = 101\n\t\tv[790,6] = 27\n\t\tv[791,6] = 55\n\t\tv[792,6] = 75\n\t\tv[793,6] = 121\n\t\tv[794,6] = 79\n\t\tv[795,6] = 43\n\t\tv[796,6] = 125\n\t\tv[797,6] = 73\n\t\tv[798,6] = 27\n\t\tv[799,6] = 109\n\t\tv[800,6] = 35\n\t\tv[801,6] = 21\n\t\tv[802,6] = 71\n\t\tv[803,6] = 113\n\t\tv[804,6] = 89\n\t\tv[805,6] = 59\n\t\tv[806,6] = 95\n\t\tv[807,6] = 41\n\t\tv[808,6] = 45\n\t\tv[809,6] = 113\n\t\tv[810,6] = 119\n\t\tv[811,6] = 113\n\t\tv[812,6] = 39\n\t\tv[813,6] = 59\n\t\tv[814,6] = 73\n\t\tv[815,6] = 15\n\t\tv[816,6] = 13\n\t\tv[817,6] = 59\n\t\tv[818,6] = 67\n\t\tv[819,6] = 121\n\t\tv[820,6] = 27\n\t\tv[821,6] = 7\n\t\tv[822,6] = 105\n\t\tv[823,6] = 15\n\t\tv[824,6] = 59\n\t\tv[825,6] = 59\n\t\tv[826,6] = 35\n\t\tv[827,6] = 91\n\t\tv[828,6] = 89\n\t\tv[829,6] = 23\n\t\tv[830,6] = 125\n\t\tv[831,6] = 97\n\t\tv[832,6] = 53\n\t\tv[833,6] = 41\n\t\tv[834,6] = 91\n\t\tv[835,6] = 111\n\t\tv[836,6] = 29\n\t\tv[837,6] = 31\n\t\tv[838,6] = 3\n\t\tv[839,6] = 103\n\t\tv[840,6] = 61\n\t\tv[841,6] = 71\n\t\tv[842,6] = 35\n\t\tv[843,6] = 7\n\t\tv[844,6] = 119\n\t\tv[845,6] = 29\n\t\tv[846,6] = 45\n\t\tv[847,6] = 49\n\t\tv[848,6] = 111\n\t\tv[849,6] = 41\n\t\tv[850,6] = 109\n\t\tv[851,6] = 59\n\t\tv[852,6] = 125\n\t\tv[853,6] = 13\n\t\tv[854,6] = 27\n\t\tv[855,6] = 19\n\t\tv[856,6] = 79\n\t\tv[857,6] = 9\n\t\tv[858,6] = 75\n\t\tv[859,6] = 83\n\t\tv[860,6] = 81\n\t\tv[861,6] = 33\n\t\tv[862,6] = 91\n\t\tv[863,6] = 109\n\t\tv[864,6] = 33\n\t\tv[865,6] = 29\n\t\tv[866,6] = 107\n\t\tv[867,6] = 111\n\t\tv[868,6] = 101\n\t\tv[869,6] = 107\n\t\tv[870,6] = 109\n\t\tv[871,6] = 65\n\t\tv[872,6] = 59\n\t\tv[873,6] = 43\n\t\tv[874,6] = 37\n\t\tv[875,6] = 1\n\t\tv[876,6] = 9\n\t\tv[877,6] = 15\n\t\tv[878,6] = 109\n\t\tv[879,6] = 37\n\t\tv[880,6] = 111\n\t\tv[881,6] = 113\n\t\tv[882,6] = 119\n\t\tv[883,6] = 79\n\t\tv[884,6] = 73\n\t\tv[885,6] = 65\n\t\tv[886,6] = 71\n\t\tv[887,6] = 93\n\t\tv[888,6] = 17\n\t\tv[889,6] = 101\n\t\tv[890,6] = 87\n\t\tv[891,6] = 97\n\t\tv[892,6] = 43\n\t\tv[893,6] = 23\n\t\tv[894,6] = 75\n\t\tv[895,6] = 109\n\t\tv[896,6] = 41\n\t\tv[897,6] = 49\n\t\tv[898,6] = 53\n\t\tv[899,6] = 31\n\t\tv[900,6] = 97\n\t\tv[901,6] = 105\n\t\tv[902,6] = 109\n\t\tv[903,6] = 119\n\t\tv[904,6] = 51\n\t\tv[905,6] = 9\n\t\tv[906,6] = 53\n\t\tv[907,6] = 113\n\t\tv[908,6] = 97\n\t\tv[909,6] = 73\n\t\tv[910,6] = 89\n\t\tv[911,6] = 79\n\t\tv[912,6] = 49\n\t\tv[913,6] = 61\n\t\tv[914,6] = 105\n\t\tv[915,6] = 13\n\t\tv[916,6] = 99\n\t\tv[917,6] = 53\n\t\tv[918,6] = 71\n\t\tv[919,6] = 7\n\t\tv[920,6] = 87\n\t\tv[921,6] = 21\n\t\tv[922,6] = 101\n\t\tv[923,6] = 5\n\t\tv[924,6] = 71\n\t\tv[925,6] = 31\n\t\tv[926,6] = 123\n\t\tv[927,6] = 121\n\t\tv[928,6] = 121\n\t\tv[929,6] = 73\n\t\tv[930,6] = 79\n\t\tv[931,6] = 115\n\t\tv[932,6] = 13\n\t\tv[933,6] = 39\n\t\tv[934,6] = 101\n\t\tv[935,6] = 19\n\t\tv[936,6] = 37\n\t\tv[937,6] = 51\n\t\tv[938,6] = 83\n\t\tv[939,6] = 97\n\t\tv[940,6] = 55\n\t\tv[941,6] = 81\n\t\tv[942,6] = 91\n\t\tv[943,6] = 127\n\t\tv[944,6] = 105\n\t\tv[945,6] = 89\n\t\tv[946,6] = 63\n\t\tv[947,6] = 47\n\t\tv[948,6] = 49\n\t\tv[949,6] = 75\n\t\tv[950,6] = 37\n\t\tv[951,6] = 77\n\t\tv[952,6] = 15\n\t\tv[953,6] = 49\n\t\tv[954,6] = 107\n\t\tv[955,6] = 23\n\t\tv[956,6] = 23\n\t\tv[957,6] = 35\n\t\tv[958,6] = 19\n\t\tv[959,6] = 69\n\t\tv[960,6] = 17\n\t\tv[961,6] = 59\n\t\tv[962,6] = 63\n\t\tv[963,6] = 73\n\t\tv[964,6] = 29\n\t\tv[965,6] = 125\n\t\tv[966,6] = 61\n\t\tv[967,6] = 65\n\t\tv[968,6] = 95\n\t\tv[969,6] = 101\n\t\tv[970,6] = 81\n\t\tv[971,6] = 57\n\t\tv[972,6] = 69\n\t\tv[973,6] = 83\n\t\tv[974,6] = 37\n\t\tv[975,6] = 11\n\t\tv[976,6] = 37\n\t\tv[977,6] = 95\n\t\tv[978,6] = 1\n\t\tv[979,6] = 73\n\t\tv[980,6] = 27\n\t\tv[981,6] = 29\n\t\tv[982,6] = 57\n\t\tv[983,6] = 7\n\t\tv[984,6] = 65\n\t\tv[985,6] = 83\n\t\tv[986,6] = 99\n\t\tv[987,6] = 69\n\t\tv[988,6] = 19\n\t\tv[989,6] = 103\n\t\tv[990,6] = 43\n\t\tv[991,6] = 95\n\t\tv[992,6] = 25\n\t\tv[993,6] = 19\n\t\tv[994,6] = 103\n\t\tv[995,6] = 41\n\t\tv[996,6] = 125\n\t\tv[997,6] = 97\n\t\tv[998,6] = 71\n\t\tv[999,6] = 105\n\t\tv[1000,6] = 83\n\t\tv[1001,6] = 83\n\t\tv[1002,6] = 61\n\t\tv[1003,6] = 39\n\t\tv[1004,6] = 9\n\t\tv[1005,6] = 45\n\t\tv[1006,6] = 117\n\t\tv[1007,6] = 63\n\t\tv[1008,6] = 31\n\t\tv[1009,6] = 5\n\t\tv[1010,6] = 117\n\t\tv[1011,6] = 67\n\t\tv[1012,6] = 125\n\t\tv[1013,6] = 41\n\t\tv[1014,6] = 117\n\t\tv[1015,6] = 43\n\t\tv[1016,6] = 77\n\t\tv[1017,6] = 97\n\t\tv[1018,6] = 15\n\t\tv[1019,6] = 29\n\t\tv[1020,6] = 5\n\t\tv[1021,6] = 59\n\t\tv[1022,6] = 25\n\t\tv[1023,6] = 63\n\t\tv[1024,6] = 87\n\t\tv[1025,6] = 39\n\t\tv[1026,6] = 39\n\t\tv[1027,6] = 77\n\t\tv[1028,6] = 85\n\t\tv[1029,6] = 37\n\t\tv[1030,6] = 81\n\t\tv[1031,6] = 73\n\t\tv[1032,6] = 89\n\t\tv[1033,6] = 29\n\t\tv[1034,6] = 125\n\t\tv[1035,6] = 109\n\t\tv[1036,6] = 21\n\t\tv[1037,6] = 23\n\t\tv[1038,6] = 119\n\t\tv[1039,6] = 105\n\t\tv[1040,6] = 43\n\t\tv[1041,6] = 93\n\t\tv[1042,6] = 97\n\t\tv[1043,6] = 15\n\t\tv[1044,6] = 125\n\t\tv[1045,6] = 29\n\t\tv[1046,6] = 51\n\t\tv[1047,6] = 69\n\t\tv[1048,6] = 37\n\t\tv[1049,6] = 45\n\t\tv[1050,6] = 31\n\t\tv[1051,6] = 75\n\t\tv[1052,6] = 109\n\t\tv[1053,6] = 119\n\t\tv[1054,6] = 53\n\t\tv[1055,6] = 5\n\t\tv[1056,6] = 101\n\t\tv[1057,6] = 125\n\t\tv[1058,6] = 121\n\t\tv[1059,6] = 35\n\t\tv[1060,6] = 29\n\t\tv[1061,6] = 7\n\t\tv[1062,6] = 63\n\t\tv[1063,6] = 17\n\t\tv[1064,6] = 63\n\t\tv[1065,6] = 13\n\t\tv[1066,6] = 69\n\t\tv[1067,6] = 15\n\t\tv[1068,6] = 105\n\t\tv[1069,6] = 51\n\t\tv[1070,6] = 127\n\t\tv[1071,6] = 105\n\t\tv[1072,6] = 9\n\t\tv[1073,6] = 57\n\t\tv[1074,6] = 95\n\t\tv[1075,6] = 59\n\t\tv[1076,6] = 109\n\t\tv[1077,6] = 35\n\t\tv[1078,6] = 49\n\t\tv[1079,6] = 23\n\t\tv[1080,6] = 33\n\t\tv[1081,6] = 107\n\t\tv[1082,6] = 55\n\t\tv[1083,6] = 33\n\t\tv[1084,6] = 57\n\t\tv[1085,6] = 79\n\t\tv[1086,6] = 73\n\t\tv[1087,6] = 69\n\t\tv[1088,6] = 59\n\t\tv[1089,6] = 107\n\t\tv[1090,6] = 55\n\t\tv[1091,6] = 11\n\t\tv[1092,6] = 63\n\t\tv[1093,6] = 95\n\t\tv[1094,6] = 103\n\t\tv[1095,6] = 23\n\t\tv[1096,6] = 125\n\t\tv[1097,6] = 91\n\t\tv[1098,6] = 31\n\t\tv[1099,6] = 91\n\t\tv[1100,6] = 51\n\t\tv[1101,6] = 65\n\t\tv[1102,6] = 61\n\t\tv[1103,6] = 75\n\t\tv[1104,6] = 69\n\t\tv[1105,6] = 107\n\t\tv[1106,6] = 65\n\t\tv[1107,6] = 101\n\t\tv[1108,6] = 59\n\t\tv[1109,6] = 35\n\t\tv[1110,6] = 15\n\n\t\tv[37,7] = 7\n\t\tv[38,7] = 23\n\t\tv[39,7] = 39\n\t\tv[40,7] = 217\n\t\tv[41,7] = 141\n\t\tv[42,7] = 27\n\t\tv[43,7] = 53\n\t\tv[44,7] = 181\n\t\tv[45,7] = 169\n\t\tv[46,7] = 35\n\t\tv[47,7] = 15\n\t\tv[48,7] = 207\n\t\tv[49,7] = 45\n\t\tv[50,7] = 247\n\t\tv[51,7] = 185\n\t\tv[52,7] = 117\n\t\tv[53,7] = 41\n\t\tv[54,7] = 81\n\t\tv[55,7] = 223\n\t\tv[56,7] = 151\n\t\tv[57,7] = 81\n\t\tv[58,7] = 189\n\t\tv[59,7] = 61\n\t\tv[60,7] = 95\n\t\tv[61,7] = 185\n\t\tv[62,7] = 23\n\t\tv[63,7] = 73\n\t\tv[64,7] = 113\n\t\tv[65,7] = 239\n\t\tv[66,7] = 85\n\t\tv[67,7] = 9\n\t\tv[68,7] = 201\n\t\tv[69,7] = 83\n\t\tv[70,7] = 53\n\t\tv[71,7] = 183\n\t\tv[72,7] = 203\n\t\tv[73,7] = 91\n\t\tv[74,7] = 149\n\t\tv[75,7] = 101\n\t\tv[76,7] = 13\n\t\tv[77,7] = 111\n\t\tv[78,7] = 239\n\t\tv[79,7] = 3\n\t\tv[80,7] = 205\n\t\tv[81,7] = 253\n\t\tv[82,7] = 247\n\t\tv[83,7] = 121\n\t\tv[84,7] = 189\n\t\tv[85,7] = 169\n\t\tv[86,7] = 179\n\t\tv[87,7] = 197\n\t\tv[88,7] = 175\n\t\tv[89,7] = 217\n\t\tv[90,7] = 249\n\t\tv[91,7] = 195\n\t\tv[92,7] = 95\n\t\tv[93,7] = 63\n\t\tv[94,7] = 19\n\t\tv[95,7] = 7\n\t\tv[96,7] = 5\n\t\tv[97,7] = 75\n\t\tv[98,7] = 217\n\t\tv[99,7] = 245\n\t\tv[100,7] = 111\n\t\tv[101,7] = 189\n\t\tv[102,7] = 165\n\t\tv[103,7] = 169\n\t\tv[104,7] = 141\n\t\tv[105,7] = 221\n\t\tv[106,7] = 249\n\t\tv[107,7] = 159\n\t\tv[108,7] = 253\n\t\tv[109,7] = 207\n\t\tv[110,7] = 249\n\t\tv[111,7] = 219\n\t\tv[112,7] = 23\n\t\tv[113,7] = 49\n\t\tv[114,7] = 127\n\t\tv[115,7] = 237\n\t\tv[116,7] = 5\n\t\tv[117,7] = 25\n\t\tv[118,7] = 177\n\t\tv[119,7] = 37\n\t\tv[120,7] = 103\n\t\tv[121,7] = 65\n\t\tv[122,7] = 167\n\t\tv[123,7] = 81\n\t\tv[124,7] = 87\n\t\tv[125,7] = 119\n\t\tv[126,7] = 45\n\t\tv[127,7] = 79\n\t\tv[128,7] = 143\n\t\tv[129,7] = 57\n\t\tv[130,7] = 79\n\t\tv[131,7] = 187\n\t\tv[132,7] = 143\n\t\tv[133,7] = 183\n\t\tv[134,7] = 75\n\t\tv[135,7] = 97\n\t\tv[136,7] = 211\n\t\tv[137,7] = 149\n\t\tv[138,7] = 175\n\t\tv[139,7] = 37\n\t\tv[140,7] = 135\n\t\tv[141,7] = 189\n\t\tv[142,7] = 225\n\t\tv[143,7] = 241\n\t\tv[144,7] = 63\n\t\tv[145,7] = 33\n\t\tv[146,7] = 43\n\t\tv[147,7] = 13\n\t\tv[148,7] = 73\n\t\tv[149,7] = 213\n\t\tv[150,7] = 57\n\t\tv[151,7] = 239\n\t\tv[152,7] = 183\n\t\tv[153,7] = 117\n\t\tv[154,7] = 21\n\t\tv[155,7] = 29\n\t\tv[156,7] = 115\n\t\tv[157,7] = 43\n\t\tv[158,7] = 205\n\t\tv[159,7] = 223\n\t\tv[160,7] = 15\n\t\tv[161,7] = 3\n\t\tv[162,7] = 159\n\t\tv[163,7] = 51\n\t\tv[164,7] = 101\n\t\tv[165,7] = 127\n\t\tv[166,7] = 99\n\t\tv[167,7] = 239\n\t\tv[168,7] = 171\n\t\tv[169,7] = 113\n\t\tv[170,7] = 171\n\t\tv[171,7] = 119\n\t\tv[172,7] = 189\n\t\tv[173,7] = 245\n\t\tv[174,7] = 201\n\t\tv[175,7] = 27\n\t\tv[176,7] = 185\n\t\tv[177,7] = 229\n\t\tv[178,7] = 105\n\t\tv[179,7] = 153\n\t\tv[180,7] = 189\n\t\tv[181,7] = 33\n\t\tv[182,7] = 35\n\t\tv[183,7] = 137\n\t\tv[184,7] = 77\n\t\tv[185,7] = 97\n\t\tv[186,7] = 17\n\t\tv[187,7] = 181\n\t\tv[188,7] = 55\n\t\tv[189,7] = 197\n\t\tv[190,7] = 201\n\t\tv[191,7] = 155\n\t\tv[192,7] = 37\n\t\tv[193,7] = 197\n\t\tv[194,7] = 137\n\t\tv[195,7] = 223\n\t\tv[196,7] = 25\n\t\tv[197,7] = 179\n\t\tv[198,7] = 91\n\t\tv[199,7] = 23\n\t\tv[200,7] = 235\n\t\tv[201,7] = 53\n\t\tv[202,7] = 253\n\t\tv[203,7] = 49\n\t\tv[204,7] = 181\n\t\tv[205,7] = 249\n\t\tv[206,7] = 53\n\t\tv[207,7] = 173\n\t\tv[208,7] = 97\n\t\tv[209,7] = 247\n\t\tv[210,7] = 67\n\t\tv[211,7] = 115\n\t\tv[212,7] = 103\n\t\tv[213,7] = 159\n\t\tv[214,7] = 239\n\t\tv[215,7] = 69\n\t\tv[216,7] = 173\n\t\tv[217,7] = 217\n\t\tv[218,7] = 95\n\t\tv[219,7] = 221\n\t\tv[220,7] = 247\n\t\tv[221,7] = 97\n\t\tv[222,7] = 91\n\t\tv[223,7] = 123\n\t\tv[224,7] = 223\n\t\tv[225,7] = 213\n\t\tv[226,7] = 129\n\t\tv[227,7] = 181\n\t\tv[228,7] = 87\n\t\tv[229,7] = 239\n\t\tv[230,7] = 85\n\t\tv[231,7] = 89\n\t\tv[232,7] = 249\n\t\tv[233,7] = 141\n\t\tv[234,7] = 39\n\t\tv[235,7] = 57\n\t\tv[236,7] = 249\n\t\tv[237,7] = 71\n\t\tv[238,7] = 101\n\t\tv[239,7] = 159\n\t\tv[240,7] = 33\n\t\tv[241,7] = 137\n\t\tv[242,7] = 189\n\t\tv[243,7] = 71\n\t\tv[244,7] = 253\n\t\tv[245,7] = 205\n\t\tv[246,7] = 171\n\t\tv[247,7] = 13\n\t\tv[248,7] = 249\n\t\tv[249,7] = 109\n\t\tv[250,7] = 131\n\t\tv[251,7] = 199\n\t\tv[252,7] = 189\n\t\tv[253,7] = 179\n\t\tv[254,7] = 31\n\t\tv[255,7] = 99\n\t\tv[256,7] = 113\n\t\tv[257,7] = 41\n\t\tv[258,7] = 173\n\t\tv[259,7] = 23\n\t\tv[260,7] = 189\n\t\tv[261,7] = 197\n\t\tv[262,7] = 3\n\t\tv[263,7] = 135\n\t\tv[264,7] = 9\n\t\tv[265,7] = 95\n\t\tv[266,7] = 195\n\t\tv[267,7] = 27\n\t\tv[268,7] = 183\n\t\tv[269,7] = 1\n\t\tv[270,7] = 123\n\t\tv[271,7] = 73\n\t\tv[272,7] = 53\n\t\tv[273,7] = 99\n\t\tv[274,7] = 197\n\t\tv[275,7] = 59\n\t\tv[276,7] = 27\n\t\tv[277,7] = 101\n\t\tv[278,7] = 55\n\t\tv[279,7] = 193\n\t\tv[280,7] = 31\n\t\tv[281,7] = 61\n\t\tv[282,7] = 119\n\t\tv[283,7] = 11\n\t\tv[284,7] = 7\n\t\tv[285,7] = 255\n\t\tv[286,7] = 233\n\t\tv[287,7] = 53\n\t\tv[288,7] = 157\n\t\tv[289,7] = 193\n\t\tv[290,7] = 97\n\t\tv[291,7] = 83\n\t\tv[292,7] = 65\n\t\tv[293,7] = 81\n\t\tv[294,7] = 239\n\t\tv[295,7] = 167\n\t\tv[296,7] = 69\n\t\tv[297,7] = 71\n\t\tv[298,7] = 109\n\t\tv[299,7] = 97\n\t\tv[300,7] = 137\n\t\tv[301,7] = 71\n\t\tv[302,7] = 193\n\t\tv[303,7] = 189\n\t\tv[304,7] = 115\n\t\tv[305,7] = 79\n\t\tv[306,7] = 205\n\t\tv[307,7] = 37\n\t\tv[308,7] = 227\n\t\tv[309,7] = 53\n\t\tv[310,7] = 33\n\t\tv[311,7] = 91\n\t\tv[312,7] = 229\n\t\tv[313,7] = 245\n\t\tv[314,7] = 105\n\t\tv[315,7] = 77\n\t\tv[316,7] = 229\n\t\tv[317,7] = 161\n\t\tv[318,7] = 103\n\t\tv[319,7] = 93\n\t\tv[320,7] = 13\n\t\tv[321,7] = 161\n\t\tv[322,7] = 229\n\t\tv[323,7] = 223\n\t\tv[324,7] = 69\n\t\tv[325,7] = 15\n\t\tv[326,7] = 25\n\t\tv[327,7] = 23\n\t\tv[328,7] = 233\n\t\tv[329,7] = 93\n\t\tv[330,7] = 25\n\t\tv[331,7] = 217\n\t\tv[332,7] = 247\n\t\tv[333,7] = 61\n\t\tv[334,7] = 75\n\t\tv[335,7] = 27\n\t\tv[336,7] = 9\n\t\tv[337,7] = 223\n\t\tv[338,7] = 213\n\t\tv[339,7] = 55\n\t\tv[340,7] = 197\n\t\tv[341,7] = 145\n\t\tv[342,7] = 89\n\t\tv[343,7] = 199\n\t\tv[344,7] = 41\n\t\tv[345,7] = 201\n\t\tv[346,7] = 5\n\t\tv[347,7] = 149\n\t\tv[348,7] = 35\n\t\tv[349,7] = 119\n\t\tv[350,7] = 183\n\t\tv[351,7] = 53\n\t\tv[352,7] = 11\n\t\tv[353,7] = 13\n\t\tv[354,7] = 3\n\t\tv[355,7] = 179\n\t\tv[356,7] = 229\n\t\tv[357,7] = 43\n\t\tv[358,7] = 55\n\t\tv[359,7] = 187\n\t\tv[360,7] = 233\n\t\tv[361,7] = 47\n\t\tv[362,7] = 133\n\t\tv[363,7] = 91\n\t\tv[364,7] = 47\n\t\tv[365,7] = 71\n\t\tv[366,7] = 93\n\t\tv[367,7] = 105\n\t\tv[368,7] = 145\n\t\tv[369,7] = 45\n\t\tv[370,7] = 255\n\t\tv[371,7] = 221\n\t\tv[372,7] = 115\n\t\tv[373,7] = 175\n\t\tv[374,7] = 19\n\t\tv[375,7] = 129\n\t\tv[376,7] = 5\n\t\tv[377,7] = 209\n\t\tv[378,7] = 197\n\t\tv[379,7] = 57\n\t\tv[380,7] = 177\n\t\tv[381,7] = 115\n\t\tv[382,7] = 187\n\t\tv[383,7] = 119\n\t\tv[384,7] = 77\n\t\tv[385,7] = 211\n\t\tv[386,7] = 111\n\t\tv[387,7] = 33\n\t\tv[388,7] = 113\n\t\tv[389,7] = 23\n\t\tv[390,7] = 87\n\t\tv[391,7] = 137\n\t\tv[392,7] = 41\n\t\tv[393,7] = 7\n\t\tv[394,7] = 83\n\t\tv[395,7] = 43\n\t\tv[396,7] = 121\n\t\tv[397,7] = 145\n\t\tv[398,7] = 5\n\t\tv[399,7] = 219\n\t\tv[400,7] = 27\n\t\tv[401,7] = 11\n\t\tv[402,7] = 111\n\t\tv[403,7] = 207\n\t\tv[404,7] = 55\n\t\tv[405,7] = 97\n\t\tv[406,7] = 63\n\t\tv[407,7] = 229\n\t\tv[408,7] = 53\n\t\tv[409,7] = 33\n\t\tv[410,7] = 149\n\t\tv[411,7] = 23\n\t\tv[412,7] = 187\n\t\tv[413,7] = 153\n\t\tv[414,7] = 91\n\t\tv[415,7] = 193\n\t\tv[416,7] = 183\n\t\tv[417,7] = 59\n\t\tv[418,7] = 211\n\t\tv[419,7] = 93\n\t\tv[420,7] = 139\n\t\tv[421,7] = 59\n\t\tv[422,7] = 179\n\t\tv[423,7] = 163\n\t\tv[424,7] = 209\n\t\tv[425,7] = 77\n\t\tv[426,7] = 39\n\t\tv[427,7] = 111\n\t\tv[428,7] = 79\n\t\tv[429,7] = 229\n\t\tv[430,7] = 85\n\t\tv[431,7] = 237\n\t\tv[432,7] = 199\n\t\tv[433,7] = 137\n\t\tv[434,7] = 147\n\t\tv[435,7] = 25\n\t\tv[436,7] = 73\n\t\tv[437,7] = 121\n\t\tv[438,7] = 129\n\t\tv[439,7] = 83\n\t\tv[440,7] = 87\n\t\tv[441,7] = 93\n\t\tv[442,7] = 205\n\t\tv[443,7] = 167\n\t\tv[444,7] = 53\n\t\tv[445,7] = 107\n\t\tv[446,7] = 229\n\t\tv[447,7] = 213\n\t\tv[448,7] = 95\n\t\tv[449,7] = 219\n\t\tv[450,7] = 109\n\t\tv[451,7] = 175\n\t\tv[452,7] = 13\n\t\tv[453,7] = 209\n\t\tv[454,7] = 97\n\t\tv[455,7] = 61\n\t\tv[456,7] = 147\n\t\tv[457,7] = 19\n\t\tv[458,7] = 13\n\t\tv[459,7] = 123\n\t\tv[460,7] = 73\n\t\tv[461,7] = 35\n\t\tv[462,7] = 141\n\t\tv[463,7] = 81\n\t\tv[464,7] = 19\n\t\tv[465,7] = 171\n\t\tv[466,7] = 255\n\t\tv[467,7] = 111\n\t\tv[468,7] = 107\n\t\tv[469,7] = 233\n\t\tv[470,7] = 113\n\t\tv[471,7] = 133\n\t\tv[472,7] = 89\n\t\tv[473,7] = 9\n\t\tv[474,7] = 231\n\t\tv[475,7] = 95\n\t\tv[476,7] = 69\n\t\tv[477,7] = 33\n\t\tv[478,7] = 1\n\t\tv[479,7] = 253\n\t\tv[480,7] = 219\n\t\tv[481,7] = 253\n\t\tv[482,7] = 247\n\t\tv[483,7] = 129\n\t\tv[484,7] = 11\n\t\tv[485,7] = 251\n\t\tv[486,7] = 221\n\t\tv[487,7] = 153\n\t\tv[488,7] = 35\n\t\tv[489,7] = 103\n\t\tv[490,7] = 239\n\t\tv[491,7] = 7\n\t\tv[492,7] = 27\n\t\tv[493,7] = 235\n\t\tv[494,7] = 181\n\t\tv[495,7] = 5\n\t\tv[496,7] = 207\n\t\tv[497,7] = 53\n\t\tv[498,7] = 149\n\t\tv[499,7] = 155\n\t\tv[500,7] = 225\n\t\tv[501,7] = 165\n\t\tv[502,7] = 137\n\t\tv[503,7] = 155\n\t\tv[504,7] = 201\n\t\tv[505,7] = 97\n\t\tv[506,7] = 245\n\t\tv[507,7] = 203\n\t\tv[508,7] = 47\n\t\tv[509,7] = 39\n\t\tv[510,7] = 35\n\t\tv[511,7] = 105\n\t\tv[512,7] = 239\n\t\tv[513,7] = 49\n\t\tv[514,7] = 15\n\t\tv[515,7] = 253\n\t\tv[516,7] = 7\n\t\tv[517,7] = 237\n\t\tv[518,7] = 213\n\t\tv[519,7] = 55\n\t\tv[520,7] = 87\n\t\tv[521,7] = 199\n\t\tv[522,7] = 27\n\t\tv[523,7] = 175\n\t\tv[524,7] = 49\n\t\tv[525,7] = 41\n\t\tv[526,7] = 229\n\t\tv[527,7] = 85\n\t\tv[528,7] = 3\n\t\tv[529,7] = 149\n\t\tv[530,7] = 179\n\t\tv[531,7] = 129\n\t\tv[532,7] = 185\n\t\tv[533,7] = 249\n\t\tv[534,7] = 197\n\t\tv[535,7] = 15\n\t\tv[536,7] = 97\n\t\tv[537,7] = 197\n\t\tv[538,7] = 139\n\t\tv[539,7] = 203\n\t\tv[540,7] = 63\n\t\tv[541,7] = 33\n\t\tv[542,7] = 251\n\t\tv[543,7] = 217\n\t\tv[544,7] = 199\n\t\tv[545,7] = 199\n\t\tv[546,7] = 99\n\t\tv[547,7] = 249\n\t\tv[548,7] = 33\n\t\tv[549,7] = 229\n\t\tv[550,7] = 177\n\t\tv[551,7] = 13\n\t\tv[552,7] = 209\n\t\tv[553,7] = 147\n\t\tv[554,7] = 97\n\t\tv[555,7] = 31\n\t\tv[556,7] = 125\n\t\tv[557,7] = 177\n\t\tv[558,7] = 137\n\t\tv[559,7] = 187\n\t\tv[560,7] = 11\n\t\tv[561,7] = 91\n\t\tv[562,7] = 223\n\t\tv[563,7] = 29\n\t\tv[564,7] = 169\n\t\tv[565,7] = 231\n\t\tv[566,7] = 59\n\t\tv[567,7] = 31\n\t\tv[568,7] = 163\n\t\tv[569,7] = 41\n\t\tv[570,7] = 57\n\t\tv[571,7] = 87\n\t\tv[572,7] = 247\n\t\tv[573,7] = 25\n\t\tv[574,7] = 127\n\t\tv[575,7] = 101\n\t\tv[576,7] = 207\n\t\tv[577,7] = 187\n\t\tv[578,7] = 73\n\t\tv[579,7] = 61\n\t\tv[580,7] = 105\n\t\tv[581,7] = 27\n\t\tv[582,7] = 91\n\t\tv[583,7] = 171\n\t\tv[584,7] = 243\n\t\tv[585,7] = 33\n\t\tv[586,7] = 3\n\t\tv[587,7] = 1\n\t\tv[588,7] = 21\n\t\tv[589,7] = 229\n\t\tv[590,7] = 93\n\t\tv[591,7] = 71\n\t\tv[592,7] = 61\n\t\tv[593,7] = 37\n\t\tv[594,7] = 183\n\t\tv[595,7] = 65\n\t\tv[596,7] = 211\n\t\tv[597,7] = 53\n\t\tv[598,7] = 11\n\t\tv[599,7] = 151\n\t\tv[600,7] = 165\n\t\tv[601,7] = 47\n\t\tv[602,7] = 5\n\t\tv[603,7] = 129\n\t\tv[604,7] = 79\n\t\tv[605,7] = 101\n\t\tv[606,7] = 147\n\t\tv[607,7] = 169\n\t\tv[608,7] = 181\n\t\tv[609,7] = 19\n\t\tv[610,7] = 95\n\t\tv[611,7] = 77\n\t\tv[612,7] = 139\n\t\tv[613,7] = 197\n\t\tv[614,7] = 219\n\t\tv[615,7] = 97\n\t\tv[616,7] = 239\n\t\tv[617,7] = 183\n\t\tv[618,7] = 143\n\t\tv[619,7] = 9\n\t\tv[620,7] = 13\n\t\tv[621,7] = 209\n\t\tv[622,7] = 23\n\t\tv[623,7] = 215\n\t\tv[624,7] = 53\n\t\tv[625,7] = 137\n\t\tv[626,7] = 203\n\t\tv[627,7] = 19\n\t\tv[628,7] = 151\n\t\tv[629,7] = 171\n\t\tv[630,7] = 133\n\t\tv[631,7] = 219\n\t\tv[632,7] = 231\n\t\tv[633,7] = 3\n\t\tv[634,7] = 15\n\t\tv[635,7] = 253\n\t\tv[636,7] = 225\n\t\tv[637,7] = 33\n\t\tv[638,7] = 111\n\t\tv[639,7] = 183\n\t\tv[640,7] = 213\n\t\tv[641,7] = 169\n\t\tv[642,7] = 119\n\t\tv[643,7] = 111\n\t\tv[644,7] = 15\n\t\tv[645,7] = 201\n\t\tv[646,7] = 123\n\t\tv[647,7] = 121\n\t\tv[648,7] = 225\n\t\tv[649,7] = 113\n\t\tv[650,7] = 113\n\t\tv[651,7] = 225\n\t\tv[652,7] = 161\n\t\tv[653,7] = 165\n\t\tv[654,7] = 1\n\t\tv[655,7] = 139\n\t\tv[656,7] = 55\n\t\tv[657,7] = 3\n\t\tv[658,7] = 93\n\t\tv[659,7] = 217\n\t\tv[660,7] = 193\n\t\tv[661,7] = 97\n\t\tv[662,7] = 29\n\t\tv[663,7] = 69\n\t\tv[664,7] = 231\n\t\tv[665,7] = 161\n\t\tv[666,7] = 93\n\t\tv[667,7] = 69\n\t\tv[668,7] = 143\n\t\tv[669,7] = 137\n\t\tv[670,7] = 9\n\t\tv[671,7] = 87\n\t\tv[672,7] = 183\n\t\tv[673,7] = 113\n\t\tv[674,7] = 183\n\t\tv[675,7] = 73\n\t\tv[676,7] = 215\n\t\tv[677,7] = 137\n\t\tv[678,7] = 89\n\t\tv[679,7] = 251\n\t\tv[680,7] = 163\n\t\tv[681,7] = 41\n\t\tv[682,7] = 227\n\t\tv[683,7] = 145\n\t\tv[684,7] = 57\n\t\tv[685,7] = 81\n\t\tv[686,7] = 57\n\t\tv[687,7] = 11\n\t\tv[688,7] = 135\n\t\tv[689,7] = 145\n\t\tv[690,7] = 161\n\t\tv[691,7] = 175\n\t\tv[692,7] = 159\n\t\tv[693,7] = 25\n\t\tv[694,7] = 55\n\t\tv[695,7] = 167\n\t\tv[696,7] = 157\n\t\tv[697,7] = 211\n\t\tv[698,7] = 97\n\t\tv[699,7] = 247\n\t\tv[700,7] = 249\n\t\tv[701,7] = 23\n\t\tv[702,7] = 129\n\t\tv[703,7] = 159\n\t\tv[704,7] = 71\n\t\tv[705,7] = 197\n\t\tv[706,7] = 127\n\t\tv[707,7] = 141\n\t\tv[708,7] = 219\n\t\tv[709,7] = 5\n\t\tv[710,7] = 233\n\t\tv[711,7] = 131\n\t\tv[712,7] = 217\n\t\tv[713,7] = 101\n\t\tv[714,7] = 131\n\t\tv[715,7] = 33\n\t\tv[716,7] = 157\n\t\tv[717,7] = 173\n\t\tv[718,7] = 69\n\t\tv[719,7] = 207\n\t\tv[720,7] = 239\n\t\tv[721,7] = 81\n\t\tv[722,7] = 205\n\t\tv[723,7] = 11\n\t\tv[724,7] = 41\n\t\tv[725,7] = 169\n\t\tv[726,7] = 65\n\t\tv[727,7] = 193\n\t\tv[728,7] = 77\n\t\tv[729,7] = 201\n\t\tv[730,7] = 173\n\t\tv[731,7] = 1\n\t\tv[732,7] = 221\n\t\tv[733,7] = 157\n\t\tv[734,7] = 1\n\t\tv[735,7] = 15\n\t\tv[736,7] = 113\n\t\tv[737,7] = 147\n\t\tv[738,7] = 137\n\t\tv[739,7] = 205\n\t\tv[740,7] = 225\n\t\tv[741,7] = 73\n\t\tv[742,7] = 45\n\t\tv[743,7] = 49\n\t\tv[744,7] = 149\n\t\tv[745,7] = 113\n\t\tv[746,7] = 253\n\t\tv[747,7] = 99\n\t\tv[748,7] = 17\n\t\tv[749,7] = 119\n\t\tv[750,7] = 105\n\t\tv[751,7] = 117\n\t\tv[752,7] = 129\n\t\tv[753,7] = 243\n\t\tv[754,7] = 75\n\t\tv[755,7] = 203\n\t\tv[756,7] = 53\n\t\tv[757,7] = 29\n\t\tv[758,7] = 247\n\t\tv[759,7] = 35\n\t\tv[760,7] = 247\n\t\tv[761,7] = 171\n\t\tv[762,7] = 31\n\t\tv[763,7] = 199\n\t\tv[764,7] = 213\n\t\tv[765,7] = 29\n\t\tv[766,7] = 251\n\t\tv[767,7] = 7\n\t\tv[768,7] = 251\n\t\tv[769,7] = 187\n\t\tv[770,7] = 91\n\t\tv[771,7] = 11\n\t\tv[772,7] = 149\n\t\tv[773,7] = 13\n\t\tv[774,7] = 205\n\t\tv[775,7] = 37\n\t\tv[776,7] = 249\n\t\tv[777,7] = 137\n\t\tv[778,7] = 139\n\t\tv[779,7] = 9\n\t\tv[780,7] = 7\n\t\tv[781,7] = 113\n\t\tv[782,7] = 183\n\t\tv[783,7] = 205\n\t\tv[784,7] = 187\n\t\tv[785,7] = 39\n\t\tv[786,7] = 3\n\t\tv[787,7] = 79\n\t\tv[788,7] = 155\n\t\tv[789,7] = 227\n\t\tv[790,7] = 89\n\t\tv[791,7] = 185\n\t\tv[792,7] = 51\n\t\tv[793,7] = 127\n\t\tv[794,7] = 63\n\t\tv[795,7] = 83\n\t\tv[796,7] = 41\n\t\tv[797,7] = 133\n\t\tv[798,7] = 183\n\t\tv[799,7] = 181\n\t\tv[800,7] = 127\n\t\tv[801,7] = 19\n\t\tv[802,7] = 255\n\t\tv[803,7] = 219\n\t\tv[804,7] = 59\n\t\tv[805,7] = 251\n\t\tv[806,7] = 3\n\t\tv[807,7] = 187\n\t\tv[808,7] = 57\n\t\tv[809,7] = 217\n\t\tv[810,7] = 115\n\t\tv[811,7] = 217\n\t\tv[812,7] = 229\n\t\tv[813,7] = 181\n\t\tv[814,7] = 185\n\t\tv[815,7] = 149\n\t\tv[816,7] = 83\n\t\tv[817,7] = 115\n\t\tv[818,7] = 11\n\t\tv[819,7] = 123\n\t\tv[820,7] = 19\n\t\tv[821,7] = 109\n\t\tv[822,7] = 165\n\t\tv[823,7] = 103\n\t\tv[824,7] = 123\n\t\tv[825,7] = 219\n\t\tv[826,7] = 129\n\t\tv[827,7] = 155\n\t\tv[828,7] = 207\n\t\tv[829,7] = 177\n\t\tv[830,7] = 9\n\t\tv[831,7] = 49\n\t\tv[832,7] = 181\n\t\tv[833,7] = 231\n\t\tv[834,7] = 33\n\t\tv[835,7] = 233\n\t\tv[836,7] = 67\n\t\tv[837,7] = 155\n\t\tv[838,7] = 41\n\t\tv[839,7] = 9\n\t\tv[840,7] = 95\n\t\tv[841,7] = 123\n\t\tv[842,7] = 65\n\t\tv[843,7] = 117\n\t\tv[844,7] = 249\n\t\tv[845,7] = 85\n\t\tv[846,7] = 169\n\t\tv[847,7] = 129\n\t\tv[848,7] = 241\n\t\tv[849,7] = 173\n\t\tv[850,7] = 251\n\t\tv[851,7] = 225\n\t\tv[852,7] = 147\n\t\tv[853,7] = 165\n\t\tv[854,7] = 69\n\t\tv[855,7] = 81\n\t\tv[856,7] = 239\n\t\tv[857,7] = 95\n\t\tv[858,7] = 23\n\t\tv[859,7] = 83\n\t\tv[860,7] = 227\n\t\tv[861,7] = 249\n\t\tv[862,7] = 143\n\t\tv[863,7] = 171\n\t\tv[864,7] = 193\n\t\tv[865,7] = 9\n\t\tv[866,7] = 21\n\t\tv[867,7] = 57\n\t\tv[868,7] = 73\n\t\tv[869,7] = 97\n\t\tv[870,7] = 57\n\t\tv[871,7] = 29\n\t\tv[872,7] = 239\n\t\tv[873,7] = 151\n\t\tv[874,7] = 159\n\t\tv[875,7] = 191\n\t\tv[876,7] = 47\n\t\tv[877,7] = 51\n\t\tv[878,7] = 1\n\t\tv[879,7] = 223\n\t\tv[880,7] = 251\n\t\tv[881,7] = 251\n\t\tv[882,7] = 151\n\t\tv[883,7] = 41\n\t\tv[884,7] = 119\n\t\tv[885,7] = 127\n\t\tv[886,7] = 131\n\t\tv[887,7] = 33\n\t\tv[888,7] = 209\n\t\tv[889,7] = 123\n\t\tv[890,7] = 53\n\t\tv[891,7] = 241\n\t\tv[892,7] = 25\n\t\tv[893,7] = 31\n\t\tv[894,7] = 183\n\t\tv[895,7] = 107\n\t\tv[896,7] = 25\n\t\tv[897,7] = 115\n\t\tv[898,7] = 39\n\t\tv[899,7] = 11\n\t\tv[900,7] = 213\n\t\tv[901,7] = 239\n\t\tv[902,7] = 219\n\t\tv[903,7] = 109\n\t\tv[904,7] = 185\n\t\tv[905,7] = 35\n\t\tv[906,7] = 133\n\t\tv[907,7] = 123\n\t\tv[908,7] = 185\n\t\tv[909,7] = 27\n\t\tv[910,7] = 55\n\t\tv[911,7] = 245\n\t\tv[912,7] = 61\n\t\tv[913,7] = 75\n\t\tv[914,7] = 205\n\t\tv[915,7] = 213\n\t\tv[916,7] = 169\n\t\tv[917,7] = 163\n\t\tv[918,7] = 63\n\t\tv[919,7] = 55\n\t\tv[920,7] = 49\n\t\tv[921,7] = 83\n\t\tv[922,7] = 195\n\t\tv[923,7] = 51\n\t\tv[924,7] = 31\n\t\tv[925,7] = 41\n\t\tv[926,7] = 15\n\t\tv[927,7] = 203\n\t\tv[928,7] = 41\n\t\tv[929,7] = 63\n\t\tv[930,7] = 127\n\t\tv[931,7] = 161\n\t\tv[932,7] = 5\n\t\tv[933,7] = 143\n\t\tv[934,7] = 7\n\t\tv[935,7] = 199\n\t\tv[936,7] = 251\n\t\tv[937,7] = 95\n\t\tv[938,7] = 75\n\t\tv[939,7] = 101\n\t\tv[940,7] = 15\n\t\tv[941,7] = 43\n\t\tv[942,7] = 237\n\t\tv[943,7] = 197\n\t\tv[944,7] = 117\n\t\tv[945,7] = 167\n\t\tv[946,7] = 155\n\t\tv[947,7] = 21\n\t\tv[948,7] = 83\n\t\tv[949,7] = 205\n\t\tv[950,7] = 255\n\t\tv[951,7] = 49\n\t\tv[952,7] = 101\n\t\tv[953,7] = 213\n\t\tv[954,7] = 237\n\t\tv[955,7] = 135\n\t\tv[956,7] = 135\n\t\tv[957,7] = 21\n\t\tv[958,7] = 73\n\t\tv[959,7] = 93\n\t\tv[960,7] = 115\n\t\tv[961,7] = 7\n\t\tv[962,7] = 85\n\t\tv[963,7] = 223\n\t\tv[964,7] = 237\n\t\tv[965,7] = 79\n\t\tv[966,7] = 89\n\t\tv[967,7] = 5\n\t\tv[968,7] = 57\n\t\tv[969,7] = 239\n\t\tv[970,7] = 67\n\t\tv[971,7] = 65\n\t\tv[972,7] = 201\n\t\tv[973,7] = 155\n\t\tv[974,7] = 71\n\t\tv[975,7] = 85\n\t\tv[976,7] = 195\n\t\tv[977,7] = 89\n\t\tv[978,7] = 181\n\t\tv[979,7] = 119\n\t\tv[980,7] = 135\n\t\tv[981,7] = 147\n\t\tv[982,7] = 237\n\t\tv[983,7] = 173\n\t\tv[984,7] = 41\n\t\tv[985,7] = 155\n\t\tv[986,7] = 67\n\t\tv[987,7] = 113\n\t\tv[988,7] = 111\n\t\tv[989,7] = 21\n\t\tv[990,7] = 183\n\t\tv[991,7] = 23\n\t\tv[992,7] = 103\n\t\tv[993,7] = 207\n\t\tv[994,7] = 253\n\t\tv[995,7] = 69\n\t\tv[996,7] = 219\n\t\tv[997,7] = 205\n\t\tv[998,7] = 195\n\t\tv[999,7] = 43\n\t\tv[1000,7] = 197\n\t\tv[1001,7] = 229\n\t\tv[1002,7] = 139\n\t\tv[1003,7] = 177\n\t\tv[1004,7] = 129\n\t\tv[1005,7] = 69\n\t\tv[1006,7] = 97\n\t\tv[1007,7] = 201\n\t\tv[1008,7] = 163\n\t\tv[1009,7] = 189\n\t\tv[1010,7] = 11\n\t\tv[1011,7] = 99\n\t\tv[1012,7] = 91\n\t\tv[1013,7] = 253\n\t\tv[1014,7] = 239\n\t\tv[1015,7] = 91\n\t\tv[1016,7] = 145\n\t\tv[1017,7] = 19\n\t\tv[1018,7] = 179\n\t\tv[1019,7] = 231\n\t\tv[1020,7] = 121\n\t\tv[1021,7] = 7\n\t\tv[1022,7] = 225\n\t\tv[1023,7] = 237\n\t\tv[1024,7] = 125\n\t\tv[1025,7] = 191\n\t\tv[1026,7] = 119\n\t\tv[1027,7] = 59\n\t\tv[1028,7] = 175\n\t\tv[1029,7] = 237\n\t\tv[1030,7] = 131\n\t\tv[1031,7] = 79\n\t\tv[1032,7] = 43\n\t\tv[1033,7] = 45\n\t\tv[1034,7] = 205\n\t\tv[1035,7] = 199\n\t\tv[1036,7] = 251\n\t\tv[1037,7] = 153\n\t\tv[1038,7] = 207\n\t\tv[1039,7] = 37\n\t\tv[1040,7] = 179\n\t\tv[1041,7] = 113\n\t\tv[1042,7] = 255\n\t\tv[1043,7] = 107\n\t\tv[1044,7] = 217\n\t\tv[1045,7] = 61\n\t\tv[1046,7] = 7\n\t\tv[1047,7] = 181\n\t\tv[1048,7] = 247\n\t\tv[1049,7] = 31\n\t\tv[1050,7] = 13\n\t\tv[1051,7] = 113\n\t\tv[1052,7] = 145\n\t\tv[1053,7] = 107\n\t\tv[1054,7] = 233\n\t\tv[1055,7] = 233\n\t\tv[1056,7] = 43\n\t\tv[1057,7] = 79\n\t\tv[1058,7] = 23\n\t\tv[1059,7] = 169\n\t\tv[1060,7] = 137\n\t\tv[1061,7] = 129\n\t\tv[1062,7] = 183\n\t\tv[1063,7] = 53\n\t\tv[1064,7] = 91\n\t\tv[1065,7] = 55\n\t\tv[1066,7] = 103\n\t\tv[1067,7] = 223\n\t\tv[1068,7] = 87\n\t\tv[1069,7] = 177\n\t\tv[1070,7] = 157\n\t\tv[1071,7] = 79\n\t\tv[1072,7] = 213\n\t\tv[1073,7] = 139\n\t\tv[1074,7] = 183\n\t\tv[1075,7] = 231\n\t\tv[1076,7] = 205\n\t\tv[1077,7] = 143\n\t\tv[1078,7] = 129\n\t\tv[1079,7] = 243\n\t\tv[1080,7] = 205\n\t\tv[1081,7] = 93\n\t\tv[1082,7] = 59\n\t\tv[1083,7] = 15\n\t\tv[1084,7] = 89\n\t\tv[1085,7] = 9\n\t\tv[1086,7] = 11\n\t\tv[1087,7] = 47\n\t\tv[1088,7] = 133\n\t\tv[1089,7] = 227\n\t\tv[1090,7] = 75\n\t\tv[1091,7] = 9\n\t\tv[1092,7] = 91\n\t\tv[1093,7] = 19\n\t\tv[1094,7] = 171\n\t\tv[1095,7] = 163\n\t\tv[1096,7] = 79\n\t\tv[1097,7] = 7\n\t\tv[1098,7] = 103\n\t\tv[1099,7] = 5\n\t\tv[1100,7] = 119\n\t\tv[1101,7] = 155\n\t\tv[1102,7] = 75\n\t\tv[1103,7] = 11\n\t\tv[1104,7] = 71\n\t\tv[1105,7] = 95\n\t\tv[1106,7] = 17\n\t\tv[1107,7] = 13\n\t\tv[1108,7] = 243\n\t\tv[1109,7] = 207\n\t\tv[1110,7] = 187\n\n\t\tv[53,8] = 235\n\t\tv[54,8] = 307\n\t\tv[55,8] = 495\n\t\tv[56,8] = 417\n\t\tv[57,8] = 57\n\t\tv[58,8] = 151\n\t\tv[59,8] = 19\n\t\tv[60,8] = 119\n\t\tv[61,8] = 375\n\t\tv[62,8] = 451\n\t\tv[63,8] = 55\n\t\tv[64,8] = 449\n\t\tv[65,8] = 501\n\t\tv[66,8] = 53\n\t\tv[67,8] = 185\n\t\tv[68,8] = 317\n\t\tv[69,8] = 17\n\t\tv[70,8] = 21\n\t\tv[71,8] = 487\n\t\tv[72,8] = 13\n\t\tv[73,8] = 347\n\t\tv[74,8] = 393\n\t\tv[75,8] = 15\n\t\tv[76,8] = 391\n\t\tv[77,8] = 307\n\t\tv[78,8] = 189\n\t\tv[79,8] = 381\n\t\tv[80,8] = 71\n\t\tv[81,8] = 163\n\t\tv[82,8] = 99\n\t\tv[83,8] = 467\n\t\tv[84,8] = 167\n\t\tv[85,8] = 433\n\t\tv[86,8] = 337\n\t\tv[87,8] = 257\n\t\tv[88,8] = 179\n\t\tv[89,8] = 47\n\t\tv[90,8] = 385\n\t\tv[91,8] = 23\n\t\tv[92,8] = 117\n\t\tv[93,8] = 369\n\t\tv[94,8] = 425\n\t\tv[95,8] = 207\n\t\tv[96,8] = 433\n\t\tv[97,8] = 301\n\t\tv[98,8] = 147\n\t\tv[99,8] = 333\n\t\tv[100,8] = 85\n\t\tv[101,8] = 221\n\t\tv[102,8] = 423\n\t\tv[103,8] = 49\n\t\tv[104,8] = 3\n\t\tv[105,8] = 43\n\t\tv[106,8] = 229\n\t\tv[107,8] = 227\n\t\tv[108,8] = 201\n\t\tv[109,8] = 383\n\t\tv[110,8] = 281\n\t\tv[111,8] = 229\n\t\tv[112,8] = 207\n\t\tv[113,8] = 21\n\t\tv[114,8] = 343\n\t\tv[115,8] = 251\n\t\tv[116,8] = 397\n\t\tv[117,8] = 173\n\t\tv[118,8] = 507\n\t\tv[119,8] = 421\n\t\tv[120,8] = 443\n\t\tv[121,8] = 399\n\t\tv[122,8] = 53\n\t\tv[123,8] = 345\n\t\tv[124,8] = 77\n\t\tv[125,8] = 385\n\t\tv[126,8] = 317\n\t\tv[127,8] = 155\n\t\tv[128,8] = 187\n\t\tv[129,8] = 269\n\t\tv[130,8] = 501\n\t\tv[131,8] = 19\n\t\tv[132,8] = 169\n\t\tv[133,8] = 235\n\t\tv[134,8] = 415\n\t\tv[135,8] = 61\n\t\tv[136,8] = 247\n\t\tv[137,8] = 183\n\t\tv[138,8] = 5\n\t\tv[139,8] = 257\n\t\tv[140,8] = 401\n\t\tv[141,8] = 451\n\t\tv[142,8] = 95\n\t\tv[143,8] = 455\n\t\tv[144,8] = 49\n\t\tv[145,8] = 489\n\t\tv[146,8] = 75\n\t\tv[147,8] = 459\n\t\tv[148,8] = 377\n\t\tv[149,8] = 87\n\t\tv[150,8] = 463\n\t\tv[151,8] = 155\n\t\tv[152,8] = 233\n\t\tv[153,8] = 115\n\t\tv[154,8] = 429\n\t\tv[155,8] = 211\n\t\tv[156,8] = 419\n\t\tv[157,8] = 143\n\t\tv[158,8] = 487\n\t\tv[159,8] = 195\n\t\tv[160,8] = 209\n\t\tv[161,8] = 461\n\t\tv[162,8] = 193\n\t\tv[163,8] = 157\n\t\tv[164,8] = 193\n\t\tv[165,8] = 363\n\t\tv[166,8] = 181\n\t\tv[167,8] = 271\n\t\tv[168,8] = 445\n\t\tv[169,8] = 381\n\t\tv[170,8] = 231\n\t\tv[171,8] = 135\n\t\tv[172,8] = 327\n\t\tv[173,8] = 403\n\t\tv[174,8] = 171\n\t\tv[175,8] = 197\n\t\tv[176,8] = 181\n\t\tv[177,8] = 343\n\t\tv[178,8] = 113\n\t\tv[179,8] = 313\n\t\tv[180,8] = 393\n\t\tv[181,8] = 311\n\t\tv[182,8] = 415\n\t\tv[183,8] = 267\n\t\tv[184,8] = 247\n\t\tv[185,8] = 425\n\t\tv[186,8] = 233\n\t\tv[187,8] = 289\n\t\tv[188,8] = 55\n\t\tv[189,8] = 39\n\t\tv[190,8] = 247\n\t\tv[191,8] = 327\n\t\tv[192,8] = 141\n\t\tv[193,8] = 5\n\t\tv[194,8] = 189\n\t\tv[195,8] = 183\n\t\tv[196,8] = 27\n\t\tv[197,8] = 337\n\t\tv[198,8] = 341\n\t\tv[199,8] = 327\n\t\tv[200,8] = 87\n\t\tv[201,8] = 429\n\t\tv[202,8] = 357\n\t\tv[203,8] = 265\n\t\tv[204,8] = 251\n\t\tv[205,8] = 437\n\t\tv[206,8] = 201\n\t\tv[207,8] = 29\n\t\tv[208,8] = 339\n\t\tv[209,8] = 257\n\t\tv[210,8] = 377\n\t\tv[211,8] = 17\n\t\tv[212,8] = 53\n\t\tv[213,8] = 327\n\t\tv[214,8] = 47\n\t\tv[215,8] = 375\n\t\tv[216,8] = 393\n\t\tv[217,8] = 369\n\t\tv[218,8] = 403\n\t\tv[219,8] = 125\n\t\tv[220,8] = 429\n\t\tv[221,8] = 257\n\t\tv[222,8] = 157\n\t\tv[223,8] = 217\n\t\tv[224,8] = 85\n\t\tv[225,8] = 267\n\t\tv[226,8] = 117\n\t\tv[227,8] = 337\n\t\tv[228,8] = 447\n\t\tv[229,8] = 219\n\t\tv[230,8] = 501\n\t\tv[231,8] = 41\n\t\tv[232,8] = 41\n\t\tv[233,8] = 193\n\t\tv[234,8] = 509\n\t\tv[235,8] = 131\n\t\tv[236,8] = 207\n\t\tv[237,8] = 505\n\t\tv[238,8] = 421\n\t\tv[239,8] = 149\n\t\tv[240,8] = 111\n\t\tv[241,8] = 177\n\t\tv[242,8] = 167\n\t\tv[243,8] = 223\n\t\tv[244,8] = 291\n\t\tv[245,8] = 91\n\t\tv[246,8] = 29\n\t\tv[247,8] = 305\n\t\tv[248,8] = 151\n\t\tv[249,8] = 177\n\t\tv[250,8] = 337\n\t\tv[251,8] = 183\n\t\tv[252,8] = 361\n\t\tv[253,8] = 435\n\t\tv[254,8] = 307\n\t\tv[255,8] = 507\n\t\tv[256,8] = 77\n\t\tv[257,8] = 181\n\t\tv[258,8] = 507\n\t\tv[259,8] = 315\n\t\tv[260,8] = 145\n\t\tv[261,8] = 423\n\t\tv[262,8] = 71\n\t\tv[263,8] = 103\n\t\tv[264,8] = 493\n\t\tv[265,8] = 271\n\t\tv[266,8] = 469\n\t\tv[267,8] = 339\n\t\tv[268,8] = 237\n\t\tv[269,8] = 437\n\t\tv[270,8] = 483\n\t\tv[271,8] = 31\n\t\tv[272,8] = 219\n\t\tv[273,8] = 61\n\t\tv[274,8] = 131\n\t\tv[275,8] = 391\n\t\tv[276,8] = 233\n\t\tv[277,8] = 219\n\t\tv[278,8] = 69\n\t\tv[279,8] = 57\n\t\tv[280,8] = 459\n\t\tv[281,8] = 225\n\t\tv[282,8] = 421\n\t\tv[283,8] = 7\n\t\tv[284,8] = 461\n\t\tv[285,8] = 111\n\t\tv[286,8] = 451\n\t\tv[287,8] = 277\n\t\tv[288,8] = 185\n\t\tv[289,8] = 193\n\t\tv[290,8] = 125\n\t\tv[291,8] = 251\n\t\tv[292,8] = 199\n\t\tv[293,8] = 73\n\t\tv[294,8] = 71\n\t\tv[295,8] = 7\n\t\tv[296,8] = 409\n\t\tv[297,8] = 417\n\t\tv[298,8] = 149\n\t\tv[299,8] = 193\n\t\tv[300,8] = 53\n\t\tv[301,8] = 437\n\t\tv[302,8] = 29\n\t\tv[303,8] = 467\n\t\tv[304,8] = 229\n\t\tv[305,8] = 31\n\t\tv[306,8] = 35\n\t\tv[307,8] = 75\n\t\tv[308,8] = 105\n\t\tv[309,8] = 503\n\t\tv[310,8] = 75\n\t\tv[311,8] = 317\n\t\tv[312,8] = 401\n\t\tv[313,8] = 367\n\t\tv[314,8] = 131\n\t\tv[315,8] = 365\n\t\tv[316,8] = 441\n\t\tv[317,8] = 433\n\t\tv[318,8] = 93\n\t\tv[319,8] = 377\n\t\tv[320,8] = 405\n\t\tv[321,8] = 465\n\t\tv[322,8] = 259\n\t\tv[323,8] = 283\n\t\tv[324,8] = 443\n\t\tv[325,8] = 143\n\t\tv[326,8] = 445\n\t\tv[327,8] = 3\n\t\tv[328,8] = 461\n\t\tv[329,8] = 329\n\t\tv[330,8] = 309\n\t\tv[331,8] = 77\n\t\tv[332,8] = 323\n\t\tv[333,8] = 155\n\t\tv[334,8] = 347\n\t\tv[335,8] = 45\n\t\tv[336,8] = 381\n\t\tv[337,8] = 315\n\t\tv[338,8] = 463\n\t\tv[339,8] = 207\n\t\tv[340,8] = 321\n\t\tv[341,8] = 157\n\t\tv[342,8] = 109\n\t\tv[343,8] = 479\n\t\tv[344,8] = 313\n\t\tv[345,8] = 345\n\t\tv[346,8] = 167\n\t\tv[347,8] = 439\n\t\tv[348,8] = 307\n\t\tv[349,8] = 235\n\t\tv[350,8] = 473\n\t\tv[351,8] = 79\n\t\tv[352,8] = 101\n\t\tv[353,8] = 245\n\t\tv[354,8] = 19\n\t\tv[355,8] = 381\n\t\tv[356,8] = 251\n\t\tv[357,8] = 35\n\t\tv[358,8] = 25\n\t\tv[359,8] = 107\n\t\tv[360,8] = 187\n\t\tv[361,8] = 115\n\t\tv[362,8] = 113\n\t\tv[363,8] = 321\n\t\tv[364,8] = 115\n\t\tv[365,8] = 445\n\t\tv[366,8] = 61\n\t\tv[367,8] = 77\n\t\tv[368,8] = 293\n\t\tv[369,8] = 405\n\t\tv[370,8] = 13\n\t\tv[371,8] = 53\n\t\tv[372,8] = 17\n\t\tv[373,8] = 171\n\t\tv[374,8] = 299\n\t\tv[375,8] = 41\n\t\tv[376,8] = 79\n\t\tv[377,8] = 3\n\t\tv[378,8] = 485\n\t\tv[379,8] = 331\n\t\tv[380,8] = 13\n\t\tv[381,8] = 257\n\t\tv[382,8] = 59\n\t\tv[383,8] = 201\n\t\tv[384,8] = 497\n\t\tv[385,8] = 81\n\t\tv[386,8] = 451\n\t\tv[387,8] = 199\n\t\tv[388,8] = 171\n\t\tv[389,8] = 81\n\t\tv[390,8] = 253\n\t\tv[391,8] = 365\n\t\tv[392,8] = 75\n\t\tv[393,8] = 451\n\t\tv[394,8] = 149\n\t\tv[395,8] = 483\n\t\tv[396,8] = 81\n\t\tv[397,8] = 453\n\t\tv[398,8] = 469\n\t\tv[399,8] = 485\n\t\tv[400,8] = 305\n\t\tv[401,8] = 163\n\t\tv[402,8] = 401\n\t\tv[403,8] = 15\n\t\tv[404,8] = 91\n\t\tv[405,8] = 3\n\t\tv[406,8] = 129\n\t\tv[407,8] = 35\n\t\tv[408,8] = 239\n\t\tv[409,8] = 355\n\t\tv[410,8] = 211\n\t\tv[411,8] = 387\n\t\tv[412,8] = 101\n\t\tv[413,8] = 299\n\t\tv[414,8] = 67\n\t\tv[415,8] = 375\n\t\tv[416,8] = 405\n\t\tv[417,8] = 357\n\t\tv[418,8] = 267\n\t\tv[419,8] = 363\n\t\tv[420,8] = 79\n\t\tv[421,8] = 83\n\t\tv[422,8] = 437\n\t\tv[423,8] = 457\n\t\tv[424,8] = 39\n\t\tv[425,8] = 97\n\t\tv[426,8] = 473\n\t\tv[427,8] = 289\n\t\tv[428,8] = 179\n\t\tv[429,8] = 57\n\t\tv[430,8] = 23\n\t\tv[431,8] = 49\n\t\tv[432,8] = 79\n\t\tv[433,8] = 71\n\t\tv[434,8] = 341\n\t\tv[435,8] = 287\n\t\tv[436,8] = 95\n\t\tv[437,8] = 229\n\t\tv[438,8] = 271\n\t\tv[439,8] = 475\n\t\tv[440,8] = 49\n\t\tv[441,8] = 241\n\t\tv[442,8] = 261\n\t\tv[443,8] = 495\n\t\tv[444,8] = 353\n\t\tv[445,8] = 381\n\t\tv[446,8] = 13\n\t\tv[447,8] = 291\n\t\tv[448,8] = 37\n\t\tv[449,8] = 251\n\t\tv[450,8] = 105\n\t\tv[451,8] = 399\n\t\tv[452,8] = 81\n\t\tv[453,8] = 89\n\t\tv[454,8] = 265\n\t\tv[455,8] = 507\n\t\tv[456,8] = 205\n\t\tv[457,8] = 145\n\t\tv[458,8] = 331\n\t\tv[459,8] = 129\n\t\tv[460,8] = 119\n\t\tv[461,8] = 503\n\t\tv[462,8] = 249\n\t\tv[463,8] = 1\n\t\tv[464,8] = 289\n\t\tv[465,8] = 463\n\t\tv[466,8] = 163\n\t\tv[467,8] = 443\n\t\tv[468,8] = 63\n\t\tv[469,8] = 123\n\t\tv[470,8] = 361\n\t\tv[471,8] = 261\n\t\tv[472,8] = 49\n\t\tv[473,8] = 429\n\t\tv[474,8] = 137\n\t\tv[475,8] = 355\n\t\tv[476,8] = 175\n\t\tv[477,8] = 507\n\t\tv[478,8] = 59\n\t\tv[479,8] = 277\n\t\tv[480,8] = 391\n\t\tv[481,8] = 25\n\t\tv[482,8] = 185\n\t\tv[483,8] = 381\n\t\tv[484,8] = 197\n\t\tv[485,8] = 39\n\t\tv[486,8] = 5\n\t\tv[487,8] = 429\n\t\tv[488,8] = 119\n\t\tv[489,8] = 247\n\t\tv[490,8] = 177\n\t\tv[491,8] = 329\n\t\tv[492,8] = 465\n\t\tv[493,8] = 421\n\t\tv[494,8] = 271\n\t\tv[495,8] = 467\n\t\tv[496,8] = 151\n\t\tv[497,8] = 45\n\t\tv[498,8] = 429\n\t\tv[499,8] = 137\n\t\tv[500,8] = 471\n\t\tv[501,8] = 11\n\t\tv[502,8] = 17\n\t\tv[503,8] = 409\n\t\tv[504,8] = 347\n\t\tv[505,8] = 199\n\t\tv[506,8] = 463\n\t\tv[507,8] = 177\n\t\tv[508,8] = 11\n\t\tv[509,8] = 51\n\t\tv[510,8] = 361\n\t\tv[511,8] = 95\n\t\tv[512,8] = 497\n\t\tv[513,8] = 163\n\t\tv[514,8] = 351\n\t\tv[515,8] = 127\n\t\tv[516,8] = 395\n\t\tv[517,8] = 511\n\t\tv[518,8] = 327\n\t\tv[519,8] = 353\n\t\tv[520,8] = 49\n\t\tv[521,8] = 105\n\t\tv[522,8] = 151\n\t\tv[523,8] = 321\n\t\tv[524,8] = 331\n\t\tv[525,8] = 329\n\t\tv[526,8] = 509\n\t\tv[527,8] = 107\n\t\tv[528,8] = 109\n\t\tv[529,8] = 303\n\t\tv[530,8] = 467\n\t\tv[531,8] = 287\n\t\tv[532,8] = 161\n\t\tv[533,8] = 45\n\t\tv[534,8] = 385\n\t\tv[535,8] = 289\n\t\tv[536,8] = 363\n\t\tv[537,8] = 331\n\t\tv[538,8] = 265\n\t\tv[539,8] = 407\n\t\tv[540,8] = 37\n\t\tv[541,8] = 433\n\t\tv[542,8] = 315\n\t\tv[543,8] = 343\n\t\tv[544,8] = 63\n\t\tv[545,8] = 51\n\t\tv[546,8] = 185\n\t\tv[547,8] = 71\n\t\tv[548,8] = 27\n\t\tv[549,8] = 267\n\t\tv[550,8] = 503\n\t\tv[551,8] = 239\n\t\tv[552,8] = 293\n\t\tv[553,8] = 245\n\t\tv[554,8] = 281\n\t\tv[555,8] = 297\n\t\tv[556,8] = 75\n\t\tv[557,8] = 461\n\t\tv[558,8] = 371\n\t\tv[559,8] = 129\n\t\tv[560,8] = 189\n\t\tv[561,8] = 189\n\t\tv[562,8] = 339\n\t\tv[563,8] = 287\n\t\tv[564,8] = 111\n\t\tv[565,8] = 111\n\t\tv[566,8] = 379\n\t\tv[567,8] = 93\n\t\tv[568,8] = 27\n\t\tv[569,8] = 185\n\t\tv[570,8] = 347\n\t\tv[571,8] = 337\n\t\tv[572,8] = 247\n\t\tv[573,8] = 507\n\t\tv[574,8] = 161\n\t\tv[575,8] = 231\n\t\tv[576,8] = 43\n\t\tv[577,8] = 499\n\t\tv[578,8] = 73\n\t\tv[579,8] = 327\n\t\tv[580,8] = 263\n\t\tv[581,8] = 331\n\t\tv[582,8] = 249\n\t\tv[583,8] = 493\n\t\tv[584,8] = 37\n\t\tv[585,8] = 25\n\t\tv[586,8] = 115\n\t\tv[587,8] = 3\n\t\tv[588,8] = 167\n\t\tv[589,8] = 197\n\t\tv[590,8] = 127\n\t\tv[591,8] = 357\n\t\tv[592,8] = 497\n\t\tv[593,8] = 103\n\t\tv[594,8] = 125\n\t\tv[595,8] = 191\n\t\tv[596,8] = 165\n\t\tv[597,8] = 55\n\t\tv[598,8] = 101\n\t\tv[599,8] = 95\n\t\tv[600,8] = 79\n\t\tv[601,8] = 351\n\t\tv[602,8] = 341\n\t\tv[603,8] = 43\n\t\tv[604,8] = 125\n\t\tv[605,8] = 135\n\t\tv[606,8] = 173\n\t\tv[607,8] = 289\n\t\tv[608,8] = 373\n\t\tv[609,8] = 133\n\t\tv[610,8] = 421\n\t\tv[611,8] = 241\n\t\tv[612,8] = 281\n\t\tv[613,8] = 213\n\t\tv[614,8] = 177\n\t\tv[615,8] = 363\n\t\tv[616,8] = 151\n\t\tv[617,8] = 227\n\t\tv[618,8] = 145\n\t\tv[619,8] = 363\n\t\tv[620,8] = 239\n\t\tv[621,8] = 431\n\t\tv[622,8] = 81\n\t\tv[623,8] = 397\n\t\tv[624,8] = 241\n\t\tv[625,8] = 67\n\t\tv[626,8] = 291\n\t\tv[627,8] = 255\n\t\tv[628,8] = 405\n\t\tv[629,8] = 421\n\t\tv[630,8] = 399\n\t\tv[631,8] = 75\n\t\tv[632,8] = 399\n\t\tv[633,8] = 105\n\t\tv[634,8] = 329\n\t\tv[635,8] = 41\n\t\tv[636,8] = 425\n\t\tv[637,8] = 7\n\t\tv[638,8] = 283\n\t\tv[639,8] = 375\n\t\tv[640,8] = 475\n\t\tv[641,8] = 427\n\t\tv[642,8] = 277\n\t\tv[643,8] = 209\n\t\tv[644,8] = 411\n\t\tv[645,8] = 3\n\t\tv[646,8] = 137\n\t\tv[647,8] = 195\n\t\tv[648,8] = 289\n\t\tv[649,8] = 509\n\t\tv[650,8] = 121\n\t\tv[651,8] = 55\n\t\tv[652,8] = 147\n\t\tv[653,8] = 275\n\t\tv[654,8] = 251\n\t\tv[655,8] = 19\n\t\tv[656,8] = 129\n\t\tv[657,8] = 285\n\t\tv[658,8] = 415\n\t\tv[659,8] = 487\n\t\tv[660,8] = 491\n\t\tv[661,8] = 193\n\t\tv[662,8] = 219\n\t\tv[663,8] = 403\n\t\tv[664,8] = 23\n\t\tv[665,8] = 97\n\t\tv[666,8] = 65\n\t\tv[667,8] = 285\n\t\tv[668,8] = 75\n\t\tv[669,8] = 21\n\t\tv[670,8] = 373\n\t\tv[671,8] = 261\n\t\tv[672,8] = 339\n\t\tv[673,8] = 239\n\t\tv[674,8] = 495\n\t\tv[675,8] = 415\n\t\tv[676,8] = 333\n\t\tv[677,8] = 107\n\t\tv[678,8] = 435\n\t\tv[679,8] = 297\n\t\tv[680,8] = 213\n\t\tv[681,8] = 149\n\t\tv[682,8] = 463\n\t\tv[683,8] = 199\n\t\tv[684,8] = 323\n\t\tv[685,8] = 45\n\t\tv[686,8] = 19\n\t\tv[687,8] = 301\n\t\tv[688,8] = 121\n\t\tv[689,8] = 499\n\t\tv[690,8] = 187\n\t\tv[691,8] = 229\n\t\tv[692,8] = 63\n\t\tv[693,8] = 425\n\t\tv[694,8] = 99\n\t\tv[695,8] = 281\n\t\tv[696,8] = 35\n\t\tv[697,8] = 125\n\t\tv[698,8] = 349\n\t\tv[699,8] = 87\n\t\tv[700,8] = 101\n\t\tv[701,8] = 59\n\t\tv[702,8] = 195\n\t\tv[703,8] = 511\n\t\tv[704,8] = 355\n\t\tv[705,8] = 73\n\t\tv[706,8] = 263\n\t\tv[707,8] = 243\n\t\tv[708,8] = 101\n\t\tv[709,8] = 165\n\t\tv[710,8] = 141\n\t\tv[711,8] = 11\n\t\tv[712,8] = 389\n\t\tv[713,8] = 219\n\t\tv[714,8] = 187\n\t\tv[715,8] = 449\n\t\tv[716,8] = 447\n\t\tv[717,8] = 393\n\t\tv[718,8] = 477\n\t\tv[719,8] = 305\n\t\tv[720,8] = 221\n\t\tv[721,8] = 51\n\t\tv[722,8] = 355\n\t\tv[723,8] = 209\n\t\tv[724,8] = 499\n\t\tv[725,8] = 479\n\t\tv[726,8] = 265\n\t\tv[727,8] = 377\n\t\tv[728,8] = 145\n\t\tv[729,8] = 411\n\t\tv[730,8] = 173\n\t\tv[731,8] = 11\n\t\tv[732,8] = 433\n\t\tv[733,8] = 483\n\t\tv[734,8] = 135\n\t\tv[735,8] = 385\n\t\tv[736,8] = 341\n\t\tv[737,8] = 89\n\t\tv[738,8] = 209\n\t\tv[739,8] = 391\n\t\tv[740,8] = 33\n\t\tv[741,8] = 395\n\t\tv[742,8] = 319\n\t\tv[743,8] = 451\n\t\tv[744,8] = 119\n\t\tv[745,8] = 341\n\t\tv[746,8] = 227\n\t\tv[747,8] = 375\n\t\tv[748,8] = 61\n\t\tv[749,8] = 331\n\t\tv[750,8] = 493\n\t\tv[751,8] = 411\n\t\tv[752,8] = 293\n\t\tv[753,8] = 47\n\t\tv[754,8] = 203\n\t\tv[755,8] = 375\n\t\tv[756,8] = 167\n\t\tv[757,8] = 395\n\t\tv[758,8] = 155\n\t\tv[759,8] = 5\n\t\tv[760,8] = 237\n\t\tv[761,8] = 361\n\t\tv[762,8] = 489\n\t\tv[763,8] = 127\n\t\tv[764,8] = 21\n\t\tv[765,8] = 345\n\t\tv[766,8] = 101\n\t\tv[767,8] = 371\n\t\tv[768,8] = 233\n\t\tv[769,8] = 431\n\t\tv[770,8] = 109\n\t\tv[771,8] = 119\n\t\tv[772,8] = 277\n\t\tv[773,8] = 125\n\t\tv[774,8] = 263\n\t\tv[775,8] = 73\n\t\tv[776,8] = 135\n\t\tv[777,8] = 123\n\t\tv[778,8] = 83\n\t\tv[779,8] = 123\n\t\tv[780,8] = 405\n\t\tv[781,8] = 69\n\t\tv[782,8] = 75\n\t\tv[783,8] = 287\n\t\tv[784,8] = 401\n\t\tv[785,8] = 23\n\t\tv[786,8] = 283\n\t\tv[787,8] = 393\n\t\tv[788,8] = 41\n\t\tv[789,8] = 379\n\t\tv[790,8] = 431\n\t\tv[791,8] = 11\n\t\tv[792,8] = 475\n\t\tv[793,8] = 505\n\t\tv[794,8] = 19\n\t\tv[795,8] = 365\n\t\tv[796,8] = 265\n\t\tv[797,8] = 271\n\t\tv[798,8] = 499\n\t\tv[799,8] = 489\n\t\tv[800,8] = 443\n\t\tv[801,8] = 165\n\t\tv[802,8] = 91\n\t\tv[803,8] = 83\n\t\tv[804,8] = 291\n\t\tv[805,8] = 319\n\t\tv[806,8] = 199\n\t\tv[807,8] = 107\n\t\tv[808,8] = 245\n\t\tv[809,8] = 389\n\t\tv[810,8] = 143\n\t\tv[811,8] = 137\n\t\tv[812,8] = 89\n\t\tv[813,8] = 125\n\t\tv[814,8] = 281\n\t\tv[815,8] = 381\n\t\tv[816,8] = 215\n\t\tv[817,8] = 131\n\t\tv[818,8] = 299\n\t\tv[819,8] = 249\n\t\tv[820,8] = 375\n\t\tv[821,8] = 455\n\t\tv[822,8] = 43\n\t\tv[823,8] = 73\n\t\tv[824,8] = 281\n\t\tv[825,8] = 217\n\t\tv[826,8] = 297\n\t\tv[827,8] = 229\n\t\tv[828,8] = 431\n\t\tv[829,8] = 357\n\t\tv[830,8] = 81\n\t\tv[831,8] = 357\n\t\tv[832,8] = 171\n\t\tv[833,8] = 451\n\t\tv[834,8] = 481\n\t\tv[835,8] = 13\n\t\tv[836,8] = 387\n\t\tv[837,8] = 491\n\t\tv[838,8] = 489\n\t\tv[839,8] = 439\n\t\tv[840,8] = 385\n\t\tv[841,8] = 487\n\t\tv[842,8] = 177\n\t\tv[843,8] = 393\n\t\tv[844,8] = 33\n\t\tv[845,8] = 71\n\t\tv[846,8] = 375\n\t\tv[847,8] = 443\n\t\tv[848,8] = 129\n\t\tv[849,8] = 407\n\t\tv[850,8] = 395\n\t\tv[851,8] = 127\n\t\tv[852,8] = 65\n\t\tv[853,8] = 333\n\t\tv[854,8] = 309\n\t\tv[855,8] = 119\n\t\tv[856,8] = 197\n\t\tv[857,8] = 435\n\t\tv[858,8] = 497\n\t\tv[859,8] = 373\n\t\tv[860,8] = 71\n\t\tv[861,8] = 379\n\t\tv[862,8] = 509\n\t\tv[863,8] = 387\n\t\tv[864,8] = 159\n\t\tv[865,8] = 265\n\t\tv[866,8] = 477\n\t\tv[867,8] = 463\n\t\tv[868,8] = 449\n\t\tv[869,8] = 47\n\t\tv[870,8] = 353\n\t\tv[871,8] = 249\n\t\tv[872,8] = 335\n\t\tv[873,8] = 505\n\t\tv[874,8] = 89\n\t\tv[875,8] = 141\n\t\tv[876,8] = 55\n\t\tv[877,8] = 235\n\t\tv[878,8] = 187\n\t\tv[879,8] = 87\n\t\tv[880,8] = 363\n\t\tv[881,8] = 93\n\t\tv[882,8] = 363\n\t\tv[883,8] = 101\n\t\tv[884,8] = 67\n\t\tv[885,8] = 215\n\t\tv[886,8] = 321\n\t\tv[887,8] = 331\n\t\tv[888,8] = 305\n\t\tv[889,8] = 261\n\t\tv[890,8] = 411\n\t\tv[891,8] = 491\n\t\tv[892,8] = 479\n\t\tv[893,8] = 65\n\t\tv[894,8] = 307\n\t\tv[895,8] = 469\n\t\tv[896,8] = 415\n\t\tv[897,8] = 131\n\t\tv[898,8] = 315\n\t\tv[899,8] = 487\n\t\tv[900,8] = 83\n\t\tv[901,8] = 455\n\t\tv[902,8] = 19\n\t\tv[903,8] = 113\n\t\tv[904,8] = 163\n\t\tv[905,8] = 503\n\t\tv[906,8] = 99\n\t\tv[907,8] = 499\n\t\tv[908,8] = 251\n\t\tv[909,8] = 239\n\t\tv[910,8] = 81\n\t\tv[911,8] = 167\n\t\tv[912,8] = 391\n\t\tv[913,8] = 255\n\t\tv[914,8] = 317\n\t\tv[915,8] = 363\n\t\tv[916,8] = 359\n\t\tv[917,8] = 395\n\t\tv[918,8] = 419\n\t\tv[919,8] = 307\n\t\tv[920,8] = 251\n\t\tv[921,8] = 267\n\t\tv[922,8] = 171\n\t\tv[923,8] = 461\n\t\tv[924,8] = 183\n\t\tv[925,8] = 465\n\t\tv[926,8] = 165\n\t\tv[927,8] = 163\n\t\tv[928,8] = 293\n\t\tv[929,8] = 477\n\t\tv[930,8] = 223\n\t\tv[931,8] = 403\n\t\tv[932,8] = 389\n\t\tv[933,8] = 97\n\t\tv[934,8] = 335\n\t\tv[935,8] = 357\n\t\tv[936,8] = 297\n\t\tv[937,8] = 19\n\t\tv[938,8] = 469\n\t\tv[939,8] = 501\n\t\tv[940,8] = 249\n\t\tv[941,8] = 85\n\t\tv[942,8] = 213\n\t\tv[943,8] = 311\n\t\tv[944,8] = 265\n\t\tv[945,8] = 379\n\t\tv[946,8] = 297\n\t\tv[947,8] = 283\n\t\tv[948,8] = 393\n\t\tv[949,8] = 449\n\t\tv[950,8] = 463\n\t\tv[951,8] = 289\n\t\tv[952,8] = 159\n\t\tv[953,8] = 289\n\t\tv[954,8] = 499\n\t\tv[955,8] = 407\n\t\tv[956,8] = 129\n\t\tv[957,8] = 137\n\t\tv[958,8] = 221\n\t\tv[959,8] = 43\n\t\tv[960,8] = 89\n\t\tv[961,8] = 403\n\t\tv[962,8] = 271\n\t\tv[963,8] = 75\n\t\tv[964,8] = 83\n\t\tv[965,8] = 445\n\t\tv[966,8] = 453\n\t\tv[967,8] = 389\n\t\tv[968,8] = 149\n\t\tv[969,8] = 143\n\t\tv[970,8] = 423\n\t\tv[971,8] = 499\n\t\tv[972,8] = 317\n\t\tv[973,8] = 445\n\t\tv[974,8] = 157\n\t\tv[975,8] = 137\n\t\tv[976,8] = 453\n\t\tv[977,8] = 163\n\t\tv[978,8] = 87\n\t\tv[979,8] = 23\n\t\tv[980,8] = 391\n\t\tv[981,8] = 119\n\t\tv[982,8] = 427\n\t\tv[983,8] = 323\n\t\tv[984,8] = 173\n\t\tv[985,8] = 89\n\t\tv[986,8] = 259\n\t\tv[987,8] = 377\n\t\tv[988,8] = 511\n\t\tv[989,8] = 249\n\t\tv[990,8] = 31\n\t\tv[991,8] = 363\n\t\tv[992,8] = 229\n\t\tv[993,8] = 353\n\t\tv[994,8] = 329\n\t\tv[995,8] = 493\n\t\tv[996,8] = 427\n\t\tv[997,8] = 57\n\t\tv[998,8] = 205\n\t\tv[999,8] = 389\n\t\tv[1000,8] = 91\n\t\tv[1001,8] = 83\n\t\tv[1002,8] = 13\n\t\tv[1003,8] = 219\n\t\tv[1004,8] = 439\n\t\tv[1005,8] = 45\n\t\tv[1006,8] = 35\n\t\tv[1007,8] = 371\n\t\tv[1008,8] = 441\n\t\tv[1009,8] = 17\n\t\tv[1010,8] = 267\n\t\tv[1011,8] = 501\n\t\tv[1012,8] = 53\n\t\tv[1013,8] = 25\n\t\tv[1014,8] = 333\n\t\tv[1015,8] = 17\n\t\tv[1016,8] = 201\n\t\tv[1017,8] = 475\n\t\tv[1018,8] = 257\n\t\tv[1019,8] = 417\n\t\tv[1020,8] = 345\n\t\tv[1021,8] = 381\n\t\tv[1022,8] = 377\n\t\tv[1023,8] = 55\n\t\tv[1024,8] = 403\n\t\tv[1025,8] = 77\n\t\tv[1026,8] = 389\n\t\tv[1027,8] = 347\n\t\tv[1028,8] = 363\n\t\tv[1029,8] = 211\n\t\tv[1030,8] = 413\n\t\tv[1031,8] = 419\n\t\tv[1032,8] = 5\n\t\tv[1033,8] = 167\n\t\tv[1034,8] = 219\n\t\tv[1035,8] = 201\n\t\tv[1036,8] = 285\n\t\tv[1037,8] = 425\n\t\tv[1038,8] = 11\n\t\tv[1039,8] = 77\n\t\tv[1040,8] = 269\n\t\tv[1041,8] = 489\n\t\tv[1042,8] = 281\n\t\tv[1043,8] = 403\n\t\tv[1044,8] = 79\n\t\tv[1045,8] = 425\n\t\tv[1046,8] = 125\n\t\tv[1047,8] = 81\n\t\tv[1048,8] = 331\n\t\tv[1049,8] = 437\n\t\tv[1050,8] = 271\n\t\tv[1051,8] = 397\n\t\tv[1052,8] = 299\n\t\tv[1053,8] = 475\n\t\tv[1054,8] = 271\n\t\tv[1055,8] = 249\n\t\tv[1056,8] = 413\n\t\tv[1057,8] = 233\n\t\tv[1058,8] = 261\n\t\tv[1059,8] = 495\n\t\tv[1060,8] = 171\n\t\tv[1061,8] = 69\n\t\tv[1062,8] = 27\n\t\tv[1063,8] = 409\n\t\tv[1064,8] = 21\n\t\tv[1065,8] = 421\n\t\tv[1066,8] = 367\n\t\tv[1067,8] = 81\n\t\tv[1068,8] = 483\n\t\tv[1069,8] = 255\n\t\tv[1070,8] = 15\n\t\tv[1071,8] = 219\n\t\tv[1072,8] = 365\n\t\tv[1073,8] = 497\n\t\tv[1074,8] = 181\n\t\tv[1075,8] = 75\n\t\tv[1076,8] = 431\n\t\tv[1077,8] = 99\n\t\tv[1078,8] = 325\n\t\tv[1079,8] = 407\n\t\tv[1080,8] = 229\n\t\tv[1081,8] = 281\n\t\tv[1082,8] = 63\n\t\tv[1083,8] = 83\n\t\tv[1084,8] = 493\n\t\tv[1085,8] = 5\n\t\tv[1086,8] = 113\n\t\tv[1087,8] = 15\n\t\tv[1088,8] = 271\n\t\tv[1089,8] = 37\n\t\tv[1090,8] = 87\n\t\tv[1091,8] = 451\n\t\tv[1092,8] = 299\n\t\tv[1093,8] = 83\n\t\tv[1094,8] = 451\n\t\tv[1095,8] = 311\n\t\tv[1096,8] = 441\n\t\tv[1097,8] = 47\n\t\tv[1098,8] = 455\n\t\tv[1099,8] = 47\n\t\tv[1100,8] = 253\n\t\tv[1101,8] = 13\n\t\tv[1102,8] = 109\n\t\tv[1103,8] = 369\n\t\tv[1104,8] = 347\n\t\tv[1105,8] = 11\n\t\tv[1106,8] = 409\n\t\tv[1107,8] = 275\n\t\tv[1108,8] = 63\n\t\tv[1109,8] = 441\n\t\tv[1110,8] = 15\n\n\t\tv[101,9] = 519\n\t\tv[102,9] = 307\n\t\tv[103,9] = 931\n\t\tv[104,9] = 1023\n\t\tv[105,9] = 517\n\t\tv[106,9] = 771\n\t\tv[107,9] = 151\n\t\tv[108,9] = 1023\n\t\tv[109,9] = 539\n\t\tv[110,9] = 725\n\t\tv[111,9] = 45\n\t\tv[112,9] = 927\n\t\tv[113,9] = 707\n\t\tv[114,9] = 29\n\t\tv[115,9] = 125\n\t\tv[116,9] = 371\n\t\tv[117,9] = 275\n\t\tv[118,9] = 279\n\t\tv[119,9] = 817\n\t\tv[120,9] = 389\n\t\tv[121,9] = 453\n\t\tv[122,9] = 989\n\t\tv[123,9] = 1015\n\t\tv[124,9] = 29\n\t\tv[125,9] = 169\n\t\tv[126,9] = 743\n\t\tv[127,9] = 99\n\t\tv[128,9] = 923\n\t\tv[129,9] = 981\n\t\tv[130,9] = 181\n\t\tv[131,9] = 693\n\t\tv[132,9] = 309\n\t\tv[133,9] = 227\n\t\tv[134,9] = 111\n\t\tv[135,9] = 219\n\t\tv[136,9] = 897\n\t\tv[137,9] = 377\n\t\tv[138,9] = 425\n\t\tv[139,9] = 609\n\t\tv[140,9] = 227\n\t\tv[141,9] = 19\n\t\tv[142,9] = 221\n\t\tv[143,9] = 143\n\t\tv[144,9] = 581\n\t\tv[145,9] = 147\n\t\tv[146,9] = 919\n\t\tv[147,9] = 127\n\t\tv[148,9] = 725\n\t\tv[149,9] = 793\n\t\tv[150,9] = 289\n\t\tv[151,9] = 411\n\t\tv[152,9] = 835\n\t\tv[153,9] = 921\n\t\tv[154,9] = 957\n\t\tv[155,9] = 443\n\t\tv[156,9] = 349\n\t\tv[157,9] = 813\n\t\tv[158,9] = 5\n\t\tv[159,9] = 105\n\t\tv[160,9] = 457\n\t\tv[161,9] = 393\n\t\tv[162,9] = 539\n\t\tv[163,9] = 101\n\t\tv[164,9] = 197\n\t\tv[165,9] = 697\n\t\tv[166,9] = 27\n\t\tv[167,9] = 343\n\t\tv[168,9] = 515\n\t\tv[169,9] = 69\n\t\tv[170,9] = 485\n\t\tv[171,9] = 383\n\t\tv[172,9] = 855\n\t\tv[173,9] = 693\n\t\tv[174,9] = 133\n\t\tv[175,9] = 87\n\t\tv[176,9] = 743\n\t\tv[177,9] = 747\n\t\tv[178,9] = 475\n\t\tv[179,9] = 87\n\t\tv[180,9] = 469\n\t\tv[181,9] = 763\n\t\tv[182,9] = 721\n\t\tv[183,9] = 345\n\t\tv[184,9] = 479\n\t\tv[185,9] = 965\n\t\tv[186,9] = 527\n\t\tv[187,9] = 121\n\t\tv[188,9] = 271\n\t\tv[189,9] = 353\n\t\tv[190,9] = 467\n\t\tv[191,9] = 177\n\t\tv[192,9] = 245\n\t\tv[193,9] = 627\n\t\tv[194,9] = 113\n\t\tv[195,9] = 357\n\t\tv[196,9] = 7\n\t\tv[197,9] = 691\n\t\tv[198,9] = 725\n\t\tv[199,9] = 355\n\t\tv[200,9] = 889\n\t\tv[201,9] = 635\n\t\tv[202,9] = 737\n\t\tv[203,9] = 429\n\t\tv[204,9] = 545\n\t\tv[205,9] = 925\n\t\tv[206,9] = 357\n\t\tv[207,9] = 873\n\t\tv[208,9] = 187\n\t\tv[209,9] = 351\n\t\tv[210,9] = 677\n\t\tv[211,9] = 999\n\t\tv[212,9] = 921\n\t\tv[213,9] = 477\n\t\tv[214,9] = 233\n\t\tv[215,9] = 765\n\t\tv[216,9] = 495\n\t\tv[217,9] = 81\n\t\tv[218,9] = 953\n\t\tv[219,9] = 479\n\t\tv[220,9] = 89\n\t\tv[221,9] = 173\n\t\tv[222,9] = 473\n\t\tv[223,9] = 131\n\t\tv[224,9] = 961\n\t\tv[225,9] = 411\n\t\tv[226,9] = 291\n\t\tv[227,9] = 967\n\t\tv[228,9] = 65\n\t\tv[229,9] = 511\n\t\tv[230,9] = 13\n\t\tv[231,9] = 805\n\t\tv[232,9] = 945\n\t\tv[233,9] = 369\n\t\tv[234,9] = 827\n\t\tv[235,9] = 295\n\t\tv[236,9] = 163\n\t\tv[237,9] = 835\n\t\tv[238,9] = 259\n\t\tv[239,9] = 207\n\t\tv[240,9] = 331\n\t\tv[241,9] = 29\n\t\tv[242,9] = 315\n\t\tv[243,9] = 999\n\t\tv[244,9] = 133\n\t\tv[245,9] = 967\n\t\tv[246,9] = 41\n\t\tv[247,9] = 117\n\t\tv[248,9] = 677\n\t\tv[249,9] = 471\n\t\tv[250,9] = 717\n\t\tv[251,9] = 881\n\t\tv[252,9] = 755\n\t\tv[253,9] = 351\n\t\tv[254,9] = 723\n\t\tv[255,9] = 259\n\t\tv[256,9] = 879\n\t\tv[257,9] = 455\n\t\tv[258,9] = 721\n\t\tv[259,9] = 289\n\t\tv[260,9] = 149\n\t\tv[261,9] = 199\n\t\tv[262,9] = 805\n\t\tv[263,9] = 987\n\t\tv[264,9] = 851\n\t\tv[265,9] = 423\n\t\tv[266,9] = 597\n\t\tv[267,9] = 129\n\t\tv[268,9] = 11\n\t\tv[269,9] = 733\n\t\tv[270,9] = 549\n\t\tv[271,9] = 153\n\t\tv[272,9] = 285\n\t\tv[273,9] = 451\n\t\tv[274,9] = 559\n\t\tv[275,9] = 377\n\t\tv[276,9] = 109\n\t\tv[277,9] = 357\n\t\tv[278,9] = 143\n\t\tv[279,9] = 693\n\t\tv[280,9] = 615\n\t\tv[281,9] = 677\n\t\tv[282,9] = 701\n\t\tv[283,9] = 475\n\t\tv[284,9] = 767\n\t\tv[285,9] = 85\n\t\tv[286,9] = 229\n\t\tv[287,9] = 509\n\t\tv[288,9] = 547\n\t\tv[289,9] = 151\n\t\tv[290,9] = 389\n\t\tv[291,9] = 711\n\t\tv[292,9] = 785\n\t\tv[293,9] = 657\n\t\tv[294,9] = 319\n\t\tv[295,9] = 509\n\t\tv[296,9] = 99\n\t\tv[297,9] = 1007\n\t\tv[298,9] = 775\n\t\tv[299,9] = 359\n\t\tv[300,9] = 697\n\t\tv[301,9] = 677\n\t\tv[302,9] = 85\n\t\tv[303,9] = 497\n\t\tv[304,9] = 105\n\t\tv[305,9] = 615\n\t\tv[306,9] = 891\n\t\tv[307,9] = 71\n\t\tv[308,9] = 449\n\t\tv[309,9] = 835\n\t\tv[310,9] = 609\n\t\tv[311,9] = 377\n\t\tv[312,9] = 693\n\t\tv[313,9] = 665\n\t\tv[314,9] = 627\n\t\tv[315,9] = 215\n\t\tv[316,9] = 911\n\t\tv[317,9] = 503\n\t\tv[318,9] = 729\n\t\tv[319,9] = 131\n\t\tv[320,9] = 19\n\t\tv[321,9] = 895\n\t\tv[322,9] = 199\n\t\tv[323,9] = 161\n\t\tv[324,9] = 239\n\t\tv[325,9] = 633\n\t\tv[326,9] = 1013\n\t\tv[327,9] = 537\n\t\tv[328,9] = 255\n\t\tv[329,9] = 23\n\t\tv[330,9] = 149\n\t\tv[331,9] = 679\n\t\tv[332,9] = 1021\n\t\tv[333,9] = 595\n\t\tv[334,9] = 199\n\t\tv[335,9] = 557\n\t\tv[336,9] = 659\n\t\tv[337,9] = 251\n\t\tv[338,9] = 829\n\t\tv[339,9] = 727\n\t\tv[340,9] = 439\n\t\tv[341,9] = 495\n\t\tv[342,9] = 647\n\t\tv[343,9] = 223\n\t\tv[344,9] = 949\n\t\tv[345,9] = 625\n\t\tv[346,9] = 87\n\t\tv[347,9] = 481\n\t\tv[348,9] = 85\n\t\tv[349,9] = 799\n\t\tv[350,9] = 917\n\t\tv[351,9] = 769\n\t\tv[352,9] = 949\n\t\tv[353,9] = 739\n\t\tv[354,9] = 115\n\t\tv[355,9] = 499\n\t\tv[356,9] = 945\n\t\tv[357,9] = 547\n\t\tv[358,9] = 225\n\t\tv[359,9] = 1015\n\t\tv[360,9] = 469\n\t\tv[361,9] = 737\n\t\tv[362,9] = 495\n\t\tv[363,9] = 353\n\t\tv[364,9] = 103\n\t\tv[365,9] = 17\n\t\tv[366,9] = 665\n\t\tv[367,9] = 639\n\t\tv[368,9] = 525\n\t\tv[369,9] = 75\n\t\tv[370,9] = 447\n\t\tv[371,9] = 185\n\t\tv[372,9] = 43\n\t\tv[373,9] = 729\n\t\tv[374,9] = 577\n\t\tv[375,9] = 863\n\t\tv[376,9] = 735\n\t\tv[377,9] = 317\n\t\tv[378,9] = 99\n\t\tv[379,9] = 17\n\t\tv[380,9] = 477\n\t\tv[381,9] = 893\n\t\tv[382,9] = 537\n\t\tv[383,9] = 519\n\t\tv[384,9] = 1017\n\t\tv[385,9] = 375\n\t\tv[386,9] = 297\n\t\tv[387,9] = 325\n\t\tv[388,9] = 999\n\t\tv[389,9] = 353\n\t\tv[390,9] = 343\n\t\tv[391,9] = 729\n\t\tv[392,9] = 135\n\t\tv[393,9] = 489\n\t\tv[394,9] = 859\n\t\tv[395,9] = 267\n\t\tv[396,9] = 141\n\t\tv[397,9] = 831\n\t\tv[398,9] = 141\n\t\tv[399,9] = 893\n\t\tv[400,9] = 249\n\t\tv[401,9] = 807\n\t\tv[402,9] = 53\n\t\tv[403,9] = 613\n\t\tv[404,9] = 131\n\t\tv[405,9] = 547\n\t\tv[406,9] = 977\n\t\tv[407,9] = 131\n\t\tv[408,9] = 999\n\t\tv[409,9] = 175\n\t\tv[410,9] = 31\n\t\tv[411,9] = 341\n\t\tv[412,9] = 739\n\t\tv[413,9] = 467\n\t\tv[414,9] = 675\n\t\tv[415,9] = 241\n\t\tv[416,9] = 645\n\t\tv[417,9] = 247\n\t\tv[418,9] = 391\n\t\tv[419,9] = 583\n\t\tv[420,9] = 183\n\t\tv[421,9] = 973\n\t\tv[422,9] = 433\n\t\tv[423,9] = 367\n\t\tv[424,9] = 131\n\t\tv[425,9] = 467\n\t\tv[426,9] = 571\n\t\tv[427,9] = 309\n\t\tv[428,9] = 385\n\t\tv[429,9] = 977\n\t\tv[430,9] = 111\n\t\tv[431,9] = 917\n\t\tv[432,9] = 935\n\t\tv[433,9] = 473\n\t\tv[434,9] = 345\n\t\tv[435,9] = 411\n\t\tv[436,9] = 313\n\t\tv[437,9] = 97\n\t\tv[438,9] = 149\n\t\tv[439,9] = 959\n\t\tv[440,9] = 841\n\t\tv[441,9] = 839\n\t\tv[442,9] = 669\n\t\tv[443,9] = 431\n\t\tv[444,9] = 51\n\t\tv[445,9] = 41\n\t\tv[446,9] = 301\n\t\tv[447,9] = 247\n\t\tv[448,9] = 1015\n\t\tv[449,9] = 377\n\t\tv[450,9] = 329\n\t\tv[451,9] = 945\n\t\tv[452,9] = 269\n\t\tv[453,9] = 67\n\t\tv[454,9] = 979\n\t\tv[455,9] = 581\n\t\tv[456,9] = 643\n\t\tv[457,9] = 823\n\t\tv[458,9] = 557\n\t\tv[459,9] = 91\n\t\tv[460,9] = 405\n\t\tv[461,9] = 117\n\t\tv[462,9] = 801\n\t\tv[463,9] = 509\n\t\tv[464,9] = 347\n\t\tv[465,9] = 893\n\t\tv[466,9] = 303\n\t\tv[467,9] = 227\n\t\tv[468,9] = 783\n\t\tv[469,9] = 555\n\t\tv[470,9] = 867\n\t\tv[471,9] = 99\n\t\tv[472,9] = 703\n\t\tv[473,9] = 111\n\t\tv[474,9] = 797\n\t\tv[475,9] = 873\n\t\tv[476,9] = 541\n\t\tv[477,9] = 919\n\t\tv[478,9] = 513\n\t\tv[479,9] = 343\n\t\tv[480,9] = 319\n\t\tv[481,9] = 517\n\t\tv[482,9] = 135\n\t\tv[483,9] = 871\n\t\tv[484,9] = 917\n\t\tv[485,9] = 285\n\t\tv[486,9] = 663\n\t\tv[487,9] = 301\n\t\tv[488,9] = 15\n\t\tv[489,9] = 763\n\t\tv[490,9] = 89\n\t\tv[491,9] = 323\n\t\tv[492,9] = 757\n\t\tv[493,9] = 317\n\t\tv[494,9] = 807\n\t\tv[495,9] = 309\n\t\tv[496,9] = 1013\n\t\tv[497,9] = 345\n\t\tv[498,9] = 499\n\t\tv[499,9] = 279\n\t\tv[500,9] = 711\n\t\tv[501,9] = 915\n\t\tv[502,9] = 411\n\t\tv[503,9] = 281\n\t\tv[504,9] = 193\n\t\tv[505,9] = 739\n\t\tv[506,9] = 365\n\t\tv[507,9] = 315\n\t\tv[508,9] = 375\n\t\tv[509,9] = 809\n\t\tv[510,9] = 469\n\t\tv[511,9] = 487\n\t\tv[512,9] = 621\n\t\tv[513,9] = 857\n\t\tv[514,9] = 975\n\t\tv[515,9] = 537\n\t\tv[516,9] = 939\n\t\tv[517,9] = 585\n\t\tv[518,9] = 129\n\t\tv[519,9] = 625\n\t\tv[520,9] = 447\n\t\tv[521,9] = 129\n\t\tv[522,9] = 1017\n\t\tv[523,9] = 133\n\t\tv[524,9] = 83\n\t\tv[525,9] = 3\n\t\tv[526,9] = 415\n\t\tv[527,9] = 661\n\t\tv[528,9] = 53\n\t\tv[529,9] = 115\n\t\tv[530,9] = 903\n\t\tv[531,9] = 49\n\t\tv[532,9] = 79\n\t\tv[533,9] = 55\n\t\tv[534,9] = 385\n\t\tv[535,9] = 261\n\t\tv[536,9] = 345\n\t\tv[537,9] = 297\n\t\tv[538,9] = 199\n\t\tv[539,9] = 385\n\t\tv[540,9] = 617\n\t\tv[541,9] = 25\n\t\tv[542,9] = 515\n\t\tv[543,9] = 275\n\t\tv[544,9] = 849\n\t\tv[545,9] = 401\n\t\tv[546,9] = 471\n\t\tv[547,9] = 377\n\t\tv[548,9] = 661\n\t\tv[549,9] = 535\n\t\tv[550,9] = 505\n\t\tv[551,9] = 939\n\t\tv[552,9] = 465\n\t\tv[553,9] = 225\n\t\tv[554,9] = 929\n\t\tv[555,9] = 219\n\t\tv[556,9] = 955\n\t\tv[557,9] = 659\n\t\tv[558,9] = 441\n\t\tv[559,9] = 117\n\t\tv[560,9] = 527\n\t\tv[561,9] = 427\n\t\tv[562,9] = 515\n\t\tv[563,9] = 287\n\t\tv[564,9] = 191\n\t\tv[565,9] = 33\n\t\tv[566,9] = 389\n\t\tv[567,9] = 197\n\t\tv[568,9] = 825\n\t\tv[569,9] = 63\n\t\tv[570,9] = 417\n\t\tv[571,9] = 949\n\t\tv[572,9] = 35\n\t\tv[573,9] = 571\n\t\tv[574,9] = 9\n\t\tv[575,9] = 131\n\t\tv[576,9] = 609\n\t\tv[577,9] = 439\n\t\tv[578,9] = 95\n\t\tv[579,9] = 19\n\t\tv[580,9] = 569\n\t\tv[581,9] = 893\n\t\tv[582,9] = 451\n\t\tv[583,9] = 397\n\t\tv[584,9] = 971\n\t\tv[585,9] = 801\n\t\tv[586,9] = 125\n\t\tv[587,9] = 471\n\t\tv[588,9] = 187\n\t\tv[589,9] = 257\n\t\tv[590,9] = 67\n\t\tv[591,9] = 949\n\t\tv[592,9] = 621\n\t\tv[593,9] = 453\n\t\tv[594,9] = 411\n\t\tv[595,9] = 621\n\t\tv[596,9] = 955\n\t\tv[597,9] = 309\n\t\tv[598,9] = 783\n\t\tv[599,9] = 893\n\t\tv[600,9] = 597\n\t\tv[601,9] = 377\n\t\tv[602,9] = 753\n\t\tv[603,9] = 145\n\t\tv[604,9] = 637\n\t\tv[605,9] = 941\n\t\tv[606,9] = 593\n\t\tv[607,9] = 317\n\t\tv[608,9] = 555\n\t\tv[609,9] = 375\n\t\tv[610,9] = 575\n\t\tv[611,9] = 175\n\t\tv[612,9] = 403\n\t\tv[613,9] = 571\n\t\tv[614,9] = 555\n\t\tv[615,9] = 109\n\t\tv[616,9] = 377\n\t\tv[617,9] = 931\n\t\tv[618,9] = 499\n\t\tv[619,9] = 649\n\t\tv[620,9] = 653\n\t\tv[621,9] = 329\n\t\tv[622,9] = 279\n\t\tv[623,9] = 271\n\t\tv[624,9] = 647\n\t\tv[625,9] = 721\n\t\tv[626,9] = 665\n\t\tv[627,9] = 429\n\t\tv[628,9] = 957\n\t\tv[629,9] = 803\n\t\tv[630,9] = 767\n\t\tv[631,9] = 425\n\t\tv[632,9] = 477\n\t\tv[633,9] = 995\n\t\tv[634,9] = 105\n\t\tv[635,9] = 495\n\t\tv[636,9] = 575\n\t\tv[637,9] = 687\n\t\tv[638,9] = 385\n\t\tv[639,9] = 227\n\t\tv[640,9] = 923\n\t\tv[641,9] = 563\n\t\tv[642,9] = 723\n\t\tv[643,9] = 481\n\t\tv[644,9] = 717\n\t\tv[645,9] = 111\n\t\tv[646,9] = 633\n\t\tv[647,9] = 113\n\t\tv[648,9] = 369\n\t\tv[649,9] = 955\n\t\tv[650,9] = 253\n\t\tv[651,9] = 321\n\t\tv[652,9] = 409\n\t\tv[653,9] = 909\n\t\tv[654,9] = 367\n\t\tv[655,9] = 33\n\t\tv[656,9] = 967\n\t\tv[657,9] = 453\n\t\tv[658,9] = 863\n\t\tv[659,9] = 449\n\t\tv[660,9] = 539\n\t\tv[661,9] = 781\n\t\tv[662,9] = 911\n\t\tv[663,9] = 113\n\t\tv[664,9] = 7\n\t\tv[665,9] = 219\n\t\tv[666,9] = 725\n\t\tv[667,9] = 1015\n\t\tv[668,9] = 971\n\t\tv[669,9] = 1021\n\t\tv[670,9] = 525\n\t\tv[671,9] = 785\n\t\tv[672,9] = 873\n\t\tv[673,9] = 191\n\t\tv[674,9] = 893\n\t\tv[675,9] = 297\n\t\tv[676,9] = 507\n\t\tv[677,9] = 215\n\t\tv[678,9] = 21\n\t\tv[679,9] = 153\n\t\tv[680,9] = 645\n\t\tv[681,9] = 913\n\t\tv[682,9] = 755\n\t\tv[683,9] = 371\n\t\tv[684,9] = 881\n\t\tv[685,9] = 113\n\t\tv[686,9] = 903\n\t\tv[687,9] = 225\n\t\tv[688,9] = 49\n\t\tv[689,9] = 587\n\t\tv[690,9] = 201\n\t\tv[691,9] = 927\n\t\tv[692,9] = 429\n\t\tv[693,9] = 599\n\t\tv[694,9] = 513\n\t\tv[695,9] = 97\n\t\tv[696,9] = 319\n\t\tv[697,9] = 331\n\t\tv[698,9] = 833\n\t\tv[699,9] = 325\n\t\tv[700,9] = 887\n\t\tv[701,9] = 139\n\t\tv[702,9] = 927\n\t\tv[703,9] = 399\n\t\tv[704,9] = 163\n\t\tv[705,9] = 307\n\t\tv[706,9] = 803\n\t\tv[707,9] = 169\n\t\tv[708,9] = 1019\n\t\tv[709,9] = 869\n\t\tv[710,9] = 537\n\t\tv[711,9] = 907\n\t\tv[712,9] = 479\n\t\tv[713,9] = 335\n\t\tv[714,9] = 697\n\t\tv[715,9] = 479\n\t\tv[716,9] = 353\n\t\tv[717,9] = 769\n\t\tv[718,9] = 787\n\t\tv[719,9] = 1023\n\t\tv[720,9] = 855\n\t\tv[721,9] = 493\n\t\tv[722,9] = 883\n\t\tv[723,9] = 521\n\t\tv[724,9] = 735\n\t\tv[725,9] = 297\n\t\tv[726,9] = 1011\n\t\tv[727,9] = 991\n\t\tv[728,9] = 879\n\t\tv[729,9] = 855\n\t\tv[730,9] = 591\n\t\tv[731,9] = 415\n\t\tv[732,9] = 917\n\t\tv[733,9] = 375\n\t\tv[734,9] = 453\n\t\tv[735,9] = 553\n\t\tv[736,9] = 189\n\t\tv[737,9] = 841\n\t\tv[738,9] = 339\n\t\tv[739,9] = 211\n\t\tv[740,9] = 601\n\t\tv[741,9] = 57\n\t\tv[742,9] = 765\n\t\tv[743,9] = 745\n\t\tv[744,9] = 621\n\t\tv[745,9] = 209\n\t\tv[746,9] = 875\n\t\tv[747,9] = 639\n\t\tv[748,9] = 7\n\t\tv[749,9] = 595\n\t\tv[750,9] = 971\n\t\tv[751,9] = 263\n\t\tv[752,9] = 1009\n\t\tv[753,9] = 201\n\t\tv[754,9] = 23\n\t\tv[755,9] = 77\n\t\tv[756,9] = 621\n\t\tv[757,9] = 33\n\t\tv[758,9] = 535\n\t\tv[759,9] = 963\n\t\tv[760,9] = 661\n\t\tv[761,9] = 523\n\t\tv[762,9] = 263\n\t\tv[763,9] = 917\n\t\tv[764,9] = 103\n\t\tv[765,9] = 623\n\t\tv[766,9] = 231\n\t\tv[767,9] = 47\n\t\tv[768,9] = 301\n\t\tv[769,9] = 549\n\t\tv[770,9] = 337\n\t\tv[771,9] = 675\n\t\tv[772,9] = 189\n\t\tv[773,9] = 357\n\t\tv[774,9] = 1005\n\t\tv[775,9] = 789\n\t\tv[776,9] = 189\n\t\tv[777,9] = 319\n\t\tv[778,9] = 721\n\t\tv[779,9] = 1005\n\t\tv[780,9] = 525\n\t\tv[781,9] = 675\n\t\tv[782,9] = 539\n\t\tv[783,9] = 191\n\t\tv[784,9] = 813\n\t\tv[785,9] = 917\n\t\tv[786,9] = 51\n\t\tv[787,9] = 167\n\t\tv[788,9] = 415\n\t\tv[789,9] = 579\n\t\tv[790,9] = 755\n\t\tv[791,9] = 605\n\t\tv[792,9] = 721\n\t\tv[793,9] = 837\n\t\tv[794,9] = 529\n\t\tv[795,9] = 31\n\t\tv[796,9] = 327\n\t\tv[797,9] = 799\n\t\tv[798,9] = 961\n\t\tv[799,9] = 279\n\t\tv[800,9] = 409\n\t\tv[801,9] = 847\n\t\tv[802,9] = 649\n\t\tv[803,9] = 241\n\t\tv[804,9] = 285\n\t\tv[805,9] = 545\n\t\tv[806,9] = 407\n\t\tv[807,9] = 161\n\t\tv[808,9] = 591\n\t\tv[809,9] = 73\n\t\tv[810,9] = 313\n\t\tv[811,9] = 811\n\t\tv[812,9] = 17\n\t\tv[813,9] = 663\n\t\tv[814,9] = 269\n\t\tv[815,9] = 261\n\t\tv[816,9] = 37\n\t\tv[817,9] = 783\n\t\tv[818,9] = 127\n\t\tv[819,9] = 917\n\t\tv[820,9] = 231\n\t\tv[821,9] = 577\n\t\tv[822,9] = 975\n\t\tv[823,9] = 793\n\t\tv[824,9] = 921\n\t\tv[825,9] = 343\n\t\tv[826,9] = 751\n\t\tv[827,9] = 139\n\t\tv[828,9] = 221\n\t\tv[829,9] = 79\n\t\tv[830,9] = 817\n\t\tv[831,9] = 393\n\t\tv[832,9] = 545\n\t\tv[833,9] = 11\n\t\tv[834,9] = 781\n\t\tv[835,9] = 71\n\t\tv[836,9] = 1\n\t\tv[837,9] = 699\n\t\tv[838,9] = 767\n\t\tv[839,9] = 917\n\t\tv[840,9] = 9\n\t\tv[841,9] = 107\n\t\tv[842,9] = 341\n\t\tv[843,9] = 587\n\t\tv[844,9] = 903\n\t\tv[845,9] = 965\n\t\tv[846,9] = 599\n\t\tv[847,9] = 507\n\t\tv[848,9] = 843\n\t\tv[849,9] = 739\n\t\tv[850,9] = 579\n\t\tv[851,9] = 397\n\t\tv[852,9] = 397\n\t\tv[853,9] = 325\n\t\tv[854,9] = 775\n\t\tv[855,9] = 565\n\t\tv[856,9] = 925\n\t\tv[857,9] = 75\n\t\tv[858,9] = 55\n\t\tv[859,9] = 979\n\t\tv[860,9] = 931\n\t\tv[861,9] = 93\n\t\tv[862,9] = 957\n\t\tv[863,9] = 857\n\t\tv[864,9] = 753\n\t\tv[865,9] = 965\n\t\tv[866,9] = 795\n\t\tv[867,9] = 67\n\t\tv[868,9] = 5\n\t\tv[869,9] = 87\n\t\tv[870,9] = 909\n\t\tv[871,9] = 97\n\t\tv[872,9] = 995\n\t\tv[873,9] = 271\n\t\tv[874,9] = 875\n\t\tv[875,9] = 671\n\t\tv[876,9] = 613\n\t\tv[877,9] = 33\n\t\tv[878,9] = 351\n\t\tv[879,9] = 69\n\t\tv[880,9] = 811\n\t\tv[881,9] = 669\n\t\tv[882,9] = 729\n\t\tv[883,9] = 401\n\t\tv[884,9] = 647\n\t\tv[885,9] = 241\n\t\tv[886,9] = 435\n\t\tv[887,9] = 447\n\t\tv[888,9] = 721\n\t\tv[889,9] = 271\n\t\tv[890,9] = 745\n\t\tv[891,9] = 53\n\t\tv[892,9] = 775\n\t\tv[893,9] = 99\n\t\tv[894,9] = 343\n\t\tv[895,9] = 451\n\t\tv[896,9] = 427\n\t\tv[897,9] = 593\n\t\tv[898,9] = 339\n\t\tv[899,9] = 845\n\t\tv[900,9] = 243\n\t\tv[901,9] = 345\n\t\tv[902,9] = 17\n\t\tv[903,9] = 573\n\t\tv[904,9] = 421\n\t\tv[905,9] = 517\n\t\tv[906,9] = 971\n\t\tv[907,9] = 499\n\t\tv[908,9] = 435\n\t\tv[909,9] = 769\n\t\tv[910,9] = 75\n\t\tv[911,9] = 203\n\t\tv[912,9] = 793\n\t\tv[913,9] = 985\n\t\tv[914,9] = 343\n\t\tv[915,9] = 955\n\t\tv[916,9] = 735\n\t\tv[917,9] = 523\n\t\tv[918,9] = 659\n\t\tv[919,9] = 703\n\t\tv[920,9] = 303\n\t\tv[921,9] = 421\n\t\tv[922,9] = 951\n\t\tv[923,9] = 405\n\t\tv[924,9] = 631\n\t\tv[925,9] = 825\n\t\tv[926,9] = 735\n\t\tv[927,9] = 433\n\t\tv[928,9] = 841\n\t\tv[929,9] = 485\n\t\tv[930,9] = 49\n\t\tv[931,9] = 749\n\t\tv[932,9] = 107\n\t\tv[933,9] = 669\n\t\tv[934,9] = 211\n\t\tv[935,9] = 497\n\t\tv[936,9] = 143\n\t\tv[937,9] = 99\n\t\tv[938,9] = 57\n\t\tv[939,9] = 277\n\t\tv[940,9] = 969\n\t\tv[941,9] = 107\n\t\tv[942,9] = 397\n\t\tv[943,9] = 563\n\t\tv[944,9] = 551\n\t\tv[945,9] = 447\n\t\tv[946,9] = 381\n\t\tv[947,9] = 187\n\t\tv[948,9] = 57\n\t\tv[949,9] = 405\n\t\tv[950,9] = 731\n\t\tv[951,9] = 769\n\t\tv[952,9] = 923\n\t\tv[953,9] = 955\n\t\tv[954,9] = 915\n\t\tv[955,9] = 737\n\t\tv[956,9] = 595\n\t\tv[957,9] = 341\n\t\tv[958,9] = 253\n\t\tv[959,9] = 823\n\t\tv[960,9] = 197\n\t\tv[961,9] = 321\n\t\tv[962,9] = 315\n\t\tv[963,9] = 181\n\t\tv[964,9] = 885\n\t\tv[965,9] = 497\n\t\tv[966,9] = 159\n\t\tv[967,9] = 571\n\t\tv[968,9] = 981\n\t\tv[969,9] = 899\n\t\tv[970,9] = 785\n\t\tv[971,9] = 947\n\t\tv[972,9] = 217\n\t\tv[973,9] = 217\n\t\tv[974,9] = 135\n\t\tv[975,9] = 753\n\t\tv[976,9] = 623\n\t\tv[977,9] = 565\n\t\tv[978,9] = 717\n\t\tv[979,9] = 903\n\t\tv[980,9] = 581\n\t\tv[981,9] = 955\n\t\tv[982,9] = 621\n\t\tv[983,9] = 361\n\t\tv[984,9] = 869\n\t\tv[985,9] = 87\n\t\tv[986,9] = 943\n\t\tv[987,9] = 907\n\t\tv[988,9] = 853\n\t\tv[989,9] = 353\n\t\tv[990,9] = 335\n\t\tv[991,9] = 197\n\t\tv[992,9] = 771\n\t\tv[993,9] = 433\n\t\tv[994,9] = 743\n\t\tv[995,9] = 195\n\t\tv[996,9] = 91\n\t\tv[997,9] = 1023\n\t\tv[998,9] = 63\n\t\tv[999,9] = 301\n\t\tv[1000,9] = 647\n\t\tv[1001,9] = 205\n\t\tv[1002,9] = 485\n\t\tv[1003,9] = 927\n\t\tv[1004,9] = 1003\n\t\tv[1005,9] = 987\n\t\tv[1006,9] = 359\n\t\tv[1007,9] = 577\n\t\tv[1008,9] = 147\n\t\tv[1009,9] = 141\n\t\tv[1010,9] = 1017\n\t\tv[1011,9] = 701\n\t\tv[1012,9] = 273\n\t\tv[1013,9] = 89\n\t\tv[1014,9] = 589\n\t\tv[1015,9] = 487\n\t\tv[1016,9] = 859\n\t\tv[1017,9] = 343\n\t\tv[1018,9] = 91\n\t\tv[1019,9] = 847\n\t\tv[1020,9] = 341\n\t\tv[1021,9] = 173\n\t\tv[1022,9] = 287\n\t\tv[1023,9] = 1003\n\t\tv[1024,9] = 289\n\t\tv[1025,9] = 639\n\t\tv[1026,9] = 983\n\t\tv[1027,9] = 685\n\t\tv[1028,9] = 697\n\t\tv[1029,9] = 35\n\t\tv[1030,9] = 701\n\t\tv[1031,9] = 645\n\t\tv[1032,9] = 911\n\t\tv[1033,9] = 501\n\t\tv[1034,9] = 705\n\t\tv[1035,9] = 873\n\t\tv[1036,9] = 763\n\t\tv[1037,9] = 745\n\t\tv[1038,9] = 657\n\t\tv[1039,9] = 559\n\t\tv[1040,9] = 699\n\t\tv[1041,9] = 315\n\t\tv[1042,9] = 347\n\t\tv[1043,9] = 429\n\t\tv[1044,9] = 197\n\t\tv[1045,9] = 165\n\t\tv[1046,9] = 955\n\t\tv[1047,9] = 859\n\t\tv[1048,9] = 167\n\t\tv[1049,9] = 303\n\t\tv[1050,9] = 833\n\t\tv[1051,9] = 531\n\t\tv[1052,9] = 473\n\t\tv[1053,9] = 635\n\t\tv[1054,9] = 641\n\t\tv[1055,9] = 195\n\t\tv[1056,9] = 589\n\t\tv[1057,9] = 821\n\t\tv[1058,9] = 205\n\t\tv[1059,9] = 3\n\t\tv[1060,9] = 635\n\t\tv[1061,9] = 371\n\t\tv[1062,9] = 891\n\t\tv[1063,9] = 249\n\t\tv[1064,9] = 123\n\t\tv[1065,9] = 77\n\t\tv[1066,9] = 623\n\t\tv[1067,9] = 993\n\t\tv[1068,9] = 401\n\t\tv[1069,9] = 525\n\t\tv[1070,9] = 427\n\t\tv[1071,9] = 71\n\t\tv[1072,9] = 655\n\t\tv[1073,9] = 951\n\t\tv[1074,9] = 357\n\t\tv[1075,9] = 851\n\t\tv[1076,9] = 899\n\t\tv[1077,9] = 535\n\t\tv[1078,9] = 493\n\t\tv[1079,9] = 323\n\t\tv[1080,9] = 1003\n\t\tv[1081,9] = 343\n\t\tv[1082,9] = 515\n\t\tv[1083,9] = 859\n\t\tv[1084,9] = 1017\n\t\tv[1085,9] = 5\n\t\tv[1086,9] = 423\n\t\tv[1087,9] = 315\n\t\tv[1088,9] = 1011\n\t\tv[1089,9] = 703\n\t\tv[1090,9] = 41\n\t\tv[1091,9] = 777\n\t\tv[1092,9] = 163\n\t\tv[1093,9] = 95\n\t\tv[1094,9] = 831\n\t\tv[1095,9] = 79\n\t\tv[1096,9] = 975\n\t\tv[1097,9] = 235\n\t\tv[1098,9] = 633\n\t\tv[1099,9] = 723\n\t\tv[1100,9] = 297\n\t\tv[1101,9] = 589\n\t\tv[1102,9] = 317\n\t\tv[1103,9] = 679\n\t\tv[1104,9] = 981\n\t\tv[1105,9] = 195\n\t\tv[1106,9] = 399\n\t\tv[1107,9] = 1003\n\t\tv[1108,9] = 121\n\t\tv[1109,9] = 501\n\t\tv[1110,9] = 155\n\n\t\tv[161,10] = 7\n\t\tv[162,10] = 2011\n\t\tv[163,10] = 1001\n\t\tv[164,10] = 49\n\t\tv[165,10] = 825\n\t\tv[166,10] = 415\n\t\tv[167,10] = 1441\n\t\tv[168,10] = 383\n\t\tv[169,10] = 1581\n\t\tv[170,10] = 623\n\t\tv[171,10] = 1621\n\t\tv[172,10] = 1319\n\t\tv[173,10] = 1387\n\t\tv[174,10] = 619\n\t\tv[175,10] = 839\n\t\tv[176,10] = 217\n\t\tv[177,10] = 75\n\t\tv[178,10] = 1955\n\t\tv[179,10] = 505\n\t\tv[180,10] = 281\n\t\tv[181,10] = 1629\n\t\tv[182,10] = 1379\n\t\tv[183,10] = 53\n\t\tv[184,10] = 1111\n\t\tv[185,10] = 1399\n\t\tv[186,10] = 301\n\t\tv[187,10] = 209\n\t\tv[188,10] = 49\n\t\tv[189,10] = 155\n\t\tv[190,10] = 1647\n\t\tv[191,10] = 631\n\t\tv[192,10] = 129\n\t\tv[193,10] = 1569\n\t\tv[194,10] = 335\n\t\tv[195,10] = 67\n\t\tv[196,10] = 1955\n\t\tv[197,10] = 1611\n\t\tv[198,10] = 2021\n\t\tv[199,10] = 1305\n\t\tv[200,10] = 121\n\t\tv[201,10] = 37\n\t\tv[202,10] = 877\n\t\tv[203,10] = 835\n\t\tv[204,10] = 1457\n\t\tv[205,10] = 669\n\t\tv[206,10] = 1405\n\t\tv[207,10] = 935\n\t\tv[208,10] = 1735\n\t\tv[209,10] = 665\n\t\tv[210,10] = 551\n\t\tv[211,10] = 789\n\t\tv[212,10] = 1543\n\t\tv[213,10] = 1267\n\t\tv[214,10] = 1027\n\t\tv[215,10] = 1\n\t\tv[216,10] = 1911\n\t\tv[217,10] = 163\n\t\tv[218,10] = 1929\n\t\tv[219,10] = 67\n\t\tv[220,10] = 1975\n\t\tv[221,10] = 1681\n\t\tv[222,10] = 1413\n\t\tv[223,10] = 191\n\t\tv[224,10] = 1711\n\t\tv[225,10] = 1307\n\t\tv[226,10] = 401\n\t\tv[227,10] = 725\n\t\tv[228,10] = 1229\n\t\tv[229,10] = 1403\n\t\tv[230,10] = 1609\n\t\tv[231,10] = 2035\n\t\tv[232,10] = 917\n\t\tv[233,10] = 921\n\t\tv[234,10] = 1789\n\t\tv[235,10] = 41\n\t\tv[236,10] = 2003\n\t\tv[237,10] = 187\n\t\tv[238,10] = 67\n\t\tv[239,10] = 1635\n\t\tv[240,10] = 717\n\t\tv[241,10] = 1449\n\t\tv[242,10] = 277\n\t\tv[243,10] = 1903\n\t\tv[244,10] = 1179\n\t\tv[245,10] = 363\n\t\tv[246,10] = 1211\n\t\tv[247,10] = 1231\n\t\tv[248,10] = 647\n\t\tv[249,10] = 1261\n\t\tv[250,10] = 1029\n\t\tv[251,10] = 1485\n\t\tv[252,10] = 1309\n\t\tv[253,10] = 1149\n\t\tv[254,10] = 317\n\t\tv[255,10] = 1335\n\t\tv[256,10] = 171\n\t\tv[257,10] = 243\n\t\tv[258,10] = 271\n\t\tv[259,10] = 1055\n\t\tv[260,10] = 1601\n\t\tv[261,10] = 1129\n\t\tv[262,10] = 1653\n\t\tv[263,10] = 205\n\t\tv[264,10] = 1463\n\t\tv[265,10] = 1681\n\t\tv[266,10] = 1621\n\t\tv[267,10] = 197\n\t\tv[268,10] = 951\n\t\tv[269,10] = 573\n\t\tv[270,10] = 1697\n\t\tv[271,10] = 1265\n\t\tv[272,10] = 1321\n\t\tv[273,10] = 1805\n\t\tv[274,10] = 1235\n\t\tv[275,10] = 1853\n\t\tv[276,10] = 1307\n\t\tv[277,10] = 945\n\t\tv[278,10] = 1197\n\t\tv[279,10] = 1411\n\t\tv[280,10] = 833\n\t\tv[281,10] = 273\n\t\tv[282,10] = 1517\n\t\tv[283,10] = 1747\n\t\tv[284,10] = 1095\n\t\tv[285,10] = 1345\n\t\tv[286,10] = 869\n\t\tv[287,10] = 57\n\t\tv[288,10] = 1383\n\t\tv[289,10] = 221\n\t\tv[290,10] = 1713\n\t\tv[291,10] = 335\n\t\tv[292,10] = 1751\n\t\tv[293,10] = 1141\n\t\tv[294,10] = 839\n\t\tv[295,10] = 523\n\t\tv[296,10] = 1861\n\t\tv[297,10] = 1105\n\t\tv[298,10] = 389\n\t\tv[299,10] = 1177\n\t\tv[300,10] = 1877\n\t\tv[301,10] = 805\n\t\tv[302,10] = 93\n\t\tv[303,10] = 1591\n\t\tv[304,10] = 423\n\t\tv[305,10] = 1835\n\t\tv[306,10] = 99\n\t\tv[307,10] = 1781\n\t\tv[308,10] = 1515\n\t\tv[309,10] = 1909\n\t\tv[310,10] = 1011\n\t\tv[311,10] = 303\n\t\tv[312,10] = 385\n\t\tv[313,10] = 1635\n\t\tv[314,10] = 357\n\t\tv[315,10] = 973\n\t\tv[316,10] = 1781\n\t\tv[317,10] = 1707\n\t\tv[318,10] = 1363\n\t\tv[319,10] = 1053\n\t\tv[320,10] = 649\n\t\tv[321,10] = 1469\n\t\tv[322,10] = 623\n\t\tv[323,10] = 1429\n\t\tv[324,10] = 1241\n\t\tv[325,10] = 1151\n\t\tv[326,10] = 1055\n\t\tv[327,10] = 503\n\t\tv[328,10] = 921\n\t\tv[329,10] = 3\n\t\tv[330,10] = 349\n\t\tv[331,10] = 1149\n\t\tv[332,10] = 293\n\t\tv[333,10] = 45\n\t\tv[334,10] = 303\n\t\tv[335,10] = 877\n\t\tv[336,10] = 1565\n\t\tv[337,10] = 1583\n\t\tv[338,10] = 1001\n\t\tv[339,10] = 663\n\t\tv[340,10] = 1535\n\t\tv[341,10] = 395\n\t\tv[342,10] = 1141\n\t\tv[343,10] = 1481\n\t\tv[344,10] = 1797\n\t\tv[345,10] = 643\n\t\tv[346,10] = 1507\n\t\tv[347,10] = 465\n\t\tv[348,10] = 2027\n\t\tv[349,10] = 1695\n\t\tv[350,10] = 367\n\t\tv[351,10] = 937\n\t\tv[352,10] = 719\n\t\tv[353,10] = 545\n\t\tv[354,10] = 1991\n\t\tv[355,10] = 83\n\t\tv[356,10] = 819\n\t\tv[357,10] = 239\n\t\tv[358,10] = 1791\n\t\tv[359,10] = 1461\n\t\tv[360,10] = 1647\n\t\tv[361,10] = 1501\n\t\tv[362,10] = 1161\n\t\tv[363,10] = 1629\n\t\tv[364,10] = 139\n\t\tv[365,10] = 1595\n\t\tv[366,10] = 1921\n\t\tv[367,10] = 1267\n\t\tv[368,10] = 1415\n\t\tv[369,10] = 509\n\t\tv[370,10] = 347\n\t\tv[371,10] = 777\n\t\tv[372,10] = 1083\n\t\tv[373,10] = 363\n\t\tv[374,10] = 269\n\t\tv[375,10] = 1015\n\t\tv[376,10] = 1809\n\t\tv[377,10] = 1105\n\t\tv[378,10] = 1429\n\t\tv[379,10] = 1471\n\t\tv[380,10] = 2019\n\t\tv[381,10] = 381\n\t\tv[382,10] = 2025\n\t\tv[383,10] = 1223\n\t\tv[384,10] = 827\n\t\tv[385,10] = 1733\n\t\tv[386,10] = 887\n\t\tv[387,10] = 1321\n\t\tv[388,10] = 803\n\t\tv[389,10] = 1951\n\t\tv[390,10] = 1297\n\t\tv[391,10] = 1995\n\t\tv[392,10] = 833\n\t\tv[393,10] = 1107\n\t\tv[394,10] = 1135\n\t\tv[395,10] = 1181\n\t\tv[396,10] = 1251\n\t\tv[397,10] = 983\n\t\tv[398,10] = 1389\n\t\tv[399,10] = 1565\n\t\tv[400,10] = 273\n\t\tv[401,10] = 137\n\t\tv[402,10] = 71\n\t\tv[403,10] = 735\n\t\tv[404,10] = 1005\n\t\tv[405,10] = 933\n\t\tv[406,10] = 67\n\t\tv[407,10] = 1471\n\t\tv[408,10] = 551\n\t\tv[409,10] = 457\n\t\tv[410,10] = 1667\n\t\tv[411,10] = 1729\n\t\tv[412,10] = 919\n\t\tv[413,10] = 285\n\t\tv[414,10] = 1629\n\t\tv[415,10] = 1815\n\t\tv[416,10] = 653\n\t\tv[417,10] = 1919\n\t\tv[418,10] = 1039\n\t\tv[419,10] = 531\n\t\tv[420,10] = 393\n\t\tv[421,10] = 1411\n\t\tv[422,10] = 359\n\t\tv[423,10] = 221\n\t\tv[424,10] = 699\n\t\tv[425,10] = 1485\n\t\tv[426,10] = 471\n\t\tv[427,10] = 1357\n\t\tv[428,10] = 1715\n\t\tv[429,10] = 595\n\t\tv[430,10] = 1677\n\t\tv[431,10] = 153\n\t\tv[432,10] = 1903\n\t\tv[433,10] = 1281\n\t\tv[434,10] = 215\n\t\tv[435,10] = 781\n\t\tv[436,10] = 543\n\t\tv[437,10] = 293\n\t\tv[438,10] = 1807\n\t\tv[439,10] = 965\n\t\tv[440,10] = 1695\n\t\tv[441,10] = 443\n\t\tv[442,10] = 1985\n\t\tv[443,10] = 321\n\t\tv[444,10] = 879\n\t\tv[445,10] = 1227\n\t\tv[446,10] = 1915\n\t\tv[447,10] = 839\n\t\tv[448,10] = 1945\n\t\tv[449,10] = 1993\n\t\tv[450,10] = 1165\n\t\tv[451,10] = 51\n\t\tv[452,10] = 557\n\t\tv[453,10] = 723\n\t\tv[454,10] = 1491\n\t\tv[455,10] = 817\n\t\tv[456,10] = 1237\n\t\tv[457,10] = 947\n\t\tv[458,10] = 1215\n\t\tv[459,10] = 1911\n\t\tv[460,10] = 1225\n\t\tv[461,10] = 1965\n\t\tv[462,10] = 1889\n\t\tv[463,10] = 1503\n\t\tv[464,10] = 1177\n\t\tv[465,10] = 73\n\t\tv[466,10] = 1767\n\t\tv[467,10] = 303\n\t\tv[468,10] = 177\n\t\tv[469,10] = 1897\n\t\tv[470,10] = 1401\n\t\tv[471,10] = 321\n\t\tv[472,10] = 921\n\t\tv[473,10] = 217\n\t\tv[474,10] = 1779\n\t\tv[475,10] = 327\n\t\tv[476,10] = 1889\n\t\tv[477,10] = 333\n\t\tv[478,10] = 615\n\t\tv[479,10] = 1665\n\t\tv[480,10] = 1825\n\t\tv[481,10] = 1639\n\t\tv[482,10] = 237\n\t\tv[483,10] = 1205\n\t\tv[484,10] = 361\n\t\tv[485,10] = 129\n\t\tv[486,10] = 1655\n\t\tv[487,10] = 983\n\t\tv[488,10] = 1089\n\t\tv[489,10] = 1171\n\t\tv[490,10] = 401\n\t\tv[491,10] = 677\n\t\tv[492,10] = 643\n\t\tv[493,10] = 749\n\t\tv[494,10] = 303\n\t\tv[495,10] = 1407\n\t\tv[496,10] = 1873\n\t\tv[497,10] = 1579\n\t\tv[498,10] = 1491\n\t\tv[499,10] = 1393\n\t\tv[500,10] = 1247\n\t\tv[501,10] = 789\n\t\tv[502,10] = 763\n\t\tv[503,10] = 49\n\t\tv[504,10] = 5\n\t\tv[505,10] = 1607\n\t\tv[506,10] = 1891\n\t\tv[507,10] = 735\n\t\tv[508,10] = 1557\n\t\tv[509,10] = 1909\n\t\tv[510,10] = 1765\n\t\tv[511,10] = 1777\n\t\tv[512,10] = 1127\n\t\tv[513,10] = 813\n\t\tv[514,10] = 695\n\t\tv[515,10] = 97\n\t\tv[516,10] = 731\n\t\tv[517,10] = 1503\n\t\tv[518,10] = 1751\n\t\tv[519,10] = 333\n\t\tv[520,10] = 769\n\t\tv[521,10] = 865\n\t\tv[522,10] = 693\n\t\tv[523,10] = 377\n\t\tv[524,10] = 1919\n\t\tv[525,10] = 957\n\t\tv[526,10] = 1359\n\t\tv[527,10] = 1627\n\t\tv[528,10] = 1039\n\t\tv[529,10] = 1783\n\t\tv[530,10] = 1065\n\t\tv[531,10] = 1665\n\t\tv[532,10] = 1917\n\t\tv[533,10] = 1947\n\t\tv[534,10] = 991\n\t\tv[535,10] = 1997\n\t\tv[536,10] = 841\n\t\tv[537,10] = 459\n\t\tv[538,10] = 221\n\t\tv[539,10] = 327\n\t\tv[540,10] = 1595\n\t\tv[541,10] = 1881\n\t\tv[542,10] = 1269\n\t\tv[543,10] = 1007\n\t\tv[544,10] = 129\n\t\tv[545,10] = 1413\n\t\tv[546,10] = 475\n\t\tv[547,10] = 1105\n\t\tv[548,10] = 791\n\t\tv[549,10] = 1983\n\t\tv[550,10] = 1359\n\t\tv[551,10] = 503\n\t\tv[552,10] = 691\n\t\tv[553,10] = 659\n\t\tv[554,10] = 691\n\t\tv[555,10] = 343\n\t\tv[556,10] = 1375\n\t\tv[557,10] = 1919\n\t\tv[558,10] = 263\n\t\tv[559,10] = 1373\n\t\tv[560,10] = 603\n\t\tv[561,10] = 1383\n\t\tv[562,10] = 297\n\t\tv[563,10] = 781\n\t\tv[564,10] = 145\n\t\tv[565,10] = 285\n\t\tv[566,10] = 767\n\t\tv[567,10] = 1739\n\t\tv[568,10] = 1715\n\t\tv[569,10] = 715\n\t\tv[570,10] = 317\n\t\tv[571,10] = 1333\n\t\tv[572,10] = 85\n\t\tv[573,10] = 831\n\t\tv[574,10] = 1615\n\t\tv[575,10] = 81\n\t\tv[576,10] = 1667\n\t\tv[577,10] = 1467\n\t\tv[578,10] = 1457\n\t\tv[579,10] = 1453\n\t\tv[580,10] = 1825\n\t\tv[581,10] = 109\n\t\tv[582,10] = 387\n\t\tv[583,10] = 1207\n\t\tv[584,10] = 2039\n\t\tv[585,10] = 213\n\t\tv[586,10] = 1351\n\t\tv[587,10] = 1329\n\t\tv[588,10] = 1173\n\t\tv[589,10] = 57\n\t\tv[590,10] = 1769\n\t\tv[591,10] = 951\n\t\tv[592,10] = 183\n\t\tv[593,10] = 23\n\t\tv[594,10] = 451\n\t\tv[595,10] = 1155\n\t\tv[596,10] = 1551\n\t\tv[597,10] = 2037\n\t\tv[598,10] = 811\n\t\tv[599,10] = 635\n\t\tv[600,10] = 1671\n\t\tv[601,10] = 1451\n\t\tv[602,10] = 863\n\t\tv[603,10] = 1499\n\t\tv[604,10] = 1673\n\t\tv[605,10] = 363\n\t\tv[606,10] = 1029\n\t\tv[607,10] = 1077\n\t\tv[608,10] = 1525\n\t\tv[609,10] = 277\n\t\tv[610,10] = 1023\n\t\tv[611,10] = 655\n\t\tv[612,10] = 665\n\t\tv[613,10] = 1869\n\t\tv[614,10] = 1255\n\t\tv[615,10] = 965\n\t\tv[616,10] = 277\n\t\tv[617,10] = 1601\n\t\tv[618,10] = 329\n\t\tv[619,10] = 1603\n\t\tv[620,10] = 1901\n\t\tv[621,10] = 395\n\t\tv[622,10] = 65\n\t\tv[623,10] = 1307\n\t\tv[624,10] = 2029\n\t\tv[625,10] = 21\n\t\tv[626,10] = 1321\n\t\tv[627,10] = 543\n\t\tv[628,10] = 1569\n\t\tv[629,10] = 1185\n\t\tv[630,10] = 1905\n\t\tv[631,10] = 1701\n\t\tv[632,10] = 413\n\t\tv[633,10] = 2041\n\t\tv[634,10] = 1697\n\t\tv[635,10] = 725\n\t\tv[636,10] = 1417\n\t\tv[637,10] = 1847\n\t\tv[638,10] = 411\n\t\tv[639,10] = 211\n\t\tv[640,10] = 915\n\t\tv[641,10] = 1891\n\t\tv[642,10] = 17\n\t\tv[643,10] = 1877\n\t\tv[644,10] = 1699\n\t\tv[645,10] = 687\n\t\tv[646,10] = 1089\n\t\tv[647,10] = 1973\n\t\tv[648,10] = 1809\n\t\tv[649,10] = 851\n\t\tv[650,10] = 1495\n\t\tv[651,10] = 1257\n\t\tv[652,10] = 63\n\t\tv[653,10] = 1323\n\t\tv[654,10] = 1307\n\t\tv[655,10] = 609\n\t\tv[656,10] = 881\n\t\tv[657,10] = 1543\n\t\tv[658,10] = 177\n\t\tv[659,10] = 617\n\t\tv[660,10] = 1505\n\t\tv[661,10] = 1747\n\t\tv[662,10] = 1537\n\t\tv[663,10] = 925\n\t\tv[664,10] = 183\n\t\tv[665,10] = 77\n\t\tv[666,10] = 1723\n\t\tv[667,10] = 1877\n\t\tv[668,10] = 1703\n\t\tv[669,10] = 397\n\t\tv[670,10] = 459\n\t\tv[671,10] = 521\n\t\tv[672,10] = 257\n\t\tv[673,10] = 1177\n\t\tv[674,10] = 389\n\t\tv[675,10] = 1947\n\t\tv[676,10] = 1553\n\t\tv[677,10] = 1583\n\t\tv[678,10] = 1831\n\t\tv[679,10] = 261\n\t\tv[680,10] = 485\n\t\tv[681,10] = 289\n\t\tv[682,10] = 1281\n\t\tv[683,10] = 1543\n\t\tv[684,10] = 1591\n\t\tv[685,10] = 1123\n\t\tv[686,10] = 573\n\t\tv[687,10] = 821\n\t\tv[688,10] = 1065\n\t\tv[689,10] = 1933\n\t\tv[690,10] = 1373\n\t\tv[691,10] = 2005\n\t\tv[692,10] = 905\n\t\tv[693,10] = 207\n\t\tv[694,10] = 173\n\t\tv[695,10] = 1573\n\t\tv[696,10] = 1597\n\t\tv[697,10] = 573\n\t\tv[698,10] = 1883\n\t\tv[699,10] = 1795\n\t\tv[700,10] = 1499\n\t\tv[701,10] = 1743\n\t\tv[702,10] = 553\n\t\tv[703,10] = 335\n\t\tv[704,10] = 333\n\t\tv[705,10] = 1645\n\t\tv[706,10] = 791\n\t\tv[707,10] = 871\n\t\tv[708,10] = 1157\n\t\tv[709,10] = 969\n\t\tv[710,10] = 557\n\t\tv[711,10] = 141\n\t\tv[712,10] = 223\n\t\tv[713,10] = 1129\n\t\tv[714,10] = 1685\n\t\tv[715,10] = 423\n\t\tv[716,10] = 1069\n\t\tv[717,10] = 391\n\t\tv[718,10] = 99\n\t\tv[719,10] = 95\n\t\tv[720,10] = 1847\n\t\tv[721,10] = 531\n\t\tv[722,10] = 1859\n\t\tv[723,10] = 1833\n\t\tv[724,10] = 1833\n\t\tv[725,10] = 341\n\t\tv[726,10] = 237\n\t\tv[727,10] = 1997\n\t\tv[728,10] = 1799\n\t\tv[729,10] = 409\n\t\tv[730,10] = 431\n\t\tv[731,10] = 1917\n\t\tv[732,10] = 363\n\t\tv[733,10] = 335\n\t\tv[734,10] = 1039\n\t\tv[735,10] = 1085\n\t\tv[736,10] = 1657\n\t\tv[737,10] = 1975\n\t\tv[738,10] = 1527\n\t\tv[739,10] = 1111\n\t\tv[740,10] = 659\n\t\tv[741,10] = 389\n\t\tv[742,10] = 899\n\t\tv[743,10] = 595\n\t\tv[744,10] = 1439\n\t\tv[745,10] = 1861\n\t\tv[746,10] = 1979\n\t\tv[747,10] = 1569\n\t\tv[748,10] = 1087\n\t\tv[749,10] = 1009\n\t\tv[750,10] = 165\n\t\tv[751,10] = 1895\n\t\tv[752,10] = 1481\n\t\tv[753,10] = 1583\n\t\tv[754,10] = 29\n\t\tv[755,10] = 1193\n\t\tv[756,10] = 1673\n\t\tv[757,10] = 1075\n\t\tv[758,10] = 301\n\t\tv[759,10] = 1081\n\t\tv[760,10] = 1377\n\t\tv[761,10] = 1747\n\t\tv[762,10] = 1497\n\t\tv[763,10] = 1103\n\t\tv[764,10] = 1789\n\t\tv[765,10] = 887\n\t\tv[766,10] = 739\n\t\tv[767,10] = 1577\n\t\tv[768,10] = 313\n\t\tv[769,10] = 1367\n\t\tv[770,10] = 1299\n\t\tv[771,10] = 1801\n\t\tv[772,10] = 1131\n\t\tv[773,10] = 1837\n\t\tv[774,10] = 73\n\t\tv[775,10] = 1865\n\t\tv[776,10] = 1065\n\t\tv[777,10] = 843\n\t\tv[778,10] = 635\n\t\tv[779,10] = 55\n\t\tv[780,10] = 1655\n\t\tv[781,10] = 913\n\t\tv[782,10] = 1037\n\t\tv[783,10] = 223\n\t\tv[784,10] = 1871\n\t\tv[785,10] = 1161\n\t\tv[786,10] = 461\n\t\tv[787,10] = 479\n\t\tv[788,10] = 511\n\t\tv[789,10] = 1721\n\t\tv[790,10] = 1107\n\t\tv[791,10] = 389\n\t\tv[792,10] = 151\n\t\tv[793,10] = 35\n\t\tv[794,10] = 375\n\t\tv[795,10] = 1099\n\t\tv[796,10] = 937\n\t\tv[797,10] = 1185\n\t\tv[798,10] = 1701\n\t\tv[799,10] = 769\n\t\tv[800,10] = 639\n\t\tv[801,10] = 1633\n\t\tv[802,10] = 1609\n\t\tv[803,10] = 379\n\t\tv[804,10] = 1613\n\t\tv[805,10] = 2031\n\t\tv[806,10] = 685\n\t\tv[807,10] = 289\n\t\tv[808,10] = 975\n\t\tv[809,10] = 671\n\t\tv[810,10] = 1599\n\t\tv[811,10] = 1447\n\t\tv[812,10] = 871\n\t\tv[813,10] = 647\n\t\tv[814,10] = 99\n\t\tv[815,10] = 139\n\t\tv[816,10] = 1427\n\t\tv[817,10] = 959\n\t\tv[818,10] = 89\n\t\tv[819,10] = 117\n\t\tv[820,10] = 841\n\t\tv[821,10] = 891\n\t\tv[822,10] = 1959\n\t\tv[823,10] = 223\n\t\tv[824,10] = 1697\n\t\tv[825,10] = 1145\n\t\tv[826,10] = 499\n\t\tv[827,10] = 1435\n\t\tv[828,10] = 1809\n\t\tv[829,10] = 1413\n\t\tv[830,10] = 1445\n\t\tv[831,10] = 1675\n\t\tv[832,10] = 171\n\t\tv[833,10] = 1073\n\t\tv[834,10] = 1349\n\t\tv[835,10] = 1545\n\t\tv[836,10] = 2039\n\t\tv[837,10] = 1027\n\t\tv[838,10] = 1563\n\t\tv[839,10] = 859\n\t\tv[840,10] = 215\n\t\tv[841,10] = 1673\n\t\tv[842,10] = 1919\n\t\tv[843,10] = 1633\n\t\tv[844,10] = 779\n\t\tv[845,10] = 411\n\t\tv[846,10] = 1845\n\t\tv[847,10] = 1477\n\t\tv[848,10] = 1489\n\t\tv[849,10] = 447\n\t\tv[850,10] = 1545\n\t\tv[851,10] = 351\n\t\tv[852,10] = 1989\n\t\tv[853,10] = 495\n\t\tv[854,10] = 183\n\t\tv[855,10] = 1639\n\t\tv[856,10] = 1385\n\t\tv[857,10] = 1805\n\t\tv[858,10] = 1097\n\t\tv[859,10] = 1249\n\t\tv[860,10] = 1431\n\t\tv[861,10] = 1571\n\t\tv[862,10] = 591\n\t\tv[863,10] = 697\n\t\tv[864,10] = 1509\n\t\tv[865,10] = 709\n\t\tv[866,10] = 31\n\t\tv[867,10] = 1563\n\t\tv[868,10] = 165\n\t\tv[869,10] = 513\n\t\tv[870,10] = 1425\n\t\tv[871,10] = 1299\n\t\tv[872,10] = 1081\n\t\tv[873,10] = 145\n\t\tv[874,10] = 1841\n\t\tv[875,10] = 1211\n\t\tv[876,10] = 941\n\t\tv[877,10] = 609\n\t\tv[878,10] = 845\n\t\tv[879,10] = 1169\n\t\tv[880,10] = 1865\n\t\tv[881,10] = 1593\n\t\tv[882,10] = 347\n\t\tv[883,10] = 293\n\t\tv[884,10] = 1277\n\t\tv[885,10] = 157\n\t\tv[886,10] = 211\n\t\tv[887,10] = 93\n\t\tv[888,10] = 1679\n\t\tv[889,10] = 1799\n\t\tv[890,10] = 527\n\t\tv[891,10] = 41\n\t\tv[892,10] = 473\n\t\tv[893,10] = 563\n\t\tv[894,10] = 187\n\t\tv[895,10] = 1525\n\t\tv[896,10] = 575\n\t\tv[897,10] = 1579\n\t\tv[898,10] = 857\n\t\tv[899,10] = 703\n\t\tv[900,10] = 1211\n\t\tv[901,10] = 647\n\t\tv[902,10] = 709\n\t\tv[903,10] = 981\n\t\tv[904,10] = 285\n\t\tv[905,10] = 697\n\t\tv[906,10] = 163\n\t\tv[907,10] = 981\n\t\tv[908,10] = 153\n\t\tv[909,10] = 1515\n\t\tv[910,10] = 47\n\t\tv[911,10] = 1553\n\t\tv[912,10] = 599\n\t\tv[913,10] = 225\n\t\tv[914,10] = 1147\n\t\tv[915,10] = 381\n\t\tv[916,10] = 135\n\t\tv[917,10] = 821\n\t\tv[918,10] = 1965\n\t\tv[919,10] = 609\n\t\tv[920,10] = 1033\n\t\tv[921,10] = 983\n\t\tv[922,10] = 503\n\t\tv[923,10] = 1117\n\t\tv[924,10] = 327\n\t\tv[925,10] = 453\n\t\tv[926,10] = 2005\n\t\tv[927,10] = 1257\n\t\tv[928,10] = 343\n\t\tv[929,10] = 1649\n\t\tv[930,10] = 1199\n\t\tv[931,10] = 599\n\t\tv[932,10] = 1877\n\t\tv[933,10] = 569\n\t\tv[934,10] = 695\n\t\tv[935,10] = 1587\n\t\tv[936,10] = 1475\n\t\tv[937,10] = 187\n\t\tv[938,10] = 973\n\t\tv[939,10] = 233\n\t\tv[940,10] = 511\n\t\tv[941,10] = 51\n\t\tv[942,10] = 1083\n\t\tv[943,10] = 665\n\t\tv[944,10] = 1321\n\t\tv[945,10] = 531\n\t\tv[946,10] = 1875\n\t\tv[947,10] = 1939\n\t\tv[948,10] = 859\n\t\tv[949,10] = 1507\n\t\tv[950,10] = 1979\n\t\tv[951,10] = 1203\n\t\tv[952,10] = 1965\n\t\tv[953,10] = 737\n\t\tv[954,10] = 921\n\t\tv[955,10] = 1565\n\t\tv[956,10] = 1943\n\t\tv[957,10] = 819\n\t\tv[958,10] = 223\n\t\tv[959,10] = 365\n\t\tv[960,10] = 167\n\t\tv[961,10] = 1705\n\t\tv[962,10] = 413\n\t\tv[963,10] = 1577\n\t\tv[964,10] = 745\n\t\tv[965,10] = 1573\n\t\tv[966,10] = 655\n\t\tv[967,10] = 1633\n\t\tv[968,10] = 1003\n\t\tv[969,10] = 91\n\t\tv[970,10] = 1123\n\t\tv[971,10] = 477\n\t\tv[972,10] = 1741\n\t\tv[973,10] = 1663\n\t\tv[974,10] = 35\n\t\tv[975,10] = 715\n\t\tv[976,10] = 37\n\t\tv[977,10] = 1513\n\t\tv[978,10] = 815\n\t\tv[979,10] = 941\n\t\tv[980,10] = 1379\n\t\tv[981,10] = 263\n\t\tv[982,10] = 1831\n\t\tv[983,10] = 1735\n\t\tv[984,10] = 1111\n\t\tv[985,10] = 1449\n\t\tv[986,10] = 353\n\t\tv[987,10] = 1941\n\t\tv[988,10] = 1655\n\t\tv[989,10] = 1349\n\t\tv[990,10] = 877\n\t\tv[991,10] = 285\n\t\tv[992,10] = 1723\n\t\tv[993,10] = 125\n\t\tv[994,10] = 1753\n\t\tv[995,10] = 985\n\t\tv[996,10] = 723\n\t\tv[997,10] = 175\n\t\tv[998,10] = 439\n\t\tv[999,10] = 791\n\t\tv[1000,10] = 1051\n\t\tv[1001,10] = 1261\n\t\tv[1002,10] = 717\n\t\tv[1003,10] = 1555\n\t\tv[1004,10] = 1757\n\t\tv[1005,10] = 1777\n\t\tv[1006,10] = 577\n\t\tv[1007,10] = 1583\n\t\tv[1008,10] = 1957\n\t\tv[1009,10] = 873\n\t\tv[1010,10] = 331\n\t\tv[1011,10] = 1163\n\t\tv[1012,10] = 313\n\t\tv[1013,10] = 1\n\t\tv[1014,10] = 1963\n\t\tv[1015,10] = 963\n\t\tv[1016,10] = 1905\n\t\tv[1017,10] = 821\n\t\tv[1018,10] = 1677\n\t\tv[1019,10] = 185\n\t\tv[1020,10] = 709\n\t\tv[1021,10] = 545\n\t\tv[1022,10] = 1723\n\t\tv[1023,10] = 215\n\t\tv[1024,10] = 1885\n\t\tv[1025,10] = 1249\n\t\tv[1026,10] = 583\n\t\tv[1027,10] = 1803\n\t\tv[1028,10] = 839\n\t\tv[1029,10] = 885\n\t\tv[1030,10] = 485\n\t\tv[1031,10] = 413\n\t\tv[1032,10] = 1767\n\t\tv[1033,10] = 425\n\t\tv[1034,10] = 129\n\t\tv[1035,10] = 1035\n\t\tv[1036,10] = 329\n\t\tv[1037,10] = 1263\n\t\tv[1038,10] = 1881\n\t\tv[1039,10] = 1779\n\t\tv[1040,10] = 1565\n\t\tv[1041,10] = 359\n\t\tv[1042,10] = 367\n\t\tv[1043,10] = 453\n\t\tv[1044,10] = 707\n\t\tv[1045,10] = 1419\n\t\tv[1046,10] = 831\n\t\tv[1047,10] = 1889\n\t\tv[1048,10] = 887\n\t\tv[1049,10] = 1871\n\t\tv[1050,10] = 1869\n\t\tv[1051,10] = 747\n\t\tv[1052,10] = 223\n\t\tv[1053,10] = 1547\n\t\tv[1054,10] = 1799\n\t\tv[1055,10] = 433\n\t\tv[1056,10] = 1441\n\t\tv[1057,10] = 553\n\t\tv[1058,10] = 2021\n\t\tv[1059,10] = 1303\n\t\tv[1060,10] = 1505\n\t\tv[1061,10] = 1735\n\t\tv[1062,10] = 1619\n\t\tv[1063,10] = 1065\n\t\tv[1064,10] = 1161\n\t\tv[1065,10] = 2047\n\t\tv[1066,10] = 347\n\t\tv[1067,10] = 867\n\t\tv[1068,10] = 881\n\t\tv[1069,10] = 1447\n\t\tv[1070,10] = 329\n\t\tv[1071,10] = 781\n\t\tv[1072,10] = 1065\n\t\tv[1073,10] = 219\n\t\tv[1074,10] = 589\n\t\tv[1075,10] = 645\n\t\tv[1076,10] = 1257\n\t\tv[1077,10] = 1833\n\t\tv[1078,10] = 749\n\t\tv[1079,10] = 1841\n\t\tv[1080,10] = 1733\n\t\tv[1081,10] = 1179\n\t\tv[1082,10] = 1191\n\t\tv[1083,10] = 1025\n\t\tv[1084,10] = 1639\n\t\tv[1085,10] = 1955\n\t\tv[1086,10] = 1423\n\t\tv[1087,10] = 1685\n\t\tv[1088,10] = 1711\n\t\tv[1089,10] = 493\n\t\tv[1090,10] = 549\n\t\tv[1091,10] = 783\n\t\tv[1092,10] = 1653\n\t\tv[1093,10] = 397\n\t\tv[1094,10] = 895\n\t\tv[1095,10] = 233\n\t\tv[1096,10] = 759\n\t\tv[1097,10] = 1505\n\t\tv[1098,10] = 677\n\t\tv[1099,10] = 1449\n\t\tv[1100,10] = 1573\n\t\tv[1101,10] = 1297\n\t\tv[1102,10] = 1821\n\t\tv[1103,10] = 1691\n\t\tv[1104,10] = 791\n\t\tv[1105,10] = 289\n\t\tv[1106,10] = 1187\n\t\tv[1107,10] = 867\n\t\tv[1108,10] = 1535\n\t\tv[1109,10] = 575\n\t\tv[1110,10] = 183\n\n\t\tv[337,11] = 3915\n\t\tv[338,11] = 97\n\t\tv[339,11] = 3047\n\t\tv[340,11] = 937\n\t\tv[341,11] = 2897\n\t\tv[342,11] = 953\n\t\tv[343,11] = 127\n\t\tv[344,11] = 1201\n\t\tv[345,11] = 3819\n\t\tv[346,11] = 193\n\t\tv[347,11] = 2053\n\t\tv[348,11] = 3061\n\t\tv[349,11] = 3759\n\t\tv[350,11] = 1553\n\t\tv[351,11] = 2007\n\t\tv[352,11] = 2493\n\t\tv[353,11] = 603\n\t\tv[354,11] = 3343\n\t\tv[355,11] = 3751\n\t\tv[356,11] = 1059\n\t\tv[357,11] = 783\n\t\tv[358,11] = 1789\n\t\tv[359,11] = 1589\n\t\tv[360,11] = 283\n\t\tv[361,11] = 1093\n\t\tv[362,11] = 3919\n\t\tv[363,11] = 2747\n\t\tv[364,11] = 277\n\t\tv[365,11] = 2605\n\t\tv[366,11] = 2169\n\t\tv[367,11] = 2905\n\t\tv[368,11] = 721\n\t\tv[369,11] = 4069\n\t\tv[370,11] = 233\n\t\tv[371,11] = 261\n\t\tv[372,11] = 1137\n\t\tv[373,11] = 3993\n\t\tv[374,11] = 3619\n\t\tv[375,11] = 2881\n\t\tv[376,11] = 1275\n\t\tv[377,11] = 3865\n\t\tv[378,11] = 1299\n\t\tv[379,11] = 3757\n\t\tv[380,11] = 1193\n\t\tv[381,11] = 733\n\t\tv[382,11] = 993\n\t\tv[383,11] = 1153\n\t\tv[384,11] = 2945\n\t\tv[385,11] = 3163\n\t\tv[386,11] = 3179\n\t\tv[387,11] = 437\n\t\tv[388,11] = 271\n\t\tv[389,11] = 3493\n\t\tv[390,11] = 3971\n\t\tv[391,11] = 1005\n\t\tv[392,11] = 2615\n\t\tv[393,11] = 2253\n\t\tv[394,11] = 1131\n\t\tv[395,11] = 585\n\t\tv[396,11] = 2775\n\t\tv[397,11] = 2171\n\t\tv[398,11] = 2383\n\t\tv[399,11] = 2937\n\t\tv[400,11] = 2447\n\t\tv[401,11] = 1745\n\t\tv[402,11] = 663\n\t\tv[403,11] = 1515\n\t\tv[404,11] = 3767\n\t\tv[405,11] = 2709\n\t\tv[406,11] = 1767\n\t\tv[407,11] = 3185\n\t\tv[408,11] = 3017\n\t\tv[409,11] = 2815\n\t\tv[410,11] = 1829\n\t\tv[411,11] = 87\n\t\tv[412,11] = 3341\n\t\tv[413,11] = 793\n\t\tv[414,11] = 2627\n\t\tv[415,11] = 2169\n\t\tv[416,11] = 1875\n\t\tv[417,11] = 3745\n\t\tv[418,11] = 367\n\t\tv[419,11] = 3783\n\t\tv[420,11] = 783\n\t\tv[421,11] = 827\n\t\tv[422,11] = 3253\n\t\tv[423,11] = 2639\n\t\tv[424,11] = 2955\n\t\tv[425,11] = 3539\n\t\tv[426,11] = 1579\n\t\tv[427,11] = 2109\n\t\tv[428,11] = 379\n\t\tv[429,11] = 2939\n\t\tv[430,11] = 3019\n\t\tv[431,11] = 1999\n\t\tv[432,11] = 2253\n\t\tv[433,11] = 2911\n\t\tv[434,11] = 3733\n\t\tv[435,11] = 481\n\t\tv[436,11] = 1767\n\t\tv[437,11] = 1055\n\t\tv[438,11] = 4019\n\t\tv[439,11] = 4085\n\t\tv[440,11] = 105\n\t\tv[441,11] = 1829\n\t\tv[442,11] = 2097\n\t\tv[443,11] = 2379\n\t\tv[444,11] = 1567\n\t\tv[445,11] = 2713\n\t\tv[446,11] = 737\n\t\tv[447,11] = 3423\n\t\tv[448,11] = 3941\n\t\tv[449,11] = 2659\n\t\tv[450,11] = 3961\n\t\tv[451,11] = 1755\n\t\tv[452,11] = 3613\n\t\tv[453,11] = 1937\n\t\tv[454,11] = 1559\n\t\tv[455,11] = 2287\n\t\tv[456,11] = 2743\n\t\tv[457,11] = 67\n\t\tv[458,11] = 2859\n\t\tv[459,11] = 325\n\t\tv[460,11] = 2601\n\t\tv[461,11] = 1149\n\t\tv[462,11] = 3259\n\t\tv[463,11] = 2403\n\t\tv[464,11] = 3947\n\t\tv[465,11] = 2011\n\t\tv[466,11] = 175\n\t\tv[467,11] = 3389\n\t\tv[468,11] = 3915\n\t\tv[469,11] = 1315\n\t\tv[470,11] = 2447\n\t\tv[471,11] = 141\n\t\tv[472,11] = 359\n\t\tv[473,11] = 3609\n\t\tv[474,11] = 3933\n\t\tv[475,11] = 729\n\t\tv[476,11] = 2051\n\t\tv[477,11] = 1755\n\t\tv[478,11] = 2149\n\t\tv[479,11] = 2107\n\t\tv[480,11] = 1741\n\t\tv[481,11] = 1051\n\t\tv[482,11] = 3681\n\t\tv[483,11] = 471\n\t\tv[484,11] = 1055\n\t\tv[485,11] = 845\n\t\tv[486,11] = 257\n\t\tv[487,11] = 1559\n\t\tv[488,11] = 1061\n\t\tv[489,11] = 2803\n\t\tv[490,11] = 2219\n\t\tv[491,11] = 1315\n\t\tv[492,11] = 1369\n\t\tv[493,11] = 3211\n\t\tv[494,11] = 4027\n\t\tv[495,11] = 105\n\t\tv[496,11] = 11\n\t\tv[497,11] = 1077\n\t\tv[498,11] = 2857\n\t\tv[499,11] = 337\n\t\tv[500,11] = 3553\n\t\tv[501,11] = 3503\n\t\tv[502,11] = 3917\n\t\tv[503,11] = 2665\n\t\tv[504,11] = 3823\n\t\tv[505,11] = 3403\n\t\tv[506,11] = 3711\n\t\tv[507,11] = 2085\n\t\tv[508,11] = 1103\n\t\tv[509,11] = 1641\n\t\tv[510,11] = 701\n\t\tv[511,11] = 4095\n\t\tv[512,11] = 2883\n\t\tv[513,11] = 1435\n\t\tv[514,11] = 653\n\t\tv[515,11] = 2363\n\t\tv[516,11] = 1597\n\t\tv[517,11] = 767\n\t\tv[518,11] = 869\n\t\tv[519,11] = 1825\n\t\tv[520,11] = 1117\n\t\tv[521,11] = 1297\n\t\tv[522,11] = 501\n\t\tv[523,11] = 505\n\t\tv[524,11] = 149\n\t\tv[525,11] = 873\n\t\tv[526,11] = 2673\n\t\tv[527,11] = 551\n\t\tv[528,11] = 1499\n\t\tv[529,11] = 2793\n\t\tv[530,11] = 3277\n\t\tv[531,11] = 2143\n\t\tv[532,11] = 3663\n\t\tv[533,11] = 533\n\t\tv[534,11] = 3991\n\t\tv[535,11] = 575\n\t\tv[536,11] = 1877\n\t\tv[537,11] = 1009\n\t\tv[538,11] = 3929\n\t\tv[539,11] = 473\n\t\tv[540,11] = 3009\n\t\tv[541,11] = 2595\n\t\tv[542,11] = 3249\n\t\tv[543,11] = 675\n\t\tv[544,11] = 3593\n\t\tv[545,11] = 2453\n\t\tv[546,11] = 1567\n\t\tv[547,11] = 973\n\t\tv[548,11] = 595\n\t\tv[549,11] = 1335\n\t\tv[550,11] = 1715\n\t\tv[551,11] = 589\n\t\tv[552,11] = 85\n\t\tv[553,11] = 2265\n\t\tv[554,11] = 3069\n\t\tv[555,11] = 461\n\t\tv[556,11] = 1659\n\t\tv[557,11] = 2627\n\t\tv[558,11] = 1307\n\t\tv[559,11] = 1731\n\t\tv[560,11] = 1501\n\t\tv[561,11] = 1699\n\t\tv[562,11] = 3545\n\t\tv[563,11] = 3803\n\t\tv[564,11] = 2157\n\t\tv[565,11] = 453\n\t\tv[566,11] = 2813\n\t\tv[567,11] = 2047\n\t\tv[568,11] = 2999\n\t\tv[569,11] = 3841\n\t\tv[570,11] = 2361\n\t\tv[571,11] = 1079\n\t\tv[572,11] = 573\n\t\tv[573,11] = 69\n\t\tv[574,11] = 1363\n\t\tv[575,11] = 1597\n\t\tv[576,11] = 3427\n\t\tv[577,11] = 2899\n\t\tv[578,11] = 2771\n\t\tv[579,11] = 1327\n\t\tv[580,11] = 1117\n\t\tv[581,11] = 1523\n\t\tv[582,11] = 3521\n\t\tv[583,11] = 2393\n\t\tv[584,11] = 2537\n\t\tv[585,11] = 1979\n\t\tv[586,11] = 3179\n\t\tv[587,11] = 683\n\t\tv[588,11] = 2453\n\t\tv[589,11] = 453\n\t\tv[590,11] = 1227\n\t\tv[591,11] = 779\n\t\tv[592,11] = 671\n\t\tv[593,11] = 3483\n\t\tv[594,11] = 2135\n\t\tv[595,11] = 3139\n\t\tv[596,11] = 3381\n\t\tv[597,11] = 3945\n\t\tv[598,11] = 57\n\t\tv[599,11] = 1541\n\t\tv[600,11] = 3405\n\t\tv[601,11] = 3381\n\t\tv[602,11] = 2371\n\t\tv[603,11] = 2879\n\t\tv[604,11] = 1985\n\t\tv[605,11] = 987\n\t\tv[606,11] = 3017\n\t\tv[607,11] = 3031\n\t\tv[608,11] = 3839\n\t\tv[609,11] = 1401\n\t\tv[610,11] = 3749\n\t\tv[611,11] = 2977\n\t\tv[612,11] = 681\n\t\tv[613,11] = 1175\n\t\tv[614,11] = 1519\n\t\tv[615,11] = 3355\n\t\tv[616,11] = 907\n\t\tv[617,11] = 117\n\t\tv[618,11] = 771\n\t\tv[619,11] = 3741\n\t\tv[620,11] = 3337\n\t\tv[621,11] = 1743\n\t\tv[622,11] = 1227\n\t\tv[623,11] = 3335\n\t\tv[624,11] = 2755\n\t\tv[625,11] = 1909\n\t\tv[626,11] = 3603\n\t\tv[627,11] = 2397\n\t\tv[628,11] = 653\n\t\tv[629,11] = 87\n\t\tv[630,11] = 2025\n\t\tv[631,11] = 2617\n\t\tv[632,11] = 3257\n\t\tv[633,11] = 287\n\t\tv[634,11] = 3051\n\t\tv[635,11] = 3809\n\t\tv[636,11] = 897\n\t\tv[637,11] = 2215\n\t\tv[638,11] = 63\n\t\tv[639,11] = 2043\n\t\tv[640,11] = 1757\n\t\tv[641,11] = 3671\n\t\tv[642,11] = 297\n\t\tv[643,11] = 3131\n\t\tv[644,11] = 1305\n\t\tv[645,11] = 293\n\t\tv[646,11] = 3865\n\t\tv[647,11] = 3173\n\t\tv[648,11] = 3397\n\t\tv[649,11] = 2269\n\t\tv[650,11] = 3673\n\t\tv[651,11] = 717\n\t\tv[652,11] = 3041\n\t\tv[653,11] = 3341\n\t\tv[654,11] = 3595\n\t\tv[655,11] = 3819\n\t\tv[656,11] = 2871\n\t\tv[657,11] = 3973\n\t\tv[658,11] = 1129\n\t\tv[659,11] = 513\n\t\tv[660,11] = 871\n\t\tv[661,11] = 1485\n\t\tv[662,11] = 3977\n\t\tv[663,11] = 2473\n\t\tv[664,11] = 1171\n\t\tv[665,11] = 1143\n\t\tv[666,11] = 3063\n\t\tv[667,11] = 3547\n\t\tv[668,11] = 2183\n\t\tv[669,11] = 3993\n\t\tv[670,11] = 133\n\t\tv[671,11] = 2529\n\t\tv[672,11] = 2699\n\t\tv[673,11] = 233\n\t\tv[674,11] = 2355\n\t\tv[675,11] = 231\n\t\tv[676,11] = 3241\n\t\tv[677,11] = 611\n\t\tv[678,11] = 1309\n\t\tv[679,11] = 3829\n\t\tv[680,11] = 1839\n\t\tv[681,11] = 1495\n\t\tv[682,11] = 301\n\t\tv[683,11] = 1169\n\t\tv[684,11] = 1613\n\t\tv[685,11] = 2673\n\t\tv[686,11] = 243\n\t\tv[687,11] = 3601\n\t\tv[688,11] = 3669\n\t\tv[689,11] = 2813\n\t\tv[690,11] = 2671\n\t\tv[691,11] = 2679\n\t\tv[692,11] = 3463\n\t\tv[693,11] = 2477\n\t\tv[694,11] = 1795\n\t\tv[695,11] = 617\n\t\tv[696,11] = 2317\n\t\tv[697,11] = 1855\n\t\tv[698,11] = 1057\n\t\tv[699,11] = 1703\n\t\tv[700,11] = 1761\n\t\tv[701,11] = 2515\n\t\tv[702,11] = 801\n\t\tv[703,11] = 1205\n\t\tv[704,11] = 1311\n\t\tv[705,11] = 473\n\t\tv[706,11] = 3963\n\t\tv[707,11] = 697\n\t\tv[708,11] = 1221\n\t\tv[709,11] = 251\n\t\tv[710,11] = 381\n\t\tv[711,11] = 3887\n\t\tv[712,11] = 1761\n\t\tv[713,11] = 3093\n\t\tv[714,11] = 3721\n\t\tv[715,11] = 2079\n\t\tv[716,11] = 4085\n\t\tv[717,11] = 379\n\t\tv[718,11] = 3601\n\t\tv[719,11] = 3845\n\t\tv[720,11] = 433\n\t\tv[721,11] = 1781\n\t\tv[722,11] = 29\n\t\tv[723,11] = 1897\n\t\tv[724,11] = 1599\n\t\tv[725,11] = 2163\n\t\tv[726,11] = 75\n\t\tv[727,11] = 3475\n\t\tv[728,11] = 3957\n\t\tv[729,11] = 1641\n\t\tv[730,11] = 3911\n\t\tv[731,11] = 2959\n\t\tv[732,11] = 2833\n\t\tv[733,11] = 1279\n\t\tv[734,11] = 1099\n\t\tv[735,11] = 403\n\t\tv[736,11] = 799\n\t\tv[737,11] = 2183\n\t\tv[738,11] = 2699\n\t\tv[739,11] = 1711\n\t\tv[740,11] = 2037\n\t\tv[741,11] = 727\n\t\tv[742,11] = 289\n\t\tv[743,11] = 1785\n\t\tv[744,11] = 1575\n\t\tv[745,11] = 3633\n\t\tv[746,11] = 2367\n\t\tv[747,11] = 1261\n\t\tv[748,11] = 3953\n\t\tv[749,11] = 1735\n\t\tv[750,11] = 171\n\t\tv[751,11] = 1959\n\t\tv[752,11] = 2867\n\t\tv[753,11] = 859\n\t\tv[754,11] = 2951\n\t\tv[755,11] = 3211\n\t\tv[756,11] = 15\n\t\tv[757,11] = 1279\n\t\tv[758,11] = 1323\n\t\tv[759,11] = 599\n\t\tv[760,11] = 1651\n\t\tv[761,11] = 3951\n\t\tv[762,11] = 1011\n\t\tv[763,11] = 315\n\t\tv[764,11] = 3513\n\t\tv[765,11] = 3351\n\t\tv[766,11] = 1725\n\t\tv[767,11] = 3793\n\t\tv[768,11] = 2399\n\t\tv[769,11] = 287\n\t\tv[770,11] = 4017\n\t\tv[771,11] = 3571\n\t\tv[772,11] = 1007\n\t\tv[773,11] = 541\n\t\tv[774,11] = 3115\n\t\tv[775,11] = 429\n\t\tv[776,11] = 1585\n\t\tv[777,11] = 1285\n\t\tv[778,11] = 755\n\t\tv[779,11] = 1211\n\t\tv[780,11] = 3047\n\t\tv[781,11] = 915\n\t\tv[782,11] = 3611\n\t\tv[783,11] = 2697\n\t\tv[784,11] = 2129\n\t\tv[785,11] = 3669\n\t\tv[786,11] = 81\n\t\tv[787,11] = 3939\n\t\tv[788,11] = 2437\n\t\tv[789,11] = 915\n\t\tv[790,11] = 779\n\t\tv[791,11] = 3567\n\t\tv[792,11] = 3701\n\t\tv[793,11] = 2479\n\t\tv[794,11] = 3807\n\t\tv[795,11] = 1893\n\t\tv[796,11] = 3927\n\t\tv[797,11] = 2619\n\t\tv[798,11] = 2543\n\t\tv[799,11] = 3633\n\t\tv[800,11] = 2007\n\t\tv[801,11] = 3857\n\t\tv[802,11] = 3837\n\t\tv[803,11] = 487\n\t\tv[804,11] = 1769\n\t\tv[805,11] = 3759\n\t\tv[806,11] = 3105\n\t\tv[807,11] = 2727\n\t\tv[808,11] = 3155\n\t\tv[809,11] = 2479\n\t\tv[810,11] = 1341\n\t\tv[811,11] = 1657\n\t\tv[812,11] = 2767\n\t\tv[813,11] = 2541\n\t\tv[814,11] = 577\n\t\tv[815,11] = 2105\n\t\tv[816,11] = 799\n\t\tv[817,11] = 17\n\t\tv[818,11] = 2871\n\t\tv[819,11] = 3637\n\t\tv[820,11] = 953\n\t\tv[821,11] = 65\n\t\tv[822,11] = 69\n\t\tv[823,11] = 2897\n\t\tv[824,11] = 3841\n\t\tv[825,11] = 3559\n\t\tv[826,11] = 4067\n\t\tv[827,11] = 2335\n\t\tv[828,11] = 3409\n\t\tv[829,11] = 1087\n\t\tv[830,11] = 425\n\t\tv[831,11] = 2813\n\t\tv[832,11] = 1705\n\t\tv[833,11] = 1701\n\t\tv[834,11] = 1237\n\t\tv[835,11] = 821\n\t\tv[836,11] = 1375\n\t\tv[837,11] = 3673\n\t\tv[838,11] = 2693\n\t\tv[839,11] = 3925\n\t\tv[840,11] = 1541\n\t\tv[841,11] = 1871\n\t\tv[842,11] = 2285\n\t\tv[843,11] = 847\n\t\tv[844,11] = 4035\n\t\tv[845,11] = 1101\n\t\tv[846,11] = 2029\n\t\tv[847,11] = 855\n\t\tv[848,11] = 2733\n\t\tv[849,11] = 2503\n\t\tv[850,11] = 121\n\t\tv[851,11] = 2855\n\t\tv[852,11] = 1069\n\t\tv[853,11] = 3463\n\t\tv[854,11] = 3505\n\t\tv[855,11] = 1539\n\t\tv[856,11] = 607\n\t\tv[857,11] = 1349\n\t\tv[858,11] = 575\n\t\tv[859,11] = 2301\n\t\tv[860,11] = 2321\n\t\tv[861,11] = 1101\n\t\tv[862,11] = 333\n\t\tv[863,11] = 291\n\t\tv[864,11] = 2171\n\t\tv[865,11] = 4085\n\t\tv[866,11] = 2173\n\t\tv[867,11] = 2541\n\t\tv[868,11] = 1195\n\t\tv[869,11] = 925\n\t\tv[870,11] = 4039\n\t\tv[871,11] = 1379\n\t\tv[872,11] = 699\n\t\tv[873,11] = 1979\n\t\tv[874,11] = 275\n\t\tv[875,11] = 953\n\t\tv[876,11] = 1755\n\t\tv[877,11] = 1643\n\t\tv[878,11] = 325\n\t\tv[879,11] = 101\n\t\tv[880,11] = 2263\n\t\tv[881,11] = 3329\n\t\tv[882,11] = 3673\n\t\tv[883,11] = 3413\n\t\tv[884,11] = 1977\n\t\tv[885,11] = 2727\n\t\tv[886,11] = 2313\n\t\tv[887,11] = 1419\n\t\tv[888,11] = 887\n\t\tv[889,11] = 609\n\t\tv[890,11] = 2475\n\t\tv[891,11] = 591\n\t\tv[892,11] = 2613\n\t\tv[893,11] = 2081\n\t\tv[894,11] = 3805\n\t\tv[895,11] = 3435\n\t\tv[896,11] = 2409\n\t\tv[897,11] = 111\n\t\tv[898,11] = 3557\n\t\tv[899,11] = 3607\n\t\tv[900,11] = 903\n\t\tv[901,11] = 231\n\t\tv[902,11] = 3059\n\t\tv[903,11] = 473\n\t\tv[904,11] = 2959\n\t\tv[905,11] = 2925\n\t\tv[906,11] = 3861\n\t\tv[907,11] = 2043\n\t\tv[908,11] = 3887\n\t\tv[909,11] = 351\n\t\tv[910,11] = 2865\n\t\tv[911,11] = 369\n\t\tv[912,11] = 1377\n\t\tv[913,11] = 2639\n\t\tv[914,11] = 1261\n\t\tv[915,11] = 3625\n\t\tv[916,11] = 3279\n\t\tv[917,11] = 2201\n\t\tv[918,11] = 2949\n\t\tv[919,11] = 3049\n\t\tv[920,11] = 449\n\t\tv[921,11] = 1297\n\t\tv[922,11] = 897\n\t\tv[923,11] = 1891\n\t\tv[924,11] = 411\n\t\tv[925,11] = 2773\n\t\tv[926,11] = 749\n\t\tv[927,11] = 2753\n\t\tv[928,11] = 1825\n\t\tv[929,11] = 853\n\t\tv[930,11] = 2775\n\t\tv[931,11] = 3547\n\t\tv[932,11] = 3923\n\t\tv[933,11] = 3923\n\t\tv[934,11] = 987\n\t\tv[935,11] = 3723\n\t\tv[936,11] = 2189\n\t\tv[937,11] = 3877\n\t\tv[938,11] = 3577\n\t\tv[939,11] = 297\n\t\tv[940,11] = 2763\n\t\tv[941,11] = 1845\n\t\tv[942,11] = 3083\n\t\tv[943,11] = 2951\n\t\tv[944,11] = 483\n\t\tv[945,11] = 2169\n\t\tv[946,11] = 3985\n\t\tv[947,11] = 245\n\t\tv[948,11] = 3655\n\t\tv[949,11] = 3441\n\t\tv[950,11] = 1023\n\t\tv[951,11] = 235\n\t\tv[952,11] = 835\n\t\tv[953,11] = 3693\n\t\tv[954,11] = 3585\n\t\tv[955,11] = 327\n\t\tv[956,11] = 1003\n\t\tv[957,11] = 543\n\t\tv[958,11] = 3059\n\t\tv[959,11] = 2637\n\t\tv[960,11] = 2923\n\t\tv[961,11] = 87\n\t\tv[962,11] = 3617\n\t\tv[963,11] = 1031\n\t\tv[964,11] = 1043\n\t\tv[965,11] = 903\n\t\tv[966,11] = 2913\n\t\tv[967,11] = 2177\n\t\tv[968,11] = 2641\n\t\tv[969,11] = 3279\n\t\tv[970,11] = 389\n\t\tv[971,11] = 2009\n\t\tv[972,11] = 525\n\t\tv[973,11] = 4085\n\t\tv[974,11] = 3299\n\t\tv[975,11] = 987\n\t\tv[976,11] = 2409\n\t\tv[977,11] = 813\n\t\tv[978,11] = 2683\n\t\tv[979,11] = 373\n\t\tv[980,11] = 2695\n\t\tv[981,11] = 3775\n\t\tv[982,11] = 2375\n\t\tv[983,11] = 1119\n\t\tv[984,11] = 2791\n\t\tv[985,11] = 223\n\t\tv[986,11] = 325\n\t\tv[987,11] = 587\n\t\tv[988,11] = 1379\n\t\tv[989,11] = 2877\n\t\tv[990,11] = 2867\n\t\tv[991,11] = 3793\n\t\tv[992,11] = 655\n\t\tv[993,11] = 831\n\t\tv[994,11] = 3425\n\t\tv[995,11] = 1663\n\t\tv[996,11] = 1681\n\t\tv[997,11] = 2657\n\t\tv[998,11] = 1865\n\t\tv[999,11] = 3943\n\t\tv[1000,11] = 2977\n\t\tv[1001,11] = 1979\n\t\tv[1002,11] = 2271\n\t\tv[1003,11] = 3247\n\t\tv[1004,11] = 1267\n\t\tv[1005,11] = 1747\n\t\tv[1006,11] = 811\n\t\tv[1007,11] = 159\n\t\tv[1008,11] = 429\n\t\tv[1009,11] = 2001\n\t\tv[1010,11] = 1195\n\t\tv[1011,11] = 3065\n\t\tv[1012,11] = 553\n\t\tv[1013,11] = 1499\n\t\tv[1014,11] = 3529\n\t\tv[1015,11] = 1081\n\t\tv[1016,11] = 2877\n\t\tv[1017,11] = 3077\n\t\tv[1018,11] = 845\n\t\tv[1019,11] = 1793\n\t\tv[1020,11] = 2409\n\t\tv[1021,11] = 3995\n\t\tv[1022,11] = 2559\n\t\tv[1023,11] = 4081\n\t\tv[1024,11] = 1195\n\t\tv[1025,11] = 2955\n\t\tv[1026,11] = 1117\n\t\tv[1027,11] = 1409\n\t\tv[1028,11] = 785\n\t\tv[1029,11] = 287\n\t\tv[1030,11] = 1521\n\t\tv[1031,11] = 1607\n\t\tv[1032,11] = 85\n\t\tv[1033,11] = 3055\n\t\tv[1034,11] = 3123\n\t\tv[1035,11] = 2533\n\t\tv[1036,11] = 2329\n\t\tv[1037,11] = 3477\n\t\tv[1038,11] = 799\n\t\tv[1039,11] = 3683\n\t\tv[1040,11] = 3715\n\t\tv[1041,11] = 337\n\t\tv[1042,11] = 3139\n\t\tv[1043,11] = 3311\n\t\tv[1044,11] = 431\n\t\tv[1045,11] = 3511\n\t\tv[1046,11] = 2299\n\t\tv[1047,11] = 365\n\t\tv[1048,11] = 2941\n\t\tv[1049,11] = 3067\n\t\tv[1050,11] = 1331\n\t\tv[1051,11] = 1081\n\t\tv[1052,11] = 1097\n\t\tv[1053,11] = 2853\n\t\tv[1054,11] = 2299\n\t\tv[1055,11] = 495\n\t\tv[1056,11] = 1745\n\t\tv[1057,11] = 749\n\t\tv[1058,11] = 3819\n\t\tv[1059,11] = 619\n\t\tv[1060,11] = 1059\n\t\tv[1061,11] = 3559\n\t\tv[1062,11] = 183\n\t\tv[1063,11] = 3743\n\t\tv[1064,11] = 723\n\t\tv[1065,11] = 949\n\t\tv[1066,11] = 3501\n\t\tv[1067,11] = 733\n\t\tv[1068,11] = 2599\n\t\tv[1069,11] = 3983\n\t\tv[1070,11] = 3961\n\t\tv[1071,11] = 911\n\t\tv[1072,11] = 1899\n\t\tv[1073,11] = 985\n\t\tv[1074,11] = 2493\n\t\tv[1075,11] = 1795\n\t\tv[1076,11] = 653\n\t\tv[1077,11] = 157\n\t\tv[1078,11] = 433\n\t\tv[1079,11] = 2361\n\t\tv[1080,11] = 3093\n\t\tv[1081,11] = 3119\n\t\tv[1082,11] = 3679\n\t\tv[1083,11] = 2367\n\t\tv[1084,11] = 1701\n\t\tv[1085,11] = 1445\n\t\tv[1086,11] = 1321\n\t\tv[1087,11] = 2397\n\t\tv[1088,11] = 1241\n\t\tv[1089,11] = 3305\n\t\tv[1090,11] = 3985\n\t\tv[1091,11] = 2349\n\t\tv[1092,11] = 4067\n\t\tv[1093,11] = 3805\n\t\tv[1094,11] = 3073\n\t\tv[1095,11] = 2837\n\t\tv[1096,11] = 1567\n\t\tv[1097,11] = 3783\n\t\tv[1098,11] = 451\n\t\tv[1099,11] = 2441\n\t\tv[1100,11] = 1181\n\t\tv[1101,11] = 487\n\t\tv[1102,11] = 543\n\t\tv[1103,11] = 1201\n\t\tv[1104,11] = 3735\n\t\tv[1105,11] = 2517\n\t\tv[1106,11] = 733\n\t\tv[1107,11] = 1535\n\t\tv[1108,11] = 2175\n\t\tv[1109,11] = 3613\n\t\tv[1110,11] = 3019\n\n\t\tv[481,12] = 2319\n\t\tv[482,12] = 653\n\t\tv[483,12] = 1379\n\t\tv[484,12] = 1675\n\t\tv[485,12] = 1951\n\t\tv[486,12] = 7075\n\t\tv[487,12] = 2087\n\t\tv[488,12] = 7147\n\t\tv[489,12] = 1427\n\t\tv[490,12] = 893\n\t\tv[491,12] = 171\n\t\tv[492,12] = 2019\n\t\tv[493,12] = 7235\n\t\tv[494,12] = 5697\n\t\tv[495,12] = 3615\n\t\tv[496,12] = 1961\n\t\tv[497,12] = 7517\n\t\tv[498,12] = 6849\n\t\tv[499,12] = 2893\n\t\tv[500,12] = 1883\n\t\tv[501,12] = 2863\n\t\tv[502,12] = 2173\n\t\tv[503,12] = 4543\n\t\tv[504,12] = 73\n\t\tv[505,12] = 381\n\t\tv[506,12] = 3893\n\t\tv[507,12] = 6045\n\t\tv[508,12] = 1643\n\t\tv[509,12] = 7669\n\t\tv[510,12] = 1027\n\t\tv[511,12] = 1549\n\t\tv[512,12] = 3983\n\t\tv[513,12] = 1985\n\t\tv[514,12] = 6589\n\t\tv[515,12] = 7497\n\t\tv[516,12] = 2745\n\t\tv[517,12] = 2375\n\t\tv[518,12] = 7047\n\t\tv[519,12] = 1117\n\t\tv[520,12] = 1171\n\t\tv[521,12] = 1975\n\t\tv[522,12] = 5199\n\t\tv[523,12] = 3915\n\t\tv[524,12] = 3695\n\t\tv[525,12] = 8113\n\t\tv[526,12] = 4303\n\t\tv[527,12] = 3773\n\t\tv[528,12] = 7705\n\t\tv[529,12] = 6855\n\t\tv[530,12] = 1675\n\t\tv[531,12] = 2245\n\t\tv[532,12] = 2817\n\t\tv[533,12] = 1719\n\t\tv[534,12] = 569\n\t\tv[535,12] = 1021\n\t\tv[536,12] = 2077\n\t\tv[537,12] = 5945\n\t\tv[538,12] = 1833\n\t\tv[539,12] = 2631\n\t\tv[540,12] = 4851\n\t\tv[541,12] = 6371\n\t\tv[542,12] = 833\n\t\tv[543,12] = 7987\n\t\tv[544,12] = 331\n\t\tv[545,12] = 1899\n\t\tv[546,12] = 8093\n\t\tv[547,12] = 6719\n\t\tv[548,12] = 6903\n\t\tv[549,12] = 5903\n\t\tv[550,12] = 5657\n\t\tv[551,12] = 5007\n\t\tv[552,12] = 2689\n\t\tv[553,12] = 6637\n\t\tv[554,12] = 2675\n\t\tv[555,12] = 1645\n\t\tv[556,12] = 1819\n\t\tv[557,12] = 689\n\t\tv[558,12] = 6709\n\t\tv[559,12] = 7717\n\t\tv[560,12] = 6295\n\t\tv[561,12] = 7013\n\t\tv[562,12] = 7695\n\t\tv[563,12] = 3705\n\t\tv[564,12] = 7069\n\t\tv[565,12] = 2621\n\t\tv[566,12] = 3631\n\t\tv[567,12] = 6571\n\t\tv[568,12] = 6259\n\t\tv[569,12] = 7261\n\t\tv[570,12] = 3397\n\t\tv[571,12] = 7645\n\t\tv[572,12] = 1115\n\t\tv[573,12] = 4753\n\t\tv[574,12] = 2047\n\t\tv[575,12] = 7579\n\t\tv[576,12] = 2271\n\t\tv[577,12] = 5403\n\t\tv[578,12] = 4911\n\t\tv[579,12] = 7629\n\t\tv[580,12] = 4225\n\t\tv[581,12] = 1209\n\t\tv[582,12] = 6955\n\t\tv[583,12] = 6951\n\t\tv[584,12] = 1829\n\t\tv[585,12] = 5579\n\t\tv[586,12] = 5231\n\t\tv[587,12] = 1783\n\t\tv[588,12] = 4285\n\t\tv[589,12] = 7425\n\t\tv[590,12] = 599\n\t\tv[591,12] = 5785\n\t\tv[592,12] = 3275\n\t\tv[593,12] = 5643\n\t\tv[594,12] = 2263\n\t\tv[595,12] = 657\n\t\tv[596,12] = 6769\n\t\tv[597,12] = 6261\n\t\tv[598,12] = 1251\n\t\tv[599,12] = 3249\n\t\tv[600,12] = 4447\n\t\tv[601,12] = 4111\n\t\tv[602,12] = 3991\n\t\tv[603,12] = 1215\n\t\tv[604,12] = 131\n\t\tv[605,12] = 4397\n\t\tv[606,12] = 3487\n\t\tv[607,12] = 7585\n\t\tv[608,12] = 5565\n\t\tv[609,12] = 7199\n\t\tv[610,12] = 3573\n\t\tv[611,12] = 7105\n\t\tv[612,12] = 7409\n\t\tv[613,12] = 1671\n\t\tv[614,12] = 949\n\t\tv[615,12] = 3889\n\t\tv[616,12] = 5971\n\t\tv[617,12] = 3333\n\t\tv[618,12] = 225\n\t\tv[619,12] = 3647\n\t\tv[620,12] = 5403\n\t\tv[621,12] = 3409\n\t\tv[622,12] = 7459\n\t\tv[623,12] = 6879\n\t\tv[624,12] = 5789\n\t\tv[625,12] = 6567\n\t\tv[626,12] = 5581\n\t\tv[627,12] = 4919\n\t\tv[628,12] = 1927\n\t\tv[629,12] = 4407\n\t\tv[630,12] = 8085\n\t\tv[631,12] = 4691\n\t\tv[632,12] = 611\n\t\tv[633,12] = 3005\n\t\tv[634,12] = 591\n\t\tv[635,12] = 753\n\t\tv[636,12] = 589\n\t\tv[637,12] = 171\n\t\tv[638,12] = 5729\n\t\tv[639,12] = 5891\n\t\tv[640,12] = 1033\n\t\tv[641,12] = 3049\n\t\tv[642,12] = 6567\n\t\tv[643,12] = 5257\n\t\tv[644,12] = 8003\n\t\tv[645,12] = 1757\n\t\tv[646,12] = 4489\n\t\tv[647,12] = 4923\n\t\tv[648,12] = 6379\n\t\tv[649,12] = 5171\n\t\tv[650,12] = 1757\n\t\tv[651,12] = 689\n\t\tv[652,12] = 3081\n\t\tv[653,12] = 1389\n\t\tv[654,12] = 4113\n\t\tv[655,12] = 455\n\t\tv[656,12] = 2761\n\t\tv[657,12] = 847\n\t\tv[658,12] = 7575\n\t\tv[659,12] = 5829\n\t\tv[660,12] = 633\n\t\tv[661,12] = 6629\n\t\tv[662,12] = 1103\n\t\tv[663,12] = 7635\n\t\tv[664,12] = 803\n\t\tv[665,12] = 6175\n\t\tv[666,12] = 6587\n\t\tv[667,12] = 2711\n\t\tv[668,12] = 3879\n\t\tv[669,12] = 67\n\t\tv[670,12] = 1179\n\t\tv[671,12] = 4761\n\t\tv[672,12] = 7281\n\t\tv[673,12] = 1557\n\t\tv[674,12] = 3379\n\t\tv[675,12] = 2459\n\t\tv[676,12] = 4273\n\t\tv[677,12] = 4127\n\t\tv[678,12] = 7147\n\t\tv[679,12] = 35\n\t\tv[680,12] = 3549\n\t\tv[681,12] = 395\n\t\tv[682,12] = 3735\n\t\tv[683,12] = 5787\n\t\tv[684,12] = 4179\n\t\tv[685,12] = 5889\n\t\tv[686,12] = 5057\n\t\tv[687,12] = 7473\n\t\tv[688,12] = 4713\n\t\tv[689,12] = 2133\n\t\tv[690,12] = 2897\n\t\tv[691,12] = 1841\n\t\tv[692,12] = 2125\n\t\tv[693,12] = 1029\n\t\tv[694,12] = 1695\n\t\tv[695,12] = 6523\n\t\tv[696,12] = 1143\n\t\tv[697,12] = 5105\n\t\tv[698,12] = 7133\n\t\tv[699,12] = 3351\n\t\tv[700,12] = 2775\n\t\tv[701,12] = 3971\n\t\tv[702,12] = 4503\n\t\tv[703,12] = 7589\n\t\tv[704,12] = 5155\n\t\tv[705,12] = 4305\n\t\tv[706,12] = 1641\n\t\tv[707,12] = 4717\n\t\tv[708,12] = 2427\n\t\tv[709,12] = 5617\n\t\tv[710,12] = 1267\n\t\tv[711,12] = 399\n\t\tv[712,12] = 5831\n\t\tv[713,12] = 4305\n\t\tv[714,12] = 4241\n\t\tv[715,12] = 3395\n\t\tv[716,12] = 3045\n\t\tv[717,12] = 4899\n\t\tv[718,12] = 1713\n\t\tv[719,12] = 171\n\t\tv[720,12] = 411\n\t\tv[721,12] = 7099\n\t\tv[722,12] = 5473\n\t\tv[723,12] = 5209\n\t\tv[724,12] = 1195\n\t\tv[725,12] = 1077\n\t\tv[726,12] = 1309\n\t\tv[727,12] = 2953\n\t\tv[728,12] = 7343\n\t\tv[729,12] = 4887\n\t\tv[730,12] = 3229\n\t\tv[731,12] = 6759\n\t\tv[732,12] = 6721\n\t\tv[733,12] = 6775\n\t\tv[734,12] = 675\n\t\tv[735,12] = 4039\n\t\tv[736,12] = 2493\n\t\tv[737,12] = 7511\n\t\tv[738,12] = 3269\n\t\tv[739,12] = 4199\n\t\tv[740,12] = 6625\n\t\tv[741,12] = 7943\n\t\tv[742,12] = 2013\n\t\tv[743,12] = 4145\n\t\tv[744,12] = 667\n\t\tv[745,12] = 513\n\t\tv[746,12] = 2303\n\t\tv[747,12] = 4591\n\t\tv[748,12] = 7941\n\t\tv[749,12] = 2741\n\t\tv[750,12] = 987\n\t\tv[751,12] = 8061\n\t\tv[752,12] = 3161\n\t\tv[753,12] = 5951\n\t\tv[754,12] = 1431\n\t\tv[755,12] = 831\n\t\tv[756,12] = 5559\n\t\tv[757,12] = 7405\n\t\tv[758,12] = 1357\n\t\tv[759,12] = 4319\n\t\tv[760,12] = 4235\n\t\tv[761,12] = 5421\n\t\tv[762,12] = 2559\n\t\tv[763,12] = 4415\n\t\tv[764,12] = 2439\n\t\tv[765,12] = 823\n\t\tv[766,12] = 1725\n\t\tv[767,12] = 6219\n\t\tv[768,12] = 4903\n\t\tv[769,12] = 6699\n\t\tv[770,12] = 5451\n\t\tv[771,12] = 349\n\t\tv[772,12] = 7703\n\t\tv[773,12] = 2927\n\t\tv[774,12] = 7809\n\t\tv[775,12] = 6179\n\t\tv[776,12] = 1417\n\t\tv[777,12] = 5987\n\t\tv[778,12] = 3017\n\t\tv[779,12] = 4983\n\t\tv[780,12] = 3479\n\t\tv[781,12] = 4525\n\t\tv[782,12] = 4643\n\t\tv[783,12] = 4911\n\t\tv[784,12] = 227\n\t\tv[785,12] = 5475\n\t\tv[786,12] = 2287\n\t\tv[787,12] = 5581\n\t\tv[788,12] = 6817\n\t\tv[789,12] = 1937\n\t\tv[790,12] = 1421\n\t\tv[791,12] = 4415\n\t\tv[792,12] = 7977\n\t\tv[793,12] = 1789\n\t\tv[794,12] = 3907\n\t\tv[795,12] = 6815\n\t\tv[796,12] = 6789\n\t\tv[797,12] = 6003\n\t\tv[798,12] = 5609\n\t\tv[799,12] = 4507\n\t\tv[800,12] = 337\n\t\tv[801,12] = 7427\n\t\tv[802,12] = 7943\n\t\tv[803,12] = 3075\n\t\tv[804,12] = 6427\n\t\tv[805,12] = 1019\n\t\tv[806,12] = 7121\n\t\tv[807,12] = 4763\n\t\tv[808,12] = 81\n\t\tv[809,12] = 3587\n\t\tv[810,12] = 2929\n\t\tv[811,12] = 1795\n\t\tv[812,12] = 8067\n\t\tv[813,12] = 2415\n\t\tv[814,12] = 1265\n\t\tv[815,12] = 4025\n\t\tv[816,12] = 5599\n\t\tv[817,12] = 4771\n\t\tv[818,12] = 3025\n\t\tv[819,12] = 2313\n\t\tv[820,12] = 6129\n\t\tv[821,12] = 7611\n\t\tv[822,12] = 6881\n\t\tv[823,12] = 5253\n\t\tv[824,12] = 4413\n\t\tv[825,12] = 7869\n\t\tv[826,12] = 105\n\t\tv[827,12] = 3173\n\t\tv[828,12] = 1629\n\t\tv[829,12] = 2537\n\t\tv[830,12] = 1023\n\t\tv[831,12] = 4409\n\t\tv[832,12] = 7209\n\t\tv[833,12] = 4413\n\t\tv[834,12] = 7107\n\t\tv[835,12] = 7469\n\t\tv[836,12] = 33\n\t\tv[837,12] = 1955\n\t\tv[838,12] = 2881\n\t\tv[839,12] = 5167\n\t\tv[840,12] = 6451\n\t\tv[841,12] = 4211\n\t\tv[842,12] = 179\n\t\tv[843,12] = 5573\n\t\tv[844,12] = 7879\n\t\tv[845,12] = 3387\n\t\tv[846,12] = 7759\n\t\tv[847,12] = 5455\n\t\tv[848,12] = 7157\n\t\tv[849,12] = 1891\n\t\tv[850,12] = 5683\n\t\tv[851,12] = 5689\n\t\tv[852,12] = 6535\n\t\tv[853,12] = 3109\n\t\tv[854,12] = 6555\n\t\tv[855,12] = 6873\n\t\tv[856,12] = 1249\n\t\tv[857,12] = 4251\n\t\tv[858,12] = 6437\n\t\tv[859,12] = 49\n\t\tv[860,12] = 2745\n\t\tv[861,12] = 1201\n\t\tv[862,12] = 7327\n\t\tv[863,12] = 4179\n\t\tv[864,12] = 6783\n\t\tv[865,12] = 623\n\t\tv[866,12] = 2779\n\t\tv[867,12] = 5963\n\t\tv[868,12] = 2585\n\t\tv[869,12] = 6927\n\t\tv[870,12] = 5333\n\t\tv[871,12] = 4033\n\t\tv[872,12] = 285\n\t\tv[873,12] = 7467\n\t\tv[874,12] = 4443\n\t\tv[875,12] = 4917\n\t\tv[876,12] = 3\n\t\tv[877,12] = 4319\n\t\tv[878,12] = 5517\n\t\tv[879,12] = 3449\n\t\tv[880,12] = 813\n\t\tv[881,12] = 5499\n\t\tv[882,12] = 2515\n\t\tv[883,12] = 5771\n\t\tv[884,12] = 3357\n\t\tv[885,12] = 2073\n\t\tv[886,12] = 4395\n\t\tv[887,12] = 4925\n\t\tv[888,12] = 2643\n\t\tv[889,12] = 7215\n\t\tv[890,12] = 5817\n\t\tv[891,12] = 1199\n\t\tv[892,12] = 1597\n\t\tv[893,12] = 1619\n\t\tv[894,12] = 7535\n\t\tv[895,12] = 4833\n\t\tv[896,12] = 609\n\t\tv[897,12] = 4797\n\t\tv[898,12] = 8171\n\t\tv[899,12] = 6847\n\t\tv[900,12] = 793\n\t\tv[901,12] = 6757\n\t\tv[902,12] = 8165\n\t\tv[903,12] = 3371\n\t\tv[904,12] = 2431\n\t\tv[905,12] = 5235\n\t\tv[906,12] = 4739\n\t\tv[907,12] = 7703\n\t\tv[908,12] = 7223\n\t\tv[909,12] = 6525\n\t\tv[910,12] = 5891\n\t\tv[911,12] = 5605\n\t\tv[912,12] = 4433\n\t\tv[913,12] = 3533\n\t\tv[914,12] = 5267\n\t\tv[915,12] = 5125\n\t\tv[916,12] = 5037\n\t\tv[917,12] = 225\n\t\tv[918,12] = 6717\n\t\tv[919,12] = 1121\n\t\tv[920,12] = 5741\n\t\tv[921,12] = 2013\n\t\tv[922,12] = 4327\n\t\tv[923,12] = 4839\n\t\tv[924,12] = 569\n\t\tv[925,12] = 5227\n\t\tv[926,12] = 7677\n\t\tv[927,12] = 4315\n\t\tv[928,12] = 2391\n\t\tv[929,12] = 5551\n\t\tv[930,12] = 859\n\t\tv[931,12] = 3627\n\t\tv[932,12] = 6377\n\t\tv[933,12] = 3903\n\t\tv[934,12] = 4311\n\t\tv[935,12] = 6527\n\t\tv[936,12] = 7573\n\t\tv[937,12] = 4905\n\t\tv[938,12] = 7731\n\t\tv[939,12] = 1909\n\t\tv[940,12] = 1555\n\t\tv[941,12] = 3279\n\t\tv[942,12] = 1949\n\t\tv[943,12] = 1887\n\t\tv[944,12] = 6675\n\t\tv[945,12] = 5509\n\t\tv[946,12] = 2033\n\t\tv[947,12] = 5473\n\t\tv[948,12] = 3539\n\t\tv[949,12] = 5033\n\t\tv[950,12] = 5935\n\t\tv[951,12] = 6095\n\t\tv[952,12] = 4761\n\t\tv[953,12] = 1771\n\t\tv[954,12] = 1271\n\t\tv[955,12] = 1717\n\t\tv[956,12] = 4415\n\t\tv[957,12] = 5083\n\t\tv[958,12] = 6277\n\t\tv[959,12] = 3147\n\t\tv[960,12] = 7695\n\t\tv[961,12] = 2461\n\t\tv[962,12] = 4783\n\t\tv[963,12] = 4539\n\t\tv[964,12] = 5833\n\t\tv[965,12] = 5583\n\t\tv[966,12] = 651\n\t\tv[967,12] = 1419\n\t\tv[968,12] = 2605\n\t\tv[969,12] = 5511\n\t\tv[970,12] = 3913\n\t\tv[971,12] = 5795\n\t\tv[972,12] = 2333\n\t\tv[973,12] = 2329\n\t\tv[974,12] = 4431\n\t\tv[975,12] = 3725\n\t\tv[976,12] = 6069\n\t\tv[977,12] = 2699\n\t\tv[978,12] = 7055\n\t\tv[979,12] = 6879\n\t\tv[980,12] = 1017\n\t\tv[981,12] = 3121\n\t\tv[982,12] = 2547\n\t\tv[983,12] = 4603\n\t\tv[984,12] = 2385\n\t\tv[985,12] = 6915\n\t\tv[986,12] = 6103\n\t\tv[987,12] = 5669\n\t\tv[988,12] = 7833\n\t\tv[989,12] = 2001\n\t\tv[990,12] = 4287\n\t\tv[991,12] = 6619\n\t\tv[992,12] = 955\n\t\tv[993,12] = 2761\n\t\tv[994,12] = 5711\n\t\tv[995,12] = 6291\n\t\tv[996,12] = 3415\n\t\tv[997,12] = 3909\n\t\tv[998,12] = 2841\n\t\tv[999,12] = 5627\n\t\tv[1000,12] = 4939\n\t\tv[1001,12] = 7671\n\t\tv[1002,12] = 6059\n\t\tv[1003,12] = 6275\n\t\tv[1004,12] = 6517\n\t\tv[1005,12] = 1931\n\t\tv[1006,12] = 4583\n\t\tv[1007,12] = 7301\n\t\tv[1008,12] = 1267\n\t\tv[1009,12] = 7509\n\t\tv[1010,12] = 1435\n\t\tv[1011,12] = 2169\n\t\tv[1012,12] = 6939\n\t\tv[1013,12] = 3515\n\t\tv[1014,12] = 2985\n\t\tv[1015,12] = 2787\n\t\tv[1016,12] = 2123\n\t\tv[1017,12] = 1969\n\t\tv[1018,12] = 3307\n\t\tv[1019,12] = 353\n\t\tv[1020,12] = 4359\n\t\tv[1021,12] = 7059\n\t\tv[1022,12] = 5273\n\t\tv[1023,12] = 5873\n\t\tv[1024,12] = 6657\n\t\tv[1025,12] = 6765\n\t\tv[1026,12] = 6229\n\t\tv[1027,12] = 3179\n\t\tv[1028,12] = 1583\n\t\tv[1029,12] = 6237\n\t\tv[1030,12] = 2155\n\t\tv[1031,12] = 371\n\t\tv[1032,12] = 273\n\t\tv[1033,12] = 7491\n\t\tv[1034,12] = 3309\n\t\tv[1035,12] = 6805\n\t\tv[1036,12] = 3015\n\t\tv[1037,12] = 6831\n\t\tv[1038,12] = 7819\n\t\tv[1039,12] = 713\n\t\tv[1040,12] = 4747\n\t\tv[1041,12] = 3935\n\t\tv[1042,12] = 4109\n\t\tv[1043,12] = 1311\n\t\tv[1044,12] = 709\n\t\tv[1045,12] = 3089\n\t\tv[1046,12] = 7059\n\t\tv[1047,12] = 4247\n\t\tv[1048,12] = 2989\n\t\tv[1049,12] = 1509\n\t\tv[1050,12] = 4919\n\t\tv[1051,12] = 1841\n\t\tv[1052,12] = 3045\n\t\tv[1053,12] = 3821\n\t\tv[1054,12] = 6929\n\t\tv[1055,12] = 4655\n\t\tv[1056,12] = 1333\n\t\tv[1057,12] = 6429\n\t\tv[1058,12] = 6649\n\t\tv[1059,12] = 2131\n\t\tv[1060,12] = 5265\n\t\tv[1061,12] = 1051\n\t\tv[1062,12] = 261\n\t\tv[1063,12] = 8057\n\t\tv[1064,12] = 3379\n\t\tv[1065,12] = 2179\n\t\tv[1066,12] = 1993\n\t\tv[1067,12] = 5655\n\t\tv[1068,12] = 3063\n\t\tv[1069,12] = 6381\n\t\tv[1070,12] = 3587\n\t\tv[1071,12] = 7417\n\t\tv[1072,12] = 1579\n\t\tv[1073,12] = 1541\n\t\tv[1074,12] = 2107\n\t\tv[1075,12] = 5085\n\t\tv[1076,12] = 2873\n\t\tv[1077,12] = 6141\n\t\tv[1078,12] = 955\n\t\tv[1079,12] = 3537\n\t\tv[1080,12] = 2157\n\t\tv[1081,12] = 841\n\t\tv[1082,12] = 1999\n\t\tv[1083,12] = 1465\n\t\tv[1084,12] = 5171\n\t\tv[1085,12] = 5651\n\t\tv[1086,12] = 1535\n\t\tv[1087,12] = 7235\n\t\tv[1088,12] = 4349\n\t\tv[1089,12] = 1263\n\t\tv[1090,12] = 1453\n\t\tv[1091,12] = 1005\n\t\tv[1092,12] = 6893\n\t\tv[1093,12] = 2919\n\t\tv[1094,12] = 1947\n\t\tv[1095,12] = 1635\n\t\tv[1096,12] = 3963\n\t\tv[1097,12] = 397\n\t\tv[1098,12] = 969\n\t\tv[1099,12] = 4569\n\t\tv[1100,12] = 655\n\t\tv[1101,12] = 6737\n\t\tv[1102,12] = 2995\n\t\tv[1103,12] = 7235\n\t\tv[1104,12] = 7713\n\t\tv[1105,12] = 973\n\t\tv[1106,12] = 4821\n\t\tv[1107,12] = 2377\n\t\tv[1108,12] = 1673\n\t\tv[1109,12] = 1\n\t\tv[1110,12] = 6541\n\n# \t\tv[0:40,0] = transpose([ \\\n# \t\t\t1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \\\n# \t\t\t1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \\\n# \t\t\t1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \\\n# \t\t\t1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ])\n\n# \t\tv[2:40,1] = transpose([ \\\n# \t\t\t1, 3, 1, 3, 1, 3, 3, 1, \\\n# \t\t\t3, 1, 3, 1, 3, 1, 1, 3, 1, 3, \\\n# \t\t\t1, 3, 1, 3, 3, 1, 3, 1, 3, 1, \\\n# \t\t\t3, 1, 1, 3, 1, 3, 1, 3, 1, 3 ])\n\n# \t\tv[3:40,2] = transpose([ \\\n# \t\t\t7, 5, 1, 3, 3, 7, 5, \\\n# \t\t\t5, 7, 7, 1, 3, 3, 7, 5, 1, 1, \\\n# \t\t\t5, 3, 3, 1, 7, 5, 1, 3, 3, 7, \\\n# \t\t\t5, 1, 1, 5, 7, 7, 5, 1, 3, 3 ])\n\n# \t\tv[5:40,3] = transpose([ \\\n# \t\t\t1, 7, 9,13,11, \\\n# \t\t\t1, 3, 7, 9, 5,13,13,11, 3,15, \\\n# \t\t\t5, 3,15, 7, 9,13, 9, 1,11, 7, \\\n# \t\t\t5,15, 1,15,11, 5, 3, 1, 7, 9 ])\n\t\n# \t\tv[7:40,4] = transpose([ \\\n# \t\t\t9, 3,27, \\\n# \t\t\t15,29,21,23,19,11,25, 7,13,17, \\\n# \t\t\t1,25,29, 3,31,11, 5,23,27,19, \\\n# \t\t\t21, 5, 1,17,13, 7,15, 9,31, 9 ])\n\n# \t\tv[13:40,5] = transpose([ \\\n# \t\t\t\t\t\t\t37,33, 7, 5,11,39,63, \\\n# \t\t 27,17,15,23,29, 3,21,13,31,25, \\\n# \t\t\t9,49,33,19,29,11,19,27,15,25 ])\n\n# \t\tv[19:40,6] = transpose([ \\\n# \t\t\t13, \\\n# \t\t\t33,115, 41, 79, 17, 29,119, 75, 73,105, \\\n# \t\t\t7, 59, 65, 21,\t3,113, 61, 89, 45,107 ])\n\n# \t\tv[37:40,7] = transpose([ \\\n# \t\t\t7, 23, 39 ])\n#\n#\tSet POLY.\n#\n\t\tpoly= [ \\\n\t\t\t1,\t 3,\t 7,\t11,\t13,\t19,\t25,\t37,\t59,\t47, \\\n\t\t\t61,\t55,\t41,\t67,\t97,\t91, 109, 103, 115, 131, \\\n\t\t\t193, 137, 145, 143, 241, 157, 185, 167, 229, 171, \\\n\t\t\t213, 191, 253, 203, 211, 239, 247, 285, 369, 299 ]\n\n\t\tpoly = [\\\n\t\t\t1,    3,    7,   11,   13,   19,   25,   37,   59,   47,\n\t\t\t61,   55,   41,   67,   97,   91,  109,  103,  115,  131,\n\t\t\t193,  137,  145,  143,  241,  157,  185,  167,  229,  171,\n\t\t\t213,  191,  253,  203,  211,  239,  247,  285,  369,  299,\n\t\t\t301,  333,  351,  355,  357,  361,  391,  397,  425,  451,\n\t\t\t463,  487,  501,  529,  539,  545,  557,  563,  601,  607,\n\t\t\t617,  623,  631,  637,  647,  661,  675,  677,  687,  695, \n\t\t\t701,  719,  721,  731,  757,  761,  787,  789,  799,  803,\n\t\t\t817,  827,  847,  859,  865,  875,  877,  883,  895,  901,\n\t\t\t911,  949,  953,  967,  971,  973,  981,  985,  995, 1001,\n\t\t\t1019, 1033, 1051, 1063, 1069, 1125, 1135, 1153, 1163, 1221,\n\t\t\t1239, 1255, 1267, 1279, 1293, 1305, 1315, 1329, 1341, 1347,\n\t\t\t1367, 1387, 1413, 1423, 1431, 1441, 1479, 1509, 1527, 1531,\n\t\t\t1555, 1557, 1573, 1591, 1603, 1615, 1627, 1657, 1663, 1673, \n\t\t\t1717, 1729, 1747, 1759, 1789, 1815, 1821, 1825, 1849, 1863,\n\t\t\t1869, 1877, 1881, 1891, 1917, 1933, 1939, 1969, 2011, 2035,\n\t\t\t2041, 2053, 2071, 2091, 2093, 2119, 2147, 2149, 2161, 2171,\n\t\t\t2189, 2197, 2207, 2217, 2225, 2255, 2257, 2273, 2279, 2283,\n\t\t\t2293, 2317, 2323, 2341, 2345, 2363, 2365, 2373, 2377, 2385,\n\t\t\t2395, 2419, 2421, 2431, 2435, 2447, 2475, 2477, 2489, 2503, \n\t\t\t2521, 2533, 2551, 2561, 2567, 2579, 2581, 2601, 2633, 2657,\n\t\t\t2669, 2681, 2687, 2693, 2705, 2717, 2727, 2731, 2739, 2741,\n\t\t\t2773, 2783, 2793, 2799, 2801, 2811, 2819, 2825, 2833, 2867,\n\t\t\t2879, 2881, 2891, 2905, 2911, 2917, 2927, 2941, 2951, 2955,\n\t\t\t2963, 2965, 2991, 2999, 3005, 3017, 3035, 3037, 3047, 3053,\n\t\t\t3083, 3085, 3097, 3103, 3159, 3169, 3179, 3187, 3205, 3209,\n\t\t\t3223, 3227, 3229, 3251, 3263, 3271, 3277, 3283, 3285, 3299,\n\t\t\t3305, 3319, 3331, 3343, 3357, 3367, 3373, 3393, 3399, 3413,\n\t\t\t3417, 3427, 3439, 3441, 3475, 3487, 3497, 3515, 3517, 3529,\n\t\t\t3543, 3547, 3553, 3559, 3573, 3589, 3613, 3617, 3623, 3627,\n\t\t\t3635, 3641, 3655, 3659, 3669, 3679, 3697, 3707, 3709, 3713,\n\t\t\t3731, 3743, 3747, 3771, 3791, 3805, 3827, 3833, 3851, 3865,\n\t\t\t3889, 3895, 3933, 3947, 3949, 3957, 3971, 3985, 3991, 3995,\n\t\t\t4007, 4013, 4021, 4045, 4051, 4069, 4073, 4179, 4201, 4219,\n\t\t\t4221, 4249, 4305, 4331, 4359, 4383, 4387, 4411, 4431, 4439,\n\t\t\t4449, 4459, 4485, 4531, 4569, 4575, 4621, 4663, 4669, 4711,\n\t\t\t4723, 4735, 4793, 4801, 4811, 4879, 4893, 4897, 4921, 4927,\n\t\t\t4941, 4977, 5017, 5027, 5033, 5127, 5169, 5175, 5199, 5213,\n\t\t\t5223, 5237, 5287, 5293, 5331, 5391, 5405, 5453, 5523, 5573,\n\t\t\t5591, 5597, 5611, 5641, 5703, 5717, 5721, 5797, 5821, 5909,\n\t\t\t5913, 5955, 5957, 6005, 6025, 6061, 6067, 6079, 6081, 6231,\n\t\t\t6237, 6289, 6295, 6329, 6383, 6427, 6453, 6465, 6501, 6523,\n\t\t\t6539, 6577, 6589, 6601, 6607, 6631, 6683, 6699, 6707, 6761,\n\t\t\t6795, 6865, 6881, 6901, 6923, 6931, 6943, 6999, 7057, 7079,\n\t\t\t7103, 7105, 7123, 7173, 7185, 7191, 7207, 7245, 7303, 7327, \n\t\t\t7333, 7355, 7365, 7369, 7375, 7411, 7431, 7459, 7491, 7505, \n\t\t\t7515, 7541, 7557, 7561, 7701, 7705, 7727, 7749, 7761, 7783,\n\t\t\t7795, 7823, 7907, 7953, 7963, 7975, 8049, 8089, 8123, 8125,\n\t\t\t8137, 8219, 8231, 8245, 8275, 8293, 8303, 8331, 8333, 8351,\n\t\t\t8357, 8367, 8379, 8381, 8387, 8393, 8417, 8435, 8461, 8469,\n\t\t\t8489, 8495, 8507, 8515, 8551, 8555, 8569, 8585, 8599, 8605,\n\t\t\t8639, 8641, 8647, 8653, 8671, 8675, 8689, 8699, 8729, 8741,\n\t\t\t8759, 8765, 8771, 8795, 8797, 8825, 8831, 8841, 8855, 8859,\n\t\t\t8883, 8895, 8909, 8943, 8951, 8955, 8965, 8999, 9003, 9031,\n\t\t\t9045, 9049, 9071, 9073, 9085, 9095, 9101, 9109, 9123, 9129,\n\t\t\t9137, 9143, 9147, 9185, 9197, 9209, 9227, 9235, 9247, 9253,\n\t\t\t9257, 9277, 9297, 9303, 9313, 9325, 9343, 9347, 9371, 9373,\n\t\t\t9397, 9407, 9409, 9415, 9419, 9443, 9481, 9495, 9501, 9505,\n\t\t\t9517, 9529, 9555, 9557, 9571, 9585, 9591, 9607, 9611, 9621,\n\t\t\t9625, 9631, 9647, 9661, 9669, 9679, 9687, 9707, 9731, 9733,\n\t\t\t9745, 9773, 9791, 9803, 9811, 9817, 9833, 9847, 9851, 9863,\n\t\t\t9875, 9881, 9905, 9911, 9917, 9923, 9963, 9973,10003,10025,\n\t\t\t10043,10063,10071,10077,10091,10099,10105,10115,10129,10145,\n\t\t\t10169,10183,10187,10207,10223,10225,10247,10265,10271,10275,\n\t\t\t10289,10299,10301,10309,10343,10357,10373,10411,10413,10431,\n\t\t\t10445,10453,10463,10467,10473,10491,10505,10511,10513,10523,\n\t\t\t10539,10549,10559,10561,10571,10581,10615,10621,10625,10643,\n\t\t\t10655,10671,10679,10685,10691,10711,10739,10741,10755,10767,\n\t\t\t10781,10785,10803,10805,10829,10857,10863,10865,10875,10877,\n\t\t\t10917,10921,10929,10949,10967,10971,10987,10995,11009,11029,\n\t\t\t11043,11045,11055,11063,11075,11081,11117,11135,11141,11159,\n\t\t\t11163,11181,11187,11225,11237,11261,11279,11297,11307,11309,\n\t\t\t11327,11329,11341,11377,11403,11405,11413,11427,11439,11453,\n\t\t\t11461,11473,11479,11489,11495,11499,11533,11545,11561,11567,\n\t\t\t11575,11579,11589,11611,11623,11637,11657,11663,11687,11691,\n\t\t\t11701,11747,11761,11773,11783,11795,11797,11817,11849,11855,\n\t\t\t11867,11869,11873,11883,11919,11921,11927,11933,11947,11955,\n\t\t\t11961,11999,12027,12029,12037,12041,12049,12055,12095,12097,\n\t\t\t12107,12109,12121,12127,12133,12137,12181,12197,12207,12209,\n\t\t\t12239,12253,12263,12269,12277,12287,12295,12309,12313,12335,\n\t\t\t12361,12367,12391,12409,12415,12433,12449,12469,12479,12481,\n\t\t\t12499,12505,12517,12527,12549,12559,12597,12615,12621,12639,\n\t\t\t12643,12657,12667,12707,12713,12727,12741,12745,12763,12769,\n\t\t\t12779,12781,12787,12799,12809,12815,12829,12839,12857,12875,\n\t\t\t12883,12889,12901,12929,12947,12953,12959,12969,12983,12987,\n\t\t\t12995,13015,13019,13031,13063,13077,13103,13137,13149,13173,\n\t\t\t13207,13211,13227,13241,13249,13255,13269,13283,13285,13303,\n\t\t\t13307,13321,13339,13351,13377,13389,13407,13417,13431,13435,\n\t\t\t13447,13459,13465,13477,13501,13513,13531,13543,13561,13581,\n\t\t\t13599,13605,13617,13623,13637,13647,13661,13677,13683,13695,\n\t\t\t13725,13729,13753,13773,13781,13785,13795,13801,13807,13825,\n\t\t\t13835,13855,13861,13871,13883,13897,13905,13915,13939,13941,\n\t\t\t13969,13979,13981,13997,14027,14035,14037,14051,14063,14085,\n\t\t\t14095,14107,14113,14125,14137,14145,14151,14163,14193,14199,\n\t\t\t14219,14229,14233,14243,14277,14287,14289,14295,14301,14305,\n\t\t\t14323,14339,14341,14359,14365,14375,14387,14411,14425,14441,\n\t\t\t14449,14499,14513,14523,14537,14543,14561,14579,14585,14593,\n\t\t\t14599,14603,14611,14641,14671,14695,14701,14723,14725,14743,\n\t\t\t14753,14759,14765,14795,14797,14803,14831,14839,14845,14855,\n\t\t\t14889,14895,14909,14929,14941,14945,14951,14963,14965,14985,\n\t\t\t15033,15039,15053,15059,15061,15071,15077,15081,15099,15121,\n\t\t\t15147,15149,15157,15167,15187,15193,15203,15205,15215,15217,\n\t\t\t15223,15243,15257,15269,15273,15287,15291,15313,15335,15347,\n\t\t\t15359,15373,15379,15381,15391,15395,15397,15419,15439,15453,\n\t\t\t15469,15491,15503,15517,15527,15531,15545,15559,15593,15611,\n\t\t\t15613,15619,15639,15643,15649,15661,15667,15669,15681,15693,\n\t\t\t15717,15721,15741,15745,15765,15793,15799,15811,15825,15835,\n\t\t\t15847,15851,15865,15877,15881,15887,15899,15915,15935,15937,\n\t\t\t15955,15973,15977,16011,16035,16061,16069,16087,16093,16097,\n\t\t\t16121,16141,16153,16159,16165,16183,16189,16195,16197,16201,\n\t\t\t16209,16215,16225,16259,16265,16273,16299,16309,16355,16375,\n\t\t\t16381]\n\t\tatmost = 2**log_max - 1\n#\n#\tFind the number of bits in ATMOST.\n#\n\t\tmaxcol = i4_bit_hi1 ( atmost )\n#\n#\tInitialize row 1 of V.\n#\n\t\tv[0,0:maxcol] = 1\n\n#\n#\tThings to do only if the dimension changed.\n#\n\tif ( dim_num != dim_num_save ):\n#\n#\tCheck parameters.\n#\n\t\tif ( dim_num < 1 or dim_max < dim_num ):\n\t\t\tprint('I4_SOBOL - Fatal error!' )\n\t\t\tprint('\tThe spatial dimension DIM_NUM should satisfy:')\n\t\t\tprint('\t\t1 <= DIM_NUM <= %d'%dim_max)\n\t\t\tprint('\tBut this input value is DIM_NUM = %d'%dim_num)\n\t\t\treturn\n\n\t\tdim_num_save = dim_num\n#\n#\tInitialize the remaining rows of V.\n#\n\t\tfor i in range(2 , dim_num+1):\n#\n#\tThe bits of the integer POLY(I) gives the form of polynomial I.\n#\n#\tFind the degree of polynomial I from binary encoding.\n#\n\t\t\tj = poly[i-1]\n\t\t\tm = 0\n\t\t\twhile ( 1 ):\n\t\t\t\tj = math.floor ( j / 2. )\n\t\t\t\tif ( j <= 0 ):\n\t\t\t\t\tbreak\n\t\t\t\tm = m + 1\n#\n#\tExpand this bit pattern to separate components of the logical array INCLUD.\n#\n\t\t\tj = poly[i-1]\n\t\t\tinclud=zeros(m)\n\t\t\tfor k in range(m, 0, -1):\n\t\t\t\tj2 = math.floor ( j / 2. )\n\t\t\t\tinclud[k-1] =  (j != 2 * j2 )\n\t\t\t\tj = j2\n#\n#\tCalculate the remaining elements of row I as explained\n#\tin Bratley and Fox, section 2.\n#\n\t\t\tfor j in range( m+1, maxcol+1 ):\n\t\t\t\tnewv = v[i-1,j-m-1]\n\t\t\t\tl = 1\n\t\t\t\tfor k in range(1, m+1):\n\t\t\t\t\tl = 2 * l\n\t\t\t\t\tif ( includ[k-1] ):\n\t\t\t\t\t\tnewv = bitwise_xor ( int(newv), int(l * v[i-1,j-k-1]) )\n\t\t\t\tv[i-1,j-1] = newv\n#\n#\tMultiply columns of V by appropriate power of 2.\n#\n\t\tl = 1\n\t\tfor j in range( maxcol-1, 0, -1):\n\t\t\tl = 2 * l\n\t\t\tv[0:dim_num,j-1] = v[0:dim_num,j-1] * l\n#\n#\tRECIPD is 1/(common denominator of the elements in V).\n#\n\t\trecipd = 1.0 / ( 2 * l )\n\t\tlastq=zeros(dim_num)\n\n\tseed = int(math.floor ( seed ))\n\n\tif ( seed < 0 ):\n\t\tseed = 0\n\n\tif ( seed == 0 ):\n\t\tl = 1\n\t\tlastq=zeros(dim_num)\n\n\telif ( seed == seed_save + 1 ):\n#\n#\tFind the position of the right-hand zero in SEED.\n#\n\t\tl = i4_bit_lo0 ( seed )\n\n\telif ( seed <= seed_save ):\n\n\t\tseed_save = 0\n\t\tl = 1\n\t\tlastq=zeros(dim_num)\n\n\t\tfor seed_temp in range( int(seed_save), int(seed)):\n\t\t\tl = i4_bit_lo0 ( seed_temp )\n\t\t\tfor i in range(1 , dim_num+1):\n\t\t\t\tlastq[i-1] = bitwise_xor ( int(lastq[i-1]), int(v[i-1,l-1]) )\n\n\t\tl = i4_bit_lo0 ( seed )\n\n\telif ( seed_save + 1 < seed ):\n\n\t\tfor seed_temp in range( int(seed_save + 1), int(seed) ):\n\t\t\tl = i4_bit_lo0 ( seed_temp )\n\t\t\tfor i in range(1, dim_num+1):\n\t\t\t\tlastq[i-1] = bitwise_xor ( int(lastq[i-1]), int(v[i-1,l-1]) )\n\n\t\tl = i4_bit_lo0 ( seed )\n#\n#\tCheck that the user is not calling too many times!\n#\n\tif ( maxcol < l ):\n\t\tprint('I4_SOBOL - Fatal error!')\n\t\tprint('\tToo many calls!')\n\t\tprint('\tMAXCOL = %d\\n'%maxcol)\n\t\tprint('\tL =\t\t\t%d\\n'%l)\n\t\treturn\n#\n#\tCalculate the new components of QUASI.\n#\n\tquasi=zeros(dim_num)\n\tfor i in range( 1, dim_num+1):\n\t\tquasi[i-1] = lastq[i-1] * recipd\n\t\tlastq[i-1] = bitwise_xor ( int(lastq[i-1]), int(v[i-1,l-1]) )\n\n\tseed_save = seed\n\tseed = seed + 1\n\n\treturn [ quasi, seed ]\ndef i4_uniform ( a, b, seed ):\n#*****************************************************************************80\n#\n## I4_UNIFORM returns a scaled pseudorandom I4.\n#\n#\tDiscussion:\n#\n#\t\tThe pseudorandom number will be scaled to be uniformly distributed\n#\t\tbetween A and B.\n#\n#\tLicensing:\n#\n#\t\tThis code is distributed under the GNU LGPL license.\n#\n#\tModified:\n#\n#    \t\t22 February 2011\n#\n#\tAuthor:\n#\n#\t\tOriginal MATLAB version by John Burkardt.\n#\t\tPYTHON version by Corrado Chisari\n#\n#\tReference:\n#\n#\t\tPaul Bratley, Bennett Fox, Linus Schrage,\n#\t\tA Guide to Simulation,\n#\t\tSpringer Verlag, pages 201-202, 1983.\n#\n#\t\tPierre L'Ecuyer,\n#\t\tRandom Number Generation,\n#\t\tin Handbook of Simulation,\n#\t\tedited by Jerry Banks,\n#\t\tWiley Interscience, page 95, 1998.\n#\n#\t\tBennett Fox,\n#\t\tAlgorithm 647:\n#\t\tImplementation and Relative Efficiency of Quasirandom\n#\t\tSequence Generators,\n#\t\tACM Transactions on Mathematical Software,\n#\t\tVolume 12, Number 4, pages 362-376, 1986.\n#\n#\t\tPeter Lewis, Allen Goodman, James Miller\n#\t\tA Pseudo-Random Number Generator for the System/360,\n#\t\tIBM Systems Journal,\n#\t\tVolume 8, pages 136-143, 1969.\n#\n#\tParameters:\n#\n#\t\tInput, integer A, B, the minimum and maximum acceptable values.\n#\n#\t\tInput, integer SEED, a seed for the random number generator.\n#\n#\t\tOutput, integer C, the randomly chosen integer.\n#\n#\t\tOutput, integer SEED, the updated seed.\n#\n\tif ( seed == 0 ):\n\t\tprint('I4_UNIFORM - Fatal error!')\n\t\tprint('\tInput SEED = 0!')\n\n\tseed = math.floor ( seed )\n\ta = round ( a )\n\tb = round ( b )\n\n\tseed = mod ( seed, 2147483647 )\n\n\tif ( seed < 0 ) :\n\t\tseed = seed + 2147483647\n\n\tk = math.floor ( seed / 127773 )\n\n\tseed = 16807 * ( seed - k * 127773 ) - k * 2836\n\n\tif ( seed < 0 ):\n\t\tseed = seed + 2147483647\n\n\tr = seed * 4.656612875E-10\n#\n#\tScale R to lie between A-0.5 and B+0.5.\n#\n\tr = ( 1.0 - r ) * ( min ( a, b ) - 0.5 ) + r * ( max ( a, b ) + 0.5 )\n#\n#\tUse rounding to convert R to an integer between A and B.\n#\n\tvalue = round ( r )\n\n\tvalue = max ( value, min ( a, b ) )\n\tvalue = min ( value, max ( a, b ) )\n\n\tc = value\n\n\treturn [ int(c), int(seed) ]\ndef prime_ge ( n ):\n#*****************************************************************************80\n#\n## PRIME_GE returns the smallest prime greater than or equal to N.\n#\n#\n#\tExample:\n#\n#\t\tN\t\t PRIME_GE\n#\n#\t\t-10\t\t2\n#\t\t\t1\t\t2\n#\t\t\t2\t\t2\n#\t\t\t3\t\t3\n#\t\t\t4\t\t5\n#\t\t\t5\t\t5\n#\t\t\t6\t\t7\n#\t\t\t7\t\t7\n#\t\t\t8\t 11\n#\t\t\t9\t 11\n#\t\t 10\t 11\n#\n#\tLicensing:\n#\n#\t\tThis code is distributed under the GNU LGPL license.\n#\n#\tModified:\n#\n#    \t\t22 February 2011\n#\n#\tAuthor:\n#\n#\t\tOriginal MATLAB version by John Burkardt.\n#\t\tPYTHON version by Corrado Chisari\n#\n#\tParameters:\n#\n#\t\tInput, integer N, the number to be bounded.\n#\n#\t\tOutput, integer P, the smallest prime number that is greater\n#\t\tthan or equal to N.\t\n#\n\tp = max ( math.ceil ( n ), 2 )\n\twhile ( not isprime ( p ) ):\n\t\tp = p + 1\n\n\treturn p\n\ndef isprime(n):\n\t#*****************************************************************************80\n#\n## IS_PRIME returns True if N is a prime number, False otherwise\n#\n#\n#\tLicensing:\n#\n#\t\tThis code is distributed under the GNU LGPL license.\n#\n#\tModified:\n#\n#    \t\t22 February 2011\n#\n#\tAuthor:\n#\n#\t\tCorrado Chisari\n#\n#\tParameters:\n#\n#\t\tInput, integer N, the number to be checked.\n#\n#\t\tOutput, boolean value, True or False\n#\n\tif n!=int(n) or n<1:\n\t\treturn False\n\tp=2\n\twhile p<n:\n\t\tif n%p==0:\n\t\t\treturn False\n\t\tp+=1\n\treturn True\n\t\n"
  },
  {
    "path": "src/aup/Proposer/spearmint/spearmint_pb2.py",
    "content": "# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: spearmint.proto\n\nfrom google.protobuf.internal import enum_type_wrapper\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import descriptor_pb2\n# @@protoc_insertion_point(imports)\n\n\n\n\nDESCRIPTOR = _descriptor.FileDescriptor(\n  name='spearmint.proto',\n  package='',\n  serialized_pb=b'\\n\\x0fspearmint.proto\\\"\\xcc\\x01\\n\\x03Job\\x12\\n\\n\\x02id\\x18\\x01 \\x02(\\x04\\x12\\x10\\n\\x08\\x65xpt_dir\\x18\\x02 \\x02(\\t\\x12\\x0c\\n\\x04name\\x18\\x03 \\x02(\\t\\x12\\x1b\\n\\x08language\\x18\\x04 \\x02(\\x0e\\x32\\t.Language\\x12\\x0e\\n\\x06status\\x18\\x05 \\x01(\\t\\x12\\x19\\n\\x05param\\x18\\x06 \\x03(\\x0b\\x32\\n.Parameter\\x12\\x10\\n\\x08submit_t\\x18\\x07 \\x01(\\x04\\x12\\x0f\\n\\x07start_t\\x18\\x08 \\x01(\\x04\\x12\\r\\n\\x05\\x65nd_t\\x18\\t \\x01(\\x04\\x12\\r\\n\\x05value\\x18\\n \\x01(\\x01\\x12\\x10\\n\\x08\\x64uration\\x18\\x0b \\x01(\\x01\\\"L\\n\\tParameter\\x12\\x0c\\n\\x04name\\x18\\x01 \\x02(\\t\\x12\\x0f\\n\\x07int_val\\x18\\x02 \\x03(\\x03\\x12\\x0f\\n\\x07str_val\\x18\\x03 \\x03(\\t\\x12\\x0f\\n\\x07\\x64\\x62l_val\\x18\\x04 \\x03(\\x01\\\"\\x91\\x02\\n\\nExperiment\\x12\\x1b\\n\\x08language\\x18\\x01 \\x02(\\x0e\\x32\\t.Language\\x12\\x0c\\n\\x04name\\x18\\x02 \\x02(\\t\\x12+\\n\\x08variable\\x18\\x03 \\x03(\\x0b\\x32\\x19.Experiment.ParameterSpec\\x1a\\xaa\\x01\\n\\rParameterSpec\\x12\\x0c\\n\\x04name\\x18\\x01 \\x02(\\t\\x12\\x0c\\n\\x04size\\x18\\x02 \\x02(\\r\\x12,\\n\\x04type\\x18\\x03 \\x02(\\x0e\\x32\\x1e.Experiment.ParameterSpec.Type\\x12\\x0f\\n\\x07options\\x18\\x04 \\x03(\\t\\x12\\x0b\\n\\x03min\\x18\\x05 \\x01(\\x01\\x12\\x0b\\n\\x03max\\x18\\x06 \\x01(\\x01\\\"$\\n\\x04Type\\x12\\x07\\n\\x03INT\\x10\\x01\\x12\\t\\n\\x05\\x46LOAT\\x10\\x02\\x12\\x08\\n\\x04\\x45NUM\\x10\\x03*A\\n\\x08Language\\x12\\n\\n\\x06MATLAB\\x10\\x01\\x12\\n\\n\\x06PYTHON\\x10\\x02\\x12\\t\\n\\x05SHELL\\x10\\x03\\x12\\x07\\n\\x03MCR\\x10\\x04\\x12\\t\\n\\x05TORCH\\x10\\x05')\n\n_LANGUAGE = _descriptor.EnumDescriptor(\n  name='Language',\n  full_name='Language',\n  filename=None,\n  file=DESCRIPTOR,\n  values=[\n    _descriptor.EnumValueDescriptor(\n      name='MATLAB', index=0, number=1,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='PYTHON', index=1, number=2,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='SHELL', index=2, number=3,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='MCR', index=3, number=4,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='TORCH', index=4, number=5,\n      options=None,\n      type=None),\n  ],\n  containing_type=None,\n  options=None,\n  serialized_start=580,\n  serialized_end=645,\n)\n\nLanguage = enum_type_wrapper.EnumTypeWrapper(_LANGUAGE)\nMATLAB = 1\nPYTHON = 2\nSHELL = 3\nMCR = 4\nTORCH = 5\n\n\n_EXPERIMENT_PARAMETERSPEC_TYPE = _descriptor.EnumDescriptor(\n  name='Type',\n  full_name='Experiment.ParameterSpec.Type',\n  filename=None,\n  file=DESCRIPTOR,\n  values=[\n    _descriptor.EnumValueDescriptor(\n      name='INT', index=0, number=1,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='FLOAT', index=1, number=2,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='ENUM', index=2, number=3,\n      options=None,\n      type=None),\n  ],\n  containing_type=None,\n  options=None,\n  serialized_start=542,\n  serialized_end=578,\n)\n\n\n_JOB = _descriptor.Descriptor(\n  name='Job',\n  full_name='Job',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='id', full_name='Job.id', index=0,\n      number=1, type=4, cpp_type=4, label=2,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='expt_dir', full_name='Job.expt_dir', index=1,\n      number=2, type=9, cpp_type=9, label=2,\n      has_default_value=False, default_value=\"utf-8\",\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='name', full_name='Job.name', index=2,\n      number=3, type=9, cpp_type=9, label=2,\n      has_default_value=False, default_value=\"utf-8\",\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='language', full_name='Job.language', index=3,\n      number=4, type=14, cpp_type=8, label=2,\n      has_default_value=False, default_value=1,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='status', full_name='Job.status', index=4,\n      number=5, type=9, cpp_type=9, label=1,\n      has_default_value=False, default_value=\"utf-8\",\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='param', full_name='Job.param', index=5,\n      number=6, type=11, cpp_type=10, label=3,\n      has_default_value=False, default_value=[],\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='submit_t', full_name='Job.submit_t', index=6,\n      number=7, type=4, cpp_type=4, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='start_t', full_name='Job.start_t', index=7,\n      number=8, type=4, cpp_type=4, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='end_t', full_name='Job.end_t', index=8,\n      number=9, type=4, cpp_type=4, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='value', full_name='Job.value', index=9,\n      number=10, type=1, cpp_type=5, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='duration', full_name='Job.duration', index=10,\n      number=11, type=1, cpp_type=5, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  extension_ranges=[],\n  serialized_start=20,\n  serialized_end=224,\n)\n\n\n_PARAMETER = _descriptor.Descriptor(\n  name='Parameter',\n  full_name='Parameter',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='name', full_name='Parameter.name', index=0,\n      number=1, type=9, cpp_type=9, label=2,\n      has_default_value=False, default_value=\"utf-8\",\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='int_val', full_name='Parameter.int_val', index=1,\n      number=2, type=3, cpp_type=2, label=3,\n      has_default_value=False, default_value=[],\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='str_val', full_name='Parameter.str_val', index=2,\n      number=3, type=9, cpp_type=9, label=3,\n      has_default_value=False, default_value=[],\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='dbl_val', full_name='Parameter.dbl_val', index=3,\n      number=4, type=1, cpp_type=5, label=3,\n      has_default_value=False, default_value=[],\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  extension_ranges=[],\n  serialized_start=226,\n  serialized_end=302,\n)\n\n\n_EXPERIMENT_PARAMETERSPEC = _descriptor.Descriptor(\n  name='ParameterSpec',\n  full_name='Experiment.ParameterSpec',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='name', full_name='Experiment.ParameterSpec.name', index=0,\n      number=1, type=9, cpp_type=9, label=2,\n      has_default_value=False, default_value=\"utf-8\",\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='size', full_name='Experiment.ParameterSpec.size', index=1,\n      number=2, type=13, cpp_type=3, label=2,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='type', full_name='Experiment.ParameterSpec.type', index=2,\n      number=3, type=14, cpp_type=8, label=2,\n      has_default_value=False, default_value=1,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='options', full_name='Experiment.ParameterSpec.options', index=3,\n      number=4, type=9, cpp_type=9, label=3,\n      has_default_value=False, default_value=[],\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='min', full_name='Experiment.ParameterSpec.min', index=4,\n      number=5, type=1, cpp_type=5, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='max', full_name='Experiment.ParameterSpec.max', index=5,\n      number=6, type=1, cpp_type=5, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n    _EXPERIMENT_PARAMETERSPEC_TYPE,\n  ],\n  options=None,\n  is_extendable=False,\n  extension_ranges=[],\n  serialized_start=408,\n  serialized_end=578,\n)\n\n_EXPERIMENT = _descriptor.Descriptor(\n  name='Experiment',\n  full_name='Experiment',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='language', full_name='Experiment.language', index=0,\n      number=1, type=14, cpp_type=8, label=2,\n      has_default_value=False, default_value=1,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='name', full_name='Experiment.name', index=1,\n      number=2, type=9, cpp_type=9, label=2,\n      has_default_value=False, default_value=\"utf-8\",\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='variable', full_name='Experiment.variable', index=2,\n      number=3, type=11, cpp_type=10, label=3,\n      has_default_value=False, default_value=[],\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[_EXPERIMENT_PARAMETERSPEC, ],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  extension_ranges=[],\n  serialized_start=305,\n  serialized_end=578,\n)\n\n_JOB.fields_by_name['language'].enum_type = _LANGUAGE\n_JOB.fields_by_name['param'].message_type = _PARAMETER\n_EXPERIMENT_PARAMETERSPEC.fields_by_name['type'].enum_type = _EXPERIMENT_PARAMETERSPEC_TYPE\n_EXPERIMENT_PARAMETERSPEC.containing_type = _EXPERIMENT;\n_EXPERIMENT_PARAMETERSPEC_TYPE.containing_type = _EXPERIMENT_PARAMETERSPEC;\n_EXPERIMENT.fields_by_name['language'].enum_type = _LANGUAGE\n_EXPERIMENT.fields_by_name['variable'].message_type = _EXPERIMENT_PARAMETERSPEC\nDESCRIPTOR.message_types_by_name['Job'] = _JOB\nDESCRIPTOR.message_types_by_name['Parameter'] = _PARAMETER\nDESCRIPTOR.message_types_by_name['Experiment'] = _EXPERIMENT\n\nclass Job(_message.Message):\n  __metaclass__ = _reflection.GeneratedProtocolMessageType\n  DESCRIPTOR = _JOB\n\n  # @@protoc_insertion_point(class_scope:Job)\n\nclass Parameter(_message.Message):\n  __metaclass__ = _reflection.GeneratedProtocolMessageType\n  DESCRIPTOR = _PARAMETER\n\n  # @@protoc_insertion_point(class_scope:Parameter)\n\nclass Experiment(_message.Message):\n  __metaclass__ = _reflection.GeneratedProtocolMessageType\n\n  class ParameterSpec(_message.Message):\n    __metaclass__ = _reflection.GeneratedProtocolMessageType\n    DESCRIPTOR = _EXPERIMENT_PARAMETERSPEC\n\n    # @@protoc_insertion_point(class_scope:Experiment.ParameterSpec)\n  DESCRIPTOR = _EXPERIMENT\n\n  # @@protoc_insertion_point(class_scope:Experiment)\n\n\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "src/aup/Proposer/spearmint/util.py",
    "content": "##\n# Copyright (C) 2012 Jasper Snoek, Hugo Larochelle and Ryan P. Adams\n# \n# This code is written for research and educational purposes only to \n# supplement the paper entitled\n# \"Practical Bayesian Optimization of Machine Learning Algorithms\"\n# by Snoek, Larochelle and Adams\n# Advances in Neural Information Processing Systems, 2012\n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation, either version 3 of the License, or\n# (at your option) any later version.\n# \n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n# \n# You should have received a copy of the GNU General Public License\n# along with this program.  If not, see <http://www.gnu.org/licenses/>.\nimport re\nimport numpy        as np\nimport numpy.random as npr\n\nimport logging\nlogger = logging.getLogger(__name__)\nlog = logger.debug\n\ndef unpack_args(str):\n    if len(str) > 1:\n        eq_re = re.compile(\"\\s*=\\s*\")\n        return dict(map(lambda x: eq_re.split(x),\n                        re.compile(\"\\s*,\\s*\").split(str)))\n    else:\n        return {}\n\ndef slice_sample(init_x, logprob, sigma=1.0, step_out=True, max_steps_out=1000, \n                 compwise=False, verbose=False):\n    def direction_slice(direction, init_x):\n        def dir_logprob(z):\n            return logprob(direction*z + init_x)\n    \n        upper = sigma*npr.rand()\n        lower = upper - sigma\n        llh_s = np.log(npr.rand()) + dir_logprob(0.0)\n    \n        l_steps_out = 0\n        u_steps_out = 0\n        if step_out:\n            while dir_logprob(lower) > llh_s and l_steps_out < max_steps_out:\n                l_steps_out += 1\n                lower       -= sigma\n            while dir_logprob(upper) > llh_s and u_steps_out < max_steps_out:\n                u_steps_out += 1\n                upper       += sigma\n            \n        steps_in = 0\n        while True:\n            steps_in += 1\n            new_z     = (upper - lower)*npr.rand() + lower\n            new_llh   = dir_logprob(new_z)\n            if np.isnan(new_llh):\n                log(new_z, direction*new_z + init_x, new_llh, llh_s, init_x, logprob(init_x))\n                raise Exception(\"Slice sampler got a NaN\")\n            if new_llh > llh_s:\n                break\n            elif new_z < 0:\n                lower = new_z\n            elif new_z > 0:\n                upper = new_z\n            else:\n                raise Exception(\"Slice sampler shrank to zero!\")\n\n        if verbose:\n            log(\"Steps Out:\", l_steps_out, u_steps_out, \" Steps In:\", steps_in)\n\n        return new_z*direction + init_x\n    \n    if not init_x.shape:\n        init_x = np.array([init_x])\n\n    dims = init_x.shape[0]\n    if compwise:\n        ordering = list(range(dims))\n        npr.shuffle(ordering)\n        cur_x = init_x.copy()\n        for d in ordering:\n            direction    = np.zeros((dims))\n            direction[d] = 1.0\n            cur_x = direction_slice(direction, cur_x)\n        return cur_x\n            \n    else:\n        direction = npr.randn(dims)\n        direction = direction / np.sqrt(np.sum(direction**2))\n        return direction_slice(direction, init_x)\n"
  },
  {
    "path": "src/aup/RestAPI/__init__.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\""
  },
  {
    "path": "src/aup/RestAPI/server.py",
    "content": "\"\"\"\nRestAPI server using Flask\n============================================\n\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\n\nfrom flask import render_template, jsonify, request\nfrom flask_cors import CORS\nimport connexion\nimport click\nimport logging\nimport sys\nimport sqlite3 as sql\nimport os\nimport os.path\nfrom six.moves.configparser import ConfigParser\nimport json\nimport signal\nimport multiprocessing\n\nfrom aup.compression.utils import SERIALIZATION_SEPARATOR, run_non_automatic_experiment, verify_compression_config, adjust_compression_config\nfrom aup.setup import setup\nfrom aup.utils import get_default_username, set_default_keyvalue\nfrom ..ET.Connector.SQLiteConnector import SQLiteConnector\n\nfrom ..EE.Experiment import Experiment\nfrom ..aup import BasicConfig\nfrom aup.Proposer import get_proposer\n\nfrom threading import Lock\n\nlogger = logging.getLogger(\"RestAPI\")\n\n# Create the application instance\napp = connexion.App(__name__, specification_dir='./')\nCORS(app.app)\n\nEXPS = dict()\nEXPS_lock = Lock()\n\nEXPERIMENT_STATUS_TRANSLATE_DICT = {\n    \"CREATED\": \"CREATED\",\n    \"RUNNING\": \"RUNNING\",\n    \"STOPPED\": \"STOPPED\",\n    \"FINISHED\": \"FINISHED\",\n    \"FAILED\": \"FAILED\",\n    \"STOPPING\": \"STOPPING\",\n    \"REQUEST_STOP\": \"STOPPING\",\n\n}\n\n\ndef fix_none_res(arg, value):\n    return arg if arg is not None and arg != 'None' else value\n\ndef get_display_names(params, exp_config=None, eid=None, cur=None):\n    if exp_config is None and eid is not None and cur is not None:\n        cur.execute(\"SELECT json_extract(exp_config, '$') as exp_config \\\n                            FROM experiment WHERE eid={eid} LIMIT 1;\".format(eid=eid))\n        exp_config = json.loads(str(cur.fetchone()[0]))\n    display_names = {}\n    for param in params:\n        param = param['name']\n        full_param = param.split(SERIALIZATION_SEPARATOR)\n        index = int(full_param[0])\n        original_key = full_param[-1]\n        cdict = exp_config['compression']['config_list'][index]\n        for part in full_param[1:-1]:\n            cdict = cdict[part]\n        if 'op_names' in exp_config['compression']['config_list'][index]:\n            new_key = '{} ({})'.format(\n                SERIALIZATION_SEPARATOR.join(full_param[1:]),\n                \", \".join([op_name for op_name in exp_config['compression']['config_list'][index]['op_names']]))\n        else:\n            new_key = '{} ({})'.format(\n                SERIALIZATION_SEPARATOR.join(full_param[1:]),\n                \", \".join([op_type for op_type in exp_config['compression']['config_list'][index]['op_types']]))\n        display_names[param] = new_key\n    return display_names\n\ndef fix_compression_job_config(jobs, params, display_names):\n    new_jobs = []\n    for job in jobs:\n        if job['job_config'] is None:\n            new_job = {\n                **{display_names[param['name']]: None for param in params},\n                **{key: val for key, val in job.items() if key != 'job_config'},\n            }\n            new_jobs += [new_job]\n            continue\n        new_job = {key: val for key, val in job.items() if key != 'job_config'}\n        job_config = json.loads(job['job_config'])\n        for param in params:\n            param = param['name']\n            full_param = param.split(SERIALIZATION_SEPARATOR)\n            index = int(full_param[0])\n            original_key = full_param[-1]\n            cdict = job_config['config_list'][index]\n            for part in full_param[1:-1]:\n                cdict = cdict[part]\n            new_job[display_names[param]] = cdict[original_key]\n        new_jobs += [new_job]\n    return new_jobs\n\ndef is_compression_experiment(exp_config=None, eid=None, cur=None):\n    if exp_config is not None:\n        return \"compression\" in exp_config\n    elif eid is not None:\n        ret = query_db(cur, \"SELECT (json_extract(exp_config, '$.compression') IS NOT NULL) as is_compression_exp \\\n                            FROM experiment WHERE eid={eid} LIMIT 1;\".format(eid=eid))\n        return bool(ret[0][\"is_compression_exp\"])\n    else:\n        raise ValueError(\"Missing parameter for is_compression_experiment\")\n\ndef get_params_for_experiment(cur, eid):\n    exp_config = query_db(cur, \"SELECT json_extract(exp_config, '$.parameter_config') as parameters from experiment where eid={eid};\".format(eid=eid))\n    params_json = json.loads(exp_config[0]['parameters'])\n    params = []\n    for v in params_json:\n        name = v['name']\n        new_param = {}\n        new_param['name'] = name\n        new_param['type'] = v['type']\n        new_param['range'] = v.get('range', None)\n        new_param['interval'] = v.get('interval', None)\n        new_param['n'] = v.get('n', None)\n        params.append(new_param)\n    return params\n\ndef query_db(cur, query, args=(), one=False):\n    cur.execute(query, args)\n    r = [dict((cur.description[i][0], value) \\\n               for i, value in enumerate(row)) for row in cur.fetchall()]\n    return (r[0] if r else None) if one else r\n\ndef start_experiment_daemon(json_conf, eid, cwd, event):\n    daemon_logger = logging.getLogger(\"RestAPIDaemon\")\n\n    is_compression_exp = \"compression\" in json_conf\n    is_one_shot_compression_exp = is_compression_exp and \"proposer\" not in json_conf\n\n    rc = 0\n    exp = None\n\n    previous_dir = os.getcwd()\n    os.chdir(cwd)\n    try:\n        os.setsid()\n        os.umask(0)\n\n        if is_compression_exp:\n            json_conf = verify_compression_config(json_conf)\n            json_conf[\"compression\"] = adjust_compression_config(json_conf[\"compression\"])\n            set_default_keyvalue(\"workingdir\", cwd, json_conf, log=logger)\n        \n        if not is_one_shot_compression_exp:\n            exp = Experiment(json_conf, eid=eid)\n            exp.add_suspend_signal()\n            exp.add_refresh_signal()\n        else:\n            _, finish = run_non_automatic_experiment(json_conf, os.path.join(\".aup\"), eid=eid)\n\n        event.set()\n        event.clear()\n        event.wait()\n\n        if not is_one_shot_compression_exp:\n            exp.start()\n    except Exception as e:\n        daemon_logger.exception('Exception caught:' + str(e))\n        rc = 1\n    finally:\n        if not is_one_shot_compression_exp:\n            exp.finish()\n        else:\n            finish()\n        os.chdir(previous_dir)\n        os._exit(rc)\n\ndef get_valid_jobs_interval(cursor, eid):\n    fin_cond = \"(score is not NULL and (score == 'EARLY STOPPED' or typeof(score)=='real')) \\\n                    and start_time is not NULL and end_time is not NULL\"\n\n    cursor.execute(\"SELECT jid, ({fin_cond}) AS stat FROM job WHERE \\\n                eid={eid} ORDER BY jid;\".format(fin_cond=fin_cond, eid=eid))\n    sql_res = cursor.fetchall()\n\n    first = None\n    last = None\n    idx = None\n    num_jobs = 0\n\n    for i in range(0, len(sql_res)):\n        if first == None and sql_res[i][1] == 1:\n            first = sql_res[i][0]\n            idx = i\n        if first != None and sql_res[i][1] == 0:\n            last = sql_res[i-1][0]\n            num_jobs = (i - idx)\n            break\n\n    start_job = first\n    if first == None:\n        num_jobs = 0\n    elif last == None:\n        num_jobs = len(sql_res)\n\n    return (start_job, num_jobs)\n\n# Create a URL route in our application for \"/\"\n@app.route('/')\ndef home():\n    \"\"\"\n    This function just responds to the browser ULR\n    localhost:5000/\n    :return:        the rendered template 'home.html'\n    \"\"\"\n    return render_template('home.html')\n\n@app.route('/api/resource_types', methods=['GET'])\ndef get_resource_types():\n    with sql.connect(app.app.config['db_file'], check_same_thread=False) as con:\n        cur = con.cursor()\n        cur.execute(\"SELECT DISTINCT type from resource;\")\n        res = [i[0] for i in cur.fetchall()]\n        return jsonify({'resources': res})\n    return None\n\n@app.route('/api/experiments/<int:eid>', methods=['GET'])\ndef get_experiment(eid):\n    with sql.connect(app.app.config['db_file'], check_same_thread=False) as con:\n        cur = con.cursor()\n        experiment = experiment = query_db(cur, \"SELECT *, name as experiment_name, \\\n                                        json_extract(exp_config, '$.script') as script_name \\\n                                    from experiment where eid={eid};\".format(eid=eid))\n        experiment[0]['status'] = EXPERIMENT_STATUS_TRANSLATE_DICT[experiment[0]['status']]\n        cur = con.cursor()\n        cur.execute(\"SELECT count(*) from job where (end_time is NULL or \\\n                    (typeof(score) is not 'real' and score is not 'EARLY STOPPED')) and eid={eid}\".format(eid=eid))\n        unfinished = int(cur.fetchone()[0])\n        cur.execute(\"SELECT count(*) from job where (end_time is not NULL and \\\n                    (typeof(score) is 'real' or score is 'EARLY STOPPED')) and eid={eid}\".format(eid=eid))\n        finished = int(cur.fetchone()[0])\n\n        cur.execute(\"SELECT json_extract(exp_config, '$.target') from experiment where eid={eid}\".format(eid=eid))\n        order = str(cur.fetchone()[0])\n        order = fix_none_res(order, 'max')\n\n        cur.execute(\"SELECT json_extract(exp_config, '$.proposer') from experiment where eid={eid}\".format(eid=eid))\n        proposer = str(cur.fetchone()[0])\n\n        cur = con.cursor()\n        cur.execute(\"SELECT exp_config \\\n                    from experiment where eid={eid};\".format(eid=eid))\n        exp_config = json.loads(str(cur.fetchone()[0]))\n        num_params = len(exp_config['parameter_config'])\n\n        proposer_obj = None\n        n_samples = 1\n        if proposer is not None and proposer != 'None':\n            proposer_obj = get_proposer(proposer)\n            n_samples = proposer_obj(exp_config).nSamples\n\n        if proposer == 'bohb' and experiment[0]['status'] == 'FINISHED':\n            n_samples = finished\n\n        param_names = []\n        for p in range(0, num_params):\n            cur.execute(\"SELECT json_extract(exp_config, '$.parameter_config[{idx}].name') \\\n                            from experiment where eid={eid};\".format(idx=p, eid=eid))\n            param_names.append(str(cur.fetchone()[0]))\n\n        is_compression_exp = is_compression_experiment(exp_config)\n        best_metrics_vs_hparams = query_db(cur, \"SELECT {order}(score) as score, job_config \\\n                            from job where eid={eid} and typeof(score) = 'real';\".format(order=order, eid=eid))\n\n        params = get_params_for_experiment(cur, eid)\n\n        new_best_score = {}\n\n        best_job_config = best_metrics_vs_hparams[0]['job_config']\n        if is_compression_exp:\n            display_names = get_display_names(params, exp_config)\n            best_metrics_vs_hparams = fix_compression_job_config(best_metrics_vs_hparams, params, display_names)\n            for param in params:\n                if param['name'] in display_names:\n                    param['name'] = display_names[param['name']]\n                param['value'] = best_metrics_vs_hparams[0][param['name']]\n        else: \n            job_configs = [\n                json.loads(mvh[\"job_config\"]) if \"job_config\" in mvh and mvh[\"job_config\"] is not None else {}\n                for mvh in best_metrics_vs_hparams\n            ]\n            best_metrics_vs_hparams = [{\n                \"score\": mvh[\"score\"],\n                **{param['name']: job_config[param['name']] if param['name'] in job_config else None for param in params},\n            } for mvh, job_config in zip(best_metrics_vs_hparams, job_configs)]\n\n            for param in params:\n                param['value'] = best_metrics_vs_hparams[0][param['name']]\n\n        new_best_score['params'] = params\n        new_best_score['proposer'] = proposer\n        new_best_score['score'] = best_metrics_vs_hparams[0]['score']\n\n        res = {\n            'experiment': experiment[0], \n            'best_score': new_best_score,\n            'job_stats': {\n                'finished': finished, \n                'unfinished': unfinished, \n                'total': n_samples\n            },\n        }\n\n        if is_compression_exp and len(params) == 0:\n            best_config_list = query_db(cur, \"SELECT json_extract(exp_config, '$.compression.config_list') as 'config_list' \\\n                                         FROM experiment WHERE eid={eid} LIMIT 1;\".format(eid=eid))\n            best_config_list = best_config_list[0]['config_list']\n            res['best_score'] = {\n                'score': res['best_score']['score'],\n                'config_list': best_config_list,\n            }\n\n        return res\n\n    return None\n\n@app.route('/api/experiments', methods=['GET'])\ndef get_experiments():\n    with sql.connect(app.app.config['db_file'], check_same_thread=False) as con:\n        cur = con.cursor()\n        experiment = query_db(cur, \"SELECT *, json_extract(exp_config, '$.script') as script_name, \\\n                                    name as experiment_name,  \\\n                                    (SELECT case when (SELECT json_extract(exp_config, '$.target') from experiment where eid=experiment.eid) is \\\"min\\\" \\\n                                    then min(score) else max(score) end from job where job.eid=experiment.eid and typeof(score) is 'real') as best_score, \\\n                                    (SELECT json_group_array(job.score) from job where job.eid=experiment.eid) as scores, \\\n                                    (SELECT count(*) from job where (end_time is NULL or typeof(score) is not 'real') and job.eid=experiment.eid) as jobs_unfinished, \\\n                                    (SELECT count(*) from job where end_time is not NULL and typeof(score) = 'real' and job.eid=experiment.eid) as jobs_finished, \\\n                                    (SELECT json_group_array(json_object('jid', jid, 'score', score, \\\n                                        'start_time', start_time, 'end_time', end_time, 'job_config', job_config)) from \\\n                                    (SELECT * from job where eid=experiment.eid order by end_time)) as jobs \\\n                                    from experiment order by start_time DESC;\")\n        for e in experiment:\n            e['status'] = EXPERIMENT_STATUS_TRANSLATE_DICT[e['status']]\n\n        mult_res_labels = query_db(cur, \"SELECT JSON_EXTRACT(exp_config, '$.resource_args.multi_res_labels') \\\n                                        AS labels FROM experiment ORDER BY start_time DESC\")\n\n        list_mult_res_labels = None\n        if mult_res_labels is not None:\n            for i in range(len(mult_res_labels)):\n                labels_str = mult_res_labels[i]['labels']\n                if labels_str is None:\n                    continue\n\n                list_mult_res_labels = json.loads(labels_str)\n                experiment[i]['labels'] = list_mult_res_labels\n\n        resource = query_db(cur, \"SELECT * FROM resource WHERE type IS NOT 'passive';\")\n        return jsonify({'experiment': experiment, 'resource': resource})\n    return None\n\n@app.route('/api/job_status', methods=['GET'])\ndef get_job_status():\n    with sql.connect(app.app.config['db_file'], check_same_thread=False) as con:\n        cur = con.cursor()\n        eid = request.args.get('eid')\n        job = query_db(cur, \"SELECT *, case when end_time is NULL then \\\"running\\\" \\\n                                else \\\"finished\\\" end as status, (SELECT rid from job_attempt where jid=job.jid) as rid \\\n                                from job where eid={eid} order by {sortby} {ASC};\".format(eid=eid, \\\n                        sortby=request.args.get('sortby'), \\\n                        ASC=\"ASC\" if int(request.args.get('asc')) else \"DESC\"))\n        mult_res_labels = query_db(cur, \"SELECT JSON_EXTRACT(exp_config, '$.resource_args.multi_res_labels') AS labels \\\n                                    FROM experiment WHERE eid=?\", (eid,))\n        mult_res_labels = mult_res_labels[0]\n\n        list_mult_res_labels = None\n        if mult_res_labels is not None and mult_res_labels['labels'] is not None:\n            list_mult_res_labels = json.loads(mult_res_labels['labels'])\n\n            for j in job:\n                m_res = query_db(cur, \"SELECT * FROM multiple_result WHERE jid=? AND is_last_result=1 ORDER BY mrid\", (j['jid'],))\n\n                # take the last results\n                if len(m_res) < len(list_mult_res_labels):\n                    continue\n                for res in m_res:\n                    j[list_mult_res_labels[res['label_order']-1]] = res['value']\n\n        is_compression_exp = is_compression_experiment(cur=cur, eid=eid)\n        if len(job) > 0 and is_compression_exp:\n            params = get_params_for_experiment(cur, eid)\n            display_names = get_display_names(params, eid=eid, cur=cur)\n            job_configs = fix_compression_job_config([{'job_config': j['job_config']} for j in job], params, display_names)\n            job = [{\n                'job_config': json.dumps(job_configs[idx]),\n                **{key: val for key, val in j.items() if key != 'job_config'}\n            } for idx, j in enumerate(job)]\n        return jsonify({'job': job, 'mult_res_labels': list_mult_res_labels})\n    return None\n\n@app.route('/api/hps_space', methods=['GET'])\ndef get_hps_space():\n    with sql.connect(app.app.config['db_file'], check_same_thread=False) as con:\n        cur = con.cursor()\n        eid = request.args.get('eid')\n        exp_config = query_db(cur, \"SELECT json_extract(exp_config, '$.parameter_config') as parameters, \\\n                        json_extract(exp_config, '$.proposer') as proposer, \\\n                        json_extract(exp_config, '$.n_samples') as num_samples from experiment where eid={eid};\".format(eid=eid))\n        return jsonify({'exp_config': exp_config[0]})\n    return None\n\n@app.route('/api/experiment_history', methods=['GET'])\ndef get_experiment_history():\n    with sql.connect(app.app.config['db_file'], check_same_thread=False) as con:\n        cur = con.cursor()\n        experiment_history = query_db(cur, \"SELECT *, (SELECT rid from job_attempt where jid=job.jid) as rid from job \\\n                    where eid={eid} order by end_time;\".format(eid=request.args.get('eid')))\n        return jsonify({'experiment_history': experiment_history})\n    return None\n\n@app.route('/api/experiment_history_best/<int:eid>', methods=['GET'], defaults={'label': None})\n@app.route('/api/experiment_history_best/<int:eid>/<label>', methods=['GET'])\ndef get_experiment_history_best(eid, label):\n    with sql.connect(app.app.config['db_file'], check_same_thread=False) as con:\n        sortby = request.args.get('sortby', 'jid')\n        cur = con.cursor()\n        cur.execute(\"SELECT json_extract(exp_config, '$.target') from experiment where eid={eid};\".format(eid=eid))\n        order = str(cur.fetchone()[0])\n        order = fix_none_res(order, 'max')\n\n        list_mult_res_labels = None\n        label_order = None\n        if label is not None:\n            mult_res_labels = query_db(cur, \"SELECT JSON_EXTRACT(exp_config, '$.resource_args.multi_res_labels') AS labels \\\n                                        FROM experiment WHERE eid=?\", (eid,))\n            mult_res_labels = mult_res_labels[0]\n\n            if mult_res_labels is not None and mult_res_labels['labels'] is not None:\n                list_mult_res_labels = json.loads(mult_res_labels['labels'])\n                try:\n                    label_order = list_mult_res_labels.index(label)+1\n                except ValueError:\n                    return jsonify({'experiment_history_best': []})\n\n            if list_mult_res_labels is None:\n                return jsonify({'experiment_history_best': []})\n\n        (start_job, num_jobs) = get_valid_jobs_interval(cur, eid)\n\n        result = []\n        for i in range(1, num_jobs+1):\n            best_job = None\n            if label is None:\n                best_job = query_db(cur, \"SELECT jid, {order}(score) as score, job_config from \\\n                            (SELECT * from job where eid={eid} and jid >= {start_job} order by {sortby} limit 0,{start}) \\\n                            WHERE typeof(score) == 'real';\". \\\n                            format(order=order, eid=eid, start=i, sortby=sortby, start_job=start_job))\n            elif list_mult_res_labels is not None and label_order is not None:\n                if sortby == 'end_time':\n                    sortby = 'receive_time'\n                best_job = query_db(cur, \"SELECT jid, {order}(value) as score, (SELECT job_config FROM job WHERE jid=jidm) as job_config FROM \\\n                                    (SELECT *, jid AS jidm FROM multiple_result WHERE eid={eid} AND \\\n                                    jid >= {start_job} AND label_order={label_order} AND is_last_result=1 ORDER BY {sortby} LIMIT 0,{start})\". \\\n                                    format(order=order, eid=eid, start=i, start_job=start_job, label_order=label_order, sortby=sortby))\n            if best_job is not None and best_job[0]['jid'] is None:\n                continue\n\n            is_compression_exp = is_compression_experiment(cur=cur, eid=eid)\n            if is_compression_exp:\n                params = get_params_for_experiment(cur, eid)\n                display_names = get_display_names(params, eid=eid, cur=cur)\n                job_configs = fix_compression_job_config([{\"job_config\": job[\"job_config\"]} for job in best_job], params, display_names)\n                best_job = [{\n                    \"job_config\": json.dumps(job_configs[idx]),\n                    **{key: val for key, val in job.items() if key != \"job_config\"}\n                } for idx, job in enumerate(best_job)]\n            result.append(best_job[0])\n        return jsonify({'experiment_history_best': result})\n    return None\n\n@app.route('/api/experiment_history_best', methods=['GET'], defaults={'label': None})\n@app.route('/api/experiment_history_best/<label>', methods=['GET'])\ndef get_experiments_history_best(label):\n    with sql.connect(app.app.config['db_file'], check_same_thread=False) as con:\n        sortby = request.args.get('sortby', 'jid')\n        cur = con.cursor()\n        eids = query_db(cur, \"SELECT eid from experiment;\")\n        result = dict()\n        for eid in eids:\n            eid = eid['eid']\n            cur.execute(\"SELECT json_extract(exp_config, '$.target') from experiment where eid={eid};\".format(eid=eid))\n            order = str(cur.fetchone()[0])\n            order = fix_none_res(order, 'max')\n\n            list_mult_res_labels = None\n            label_order = None\n            if label is not None:\n                mult_res_labels = query_db(cur, \"SELECT JSON_EXTRACT(exp_config, '$.resource_args.multi_res_labels') AS labels \\\n                                            FROM experiment WHERE eid=?\", (eid,))\n                mult_res_labels = mult_res_labels[0]\n\n                if mult_res_labels is not None and mult_res_labels['labels'] is not None:\n                    list_mult_res_labels = json.loads(mult_res_labels['labels'])\n                    try:\n                        label_order = list_mult_res_labels.index(label)+1\n                    except ValueError:\n                        continue\n\n                if list_mult_res_labels is None:\n                    continue\n\n            (start_job, num_jobs) = get_valid_jobs_interval(cur, eid)\n\n            result[eid] = list()\n            for i in range(1, num_jobs+1):\n                best_job = None\n                if label is None:\n                    best_job = query_db(cur, \"SELECT jid, {order}(score) as score, job_config, start_time, end_time from \\\n                                (SELECT * from job where eid={eid} and jid >= {start_job} order by {sortby} limit 0,{start}) \\\n                                WHERE typeof(score) == 'real';\". \\\n                                format(order=order, eid=eid, start=i, sortby=sortby, start_job=start_job))\n                elif list_mult_res_labels is not None and label_order is not None:\n                    if sortby == 'end_time':\n                        sortby = 'receive_time'\n                    best_job = query_db(cur, \"SELECT jid, {order}(value) as score, (SELECT job_config FROM job WHERE jid=jidm) as job_config FROM \\\n                                        (SELECT *, jid AS jidm FROM multiple_result WHERE eid={eid} AND \\\n                                        jid >= {start_job} AND label_order={label_order} AND is_last_result=1 ORDER BY {sortby} LIMIT 0,{start})\". \\\n                                        format(order=order, eid=eid, start=i, start_job=start_job, label_order=label_order, sortby=sortby))\n                if best_job is not None and best_job[0]['jid'] is None:\n                    continue\n\n                is_compression_exp = is_compression_experiment(cur=cur, eid=eid)\n                if is_compression_exp:\n                    params = get_params_for_experiment(cur, eid)\n                    display_names = get_display_names(params, eid=eid, cur=cur)\n                    job_configs = fix_compression_job_config([{\"job_config\": job[\"job_config\"]} for job in best_job], params, display_names)\n                    best_job = [{\n                        \"job_config\": json.dumps(job_configs[idx]),\n                        **{key: val for key, val in job.items() if key != \"job_config\"}\n                    } for idx, job in enumerate(best_job)]\n\n                result[eid].append(best_job[0])\n        return jsonify({'experiment_history_best': result})\n    return None\n\n@app.route('/api/experiment_comparison_best', methods=['GET'])\ndef get_experiment_comparison_best():\n    with sql.connect(app.app.config['db_file'], check_same_thread=False) as con:\n        eid = request.args.get('eid')\n        cur = con.cursor()\n        cur.execute(\"SELECT json_extract(exp_config, '$.target') from experiment where eid={eid}\".format(eid=eid))\n        order = str(cur.fetchone()[0])\n        order = fix_none_res(order, 'max')\n        result = query_db(cur, \"SELECT jid, {order}(score), job_config from job where eid={eid};\" \\\n                        .format(order=order, eid=eid))\n        return jsonify({'experiment_comparison_best': result})\n    return None\n\n@app.route('/api/metrics_vs_hparams', methods=['GET'])\ndef get_metrics_vs_hparams():\n    with sql.connect(app.app.config['db_file'], check_same_thread=False) as con:\n        eid = int(request.args.get('eid'))\n        cur = con.cursor()\n\n        params = get_params_for_experiment(cur, eid)\n\n        metrics_vs_hparams = query_db(cur, \"SELECT score, job_config from job \\\n                            where eid={eid} and typeof(score) == 'real';\".format(eid=eid))\n        is_compression_exp = is_compression_experiment(cur=cur, eid=eid)\n\n        if is_compression_exp:\n            display_names = get_display_names(params, eid=eid, cur=cur)\n            metrics_vs_hparams = fix_compression_job_config(metrics_vs_hparams, params, display_names)\n        else:\n            metrics_vs_hparams = [{\n                \"score\": mvh[\"score\"],\n                **{key: val for key, val in json.loads(mvh[\"job_config\"]).items()},\n            } for mvh in metrics_vs_hparams]\n\n        return jsonify({'metrics_vs_hparams': metrics_vs_hparams})\n    return None\n\n@app.route('/api/experiments_status')\ndef get_experiment_status():\n    with sql.connect(app.app.config['db_file'], check_same_thread=False) as con:\n        cur = con.cursor()\n        result = query_db(cur, \"SELECT eid, start_time, end_time, status \\\n                                FROM experiment;\")\n        for r in result:\n            r['status'] = EXPERIMENT_STATUS_TRANSLATE_DICT[r['status']]\n        return jsonify({'experiments_status': result})\n    return None\n\n@app.route('/api/job_stats/<int:eid>')\ndef get_job_stats(eid):\n    with sql.connect(app.app.config['db_file'], check_same_thread=False) as con:\n        cur = con.cursor()\n        cur.execute(\"SELECT count(*) from job where end_time is NULL and eid={eid}\".format(eid=eid))\n        unfinished = int(cur.fetchone()[0])\n        cur.execute(\"SELECT count(*) from job where end_time is not NULL and eid={eid}\".format(eid=eid))\n        finished = int(cur.fetchone()[0])\n\n        return jsonify({'finished': finished, 'unfinished': unfinished})\n    return None\n\n@app.route('/api/current_db', methods=['GET'])\ndef get_current_db():\n    db_path = app.app.config['db_file']\n    return jsonify({'db_path': os.path.abspath(db_path) if db_path is not None else None})\n\n@app.route('/api/setup', methods=['POST'])\ndef perform_setup():\n    if request.method == 'POST':\n        data = request.json\n\n        work_dir = data.get('work_dir')\n\n        previous_dir = os.getcwd()\n        try:\n            os.chdir(work_dir)\n\n            ini_path = data.get('ini_path')\n\n            cpu = data.get('cpu', '4')\n            cpu = int(cpu)\n\n            aws_file = data.get('aws_file', 'none')\n            gpu_file = data.get('gpu_file', 'none')\n            node_file = data.get('node_file', 'none')\n\n            if not os.path.exists(ini_path):\n                raise Exception(\"{} does not exist\".format(ini_path))\n            if aws_file is not 'none' and (not os.path.exists(aws_file)):\n                raise Exception(\"{} does not exist\".format(aws_file))\n            if gpu_file is not 'none' and (not os.path.exists(gpu_file)):\n                raise Exception(\"{} does not exist\".format(gpu_file))\n            if node_file is not 'none' and (not os.path.exists(node_file)):\n                raise Exception(\"{} does not exist\".format(node_file))\n\n            overwrite = data.get('overwrite', 'False')\n            overwrite = bool(overwrite) \n\n            user = data.get('user')\n\n            config = ConfigParser()\n            config.optionxform = str\n\n            config.read(ini_path)\n            user = get_default_username(user)\n            setup(config, cpu, gpu_file, node_file, aws_file, user, overwrite, 'info')\n\n            app.app.config['db_file'] = os.path.join(work_dir, config.get(\"Auptimizer\", \"Auptimizer_PATH\"), 'sqlite3.db')\n        except Exception as e:\n            logger.fatal('Exception caught:' + str(e))\n            return jsonify(isError=True,\n                    message=str(e),\n                    statusCode=500), 500\n        finally:\n            os.chdir(previous_dir)\n\n        return jsonify(isError= False,\n                    message= \"Success\",\n                    statusCode=200), 200\n\n@app.route('/api/create_experiment', methods=['POST'])\ndef create_experiment():\n    if request.method == 'POST':\n        data = request.json\n\n        cwd = data.get('cwd', None)\n        json_config_body = data.get('json_config_body', None)\n\n        is_compression_exp = \"compression\" in json_config_body\n        is_automatic_compression_exp = is_compression_exp and \"proposer\" in json_config_body\n\n        try:\n            previous_dir = os.getcwd()\n            os.chdir(cwd)\n\n            config = BasicConfig()\n            config.update(json_config_body)\n\n            config['cwd'] = cwd\n\n            if is_compression_exp:\n                config = verify_compression_config(config)\n                config[\"compression\"] = adjust_compression_config(config[\"compression\"])\n                set_default_keyvalue(\"workingdir\", cwd, config, log=logger)\n\n            if is_compression_exp and not is_automatic_compression_exp:\n                eid, _ = run_non_automatic_experiment(config, os.path.join(\".aup\"), start=False)\n            else:\n                e = Experiment(config, start=False)\n                eid = e.eid\n\n            os.chdir(previous_dir)\n\n            with sql.connect(app.app.config['db_file'], check_same_thread=False) as con:\n                cur = con.cursor()\n                experiment = query_db(cur, \"SELECT *, name as experiment_name, \\\n                                                            json_extract(exp_config, '$.script') as script_name \\\n                                                        from experiment where eid={eid};\".format(eid=eid))\n                experiment = experiment[0]\n                experiment['status'] = EXPERIMENT_STATUS_TRANSLATE_DICT[experiment['status']]\n            return jsonify(experiment)\n        except Exception as e:\n            os.chdir(previous_dir)\n            logger.exception('Exception caught:' + str(e))\n            return jsonify(isError=True,\n                message=str(e),\n                statusCode=500), 500\n\n@app.route('/api/start_experiment', methods=['POST'])\ndef start_experiment():\n    if request.method == 'POST':\n        data = request.json\n\n        eid = int(data.get('eid', -1))\n        cwd = None\n\n        json_conf = None\n\n        with sql.connect(app.app.config['db_file'], check_same_thread=False) as con:\n            cur = con.cursor()\n            cur.execute(\"SELECT exp_config from experiment where eid={eid};\".format(eid=eid))\n\n            json_conf = BasicConfig()\n            json_conf.update(json.loads(cur.fetchone()[0]))\n\n            cur.execute(\"SELECT json_extract(exp_config, '$.cwd') from experiment where eid={eid};\".format(eid=eid))\n            cwd = str(cur.fetchone()[0])\n\n        init_exp_event = None\n\n        try:\n            init_exp_event = multiprocessing.Event()\n            proc = multiprocessing.Process(target=start_experiment_daemon,\n                    args=(json_conf, eid, cwd, init_exp_event))\n            proc.daemon = True\n\n            proc.start()\n\n            with EXPS_lock:\n                EXPS[eid] = (proc, cwd)\n            init_exp_event.wait()\n\n            with sql.connect(app.app.config['db_file'], check_same_thread=False) as con:\n                cur = con.cursor()\n                experiment = query_db(cur, \"SELECT *, name as experiment_name, \\\n                                                    json_extract(exp_config, '$.script') as script_name \\\n                                                from experiment where eid={eid};\".format(eid=eid))\n                experiment = experiment[0]\n                experiment['status'] = EXPERIMENT_STATUS_TRANSLATE_DICT[experiment['status']]\n            # let daemon start the experiment after we finished with the db\n            init_exp_event.set()\n            return jsonify(experiment)\n        except Exception as e:\n            logger.exception('Exception caught:' + str(e))\n            return jsonify(isError=True,\n                message= \"Exception occurred:\" + str(e),\n                statusCode=500), 500\n\n@app.route('/api/stop_experiment', methods=['POST'])\ndef stop_experiment():\n    if request.method == 'POST':\n        data = request.json\n\n        eid = int(data.get('eid', -1))\n\n        try:\n            with sql.connect(app.app.config['db_file'], check_same_thread=False) as con:\n                cur = con.cursor()\n                experiment = query_db(cur, \"UPDATE experiment SET status = 'REQUEST_STOP' \\\n                                            WHERE eid={eid}\".format(eid=eid))\n            \n            with EXPS_lock:\n                if eid in EXPS:\n                    # force a last refresh\n                    os.kill(EXPS[eid][0].pid, signal.SIGUSR1)\n                    del EXPS[eid]\n            \n            with sql.connect(app.app.config['db_file'], check_same_thread=False) as con:\n                cur = con.cursor()\n                experiment = query_db(cur, \"SELECT *, name as experiment_name, \\\n                                                        json_extract(exp_config, '$.script') as script_name \\\n                                                    from experiment where eid={eid};\".format(eid=eid))\n                experiment = experiment[0]\n                experiment['status'] = EXPERIMENT_STATUS_TRANSLATE_DICT[experiment['status']]\n                return jsonify(experiment)\n        except Exception as e:\n            logger.exception('Exception caught:' + str(e))\n            return jsonify(isError=True,\n                message= \"Exception occurred:\" + str(e),\n                statusCode=500), 500\n\n@app.route('/api/refresh_all', methods=['POST'])\ndef refresh_all():\n    try:\n        to_delete = list()\n\n        with EXPS_lock:\n            for k, v in EXPS.items():\n                if v[0].exitcode == None:\n                    os.kill(v[0].pid, signal.SIGUSR1)\n                else:\n                    to_delete.append(k)\n            for eid in to_delete:\n                del EXPS[eid]\n\n        return jsonify(isError= False,\n                        message= \"Success\",\n                        statusCode=200), 200\n    except Exception as e:\n        logger.exception('Exception caught:' + str(e))\n        return jsonify(isError=True,\n            message= \"Exception occurred:\" + str(e),\n            statusCode=500), 500\n\n@app.route('/api/interm_res', methods=['GET'])\ndef get_interm_res():\n    with sql.connect(app.app.config['db_file'], check_same_thread=False) as con:\n        cur = con.cursor()\n        experiments = query_db(cur, \"SELECT * from experiment WHERE \\\n                                     JSON_EXTRACT(exp_config, '$.resource_args.track_intermediate_results') = 1\")\n\n        res = list()\n        for exp in experiments:\n            obj = dict()\n\n            eid = int(exp['eid'])\n            name = str(exp['name'])\n            script_name = str(json.loads(exp['exp_config'])['script'])\n\n            obj['eid'] = eid\n            obj['name'] = name\n            obj['scriptName'] = script_name\n\n            res.append(obj)\n\n        return jsonify(res)\n\n@app.route('/api/interm_res/<int:eid>', methods=['GET'], defaults={'label': None})\n@app.route('/api/interm_res/<int:eid>/<label>', methods=['GET'])\ndef get_interm_res_by_eid(eid, label):\n    with sql.connect(app.app.config['db_file'], check_same_thread=False) as con:\n        cur = con.cursor()\n        res = query_db(cur, \"SELECT * from experiment WHERE \\\n                             JSON_EXTRACT(exp_config, '$.resource_args.track_intermediate_results') = 1 AND eid={eid}\".format(eid=eid))\n\n        if len(res) == 0:\n            return jsonify(dict())\n\n        exp = res[0]\n        name = str(exp['name'])\n        script_name = str(json.loads(exp['exp_config'])['script'])\n\n        obj = dict()\n\n        list_mult_res_labels = None\n        label_order = None\n\n        mult_res_labels = query_db(cur, \"SELECT JSON_EXTRACT(exp_config, '$.resource_args.multi_res_labels') AS labels \\\n                                    FROM experiment WHERE eid=?\", (eid,))\n        mult_res_labels = mult_res_labels[0]\n\n        if mult_res_labels is not None and mult_res_labels['labels'] is not None:\n            list_mult_res_labels = json.loads(mult_res_labels['labels'])\n            if label is not None:\n                label_order = list_mult_res_labels.index(label)+1\n            obj['multResLabels'] = list_mult_res_labels\n\n        obj['eid'] = eid\n        obj['name'] = name\n        obj['scriptName'] = script_name\n        obj['jobs'] = list()\n\n        jids = query_db(cur, \"SELECT jid from job WHERE \\\n                        eid={eid}\".format(eid=eid))\n        for jid in jids:\n            field = dict()\n\n            jid_int = int(jid['jid'])\n\n            field['jid'] = jid_int\n            field['interimResults'] = list()\n\n            interm_res = None\n\n            if label is None:\n                interm_res = query_db(cur, \"SELECT * from intermediate_result WHERE \\\n                                jid={jid} ORDER BY receive_time\".format(jid=jid_int))\n            elif list_mult_res_labels is not None and label_order is not None:\n                interm_res = query_db(cur, \"SELECT *, value as score FROM multiple_result WHERE\\\n                                        jid={jid} and label_order={label_order} ORDER BY receive_time\".\\\n                                        format(jid=jid_int, label_order=label_order))\n\n            for in_res in interm_res:\n                field['interimResults'].append({\"irid\": in_res['irid'], \"receiveTime\": in_res['receive_time'], \"score\": in_res['score']})\n\n            obj['jobs'].append(field)\n\n        return jsonify(obj)\n\n@app.route('/api/experiment/<int:eid>', methods=['DELETE'])\ndef delete_experiment(eid):\n    if eid in EXPS:\n         del EXPS[eid]\n\n    conn = SQLiteConnector(app.app.config['db_file'])\n    rc = conn.delete_experiment(eid)\n    conn.close()\n\n    if not rc:\n        return jsonify(isError=True,\n            message= \"Experiment with eid={eid} not found\".format(eid=eid),\n            statusCode=500), 500\n    else:\n        return jsonify(isError=False,\n            message=\"Success\",\n            statusCode=200), 200\n\ndef disable_http_logs(disable):\n    if disable:\n        import click\n\n        log = logging.getLogger('werkzeug')\n        log.setLevel(logging.ERROR)\n\n        def secho(text, file=None, nl=None, err=None, color=None, **styles):\n            pass\n\n        def echo(text, file=None, nl=None, err=None, color=None, **styles):\n            pass\n        click.echo = echo\n        click.secho = secho\n\ndef main(path, port):\n    if path is not None and not os.path.exists(path):\n        return 1\n\n    app.app.config['db_file'] = os.path.abspath(path) if path is not None else None\n    app.app.config['CORS_HEADERS'] = 'Content-Type'\n\n    disable_http_logs(True)\n\n    app.run(host='0.0.0.0', port=int(port), debug=False)\n\n    return 0\n\n# If we're running in stand alone mode, run the application\nif __name__ == '__main__':\n    db_file = None\n    port = None\n\n    try:\n        if len(sys.argv) == 3:\n            db_file = str(sys.argv[1])\n            if not os.path.exists(db_file):\n                logger.fatal('Db file does not exist')\n                exit(1)\n\n            port = int(sys.argv[2])\n        elif len(sys.argv) == 2:\n            logger.warning(\"Running without db!\")\n            port = int(sys.argv[1])\n        else:\n            logger.fatal('Specify at least a port!')\n            exit(1)\n    except ValueError as ve:\n        logger.fatal('Cannot parse port!:' + str(ve))\n        exit(1)\n    except Exception as e:\n        logger.fatal('Caught exception:' + str(e))\n        exit(1)\n\n    app.app.config['db_file'] = os.path.abspath(db_file) if db_file is not None else None\n    app.app.config['CORS_HEADERS'] = 'Content-Type'\n    app.run(host='0.0.0.0', port=port, debug=False)\n"
  },
  {
    "path": "src/aup/RestAPI/templates/home.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>Application Home Page</title>\n</head>\n<body>\n    <h2>\n        Auptimizer REST API\n    </h2>\n</body>\n</html>\n"
  },
  {
    "path": "src/aup/__init__.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nfrom .EE.Experiment import Experiment\nfrom .aup import BasicConfig, print_result, aup_args, aup_flags, aup_save_model\nimport aup.compression\n\n__version__ = \"2.0\"\n"
  },
  {
    "path": "src/aup/__main__.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nAuptimizer HPO main entry\n=========================\n\n:mod:`aup.__main__` is the Auptimizer main entry point for HPO experiments.\n\nUse it as::\n\n  python -m aup <experiment configuration>\n\nThe usage is detailed in :doc:`experiment`.\n\nAdditional arguments\n--------------------\n\n.. program-output:: python3 -m aup -h\n\n\"\"\"\n\nimport logging\n\nimport click\nimport coloredlogs\n\nfrom . import Experiment, BasicConfig\nfrom .utils import get_default_username\nfrom .utils import get_available_port\nfrom .dashboard import dashboard\n\n_log_level = {\"debug\": logging.DEBUG, \"info\": logging.INFO, \"warn\": logging.WARN, \"error\": logging.ERROR}\nlogger = logging.getLogger(\"aup\")\n\n\n@click.command(name=\"Auptimizer training\", context_settings=dict(help_option_names=['-h', '--help']))\n@click.argument(\"experiment_file\", type=click.Path(exists=True))\n@click.option(\"--test\", is_flag=True, help=\"Test one case to verify the code is working\")\n@click.option(\"--user\", default=None, help=\"User name for job scheduling\")\n@click.option(\"--aup_folder\", default=None, help=\"Specify customized aup folder\")\n@click.option(\"--resume\", default=\"none\", help=\"Resume from previous task\")\n@click.option(\"--log\", default=\"info\", type=click.Choice([\"debug\", \"info\", \"warn\", \"error\"]), help=\"Log level\")\n@click.option(\"--sleep\", default=1, type=click.FLOAT, help=\"Sleep interval to sync updates\")\n@click.option(\"--launch_dashboard\", is_flag=True, help=\"Launch the dashboard together with the experiment.\")\n@click.option(\"--dashboard_port\", default=None, type=click.INT, help=\"Port for the dashboard frontend.\")\ndef main(experiment_file, test, user, aup_folder, resume, log, sleep, launch_dashboard, dashboard_port):\n    \"\"\"Auptimizer main function for HPO experiment\n    \\b\\n\n    Copyright (C) 2018  LG Electronics Inc.\n    \\b\\n\n    GPL-3.0 License. This program comes with ABSOLUTELY NO WARRANTY;\n    \\b\\n\n    Arguments:\n        experiment_file {str} -- Experiment configuration (can be created by `python -m aup.init`).\n    \"\"\"\n    coloredlogs.install(level=_log_level[log],\n                        fmt=\"%(asctime)-15s - %(name)s - %(levelname)s - %(message)s\")\n    config = {\n        \"username\": get_default_username(user),\n        \"sleep_time\": sleep,\n    }\n\n    if not launch_dashboard and dashboard_port is not None:\n        logger.fatal(\"dashbord_port value given without launch_dashboard flag given.\")\n        exit(0)\n\n    if launch_dashboard:\n        port = dashboard_port\n        if port is None:\n            port = get_available_port()\n        logger.info('Dashboard started on 0.0.0.0:{}'.format(port))\n\n    e = None\n    if aup_folder:\n        #TODO-the \"connector\" param in Experiment class is never customized\n        e = Experiment(BasicConfig().load(experiment_file), auppath=aup_folder, **config)\n    else:\n        e = Experiment(BasicConfig().load(experiment_file), **config)\n    if test:\n        logger.info(\"# Testing\")\n        exit(0)\n\n    if launch_dashboard:\n\n        from .utils import load_default_env\n\n        if aup_folder:\n            db_path = load_default_env(aup_folder, log=None)[\"SQLITE_FILE\"]\n        else:\n            from os.path import join\n            db_path = load_default_env(join(\".aup\"), log=None)[\"SQLITE_FILE\"]\n\n        from multiprocessing import Process\n        frontend = True\n        proc = Process(target=dashboard._start_dashboard, args=(db_path, port, frontend))\n        proc.start()\n\n    logger.info(\"# Running Experiment\")\n    try:\n        import signal\n        original_sigint_handler = signal.getsignal(signal.SIGINT)\n        e.add_suspend_signal()\n        if resume == \"none\":\n            e.start()\n        else:\n            e.resume(resume)\n    except Exception as exp:\n        if _log_level[log] > logging.DEBUG:\n            logging.critical(\"use --log debug to track error details\")\n        else:\n            raise exp\n    finally:\n        e.finish()\n    if launch_dashboard:\n        signal.signal(signal.SIGINT, original_sigint_handler)\n\n        logger.info(\"Dashboard is still running on 0.0.0.0:{}\".format(port))\n        logger.info(\"To exit press CTRL+C...\")\n        proc.join()\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "src/aup/aup.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nAuptimizer client side functions\n================================\n\nThis file can be copied to a remote machine instead of installing the whole Auptimizer package for job execution.\n\nAPIs\n----\n\"\"\"\nfrom __future__ import print_function\n\nimport logging\nimport json\nimport pickle\nimport sys\nimport inspect\nimport functools\nimport os\nimport shutil\n\nlogger = logging.getLogger(\"aup-minimal\")\n\n# supported data loading format\n_SUPPORT_FORMAT = (\"pkl\", \"json\")\n\nglobal user_callback_fn\nglobal user_args\nglobal user_kwargs\n\nuser_callback_fn = None\nuser_args = []\nuser_kwargs = {}\n\ndef print_result(result):\n    \"\"\"Function to print the result for :func:`parse_result`.\n    This function should be the last line of your training code\n\n    :param result: result from training code\n    :type result: str\n    \"\"\"\n    if type(result) is list:\n        result = ','.join([str(r) for r in result])\n    else:\n        result = str(result).lstrip()  # avoid line break\n    # force flush to get intermediate results in real time\n    print(\"\\n#Auptimizer:%s\" % result, file=sys.stderr, flush=True)\n\n\nclass BasicConfig(dict):\n    \"\"\"\n    User-friendly :class:`dict` supports:\n\n    * load and save for json/pickle format (.json/.pkl)\n    * easy key/value access as config.key or config[\"key\"]\n    * compatible with :class:`dict`\n\n    :param kwargs: key-value pairs to initialize the configuration\n    :type kwargs: dict\n    \"\"\"\n    def load(self, filename):\n        \"\"\"Load config parameters from JSON/pickle file\n\n        :param filename: file name ends with [.json|.pkl]\n        :type filename: string\n        :return: configuration parsed from file\n        :rtype: aup.BasicConfig\n        \"\"\"\n        name = \"_load_\" + BasicConfig._get_format(filename)\n        func = getattr(self, name)\n        data = func(filename)\n        if type(data) is not dict:\n            raise TypeError(\"Config must be dict\")\n        self.update(data)\n        logger.debug(\"Load config from %s: %s\" % (filename, data.__str__()))\n        return self\n\n    def save(self, filename):\n        \"\"\"\n        Save configuration as dict in JSON/pickle\n\n        :param filename: file name ends with [.json|.pkl]\n        :type filename: string\n        \"\"\"\n        name = \"_save_\" + BasicConfig._get_format(filename)\n        func = getattr(self, name)\n        func(filename)\n        logger.debug(\"Config saved to %s\" % filename)\n\n    @staticmethod\n    def _get_format(filename):\n        name = filename.split(\".\")[-1].lower()\n        if name not in _SUPPORT_FORMAT:\n            raise ValueError(\"Un-support file format, choose from %s.\" % \",\".join(_SUPPORT_FORMAT))\n        return name\n\n    @staticmethod\n    def _load_json(filename):\n        with open(filename, 'r') as f:\n            return json.load(f)\n\n    @staticmethod\n    def _load_pkl(filename):\n        with open(filename, 'rb') as f:\n            return pickle.load(f)\n\n    def _save_json(self, filename):\n        with open(filename, 'w') as f:\n            json.dump(self, f)\n\n    def _save_pkl(self, filename):\n        with open(filename, 'wb') as f:\n            pickle.dump(dict(self), f)\n\n    @staticmethod\n    def save_flags(filename):\n        \"\"\"\n        Save tf flags for reuse - not used, not tested\n\n        :param filename: output file\n        \"\"\"\n        from absl import flags\n        logger.info(\"Write flags into %s\")\n        with open(filename, 'w') as f:\n            f.write(flags.FLAGS.flags_into_string())\n\n    def to_flags(self, FLAGS):\n        \"\"\"\n        Update values in FLAGS from BasicConfig\n\n        :param FLAGS: tensorflow/absl FLAGS\n        \"\"\"\n        for i in FLAGS:\n            if i in self:\n                logger.debug(\"set %s in FLAGS\", i)\n                setattr(FLAGS, i, self[i])\n            else:\n                logger.debug(\"Use default %s\", i)\n\n    def __setattr__(self, key, value):\n        self.__setitem__(key, value)\n\n    def __getattr__(self, key):\n        return self.__getitem__(key)\n\n    def __delattr__(self, key):\n        self.__delitem__(key)\n\n    def __hash__(self):\n        return super(BasicConfig, self).__hash__()\n\n\ndef aup_args(func):\n    \"\"\"Decorator to wrap optimization target function `func`.\n    \n    Arguments:\n        func {function} -- A function computes optimization target with specified hyperparameters\n    \"\"\"\n    @functools.wraps(func)\n    def wrapper(filename, **kwargs):\n        \"\"\"wrapper function\n        \n        Arguments:\n            filename {str} -- configuration file\n            kwargs {dict} -- additional arguments will overwrite existing configuration value\n        Raises:\n            ValueError: if a parameter is not assigned in config\n        \"\"\"\n        # get current frame stack\n        frm = inspect.stack()[1]\n        # get module from stack\n        mod = inspect.getmodule(frm[0])\n        # get functions that contain \"init\" in name and call them\n        functions_list = inspect.getmembers(sys.modules[mod.__name__], inspect.isfunction)\n        functions_list = sorted(list(filter(lambda x: \"init\" in x[0], functions_list)))\n\n        config = BasicConfig().load(filename)\n        if kwargs:\n            logger.critical(\"Overwritting config values from script, be cautious!\")\n            config.update(kwargs)\n\n        for f in functions_list:\n            f[1](**config)\n\n        parameters = inspect.signature(func).parameters\n        for p in parameters.items():\n            if p[0] not in config:\n                if p[1].default is inspect.Parameter.empty:\n                    raise ValueError(\"`%s` is required in `%s()` but is not assigned in config file %s\" % \n                                     (p[0], func.__name__, filename))\n                logger.info(\"Using default value for %s\", p[0])\n        run_config = dict()\n        for p in config:\n            if p in parameters:\n                run_config[p] = config[p]\n            else:\n                logger.warning(\"%s is not used in optimization\"%p)\n\n        val = func(**run_config)\n        print_result(val)\n\n        save_model = config.get('save_model', False)\n        if save_model is True and user_callback_fn is not None:\n            # this means this is the \"best job\" found\n            # the user wants to save the model\n            try:\n                dir = os.path.join('aup_models', config.get('folder_name', None))\n                previous_dir = os.getcwd()\n\n                if os.path.exists('aup_models') is False:\n                    os.makedirs('aup_models')\n\n                if os.path.exists(dir) is True:\n                    logger.warning('Deleting {}'.format(dir))\n                    shutil.rmtree(dir)\n\n                os.makedirs(dir)\n                os.chdir(dir)\n\n                user_callback_fn(*user_args, **user_kwargs)\n            except Exception as e:\n                raise e\n            finally:\n                os.chdir(previous_dir)\n\n    return wrapper\n\ndef aup_flags(flags):\n    \"\"\"wrapper function for absl flags (or tf.app). \n\n    It will assign values to flags parameters using the given configuration file as the first argument when executed\n    from the command line.\n        \n    Arguments:\n        args {list} -- a list of unused arguments passed by app.run()\n    \"\"\"\n    def decorator_wrapper(func):\n        @functools.wraps(func)\n        def wrapper(args):\n            config = BasicConfig(**flags.__dict__).load(args[1])\n            flags.__dict__.update()\n            parameters = inspect.signature(func).parameters\n            if parameters:\n                logger.warning(\"TF FLAG main() should not accept arguments with Auptimizer, it has %s\", \n                               parameters.keys())\n                val = func({p:None for p in parameters})\n            else:\n                val = func()\n            print_result(val)\n        return wrapper\n    return decorator_wrapper\n\ndef aup_save_model(callback_fn, *args, **kwargs):\n    global user_callback_fn\n    global user_args\n    global user_kwargs\n\n    user_callback_fn = callback_fn\n    user_args = args\n    user_kwargs = kwargs"
  },
  {
    "path": "src/aup/compression/Compressor.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\n\nimport copy\nimport logging\nimport os\nlogger = logging.getLogger(__name__)\nCOMPRESSORS = {}\n\ntry:\n    from .tensorflow import pruning as tf_pruning\n\n    COMPRESSORS.update({\n        \"tensorflow\": {\n            \"pruning\": {\n                \"level\": tf_pruning.LevelPruner,\n            }\n        },\n    })\nexcept (ImportError, AssertionError) as ex:\n    logger.warning(\"Error when importing Tensorflow 2.X for compression: {}\".format(ex))\n\ntry:\n    from .torch import pruning as torch_pruning\n    from .torch import quantization as torch_quantization\n    from .torch import ModelSpeedup, apply_compression_results\n    from .torch.utils.counter import count_flops_params\n    import torch\n    \n    COMPRESSORS.update({\n        \"torch\": {\n            \"pruning\": {\n                \"agp\": torch_pruning.AGPPruner,\n                \"admm\": torch_pruning.ADMMPruner,\n                \"auto_compress\": torch_pruning.AutoCompressPruner,\n                \"lottery_ticket\": torch_pruning.LotteryTicketPruner,\n                \"level\": torch_pruning.LevelPruner,\n                \"slim\": torch_pruning.SlimPruner,\n                \"l1_filter\": torch_pruning.L1FilterPruner,\n                \"l2_filter\": torch_pruning.L2FilterPruner,\n                \"fpgm\": torch_pruning.FPGMPruner,\n                \"net_adapt\": torch_pruning.NetAdaptPruner,\n                \"sensitivity\": torch_pruning.SensitivityPruner,\n                \"simulated_annealing\": torch_pruning.SimulatedAnnealingPruner,\n                \"amc\": torch_pruning.AMCPruner,\n                \"taylor_fo_weight_filter\": torch_pruning.TaylorFOWeightFilterPruner,\n                \"activation_apoz_rank_filter\": torch_pruning.ActivationAPoZRankFilterPruner,\n                \"activation_mean_rank_filter\": torch_pruning.ActivationMeanRankFilterPruner,\n            },\n            \"quantization\": {\n                \"naive\": torch_quantization.NaiveQuantizer,\n                \"qat\": torch_quantization.QAT_Quantizer,\n                \"dorefa\": torch_quantization.DoReFaQuantizer,\n                \"bnn\": torch_quantization.BNNQuantizer,\n            }\n        }\n    })\nexcept ImportError as ex:\n    logger.warning(\"Error when importing PyTorch for compression: {}\".format(ex))\n\nfrom ..utils import check_missing_key\n\n\ndef create_compressor(model, config, *args, **kwargs):\n    \"\"\"\n    Helper function for user scripts to generate a compression object\n\n    :param model: Model to compress\n    :param config: Compressor configuration\n    \"\"\"\n    logging.basicConfig(format=\"%(asctime)-15s - %(name)s - %(levelname)s - %(message)s\")  \n    c_framework = config[\"compression_framework\"]\n    c_type = config[\"compression_type\"]\n    c_str = config[\"compressor\"]\n    logger.info(\"Creating compressor: framework={} type={} compressor={}\".format(\n        c_framework, c_type, c_str))\n\n    if c_framework not in COMPRESSORS:\n        raise ValueError((\"Compression framework \\\"{}\\\" not recognized. Supported frameworks for installed packages: {}\\n\" +\n                          \"Please check messages above, it is possible that an import error lead to this situation.\").format(\n            c_framework, \", \".join(COMPRESSORS.keys())))\n    if c_type not in COMPRESSORS[c_framework]:\n        raise ValueError(\"Compression type \\\"{}\\\" not recognized for framework \\\"{}\\\". Supported types: {}\".format(\n            c_type, c_framework, \", \".join(COMPRESSORS[c_framework].keys())))\n    if c_str not in COMPRESSORS[c_framework][c_type]:\n        raise ValueError(\"Compressor \\\"{}\\\" not recognized for framework \\\"{}\\\" and type \\\"{}\\\". Supported compressors: {}\".format(\n            c_str, c_framework, c_type, \", \".join(COMPRESSORS[c_framework][c_type].keys())))\n\n    # Check if all op_names can be found in model \n    if c_framework == \"torch\":\n        layer_names = {\".\".join(key.split(\".\")[:-1]) for key in model.state_dict().keys()}\n    elif c_framework == \"tensorflow\":\n        layer_names = {layer.name for layer in model.layers}\n    else:\n        raise NotImplementedError\n    for config_item in config[\"config_list\"]:\n        if \"op_names\" in config_item:\n            for op_name in config_item[\"op_names\"]:\n                if op_name not in layer_names:\n                    raise ValueError(\"op_name \\\"{}\\\" not found in model. Ops found: {}\".format(op_name, layer_names))\n\n    nni_compressor = COMPRESSORS[c_framework][c_type][c_str](model=model, config_list=config[\"config_list\"], *args, **kwargs)\n    \n    compressor = Compressor(model, nni_compressor, c_framework, c_type, c_str)\n\n    return compressor\n\n\nclass Compressor:\n    def __init__(self, model, nni_compressor, c_framework, c_type, c_str):\n        self._nni_compressor = nni_compressor\n        self._compression_framework = c_framework\n        self._compression_type = c_type\n        self._compressor_str = c_str\n        self._applied_speedup = False\n        self.model = model\n    \n    def compress(self, *args, **kwargs):\n        return self._nni_compressor.compress(*args, **kwargs)\n\n    def update_epoch(self, epoch):\n        return self._nni_compressor.update_epoch(epoch)\n    \n    def step(self):\n        return self._nni_compressor.step()\n    \n    def get_prune_iterations(self):\n        return self._nni_compressor.get_prune_iterations()\n    \n    def prune_iteration_start(self):\n        return self._nni_compressor.prune_iteration_start()\n\n    def apply_speedup(self, dummy_input, mask_path=None, *args, **kwargs):\n        if self._compression_framework != \"torch\" or \\\n           self._compression_type != \"pruning\":\n            raise ValueError(\"Can only apply_speedup for PyTorch pruning compressions.\") \n\n        # Ideally, inference model would be re-created here, but _unwrap_model() seems to work as well \n        self._nni_compressor._unwrap_model()\n        \n        try:\n            # Normally, the model would be exported first and its masks file used for speedup (\"else\" case)\n            # But here (\"if\"), the mask_dictionary object is constructed on-demand in-memory without saving to disk\n            if mask_path is None:\n                mask_dict = self._nni_compressor.get_mask_dict()\n                m_speedup = ModelSpeedup(self.model, dummy_input, masks=mask_dict)\n            else:\n                m_speedup = ModelSpeedup(self.model, dummy_input, masks_file=mask_path)\n            m_speedup.speedup_model()\n        except Exception as ex:\n            self._nni_compressor._wrap_model()\n            raise ValueError(\"Error encountered in apply_speedup.\")\n\n        self._applied_speedup = True\n\n        return self.model\n\n    def count_flops_params(self, *args, **kwargs):\n        if not self._applied_speedup:\n            self._nni_compressor._unwrap_model()\n        \n        ret = count_flops_params(self.model, *args, **kwargs)\n        \n        if not self._applied_speedup:\n            self._nni_compressor._wrap_model()\n        \n        return ret\n\n    def export_model(self, model_path, mask_path=None, folder_name=\".\", speedup=False, dummy_input=None, *args, **kwargs):\n        model = self.model\n        os.makedirs(folder_name, exist_ok=True)\n        model_path = os.path.join(folder_name, model_path)\n        if mask_path is not None:\n            mask_path = os.path.join(folder_name, mask_path)\n        if self._compression_framework == \"torch\":\n            if self._compression_type == \"pruning\":\n                self._nni_compressor.export_model(model_path, mask_path)\n                if speedup and not self._applied_speedup:\n                    if dummy_input is None:\n                        logger.warning(\"Missing required parameter \\\"dummy_input\\\" for speed-up, \" +\n                                       \"saving compressed model without speed-up.\")\n                    else:\n                        try:\n                            model = self.apply_speedup(dummy_input, mask_path)\n                        except ValueError:\n                            logger.warning(\"Error encountered when applying speed-up, \" + \n                                        \"saving compressed model without speed-up.\")\n            torch.save(model.state_dict(), model_path)\n        elif self._compression_framework == \"tensorflow\":\n            self.model.save(model_path)\n"
  },
  {
    "path": "src/aup/compression/NNI-LICENSE",
    "content": "License file for package: https://github.com/microsoft/nni\n\nCopyright (c) Microsoft Corporation.\n\nMIT License\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "src/aup/compression/__init__.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\n# The actual Compressor class used\nfrom .Compressor import *\nfrom .utils import run_non_automatic_experiment\n\n# Utilities\ntry:\n    from .torch.utils import sensitivity_analysis\n    from .torch.utils import shape_dependency \n    from .torch.utils import mask_conflict\n    from .torch.utils import counter\nexcept (ImportError):\n    logger.debug(\"Could not import pytorch for compression. \" +\n                 \"Make sure pytorch is installed if you intend to use pytorch during compression.\")"
  },
  {
    "path": "src/aup/compression/__main__.py",
    "content": "#!/usr/bin/env python\n\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n:mod:`aup.compression.__main__` is the Auptimizer main entry point for compression experiments.\n\nUse it as::\n\n  python -m aup.compression <experiment configuration> \n\nThe usage is detailed in :doc:`compression`.\n\nAdditional arguments\n--------------------\n\n.. program-output:: python3 -m aup.compression -h\n\n\"\"\"\n\nimport os\nimport json\nimport logging\nimport re\nimport signal\nimport sys\nimport time\nimport signal\n\nimport click\nimport coloredlogs\n\nfrom ..EE.Resource import get_resource_manager\nfrom ..EE.Experiment import Experiment\nfrom ..EE.Job import Job\nfrom .. import BasicConfig\nfrom ..utils import get_default_username, get_default_connector, check_missing_key, set_default_keyvalue, get_available_port, load_default_env\nfrom .utils import adjust_compression_config, run_non_automatic_experiment, verify_compression_config\nfrom ..dashboard import dashboard\n\n\n_log_level = {\"debug\": logging.DEBUG, \"info\": logging.INFO, \"warn\": logging.WARN, \"error\": logging.ERROR}\nlogger = logging.getLogger(\"aup.compression\")\n\n\n@click.command(name=\"Model Compression\", context_settings=dict(help_option_names=['-h', '--help']))\n@click.argument(\"experiment_file\", type=click.Path(exists=True))\n@click.option(\"--automatic\", is_flag=True, help=\"Whether or not running an automatic compression experiment with hyperparameter optimization.\")\n@click.option(\"--user\", default=None, help=\"User name for job scheduling\")\n@click.option(\"--aup_folder\", default=os.path.join(\".aup\"), help=\"Specify customized aup folder\")\n@click.option(\"--resume\", default=\"none\", help=\"Resume from previous task\")\n@click.option(\"--log\", default=\"info\", type=click.Choice([\"debug\", \"info\", \"warn\", \"error\"]), help=\"Log level\")\n@click.option(\"--sleep\", default=1, type=click.FLOAT, help=\"Sleep interval to sync updates\")\n@click.option(\"--launch_dashboard\", is_flag=True, help=\"Launch the dashboard together with the experiment.\")\n@click.option(\"--dashboard_port\", default=None, type=click.INT, help=\"Port for the dashboard frontend.\")\ndef main(experiment_file, automatic, user, aup_folder, resume, log, sleep, launch_dashboard, dashboard_port):\n    \"\"\"Compress a given model.\n\n    \\b\n    Arguments:\n        experiment_file {str} -- Compression configuration\n    \"\"\"\n    coloredlogs.install(level=_log_level[log],\n                        fmt=\"%(asctime)-15s - %(name)s - %(levelname)s - %(message)s\")    \n    \n    user = get_default_username(user)\n    exp_config = BasicConfig().load(experiment_file)\n    exp_config = verify_compression_config(exp_config)\n    exp_config[\"compression\"] = adjust_compression_config(exp_config[\"compression\"])\n\n    set_default_keyvalue(\"cwd\", os.getcwd(), exp_config, log=logger)\n    set_default_keyvalue(\"workingdir\", exp_config.get(\"cwd\", os.getcwd()), exp_config, log=logger)\n\n    if not launch_dashboard and dashboard_port is not None:\n        logger.fatal(\"dashbord_port value given without launch_dashboard flag given.\")\n        exit(0)\n\n    if launch_dashboard:\n        port = dashboard_port\n        if port is None:\n            port = get_available_port()\n        logger.info('Dashboard started on 0.0.0.0:{}'.format(port))\n\n        if aup_folder:\n            db_path = load_default_env(aup_folder, log=None)[\"SQLITE_FILE\"]\n        else:\n            from os.path import join\n            db_path = load_default_env(join(\".aup\"), log=None)[\"SQLITE_FILE\"]\n\n        from multiprocessing import Process\n        frontend = True\n        proc = Process(target=dashboard._start_dashboard, args=(db_path, port, frontend))\n        proc.daemon = True\n        proc.start()\n\n        original_sigint_handler = signal.getsignal(signal.SIGINT)\n\n    if automatic:\n        config = {\n            \"username\": get_default_username(user),\n            \"sleep_time\": sleep,\n        }\n        if aup_folder:\n            e = Experiment(exp_config, auppath=aup_folder, **config)\n        else:\n            e = Experiment(exp_config, **config)\n\n        logger.info(\"# Running automatic compression experiment\")\n        try:  \n            e.add_suspend_signal()\n            if resume == \"none\":\n                e.start()\n            else:\n                e.resume(resume)\n            e.finish()\n        except Exception as e:\n            if _log_level[log] > logging.DEBUG:\n                logging.critical(\"use --log debug to track error details\")\n            else:\n                raise e\n    else:\n        _, finish = run_non_automatic_experiment(exp_config, aup_folder, user)\n        finish()\n\n    if launch_dashboard:\n        signal.signal(signal.SIGINT, original_sigint_handler)\n\n        logger.info(\"Dashboard is still running on 0.0.0.0:{}'\".format(port))\n        logger.info(\"To exit press CTRL+C...\")\n        proc.join()\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "src/aup/compression/tensorflow/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\nfrom .compressor import Compressor, Pruner\nfrom .pruning import *\n"
  },
  {
    "path": "src/aup/compression/tensorflow/compressor.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n\"\"\"\nAbstract base classes for TensorFlow model compression.\n\"\"\"\n\nimport logging\n_logger = logging.getLogger(__name__)\n\ntry:\n    import tensorflow as tf\nexcept (ImportError):\n    _logger.debug(\"Could not import Tensorflow\")\n\ntry:\n    assert tf.__version__.startswith('2'), 'NNI model compression only supports TensorFlow v2.x'\nexcept (AssertionError):\n    _logger.debug(\"Could not import Tensorflow 2.X. Install Tensorflow 2.X for NNI model compression.\")\n\n\nfrom . import default_layers\n\n\nclass Compressor:\n    \"\"\"\n    Common base class for all compressors.\n\n    This class is designed for other base classes.\n    Algorithms should inherit ``Pruner`` or ``Quantizer`` instead.\n\n    Attributes\n    ----------\n    compressed_model : tf.keras.Model\n        Compressed user model.\n    wrappers : list of tf.keras.Model\n        A wrapper is an instrumented TF ``Layer``, in ``Model`` format.\n\n    Parameters\n    ----------\n    model : tf.keras.Model\n        The user model to be compressed.\n    config_list : list of JSON object\n        User configuration. The format is detailed in tutorial.\n    LayerWrapperClass : a class derive from Model\n        The class used to instrument layers.\n    \"\"\"\n\n    def __init__(self, model, config_list, LayerWrapperClass):\n        assert isinstance(model, tf.keras.Model)\n        self.validate_config(model, config_list)\n\n        self._original_model = model\n        self._config_list = config_list\n        self._wrapper_class = LayerWrapperClass\n        self._wrappers = {}  # key: id(layer) , value: Wrapper(layer)\n\n        self.compressed_model = self._instrument(model)\n        self.wrappers = list(self._wrappers.values())\n\n        if not self.wrappers:\n            _logger.warning('Nothing is configured to compress, please check your model and config list')\n\n    def set_wrappers_attribute(self, name, value):\n        \"\"\"\n        Call ``setattr`` on all wrappers.\n        \"\"\"\n        for wrapper in self.wrappers:\n            setattr(wrapper, name, value)\n\n    def validate_config(self, model, config_list):\n        \"\"\"\n        Compression algorithm should overload this function to validate configuration.\n        \"\"\"\n        pass\n\n\n    def _instrument(self, layer):\n        if isinstance(layer, tf.keras.Sequential):\n            return self._instrument_sequential(layer)\n        if isinstance(layer, tf.keras.Model):\n            return self._instrument_model(layer)\n\n        # a layer can be referenced in multiple attributes of a model,\n        # but should only be instrumented once\n        if id(layer) in self._wrappers:\n            return self._wrappers[id(layer)]\n\n        config = self._select_config(layer)\n        if config is not None:\n            wrapper = self._wrapper_class(layer, config, self)\n            self._wrappers[id(layer)] = wrapper\n            return wrapper\n\n        return layer\n\n    def _instrument_sequential(self, seq):\n        layers = list(seq.layers)  # seq.layers is read-only property\n        need_rebuild = False\n        for i, layer in enumerate(layers):\n            new_layer = self._instrument(layer)\n            if new_layer is not layer:\n                layers[i] = new_layer\n                need_rebuild = True\n        return tf.keras.Sequential(layers) if need_rebuild else seq\n\n    def _instrument_model(self, model):\n        for key, value in list(model.__dict__.items()):  # avoid \"dictionary keys changed during iteration\"\n            if isinstance(value, tf.keras.layers.Layer):\n                new_layer = self._instrument(value)\n                if new_layer is not value:\n                    setattr(model, key, new_layer)\n            elif isinstance(value, list):\n                for i, item in enumerate(value):\n                    if isinstance(item, tf.keras.layers.Layer):\n                        value[i] = self._instrument(item)\n        return model\n\n\n    def _select_config(self, layer):\n        # Find the last matching config block for given layer.\n        # Returns None if the layer should not be compressed.\n        layer_type = type(layer).__name__\n        last_match = None\n        for config in self._config_list:\n            if 'op_types' in config:\n                match = layer_type in config['op_types']\n                match_default = 'default' in config['op_types'] and layer_type in default_layers.weighted_modules\n                if not match and not match_default:\n                    continue\n            if 'op_names' in config and layer.name not in config['op_names']:\n                continue\n            last_match = config\n        if last_match is None or 'exclude' in last_match:\n            return None\n        return last_match\n\n\nclass Pruner(Compressor):\n    \"\"\"\n    Base class for pruning algorithms.\n\n    End users should use ``compress`` and callback APIs (WIP) to prune their models.\n\n    The underlying model is instrumented upon initialization of pruner object.\n    So if you want to pre-train the model, train it before creating pruner object.\n\n    The compressed model can only execute in eager mode.\n\n    Algorithm developers should override ``calc_masks`` method to specify pruning strategy.\n\n    Parameters\n    ----------\n    model : tf.keras.Model\n        The user model to prune.\n    config_list : list of JSON object\n        User configuration. The format is detailed in tutorial.\n    \"\"\"\n    def __init__(self, model, config_list):\n        super().__init__(model, config_list, PrunerLayerWrapper)\n        #self.callback = PrunerCallback(self)\n\n    def compress(self):\n        \"\"\"\n        Apply compression on a pre-trained model.\n\n        If you want to prune the model during training, use callback API (WIP) instead.\n\n        Returns\n        -------\n        tf.keras.Model\n            The compressed model.\n        \"\"\"\n        self._update_mask()\n        return self.compressed_model\n\n    def calc_masks(self, wrapper, **kwargs):\n        \"\"\"\n        Abstract method to be overridden by algorithm. End users should ignore it.\n\n        If the callback is set up, this method will be invoked at end of each training minibatch.\n        If not, it will only be called when end user invokes ``compress``.\n\n        Parameters\n        ----------\n        wrapper : PrunerLayerWrapper\n            The instrumented layer.\n        **kwargs\n            Reserved for forward compatibility.\n\n        Returns\n        -------\n        dict of (str, tf.Tensor), or None\n            The key is weight ``Variable``'s name. The value is a mask ``Tensor`` of weight's shape and dtype.\n            If a weight's key does not appear in the return value, that weight will not be pruned.\n            Returning ``None`` means the mask is not changed since last time.\n            Weight names are globally unique, e.g. `model/conv_1/kernel:0`.\n        \"\"\"\n        # TODO: maybe it should be able to calc on weight-granularity, beside from layer-granularity\n        raise NotImplementedError(\"Pruners must overload calc_masks()\")\n\n    def _update_mask(self):\n        for wrapper_idx, wrapper in enumerate(self.wrappers):\n            masks = self.calc_masks(wrapper, wrapper_idx=wrapper_idx)\n            if masks is not None:\n                wrapper.masks = masks\n\n\nclass PrunerLayerWrapper(tf.keras.Model):\n    \"\"\"\n    Instrumented TF layer.\n\n    Wrappers will be passed to pruner's ``calc_masks`` API,\n    and the pruning algorithm should use wrapper's attributes to calculate masks.\n\n    Once instrumented, underlying layer's weights will get **modified** by masks before forward pass.\n\n    Attributes\n    ----------\n    layer_info : LayerInfo\n        All static information of the original layer.\n    layer : tf.keras.layers.Layer\n        The original layer.\n    config : JSON object\n        Selected configuration. The format is detailed in tutorial.\n    pruner : Pruner\n        Bound pruner object.\n    masks : dict of (str, tf.Tensor)\n        Current masks. The key is weight's name and the value is mask tensor.\n        On initialization, `masks` is an empty dict, which means no weight is pruned.\n        Afterwards, `masks` is the last return value of ``Pruner.calc_masks``.\n        See ``Pruner.calc_masks`` for details.\n    \"\"\"\n    def __init__(self, layer, config, pruner):\n        super().__init__()\n        self.layer = layer\n        self.config = config\n        self.pruner = pruner\n        self.masks = {}\n        _logger.info('Layer detected to compress: %s', self.layer.name)\n\n    def call(self, *inputs):\n        new_weights = []\n        for weight in self.layer.weights:\n            mask = self.masks.get(weight.name)\n            if mask is not None:\n                new_weights.append(tf.math.multiply(weight, mask))\n            else:\n                new_weights.append(weight)\n        if new_weights and not hasattr(new_weights[0], 'numpy'):\n            raise RuntimeError('NNI: Compressed model can only run in eager mode')\n        self.layer.set_weights([weight.numpy() for weight in new_weights])\n        return self.layer(*inputs)\n\n\n# TODO: designed to replace `patch_optimizer`\n#class PrunerCallback(tf.keras.callbacks.Callback):\n#    def __init__(self, pruner):\n#        super().__init__()\n#        self._pruner = pruner\n#\n#    def on_train_batch_end(self, batch, logs=None):\n#        self._pruner.update_mask()\n"
  },
  {
    "path": "src/aup/compression/tensorflow/default_layers.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\nweighted_modules = [\n    'Conv1D', 'Conv2D', 'Conv3D', 'Conv1DTranspose', 'Conv2DTranspose', 'Conv3DTranspose',\n    'Dense',\n    'PReLU',\n    'Embedding',\n]\n"
  },
  {
    "path": "src/aup/compression/tensorflow/pruning/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n# Modified work Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nfrom .one_shot import *\n"
  },
  {
    "path": "src/aup/compression/tensorflow/pruning/one_shot.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n# Modified work Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nimport tensorflow as tf\n\nfrom ..compressor import Pruner\n\n__all__ = [\n    'OneshotPruner',\n    'LevelPruner',\n]\n\nclass OneshotPruner(Pruner):\n    def __init__(self, model, config_list, pruning_algorithm='level', **algo_kwargs):\n        super().__init__(model, config_list)\n        self.set_wrappers_attribute('calculated', False)\n        self.masker = MASKER_DICT[pruning_algorithm](model, self, **algo_kwargs)\n\n    def validate_config(self, model, config_list):\n        pass  # TODO\n\n    def calc_masks(self, wrapper, wrapper_idx=None):\n        if wrapper.calculated:\n            return None\n        sparsity = wrapper.config['sparsity']\n        masks = self.masker.calc_masks(sparsity, wrapper, wrapper_idx)\n        if masks is not None:\n            wrapper.calculated = True\n        return masks\n\n\nclass LevelPruner(OneshotPruner):\n    def __init__(self, model, config_list):\n        super().__init__(model, config_list, pruning_algorithm='level')\n\n\nclass WeightMasker:\n    def __init__(self, model, pruner, **kwargs):\n        self.model = model\n        self.pruner = pruner\n\n    def calc_masks(self, sparsity, wrapper, wrapper_idx=None):\n        raise NotImplementedError()\n\n\nclass LevelPrunerMasker(WeightMasker):\n    def calc_masks(self, sparsity, wrapper, wrapper_idx=None):\n        masks = {}\n        for weight_variable in wrapper.layer.weights:\n            if 'bias' in weight_variable.name:\n                continue\n\n            num_prune = int(tf.size(weight_variable).numpy() * sparsity)\n            if num_prune == 0:\n                continue\n\n            weight = weight_variable.read_value()\n            if wrapper.masks.get(weight_variable.name) is not None:\n                weight = tf.math.multiply(weight, wrapper.masks[weight_variable.name])\n\n            w_abs = tf.math.abs(weight)\n            k = tf.size(weight) - num_prune\n            topk = tf.math.top_k(tf.reshape(w_abs, [-1]), k)[0]\n            if tf.size(topk) == 0:\n                mask = tf.zeros_like(weight)\n            else:\n                mask = tf.math.greater_equal(w_abs, topk[-1])\n            masks[weight_variable.name] = tf.cast(mask, weight.dtype)\n        return masks\n\n\nMASKER_DICT = {\n    'level': LevelPrunerMasker,\n}\n"
  },
  {
    "path": "src/aup/compression/torch/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\nfrom .speedup import ModelSpeedup\nfrom .pruning import *\nfrom .quantization import *\nfrom .compressor import Compressor, Pruner, Quantizer\n"
  },
  {
    "path": "src/aup/compression/torch/_graph_utils.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n\nimport logging\nimport queue\nimport re\nfrom collections import defaultdict\nimport torch\nfrom torch.utils.tensorboard._pytorch_graph import NodePy, NodePyIO, NodePyOP, GraphPy\nCLASSTYPE_KIND = 'ClassType'\nGETATTR_KIND = 'prim::GetAttr'\nCAT_KIND = 'aten::cat'\nLIST_CONSTRUCT_KIND = 'prim::ListConstruct'\nLIST_UNPACK_KIND = 'prim::ListUnpack'\nTUPLE_CONSTRUCT_KIND = 'prim::TupleConstruct'\nTUPLE_UNPACK_KIND = 'prim::TupleUnpack'\nCONSTANT_KIND = 'prim::Constant'\n\n_logger = logging.getLogger(__name__)\n\n\ndef build_module_graph(model, dummy_input):\n    return TorchModuleGraph(model, dummy_input)\n\n\ndef build_graph(model, dummy_input, verbose=False):\n    g = TorchProtoGraph(model, dummy_input, verbose)\n    return g.graph_def, g.stepstats\n\n\ndef parse_traced_name(module_name):\n    prefix = 'TracedModule['\n    suffix = ']'\n    if module_name.startswith(prefix) and module_name.endswith(suffix):\n        module_name = module_name[len(prefix):-len(suffix)]\n    return module_name\n\n\nclass TorchGraph:\n    \"\"\"\n    This class is to extract pytorch model topology graph by tracing\n    \"\"\"\n\n    def __init__(self, model=None, dummy_input=None, traced_model=None):\n        \"\"\"\n        Parameters\n        ----------\n        model : pytorch model\n            The model user wants to speed up\n        dummy_input : pytorch tensor\n            The dummy input for ```jit.trace```, users should put it on right device before pass in\n        traced_model : torch._C.torch.jit.TopLevelTracedModule\n            An alredy traced model, if traced_model is not None, then TorchGraph will build the graph\n            based on this traced model and won't trace the model again.\n        \"\"\"\n        assert torch.__version__ >= '1.3.1'\n        # check if the input is legal\n        if traced_model is not None:\n            assert isinstance(traced_model, torch.jit.TopLevelTracedModule)\n            self.trace = traced_model\n            # it's ok if the graph is already unpacked\n            torch._C._jit_pass_inline(self.trace.graph)\n        elif model is not None and dummy_input is not None:\n            self.bound_model = model\n            self._trace(model, dummy_input)\n        else:\n            raise Exception(\n                'Please provide model & dummy_input or the traced_model as inputs')\n\n    def _trace(self, model, dummy_input):\n        training = model.training\n        model.eval()\n        self.trace = torch.jit.trace(model, dummy_input)\n        torch._C._jit_pass_inline(self.trace.graph)\n        model.train(training)\n\n\nclass TorchProtoGraph(TorchGraph):\n    \"\"\"\n    Generates model graph for pytorch models in protobuf, this implementation\n    is borrowed from pytorch v1.4.0, and fixed following issues:\n    https://github.com/pytorch/pytorch/issues/33691\n    https://github.com/pytorch/pytorch/issues/33670\n\n    \"\"\"\n\n    def __init__(self, model, dummy_input, verbose=False):\n        super().__init__(model, dummy_input)\n\n        from tensorboard.compat.proto.config_pb2 import RunMetadata\n        from tensorboard.compat.proto.graph_pb2 import GraphDef\n        from tensorboard.compat.proto.step_stats_pb2 import StepStats, DeviceStepStats\n        from tensorboard.compat.proto.versions_pb2 import VersionDef\n\n        list_of_nodes = self.parse(self.trace.graph, self.trace, dummy_input)\n        if verbose:\n            print(self.trace.graph)\n        self.stepstats = RunMetadata(step_stats=StepStats(\n            dev_stats=[DeviceStepStats(device=\"/device:CPU:0\")]))\n        self.graph_def = GraphDef(\n            node=list_of_nodes, versions=VersionDef(producer=22))\n\n    def parse(self, graph, trace, args=None, omit_useless_nodes=True):\n        \"\"\"This method parses an optimized PyTorch model graph and produces\n        a list of nodes and node stats for eventual conversion to TensorBoard\n        protobuf format.\n\n        Args:\n        graph (PyTorch module): The model graph to be parsed.\n        trace (PyTorch JIT TracedModule): The model trace to be parsed.\n        args (tuple): input tensor[s] for the model.\n        omit_useless_nodes (boolean): Whether to remove nodes from the graph.\n        \"\"\"\n        nodes_py = GraphPy()\n        for node in graph.inputs():\n            if omit_useless_nodes:\n                if not node.uses():  # number of user of the node (= number of outputs/ fanout)\n                    continue\n\n            if node.type().kind() != CLASSTYPE_KIND:\n                nodes_py.append(NodePyIO(node, 'input'))\n\n        attr_to_scope = dict()\n\n        def node_to_name(d):\n            return str(d).split(\":\")[0].strip()\n        for node in graph.nodes():\n            if node.kind() == GETATTR_KIND:\n                attr_name = node.s('name')\n                node_name = node_to_name(node)\n                parent = node.input().node()\n                # If the parent node is not the top-level \"self\" node\n                if parent.kind() == GETATTR_KIND:\n                    parent_scope = attr_to_scope[node_to_name(parent)]\n                    attr_scope = parent_scope.split('/')[-1]\n                    attr_to_scope[node_name] = '{}/{}.{}'.format(\n                        parent_scope, attr_scope, attr_name)\n                else:\n                    attr_to_scope[node_name] = '__module.{}'.format(attr_name)\n                # We don't need classtype nodes; scope will provide this information\n                if node.output().type().kind() != CLASSTYPE_KIND:\n                    node_py = NodePyOP(node)\n                    node_py.scopeName = attr_to_scope[node_name]\n                    nodes_py.append(node_py)\n            else:\n                nodes_py.append(NodePyOP(node))\n\n        # Create sink nodes for output ops\n        for i, node in enumerate(graph.outputs()):\n            node_py = NodePyIO(node, 'output')\n            node_py.debugName = \"output.{}\".format(i + 1)\n            node_py.inputs = [node.debugName()]\n            nodes_py.append(node_py)\n\n        alias_to_name = dict()\n        base_name = parse_traced_name(trace._name)\n        for name, module in trace.named_modules(prefix='__module'):\n            mod_name = parse_traced_name(module._name)\n            attr_name = name.split('.')[-1]\n            alias_to_name[name] = '{}[{}]'.format(mod_name, attr_name)\n\n        for node in nodes_py.nodes_op:\n            module_aliases = node.scopeName.split('/')[-1].split('.')\n            module_name = ''\n            for i, alias in enumerate(module_aliases):\n                if i == 0:\n                    module_name = alias\n                    node.scopeName = base_name\n                else:\n                    module_name += '.' + alias\n                    node.scopeName += '/' + \\\n                        (alias_to_name[module_name]\n                         if module_name in alias_to_name else alias)\n\n        nodes_py.populate_namespace_from_OP_to_IO()\n        return nodes_py.to_proto()\n\n\nclass NodePyGroup(NodePy):\n    \"\"\"\n    This class is used to represent a graph node which consists of multiple jit traced nodes. In a pytorch trace graph,\n    there are multiple nodes are traced for one torch.nn.Module object, we group them together to form a single node to\n    represent the torch.nn.Module object. We also group some functional call trace nodes together to form a new node.\n    \"\"\"\n\n    def __init__(self, name, unique_name, node_type, op_type, node_cpps, inputs=None, outputs=None, key_node=None):\n        \"\"\"\n        Parameters:\n        -----------\n        name: str\n            node name, such as `conv1`, `backbone.classifier`\n        unique_name: str\n            A global unique name for current node. Due to some modules,\n            such as relu, may be reused several times, so the scopename\n            is not suitable as the global unique identifier, so we add a\n            unique_name for each node as the global unique identifier.\n            We should use the unique_name to traverset the module graph.\n        node_type: str\n            `module` or `func`\n        op_type: str\n            operation type, such as `Conv2d`, `aten::view`\n        node_cpps: list of torch._C.Node\n            jit trace nodes which are included in this new node\n        inputs: list of str\n            All the inputs of this node, each element is debugName of one input\n        outputs: list of str\n            All the outputs of this node, each element is debugName of one output\n        key_node: torch._C.Node\n            The key node of this NodePyGroup.\n        \"\"\"\n        super(NodePyGroup, self).__init__(name, [])\n        self.node_cpps = node_cpps\n        self.name = name\n        self.unique_name = unique_name\n        self.op_type = op_type\n        self.type = node_type\n        self.nodes = []\n        self.auxiliary = None\n        self.add_nodes(node_cpps)\n        self.inputs = inputs\n        self.outputs = outputs\n        # The core node in this NodePyGroup\n        self.key_node = key_node\n\n    def add_nodes(self, node_cpps):\n        for node_cpp in node_cpps:\n            nodepy = NodePyOP(node_cpp)\n            nodepy.name = node_cpp.scopeName() + '_' + node_cpp.kind()\n            self.nodes.append(nodepy)\n\n    def sub_node_names(self):\n        return [x.name for x in self.nodes]\n\n    def __repr__(self):\n        return 'name: {}, type: {}, op_type: {}, sub_nodes: {}, inputs: {}, outputs: {}, aux: {}'.format(\n            self.name, self.type, self.op_type, self.sub_node_names(),\n            self.inputs, self.outputs, self.auxiliary\n        )\n\n\nclass TorchModuleGraph(TorchGraph):\n    \"\"\"\n    Generates model graph, each node is created from single or multiple jit trace nodes.\n    \"\"\"\n\n    def __init__(self, model=None, dummy_input=None, traced_model=None):\n        super().__init__(model, dummy_input, traced_model)\n        self.global_count = 0\n        self.name_to_node, self.input_to_node, self.output_to_node = self._build_graph()\n        self._extract_auxiliary_info()\n\n    def _expand_key_func_node(self, node, nodes, input_to_node, output_to_node,\n                              module_type):\n        \"\"\"\n        For trace graph nodes, some nodes are not in modules, these nodes are usually generated by\n        the functions directly called in module ```forward```. For such nodes, some of them are\n        trivial op which are label by ```prim::```, some of them are not such ops which is call\n        non-prim ops. This function is to merge neighbor prim ops to a non-prim op, to construct\n        a node.\n\n        Parameters\n        ----------\n        node : trace graph node\n            The non-prim node to expand\n        nodes : list of trace graph node\n            All the trace graph nodes within the same scope as the non-prim node\n        input_to_node : dict\n            key: input name, value: a node that uses this input\n        output_to_node : dict\n            key: output name, value: a node that generates this output\n        module_type : str\n            can be 'module' or 'func'\n\n        Returns\n        -------\n        node\n            the expanded non-prim node\n        \"\"\"\n        # TODO: scope name could be empty\n        node_name = '.'.join([self._get_module_name(\n            node.scopeName()), node.kind(), str(self.global_count)])\n        unique_name = node_name\n        _logger.debug(\"expand non-prim node, node name: %s\", node_name)\n        self.global_count += 1\n        op_type = node.kind()\n        node_group = [node]\n        inputs = set()\n        outputs = set()\n        node_queue = queue.Queue()\n        node_queue.put(node)\n        while not node_queue.empty():\n            curr_node = node_queue.get()\n            for _input in curr_node.inputs():\n                if _input.node().kind() == CONSTANT_KIND:\n                    continue\n                input_name = _input.debugName()\n                if input_name in output_to_node:\n                    for predecessor_node in output_to_node[input_name]:\n                        if predecessor_node in nodes:\n                            if not self._is_key_func(predecessor_node):\n                                if predecessor_node not in node_group:\n                                    node_group.append(predecessor_node)\n                                    node_queue.put(predecessor_node)\n                            else:\n                                inputs.add(input_name)\n                        else:\n                            inputs.add(input_name)\n                else:\n                    inputs.add(input_name)\n        for output in node.outputs():\n            if output.node().kind() == CONSTANT_KIND:\n                continue\n            outputs.add(output.debugName())\n        nodepy = NodePyGroup(node_name, unique_name, module_type, op_type,\n                             node_group, inputs=list(inputs), outputs=list(outputs), key_node=node)\n        return nodepy\n\n    def _expand_module_node(self, node, node_name, unique_name, op_type, nodes,\n                            input_to_node, output_to_node, module_type):\n        \"\"\"\n        merge the adjacent nodes of the module. The difference between the\n        _expand_module_node and _expand_non_prim_node is that, the _expand_non_prim_node\n        only merge the prim:: nodes into the aten:: node, in contrast,the _expand_module_node\n        will merge all adjacent nodes into a same nodepy group.\n\n        Parameters\n        ----------\n        node : trace graph node\n            The non-prim node to expand\n        node_name : str\n            specify the node_name for NodePyGroup\n        unique_name : str\n            unique_name for the NodePyGroup\n        op_type : str\n            specify the op_type for the NodePyGroup\n        nodes : list of trace graph node\n            All the trace graph nodes within the same scope as the non-prim node\n        input_to_node : dict\n            key: input name, value: a node that uses this input\n        output_to_node : dict\n            key: output name, value: a node that generates this output\n        module_type : str\n            can be 'module' or 'func'\n        Returns\n        -------\n        node\n            the expanded non-prim node\n\n        \"\"\"\n        _logger.debug(\"expand module node, node name: %s\", node_name)\n        self.global_count += 1\n        if not op_type:\n            op_type = node.kind()\n        node_group = [node]\n        inputs = set()\n        outputs = set()\n        node_queue = queue.Queue()\n        node_queue.put(node)\n        visited = {node}\n        while not node_queue.empty():\n            curr_node = node_queue.get()\n            for _input in curr_node.inputs():\n                if _input.node().kind() == CONSTANT_KIND:\n                    continue\n                input_name = _input.debugName()\n                if input_name in output_to_node:\n                    for predecessor_node in output_to_node[input_name]:\n                        if predecessor_node in nodes:\n                            if predecessor_node not in visited:\n                                node_group.append(predecessor_node)\n                                node_queue.put(predecessor_node)\n                                visited.add(predecessor_node)\n                        else:\n                            inputs.add(input_name)\n                else:\n                    inputs.add(input_name)\n            for _output in curr_node.outputs():\n                if _output.node().kind() == CONSTANT_KIND:\n                    continue\n                output_name = _output.debugName()\n                if output_name in input_to_node:\n                    for successor_node in input_to_node[output_name]:\n                        if successor_node in nodes:\n                            if successor_node not in visited:\n                                node_group.append(successor_node)\n                                node_queue.put(successor_node)\n                                visited.add(successor_node)\n                        else:\n                            outputs.add(output_name)\n                else:\n                    outputs.add(output_name)\n\n        nodepy = NodePyGroup(node_name, unique_name, module_type, op_type,\n                             node_group, inputs=list(inputs), outputs=list(outputs))\n        return nodepy\n\n    def _extract_cat_info(self, node_group, cpp_node):\n        \"\"\"\n        Extract the detail information of the cat operation,\n        such the order of the input tensor, the shape of each\n        input tensor, the output shape, and the cat dimension.\n\n        Parameters\n        ----------\n        node_group : NodePyGroup\n        cpp_node: torch._C.Node\n            It should be ```aten::cat``` node\n\n        Returns\n        -------\n        dict\n            Include auxiliary information for the cat operation.\n            This dict objec has four keys: 'cat_dim', 'out_shape',\n            'in_order' and 'in_shape'. cat_dim is the dimension of\n            the cat operation to concat the input tensors. out_shape\n            is the shape of the output tensor of the cat operation.\n            in_order is an ordered list which contains the corresponding\n            parent operaion nodes of the input tensors. in_shape is also\n            an ordered list that contains the input shapes of the input\n            tensor.\n        \"\"\"\n        # only suport the cat operation\n        assert cpp_node.kind() == CAT_KIND\n        cat_info = {}\n        # get the shape of the output tensor\n        t_output = cpp_node.output()\n        out_shape = t_output.type().sizes()\n        cat_info['out_shape'] = out_shape\n        # get the cat dimension\n        inputs = cpp_node.inputs()\n        cat_dim = list(inputs)[1].toIValue()\n        cat_info['cat_dim'] = cat_dim\n        # get the order of the input tensors\n        # To get the order of the input tensors, we need\n        # to be aware of the topology of the model, which\n        # means we should extract the auxiliary information\n        # after the build_index function.\n        input_order = []\n        list_construct_cpp = list(cpp_node.inputs())[0].node()\n        input_tensors = list(list_construct_cpp.inputs())\n        for _tensor in input_tensors:\n            debug_name = _tensor.debugName()\n            input_order.append(self.output_to_node[debug_name].unique_name)\n        cat_info['in_order'] = input_order\n        input_shapes = [t.type().sizes() for t in input_tensors]\n        cat_info['in_shape'] = input_shapes\n        return cat_info\n\n    def _extract_linear_shape_info(self, node_group):\n        \"\"\"\n        Extract linear shape input/output tensor shape info from its aten::addmm op.\n\n        Parameters\n        ----------\n        node_group : NodePyGroup\n            NodePyGroup object associated with the linear module.\n\n        Returns\n        -------\n        dict\n            Include shape of input tensor and shape of output tensor\n        \"\"\"\n        for cpp_node in node_group.node_cpps:\n            if cpp_node.kind() == 'aten::addmm':\n                # https://github.com/pytorch/pytorch/blob/1.6/torch/nn/functional.py#L1682\n                # inputs of aten::addmm:\n                # inputs[0] is bias\n                # inputs[1] is input data\n                # inputs[2] is weight\n                t_input = list(cpp_node.inputs())[1]\n                t_output = cpp_node.output()\n                assert isinstance(t_input.type(), torch._C.TensorType)\n                assert isinstance(t_output.type(), torch._C.TensorType)\n                in_shape = t_input.type().sizes()\n                out_shape = t_output.type().sizes()\n                return {'in_shape': in_shape, 'out_shape': out_shape}\n        return None\n\n    def _extract_shape_info(self, node):\n        \"\"\"\n        Extract the shape information of ```aten::view``` node\n\n        Parameters\n        ----------\n        node : trace graph node\n            It should be ```aten::view``` node\n\n        Returns\n        -------\n        dict\n            Include shape of input tensor and shape of output tensor\n        \"\"\"\n        t_input = None\n        for _input in node.inputs():\n            t_input = _input\n            break\n        t_output = node.output()\n        assert isinstance(t_input.type(), torch._C.TensorType)\n        assert isinstance(t_output.type(), torch._C.TensorType)\n        in_shape = t_input.type().sizes()\n        out_shape = t_output.type().sizes()\n        return {'in_shape': in_shape, 'out_shape': out_shape}\n\n    def _extract_leaf_modules(self):\n        \"\"\"\n        Extract leaf modules from the given graph. Leaf module means it does not have submodules.\n        To extract leaf modules because only leaf module can be replaced. And shape inference can\n        be done in leaf module level. Other shape inference is done in lower level i.e.,\n        operation level.\n\n        Returns\n        -------\n        list\n            a list of scope name of all the leaf modules\n        \"\"\"\n        def is_parent(name1, name2):\n            \"\"\"\n            check if name1 is parent node of name2, for example:\n            name1: aa.bb,  name2: aa.bb.cc,  return True\n            name1: aa.b,  name2: aa.bb, return False\n            \"\"\"\n            parts1, parts2 = name1.split('.'), name2.split('.')\n            if len(parts1) >= len(parts2):\n                return False\n            for i, _ in enumerate(parts1):\n                if parts2[i] != parts1[i]:\n                    return False\n            return True\n        module_names = sorted([x[0]\n                               for x in self.trace.named_modules() if x[0]])\n        leaf_nodes = []\n        for i, name in enumerate(module_names):\n            if i + 1 >= len(module_names) or not is_parent(name, module_names[i + 1]):\n                leaf_nodes.append(name)\n        return leaf_nodes\n\n    def _get_module_name(self, scope_name):\n        \"\"\"\n        Retrieve module name from scope name.\n        Parameters:\n        -----------\n        scope_name: str\n            scope_name of a graph node, for example:\n            for pytorch 1.3.1: MyModel/BackboneModel[backbone]/Conv2d[conv2]\n            for pytorch 1.4.0: __module.backbone/__module.backbone.conv2\n\n        Returns:\n        -------\n        str\n            module name, such as backbone.conv2\n        \"\"\"\n        if torch.__version__ >= '1.4.0':\n            return scope_name.split('/')[-1].replace('__module.', '')\n        else:\n            return '.'.join(re.findall(r'\\[(.*?)\\]', scope_name))\n\n    def _build_index(self, nodes_op):\n        name_to_node = dict()\n        input_to_node = defaultdict(list)\n        output_to_node = dict()\n        for node in nodes_op:\n            name_to_node[node.unique_name] = node\n            for _input in node.inputs:\n                input_to_node[_input].append(node)\n            for output in node.outputs:\n                assert not output in output_to_node, \\\n                    \"One output cannot be generated by multiple nodes %s\" % output\n                output_to_node[output] = node\n        return name_to_node, input_to_node, output_to_node\n\n    def _is_key_func(self, node_cpp):\n        \"\"\"\n        Judge if a cpp node is a key function node.\n        If so, we should not merge this node into the\n        adjacent node.\n        \"\"\"\n        if node_cpp.kind().startswith('aten::'):\n            # the nodes that start with 'aten' are key function\n            # nodes\n            return True\n        if node_cpp.kind() in [LIST_UNPACK_KIND, TUPLE_UNPACK_KIND]:\n            # We cannot merge the List/Tuple\n            # Unpack func into other nodes, else it\n            # may lead to a graph construction error.\n            # The reason why we donnot take the construct node\n            # also as a key node is that `cat` operation node need\n            # the last(previous) visited node to infer the mask. If\n            # we take the Construct node as the important node, the\n            # predecessor of the `cat` node will always be a construct\n            # node, which means we cannot infer the mask for the cat\n            # operation.\n            return True\n        return False\n\n    def unpack_manually(self):\n        \"\"\"\n        Unpack the tensor tuple or tensor list manually,\n        and remove the ListUnpack/TupleUnpack node from\n        the graph. Note: this function will change the\n        graph structure.\n        \"\"\"\n        if hasattr(self, 'unpacked'):\n            # if already unpacked the tuple/list manually\n            return\n        for node in self.nodes_py.nodes_op:\n            if node.op_type in [TUPLE_UNPACK_KIND, LIST_UNPACK_KIND]:\n                unpack_cpp = node.key_node\n                last_cpp = list(unpack_cpp.inputs())[0].node()\n                if last_cpp.kind() in [TUPLE_CONSTRUCT_KIND, LIST_CONSTRUCT_KIND]:\n                    # we need check if the tensor tuple or tensor list is produced\n                    # by a list/tuple construct node. If so, we can unpack the tuple\n                    # or list manunally.\n                    _logger.debug('List/Tuple Construct Node(cpp) %s', str(last_cpp))\n                    _logger.debug('List/Tuple Unpack Node(cpp) %s', str(unpack_cpp))\n                    assert len(list(unpack_cpp.outputs())) == len(list(last_cpp.inputs()))\n                    errmsg = '%s Input number: %d if inconsistent with the output number %d' % (unpack_cpp, \\\n                        len(node.inputs), len(list(last_cpp.inputs())))\n\n                    assert len(node.inputs) == len(list(last_cpp.inputs())), errmsg\n                    for _debug_input, _debug_output in zip(node.inputs, node.outputs):\n                        # _debug_input = _input.debugName()\n                        # _debug_output = _output.debugName()\n                        if _debug_input in self.input_to_node and _debug_output in self.input_to_node:\n                            # input_to_node[_debug_input] is a list of NodePyGroup, because\n                            # one tensor can be used as input for multiple nodes at the same time.\n\n                            # note that, in this case, the construct cpp node and unpack cpp node\n                            # will be merged into the same NodePyGroup, so we remove the `node` from\n                            # input_to_node[_debug_input] and directly connect this tensor to the\n                            # input_to_node[_debug_output]\n                            self.input_to_node[_debug_input].remove(node)\n                            # add the following nodes of _output into the input_to_node[_debug_input]\n                            self.input_to_node[_debug_input].extend(self.input_to_node[_debug_output])\n                        # just remove the _debug_output from the grapgh index. So that we can also skip\n                        # the construct and tuple\n                        if _debug_output in self.input_to_node:\n                            for following_node in self.input_to_node[_debug_output]:\n                                _tmp_index = following_node.inputs.index(_debug_output)\n                                following_node.inputs[_tmp_index] = _debug_input\n\n\n        self.unpacked = True\n\n    def _build_graph(self):\n        \"\"\"\n        Build graph using our defined format from jit trace.\n        There are basically three steps: first, construct necessary information (data structures),\n        second, extract all the modules to convert to node, Third, extract all functions to convert\n        to node.\n\n        Returns\n        -------\n        dict\n            use name to index nodes, key: node name, value: node\n        dict\n            use input (its name) to index nodes,\n            key: input, value: list of nodes that take this input\n        dict\n            use output (its name) to index nodes,\n            key: output, value: node that generates this output\n        \"\"\"\n        omit_useless_nodes = True\n        graph = self.trace.graph\n        _logger.debug(graph)\n        # build input/output mapping, from input/output debugName to its node\n        input_to_node = defaultdict(list)\n        output_to_node = defaultdict(list)\n        for node in graph.nodes():\n            if node.kind() == CONSTANT_KIND:\n                continue\n            for x in node.outputs():\n                if x.node().kind() == CONSTANT_KIND:\n                    continue\n                output_to_node[x.debugName()].append(node)\n                assert len(output_to_node[x.debugName()]) <= 1, \"One output cannot be generated by multiple nodes %s\" % x.debugName()\n            for x in node.inputs():\n                if x.node().kind() == CONSTANT_KIND:\n                    continue\n                input_to_node[x.debugName()].append(node)\n\n        # build module mapping, from module name to all nodes (as list) under this module scope\n        module_to_nodes = defaultdict(list)\n        # the mapping of function (non-module in forward) to nodes, key is scope name\n        func_to_nodes = defaultdict(list)\n\n        nodes_py = GraphPy()\n        for node in graph.inputs():\n            if omit_useless_nodes:\n                if not node.uses():  # number of user of the node (= number of outputs/ fanout)\n                    continue\n\n            if node.type().kind() != 'ClassType':\n                nodes_py.append(NodePyIO(node, 'input'))\n\n        self.leaf_modules = self._extract_leaf_modules()\n        module_to_type = {name: parse_traced_name(\n            module._name) for name, module in self.trace.named_modules()}\n\n        # associate module name with their trace graph nodes\n        for node in graph.nodes():\n            if node.kind() == CONSTANT_KIND:\n                continue\n            module_name = self._get_module_name(node.scopeName())\n            if module_name in self.leaf_modules:\n                module_to_nodes[module_name].append(node)\n            else:\n                func_to_nodes[node.scopeName()].append(node)\n        # build node group for module\n        for module_name, node_cpps in module_to_nodes.items():\n            use_count = 0\n            merged = set()\n            for node in node_cpps:\n                if node not in merged:\n                    # modules that have same scope name may have different locations in the\n                    # graph. Futhermore, there are also lots of prim:: nodes that in node_cpps,\n                    # so we also need to call the expand_module_node.\n                    unique_name = module_name\n                    if use_count > 0:\n                        unique_name = module_name + '.%d' % use_count\n                    node_group = self._expand_module_node(\n                        node, module_name, unique_name, module_to_type[module_name],\n                        node_cpps, input_to_node, output_to_node, 'module')\n                    nodes_py.nodes_op.append(node_group)\n                    use_count += 1\n                    merged.update(node_group.node_cpps)\n\n        # each scope_name may have multiple funcs, we split them and create node for each of them\n        # build node group for torch.nn.functional\n        for _, nodes in func_to_nodes.items():\n            # extract non prim:: nodes\n            key_func_nodes = list()\n            for node in nodes:\n                if self._is_key_func(node):\n                    # find the key function nodes\n                    key_func_nodes.append(node)\n            # for each non prim node, expand it\n            for node in key_func_nodes:\n                node_group = self._expand_key_func_node(\n                    node, nodes, input_to_node, output_to_node, 'func')\n                nodes_py.nodes_op.append(node_group)\n                # get shape infor for view (aten::view) func\n                # if node_group.op_type in ['aten::view', 'aten::flatten']:\n                #     node_group.auxiliary = self._extract_shape_info(node)\n\n        for node in graph.outputs():  # Create sink nodes for output ops\n            node_py = NodePyIO(node, 'output')\n            nodes_py.append(node_py)\n\n        self.nodes_py = nodes_py\n        # build index\n        return self._build_index(self.nodes_py.nodes_op)\n\n    def _extract_auxiliary_info(self):\n        \"\"\"\n        Extract the auxiliary information for the nodegroups\n        if necessary. For example, view/flatten operations may\n        need the shape of the input tensor and output tensor.\n        \"\"\"\n        # extract the input & output shape for the view and flatten\n        for node_group in self.nodes_py.nodes_op:\n            if node_group.op_type in ['aten::view', 'aten::flatten', 'aten::mean', 'aten::reshape']:\n                # get shape infor for view (aten::view) func\n                cpp_node = list(filter(lambda x: x.kind() == node_group.op_type,\n                                       node_group.node_cpps))[0]\n                node_group.auxiliary = self._extract_shape_info(cpp_node)\n            elif node_group.op_type == 'Linear':\n                node_group.auxiliary = self._extract_linear_shape_info(node_group)\n            elif node_group.op_type == CAT_KIND:\n                # get the detail information for cat func\n                cpp_node = list(filter(lambda x: x.kind() == node_group.op_type,\n                                       node_group.node_cpps))[0]\n                node_group.auxiliary = self._extract_cat_info(\n                    node_group, cpp_node)\n\n    def find_predecessors(self, unique_name):\n        \"\"\"\n        Find predecessor node of the given node\n\n        Parameters\n        ----------\n        unique_name : str\n            The unique name of the node\n\n        Returns\n        -------\n        list\n            a list of nodes who are the given node's predecessor\n        \"\"\"\n        predecessors = []\n        for _input in self.name_to_node[unique_name].inputs:\n            if not _input in self.output_to_node:\n                _logger.debug(\"cannot find node with %s as its output\", _input)\n            else:\n                node_py = self.output_to_node[_input]\n                predecessors.append(node_py.unique_name)\n        return predecessors\n\n    def find_successors(self, unique_name):\n        \"\"\"\n        Find successor nodes of the given node\n\n        Parameters\n        ----------\n        unique_name : str\n            The unique name of the node\n\n        Returns\n        -------\n        list\n            a list of nodes who are the given node's successor\n        \"\"\"\n        successors = []\n        for output in self.name_to_node[unique_name].outputs:\n            if output not in self.input_to_node:\n                # may reach the output of the whole graph\n                continue\n            nodes_py = self.input_to_node[output]\n            for node_py in nodes_py:\n                successors.append(node_py.unique_name)\n        return successors\n"
  },
  {
    "path": "src/aup/compression/torch/compressor.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\nimport types\nimport logging\nimport torch\nfrom . import default_layers\n\n_logger = logging.getLogger(__name__)\n\n\nclass LayerInfo:\n    def __init__(self, name, module):\n        self.module = module\n        self.name = name\n        self.type = type(module).__name__\n\ndef _setattr(model, name, module):\n    name_list = name.split(\".\")\n    for name in name_list[:-1]:\n        model = getattr(model, name)\n    setattr(model, name_list[-1], module)\n\n\nclass Compressor:\n    \"\"\"\n    Abstract base PyTorch compressor\n    \"\"\"\n\n    def __init__(self, model, config_list, optimizer=None):\n        \"\"\"\n        Record necessary info in class members\n\n        Parameters\n        ----------\n        model : pytorch model\n            the model user wants to compress\n        config_list : list\n            the configurations that users specify for compression\n        optimizer: pytorch optimizer\n            optimizer used to train the model\n        \"\"\"\n        assert isinstance(model, torch.nn.Module)\n        self.validate_config(model, config_list)\n\n        self.bound_model = model\n        self.config_list = config_list\n        self.optimizer = optimizer\n\n        self.modules_to_compress = None\n        self.modules_wrapper = []\n        self.is_wrapped = False\n\n        self._fwd_hook_handles = {}\n        self._fwd_hook_id = 0\n\n        self.reset()\n\n        if not self.modules_wrapper:\n            _logger.warning('Nothing is configured to compress, please check your model and config_list')\n\n    def validate_config(self, model, config_list):\n        \"\"\"\n        subclass can optionally implement this method to check if config_list if valid\n        \"\"\"\n        pass\n\n    def reset(self, checkpoint=None):\n        \"\"\"\n        reset model state dict and model wrapper\n        \"\"\"\n        self._unwrap_model()\n        if checkpoint is not None:\n            self.bound_model.load_state_dict(checkpoint)\n\n        self.modules_to_compress = None\n        self.modules_wrapper = []\n\n        for layer, config in self._detect_modules_to_compress():\n            wrapper = self._wrap_modules(layer, config)\n            self.modules_wrapper.append(wrapper)\n\n        self._wrap_model()\n\n    def _detect_modules_to_compress(self):\n        \"\"\"\n        detect all modules should be compressed, and save the result in `self.modules_to_compress`.\n        The model will be instrumented and user should never edit it after calling this method.\n        \"\"\"\n        if self.modules_to_compress is None:\n            self.modules_to_compress = []\n            for name, module in self.bound_model.named_modules():\n                if module == self.bound_model:\n                    continue\n                layer = LayerInfo(name, module)\n                config = self.select_config(layer)\n                if config is not None:\n                    self.modules_to_compress.append((layer, config))\n        return self.modules_to_compress\n\n    def _wrap_model(self):\n        \"\"\"\n        wrap all modules that needed to be compressed\n\n        \"\"\"\n        for wrapper in reversed(self.get_modules_wrapper()):\n            _setattr(self.bound_model, wrapper.name, wrapper)\n        self.is_wrapped = True\n\n    def _unwrap_model(self):\n        \"\"\"\n        unwrap all modules that needed to be compressed\n\n        \"\"\"\n        for wrapper in self.get_modules_wrapper():\n            _setattr(self.bound_model, wrapper.name, wrapper.module)\n        self.is_wrapped = False\n\n    def compress(self):\n        \"\"\"\n        Compress the model with algorithm implemented by subclass.\n\n        The model will be instrumented and user should never edit it after calling this method.\n        `self.modules_to_compress` records all the to-be-compressed layers\n\n        Returns\n        -------\n        torch.nn.Module\n            model with specified modules compressed.\n        \"\"\"\n        return self.bound_model\n\n    def set_wrappers_attribute(self, name, value):\n        \"\"\"\n        To register attributes used in wrapped module's forward method.\n        If the type of the value is Torch.tensor, then this value is registered as a buffer in wrapper,\n        which will be saved by model.state_dict. Otherwise, this value is just a regular variable in wrapper.\n\n        Parameters\n        ----------\n        name : str\n            name of the variable\n        value: any\n            value of the variable\n        \"\"\"\n        for wrapper in self.get_modules_wrapper():\n            if isinstance(value, torch.Tensor):\n                wrapper.register_buffer(name, value.clone())\n            else:\n                setattr(wrapper, name, value)\n\n    def get_modules_to_compress(self):\n        \"\"\"\n        To obtain all the to-be-compressed modules.\n\n        Returns\n        -------\n        list\n            a list of the layers, each of which is a tuple (`layer`, `config`),\n            `layer` is `LayerInfo`, `config` is a `dict`\n        \"\"\"\n        return self.modules_to_compress\n\n    def get_modules_wrapper(self):\n        \"\"\"\n        To obtain all the wrapped modules.\n\n        Returns\n        -------\n        list\n            a list of the wrapped modules\n        \"\"\"\n        return self.modules_wrapper\n\n    def select_config(self, layer):\n        \"\"\"\n        Find the configuration for `layer` by parsing `self.config_list`\n\n        Parameters\n        ----------\n        layer : LayerInfo\n            one layer\n\n        Returns\n        -------\n        config or None\n            the retrieved configuration for this layer, if None, this layer should\n            not be compressed\n        \"\"\"\n        ret = None\n        for config in self.config_list:\n            config = config.copy()\n            # expand config if key `default` is in config['op_types']\n            if 'op_types' in config and 'default' in config['op_types']:\n                expanded_op_types = []\n                for op_type in config['op_types']:\n                    if op_type == 'default':\n                        expanded_op_types.extend(default_layers.weighted_modules)\n                    else:\n                        expanded_op_types.append(op_type)\n                config['op_types'] = expanded_op_types\n\n            # check if condition is satisified\n            if 'op_types' in config and layer.type not in config['op_types']:\n                continue\n            if 'op_names' in config and layer.name not in config['op_names']:\n                continue\n\n            ret = config\n        if ret is None or 'exclude' in ret:\n            return None\n        return ret\n\n    def update_epoch(self, epoch):\n        \"\"\"\n        If user want to update model every epoch, user can override this method.\n        This method should be called at the beginning of each epoch\n\n        Parameters\n        ----------\n        epoch : num\n            the current epoch number\n        \"\"\"\n        pass\n\n    def _wrap_modules(self, layer, config):\n        \"\"\"\n        This method is implemented in the subclasses, i.e., `Pruner` and `Quantizer`\n\n        Parameters\n        ----------\n        layer : LayerInfo\n            the layer to instrument the compression operation\n        config : dict\n            the configuration for compressing this layer\n        \"\"\"\n        raise NotImplementedError()\n\n\n    def add_activation_collector(self, collector):\n        self._fwd_hook_id += 1\n        self._fwd_hook_handles[self._fwd_hook_id] = []\n        for wrapper in self.get_modules_wrapper():\n            handle = wrapper.register_forward_hook(collector)\n            self._fwd_hook_handles[self._fwd_hook_id].append(handle)\n        return self._fwd_hook_id\n\n    def remove_activation_collector(self, fwd_hook_id):\n        if fwd_hook_id not in self._fwd_hook_handles:\n            raise ValueError(\"%s is not a valid collector id\" % str(fwd_hook_id))\n        for handle in self._fwd_hook_handles[fwd_hook_id]:\n            handle.remove()\n        del self._fwd_hook_handles[fwd_hook_id]\n\n    def patch_optimizer(self, *tasks):\n        def patch_step(old_step):\n            def new_step(_, *args, **kwargs):\n                # call origin optimizer step method\n                output = old_step(*args, **kwargs)\n                # calculate mask\n                for task in tasks:\n                    task()\n                return output\n            return new_step\n        if self.optimizer is not None:\n            self.optimizer.step = types.MethodType(patch_step(self.optimizer.step), self.optimizer)\n\nclass PrunerModuleWrapper(torch.nn.Module):\n    def __init__(self, module, module_name, module_type, config, pruner):\n        \"\"\"\n        Wrap an module to enable data parallel, forward method customization and buffer registeration.\n\n        Parameters\n        ----------\n        module : pytorch module\n            the module user wants to compress\n        config : dict\n            the configurations that users specify for compression\n        module_name : str\n            the name of the module to compress, wrapper module shares same name\n        module_type : str\n            the type of the module to compress\n        pruner ： Pruner\n            the pruner used to calculate mask\n        \"\"\"\n        super().__init__()\n        # origin layer information\n        self.module = module\n        self.name = module_name\n        self.type = module_type\n        # config and pruner\n        self.config = config\n        self.pruner = pruner\n\n        # register buffer for mask\n        self.register_buffer(\"weight_mask\", torch.ones(self.module.weight.shape))\n        if hasattr(self.module, 'bias') and self.module.bias is not None:\n            self.register_buffer(\"bias_mask\", torch.ones(self.module.bias.shape))\n        else:\n            self.register_buffer(\"bias_mask\", None)\n\n    def forward(self, *inputs):\n        # apply mask to weight, bias\n        self.module.weight.data = self.module.weight.data.mul_(self.weight_mask)\n        if hasattr(self.module, 'bias') and self.module.bias is not None:\n            self.module.bias.data = self.module.bias.data.mul_(self.bias_mask)\n        return self.module(*inputs)\n\nclass Pruner(Compressor):\n    \"\"\"\n    Prune to an exact pruning level specification\n\n    Attributes\n    ----------\n    mask_dict : dict\n        Dictionary for saving masks, `key` should be layer name and\n        `value` should be a tensor which has the same shape with layer's weight\n\n    \"\"\"\n\n    def __init__(self, model, config_list, optimizer=None):\n        super().__init__(model, config_list, optimizer)\n        if optimizer is not None:\n            self.patch_optimizer(self.update_mask)\n\n    def compress(self):\n        self.update_mask()\n        return self.bound_model\n\n    def update_mask(self):\n        for wrapper_idx, wrapper in enumerate(self.get_modules_wrapper()):\n            masks = self.calc_mask(wrapper, wrapper_idx=wrapper_idx)\n            if masks is not None:\n                for k in masks:\n                    assert hasattr(wrapper, k), \"there is no attribute '%s' in wrapper\" % k\n                    setattr(wrapper, k, masks[k])\n\n    def calc_mask(self, wrapper, **kwargs):\n        \"\"\"\n        Pruners should overload this method to provide mask for weight tensors.\n        The mask must have the same shape and type comparing to the weight.\n        It will be applied with `mul()` operation on the weight.\n        This method is effectively hooked to `forward()` method of the model.\n\n        Parameters\n        ----------\n        wrapper : Module\n            calculate mask for `wrapper.module`'s weight\n        \"\"\"\n        raise NotImplementedError(\"Pruners must overload calc_mask()\")\n\n    def _wrap_modules(self, layer, config):\n        \"\"\"\n        Create a wrapper module to replace the original one.\n\n        Parameters\n        ----------\n        layer : LayerInfo\n            the layer to instrument the mask\n        config : dict\n            the configuration for generating the mask\n        \"\"\"\n        _logger.debug(\"Module detected to compress : %s.\", layer.name)\n        wrapper = PrunerModuleWrapper(layer.module, layer.name, layer.type, config, self)\n        assert hasattr(layer.module, 'weight'), \"module %s does not have 'weight' attribute\" % layer.name\n        # move newly registered buffers to the same device of weight\n        wrapper.to(layer.module.weight.device)\n        return wrapper\n\n    def get_mask_dict(self):\n        \"\"\"\n        Builds mask dictionary for saving to disk or otherwise\n        \n        Returns\n        -------\n        mask_dict\n            dictionary containing weight and bias pruning masks\n\n        \"\"\"\n        mask_dict = {}\n        for wrapper in self.get_modules_wrapper():\n            weight_mask = wrapper.weight_mask\n            bias_mask = wrapper.bias_mask\n            if weight_mask is not None:\n                mask_sum = weight_mask.sum().item()\n                mask_num = weight_mask.numel()\n                _logger.debug('Layer: %s  Sparsity: %.4f', wrapper.name, 1 - mask_sum / mask_num)\n                wrapper.module.weight.data = wrapper.module.weight.data.mul(weight_mask)\n            if bias_mask is not None:\n                wrapper.module.bias.data = wrapper.module.bias.data.mul(bias_mask)\n            # save mask to dict\n            mask_dict[wrapper.name] = {\"weight\": weight_mask, \"bias\": bias_mask}\n        return mask_dict\n\n    def export_model(self, model_path, mask_path=None, onnx_path=None, input_shape=None, device=None):\n        \"\"\"\n        Export pruned model weights, masks and onnx model(optional)\n\n        Parameters\n        ----------\n        model_path : str\n            path to save pruned model state_dict\n        mask_path : str\n            (optional) path to save mask dict\n        onnx_path : str\n            (optional) path to save onnx model\n        input_shape : list or tuple\n            input shape to onnx model\n        device : torch.device\n            device of the model, used to place the dummy input tensor for exporting onnx file.\n            the tensor is placed on cpu if ```device``` is None\n        \"\"\"\n        assert model_path is not None, 'model_path must be specified'\n\n        self._unwrap_model() # used for generating correct state_dict name without wrapper state\n        mask_dict = self.get_mask_dict()\n\n        torch.save(self.bound_model.state_dict(), model_path)\n        _logger.info('Model state_dict saved to %s', model_path)\n        if mask_path is not None:\n            torch.save(mask_dict, mask_path)\n            _logger.info('Mask dict saved to %s', mask_path)\n        if onnx_path is not None:\n            assert input_shape is not None, 'input_shape must be specified to export onnx model'\n            # input info needed\n            if device is None:\n                device = torch.device('cpu')\n            input_data = torch.Tensor(*input_shape)\n            torch.onnx.export(self.bound_model, input_data.to(device), onnx_path)\n            _logger.info('Model in onnx with input shape %s saved to %s', input_data.shape, onnx_path)\n\n        self._wrap_model()\n\n    def load_model_state_dict(self, model_state):\n        \"\"\"\n        Load the state dict saved from unwrapped model.\n\n        Parameters:\n        -----------\n        model_state : dict\n            state dict saved from unwrapped model\n        \"\"\"\n        if self.is_wrapped:\n            self._unwrap_model()\n            self.bound_model.load_state_dict(model_state)\n            self._wrap_model()\n        else:\n            self.bound_model.load_state_dict(model_state)\n\nclass QuantizerModuleWrapper(torch.nn.Module):\n    def __init__(self, module, module_name, module_type, config, quantizer):\n        \"\"\"\n        Wrap an module to enable data parallel, forward method customization and buffer registeration.\n\n        Parameters\n        ----------\n        module : pytorch module\n            the module user wants to compress\n        config : dict\n            the configurations that users specify for compression\n        module_name : str\n            the name of the module to compress, wrapper module shares same name\n        module_type : str\n            the type of the module to compress\n        quantizer ：quantizer\n            the quantizer used to calculate mask\n        \"\"\"\n        super().__init__()\n        # origin layer information\n        self.module = module\n        self.name = module_name\n        self.type = module_type\n        # config and pruner\n        self.config = config\n        self.quantizer = quantizer\n\n        # register buffer and parameter\n        # old_weight is used to store origin weight and weight is used to store quantized weight\n        # the reason why weight is buffer instead of parameter is because in pytorch parameter is used as leaf\n        # if weight is leaf , then old_weight can not be updated.\n        if 'weight' in config['quant_types']:\n            if not _check_weight(self.module):\n                _logger.warning('Module %s does not have parameter \"weight\"', self.name)\n            else:\n                self.module.register_parameter('old_weight', torch.nn.Parameter(self.module.weight))\n                delattr(self.module, 'weight')\n                self.module.register_buffer('weight', self.module.old_weight)\n\n    def forward(self, *inputs):\n        if 'input' in self.config['quant_types']:\n            inputs = self.quantizer.quant_grad.apply(\n                inputs,\n                QuantType.QUANT_INPUT,\n                self)\n\n        if 'weight' in self.config['quant_types'] and _check_weight(self.module):\n            self.quantizer.quant_grad.apply(\n                self.module.old_weight,\n                QuantType.QUANT_WEIGHT,\n                self)\n            result = self.module(*inputs)\n        else:\n            result = self.module(*inputs)\n\n        if 'output' in self.config['quant_types']:\n            result = self.quantizer.quant_grad.apply(\n                result,\n                QuantType.QUANT_OUTPUT,\n                self)\n        return result\n\nclass Quantizer(Compressor):\n    \"\"\"\n    Base quantizer for pytorch quantizer\n    \"\"\"\n\n    def __init__(self, model, config_list, optimizer=None):\n        super().__init__(model, config_list, optimizer)\n        self.quant_grad = QuantGrad\n        if self.optimizer is not None:\n            self.patch_optimizer(self.step_with_optimizer)\n            for wrapper in self.get_modules_wrapper():\n                if 'weight' in wrapper.config['quant_types']:\n                    # old_weight is registered to keep track of weight before quantization\n                    # and it is trainable, therefore, it should be added to optimizer.\n                    self.optimizer.add_param_group({\"params\": wrapper.module.old_weight})\n\n    def quantize_weight(self, weight, wrapper, **kwargs):\n        \"\"\"\n        quantize should overload this method to quantize weight.\n        This method is effectively hooked to :meth:`forward` of the model.\n        Parameters\n        ----------\n        weight : Tensor\n            weight that needs to be quantized\n        wrapper : QuantizerModuleWrapper\n            the wrapper for origin module\n        \"\"\"\n        raise NotImplementedError('Quantizer must overload quantize_weight()')\n\n    def quantize_output(self, output, wrapper, **kwargs):\n        \"\"\"\n        quantize should overload this method to quantize output.\n        This method is effectively hooked to :meth:`forward` of the model.\n        Parameters\n        ----------\n        output : Tensor\n            output that needs to be quantized\n        wrapper : QuantizerModuleWrapper\n            the wrapper for origin module\n        \"\"\"\n        raise NotImplementedError('Quantizer must overload quantize_output()')\n\n    def quantize_input(self, *inputs, wrapper, **kwargs):\n        \"\"\"\n        quantize should overload this method to quantize input.\n        This method is effectively hooked to :meth:`forward` of the model.\n        Parameters\n        ----------\n        inputs : Tensor\n            inputs that needs to be quantized\n        wrapper : QuantizerModuleWrapper\n            the wrapper for origin module\n        \"\"\"\n        raise NotImplementedError('Quantizer must overload quantize_input()')\n\n\n    def _wrap_modules(self, layer, config):\n        \"\"\"\n        Create a wrapper forward function to replace the original one.\n        Parameters\n        ----------\n        layer : LayerInfo\n            the layer to instrument the mask\n        config : dict\n            the configuration for quantization\n        \"\"\"\n        assert 'quant_types' in config, 'must provide quant_types in config'\n        assert isinstance(config['quant_types'], list), 'quant_types must be list type'\n        assert 'quant_bits' in config, 'must provide quant_bits in config'\n        assert isinstance(config['quant_bits'], int) or isinstance(config['quant_bits'], dict), 'quant_bits must be dict type or int type'\n\n        if isinstance(config['quant_bits'], dict):\n            for quant_type in config['quant_types']:\n                assert quant_type in config['quant_bits'], 'bits length for %s must be specified in quant_bits dict' % quant_type\n\n        return QuantizerModuleWrapper(layer.module, layer.name, layer.type, config, self)\n\n    def step_with_optimizer(self):\n        pass\n\nclass QuantType:\n    \"\"\"\n    Enum class for quantization type.\n    \"\"\"\n    QUANT_INPUT = 0\n    QUANT_WEIGHT = 1\n    QUANT_OUTPUT = 2\n\nQType_Dict = {\n    0: \"input\",\n    1: \"weight\",\n    2: \"output\"\n}\n\nclass QuantGrad(torch.autograd.Function):\n    \"\"\"\n    Base class for overriding backward function of quantization operation.\n    \"\"\"\n    @classmethod\n    def _quantize(cls, x, scale, zero_point):\n        \"\"\"\n        Reference function for quantizing x -- non-clamped.\n        Parameters\n        ----------\n        x : Tensor\n            tensor to be quantized\n        scale : Tensor\n            scale for quantizing x\n        zero_point : Tensor\n            zero_point for quantizing x\n        Returns\n        -------\n        tensor\n            quantized x without clamped\n        \"\"\"\n        return ((x / scale) + zero_point).round()\n    @classmethod\n    def get_bits_length(cls, config, quant_type):\n        \"\"\"\n        Get bit for quantize config\n        Parameters\n        ----------\n        config : Dict\n            the configuration for quantization\n        quant_type : str\n            quant type\n        Returns\n        -------\n        int\n            n-bits for quantization configuration\n        \"\"\"\n        if isinstance(config[\"quant_bits\"], int):\n            return config[\"quant_bits\"]\n        else:\n            return config[\"quant_bits\"].get(quant_type)\n\n    @staticmethod\n    def quant_backward(tensor, grad_output, quant_type, scale, zero_point, qmin, qmax):\n        \"\"\"\n        This method should be overrided by subclass to provide customized backward function,\n        default implementation is Straight-Through Estimator\n        Parameters\n        ----------\n        tensor : Tensor\n            input of quantization operation\n        grad_output : Tensor\n            gradient of the output of quantization operation\n        scale : Tensor\n            the type of quantization, it can be `QuantType.QUANT_INPUT`, `QuantType.QUANT_WEIGHT`, `QuantType.QUANT_OUTPUT`,\n            you can define different behavior for different types.\n        zero_point : Tensor\n            zero_point for quantizing tensor\n        qmin : Tensor\n            quant_min for quantizing tensor\n        qmax : Tensor\n            quant_max for quantizng tensor\n        Returns\n        -------\n        tensor\n            gradient of the input of quantization operation\n        \"\"\"\n        return grad_output\n\n    @staticmethod\n    def forward(ctx, tensor, quant_type, wrapper, **kwargs):\n        if quant_type == QuantType.QUANT_INPUT:\n            output = wrapper.quantizer.quantize_input(tensor, wrapper, **kwargs)\n        elif quant_type == QuantType.QUANT_WEIGHT:\n            output = wrapper.quantizer.quantize_weight(wrapper, **kwargs)\n        elif quant_type == QuantType.QUANT_OUTPUT:\n            output = wrapper.quantizer.quantize_output(tensor, wrapper, **kwargs)\n        else:\n            raise ValueError(\"unrecognized QuantType.\")\n\n\n        bits = QuantGrad.get_bits_length(wrapper.config, QType_Dict[quant_type])\n        qmin, qmax = torch.Tensor([0]).to(tensor.device), torch.Tensor([(1 << bits) - 1]).to(tensor.device)\n        if hasattr(wrapper.module, 'scale') and hasattr(wrapper.module, 'zero_point'):\n            scale = wrapper.module.scale\n            zero_point = wrapper.module.zero_point\n        else:\n            scale, zero_point = None, None\n        ctx.save_for_backward(tensor, torch.Tensor([quant_type]), scale, zero_point, qmin, qmax)\n        return output\n\n    @classmethod\n    def backward(cls, ctx, grad_output):\n        tensor, quant_type, scale, zero_point, qmin, qmax = ctx.saved_variables\n        output = cls.quant_backward(tensor, grad_output, quant_type, scale, zero_point, qmin, qmax)\n        return output, None, None, None\n\ndef _check_weight(module):\n    try:\n        return isinstance(module.weight.data, torch.Tensor)\n    except AttributeError:\n        return False\n"
  },
  {
    "path": "src/aup/compression/torch/default_layers.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\nweighted_modules = [\n    'Conv1d', 'Conv2d', 'Conv3d', 'ConvTranspose1d', 'ConvTranspose2d', 'ConvTranspose3d',\n    'Linear', 'Bilinear',\n    'PReLU',\n    'Embedding', 'EmbeddingBag',\n]\n"
  },
  {
    "path": "src/aup/compression/torch/parameter_expressions.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n'''\nparameter_expression.py\n'''\n\nimport numpy as np\n\n\ndef choice(options, random_state):\n    '''\n    options: 1-D array-like or int\n    random_state: an object of numpy.random.RandomState\n    '''\n    return random_state.choice(options)\n\n\ndef randint(lower, upper, random_state):\n    '''\n    Generate a random integer from `lower` (inclusive) to `upper` (exclusive).\n    lower: an int that represent an lower bound\n    upper: an int that represent an upper bound\n    random_state: an object of numpy.random.RandomState\n    '''\n    return random_state.randint(lower, upper)\n\n\ndef uniform(low, high, random_state):\n    '''\n    low: an float that represent an lower bound\n    high: an float that represent an upper bound\n    random_state: an object of numpy.random.RandomState\n    '''\n    assert high >= low, 'Upper bound must be larger than lower bound'\n    return random_state.uniform(low, high)\n\n\ndef quniform(low, high, q, random_state):\n    '''\n    low: an float that represent an lower bound\n    high: an float that represent an upper bound\n    q: sample step\n    random_state: an object of numpy.random.RandomState\n    '''\n    return np.clip(np.round(uniform(low, high, random_state) / q) * q, low, high)\n\n\ndef loguniform(low, high, random_state):\n    '''\n    low: an float that represent an lower bound\n    high: an float that represent an upper bound\n    random_state: an object of numpy.random.RandomState\n    '''\n    assert low > 0, 'Lower bound must be positive'\n    return np.exp(uniform(np.log(low), np.log(high), random_state))\n\n\ndef qloguniform(low, high, q, random_state):\n    '''\n    low: an float that represent an lower bound\n    high: an float that represent an upper bound\n    q: sample step\n    random_state: an object of numpy.random.RandomState\n    '''\n    return np.clip(np.round(loguniform(low, high, random_state) / q) * q, low, high)\n\n\ndef normal(mu, sigma, random_state):\n    '''\n    The probability density function of the normal distribution,\n    first derived by De Moivre and 200 years later by both Gauss and Laplace independently.\n    mu: float or array_like of floats\n        Mean (“centre”) of the distribution.\n    sigma: float or array_like of floats\n           Standard deviation (spread or “width”) of the distribution.\n    random_state: an object of numpy.random.RandomState\n    '''\n    return random_state.normal(mu, sigma)\n\n\ndef qnormal(mu, sigma, q, random_state):\n    '''\n    mu: float or array_like of floats\n    sigma: float or array_like of floats\n    q: sample step\n    random_state: an object of numpy.random.RandomState\n    '''\n    return np.round(normal(mu, sigma, random_state) / q) * q\n\n\ndef lognormal(mu, sigma, random_state):\n    '''\n    mu: float or array_like of floats\n    sigma: float or array_like of floats\n    random_state: an object of numpy.random.RandomState\n    '''\n    return np.exp(normal(mu, sigma, random_state))\n\n\ndef qlognormal(mu, sigma, q, random_state):\n    '''\n    mu: float or array_like of floats\n    sigma: float or array_like of floats\n    q: sample step\n    random_state: an object of numpy.random.RandomState\n    '''\n    return np.round(lognormal(mu, sigma, random_state) / q) * q\n"
  },
  {
    "path": "src/aup/compression/torch/pruning/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\nfrom .finegrained_pruning import *\nfrom .structured_pruning import *\nfrom .apply_compression import apply_compression_results\nfrom .one_shot import *\nfrom .agp import *\nfrom .lottery_ticket import LotteryTicketPruner\nfrom .simulated_annealing_pruner import SimulatedAnnealingPruner\nfrom .net_adapt_pruner import NetAdaptPruner\nfrom .admm_pruner import ADMMPruner\nfrom .auto_compress_pruner import AutoCompressPruner\nfrom .sensitivity_pruner import SensitivityPruner\nfrom .amc import AMCPruner\n"
  },
  {
    "path": "src/aup/compression/torch/pruning/admm_pruner.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n# Modified work Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nimport logging\nimport torch\nfrom schema import And, Optional\nimport copy\n\nfrom ..utils.config_validation import CompressorSchema\nfrom .constants import MASKER_DICT\nfrom .one_shot import OneshotPruner\n\n\n_logger = logging.getLogger(__name__)\n\n\nclass ADMMPruner(OneshotPruner):\n    \"\"\"\n    A Pytorch implementation of ADMM Pruner algorithm.\n\n    Parameters\n    ----------\n    model : torch.nn.Module\n        Model to be pruned.\n    config_list : list\n        List on pruning configs.\n    trainer : function\n        Function used for the first subproblem.\n        Users should write this function as a normal function to train the Pytorch model\n        and include `model, optimizer, criterion, epoch, callback` as function arguments.\n        Here `callback` acts as an L2 regulizer as presented in the formula (7) of the original paper.\n        The logic of `callback` is implemented inside the Pruner,\n        users are just required to insert `callback()` between `loss.backward()` and `optimizer.step()`.\n        Example::\n\n            def trainer(model, criterion, optimizer, epoch, callback):\n                device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n                train_loader = ...\n                model.train()\n                for batch_idx, (data, target) in enumerate(train_loader):\n                    data, target = data.to(device), target.to(device)\n                    optimizer.zero_grad()\n                    output = model(data)\n                    loss = criterion(output, target)\n                    loss.backward()\n                    # callback should be inserted between loss.backward() and optimizer.step()\n                    if callback:\n                        callback()\n                    optimizer.step()\n    num_iterations : int\n        Total number of iterations.\n    training_epochs : int\n        Training epochs of the first subproblem.\n    row : float\n        Penalty parameters for ADMM training.\n    base_algo : str\n        Base pruning algorithm. `level`, `l1`, `l2` or `fpgm`, by default `l1`. Given the sparsity distribution among the ops,\n        the assigned `base_algo` is used to decide which filters/channels/weights to prune.\n\n    \"\"\"\n\n    def __init__(self, model, config_list, trainer, num_iterations=30, training_epochs=5, row=1e-4, base_algo='l1'):\n        self._base_algo = base_algo\n\n        super().__init__(model, config_list)\n\n        self._trainer = trainer\n        self._num_iterations = num_iterations\n        self._training_epochs = training_epochs\n        self._row = row\n\n        self.set_wrappers_attribute(\"if_calculated\", False)\n        self.masker = MASKER_DICT[self._base_algo](self.bound_model, self)\n\n    def validate_config(self, model, config_list):\n        \"\"\"\n        Parameters\n        ----------\n        model : torch.nn.Module\n            Model to be pruned\n        config_list : list\n            List on pruning configs\n        \"\"\"\n\n        if self._base_algo == 'level':\n            schema = CompressorSchema([{\n                'sparsity': And(float, lambda n: 0 < n < 1),\n                Optional('op_types'): [str],\n                Optional('op_names'): [str],\n            }], model, _logger)\n        elif self._base_algo in ['l1', 'l2', 'fpgm']:\n            schema = CompressorSchema([{\n                'sparsity': And(float, lambda n: 0 < n < 1),\n                'op_types': ['Conv2d'],\n                Optional('op_names'): [str]\n            }], model, _logger)\n\n        schema.validate(config_list)\n\n    def _projection(self, weight, sparsity, wrapper):\n        '''\n        Return the Euclidean projection of the weight matrix according to the pruning mode.\n\n        Parameters\n        ----------\n        weight : tensor\n            original matrix\n        sparsity : float\n            the ratio of parameters which need to be set to zero\n        wrapper: PrunerModuleWrapper\n            layer wrapper of this layer\n\n        Returns\n        -------\n        tensor\n            the projected matrix\n        '''\n        wrapper_copy = copy.deepcopy(wrapper)\n        wrapper_copy.module.weight.data = weight\n        return weight.data.mul(self.masker.calc_mask(sparsity, wrapper_copy)['weight_mask'])\n\n    def compress(self):\n        \"\"\"\n        Compress the model with ADMM.\n\n        Returns\n        -------\n        torch.nn.Module\n            model with specified modules compressed.\n        \"\"\"\n        _logger.info('Starting ADMM Compression...')\n\n        # initiaze Z, U\n        # Z_i^0 = W_i^0\n        # U_i^0 = 0\n        Z = []\n        U = []\n        for wrapper in self.get_modules_wrapper():\n            z = wrapper.module.weight.data\n            Z.append(z)\n            U.append(torch.zeros_like(z))\n\n        optimizer = torch.optim.Adam(\n            self.bound_model.parameters(), lr=1e-3, weight_decay=5e-5)\n\n        # Loss = cross_entropy +  l2 regulization + \\Sum_{i=1}^N \\row_i ||W_i - Z_i^k + U_i^k||^2\n        criterion = torch.nn.CrossEntropyLoss()\n\n        # callback function to do additonal optimization, refer to the deriatives of Formula (7)\n        def callback():\n            for i, wrapper in enumerate(self.get_modules_wrapper()):\n                wrapper.module.weight.data -= self._row * \\\n                    (wrapper.module.weight.data - Z[i] + U[i])\n\n        # optimization iteration\n        for k in range(self._num_iterations):\n            _logger.info('ADMM iteration : %d', k)\n\n            # step 1: optimize W with AdamOptimizer\n            for epoch in range(self._training_epochs):\n                self._trainer(self.bound_model, optimizer=optimizer,\n                              criterion=criterion, epoch=epoch, callback=callback)\n\n            # step 2: update Z, U\n            # Z_i^{k+1} = projection(W_i^{k+1} + U_i^k)\n            # U_i^{k+1} = U^k + W_i^{k+1} - Z_i^{k+1}\n            for i, wrapper in enumerate(self.get_modules_wrapper()):\n                z = wrapper.module.weight.data + U[i]\n                Z[i] = self._projection(z, wrapper.config['sparsity'], wrapper)\n                U[i] = U[i] + wrapper.module.weight.data - Z[i]\n\n        # apply prune\n        self.update_mask()\n\n        _logger.info('Compression finished.')\n\n        return self.bound_model\n"
  },
  {
    "path": "src/aup/compression/torch/pruning/agp.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n# Modified work Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\nAn automated gradual pruning algorithm that prunes the smallest magnitude\nweights to achieve a preset level of network sparsity.\nMichael Zhu and Suyog Gupta, \"To prune, or not to prune: exploring the\nefficacy of pruning for model compression\", 2017 NIPS Workshop on Machine\nLearning of Phones and other Consumer Devices.\n\"\"\"\n\nimport logging\nimport torch\nfrom schema import And, Optional\nfrom .constants import MASKER_DICT\nfrom ..utils.config_validation import CompressorSchema\nfrom ..compressor import Pruner\n\n__all__ = ['AGPPruner']\n\nlogger = logging.getLogger('torch pruner')\n\nclass AGPPruner(Pruner):\n    \"\"\"\n    Parameters\n    ----------\n    model : torch.nn.Module\n        Model to be pruned.\n    config_list : listlist\n        Supported keys:\n            - initial_sparsity: This is to specify the sparsity when compressor starts to compress.\n            - final_sparsity: This is to specify the sparsity when compressor finishes to compress.\n            - start_epoch: This is to specify the epoch number when compressor starts to compress, default start from epoch 0.\n            - end_epoch: This is to specify the epoch number when compressor finishes to compress.\n            - frequency: This is to specify every *frequency* number epochs compressor compress once, default frequency=1.\n    optimizer: torch.optim.Optimizer\n        Optimizer used to train model.\n    pruning_algorithm: str\n        Algorithms being used to prune model,\n        choose from `['level', 'slim', 'l1', 'l2', 'fpgm', 'taylorfo', 'apoz', 'mean_activation']`, by default `level`\n    \"\"\"\n\n    def __init__(self, model, config_list, optimizer, pruning_algorithm='level'):\n        super().__init__(model, config_list, optimizer)\n        assert isinstance(optimizer, torch.optim.Optimizer), \"AGP pruner is an iterative pruner, please pass optimizer of the model to it\"\n        self.masker = MASKER_DICT[pruning_algorithm](model, self)\n\n        self.now_epoch = 0\n        self.set_wrappers_attribute(\"if_calculated\", False)\n\n    def validate_config(self, model, config_list):\n        \"\"\"\n        Parameters\n        ----------\n        model : torch.nn.Module\n            Model to be pruned\n        config_list : list\n            List on pruning configs\n        \"\"\"\n        schema = CompressorSchema([{\n            'initial_sparsity': And(float, lambda n: 0 <= n <= 1),\n            'final_sparsity': And(float, lambda n: 0 <= n <= 1),\n            'start_epoch': And(int, lambda n: n >= 0),\n            'end_epoch': And(int, lambda n: n >= 0),\n            'frequency': And(int, lambda n: n > 0),\n            Optional('op_types'): [str],\n            Optional('op_names'): [str]\n        }], model, logger)\n\n        schema.validate(config_list)\n\n    def calc_mask(self, wrapper, wrapper_idx=None):\n        \"\"\"\n        Calculate the mask of given layer.\n        Scale factors with the smallest absolute value in the BN layer are masked.\n        Parameters\n        ----------\n        wrapper : Module\n            the layer to instrument the compression operation\n        wrapper_idx: int\n            index of this wrapper in pruner's all wrappers\n        Returns\n        -------\n        dict | None\n            Dictionary for storing masks, keys of the dict:\n            'weight_mask':  weight mask tensor\n            'bias_mask': bias mask tensor (optional)\n        \"\"\"\n\n        config = wrapper.config\n\n        start_epoch = config.get('start_epoch', 0)\n        freq = config.get('frequency', 1)\n\n        if wrapper.if_calculated:\n            return None\n        if not (self.now_epoch >= start_epoch and (self.now_epoch - start_epoch) % freq == 0):\n            return None\n\n        target_sparsity = self.compute_target_sparsity(config)\n        new_mask = self.masker.calc_mask(sparsity=target_sparsity, wrapper=wrapper, wrapper_idx=wrapper_idx)\n        if new_mask is not None:\n            wrapper.if_calculated = True\n\n        return new_mask\n\n    def compute_target_sparsity(self, config):\n        \"\"\"\n        Calculate the sparsity for pruning\n        Parameters\n        ----------\n        config : dict\n            Layer's pruning config\n        Returns\n        -------\n        float\n            Target sparsity to be pruned\n        \"\"\"\n\n        end_epoch = config.get('end_epoch', 1)\n        start_epoch = config.get('start_epoch', 0)\n        freq = config.get('frequency', 1)\n        final_sparsity = config.get('final_sparsity', 0)\n        initial_sparsity = config.get('initial_sparsity', 0)\n        if end_epoch <= start_epoch or initial_sparsity >= final_sparsity:\n            logger.warning('your end epoch <= start epoch or initial_sparsity >= final_sparsity')\n            return final_sparsity\n\n        if end_epoch <= self.now_epoch:\n            return final_sparsity\n\n        span = ((end_epoch - start_epoch - 1) // freq) * freq\n        assert span > 0\n        target_sparsity = (final_sparsity +\n                           (initial_sparsity - final_sparsity) *\n                           (1.0 - ((self.now_epoch - start_epoch) / span)) ** 3)\n        return target_sparsity\n\n    def update_epoch(self, epoch):\n        \"\"\"\n        Update epoch\n        Parameters\n        ----------\n        epoch : int\n            current training epoch\n        \"\"\"\n\n        if epoch > 0:\n            self.now_epoch = epoch\n            for wrapper in self.get_modules_wrapper():\n                wrapper.if_calculated = False\n"
  },
  {
    "path": "src/aup/compression/torch/pruning/amc/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\nfrom .amc_pruner import AMCPruner\n"
  },
  {
    "path": "src/aup/compression/torch/pruning/amc/amc_pruner.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n# Modified work Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nimport os\nimport logging\nfrom copy import deepcopy\nfrom argparse import Namespace\nimport numpy as np\nimport torch\nfrom torch.utils.tensorboard import SummaryWriter\n\nfrom ...compressor import Pruner\nfrom .channel_pruning_env import ChannelPruningEnv\nfrom .lib.agent import DDPG\nfrom .lib.utils import get_output_folder\n\ntorch.backends.cudnn.deterministic = True\n\n_logger = logging.getLogger(__name__)\n\nclass AMCPruner(Pruner):\n    \"\"\"\n    A pytorch implementation of AMC: AutoML for Model Compression and Acceleration on Mobile Devices.\n    (https://arxiv.org/pdf/1802.03494.pdf)\n\n    Parameters:\n        model: nn.Module\n            The model to be pruned.\n        config_list: list\n            Configuration list to configure layer pruning.\n            Supported keys:\n            - op_types: operation type to be pruned\n            - op_names: operation name to be pruned\n        evaluator: function\n            function to evaluate the pruned model.\n            The prototype of the function:\n            >>> def evaluator(val_loader, model):\n            >>>     ...\n            >>>     return acc\n        val_loader: torch.utils.data.DataLoader\n            Data loader of validation dataset.\n        suffix: str\n            suffix to help you remember what experiment you ran. Default: None.\n\n        # parameters for pruning environment\n        model_type: str\n            model type to prune, currently 'mobilenet' and 'mobilenetv2' are supported. Default: mobilenet\n        flops_ratio: float\n            preserve flops ratio. Default: 0.5\n        lbound: float\n            minimum weight preserve ratio for each layer. Default: 0.2\n        rbound: float\n            maximum weight preserve ratio for each layer. Default: 1.0\n        reward: function\n            reward function type:\n            - acc_reward: accuracy * 0.01\n            - acc_flops_reward: - (100 - accuracy) * 0.01 * np.log(flops)\n            Default: acc_reward\n        # parameters for channel pruning\n        n_calibration_batches: int\n            number of batches to extract layer information. Default: 60\n        n_points_per_layer: int\n            number of feature points per layer. Default: 10\n        channel_round: int\n            round channel to multiple of channel_round. Default: 8\n\n        # parameters for ddpg agent\n        hidden1: int\n            hidden num of first fully connect layer. Default: 300\n        hidden2: int\n            hidden num of second fully connect layer. Default: 300\n        lr_c: float\n            learning rate for critic. Default: 1e-3\n        lr_a: float\n            learning rate for actor. Default: 1e-4\n        warmup: int\n            number of episodes without training but only filling the replay memory. During warmup episodes,\n            random actions ares used for pruning. Default: 100\n        discount: float\n            next Q value discount for deep Q value target. Default: 0.99\n        bsize: int\n            minibatch size for training DDPG agent. Default: 64\n        rmsize: int\n            memory size for each layer. Default: 100\n        window_length: int\n            replay buffer window length. Default: 1\n        tau: float\n            moving average for target network being used by soft_update. Default: 0.99\n        # noise\n        init_delta: float\n            initial variance of truncated normal distribution\n        delta_decay: float\n            delta decay during exploration\n\n        # parameters for training ddpg agent\n        max_episode_length: int\n            maximum episode length\n        output_dir: str\n            output directory to save log files and model files. Default: ./logs\n        debug: boolean\n            debug mode\n        train_episode: int\n            train iters each timestep. Default: 800\n        epsilon: int\n            linear decay of exploration policy. Default: 50000\n        seed: int\n            random seed to set for reproduce experiment. Default: None\n    \"\"\"\n\n    def __init__(\n            self,\n            model,\n            config_list,\n            evaluator,\n            val_loader,\n            suffix=None,\n            model_type='mobilenet',\n            dataset='cifar10',\n            flops_ratio=0.5,\n            lbound=0.2,\n            rbound=1.,\n            reward='acc_reward',\n            n_calibration_batches=60,\n            n_points_per_layer=10,\n            channel_round=8,\n            hidden1=300,\n            hidden2=300,\n            lr_c=1e-3,\n            lr_a=1e-4,\n            warmup=100,\n            discount=1.,\n            bsize=64,\n            rmsize=100,\n            window_length=1,\n            tau=0.01,\n            init_delta=0.5,\n            delta_decay=0.99,\n            max_episode_length=1e9,\n            output_dir='./logs',\n            debug=False,\n            train_episode=800,\n            epsilon=50000,\n            seed=None):\n\n        self.val_loader = val_loader\n        self.evaluator = evaluator\n\n        if seed is not None:\n            np.random.seed(seed)\n            torch.manual_seed(seed)\n            torch.cuda.manual_seed(seed)\n\n        checkpoint = deepcopy(model.state_dict())\n\n        super().__init__(model, config_list, optimizer=None)\n\n        # build folder and logs\n        base_folder_name = '{}_{}_r{}_search'.format(model_type, dataset, flops_ratio)\n        if suffix is not None:\n            self.output_dir = os.path.join(output_dir, base_folder_name + '-' + suffix)\n        else:\n            self.output_dir = get_output_folder(output_dir, base_folder_name)\n\n        self.env_args = Namespace(\n            model_type=model_type,\n            preserve_ratio=flops_ratio,\n            lbound=lbound,\n            rbound=rbound,\n            reward=reward,\n            n_calibration_batches=n_calibration_batches,\n            n_points_per_layer=n_points_per_layer,\n            channel_round=channel_round,\n            output=self.output_dir\n        )\n        self.env = ChannelPruningEnv(\n            self, evaluator, val_loader, checkpoint, args=self.env_args)\n        _logger.info('=> Saving logs to %s', self.output_dir)\n        self.tfwriter = SummaryWriter(log_dir=self.output_dir)\n        self.text_writer = open(os.path.join(self.output_dir, 'log.txt'), 'w')\n        _logger.info('=> Output path: %s...', self.output_dir)\n\n        nb_states = self.env.layer_embedding.shape[1]\n        nb_actions = 1  # just 1 action here\n\n        rmsize = rmsize * len(self.env.prunable_idx)  # for each layer\n        _logger.info('** Actual replay buffer size: %d', rmsize)\n\n        self.ddpg_args = Namespace(\n            hidden1=hidden1,\n            hidden2=hidden2,\n            lr_c=lr_c,\n            lr_a=lr_a,\n            warmup=warmup,\n            discount=discount,\n            bsize=bsize,\n            rmsize=rmsize,\n            window_length=window_length,\n            tau=tau,\n            init_delta=init_delta,\n            delta_decay=delta_decay,\n            max_episode_length=max_episode_length,\n            debug=debug,\n            train_episode=train_episode,\n            epsilon=epsilon\n        )\n        self.agent = DDPG(nb_states, nb_actions, self.ddpg_args)\n\n\n    def compress(self):\n        self.train(self.ddpg_args.train_episode, self.agent, self.env, self.output_dir)\n\n    def train(self, num_episode, agent, env, output_dir):\n        agent.is_training = True\n        step = episode = episode_steps = 0\n        episode_reward = 0.\n        observation = None\n        T = []  # trajectory\n        while episode < num_episode:  # counting based on episode\n            # reset if it is the start of episode\n            if observation is None:\n                observation = deepcopy(env.reset())\n                agent.reset(observation)\n\n            # agent pick action ...\n            if episode <= self.ddpg_args.warmup:\n                action = agent.random_action()\n                # action = sample_from_truncated_normal_distribution(lower=0., upper=1., mu=env.preserve_ratio, sigma=0.5)\n            else:\n                action = agent.select_action(observation, episode=episode)\n\n            # env response with next_observation, reward, terminate_info\n            observation2, reward, done, info = env.step(action)\n\n            T.append([reward, deepcopy(observation), deepcopy(observation2), action, done])\n\n            # fix-length, never reach here\n            # if max_episode_length and episode_steps >= max_episode_length - 1:\n            #     done = True\n\n            # [optional] save intermideate model\n            if num_episode / 3 <= 1 or episode % int(num_episode / 3) == 0:\n                agent.save_model(output_dir)\n\n            # update\n            step += 1\n            episode_steps += 1\n            episode_reward += reward\n            observation = deepcopy(observation2)\n\n            if done:  # end of episode\n                _logger.info(\n                    '#%d: episode_reward: %.4f acc: %.4f, ratio: %.4f',\n                        episode, episode_reward,\n                        info['accuracy'],\n                        info['compress_ratio']\n                )\n                self.text_writer.write(\n                    '#{}: episode_reward:{:.4f} acc: {:.4f}, ratio: {:.4f}\\n'.format(\n                        episode, episode_reward,\n                        info['accuracy'],\n                        info['compress_ratio']\n                    )\n                )\n                final_reward = T[-1][0]\n                # print('final_reward: {}'.format(final_reward))\n                # agent observe and update policy\n                for _, s_t, s_t1, a_t, done in T:\n                    agent.observe(final_reward, s_t, s_t1, a_t, done)\n                    if episode > self.ddpg_args.warmup:\n                        agent.update_policy()\n\n                #agent.memory.append(\n                #    observation,\n                #    agent.select_action(observation, episode=episode),\n                #    0., False\n                #)\n\n                # reset\n                observation = None\n                episode_steps = 0\n                episode_reward = 0.\n                episode += 1\n                T = []\n\n                self.tfwriter.add_scalar('reward/last', final_reward, episode)\n                self.tfwriter.add_scalar('reward/best', env.best_reward, episode)\n                self.tfwriter.add_scalar('info/accuracy', info['accuracy'], episode)\n                self.tfwriter.add_scalar('info/compress_ratio', info['compress_ratio'], episode)\n                self.tfwriter.add_text('info/best_policy', str(env.best_strategy), episode)\n                # record the preserve rate for each layer\n                for i, preserve_rate in enumerate(env.strategy):\n                    self.tfwriter.add_scalar('preserve_rate/{}'.format(i), preserve_rate, episode)\n\n                self.text_writer.write('best reward: {}\\n'.format(env.best_reward))\n                self.text_writer.write('best policy: {}\\n'.format(env.best_strategy))\n        self.text_writer.close()\n"
  },
  {
    "path": "src/aup/compression/torch/pruning/amc/channel_pruning_env.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n# Modified work Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nimport os\nimport logging\nimport time\nimport math\nimport copy\nimport numpy as np\nimport torch\nimport torch.nn as nn\n\nfrom ...compressor import PrunerModuleWrapper\nfrom .. import AMCWeightMasker\n\n_logger = logging.getLogger(__name__)\n\n# for pruning\ndef acc_reward(net, acc, flops):\n    return acc * 0.01\n\n\ndef acc_flops_reward(net, acc, flops):\n    error = (100 - acc) * 0.01\n    return -error * np.log(flops)\n\n\nclass ChannelPruningEnv:\n    \"\"\"\n    Env for channel pruning search.\n    This class is used to prune model using specified pruner. It prunes one layer when\n    step() is called. When the last layer is pruned, it evaluate the pruned model using\n    evaluator, and use the returned value of evaluator as reward of the episode.\n\n    Usage:\n        env = ChannelPruningEnv(pruner, evaluator, val_loader, checkpoint, env_args)\n        episode = 0\n        T = []\n        while episode < num_episode:\n            action = agent.select_action(observation)\n            observation2, reward, done, info = env.step(action)\n            T.append([reward, deepcopy(observation), deepcopy(observation2), action, done])\n\n            if done: # end of episode, last layer pruned\n                episode += 1\n                # train agent with episode data\n                for _, s_t, s_t1, a_t, done in T:\n                    agent.observe(final_reward, s_t, s_t1, a_t, done)\n                    agent.update_policy()\n                T = []\n\n    Attributes:\n        prunable_idx: layer indices for pruable layers, the index values are the index\n            of list(self.model.modules()). Pruable layers are pointwise Conv2d layers and Linear\n            layers.\n        buffer_idx: layer indices for buffer layers which refers the depthwise layers.\n            Each depthwise layer is always followd by a pointwise layer for both mobilenet and\n            mobilenetv2. The depthwise layer's filters are pruned when its next pointwise layer's\n            corresponding input channels are pruned.\n        shared_idx: layer indices for layers which share input.\n            For example: [[1,4], [8, 10, 15]] means layer 1 and 4 share same input, and layer\n            8, 10 and 15 share another input.\n        layer_embedding: embeddings for each prunable layers, the embedding is used as\n            observation for DDPG agent.\n        layer_info_dict: flops and number of parameters of each layer.\n        min_strategy_dict: key is layer index, value is a tuple, the first value is the minimum\n            action of input channel, the second value is the minimum action value of output channel.\n        strategy_dict: key is layer index, value is a tuple, the first value is the action of input\n            channel, the second value is the action of output channel.\n\n    Parameters:\n        pruner: Pruner\n            NNI Pruner instance used to prune model.\n        evaluator: function\n            function to evaluate the pruned model.\n            The prototype of the function:\n                >>> def evaluator(val_loader, model):\n                >>>     ...\n                >>>     return acc\n        val_loader: torch.utils.data.DataLoader\n            Data loader of validation dataset.\n        checkpoint: dict\n            checkpoint of the model to be pruned. It is used to reset model at beginning of each\n            episode.\n        args:\n            A Namespace object containing following arguments:\n            model_type: str\n                model type to prune, currently 'mobilenet' and 'mobilenetv2' are supported.\n            flops_ratio: float\n                preserve flops ratio.\n            lbound: float\n                minimum weight preserve ratio for each layer.\n            rbound: float\n                maximum weight preserve ratio for each layer.\n            reward: function\n                reward function type\n\n            # parameters for channel pruning\n            n_calibration_batches: int\n                number of batches to extract layer information.\n            n_points_per_layer: int\n                number of feature points per layer.\n            channel_round: int\n                round channel to multiple of channel_round.\n\n    \"\"\"\n    def __init__(self, pruner, evaluator, val_loader, checkpoint, args):\n        self.pruner = pruner\n        self.model = pruner.bound_model\n        self.checkpoint = checkpoint\n        self.batch_size = val_loader.batch_size\n        self.preserve_ratio = args.preserve_ratio\n        self.channel_prune_masker = AMCWeightMasker(self.model, self.pruner, args.channel_round)\n\n        # options from args\n        self.args = args\n        self.lbound = args.lbound\n        self.rbound = args.rbound\n\n        self.n_calibration_batches = args.n_calibration_batches\n        self.n_points_per_layer = args.n_points_per_layer\n        self.channel_round = args.channel_round\n\n        # sanity check\n        assert self.preserve_ratio > self.lbound, 'Error! You can not achieve preserve_ratio smaller than lbound!'\n\n        # prepare data\n        self._val_loader = val_loader\n        self._validate = evaluator\n\n        # build indexs\n        self._build_index()\n        self.n_prunable_layer = len(self.prunable_idx)\n\n        # extract information for preparing\n        self._extract_layer_information()\n\n        # build embedding (static part)\n        self._build_state_embedding()\n\n        # build reward\n        self.reset()  # restore weight\n        self.org_acc = self._validate(self._val_loader, self.model)\n        _logger.info('=> original acc: %.3f', self.org_acc)\n        self.org_model_size = sum(self.wsize_list)\n        _logger.info('=> original weight size: %.4f M param', self.org_model_size * 1. / 1e6)\n        self.org_flops = sum(self.flops_list)\n        _logger.info('=> FLOPs:')\n        _logger.info([self.layer_info_dict[idx]['flops']/1e6 for idx in sorted(self.layer_info_dict.keys())])\n        _logger.info('=> original FLOPs: %.4f M', self.org_flops * 1. / 1e6)\n\n        self.expected_preserve_computation = self.preserve_ratio * self.org_flops\n\n        self.reward = eval(args.reward)\n\n        self.best_reward = -math.inf\n        self.best_strategy = None\n        self.best_d_prime_list = None\n        self.best_masks = None\n\n        self.org_w_size = sum(self.wsize_list)\n\n    def step(self, action):\n        # Pseudo prune and get the corresponding statistics. The real pruning happens till the end of all pseudo pruning\n        if self.visited[self.cur_ind]:\n            action = self.strategy_dict[self.prunable_idx[self.cur_ind]][0]\n            preserve_idx = self.index_buffer[self.cur_ind]\n        else:\n            action = self._action_wall(action)  # percentage to preserve\n            preserve_idx = None\n        # prune and update action\n        action, d_prime, preserve_idx = self.prune_kernel(self.prunable_idx[self.cur_ind], action, preserve_idx)\n        if not self.visited[self.cur_ind]:\n            for group in self.shared_idx:\n                if self.cur_ind in group:  # set the shared ones\n                    for g_idx in group:\n                        self.strategy_dict[self.prunable_idx[g_idx]][0] = action\n                        self.strategy_dict[self.prunable_idx[g_idx - 1]][1] = action\n                        self.visited[g_idx] = True\n                        self.index_buffer[g_idx] = preserve_idx.copy()\n\n        self.strategy.append(action)  # save action to strategy\n        self.d_prime_list.append(d_prime)\n\n        self.strategy_dict[self.prunable_idx[self.cur_ind]][0] = action\n        if self.cur_ind > 0:\n            self.strategy_dict[self.prunable_idx[self.cur_ind - 1]][1] = action\n\n        # all the actions are made\n        if self._is_final_layer():\n            assert len(self.strategy) == len(self.prunable_idx)\n            current_flops = self._cur_flops()\n            acc_t1 = time.time()\n            acc = self._validate(self._val_loader, self.model)\n            acc_t2 = time.time()\n            self.val_time = acc_t2 - acc_t1\n            compress_ratio = current_flops * 1. / self.org_flops\n            info_set = {'compress_ratio': compress_ratio, 'accuracy': acc, 'strategy': self.strategy.copy()}\n            reward = self.reward(self, acc, current_flops)\n\n            if reward > self.best_reward:\n                self.best_reward = reward\n                self.best_strategy = self.strategy.copy()\n                self.best_d_prime_list = self.d_prime_list.copy()\n                best_model = os.path.join(self.args.output, 'best_model.pth')\n                best_mask = os.path.join(self.args.output, 'best_mask.pth')\n                self.pruner.export_model(model_path=best_model, mask_path=best_mask)\n                _logger.info('New best reward: %.4f, acc: %.4f, compress: %.4f', self.best_reward, acc, compress_ratio)\n                _logger.info('New best policy: %s', self.best_strategy)\n                _logger.info('New best d primes: %s', self.best_d_prime_list)\n            obs = self.layer_embedding[self.cur_ind, :].copy()  # actually the same as the last state\n            done = True\n            return obs, reward, done, info_set\n\n        info_set = None\n        reward = 0\n        done = False\n        self.visited[self.cur_ind] = True  # set to visited\n        self.cur_ind += 1  # the index of next layer\n        # build next state (in-place modify)\n        self.layer_embedding[self.cur_ind][-3] = self._cur_reduced() * 1. / self.org_flops  # reduced\n        self.layer_embedding[self.cur_ind][-2] = sum(self.flops_list[self.cur_ind + 1:]) * 1. / self.org_flops  # rest\n        self.layer_embedding[self.cur_ind][-1] = self.strategy[-1]  # last action\n        obs = self.layer_embedding[self.cur_ind, :].copy()\n\n        return obs, reward, done, info_set\n\n    def reset(self):\n        # restore env by loading the checkpoint\n        self.pruner.reset(self.checkpoint)\n        self.cur_ind = 0\n        self.strategy = []  # pruning strategy\n        self.d_prime_list = []\n        self.strategy_dict = copy.deepcopy(self.min_strategy_dict)\n        # reset layer embeddings\n        self.layer_embedding[:, -1] = 1.\n        self.layer_embedding[:, -2] = 0.\n        self.layer_embedding[:, -3] = 0.\n        obs = self.layer_embedding[0].copy()\n        obs[-2] = sum(self.wsize_list[1:]) * 1. / sum(self.wsize_list)\n        self.extract_time = 0\n        self.fit_time = 0\n        self.val_time = 0\n        # for share index\n        self.visited = [False] * len(self.prunable_idx)\n        self.index_buffer = {}\n        return obs\n\n    def prune_kernel(self, op_idx, preserve_ratio, preserve_idx=None):\n        m_list = list(self.model.modules())\n        op = m_list[op_idx]\n        assert (0. < preserve_ratio <= 1.)\n        assert type(op) == PrunerModuleWrapper\n        if preserve_ratio == 1:  # do not prune\n            if (preserve_idx is None) or (len(preserve_idx) == op.module.weight.size(1)):\n                return 1., op.module.weight.size(1), None  # should be a full index\n        op.input_feat = self.layer_info_dict[op_idx]['input_feat']\n        op.output_feat = self.layer_info_dict[op_idx]['output_feat']\n\n        masks = self.channel_prune_masker.calc_mask(sparsity=1-preserve_ratio, wrapper=op, preserve_idx=preserve_idx)\n        m = masks['weight_mask'].cpu().data\n        if type(op.module) == nn.Conv2d:\n            d_prime = (m.sum((0, 2, 3)) > 0).sum().item()\n            preserve_idx = np.nonzero((m.sum((0, 2, 3)) > 0).numpy())[0]\n        else:\n            assert type(op.module) == nn.Linear\n            d_prime = (m.sum(1) > 0).sum().item()\n            preserve_idx = np.nonzero((m.sum(1) > 0).numpy())[0]\n\n        op.weight_mask = masks['weight_mask']\n        if hasattr(op.module, 'bias') and op.module.bias is not None and 'bias_mask' in masks:\n            op.bias_mask = masks['bias_mask']\n\n        action = (m == 1).sum().item() / m.numel()\n        return action, d_prime, preserve_idx\n\n    def _is_final_layer(self):\n        return self.cur_ind == len(self.prunable_idx) - 1\n\n    def _action_wall(self, action):\n        \"\"\"\n        Limit the action generated by DDPG for this layer by two constraints:\n        1. The total flops must meet the flops reduce target.\n           For example: the original flops of entire model is 1000, target flops ratio is 0.5, target flops\n           is 1000*0.5 = 500. The reduced flops of other layers is 400, so the remaining flops quota is 500-400=100,\n           if the total original flops of this layer is 250, then the maximum ratio is 100/250 = 0.4. So the\n           action of this layer can not be greater than 0.4.\n        2. The action must be greater than lbound which is stored in self.strategy_dict.\n        \"\"\"\n        assert len(self.strategy) == self.cur_ind\n\n        action = float(action)\n        action = np.clip(action, 0, 1)\n\n        other_comp = 0\n        this_comp = 0\n        for i, idx in enumerate(self.prunable_idx):\n            flop = self.layer_info_dict[idx]['flops']\n            buffer_flop = self._get_buffer_flops(idx)\n\n            if i == self.cur_ind - 1:  # TODO: add other member in the set\n                this_comp += flop * self.strategy_dict[idx][0]\n                # add buffer (but not influenced by ratio)\n                other_comp += buffer_flop * self.strategy_dict[idx][0]\n            elif i == self.cur_ind:\n                this_comp += flop * self.strategy_dict[idx][1]\n                # also add buffer here (influenced by ratio)\n                this_comp += buffer_flop\n            else:\n                other_comp += flop * self.strategy_dict[idx][0] * self.strategy_dict[idx][1]\n                # add buffer\n                other_comp += buffer_flop * self.strategy_dict[idx][0]  # only consider input reduction\n\n        self.expected_min_preserve = other_comp + this_comp * action\n        max_preserve_ratio = (self.expected_preserve_computation - other_comp) * 1. / this_comp\n\n        action = np.minimum(action, max_preserve_ratio)\n        action = np.maximum(action, self.strategy_dict[self.prunable_idx[self.cur_ind]][0])  # impossible (should be)\n\n        return action\n\n    def _get_buffer_flops(self, idx):\n        buffer_idx = self.buffer_dict[idx]\n        buffer_flop = sum([self.layer_info_dict[_]['flops'] for _ in buffer_idx])\n        return buffer_flop\n\n    def _cur_flops(self):\n        flops = 0\n        for idx in self.prunable_idx:\n            c, n = self.strategy_dict[idx]  # input, output pruning ratio\n            flops += self.layer_info_dict[idx]['flops'] * c * n\n            # add buffer computation\n            flops += self._get_buffer_flops(idx) * c  # only related to input channel reduction\n        return flops\n\n    def _cur_reduced(self):\n        # return the reduced weight\n        reduced = self.org_flops - self._cur_flops()\n        return reduced\n\n    def _build_index(self):\n        \"\"\"\n        Build following information/data for later pruning:\n        self.prunable_idx: layer indices for pruable layers, the index values are the index\n            of list(self.model.modules()). Pruable layers are pointwise Conv2d layers and Linear\n            layers.\n        self.prunable_ops: prunable modules\n        self.buffer_idx: layer indices for buffer layers which refers the depthwise layers.\n            Each depthwise layer is always followd by a pointwise layer for both mobilenet and\n            mobilenetv2. The depthwise layer's filters are pruned when its next pointwise layer's\n            corresponding input channels are pruned.\n        self.shared_idx: layer indices for layers which share input.\n            For example: [[1,4], [8, 10, 15]] means layer 1 and 4 share same input, and layer\n            8, 10 and 15 share another input.\n        self.org_channels: number of input channels for each layer\n        self.min_strategy_dict: key is layer index, value is a tuple, the first value is the minimum\n            action of input channel, the second value is the minimum action value of output channel.\n        self.strategy_dict: same as self.min_strategy_dict, but it will be updated later.\n        \"\"\"\n        self.prunable_idx = []\n        self.prunable_ops = []\n        self.layer_type_dict = {}\n        self.strategy_dict = {}\n        self.buffer_dict = {}\n        this_buffer_list = []\n        self.org_channels = []\n        # build index and the min strategy dict\n        for i, m in enumerate(self.model.modules()):\n            if isinstance(m, PrunerModuleWrapper):\n                m = m.module\n                if type(m) == nn.Conv2d and m.groups == m.in_channels:  # depth-wise conv, buffer\n                    this_buffer_list.append(i)\n                else:  # really prunable\n                    self.prunable_idx.append(i)\n                    self.prunable_ops.append(m)\n                    self.layer_type_dict[i] = type(m)\n                    self.buffer_dict[i] = this_buffer_list\n                    this_buffer_list = []  # empty\n                    self.org_channels.append(m.in_channels if type(m) == nn.Conv2d else m.in_features)\n\n                    self.strategy_dict[i] = [self.lbound, self.lbound]\n\n        self.strategy_dict[self.prunable_idx[0]][0] = 1  # modify the input\n        self.strategy_dict[self.prunable_idx[-1]][1] = 1  # modify the output\n\n        self.shared_idx = []\n        if self.args.model_type == 'mobilenetv2':  # TODO: to be tested! Share index for residual connection\n            connected_idx = [4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32]  # to be partitioned\n            last_ch = -1\n            share_group = None\n            for c_idx in connected_idx:\n                if self.prunable_ops[c_idx].in_channels != last_ch:  # new group\n                    last_ch = self.prunable_ops[c_idx].in_channels\n                    if share_group is not None:\n                        self.shared_idx.append(share_group)\n                    share_group = [c_idx]\n                else:  # same group\n                    share_group.append(c_idx)\n            self.shared_idx.append(share_group)\n            _logger.info('=> Conv layers to share channels: %s', self.shared_idx)\n\n        self.min_strategy_dict = copy.deepcopy(self.strategy_dict)\n\n        self.buffer_idx = []\n        for _, v in self.buffer_dict.items():\n            self.buffer_idx += v\n\n        _logger.info('=> Prunable layer idx: %s', self.prunable_idx)\n        _logger.info('=> Buffer layer idx: %s', self.buffer_idx)\n        _logger.info('=> Shared idx: %s', self.shared_idx)\n        _logger.info('=> Initial min strategy dict: %s', self.min_strategy_dict)\n\n        # added for supporting residual connections during pruning\n        self.visited = [False] * len(self.prunable_idx)\n        self.index_buffer = {}\n\n    def _extract_layer_information(self):\n        m_list = list(self.model.modules())\n\n        self.data_saver = []\n        self.layer_info_dict = dict()\n        self.wsize_list = []\n        self.flops_list = []\n\n        from .lib.utils import measure_layer_for_pruning\n\n        # extend the forward fn to record layer info\n        def new_forward(m):\n            def lambda_forward(x):\n                m.input_feat = x.clone()\n                #TODO replace this flops counter with nni.compression.torch.utils.counter.count_flops_params\n                measure_layer_for_pruning(m, x)\n                y = m.old_forward(x)\n                m.output_feat = y.clone()\n                return y\n\n            return lambda_forward\n\n        device = None\n        for idx in self.prunable_idx + self.buffer_idx:  # get all\n            m = m_list[idx]\n            m.old_forward = m.forward\n            m.forward = new_forward(m)\n            if device is None and type(m) == PrunerModuleWrapper:\n                device = m.module.weight.device\n\n        # now let the image flow\n        _logger.info('=> Extracting information...')\n        with torch.no_grad():\n            for i_b, (inputs, target) in enumerate(self._val_loader):  # use image from train set\n                if i_b == self.n_calibration_batches:\n                    break\n                self.data_saver.append((inputs.clone(), target.clone()))\n                input_var = torch.autograd.Variable(inputs).to(device)\n\n                # inference and collect stats\n                _ = self.model(input_var)\n\n                if i_b == 0:  # first batch\n                    for idx in self.prunable_idx + self.buffer_idx:\n                        self.layer_info_dict[idx] = dict()\n                        self.layer_info_dict[idx]['params'] = m_list[idx].params\n                        self.layer_info_dict[idx]['flops'] = m_list[idx].flops\n                        self.wsize_list.append(m_list[idx].params)\n                        self.flops_list.append(m_list[idx].flops)\n                    _logger.info('flops: %s', self.flops_list)\n                for idx in self.prunable_idx:\n                    f_in_np = m_list[idx].input_feat.data.cpu().numpy()\n                    f_out_np = m_list[idx].output_feat.data.cpu().numpy()\n                    if len(f_in_np.shape) == 4:  # conv\n                        if self.prunable_idx.index(idx) == 0:  # first conv\n                            f_in2save, f_out2save = None, None\n                        elif m_list[idx].module.weight.size(3) > 1:  # normal conv\n                            f_in2save, f_out2save = f_in_np, f_out_np\n                        else:  # 1x1 conv\n                            # assert f_out_np.shape[2] == f_in_np.shape[2]  # now support k=3\n                            randx = np.random.randint(0, f_out_np.shape[2] - 0, self.n_points_per_layer)\n                            randy = np.random.randint(0, f_out_np.shape[3] - 0, self.n_points_per_layer)\n                            # input: [N, C, H, W]\n                            self.layer_info_dict[idx][(i_b, 'randx')] = randx.copy()\n                            self.layer_info_dict[idx][(i_b, 'randy')] = randy.copy()\n\n                            f_in2save = f_in_np[:, :, randx, randy].copy().transpose(0, 2, 1)\\\n                                .reshape(self.batch_size * self.n_points_per_layer, -1)\n\n                            f_out2save = f_out_np[:, :, randx, randy].copy().transpose(0, 2, 1) \\\n                                .reshape(self.batch_size * self.n_points_per_layer, -1)\n                    else:\n                        assert len(f_in_np.shape) == 2\n                        f_in2save = f_in_np.copy()\n                        f_out2save = f_out_np.copy()\n                    if 'input_feat' not in self.layer_info_dict[idx]:\n                        self.layer_info_dict[idx]['input_feat'] = f_in2save\n                        self.layer_info_dict[idx]['output_feat'] = f_out2save\n                    else:\n                        self.layer_info_dict[idx]['input_feat'] = np.vstack(\n                            (self.layer_info_dict[idx]['input_feat'], f_in2save))\n                        self.layer_info_dict[idx]['output_feat'] = np.vstack(\n                            (self.layer_info_dict[idx]['output_feat'], f_out2save))\n\n    def _build_state_embedding(self):\n        # build the static part of the state embedding\n        _logger.info('Building state embedding...')\n        layer_embedding = []\n        module_list = list(self.model.modules())\n        for i, ind in enumerate(self.prunable_idx):\n            m = module_list[ind].module\n            this_state = []\n            if type(m) == nn.Conv2d:\n                this_state.append(i)  # index\n                this_state.append(0)  # layer type, 0 for conv\n                this_state.append(m.in_channels)  # in channels\n                this_state.append(m.out_channels)  # out channels\n                this_state.append(m.stride[0])  # stride\n                this_state.append(m.kernel_size[0])  # kernel size\n                this_state.append(np.prod(m.weight.size()))  # weight size\n            elif type(m) == nn.Linear:\n                this_state.append(i)  # index\n                this_state.append(1)  # layer type, 1 for fc\n                this_state.append(m.in_features)  # in channels\n                this_state.append(m.out_features)  # out channels\n                this_state.append(0)  # stride\n                this_state.append(1)  # kernel size\n                this_state.append(np.prod(m.weight.size()))  # weight size\n\n            # this 3 features need to be changed later\n            this_state.append(0.)  # reduced\n            this_state.append(0.)  # rest\n            this_state.append(1.)  # a_{t-1}\n            layer_embedding.append(np.array(this_state))\n\n        # normalize the state\n        layer_embedding = np.array(layer_embedding, 'float')\n        _logger.info('=> shape of embedding (n_layer * n_dim): %s', layer_embedding.shape)\n        assert len(layer_embedding.shape) == 2, layer_embedding.shape\n        for i in range(layer_embedding.shape[1]):\n            fmin = min(layer_embedding[:, i])\n            fmax = max(layer_embedding[:, i])\n            if fmax - fmin > 0:\n                layer_embedding[:, i] = (layer_embedding[:, i] - fmin) / (fmax - fmin)\n\n        self.layer_embedding = layer_embedding\n\n"
  },
  {
    "path": "src/aup/compression/torch/pruning/amc/lib/__init__.py",
    "content": ""
  },
  {
    "path": "src/aup/compression/torch/pruning/amc/lib/agent.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\nimport numpy as np\n\nimport torch\nimport torch.nn as nn\nfrom torch.optim import Adam\n\nfrom .memory import SequentialMemory\nfrom .utils import to_numpy, to_tensor\n\ncriterion = nn.MSELoss()\nUSE_CUDA = torch.cuda.is_available()\n\n\nclass Actor(nn.Module):\n    def __init__(self, nb_states, nb_actions, hidden1=400, hidden2=300):\n        super(Actor, self).__init__()\n        self.fc1 = nn.Linear(nb_states, hidden1)\n        self.fc2 = nn.Linear(hidden1, hidden2)\n        self.fc3 = nn.Linear(hidden2, nb_actions)\n        self.relu = nn.ReLU()\n        self.sigmoid = nn.Sigmoid()\n\n    def forward(self, x):\n        out = self.fc1(x)\n        out = self.relu(out)\n        out = self.fc2(out)\n        out = self.relu(out)\n        out = self.fc3(out)\n        out = self.sigmoid(out)\n        return out\n\n\nclass Critic(nn.Module):\n    def __init__(self, nb_states, nb_actions, hidden1=400, hidden2=300):\n        super(Critic, self).__init__()\n        self.fc11 = nn.Linear(nb_states, hidden1)\n        self.fc12 = nn.Linear(nb_actions, hidden1)\n        self.fc2 = nn.Linear(hidden1, hidden2)\n        self.fc3 = nn.Linear(hidden2, 1)\n        self.relu = nn.ReLU()\n\n    def forward(self, xs):\n        x, a = xs\n        out = self.fc11(x) + self.fc12(a)\n        out = self.relu(out)\n        out = self.fc2(out)\n        out = self.relu(out)\n        out = self.fc3(out)\n        return out\n\n\nclass DDPG(object):\n    def __init__(self, nb_states, nb_actions, args):\n\n        self.nb_states = nb_states\n        self.nb_actions = nb_actions\n\n        # Create Actor and Critic Network\n        net_cfg = {\n            'hidden1': args.hidden1,\n            'hidden2': args.hidden2,\n            # 'init_w': args.init_w\n        }\n        self.actor = Actor(self.nb_states, self.nb_actions, **net_cfg)\n        self.actor_target = Actor(self.nb_states, self.nb_actions, **net_cfg)\n        self.actor_optim = Adam(self.actor.parameters(), lr=args.lr_a)\n\n        self.critic = Critic(self.nb_states, self.nb_actions, **net_cfg)\n        self.critic_target = Critic(self.nb_states, self.nb_actions, **net_cfg)\n        self.critic_optim = Adam(self.critic.parameters(), lr=args.lr_c)\n\n        self.hard_update(self.actor_target, self.actor)  # Make sure target is with the same weight\n        self.hard_update(self.critic_target, self.critic)\n\n        # Create replay buffer\n        self.memory = SequentialMemory(limit=args.rmsize, window_length=args.window_length)\n        # self.random_process = OrnsteinUhlenbeckProcess(size=nb_actions, theta=args.ou_theta, mu=args.ou_mu,\n        #                                                sigma=args.ou_sigma)\n\n        # Hyper-parameters\n        self.batch_size = args.bsize\n        self.tau = args.tau\n        self.discount = args.discount\n        self.depsilon = 1.0 / args.epsilon\n        self.lbound = 0.  # args.lbound\n        self.rbound = 1.  # args.rbound\n\n        # noise\n        self.init_delta = args.init_delta\n        self.delta_decay = args.delta_decay\n        self.warmup = args.warmup\n\n        #\n        self.epsilon = 1.0\n        # self.s_t = None  # Most recent state\n        # self.a_t = None  # Most recent action\n        self.is_training = True\n\n        #\n        if USE_CUDA: self.cuda()\n\n        # moving average baseline\n        self.moving_average = None\n        self.moving_alpha = 0.5  # based on batch, so small\n\n    def update_policy(self):\n        # Sample batch\n        state_batch, action_batch, reward_batch, \\\n        next_state_batch, terminal_batch = self.memory.sample_and_split(self.batch_size)\n\n        # normalize the reward\n        batch_mean_reward = np.mean(reward_batch)\n        if self.moving_average is None:\n            self.moving_average = batch_mean_reward\n        else:\n            self.moving_average += self.moving_alpha * (batch_mean_reward - self.moving_average)\n        reward_batch -= self.moving_average\n        # if reward_batch.std() > 0:\n        #     reward_batch /= reward_batch.std()\n\n        # Prepare for the target q batch\n        with torch.no_grad():\n            next_q_values = self.critic_target([\n                to_tensor(next_state_batch),\n                self.actor_target(to_tensor(next_state_batch)),\n            ])\n\n        target_q_batch = to_tensor(reward_batch) + \\\n                         self.discount * to_tensor(terminal_batch.astype(np.float)) * next_q_values\n\n        # Critic update\n        self.critic.zero_grad()\n\n        q_batch = self.critic([to_tensor(state_batch), to_tensor(action_batch)])\n\n        value_loss = criterion(q_batch, target_q_batch)\n        value_loss.backward()\n        self.critic_optim.step()\n\n        # Actor update\n        self.actor.zero_grad()\n\n        policy_loss = -self.critic([ # pylint: disable=all\n            to_tensor(state_batch),\n            self.actor(to_tensor(state_batch))\n        ])\n\n        policy_loss = policy_loss.mean()\n        policy_loss.backward()\n        self.actor_optim.step()\n\n        # Target update\n        self.soft_update(self.actor_target, self.actor)\n        self.soft_update(self.critic_target, self.critic)\n\n    def eval(self):\n        self.actor.eval()\n        self.actor_target.eval()\n        self.critic.eval()\n        self.critic_target.eval()\n\n    def cuda(self):\n        self.actor.cuda()\n        self.actor_target.cuda()\n        self.critic.cuda()\n        self.critic_target.cuda()\n\n    def observe(self, r_t, s_t, s_t1, a_t, done):\n        if self.is_training:\n            self.memory.append(s_t, a_t, r_t, done)  # save to memory\n            # self.s_t = s_t1\n\n    def random_action(self):\n        action = np.random.uniform(self.lbound, self.rbound, self.nb_actions)\n        # self.a_t = action\n        return action\n\n    def select_action(self, s_t, episode):\n        # assert episode >= self.warmup, 'Episode: {} warmup: {}'.format(episode, self.warmup)\n        action = to_numpy(self.actor(to_tensor(np.array(s_t).reshape(1, -1)))).squeeze(0)\n        delta = self.init_delta * (self.delta_decay ** (episode - self.warmup))\n        # action += self.is_training * max(self.epsilon, 0) * self.random_process.sample()\n        action = self.sample_from_truncated_normal_distribution(lower=self.lbound, upper=self.rbound, mu=action, sigma=delta)\n        action = np.clip(action, self.lbound, self.rbound)\n\n        # self.a_t = action\n        return action\n\n    def reset(self, obs):\n        pass\n        # self.s_t = obs\n        # self.random_process.reset_states()\n\n    def load_weights(self, output):\n        if output is None: return\n\n        self.actor.load_state_dict(\n            torch.load('{}/actor.pkl'.format(output))\n        )\n\n        self.critic.load_state_dict(\n            torch.load('{}/critic.pkl'.format(output))\n        )\n\n    def save_model(self, output):\n        torch.save(\n            self.actor.state_dict(),\n            '{}/actor.pkl'.format(output)\n        )\n        torch.save(\n            self.critic.state_dict(),\n            '{}/critic.pkl'.format(output)\n        )\n\n    def soft_update(self, target, source):\n        for target_param, param in zip(target.parameters(), source.parameters()):\n            target_param.data.copy_(\n                target_param.data * (1.0 - self.tau) + param.data * self.tau\n            )\n\n    def hard_update(self, target, source):\n        for target_param, param in zip(target.parameters(), source.parameters()):\n            target_param.data.copy_(param.data)\n\n    def sample_from_truncated_normal_distribution(self, lower, upper, mu, sigma, size=1):\n        from scipy import stats\n        return stats.truncnorm.rvs((lower-mu)/sigma, (upper-mu)/sigma, loc=mu, scale=sigma, size=size)\n\n\n"
  },
  {
    "path": "src/aup/compression/torch/pruning/amc/lib/memory.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\nfrom __future__ import absolute_import\nfrom collections import deque, namedtuple\nimport warnings\nimport random\n\nimport numpy as np\n\n# [reference] https://github.com/matthiasplappert/keras-rl/blob/master/rl/memory.py\n\n# This is to be understood as a transition: Given `state0`, performing `action`\n# yields `reward` and results in `state1`, which might be `terminal`.\nExperience = namedtuple('Experience', 'state0, action, reward, state1, terminal1')\n\n\ndef sample_batch_indexes(low, high, size):\n    if high - low >= size:\n        # We have enough data. Draw without replacement, that is each index is unique in the\n        # batch. We cannot use `np.random.choice` here because it is horribly inefficient as\n        # the memory grows. See https://github.com/numpy/numpy/issues/2764 for a discussion.\n        # `random.sample` does the same thing (drawing without replacement) and is way faster.\n        r = range(low, high)\n        batch_idxs = random.sample(r, size)\n    else:\n        # Not enough data. Help ourselves with sampling from the range, but the same index\n        # can occur multiple times. This is not good and should be avoided by picking a\n        # large enough warm-up phase.\n        warnings.warn(\n            'Not enough entries to sample without replacement. '\n            'Consider increasing your warm-up phase to avoid oversampling!')\n        batch_idxs = np.random.random_integers(low, high - 1, size=size)\n    assert len(batch_idxs) == size\n    return batch_idxs\n\n\nclass RingBuffer(object):\n    def __init__(self, maxlen):\n        self.maxlen = maxlen\n        self.start = 0\n        self.length = 0\n        self.data = [None for _ in range(maxlen)]\n\n    def __len__(self):\n        return self.length\n\n    def __getitem__(self, idx):\n        if idx < 0 or idx >= self.length:\n            raise KeyError()\n        return self.data[(self.start + idx) % self.maxlen]\n\n    def append(self, v):\n        if self.length < self.maxlen:\n            # We have space, simply increase the length.\n            self.length += 1\n        elif self.length == self.maxlen:\n            # No space, \"remove\" the first item.\n            self.start = (self.start + 1) % self.maxlen\n        else:\n            # This should never happen.\n            raise RuntimeError()\n        self.data[(self.start + self.length - 1) % self.maxlen] = v\n\n\ndef zeroed_observation(observation):\n    if hasattr(observation, 'shape'):\n        return np.zeros(observation.shape)\n    elif hasattr(observation, '__iter__'):\n        out = []\n        for x in observation:\n            out.append(zeroed_observation(x))\n        return out\n    else:\n        return 0.\n\n\nclass Memory(object):\n    def __init__(self, window_length, ignore_episode_boundaries=False):\n        self.window_length = window_length\n        self.ignore_episode_boundaries = ignore_episode_boundaries\n\n        self.recent_observations = deque(maxlen=window_length)\n        self.recent_terminals = deque(maxlen=window_length)\n\n    def sample(self, batch_size, batch_idxs=None):\n        raise NotImplementedError()\n\n    def append(self, observation, action, reward, terminal, training=True):\n        self.recent_observations.append(observation)\n        self.recent_terminals.append(terminal)\n\n    def get_recent_state(self, current_observation):\n        # This code is slightly complicated by the fact that subsequent observations might be\n        # from different episodes. We ensure that an experience never spans multiple episodes.\n        # This is probably not that important in practice but it seems cleaner.\n        state = [current_observation]\n        idx = len(self.recent_observations) - 1\n        for offset in range(0, self.window_length - 1):\n            current_idx = idx - offset\n            current_terminal = self.recent_terminals[current_idx - 1] if current_idx - 1 >= 0 else False\n            if current_idx < 0 or (not self.ignore_episode_boundaries and current_terminal):\n                # The previously handled observation was terminal, don't add the current one.\n                # Otherwise we would leak into a different episode.\n                break\n            state.insert(0, self.recent_observations[current_idx])\n        while len(state) < self.window_length:\n            state.insert(0, zeroed_observation(state[0]))\n        return state\n\n    def get_config(self):\n        config = {\n            'window_length': self.window_length,\n            'ignore_episode_boundaries': self.ignore_episode_boundaries,\n        }\n        return config\n\n\nclass SequentialMemory(Memory):\n    def __init__(self, limit, **kwargs):\n        super(SequentialMemory, self).__init__(**kwargs)\n\n        self.limit = limit\n\n        # Do not use deque to implement the memory. This data structure may seem convenient but\n        # it is way too slow on random access. Instead, we use our own ring buffer implementation.\n        self.actions = RingBuffer(limit)\n        self.rewards = RingBuffer(limit)\n        self.terminals = RingBuffer(limit)\n        self.observations = RingBuffer(limit)\n\n    def sample(self, batch_size, batch_idxs=None):\n        if batch_idxs is None:\n            # Draw random indexes such that we have at least a single entry before each\n            # index.\n            batch_idxs = sample_batch_indexes(0, self.nb_entries - 1, size=batch_size)\n        batch_idxs = np.array(batch_idxs) + 1\n        assert np.min(batch_idxs) >= 1\n        assert np.max(batch_idxs) < self.nb_entries\n        assert len(batch_idxs) == batch_size\n\n        # Create experiences\n        experiences = []\n        for idx in batch_idxs:\n            terminal0 = self.terminals[idx - 2] if idx >= 2 else False\n            while terminal0:\n                # Skip this transition because the environment was reset here. Select a new, random\n                # transition and use this instead. This may cause the batch to contain the same\n                # transition twice.\n                idx = sample_batch_indexes(1, self.nb_entries, size=1)[0]\n                terminal0 = self.terminals[idx - 2] if idx >= 2 else False\n            assert 1 <= idx < self.nb_entries\n\n            # This code is slightly complicated by the fact that subsequent observations might be\n            # from different episodes. We ensure that an experience never spans multiple episodes.\n            # This is probably not that important in practice but it seems cleaner.\n            state0 = [self.observations[idx - 1]]\n            for offset in range(0, self.window_length - 1):\n                current_idx = idx - 2 - offset\n                current_terminal = self.terminals[current_idx - 1] if current_idx - 1 > 0 else False\n                if current_idx < 0 or (not self.ignore_episode_boundaries and current_terminal):\n                    # The previously handled observation was terminal, don't add the current one.\n                    # Otherwise we would leak into a different episode.\n                    break\n                state0.insert(0, self.observations[current_idx])\n            while len(state0) < self.window_length:\n                state0.insert(0, zeroed_observation(state0[0]))\n            action = self.actions[idx - 1]\n            reward = self.rewards[idx - 1]\n            terminal1 = self.terminals[idx - 1]\n\n            # Okay, now we need to create the follow-up state. This is state0 shifted on timestep\n            # to the right. Again, we need to be careful to not include an observation from the next\n            # episode if the last state is terminal.\n            state1 = [np.copy(x) for x in state0[1:]]\n            state1.append(self.observations[idx])\n\n            assert len(state0) == self.window_length\n            assert len(state1) == len(state0)\n            experiences.append(Experience(state0=state0, action=action, reward=reward,\n                                          state1=state1, terminal1=terminal1))\n        assert len(experiences) == batch_size\n        return experiences\n\n    def sample_and_split(self, batch_size, batch_idxs=None):\n        experiences = self.sample(batch_size, batch_idxs)\n\n        state0_batch = []\n        reward_batch = []\n        action_batch = []\n        terminal1_batch = []\n        state1_batch = []\n        for e in experiences:\n            state0_batch.append(e.state0)\n            state1_batch.append(e.state1)\n            reward_batch.append(e.reward)\n            action_batch.append(e.action)\n            terminal1_batch.append(0. if e.terminal1 else 1.)\n\n        # Prepare and validate parameters.\n        state0_batch = np.array(state0_batch, 'double').reshape(batch_size, -1)\n        state1_batch = np.array(state1_batch, 'double').reshape(batch_size, -1)\n        terminal1_batch = np.array(terminal1_batch, 'double').reshape(batch_size, -1)\n        reward_batch = np.array(reward_batch, 'double').reshape(batch_size, -1)\n        action_batch = np.array(action_batch, 'double').reshape(batch_size, -1)\n\n        return state0_batch, action_batch, reward_batch, state1_batch, terminal1_batch\n\n    def append(self, observation, action, reward, terminal, training=True):\n        super(SequentialMemory, self).append(observation, action, reward, terminal, training=training)\n\n        # This needs to be understood as follows: in `observation`, take `action`, obtain `reward`\n        # and weather the next state is `terminal` or not.\n        if training:\n            self.observations.append(observation)\n            self.actions.append(action)\n            self.rewards.append(reward)\n            self.terminals.append(terminal)\n\n    @property\n    def nb_entries(self):\n        return len(self.observations)\n\n    def get_config(self):\n        config = super(SequentialMemory, self).get_config()\n        config['limit'] = self.limit\n        return config\n"
  },
  {
    "path": "src/aup/compression/torch/pruning/amc/lib/net_measure.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\nimport torch\n\n# [reference] https://github.com/ShichenLiu/CondenseNet/blob/master/utils.py\n\n\ndef get_num_gen(gen):\n    return sum(1 for _ in gen)\n\n\ndef is_leaf(model):\n    return get_num_gen(model.children()) == 0\n\n\ndef get_layer_info(layer):\n    layer_str = str(layer)\n    type_name = layer_str[:layer_str.find('(')].strip()\n    return type_name\n\n\ndef get_layer_param(model):\n    import operator\n    import functools\n\n    return sum([functools.reduce(operator.mul, i.size(), 1) for i in model.parameters()])\n\ncount_ops = 0\ncount_params = 0\n\ndef measure_layer(layer, x):\n    global count_ops, count_params\n    delta_ops = 0\n    delta_params = 0\n    multi_add = 1\n    type_name = get_layer_info(layer)\n\n    # ops_conv\n    if type_name in ['Conv2d']:\n        out_h = int((x.size()[2] + 2 * layer.padding[0] - layer.kernel_size[0]) /\n                    layer.stride[0] + 1)\n        out_w = int((x.size()[3] + 2 * layer.padding[1] - layer.kernel_size[1]) /\n                    layer.stride[1] + 1)\n        delta_ops = layer.in_channels * layer.out_channels * layer.kernel_size[0] *  \\\n                layer.kernel_size[1] * out_h * out_w / layer.groups * multi_add\n        delta_params = get_layer_param(layer)\n\n    # ops_nonlinearity\n    elif type_name in ['ReLU']:\n        delta_ops = x.numel() / x.size(0)\n        delta_params = get_layer_param(layer)\n\n    # ops_pooling\n    elif type_name in ['AvgPool2d']:\n        in_w = x.size()[2]\n        kernel_ops = layer.kernel_size * layer.kernel_size\n        out_w = int((in_w + 2 * layer.padding - layer.kernel_size) / layer.stride + 1)\n        out_h = int((in_w + 2 * layer.padding - layer.kernel_size) / layer.stride + 1)\n        delta_ops = x.size()[1] * out_w * out_h * kernel_ops\n        delta_params = get_layer_param(layer)\n\n    elif type_name in ['AdaptiveAvgPool2d']:\n        delta_ops = x.size()[1] * x.size()[2] * x.size()[3]\n        delta_params = get_layer_param(layer)\n\n    # ops_linear\n    elif type_name in ['Linear']:\n        weight_ops = layer.weight.numel() * multi_add\n        bias_ops = layer.bias.numel()\n        delta_ops = weight_ops + bias_ops\n        delta_params = get_layer_param(layer)\n\n    # ops_nothing\n    elif type_name in ['BatchNorm2d', 'Dropout2d', 'DropChannel', 'Dropout']:\n        delta_params = get_layer_param(layer)\n\n    # unknown layer type\n    else:\n        delta_params = get_layer_param(layer)\n\n    count_ops += delta_ops\n    count_params += delta_params\n\n    return\n\n\ndef measure_model(model, H, W, device):\n    global count_ops, count_params\n    count_ops = 0\n    count_params = 0\n    data = torch.zeros(2, 3, H, W).to(device)\n\n    def should_measure(x):\n        return is_leaf(x)\n\n    def modify_forward(model):\n        for child in model.children():\n            if should_measure(child):\n                def new_forward(m):\n                    def lambda_forward(x):\n                        measure_layer(m, x)\n                        return m.old_forward(x)\n                    return lambda_forward\n                child.old_forward = child.forward\n                child.forward = new_forward(child)\n            else:\n                modify_forward(child)\n\n    def restore_forward(model):\n        for child in model.children():\n            # leaf node\n            if is_leaf(child) and hasattr(child, 'old_forward'):\n                child.forward = child.old_forward\n                child.old_forward = None\n            else:\n                restore_forward(child)\n\n    modify_forward(model)\n    model.forward(data)\n    restore_forward(model)\n\n    return count_ops, count_params\n"
  },
  {
    "path": "src/aup/compression/torch/pruning/amc/lib/utils.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\nimport os\nimport torch\n\nclass TextLogger(object):\n    \"\"\"Write log immediately to the disk\"\"\"\n    def __init__(self, filepath):\n        self.f = open(filepath, 'w')\n        self.fid = self.f.fileno()\n        self.filepath = filepath\n\n    def close(self):\n        self.f.close()\n\n    def write(self, content):\n        self.f.write(content)\n        self.f.flush()\n        os.fsync(self.fid)\n\n    def write_buf(self, content):\n        self.f.write(content)\n\n    def print_and_write(self, content):\n        print(content)\n        self.write(content+'\\n')\n\ndef to_numpy(var):\n    use_cuda = torch.cuda.is_available()\n    return var.cpu().data.numpy() if use_cuda else var.data.numpy()\n\n\ndef to_tensor(ndarray, requires_grad=False):  # return a float tensor by default\n    tensor = torch.from_numpy(ndarray).float()  # by default does not require grad\n    if requires_grad:\n        tensor.requires_grad_()\n    return tensor.cuda() if torch.cuda.is_available() else tensor\n\n\ndef measure_layer_for_pruning(wrapper, x):\n    def get_layer_type(layer):\n        layer_str = str(layer)\n        return layer_str[:layer_str.find('(')].strip()\n\n    def get_layer_param(model):\n        import operator\n        import functools\n\n        return sum([functools.reduce(operator.mul, i.size(), 1) for i in model.parameters()])\n\n    multi_add = 1\n    layer = wrapper.module\n    type_name = get_layer_type(layer)\n\n    # ops_conv\n    if type_name in ['Conv2d']:\n        out_h = int((x.size()[2] + 2 * layer.padding[0] - layer.kernel_size[0]) /\n                    layer.stride[0] + 1)\n        out_w = int((x.size()[3] + 2 * layer.padding[1] - layer.kernel_size[1]) /\n                    layer.stride[1] + 1)\n        wrapper.flops = layer.in_channels * layer.out_channels * layer.kernel_size[0] *  \\\n                    layer.kernel_size[1] * out_h * out_w / layer.groups * multi_add\n        wrapper.params = get_layer_param(layer)\n    # ops_linear\n    elif type_name in ['Linear']:\n        weight_ops = layer.weight.numel() * multi_add\n        bias_ops = layer.bias.numel()\n        wrapper.flops = weight_ops + bias_ops\n        wrapper.params = get_layer_param(layer)\n    return\n\n\ndef least_square_sklearn(X, Y):\n    from sklearn.linear_model import LinearRegression\n    reg = LinearRegression(fit_intercept=False)\n    reg.fit(X, Y)\n    return reg.coef_\n\n\ndef get_output_folder(parent_dir, env_name):\n    \"\"\"Return save folder.\n    Assumes folders in the parent_dir have suffix -run{run\n    number}. Finds the highest run number and sets the output folder\n    to that number + 1. This is just convenient so that if you run the\n    same script multiple times tensorboard can plot all of the results\n    on the same plots with different names.\n    Parameters\n    ----------\n    parent_dir: str\n      Path of the directory containing all experiment runs.\n    Returns\n    -------\n    parent_dir/run_dir\n      Path to this run's save directory.\n    \"\"\"\n    os.makedirs(parent_dir, exist_ok=True)\n    experiment_id = 0\n    for folder_name in os.listdir(parent_dir):\n        if not os.path.isdir(os.path.join(parent_dir, folder_name)):\n            continue\n        try:\n            folder_name = int(folder_name.split('-run')[-1])\n            if folder_name > experiment_id:\n                experiment_id = folder_name\n        except:\n            pass\n    experiment_id += 1\n\n    parent_dir = os.path.join(parent_dir, env_name)\n    parent_dir = parent_dir + '-run{}'.format(experiment_id)\n    os.makedirs(parent_dir, exist_ok=True)\n    return parent_dir\n"
  },
  {
    "path": "src/aup/compression/torch/pruning/apply_compression.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\nimport logging\nimport torch\n\nlogger = logging.getLogger('torch apply compression')\n\ndef apply_compression_results(model, masks=None, masks_file=None, map_location=None):\n    \"\"\"\n    Apply the masks from ```masks_file``` to the model\n    Note: this API is for inference, because it simply multiplies weights with\n    corresponding masks when this API is called.\n\n    Parameters\n    ----------\n    model : torch.nn.Module\n        The model to be compressed\n    masks : dict\n        The pre-loaded dictionary of weight pruning masks\n    masks_file : str\n        The path of user provided mask file\n    map_location : str\n        the device on which masks are placed, same to map_location in ```torch.load```\n    \"\"\"\n    if masks is not None:\n        masks = masks\n    elif masks_file is not None:\n        masks = torch.load(masks_file, map_location)\n    else:\n        raise ValueError(\"Either masks or masks_file must be passed to apply_compression_results\")\n    for name, module in model.named_modules():\n        if name in masks:\n            module.weight.data = module.weight.data.mul_(masks[name]['weight'])\n            if hasattr(module, 'bias') and module.bias is not None and 'bias' in masks[name]:\n                module.bias.data = module.bias.data.mul_(masks[name]['bias'])"
  },
  {
    "path": "src/aup/compression/torch/pruning/auto_compress_pruner.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n# Modified work Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nimport logging\nimport os\nimport copy\nimport torch\nfrom schema import And, Optional\n\nfrom ..torch_utils import OptimizeMode\nfrom .. import ModelSpeedup\n\nfrom ..compressor import Pruner\nfrom ..utils.config_validation import CompressorSchema\nfrom .simulated_annealing_pruner import SimulatedAnnealingPruner\nfrom .admm_pruner import ADMMPruner\n\n\n_logger = logging.getLogger(__name__)\n\n\nclass AutoCompressPruner(Pruner):\n    \"\"\"\n    A Pytorch implementation of AutoCompress pruning algorithm.\n\n    Parameters\n    ----------\n    model : pytorch model\n        The model to be pruned.\n    config_list : list\n        Supported keys:\n            - sparsity : The target overall sparsity.\n            - op_types : The operation type to prune.\n    trainer : function\n        Function used for the first subproblem of ADMM Pruner.\n        Users should write this function as a normal function to train the Pytorch model\n        and include `model, optimizer, criterion, epoch, callback` as function arguments.\n        Here `callback` acts as an L2 regulizer as presented in the formula (7) of the original paper.\n        The logic of `callback` is implemented inside the Pruner,\n        users are just required to insert `callback()` between `loss.backward()` and `optimizer.step()`.\n        Example::\n\n            def trainer(model, criterion, optimizer, epoch, callback):\n                device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n                train_loader = ...\n                model.train()\n                for batch_idx, (data, target) in enumerate(train_loader):\n                    data, target = data.to(device), target.to(device)\n                    optimizer.zero_grad()\n                    output = model(data)\n                    loss = criterion(output, target)\n                    loss.backward()\n                    # callback should be inserted between loss.backward() and optimizer.step()\n                    if callback:\n                        callback()\n                    optimizer.step()\n    evaluator : function\n        function to evaluate the pruned model.\n        This function should include `model` as the only parameter, and returns a scalar value.\n        Example::\n\n            def evaluator(model):\n                device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n                val_loader = ...\n                model.eval()\n                correct = 0\n                with torch.no_grad():\n                    for data, target in val_loader:\n                        data, target = data.to(device), target.to(device)\n                        output = model(data)\n                        # get the index of the max log-probability\n                        pred = output.argmax(dim=1, keepdim=True)\n                        correct += pred.eq(target.view_as(pred)).sum().item()\n                accuracy = correct / len(val_loader.dataset)\n                return accuracy\n    dummy_input : pytorch tensor\n        The dummy input for ```jit.trace```, users should put it on right device before pass in.\n    num_iterations : int\n        Number of overall iterations.\n    optimize_mode : str\n        optimize mode, `maximize` or `minimize`, by default `maximize`.\n    base_algo : str\n        Base pruning algorithm. `level`, `l1`, `l2` or `fpgm`, by default `l1`. Given the sparsity distribution among the ops,\n        the assigned `base_algo` is used to decide which filters/channels/weights to prune.\n    start_temperature : float\n        Start temperature of the simulated annealing process.\n    stop_temperature : float\n        Stop temperature of the simulated annealing process.\n    cool_down_rate : float\n        Cool down rate of the temperature.\n    perturbation_magnitude : float\n        Initial perturbation magnitude to the sparsities. The magnitude decreases with current temperature.\n    admm_num_iterations : int\n        Number of iterations of ADMM Pruner.\n    admm_training_epochs : int\n        Training epochs of the first optimization subproblem of ADMMPruner.\n    row : float\n        Penalty parameters for ADMM training.\n    experiment_data_dir : string\n        PATH to store temporary experiment data.\n    \"\"\"\n\n    def __init__(self, model, config_list, trainer, evaluator, dummy_input,\n                 num_iterations=3, optimize_mode='maximize', base_algo='l1',\n                 # SimulatedAnnealing related\n                 start_temperature=100, stop_temperature=20, cool_down_rate=0.9, perturbation_magnitude=0.35,\n                 # ADMM related\n                 admm_num_iterations=30, admm_training_epochs=5, row=1e-4,\n                 experiment_data_dir='./'):\n        # original model\n        self._model_to_prune = model\n        self._base_algo = base_algo\n\n        self._trainer = trainer\n        self._evaluator = evaluator\n        self._dummy_input = dummy_input\n        self._num_iterations = num_iterations\n        self._optimize_mode = OptimizeMode(optimize_mode)\n\n        # hyper parameters for SA algorithm\n        self._start_temperature = start_temperature\n        self._stop_temperature = stop_temperature\n        self._cool_down_rate = cool_down_rate\n        self._perturbation_magnitude = perturbation_magnitude\n\n        # hyper parameters for ADMM algorithm\n        self._admm_num_iterations = admm_num_iterations\n        self._admm_training_epochs = admm_training_epochs\n        self._row = row\n\n        # overall pruning rate\n        self._sparsity = config_list[0]['sparsity']\n\n        self._experiment_data_dir = experiment_data_dir\n        if not os.path.exists(self._experiment_data_dir):\n            os.makedirs(self._experiment_data_dir)\n\n    def validate_config(self, model, config_list):\n        \"\"\"\n        Parameters\n        ----------\n        model : torch.nn.Module\n            Model to be pruned\n        config_list : list\n            List on pruning configs\n        \"\"\"\n\n        if self._base_algo == 'level':\n            schema = CompressorSchema([{\n                'sparsity': And(float, lambda n: 0 < n < 1),\n                Optional('op_types'): [str],\n                Optional('op_names'): [str],\n            }], model, _logger)\n        elif self._base_algo in ['l1', 'l2', 'fpgm']:\n            schema = CompressorSchema([{\n                'sparsity': And(float, lambda n: 0 < n < 1),\n                'op_types': ['Conv2d'],\n                Optional('op_names'): [str]\n            }], model, _logger)\n\n        schema.validate(config_list)\n\n    def calc_mask(self, wrapper, **kwargs):\n        return None\n\n    def compress(self):\n        \"\"\"\n        Compress the model with AutoCompress.\n\n        Returns\n        -------\n        torch.nn.Module\n            model with specified modules compressed.\n        \"\"\"\n        _logger.info('Starting AutoCompress pruning...')\n\n        sparsity_each_round = 1 - pow(1-self._sparsity, 1/self._num_iterations)\n\n        for i in range(self._num_iterations):\n            _logger.info('Pruning iteration: %d', i)\n            _logger.info('Target sparsity this round: %s',\n                         1-pow(1-sparsity_each_round, i+1))\n\n            # SimulatedAnnealingPruner\n            _logger.info(\n                'Generating sparsities with SimulatedAnnealingPruner...')\n            SApruner = SimulatedAnnealingPruner(\n                model=copy.deepcopy(self._model_to_prune),\n                config_list=[\n                    {\"sparsity\": sparsity_each_round, \"op_types\": ['Conv2d']}],\n                evaluator=self._evaluator,\n                optimize_mode=self._optimize_mode,\n                base_algo=self._base_algo,\n                start_temperature=self._start_temperature,\n                stop_temperature=self._stop_temperature,\n                cool_down_rate=self._cool_down_rate,\n                perturbation_magnitude=self._perturbation_magnitude,\n                experiment_data_dir=self._experiment_data_dir)\n            config_list = SApruner.compress(return_config_list=True)\n            _logger.info(\"Generated config_list : %s\", config_list)\n\n            # ADMMPruner\n            _logger.info('Performing structured pruning with ADMMPruner...')\n            ADMMpruner = ADMMPruner(\n                model=copy.deepcopy(self._model_to_prune),\n                config_list=config_list,\n                trainer=self._trainer,\n                num_iterations=self._admm_num_iterations,\n                training_epochs=self._admm_training_epochs,\n                row=self._row,\n                base_algo=self._base_algo)\n            ADMMpruner.compress()\n\n            ADMMpruner.export_model(os.path.join(self._experiment_data_dir, 'model_admm_masked.pth'), os.path.join(\n                self._experiment_data_dir, 'mask.pth'))\n\n            # use speed up to prune the model before next iteration, because SimulatedAnnealingPruner & ADMMPruner don't take masked models\n            self._model_to_prune.load_state_dict(torch.load(os.path.join(\n                self._experiment_data_dir, 'model_admm_masked.pth')))\n\n            masks_file = os.path.join(self._experiment_data_dir, 'mask.pth')\n            device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n\n            _logger.info('Speeding up models...')\n            m_speedup = ModelSpeedup(self._model_to_prune, self._dummy_input, masks_file=masks_file, map_location=device)\n            m_speedup.speedup_model()\n\n            evaluation_result = self._evaluator(self._model_to_prune)\n            _logger.info('Evaluation result of the pruned model in iteration %d: %s', i, evaluation_result)\n\n        _logger.info('----------Compression finished--------------')\n\n        os.remove(os.path.join(self._experiment_data_dir, 'model_admm_masked.pth'))\n        os.remove(os.path.join(self._experiment_data_dir, 'mask.pth'))\n\n        return self._model_to_prune\n\n    def export_model(self, model_path, mask_path=None, onnx_path=None, input_shape=None, device=None):\n        _logger.info(\"AutoCompressPruner export directly the pruned model without mask\")\n\n        torch.save(self._model_to_prune.state_dict(), model_path)\n        _logger.info('Model state_dict saved to %s', model_path)\n\n        if onnx_path is not None:\n            assert input_shape is not None, 'input_shape must be specified to export onnx model'\n            # input info needed\n            if device is None:\n                device = torch.device('cpu')\n            input_data = torch.Tensor(*input_shape)\n            torch.onnx.export(self._model_to_prune, input_data.to(device), onnx_path)\n            _logger.info('Model in onnx with input shape %s saved to %s', input_data.shape, onnx_path)\n"
  },
  {
    "path": "src/aup/compression/torch/pruning/constants.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n# Modified work Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nfrom . import LevelPrunerMasker, SlimPrunerMasker, L1FilterPrunerMasker, \\\n    L2FilterPrunerMasker, FPGMPrunerMasker, TaylorFOWeightFilterPrunerMasker, \\\n    ActivationAPoZRankFilterPrunerMasker, ActivationMeanRankFilterPrunerMasker\n\nMASKER_DICT = {\n    'level': LevelPrunerMasker,\n    'slim': SlimPrunerMasker,\n    'l1': L1FilterPrunerMasker,\n    'l2': L2FilterPrunerMasker,\n    'fpgm': FPGMPrunerMasker,\n    'taylorfo': TaylorFOWeightFilterPrunerMasker,\n    'apoz': ActivationAPoZRankFilterPrunerMasker,\n    'mean_activation': ActivationMeanRankFilterPrunerMasker\n}\n"
  },
  {
    "path": "src/aup/compression/torch/pruning/constants_pruner.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n\nfrom .one_shot import LevelPruner, L1FilterPruner, L2FilterPruner, FPGMPruner\n\nPRUNER_DICT = {\n    'level': LevelPruner,\n    'l1': L1FilterPruner,\n    'l2': L2FilterPruner,\n    'fpgm': FPGMPruner\n}\n"
  },
  {
    "path": "src/aup/compression/torch/pruning/finegrained_pruning.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\nimport logging\nimport torch\nfrom .weight_masker import WeightMasker\n\n__all__ = ['LevelPrunerMasker']\n\nlogger = logging.getLogger('torch pruner')\n\n\nclass LevelPrunerMasker(WeightMasker):\n    \"\"\"\n    Prune to an exact pruning level specification\n    \"\"\"\n\n    def calc_mask(self, sparsity, wrapper, wrapper_idx=None):\n        weight = wrapper.module.weight.data.clone()\n        if wrapper.weight_mask is not None:\n            # apply base mask for iterative pruning\n            weight = weight * wrapper.weight_mask\n\n        w_abs = weight.abs()\n        k = int(weight.numel() * sparsity)\n        if k == 0:\n            return {'weight_mask': torch.ones(weight.shape).type_as(weight)}\n        threshold = torch.topk(w_abs.view(-1), k, largest=False)[0].max()\n        mask_weight = torch.gt(w_abs, threshold).type_as(weight)\n        mask = {'weight_mask': mask_weight}\n        return mask\n"
  },
  {
    "path": "src/aup/compression/torch/pruning/lottery_ticket.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n# Modified work Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nimport copy\nimport logging\nimport torch\nfrom schema import And, Optional\nfrom ..utils.config_validation import CompressorSchema\nfrom ..compressor import Pruner\nfrom .finegrained_pruning import LevelPrunerMasker\n\nlogger = logging.getLogger('torch pruner')\n\nclass LotteryTicketPruner(Pruner):\n    \"\"\"\n    Parameters\n    ----------\n    model : pytorch model\n        The model to be pruned\n    config_list : list\n        Supported keys:\n            - prune_iterations : The number of rounds for the iterative pruning.\n            - sparsity : The final sparsity when the compression is done.\n    optimizer : pytorch optimizer\n        The optimizer for the model\n    lr_scheduler : pytorch lr scheduler\n        The lr scheduler for the model if used\n    reset_weights : bool\n        Whether reset weights and optimizer at the beginning of each round.\n    \"\"\"\n    def __init__(self, model, config_list, optimizer=None, lr_scheduler=None, reset_weights=True):\n        # save init weights and optimizer\n        self.reset_weights = reset_weights\n        if self.reset_weights:\n            self._model = model\n            self._optimizer = optimizer\n            self._model_state = copy.deepcopy(model.state_dict())\n            self._optimizer_state = copy.deepcopy(optimizer.state_dict())\n            self._lr_scheduler = lr_scheduler\n            if lr_scheduler is not None:\n                self._scheduler_state = copy.deepcopy(lr_scheduler.state_dict())\n\n        super().__init__(model, config_list, optimizer)\n        self.curr_prune_iteration = None\n        self.prune_iterations = config_list[0]['prune_iterations']\n        self.masker = LevelPrunerMasker(model, self)\n\n    def validate_config(self, model, config_list):\n        \"\"\"\n        Parameters\n        ----------\n        model : torch.nn.Module\n            Model to be pruned\n        config_list : list\n            Supported keys:\n                - prune_iterations : The number of rounds for the iterative pruning.\n                - sparsity : The final sparsity when the compression is done.\n        \"\"\"\n        schema = CompressorSchema([{\n            'sparsity': And(float, lambda n: 0 < n < 1),\n            'prune_iterations': And(int, lambda n: n > 0),\n            Optional('op_types'): [str],\n            Optional('op_names'): [str]\n        }], model, logger)\n\n        schema.validate(config_list)\n        assert len(set([x['prune_iterations'] for x in config_list])) == 1, 'The values of prune_iterations must be equal in your config'\n\n    def _calc_sparsity(self, sparsity):\n        keep_ratio_once = (1 - sparsity) ** (1 / self.prune_iterations)\n        curr_keep_ratio = keep_ratio_once ** self.curr_prune_iteration\n        return max(1 - curr_keep_ratio, 0)\n\n    def _calc_mask(self, wrapper, sparsity):\n        weight = wrapper.module.weight.data\n        if self.curr_prune_iteration == 0:\n            mask = {'weight_mask': torch.ones(weight.shape).type_as(weight)}\n        else:\n            curr_sparsity = self._calc_sparsity(sparsity)\n            mask = self.masker.calc_mask(sparsity=curr_sparsity, wrapper=wrapper)\n        return mask\n\n    def calc_mask(self, wrapper, **kwargs):\n        \"\"\"\n        Generate mask for the given ``weight``.\n\n        Parameters\n        ----------\n        wrapper : Module\n            The layer to be pruned\n\n        Returns\n        -------\n        tensor\n            The mask for this weight, it is ```None``` because this pruner\n            calculates and assigns masks in ```prune_iteration_start```,\n            no need to do anything in this function.\n        \"\"\"\n        return None\n\n    def get_prune_iterations(self):\n        \"\"\"\n        Return the range for iterations.\n        In the first prune iteration, masks are all one, thus, add one more iteration\n\n        Returns\n        -------\n        list\n            A list for pruning iterations\n        \"\"\"\n        return range(self.prune_iterations + 1)\n\n    def prune_iteration_start(self):\n        \"\"\"\n        Control the pruning procedure on updated epoch number.\n        Should be called at the beginning of the epoch.\n        \"\"\"\n        if self.curr_prune_iteration is None:\n            self.curr_prune_iteration = 0\n        else:\n            self.curr_prune_iteration += 1\n        assert self.curr_prune_iteration < self.prune_iterations + 1, 'Exceed the configured prune_iterations'\n\n        modules_wrapper = self.get_modules_wrapper()\n        modules_to_compress = self.get_modules_to_compress()\n        for layer, config in modules_to_compress:\n            module_wrapper = None\n            for wrapper in modules_wrapper:\n                if wrapper.name == layer.name:\n                    module_wrapper = wrapper\n                    break\n            assert module_wrapper is not None\n\n            sparsity = config.get('sparsity')\n            mask = self._calc_mask(module_wrapper, sparsity)\n            # TODO: directly use weight_mask is not good\n            module_wrapper.weight_mask = mask['weight_mask']\n            # there is no mask for bias\n\n        # reinit weights back to original after new masks are generated\n        if self.reset_weights:\n            # should use this member function to reset model weights\n            self.load_model_state_dict(self._model_state)\n            self._optimizer.load_state_dict(self._optimizer_state)\n            if self._lr_scheduler is not None:\n                self._lr_scheduler.load_state_dict(self._scheduler_state)\n"
  },
  {
    "path": "src/aup/compression/torch/pruning/net_adapt_pruner.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n# Modified work Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nimport logging\nimport os\nimport copy\nimport json\nimport torch\nfrom schema import And, Optional\n\nfrom ..torch_utils import OptimizeMode\n\nfrom ..compressor import Pruner\nfrom ..utils.config_validation import CompressorSchema\nfrom ..utils.num_param_counter import get_total_num_weights\nfrom .constants_pruner import PRUNER_DICT\n\n\n_logger = logging.getLogger(__name__)\n\n\nclass NetAdaptPruner(Pruner):\n    \"\"\"\n    A Pytorch implementation of NetAdapt compression algorithm.\n\n    Parameters\n    ----------\n    model : pytorch model\n        The model to be pruned.\n    config_list : list\n        Supported keys:\n            - sparsity : The target overall sparsity.\n            - op_types : The operation type to prune.\n    short_term_fine_tuner : function\n        function to short-term fine tune the masked model.\n        This function should include `model` as the only parameter,\n        and fine tune the model for a short term after each pruning iteration.\n        Example::\n\n            def short_term_fine_tuner(model, epoch=3):\n                device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n                train_loader = ...\n                criterion = torch.nn.CrossEntropyLoss()\n                optimizer = torch.optim.SGD(model.parameters(), lr=0.01)\n                model.train()\n                for _ in range(epoch):\n                    for batch_idx, (data, target) in enumerate(train_loader):\n                        data, target = data.to(device), target.to(device)\n                        optimizer.zero_grad()\n                        output = model(data)\n                        loss = criterion(output, target)\n                        loss.backward()\n                        optimizer.step()\n    evaluator : function\n        function to evaluate the masked model.\n        This function should include `model` as the only parameter, and returns a scalar value.\n        Example::\n\n            def evaluator(model):\n                device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n                val_loader = ...\n                model.eval()\n                correct = 0\n                with torch.no_grad():\n                    for data, target in val_loader:\n                        data, target = data.to(device), target.to(device)\n                        output = model(data)\n                        # get the index of the max log-probability\n                        pred = output.argmax(dim=1, keepdim=True)\n                        correct += pred.eq(target.view_as(pred)).sum().item()\n                accuracy = correct / len(val_loader.dataset)\n                return accuracy\n    optimize_mode : str\n        optimize mode, `maximize` or `minimize`, by default `maximize`.\n    base_algo : str\n        Base pruning algorithm. `level`, `l1`, `l2` or `fpgm`, by default `l1`. Given the sparsity distribution among the ops,\n        the assigned `base_algo` is used to decide which filters/channels/weights to prune.\n    sparsity_per_iteration : float\n        sparsity to prune in each iteration.\n    experiment_data_dir : str\n        PATH to save experiment data,\n        including the config_list generated for the base pruning algorithm and the performance of the pruned model.\n    \"\"\"\n\n    def __init__(self, model, config_list, short_term_fine_tuner, evaluator,\n                 optimize_mode='maximize', base_algo='l1', sparsity_per_iteration=0.05, experiment_data_dir='./'):\n        # models used for iterative pruning and evaluation\n        self._model_to_prune = copy.deepcopy(model)\n        self._base_algo = base_algo\n\n        super().__init__(model, config_list)\n\n        self._short_term_fine_tuner = short_term_fine_tuner\n        self._evaluator = evaluator\n        self._optimize_mode = OptimizeMode(optimize_mode)\n\n        # hyper parameters for NetAdapt algorithm\n        self._sparsity_per_iteration = sparsity_per_iteration\n\n        # overall pruning rate\n        self._sparsity = config_list[0]['sparsity']\n\n        # config_list\n        self._config_list_generated = []\n\n        self._experiment_data_dir = experiment_data_dir\n        if not os.path.exists(self._experiment_data_dir):\n            os.makedirs(self._experiment_data_dir)\n\n        self._tmp_model_path = os.path.join(self._experiment_data_dir, 'tmp_model.pth')\n\n    def validate_config(self, model, config_list):\n        \"\"\"\n        Parameters\n        ----------\n        model : torch.nn.Module\n            Model to be pruned\n        config_list : list\n            List on pruning configs\n        \"\"\"\n\n        if self._base_algo == 'level':\n            schema = CompressorSchema([{\n                'sparsity': And(float, lambda n: 0 < n < 1),\n                Optional('op_types'): [str],\n                Optional('op_names'): [str],\n            }], model, _logger)\n        elif self._base_algo in ['l1', 'l2', 'fpgm']:\n            schema = CompressorSchema([{\n                'sparsity': And(float, lambda n: 0 < n < 1),\n                'op_types': ['Conv2d'],\n                Optional('op_names'): [str]\n            }], model, _logger)\n\n        schema.validate(config_list)\n\n    def calc_mask(self, wrapper, **kwargs):\n        return None\n\n    def _update_config_list(self, config_list, op_name, sparsity):\n        '''\n        update sparsity of op_name in config_list\n        '''\n        config_list_updated = copy.deepcopy(config_list)\n\n        for idx, item in enumerate(config_list):\n            if op_name in item['op_names']:\n                config_list_updated[idx]['sparsity'] = sparsity\n                return config_list_updated\n\n        # if op_name is not in self._config_list_generated, create a new json item\n        if self._base_algo in ['l1', 'l2', 'fpgm']:\n            config_list_updated.append(\n                {'sparsity': sparsity, 'op_types': ['Conv2d'], 'op_names': [op_name]})\n        elif self._base_algo == 'level':\n            config_list_updated.append(\n                {'sparsity': sparsity, 'op_names': [op_name]})\n\n        return config_list_updated\n\n    def _get_op_num_weights_remained(self, op_name, module):\n        '''\n        Get the number of weights remained after channel pruning with current sparsity\n\n        Returns\n        -------\n        int\n            remained number of weights of the op\n        '''\n\n        # if op is wrapped by the pruner\n        for wrapper in self.get_modules_wrapper():\n            if wrapper.name == op_name:\n                return wrapper.weight_mask.sum().item()\n\n        # if op is not wrapped by the pruner\n        return module.weight.data.numel()\n\n    def _get_op_sparsity(self, op_name):\n        for config in self._config_list_generated:\n            if 'op_names' in config and op_name in config['op_names']:\n                return config['sparsity']\n        return 0\n\n    def _calc_num_related_weights(self, op_name):\n        '''\n        Calculate total number weights of the op and the next op, applicable only for models without dependencies among ops\n\n        Parameters\n        ----------\n        op_name : str\n\n        Returns\n        -------\n        int\n            total number of all the realted (current and the next) op weights\n        '''\n        num_weights = 0\n        flag_found = False\n        previous_name = None\n        previous_module = None\n\n        for name, module in self._model_to_prune.named_modules():\n            if not flag_found and name != op_name and type(module).__name__ in ['Conv2d', 'Linear']:\n                previous_name = name\n                previous_module = module\n            if not flag_found and name == op_name:\n                _logger.debug(\"original module found: %s\", name)\n                num_weights = module.weight.data.numel()\n\n                # consider related pruning in this op caused by previous op's pruning\n                if previous_module:\n                    sparsity_previous_op = self._get_op_sparsity(previous_name)\n                    if sparsity_previous_op:\n                        _logger.debug(\n                            \"decrease op's weights by %s due to previous op %s's pruning...\", sparsity_previous_op, previous_name)\n                        num_weights *= (1-sparsity_previous_op)\n\n                flag_found = True\n                continue\n            if flag_found and type(module).__name__ in ['Conv2d', 'Linear']:\n                _logger.debug(\"related module found: %s\", name)\n                # channel/filter pruning crossing is considered here, so only the num_weights after channel pruning is valuable\n                num_weights += self._get_op_num_weights_remained(name, module)\n                break\n\n        _logger.debug(\"num related weights of op %s : %d\", op_name, num_weights)\n\n        return num_weights\n\n    def compress(self):\n        \"\"\"\n        Compress the model.\n\n        Returns\n        -------\n        torch.nn.Module\n            model with specified modules compressed.\n        \"\"\"\n        _logger.info('Starting NetAdapt Compression...')\n\n        pruning_iteration = 0\n        current_sparsity = 0\n        delta_num_weights_per_iteration = \\\n            int(get_total_num_weights(self._model_to_prune, ['Conv2d', 'Linear']) * self._sparsity_per_iteration)\n\n        # stop condition\n        while current_sparsity < self._sparsity:\n            _logger.info('Pruning iteration: %d', pruning_iteration)\n\n            # calculate target sparsity of this iteration\n            target_sparsity = current_sparsity + self._sparsity_per_iteration\n\n            # variable to store the info of the best layer found in this iteration\n            best_op = {}\n\n            for wrapper in self.get_modules_wrapper():\n                _logger.debug(\"op name : %s\", wrapper.name)\n                _logger.debug(\"op weights : %d\", wrapper.weight_mask.numel())\n                _logger.debug(\"op left weights : %d\", wrapper.weight_mask.sum().item())\n\n                current_op_sparsity = 1 - wrapper.weight_mask.sum().item() / wrapper.weight_mask.numel()\n                _logger.debug(\"current op sparsity : %s\", current_op_sparsity)\n\n                # sparsity that this layer needs to prune to satisfy the requirement\n                target_op_sparsity = current_op_sparsity + delta_num_weights_per_iteration / self._calc_num_related_weights(wrapper.name)\n\n                if target_op_sparsity >= 1:\n                    _logger.info('Layer %s has no enough weights (remained) to prune', wrapper.name)\n                    continue\n\n                config_list = self._update_config_list(self._config_list_generated, wrapper.name, target_op_sparsity)\n                _logger.debug(\"config_list used : %s\", config_list)\n\n                pruner = PRUNER_DICT[self._base_algo](copy.deepcopy(self._model_to_prune), config_list)\n                model_masked = pruner.compress()\n\n                # Short-term fine tune the pruned model\n                self._short_term_fine_tuner(model_masked)\n\n                performance = self._evaluator(model_masked)\n                _logger.info(\"Layer : %s, evaluation result after short-term fine tuning : %s\", wrapper.name, performance)\n\n                if not best_op \\\n                    or (self._optimize_mode is OptimizeMode.Maximize and performance > best_op['performance']) \\\n                    or (self._optimize_mode is OptimizeMode.Minimize and performance < best_op['performance']):\n                    _logger.debug(\"updating best layer to %s...\", wrapper.name)\n                    # find weight mask of this layer\n                    for w in pruner.get_modules_wrapper():\n                        if w.name == wrapper.name:\n                            masks = {'weight_mask': w.weight_mask,\n                                     'bias_mask': w.bias_mask}\n                            break\n                    best_op = {\n                        'op_name': wrapper.name,\n                        'sparsity': target_op_sparsity,\n                        'performance': performance,\n                        'masks': masks\n                    }\n\n                    # save model weights\n                    pruner.export_model(self._tmp_model_path)\n\n            if not best_op:\n                # decrease pruning step\n                self._sparsity_per_iteration *= 0.5\n                _logger.info(\"No more layers to prune, decrease pruning step to %s\", self._sparsity_per_iteration)\n                continue\n\n            # Pick the best layer to prune, update iterative information\n            # update config_list\n            self._config_list_generated = self._update_config_list(\n                self._config_list_generated, best_op['op_name'], best_op['sparsity'])\n\n            # update weights parameters\n            self._model_to_prune.load_state_dict(torch.load(self._tmp_model_path))\n\n            # update mask of the chosen op\n            for wrapper in self.get_modules_wrapper():\n                if wrapper.name == best_op['op_name']:\n                    for k in best_op['masks']:\n                        setattr(wrapper, k, best_op['masks'][k])\n                    break\n\n            current_sparsity = target_sparsity\n            _logger.info('Pruning iteration %d finished, current sparsity: %s', pruning_iteration, current_sparsity)\n            _logger.info('Layer %s seleted with sparsity %s, performance after pruning & short term fine-tuning : %s',\n                         best_op['op_name'], best_op['sparsity'], best_op['performance'])\n            pruning_iteration += 1\n\n            self._final_performance = best_op['performance']\n\n        # load weights parameters\n        self.load_model_state_dict(torch.load(self._tmp_model_path))\n        os.remove(self._tmp_model_path)\n\n        _logger.info('----------Compression finished--------------')\n        _logger.info('config_list generated: %s', self._config_list_generated)\n        _logger.info(\"Performance after pruning: %s\", self._final_performance)\n        _logger.info(\"Masked sparsity: %.6f\", current_sparsity)\n\n        # save best config found and best performance\n        with open(os.path.join(self._experiment_data_dir, 'search_result.json'), 'w') as jsonfile:\n            json.dump({\n                'performance': self._final_performance,\n                'config_list': json.dumps(self._config_list_generated)\n            }, jsonfile)\n\n        _logger.info('search history and result saved to foler : %s', self._experiment_data_dir)\n\n        return self.bound_model\n"
  },
  {
    "path": "src/aup/compression/torch/pruning/one_shot.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n# Modified work Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nimport logging\nfrom schema import And, Optional, SchemaError\nfrom .._graph_utils import TorchModuleGraph\nfrom ..utils.shape_dependency import ChannelDependency, GroupDependency\nfrom .constants import MASKER_DICT\nfrom ..utils.config_validation import CompressorSchema\nfrom ..compressor import Pruner\n\n\n__all__ = ['LevelPruner', 'SlimPruner', 'L1FilterPruner', 'L2FilterPruner', 'FPGMPruner',\n           'TaylorFOWeightFilterPruner', 'ActivationAPoZRankFilterPruner', 'ActivationMeanRankFilterPruner']\n\nlogger = logging.getLogger(__name__)\nlogger.setLevel(logging.INFO)\n\n\nclass OneshotPruner(Pruner):\n    \"\"\"\n    Prune model to an exact pruning level for one time.\n    \"\"\"\n\n    def __init__(self, model, config_list, pruning_algorithm='level', optimizer=None, **algo_kwargs):\n        \"\"\"\n        Parameters\n        ----------\n        model : torch.nn.Module\n            Model to be pruned\n        config_list : list\n            List on pruning configs\n        pruning_algorithm: str\n            algorithms being used to prune model\n        optimizer: torch.optim.Optimizer\n            Optimizer used to train model\n        algo_kwargs: dict\n            Additional parameters passed to pruning algorithm masker class\n        \"\"\"\n\n        super().__init__(model, config_list, optimizer)\n        self.set_wrappers_attribute(\"if_calculated\", False)\n        self.masker = MASKER_DICT[pruning_algorithm](\n            model, self, **algo_kwargs)\n\n    def validate_config(self, model, config_list):\n        \"\"\"\n        Parameters\n        ----------\n        model : torch.nn.Module\n            Model to be pruned\n        config_list : list\n            List on pruning configs\n        \"\"\"\n        schema = CompressorSchema([{\n            'sparsity': And(float, lambda n: 0 < n < 1),\n            Optional('op_types'): [str],\n            Optional('op_names'): [str]\n        }], model, logger)\n\n        schema.validate(config_list)\n\n    def calc_mask(self, wrapper, wrapper_idx=None):\n        \"\"\"\n        Calculate the mask of given layer\n        Parameters\n        ----------\n        wrapper : Module\n            the module to instrument the compression operation\n        wrapper_idx: int\n            index of this wrapper in pruner's all wrappers\n        Returns\n        -------\n        dict\n            dictionary for storing masks, keys of the dict:\n            'weight_mask':  weight mask tensor\n            'bias_mask': bias mask tensor (optional)\n        \"\"\"\n        if wrapper.if_calculated:\n            return None\n\n        sparsity = wrapper.config['sparsity']\n        if not wrapper.if_calculated:\n            masks = self.masker.calc_mask(\n                sparsity=sparsity, wrapper=wrapper, wrapper_idx=wrapper_idx)\n\n            # masker.calc_mask returns None means calc_mask is not calculated sucessfully, can try later\n            if masks is not None:\n                wrapper.if_calculated = True\n            return masks\n        else:\n            return None\n\n\nclass LevelPruner(OneshotPruner):\n    \"\"\"\n    Parameters\n    ----------\n    model : torch.nn.Module\n        Model to be pruned\n    config_list : list\n        Supported keys:\n            - sparsity : This is to specify the sparsity operations to be compressed to.\n            - op_types : Operation types to prune.\n    optimizer: torch.optim.Optimizer\n            Optimizer used to train model\n    \"\"\"\n\n    def __init__(self, model, config_list, optimizer=None):\n        super().__init__(model, config_list, pruning_algorithm='level', optimizer=optimizer)\n\n\nclass SlimPruner(OneshotPruner):\n    \"\"\"\n    Parameters\n    ----------\n    model : torch.nn.Module\n        Model to be pruned\n    config_list : list\n        Supported keys:\n            - sparsity : This is to specify the sparsity operations to be compressed to.\n            - op_types : Only BatchNorm2d is supported in Slim Pruner.\n    optimizer: torch.optim.Optimizer\n            Optimizer used to train model\n    \"\"\"\n\n    def __init__(self, model, config_list, optimizer=None):\n        super().__init__(model, config_list, pruning_algorithm='slim', optimizer=optimizer)\n\n    def validate_config(self, model, config_list):\n        schema = CompressorSchema([{\n            'sparsity': And(float, lambda n: 0 < n < 1),\n            'op_types': ['BatchNorm2d'],\n            Optional('op_names'): [str]\n        }], model, logger)\n\n        schema.validate(config_list)\n\n        if len(config_list) > 1:\n            logger.warning('Slim pruner only supports 1 configuration')\n\n\nclass _StructuredFilterPruner(OneshotPruner):\n    \"\"\"\n    _StructuredFilterPruner has two ways to calculate the masks\n    for conv layers. In the normal way, the _StructuredFilterPruner\n    will calculate the mask of each layer separately. For example, each\n    conv layer determine which filters should be pruned according to its L1\n    norm. In constrast, in the dependency-aware way, the layers that in a\n    dependency group will be pruned jointly and these layers will be forced\n    to prune the same channels.\n    \"\"\"\n\n    def __init__(self, model, config_list, pruning_algorithm, optimizer=None, dependency_aware=False, dummy_input=None, **algo_kwargs):\n        super().__init__(model, config_list, pruning_algorithm=pruning_algorithm,\n                         optimizer=optimizer, **algo_kwargs)\n        self.dependency_aware = dependency_aware\n        # set the dependency-aware switch for the masker\n        self.masker.dependency_aware = dependency_aware\n        self.dummy_input = dummy_input\n        if self.dependency_aware:\n            errmsg = \"When dependency_aware is set, the dummy_input should not be None\"\n            assert self.dummy_input is not None, errmsg\n            # Get the TorchModuleGraph of the target model\n            # to trace the model, we need to unwrap the wrappers\n            self._unwrap_model()\n            self.graph = TorchModuleGraph(model, dummy_input)\n            self._wrap_model()\n            self.channel_depen = ChannelDependency(\n                traced_model=self.graph.trace)\n            self.group_depen = GroupDependency(traced_model=self.graph.trace)\n            self.channel_depen = self.channel_depen.dependency_sets\n            self.channel_depen = {\n                name: sets for sets in self.channel_depen for name in sets}\n            self.group_depen = self.group_depen.dependency_sets\n\n    def update_mask(self):\n        if not self.dependency_aware:\n            # if we use the normal way to update the mask,\n            # then call the update_mask of the father class\n            super(_StructuredFilterPruner, self).update_mask()\n        else:\n            # if we update the mask in a dependency-aware way\n            # then we call _dependency_update_mask\n            self._dependency_update_mask()\n\n    def validate_config(self, model, config_list):\n        schema = CompressorSchema([{\n            Optional('sparsity'): And(float, lambda n: 0 < n < 1),\n            Optional('op_types'): ['Conv2d'],\n            Optional('op_names'): [str],\n            Optional('exclude'): bool\n        }], model, logger)\n\n        schema.validate(config_list)\n        for config in config_list:\n            if 'exclude' not in config and 'sparsity' not in config:\n                raise SchemaError('Either sparisty or exclude must be specified!')\n\n    def _dependency_calc_mask(self, wrappers, channel_dsets, wrappers_idx=None):\n        \"\"\"\n        calculate the masks for the conv layers in the same\n        channel dependecy set. All the layers passed in have\n        the same number of channels.\n\n        Parameters\n        ----------\n        wrappers: list\n            The list of the wrappers that in the same channel dependency\n            set.\n        wrappers_idx: list\n            The list of the indexes of wrapppers.\n        Returns\n        -------\n        masks: dict\n            A dict object that contains the masks of the layers in this\n            dependency group, the key is the name of the convolutional layers.\n        \"\"\"\n        # The number of the groups for each conv layers\n        # Note that, this number may be different from its\n        # original number of groups of filters.\n        groups = [self.group_depen[_w.name] for _w in wrappers]\n        sparsities = [_w.config['sparsity'] for _w in wrappers]\n        masks = self.masker.calc_mask(\n            sparsities, wrappers, wrappers_idx, channel_dsets=channel_dsets, groups=groups)\n        if masks is not None:\n            # if masks is None, then the mask calculation fails.\n            # for example, in activation related maskers, we should\n            # pass enough batches of data to the model, so that the\n            # masks can be calculated successfully.\n            for _w in wrappers:\n                _w.if_calculated = True\n        return masks\n\n    def _dependency_update_mask(self):\n        \"\"\"\n        In the original update_mask, the wraper of each layer will update its\n        own mask according to the sparsity specified in the config_list. However, in\n        the _dependency_update_mask, we may prune several layers at the same\n        time according the sparsities and the channel/group dependencies.\n        \"\"\"\n        name2wrapper = {x.name: x for x in self.get_modules_wrapper()}\n        wrapper2index = {x: i for i, x in enumerate(self.get_modules_wrapper())}\n        for wrapper in self.get_modules_wrapper():\n            if wrapper.if_calculated:\n                continue\n            # find all the conv layers that have channel dependecy with this layer\n            # and prune all these layers at the same time.\n            _names = [x for x in self.channel_depen[wrapper.name]]\n            logger.info('Pruning the dependent layers: %s', ','.join(_names))\n            _wrappers = [name2wrapper[name]\n                         for name in _names if name in name2wrapper]\n            _wrapper_idxes = [wrapper2index[_w] for _w in _wrappers]\n\n            masks = self._dependency_calc_mask(\n                _wrappers, _names, wrappers_idx=_wrapper_idxes)\n            if masks is not None:\n                for layer in masks:\n                    for mask_type in masks[layer]:\n                        assert hasattr(\n                            name2wrapper[layer], mask_type), \"there is no attribute '%s' in wrapper on %s\" % (mask_type, layer)\n                        setattr(name2wrapper[layer], mask_type, masks[layer][mask_type])\n\n\nclass L1FilterPruner(_StructuredFilterPruner):\n    \"\"\"\n    Parameters\n    ----------\n    model : torch.nn.Module\n        Model to be pruned\n    config_list : list\n        Supported keys:\n            - sparsity : This is to specify the sparsity operations to be compressed to.\n            - op_types : Only Conv2d is supported in L1FilterPruner.\n    optimizer: torch.optim.Optimizer\n            Optimizer used to train model\n    dependency_aware: bool\n        If prune the model in a dependency-aware way. If it is `True`, this pruner will\n        prune the model according to the l2-norm of weights and the channel-dependency or\n        group-dependency of the model. In this way, the pruner will force the conv layers\n        that have dependencies to prune the same channels, so the speedup module can better\n        harvest the speed benefit from the pruned model. Note that, if this flag is set True\n        , the dummy_input cannot be None, because the pruner needs a dummy input to trace the\n        dependency between the conv layers.\n    dummy_input : torch.Tensor\n        The dummy input to analyze the topology constraints. Note that, the dummy_input\n        should on the same device with the model.\n    \"\"\"\n\n    def __init__(self, model, config_list, optimizer=None, dependency_aware=False, dummy_input=None):\n        super().__init__(model, config_list, pruning_algorithm='l1', optimizer=optimizer,\n                         dependency_aware=dependency_aware, dummy_input=dummy_input)\n\n\nclass L2FilterPruner(_StructuredFilterPruner):\n    \"\"\"\n    Parameters\n    ----------\n    model : torch.nn.Module\n        Model to be pruned\n    config_list : list\n        Supported keys:\n            - sparsity : This is to specify the sparsity operations to be compressed to.\n            - op_types : Only Conv2d is supported in L2FilterPruner.\n    optimizer: torch.optim.Optimizer\n            Optimizer used to train model\n    dependency_aware: bool\n        If prune the model in a dependency-aware way. If it is `True`, this pruner will\n        prune the model according to the l2-norm of weights and the channel-dependency or\n        group-dependency of the model. In this way, the pruner will force the conv layers\n        that have dependencies to prune the same channels, so the speedup module can better\n        harvest the speed benefit from the pruned model. Note that, if this flag is set True\n        , the dummy_input cannot be None, because the pruner needs a dummy input to trace the\n        dependency between the conv layers.\n    dummy_input : torch.Tensor\n        The dummy input to analyze the topology constraints. Note that, the dummy_input\n        should on the same device with the model.\n    \"\"\"\n\n    def __init__(self, model, config_list, optimizer=None, dependency_aware=False, dummy_input=None):\n        super().__init__(model, config_list, pruning_algorithm='l2', optimizer=optimizer,\n                         dependency_aware=dependency_aware, dummy_input=dummy_input)\n\n\nclass FPGMPruner(_StructuredFilterPruner):\n    \"\"\"\n    Parameters\n    ----------\n    model : torch.nn.Module\n        Model to be pruned\n    config_list : list\n        Supported keys:\n            - sparsity : This is to specify the sparsity operations to be compressed to.\n            - op_types : Only Conv2d is supported in FPGM Pruner.\n    optimizer: torch.optim.Optimizer\n            Optimizer used to train model\n    dependency_aware: bool\n        If prune the model in a dependency-aware way. If it is `True`, this pruner will\n        prune the model according to the l2-norm of weights and the channel-dependency or\n        group-dependency of the model. In this way, the pruner will force the conv layers\n        that have dependencies to prune the same channels, so the speedup module can better\n        harvest the speed benefit from the pruned model. Note that, if this flag is set True\n        , the dummy_input cannot be None, because the pruner needs a dummy input to trace the\n        dependency between the conv layers.\n    dummy_input : torch.Tensor\n        The dummy input to analyze the topology constraints. Note that, the dummy_input\n        should on the same device with the model.\n    \"\"\"\n\n    def __init__(self, model, config_list, optimizer=None, dependency_aware=False, dummy_input=None):\n        super().__init__(model, config_list, pruning_algorithm='fpgm',\n                         dependency_aware=dependency_aware, dummy_input=dummy_input, optimizer=optimizer)\n\n\nclass TaylorFOWeightFilterPruner(_StructuredFilterPruner):\n    \"\"\"\n    Parameters\n    ----------\n    model : torch.nn.Module\n        Model to be pruned\n    config_list : list\n        Supported keys:\n            - sparsity : How much percentage of convolutional filters are to be pruned.\n            - op_types : Currently only Conv2d is supported in TaylorFOWeightFilterPruner.\n    optimizer: torch.optim.Optimizer\n            Optimizer used to train model\n    statistics_batch_num: int\n        The number of batches to statistic the activation.\n    dependency_aware: bool\n        If prune the model in a dependency-aware way. If it is `True`, this pruner will\n        prune the model according to the l2-norm of weights and the channel-dependency or\n        group-dependency of the model. In this way, the pruner will force the conv layers\n        that have dependencies to prune the same channels, so the speedup module can better\n        harvest the speed benefit from the pruned model. Note that, if this flag is set True\n        , the dummy_input cannot be None, because the pruner needs a dummy input to trace the\n        dependency between the conv layers.\n    dummy_input : torch.Tensor\n        The dummy input to analyze the topology constraints. Note that, the dummy_input\n        should on the same device with the model.\n\n    \"\"\"\n\n    def __init__(self, model, config_list, optimizer=None, statistics_batch_num=1,\n                 dependency_aware=False, dummy_input=None):\n        super().__init__(model, config_list, pruning_algorithm='taylorfo',\n                         dependency_aware=dependency_aware, dummy_input=dummy_input,\n                         optimizer=optimizer, statistics_batch_num=statistics_batch_num)\n\n\nclass ActivationAPoZRankFilterPruner(_StructuredFilterPruner):\n    \"\"\"\n    Parameters\n    ----------\n    model : torch.nn.Module\n        Model to be pruned\n    config_list : list\n        Supported keys:\n            - sparsity : How much percentage of convolutional filters are to be pruned.\n            - op_types : Only Conv2d is supported in ActivationAPoZRankFilterPruner.\n    optimizer: torch.optim.Optimizer\n            Optimizer used to train model\n    activation: str\n        The activation type.\n    statistics_batch_num: int\n        The number of batches to statistic the activation.\n    dependency_aware: bool\n        If prune the model in a dependency-aware way. If it is `True`, this pruner will\n        prune the model according to the l2-norm of weights and the channel-dependency or\n        group-dependency of the model. In this way, the pruner will force the conv layers\n        that have dependencies to prune the same channels, so the speedup module can better\n        harvest the speed benefit from the pruned model. Note that, if this flag is set True\n        , the dummy_input cannot be None, because the pruner needs a dummy input to trace the\n        dependency between the conv layers.\n    dummy_input : torch.Tensor\n        The dummy input to analyze the topology constraints. Note that, the dummy_input\n        should on the same device with the model.\n\n    \"\"\"\n\n    def __init__(self, model, config_list, optimizer=None, activation='relu',\n                 statistics_batch_num=1, dependency_aware=False, dummy_input=None):\n        super().__init__(model, config_list, pruning_algorithm='apoz', optimizer=optimizer,\n                         dependency_aware=dependency_aware, dummy_input=dummy_input,\n                         activation=activation, statistics_batch_num=statistics_batch_num)\n\n\nclass ActivationMeanRankFilterPruner(_StructuredFilterPruner):\n    \"\"\"\n    Parameters\n    ----------\n    model : torch.nn.Module\n        Model to be pruned\n    config_list : list\n        Supported keys:\n            - sparsity : How much percentage of convolutional filters are to be pruned.\n            - op_types : Only Conv2d is supported in ActivationMeanRankFilterPruner.\n    optimizer: torch.optim.Optimizer\n            Optimizer used to train model.\n    activation: str\n        The activation type.\n    statistics_batch_num: int\n        The number of batches to statistic the activation.\n    dependency_aware: bool\n        If prune the model in a dependency-aware way. If it is `True`, this pruner will\n        prune the model according to the l2-norm of weights and the channel-dependency or\n        group-dependency of the model. In this way, the pruner will force the conv layers\n        that have dependencies to prune the same channels, so the speedup module can better\n        harvest the speed benefit from the pruned model. Note that, if this flag is set True\n        , the dummy_input cannot be None, because the pruner needs a dummy input to trace the\n        dependency between the conv layers.\n    dummy_input : torch.Tensor\n        The dummy input to analyze the topology constraints. Note that, the dummy_input\n        should on the same device with the model.\n    \"\"\"\n\n    def __init__(self, model, config_list, optimizer=None, activation='relu',\n                 statistics_batch_num=1, dependency_aware=False, dummy_input=None):\n        super().__init__(model, config_list, pruning_algorithm='mean_activation', optimizer=optimizer,\n                         dependency_aware=dependency_aware, dummy_input=dummy_input,\n                         activation=activation, statistics_batch_num=statistics_batch_num)\n"
  },
  {
    "path": "src/aup/compression/torch/pruning/sensitivity_pruner.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n# Modified work Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nimport os\nimport csv\nimport copy\nimport json\nimport logging\nimport torch\n\nfrom schema import And, Optional\nfrom ..compressor import Pruner\nfrom ..utils.config_validation import CompressorSchema\nfrom .constants_pruner import PRUNER_DICT\nfrom ..utils.sensitivity_analysis import SensitivityAnalysis\n\n\nMAX_PRUNE_RATIO_PER_ITER = 0.95\n\n_logger = logging.getLogger('Sensitivity_Pruner')\n_logger.setLevel(logging.INFO)\n\nclass SensitivityPruner(Pruner):\n    \"\"\"\n    This function prune the model based on the sensitivity\n    for each layer.\n\n    Parameters\n    ----------\n    model: torch.nn.Module\n        model to be compressed\n    evaluator: function\n        validation function for the model. This function should return the accuracy\n        of the validation dataset. The input parameters of evaluator can be specified\n        in the parameter `eval_args` and 'eval_kwargs' of the compress function if needed.\n        Example:\n        >>> def evaluator(model):\n        >>>     device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n        >>>     val_loader = ...\n        >>>     model.eval()\n        >>>     correct = 0\n        >>>     with torch.no_grad():\n        >>>         for data, target in val_loader:\n        >>>             data, target = data.to(device), target.to(device)\n        >>>             output = model(data)\n        >>>             # get the index of the max log-probability\n        >>>             pred = output.argmax(dim=1, keepdim=True)\n        >>>             correct += pred.eq(target.view_as(pred)).sum().item()\n        >>>     accuracy = correct / len(val_loader.dataset)\n        >>>     return accuracy\n    finetuner: function\n        finetune function for the model. This parameter is not essential, if is not None,\n        the sensitivity pruner will finetune the model after pruning in each iteration.\n        The input parameters of finetuner can be specified in the parameter of compress\n        called `finetune_args` and `finetune_kwargs` if needed.\n        Example:\n        >>> def finetuner(model, epoch=3):\n        >>>     device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n        >>>     train_loader = ...\n        >>>     criterion = torch.nn.CrossEntropyLoss()\n        >>>     optimizer = torch.optim.SGD(model.parameters(), lr=0.01)\n        >>>     model.train()\n        >>>     for _ in range(epoch):\n        >>>         for _, (data, target) in enumerate(train_loader):\n        >>>             data, target = data.to(device), target.to(device)\n        >>>             optimizer.zero_grad()\n        >>>             output = model(data)\n        >>>             loss = criterion(output, target)\n        >>>             loss.backward()\n        >>>             optimizer.step()\n    base_algo: str\n        base pruning algorithm. `level`, `l1`, `l2` or `fpgm`, by default `l1`.\n    sparsity_proportion_calc: function\n        This function generate the sparsity proportion between the conv layers according to the\n        sensitivity analysis results. We provide a default function to quantify the sparsity\n        proportion according to the sensitivity analysis results. Users can also customize\n        this function according to their needs. The input of this function is a dict,\n        for example : {'conv1' : {0.1: 0.9, 0.2 : 0.8}, 'conv2' : {0.1: 0.9, 0.2 : 0.8}},\n        in which, 'conv1' and is the name of the conv layer, and 0.1:0.9 means when the\n        sparsity of conv1 is 0.1 (10%), the model's val accuracy equals to 0.9.\n    sparsity_per_iter: float\n        The sparsity of the model that the pruner try to prune in each iteration.\n    acc_drop_threshold : float\n        The hyperparameter used to quantifiy the sensitivity for each layer.\n    checkpoint_dir: str\n        The dir path to save the checkpoints during the pruning.\n    \"\"\"\n\n    def __init__(self, model, config_list, evaluator,\n                 finetuner=None, base_algo='l1', sparsity_proportion_calc=None,\n                 sparsity_per_iter=0.1, acc_drop_threshold=0.05, checkpoint_dir=None):\n\n        self.base_algo = base_algo\n        self.model = model\n        super(SensitivityPruner, self).__init__(model, config_list)\n        # unwrap the model\n        self._unwrap_model()\n        _logger.debug(str(self.model))\n        self.evaluator = evaluator\n        self.finetuner = finetuner\n        self.analyzer = SensitivityAnalysis(\n            self.model, self.evaluator, prune_type=base_algo, \\\n            early_stop_mode='dropped', early_stop_value=acc_drop_threshold)\n        # Get the original accuracy of the pretrained model\n        self.ori_acc = None\n        # Copy the original weights before pruning\n        self.ori_state_dict = copy.deepcopy(self.model.state_dict())\n        self.sensitivities = {}\n        # Save the weight count for each layer\n        self.weight_count = {}\n        self.weight_sum = 0\n        # Map the layer name to the layer module\n        self.named_module = {}\n\n        self.Pruner = PRUNER_DICT[self.base_algo]\n        # Count the total weight count of the model\n        for name, submodule in self.model.named_modules():\n            self.named_module[name] = submodule\n            if name in self.analyzer.target_layer:\n                # Currently, only count the weights in the conv layers\n                # else the fully connected layer (which contains\n                # the most weights) may make the pruner prune the\n                # model too hard\n                # if hasattr(submodule, 'weight'): # Count all the weights of the model\n                self.weight_count[name] = submodule.weight.data.numel()\n                self.weight_sum += self.weight_count[name]\n        # function to generate the sparsity proportion between the conv layers\n        if sparsity_proportion_calc is None:\n            self.sparsity_proportion_calc = self._max_prune_ratio\n        else:\n            self.sparsity_proportion_calc = sparsity_proportion_calc\n        # The ratio of remained weights is 1.0 at the begining\n        self.remained_ratio = 1.0\n        self.sparsity_per_iter = sparsity_per_iter\n        self.acc_drop_threshold = acc_drop_threshold\n        self.checkpoint_dir = checkpoint_dir\n\n    def validate_config(self, model, config_list):\n        \"\"\"\n        Parameters\n        ----------\n        model : torch.nn.module\n            Model to be pruned\n        config_list : list\n            List on pruning configs\n        \"\"\"\n\n        if self.base_algo == 'level':\n            schema = CompressorSchema([{\n                'sparsity': And(float, lambda n: 0 < n < 1),\n                Optional('op_types'): [str],\n                Optional('op_names'): [str],\n            }], model, _logger)\n        elif self.base_algo in ['l1', 'l2', 'fpgm']:\n            schema = CompressorSchema([{\n                'sparsity': And(float, lambda n: 0 < n < 1),\n                'op_types': ['Conv2d'],\n                Optional('op_names'): [str]\n            }], model, _logger)\n\n        schema.validate(config_list)\n\n    def load_sensitivity(self, filepath):\n        \"\"\"\n        load the sensitivity results exported by the sensitivity analyzer\n        \"\"\"\n        assert os.path.exists(filepath)\n        with open(filepath, 'r') as csvf:\n            csv_r = csv.reader(csvf)\n            header = next(csv_r)\n            sparsities = [float(x) for x in header[1:]]\n            sensitivities = {}\n            for row in csv_r:\n                layername = row[0]\n                accuracies = [float(x) for x in row[1:]]\n                sensitivities[layername] = {}\n                for i, accuracy in enumerate(accuracies):\n                    sensitivities[layername][sparsities[i]] = accuracy\n            return sensitivities\n\n    def _max_prune_ratio(self, ori_acc, threshold, sensitivities):\n        \"\"\"\n        Find the maximum prune ratio for a single layer whose accuracy\n        drop is lower than the threshold.\n\n        Parameters\n        ----------\n        ori_acc: float\n            Original accuracy\n        threshold: float\n            Accuracy drop threshold\n        sensitivities: dict\n            The dict object that stores the sensitivity results for each layer.\n            For example: {'conv1' : {0.1: 0.9, 0.2 : 0.8}}\n        Returns\n        -------\n        max_ratios: dict\n            return the maximum prune ratio for each layer. For example:\n            {'conv1':0.1, 'conv2':0.2}\n        \"\"\"\n        max_ratio = {}\n        for layer in sensitivities:\n            prune_ratios = sorted(sensitivities[layer].keys())\n            last_ratio = 0\n            for ratio in prune_ratios:\n                last_ratio = ratio\n                cur_acc = sensitivities[layer][ratio]\n                if cur_acc + threshold < ori_acc:\n                    break\n            max_ratio[layer] = last_ratio\n        return max_ratio\n\n    def normalize(self, ratios, target_pruned):\n        \"\"\"\n        Normalize the prune ratio of each layer according to the\n        total already pruned ratio and the final target total pruning\n        ratio\n\n        Parameters\n        ----------\n            ratios:\n                Dict object that save the prune ratio for each layer\n            target_pruned:\n                The amount of the weights expected to be pruned in this\n                iteration\n\n        Returns\n        -------\n            new_ratios:\n                return the normalized prune ratios for each layer.\n\n        \"\"\"\n        w_sum = 0\n        _Max = 0\n        for layername, ratio in ratios.items():\n            wcount = self.weight_count[layername]\n            w_sum += ratio * wcount * \\\n                (1-self.analyzer.already_pruned[layername])\n        target_count = self.weight_sum * target_pruned\n        for layername in ratios:\n            ratios[layername] = ratios[layername] * target_count / w_sum\n            _Max = max(_Max, ratios[layername])\n        # Cannot Prune too much in a single iteration\n        # If a layer's prune ratio is larger than the\n        # MAX_PRUNE_RATIO_PER_ITER we rescal all prune\n        # ratios under this threshold\n        if _Max > MAX_PRUNE_RATIO_PER_ITER:\n\n            for layername in ratios:\n                ratios[layername] = ratios[layername] * \\\n                    MAX_PRUNE_RATIO_PER_ITER / _Max\n        return ratios\n\n    def create_cfg(self, ratios):\n        \"\"\"\n        Generate the cfg_list for the pruner according to the prune ratios.\n\n        Parameters\n        ---------\n            ratios:\n                For example: {'conv1' : 0.2}\n\n        Returns\n        -------\n            cfg_list:\n                For example: [{'sparsity':0.2, 'op_names':['conv1'], 'op_types':['Conv2d']}]\n        \"\"\"\n        cfg_list = []\n        for layername in ratios:\n            prune_ratio = ratios[layername]\n            remain = 1 - self.analyzer.already_pruned[layername]\n            sparsity = remain * prune_ratio + \\\n                self.analyzer.already_pruned[layername]\n            if sparsity > 0:\n                # Pruner does not allow the prune ratio to be zero\n                cfg = {'sparsity': sparsity, 'op_names': [\n                    layername], 'op_types': ['Conv2d']}\n                cfg_list.append(cfg)\n        return cfg_list\n\n    def current_sparsity(self):\n        \"\"\"\n        The sparsity of the weight.\n        \"\"\"\n        pruned_weight = 0\n        for layer_name in self.analyzer.already_pruned:\n            w_count = self.weight_count[layer_name]\n            prune_ratio = self.analyzer.already_pruned[layer_name]\n            pruned_weight += w_count * prune_ratio\n        return pruned_weight / self.weight_sum\n\n    def compress(self, eval_args=None, eval_kwargs=None,\n                 finetune_args=None, finetune_kwargs=None, resume_sensitivity=None):\n        \"\"\"\n        This function iteratively prune the model according to the results of\n        the sensitivity analysis.\n\n        Parameters\n        ----------\n        eval_args: list\n        eval_kwargs: list& dict\n            Parameters for the val_funtion, the val_function will be called like\n            evaluator(*eval_args, **eval_kwargs)\n        finetune_args: list\n        finetune_kwargs: dict\n            Parameters for the finetuner function if needed.\n        resume_sensitivity:\n            resume the sensitivity results from this file.\n        \"\"\"\n        # pylint suggest not use the empty list and dict\n        # as the default input parameter\n        if not eval_args:\n            eval_args = []\n        if not eval_kwargs:\n            eval_kwargs = {}\n        if not finetune_args:\n            finetune_args = []\n        if not finetune_kwargs:\n            finetune_kwargs = {}\n        if self.ori_acc is None:\n            self.ori_acc = self.evaluator(*eval_args, **eval_kwargs)\n        assert isinstance(self.ori_acc, float) or isinstance(self.ori_acc, int)\n        if not resume_sensitivity:\n            self.sensitivities = self.analyzer.analysis(\n                val_args=eval_args, val_kwargs=eval_kwargs)\n        else:\n            self.sensitivities = self.load_sensitivity(resume_sensitivity)\n            self.analyzer.sensitivities = self.sensitivities\n        # the final target sparsity of the model\n        target_ratio = 1 - self.config_list[0]['sparsity']\n        cur_ratio = self.remained_ratio\n        ori_acc = self.ori_acc\n        iteration_count = 0\n        if self.checkpoint_dir is not None:\n            os.makedirs(self.checkpoint_dir, exist_ok=True)\n        modules_wrapper_final = None\n        while cur_ratio > target_ratio:\n            iteration_count += 1\n            # Each round have three steps:\n            # 1) Get the current sensitivity for each layer(the sensitivity\n            # of each layer may change during the pruning)\n            # 2) Prune each layer according the sensitivies\n            # 3) finetune the model\n            _logger.info('Current base accuracy %f', ori_acc)\n            _logger.info('Remained %f weights', cur_ratio)\n            # determine the sparsity proportion between different\n            # layers according to the sensitivity result\n            proportion = self.sparsity_proportion_calc(\n                ori_acc, self.acc_drop_threshold, self.sensitivities)\n\n            new_pruneratio = self.normalize(proportion, self.sparsity_per_iter)\n            cfg_list = self.create_cfg(new_pruneratio)\n            if not cfg_list:\n                _logger.error('The threshold is too small, please set a larger threshold')\n                return self.model\n            _logger.debug('Pruner Config: %s', str(cfg_list))\n            cfg_str = ['%s:%.3f'%(cfg['op_names'][0], cfg['sparsity']) for cfg in cfg_list]\n            _logger.info('Current Sparsities: %s', ','.join(cfg_str))\n\n            pruner = self.Pruner(self.model, cfg_list)\n            pruner.compress()\n            pruned_acc = self.evaluator(*eval_args, **eval_kwargs)\n            _logger.info('Accuracy after pruning: %f', pruned_acc)\n            finetune_acc = pruned_acc\n            if self.finetuner is not None:\n                # if the finetune function is None, then skip the finetune\n                self.finetuner(*finetune_args, **finetune_kwargs)\n                finetune_acc = self.evaluator(*eval_args, **eval_kwargs)\n            _logger.info('Accuracy after finetune: %f', finetune_acc)\n            ori_acc = finetune_acc\n            # unwrap the pruner\n            pruner._unwrap_model()\n            # update the already prune ratio of each layer befor the new\n            # sensitivity analysis\n            for layer_cfg in cfg_list:\n                name = layer_cfg['op_names'][0]\n                sparsity = layer_cfg['sparsity']\n                self.analyzer.already_pruned[name] = sparsity\n            # update the cur_ratio\n            cur_ratio = 1 - self.current_sparsity()\n            modules_wrapper_final = pruner.get_modules_wrapper()\n            del pruner\n            _logger.info('Currently remained weights: %f', cur_ratio)\n\n            if self.checkpoint_dir is not None:\n                checkpoint_name = 'Iter_%d_finetune_acc_%.5f_sparsity_%.4f' % (\n                    iteration_count, finetune_acc, cur_ratio)\n                checkpoint_path = os.path.join(\n                    self.checkpoint_dir, '%s.pth' % checkpoint_name)\n                cfg_path = os.path.join(\n                    self.checkpoint_dir, '%s_pruner.json' % checkpoint_name)\n                sensitivity_path = os.path.join(\n                    self.checkpoint_dir, '%s_sensitivity.csv' % checkpoint_name)\n                torch.save(self.model.state_dict(), checkpoint_path)\n                with open(cfg_path, 'w') as jf:\n                    json.dump(cfg_list, jf)\n                self.analyzer.export(sensitivity_path)\n\n            if cur_ratio > target_ratio:\n                # If this is the last prune iteration, skip the time-consuming\n                # sensitivity analysis\n\n                self.analyzer.load_state_dict(self.model.state_dict())\n                self.sensitivities = self.analyzer.analysis(\n                    val_args=eval_args, val_kwargs=eval_kwargs)\n\n        _logger.info('After Pruning: %.2f weights remains', cur_ratio)\n        self.modules_wrapper = modules_wrapper_final\n\n        self._wrap_model()\n        return self.model\n\n    def calc_mask(self, wrapper, **kwargs):\n        return None\n"
  },
  {
    "path": "src/aup/compression/torch/pruning/simulated_annealing_pruner.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n# Modified work Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nimport logging\nimport os\nimport math\nimport copy\nimport csv\nimport json\nimport numpy as np\nfrom schema import And, Optional\n\nfrom ..torch_utils import OptimizeMode\n\nfrom ..compressor import Pruner\nfrom ..utils.config_validation import CompressorSchema\nfrom .constants_pruner import PRUNER_DICT\n\n\n_logger = logging.getLogger(__name__)\n\n\nclass SimulatedAnnealingPruner(Pruner):\n    \"\"\"\n    A Pytorch implementation of Simulated Annealing compression algorithm.\n\n    Parameters\n    ----------\n    model : pytorch model\n        The model to be pruned.\n    config_list : list\n        Supported keys:\n            - sparsity : The target overall sparsity.\n            - op_types : The operation type to prune.\n    evaluator : function\n        Function to evaluate the pruned model.\n        This function should include `model` as the only parameter, and returns a scalar value.\n        Example::\n\n            def evaluator(model):\n                device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n                val_loader = ...\n                model.eval()\n                correct = 0\n                with torch.no_grad():\n                    for data, target in val_loader:\n                        data, target = data.to(device), target.to(device)\n                        output = model(data)\n                        # get the index of the max log-probability\n                        pred = output.argmax(dim=1, keepdim=True)\n                        correct += pred.eq(target.view_as(pred)).sum().item()\n                accuracy = correct / len(val_loader.dataset)\n                return accuracy\n    optimize_mode : str\n        Optimize mode, `maximize` or `minimize`, by default `maximize`.\n    base_algo : str\n        Base pruning algorithm. `level`, `l1`, `l2` or `fpgm`, by default `l1`. Given the sparsity distribution among the ops,\n        the assigned `base_algo` is used to decide which filters/channels/weights to prune.\n    start_temperature : float\n        Start temperature of the simulated annealing process.\n    stop_temperature : float\n        Stop temperature of the simulated annealing process.\n    cool_down_rate : float\n        Cool down rate of the temperature.\n    perturbation_magnitude : float\n        Initial perturbation magnitude to the sparsities. The magnitude decreases with current temperature.\n    experiment_data_dir : string\n        PATH to save experiment data,\n        including the config_list generated for the base pruning algorithm, the performance of the pruned model and the pruning history.\n\n    \"\"\"\n\n    def __init__(self, model, config_list, evaluator, optimize_mode='maximize', base_algo='l1',\n                 start_temperature=100, stop_temperature=20, cool_down_rate=0.9, perturbation_magnitude=0.35, experiment_data_dir='./'):\n        # original model\n        self._model_to_prune = copy.deepcopy(model)\n        self._base_algo = base_algo\n\n        super().__init__(model, config_list)\n\n        self._evaluator = evaluator\n        self._optimize_mode = OptimizeMode(optimize_mode)\n\n        # hyper parameters for SA algorithm\n        self._start_temperature = start_temperature\n        self._current_temperature = start_temperature\n        self._stop_temperature = stop_temperature\n        self._cool_down_rate = cool_down_rate\n        self._perturbation_magnitude = perturbation_magnitude\n\n        # overall pruning rate\n        self._sparsity = config_list[0]['sparsity']\n        # pruning rates of the layers\n        self._sparsities = None\n\n        # init current performance & best performance\n        self._current_performance = -np.inf\n        self._best_performance = -np.inf\n        self._best_config_list = []\n\n        self._search_history = []\n\n        self._experiment_data_dir = experiment_data_dir\n        if not os.path.exists(self._experiment_data_dir):\n            os.makedirs(self._experiment_data_dir)\n\n    def validate_config(self, model, config_list):\n        \"\"\"\n        Parameters\n        ----------\n        model : torch.nn.Module\n            Model to be pruned\n        config_list : list\n            List on pruning configs\n        \"\"\"\n\n        if self._base_algo == 'level':\n            schema = CompressorSchema([{\n                'sparsity': And(float, lambda n: 0 < n < 1),\n                Optional('op_types'): [str],\n                Optional('op_names'): [str],\n            }], model, _logger)\n        elif self._base_algo in ['l1', 'l2', 'fpgm']:\n            schema = CompressorSchema([{\n                'sparsity': And(float, lambda n: 0 < n < 1),\n                'op_types': ['Conv2d'],\n                Optional('op_names'): [str]\n            }], model, _logger)\n\n        schema.validate(config_list)\n\n    def _sparsities_2_config_list(self, sparsities):\n        '''\n        convert sparsities vector into config_list for LevelPruner or L1FilterPruner\n\n        Parameters\n        ----------\n        sparsities : list\n            list of sparsities\n\n        Returns\n        -------\n        list of dict\n            config_list for LevelPruner or L1FilterPruner\n        '''\n        config_list = []\n\n        sparsities = sorted(sparsities)\n        self.modules_wrapper = sorted(\n            self.modules_wrapper, key=lambda wrapper: wrapper.module.weight.data.numel())\n\n        # a layer with more weights will have no less pruning rate\n        for idx, wrapper in enumerate(self.get_modules_wrapper()):\n            # L1Filter Pruner requires to specify op_types\n            if self._base_algo in ['l1', 'l2', 'fpgm']:\n                config_list.append(\n                    {'sparsity': sparsities[idx], 'op_types': ['Conv2d'], 'op_names': [wrapper.name]})\n            elif self._base_algo == 'level':\n                config_list.append(\n                    {'sparsity': sparsities[idx], 'op_names': [wrapper.name]})\n\n        config_list = [val for val in config_list if not math.isclose(val['sparsity'], 0, abs_tol=1e-6)]\n\n        return config_list\n\n    def _rescale_sparsities(self, sparsities, target_sparsity):\n        '''\n        Rescale the sparsities list to satisfy the target overall sparsity\n\n        Parameters\n        ----------\n        sparsities : list\n\n        target_sparsity : float\n            the target overall sparsity\n\n        Returns\n        -------\n        list\n            the rescaled sparsities\n        '''\n        num_weights = []\n        for wrapper in self.get_modules_wrapper():\n            num_weights.append(wrapper.module.weight.data.numel())\n\n        num_weights = sorted(num_weights)\n        sparsities = sorted(sparsities)\n\n        total_weights = 0\n        total_weights_pruned = 0\n\n        # calculate the scale\n        for idx, num_weight in enumerate(num_weights):\n            total_weights += num_weight\n            total_weights_pruned += int(num_weight*sparsities[idx])\n        if total_weights_pruned == 0:\n            return None\n        scale = target_sparsity / (total_weights_pruned/total_weights)\n\n        # rescale the sparsities\n        sparsities = np.asarray(sparsities)*scale\n\n        return sparsities\n\n    def _init_sparsities(self):\n        '''\n        Generate a sorted sparsities vector\n        '''\n        # repeatedly generate a distribution until satisfies the overall sparsity requirement\n        _logger.info('Gererating sparsities...')\n        while True:\n            sparsities = sorted(np.random.uniform(\n                0, 1, len(self.get_modules_wrapper())))\n\n            sparsities = self._rescale_sparsities(\n                sparsities, target_sparsity=self._sparsity)\n\n            if sparsities is not None and sparsities[0] >= 0 and sparsities[-1] < 1:\n                _logger.info('Initial sparsities generated : %s', sparsities)\n                self._sparsities = sparsities\n                break\n\n    def _generate_perturbations(self):\n        '''\n        Generate perturbation to the current sparsities distribution.\n\n        Returns:\n        --------\n        list\n            perturbated sparsities\n        '''\n        _logger.info(\"Gererating perturbations to the current sparsities...\")\n\n        # decrease magnitude with current temperature\n        magnitude = self._current_temperature / \\\n            self._start_temperature * self._perturbation_magnitude\n        _logger.info('current perturation magnitude:%s', magnitude)\n\n        while True:\n            perturbation = np.random.uniform(-magnitude, magnitude, len(self.get_modules_wrapper()))\n            sparsities = np.clip(0, self._sparsities + perturbation, None)\n            _logger.debug(\"sparsities before rescalling:%s\", sparsities)\n\n            sparsities = self._rescale_sparsities(sparsities, target_sparsity=self._sparsity)\n            _logger.debug(\"sparsities after rescalling:%s\", sparsities)\n\n            if sparsities is not None and sparsities[0] >= 0 and sparsities[-1] < 1:\n                _logger.info(\"Sparsities perturbated:%s\", sparsities)\n                return sparsities\n\n    def calc_mask(self, wrapper, **kwargs):\n        return None\n\n    def compress(self, return_config_list=False):\n        \"\"\"\n        Compress the model with Simulated Annealing.\n\n        Returns\n        -------\n        torch.nn.Module\n            model with specified modules compressed.\n        \"\"\"\n        _logger.info('Starting Simulated Annealing Compression...')\n\n        # initiaze a randomized action\n        pruning_iteration = 0\n        self._init_sparsities()\n\n        # stop condition\n        self._current_temperature = self._start_temperature\n        while self._current_temperature > self._stop_temperature:\n            _logger.info('Pruning iteration: %d', pruning_iteration)\n            _logger.info('Current temperature: %d, Stop temperature: %d',\n                         self._current_temperature, self._stop_temperature)\n            while True:\n                # generate perturbation\n                sparsities_perturbated = self._generate_perturbations()\n                config_list = self._sparsities_2_config_list(\n                    sparsities_perturbated)\n                _logger.info(\n                    \"config_list for Pruner generated: %s\", config_list)\n\n                # fast evaluation\n                pruner = PRUNER_DICT[self._base_algo](copy.deepcopy(self._model_to_prune), config_list)\n                model_masked = pruner.compress()\n                evaluation_result = self._evaluator(model_masked)\n\n                self._search_history.append(\n                    {'sparsity': self._sparsity, 'performance': evaluation_result, 'config_list': config_list})\n\n                if self._optimize_mode is OptimizeMode.Minimize:\n                    evaluation_result *= -1\n\n                # if better evaluation result, then accept the perturbation\n                if evaluation_result > self._current_performance:\n                    self._current_performance = evaluation_result\n                    self._sparsities = sparsities_perturbated\n\n                    # save best performance and best params\n                    if evaluation_result > self._best_performance:\n                        _logger.info('updating best model...')\n                        self._best_performance = evaluation_result\n                        self._best_config_list = config_list\n\n                        # save the overall best masked model\n                        self.bound_model = model_masked\n                        # the ops with sparsity 0 are not included in this modules_wrapper\n                        modules_wrapper_final = pruner.get_modules_wrapper()\n                    break\n                # if not, accept with probability e^(-deltaE/current_temperature)\n                else:\n                    delta_E = np.abs(evaluation_result -\n                                     self._current_performance)\n                    probability = math.exp(-1 * delta_E /\n                                           self._current_temperature)\n                    if np.random.uniform(0, 1) < probability:\n                        self._current_performance = evaluation_result\n                        self._sparsities = sparsities_perturbated\n                        break\n\n            # cool down\n            self._current_temperature *= self._cool_down_rate\n            pruning_iteration += 1\n\n        _logger.info('----------Compression finished--------------')\n        _logger.info('Best performance: %s', self._best_performance)\n        _logger.info('config_list found : %s',\n                     self._best_config_list)\n\n        # save search history\n        with open(os.path.join(self._experiment_data_dir, 'search_history.csv'), 'w') as csvfile:\n            writer = csv.DictWriter(csvfile, fieldnames=['sparsity', 'performance', 'config_list'])\n            writer.writeheader()\n            for item in self._search_history:\n                writer.writerow({'sparsity': item['sparsity'], 'performance': item['performance'], 'config_list': json.dumps(\n                    item['config_list'])})\n\n        # save best config found and best performance\n        if self._optimize_mode is OptimizeMode.Minimize:\n            self._best_performance *= -1\n        with open(os.path.join(self._experiment_data_dir, 'search_result.json'), 'w+') as jsonfile:\n            json.dump({\n                'performance': self._best_performance,\n                'config_list': json.dumps(self._best_config_list)\n            }, jsonfile)\n\n        _logger.info('search history and result saved to foler : %s',\n                     self._experiment_data_dir)\n\n        if return_config_list:\n            return self._best_config_list\n\n        # This should be done only at the final stage,\n        # because the modules_wrapper with all the ops are used during the annealing process\n        self.modules_wrapper = modules_wrapper_final\n\n        return self.bound_model\n"
  },
  {
    "path": "src/aup/compression/torch/pruning/structured_pruning.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\nimport logging\nimport math\nimport numpy as np\nimport torch\nfrom .weight_masker import WeightMasker\n\n__all__ = ['L1FilterPrunerMasker', 'L2FilterPrunerMasker', 'FPGMPrunerMasker',\n           'TaylorFOWeightFilterPrunerMasker', 'ActivationAPoZRankFilterPrunerMasker',\n           'ActivationMeanRankFilterPrunerMasker', 'SlimPrunerMasker', 'AMCWeightMasker']\n\nlogger = logging.getLogger('torch filter pruners')\n\n\nclass StructuredWeightMasker(WeightMasker):\n    \"\"\"\n    A structured pruning masker base class that prunes convolutional layer filters.\n\n    Parameters\n    ----------\n    model: nn.Module\n        model to be pruned\n    pruner: Pruner\n        A Pruner instance used to prune the model\n    preserve_round: int\n        after pruning, preserve filters/channels round to `preserve_round`, for example:\n        for a Conv2d layer, output channel is 32, sparsity is 0.2, if preserve_round is\n        1 (no preserve round), then there will be int(32 * 0.2) = 6 filters pruned, and\n        32 - 6 = 26 filters are preserved. If preserve_round is 4, preserved filters will\n        be round up to 28 (which can be divided by 4) and only 4 filters are pruned.\n\n    \"\"\"\n\n    def __init__(self, model, pruner, preserve_round=1, dependency_aware=False):\n        self.model = model\n        self.pruner = pruner\n        self.preserve_round = preserve_round\n        self.dependency_aware = dependency_aware\n\n    def calc_mask(self, sparsity, wrapper, wrapper_idx=None, **depen_kwargs):\n        \"\"\"\n        calculate the mask for `wrapper`.\n        Parameters\n        ----------\n        sparsity: float/list of float\n            The target sparsity of the wrapper. If we calculate the mask in\n            the normal way, then sparsity is a float number. In contrast, if\n            we calculate the mask in the dependency-aware way, sparsity is a\n            list of float numbers, each float number corressponds to a sparsity\n            of a layer.\n        wrapper: PrunerModuleWrapper/list of PrunerModuleWrappers\n            The wrapper of the target layer. If we calculate the mask in the normal\n            way, then `wrapper` is an instance of PrunerModuleWrapper, else `wrapper`\n            is a list of PrunerModuleWrapper.\n        wrapper_idx: int/list of int\n            The index of the wrapper.\n        depen_kwargs: dict\n            The kw_args for the dependency-aware mode.\n        \"\"\"\n        if not self.dependency_aware:\n            # calculate the mask in the normal way, each layer calculate its\n            # own mask separately\n            return self._normal_calc_mask(sparsity, wrapper, wrapper_idx)\n        else:\n            # if the dependency_aware switch is on, then calculate the mask\n            # in the dependency-aware way\n            return self._dependency_calc_mask(sparsity, wrapper, wrapper_idx, **depen_kwargs)\n\n    def _get_current_state(self, sparsity, wrapper, wrapper_idx=None):\n        \"\"\"\n        Some pruner may prune the layers in a iterative way. In each pruning iteration,\n        we may get the current state of this wrapper/layer, and continue to prune this layer\n        based on the current state. This function is to get the current pruning state of the\n        target wrapper/layer.\n        Parameters\n        ----------\n        sparsity: float\n            pruning ratio,  preserved weight ratio is `1 - sparsity`\n        wrapper: PrunerModuleWrapper\n            layer wrapper of this layer\n        wrapper_idx: int\n            index of this wrapper in pruner's all wrappers\n        Returns\n        -------\n        base_mask: dict\n            dict object that stores the mask of this wrapper in this iteration, if it is the\n            first iteration, then we create a new mask with all ones. If there is already a\n            mask in this wrapper, then we return the existing mask.\n        weight: tensor\n            the current weight of this layer\n        num_prune: int\n            how many filters we should prune\n        \"\"\"\n        msg = 'module type {} is not supported!'.format(wrapper.type)\n        assert wrapper.type == 'Conv2d', msg\n        weight = wrapper.module.weight.data\n        bias = None\n        if hasattr(wrapper.module, 'bias') and wrapper.module.bias is not None:\n            bias = wrapper.module.bias.data\n\n        if wrapper.weight_mask is None:\n            mask_weight = torch.ones(weight.size()).type_as(weight).detach()\n        else:\n            mask_weight = wrapper.weight_mask.clone()\n        if bias is not None:\n            if wrapper.bias_mask is None:\n                mask_bias = torch.ones(bias.size()).type_as(bias).detach()\n            else:\n                mask_bias = wrapper.bias_mask.clone()\n        else:\n            mask_bias = None\n        mask = {'weight_mask': mask_weight, 'bias_mask': mask_bias}\n\n        num_total = weight.size(0)\n        num_prune = int(num_total * sparsity)\n        if self.preserve_round > 1:\n            num_preserve = num_total - num_prune\n            num_preserve = int(\n                math.ceil(num_preserve * 1. / self.preserve_round) * self.preserve_round)\n            if num_preserve > num_total:\n                num_preserve = int(math.floor(\n                    num_total * 1. / self.preserve_round) * self.preserve_round)\n            num_prune = num_total - num_preserve\n        # weight*mask_weight: apply base mask for iterative pruning\n        return mask, weight * mask_weight, num_prune\n\n    def _normal_calc_mask(self, sparsity, wrapper, wrapper_idx=None):\n        \"\"\"\n        Calculate the mask of given layer.\n        Parameters\n        ----------\n        sparsity: float\n            pruning ratio,  preserved weight ratio is `1 - sparsity`\n        wrapper: PrunerModuleWrapper\n            layer wrapper of this layer\n        wrapper_idx: int\n            index of this wrapper in pruner's all wrappers\n        Returns\n        -------\n        dict\n            dictionary for storing masks, keys of the dict:\n            'weight_mask':  weight mask tensor\n            'bias_mask': bias mask tensor (optional)\n        \"\"\"\n        mask, weight, num_prune = self._get_current_state(\n            sparsity, wrapper, wrapper_idx)\n        num_total = weight.size(0)\n        if num_total < 2 or num_prune < 1:\n            return mask\n\n        return self.get_mask(mask, weight, num_prune, wrapper, wrapper_idx)\n\n    def _common_channel_to_prune(self, sparsities, wrappers, wrappers_idx, channel_dsets, groups):\n        \"\"\"\n        Calculate the common channels should be pruned by all the layers in this group.\n        This function is for filter pruning of Conv layers. if want to support the dependency-aware\n        mode for others ops, you need to inherit this class and overwrite `_common_channel_to_prune`.\n\n        Parameters\n        ----------\n        sparsities : list\n            List of float that specify the sparsity for each conv layer.\n        wrappers : list\n            List of wrappers\n        groups : list\n            The number of the filter groups of each layer.\n        wrappers_idx : list\n            The indexes of the wrappers\n        \"\"\"\n        # sparsity configs for each wrapper\n        # sparsities = [_w.config['sparsity'] for _w in wrappers]\n        # check the type of the input wrappers\n        for _w in wrappers:\n            msg = 'module type {} is not supported!'.format(_w.type)\n            assert _w.type == 'Conv2d', msg\n        # Among the dependent layers, the layer with smallest\n        # sparsity determines the final benefit of the speedup\n        # module. To better harvest the speed benefit, we need\n        # to ensure that these dependent layers have at least\n        # `min_sparsity` pruned channel are the same.\n        if len(channel_dsets) == len(wrappers):\n            # all the layers in the dependency sets are pruned\n            min_sparsity = min(sparsities)\n        else:\n            # not all the layers in the dependency set\n            # are pruned\n            min_sparsity = 0\n        # donnot prune the channels that we cannot harvest the speed from\n        sparsities = [min_sparsity] * len(sparsities)\n        # find the max number of the filter groups of the dependent\n        # layers. The group constraint of this dependency set is decided\n        # by the layer with the max groups.\n\n        # should use the least common multiple for all the groups\n        # the max_group is lower than the channel_count, because\n        # the number of the filter is always divisible by the number of the group\n        max_group = np.lcm.reduce(groups)\n        channel_count = wrappers[0].module.weight.data.size(0)\n        device = wrappers[0].module.weight.device\n        channel_sum = torch.zeros(channel_count).to(device)\n        for _w, _w_idx in zip(wrappers, wrappers_idx):\n            # calculate the L1/L2 sum for all channels\n            c_sum = self.get_channel_sum(_w, _w_idx)\n\n            if c_sum is None:\n                # if the channel sum cannot be calculated\n                # now, return None\n                return None\n            channel_sum += c_sum\n\n        # prune the same `min_sparsity` channels based on channel_sum\n        # for all the layers in the channel sparsity\n        target_pruned = int(channel_count * min_sparsity)\n        # pruned_per_group may be zero, for example dw conv\n        pruned_per_group = int(target_pruned / max_group)\n        group_step = int(channel_count / max_group)\n\n        channel_masks = []\n        for gid in range(max_group):\n            _start = gid * group_step\n            _end = (gid + 1) * group_step\n            if pruned_per_group > 0:\n                threshold = torch.topk(\n                    channel_sum[_start: _end], pruned_per_group, largest=False)[0].max()\n                group_mask = torch.gt(channel_sum[_start:_end], threshold)\n            else:\n                group_mask = torch.ones(group_step).to(device)\n            channel_masks.append(group_mask)\n        channel_masks = torch.cat(channel_masks, dim=0)\n        pruned_channel_index = (\n            channel_masks == False).nonzero().squeeze(1).tolist()\n        logger.info('Prune the %s channels for all dependent',\n                    ','.join([str(x) for x in pruned_channel_index]))\n        return channel_masks\n\n    def _dependency_calc_mask(self, sparsities, wrappers, wrappers_idx, channel_dsets, groups):\n        \"\"\"\n        Calculate the masks for the layers in the same dependency sets.\n        Similar to the traditional original calc_mask, _dependency_calc_mask\n        will prune the target layers based on the L1/L2 norm of the weights.\n        However, StructuredWeightMasker prunes the filter completely based on the\n        L1/L2 norm of each filter. In contrast, _dependency_calc_mask\n        will try to satisfy the channel/group dependency(see nni.compression.torch.\n        utils.shape_dependency for details). Specifically, _dependency_calc_mask\n        will try to prune the same channels for the layers that have channel dependency.\n        In addition, this mask calculator will also ensure that the number of filters\n        pruned in each group is the same(meet the group dependency).\n\n        Parameters\n        ----------\n        sparsities : list\n            List of float that specify the sparsity for each conv layer.\n        wrappers : list\n            List of wrappers\n        groups : list\n            The number of the filter groups of each layer.\n        wrappers_idx : list\n            The indexes of the wrappers\n        \"\"\"\n        channel_masks = self._common_channel_to_prune(\n            sparsities, wrappers, wrappers_idx, channel_dsets, groups)\n        # calculate the mask for each layer based on channel_masks, first\n        # every layer will prune the same channels masked in channel_masks.\n        # If the sparsity of a layers is larger than min_sparsity, then it\n        # will continue prune sparsity - min_sparsity channels to meet the sparsity\n        # config.\n        masks = {}\n        for _pos, _w in enumerate(wrappers):\n            _w_idx = wrappers_idx[_pos]\n            sparsity = sparsities[_pos]\n            name = _w.name\n\n            # _tmp_mask = self._normal_calc_mask(\n            #     sparsity, _w, _w_idx, channel_masks)\n            base_mask, current_weight, num_prune = self._get_current_state(\n                sparsity, _w, _w_idx)\n            num_total = current_weight.size(0)\n            if num_total < 2 or num_prune < 1:\n                masks[name] = base_mask\n                continue\n            _tmp_mask = self.get_mask(\n                base_mask, current_weight, num_prune, _w, _w_idx, channel_masks)\n\n            if _tmp_mask is None:\n                # if the mask calculation fails\n                return None\n            masks[name] = _tmp_mask\n        return masks\n\n    def get_mask(self, base_mask, weight, num_prune, wrapper, wrapper_idx, channel_masks=None):\n        \"\"\"\n        Calculate the mask of given layer.\n        Parameters\n        ----------\n        base_mask: dict\n            The basic mask with the same shape of weight, all item in the basic mask is 1.\n        weight: tensor\n            the module weight to be pruned\n        num_prune: int\n            Num of filters to prune\n        wrapper: PrunerModuleWrapper\n            layer wrapper of this layer\n        wrapper_idx: int\n            index of this wrapper in pruner's all wrappers\n        channel_masks: Tensor\n            If mask some channels for this layer in advance. In the dependency-aware\n            mode, before calculating the masks for each layer, we will calculate a common\n            mask for all the layers in the dependency set. For the pruners that doesnot\n            support dependency-aware mode, they can just ignore this parameter.\n        Returns\n        -------\n        dict\n            dictionary for storing masks\n        \"\"\"\n        raise NotImplementedError(\n            '{} get_mask is not implemented'.format(self.__class__.__name__))\n\n    def get_channel_sum(self, wrapper, wrapper_idx):\n        \"\"\"\n        Calculate the importance weight for each channel. If want to support the\n        dependency-aware mode for this one-shot pruner, this function must be\n        implemented.\n        Parameters\n        ----------\n        wrapper: PrunerModuleWrapper\n            layer wrapper of this layer\n        wrapper_idx: int\n            index of this wrapper in pruner's all wrappers\n        Returns\n        -------\n        tensor\n            Tensor that indicates the importance of each channel\n        \"\"\"\n        raise NotImplementedError(\n            '{} get_channel_sum is not implemented'.format(self.__class__.__name__))\n\n\nclass L1FilterPrunerMasker(StructuredWeightMasker):\n    \"\"\"\n    A structured pruning algorithm that prunes the filters of smallest magnitude\n    weights sum in the convolution layers to achieve a preset level of network sparsity.\n    Hao Li, Asim Kadav, Igor Durdanovic, Hanan Samet and Hans Peter Graf,\n    \"PRUNING FILTERS FOR EFFICIENT CONVNETS\", 2017 ICLR\n    https://arxiv.org/abs/1608.08710\n    \"\"\"\n\n    def get_mask(self, base_mask, weight, num_prune, wrapper, wrapper_idx, channel_masks=None):\n        # get the l1-norm sum for each filter\n        w_abs_structured = self.get_channel_sum(wrapper, wrapper_idx)\n        if channel_masks is not None:\n            # if we need to mask some channels in advance\n            w_abs_structured = w_abs_structured * channel_masks\n        threshold = torch.topk(w_abs_structured.view(-1),\n                               num_prune, largest=False)[0].max()\n        mask_weight = torch.gt(w_abs_structured, threshold)[\n            :, None, None, None].expand_as(weight).type_as(weight)\n        mask_bias = torch.gt(w_abs_structured, threshold).type_as(\n            weight).detach() if base_mask['bias_mask'] is not None else None\n\n        return {'weight_mask': mask_weight.detach(), 'bias_mask': mask_bias}\n\n    def get_channel_sum(self, wrapper, wrapper_idx):\n        weight = wrapper.module.weight.data\n        filters = weight.shape[0]\n        w_abs = weight.abs()\n        w_abs_structured = w_abs.view(filters, -1).sum(dim=1)\n        return w_abs_structured\n\n\nclass L2FilterPrunerMasker(StructuredWeightMasker):\n    \"\"\"\n    A structured pruning algorithm that prunes the filters with the\n    smallest L2 norm of the weights.\n    \"\"\"\n\n    def get_mask(self, base_mask, weight, num_prune, wrapper, wrapper_idx, channel_masks=None):\n        # get the l2-norm sum for each filter\n        w_l2_norm = self.get_channel_sum(wrapper, wrapper_idx)\n        if channel_masks is not None:\n            # if we need to mask some channels in advance\n            w_l2_norm = w_l2_norm * channel_masks\n        threshold = torch.topk(\n            w_l2_norm.view(-1), num_prune, largest=False)[0].max()\n        mask_weight = torch.gt(w_l2_norm, threshold)[\n            :, None, None, None].expand_as(weight).type_as(weight)\n        mask_bias = torch.gt(w_l2_norm, threshold).type_as(\n            weight).detach() if base_mask['bias_mask'] is not None else None\n\n        return {'weight_mask': mask_weight.detach(), 'bias_mask': mask_bias}\n\n    def get_channel_sum(self, wrapper, wrapper_idx):\n        weight = wrapper.module.weight.data\n        filters = weight.shape[0]\n        w = weight.view(filters, -1)\n        w_l2_norm = torch.sqrt((w ** 2).sum(dim=1))\n        return w_l2_norm\n\n\nclass FPGMPrunerMasker(StructuredWeightMasker):\n    \"\"\"\n    A filter pruner via geometric median.\n    \"Filter Pruning via Geometric Median for Deep Convolutional Neural Networks Acceleration\",\n    https://arxiv.org/pdf/1811.00250.pdf\n    \"\"\"\n\n    def get_mask(self, base_mask, weight, num_prune, wrapper, wrapper_idx, channel_masks=None):\n        min_gm_idx = self._get_min_gm_kernel_idx(\n            num_prune, wrapper, wrapper_idx, channel_masks)\n        for idx in min_gm_idx:\n            base_mask['weight_mask'][idx] = 0.\n            if base_mask['bias_mask'] is not None:\n                base_mask['bias_mask'][idx] = 0.\n        return base_mask\n\n    def _get_min_gm_kernel_idx(self, num_prune, wrapper, wrapper_idx, channel_masks):\n        channel_dist = self.get_channel_sum(wrapper, wrapper_idx)\n        if channel_masks is not None:\n            channel_dist = channel_dist * channel_masks\n        dist_list = [(channel_dist[i], i)\n                     for i in range(channel_dist.size(0))]\n        min_gm_kernels = sorted(dist_list, key=lambda x: x[0])[:num_prune]\n        return [x[1] for x in min_gm_kernels]\n\n    def _get_distance_sum(self, weight, out_idx):\n        \"\"\"\n        Calculate the total distance between a specified filter (by out_idex and in_idx) and\n        all other filters.\n        Parameters\n        ----------\n        weight: Tensor\n            convolutional filter weight\n        out_idx: int\n            output channel index of specified filter, this method calculates the total distance\n            between this specified filter and all other filters.\n        Returns\n        -------\n        float32\n            The total distance\n        \"\"\"\n        logger.debug('weight size: %s', weight.size())\n        assert len(weight.size()) in [3, 4], 'unsupported weight shape'\n\n        w = weight.view(weight.size(0), -1)\n        anchor_w = w[out_idx].unsqueeze(0).expand(w.size(0), w.size(1))\n        x = w - anchor_w\n        x = (x * x).sum(-1)\n        x = torch.sqrt(x)\n        return x.sum()\n\n    def get_channel_sum(self, wrapper, wrapper_idx):\n        weight = wrapper.module.weight.data\n        assert len(weight.size()) in [3, 4]\n        dist_list = []\n        for out_i in range(weight.size(0)):\n            dist_sum = self._get_distance_sum(weight, out_i)\n            dist_list.append(dist_sum)\n        return torch.Tensor(dist_list).to(weight.device)\n\n\nclass TaylorFOWeightFilterPrunerMasker(StructuredWeightMasker):\n    \"\"\"\n    A structured pruning algorithm that prunes the filters with the smallest\n    importance approximations based on the first order taylor expansion on the weight.\n    Molchanov, Pavlo and Mallya, Arun and Tyree, Stephen and Frosio, Iuri and Kautz, Jan,\n    \"Importance Estimation for Neural Network Pruning\", CVPR 2019.\n    http://jankautz.com/publications/Importance4NNPruning_CVPR19.pdf\n    \"\"\"\n\n    def __init__(self, model, pruner, statistics_batch_num=1):\n        super().__init__(model, pruner)\n        self.pruner.statistics_batch_num = statistics_batch_num\n        self.pruner.set_wrappers_attribute(\"contribution\", None)\n        self.pruner.iterations = 0\n        self.pruner.patch_optimizer(self.calc_contributions)\n\n    def get_mask(self, base_mask, weight, num_prune, wrapper, wrapper_idx, channel_masks=None):\n        channel_contribution = self.get_channel_sum(wrapper, wrapper_idx)\n        if channel_contribution is None:\n            # iteration is not enough\n            return None\n        if channel_masks is not None:\n            channel_contribution = channel_contribution * channel_masks\n        prune_indices = torch.argsort(channel_contribution)[:num_prune]\n        for idx in prune_indices:\n            base_mask['weight_mask'][idx] = 0.\n            if base_mask['bias_mask'] is not None:\n                base_mask['bias_mask'][idx] = 0.\n        return base_mask\n\n    def calc_contributions(self):\n        \"\"\"\n        Calculate the estimated importance of filters as a sum of individual contribution\n        based on the first order taylor expansion.\n        \"\"\"\n        if self.pruner.iterations >= self.pruner.statistics_batch_num:\n            return\n        for wrapper in self.pruner.get_modules_wrapper():\n            filters = wrapper.module.weight.size(0)\n            contribution = (\n                wrapper.module.weight*wrapper.module.weight.grad).data.pow(2).view(filters, -1).sum(dim=1)\n            if wrapper.contribution is None:\n                wrapper.contribution = contribution\n            else:\n                wrapper.contribution += contribution\n\n        self.pruner.iterations += 1\n\n    def get_channel_sum(self, wrapper, wrapper_idx):\n        if self.pruner.iterations < self.pruner.statistics_batch_num:\n            return None\n        if wrapper.contribution is None:\n            return None\n        return wrapper.contribution\n\n\nclass ActivationFilterPrunerMasker(StructuredWeightMasker):\n    def __init__(self, model, pruner, statistics_batch_num=1, activation='relu'):\n        super().__init__(model, pruner)\n        self.statistics_batch_num = statistics_batch_num\n        self.pruner.hook_id = self._add_activation_collector(self.pruner)\n\n        assert activation in ['relu', 'relu6']\n        if activation == 'relu':\n            self.pruner.activation = torch.nn.functional.relu\n        elif activation == 'relu6':\n            self.pruner.activation = torch.nn.functional.relu6\n        else:\n            self.pruner.activation = None\n\n    def _add_activation_collector(self, pruner):\n        def collector(collected_activation):\n            def hook(module_, input_, output):\n                collected_activation.append(\n                    pruner.activation(output.detach().cpu()))\n            return hook\n        pruner.collected_activation = {}\n        pruner._fwd_hook_id += 1\n        pruner._fwd_hook_handles[pruner._fwd_hook_id] = []\n\n        for wrapper_idx, wrapper in enumerate(pruner.get_modules_wrapper()):\n            pruner.collected_activation[wrapper_idx] = []\n            handle = wrapper.register_forward_hook(\n                collector(pruner.collected_activation[wrapper_idx]))\n\n            pruner._fwd_hook_handles[pruner._fwd_hook_id].append(handle)\n        return pruner._fwd_hook_id\n\n\nclass ActivationAPoZRankFilterPrunerMasker(ActivationFilterPrunerMasker):\n    \"\"\"\n    A structured pruning algorithm that prunes the filters with the\n    smallest APoZ(average percentage of zeros) of output activations.\n    Hengyuan Hu, Rui Peng, Yu-Wing Tai and Chi-Keung Tang,\n    \"Network Trimming: A Data-Driven Neuron Pruning Approach towards Efficient Deep Architectures\", ICLR 2016.\n    https://arxiv.org/abs/1607.03250\n    \"\"\"\n\n    def get_mask(self, base_mask, weight, num_prune, wrapper, wrapper_idx, channel_masks=None):\n        apoz = self.get_channel_sum(wrapper, wrapper_idx)\n        if apoz is None:\n            # the collected activations are not enough\n            return None\n        if channel_masks is not None:\n            apoz = apoz * channel_masks\n\n        prune_indices = torch.argsort(apoz)[:num_prune]\n        for idx in prune_indices:\n            base_mask['weight_mask'][idx] = 0.\n            if base_mask['bias_mask'] is not None:\n                base_mask['bias_mask'][idx] = 0.\n\n        if self.pruner.hook_id in self.pruner._fwd_hook_handles:\n            self.pruner.remove_activation_collector(self.pruner.hook_id)\n\n        return base_mask\n\n    def _calc_apoz(self, activations):\n        \"\"\"\n        Calculate APoZ(average percentage of zeros) of activations.\n\n        Parameters\n        ----------\n        activations : list\n            Layer's output activations\n\n        Returns\n        -------\n        torch.Tensor\n            Filter's APoZ(average percentage of zeros) of the activations\n        \"\"\"\n        activations = torch.cat(activations, 0)\n        _eq_zero = torch.eq(activations, torch.zeros_like(activations))\n        _apoz = torch.sum(_eq_zero, dim=(0, 2, 3), dtype=torch.float64) / \\\n            torch.numel(_eq_zero[:, 0, :, :])\n        return torch.ones_like(_apoz) - _apoz\n\n    def get_channel_sum(self, wrapper, wrapper_idx):\n        assert wrapper_idx is not None\n        activations = self.pruner.collected_activation[wrapper_idx]\n        if len(activations) < self.statistics_batch_num:\n            # collected activations is not enough\n            return None\n        return self._calc_apoz(activations).to(wrapper.module.weight.device)\n\n\nclass ActivationMeanRankFilterPrunerMasker(ActivationFilterPrunerMasker):\n    \"\"\"\n    A structured pruning algorithm that prunes the filters with the\n    smallest mean value of output activations.\n    Pavlo Molchanov, Stephen Tyree, Tero Karras, Timo Aila and Jan Kautz,\n    \"Pruning Convolutional Neural Networks for Resource Efficient Inference\", ICLR 2017.\n    https://arxiv.org/abs/1611.06440\n    \"\"\"\n\n    def get_mask(self, base_mask, weight, num_prune, wrapper, wrapper_idx, channel_masks=None):\n\n        mean_activation = self.get_channel_sum(wrapper, wrapper_idx)\n        if mean_activation is None:\n            # the collected activation is not enough\n            return None\n        if channel_masks is not None:\n            mean_activation = mean_activation * channel_masks\n\n        prune_indices = torch.argsort(mean_activation)[:num_prune]\n        for idx in prune_indices:\n            base_mask['weight_mask'][idx] = 0.\n            if base_mask['bias_mask'] is not None:\n                base_mask['bias_mask'][idx] = 0.\n        # if len(activations) < self.statistics_batch_num, the code\n        # cannot reach here\n        if self.pruner.hook_id in self.pruner._fwd_hook_handles:\n            self.pruner.remove_activation_collector(self.pruner.hook_id)\n\n        return base_mask\n\n    def _cal_mean_activation(self, activations):\n        \"\"\"\n        Calculate mean value of activations.\n\n        Parameters\n        ----------\n        activations : list\n            Layer's output activations\n\n        Returns\n        -------\n        torch.Tensor\n            Filter's mean value of the output activations\n        \"\"\"\n        activations = torch.cat(activations, 0)\n        mean_activation = torch.mean(activations, dim=(0, 2, 3))\n        return mean_activation\n\n    def get_channel_sum(self, wrapper, wrapper_idx):\n        assert wrapper_idx is not None\n        activations = self.pruner.collected_activation[wrapper_idx]\n        if len(activations) < self.statistics_batch_num:\n            return None\n        # the memory overhead here is acceptable, because only\n        # the mean_activation tensor returned by _cal_mean_activation\n        # is transfer to gpu.\n        return self._cal_mean_activation(activations).to(wrapper.module.weight.device)\n\n\nclass SlimPrunerMasker(WeightMasker):\n    \"\"\"\n    A structured pruning algorithm that prunes channels by pruning the weights of BN layers.\n    Zhuang Liu, Jianguo Li, Zhiqiang Shen, Gao Huang, Shoumeng Yan and Changshui Zhang\n    \"Learning Efficient Convolutional Networks through Network Slimming\", 2017 ICCV\n    https://arxiv.org/pdf/1708.06519.pdf\n    \"\"\"\n\n    def __init__(self, model, pruner, **kwargs):\n        super().__init__(model, pruner)\n        weight_list = []\n        for (layer, _) in pruner.get_modules_to_compress():\n            weight_list.append(layer.module.weight.data.abs().clone())\n        all_bn_weights = torch.cat(weight_list)\n        k = int(all_bn_weights.shape[0] * pruner.config_list[0]['sparsity'])\n        self.global_threshold = torch.topk(\n            all_bn_weights.view(-1), k, largest=False)[0].max()\n\n    def calc_mask(self, sparsity, wrapper, wrapper_idx=None):\n        assert wrapper.type == 'BatchNorm2d', 'SlimPruner only supports 2d batch normalization layer pruning'\n        weight = wrapper.module.weight.data.clone()\n        if wrapper.weight_mask is not None:\n            # apply base mask for iterative pruning\n            weight = weight * wrapper.weight_mask\n\n        base_mask = torch.ones(weight.size()).type_as(weight).detach()\n        mask = {'weight_mask': base_mask.detach(\n        ), 'bias_mask': base_mask.clone().detach()}\n        filters = weight.size(0)\n        num_prune = int(filters * sparsity)\n        if filters >= 2 and num_prune >= 1:\n            w_abs = weight.abs()\n            mask_weight = torch.gt(\n                w_abs, self.global_threshold).type_as(weight)\n            mask_bias = mask_weight.clone()\n            mask = {'weight_mask': mask_weight.detach(\n            ), 'bias_mask': mask_bias.detach()}\n        return mask\n\n\ndef least_square_sklearn(X, Y):\n    from sklearn.linear_model import LinearRegression\n    reg = LinearRegression(fit_intercept=False)\n    reg.fit(X, Y)\n    return reg.coef_\n\n\nclass AMCWeightMasker(WeightMasker):\n    \"\"\"\n    Weight maskser class for AMC pruner. Currently, AMCPruner only supports pruning kernel\n    size 1x1 pointwise Conv2d layer. Before using this class to prune kernels, AMCPruner\n    collected input and output feature maps for each layer, the features maps are flattened\n    and save into wrapper.input_feat and wrapper.output_feat.\n\n    Parameters\n    ----------\n    model: nn.Module\n        model to be pruned\n    pruner: Pruner\n        A Pruner instance used to prune the model\n    preserve_round: int\n        after pruning, preserve filters/channels round to `preserve_round`, for example:\n        for a Conv2d layer, output channel is 32, sparsity is 0.2, if preserve_round is\n        1 (no preserve round), then there will be int(32 * 0.2) = 6 filters pruned, and\n        32 - 6 = 26 filters are preserved. If preserve_round is 4, preserved filters will\n        be round up to 28 (which can be divided by 4) and only 4 filters are pruned.\n    \"\"\"\n\n    def __init__(self, model, pruner, preserve_round=1):\n        self.model = model\n        self.pruner = pruner\n        self.preserve_round = preserve_round\n\n    def calc_mask(self, sparsity, wrapper, wrapper_idx=None, preserve_idx=None):\n        \"\"\"\n        Calculate the mask of given layer.\n        Parameters\n        ----------\n        sparsity: float\n            pruning ratio,  preserved weight ratio is `1 - sparsity`\n        wrapper: PrunerModuleWrapper\n            layer wrapper of this layer\n        wrapper_idx: int\n            index of this wrapper in pruner's all wrappers\n        Returns\n        -------\n        dict\n            dictionary for storing masks, keys of the dict:\n            'weight_mask':  weight mask tensor\n            'bias_mask': bias mask tensor (optional)\n        \"\"\"\n        msg = 'module type {} is not supported!'.format(wrapper.type)\n        assert wrapper.type in ['Conv2d', 'Linear'], msg\n        weight = wrapper.module.weight.data\n        bias = None\n        if hasattr(wrapper.module, 'bias') and wrapper.module.bias is not None:\n            bias = wrapper.module.bias.data\n\n        if wrapper.weight_mask is None:\n            mask_weight = torch.ones(weight.size()).type_as(weight).detach()\n        else:\n            mask_weight = wrapper.weight_mask.clone()\n        if bias is not None:\n            if wrapper.bias_mask is None:\n                mask_bias = torch.ones(bias.size()).type_as(bias).detach()\n            else:\n                mask_bias = wrapper.bias_mask.clone()\n        else:\n            mask_bias = None\n        mask = {'weight_mask': mask_weight, 'bias_mask': mask_bias}\n\n        num_total = weight.size(1)\n        num_prune = int(num_total * sparsity)\n        if self.preserve_round > 1:\n            num_preserve = num_total - num_prune\n            num_preserve = int(\n                math.ceil(num_preserve * 1. / self.preserve_round) * self.preserve_round)\n            if num_preserve > num_total:\n                num_preserve = num_total\n            num_prune = num_total - num_preserve\n\n        if (num_total < 2 or num_prune < 1) and preserve_idx is None:\n            return mask\n\n        return self.get_mask(mask, weight, num_preserve, wrapper, wrapper_idx, preserve_idx)\n\n    def get_mask(self, base_mask, weight, num_preserve, wrapper, wrapper_idx, preserve_idx):\n        w = weight.data.cpu().numpy()\n        if wrapper.type == 'Linear':\n            w = w[:, :, None, None]\n\n        if preserve_idx is None:\n            importance = np.abs(w).sum((0, 2, 3))\n            # sum magnitude along C_in, sort descend\n            sorted_idx = np.argsort(-importance)\n            d_prime = num_preserve\n            preserve_idx = sorted_idx[:d_prime]  # to preserve index\n        else:\n            d_prime = len(preserve_idx)\n\n        assert len(preserve_idx) == d_prime\n        mask = np.zeros(w.shape[1], bool)\n        mask[preserve_idx] = True\n\n        # reconstruct, X, Y <= [N, C]\n        X, Y = wrapper.input_feat, wrapper.output_feat\n        masked_X = X[:, mask]\n        if w.shape[2] == 1:  # 1x1 conv or fc\n            rec_weight = least_square_sklearn(X=masked_X, Y=Y)\n            rec_weight = rec_weight.reshape(-1, 1, 1, d_prime)  # (C_out, K_h, K_w, C_in')\n            rec_weight = np.transpose(rec_weight, (0, 3, 1, 2))  # (C_out, C_in', K_h, K_w)\n\n            rec_weight_pad = np.zeros_like(w)\n            # pylint: disable=all\n            rec_weight_pad[:, mask, :, :] = rec_weight\n            rec_weight = rec_weight_pad\n\n            if wrapper.type == 'Linear':\n                rec_weight = rec_weight.squeeze()\n                assert len(rec_weight.shape) == 2\n\n            # now assign\n            wrapper.module.weight.data = torch.from_numpy(rec_weight).to(weight.device)\n\n        mask_weight = torch.zeros_like(weight)\n        if wrapper.type == 'Linear':\n            mask_weight[:, preserve_idx] = 1.\n            if base_mask['bias_mask'] is not None and wrapper.module.bias is not None:\n                mask_bias = torch.ones_like(wrapper.module.bias)\n        else:\n            mask_weight[:, preserve_idx, :, :] = 1.\n            mask_bias = None\n\n        return {'weight_mask': mask_weight.detach(), 'bias_mask': mask_bias}\n"
  },
  {
    "path": "src/aup/compression/torch/pruning/weight_masker.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\nclass WeightMasker(object):\n    def __init__(self, model, pruner, **kwargs):\n        self.model = model\n        self.pruner = pruner\n\n    def calc_mask(self, sparsity, wrapper, wrapper_idx=None):\n        \"\"\"\n        Calculate the mask of given layer.\n        Parameters\n        ----------\n        sparsity: float\n            pruning ratio,  preserved weight ratio is `1 - sparsity`\n        wrapper: PrunerModuleWrapper\n            layer wrapper of this layer\n        wrapper_idx: int\n            index of this wrapper in pruner's all wrappers\n        Returns\n        -------\n        dict\n            dictionary for storing masks, keys of the dict:\n            'weight_mask':  weight mask tensor\n            'bias_mask': bias mask tensor (optional)\n        \"\"\"\n\n        raise NotImplementedError('{} calc_mask is not implemented'.format(self.__class__.__name__))\n"
  },
  {
    "path": "src/aup/compression/torch/quantization/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\nfrom .quantizers import *\n"
  },
  {
    "path": "src/aup/compression/torch/quantization/quantizers.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n# Modified work Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nimport logging\nimport copy\nimport torch\nfrom schema import Schema, And, Or, Optional\nfrom ..utils.config_validation import CompressorSchema\nfrom ..compressor import Quantizer, QuantGrad, QuantType\n\n__all__ = ['NaiveQuantizer', 'QAT_Quantizer', 'DoReFaQuantizer', 'BNNQuantizer']\n\nlogger = logging.getLogger(__name__)\n\n\nclass NaiveQuantizer(Quantizer):\n    \"\"\"quantize weight to 8 bits\n    \"\"\"\n\n    def __init__(self, model, config_list, optimizer=None):\n        super().__init__(model, config_list, optimizer)\n        self.layer_scale = {}\n\n    def validate_config(self, model, config_list):\n        schema = CompressorSchema([{\n            Optional('quant_types'): ['weight'],\n            Optional('quant_bits'): Or(8, {'weight': 8}),\n            Optional('op_types'): [str],\n            Optional('op_names'): [str]\n        }], model, logger)\n\n        schema.validate(config_list)\n\n    def quantize_weight(self, wrapper, **kwargs):\n        weight = copy.deepcopy(wrapper.module.old_weight.data)\n        new_scale = weight.abs().max() / 127\n        scale = max(self.layer_scale.get(wrapper.name, 0), new_scale)\n        self.layer_scale[wrapper.name] = scale\n        orig_type = weight.type()  # TODO: user layer\n        weight = weight.div(scale).type(torch.int8).type(orig_type).mul(scale)\n        wrapper.module.weight = weight\n        return weight\n\ndef update_ema(biased_ema, value, decay):\n    \"\"\"\n    calculate biased stat and unbiased stat in each step using exponential moving average method\n\n    Parameters\n    ----------\n    biased_ema : float\n        previous stat value\n    value : float\n        current stat value\n    decay : float\n        the weight of previous stat value, larger means smoother curve\n\n    Returns\n    -------\n    float, float\n    \"\"\"\n    biased_ema = biased_ema * decay + (1 - decay) * value\n    return biased_ema \n\n\ndef update_quantization_param(bits, rmin, rmax):\n    \"\"\"\n    calculate the `zero_point` and `scale`.\n\n    Parameters\n    ----------\n    bits : int\n        quantization bits length\n    rmin : Tensor\n        min value of real value\n    rmax : Tensor\n        max value of real value\n\n    Returns\n    -------\n    float, float\n    \"\"\"\n    # extend the [min, max] interval to ensure that it contains 0.\n    # Otherwise, we would not meet the requirement that 0 be an exactly\n    # representable value.\n    rmin = torch.min(rmin, torch.Tensor([0]).to(rmin.device))\n    rmax = torch.max(rmax, torch.Tensor([0]).to(rmin.device))\n    qmin = torch.Tensor([0]).to(rmin.device)\n    qmax = torch.Tensor([(1 << bits) - 1]).to(rmin.device)\n\n    # First determine the scale.\n    scale = (rmax - rmin) / (qmax - qmin)\n\n    # Zero-point computation.\n    initial_zero_point = qmin - rmin / scale\n\n    # Now we need to nudge the zero point to be an integer\n    if initial_zero_point < qmin:\n        nudged_zero_point = qmin\n    elif initial_zero_point > qmax:\n        nudged_zero_point = qmax\n    else:\n        nudged_zero_point = torch.round(initial_zero_point)\n\n    return scale, nudged_zero_point\n\n\ndef get_bits_length(config, quant_type):\n    if isinstance(config[\"quant_bits\"], int):\n        return config[\"quant_bits\"]\n    else:\n        return config[\"quant_bits\"].get(quant_type)\n\n\nclass QATGrad(QuantGrad):\n    @staticmethod\n    def quant_backward(tensor, grad_output, quant_type, scale, zero_point, qmin, qmax):\n        tensor_q = QuantGrad._quantize(tensor, scale, zero_point)\n        mask = (tensor_q < qmin) | (tensor_q > qmax)\n        grad_output[mask] = 0\n        return grad_output\n\n\nclass QAT_Quantizer(Quantizer):\n    \"\"\"Quantizer defined in:\n    Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference\n    http://openaccess.thecvf.com/content_cvpr_2018/papers/Jacob_Quantization_and_Training_CVPR_2018_paper.pdf\n    \"\"\"\n\n    def __init__(self, model, config_list, optimizer=None):\n        \"\"\"\n        Parameters\n        ----------\n        layer : LayerInfo\n            the layer to quantize\n        config_list : list of dict\n            list of configurations for quantization\n            supported keys for dict:\n                - quant_types : list of string\n                    type of quantization you want to apply, currently support 'weight', 'input', 'output'\n                - quant_bits : int or dict of {str : int}\n                    bits length of quantization, key is the quantization type, value is the length, eg. {'weight', 8},\n                    when the type is int, all quantization types share same bits length\n                - quant_start_step : int\n                    disable quantization until model are run by certain number of steps, this allows the network to enter a more stable\n                    state where activation quantization ranges do not exclude a signiﬁcant fraction of values, default value is 0\n                - op_types : list of string\n                    types of nn.module you want to apply quantization, eg. 'Conv2d'\n        \"\"\"\n        super().__init__(model, config_list, optimizer)\n        self.quant_grad = QATGrad\n        modules_to_compress = self.get_modules_to_compress()\n        self.bound_model.register_buffer(\"steps\", torch.Tensor([1]))\n        for layer, config in modules_to_compress:\n            layer.module.register_buffer(\"zero_point\", torch.Tensor([0.0]))\n            layer.module.register_buffer(\"scale\", torch.Tensor([1.0]))\n            if \"output\" in config.get(\"quant_types\", []):\n                layer.module.register_buffer('ema_decay', torch.Tensor([0.99]))\n                layer.module.register_buffer('tracked_min_biased', torch.zeros(1))\n                layer.module.register_buffer('tracked_min', torch.zeros(1))\n                layer.module.register_buffer('tracked_max_biased', torch.zeros(1))\n                layer.module.register_buffer('tracked_max', torch.zeros(1))\n\n    def validate_config(self, model, config_list):\n        \"\"\"\n        Parameters\n        ----------\n        model : torch.nn.Module\n            Model to be pruned\n        config_list : list of dict\n            List of configurations\n        \"\"\"\n        schema = CompressorSchema([{\n            Optional('quant_types'): Schema([lambda x: x in ['weight', 'output']]),\n            Optional('quant_bits'): Or(And(int, lambda n: 0 < n < 32), Schema({\n                Optional('weight'): And(int, lambda n: 0 < n < 32),\n                Optional('output'): And(int, lambda n: 0 < n < 32),\n            })),\n            Optional('quant_start_step'): And(int, lambda n: n >= 0),\n            Optional('op_types'): [str],\n            Optional('op_names'): [str]\n        }], model, logger)\n\n        schema.validate(config_list)\n\n    def _quantize(self, bits, op, real_val):\n        \"\"\"\n        quantize real value.\n\n        Parameters\n        ----------\n        bits : int\n            quantization bits length\n        op : torch.nn.Module\n            target module\n        real_val : Tensor\n            real value to be quantized\n\n        Returns\n        -------\n        Tensor\n        \"\"\"\n        op.zero_point = op.zero_point.to(real_val.device)\n        op.scale = op.scale.to(real_val.device)\n        transformed_val = op.zero_point + real_val / op.scale\n        qmin = 0\n        qmax = (1 << bits) - 1\n        clamped_val = torch.clamp(transformed_val, qmin, qmax)\n        quantized_val = torch.round(clamped_val)\n        return quantized_val\n\n    def _dequantize(self, op, quantized_val):\n        \"\"\"\n        dequantize quantized value.\n        Because we simulate quantization in training process, all the computations still happen as float point computations, which means we\n        first quantize tensors then dequantize them. For more details, please refer to the paper.\n\n        Parameters\n        ----------\n        op : torch.nn.Module\n            target module\n        quantized_val : float\n            quantized_val value to be dequantized\n\n        Returns\n        -------\n        float\n        \"\"\"\n        real_val = op.scale * (quantized_val - op.zero_point)\n        return real_val\n\n    def quantize_weight(self, wrapper, **kwargs):\n        config = wrapper.config\n        module = wrapper.module\n        weight = copy.deepcopy(wrapper.module.old_weight.data)\n        weight_bits = get_bits_length(config, 'weight')\n        quant_start_step = config.get('quant_start_step', 0)\n        assert weight_bits >= 1, \"quant bits length should be at least 1\"\n\n        # we dont update weight in evaluation stage\n        if quant_start_step > self.bound_model.steps or not wrapper.training:\n            return weight\n\n        # if bias exists, quantize bias to uint32\n        if hasattr(wrapper.module, 'bias') and wrapper.module.bias is not None:\n            bias = wrapper.module.bias.data\n            bias_bits = 32\n            rmin, rmax = torch.min(bias), torch.max(bias)\n            module.scale, module.zero_point = update_quantization_param(bias_bits, rmin, rmax)\n            bias = self._quantize(bias_bits, module, bias)\n            bias = self._dequantize(module, bias)\n            wrapper.module.bias.data = bias\n\n\n        # quantize weight\n        rmin, rmax = torch.min(weight), torch.max(weight)\n        module.scale, module.zero_point = update_quantization_param(weight_bits, rmin, rmax)\n        weight = self._quantize(weight_bits, module, weight)\n        weight = self._dequantize(module, weight)\n        wrapper.module.weight = weight\n        return weight\n\n    def quantize_output(self, output, wrapper, **kwargs):\n        config = wrapper.config\n        module = wrapper.module\n        output_bits = get_bits_length(config, 'output')\n        quant_start_step = config.get('quant_start_step', 0)\n        assert output_bits >= 1, \"quant bits length should be at least 1\"\n\n        if quant_start_step > self.bound_model.steps:\n            module.tracked_min_biased, module.tracked_max_biased = torch.min(output), torch.max(output)\n            return output\n\n        # we dont update output quantization parameters in evaluation stage\n        if wrapper.training:\n            current_min, current_max = torch.min(output), torch.max(output)\n            module.tracked_min_biased = update_ema(module.tracked_min_biased, current_min,\n                                                                       module.ema_decay)\n            module.tracked_max_biased = update_ema(module.tracked_max_biased, current_max,\n                                                                       module.ema_decay)\n            module.scale, module.zero_point = update_quantization_param(output_bits, module.tracked_min_biased, module.tracked_max_biased)\n        out = self._quantize(output_bits, module, output)\n        out = self._dequantize(module, out)\n        return out\n\n    def fold_bn(self, config, **kwargs):\n        # TODO simulate folded weight\n        pass\n\n    def step_with_optimizer(self):\n        \"\"\"\n        override `compressor` `step` method, quantization only happens after certain number of steps\n        \"\"\"\n        self.bound_model.steps +=1\n\n\nclass DoReFaQuantizer(Quantizer):\n    \"\"\"Quantizer using the DoReFa scheme, as defined in:\n    Zhou et al., DoReFa-Net: Training Low Bitwidth Convolutional Neural Networks with Low Bitwidth Gradients\n    (https://arxiv.org/abs/1606.06160)\n    \"\"\"\n\n    def __init__(self, model, config_list, optimizer=None):\n        super().__init__(model, config_list, optimizer)\n\n    def validate_config(self, model, config_list):\n        \"\"\"\n        Parameters\n        ----------\n        model : torch.nn.Module\n            Model to be pruned\n        config_list : list of dict\n            List of configurations\n        \"\"\"\n        schema = CompressorSchema([{\n            Optional('quant_types'): Schema([lambda x: x in ['weight']]),\n            Optional('quant_bits'): Or(And(int, lambda n: 0 < n < 32), Schema({\n                Optional('weight'): And(int, lambda n: 0 < n < 32)\n            })),\n            Optional('op_types'): [str],\n            Optional('op_names'): [str]\n        }], model, logger)\n\n        schema.validate(config_list)\n\n    def quantize_weight(self, wrapper, **kwargs):\n        weight = copy.deepcopy(wrapper.module.old_weight.data)\n        weight_bits = get_bits_length(wrapper.config, 'weight')\n        weight = weight.tanh()\n        weight = weight / (2 * weight.abs().max()) + 0.5\n        weight = self.quantize(weight, weight_bits)\n        weight = 2 * weight - 1\n        wrapper.module.weight = weight\n        # wrapper.module.weight.data = weight\n        return weight\n\n    def quantize(self, input_ri, q_bits):\n        scale = pow(2, q_bits) - 1\n        output = torch.round(input_ri * scale) / scale\n        return output\n\n\nclass ClipGrad(QuantGrad):\n    @staticmethod\n    def quant_backward(tensor, grad_output, quant_type, scale, zero_point, qmin, qmax):\n        if quant_type == QuantType.QUANT_OUTPUT:\n            grad_output[torch.abs(tensor) > 1] = 0\n        return grad_output\n\n\nclass BNNQuantizer(Quantizer):\n    \"\"\"Binarized Neural Networks, as defined in:\n    Binarized Neural Networks: Training Deep Neural Networks with Weights and Activations Constrained to +1 or -1\n    (https://arxiv.org/abs/1602.02830)\n    \"\"\"\n\n    def __init__(self, model, config_list, optimizer=None):\n        super().__init__(model, config_list, optimizer)\n        self.quant_grad = ClipGrad\n\n    def validate_config(self, model, config_list):\n        \"\"\"\n        Parameters\n        ----------\n        model : torch.nn.Module\n            Model to be pruned\n        config_list : list of dict\n            List of configurations\n        \"\"\"\n        schema = CompressorSchema([{\n            Optional('quant_types'): Schema([lambda x: x in ['weight', 'output']]),\n            Optional('quant_bits'): Or(And(int, lambda n: 0 < n < 32), Schema({\n                Optional('weight'): And(int, lambda n: 0 < n < 32),\n                Optional('output'): And(int, lambda n: 0 < n < 32),\n            })),\n            Optional('op_types'): [str],\n            Optional('op_names'): [str]\n        }], model, logger)\n\n        schema.validate(config_list)\n\n    def quantize_weight(self, wrapper, **kwargs):\n        weight = copy.deepcopy(wrapper.module.old_weight.data)\n        weight = torch.sign(weight)\n        # remove zeros\n        weight[weight == 0] = 1\n        wrapper.module.weight = weight\n        return weight\n\n    def quantize_output(self, output, wrapper, **kwargs):\n        out = torch.sign(output)\n        # remove zeros\n        out[out == 0] = 1\n        return out\n"
  },
  {
    "path": "src/aup/compression/torch/speedup/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n# Modified work Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nfrom .compressor import ModelSpeedup"
  },
  {
    "path": "src/aup/compression/torch/speedup/compress_modules.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\nimport logging\nimport torch\nfrom .infer_shape import ModuleMasks\n\n_logger = logging.getLogger(__name__)\n\nreplace_module = {\n    'BatchNorm2d': lambda module, mask: replace_batchnorm2d(module, mask),\n    'Conv2d': lambda module, mask: replace_conv2d(module, mask),\n    'ConvTranspose2d': lambda module, mask: replace_convtranspose2d(module, mask),\n    'MaxPool2d': lambda module, mask: no_replace(module, mask),\n    'AvgPool2d': lambda module, mask: no_replace(module, mask),\n    'AdaptiveAvgPool2d': lambda module, mask: no_replace(module, mask),\n    'ReLU': lambda module, mask: no_replace(module, mask),\n    'ReLU6': lambda module, mask: no_replace(module, mask),\n    'Sigmoid': lambda module, mask: no_replace(module, mask),\n    'Linear': lambda module, mask: replace_linear(module, mask),\n    'Dropout': lambda module, mask: no_replace(module, mask),\n    'Dropout2d': lambda module, mask: no_replace(module, mask),\n    'Dropout3d': lambda module, mask: no_replace(module, mask)\n}\n\n\ndef no_replace(module, mask):\n    \"\"\"\n    No need to replace\n    \"\"\"\n    _logger.debug(\"no need to replace\")\n    return module\n\n\ndef replace_linear(linear, mask):\n    \"\"\"\n    Parameters\n    ----------\n    linear : torch.nn.Linear\n        The linear module to be replace\n    mask : ModuleMasks\n        The masks of this module\n\n    Returns\n    -------\n    torch.nn.Linear\n        The new linear module\n    \"\"\"\n    assert isinstance(mask, ModuleMasks)\n    assert mask.input_mask is not None\n    assert mask.output_mask is None\n    assert not mask.param_masks\n    index = mask.input_mask.mask_index[-1]\n    in_features = index.size()[0]\n    _logger.debug(\"replace linear with new in_features: %d\", in_features)\n    new_linear = torch.nn.Linear(in_features=in_features,\n                                 out_features=linear.out_features,\n                                 bias=linear.bias is not None)\n    new_linear.to(linear.weight.device)\n    new_linear.weight.data = torch.index_select(\n        linear.weight.data, -1, index.to(linear.weight.device))\n    if linear.bias is not None:\n        new_linear.bias.data.copy_(linear.bias.data)\n    return new_linear\n\n\ndef replace_batchnorm2d(norm, mask):\n    \"\"\"\n    Parameters\n    ----------\n    norm : torch.nn.BatchNorm2d\n        The batchnorm module to be replace\n    mask : ModuleMasks\n        The masks of this module\n\n    Returns\n    -------\n    torch.nn.BatchNorm2d\n        The new batchnorm module\n    \"\"\"\n    assert isinstance(mask, ModuleMasks)\n    assert 'weight' in mask.param_masks and 'bias' in mask.param_masks\n    index = mask.param_masks['weight'].mask_index[0]\n    num_features = index.size()[0]\n    _logger.debug(\"replace batchnorm2d with num_features: %d\", num_features)\n    new_norm = torch.nn.BatchNorm2d(num_features=num_features,\n                                    eps=norm.eps,\n                                    momentum=norm.momentum,\n                                    affine=norm.affine,\n                                    track_running_stats=norm.track_running_stats)\n    # assign weights\n    new_norm.weight.data = torch.index_select(norm.weight.data, 0, index)\n    new_norm.bias.data = torch.index_select(norm.bias.data, 0, index)\n    if norm.track_running_stats:\n        new_norm.running_mean.data = torch.index_select(\n            norm.running_mean.data, 0, index)\n        new_norm.running_var.data = torch.index_select(\n            norm.running_var.data, 0, index)\n    return new_norm\n\n\ndef replace_conv2d(conv, mask):\n    \"\"\"\n    Parameters\n    ----------\n    conv : torch.nn.Conv2d\n        The conv2d module to be replaced\n    mask : ModuleMasks\n        The masks of this module\n\n    Returns\n    -------\n    torch.nn.Conv2d\n        The new conv2d module\n    \"\"\"\n    assert isinstance(mask, ModuleMasks)\n    if mask.input_mask is None:\n        in_channels = conv.in_channels\n    else:\n        in_channels_index = mask.input_mask.mask_index[1]\n        in_channels = in_channels_index.size()[0]\n    if mask.output_mask is None:\n        out_channels = conv.out_channels\n    else:\n        out_channels_index = mask.output_mask.mask_index[1]\n        out_channels = out_channels_index.size()[0]\n    groups = conv.groups\n    if conv.in_channels == conv.out_channels == conv.groups:\n        # remove groups for depthwise layers\n        assert in_channels == out_channels\n        groups = in_channels\n    _logger.debug(\"replace conv2d %s with in_channels: %d, out_channels: %d\",\n                  mask.module_name, in_channels, out_channels)\n    new_conv = torch.nn.Conv2d(in_channels=in_channels,\n                               out_channels=out_channels,\n                               kernel_size=conv.kernel_size,\n                               stride=conv.stride,\n                               padding=conv.padding,\n                               dilation=conv.dilation,\n                               groups=groups,\n                               bias=conv.bias is not None,\n                               padding_mode=conv.padding_mode)\n\n    new_conv.to(conv.weight.device)\n    tmp_weight_data = tmp_bias_data = None\n\n    if mask.output_mask is not None:\n        tmp_weight_data = torch.index_select(\n            conv.weight.data, 0, out_channels_index)\n        if conv.bias is not None:\n            tmp_bias_data = torch.index_select(\n                conv.bias.data, 0, out_channels_index)\n    else:\n        tmp_weight_data = conv.weight.data\n    # For the convolutional layers that have more than one group\n    # we need to copy the weight group by group, because the input\n    # channal is also divided into serveral groups and each group\n    # filter may have different input channel indexes.\n    input_step = int(conv.in_channels / conv.groups)\n    in_channels_group = int(in_channels / groups)\n    filter_step = int(out_channels / groups)\n    if mask.input_mask is not None and not (in_channels == out_channels == groups):\n        for groupid in range(conv.groups):\n            start = groupid * input_step\n            end = (groupid + 1) * input_step\n            current_input_index = list(\n                filter(lambda x: start <= x and x < end, in_channels_index.tolist()))\n            if not current_input_index:\n                # there is no kept channel in current group\n                # TODO bug here, the groups is directly get from conv.groups, if the whole group is removed,\n                # then the number of groups in the new_conv also need to change\n                raise Exception(\n                    \" Donnot support removing the whole group filter except in the depth-wise conv temporarily\")\n            # shift the global index into the group index\n            current_input_index = [x-start for x in current_input_index]\n            # if the groups is larger than 1, the input channels of each\n            # group should be pruned evenly.\n            assert len(current_input_index) == in_channels_group, \\\n                'Input channels of each group are not pruned evenly'\n            current_input_index = torch.tensor(current_input_index).to(tmp_weight_data.device)  # pylint: disable=not-callable\n            f_start = groupid * filter_step\n            f_end = (groupid + 1) * filter_step\n            new_conv.weight.data[f_start:f_end] = torch.index_select(\n                tmp_weight_data[f_start:f_end], 1, current_input_index)\n    else:\n        new_conv.weight.data.copy_(tmp_weight_data)\n\n    if conv.bias is not None:\n        new_conv.bias.data.copy_(\n            conv.bias.data if tmp_bias_data is None else tmp_bias_data)\n\n    return new_conv\n\n\ndef replace_convtranspose2d(convtrans, mask):\n    \"\"\"\n    We need anothor replace function for\n    convtranspose2d, because the layout of\n    the weight is different from traditional\n    conv layers. The layout of the weight is [N_in, N_out, ksize_1, ksize_2]\n    Parameters\n    ----------\n    convtrans : torch.nn.ConvTranspose2d\n        The conv2d module to be replaced\n    mask : ModuleMasks\n        The masks of this module\n    Returns\n    -------\n    torch.nn.ConvTranspose2d\n        The new conv2d module\n    \"\"\"\n    assert isinstance(mask, ModuleMasks)\n    assert isinstance(convtrans, torch.nn.ConvTranspose2d)\n    if mask.input_mask is None:\n        in_channels = convtrans.in_channels\n    else:\n        in_channels_index = mask.input_mask.mask_index[1]\n        in_channels = in_channels_index.size(0)\n    if mask.output_mask is None:\n        out_channels = convtrans.out_channels\n    else:\n        out_channels_index = mask.output_mask.mask_index[1]\n        out_channels = out_channels_index.size(0)\n    groups = convtrans.groups\n    # check if can remove the whole group of filters\n    if convtrans.in_channels == convtrans.out_channels == convtrans.groups:\n        # remove groups for depthwise layers\n        # this needs the group dependency to be fixed before the speedup\n        assert in_channels == out_channels\n        groups = in_channels\n    _logger.debug('Replace convtranspose2d %s with in_channels:%d out_channels:%d',\n                  mask.module_name, in_channels, out_channels)\n    new_convtrans = torch.nn.ConvTranspose2d(in_channels=in_channels,\n                                             out_channels=out_channels,\n                                             kernel_size=convtrans.kernel_size,\n                                             stride=convtrans.stride,\n                                             padding=convtrans.padding,\n                                             dilation=convtrans.dilation,\n                                             groups=groups,\n                                             bias=convtrans.bias is not None,\n                                             padding_mode=convtrans.padding_mode)\n    new_convtrans.to(convtrans.weight.device)\n    tmp_weight_data = None\n    if mask.input_mask is not None:\n        # in convtranspose2d we need to select the input channel first\n        tmp_weight_data = torch.index_select(\n            convtrans.weight.data, 0, in_channels_index)\n    else:\n        tmp_weight_data = convtrans.weight.data\n    # we need to handle the output channel group by group like the conv layer\n    out_step = int(convtrans.out_channels / convtrans.groups)\n    out_channel_group = int(out_channels/groups)\n    new_in_per_group = int(in_channels/groups)\n\n    if mask.output_mask is not None and not(in_channels == out_channels == groups):\n        for groupid in range(convtrans.groups):\n            start = groupid * out_step\n            end = (groupid + 1) * out_step\n            current_output_index = list(\n                filter(lambda x: start <= x and x < end, out_channels_index.tolist()))\n            # we need to shift the index into the group-wise\n            current_output_index = [x-start for x in current_output_index]\n            if not current_output_index:\n                # No kept channel in the current group\n                raise Exception(\n                    \" Donnot support removing the whole group filter except in the depth-wise conv temporarily\")\n            assert len(current_output_index) == out_channel_group, \\\n                'Output channel of each group should be the same after pruning'\n            current_output_index = torch.tensor(current_output_index).to(tmp_weight_data.device) # pylint: disable=not-callable\n            new_start = groupid * new_in_per_group\n            new_end = (groupid + 1) * new_in_per_group\n            new_convtrans.weight.data[new_start:new_end] = torch.index_select(\n                tmp_weight_data[new_start:new_end], 1, current_output_index)\n    else:\n        new_convtrans.weight.data.copy_(tmp_weight_data)\n    if convtrans.bias is not None:\n        if mask.output_mask is not None:\n            new_convtrans.bias.data[:] = torch.index_select(\n                convtrans.bias.data, 0, out_channels_index)\n        else:\n            new_convtrans.bias.data.copy_(convtrans.bias.data)\n    return new_convtrans\n"
  },
  {
    "path": "src/aup/compression/torch/speedup/compressor.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n# Modified work Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nimport logging\nimport torch\nfrom ..utils.mask_conflict import fix_mask_conflict\nfrom ..utils.utils import get_module_by_name\nfrom .compress_modules import replace_module\nfrom .infer_shape import ModuleMasks, infer_from_mask, infer_from_inshape, infer_from_outshape, set_conv_prune_dim\n\n_logger = logging.getLogger(__name__)\n\n\nclass ModelSpeedup:\n    \"\"\"\n    This class is to speedup the model with provided weight mask\n    \"\"\"\n\n    def __init__(self, model, dummy_input, masks=None, masks_file=None, map_location=None):\n        \"\"\"\n        Parameters\n        ----------\n        model : pytorch model\n            The model user wants to speed up\n        dummy_input : pytorch tensor\n            The dummy input for ```jit.trace```, users should put it on right device before pass in\n        masks : dict\n            The pre-loaded dictionary of weight pruning masks\n        masks_file : str\n            The path of user provided mask file\n        map_location : str\n            the device on which masks are placed, same to map_location in ```torch.load```\n        \"\"\"\n        from .._graph_utils import build_module_graph\n\n        self.bound_model = model\n        if masks is not None:\n            self.masks = masks\n        elif masks_file is not None:\n            self.masks = torch.load(masks_file, map_location)\n        else:\n            raise ValueError(\"Either masks or masks_file must be passed to ModelSpeedup constructor\")\n        self.inferred_masks = dict() # key: module_name, value: ModuleMasks\n        self.dummy_input = dummy_input\n        self.torch_graph = build_module_graph(model, dummy_input)\n\n    def infer_module_mask(self, module_name, last_module, mask=None, in_shape=None, out_shape=None):\n        \"\"\"\n        Infer input shape / output shape based on the module's weight mask / input shape / output shape.\n\n        For a module:\n            Infer its input and output shape from its weight mask\n            Infer its output shape from its input shape\n            Infer its input shape from its output shape\n\n        If its input shape is changed, continue infering its predecessors\n        If its output shape is changed, continue infering its successors\n\n        Parameters\n        ----------\n        module_name : str\n            The name of the node\n        last_module : str\n            The name of last visited node\n        mask : tensor of mask or ModuleMasks\n            Mask of the weights in this node (i.e., module)\n        in_shape : ModuleMasks\n            Input shape of this node\n        out_shape : ModuleMasks\n            Output shape of this node\n        \"\"\"\n        input_cmask = output_cmask = None\n        if module_name in self.inferred_masks:\n            module_masks = self.inferred_masks[module_name]\n        else:\n            _, m = get_module_by_name(self.bound_model, module_name)\n            module_masks = ModuleMasks(module_name, m)\n            self.inferred_masks[module_name] = module_masks\n\n        m_type = self.torch_graph.name_to_node[module_name].op_type\n        _logger.debug(\"infer mask of module %s with op_type %s\", module_name, m_type)\n        if mask is not None:\n            _logger.debug(\"mask is not None\")\n            if not m_type in infer_from_mask:\n                raise RuntimeError(\n                    \"Has not supported infering input/output shape from mask for module/function: `{}`, {}\"\n                    .format(m_type, module_name))\n            if m_type in ['Linear']:\n                input_cmask, output_cmask = infer_from_mask[m_type](\n                    module_masks, mask, self.torch_graph.name_to_node[module_name].auxiliary\n                )\n            else:\n                input_cmask, output_cmask = infer_from_mask[m_type](module_masks, mask)\n        if in_shape is not None:\n            _logger.debug(\"in_shape is not None\")\n            if not m_type in infer_from_inshape:\n                raise RuntimeError(\n                    \"Has not supported infering output shape from input shape for module/function: `{}`, {}\"\n                    .format(m_type, module_name))\n            if m_type in ['aten::view', 'aten::flatten', 'aten::mean', 'aten::reshape']:\n                output_cmask = infer_from_inshape[m_type](module_masks,\n                                                          in_shape,\n                                                          self.torch_graph.name_to_node[module_name].auxiliary)\n            elif m_type in ['aten::cat']:\n                # To calculate the mask for concat operation, the output shape\n                # , cat dimension, and the order of the input parameters.\n                output_cmask = infer_from_inshape[m_type](module_masks,\n                                                          in_shape,\n                                                          self.torch_graph.name_to_node[module_name].auxiliary,\n                                                          last_module)\n            else:\n                output_cmask = infer_from_inshape[m_type](module_masks, in_shape)\n        if out_shape is not None:\n            _logger.debug(\"out_shape is not None\")\n            if not m_type in infer_from_outshape:\n                raise RuntimeError(\n                    \"Has not supported infering input shape from output shape for module/function: `{}`, {}\"\n                    .format(m_type, module_name))\n            if m_type in ['aten::view', 'aten::flatten', 'aten::mean', 'aten::reshape']:\n                input_cmask = infer_from_outshape[m_type](module_masks, out_shape, self.torch_graph.name_to_node[module_name].auxiliary)\n            else:\n                input_cmask = infer_from_outshape[m_type](module_masks, out_shape)\n\n        if input_cmask:\n            predecessors = self.torch_graph.find_predecessors(module_name)\n            for _module_name in predecessors:\n                self.infer_module_mask(_module_name, module_name, out_shape=input_cmask)\n        if output_cmask:\n            successors = self.torch_graph.find_successors(module_name)\n            for _module_name in successors:\n                self.infer_module_mask(_module_name, module_name, in_shape=output_cmask)\n\n    def infer_modules_masks(self):\n        \"\"\"\n        Do shape inference of involved modules, including the shape of weights, inputs, output\n        \"\"\"\n        for module_name, mask in self.masks.items():\n            _logger.debug('Start mask inference from %s', module_name)\n            if module_name not in self.torch_graph.name_to_node:\n                # this module is not traced in the torch_graph,\n                # jit.trace only correctly records functions and\n                # modules which are not data dependent (e.g., do\n                # not have conditionals on data in tensors)\n                # so, if a node is not traced, we just skip it.\n                _logger.warning('%s has mask, but not found in the traced graph, just skip it.', module_name)\n                continue\n            self.infer_module_mask(module_name, None, mask=mask)\n\n    def replace_compressed_modules(self):\n        \"\"\"\n        Replace all the modules that have changed (weights/inputs/output) shape.\n        The new module is created using the same arguments of the to-be-replaced module,\n        and correctly inherits its weights.\n\n        NOTE: ```func``` type cannot be replaced as it is not a module, thus, one limitation\n        is that ```func``` should be not required to be replaced.\n        \"\"\"\n        for module_name in self.inferred_masks:\n            g_node = self.torch_graph.name_to_node[module_name]\n            _logger.debug(\"replace %s, in %s type, with op_type %s\",\n                          module_name, g_node.type, g_node.op_type)\n            if g_node.type == 'module':\n                super_module, leaf_module = get_module_by_name(self.bound_model, g_node.name)\n                m_type = g_node.op_type\n                if not m_type in replace_module:\n                    raise RuntimeError(\"Has not supported replacing the module: `{}`\".format(m_type))\n                _logger.info(\"replace module (name: %s, op_type: %s)\", g_node.name, m_type)\n                compressed_module = replace_module[m_type](leaf_module, self.inferred_masks[module_name])\n                setattr(super_module, g_node.name.split('.')[-1], compressed_module)\n            elif g_node.type == 'func':\n                _logger.info(\"Warning: cannot replace (name: %s, op_type: %s) which is func type\",\n                             module_name, g_node.op_type)\n            else:\n                raise RuntimeError(\"Unsupported node type: {}\".format(g_node.type))\n\n    def speedup_model(self):\n        \"\"\"\n        There are basically two steps:\n        first, do mask/shape inference,\n        second, replace modules\n        \"\"\"\n        training = self.bound_model.training\n        _logger.info(\"start to speed up the model\")\n\n        _logger.info(\"fix the mask conflict of the interdependent layers\")\n        _, conv_prune_dim = fix_mask_conflict(self.masks, self.bound_model, self.dummy_input)\n        set_conv_prune_dim(conv_prune_dim)\n\n        _logger.info(\"infer module masks...\")\n        self.infer_modules_masks()\n        _logger.info(\"replace compressed modules...\")\n        self.replace_compressed_modules()\n        self.bound_model.train(training)\n        _logger.info(\"speedup done\")\n"
  },
  {
    "path": "src/aup/compression/torch/speedup/infer_shape.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\"\"\"\nFor each operation or module, there are two functions.\nOne is given output shape, infer its input shape and initialization parameters (e.g., weight's shape)\nThe other is given input shape, infer its output shape and initialization parameters (e.g., weight's shape)\n\"\"\"\n\nimport logging\nimport torch\n\n_logger = logging.getLogger(__name__)\n\nconv_prune_dim = -1\n\n\ndef set_conv_prune_dim(dim):\n    \"\"\"\n    Parameters:\n    dim: int\n        0: filter pruning\n        1: channel pruning\n    \"\"\"\n    global conv_prune_dim\n    conv_prune_dim = dim\n\n\nclass CoarseMask:\n    \"\"\"\n    Coarse grained mask for a given tensor, here tensor could be weights,\n    input tensor, or output tensor\n    \"\"\"\n\n    def __init__(self, num_dim):\n        \"\"\"\n        Parameters\n        ----------\n        num_dim : int\n            The number of dimensions of the tensor that will be masked\n        \"\"\"\n        self.mask_index = [None for _ in range(num_dim)]\n\n    def add_index_mask(self, dim, index):\n        \"\"\"\n        Add mask for the specified dimension\n\n        Parameters\n        ----------\n        dim : int\n            The dimension to add mask\n        index : tensor\n            The mask for this dimension, its a 1 dimension tensor which specifies\n            the index of the elements that are not pruned\n        \"\"\"\n        self.mask_index[dim] = index\n\n    @staticmethod\n    def merge_index(index_a, index_b):\n        \"\"\"\n        Parameters\n        ----------\n        index_a : tensor\n            One index (1-dimension) tensor\n        index_b : tensor\n            The other index (1-dimension) tensor\n\n        Returns\n        -------\n        tensor\n            The merged index (1-dimension) tensor\n            Note that: the output tensor will be moved\n            to the same device as index_a.\n        \"\"\"\n        device = index_a.device\n        s = set()\n        for num in index_a.tolist():\n            # we need to transfer the tensor to list here\n            # first, directly traversing the tensor by for\n            # loop will return the list of tensor(x) object,\n            # even the value are the same, but they are different\n            # tensor objects, so the set will contains multiple\n            # tensor objects that has the same value. For example\n            # for num in torch.ones(2):\n            #   s.add(num)\n            # s will be {tensor(1), tensor(1)}\n            s.add(num)\n        for num in index_b.tolist():\n            s.add(num)\n        # move the output tensor to the same device with index_a\n        return torch.tensor(sorted(s)).to(device)  # pylint: disable=not-callable\n\n    def merge(self, cmask):\n        \"\"\"\n        Merge another CoarseMask\n\n        Parameters\n        ----------\n        cmask : CoarseMask\n            Another CoarseMask to merge\n\n        Returns\n        -------\n        list\n            The member variable ```mask_index```\n        \"\"\"\n        assert isinstance(cmask, CoarseMask)\n        assert len(self.mask_index) == len(cmask.mask_index), \\\n            \"Only masks with the same number of dimensions can be merged\"\n        for i, index in enumerate(self.mask_index):\n            if index is None:\n                self.mask_index[i] = cmask.mask_index[i]\n            elif cmask.mask_index[i] is not None:\n                self.mask_index[i] = CoarseMask.merge_index(self.mask_index[i],\n                                                            cmask.mask_index[i])\n        return self.mask_index\n\n    def __repr__(self):\n        return 'mask_index: {}'.format(self.mask_index)\n\n    def eq_on_dim(self, other, dim):\n        assert isinstance(other, CoarseMask)\n        if self.mask_index[dim] is None and other.mask_index[dim] is None:\n            return True\n        elif isinstance(self.mask_index[dim], torch.Tensor) \\\n                and isinstance(other.mask_index[dim], torch.Tensor):\n            return torch.equal(self.mask_index[dim], other.mask_index[dim])\n        else:\n            return False\n\n    def __eq__(self, other):\n        assert isinstance(other, CoarseMask)\n        if len(self.mask_index) != len(other.mask_index):\n            return False\n        for i in range(len(self.mask_index)):\n            if not self.eq_on_dim(other, i):\n                return False\n        return True\n\n    def __lt__(self, other):\n        \"\"\"\n        Judge if the mask is a subset of another CoarseMask.\n        \"\"\"\n        assert isinstance(other, CoarseMask)\n        for dim, _ in enumerate(self.mask_index):\n            # if self has more dimensions\n            if dim >= len(other.mask_index):\n                return False\n            if self.mask_index[dim] is None:\n                # if no mask on this dimension, then we have less\n                # masks then the other CoraseMask.\n                continue\n            elif other.mask_index[dim] is None:\n                return False\n            else:\n                s1 = set(self.mask_index[dim].tolist())\n                s2 = set(other.mask_index[dim].tolist())\n                if not s1 < s2:\n                    return False\n        return True\n\n    def __le__(self, other):\n        \"\"\"\n        Return if self's mask is less or equal to other's mask.\n        \"\"\"\n        assert isinstance(other, CoarseMask)\n        if self.__lt__(other) or self.__eq__(other):\n            return True\n        return False\n\n    def __ne__(self, other):\n        return not self.__eq__(other)\n\n\nclass ModuleMasks:\n    \"\"\"\n    The masks of a module, including the masks for weights, inputs, output\n    \"\"\"\n\n    def __init__(self, module_name, module=None):\n        \"\"\"\n        Parameters\n        ----------\n        module_name : str\n            The name of the module or function\n        \"\"\"\n        self.module_name = module_name\n        self.module = module\n        self.param_masks = dict()\n        self.input_mask = None\n        self.output_mask = None\n\n    def set_param_masks(self, name, mask):\n        \"\"\"\n        Parameters\n        ----------\n        name : str\n            The name of the weight\n        mask : CoarseMask\n            The mask for this weight\n        \"\"\"\n        self.param_masks[name] = mask\n\n    def set_input_mask(self, mask):\n        \"\"\"\n        Parameters\n        ----------\n        mask : CoarseMask\n            The mask for input\n        \"\"\"\n        self.input_mask = mask\n\n    def set_output_mask(self, mask):\n        \"\"\"\n        Parameters\n        ----------\n        mask : CoarseMask\n            The mask for output\n        \"\"\"\n        self.output_mask = mask\n\n    def __repr__(self):\n        return 'module_name: {}, input_mask: {}, output_mask: {}, param_masks: {}'.format(\n            self.module_name, self.input_mask, self.output_mask, self.param_masks\n        )\n\n\n\"\"\"\nInfer input and output shape of a module/function from its weight mask\n\"\"\"\ninfer_from_mask = {\n    'BatchNorm2d': lambda module_masks, mask: batchnorm2d_mask(module_masks, mask),\n    'Conv2d': lambda module_masks, mask: conv2d_mask(module_masks, mask),\n    'ConvTranspose2d': lambda module_masks, mask: convtranspose2d_mask(module_masks, mask),\n    'Linear': lambda module_masks, mask, shape: linear_mask(module_masks, mask, shape)\n}\n\n\"\"\"\nInfer output and weight shape of a module/function from its input shape\n\"\"\"\ninfer_from_inshape = {\n    'ReLU': lambda module_masks, mask: relu_inshape(module_masks, mask),\n    'ReLU6': lambda module_masks, mask: relu_inshape(module_masks, mask),\n    'Sigmoid': lambda module_masks, mask: relu_inshape(module_masks, mask),\n    'aten::relu': lambda module_masks, mask: relu_inshape(module_masks, mask),\n    'aten::tanh': lambda module_masks, mask: relu_inshape(module_masks, mask),\n    'aten::tanh_': lambda module_masks, mask: relu_inshape(module_masks, mask),\n    'aten::hardtanh': lambda module_masks, mask: relu_inshape(module_masks, mask),\n    'aten::hardtanh_': lambda module_masks, mask: relu_inshape(module_masks, mask),\n    'aten::relu_': lambda module_masks, mask: relu_inshape(module_masks, mask),\n    'aten::sigmoid': lambda module_masks, mask: relu_inshape(module_masks, mask),\n    'Conv2d': lambda module_masks, mask: conv2d_inshape(module_masks, mask),\n    'ConvTranspose2d': lambda module_masks, mask: convtranspose2d_inshape(module_masks, mask),\n    'MaxPool2d': lambda module_masks, mask: maxpool2d_inshape(module_masks, mask),\n    'aten::max_pool2d': lambda module_masks, mask: maxpool2d_inshape(module_masks, mask),\n    'aten::avg_pool2d': lambda module_masks, mask: maxpool2d_inshape(module_masks, mask),\n    'aten::adaptive_avg_pool2d': lambda module_masks, mask: maxpool2d_inshape(module_masks, mask),\n    'AvgPool2d': lambda module_masks, mask: maxpool2d_inshape(module_masks, mask),\n    'AdaptiveAvgPool2d': lambda module_masks, mask: maxpool2d_inshape(module_masks, mask),\n    'aten::size': lambda module_masks, mask: size_inshape(module_masks, mask),\n    'aten::view': lambda module_masks, mask, shape: view_inshape(module_masks, mask, shape),\n    'aten::reshape': lambda module_masks, mask, shape: view_inshape(module_masks, mask, shape),\n    # support only start_dim=1\n    'aten::flatten': lambda module_masks, mask, shape: view_inshape(module_masks, mask, shape),\n    'Linear': lambda module_masks, mask: linear_inshape(module_masks, mask),\n    'BatchNorm2d': lambda module_masks, mask: batchnorm2d_inshape(module_masks, mask),\n    'aten::add_': lambda module_masks, mask: add_inshape(module_masks, mask),\n    'aten::add': lambda module_mask, mask: add_inshape(module_mask, mask),\n    # mul has the similar behaviour with add, they both request\n    # the input tesors to have the same shape\n    'aten::mul': lambda module_mask, mask: add_inshape(module_mask, mask),\n    'aten::mul_': lambda module_mask, mask: add_inshape(module_mask, mask),\n    'aten::cat': lambda module_mask, mask, cat_info, last_visited: cat_inshape(module_mask, mask, cat_info, last_visited),\n    'aten::mean': lambda module_masks, mask, shape: mean_inshape(module_masks, mask, shape),\n    'Dropout': lambda module_masks, mask: dropout_inshape(module_masks, mask),\n    'Dropout2d': lambda module_masks, mask: dropout_inshape(module_masks, mask),\n    'aten::dropout': lambda module_masks, mask: dropout_inshape(module_masks, mask),\n    'aten::detach': lambda module_masks, mask: dropout_inshape(module_masks, mask)\n}\n\n\"\"\"\nInfer input and weight shape of a module/function from its output shape\n\"\"\"\ninfer_from_outshape = {\n    'Conv2d': lambda module_masks, mask: conv2d_outshape(module_masks, mask),\n    'ConvTranspose2d': lambda module_masks, mask: convtranspose2d_outshape(module_masks, mask),\n    'BatchNorm2d': lambda module_masks, mask: batchnorm2d_outshape(module_masks, mask),\n\n    'MaxPool2d': lambda module_masks, mask: maxpool2d_outshape(module_masks, mask),\n    'aten::max_pool2d': lambda module_masks, mask: maxpool2d_outshape(module_masks, mask),\n    'aten::avg_pool2d': lambda module_masks, mask: maxpool2d_outshape(module_masks, mask),\n    'aten::adaptive_avg_pool2d': lambda module_masks, mask: maxpool2d_outshape(module_masks, mask),\n    'AvgPool2d': lambda module_masks, mask: maxpool2d_outshape(module_masks, mask),\n    'AdaptiveAvgPool2d': lambda module_masks, mask: maxpool2d_outshape(module_masks, mask),\n\n    'ReLU': lambda module_masks, mask: relu_outshape(module_masks, mask),\n    'ReLU6': lambda module_masks, mask: relu_outshape(module_masks, mask),\n    'aten::relu': lambda module_masks, mask: relu_outshape(module_masks, mask),\n    'aten::tanh': lambda module_masks, mask: relu_outshape(module_masks, mask),\n    'aten::tanh_': lambda module_masks, mask: relu_outshape(module_masks, mask),\n    'aten::hardtanh': lambda module_masks, mask: relu_outshape(module_masks, mask),\n    'aten::hardtanh_': lambda module_masks, mask: relu_outshape(module_masks, mask),\n    'aten::relu_': lambda module_masks, mask: relu_outshape(module_masks, mask),\n\n    'aten::add_': lambda module_masks, mask: add_outshape(module_masks, mask),\n    'aten::add': lambda module_mask, mask: add_outshape(module_mask, mask),\n    'aten::flatten': lambda module_mask, mask, shape: view_outshape(module_mask, mask, shape),\n    'aten::view': lambda module_masks, mask, shape: view_outshape(module_masks, mask, shape),\n    'aten::reshape': lambda module_masks, mask, shape: view_outshape(module_masks, mask, shape),\n    'aten::mean': lambda module_masks, mask, shape: mean_outshape(module_masks, mask, shape),\n    'Dropout': lambda module_masks, mask: dropout_outshape(module_masks, mask),\n    'Dropout2d': lambda module_masks, mask: dropout_outshape(module_masks, mask),\n    'aten::dropout': lambda module_masks, mask: dropout_outshape(module_masks, mask),\n    'aten::detach': lambda module_masks, mask: dropout_outshape(module_masks, mask)\n}\n\n\ndef dropout_inshape(module_masks, mask):\n    if module_masks.input_mask is None:\n        module_masks.set_input_mask(mask)\n        module_masks.set_output_mask(mask)\n        return module_masks.output_mask\n    # if alreay visited\n    assert module_masks.input_mask <= mask\n    # It should be the same, we pass the masks by the reference(not the value),\n    # so they acutually are two references of the same object(mask,\n    # module_masks.input_mask). So we should continue pass the mask\n    # to the following nodes even module_masks.input_mask == mask.\n    # if pass the mask by copy.deepcopy(), then we can stop when\n    # module_masks.input_mask == mask.\n    # if module_masks.input_mask == mask:\n    #     return None\n    module_masks.set_input_mask(mask)\n    module_masks.set_output_mask(mask)\n    return module_masks.output_mask\n\n\ndef dropout_outshape(module_masks, mask):\n    if module_masks.output_mask is None:\n        module_masks.set_output_mask(mask)\n        module_masks.set_input_mask(mask)\n        return module_masks.input_mask\n    # if alreay visited\n    assert all(module_masks.output_mask.mask_index[1] == mask.mask_index[1])\n\n    return module_masks.output_mask\n\n\ndef cat_inshape(module_masks, mask, cat_info, last_visited):\n    \"\"\"\n    Inference the output mask of the cat operation from the\n    input mask.\n\n    Parameters\n    ----------\n    module_masks : ModuleMasks\n        The ModuleMasks instance of the Conv2d\n    mask : CoarseMask\n        The mask of its input tensor\n    cat_info: dict\n        Dict object that records the necessary information\n        of cat operation, such as the order of the input\n        tensors.\n    last_visited: str\n        The unique_name of the last visited node group.\n\n    Returns\n    -------\n    CoarseMask\n        The mask of its output tensor\n\n    \"\"\"\n    assert isinstance(mask, CoarseMask)\n    out_shape = cat_info['out_shape']\n    cat_dim = cat_info['cat_dim']\n    in_order = cat_info['in_order']\n    in_shape = cat_info['in_shape']\n    if module_masks.output_mask is None:\n        # First visit to this cat node\n        # initialize the mask based on\n        # the number of the output channel.\n        output_mask = CoarseMask(num_dim=len(out_shape))\n        for dim, _ in enumerate(out_shape):\n            if dim == cat_dim:\n                if mask.mask_index[dim] is None:\n                    continue\n                device = mask.mask_index[dim].device\n                # calculate the offset of the mask\n                pos = in_order.index(last_visited)\n                offsets = [in_shape[i][cat_dim]\n                           for i, _ in enumerate(in_shape)]\n                offset = 0\n                for i in range(pos):\n                    offset += offsets[i]\n                _tmp_mask = (mask.mask_index[dim] + offset).to(device)\n                output_mask.mask_index[dim] = _tmp_mask\n            else:\n                # directly copy the mask\n                if mask.mask_index[dim] is not None:\n                    output_mask.mask_index[dim] = mask.mask_index[dim].data.clone(\n                    )\n        module_masks.set_output_mask(output_mask)\n\n        return module_masks.output_mask\n    # If this cat node is already visited, we need\n    # validating if the mask is legel, for cat operation,\n    # the mask on the 'cat_dim' dimension should be stitched\n    # together. In the other dimensions, the mask should be\n    # the same, else the mask is not legal.\n    for dim, _ in enumerate(out_shape):\n        if dim == cat_dim:\n            if mask.mask_index[dim] is None:\n                continue\n            pos = in_order.index(last_visited)\n            offsets = [in_shape[i][cat_dim] for i, _ in enumerate(in_shape)]\n            offset = 0\n            for i in range(pos):\n                offset += offsets[i]\n            device = mask.mask_index[dim].device\n            new_mask = mask.mask_index[dim] + offset\n            module_masks.output_mask.mask_index[dim] = CoarseMask.merge_index(\n                module_masks.output_mask.mask_index[dim], new_mask).to(device)\n        else:\n            assert module_masks.output_mask.eq_on_dim(mask, dim)\n\n    return module_masks.output_mask\n\n\ndef add_inshape(module_masks, mask):\n    \"\"\"\n    Inference the output mask of the add operation from the\n    input mask.\n    \"\"\"\n    assert isinstance(mask, CoarseMask)\n    if module_masks.input_mask is None:\n        module_masks.set_input_mask(mask)\n        module_masks.set_output_mask(mask)\n        # module_masks.input_mask = mask\n        return mask\n    # If alreay visited, validate if have the conflict\n    # if the mask is different with previous input_mask\n    # then there is a mask confilct.\n    if mask != module_masks.input_mask:\n        raise Exception('Mask conflict happenes!')\n    return None\n\n\ndef add_outshape(module_masks, mask):\n    \"\"\"\n    Inference the input mask of the add operation from the\n    output mask.\n    \"\"\"\n    assert isinstance(mask, CoarseMask)\n\n    if module_masks.output_mask is None:\n        module_masks.set_output_mask(mask)\n        module_masks.set_input_mask(mask)\n        return mask\n    else:\n        assert all(\n            module_masks.output_mask.mask_index[1] == mask.mask_index[1])\n    return mask\n\n\ndef batchnorm2d_inshape(module_masks, mask):\n    \"\"\"\n    We assume only the second dimension has coarse grained mask\n\n    Parameters\n    ----------\n    module_masks : ModuleMasks\n        The ModuleMasks instance of the batchnorm2d\n    mask : CoarseMask\n        The mask of its input tensor\n\n    Returns\n    -------\n    CoarseMask\n        The mask of its output tensor\n    \"\"\"\n    assert isinstance(mask, CoarseMask)\n    assert mask.mask_index[1] is not None\n    assert mask.mask_index[0] is None\n    assert mask.mask_index[2] is None\n    assert mask.mask_index[3] is None\n    module_masks.set_input_mask(mask)\n    module_masks.set_output_mask(mask)\n    weight_cmask = CoarseMask(num_dim=1)\n    weight_cmask.add_index_mask(dim=0, index=mask.mask_index[1])\n    module_masks.set_param_masks('weight', weight_cmask)\n    module_masks.set_param_masks('bias', weight_cmask)\n    return mask\n\n\ndef batchnorm2d_outshape(module_masks, mask):\n    \"\"\"\n    We assume only the second dimension has coarse grained mask\n\n    Parameters\n    ----------\n    module_masks : ModuleMasks\n        The ModuleMasks instance of the batchnorm2d\n    mask : CoarseMask\n        The mask of its input tensor\n\n    Returns\n    -------\n    CoarseMask\n        The mask of its output tensor\n    \"\"\"\n    assert isinstance(mask, CoarseMask)\n    assert len(mask.mask_index) in [2, 4]\n    assert mask.mask_index[1] is not None\n    assert mask.mask_index[0] is None\n    module_masks.set_input_mask(mask)\n    module_masks.set_output_mask(mask)\n    weight_cmask = CoarseMask(num_dim=1)\n    weight_cmask.add_index_mask(dim=0, index=mask.mask_index[1])\n    module_masks.set_param_masks('weight', weight_cmask)\n    module_masks.set_param_masks('bias', weight_cmask)\n    return mask\n\n\ndef linear_inshape(module_masks, mask):\n    \"\"\"\n    Coarse grained input mask does not change the shape of weights and output tensor\n\n    Parameters\n    ----------\n    module_masks : ModuleMasks\n        The ModuleMasks instance of the linear\n    mask : CoarseMask\n        The mask of its input tensor\n\n    Returns\n    -------\n    CoarseMask\n        The mask of its output tensor, ```None``` means shape of output tensor is not changed\n    \"\"\"\n    assert isinstance(mask, CoarseMask)\n    assert mask.mask_index[0] is None\n    if module_masks.input_mask is not None:\n        assert module_masks.input_mask <= mask\n    module_masks.set_input_mask(mask)\n    return None\n\n\ndef view_inshape(module_masks, mask, shape):\n    \"\"\"\n    This is a limited support\n\n    TODO: consider replace tensor.view with nn.Flatten, because tensor.view is not\n    included in module, thus, cannot be replaced by our framework.\n\n    Parameters\n    ----------\n    module_masks : ModuleMasks\n        The ModuleMasks instance of the ```view``` op\n    mask : CoarseMask\n        The mask of its input tensor\n    shape : dict\n        Original shape of its input and output tensors\n\n    Returns\n    -------\n    CoarseMask\n        The mask of its output tensor\n    \"\"\"\n    # NOTE: the case constrained by the following four asserts\n    assert shape['in_shape'][0] == shape['out_shape'][0]\n    assert len(shape['in_shape']) == 4\n    assert len(shape['out_shape']) == 2\n    assert shape['out_shape'][1] == shape['in_shape'][1] * \\\n        shape['in_shape'][2]*shape['in_shape'][3]\n\n    assert isinstance(mask, CoarseMask)\n    assert mask.mask_index[1] is not None\n    assert mask.mask_index[0] is None\n    assert mask.mask_index[2] is None\n    assert mask.mask_index[3] is None\n    # due to the cat operation, the same node may be\n    # accessed more than once\n    if module_masks.input_mask is not None:\n        assert module_masks.input_mask <= mask\n    module_masks.set_input_mask(mask)\n    output_cmask = CoarseMask(num_dim=2)\n    index = []\n    step_size = shape['in_shape'][2] * shape['in_shape'][3]\n    for loc in mask.mask_index[1]:\n        index.extend([loc * step_size + i for i in range(step_size)])\n    output_cmask.add_index_mask(dim=1, index=torch.tensor(index).to(mask.mask_index[1].device))  # pylint: disable=not-callable\n    module_masks.set_output_mask(output_cmask)\n    return output_cmask\n\n\ndef view_outshape(module_masks, mask, shape):\n    \"\"\"\n    Parameters\n    ----------\n    module_masks : ModuleMasks\n        The ModuleMasks instance of the ```flatten``` op\n    mask : CoarseMask\n        The mask of its input tensor\n    shape : dict\n        Original shape of its input and output tensors\n    Returns\n    -------\n    CoarseMask\n        The mask of its output tensor\n    \"\"\"\n    # NOTE: the case constrained by the following four asserts\n    assert shape['in_shape'][0] == shape['out_shape'][0]\n    assert len(shape['in_shape']) == 4\n    assert len(shape['out_shape']) == 2\n    assert shape['out_shape'][1] == shape['in_shape'][1] * \\\n        shape['in_shape'][2]*shape['in_shape'][3]\n\n    assert isinstance(mask, CoarseMask)\n    assert mask.mask_index[1] is not None\n    assert mask.mask_index[0] is None\n\n    module_masks.set_output_mask(mask)\n    input_cmask = CoarseMask(num_dim=4)\n    index = []\n    step_size = shape['in_shape'][2] * shape['in_shape'][3]\n    for loc in mask.mask_index[1]:\n        index.extend([loc * step_size + i for i in range(step_size)])\n    input_cmask.add_index_mask(dim=1, index=torch.tensor(index).to(mask.mask_index[1].device))  # pylint: disable=not-callable\n    module_masks.set_input_mask(input_cmask)\n\n    return input_cmask\n\n\ndef size_inshape(module_masks, mask):\n    \"\"\"\n    No need to do anything for this ```size``` op\n    \"\"\"\n    return None\n\n\ndef mean_inshape(module_masks, mask, shape):\n    \"\"\"\n    Similar to view operation, currently mask inference only supports\n    the mean operation on the 3rd and 4th dimensions.\n    \"\"\"\n    assert shape['in_shape'][0] == shape['out_shape'][0]\n    assert shape['out_shape'][1] == shape['in_shape'][1]\n    assert len(shape['in_shape']) == 4\n    assert len(shape['out_shape']) == 2\n\n    assert isinstance(mask, CoarseMask)\n    assert mask.mask_index[1] is not None\n    assert mask.mask_index[0] is None\n    assert mask.mask_index[2] is None\n    assert mask.mask_index[3] is None\n    module_masks.set_input_mask(mask)\n\n    output_cmask = CoarseMask(num_dim=2)\n    output_cmask.add_index_mask(dim=1, index=mask.mask_index[1])\n    module_masks.set_output_mask(output_cmask)\n    return output_cmask\n\n\ndef mean_outshape(module_masks, mask, shape):\n    \"\"\"\n    Similar to view operation, currently mask inference only supports\n    the mean operation on the 3rd and 4th dimensions.\n    \"\"\"\n    assert shape['in_shape'][0] == shape['out_shape'][0]\n    assert shape['out_shape'][1] == shape['in_shape'][1]\n    assert len(shape['in_shape']) == 4\n    assert len(shape['out_shape']) == 2\n\n    assert isinstance(mask, CoarseMask)\n    assert mask.mask_index[1] is not None\n    assert mask.mask_index[0] is None\n    module_masks.set_output_mask(mask)\n\n    input_cmask = CoarseMask(num_dim=4)\n    input_cmask.add_index_mask(dim=1, index=mask.mask_index[1])\n    module_masks.set_input_mask(input_cmask)\n    return input_cmask\n\n\ndef maxpool2d_inshape(module_masks, mask):\n    \"\"\"\n    Assume only the second dimension is masked\n\n    Parameters\n    ----------\n    module_masks : ModuleMasks\n        The ModuleMasks instance of the maxpool2d\n    mask : CoarseMask\n        The mask of its input tensor\n\n    Returns\n    -------\n    CoarseMask\n        The mask of its output tensor\n    \"\"\"\n    assert isinstance(mask, CoarseMask)\n    assert mask.mask_index[1] is not None\n    assert mask.mask_index[0] is None\n    assert mask.mask_index[2] is None\n    assert mask.mask_index[3] is None\n    if module_masks.input_mask is not None:\n        assert module_masks.input_mask <= mask\n    # assert module_masks.input_mask is None\n    module_masks.set_input_mask(mask)\n    module_masks.set_output_mask(mask)\n    return mask\n\n\ndef maxpool2d_outshape(module_masks, mask):\n    \"\"\"\n    Assume only the second dimension is masked\n\n    Parameters\n    ----------\n    module_masks : ModuleMasks\n        The ModuleMasks instance of the maxpool2d\n    mask : CoarseMask\n        The mask of its input tensor\n\n    Returns\n    -------\n    CoarseMask\n        The mask of its output tensor\n    \"\"\"\n    assert isinstance(mask, CoarseMask)\n    assert mask.mask_index[1] is not None\n    assert mask.mask_index[0] is None\n\n    module_masks.set_input_mask(mask)\n    module_masks.set_output_mask(mask)\n    return mask\n\n\ndef relu_inshape(module_masks, mask):\n    \"\"\"\n    Parameters\n    ----------\n    module_masks : ModuleMasks\n        The ModuleMasks instance of the relu\n    mask : CoarseMask\n        The mask of its input tensor\n\n    Returns\n    -------\n    CoarseMask\n        The mask of its output tensor\n    \"\"\"\n    assert isinstance(mask, CoarseMask)\n    if module_masks.input_mask is not None:\n        # mask conflict should be solved before speedup\n        assert module_masks.input_mask <= mask\n    # assert module_masks.input_mask is None, \"A relu op can only be processed once\"\n    module_masks.set_input_mask(mask)\n    module_masks.set_output_mask(mask)\n    return mask\n\n\ndef relu_outshape(module_masks, mask):\n    \"\"\"\n    Parameters\n    ----------\n    module_masks : ModuleMasks\n        The ModuleMasks instance of the relu\n    mask : CoarseMask\n        The mask of its input tensor\n\n    Returns\n    -------\n    CoarseMask\n        The mask of its output tensor\n    \"\"\"\n    assert isinstance(mask, CoarseMask)\n    if module_masks.output_mask is not None:\n        # mask conflict should be solved before speedup\n        assert all(\n            module_masks.output_mask.mask_index[1] == mask.mask_index[1])\n    module_masks.set_input_mask(mask)\n    module_masks.set_output_mask(mask)\n    return mask\n\n\ndef batchnorm2d_mask(module_masks, mask):\n    \"\"\"\n    Infer input and output shape from weight mask\n    Parameters\n    ----------\n    module_masks : ModuleMasks\n        The ModuleMasks instance of the batchnorm2d\n    mask : dict\n        The mask of its weights, from the user provided mask file\n    Returns\n    -------\n    CoarseMask, CoarseMask\n        The mask of its input tensor, the mask of its output tensor\n    \"\"\"\n    assert 'weight' in mask and 'bias' in mask\n    sum_mask = mask['weight'] + mask['bias']\n    nonzero_index = torch.nonzero(sum_mask, as_tuple=True)[0]\n    # infer shape of parameters\n    param_cmask = CoarseMask(num_dim=1)\n    param_cmask.add_index_mask(dim=0, index=nonzero_index)\n    module_masks.set_param_masks('weight', param_cmask)\n    module_masks.set_param_masks('bias', param_cmask)\n    # infer shape of input tensor\n    input_cmask = CoarseMask(num_dim=4)\n    input_cmask.add_index_mask(dim=1,\n                               index=torch.nonzero(mask['weight'], as_tuple=True)[0])\n    module_masks.set_input_mask(input_cmask)\n    # infer shape of output tensor\n    output_cmask = CoarseMask(num_dim=4)\n    output_cmask.add_index_mask(dim=1, index=nonzero_index)\n    module_masks.set_output_mask(output_cmask)\n    return input_cmask, output_cmask\n\n\ndef linear_mask(module_masks, mask, shape):\n    \"\"\"\n    Infer input and output shape from weight mask with limitations:\n    Only support infer input mask\n\n    Parameters\n    ----------\n    module_masks : ModuleMasks\n        The ModuleMasks instance of the Linear\n    mask : dict\n        The mask of its weights, from the user provided mask file\n    shape: dict\n        Shape of its input and output tensors\n    Returns\n    -------\n    CoarseMask, CoarseMask\n        The mask of its input tensor, the mask of its output tensor\n    \"\"\"\n\n    assert 'weight' in mask\n    num_input_dim = len(shape['in_shape'])\n\n    # Input data of Linear module can have multiple dimensions.\n    # here we only support infer coarse mask on the first dimension (dimension 0)\n    nonzero_index = torch.nonzero(mask['weight'].sum(0), as_tuple=True)[0]\n\n    # infer shape of input tensor\n    input_cmask = CoarseMask(num_dim=num_input_dim)\n    input_cmask.add_index_mask(dim=num_input_dim-1, index=nonzero_index)\n\n    module_masks.set_input_mask(input_cmask)\n    return input_cmask, None\n\n\ndef conv2d_mask(module_masks, mask):\n    \"\"\"\n    Infer input and output shape from weight mask\n\n    Parameters\n    ----------\n    module_masks : ModuleMasks\n        The ModuleMasks instance of the conv2d\n    mask : dict\n        The mask of its weights, from the user provided mask file\n\n    Returns\n    -------\n    CoarseMask, CoarseMask\n        The mask of its input tensor, the mask of its output tensor\n    \"\"\"\n    def convert_to_coarse_mask(mask, dim=0):\n        \"\"\"\n        Parameters\n        ----------\n        mask : dict\n            Weight mask from user provided mask file\n        dim: int\n            0: filter pruning\n            1: channel pruning\n\n        Returns\n        -------\n        LongTensor, CoarseMask, CoarseMask\n            Index of the masked dimension, weight mask, bias mask\n        \"\"\"\n        assert 'weight' in mask\n        assert isinstance(mask['weight'], torch.Tensor)\n        assert dim in [0, 1]\n\n        weight_mask = mask['weight']\n\n        sum_idx = (1, 2, 3) if dim == 0 else (0, 2, 3)\n        index = torch.nonzero(weight_mask.abs().sum(\n            sum_idx) != 0, as_tuple=True)[0]\n\n        index = index.long().to(weight_mask.device)\n        weight_cmask = CoarseMask(num_dim=4)\n        weight_cmask.add_index_mask(dim=dim, index=index)\n        bias_cmask = None\n        if dim == 0 and 'bias' in mask and mask['bias'] is not None:\n            bias_index = torch.nonzero(mask['bias'], as_tuple=True)[0]\n            assert torch.all(torch.eq(index, bias_index)), \\\n                \"bias mask should be consistent with weight mask\"\n            bias_cmask = CoarseMask(num_dim=1)\n            bias_cmask.add_index_mask(dim=0, index=bias_index)\n        return index, weight_cmask, bias_cmask\n\n    index, weight_cmask, bias_cmask = convert_to_coarse_mask(\n        mask, dim=conv_prune_dim)\n\n    if index is None:\n        # TODO: fine grained mask speedup\n        return None, None\n    # deal with coarse grain mask\n    # mask conflict should be solved by fix_mask_conflict before speedup\n    if 'weight' in module_masks.param_masks:\n        assert module_masks.param_masks['weight'] == weight_cmask\n    else:\n        module_masks.set_param_masks('weight', weight_cmask)\n        if conv_prune_dim == 0:\n            module_masks.set_param_masks('bias', bias_cmask)\n\n    io_cmask = CoarseMask(num_dim=4)\n    io_cmask.add_index_mask(dim=1, index=index)\n\n    if conv_prune_dim == 0:\n        if module_masks.output_mask is None:\n            module_masks.set_output_mask(io_cmask)\n        else:\n            assert module_masks.output_mask == io_cmask\n        return None, module_masks.output_mask\n    else:\n        if module_masks.input_mask is None:\n            module_masks.set_input_mask(io_cmask)\n        else:\n            assert module_masks.input_mask == io_cmask\n        return module_masks.input_mask, None\n\n\ndef conv2d_inshape(module_masks, mask):\n    \"\"\"\n    Shape change of input tensor does not affect the shape of its output tensor\n    Parameters\n    ----------\n    module_masks : ModuleMasks\n        The ModuleMasks instance of the conv2d\n    mask : CoarseMask\n        The mask of its input tensor\n    Returns\n    -------\n    CoarseMask\n        The mask of its output tensor\n    \"\"\"\n    assert isinstance(mask, CoarseMask)\n    if module_masks.input_mask is None:\n        module_masks.set_input_mask(mask)\n    else:\n        # the same conv layer may be accessed more\n        # than once, such as a concat operation.\n        # mask conflict should be solved by fix_mask_conflict before speedup\n\n        assert module_masks.input_mask == mask\n\n    # shape changes pass through depths wise conv layers\n    m = module_masks.module\n    if m.in_channels == m.out_channels == m.groups:\n        module_masks.output_mask = mask\n        module_masks.input_mask = mask\n        return mask\n    return None\n\n\ndef conv2d_outshape(module_masks, mask):\n    \"\"\"\n    Assume only the second dimension is masked\n\n    Parameters\n    ----------\n    module_masks : ModuleMasks\n        The ModuleMasks instance of the conv2d\n    mask : CoarseMask\n        The mask of its output tensor\n\n    Returns\n    -------\n    CoarseMask\n        The mask of its input tensor\n    \"\"\"\n    assert isinstance(mask, CoarseMask)\n    assert mask.mask_index[1] is not None\n    assert mask.mask_index[0] is None\n    assert mask.mask_index[2] is None\n    assert mask.mask_index[3] is None\n\n    if module_masks.output_mask is None:\n        module_masks.output_mask = mask\n    else:\n        # mask conflict should be solved by fix_mask_conflict before speedup\n        # mask and module_masks.output_mask may have different number of dimensions\n        # since they could be passed by linear or conv2d\n        assert all(\n            module_masks.output_mask.mask_index[1] == mask.mask_index[1])\n\n    weight_cmask = CoarseMask(num_dim=4)\n    weight_cmask.add_index_mask(dim=0, index=mask.mask_index[1])\n    bias_cmask = CoarseMask(num_dim=1)\n    bias_cmask.add_index_mask(dim=0, index=mask.mask_index[1])\n    module_masks.set_param_masks('weight', weight_cmask)\n    module_masks.set_param_masks('bias', bias_cmask)\n\n    # shape changes pass through depths wise conv layers\n    m = module_masks.module\n    if m.in_channels == m.out_channels == m.groups:\n        module_masks.output_mask = mask\n        module_masks.input_mask = mask\n        return mask\n    return None\n\n\ndef convtranspose2d_mask(module_masks, mask):\n    # TODO support the Convtranspose2d Pruning for the L1FilterPruner\n    raise Exception(\n        \"Current Filter pruner cannot prune the ConvTranspose2d, will support pruning ConvTranspose2d later\")\n\n\ndef convtranspose2d_inshape(module_masks, mask):\n    \"\"\"\n    Shape change of input tensor does not affect the shape of its output tensor\n    Parameters\n    ----------\n    module_masks : ModuleMasks\n        The ModuleMasks instance of the conv2d\n    mask : CoarseMask\n        The mask of its input tensor\n    Returns\n    -------\n    CoarseMask\n        The mask of its output tensor\n    \"\"\"\n    assert isinstance(mask, CoarseMask)\n    if module_masks.input_mask is None:\n        module_masks.set_input_mask(mask)\n    else:\n        # the same conv layer may be accessed more\n        # than once, such as a concat operation.\n        # mask conflict should be solved by fix_mask_conflict before speedup\n        assert module_masks.input_mask == mask\n\n    # shape changes pass through depths wise conv layers\n    m = module_masks.module\n    if m.in_channels == m.out_channels == m.groups:\n        module_masks.output_mask = mask\n        module_masks.input_mask = mask\n        return mask\n    return None\n\n\ndef convtranspose2d_outshape(module_masks, mask):\n    assert isinstance(mask, CoarseMask)\n    assert mask.mask_index[1] is not None\n    assert mask.mask_index[0] is None\n    assert mask.mask_index[2] is None\n    assert mask.mask_index[3] is None\n\n    if module_masks.output_mask is None:\n        module_masks.output_mask = mask\n    else:\n        # mask conflict should be solved by fix_mask_conflict before speedup\n        # mask and module_masks.output_mask may have different number of dimensions\n        # since they could be passed by linear or conv2d\n        assert all(\n            module_masks.output_mask.mask_index[1] == mask.mask_index[1])\n\n    weight_cmask = CoarseMask(num_dim=4)\n    # Note the memory layout of Convtranspose2d is C_in, C_out, k1, k2\n    weight_cmask.add_index_mask(dim=1, index=mask.mask_index[1])\n    bias_cmask = CoarseMask(num_dim=1)\n    bias_cmask.add_index_mask(dim=0, index=mask.mask_index[1])\n    module_masks.set_param_masks('weight', weight_cmask)\n    module_masks.set_param_masks('bias', bias_cmask)\n\n    # shape changes pass through depths wise conv layers\n    m = module_masks.module\n    if m.in_channels == m.out_channels == m.groups:\n        module_masks.output_mask = mask\n        module_masks.input_mask = mask\n        return mask\n    return None\n"
  },
  {
    "path": "src/aup/compression/torch/torch_utils.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\nimport os\nimport copy\nimport functools\nfrom enum import Enum, unique\nimport json_tricks\nfrom schema import And\n\nfrom . import parameter_expressions\n\n\nto_json = functools.partial(json_tricks.dumps, allow_nan=True)\n\n@unique\nclass OptimizeMode(Enum):\n    \"\"\"Optimize Mode class\n\n    if OptimizeMode is 'minimize', it means the tuner need to minimize the reward\n    that received from Trial.\n\n    if OptimizeMode is 'maximize', it means the tuner need to maximize the reward\n    that received from Trial.\n    \"\"\"\n    Minimize = 'minimize'\n    Maximize = 'maximize'\n\n\nclass NodeType:\n    \"\"\"Node Type class\n    \"\"\"\n    ROOT = 'root'\n    TYPE = '_type'\n    VALUE = '_value'\n    INDEX = '_index'\n    NAME = '_name'\n\n\nclass MetricType:\n    \"\"\"The types of metric data\n    \"\"\"\n    FINAL = 'FINAL'\n    PERIODICAL = 'PERIODICAL'\n    REQUEST_PARAMETER = 'REQUEST_PARAMETER'\n\n\ndef split_index(params):\n    \"\"\"\n    Delete index infromation from params\n    \"\"\"\n    if isinstance(params, dict):\n        if NodeType.INDEX in params.keys():\n            return split_index(params[NodeType.VALUE])\n        result = {}\n        for key in params:\n            result[key] = split_index(params[key])\n        return result\n    else:\n        return params\n\n\ndef extract_scalar_reward(value, scalar_key='default'):\n    \"\"\"\n    Extract scalar reward from trial result.\n\n    Parameters\n    ----------\n    value : int, float, dict\n        the reported final metric data\n    scalar_key : str\n        the key name that indicates the numeric number\n\n    Raises\n    ------\n    RuntimeError\n        Incorrect final result: the final result should be float/int,\n        or a dict which has a key named \"default\" whose value is float/int.\n    \"\"\"\n    if isinstance(value, (float, int)):\n        reward = value\n    elif isinstance(value, dict) and scalar_key in value and isinstance(value[scalar_key], (float, int)):\n        reward = value[scalar_key]\n    else:\n        raise RuntimeError('Incorrect final result: the final result should be float/int, ' \\\n            'or a dict which has a key named \"default\" whose value is float/int.')\n    return reward\n\n\ndef extract_scalar_history(trial_history, scalar_key='default'):\n    \"\"\"\n    Extract scalar value from a list of intermediate results.\n\n    Parameters\n    ----------\n    trial_history : list\n        accumulated intermediate results of a trial\n    scalar_key : str\n        the key name that indicates the numeric number\n\n    Raises\n    ------\n    RuntimeError\n        Incorrect final result: the final result should be float/int,\n        or a dict which has a key named \"default\" whose value is float/int.\n    \"\"\"\n    return [extract_scalar_reward(ele, scalar_key) for ele in trial_history]\n\n\ndef convert_dict2tuple(value):\n    \"\"\"\n    convert dict type to tuple to solve unhashable problem.\n    \"\"\"\n    if isinstance(value, dict):\n        for _keys in value:\n            value[_keys] = convert_dict2tuple(value[_keys])\n        return tuple(sorted(value.items()))\n    return value\n\n\ndef json2space(x, oldy=None, name=NodeType.ROOT):\n    \"\"\"\n    Change search space from json format to hyperopt format\n\n    \"\"\"\n    y = list()\n    if isinstance(x, dict):\n        if NodeType.TYPE in x.keys():\n            _type = x[NodeType.TYPE]\n            name = name + '-' + _type\n            if _type == 'choice':\n                if oldy is not None:\n                    _index = oldy[NodeType.INDEX]\n                    y += json2space(x[NodeType.VALUE][_index],\n                                    oldy[NodeType.VALUE], name=name+'[%d]' % _index)\n                else:\n                    y += json2space(x[NodeType.VALUE], None, name=name)\n            y.append(name)\n        else:\n            for key in x.keys():\n                y += json2space(x[key], oldy[key] if oldy else None, name+\"[%s]\" % str(key))\n    elif isinstance(x, list):\n        for i, x_i in enumerate(x):\n            if isinstance(x_i, dict):\n                if NodeType.NAME not in x_i.keys():\n                    raise RuntimeError('\\'_name\\' key is not found in this nested search space.')\n            y += json2space(x_i, oldy[i] if oldy else None, name + \"[%d]\" % i)\n    return y\n\n\ndef json2parameter(x, is_rand, random_state, oldy=None, Rand=False, name=NodeType.ROOT):\n    \"\"\"\n    Json to pramaters.\n\n    \"\"\"\n    if isinstance(x, dict):\n        if NodeType.TYPE in x.keys():\n            _type = x[NodeType.TYPE]\n            _value = x[NodeType.VALUE]\n            name = name + '-' + _type\n            Rand |= is_rand[name]\n            if Rand is True:\n                if _type == 'choice':\n                    _index = random_state.randint(len(_value))\n                    y = {\n                        NodeType.INDEX: _index,\n                        NodeType.VALUE: json2parameter(\n                            x[NodeType.VALUE][_index],\n                            is_rand,\n                            random_state,\n                            None,\n                            Rand,\n                            name=name+\"[%d]\" % _index\n                        )\n                    }\n                else:\n                    y = getattr(parameter_expressions, _type)(*(_value + [random_state]))\n            else:\n                y = copy.deepcopy(oldy)\n        else:\n            y = dict()\n            for key in x.keys():\n                y[key] = json2parameter(\n                    x[key],\n                    is_rand,\n                    random_state,\n                    oldy[key] if oldy else None,\n                    Rand,\n                    name + \"[%s]\" % str(key)\n                )\n    elif isinstance(x, list):\n        y = list()\n        for i, x_i in enumerate(x):\n            if isinstance(x_i, dict):\n                if NodeType.NAME not in x_i.keys():\n                    raise RuntimeError('\\'_name\\' key is not found in this nested search space.')\n            y.append(json2parameter(\n                x_i,\n                is_rand,\n                random_state,\n                oldy[i] if oldy else None,\n                Rand,\n                name + \"[%d]\" % i\n            ))\n    else:\n        y = copy.deepcopy(x)\n    return y\n\ndef merge_parameter(base_params, override_params):\n    \"\"\"\n    Update the parameters in ``base_params`` with ``override_params``.\n    Can be useful to override parsed command line arguments.\n\n    Parameters\n    ----------\n    base_params : namespace or dict\n        Base parameters. A key-value mapping.\n    override_params : dict or None\n        Parameters to override. Usually the parameters got from ``get_next_parameters()``.\n        When it is none, nothing will happen.\n\n    Returns\n    -------\n    namespace or dict\n        The updated ``base_params``. Note that ``base_params`` will be updated inplace. The return value is\n        only for convenience.\n    \"\"\"\n    if override_params is None:\n        return base_params\n    is_dict = isinstance(base_params, dict)\n    for k, v in override_params.items():\n        if is_dict:\n            if k not in base_params:\n                raise ValueError('Key \\'%s\\' not found in base parameters.' % k)\n            if type(base_params[k]) != type(v) and base_params[k] is not None:\n                raise TypeError('Expected \\'%s\\' in override parameters to have type \\'%s\\', but found \\'%s\\'.' %\n                                (k, type(base_params[k]), type(v)))\n            base_params[k] = v\n        else:\n            if not hasattr(base_params, k):\n                raise ValueError('Key \\'%s\\' not found in base parameters.' % k)\n            if type(getattr(base_params, k)) != type(v) and getattr(base_params, k) is not None:\n                raise TypeError('Expected \\'%s\\' in override parameters to have type \\'%s\\', but found \\'%s\\'.' %\n                                (k, type(getattr(base_params, k)), type(v)))\n            setattr(base_params, k, v)\n    return base_params\n\nclass ClassArgsValidator(object):\n    \"\"\"\n    NNI tuners/assessors/adivisors accept a `classArgs` parameter in experiment configuration file.\n    This ClassArgsValidator interface is used to validate the classArgs section in exeperiment\n    configuration file.\n    \"\"\"\n    def validate_class_args(self, **kwargs):\n        \"\"\"\n        Validate the classArgs configuration in experiment configuration file.\n\n        Parameters\n        ----------\n        kwargs: dict\n            kwargs passed to tuner/assessor/advisor constructor\n\n        Raises:\n            Raise an execption if the kwargs is invalid.\n        \"\"\"\n        pass\n\n    def choices(self, key, *args):\n        \"\"\"\n        Utility method to create a scheme to check whether the `key` is one of the `args`.\n\n        Parameters:\n        ----------\n        key: str\n            key name of the data to be validated\n        args: list of str\n            list of the choices\n\n        Returns: Schema\n        --------\n            A scheme to check whether the `key` is one of the `args`.\n        \"\"\"\n        return And(lambda n: n in args, error='%s should be in [%s]!' % (key, str(args)))\n\n    def range(self, key, keyType, start, end):\n        \"\"\"\n        Utility method to create a schema to check whether the `key` is in the range of [start, end].\n\n        Parameters:\n        ----------\n        key: str\n            key name of the data to be validated\n        keyType: type\n            python data type, such as int, float\n        start: type is specified by keyType\n            start of the range\n        end: type is specified by keyType\n            end of the range\n\n        Returns: Schema\n        --------\n            A scheme to check whether the `key` is in the range of [start, end].\n        \"\"\"\n        return And(\n            And(keyType, error='%s should be %s type!' % (key, keyType.__name__)),\n            And(lambda n: start <= n <= end, error='%s should be in range of (%s, %s)!' % (key, start, end))\n        )\n"
  },
  {
    "path": "src/aup/compression/torch/utils/__init__.py",
    "content": ""
  },
  {
    "path": "src/aup/compression/torch/utils/config_validation.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\nfrom schema import Schema, And, SchemaError\n\ndef validate_op_names(model, op_names, logger):\n    found_names = set(map(lambda x: x[0], model.named_modules()))\n\n    not_found_op_names = list(set(op_names) - found_names)\n    if not_found_op_names:\n        logger.warning('op_names %s not found in model', not_found_op_names)\n\n    return True\n\ndef validate_op_types(model, op_types, logger):\n    found_types = set(['default']) | set(map(lambda x: type(x[1]).__name__, model.named_modules()))\n\n    not_found_op_types = list(set(op_types) - found_types)\n    if not_found_op_types:\n        logger.warning('op_types %s not found in model', not_found_op_types)\n\n    return True\n\ndef validate_op_types_op_names(data):\n    if not ('op_types' in data or 'op_names' in data):\n        raise SchemaError('Either op_types or op_names must be specified.')\n    return True\n\nclass CompressorSchema:\n    def __init__(self, data_schema, model, logger):\n        assert isinstance(data_schema, list) and len(data_schema) <= 1\n        self.data_schema = data_schema\n        self.compressor_schema = Schema(self._modify_schema(data_schema, model, logger))\n\n    def _modify_schema(self, data_schema, model, logger):\n        if not data_schema:\n            return data_schema\n\n        for k in data_schema[0]:\n            old_schema = data_schema[0][k]\n            if k == 'op_types' or (isinstance(k, Schema) and k._schema == 'op_types'):\n                new_schema = And(old_schema, lambda n: validate_op_types(model, n, logger))\n                data_schema[0][k] = new_schema\n            if k == 'op_names' or (isinstance(k, Schema) and k._schema == 'op_names'):\n                new_schema = And(old_schema, lambda n: validate_op_names(model, n, logger))\n                data_schema[0][k] = new_schema\n\n        data_schema[0] = And(data_schema[0], lambda d: validate_op_types_op_names(d))\n\n        return data_schema\n\n    def validate(self, data):\n        self.compressor_schema.validate(data)\n"
  },
  {
    "path": "src/aup/compression/torch/utils/counter.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n# Modified work Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nimport functools\nfrom collections import Counter\nfrom prettytable import PrettyTable\n\nimport torch\nimport torch.nn as nn\nfrom ..compressor import PrunerModuleWrapper\n\n\n__all__ = ['count_flops_params']\n\n\ndef _get_params(m):\n    return sum([p.numel() for p in m.parameters()])\n\n\nclass ModelProfiler:\n\n    def __init__(self, custom_ops=None, mode='default'):\n        \"\"\"\n        ModelProfiler is used to share state to hooks.\n\n        Parameters\n        ----------\n        custom_ops: dict\n            a mapping of (module -> torch.nn.Module : custom operation)\n            the custom operation is a callback funtion to calculate\n            the module flops, parameters and the weight shape, it will overwrite the default operation.\n            for reference, please see ``self.ops``.\n        mode:\n            the mode of how to collect information. If the mode is set to `default`,\n            only the information of convolution and linear will be collected.\n            If the mode is set to `full`, other operations will also be collected.\n        \"\"\"\n        self.ops = {\n            nn.Conv1d: self._count_convNd,\n            nn.Conv2d: self._count_convNd,\n            nn.Conv3d: self._count_convNd,\n            nn.Linear: self._count_linear\n        }\n        self._count_bias = False\n        if mode == 'full':\n            self.ops.update({\n                nn.ConvTranspose1d: self._count_convNd,\n                nn.ConvTranspose2d: self._count_convNd,\n                nn.ConvTranspose3d: self._count_convNd,\n                nn.BatchNorm1d: self._count_bn,\n                nn.BatchNorm2d: self._count_bn,\n                nn.BatchNorm3d: self._count_bn,\n                nn.LeakyReLU: self._count_relu,\n                nn.AvgPool1d: self._count_avgpool,\n                nn.AvgPool2d: self._count_avgpool,\n                nn.AvgPool3d: self._count_avgpool,\n                nn.AdaptiveAvgPool1d: self._count_adap_avgpool,\n                nn.AdaptiveAvgPool2d: self._count_adap_avgpool,\n                nn.AdaptiveAvgPool3d: self._count_adap_avgpool,\n                nn.Upsample: self._count_upsample,\n                nn.UpsamplingBilinear2d: self._count_upsample,\n                nn.UpsamplingNearest2d: self._count_upsample\n            })\n            self._count_bias = True\n\n        if custom_ops is not None:\n            self.ops.update(custom_ops)\n\n        self.mode = mode\n        self.results = []\n\n    def _push_result(self, result):\n        self.results.append(result)\n\n    def _get_result(self, m, flops):\n        # assume weight is called `weight`, otherwise it's not applicable\n        # if user customize the operation, the callback function should\n        # return the dict result, inluding calculated flops, params and weight_shape.\n\n        result = {\n            'flops': flops,\n            'params': _get_params(m),\n            'weight_shape': tuple(m.weight.size()) if hasattr(m, 'weight') else 0,\n        }\n        return result\n\n    def _count_convNd(self, m, x, y):\n        cin = m.in_channels\n        kernel_ops = m.weight.size()[2] * m.weight.size()[3]\n        output_size = torch.zeros(y.size()[2:]).numel()\n        cout = y.size()[1]\n\n        if hasattr(m, 'weight_mask'):\n            cout = m.weight_mask.sum() // (cin * kernel_ops)\n\n        total_ops = cout * output_size * kernel_ops * cin // m.groups  # cout x oW x oH\n\n        if self._count_bias:\n            bias_flops = 1 if m.bias is not None else 0\n            total_ops += cout * output_size * bias_flops\n\n        return self._get_result(m, total_ops)\n\n    def _count_linear(self, m, x, y):\n        out_features = m.out_features\n        if hasattr(m, 'weight_mask'):\n            out_features = m.weight_mask.sum() // m.in_features\n        total_ops = out_features * m.in_features\n\n        if self._count_bias:\n            bias_flops = 1 if m.bias is not None else 0\n            total_ops += out_features * bias_flops\n\n        return self._get_result(m, total_ops)\n\n    def _count_bn(self, m, x, y):\n        total_ops = 2 * x[0].numel()\n        return self._get_result(m, total_ops)\n\n    def _count_relu(self, m, x, y):\n        total_ops = x[0].numel()\n        return self._get_result(m, total_ops)\n\n    def _count_avgpool(self, m, x, y):\n        total_ops = y.numel()\n        return self._get_result(m, total_ops)\n\n    def _count_adap_avgpool(self, m, x, y):\n        kernel = torch.Tensor([*(x[0].shape[2:])]) // torch.Tensor(list((m.output_size,))).squeeze()\n        total_add = int(torch.prod(kernel))\n        total_div = 1\n        kernel_ops = total_add + total_div\n        num_elements = y.numel()\n        total_ops = kernel_ops * num_elements\n\n        return self._get_result(m, total_ops)\n\n    def _count_upsample(self, m, x, y):\n        if m.mode == 'linear':\n            total_ops = y.nelement() * 5  # 2 muls + 3 add\n        elif m.mode == 'bilinear':\n            # https://en.wikipedia.org/wiki/Bilinear_interpolation\n            total_ops = y.nelement() * 11  # 6 muls + 5 adds\n        elif m.mode == 'bicubic':\n            # https://en.wikipedia.org/wiki/Bicubic_interpolation\n            # Product matrix [4x4] x [4x4] x [4x4]\n            ops_solve_A = 224  # 128 muls + 96 adds\n            ops_solve_p = 35  # 16 muls + 12 adds + 4 muls + 3 adds\n            total_ops = y.nelement() * (ops_solve_A + ops_solve_p)\n        elif m.mode == 'trilinear':\n            # https://en.wikipedia.org/wiki/Trilinear_interpolation\n            # can viewed as 2 bilinear + 1 linear\n            total_ops = y.nelement() * (13 * 2 + 5)\n        else:\n            total_ops = 0\n\n        return self._get_result(m, total_ops)\n\n    def count_module(self, m, x, y, name):\n        # assume x is tuple of single tensor\n        result = self.ops[type(m)](m, x, y)\n        total_result = {\n            'name': name,\n            'input_size': tuple(x[0].size()),\n            'output_size': tuple(y.size()),\n            'module_type': type(m).__name__,\n            **result\n        }\n\n        self._push_result(total_result)\n\n    def sum_flops(self):\n        return sum([s['flops'] for s in self.results])\n\n    def sum_params(self):\n        return sum({s['name']: s['params'] for s in self.results}.values())\n\n    def format_results(self):\n        table = PrettyTable()\n        name_counter = Counter([s['name'] for s in self.results])\n        has_multi_use = any(map(lambda v: v > 1, name_counter.values()))\n        name_counter = Counter()  # clear the counter to count from 0\n\n        headers = [\n            'Index',\n            'Name',\n            'Type',\n            'Weight Shape',\n            'FLOPs',\n            '#Params',\n        ]\n        if has_multi_use:\n            headers.append('#Call')\n\n        table.field_names = headers\n        for i, result in enumerate(self.results):\n            row_values = [\n                i,\n                result['name'],\n                result['module_type'],\n                str(result['weight_shape']),\n                result['flops'],\n                result['params'],\n            ]\n            name_counter[result['name']] += 1\n            if has_multi_use:\n                row_values.append(name_counter[result['name']])\n            table.add_row(row_values)\n        return table\n\n\ndef count_flops_params(model, x, custom_ops=None, verbose=True, mode='default'):\n    \"\"\"\n    Count FLOPs and Params of the given model. This function would\n    identify the mask on the module and take the pruned shape into consideration.\n    Note that, for sturctured pruning, we only identify the remained filters\n    according to its mask, and do not take the pruned input channels into consideration,\n    so the calculated FLOPs  will be larger than real number.\n\n    Parameters\n    ---------\n    model : nn.Module\n        Target model.\n    x : tuple or tensor\n        The input shape of data (a tuple), a tensor or a tuple of tensor as input data.\n    custom_ops : dict\n        A mapping of (module -> torch.nn.Module : custom operation)\n        the custom operation is a callback funtion to calculate\n        the module flops and parameters, it will overwrite the default operation.\n        for reference, please see ``ops`` in ``ModelProfiler``.\n    verbose : bool\n        If False, mute detail information about modules. Default is True.\n    mode : str\n        the mode of how to collect information. If the mode is set to ``default``,\n        only the information of convolution and linear will be collected.\n        If the mode is set to ``full``, other operations will also be collected.\n\n    Returns\n    -------\n    tuple of int, int and dict\n        Representing total FLOPs, total parameters, and a detailed list of results respectively.\n        The list of results are a list of dict, each of which contains (name, module_type, weight_shape,\n        flops, params, input_size, output_size) as its keys.\n    \"\"\"\n\n    assert isinstance(x, tuple) or isinstance(x, torch.Tensor)\n    assert mode in ['default', 'full']\n\n    original_device = next(model.parameters()).device\n    training = model.training\n\n    if isinstance(x, tuple) and all(isinstance(t, int) for t in x):\n        x = (torch.zeros(x).to(original_device), )\n    elif torch.is_tensor(x):\n        x = (x.to(original_device), )\n    else:\n        x = (t.to(original_device) for t in x)\n\n    handler_collection = []\n    profiler = ModelProfiler(custom_ops, mode)\n\n    prev_m = None\n    for name, m in model.named_modules():\n        # dealing with weight mask here\n        if isinstance(prev_m, PrunerModuleWrapper):\n            # weight mask is set to weight mask of its parent (wrapper)\n            weight_mask = prev_m.weight_mask\n            m.weight_mask = weight_mask\n        prev_m = m\n\n        if type(m) in profiler.ops:\n            # if a leaf node\n            _handler = m.register_forward_hook(functools.partial(profiler.count_module, name=name))\n            handler_collection.append(_handler)\n\n    model.eval()\n\n    with torch.no_grad():\n        model(*x)\n\n    # restore origin status\n    for name, m in model.named_modules():\n        if hasattr(m, 'weight_mask'):\n            delattr(m, 'weight_mask')\n\n    model.train(training).to(original_device)\n    for handler in handler_collection:\n        handler.remove()\n\n    if verbose:\n        # get detail information\n        print(profiler.format_results())\n        print('FLOPs total: {}'.format(profiler.sum_flops()))\n        print('#Params total: {}'.format(profiler.sum_params()))\n\n    return profiler.sum_flops(), profiler.sum_params(), profiler.results"
  },
  {
    "path": "src/aup/compression/torch/utils/mask_conflict.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\nimport os\nimport logging\nimport torch\nimport numpy as np\nfrom .shape_dependency import ChannelDependency, GroupDependency, CatPaddingDependency, InputChannelDependency\nfrom .utils import get_module_by_name\n# logging.basicConfig(level = logging.DEBUG)\n_logger = logging.getLogger(__name__)\n\n\ndef fix_mask_conflict(masks, model=None, dummy_input=None, traced=None):\n    \"\"\"\n    MaskConflict fix the mask conflict for the channel dependencies\n    and group dependency.\n\n    Parameters\n    ----------\n    masks : dict/str\n        A dict object that stores the masks or the path of the mask file\n    model : torch.nn.Module\n        model to fix the mask conflict\n    dummy_input : torch.Tensor\n        input example to trace the model\n    traced : torch._C.torch.jit.TopLevelTracedModule\n        the traced model of the target model, is this parameter is not None,\n        we donnot use the model and dummpy_input to get the trace graph.\n    \"\"\"\n    if isinstance(masks, str):\n        # if the input is the path of the mask_file\n        assert os.path.exists(masks)\n        masks = torch.load(masks)\n    assert len(masks) > 0,  'Mask tensor cannot be empty'\n    # if the user uses the model and dummy_input to trace the model, we\n    # should get the traced model handly, so that, we only trace the\n    # model once, GroupMaskConflict and ChannelMaskConflict will reuse\n    # this traced model.\n    if traced is None:\n        assert model is not None and dummy_input is not None\n        training = model.training\n        model.eval()\n        # We need to trace the model in eval mode\n        traced = torch.jit.trace(model, dummy_input)\n        model.train(training)\n\n    fix_group_mask = GroupMaskConflict(masks, model, dummy_input, traced)\n    masks = fix_group_mask.fix_mask()\n    fix_channel_mask = ChannelMaskConflict(masks, model, dummy_input, traced)\n    masks = fix_channel_mask.fix_mask()\n    padding_cat_mask = CatMaskPadding(masks, model, dummy_input, traced)\n    masks = padding_cat_mask.fix_mask()\n    return masks, fix_channel_mask.conv_prune_dim\n\n\nclass MaskFix:\n    def __init__(self, masks, model=None, dummy_input=None, traced=None):\n        # check if the parameters are valid\n        parameter_valid = False\n        if traced is not None:\n            parameter_valid = True\n        elif (model is not None) and (dummy_input is not None):\n            parameter_valid = True\n        if not parameter_valid:\n            raise Exception('The input parameters is invalid!')\n        self.model = model\n        self.dummy_input = dummy_input\n        self.traced = traced\n        self.masks = masks\n\n    def fix_mask(self):\n        raise NotImplementedError\n\n    def export(self, path):\n        \"\"\"\n        Export the masks after fixing the conflict to file.\n        \"\"\"\n        torch.save(self.masks, path)\n\n\nclass CatMaskPadding(MaskFix):\n    def __init__(self, masks, model, dummy_input=None, traced=None):\n        \"\"\"\n        CatMaskPadding find the layers whose output tensor is passed\n        to the same cat operation. The cat operation concatnates the\n        masks of the input tensors as the output mask, so when some\n        of the input layers of the cat operation are not pruned, we still\n        need to pass the masks of these non-pruned layers(the mask are\n        all ones) to the cat operation to ensure the shape of the output\n        mask is right.\n\n        Parameters\n        ----------\n        masks : dict\n            a dict object that stores the masks\n        model : torch.nn.Module\n            model to fix the mask conflict\n        dummy_input : torch.Tensor\n            input example to trace the model\n        traced : torch._C.torch.jit.TopLevelTracedModule\n            the traced model of the target model, is this parameter is not None,\n            we donnot use the model and dummpy_input to get the trace graph.\n        \"\"\"\n        super(CatMaskPadding, self).__init__(masks, model, dummy_input, traced)\n\n    def fix_mask(self):\n        cat_padding_depen = CatPaddingDependency(\n            self.model, self.dummy_input, self.traced)\n        name_to_module = {}\n        for name, module in self.model.named_modules():\n            name_to_module[name] = module\n        depen = cat_padding_depen.dependency_sets\n        for layers in depen:\n            device = None\n            count = 0\n            for layer in layers:\n                if layer in self.masks:\n                    count += 1\n                    if device is None:\n                        device = self.masks[layer]['weight'].device\n            if count == 0:\n                # no layer is pruned\n                continue\n            elif count == len(layers):\n                # all the layers have been pruned\n                continue\n            # pad the mask for the non-pruned layers\n            for layer in layers:\n                if layer in self.masks:\n                    continue\n\n                module = name_to_module[layer]\n                w_shape = module.weight.data.size()\n                w_mask = torch.ones(w_shape).to(device)\n                b_mask = None\n                if hasattr(module, 'bias') and module.bias is not None:\n                    # module.bias may be None\n                    b_shape = module.bias.data.size()\n                    b_mask = torch.ones(b_shape).to(device)\n                self.masks[layer] = {'weight': w_mask, 'bias': b_mask}\n\n        return self.masks\n\n\nclass GroupMaskConflict(MaskFix):\n    def __init__(self, masks, model=None, dummy_input=None, traced=None):\n        \"\"\"\n        GroupMaskConflict fix the mask conflict between the layers that\n        has group dependecy with each other.\n\n        Parameters\n        ----------\n        masks : dict\n            a dict object that stores the masks\n        model : torch.nn.Module\n            model to fix the mask conflict\n        dummy_input : torch.Tensor\n            input example to trace the model\n        traced : torch._C.torch.jit.TopLevelTracedModule\n            the traced model of the target model, is this parameter is not None,\n            we donnot use the model and dummpy_input to get the trace graph.\n        \"\"\"\n        super(GroupMaskConflict, self).__init__(\n            masks, model, dummy_input, traced)\n\n    def fix_mask(self):\n        \"\"\"\n        Fix the mask conflict before the mask inference for the layers that\n        has group dependencies. This function should be called before the\n        mask inference of the 'speedup' module.\n        \"\"\"\n        group_depen = GroupDependency(\n            self.model, self.dummy_input, self.traced)\n        depens = group_depen.dependency\n        _logger.info(depens)\n        for layername in depens:\n            group = depens[layername]\n            if layername not in self.masks:\n                # this layer not pruned\n                continue\n            w_mask = self.masks[layername]['weight']\n            shape = w_mask.size()\n            count = np.prod(shape[1:])\n            all_ones = (w_mask.flatten(1).sum(-1) ==\n                        count).nonzero().squeeze(1).tolist()\n            all_zeros = (w_mask.flatten(1).sum(-1) ==\n                         0).nonzero().squeeze(1).tolist()\n            if len(all_ones) + len(all_zeros) < w_mask.size(0):\n                # In fine-grained pruning, skip this layer\n                _logger.info('Layers %s using fine-grained pruning', layername)\n                continue\n            assert shape[0] % group == 0\n            # Find the number of masked filter for each group (mini_masked).\n            # Because we have to keep the pruned filter can still\n            # be divided into the same number of groups, so we only can\n            # prune mini_masked filters for each group.\n            step = shape[0] / group\n            group_masked = []\n            for i in range(group):\n                _start = step * i\n                _end = step * (i+1)\n                _tmp_list = list(\n                    filter(lambda x: _start <= x and x < _end, all_zeros))\n                group_masked.append(_tmp_list)\n            mini_masked = min([len(x) for x in group_masked])\n            for gm in group_masked:\n                for i in range(mini_masked, len(gm)):\n                    # To keep the output channel number still being divisible to\n                    # groups, we set the masks of following filters to be zero.\n                    pos = gm[i]\n                    self.masks[layername]['weight'][pos] = torch.ones(\n                        shape[1:])\n                    if 'bias' in self.masks[layername] and self.masks[layername]['bias'] is not None:\n                        self.masks[layername]['bias'][pos] = 1\n        return self.masks\n\n\nclass ChannelMaskConflict(MaskFix):\n    def __init__(self, masks, model=None, dummy_input=None, traced=None):\n        \"\"\"\n        ChannelMaskConflict fix the mask conflict between the layers that\n        has channel dependecy with each other.\n\n        Parameters\n        ----------\n        masks : dict\n            a dict object that stores the masks\n        model : torch.nn.Module\n            model to fix the mask conflict\n        dummy_input : torch.Tensor\n            input example to trace the model\n        graph : torch._C.torch.jit.TopLevelTracedModule\n            the traced graph of the target model, is this parameter is not None,\n            we donnot use the model and dummpy_input to get the trace graph.\n        \"\"\"\n        super(ChannelMaskConflict, self).__init__(\n            masks, model, dummy_input, traced)\n        self.conv_prune_dim = detect_mask_prune_dim(masks, model)\n        _logger.info('detected conv prune dim: %s', self.conv_prune_dim)\n\n    def fix_mask(self):\n        \"\"\"\n        Fix the mask conflict before the mask inference for the layers that\n        has shape dependencies. This function should be called before the\n        mask inference of the 'speedup' module. Only structured pruning masks\n        are supported.\n        \"\"\"\n        if self.conv_prune_dim == 0:\n            channel_depen = ChannelDependency(\n                self.model, self.dummy_input, self.traced)\n        else:\n            channel_depen = InputChannelDependency(\n                self.model, self.dummy_input, self.traced)\n        depen_sets = channel_depen.dependency_sets\n        sum_idx = (1, 2, 3) if self.conv_prune_dim == 0 else (0, 2, 3)\n\n        (_tmp_name, _tmp_tensor) = list(self.masks.items())[0]\n        device = _tmp_tensor['weight'].device\n\n        for dset in depen_sets:\n            if len(dset) <= 1:\n                continue\n            # channel_masks is a list, each element is None or a vector, for example:\n            # [[0, 1, 1, 0, 0], [0, 0, 1, 1, 0], None], None means no channel\n            # is pruned.\n            channel_masks = []\n            fine_grained = False\n            for name in dset:\n                if name in self.masks:\n                    _, m = get_module_by_name(self.model, name)\n                    assert m is not None\n                    mask = self.masks[name]['weight']\n                    if type(m).__name__ == 'Conv2d':\n                        channel_mask = (mask.abs().sum(sum_idx) != 0).int()\n                        channel_masks.append(channel_mask)\n                        if (channel_mask.sum() * (mask.numel() / mask.shape[self.conv_prune_dim])).item() != (mask > 0).sum().item():\n                            fine_grained = True\n                    elif type(m).__name__ == 'Linear':\n                        channel_masks.append((mask.abs().sum(0) != 0).int())\n                    elif type(m).__name__ == 'BatchNorm2d':\n                        channel_masks.append(mask.int())\n                    elif type(m).__name__ == 'ConvTranspose2d':\n                        # convtranspose have difference memory layout, so that we need create\n                        # a tmp_sum_idx for conv_transpose\n                        tmp_sum_idx = (\n                            0, 2, 3) if self.conv_prune_dim == 0 else (1, 2, 3)\n                        channel_mask = (mask.abs().sum(tmp_sum_idx) != 0).int()\n                        channel_masks.append(channel_mask)\n                        if (channel_mask.sum() * (mask.numel() / mask.shape[1-self.conv_prune_dim])).item() != (mask > 0).sum().item():\n                            fine_grained = True\n                    else:\n                        raise RuntimeError('unsupported module type: {}'.format(type(m).__name__))\n                else:\n                    # no mask means not pruned, equivlent to full masks\n                    channel_masks.append(None)\n            if fine_grained:\n                _logger.info(\n                    'fine-grained mask detected, skip solving conflict for this set: %s', dset)\n                continue\n            if all(x is None for x in channel_masks):\n                continue\n            num_channels_list = [len(x)\n                                 for x in channel_masks if x is not None]\n            # number of channels in same set should be identical\n            assert len(set(num_channels_list)) == 1\n            num_channels = num_channels_list[0]\n\n            for i, dim_mask in enumerate(channel_masks):\n                if dim_mask is None:\n                    channel_masks[i] = torch.ones(num_channels).int().to(device)\n\n            # merge masks with 'or'\n            merged_channel_mask = channel_masks[0].clone()\n            for i in range(1, len(channel_masks)):\n                merged_channel_mask = (\n                    (merged_channel_mask + channel_masks[i]) != 0).int()\n\n            merged_index = torch.nonzero(merged_channel_mask, as_tuple=True)[0]\n\n            for name in dset:\n                if name not in self.masks:\n                    assert all(merged_channel_mask)\n                    continue\n                orig_mask = self.masks[name]['weight']\n                _, m = get_module_by_name(self.model, name)\n                new_mask = torch.zeros_like(orig_mask)\n                if type(m).__name__ == 'Conv2d':\n                    if self.conv_prune_dim == 0:\n                        new_mask[merged_index, :, :, :] = 1.\n                    else:\n                        new_mask[:, merged_index, :, :] = 1.\n                elif type(m).__name__ == 'Linear':\n                    new_mask[:, merged_index] = 1.\n                elif type(m).__name__ == 'BatchNorm2d':\n                    new_mask = merged_index.type_as(orig_mask)\n                else:\n                    raise RuntimeError('unsupported module type: {}'.format(type(m).__name__))\n\n                self.masks[name]['weight'] = new_mask\n                if 'bias' in self.masks[name] and self.masks[name]['bias'] is not None:\n                    if type(m).__name__ == 'Conv2d':\n                        assert self.conv_prune_dim == 0\n                    self.masks[name]['bias'] = merged_channel_mask.type_as(\n                        self.masks[name]['bias'])\n\n        return self.masks\n\n\ndef detect_mask_prune_dim(masks, model):\n    \"\"\"\n    Detect how the masks of convolutional layers are pruned.\n\n    Parameters\n    ----------\n    masks: dict\n        A dict object that stores the masks.\n    model: nn.Module\n        Model object which the mask can be applied on.\n\n    Returns:\n    -------\n        How the masks of convolutional layers are pruned, this depends on pruning algorithms, it should\n        return 1 for masks generated by AMCPruner, and returns 0 for masks generated by the rest\n        NNI builtin pruners.\n        0: filter pruning, prune filters of weights which causes channels of output feature maps are pruned.\n        1: channel pruning, prune kernels corresponding to each input channels which causes channels of\n           input feature maps are pruned.\n    \"\"\"\n    dim0_preserved, dim1_preserved = 0., 0.\n    dim0_num, dim1_num = 0., 0.\n    for module_name in masks:\n        _, m = get_module_by_name(model, module_name)\n        if m is None or type(m).__name__ != 'Conv2d':\n            continue\n\n        mask = masks[module_name]['weight'].clone()\n        assert (mask >= 0).sum() == mask.numel(), \\\n            \"mask values should be greater than or equal to 0.\"\n        mask = (mask > 0).int()\n        mask = mask.view(mask.shape[0], mask.shape[1], -1)\n        dim0_mask = (mask.sum((1, 2)) > 0).int()\n        dim1_mask = (mask.sum((0, 2)) > 0).int()\n        dim0_preserved += dim0_mask.sum().item()\n        dim1_preserved += dim1_mask.sum().item()\n        dim0_num += len(dim0_mask)\n        dim1_num += len(dim1_mask)\n\n    if dim0_num == 0 or dim1_num == 0:\n        _logger.warning('no multi-dimension masks found.')\n        return 0\n\n    dim0_sparsity, dim1_sparsity = 1. - dim0_preserved / \\\n        dim0_num, 1. - dim1_preserved / dim1_num\n    _logger.info('dim0 sparsity: %f', dim0_sparsity)\n    _logger.info('dim1 sparsity: %f', dim1_sparsity)\n\n    if dim0_sparsity == dim1_sparsity == 0.:\n        _logger.warning('nothing masked.')\n\n    if dim0_sparsity > 0 and dim1_sparsity > 0:\n        _logger.warning('both dim0 and dim1 masks found.')\n\n    return 0 if dim0_sparsity >= dim1_sparsity else 1\n"
  },
  {
    "path": "src/aup/compression/torch/utils/num_param_counter.py",
    "content": "def get_total_num_weights(model, op_types=['default']):\n        '''\n        calculate the total number of weights\n\n        Returns\n        -------\n        int\n            total weights of all the op considered\n        '''\n        num_weights = 0\n        for _, module in model.named_modules():\n            if module == model:\n                continue\n            if 'default' in op_types or type(module).__name__ in op_types:\n                num_weights += module.weight.data.numel()\n        return num_weights"
  },
  {
    "path": "src/aup/compression/torch/utils/sensitivity_analysis.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n# Modified work Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nimport copy\nimport csv\nimport logging\nfrom collections import OrderedDict\n\nimport numpy as np\nimport torch.nn as nn\n\nSUPPORTED_OP_NAME = ['Conv2d', 'Conv1d']\nSUPPORTED_OP_TYPE = [getattr(nn, name) for name in SUPPORTED_OP_NAME]\n\nlogger = logging.getLogger('Sensitivity_Analysis')\nlogger.setLevel(logging.INFO)\n\n\nclass SensitivityAnalysis:\n    def __init__(self, model, val_func, sparsities=None, prune_type='l1', early_stop_mode=None, early_stop_value=None):\n        \"\"\"\n        Perform sensitivity analysis for this model.\n        Parameters\n        ----------\n        model : torch.nn.Module\n            the model to perform sensitivity analysis\n        val_func : function\n            validation function for the model. Due to\n            different models may need different dataset/criterion\n            , therefore the user need to cover this part by themselves.\n            In the val_func, the model should be tested on the validation dateset,\n            and the validation accuracy/loss should be returned as the output of val_func.\n            There are no restrictions on the input parameters of the val_function.\n            User can use the val_args, val_kwargs parameters in analysis\n            to pass all the parameters that val_func needed.\n        sparsities : list\n            The sparsity list provided by users. This parameter is set when the user\n            only wants to test some specific sparsities. In the sparsity list, each element\n            is a sparsity value which means how much weight the pruner should prune. Take\n            [0.25, 0.5, 0.75] for an example, the SensitivityAnalysis will prune 25% 50% 75%\n            weights gradually for each layer.\n        prune_type : str\n            The pruner type used to prune the conv layers, default is 'l1',\n            and 'l2', 'fine-grained' is also supported.\n        early_stop_mode : str\n            If this flag is set, the sensitivity analysis\n            for a conv layer will early stop when the validation metric(\n            for example, accurracy/loss) has alreay meet the threshold. We\n            support four different early stop modes: minimize, maximize, dropped,\n            raised. The default value is None, which means the analysis won't stop\n            until all given sparsities are tested. This option should be used with\n            early_stop_value together.\n\n            minimize: The analysis stops when the validation metric return by the val_func\n            lower than early_stop_value.\n            maximize: The analysis stops when the validation metric return by the val_func\n            larger than early_stop_value.\n            dropped: The analysis stops when the validation metric has dropped by early_stop_value.\n            raised: The analysis stops when the validation metric has raised by early_stop_value.\n        early_stop_value : float\n            This value is used as the threshold for different earlystop modes.\n            This value is effective only when the early_stop_mode is set.\n\n        \"\"\"\n        from ..pruning.constants_pruner import PRUNER_DICT\n\n        self.model = model\n        self.val_func = val_func\n        self.target_layer = OrderedDict()\n        self.ori_state_dict = copy.deepcopy(self.model.state_dict())\n        self.target_layer = {}\n        self.sensitivities = {}\n        if sparsities is not None:\n            self.sparsities = sorted(sparsities)\n        else:\n            self.sparsities = np.arange(0.1, 1.0, 0.1)\n        self.sparsities = [np.round(x, 2) for x in self.sparsities]\n        self.Pruner = PRUNER_DICT[prune_type]\n        self.early_stop_mode = early_stop_mode\n        self.early_stop_value = early_stop_value\n        self.ori_metric = None  # original validation metric for the model\n        # already_pruned is for the iterative sensitivity analysis\n        # For example, sensitivity_pruner iteratively prune the target\n        # model according to the sensitivity. After each round of\n        # pruning, the sensitivity_pruner will test the new sensitivity\n        # for each layer\n        self.already_pruned = {}\n        self.model_parse()\n\n    @property\n    def layers_count(self):\n        return len(self.target_layer)\n\n    def model_parse(self):\n        for name, submodel in self.model.named_modules():\n            for op_type in SUPPORTED_OP_TYPE:\n                if isinstance(submodel, op_type):\n                    self.target_layer[name] = submodel\n                    self.already_pruned[name] = 0\n\n    def _need_to_stop(self, ori_metric, cur_metric):\n        \"\"\"\n        Judge if meet the stop conditon(early_stop, min_threshold,\n        max_threshold).\n        Parameters\n        ----------\n        ori_metric : float\n            original validation metric\n        cur_metric : float\n            current validation metric\n\n        Returns\n        -------\n        stop : bool\n            if stop the sensitivity analysis\n        \"\"\"\n        if self.early_stop_mode is None:\n            # early stop mode is not enable\n            return False\n        assert self.early_stop_value is not None\n        if self.early_stop_mode == 'minimize':\n            if cur_metric < self.early_stop_value:\n                return True\n        elif self.early_stop_mode == 'maximize':\n            if cur_metric > self.early_stop_value:\n                return True\n        elif self.early_stop_mode == 'dropped':\n            if cur_metric < ori_metric - self.early_stop_value:\n                return True\n        elif self.early_stop_mode == 'raised':\n            if cur_metric > ori_metric + self.early_stop_value:\n                return True\n        return False\n\n    def analysis(self, val_args=None, val_kwargs=None, specified_layers=None):\n        \"\"\"\n        This function analyze the sensitivity to pruning for\n        each conv layer in the target model.\n        If start and end are not set, we analyze all the conv\n        layers by default. Users can specify several layers to\n        analyze or parallelize the analysis process easily through\n        the start and end parameter.\n\n        Parameters\n        ----------\n        val_args : list\n            args for the val_function\n        val_kwargs : dict\n            kwargs for the val_funtion\n        specified_layers : list\n            list of layer names to analyze sensitivity.\n            If this variable is set, then only analyze\n            the conv layers that specified in the list.\n            User can also use this option to parallelize\n            the sensitivity analysis easily.\n        Returns\n        -------\n        sensitivities : dict\n            dict object that stores the trajectory of the\n            accuracy/loss when the prune ratio changes\n        \"\"\"\n        if val_args is None:\n            val_args = []\n        if val_kwargs is None:\n            val_kwargs = {}\n        # Get the original validation metric(accuracy/loss) before pruning\n        # Get the accuracy baseline before starting the analysis.\n        self.ori_metric = self.val_func(*val_args, **val_kwargs)\n        namelist = list(self.target_layer.keys())\n        if specified_layers is not None:\n            # only analyze several specified conv layers\n            namelist = list(filter(lambda x: x in specified_layers, namelist))\n        for name in namelist:\n            self.sensitivities[name] = {}\n            for sparsity in self.sparsities:\n                # here the sparsity is the relative sparsity of the\n                # the remained weights\n                # Calculate the actual prune ratio based on the already pruned ratio\n                real_sparsity = (\n                    1.0 - self.already_pruned[name]) * sparsity + self.already_pruned[name]\n                # TODO In current L1/L2 Filter Pruner, the 'op_types' is still necessary\n                # I think the L1/L2 Pruner should specify the op_types automaticlly\n                # according to the op_names\n                cfg = [{'sparsity': real_sparsity, 'op_names': [\n                    name], 'op_types': ['Conv2d']}]\n                pruner = self.Pruner(self.model, cfg)\n                pruner.compress()\n                val_metric = self.val_func(*val_args, **val_kwargs)\n                logger.info('Layer: %s Sparsity: %.2f Validation Metric: %.4f',\n                            name, real_sparsity, val_metric)\n\n                self.sensitivities[name][sparsity] = val_metric\n                pruner._unwrap_model()\n                del pruner\n                # check if the current metric meet the stop condition\n                if self._need_to_stop(self.ori_metric, val_metric):\n                    break\n\n            # reset the weights pruned by the pruner, because the\n            # input sparsities is sorted, so we donnot need to reset\n            # weight of the layer when the sparsity changes, instead,\n            # we only need reset the weight when the pruning layer changes.\n            self.model.load_state_dict(self.ori_state_dict)\n\n        return self.sensitivities\n\n    def export(self, filepath):\n        \"\"\"\n        Export the results of the sensitivity analysis\n        to a csv file. The firstline of the csv file describe the content\n        structure. The first line is constructed by 'layername' and sparsity\n        list. Each line below records the validation metric returned by val_func\n        when this layer is under different sparsities. Note that, due to the early_stop\n        option, some layers may not have the metrics under all sparsities.\n\n        layername, 0.25, 0.5, 0.75\n        conv1, 0.6, 0.55\n        conv2, 0.61, 0.57, 0.56\n\n        Parameters\n        ----------\n        filepath : str\n            Path of the output file\n        \"\"\"\n        str_sparsities = [str(x) for x in self.sparsities]\n        header = ['layername'] + str_sparsities\n        with open(filepath, 'w') as csvf:\n            csv_w = csv.writer(csvf)\n            csv_w.writerow(header)\n            for layername in self.sensitivities:\n                row = []\n                row.append(layername)\n                for sparsity in sorted(self.sensitivities[layername].keys()):\n                    row.append(self.sensitivities[layername][sparsity])\n                csv_w.writerow(row)\n\n    def update_already_pruned(self, layername, ratio):\n        \"\"\"\n        Set the already pruned ratio for the target layer.\n        \"\"\"\n        self.already_pruned[layername] = ratio\n\n    def load_state_dict(self, state_dict):\n        \"\"\"\n        Update the weight of the model\n        \"\"\"\n        self.ori_state_dict = copy.deepcopy(state_dict)\n        self.model.load_state_dict(self.ori_state_dict)\n"
  },
  {
    "path": "src/aup/compression/torch/utils/shape_dependency.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\nimport csv\nimport logging\n\n__all__ = ['ChannelDependency', 'GroupDependency',\n           'CatPaddingDependency', 'InputChannelDependency']\n\nCONV_TYPE = 'aten::_convolution'\nADD_TYPES = ['aten::add', 'aten::add_']\nCAT_TYPE = 'aten::cat'\nlogger = logging.getLogger('Shape_Dependency')\nRESHAPE_OPS = [CAT_TYPE, 'aten::view',\n               'aten::reshape', 'aten::flatten', 'aten::mean']\n\n\nclass Dependency:\n    def __init__(self, model=None, dummy_input=None, traced_model=None):\n        \"\"\"\n        Build the graph for the model.\n        \"\"\"\n        from aup.compression.torch._graph_utils import TorchModuleGraph\n\n        # check if the input is legal\n        if traced_model is None:\n            # user should provide model & dummy_input to trace\n            # the model or a already traced model\n            assert model is not None and dummy_input is not None\n        self.graph = TorchModuleGraph(model, dummy_input, traced_model)\n        self.dependency = dict()\n        self.build_dependency()\n\n    def build_dependency(self):\n        raise NotImplementedError\n\n    def export(self, filepath):\n        raise NotImplementedError\n\n\nclass ChannelDependency(Dependency):\n    def __init__(self, model=None, dummy_input=None, traced_model=None):\n        \"\"\"\n        This model analyze the channel dependencies between the conv\n        layers in a model.\n\n        Parameters\n        ----------\n        model : torch.nn.Module\n            The model to be analyzed.\n        data : torch.Tensor\n            The example input data to trace the network architecture.\n        traced_model : torch._C.Graph\n            if we alreay has the traced graph of the target model, we donnot\n            need to trace the model again.\n        \"\"\"\n        super(ChannelDependency, self).__init__(\n            model, dummy_input, traced_model)\n\n    def _get_parent_layers(self, node):\n        \"\"\"\n        Find the nearest father conv layers for the target node.\n\n        Parameters\n        ---------\n        node : torch._C.Node\n            target node.\n\n        Returns\n        -------\n        parent_layers: list\n            nearest father conv/linear layers for the target worknode.\n        \"\"\"\n        parent_layers = []\n        queue = []\n        queue.append(node)\n        while queue:\n            curnode = queue.pop(0)\n            if curnode.op_type == 'Conv2d' or curnode.op_type == 'Linear' or curnode.op_type == 'ConvTranspose2d':\n                # find the first met conv\n                parent_layers.append(curnode.name)\n                continue\n            parents = self.graph.find_predecessors(curnode.unique_name)\n            parents = [self.graph.name_to_node[name] for name in parents]\n            for parent in parents:\n                queue.append(parent)\n        return parent_layers\n\n    def build_dependency(self):\n        \"\"\"\n        Build the channel dependency for the conv layers\n        in the model.\n        \"\"\"\n        # unpack the tuple/list manually before analyze the\n        # channel dependency\n        self.graph.unpack_manually()\n        for node in self.graph.nodes_py.nodes_op:\n            parent_layers = []\n            # find the node that contains aten::add\n            # or aten::cat operations\n            if node.op_type in ADD_TYPES:\n                parent_layers = self._get_parent_layers(node)\n            elif node.op_type == CAT_TYPE:\n                # To determine if this cat operation will introduce channel\n                # dependency, we need the specific input parameters of the cat\n                # opertion. To get the input parameters of the cat opertion, we\n                # need to traverse all the cpp_nodes included by this NodePyGroup,\n                # because, TorchModuleGraph merges the important nodes and the adjacent\n                # unimportant nodes (nodes started with prim::attr, for example) into a\n                # NodepyGroup.\n                cat_dim = None\n                for cnode in node.node_cpps:\n                    if cnode.kind() == CAT_TYPE:\n                        cat_dim = list(cnode.inputs())[1].toIValue()\n                        break\n                if cat_dim != 1:\n                    parent_layers = self._get_parent_layers(node)\n            dependency_set = set(parent_layers)\n            # merge the dependencies\n            for parent in parent_layers:\n                if parent in self.dependency:\n                    dependency_set.update(self.dependency[parent])\n            # save the dependencies\n            for _node in dependency_set:\n                self.dependency[_node] = dependency_set\n\n    def export(self, filepath):\n        \"\"\"\n        export the channel dependencies as a csv file.\n        The layers at the same line have output channel\n        dependencies with each other. For example,\n        layer1.1.conv2, conv1, and layer1.0.conv2 have\n        output channel dependencies with each other, which\n        means the output channel(filters) numbers of these\n        three layers should be same with each other, otherwise\n        the model may has shape conflict.\n\n        Output example:\n        Dependency Set,Convolutional Layers\n        Set 1,layer1.1.conv2,layer1.0.conv2,conv1\n        Set 2,layer1.0.conv1\n        Set 3,layer1.1.conv1\n        \"\"\"\n        header = ['Dependency Set', 'Layers']\n        setid = 0\n        visited = set()\n        with open(filepath, 'w') as csvf:\n            csv_w = csv.writer(csvf, delimiter=',')\n            csv_w.writerow(header)\n            for node in self.graph.nodes_py.nodes_op:\n                if node.op_type != 'Conv2d' or node in visited:\n                    continue\n                setid += 1\n                row = ['Set %d' % setid]\n                if node.name not in self.dependency:\n                    visited.add(node)\n                    row.append(node.name)\n                else:\n                    for other in self.dependency[node.name]:\n                        visited.add(self.graph.name_to_node[other])\n                        row.append(other)\n                csv_w.writerow(row)\n\n    @property\n    def dependency_sets(self):\n        \"\"\"\n        Get the list of the dependency set.\n\n        Returns\n        -------\n        dependency_sets : list\n            list of the dependency sets. For example,\n            [set(['conv1', 'conv2']), set(['conv3', 'conv4'])]\n\n        \"\"\"\n        d_sets = []\n        visited = set()\n        for node in self.graph.nodes_py.nodes_op:\n            if node.op_type != 'Conv2d' or node in visited:\n                continue\n            tmp_set = set()\n            if node.name not in self.dependency:\n                visited.add(node)\n                tmp_set.add(node.name)\n            else:\n                for other in self.dependency[node.name]:\n                    visited.add(self.graph.name_to_node[other])\n                    tmp_set.add(other)\n            d_sets.append(tmp_set)\n        return d_sets\n\n\ndef reshape_break_channel_dependency(op_node):\n    \"\"\"\n    The reshape operations such as (reshape, view, flatten) may break\n    the channel dependency. We need to check the input parameters of\n    these reshape operations to check if this reshape node will break\n    the channel dependency. However, it's complicated to analyze the the input\n    parameters for each reshape function and infer if it will break the channel\n    dependency. So currently, we just check if the input channel and the output\n    channel is the same, if so, then we can say the original reshape function\n    doesn't want to change the number of the channels, which means the channel\n    dependency is not broken. In contrast, the original reshap operation wants\n    to change the number of channels, so it breaks the channel dependency.\n\n    Parameters\n    ----------\n    opnode: NodePyOP\n        A Op node of the graph.\n    Returns\n    -------\n    bool\n        If this operation will break the channel dependency.\n    \"\"\"\n    in_shape = op_node.auxiliary['in_shape']\n    out_shape = op_node.auxiliary['out_shape']\n    in_channel = in_shape[1]\n    out_channel = out_shape[1]\n    return in_channel != out_channel\n\n\nclass InputChannelDependency(ChannelDependency):\n    \"\"\"\n    Some pruners may prune the input channel of the convolutional\n    layers. While pruning the input channel of the convolutional layers,\n    the layers that share the same input tensor should prune the same\n    channels, and we say these layers that share the same input tensor/channel\n    has the input channel dependency. If we only prune the input channel of one\n    layer in the dependency set, there will be a shape conflict for the other\n    layers in the same dependency set, which may trigger a runtime error.\n    Here we judge whether the application will truncate the dependency by analyzing\n    whether the number of channels before and after the operation has changed.\n    If not, the input channel dependency will be passed to the following nodes.\n    \"\"\"\n\n    def __init__(self, model, dummy_input=None, traced_model=None):\n        \"\"\"\n        This model analyze the input channel dependencies between the conv\n        layers in a model.\n\n        Parameters\n        ----------\n        model : torch.nn.Module\n            The model to be analyzed.\n        data : torch.Tensor\n            The example input data to trace the network architecture.\n        traced_model : torch._C.Graph\n            if we alreay has the traced graph of the target model, we donnot\n            need to trace the model again.\n        \"\"\"\n        super(InputChannelDependency, self).__init__(\n            model, dummy_input, traced_model)\n\n    def _get_following_convs(self, tensor):\n        queue = []\n        key_layers = []\n        queue.extend(self.graph.input_to_node[tensor])\n        while queue:\n            curnode = queue.pop(0)\n            if curnode.op_type == 'Conv2d' or curnode.op_type == 'Linear' or curnode.op_type == 'ConvTranspose2d':\n                # find the first met conv\n                key_layers.append(curnode.name)\n                continue\n            elif curnode.op_type in RESHAPE_OPS:\n                # check if the reshape operation will break the channel dependency\n                if reshape_break_channel_dependency(curnode):\n                    # reshape operations also breaks the dependency relationship\n                    continue\n            successors = self.graph.find_successors(curnode.unique_name)\n            successors = [self.graph.name_to_node[name] for name in successors]\n            for layer in successors:\n                queue.append(layer)\n        return key_layers\n\n    def build_dependency(self):\n        \"\"\"\n        Build the input channel dependencies.\n        The `InputChannelDependency` indicates the layers that have\n        dependencies when pruning the input channel of the conv layers.\n        In contrast, `ChannelDependency` indicates the dependent layers\n        when pruning the output channles of conv layers (for example, L1FilterPruner).\n        \"\"\"\n        # unpack the tuple or list manually\n        self.graph.unpack_manually()\n        for tensor in self.graph.input_to_node:\n            # start from this tensor, find all the conv layers that\n            # take this tensor as input. Similar to the `ChannelDependency`\n            # the conv layer will truncate the dependencies\n            layers = self._get_following_convs(tensor)\n            dependency_set = set(layers)\n            for layer in layers:\n                if layer in self.dependency:\n                    dependency_set.update(self.dependency[layer])\n            for layer in dependency_set:\n                self.dependency[layer] = dependency_set\n\n\nclass CatPaddingDependency(ChannelDependency):\n    def __init__(self, model=None, dummy_input=None, traced_model=None):\n        super(CatPaddingDependency, self).__init__(\n            model, dummy_input, traced_model)\n\n    def build_dependency(self):\n        \"\"\"\n        Build the cat padding dependencies.\n        If the output features of several layers are stitched together\n        by cat operation, then these layers have cat padding dependencies.\n        This is because when inferring the cat mask, we need all the input\n        masks for the cat operation. At this time we need to know the source\n        of all input vectors of a cat operation.\n        \"\"\"\n        for node in self.graph.nodes_py.nodes_op:\n            parent_layers = []\n            if node.op_type == CAT_TYPE:\n                parent_layers = self._get_parent_layers(node)\n                dependency_set = set(parent_layers)\n                # merge the dependencies\n                for parent in parent_layers:\n                    if parent in self.dependency:\n                        dependency_set.update(self.dependency[parent])\n                # save the dependencies\n                for _node in dependency_set:\n                    self.dependency[_node] = dependency_set\n\n    @property\n    def dependency_sets(self):\n        d_sets = []\n        visited = set()\n        for nodename in self.dependency:\n            if nodename in visited:\n                continue\n            d_sets.append(self.dependency[nodename])\n        return d_sets\n\n    def export(self, filepath):\n        \"\"\"\n        Export the dependencies into a file.\n        In the output file, each line contains a set of layers\n        whose output features are stitched together by the cat\n        operation.\n\n        output example:\n        Dependency Set, Layers\n        set1, Conv1, Conv2\n        set2, Conv3, Conv4\n        \"\"\"\n        header = ['Dependency Set', 'Layers']\n        setid = 0\n        with open(filepath, 'w') as csvf:\n            csv_w = csv.writer(csvf, delimiter=',')\n            csv_w.writerow(header)\n            for layers in self.dependency_sets:\n                setid += 1\n                row = ['Set %d' % setid]\n                row.extend(list(layers))\n                csv_w.writerow(row)\n\n\nclass GroupDependency(Dependency):\n    def __init__(self, model=None, dummy_input=None, traced_model=None):\n        \"\"\"\n        This model analyze the group dependencis between the conv\n        layers in a model.\n\n        Parameters\n        ----------\n        model : torch.nn.Module\n            The model to be analyzed.\n        data : torch.Tensor\n            The example input data to trace the network architecture.\n        traced_model : torch._C.Graph\n            if we alreay has the traced graph of the target model, we donnot\n            need to trace the model again.\n        \"\"\"\n        super(GroupDependency, self).__init__(model, dummy_input, traced_model)\n\n    def _get_parent_convs(self, node):\n        \"\"\"\n        Find the nearest father conv layers for the target node.\n\n        Parameters\n        ---------\n        node : torch._C.Node\n            target node.\n\n        Returns\n        -------\n        parent_layers : list\n            nearest father conv layers for the target node. Due to the group\n            dependency only exists between the conv layers, so we only find\n            the parent conv layers.\n        \"\"\"\n        parent_layers = []\n        # the input node is a Conv node\n        predeessors = self.graph.find_predecessors(node.unique_name)\n        predeessors = [self.graph.name_to_node[x] for x in predeessors]\n        queue = predeessors\n        while queue:\n            curnode = queue.pop(0)\n            if curnode.op_type == 'Conv2d' or curnode.op_type == 'ConvTranspose2d':\n                # find the first met conv\n                parent_layers.append(curnode.name)\n                continue\n            parents = self.graph.find_predecessors(curnode.unique_name)\n            parents = [self.graph.name_to_node[name] for name in parents]\n            for parent in parents:\n                queue.append(parent)\n        return parent_layers\n\n    def _get_conv_groups(self, node_group):\n        \"\"\"\n        Get the number of groups for a convolutional layer.\n\n        Parameters\n        ----------\n        node_group : NodePyGroup\n            target node.\n\n        Returns\n        -------\n        group : int\n            the number of the groups of the target conv layer.\n        \"\"\"\n        cpp_conv = list(filter(lambda x: x.kind() ==\n                               CONV_TYPE, node_group.node_cpps))\n        assert len(cpp_conv) == 1\n        cpp_conv = cpp_conv[0]\n        inputs = list(cpp_conv.inputs())\n        # get the number of the group from the input parameters\n        group = inputs[8].toIValue()\n        return group\n\n    def build_dependency(self):\n        \"\"\"\n        Build the channel dependency for the conv layers\n        in the model. This function return the group number\n        of each conv layers. Note that, here, the group count\n        of conv layers may be larger than their originl groups.\n        This is because that the input channel will also be grouped\n        for the group conv layers. To make this clear, assume we\n        have two group conv layers: conv1(group=2), conv2(group=4).\n        conv2 takes the output features of conv1 as input.\n        Then we have to the filters of conv1 can still be\n        divided into 4 groups after filter pruning, because\n        the input channels of conv2 shoule be divided into\n        4 groups.\n\n        Returns\n        -------\n        self.dependency : dict\n            key: the name of conv layers, value: the minimum value that the number of\n            filters should be divisible to.\n        \"\"\"\n        for node in self.graph.nodes_py.nodes_op:\n            if node.op_type == 'Conv2d' or node.op_type == 'ConvTranspose2d':\n                group = self._get_conv_groups(node)\n\n                if node.name in self.dependency:\n                    # the conv layer whose group is larger than 1 will require that\n                    # it's number of output channel to be divisible by the number of group.\n                    self.dependency[node.name] = max(\n                        self.dependency[node.name], group)\n                else:\n                    self.dependency[node.name] = group\n                if group > 1:\n                    # for the conv layer whose group is larger than 1, it will require the number\n                    # of output channels of their parent conv layer to be divisible by group.\n                    parent_convs = self._get_parent_convs(node)\n                    for parent in parent_convs:\n                        if parent in self.dependency:\n                            self.dependency[parent] = max(\n                                self.dependency[parent], group)\n                        else:\n                            self.dependency[parent] = group\n        return self.dependency\n\n    def export(self, filepath):\n        \"\"\"\n        export the group dependency to a csv file.\n        Each line describes a convolution layer, the\n        first part of each line is the Pytorch module\n        name of the conv layer. The second part of each\n        line is the group count of the filters in this layer.\n        Note that, the group count may be larger than this\n        layers original group number.\n\n        output example:\n        Conv layer, Groups\n        Conv1, 1\n        Conv2, 2\n        Conv3, 4\n        \"\"\"\n        header = ['Conv Layer Name', 'Group']\n        with open(filepath, 'w') as csvf:\n            csv_w = csv.writer(csvf, delimiter=',')\n            csv_w.writerow(header)\n            for name in self.dependency:\n                group = self.dependency[name]\n                csv_w.writerow([name, group])\n\n    @property\n    def dependency_sets(self):\n        return self.dependency\n"
  },
  {
    "path": "src/aup/compression/torch/utils/utils.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\ndef get_module_by_name(model, module_name):\n    \"\"\"\n    Get a module specified by its module name\n\n    Parameters\n    ----------\n    model : pytorch model\n        the pytorch model from which to get its module\n    module_name : str\n        the name of the required module\n\n    Returns\n    -------\n    module, module\n        the parent module of the required module, the required module\n    \"\"\"\n    name_list = module_name.split(\".\")\n    for name in name_list[:-1]:\n        if hasattr(model, name):\n            model = getattr(model, name)\n        else:\n            return None, None\n    if hasattr(model, name_list[-1]):\n        leaf_module = getattr(model, name_list[-1])\n        return model, leaf_module\n    else:\n        return None, None\n"
  },
  {
    "path": "src/aup/compression/utils.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\nimport json\nimport logging\nimport signal\nimport sys\nimport _thread\nimport threading\nimport time\n\nfrom ..EE.Resource import get_resource_manager\nfrom ..aup import BasicConfig\nfrom ..EE.Job import Job\nfrom ..utils import get_default_username, get_default_connector, check_missing_key\n\n\nSERIALIZATION_SEPARATOR = \".\"\nlogger = logging.getLogger(__name__)\nhyperparams_params = [\"range\", \"type\", \"interval\", \"n\"]\n\n\ndef verify_compression_config(config):\n    \"\"\"\n    verify the experiment configuration is fulfilled for experiment\n\n    :param config: experiment configuration\n    :type config: dict\n    :return: config if verified\n    :rtype: dict\n    \"\"\"\n    check_missing_key(config, \"name\", \"Missing required value for 'script'.\", log=logger)\n    check_missing_key(config, \"script\", \"Missing required value for 'script'.\", log=logger)\n    check_missing_key(config, \"resource\", \"Missing required value for 'resource'\", log=logger)\n    check_missing_key(config, \"compression\", \"Missing required map 'compression'\", log=logger)\n    if \"compression_framework\" not in config[\"compression\"]:\n        check_missing_key(config[\"compression\"], \"framework\", \"Missing required value for 'compression.framework'\", log=logger)\n    if \"compression_type\" not in config[\"compression\"]:\n        check_missing_key(config[\"compression\"], \"type\", \"Missing required value for 'compression.type'\", log=logger)\n    check_missing_key(config[\"compression\"], \"compressor\", \"Missing required value for 'compression.compressor'\", log=logger)\n    check_missing_key(config[\"compression\"], \"config_list\", \"Missing required value for 'compression.config_list'\", log=logger)\n    return config\n\n\ndef run_non_automatic_experiment(exp_config, aup_folder, user=None, eid=None, start=True):\n    \"\"\"\n    Non-automatic experiment pipeline, separated into a different function for unit test purposes\n    :param exp_config: experiment configuration\n    :type exp_config: dict\n    :param aup_folder: the folder containing the .aup files\n    :type aup_folder: str\n    :param user: the username\n    :type user: str\n    :param eid: eid of the experiment, if re-running\n    :type eid: int\n    :param start: whether or not to start the experiment immediately\n    :type start: bool\n    \"\"\"\n    user = get_default_username(user)\n    create_only = False\n\n    exp_config[\"parameter_config\"] = []\n    connector = get_default_connector(auppath=aup_folder, log=logger)\n    if \"resource_args\" in exp_config:\n        resource_manager = get_resource_manager(exp_config[\"resource\"], connector,\n                                                n_parallel=1, auppath=aup_folder,\n                                                maximize=True,\n                                                **exp_config[\"resource_args\"],\n                                                workingdir=exp_config['workingdir'],\n                                                script=exp_config['script'], one_shot=True)\n    else:\n        resource_manager = get_resource_manager(exp_config[\"resource\"], connector,\n                                                n_parallel=1, auppath=aup_folder,\n                                                maximize=True,\n                                                workingdir=exp_config['workingdir'],\n                                                script=exp_config['script'], one_shot=True)\n\n    if eid is None:\n        if start is True:\n            eid = resource_manager.connector.start_experiment(user, exp_config[\"name\"], json.dumps(exp_config))\n        else:\n            eid = resource_manager.connector.create_experiment(user, exp_config[\"name\"], json.dumps(exp_config))\n            create_only = True\n    else:\n        resource_manager.connector.start_experiment_by_eid(eid)\n    resource_manager.eid = eid\n    resource_manager.save_model = False\n\n    if \"runtime_args\" in exp_config:\n        runtime_args = exp_config['runtime_args']\n    else:\n        runtime_args = {}\n    logger.info(\"Experiment %d is created\" % eid)\n    logger.debug(\"Experiment config is %s\" % json.dumps(exp_config))\n\n    if create_only:\n        connector.close()\n        return eid, None\n\n    def _check_status():\n        if connector is None or eid is None:\n            logger.warning(\"Could not start thread for checking external experiment stopping requests.\")\n            return\n        while True:\n            try:\n                if connector.is_closed():\n                    logger.debug(\"Closing down clean-up thread.\")\n                    return\n                status = connector.maybe_get_experiment_status(eid)\n                if status == \"REQUEST_STOP\":\n                    return _thread.interrupt_main()\n            except Exception as ex:\n                logger.critical(\"Error in clean-up thread: {}\".format(ex))\n            finally:\n                time.sleep(5)\n    request_stop_thr = threading.Thread(target=_check_status)\n    request_stop_thr.start()\n\n    rid = resource_manager.get_available(user, exp_config[\"resource\"])\n    if rid is None:\n        logger.warning(\"Not enough resources to run compression\")\n        return eid\n\n    finished = False\n    def update(score, jid):\n        nonlocal finished\n        if score == \"ERROR\":\n            logger.fatal(\"Compression job {} failed\".format(job.jid))\n            resource_manager.finish_job(job.jid, None, \"FAILED\")\n        else:\n            logger.critical(\"Compression job {} finished successfully with result {}\".format(job.jid, score))\n            resource_manager.finish_job(job.jid, score, \"FINISHED\")\n        finished = True\n\n    logger.info(\"# Running one-time compression experiment {}\".format(eid))\n    job_config = BasicConfig(**exp_config[\"compression\"])\n    job_config[\"save_model\"] = True\n    job_config[\"folder_name\"] = \"models_{}\".format(eid)\n    job = Job(exp_config[\"script\"], job_config, exp_config[\"workingdir\"], retries=0)\n    \n    def _suspend(sig, frame):\n        logger.fatal(\"Compression ended at user's request\")\n        resource_manager.suspend()\n        resource_manager.finish_job(job.jid, None)\n        resource_manager.finish(status=\"STOPPED\")\n        connector.close()\n        if request_stop_thr is not None:\n            request_stop_thr.join()\n        sys.exit(1)\n    signal.signal(signal.SIGINT, lambda x, y: _suspend(x, y))\n\n    def _force_refresh(sig, frame):\n        # currently useful for async resource manager timers\n        resource_manager.refresh()\n    signal.signal(signal.SIGUSR1, lambda x, y: _force_refresh(x, y))\n    \n    job.jid = resource_manager.connector.job_started(eid, rid, job_config)\n    resource_manager.run_job(job, rid, exp_config, update, **runtime_args)\n\n    def _finish_callback():\n        nonlocal finished\n        while not finished:\n            time.sleep(1)\n        resource_manager.finish(status=\"FINISHED\")\n        connector.close()\n        if request_stop_thr is not None:\n            request_stop_thr.join()\n\n    return eid, _finish_callback\n\n\ndef _extract_compression_hyperparameters(params):\n    \"\"\"\n    Helper function used to extract a list of compression hyperparameters from \n    config_list mappings.\n    This function searches recursively in compression config_list entries for keywords \n    mapped to dictionaries containing a \"range\" and \"type\", and resolves for them a \n    serialized name based on the depth at which they are found.\n\n    :param params: config_list element\n    :type params: dict\n    :return: list of hyperparameters as dictionaries containing \"name\", \"range\" and \n    \"type\"\n    :rtype: list\n    \"\"\"\n    args = []\n    for key, val in params.items():\n        if isinstance(val, dict):\n            if \"type\" in val:\n                args += [{\n                    \"name\": key,\n                    **{key: val[key] for key in hyperparams_params if key in val},\n                }]\n            else:\n                ret = _extract_compression_hyperparameters(val)\n                ret = [{\n                        **val,\n                        \"name\": \"{}{}{}\".format(key, SERIALIZATION_SEPARATOR, val[\"name\"]),\n                    } for val in ret\n                ]\n                args += ret\n    return args\n\n\ndef translate_compression_config(config):\n    \"\"\"\n    Helper function used to parse the experiment config for automatic compression experiments\n    into the HPO experiment config format. \n\n    :param config: experiment config\n    :type config: dict\n    :return: modified experiment config\n    :rtype: dict\n    \"\"\"\n    config = config.copy()\n\n    # Expand op names (resolve \"expand_op_names\" keyword in entries)\n    new_config_list = []\n    for param in config[\"compression\"][\"config_list\"]:\n        if (\"expand_op_names\" not in param or param[\"expand_op_names\"]) and \\\n           \"op_names\" in param:\n            for op_name in param[\"op_names\"]:\n                # For each op_name in \"op_names\", create a separate config_list entry\n                # with only that op_name and otherwise all other key-value pairs (e.g. \n                # \"op_types\", \"sparsity\", \"quantize_type\" etc.)\n                new_config_list += [{\n                        **{\"op_names\": [op_name]}, \n                        **{key: val for key, val in param.items() \n                            if key not in (\"expand_op_names\", \"op_names\")}\n                    }]\n        else:\n            if (\"expand_op_names\" not in param or param[\"expand_op_names\"]) and \\\n               \"op_names\" not in param:\n                logger.debug(\"No op_names param supplied in config_list for expand_op_names, \" +\n                             \"can not supply individual parameters to each layer.\")\n            new_config_list += [{\n                key: val for key, val in param.items()\n                if key not in (\"expand_op_names\",)\n            }]\n    config[\"compression\"][\"config_list\"] = new_config_list\n\n    # Resolving compression hyperparams to previous parameter_config format\n    # The following code block adds a serialization name to all hyperparameters found in config_list\n    compression_params = [] # auxiliary list of serialized compression hyperparams names (strings)\n    config[\"parameter_config\"] = []\n    for idx, param in enumerate(config[\"compression\"][\"config_list\"]):\n        config[\"parameter_config\"] += [{\n                **param,\n                \"name\": \"{}{}{}\".format(idx, SERIALIZATION_SEPARATOR, param[\"name\"]),\n            } for param in _extract_compression_hyperparameters(param)\n        ]\n    compression_params += [param[\"name\"] for param in config[\"parameter_config\"]]\n    \n    config = BasicConfig(**config)\n    return config, compression_params\n\n\ndef deserialize_compression_proposal(config, compression_params, proposal):\n    \"\"\"\n    Helper function used to deserialize a proposal meant for compression from its usual\n    HPO format into a NNI-compatible config_list format.\n    The output of this function is normally passed to the user script, where it is loaded\n    using BasicConfig.\n\n    :param config: full experiment config\n    :type config: dict\n    :param compression_params: list of names of compression params to filter proposal by\n    :type compression_params: list\n    :param proposal: proposal generated by an auptimizer proposer\n    :type proposal: dict\n    :return: deserialized job configuration\n    :rtype: dict\n    \"\"\"\n    new_proposal = config[\"compression\"].copy()\n    for param in compression_params:\n        full_param = param.split(SERIALIZATION_SEPARATOR)\n        index = int(full_param[0]) # the first string until . is always the config_list index\n        original_key = full_param[-1] # the last string is always the original key of the config_list entry\n        cdict = new_proposal[\"config_list\"][index]\n        # Parse the config_list entry recursively until arriving at max depth\n        for part in full_param[1:-1]:\n            cdict = cdict[part]\n        cdict[original_key] = proposal[param] # assign the actual proposed value for the param, instead of the hyperparameter \"range\" and \"type\" format\n    new_proposal.update({key: val for key, val in proposal.items() if key not in compression_params})\n    return new_proposal\n\n\ndef adjust_compression_config(config):\n    \"\"\"\n    Adjust certain config parameters\n    :param config: experiment configuration\n    :type config: dict\n    :return: config adjusted\n    :rtype: dict\n    \"\"\"\n    # In order to avoid possible conflicts (\"framework\", \"type\" etc. are too ubiquitous parameter names)\n    for old_name, new_name in [\n        (\"type\", \"compression_type\"), \n        (\"framework\", \"compression_framework\")\n    ]:\n        if old_name in config:\n            config[new_name] = config[old_name]\n            del config[old_name]\n    return config\n"
  },
  {
    "path": "src/aup/convert.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nConvert python code for Auptimizer automatically\n================================================\n\nSee :doc:`experiment` for how to convert a job to a **Auptimizer** Experiment.\n\nBasic Usage\n-----------\n\n::\n\n    python convert.py origin.py experiment.json demo_func\n\nAdditional arguments\n--------------------\n\n.. program-output:: python -m aup.convert -h\n\nExample\n-------\n\nSee `Examples/demo`:\n\n\nAPIs\n----\n\n\"\"\"\nimport json\nimport logging\nimport os\nimport stat\n\nimport click\n\n\ndef get_param(experiment_file):\n    \"\"\"Parse experiment file to retrieve hyperparameter names\n\n    :param experiment_file: JSON file of the experiment\n    :return: list of variable names\n    :rtype: [String]\n    \"\"\"\n    with open(experiment_file) as f:\n        j = json.load(f)\n    try:\n        return [i[\"name\"] for i in j[\"parameter_config\"]]\n    except KeyError as e:\n        if \"parameter_config\" not in j:\n            logging.fatal(\"parameter_config not in the experiment config\")\n        else:\n            logging.fatal(\"name not in parameter_config\")\n        raise e\n\n\ndef get_output_name(experiment_file):\n    \"\"\"Retrieves the Python script to be executed from the experiment json file\"\"\"\n    with open(experiment_file) as f:\n        j = json.load(f)\n    try:\n        return j[\"script\"]\n    except KeyError as e:\n        logging.fatal(\"script need to be defined in experiment json\")\n        raise e\n\n\ndef add_shenbang(script):\n    \"\"\"\n    Makes the Python script executable.\n    \"\"\"\n    if script.splitlines()[0][:2] != \"#!\":\n        #\n        if os.name == \"posix\":\n            return \"#!/usr/bin/env python\\n\" + script\n        else:\n            logging.critical('Be cautious, add #!\"C:\\\\Python33\\\\python.exe\", make sure it executable on Windows')\n            return '#!\"C:\\\\Python33\\\\python.exe\\n' + script\n    else:\n        return script\n\n\ndef add_main(script):\n    \"\"\"\n    Adds a main function to the executable Python file.\n    \"\"\"\n    if \"__main__\" in script:\n        logging.critical(\"__main__ is already defined in the script.  Make sure no duplicated __main__ blocks in output.\")\n    return script + \"\"\"\\nif __name__ == \"__main__\":\n    import sys\n    from aup import BasicConfig, print_result\n    if len(sys.argv) != 2:\n        print(\"config file required\")\n        exit(1)\n    config = BasicConfig().load(sys.argv[1])\n    aup_wrapper(config)\\n\"\"\"\n\n\ndef add_func(script, func_name, variables):\n    \"\"\"\n    Adds wrapper function to the python script.\n    \"\"\"\n    arguments = \",\".join([\"{0}=config['{0}']\".format(i) for i in variables])\n    wrapper_script = \"\"\"\\ndef aup_wrapper(config):\n    res = {0}({1}) \n    print_result(res)\\n\"\"\".format(func_name, arguments)\n    return script + wrapper_script\n    # TODO-handle exception: func_name does not have any return value (need some ast parsing)\n    # TODO-\"config\" is not used/referenced in \"aup_wrapper\" function\n\n\n@click.command(name=\"auto convert script for Auptimizer\",\n               context_settings=dict(help_option_names=['-h', '--help']))\n@click.argument(\"script\", type=click.Path(exists=True))\n@click.argument(\"exp_json\", type=click.Path(exists=True))\n@click.argument(\"func_name\", type=click.STRING)\n@click.option(\"-o\", \"--output\", type=click.STRING, default=None,\n              help=\"output file name\")\ndef main(script, exp_json, func_name, output):\n    \"\"\"Convert script for Auptimizer\n    \\b\\n\n    Copyright (C) 2018  LG Electronics Inc.\n    \\b\\n\n    GPL-3.0 License. This program comes with ABSOLUTELY NO WARRANTY;\n    \\b\\n\n    Arguments:\n        script {str} -- Script name to train an ML model and return result\n        exp_json {str} -- JSON file name contrains experiment configuration (e.g. hyperparameter)\n        func_name {str} -- Name of the main function in the script for the training\n\n    \\b\\n\n    Raises:\n        Exception: If the script is not self-executable.\n    \"\"\"\n    variable_names = get_param(exp_json)\n    script = open(script).read()\n    script = add_shenbang(script)\n    script = add_func(script, func_name, variable_names)\n    script = add_main(script)\n    if output is None:\n        output = get_output_name(exp_json)\n    with open(output, 'w') as f:\n        f.write(script)\n    if os.name == \"posix\":\n        os.chmod(output, stat.S_IRWXU)\n\n    else:\n        logging.critical(\"Non-*nix OS is not fully supported, change permission by yourself.\")\n\n    if not os.access(output, os.X_OK):\n        raise Exception(\"Failed at the last step - script %s is not executable\" % output)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "src/aup/dashboard/README.md",
    "content": "# Auptimizer Dashboard\n\n## Launching the dashboard together with an experiment\n\nThe dashboard can be launched with ``aup`` using `--launch-dashboard`\n\n`python -m aup Examples/2dfunc_diff_res/exp_cpu.json --launch_dashboard`\n\nYou can specify the port for the dashboard with `--dashboard-port`, otherwise,\nthe first available port will be used and printed to the console when running\nthe experiment.\n\n## Seeing HTTP requests from the frontend\n\nThe HTTP requests are all saved in `./src/aup/dashboard/frontend/febuild/auptimizer-dashboard/dashboard_logs`\n"
  },
  {
    "path": "src/aup/dashboard/__init__.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\""
  },
  {
    "path": "src/aup/dashboard/dashboard.py",
    "content": "\"\"\"\nDashboard entry point\n============================================\n\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\n\nimport os\nimport sys\nimport shutil\nimport logging\nimport argparse\nimport subprocess\nimport threading\nimport requests\nimport re\nimport cgi\nimport json\n\nimport aup.RestAPI.server as be_server\nfrom http.server import SimpleHTTPRequestHandler, HTTPServer\nfrom ..utils import get_available_port\n\nSUCCESS = 0\nERROR = 1\nglobal BACKEND_PORT\nFE_BUILD_DIR = 'frontend/febuild/auptimizer-dashboard'\n\nLOGGER = logging.getLogger(\"dashboard\")\n\nclass ProxyHTTPRequestHandler(SimpleHTTPRequestHandler):\n    global BACKEND_PORT\n\n    def log_message(self, format, *args):\n        dir_path = os.environ['PWD']\n        log_file_name = \"dashboard_logs\"\n        path = os.path.join(dir_path, log_file_name)\n        append_write = 'a'\n\n        if not os.path.exists(path):\n            append_write = 'w'\n        \n        with open (path, append_write) as f:\n            f.write(\"%s - - [%s] %s\\n\" %\n                         (self.address_string(),\n                          self.log_date_time_string(),\n                          format%args))\n\n    def do_DELETE(self):\n        rv = re.search('/api/(.*)$', self.path)\n        if rv != None:\n            url = 'http://127.0.0.1:{}{}'.format(str(BACKEND_PORT), self.path)\n\n            resp = requests.delete(url)\n\n            self.send_response(resp.status_code)\n            self.send_resp_headers(resp)\n            self.wfile.write(resp.content)\n            return\n\n        super().do_DELETE()\n        return\n\n    def do_GET(self):\n        rv = re.search('/api/(.*)$', self.path)\n        if rv != None:\n            url = 'http://127.0.0.1:{}{}'.format(str(BACKEND_PORT), self.path)\n\n            resp = requests.get(url)\n\n            self.send_response(resp.status_code)\n            self.send_resp_headers(resp)\n            self.wfile.write(resp.content)\n            return\n\n        super().do_GET()\n        return\n\n    def do_POST(self):\n        rv = re.search('/api/(.*)$', self.path)\n        if rv != None:\n            url = 'http://127.0.0.1:{}{}'.format(str(BACKEND_PORT), self.path)\n\n            content_type = self.headers.get('content-type')\n            body = None\n\n            if content_type is not None:\n                ctype, pdict = cgi.parse_header(content_type)\n\n                # refuse to receive non-json content\n                if ctype != 'application/json':\n                    self.send_response(400)\n                    self.end_headers()\n                    return\n\n                # read the message and convert it into a python dictionary\n                length = int(self.headers.get('content-length'))\n                encoded_msg = self.rfile.read(length)\n                body = json.loads(encoded_msg.decode(sys.stdin.encoding if sys.stdin.encoding is not None else 'UTF-8'))\n\n            resp = requests.post(url, json=body)\n\n            self.send_response(resp.status_code)\n            self.send_resp_headers(resp)\n            self.wfile.write(resp.content)\n            return\n\n        return\n\n    def send_resp_headers(self, resp):\n        respheaders = resp.headers\n        for key in respheaders:\n            if key not in ['Content-Encoding', 'Transfer-Encoding', 'content-encoding', 'transfer-encoding', 'content-length', 'Content-Length']:\n                self.send_header(key, respheaders[key])\n        self.send_header('Content-Length', len(resp.content))\n        self.end_headers()\n\ndef start_fe_server(PORT):\n    server_address = ('', PORT)\n    httpd = HTTPServer(server_address, ProxyHTTPRequestHandler)\n\n    httpd.serve_forever()\n\ndef start_servers(path, port, frontend):\n    global BACKEND_PORT\n\n    import pathlib\n    pa = pathlib.Path(__file__).resolve().parent\n\n    if (path is not None) and (not os.path.exists(path)):\n        LOGGER.error('{} does not exist!'.format(path))\n        return ERROR\n\n    LOGGER.debug('Backend started on 0.0.0.0:{}'.format(BACKEND_PORT))\n\n    # separate thread\n    path = os.path.abspath(path) if path is not None else None\n    be_server_thr = threading.Thread(target=be_server.main, args=(path, BACKEND_PORT), daemon=True)\n    if frontend:\n        fe_server_thr = threading.Thread(target=start_fe_server, args=(port,), daemon=True)\n\n    # for frontend\n    os.chdir(os.path.join(str(pa), FE_BUILD_DIR))\n\n    try:\n        be_server_thr.start()\n        if frontend:\n            fe_server_thr.start()\n\n        if frontend:\n            fe_server_thr.join()\n        be_server_thr.join()\n    except Exception as e:\n        LOGGER.error('Exception occurred:' + str(e))\n        return ERROR\n\n    return SUCCESS\n\ndef _start_dashboard(path, port, frontend):\n    global BACKEND_PORT\n\n    BACKEND_PORT = get_available_port()\n    \n    return start_servers(path, port, frontend)\n\ndef main():\n    global BACKEND_PORT\n\n    \"\"\" Main function that parses arguments and opens fe+be.\"\"\"\n    parser = argparse.ArgumentParser(\n        description='Open frontend and backend of the auptimizer dashboard')\n    parser.add_argument(\n        '--path',\n        type=str,\n        dest='path',\n        default=None,\n        help='Path of the sqlite db file.'\n    )\n    parser.add_argument(\n        '--port',\n        type=int,\n        dest='port',\n        help='Port for frontend. Leave blank for backend only.',\n    )\n    parser.add_argument(\n        '--backend_port',\n        type=int,\n        dest='backend_port',\n        help='Port for the backend. Optional, for easier debugging.'\n    )\n\n    args = parser.parse_args()\n\n    BACKEND_PORT = get_available_port()\n\n    if args.backend_port is not None:\n        BACKEND_PORT = args.backend_port\n\n    if args.port is None:\n        args.frontend = False\n    else:\n        args.frontend = True\n        print('Dashboard started on 0.0.0.0:{}'.format(args.port))\n        print('To exit press CTRL+C...')\n\n    return start_servers(args.path, args.port, args.frontend)\n\n\nif __name__ == \"__main__\":\n    sys.exit(main())\n"
  },
  {
    "path": "src/aup/dashboard/frontend/.browserslistrc",
    "content": "# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.\n# For additional information regarding the format and rule options, please see:\n# https://github.com/browserslist/browserslist#queries\n\n# For the full list of supported browsers by the Angular framework, please see:\n# https://angular.io/guide/browser-support\n\n# You can see what browsers were selected by your queries by running:\n#   npx browserslist\n\nlast 1 Chrome version\nlast 1 Firefox version\nlast 2 Edge major versions\nlast 2 Safari major versions\nlast 2 iOS major versions\nFirefox ESR\nnot IE 9-10 # Angular support for IE 9-10 has been deprecated and will be removed as of Angular v11. To opt-in, remove the 'not' prefix on this line.\nnot IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line.\n"
  },
  {
    "path": "src/aup/dashboard/frontend/.editorconfig",
    "content": "# Editor configuration, see https://editorconfig.org\nroot = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 2\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n[*.ts]\nquote_type = single\n\n[*.md]\nmax_line_length = off\ntrim_trailing_whitespace = false\n"
  },
  {
    "path": "src/aup/dashboard/frontend/.eslintrc.json",
    "content": "{\n  \"root\": true,\n  \"ignorePatterns\": [\"projects/**/*\", \"febuild/**/*\"],\n  \"overrides\": [\n    {\n      \"files\": [\"*.ts\"],\n      \"parserOptions\": {\n        \"project\": [\"tsconfig.json\", \"e2e/tsconfig.json\"],\n        \"createDefaultProgram\": true\n      },\n      \"extends\": [\n        \"plugin:@angular-eslint/ng-cli-compat\",\n        \"plugin:@angular-eslint/ng-cli-compat--formatting-add-on\",\n        \"plugin:@angular-eslint/recommended\",\n        \"plugin:@angular-eslint/template/process-inline-templates\",\n        \"eslint:recommended\",\n        \"plugin:@typescript-eslint/recommended\",\n        \"plugin:@typescript-eslint/recommended-requiring-type-checking\",\n        \"prettier/@typescript-eslint\",\n        \"plugin:prettier/recommended\"\n      ],\n      \"plugins\": [\"eslint-plugin-react\"],\n      \"rules\": {\n        \"@angular-eslint/component-selector\": [\n          \"error\",\n          {\n            \"type\": \"element\",\n            \"prefix\": \"app\",\n            \"style\": \"kebab-case\"\n          }\n        ],\n        \"@angular-eslint/directive-selector\": [\n          \"error\",\n          {\n            \"type\": \"attribute\",\n            \"prefix\": \"app\",\n            \"style\": \"camelCase\"\n          }\n        ],\n        \"@angular-eslint/use-component-view-encapsulation\": \"error\",\n        \"@angular-eslint/use-pipe-decorator\": \"error\",\n        \"@typescript-eslint/consistent-type-definitions\": \"error\",\n        \"@typescript-eslint/dot-notation\": \"off\",\n        \"@typescript-eslint/explicit-member-accessibility\": [\n          \"off\",\n          {\n            \"accessibility\": \"explicit\"\n          }\n        ],\n        \"arrow-parens\": [\"off\", \"always\"],\n        \"brace-style\": [\"off\", \"off\"],\n        \"eol-last\": \"off\",\n        \"id-blacklist\": \"off\",\n        \"id-match\": \"off\",\n        \"import/order\": \"off\",\n        \"linebreak-style\": \"off\",\n        \"new-parens\": \"off\",\n        \"newline-per-chained-call\": \"off\",\n        \"no-extra-semi\": \"off\",\n        \"no-irregular-whitespace\": \"off\",\n        \"no-trailing-spaces\": \"off\",\n        \"no-underscore-dangle\": \"off\",\n        \"react/jsx-curly-spacing\": \"off\",\n        \"react/jsx-equals-spacing\": \"off\",\n        \"react/jsx-wrap-multilines\": \"off\",\n        \"space-before-function-paren\": \"off\",\n        \"space-in-parens\": [\"off\", \"never\"]\n      }\n    },\n    {\n      \"files\": [\"*.html\"],\n      \"extends\": [\"plugin:@angular-eslint/template/recommended\"],\n      \"rules\": {}\n    }\n  ]\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/.gitignore",
    "content": "# See http://help.github.com/ignore-files/ for more about ignoring files.\n\n# compiled output\n#/dist\n/tmp\n/out-tsc\n# Only exists if Bazel was run\n/bazel-out\n\n# dependencies\n/node_modules\n\n# profiling files\nchrome-profiler-events*.json\nspeed-measure-plugin*.json\n\n# IDEs and editors\n/.idea\n.project\n.classpath\n.c9/\n*.launch\n.settings/\n*.sublime-workspace\n\n# IDE - VSCode\n.vscode/*\n!.vscode/settings.json\n!.vscode/tasks.json\n!.vscode/launch.json\n!.vscode/extensions.json\n.history/*\n\n# misc\n/.sass-cache\n/connect.lock\n/coverage\n/libpeerconnection.log\nnpm-debug.log\nyarn-error.log\ntestem.log\n/typings\n\n# System Files\n.DS_Store\nThumbs.db\n"
  },
  {
    "path": "src/aup/dashboard/frontend/.prettierignore",
    "content": "package.json\npackage-lock.json\nyarn.lock\ndist\n.angulardoc.json\n.vscode/*\n**/*.html\n"
  },
  {
    "path": "src/aup/dashboard/frontend/.prettierrc",
    "content": "{\n  \"printWidth\": 120,\n  \"singleQuote\": true,\n  \"useTabs\": false,\n  \"tabWidth\": 2,\n  \"jsxSingleQuote\": true,\n  \"htmlWhitespaceSensitivity\": \"ignore\",\n  \"semi\": true,\n  \"bracketSpacing\": true,\n  \"endOfLine\": \"auto\"\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/Angular-LICENSE",
    "content": "License file for package: https://github.com/angular/angular-cli\n\nThe MIT License\n\nCopyright (c) 2017 Google, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."
  },
  {
    "path": "src/aup/dashboard/frontend/README.md",
    "content": "# Auptimizer Frontend\n\nThis project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.2.\n\n## Getting started\n\nClone the repo. Navigate to `Auptimizer-Dashboard` folder. Run `npm install` to install all dependencies. \n\n## Development server\n\nRun `npm run start` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.\n\n## Build\n\nRun `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build.\n\n## Running unit tests\n\nRun `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).\n\n## Running end-to-end tests\n\nRun `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/).\n\n## Further help\n\nTo get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).\n\n## Copyright\n\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later"
  },
  {
    "path": "src/aup/dashboard/frontend/angular.json",
    "content": "{\n  \"$schema\": \"./node_modules/@angular/cli/lib/config/schema.json\",\n  \"version\": 1,\n  \"newProjectRoot\": \"projects\",\n  \"projects\": {\n    \"auptimizer-dashboard\": {\n      \"projectType\": \"application\",\n      \"schematics\": {\n        \"@schematics/angular:component\": {\n          \"style\": \"scss\"\n        }\n      },\n      \"root\": \"\",\n      \"sourceRoot\": \"src\",\n      \"prefix\": \"app\",\n      \"architect\": {\n        \"build\": {\n          \"builder\": \"@angular-builders/custom-webpack:browser\",\n          \"options\": {\n            \"customWebpackConfig\": {\n              \"path\": \"./webpack.config.js\"\n            },\n            \"outputPath\": \"febuild/auptimizer-dashboard\",\n            \"index\": \"src/index.html\",\n            \"main\": \"src/main.ts\",\n            \"polyfills\": \"src/polyfills.ts\",\n            \"tsConfig\": \"tsconfig.app.json\",\n            \"aot\": true,\n            \"assets\": [\n              \"src/favicon.ico\",\n              \"src/assets\",\n              \"src/_redirects\"\n            ],\n            \"styles\": [\n              \"./node_modules/@angular/material/prebuilt-themes/indigo-pink.css\",\n              \"src/styles.scss\"\n            ],\n            \"scripts\": []\n          },\n          \"configurations\": {\n            \"production\": {\n              \"fileReplacements\": [\n                {\n                  \"replace\": \"src/environments/environment.ts\",\n                  \"with\": \"src/environments/environment.prod.ts\"\n                }\n              ],\n              \"optimization\": true,\n              \"outputHashing\": \"all\",\n              \"sourceMap\": false,\n              \"extractCss\": true,\n              \"namedChunks\": false,\n              \"extractLicenses\": true,\n              \"vendorChunk\": false,\n              \"buildOptimizer\": true,\n              \"budgets\": [\n                {\n                  \"type\": \"initial\",\n                  \"maximumWarning\": \"2mb\",\n                  \"maximumError\": \"10mb\"\n                },\n                {\n                  \"type\": \"anyComponentStyle\",\n                  \"maximumWarning\": \"30kb\",\n                  \"maximumError\": \"70kb\"\n                }\n              ]\n            }\n          }\n        },\n        \"serve\": {\n          \"builder\": \"@angular-builders/custom-webpack:dev-server\",\n          \"options\": {\n            \"customWebpackConfig\": {\n              \"path\": \"./webpack.config.js\"\n            },\n            \"browserTarget\": \"auptimizer-dashboard:build\"\n          },\n          \"configurations\": {\n            \"production\": {\n              \"browserTarget\": \"auptimizer-dashboard:build:production\"\n            }\n          }\n        },\n        \"extract-i18n\": {\n          \"builder\": \"@angular-devkit/build-angular:extract-i18n\",\n          \"options\": {\n            \"browserTarget\": \"auptimizer-dashboard:build\"\n          }\n        },\n        \"test\": {\n          \"builder\": \"@angular-devkit/build-angular:karma\",\n          \"options\": {\n            \"main\": \"src/test.ts\",\n            \"polyfills\": \"src/polyfills.ts\",\n            \"tsConfig\": \"tsconfig.spec.json\",\n            \"karmaConfig\": \"karma.conf.js\",\n            \"assets\": [\n              \"src/favicon.ico\",\n              \"src/assets\"\n            ],\n            \"styles\": [\n              \"./node_modules/@angular/material/prebuilt-themes/indigo-pink.css\",\n              \"src/styles.scss\"\n            ],\n            \"scripts\": []\n          }\n        },\n        \"lint\": {\n          \"builder\": \"@angular-eslint/builder:lint\",\n          \"options\": {\n            \"lintFilePatterns\": [\n              \"src/**/*.ts\",\n              \"src/**/*.html\"\n            ]\n          }\n        },\n        \"e2e\": {\n          \"builder\": \"@angular-devkit/build-angular:protractor\",\n          \"options\": {\n            \"protractorConfig\": \"e2e/protractor.conf.js\",\n            \"devServerTarget\": \"auptimizer-dashboard:serve\"\n          },\n          \"configurations\": {\n            \"production\": {\n              \"devServerTarget\": \"auptimizer-dashboard:serve:production\"\n            }\n          }\n        }\n      }\n    }\n  },\n  \"defaultProject\": \"auptimizer-dashboard\"\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/e2e/protractor.conf.js",
    "content": "// @ts-check\n// Protractor configuration file, see link for more information\n// https://github.com/angular/protractor/blob/master/lib/config.ts\n\nconst { SpecReporter, StacktraceOption } = require('jasmine-spec-reporter');\n\n/**\n * @type { import(\"protractor\").Config }\n */\nexports.config = {\n  allScriptsTimeout: 11000,\n  specs: [\n    './src/**/*.e2e-spec.ts'\n  ],\n  capabilities: {\n    browserName: 'chrome'\n  },\n  directConnect: true,\n  baseUrl: 'http://localhost:4200/',\n  framework: 'jasmine',\n  jasmineNodeOpts: {\n    showColors: true,\n    defaultTimeoutInterval: 30000,\n    print: function() {}\n  },\n  onPrepare() {\n    require('ts-node').register({\n      project: require('path').join(__dirname, './tsconfig.json')\n    });\n    jasmine.getEnv().addReporter(new SpecReporter({\n      spec: {\n        displayStacktrace: StacktraceOption.PRETTY\n      }\n    }));\n  }\n};"
  },
  {
    "path": "src/aup/dashboard/frontend/e2e/src/app.e2e-spec.ts",
    "content": "import { AppPage } from './app.po';\nimport { browser, logging } from 'protractor';\n\ndescribe('workspace-project App', () => {\n  let page: AppPage;\n\n  beforeEach(() => {\n    page = new AppPage();\n  });\n\n  it('should display welcome message', () => {\n    page.navigateTo();\n    expect(page.getTitleText()).toEqual('auptimizer-dashboard app is running!');\n  });\n\n  afterEach(async () => {\n    // Assert that there are no errors emitted from the browser\n    const logs = await browser.manage().logs().get(logging.Type.BROWSER);\n    expect(logs).not.toContain(jasmine.objectContaining({\n      level: logging.Level.SEVERE,\n    } as logging.Entry));\n  });\n});\n"
  },
  {
    "path": "src/aup/dashboard/frontend/e2e/src/app.po.ts",
    "content": "import { browser, by, element } from 'protractor';\n\nexport class AppPage {\n  navigateTo(): Promise<unknown> {\n    return browser.get(browser.baseUrl) as Promise<unknown>;\n  }\n\n  getTitleText(): Promise<string> {\n    return element(by.css('app-root .content span')).getText() as Promise<string>;\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/e2e/tsconfig.json",
    "content": "/* To learn more about this file see: https://angular.io/config/tsconfig. */\n{\n  \"extends\": \"../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../out-tsc/e2e\",\n    \"module\": \"commonjs\",\n    \"target\": \"es2018\",\n    \"types\": [\n      \"jasmine\",\n      \"jasminewd2\",\n      \"node\"\n    ]\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/febuild/auptimizer-dashboard/3rdpartylicenses.txt",
    "content": "@angular/animations\nMIT\n\n@angular/cdk\nMIT\nThe MIT License\n\nCopyright (c) 2021 Google LLC.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n\n@angular/common\nMIT\n\n@angular/core\nMIT\n\n@angular/flex-layout\nMIT\nThe MIT License\n\nCopyright (c) 2020 Google LLC.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n\n@angular/forms\nMIT\n\n@angular/material\nMIT\nThe MIT License\n\nCopyright (c) 2021 Google LLC.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n\n@angular/platform-browser\nMIT\n\n@angular/router\nMIT\n\n@ngxs/devtools-plugin\nMIT\n\n@ngxs/logger-plugin\nMIT\n\n@ngxs/router-plugin\nMIT\n\n@ngxs/storage-plugin\nMIT\n\n@ngxs/store\nMIT\n\nangular-plotly.js\n\ncdk-table-exporter\nApache-2.0\n\ncss-loader\nMIT\nCopyright JS Foundation and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\nfile-saver\nMIT\nThe MIT License\n\nCopyright © 2016 [Eli Grey][1].\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n  [1]: http://eligrey.com\n\n\njsoneditor\nApache-2.0\n                               Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n\nmat-table-exporter\nApache-2.0\n\nmoment\nMIT\nCopyright (c) JS Foundation and other contributors\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n\n\nngx-pagination\nMIT\nThe MIT License (MIT)\nCopyright (c) 2016 Michael Bromley\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\nplotly.js\nMIT\nThe MIT License (MIT)\n\nCopyright (c) 2020 Plotly, Inc\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n\nrxjs\nApache-2.0\n                               Apache License\n                         Version 2.0, January 2004\n                      http://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n 1. Definitions.\n\n    \"License\" shall mean the terms and conditions for use, reproduction,\n    and distribution as defined by Sections 1 through 9 of this document.\n\n    \"Licensor\" shall mean the copyright owner or entity authorized by\n    the copyright owner that is granting the License.\n\n    \"Legal Entity\" shall mean the union of the acting entity and all\n    other entities that control, are controlled by, or are under common\n    control with that entity. For the purposes of this definition,\n    \"control\" means (i) the power, direct or indirect, to cause the\n    direction or management of such entity, whether by contract or\n    otherwise, or (ii) ownership of fifty percent (50%) or more of the\n    outstanding shares, or (iii) beneficial ownership of such entity.\n\n    \"You\" (or \"Your\") shall mean an individual or Legal Entity\n    exercising permissions granted by this License.\n\n    \"Source\" form shall mean the preferred form for making modifications,\n    including but not limited to software source code, documentation\n    source, and configuration files.\n\n    \"Object\" form shall mean any form resulting from mechanical\n    transformation or translation of a Source form, including but\n    not limited to compiled object code, generated documentation,\n    and conversions to other media types.\n\n    \"Work\" shall mean the work of authorship, whether in Source or\n    Object form, made available under the License, as indicated by a\n    copyright notice that is included in or attached to the work\n    (an example is provided in the Appendix below).\n\n    \"Derivative Works\" shall mean any work, whether in Source or Object\n    form, that is based on (or derived from) the Work and for which the\n    editorial revisions, annotations, elaborations, or other modifications\n    represent, as a whole, an original work of authorship. For the purposes\n    of this License, Derivative Works shall not include works that remain\n    separable from, or merely link (or bind by name) to the interfaces of,\n    the Work and Derivative Works thereof.\n\n    \"Contribution\" shall mean any work of authorship, including\n    the original version of the Work and any modifications or additions\n    to that Work or Derivative Works thereof, that is intentionally\n    submitted to Licensor for inclusion in the Work by the copyright owner\n    or by an individual or Legal Entity authorized to submit on behalf of\n    the copyright owner. For the purposes of this definition, \"submitted\"\n    means any form of electronic, verbal, or written communication sent\n    to the Licensor or its representatives, including but not limited to\n    communication on electronic mailing lists, source code control systems,\n    and issue tracking systems that are managed by, or on behalf of, the\n    Licensor for the purpose of discussing and improving the Work, but\n    excluding communication that is conspicuously marked or otherwise\n    designated in writing by the copyright owner as \"Not a Contribution.\"\n\n    \"Contributor\" shall mean Licensor and any individual or Legal Entity\n    on behalf of whom a Contribution has been received by Licensor and\n    subsequently incorporated within the Work.\n\n 2. Grant of Copyright License. Subject to the terms and conditions of\n    this License, each Contributor hereby grants to You a perpetual,\n    worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n    copyright license to reproduce, prepare Derivative Works of,\n    publicly display, publicly perform, sublicense, and distribute the\n    Work and such Derivative Works in Source or Object form.\n\n 3. Grant of Patent License. Subject to the terms and conditions of\n    this License, each Contributor hereby grants to You a perpetual,\n    worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n    (except as stated in this section) patent license to make, have made,\n    use, offer to sell, sell, import, and otherwise transfer the Work,\n    where such license applies only to those patent claims licensable\n    by such Contributor that are necessarily infringed by their\n    Contribution(s) alone or by combination of their Contribution(s)\n    with the Work to which such Contribution(s) was submitted. If You\n    institute patent litigation against any entity (including a\n    cross-claim or counterclaim in a lawsuit) alleging that the Work\n    or a Contribution incorporated within the Work constitutes direct\n    or contributory patent infringement, then any patent licenses\n    granted to You under this License for that Work shall terminate\n    as of the date such litigation is filed.\n\n 4. Redistribution. You may reproduce and distribute copies of the\n    Work or Derivative Works thereof in any medium, with or without\n    modifications, and in Source or Object form, provided that You\n    meet the following conditions:\n\n    (a) You must give any other recipients of the Work or\n        Derivative Works a copy of this License; and\n\n    (b) You must cause any modified files to carry prominent notices\n        stating that You changed the files; and\n\n    (c) You must retain, in the Source form of any Derivative Works\n        that You distribute, all copyright, patent, trademark, and\n        attribution notices from the Source form of the Work,\n        excluding those notices that do not pertain to any part of\n        the Derivative Works; and\n\n    (d) If the Work includes a \"NOTICE\" text file as part of its\n        distribution, then any Derivative Works that You distribute must\n        include a readable copy of the attribution notices contained\n        within such NOTICE file, excluding those notices that do not\n        pertain to any part of the Derivative Works, in at least one\n        of the following places: within a NOTICE text file distributed\n        as part of the Derivative Works; within the Source form or\n        documentation, if provided along with the Derivative Works; or,\n        within a display generated by the Derivative Works, if and\n        wherever such third-party notices normally appear. The contents\n        of the NOTICE file are for informational purposes only and\n        do not modify the License. You may add Your own attribution\n        notices within Derivative Works that You distribute, alongside\n        or as an addendum to the NOTICE text from the Work, provided\n        that such additional attribution notices cannot be construed\n        as modifying the License.\n\n    You may add Your own copyright statement to Your modifications and\n    may provide additional or different license terms and conditions\n    for use, reproduction, or distribution of Your modifications, or\n    for any such Derivative Works as a whole, provided Your use,\n    reproduction, and distribution of the Work otherwise complies with\n    the conditions stated in this License.\n\n 5. Submission of Contributions. Unless You explicitly state otherwise,\n    any Contribution intentionally submitted for inclusion in the Work\n    by You to the Licensor shall be under the terms and conditions of\n    this License, without any additional terms or conditions.\n    Notwithstanding the above, nothing herein shall supersede or modify\n    the terms of any separate license agreement you may have executed\n    with Licensor regarding such Contributions.\n\n 6. Trademarks. This License does not grant permission to use the trade\n    names, trademarks, service marks, or product names of the Licensor,\n    except as required for reasonable and customary use in describing the\n    origin of the Work and reproducing the content of the NOTICE file.\n\n 7. Disclaimer of Warranty. Unless required by applicable law or\n    agreed to in writing, Licensor provides the Work (and each\n    Contributor provides its Contributions) on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n    implied, including, without limitation, any warranties or conditions\n    of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n    PARTICULAR PURPOSE. You are solely responsible for determining the\n    appropriateness of using or redistributing the Work and assume any\n    risks associated with Your exercise of permissions under this License.\n\n 8. Limitation of Liability. In no event and under no legal theory,\n    whether in tort (including negligence), contract, or otherwise,\n    unless required by applicable law (such as deliberate and grossly\n    negligent acts) or agreed to in writing, shall any Contributor be\n    liable to You for damages, including any direct, indirect, special,\n    incidental, or consequential damages of any character arising as a\n    result of this License or out of the use or inability to use the\n    Work (including but not limited to damages for loss of goodwill,\n    work stoppage, computer failure or malfunction, or any and all\n    other commercial damages or losses), even if such Contributor\n    has been advised of the possibility of such damages.\n\n 9. Accepting Warranty or Additional Liability. While redistributing\n    the Work or Derivative Works thereof, You may choose to offer,\n    and charge a fee for, acceptance of support, warranty, indemnity,\n    or other liability obligations and/or rights consistent with this\n    License. However, in accepting such obligations, You may act only\n    on Your own behalf and on Your sole responsibility, not on behalf\n    of any other Contributor, and only if You agree to indemnify,\n    defend, and hold each Contributor harmless for any liability\n    incurred by, or claims asserted against, such Contributor by reason\n    of your accepting any such warranty or additional liability.\n\n END OF TERMS AND CONDITIONS\n\n APPENDIX: How to apply the Apache License to your work.\n\n    To apply the Apache License to your work, attach the following\n    boilerplate notice, with the fields enclosed by brackets \"[]\"\n    replaced with your own identifying information. (Don't include\n    the brackets!)  The text should be enclosed in the appropriate\n    comment syntax for the file format. We also recommend that a\n    file or class name and description of purpose be included on the\n    same \"printed page\" as the copyright notice for easier\n    identification within third-party archives.\n\n Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n \n\n\ntslib\n0BSD\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n\nwebpack\nMIT\nCopyright JS Foundation and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\nxlsx\nApache-2.0\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright (C) 2012-present   SheetJS LLC \n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n\nzone.js\nMIT\nThe MIT License\n\nCopyright (c) 2010-2020 Google LLC. http://angular.io/license\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "src/aup/dashboard/frontend/febuild/auptimizer-dashboard/4.3bf463bd37e16d085b6c.js",
    "content": "(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{\"+c+f\":function(e,t,n){\"use strict\";n.r(t),n.d(t,\"ExperimentModule\",(function(){return ls}));var r=n(\"ofXK\"),i=n(\"tyNb\"),s=n(\"mrSG\"),o=n(\"AcyG\"),a=n(\"quSY\"),c=n(\"HDdC\"),l=n(\"D0XW\"),h=n(\"Y7HM\");function d(e=0,t=l.a){return(!Object(h.a)(e)||e<0)&&(e=0),t&&\"function\"==typeof t.schedule||(t=l.a),new c.a(n=>(n.add(t.schedule(u,e,{subscriber:n,counter:0,period:e})),n))}function u(e){const{subscriber:t,counter:n,period:r}=e;t.next(n),this.schedule({subscriber:t,counter:n+1,period:r},r)}let f=(()=>{class e{}return e.type=\"[Experiment] Getting list of experiments\",e})(),g=(()=>{class e{constructor(e){this.payload=e}}return e.type=\"[Experiment] Get experiment by id\",e})(),p=(()=>{class e{constructor(e){this.payload=e}}return e.type=\"[Experiment] Get hyperparameters by experiment id\",e})(),m=(()=>{class e{constructor(e){this.payload=e}}return e.type=\"[Experiment] Get job status by experiment id\",e})(),C=(()=>{class e{constructor(e){this.payload=e}}return e.type=\"[Experiment] Get experiment history best by experiment id\",e})(),b=(()=>{class e{constructor(e){this.payload=e}}return e.type=\"[Experiment] Get metrics vs hyperparameters by experiment id\",e})(),v=(()=>{class e{}return e.type=\"[Experiment] Get intermediate results\",e})(),I=(()=>{class e{constructor(e){this.payload=e}}return e.type=\"[Experiment] Set intermediate experiment\",e})(),A=(()=>{class e{constructor(e){this.payload=e}}return e.type=\"[Experiment] Get experiment intermediate results\",e})(),y=(()=>{class e{constructor(e){this.payload=e}}return e.type=\"[Config] Set refresh interval value\",e})(),w=(()=>{class e{constructor(e){this.payload=e}}return e.type=\"[Config] Refresh interval\",e})(),S=(()=>{class e{constructor(e){this.payload=e}}return e.type=\"[Experiment] Start experiment by id\",e})(),x=(()=>{class e{constructor(e){this.payload=e}}return e.type=\"[Experiment] Stop experiment by id\",e})(),E=(()=>{class e{constructor(e){this.payload=e}}return e.type=\"[Database] Initialize setup database\",e})(),k=(()=>{class e{constructor(e){this.payload=e}}return e.type=\"[Experiment] Create experiment\",e})(),_=(()=>{class e{}return e.type=\"[Sidenav] Toggle sidenav\",e})(),T=(()=>{class e{}return e.type=\"[Experiment] Refresh all\",e})(),R=(()=>{class e{constructor(e){this.payload=e}}return e.type=\"[Experiment] Delete experiment\",e})(),B=(()=>{class e{constructor(e){this.payload=e}}return e.type=\"[Experiment] Set experiment display view\",e})(),O=(()=>{class e{constructor(e){this.payload=e}}return e.type=\"[Experiment] Change job status graph for multiple labels\",e})();var L=n(\"z6cu\"),P=n(\"JIr8\"),F=n(\"lJxs\"),N=n(\"vkgz\"),M=n(\"TkeJ\"),D=(n(\"EHOR\"),n(\"93C2\"),n(\"BHZs\")),$=n(\"KkKq\"),W=n(\"ENCR\"),H=(n(\"Bzzc\"),n(\"h93q\")),G=n(\"efK2\"),V=n(\"nHCO\");const j=[{displayName:\"Overview\",route:\"overview\",iconName:\"table_chart\",tooltip:\"Overview\"},{displayName:\"Job Status\",route:\"job-status\",iconName:\"science\",tooltip:\"Job Status\"},{displayName:\"Hyperparameter Interaction Graph\",route:\"hig\",iconName:\"bar_chart\",tooltip:\"Hyperparameter Interaction Graph\"},{displayName:\"Intermediate Results\",route:\"interm\",iconName:\"graphic_eq\",tooltip:\"Intermediate Results\"},{displayName:\"Multi-Experiment Comparison\",route:\"multi\",iconName:\"stacked_line_chart\",tooltip:\"Multi-Experiment Comparison\"}];var Z=n(\"OCth\"),z=function(e){return e.LIST=\"list\",e.CARD=\"card\",e}({}),K=n(\"fXoL\"),X=n(\"nm5K\"),U=n(\"sIil\");let Y=(()=>{class e{constructor(e,t){this.apiService=e,this.helperService=t}getExperiments(){return this.apiService.get(\"experiments\")}getExperiment(e){if(e)return this.apiService.get(\"experiments/\"+e)}getHyperparameters(e){if(e)return this.apiService.get(\"hps_space?eid=\"+e)}getInterimResults(){return this.apiService.get(\"interm_res\")}getExperimentInterimResults(e,t){if(e)return this.apiService.get(`interm_res/${e}${t&&\"score\"!==t?\"/\"+t:\"\"}`)}getJobsStatus(e,t){if(e&&null!=t)return this.apiService.get(`job_status?sortby=${t.sortby}&asc=${t.asc}&eid=${e}`)}getMetricsVsHparams(e){if(e)return this.apiService.get(\"metrics_vs_hparams?eid=\"+e)}getExperimentHistoryBest(e,t,n,r){if(e&&t&&n)return this.apiService.get(`experiment_history_best/${e}${r&&\"score\"!==r?\"/\"+r:\"\"}?n=${t}&sortby=${n}`)}getAllExperimentHistoryBest(e,t,n){if(e)return this.apiService.get(`experiment_history_best${n&&\"score\"!==n?\"/\"+n:\"\"}?n=${e}${t?\"&sortby=\"+t:\"\"}`)}startExperiment(e){if(e)return this.apiService.post(\"start_experiment\",Object.assign({},e))}stopExperiment(e){if(e)return this.apiService.post(\"stop_experiment\",{eid:e})}setupDB(e){if(e)return this.apiService.post(\"setup\",Object.assign({},e))}createExperiment(e){if(e)return this.apiService.post(\"create_experiment\",e)}refreshAll(){return this.apiService.post(\"refresh_all\")}deleteExperiment(e){if(e)return this.apiService.delete(\"experiment/\"+e)}}return e.\\u0275fac=function(t){return new(t||e)(K.hc(X.a),K.hc(U.a))},e.\\u0275prov=K.Tb({token:e,factory:e.\\u0275fac,providedIn:\"root\"}),e})();var J=n(\"DHDI\"),Q=n(\"ZF+8\");let q=(()=>{let e=class{constructor(e,t,n,r,i){this.service=e,this.helperService=t,this.snackbarService=n,this.utilsService=r,this.store=i}static loadingExperiment(e){return e.loadingExperiment}static loadingAllExperiments(e){return e.loadingAllExperiments}static loadingIntermResults(e){return e.loadingIntermResults}static experimentsMultiplier(e){return e.experimentsMultiplier}static refreshInterval(e){return e.refreshInterval}static refreshIntervalOptions(e){return e.refreshIntervalOptions}static refreshingInterval(e){return e.refreshingInterval}static experiments(e){return e.experiments}static selectedExperiment(e){return e.selectedExperiment}static resources(e){return e.resources}static hyperparameters(e){return e.hyperparameters}static metricsVsHparams(e){return e.metricsVsHparams}static parallelCoordinatesTrace(e){return e.parallelCoordinatesTrace}static jobs(e){return e.jobs}static jobMultipleResulsLabels(e){return e.jobsMultipleResults.labels}static jobMultipleResulsSelectedLabel(e){return e.jobsMultipleResults.selectedLabel}static jobsGraphData(e){return e.jobsGraphData}static jobsOptimizationGraphData(e){return e.jobsOptimizationGraphData}static sidenavOpen(e){return e.sidenavOpen}static intermResults(e){return e.intermResults}static interimExperiment(e){return e.interimExperiment}static interimExperimentJobs(e){return e.interimExperiment.jobs}static interimExperimentMultResLabels(e){return e.interimExperiment.multResLabels}static interimExperimentSelectedLabel(e){return e.interimExperiment.selectedLabel}static navItems(e){return e.navItems}static experimentViewType(e){return e.experimentViewType}toggleSideNav(e){const t=e.getState();localStorage.setItem(\"sidenavOpen\",JSON.stringify(!t.sidenavOpen)),e.patchState({sidenavOpen:!t.sidenavOpen})}setRefreshInterval(e,{payload:t}){t&&e.patchState({refreshInterval:t})}setExperimentDisplayView(e,{payload:t}){t&&(localStorage.setItem(\"experimentViewType\",t),e.patchState({experimentViewType:t}))}refreshInterval(e,{payload:t}){e.patchState({refreshingInterval:t})}getExperiments(e){e.patchState({loadingAllExperiments:!0});const t=e.getState().experiments;return this.service.getExperiments().pipe(Object(P.a)(t=>{e.patchState({loadingAllExperiments:!1});const n={type:Z.a.ERROR,receivedAt:(new Date).getTime(),message:this.utilsService.formatErrorMessage(t)};return this.store.dispatch(new V.a(n)),this.snackbarService.error(this.utilsService.formatErrorMessage(t)),Object(L.a)(t)}),Object(F.a)(n=>{if(n){const r=[];n.experiment.map(e=>{const n=Object.assign(Object.assign({},this.utilsService.keysToCamel(e)),{scores:JSON.parse(e.scores),jobs:JSON.parse(e.jobs),expConfigDetails:JSON.parse(e.exp_config)});return t.length&&t.map(e=>{if(e.eid===n.eid&&e.status!==n.status){const t=`Experiment ${n.experimentName} changed status from ${e.status} to ${n.status}`,r={type:Z.a.INFO,receivedAt:(new Date).getTime(),message:t};this.store.dispatch(new V.a(r)),this.snackbarService.info(t)}}),r.push(n)});const i=r.slice().sort((e,t)=>this.utilsService.compare(e.eid,t.eid,!1));e.patchState({experiments:i,resources:n.resource||[],loadingAllExperiments:!1})}}))}getExperiment(e,{payload:t}){if(t)return e.patchState({loadingExperiment:!0,selectedExperiment:null}),this.service.getExperiment(t).pipe(Object(P.a)(t=>{e.patchState({loadingExperiment:!1});const n={type:Z.a.ERROR,receivedAt:(new Date).getTime(),message:this.utilsService.formatErrorMessage(t)};return this.store.dispatch(new V.a(n)),this.snackbarService.error(this.utilsService.formatErrorMessage(t)),Object(L.a)(t)}),Object(F.a)(t=>{if(t){const n=this.utilsService.keysToCamel(t),r={bestScore:n.bestScore,experiment:n.experiment,jobStats:n.jobStats};if(r.bestScore&&r.bestScore.configList){const e=JSON.parse(r.bestScore.configList);r.bestScore.configList=e}const i=JSON.parse(r.experiment.expConfig);r.experiment.expConfig=i,e.patchState({selectedExperiment:r,loadingExperiment:!1})}}))}getHyperparameters(e,{payload:t}){if(t)return this.service.getHyperparameters(t).pipe(Object(P.a)(e=>{const t={type:Z.a.ERROR,receivedAt:(new Date).getTime(),message:this.utilsService.formatErrorMessage(e)};return this.store.dispatch(new V.a(t)),this.snackbarService.error(this.utilsService.formatErrorMessage(e)),Object(L.a)(e)}),Object(F.a)(t=>{if(t){const n=this.utilsService.keysToCamel(t.exp_config),r=JSON.parse(n.parameters);n.parameters=r.sort((e,t)=>this.utilsService.compare(e.name,t.name,!0)),e.patchState({hyperparameters:n})}}))}getJobStatus(e,{payload:t}){const n=e.getState(),r=n.jobsMultipleResults.selectedLabel||\"score\";if(t.eid)return this.service.getJobsStatus(t.eid,t.sortCriteria||n.jobStatusSortCriteria).pipe(Object(P.a)(e=>{const t={type:Z.a.ERROR,receivedAt:(new Date).getTime(),message:this.utilsService.formatErrorMessage(e)};return this.store.dispatch(new V.a(t)),this.snackbarService.error(this.utilsService.formatErrorMessage(e)),Object(L.a)(e)}),Object(F.a)(t=>{if(t&&t.job){let i=[];const s=new W.a;t.mult_res_labels&&(i=t.mult_res_labels,i.push(\"score\"));const o=[],a={x:[],y:[],hovertext:[],hoverinfo:\"text\",type:\"scatter\",mode:\"markers\",name:s.transform(r),line:{color:\"#3DDF7E\"}},c=new G.a;let l,h=1,d=null;return t.job.map(e=>{const t=this.utilsService.keysToCamel(e);t.tableData={},t.tableHyperParams={},t.tableFullData={},t.tableData[\"job ID\"]=t.jid,t.tableFullData[\"job ID\"]=t.jid,t.tableData[\"resource ID\"]=t.rid,t.tableFullData[\"resource ID\"]=t.rid,t.tableData.status=s.transform(t.status),t.tableFullData.status=s.transform(t.status),t.tableData.score=t.score,t.tableFullData.score=t.score,t.tableData[\"start time\"]=t.startTime,t.tableFullData[\"start time\"]=t.startTime,t.tableData[\"end time\"]=t.endTime,t.tableFullData[\"end time\"]=t.endTime,r?null!=e[r]&&(l=`${s.transform(r)} ${e[r]}<br>`,l+=`Job ID: ${e.jid}<br>`,a.x.push(h),a.y.push(e[r]),null===d&&this.utilsService.isNumber(e[r])&&(d=h),h++):null!=t.score&&(l=`${r}: ${t.score}<br>`,l+=`Job ID: ${t.jid}<br>`,a.x.push(h),a.y.push(t.score),null===d&&this.utilsService.isNumber(t.score)&&(d=h),h++);const n=JSON.parse(e.job_config);return t.jobConfig=n,Object.entries(t.jobConfig).map(e=>{t.tableFullData[\"\"+e[0]]=e[1],t.tableHyperParams[\"\"+e[0]]=e[1],null!=t.score&&(l+=`${s.transform(c.transform(e[0],[100,\"...\"]))}: ${e[1]}<br>`)}),i.length&&i.map(e=>{\"score\"===e||Object.keys(t.tableFullData).includes(e)||Object.keys(t.tableHyperParams).includes(e)||(t.tableFullData[e]=t[e],t.tableHyperParams[e]=t[e])}),null!=t.score&&a.hovertext.push(l),o.push(t)}),void e.patchState({jobs:o,jobsGraphData:a,firstValidJobNumber:d,jobsMultipleResults:Object.assign(Object.assign({},n.jobsMultipleResults),{labels:i,selectedLabel:r||(i&&i.length?i[i.length-1]:null)})})}}))}changeJobsGraphForLabel(e,{payload:t}){const n=e.getState(),r=new W.a;if(!t)return;const i=n.jobs,s={x:[],y:[],hovertext:[],hoverinfo:\"text\",type:\"scatter\",mode:\"markers\",name:r.transform(t),line:{color:\"#3DDF7E\"}},o=new G.a;let a,c=1,l=null;i.map(i=>{null!=i[t]&&(a=`${r.transform(t)} ${i[t]}<br>`,a+=`Job ID: ${i.jid}<br>`,s.x.push(c),s.y.push(i[t]),null===l&&this.utilsService.isNumber(i[t])&&(l=c),c++),Object.entries(i.jobConfig).map(e=>{null!=i[t]&&(a+=`${r.transform(o.transform(e[0],[100,\"...\"]))}: ${e[1]}<br>`)}),null!=i[t]&&s.hovertext.push(a),e.patchState({jobsGraphData:s,firstValidJobNumber:l,jobsMultipleResults:Object.assign(Object.assign({},n.jobsMultipleResults),{selectedLabel:t})})})}getExperimentHistory(e,{payload:t}){const n=e.getState();if(!t)return;const r=t.n||n.jobsMultiplier;return this.service.getExperimentHistoryBest(t.eid,r,t.sortby||\"jid\",n.jobsMultipleResults.selectedLabel).pipe(Object(P.a)(e=>{const t={type:Z.a.ERROR,receivedAt:(new Date).getTime(),message:this.utilsService.formatErrorMessage(e)};return this.store.dispatch(new V.a(t)),this.snackbarService.error(this.utilsService.formatErrorMessage(e)),Object(L.a)(e)}),Object(F.a)(t=>{if(t&&t.experiment_history_best&&t.experiment_history_best.length){const i={x:[],y:[],hovertext:[],hoverinfo:\"text\",type:\"scatter\",mode:\"lines+markers\",name:\"Best Results\",line:{color:\"#f44336\"}},s=new W.a,o=new G.a;let a;const c=[],l=n.jobsMultipleResults.selectedLabel||\"score\";let h=n.firstValidJobNumber;if(t.experiment_history_best.map(e=>{a=`${s.transform(l)}: ${e.score}<br>`,a+=`Job ID: ${e.jid}<br>`,null!=e.score&&(c.push(h),i.y.push(e.score),h++);const t=JSON.parse(e.job_config);Object.entries(t).map(e=>{a+=`${s.transform(o.transform(e[0],[100,\"...\"]))}: ${e[1]}<br>`}),i.hovertext.push(a)}),n.jobsGraphData&&n.jobsGraphData.x.length){const e=c[c.length-1],t=c.slice(),n=t.findIndex(t=>t===e);if(-1!==n){const r=t.slice(n),s=t.indexOf(e);t.splice(s);const o=t.concat(r);i.x=o}else i.x=c}else i.x=c;e.patchState({jobsOptimizationGraphData:i,jobsMultiplier:r})}}))}getMetricVsHparams(e,{payload:t}){if(t)return this.service.getMetricsVsHparams(t).pipe(Object(P.a)(e=>{const t={type:Z.a.ERROR,receivedAt:(new Date).getTime(),message:this.utilsService.formatErrorMessage(e)};return this.store.dispatch(new V.a(t)),this.snackbarService.error(this.utilsService.formatErrorMessage(e)),Object(L.a)(e)}),Object(F.a)(t=>{if(t&&t.metrics_vs_hparams){const n=this.utilsService.keysToCamel(t.metrics_vs_hparams);if(n&&n.length>0){n.sort((e,t)=>e.score>t.score?1:-1);const t=[];Object.keys(n[0]).reverse().map(e=>t.push({label:e,values:[]}));const r=n.map(e=>isNaN(e.score)?0:e.score);n.map(e=>{t.map(t=>\"score\"===t.label&&isNaN(e[t.label])?t.values.push(0):t.values.push(e[t.label]))}),e.patchState({metricsVsHparams:n,parallelCoordinatesTrace:{type:\"parcoords\",line:{showscale:!0,reversescale:!0,colorscale:\"Jet\",cmin:n[0].score,cmax:n[n.length-1].score,color:r},dimensions:t}})}else e.patchState({metricsVsHparams:n,parallelCoordinatesTrace:null})}}))}startExperiment(e,{payload:t}){const n=e.getState();if(t)return this.service.startExperiment(t).pipe(Object(N.a)(t=>{if(t){const r=n.experiments.slice();let i=this.utilsService.keysToCamel(t);i=Object.assign(Object.assign({},i),{expConfigDetails:JSON.parse(i.expConfig)});const s=r.findIndex(e=>e.eid===i.eid);-1!==s&&(r[s]=i),e.patchState({experiments:r});const o=\"Experiment started!\",a={type:Z.a.SUCCESS,receivedAt:(new Date).getTime(),message:o};this.store.dispatch(new V.a(a)),this.snackbarService.success(o)}}),Object(P.a)(e=>{const t={type:Z.a.ERROR,receivedAt:(new Date).getTime(),message:this.utilsService.formatErrorMessage(e)};return this.store.dispatch(new V.a(t)),this.snackbarService.error(this.utilsService.formatErrorMessage(e)),Object(L.a)(e)}))}stopExperiment(e,{payload:t}){const n=e.getState();if(t)return this.service.stopExperiment(t).pipe(Object(N.a)(t=>{if(t){const r=n.experiments.slice();let i=this.utilsService.keysToCamel(t);i=Object.assign(Object.assign({},i),{expConfigDetails:JSON.parse(i.expConfig)});const s=r.findIndex(e=>e.eid===i.eid);-1!==s&&(r[s]=i),e.patchState({experiments:r});const o=\"Experiment stopped!\",a={type:Z.a.SUCCESS,receivedAt:(new Date).getTime(),message:o};return this.store.dispatch(new V.a(a)),void this.snackbarService.success(o)}}),Object(P.a)(e=>{const t={type:Z.a.ERROR,receivedAt:(new Date).getTime(),message:this.utilsService.formatErrorMessage(e)};return this.store.dispatch(new V.a(t)),this.snackbarService.error(this.utilsService.formatErrorMessage(e)),Object(L.a)(e)}))}setupDatabase(e,{payload:t}){if(t)return this.service.setupDB(t).pipe(Object(N.a)(e=>{e&&(this.snackbarService.success(\"Setup completed\"),this.store.dispatch(new V.c).subscribe(()=>{this.store.dispatch(new M.a([\"/list\"]))}))}),Object(P.a)(e=>{const t={type:Z.a.ERROR,receivedAt:(new Date).getTime(),message:this.utilsService.formatErrorMessage(e)};return this.store.dispatch(new V.a(t)),this.snackbarService.error(this.utilsService.formatErrorMessage(e)),Object(L.a)(e)}))}getInterimResults(e){const t=e.getState();return e.patchState({loadingIntermResults:!0}),this.service.getInterimResults().pipe(Object(N.a)(n=>{if(n&&n.length)e.patchState({intermResults:n,loadingIntermResults:!1});else{const n=t.navItems.slice(),r=n.findIndex(e=>\"interm\"===e.route);-1!==r&&(n[r].disabled=!0),e.patchState({navItems:n,loadingIntermResults:!1})}}),Object(P.a)(t=>{e.patchState({loadingIntermResults:!1});const n={type:Z.a.ERROR,receivedAt:(new Date).getTime(),message:this.utilsService.formatErrorMessage(t)};return this.store.dispatch(new V.a(n)),this.snackbarService.error(this.utilsService.formatErrorMessage(t)),Object(L.a)(t)}))}getExperimentInterimResults(e,{payload:t}){if(!t)return;const n=e.getState(),r=t.label||n.interimExperiment.selectedLabel;return n.intermResults&&n.intermResults.length?this.service.getExperimentInterimResults(t.eid,r).pipe(Object(N.a)(t=>{if(t){const n=t;n.multResLabels&&n.multResLabels.length&&n.multResLabels.push(\"score\"),e.patchState({interimExperiment:Object.assign(Object.assign({},n),{selectedLabel:r||(n.multResLabels&&n.multResLabels.length?n.multResLabels[n.multResLabels.length-1]:null)})})}}),Object(P.a)(e=>{const t={type:Z.a.ERROR,receivedAt:(new Date).getTime(),message:this.utilsService.formatErrorMessage(e)};return this.store.dispatch(new V.a(t)),this.snackbarService.error(this.utilsService.formatErrorMessage(e)),Object(L.a)(e)})):void 0}setInterimExperiment(e,{payload:t}){t&&e.patchState({interimExperiment:t})}createExperiment(e,{payload:t}){if(t)return this.service.createExperiment(t).pipe(Object(N.a)(e=>{if(e){const e=\"Experiment created!\",t={type:Z.a.SUCCESS,receivedAt:(new Date).getTime(),message:e};return this.store.dispatch(new V.a(t)),this.snackbarService.success(e),void this.store.dispatch(new M.a([\"/list\"]))}}),Object(P.a)(e=>{const t={type:Z.a.ERROR,receivedAt:(new Date).getTime(),message:this.utilsService.formatErrorMessage(e)};return this.store.dispatch(new V.a(t)),this.snackbarService.error(this.utilsService.formatErrorMessage(e)),Object(L.a)(e)}))}deleteExperiment(e,{payload:t}){const n=e.getState();if(t)return this.service.deleteExperiment(t).pipe(Object(N.a)(()=>{const r=n.experiments.slice(),i=r.findIndex(e=>e.eid===t);if(-1!==i){r.splice(i,1);const t=\"Experiment deleted!\",n={type:Z.a.SUCCESS,receivedAt:(new Date).getTime(),message:t};this.store.dispatch(new V.a(n)),this.snackbarService.success(t),e.patchState({experiments:r})}}),Object(P.a)(e=>{const t={type:Z.a.ERROR,receivedAt:(new Date).getTime(),message:this.utilsService.formatErrorMessage(e)};return this.store.dispatch(new V.a(t)),this.snackbarService.error(this.utilsService.formatErrorMessage(e)),Object(L.a)(e)}))}refreshAll(e){return this.service.refreshAll().pipe(Object(P.a)(e=>{const t={type:Z.a.ERROR,receivedAt:(new Date).getTime(),message:this.utilsService.formatErrorMessage(e)};return this.store.dispatch(new V.a(t)),this.snackbarService.error(this.utilsService.formatErrorMessage(e)),Object(L.a)(e)}))}};return e.\\u0275fac=function(t){return new(t||e)(K.hc(Y),K.hc(U.a),K.hc(J.a),K.hc(Q.c),K.hc(o.i))},e.\\u0275prov=K.Tb({token:e,factory:e.\\u0275fac}),Object(s.b)([Object(o.a)(_)],e.prototype,\"toggleSideNav\",null),Object(s.b)([Object(o.a)(y)],e.prototype,\"setRefreshInterval\",null),Object(s.b)([Object(o.a)(B)],e.prototype,\"setExperimentDisplayView\",null),Object(s.b)([Object(o.a)(w)],e.prototype,\"refreshInterval\",null),Object(s.b)([Object(o.a)(f)],e.prototype,\"getExperiments\",null),Object(s.b)([Object(o.a)(g)],e.prototype,\"getExperiment\",null),Object(s.b)([Object(o.a)(p)],e.prototype,\"getHyperparameters\",null),Object(s.b)([Object(o.a)(m)],e.prototype,\"getJobStatus\",null),Object(s.b)([Object(o.a)(O)],e.prototype,\"changeJobsGraphForLabel\",null),Object(s.b)([Object(o.a)(C)],e.prototype,\"getExperimentHistory\",null),Object(s.b)([Object(o.a)(b)],e.prototype,\"getMetricVsHparams\",null),Object(s.b)([Object(o.a)(S)],e.prototype,\"startExperiment\",null),Object(s.b)([Object(o.a)(x)],e.prototype,\"stopExperiment\",null),Object(s.b)([Object(o.a)(E)],e.prototype,\"setupDatabase\",null),Object(s.b)([Object(o.a)(v)],e.prototype,\"getInterimResults\",null),Object(s.b)([Object(o.a)(A)],e.prototype,\"getExperimentInterimResults\",null),Object(s.b)([Object(o.a)(I)],e.prototype,\"setInterimExperiment\",null),Object(s.b)([Object(o.a)(k)],e.prototype,\"createExperiment\",null),Object(s.b)([Object(o.a)(R)],e.prototype,\"deleteExperiment\",null),Object(s.b)([Object(o.a)(T)],e.prototype,\"refreshAll\",null),Object(s.b)([Object(o.f)()],e,\"loadingExperiment\",null),Object(s.b)([Object(o.f)()],e,\"loadingAllExperiments\",null),Object(s.b)([Object(o.f)()],e,\"loadingIntermResults\",null),Object(s.b)([Object(o.f)()],e,\"experimentsMultiplier\",null),Object(s.b)([Object(o.f)()],e,\"refreshInterval\",null),Object(s.b)([Object(o.f)()],e,\"refreshIntervalOptions\",null),Object(s.b)([Object(o.f)()],e,\"refreshingInterval\",null),Object(s.b)([Object(o.f)()],e,\"experiments\",null),Object(s.b)([Object(o.f)()],e,\"selectedExperiment\",null),Object(s.b)([Object(o.f)()],e,\"resources\",null),Object(s.b)([Object(o.f)()],e,\"hyperparameters\",null),Object(s.b)([Object(o.f)()],e,\"metricsVsHparams\",null),Object(s.b)([Object(o.f)()],e,\"parallelCoordinatesTrace\",null),Object(s.b)([Object(o.f)()],e,\"jobs\",null),Object(s.b)([Object(o.f)()],e,\"jobMultipleResulsLabels\",null),Object(s.b)([Object(o.f)()],e,\"jobMultipleResulsSelectedLabel\",null),Object(s.b)([Object(o.f)()],e,\"jobsGraphData\",null),Object(s.b)([Object(o.f)()],e,\"jobsOptimizationGraphData\",null),Object(s.b)([Object(o.f)()],e,\"sidenavOpen\",null),Object(s.b)([Object(o.f)()],e,\"intermResults\",null),Object(s.b)([Object(o.f)()],e,\"interimExperiment\",null),Object(s.b)([Object(o.f)()],e,\"interimExperimentJobs\",null),Object(s.b)([Object(o.f)()],e,\"interimExperimentMultResLabels\",null),Object(s.b)([Object(o.f)()],e,\"interimExperimentSelectedLabel\",null),Object(s.b)([Object(o.f)()],e,\"navItems\",null),Object(s.b)([Object(o.f)()],e,\"experimentViewType\",null),e=Object(s.b)([Object(o.g)({name:\"experiment\",defaults:{experiments:[],firstValidJobNumber:null,intermResults:null,interimExperiment:null,experimentsMultiplier:1,resources:[],selectedExperiment:null,hyperparameters:null,jobStatusSortCriteria:{sortby:\"jid\",asc:1},jobs:[],jobsGraphData:null,jobsOptimizationGraphData:null,jobsMultipleResults:{labels:[],selectedLabel:null},jobsMultiplier:1,metricsVsHparams:null,parallelCoordinatesTrace:null,refreshIntervalOptions:[5,10,30,60],refreshInterval:60,refreshingInterval:!1,sidenavOpen:null===localStorage.getItem(\"sidenavOpen\")||void 0===localStorage.getItem(\"sidenavOpen\")||JSON.parse(localStorage.getItem(\"sidenavOpen\")),navItems:j,loadingExperiment:!1,loadingAllExperiments:!1,loadingIntermResults:!1,experimentViewType:localStorage.getItem(\"experimentViewType\")||z.LIST}})],e),e})();var ee=n(\"JX91\"),te=n(\"AytR\"),ne=n(\"dhIe\"),re=n(\"d4xE\"),ie=n(\"SUpr\"),se=n(\"/t3+\"),oe=n(\"XiUz\"),ae=n(\"bTqV\"),ce=n(\"NFeN\"),le=n(\"STbY\"),he=n(\"TU8p\"),de=n(\"3Pt+\"),ue=n(\"XhcP\"),fe=n(\"kmnG\"),ge=n(\"d3UM\"),pe=n(\"jaxi\"),me=n(\"FKr1\"),Ce=n(\"Qu3c\");function be(e,t){if(1&e&&(K.dc(0,\"mat-option\",9),K.Oc(1),K.qc(2,\"flu\"),K.cc()),2&e){const e=t.$implicit;K.vc(\"value\",e),K.Lb(1),K.Qc(\" \",K.rc(2,2,e),\" \")}}function ve(e,t){if(1&e&&(K.dc(0,\"div\",21),K.dc(1,\"mat-icon\"),K.Oc(2),K.qc(3,\"notifyIcon\"),K.cc(),K.dc(4,\"span\"),K.Oc(5),K.cc(),K.cc()),2&e){const e=K.pc().$implicit;K.Lb(1),K.Nb(\"color-\"+e.type.toLowerCase()),K.Lb(1),K.Qc(\"\",K.rc(3,4,e.type),\" \"),K.Lb(3),K.Pc(e.type)}}function Ie(e,t){if(1&e&&(K.dc(0,\"div\",22),K.Oc(1),K.cc()),2&e){const e=K.pc().$implicit;K.Lb(1),K.Pc(e.message)}}function Ae(e,t){if(1&e&&(K.dc(0,\"div\"),K.Oc(1),K.qc(2,\"date\"),K.cc()),2&e){const e=K.pc().$implicit;K.Lb(1),K.Pc(K.sc(2,1,e.receivedAt,\"medium\"))}}function ye(e,t){if(1&e){const e=K.ec();K.bc(0),K.dc(1,\"div\",16),K.Mc(2,ve,6,6,\"div\",17),K.Mc(3,Ie,2,1,\"div\",18),K.Mc(4,Ae,3,4,\"div\",19),K.dc(5,\"div\"),K.dc(6,\"mat-icon\",20),K.lc(\"click\",(function(){K.Ec(e);const n=t.$implicit;return K.pc(2).removeNotification(n)})),K.Oc(7,\"delete\"),K.cc(),K.cc(),K.cc(),K.Yb(8,\"hr\"),K.ac()}if(2&e){const e=t.$implicit;K.Lb(2),K.vc(\"ngIf\",e.type),K.Lb(1),K.vc(\"ngIf\",e.message),K.Lb(1),K.vc(\"ngIf\",e.receivedAt)}}function we(e,t){if(1&e&&(K.dc(0,\"div\",14),K.Yb(1,\"hr\"),K.Mc(2,ye,9,3,\"ng-container\",15),K.cc()),2&e){const e=K.pc();K.Lb(2),K.vc(\"ngForOf\",e.notifications)}}let Se=(()=>{class e{constructor(e,t,n,r){this.store=e,this.cdRef=t,this.helperService=n,this.utilsService=r,this.COLUMNS={TYPE:\"Type\",MESSAGE:\"Message\",RECEIVED:\"Received at\"},this.pageSize=5,this.page=1,this.NOTIFICATION_TYPE=Z.a,this.sortOptions=[this.COLUMNS.TYPE,this.COLUMNS.MESSAGE,this.COLUMNS.RECEIVED],this.sortOption=new de.e(this.COLUMNS.RECEIVED),this.sortDirectionType=\"desc\",this.sortDirections=[\"asc\",\"desc\"]}ngOnInit(){this.subscriptions=new a.a,this.subscriptions.add(this.notifications$.subscribe(e=>{this.notifications=e&&e.length?e.slice().sort((e,t)=>this.utilsService.compare(e.receivedAt,t.receivedAt,!1)):null,this.cdRef.markForCheck()}))}ngOnDestroy(){this.subscriptions.unsubscribe()}removeNotification(e){e&&this.store.dispatch(new V.f(e))}removeAllNotifications(){this.store.dispatch(new V.e),this.helperService.redirectTo(\"list\")}onSortOption(e){e.value&&this.sortData({active:e.value,direction:this.sortDirectionType})}onSortDirection(e){e.value&&(this.sortDirectionType=e.value,this.sortData({active:this.sortOption.value,direction:e.value}))}sortData(e){const t=this.notifications.slice();this.notifications=e.active&&\"\"!==e.direction?t.sort((t,n)=>{const r=\"asc\"===e.direction;switch(e.active){case this.COLUMNS.TYPE:return this.utilsService.compare(t.type,n.type,r);case this.COLUMNS.MESSAGE:return this.utilsService.compare(t.message,n.message,r);case this.COLUMNS.RECEIVED:return this.utilsService.compare(t.receivedAt,n.receivedAt,r);default:return 0}}):t}}return e.\\u0275fac=function(t){return new(t||e)(K.Xb(o.i),K.Xb(K.j),K.Xb(Q.a),K.Xb(Q.c))},e.\\u0275cmp=K.Rb({type:e,selectors:[[\"app-notification\"]],decls:22,vars:8,consts:[[1,\"h-vh\",\"w-full\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"start center\",1,\"w-full\",\"h-full\",\"p-5\"],[\"fxLayout\",\"column\",1,\"notifications-container\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"space-between center\",\"fxLayoutGap\",\"20px\",1,\"w-full\",\"mb-4\"],[\"fxLayoutAlign\",\"center\",\"fxLayoutGap\",\"10px\"],[\"appearance\",\"outline\"],[\"name\",\"sortOption\",3,\"formControl\",\"selectionChange\"],[3,\"value\",4,\"ngFor\",\"ngForOf\"],[\"name\",\"fontStyle\",1,\"sort-toggle\",\"mt-1\",3,\"value\",\"change\"],[3,\"value\"],[3,\"color\"],[\"type\",\"button\",\"mat-button\",\"\",1,\"mb-5\",3,\"click\"],[1,\"mr-3\"],[\"class\",\"mb-3\",4,\"ngIf\"],[1,\"mb-3\"],[4,\"ngFor\",\"ngForOf\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"space-between center\",1,\"notification\",\"py-4\"],[\"class\",\"type\",\"fxLayoutAlign\",\"start center\",\"fxLayoutGap\",\"5px\",4,\"ngIf\"],[\"class\",\"message mx-3\",4,\"ngIf\"],[4,\"ngIf\"],[\"matTooltip\",\"Remove notification\",1,\"actionable-warn\",3,\"click\"],[\"fxLayoutAlign\",\"start center\",\"fxLayoutGap\",\"5px\",1,\"type\"],[1,\"message\",\"mx-3\"]],template:function(e,t){1&e&&(K.dc(0,\"mat-drawer-container\",0),K.dc(1,\"div\",1),K.dc(2,\"div\",2),K.dc(3,\"div\",3),K.dc(4,\"div\",4),K.dc(5,\"mat-form-field\",5),K.dc(6,\"mat-label\"),K.Oc(7,\"Sort by\"),K.cc(),K.dc(8,\"mat-select\",6),K.lc(\"selectionChange\",(function(e){return t.onSortOption(e)})),K.Mc(9,be,3,4,\"mat-option\",7),K.cc(),K.cc(),K.dc(10,\"mat-button-toggle-group\",8),K.lc(\"change\",(function(e){return t.onSortDirection(e)})),K.dc(11,\"mat-button-toggle\",9),K.dc(12,\"mat-icon\",10),K.Oc(13,\"north\"),K.cc(),K.cc(),K.dc(14,\"mat-button-toggle\",9),K.dc(15,\"mat-icon\",10),K.Oc(16,\"south\"),K.cc(),K.cc(),K.cc(),K.cc(),K.dc(17,\"button\",11),K.lc(\"click\",(function(){return t.removeAllNotifications()})),K.dc(18,\"mat-icon\",12),K.Oc(19,\"delete_sweep\"),K.cc(),K.Oc(20,\" Clear all \"),K.cc(),K.cc(),K.Mc(21,we,3,1,\"div\",13),K.cc(),K.cc(),K.cc()),2&e&&(K.Lb(8),K.vc(\"formControl\",t.sortOption),K.Lb(1),K.vc(\"ngForOf\",t.sortOptions),K.Lb(1),K.vc(\"value\",t.sortDirectionType),K.Lb(1),K.vc(\"value\",t.sortDirections[0]),K.Lb(1),K.vc(\"color\",t.sortDirectionType===t.sortDirections[0]?\"primary\":\"\"),K.Lb(2),K.vc(\"value\",t.sortDirections[1]),K.Lb(1),K.vc(\"color\",t.sortDirectionType===t.sortDirections[1]?\"primary\":\"\"),K.Lb(6),K.vc(\"ngIf\",t.notifications&&t.notifications.length))},directives:[ue.b,oe.d,oe.c,oe.e,fe.c,fe.g,ge.a,de.n,de.f,r.n,pe.b,pe.a,ce.a,ae.b,r.o,me.m,Ce.a],pipes:[W.a,H.a,r.e],styles:[\".notifications-container[_ngcontent-%COMP%]{min-width:700px;max-height:500px}.mat-column-Message[_ngcontent-%COMP%]{max-width:500px!important}[class^=mat-column-][_ngcontent-%COMP%]{padding-right:10px!important}.notification[_ngcontent-%COMP%]   .type[_ngcontent-%COMP%]{width:100px}.notification[_ngcontent-%COMP%]   .message[_ngcontent-%COMP%]{width:300px;word-wrap:break-word}\"],changeDetection:0}),Object(s.b)([Object(o.e)(ne.a.notifications)],e.prototype,\"notifications$\",void 0),e})();var xe=n(\"znSr\");function Ee(e,t){1&e&&(K.dc(0,\"a\",18),K.Yb(1,\"img\",19),K.cc()),2&e&&(K.Lb(1),K.vc(\"src\",\"assets/images/Auptimizer-dark.png\",K.Fc))}function ke(e,t){if(1&e&&(K.dc(0,\"mat-option\",23),K.Oc(1),K.cc()),2&e){const e=t.$implicit;K.vc(\"value\",e),K.Lb(1),K.Qc(\"\",e,\" seconds \")}}function _e(e,t){if(1&e){const e=K.ec();K.dc(0,\"mat-form-field\",20),K.dc(1,\"mat-label\"),K.Oc(2,\"Refresh every\"),K.cc(),K.dc(3,\"mat-select\",21),K.lc(\"selectionChange\",(function(t){return K.Ec(e),K.pc().changeRefreshInverval(t)})),K.qc(4,\"async\"),K.Mc(5,ke,2,2,\"mat-option\",22),K.cc(),K.cc()}if(2&e){const e=t.ngIf,n=K.pc();K.Lb(3),K.vc(\"value\",K.rc(4,2,n.refreshInterval$)),K.Lb(2),K.vc(\"ngForOf\",e)}}function Te(e,t){if(1&e){const e=K.ec();K.dc(0,\"button\",5),K.lc(\"click\",(function(){return K.Ec(e),K.pc().setTheme()})),K.dc(1,\"mat-icon\",6),K.Oc(2),K.cc(),K.Oc(3),K.qc(4,\"flu\"),K.cc()}if(2&e){const e=K.pc();K.Lb(2),K.Pc(e.currentTheme.icon),K.Lb(1),K.Qc(\"\",K.rc(4,2,e.currentTheme.name),\" mode \")}}function Re(e,t){if(1&e&&(K.dc(0,\"span\"),K.Oc(1),K.cc()),2&e){const e=K.pc();K.Lb(1),K.Qc(\"v\",e.version,\"\")}}let Be=(()=>{class e{constructor(e,t,n,r){this.store=e,this.colorSchemeService=t,this.helperService=n,this.cdRef=r,this.THEME_OPTION=re.a,this.currentTheme={name:null,icon:null}}ngOnInit(){this.subscriptions=new a.a,this.version=te.a.version,this.subscriptions.add(this.themes$.subscribe(e=>{this.themes=e})),this.subscriptions.add(this.theme$.subscribe(e=>{this.currentTheme=e})),this.subscriptions.add(this.notifications$.subscribe(e=>{e&&(this.notifications=e,this.cdRef.markForCheck())})),this.subscriptions.add(this.theme$.subscribe(e=>{this.currentTheme=e}))}ngOnDestroy(){this.subscriptions.unsubscribe()}changeRefreshInverval(e){e.value&&this.store.dispatch(new y(e.value))}onRefresh(){this.store.dispatch(new w(!0))}setTheme(){this.themes&&this.themes.length&&(this.currentTheme=this.currentTheme===this.themes[0]?this.themes[1]:this.themes[0],this.store.dispatch(new V.b(this.currentTheme)))}onToggleSideNav(){this.store.dispatch(new _)}}return e.\\u0275fac=function(t){return new(t||e)(K.Xb(o.i),K.Xb(ie.a),K.Xb(Q.a),K.Xb(K.j))},e.\\u0275cmp=K.Rb({type:e,selectors:[[\"app-header\"]],decls:27,vars:10,consts:[[\"color\",\"primary\",\"fxLayout\",\"row\",\"fxLayoutAlign\",\"space-between center\",1,\"header-font\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"center center\"],[\"fxHide.lt-md\",\"\",\"routerLink\",\"/\",\"class\",\"logo-container\",4,\"ngIf\"],[\"fxLayout\",\"row\",\"fxLayoutGap\",\"40px\",\"fxLayoutGap.md\",\"15px\",\"fxLayoutGap.lt-md\",\"15px\",\"fxLayoutAlign\",\"center center\"],[\"class\",\"mt-5 refresh-interval-select\",\"appearance\",\"outline\",4,\"ngIf\"],[\"mat-button\",\"\",1,\"header-font\",3,\"click\"],[1,\"mr-3\"],[\"mat-icon-button\",\"\",3,\"disabled\",\"matMenuTriggerFor\"],[\"matBadgeColor\",\"warn\",3,\"matBadgeHidden\",\"matBadge\"],[\"mat-button\",\"\",\"class\",\"header-font\",3,\"click\",4,\"ngIf\"],[\"fxLayoutAlign\",\"center center\"],[4,\"ngIf\"],[\"xPosition\",\"before\"],[\"notificationMenu\",\"matMenu\"],[1,\"notification-menu\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"end center\",1,\"w-full\"],[\"mat-icon-button\",\"\"],[3,\"click\"],[\"fxHide.lt-md\",\"\",\"routerLink\",\"/\",1,\"logo-container\"],[3,\"src\"],[\"appearance\",\"outline\",1,\"mt-5\",\"refresh-interval-select\"],[3,\"value\",\"selectionChange\"],[3,\"value\",4,\"ngFor\",\"ngForOf\"],[3,\"value\"]],template:function(e,t){if(1&e&&(K.dc(0,\"mat-toolbar\",0),K.dc(1,\"div\",1),K.Mc(2,Ee,2,1,\"a\",2),K.cc(),K.dc(3,\"div\",3),K.dc(4,\"div\",1),K.Mc(5,_e,6,4,\"mat-form-field\",4),K.qc(6,\"async\"),K.cc(),K.dc(7,\"button\",5),K.lc(\"click\",(function(){return t.onRefresh()})),K.dc(8,\"mat-icon\",6),K.Oc(9,\"cached\"),K.cc(),K.Oc(10,\"Refresh now \"),K.cc(),K.dc(11,\"button\",7),K.dc(12,\"mat-icon\",8),K.Oc(13,\" notifications\"),K.cc(),K.cc(),K.Mc(14,Te,5,4,\"button\",9),K.dc(15,\"div\",10),K.dc(16,\"span\"),K.Oc(17,\"Version:\\xa0\"),K.cc(),K.Mc(18,Re,2,1,\"span\",11),K.cc(),K.cc(),K.cc(),K.dc(19,\"mat-menu\",12,13),K.dc(21,\"mat-toolbar\",14),K.dc(22,\"div\",15),K.dc(23,\"button\",16),K.dc(24,\"mat-icon\"),K.Oc(25,\"close\"),K.cc(),K.cc(),K.cc(),K.cc(),K.dc(26,\"app-notification\",17),K.lc(\"click\",(function(e){return e.stopPropagation()})),K.cc(),K.cc()),2&e){const e=K.Bc(20);K.Lb(2),K.vc(\"ngIf\",null==t.currentTheme?null:t.currentTheme.name),K.Lb(3),K.vc(\"ngIf\",K.rc(6,8,t.refreshIntervalOptions$)),K.Lb(6),K.vc(\"disabled\",!(null!=t.notifications&&t.notifications.length))(\"matMenuTriggerFor\",e),K.Lb(1),K.vc(\"matBadgeHidden\",!(null!=t.notifications&&t.notifications.length))(\"matBadge\",null==t.notifications?null:t.notifications.length),K.Lb(2),K.vc(\"ngIf\",t.currentTheme),K.Lb(4),K.vc(\"ngIf\",t.version)}},directives:[se.a,oe.d,oe.c,r.o,oe.e,ae.b,ce.a,le.d,he.a,le.a,Se,i.i,xe.b,fe.c,fe.g,ge.a,r.n,me.m],pipes:[r.b,W.a],styles:[\"[_nghost-%COMP%]   .logo-container[_ngcontent-%COMP%] > img[_ngcontent-%COMP%]{height:35px}  .mat-menu-panel{max-width:none!important}  .mat-menu-content:not(:empty){padding:0!important}  .mat-form-field-infix{padding:10px!important}.notification-menu[_ngcontent-%COMP%]{height:50px}.header-font[_ngcontent-%COMP%]{font-size:15px}\"],changeDetection:0}),Object(s.b)([Object(o.e)(ne.a.themes)],e.prototype,\"themes$\",void 0),Object(s.b)([Object(o.e)(ne.a.theme)],e.prototype,\"theme$\",void 0),Object(s.b)([Object(o.e)(ne.a.notifications)],e.prototype,\"notifications$\",void 0),Object(s.b)([Object(o.e)(q.refreshInterval)],e.prototype,\"refreshInterval$\",void 0),Object(s.b)([Object(o.e)(q.refreshIntervalOptions)],e.prototype,\"refreshIntervalOptions$\",void 0),Object(s.b)([Object(o.e)(q.sidenavOpen)],e.prototype,\"sidenavOpen$\",void 0),e})(),Oe=(()=>{class e{constructor(e,t,n,r){this.store=e,this.route=t,this.router=n,this.snackbarService=r}ngOnInit(){this.subscriptions=new a.a,this.subscriptions.add(this.refreshInterval$.subscribe(e=>{e&&(this.refreshIntervalSubscription&&e!==this.refreshInterval&&this.refreshIntervalSubscription.unsubscribe(),this.refreshInterval=e,this.refreshIntervalSubscription=this.refreshIntervalData().subscribe())})),this.subscriptions.add(this.refreshingInterval$.subscribe(e=>{e&&(this.refreshData(),this.snackbarService.success(\"Data refreshed!\"),this.store.dispatch(new w(!1)))})),this.subscriptions.add(this.interimExperiment$.subscribe(e=>{e&&(this.interimExperiment=e)}))}ngOnDestroy(){this.subscriptions.unsubscribe(),this.refreshIntervalSubscription&&this.refreshIntervalSubscription.unsubscribe()}refreshIntervalData(){if(this.refreshInterval)return d(1e3*this.refreshInterval).pipe(Object(ee.a)(0),Object(F.a)(()=>{console.log(\"Fetching data...\"),this.refreshData()}))}refreshData(){this.store.dispatch(new f),this.store.dispatch(new T),this.interimExperiment&&this.store.dispatch(new A({eid:this.interimExperiment.eid}))}}return e.\\u0275fac=function(t){return new(t||e)(K.Xb(o.i),K.Xb(i.a),K.Xb(i.g),K.Xb(Q.b))},e.\\u0275cmp=K.Rb({type:e,selectors:[[\"app-main\"]],decls:6,vars:0,consts:[[1,\"main-container\",\"text-primary\"],[1,\"main\"],[1,\"h-vh\",\"w-full\"]],template:function(e,t){1&e&&(K.dc(0,\"div\",0),K.Yb(1,\"app-header\"),K.dc(2,\"div\",1),K.dc(3,\"mat-drawer-container\",2),K.dc(4,\"mat-drawer-content\"),K.Yb(5,\"router-outlet\"),K.cc(),K.cc(),K.cc(),K.cc())},directives:[Be,ue.b,ue.c,i.k],styles:[\"[_nghost-%COMP%]   .main-container[_ngcontent-%COMP%]{height:calc(100vh - 64px)}[_nghost-%COMP%]   .logo-container[_ngcontent-%COMP%] > img[_ngcontent-%COMP%]{height:35px}[_nghost-%COMP%]   mat-drawer[_ngcontent-%COMP%]{width:300px}[_nghost-%COMP%]   mat-drawer[_ngcontent-%COMP%]   mat-toolbar[_ngcontent-%COMP%]   mat-icon[_ngcontent-%COMP%]{font-size:40px;width:40px;height:40px}[_nghost-%COMP%]   mat-drawer[_ngcontent-%COMP%]   mat-toolbar[_ngcontent-%COMP%]   span[_ngcontent-%COMP%]{font-size:35px;font-weight:200}[_nghost-%COMP%]   mat-drawer[_ngcontent-%COMP%]   .side-nav-content[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]{padding:10px;font-size:20px;font-weight:400;text-align:center;line-height:1.5;width:100%}[_nghost-%COMP%]   .refresh-interval[_ngcontent-%COMP%]{width:150px;font-size:18px;margin-top:10px}[_nghost-%COMP%]   .version[_ngcontent-%COMP%]{font-size:15px;font-weight:400}[_nghost-%COMP%]   .h-vh[_ngcontent-%COMP%]{height:calc(100vh - 64px)}\"]}),Object(s.b)([Object(o.e)(q.refreshInterval)],e.prototype,\"refreshInterval$\",void 0),Object(s.b)([Object(o.e)(q.refreshingInterval)],e.prototype,\"refreshingInterval$\",void 0),Object(s.b)([Object(o.e)(q.interimExperiment)],e.prototype,\"interimExperiment$\",void 0),e})();var Le=n(\"R0Ic\"),Pe=n(\"MutI\");function Fe(e,t){if(1&e&&(K.dc(0,\"mat-icon\",6),K.Oc(1),K.cc()),2&e){const e=K.pc(2);K.Lb(1),K.Qc(\"\",null==e.navItem?null:e.navItem.iconName,\" \")}}function Ne(e,t){if(1&e&&(K.dc(0,\"span\",7),K.qc(1,\"async\"),K.Oc(2),K.cc()),2&e){const e=K.pc(2);K.vc(\"ngClass\",!1===K.rc(1,2,e.sidenavOpen$)?\"hidden\":\"\"),K.Lb(2),K.Pc(null==e.navItem?null:e.navItem.displayName)}}function Me(e,t){if(1&e&&(K.dc(0,\"span\",8),K.Yb(1,\"span\",8),K.dc(2,\"mat-icon\"),K.Oc(3,\" expand_more \"),K.cc(),K.cc()),2&e){const e=K.pc(2);K.Lb(2),K.vc(\"@indicatorRotate\",e.expanded?\"expanded\":\"collapsed\")}}const De=function(e){return{\"padding-left\":e}},$e=function(e){return{expanded:e}},We=function(){return{exact:!0}};function He(e,t){if(1&e){const e=K.ec();K.dc(0,\"a\",2),K.lc(\"click\",(function(){K.Ec(e);const t=K.pc();return t.onItemSelected(t.navItem)})),K.qc(1,\"async\"),K.Mc(2,Fe,2,1,\"mat-icon\",3),K.Mc(3,Ne,3,4,\"span\",4),K.Mc(4,Me,4,1,\"span\",5),K.cc()}if(2&e){const e=K.pc();K.vc(\"ngStyle\",K.yc(12,De,12*e.depth+\"px\"))(\"ngClass\",K.yc(14,$e,e.expanded))(\"routerLink\",\"\"!==(null==e.navItem?null:e.navItem.route)?null==e.navItem?null:e.navItem.route:null)(\"routerLinkActive\",\"\"!==(null==e.navItem?null:e.navItem.route)?\"menu-list-item--active\":\"\")(\"routerLinkActiveOptions\",K.xc(16,We))(\"disabled\",e.navItem.disabled)(\"matTooltip\",!1===K.rc(1,10,e.sidenavOpen$)?e.navItem.tooltip:\"\"),K.Lb(2),K.vc(\"ngIf\",e.navItem.iconName),K.Lb(1),K.vc(\"ngIf\",e.navItem.displayName),K.Lb(1),K.vc(\"ngIf\",(null==e.navItem?null:e.navItem.children)&&(null==e.navItem?null:e.navItem.children.length))}}function Ge(e,t){if(1&e&&K.Yb(0,\"app-sidenav-element\",10),2&e){const e=t.$implicit,n=K.pc(2);K.vc(\"navItem\",e)(\"depth\",n.depth+1)}}function Ve(e,t){if(1&e&&(K.dc(0,\"div\"),K.Mc(1,Ge,1,2,\"app-sidenav-element\",9),K.cc()),2&e){const e=K.pc();K.Lb(1),K.vc(\"ngForOf\",e.navItem.children)}}let je=(()=>{class e{constructor(){this.depth=0,this.expanded=!1}onItemSelected(e){e.children&&e.children.length&&(this.expanded=!this.expanded)}}return e.\\u0275fac=function(t){return new(t||e)},e.\\u0275cmp=K.Rb({type:e,selectors:[[\"app-sidenav-element\"]],inputs:{navItem:\"navItem\",depth:\"depth\"},decls:2,vars:2,consts:[[\"mat-list-item\",\"\",\"fxLayout\",\"\",\"fxLayoutAlign\",\"left center\",\"class\",\"menu-list-item my-2 h-15\",3,\"ngStyle\",\"ngClass\",\"routerLink\",\"routerLinkActive\",\"routerLinkActiveOptions\",\"disabled\",\"matTooltip\",\"click\",4,\"ngIf\"],[4,\"ngIf\"],[\"mat-list-item\",\"\",\"fxLayout\",\"\",\"fxLayoutAlign\",\"left center\",1,\"menu-list-item\",\"my-2\",\"h-15\",3,\"ngStyle\",\"ngClass\",\"routerLink\",\"routerLinkActive\",\"routerLinkActiveOptions\",\"disabled\",\"matTooltip\",\"click\"],[\"class\",\"mr-10\",\"fxLayout\",\"\",\"fxLayoutAlign\",\"right center\",4,\"ngIf\"],[3,\"ngClass\",4,\"ngIf\"],[\"fxFlex\",\"\",4,\"ngIf\"],[\"fxLayout\",\"\",\"fxLayoutAlign\",\"right center\",1,\"mr-10\"],[3,\"ngClass\"],[\"fxFlex\",\"\"],[3,\"navItem\",\"depth\",4,\"ngFor\",\"ngForOf\"],[3,\"navItem\",\"depth\"]],template:function(e,t){1&e&&(K.Mc(0,He,5,17,\"a\",0),K.Mc(1,Ve,2,1,\"div\",1)),2&e&&(K.vc(\"ngIf\",t.navItem),K.Lb(1),K.vc(\"ngIf\",t.expanded))},directives:[r.o,Pe.a,i.i,oe.d,oe.c,r.p,xe.c,r.m,xe.a,i.h,Ce.a,ce.a,oe.b,r.n,e],pipes:[r.b],styles:[\"[_nghost-%COMP%]{display:flex;flex-direction:column;outline:none;width:100%}[_nghost-%COMP%]   .menu-list-item[_ngcontent-%COMP%]{margin-right:10px;margin-left:10px;width:auto}[_nghost-%COMP%]     .mat-list-item-content{width:100%}[_nghost-%COMP%]   .hidden[_ngcontent-%COMP%]{visibility:hidden}\"],data:{animation:[Object(Le.m)(\"indicatorRotate\",[Object(Le.j)(\"collapsed\",Object(Le.k)({transform:\"rotate(0deg)\"})),Object(Le.j)(\"expanded\",Object(Le.k)({transform:\"rotate(180deg)\"})),Object(Le.l)(\"expanded <=> collapsed\",Object(Le.e)(\"225ms cubic-bezier(0.4,0.0,0.2,1)\"))])]}}),Object(s.b)([Object(o.e)(q.sidenavOpen)],e.prototype,\"sidenavOpen$\",void 0),e})();function Ze(e,t){1&e&&K.Yb(0,\"app-sidenav-element\",2),2&e&&K.vc(\"navItem\",t.$implicit)}function ze(e,t){1&e&&(K.dc(0,\"div\",8),K.dc(1,\"mat-icon\",9),K.Oc(2,\"menu_open\"),K.cc(),K.dc(3,\"span\"),K.Oc(4,\"Close menu\"),K.cc(),K.cc())}function Ke(e,t){1&e&&(K.dc(0,\"div\",8),K.dc(1,\"mat-icon\"),K.Oc(2,\"menu\"),K.cc(),K.cc())}let Xe=(()=>{class e{constructor(e){this.store=e,this.listElement={displayName:\"Experiments\",route:\"/list\",iconName:\"west\",tooltip:\"Experiment list\"}}onToggleSideNav(){this.store.dispatch(new _)}}return e.\\u0275fac=function(t){return new(t||e)(K.Xb(o.i))},e.\\u0275cmp=K.Rb({type:e,selectors:[[\"app-sidenav\"]],inputs:{sideNavElements:\"sideNavElements\"},decls:11,vars:8,consts:[[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"space-between center\",1,\"h-full\",\"w-full\"],[1,\"w-full\"],[3,\"navItem\"],[1,\"mx-5\"],[3,\"navItem\",4,\"ngFor\",\"ngForOf\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"center center\",1,\"w-full\",\"close-menu-container\"],[\"mat-raised-button\",\"\",1,\"w-full\",3,\"click\"],[\"class\",\"close-menu-item w-full py-2\",\"fxLayoutAlign\",\"start center\",4,\"ngIf\"],[\"fxLayoutAlign\",\"start center\",1,\"close-menu-item\",\"w-full\",\"py-2\"],[\"fxLayout\",\"\",\"fxLayoutAlign\",\"right center\",1,\"mr-10\"]],template:function(e,t){1&e&&(K.dc(0,\"mat-nav-list\",0),K.dc(1,\"div\",1),K.Yb(2,\"app-sidenav-element\",2),K.Yb(3,\"hr\",3),K.Mc(4,Ze,1,1,\"app-sidenav-element\",4),K.cc(),K.dc(5,\"div\",5),K.dc(6,\"button\",6),K.lc(\"click\",(function(){return t.onToggleSideNav()})),K.Mc(7,ze,5,0,\"div\",7),K.qc(8,\"async\"),K.Mc(9,Ke,3,0,\"div\",7),K.qc(10,\"async\"),K.cc(),K.cc(),K.cc()),2&e&&(K.Lb(2),K.vc(\"navItem\",t.listElement),K.Lb(2),K.vc(\"ngForOf\",t.sideNavElements),K.Lb(3),K.vc(\"ngIf\",!0===K.rc(8,4,t.sidenavOpen$)),K.Lb(2),K.vc(\"ngIf\",!1===K.rc(10,6,t.sidenavOpen$)))},directives:[Pe.c,oe.d,oe.c,je,r.n,ae.b,r.o,ce.a],pipes:[r.b],styles:[\".close-menu-item[_ngcontent-%COMP%]{margin-right:10px;margin-left:10px;width:auto}.close-menu-container[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{height:52px}.hidden[_ngcontent-%COMP%]{visibility:hidden;width:0;transition:.5s}.mat-list-base[_ngcontent-%COMP%]{padding-top:0!important}\"]}),Object(s.b)([Object(o.e)(q.sidenavOpen)],e.prototype,\"sidenavOpen$\",void 0),e})(),Ue=(()=>{class e{constructor(e,t,n){this.store=e,this.route=t,this.router=n,this.isSidenavOpen=!0}ngOnInit(){this.subscription=new a.a,this.subscription.add(this.navItems$.subscribe(e=>{e&&e.length&&(this.sideNavElements=e)})),this.store.dispatch(new v)}ngOnDestroy(){this.subscription.unsubscribe()}}return e.\\u0275fac=function(t){return new(t||e)(K.Xb(o.i),K.Xb(i.a),K.Xb(i.g))},e.\\u0275cmp=K.Rb({type:e,selectors:[[\"app-experiment\"]],decls:9,vars:7,consts:[[1,\"mat-typography\",\"main-container\"],[\"mode\",\"side\",\"opened\",\"\"],[\"sidenav\",\"\"],[3,\"sideNavElements\"],[1,\"p-5\"]],template:function(e,t){1&e&&(K.dc(0,\"mat-drawer-container\",0),K.dc(1,\"mat-drawer\",1,2),K.qc(3,\"async\"),K.Yb(4,\"app-sidenav\",3),K.cc(),K.dc(5,\"mat-drawer-content\"),K.qc(6,\"async\"),K.dc(7,\"main\",4),K.Yb(8,\"router-outlet\"),K.cc(),K.cc(),K.cc()),2&e&&(K.Lb(1),K.vc(\"@sidenavVisibility\",K.rc(3,3,t.sidenavOpen$)),K.Lb(3),K.vc(\"sideNavElements\",t.sideNavElements),K.Lb(1),K.vc(\"@contentVisibility\",K.rc(6,5,t.sidenavOpen$)))},directives:[ue.b,ue.a,Xe,ue.c,i.k],pipes:[r.b],styles:[\"[_nghost-%COMP%]   .main-container[_ngcontent-%COMP%]{height:calc(100vh - 64px)}[_nghost-%COMP%]   .logo-container[_ngcontent-%COMP%] > img[_ngcontent-%COMP%]{height:35px}[_nghost-%COMP%]   #sidenav[_ngcontent-%COMP%], [_nghost-%COMP%]   mat-drawer[_ngcontent-%COMP%]{width:300px}[_nghost-%COMP%]   mat-drawer[_ngcontent-%COMP%]   mat-toolbar[_ngcontent-%COMP%]   mat-icon[_ngcontent-%COMP%]{font-size:40px;width:40px;height:40px}[_nghost-%COMP%]   mat-drawer[_ngcontent-%COMP%]   mat-toolbar[_ngcontent-%COMP%]   span[_ngcontent-%COMP%]{font-size:35px;font-weight:200}[_nghost-%COMP%]   mat-drawer[_ngcontent-%COMP%]   .side-nav-content[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]{padding:10px;font-size:20px;font-weight:400;text-align:center;line-height:1.5;width:100%}[_nghost-%COMP%]   .refresh-interval[_ngcontent-%COMP%]{width:150px;font-size:18px;margin-top:10px}[_nghost-%COMP%]   .version[_ngcontent-%COMP%]{font-size:15px;font-weight:400}\"],data:{animation:[Object(Le.m)(\"sidenavVisibility\",[Object(Le.j)(\"false\",Object(Le.k)({width:\"75px\"})),Object(Le.j)(\"true\",Object(Le.k)({width:\"250px\"})),Object(Le.l)(\"false => true\",Object(Le.e)(\"200ms ease-in\")),Object(Le.l)(\"true => false\",Object(Le.e)(\"200ms ease-in\"))]),Object(Le.m)(\"contentVisibility\",[Object(Le.j)(\"false\",Object(Le.k)({marginLeft:\"75px\"})),Object(Le.j)(\"true\",Object(Le.k)({marginLeft:\"250px\"})),Object(Le.l)(\"false => true\",Object(Le.e)(\"200ms ease-in\")),Object(Le.l)(\"true => false\",Object(Le.e)(\"200ms ease-in\"))])]}}),Object(s.b)([Object(o.e)(q.refreshInterval)],e.prototype,\"refreshInterval$\",void 0),Object(s.b)([Object(o.e)(q.refreshingInterval)],e.prototype,\"refreshingInterval$\",void 0),Object(s.b)([Object(o.e)(q.sidenavOpen)],e.prototype,\"sidenavOpen$\",void 0),Object(s.b)([Object(o.e)(q.navItems)],e.prototype,\"navItems$\",void 0),e})();var Ye=n(\"Dh3D\"),Je=n(\"+0xr\"),Qe=function(e){return e.CREATED=\"CREATED\",e.RUNNING=\"RUNNING\",e.STOPPED=\"STOPPED\",e.FINISHED=\"FINISHED\",e.FAILED=\"FAILED\",e.STOPPING=\"STOPPING\",e.REQUEST_STOP=\"REQUEST_STOP\",e}({}),qe=n(\"NXqw\"),et=n(\"Kj3r\"),tt=n(\"/uUt\"),nt=n(\"0IaG\"),rt=n(\"qFsG\"),it=n(\"oOf3\"),st=n(\"Xa2L\"),ot=n(\"Wp6s\"),at=n(\"M9IT\");const ct=[\"paginatorExperiment\"],lt=[\"paginatorResource\"],ht=[\"showConfigDialog\"],dt=[\"showErrorDialog\"],ut=[\"startExperimentDialog\"];function ft(e,t){if(1&e){const e=K.ec();K.dc(0,\"mat-icon\",36),K.lc(\"click\",(function(){return K.Ec(e),K.pc().clearSearch()})),K.Oc(1,\"clear \"),K.cc()}}function gt(e,t){1&e&&(K.dc(0,\"mat-icon\",37),K.Oc(1,\"search\"),K.cc())}function pt(e,t){if(1&e&&(K.dc(0,\"mat-option\",11),K.Oc(1),K.qc(2,\"flu\"),K.cc()),2&e){const e=t.$implicit;K.vc(\"value\",e),K.Lb(1),K.Qc(\" \",K.rc(2,2,e),\" \")}}function mt(e,t){if(1&e&&(K.dc(0,\"button\",38),K.dc(1,\"mat-icon\",39),K.Oc(2,\"settings\"),K.cc(),K.Oc(3),K.qc(4,\"uppercase\"),K.cc()),2&e){K.pc();const e=K.Bc(59);K.vc(\"matMenuTriggerFor\",e),K.Lb(3),K.Qc(\" \",K.rc(4,2,\"Resources\"),\" \")}}function Ct(e,t){1&e&&(K.dc(0,\"div\",40),K.Yb(1,\"mat-spinner\",41),K.cc()),2&e&&(K.Lb(1),K.vc(\"diameter\",100))}function bt(e,t){1&e&&(K.dc(0,\"p\",44),K.Oc(1,\"No experiments created! \"),K.cc())}function vt(e,t){if(1&e&&(K.dc(0,\"div\",42),K.Mc(1,bt,2,0,\"p\",43),K.cc()),2&e){const e=K.pc();K.Lb(1),K.vc(\"ngIf\",!e.experiments||e.experiments&&0===e.experiments.length)}}function It(e,t){if(1&e&&(K.dc(0,\"span\"),K.Oc(1),K.qc(2,\"flu\"),K.qc(3,\"lowercase\"),K.cc()),2&e){const e=K.pc().$implicit;K.Lb(1),K.Pc(K.rc(2,1,K.rc(3,3,e.status)))}}function At(e,t){if(1&e&&(K.dc(0,\"span\"),K.Oc(1),K.qc(2,\"flu\"),K.qc(3,\"lowercase\"),K.cc()),2&e){const e=K.pc(4);K.Lb(1),K.Pc(K.rc(2,1,K.rc(3,3,e.EXPERIMENT_STATUS.FINISHED)))}}function yt(e,t){if(1&e){const e=K.ec();K.dc(0,\"button\",68),K.lc(\"click\",(function(){K.Ec(e);const t=K.pc().$implicit;return K.pc(3).showErrorDetails(t)})),K.dc(1,\"mat-icon\"),K.Oc(2,\"error\"),K.cc(),K.cc()}}function wt(e,t){if(1&e&&(K.dc(0,\"div\",62),K.Oc(1),K.qc(2,\"date\"),K.cc()),2&e){const e=K.pc().$implicit;K.Lb(1),K.Qc(\" \",K.sc(2,1,1e3*e.startTime,\"short\"),\" \")}}function St(e,t){1&e&&(K.dc(0,\"div\",62),K.Oc(1,\"NA\"),K.cc())}function xt(e,t){if(1&e&&(K.dc(0,\"div\",62),K.Oc(1),K.qc(2,\"date\"),K.cc()),2&e){const e=K.pc().$implicit;K.Lb(1),K.Qc(\" \",K.sc(2,1,1e3*e.endTime,\"short\"),\" \")}}function Et(e,t){1&e&&(K.dc(0,\"div\",62),K.Oc(1,\"NA\"),K.cc())}function kt(e,t){if(1&e){const e=K.ec();K.dc(0,\"span\"),K.dc(1,\"button\",69),K.lc(\"click\",(function(){K.Ec(e);const t=K.pc().$implicit;return K.pc(3).startExperiment(t)})),K.dc(2,\"mat-icon\"),K.Oc(3,\"play_arrow\"),K.cc(),K.Oc(4),K.qc(5,\"uppercase\"),K.cc(),K.cc()}2&e&&(K.Lb(4),K.Qc(\" \",K.rc(5,1,\"Start\"),\" \"))}function _t(e,t){if(1&e){const e=K.ec();K.dc(0,\"span\"),K.dc(1,\"button\",69),K.lc(\"click\",(function(){K.Ec(e);const t=K.pc().$implicit;return K.pc(3).stopExperiment(t.eid)})),K.dc(2,\"mat-icon\"),K.Oc(3,\"stop\"),K.cc(),K.Oc(4),K.qc(5,\"uppercase\"),K.cc(),K.cc()}2&e&&(K.Lb(4),K.Qc(\" \",K.rc(5,1,\"Stop\"),\" \"))}function Tt(e,t){if(1&e){const e=K.ec();K.dc(0,\"span\"),K.dc(1,\"button\",69),K.lc(\"click\",(function(){K.Ec(e);const t=K.pc().$implicit;return K.pc(3).startExperiment(t)})),K.dc(2,\"mat-icon\"),K.Oc(3,\"replay\"),K.cc(),K.Oc(4),K.qc(5,\"uppercase\"),K.cc(),K.cc()}2&e&&(K.Lb(4),K.Qc(\" \",K.rc(5,1,\"Restart\"),\" \"))}function Rt(e,t){if(1&e){const e=K.ec();K.dc(0,\"span\"),K.dc(1,\"button\",69),K.lc(\"click\",(function(){K.Ec(e);const t=K.pc().$implicit;return K.pc(3).startExperiment(t)})),K.dc(2,\"mat-icon\"),K.Oc(3,\"replay\"),K.cc(),K.Oc(4),K.qc(5,\"uppercase\"),K.cc(),K.cc()}2&e&&(K.Lb(4),K.Qc(\" \",K.rc(5,1,\"Restart\"),\" \"))}function Bt(e,t){if(1&e){const e=K.ec();K.dc(0,\"span\"),K.dc(1,\"button\",69),K.lc(\"click\",(function(){K.Ec(e);const t=K.pc().$implicit;return K.pc(3).startExperiment(t)})),K.dc(2,\"mat-icon\"),K.Oc(3,\"replay\"),K.cc(),K.Oc(4),K.qc(5,\"uppercase\"),K.cc(),K.cc()}2&e&&(K.Lb(4),K.Qc(\" \",K.rc(5,1,\"Restart\"),\" \"))}function Ot(e,t){1&e&&(K.dc(0,\"span\"),K.Oc(1),K.qc(2,\"uppercase\"),K.cc()),2&e&&(K.Lb(1),K.Qc(\" \",K.rc(2,1,\"Stopping\"),\" \"))}function Lt(e,t){1&e&&(K.dc(0,\"span\"),K.Oc(1),K.qc(2,\"uppercase\"),K.cc()),2&e&&(K.Lb(1),K.Qc(\" \",K.rc(2,1,\"Stopping\"),\" \"))}function Pt(e,t){if(1&e){const e=K.ec();K.dc(0,\"button\",70),K.lc(\"click\",(function(){K.Ec(e);const t=K.pc().$implicit;return K.pc(3).showConfig(t)})),K.Oc(1),K.qc(2,\"uppercase\"),K.cc()}2&e&&(K.Lb(1),K.Qc(\" \",K.rc(2,1,\"Config\"),\" \"))}const Ft=function(){return[25,\"...\"]};function Nt(e,t){if(1&e){const e=K.ec();K.dc(0,\"mat-card\",49),K.dc(1,\"div\",50),K.dc(2,\"div\",51),K.dc(3,\"div\"),K.Oc(4),K.cc(),K.dc(5,\"div\",52),K.Oc(6),K.cc(),K.cc(),K.dc(7,\"div\"),K.dc(8,\"button\",53),K.lc(\"click\",(function(){K.Ec(e);const n=t.$implicit;return K.pc(3).helperService.redirectTo(\"create\",n.eid)})),K.Yb(9,\"mat-icon\",54),K.cc(),K.dc(10,\"button\",55),K.lc(\"click\",(function(){K.Ec(e);const n=t.$implicit;return K.pc(3).deleteExperiment(n.eid)})),K.dc(11,\"mat-icon\"),K.Oc(12,\"delete\"),K.cc(),K.cc(),K.cc(),K.cc(),K.Yb(13,\"hr\"),K.dc(14,\"mat-card-content\",56),K.dc(15,\"div\",2),K.dc(16,\"div\",57),K.Oc(17,\"Script Name:\"),K.cc(),K.dc(18,\"div\",58),K.Oc(19),K.qc(20,\"truncate\"),K.cc(),K.cc(),K.dc(21,\"div\",2),K.dc(22,\"div\",57),K.Oc(23,\"Status:\"),K.cc(),K.dc(24,\"div\",59),K.Mc(25,It,4,5,\"span\",23),K.Mc(26,At,4,5,\"span\",23),K.Mc(27,yt,3,0,\"button\",60),K.cc(),K.cc(),K.dc(28,\"div\",2),K.dc(29,\"div\",57),K.Oc(30,\"Start Time:\"),K.cc(),K.Mc(31,wt,3,4,\"div\",61),K.Mc(32,St,2,0,\"div\",61),K.cc(),K.dc(33,\"div\",2),K.dc(34,\"div\",57),K.Oc(35,\"End Time:\"),K.cc(),K.Mc(36,xt,3,4,\"div\",61),K.Mc(37,Et,2,0,\"div\",61),K.cc(),K.dc(38,\"div\",2),K.dc(39,\"div\",57),K.Oc(40,\"Best Result:\"),K.cc(),K.dc(41,\"div\",62),K.Oc(42),K.qc(43,\"roundNumber\"),K.cc(),K.cc(),K.cc(),K.Yb(44,\"hr\"),K.dc(45,\"mat-card-actions\",63),K.dc(46,\"div\",64),K.Mc(47,kt,6,3,\"span\",65),K.Mc(48,_t,6,3,\"span\",65),K.Mc(49,Tt,6,3,\"span\",65),K.Mc(50,Rt,6,3,\"span\",65),K.Mc(51,Bt,6,3,\"span\",65),K.Mc(52,Ot,3,3,\"span\",65),K.Mc(53,Lt,3,3,\"span\",65),K.cc(),K.dc(54,\"div\"),K.Mc(55,Pt,3,3,\"button\",66),K.dc(56,\"button\",67),K.lc(\"click\",(function(){K.Ec(e);const n=t.$implicit;return K.pc(3).onDetails(n.eid)})),K.Oc(57),K.qc(58,\"uppercase\"),K.cc(),K.cc(),K.cc(),K.cc()}if(2&e){const e=t.$implicit,n=K.pc(3);K.Lb(4),K.Pc(e.eid),K.Lb(1),K.vc(\"matTooltip\",e.experimentName||e.scriptName),K.Lb(1),K.Qc(\"\",e.experimentName||e.scriptName,\" \"),K.Lb(4),K.vc(\"disabled\",e.status===n.EXPERIMENT_STATUS.RUNNING||e.status===n.EXPERIMENT_STATUS.STOPPING||e.status===n.EXPERIMENT_STATUS.REQUEST_STOP),K.Lb(8),K.vc(\"matTooltip\",e.scriptName),K.Lb(1),K.Qc(\" \",K.sc(20,24,e.scriptName,K.xc(31,Ft)),\" \"),K.Lb(6),K.vc(\"ngIf\",e.status),K.Lb(1),K.vc(\"ngIf\",!e.status),K.Lb(1),K.vc(\"ngIf\",e.status===n.EXPERIMENT_STATUS.FAILED),K.Lb(4),K.vc(\"ngIf\",e.startTime&&-1!==e.startTime),K.Lb(1),K.vc(\"ngIf\",null===e.startTime),K.Lb(4),K.vc(\"ngIf\",e.endTime&&-1!==e.endTime),K.Lb(1),K.vc(\"ngIf\",null===e.endTime),K.Lb(5),K.Qc(\" \",null!==e.bestScore?K.rc(43,27,e.bestScore):\"NA\",\" \"),K.Lb(4),K.vc(\"ngSwitch\",e.status),K.Lb(1),K.vc(\"ngSwitchCase\",n.EXPERIMENT_STATUS.CREATED),K.Lb(1),K.vc(\"ngSwitchCase\",n.EXPERIMENT_STATUS.RUNNING),K.Lb(1),K.vc(\"ngSwitchCase\",n.EXPERIMENT_STATUS.STOPPED),K.Lb(1),K.vc(\"ngSwitchCase\",n.EXPERIMENT_STATUS.FINISHED),K.Lb(1),K.vc(\"ngSwitchCase\",n.EXPERIMENT_STATUS.FAILED),K.Lb(1),K.vc(\"ngSwitchCase\",n.EXPERIMENT_STATUS.STOPPING),K.Lb(1),K.vc(\"ngSwitchCase\",n.EXPERIMENT_STATUS.REQUEST_STOP),K.Lb(2),K.vc(\"ngIf\",e.expConfig),K.Lb(2),K.Qc(\" \",K.rc(58,29,\"Results\"),\" \")}}const Mt=function(e,t){return{itemsPerPage:e,currentPage:t}};function Dt(e,t){if(1&e&&(K.dc(0,\"div\",47),K.Mc(1,Nt,59,32,\"mat-card\",48),K.qc(2,\"paginate\"),K.cc()),2&e){const e=K.pc(2);K.Lb(1),K.vc(\"ngForOf\",K.sc(2,1,e.experiments,K.zc(4,Mt,e.pageSize,e.page)))}}function $t(e,t){if(1&e){const e=K.ec();K.dc(0,\"button\",89),K.lc(\"click\",(function(){K.Ec(e);const t=K.pc().$implicit;return K.pc(3).showConfig(t)})),K.Oc(1),K.qc(2,\"uppercase\"),K.cc()}2&e&&(K.Lb(1),K.Qc(\" \",K.rc(2,1,\"Config\"),\" \"))}function Wt(e,t){if(1&e&&(K.dc(0,\"span\"),K.Oc(1),K.qc(2,\"flu\"),K.qc(3,\"lowercase\"),K.cc()),2&e){const e=K.pc().$implicit;K.Lb(1),K.Pc(K.rc(2,1,K.rc(3,3,e.status)))}}function Ht(e,t){if(1&e&&(K.dc(0,\"span\"),K.Oc(1),K.qc(2,\"flu\"),K.qc(3,\"lowercase\"),K.cc()),2&e){const e=K.pc(4);K.Lb(1),K.Pc(K.rc(2,1,K.rc(3,3,e.EXPERIMENT_STATUS.FINISHED)))}}function Gt(e,t){if(1&e){const e=K.ec();K.dc(0,\"button\",68),K.lc(\"click\",(function(){K.Ec(e);const t=K.pc().$implicit;return K.pc(3).showErrorDetails(t)})),K.dc(1,\"mat-icon\"),K.Oc(2,\"error\"),K.cc(),K.cc()}}function Vt(e,t){if(1&e&&(K.dc(0,\"div\",62),K.Oc(1),K.qc(2,\"date\"),K.cc()),2&e){const e=K.pc().$implicit;K.Lb(1),K.Qc(\" \",K.sc(2,1,1e3*e.startTime,\"short\"),\" \")}}function jt(e,t){1&e&&(K.dc(0,\"div\",62),K.Oc(1,\"NA\"),K.cc())}function Zt(e,t){if(1&e&&(K.dc(0,\"div\",62),K.Oc(1),K.qc(2,\"date\"),K.cc()),2&e){const e=K.pc().$implicit;K.Lb(1),K.Qc(\" \",K.sc(2,1,1e3*e.endTime,\"short\"),\" \")}}function zt(e,t){1&e&&(K.dc(0,\"div\",62),K.Oc(1,\"NA\"),K.cc())}function Kt(e,t){if(1&e){const e=K.ec();K.dc(0,\"span\"),K.dc(1,\"button\",17),K.lc(\"click\",(function(){K.Ec(e);const t=K.pc().$implicit;return K.pc(3).startExperiment(t)})),K.dc(2,\"mat-icon\"),K.Oc(3,\"play_arrow\"),K.cc(),K.Oc(4),K.qc(5,\"uppercase\"),K.cc(),K.cc()}2&e&&(K.Lb(4),K.Qc(\" \",K.rc(5,1,\"Start\"),\" \"))}function Xt(e,t){if(1&e){const e=K.ec();K.dc(0,\"span\"),K.dc(1,\"button\",17),K.lc(\"click\",(function(){K.Ec(e);const t=K.pc().$implicit;return K.pc(3).stopExperiment(t.eid)})),K.dc(2,\"mat-icon\"),K.Oc(3,\"stop\"),K.cc(),K.Oc(4),K.qc(5,\"uppercase\"),K.cc(),K.cc()}2&e&&(K.Lb(4),K.Qc(\" \",K.rc(5,1,\"Stop\"),\" \"))}function Ut(e,t){if(1&e){const e=K.ec();K.dc(0,\"span\"),K.dc(1,\"button\",17),K.lc(\"click\",(function(){K.Ec(e);const t=K.pc().$implicit;return K.pc(3).startExperiment(t)})),K.dc(2,\"mat-icon\"),K.Oc(3,\"replay\"),K.cc(),K.Oc(4),K.qc(5,\"uppercase\"),K.cc(),K.cc()}2&e&&(K.Lb(4),K.Qc(\" \",K.rc(5,1,\"Restart\"),\" \"))}function Yt(e,t){if(1&e){const e=K.ec();K.dc(0,\"span\"),K.dc(1,\"button\",17),K.lc(\"click\",(function(){K.Ec(e);const t=K.pc().$implicit;return K.pc(3).startExperiment(t)})),K.dc(2,\"mat-icon\"),K.Oc(3,\"replay\"),K.cc(),K.Oc(4),K.qc(5,\"uppercase\"),K.cc(),K.cc()}2&e&&(K.Lb(4),K.Qc(\" \",K.rc(5,1,\"Restart\"),\" \"))}function Jt(e,t){if(1&e){const e=K.ec();K.dc(0,\"span\"),K.dc(1,\"button\",17),K.lc(\"click\",(function(){K.Ec(e);const t=K.pc().$implicit;return K.pc(3).startExperiment(t)})),K.dc(2,\"mat-icon\"),K.Oc(3,\"replay\"),K.cc(),K.Oc(4),K.qc(5,\"uppercase\"),K.cc(),K.cc()}2&e&&(K.Lb(4),K.Qc(\" \",K.rc(5,1,\"Restart\"),\" \"))}function Qt(e,t){1&e&&(K.dc(0,\"span\"),K.Oc(1),K.qc(2,\"uppercase\"),K.cc()),2&e&&(K.Lb(1),K.Qc(\" \",K.rc(2,1,\"Stopping\"),\" \"))}function qt(e,t){1&e&&(K.dc(0,\"span\"),K.Oc(1),K.qc(2,\"uppercase\"),K.cc()),2&e&&(K.Lb(1),K.Qc(\" \",K.rc(2,1,\"Stopping\"),\" \"))}function en(e,t){if(1&e){const e=K.ec();K.dc(0,\"mat-card\",73),K.dc(1,\"div\",74),K.dc(2,\"div\",75),K.dc(3,\"div\"),K.Oc(4),K.cc(),K.dc(5,\"div\",76),K.Oc(6),K.cc(),K.cc(),K.dc(7,\"div\",77),K.Mc(8,$t,3,3,\"button\",78),K.dc(9,\"button\",79),K.lc(\"click\",(function(){K.Ec(e);const n=t.$implicit;return K.pc(3).onDetails(n.eid)})),K.Oc(10),K.qc(11,\"uppercase\"),K.cc(),K.cc(),K.cc(),K.dc(12,\"div\",80),K.dc(13,\"div\",81),K.dc(14,\"div\",82),K.Oc(15,\"Best Result:\"),K.cc(),K.dc(16,\"div\",62),K.Oc(17),K.qc(18,\"roundNumber\"),K.cc(),K.cc(),K.dc(19,\"div\",83),K.dc(20,\"div\",82),K.Oc(21,\"Script Name:\"),K.cc(),K.dc(22,\"div\",84),K.Oc(23),K.cc(),K.cc(),K.dc(24,\"div\",81),K.dc(25,\"div\",82),K.Oc(26,\"Status:\"),K.cc(),K.dc(27,\"div\",59),K.Mc(28,Wt,4,5,\"span\",23),K.Mc(29,Ht,4,5,\"span\",23),K.Mc(30,Gt,3,0,\"button\",60),K.cc(),K.cc(),K.dc(31,\"div\",85),K.dc(32,\"div\",82),K.Oc(33,\"Start Time:\"),K.cc(),K.Mc(34,Vt,3,4,\"div\",61),K.Mc(35,jt,2,0,\"div\",61),K.cc(),K.dc(36,\"div\",85),K.dc(37,\"div\",82),K.Oc(38,\"End Time:\"),K.cc(),K.Mc(39,Zt,3,4,\"div\",61),K.Mc(40,zt,2,0,\"div\",61),K.cc(),K.cc(),K.dc(41,\"div\",86),K.dc(42,\"div\",87),K.Mc(43,Kt,6,3,\"span\",65),K.Mc(44,Xt,6,3,\"span\",65),K.Mc(45,Ut,6,3,\"span\",65),K.Mc(46,Yt,6,3,\"span\",65),K.Mc(47,Jt,6,3,\"span\",65),K.Mc(48,Qt,3,3,\"span\",65),K.Mc(49,qt,3,3,\"span\",65),K.cc(),K.dc(50,\"div\"),K.dc(51,\"button\",53),K.lc(\"click\",(function(){K.Ec(e);const n=t.$implicit;return K.pc(3).helperService.redirectTo(\"create\",n.eid)})),K.Yb(52,\"mat-icon\",54),K.cc(),K.dc(53,\"button\",88),K.lc(\"click\",(function(){K.Ec(e);const n=t.$implicit;return K.pc(3).deleteExperiment(n.eid)})),K.dc(54,\"mat-icon\"),K.Oc(55,\"delete\"),K.cc(),K.cc(),K.cc(),K.cc(),K.cc()}if(2&e){const e=t.$implicit,n=K.pc(3);K.Lb(4),K.Pc(e.eid),K.Lb(1),K.vc(\"matTooltip\",e.experimentName||e.scriptName),K.Lb(1),K.Pc(e.experimentName||e.scriptName),K.Lb(2),K.vc(\"ngIf\",e.expConfig),K.Lb(2),K.Qc(\" \",K.rc(11,26,\"Results\"),\" \"),K.Lb(7),K.Qc(\" \",null!==e.bestScore?K.rc(18,28,e.bestScore):\"NA\",\" \"),K.Lb(5),K.vc(\"matTooltip\",e.scriptName),K.Lb(1),K.Qc(\" \",e.scriptName,\" \"),K.Lb(5),K.vc(\"ngIf\",e.status),K.Lb(1),K.vc(\"ngIf\",!e.status),K.Lb(1),K.vc(\"ngIf\",e.status===n.EXPERIMENT_STATUS.FAILED),K.Lb(4),K.vc(\"ngIf\",e.startTime&&-1!==e.startTime),K.Lb(1),K.vc(\"ngIf\",null===e.startTime),K.Lb(4),K.vc(\"ngIf\",e.endTime&&-1!==e.endTime),K.Lb(1),K.vc(\"ngIf\",null===e.endTime),K.Lb(2),K.vc(\"ngSwitch\",e.status),K.Lb(1),K.vc(\"ngSwitchCase\",n.EXPERIMENT_STATUS.CREATED),K.Lb(1),K.vc(\"ngSwitchCase\",n.EXPERIMENT_STATUS.RUNNING),K.Lb(1),K.vc(\"ngSwitchCase\",n.EXPERIMENT_STATUS.STOPPED),K.Lb(1),K.vc(\"ngSwitchCase\",n.EXPERIMENT_STATUS.FINISHED),K.Lb(1),K.vc(\"ngSwitchCase\",n.EXPERIMENT_STATUS.FAILED),K.Lb(1),K.vc(\"ngSwitchCase\",n.EXPERIMENT_STATUS.STOPPING),K.Lb(1),K.vc(\"ngSwitchCase\",n.EXPERIMENT_STATUS.REQUEST_STOP),K.Lb(4),K.Nb(e.status===n.EXPERIMENT_STATUS.RUNNING||e.status===n.EXPERIMENT_STATUS.STOPPING||e.status===n.EXPERIMENT_STATUS.REQUEST_STOP?\"\":\"actionable-warn\"),K.vc(\"disabled\",e.status===n.EXPERIMENT_STATUS.RUNNING||e.status===n.EXPERIMENT_STATUS.STOPPING||e.status===n.EXPERIMENT_STATUS.REQUEST_STOP)}}function tn(e,t){if(1&e&&(K.dc(0,\"div\",71),K.Mc(1,en,56,30,\"mat-card\",72),K.qc(2,\"paginate\"),K.cc()),2&e){const e=K.pc(2);K.Lb(1),K.vc(\"ngForOf\",K.sc(2,1,e.experiments,K.zc(4,Mt,e.pageSize,e.page)))}}function nn(e,t){if(1&e&&(K.bc(0),K.Mc(1,Dt,3,7,\"div\",45),K.qc(2,\"async\"),K.Mc(3,tn,3,7,\"div\",46),K.qc(4,\"async\"),K.ac()),2&e){const e=K.pc();K.Lb(1),K.vc(\"ngIf\",K.rc(2,2,e.experimentViewType$)===e.VIEW_TYPE.CARD),K.Lb(2),K.vc(\"ngIf\",K.rc(4,4,e.experimentViewType$)===e.VIEW_TYPE.LIST)}}function rn(e,t){if(1&e&&(K.dc(0,\"div\",90),K.dc(1,\"div\",91),K.Oc(2),K.cc(),K.dc(3,\"button\",92),K.dc(4,\"mat-icon\"),K.Oc(5,\"close\"),K.cc(),K.cc(),K.cc(),K.dc(6,\"div\",93),K.dc(7,\"pre\"),K.Oc(8),K.qc(9,\"json\"),K.cc(),K.cc()),2&e){const e=t.$implicit;K.Lb(2),K.Pc(e.name),K.Lb(6),K.Pc(K.rc(9,2,e.config))}}function sn(e,t){if(1&e&&(K.dc(0,\"div\",90),K.dc(1,\"div\",91),K.Oc(2),K.cc(),K.dc(3,\"button\",92),K.dc(4,\"mat-icon\"),K.Oc(5,\"close\"),K.cc(),K.cc(),K.cc(),K.dc(6,\"div\",94),K.dc(7,\"pre\"),K.Oc(8),K.cc(),K.cc()),2&e){const e=t.$implicit;K.Lb(2),K.Pc(e.name),K.Lb(6),K.Pc(e.message)}}function on(e,t){if(1&e){const e=K.ec();K.dc(0,\"div\",95),K.dc(1,\"form\",96,97),K.lc(\"ngSubmit\",(function(){K.Ec(e);const t=K.Bc(2);return K.pc().onConfirmStartExperiment(t)})),K.dc(4,\"mat-dialog-content\"),K.dc(5,\"mat-form-field\",98),K.dc(6,\"mat-label\"),K.Oc(7,\" Current working directory \"),K.cc(),K.Yb(8,\"input\",99),K.dc(9,\"mat-error\"),K.Oc(10,\"Missing field\"),K.cc(),K.cc(),K.dc(11,\"mat-dialog-actions\",100),K.dc(12,\"button\",101),K.lc(\"click\",(function(){return K.Ec(e),K.pc().onExpCancel()})),K.Oc(13,\"Cancel\"),K.cc(),K.dc(14,\"button\",102),K.Oc(15,\" Start \"),K.cc(),K.cc(),K.cc(),K.cc(),K.cc()}if(2&e){const e=K.pc();K.Lb(1),K.vc(\"formGroup\",e.startExperimentForm),K.Lb(13),K.vc(\"disabled\",!e.startExperimentForm.valid)}}function an(e,t){if(1&e&&(K.dc(0,\"th\",113),K.Oc(1),K.cc()),2&e){const e=K.pc(2);K.Lb(1),K.Qc(\" \",e.RESOURCE_COLUMNS.ID,\" \")}}function cn(e,t){if(1&e&&(K.dc(0,\"span\"),K.Oc(1),K.cc()),2&e){const e=K.pc().$implicit;K.Lb(1),K.Pc(e.rid)}}function ln(e,t){if(1&e&&(K.dc(0,\"td\",114),K.Mc(1,cn,2,1,\"span\",23),K.cc()),2&e){const e=t.$implicit;K.Lb(1),K.vc(\"ngIf\",e.rid)}}function hn(e,t){if(1&e&&(K.dc(0,\"th\",113),K.Oc(1),K.cc()),2&e){const e=K.pc(2);K.Lb(1),K.Qc(\" \",e.RESOURCE_COLUMNS.NAME,\" \")}}function dn(e,t){if(1&e&&(K.dc(0,\"span\"),K.Oc(1),K.cc()),2&e){const e=K.pc().$implicit;K.Lb(1),K.Pc(e.name)}}function un(e,t){if(1&e&&(K.dc(0,\"td\",114),K.Mc(1,dn,2,1,\"span\",23),K.cc()),2&e){const e=t.$implicit;K.Lb(1),K.vc(\"ngIf\",e.name)}}function fn(e,t){if(1&e&&(K.dc(0,\"th\",113),K.Oc(1),K.cc()),2&e){const e=K.pc(2);K.Lb(1),K.Qc(\" \",e.RESOURCE_COLUMNS.STATUS,\" \")}}function gn(e,t){if(1&e&&(K.dc(0,\"span\"),K.Oc(1),K.cc()),2&e){const e=K.pc().$implicit;K.Lb(1),K.Pc(e.status)}}function pn(e,t){if(1&e&&(K.dc(0,\"td\",114),K.Mc(1,gn,2,1,\"span\",23),K.cc()),2&e){const e=t.$implicit;K.Lb(1),K.vc(\"ngIf\",e.status)}}function mn(e,t){if(1&e&&(K.dc(0,\"th\",113),K.Oc(1),K.cc()),2&e){const e=K.pc(2);K.Lb(1),K.Qc(\" \",e.RESOURCE_COLUMNS.TYPE,\" \")}}function Cn(e,t){if(1&e&&(K.dc(0,\"span\"),K.Oc(1),K.cc()),2&e){const e=K.pc().$implicit;K.Lb(1),K.Pc(e.type)}}function bn(e,t){if(1&e&&(K.dc(0,\"td\",114),K.Mc(1,Cn,2,1,\"span\",23),K.cc()),2&e){const e=t.$implicit;K.Lb(1),K.vc(\"ngIf\",e.type)}}function vn(e,t){1&e&&K.Yb(0,\"tr\",115)}function In(e,t){1&e&&K.Yb(0,\"tr\",116)}function An(e,t){if(1&e){const e=K.ec();K.dc(0,\"div\",103),K.lc(\"click\",(function(e){return e.stopPropagation()})),K.dc(1,\"div\",104),K.dc(2,\"table\",105),K.lc(\"matSortChange\",(function(t){return K.Ec(e),K.pc().sortResourceData(t)})),K.bc(3,106),K.Mc(4,an,2,1,\"th\",107),K.Mc(5,ln,2,1,\"td\",108),K.ac(),K.bc(6,106),K.Mc(7,hn,2,1,\"th\",107),K.Mc(8,un,2,1,\"td\",108),K.ac(),K.bc(9,106),K.Mc(10,fn,2,1,\"th\",107),K.Mc(11,pn,2,1,\"td\",108),K.ac(),K.bc(12,106),K.Mc(13,mn,2,1,\"th\",107),K.Mc(14,bn,2,1,\"td\",108),K.ac(),K.Mc(15,vn,1,0,\"tr\",109),K.Mc(16,In,1,0,\"tr\",110),K.cc(),K.cc(),K.Yb(17,\"mat-paginator\",111,112),K.qc(19,\"async\"),K.cc()}if(2&e){const e=K.pc();K.Lb(2),K.vc(\"dataSource\",e.dataSourceResource),K.Lb(1),K.wc(\"matColumnDef\",e.RESOURCE_COLUMNS.ID),K.Lb(3),K.wc(\"matColumnDef\",e.RESOURCE_COLUMNS.NAME),K.Lb(3),K.wc(\"matColumnDef\",e.RESOURCE_COLUMNS.STATUS),K.Lb(3),K.wc(\"matColumnDef\",e.RESOURCE_COLUMNS.TYPE),K.Lb(3),K.vc(\"matHeaderRowDef\",e.displayedResourceColumns)(\"matHeaderRowDefSticky\",!0),K.Lb(1),K.vc(\"matRowDefColumns\",e.displayedResourceColumns),K.Lb(1),K.Jc(\"display\",(null==e.dataSourceResource.data?null:e.dataSourceResource.data.length)>0&&K.rc(19,11,e.resources$)?\"block\":\"none\"),K.vc(\"pageSize\",e.pageSize)}}function yn(e,t){1&e&&(K.dc(0,\"h1\",117),K.Oc(1,\"No resource data available!\"),K.cc())}let wn=(()=>{class e{constructor(e,t,n,r,i,s){this.store=e,this.cdRef=t,this.dialog=n,this.fb=r,this.utilsService=i,this.helperService=s,this.EXPERIMENT_COLUMNS={ID:\"ID\",EXPERIMENT_NAME:\"Experiment Name\",SCRIPT_NAME:\"Script Name\",END_TIME:\"End Time\",STATUS:\"Status\",CONFIG:\"Config\",START_TIME:\"Start Time\",DETAILS:\"Details\",ACTION:\"Action\",CREATE:\"Create\",DELETE:\"Delete\"},this.displayedExperimentColumns=[this.EXPERIMENT_COLUMNS.ID,this.EXPERIMENT_COLUMNS.EXPERIMENT_NAME,this.EXPERIMENT_COLUMNS.SCRIPT_NAME,this.EXPERIMENT_COLUMNS.CONFIG,this.EXPERIMENT_COLUMNS.START_TIME,this.EXPERIMENT_COLUMNS.END_TIME,this.EXPERIMENT_COLUMNS.STATUS,this.EXPERIMENT_COLUMNS.DETAILS,this.EXPERIMENT_COLUMNS.ACTION,this.EXPERIMENT_COLUMNS.CREATE,this.EXPERIMENT_COLUMNS.DELETE],this.RESOURCE_COLUMNS={ID:\"ID\",NAME:\"Name\",STATUS:\"Status\",TYPE:\"Type\"},this.displayedResourceColumns=[this.RESOURCE_COLUMNS.ID,this.RESOURCE_COLUMNS.NAME,this.RESOURCE_COLUMNS.STATUS,this.RESOURCE_COLUMNS.TYPE],this.dataSourceResource=new Je.k,this.pageSize=8,this.page=1,this.VIEW_TYPE=z,this.sortOptions=[this.EXPERIMENT_COLUMNS.ID,this.EXPERIMENT_COLUMNS.EXPERIMENT_NAME,this.EXPERIMENT_COLUMNS.SCRIPT_NAME,this.EXPERIMENT_COLUMNS.START_TIME,this.EXPERIMENT_COLUMNS.END_TIME,this.EXPERIMENT_COLUMNS.STATUS],this.sortOption=new de.e(this.EXPERIMENT_COLUMNS.ID),this.searchStr=new de.e,this.sortDirectionType=\"desc\",this.sortDirections=[\"asc\",\"desc\"],this.EXPERIMENT_STATUS=Qe,this.showResources=!1}ngOnInit(){this.store.dispatch(new f),this.subscriptions=new a.a,this.startExperimentForm=this.fb.group({cwd:[\"\",[de.t.required]]}),this.subscriptions.add(this.experiments$.subscribe(e=>{this.searchStr.value||(this.experiments=e&&e.length?e.slice().sort((e,t)=>this.utilsService.compare(e.eid,t.eid,!1)):null),this.allExperiments=e&&e.length?e.slice().sort((e,t)=>this.utilsService.compare(e.eid,t.eid,!1)):null,this.sort&&this.sortExperimentData(),this.cdRef.markForCheck()})),this.subscriptions.add(this.resources$.subscribe(e=>{this.dataSourceResource.data=e&&e.length?e.slice():null,this.resources=e&&e.length?e.slice():null,this.dataSourceResource.paginator=this.paginatorResource,this.dataSourceResource.sort=this.sortResource,this.cdRef.markForCheck()})),this.subscriptions.add(this.searchStr.valueChanges.pipe(Object(et.a)(300),Object(tt.a)()).subscribe(e=>{const t=this.utilsService.trimString(e);this.searchStringInExperiments(t)}))}ngOnDestroy(){this.subscriptions.unsubscribe()}clearSearch(){this.searchStr.setValue(\"\")}changeDisplayView(e){e&&this.store.dispatch(new B(e))}showConfig(e){if(!e)return;const t=JSON.parse(e.expConfig);this.showConfigDialogRef=this.dialog.open(this.showConfigDialog,{width:\"650px\",data:{name:e.experimentName,config:t},panelClass:\"info-modal\"}),this.subscriptions.add(this.showConfigDialogRef.afterClosed().subscribe())}showErrorDetails(e){e&&e.errorMsg&&(this.showErrorDialogRef=this.dialog.open(this.showErrorDialog,{width:\"650px\",data:{name:e.experimentName,message:e.errorMsg},panelClass:\"info-modal\"}),this.subscriptions.add(this.showErrorDialogRef.afterClosed().subscribe()))}startExperiment(e){e&&e.expConfigDetails.workingdir&&this.store.dispatch(new S({eid:e.eid}))}onConfirmStartExperiment(e){this.startExperimentForm.valid&&(this.store.dispatch(new S({eid:this.selectedStartExperiment})),e.resetForm(),this.startExperimentForm.reset())}stopExperiment(e){e&&this.store.dispatch(new x(e))}onExpCancel(){this.startExperimentForm.reset()}onDetails(e){e&&this.helperService.redirectTo(\"/experiment\",e)}onSortOption(e){e.value&&(this.sort={active:e.value,direction:this.sortDirectionType},this.sortExperimentData())}onSortDirection(e){e.value&&(this.sortDirectionType=e.value,this.sort={active:this.sortOption.value,direction:e.value},this.sortExperimentData())}sortExperimentData(){const e=this.sort,t=this.allExperiments.slice();this.experiments=e.active&&\"\"!==e.direction?t.sort((t,n)=>{const r=\"asc\"===e.direction;switch(e.active){case this.EXPERIMENT_COLUMNS.ID:return this.utilsService.compare(t.eid,n.eid,r);case this.EXPERIMENT_COLUMNS.EXPERIMENT_NAME:return this.utilsService.compare(t.experimentName,n.experimentName,r);case this.EXPERIMENT_COLUMNS.SCRIPT_NAME:return this.utilsService.compare(t.scriptName,n.scriptName,r);case this.EXPERIMENT_COLUMNS.START_TIME:return this.utilsService.compare(t.startTime,n.startTime,r);case this.EXPERIMENT_COLUMNS.END_TIME:return this.utilsService.compare(t.endTime,n.endTime,r);case this.EXPERIMENT_COLUMNS.STATUS:return this.utilsService.compare(t.status,n.status,r);default:return 0}}):t}sortResourceData(e){const t=this.resources.slice();this.dataSourceResource.data=e.active&&\"\"!==e.direction?t.sort((t,n)=>{const r=\"asc\"===e.direction;switch(e.active){case this.RESOURCE_COLUMNS.ID:return this.utilsService.compare(t.rid,n.rid,r);case this.RESOURCE_COLUMNS.NAME:return this.utilsService.compare(t.name,n.name,r);case this.RESOURCE_COLUMNS.STATUS:return this.utilsService.compare(t.status,n.status,r);case this.RESOURCE_COLUMNS.TYPE:return this.utilsService.compare(t.type,n.type,r);default:return 0}}):t}searchStringInExperiments(e){this.experiments=this.allExperiments.filter(t=>this.utilsService.trimString(t.experimentName).indexOf(e)>=0),this.cdRef.markForCheck()}deleteExperiment(e){e&&(this.confirmDialogRef=this.dialog.open(qe.a,{width:\"450px\",data:{title:\"Delete experiment\",content:\"Are you sure you want to permanently delete this experiment?\",confirmButtonText:\"Delete\"},panelClass:\"header-modal\"}),this.confirmDialogRef.afterClosed().subscribe(t=>{t&&this.store.dispatch(new R(e))}))}}return e.\\u0275fac=function(t){return new(t||e)(K.Xb(o.i),K.Xb(K.j),K.Xb(nt.b),K.Xb(de.d),K.Xb(Q.c),K.Xb(Q.a))},e.\\u0275cmp=K.Rb({type:e,selectors:[[\"app-list\"]],viewQuery:function(e,t){if(1&e&&(K.Ic(ct,!0),K.Ic(Ye.a,!0),K.Ic(lt,!0),K.Ic(Ye.a,!0),K.Ic(ht,!0),K.Ic(dt,!0),K.Ic(ut,!0)),2&e){let e;K.Ac(e=K.mc())&&(t.paginatorExperiment=e.first),K.Ac(e=K.mc())&&(t.sortExperiment=e.first),K.Ac(e=K.mc())&&(t.paginatorResource=e.first),K.Ac(e=K.mc())&&(t.sortResource=e.first),K.Ac(e=K.mc())&&(t.showConfigDialog=e.first),K.Ac(e=K.mc())&&(t.showErrorDialog=e.first),K.Ac(e=K.mc())&&(t.startExperimentDialog=e.first)}},decls:68,vars:38,consts:[[1,\"px-5\",\"mb-5\"],[\"fxLayout\",\"row wrap\",\"fxLayoutAlign\",\"space-between center\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"start center\"],[1,\"mat-display-1\",\"mt-0\",\"mb-0\",\"mr-2\"],[\"appearance\",\"outline\",1,\"mr-2\",\"mt-4\"],[\"type\",\"text\",\"matInput\",\"\",\"placeholder\",\"Experiment name\",3,\"formControl\"],[\"matSuffix\",\"\",\"class\",\"cursor-pointer\",3,\"click\",4,\"ngIf\"],[\"matSuffix\",\"\",4,\"ngIf\"],[\"name\",\"sortOption\",3,\"formControl\",\"selectionChange\"],[3,\"value\",4,\"ngFor\",\"ngForOf\"],[\"name\",\"fontStyle\",1,\"sort-toggle\",\"mr-2\",3,\"value\",\"change\"],[3,\"value\"],[3,\"color\"],[\"mat-icon-button\",\"\",3,\"color\",\"click\"],[1,\"view-toggle\"],[\"fxLayout\",\"row wrap\",\"fxLayoutAlign\",\"start center\"],[\"mat-button\",\"\",3,\"matMenuTriggerFor\",4,\"ngIf\",\"ngIfElse\"],[\"mat-button\",\"\",3,\"click\"],[\"svgIcon\",\"database\",1,\"mr-3\"],[\"svgIcon\",\"bulb\",1,\"mr-3\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"center center\",\"class\",\"p-10\",4,\"ngIf\"],[\"fxLayout\",\"column\",1,\"w-full\"],[\"fxLayout\",\"row\",\"class\",\"w-full\",4,\"ngIf\"],[4,\"ngIf\"],[\"fxLayoutAlign\",\"end center\",1,\"w-full\",\"pt-5\"],[\"previousLabel\",\"\",\"directionLinks\",\"true\",\"nextLabel\",\"\",3,\"pageChange\"],[\"showConfigDialog\",\"\"],[\"showErrorDialog\",\"\"],[\"startExperimentDialog\",\"\"],[\"xPosition\",\"before\"],[\"resourcesMenu\",\"matMenu\"],[1,\"resources-menu\",\"p-3\",\"bg-primary\",\"text-white\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"end center\",1,\"w-full\"],[\"mat-icon-button\",\"\"],[\"class\",\"resources-menu-content\",3,\"click\",4,\"ngIf\"],[\"noData\",\"\"],[\"matSuffix\",\"\",1,\"cursor-pointer\",3,\"click\"],[\"matSuffix\",\"\"],[\"mat-button\",\"\",3,\"matMenuTriggerFor\"],[1,\"mr-3\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"center center\",1,\"p-10\"],[\"color\",\"accent\",1,\"mt-10\",3,\"diameter\"],[\"fxLayout\",\"row\",1,\"w-full\"],[\"class\",\"font-medium\",4,\"ngIf\"],[1,\"font-medium\"],[\"fxLayout\",\"row wrap\",\"fxLayoutAlign\",\"\",4,\"ngIf\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"start\",\"class\",\"w-full\",4,\"ngIf\"],[\"fxLayout\",\"row wrap\",\"fxLayoutAlign\",\"\"],[\"class\",\"py-3 px-4 experiment-card mt-3 mr-3\",\"fxFlex\",\"calc(25% - 20px)\",4,\"ngFor\",\"ngForOf\"],[\"fxFlex\",\"calc(25% - 20px)\",1,\"py-3\",\"px-4\",\"experiment-card\",\"mt-3\",\"mr-3\"],[\"fxLayoutAlign\",\"start center\",1,\"w-full\",\"experiment-card-header\",\"mat-title\",\"mb-2\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"start center\",\"fxFlex\",\"1 1 auto\",\"fxLayoutGap\",\"15px\"],[1,\"elipsis-card-title\",3,\"matTooltip\"],[\"mat-icon-button\",\"\",\"matTooltip\",\"Create experiment from copy\",1,\"actionable\",3,\"click\"],[\"svgIcon\",\"copy\"],[\"mat-icon-button\",\"\",\"matTooltip\",\"Delete experiment\",1,\"actionable-warn\",3,\"disabled\",\"click\"],[\"fxLayout\",\"column\",\"fxLayoutGap\",\"15px\",1,\"mt-3\"],[1,\"w-130\",\"color-gray\"],[1,\"color-text-primary\",\"font-medium\",3,\"matTooltip\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"start center\",1,\"color-text-primary\",\"font-medium\"],[\"mat-icon-button\",\"\",\"color\",\"warn\",\"matTooltip\",\"Click to show error details\",\"class\",\"error-icon\",3,\"click\",4,\"ngIf\"],[\"class\",\"color-text-primary font-medium\",4,\"ngIf\"],[1,\"color-text-primary\",\"font-medium\"],[\"fxLayoutAlign\",\"space-between center\",1,\"w-full\",\"p-0\",\"m-0\",\"mt-3\"],[\"fxFlex\",\"1 0 auto\",3,\"ngSwitch\"],[4,\"ngSwitchCase\"],[\"class\",\"m-0 ml-2\",\"mat-raised-button\",\"\",\"color\",\"primary\",3,\"click\",4,\"ngIf\"],[\"mat-raised-button\",\"\",\"color\",\"accent\",1,\"m-0\",\"ml-2\",3,\"click\"],[\"mat-icon-button\",\"\",\"color\",\"warn\",\"matTooltip\",\"Click to show error details\",1,\"error-icon\",3,\"click\"],[\"mat-button\",\"\",1,\"mr-3\",3,\"click\"],[\"mat-raised-button\",\"\",\"color\",\"primary\",1,\"m-0\",\"ml-2\",3,\"click\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"start\",1,\"w-full\"],[\"class\",\"py-3 px-4 experiment-list-card mt-3 w-full\",\"fxLayout\",\"row\",\"fxLayout.md\",\"column\",\"fxLayout.lt-md\",\"column\",\"fxLayoutAlign\",\"start\",\"fxLayoutAlign.lt-md\",\"start\",\"fxLayoutAlign.md\",\"start\",\"fxLayoutGap.md\",\"20px\",\"fxLayoutGap.lt-md\",\"20px\",4,\"ngFor\",\"ngForOf\"],[\"fxLayout\",\"row\",\"fxLayout.md\",\"column\",\"fxLayout.lt-md\",\"column\",\"fxLayoutAlign\",\"start\",\"fxLayoutAlign.lt-md\",\"start\",\"fxLayoutAlign.md\",\"start\",\"fxLayoutGap.md\",\"20px\",\"fxLayoutGap.lt-md\",\"20px\",1,\"py-3\",\"px-4\",\"experiment-list-card\",\"mt-3\",\"w-full\"],[\"fxFlex\",\"25\",\"fxFlex.lt-md\",\"100\",\"fxLayout\",\"row\",\"fxLayoutAlign\",\"start center\",\"fxFlex\",\"1 1 auto\",\"fxLayoutGap\",\"25px\"],[\"fxFlex.gt-md\",\"1 1 auto\",\"fxLayout\",\"row\",\"fxLayoutAlign\",\"start start\",\"fxLayoutGap\",\"15px\",1,\"mat-title\",\"mb-0\"],[1,\"elipsis-title\",3,\"matTooltip\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"end center\"],[\"class\",\"m-2\",\"mat-raised-button\",\"\",\"color\",\"primary\",3,\"click\",4,\"ngIf\"],[\"mat-raised-button\",\"\",\"color\",\"accent\",1,\"m-2\",3,\"click\"],[\"fxFlex\",\"55\",\"fxFlex.md\",\"100\",\"fxFlex.lt-md\",\"100\",\"fxLayout\",\"row\",\"fxLayoutAlign\",\"space-around center\",\"fxLayoutAlign.md\",\"start\",\"fxLayoutAlign.lt-md\",\"start\",\"ngClass.md\",\"w-full\",\"ngClass.lt-md\",\"w-full\",\"fxLayoutGap\",\"15px\"],[\"fxFlex\",\"12\",\"fxFlex.md\",\"20\",\"fxFlex.lt-md\",\"20\",\"fxLayout\",\"column\",\"fxLayoutAlign\",\"start start\"],[1,\"color-gray\"],[\"fxFlex\",\"15\",\"fxFlex.md\",\"20\",\"fxFlex.lt-md\",\"20\",\"fxLayout\",\"column\",\"fxLayoutAlign\",\"start start\"],[1,\"color-text-primary\",\"font-medium\",\"elipsis-title\",3,\"matTooltip\"],[\"fxFlex\",\"17\",\"fxFlex.md\",\"20\",\"fxFlex.lt-md\",\"20\",\"fxLayout\",\"column\",\"fxLayoutAlign\",\"start start\"],[\"fxFlex\",\"15\",\"fxFlex.md\",\"100\",\"fxFlex.lt-md\",\"100\",\"fxLayout\",\"row\",\"fxLayoutAlign\",\"end center\",\"fxLayoutAlign.md\",\"start center\",\"fxLayoutAlign.lt-md\",\"start center\"],[\"fxFlex.gt-md\",\"1 1 auto\",3,\"ngSwitch\"],[\"mat-icon-button\",\"\",\"matTooltip\",\"Delete experiment\",3,\"disabled\",\"click\"],[\"mat-raised-button\",\"\",\"color\",\"primary\",1,\"m-2\",3,\"click\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"space-between center\",1,\"info-dialog-title\",\"w-full\",\"p-3\",\"bg-primary\",\"text-white\"],[1,\"w-full\",\"exp-config-title\"],[\"mat-icon-button\",\"\",\"matDialogClose\",\"\"],[1,\"info-dialog-content\",\"p-3\"],[1,\"info-dialog-content\",\"m-3\"],[\"fxLayout\",\"column\",\"fxLayoutGap\",\"30px\"],[1,\"w-full\",3,\"formGroup\",\"ngSubmit\"],[\"f\",\"ngForm\",\"formDirective\",\"ngForm\"],[\"appearance\",\"outline\",1,\"w-full\",\"mb-4\"],[\"type\",\"text\",\"matInput\",\"\",\"placeholder\",\"CWD\",\"formControlName\",\"cwd\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"center start\",\"fxLayoutGap\",\"10px\",1,\"mb-3\"],[\"matDialogClose\",\"\",1,\"mat-raised-button\",3,\"click\"],[\"type\",\"submit\",\"matDialogClose\",\"\",\"mat-raised-button\",\"\",\"color\",\"accent\",3,\"disabled\"],[1,\"resources-menu-content\",3,\"click\"],[1,\"table-container\",\"w-full\"],[\"fxFill\",\"\",\"mat-table\",\"\",\"multiTemplateDataRows\",\"\",\"matSort\",\"\",\"matSortDisableClear\",\"\",1,\"mat-elevation-z3\",\"w-full\",3,\"dataSource\",\"matSortChange\"],[3,\"matColumnDef\"],[\"mat-header-cell\",\"\",\"mat-sort-header\",\"\",4,\"matHeaderCellDef\"],[\"mat-cell\",\"\",4,\"matCellDef\"],[\"mat-header-row\",\"\",4,\"matHeaderRowDef\",\"matHeaderRowDefSticky\"],[\"mat-row\",\"\",4,\"matRowDef\",\"matRowDefColumns\"],[\"showFirstLastButtons\",\"\",1,\"mat-elevation-z3\",3,\"pageSize\"],[\"paginatorResource\",\"\"],[\"mat-header-cell\",\"\",\"mat-sort-header\",\"\"],[\"mat-cell\",\"\"],[\"mat-header-row\",\"\"],[\"mat-row\",\"\"],[1,\"mat-title\",\"text-primary\"]],template:function(e,t){if(1&e&&(K.dc(0,\"div\",0),K.dc(1,\"div\",1),K.dc(2,\"div\",2),K.dc(3,\"h1\",3),K.Oc(4,\"Experiments\"),K.cc(),K.dc(5,\"mat-form-field\",4),K.dc(6,\"mat-label\"),K.Oc(7,\"Search\"),K.cc(),K.Yb(8,\"input\",5),K.Mc(9,ft,2,0,\"mat-icon\",6),K.Mc(10,gt,2,0,\"mat-icon\",7),K.cc(),K.dc(11,\"mat-form-field\",4),K.dc(12,\"mat-label\"),K.Oc(13,\"Sort by\"),K.cc(),K.dc(14,\"mat-select\",8),K.lc(\"selectionChange\",(function(e){return t.onSortOption(e)})),K.Mc(15,pt,3,4,\"mat-option\",9),K.cc(),K.cc(),K.dc(16,\"mat-button-toggle-group\",10),K.lc(\"change\",(function(e){return t.onSortDirection(e)})),K.dc(17,\"mat-button-toggle\",11),K.dc(18,\"mat-icon\",12),K.Oc(19,\"north\"),K.cc(),K.cc(),K.dc(20,\"mat-button-toggle\",11),K.dc(21,\"mat-icon\",12),K.Oc(22,\"south\"),K.cc(),K.cc(),K.cc(),K.dc(23,\"button\",13),K.lc(\"click\",(function(){return t.changeDisplayView(t.VIEW_TYPE.LIST)})),K.qc(24,\"async\"),K.dc(25,\"mat-icon\",14),K.Oc(26,\"menu\"),K.cc(),K.cc(),K.dc(27,\"button\",13),K.lc(\"click\",(function(){return t.changeDisplayView(t.VIEW_TYPE.CARD)})),K.qc(28,\"async\"),K.dc(29,\"mat-icon\",14),K.Oc(30,\"view_module\"),K.cc(),K.cc(),K.cc(),K.dc(31,\"div\",15),K.Mc(32,mt,5,4,\"button\",16),K.qc(33,\"async\"),K.dc(34,\"button\",17),K.lc(\"click\",(function(){return t.helperService.redirectTo(\"initialize\")})),K.Yb(35,\"mat-icon\",18),K.Oc(36),K.qc(37,\"uppercase\"),K.cc(),K.dc(38,\"button\",17),K.lc(\"click\",(function(){return t.helperService.redirectTo(\"create\")})),K.Yb(39,\"mat-icon\",19),K.Oc(40),K.qc(41,\"uppercase\"),K.cc(),K.cc(),K.cc(),K.Mc(42,Ct,2,1,\"div\",20),K.qc(43,\"async\"),K.qc(44,\"async\"),K.dc(45,\"div\",21),K.Mc(46,vt,2,1,\"div\",22),K.qc(47,\"async\"),K.qc(48,\"async\"),K.Mc(49,nn,5,6,\"ng-container\",23),K.dc(50,\"div\",24),K.dc(51,\"pagination-controls\",25),K.lc(\"pageChange\",(function(e){return t.page=e})),K.cc(),K.cc(),K.cc(),K.cc(),K.Mc(52,rn,10,4,\"ng-template\",null,26,K.Nc),K.Mc(54,sn,9,2,\"ng-template\",null,27,K.Nc),K.Mc(56,on,16,2,\"ng-template\",null,28,K.Nc),K.dc(58,\"mat-menu\",29,30),K.dc(60,\"mat-toolbar\",31),K.dc(61,\"div\",32),K.dc(62,\"button\",33),K.dc(63,\"mat-icon\"),K.Oc(64,\"close\"),K.cc(),K.cc(),K.cc(),K.cc(),K.Mc(65,An,20,13,\"div\",34),K.cc(),K.Mc(66,yn,2,0,\"ng-template\",null,35,K.Nc)),2&e){const e=K.Bc(67);let n=null,r=null;K.Lb(8),K.vc(\"formControl\",t.searchStr),K.Lb(1),K.vc(\"ngIf\",null!==t.searchStr.value&&\"\"!==t.searchStr.value),K.Lb(1),K.vc(\"ngIf\",null===t.searchStr.value||\"\"===t.searchStr.value),K.Lb(4),K.vc(\"formControl\",t.sortOption),K.Lb(1),K.vc(\"ngForOf\",t.sortOptions),K.Lb(1),K.vc(\"value\",t.sortDirectionType),K.Lb(1),K.vc(\"value\",t.sortDirections[0]),K.Lb(1),K.vc(\"color\",t.sortDirectionType===t.sortDirections[0]?\"primary\":\"\"),K.Lb(2),K.vc(\"value\",t.sortDirections[1]),K.Lb(1),K.vc(\"color\",t.sortDirectionType===t.sortDirections[1]?\"primary\":\"\"),K.Lb(2),K.vc(\"color\",K.rc(24,20,t.experimentViewType$)===t.VIEW_TYPE.LIST?\"primary\":\"\"),K.Lb(4),K.vc(\"color\",K.rc(28,22,t.experimentViewType$)===t.VIEW_TYPE.CARD?\"primary\":\"\"),K.Lb(5),K.vc(\"ngIf\",t.dataSourceResource.data&&(null==t.dataSourceResource.data?null:t.dataSourceResource.data.length)>0&&K.rc(33,24,t.resources$))(\"ngIfElse\",e),K.Lb(4),K.Qc(\" \",K.rc(37,26,\"Reset Auptimizer Environment\"),\" \"),K.Lb(4),K.Qc(\" \",K.rc(41,28,\"Create new experiment\"),\" \"),K.Lb(2),K.vc(\"ngIf\",K.rc(43,30,t.loadingAllExperiments$)&&0===(null==(n=K.rc(44,32,t.experiments$))?null:n.length)),K.Lb(4),K.vc(\"ngIf\",!1===K.rc(47,34,t.loadingAllExperiments$)&&0===(null==(r=K.rc(48,36,t.experiments$))?null:r.length)),K.Lb(3),K.vc(\"ngIf\",t.experiments&&t.experiments.length),K.Lb(16),K.vc(\"ngIf\",t.dataSourceResource.data&&(null==t.dataSourceResource.data?null:t.dataSourceResource.data.length)>0)}},directives:[oe.d,oe.c,fe.c,fe.g,rt.b,de.c,de.n,de.f,r.o,ge.a,r.n,pe.b,pe.a,ce.a,ae.b,it.c,le.a,se.a,fe.h,me.m,le.d,st.b,ot.a,oe.b,oe.e,Ce.a,ot.c,ot.b,r.q,r.r,xe.a,nt.d,de.u,de.o,de.i,nt.e,de.g,fe.b,nt.c,Je.j,oe.f,Ye.a,Je.c,Je.e,Je.b,Je.g,Je.i,at.a,Je.d,Ye.b,Je.a,Je.f,Je.h],pipes:[r.b,r.w,W.a,it.b,G.a,D.a,r.l,r.e,r.h],styles:[\".experiment-card[_ngcontent-%COMP%]{min-width:430px!important;max-width:430px!important}.experiment-card[_ngcontent-%COMP%]   mat-card-content[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]{font-size:16px}.elipsis-title[_ngcontent-%COMP%]{width:170px!important}.elipsis-card-title[_ngcontent-%COMP%], .elipsis-title[_ngcontent-%COMP%]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.elipsis-card-title[_ngcontent-%COMP%]{max-width:200px}.view-toggle[_ngcontent-%COMP%]{height:30px;width:30px;font-size:30px;line-height:30px}.experiment-list-card[_ngcontent-%COMP%]   mat-card-content[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]{font-size:16px}.error-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;line-height:18px;margin-left:10px;margin-top:-7px}.mat-header-cell[_ngcontent-%COMP%]{text-transform:uppercase}  .mat-dialog-container{padding:0!important;overflow:unset!important}.minw-200[_ngcontent-%COMP%]{min-width:200px}.minw-300[_ngcontent-%COMP%]{min-width:300px}.w-130[_ngcontent-%COMP%]{width:130px;max-width:130px}.resources-menu[_ngcontent-%COMP%]{height:50px}.resources-menu-content[_ngcontent-%COMP%]{width:600px}  .mat-tooltip{word-break:break-all!important;white-space:normal!important}.exp-config-title[_ngcontent-%COMP%]{white-space:normal;word-break:break-all}\"],changeDetection:0}),Object(s.b)([Object(o.e)(q.experiments)],e.prototype,\"experiments$\",void 0),Object(s.b)([Object(o.e)(q.resources)],e.prototype,\"resources$\",void 0),Object(s.b)([Object(o.e)(q.loadingAllExperiments)],e.prototype,\"loadingAllExperiments$\",void 0),Object(s.b)([Object(o.e)(q.experimentViewType)],e.prototype,\"experimentViewType$\",void 0),e})();function Sn(e,t){if(1&e&&(K.dc(0,\"mat-option\",6),K.Oc(1),K.cc()),2&e){const e=t.$implicit;K.vc(\"value\",e.eid),K.Lb(1),K.Qc(\" \",e.experimentName||e.scriptName,\" \")}}function xn(e,t){if(1&e){const e=K.ec();K.dc(0,\"mat-form-field\",3),K.dc(1,\"mat-label\"),K.Oc(2,\" Select experiment \"),K.cc(),K.dc(3,\"mat-select\",4),K.lc(\"selectionChange\",(function(t){return K.Ec(e),K.pc(2).selectedNewExperiment(t)})),K.Mc(4,Sn,2,2,\"mat-option\",5),K.cc(),K.cc()}if(2&e){const e=K.pc().ngIf,t=K.pc();K.Lb(3),K.vc(\"value\",e[t.experimentIndex].eid),K.Lb(1),K.vc(\"ngForOf\",e)}}function En(e,t){if(1&e&&(K.dc(0,\"div\",1),K.Mc(1,xn,5,2,\"mat-form-field\",2),K.cc()),2&e){const e=t.ngIf,n=K.pc();K.Lb(1),K.vc(\"ngIf\",e&&e.length>0&&null!==n.experimentIndex)}}let kn=(()=>{class e{constructor(e){this.store=e,this.toggleExperiment=new K.s}ngOnInit(){this.subscription=new a.a,this.subscription.add(this.experiments$.subscribe(e=>{if(e&&e.length>0&&this.experimentId){const t=e.findIndex(e=>+e.eid==+this.experimentId);-1!==t&&(this.experimentIndex=t)}}))}ngOnDestroy(){this.subscription.unsubscribe()}selectedNewExperiment(e){e.value&&this.toggleExperiment.emit(e.value)}}return e.\\u0275fac=function(t){return new(t||e)(K.Xb(o.i))},e.\\u0275cmp=K.Rb({type:e,selectors:[[\"app-experiment-dropdown\"]],inputs:{experimentId:\"experimentId\"},outputs:{toggleExperiment:\"toggleExperiment\"},decls:2,vars:3,consts:[[\"class\",\"w-full\",4,\"ngIf\"],[1,\"w-full\"],[\"appearance\",\"outline\",\"class\",\"w-full\",4,\"ngIf\"],[\"appearance\",\"outline\",1,\"w-full\"],[3,\"value\",\"selectionChange\"],[3,\"value\",4,\"ngFor\",\"ngForOf\"],[3,\"value\"]],template:function(e,t){1&e&&(K.Mc(0,En,2,1,\"div\",0),K.qc(1,\"async\")),2&e&&K.vc(\"ngIf\",K.rc(1,1,t.experiments$))},directives:[r.o,fe.c,fe.g,ge.a,r.n,me.m],pipes:[r.b],styles:[\"mat-select[_ngcontent-%COMP%]{font-size:18px;padding-top:10px}\"],changeDetection:0}),Object(s.b)([Object(o.e)(q.experiments)],e.prototype,\"experiments$\",void 0),e})();const _n=[\"paginatorParams\"],Tn=[\"showDetailsDialog\"],Rn=function(e){return{width:e}};function Bn(e,t){if(1&e&&(K.dc(0,\"div\",6),K.dc(1,\"h2\",15),K.Oc(2),K.qc(3,\"roundNumber\"),K.cc(),K.dc(4,\"div\",16),K.dc(5,\"div\",17),K.Yb(6,\"span\",18),K.cc(),K.dc(7,\"div\",19),K.dc(8,\"h2\",20),K.Oc(9),K.cc(),K.cc(),K.cc(),K.cc()),2&e){const e=K.pc();K.Lb(2),K.Qc(\" Best Result: \",K.rc(3,4,e.experimentData.bestScore.score),\" \"),K.Lb(4),K.vc(\"ngStyle\",K.yc(6,Rn,e.progressBarWidth+\"%\")),K.Lb(3),K.Rc(\"\",e.experimentData.jobStats.finished,\" / \",e.experimentData.jobStats.total,\" jobs\")}}function On(e,t){1&e&&(K.dc(0,\"h2\",15),K.Oc(1,\"Best Hyperparameter Combination\"),K.cc())}function Ln(e,t){1&e&&(K.dc(0,\"h2\",21),K.Oc(1,\" Compression config_list \"),K.cc())}function Pn(e,t){if(1&e&&(K.dc(0,\"th\",29),K.Oc(1),K.cc()),2&e){const e=K.pc(2);K.Lb(1),K.Qc(\" \",e.PARAM_COLUMNS.NAME,\" \")}}function Fn(e,t){if(1&e&&(K.dc(0,\"div\",32),K.Oc(1),K.cc()),2&e){const e=K.pc().$implicit;K.Lb(1),K.Pc(e.name)}}function Nn(e,t){if(1&e&&(K.dc(0,\"td\",30),K.Mc(1,Fn,2,1,\"div\",31),K.cc()),2&e){const e=t.$implicit;K.Lb(1),K.vc(\"ngIf\",e.name)}}function Mn(e,t){if(1&e&&(K.dc(0,\"th\",29),K.dc(1,\"strong\"),K.Oc(2),K.cc(),K.cc()),2&e){const e=K.pc(2);K.Lb(2),K.Pc(e.PARAM_COLUMNS.VALUE)}}function Dn(e,t){if(1&e&&(K.dc(0,\"td\",30),K.dc(1,\"div\",32),K.dc(2,\"strong\"),K.dc(3,\"span\"),K.Oc(4),K.qc(5,\"roundNumber\"),K.cc(),K.cc(),K.cc(),K.cc()),2&e){const e=t.$implicit;K.Lb(4),K.Pc(K.rc(5,1,e.value))}}function $n(e,t){if(1&e&&(K.dc(0,\"th\",29),K.Oc(1),K.cc()),2&e){const e=K.pc(2);K.Lb(1),K.Qc(\" \",e.PARAM_COLUMNS.RANGE,\" \")}}function Wn(e,t){if(1&e&&(K.dc(0,\"div\"),K.Oc(1),K.cc()),2&e){const e=K.pc(2).$implicit;K.Lb(1),K.Qc(\" \\xa0 by \",e.interval,\" \")}}function Hn(e,t){if(1&e&&(K.dc(0,\"div\"),K.Oc(1),K.qc(2,\"roundNumber\"),K.cc()),2&e){const e=K.pc(2).$implicit;K.Lb(1),K.Qc(\" \\xa0 by \",K.rc(2,1,(e.range[1]-e.range[0])/(e.n-1)),\" \")}}function Gn(e,t){1&e&&(K.dc(0,\"div\"),K.Oc(1,\" \\xa0 by 1 \"),K.cc())}function Vn(e,t){if(1&e&&(K.dc(0,\"div\"),K.Mc(1,Wn,2,1,\"div\",34),K.Mc(2,Hn,3,3,\"div\",34),K.Mc(3,Gn,2,0,\"div\",34),K.cc()),2&e){const e=K.pc().$implicit;K.Lb(1),K.vc(\"ngIf\",e.interval),K.Lb(1),K.vc(\"ngIf\",e.n),K.Lb(1),K.vc(\"ngIf\",!e.n&&!e.interval)}}function jn(e,t){if(1&e&&(K.dc(0,\"td\",30),K.dc(1,\"div\",33),K.dc(2,\"div\"),K.Oc(3),K.cc(),K.Mc(4,Vn,4,3,\"div\",34),K.cc(),K.cc()),2&e){const e=t.$implicit,n=K.pc(2);K.Lb(3),K.Rc(\"\",e.range[0],\" to \",e.range[1],\"\"),K.Lb(1),K.vc(\"ngIf\",\"sequence\"===n.experimentData.bestScore.proposer)}}function Zn(e,t){if(1&e&&(K.dc(0,\"th\",29),K.Oc(1),K.cc()),2&e){const e=K.pc(2);K.Lb(1),K.Qc(\" \",e.PARAM_COLUMNS.TYPE,\" \")}}function zn(e,t){if(1&e&&(K.dc(0,\"div\",32),K.Oc(1),K.cc()),2&e){const e=K.pc().$implicit;K.Lb(1),K.Pc(e.type)}}function Kn(e,t){if(1&e&&(K.dc(0,\"td\",30),K.Mc(1,zn,2,1,\"div\",31),K.cc()),2&e){const e=t.$implicit;K.Lb(1),K.vc(\"ngIf\",e.type)}}function Xn(e,t){1&e&&K.Yb(0,\"tr\",35)}function Un(e,t){1&e&&K.Yb(0,\"tr\",36)}function Yn(e,t){if(1&e){const e=K.ec();K.dc(0,\"div\",22),K.dc(1,\"table\",23),K.lc(\"matSortChange\",(function(t){return K.Ec(e),K.pc().sortParamData(t)})),K.bc(2,24),K.Mc(3,Pn,2,1,\"th\",25),K.Mc(4,Nn,2,1,\"td\",26),K.ac(),K.bc(5,24),K.Mc(6,Mn,3,1,\"th\",25),K.Mc(7,Dn,6,3,\"td\",26),K.ac(),K.bc(8,24),K.Mc(9,$n,2,1,\"th\",25),K.Mc(10,jn,5,3,\"td\",26),K.ac(),K.bc(11,24),K.Mc(12,Zn,2,1,\"th\",25),K.Mc(13,Kn,2,1,\"td\",26),K.ac(),K.Mc(14,Xn,1,0,\"tr\",27),K.Mc(15,Un,1,0,\"tr\",28),K.cc(),K.cc()}if(2&e){const e=K.pc();K.Lb(1),K.vc(\"dataSource\",e.dataSourceParams),K.Lb(1),K.wc(\"matColumnDef\",e.PARAM_COLUMNS.NAME),K.Lb(3),K.wc(\"matColumnDef\",e.PARAM_COLUMNS.VALUE),K.Lb(3),K.wc(\"matColumnDef\",e.PARAM_COLUMNS.RANGE),K.Lb(3),K.wc(\"matColumnDef\",e.PARAM_COLUMNS.TYPE),K.Lb(3),K.vc(\"matHeaderRowDef\",e.displayedResourceColumns)(\"matHeaderRowDefSticky\",!0),K.Lb(1),K.vc(\"matRowDefColumns\",e.displayedResourceColumns)}}function Jn(e,t){if(1&e&&(K.dc(0,\"div\",37),K.dc(1,\"pre\"),K.Oc(2),K.qc(3,\"json\"),K.cc(),K.cc()),2&e){const e=K.pc();K.Lb(2),K.Pc(K.rc(3,1,null==e.experimentData||null==e.experimentData.bestScore?null:e.experimentData.bestScore.configList))}}function Qn(e,t){if(1&e&&(K.dc(0,\"div\",42),K.dc(1,\"div\",46),K.Oc(2,\"Name\"),K.cc(),K.dc(3,\"div\",47),K.Oc(4),K.cc(),K.cc()),2&e){const e=K.pc(2);K.Lb(4),K.Pc(null==e.experimentData.experiment?null:e.experimentData.experiment.experimentName)}}function qn(e,t){if(1&e&&(K.dc(0,\"div\",42),K.dc(1,\"div\",46),K.Oc(2,\"Script\"),K.cc(),K.dc(3,\"div\",47),K.Oc(4),K.cc(),K.cc()),2&e){const e=K.pc(2);K.Lb(4),K.Pc(null==e.experimentData.experiment?null:e.experimentData.experiment.scriptName)}}function er(e,t){if(1&e&&(K.dc(0,\"div\",42),K.dc(1,\"div\",46),K.Oc(2,\"Experiment ID:\"),K.cc(),K.dc(3,\"div\",47),K.Oc(4),K.cc(),K.cc()),2&e){const e=K.pc(2);K.Lb(4),K.Pc(null==e.experimentData.experiment?null:e.experimentData.experiment.eid)}}function tr(e,t){if(1&e&&(K.dc(0,\"div\",42),K.dc(1,\"div\",46),K.Oc(2,\"Started at:\"),K.cc(),K.dc(3,\"div\",47),K.Oc(4),K.qc(5,\"date\"),K.cc(),K.cc()),2&e){const e=K.pc(2);K.Lb(4),K.Qc(\"\",K.sc(5,1,1e3*(null==e.experimentData.experiment?null:e.experimentData.experiment.startTime),\"medium\"),\" \")}}function nr(e,t){if(1&e&&(K.dc(0,\"div\",42),K.dc(1,\"div\",46),K.Oc(2,\"Ended at:\"),K.cc(),K.dc(3,\"div\",47),K.Oc(4),K.qc(5,\"date\"),K.cc(),K.cc()),2&e){const e=K.pc(2);K.Lb(4),K.Pc(K.sc(5,1,1e3*(null==e.experimentData.experiment?null:e.experimentData.experiment.endTime),\"medium\"))}}function rr(e,t){if(1&e&&(K.dc(0,\"div\",42),K.dc(1,\"div\",46),K.Oc(2,\"Technique:\"),K.cc(),K.dc(3,\"div\",47),K.Oc(4),K.cc(),K.cc()),2&e){const e=K.pc(2);K.Lb(4),K.Pc(null==e.experimentData.experiment||null==e.experimentData.experiment.expConfig?null:e.experimentData.experiment.expConfig.proposer)}}function ir(e,t){if(1&e&&(K.dc(0,\"div\",42),K.dc(1,\"div\",46),K.Oc(2,\"Working Directory:\"),K.cc(),K.dc(3,\"div\",47),K.Oc(4),K.cc(),K.cc()),2&e){const e=K.pc(2);K.Lb(4),K.Pc(null==e.experimentData.experiment||null==e.experimentData.experiment.expConfig?null:e.experimentData.experiment.expConfig.workingdir)}}function sr(e,t){if(1&e&&(K.dc(0,\"div\",38),K.dc(1,\"div\",39),K.Oc(2,\"Details\"),K.cc(),K.dc(3,\"button\",40),K.dc(4,\"mat-icon\"),K.Oc(5,\"close\"),K.cc(),K.cc(),K.cc(),K.dc(6,\"div\",41),K.dc(7,\"div\",42),K.dc(8,\"div\",43),K.Oc(9,\"SETTING\"),K.cc(),K.dc(10,\"div\",44),K.Oc(11,\"VALUE\"),K.cc(),K.cc(),K.Yb(12,\"hr\"),K.Mc(13,Qn,5,1,\"div\",45),K.Mc(14,qn,5,1,\"div\",45),K.Mc(15,er,5,1,\"div\",45),K.Mc(16,tr,6,4,\"div\",45),K.Mc(17,nr,6,4,\"div\",45),K.Mc(18,rr,5,1,\"div\",45),K.Mc(19,ir,5,1,\"div\",45),K.cc()),2&e){const e=K.pc();K.Lb(13),K.vc(\"ngIf\",null==e.experimentData.experiment?null:e.experimentData.experiment.experimentName),K.Lb(1),K.vc(\"ngIf\",null==e.experimentData.experiment?null:e.experimentData.experiment.scriptName),K.Lb(1),K.vc(\"ngIf\",null==e.experimentData.experiment?null:e.experimentData.experiment.eid),K.Lb(1),K.vc(\"ngIf\",null==e.experimentData.experiment?null:e.experimentData.experiment.startTime),K.Lb(1),K.vc(\"ngIf\",null==e.experimentData.experiment?null:e.experimentData.experiment.endTime),K.Lb(1),K.vc(\"ngIf\",null==e.experimentData.experiment||null==e.experimentData.experiment.expConfig?null:e.experimentData.experiment.expConfig.proposer),K.Lb(1),K.vc(\"ngIf\",null==e.experimentData.experiment||null==e.experimentData.experiment.expConfig?null:e.experimentData.experiment.expConfig.workingdir)}}let or=(()=>{class e{constructor(e,t,n,r,i,s,o){this.dialog=e,this.store=t,this.router=n,this.route=r,this.cdRef=i,this.snackbarService=s,this.utilsService=o,this.pageSize=8,this.showDetails=!1,this.PARAM_COLUMNS={NAME:\"NAME\",VALUE:\"BEST VALUE\",RANGE:\"RANGE\",TYPE:\"TYPE\"},this.displayedResourceColumns=[this.PARAM_COLUMNS.NAME,this.PARAM_COLUMNS.VALUE,this.PARAM_COLUMNS.RANGE,this.PARAM_COLUMNS.TYPE],this.dataSourceParams=new Je.k}ngOnInit(){var e,t;this.subscriptions=new a.a,this.subscriptions.add(null===(t=null===(e=this.route)||void 0===e?void 0:e.parent)||void 0===t?void 0:t.params.subscribe(e=>{this.experimentId=e.id})),this.subscriptions.add(this.experiment$.subscribe(e=>{if(this.dataSourceParams.data=[],this.dataSourceParams.paginator=null,this.dataSourceParams.sort=null,e){this.experimentData=e,e&&e.bestScore&&e.bestScore.params&&e.bestScore.params.length&&(this.dataSourceParams.data=e.bestScore.params.slice(),this.dataSourceParams.paginator=this.paginatorParams,this.dataSourceParams.sort=this.sortParams,this.cdRef.markForCheck());const t=new $.a;this.progressBarWidth=t.transform({value:this.experimentData.jobStats.finished,maxValue:this.experimentData.jobStats.total}),this.cdRef.markForCheck()}})),this.subscriptions.add(this.refreshInterval$.subscribe(e=>{e&&(this.refreshIntervalSubscription&&e!==this.refreshInterval&&this.refreshIntervalSubscription.unsubscribe(),this.refreshInterval=e,this.refreshIntervalSubscription=this.refreshIntervalData().subscribe())})),this.subscriptions.add(this.refreshingInterval$.subscribe(e=>{e&&(this.refreshData(),this.snackbarService.success(\"Data refreshed!\"),this.store.dispatch(new w(!1)))}))}ngOnDestroy(){this.subscriptions.unsubscribe(),this.refreshIntervalSubscription.unsubscribe()}openDetails(){this.showDetailsDialogRef=this.dialog.open(this.showDetailsDialog,{width:\"650px\",data:null,panelClass:\"info-modal\"}),this.subscriptions.add(this.showDetailsDialogRef.afterClosed().subscribe())}toggleExperiment(e){return Object(s.a)(this,void 0,void 0,(function*(){e&&(this.experimentId=e,this.store.dispatch(new g(this.experimentId)),this.store.dispatch(new p(this.experimentId)),yield this.router.navigate([`experiment/${e}/overview`]))}))}refreshIntervalData(){if(this.refreshInterval)return d(1e3*this.refreshInterval).pipe(Object(ee.a)(0),Object(F.a)(()=>{console.log(\"Fetching overview data...\"),this.refreshData()}))}refreshData(){this.experimentId&&(this.store.dispatch(new g(this.experimentId)),this.store.dispatch(new p(this.experimentId)))}sortParamData(e){var t,n;const r=null===(n=null===(t=this.experimentData)||void 0===t?void 0:t.bestScore)||void 0===n?void 0:n.params.slice();this.dataSourceParams.data=e.active&&\"\"!==e.direction?r.sort((t,n)=>{const r=\"asc\"===e.direction;switch(e.active){case this.PARAM_COLUMNS.NAME:return this.utilsService.compare(t.name,n.name,r);case this.PARAM_COLUMNS.RANGE:return this.utilsService.compare(t.range,n.range,r);case this.PARAM_COLUMNS.VALUE:return this.utilsService.compare(t.value,n.value,r);case this.PARAM_COLUMNS.TYPE:return this.utilsService.compare(t.type,n.type,r);default:return 0}}):r}}return e.\\u0275fac=function(t){return new(t||e)(K.Xb(nt.b),K.Xb(o.i),K.Xb(i.g),K.Xb(i.a),K.Xb(K.j),K.Xb(Q.b),K.Xb(Q.c))},e.\\u0275cmp=K.Rb({type:e,selectors:[[\"app-overview\"]],viewQuery:function(e,t){if(1&e&&(K.Ic(_n,!0),K.Ic(Ye.a,!0),K.Ic(Tn,!0)),2&e){let e;K.Ac(e=K.mc())&&(t.paginatorParams=e.first),K.Ac(e=K.mc())&&(t.sortParams=e.first),K.Ac(e=K.mc())&&(t.showDetailsDialog=e.first)}},decls:20,vars:12,consts:[[\"fxLayout\",\"column\"],[\"fxLayoutAlign\",\"space-between center\"],[1,\"mat-headline\"],[\"mat-button\",\"\",3,\"click\"],[\"svgIcon\",\"information\",1,\"mr-3\"],[\"fxFlex.gt-md\",\"50\",\"fxFlex\",\"100\",3,\"experimentId\",\"toggleExperiment\"],[\"fxLayout\",\"column\",\"fxLayoutGap\",\"15px\",1,\"w-full\"],[\"fxLayout\",\"column\",\"class\",\"w-full\",\"fxLayoutGap\",\"15px\",4,\"ngIf\"],[\"class\",\"mat-title\",4,\"ngIf\"],[\"class\",\"mat-title mb-0\",4,\"ngIf\"],[\"class\",\"table-container w-full\",4,\"ngIf\"],[\"showFirstLastButtons\",\"\",1,\"mat-elevation-z3\",3,\"pageSize\"],[\"paginatorParams\",\"\"],[\"class\",\"config-list p-3\",4,\"ngIf\"],[\"showDetailsDialog\",\"\"],[1,\"mat-title\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"center center\",1,\"w-full\"],[1,\"progress-bar\"],[1,\"progress-bar-fill\",3,\"ngStyle\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"start\",1,\"w-full\",\"progress-legend\"],[1,\"mb-0\",\"mat-title\"],[1,\"mat-title\",\"mb-0\"],[1,\"table-container\",\"w-full\"],[\"fxFill\",\"\",\"mat-table\",\"\",\"multiTemplateDataRows\",\"\",\"matSort\",\"\",\"matSortDisableClear\",\"\",1,\"mat-elevation-z3\",\"w-full\",3,\"dataSource\",\"matSortChange\"],[3,\"matColumnDef\"],[\"mat-header-cell\",\"\",\"mat-sort-header\",\"\",4,\"matHeaderCellDef\"],[\"mat-cell\",\"\",4,\"matCellDef\"],[\"mat-header-row\",\"\",4,\"matHeaderRowDef\",\"matHeaderRowDefSticky\"],[\"mat-row\",\"\",4,\"matRowDef\",\"matRowDefColumns\"],[\"mat-header-cell\",\"\",\"mat-sort-header\",\"\"],[\"mat-cell\",\"\"],[\"class\",\"maxw-500\",4,\"ngIf\"],[1,\"maxw-500\"],[\"fxLayout\",\"row\",1,\"maxw-500\",\"minw-200\"],[4,\"ngIf\"],[\"mat-header-row\",\"\"],[\"mat-row\",\"\"],[1,\"config-list\",\"p-3\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"space-between center\",1,\"info-dialog-title\",\"w-full\",\"p-3\",\"bg-primary\",\"text-white\"],[1,\"w-full\"],[\"mat-icon-button\",\"\",\"matDialogClose\",\"\"],[1,\"info-dialog-content\",\"m-3\"],[\"fxLayout\",\"row\"],[1,\"p-2\",\"minw-200\",\"details-header\"],[1,\"p-2\",\"details-header\"],[\"fxLayout\",\"row\",4,\"ngIf\"],[1,\"p-2\",\"minw-200\"],[1,\"p-2\"]],template:function(e,t){1&e&&(K.dc(0,\"div\",0),K.dc(1,\"div\",1),K.dc(2,\"h1\",2),K.Oc(3,\"Experiment Overview\"),K.cc(),K.dc(4,\"button\",3),K.lc(\"click\",(function(){return t.openDetails()})),K.Yb(5,\"mat-icon\",4),K.Oc(6),K.qc(7,\"uppercase\"),K.cc(),K.cc(),K.dc(8,\"app-experiment-dropdown\",5),K.lc(\"toggleExperiment\",(function(e){return t.toggleExperiment(e)})),K.cc(),K.dc(9,\"div\",6),K.Mc(10,Bn,10,8,\"div\",7),K.Mc(11,On,2,0,\"h2\",8),K.Mc(12,Ln,2,0,\"h2\",9),K.dc(13,\"div\"),K.Mc(14,Yn,16,8,\"div\",10),K.Yb(15,\"mat-paginator\",11,12),K.cc(),K.Mc(17,Jn,4,3,\"div\",13),K.cc(),K.cc(),K.Mc(18,sr,20,7,\"ng-template\",null,14,K.Nc)),2&e&&(K.Lb(6),K.Qc(\" \",K.rc(7,10,\"Experiment details\"),\" \"),K.Lb(2),K.vc(\"experimentId\",t.experimentId),K.Lb(2),K.vc(\"ngIf\",t.experimentData),K.Lb(1),K.vc(\"ngIf\",t.dataSourceParams.data.length>0),K.Lb(1),K.vc(\"ngIf\",!(t.dataSourceParams.data&&t.dataSourceParams.data.length||null===(null==t.experimentData||null==t.experimentData.bestScore?null:t.experimentData.bestScore.configList))),K.Lb(2),K.vc(\"ngIf\",t.dataSourceParams.data.length>0),K.Lb(1),K.Jc(\"display\",t.dataSourceParams.data.length>0?\"block\":\"none\"),K.vc(\"pageSize\",t.pageSize),K.Lb(2),K.vc(\"ngIf\",0===t.dataSourceParams.data.length&&null!==(null==t.experimentData||null==t.experimentData.bestScore?null:t.experimentData.bestScore.configList)))},directives:[oe.d,oe.c,ae.b,ce.a,kn,oe.b,oe.e,r.o,at.a,r.p,xe.c,Je.j,oe.f,Ye.a,Je.c,Je.e,Je.b,Je.g,Je.i,Je.d,Ye.b,Je.a,Je.f,Je.h,nt.d],pipes:[r.w,D.a,r.h,r.e],styles:[\".table-col[_ngcontent-%COMP%]{text-align:center}.progress-legend[_ngcontent-%COMP%]{position:absolute;width:90%!important;color:#000!important}.hyper-table[_ngcontent-%COMP%]{overflow-y:auto;max-height:300px}.details-header[_ngcontent-%COMP%]{font-size:18px;font-stretch:normal;font-style:normal;line-height:1.22;letter-spacing:normal;text-align:left}.minw-200[_ngcontent-%COMP%]{min-width:200px}.maxw-500[_ngcontent-%COMP%]{max-width:500px}.config-list[_ngcontent-%COMP%]{overflow:auto!important;max-height:500px!important}\"],changeDetection:0}),Object(s.b)([Object(o.e)(q.selectedExperiment)],e.prototype,\"experiment$\",void 0),Object(s.b)([Object(o.e)(q.experiments)],e.prototype,\"experiments$\",void 0),Object(s.b)([Object(o.e)(q.hyperparameters)],e.prototype,\"hyperparameters$\",void 0),Object(s.b)([Object(o.e)(q.refreshInterval)],e.prototype,\"refreshInterval$\",void 0),Object(s.b)([Object(o.e)(q.refreshingInterval)],e.prototype,\"refreshingInterval$\",void 0),Object(s.b)([Object(o.e)(q.loadingExperiment)],e.prototype,\"loadingExperiment$\",void 0),e})();const ar=[\"#3DDF7E\",\"#4B6FFF\",\"#ff9800\",\"#4caf50\",\"#00bcd4\",\"#673ab7\",\"#ff5722\",\"#607d8b\",\"#ffeb3b\",\"#ba68c8\",\"#7cb342\",\"#e64a19\",\"#03a9f4\",\"#3f51b5\",\"#cddc39\",\"#ad1457\",\"#2e7d32\",\"#1e88e5\",\"#e53935\",\"#9c27b0\",\"#009688\",\"#795548\",\"#f57c00\",\"#311b92\",\"#ec407a\",\"#aa00ff\",\"#00695c\",\"#304ffe\",\"#f44336\"];var cr=n(\"u3+B\"),lr=n(\"1jcm\"),hr=n(\"f6nW\"),dr=n(\"EUZL\"),ur=n(\"Iab2\");let fr=(()=>{let e=class{};return e.\\u0275mod=K.Vb({type:e}),e.\\u0275inj=K.Ub({factory:function(t){return new(t||e)},imports:[[hr.r]]}),e})();var gr=function(e){return e.XLS=\"xls\",e.XLSX=\"xlsx\",e.CSV=\"csv\",e.TXT=\"txt\",e.JSON=\"json\",e.OTHER=\"other\",e}({});let pr=(()=>{let e=class{constructor(){}extractRows(e,t,n){return this.getRowsAsJsonArray(e,t,null!=n?n:e._rowOutlet)}getRowsAsJsonArray(e,t,n){const r=this.getRenderedRows(e,n);return this.convertToJsonArray(t,r)}getRenderedRows(e,t){return e._getRenderedRows(t)}convertToJsonArray(e,t){const n=new Array;for(let r=0;r<t.length;r++){const i=this.convertRow(e,t[r]);n.push(this.createExcelItem(i))}return n}convertRow(e,t){const n=new Array,r=t.children;for(let i=0;i<r.length;i++)if(!this.shouldHide(e,i)){const e=r.item(i).innerText;n.push(e)}return n}shouldHide(e,t){return!(!e||!e.includes(t))}createExcelItem(e){return Object.assign({},e)}};return e.\\u0275fac=function(t){return new(t||e)},e.\\u0275prov=Object(K.Tb)({factory:function(){return new e},token:e,providedIn:\"root\"}),e})();class mr{constructor(e,t){this.extension=e,this.contentTypeHeader=t}}const Cr=\";charset=utf-8\",br=gr.TXT+\"/\",vr=\"application/octet-stream\",Ir=\".\",Ar=Ir+gr.XLSX,yr=Ir+gr.CSV,wr=Ir+gr.JSON,Sr=Ir+gr.TXT,xr=new mr(Ir+gr.XLS,vr+Cr),Er=new mr(Ar,vr+Cr),kr=new mr(wr,br+JSON+Cr),_r=new mr(Sr,br+gr.TXT+Cr),Tr=new mr(yr,br+gr.CSV+Cr),Rr=\".*.\"+gr.XLS+\"$\";class Br{static save(e,t,n){const r=new Blob([e],{type:t.contentTypeHeader});let i=\"mat-table-exporter\";n&&n.fileName&&(i=n.fileName),Object(ur.saveAs)(r,i+t.extension)}static isXls(e){return null!=e.toLowerCase().match(Rr)}static identifyExportType(e){return e&&Br.isXls(e)?gr.XLS:gr.XLSX}static removeExtension(e){e.fileName=e.fileName.split(Ir)[0]}}class Or{constructor(){}export(e,t){if(!e)throw new Error(\"Empty json array is provided, rows parameter is mandatory!\");const n=this.createContent(e,t),r=this.getMimeType();Br.save(n,r,t)}}class Lr extends Or{constructor(){super()}createContent(e,t){const n=dr.utils.json_to_sheet(e,{skipHeader:!0});return this.workSheetToContent(n,t)}}let Pr=(()=>{let e=class extends Lr{constructor(){super()}workSheetToContent(e,t){var n,r;return dr.utils.sheet_to_csv(e,{FS:(r=null===(n=t)||void 0===n?void 0:n.delimiter,null!=r?r:\",\")})}getMimeType(){return Tr}};return e.\\u0275fac=function(t){return new(t||e)},e.\\u0275prov=Object(K.Tb)({factory:function(){return new e},token:e,providedIn:\"root\"}),e})(),Fr=(()=>{let e=class extends Or{constructor(){super()}createContent(e,t){let n=\"\";return e.forEach(e=>{n+=Object.values(e).join(this.getDelimiter(t))+\"\\n\"}),n}getMimeType(){return _r}getDelimiter(e){return e&&e.delimiter?e.delimiter:\"\\t\"}};return e.\\u0275fac=function(t){return new(t||e)},e.\\u0275prov=Object(K.Tb)({factory:function(){return new e},token:e,providedIn:\"root\"}),e})(),Nr=(()=>{let e=class extends Lr{constructor(){super()}workSheetToContent(e,t={}){const n=dr.utils.book_new();return t.columnWidths&&(e[\"!cols\"]=this.convertToWch(t.columnWidths)),this.correctTypes(t),dr.utils.book_append_sheet(n,e,t.sheet),Object(dr.write)(n,t)}getMimeType(){return xr}correctTypes(e){e.type||(e.type=\"array\"),e.bookType=this.getMimeType().extension.replace(\".\",\"\")}convertToWch(e){return e.map(e=>({wch:e}))}};return e.\\u0275fac=function(t){return new(t||e)},e.\\u0275prov=Object(K.Tb)({factory:function(){return new e},token:e,providedIn:\"root\"}),e})(),Mr=(()=>{let e=class extends Or{constructor(){super()}createContent(e,t){return JSON.stringify(e)}getMimeType(){return kr}};return e.\\u0275fac=function(t){return new(t||e)},e.\\u0275prov=Object(K.Tb)({factory:function(){return new e},token:e,providedIn:\"root\"}),e})(),Dr=(()=>{let e=class extends Nr{constructor(){super()}getMimeType(){return Er}};return e.\\u0275fac=function(t){return new(t||e)},e.\\u0275prov=Object(K.Tb)({factory:function(){return new e},token:e,providedIn:\"root\"}),e})(),$r=(()=>{let e=class{constructor(e){this.injector=e}getService(e){switch(e){case gr.XLS.valueOf():return this.injector.get(Nr);case gr.XLSX.valueOf():return this.injector.get(Dr);case gr.JSON.valueOf():return this.injector.get(Mr);case gr.TXT.valueOf():return this.injector.get(Fr);case gr.CSV.valueOf():return this.injector.get(Pr);case gr.OTHER.valueOf():return null;default:return this.injector.get(Dr)}}};return e.\\u0275fac=function(t){return new(t||e)(K.hc(K.x))},e.\\u0275prov=Object(K.Tb)({factory:function(){return new e(Object(K.hc)(K.t))},token:e,providedIn:\"root\"}),e})(),Wr=(()=>{let e=class{constructor(e,t,n,r){this.renderer=e,this.serviceLocator=t,this.dataExtractor=n,this._cdkTable=r,this.exportCompleted=new K.s,this.exportStarted=new K.s}exportTable(e,t){this.loadExporter(e),this._options=t,this.exportStarted.emit(),this._isIterating=!0,this._isExporting=!0,this._data=new Array,this.extractTableHeader();try{this.exportWithPagination()}catch(n){this.exportSinglePage()}}toggleRow(e){const t=this.getPaginatedRowIndex(e);this.isToggleOn(t)?this.toggleOff(t):this.toggleOn(t)}resetToggleRows(){this._selectedRows=[]}toggleOn(e){this._selectedRows=[...this._selectedRows||[],e]}toggleOff(e){this._selectedRows=this._selectedRows.filter(t=>t!==e)}isToggleOn(e){var t;return null===(t=this._selectedRows)||void 0===t?void 0:t.includes(e)}loadExporter(e){this._exporterService=e===gr.OTHER.valueOf()?this.exporter:this.serviceLocator.getService(e)}exportWithPagination(){this._initialPageIndex=this.getCurrentPageIndex(),this.initPageHandler(),this.goToPage(0)}exportSinglePage(){this.extractDataOnCurrentPage(),this.extractTableFooter(),this.exportExtractedData()}extractDataOnCurrentPage(){const e=this.dataExtractor.extractRows(this._cdkTable,this.hiddenColumns);this._data=this._data.concat(this.getSelectedRows(e))}getSelectedRows(e){return this.isSelectiveExport()?e.filter((e,t)=>this._selectedRows.includes(this.getPaginatedRowIndex(t))):e}isSelectiveExport(){return this._selectedRows&&!this.isMasterToggleOff()&&!this.isMasterToggleOn()}isMasterToggleOn(){return this.compareSelectedRowCount(this.getTotalItemsCount())}isMasterToggleOff(){return this.compareSelectedRowCount(0)}compareSelectedRowCount(e){var t;return!((null===(t=this._selectedRows)||void 0===t?void 0:t.length)!==e)}initPageHandler(){this._subscription||(this._subscription=this.getPageChangeObservable().subscribe(()=>{setTimeout(()=>{this._isIterating?(this.extractDataOnCurrentPage(),this.hasNextPage()?this.nextPage():(this._isIterating=!1,this.goToPage(this._initialPageIndex))):this._isExporting&&(this._isExporting=!1,this.extractTableFooter(),this.exportExtractedData())})}))}exportExtractedData(){this._exporterService.export(this._data,this._options),this._data=new Array,this.exportCompleted.emit()}extractSpecialRows(e){this._data.push(...this.dataExtractor.extractRows(this._cdkTable,this.hiddenColumns,e))}extractTableHeader(){this.extractSpecialRows(this._cdkTable._headerRowOutlet)}extractTableFooter(){this.extractSpecialRows(this._cdkTable._footerRowOutlet)}hasNextPage(){return this.getCurrentPageIndex()<this.getPageCount()-1}nextPage(){this.goToPage(this.getCurrentPageIndex()+1)}getPaginatedRowIndex(e){return e+this.getPageSize()*this.getCurrentPageIndex()}};return e.\\u0275fac=function(t){return new(t||e)(K.Xb(K.O),K.Xb($r),K.Xb(pr),K.Xb(void 0))},e.\\u0275dir=K.Sb({type:e,inputs:{hiddenColumns:\"hiddenColumns\",exporter:\"exporter\"},outputs:{exportCompleted:\"exportCompleted\",exportStarted:\"exportStarted\"}}),e})(),Hr=(()=>{let e=class extends Wr{constructor(e,t,n,r){super(e,t,n,r)}ngAfterViewInit(){this.exportStarted.subscribe(e=>{this.enablePaginator(!1)}),this.exportCompleted.subscribe(e=>{this.enablePaginator(!0)})}getPageCount(){return this.getPaginator().getNumberOfPages()}getPageSize(){var e,t;return null!=(t=null===(e=this.getPaginator())||void 0===e?void 0:e.pageSize)?t:0}getCurrentPageIndex(){var e,t;return null!=(t=null===(e=this.getPaginator())||void 0===e?void 0:e.pageIndex)?t:0}getTotalItemsCount(){var e,t,n,r,i;return null!=(i=null!=(t=null===(e=this.getPaginator())||void 0===e?void 0:e.length)?t:null===(r=null===(n=this.getDataSource())||void 0===n?void 0:n.data)||void 0===r?void 0:r.length)?i:0}goToPage(e){this.getPaginator().pageIndex=e,this.getPaginator()._changePageSize(this.getPaginator().pageSize)}getPageChangeObservable(){return this.getPaginator().page}getDataSource(){return this._cdkTable.dataSource}getPaginator(){return this.getDataSource().paginator}enablePaginator(e){this.getPaginator()&&(this.getPaginator().disabled=!e,this.getPaginator()._changePageSize(this.getPaginator().pageSize))}};return e.\\u0275fac=function(t){return new(t||e)(K.Xb(K.O),K.Xb($r),K.Xb(pr),K.Xb(Je.j,11))},e.\\u0275dir=K.Sb({type:e,selectors:[[\"\",\"matTableExporter\",\"\"]],exportAs:[\"matTableExporter\"],features:[K.Ib]}),e})(),Gr=(()=>{let e=class{};return e.\\u0275mod=K.Vb({type:e}),e.\\u0275inj=K.Ub({factory:function(t){return new(t||e)},imports:[[Je.l,fr]]}),e})();function Vr(e,t){if(1&e&&(K.dc(0,\"mat-option\",35),K.Oc(1),K.cc()),2&e){const e=t.$implicit;K.vc(\"value\",e),K.Lb(1),K.Qc(\" \",e,\" \")}}function jr(e,t){if(1&e){const e=K.ec();K.dc(0,\"mat-form-field\",32),K.dc(1,\"mat-label\"),K.Oc(2,\" Y-axis \"),K.cc(),K.dc(3,\"mat-select\",33),K.lc(\"selectionChange\",(function(t){return K.Ec(e),K.pc().selectLabel(t.value)})),K.Mc(4,Vr,2,2,\"mat-option\",34),K.cc(),K.cc()}if(2&e){const e=K.pc();K.Lb(3),K.vc(\"formControl\",e.selectedLabel),K.Lb(1),K.vc(\"ngForOf\",e.jobMultipleResulsLabels)}}function Zr(e,t){if(1&e&&(K.dc(0,\"mat-option\",35),K.Oc(1),K.cc()),2&e){const e=t.$implicit;K.vc(\"value\",e),K.Lb(1),K.Qc(\" \",e,\" \")}}function zr(e,t){if(1&e){const e=K.ec();K.dc(0,\"mat-form-field\",32),K.dc(1,\"mat-label\"),K.Oc(2,\" Select columns \"),K.cc(),K.dc(3,\"mat-select\",36),K.lc(\"selectionChange\",(function(t){return K.Ec(e),K.pc().selectHyperparams(t)}))(\"ngModelChange\",(function(t){return K.Ec(e),K.pc().selectedCols=t})),K.Mc(4,Zr,2,2,\"mat-option\",34),K.cc(),K.cc()}if(2&e){const e=K.pc();K.Lb(3),K.vc(\"ngModel\",e.selectedCols),K.Lb(1),K.vc(\"ngForOf\",e.allColumns)}}function Kr(e,t){if(1&e&&(K.dc(0,\"th\",40),K.Oc(1),K.qc(2,\"flu\"),K.cc()),2&e){const e=K.pc().$implicit;K.Lb(1),K.Pc(K.rc(2,1,e))}}function Xr(e,t){if(1&e&&(K.dc(0,\"span\"),K.Oc(1),K.qc(2,\"number\"),K.cc()),2&e){const e=K.pc(2).$implicit,t=K.pc().$implicit;K.Lb(1),K.Pc(K.sc(2,1,e[t],\"1.0-6\"))}}function Ur(e,t){if(1&e&&(K.dc(0,\"span\"),K.Oc(1),K.cc()),2&e){const e=K.pc(2).$implicit,t=K.pc().$implicit;K.Lb(1),K.Pc(e[t])}}function Yr(e,t){if(1&e&&(K.dc(0,\"span\"),K.Mc(1,Xr,3,4,\"span\",42),K.Mc(2,Ur,2,1,\"span\",42),K.cc()),2&e){const e=K.pc().$implicit,t=K.pc().$implicit,n=K.pc();K.Lb(1),K.vc(\"ngIf\",n.utilsService.isNumber(e[t])),K.Lb(1),K.vc(\"ngIf\",!n.utilsService.isNumber(e[t]))}}function Jr(e,t){if(1&e&&(K.dc(0,\"span\"),K.Oc(1),K.qc(2,\"date\"),K.cc()),2&e){const e=K.pc(2).$implicit,t=K.pc().$implicit;K.Lb(1),K.Pc(K.sc(2,1,1e3*e[t],\"medium\"))}}function Qr(e,t){if(1&e&&(K.dc(0,\"span\"),K.Mc(1,Jr,3,4,\"span\",42),K.cc()),2&e){const e=K.pc().$implicit,t=K.pc().$implicit;K.Lb(1),K.vc(\"ngIf\",e[t])}}function qr(e,t){if(1&e&&(K.dc(0,\"td\",41),K.Mc(1,Yr,3,2,\"span\",42),K.Mc(2,Qr,2,1,\"span\",42),K.cc()),2&e){const e=t.$implicit,n=K.pc().$implicit;K.vc(\"ngClass\",\"status\"==n?\"status-\"+e.status:\"\"),K.Lb(1),K.vc(\"ngIf\",\"start time\"!==n&&\"end time\"!==n),K.Lb(1),K.vc(\"ngIf\",\"start time\"===n||\"end time\"===n)}}function ei(e,t){1&e&&(K.bc(0,37),K.Mc(1,Kr,3,3,\"th\",38),K.Mc(2,qr,3,3,\"td\",39),K.ac()),2&e&&K.vc(\"matColumnDef\",t.$implicit)}function ti(e,t){1&e&&K.Yb(0,\"tr\",43)}function ni(e,t){1&e&&K.Yb(0,\"tr\",44)}const ri=function(){return[5,10,25,100]};let ii=(()=>{class e{constructor(e,t,n,r,i,s,o){this.store=e,this.route=t,this.router=n,this.cdRef=r,this.snackbarService=i,this.plotlyService=s,this.utilsService=o,this.pageSize=10,this.displayedColumns=[],this.displayedHyperparamsColumns=[],this.allColumns=[],this.columnsToDisplay=[],this.dataSource=new Je.k,this.tableFullData=[],this.tableHyperparamsData=[],this.optimizationCurve=!0,this.chartWidth=600,this.showInteractionGuide=!1,this.selectedLabel=new de.e,this.yAxisLabel=\"score\",this.linePlot={data:[],layout:{height:540,showlegend:!0,title:{text:\"Score\",font:{family:\"Courier New, monospace\",size:24},xref:\"paper\",x:.05},xaxis:{title:{text:\"x Axis\",font:{family:\"Courier New, monospace\",size:18,color:\"#7f7f7f\"}}},yaxis:{title:{text:\"Y Axis\",font:{family:\"Courier New, monospace\",size:18,color:\"#7f7f7f\"}}}},config:{displayModeBar:!1,responsive:!0,displaylogo:!1,scrollZoom:!0}}}ngOnInit(){var e,t;this.subscriptions=new a.a,this.subscriptions.add(null===(t=null===(e=this.route)||void 0===e?void 0:e.parent)||void 0===t?void 0:t.params.subscribe(e=>{this.experimentId=e.id,this.selectedCols=[],this.allColumns=[]})),this.subscriptions.add(this.jobs$.subscribe(e=>{e&&e.length&&(this.jobs=e,this.displayedColumns=Object.keys(this.jobs[0].tableData),this.selectedCols&&this.selectedCols.length||(this.selectedCols=this.displayedColumns.slice()),this.displayedHyperparamsColumns=Object.keys(this.jobs[0].tableHyperParams),this.allColumns=this.displayedColumns.concat(this.displayedHyperparamsColumns),this.columnsToDisplay=this.selectedCols.slice(),this.jobs.map(e=>{this.tableHyperparamsData.push(e.tableHyperParams),this.tableFullData.push(e.tableFullData)}),this.dataSource.data=this.tableFullData.slice(),this.dataSource.paginator=this.paginator,this.dataSource.sort=this.sort,this.cdRef.markForCheck())})),this.subscriptions.add(this.jobsGraphData$.subscribe(e=>{e&&(this.jobsGraphData=e,this.linePlot.data=[],this.linePlot.data=[this.jobsGraphData],this.cdRef.markForCheck())})),this.subscriptions.add(this.jobsOptimizationGraphData$.subscribe(e=>{e&&(this.jobsOptimizationGraphData=e,this.linePlot.data.push(e),this.cdRef.markForCheck())})),this.subscriptions.add(this.theme$.subscribe(e=>{e&&(this.theme=e,this.toggleChartTheme())})),this.subscriptions.add(this.refreshInterval$.subscribe(e=>{e&&(this.refreshIntervalSubscription&&e!==this.refreshInterval&&this.refreshIntervalSubscription.unsubscribe(),this.refreshInterval=e,this.refreshIntervalSubscription=this.refreshIntervalData().subscribe())})),this.subscriptions.add(this.refreshingInterval$.subscribe(e=>{e&&(this.refreshData(),this.snackbarService.success(\"Data refreshed!\"),this.store.dispatch(new w(!1)))})),this.subscriptions.add(this.jobMultipleResulsLabels$.subscribe(e=>{this.jobMultipleResulsLabels=e,this.cdRef.markForCheck()})),this.subscriptions.add(this.jobMultipleResulsSelectedLabel$.subscribe(e=>{this.jobMultipleResulsSelectedLabel=e,this.selectedLabel.patchValue(e),this.cdRef.markForCheck()}))}toggleChartTheme(){this.theme&&(this.linePlot.layout=\"dark\"===this.theme.name?this.changeDarkModeChart():this.changeLightModeChart(),this.cdRef.markForCheck())}get exportedName(){return\"jobStatus-\"+(new Date).getTime()/1e3}selectHyperparams(e){e&&(this.selectedCols=e.value,this.dataSource.data=this.tableFullData.slice(),this.selectedCols=this.pushColumnToEnd(\"start time\",this.selectedCols),this.selectedCols=this.pushColumnToEnd(\"end time\",this.selectedCols),this.columnsToDisplay=this.selectedCols?this.selectedCols.slice():[],this.cdRef.markForCheck())}pushColumnToEnd(e,t){if(!e||!t||!t.length)return;const n=t.findIndex(t=>t===e);return-1!==n&&(t.splice(n,1),t.push(e)),t}downloadGraph(){const e=this.plotlyService.getInstanceByDivId(\"jobStatus\");this.plotlyService.getPlotly().downloadImage(e,{format:\"png\",width:\"1000\",height:\"450\",filename:\"jobStatus\"})}toggleExperiment(e){e&&(this.experimentId=e,this.cleanData(),this.yAxisLabel=\"score\",this.toggleChartTheme(),this.store.dispatch(new O(this.yAxisLabel)).subscribe(()=>{this.store.dispatch(new m({eid:this.experimentId})),this.optimizationCurve&&this.store.dispatch(new C({eid:this.experimentId})),this.store.dispatch(new M.a([`experiment/${e}/job-status`])),this.cdRef.markForCheck()}))}cleanData(){this.optimizationCurve=!0,this.columnsToDisplay=[],this.displayedHyperparamsColumns=[],this.tableHyperparamsData=[],this.tableFullData=[]}refreshIntervalData(){if(this.refreshInterval)return d(1e3*this.refreshInterval).pipe(Object(ee.a)(0),Object(F.a)(()=>{console.log(\"Fetching job status data...\"),this.refreshData()}))}refreshData(){this.toggleChartTheme(),this.experimentId&&(this.tableHyperparamsData=[],this.tableFullData=[],this.store.dispatch(new m({eid:this.experimentId})).subscribe(()=>{this.optimizationCurve&&this.store.dispatch(new C({eid:this.experimentId}))}))}changeLightModeChart(){const e=new W.a;return{colorway:ar,height:540,showlegend:!0,xaxis:{zeroline:!1,title:{text:\"Number of jobs\",font:{size:18,color:\"#7f7f7f\"}}},yaxis:{zeroline:!1,title:{text:e.transform(this.yAxisLabel),font:{size:18,color:\"#7f7f7f\"}}}}}changeDarkModeChart(){const e=new W.a;return{colorway:ar,plot_bgcolor:\"#424242\",paper_bgcolor:\"#424242\",height:540,showlegend:!0,legend:{font:{color:\"#ffffff\"}},xaxis:{title:{text:\"Number of jobs\",font:{size:18,color:\"#ffffff\"}},gridcolor:\"#c0c0c0\",tickfont:{color:\"#ffffff\"},showline:!0,showgrid:!0,zeroline:!1,showticklabels:!0},yaxis:{title:{text:e.transform(this.yAxisLabel),font:{size:18,color:\"#ffffff\"}},gridcolor:\"#c0c0c0\",tickfont:{color:\"#ffffff\"},showline:!0,showgrid:!0,zeroline:!1,showticklabels:!0},line:{color:\"#ffffff\"}}}onToggleChartLine(e){if(e){switch(e.checked){case!0:this.store.dispatch(new C({eid:this.experimentId}));break;case!1:this.tableHyperparamsData=[],this.tableFullData=[],this.store.dispatch(new m({eid:this.experimentId}))}this.cdRef.markForCheck()}}ngOnDestroy(){this.subscriptions.unsubscribe(),this.refreshIntervalSubscription.unsubscribe()}onResize(e){e&&this.cdRef.markForCheck()}selectLabel(e){e&&(this.yAxisLabel=e,this.cdRef.markForCheck(),this.toggleChartTheme(),this.store.dispatch(new O(e)),this.optimizationCurve&&this.store.dispatch(new C({eid:this.experimentId})))}}return e.\\u0275fac=function(t){return new(t||e)(K.Xb(o.i),K.Xb(i.a),K.Xb(i.g),K.Xb(K.j),K.Xb(Q.b),K.Xb(cr.c),K.Xb(Q.c))},e.\\u0275cmp=K.Rb({type:e,selectors:[[\"app-job-status\"]],viewQuery:function(e,t){if(1&e&&(K.Ic(at.a,!0),K.Ic(Ye.a,!0)),2&e){let e;K.Ac(e=K.mc())&&(t.paginator=e.first),K.Ac(e=K.mc())&&(t.sort=e.first)}},decls:72,vars:41,consts:[[1,\"mat-headline\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"space-between center\",1,\"mt-5\",\"w-full\"],[1,\"mr-3\",\"w-full\",3,\"experimentId\",\"toggleExperiment\"],[\"appearance\",\"outline\",\"class\",\"w-full mr-3\",4,\"ngIf\"],[1,\"mr-5\",3,\"ngModel\",\"change\",\"ngModelChange\"],[\"fxLayoutAlign\",\"space-between center\",1,\"w-full\",\"mb-4\",\"mr-3\"],[\"matTooltip\",\"Current view will be downloaded\",\"mat-raised-button\",\"\",3,\"click\"],[\"fxFlexAlign\",\"end\",\"mat-raised-button\",\"\",3,\"matMenuTriggerFor\"],[1,\"mr-3\"],[\"fxLayout\",\"row\",1,\"w-full\"],[\"divId\",\"jobStatus\",1,\"w-full\",\"mr-3\",\"chart\",3,\"data\",\"layout\",\"config\",\"resize\"],[1,\"w-full\",\"mt-3\",\"mb-12\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"start center\"],[\"matTooltip\",\"Current table will be exported\",\"mat-raised-button\",\"\",1,\"mb-2\",\"mr-1\",\"mw-150\",3,\"matMenuTriggerFor\"],[\"mat-table\",\"\",\"matTableExporter\",\"\",\"matSort\",\"\",1,\"mat-elevation-z8\",\"w-full\",\"job-status-table\",3,\"dataSource\"],[\"exporter\",\"matTableExporter\"],[3,\"matColumnDef\",4,\"ngFor\",\"ngForOf\"],[\"mat-header-row\",\"\",4,\"matHeaderRowDef\"],[\"mat-row\",\"\",4,\"matRowDef\",\"matRowDefColumns\"],[1,\"mat-elevation-z8\",3,\"pageSize\",\"pageSizeOptions\"],[\"exportTableMenu\",\"matMenu\"],[\"mat-menu-item\",\"\",3,\"click\"],[\"xPosition\",\"before\"],[\"helpMenu\",\"matMenu\"],[1,\"help-menu\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"end center\",1,\"w-full\"],[\"mat-icon-button\",\"\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"space-between center\",\"fxLayoutGap\",\"30px\",1,\"help-content\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"start center\",\"fxLayoutGap\",\"30px\",1,\"p-5\"],[1,\"w-full\"],[1,\"my-3\",\"ml-5\",\"help-list\"],[1,\"mt-3\",\"ml-5\",\"help-list\"],[\"appearance\",\"outline\",1,\"w-full\",\"mr-3\"],[1,\"w-full\",3,\"formControl\",\"selectionChange\"],[3,\"value\",4,\"ngFor\",\"ngForOf\"],[3,\"value\"],[\"multiple\",\"\",1,\"w-full\",3,\"ngModel\",\"selectionChange\",\"ngModelChange\"],[3,\"matColumnDef\"],[\"mat-header-cell\",\"\",\"mat-sort-header\",\"\",4,\"matHeaderCellDef\"],[\"mat-cell\",\"\",3,\"ngClass\",4,\"matCellDef\"],[\"mat-header-cell\",\"\",\"mat-sort-header\",\"\"],[\"mat-cell\",\"\",3,\"ngClass\"],[4,\"ngIf\"],[\"mat-header-row\",\"\"],[\"mat-row\",\"\"]],template:function(e,t){if(1&e){const e=K.ec();K.dc(0,\"h1\",0),K.Oc(1,\"Status of all the jobs for the current experiment\"),K.cc(),K.dc(2,\"div\",1),K.dc(3,\"app-experiment-dropdown\",2),K.lc(\"toggleExperiment\",(function(e){return t.toggleExperiment(e)})),K.cc(),K.Mc(4,jr,5,2,\"mat-form-field\",3),K.dc(5,\"mat-slide-toggle\",4),K.lc(\"change\",(function(e){return t.onToggleChartLine(e)}))(\"ngModelChange\",(function(e){return t.optimizationCurve=e})),K.Oc(6,\" Best Results \"),K.cc(),K.cc(),K.dc(7,\"div\",5),K.dc(8,\"button\",6),K.lc(\"click\",(function(){return t.downloadGraph()})),K.Oc(9),K.qc(10,\"uppercase\"),K.cc(),K.dc(11,\"button\",7),K.dc(12,\"mat-icon\",8),K.Oc(13,\"help_outline\"),K.cc(),K.Oc(14),K.qc(15,\"uppercase\"),K.cc(),K.cc(),K.dc(16,\"div\",9),K.dc(17,\"plotly-plot\",10),K.lc(\"resize\",(function(e){return t.onResize(e)}),!1,K.Dc),K.cc(),K.cc(),K.dc(18,\"div\",11),K.dc(19,\"div\",12),K.Mc(20,zr,5,2,\"mat-form-field\",3),K.dc(21,\"button\",13),K.Oc(22),K.qc(23,\"uppercase\"),K.cc(),K.cc(),K.dc(24,\"table\",14,15),K.Mc(26,ei,3,1,\"ng-container\",16),K.Mc(27,ti,1,0,\"tr\",17),K.Mc(28,ni,1,0,\"tr\",18),K.cc(),K.Yb(29,\"mat-paginator\",19),K.cc(),K.dc(30,\"mat-menu\",null,20),K.dc(32,\"button\",21),K.lc(\"click\",(function(){return K.Ec(e),K.Bc(25).exportTable(\"xls\",{fileName:t.exportedName})})),K.Oc(33),K.qc(34,\"uppercase\"),K.cc(),K.dc(35,\"button\",21),K.lc(\"click\",(function(){return K.Ec(e),K.Bc(25).exportTable(\"xlsx\",{fileName:t.exportedName})})),K.Oc(36),K.qc(37,\"uppercase\"),K.cc(),K.dc(38,\"button\",21),K.lc(\"click\",(function(){return K.Ec(e),K.Bc(25).exportTable(\"csv\",{fileName:t.exportedName})})),K.Oc(39),K.qc(40,\"uppercase\"),K.cc(),K.dc(41,\"button\",21),K.lc(\"click\",(function(){return K.Ec(e),K.Bc(25).exportTable(\"txt\",{fileName:t.exportedName})})),K.Oc(42),K.qc(43,\"uppercase\"),K.cc(),K.cc(),K.dc(44,\"mat-menu\",22,23),K.dc(46,\"mat-toolbar\",24),K.dc(47,\"div\",25),K.dc(48,\"button\",26),K.dc(49,\"mat-icon\"),K.Oc(50,\"close\"),K.cc(),K.cc(),K.cc(),K.cc(),K.dc(51,\"mat-drawer-container\",27),K.dc(52,\"div\",28),K.dc(53,\"div\",29),K.Oc(54,\" On the graph: \"),K.dc(55,\"ul\",30),K.dc(56,\"li\"),K.Oc(57,\"zoom out/in: place mouse on the graph and scroll up/down\"),K.cc(),K.dc(58,\"li\"),K.Oc(59,\"zoom in a specific area: click mouse anywhere on the graph and drag it to draw a square\"),K.cc(),K.dc(60,\"li\"),K.Oc(61,\"change the axis range: drag the label on x-axis or y-axis\"),K.cc(),K.dc(62,\"li\"),K.Oc(63,\"show/hide data: click on the corresponding legend\"),K.cc(),K.dc(64,\"li\"),K.Oc(65,\"show details of each job: hover over the data point\"),K.cc(),K.dc(66,\"li\"),K.Oc(67,\"go back to default view: double-click on anywhere on the plot\"),K.cc(),K.cc(),K.Oc(68,\" On the table: \"),K.dc(69,\"ul\",31),K.dc(70,\"li\"),K.Oc(71,\"Sort: place mouse on the column header to show the sorting arrow\"),K.cc(),K.cc(),K.cc(),K.cc(),K.cc(),K.cc()}if(2&e){const e=K.Bc(31),n=K.Bc(45);K.Lb(3),K.vc(\"experimentId\",t.experimentId),K.Lb(1),K.vc(\"ngIf\",t.jobMultipleResulsLabels&&t.jobMultipleResulsLabels.length>0),K.Lb(1),K.vc(\"ngModel\",t.optimizationCurve),K.Lb(4),K.Qc(\" \",K.rc(10,26,\"Download graph png\"),\" \"),K.Lb(2),K.vc(\"matMenuTriggerFor\",n),K.Lb(3),K.Qc(\" \",K.rc(15,28,\"interaction guide\"),\" \"),K.Lb(3),K.vc(\"data\",t.linePlot.data)(\"layout\",t.linePlot.layout)(\"config\",t.linePlot.config),K.Lb(3),K.vc(\"ngIf\",t.allColumns&&t.allColumns.length>0&&null!==t.allColumns),K.Lb(1),K.vc(\"matMenuTriggerFor\",e),K.Lb(1),K.Qc(\" \",K.rc(23,30,\"Export as\"),\" \"),K.Lb(2),K.Jc(\"display\",t.columnsToDisplay&&t.columnsToDisplay.length?\"\":\"none\"),K.vc(\"dataSource\",t.dataSource),K.Lb(2),K.vc(\"ngForOf\",t.columnsToDisplay),K.Lb(1),K.vc(\"matHeaderRowDef\",t.columnsToDisplay),K.Lb(1),K.vc(\"matRowDefColumns\",t.columnsToDisplay),K.Lb(1),K.Jc(\"display\",t.columnsToDisplay&&t.columnsToDisplay.length&&t.dataSource.data.length>0?\"block\":\"none\"),K.vc(\"pageSize\",t.pageSize)(\"pageSizeOptions\",K.xc(40,ri)),K.Lb(4),K.Qc(\" \",K.rc(34,32,\"xls\"),\" \"),K.Lb(3),K.Qc(\" \",K.rc(37,34,\"xlsx\"),\" \"),K.Lb(3),K.Qc(\" \",K.rc(40,36,\"csv\"),\" \"),K.Lb(3),K.Qc(\" \",K.rc(43,38,\"txt\"),\" \")}},directives:[oe.d,oe.c,kn,r.o,lr.a,de.n,de.q,ae.b,Ce.a,oe.a,le.d,ce.a,cr.a,Je.j,Hr,Ye.a,r.n,Je.g,Je.i,at.a,le.a,le.b,se.a,ue.b,oe.e,fe.c,fe.g,ge.a,de.f,me.m,Je.c,Je.e,Je.b,Je.d,Ye.b,Je.a,r.m,xe.a,Je.f,Je.h],pipes:[r.w,W.a,r.f,r.e],styles:[\".headers-align[_ngcontent-%COMP%]   .mat-expansion-panel-header-description[_ngcontent-%COMP%], .headers-align[_ngcontent-%COMP%]   .mat-expansion-panel-header-title[_ngcontent-%COMP%]{flex-basis:0}.headers-align[_ngcontent-%COMP%]   .mat-expansion-panel-header-description[_ngcontent-%COMP%]{justify-content:space-between;align-items:center}.headers-align[_ngcontent-%COMP%]   .mat-form-field[_ngcontent-%COMP%] + .mat-form-field[_ngcontent-%COMP%]{margin-left:8px}mat-select[_ngcontent-%COMP%]{font-size:18px;padding-top:10px}.chart[_ngcontent-%COMP%]{height:540px}td.mat-cell[_ngcontent-%COMP%], th.mat-header-cell[_ngcontent-%COMP%]{text-align:center!important}th.mat-header-cell[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{justify-content:center!important}th[_ngcontent-%COMP%]{max-width:600px!important}.mat-sort-header-container[_ngcontent-%COMP%]{justify-content:center!important}.mw-150[_ngcontent-%COMP%]{min-width:150px}\"],changeDetection:0}),Object(s.b)([Object(o.e)(ne.a.theme)],e.prototype,\"theme$\",void 0),Object(s.b)([Object(o.e)(q.jobs)],e.prototype,\"jobs$\",void 0),Object(s.b)([Object(o.e)(q.jobsGraphData)],e.prototype,\"jobsGraphData$\",void 0),Object(s.b)([Object(o.e)(q.jobsOptimizationGraphData)],e.prototype,\"jobsOptimizationGraphData$\",void 0),Object(s.b)([Object(o.e)(q.refreshInterval)],e.prototype,\"refreshInterval$\",void 0),Object(s.b)([Object(o.e)(q.refreshingInterval)],e.prototype,\"refreshingInterval$\",void 0),Object(s.b)([Object(o.e)(q.jobMultipleResulsLabels)],e.prototype,\"jobMultipleResulsLabels$\",void 0),Object(s.b)([Object(o.e)(q.jobMultipleResulsSelectedLabel)],e.prototype,\"jobMultipleResulsSelectedLabel$\",void 0),e})();function si(e,t){if(1&e&&(K.dc(0,\"mat-option\",22),K.Oc(1),K.cc()),2&e){const e=t.$implicit;K.vc(\"value\",e),K.Lb(1),K.Qc(\" \",e.label,\" \")}}function oi(e,t){if(1&e){const e=K.ec();K.dc(0,\"mat-form-field\",19),K.dc(1,\"mat-label\"),K.Oc(2,\"Select axes\"),K.cc(),K.dc(3,\"mat-select\",20),K.lc(\"selectionChange\",(function(t){return K.Ec(e),K.pc().selectHyperparams(t)}))(\"ngModelChange\",(function(t){return K.Ec(e),K.pc().selected=t})),K.Mc(4,si,2,2,\"mat-option\",21),K.cc(),K.cc()}if(2&e){const e=K.pc();K.Lb(3),K.vc(\"ngModel\",e.selected),K.Lb(1),K.vc(\"ngForOf\",e.hyperParamTraces)}}function ai(e,t){if(1&e){const e=K.ec();K.dc(0,\"div\",23),K.dc(1,\"button\",24),K.lc(\"click\",(function(){return K.Ec(e),K.pc().downloadGraph()})),K.Oc(2),K.qc(3,\"uppercase\"),K.cc(),K.dc(4,\"button\",25),K.dc(5,\"mat-icon\",26),K.Oc(6,\"help_outline\"),K.cc(),K.Oc(7),K.qc(8,\"uppercase\"),K.cc(),K.cc()}if(2&e){K.pc();const e=K.Bc(10);K.Lb(2),K.Qc(\" \",K.rc(3,3,\"Download graph png\"),\" \"),K.Lb(2),K.vc(\"matMenuTriggerFor\",e),K.Lb(3),K.Qc(\" \",K.rc(8,5,\"interaction guide\"),\" \")}}function ci(e,t){if(1&e&&K.Yb(0,\"plotly-plot\",27),2&e){const e=K.pc();K.vc(\"data\",e.graph.data)(\"layout\",e.graph.layout)(\"config\",e.graph.config)}}function li(e,t){if(1&e&&(K.dc(0,\"h2\"),K.Oc(1),K.cc()),2&e){const e=K.pc();K.Lb(1),K.Qc(\" \",null==e.selectedExperiment||null==e.selectedExperiment.experiment?null:e.selectedExperiment.experiment.experimentName,\" does not contain any results\\n\")}}let hi=(()=>{class e{constructor(e,t,n,r,i){this.store=e,this.route=t,this.cdRef=n,this.plotlyService=r,this.router=i,this.initialAllowedParams=3,this.graph={data:[],layout:{height:540,title:\"Hyperparameter Interaction Graph\",showlegend:!0},config:{responsive:!0,displayModeBar:!1,scrollZoom:!0}},this.width=window.innerWidth,this.height=window.innerHeight,this.showInteractionGuide=!1}ngOnInit(){var e,t;this.subscriptions=new a.a,this.subscriptions.add(null===(t=null===(e=this.route)||void 0===e?void 0:e.parent)||void 0===t?void 0:t.params.subscribe(e=>{this.experimentId=e.id,this.experimentId&&(this.store.dispatch(new g(this.experimentId)),this.store.dispatch(new b(this.experimentId)))})),this.subscriptions.add(this.selectedExperiment$.subscribe(e=>{e&&(this.selectedExperiment=e,this.cdRef.markForCheck())})),this.subscriptions.add(this.sidenavOpen$.subscribe(e=>{null!=e&&this.theme&&(window.dispatchEvent(new Event(\"resize\")),this.cdRef.detectChanges(),this.cdRef.markForCheck())})),this.subscriptions.add(this.parallelCoordinatesTrace$.subscribe(e=>{if(e){const t=new G.a;this.hyperParamTraces=e.dimensions.slice(),this.hyperParamTraces.map(e=>{e.label=t.transform(e.label,[30,\"...\"])}),this.initialTraces=[],this.selected=[];const n=this.hyperParamTraces.findIndex(e=>\"score\"===e.label.toLowerCase());if(-1!==n){this.initialTraces.push(this.hyperParamTraces[n]),this.hyperParamTraces.splice(n,1);for(let e=0;e<this.initialAllowedParams;e++)this.hyperParamTraces[e]&&this.selected.push(this.hyperParamTraces[e])}const r={line:e.line,type:e.type,dimensions:[...this.selected,...this.initialTraces]};this.graph.data=[r],this.cdRef.markForCheck()}else this.hyperParamTraces=[],this.initialTraces=[],this.selected=[],this.graph.data=[],this.cdRef.markForCheck()})),this.subscriptions.add(this.theme$.subscribe(e=>{e&&(this.theme=e,this.graph.layout=\"dark\"===e.name?this.changeDarkModeChart():this.changeLightModeChart(),this.cdRef.markForCheck())}))}ngOnDestroy(){this.subscriptions.unsubscribe()}downloadGraph(){const e=this.plotlyService.getInstanceByDivId(\"hig\");this.plotlyService.getPlotly().downloadImage(e,{format:\"png\",width:\"1000\",height:\"450\",filename:\"hig\"})}selectHyperparams(e){e&&(this.selected=e.value,this.graph.data[0].dimensions=[...this.selected,...this.initialTraces],this.cdRef.markForCheck())}cleanData(){this.graph.data=[],this.initialTraces=[],this.hyperParamTraces=[],this.cdRef.markForCheck()}toggleExperiment(e){return Object(s.a)(this,void 0,void 0,(function*(){e&&(this.experimentId=e,this.cleanData(),this.store.dispatch(new g(this.experimentId)),this.store.dispatch(new b(this.experimentId)),yield this.router.navigate([`experiment/${e}/hig`]))}))}changeLightModeChart(){return{height:540,title:\"Hyperparameter Interaction Graph\",showlegend:!0,hovermode:\"closest\"}}changeDarkModeChart(){return{hovermode:\"closest\",plot_bgcolor:\"#424242\",paper_bgcolor:\"#424242\",height:540,title:{text:\"Hyperparameter Interaction Graph\",font:{color:\"#ffffff\"}},showlegend:!0}}}return e.\\u0275fac=function(t){return new(t||e)(K.Xb(o.i),K.Xb(i.a),K.Xb(K.j),K.Xb(cr.c),K.Xb(i.g))},e.\\u0275cmp=K.Rb({type:e,selectors:[[\"app-pcg\"]],decls:23,vars:5,consts:[[1,\"mat-headline\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"space-between center\",1,\"mt-5\"],[\"fxFlex.gt-md\",\"50\",\"fxFlex\",\"100\",1,\"mr-3\",3,\"experimentId\",\"toggleExperiment\"],[\"appearance\",\"outline\",\"class\",\"w-full\",4,\"ngIf\"],[\"class\",\"w-full mb-4 mr-3\",\"fxLayoutAlign\",\"space-between center\",4,\"ngIf\"],[1,\"w-full\"],[\"class\",\"w-full chart\",\"id\",\"hig\",\"divId\",\"hig\",3,\"data\",\"layout\",\"config\",4,\"ngIf\"],[4,\"ngIf\"],[\"xPosition\",\"before\"],[\"helpMenu\",\"matMenu\"],[1,\"help-menu\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"end center\",1,\"w-full\"],[\"mat-icon-button\",\"\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"space-between center\",\"fxLayoutGap\",\"30px\",1,\"help-content\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"start center\",\"fxLayoutGap\",\"30px\",1,\"p-5\"],[\"fxLayout\",\"column\",1,\"w-full\"],[\"fxFlex\",\"100\",\"fxLayout\",\"row\",\"fxLayoutAlign\",\"start center\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"center center\",\"fxLayoutGap\",\"30px\"],[\"src\",\"assets/images/js_parcoords_ex1.gif\"],[\"appearance\",\"outline\",1,\"w-full\"],[\"multiple\",\"\",3,\"ngModel\",\"selectionChange\",\"ngModelChange\"],[3,\"value\",4,\"ngFor\",\"ngForOf\"],[3,\"value\"],[\"fxLayoutAlign\",\"space-between center\",1,\"w-full\",\"mb-4\",\"mr-3\"],[\"matTooltip\",\"Current view will be downloaded\",\"mat-raised-button\",\"\",3,\"click\"],[\"fxFlexAlign\",\"end\",\"mat-raised-button\",\"\",3,\"matMenuTriggerFor\"],[1,\"mr-3\"],[\"id\",\"hig\",\"divId\",\"hig\",1,\"w-full\",\"chart\",3,\"data\",\"layout\",\"config\"]],template:function(e,t){1&e&&(K.dc(0,\"h1\",0),K.Oc(1,\" The Hyperparameter Interaction Graph (HIG) helps you understand the interplay between different hyperparameters\\n\"),K.cc(),K.dc(2,\"div\",1),K.dc(3,\"app-experiment-dropdown\",2),K.lc(\"toggleExperiment\",(function(e){return t.toggleExperiment(e)})),K.cc(),K.Mc(4,oi,5,2,\"mat-form-field\",3),K.cc(),K.Mc(5,ai,9,7,\"div\",4),K.dc(6,\"div\",5),K.Mc(7,ci,1,3,\"plotly-plot\",6),K.cc(),K.Mc(8,li,2,1,\"h2\",7),K.dc(9,\"mat-menu\",8,9),K.dc(11,\"mat-toolbar\",10),K.dc(12,\"div\",11),K.dc(13,\"button\",12),K.dc(14,\"mat-icon\"),K.Oc(15,\"close\"),K.cc(),K.cc(),K.cc(),K.cc(),K.dc(16,\"mat-drawer-container\",13),K.dc(17,\"div\",14),K.dc(18,\"div\",15),K.dc(19,\"p\",16),K.Oc(20,\" Hyperparameter Interaction Graph is richly interactive by default. Drag the lines along the axes to filter regions and drag the axis names across the plot to rearrange variables. Double click on the selected axis to go back to default view. \"),K.cc(),K.dc(21,\"div\",17),K.Yb(22,\"img\",18),K.cc(),K.cc(),K.cc(),K.cc(),K.cc()),2&e&&(K.Lb(3),K.vc(\"experimentId\",t.experimentId),K.Lb(1),K.vc(\"ngIf\",t.hyperParamTraces&&t.hyperParamTraces.length>0&&null!==t.hyperParamTraces),K.Lb(1),K.vc(\"ngIf\",null==t.hyperParamTraces?null:t.hyperParamTraces.length),K.Lb(2),K.vc(\"ngIf\",null==t.hyperParamTraces?null:t.hyperParamTraces.length),K.Lb(1),K.vc(\"ngIf\",!(null!=t.hyperParamTraces&&t.hyperParamTraces.length)&&t.selectedExperiment))},directives:[oe.d,oe.c,kn,oe.b,r.o,le.a,se.a,ae.b,ce.a,ue.b,oe.e,fe.c,fe.g,ge.a,de.n,de.q,r.n,me.m,Ce.a,oe.a,le.d,cr.a],pipes:[r.w],styles:[\".headers-align[_ngcontent-%COMP%]   .mat-expansion-panel-header-description[_ngcontent-%COMP%], .headers-align[_ngcontent-%COMP%]   .mat-expansion-panel-header-title[_ngcontent-%COMP%]{flex-basis:0}.headers-align[_ngcontent-%COMP%]   .mat-expansion-panel-header-description[_ngcontent-%COMP%]{justify-content:space-between;align-items:center}.headers-align[_ngcontent-%COMP%]   .mat-form-field[_ngcontent-%COMP%] + .mat-form-field[_ngcontent-%COMP%]{margin-left:8px}mat-select[_ngcontent-%COMP%]{font-size:18px!important;padding-top:10px!important}.chart[_ngcontent-%COMP%]{height:540px}\"],changeDetection:0}),Object(s.b)([Object(o.e)(ne.a.theme)],e.prototype,\"theme$\",void 0),Object(s.b)([Object(o.e)(q.metricsVsHparams)],e.prototype,\"metricsVsHparams$\",void 0),Object(s.b)([Object(o.e)(q.selectedExperiment)],e.prototype,\"selectedExperiment$\",void 0),Object(s.b)([Object(o.e)(q.parallelCoordinatesTrace)],e.prototype,\"parallelCoordinatesTrace$\",void 0),Object(s.b)([Object(o.e)(q.sidenavOpen)],e.prototype,\"sidenavOpen$\",void 0),e})();function di(e,t){if(1&e&&(K.dc(0,\"mat-option\",27),K.Oc(1),K.cc()),2&e){const e=t.$implicit;K.vc(\"value\",e),K.Lb(1),K.Qc(\" \",e.experimentName||e.scriptName,\" \")}}function ui(e,t){if(1&e){const e=K.ec();K.dc(0,\"mat-form-field\",25),K.dc(1,\"mat-label\"),K.Oc(2,\" Select Experiments \"),K.cc(),K.dc(3,\"mat-select\",26),K.lc(\"ngModelChange\",(function(t){return K.Ec(e),K.pc(2).selectedExperiments=t}))(\"selectionChange\",(function(t){return K.Ec(e),K.pc(2).selectExperiment(t)})),K.Mc(4,di,2,2,\"mat-option\",8),K.cc(),K.cc()}if(2&e){const e=K.pc(2);K.Lb(3),K.vc(\"ngModel\",e.selectedExperiments),K.Lb(1),K.vc(\"ngForOf\",e.experiments)}}function fi(e,t){if(1&e&&(K.dc(0,\"div\",5),K.Mc(1,ui,5,2,\"mat-form-field\",24),K.cc()),2&e){const e=K.pc();K.Lb(1),K.vc(\"ngIf\",e.experiments&&e.experiments.length>0)}}function gi(e,t){if(1&e&&(K.dc(0,\"mat-option\",27),K.Oc(1),K.cc()),2&e){const e=t.$implicit;K.vc(\"value\",e),K.Lb(1),K.Qc(\" \",e,\" \")}}function pi(e,t){if(1&e){const e=K.ec();K.dc(0,\"mat-form-field\",6),K.dc(1,\"mat-label\"),K.Oc(2,\" Y-axis \"),K.cc(),K.dc(3,\"mat-select\",28),K.lc(\"selectionChange\",(function(t){return K.Ec(e),K.pc().selectLabel(t.value)})),K.Mc(4,gi,2,2,\"mat-option\",8),K.cc(),K.cc()}if(2&e){const e=K.pc();K.Lb(3),K.vc(\"formControl\",e.selectedLabel),K.Lb(1),K.vc(\"ngForOf\",e.commonLabels)}}function mi(e,t){if(1&e&&(K.dc(0,\"mat-option\",27),K.Oc(1),K.cc()),2&e){const e=t.$implicit;K.vc(\"value\",e),K.Lb(1),K.Qc(\" \",e,\" \")}}var Ci=function(e){return e.JOBS=\"jobs\",e.SCORE=\"score\",e.TIME=\"time (seconds)\",e}({}),bi=function(e){return e.JID=\"jid\",e.END_TIME=\"end_time\",e}({});let vi=(()=>{class e{constructor(e,t,n,r,i,s){this.store=e,this.router=t,this.route=n,this.cdRef=r,this.experimentService=i,this.plotlyService=s,this.experimentMultiplier=1,this.axisValues=[Ci.JOBS,Ci.TIME],this.yAxisValue=Ci.SCORE,this.selectedExperiments=[],this.checkedExperiments=[],this.SORT_BY=bi,this.selectedSortBy=bi.JID,this.stepSizes=[1,2],this.commonLabels=[],this.selectedLabel=new de.e,this.yAxisLabel=\"score\",this.graph={data:[],layout:{height:540,xaxis:{title:{text:\"\"}},yaxis:{title:{text:\"\"}}},config:{responsive:!0,displayModeBar:!1,scrollZoom:!0}},this.showInteractionGuide=!1}ngOnInit(){var e,t;this.subscriptions=new a.a,this.xAxisType=new de.e(this.axisValues[0]),this.yAxisType=new de.e(this.yAxisValue),this.subscriptions.add(null===(t=null===(e=this.route)||void 0===e?void 0:e.parent)||void 0===t?void 0:t.params.subscribe(e=>{this.experimentId=e.id})),this.subscriptions.add(this.experiments$.subscribe(e=>{e&&e.length>0&&(this.getExperimentsBestHistory(),this.selectedExperiments.length||(this.experiments=e.slice()),this.computePlots(),this.cdRef.markForCheck())})),this.subscriptions.add(this.theme$.subscribe(e=>{e&&(this.theme=e,this.provideLayoutBasedOnTheme())})),this.subscriptions.add(this.experimentsMultiplier$.subscribe(e=>{}))}provideLayoutBasedOnTheme(){this.graph.layout=this.changeLightModeChart(),this.theme&&(this.graph.layout=\"dark\"===this.theme.name?this.changeDarkModeChart():this.changeLightModeChart(),this.cdRef.markForCheck())}downloadGraph(){const e=this.plotlyService.getInstanceByDivId(\"multiExperiment\");this.plotlyService.getPlotly().downloadImage(e,{format:\"png\",width:\"1000\",height:\"450\",filename:\"multiExperiment\"})}getExperimentsBestHistory(){this.experimentMultiplier&&this.experimentService.getAllExperimentHistoryBest(this.experimentMultiplier,this.selectedSortBy,this.selectedLabel.value).subscribe(e=>{if(e&&e.experiment_history_best){const t=e.experiment_history_best;this.experiments.map(e=>{e.history=[],t[e.eid]&&t[e.eid].map(t=>{const n={jid:t.jid,jobConfig:JSON.parse(t.job_config),score:t.score};e.history.push(n)})}),this.selectedExperiments.map(e=>{e.history=[],t[e.eid].map(t=>{const n={jid:t.jid,jobConfig:JSON.parse(t.job_config),score:t.score};e.history.push(n)})}),this.computePlots(),this.cdRef.markForCheck()}})}get xAxisValue(){return this.xAxisType.value}changeLightModeChart(){const e=new W.a;return{colorway:ar,hovermode:\"closest\",height:450,showlegend:!0,xaxis:{zeroline:!1,title:{text:e.transform(this.xAxisValue),font:{size:18,color:\"#7f7f7f\"}}},yaxis:{zeroline:!1,title:{text:e.transform(this.yAxisValue),font:{size:18,color:\"#7f7f7f\"}}}}}changeDarkModeChart(){const e=new W.a;return{colorway:ar,hovermode:\"closest\",plot_bgcolor:\"#424242\",paper_bgcolor:\"#424242\",height:450,showlegend:!0,legend:{font:{color:\"#ffffff\"}},xaxis:{title:{text:e.transform(this.xAxisValue),font:{size:18,color:\"#ffffff\"}},gridcolor:\"#c0c0c0\",tickfont:{color:\"#ffffff\"},showline:!0,showgrid:!0,zeroline:!1,showticklabels:!0},yaxis:{title:{text:e.transform(this.yAxisValue),font:{size:18,color:\"#ffffff\"}},gridcolor:\"#c0c0c0\",tickfont:{color:\"#ffffff\"},showline:!0,showgrid:!0,zeroline:!1,showticklabels:!0},line:{color:\"#ffffff\"}}}selectExperiment(e){const t=\"score\";if(!e.value)return;this.selectedExperiments=e.value;let n=[];this.commonLabels=[];for(let r=0;r<this.selectedExperiments.length;r++){if(!this.selectedExperiments[r].labels||!this.selectedExperiments[r].labels.length){n=[],this.commonLabels=[];break}n.push(this.selectedExperiments[r].labels)}n.length?(this.commonLabels=n.length>1?n.shift().filter((function(e){return n.every((function(t){return-1!==t.indexOf(e)}))})):n[0].slice(),this.commonLabels.length>0&&this.commonLabels.unshift(t)):this.commonLabels=[],this.selectedLabel.patchValue(t),this.selectLabel(t),this.computePlots()}selectLabel(e){e&&(this.yAxisValue=e,this.cdRef.markForCheck(),this.getExperimentsBestHistory(),this.computePlots())}changeXAxisValue(){switch(this.xAxisType.value){case Ci.JOBS:this.selectedSortBy=bi.JID;break;case Ci.TIME:this.selectedSortBy=bi.END_TIME;break;default:this.selectedSortBy=null}this.getExperimentsBestHistory(),this.computePlots()}computePlots(){if(this.provideLayoutBasedOnTheme(),this.selectedExperiments.length){const e=this.selectedExperiments.map(e=>({x:[...this.computeXAxis(e)],y:[...this.computeYAxis(e)],mode:\"lines+markers\",type:\"scatter\",name:e.experimentName?e.experimentName:e.scriptName}));this.graph.data=e,this.cdRef.markForCheck()}else this.graph.data=[]}computeXAxis(e){if(this.xAxisType.value&&e){switch(this.xAxisType.value){case Ci.JOBS:return e.history.map((t,n)=>{const r=this.experimentMultiplier*(n+1);return r-Math.floor(r/e.jobs.length)*(r%e.jobs.length)});case Ci.TIME:return e.jobs.map(t=>t.end_time?t.end_time-e.startTime:null)}this.cdRef.markForCheck()}}computeYAxis(e){if(this.yAxisType.value&&e)return e.history.map(e=>e.score);this.cdRef.markForCheck()}}return e.\\u0275fac=function(t){return new(t||e)(K.Xb(o.i),K.Xb(i.g),K.Xb(i.a),K.Xb(K.j),K.Xb(Y),K.Xb(cr.c))},e.\\u0275cmp=K.Rb({type:e,selectors:[[\"app-multi-exp-comp\"]],decls:48,vars:14,consts:[[\"fxLayout\",\"column\"],[1,\"mat-headline\"],[\"fxLayout\",\"row\",\"fxLayout.lt-md\",\"column\",\"fxLayoutAlign\",\"space-between center\",\"fxLayoutGap\",\"20px\"],[\"class\",\"w-full\",4,\"ngIf\"],[\"appearance\",\"outline\",\"class\",\"w-full mr-3\",4,\"ngIf\"],[1,\"w-full\"],[\"appearance\",\"outline\",1,\"w-full\",\"mr-3\"],[3,\"formControl\",\"selectionChange\"],[3,\"value\",4,\"ngFor\",\"ngForOf\"],[\"fxLayoutAlign\",\"space-between center\",1,\"w-full\",\"mb-4\",\"mr-3\"],[\"matTooltip\",\"Current view will be downloaded\",\"mat-raised-button\",\"\",3,\"click\"],[\"fxFlexAlign\",\"end\",\"mat-raised-button\",\"\",3,\"matMenuTriggerFor\"],[1,\"mr-3\"],[\"divId\",\"multiExperiment\",1,\"w-full\",\"chart\",3,\"data\",\"layout\",\"config\"],[\"xPosition\",\"before\"],[\"helpMenu\",\"matMenu\"],[1,\"help-menu\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"end center\",1,\"w-full\"],[\"mat-icon-button\",\"\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"space-between center\",\"fxLayoutGap\",\"30px\",1,\"help-content\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"start\",\"fxLayoutGap\",\"30px\",1,\"p-5\",\"w-full\"],[\"fxFlex\",\"100\",\"fxLayout\",\"row\",\"fxLayoutAlign\",\"start\",1,\"my-0\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"space-between center\",\"fxLayoutGap\",\"30px\"],[1,\"mt-3\",\"ml-5\",\"help-list\"],[\"appearance\",\"outline\",\"class\",\"w-full\",4,\"ngIf\"],[\"appearance\",\"outline\",1,\"w-full\"],[\"multiple\",\"\",3,\"ngModel\",\"ngModelChange\",\"selectionChange\"],[3,\"value\"],[1,\"w-full\",3,\"formControl\",\"selectionChange\"]],template:function(e,t){if(1&e&&(K.dc(0,\"div\",0),K.dc(1,\"h1\",1),K.Oc(2,\"Compare the best scores of multiple experiments against each other\"),K.cc(),K.dc(3,\"div\",2),K.Mc(4,fi,2,1,\"div\",3),K.Mc(5,pi,5,2,\"mat-form-field\",4),K.dc(6,\"div\",5),K.dc(7,\"mat-form-field\",6),K.dc(8,\"mat-label\"),K.Oc(9,\" X-axis \"),K.cc(),K.dc(10,\"mat-select\",7),K.lc(\"selectionChange\",(function(){return t.changeXAxisValue()})),K.Mc(11,mi,2,2,\"mat-option\",8),K.cc(),K.cc(),K.cc(),K.cc(),K.dc(12,\"div\",9),K.dc(13,\"button\",10),K.lc(\"click\",(function(){return t.downloadGraph()})),K.Oc(14),K.qc(15,\"uppercase\"),K.cc(),K.dc(16,\"button\",11),K.dc(17,\"mat-icon\",12),K.Oc(18,\"help_outline\"),K.cc(),K.Oc(19),K.qc(20,\"uppercase\"),K.cc(),K.cc(),K.dc(21,\"div\",5),K.Yb(22,\"plotly-plot\",13),K.cc(),K.cc(),K.dc(23,\"mat-menu\",14,15),K.dc(25,\"mat-toolbar\",16),K.dc(26,\"div\",17),K.dc(27,\"button\",18),K.dc(28,\"mat-icon\"),K.Oc(29,\"close\"),K.cc(),K.cc(),K.cc(),K.cc(),K.dc(30,\"mat-drawer-container\",19),K.dc(31,\"div\",20),K.dc(32,\"p\",21),K.Oc(33,\" On the graph: \"),K.cc(),K.dc(34,\"div\",22),K.dc(35,\"ul\",23),K.dc(36,\"li\"),K.Oc(37,\"zoom out/in: place mouse on the graph and scroll up/down\"),K.cc(),K.dc(38,\"li\"),K.Oc(39,\"zoom in a specific area: click mouse anywhere on the graph and drag it to draw a square\"),K.cc(),K.dc(40,\"li\"),K.Oc(41,\"change the axis range: drag the label on x-axis or y-axis\"),K.cc(),K.dc(42,\"li\"),K.Oc(43,\"show/hide data: click on the corresponding legend\"),K.cc(),K.dc(44,\"li\"),K.Oc(45,\"show detailed value: hover over the data point\"),K.cc(),K.dc(46,\"li\"),K.Oc(47,\"go back to default view: double-click on anywhere on the plot\"),K.cc(),K.cc(),K.cc(),K.cc(),K.cc(),K.cc()),2&e){const e=K.Bc(24);K.Lb(4),K.vc(\"ngIf\",t.experiments&&t.experiments.length),K.Lb(1),K.vc(\"ngIf\",t.commonLabels&&t.commonLabels.length>0),K.Lb(5),K.vc(\"formControl\",t.xAxisType),K.Lb(1),K.vc(\"ngForOf\",t.axisValues),K.Lb(3),K.Qc(\" \",K.rc(15,10,\"Download graph png\"),\" \"),K.Lb(2),K.vc(\"matMenuTriggerFor\",e),K.Lb(3),K.Qc(\" \",K.rc(20,12,\"interaction guide\"),\" \"),K.Lb(3),K.vc(\"data\",t.graph.data)(\"layout\",t.graph.layout)(\"config\",t.graph.config)}},directives:[oe.d,oe.c,oe.e,r.o,fe.c,fe.g,ge.a,de.n,de.f,r.n,ae.b,Ce.a,oe.a,le.d,ce.a,cr.a,le.a,se.a,ue.b,oe.b,de.q,me.m],pipes:[r.w],styles:[\".multiplier[_ngcontent-%COMP%]{width:110px;margin-top:1px}.multiplier[_ngcontent-%COMP%] > mat-form-field[_ngcontent-%COMP%]{text-align:center}.headers-align[_ngcontent-%COMP%]   .mat-expansion-panel-header-description[_ngcontent-%COMP%], .headers-align[_ngcontent-%COMP%]   .mat-expansion-panel-header-title[_ngcontent-%COMP%]{flex-basis:0}.headers-align[_ngcontent-%COMP%]   .mat-expansion-panel-header-description[_ngcontent-%COMP%]{justify-content:space-between;align-items:center}.headers-align[_ngcontent-%COMP%]   .mat-form-field[_ngcontent-%COMP%] + .mat-form-field[_ngcontent-%COMP%]{margin-left:8px}input[_ngcontent-%COMP%], mat-select[_ngcontent-%COMP%]{font-size:18px;padding-top:10px}.chart[_ngcontent-%COMP%]{height:540px}\"],changeDetection:0}),Object(s.b)([Object(o.e)(q.experiments)],e.prototype,\"experiments$\",void 0),Object(s.b)([Object(o.e)(q.experimentsMultiplier)],e.prototype,\"experimentsMultiplier$\",void 0),Object(s.b)([Object(o.e)(ne.a.theme)],e.prototype,\"theme$\",void 0),e})();var Ii=n(\"2Vo4\"),Ai=n(\"B/XX\"),yi=n(\"xHqg\"),wi=n(\"bSwM\");function Si(e,t){1&e&&(K.dc(0,\"a\",32),K.Yb(1,\"img\",33),K.cc()),2&e&&(K.Lb(1),K.vc(\"src\",\"assets/images/Auptimizer-dark.png\",K.Fc))}function xi(e,t){if(1&e){const e=K.ec();K.dc(0,\"button\",34),K.lc(\"click\",(function(){return K.Ec(e),K.pc().setTheme()})),K.dc(1,\"mat-icon\",14),K.Oc(2),K.cc(),K.Oc(3),K.qc(4,\"flu\"),K.cc()}if(2&e){const e=K.pc();K.Lb(2),K.Pc(e.currentTheme.icon),K.Lb(1),K.Qc(\"\",K.rc(4,2,e.currentTheme.name),\" mode \")}}function Ei(e,t){if(1&e&&(K.dc(0,\"span\"),K.Oc(1),K.cc()),2&e){const e=K.pc();K.Lb(1),K.Qc(\"v\",e.version,\"\")}}const ki=function(){return[\"/\"]};function _i(e,t){if(1&e){const e=K.ec();K.dc(0,\"div\",11),K.dc(1,\"h1\",39),K.Oc(2,\"Auptimizer environment is already set up\"),K.cc(),K.dc(3,\"div\",40),K.dc(4,\"a\",41),K.Oc(5,\"BACK\"),K.cc(),K.dc(6,\"button\",42),K.lc(\"click\",(function(){return K.Ec(e),K.pc(2).createDatabaseStep()})),K.Oc(7,\"RECREATE\"),K.cc(),K.cc(),K.cc()}2&e&&(K.Lb(4),K.vc(\"routerLink\",K.xc(1,ki)))}function Ti(e,t){if(1&e){const e=K.ec();K.dc(0,\"div\",43),K.dc(1,\"h1\",44),K.Oc(2,\"There is no environment created\"),K.cc(),K.dc(3,\"p\",45),K.Oc(4,\"Let's set up an Auptimizer environment to run new experiments!\"),K.cc(),K.dc(5,\"div\",46),K.dc(6,\"button\",47),K.lc(\"click\",(function(){return K.Ec(e),K.pc(2).createDatabaseStep()})),K.Oc(7,\"CREATE\"),K.cc(),K.cc(),K.cc()}}function Ri(e,t){if(1&e&&(K.dc(0,\"mat-card\",35),K.Yb(1,\"img\",36),K.Mc(2,_i,8,2,\"div\",37),K.qc(3,\"async\"),K.Mc(4,Ti,8,0,\"div\",38),K.qc(5,\"async\"),K.cc()),2&e){const e=K.pc();K.Lb(1),K.vc(\"src\",\"assets/images/Auptimizer-\"+(null==e.currentTheme?null:e.currentTheme.name)+\".png\",K.Fc),K.Lb(1),K.vc(\"ngIf\",K.rc(3,3,e.dbUrl$)),K.Lb(2),K.vc(\"ngIf\",null===K.rc(5,5,e.dbUrl$))}}function Bi(e,t){1&e&&K.Oc(0,\"Work dir\")}function Oi(e,t){1&e&&K.Oc(0,\"Ini path\")}function Li(e,t){1&e&&K.Oc(0,\"Resource\")}function Pi(e,t){if(1&e){const e=K.ec();K.dc(0,\"button\",73),K.lc(\"click\",(function(){K.Ec(e);const n=t.$implicit;return K.pc(2).setType(n)})),K.Oc(1),K.cc()}if(2&e){const e=t.$implicit,n=K.pc(2);K.vc(\"ngClass\",e===n.type?\"btn-primary\":\"\"),K.Lb(1),K.Qc(\" \",e,\" \")}}function Fi(e,t){1&e&&(K.dc(0,\"mat-form-field\",74),K.dc(1,\"mat-label\"),K.Oc(2,\"CPU\"),K.cc(),K.Yb(3,\"input\",75),K.dc(4,\"mat-hint\"),K.Oc(5,\"Number of CPUs\"),K.cc(),K.dc(6,\"mat-error\"),K.Oc(7,\"CPU must be a number\"),K.cc(),K.cc())}function Ni(e,t){1&e&&(K.dc(0,\"mat-form-field\",74),K.dc(1,\"mat-label\"),K.Oc(2,\"AWS File\"),K.cc(),K.Yb(3,\"input\",76),K.cc())}function Mi(e,t){1&e&&(K.dc(0,\"mat-form-field\",74),K.dc(1,\"mat-label\"),K.Oc(2,\"GPU File\"),K.cc(),K.Yb(3,\"input\",77),K.cc())}function Di(e,t){1&e&&(K.dc(0,\"mat-form-field\",74),K.dc(1,\"mat-label\"),K.Oc(2,\"Node File\"),K.cc(),K.Yb(3,\"input\",78),K.cc())}function $i(e,t){if(1&e){const e=K.ec();K.dc(0,\"mat-card\",35),K.dc(1,\"div\",48),K.dc(2,\"h1\",49),K.Oc(3,\"Set up an Auptimizer environment\"),K.cc(),K.dc(4,\"mat-horizontal-stepper\",50,51),K.dc(6,\"mat-step\",52),K.Mc(7,Bi,1,0,\"ng-template\",53),K.dc(8,\"form\",54),K.dc(9,\"p\",55),K.Oc(10,\" Working directory that contains your training script and saves the experiment results. \"),K.cc(),K.dc(11,\"mat-form-field\",56),K.dc(12,\"mat-label\"),K.Oc(13,\"Working directory\"),K.cc(),K.Yb(14,\"input\",57),K.dc(15,\"mat-error\"),K.Oc(16,\"Missing field\"),K.cc(),K.cc(),K.dc(17,\"div\",40),K.dc(18,\"button\",58),K.lc(\"click\",(function(){return K.Ec(e),K.pc().databaseInitStep()})),K.Oc(19,\"BACK\"),K.cc(),K.dc(20,\"button\",59),K.Oc(21,\"NEXT\"),K.cc(),K.cc(),K.cc(),K.cc(),K.dc(22,\"mat-step\",52),K.Mc(23,Oi,1,0,\"ng-template\",53),K.dc(24,\"form\",54),K.dc(25,\"p\",55),K.Oc(26,\"Path to the Auptimizer environment file.\"),K.cc(),K.dc(27,\"mat-form-field\",56),K.dc(28,\"mat-label\"),K.Oc(29,\"Ini path\"),K.cc(),K.Yb(30,\"input\",60),K.dc(31,\"mat-error\"),K.Oc(32,\"Missing field\"),K.cc(),K.cc(),K.dc(33,\"div\",40),K.dc(34,\"button\",61),K.Oc(35,\"BACK\"),K.cc(),K.dc(36,\"button\",59),K.Oc(37,\"NEXT\"),K.cc(),K.cc(),K.cc(),K.cc(),K.dc(38,\"mat-step\",52),K.Mc(39,Li,1,0,\"ng-template\",53),K.dc(40,\"div\",48),K.dc(41,\"p\",55),K.Oc(42,\"Select your target resource to run experiments.\"),K.cc(),K.cc(),K.dc(43,\"div\",62),K.Mc(44,Pi,2,2,\"button\",63),K.cc(),K.dc(45,\"form\",54),K.Mc(46,Fi,8,0,\"mat-form-field\",64),K.Mc(47,Ni,4,0,\"mat-form-field\",64),K.Mc(48,Mi,4,0,\"mat-form-field\",64),K.Mc(49,Di,4,0,\"mat-form-field\",64),K.cc(),K.dc(50,\"form\",65),K.dc(51,\"mat-checkbox\",66),K.Oc(52,\"Overwrite\"),K.cc(),K.cc(),K.dc(53,\"div\",67),K.dc(54,\"mat-icon\",68),K.Oc(55,\"info\"),K.cc(),K.dc(56,\"p\",69),K.Oc(57,\"Overwrite any existing Auptimizer environment set up in the same working directory\"),K.cc(),K.cc(),K.dc(58,\"div\",70),K.dc(59,\"button\",61),K.Oc(60,\"BACK\"),K.cc(),K.dc(61,\"div\",71),K.dc(62,\"button\",72),K.lc(\"click\",(function(){return K.Ec(e),K.pc().onSubmit()})),K.Oc(63,\"SET UP\"),K.cc(),K.cc(),K.cc(),K.cc(),K.cc(),K.cc(),K.cc()}if(2&e){const e=K.pc();K.Lb(6),K.vc(\"stepControl\",e.firstFormGroup),K.Lb(2),K.vc(\"formGroup\",e.firstFormGroup),K.Lb(14),K.vc(\"stepControl\",e.secondFormGroup),K.Lb(2),K.vc(\"formGroup\",e.secondFormGroup),K.Lb(14),K.vc(\"stepControl\",e.thirdFormGroup),K.Lb(6),K.vc(\"ngForOf\",e.types),K.Lb(1),K.vc(\"formGroup\",e.thirdFormGroup),K.Lb(1),K.vc(\"ngIf\",\"cpu\"===e.type),K.Lb(1),K.vc(\"ngIf\",\"aws\"===e.type),K.Lb(1),K.vc(\"ngIf\",\"gpu\"===e.type),K.Lb(1),K.vc(\"ngIf\",\"node\"===e.type),K.Lb(1),K.vc(\"formGroup\",e.overwriteFormGroup),K.Lb(11),K.vc(\"matTooltip\",e.overwriteFormGroup.valid?\"\":\"Please check `Overwrite`\"),K.Lb(1),K.vc(\"disabled\",!e.overwriteFormGroup.valid||!e.thirdFormGroup.valid)}}var Wi=function(e){return e[e.INIT=0]=\"INIT\",e[e.WIZARD=1]=\"WIZARD\",e}({});let Hi=(()=>{class e{constructor(e,t,n){this.helperService=e,this.store=t,this.cdRef=n,this.types=[\"cpu\",\"aws\",\"gpu\",\"node\"],this.type=\"cpu\",this.step=Wi,this.currentStep$=new Ii.a(Wi.INIT),this.currentTheme={name:null,icon:null},this.showInteractionGuide=!1}ngOnInit(){this.subscriptions=new a.a,this.firstFormGroup=new de.h({work_dir:new de.e(\"\",[de.t.required])}),this.secondFormGroup=new de.h({ini_path:new de.e(\"\",[de.t.required])}),this.thirdFormGroup=new de.h({cpu:new de.e(\"\",[de.t.pattern(/^[0-9]*$/)]),aws_file:new de.e(\"\"),gpu_file:new de.e(\"\"),node_file:new de.e(\"\")},(1,e=>{let t=0;return Object.keys(e.controls).forEach(n=>{e.controls[n].value&&t++}),t<1?{minimumValues:!0}:null})),this.overwriteFormGroup=new de.h({overwrite:new de.e(!1,[de.t.required])}),this.version=te.a.version,this.subscriptions.add(this.themes$.subscribe(e=>{this.themes=e,this.cdRef.markForCheck()})),this.subscriptions.add(this.theme$.subscribe(e=>{this.currentTheme=e,this.cdRef.markForCheck()})),this.subscriptions.add(this.dbUrl$.subscribe(e=>{e&&(this.overwriteFormGroup.controls.overwrite.setValidators(de.t.requiredTrue),this.cdRef.markForCheck())})),this.subscriptions.add(this.notifications$.subscribe(e=>{e&&(this.notifications=e,this.cdRef.markForCheck())}))}ngOnDestroy(){this.subscriptions.unsubscribe()}setTheme(){this.themes&&this.themes.length&&(this.currentTheme=this.currentTheme===this.themes[0]?this.themes[1]:this.themes[0],this.store.dispatch(new V.b(this.currentTheme)))}createDatabaseStep(){this.currentStep$.next(Wi.WIZARD)}databaseInitStep(){this.currentStep$.next(Wi.INIT)}setType(e){e&&(this.type=e,this.thirdFormGroup.reset(),this.cdRef.markForCheck())}onSubmit(){if(!(this.firstFormGroup.valid&&this.secondFormGroup.valid&&this.thirdFormGroup.valid&&this.overwriteFormGroup.valid))return;const e={work_dir:this.firstFormGroup.value.work_dir,ini_path:this.secondFormGroup.value.ini_path,overwrite:this.overwriteFormGroup.value.overwrite};switch(this.type){case\"cpu\":e.cpu=this.thirdFormGroup.value.cpu;break;case\"aws\":e.aws_file=this.thirdFormGroup.value.aws_file;break;case\"gpu\":e.gpu_file=this.thirdFormGroup.value.gpu_file;break;case\"node\":e.node_file=this.thirdFormGroup.value.node_file}this.store.dispatch(new E(e))}}return e.\\u0275fac=function(t){return new(t||e)(K.Xb(Q.a),K.Xb(o.i),K.Xb(K.j))},e.\\u0275cmp=K.Rb({type:e,selectors:[[\"app-initialize\"]],features:[K.Kb([{provide:Ai.h,useValue:{showError:!0}}])],decls:67,vars:17,consts:[[\"color\",\"primary\",\"fxLayout\",\"row\",\"fxLayoutAlign\",\"space-between center\",1,\"header-font\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"center center\"],[\"routerLink\",\"/\",\"class\",\"logo-container\",4,\"ngIf\"],[\"fxLayout\",\"row\",\"fxLayoutGap\",\"20px\",\"fxLayoutAlign\",\"center center\"],[\"mat-icon-button\",\"\",3,\"disabled\",\"matMenuTriggerFor\"],[\"matBadgeColor\",\"warn\",3,\"matBadgeHidden\",\"matBadge\"],[\"mat-button\",\"\",\"class\",\"header-font\",3,\"click\",4,\"ngIf\"],[\"fxLayoutAlign\",\"center center\"],[4,\"ngIf\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"center center\",1,\"initialize-container\",\"text-primary\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"center center\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"center center\",1,\"h-full\"],[\"fxLayoutAlign\",\"end\",1,\"w-full\",\"mb-4\"],[\"fxFlexAlign\",\"end\",\"mat-raised-button\",\"\",3,\"matMenuTriggerFor\"],[1,\"mr-3\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"center center\",\"class\",\"db-card\",4,\"ngIf\"],[\"xPosition\",\"before\"],[\"notificationMenu\",\"matMenu\"],[1,\"notification-menu\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"end center\",1,\"w-full\"],[\"mat-icon-button\",\"\"],[3,\"click\"],[\"helpMenu\",\"matMenu\"],[1,\"help-menu\"],[\"mat-icon-button\",\"\",\"aria-label\",\"Example icon-button with share icon\",1,\"example-icon\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"space-between center\",\"fxLayoutGap\",\"30px\",1,\"help-content\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"start center\",\"fxLayoutGap\",\"30px\",1,\"p-5\"],[1,\"w-full\"],[1,\"ml-5\",\"help-list\"],[1,\"font-medium\"],[\"href\",\"https://lge-arc-advancedai.github.io/auptimizer/environment.html#environment-template-file-ini\",\"target\",\"_blank\"],[\"href\",\"https://lge-arc-advancedai.github.io/auptimizer/environment.html#configuration-options\",\"target\",\"_blank\"],[\"routerLink\",\"/\",1,\"logo-container\"],[3,\"src\"],[\"mat-button\",\"\",1,\"header-font\",3,\"click\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"center center\",1,\"db-card\"],[1,\"db-logo\",3,\"src\"],[\"class\",\"h-full\",\"fxLayout\",\"column\",\"fxLayoutAlign\",\"center center\",4,\"ngIf\"],[\"fxLayout\",\"column\",4,\"ngIf\"],[1,\"db-title\",\"max-480\",\"pb-12\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"center start\",\"fxLayoutGap\",\"60px\",1,\"w-full\"],[\"mat-raised-button\",\"\",\"color\",\"primary\",1,\"db-btn\",3,\"routerLink\"],[\"mat-button\",\"\",1,\"db-btn\",3,\"click\"],[\"fxLayout\",\"column\"],[1,\"db-title\",\"max-480\"],[1,\"db-subtitle\"],[\"fxLayoutAlign\",\"center start\",1,\"w-full\"],[\"mat-raised-button\",\"\",\"color\",\"primary\",1,\"db-btn\",3,\"click\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"center center\",1,\"w-full\"],[1,\"db-title\",\"m-0\"],[\"linear\",\"\"],[\"stepper\",\"\"],[3,\"stepControl\"],[\"matStepLabel\",\"\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"center center\",3,\"formGroup\"],[1,\"db-text\"],[\"appearance\",\"outline\",1,\"w-full\",\"my-4\"],[\"type\",\"text\",\"matInput\",\"\",\"placeholder\",\"Work dir\",\"formControlName\",\"work_dir\",\"required\",\"\"],[\"mat-button\",\"\",3,\"click\"],[\"mat-raised-button\",\"\",\"color\",\"primary\",\"matStepperNext\",\"\",1,\"db-btn\"],[\"type\",\"text\",\"matInput\",\"\",\"placeholder\",\"Ini path\",\"formControlName\",\"ini_path\",\"required\",\"\"],[\"mat-button\",\"\",\"matStepperPrevious\",\"\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"center\",1,\"w-full\"],[\"class\",\"path-type-btn\",3,\"ngClass\",\"click\",4,\"ngFor\",\"ngForOf\"],[\"appearance\",\"outline\",\"class\",\"w-full mb-4\",4,\"ngIf\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"start\",3,\"formGroup\"],[\"formControlName\",\"overwrite\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"start center\",\"fxLayoutGap\",\"15px\",1,\"db-info\"],[\"color\",\"warn\"],[1,\"mb-0\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"center start\",\"fxLayoutGap\",\"60px\",1,\"w-full\",\"mt-5\"],[3,\"matTooltip\"],[\"mat-raised-button\",\"\",\"color\",\"primary\",1,\"db-btn\",3,\"disabled\",\"click\"],[1,\"path-type-btn\",3,\"ngClass\",\"click\"],[\"appearance\",\"outline\",1,\"w-full\",\"mb-4\"],[\"type\",\"text\",\"matInput\",\"\",\"placeholder\",\"CPU\",\"formControlName\",\"cpu\"],[\"type\",\"text\",\"matInput\",\"\",\"placeholder\",\"AWS File\",\"formControlName\",\"aws_file\"],[\"type\",\"text\",\"matInput\",\"\",\"placeholder\",\"GPU\",\"formControlName\",\"gpu_file\"],[\"type\",\"text\",\"matInput\",\"\",\"placeholder\",\"Node file\",\"formControlName\",\"node_file\"]],template:function(e,t){if(1&e&&(K.dc(0,\"mat-toolbar\",0),K.dc(1,\"div\",1),K.Mc(2,Si,2,1,\"a\",2),K.cc(),K.dc(3,\"div\",3),K.dc(4,\"button\",4),K.dc(5,\"mat-icon\",5),K.Oc(6,\" notifications\"),K.cc(),K.cc(),K.Mc(7,xi,5,4,\"button\",6),K.dc(8,\"div\",7),K.dc(9,\"span\"),K.Oc(10,\"Version:\\xa0\"),K.cc(),K.Mc(11,Ei,2,1,\"span\",8),K.cc(),K.cc(),K.cc(),K.dc(12,\"div\",9),K.dc(13,\"mat-drawer-container\",10),K.dc(14,\"mat-drawer-content\"),K.dc(15,\"div\",11),K.dc(16,\"div\",12),K.dc(17,\"button\",13),K.dc(18,\"mat-icon\",14),K.Oc(19,\"help_outline\"),K.cc(),K.Oc(20),K.qc(21,\"uppercase\"),K.cc(),K.cc(),K.Mc(22,Ri,6,7,\"mat-card\",15),K.qc(23,\"async\"),K.Mc(24,$i,64,14,\"mat-card\",15),K.qc(25,\"async\"),K.cc(),K.cc(),K.cc(),K.cc(),K.dc(26,\"mat-menu\",16,17),K.dc(28,\"mat-toolbar\",18),K.dc(29,\"div\",19),K.dc(30,\"button\",20),K.dc(31,\"mat-icon\"),K.Oc(32,\"close\"),K.cc(),K.cc(),K.cc(),K.cc(),K.dc(33,\"app-notification\",21),K.lc(\"click\",(function(e){return e.stopPropagation()})),K.cc(),K.cc(),K.dc(34,\"mat-menu\",16,22),K.dc(36,\"mat-toolbar\",23),K.dc(37,\"div\",19),K.dc(38,\"button\",24),K.dc(39,\"mat-icon\"),K.Oc(40,\"close\"),K.cc(),K.cc(),K.cc(),K.cc(),K.dc(41,\"mat-drawer-container\",25),K.dc(42,\"div\",26),K.dc(43,\"div\",27),K.dc(44,\"ul\",28),K.dc(45,\"li\"),K.dc(46,\"span\",29),K.Oc(47,\"Working directory:\"),K.cc(),K.Oc(48,\" a directory that contains your training script \"),K.cc(),K.dc(49,\"li\"),K.dc(50,\"span\",29),K.Oc(51,\"Ini path:\"),K.cc(),K.Oc(52,\" the path to the Auptimizer environment (.ini) file. Follow the \"),K.dc(53,\"a\",30),K.Oc(54,\"link\"),K.cc(),K.Oc(55,\" to prepare this file \"),K.cc(),K.dc(56,\"li\"),K.dc(57,\"span\",29),K.Oc(58,\"cpu/aws/gpu/node:\"),K.cc(),K.Oc(59,\" your target resource to run experiments. Follow the \"),K.dc(60,\"a\",31),K.Oc(61,\"link\"),K.cc(),K.Oc(62,\" to fill out specifications for each resource. \"),K.cc(),K.dc(63,\"li\"),K.dc(64,\"span\",29),K.Oc(65,\"Overwrite:\"),K.cc(),K.Oc(66,\" overwrite any existing Auptimizer environment set up in the same working directory \"),K.cc(),K.cc(),K.cc(),K.cc(),K.cc(),K.cc()),2&e){const e=K.Bc(27),n=K.Bc(35);K.Lb(2),K.vc(\"ngIf\",null==t.currentTheme?null:t.currentTheme.name),K.Lb(2),K.vc(\"disabled\",!(null!=t.notifications&&t.notifications.length))(\"matMenuTriggerFor\",e),K.Lb(1),K.vc(\"matBadgeHidden\",!(null!=t.notifications&&t.notifications.length))(\"matBadge\",null==t.notifications?null:t.notifications.length),K.Lb(2),K.vc(\"ngIf\",t.currentTheme),K.Lb(4),K.vc(\"ngIf\",t.version),K.Lb(6),K.vc(\"matMenuTriggerFor\",n),K.Lb(3),K.Qc(\" \",K.rc(21,11,\"interaction guide\"),\" \"),K.Lb(2),K.vc(\"ngIf\",K.rc(23,13,t.currentStep$)===t.step.INIT),K.Lb(2),K.vc(\"ngIf\",K.rc(25,15,t.currentStep$)===t.step.WIZARD)}},directives:[se.a,oe.d,oe.c,r.o,oe.e,ae.b,le.d,ce.a,he.a,ue.b,ue.c,oe.a,le.a,Se,i.i,ot.a,ae.a,yi.a,yi.b,yi.c,de.u,de.o,de.i,fe.c,fe.g,rt.b,de.c,de.n,de.g,de.s,fe.b,yi.e,yi.f,r.n,wi.a,Ce.a,r.m,xe.a,fe.f],pipes:[r.w,r.b,W.a],styles:[\"[_nghost-%COMP%]   .header-font[_ngcontent-%COMP%]{font-size:15px}[_nghost-%COMP%]   .db-card[_ngcontent-%COMP%]{padding:60px}[_nghost-%COMP%]   .db-logo[_ngcontent-%COMP%]{width:442px;height:61px}[_nghost-%COMP%]   .max-480[_ngcontent-%COMP%]{max-width:480px}[_nghost-%COMP%]   .db-title[_ngcontent-%COMP%]{margin:60px 30px 10px;font-size:30px;font-weight:500;font-stretch:normal;font-style:normal;line-height:1.2;letter-spacing:normal;text-align:center}[_nghost-%COMP%]   .db-subtitle[_ngcontent-%COMP%]{height:49px;margin:9px 50px 44px 45px}[_nghost-%COMP%]   .db-subtitle[_ngcontent-%COMP%], [_nghost-%COMP%]   .db-text[_ngcontent-%COMP%]{width:347px;font-size:16px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.19;letter-spacing:normal;text-align:center}[_nghost-%COMP%]   .db-btn[_ngcontent-%COMP%]{width:127px;height:36px;border-radius:6px}[_nghost-%COMP%]   .db-info[_ngcontent-%COMP%]{width:350px;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.25;letter-spacing:normal;text-align:left;margin-top:5px}[_nghost-%COMP%]   .path-type-btn[_ngcontent-%COMP%]{width:94px;height:74px;margin:15px;padding:25px 30px 25px 31px;border-radius:6px;border:1px solid #cbcbcb}[_nghost-%COMP%]   .initialize-container[_ngcontent-%COMP%] > mat-drawer-container[_ngcontent-%COMP%]{padding:50px}[_nghost-%COMP%]   .initialize-container[_ngcontent-%COMP%] > mat-drawer-container[_ngcontent-%COMP%], [_nghost-%COMP%]   .initialize-container[_ngcontent-%COMP%] > mat-drawer-container[_ngcontent-%COMP%] > mat-drawer-container[_ngcontent-%COMP%]{height:100%;min-height:calc(100vh - 64px);width:100%}[_nghost-%COMP%]   .logo-container[_ngcontent-%COMP%] > img[_ngcontent-%COMP%]{height:35px}[_nghost-%COMP%]   .headers-align[_ngcontent-%COMP%]   .mat-expansion-panel-header-description[_ngcontent-%COMP%], [_nghost-%COMP%]   .headers-align[_ngcontent-%COMP%]   .mat-expansion-panel-header-title[_ngcontent-%COMP%]{flex-basis:0}[_nghost-%COMP%]   .headers-align[_ngcontent-%COMP%]   .mat-expansion-panel-header-description[_ngcontent-%COMP%]{justify-content:space-between;align-items:center}[_nghost-%COMP%]   ul[_ngcontent-%COMP%] > li[_ngcontent-%COMP%]{list-style-type:circle;padding-bottom:15px}  mat-toolbar{font-size:14px}  .mat-menu-panel{max-width:none!important}  .mat-menu-content:not(:empty){padding:0!important}.notification-menu[_ngcontent-%COMP%]{height:40px}\"],changeDetection:0}),Object(s.b)([Object(o.e)(ne.a.dbUrl)],e.prototype,\"dbUrl$\",void 0),Object(s.b)([Object(o.e)(ne.a.themes)],e.prototype,\"themes$\",void 0),Object(s.b)([Object(o.e)(ne.a.theme)],e.prototype,\"theme$\",void 0),Object(s.b)([Object(o.e)(ne.a.notifications)],e.prototype,\"notifications$\",void 0),e})();var Gi=n(\"YfBG\");const Vi={name:\"new_exp\",proposer:\"sequence\",n_samples:10,random_seed:1,script:\"rosenbrock_hpo.py\",parameter_config:[{name:\"x\",range:[-5,5],type:\"float\"},{name:\"y\",range:[-5,5],type:\"float\"}],resource:\"cpu\",n_parallel:2,target:\"min\"};let ji=(()=>{class e{constructor(e,t,n,r,i,s,o,a){this.store=e,this.dialog=t,this.fb=n,this.route=r,this.router=i,this.helperService=s,this.cdRef=o,this.snackbarService=a,this.showInteractionGuide=!1,this.jsonHasError=!1,this.autoConvert=!0,this.errMessage=null,this.validateJSON=e=>{\"Tree\"===e?this.jsonEditorTree.set(this.jsonCode):\"Code\"===e&&this.jsonEditorCode.set(this.jsonCode)}}ngOnInit(){this.subscriptions=new a.a;const e=this.route.snapshot.params.id;this.initForm(),this.clear(),e?(this.experimentId=e,this.store.dispatch(new g(this.experimentId)),this.subscriptions.add(this.selectedExperiment$.subscribe(e=>{if(e&&this.experimentId){this.clear();const t=e.experiment.expConfig.workingdir,n=e.experiment.expConfig.resource,r=e.experiment.expConfig.cwd;this.createExperimentForm.patchValue({cwd:r||t}),t&&\"node\"!==n&&delete e.experiment.expConfig.workingdir,r&&delete e.experiment.expConfig.cwd,this.experimentConfig=e.experiment.expConfig,this.initEditor(),this.cdRef.markForCheck()}}))):(this.experimentConfig=Vi,this.initEditor(),this.cdRef.markForCheck())}initForm(){this.createExperimentForm=this.fb.group({cwd:[\"\",[de.t.required]]})}initEditor(){this.options={code:{mode:\"code\",onChange:()=>{let e;try{e=this.jsonEditorCode.get()}catch(t){this.jsonHasError=!0,this.errMessage=t,this.cdRef.markForCheck()}e&&(this.jsonHasError=!1,this.jsonCode=e,this.autoConvert&&this.validateJSON(\"Tree\"),this.cdRef.markForCheck())}},tree:{mode:\"tree\",onChange:()=>{let e;try{e=this.jsonEditorTree.get()}catch(t){this.jsonHasError=!0,this.snackbarService.error(t),this.cdRef.markForCheck()}e&&(this.jsonHasError=!1,this.jsonCode=e,this.validateJSON(\"Code\"),this.cdRef.markForCheck())}}},this.jsonEditorCode=new Gi(document.getElementById(\"jsonEditorCode\"),this.options.code),this.jsonEditorTree=new Gi(document.getElementById(\"jsonEditorTree\"),this.options.tree),this.jsonCode=this.experimentConfig,this.validateJSON(\"Code\"),this.autoConvert&&this.validateJSON(\"Tree\")}ngOnDestroy(){this.subscriptions.unsubscribe(),this.clear()}clear(){this.experimentConfig=null,this.jsonCode=null,this.jsonEditorCode=null,this.jsonEditorTree=null,this.options=null}onCancel(){this.confirmDialogRef=this.dialog.open(qe.a,{width:\"450px\",data:{title:\"Cancel and go back?\",content:\"Are you sure you want to cancel creating this experiment? Everything you added will be lost and you will return to the experiment list page.\",confirmButtonText:\"Confirm\"},panelClass:\"header-modal\"}),this.confirmDialogRef.afterClosed().subscribe(e=>{e&&this.helperService.redirectTo(\"/list\")})}onCreateExperiment(){this.createExperimentForm.valid&&this.jsonCode&&!this.jsonHasError&&(this.jsonHasError?this.snackbarService.error(this.errMessage):this.store.dispatch(new k({cwd:this.createExperimentForm.value.cwd,json_config_body:this.jsonCode})))}}return e.\\u0275fac=function(t){return new(t||e)(K.Xb(o.i),K.Xb(nt.b),K.Xb(de.d),K.Xb(i.a),K.Xb(i.g),K.Xb(Q.a),K.Xb(K.j),K.Xb(Q.b))},e.\\u0275cmp=K.Rb({type:e,selectors:[[\"app-create-experiment\"]],decls:64,vars:12,consts:[[1,\"mt-3\",3,\"formGroup\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"center center\",\"fxLayout.lt-lg\",\"column\",\"fxLayoutGap\",\"15px\",1,\"w-full\",\"px-3\"],[\"appearance\",\"outline\",1,\"w-full\"],[\"type\",\"text\",\"matInput\",\"\",\"placeholder\",\"Working directory\",\"formControlName\",\"cwd\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"start center\",\"fxLayoutGap\",\"15px\",1,\"mb-3\"],[\"mat-raised-button\",\"\",\"color\",\"accent\",\"type\",\"submit\",1,\"minw-150\",3,\"disabled\",\"click\"],[\"mat-raised-button\",\"\",\"type\",\"button\",1,\"minw-100\",3,\"click\"],[\"fxLayoutAlign\",\"end center\",1,\"w-full\",\"px-3\"],[\"type\",\"button\",\"fxFlexAlign\",\"end\",\"mat-raised-button\",\"\",3,\"matMenuTriggerFor\"],[1,\"mr-3\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"start center\",1,\"px-4\"],[1,\"mat-title\",\"m-0\",\"w-full\"],[1,\"wrapper\"],[\"id\",\"jsonEditorCode\",1,\"left\"],[\"id\",\"jsonEditorTree\",1,\"right\"],[\"xPosition\",\"before\"],[\"helpMenu\",\"matMenu\"],[1,\"help-menu\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"end center\",1,\"w-full\"],[\"mat-icon-button\",\"\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"space-between center\",\"fxLayoutGap\",\"30px\",1,\"help-content\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"start center\",\"fxLayoutGap\",\"30px\",1,\"p-5\"],[1,\"w-full\"],[1,\"mt-3\",\"ml-5\",\"help-list\"],[\"href\",\"https://lge-arc-advancedai.github.io/auptimizer/algorithm.html\",\"target\",\"_blank\"],[\"href\",\"https://lge-arc-advancedai.github.io/auptimizer/experiment.html#manual-modification-of-training-code\",\"target\",\"_blank\"]],template:function(e,t){if(1&e&&(K.dc(0,\"form\",0),K.dc(1,\"div\",1),K.dc(2,\"mat-form-field\",2),K.dc(3,\"mat-label\"),K.Oc(4,\"Current working directory\"),K.cc(),K.Yb(5,\"input\",3),K.dc(6,\"mat-error\"),K.Oc(7,\"Missing field\"),K.cc(),K.cc(),K.dc(8,\"div\",4),K.dc(9,\"button\",5),K.lc(\"click\",(function(){return t.onCreateExperiment()})),K.Oc(10),K.qc(11,\"uppercase\"),K.cc(),K.dc(12,\"button\",6),K.lc(\"click\",(function(){return t.onCancel()})),K.Oc(13),K.qc(14,\"uppercase\"),K.cc(),K.cc(),K.cc(),K.dc(15,\"div\",7),K.dc(16,\"button\",8),K.dc(17,\"mat-icon\",9),K.Oc(18,\"help_outline\"),K.cc(),K.Oc(19),K.qc(20,\"uppercase\"),K.cc(),K.cc(),K.dc(21,\"div\",10),K.dc(22,\"h2\",11),K.Oc(23,\"JSON FILE\"),K.cc(),K.dc(24,\"h2\",11),K.Oc(25,\"VALIDATED JSON\"),K.cc(),K.cc(),K.dc(26,\"div\",12),K.Yb(27,\"div\",13),K.Yb(28,\"div\",14),K.cc(),K.cc(),K.dc(29,\"mat-menu\",15,16),K.dc(31,\"mat-toolbar\",17),K.dc(32,\"div\",18),K.dc(33,\"button\",19),K.dc(34,\"mat-icon\"),K.Oc(35,\"close\"),K.cc(),K.cc(),K.cc(),K.cc(),K.dc(36,\"mat-drawer-container\",20),K.dc(37,\"div\",21),K.dc(38,\"div\",22),K.Oc(39,\" There are two panels on this page: \"),K.dc(40,\"ul\",23),K.dc(41,\"li\"),K.Oc(42,\"Left panel: Here you can input your JSON file and modify it.\"),K.cc(),K.dc(43,\"li\"),K.Oc(44,\"Right panel: Here displays the parsed JSON file. You can use it to validate if everything looks correct! \"),K.cc(),K.cc(),K.cc(),K.dc(45,\"div\",22),K.Oc(46,\" How to: \"),K.dc(47,\"ul\",23),K.dc(48,\"li\"),K.Oc(49,\"Enter your working directory that saves your experiment json files and training script.\"),K.cc(),K.dc(50,\"li\"),K.Oc(51,\"Input experiment configuration json in the left panel. Please follow the \"),K.dc(52,\"a\",24),K.Oc(53,\"link\"),K.cc(),K.Oc(54,\" to prepare the json file.\"),K.cc(),K.dc(55,\"li\"),K.Oc(56,\"Make sure you have adapted your training script following the \"),K.dc(57,\"a\",25),K.Oc(58,\"link\"),K.cc(),K.Oc(59,\".\"),K.cc(),K.dc(60,\"li\"),K.Oc(61,\"Click on Create experiment to add this experiment to the database.\"),K.cc(),K.dc(62,\"li\"),K.Oc(63,\"Click on Cancel to go back.\"),K.cc(),K.cc(),K.cc(),K.cc(),K.cc(),K.cc()),2&e){const e=K.Bc(30);K.vc(\"formGroup\",t.createExperimentForm),K.Lb(9),K.vc(\"disabled\",!t.createExperimentForm.valid||t.jsonHasError),K.Lb(1),K.Qc(\" \",K.rc(11,6,\"Create experiment\"),\" \"),K.Lb(3),K.Qc(\" \",K.rc(14,8,\"Cancel\"),\" \"),K.Lb(3),K.vc(\"matMenuTriggerFor\",e),K.Lb(3),K.Qc(\" \",K.rc(20,10,\"interaction guide\"),\" \")}},directives:[de.u,de.o,de.i,oe.d,oe.c,oe.e,fe.c,fe.g,rt.b,de.c,de.n,de.g,fe.b,ae.b,oe.a,le.d,ce.a,le.a,se.a,ue.b],pipes:[r.w],styles:[\"[_nghost-%COMP%]     .mat-checkbox-label{color:#fff!important}.wrapper[_ngcontent-%COMP%]{width:calc(100vw - 16px);height:calc(100vh - 64px - 80px - 80px - 50px);display:flex;padding:8px}mat-form-field[_ngcontent-%COMP%]{font-size:18px}.minw-150[_ngcontent-%COMP%]{min-width:150px}.minw-100[_ngcontent-%COMP%]{min-width:100px}.headers-align[_ngcontent-%COMP%]   .mat-expansion-panel-header-description[_ngcontent-%COMP%], .headers-align[_ngcontent-%COMP%]   .mat-expansion-panel-header-title[_ngcontent-%COMP%]{flex-basis:0}.headers-align[_ngcontent-%COMP%]   .mat-expansion-panel-header-description[_ngcontent-%COMP%]{justify-content:space-between;align-items:center}.headers-align[_ngcontent-%COMP%]   .mat-form-field[_ngcontent-%COMP%] + .mat-form-field[_ngcontent-%COMP%]{margin-left:8px}\"],changeDetection:0}),Object(s.b)([Object(o.e)(q.selectedExperiment)],e.prototype,\"selectedExperiment$\",void 0),e})();var Zi=n(\"l7GE\"),zi=n(\"ZUHj\");class Ki{constructor(e,t){this.observables=e,this.project=t}call(e,t){return t.subscribe(new Xi(e,this.observables,this.project))}}class Xi extends Zi.a{constructor(e,t,n){super(e),this.observables=t,this.project=n,this.toRespond=[];const r=t.length;this.values=new Array(r);for(let i=0;i<r;i++)this.toRespond.push(i);for(let i=0;i<r;i++){let e=t[i];this.add(Object(zi.a)(this,e,void 0,i))}}notifyNext(e,t,n){this.values[n]=t;const r=this.toRespond;if(r.length>0){const e=r.indexOf(n);-1!==e&&r.splice(e,1)}}notifyComplete(){}_next(e){if(0===this.toRespond.length){const t=[e,...this.values];this.project?this._tryProject(t):this.destination.next(t)}}_tryProject(e){let t;try{t=this.project.apply(this,e)}catch(n){return void this.destination.error(n)}this.destination.next(t)}}function Ui(e,t){1&e&&(K.dc(0,\"div\",15),K.Yb(1,\"mat-spinner\",16),K.cc()),2&e&&(K.Lb(1),K.vc(\"diameter\",100))}function Yi(e,t){if(1&e&&(K.dc(0,\"mat-option\",29),K.Oc(1),K.cc()),2&e){const e=t.$implicit;K.vc(\"value\",e),K.Lb(1),K.Qc(\" \",e.name||e.scriptName,\" \")}}function Ji(e,t){if(1&e){const e=K.ec();K.dc(0,\"mat-form-field\",26),K.dc(1,\"mat-label\"),K.Oc(2,\"Select Experiments\"),K.cc(),K.dc(3,\"mat-select\",27),K.lc(\"ngModelChange\",(function(t){return K.Ec(e),K.pc(3).selectedExperiment=t}))(\"selectionChange\",(function(t){return K.Ec(e),K.pc(3).onSelectExperiment(t)})),K.Mc(4,Yi,2,2,\"mat-option\",28),K.cc(),K.cc()}if(2&e){const e=K.pc(3);K.Lb(3),K.vc(\"ngModel\",e.selectedExperiment),K.Lb(1),K.vc(\"ngForOf\",e.intermResults)}}function Qi(e,t){if(1&e&&(K.dc(0,\"div\",23),K.Mc(1,Ji,5,2,\"mat-form-field\",25),K.cc()),2&e){const e=K.pc(2);K.Lb(1),K.vc(\"ngIf\",e.intermResults&&e.intermResults.length>0)}}function qi(e,t){if(1&e&&(K.dc(0,\"mat-option\",29),K.Oc(1),K.cc()),2&e){const e=t.$implicit;K.vc(\"value\",e),K.Lb(1),K.Qc(\" \",e,\" \")}}function es(e,t){if(1&e){const e=K.ec();K.dc(0,\"div\",23),K.dc(1,\"mat-form-field\",30),K.dc(2,\"mat-label\"),K.Oc(3,\" Y-axis \"),K.cc(),K.dc(4,\"mat-select\",31),K.lc(\"selectionChange\",(function(t){return K.Ec(e),K.pc(2).selectLabel(t.value)})),K.Mc(5,qi,2,2,\"mat-option\",28),K.cc(),K.cc(),K.cc()}if(2&e){const e=K.pc(2);K.Lb(4),K.vc(\"formControl\",e.selectedLabel),K.Lb(1),K.vc(\"ngForOf\",e.interimExperimentMultResLabels)}}function ts(e,t){if(1&e&&(K.dc(0,\"mat-option\",29),K.Oc(1),K.cc()),2&e){const e=t.$implicit;K.vc(\"value\",e),K.Lb(1),K.Qc(\" \",e.jid,\" \")}}function ns(e,t){if(1&e){const e=K.ec();K.dc(0,\"mat-form-field\",26),K.dc(1,\"mat-label\"),K.Oc(2,\"Select Job\"),K.cc(),K.dc(3,\"mat-select\",32),K.lc(\"ngModelChange\",(function(t){return K.Ec(e),K.pc(3).selectedJobs=t}))(\"openedChange\",(function(){return K.Ec(e),K.pc(3).onOpenSelectJob()}))(\"selectionChange\",(function(t){return K.Ec(e),K.pc(3).onSelectJob(t)})),K.Mc(4,ts,2,2,\"mat-option\",28),K.cc(),K.cc()}if(2&e){const e=K.pc(3);K.Lb(3),K.vc(\"ngModel\",e.selectedJobs),K.Lb(1),K.vc(\"ngForOf\",e.jobs)}}function rs(e,t){if(1&e&&(K.dc(0,\"div\",23),K.Mc(1,ns,5,2,\"mat-form-field\",25),K.cc()),2&e){const e=K.pc(2);K.Lb(1),K.vc(\"ngIf\",e.jobs&&e.jobs.length>0)}}function is(e,t){if(1&e){const e=K.ec();K.bc(0),K.dc(1,\"div\",17),K.Mc(2,Qi,2,1,\"div\",18),K.Mc(3,es,6,2,\"div\",18),K.Mc(4,rs,2,1,\"div\",18),K.cc(),K.dc(5,\"div\",19),K.dc(6,\"button\",20),K.lc(\"click\",(function(){return K.Ec(e),K.pc().downloadGraph()})),K.Oc(7),K.qc(8,\"uppercase\"),K.cc(),K.dc(9,\"button\",21),K.dc(10,\"mat-icon\",22),K.Oc(11,\"help_outline\"),K.cc(),K.Oc(12),K.qc(13,\"uppercase\"),K.cc(),K.cc(),K.dc(14,\"div\",23),K.Yb(15,\"plotly-plot\",24),K.cc(),K.ac()}if(2&e){const e=K.pc(),t=K.Bc(8);K.Lb(2),K.vc(\"ngIf\",e.intermResults&&e.intermResults.length),K.Lb(1),K.vc(\"ngIf\",e.interimExperimentMultResLabels&&e.interimExperimentMultResLabels.length>0),K.Lb(1),K.vc(\"ngIf\",e.jobs&&e.jobs.length),K.Lb(3),K.Qc(\" \",K.rc(8,9,\"Download graph png\"),\" \"),K.Lb(2),K.vc(\"matMenuTriggerFor\",t),K.Lb(3),K.Qc(\" \",K.rc(13,11,\"interaction guide\"),\" \"),K.Lb(3),K.vc(\"data\",e.graph.data)(\"layout\",e.graph.layout)(\"config\",e.graph.config)}}let ss=(()=>{class e{constructor(e,t,n,r,i,s,o){this.locale=e,this.store=t,this.cdRef=n,this.route=r,this.utilsService=i,this.plotlyService=s,this.router=o,this.selectedJobs=[],this.selectedLabel=new de.e,this.yAxisLabel=\"score\",this.graph={data:[],layout:{height:540,xaxis:{title:{text:\"\"}},yaxis:{title:{text:\"\"}}},config:{responsive:!0,displayModeBar:!1,scrollZoom:!0}},this.showInteractionGuide=!1,this.flag=!0}ngOnInit(){var e,t,n,r;this.subscriptions=new a.a,(null===(t=null===(e=this.route)||void 0===e?void 0:e.parent)||void 0===t?void 0:t.params)&&this.subscriptions.add(this.intermResults$.pipe(function(...e){return t=>{let n;return\"function\"==typeof e[e.length-1]&&(n=e.pop()),t.lift(new Ki(e,n))}}(null===(r=null===(n=this.route)||void 0===n?void 0:n.parent)||void 0===r?void 0:r.params)).subscribe(([e,t])=>{t&&t.id&&(this.experimentId=t.id),e&&e.length&&(this.intermResults=e,this.intermResults.map(e=>{console.log(e),e.eid===+this.experimentId&&(this.selectedExperiment=e,console.log(this.selectedExperiment),this.store.dispatch(new I(this.selectedExperiment)),this.store.dispatch(new A({eid:this.selectedExperiment.eid})),this.cdRef.markForCheck())}),this.cdRef.markForCheck())})),this.subscriptions.add(this.theme$.subscribe(e=>{e&&(this.theme=e,this.toggleChartTheme())})),this.subscriptions.add(this.interimExperimentMultResLabels$.subscribe(e=>{this.interimExperimentMultResLabels=e})),this.subscriptions.add(this.interimExperimentSelectedLabel$.subscribe(e=>{e&&(console.log(\"interimExperimentSelectedLabel: \",e),this.selectedLabel.patchValue(e),this.cdRef.markForCheck())})),this.subscriptions.add(this.interimExperimentJobs$.subscribe(e=>{if(e&&e.length){const t=this.selectedJobs;this.jobs=e.slice().sort((e,t)=>this.utilsService.compare(e.jid,t.jid,!0)),!this.selectedJobs.length&&this.flag?(this.jobs[0]&&this.selectedJobs.push(this.jobs[0]),this.jobs[1]&&this.selectedJobs.push(this.jobs[1]),this.jobs[2]&&this.selectedJobs.push(this.jobs[2]),this.computePlots()):this.selectedJobs=this.jobs.filter(e=>t.some(t=>t.jid===e.jid)),this.selectedJobs=this.jobs.filter(e=>t.some(t=>t.jid===e.jid)),this.cdRef.markForCheck()}}))}ngOnDestroy(){this.subscriptions.unsubscribe()}onSelectExperiment(e){e&&(this.flag=!0,this.selectedJobs=[],this.graph.data=[],this.selectedExperiment=e.value,this.jobs=null,this.store.dispatch(new I(this.selectedExperiment)),this.store.dispatch(new A({eid:this.selectedExperiment.eid})),this.router.navigate([`experiment/${this.selectedExperiment.eid}/interm`]),this.cdRef.markForCheck())}onOpenSelectJob(){this.flag=!1,this.store.dispatch(new A({eid:this.selectedExperiment.eid}))}onSelectJob(e){e&&(this.selectedJobs=e.value,this.computePlots())}downloadGraph(){const e=this.plotlyService.getInstanceByDivId(\"interim\");this.plotlyService.getPlotly().downloadImage(e,{format:\"png\",width:\"1000\",height:\"450\",filename:\"intermediateResults\"})}computePlots(){if(this.toggleChartTheme(),this.selectedJobs.length){const e=this.selectedJobs.map(e=>({x:[...e.interimResults.map(t=>(t.receiveTime-e.interimResults[0].receiveTime)/1e3)],y:[...e.interimResults.map(e=>e.score)],mode:\"lines+markers\",type:\"scatter\",name:e.jid}));this.graph.data=e}else this.graph.data=[];this.cdRef.markForCheck()}toggleChartTheme(){this.theme&&(this.graph.layout=\"dark\"===this.theme.name?this.changeDarkModeChart():this.changeLightModeChart(),this.cdRef.markForCheck())}changeLightModeChart(){const e=new W.a;return{colorway:ar,hovermode:\"closest\",height:450,showlegend:!0,xaxis:{zeroline:!1,title:{text:e.transform(\"time (seconds)\"),font:{size:18,color:\"#7f7f7f\"}}},yaxis:{zeroline:!1,title:{text:e.transform(this.yAxisLabel),font:{size:18,color:\"#7f7f7f\"}}}}}changeDarkModeChart(){const e=new W.a;return{colorway:ar,hovermode:\"closest\",plot_bgcolor:\"#424242\",paper_bgcolor:\"#424242\",height:450,showlegend:!0,legend:{font:{color:\"#ffffff\"}},xaxis:{title:{text:e.transform(\"time (seconds)\"),font:{size:18,color:\"#ffffff\"}},gridcolor:\"#c0c0c0\",tickfont:{color:\"#ffffff\"},showline:!0,showgrid:!0,zeroline:!1,showticklabels:!0},yaxis:{title:{text:e.transform(this.yAxisLabel),font:{size:18,color:\"#ffffff\"}},gridcolor:\"#c0c0c0\",tickfont:{color:\"#ffffff\"},showline:!0,showgrid:!0,zeroline:!1,showticklabels:!0},line:{color:\"#ffffff\"}}}selectLabel(e){e&&(this.yAxisLabel=e,this.cdRef.markForCheck(),this.flag=!0,this.selectedJobs=[],this.graph.data=[],this.jobs=null,this.toggleChartTheme(),this.store.dispatch(new A({eid:this.selectedExperiment.eid,label:e})))}}return e.\\u0275fac=function(t){return new(t||e)(K.Xb(K.B),K.Xb(o.i),K.Xb(K.j),K.Xb(i.a),K.Xb(Q.c),K.Xb(cr.c),K.Xb(i.g))},e.\\u0275cmp=K.Rb({type:e,selectors:[[\"app-interm-results\"]],decls:34,vars:6,consts:[[\"fxLayout\",\"column\"],[1,\"mat-headline\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"center center\",\"class\",\"p-10\",4,\"ngIf\"],[4,\"ngIf\"],[\"xPosition\",\"before\"],[\"helpMenu\",\"matMenu\"],[1,\"help-menu\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"end center\",1,\"w-full\"],[\"mat-icon-button\",\"\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"space-between center\",\"fxLayoutGap\",\"30px\",1,\"help-content\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"start\",\"fxLayoutGap\",\"30px\",1,\"p-5\",\"w-full\"],[\"fxFlex\",\"100\",\"fxLayout\",\"row\",\"fxLayoutAlign\",\"start\",1,\"mt-0\",\"mb-3\"],[\"fxFlex\",\"100\",\"fxLayout\",\"row\",\"fxLayoutAlign\",\"start\",1,\"my-0\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"space-between center\",\"fxLayoutGap\",\"30px\"],[1,\"mt-3\",\"ml-5\",\"help-list\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"center center\",1,\"p-10\"],[\"color\",\"accent\",1,\"mt-10\",3,\"diameter\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"space-between center\",\"fxLayoutGap\",\"20px\"],[\"class\",\"w-full\",4,\"ngIf\"],[\"fxLayoutAlign\",\"space-between center\",1,\"w-full\",\"mb-4\",\"mr-3\"],[\"matTooltip\",\"Current view will be downloaded\",\"mat-raised-button\",\"\",3,\"click\"],[\"fxFlexAlign\",\"end\",\"mat-raised-button\",\"\",3,\"matMenuTriggerFor\"],[1,\"mr-3\"],[1,\"w-full\"],[\"divId\",\"interim\",1,\"w-full\",\"chart\",3,\"data\",\"layout\",\"config\"],[\"appearance\",\"outline\",\"class\",\"w-full\",4,\"ngIf\"],[\"appearance\",\"outline\",1,\"w-full\"],[3,\"ngModel\",\"ngModelChange\",\"selectionChange\"],[3,\"value\",4,\"ngFor\",\"ngForOf\"],[3,\"value\"],[\"appearance\",\"outline\",1,\"w-full\",\"mr-3\"],[1,\"w-full\",3,\"formControl\",\"selectionChange\"],[\"multiple\",\"\",3,\"ngModel\",\"ngModelChange\",\"openedChange\",\"selectionChange\"]],template:function(e,t){1&e&&(K.dc(0,\"div\",0),K.dc(1,\"h1\",1),K.Oc(2,\"Compare the intermediate results of an experiment`s jobs against each other\"),K.cc(),K.Mc(3,Ui,2,1,\"div\",2),K.qc(4,\"async\"),K.Mc(5,is,16,13,\"ng-container\",3),K.qc(6,\"async\"),K.cc(),K.dc(7,\"mat-menu\",4,5),K.dc(9,\"mat-toolbar\",6),K.dc(10,\"div\",7),K.dc(11,\"button\",8),K.dc(12,\"mat-icon\"),K.Oc(13,\"close\"),K.cc(),K.cc(),K.cc(),K.cc(),K.dc(14,\"mat-drawer-container\",9),K.dc(15,\"div\",10),K.dc(16,\"p\",11),K.Oc(17,\" To make best use of this graph, please check the job status to identify jobs you would like to visualize. \"),K.cc(),K.dc(18,\"p\",12),K.Oc(19,\"On the graph:\"),K.cc(),K.dc(20,\"div\",13),K.dc(21,\"ul\",14),K.dc(22,\"li\"),K.Oc(23,\"zoom out/in: place mouse on the graph and scroll up/down\"),K.cc(),K.dc(24,\"li\"),K.Oc(25,\"zoom in a specific area: click mouse anywhere on the graph and drag it to draw a square\"),K.cc(),K.dc(26,\"li\"),K.Oc(27,\"change the axis range: drag the label on x-axis or y-axis\"),K.cc(),K.dc(28,\"li\"),K.Oc(29,\"show/hide data: click on the corresponding legend\"),K.cc(),K.dc(30,\"li\"),K.Oc(31,\"show detailed value: hover over the data point\"),K.cc(),K.dc(32,\"li\"),K.Oc(33,\"go back to default view: double-click on anywhere on the plot\"),K.cc(),K.cc(),K.cc(),K.cc(),K.cc(),K.cc()),2&e&&(K.Lb(3),K.vc(\"ngIf\",K.rc(4,2,t.loadingIntermResults$)),K.Lb(2),K.vc(\"ngIf\",!1===K.rc(6,4,t.loadingIntermResults$)))},directives:[oe.d,r.o,le.a,se.a,oe.c,ae.b,ce.a,ue.b,oe.e,oe.b,st.b,Ce.a,oe.a,le.d,cr.a,fe.c,fe.g,ge.a,de.n,de.q,r.n,me.m,de.f],pipes:[r.b,r.w],styles:[\".multiplier[_ngcontent-%COMP%]{width:110px;margin-top:1px}.multiplier[_ngcontent-%COMP%] > mat-form-field[_ngcontent-%COMP%]{text-align:center}.headers-align[_ngcontent-%COMP%]   .mat-expansion-panel-header-description[_ngcontent-%COMP%], .headers-align[_ngcontent-%COMP%]   .mat-expansion-panel-header-title[_ngcontent-%COMP%]{flex-basis:0}.headers-align[_ngcontent-%COMP%]   .mat-expansion-panel-header-description[_ngcontent-%COMP%]{justify-content:space-between;align-items:center}.headers-align[_ngcontent-%COMP%]   .mat-form-field[_ngcontent-%COMP%] + .mat-form-field[_ngcontent-%COMP%]{margin-left:8px}input[_ngcontent-%COMP%], mat-select[_ngcontent-%COMP%]{font-size:18px;padding-top:10px}.chart[_ngcontent-%COMP%]{height:540px}\"],changeDetection:0}),Object(s.b)([Object(o.e)(ne.a.theme)],e.prototype,\"theme$\",void 0),Object(s.b)([Object(o.e)(q.intermResults)],e.prototype,\"intermResults$\",void 0),Object(s.b)([Object(o.e)(q.loadingIntermResults)],e.prototype,\"loadingIntermResults$\",void 0),Object(s.b)([Object(o.e)(q.interimExperimentJobs)],e.prototype,\"interimExperimentJobs$\",void 0),Object(s.b)([Object(o.e)(q.interimExperimentMultResLabels)],e.prototype,\"interimExperimentMultResLabels$\",void 0),Object(s.b)([Object(o.e)(q.interimExperimentSelectedLabel)],e.prototype,\"interimExperimentSelectedLabel$\",void 0),e})();const os=[{path:\"\",canActivate:[n(\"Ne9M\").a],component:Oe,children:[{path:\"\",redirectTo:\"list\",pathMatch:\"full\"},{path:\"list\",component:wn},{path:\"notification\",component:Se},{path:\"create\",component:ji},{path:\"create/:id\",component:ji},{path:\"experiment/:id\",component:Ue,children:[{path:\"\",redirectTo:\"overview\",pathMatch:\"full\"},{path:\"overview\",component:or},{path:\"job-status\",component:ii},{path:\"hig\",component:hi},{path:\"multi\",component:vi},{path:\"interm\",component:ss}]}]},{path:\"initialize\",component:Hi}];let as=(()=>{class e{}return e.\\u0275mod=K.Vb({type:e}),e.\\u0275inj=K.Ub({factory:function(t){return new(t||e)},imports:[[i.j.forChild(os)],i.j]}),e})();var cs=n(\"PCNd\");let ls=(()=>{class e{}return e.\\u0275mod=K.Vb({type:e}),e.\\u0275inj=K.Ub({factory:function(t){return new(t||e)},providers:[Y],imports:[[r.c,as,cs.a,o.d.forFeature([q]),Gr]]}),e})()},3:function(e,t){},4:function(e,t){},5:function(e,t){},EUZL:function(e,t,n){!function(t){t.version=\"0.14.5\";var r=1200,i=1252;\"undefined\"==typeof cptable&&(\"undefined\"!=typeof global?global.cptable=n(\"IkRI\"):\"undefined\"!=typeof window&&(window.cptable=n(\"IkRI\")));for(var s=[874,932,936,949,950],o=0;o<=8;++o)s.push(1250+o);var a={0:1252,1:65001,2:65001,77:1e4,128:932,129:949,130:1361,134:936,136:950,161:1253,162:1254,163:1258,177:1255,178:1256,186:1257,204:1251,222:874,238:1250,255:1252,69:6969},c=function(e){-1!=s.indexOf(e)&&(i=a[0]=e)},l=function(e){r=e,c(e)};function h(){l(1200),c(1252)}function d(e){for(var t=[],n=0,r=e.length;n<r;++n)t[n]=e.charCodeAt(n);return t}var u=function(e){var t=e.charCodeAt(0),n=e.charCodeAt(1);return 255==t&&254==n?function(e){for(var t=[],n=0;n<e.length>>1;++n)t[n]=String.fromCharCode(e.charCodeAt(2*n)+(e.charCodeAt(2*n+1)<<8));return t.join(\"\")}(e.slice(2)):254==t&&255==n?function(e){for(var t=[],n=0;n<e.length>>1;++n)t[n]=String.fromCharCode(e.charCodeAt(2*n+1)+(e.charCodeAt(2*n)<<8));return t.join(\"\")}(e.slice(2)):65279==t?e.slice(1):e},f=function(e){return String.fromCharCode(e)},g=function(e){return String.fromCharCode(e)};\"undefined\"!=typeof cptable&&(l=function(e){r=e,c(e)},u=function(e){return 255===e.charCodeAt(0)&&254===e.charCodeAt(1)?cptable.utils.decode(1200,d(e.slice(2))):e},f=function(e){return 1200===r?String.fromCharCode(e):cptable.utils.decode(r,[255&e,e>>8])[0]},g=function(e){return cptable.utils.decode(i,[e])[0]});var p,m=(p=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\",{encode:function(e){for(var t=\"\",n=0,r=0,i=0,s=0,o=0,a=0,c=0,l=0;l<e.length;)s=(n=e.charCodeAt(l++))>>2,o=(3&n)<<4|(r=e.charCodeAt(l++))>>4,a=(15&r)<<2|(i=e.charCodeAt(l++))>>6,c=63&i,isNaN(r)?a=c=64:isNaN(i)&&(c=64),t+=p.charAt(s)+p.charAt(o)+p.charAt(a)+p.charAt(c);return t},decode:function(e){var t=\"\",n=0,r=0,i=0,s=0;e=e.replace(/[^\\w\\+\\/\\=]/g,\"\");for(var o=0;o<e.length;)n=p.indexOf(e.charAt(o++)),r=p.indexOf(e.charAt(o++)),t+=String.fromCharCode(n<<2|r>>4),64!==(i=p.indexOf(e.charAt(o++)))&&(t+=String.fromCharCode((15&r)<<4|i>>2)),64!==(s=p.indexOf(e.charAt(o++)))&&(t+=String.fromCharCode((3&i)<<6|s));return t}}),C=\"undefined\"!=typeof Buffer&&\"undefined\"!=typeof process&&void 0!==process.versions&&!!process.versions.node,b=function(){};if(\"undefined\"!=typeof Buffer){var v=!Buffer.from;if(!v)try{Buffer.from(\"foo\",\"utf8\")}catch(El){v=!0}b=v?function(e,t){return t?new Buffer(e,t):new Buffer(e)}:Buffer.from.bind(Buffer),Buffer.alloc||(Buffer.alloc=function(e){return new Buffer(e)}),Buffer.allocUnsafe||(Buffer.allocUnsafe=function(e){return new Buffer(e)})}function I(e){return C?Buffer.alloc(e):new Array(e)}function A(e){return C?Buffer.allocUnsafe(e):new Array(e)}var y=function(e){return C?b(e,\"binary\"):e.split(\"\").map((function(e){return 255&e.charCodeAt(0)}))};function w(e){if(\"undefined\"==typeof ArrayBuffer)return y(e);for(var t=new ArrayBuffer(e.length),n=new Uint8Array(t),r=0;r!=e.length;++r)n[r]=255&e.charCodeAt(r);return t}function S(e){if(Array.isArray(e))return e.map(tc).join(\"\");for(var t=[],n=0;n<e.length;++n)t[n]=tc(e[n]);return t.join(\"\")}function x(e){if(\"undefined\"==typeof ArrayBuffer)throw new Error(\"Unsupported\");if(e instanceof ArrayBuffer)return x(new Uint8Array(e));for(var t=new Array(e.length),n=0;n<e.length;++n)t[n]=e[n];return t}var E=function(e){return[].concat.apply([],e)},k=/\\u0000/g,_=/[\\u0001-\\u0006]/g,T={},R=function(e){function t(e){for(var t=\"\",n=e.length-1;n>=0;)t+=e.charAt(n--);return t}function n(e,t){for(var n=\"\";n.length<t;)n+=e;return n}function r(e,t){var r=\"\"+e;return r.length>=t?r:n(\"0\",t-r.length)+r}function i(e,t){var r=\"\"+e;return r.length>=t?r:n(\" \",t-r.length)+r}function s(e,t){var r=\"\"+e;return r.length>=t?r:r+n(\" \",t-r.length)}e.version=\"0.10.2\";var o=Math.pow(2,32);function a(e,t){return e>o||e<-o?function(e,t){var r=\"\"+Math.round(e);return r.length>=t?r:n(\"0\",t-r.length)+r}(e,t):function(e,t){var r=\"\"+e;return r.length>=t?r:n(\"0\",t-r.length)+r}(Math.round(e),t)}function c(e,t){return e.length>=7+(t=t||0)&&103==(32|e.charCodeAt(t))&&101==(32|e.charCodeAt(t+1))&&110==(32|e.charCodeAt(t+2))&&101==(32|e.charCodeAt(t+3))&&114==(32|e.charCodeAt(t+4))&&97==(32|e.charCodeAt(t+5))&&108==(32|e.charCodeAt(t+6))}var l=[[\"Sun\",\"Sunday\"],[\"Mon\",\"Monday\"],[\"Tue\",\"Tuesday\"],[\"Wed\",\"Wednesday\"],[\"Thu\",\"Thursday\"],[\"Fri\",\"Friday\"],[\"Sat\",\"Saturday\"]],h=[[\"J\",\"Jan\",\"January\"],[\"F\",\"Feb\",\"February\"],[\"M\",\"Mar\",\"March\"],[\"A\",\"Apr\",\"April\"],[\"M\",\"May\",\"May\"],[\"J\",\"Jun\",\"June\"],[\"J\",\"Jul\",\"July\"],[\"A\",\"Aug\",\"August\"],[\"S\",\"Sep\",\"September\"],[\"O\",\"Oct\",\"October\"],[\"N\",\"Nov\",\"November\"],[\"D\",\"Dec\",\"December\"]];function d(e){e[0]=\"General\",e[1]=\"0\",e[2]=\"0.00\",e[3]=\"#,##0\",e[4]=\"#,##0.00\",e[9]=\"0%\",e[10]=\"0.00%\",e[11]=\"0.00E+00\",e[12]=\"# ?/?\",e[13]=\"# ??/??\",e[14]=\"m/d/yy\",e[15]=\"d-mmm-yy\",e[16]=\"d-mmm\",e[17]=\"mmm-yy\",e[18]=\"h:mm AM/PM\",e[19]=\"h:mm:ss AM/PM\",e[20]=\"h:mm\",e[21]=\"h:mm:ss\",e[22]=\"m/d/yy h:mm\",e[37]=\"#,##0 ;(#,##0)\",e[38]=\"#,##0 ;[Red](#,##0)\",e[39]=\"#,##0.00;(#,##0.00)\",e[40]=\"#,##0.00;[Red](#,##0.00)\",e[45]=\"mm:ss\",e[46]=\"[h]:mm:ss\",e[47]=\"mmss.0\",e[48]=\"##0.0E+0\",e[49]=\"@\",e[56]='\"\\u4e0a\\u5348/\\u4e0b\\u5348 \"hh\"\\u6642\"mm\"\\u5206\"ss\"\\u79d2 \"',e[65535]=\"General\"}var u={};function f(e,t,n){for(var r=e<0?-1:1,i=e*r,s=0,o=1,a=0,c=1,l=0,h=0,d=Math.floor(i);l<t&&(a=(d=Math.floor(i))*o+s,h=d*l+c,!(i-d<5e-8));)i=1/(i-d),s=o,o=a,c=l,l=h;if(h>t&&(l>t?(h=c,a=s):(h=l,a=o)),!n)return[0,r*a,h];var u=Math.floor(r*a/h);return[u,r*a-u*h,h]}function g(e,t,n){if(e>2958465||e<0)return null;var r=0|e,i=Math.floor(86400*(e-r)),s=0,o=[],a={D:r,T:i,u:86400*(e-r)-i,y:0,m:0,d:0,H:0,M:0,S:0,q:0};if(Math.abs(a.u)<1e-6&&(a.u=0),t&&t.date1904&&(r+=1462),a.u>.9999&&(a.u=0,86400==++i&&(a.T=i=0,++r,++a.D)),60===r)o=n?[1317,10,29]:[1900,2,29],s=3;else if(0===r)o=n?[1317,8,29]:[1900,1,0],s=6;else{r>60&&--r;var c=new Date(1900,0,1);c.setDate(c.getDate()+r-1),o=[c.getFullYear(),c.getMonth()+1,c.getDate()],s=c.getDay(),r<60&&(s=(s+6)%7),n&&(s=0)}return a.y=o[0],a.m=o[1],a.d=o[2],a.S=i%60,i=Math.floor(i/60),a.M=i%60,i=Math.floor(i/60),a.H=i,a.q=s,a}d(u),e.parse_date_code=g;var p=new Date(1899,11,31,0,0,0),m=p.getTime(),C=new Date(1900,2,1,0,0,0);function b(e,t){var n=e.getTime();return t?n-=1262304e5:e>=C&&(n+=864e5),(n-(m+6e4*(e.getTimezoneOffset()-p.getTimezoneOffset())))/864e5}function v(e){return e.toString(10)}e._general_int=v;var I=function(){var e=/\\.(\\d*[1-9])0+$/,t=/\\.0*$/,n=/\\.(\\d*[1-9])0+/,r=/\\.0*[Ee]/,i=/(E[+-])(\\d)$/;function s(n){return n.indexOf(\".\")>-1?n.replace(t,\"\").replace(e,\".$1\"):n}return function(t){var o,a=Math.floor(Math.log(Math.abs(t))*Math.LOG10E);return o=a>=-4&&a<=-1?t.toPrecision(10+a):Math.abs(a)<=9?function(e){var t=e<0?12:11,n=s(e.toFixed(12));return n.length<=t||(n=e.toPrecision(10)).length<=t?n:e.toExponential(5)}(t):10===a?t.toFixed(10).substr(0,12):function(t){var n=t.toFixed(11).replace(e,\".$1\");return n.length>(t<0?12:11)&&(n=t.toPrecision(6)),n}(t),s(function(e){for(var t=0;t!=e.length;++t)if(101==(32|e.charCodeAt(t)))return e.replace(n,\".$1\").replace(r,\"E\").replace(\"e\",\"E\").replace(i,\"$10$2\");return e}(o))}}();function A(e,t){switch(typeof e){case\"string\":return e;case\"boolean\":return e?\"TRUE\":\"FALSE\";case\"number\":return(0|e)===e?v(e):I(e);case\"undefined\":return\"\";case\"object\":if(null==e)return\"\";if(e instanceof Date)return O(14,b(e,t&&t.date1904),t)}throw new Error(\"unsupported value in General format: \"+e)}function y(e,t,n,i){var s,o=\"\",a=0,c=0,d=n.y,u=0;switch(e){case 98:d=n.y+543;case 121:switch(t.length){case 1:case 2:s=d%100,u=2;break;default:s=d%1e4,u=4}break;case 109:switch(t.length){case 1:case 2:s=n.m,u=t.length;break;case 3:return h[n.m-1][1];case 5:return h[n.m-1][0];default:return h[n.m-1][2]}break;case 100:switch(t.length){case 1:case 2:s=n.d,u=t.length;break;case 3:return l[n.q][0];default:return l[n.q][1]}break;case 104:switch(t.length){case 1:case 2:s=1+(n.H+11)%12,u=t.length;break;default:throw\"bad hour format: \"+t}break;case 72:switch(t.length){case 1:case 2:s=n.H,u=t.length;break;default:throw\"bad hour format: \"+t}break;case 77:switch(t.length){case 1:case 2:s=n.M,u=t.length;break;default:throw\"bad minute format: \"+t}break;case 115:if(\"s\"!=t&&\"ss\"!=t&&\".0\"!=t&&\".00\"!=t&&\".000\"!=t)throw\"bad second format: \"+t;return 0!==n.u||\"s\"!=t&&\"ss\"!=t?(c=i>=2?3===i?1e3:100:1===i?10:1,(a=Math.round(c*(n.S+n.u)))>=60*c&&(a=0),\"s\"===t?0===a?\"0\":\"\"+a/c:(o=r(a,2+i),\"ss\"===t?o.substr(0,2):\".\"+o.substr(2,t.length-1))):r(n.S,t.length);case 90:switch(t){case\"[h]\":case\"[hh]\":s=24*n.D+n.H;break;case\"[m]\":case\"[mm]\":s=60*(24*n.D+n.H)+n.M;break;case\"[s]\":case\"[ss]\":s=60*(60*(24*n.D+n.H)+n.M)+Math.round(n.S+n.u);break;default:throw\"bad abstime format: \"+t}u=3===t.length?1:2;break;case 101:s=d,u=1}return u>0?r(s,u):\"\"}function w(e){if(e.length<=3)return e;for(var t=e.length%3,n=e.substr(0,t);t!=e.length;t+=3)n+=(n.length>0?\",\":\"\")+e.substr(t,3);return n}e._general_num=I,e._general=A;var S=function(){var e=/%/g,o=/# (\\?+)( ?)\\/( ?)(\\d+)/,c=/^#*0*\\.([0#]+)/,l=/\\).*[0#]/,h=/\\(###\\) ###\\\\?-####/;function d(e){for(var t,n=\"\",r=0;r!=e.length;++r)switch(t=e.charCodeAt(r)){case 35:break;case 63:n+=\" \";break;case 48:n+=\"0\";break;default:n+=String.fromCharCode(t)}return n}function u(e,t){var n=Math.pow(10,t);return\"\"+Math.round(e*n)/n}function g(e,t){return t<(\"\"+Math.round((e-Math.floor(e))*Math.pow(10,t))).length?0:Math.round((e-Math.floor(e))*Math.pow(10,t))}return function(p,m,C){return(0|C)===C?function a(u,g,p){if(40===u.charCodeAt(0)&&!g.match(l)){var m=g.replace(/\\( */,\"\").replace(/ \\)/,\"\").replace(/\\)/,\"\");return p>=0?a(\"n\",m,p):\"(\"+a(\"n\",m,-p)+\")\"}if(44===g.charCodeAt(g.length-1))return function(e,t,n){for(var r=t.length-1;44===t.charCodeAt(r-1);)--r;return S(e,t.substr(0,r),n/Math.pow(10,3*(t.length-r)))}(u,g,p);if(-1!==g.indexOf(\"%\"))return function(t,r,i){var s=r.replace(e,\"\"),o=r.length-s.length;return S(t,s,i*Math.pow(10,2*o))+n(\"%\",o)}(u,g,p);if(-1!==g.indexOf(\"E\"))return function e(t,n){var r,i=t.indexOf(\"E\")-t.indexOf(\".\")-1;if(t.match(/^#+0.0E\\+0$/)){if(0==n)return\"0.0E+0\";if(n<0)return\"-\"+e(t,-n);var s=t.indexOf(\".\");-1===s&&(s=t.indexOf(\"E\"));var o=Math.floor(Math.log(n)*Math.LOG10E)%s;if(o<0&&(o+=s),!(r=(n/Math.pow(10,o)).toPrecision(i+1+(s+o)%s)).match(/[Ee]/)){var a=Math.floor(Math.log(n)*Math.LOG10E);-1===r.indexOf(\".\")?r=r.charAt(0)+\".\"+r.substr(1)+\"E+\"+(a-r.length+o):r+=\"E+\"+(a-o),r=r.replace(/\\+-/,\"-\")}r=r.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/,(function(e,t,n,r){return t+n+r.substr(0,(s+o)%s)+\".\"+r.substr(o)+\"E\"}))}else r=n.toExponential(i);return t.match(/E\\+00$/)&&r.match(/e[+-]\\d$/)&&(r=r.substr(0,r.length-1)+\"0\"+r.charAt(r.length-1)),t.match(/E\\-/)&&r.match(/e\\+/)&&(r=r.replace(/e\\+/,\"e\")),r.replace(\"e\",\"E\")}(g,p);if(36===g.charCodeAt(0))return\"$\"+a(u,g.substr(\" \"==g.charAt(1)?2:1),p);var C,b,v,I,A=Math.abs(p),y=p<0?\"-\":\"\";if(g.match(/^00+$/))return y+r(A,g.length);if(g.match(/^[#?]+$/))return C=\"\"+p,0===p&&(C=\"\"),C.length>g.length?C:d(g.substr(0,g.length-C.length))+C;if(b=g.match(o))return function(e,t,r){return r+(0===t?\"\":\"\"+t)+n(\" \",e[1].length+2+e[4].length)}(b,A,y);if(g.match(/^#+0+$/))return y+r(A,g.length-g.indexOf(\"0\"));if(b=g.match(c))return C=(C=(\"\"+p).replace(/^([^\\.]+)$/,\"$1.\"+d(b[1])).replace(/\\.$/,\".\"+d(b[1]))).replace(/\\.(\\d*)$/,(function(e,t){return\".\"+t+n(\"0\",d(b[1]).length-t.length)})),-1!==g.indexOf(\"0.\")?C:C.replace(/^0\\./,\".\");if(g=g.replace(/^#+([0.])/,\"$1\"),b=g.match(/^(0*)\\.(#*)$/))return y+(\"\"+A).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,b[1].length?\"0.\":\".\");if(b=g.match(/^#{1,3},##0(\\.?)$/))return y+w(\"\"+A);if(b=g.match(/^#,##0\\.([#0]*0)$/))return p<0?\"-\"+a(u,g,-p):w(\"\"+p)+\".\"+n(\"0\",b[1].length);if(b=g.match(/^#,#*,#0/))return a(u,g.replace(/^#,#*,/,\"\"),p);if(b=g.match(/^([0#]+)(\\\\?-([0#]+))+$/))return C=t(a(u,g.replace(/[\\\\-]/g,\"\"),p)),v=0,t(t(g.replace(/\\\\/g,\"\")).replace(/[0#]/g,(function(e){return v<C.length?C.charAt(v++):\"0\"===e?\"0\":\"\"})));if(g.match(h))return\"(\"+(C=a(u,\"##########\",p)).substr(0,3)+\") \"+C.substr(3,3)+\"-\"+C.substr(6);var x=\"\";if(b=g.match(/^([#0?]+)( ?)\\/( ?)([#0?]+)/))return v=Math.min(b[4].length,7),I=f(A,Math.pow(10,v)-1,!1),C=\"\"+y,\" \"==(x=S(\"n\",b[1],I[1])).charAt(x.length-1)&&(x=x.substr(0,x.length-1)+\"0\"),C+=x+b[2]+\"/\"+b[3],(x=s(I[2],v)).length<b[4].length&&(x=d(b[4].substr(b[4].length-x.length))+x),C+=x;if(b=g.match(/^# ([#0?]+)( ?)\\/( ?)([#0?]+)/))return v=Math.min(Math.max(b[1].length,b[4].length),7),y+((I=f(A,Math.pow(10,v)-1,!0))[0]||(I[1]?\"\":\"0\"))+\" \"+(I[1]?i(I[1],v)+b[2]+\"/\"+b[3]+s(I[2],v):n(\" \",2*v+1+b[2].length+b[3].length));if(b=g.match(/^[#0?]+$/))return g.length<=(C=\"\"+p).length?C:d(g.substr(0,g.length-C.length))+C;if(b=g.match(/^([#0]+)\\.([#0]+)$/)){C=\"\"+p.toFixed(Math.min(b[2].length,10)).replace(/([^0])0+$/,\"$1\"),v=C.indexOf(\".\");var E=g.indexOf(\".\")-v,k=g.length-C.length-E;return d(g.substr(0,E)+C+g.substr(g.length-k))}if(b=g.match(/^00,000\\.([#0]*0)$/))return p<0?\"-\"+a(u,g,-p):w(\"\"+p).replace(/^\\d,\\d{3}$/,\"0$&\").replace(/^\\d*$/,(function(e){return\"00,\"+(e.length<3?r(0,3-e.length):\"\")+e}))+\".\"+r(0,b[1].length);switch(g){case\"###,###\":case\"##,###\":case\"#,###\":var _=w(\"\"+A);return\"0\"!==_?y+_:\"\";default:if(g.match(/\\.[0#?]*$/))return a(u,g.slice(0,g.lastIndexOf(\".\")),p)+d(g.slice(g.lastIndexOf(\".\")))}throw new Error(\"unsupported format |\"+g+\"|\")}(p,m,C):function p(m,C,b){if(40===m.charCodeAt(0)&&!C.match(l)){var v=C.replace(/\\( */,\"\").replace(/ \\)/,\"\").replace(/\\)/,\"\");return b>=0?p(\"n\",v,b):\"(\"+p(\"n\",v,-b)+\")\"}if(44===C.charCodeAt(C.length-1))return function(e,t,n){for(var r=t.length-1;44===t.charCodeAt(r-1);)--r;return S(e,t.substr(0,r),n/Math.pow(10,3*(t.length-r)))}(m,C,b);if(-1!==C.indexOf(\"%\"))return function(t,r,i){var s=r.replace(e,\"\"),o=r.length-s.length;return S(t,s,i*Math.pow(10,2*o))+n(\"%\",o)}(m,C,b);if(-1!==C.indexOf(\"E\"))return function e(t,n){var r,i=t.indexOf(\"E\")-t.indexOf(\".\")-1;if(t.match(/^#+0.0E\\+0$/)){if(0==n)return\"0.0E+0\";if(n<0)return\"-\"+e(t,-n);var s=t.indexOf(\".\");-1===s&&(s=t.indexOf(\"E\"));var o=Math.floor(Math.log(n)*Math.LOG10E)%s;if(o<0&&(o+=s),-1===(r=(n/Math.pow(10,o)).toPrecision(i+1+(s+o)%s)).indexOf(\"e\")){var a=Math.floor(Math.log(n)*Math.LOG10E);for(-1===r.indexOf(\".\")?r=r.charAt(0)+\".\"+r.substr(1)+\"E+\"+(a-r.length+o):r+=\"E+\"+(a-o);\"0.\"===r.substr(0,2);)r=(r=r.charAt(0)+r.substr(2,s)+\".\"+r.substr(2+s)).replace(/^0+([1-9])/,\"$1\").replace(/^0+\\./,\"0.\");r=r.replace(/\\+-/,\"-\")}r=r.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/,(function(e,t,n,r){return t+n+r.substr(0,(s+o)%s)+\".\"+r.substr(o)+\"E\"}))}else r=n.toExponential(i);return t.match(/E\\+00$/)&&r.match(/e[+-]\\d$/)&&(r=r.substr(0,r.length-1)+\"0\"+r.charAt(r.length-1)),t.match(/E\\-/)&&r.match(/e\\+/)&&(r=r.replace(/e\\+/,\"e\")),r.replace(\"e\",\"E\")}(C,b);if(36===C.charCodeAt(0))return\"$\"+p(m,C.substr(\" \"==C.charAt(1)?2:1),b);var I,A,y,x,E=Math.abs(b),k=b<0?\"-\":\"\";if(C.match(/^00+$/))return k+a(E,C.length);if(C.match(/^[#?]+$/))return\"0\"===(I=a(b,0))&&(I=\"\"),I.length>C.length?I:d(C.substr(0,C.length-I.length))+I;if(A=C.match(o))return function(e,t,s){var o=parseInt(e[4],10),a=Math.round(t*o),c=Math.floor(a/o),l=a-c*o,h=o;return s+(0===c?\"\":\"\"+c)+\" \"+(0===l?n(\" \",e[1].length+1+e[4].length):i(l,e[1].length)+e[2]+\"/\"+e[3]+r(h,e[4].length))}(A,E,k);if(C.match(/^#+0+$/))return k+a(E,C.length-C.indexOf(\"0\"));if(A=C.match(c))return I=u(b,A[1].length).replace(/^([^\\.]+)$/,\"$1.\"+d(A[1])).replace(/\\.$/,\".\"+d(A[1])).replace(/\\.(\\d*)$/,(function(e,t){return\".\"+t+n(\"0\",d(A[1]).length-t.length)})),-1!==C.indexOf(\"0.\")?I:I.replace(/^0\\./,\".\");if(C=C.replace(/^#+([0.])/,\"$1\"),A=C.match(/^(0*)\\.(#*)$/))return k+u(E,A[2].length).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,A[1].length?\"0.\":\".\");if(A=C.match(/^#{1,3},##0(\\.?)$/))return k+w(a(E,0));if(A=C.match(/^#,##0\\.([#0]*0)$/))return b<0?\"-\"+p(m,C,-b):w(\"\"+(Math.floor(b)+function(e,t){return t<(\"\"+Math.round((e-Math.floor(e))*Math.pow(10,t))).length?1:0}(b,A[1].length)))+\".\"+r(g(b,A[1].length),A[1].length);if(A=C.match(/^#,#*,#0/))return p(m,C.replace(/^#,#*,/,\"\"),b);if(A=C.match(/^([0#]+)(\\\\?-([0#]+))+$/))return I=t(p(m,C.replace(/[\\\\-]/g,\"\"),b)),y=0,t(t(C.replace(/\\\\/g,\"\")).replace(/[0#]/g,(function(e){return y<I.length?I.charAt(y++):\"0\"===e?\"0\":\"\"})));if(C.match(h))return\"(\"+(I=p(m,\"##########\",b)).substr(0,3)+\") \"+I.substr(3,3)+\"-\"+I.substr(6);var _=\"\";if(A=C.match(/^([#0?]+)( ?)\\/( ?)([#0?]+)/))return y=Math.min(A[4].length,7),x=f(E,Math.pow(10,y)-1,!1),I=\"\"+k,\" \"==(_=S(\"n\",A[1],x[1])).charAt(_.length-1)&&(_=_.substr(0,_.length-1)+\"0\"),I+=_+A[2]+\"/\"+A[3],(_=s(x[2],y)).length<A[4].length&&(_=d(A[4].substr(A[4].length-_.length))+_),I+=_;if(A=C.match(/^# ([#0?]+)( ?)\\/( ?)([#0?]+)/))return y=Math.min(Math.max(A[1].length,A[4].length),7),k+((x=f(E,Math.pow(10,y)-1,!0))[0]||(x[1]?\"\":\"0\"))+\" \"+(x[1]?i(x[1],y)+A[2]+\"/\"+A[3]+s(x[2],y):n(\" \",2*y+1+A[2].length+A[3].length));if(A=C.match(/^[#0?]+$/))return I=a(b,0),C.length<=I.length?I:d(C.substr(0,C.length-I.length))+I;if(A=C.match(/^([#0?]+)\\.([#0]+)$/)){I=\"\"+b.toFixed(Math.min(A[2].length,10)).replace(/([^0])0+$/,\"$1\"),y=I.indexOf(\".\");var T=C.indexOf(\".\")-y,R=C.length-I.length-T;return d(C.substr(0,T)+I+C.substr(C.length-R))}if(A=C.match(/^00,000\\.([#0]*0)$/))return y=g(b,A[1].length),b<0?\"-\"+p(m,C,-b):w(function(e){return e<2147483647&&e>-2147483648?\"\"+(e>=0?0|e:e-1|0):\"\"+Math.floor(e)}(b)).replace(/^\\d,\\d{3}$/,\"0$&\").replace(/^\\d*$/,(function(e){return\"00,\"+(e.length<3?r(0,3-e.length):\"\")+e}))+\".\"+r(y,A[1].length);switch(C){case\"###,##0.00\":return p(m,\"#,##0.00\",b);case\"###,###\":case\"##,###\":case\"#,###\":var B=w(a(E,0));return\"0\"!==B?k+B:\"\";case\"###,###.00\":return p(m,\"###,##0.00\",b).replace(/^0\\./,\".\");case\"#,###.00\":return p(m,\"#,##0.00\",b).replace(/^0\\./,\".\")}throw new Error(\"unsupported format |\"+C+\"|\")}(p,m,C)}}();function x(e){for(var t=[],n=!1,r=0,i=0;r<e.length;++r)switch(e.charCodeAt(r)){case 34:n=!n;break;case 95:case 42:case 92:++r;break;case 59:t[t.length]=e.substr(i,r-i),i=r+1}if(t[t.length]=e.substr(i),!0===n)throw new Error(\"Format |\"+e+\"| unterminated string \");return t}e._split=x;var E=/\\[[HhMmSs]*\\]/;function k(e){for(var t=0,n=\"\",r=\"\";t<e.length;)switch(n=e.charAt(t)){case\"G\":c(e,t)&&(t+=6),t++;break;case'\"':for(;34!==e.charCodeAt(++t)&&t<e.length;)++t;++t;break;case\"\\\\\":case\"_\":t+=2;break;case\"@\":++t;break;case\"B\":case\"b\":if(\"1\"===e.charAt(t+1)||\"2\"===e.charAt(t+1))return!0;case\"M\":case\"D\":case\"Y\":case\"H\":case\"S\":case\"E\":case\"m\":case\"d\":case\"y\":case\"h\":case\"s\":case\"e\":case\"g\":return!0;case\"A\":case\"a\":if(\"A/P\"===e.substr(t,3).toUpperCase())return!0;if(\"AM/PM\"===e.substr(t,5).toUpperCase())return!0;++t;break;case\"[\":for(r=n;\"]\"!==e.charAt(t++)&&t<e.length;)r+=e.charAt(t);if(r.match(E))return!0;break;case\".\":case\"0\":case\"#\":for(;t<e.length&&(\"0#?.,E+-%\".indexOf(n=e.charAt(++t))>-1||\"\\\\\"==n&&\"-\"==e.charAt(t+1)&&\"0#\".indexOf(e.charAt(t+2))>-1););break;case\"?\":for(;e.charAt(++t)===n;);break;case\"*\":++t,\" \"!=e.charAt(t)&&\"*\"!=e.charAt(t)||++t;break;case\"(\":case\")\":++t;break;case\"1\":case\"2\":case\"3\":case\"4\":case\"5\":case\"6\":case\"7\":case\"8\":case\"9\":for(;t<e.length&&\"0123456789\".indexOf(e.charAt(++t))>-1;);break;case\" \":default:++t}return!1}function _(e,t,n,r){for(var i,s,o,a=[],l=\"\",h=0,d=\"\",u=\"t\",f=\"H\";h<e.length;)switch(d=e.charAt(h)){case\"G\":if(!c(e,h))throw new Error(\"unrecognized character \"+d+\" in \"+e);a[a.length]={t:\"G\",v:\"General\"},h+=7;break;case'\"':for(l=\"\";34!==(o=e.charCodeAt(++h))&&h<e.length;)l+=String.fromCharCode(o);a[a.length]={t:\"t\",v:l},++h;break;case\"\\\\\":var p=e.charAt(++h);a[a.length]={t:\"(\"===p||\")\"===p?p:\"t\",v:p},++h;break;case\"_\":a[a.length]={t:\"t\",v:\" \"},h+=2;break;case\"@\":a[a.length]={t:\"T\",v:t},++h;break;case\"B\":case\"b\":if(\"1\"===e.charAt(h+1)||\"2\"===e.charAt(h+1)){if(null==i&&null==(i=g(t,n,\"2\"===e.charAt(h+1))))return\"\";a[a.length]={t:\"X\",v:e.substr(h,2)},u=d,h+=2;break}case\"M\":case\"D\":case\"Y\":case\"H\":case\"S\":case\"E\":d=d.toLowerCase();case\"m\":case\"d\":case\"y\":case\"h\":case\"s\":case\"e\":case\"g\":if(t<0)return\"\";if(null==i&&null==(i=g(t,n)))return\"\";for(l=d;++h<e.length&&e.charAt(h).toLowerCase()===d;)l+=d;\"m\"===d&&\"h\"===u.toLowerCase()&&(d=\"M\"),\"h\"===d&&(d=f),a[a.length]={t:d,v:l},u=d;break;case\"A\":case\"a\":var m={t:d,v:d};if(null==i&&(i=g(t,n)),\"A/P\"===e.substr(h,3).toUpperCase()?(null!=i&&(m.v=i.H>=12?\"P\":\"A\"),m.t=\"T\",f=\"h\",h+=3):\"AM/PM\"===e.substr(h,5).toUpperCase()?(null!=i&&(m.v=i.H>=12?\"PM\":\"AM\"),m.t=\"T\",h+=5,f=\"h\"):(m.t=\"t\",++h),null==i&&\"T\"===m.t)return\"\";a[a.length]=m,u=d;break;case\"[\":for(l=d;\"]\"!==e.charAt(h++)&&h<e.length;)l+=e.charAt(h);if(\"]\"!==l.slice(-1))throw'unterminated \"[\" block: |'+l+\"|\";if(l.match(E)){if(null==i&&null==(i=g(t,n)))return\"\";a[a.length]={t:\"Z\",v:l.toLowerCase()},u=l.charAt(1)}else l.indexOf(\"$\")>-1&&(l=(l.match(/\\$([^-\\[\\]]*)/)||[])[1]||\"$\",k(e)||(a[a.length]={t:\"t\",v:l}));break;case\".\":if(null!=i){for(l=d;++h<e.length&&\"0\"===(d=e.charAt(h));)l+=d;a[a.length]={t:\"s\",v:l};break}case\"0\":case\"#\":for(l=d;++h<e.length&&\"0#?.,E+-%\".indexOf(d=e.charAt(h))>-1||\"\\\\\"==d&&\"-\"==e.charAt(h+1)&&h<e.length-2&&\"0#\".indexOf(e.charAt(h+2))>-1;)l+=d;a[a.length]={t:\"n\",v:l};break;case\"?\":for(l=d;e.charAt(++h)===d;)l+=d;a[a.length]={t:d,v:l},u=d;break;case\"*\":++h,\" \"!=e.charAt(h)&&\"*\"!=e.charAt(h)||++h;break;case\"(\":case\")\":a[a.length]={t:1===r?\"t\":d,v:d},++h;break;case\"1\":case\"2\":case\"3\":case\"4\":case\"5\":case\"6\":case\"7\":case\"8\":case\"9\":for(l=d;h<e.length&&\"0123456789\".indexOf(e.charAt(++h))>-1;)l+=e.charAt(h);a[a.length]={t:\"D\",v:l};break;case\" \":a[a.length]={t:d,v:d},++h;break;default:if(-1===\",$-+/():!^&'~{}<>=\\u20acacfijklopqrtuvwxzP\".indexOf(d))throw new Error(\"unrecognized character \"+d+\" in \"+e);a[a.length]={t:\"t\",v:d},++h}var C,b=0,v=0;for(h=a.length-1,u=\"t\";h>=0;--h)switch(a[h].t){case\"h\":case\"H\":a[h].t=f,u=\"h\",b<1&&(b=1);break;case\"s\":(C=a[h].v.match(/\\.0+$/))&&(v=Math.max(v,C[0].length-1)),b<3&&(b=3);case\"d\":case\"y\":case\"M\":case\"e\":u=a[h].t;break;case\"m\":\"s\"===u&&(a[h].t=\"M\",b<2&&(b=2));break;case\"X\":break;case\"Z\":b<1&&a[h].v.match(/[Hh]/)&&(b=1),b<2&&a[h].v.match(/[Mm]/)&&(b=2),b<3&&a[h].v.match(/[Ss]/)&&(b=3)}switch(b){case 0:break;case 1:i.u>=.5&&(i.u=0,++i.S),i.S>=60&&(i.S=0,++i.M),i.M>=60&&(i.M=0,++i.H);break;case 2:i.u>=.5&&(i.u=0,++i.S),i.S>=60&&(i.S=0,++i.M)}var I,w=\"\";for(h=0;h<a.length;++h)switch(a[h].t){case\"t\":case\"T\":case\" \":case\"D\":break;case\"X\":a[h].v=\"\",a[h].t=\";\";break;case\"d\":case\"m\":case\"y\":case\"h\":case\"H\":case\"M\":case\"s\":case\"e\":case\"b\":case\"Z\":a[h].v=y(a[h].t.charCodeAt(0),a[h].v,i,v),a[h].t=\"t\";break;case\"n\":case\"(\":case\"?\":for(I=h+1;null!=a[I]&&(\"?\"===(d=a[I].t)||\"D\"===d||(\" \"===d||\"t\"===d)&&null!=a[I+1]&&(\"?\"===a[I+1].t||\"t\"===a[I+1].t&&\"/\"===a[I+1].v)||\"(\"===a[h].t&&(\" \"===d||\"n\"===d||\")\"===d)||\"t\"===d&&(\"/\"===a[I].v||\" \"===a[I].v&&null!=a[I+1]&&\"?\"==a[I+1].t));)a[h].v+=a[I].v,a[I]={v:\"\",t:\";\"},++I;w+=a[h].v,h=I-1;break;case\"G\":a[h].t=\"t\",a[h].v=A(t,n)}var x,_,T=\"\";if(w.length>0){40==w.charCodeAt(0)?(x=t<0&&45===w.charCodeAt(0)?-t:t,_=S(\"(\",w,x)):(_=S(\"n\",w,x=t<0&&r>1?-t:t),x<0&&a[0]&&\"t\"==a[0].t&&(_=_.substr(1),a[0].v=\"-\"+a[0].v)),I=_.length-1;var R=a.length;for(h=0;h<a.length;++h)if(null!=a[h]&&\"t\"!=a[h].t&&a[h].v.indexOf(\".\")>-1){R=h;break}var B=a.length;if(R===a.length&&-1===_.indexOf(\"E\")){for(h=a.length-1;h>=0;--h)null!=a[h]&&-1!==\"n?(\".indexOf(a[h].t)&&(I>=a[h].v.length-1?a[h].v=_.substr(1+(I-=a[h].v.length),a[h].v.length):I<0?a[h].v=\"\":(a[h].v=_.substr(0,I+1),I=-1),a[h].t=\"t\",B=h);I>=0&&B<a.length&&(a[B].v=_.substr(0,I+1)+a[B].v)}else if(R!==a.length&&-1===_.indexOf(\"E\")){for(I=_.indexOf(\".\")-1,h=R;h>=0;--h)if(null!=a[h]&&-1!==\"n?(\".indexOf(a[h].t)){for(s=a[h].v.indexOf(\".\")>-1&&h===R?a[h].v.indexOf(\".\")-1:a[h].v.length-1,T=a[h].v.substr(s+1);s>=0;--s)I>=0&&(\"0\"===a[h].v.charAt(s)||\"#\"===a[h].v.charAt(s))&&(T=_.charAt(I--)+T);a[h].v=T,a[h].t=\"t\",B=h}for(I>=0&&B<a.length&&(a[B].v=_.substr(0,I+1)+a[B].v),I=_.indexOf(\".\")+1,h=R;h<a.length;++h)if(null!=a[h]&&(-1!==\"n?(\".indexOf(a[h].t)||h===R)){for(s=a[h].v.indexOf(\".\")>-1&&h===R?a[h].v.indexOf(\".\")+1:0,T=a[h].v.substr(0,s);s<a[h].v.length;++s)I<_.length&&(T+=_.charAt(I++));a[h].v=T,a[h].t=\"t\",B=h}}}for(h=0;h<a.length;++h)null!=a[h]&&\"n(?\".indexOf(a[h].t)>-1&&(a[h].v=S(a[h].t,a[h].v,x=r>1&&t<0&&h>0&&\"-\"===a[h-1].v?-t:t),a[h].t=\"t\");var O=\"\";for(h=0;h!==a.length;++h)null!=a[h]&&(O+=a[h].v);return O}e.is_date=k,e._eval=_;var T=/\\[[=<>]/,R=/\\[(=|>[=]?|<[>=]?)(-?\\d+(?:\\.\\d*)?)\\]/;function B(e,t){if(null==t)return!1;var n=parseFloat(t[2]);switch(t[1]){case\"=\":if(e==n)return!0;break;case\">\":if(e>n)return!0;break;case\"<\":if(e<n)return!0;break;case\"<>\":if(e!=n)return!0;break;case\">=\":if(e>=n)return!0;break;case\"<=\":if(e<=n)return!0}return!1}function O(e,t,n){null==n&&(n={});var r=\"\";switch(typeof e){case\"string\":r=\"m/d/yy\"==e&&n.dateNF?n.dateNF:e;break;case\"number\":r=14==e&&n.dateNF?n.dateNF:(null!=n.table?n.table:u)[e]}if(c(r,0))return A(t,n);t instanceof Date&&(t=b(t,n.date1904));var i=function(e,t){var n=x(e),r=n.length,i=n[r-1].indexOf(\"@\");if(r<4&&i>-1&&--r,n.length>4)throw new Error(\"cannot find right format for |\"+n.join(\"|\")+\"|\");if(\"number\"!=typeof t)return[4,4===n.length||i>-1?n[n.length-1]:\"@\"];switch(n.length){case 1:n=i>-1?[\"General\",\"General\",\"General\",n[0]]:[n[0],n[0],n[0],\"@\"];break;case 2:n=i>-1?[n[0],n[0],n[0],n[1]]:[n[0],n[1],n[0],\"@\"];break;case 3:n=i>-1?[n[0],n[1],n[0],n[2]]:[n[0],n[1],n[2],\"@\"]}var s=t>0?n[0]:t<0?n[1]:n[2];if(-1===n[0].indexOf(\"[\")&&-1===n[1].indexOf(\"[\"))return[r,s];if(null!=n[0].match(T)||null!=n[1].match(T)){var o=n[0].match(R),a=n[1].match(R);return B(t,o)?[r,n[0]]:B(t,a)?[r,n[1]]:[r,n[null!=o&&null!=a?2:1]]}return[r,s]}(r,t);if(c(i[1]))return A(t,n);if(!0===t)t=\"TRUE\";else if(!1===t)t=\"FALSE\";else if(\"\"===t||null==t)return\"\";return _(i[1],t,n,i[0])}function L(e,t){if(\"number\"!=typeof t){t=+t||-1;for(var n=0;n<392;++n)if(null!=u[n]){if(u[n]==e){t=n;break}}else t<0&&(t=n);t<0&&(t=391)}return u[t]=e,t}e.load=L,e._table=u,e.get_table=function(){return u},e.load_table=function(e){for(var t=0;392!=t;++t)void 0!==e[t]&&L(e[t],t)},e.init_table=d,e.format=O};R(T);var B,O={\"General Number\":\"General\",\"General Date\":T._table[22],\"Long Date\":\"dddd, mmmm dd, yyyy\",\"Medium Date\":T._table[15],\"Short Date\":T._table[14],\"Long Time\":T._table[19],\"Medium Time\":T._table[18],\"Short Time\":T._table[20],Currency:'\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',Fixed:T._table[2],Standard:T._table[4],Percent:T._table[10],Scientific:T._table[11],\"Yes/No\":'\"Yes\";\"Yes\";\"No\";@',\"True/False\":'\"True\";\"True\";\"False\";@',\"On/Off\":'\"Yes\";\"Yes\";\"No\";@'},L={5:'\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',6:'\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',7:'\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',8:'\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',23:\"General\",24:\"General\",25:\"General\",26:\"General\",27:\"m/d/yy\",28:\"m/d/yy\",29:\"m/d/yy\",30:\"m/d/yy\",31:\"m/d/yy\",32:\"h:mm:ss\",33:\"h:mm:ss\",34:\"h:mm:ss\",35:\"h:mm:ss\",36:\"m/d/yy\",41:'_(* #,##0_);_(* (#,##0);_(* \"-\"_);_(@_)',42:'_(\"$\"* #,##0_);_(\"$\"* (#,##0);_(\"$\"* \"-\"_);_(@_)',43:'_(* #,##0.00_);_(* (#,##0.00);_(* \"-\"??_);_(@_)',44:'_(\"$\"* #,##0.00_);_(\"$\"* (#,##0.00);_(\"$\"* \"-\"??_);_(@_)',50:\"m/d/yy\",51:\"m/d/yy\",52:\"m/d/yy\",53:\"m/d/yy\",54:\"m/d/yy\",55:\"m/d/yy\",56:\"m/d/yy\",57:\"m/d/yy\",58:\"m/d/yy\",59:\"0\",60:\"0.00\",61:\"#,##0\",62:\"#,##0.00\",63:'\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',64:'\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',65:'\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',66:'\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',67:\"0%\",68:\"0.00%\",69:\"# ?/?\",70:\"# ??/??\",71:\"m/d/yy\",72:\"m/d/yy\",73:\"d-mmm-yy\",74:\"d-mmm\",75:\"mmm-yy\",76:\"h:mm\",77:\"h:mm:ss\",78:\"m/d/yy h:mm\",79:\"mm:ss\",80:\"[h]:mm:ss\",81:\"mmss.0\"},P=/[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;!function(e){e.version=\"1.2.0\";var t=function(){for(var e=0,t=new Array(256),n=0;256!=n;++n)t[n]=e=1&(e=1&(e=1&(e=1&(e=1&(e=1&(e=1&(e=1&(e=n)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1;return\"undefined\"!=typeof Int32Array?new Int32Array(t):t}();e.table=t,e.bstr=function(e,n){for(var r=-1^n,i=e.length-1,s=0;s<i;)r=(r=r>>>8^t[255&(r^e.charCodeAt(s++))])>>>8^t[255&(r^e.charCodeAt(s++))];return s===i&&(r=r>>>8^t[255&(r^e.charCodeAt(s))]),-1^r},e.buf=function(e,n){if(e.length>1e4)return function(e,n){for(var r=-1^n,i=e.length-7,s=0;s<i;)r=(r=(r=(r=(r=(r=(r=(r=r>>>8^t[255&(r^e[s++])])>>>8^t[255&(r^e[s++])])>>>8^t[255&(r^e[s++])])>>>8^t[255&(r^e[s++])])>>>8^t[255&(r^e[s++])])>>>8^t[255&(r^e[s++])])>>>8^t[255&(r^e[s++])])>>>8^t[255&(r^e[s++])];for(;s<i+7;)r=r>>>8^t[255&(r^e[s++])];return-1^r}(e,n);for(var r=-1^n,i=e.length-3,s=0;s<i;)r=(r=(r=(r=r>>>8^t[255&(r^e[s++])])>>>8^t[255&(r^e[s++])])>>>8^t[255&(r^e[s++])])>>>8^t[255&(r^e[s++])];for(;s<i+3;)r=r>>>8^t[255&(r^e[s++])];return-1^r},e.str=function(e,n){for(var r,i,s=-1^n,o=0,a=e.length;o<a;)(r=e.charCodeAt(o++))<128?s=s>>>8^t[255&(s^r)]:r<2048?s=(s=s>>>8^t[255&(s^(192|r>>6&31))])>>>8^t[255&(s^(128|63&r))]:r>=55296&&r<57344?(r=64+(1023&r),i=1023&e.charCodeAt(o++),s=(s=(s=(s=s>>>8^t[255&(s^(240|r>>8&7))])>>>8^t[255&(s^(128|r>>2&63))])>>>8^t[255&(s^(128|i>>6&15|(3&r)<<4))])>>>8^t[255&(s^(128|63&i))]):s=(s=(s=s>>>8^t[255&(s^(224|r>>12&15))])>>>8^t[255&(s^(128|r>>6&63))])>>>8^t[255&(s^(128|63&r))];return-1^s}}(B={});var F,N=function(){var e,t={};function r(e){if(\"/\"==e.charAt(e.length-1))return-1===e.slice(0,-1).indexOf(\"/\")?e:r(e.slice(0,-1));var t=e.lastIndexOf(\"/\");return-1===t?e:e.slice(0,t+1)}function i(e){if(\"/\"==e.charAt(e.length-1))return i(e.slice(0,-1));var t=e.lastIndexOf(\"/\");return-1===t?e:e.slice(t+1)}function s(e,t){\"string\"==typeof t&&(t=new Date(t));var n=t.getHours();n=(n=n<<6|t.getMinutes())<<5|t.getSeconds()>>>1,e.write_shift(2,n);var r=t.getFullYear()-1980;r=(r=r<<4|t.getMonth()+1)<<5|t.getDate(),e.write_shift(2,r)}function o(e){Bt(e,0);for(var t={},n=0;e.l<=e.length-4;){var r=e.read_shift(2),i=e.read_shift(2),s=e.l+i,o={};switch(r){case 21589:1&(n=e.read_shift(1))&&(o.mtime=e.read_shift(4)),i>5&&(2&n&&(o.atime=e.read_shift(4)),4&n&&(o.ctime=e.read_shift(4))),o.mtime&&(o.mt=new Date(1e3*o.mtime))}e.l=s,t[r]=o}return t}function a(){return e||(e=n(3))}function c(e,t){if(80==e[0]&&75==e[1])return he(e,t);if(e.length<512)throw new Error(\"CFB file size \"+e.length+\" < 512\");var n,r,i,s,o,a,c=512,u=[],f=e.slice(0,512);Bt(f,0);var g=function(e){if(80==e[e.l]&&75==e[e.l+1])return[0,0];e.chk(w,\"Header Signature: \"),e.l+=16;var t=e.read_shift(2,\"u\");return[e.read_shift(2,\"u\"),t]}(f);switch(n=g[0]){case 3:c=512;break;case 4:c=4096;break;case 0:if(0==g[1])return he(e,t);default:throw new Error(\"Major Version: Expected 3 or 4 saw \"+n)}512!==c&&Bt(f=e.slice(0,c),28);var p=e.slice(0,c);!function(e,t){var n;switch(e.l+=2,n=e.read_shift(2)){case 9:if(3!=t)throw new Error(\"Sector Shift: Expected 9 saw \"+n);break;case 12:if(4!=t)throw new Error(\"Sector Shift: Expected 12 saw \"+n);break;default:throw new Error(\"Sector Shift: Expected 9 or 12 saw \"+n)}e.chk(\"0600\",\"Mini Sector Shift: \"),e.chk(\"000000000000\",\"Reserved: \")}(f,n);var m=f.read_shift(4,\"i\");if(3===n&&0!==m)throw new Error(\"# Directory Sectors: Expected 0 saw \"+m);f.l+=4,s=f.read_shift(4,\"i\"),f.l+=4,f.chk(\"00100000\",\"Mini Stream Cutoff Size: \"),o=f.read_shift(4,\"i\"),r=f.read_shift(4,\"i\"),a=f.read_shift(4,\"i\"),i=f.read_shift(4,\"i\");for(var C=-1,b=0;b<109&&!((C=f.read_shift(4,\"i\"))<0);++b)u[b]=C;var I=function(e,t){for(var n=Math.ceil(e.length/t)-1,r=[],i=1;i<n;++i)r[i-1]=e.slice(i*t,(i+1)*t);return r[n-1]=e.slice(n*t),r}(e,c);!function e(t,n,r,i,s){var o=v;if(t===v){if(0!==n)throw new Error(\"DIFAT chain shorter than expected\")}else if(-1!==t){var a=r[t],c=(i>>>2)-1;if(!a)return;for(var l=0;l<c&&(o=xt(a,4*l))!==v;++l)s.push(o);e(xt(a,i-4),n-1,r,i,s)}}(a,i,I,c,u);var A=function(e,t,n,r){var i=e.length,s=[],o=[],a=[],c=[],l=r-1,h=0,d=0,u=0,f=0;for(h=0;h<i;++h)if(a=[],(u=h+t)>=i&&(u-=i),!o[u]){for(c=[],d=u;d>=0;){o[d]=!0,a[a.length]=d,c.push(e[d]);var g=n[Math.floor(4*d/r)];if(r<4+(f=4*d&l))throw new Error(\"FAT boundary crossed: \"+d+\" 4 \"+r);if(!e[g])break;d=xt(e[g],f)}s[u]={nodes:a,data:nt([c])}}return s}(I,s,u,c);A[s].name=\"!Directory\",r>0&&o!==v&&(A[o].name=\"!MiniFAT\"),A[u[0]].name=\"!FAT\",A.fat_addrs=u,A.ssz=c;var y=[],S=[],x=[];!function(e,t,n,r,i,s,o,a){for(var c,u=0,f=r.length?2:0,g=t[e].data,p=0,m=0;p<g.length;p+=128){var C=g.slice(p,p+128);Bt(C,64),m=C.read_shift(2),c=it(C,0,m-f),r.push(c);var b={name:c,type:C.read_shift(1),color:C.read_shift(1),L:C.read_shift(4,\"i\"),R:C.read_shift(4,\"i\"),C:C.read_shift(4,\"i\"),clsid:C.read_shift(16),state:C.read_shift(4,\"i\"),start:0,size:0};0!==C.read_shift(2)+C.read_shift(2)+C.read_shift(2)+C.read_shift(2)&&(b.ct=d(C,C.l-8)),0!==C.read_shift(2)+C.read_shift(2)+C.read_shift(2)+C.read_shift(2)&&(b.mt=d(C,C.l-8)),b.start=C.read_shift(4,\"i\"),b.size=C.read_shift(4,\"i\"),b.size<0&&b.start<0&&(b.size=b.type=0,b.start=v,b.name=\"\"),5===b.type?(u=b.start,i>0&&u!==v&&(t[u].name=\"!StreamData\")):b.size>=4096?(b.storage=\"fat\",void 0===t[b.start]&&(t[b.start]=h(n,b.start,t.fat_addrs,t.ssz)),t[b.start].name=b.name,b.content=t[b.start].data.slice(0,b.size)):(b.storage=\"minifat\",b.size<0?b.size=0:u!==v&&b.start!==v&&t[u]&&(b.content=l(b,t[u].data,(t[a]||{}).data))),b.content&&Bt(b.content,0),s[c]=b,o.push(b)}}(s,A,I,y,r,{},S,o),function(e,t,n){for(var r=0,i=0,s=0,o=0,a=0,c=n.length,l=[],h=[];r<c;++r)l[r]=h[r]=r,t[r]=n[r];for(;a<h.length;++a)i=e[r=h[a]].L,s=e[r].R,o=e[r].C,l[r]===r&&(-1!==i&&l[i]!==i&&(l[r]=l[i]),-1!==s&&l[s]!==s&&(l[r]=l[s])),-1!==o&&(l[o]=r),-1!==i&&r!=l[r]&&(l[i]=l[r],h.lastIndexOf(i)<a&&h.push(i)),-1!==s&&r!=l[r]&&(l[s]=l[r],h.lastIndexOf(s)<a&&h.push(s));for(r=1;r<c;++r)l[r]===r&&(-1!==s&&l[s]!==s?l[r]=l[s]:-1!==i&&l[i]!==i&&(l[r]=l[i]));for(r=1;r<c;++r)if(0!==e[r].type){if((a=r)!=l[a])do{t[r]=t[a=l[a]]+\"/\"+t[r]}while(0!==a&&-1!==l[a]&&a!=l[a]);l[r]=-1}for(t[0]+=\"/\",r=1;r<c;++r)2!==e[r].type&&(t[r]+=\"/\")}(S,x,y),y.shift();var E={FileIndex:S,FullPaths:x};return t&&t.raw&&(E.raw={header:p,sectors:I}),E}function l(e,t,n){for(var r=e.size,i=[],s=e.start;n&&r>0&&s>=0;)i.push(t.slice(s*b,s*b+b)),r-=b,s=xt(n,4*s);return 0===i.length?Lt(0):E(i).slice(0,e.size)}function h(e,t,n,r,i){var s=[],o=[];i||(i=[]);var a=r-1,c=0,l=0;for(c=t;c>=0;){i[c]=!0,s[s.length]=c,o.push(e[c]);var h=n[Math.floor(4*c/r)];if(r<4+(l=4*c&a))throw new Error(\"FAT boundary crossed: \"+c+\" 4 \"+r);if(!e[h])break;c=xt(e[h],l)}return{nodes:s,data:nt([o])}}function d(e,t){return new Date(1e3*(St(e,t+4)/1e7*Math.pow(2,32)+St(e,t)/1e7-11644473600))}function u(e,t){var n=t||{},r=n.root||\"Root Entry\";if(e.FullPaths||(e.FullPaths=[]),e.FileIndex||(e.FileIndex=[]),e.FullPaths.length!==e.FileIndex.length)throw new Error(\"inconsistent CFB structure\");0===e.FullPaths.length&&(e.FullPaths[0]=r+\"/\",e.FileIndex[0]={name:r,type:5}),n.CLSID&&(e.FileIndex[0].clsid=n.CLSID),function(e){var t=\"\\x01Sh33tJ5\";if(!N.find(e,\"/\"+t)){var n=Lt(4);n[0]=55,n[1]=n[3]=50,n[2]=54,e.FileIndex.push({name:t,type:2,content:n,size:4,L:69,R:69,C:69}),e.FullPaths.push(e.FullPaths[0]+t),f(e)}}(e)}function f(e,t){u(e);for(var n=!1,s=!1,o=e.FullPaths.length-1;o>=0;--o){var a=e.FileIndex[o];switch(a.type){case 0:s?n=!0:(e.FileIndex.pop(),e.FullPaths.pop());break;case 1:case 2:case 5:s=!0,isNaN(a.R*a.L*a.C)&&(n=!0),a.R>-1&&a.L>-1&&a.R==a.L&&(n=!0);break;default:n=!0}}if(n||t){var c=new Date(1987,1,19),l=0,h=[];for(o=0;o<e.FullPaths.length;++o)0!==e.FileIndex[o].type&&h.push([e.FullPaths[o],e.FileIndex[o]]);for(o=0;o<h.length;++o){var d=r(h[o][0]);for(s=!1,l=0;l<h.length;++l)h[l][0]===d&&(s=!0);s||h.push([d,{name:i(d).replace(\"/\",\"\"),type:1,clsid:x,ct:c,mt:c,content:null}])}for(h.sort((function(e,t){return function(e,t){for(var n=e.split(\"/\"),r=t.split(\"/\"),i=0,s=0,o=Math.min(n.length,r.length);i<o;++i){if(s=n[i].length-r[i].length)return s;if(n[i]!=r[i])return n[i]<r[i]?-1:1}return n.length-r.length}(e[0],t[0])})),e.FullPaths=[],e.FileIndex=[],o=0;o<h.length;++o)e.FullPaths[o]=h[o][0],e.FileIndex[o]=h[o][1];for(o=0;o<h.length;++o){var f=e.FileIndex[o],g=e.FullPaths[o];if(f.name=i(g).replace(\"/\",\"\"),f.L=f.R=f.C=-(f.color=1),f.size=f.content?f.content.length:0,f.start=0,f.clsid=f.clsid||x,0===o)f.C=h.length>1?1:-1,f.size=0,f.type=5;else if(\"/\"==g.slice(-1)){for(l=o+1;l<h.length&&r(e.FullPaths[l])!=g;++l);for(f.C=l>=h.length?-1:l,l=o+1;l<h.length&&r(e.FullPaths[l])!=r(g);++l);f.R=l>=h.length?-1:l,f.type=1}else r(e.FullPaths[o+1]||\"\")==r(g)&&(f.R=o+1),f.type=2}}}function g(e,t){var n=t||{};if(f(e),\"zip\"==n.fileType)return function(e,t){var n=t||{},r=[],i=[],o=Lt(1),a=n.compression?8:0,c=0,l=0,h=0,d=0,u=e.FullPaths[0],f=u,g=e.FileIndex[0],p=[],m=0;for(c=1;c<e.FullPaths.length;++c)if(f=e.FullPaths[c].slice(u.length),(g=e.FileIndex[c]).size&&g.content&&\"\\x01Sh33tJ5\"!=f){var C=h,b=Lt(f.length);for(l=0;l<f.length;++l)b.write_shift(1,127&f.charCodeAt(l));b=b.slice(0,b.l),p[d]=B.buf(g.content,0);var v=g.content;8==a&&(v=O(v)),(o=Lt(30)).write_shift(4,67324752),o.write_shift(2,20),o.write_shift(2,0),o.write_shift(2,a),g.mt?s(o,g.mt):o.write_shift(4,0),o.write_shift(-4,p[d]),o.write_shift(4,v.length),o.write_shift(4,g.content.length),o.write_shift(2,b.length),o.write_shift(2,0),h+=o.length,r.push(o),h+=b.length,r.push(b),h+=v.length,r.push(v),(o=Lt(46)).write_shift(4,33639248),o.write_shift(2,0),o.write_shift(2,20),o.write_shift(2,0),o.write_shift(2,a),o.write_shift(4,0),o.write_shift(-4,p[d]),o.write_shift(4,v.length),o.write_shift(4,g.content.length),o.write_shift(2,b.length),o.write_shift(2,0),o.write_shift(2,0),o.write_shift(2,0),o.write_shift(2,0),o.write_shift(4,0),o.write_shift(4,C),m+=o.l,i.push(o),m+=b.length,i.push(b),++d}return(o=Lt(22)).write_shift(4,101010256),o.write_shift(2,0),o.write_shift(2,0),o.write_shift(2,d),o.write_shift(2,d),o.write_shift(4,m),o.write_shift(4,h),o.write_shift(2,0),E([E(r),E(i),o])}(e,n);var r=function(e){for(var t=0,n=0,r=0;r<e.FileIndex.length;++r){var i=e.FileIndex[r];if(i.content){var s=i.content.length;s>0&&(s<4096?t+=s+63>>6:n+=s+511>>9)}}for(var o=e.FullPaths.length+3>>2,a=t+127>>7,c=(t+7>>3)+n+o+a,l=c+127>>7,h=l<=109?0:Math.ceil((l-109)/127);c+l+h+127>>7>l;)h=++l<=109?0:Math.ceil((l-109)/127);var d=[1,h,l,a,o,n,t,0];return e.FileIndex[0].size=t<<6,d[7]=(e.FileIndex[0].start=d[0]+d[1]+d[2]+d[3]+d[4]+d[5])+(d[6]+7>>3),d}(e),i=Lt(r[7]<<9),o=0,a=0;for(o=0;o<8;++o)i.write_shift(1,S[o]);for(o=0;o<8;++o)i.write_shift(2,0);for(i.write_shift(2,62),i.write_shift(2,3),i.write_shift(2,65534),i.write_shift(2,9),i.write_shift(2,6),o=0;o<3;++o)i.write_shift(2,0);for(i.write_shift(4,0),i.write_shift(4,r[2]),i.write_shift(4,r[0]+r[1]+r[2]+r[3]-1),i.write_shift(4,0),i.write_shift(4,4096),i.write_shift(4,r[3]?r[0]+r[1]+r[2]-1:v),i.write_shift(4,r[3]),i.write_shift(-4,r[1]?r[0]-1:v),i.write_shift(4,r[1]),o=0;o<109;++o)i.write_shift(-4,o<r[2]?r[1]+o:-1);if(r[1])for(a=0;a<r[1];++a){for(;o<236+127*a;++o)i.write_shift(-4,o<r[2]?r[1]+o:-1);i.write_shift(-4,a===r[1]-1?v:a+1)}var c=function(e){for(a+=e;o<a-1;++o)i.write_shift(-4,o+1);e&&(++o,i.write_shift(-4,v))};for(a=o=0,a+=r[1];o<a;++o)i.write_shift(-4,T.DIFSECT);for(a+=r[2];o<a;++o)i.write_shift(-4,T.FATSECT);c(r[3]),c(r[4]);for(var l=0,h=0,d=e.FileIndex[0];l<e.FileIndex.length;++l)(d=e.FileIndex[l]).content&&((h=d.content.length)<4096||(d.start=a,c(h+511>>9)));for(c(r[6]+7>>3);511&i.l;)i.write_shift(-4,T.ENDOFCHAIN);for(a=o=0,l=0;l<e.FileIndex.length;++l)(d=e.FileIndex[l]).content&&(!(h=d.content.length)||h>=4096||(d.start=a,c(h+63>>6)));for(;511&i.l;)i.write_shift(-4,T.ENDOFCHAIN);for(o=0;o<r[4]<<2;++o){var u=e.FullPaths[o];if(u&&0!==u.length){d=e.FileIndex[o],0===o&&(d.start=d.size?d.start-1:v);var g=0===o&&n.root||d.name;if(h=2*(g.length+1),i.write_shift(64,g,\"utf16le\"),i.write_shift(2,h),i.write_shift(1,d.type),i.write_shift(1,d.color),i.write_shift(-4,d.L),i.write_shift(-4,d.R),i.write_shift(-4,d.C),d.clsid)i.write_shift(16,d.clsid,\"hex\");else for(l=0;l<4;++l)i.write_shift(4,0);i.write_shift(4,d.state||0),i.write_shift(4,0),i.write_shift(4,0),i.write_shift(4,0),i.write_shift(4,0),i.write_shift(4,d.start),i.write_shift(4,d.size),i.write_shift(4,0)}else{for(l=0;l<17;++l)i.write_shift(4,0);for(l=0;l<3;++l)i.write_shift(4,-1);for(l=0;l<12;++l)i.write_shift(4,0)}}for(o=1;o<e.FileIndex.length;++o)if((d=e.FileIndex[o]).size>=4096){for(i.l=d.start+1<<9,l=0;l<d.size;++l)i.write_shift(1,d.content[l]);for(;511&l;++l)i.write_shift(1,0)}for(o=1;o<e.FileIndex.length;++o)if((d=e.FileIndex[o]).size>0&&d.size<4096){for(l=0;l<d.size;++l)i.write_shift(1,d.content[l]);for(;63&l;++l)i.write_shift(1,0)}for(;i.l<i.length;)i.write_shift(1,0);return i}t.version=\"1.1.2\";var p,b=64,v=-2,w=\"d0cf11e0a1b11ae1\",S=[208,207,17,224,161,177,26,225],x=\"00000000000000000000000000000000\",T={MAXREGSECT:-6,DIFSECT:-4,FATSECT:-3,ENDOFCHAIN:v,FREESECT:-1,HEADER_SIGNATURE:w,HEADER_MINOR_VERSION:\"3e00\",MAXREGSID:-6,NOSTREAM:-1,HEADER_CLSID:x,EntryTypes:[\"unknown\",\"storage\",\"stream\",\"lockbytes\",\"property\",\"root\"]};function R(e){for(var t=new Array(e.length),n=0;n<e.length;++n)t[n]=String.fromCharCode(e[n]);return t.join(\"\")}function O(e){return p?p.deflateRawSync(e):J(e)}for(var L,P,F=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],M=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258],D=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],$=\"undefined\"!=typeof Uint8Array,W=$?new Uint8Array(256):[],H=0;H<256;++H)W[H]=255&((P=139536&((L=H)<<1|L<<11)|558144&(L<<5|L<<15))>>16|P>>8|P);function G(e,t){var n=W[255&e];return t<=8?n>>>8-t:(n=n<<8|W[e>>8&255],t<=16?n>>>16-t:(n=n<<8|W[e>>16&255])>>>24-t)}function V(e,t){var n=7&t,r=t>>>3;return(e[r]|(n<=6?0:e[r+1]<<8))>>>n&3}function j(e,t){var n=7&t,r=t>>>3;return(e[r]|(n<=5?0:e[r+1]<<8))>>>n&7}function Z(e,t){var n=7&t,r=t>>>3;return(e[r]|(n<=3?0:e[r+1]<<8))>>>n&31}function z(e,t){var n=7&t,r=t>>>3;return(e[r]|(n<=1?0:e[r+1]<<8))>>>n&127}function K(e,t,n){var r=7&t,i=t>>>3,s=(1<<n)-1,o=e[i]>>>r;return n<8-r?o&s:(o|=e[i+1]<<8-r,n<16-r?o&s:(o|=e[i+2]<<16-r,n<24-r?o&s:(o|=e[i+3]<<24-r)&s))}function X(e,t){var n=e.length,r=2*n>t?2*n:t+5,i=0;if(n>=t)return e;if(C){var s=A(r);if(e.copy)e.copy(s);else for(;i<e.length;++i)s[i]=e[i];return s}if($){var o=new Uint8Array(r);if(o.set)o.set(e);else for(;i<e.length;++i)o[i]=e[i];return o}return e.length=r,e}function U(e){for(var t=new Array(e),n=0;n<e;++n)t[n]=0;return t}var Y,J=(Y=function(e,t){for(var n=0;n<e.length;){var r=Math.min(65535,e.length-n);for(t.write_shift(1,+(n+r==e.length)),t.write_shift(2,r),t.write_shift(2,65535&~r);r-- >0;)t[t.l++]=e[n++]}return t.l},function(e){var t=Lt(50+Math.floor(1.1*e.length)),n=Y(e,t);return t.slice(0,n)});function Q(e,t,n){var r=1,i=0,s=0,o=0,a=0,c=e.length,l=$?new Uint16Array(32):U(32);for(s=0;s<32;++s)l[s]=0;for(s=c;s<n;++s)e[s]=0;c=e.length;var h=$?new Uint16Array(c):U(c);for(s=0;s<c;++s)l[i=e[s]]++,r<i&&(r=i),h[s]=0;for(l[0]=0,s=1;s<=r;++s)l[s+16]=a=a+l[s-1]<<1;for(s=0;s<c;++s)0!=(a=e[s])&&(h[s]=l[a+16]++);var d=0;for(s=0;s<c;++s)if(0!=(d=e[s]))for(a=G(h[s],r)>>r-d,o=(1<<r+4-d)-1;o>=0;--o)t[a|o<<d]=15&d|s<<4;return r}var q=$?new Uint16Array(512):U(512),ee=$?new Uint16Array(32):U(32);if(!$){for(var te=0;te<512;++te)q[te]=0;for(te=0;te<32;++te)ee[te]=0}!function(){for(var e=[],t=0;t<32;t++)e.push(5);Q(e,ee,32);var n=[];for(t=0;t<=143;t++)n.push(8);for(;t<=255;t++)n.push(9);for(;t<=279;t++)n.push(7);for(;t<=287;t++)n.push(8);Q(n,q,288)}();var ne=$?new Uint16Array(32768):U(32768),re=$?new Uint16Array(32768):U(32768),ie=$?new Uint16Array(128):U(128),se=1,oe=1;function ae(e,t){var n=Z(e,t)+257,r=Z(e,t+=5)+1,i=function(e,t){var n=7&t,r=t>>>3;return(e[r]|(n<=4?0:e[r+1]<<8))>>>n&15}(e,t+=5)+4;t+=4;for(var s=0,o=$?new Uint8Array(19):U(19),a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],c=1,l=$?new Uint8Array(8):U(8),h=$?new Uint8Array(8):U(8),d=o.length,u=0;u<i;++u)o[F[u]]=s=j(e,t),c<s&&(c=s),l[s]++,t+=3;var f=0;for(l[0]=0,u=1;u<=c;++u)h[u]=f=f+l[u-1]<<1;for(u=0;u<d;++u)0!=(f=o[u])&&(a[u]=h[f]++);var g=0;for(u=0;u<d;++u)if(0!=(g=o[u])){f=W[a[u]]>>8-g;for(var p=(1<<7-g)-1;p>=0;--p)ie[f|p<<g]=7&g|u<<3}var m=[];for(c=1;m.length<n+r;)switch(t+=7&(f=ie[z(e,t)]),f>>>=3){case 16:for(s=3+V(e,t),t+=2,f=m[m.length-1];s-- >0;)m.push(f);break;case 17:for(s=3+j(e,t),t+=3;s-- >0;)m.push(0);break;case 18:for(s=11+z(e,t),t+=7;s-- >0;)m.push(0);break;default:m.push(f),c<f&&(c=f)}var C=m.slice(0,n),b=m.slice(n);for(u=n;u<286;++u)C[u]=0;for(u=r;u<30;++u)b[u]=0;return se=Q(C,ne,286),oe=Q(b,re,30),t}function ce(e,t){var n=function(e,t){if(3==e[0]&&!(3&e[1]))return[I(t),2];for(var n=0,r=0,i=A(t||1<<18),s=0,o=i.length>>>0,a=0,c=0;0==(1&r);)if(r=j(e,n),n+=3,r>>>1!=0)for(r>>>1==1?(a=9,c=5):(n=ae(e,n),a=se,c=oe),!t&&o<s+32767&&(o=(i=X(i,s+32767)).length);;){var l=K(e,n,a),h=r>>>1==1?q[l]:ne[l];if(n+=15&h,0==((h>>>=4)>>>8&255))i[s++]=h;else{if(256==h)break;var d=(h-=257)<8?0:h-4>>2;d>5&&(d=0);var u=s+M[h];d>0&&(u+=K(e,n,d),n+=d),l=K(e,n,c),n+=15&(h=r>>>1==1?ee[l]:re[l]);var f=(h>>>=4)<4?0:h-2>>1,g=D[h];for(f>0&&(g+=K(e,n,f),n+=f),!t&&o<u&&(o=(i=X(i,u)).length);s<u;)i[s]=i[s-g],++s}}else{7&n&&(n+=8-(7&n));var p=e[n>>>3]|e[1+(n>>>3)]<<8;if(n+=32,!t&&o<s+p&&(o=(i=X(i,s+p)).length),\"function\"==typeof e.copy)e.copy(i,s,n>>>3,(n>>>3)+p),s+=p,n+=8*p;else for(;p-- >0;)i[s++]=e[n>>>3],n+=8}return[t?i:i.slice(0,s),n+7>>>3]}(e.slice(e.l||0),t);return e.l+=n[1],n[0]}function le(e,t){if(!e)throw new Error(t);\"undefined\"!=typeof console&&console.error(t)}function he(e,t){var n=e;Bt(n,0);var r={FileIndex:[],FullPaths:[]};u(r,{root:t.root});for(var i=n.length-4;(80!=n[i]||75!=n[i+1]||5!=n[i+2]||6!=n[i+3])&&i>=0;)--i;n.l=i+4,n.l+=4;var s=n.read_shift(2);n.l+=6;var a=n.read_shift(4);for(n.l=a,i=0;i<s;++i){n.l+=20;var c=n.read_shift(4),l=n.read_shift(4),h=n.read_shift(2),d=n.read_shift(2),f=n.read_shift(2);n.l+=8;var g=n.read_shift(4),p=o(n.slice(n.l+h,n.l+h+d));n.l+=h+d+f;var m=n.l;n.l=g+4,de(n,c,l,r,p),n.l=m}return r}function de(e,t,n,r,i){e.l+=2;var s=e.read_shift(2),a=e.read_shift(2),c=function(e){var t=65535&e.read_shift(2),n=65535&e.read_shift(2),r=new Date,i=31&n,s=15&(n>>>=5);n>>>=4,r.setMilliseconds(0),r.setFullYear(n+1980),r.setMonth(s-1),r.setDate(i);var o=31&t,a=63&(t>>>=5);return r.setHours(t>>>=6),r.setMinutes(a),r.setSeconds(o<<1),r}(e);if(8257&s)throw new Error(\"Unsupported ZIP encryption\");for(var l=e.read_shift(4),h=e.read_shift(4),d=e.read_shift(4),u=e.read_shift(2),f=e.read_shift(2),g=\"\",m=0;m<u;++m)g+=String.fromCharCode(e[e.l++]);if(f){var C=o(e.slice(e.l,e.l+f));(C[21589]||{}).mt&&(c=C[21589].mt),((i||{})[21589]||{}).mt&&(c=i[21589].mt)}e.l+=f;var b=e.slice(e.l,e.l+h);switch(a){case 8:b=function(e,t){if(!p)return ce(e,t);var n=new(0,p.InflateRaw),r=n._processChunk(e.slice(e.l),n._finishFlushFlag);return e.l+=n.bytesRead,r}(e,d);break;case 0:break;default:throw new Error(\"Unsupported ZIP Compression method \"+a)}var v=!1;8&s&&(134695760==(l=e.read_shift(4))&&(l=e.read_shift(4),v=!0),h=e.read_shift(4),d=e.read_shift(4)),h!=t&&le(v,\"Bad compressed size: \"+t+\" != \"+h),d!=n&&le(v,\"Bad uncompressed size: \"+n+\" != \"+d);var I=B.buf(b,0);l!=I&&le(v,\"Bad CRC32 checksum: \"+l+\" != \"+I),ue(r,g,b,{unsafe:!0,mt:c})}function ue(e,t,n,r){var s=r&&r.unsafe;s||u(e);var o=!s&&N.find(e,t);if(!o){var a=e.FullPaths[0];t.slice(0,a.length)==a?a=t:(\"/\"!=a.slice(-1)&&(a+=\"/\"),a=(a+t).replace(\"//\",\"/\")),o={name:i(t),type:2},e.FileIndex.push(o),e.FullPaths.push(a),s||N.utils.cfb_gc(e)}return o.content=n,o.size=n?n.length:0,r&&(r.CLSID&&(o.clsid=r.CLSID),r.mt&&(o.mt=r.mt),r.ct&&(o.ct=r.ct)),o}return t.find=function(e,t){var n=e.FullPaths.map((function(e){return e.toUpperCase()})),r=n.map((function(e){var t=e.split(\"/\");return t[t.length-(\"/\"==e.slice(-1)?2:1)]})),i=!1;47===t.charCodeAt(0)?(i=!0,t=n[0].slice(0,-1)+t):i=-1!==t.indexOf(\"/\");var s=t.toUpperCase(),o=!0===i?n.indexOf(s):r.indexOf(s);if(-1!==o)return e.FileIndex[o];var a=!s.match(_);for(s=s.replace(k,\"\"),a&&(s=s.replace(_,\"!\")),o=0;o<n.length;++o){if((a?n[o].replace(_,\"!\"):n[o]).replace(k,\"\")==s)return e.FileIndex[o];if((a?r[o].replace(_,\"!\"):r[o]).replace(k,\"\")==s)return e.FileIndex[o]}return null},t.read=function(t,n){switch(n&&n.type||\"base64\"){case\"file\":return function(t,n){return a(),c(e.readFileSync(t),n)}(t,n);case\"base64\":return c(y(m.decode(t)),n);case\"binary\":return c(y(t),n)}return c(t,n)},t.parse=c,t.write=function(t,n){var r=g(t,n);switch(n&&n.type){case\"file\":return a(),e.writeFileSync(n.filename,r),r;case\"binary\":return R(r);case\"base64\":return m.encode(R(r))}return r},t.writeFile=function(t,n,r){a();var i=g(t,r);e.writeFileSync(n,i)},t.utils={cfb_new:function(e){var t={};return u(t,e),t},cfb_add:ue,cfb_del:function(e,t){u(e);var n=N.find(e,t);if(n)for(var r=0;r<e.FileIndex.length;++r)if(e.FileIndex[r]==n)return e.FileIndex.splice(r,1),e.FullPaths.splice(r,1),!0;return!1},cfb_mov:function(e,t,n){u(e);var r=N.find(e,t);if(r)for(var s=0;s<e.FileIndex.length;++s)if(e.FileIndex[s]==r)return e.FileIndex[s].name=i(n),e.FullPaths[s]=n,!0;return!1},cfb_gc:function(e){f(e,!0)},ReadShift:kt,CheckField:Rt,prep_blob:Bt,bconcat:E,use_zlib:function(e){try{var t=new(0,e.InflateRaw);if(t._processChunk(new Uint8Array([3,0]),t._finishFlushFlag),!t.bytesRead)throw new Error(\"zlib does not expose bytesRead\");p=e}catch(El){console.error(\"cannot use native zlib: \"+(El.message||El))}},_deflateRaw:J,_inflateRaw:ce,consts:T},t}();try{F=n(3)}catch(El){}function M(e){return\"string\"==typeof e?w(e):Array.isArray(e)?function(e){if(\"undefined\"==typeof Uint8Array)throw new Error(\"Unsupported\");return new Uint8Array(e)}(e):e}function D(e,t,n){if(void 0!==F&&F.writeFileSync)return n?F.writeFileSync(e,t,n):F.writeFileSync(e,t);var r=\"utf8\"==n?Oe(t):t;if(\"undefined\"!=typeof IE_SaveFile)return IE_SaveFile(r,e);if(\"undefined\"!=typeof Blob){var i=new Blob([M(r)],{type:\"application/octet-stream\"});if(\"undefined\"!=typeof navigator&&navigator.msSaveBlob)return navigator.msSaveBlob(i,e);if(\"undefined\"!=typeof saveAs)return saveAs(i,e);if(\"undefined\"!=typeof URL&&\"undefined\"!=typeof document&&document.createElement&&URL.createObjectURL){var s=URL.createObjectURL(i);if(\"object\"==typeof chrome&&\"function\"==typeof(chrome.downloads||{}).download)return URL.revokeObjectURL&&\"undefined\"!=typeof setTimeout&&setTimeout((function(){URL.revokeObjectURL(s)}),6e4),chrome.downloads.download({url:s,filename:e,saveAs:!0});var o=document.createElement(\"a\");if(null!=o.download)return o.download=e,o.href=s,document.body.appendChild(o),o.click(),document.body.removeChild(o),URL.revokeObjectURL&&\"undefined\"!=typeof setTimeout&&setTimeout((function(){URL.revokeObjectURL(s)}),6e4),s}}if(\"undefined\"!=typeof $&&\"undefined\"!=typeof File&&\"undefined\"!=typeof Folder)try{var a=File(e);return a.open(\"w\"),a.encoding=\"binary\",Array.isArray(t)&&(t=S(t)),a.write(t),a.close(),t}catch(El){if(!El.message||!El.message.match(/onstruct/))throw El}throw new Error(\"cannot save file \"+e)}function W(e){for(var t=Object.keys(e),n=[],r=0;r<t.length;++r)e.hasOwnProperty(t[r])&&n.push(t[r]);return n}function H(e,t){for(var n=[],r=W(e),i=0;i!==r.length;++i)null==n[e[r[i]][t]]&&(n[e[r[i]][t]]=r[i]);return n}function G(e){for(var t=[],n=W(e),r=0;r!==n.length;++r)t[e[n[r]]]=n[r];return t}function V(e){for(var t=[],n=W(e),r=0;r!==n.length;++r)t[e[n[r]]]=parseInt(n[r],10);return t}var j=new Date(1899,11,30,0,0,0),Z=j.getTime()+6e4*((new Date).getTimezoneOffset()-j.getTimezoneOffset());function z(e,t){var n=e.getTime();return t&&(n-=1263168e5),(n-Z)/864e5}function K(e){var t=new Date;return t.setTime(24*e*60*60*1e3+Z),t}function X(e){var t=0,n=0,r=!1,i=e.match(/P([0-9\\.]+Y)?([0-9\\.]+M)?([0-9\\.]+D)?T([0-9\\.]+H)?([0-9\\.]+M)?([0-9\\.]+S)?/);if(!i)throw new Error(\"|\"+e+\"| is not an ISO8601 Duration\");for(var s=1;s!=i.length;++s)if(i[s]){switch(n=1,s>3&&(r=!0),i[s].slice(i[s].length-1)){case\"Y\":throw new Error(\"Unsupported ISO Duration Field: \"+i[s].slice(i[s].length-1));case\"D\":n*=24;case\"H\":n*=60;case\"M\":if(!r)throw new Error(\"Unsupported ISO Duration Field: M\");n*=60}t+=n*parseInt(i[s],10)}return t}var U=new Date(\"2017-02-19T19:06:09.000Z\");isNaN(U.getFullYear())&&(U=new Date(\"2/19/17\"));var Y=2017==U.getFullYear();function J(e,t){var n=new Date(e);if(Y)return t>0?n.setTime(n.getTime()+60*n.getTimezoneOffset()*1e3):t<0&&n.setTime(n.getTime()-60*n.getTimezoneOffset()*1e3),n;if(e instanceof Date)return e;if(1917==U.getFullYear()&&!isNaN(n.getFullYear())){var r=n.getFullYear();return e.indexOf(\"\"+r)>-1||n.setFullYear(n.getFullYear()+100),n}var i=e.match(/\\d+/g)||[\"2017\",\"2\",\"19\",\"0\",\"0\",\"0\"],s=new Date(+i[0],+i[1]-1,+i[2],+i[3]||0,+i[4]||0,+i[5]||0);return e.indexOf(\"Z\")>-1&&(s=new Date(s.getTime()-60*s.getTimezoneOffset()*1e3)),s}function Q(e){for(var t=\"\",n=0;n!=e.length;++n)t+=String.fromCharCode(e[n]);return t}function q(e){if(\"undefined\"!=typeof JSON&&!Array.isArray(e))return JSON.parse(JSON.stringify(e));if(\"object\"!=typeof e||null==e)return e;if(e instanceof Date)return new Date(e.getTime());var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=q(e[n]));return t}function ee(e,t){for(var n=\"\";n.length<t;)n+=e;return n}function te(e){var t=Number(e);if(!isNaN(t))return t;var n=1,r=e.replace(/([\\d]),([\\d])/g,\"$1$2\").replace(/[$]/g,\"\").replace(/[%]/g,(function(){return n*=100,\"\"}));return isNaN(t=Number(r))?(r=r.replace(/[(](.*)[)]/,(function(e,t){return n=-n,t})),isNaN(t=Number(r))?t:t/n):t/n}function ne(e){var t=new Date(e),n=new Date(NaN),r=t.getYear(),i=t.getMonth(),s=t.getDate();return isNaN(s)||r<0||r>8099?n:(i>0||s>1)&&101!=r||e.toLowerCase().match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/)?t:e.match(/[^-0-9:,\\/\\\\]/)?n:t}var re,ie=5==\"abacaba\".split(/(:?b)/i).length;function se(e){return e?e.data?u(e.data):e.asNodeBuffer&&C?u(e.asNodeBuffer().toString(\"binary\")):e.asBinary?u(e.asBinary()):e._data&&e._data.getContent?u(Q(Array.prototype.slice.call(e._data.getContent(),0))):null:null}function oe(e,t){for(var n=W(e.files),r=t.toLowerCase(),i=r.replace(/\\//g,\"\\\\\"),s=0;s<n.length;++s){var o=n[s].toLowerCase();if(r==o||i==o)return e.files[n[s]]}return null}function ae(e,t){var n=oe(e,t);if(null==n)throw new Error(\"Cannot find file \"+t+\" in zip\");return n}function ce(e,t,n){if(!n)return(r=ae(e,t))&&\".bin\"===r.name.slice(-4)?function(e){if(!e)return null;if(e.data)return d(e.data);if(e.asNodeBuffer&&C)return e.asNodeBuffer();if(e._data&&e._data.getContent){var t=e._data.getContent();return\"string\"==typeof t?d(t):Array.prototype.slice.call(t)}return null}(r):se(r);var r;if(!t)return null;try{return ce(e,t)}catch(El){return null}}function le(e,t,n){if(!n)return se(ae(e,t));if(!t)return null;try{return le(e,t)}catch(El){return null}}function he(e,t){var n=t.split(\"/\");\"/\"!=t.slice(-1)&&n.pop();for(var r=e.split(\"/\");0!==r.length;){var i=r.shift();\"..\"===i?n.pop():\".\"!==i&&n.push(i)}return n.join(\"/\")}\"undefined\"!=typeof JSZipSync&&(re=JSZipSync),e.exports&&void 0===re&&(re=n(\"FaQm\"));var de='<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\r\\n',ue=/([^\"\\s?>\\/]+)\\s*=\\s*((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:')|([^'\">\\s]+))/g,fe=/<[\\/\\?]?[a-zA-Z0-9:]+(?:\\s+[^\"\\s?>\\/]+\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^'\">\\s=]+))*\\s?[\\/\\?]?>/g;de.match(fe)||(fe=/<[^>]*>/g);var ge=/<\\w*:/,pe=/<(\\/?)\\w+:/;function me(e,t){for(var n={},r=0,i=0;r!==e.length&&32!==(i=e.charCodeAt(r))&&10!==i&&13!==i;++r);if(t||(n[0]=e.slice(0,r)),r===e.length)return n;var s=e.match(ue),o=0,a=\"\",c=0,l=\"\",h=\"\",d=1;if(s)for(c=0;c!=s.length;++c){for(h=s[c],i=0;i!=h.length&&61!==h.charCodeAt(i);++i);for(l=h.slice(0,i).trim();32==h.charCodeAt(i+1);)++i;for(d=34==(r=h.charCodeAt(i+1))||39==r?1:0,a=h.slice(i+1+d,h.length-d),o=0;o!=l.length&&58!==l.charCodeAt(o);++o);if(o===l.length)l.indexOf(\"_\")>0&&(l=l.slice(0,l.indexOf(\"_\"))),n[l]=a,n[l.toLowerCase()]=a;else{var u=(5===o&&\"xmlns\"===l.slice(0,5)?\"xmlns\":\"\")+l.slice(o+1);if(n[u]&&\"ext\"==l.slice(o-3,o))continue;n[u]=a,n[u.toLowerCase()]=a}}return n}function Ce(e){return e.replace(pe,\"<$1\")}var be,ve,Ie={\"&quot;\":'\"',\"&apos;\":\"'\",\"&gt;\":\">\",\"&lt;\":\"<\",\"&amp;\":\"&\"},Ae=G(Ie),ye=(be=/&(?:quot|apos|gt|lt|amp|#x?([\\da-fA-F]+));/g,ve=/_x([\\da-fA-F]{4})_/g,function e(t){var n=t+\"\",r=n.indexOf(\"<![CDATA[\");if(-1==r)return n.replace(be,(function(e,t){return Ie[e]||String.fromCharCode(parseInt(t,e.indexOf(\"x\")>-1?16:10))||e})).replace(ve,(function(e,t){return String.fromCharCode(parseInt(t,16))}));var i=n.indexOf(\"]]>\");return e(n.slice(0,r))+n.slice(r+9,i)+e(n.slice(i+3))}),we=/[&<>'\"]/g,Se=/[\\u0000-\\u0008\\u000b-\\u001f]/g;function xe(e){return(e+\"\").replace(we,(function(e){return Ae[e]})).replace(Se,(function(e){return\"_x\"+(\"000\"+e.charCodeAt(0).toString(16)).slice(-4)+\"_\"}))}function Ee(e){return xe(e).replace(/ /g,\"_x0020_\")}var ke=/[\\u0000-\\u001f]/g;function _e(e){return(e+\"\").replace(we,(function(e){return Ae[e]})).replace(/\\n/g,\"<br/>\").replace(ke,(function(e){return\"&#x\"+(\"000\"+e.charCodeAt(0).toString(16)).slice(-4)+\";\"}))}var Te=function(){var e=/&#(\\d+);/g;function t(e,t){return String.fromCharCode(parseInt(t,10))}return function(n){return n.replace(e,t)}}();function Re(e){switch(e){case 1:case!0:case\"1\":case\"true\":case\"TRUE\":return!0;default:return!1}}var Be=function(e){for(var t=\"\",n=0,r=0,i=0,s=0,o=0,a=0;n<e.length;)(r=e.charCodeAt(n++))<128?t+=String.fromCharCode(r):(i=e.charCodeAt(n++),r>191&&r<224?(o=(31&r)<<6,o|=63&i,t+=String.fromCharCode(o)):(s=e.charCodeAt(n++),r<240?t+=String.fromCharCode((15&r)<<12|(63&i)<<6|63&s):(a=((7&r)<<18|(63&i)<<12|(63&s)<<6|63&(o=e.charCodeAt(n++)))-65536,t+=String.fromCharCode(55296+(a>>>10&1023)),t+=String.fromCharCode(56320+(1023&a)))));return t},Oe=function(e){for(var t=[],n=0,r=0,i=0;n<e.length;)switch(r=e.charCodeAt(n++),!0){case r<128:t.push(String.fromCharCode(r));break;case r<2048:t.push(String.fromCharCode(192+(r>>6))),t.push(String.fromCharCode(128+(63&r)));break;case r>=55296&&r<57344:r-=55296,i=e.charCodeAt(n++)-56320+(r<<10),t.push(String.fromCharCode(240+(i>>18&7))),t.push(String.fromCharCode(144+(i>>12&63))),t.push(String.fromCharCode(128+(i>>6&63))),t.push(String.fromCharCode(128+(63&i)));break;default:t.push(String.fromCharCode(224+(r>>12))),t.push(String.fromCharCode(128+(r>>6&63))),t.push(String.fromCharCode(128+(63&r)))}return t.join(\"\")};if(C){var Le=function(e){var t,n,r,i=Buffer.alloc(2*e.length),s=1,o=0,a=0;for(n=0;n<e.length;n+=s)s=1,(r=e.charCodeAt(n))<128?t=r:r<224?(t=64*(31&r)+(63&e.charCodeAt(n+1)),s=2):r<240?(t=4096*(15&r)+64*(63&e.charCodeAt(n+1))+(63&e.charCodeAt(n+2)),s=3):(s=4,t=262144*(7&r)+4096*(63&e.charCodeAt(n+1))+64*(63&e.charCodeAt(n+2))+(63&e.charCodeAt(n+3)),a=55296+((t-=65536)>>>10&1023),t=56320+(1023&t)),0!==a&&(i[o++]=255&a,i[o++]=a>>>8,a=0),i[o++]=t%256,i[o++]=t>>>8;return i.slice(0,o).toString(\"ucs2\")},Pe=\"foo bar baz\\xe2\\x98\\x83\\xf0\\x9f\\x8d\\xa3\";Be(Pe)==Le(Pe)&&(Be=Le);var Fe=function(e){return b(e,\"binary\").toString(\"utf8\")};Be(Pe)==Fe(Pe)&&(Be=Fe),Oe=function(e){return b(e,\"utf8\").toString(\"binary\")}}var Ne,Me,De,$e=(Ne={},function(e,t){var n=e+\"|\"+(t||\"\");return Ne[n]?Ne[n]:Ne[n]=new RegExp(\"<(?:\\\\w+:)?\"+e+'(?: xml:space=\"preserve\")?(?:[^>]*)>([\\\\s\\\\S]*?)</(?:\\\\w+:)?'+e+\">\",t||\"\")}),We=(Me=[[\"nbsp\",\" \"],[\"middot\",\"\\xb7\"],[\"quot\",'\"'],[\"apos\",\"'\"],[\"gt\",\">\"],[\"lt\",\"<\"],[\"amp\",\"&\"]].map((function(e){return[new RegExp(\"&\"+e[0]+\";\",\"g\"),e[1]]})),function(e){for(var t=e.replace(/^[\\t\\n\\r ]+/,\"\").replace(/[\\t\\n\\r ]+$/,\"\").replace(/[\\t\\n\\r ]+/g,\" \").replace(/<\\s*[bB][rR]\\s*\\/?>/g,\"\\n\").replace(/<[^>]*>/g,\"\"),n=0;n<Me.length;++n)t=t.replace(Me[n][0],Me[n][1]);return t}),He=(De={},function(e){return void 0!==De[e]?De[e]:De[e]=new RegExp(\"<(?:vt:)?\"+e+\">([\\\\s\\\\S]*?)</(?:vt:)?\"+e+\">\",\"g\")}),Ge=/<\\/?(?:vt:)?variant>/g,Ve=/<(?:vt:)([^>]*)>([\\s\\S]*)</;function je(e,t){var n=me(e),r=e.match(He(n.baseType))||[],i=[];if(r.length!=n.size){if(t.WTF)throw new Error(\"unexpected vector length \"+r.length+\" != \"+n.size);return i}return r.forEach((function(e){var t=e.replace(Ge,\"\").match(Ve);t&&i.push({v:Be(t[2]),t:t[1]})})),i}var Ze=/(^\\s|\\s$|\\n)/;function ze(e,t){return\"<\"+e+(t.match(Ze)?' xml:space=\"preserve\"':\"\")+\">\"+t+\"</\"+e+\">\"}function Ke(e){return W(e).map((function(t){return\" \"+t+'=\"'+e[t]+'\"'})).join(\"\")}function Xe(e,t,n){return\"<\"+e+(null!=n?Ke(n):\"\")+(null!=t?(t.match(Ze)?' xml:space=\"preserve\"':\"\")+\">\"+t+\"</\"+e:\"/\")+\">\"}function Ue(e,t){try{return e.toISOString().replace(/\\.\\d*/,\"\")}catch(El){if(t)throw El}return\"\"}var Ye,Je,Qe={dc:\"http://purl.org/dc/elements/1.1/\",dcterms:\"http://purl.org/dc/terms/\",dcmitype:\"http://purl.org/dc/dcmitype/\",mx:\"http://schemas.microsoft.com/office/mac/excel/2008/main\",r:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",sjs:\"http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties\",vt:\"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\",xsi:\"http://www.w3.org/2001/XMLSchema-instance\",xsd:\"http://www.w3.org/2001/XMLSchema\",main:[\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\"http://purl.oclc.org/ooxml/spreadsheetml/main\",\"http://schemas.microsoft.com/office/excel/2006/main\",\"http://schemas.microsoft.com/office/excel/2006/2\"]},qe=\"urn:schemas-microsoft-com:office:office\",et=\"urn:schemas-microsoft-com:office:excel\",tt=\"urn:schemas-microsoft-com:office:spreadsheet\",nt=function(e){for(var t=[],n=0;n<e[0].length;++n)if(e[0][n])for(var r=0,i=e[0][n].length;r<i;r+=10240)t.push.apply(t,e[0][n].slice(r,r+10240));return t},rt=nt,it=function(e,t,n){for(var r=[],i=t;i<n;i+=2)r.push(String.fromCharCode(yt(e,i)));return r.join(\"\").replace(k,\"\")},st=it,ot=function(e,t,n){for(var r=[],i=t;i<t+n;++i)r.push((\"0\"+e[i].toString(16)).slice(-2));return r.join(\"\")},at=ot,ct=function(e,t,n){for(var r=[],i=t;i<n;i++)r.push(String.fromCharCode(At(e,i)));return r.join(\"\")},lt=ct,ht=function(e,t){var n=St(e,t);return n>0?ct(e,t+4,t+4+n-1):\"\"},dt=ht,ut=function(e,t){var n=St(e,t);return n>0?ct(e,t+4,t+4+n-1):\"\"},ft=ut,gt=function(e,t){var n=2*St(e,t);return n>0?ct(e,t+4,t+4+n-1):\"\"},pt=gt;Ye=Je=function(e,t){var n=St(e,t);return n>0?it(e,t+4,t+4+n):\"\"};var mt,Ct,bt=function(e,t){var n=St(e,t);return n>0?ct(e,t+4,t+4+n):\"\"},vt=bt;mt=Ct=function(e,t){return function(e,t){for(var n=1-2*(e[t+7]>>>7),r=((127&e[t+7])<<4)+(e[t+6]>>>4&15),i=15&e[t+6],s=5;s>=0;--s)i=256*i+e[t+s];return 2047==r?0==i?n*(1/0):NaN:(0==r?r=-1022:(r-=1023,i+=Math.pow(2,52)),n*Math.pow(2,r-52)*i)}(e,t)};var It=function(e){return Array.isArray(e)};C&&(it=function(e,t,n){return Buffer.isBuffer(e)?e.toString(\"utf16le\",t,n).replace(k,\"\"):st(e,t,n)},ot=function(e,t,n){return Buffer.isBuffer(e)?e.toString(\"hex\",t,t+n):at(e,t,n)},ht=function(e,t){if(!Buffer.isBuffer(e))return dt(e,t);var n=e.readUInt32LE(t);return n>0?e.toString(\"utf8\",t+4,t+4+n-1):\"\"},ut=function(e,t){if(!Buffer.isBuffer(e))return ft(e,t);var n=e.readUInt32LE(t);return n>0?e.toString(\"utf8\",t+4,t+4+n-1):\"\"},gt=function(e,t){if(!Buffer.isBuffer(e))return pt(e,t);var n=2*e.readUInt32LE(t);return e.toString(\"utf16le\",t+4,t+4+n-1)},Ye=function(e,t){if(!Buffer.isBuffer(e))return Je(e,t);var n=e.readUInt32LE(t);return e.toString(\"utf16le\",t+4,t+4+n)},bt=function(e,t){if(!Buffer.isBuffer(e))return vt(e,t);var n=e.readUInt32LE(t);return e.toString(\"utf8\",t+4,t+4+n)},ct=function(e,t,n){return Buffer.isBuffer(e)?e.toString(\"utf8\",t,n):lt(e,t,n)},nt=function(e){return e[0].length>0&&Buffer.isBuffer(e[0][0])?Buffer.concat(e[0]):rt(e)},E=function(e){return Buffer.isBuffer(e[0])?Buffer.concat(e):[].concat.apply([],e)},mt=function(e,t){return Buffer.isBuffer(e)?e.readDoubleLE(t):Ct(e,t)},It=function(e){return Buffer.isBuffer(e)||Array.isArray(e)}),\"undefined\"!=typeof cptable&&(it=function(e,t,n){return cptable.utils.decode(1200,e.slice(t,n)).replace(k,\"\")},ct=function(e,t,n){return cptable.utils.decode(65001,e.slice(t,n))},ht=function(e,t){var n=St(e,t);return n>0?cptable.utils.decode(i,e.slice(t+4,t+4+n-1)):\"\"},ut=function(e,t){var n=St(e,t);return n>0?cptable.utils.decode(r,e.slice(t+4,t+4+n-1)):\"\"},gt=function(e,t){var n=2*St(e,t);return n>0?cptable.utils.decode(1200,e.slice(t+4,t+4+n-1)):\"\"},Ye=function(e,t){var n=St(e,t);return n>0?cptable.utils.decode(1200,e.slice(t+4,t+4+n)):\"\"},bt=function(e,t){var n=St(e,t);return n>0?cptable.utils.decode(65001,e.slice(t+4,t+4+n)):\"\"});var At=function(e,t){return e[t]},yt=function(e,t){return 256*e[t+1]+e[t]},wt=function(e,t){var n=256*e[t+1]+e[t];return n<32768?n:-1*(65535-n+1)},St=function(e,t){return e[t+3]*(1<<24)+(e[t+2]<<16)+(e[t+1]<<8)+e[t]},xt=function(e,t){return e[t+3]<<24|e[t+2]<<16|e[t+1]<<8|e[t]},Et=function(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]};function kt(e,t){var n,i,s,o,a,c,l=\"\",h=[];switch(t){case\"dbcs\":if(c=this.l,C&&Buffer.isBuffer(this))l=this.slice(this.l,this.l+2*e).toString(\"utf16le\");else for(a=0;a<e;++a)l+=String.fromCharCode(yt(this,c)),c+=2;e*=2;break;case\"utf8\":l=ct(this,this.l,this.l+e);break;case\"utf16le\":l=it(this,this.l,this.l+(e*=2));break;case\"wstr\":if(\"undefined\"==typeof cptable)return kt.call(this,e,\"dbcs\");l=cptable.utils.decode(r,this.slice(this.l,this.l+2*e)),e*=2;break;case\"lpstr-ansi\":l=ht(this,this.l),e=4+St(this,this.l);break;case\"lpstr-cp\":l=ut(this,this.l),e=4+St(this,this.l);break;case\"lpwstr\":l=gt(this,this.l),e=4+2*St(this,this.l);break;case\"lpp4\":e=4+St(this,this.l),l=Ye(this,this.l),2&e&&(e+=2);break;case\"8lpp4\":e=4+St(this,this.l),l=bt(this,this.l),3&e&&(e+=4-(3&e));break;case\"cstr\":for(e=0,l=\"\";0!==(s=At(this,this.l+e++));)h.push(f(s));l=h.join(\"\");break;case\"_wstr\":for(e=0,l=\"\";0!==(s=yt(this,this.l+e));)h.push(f(s)),e+=2;e+=2,l=h.join(\"\");break;case\"dbcs-cont\":for(l=\"\",c=this.l,a=0;a<e;++a){if(this.lens&&-1!==this.lens.indexOf(c))return s=At(this,c),this.l=c+1,o=kt.call(this,e-a,s?\"dbcs-cont\":\"sbcs-cont\"),h.join(\"\")+o;h.push(f(yt(this,c))),c+=2}l=h.join(\"\"),e*=2;break;case\"cpstr\":if(\"undefined\"!=typeof cptable){l=cptable.utils.decode(r,this.slice(this.l,this.l+e));break}case\"sbcs-cont\":for(l=\"\",c=this.l,a=0;a!=e;++a){if(this.lens&&-1!==this.lens.indexOf(c))return s=At(this,c),this.l=c+1,o=kt.call(this,e-a,s?\"dbcs-cont\":\"sbcs-cont\"),h.join(\"\")+o;h.push(f(At(this,c))),c+=1}l=h.join(\"\");break;default:switch(e){case 1:return n=At(this,this.l),this.l++,n;case 2:return n=(\"i\"===t?wt:yt)(this,this.l),this.l+=2,n;case 4:case-4:return\"i\"===t||0==(128&this[this.l+3])?(n=(e>0?xt:Et)(this,this.l),this.l+=4,n):(i=St(this,this.l),this.l+=4,i);case 8:case-8:if(\"f\"===t)return i=8==e?mt(this,this.l):mt([this[this.l+7],this[this.l+6],this[this.l+5],this[this.l+4],this[this.l+3],this[this.l+2],this[this.l+1],this[this.l+0]],0),this.l+=8,i;e=8;case 16:l=ot(this,this.l,e)}}return this.l+=e,l}var _t=function(e,t,n){e[n]=255&t,e[n+1]=t>>>8&255};function Tt(e,t,n){var r=0,i=0;if(\"dbcs\"===n){for(i=0;i!=t.length;++i)_t(this,t.charCodeAt(i),this.l+2*i);r=2*t.length}else if(\"sbcs\"===n){for(t=t.replace(/[^\\x00-\\x7F]/g,\"_\"),i=0;i!=t.length;++i)this[this.l+i]=255&t.charCodeAt(i);r=t.length}else{if(\"hex\"===n){for(;i<e;++i)this[this.l++]=parseInt(t.slice(2*i,2*i+2),16)||0;return this}if(\"utf16le\"===n){var s=Math.min(this.l+e,this.length);for(i=0;i<Math.min(t.length,e);++i){var o=t.charCodeAt(i);this[this.l++]=255&o,this[this.l++]=o>>8}for(;this.l<s;)this[this.l++]=0;return this}switch(e){case 1:r=1,this[this.l]=255&t;break;case 2:r=2,this[this.l]=255&t,this[this.l+1]=255&(t>>>=8);break;case 3:r=3,this[this.l]=255&t,this[this.l+1]=255&(t>>>=8),this[this.l+2]=255&(t>>>=8);break;case 4:r=4,function(e,t,n){e[n]=255&t,e[n+1]=t>>>8&255,e[n+2]=t>>>16&255,e[n+3]=t>>>24&255}(this,t,this.l);break;case 8:if(r=8,\"f\"===n){!function(e,t,n){var r=(t<0||1/t==-1/0?1:0)<<7,i=0,s=0,o=r?-t:t;isFinite(o)?0==o?i=s=0:(i=Math.floor(Math.log(o)/Math.LN2),s=o*Math.pow(2,52-i),i<=-1023&&(!isFinite(s)||s<Math.pow(2,52))?i=-1022:(s-=Math.pow(2,52),i+=1023)):(i=2047,s=isNaN(t)?26985:0);for(var a=0;a<=5;++a,s/=256)e[n+a]=255&s;e[n+6]=(15&i)<<4|15&s,e[n+7]=i>>4|r}(this,t,this.l);break}case 16:break;case-4:r=4,function(e,t,n){e[n]=255&t,e[n+1]=t>>8&255,e[n+2]=t>>16&255,e[n+3]=t>>24&255}(this,t,this.l)}}return this.l+=r,this}function Rt(e,t){var n=ot(this,this.l,e.length>>1);if(n!==e)throw new Error(t+\"Expected \"+e+\" saw \"+n);this.l+=e.length>>1}function Bt(e,t){e.l=t,e.read_shift=kt,e.chk=Rt,e.write_shift=Tt}function Ot(e,t){e.l+=t}function Lt(e){var t=I(e);return Bt(t,0),t}function Pt(e,t,n){if(e){var r,i,s;Bt(e,e.l||0);for(var o=e.length,a=0,c=0;e.l<o;){128&(a=e.read_shift(1))&&(a=(127&a)+((127&e.read_shift(1))<<7));var l=yc[a]||yc[65535];for(s=127&(r=e.read_shift(1)),i=1;i<4&&128&r;++i)s+=(127&(r=e.read_shift(1)))<<7*i;c=e.l+s;var h=(l.f||Ot)(e,s,n);if(e.l=c,t(h,l.n,a))return}}}function Ft(){var e=[],t=C?256:2048,n=function(e){var t=Lt(e);return Bt(t,0),t},r=n(t),i=function(){r&&(r.length>r.l&&((r=r.slice(0,r.l)).l=r.length),r.length>0&&e.push(r),r=null)},s=function(e){return r&&e<r.length-r.l?r:(i(),r=n(Math.max(e+1,t)))};return{next:s,push:function(e){i(),null==(r=e).l&&(r.l=r.length),s(t)},end:function(){return i(),nt([e])},_bufs:e}}function Nt(e,t,n,r){var i,s=+wc[t];if(!isNaN(s)){r||(r=yc[s].p||(n||[]).length||0),i=1+(s>=128?1:0)+1,r>=128&&++i,r>=16384&&++i,r>=2097152&&++i;var o=e.next(i);s<=127?o.write_shift(1,s):(o.write_shift(1,128+(127&s)),o.write_shift(1,s>>7));for(var a=0;4!=a;++a){if(!(r>=128)){o.write_shift(1,r);break}o.write_shift(1,128+(127&r)),r>>=7}r>0&&It(n)&&e.push(n)}}function Mt(e,t,n){var r=q(e);if(t.s?(r.cRel&&(r.c+=t.s.c),r.rRel&&(r.r+=t.s.r)):(r.cRel&&(r.c+=t.c),r.rRel&&(r.r+=t.r)),!n||n.biff<12){for(;r.c>=256;)r.c-=256;for(;r.r>=65536;)r.r-=65536}return r}function Dt(e,t,n){var r=q(e);return r.s=Mt(r.s,t.s,n),r.e=Mt(r.e,t.s,n),r}function $t(e,t){e.cRel&&e.c<0&&((e=q(e)).c+=t>8?16384:256),e.rRel&&e.r<0&&((e=q(e)).r+=t>8?1048576:t>5?65536:16384);var n=Kt(e);return 0===e.cRel&&(n=n.replace(/^([A-Z])/,\"$$$1\")),0===e.rRel&&(n=n.replace(/([A-Z]|^)(\\d+)$/,\"$1$$$2\")),n}function Wt(e,t){return 0!=e.s.r||e.s.rRel||e.e.r!=(t.biff>=12?1048575:t.biff>=8?65536:16384)||e.e.rRel?0!=e.s.c||e.s.cRel||e.e.c!=(t.biff>=12?65535:255)||e.e.cRel?$t(e.s,t.biff)+\":\"+$t(e.e,t.biff):(e.s.rRel?\"\":\"$\")+Gt(e.s.r)+\":\"+(e.e.rRel?\"\":\"$\")+Gt(e.e.r):(e.s.cRel?\"\":\"$\")+jt(e.s.c)+\":\"+(e.e.cRel?\"\":\"$\")+jt(e.e.c)}function Ht(e){return parseInt(e.replace(/\\$(\\d+)$/,\"$1\"),10)-1}function Gt(e){return\"\"+(e+1)}function Vt(e){for(var t=e.replace(/^\\$([A-Z])/,\"$1\"),n=0,r=0;r!==t.length;++r)n=26*n+t.charCodeAt(r)-64;return n-1}function jt(e){var t=\"\";for(++e;e;e=Math.floor((e-1)/26))t=String.fromCharCode((e-1)%26+65)+t;return t}function Zt(e){return e.replace(/(\\$?[A-Z]*)(\\$?\\d*)/,\"$1,$2\").split(\",\")}function zt(e){var t=Zt(e);return{c:Vt(t[0]),r:Ht(t[1])}}function Kt(e){return jt(e.c)+Gt(e.r)}function Xt(e){var t=e.split(\":\").map(zt);return{s:t[0],e:t[t.length-1]}}function Ut(e,t){return void 0===t||\"number\"==typeof t?Ut(e.s,e.e):(\"string\"!=typeof e&&(e=Kt(e)),\"string\"!=typeof t&&(t=Kt(t)),e==t?e:e+\":\"+t)}function Yt(e){var t={s:{c:0,r:0},e:{c:0,r:0}},n=0,r=0,i=0,s=e.length;for(n=0;r<s&&!((i=e.charCodeAt(r)-64)<1||i>26);++r)n=26*n+i;for(t.s.c=--n,n=0;r<s&&!((i=e.charCodeAt(r)-48)<0||i>9);++r)n=10*n+i;if(t.s.r=--n,r===s||58===e.charCodeAt(++r))return t.e.c=t.s.c,t.e.r=t.s.r,t;for(n=0;r!=s&&!((i=e.charCodeAt(r)-64)<1||i>26);++r)n=26*n+i;for(t.e.c=--n,n=0;r!=s&&!((i=e.charCodeAt(r)-48)<0||i>9);++r)n=10*n+i;return t.e.r=--n,t}function Jt(e,t,n){return null==e||null==e.t||\"z\"==e.t?\"\":void 0!==e.w?e.w:(\"d\"==e.t&&!e.z&&n&&n.dateNF&&(e.z=n.dateNF),function(e,t){var n=\"d\"==e.t&&t instanceof Date;if(null!=e.z)try{return e.w=T.format(e.z,n?z(t):t)}catch(El){}try{return e.w=T.format((e.XF||{}).numFmtId||(n?14:0),n?z(t):t)}catch(El){return\"\"+t}}(e,null==t?e.v:t))}function Qt(e,t){var n=t&&t.sheet?t.sheet:\"Sheet1\",r={};return r[n]=e,{SheetNames:[n],Sheets:r}}function qt(e,t,n){var r=n||{},i=e?Array.isArray(e):r.dense,s=e||(i?[]:{}),o=0,a=0;if(s&&null!=r.origin)if(\"number\"==typeof r.origin)o=r.origin;else{var c=\"string\"==typeof r.origin?zt(r.origin):r.origin;o=c.r,a=c.c}var l={s:{c:1e7,r:1e7},e:{c:0,r:0}};if(s[\"!ref\"]){var h=Yt(s[\"!ref\"]);l.s.c=h.s.c,l.s.r=h.s.r,l.e.c=Math.max(l.e.c,h.e.c),l.e.r=Math.max(l.e.r,h.e.r),-1==o&&(l.e.r=o=h.e.r+1)}for(var d=0;d!=t.length;++d)if(t[d]){if(!Array.isArray(t[d]))throw new Error(\"aoa_to_sheet expects an array of arrays\");for(var u=0;u!=t[d].length;++u)if(void 0!==t[d][u]){var f={v:t[d][u]},g=o+d,p=a+u;if(l.s.r>g&&(l.s.r=g),l.s.c>p&&(l.s.c=p),l.e.r<g&&(l.e.r=g),l.e.c<p&&(l.e.c=p),!t[d][u]||\"object\"!=typeof t[d][u]||Array.isArray(t[d][u])||t[d][u]instanceof Date)if(Array.isArray(f.v)&&(f.f=t[d][u][1],f.v=f.v[0]),null===f.v)if(f.f)f.t=\"n\";else{if(!r.sheetStubs)continue;f.t=\"z\"}else\"number\"==typeof f.v?f.t=\"n\":\"boolean\"==typeof f.v?f.t=\"b\":f.v instanceof Date?(f.z=r.dateNF||T._table[14],r.cellDates?(f.t=\"d\",f.w=T.format(f.z,z(f.v))):(f.t=\"n\",f.v=z(f.v),f.w=T.format(f.z,f.v))):f.t=\"s\";else f=t[d][u];i?(s[g]||(s[g]=[]),s[g][p]=f):s[Kt({c:p,r:g})]=f}}return l.s.c<1e7&&(s[\"!ref\"]=Ut(l)),s}function en(e,t){return qt(null,e,t)}function tn(e,t){return t||(t=Lt(4)),t.write_shift(4,e),t}function nn(e){var t=e.read_shift(4);return 0===t?\"\":e.read_shift(t,\"dbcs\")}function rn(e,t){var n=!1;return null==t&&(n=!0,t=Lt(4+2*e.length)),t.write_shift(4,e.length),e.length>0&&t.write_shift(0,e,\"dbcs\"),n?t.slice(0,t.l):t}function sn(e){return{ich:e.read_shift(2),ifnt:e.read_shift(2)}}function on(e,t){var n=e.l,r=e.read_shift(1),i=nn(e),s=[],o={t:i,h:i};if(0!=(1&r)){for(var a=e.read_shift(4),c=0;c!=a;++c)s.push(sn(e));o.r=s}else o.r=[{ich:0,ifnt:0}];return e.l=n+t,o}!function(e,t){var r;if(void 0!==t)r=t;else try{r=n(4)}catch(El){r=null}e.rc4=function(e,t){var n=new Array(256),r=0,i=0,s=0,o=0;for(i=0;256!=i;++i)n[i]=i;for(i=0;256!=i;++i)s=s+n[i]+e[i%e.length].charCodeAt(0)&255,o=n[i],n[i]=n[s],n[s]=o;i=s=0;var a=Buffer(t.length);for(r=0;r!=t.length;++r)o=n[i=i+1&255],n[i]=n[s=(s+n[i])%256],n[s]=o,a[r]=t[r]^n[n[i]+n[s]&255];return a},e.md5=function(e){if(!r)throw new Error(\"Unsupported crypto\");return r.createHash(\"md5\").update(e).digest(\"hex\")}}({},\"undefined\"!=typeof crypto?crypto:void 0);var an=on;function cn(e){var t=e.read_shift(4),n=e.read_shift(2);return n+=e.read_shift(1)<<16,e.l++,{c:t,iStyleRef:n}}function ln(e,t){return null==t&&(t=Lt(8)),t.write_shift(-4,e.c),t.write_shift(3,e.iStyleRef||e.s),t.write_shift(1,0),t}var hn=nn,dn=rn;function un(e){var t=e.read_shift(4);return 0===t||4294967295===t?\"\":e.read_shift(t,\"dbcs\")}function fn(e,t){var n=!1;return null==t&&(n=!0,t=Lt(127)),t.write_shift(4,e.length>0?e.length:4294967295),e.length>0&&t.write_shift(0,e,\"dbcs\"),n?t.slice(0,t.l):t}var gn=nn,pn=un,mn=fn;function Cn(e){var t=e.slice(e.l,e.l+4),n=1&t[0],r=2&t[0];e.l+=4,t[0]&=252;var i=0===r?mt([0,0,0,0,t[0],t[1],t[2],t[3]],0):xt(t,0)>>2;return n?i/100:i}function bn(e){var t={s:{},e:{}};return t.s.r=e.read_shift(4),t.e.r=e.read_shift(4),t.s.c=e.read_shift(4),t.e.c=e.read_shift(4),t}var vn=bn,In=function(e,t){return t||(t=Lt(16)),t.write_shift(4,e.s.r),t.write_shift(4,e.e.r),t.write_shift(4,e.s.c),t.write_shift(4,e.e.c),t};function An(e){return e.read_shift(8,\"f\")}function yn(e,t){return(t||Lt(8)).write_shift(8,e,\"f\")}var wn={0:\"#NULL!\",7:\"#DIV/0!\",15:\"#VALUE!\",23:\"#REF!\",29:\"#NAME?\",36:\"#NUM!\",42:\"#N/A\",43:\"#GETTING_DATA\",255:\"#WTF?\"},Sn=V(wn);function xn(e,t){if(t||(t=Lt(8)),!e||e.auto)return t.write_shift(4,0),t.write_shift(4,0),t;e.index?(t.write_shift(1,2),t.write_shift(1,e.index)):e.theme?(t.write_shift(1,6),t.write_shift(1,e.theme)):(t.write_shift(1,5),t.write_shift(1,0));var n=e.tint||0;if(n>0?n*=32767:n<0&&(n*=32768),t.write_shift(2,n),e.rgb){var r=e.rgb||\"FFFFFF\";t.write_shift(1,parseInt(r.slice(0,2),16)),t.write_shift(1,parseInt(r.slice(2,4),16)),t.write_shift(1,parseInt(r.slice(4,6),16)),t.write_shift(1,255)}else t.write_shift(2,0),t.write_shift(1,0),t.write_shift(1,0);return t}function En(e,t){var n=e.read_shift(4);switch(n){case 0:return\"\";case 4294967295:case 4294967294:return{2:\"BITMAP\",3:\"METAFILEPICT\",8:\"DIB\",14:\"ENHMETAFILE\"}[e.read_shift(4)]||\"\"}if(n>400)throw new Error(\"Unsupported Clipboard: \"+n.toString(16));return e.l-=4,e.read_shift(0,1==t?\"lpstr\":\"lpwstr\")}var kn=80,_n=[kn,81],Tn={1:{n:\"CodePage\",t:2},2:{n:\"Category\",t:kn},3:{n:\"PresentationFormat\",t:kn},4:{n:\"ByteCount\",t:3},5:{n:\"LineCount\",t:3},6:{n:\"ParagraphCount\",t:3},7:{n:\"SlideCount\",t:3},8:{n:\"NoteCount\",t:3},9:{n:\"HiddenCount\",t:3},10:{n:\"MultimediaClipCount\",t:3},11:{n:\"ScaleCrop\",t:11},12:{n:\"HeadingPairs\",t:4108},13:{n:\"TitlesOfParts\",t:4126},14:{n:\"Manager\",t:kn},15:{n:\"Company\",t:kn},16:{n:\"LinksUpToDate\",t:11},17:{n:\"CharacterCount\",t:3},19:{n:\"SharedDoc\",t:11},22:{n:\"HyperlinksChanged\",t:11},23:{n:\"AppVersion\",t:3,p:\"version\"},24:{n:\"DigSig\",t:65},26:{n:\"ContentType\",t:kn},27:{n:\"ContentStatus\",t:kn},28:{n:\"Language\",t:kn},29:{n:\"Version\",t:kn},255:{}},Rn={1:{n:\"CodePage\",t:2},2:{n:\"Title\",t:kn},3:{n:\"Subject\",t:kn},4:{n:\"Author\",t:kn},5:{n:\"Keywords\",t:kn},6:{n:\"Comments\",t:kn},7:{n:\"Template\",t:kn},8:{n:\"LastAuthor\",t:kn},9:{n:\"RevNumber\",t:kn},10:{n:\"EditTime\",t:64},11:{n:\"LastPrinted\",t:64},12:{n:\"CreatedDate\",t:64},13:{n:\"ModifiedDate\",t:64},14:{n:\"PageCount\",t:3},15:{n:\"WordCount\",t:3},16:{n:\"CharCount\",t:3},17:{n:\"Thumbnail\",t:71},18:{n:\"Application\",t:kn},19:{n:\"DocSecurity\",t:3},255:{}},Bn={2147483648:{n:\"Locale\",t:19},2147483651:{n:\"Behavior\",t:19},1919054434:{}};!function(){for(var e in Bn)Bn.hasOwnProperty(e)&&(Tn[e]=Rn[e]=Bn[e])}();var On,Ln=H(Tn,\"n\"),Pn=H(Rn,\"n\"),Fn={1:\"US\",2:\"CA\",3:\"\",7:\"RU\",20:\"EG\",30:\"GR\",31:\"NL\",32:\"BE\",33:\"FR\",34:\"ES\",36:\"HU\",39:\"IT\",41:\"CH\",43:\"AT\",44:\"GB\",45:\"DK\",46:\"SE\",47:\"NO\",48:\"PL\",49:\"DE\",52:\"MX\",55:\"BR\",61:\"AU\",64:\"NZ\",66:\"TH\",81:\"JP\",82:\"KR\",84:\"VN\",86:\"CN\",90:\"TR\",105:\"JS\",213:\"DZ\",216:\"MA\",218:\"LY\",351:\"PT\",354:\"IS\",358:\"FI\",420:\"CZ\",886:\"TW\",961:\"LB\",962:\"JO\",963:\"SY\",964:\"IQ\",965:\"KW\",966:\"SA\",971:\"AE\",972:\"IL\",974:\"QA\",981:\"IR\",65535:\"US\"},Nn=[null,\"solid\",\"mediumGray\",\"darkGray\",\"lightGray\",\"darkHorizontal\",\"darkVertical\",\"darkDown\",\"darkUp\",\"darkGrid\",\"darkTrellis\",\"lightHorizontal\",\"lightVertical\",\"lightDown\",\"lightUp\",\"lightGrid\",\"lightTrellis\",\"gray125\",\"gray0625\"],Mn=[0,16777215,16711680,65280,255,16776960,16711935,65535,0,16777215,16711680,65280,255,16776960,16711935,65535,8388608,32768,128,8421376,8388736,32896,12632256,8421504,10066431,10040166,16777164,13434879,6684774,16744576,26316,13421823,128,16711935,16776960,65535,8388736,8388608,32896,255,52479,13434879,13434828,16777113,10079487,16751052,13408767,16764057,3368703,3394764,10079232,16763904,16750848,16737792,6710937,9868950,13158,3381606,13056,3355392,10040064,10040166,3355545,3355443,16777215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0].map((function(e){return[e>>16&255,e>>8&255,255&e]})),Dn={\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\":\"workbooks\",\"application/vnd.ms-excel.binIndexWs\":\"TODO\",\"application/vnd.ms-excel.intlmacrosheet\":\"TODO\",\"application/vnd.ms-excel.binIndexMs\":\"TODO\",\"application/vnd.openxmlformats-package.core-properties+xml\":\"coreprops\",\"application/vnd.openxmlformats-officedocument.custom-properties+xml\":\"custprops\",\"application/vnd.openxmlformats-officedocument.extended-properties+xml\":\"extprops\",\"application/vnd.openxmlformats-officedocument.customXmlProperties+xml\":\"TODO\",\"application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty\":\"TODO\",\"application/vnd.ms-excel.pivotTable\":\"TODO\",\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml\":\"TODO\",\"application/vnd.ms-office.chartcolorstyle+xml\":\"TODO\",\"application/vnd.ms-office.chartstyle+xml\":\"TODO\",\"application/vnd.ms-excel.calcChain\":\"calcchains\",\"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml\":\"calcchains\",\"application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings\":\"TODO\",\"application/vnd.ms-office.activeX\":\"TODO\",\"application/vnd.ms-office.activeX+xml\":\"TODO\",\"application/vnd.ms-excel.attachedToolbars\":\"TODO\",\"application/vnd.ms-excel.connections\":\"TODO\",\"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\":\"TODO\",\"application/vnd.ms-excel.externalLink\":\"links\",\"application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml\":\"links\",\"application/vnd.ms-excel.sheetMetadata\":\"TODO\",\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\":\"TODO\",\"application/vnd.ms-excel.pivotCacheDefinition\":\"TODO\",\"application/vnd.ms-excel.pivotCacheRecords\":\"TODO\",\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml\":\"TODO\",\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml\":\"TODO\",\"application/vnd.ms-excel.queryTable\":\"TODO\",\"application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml\":\"TODO\",\"application/vnd.ms-excel.userNames\":\"TODO\",\"application/vnd.ms-excel.revisionHeaders\":\"TODO\",\"application/vnd.ms-excel.revisionLog\":\"TODO\",\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml\":\"TODO\",\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml\":\"TODO\",\"application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml\":\"TODO\",\"application/vnd.ms-excel.tableSingleCells\":\"TODO\",\"application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml\":\"TODO\",\"application/vnd.ms-excel.slicer\":\"TODO\",\"application/vnd.ms-excel.slicerCache\":\"TODO\",\"application/vnd.ms-excel.slicer+xml\":\"TODO\",\"application/vnd.ms-excel.slicerCache+xml\":\"TODO\",\"application/vnd.ms-excel.wsSortMap\":\"TODO\",\"application/vnd.ms-excel.table\":\"TODO\",\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\":\"TODO\",\"application/vnd.openxmlformats-officedocument.theme+xml\":\"themes\",\"application/vnd.openxmlformats-officedocument.themeOverride+xml\":\"TODO\",\"application/vnd.ms-excel.Timeline+xml\":\"TODO\",\"application/vnd.ms-excel.TimelineCache+xml\":\"TODO\",\"application/vnd.ms-office.vbaProject\":\"vba\",\"application/vnd.ms-office.vbaProjectSignature\":\"vba\",\"application/vnd.ms-office.volatileDependencies\":\"TODO\",\"application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml\":\"TODO\",\"application/vnd.ms-excel.controlproperties+xml\":\"TODO\",\"application/vnd.openxmlformats-officedocument.model+data\":\"TODO\",\"application/vnd.ms-excel.Survey+xml\":\"TODO\",\"application/vnd.openxmlformats-officedocument.drawing+xml\":\"drawings\",\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\":\"TODO\",\"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\":\"TODO\",\"application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml\":\"TODO\",\"application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml\":\"TODO\",\"application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml\":\"TODO\",\"application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml\":\"TODO\",\"application/vnd.openxmlformats-officedocument.vmlDrawing\":\"TODO\",\"application/vnd.openxmlformats-package.relationships+xml\":\"rels\",\"application/vnd.openxmlformats-officedocument.oleObject\":\"TODO\",\"image/png\":\"TODO\",sheet:\"js\"},$n=(W(On={workbooks:{xlsx:\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\",xlsm:\"application/vnd.ms-excel.sheet.macroEnabled.main+xml\",xlsb:\"application/vnd.ms-excel.sheet.binary.macroEnabled.main\",xlam:\"application/vnd.ms-excel.addin.macroEnabled.main+xml\",xltx:\"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\"},strs:{xlsx:\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\",xlsb:\"application/vnd.ms-excel.sharedStrings\"},comments:{xlsx:\"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\",xlsb:\"application/vnd.ms-excel.comments\"},sheets:{xlsx:\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\",xlsb:\"application/vnd.ms-excel.worksheet\"},charts:{xlsx:\"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\",xlsb:\"application/vnd.ms-excel.chartsheet\"},dialogs:{xlsx:\"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\",xlsb:\"application/vnd.ms-excel.dialogsheet\"},macros:{xlsx:\"application/vnd.ms-excel.macrosheet+xml\",xlsb:\"application/vnd.ms-excel.macrosheet\"},styles:{xlsx:\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\",xlsb:\"application/vnd.ms-excel.styles\"}}).forEach((function(e){[\"xlsm\",\"xlam\"].forEach((function(t){On[e][t]||(On[e][t]=On[e].xlsx)}))})),W(On).forEach((function(e){W(On[e]).forEach((function(t){Dn[On[e][t]]=e}))})),On),Wn=function(e){for(var t=[],n=W(e),r=0;r!==n.length;++r)null==t[e[n[r]]]&&(t[e[n[r]]]=[]),t[e[n[r]]].push(n[r]);return t}(Dn);Qe.CT=\"http://schemas.openxmlformats.org/package/2006/content-types\";var Hn=Xe(\"Types\",null,{xmlns:Qe.CT,\"xmlns:xsd\":Qe.xsd,\"xmlns:xsi\":Qe.xsi}),Gn=[[\"xml\",\"application/xml\"],[\"bin\",\"application/vnd.ms-excel.sheet.binary.macroEnabled.main\"],[\"vml\",\"application/vnd.openxmlformats-officedocument.vmlDrawing\"],[\"bmp\",\"image/bmp\"],[\"png\",\"image/png\"],[\"gif\",\"image/gif\"],[\"emf\",\"image/x-emf\"],[\"wmf\",\"image/x-wmf\"],[\"jpg\",\"image/jpeg\"],[\"jpeg\",\"image/jpeg\"],[\"tif\",\"image/tiff\"],[\"tiff\",\"image/tiff\"],[\"pdf\",\"application/pdf\"],[\"rels\",Wn.rels[0]]].map((function(e){return Xe(\"Default\",null,{Extension:e[0],ContentType:e[1]})})),Vn={WB:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",SHEET:\"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",HLINK:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",VML:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing\",VBA:\"http://schemas.microsoft.com/office/2006/relationships/vbaProject\"};function jn(e){var t=e.lastIndexOf(\"/\");return e.slice(0,t+1)+\"_rels/\"+e.slice(t+1)+\".rels\"}function Zn(e,t){if(!e)return e;\"/\"!==t.charAt(0)&&(t=\"/\"+t);var n={},r={};return(e.match(fe)||[]).forEach((function(e){var i=me(e);if(\"<Relationship\"===i[0]){var s={};s.Type=i.Type,s.Target=i.Target,s.Id=i.Id,s.TargetMode=i.TargetMode;var o=\"External\"===i.TargetMode?i.Target:he(i.Target,t);n[o]=s,r[i.Id]=s}})),n[\"!id\"]=r,n}Qe.RELS=\"http://schemas.openxmlformats.org/package/2006/relationships\";var zn=Xe(\"Relationships\",null,{xmlns:Qe.RELS});function Kn(e){var t=[de,zn];return W(e[\"!id\"]).forEach((function(n){t[t.length]=Xe(\"Relationship\",null,e[\"!id\"][n])})),t.length>2&&(t[t.length]=\"</Relationships>\",t[1]=t[1].replace(\"/>\",\">\")),t.join(\"\")}function Xn(e,t,n,r,i){if(i||(i={}),e[\"!id\"]||(e[\"!id\"]={}),t<0)for(t=1;e[\"!id\"][\"rId\"+t];++t);if(i.Id=\"rId\"+t,i.Type=r,i.Target=n,i.Type==Vn.HLINK&&(i.TargetMode=\"External\"),e[\"!id\"][i.Id])throw new Error(\"Cannot rewrite rId \"+t);return e[\"!id\"][i.Id]=i,e[(\"/\"+i.Target).replace(\"//\",\"/\")]=i,t}function Un(e,t,n){return['  <rdf:Description rdf:about=\"'+e+'\">\\n','    <rdf:type rdf:resource=\"http://docs.oasis-open.org/ns/office/1.2/meta/'+(n||\"odf\")+\"#\"+t+'\"/>\\n',\"  </rdf:Description>\\n\"].join(\"\")}var Yn,Jn=(Yn='<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><office:document-meta xmlns:office=\"urn:oasis:names:tc:opendocument:xmlns:office:1.0\" xmlns:meta=\"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" office:version=\"1.2\"><office:meta><meta:generator>SheetJS '+t.version+\"</meta:generator></office:meta></office:document-meta>\",function(){return Yn}),Qn=[[\"cp:category\",\"Category\"],[\"cp:contentStatus\",\"ContentStatus\"],[\"cp:keywords\",\"Keywords\"],[\"cp:lastModifiedBy\",\"LastAuthor\"],[\"cp:lastPrinted\",\"LastPrinted\"],[\"cp:revision\",\"RevNumber\"],[\"cp:version\",\"Version\"],[\"dc:creator\",\"Author\"],[\"dc:description\",\"Comments\"],[\"dc:identifier\",\"Identifier\"],[\"dc:language\",\"Language\"],[\"dc:subject\",\"Subject\"],[\"dc:title\",\"Title\"],[\"dcterms:created\",\"CreatedDate\",\"date\"],[\"dcterms:modified\",\"ModifiedDate\",\"date\"]];Qe.CORE_PROPS=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\",Vn.CORE_PROPS=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\";var qn=function(){for(var e=new Array(Qn.length),t=0;t<Qn.length;++t){var n=Qn[t],r=\"(?:\"+n[0].slice(0,n[0].indexOf(\":\"))+\":)\"+n[0].slice(n[0].indexOf(\":\")+1);e[t]=new RegExp(\"<\"+r+\"[^>]*>([\\\\s\\\\S]*?)</\"+r+\">\")}return e}();function er(e){var t={};e=Be(e);for(var n=0;n<Qn.length;++n){var r=Qn[n],i=e.match(qn[n]);null!=i&&i.length>0&&(t[r[1]]=i[1]),\"date\"===r[2]&&t[r[1]]&&(t[r[1]]=J(t[r[1]]))}return t}var tr=Xe(\"cp:coreProperties\",null,{\"xmlns:cp\":Qe.CORE_PROPS,\"xmlns:dc\":Qe.dc,\"xmlns:dcterms\":Qe.dcterms,\"xmlns:dcmitype\":Qe.dcmitype,\"xmlns:xsi\":Qe.xsi});function nr(e,t,n,r,i){null==i[e]&&null!=t&&\"\"!==t&&(i[e]=t,r[r.length]=n?Xe(e,t,n):ze(e,t))}var rr=[[\"Application\",\"Application\",\"string\"],[\"AppVersion\",\"AppVersion\",\"string\"],[\"Company\",\"Company\",\"string\"],[\"DocSecurity\",\"DocSecurity\",\"string\"],[\"Manager\",\"Manager\",\"string\"],[\"HyperlinksChanged\",\"HyperlinksChanged\",\"bool\"],[\"SharedDoc\",\"SharedDoc\",\"bool\"],[\"LinksUpToDate\",\"LinksUpToDate\",\"bool\"],[\"ScaleCrop\",\"ScaleCrop\",\"bool\"],[\"HeadingPairs\",\"HeadingPairs\",\"raw\"],[\"TitlesOfParts\",\"TitlesOfParts\",\"raw\"]];function ir(e,t,n,r){var i=[];if(\"string\"==typeof e)i=je(e,r);else for(var s=0;s<e.length;++s)i=i.concat(e[s].map((function(e){return{v:e}})));var o=\"string\"==typeof t?je(t,r).map((function(e){return e.v})):t,a=0,c=0;if(o.length>0)for(var l=0;l!==i.length;l+=2){switch(c=+i[l+1].v,i[l].v){case\"Worksheets\":case\"\\u5de5\\u4f5c\\u8868\":case\"\\u041b\\u0438\\u0441\\u0442\\u044b\":case\"\\u0623\\u0648\\u0631\\u0627\\u0642 \\u0627\\u0644\\u0639\\u0645\\u0644\":case\"\\u30ef\\u30fc\\u30af\\u30b7\\u30fc\\u30c8\":case\"\\u05d2\\u05dc\\u05d9\\u05d5\\u05e0\\u05d5\\u05ea \\u05e2\\u05d1\\u05d5\\u05d3\\u05d4\":case\"Arbeitsbl\\xe4tter\":case\"\\xc7al\\u0131\\u015fma Sayfalar\\u0131\":case\"Feuilles de calcul\":case\"Fogli di lavoro\":case\"Folhas de c\\xe1lculo\":case\"Planilhas\":case\"Regneark\":case\"Werkbladen\":n.Worksheets=c,n.SheetNames=o.slice(a,a+c);break;case\"Named Ranges\":case\"\\u540d\\u524d\\u4ed8\\u304d\\u4e00\\u89a7\":case\"Benannte Bereiche\":case\"Navngivne omr\\xe5der\":n.NamedRanges=c,n.DefinedNames=o.slice(a,a+c);break;case\"Charts\":case\"Diagramme\":n.Chartsheets=c,n.ChartNames=o.slice(a,a+c)}a+=c}}Qe.EXT_PROPS=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\",Vn.EXT_PROPS=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\";var sr=Xe(\"Properties\",null,{xmlns:Qe.EXT_PROPS,\"xmlns:vt\":Qe.vt});Qe.CUST_PROPS=\"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties\",Vn.CUST_PROPS=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties\";var or=/<[^>]+>[^<]*/g,ar=Xe(\"Properties\",null,{xmlns:Qe.CUST_PROPS,\"xmlns:vt\":Qe.vt}),cr={Title:\"Title\",Subject:\"Subject\",Author:\"Author\",Keywords:\"Keywords\",Comments:\"Description\",LastAuthor:\"LastAuthor\",RevNumber:\"Revision\",Application:\"AppName\",LastPrinted:\"LastPrinted\",CreatedDate:\"Created\",ModifiedDate:\"LastSaved\",Category:\"Category\",Manager:\"Manager\",Company:\"Company\",AppVersion:\"Version\",ContentStatus:\"ContentStatus\",Identifier:\"Identifier\",Language:\"Language\"},lr=G(cr);function hr(e,t,n){e[t=lr[t]||t]=n}function dr(e){var t=e.read_shift(4),n=e.read_shift(4);return new Date(1e3*(n/1e7*Math.pow(2,32)+t/1e7-11644473600)).toISOString().replace(/\\.000/,\"\")}function ur(e,t,n){var r=e.l,i=e.read_shift(0,\"lpstr-cp\");if(n)for(;e.l-r&3;)++e.l;return i}function fr(e,t,n){var r=e.read_shift(0,\"lpwstr\");return n&&(e.l+=4-(r.length+1&3)&3),r}function gr(e,t,n){return 31===t?fr(e):ur(e,0,n)}function pr(e,t,n){return gr(e,t,!1===n?0:4)}function mr(e){return[vr(e,81),vr(e,3)]}function Cr(e,t){for(var n=e.read_shift(4),r={},i=0;i!=n;++i){var s=e.read_shift(4),o=e.read_shift(4);r[s]=e.read_shift(o,1200===t?\"utf16le\":\"utf8\").replace(k,\"\").replace(_,\"!\"),1200===t&&o%2&&(e.l+=2)}return 3&e.l&&(e.l=e.l>>3<<2),r}function br(e){var t=e.read_shift(4),n=e.slice(e.l,e.l+t);return e.l+=t,(3&t)>0&&(e.l+=4-(3&t)&3),n}function vr(e,t,n){var r,i=e.read_shift(2),s=n||{};if(e.l+=2,12!==t&&i!==t&&-1===_n.indexOf(t))throw new Error(\"Expected type \"+t+\" saw \"+i);switch(12===t?i:t){case 2:return r=e.read_shift(2,\"i\"),s.raw||(e.l+=2),r;case 3:return e.read_shift(4,\"i\");case 11:return 0!==e.read_shift(4);case 19:return e.read_shift(4);case 30:return ur(e,0,4).replace(k,\"\");case 31:return fr(e);case 64:return dr(e);case 65:return br(e);case 71:return function(e){var t={};return t.Size=e.read_shift(4),e.l+=t.Size+3-(t.Size-1)%4,t}(e);case 80:return pr(e,i,!s.raw).replace(k,\"\");case 81:return function(e,t){if(!t)throw new Error(\"VtUnalignedString must have positive length\");return gr(e,t,0)}(e,i).replace(k,\"\");case 4108:return function(e){return function(e){for(var t=e.read_shift(4),n=[],r=0;r!=t/2;++r)n.push(mr(e));return n}(e)}(e);case 4126:return function(e){return function(e){for(var t=e.read_shift(4),n=[],r=0;r!=t;++r)n[r]=e.read_shift(0,\"lpstr-cp\").replace(k,\"\");return n}(e)}(e);default:throw new Error(\"TypedPropertyValue unrecognized type \"+t+\" \"+i)}}function Ir(e,t){var n=Lt(4),r=Lt(4);switch(n.write_shift(4,80==e?31:e),e){case 3:r.write_shift(-4,t);break;case 5:(r=Lt(8)).write_shift(8,t,\"f\");break;case 11:r.write_shift(4,t?1:0);break;case 64:r=function(e){var t=(\"string\"==typeof e?new Date(Date.parse(e)):e).getTime()/1e3+11644473600,n=t%Math.pow(2,32),r=(t-n)/Math.pow(2,32);r*=1e7;var i=(n*=1e7)/Math.pow(2,32)|0;i>0&&(n%=Math.pow(2,32),r+=i);var s=Lt(8);return s.write_shift(4,n),s.write_shift(4,r),s}(t);break;case 31:case 80:for((r=Lt(4+2*(t.length+1)+(t.length%2?0:2))).write_shift(4,t.length+1),r.write_shift(0,t,\"dbcs\");r.l!=r.length;)r.write_shift(1,0);break;default:throw new Error(\"TypedPropertyValue unrecognized type \"+e+\" \"+t)}return E([n,r])}function Ar(e,t){var n=e.l,r=e.read_shift(4),i=e.read_shift(4),s=[],o=0,a=0,c=-1,h={};for(o=0;o!=i;++o){var d=e.read_shift(4),u=e.read_shift(4);s[o]=[d,u+n]}s.sort((function(e,t){return e[1]-t[1]}));var f={};for(o=0;o!=i;++o){if(e.l!==s[o][1]){var g=!0;if(o>0&&t)switch(t[s[o-1][0]].t){case 2:e.l+2===s[o][1]&&(e.l+=2,g=!1);break;case 80:case 4108:e.l<=s[o][1]&&(e.l=s[o][1],g=!1)}if((!t||0==o)&&e.l<=s[o][1]&&(g=!1,e.l=s[o][1]),g)throw new Error(\"Read Error: Expected address \"+s[o][1]+\" at \"+e.l+\" :\"+o)}if(t){var p=t[s[o][0]];if(f[p.n]=vr(e,p.t,{raw:!0}),\"version\"===p.p&&(f[p.n]=String(f[p.n]>>16)+\".\"+(\"0000\"+String(65535&f[p.n])).slice(-4)),\"CodePage\"==p.n)switch(f[p.n]){case 0:f[p.n]=1252;case 874:case 932:case 936:case 949:case 950:case 1250:case 1251:case 1253:case 1254:case 1255:case 1256:case 1257:case 1258:case 1e4:case 1200:case 1201:case 1252:case 65e3:case-536:case 65001:case-535:l(a=f[p.n]>>>0&65535);break;default:throw new Error(\"Unsupported CodePage: \"+f[p.n])}}else if(1===s[o][0]){if(a=f.CodePage=vr(e,2),l(a),-1!==c){var m=e.l;e.l=s[c][1],h=Cr(e,a),e.l=m}}else if(0===s[o][0]){if(0===a){c=o,e.l=s[o+1][1];continue}h=Cr(e,a)}else{var C,b=h[s[o][0]];switch(e[e.l]){case 65:e.l+=4,C=br(e);break;case 30:case 31:e.l+=4,C=pr(e,e[e.l-4]).replace(/\\u0000+$/,\"\");break;case 3:e.l+=4,C=e.read_shift(4,\"i\");break;case 19:e.l+=4,C=e.read_shift(4);break;case 5:e.l+=4,C=e.read_shift(8,\"f\");break;case 11:e.l+=4,C=_r(e,4);break;case 64:e.l+=4,C=J(dr(e));break;default:throw new Error(\"unparsed value: \"+e[e.l])}f[b]=C}}return e.l=n+r,f}var yr=[\"CodePage\",\"Thumbnail\",\"_PID_LINKBASE\",\"_PID_HLINKS\",\"SystemIdentifier\",\"FMTID\"].concat([\"Worksheets\",\"SheetNames\",\"NamedRanges\",\"DefinedNames\",\"Chartsheets\",\"ChartNames\"]);function wr(e){switch(typeof e){case\"boolean\":return 11;case\"number\":return(0|e)==e?3:5;case\"string\":return 31;case\"object\":if(e instanceof Date)return 64}return-1}function Sr(e,t,n){var r=Lt(8),i=[],s=[],o=8,a=0,c=Lt(8),l=Lt(8);if(c.write_shift(4,2),c.write_shift(4,1200),l.write_shift(4,1),s.push(c),i.push(l),o+=8+c.length,!t){(l=Lt(8)).write_shift(4,0),i.unshift(l);var h=[Lt(4)];for(h[0].write_shift(4,e.length),a=0;a<e.length;++a){var d=e[a][0];for((c=Lt(8+2*(d.length+1)+(d.length%2?0:2))).write_shift(4,a+2),c.write_shift(4,d.length+1),c.write_shift(0,d,\"dbcs\");c.l!=c.length;)c.write_shift(1,0);h.push(c)}c=E(h),s.unshift(c),o+=8+c.length}for(a=0;a<e.length;++a)if((!t||t[e[a][0]])&&!(yr.indexOf(e[a][0])>-1)&&null!=e[a][1]){var u=e[a][1],f=0;if(t){var g=n[f=+t[e[a][0]]];if(\"version\"==g.p&&\"string\"==typeof u){var p=u.split(\".\");u=(+p[0]<<16)+(+p[1]||0)}c=Ir(g.t,u)}else{var m=wr(u);-1==m&&(m=31,u=String(u)),c=Ir(m,u)}s.push(c),(l=Lt(8)).write_shift(4,t?f:2+a),i.push(l),o+=8+c.length}var C=8*(s.length+1);for(a=0;a<s.length;++a)i[a].write_shift(4,C),C+=s[a].length;return r.write_shift(4,o),r.write_shift(4,s.length),E([r].concat(i).concat(s))}function xr(e,t,n){var r=e.content;if(!r)return{};Bt(r,0);var i,s,o,a,c=0;r.chk(\"feff\",\"Byte Order: \"),r.read_shift(2);var l=r.read_shift(4),h=r.read_shift(16);if(h!==N.utils.consts.HEADER_CLSID&&h!==n)throw new Error(\"Bad PropertySet CLSID \"+h);if(1!==(i=r.read_shift(4))&&2!==i)throw new Error(\"Unrecognized #Sets: \"+i);if(s=r.read_shift(16),a=r.read_shift(4),1===i&&a!==r.l)throw new Error(\"Length mismatch: \"+a+\" !== \"+r.l);2===i&&(o=r.read_shift(16),c=r.read_shift(4));var d,u=Ar(r,t),f={SystemIdentifier:l};for(var g in u)f[g]=u[g];if(f.FMTID=s,1===i)return f;if(c-r.l==2&&(r.l+=2),r.l!==c)throw new Error(\"Length mismatch 2: \"+r.l+\" !== \"+c);try{d=Ar(r,null)}catch(El){}for(g in d)f[g]=d[g];return f.FMTID=[s,o],f}function Er(e,t,n,r,i,s){var o=Lt(i?68:48),a=[o];o.write_shift(2,65534),o.write_shift(2,0),o.write_shift(4,842412599),o.write_shift(16,N.utils.consts.HEADER_CLSID,\"hex\"),o.write_shift(4,i?2:1),o.write_shift(16,t,\"hex\"),o.write_shift(4,i?68:48);var c=Sr(e,n,r);if(a.push(c),i){var l=Sr(i,null,null);o.write_shift(16,s,\"hex\"),o.write_shift(4,68+c.length),a.push(l)}return E(a)}function kr(e,t){return e.read_shift(t),null}function _r(e,t){return 1===e.read_shift(t)}function Tr(e,t){return t||(t=Lt(2)),t.write_shift(2,+!!e),t}function Rr(e){return e.read_shift(2,\"u\")}function Br(e,t){return t||(t=Lt(2)),t.write_shift(2,e),t}function Or(e,t){return function(e,t,n){for(var r=[],i=e.l+t;e.l<i;)r.push(n(e,i-e.l));if(i!==e.l)throw new Error(\"Slurp error\");return r}(e,t,Rr)}function Lr(e,t,n){var i=e.read_shift(n&&n.biff>=12?2:1),s=\"sbcs-cont\",o=r;n&&n.biff>=8&&(r=1200),n&&8!=n.biff?12==n.biff&&(s=\"wstr\"):e.read_shift(1)&&(s=\"dbcs-cont\"),n.biff>=2&&n.biff<=5&&(s=\"cpstr\");var a=i?e.read_shift(i,s):\"\";return r=o,a}function Pr(e){var t=r;r=1200;var n,i=e.read_shift(2),s=e.read_shift(1),o=4&s,a=8&s,c=1+(1&s),l=0,h={};a&&(l=e.read_shift(2)),o&&(n=e.read_shift(4));var d=0===i?\"\":e.read_shift(i,2==c?\"dbcs-cont\":\"sbcs-cont\");return a&&(e.l+=4*l),o&&(e.l+=n),h.t=d,a||(h.raw=\"<t>\"+h.t+\"</t>\",h.r=h.t),r=t,h}function Fr(e,t,n){if(n){if(n.biff>=2&&n.biff<=5)return e.read_shift(t,\"cpstr\");if(n.biff>=12)return e.read_shift(t,\"dbcs-cont\")}var r=e.read_shift(1);return e.read_shift(t,0===r?\"sbcs-cont\":\"dbcs-cont\")}function Nr(e,t,n){var r=e.read_shift(n&&2==n.biff?1:2);return 0===r?(e.l++,\"\"):Fr(e,r,n)}function Mr(e,t,n){if(n.biff>5)return Nr(e,0,n);var r=e.read_shift(1);return 0===r?(e.l++,\"\"):e.read_shift(r,n.biff<=4||!e.lens?\"cpstr\":\"sbcs-cont\")}function Dr(e,t,n){return n||(n=Lt(3+2*e.length)),n.write_shift(2,e.length),n.write_shift(1,1),n.write_shift(31,e,\"utf16le\"),n}function $r(e){var t=e.read_shift(4);return t>0?e.read_shift(t,\"utf16le\").replace(k,\"\"):\"\"}function Wr(e){var t=Lt(512),n=0,r=e.Target,i=r.indexOf(\"#\")>-1?31:23;switch(r.charAt(0)){case\"#\":i=28;break;case\".\":i&=-3}t.write_shift(4,2),t.write_shift(4,i);var s=[8,6815827,6619237,4849780,83];for(n=0;n<s.length;++n)t.write_shift(4,s[n]);if(28==i){for(r=r.slice(1),t.write_shift(4,r.length+1),n=0;n<r.length;++n)t.write_shift(2,r.charCodeAt(n));t.write_shift(2,0)}else if(2&i){for(s=\"e0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \"),n=0;n<s.length;++n)t.write_shift(1,parseInt(s[n],16));for(t.write_shift(4,2*(r.length+1)),n=0;n<r.length;++n)t.write_shift(2,r.charCodeAt(n));t.write_shift(2,0)}else{for(s=\"03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46\".split(\" \"),n=0;n<s.length;++n)t.write_shift(1,parseInt(s[n],16));for(var o=0;\"../\"==r.slice(3*o,3*o+3)||\"..\\\\\"==r.slice(3*o,3*o+3);)++o;for(t.write_shift(2,o),t.write_shift(4,r.length+1),n=0;n<r.length;++n)t.write_shift(1,255&r.charCodeAt(n));for(t.write_shift(1,0),t.write_shift(2,65535),t.write_shift(2,57005),n=0;n<6;++n)t.write_shift(4,0)}return t.slice(0,t.l)}function Hr(e){return[e.read_shift(1),e.read_shift(1),e.read_shift(1),e.read_shift(1)]}function Gr(e,t){var n=Hr(e);return n[3]=0,n}function Vr(e){return{r:e.read_shift(2),c:e.read_shift(2),ixfe:e.read_shift(2)}}function jr(e,t,n,r){return r||(r=Lt(6)),r.write_shift(2,e),r.write_shift(2,t),r.write_shift(2,n||0),r}function Zr(e,t,n){var r=n.biff>8?4:2;return[e.read_shift(r),e.read_shift(r,\"i\"),e.read_shift(r,\"i\")]}function zr(e){return[e.read_shift(2),Cn(e)]}function Kr(e){var t=e.read_shift(2),n=e.read_shift(2);return{s:{c:e.read_shift(2),r:t},e:{c:e.read_shift(2),r:n}}}function Xr(e,t){return t||(t=Lt(8)),t.write_shift(2,e.s.r),t.write_shift(2,e.e.r),t.write_shift(2,e.s.c),t.write_shift(2,e.e.c),t}function Ur(e){var t=e.read_shift(2),n=e.read_shift(2);return{s:{c:e.read_shift(1),r:t},e:{c:e.read_shift(1),r:n}}}var Yr=Ur;function Jr(e){e.l+=4;var t=e.read_shift(2),n=e.read_shift(2),r=e.read_shift(2);return e.l+=12,[n,t,r]}function Qr(e){e.l+=2,e.l+=e.read_shift(2)}var qr={0:Qr,4:Qr,5:Qr,6:Qr,7:function(e){return e.l+=4,e.cf=e.read_shift(2),{}},8:Qr,9:Qr,10:Qr,11:Qr,12:Qr,13:function(e){var t={};return e.l+=4,e.l+=16,t.fSharedNote=e.read_shift(2),e.l+=4,t},14:Qr,15:Qr,16:Qr,17:Qr,18:Qr,19:Qr,20:Qr,21:Jr};function ei(e,t){var n={BIFFVer:0,dt:0};switch(n.BIFFVer=e.read_shift(2),(t-=2)>=2&&(n.dt=e.read_shift(2),e.l-=2),n.BIFFVer){case 1536:case 1280:case 1024:case 768:case 512:case 2:case 7:break;default:if(t>6)throw new Error(\"Unexpected BIFF Ver \"+n.BIFFVer)}return e.read_shift(t),n}function ti(e,t,n){var r=1536,i=16;switch(n.bookType){case\"biff8\":break;case\"biff5\":r=1280,i=8;break;case\"biff4\":r=4,i=6;break;case\"biff3\":r=3,i=6;break;case\"biff2\":r=2,i=4;break;case\"xla\":break;default:throw new Error(\"unsupported BIFF version\")}var s=Lt(i);return s.write_shift(2,r),s.write_shift(2,t),i>4&&s.write_shift(2,29282),i>6&&s.write_shift(2,1997),i>8&&(s.write_shift(2,49161),s.write_shift(2,1),s.write_shift(2,1798),s.write_shift(2,0)),s}function ni(e,t){var n=!t||t.biff>=8?2:1,r=Lt(8+n*e.name.length);r.write_shift(4,e.pos),r.write_shift(1,e.hs||0),r.write_shift(1,e.dt),r.write_shift(1,e.name.length),t.biff>=8&&r.write_shift(1,1),r.write_shift(n*e.name.length,e.name,t.biff<8?\"sbcs\":\"utf16le\");var i=r.slice(0,r.l);return i.l=r.l,i}function ri(e,t,n){var r=0;n&&2==n.biff||(r=e.read_shift(2));var i=e.read_shift(2);return n&&2==n.biff&&(r=1-(i>>15),i&=32767),[{Unsynced:1&r,DyZero:(2&r)>>1,ExAsc:(4&r)>>2,ExDsc:(8&r)>>3},i]}function ii(e,t,n,r){var i=n&&5==n.biff;r||(r=Lt(i?3+t.length:5+2*t.length)),r.write_shift(2,e),r.write_shift(i?1:2,t.length),i||r.write_shift(1,1),r.write_shift((i?1:2)*t.length,t,i?\"sbcs\":\"utf16le\");var s=r.length>r.l?r.slice(0,r.l):r;return null==s.l&&(s.l=s.length),s}var si=Mr;function oi(e,t,n){var r=e.l+t,i=8!=n.biff&&n.biff?2:4,s=e.read_shift(i),o=e.read_shift(i),a=e.read_shift(2),c=e.read_shift(2);return e.l=r,{s:{r:s,c:a},e:{r:o,c:c}}}function ai(e,t,n,r){var i=n&&5==n.biff;return r||(r=Lt(i?16:20)),r.write_shift(2,0),e.style?(r.write_shift(2,e.numFmtId||0),r.write_shift(2,65524)):(r.write_shift(2,e.numFmtId||0),r.write_shift(2,t<<4)),r.write_shift(4,0),r.write_shift(4,0),i||r.write_shift(4,0),r.write_shift(2,0),r}function ci(e,t,n){var r=Vr(e);2==n.biff&&++e.l;var i=function(e){var t=e.read_shift(1);return 1===e.read_shift(1)?t:1===t}(e);return r.val=i,r.t=!0===i||!1===i?\"b\":\"e\",r}var li=function(e,t,n){return 0===t?\"\":Mr(e,0,n)};function hi(e,t,n){var r,i=e.read_shift(2),s={fBuiltIn:1&i,fWantAdvise:i>>>1&1,fWantPict:i>>>2&1,fOle:i>>>3&1,fOleLink:i>>>4&1,cf:i>>>5&1023,fIcon:i>>>15&1};return 14849===n.sbcch&&(r=function(e,t,n){e.l+=4;var r=e.l+(t-=4),i=Lr(e,0,n),s=e.read_shift(2);if(s!==(r-=e.l))throw new Error(\"Malformed AddinUdf: padding = \"+r+\" != \"+s);return e.l+=s,i}(e,t-2,n)),s.body=r||e.read_shift(t-2),\"string\"==typeof r&&(s.Name=r),s}var di=[\"_xlnm.Consolidate_Area\",\"_xlnm.Auto_Open\",\"_xlnm.Auto_Close\",\"_xlnm.Extract\",\"_xlnm.Database\",\"_xlnm.Criteria\",\"_xlnm.Print_Area\",\"_xlnm.Print_Titles\",\"_xlnm.Recorder\",\"_xlnm.Data_Form\",\"_xlnm.Auto_Activate\",\"_xlnm.Auto_Deactivate\",\"_xlnm.Sheet_Title\",\"_xlnm._FilterDatabase\"];function ui(e,t,n){var r=e.l+t,i=e.read_shift(2),s=e.read_shift(1),o=e.read_shift(1),a=e.read_shift(n&&2==n.biff?1:2),c=0;(!n||n.biff>=5)&&(5!=n.biff&&(e.l+=2),c=e.read_shift(2),5==n.biff&&(e.l+=2),e.l+=4);var l=Fr(e,o,n);32&i&&(l=di[l.charCodeAt(0)]);var h=r-e.l;return n&&2==n.biff&&--h,{chKey:s,Name:l,itab:c,rgce:r==e.l||0===a?[]:function(e,t,n,r){var i,s=e.l+t,o=To(e,r,n);return s!==e.l&&(i=_o(e,s-e.l,o,n)),[o,i]}(e,h,n,a)}}function fi(e,t,n){if(n.biff<8)return function(e,t,n){3==e[e.l+1]&&e[e.l]++;var r=Lr(e,0,n);return 3==r.charCodeAt(0)?r.slice(1):r}(e,0,n);for(var r=[],i=e.l+t,s=e.read_shift(n.biff>8?4:2);0!=s--;)r.push(Zr(e,0,n));if(e.l!=i)throw new Error(\"Bad ExternSheet: \"+e.l+\" != \"+i);return r}function gi(e,t,n){var r=Yr(e,6);switch(n.biff){case 2:e.l++,t-=7;break;case 3:case 4:e.l+=2,t-=8;break;default:e.l+=6,t-=12}return[r,Fo(e,t,n)]}var pi=[];function mi(e){var t=Lt(24),n=zt(e[0]);t.write_shift(2,n.r),t.write_shift(2,n.r),t.write_shift(2,n.c),t.write_shift(2,n.c);for(var r=\"d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \"),i=0;i<16;++i)t.write_shift(1,parseInt(r[i],16));return E([t,Wr(e[1])])}function Ci(e){var t=e[1].Tooltip,n=Lt(10+2*(t.length+1));n.write_shift(2,2048);var r=zt(e[0]);n.write_shift(2,r.r),n.write_shift(2,r.r),n.write_shift(2,r.c),n.write_shift(2,r.c);for(var i=0;i<t.length;++i)n.write_shift(2,t.charCodeAt(i));return n.write_shift(2,0),n}function bi(e,t,n){if(!n.cellStyles)return Ot(e,t);var r=n&&n.biff>=12?4:2,i=e.read_shift(r),s=e.read_shift(r),o=e.read_shift(r),a=e.read_shift(r),c=e.read_shift(2);return 2==r&&(e.l+=2),{s:i,e:s,w:o,ixfe:a,flags:c}}pi[8]=function(e,t){var n=e.l+t;e.l+=10;var r=e.read_shift(2);e.l+=4,e.l+=2,e.l+=2,e.l+=2,e.l+=4;var i=e.read_shift(1);return e.l+=i,e.l=n,{fmt:r}};var vi=Vr,Ii=Or,Ai=Nr,yi=function(){var e={1:437,2:850,3:1252,4:1e4,100:852,101:866,102:865,103:861,104:895,105:620,106:737,107:857,120:950,121:949,122:936,123:932,124:874,125:1255,126:1256,150:10007,151:10029,152:10006,200:1250,201:1251,202:1254,203:1253,0:20127,8:865,9:437,10:850,11:437,13:437,14:850,15:437,16:850,17:437,18:850,19:932,20:850,21:437,22:850,23:865,24:437,25:437,26:850,27:437,28:863,29:850,31:852,34:852,35:852,36:860,37:850,38:866,55:850,64:852,77:936,78:949,79:950,80:874,87:1252,88:1252,89:1252,255:16969},t=G({1:437,2:850,3:1252,4:1e4,100:852,101:866,102:865,103:861,104:895,105:620,106:737,107:857,120:950,121:949,122:936,123:932,124:874,125:1255,126:1256,150:10007,151:10029,152:10006,200:1250,201:1251,202:1254,203:1253,0:20127});function n(t,n){var r=n||{};return r.dateNF||(r.dateNF=\"yyyymmdd\"),en(function(t,n){var r=[],i=I(1);switch(n.type){case\"base64\":i=y(m.decode(t));break;case\"binary\":i=y(t);break;case\"buffer\":case\"array\":i=t}Bt(i,0);var s=i.read_shift(1),o=!1,a=!1,c=!1;switch(s){case 2:case 3:break;case 48:a=!0,o=!0;break;case 49:a=!0;break;case 131:case 139:o=!0;break;case 140:o=!0,c=!0;break;case 245:o=!0;break;default:throw new Error(\"DBF Unsupported Version: \"+s.toString(16))}var l=0,h=0;2==s&&(l=i.read_shift(2)),i.l+=3,2!=s&&(l=i.read_shift(4)),2!=s&&(h=i.read_shift(2));var d=i.read_shift(2),u=1252;2!=s&&(i.l+=16,i.read_shift(1),0!==i[i.l]&&(u=e[i[i.l]]),i.l+=1,i.l+=2),c&&(i.l+=36);for(var f=[],g={},p=h-10-(a?264:0),C=c?32:11;2==s?i.l<i.length&&13!=i[i.l]:i.l<p;)switch((g={}).name=cptable.utils.decode(u,i.slice(i.l,i.l+C)).replace(/[\\u0000\\r\\n].*$/g,\"\"),i.l+=C,g.type=String.fromCharCode(i.read_shift(1)),2==s||c||(g.offset=i.read_shift(4)),g.len=i.read_shift(1),2==s&&(g.offset=i.read_shift(2)),g.dec=i.read_shift(1),g.name.length&&f.push(g),2!=s&&(i.l+=c?13:14),g.type){case\"B\":a&&8==g.len||!n.WTF||console.log(\"Skipping \"+g.name+\":\"+g.type);break;case\"G\":case\"P\":n.WTF&&console.log(\"Skipping \"+g.name+\":\"+g.type);break;case\"C\":case\"D\":case\"F\":case\"I\":case\"L\":case\"M\":case\"N\":case\"O\":case\"T\":case\"Y\":case\"0\":case\"@\":case\"+\":break;default:throw new Error(\"Unknown Field Type: \"+g.type)}if(13!==i[i.l]?i.l=h-1:2==s&&(i.l=521),2!=s){if(13!==i.read_shift(1))throw new Error(\"DBF Terminator not found \"+i.l+\" \"+i[i.l]);i.l=h}var b=0,v=0;for(r[0]=[],v=0;v!=f.length;++v)r[0][v]=f[v].name;for(;l-- >0;)if(42!==i[i.l])for(++i.l,r[++b]=[],v=0,v=0;v!=f.length;++v){var A=i.slice(i.l,i.l+f[v].len);i.l+=f[v].len,Bt(A,0);var w=cptable.utils.decode(u,A);switch(f[v].type){case\"C\":r[b][v]=cptable.utils.decode(u,A),r[b][v]=r[b][v].trim();break;case\"D\":r[b][v]=8===w.length?new Date(+w.slice(0,4),+w.slice(4,6)-1,+w.slice(6,8)):w;break;case\"F\":r[b][v]=parseFloat(w.trim());break;case\"+\":case\"I\":r[b][v]=c?2147483648^A.read_shift(-4,\"i\"):A.read_shift(4,\"i\");break;case\"L\":switch(w.toUpperCase()){case\"Y\":case\"T\":r[b][v]=!0;break;case\"N\":case\"F\":r[b][v]=!1;break;case\" \":case\"?\":r[b][v]=!1;break;default:throw new Error(\"DBF Unrecognized L:|\"+w+\"|\")}break;case\"M\":if(!o)throw new Error(\"DBF Unexpected MEMO for type \"+s.toString(16));r[b][v]=\"##MEMO##\"+(c?parseInt(w.trim(),10):A.read_shift(4));break;case\"N\":r[b][v]=+w.replace(/\\u0000/g,\"\").trim();break;case\"@\":r[b][v]=new Date(A.read_shift(-8,\"f\")-621356832e5);break;case\"T\":r[b][v]=new Date(864e5*(A.read_shift(4)-2440588)+A.read_shift(4));break;case\"Y\":r[b][v]=A.read_shift(4,\"i\")/1e4;break;case\"O\":r[b][v]=-A.read_shift(-8,\"f\");break;case\"B\":if(a&&8==f[v].len){r[b][v]=A.read_shift(8,\"f\");break}case\"G\":case\"P\":A.l+=f[v].len;break;case\"0\":if(\"_NullFlags\"===f[v].name)break;default:throw new Error(\"DBF Unsupported data type \"+f[v].type)}}else i.l+=d;if(2!=s&&i.l<i.length&&26!=i[i.l++])throw new Error(\"DBF EOF Marker missing \"+(i.l-1)+\" of \"+i.length+\" \"+i[i.l-1].toString(16));return n&&n.sheetRows&&(r=r.slice(0,n.sheetRows)),r}(t,r),r)}var r={B:8,C:250,L:1,D:8,\"?\":0,\"\":0};return{to_workbook:function(e,t){try{return Qt(n(e,t),t)}catch(El){if(t&&t.WTF)throw El}return{SheetNames:[],Sheets:{}}},to_sheet:n,from_sheet:function(e,n){var s=n||{};if(+s.codepage>=0&&l(+s.codepage),\"string\"==s.type)throw new Error(\"Cannot write DBF to JS string\");var o=Ft(),a=Cl(e,{header:1,raw:!0,cellDates:!0}),c=a[0],h=a.slice(1),d=0,u=0,f=0,g=1;for(d=0;d<c.length;++d)if(null!=d){if(++f,\"number\"==typeof c[d]&&(c[d]=c[d].toString(10)),\"string\"!=typeof c[d])throw new Error(\"DBF Invalid column name \"+c[d]+\" |\"+typeof c[d]+\"|\");if(c.indexOf(c[d])!==d)for(u=0;u<1024;++u)if(-1==c.indexOf(c[d]+\"_\"+u)){c[d]+=\"_\"+u;break}}var p=Yt(e[\"!ref\"]),m=[];for(d=0;d<=p.e.c-p.s.c;++d){var C=[];for(u=0;u<h.length;++u)null!=h[u][d]&&C.push(h[u][d]);if(0!=C.length&&null!=c[d]){var b=\"\",v=\"\";for(u=0;u<C.length;++u){switch(typeof C[u]){case\"number\":v=\"B\";break;case\"string\":v=\"C\";break;case\"boolean\":v=\"L\";break;case\"object\":v=C[u]instanceof Date?\"D\":\"C\";break;default:v=\"C\"}if(\"C\"==(b=b&&b!=v?\"C\":v))break}g+=r[b]||0,m[d]=b}else m[d]=\"?\"}var I=o.next(32);for(I.write_shift(4,318902576),I.write_shift(4,h.length),I.write_shift(2,296+32*f),I.write_shift(2,g),d=0;d<4;++d)I.write_shift(4,0);for(I.write_shift(4,0|(+t[i]||3)<<8),d=0,u=0;d<c.length;++d)if(null!=c[d]){var A=o.next(32),y=(c[d].slice(-10)+\"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\").slice(0,11);A.write_shift(1,y,\"sbcs\"),A.write_shift(1,\"?\"==m[d]?\"C\":m[d],\"sbcs\"),A.write_shift(4,u),A.write_shift(1,r[m[d]]||0),A.write_shift(1,0),A.write_shift(1,2),A.write_shift(4,0),A.write_shift(1,0),A.write_shift(4,0),A.write_shift(4,0),u+=r[m[d]]||0}var w=o.next(264);for(w.write_shift(4,13),d=0;d<65;++d)w.write_shift(4,0);for(d=0;d<h.length;++d){var S=o.next(g);for(S.write_shift(1,0),u=0;u<c.length;++u)if(null!=c[u])switch(m[u]){case\"L\":S.write_shift(1,null==h[d][u]?63:h[d][u]?84:70);break;case\"B\":S.write_shift(8,h[d][u]||0,\"f\");break;case\"D\":h[d][u]?(S.write_shift(4,(\"0000\"+h[d][u].getFullYear()).slice(-4),\"sbcs\"),S.write_shift(2,(\"00\"+(h[d][u].getMonth()+1)).slice(-2),\"sbcs\"),S.write_shift(2,(\"00\"+h[d][u].getDate()).slice(-2),\"sbcs\")):S.write_shift(8,\"00000000\",\"sbcs\");break;case\"C\":var x=String(h[d][u]||\"\");for(S.write_shift(1,x,\"sbcs\"),f=0;f<250-x.length;++f)S.write_shift(1,32)}}return o.next(1).write_shift(1,26),o.end()}}}(),wi=function(){var e={AA:\"\\xc0\",BA:\"\\xc1\",CA:\"\\xc2\",DA:195,HA:\"\\xc4\",JA:197,AE:\"\\xc8\",BE:\"\\xc9\",CE:\"\\xca\",HE:\"\\xcb\",AI:\"\\xcc\",BI:\"\\xcd\",CI:\"\\xce\",HI:\"\\xcf\",AO:\"\\xd2\",BO:\"\\xd3\",CO:\"\\xd4\",DO:213,HO:\"\\xd6\",AU:\"\\xd9\",BU:\"\\xda\",CU:\"\\xdb\",HU:\"\\xdc\",Aa:\"\\xe0\",Ba:\"\\xe1\",Ca:\"\\xe2\",Da:227,Ha:\"\\xe4\",Ja:229,Ae:\"\\xe8\",Be:\"\\xe9\",Ce:\"\\xea\",He:\"\\xeb\",Ai:\"\\xec\",Bi:\"\\xed\",Ci:\"\\xee\",Hi:\"\\xef\",Ao:\"\\xf2\",Bo:\"\\xf3\",Co:\"\\xf4\",Do:245,Ho:\"\\xf6\",Au:\"\\xf9\",Bu:\"\\xfa\",Cu:\"\\xfb\",Hu:\"\\xfc\",KC:\"\\xc7\",Kc:\"\\xe7\",q:\"\\xe6\",z:\"\\u0153\",a:\"\\xc6\",j:\"\\u0152\",DN:209,Dn:241,Hy:255,S:169,c:170,R:174,0:176,1:177,2:178,3:179,B:180,5:181,6:182,7:183,Q:185,k:186,b:208,i:216,l:222,s:240,y:248,\"!\":161,'\"':162,\"#\":163,\"(\":164,\"%\":165,\"'\":167,\"H \":168,\"+\":171,\";\":187,\"<\":188,\"=\":189,\">\":190,\"?\":191,\"{\":223},t=new RegExp(\"\\x1bN(\"+W(e).join(\"|\").replace(/\\|\\|\\|/,\"|\\\\||\").replace(/([?()+])/g,\"\\\\$1\")+\"|\\\\|)\",\"gm\"),n=function(t,n){var r=e[n];return\"number\"==typeof r?g(r):r},r=function(e,t,n){var r=t.charCodeAt(0)-32<<4|n.charCodeAt(0)-48;return 59==r?e:g(r)};function i(e,i){var s,o=e.split(/[\\n\\r]+/),a=-1,c=-1,h=0,d=0,u=[],f=[],g=null,p={},m=[],C=[],b=[],v=0;for(+i.codepage>=0&&l(+i.codepage);h!==o.length;++h){v=0;var I,A=o[h].trim().replace(/\\x1B([\\x20-\\x2F])([\\x30-\\x3F])/g,r).replace(t,n),y=A.replace(/;;/g,\"\\0\").split(\";\").map((function(e){return e.replace(/\\u0000/g,\";\")}));if(A.length>0)switch(y[0]){case\"ID\":case\"E\":case\"B\":case\"O\":break;case\"P\":\"P\"==y[1].charAt(0)&&f.push(A.slice(3).replace(/;;/g,\";\"));break;case\"C\":var w=!1,S=!1;for(d=1;d<y.length;++d)switch(y[d].charAt(0)){case\"X\":c=parseInt(y[d].slice(1))-1,S=!0;break;case\"Y\":for(a=parseInt(y[d].slice(1))-1,S||(c=0),s=u.length;s<=a;++s)u[s]=[];break;case\"K\":'\"'===(I=y[d].slice(1)).charAt(0)?I=I.slice(1,I.length-1):\"TRUE\"===I?I=!0:\"FALSE\"===I?I=!1:isNaN(te(I))?isNaN(ne(I).getDate())||(I=J(I)):(I=te(I),null!==g&&T.is_date(g)&&(I=K(I))),\"undefined\"!=typeof cptable&&\"string\"==typeof I&&\"string\"!=(i||{}).type&&(i||{}).codepage&&(I=cptable.utils.decode(i.codepage,I)),w=!0;break;case\"E\":var x=Us(y[d].slice(1),{r:a,c:c});u[a][c]=[u[a][c],x];break;default:if(i&&i.WTF)throw new Error(\"SYLK bad record \"+A)}w&&(u[a][c]=I,g=null);break;case\"F\":var E=0;for(d=1;d<y.length;++d)switch(y[d].charAt(0)){case\"X\":c=parseInt(y[d].slice(1))-1,++E;break;case\"Y\":for(a=parseInt(y[d].slice(1))-1,s=u.length;s<=a;++s)u[s]=[];break;case\"M\":v=parseInt(y[d].slice(1))/20;break;case\"F\":case\"G\":break;case\"P\":g=f[parseInt(y[d].slice(1))];break;case\"S\":case\"D\":case\"N\":break;case\"W\":for(b=y[d].slice(1).split(\" \"),s=parseInt(b[0],10);s<=parseInt(b[1],10);++s)v=parseInt(b[2],10),C[s-1]=0===v?{hidden:!0}:{wch:v},ls(C[s-1]);break;case\"C\":C[c=parseInt(y[d].slice(1))-1]||(C[c]={});break;case\"R\":m[a=parseInt(y[d].slice(1))-1]||(m[a]={}),v>0?(m[a].hpt=v,m[a].hpx=ds(v)):0===v&&(m[a].hidden=!0);break;default:if(i&&i.WTF)throw new Error(\"SYLK bad record \"+A)}E<1&&(g=null);break;default:if(i&&i.WTF)throw new Error(\"SYLK bad record \"+A)}}return m.length>0&&(p[\"!rows\"]=m),C.length>0&&(p[\"!cols\"]=C),i&&i.sheetRows&&(u=u.slice(0,i.sheetRows)),[u,p]}function s(e,t){var n=function(e,t){switch(t.type){case\"base64\":return i(m.decode(e),t);case\"binary\":return i(e,t);case\"buffer\":return i(e.toString(\"binary\"),t);case\"array\":return i(Q(e),t)}throw new Error(\"Unrecognized type \"+t.type)}(e,t),r=n[1],s=en(n[0],t);return W(r).forEach((function(e){s[e]=r[e]})),s}function o(e,t,n,r){var i=\"C;Y\"+(n+1)+\";X\"+(r+1)+\";K\";switch(e.t){case\"n\":i+=e.v||0,e.f&&!e.F&&(i+=\";E\"+Js(e.f,{r:n,c:r}));break;case\"b\":i+=e.v?\"TRUE\":\"FALSE\";break;case\"e\":i+=e.w||e.v;break;case\"d\":i+='\"'+(e.w||e.v)+'\"';break;case\"s\":i+='\"'+e.v.replace(/\"/g,\"\")+'\"'}return i}return e[\"|\"]=254,{to_workbook:function(e,t){return Qt(s(e,t),t)},to_sheet:s,from_sheet:function(e,t){var n,r,i=[\"ID;PWXL;N;E\"],s=[],a=Yt(e[\"!ref\"]),c=Array.isArray(e),l=\"\\r\\n\";i.push(\"P;PGeneral\"),i.push(\"F;P0;DG0G8;M255\"),e[\"!cols\"]&&(r=i,e[\"!cols\"].forEach((function(e,t){var n=\"F;W\"+(t+1)+\" \"+(t+1)+\" \";e.hidden?n+=\"0\":(\"number\"==typeof e.width&&(e.wpx=is(e.width)),\"number\"==typeof e.wpx&&(e.wch=ss(e.wpx)),\"number\"==typeof e.wch&&(n+=Math.round(e.wch))),\" \"!=n.charAt(n.length-1)&&r.push(n)}))),e[\"!rows\"]&&function(e,t){t.forEach((function(t,n){var r=\"F;\";t.hidden?r+=\"M0;\":t.hpt?r+=\"M\"+20*t.hpt+\";\":t.hpx&&(r+=\"M\"+20*hs(t.hpx)+\";\"),r.length>2&&e.push(r+\"R\"+(n+1))}))}(i,e[\"!rows\"]),i.push(\"B;Y\"+(a.e.r-a.s.r+1)+\";X\"+(a.e.c-a.s.c+1)+\";D\"+[a.s.c,a.s.r,a.e.c,a.e.r].join(\" \"));for(var h=a.s.r;h<=a.e.r;++h)for(var d=a.s.c;d<=a.e.c;++d){var u=Kt({r:h,c:d});(n=c?(e[h]||[])[d]:e[u])&&(null!=n.v||n.f&&!n.F)&&s.push(o(n,0,h,d))}return i.join(l)+l+s.join(l)+l+\"E\"+l}}}(),Si=function(){function e(e,t){for(var n=e.split(\"\\n\"),r=-1,i=-1,s=0,o=[];s!==n.length;++s)if(\"BOT\"!==n[s].trim()){if(!(r<0)){var a=n[s].trim().split(\",\"),c=a[0],l=a[1],h=n[++s].trim();switch(+c){case-1:if(\"BOT\"===h){o[++r]=[],i=0;continue}if(\"EOD\"!==h)throw new Error(\"Unrecognized DIF special command \"+h);break;case 0:o[r][i]=\"TRUE\"===h||\"FALSE\"!==h&&(isNaN(te(l))?isNaN(ne(l).getDate())?l:J(l):te(l)),++i;break;case 1:h=h.slice(1,h.length-1),o[r][i++]=\"\"!==h?h:null}if(\"EOD\"===h)break}}else o[++r]=[],i=0;return t&&t.sheetRows&&(o=o.slice(0,t.sheetRows)),o}function t(t,n){return en(function(t,n){switch(n.type){case\"base64\":return e(m.decode(t),n);case\"binary\":return e(t,n);case\"buffer\":return e(t.toString(\"binary\"),n);case\"array\":return e(Q(t),n)}throw new Error(\"Unrecognized type \"+n.type)}(t,n),n)}var n,r;return{to_workbook:function(e,n){return Qt(t(e,n),n)},to_sheet:t,from_sheet:(n=function(e,t,n,r,i){e.push(t),e.push(n+\",\"+r),e.push('\"'+i.replace(/\"/g,'\"\"')+'\"')},r=function(e,t,n,r){e.push(t+\",\"+n),e.push(1==t?'\"'+r.replace(/\"/g,'\"\"')+'\"':r)},function(e){var t,i=[],s=Yt(e[\"!ref\"]),o=Array.isArray(e);n(i,\"TABLE\",0,1,\"sheetjs\"),n(i,\"VECTORS\",0,s.e.r-s.s.r+1,\"\"),n(i,\"TUPLES\",0,s.e.c-s.s.c+1,\"\"),n(i,\"DATA\",0,0,\"\");for(var a=s.s.r;a<=s.e.r;++a){r(i,-1,0,\"BOT\");for(var c=s.s.c;c<=s.e.c;++c){var l=Kt({r:a,c:c});if(t=o?(e[a]||[])[c]:e[l])switch(t.t){case\"n\":var h=t.w;h||null==t.v||(h=t.v),null==h?r(i,1,0,t.f&&!t.F?\"=\"+t.f:\"\"):r(i,0,h,\"V\");break;case\"b\":r(i,0,t.v?1:0,t.v?\"TRUE\":\"FALSE\");break;case\"s\":r(i,1,0,isNaN(t.v)?t.v:'=\"'+t.v+'\"');break;case\"d\":t.w||(t.w=T.format(t.z||T._table[14],z(J(t.v)))),r(i,0,t.w,\"V\");break;default:r(i,1,0,\"\")}else r(i,1,0,\"\")}}return r(i,-1,0,\"EOD\"),i.join(\"\\r\\n\")})}}(),xi=function(){function e(e){return e.replace(/\\\\/g,\"\\\\b\").replace(/:/g,\"\\\\c\").replace(/\\n/g,\"\\\\n\")}function t(e,t){return en(function(e,t){for(var n=e.split(\"\\n\"),r=-1,i=-1,s=0,o=[];s!==n.length;++s){var a=n[s].trim().split(\":\");if(\"cell\"===a[0]){var c=zt(a[1]);if(o.length<=c.r)for(r=o.length;r<=c.r;++r)o[r]||(o[r]=[]);switch(r=c.r,i=c.c,a[2]){case\"t\":o[r][i]=a[3].replace(/\\\\b/g,\"\\\\\").replace(/\\\\c/g,\":\").replace(/\\\\n/g,\"\\n\");break;case\"v\":o[r][i]=+a[3];break;case\"vtf\":var l=a[a.length-1];case\"vtc\":switch(a[3]){case\"nl\":o[r][i]=!!+a[4];break;default:o[r][i]=+a[4]}\"vtf\"==a[2]&&(o[r][i]=[o[r][i],l])}}}return t&&t.sheetRows&&(o=o.slice(0,t.sheetRows)),o}(e,t),t)}var n=[\"socialcalc:version:1.5\",\"MIME-Version: 1.0\",\"Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave\"].join(\"\\n\"),r=[\"--SocialCalcSpreadsheetControlSave\",\"Content-type: text/plain; charset=UTF-8\"].join(\"\\n\")+\"\\n\",i=[\"# SocialCalc Spreadsheet Control Save\",\"part:sheet\"].join(\"\\n\"),s=\"--SocialCalcSpreadsheetControlSave--\";function o(t){if(!t||!t[\"!ref\"])return\"\";for(var n,r=[],i=[],s=\"\",o=Xt(t[\"!ref\"]),a=Array.isArray(t),c=o.s.r;c<=o.e.r;++c)for(var l=o.s.c;l<=o.e.c;++l)if(s=Kt({r:c,c:l}),(n=a?(t[c]||[])[l]:t[s])&&null!=n.v&&\"z\"!==n.t){switch(i=[\"cell\",s,\"t\"],n.t){case\"s\":case\"str\":i.push(e(n.v));break;case\"n\":n.f?(i[2]=\"vtf\",i[3]=\"n\",i[4]=n.v,i[5]=e(n.f)):(i[2]=\"v\",i[3]=n.v);break;case\"b\":i[2]=\"vt\"+(n.f?\"f\":\"c\"),i[3]=\"nl\",i[4]=n.v?\"1\":\"0\",i[5]=e(n.f||(n.v?\"TRUE\":\"FALSE\"));break;case\"d\":var h=z(J(n.v));i[2]=\"vtc\",i[3]=\"nd\",i[4]=\"\"+h,i[5]=n.w||T.format(n.z||T._table[14],h);break;case\"e\":continue}r.push(i.join(\":\"))}return r.push(\"sheet:c:\"+(o.e.c-o.s.c+1)+\":r:\"+(o.e.r-o.s.r+1)+\":tvf:1\"),r.push(\"valueformat:1:text-wiki\"),r.join(\"\\n\")}return{to_workbook:function(e,n){return Qt(t(e,n),n)},to_sheet:t,from_sheet:function(e){return[n,r,i,r,o(e),s].join(\"\\n\")}}}(),Ei=function(){function e(e,t,n,r,i){i.raw?t[n][r]=e:\"TRUE\"===e?t[n][r]=!0:\"FALSE\"===e?t[n][r]=!1:\"\"===e||(t[n][r]=isNaN(te(e))?isNaN(ne(e).getDate())?e:J(e):te(e))}var t={44:\",\",9:\"\\t\",59:\";\"},n={44:3,9:2,59:1};function r(r,i){var s=\"\",o=\"string\"==i.type?[0,0,0,0]:sl(r,i);switch(i.type){case\"base64\":s=m.decode(r);break;case\"binary\":s=r;break;case\"buffer\":s=65001==i.codepage?r.toString(\"utf8\"):i.codepage&&\"undefined\"!=typeof cptable?cptable.utils.decode(i.codepage,r):r.toString(\"binary\");break;case\"array\":s=Q(r);break;case\"string\":s=r;break;default:throw new Error(\"Unrecognized type \"+i.type)}return 239==o[0]&&187==o[1]&&191==o[2]?s=Be(s.slice(3)):\"binary\"==i.type&&\"undefined\"!=typeof cptable&&i.codepage&&(s=cptable.utils.decode(i.codepage,cptable.utils.encode(1252,s))),\"socialcalc:version:\"==s.slice(0,19)?xi.to_sheet(\"string\"==i.type?s:Be(s),i):function(r,i){return\"sep=\"==r.slice(0,4)||r.indexOf(\"\\t\")>=0||r.indexOf(\",\")>=0||r.indexOf(\";\")>=0?function(e,r){var i=r||{},s=\"\",o=i.dense?[]:{},a={s:{c:0,r:0},e:{c:0,r:0}};\"sep=\"==e.slice(0,4)&&10==e.charCodeAt(5)?(s=e.charAt(4),e=e.slice(6)):s=function(e){for(var r={},i=!1,s=0,o=0;s<e.length;++s)34==(o=e.charCodeAt(s))?i=!i:!i&&o in t&&(r[o]=(r[o]||0)+1);for(s in o=[],r)r.hasOwnProperty(s)&&o.push([r[s],s]);if(!o.length)for(s in r=n)r.hasOwnProperty(s)&&o.push([r[s],s]);return o.sort((function(e,t){return e[0]-t[0]||n[e[1]]-n[t[1]]})),t[o.pop()[1]]}(e.slice(0,1024));var c=0,l=0,h=0,d=0,u=0,f=s.charCodeAt(0),g=!1,p=0;e=e.replace(/\\r\\n/gm,\"\\n\");var m,C,b=null!=i.dateNF?(C=(C=\"number\"==typeof(m=i.dateNF)?T._table[m]:m).replace(P,\"(\\\\d+)\"),new RegExp(\"^\"+C+\"$\")):null;function v(){var t=e.slice(d,u),n={};if('\"'==t.charAt(0)&&'\"'==t.charAt(t.length-1)&&(t=t.slice(1,-1).replace(/\"\"/g,'\"')),0===t.length)n.t=\"z\";else if(i.raw)n.t=\"s\",n.v=t;else if(0===t.trim().length)n.t=\"s\",n.v=t;else if(61==t.charCodeAt(0))34==t.charCodeAt(1)&&34==t.charCodeAt(t.length-1)?(n.t=\"s\",n.v=t.slice(2,-1).replace(/\"\"/g,'\"')):1!=t.length?(n.t=\"n\",n.f=t.slice(1)):(n.t=\"s\",n.v=t);else if(\"TRUE\"==t)n.t=\"b\",n.v=!0;else if(\"FALSE\"==t)n.t=\"b\",n.v=!1;else if(isNaN(h=te(t)))if(!isNaN(ne(t).getDate())||b&&t.match(b)){n.z=i.dateNF||T._table[14];var r=0;b&&t.match(b)&&(t=function(e,t,n){var r=-1,i=-1,s=-1,o=-1,a=-1,c=-1;(t.match(P)||[]).forEach((function(e,t){var l=parseInt(n[t+1],10);switch(e.toLowerCase().charAt(0)){case\"y\":r=l;break;case\"d\":s=l;break;case\"h\":o=l;break;case\"s\":c=l;break;case\"m\":o>=0?a=l:i=l}})),c>=0&&-1==a&&i>=0&&(a=i,i=-1);var l=(\"\"+(r>=0?r:(new Date).getFullYear())).slice(-4)+\"-\"+(\"00\"+(i>=1?i:1)).slice(-2)+\"-\"+(\"00\"+(s>=1?s:1)).slice(-2);7==l.length&&(l=\"0\"+l),8==l.length&&(l=\"20\"+l);var h=(\"00\"+(o>=0?o:0)).slice(-2)+\":\"+(\"00\"+(a>=0?a:0)).slice(-2)+\":\"+(\"00\"+(c>=0?c:0)).slice(-2);return-1==o&&-1==a&&-1==c?l:-1==r&&-1==i&&-1==s?h:l+\"T\"+h}(0,i.dateNF,t.match(b)||[]),r=1),i.cellDates?(n.t=\"d\",n.v=J(t,r)):(n.t=\"n\",n.v=z(J(t,r))),!1!==i.cellText&&(n.w=T.format(n.z,n.v instanceof Date?z(n.v):n.v)),i.cellNF||delete n.z}else n.t=\"s\",n.v=t;else n.t=\"n\",!1!==i.cellText&&(n.w=t),n.v=h;if(\"z\"==n.t||(i.dense?(o[c]||(o[c]=[]),o[c][l]=n):o[Kt({c:l,r:c})]=n),d=u+1,a.e.c<l&&(a.e.c=l),a.e.r<c&&(a.e.r=c),p==f)++l;else if(l=0,++c,i.sheetRows&&i.sheetRows<=c)return!0}e:for(;u<e.length;++u)switch(p=e.charCodeAt(u)){case 34:g=!g;break;case f:case 10:case 13:if(!g&&v())break e}return u-d>0&&v(),o[\"!ref\"]=Ut(a),o}(r,i):en(function(t,n){var r=n||{},i=[];if(!t||0===t.length)return i;for(var s=t.split(/[\\r\\n]/),o=s.length-1;o>=0&&0===s[o].length;)--o;for(var a=10,c=0,l=0;l<=o;++l)-1==(c=s[l].indexOf(\" \"))?c=s[l].length:c++,a=Math.max(a,c);for(l=0;l<=o;++l){i[l]=[];var h=0;for(e(s[l].slice(0,a).trim(),i,l,h,r),h=1;h<=(s[l].length-a)/10+1;++h)e(s[l].slice(a+10*(h-1),a+10*h).trim(),i,l,h,r)}return r.sheetRows&&(i=i.slice(0,r.sheetRows)),i}(r,i),i)}(s,i)}return{to_workbook:function(e,t){return Qt(r(e,t),t)},to_sheet:r,from_sheet:function(e){for(var t,n=[],r=Yt(e[\"!ref\"]),i=Array.isArray(e),s=r.s.r;s<=r.e.r;++s){for(var o=[],a=r.s.c;a<=r.e.c;++a){var c=Kt({r:s,c:a});if((t=i?(e[s]||[])[a]:e[c])&&null!=t.v){for(var l=(t.w||(Jt(t),t.w)||\"\").slice(0,10);l.length<10;)l+=\" \";o.push(l+(0===a?\" \":\"\"))}else o.push(\"          \")}n.push(o.join(\"\"))}return n.join(\"\\n\")}}}(),ki=function(){function e(e,t){if(!e)return e;var n=t||{},r=n.dense?[]:{},i=\"Sheet1\",s=0,c={},l=[i],h={s:{r:0,c:0},e:{r:0,c:0}},d=n.sheetRows||0;if(2==e[2])n.Enum=o;else if(26==e[2])n.Enum=a;else{if(14!=e[2])throw new Error(\"Unrecognized LOTUS BOF \"+e[2]);n.Enum=a,n.qpro=!0,e.l=0}return function(e,t,n){if(e){Bt(e,e.l||0);for(var r=n.Enum||o;e.l<e.length;){var i=e.read_shift(2),s=r[i]||r[255],a=e.read_shift(2),c=e.l+a,l=(s.f||Ot)(e,a,n);if(e.l=c,t(l,0,i))return}}}(e,(function(t,o,a){if(2==e[2])switch(a){case 0:n.vers=t,t>=4096&&(n.qpro=!0);break;case 6:h=t;break;case 15:n.qpro||(t[1].v=t[1].v.slice(1));case 13:case 14:case 16:case 51:14==a&&112==(112&t[2])&&(15&t[2])>1&&(15&t[2])<15&&(t[1].z=n.dateNF||T._table[14],n.cellDates&&(t[1].t=\"d\",t[1].v=K(t[1].v))),n.dense?(r[t[0].r]||(r[t[0].r]=[]),r[t[0].r][t[0].c]=t[1]):r[Kt(t[0])]=t[1]}else switch(a){case 22:t[1].v=t[1].v.slice(1);case 23:case 24:case 25:case 37:case 39:case 40:if(t[3]>s&&(r[\"!ref\"]=Ut(h),c[i]=r,r=n.dense?[]:{},h={s:{r:0,c:0},e:{r:0,c:0}},l.push(i=\"Sheet\"+((s=t[3])+1))),d>0&&t[0].r>=d)break;n.dense?(r[t[0].r]||(r[t[0].r]=[]),r[t[0].r][t[0].c]=t[1]):r[Kt(t[0])]=t[1],h.e.c<t[0].c&&(h.e.c=t[0].c),h.e.r<t[0].r&&(h.e.r=t[0].r)}}),n),r[\"!ref\"]=Ut(h),c[i]=r,{SheetNames:l,Sheets:c}}function t(e,t,n){var r=[{c:0,r:0},{t:\"n\",v:0},0];return n.qpro&&20768!=n.vers?(r[0].c=e.read_shift(1),e.l++,r[0].r=e.read_shift(2),e.l+=2):(r[2]=e.read_shift(1),r[0].c=e.read_shift(2),r[0].r=e.read_shift(2)),r}function n(e,n,r){var i=e.l+n,s=t(e,0,r);if(s[1].t=\"s\",20768==r.vers){e.l++;var o=e.read_shift(1);return s[1].v=e.read_shift(o,\"utf8\"),s}return r.qpro&&e.l++,s[1].v=e.read_shift(i-e.l,\"cstr\"),s}function r(e){var t=[{c:0,r:0},{t:\"n\",v:0},0];return t[0].r=e.read_shift(2),t[3]=e[e.l++],t[0].c=e[e.l++],t}function i(e,t){var n=r(e),i=e.read_shift(4),s=e.read_shift(4),o=e.read_shift(2);return 65535==o?(n[1].v=0,n):(n[1].v=(2*(32768&o)-1)*(((o=(32767&o)-16446)>0?s<<o:s>>>-o)+(o>-32?i<<o+32:i>>>-(o+32))),n)}function s(e,t){var n=r(e),i=e.read_shift(8,\"f\");return n[1].v=i,n}var o={0:{n:\"BOF\",f:Rr},1:{n:\"EOF\"},2:{n:\"CALCMODE\"},3:{n:\"CALCORDER\"},4:{n:\"SPLIT\"},5:{n:\"SYNC\"},6:{n:\"RANGE\",f:function(e){var t={s:{c:0,r:0},e:{c:0,r:0}};return t.s.c=e.read_shift(2),t.s.r=e.read_shift(2),t.e.c=e.read_shift(2),t.e.r=e.read_shift(2),65535==t.s.c&&(t.s.c=t.e.c=t.s.r=t.e.r=0),t}},7:{n:\"WINDOW1\"},8:{n:\"COLW1\"},9:{n:\"WINTWO\"},10:{n:\"COLW2\"},11:{n:\"NAME\"},12:{n:\"BLANK\"},13:{n:\"INTEGER\",f:function(e,n,r){var i=t(e,0,r);return i[1].v=e.read_shift(2,\"i\"),i}},14:{n:\"NUMBER\",f:function(e,n,r){var i=t(e,0,r);return i[1].v=e.read_shift(8,\"f\"),i}},15:{n:\"LABEL\",f:n},16:{n:\"FORMULA\",f:function(e,n,r){var i=e.l+n,s=t(e,0,r);if(s[1].v=e.read_shift(8,\"f\"),r.qpro)e.l=i;else{var o=e.read_shift(2);e.l+=o}return s}},24:{n:\"TABLE\"},25:{n:\"ORANGE\"},26:{n:\"PRANGE\"},27:{n:\"SRANGE\"},28:{n:\"FRANGE\"},29:{n:\"KRANGE1\"},32:{n:\"HRANGE\"},35:{n:\"KRANGE2\"},36:{n:\"PROTEC\"},37:{n:\"FOOTER\"},38:{n:\"HEADER\"},39:{n:\"SETUP\"},40:{n:\"MARGINS\"},41:{n:\"LABELFMT\"},42:{n:\"TITLES\"},43:{n:\"SHEETJS\"},45:{n:\"GRAPH\"},46:{n:\"NGRAPH\"},47:{n:\"CALCCOUNT\"},48:{n:\"UNFORMATTED\"},49:{n:\"CURSORW12\"},50:{n:\"WINDOW\"},51:{n:\"STRING\",f:n},55:{n:\"PASSWORD\"},56:{n:\"LOCKED\"},60:{n:\"QUERY\"},61:{n:\"QUERYNAME\"},62:{n:\"PRINT\"},63:{n:\"PRINTNAME\"},64:{n:\"GRAPH2\"},65:{n:\"GRAPHNAME\"},66:{n:\"ZOOM\"},67:{n:\"SYMSPLIT\"},68:{n:\"NSROWS\"},69:{n:\"NSCOLS\"},70:{n:\"RULER\"},71:{n:\"NNAME\"},72:{n:\"ACOMM\"},73:{n:\"AMACRO\"},74:{n:\"PARSE\"},255:{n:\"\",f:Ot}},a={0:{n:\"BOF\"},1:{n:\"EOF\"},3:{n:\"??\"},4:{n:\"??\"},5:{n:\"??\"},6:{n:\"??\"},7:{n:\"??\"},9:{n:\"??\"},10:{n:\"??\"},11:{n:\"??\"},12:{n:\"??\"},14:{n:\"??\"},15:{n:\"??\"},16:{n:\"??\"},17:{n:\"??\"},18:{n:\"??\"},19:{n:\"??\"},21:{n:\"??\"},22:{n:\"LABEL16\",f:function(e,t){var n=r(e);return n[1].t=\"s\",n[1].v=e.read_shift(t-4,\"cstr\"),n}},23:{n:\"NUMBER17\",f:i},24:{n:\"NUMBER18\",f:function(e,t){var n=r(e);n[1].v=e.read_shift(2);var i=n[1].v>>1;if(1&n[1].v)switch(7&i){case 1:i=500*(i>>3);break;case 2:i=(i>>3)/20;break;case 4:i=(i>>3)/2e3;break;case 6:i=(i>>3)/16;break;case 7:i=(i>>3)/64;break;default:throw\"unknown NUMBER_18 encoding \"+(7&i)}return n[1].v=i,n}},25:{n:\"FORMULA19\",f:function(e,t){var n=i(e);return e.l+=t-14,n}},26:{n:\"??\"},27:{n:\"??\"},28:{n:\"??\"},29:{n:\"??\"},30:{n:\"??\"},31:{n:\"??\"},33:{n:\"??\"},37:{n:\"NUMBER25\",f:function(e,t){var n=r(e),i=e.read_shift(4);return n[1].v=i>>6,n}},39:{n:\"NUMBER27\",f:s},40:{n:\"FORMULA28\",f:function(e,t){var n=s(e);return e.l+=t-10,n}},255:{n:\"\",f:Ot}};return{to_workbook:function(t,n){switch(n.type){case\"base64\":return e(y(m.decode(t)),n);case\"binary\":return e(y(t),n);case\"buffer\":case\"array\":return e(t,n)}throw\"Unsupported type \"+n.type}}}(),_i=function(){var e=$e(\"t\"),t=$e(\"rPr\"),n=/<(?:\\w+:)?r>/g,r=/<\\/(?:\\w+:)?r>/,i=/\\r\\n/g;function s(n){var r=[[],\"\",[]],s=n.match(e);if(!s)return\"\";r[1]=s[1];var o=n.match(t);return o&&function(e,t,n){var r={},i=\"\",s=!1,o=e.match(fe),a=0;if(o)for(;a!=o.length;++a){var c=me(o[a]);switch(c[0].replace(/\\w*:/g,\"\")){case\"<condense\":case\"<extend\":break;case\"<shadow\":if(!c.val)break;case\"<shadow>\":case\"<shadow/>\":r.shadow=1;break;case\"</shadow>\":break;case\"<charset\":if(\"1\"==c.val)break;parseInt(c.val,10);break;case\"<outline\":if(!c.val)break;case\"<outline>\":case\"<outline/>\":r.outline=1;break;case\"</outline>\":break;case\"<rFont\":r.name=c.val;break;case\"<sz\":r.sz=c.val;break;case\"<strike\":if(!c.val)break;case\"<strike>\":case\"<strike/>\":r.strike=1;break;case\"</strike>\":break;case\"<u\":if(!c.val)break;switch(c.val){case\"double\":r.uval=\"double\";break;case\"singleAccounting\":r.uval=\"single-accounting\";break;case\"doubleAccounting\":r.uval=\"double-accounting\"}case\"<u>\":case\"<u/>\":r.u=1;break;case\"</u>\":break;case\"<b\":if(\"0\"==c.val)break;case\"<b>\":case\"<b/>\":r.b=1;break;case\"</b>\":break;case\"<i\":if(\"0\"==c.val)break;case\"<i>\":case\"<i/>\":r.i=1;break;case\"</i>\":break;case\"<color\":c.rgb&&(r.color=c.rgb.slice(2,8));break;case\"<family\":r.family=c.val;break;case\"<vertAlign\":i=c.val;break;case\"<scheme\":break;case\"<extLst\":case\"<extLst>\":case\"</extLst>\":break;case\"<ext\":s=!0;break;case\"</ext>\":s=!1;break;default:if(47!==c[0].charCodeAt(1)&&!s)throw new Error(\"Unrecognized rich format \"+c[0])}}var l=[];r.u&&l.push(\"text-decoration: underline;\"),r.uval&&l.push(\"text-underline-style:\"+r.uval+\";\"),r.sz&&l.push(\"font-size:\"+r.sz+\"pt;\"),r.outline&&l.push(\"text-effect: outline;\"),r.shadow&&l.push(\"text-shadow: auto;\"),t.push('<span style=\"'+l.join(\"\")+'\">'),r.b&&(t.push(\"<b>\"),n.push(\"</b>\")),r.i&&(t.push(\"<i>\"),n.push(\"</i>\")),r.strike&&(t.push(\"<s>\"),n.push(\"</s>\")),\"superscript\"==i?i=\"sup\":\"subscript\"==i&&(i=\"sub\"),\"\"!=i&&(t.push(\"<\"+i+\">\"),n.push(\"</\"+i+\">\")),n.push(\"</span>\")}(o[1],r[0],r[2]),r[0].join(\"\")+r[1].replace(i,\"<br/>\")+r[2].join(\"\")}return function(e){return e.replace(n,\"\").split(r).map(s).join(\"\")}}(),Ti=/<(?:\\w+:)?t[^>]*>([^<]*)<\\/(?:\\w+:)?t>/g,Ri=/<(?:\\w+:)?r>/,Bi=/<(?:\\w+:)?rPh.*?>([\\s\\S]*?)<\\/(?:\\w+:)?rPh>/g;function Oi(e,t){var n=!t||t.cellHTML,r={};return e?(e.match(/^\\s*<(?:\\w+:)?t[^>]*>/)?(r.t=ye(Be(e.slice(e.indexOf(\">\")+1).split(/<\\/(?:\\w+:)?t>/)[0]||\"\")),r.r=Be(e),n&&(r.h=_e(r.t))):e.match(Ri)&&(r.r=Be(e),r.t=ye(Be((e.replace(Bi,\"\").match(Ti)||[]).join(\"\").replace(fe,\"\"))),n&&(r.h=_i(r.r))),r):null}var Li=/<(?:\\w+:)?sst([^>]*)>([\\s\\S]*)<\\/(?:\\w+:)?sst>/,Pi=/<(?:\\w+:)?(?:si|sstItem)>/g,Fi=/<\\/(?:\\w+:)?(?:si|sstItem)>/;Vn.SST=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\";var Ni=/^\\s|\\s$|[\\t\\n\\r]/;function Mi(e,t){if(!t.bookSST)return\"\";var n=[de];n[n.length]=Xe(\"sst\",null,{xmlns:Qe.main[0],count:e.Count,uniqueCount:e.Unique});for(var r=0;r!=e.length;++r)if(null!=e[r]){var i=e[r],s=\"<si>\";i.r?s+=i.r:(s+=\"<t\",i.t||(i.t=\"\"),i.t.match(Ni)&&(s+=' xml:space=\"preserve\"'),s+=\">\"+xe(i.t)+\"</t>\"),n[n.length]=s+=\"</si>\"}return n.length>2&&(n[n.length]=\"</sst>\",n[1]=n[1].replace(\"/>\",\">\")),n.join(\"\")}var Di=function(e,t){var n=!1;return null==t&&(n=!0,t=Lt(15+4*e.t.length)),t.write_shift(1,0),rn(e.t,t),n?t.slice(0,t.l):t};function $i(e){var t=Ft();Nt(t,\"BrtBeginSst\",function(e,t){return t||(t=Lt(8)),t.write_shift(4,e.Count),t.write_shift(4,e.Unique),t}(e));for(var n=0;n<e.length;++n)Nt(t,\"BrtSSTItem\",Di(e[n]));return Nt(t,\"BrtEndSst\"),t.end()}function Wi(e){if(\"undefined\"!=typeof cptable)return cptable.utils.encode(i,e);for(var t=[],n=e.split(\"\"),r=0;r<n.length;++r)t[r]=n[r].charCodeAt(0);return t}function Hi(e,t){var n={};return n.Major=e.read_shift(2),n.Minor=e.read_shift(2),t>=4&&(e.l+=t-4),n}function Gi(e){for(var t=e.read_shift(4),n=e.l+t-4,r={},i=e.read_shift(4),s=[];i-- >0;)s.push({t:e.read_shift(4),v:e.read_shift(0,\"lpp4\")});if(r.name=e.read_shift(0,\"lpp4\"),r.comps=s,e.l!=n)throw new Error(\"Bad DataSpaceMapEntry: \"+e.l+\" != \"+n);return r}function Vi(e,t){var n=e.l+t,r={};r.Flags=63&e.read_shift(4),e.l+=4,r.AlgID=e.read_shift(4);var i=!1;switch(r.AlgID){case 26126:case 26127:case 26128:i=36==r.Flags;break;case 26625:i=4==r.Flags;break;case 0:i=16==r.Flags||4==r.Flags||36==r.Flags;break;default:throw\"Unrecognized encryption algorithm: \"+r.AlgID}if(!i)throw new Error(\"Encryption Flags/AlgID mismatch\");return r.AlgIDHash=e.read_shift(4),r.KeySize=e.read_shift(4),r.ProviderType=e.read_shift(4),e.l+=8,r.CSPName=e.read_shift(n-e.l>>1,\"utf16le\"),e.l=n,r}function ji(e,t){var n={},r=e.l+t;return e.l+=4,n.Salt=e.slice(e.l,e.l+16),e.l+=16,n.Verifier=e.slice(e.l,e.l+16),e.l+=16,e.read_shift(4),n.VerifierHash=e.slice(e.l,r),e.l=r,n}function Zi(e){if(36!=(63&e.read_shift(4)))throw new Error(\"EncryptionInfo mismatch\");var t=e.read_shift(4);return{t:\"Std\",h:Vi(e,t),v:ji(e,e.length-e.l)}}function zi(){throw new Error(\"File is password-protected: ECMA-376 Extensible\")}function Ki(e){var t=[\"saltSize\",\"blockSize\",\"keyBits\",\"hashSize\",\"cipherAlgorithm\",\"cipherChaining\",\"hashAlgorithm\",\"saltValue\"];e.l+=4;var n=e.read_shift(e.length-e.l,\"utf8\"),r={};return n.replace(fe,(function(e){var n=me(e);switch(Ce(n[0])){case\"<?xml\":break;case\"<encryption\":case\"</encryption>\":break;case\"<keyData\":t.forEach((function(e){r[e]=n[e]}));break;case\"<dataIntegrity\":r.encryptedHmacKey=n.encryptedHmacKey,r.encryptedHmacValue=n.encryptedHmacValue;break;case\"<keyEncryptors>\":case\"<keyEncryptors\":r.encs=[];break;case\"</keyEncryptors>\":break;case\"<keyEncryptor\":r.uri=n.uri;break;case\"</keyEncryptor>\":break;case\"<encryptedKey\":r.encs.push(n);break;default:throw n[0]}})),r}function Xi(e){var t,n,r=0,i=Wi(e),s=i.length+1;for((t=I(s))[0]=i.length,n=1;n!=s;++n)t[n]=i[n-1];for(n=s-1;n>=0;--n)r=((0==(16384&r)?0:1)|r<<1&32767)^t[n];return 52811^r}var Ui,Yi,Ji,Qi,qi=(Ui=[187,255,255,186,255,255,185,128,0,190,15,0,191,15,0],Yi=[57840,7439,52380,33984,4364,3600,61902,12606,6258,57657,54287,34041,10252,43370,20163],Ji=[44796,19929,39858,10053,20106,40212,10761,31585,63170,64933,60267,50935,40399,11199,17763,35526,1453,2906,5812,11624,23248,885,1770,3540,7080,14160,28320,56640,55369,41139,20807,41614,21821,43642,17621,28485,56970,44341,19019,38038,14605,29210,60195,50791,40175,10751,21502,43004,24537,18387,36774,3949,7898,15796,31592,63184,47201,24803,49606,37805,14203,28406,56812,17824,35648,1697,3394,6788,13576,27152,43601,17539,35078,557,1114,2228,4456,30388,60776,51953,34243,7079,14158,28316,14128,28256,56512,43425,17251,34502,7597,13105,26210,52420,35241,883,1766,3532,4129,8258,16516,33032,4657,9314,18628],Qi=function(e,t){return 255&((n=e^t)/2|128*n);var n},function(e){for(var t,n=Wi(e),r=function(e){for(var t=Yi[e.length-1],n=104,r=e.length-1;r>=0;--r)for(var i=e[r],s=0;7!=s;++s)64&i&&(t^=Ji[n]),i*=2,--n;return t}(n),i=n.length,s=I(16),o=0;16!=o;++o)s[o]=0;for(1==(1&i)&&(s[i]=Qi(Ui[0],r>>8),s[--i]=Qi(n[n.length-1],255&r));i>0;)s[--i]=Qi(n[i],r>>8),s[--i]=Qi(n[i],255&r);for(i=15,t=15-n.length;t>0;)s[i]=Qi(Ui[t],r>>8),--t,s[--i]=Qi(n[i],255&r),--i,--t;return s}),es=function(){function e(e,n){switch(n.type){case\"base64\":return t(m.decode(e),n);case\"binary\":return t(e,n);case\"buffer\":return t(e.toString(\"binary\"),n);case\"array\":return t(Q(e),n)}throw new Error(\"Unrecognized type \"+n.type)}function t(e,t){var n=(t||{}).dense?[]:{};if(!e.match(/\\\\trowd/))throw new Error(\"RTF missing table\");return n[\"!ref\"]=Ut({s:{c:0,r:0},e:{c:0,r:0}}),n}return{to_workbook:function(t,n){return Qt(e(t,n),n)},to_sheet:e,from_sheet:function(e){for(var t,n=[\"{\\\\rtf1\\\\ansi\"],r=Yt(e[\"!ref\"]),i=Array.isArray(e),s=r.s.r;s<=r.e.r;++s){n.push(\"\\\\trowd\\\\trautofit1\");for(var o=r.s.c;o<=r.e.c;++o)n.push(\"\\\\cellx\"+(o+1));for(n.push(\"\\\\pard\\\\intbl\"),o=r.s.c;o<=r.e.c;++o){var a=Kt({r:s,c:o});(t=i?(e[s]||[])[o]:e[a])&&(null!=t.v||t.f&&!t.F)&&(n.push(\" \"+(t.w||(Jt(t),t.w))),n.push(\"\\\\cell\"))}n.push(\"\\\\pard\\\\intbl\\\\row\")}return n.join(\"\")+\"}\"}}}();function ts(e){for(var t=0,n=1;3!=t;++t)n=256*n+(e[t]>255?255:e[t]<0?0:e[t]);return n.toString(16).toUpperCase().slice(1)}function ns(e,t){if(0===t)return e;var n=function(e){var t=e[0]/255,n=e[1]/255,r=e[2]/255,i=Math.max(t,n,r),s=Math.min(t,n,r),o=i-s;if(0===o)return[0,0,t];var a,c=0,l=i+s;switch(a=o/(l>1?2-l:l),i){case t:c=((n-r)/o+6)%6;break;case n:c=(r-t)/o+2;break;case r:c=(t-n)/o+4}return[c/6,a,l/2]}(function(e){var t=e.slice(\"#\"===e[0]?1:0).slice(0,6);return[parseInt(t.slice(0,2),16),parseInt(t.slice(2,4),16),parseInt(t.slice(4,6),16)]}(e));return n[2]=t<0?n[2]*(1+t):1-(1-n[2])*(1-t),ts(function(e){var t,n=e[1],r=e[2],i=2*n*(r<.5?r:1-r),s=r-i/2,o=[s,s,s],a=6*e[0];if(0!==n)switch(0|a){case 0:case 6:t=i*a,o[0]+=i,o[1]+=t;break;case 1:o[0]+=t=i*(2-a),o[1]+=i;break;case 2:t=i*(a-2),o[1]+=i,o[2]+=t;break;case 3:o[1]+=t=i*(4-a),o[2]+=i;break;case 4:t=i*(a-4),o[2]+=i,o[0]+=t;break;case 5:o[2]+=t=i*(6-a),o[0]+=i}for(var c=0;3!=c;++c)o[c]=Math.round(255*o[c]);return o}(n))}var rs=6;function is(e){return Math.floor((e+Math.round(128/rs)/256)*rs)}function ss(e){return Math.floor((e-5)/rs*100+.5)/100}function os(e){return Math.round((e*rs+5)/rs*256)/256}function as(e){return os(ss(is(e)))}function cs(e){var t=Math.abs(e-as(e)),n=rs;if(t>.005)for(rs=1;rs<15;++rs)Math.abs(e-as(e))<=t&&(t=Math.abs(e-as(e)),n=rs);rs=n}function ls(e){e.width?(e.wpx=is(e.width),e.wch=ss(e.wpx),e.MDW=rs):e.wpx?(e.wch=ss(e.wpx),e.width=os(e.wch),e.MDW=rs):\"number\"==typeof e.wch&&(e.width=os(e.wch),e.wpx=is(e.width),e.MDW=rs),e.customWidth&&delete e.customWidth}function hs(e){return 96*e/96}function ds(e){return 96*e/96}var us,fs,gs,ps,ms,Cs={None:\"none\",Solid:\"solid\",Gray50:\"mediumGray\",Gray75:\"darkGray\",Gray25:\"lightGray\",HorzStripe:\"darkHorizontal\",VertStripe:\"darkVertical\",ReverseDiagStripe:\"darkDown\",DiagStripe:\"darkUp\",DiagCross:\"darkGrid\",ThickDiagCross:\"darkTrellis\",ThinHorzStripe:\"lightHorizontal\",ThinVertStripe:\"lightVertical\",ThinReverseDiagStripe:\"lightDown\",ThinHorzCross:\"lightGrid\"},bs=[\"numFmtId\",\"fillId\",\"fontId\",\"borderId\",\"xfId\"],vs=[\"applyAlignment\",\"applyBorder\",\"applyFill\",\"applyFont\",\"applyNumberFormat\",\"applyProtection\",\"pivotButton\",\"quotePrefix\"],Is=(us=/<(?:\\w+:)?numFmts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?numFmts>/,fs=/<(?:\\w+:)?cellXfs([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?cellXfs>/,gs=/<(?:\\w+:)?fills([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fills>/,ps=/<(?:\\w+:)?fonts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fonts>/,ms=/<(?:\\w+:)?borders([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?borders>/,function(e,t,n){var r,i={};return e?((r=(e=e.replace(/<!--([\\s\\S]*?)-->/gm,\"\").replace(/<!DOCTYPE[^\\[]*\\[[^\\]]*\\]>/gm,\"\")).match(us))&&function(e,t,n){t.NumberFmt=[];for(var r=W(T._table),i=0;i<r.length;++i)t.NumberFmt[r[i]]=T._table[r[i]];var s=e[0].match(fe);if(s)for(i=0;i<s.length;++i){var o=me(s[i]);switch(Ce(o[0])){case\"<numFmts\":case\"</numFmts>\":case\"<numFmts/>\":case\"<numFmts>\":break;case\"<numFmt\":var a=ye(Be(o.formatCode)),c=parseInt(o.numFmtId,10);if(t.NumberFmt[c]=a,c>0){if(c>392){for(c=392;c>60&&null!=t.NumberFmt[c];--c);t.NumberFmt[c]=a}T.load(a,c)}break;case\"</numFmt>\":break;default:if(n.WTF)throw new Error(\"unrecognized \"+o[0]+\" in numFmts\")}}}(r,i,n),(r=e.match(ps))&&function(e,t,n,r){t.Fonts=[];var i={},s=!1;e[0].match(fe).forEach((function(e){var o=me(e);switch(Ce(o[0])){case\"<fonts\":case\"<fonts>\":case\"</fonts>\":break;case\"<font\":case\"<font>\":break;case\"</font>\":case\"<font/>\":t.Fonts.push(i),i={};break;case\"<name\":o.val&&(i.name=o.val);break;case\"<name/>\":case\"</name>\":break;case\"<b\":i.bold=o.val?Re(o.val):1;break;case\"<b/>\":i.bold=1;break;case\"<i\":i.italic=o.val?Re(o.val):1;break;case\"<i/>\":i.italic=1;break;case\"<u\":switch(o.val){case\"none\":i.underline=0;break;case\"single\":i.underline=1;break;case\"double\":i.underline=2;break;case\"singleAccounting\":i.underline=33;break;case\"doubleAccounting\":i.underline=34}break;case\"<u/>\":i.underline=1;break;case\"<strike\":i.strike=o.val?Re(o.val):1;break;case\"<strike/>\":i.strike=1;break;case\"<outline\":i.outline=o.val?Re(o.val):1;break;case\"<outline/>\":i.outline=1;break;case\"<shadow\":i.shadow=o.val?Re(o.val):1;break;case\"<shadow/>\":i.shadow=1;break;case\"<condense\":i.condense=o.val?Re(o.val):1;break;case\"<condense/>\":i.condense=1;break;case\"<extend\":i.extend=o.val?Re(o.val):1;break;case\"<extend/>\":i.extend=1;break;case\"<sz\":o.val&&(i.sz=+o.val);break;case\"<sz/>\":case\"</sz>\":break;case\"<vertAlign\":o.val&&(i.vertAlign=o.val);break;case\"<vertAlign/>\":case\"</vertAlign>\":break;case\"<family\":o.val&&(i.family=parseInt(o.val,10));break;case\"<family/>\":case\"</family>\":break;case\"<scheme\":o.val&&(i.scheme=o.val);break;case\"<scheme/>\":case\"</scheme>\":break;case\"<charset\":if(\"1\"==o.val)break;o.codepage=a[parseInt(o.val,10)];break;case\"<color\":if(i.color||(i.color={}),o.auto&&(i.color.auto=Re(o.auto)),o.rgb)i.color.rgb=o.rgb.slice(-6);else if(o.indexed){i.color.index=parseInt(o.indexed,10);var c=Mn[i.color.index];if(81==i.color.index&&(c=Mn[1]),!c)throw new Error(e);i.color.rgb=c[0].toString(16)+c[1].toString(16)+c[2].toString(16)}else o.theme&&(i.color.theme=parseInt(o.theme,10),o.tint&&(i.color.tint=parseFloat(o.tint)),o.theme&&n.themeElements&&n.themeElements.clrScheme&&(i.color.rgb=ns(n.themeElements.clrScheme[i.color.theme].rgb,i.color.tint||0)));break;case\"<color/>\":case\"</color>\":break;case\"<extLst\":case\"<extLst>\":case\"</extLst>\":break;case\"<ext\":s=!0;break;case\"</ext>\":s=!1;break;default:if(r&&r.WTF&&!s)throw new Error(\"unrecognized \"+o[0]+\" in fonts\")}}))}(r,i,t,n),(r=e.match(gs))&&function(e,t,n,r){t.Fills=[];var i={},s=!1;e[0].match(fe).forEach((function(e){var n=me(e);switch(Ce(n[0])){case\"<fills\":case\"<fills>\":case\"</fills>\":break;case\"<fill>\":case\"<fill\":case\"<fill/>\":t.Fills.push(i={});break;case\"</fill>\":case\"<gradientFill>\":break;case\"<gradientFill\":case\"</gradientFill>\":t.Fills.push(i),i={};break;case\"<patternFill\":case\"<patternFill>\":n.patternType&&(i.patternType=n.patternType);break;case\"<patternFill/>\":case\"</patternFill>\":break;case\"<bgColor\":i.bgColor||(i.bgColor={}),n.indexed&&(i.bgColor.indexed=parseInt(n.indexed,10)),n.theme&&(i.bgColor.theme=parseInt(n.theme,10)),n.tint&&(i.bgColor.tint=parseFloat(n.tint)),n.rgb&&(i.bgColor.rgb=n.rgb.slice(-6));break;case\"<bgColor/>\":case\"</bgColor>\":break;case\"<fgColor\":i.fgColor||(i.fgColor={}),n.theme&&(i.fgColor.theme=parseInt(n.theme,10)),n.tint&&(i.fgColor.tint=parseFloat(n.tint)),n.rgb&&(i.fgColor.rgb=n.rgb.slice(-6));break;case\"<fgColor/>\":case\"</fgColor>\":break;case\"<stop\":case\"<stop/>\":case\"</stop>\":break;case\"<color\":case\"<color/>\":case\"</color>\":break;case\"<extLst\":case\"<extLst>\":case\"</extLst>\":break;case\"<ext\":s=!0;break;case\"</ext>\":s=!1;break;default:if(r&&r.WTF&&!s)throw new Error(\"unrecognized \"+n[0]+\" in fills\")}}))}(r,i,0,n),(r=e.match(ms))&&function(e,t,n,r){t.Borders=[];var i={},s=!1;e[0].match(fe).forEach((function(e){var n=me(e);switch(Ce(n[0])){case\"<borders\":case\"<borders>\":case\"</borders>\":break;case\"<border\":case\"<border>\":case\"<border/>\":i={},n.diagonalUp&&(i.diagonalUp=n.diagonalUp),n.diagonalDown&&(i.diagonalDown=n.diagonalDown),t.Borders.push(i);break;case\"</border>\":case\"<left/>\":break;case\"<left\":case\"<left>\":case\"</left>\":case\"<right/>\":break;case\"<right\":case\"<right>\":case\"</right>\":case\"<top/>\":break;case\"<top\":case\"<top>\":case\"</top>\":case\"<bottom/>\":break;case\"<bottom\":case\"<bottom>\":case\"</bottom>\":break;case\"<diagonal\":case\"<diagonal>\":case\"<diagonal/>\":case\"</diagonal>\":break;case\"<horizontal\":case\"<horizontal>\":case\"<horizontal/>\":case\"</horizontal>\":break;case\"<vertical\":case\"<vertical>\":case\"<vertical/>\":case\"</vertical>\":break;case\"<start\":case\"<start>\":case\"<start/>\":case\"</start>\":break;case\"<end\":case\"<end>\":case\"<end/>\":case\"</end>\":break;case\"<color\":case\"<color>\":break;case\"<color/>\":case\"</color>\":break;case\"<extLst\":case\"<extLst>\":case\"</extLst>\":break;case\"<ext\":s=!0;break;case\"</ext>\":s=!1;break;default:if(r&&r.WTF&&!s)throw new Error(\"unrecognized \"+n[0]+\" in borders\")}}))}(r,i,0,n),(r=e.match(fs))&&function(e,t,n){var r;t.CellXf=[];var i=!1;e[0].match(fe).forEach((function(e){var s=me(e),o=0;switch(Ce(s[0])){case\"<cellXfs\":case\"<cellXfs>\":case\"<cellXfs/>\":case\"</cellXfs>\":break;case\"<xf\":case\"<xf/>\":for(delete(r=s)[0],o=0;o<bs.length;++o)r[bs[o]]&&(r[bs[o]]=parseInt(r[bs[o]],10));for(o=0;o<vs.length;++o)r[vs[o]]&&(r[vs[o]]=Re(r[vs[o]]));if(r.numFmtId>392)for(o=392;o>60;--o)if(t.NumberFmt[r.numFmtId]==t.NumberFmt[o]){r.numFmtId=o;break}t.CellXf.push(r);break;case\"</xf>\":break;case\"<alignment\":case\"<alignment/>\":var a={};s.vertical&&(a.vertical=s.vertical),s.horizontal&&(a.horizontal=s.horizontal),null!=s.textRotation&&(a.textRotation=s.textRotation),s.indent&&(a.indent=s.indent),s.wrapText&&(a.wrapText=s.wrapText),r.alignment=a;break;case\"</alignment>\":break;case\"<protection\":case\"</protection>\":case\"<protection/>\":break;case\"<extLst\":case\"<extLst>\":case\"</extLst>\":break;case\"<ext\":i=!0;break;case\"</ext>\":i=!1;break;default:if(n&&n.WTF&&!i)throw new Error(\"unrecognized \"+s[0]+\" in cellXfs\")}}))}(r,i,n),i):i}),As=Xe(\"styleSheet\",null,{xmlns:Qe.main[0],\"xmlns:vt\":Qe.vt});function ys(e,t){var n,r=[de,As];return e.SSF&&null!=(n=function(e){var t=[\"<numFmts>\"];return[[5,8],[23,26],[41,44],[50,392]].forEach((function(n){for(var r=n[0];r<=n[1];++r)null!=e[r]&&(t[t.length]=Xe(\"numFmt\",null,{numFmtId:r,formatCode:xe(e[r])}))})),1===t.length?\"\":(t[t.length]=\"</numFmts>\",t[0]=Xe(\"numFmts\",null,{count:t.length-2}).replace(\"/>\",\">\"),t.join(\"\"))}(e.SSF))&&(r[r.length]=n),r[r.length]='<fonts count=\"1\"><font><sz val=\"12\"/><color theme=\"1\"/><name val=\"Calibri\"/><family val=\"2\"/><scheme val=\"minor\"/></font></fonts>',r[r.length]='<fills count=\"2\"><fill><patternFill patternType=\"none\"/></fill><fill><patternFill patternType=\"gray125\"/></fill></fills>',r[r.length]='<borders count=\"1\"><border><left/><right/><top/><bottom/><diagonal/></border></borders>',r[r.length]='<cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs>',(n=function(e){var t=[];return t[t.length]=Xe(\"cellXfs\",null),e.forEach((function(e){t[t.length]=Xe(\"xf\",null,e)})),t[t.length]=\"</cellXfs>\",2===t.length?\"\":(t[0]=Xe(\"cellXfs\",null,{count:t.length-2}).replace(\"/>\",\">\"),t.join(\"\"))}(t.cellXfs))&&(r[r.length]=n),r[r.length]='<cellStyles count=\"1\"><cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\"/></cellStyles>',r[r.length]='<dxfs count=\"0\"/>',r[r.length]='<tableStyles count=\"0\" defaultTableStyle=\"TableStyleMedium9\" defaultPivotStyle=\"PivotStyleMedium4\"/>',r.length>2&&(r[r.length]=\"</styleSheet>\",r[1]=r[1].replace(\"/>\",\">\")),r.join(\"\")}function ws(e,t,n){n||(n=Lt(6+4*t.length)),n.write_shift(2,e),rn(t,n);var r=n.length>n.l?n.slice(0,n.l):n;return null==n.l&&(n.l=n.length),r}Vn.STY=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\";var Ss=G([\"none\",\"solid\",\"mediumGray\",\"darkGray\",\"lightGray\",\"darkHorizontal\",\"darkVertical\",\"darkDown\",\"darkUp\",\"darkGrid\",\"darkTrellis\",\"lightHorizontal\",\"lightVertical\",\"lightDown\",\"lightUp\",\"lightGrid\",\"lightTrellis\",\"gray125\",\"gray0625\"]),xs=Ot;function Es(e,t){t||(t=Lt(84));var n=Ss[e.patternType];null==n&&(n=40),t.write_shift(4,n);var r=0;if(40!=n)for(xn({auto:1},t),xn({auto:1},t);r<12;++r)t.write_shift(4,0);else{for(;r<4;++r)t.write_shift(4,0);for(;r<12;++r)t.write_shift(4,0)}return t.length>t.l?t.slice(0,t.l):t}function ks(e,t,n){return n||(n=Lt(16)),n.write_shift(2,t||0),n.write_shift(2,e.numFmtId||0),n.write_shift(2,0),n.write_shift(2,0),n.write_shift(2,0),n.write_shift(1,0),n.write_shift(1,0),n.write_shift(1,0),n.write_shift(1,0),n.write_shift(1,0),n.write_shift(1,0),n}function _s(e,t){return t||(t=Lt(10)),t.write_shift(1,0),t.write_shift(1,0),t.write_shift(4,0),t.write_shift(4,0),t}var Ts=Ot;function Rs(e,t){var n=Ft();return Nt(n,\"BrtBeginStyleSheet\"),function(e,t){if(t){var n=0;[[5,8],[23,26],[41,44],[50,392]].forEach((function(e){for(var r=e[0];r<=e[1];++r)null!=t[r]&&++n})),0!=n&&(Nt(e,\"BrtBeginFmts\",tn(n)),[[5,8],[23,26],[41,44],[50,392]].forEach((function(n){for(var r=n[0];r<=n[1];++r)null!=t[r]&&Nt(e,\"BrtFmt\",ws(r,t[r]))})),Nt(e,\"BrtEndFmts\"))}}(n,e.SSF),function(e){Nt(e,\"BrtBeginFonts\",tn(1)),Nt(e,\"BrtFont\",function(e,t){t||(t=Lt(153)),t.write_shift(2,20*e.sz),function(e,t){t||(t=Lt(2)),t.write_shift(1,(e.italic?2:0)|(e.strike?8:0)|(e.outline?16:0)|(e.shadow?32:0)|(e.condense?64:0)|(e.extend?128:0)),t.write_shift(1,0)}(e,t),t.write_shift(2,e.bold?700:400);var n=0;\"superscript\"==e.vertAlign?n=1:\"subscript\"==e.vertAlign&&(n=2),t.write_shift(2,n),t.write_shift(1,e.underline||0),t.write_shift(1,e.family||0),t.write_shift(1,e.charset||0),t.write_shift(1,0),xn(e.color,t);var r=0;return\"major\"==e.scheme&&(r=1),\"minor\"==e.scheme&&(r=2),t.write_shift(1,r),rn(e.name,t),t.length>t.l?t.slice(0,t.l):t}({sz:12,color:{theme:1},name:\"Calibri\",family:2,scheme:\"minor\"})),Nt(e,\"BrtEndFonts\")}(n),function(e){Nt(e,\"BrtBeginFills\",tn(2)),Nt(e,\"BrtFill\",Es({patternType:\"none\"})),Nt(e,\"BrtFill\",Es({patternType:\"gray125\"})),Nt(e,\"BrtEndFills\")}(n),function(e){Nt(e,\"BrtBeginBorders\",tn(1)),Nt(e,\"BrtBorder\",function(e,t){return t||(t=Lt(51)),t.write_shift(1,0),_s(0,t),_s(0,t),_s(0,t),_s(0,t),_s(0,t),t.length>t.l?t.slice(0,t.l):t}()),Nt(e,\"BrtEndBorders\")}(n),function(e){Nt(e,\"BrtBeginCellStyleXFs\",tn(1)),Nt(e,\"BrtXF\",ks({numFmtId:0,fontId:0,fillId:0,borderId:0},65535)),Nt(e,\"BrtEndCellStyleXFs\")}(n),function(e,t){Nt(e,\"BrtBeginCellXFs\",tn(t.length)),t.forEach((function(t){Nt(e,\"BrtXF\",ks(t,0))})),Nt(e,\"BrtEndCellXFs\")}(n,t.cellXfs),function(e){Nt(e,\"BrtBeginStyles\",tn(1)),Nt(e,\"BrtStyle\",function(e,t){return t||(t=Lt(52)),t.write_shift(4,e.xfId),t.write_shift(2,1),t.write_shift(1,+e.builtinId),t.write_shift(1,0),fn(e.name||\"\",t),t.length>t.l?t.slice(0,t.l):t}({xfId:0,builtinId:0,name:\"Normal\"})),Nt(e,\"BrtEndStyles\")}(n),function(e){Nt(e,\"BrtBeginDXFs\",tn(0)),Nt(e,\"BrtEndDXFs\")}(n),function(e){Nt(e,\"BrtBeginTableStyles\",function(e,t,n){var r=Lt(2052);return r.write_shift(4,0),fn(\"TableStyleMedium9\",r),fn(\"PivotStyleMedium4\",r),r.length>r.l?r.slice(0,r.l):r}()),Nt(e,\"BrtEndTableStyles\")}(n),Nt(n,\"BrtEndStyleSheet\"),n.end()}function Bs(e,t,n){t.themeElements.clrScheme=[];var r={};(e[0].match(fe)||[]).forEach((function(e){var i=me(e);switch(i[0]){case\"<a:clrScheme\":case\"</a:clrScheme>\":break;case\"<a:srgbClr\":r.rgb=i.val;break;case\"<a:sysClr\":r.rgb=i.lastClr;break;case\"<a:dk1>\":case\"</a:dk1>\":case\"<a:lt1>\":case\"</a:lt1>\":case\"<a:dk2>\":case\"</a:dk2>\":case\"<a:lt2>\":case\"</a:lt2>\":case\"<a:accent1>\":case\"</a:accent1>\":case\"<a:accent2>\":case\"</a:accent2>\":case\"<a:accent3>\":case\"</a:accent3>\":case\"<a:accent4>\":case\"</a:accent4>\":case\"<a:accent5>\":case\"</a:accent5>\":case\"<a:accent6>\":case\"</a:accent6>\":case\"<a:hlink>\":case\"</a:hlink>\":case\"<a:folHlink>\":case\"</a:folHlink>\":\"/\"===i[0].charAt(1)?(t.themeElements.clrScheme.push(r),r={}):r.name=i[0].slice(3,i[0].length-1);break;default:if(n&&n.WTF)throw new Error(\"Unrecognized \"+i[0]+\" in clrScheme\")}}))}function Os(){}function Ls(){}Vn.THEME=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\";var Ps=/<a:clrScheme([^>]*)>[\\s\\S]*<\\/a:clrScheme>/,Fs=/<a:fontScheme([^>]*)>[\\s\\S]*<\\/a:fontScheme>/,Ns=/<a:fmtScheme([^>]*)>[\\s\\S]*<\\/a:fmtScheme>/,Ms=/<a:themeElements([^>]*)>[\\s\\S]*<\\/a:themeElements>/;function Ds(e,t){if(!e||0===e.length)return Ds($s());var n,r={};if(!(n=e.match(Ms)))throw new Error(\"themeElements not found in theme\");return function(e,t,n){var r;t.themeElements={},[[\"clrScheme\",Ps,Bs],[\"fontScheme\",Fs,Os],[\"fmtScheme\",Ns,Ls]].forEach((function(i){if(!(r=e.match(i[1])))throw new Error(i[0]+\" not found in themeElements\");i[2](r,t,n)}))}(n[0],r,t),r}function $s(e,t){if(t&&t.themeXLSX)return t.themeXLSX;var n=[de];return n[n.length]='<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"Office Theme\">',n[n.length]=\"<a:themeElements>\",n[n.length]='<a:clrScheme name=\"Office\">',n[n.length]='<a:dk1><a:sysClr val=\"windowText\" lastClr=\"000000\"/></a:dk1>',n[n.length]='<a:lt1><a:sysClr val=\"window\" lastClr=\"FFFFFF\"/></a:lt1>',n[n.length]='<a:dk2><a:srgbClr val=\"1F497D\"/></a:dk2>',n[n.length]='<a:lt2><a:srgbClr val=\"EEECE1\"/></a:lt2>',n[n.length]='<a:accent1><a:srgbClr val=\"4F81BD\"/></a:accent1>',n[n.length]='<a:accent2><a:srgbClr val=\"C0504D\"/></a:accent2>',n[n.length]='<a:accent3><a:srgbClr val=\"9BBB59\"/></a:accent3>',n[n.length]='<a:accent4><a:srgbClr val=\"8064A2\"/></a:accent4>',n[n.length]='<a:accent5><a:srgbClr val=\"4BACC6\"/></a:accent5>',n[n.length]='<a:accent6><a:srgbClr val=\"F79646\"/></a:accent6>',n[n.length]='<a:hlink><a:srgbClr val=\"0000FF\"/></a:hlink>',n[n.length]='<a:folHlink><a:srgbClr val=\"800080\"/></a:folHlink>',n[n.length]=\"</a:clrScheme>\",n[n.length]='<a:fontScheme name=\"Office\">',n[n.length]=\"<a:majorFont>\",n[n.length]='<a:latin typeface=\"Cambria\"/>',n[n.length]='<a:ea typeface=\"\"/>',n[n.length]='<a:cs typeface=\"\"/>',n[n.length]='<a:font script=\"Jpan\" typeface=\"\\uff2d\\uff33 \\uff30\\u30b4\\u30b7\\u30c3\\u30af\"/>',n[n.length]='<a:font script=\"Hang\" typeface=\"\\ub9d1\\uc740 \\uace0\\ub515\"/>',n[n.length]='<a:font script=\"Hans\" typeface=\"\\u5b8b\\u4f53\"/>',n[n.length]='<a:font script=\"Hant\" typeface=\"\\u65b0\\u7d30\\u660e\\u9ad4\"/>',n[n.length]='<a:font script=\"Arab\" typeface=\"Times New Roman\"/>',n[n.length]='<a:font script=\"Hebr\" typeface=\"Times New Roman\"/>',n[n.length]='<a:font script=\"Thai\" typeface=\"Tahoma\"/>',n[n.length]='<a:font script=\"Ethi\" typeface=\"Nyala\"/>',n[n.length]='<a:font script=\"Beng\" typeface=\"Vrinda\"/>',n[n.length]='<a:font script=\"Gujr\" typeface=\"Shruti\"/>',n[n.length]='<a:font script=\"Khmr\" typeface=\"MoolBoran\"/>',n[n.length]='<a:font script=\"Knda\" typeface=\"Tunga\"/>',n[n.length]='<a:font script=\"Guru\" typeface=\"Raavi\"/>',n[n.length]='<a:font script=\"Cans\" typeface=\"Euphemia\"/>',n[n.length]='<a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/>',n[n.length]='<a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/>',n[n.length]='<a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/>',n[n.length]='<a:font script=\"Thaa\" typeface=\"MV Boli\"/>',n[n.length]='<a:font script=\"Deva\" typeface=\"Mangal\"/>',n[n.length]='<a:font script=\"Telu\" typeface=\"Gautami\"/>',n[n.length]='<a:font script=\"Taml\" typeface=\"Latha\"/>',n[n.length]='<a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/>',n[n.length]='<a:font script=\"Orya\" typeface=\"Kalinga\"/>',n[n.length]='<a:font script=\"Mlym\" typeface=\"Kartika\"/>',n[n.length]='<a:font script=\"Laoo\" typeface=\"DokChampa\"/>',n[n.length]='<a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/>',n[n.length]='<a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/>',n[n.length]='<a:font script=\"Viet\" typeface=\"Times New Roman\"/>',n[n.length]='<a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/>',n[n.length]='<a:font script=\"Geor\" typeface=\"Sylfaen\"/>',n[n.length]=\"</a:majorFont>\",n[n.length]=\"<a:minorFont>\",n[n.length]='<a:latin typeface=\"Calibri\"/>',n[n.length]='<a:ea typeface=\"\"/>',n[n.length]='<a:cs typeface=\"\"/>',n[n.length]='<a:font script=\"Jpan\" typeface=\"\\uff2d\\uff33 \\uff30\\u30b4\\u30b7\\u30c3\\u30af\"/>',n[n.length]='<a:font script=\"Hang\" typeface=\"\\ub9d1\\uc740 \\uace0\\ub515\"/>',n[n.length]='<a:font script=\"Hans\" typeface=\"\\u5b8b\\u4f53\"/>',n[n.length]='<a:font script=\"Hant\" typeface=\"\\u65b0\\u7d30\\u660e\\u9ad4\"/>',n[n.length]='<a:font script=\"Arab\" typeface=\"Arial\"/>',n[n.length]='<a:font script=\"Hebr\" typeface=\"Arial\"/>',n[n.length]='<a:font script=\"Thai\" typeface=\"Tahoma\"/>',n[n.length]='<a:font script=\"Ethi\" typeface=\"Nyala\"/>',n[n.length]='<a:font script=\"Beng\" typeface=\"Vrinda\"/>',n[n.length]='<a:font script=\"Gujr\" typeface=\"Shruti\"/>',n[n.length]='<a:font script=\"Khmr\" typeface=\"DaunPenh\"/>',n[n.length]='<a:font script=\"Knda\" typeface=\"Tunga\"/>',n[n.length]='<a:font script=\"Guru\" typeface=\"Raavi\"/>',n[n.length]='<a:font script=\"Cans\" typeface=\"Euphemia\"/>',n[n.length]='<a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/>',n[n.length]='<a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/>',n[n.length]='<a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/>',n[n.length]='<a:font script=\"Thaa\" typeface=\"MV Boli\"/>',n[n.length]='<a:font script=\"Deva\" typeface=\"Mangal\"/>',n[n.length]='<a:font script=\"Telu\" typeface=\"Gautami\"/>',n[n.length]='<a:font script=\"Taml\" typeface=\"Latha\"/>',n[n.length]='<a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/>',n[n.length]='<a:font script=\"Orya\" typeface=\"Kalinga\"/>',n[n.length]='<a:font script=\"Mlym\" typeface=\"Kartika\"/>',n[n.length]='<a:font script=\"Laoo\" typeface=\"DokChampa\"/>',n[n.length]='<a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/>',n[n.length]='<a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/>',n[n.length]='<a:font script=\"Viet\" typeface=\"Arial\"/>',n[n.length]='<a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/>',n[n.length]='<a:font script=\"Geor\" typeface=\"Sylfaen\"/>',n[n.length]=\"</a:minorFont>\",n[n.length]=\"</a:fontScheme>\",n[n.length]='<a:fmtScheme name=\"Office\">',n[n.length]=\"<a:fillStyleLst>\",n[n.length]='<a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>',n[n.length]='<a:gradFill rotWithShape=\"1\">',n[n.length]=\"<a:gsLst>\",n[n.length]='<a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"50000\"/><a:satMod val=\"300000\"/></a:schemeClr></a:gs>',n[n.length]='<a:gs pos=\"35000\"><a:schemeClr val=\"phClr\"><a:tint val=\"37000\"/><a:satMod val=\"300000\"/></a:schemeClr></a:gs>',n[n.length]='<a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:tint val=\"15000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs>',n[n.length]=\"</a:gsLst>\",n[n.length]='<a:lin ang=\"16200000\" scaled=\"1\"/>',n[n.length]=\"</a:gradFill>\",n[n.length]='<a:gradFill rotWithShape=\"1\">',n[n.length]=\"<a:gsLst>\",n[n.length]='<a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"100000\"/><a:shade val=\"100000\"/><a:satMod val=\"130000\"/></a:schemeClr></a:gs>',n[n.length]='<a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:tint val=\"50000\"/><a:shade val=\"100000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs>',n[n.length]=\"</a:gsLst>\",n[n.length]='<a:lin ang=\"16200000\" scaled=\"0\"/>',n[n.length]=\"</a:gradFill>\",n[n.length]=\"</a:fillStyleLst>\",n[n.length]=\"<a:lnStyleLst>\",n[n.length]='<a:ln w=\"9525\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"><a:shade val=\"95000\"/><a:satMod val=\"105000\"/></a:schemeClr></a:solidFill><a:prstDash val=\"solid\"/></a:ln>',n[n.length]='<a:ln w=\"25400\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/></a:ln>',n[n.length]='<a:ln w=\"38100\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/></a:ln>',n[n.length]=\"</a:lnStyleLst>\",n[n.length]=\"<a:effectStyleLst>\",n[n.length]=\"<a:effectStyle>\",n[n.length]=\"<a:effectLst>\",n[n.length]='<a:outerShdw blurRad=\"40000\" dist=\"20000\" dir=\"5400000\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"38000\"/></a:srgbClr></a:outerShdw>',n[n.length]=\"</a:effectLst>\",n[n.length]=\"</a:effectStyle>\",n[n.length]=\"<a:effectStyle>\",n[n.length]=\"<a:effectLst>\",n[n.length]='<a:outerShdw blurRad=\"40000\" dist=\"23000\" dir=\"5400000\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"35000\"/></a:srgbClr></a:outerShdw>',n[n.length]=\"</a:effectLst>\",n[n.length]=\"</a:effectStyle>\",n[n.length]=\"<a:effectStyle>\",n[n.length]=\"<a:effectLst>\",n[n.length]='<a:outerShdw blurRad=\"40000\" dist=\"23000\" dir=\"5400000\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"35000\"/></a:srgbClr></a:outerShdw>',n[n.length]=\"</a:effectLst>\",n[n.length]='<a:scene3d><a:camera prst=\"orthographicFront\"><a:rot lat=\"0\" lon=\"0\" rev=\"0\"/></a:camera><a:lightRig rig=\"threePt\" dir=\"t\"><a:rot lat=\"0\" lon=\"0\" rev=\"1200000\"/></a:lightRig></a:scene3d>',n[n.length]='<a:sp3d><a:bevelT w=\"63500\" h=\"25400\"/></a:sp3d>',n[n.length]=\"</a:effectStyle>\",n[n.length]=\"</a:effectStyleLst>\",n[n.length]=\"<a:bgFillStyleLst>\",n[n.length]='<a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill>',n[n.length]='<a:gradFill rotWithShape=\"1\">',n[n.length]=\"<a:gsLst>\",n[n.length]='<a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"40000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs>',n[n.length]='<a:gs pos=\"40000\"><a:schemeClr val=\"phClr\"><a:tint val=\"45000\"/><a:shade val=\"99000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs>',n[n.length]='<a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:shade val=\"20000\"/><a:satMod val=\"255000\"/></a:schemeClr></a:gs>',n[n.length]=\"</a:gsLst>\",n[n.length]='<a:path path=\"circle\"><a:fillToRect l=\"50000\" t=\"-80000\" r=\"50000\" b=\"180000\"/></a:path>',n[n.length]=\"</a:gradFill>\",n[n.length]='<a:gradFill rotWithShape=\"1\">',n[n.length]=\"<a:gsLst>\",n[n.length]='<a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"80000\"/><a:satMod val=\"300000\"/></a:schemeClr></a:gs>',n[n.length]='<a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:shade val=\"30000\"/><a:satMod val=\"200000\"/></a:schemeClr></a:gs>',n[n.length]=\"</a:gsLst>\",n[n.length]='<a:path path=\"circle\"><a:fillToRect l=\"50000\" t=\"50000\" r=\"50000\" b=\"50000\"/></a:path>',n[n.length]=\"</a:gradFill>\",n[n.length]=\"</a:bgFillStyleLst>\",n[n.length]=\"</a:fmtScheme>\",n[n.length]=\"</a:themeElements>\",n[n.length]=\"<a:objectDefaults>\",n[n.length]=\"<a:spDef>\",n[n.length]='<a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx=\"1\"><a:schemeClr val=\"accent1\"/></a:lnRef><a:fillRef idx=\"3\"><a:schemeClr val=\"accent1\"/></a:fillRef><a:effectRef idx=\"2\"><a:schemeClr val=\"accent1\"/></a:effectRef><a:fontRef idx=\"minor\"><a:schemeClr val=\"lt1\"/></a:fontRef></a:style>',n[n.length]=\"</a:spDef>\",n[n.length]=\"<a:lnDef>\",n[n.length]='<a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx=\"2\"><a:schemeClr val=\"accent1\"/></a:lnRef><a:fillRef idx=\"0\"><a:schemeClr val=\"accent1\"/></a:fillRef><a:effectRef idx=\"1\"><a:schemeClr val=\"accent1\"/></a:effectRef><a:fontRef idx=\"minor\"><a:schemeClr val=\"tx1\"/></a:fontRef></a:style>',n[n.length]=\"</a:lnDef>\",n[n.length]=\"</a:objectDefaults>\",n[n.length]=\"<a:extraClrSchemeLst/>\",n[n.length]=\"</a:theme>\",n.join(\"\")}function Ws(e){var t=e.read_shift(2),n=e.read_shift(2)-4,r=[t];switch(t){case 4:case 5:case 7:case 8:case 9:case 10:case 11:case 13:r[1]=function(e){var t={};switch(t.xclrType=e.read_shift(2),t.nTintShade=e.read_shift(2),t.xclrType){case 0:e.l+=4;break;case 1:t.xclrValue=function(e,t){return Ot(e,4)}(e);break;case 2:t.xclrValue=Hr(e);break;case 3:t.xclrValue=function(e){return e.read_shift(4)}(e);break;case 4:e.l+=4}return e.l+=8,t}(e);break;case 6:r[1]=function(e,t){return Ot(e,t)}(e,n);break;case 14:case 15:r[1]=e.read_shift(1===n?1:2);break;default:throw new Error(\"Unrecognized ExtProp type: \"+t+\" \"+n)}return r}Vn.IMG=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",Vn.DRAW=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\";var Hs=1024;function Gs(e,t){for(var n=[21600,21600],r=[\"m0,0l0\",n[1],n[0],n[1],n[0],\"0xe\"].join(\",\"),i=[Xe(\"xml\",null,{\"xmlns:v\":\"urn:schemas-microsoft-com:vml\",\"xmlns:o\":qe,\"xmlns:x\":et,\"xmlns:mv\":\"http://macVmlSchemaUri\"}).replace(/\\/>/,\">\"),Xe(\"o:shapelayout\",Xe(\"o:idmap\",null,{\"v:ext\":\"edit\",data:e}),{\"v:ext\":\"edit\"}),Xe(\"v:shapetype\",[Xe(\"v:stroke\",null,{joinstyle:\"miter\"}),Xe(\"v:path\",null,{gradientshapeok:\"t\",\"o:connecttype\":\"rect\"})].join(\"\"),{id:\"_x0000_t202\",\"o:spt\":202,coordsize:n.join(\",\"),path:r})];Hs<1e3*e;)Hs+=1e3;return t.forEach((function(e){var t=zt(e[0]);i=i.concat([\"<v:shape\"+Ke({id:\"_x0000_s\"+ ++Hs,type:\"#_x0000_t202\",style:\"position:absolute; margin-left:80pt;margin-top:5pt;width:104pt;height:64pt;z-index:10\"+(e[1].hidden?\";visibility:hidden\":\"\"),fillcolor:\"#ECFAD4\",strokecolor:\"#edeaa1\"})+\">\",Xe(\"v:fill\",Xe(\"o:fill\",null,{type:\"gradientUnscaled\",\"v:ext\":\"view\"}),{color2:\"#BEFF82\",angle:\"-180\",type:\"gradient\"}),Xe(\"v:shadow\",null,{on:\"t\",obscured:\"t\"}),Xe(\"v:path\",null,{\"o:connecttype\":\"none\"}),'<v:textbox><div style=\"text-align:left\"></div></v:textbox>','<x:ClientData ObjectType=\"Note\">',\"<x:MoveWithCells/>\",\"<x:SizeWithCells/>\",ze(\"x:Anchor\",[t.c,0,t.r,0,t.c+3,100,t.r+5,100].join(\",\")),ze(\"x:AutoFill\",\"False\"),ze(\"x:Row\",String(t.r)),ze(\"x:Column\",String(t.c)),e[1].hidden?\"\":\"<x:Visible/>\",\"</x:ClientData>\",\"</v:shape>\"])})),i.push(\"</xml>\"),i.join(\"\")}function Vs(e,t,n){var r,i=Array.isArray(t);n.forEach((function(e){var n=zt(e.ref);if(i?(t[n.r]||(t[n.r]=[]),r=t[n.r][n.c]):r=t[e.ref],!r){r={},i?t[n.r][n.c]=r:t[e.ref]=r;var s=Yt(t[\"!ref\"]||\"BDWGO1000001:A1\");s.s.r>n.r&&(s.s.r=n.r),s.e.r<n.r&&(s.e.r=n.r),s.s.c>n.c&&(s.s.c=n.c),s.e.c<n.c&&(s.e.c=n.c);var o=Ut(s);o!==t[\"!ref\"]&&(t[\"!ref\"]=o)}r.c||(r.c=[]);var a={a:e.author,t:e.t,r:e.r};e.h&&(a.h=e.h),r.c.push(a)}))}Vn.CMNT=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\";var js=Xe(\"comments\",null,{xmlns:Qe.main[0]});function Zs(e){var t=[de,js],n=[];return t.push(\"<authors>\"),e.forEach((function(e){e[1].forEach((function(e){var r=xe(e.a);n.indexOf(r)>-1||(n.push(r),t.push(\"<author>\"+r+\"</author>\"))}))})),t.push(\"</authors>\"),t.push(\"<commentList>\"),e.forEach((function(e){e[1].forEach((function(r){t.push('<comment ref=\"'+e[0]+'\" authorId=\"'+n.indexOf(xe(r.a))+'\"><text>'),t.push(ze(\"t\",null==r.t?\"\":xe(r.t))),t.push(\"</text></comment>\")}))})),t.push(\"</commentList>\"),t.length>2&&(t[t.length]=\"</comments>\",t[1]=t[1].replace(\"/>\",\">\")),t.join(\"\")}var zs=nn;function Ks(e){var t=Ft(),n=[];return Nt(t,\"BrtBeginComments\"),Nt(t,\"BrtBeginCommentAuthors\"),e.forEach((function(e){e[1].forEach((function(e){n.indexOf(e.a)>-1||(n.push(e.a.slice(0,54)),Nt(t,\"BrtCommentAuthor\",function(e){return rn(e.slice(0,54))}(e.a)))}))})),Nt(t,\"BrtEndCommentAuthors\"),Nt(t,\"BrtBeginCommentList\"),e.forEach((function(e){e[1].forEach((function(r){r.iauthor=n.indexOf(r.a);var i={s:zt(e[0]),e:zt(e[0])};Nt(t,\"BrtBeginComment\",function(e,t){return null==t&&(t=Lt(36)),t.write_shift(4,e[1].iauthor),In(e[0],t),t.write_shift(4,0),t.write_shift(4,0),t.write_shift(4,0),t.write_shift(4,0),t}([i,r])),r.t&&r.t.length>0&&Nt(t,\"BrtCommentText\",function(e,t){var n=!1;return null==t&&(n=!0,t=Lt(23+4*e.t.length)),t.write_shift(1,1),rn(e.t,t),t.write_shift(4,1),function(e,t){t||(t=Lt(4)),t.write_shift(2,e.ich||0),t.write_shift(2,e.ifnt||0)}({ich:0,ifnt:0},t),n?t.slice(0,t.l):t}(r)),Nt(t,\"BrtEndComment\"),delete r.iauthor}))})),Nt(t,\"BrtEndCommentList\"),Nt(t,\"BrtEndComments\"),t.end()}var Xs=[\"xlsb\",\"xlsm\",\"xlam\",\"biff8\",\"xla\"];Vn.DS=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet\",Vn.MS=\"http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet\";var Us=function(){var e=/(^|[^A-Za-z])R(\\[?)(-?\\d+|)\\]?C(\\[?)(-?\\d+|)\\]?/g,t={r:0,c:0};function n(e,n,r,i,s,o){var a=i.length>0?0|parseInt(i,10):0,c=o.length>0?0|parseInt(o,10):0;c<0&&0===s.length&&(c=0);var l=!1,h=!1;return(s.length>0||0==o.length)&&(l=!0),l?c+=t.c:--c,(r.length>0||0==i.length)&&(h=!0),h?a+=t.r:--a,n+(l?\"\":\"$\")+jt(c)+(h?\"\":\"$\")+Gt(a)}return function(r,i){return t=i,r.replace(e,n)}}(),Ys=/(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)([1-9]\\d{0,5}|10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6])(?![_.\\(A-Za-z0-9])/g,Js=function(e,t){return e.replace(Ys,(function(e,n,r,i,s,o){var a=Vt(i)-(r?0:t.c),c=Ht(o)-(s?0:t.r);return n+\"R\"+(0==c?\"\":s?c+1:\"[\"+c+\"]\")+\"C\"+(0==a?\"\":r?a+1:\"[\"+a+\"]\")}))};function Qs(e,t,n){var r=Xt(t).s,i=zt(n);return function(e,t){return e.replace(Ys,(function(e,n,r,i,s,o){return n+(\"$\"==r?r+i:jt(Vt(i)+t.c))+(\"$\"==s?s+o:Gt(Ht(o)+t.r))}))}(e,{r:i.r-r.r,c:i.c-r.c})}function qs(e){return e.replace(/_xlfn\\./g,\"\")}function eo(e){e.l+=1}function to(e,t){var n=e.read_shift(1==t?1:2);return[16383&n,n>>14&1,n>>15&1]}function no(e,t,n){var r=2;if(n){if(n.biff>=2&&n.biff<=5)return ro(e);12==n.biff&&(r=4)}var i=e.read_shift(r),s=e.read_shift(r),o=to(e,2),a=to(e,2);return{s:{r:i,c:o[0],cRel:o[1],rRel:o[2]},e:{r:s,c:a[0],cRel:a[1],rRel:a[2]}}}function ro(e){var t=to(e,2),n=to(e,2),r=e.read_shift(1),i=e.read_shift(1);return{s:{r:t[0],c:r,cRel:t[1],rRel:t[2]},e:{r:n[0],c:i,cRel:n[1],rRel:n[2]}}}function io(e,t,n){if(n&&n.biff>=2&&n.biff<=5)return function(e){var t=to(e,2),n=e.read_shift(1);return{r:t[0],c:n,cRel:t[1],rRel:t[2]}}(e);var r=e.read_shift(n&&12==n.biff?4:2),i=to(e,2);return{r:r,c:i[0],cRel:i[1],rRel:i[2]}}function so(e){var t=e.read_shift(2),n=e.read_shift(2);return{r:t,c:255&n,fQuoted:!!(16384&n),cRel:n>>15,rRel:n>>15}}function oo(e){return[e.read_shift(1),e.read_shift(1)]}function ao(e,t){var n=[e.read_shift(1)];if(12==t)switch(n[0]){case 2:n[0]=4;break;case 4:n[0]=16;break;case 0:n[0]=1;break;case 1:n[0]=2}switch(n[0]){case 4:n[1]=_r(e,1)?\"TRUE\":\"FALSE\",12!=t&&(e.l+=7);break;case 37:case 16:n[1]=wn[e[e.l]],e.l+=12==t?4:8;break;case 0:e.l+=8;break;case 1:n[1]=An(e);break;case 2:n[1]=Mr(e,0,{biff:t>0&&t<8?2:t});break;default:throw new Error(\"Bad SerAr: \"+n[0])}return n}function co(e,t,n){for(var r=e.read_shift(12==n.biff?4:2),i=[],s=0;s!=r;++s)i.push((12==n.biff?vn:Kr)(e,8));return i}function lo(e,t,n){var r=0,i=0;12==n.biff?(r=e.read_shift(4),i=e.read_shift(4)):(i=1+e.read_shift(1),r=1+e.read_shift(2)),n.biff>=2&&n.biff<8&&(--r,0==--i&&(i=256));for(var s=0,o=[];s!=r&&(o[s]=[]);++s)for(var a=0;a!=i;++a)o[s][a]=ao(e,n.biff);return o}function ho(e,t,n){return e.l+=2,[so(e)]}function uo(e){return e.l+=6,[]}var fo=ho,go=uo,po=uo,mo=ho;function Co(e){return e.l+=2,[Rr(e),1&e.read_shift(2)]}var bo=ho,vo=Co,Io=uo,Ao=ho,yo=ho,wo=[\"Data\",\"All\",\"Headers\",\"??\",\"?Data2\",\"??\",\"?DataHeaders\",\"??\",\"Totals\",\"??\",\"??\",\"??\",\"?DataTotals\",\"??\",\"??\",\"??\",\"?Current\"],So={1:{n:\"PtgExp\",f:function(e,t,n){return e.l++,n&&12==n.biff?[e.read_shift(4,\"i\"),0]:[e.read_shift(2),e.read_shift(n&&2==n.biff?1:2)]}},2:{n:\"PtgTbl\",f:Ot},3:{n:\"PtgAdd\",f:eo},4:{n:\"PtgSub\",f:eo},5:{n:\"PtgMul\",f:eo},6:{n:\"PtgDiv\",f:eo},7:{n:\"PtgPower\",f:eo},8:{n:\"PtgConcat\",f:eo},9:{n:\"PtgLt\",f:eo},10:{n:\"PtgLe\",f:eo},11:{n:\"PtgEq\",f:eo},12:{n:\"PtgGe\",f:eo},13:{n:\"PtgGt\",f:eo},14:{n:\"PtgNe\",f:eo},15:{n:\"PtgIsect\",f:eo},16:{n:\"PtgUnion\",f:eo},17:{n:\"PtgRange\",f:eo},18:{n:\"PtgUplus\",f:eo},19:{n:\"PtgUminus\",f:eo},20:{n:\"PtgPercent\",f:eo},21:{n:\"PtgParen\",f:eo},22:{n:\"PtgMissArg\",f:eo},23:{n:\"PtgStr\",f:function(e,t,n){return e.l++,Lr(e,0,n)}},26:{n:\"PtgSheet\",f:function(e,t,n){return e.l+=5,e.l+=2,e.l+=2==n.biff?1:4,[\"PTGSHEET\"]}},27:{n:\"PtgEndSheet\",f:function(e,t,n){return e.l+=2==n.biff?4:5,[\"PTGENDSHEET\"]}},28:{n:\"PtgErr\",f:function(e){return e.l++,wn[e.read_shift(1)]}},29:{n:\"PtgBool\",f:function(e){return e.l++,0!==e.read_shift(1)}},30:{n:\"PtgInt\",f:function(e){return e.l++,e.read_shift(2)}},31:{n:\"PtgNum\",f:function(e){return e.l++,An(e)}},32:{n:\"PtgArray\",f:function(e,t,n){var r=(96&e[e.l++])>>5;return e.l+=2==n.biff?6:12==n.biff?14:7,[r]}},33:{n:\"PtgFunc\",f:function(e,t,n){var r=(96&e[e.l])>>5;e.l+=1;var i=e.read_shift(n&&n.biff<=3?1:2);return[Zo[i],jo[i],r]}},34:{n:\"PtgFuncVar\",f:function(e,t,n){var r=e[e.l++],i=e.read_shift(1),s=n&&n.biff<=3?[88==r?-1:0,e.read_shift(1)]:function(e){return[e[e.l+1]>>7,32767&e.read_shift(2)]}(e);return[i,(0===s[0]?jo:Vo)[s[1]]]}},35:{n:\"PtgName\",f:function(e,t,n){var r=e.read_shift(1)>>>5&3,i=e.read_shift(!n||n.biff>=8?4:2);switch(n.biff){case 2:e.l+=5;break;case 3:case 4:e.l+=8;break;case 5:e.l+=12}return[r,0,i]}},36:{n:\"PtgRef\",f:function(e,t,n){var r=(96&e[e.l])>>5;return e.l+=1,[r,io(e,0,n)]}},37:{n:\"PtgArea\",f:function(e,t,n){return[(96&e[e.l++])>>5,no(e,0,n)]}},38:{n:\"PtgMemArea\",f:function(e,t,n){var r=e.read_shift(1)>>>5&3;return e.l+=n&&2==n.biff?3:4,[r,e.read_shift(n&&2==n.biff?1:2)]}},39:{n:\"PtgMemErr\",f:Ot},40:{n:\"PtgMemNoMem\",f:Ot},41:{n:\"PtgMemFunc\",f:function(e,t,n){return[e.read_shift(1)>>>5&3,e.read_shift(n&&2==n.biff?1:2)]}},42:{n:\"PtgRefErr\",f:function(e,t,n){var r=e.read_shift(1)>>>5&3;return e.l+=4,n.biff<8&&e.l--,12==n.biff&&(e.l+=2),[r]}},43:{n:\"PtgAreaErr\",f:function(e,t,n){var r=(96&e[e.l++])>>5;return e.l+=n&&n.biff>8?12:n.biff<8?6:8,[r]}},44:{n:\"PtgRefN\",f:function(e,t,n){var r=(96&e[e.l])>>5;return e.l+=1,[r,function(e,t,n){var r=n&&n.biff?n.biff:8;if(r>=2&&r<=5)return function(e){var t=e.read_shift(2),n=e.read_shift(1),r=(32768&t)>>15,i=(16384&t)>>14;return t&=16383,1==r&&t>=8192&&(t-=16384),1==i&&n>=128&&(n-=256),{r:t,c:n,cRel:i,rRel:r}}(e);var i=e.read_shift(r>=12?4:2),s=e.read_shift(2),o=(16384&s)>>14,a=(32768&s)>>15;if(s&=16383,1==a)for(;i>524287;)i-=1048576;if(1==o)for(;s>8191;)s-=16384;return{r:i,c:s,cRel:o,rRel:a}}(e,0,n)]}},45:{n:\"PtgAreaN\",f:function(e,t,n){return[(96&e[e.l++])>>5,function(e,t,n){if(n.biff<8)return ro(e);var r=e.read_shift(12==n.biff?4:2),i=e.read_shift(12==n.biff?4:2),s=to(e,2),o=to(e,2);return{s:{r:r,c:s[0],cRel:s[1],rRel:s[2]},e:{r:i,c:o[0],cRel:o[1],rRel:o[2]}}}(e,0,n)]}},46:{n:\"PtgMemAreaN\",f:function(e){return[e.read_shift(1)>>>5&3,e.read_shift(2)]}},47:{n:\"PtgMemNoMemN\",f:function(e){return[e.read_shift(1)>>>5&3,e.read_shift(2)]}},57:{n:\"PtgNameX\",f:function(e,t,n){return 5==n.biff?function(e){var t=e.read_shift(1)>>>5&3,n=e.read_shift(2,\"i\");e.l+=8;var r=e.read_shift(2);return e.l+=12,[t,n,r]}(e):[e.read_shift(1)>>>5&3,e.read_shift(2),e.read_shift(4)]}},58:{n:\"PtgRef3d\",f:function(e,t,n){var r=(96&e[e.l])>>5;e.l+=1;var i=e.read_shift(2);return n&&5==n.biff&&(e.l+=12),[r,i,io(e,0,n)]}},59:{n:\"PtgArea3d\",f:function(e,t,n){var r=(96&e[e.l++])>>5,i=e.read_shift(2,\"i\");if(n)switch(n.biff){case 5:e.l+=12}return[r,i,no(e,0,n)]}},60:{n:\"PtgRefErr3d\",f:function(e,t,n){var r=(96&e[e.l++])>>5,i=e.read_shift(2),s=4;if(n)switch(n.biff){case 5:s=15;break;case 12:s=6}return e.l+=s,[r,i]}},61:{n:\"PtgAreaErr3d\",f:function(e,t,n){var r=(96&e[e.l++])>>5,i=e.read_shift(2),s=8;if(n)switch(n.biff){case 5:e.l+=12,s=6;break;case 12:s=12}return e.l+=s,[r,i]}},255:{}},xo={64:32,96:32,65:33,97:33,66:34,98:34,67:35,99:35,68:36,100:36,69:37,101:37,70:38,102:38,71:39,103:39,72:40,104:40,73:41,105:41,74:42,106:42,75:43,107:43,76:44,108:44,77:45,109:45,78:46,110:46,79:47,111:47,88:34,120:34,89:57,121:57,90:58,122:58,91:59,123:59,92:60,124:60,93:61,125:61};!function(){for(var e in xo)So[e]=So[xo[e]]}();var Eo={1:{n:\"PtgElfLel\",f:Co},2:{n:\"PtgElfRw\",f:Ao},3:{n:\"PtgElfCol\",f:fo},6:{n:\"PtgElfRwV\",f:yo},7:{n:\"PtgElfColV\",f:mo},10:{n:\"PtgElfRadical\",f:bo},11:{n:\"PtgElfRadicalS\",f:Io},13:{n:\"PtgElfColS\",f:go},15:{n:\"PtgElfColSV\",f:po},16:{n:\"PtgElfRadicalLel\",f:vo},25:{n:\"PtgList\",f:function(e){e.l+=2;var t=e.read_shift(2),n=e.read_shift(2),r=e.read_shift(4),i=e.read_shift(2),s=e.read_shift(2);return{ixti:t,coltype:3&n,rt:wo[n>>2&31],idx:r,c:i,C:s}}},29:{n:\"PtgSxName\",f:function(e){return e.l+=2,[e.read_shift(4)]}},255:{}},ko={0:{n:\"PtgAttrNoop\",f:function(e){return e.l+=4,[0,0]}},1:{n:\"PtgAttrSemi\",f:function(e,t,n){var r=255&e[e.l+1]?1:0;return e.l+=n&&2==n.biff?3:4,[r]}},2:{n:\"PtgAttrIf\",f:function(e,t,n){var r=255&e[e.l+1]?1:0;return e.l+=2,[r,e.read_shift(n&&2==n.biff?1:2)]}},4:{n:\"PtgAttrChoose\",f:function(e,t,n){e.l+=2;for(var r=e.read_shift(n&&2==n.biff?1:2),i=[],s=0;s<=r;++s)i.push(e.read_shift(n&&2==n.biff?1:2));return i}},8:{n:\"PtgAttrGoto\",f:function(e,t,n){var r=255&e[e.l+1]?1:0;return e.l+=2,[r,e.read_shift(n&&2==n.biff?1:2)]}},16:{n:\"PtgAttrSum\",f:function(e,t,n){e.l+=n&&2==n.biff?3:4}},32:{n:\"PtgAttrBaxcel\",f:function(e){var t=1&e[e.l+1];return e.l+=4,[t,1]}},64:{n:\"PtgAttrSpace\",f:function(e){return e.read_shift(2),oo(e)}},65:{n:\"PtgAttrSpaceSemi\",f:function(e){return e.read_shift(2),oo(e)}},128:{n:\"PtgAttrIfError\",f:function(e){var t=255&e[e.l+1]?1:0;return e.l+=2,[t,e.read_shift(2)]}},255:{}};function _o(e,t,n,r){if(r.biff<8)return Ot(e,t);for(var i=e.l+t,s=[],o=0;o!==n.length;++o)switch(n[o][0]){case\"PtgArray\":n[o][1]=lo(e,0,r),s.push(n[o][1]);break;case\"PtgMemArea\":n[o][2]=co(e,0,r),s.push(n[o][2]);break;case\"PtgExp\":r&&12==r.biff&&(n[o][1][1]=e.read_shift(4),s.push(n[o][1]));break;case\"PtgList\":case\"PtgElfRadicalS\":case\"PtgElfColS\":case\"PtgElfColSV\":throw\"Unsupported \"+n[o][0]}return 0!=(t=i-e.l)&&s.push(Ot(e,t)),s}function To(e,t,n){for(var r,i,s=e.l+t,o=[];s!=e.l;)t=s-e.l,r=So[i=e[e.l]],24!==i&&25!==i||(r=(24===i?Eo:ko)[e[e.l+1]]),r&&r.f?o.push([r.n,r.f(e,t,n)]):Ot(e,t);return o}function Ro(e){for(var t=[],n=0;n<e.length;++n){for(var r=e[n],i=[],s=0;s<r.length;++s){var o=r[s];if(o)switch(o[0]){case 2:i.push('\"'+o[1].replace(/\"/g,'\"\"')+'\"');break;default:i.push(o[1])}else i.push(\"\")}t.push(i.join(\",\"))}return t.join(\";\")}ko[33]=ko[32];var Bo={PtgAdd:\"+\",PtgConcat:\"&\",PtgDiv:\"/\",PtgEq:\"=\",PtgGe:\">=\",PtgGt:\">\",PtgLe:\"<=\",PtgLt:\"<\",PtgMul:\"*\",PtgNe:\"<>\",PtgPower:\"^\",PtgSub:\"-\"};function Oo(e,t,n){if(!e)return\"SH33TJSERR0\";if(n.biff>8&&(!e.XTI||!e.XTI[t]))return e.SheetNames[t];if(!e.XTI)return\"SH33TJSERR6\";var r=e.XTI[t];if(n.biff<8)return t>1e4&&(t-=65536),t<0&&(t=-t),0==t?\"\":e.XTI[t-1];if(!r)return\"SH33TJSERR1\";var i=\"\";if(n.biff>8)switch(e[r[0]][0]){case 357:return i=-1==r[1]?\"#REF\":e.SheetNames[r[1]],r[1]==r[2]?i:i+\":\"+e.SheetNames[r[2]];case 358:return null!=n.SID?e.SheetNames[n.SID]:\"SH33TJSSAME\"+e[r[0]][0];case 355:default:return\"SH33TJSSRC\"+e[r[0]][0]}switch(e[r[0]][0][0]){case 1025:return i=-1==r[1]?\"#REF\":e.SheetNames[r[1]]||\"SH33TJSERR3\",r[1]==r[2]?i:i+\":\"+e.SheetNames[r[2]];case 14849:return e[r[0]].slice(1).map((function(e){return e.Name})).join(\";;\");default:return e[r[0]][0][3]?(i=-1==r[1]?\"#REF\":e[r[0]][0][3][r[1]]||\"SH33TJSERR4\",r[1]==r[2]?i:i+\":\"+e[r[0]][0][3][r[2]]):\"SH33TJSERR2\"}}function Lo(e,t,n){return function(e,t){if(!(e||t&&t.biff<=5&&t.biff>=2))throw new Error(\"empty sheet name\");return e.indexOf(\" \")>-1?\"'\"+e+\"'\":e}(Oo(e,t,n),n)}function Po(e,t,n,r,i){var s,o,a,c,l=i&&i.biff||8,h={s:{c:0,r:0},e:{c:0,r:0}},d=[],u=0,f=0,g=\"\";if(!e[0]||!e[0][0])return\"\";for(var p=-1,m=\"\",C=0,b=e[0].length;C<b;++C){var v=e[0][C];switch(v[0]){case\"PtgUminus\":d.push(\"-\"+d.pop());break;case\"PtgUplus\":d.push(\"+\"+d.pop());break;case\"PtgPercent\":d.push(d.pop()+\"%\");break;case\"PtgAdd\":case\"PtgConcat\":case\"PtgDiv\":case\"PtgEq\":case\"PtgGe\":case\"PtgGt\":case\"PtgLe\":case\"PtgLt\":case\"PtgMul\":case\"PtgNe\":case\"PtgPower\":case\"PtgSub\":if(s=d.pop(),o=d.pop(),p>=0){switch(e[0][p][1][0]){case 0:m=ee(\" \",e[0][p][1][1]);break;case 1:m=ee(\"\\r\",e[0][p][1][1]);break;default:if(m=\"\",i.WTF)throw new Error(\"Unexpected PtgAttrSpaceType \"+e[0][p][1][0])}o+=m,p=-1}d.push(o+Bo[v[0]]+s);break;case\"PtgIsect\":s=d.pop(),o=d.pop(),d.push(o+\" \"+s);break;case\"PtgUnion\":s=d.pop(),o=d.pop(),d.push(o+\",\"+s);break;case\"PtgRange\":s=d.pop(),o=d.pop(),d.push(o+\":\"+s);break;case\"PtgAttrChoose\":case\"PtgAttrGoto\":case\"PtgAttrIf\":case\"PtgAttrIfError\":break;case\"PtgRef\":a=Mt(v[1][1],h,i),d.push($t(a,l));break;case\"PtgRefN\":a=n?Mt(v[1][1],n,i):v[1][1],d.push($t(a,l));break;case\"PtgRef3d\":u=v[1][1],a=Mt(v[1][2],h,i),g=Lo(r,u,i),d.push(g+\"!\"+$t(a,l));break;case\"PtgFunc\":case\"PtgFuncVar\":var I=v[1][0],A=v[1][1];I||(I=0);var y=0==(I&=127)?[]:d.slice(-I);d.length-=I,\"User\"===A&&(A=y.shift()),d.push(A+\"(\"+y.join(\",\")+\")\");break;case\"PtgBool\":d.push(v[1]?\"TRUE\":\"FALSE\");break;case\"PtgInt\":d.push(v[1]);break;case\"PtgNum\":d.push(String(v[1]));break;case\"PtgStr\":d.push('\"'+v[1].replace(/\"/g,'\"\"')+'\"');break;case\"PtgErr\":d.push(v[1]);break;case\"PtgAreaN\":c=Dt(v[1][1],n?{s:n}:h,i),d.push(Wt(c,i));break;case\"PtgArea\":c=Dt(v[1][1],h,i),d.push(Wt(c,i));break;case\"PtgArea3d\":c=v[1][2],g=Lo(r,u=v[1][1],i),d.push(g+\"!\"+Wt(c,i));break;case\"PtgAttrSum\":d.push(\"SUM(\"+d.pop()+\")\");break;case\"PtgAttrBaxcel\":case\"PtgAttrSemi\":break;case\"PtgName\":var w=(r.names||[])[(f=v[1][2])-1]||(r[0]||[])[f],S=w?w.Name:\"SH33TJSNAME\"+String(f);S in zo&&(S=zo[S]),d.push(S);break;case\"PtgNameX\":var x,E=v[1][1];if(f=v[1][2],!(i.biff<=5)){var k=\"\";if(14849==((r[E]||[])[0]||[])[0]||(1025==((r[E]||[])[0]||[])[0]?r[E][f]&&r[E][f].itab>0&&(k=r.SheetNames[r[E][f].itab-1]+\"!\"):k=r.SheetNames[f-1]+\"!\"),r[E]&&r[E][f])k+=r[E][f].Name;else if(r[0]&&r[0][f])k+=r[0][f].Name;else{var _=Oo(r,E,i).split(\";;\");_[f-1]?k=_[f-1]:k+=\"SH33TJSERRX\"}d.push(k);break}E<0&&(E=-E),r[E]&&(x=r[E][f]),x||(x={Name:\"SH33TJSERRY\"}),d.push(x.Name);break;case\"PtgParen\":var T=\"(\",R=\")\";if(p>=0){switch(m=\"\",e[0][p][1][0]){case 2:T=ee(\" \",e[0][p][1][1])+T;break;case 3:T=ee(\"\\r\",e[0][p][1][1])+T;break;case 4:R=ee(\" \",e[0][p][1][1])+R;break;case 5:R=ee(\"\\r\",e[0][p][1][1])+R;break;default:if(i.WTF)throw new Error(\"Unexpected PtgAttrSpaceType \"+e[0][p][1][0])}p=-1}d.push(T+d.pop()+R);break;case\"PtgRefErr\":case\"PtgRefErr3d\":d.push(\"#REF!\");break;case\"PtgExp\":var B={c:n.c,r:n.r};if(r.sharedf[Kt(a={c:v[1][1],r:v[1][0]})]){var O=r.sharedf[Kt(a)];d.push(Po(O,0,B,r,i))}else{var L=!1;for(s=0;s!=r.arrayf.length;++s)if(!(a.c<(o=r.arrayf[s])[0].s.c||a.c>o[0].e.c||a.r<o[0].s.r||a.r>o[0].e.r)){d.push(Po(o[1],0,B,r,i)),L=!0;break}L||d.push(v[1])}break;case\"PtgArray\":d.push(\"{\"+Ro(v[1])+\"}\");break;case\"PtgMemArea\":break;case\"PtgAttrSpace\":case\"PtgAttrSpaceSemi\":p=C;break;case\"PtgTbl\":case\"PtgMemErr\":break;case\"PtgMissArg\":d.push(\"\");break;case\"PtgAreaErr\":case\"PtgAreaErr3d\":d.push(\"#REF!\");break;case\"PtgList\":d.push(\"Table\"+v[1].idx+\"[#\"+v[1].rt+\"]\");break;case\"PtgMemAreaN\":case\"PtgMemNoMemN\":case\"PtgAttrNoop\":case\"PtgSheet\":case\"PtgEndSheet\":case\"PtgMemFunc\":case\"PtgMemNoMem\":break;case\"PtgElfCol\":case\"PtgElfColS\":case\"PtgElfColSV\":case\"PtgElfColV\":case\"PtgElfLel\":case\"PtgElfRadical\":case\"PtgElfRadicalLel\":case\"PtgElfRadicalS\":case\"PtgElfRw\":case\"PtgElfRwV\":throw new Error(\"Unsupported ELFs\");case\"PtgSxName\":default:throw new Error(\"Unrecognized Formula Token: \"+String(v))}if(3!=i.biff&&p>=0&&-1==[\"PtgAttrSpace\",\"PtgAttrSpaceSemi\",\"PtgAttrGoto\"].indexOf(e[0][C][0])){var P=!0;switch((v=e[0][p])[1][0]){case 4:P=!1;case 0:m=ee(\" \",v[1][1]);break;case 5:P=!1;case 1:m=ee(\"\\r\",v[1][1]);break;default:if(m=\"\",i.WTF)throw new Error(\"Unexpected PtgAttrSpaceType \"+v[1][0])}d.push((P?m:\"\")+d.pop()+(P?\"\":m)),p=-1}}if(d.length>1&&i.WTF)throw new Error(\"bad formula stack\");return d[0]}function Fo(e,t,n){var r,i=e.l+t,s=2==n.biff?1:2,o=e.read_shift(s);if(65535==o)return[[],Ot(e,t-2)];var a=To(e,o,n);return t!==o+s&&(r=_o(e,t-o-s,a,n)),e.l=i,[a,r]}function No(e,t,n){var r,i=e.l+t,s=e.read_shift(2),o=To(e,s,n);return 65535==s?[[],Ot(e,t-2)]:(t!==s+2&&(r=_o(e,i-s-2,o,n)),[o,r])}function Mo(e,t,n){var r=e.l+t,i=Vr(e);2==n.biff&&++e.l;var s=function(e){var t;if(65535!==yt(e,e.l+6))return[An(e),\"n\"];switch(e[e.l]){case 0:return e.l+=8,[\"String\",\"s\"];case 1:return t=1===e[e.l+2],e.l+=8,[t,\"b\"];case 2:return t=e[e.l+2],e.l+=8,[t,\"e\"];case 3:return e.l+=8,[\"\",\"s\"]}return[]}(e),o=e.read_shift(1);2!=n.biff&&(e.read_shift(1),n.biff>=5&&e.read_shift(4));var a=function(e,t,n){var r,i=e.l+t,s=2==n.biff?1:2,o=e.read_shift(s);if(65535==o)return[[],Ot(e,t-2)];var a=To(e,o,n);return t!==o+s&&(r=_o(e,t-o-s,a,n)),e.l=i,[a,r]}(e,r-e.l,n);return{cell:i,val:s[0],formula:a,shared:o>>3&1,tt:s[1]}}function Do(e,t,n){var r=e.read_shift(4),i=To(e,r,n),s=e.read_shift(4);return[i,s>0?_o(e,s,i,n):null]}var $o=Do,Wo=Do,Ho=Do,Go=Do,Vo={0:\"BEEP\",1:\"OPEN\",2:\"OPEN.LINKS\",3:\"CLOSE.ALL\",4:\"SAVE\",5:\"SAVE.AS\",6:\"FILE.DELETE\",7:\"PAGE.SETUP\",8:\"PRINT\",9:\"PRINTER.SETUP\",10:\"QUIT\",11:\"NEW.WINDOW\",12:\"ARRANGE.ALL\",13:\"WINDOW.SIZE\",14:\"WINDOW.MOVE\",15:\"FULL\",16:\"CLOSE\",17:\"RUN\",22:\"SET.PRINT.AREA\",23:\"SET.PRINT.TITLES\",24:\"SET.PAGE.BREAK\",25:\"REMOVE.PAGE.BREAK\",26:\"FONT\",27:\"DISPLAY\",28:\"PROTECT.DOCUMENT\",29:\"PRECISION\",30:\"A1.R1C1\",31:\"CALCULATE.NOW\",32:\"CALCULATION\",34:\"DATA.FIND\",35:\"EXTRACT\",36:\"DATA.DELETE\",37:\"SET.DATABASE\",38:\"SET.CRITERIA\",39:\"SORT\",40:\"DATA.SERIES\",41:\"TABLE\",42:\"FORMAT.NUMBER\",43:\"ALIGNMENT\",44:\"STYLE\",45:\"BORDER\",46:\"CELL.PROTECTION\",47:\"COLUMN.WIDTH\",48:\"UNDO\",49:\"CUT\",50:\"COPY\",51:\"PASTE\",52:\"CLEAR\",53:\"PASTE.SPECIAL\",54:\"EDIT.DELETE\",55:\"INSERT\",56:\"FILL.RIGHT\",57:\"FILL.DOWN\",61:\"DEFINE.NAME\",62:\"CREATE.NAMES\",63:\"FORMULA.GOTO\",64:\"FORMULA.FIND\",65:\"SELECT.LAST.CELL\",66:\"SHOW.ACTIVE.CELL\",67:\"GALLERY.AREA\",68:\"GALLERY.BAR\",69:\"GALLERY.COLUMN\",70:\"GALLERY.LINE\",71:\"GALLERY.PIE\",72:\"GALLERY.SCATTER\",73:\"COMBINATION\",74:\"PREFERRED\",75:\"ADD.OVERLAY\",76:\"GRIDLINES\",77:\"SET.PREFERRED\",78:\"AXES\",79:\"LEGEND\",80:\"ATTACH.TEXT\",81:\"ADD.ARROW\",82:\"SELECT.CHART\",83:\"SELECT.PLOT.AREA\",84:\"PATTERNS\",85:\"MAIN.CHART\",86:\"OVERLAY\",87:\"SCALE\",88:\"FORMAT.LEGEND\",89:\"FORMAT.TEXT\",90:\"EDIT.REPEAT\",91:\"PARSE\",92:\"JUSTIFY\",93:\"HIDE\",94:\"UNHIDE\",95:\"WORKSPACE\",96:\"FORMULA\",97:\"FORMULA.FILL\",98:\"FORMULA.ARRAY\",99:\"DATA.FIND.NEXT\",100:\"DATA.FIND.PREV\",101:\"FORMULA.FIND.NEXT\",102:\"FORMULA.FIND.PREV\",103:\"ACTIVATE\",104:\"ACTIVATE.NEXT\",105:\"ACTIVATE.PREV\",106:\"UNLOCKED.NEXT\",107:\"UNLOCKED.PREV\",108:\"COPY.PICTURE\",109:\"SELECT\",110:\"DELETE.NAME\",111:\"DELETE.FORMAT\",112:\"VLINE\",113:\"HLINE\",114:\"VPAGE\",115:\"HPAGE\",116:\"VSCROLL\",117:\"HSCROLL\",118:\"ALERT\",119:\"NEW\",120:\"CANCEL.COPY\",121:\"SHOW.CLIPBOARD\",122:\"MESSAGE\",124:\"PASTE.LINK\",125:\"APP.ACTIVATE\",126:\"DELETE.ARROW\",127:\"ROW.HEIGHT\",128:\"FORMAT.MOVE\",129:\"FORMAT.SIZE\",130:\"FORMULA.REPLACE\",131:\"SEND.KEYS\",132:\"SELECT.SPECIAL\",133:\"APPLY.NAMES\",134:\"REPLACE.FONT\",135:\"FREEZE.PANES\",136:\"SHOW.INFO\",137:\"SPLIT\",138:\"ON.WINDOW\",139:\"ON.DATA\",140:\"DISABLE.INPUT\",142:\"OUTLINE\",143:\"LIST.NAMES\",144:\"FILE.CLOSE\",145:\"SAVE.WORKBOOK\",146:\"DATA.FORM\",147:\"COPY.CHART\",148:\"ON.TIME\",149:\"WAIT\",150:\"FORMAT.FONT\",151:\"FILL.UP\",152:\"FILL.LEFT\",153:\"DELETE.OVERLAY\",155:\"SHORT.MENUS\",159:\"SET.UPDATE.STATUS\",161:\"COLOR.PALETTE\",162:\"DELETE.STYLE\",163:\"WINDOW.RESTORE\",164:\"WINDOW.MAXIMIZE\",166:\"CHANGE.LINK\",167:\"CALCULATE.DOCUMENT\",168:\"ON.KEY\",169:\"APP.RESTORE\",170:\"APP.MOVE\",171:\"APP.SIZE\",172:\"APP.MINIMIZE\",173:\"APP.MAXIMIZE\",174:\"BRING.TO.FRONT\",175:\"SEND.TO.BACK\",185:\"MAIN.CHART.TYPE\",186:\"OVERLAY.CHART.TYPE\",187:\"SELECT.END\",188:\"OPEN.MAIL\",189:\"SEND.MAIL\",190:\"STANDARD.FONT\",191:\"CONSOLIDATE\",192:\"SORT.SPECIAL\",193:\"GALLERY.3D.AREA\",194:\"GALLERY.3D.COLUMN\",195:\"GALLERY.3D.LINE\",196:\"GALLERY.3D.PIE\",197:\"VIEW.3D\",198:\"GOAL.SEEK\",199:\"WORKGROUP\",200:\"FILL.GROUP\",201:\"UPDATE.LINK\",202:\"PROMOTE\",203:\"DEMOTE\",204:\"SHOW.DETAIL\",206:\"UNGROUP\",207:\"OBJECT.PROPERTIES\",208:\"SAVE.NEW.OBJECT\",209:\"SHARE\",210:\"SHARE.NAME\",211:\"DUPLICATE\",212:\"APPLY.STYLE\",213:\"ASSIGN.TO.OBJECT\",214:\"OBJECT.PROTECTION\",215:\"HIDE.OBJECT\",216:\"SET.EXTRACT\",217:\"CREATE.PUBLISHER\",218:\"SUBSCRIBE.TO\",219:\"ATTRIBUTES\",220:\"SHOW.TOOLBAR\",222:\"PRINT.PREVIEW\",223:\"EDIT.COLOR\",224:\"SHOW.LEVELS\",225:\"FORMAT.MAIN\",226:\"FORMAT.OVERLAY\",227:\"ON.RECALC\",228:\"EDIT.SERIES\",229:\"DEFINE.STYLE\",240:\"LINE.PRINT\",243:\"ENTER.DATA\",249:\"GALLERY.RADAR\",250:\"MERGE.STYLES\",251:\"EDITION.OPTIONS\",252:\"PASTE.PICTURE\",253:\"PASTE.PICTURE.LINK\",254:\"SPELLING\",256:\"ZOOM\",259:\"INSERT.OBJECT\",260:\"WINDOW.MINIMIZE\",265:\"SOUND.NOTE\",266:\"SOUND.PLAY\",267:\"FORMAT.SHAPE\",268:\"EXTEND.POLYGON\",269:\"FORMAT.AUTO\",272:\"GALLERY.3D.BAR\",273:\"GALLERY.3D.SURFACE\",274:\"FILL.AUTO\",276:\"CUSTOMIZE.TOOLBAR\",277:\"ADD.TOOL\",278:\"EDIT.OBJECT\",279:\"ON.DOUBLECLICK\",280:\"ON.ENTRY\",281:\"WORKBOOK.ADD\",282:\"WORKBOOK.MOVE\",283:\"WORKBOOK.COPY\",284:\"WORKBOOK.OPTIONS\",285:\"SAVE.WORKSPACE\",288:\"CHART.WIZARD\",289:\"DELETE.TOOL\",290:\"MOVE.TOOL\",291:\"WORKBOOK.SELECT\",292:\"WORKBOOK.ACTIVATE\",293:\"ASSIGN.TO.TOOL\",295:\"COPY.TOOL\",296:\"RESET.TOOL\",297:\"CONSTRAIN.NUMERIC\",298:\"PASTE.TOOL\",302:\"WORKBOOK.NEW\",305:\"SCENARIO.CELLS\",306:\"SCENARIO.DELETE\",307:\"SCENARIO.ADD\",308:\"SCENARIO.EDIT\",309:\"SCENARIO.SHOW\",310:\"SCENARIO.SHOW.NEXT\",311:\"SCENARIO.SUMMARY\",312:\"PIVOT.TABLE.WIZARD\",313:\"PIVOT.FIELD.PROPERTIES\",314:\"PIVOT.FIELD\",315:\"PIVOT.ITEM\",316:\"PIVOT.ADD.FIELDS\",318:\"OPTIONS.CALCULATION\",319:\"OPTIONS.EDIT\",320:\"OPTIONS.VIEW\",321:\"ADDIN.MANAGER\",322:\"MENU.EDITOR\",323:\"ATTACH.TOOLBARS\",324:\"VBAActivate\",325:\"OPTIONS.CHART\",328:\"VBA.INSERT.FILE\",330:\"VBA.PROCEDURE.DEFINITION\",336:\"ROUTING.SLIP\",338:\"ROUTE.DOCUMENT\",339:\"MAIL.LOGON\",342:\"INSERT.PICTURE\",343:\"EDIT.TOOL\",344:\"GALLERY.DOUGHNUT\",350:\"CHART.TREND\",352:\"PIVOT.ITEM.PROPERTIES\",354:\"WORKBOOK.INSERT\",355:\"OPTIONS.TRANSITION\",356:\"OPTIONS.GENERAL\",370:\"FILTER.ADVANCED\",373:\"MAIL.ADD.MAILER\",374:\"MAIL.DELETE.MAILER\",375:\"MAIL.REPLY\",376:\"MAIL.REPLY.ALL\",377:\"MAIL.FORWARD\",378:\"MAIL.NEXT.LETTER\",379:\"DATA.LABEL\",380:\"INSERT.TITLE\",381:\"FONT.PROPERTIES\",382:\"MACRO.OPTIONS\",383:\"WORKBOOK.HIDE\",384:\"WORKBOOK.UNHIDE\",385:\"WORKBOOK.DELETE\",386:\"WORKBOOK.NAME\",388:\"GALLERY.CUSTOM\",390:\"ADD.CHART.AUTOFORMAT\",391:\"DELETE.CHART.AUTOFORMAT\",392:\"CHART.ADD.DATA\",393:\"AUTO.OUTLINE\",394:\"TAB.ORDER\",395:\"SHOW.DIALOG\",396:\"SELECT.ALL\",397:\"UNGROUP.SHEETS\",398:\"SUBTOTAL.CREATE\",399:\"SUBTOTAL.REMOVE\",400:\"RENAME.OBJECT\",412:\"WORKBOOK.SCROLL\",413:\"WORKBOOK.NEXT\",414:\"WORKBOOK.PREV\",415:\"WORKBOOK.TAB.SPLIT\",416:\"FULL.SCREEN\",417:\"WORKBOOK.PROTECT\",420:\"SCROLLBAR.PROPERTIES\",421:\"PIVOT.SHOW.PAGES\",422:\"TEXT.TO.COLUMNS\",423:\"FORMAT.CHARTTYPE\",424:\"LINK.FORMAT\",425:\"TRACER.DISPLAY\",430:\"TRACER.NAVIGATE\",431:\"TRACER.CLEAR\",432:\"TRACER.ERROR\",433:\"PIVOT.FIELD.GROUP\",434:\"PIVOT.FIELD.UNGROUP\",435:\"CHECKBOX.PROPERTIES\",436:\"LABEL.PROPERTIES\",437:\"LISTBOX.PROPERTIES\",438:\"EDITBOX.PROPERTIES\",439:\"PIVOT.REFRESH\",440:\"LINK.COMBO\",441:\"OPEN.TEXT\",442:\"HIDE.DIALOG\",443:\"SET.DIALOG.FOCUS\",444:\"ENABLE.OBJECT\",445:\"PUSHBUTTON.PROPERTIES\",446:\"SET.DIALOG.DEFAULT\",447:\"FILTER\",448:\"FILTER.SHOW.ALL\",449:\"CLEAR.OUTLINE\",450:\"FUNCTION.WIZARD\",451:\"ADD.LIST.ITEM\",452:\"SET.LIST.ITEM\",453:\"REMOVE.LIST.ITEM\",454:\"SELECT.LIST.ITEM\",455:\"SET.CONTROL.VALUE\",456:\"SAVE.COPY.AS\",458:\"OPTIONS.LISTS.ADD\",459:\"OPTIONS.LISTS.DELETE\",460:\"SERIES.AXES\",461:\"SERIES.X\",462:\"SERIES.Y\",463:\"ERRORBAR.X\",464:\"ERRORBAR.Y\",465:\"FORMAT.CHART\",466:\"SERIES.ORDER\",467:\"MAIL.LOGOFF\",468:\"CLEAR.ROUTING.SLIP\",469:\"APP.ACTIVATE.MICROSOFT\",470:\"MAIL.EDIT.MAILER\",471:\"ON.SHEET\",472:\"STANDARD.WIDTH\",473:\"SCENARIO.MERGE\",474:\"SUMMARY.INFO\",475:\"FIND.FILE\",476:\"ACTIVE.CELL.FONT\",477:\"ENABLE.TIPWIZARD\",478:\"VBA.MAKE.ADDIN\",480:\"INSERTDATATABLE\",481:\"WORKGROUP.OPTIONS\",482:\"MAIL.SEND.MAILER\",485:\"AUTOCORRECT\",489:\"POST.DOCUMENT\",491:\"PICKLIST\",493:\"VIEW.SHOW\",494:\"VIEW.DEFINE\",495:\"VIEW.DELETE\",509:\"SHEET.BACKGROUND\",510:\"INSERT.MAP.OBJECT\",511:\"OPTIONS.MENONO\",517:\"MSOCHECKS\",518:\"NORMAL\",519:\"LAYOUT\",520:\"RM.PRINT.AREA\",521:\"CLEAR.PRINT.AREA\",522:\"ADD.PRINT.AREA\",523:\"MOVE.BRK\",545:\"HIDECURR.NOTE\",546:\"HIDEALL.NOTES\",547:\"DELETE.NOTE\",548:\"TRAVERSE.NOTES\",549:\"ACTIVATE.NOTES\",620:\"PROTECT.REVISIONS\",621:\"UNPROTECT.REVISIONS\",647:\"OPTIONS.ME\",653:\"WEB.PUBLISH\",667:\"NEWWEBQUERY\",673:\"PIVOT.TABLE.CHART\",753:\"OPTIONS.SAVE\",755:\"OPTIONS.SPELL\",808:\"HIDEALL.INKANNOTS\"},jo={0:\"COUNT\",1:\"IF\",2:\"ISNA\",3:\"ISERROR\",4:\"SUM\",5:\"AVERAGE\",6:\"MIN\",7:\"MAX\",8:\"ROW\",9:\"COLUMN\",10:\"NA\",11:\"NPV\",12:\"STDEV\",13:\"DOLLAR\",14:\"FIXED\",15:\"SIN\",16:\"COS\",17:\"TAN\",18:\"ATAN\",19:\"PI\",20:\"SQRT\",21:\"EXP\",22:\"LN\",23:\"LOG10\",24:\"ABS\",25:\"INT\",26:\"SIGN\",27:\"ROUND\",28:\"LOOKUP\",29:\"INDEX\",30:\"REPT\",31:\"MID\",32:\"LEN\",33:\"VALUE\",34:\"TRUE\",35:\"FALSE\",36:\"AND\",37:\"OR\",38:\"NOT\",39:\"MOD\",40:\"DCOUNT\",41:\"DSUM\",42:\"DAVERAGE\",43:\"DMIN\",44:\"DMAX\",45:\"DSTDEV\",46:\"VAR\",47:\"DVAR\",48:\"TEXT\",49:\"LINEST\",50:\"TREND\",51:\"LOGEST\",52:\"GROWTH\",53:\"GOTO\",54:\"HALT\",55:\"RETURN\",56:\"PV\",57:\"FV\",58:\"NPER\",59:\"PMT\",60:\"RATE\",61:\"MIRR\",62:\"IRR\",63:\"RAND\",64:\"MATCH\",65:\"DATE\",66:\"TIME\",67:\"DAY\",68:\"MONTH\",69:\"YEAR\",70:\"WEEKDAY\",71:\"HOUR\",72:\"MINUTE\",73:\"SECOND\",74:\"NOW\",75:\"AREAS\",76:\"ROWS\",77:\"COLUMNS\",78:\"OFFSET\",79:\"ABSREF\",80:\"RELREF\",81:\"ARGUMENT\",82:\"SEARCH\",83:\"TRANSPOSE\",84:\"ERROR\",85:\"STEP\",86:\"TYPE\",87:\"ECHO\",88:\"SET.NAME\",89:\"CALLER\",90:\"DEREF\",91:\"WINDOWS\",92:\"SERIES\",93:\"DOCUMENTS\",94:\"ACTIVE.CELL\",95:\"SELECTION\",96:\"RESULT\",97:\"ATAN2\",98:\"ASIN\",99:\"ACOS\",100:\"CHOOSE\",101:\"HLOOKUP\",102:\"VLOOKUP\",103:\"LINKS\",104:\"INPUT\",105:\"ISREF\",106:\"GET.FORMULA\",107:\"GET.NAME\",108:\"SET.VALUE\",109:\"LOG\",110:\"EXEC\",111:\"CHAR\",112:\"LOWER\",113:\"UPPER\",114:\"PROPER\",115:\"LEFT\",116:\"RIGHT\",117:\"EXACT\",118:\"TRIM\",119:\"REPLACE\",120:\"SUBSTITUTE\",121:\"CODE\",122:\"NAMES\",123:\"DIRECTORY\",124:\"FIND\",125:\"CELL\",126:\"ISERR\",127:\"ISTEXT\",128:\"ISNUMBER\",129:\"ISBLANK\",130:\"T\",131:\"N\",132:\"FOPEN\",133:\"FCLOSE\",134:\"FSIZE\",135:\"FREADLN\",136:\"FREAD\",137:\"FWRITELN\",138:\"FWRITE\",139:\"FPOS\",140:\"DATEVALUE\",141:\"TIMEVALUE\",142:\"SLN\",143:\"SYD\",144:\"DDB\",145:\"GET.DEF\",146:\"REFTEXT\",147:\"TEXTREF\",148:\"INDIRECT\",149:\"REGISTER\",150:\"CALL\",151:\"ADD.BAR\",152:\"ADD.MENU\",153:\"ADD.COMMAND\",154:\"ENABLE.COMMAND\",155:\"CHECK.COMMAND\",156:\"RENAME.COMMAND\",157:\"SHOW.BAR\",158:\"DELETE.MENU\",159:\"DELETE.COMMAND\",160:\"GET.CHART.ITEM\",161:\"DIALOG.BOX\",162:\"CLEAN\",163:\"MDETERM\",164:\"MINVERSE\",165:\"MMULT\",166:\"FILES\",167:\"IPMT\",168:\"PPMT\",169:\"COUNTA\",170:\"CANCEL.KEY\",171:\"FOR\",172:\"WHILE\",173:\"BREAK\",174:\"NEXT\",175:\"INITIATE\",176:\"REQUEST\",177:\"POKE\",178:\"EXECUTE\",179:\"TERMINATE\",180:\"RESTART\",181:\"HELP\",182:\"GET.BAR\",183:\"PRODUCT\",184:\"FACT\",185:\"GET.CELL\",186:\"GET.WORKSPACE\",187:\"GET.WINDOW\",188:\"GET.DOCUMENT\",189:\"DPRODUCT\",190:\"ISNONTEXT\",191:\"GET.NOTE\",192:\"NOTE\",193:\"STDEVP\",194:\"VARP\",195:\"DSTDEVP\",196:\"DVARP\",197:\"TRUNC\",198:\"ISLOGICAL\",199:\"DCOUNTA\",200:\"DELETE.BAR\",201:\"UNREGISTER\",204:\"USDOLLAR\",205:\"FINDB\",206:\"SEARCHB\",207:\"REPLACEB\",208:\"LEFTB\",209:\"RIGHTB\",210:\"MIDB\",211:\"LENB\",212:\"ROUNDUP\",213:\"ROUNDDOWN\",214:\"ASC\",215:\"DBCS\",216:\"RANK\",219:\"ADDRESS\",220:\"DAYS360\",221:\"TODAY\",222:\"VDB\",223:\"ELSE\",224:\"ELSE.IF\",225:\"END.IF\",226:\"FOR.CELL\",227:\"MEDIAN\",228:\"SUMPRODUCT\",229:\"SINH\",230:\"COSH\",231:\"TANH\",232:\"ASINH\",233:\"ACOSH\",234:\"ATANH\",235:\"DGET\",236:\"CREATE.OBJECT\",237:\"VOLATILE\",238:\"LAST.ERROR\",239:\"CUSTOM.UNDO\",240:\"CUSTOM.REPEAT\",241:\"FORMULA.CONVERT\",242:\"GET.LINK.INFO\",243:\"TEXT.BOX\",244:\"INFO\",245:\"GROUP\",246:\"GET.OBJECT\",247:\"DB\",248:\"PAUSE\",251:\"RESUME\",252:\"FREQUENCY\",253:\"ADD.TOOLBAR\",254:\"DELETE.TOOLBAR\",255:\"User\",256:\"RESET.TOOLBAR\",257:\"EVALUATE\",258:\"GET.TOOLBAR\",259:\"GET.TOOL\",260:\"SPELLING.CHECK\",261:\"ERROR.TYPE\",262:\"APP.TITLE\",263:\"WINDOW.TITLE\",264:\"SAVE.TOOLBAR\",265:\"ENABLE.TOOL\",266:\"PRESS.TOOL\",267:\"REGISTER.ID\",268:\"GET.WORKBOOK\",269:\"AVEDEV\",270:\"BETADIST\",271:\"GAMMALN\",272:\"BETAINV\",273:\"BINOMDIST\",274:\"CHIDIST\",275:\"CHIINV\",276:\"COMBIN\",277:\"CONFIDENCE\",278:\"CRITBINOM\",279:\"EVEN\",280:\"EXPONDIST\",281:\"FDIST\",282:\"FINV\",283:\"FISHER\",284:\"FISHERINV\",285:\"FLOOR\",286:\"GAMMADIST\",287:\"GAMMAINV\",288:\"CEILING\",289:\"HYPGEOMDIST\",290:\"LOGNORMDIST\",291:\"LOGINV\",292:\"NEGBINOMDIST\",293:\"NORMDIST\",294:\"NORMSDIST\",295:\"NORMINV\",296:\"NORMSINV\",297:\"STANDARDIZE\",298:\"ODD\",299:\"PERMUT\",300:\"POISSON\",301:\"TDIST\",302:\"WEIBULL\",303:\"SUMXMY2\",304:\"SUMX2MY2\",305:\"SUMX2PY2\",306:\"CHITEST\",307:\"CORREL\",308:\"COVAR\",309:\"FORECAST\",310:\"FTEST\",311:\"INTERCEPT\",312:\"PEARSON\",313:\"RSQ\",314:\"STEYX\",315:\"SLOPE\",316:\"TTEST\",317:\"PROB\",318:\"DEVSQ\",319:\"GEOMEAN\",320:\"HARMEAN\",321:\"SUMSQ\",322:\"KURT\",323:\"SKEW\",324:\"ZTEST\",325:\"LARGE\",326:\"SMALL\",327:\"QUARTILE\",328:\"PERCENTILE\",329:\"PERCENTRANK\",330:\"MODE\",331:\"TRIMMEAN\",332:\"TINV\",334:\"MOVIE.COMMAND\",335:\"GET.MOVIE\",336:\"CONCATENATE\",337:\"POWER\",338:\"PIVOT.ADD.DATA\",339:\"GET.PIVOT.TABLE\",340:\"GET.PIVOT.FIELD\",341:\"GET.PIVOT.ITEM\",342:\"RADIANS\",343:\"DEGREES\",344:\"SUBTOTAL\",345:\"SUMIF\",346:\"COUNTIF\",347:\"COUNTBLANK\",348:\"SCENARIO.GET\",349:\"OPTIONS.LISTS.GET\",350:\"ISPMT\",351:\"DATEDIF\",352:\"DATESTRING\",353:\"NUMBERSTRING\",354:\"ROMAN\",355:\"OPEN.DIALOG\",356:\"SAVE.DIALOG\",357:\"VIEW.GET\",358:\"GETPIVOTDATA\",359:\"HYPERLINK\",360:\"PHONETIC\",361:\"AVERAGEA\",362:\"MAXA\",363:\"MINA\",364:\"STDEVPA\",365:\"VARPA\",366:\"STDEVA\",367:\"VARA\",368:\"BAHTTEXT\",369:\"THAIDAYOFWEEK\",370:\"THAIDIGIT\",371:\"THAIMONTHOFYEAR\",372:\"THAINUMSOUND\",373:\"THAINUMSTRING\",374:\"THAISTRINGLENGTH\",375:\"ISTHAIDIGIT\",376:\"ROUNDBAHTDOWN\",377:\"ROUNDBAHTUP\",378:\"THAIYEAR\",379:\"RTD\",380:\"CUBEVALUE\",381:\"CUBEMEMBER\",382:\"CUBEMEMBERPROPERTY\",383:\"CUBERANKEDMEMBER\",384:\"HEX2BIN\",385:\"HEX2DEC\",386:\"HEX2OCT\",387:\"DEC2BIN\",388:\"DEC2HEX\",389:\"DEC2OCT\",390:\"OCT2BIN\",391:\"OCT2HEX\",392:\"OCT2DEC\",393:\"BIN2DEC\",394:\"BIN2OCT\",395:\"BIN2HEX\",396:\"IMSUB\",397:\"IMDIV\",398:\"IMPOWER\",399:\"IMABS\",400:\"IMSQRT\",401:\"IMLN\",402:\"IMLOG2\",403:\"IMLOG10\",404:\"IMSIN\",405:\"IMCOS\",406:\"IMEXP\",407:\"IMARGUMENT\",408:\"IMCONJUGATE\",409:\"IMAGINARY\",410:\"IMREAL\",411:\"COMPLEX\",412:\"IMSUM\",413:\"IMPRODUCT\",414:\"SERIESSUM\",415:\"FACTDOUBLE\",416:\"SQRTPI\",417:\"QUOTIENT\",418:\"DELTA\",419:\"GESTEP\",420:\"ISEVEN\",421:\"ISODD\",422:\"MROUND\",423:\"ERF\",424:\"ERFC\",425:\"BESSELJ\",426:\"BESSELK\",427:\"BESSELY\",428:\"BESSELI\",429:\"XIRR\",430:\"XNPV\",431:\"PRICEMAT\",432:\"YIELDMAT\",433:\"INTRATE\",434:\"RECEIVED\",435:\"DISC\",436:\"PRICEDISC\",437:\"YIELDDISC\",438:\"TBILLEQ\",439:\"TBILLPRICE\",440:\"TBILLYIELD\",441:\"PRICE\",442:\"YIELD\",443:\"DOLLARDE\",444:\"DOLLARFR\",445:\"NOMINAL\",446:\"EFFECT\",447:\"CUMPRINC\",448:\"CUMIPMT\",449:\"EDATE\",450:\"EOMONTH\",451:\"YEARFRAC\",452:\"COUPDAYBS\",453:\"COUPDAYS\",454:\"COUPDAYSNC\",455:\"COUPNCD\",456:\"COUPNUM\",457:\"COUPPCD\",458:\"DURATION\",459:\"MDURATION\",460:\"ODDLPRICE\",461:\"ODDLYIELD\",462:\"ODDFPRICE\",463:\"ODDFYIELD\",464:\"RANDBETWEEN\",465:\"WEEKNUM\",466:\"AMORDEGRC\",467:\"AMORLINC\",468:\"CONVERT\",724:\"SHEETJS\",469:\"ACCRINT\",470:\"ACCRINTM\",471:\"WORKDAY\",472:\"NETWORKDAYS\",473:\"GCD\",474:\"MULTINOMIAL\",475:\"LCM\",476:\"FVSCHEDULE\",477:\"CUBEKPIMEMBER\",478:\"CUBESET\",479:\"CUBESETCOUNT\",480:\"IFERROR\",481:\"COUNTIFS\",482:\"SUMIFS\",483:\"AVERAGEIF\",484:\"AVERAGEIFS\"},Zo={2:1,3:1,10:0,15:1,16:1,17:1,18:1,19:0,20:1,21:1,22:1,23:1,24:1,25:1,26:1,27:2,30:2,31:3,32:1,33:1,34:0,35:0,38:1,39:2,40:3,41:3,42:3,43:3,44:3,45:3,47:3,48:2,53:1,61:3,63:0,65:3,66:3,67:1,68:1,69:1,70:1,71:1,72:1,73:1,74:0,75:1,76:1,77:1,79:2,80:2,83:1,85:0,86:1,89:0,90:1,94:0,95:0,97:2,98:1,99:1,101:3,102:3,105:1,106:1,108:2,111:1,112:1,113:1,114:1,117:2,118:1,119:4,121:1,126:1,127:1,128:1,129:1,130:1,131:1,133:1,134:1,135:1,136:2,137:2,138:2,140:1,141:1,142:3,143:4,144:4,161:1,162:1,163:1,164:1,165:2,172:1,175:2,176:2,177:3,178:2,179:1,184:1,186:1,189:3,190:1,195:3,196:3,197:1,198:1,199:3,201:1,207:4,210:3,211:1,212:2,213:2,214:1,215:1,225:0,229:1,230:1,231:1,232:1,233:1,234:1,235:3,244:1,247:4,252:2,257:1,261:1,271:1,273:4,274:2,275:2,276:2,277:3,278:3,279:1,280:3,281:3,282:3,283:1,284:1,285:2,286:4,287:3,288:2,289:4,290:3,291:3,292:3,293:4,294:1,295:3,296:1,297:3,298:1,299:2,300:3,301:3,302:4,303:2,304:2,305:2,306:2,307:2,308:2,309:3,310:2,311:2,312:2,313:2,314:2,315:2,316:4,325:2,326:2,327:2,328:2,331:2,332:2,337:2,342:1,343:1,346:2,347:1,350:4,351:3,352:1,353:2,360:1,368:1,369:1,370:1,371:1,372:1,373:1,374:1,375:1,376:1,377:1,378:1,382:3,385:1,392:1,393:1,396:2,397:2,398:2,399:1,400:1,401:1,402:1,403:1,404:1,405:1,406:1,407:1,408:1,409:1,410:1,414:4,415:1,416:1,417:2,420:1,421:1,422:2,424:1,425:2,426:2,427:2,428:2,430:3,438:3,439:3,440:3,443:2,444:2,445:2,446:2,447:6,448:6,449:2,450:2,464:2,468:3,476:2,479:1,480:2,65535:0},zo={\"_xlfn.ACOT\":\"ACOT\",\"_xlfn.ACOTH\":\"ACOTH\",\"_xlfn.AGGREGATE\":\"AGGREGATE\",\"_xlfn.ARABIC\":\"ARABIC\",\"_xlfn.AVERAGEIF\":\"AVERAGEIF\",\"_xlfn.AVERAGEIFS\":\"AVERAGEIFS\",\"_xlfn.BASE\":\"BASE\",\"_xlfn.BETA.DIST\":\"BETA.DIST\",\"_xlfn.BETA.INV\":\"BETA.INV\",\"_xlfn.BINOM.DIST\":\"BINOM.DIST\",\"_xlfn.BINOM.DIST.RANGE\":\"BINOM.DIST.RANGE\",\"_xlfn.BINOM.INV\":\"BINOM.INV\",\"_xlfn.BITAND\":\"BITAND\",\"_xlfn.BITLSHIFT\":\"BITLSHIFT\",\"_xlfn.BITOR\":\"BITOR\",\"_xlfn.BITRSHIFT\":\"BITRSHIFT\",\"_xlfn.BITXOR\":\"BITXOR\",\"_xlfn.CEILING.MATH\":\"CEILING.MATH\",\"_xlfn.CEILING.PRECISE\":\"CEILING.PRECISE\",\"_xlfn.CHISQ.DIST\":\"CHISQ.DIST\",\"_xlfn.CHISQ.DIST.RT\":\"CHISQ.DIST.RT\",\"_xlfn.CHISQ.INV\":\"CHISQ.INV\",\"_xlfn.CHISQ.INV.RT\":\"CHISQ.INV.RT\",\"_xlfn.CHISQ.TEST\":\"CHISQ.TEST\",\"_xlfn.COMBINA\":\"COMBINA\",\"_xlfn.CONCAT\":\"CONCAT\",\"_xlfn.CONFIDENCE.NORM\":\"CONFIDENCE.NORM\",\"_xlfn.CONFIDENCE.T\":\"CONFIDENCE.T\",\"_xlfn.COT\":\"COT\",\"_xlfn.COTH\":\"COTH\",\"_xlfn.COUNTIFS\":\"COUNTIFS\",\"_xlfn.COVARIANCE.P\":\"COVARIANCE.P\",\"_xlfn.COVARIANCE.S\":\"COVARIANCE.S\",\"_xlfn.CSC\":\"CSC\",\"_xlfn.CSCH\":\"CSCH\",\"_xlfn.DAYS\":\"DAYS\",\"_xlfn.DECIMAL\":\"DECIMAL\",\"_xlfn.ECMA.CEILING\":\"ECMA.CEILING\",\"_xlfn.ERF.PRECISE\":\"ERF.PRECISE\",\"_xlfn.ERFC.PRECISE\":\"ERFC.PRECISE\",\"_xlfn.EXPON.DIST\":\"EXPON.DIST\",\"_xlfn.F.DIST\":\"F.DIST\",\"_xlfn.F.DIST.RT\":\"F.DIST.RT\",\"_xlfn.F.INV\":\"F.INV\",\"_xlfn.F.INV.RT\":\"F.INV.RT\",\"_xlfn.F.TEST\":\"F.TEST\",\"_xlfn.FILTERXML\":\"FILTERXML\",\"_xlfn.FLOOR.MATH\":\"FLOOR.MATH\",\"_xlfn.FLOOR.PRECISE\":\"FLOOR.PRECISE\",\"_xlfn.FORECAST.ETS\":\"FORECAST.ETS\",\"_xlfn.FORECAST.ETS.CONFINT\":\"FORECAST.ETS.CONFINT\",\"_xlfn.FORECAST.ETS.SEASONALITY\":\"FORECAST.ETS.SEASONALITY\",\"_xlfn.FORECAST.ETS.STAT\":\"FORECAST.ETS.STAT\",\"_xlfn.FORECAST.LINEAR\":\"FORECAST.LINEAR\",\"_xlfn.FORMULATEXT\":\"FORMULATEXT\",\"_xlfn.GAMMA\":\"GAMMA\",\"_xlfn.GAMMA.DIST\":\"GAMMA.DIST\",\"_xlfn.GAMMA.INV\":\"GAMMA.INV\",\"_xlfn.GAMMALN.PRECISE\":\"GAMMALN.PRECISE\",\"_xlfn.GAUSS\":\"GAUSS\",\"_xlfn.HYPGEOM.DIST\":\"HYPGEOM.DIST\",\"_xlfn.IFERROR\":\"IFERROR\",\"_xlfn.IFNA\":\"IFNA\",\"_xlfn.IFS\":\"IFS\",\"_xlfn.IMCOSH\":\"IMCOSH\",\"_xlfn.IMCOT\":\"IMCOT\",\"_xlfn.IMCSC\":\"IMCSC\",\"_xlfn.IMCSCH\":\"IMCSCH\",\"_xlfn.IMSEC\":\"IMSEC\",\"_xlfn.IMSECH\":\"IMSECH\",\"_xlfn.IMSINH\":\"IMSINH\",\"_xlfn.IMTAN\":\"IMTAN\",\"_xlfn.ISFORMULA\":\"ISFORMULA\",\"_xlfn.ISO.CEILING\":\"ISO.CEILING\",\"_xlfn.ISOWEEKNUM\":\"ISOWEEKNUM\",\"_xlfn.LOGNORM.DIST\":\"LOGNORM.DIST\",\"_xlfn.LOGNORM.INV\":\"LOGNORM.INV\",\"_xlfn.MAXIFS\":\"MAXIFS\",\"_xlfn.MINIFS\":\"MINIFS\",\"_xlfn.MODE.MULT\":\"MODE.MULT\",\"_xlfn.MODE.SNGL\":\"MODE.SNGL\",\"_xlfn.MUNIT\":\"MUNIT\",\"_xlfn.NEGBINOM.DIST\":\"NEGBINOM.DIST\",\"_xlfn.NETWORKDAYS.INTL\":\"NETWORKDAYS.INTL\",\"_xlfn.NIGBINOM\":\"NIGBINOM\",\"_xlfn.NORM.DIST\":\"NORM.DIST\",\"_xlfn.NORM.INV\":\"NORM.INV\",\"_xlfn.NORM.S.DIST\":\"NORM.S.DIST\",\"_xlfn.NORM.S.INV\":\"NORM.S.INV\",\"_xlfn.NUMBERVALUE\":\"NUMBERVALUE\",\"_xlfn.PDURATION\":\"PDURATION\",\"_xlfn.PERCENTILE.EXC\":\"PERCENTILE.EXC\",\"_xlfn.PERCENTILE.INC\":\"PERCENTILE.INC\",\"_xlfn.PERCENTRANK.EXC\":\"PERCENTRANK.EXC\",\"_xlfn.PERCENTRANK.INC\":\"PERCENTRANK.INC\",\"_xlfn.PERMUTATIONA\":\"PERMUTATIONA\",\"_xlfn.PHI\":\"PHI\",\"_xlfn.POISSON.DIST\":\"POISSON.DIST\",\"_xlfn.QUARTILE.EXC\":\"QUARTILE.EXC\",\"_xlfn.QUARTILE.INC\":\"QUARTILE.INC\",\"_xlfn.QUERYSTRING\":\"QUERYSTRING\",\"_xlfn.RANK.AVG\":\"RANK.AVG\",\"_xlfn.RANK.EQ\":\"RANK.EQ\",\"_xlfn.RRI\":\"RRI\",\"_xlfn.SEC\":\"SEC\",\"_xlfn.SECH\":\"SECH\",\"_xlfn.SHEET\":\"SHEET\",\"_xlfn.SHEETS\":\"SHEETS\",\"_xlfn.SKEW.P\":\"SKEW.P\",\"_xlfn.STDEV.P\":\"STDEV.P\",\"_xlfn.STDEV.S\":\"STDEV.S\",\"_xlfn.SUMIFS\":\"SUMIFS\",\"_xlfn.SWITCH\":\"SWITCH\",\"_xlfn.T.DIST\":\"T.DIST\",\"_xlfn.T.DIST.2T\":\"T.DIST.2T\",\"_xlfn.T.DIST.RT\":\"T.DIST.RT\",\"_xlfn.T.INV\":\"T.INV\",\"_xlfn.T.INV.2T\":\"T.INV.2T\",\"_xlfn.T.TEST\":\"T.TEST\",\"_xlfn.TEXTJOIN\":\"TEXTJOIN\",\"_xlfn.UNICHAR\":\"UNICHAR\",\"_xlfn.UNICODE\":\"UNICODE\",\"_xlfn.VAR.P\":\"VAR.P\",\"_xlfn.VAR.S\":\"VAR.S\",\"_xlfn.WEBSERVICE\":\"WEBSERVICE\",\"_xlfn.WEIBULL.DIST\":\"WEIBULL.DIST\",\"_xlfn.WORKDAY.INTL\":\"WORKDAY.INTL\",\"_xlfn.XOR\":\"XOR\",\"_xlfn.Z.TEST\":\"Z.TEST\"};function Ko(e){return\"of:\"==e.slice(0,3)&&(e=e.slice(3)),61==e.charCodeAt(0)&&61==(e=e.slice(1)).charCodeAt(0)&&(e=e.slice(1)),(e=(e=(e=e.replace(/COM\\.MICROSOFT\\./g,\"\")).replace(/\\[((?:\\.[A-Z]+[0-9]+)(?::\\.[A-Z]+[0-9]+)?)\\]/g,(function(e,t){return t.replace(/\\./g,\"\")}))).replace(/\\[.(#[A-Z]*[?!])\\]/g,\"$1\")).replace(/[;~]/g,\",\").replace(/\\|/g,\";\")}function Xo(e){var t=e.split(\":\");return[t[0].split(\".\")[0],t[0].split(\".\")[1]+(t.length>1?\":\"+(t[1].split(\".\")[1]||t[1].split(\".\")[0]):\"\")]}var Uo={},Yo={};Vn.WS=[\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\",\"http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet\"];var Jo=\"undefined\"!=typeof Map;function Qo(e,t,n){var r=0,i=e.length;if(n){if(Jo?n.has(t):n.hasOwnProperty(t))for(var s=Jo?n.get(t):n[t];r<s.length;++r)if(e[s[r]].t===t)return e.Count++,s[r]}else for(;r<i;++r)if(e[r].t===t)return e.Count++,r;return e[i]={t:t},e.Count++,e.Unique++,n&&(Jo?(n.has(t)||n.set(t,[]),n.get(t).push(i)):(n.hasOwnProperty(t)||(n[t]=[]),n[t].push(i))),i}function qo(e,t){var n={min:e+1,max:e+1},r=-1;return t.MDW&&(rs=t.MDW),null!=t.width?n.customWidth=1:null!=t.wpx?r=ss(t.wpx):null!=t.wch&&(r=t.wch),r>-1?(n.width=os(r),n.customWidth=1):null!=t.width&&(n.width=t.width),t.hidden&&(n.hidden=!0),n}function ea(e,t){if(e){var n=[.7,.7,.75,.75,.3,.3];\"xlml\"==t&&(n=[1,1,1,1,.5,.5]),null==e.left&&(e.left=n[0]),null==e.right&&(e.right=n[1]),null==e.top&&(e.top=n[2]),null==e.bottom&&(e.bottom=n[3]),null==e.header&&(e.header=n[4]),null==e.footer&&(e.footer=n[5])}}function ta(e,t,n){var r=n.revssf[null!=t.z?t.z:\"General\"],i=60,s=e.length;if(null==r&&n.ssf)for(;i<392;++i)if(null==n.ssf[i]){T.load(t.z,i),n.ssf[i]=t.z,n.revssf[t.z]=r=i;break}for(i=0;i!=s;++i)if(e[i].numFmtId===r)return i;return e[s]={numFmtId:r,fontId:0,fillId:0,borderId:0,xfId:0,applyNumberFormat:1},s}function na(e,t,n,r,i,s){if(\"z\"!==e.t){\"d\"===e.t&&\"string\"==typeof e.v&&(e.v=J(e.v));try{r.cellNF&&(e.z=T._table[t])}catch(El){if(r.WTF)throw El}if(!r||!1!==r.cellText)try{if(null==T._table[t]&&T.load(L[t]||\"General\",t),\"e\"===e.t)e.w=e.w||wn[e.v];else if(0===t)if(\"n\"===e.t)e.w=(0|e.v)===e.v?T._general_int(e.v):T._general_num(e.v);else if(\"d\"===e.t){var o=z(e.v);e.w=(0|o)===o?T._general_int(o):T._general_num(o)}else{if(void 0===e.v)return\"\";e.w=T._general(e.v,Yo)}else e.w=T.format(t,\"d\"===e.t?z(e.v):e.v,Yo)}catch(El){if(r.WTF)throw El}if(r.cellStyles&&null!=n)try{e.s=s.Fills[n],e.s.fgColor&&e.s.fgColor.theme&&!e.s.fgColor.rgb&&(e.s.fgColor.rgb=ns(i.themeElements.clrScheme[e.s.fgColor.theme].rgb,e.s.fgColor.tint||0),r.WTF&&(e.s.fgColor.raw_rgb=i.themeElements.clrScheme[e.s.fgColor.theme].rgb)),e.s.bgColor&&e.s.bgColor.theme&&(e.s.bgColor.rgb=ns(i.themeElements.clrScheme[e.s.bgColor.theme].rgb,e.s.bgColor.tint||0),r.WTF&&(e.s.bgColor.raw_rgb=i.themeElements.clrScheme[e.s.bgColor.theme].rgb))}catch(El){if(r.WTF&&s.Fills)throw El}}}function ra(e,t,n){if(e&&e[\"!ref\"]){var r=Yt(e[\"!ref\"]);if(r.e.c<r.s.c||r.e.r<r.s.r)throw new Error(\"Bad range (\"+n+\"): \"+e[\"!ref\"])}}var ia=/<(?:\\w:)?mergeCell ref=\"[A-Z0-9:]+\"\\s*[\\/]?>/g,sa=/<(?:\\w+:)?sheetData>([\\s\\S]*)<\\/(?:\\w+:)?sheetData>/,oa=/<(?:\\w:)?hyperlink [^>]*>/gm,aa=/\"(\\w*:\\w*)\"/,ca=/<(?:\\w:)?col\\b[^>]*[\\/]?>/g,la=/<(?:\\w:)?autoFilter[^>]*([\\/]|>([\\s\\S]*)<\\/(?:\\w:)?autoFilter)>/g,ha=/<(?:\\w:)?pageMargins[^>]*\\/>/g,da=/<(?:\\w:)?sheetPr\\b(?:[^>a-z][^>]*)?\\/>/,ua=/<(?:\\w:)?sheetViews[^>]*(?:[\\/]|>([\\s\\S]*)<\\/(?:\\w:)?sheetViews)>/;function fa(e,t,n,r){var i=me(e);n.Sheets[r]||(n.Sheets[r]={}),i.codeName&&(n.Sheets[r].CodeName=i.codeName)}var ga=/<(?:\\w:)?sheetView(?:[^>a-z][^>]*)?\\/>/;function pa(e,t,n,r){if(void 0===e.v&&void 0===e.f||\"z\"===e.t)return\"\";var i=\"\",s=e.t,o=e.v;switch(e.t){case\"b\":i=e.v?\"1\":\"0\";break;case\"n\":i=\"\"+e.v;break;case\"e\":i=wn[e.v];break;case\"d\":r.cellDates?i=J(e.v,-1).toISOString():((e=q(e)).t=\"n\",i=\"\"+(e.v=z(J(e.v)))),void 0===e.z&&(e.z=T._table[14]);break;default:i=e.v}var a=ze(\"v\",xe(i)),c={r:t},l=ta(r.cellXfs,e,r);switch(0!==l&&(c.s=l),e.t){case\"n\":break;case\"d\":c.t=\"d\";break;case\"b\":c.t=\"b\";break;case\"e\":c.t=\"e\";break;default:if(null==e.v){delete e.t;break}if(r.bookSST){a=ze(\"v\",\"\"+Qo(r.Strings,e.v,r.revStrings)),c.t=\"s\";break}c.t=\"str\"}if(e.t!=s&&(e.t=s,e.v=o),e.f){var h=e.F&&e.F.slice(0,t.length)==t?{t:\"array\",ref:e.F}:null;a=Xe(\"f\",xe(e.f),h)+(null!=e.v?a:\"\")}return e.l&&n[\"!links\"].push([t,e.l]),e.c&&n[\"!comments\"].push([t,e.c]),Xe(\"c\",a,c)}var ma,Ca,ba,va,Ia,Aa,ya,wa=(ma=/<(?:\\w+:)?c[ >]/,Ca=/<\\/(?:\\w+:)?row>/,ba=/r=[\"']([^\"']*)[\"']/,va=/<(?:\\w+:)?is>([\\S\\s]*?)<\\/(?:\\w+:)?is>/,Ia=/ref=[\"']([^\"']*)[\"']/,Aa=$e(\"v\"),ya=$e(\"f\"),function(e,t,n,r,i,s){for(var o,a,c,l,h,d=0,u=\"\",f=[],g=[],p=0,m=0,C=0,b=\"\",v=0,I=0,A=0,y=0,w=Array.isArray(s.CellXf),S=[],x=[],E=Array.isArray(t),k=[],_={},R=!1,B=e.split(Ca),O=0,L=B.length;O!=L;++O){var P=(u=B[O].trim()).length;if(0!==P){for(d=0;d<P&&62!==u.charCodeAt(d);++d);if(++d,v=null!=(a=me(u.slice(0,d),!0)).r?parseInt(a.r,10):v+1,I=-1,!(n.sheetRows&&n.sheetRows<v))for(r.s.r>v-1&&(r.s.r=v-1),r.e.r<v-1&&(r.e.r=v-1),n&&n.cellStyles&&(_={},R=!1,a.ht&&(R=!0,_.hpt=parseFloat(a.ht),_.hpx=ds(_.hpt)),\"1\"==a.hidden&&(R=!0,_.hidden=!0),null!=a.outlineLevel&&(R=!0,_.level=+a.outlineLevel),R&&(k[v-1]=_)),f=u.slice(d).split(ma),d=0;d!=f.length;++d)if(0!==(u=f[d].trim()).length){if(g=u.match(ba),p=d,m=0,C=0,u=\"<c \"+(\"<\"==u.slice(0,1)?\">\":\"\")+u,null!=g&&2===g.length){for(p=0,b=g[1],m=0;m!=b.length&&!((C=b.charCodeAt(m)-64)<1||C>26);++m)p=26*p+C;I=--p}else++I;for(m=0;m!=u.length&&62!==u.charCodeAt(m);++m);if(++m,(a=me(u.slice(0,m),!0)).r||(a.r=Kt({r:v-1,c:I})),o={t:\"\"},null!=(g=(b=u.slice(m)).match(Aa))&&\"\"!==g[1]&&(o.v=ye(g[1])),n.cellFormula){null!=(g=b.match(ya))&&\"\"!==g[1]?(o.f=qs(ye(Be(g[1]))),g[0].indexOf('t=\"array\"')>-1?(o.F=(b.match(Ia)||[])[1],o.F.indexOf(\":\")>-1&&S.push([Yt(o.F),o.F])):g[0].indexOf('t=\"shared\"')>-1&&(l=me(g[0]),x[parseInt(l.si,10)]=[l,qs(ye(Be(g[1]))),a.r])):(g=b.match(/<f[^>]*\\/>/))&&x[(l=me(g[0])).si]&&(o.f=Qs(x[l.si][1],x[l.si][2],a.r));var F=zt(a.r);for(m=0;m<S.length;++m)F.r>=S[m][0].s.r&&F.r<=S[m][0].e.r&&F.c>=S[m][0].s.c&&F.c<=S[m][0].e.c&&(o.F=S[m][1])}if(null==a.t&&void 0===o.v)if(o.f||o.F)o.v=0,o.t=\"n\";else{if(!n.sheetStubs)continue;o.t=\"z\"}else o.t=a.t||\"n\";switch(r.s.c>I&&(r.s.c=I),r.e.c<I&&(r.e.c=I),o.t){case\"n\":if(\"\"==o.v||null==o.v){if(!n.sheetStubs)continue;o.t=\"z\"}else o.v=parseFloat(o.v);break;case\"s\":if(void 0===o.v){if(!n.sheetStubs)continue;o.t=\"z\"}else c=Uo[parseInt(o.v,10)],o.v=c.t,o.r=c.r,n.cellHTML&&(o.h=c.h);break;case\"str\":o.t=\"s\",o.v=null!=o.v?Be(o.v):\"\",n.cellHTML&&(o.h=_e(o.v));break;case\"inlineStr\":g=b.match(va),o.t=\"s\",o.v=null!=g&&(c=Oi(g[1]))?c.t:\"\";break;case\"b\":o.v=Re(o.v);break;case\"d\":n.cellDates?o.v=J(o.v,1):(o.v=z(J(o.v,1)),o.t=\"n\");break;case\"e\":n&&!1===n.cellText||(o.w=o.v),o.v=Sn[o.v]}if(A=y=0,w&&void 0!==a.s&&null!=(h=s.CellXf[a.s])&&(null!=h.numFmtId&&(A=h.numFmtId),n.cellStyles&&null!=h.fillId&&(y=h.fillId)),na(o,A,y,n,i,s),n.cellDates&&w&&\"n\"==o.t&&T.is_date(T._table[A])&&(o.t=\"d\",o.v=K(o.v)),E){var N=zt(a.r);t[N.r]||(t[N.r]=[]),t[N.r][N.c]=o}else t[a.r]=o}}}k.length>0&&(t[\"!rows\"]=k)}),Sa=Xe(\"worksheet\",null,{xmlns:Qe.main[0],\"xmlns:r\":Qe.r});function xa(e,t,n,r){var i,s=[de,Sa],o=\"\",a=n.Sheets[n.SheetNames[e]];null==a&&(a={});var c=a[\"!ref\"]||\"A1\",l=Yt(c);if(l.e.c>16383||l.e.r>1048575){if(t.WTF)throw new Error(\"Range \"+c+\" exceeds format limit A1:XFD1048576\");l.e.c=Math.min(l.e.c,16383),l.e.r=Math.min(l.e.c,1048575),c=Ut(l)}if(r||(r={}),a[\"!comments\"]=[],a[\"!drawing\"]=[],\"xlsx\"!==t.bookType&&n.vbaraw){var h=n.SheetNames[e];try{n.Workbook&&(h=n.Workbook.Sheets[e].CodeName||h)}catch(El){}s[s.length]=Xe(\"sheetPr\",null,{codeName:xe(h)})}s[s.length]=Xe(\"dimension\",null,{ref:c}),s[s.length]=function(e,t,n,r){var i={workbookViewId:\"0\"};return(((r||{}).Workbook||{}).Views||[])[0]&&(i.rightToLeft=r.Workbook.Views[0].RTL?\"1\":\"0\"),Xe(\"sheetViews\",Xe(\"sheetView\",null,i),{})}(0,0,0,n),t.sheetFormat&&(s[s.length]=Xe(\"sheetFormatPr\",null,{defaultRowHeight:t.sheetFormat.defaultRowHeight||\"16\",baseColWidth:t.sheetFormat.baseColWidth||\"10\",outlineLevelRow:t.sheetFormat.outlineLevelRow||\"7\"})),null!=a[\"!cols\"]&&a[\"!cols\"].length>0&&(s[s.length]=function(e,t){for(var n,r=[\"<cols>\"],i=0;i!=t.length;++i)(n=t[i])&&(r[r.length]=Xe(\"col\",null,qo(i,n)));return r[r.length]=\"</cols>\",r.join(\"\")}(0,a[\"!cols\"])),s[i=s.length]=\"<sheetData/>\",a[\"!links\"]=[],null!=a[\"!ref\"]&&(o=function(e,t,n,r){var i,s,o=[],a=[],c=Yt(e[\"!ref\"]),l=\"\",h=\"\",d=[],u=0,f=0,g=e[\"!rows\"],p=Array.isArray(e),m={r:h},C=-1;for(f=c.s.c;f<=c.e.c;++f)d[f]=jt(f);for(u=c.s.r;u<=c.e.r;++u){for(a=[],h=Gt(u),f=c.s.c;f<=c.e.c;++f){i=d[f]+h;var b=p?(e[u]||[])[f]:e[i];void 0!==b&&null!=(l=pa(b,i,e,t))&&a.push(l)}(a.length>0||g&&g[u])&&(m={r:h},g&&g[u]&&((s=g[u]).hidden&&(m.hidden=1),C=-1,s.hpx?C=hs(s.hpx):s.hpt&&(C=s.hpt),C>-1&&(m.ht=C,m.customHeight=1),s.level&&(m.outlineLevel=s.level)),o[o.length]=Xe(\"row\",a.join(\"\"),m))}if(g)for(;u<g.length;++u)g&&g[u]&&(m={r:u+1},(s=g[u]).hidden&&(m.hidden=1),C=-1,s.hpx?C=hs(s.hpx):s.hpt&&(C=s.hpt),C>-1&&(m.ht=C,m.customHeight=1),s.level&&(m.outlineLevel=s.level),o[o.length]=Xe(\"row\",\"\",m));return o.join(\"\")}(a,t)).length>0&&(s[s.length]=o),s.length>i+1&&(s[s.length]=\"</sheetData>\",s[i]=s[i].replace(\"/>\",\">\")),null!=a[\"!protect\"]&&(s[s.length]=function(e){var t={sheet:1};return[\"objects\",\"scenarios\",\"selectLockedCells\",\"selectUnlockedCells\"].forEach((function(n){null!=e[n]&&e[n]&&(t[n]=\"1\")})),[\"formatColumns\",\"formatRows\",\"formatCells\",\"insertColumns\",\"insertRows\",\"insertHyperlinks\",\"deleteColumns\",\"deleteRows\",\"sort\",\"autoFilter\",\"pivotTables\"].forEach((function(n){null==e[n]||e[n]||(t[n]=\"0\")})),e.password&&(t.password=Xi(e.password).toString(16).toUpperCase()),Xe(\"sheetProtection\",null,t)}(a[\"!protect\"])),null!=a[\"!autofilter\"]&&(s[s.length]=function(e,t,n,r){var i=\"string\"==typeof e.ref?e.ref:Ut(e.ref);n.Workbook||(n.Workbook={}),n.Workbook.Names||(n.Workbook.Names=[]);var s=n.Workbook.Names,o=Xt(i);o.s.r==o.e.r&&(o.e.r=Xt(t[\"!ref\"]).e.r,i=Ut(o));for(var a=0;a<s.length;++a){var c=s[a];if(\"_xlnm._FilterDatabase\"==c.Name&&c.Sheet==r){c.Ref=\"'\"+n.SheetNames[r]+\"'!\"+i;break}}return a==s.length&&s.push({Name:\"_xlnm._FilterDatabase\",Sheet:r,Ref:\"'\"+n.SheetNames[r]+\"'!\"+i}),Xe(\"autoFilter\",null,{ref:i})}(a[\"!autofilter\"],a,n,e)),null!=a[\"!merges\"]&&a[\"!merges\"].length>0&&(s[s.length]=function(e){if(0===e.length)return\"\";for(var t='<mergeCells count=\"'+e.length+'\">',n=0;n!=e.length;++n)t+='<mergeCell ref=\"'+Ut(e[n])+'\"/>';return t+\"</mergeCells>\"}(a[\"!merges\"]));var d,u,f=-1,g=-1;return a[\"!links\"].length>0&&(s[s.length]=\"<hyperlinks>\",a[\"!links\"].forEach((function(e){e[1].Target&&(d={ref:e[0]},\"#\"!=e[1].Target.charAt(0)&&(g=Xn(r,-1,xe(e[1].Target).replace(/#.*$/,\"\"),Vn.HLINK),d[\"r:id\"]=\"rId\"+g),(f=e[1].Target.indexOf(\"#\"))>-1&&(d.location=xe(e[1].Target.slice(f+1))),e[1].Tooltip&&(d.tooltip=xe(e[1].Tooltip)),s[s.length]=Xe(\"hyperlink\",null,d))})),s[s.length]=\"</hyperlinks>\"),delete a[\"!links\"],null!=a[\"!margins\"]&&(s[s.length]=(ea(u=a[\"!margins\"]),Xe(\"pageMargins\",null,u))),s[s.length]=\"\",t&&!t.ignoreEC&&null!=t.ignoreEC||(s[s.length]=ze(\"ignoredErrors\",Xe(\"ignoredError\",null,{numberStoredAsText:1,sqref:c}))),a[\"!drawing\"].length>0?(g=Xn(r,-1,\"../drawings/drawing\"+(e+1)+\".xml\",Vn.DRAW),s[s.length]=Xe(\"drawing\",null,{\"r:id\":\"rId\"+g})):delete a[\"!drawing\"],a[\"!comments\"].length>0&&(g=Xn(r,-1,\"../drawings/vmlDrawing\"+(e+1)+\".vml\",Vn.VML),s[s.length]=Xe(\"legacyDrawing\",null,{\"r:id\":\"rId\"+g}),a[\"!legacy\"]=g),s.length>2&&(s[s.length]=\"</worksheet>\",s[1]=s[1].replace(\"/>\",\">\")),s.join(\"\")}function Ea(e,t,n,r){var i=function(e,t,n){var r=Lt(145),i=(n[\"!rows\"]||[])[e]||{};r.write_shift(4,e),r.write_shift(4,0);var s=320;i.hpx?s=20*hs(i.hpx):i.hpt&&(s=20*i.hpt),r.write_shift(2,s),r.write_shift(1,0);var o=0;i.level&&(o|=i.level),i.hidden&&(o|=16),(i.hpx||i.hpt)&&(o|=32),r.write_shift(1,o),r.write_shift(1,0);var a=0,c=r.l;r.l+=4;for(var l={r:e,c:0},h=0;h<16;++h)if(!(t.s.c>h+1<<10||t.e.c<h<<10)){for(var d=-1,u=-1,f=h<<10;f<h+1<<10;++f)l.c=f,(Array.isArray(n)?(n[l.r]||[])[l.c]:n[Kt(l)])&&(d<0&&(d=f),u=f);d<0||(++a,r.write_shift(4,d),r.write_shift(4,u))}var g=r.l;return r.l=c,r.write_shift(4,a),r.l=g,r.length>r.l?r.slice(0,r.l):r}(r,n,t);(i.length>17||(t[\"!rows\"]||[])[r])&&Nt(e,\"BrtRowHdr\",i)}var ka=vn,_a=In,Ta=vn,Ra=In,Ba=[\"left\",\"right\",\"top\",\"bottom\",\"header\",\"footer\"];function Oa(e,t,n,r,i,s){if(void 0===t.v)return\"\";var o=\"\";switch(t.t){case\"b\":o=t.v?\"1\":\"0\";break;case\"d\":(t=q(t)).z=t.z||T._table[14],t.v=z(J(t.v)),t.t=\"n\";break;case\"n\":case\"e\":o=\"\"+t.v;break;default:o=t.v}var a={r:n,c:r};switch(a.s=ta(i.cellXfs,t,i),t.l&&s[\"!links\"].push([Kt(a),t.l]),t.c&&s[\"!comments\"].push([Kt(a),t.c]),t.t){case\"s\":case\"str\":return void(i.bookSST?(o=Qo(i.Strings,t.v,i.revStrings),a.t=\"s\",a.v=o,Nt(e,\"BrtCellIsst\",function(e,t,n){return null==n&&(n=Lt(12)),ln(t,n),n.write_shift(4,t.v),n}(0,a))):(a.t=\"str\",Nt(e,\"BrtCellSt\",function(e,t,n){return null==n&&(n=Lt(12+4*e.v.length)),ln(t,n),rn(e.v,n),n.length>n.l?n.slice(0,n.l):n}(t,a))));case\"n\":return void(t.v==(0|t.v)&&t.v>-1e3&&t.v<1e3?Nt(e,\"BrtCellRk\",function(e,t,n){return null==n&&(n=Lt(12)),ln(t,n),function(e,t){null==t&&(t=Lt(4));var n=0,r=0,i=100*e;if(e==(0|e)&&e>=-(1<<29)&&e<1<<29?r=1:i==(0|i)&&i>=-(1<<29)&&i<1<<29&&(r=1,n=1),!r)throw new Error(\"unsupported RkNumber \"+e);t.write_shift(-4,((n?i:e)<<2)+(n+2))}(e.v,n),n}(t,a)):Nt(e,\"BrtCellReal\",function(e,t,n){return null==n&&(n=Lt(16)),ln(t,n),yn(e.v,n),n}(t,a)));case\"b\":return a.t=\"b\",void Nt(e,\"BrtCellBool\",function(e,t,n){return null==n&&(n=Lt(9)),ln(t,n),n.write_shift(1,e.v?1:0),n}(t,a));case\"e\":a.t=\"e\"}Nt(e,\"BrtCellBlank\",function(e,t,n){return null==n&&(n=Lt(8)),ln(t,n)}(0,a))}function La(e,t,n,r){var i=Ft(),s=n.SheetNames[e],o=n.Sheets[s]||{},a=s;try{n&&n.Workbook&&(a=n.Workbook.Sheets[e].CodeName||a)}catch(El){}var c=Yt(o[\"!ref\"]||\"A1\");if(c.e.c>16383||c.e.r>1048575){if(t.WTF)throw new Error(\"Range \"+(o[\"!ref\"]||\"A1\")+\" exceeds format limit A1:XFD1048576\");c.e.c=Math.min(c.e.c,16383),c.e.r=Math.min(c.e.c,1048575)}return o[\"!links\"]=[],o[\"!comments\"]=[],Nt(i,\"BrtBeginSheet\"),n.vbaraw&&Nt(i,\"BrtWsProp\",function(e,t){null==t&&(t=Lt(84+4*e.length));for(var n=0;n<3;++n)t.write_shift(1,0);return xn({auto:1},t),t.write_shift(-4,-1),t.write_shift(-4,-1),dn(e,t),t.slice(0,t.l)}(a)),Nt(i,\"BrtWsDim\",_a(c)),function(e,t,n){Nt(e,\"BrtBeginWsViews\"),Nt(e,\"BrtBeginWsView\",function(e,t,n){null==n&&(n=Lt(30));var r=924;return(((t||{}).Views||[])[0]||{}).RTL&&(r|=32),n.write_shift(2,r),n.write_shift(4,0),n.write_shift(4,0),n.write_shift(4,0),n.write_shift(1,0),n.write_shift(1,0),n.write_shift(2,0),n.write_shift(2,100),n.write_shift(2,0),n.write_shift(2,0),n.write_shift(2,0),n.write_shift(4,0),n}(0,n)),Nt(e,\"BrtEndWsView\"),Nt(e,\"BrtEndWsViews\")}(i,0,n.Workbook),function(e,t){t&&t[\"!cols\"]&&(Nt(e,\"BrtBeginColInfos\"),t[\"!cols\"].forEach((function(t,n){t&&Nt(e,\"BrtColInfo\",function(e,t,n){null==n&&(n=Lt(18));var r=qo(e,t);n.write_shift(-4,e),n.write_shift(-4,e),n.write_shift(4,256*(r.width||10)),n.write_shift(4,0);var i=0;return t.hidden&&(i|=1),\"number\"==typeof r.width&&(i|=2),n.write_shift(1,i),n.write_shift(1,0),n}(n,t))})),Nt(e,\"BrtEndColInfos\"))}(i,o),function(e,t,n,r){var i=Yt(t[\"!ref\"]||\"A1\"),s=\"\",o=[];Nt(e,\"BrtBeginSheetData\");var a=Array.isArray(t),c=i.e.r;t[\"!rows\"]&&(c=Math.max(i.e.r,t[\"!rows\"].length-1));for(var l=i.s.r;l<=c;++l)if(s=Gt(l),Ea(e,t,i,l),l<=i.e.r)for(var h=i.s.c;h<=i.e.c;++h){l===i.s.r&&(o[h]=jt(h));var d=a?(t[l]||[])[h]:t[o[h]+s];d&&Oa(e,d,l,h,r,t)}Nt(e,\"BrtEndSheetData\")}(i,o,0,t),function(e,t){t[\"!protect\"]&&Nt(e,\"BrtSheetProtection\",function(e,t){return null==t&&(t=Lt(66)),t.write_shift(2,e.password?Xi(e.password):0),t.write_shift(4,1),[[\"objects\",!1],[\"scenarios\",!1],[\"formatCells\",!0],[\"formatColumns\",!0],[\"formatRows\",!0],[\"insertColumns\",!0],[\"insertRows\",!0],[\"insertHyperlinks\",!0],[\"deleteColumns\",!0],[\"deleteRows\",!0],[\"selectLockedCells\",!1],[\"sort\",!0],[\"autoFilter\",!0],[\"pivotTables\",!0],[\"selectUnlockedCells\",!1]].forEach((function(n){t.write_shift(4,n[1]?null==e[n[0]]||e[n[0]]?0:1:null!=e[n[0]]&&e[n[0]]?0:1)})),t}(t[\"!protect\"]))}(i,o),function(e,t){t[\"!autofilter\"]&&(Nt(e,\"BrtBeginAFilter\",In(Yt(t[\"!autofilter\"].ref))),Nt(e,\"BrtEndAFilter\"))}(i,o),function(e,t){t&&t[\"!merges\"]&&(Nt(e,\"BrtBeginMergeCells\",function(e,t){return null==t&&(t=Lt(4)),t.write_shift(4,e),t}(t[\"!merges\"].length)),t[\"!merges\"].forEach((function(t){Nt(e,\"BrtMergeCell\",Ra(t))})),Nt(e,\"BrtEndMergeCells\"))}(i,o),function(e,t,n){t[\"!links\"].forEach((function(t){if(t[1].Target){var r=Xn(n,-1,t[1].Target.replace(/#.*$/,\"\"),Vn.HLINK);Nt(e,\"BrtHLink\",function(e,t){var n=Lt(50+4*(e[1].Target.length+(e[1].Tooltip||\"\").length));In({s:zt(e[0]),e:zt(e[0])},n),mn(\"rId\"+t,n);var r=e[1].Target.indexOf(\"#\");return rn((-1==r?\"\":e[1].Target.slice(r+1))||\"\",n),rn(e[1].Tooltip||\"\",n),rn(\"\",n),n.slice(0,n.l)}(t,r))}})),delete t[\"!links\"]}(i,o,r),o[\"!margins\"]&&Nt(i,\"BrtMargins\",function(e,t){return null==t&&(t=Lt(48)),ea(e),Ba.forEach((function(n){yn(e[n],t)})),t}(o[\"!margins\"])),t&&!t.ignoreEC&&null!=t.ignoreEC||function(e,t){t&&t[\"!ref\"]&&(Nt(e,\"BrtBeginCellIgnoreECs\"),Nt(e,\"BrtCellIgnoreEC\",function(e){var t=Lt(24);return t.write_shift(4,4),t.write_shift(4,1),In(e,t),t}(Yt(t[\"!ref\"]))),Nt(e,\"BrtEndCellIgnoreECs\"))}(i,o),function(e,t,n,r){if(t[\"!comments\"].length>0){var i=Xn(r,-1,\"../drawings/vmlDrawing\"+(n+1)+\".vml\",Vn.VML);Nt(e,\"BrtLegacyDrawing\",mn(\"rId\"+i)),t[\"!legacy\"]=i}}(i,o,e,r),Nt(i,\"BrtEndSheet\"),i.end()}Vn.CS=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet\",Xe(\"chartsheet\",null,{xmlns:Qe.main[0],\"xmlns:r\":Qe.r});var Pa=[[\"allowRefreshQuery\",!1,\"bool\"],[\"autoCompressPictures\",!0,\"bool\"],[\"backupFile\",!1,\"bool\"],[\"checkCompatibility\",!1,\"bool\"],[\"CodeName\",\"\"],[\"date1904\",!1,\"bool\"],[\"defaultThemeVersion\",0,\"int\"],[\"filterPrivacy\",!1,\"bool\"],[\"hidePivotFieldList\",!1,\"bool\"],[\"promptedSolutions\",!1,\"bool\"],[\"publishItems\",!1,\"bool\"],[\"refreshAllConnections\",!1,\"bool\"],[\"saveExternalLinkValues\",!0,\"bool\"],[\"showBorderUnselectedTables\",!0,\"bool\"],[\"showInkAnnotation\",!0,\"bool\"],[\"showObjects\",\"all\"],[\"showPivotChartFilter\",!1,\"bool\"],[\"updateLinks\",\"userSet\"]],Fa=[[\"activeTab\",0,\"int\"],[\"autoFilterDateGrouping\",!0,\"bool\"],[\"firstSheet\",0,\"int\"],[\"minimized\",!1,\"bool\"],[\"showHorizontalScroll\",!0,\"bool\"],[\"showSheetTabs\",!0,\"bool\"],[\"showVerticalScroll\",!0,\"bool\"],[\"tabRatio\",600,\"int\"],[\"visibility\",\"visible\"]],Na=[],Ma=[[\"calcCompleted\",\"true\"],[\"calcMode\",\"auto\"],[\"calcOnSave\",\"true\"],[\"concurrentCalc\",\"true\"],[\"fullCalcOnLoad\",\"false\"],[\"fullPrecision\",\"true\"],[\"iterate\",\"false\"],[\"iterateCount\",\"100\"],[\"iterateDelta\",\"0.001\"],[\"refMode\",\"A1\"]];function Da(e,t){for(var n=0;n!=e.length;++n)for(var r=e[n],i=0;i!=t.length;++i){var s=t[i];if(null==r[s[0]])r[s[0]]=s[1];else switch(s[2]){case\"bool\":\"string\"==typeof r[s[0]]&&(r[s[0]]=Re(r[s[0]]));break;case\"int\":\"string\"==typeof r[s[0]]&&(r[s[0]]=parseInt(r[s[0]],10))}}}function $a(e,t){for(var n=0;n!=t.length;++n){var r=t[n];if(null==e[r[0]])e[r[0]]=r[1];else switch(r[2]){case\"bool\":\"string\"==typeof e[r[0]]&&(e[r[0]]=Re(e[r[0]]));break;case\"int\":\"string\"==typeof e[r[0]]&&(e[r[0]]=parseInt(e[r[0]],10))}}}function Wa(e){$a(e.WBProps,Pa),$a(e.CalcPr,Ma),Da(e.WBView,Fa),Da(e.Sheets,Na),Yo.date1904=Re(e.WBProps.date1904)}var Ha=\"][*?/\\\\\".split(\"\");function Ga(e,t){if(e.length>31){if(t)return!1;throw new Error(\"Sheet names cannot exceed 31 chars\")}var n=!0;return Ha.forEach((function(r){if(-1!=e.indexOf(r)){if(!t)throw new Error(\"Sheet name cannot contain : \\\\ / ? * [ ]\");n=!1}})),n}var Va=/<\\w+:workbook/,ja=Xe(\"workbook\",null,{xmlns:Qe.main[0],\"xmlns:r\":Qe.r});function Za(e){var t=[de];t[t.length]=ja;var n=e.Workbook&&(e.Workbook.Names||[]).length>0,r={codeName:\"ThisWorkbook\"};e.Workbook&&e.Workbook.WBProps&&(Pa.forEach((function(t){null!=e.Workbook.WBProps[t[0]]&&e.Workbook.WBProps[t[0]]!=t[1]&&(r[t[0]]=e.Workbook.WBProps[t[0]])})),e.Workbook.WBProps.CodeName&&(r.codeName=e.Workbook.WBProps.CodeName,delete r.CodeName)),t[t.length]=Xe(\"workbookPr\",null,r);var i=e.Workbook&&e.Workbook.Sheets||[],s=0;for(t[t.length]=\"<sheets>\",s=0;s!=e.SheetNames.length;++s){var o={name:xe(e.SheetNames[s].slice(0,31))};if(o.sheetId=\"\"+(s+1),o[\"r:id\"]=\"rId\"+(s+1),i[s])switch(i[s].Hidden){case 1:o.state=\"hidden\";break;case 2:o.state=\"veryHidden\"}t[t.length]=Xe(\"sheet\",null,o)}return t[t.length]=\"</sheets>\",n&&(t[t.length]=\"<definedNames>\",e.Workbook&&e.Workbook.Names&&e.Workbook.Names.forEach((function(e){var n={name:e.Name};e.Comment&&(n.comment=e.Comment),null!=e.Sheet&&(n.localSheetId=\"\"+e.Sheet),e.Hidden&&(n.hidden=\"1\"),e.Ref&&(t[t.length]=Xe(\"definedName\",String(e.Ref).replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\"),n))})),t[t.length]=\"</definedNames>\"),t.length>2&&(t[t.length]=\"</workbook>\",t[1]=t[1].replace(\"/>\",\">\")),t.join(\"\")}function za(e,t){return t||(t=Lt(127)),t.write_shift(4,e.Hidden),t.write_shift(4,e.iTabID),mn(e.strRelID,t),rn(e.name.slice(0,31),t),t.length>t.l?t.slice(0,t.l):t}function Ka(e,n){var r=Ft();return Nt(r,\"BrtBeginBook\"),Nt(r,\"BrtFileVersion\",function(e,n){n||(n=Lt(127));for(var r=0;4!=r;++r)n.write_shift(4,0);return rn(\"SheetJS\",n),rn(t.version,n),rn(t.version,n),rn(\"7262\",n),n.length=n.l,n.length>n.l?n.slice(0,n.l):n}()),Nt(r,\"BrtWbProp\",function(e,t){t||(t=Lt(72));var n=0;return e&&e.filterPrivacy&&(n|=8),t.write_shift(4,n),t.write_shift(4,0),dn(e&&e.CodeName||\"ThisWorkbook\",t),t.slice(0,t.l)}(e.Workbook&&e.Workbook.WBProps||null)),function(e,t){if(t.Workbook&&t.Workbook.Sheets){for(var n=t.Workbook.Sheets,r=0,i=-1,s=-1;r<n.length;++r)!n[r]||!n[r].Hidden&&-1==i?i=r:1==n[r].Hidden&&-1==s&&(s=r);s>i||(Nt(e,\"BrtBeginBookViews\"),Nt(e,\"BrtBookView\",function(e,t){return t||(t=Lt(29)),t.write_shift(-4,0),t.write_shift(-4,460),t.write_shift(4,28800),t.write_shift(4,17600),t.write_shift(4,500),t.write_shift(4,e),t.write_shift(4,e),t.write_shift(1,120),t.length>t.l?t.slice(0,t.l):t}(i)),Nt(e,\"BrtEndBookViews\"))}}(r,e),function(e,t){Nt(e,\"BrtBeginBundleShs\");for(var n=0;n!=t.SheetNames.length;++n)Nt(e,\"BrtBundleSh\",za({Hidden:t.Workbook&&t.Workbook.Sheets&&t.Workbook.Sheets[n]&&t.Workbook.Sheets[n].Hidden||0,iTabID:n+1,strRelID:\"rId\"+(n+1),name:t.SheetNames[n]}));Nt(e,\"BrtEndBundleShs\")}(r,e),Nt(r,\"BrtEndBook\"),r.end()}function Xa(e,t,n){return\".bin\"===t.slice(-4)?function(e,t){var n=[],r=[],i={},s=!1;return Pt(e,(function(e,o,a){switch(a){case 632:r.push(e);break;case 635:i=e;break;case 637:i.t=e.t,i.h=e.h,i.r=e.r;break;case 636:if(i.author=r[i.iauthor],delete i.iauthor,t.sheetRows&&t.sheetRows<=i.rfx.r)break;i.t||(i.t=\"\"),delete i.rfx,n.push(i);break;case 3072:break;case 35:s=!0;break;case 36:s=!1;break;case 37:case 38:break;default:if((o||\"\").indexOf(\"Begin\")>0);else if((o||\"\").indexOf(\"End\")>0);else if(!s||t.WTF)throw new Error(\"Unexpected record \"+a+\" \"+o)}})),n}(e,n):function(e,t){if(e.match(/<(?:\\w+:)?comments *\\/>/))return[];var n=[],r=[],i=e.match(/<(?:\\w+:)?authors>([\\s\\S]*)<\\/(?:\\w+:)?authors>/);i&&i[1]&&i[1].split(/<\\/\\w*:?author>/).forEach((function(e){if(\"\"!==e&&\"\"!==e.trim()){var t=e.match(/<(?:\\w+:)?author[^>]*>(.*)/);t&&n.push(t[1])}}));var s=e.match(/<(?:\\w+:)?commentList>([\\s\\S]*)<\\/(?:\\w+:)?commentList>/);return s&&s[1]&&s[1].split(/<\\/\\w*:?comment>/).forEach((function(e){if(\"\"!==e&&\"\"!==e.trim()){var i=e.match(/<(?:\\w+:)?comment[^>]*>/);if(i){var s=me(i[0]),o={author:s.authorId&&n[s.authorId]||\"sheetjsghost\",ref:s.ref,guid:s.guid},a=zt(s.ref);if(!(t.sheetRows&&t.sheetRows<=a.r)){var c=e.match(/<(?:\\w+:)?text>([\\s\\S]*)<\\/(?:\\w+:)?text>/),l=!!c&&!!c[1]&&Oi(c[1])||{r:\"\",t:\"\",h:\"\"};o.r=l.r,\"<t></t>\"==l.r&&(l.t=l.h=\"\"),o.t=l.t.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\"),t.cellHTML&&(o.h=l.h),r.push(o)}}}})),r}(e,n)}function Ua(e,t,n){return(\".bin\"===t.slice(-4)?Ka:Za)(e,n)}function Ya(e,t,n,r,i){return(\".bin\"===t.slice(-4)?La:xa)(e,n,r,i)}function Ja(e,t,n){return(\".bin\"===t.slice(-4)?$i:Mi)(e,n)}function Qa(e,t,n){return(\".bin\"===t.slice(-4)?Ks:Zs)(e,n)}var qa=/([\\w:]+)=((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:'))/g,ec=/([\\w:]+)=((?:\")(?:[^\"]*)(?:\")|(?:')(?:[^']*)(?:'))/,tc=function(e){return String.fromCharCode(e)};function nc(e,t){var n=e.split(/\\s+/),r=[];if(t||(r[0]=n[0]),1===n.length)return r;var i,s,o,a=e.match(qa);if(a)for(o=0;o!=a.length;++o)-1===(s=(i=a[o].match(ec))[1].indexOf(\":\"))?r[i[1]]=i[2].slice(1,i[2].length-1):r[\"xmlns:\"===i[1].slice(0,6)?\"xmlns\"+i[1].slice(6):i[1].slice(s+1)]=i[2].slice(1,i[2].length-1);return r}function rc(e){var t={};if(1===e.split(/\\s+/).length)return t;var n,r,i,s=e.match(qa);if(s)for(i=0;i!=s.length;++i)-1===(r=(n=s[i].match(ec))[1].indexOf(\":\"))?t[n[1]]=n[2].slice(1,n[2].length-1):t[\"xmlns:\"===n[1].slice(0,6)?\"xmlns\"+n[1].slice(6):n[1].slice(r+1)]=n[2].slice(1,n[2].length-1);return t}function ic(e,t,n,r){var i=r;switch((n[0].match(/dt:dt=\"([\\w.]+)\"/)||[\"\",\"\"])[1]){case\"boolean\":i=Re(r);break;case\"i2\":case\"int\":i=parseInt(r,10);break;case\"r4\":case\"float\":i=parseFloat(r);break;case\"date\":case\"dateTime.tz\":i=J(r);break;case\"i8\":case\"string\":case\"fixed\":case\"uuid\":case\"bin.base64\":break;default:throw new Error(\"bad custprop:\"+n[0])}e[ye(t)]=i}function sc(e,t,n){if(n.cellStyles&&t.Interior){var r=t.Interior;r.Pattern&&(r.patternType=Cs[r.Pattern]||r.Pattern)}e[t.ID]=t}function oc(e,t,n,r,i,s,o,a,c,l){var h=\"General\",d=r.StyleID,u={};l=l||{};var f=[],g=0;for(void 0===d&&a&&(d=a.StyleID),void 0===d&&o&&(d=o.StyleID);void 0!==s[d]&&(s[d].nf&&(h=s[d].nf),s[d].Interior&&f.push(s[d].Interior),s[d].Parent);)d=s[d].Parent;switch(n.Type){case\"Boolean\":r.t=\"b\",r.v=Re(e);break;case\"String\":r.t=\"s\",r.r=Te(ye(e)),r.v=e.indexOf(\"<\")>-1?ye(t):r.r;break;case\"DateTime\":\"Z\"!=e.slice(-1)&&(e+=\"Z\"),r.v=(J(e)-new Date(Date.UTC(1899,11,30)))/864e5,r.v!=r.v?r.v=ye(e):r.v<60&&(r.v=r.v-1),h&&\"General\"!=h||(h=\"yyyy-mm-dd\");case\"Number\":void 0===r.v&&(r.v=+e),r.t||(r.t=\"n\");break;case\"Error\":r.t=\"e\",r.v=Sn[e],!1!==l.cellText&&(r.w=e);break;default:r.t=\"s\",r.v=Te(t||e)}if(function(e,t,n){if(\"z\"!==e.t){if(!n||!1!==n.cellText)try{e.w=\"e\"===e.t?e.w||wn[e.v]:\"General\"===t?\"n\"===e.t?(0|e.v)===e.v?T._general_int(e.v):T._general_num(e.v):T._general(e.v):(i=e.v,\"General\"===(s=O[r=t||\"General\"]||ye(r))?T._general(i):T.format(s,i))}catch(El){if(n.WTF)throw El}var r,i,s;try{var o=O[t]||t||\"General\";if(n.cellNF&&(e.z=o),n.cellDates&&\"n\"==e.t&&T.is_date(o)){var a=T.parse_date_code(e.v);a&&(e.t=\"d\",e.v=new Date(a.y,a.m-1,a.d,a.H,a.M,a.S,a.u))}}catch(El){if(n.WTF)throw El}}}(r,h,l),!1!==l.cellFormula)if(r.Formula){var p=ye(r.Formula);61==p.charCodeAt(0)&&(p=p.slice(1)),r.f=Us(p,i),delete r.Formula,\"RC\"==r.ArrayRange?r.F=Us(\"RC:RC\",i):r.ArrayRange&&(r.F=Us(r.ArrayRange,i),c.push([Yt(r.F),r.F]))}else for(g=0;g<c.length;++g)i.r>=c[g][0].s.r&&i.r<=c[g][0].e.r&&i.c>=c[g][0].s.c&&i.c<=c[g][0].e.c&&(r.F=c[g][1]);l.cellStyles&&(f.forEach((function(e){!u.patternType&&e.patternType&&(u.patternType=e.patternType)})),r.s=u),void 0!==r.StyleID&&(r.ixfe=r.StyleID)}function ac(e){e.t=e.v||\"\",e.t=e.t.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\"),e.v=e.w=e.ixfe=void 0}function cc(e){if(C&&Buffer.isBuffer(e))return e.toString(\"utf8\");if(\"string\"==typeof e)return e;if(\"undefined\"!=typeof Uint8Array&&e instanceof Uint8Array)return Be(S(x(e)));throw new Error(\"Bad input format: expected Buffer or string\")}var lc=/<(\\/?)([^\\s?>!\\/:]*:|)([^\\s?>:\\/]+)[^>]*>/gm;function hc(e,t){var n=t||{};R(T);var r=u(cc(e));\"binary\"!=n.type&&\"array\"!=n.type&&\"base64\"!=n.type||(r=\"undefined\"!=typeof cptable?cptable.utils.decode(65001,d(r)):Be(r));var i,s=r.slice(0,1024).toLowerCase(),o=!1;if(-1==s.indexOf(\"<?xml\")&&[\"html\",\"table\",\"head\",\"meta\",\"script\",\"style\",\"div\"].forEach((function(e){s.indexOf(\"<\"+e)>=0&&(o=!0)})),o)return Oc.to_workbook(r,n);var a,c,l=[],h={},f=[],g=n.dense?[]:{},p=\"\",m={},C={},b=nc('<Data ss:Type=\"String\">'),v=0,I=0,A=0,y={s:{r:2e6,c:2e6},e:{r:0,c:0}},w={},S={},x=\"\",E=0,k=[],_={},B={},L=0,P=[],F=[],N={},M=[],D=!1,$=[],W=[],H={},G=0,V=0,j={Sheets:[],WBProps:{date1904:!1}},Z={};for(lc.lastIndex=0,r=r.replace(/<!--([\\s\\S]*?)-->/gm,\"\");i=lc.exec(r);)switch(i[3]){case\"Data\":if(l[l.length-1][1])break;\"/\"===i[1]?oc(r.slice(v,i.index),x,b,\"Comment\"==l[l.length-1][0]?N:m,{c:I,r:A},w,M[I],C,$,n):(x=\"\",b=nc(i[0]),v=i.index+i[0].length);break;case\"Cell\":if(\"/\"===i[1])if(F.length>0&&(m.c=F),(!n.sheetRows||n.sheetRows>A)&&void 0!==m.v&&(n.dense?(g[A]||(g[A]=[]),g[A][I]=m):g[jt(I)+Gt(A)]=m),m.HRef&&(m.l={Target:m.HRef},m.HRefScreenTip&&(m.l.Tooltip=m.HRefScreenTip),delete m.HRef,delete m.HRefScreenTip),(m.MergeAcross||m.MergeDown)&&(G=I+(0|parseInt(m.MergeAcross,10)),V=A+(0|parseInt(m.MergeDown,10)),k.push({s:{c:I,r:A},e:{c:G,r:V}})),n.sheetStubs)if(m.MergeAcross||m.MergeDown){for(var z=I;z<=G;++z)for(var K=A;K<=V;++K)(z>I||K>A)&&(n.dense?(g[K]||(g[K]=[]),g[K][z]={t:\"z\"}):g[jt(z)+Gt(K)]={t:\"z\"});I=G+1}else++I;else m.MergeAcross?I=G+1:++I;else(m=rc(i[0])).Index&&(I=+m.Index-1),I<y.s.c&&(y.s.c=I),I>y.e.c&&(y.e.c=I),\"/>\"===i[0].slice(-2)&&++I,F=[];break;case\"Row\":\"/\"===i[1]||\"/>\"===i[0].slice(-2)?(A<y.s.r&&(y.s.r=A),A>y.e.r&&(y.e.r=A),\"/>\"===i[0].slice(-2)&&(C=nc(i[0])).Index&&(A=+C.Index-1),I=0,++A):((C=nc(i[0])).Index&&(A=+C.Index-1),H={},(\"0\"==C.AutoFitHeight||C.Height)&&(H.hpx=parseInt(C.Height,10),H.hpt=hs(H.hpx),W[A]=H),\"1\"==C.Hidden&&(H.hidden=!0,W[A]=H));break;case\"Worksheet\":if(\"/\"===i[1]){if((a=l.pop())[0]!==i[3])throw new Error(\"Bad state: \"+a.join(\"|\"));f.push(p),y.s.r<=y.e.r&&y.s.c<=y.e.c&&(g[\"!ref\"]=Ut(y),n.sheetRows&&n.sheetRows<=y.e.r&&(g[\"!fullref\"]=g[\"!ref\"],y.e.r=n.sheetRows-1,g[\"!ref\"]=Ut(y))),k.length&&(g[\"!merges\"]=k),M.length>0&&(g[\"!cols\"]=M),W.length>0&&(g[\"!rows\"]=W),h[p]=g}else y={s:{r:2e6,c:2e6},e:{r:0,c:0}},A=I=0,l.push([i[3],!1]),a=nc(i[0]),p=ye(a.Name),g=n.dense?[]:{},k=[],$=[],W=[],j.Sheets.push(Z={name:p,Hidden:0});break;case\"Table\":if(\"/\"===i[1]){if((a=l.pop())[0]!==i[3])throw new Error(\"Bad state: \"+a.join(\"|\"))}else{if(\"/>\"==i[0].slice(-2))break;nc(i[0]),l.push([i[3],!1]),M=[],D=!1}break;case\"Style\":\"/\"===i[1]?sc(w,S,n):S=nc(i[0]);break;case\"NumberFormat\":S.nf=ye(nc(i[0]).Format||\"General\"),O[S.nf]&&(S.nf=O[S.nf]);for(var X=0;392!=X&&T._table[X]!=S.nf;++X);if(392==X)for(X=57;392!=X;++X)if(null==T._table[X]){T.load(S.nf,X);break}break;case\"Column\":if(\"Table\"!==l[l.length-1][0])break;if((c=nc(i[0])).Hidden&&(c.hidden=!0,delete c.Hidden),c.Width&&(c.wpx=parseInt(c.Width,10)),!D&&c.wpx>10){D=!0,rs=6;for(var U=0;U<M.length;++U)M[U]&&ls(M[U])}D&&ls(c),M[c.Index-1||M.length]=c;for(var Y=0;Y<+c.Span;++Y)M[M.length]=q(c);break;case\"NamedRange\":j.Names||(j.Names=[]);var J=me(i[0]),Q={Name:J.Name,Ref:Us(J.RefersTo.slice(1),{r:0,c:0})};j.Sheets.length>0&&(Q.Sheet=j.Sheets.length-1),j.Names.push(Q);break;case\"NamedCell\":case\"B\":case\"I\":case\"U\":case\"S\":case\"Sub\":case\"Sup\":case\"Span\":case\"Border\":case\"Alignment\":case\"Borders\":break;case\"Font\":if(\"/>\"===i[0].slice(-2))break;\"/\"===i[1]?x+=r.slice(E,i.index):E=i.index+i[0].length;break;case\"Interior\":if(!n.cellStyles)break;S.Interior=nc(i[0]);break;case\"Protection\":break;case\"Author\":case\"Title\":case\"Description\":case\"Created\":case\"Keywords\":case\"Subject\":case\"Category\":case\"Company\":case\"LastAuthor\":case\"LastSaved\":case\"LastPrinted\":case\"Version\":case\"Revision\":case\"TotalTime\":case\"HyperlinkBase\":case\"Manager\":case\"ContentStatus\":case\"Identifier\":case\"Language\":case\"AppName\":if(\"/>\"===i[0].slice(-2))break;\"/\"===i[1]?hr(_,i[3],r.slice(L,i.index)):L=i.index+i[0].length;break;case\"Paragraphs\":break;case\"Styles\":case\"Workbook\":if(\"/\"===i[1]){if((a=l.pop())[0]!==i[3])throw new Error(\"Bad state: \"+a.join(\"|\"))}else l.push([i[3],!1]);break;case\"Comment\":if(\"/\"===i[1]){if((a=l.pop())[0]!==i[3])throw new Error(\"Bad state: \"+a.join(\"|\"));ac(N),F.push(N)}else l.push([i[3],!1]),N={a:(a=nc(i[0])).Author};break;case\"AutoFilter\":if(\"/\"===i[1]){if((a=l.pop())[0]!==i[3])throw new Error(\"Bad state: \"+a.join(\"|\"))}else if(\"/\"!==i[0].charAt(i[0].length-2)){var ee=nc(i[0]);g[\"!autofilter\"]={ref:Us(ee.Range).replace(/\\$/g,\"\")},l.push([i[3],!0])}break;case\"Name\":break;case\"ComponentOptions\":case\"DocumentProperties\":case\"CustomDocumentProperties\":case\"OfficeDocumentSettings\":case\"PivotTable\":case\"PivotCache\":case\"Names\":case\"MapInfo\":case\"PageBreaks\":case\"QueryTable\":case\"DataValidation\":case\"Sorting\":case\"Schema\":case\"data\":case\"ConditionalFormatting\":case\"SmartTagType\":case\"SmartTags\":case\"ExcelWorkbook\":case\"WorkbookOptions\":case\"WorksheetOptions\":if(\"/\"===i[1]){if((a=l.pop())[0]!==i[3])throw new Error(\"Bad state: \"+a.join(\"|\"))}else\"/\"!==i[0].charAt(i[0].length-2)&&l.push([i[3],!0]);break;default:if(0==l.length&&\"document\"==i[3])return Dc(r,n);if(0==l.length&&\"UOF\"==i[3])return Dc(r,n);var te=!0;switch(l[l.length-1][0]){case\"OfficeDocumentSettings\":switch(i[3]){case\"AllowPNG\":case\"RemovePersonalInformation\":case\"DownloadComponents\":case\"LocationOfComponents\":case\"Colors\":case\"Color\":case\"Index\":case\"RGB\":case\"PixelsPerInch\":case\"TargetScreenSize\":case\"ReadOnlyRecommended\":break;default:te=!1}break;case\"ComponentOptions\":switch(i[3]){case\"Toolbar\":case\"HideOfficeLogo\":case\"SpreadsheetAutoFit\":case\"Label\":case\"Caption\":case\"MaxHeight\":case\"MaxWidth\":case\"NextSheetNumber\":break;default:te=!1}break;case\"ExcelWorkbook\":switch(i[3]){case\"Date1904\":j.WBProps.date1904=!0;break;case\"WindowHeight\":case\"WindowWidth\":case\"WindowTopX\":case\"WindowTopY\":case\"TabRatio\":case\"ProtectStructure\":case\"ProtectWindows\":case\"ActiveSheet\":case\"DisplayInkNotes\":case\"FirstVisibleSheet\":case\"SupBook\":case\"SheetName\":case\"SheetIndex\":case\"SheetIndexFirst\":case\"SheetIndexLast\":case\"Dll\":case\"AcceptLabelsInFormulas\":case\"DoNotSaveLinkValues\":case\"Iteration\":case\"MaxIterations\":case\"MaxChange\":case\"Path\":case\"Xct\":case\"Count\":case\"SelectedSheets\":case\"Calculation\":case\"Uncalced\":case\"StartupPrompt\":case\"Crn\":case\"ExternName\":case\"Formula\":case\"ColFirst\":case\"ColLast\":case\"WantAdvise\":case\"Boolean\":case\"Error\":case\"Text\":case\"OLE\":case\"NoAutoRecover\":case\"PublishObjects\":case\"DoNotCalculateBeforeSave\":case\"Number\":case\"RefModeR1C1\":case\"EmbedSaveSmartTags\":break;default:te=!1}break;case\"WorkbookOptions\":switch(i[3]){case\"OWCVersion\":case\"Height\":case\"Width\":break;default:te=!1}break;case\"WorksheetOptions\":switch(i[3]){case\"Visible\":if(\"/>\"===i[0].slice(-2));else if(\"/\"===i[1])switch(r.slice(L,i.index)){case\"SheetHidden\":Z.Hidden=1;break;case\"SheetVeryHidden\":Z.Hidden=2}else L=i.index+i[0].length;break;case\"Header\":g[\"!margins\"]||ea(g[\"!margins\"]={},\"xlml\"),g[\"!margins\"].header=me(i[0]).Margin;break;case\"Footer\":g[\"!margins\"]||ea(g[\"!margins\"]={},\"xlml\"),g[\"!margins\"].footer=me(i[0]).Margin;break;case\"PageMargins\":var ne=me(i[0]);g[\"!margins\"]||ea(g[\"!margins\"]={},\"xlml\"),ne.Top&&(g[\"!margins\"].top=ne.Top),ne.Left&&(g[\"!margins\"].left=ne.Left),ne.Right&&(g[\"!margins\"].right=ne.Right),ne.Bottom&&(g[\"!margins\"].bottom=ne.Bottom);break;case\"DisplayRightToLeft\":j.Views||(j.Views=[]),j.Views[0]||(j.Views[0]={}),j.Views[0].RTL=!0;break;case\"Unsynced\":case\"Print\":case\"Panes\":case\"Scale\":case\"Pane\":case\"Number\":case\"Layout\":case\"PageSetup\":case\"Selected\":case\"ProtectObjects\":case\"EnableSelection\":case\"ProtectScenarios\":case\"ValidPrinterInfo\":case\"HorizontalResolution\":case\"VerticalResolution\":case\"NumberofCopies\":case\"ActiveRow\":case\"ActiveCol\":case\"ActivePane\":case\"TopRowVisible\":case\"TopRowBottomPane\":case\"LeftColumnVisible\":case\"LeftColumnRightPane\":case\"FitToPage\":case\"RangeSelection\":case\"PaperSizeIndex\":case\"PageLayoutZoom\":case\"PageBreakZoom\":case\"FilterOn\":case\"DoNotDisplayGridlines\":case\"SplitHorizontal\":case\"SplitVertical\":case\"FreezePanes\":case\"FrozenNoSplit\":case\"FitWidth\":case\"FitHeight\":case\"CommentsLayout\":case\"Zoom\":case\"LeftToRight\":case\"Gridlines\":case\"AllowSort\":case\"AllowFilter\":case\"AllowInsertRows\":case\"AllowDeleteRows\":case\"AllowInsertCols\":case\"AllowDeleteCols\":case\"AllowInsertHyperlinks\":case\"AllowFormatCells\":case\"AllowSizeCols\":case\"AllowSizeRows\":case\"NoSummaryRowsBelowDetail\":case\"TabColorIndex\":case\"DoNotDisplayHeadings\":case\"ShowPageLayoutZoom\":case\"NoSummaryColumnsRightDetail\":case\"BlackAndWhite\":case\"DoNotDisplayZeros\":case\"DisplayPageBreak\":case\"RowColHeadings\":case\"DoNotDisplayOutline\":case\"NoOrientation\":case\"AllowUsePivotTables\":case\"ZeroHeight\":case\"ViewableRange\":case\"Selection\":case\"ProtectContents\":break;default:te=!1}break;case\"PivotTable\":case\"PivotCache\":switch(i[3]){case\"ImmediateItemsOnDrop\":case\"ShowPageMultipleItemLabel\":case\"CompactRowIndent\":case\"Location\":case\"PivotField\":case\"Orientation\":case\"LayoutForm\":case\"LayoutSubtotalLocation\":case\"LayoutCompactRow\":case\"Position\":case\"PivotItem\":case\"DataType\":case\"DataField\":case\"SourceName\":case\"ParentField\":case\"PTLineItems\":case\"PTLineItem\":case\"CountOfSameItems\":case\"Item\":case\"ItemType\":case\"PTSource\":case\"CacheIndex\":case\"ConsolidationReference\":case\"FileName\":case\"Reference\":case\"NoColumnGrand\":case\"NoRowGrand\":case\"BlankLineAfterItems\":case\"Hidden\":case\"Subtotal\":case\"BaseField\":case\"MapChildItems\":case\"Function\":case\"RefreshOnFileOpen\":case\"PrintSetTitles\":case\"MergeLabels\":case\"DefaultVersion\":case\"RefreshName\":case\"RefreshDate\":case\"RefreshDateCopy\":case\"VersionLastRefresh\":case\"VersionLastUpdate\":case\"VersionUpdateableMin\":case\"VersionRefreshableMin\":case\"Calculation\":break;default:te=!1}break;case\"PageBreaks\":switch(i[3]){case\"ColBreaks\":case\"ColBreak\":case\"RowBreaks\":case\"RowBreak\":case\"ColStart\":case\"ColEnd\":case\"RowEnd\":break;default:te=!1}break;case\"AutoFilter\":switch(i[3]){case\"AutoFilterColumn\":case\"AutoFilterCondition\":case\"AutoFilterAnd\":case\"AutoFilterOr\":break;default:te=!1}break;case\"QueryTable\":switch(i[3]){case\"Id\":case\"AutoFormatFont\":case\"AutoFormatPattern\":case\"QuerySource\":case\"QueryType\":case\"EnableRedirections\":case\"RefreshedInXl9\":case\"URLString\":case\"HTMLTables\":case\"Connection\":case\"CommandText\":case\"RefreshInfo\":case\"NoTitles\":case\"NextId\":case\"ColumnInfo\":case\"OverwriteCells\":case\"DoNotPromptForFile\":case\"TextWizardSettings\":case\"Source\":case\"Number\":case\"Decimal\":case\"ThousandSeparator\":case\"TrailingMinusNumbers\":case\"FormatSettings\":case\"FieldType\":case\"Delimiters\":case\"Tab\":case\"Comma\":case\"AutoFormatName\":case\"VersionLastEdit\":case\"VersionLastRefresh\":break;default:te=!1}break;case\"Sorting\":case\"ConditionalFormatting\":case\"DataValidation\":switch(i[3]){case\"Range\":case\"Type\":case\"Min\":case\"Max\":case\"Sort\":case\"Descending\":case\"Order\":case\"CaseSensitive\":case\"Value\":case\"ErrorStyle\":case\"ErrorMessage\":case\"ErrorTitle\":case\"CellRangeList\":case\"InputMessage\":case\"InputTitle\":case\"ComboHide\":case\"InputHide\":case\"Condition\":case\"Qualifier\":case\"UseBlank\":case\"Value1\":case\"Value2\":case\"Format\":break;default:te=!1}break;case\"MapInfo\":case\"Schema\":case\"data\":switch(i[3]){case\"Map\":case\"Entry\":case\"Range\":case\"XPath\":case\"Field\":case\"XSDType\":case\"FilterOn\":case\"Aggregate\":case\"ElementType\":case\"AttributeType\":break;case\"schema\":case\"element\":case\"complexType\":case\"datatype\":case\"all\":case\"attribute\":case\"extends\":case\"row\":break;default:te=!1}break;case\"SmartTags\":break;default:te=!1}if(te)break;if(!l[l.length-1][1])throw\"Unrecognized tag: \"+i[3]+\"|\"+l.join(\"|\");if(\"CustomDocumentProperties\"===l[l.length-1][0]){if(\"/>\"===i[0].slice(-2))break;\"/\"===i[1]?ic(B,i[3],P,r.slice(L,i.index)):(P=i,L=i.index+i[0].length);break}if(n.WTF)throw\"Unrecognized tag: \"+i[3]+\"|\"+l.join(\"|\")}var re={};return n.bookSheets||n.bookProps||(re.Sheets=h),re.SheetNames=f,re.Workbook=j,re.SSF=T.get_table(),re.Props=_,re.Custprops=B,re}function dc(e,t){switch(qc(t=t||{}),t.type||\"base64\"){case\"base64\":return hc(m.decode(e),t);case\"binary\":case\"buffer\":case\"file\":return hc(e,t);case\"array\":return hc(S(e),t)}}function uc(e){return Xe(\"NamedRange\",null,{\"ss:Name\":e.Name,\"ss:RefersTo\":\"=\"+Js(e.Ref,{r:0,c:0})})}function fc(e,t,n,r,i,s,o){if(!e||null==e.v&&null==e.f)return\"\";var a={};if(e.f&&(a[\"ss:Formula\"]=\"=\"+xe(Js(e.f,o))),e.F&&e.F.slice(0,t.length)==t){var c=zt(e.F.slice(t.length+1));a[\"ss:ArrayRange\"]=\"RC:R\"+(c.r==o.r?\"\":\"[\"+(c.r-o.r)+\"]\")+\"C\"+(c.c==o.c?\"\":\"[\"+(c.c-o.c)+\"]\")}if(e.l&&e.l.Target&&(a[\"ss:HRef\"]=xe(e.l.Target),e.l.Tooltip&&(a[\"x:HRefScreenTip\"]=xe(e.l.Tooltip))),n[\"!merges\"])for(var l=n[\"!merges\"],h=0;h!=l.length;++h)l[h].s.c==o.c&&l[h].s.r==o.r&&(l[h].e.c>l[h].s.c&&(a[\"ss:MergeAcross\"]=l[h].e.c-l[h].s.c),l[h].e.r>l[h].s.r&&(a[\"ss:MergeDown\"]=l[h].e.r-l[h].s.r));var d=\"\",u=\"\";switch(e.t){case\"z\":return\"\";case\"n\":d=\"Number\",u=String(e.v);break;case\"b\":d=\"Boolean\",u=e.v?\"1\":\"0\";break;case\"e\":d=\"Error\",u=wn[e.v];break;case\"d\":d=\"DateTime\",u=new Date(e.v).toISOString(),null==e.z&&(e.z=e.z||T._table[14]);break;case\"s\":d=\"String\",u=((e.v||\"\")+\"\").replace(we,(function(e){return Ae[e]})).replace(ke,(function(e){return\"&#x\"+e.charCodeAt(0).toString(16).toUpperCase()+\";\"}))}var f=ta(r.cellXfs,e,r);a[\"ss:StyleID\"]=\"s\"+(21+f),a[\"ss:Index\"]=o.c+1;var g='<Data ss:Type=\"'+d+'\">'+(null!=e.v?u:\"\")+\"</Data>\";return(e.c||[]).length>0&&(g+=e.c.map((function(e){var t=Xe(\"ss:Data\",(e.t||\"\").replace(/(\\r\\n|[\\r\\n])/g,\"&#10;\"),{xmlns:\"http://www.w3.org/TR/REC-html40\"});return Xe(\"Comment\",t,{\"ss:Author\":e.a})})).join(\"\")),Xe(\"Cell\",g,a)}function gc(e,t){var n='<Row ss:Index=\"'+(e+1)+'\"';return t&&(t.hpt&&!t.hpx&&(t.hpx=ds(t.hpt)),t.hpx&&(n+=' ss:AutoFitHeight=\"0\" ss:Height=\"'+t.hpx+'\"'),t.hidden&&(n+=' ss:Hidden=\"1\"')),n+\">\"}function pc(e,t,n){var r=[],i=n.Sheets[n.SheetNames[e]],s=i?function(e,t,n,r){if(!e)return\"\";if(!((r||{}).Workbook||{}).Names)return\"\";for(var i=r.Workbook.Names,s=[],o=0;o<i.length;++o){var a=i[o];a.Sheet==n&&(a.Name.match(/^_xlfn\\./)||s.push(uc(a)))}return s.join(\"\")}(i,0,e,n):\"\";return s.length>0&&r.push(\"<Names>\"+s+\"</Names>\"),(s=i?function(e,t,n,r){if(!e[\"!ref\"])return\"\";var i=Yt(e[\"!ref\"]),s=e[\"!merges\"]||[],o=0,a=[];e[\"!cols\"]&&e[\"!cols\"].forEach((function(e,t){ls(e);var n=!!e.width,r=qo(t,e),i={\"ss:Index\":t+1};n&&(i[\"ss:Width\"]=is(r.width)),e.hidden&&(i[\"ss:Hidden\"]=\"1\"),a.push(Xe(\"Column\",null,i))}));for(var c=Array.isArray(e),l=i.s.r;l<=i.e.r;++l){for(var h=[gc(l,(e[\"!rows\"]||[])[l])],d=i.s.c;d<=i.e.c;++d){var u=!1;for(o=0;o!=s.length;++o)if(!(s[o].s.c>d||s[o].s.r>l||s[o].e.c<d||s[o].e.r<l)){s[o].s.c==d&&s[o].s.r==l||(u=!0);break}if(!u){var f={r:l,c:d},g=Kt(f);h.push(fc(c?(e[l]||[])[d]:e[g],g,e,t,0,0,f))}}h.push(\"</Row>\"),h.length>2&&a.push(h.join(\"\"))}return a.join(\"\")}(i,t):\"\").length>0&&r.push(\"<Table>\"+s+\"</Table>\"),r.push(function(e,t,n,r){if(!e)return\"\";var i=[];if(e[\"!margins\"]&&(i.push(\"<PageSetup>\"),e[\"!margins\"].header&&i.push(Xe(\"Header\",null,{\"x:Margin\":e[\"!margins\"].header})),e[\"!margins\"].footer&&i.push(Xe(\"Footer\",null,{\"x:Margin\":e[\"!margins\"].footer})),i.push(Xe(\"PageMargins\",null,{\"x:Bottom\":e[\"!margins\"].bottom||\"0.75\",\"x:Left\":e[\"!margins\"].left||\"0.7\",\"x:Right\":e[\"!margins\"].right||\"0.7\",\"x:Top\":e[\"!margins\"].top||\"0.75\"})),i.push(\"</PageSetup>\")),r&&r.Workbook&&r.Workbook.Sheets&&r.Workbook.Sheets[n])if(r.Workbook.Sheets[n].Hidden)i.push(Xe(\"Visible\",1==r.Workbook.Sheets[n].Hidden?\"SheetHidden\":\"SheetVeryHidden\",{}));else{for(var s=0;s<n&&(!r.Workbook.Sheets[s]||r.Workbook.Sheets[s].Hidden);++s);s==n&&i.push(\"<Selected/>\")}return((((r||{}).Workbook||{}).Views||[])[0]||{}).RTL&&i.push(\"<DisplayRightToLeft/>\"),e[\"!protect\"]&&(i.push(ze(\"ProtectContents\",\"True\")),e[\"!protect\"].objects&&i.push(ze(\"ProtectObjects\",\"True\")),e[\"!protect\"].scenarios&&i.push(ze(\"ProtectScenarios\",\"True\")),null==e[\"!protect\"].selectLockedCells||e[\"!protect\"].selectLockedCells?null==e[\"!protect\"].selectUnlockedCells||e[\"!protect\"].selectUnlockedCells||i.push(ze(\"EnableSelection\",\"UnlockedCells\")):i.push(ze(\"EnableSelection\",\"NoSelection\")),[[\"formatCells\",\"AllowFormatCells\"],[\"formatColumns\",\"AllowSizeCols\"],[\"formatRows\",\"AllowSizeRows\"],[\"insertColumns\",\"AllowInsertCols\"],[\"insertRows\",\"AllowInsertRows\"],[\"insertHyperlinks\",\"AllowInsertHyperlinks\"],[\"deleteColumns\",\"AllowDeleteCols\"],[\"deleteRows\",\"AllowDeleteRows\"],[\"sort\",\"AllowSort\"],[\"autoFilter\",\"AllowFilter\"],[\"pivotTables\",\"AllowUsePivotTables\"]].forEach((function(t){e[\"!protect\"][t[0]]&&i.push(\"<\"+t[1]+\"/>\")}))),0==i.length?\"\":Xe(\"WorksheetOptions\",i.join(\"\"),{xmlns:et})}(i,0,e,n)),r.join(\"\")}function mc(e,t,n,r){var i=n,s=[],o=t.slice(t.l,t.l+i);if(r&&r.enc&&r.enc.insitu)switch(e.n){case\"BOF\":case\"FilePass\":case\"FileLock\":case\"InterfaceHdr\":case\"RRDInfo\":case\"RRDHead\":case\"UsrExcl\":break;default:if(0===o.length)break;r.enc.insitu(o)}s.push(o),t.l+=i;for(var a=Sc[yt(t,t.l)],c=0;null!=a&&\"Continue\"===a.n.slice(0,8);)i=yt(t,t.l+2),c=t.l+4,\"ContinueFrt\"==a.n?c+=4:\"ContinueFrt\"==a.n.slice(0,11)&&(c+=12),s.push(t.slice(c,t.l+4+i)),t.l+=4+i,a=Sc[yt(t,t.l)];var l=E(s);Bt(l,0);var h=0;l.lens=[];for(var d=0;d<s.length;++d)l.lens.push(h),h+=s[d].length;return e.f(l,l.length,r)}function Cc(e,t,n){if(\"z\"!==e.t&&e.XF){var r=0;try{r=e.z||e.XF.numFmtId||0,t.cellNF&&(e.z=T._table[r])}catch(El){if(t.WTF)throw El}if(!t||!1!==t.cellText)try{e.w=\"e\"===e.t?e.w||wn[e.v]:0===r||\"General\"==r?\"n\"===e.t?(0|e.v)===e.v?T._general_int(e.v):T._general_num(e.v):T._general(e.v):T.format(r,e.v,{date1904:!!n})}catch(El){if(t.WTF)throw El}if(t.cellDates&&r&&\"n\"==e.t&&T.is_date(T._table[r]||String(r))){var i=T.parse_date_code(e.v);i&&(e.t=\"d\",e.v=new Date(i.y,i.m-1,i.d,i.H,i.M,i.S,i.u))}}}function bc(e,t,n){return{v:e,ixfe:t,t:n}}var vc=\"e0859ff2f94f6810ab9108002b27b3d9\",Ic=\"02d5cdd59c2e1b10939708002b2cf9ae\";function Ac(e,t){var n,r,i,s;if(t||(t={}),qc(t),h(),t.codepage&&c(t.codepage),e.FullPaths){if(N.find(e,\"/encryption\"))throw new Error(\"File is password-protected\");n=N.find(e,\"!CompObj\"),r=N.find(e,\"/Workbook\")||N.find(e,\"/Book\")}else{switch(t.type){case\"base64\":e=y(m.decode(e));break;case\"binary\":e=y(e);break;case\"buffer\":break;case\"array\":Array.isArray(e)||(e=Array.prototype.slice.call(e))}Bt(e,0),r={content:e}}if(n&&function(e){var t={},n=e.content;if(n.l=28,t.AnsiUserType=n.read_shift(0,\"lpstr-ansi\"),t.AnsiClipboardFormat=function(e){return En(e,1)}(n),n.length-n.l<=4)return t;var r=n.read_shift(4);0==r||r>40||(n.l-=4,t.Reserved1=n.read_shift(0,\"lpstr-ansi\"),n.length-n.l<=4||1907505652!==(r=n.read_shift(4))||(t.UnicodeClipboardFormat=function(e){return En(e,2)}(n),0==(r=n.read_shift(4))||r>40||(n.l-=4,t.Reserved2=n.read_shift(0,\"lpwstr\"))))}(n),t.bookProps&&!t.bookSheets)i={};else{var o=C?\"buffer\":\"array\";if(r&&r.content)i=function(e,t){var n,r,i,s,o,a,c,h={opts:{}},d={},u=t.dense?[]:{},f={},g={},p=null,m=[],C=\"\",b={},v=\"\",I={},A=[],y=!0,w=[],S=[],x={Sheets:[],WBProps:{date1904:!1},Views:[{}]},E={},k=function(e){return e<8?Mn[e]:e<64&&S[e-8]||Mn[e]},_=function(e,t,r){if(!($>1)&&(r.sheetRows&&e.r>=r.sheetRows&&(y=!1),y)){if(r.cellStyles&&t.XF&&t.XF.data&&function(e,t,n){var r,i=t.XF.data;i&&i.patternType&&n&&n.cellStyles&&(t.s={},t.s.patternType=i.patternType,(r=ts(k(i.icvFore)))&&(t.s.fgColor={rgb:r}),(r=ts(k(i.icvBack)))&&(t.s.bgColor={rgb:r}))}(0,t,r),delete t.ixfe,delete t.XF,n=e,v=Kt(e),g&&g.s&&g.e||(g={s:{r:0,c:0},e:{r:0,c:0}}),e.r<g.s.r&&(g.s.r=e.r),e.c<g.s.c&&(g.s.c=e.c),e.r+1>g.e.r&&(g.e.r=e.r+1),e.c+1>g.e.c&&(g.e.c=e.c+1),r.cellFormula&&t.f)for(var i=0;i<A.length;++i)if(!(A[i][0].s.c>e.c||A[i][0].s.r>e.r||A[i][0].e.c<e.c||A[i][0].e.r<e.r)){t.F=Ut(A[i][0]),A[i][0].s.c==e.c&&A[i][0].s.r==e.r||delete t.f,t.f&&(t.f=\"\"+Po(A[i][1],0,e,N,R));break}r.dense?(u[e.r]||(u[e.r]=[]),u[e.r][e.c]=t):u[v]=t}},R={enc:!1,sbcch:0,snames:[],sharedf:I,arrayf:A,rrtabid:[],lastuser:\"\",biff:8,codepage:0,winlocked:0,cellStyles:!!t&&!!t.cellStyles,WTF:!!t&&!!t.wtf};t.password&&(R.password=t.password);var B=[],O=[],L=[],P=[],F=!1,N=[];N.SheetNames=R.snames,N.sharedf=R.sharedf,N.arrayf=R.arrayf,N.names=[],N.XTI=[];var M,D=\"\",$=0,H=0,G=[],V=[];R.codepage=1200,l(1200);for(var j=!1;e.l<e.length-1;){var Z=e.l,z=e.read_shift(2);if(0===z&&\"EOF\"===D)break;var K=e.l===e.length?0:e.read_shift(2),X=Sc[z];if(X&&X.f){if(t.bookSheets&&\"BoundSheet8\"===D&&\"BoundSheet8\"!==X.n)break;if(D=X.n,2===X.r||12==X.r){var U=e.read_shift(2);if(K-=2,!R.enc&&U!==z&&((255&U)<<8|U>>8)!==z)throw new Error(\"rt mismatch: \"+U+\"!=\"+z);12==X.r&&(e.l+=10,K-=10)}var Y;Y=\"EOF\"===X.n?X.f(e,K,R):mc(X,e,K,R);var J=X.n;if(0==$&&\"BOF\"!=J)continue;switch(J){case\"Date1904\":h.opts.Date1904=x.WBProps.date1904=Y;break;case\"WriteProtect\":h.opts.WriteProtect=!0;break;case\"FilePass\":if(R.enc||(e.l=0),R.enc=Y,!t.password)throw new Error(\"File is password-protected\");if(null==Y.valid)throw new Error(\"Encryption scheme unsupported\");if(!Y.valid)throw new Error(\"Password is incorrect\");break;case\"WriteAccess\":R.lastuser=Y;break;case\"FileSharing\":break;case\"CodePage\":switch(Y){case 21010:Y=1200;break;case 32768:Y=1e4;break;case 32769:Y=1252}l(R.codepage=Y),j=!0;break;case\"RRTabId\":R.rrtabid=Y;break;case\"WinProtect\":R.winlocked=Y;break;case\"Template\":case\"BookBool\":case\"UsesELFs\":case\"MTRSettings\":break;case\"RefreshAll\":case\"CalcCount\":case\"CalcDelta\":case\"CalcIter\":case\"CalcMode\":case\"CalcPrecision\":case\"CalcSaveRecalc\":h.opts[J]=Y;break;case\"CalcRefMode\":R.CalcRefMode=Y;break;case\"Uncalced\":break;case\"ForceFullCalculation\":h.opts.FullCalc=Y;break;case\"WsBool\":Y.fDialog&&(u[\"!type\"]=\"dialog\");break;case\"XF\":w.push(Y);break;case\"ExtSST\":case\"BookExt\":case\"RichTextStream\":case\"BkHim\":break;case\"SupBook\":N.push([Y]),N[N.length-1].XTI=[];break;case\"ExternName\":N[N.length-1].push(Y);break;case\"Index\":break;case\"Lbl\":M={Name:Y.Name,Ref:Po(Y.rgce,0,null,N,R)},Y.itab>0&&(M.Sheet=Y.itab-1),N.names.push(M),N[0]||(N[0]=[],N[0].XTI=[]),N[N.length-1].push(Y),\"_xlnm._FilterDatabase\"==Y.Name&&Y.itab>0&&Y.rgce&&Y.rgce[0]&&Y.rgce[0][0]&&\"PtgArea3d\"==Y.rgce[0][0][0]&&(V[Y.itab-1]={ref:Ut(Y.rgce[0][0][1][2])});break;case\"ExternCount\":R.ExternCount=Y;break;case\"ExternSheet\":0==N.length&&(N[0]=[],N[0].XTI=[]),N[N.length-1].XTI=N[N.length-1].XTI.concat(Y),N.XTI=N.XTI.concat(Y);break;case\"NameCmt\":if(R.biff<8)break;null!=M&&(M.Comment=Y[1]);break;case\"Protect\":u[\"!protect\"]=Y;break;case\"Password\":0!==Y&&R.WTF&&console.error(\"Password verifier: \"+Y);break;case\"Prot4Rev\":case\"Prot4RevPass\":break;case\"BoundSheet8\":f[Y.pos]=Y,R.snames.push(Y.name);break;case\"EOF\":if(--$)break;if(g.e){if(g.e.r>0&&g.e.c>0){if(g.e.r--,g.e.c--,u[\"!ref\"]=Ut(g),t.sheetRows&&t.sheetRows<=g.e.r){var Q=g.e.r;g.e.r=t.sheetRows-1,u[\"!fullref\"]=u[\"!ref\"],u[\"!ref\"]=Ut(g),g.e.r=Q}g.e.r++,g.e.c++}B.length>0&&(u[\"!merges\"]=B),O.length>0&&(u[\"!objects\"]=O),L.length>0&&(u[\"!cols\"]=L),P.length>0&&(u[\"!rows\"]=P),x.Sheets.push(E)}\"\"===C?b=u:d[C]=u,u=t.dense?[]:{};break;case\"BOF\":if(8===R.biff&&(R.biff={9:2,521:3,1033:4}[z]||{512:2,768:3,1024:4,1280:5,1536:8,2:2,7:2}[Y.BIFFVer]||8),8==R.biff&&0==Y.BIFFVer&&16==Y.dt&&(R.biff=2),$++)break;if(y=!0,u=t.dense?[]:{},R.biff<8&&!j&&(j=!0,l(R.codepage=t.codepage||1252)),R.biff<5){\"\"===C&&(C=\"Sheet1\"),g={s:{r:0,c:0},e:{r:0,c:0}};var q={pos:e.l-K,name:C};f[q.pos]=q,R.snames.push(C)}else C=(f[Z]||{name:\"\"}).name;32==Y.dt&&(u[\"!type\"]=\"chart\"),64==Y.dt&&(u[\"!type\"]=\"macro\"),B=[],O=[],R.arrayf=A=[],L=[],P=[],F=!1,E={Hidden:(f[Z]||{hs:0}).hs,name:C};break;case\"Number\":case\"BIFF2NUM\":case\"BIFF2INT\":\"chart\"==u[\"!type\"]&&(t.dense?(u[Y.r]||[])[Y.c]:u[Kt({c:Y.c,r:Y.r})])&&++Y.c,o={ixfe:Y.ixfe,XF:w[Y.ixfe]||{},v:Y.val,t:\"n\"},H>0&&(o.z=G[o.ixfe>>8&31]),Cc(o,t,h.opts.Date1904),_({c:Y.c,r:Y.r},o,t);break;case\"BoolErr\":o={ixfe:Y.ixfe,XF:w[Y.ixfe],v:Y.val,t:Y.t},H>0&&(o.z=G[o.ixfe>>8&31]),Cc(o,t,h.opts.Date1904),_({c:Y.c,r:Y.r},o,t);break;case\"RK\":o={ixfe:Y.ixfe,XF:w[Y.ixfe],v:Y.rknum,t:\"n\"},H>0&&(o.z=G[o.ixfe>>8&31]),Cc(o,t,h.opts.Date1904),_({c:Y.c,r:Y.r},o,t);break;case\"MulRk\":for(var ee=Y.c;ee<=Y.C;++ee){var te=Y.rkrec[ee-Y.c][0];o={ixfe:te,XF:w[te],v:Y.rkrec[ee-Y.c][1],t:\"n\"},H>0&&(o.z=G[o.ixfe>>8&31]),Cc(o,t,h.opts.Date1904),_({c:ee,r:Y.r},o,t)}break;case\"Formula\":if(\"String\"==Y.val){p=Y;break}if((o=bc(Y.val,Y.cell.ixfe,Y.tt)).XF=w[o.ixfe],t.cellFormula){var ne=Y.formula;if(ne&&ne[0]&&ne[0][0]&&\"PtgExp\"==ne[0][0][0]){var re=ne[0][0][1][0],ie=ne[0][0][1][1],se=Kt({r:re,c:ie});I[se]?o.f=\"\"+Po(Y.formula,0,Y.cell,N,R):o.F=((t.dense?(u[re]||[])[ie]:u[se])||{}).F}else o.f=\"\"+Po(Y.formula,0,Y.cell,N,R)}H>0&&(o.z=G[o.ixfe>>8&31]),Cc(o,t,h.opts.Date1904),_(Y.cell,o,t),p=Y;break;case\"String\":if(!p)throw new Error(\"String record expects Formula\");p.val=Y,(o=bc(Y,p.cell.ixfe,\"s\")).XF=w[o.ixfe],t.cellFormula&&(o.f=\"\"+Po(p.formula,0,p.cell,N,R)),H>0&&(o.z=G[o.ixfe>>8&31]),Cc(o,t,h.opts.Date1904),_(p.cell,o,t),p=null;break;case\"Array\":A.push(Y);var oe=Kt(Y[0].s);if(r=t.dense?(u[Y[0].s.r]||[])[Y[0].s.c]:u[oe],t.cellFormula&&r){if(!p)break;if(!oe||!r)break;r.f=\"\"+Po(Y[1],0,Y[0],N,R),r.F=Ut(Y[0])}break;case\"ShrFmla\":if(!y)break;if(!t.cellFormula)break;if(v){if(!p)break;I[Kt(p.cell)]=Y[0],((r=t.dense?(u[p.cell.r]||[])[p.cell.c]:u[Kt(p.cell)])||{}).f=\"\"+Po(Y[0],0,n,N,R)}break;case\"LabelSst\":(o=bc(m[Y.isst].t,Y.ixfe,\"s\")).XF=w[o.ixfe],H>0&&(o.z=G[o.ixfe>>8&31]),Cc(o,t,h.opts.Date1904),_({c:Y.c,r:Y.r},o,t);break;case\"Blank\":t.sheetStubs&&(o={ixfe:Y.ixfe,XF:w[Y.ixfe],t:\"z\"},H>0&&(o.z=G[o.ixfe>>8&31]),Cc(o,t,h.opts.Date1904),_({c:Y.c,r:Y.r},o,t));break;case\"MulBlank\":if(t.sheetStubs)for(var ae=Y.c;ae<=Y.C;++ae){var ce=Y.ixfe[ae-Y.c];o={ixfe:ce,XF:w[ce],t:\"z\"},H>0&&(o.z=G[o.ixfe>>8&31]),Cc(o,t,h.opts.Date1904),_({c:ae,r:Y.r},o,t)}break;case\"RString\":case\"Label\":case\"BIFF2STR\":(o=bc(Y.val,Y.ixfe,\"s\")).XF=w[o.ixfe],H>0&&(o.z=G[o.ixfe>>8&31]),Cc(o,t,h.opts.Date1904),_({c:Y.c,r:Y.r},o,t);break;case\"Dimensions\":1===$&&(g=Y);break;case\"SST\":m=Y;break;case\"Format\":if(4==R.biff){G[H++]=Y[1];for(var le=0;le<H+163&&T._table[le]!=Y[1];++le);le>=163&&T.load(Y[1],H+163)}else T.load(Y[1],Y[0]);break;case\"BIFF2FORMAT\":G[H++]=Y;for(var he=0;he<H+163&&T._table[he]!=Y;++he);he>=163&&T.load(Y,H+163);break;case\"MergeCells\":B=B.concat(Y);break;case\"Obj\":O[Y.cmo[0]]=R.lastobj=Y;break;case\"TxO\":R.lastobj.TxO=Y;break;case\"ImData\":R.lastobj.ImData=Y;break;case\"HLink\":for(s=Y[0].s.r;s<=Y[0].e.r;++s)for(i=Y[0].s.c;i<=Y[0].e.c;++i)(r=t.dense?(u[s]||[])[i]:u[Kt({c:i,r:s})])&&(r.l=Y[1]);break;case\"HLinkTooltip\":for(s=Y[0].s.r;s<=Y[0].e.r;++s)for(i=Y[0].s.c;i<=Y[0].e.c;++i)(r=t.dense?(u[s]||[])[i]:u[Kt({c:i,r:s})])&&r.l&&(r.l.Tooltip=Y[1]);break;case\"Note\":if(R.biff<=5&&R.biff>=2)break;r=t.dense?(u[Y[0].r]||[])[Y[0].c]:u[Kt(Y[0])];var de=O[Y[2]];r||(t.dense?(u[Y[0].r]||(u[Y[0].r]=[]),r=u[Y[0].r][Y[0].c]={t:\"z\"}):r=u[Kt(Y[0])]={t:\"z\"},g.e.r=Math.max(g.e.r,Y[0].r),g.s.r=Math.min(g.s.r,Y[0].r),g.e.c=Math.max(g.e.c,Y[0].c),g.s.c=Math.min(g.s.c,Y[0].c)),r.c||(r.c=[]),r.c.push({a:Y[1],t:de.TxO.t});break;default:switch(X.n){case\"ClrtClient\":break;case\"XFExt\":Y.ext.forEach((function(e){}));break;case\"DefColWidth\":case\"DefaultRowHeight\":break;case\"ColInfo\":if(!R.cellStyles)break;for(;Y.e>=Y.s;)L[Y.e--]={width:Y.w/256},F||(F=!0,cs(Y.w/256)),ls(L[Y.e+1]);break;case\"Row\":var ue={};null!=Y.level&&(P[Y.r]=ue,ue.level=Y.level),Y.hidden&&(P[Y.r]=ue,ue.hidden=!0),Y.hpt&&(P[Y.r]=ue,ue.hpt=Y.hpt,ue.hpx=ds(Y.hpt));break;case\"LeftMargin\":case\"RightMargin\":case\"TopMargin\":case\"BottomMargin\":u[\"!margins\"]||ea(u[\"!margins\"]={}),u[\"!margins\"][J.slice(0,-6).toLowerCase()]=Y;break;case\"Setup\":u[\"!margins\"]||ea(u[\"!margins\"]={}),u[\"!margins\"].header=Y.header,u[\"!margins\"].footer=Y.footer;break;case\"Window2\":Y.RTL&&(x.Views[0].RTL=!0);break;case\"Header\":case\"Footer\":case\"HCenter\":case\"VCenter\":case\"Pls\":case\"GCW\":case\"LHRecord\":case\"DBCell\":case\"EntExU2\":case\"SxView\":case\"Sxvd\":case\"SXVI\":case\"SXVDEx\":case\"SxIvd\":case\"SXString\":case\"Sync\":case\"Addin\":case\"SXDI\":case\"SXLI\":case\"SXEx\":case\"QsiSXTag\":case\"Selection\":case\"Feat\":break;case\"FeatHdr\":case\"FeatHdr11\":break;case\"Feature11\":case\"Feature12\":case\"List12\":break;case\"Country\":a=Y;break;case\"RecalcId\":case\"DxGCol\":break;case\"Fbi\":case\"Fbi2\":case\"GelFrame\":case\"Font\":case\"XFCRC\":case\"Style\":case\"StyleExt\":break;case\"Palette\":S=Y;break;case\"Theme\":c=Y;break;case\"ScenarioProtect\":case\"ObjProtect\":case\"CondFmt12\":case\"Table\":case\"TableStyles\":case\"TableStyle\":case\"TableStyleElement\":case\"SXStreamID\":case\"SXVS\":case\"DConRef\":case\"SXAddl\":case\"DConBin\":case\"DConName\":case\"SXPI\":case\"SxFormat\":case\"SxSelect\":case\"SxRule\":case\"SxFilt\":case\"SxItm\":case\"SxDXF\":case\"ScenMan\":case\"DCon\":case\"CellWatch\":case\"PrintRowCol\":case\"PrintGrid\":case\"PrintSize\":case\"XCT\":case\"CRN\":case\"Scl\":case\"SheetExt\":case\"SheetExtOptional\":case\"ObNoMacros\":case\"ObProj\":break;case\"CodeName\":C?E.CodeName=Y||E.name:x.WBProps.CodeName=Y||\"ThisWorkbook\";break;case\"GUIDTypeLib\":case\"WOpt\":case\"PhoneticInfo\":case\"OleObjectSize\":break;case\"DXF\":case\"DXFN\":case\"DXFN12\":case\"DXFN12List\":case\"DXFN12NoCB\":break;case\"Dv\":case\"DVal\":break;case\"BRAI\":case\"Series\":case\"SeriesText\":case\"DConn\":case\"DbOrParamQry\":case\"DBQueryExt\":case\"OleDbConn\":case\"ExtString\":case\"IFmtRecord\":break;case\"CondFmt\":case\"CF\":case\"CF12\":case\"CFEx\":case\"Excel9File\":case\"Units\":break;case\"InterfaceHdr\":case\"Mms\":case\"InterfaceEnd\":case\"DSF\":case\"BuiltInFnGroupCount\":break;case\"Window1\":case\"HideObj\":case\"GridSet\":case\"Guts\":case\"UserBView\":case\"UserSViewBegin\":case\"UserSViewEnd\":case\"Pane\":break;default:switch(X.n){case\"Dat\":case\"Begin\":case\"End\":case\"StartBlock\":case\"EndBlock\":case\"Frame\":case\"Area\":case\"Axis\":case\"AxisLine\":case\"Tick\":break;case\"AxesUsed\":case\"CrtLayout12\":case\"CrtLayout12A\":case\"CrtLink\":case\"CrtLine\":case\"CrtMlFrt\":case\"CrtMlFrtContinue\":break;case\"LineFormat\":case\"AreaFormat\":case\"Chart\":case\"Chart3d\":case\"Chart3DBarShape\":case\"ChartFormat\":case\"ChartFrtInfo\":break;case\"PlotArea\":case\"PlotGrowth\":break;case\"SeriesList\":case\"SerParent\":case\"SerAuxTrend\":break;case\"DataFormat\":case\"SerToCrt\":case\"FontX\":break;case\"CatSerRange\":case\"AxcExt\":case\"SerFmt\":case\"ShtProps\":break;case\"DefaultText\":case\"Text\":case\"CatLab\":case\"DataLabExtContents\":break;case\"Legend\":case\"LegendException\":break;case\"Pie\":case\"Scatter\":break;case\"PieFormat\":case\"MarkerFormat\":break;case\"StartObject\":case\"EndObject\":break;case\"AlRuns\":case\"ObjectLink\":case\"SIIndex\":break;case\"AttachedLabel\":case\"YMult\":break;case\"Line\":case\"Bar\":case\"Surf\":case\"AxisParent\":case\"Pos\":case\"ValueRange\":case\"SXViewEx9\":case\"SXViewLink\":case\"PivotChartBits\":case\"SBaseRef\":case\"TextPropsStream\":case\"LnExt\":case\"MkrExt\":case\"CrtCoopt\":break;case\"Qsi\":case\"Qsif\":case\"Qsir\":case\"QsiSXTag\":case\"TxtQry\":case\"FilterMode\":break;case\"AutoFilter\":case\"AutoFilterInfo\":case\"AutoFilter12\":case\"DropDownObjIds\":case\"Sort\":case\"SortData\":case\"ShapePropsStream\":break;case\"MsoDrawing\":case\"MsoDrawingGroup\":case\"MsoDrawingSelection\":break;case\"WebPub\":case\"AutoWebPub\":break;case\"HeaderFooter\":case\"HFPicture\":case\"PLV\":case\"HorizontalPageBreaks\":case\"VerticalPageBreaks\":break;case\"Backup\":case\"CompressPictures\":case\"Compat12\":break;case\"Continue\":case\"ContinueFrt12\":break;case\"FrtFontList\":case\"FrtWrapper\":break;default:switch(X.n){case\"TabIdConf\":case\"Radar\":case\"RadarArea\":case\"DropBar\":case\"Intl\":case\"CoordList\":case\"SerAuxErrBar\":break;case\"BIFF2FONTCLR\":case\"BIFF2FMTCNT\":case\"BIFF2FONTXTRA\":break;case\"BIFF2XF\":case\"BIFF3XF\":case\"BIFF4XF\":break;case\"BIFF4FMTCNT\":case\"BIFF2ROW\":case\"BIFF2WINDOW2\":break;case\"SCENARIO\":case\"DConBin\":case\"PicF\":case\"DataLabExt\":case\"Lel\":case\"BopPop\":case\"BopPopCustom\":case\"RealTimeData\":case\"Name\":break;case\"LHNGraph\":case\"FnGroupName\":case\"AddMenu\":case\"LPr\":break;case\"ListObj\":case\"ListField\":case\"RRSort\":case\"BigName\":break;case\"ToolbarHdr\":case\"ToolbarEnd\":case\"DDEObjName\":case\"FRTArchId$\":break;default:if(t.WTF)throw\"Unrecognized Record \"+X.n}}}}}else e.l+=K}return h.SheetNames=W(f).sort((function(e,t){return Number(e)-Number(t)})).map((function(e){return f[e].name})),t.bookSheets||(h.Sheets=d),h.Sheets&&V.forEach((function(e,t){h.Sheets[h.SheetNames[t]][\"!autofilter\"]=e})),h.Preamble=b,h.Strings=m,h.SSF=T.get_table(),R.enc&&(h.Encryption=R.enc),c&&(h.Themes=c),h.Metadata={},void 0!==a&&(h.Metadata.Country=a),N.names.length>0&&(x.Names=N.names),h.Workbook=x,h}(r.content,t);else if((s=N.find(e,\"PerfectOffice_MAIN\"))&&s.content)i=ki.to_workbook(s.content,(t.type=o,t));else{if(!(s=N.find(e,\"NativeContent_MAIN\"))||!s.content)throw new Error(\"Cannot find Workbook stream\");i=ki.to_workbook(s.content,(t.type=o,t))}t.bookVBA&&e.FullPaths&&N.find(e,\"/_VBA_PROJECT_CUR/VBA/dir\")&&(i.vbaraw=function(e){var t=N.utils.cfb_new({root:\"R\"});return e.FullPaths.forEach((function(n,r){if(\"/\"!==n.slice(-1)&&n.match(/_VBA_PROJECT_CUR/)){var i=n.replace(/^[^\\/]*/,\"R\").replace(/\\/_VBA_PROJECT_CUR\\u0000*/,\"\");N.utils.cfb_add(t,i,e.FileIndex[r].content)}})),N.write(t)}(e))}var a={};return e.FullPaths&&function(e,t,n){var r=N.find(e,\"!DocumentSummaryInformation\");if(r&&r.size>0)try{var i=xr(r,Tn,Ic);for(var s in i)t[s]=i[s]}catch(El){if(n.WTF)throw El}var o=N.find(e,\"!SummaryInformation\");if(o&&o.size>0)try{var a=xr(o,Rn,vc);for(var c in a)null==t[c]&&(t[c]=a[c])}catch(El){if(n.WTF)throw El}t.HeadingPairs&&t.TitlesOfParts&&(ir(t.HeadingPairs,t.TitlesOfParts,t,n),delete t.HeadingPairs,delete t.TitlesOfParts)}(e,a,t),i.Props=i.Custprops=a,t.bookFiles&&(i.cfb=e),i}var yc={0:{n:\"BrtRowHdr\",f:function(e,t){var n={},r=e.l+t;n.r=e.read_shift(4),e.l+=4;var i=e.read_shift(2);e.l+=1;var s=e.read_shift(1);return e.l=r,7&s&&(n.level=7&s),16&s&&(n.hidden=!0),32&s&&(n.hpt=i/20),n}},1:{n:\"BrtCellBlank\",f:function(e){return[cn(e)]}},2:{n:\"BrtCellRk\",f:function(e){return[cn(e),Cn(e),\"n\"]}},3:{n:\"BrtCellError\",f:function(e){return[cn(e),e.read_shift(1),\"e\"]}},4:{n:\"BrtCellBool\",f:function(e){return[cn(e),e.read_shift(1),\"b\"]}},5:{n:\"BrtCellReal\",f:function(e){return[cn(e),An(e),\"n\"]}},6:{n:\"BrtCellSt\",f:function(e){return[cn(e),nn(e),\"str\"]}},7:{n:\"BrtCellIsst\",f:function(e){return[cn(e),e.read_shift(4),\"s\"]}},8:{n:\"BrtFmlaString\",f:function(e,t,n){var r=e.l+t,i=cn(e);i.r=n[\"!row\"];var s=[i,nn(e),\"str\"];if(n.cellFormula){e.l+=2;var o=Wo(e,r-e.l,n);s[3]=Po(o,0,i,n.supbooks,n)}else e.l=r;return s}},9:{n:\"BrtFmlaNum\",f:function(e,t,n){var r=e.l+t,i=cn(e);i.r=n[\"!row\"];var s=[i,An(e),\"n\"];if(n.cellFormula){e.l+=2;var o=Wo(e,r-e.l,n);s[3]=Po(o,0,i,n.supbooks,n)}else e.l=r;return s}},10:{n:\"BrtFmlaBool\",f:function(e,t,n){var r=e.l+t,i=cn(e);i.r=n[\"!row\"];var s=[i,e.read_shift(1),\"b\"];if(n.cellFormula){e.l+=2;var o=Wo(e,r-e.l,n);s[3]=Po(o,0,i,n.supbooks,n)}else e.l=r;return s}},11:{n:\"BrtFmlaError\",f:function(e,t,n){var r=e.l+t,i=cn(e);i.r=n[\"!row\"];var s=[i,e.read_shift(1),\"e\"];if(n.cellFormula){e.l+=2;var o=Wo(e,r-e.l,n);s[3]=Po(o,0,i,n.supbooks,n)}else e.l=r;return s}},16:{n:\"BrtFRTArchID$\",f:function(e,t){var n={};return e.read_shift(4),n.ArchID=e.read_shift(4),e.l+=t-8,n}},19:{n:\"BrtSSTItem\",f:on},20:{n:\"BrtPCDIMissing\"},21:{n:\"BrtPCDINumber\"},22:{n:\"BrtPCDIBoolean\"},23:{n:\"BrtPCDIError\"},24:{n:\"BrtPCDIString\"},25:{n:\"BrtPCDIDatetime\"},26:{n:\"BrtPCDIIndex\"},27:{n:\"BrtPCDIAMissing\"},28:{n:\"BrtPCDIANumber\"},29:{n:\"BrtPCDIABoolean\"},30:{n:\"BrtPCDIAError\"},31:{n:\"BrtPCDIAString\"},32:{n:\"BrtPCDIADatetime\"},33:{n:\"BrtPCRRecord\"},34:{n:\"BrtPCRRecordDt\"},35:{n:\"BrtFRTBegin\"},36:{n:\"BrtFRTEnd\"},37:{n:\"BrtACBegin\"},38:{n:\"BrtACEnd\"},39:{n:\"BrtName\",f:function(e,t,n){var r=e.l+t;e.l+=4,e.l+=1;var i=e.read_shift(4),s=gn(e),o=Ho(e,0,n),a=un(e);e.l=r;var c={Name:s,Ptg:o};return i<268435455&&(c.Sheet=i),a&&(c.Comment=a),c}},40:{n:\"BrtIndexRowBlock\"},42:{n:\"BrtIndexBlock\"},43:{n:\"BrtFont\",f:function(e,t,n){var r={};r.sz=e.read_shift(2)/20;var i=function(e){var t=e.read_shift(1);return e.l++,{fItalic:2&t,fStrikeout:8&t,fOutline:16&t,fShadow:32&t,fCondense:64&t,fExtend:128&t}}(e);switch(i.fCondense&&(r.condense=1),i.fExtend&&(r.extend=1),i.fShadow&&(r.shadow=1),i.fOutline&&(r.outline=1),i.fStrikeout&&(r.strike=1),i.fItalic&&(r.italic=1),700===e.read_shift(2)&&(r.bold=1),e.read_shift(2)){case 1:r.vertAlign=\"superscript\";break;case 2:r.vertAlign=\"subscript\"}var s=e.read_shift(1);0!=s&&(r.underline=s);var o=e.read_shift(1);o>0&&(r.family=o);var a=e.read_shift(1);switch(a>0&&(r.charset=a),e.l++,r.color=function(e){var t={},n=e.read_shift(1)>>>1,r=e.read_shift(1),i=e.read_shift(2,\"i\"),s=e.read_shift(1),o=e.read_shift(1),a=e.read_shift(1);switch(e.l++,n){case 0:t.auto=1;break;case 1:t.index=r;var c=Mn[r];c&&(t.rgb=ts(c));break;case 2:t.rgb=ts([s,o,a]);break;case 3:t.theme=r}return 0!=i&&(t.tint=i>0?i/32767:i/32768),t}(e),e.read_shift(1)){case 1:r.scheme=\"major\";break;case 2:r.scheme=\"minor\"}return r.name=nn(e),r}},44:{n:\"BrtFmt\",f:function(e,t){return[e.read_shift(2),nn(e)]}},45:{n:\"BrtFill\",f:xs},46:{n:\"BrtBorder\",f:Ts},47:{n:\"BrtXF\",f:function(e,t){var n=e.l+t,r=e.read_shift(2),i=e.read_shift(2);return e.l=n,{ixfe:r,numFmtId:i}}},48:{n:\"BrtStyle\"},49:{n:\"BrtCellMeta\"},50:{n:\"BrtValueMeta\"},51:{n:\"BrtMdb\"},52:{n:\"BrtBeginFmd\"},53:{n:\"BrtEndFmd\"},54:{n:\"BrtBeginMdx\"},55:{n:\"BrtEndMdx\"},56:{n:\"BrtBeginMdxTuple\"},57:{n:\"BrtEndMdxTuple\"},58:{n:\"BrtMdxMbrIstr\"},59:{n:\"BrtStr\"},60:{n:\"BrtColInfo\",f:bi},62:{n:\"BrtCellRString\"},63:{n:\"BrtCalcChainItem$\",f:function(e){var t={};t.i=e.read_shift(4);var n={};n.r=e.read_shift(4),n.c=e.read_shift(4),t.r=Kt(n);var r=e.read_shift(1);return 2&r&&(t.l=\"1\"),8&r&&(t.a=\"1\"),t}},64:{n:\"BrtDVal\"},65:{n:\"BrtSxvcellNum\"},66:{n:\"BrtSxvcellStr\"},67:{n:\"BrtSxvcellBool\"},68:{n:\"BrtSxvcellErr\"},69:{n:\"BrtSxvcellDate\"},70:{n:\"BrtSxvcellNil\"},128:{n:\"BrtFileVersion\"},129:{n:\"BrtBeginSheet\"},130:{n:\"BrtEndSheet\"},131:{n:\"BrtBeginBook\",f:Ot,p:0},132:{n:\"BrtEndBook\"},133:{n:\"BrtBeginWsViews\"},134:{n:\"BrtEndWsViews\"},135:{n:\"BrtBeginBookViews\"},136:{n:\"BrtEndBookViews\"},137:{n:\"BrtBeginWsView\",f:function(e){var t=e.read_shift(2);return e.l+=28,{RTL:32&t}}},138:{n:\"BrtEndWsView\"},139:{n:\"BrtBeginCsViews\"},140:{n:\"BrtEndCsViews\"},141:{n:\"BrtBeginCsView\"},142:{n:\"BrtEndCsView\"},143:{n:\"BrtBeginBundleShs\"},144:{n:\"BrtEndBundleShs\"},145:{n:\"BrtBeginSheetData\"},146:{n:\"BrtEndSheetData\"},147:{n:\"BrtWsProp\",f:function(e,t){var n={};return e.l+=19,n.name=hn(e,t-19),n}},148:{n:\"BrtWsDim\",f:ka,p:16},151:{n:\"BrtPane\"},152:{n:\"BrtSel\"},153:{n:\"BrtWbProp\",f:function(e,t){var n={},r=e.read_shift(4);n.defaultThemeVersion=e.read_shift(4);var i=t>8?nn(e):\"\";return i.length>0&&(n.CodeName=i),n.autoCompressPictures=!!(65536&r),n.backupFile=!!(64&r),n.checkCompatibility=!!(4096&r),n.date1904=!!(1&r),n.filterPrivacy=!!(8&r),n.hidePivotFieldList=!!(1024&r),n.promptedSolutions=!!(16&r),n.publishItems=!!(2048&r),n.refreshAllConnections=!!(262144&r),n.saveExternalLinkValues=!!(128&r),n.showBorderUnselectedTables=!!(4&r),n.showInkAnnotation=!!(32&r),n.showObjects=[\"all\",\"placeholders\",\"none\"][r>>13&3],n.showPivotChartFilter=!!(32768&r),n.updateLinks=[\"userSet\",\"never\",\"always\"][r>>8&3],n}},154:{n:\"BrtWbFactoid\"},155:{n:\"BrtFileRecover\"},156:{n:\"BrtBundleSh\",f:function(e,t){var n={};return n.Hidden=e.read_shift(4),n.iTabID=e.read_shift(4),n.strRelID=pn(e,t-8),n.name=nn(e),n}},157:{n:\"BrtCalcProp\"},158:{n:\"BrtBookView\"},159:{n:\"BrtBeginSst\",f:function(e){return[e.read_shift(4),e.read_shift(4)]}},160:{n:\"BrtEndSst\"},161:{n:\"BrtBeginAFilter\",f:vn},162:{n:\"BrtEndAFilter\"},163:{n:\"BrtBeginFilterColumn\"},164:{n:\"BrtEndFilterColumn\"},165:{n:\"BrtBeginFilters\"},166:{n:\"BrtEndFilters\"},167:{n:\"BrtFilter\"},168:{n:\"BrtColorFilter\"},169:{n:\"BrtIconFilter\"},170:{n:\"BrtTop10Filter\"},171:{n:\"BrtDynamicFilter\"},172:{n:\"BrtBeginCustomFilters\"},173:{n:\"BrtEndCustomFilters\"},174:{n:\"BrtCustomFilter\"},175:{n:\"BrtAFilterDateGroupItem\"},176:{n:\"BrtMergeCell\",f:Ta},177:{n:\"BrtBeginMergeCells\"},178:{n:\"BrtEndMergeCells\"},179:{n:\"BrtBeginPivotCacheDef\"},180:{n:\"BrtEndPivotCacheDef\"},181:{n:\"BrtBeginPCDFields\"},182:{n:\"BrtEndPCDFields\"},183:{n:\"BrtBeginPCDField\"},184:{n:\"BrtEndPCDField\"},185:{n:\"BrtBeginPCDSource\"},186:{n:\"BrtEndPCDSource\"},187:{n:\"BrtBeginPCDSRange\"},188:{n:\"BrtEndPCDSRange\"},189:{n:\"BrtBeginPCDFAtbl\"},190:{n:\"BrtEndPCDFAtbl\"},191:{n:\"BrtBeginPCDIRun\"},192:{n:\"BrtEndPCDIRun\"},193:{n:\"BrtBeginPivotCacheRecords\"},194:{n:\"BrtEndPivotCacheRecords\"},195:{n:\"BrtBeginPCDHierarchies\"},196:{n:\"BrtEndPCDHierarchies\"},197:{n:\"BrtBeginPCDHierarchy\"},198:{n:\"BrtEndPCDHierarchy\"},199:{n:\"BrtBeginPCDHFieldsUsage\"},200:{n:\"BrtEndPCDHFieldsUsage\"},201:{n:\"BrtBeginExtConnection\"},202:{n:\"BrtEndExtConnection\"},203:{n:\"BrtBeginECDbProps\"},204:{n:\"BrtEndECDbProps\"},205:{n:\"BrtBeginECOlapProps\"},206:{n:\"BrtEndECOlapProps\"},207:{n:\"BrtBeginPCDSConsol\"},208:{n:\"BrtEndPCDSConsol\"},209:{n:\"BrtBeginPCDSCPages\"},210:{n:\"BrtEndPCDSCPages\"},211:{n:\"BrtBeginPCDSCPage\"},212:{n:\"BrtEndPCDSCPage\"},213:{n:\"BrtBeginPCDSCPItem\"},214:{n:\"BrtEndPCDSCPItem\"},215:{n:\"BrtBeginPCDSCSets\"},216:{n:\"BrtEndPCDSCSets\"},217:{n:\"BrtBeginPCDSCSet\"},218:{n:\"BrtEndPCDSCSet\"},219:{n:\"BrtBeginPCDFGroup\"},220:{n:\"BrtEndPCDFGroup\"},221:{n:\"BrtBeginPCDFGItems\"},222:{n:\"BrtEndPCDFGItems\"},223:{n:\"BrtBeginPCDFGRange\"},224:{n:\"BrtEndPCDFGRange\"},225:{n:\"BrtBeginPCDFGDiscrete\"},226:{n:\"BrtEndPCDFGDiscrete\"},227:{n:\"BrtBeginPCDSDTupleCache\"},228:{n:\"BrtEndPCDSDTupleCache\"},229:{n:\"BrtBeginPCDSDTCEntries\"},230:{n:\"BrtEndPCDSDTCEntries\"},231:{n:\"BrtBeginPCDSDTCEMembers\"},232:{n:\"BrtEndPCDSDTCEMembers\"},233:{n:\"BrtBeginPCDSDTCEMember\"},234:{n:\"BrtEndPCDSDTCEMember\"},235:{n:\"BrtBeginPCDSDTCQueries\"},236:{n:\"BrtEndPCDSDTCQueries\"},237:{n:\"BrtBeginPCDSDTCQuery\"},238:{n:\"BrtEndPCDSDTCQuery\"},239:{n:\"BrtBeginPCDSDTCSets\"},240:{n:\"BrtEndPCDSDTCSets\"},241:{n:\"BrtBeginPCDSDTCSet\"},242:{n:\"BrtEndPCDSDTCSet\"},243:{n:\"BrtBeginPCDCalcItems\"},244:{n:\"BrtEndPCDCalcItems\"},245:{n:\"BrtBeginPCDCalcItem\"},246:{n:\"BrtEndPCDCalcItem\"},247:{n:\"BrtBeginPRule\"},248:{n:\"BrtEndPRule\"},249:{n:\"BrtBeginPRFilters\"},250:{n:\"BrtEndPRFilters\"},251:{n:\"BrtBeginPRFilter\"},252:{n:\"BrtEndPRFilter\"},253:{n:\"BrtBeginPNames\"},254:{n:\"BrtEndPNames\"},255:{n:\"BrtBeginPName\"},256:{n:\"BrtEndPName\"},257:{n:\"BrtBeginPNPairs\"},258:{n:\"BrtEndPNPairs\"},259:{n:\"BrtBeginPNPair\"},260:{n:\"BrtEndPNPair\"},261:{n:\"BrtBeginECWebProps\"},262:{n:\"BrtEndECWebProps\"},263:{n:\"BrtBeginEcWpTables\"},264:{n:\"BrtEndECWPTables\"},265:{n:\"BrtBeginECParams\"},266:{n:\"BrtEndECParams\"},267:{n:\"BrtBeginECParam\"},268:{n:\"BrtEndECParam\"},269:{n:\"BrtBeginPCDKPIs\"},270:{n:\"BrtEndPCDKPIs\"},271:{n:\"BrtBeginPCDKPI\"},272:{n:\"BrtEndPCDKPI\"},273:{n:\"BrtBeginDims\"},274:{n:\"BrtEndDims\"},275:{n:\"BrtBeginDim\"},276:{n:\"BrtEndDim\"},277:{n:\"BrtIndexPartEnd\"},278:{n:\"BrtBeginStyleSheet\"},279:{n:\"BrtEndStyleSheet\"},280:{n:\"BrtBeginSXView\"},281:{n:\"BrtEndSXVI\"},282:{n:\"BrtBeginSXVI\"},283:{n:\"BrtBeginSXVIs\"},284:{n:\"BrtEndSXVIs\"},285:{n:\"BrtBeginSXVD\"},286:{n:\"BrtEndSXVD\"},287:{n:\"BrtBeginSXVDs\"},288:{n:\"BrtEndSXVDs\"},289:{n:\"BrtBeginSXPI\"},290:{n:\"BrtEndSXPI\"},291:{n:\"BrtBeginSXPIs\"},292:{n:\"BrtEndSXPIs\"},293:{n:\"BrtBeginSXDI\"},294:{n:\"BrtEndSXDI\"},295:{n:\"BrtBeginSXDIs\"},296:{n:\"BrtEndSXDIs\"},297:{n:\"BrtBeginSXLI\"},298:{n:\"BrtEndSXLI\"},299:{n:\"BrtBeginSXLIRws\"},300:{n:\"BrtEndSXLIRws\"},301:{n:\"BrtBeginSXLICols\"},302:{n:\"BrtEndSXLICols\"},303:{n:\"BrtBeginSXFormat\"},304:{n:\"BrtEndSXFormat\"},305:{n:\"BrtBeginSXFormats\"},306:{n:\"BrtEndSxFormats\"},307:{n:\"BrtBeginSxSelect\"},308:{n:\"BrtEndSxSelect\"},309:{n:\"BrtBeginISXVDRws\"},310:{n:\"BrtEndISXVDRws\"},311:{n:\"BrtBeginISXVDCols\"},312:{n:\"BrtEndISXVDCols\"},313:{n:\"BrtEndSXLocation\"},314:{n:\"BrtBeginSXLocation\"},315:{n:\"BrtEndSXView\"},316:{n:\"BrtBeginSXTHs\"},317:{n:\"BrtEndSXTHs\"},318:{n:\"BrtBeginSXTH\"},319:{n:\"BrtEndSXTH\"},320:{n:\"BrtBeginISXTHRws\"},321:{n:\"BrtEndISXTHRws\"},322:{n:\"BrtBeginISXTHCols\"},323:{n:\"BrtEndISXTHCols\"},324:{n:\"BrtBeginSXTDMPS\"},325:{n:\"BrtEndSXTDMPs\"},326:{n:\"BrtBeginSXTDMP\"},327:{n:\"BrtEndSXTDMP\"},328:{n:\"BrtBeginSXTHItems\"},329:{n:\"BrtEndSXTHItems\"},330:{n:\"BrtBeginSXTHItem\"},331:{n:\"BrtEndSXTHItem\"},332:{n:\"BrtBeginMetadata\"},333:{n:\"BrtEndMetadata\"},334:{n:\"BrtBeginEsmdtinfo\"},335:{n:\"BrtMdtinfo\"},336:{n:\"BrtEndEsmdtinfo\"},337:{n:\"BrtBeginEsmdb\"},338:{n:\"BrtEndEsmdb\"},339:{n:\"BrtBeginEsfmd\"},340:{n:\"BrtEndEsfmd\"},341:{n:\"BrtBeginSingleCells\"},342:{n:\"BrtEndSingleCells\"},343:{n:\"BrtBeginList\"},344:{n:\"BrtEndList\"},345:{n:\"BrtBeginListCols\"},346:{n:\"BrtEndListCols\"},347:{n:\"BrtBeginListCol\"},348:{n:\"BrtEndListCol\"},349:{n:\"BrtBeginListXmlCPr\"},350:{n:\"BrtEndListXmlCPr\"},351:{n:\"BrtListCCFmla\"},352:{n:\"BrtListTrFmla\"},353:{n:\"BrtBeginExternals\"},354:{n:\"BrtEndExternals\"},355:{n:\"BrtSupBookSrc\",f:pn},357:{n:\"BrtSupSelf\"},358:{n:\"BrtSupSame\"},359:{n:\"BrtSupTabs\"},360:{n:\"BrtBeginSupBook\"},361:{n:\"BrtPlaceholderName\"},362:{n:\"BrtExternSheet\",f:fi},363:{n:\"BrtExternTableStart\"},364:{n:\"BrtExternTableEnd\"},366:{n:\"BrtExternRowHdr\"},367:{n:\"BrtExternCellBlank\"},368:{n:\"BrtExternCellReal\"},369:{n:\"BrtExternCellBool\"},370:{n:\"BrtExternCellError\"},371:{n:\"BrtExternCellString\"},372:{n:\"BrtBeginEsmdx\"},373:{n:\"BrtEndEsmdx\"},374:{n:\"BrtBeginMdxSet\"},375:{n:\"BrtEndMdxSet\"},376:{n:\"BrtBeginMdxMbrProp\"},377:{n:\"BrtEndMdxMbrProp\"},378:{n:\"BrtBeginMdxKPI\"},379:{n:\"BrtEndMdxKPI\"},380:{n:\"BrtBeginEsstr\"},381:{n:\"BrtEndEsstr\"},382:{n:\"BrtBeginPRFItem\"},383:{n:\"BrtEndPRFItem\"},384:{n:\"BrtBeginPivotCacheIDs\"},385:{n:\"BrtEndPivotCacheIDs\"},386:{n:\"BrtBeginPivotCacheID\"},387:{n:\"BrtEndPivotCacheID\"},388:{n:\"BrtBeginISXVIs\"},389:{n:\"BrtEndISXVIs\"},390:{n:\"BrtBeginColInfos\"},391:{n:\"BrtEndColInfos\"},392:{n:\"BrtBeginRwBrk\"},393:{n:\"BrtEndRwBrk\"},394:{n:\"BrtBeginColBrk\"},395:{n:\"BrtEndColBrk\"},396:{n:\"BrtBrk\"},397:{n:\"BrtUserBookView\"},398:{n:\"BrtInfo\"},399:{n:\"BrtCUsr\"},400:{n:\"BrtUsr\"},401:{n:\"BrtBeginUsers\"},403:{n:\"BrtEOF\"},404:{n:\"BrtUCR\"},405:{n:\"BrtRRInsDel\"},406:{n:\"BrtRREndInsDel\"},407:{n:\"BrtRRMove\"},408:{n:\"BrtRREndMove\"},409:{n:\"BrtRRChgCell\"},410:{n:\"BrtRREndChgCell\"},411:{n:\"BrtRRHeader\"},412:{n:\"BrtRRUserView\"},413:{n:\"BrtRRRenSheet\"},414:{n:\"BrtRRInsertSh\"},415:{n:\"BrtRRDefName\"},416:{n:\"BrtRRNote\"},417:{n:\"BrtRRConflict\"},418:{n:\"BrtRRTQSIF\"},419:{n:\"BrtRRFormat\"},420:{n:\"BrtRREndFormat\"},421:{n:\"BrtRRAutoFmt\"},422:{n:\"BrtBeginUserShViews\"},423:{n:\"BrtBeginUserShView\"},424:{n:\"BrtEndUserShView\"},425:{n:\"BrtEndUserShViews\"},426:{n:\"BrtArrFmla\",f:function(e,t,n){var r=e.l+t,i=bn(e),s=e.read_shift(1),o=[i];if(o[2]=s,n.cellFormula){var a=$o(e,r-e.l,n);o[1]=a}else e.l=r;return o}},427:{n:\"BrtShrFmla\",f:function(e,t,n){var r=e.l+t,i=[vn(e,16)];if(n.cellFormula){var s=Go(e,r-e.l,n);i[1]=s,e.l=r}else e.l=r;return i}},428:{n:\"BrtTable\"},429:{n:\"BrtBeginExtConnections\"},430:{n:\"BrtEndExtConnections\"},431:{n:\"BrtBeginPCDCalcMems\"},432:{n:\"BrtEndPCDCalcMems\"},433:{n:\"BrtBeginPCDCalcMem\"},434:{n:\"BrtEndPCDCalcMem\"},435:{n:\"BrtBeginPCDHGLevels\"},436:{n:\"BrtEndPCDHGLevels\"},437:{n:\"BrtBeginPCDHGLevel\"},438:{n:\"BrtEndPCDHGLevel\"},439:{n:\"BrtBeginPCDHGLGroups\"},440:{n:\"BrtEndPCDHGLGroups\"},441:{n:\"BrtBeginPCDHGLGroup\"},442:{n:\"BrtEndPCDHGLGroup\"},443:{n:\"BrtBeginPCDHGLGMembers\"},444:{n:\"BrtEndPCDHGLGMembers\"},445:{n:\"BrtBeginPCDHGLGMember\"},446:{n:\"BrtEndPCDHGLGMember\"},447:{n:\"BrtBeginQSI\"},448:{n:\"BrtEndQSI\"},449:{n:\"BrtBeginQSIR\"},450:{n:\"BrtEndQSIR\"},451:{n:\"BrtBeginDeletedNames\"},452:{n:\"BrtEndDeletedNames\"},453:{n:\"BrtBeginDeletedName\"},454:{n:\"BrtEndDeletedName\"},455:{n:\"BrtBeginQSIFs\"},456:{n:\"BrtEndQSIFs\"},457:{n:\"BrtBeginQSIF\"},458:{n:\"BrtEndQSIF\"},459:{n:\"BrtBeginAutoSortScope\"},460:{n:\"BrtEndAutoSortScope\"},461:{n:\"BrtBeginConditionalFormatting\"},462:{n:\"BrtEndConditionalFormatting\"},463:{n:\"BrtBeginCFRule\"},464:{n:\"BrtEndCFRule\"},465:{n:\"BrtBeginIconSet\"},466:{n:\"BrtEndIconSet\"},467:{n:\"BrtBeginDatabar\"},468:{n:\"BrtEndDatabar\"},469:{n:\"BrtBeginColorScale\"},470:{n:\"BrtEndColorScale\"},471:{n:\"BrtCFVO\"},472:{n:\"BrtExternValueMeta\"},473:{n:\"BrtBeginColorPalette\"},474:{n:\"BrtEndColorPalette\"},475:{n:\"BrtIndexedColor\"},476:{n:\"BrtMargins\",f:function(e){var t={};return Ba.forEach((function(n){t[n]=An(e)})),t}},477:{n:\"BrtPrintOptions\"},478:{n:\"BrtPageSetup\"},479:{n:\"BrtBeginHeaderFooter\"},480:{n:\"BrtEndHeaderFooter\"},481:{n:\"BrtBeginSXCrtFormat\"},482:{n:\"BrtEndSXCrtFormat\"},483:{n:\"BrtBeginSXCrtFormats\"},484:{n:\"BrtEndSXCrtFormats\"},485:{n:\"BrtWsFmtInfo\",f:function(){}},486:{n:\"BrtBeginMgs\"},487:{n:\"BrtEndMGs\"},488:{n:\"BrtBeginMGMaps\"},489:{n:\"BrtEndMGMaps\"},490:{n:\"BrtBeginMG\"},491:{n:\"BrtEndMG\"},492:{n:\"BrtBeginMap\"},493:{n:\"BrtEndMap\"},494:{n:\"BrtHLink\",f:function(e,t){var n=e.l+t,r=vn(e,16),i=un(e),s=nn(e),o=nn(e),a=nn(e);e.l=n;var c={rfx:r,relId:i,loc:s,display:a};return o&&(c.Tooltip=o),c}},495:{n:\"BrtBeginDCon\"},496:{n:\"BrtEndDCon\"},497:{n:\"BrtBeginDRefs\"},498:{n:\"BrtEndDRefs\"},499:{n:\"BrtDRef\"},500:{n:\"BrtBeginScenMan\"},501:{n:\"BrtEndScenMan\"},502:{n:\"BrtBeginSct\"},503:{n:\"BrtEndSct\"},504:{n:\"BrtSlc\"},505:{n:\"BrtBeginDXFs\"},506:{n:\"BrtEndDXFs\"},507:{n:\"BrtDXF\"},508:{n:\"BrtBeginTableStyles\"},509:{n:\"BrtEndTableStyles\"},510:{n:\"BrtBeginTableStyle\"},511:{n:\"BrtEndTableStyle\"},512:{n:\"BrtTableStyleElement\"},513:{n:\"BrtTableStyleClient\"},514:{n:\"BrtBeginVolDeps\"},515:{n:\"BrtEndVolDeps\"},516:{n:\"BrtBeginVolType\"},517:{n:\"BrtEndVolType\"},518:{n:\"BrtBeginVolMain\"},519:{n:\"BrtEndVolMain\"},520:{n:\"BrtBeginVolTopic\"},521:{n:\"BrtEndVolTopic\"},522:{n:\"BrtVolSubtopic\"},523:{n:\"BrtVolRef\"},524:{n:\"BrtVolNum\"},525:{n:\"BrtVolErr\"},526:{n:\"BrtVolStr\"},527:{n:\"BrtVolBool\"},528:{n:\"BrtBeginCalcChain$\"},529:{n:\"BrtEndCalcChain$\"},530:{n:\"BrtBeginSortState\"},531:{n:\"BrtEndSortState\"},532:{n:\"BrtBeginSortCond\"},533:{n:\"BrtEndSortCond\"},534:{n:\"BrtBookProtection\"},535:{n:\"BrtSheetProtection\"},536:{n:\"BrtRangeProtection\"},537:{n:\"BrtPhoneticInfo\"},538:{n:\"BrtBeginECTxtWiz\"},539:{n:\"BrtEndECTxtWiz\"},540:{n:\"BrtBeginECTWFldInfoLst\"},541:{n:\"BrtEndECTWFldInfoLst\"},542:{n:\"BrtBeginECTwFldInfo\"},548:{n:\"BrtFileSharing\"},549:{n:\"BrtOleSize\"},550:{n:\"BrtDrawing\",f:pn},551:{n:\"BrtLegacyDrawing\"},552:{n:\"BrtLegacyDrawingHF\"},553:{n:\"BrtWebOpt\"},554:{n:\"BrtBeginWebPubItems\"},555:{n:\"BrtEndWebPubItems\"},556:{n:\"BrtBeginWebPubItem\"},557:{n:\"BrtEndWebPubItem\"},558:{n:\"BrtBeginSXCondFmt\"},559:{n:\"BrtEndSXCondFmt\"},560:{n:\"BrtBeginSXCondFmts\"},561:{n:\"BrtEndSXCondFmts\"},562:{n:\"BrtBkHim\"},564:{n:\"BrtColor\"},565:{n:\"BrtBeginIndexedColors\"},566:{n:\"BrtEndIndexedColors\"},569:{n:\"BrtBeginMRUColors\"},570:{n:\"BrtEndMRUColors\"},572:{n:\"BrtMRUColor\"},573:{n:\"BrtBeginDVals\"},574:{n:\"BrtEndDVals\"},577:{n:\"BrtSupNameStart\"},578:{n:\"BrtSupNameValueStart\"},579:{n:\"BrtSupNameValueEnd\"},580:{n:\"BrtSupNameNum\"},581:{n:\"BrtSupNameErr\"},582:{n:\"BrtSupNameSt\"},583:{n:\"BrtSupNameNil\"},584:{n:\"BrtSupNameBool\"},585:{n:\"BrtSupNameFmla\"},586:{n:\"BrtSupNameBits\"},587:{n:\"BrtSupNameEnd\"},588:{n:\"BrtEndSupBook\"},589:{n:\"BrtCellSmartTagProperty\"},590:{n:\"BrtBeginCellSmartTag\"},591:{n:\"BrtEndCellSmartTag\"},592:{n:\"BrtBeginCellSmartTags\"},593:{n:\"BrtEndCellSmartTags\"},594:{n:\"BrtBeginSmartTags\"},595:{n:\"BrtEndSmartTags\"},596:{n:\"BrtSmartTagType\"},597:{n:\"BrtBeginSmartTagTypes\"},598:{n:\"BrtEndSmartTagTypes\"},599:{n:\"BrtBeginSXFilters\"},600:{n:\"BrtEndSXFilters\"},601:{n:\"BrtBeginSXFILTER\"},602:{n:\"BrtEndSXFilter\"},603:{n:\"BrtBeginFills\"},604:{n:\"BrtEndFills\"},605:{n:\"BrtBeginCellWatches\"},606:{n:\"BrtEndCellWatches\"},607:{n:\"BrtCellWatch\"},608:{n:\"BrtBeginCRErrs\"},609:{n:\"BrtEndCRErrs\"},610:{n:\"BrtCrashRecErr\"},611:{n:\"BrtBeginFonts\"},612:{n:\"BrtEndFonts\"},613:{n:\"BrtBeginBorders\"},614:{n:\"BrtEndBorders\"},615:{n:\"BrtBeginFmts\"},616:{n:\"BrtEndFmts\"},617:{n:\"BrtBeginCellXFs\"},618:{n:\"BrtEndCellXFs\"},619:{n:\"BrtBeginStyles\"},620:{n:\"BrtEndStyles\"},625:{n:\"BrtBigName\"},626:{n:\"BrtBeginCellStyleXFs\"},627:{n:\"BrtEndCellStyleXFs\"},628:{n:\"BrtBeginComments\"},629:{n:\"BrtEndComments\"},630:{n:\"BrtBeginCommentAuthors\"},631:{n:\"BrtEndCommentAuthors\"},632:{n:\"BrtCommentAuthor\",f:zs},633:{n:\"BrtBeginCommentList\"},634:{n:\"BrtEndCommentList\"},635:{n:\"BrtBeginComment\",f:function(e){var t={};t.iauthor=e.read_shift(4);var n=vn(e,16);return t.rfx=n.s,t.ref=Kt(n.s),e.l+=16,t}},636:{n:\"BrtEndComment\"},637:{n:\"BrtCommentText\",f:an},638:{n:\"BrtBeginOleObjects\"},639:{n:\"BrtOleObject\"},640:{n:\"BrtEndOleObjects\"},641:{n:\"BrtBeginSxrules\"},642:{n:\"BrtEndSxRules\"},643:{n:\"BrtBeginActiveXControls\"},644:{n:\"BrtActiveX\"},645:{n:\"BrtEndActiveXControls\"},646:{n:\"BrtBeginPCDSDTCEMembersSortBy\"},648:{n:\"BrtBeginCellIgnoreECs\"},649:{n:\"BrtCellIgnoreEC\"},650:{n:\"BrtEndCellIgnoreECs\"},651:{n:\"BrtCsProp\",f:function(e,t){return e.l+=10,{name:nn(e)}}},652:{n:\"BrtCsPageSetup\"},653:{n:\"BrtBeginUserCsViews\"},654:{n:\"BrtEndUserCsViews\"},655:{n:\"BrtBeginUserCsView\"},656:{n:\"BrtEndUserCsView\"},657:{n:\"BrtBeginPcdSFCIEntries\"},658:{n:\"BrtEndPCDSFCIEntries\"},659:{n:\"BrtPCDSFCIEntry\"},660:{n:\"BrtBeginListParts\"},661:{n:\"BrtListPart\"},662:{n:\"BrtEndListParts\"},663:{n:\"BrtSheetCalcProp\"},664:{n:\"BrtBeginFnGroup\"},665:{n:\"BrtFnGroup\"},666:{n:\"BrtEndFnGroup\"},667:{n:\"BrtSupAddin\"},668:{n:\"BrtSXTDMPOrder\"},669:{n:\"BrtCsProtection\"},671:{n:\"BrtBeginWsSortMap\"},672:{n:\"BrtEndWsSortMap\"},673:{n:\"BrtBeginRRSort\"},674:{n:\"BrtEndRRSort\"},675:{n:\"BrtRRSortItem\"},676:{n:\"BrtFileSharingIso\"},677:{n:\"BrtBookProtectionIso\"},678:{n:\"BrtSheetProtectionIso\"},679:{n:\"BrtCsProtectionIso\"},680:{n:\"BrtRangeProtectionIso\"},1024:{n:\"BrtRwDescent\"},1025:{n:\"BrtKnownFonts\"},1026:{n:\"BrtBeginSXTupleSet\"},1027:{n:\"BrtEndSXTupleSet\"},1028:{n:\"BrtBeginSXTupleSetHeader\"},1029:{n:\"BrtEndSXTupleSetHeader\"},1030:{n:\"BrtSXTupleSetHeaderItem\"},1031:{n:\"BrtBeginSXTupleSetData\"},1032:{n:\"BrtEndSXTupleSetData\"},1033:{n:\"BrtBeginSXTupleSetRow\"},1034:{n:\"BrtEndSXTupleSetRow\"},1035:{n:\"BrtSXTupleSetRowItem\"},1036:{n:\"BrtNameExt\"},1037:{n:\"BrtPCDH14\"},1038:{n:\"BrtBeginPCDCalcMem14\"},1039:{n:\"BrtEndPCDCalcMem14\"},1040:{n:\"BrtSXTH14\"},1041:{n:\"BrtBeginSparklineGroup\"},1042:{n:\"BrtEndSparklineGroup\"},1043:{n:\"BrtSparkline\"},1044:{n:\"BrtSXDI14\"},1045:{n:\"BrtWsFmtInfoEx14\"},1046:{n:\"BrtBeginConditionalFormatting14\"},1047:{n:\"BrtEndConditionalFormatting14\"},1048:{n:\"BrtBeginCFRule14\"},1049:{n:\"BrtEndCFRule14\"},1050:{n:\"BrtCFVO14\"},1051:{n:\"BrtBeginDatabar14\"},1052:{n:\"BrtBeginIconSet14\"},1053:{n:\"BrtDVal14\"},1054:{n:\"BrtBeginDVals14\"},1055:{n:\"BrtColor14\"},1056:{n:\"BrtBeginSparklines\"},1057:{n:\"BrtEndSparklines\"},1058:{n:\"BrtBeginSparklineGroups\"},1059:{n:\"BrtEndSparklineGroups\"},1061:{n:\"BrtSXVD14\"},1062:{n:\"BrtBeginSXView14\"},1063:{n:\"BrtEndSXView14\"},1064:{n:\"BrtBeginSXView16\"},1065:{n:\"BrtEndSXView16\"},1066:{n:\"BrtBeginPCD14\"},1067:{n:\"BrtEndPCD14\"},1068:{n:\"BrtBeginExtConn14\"},1069:{n:\"BrtEndExtConn14\"},1070:{n:\"BrtBeginSlicerCacheIDs\"},1071:{n:\"BrtEndSlicerCacheIDs\"},1072:{n:\"BrtBeginSlicerCacheID\"},1073:{n:\"BrtEndSlicerCacheID\"},1075:{n:\"BrtBeginSlicerCache\"},1076:{n:\"BrtEndSlicerCache\"},1077:{n:\"BrtBeginSlicerCacheDef\"},1078:{n:\"BrtEndSlicerCacheDef\"},1079:{n:\"BrtBeginSlicersEx\"},1080:{n:\"BrtEndSlicersEx\"},1081:{n:\"BrtBeginSlicerEx\"},1082:{n:\"BrtEndSlicerEx\"},1083:{n:\"BrtBeginSlicer\"},1084:{n:\"BrtEndSlicer\"},1085:{n:\"BrtSlicerCachePivotTables\"},1086:{n:\"BrtBeginSlicerCacheOlapImpl\"},1087:{n:\"BrtEndSlicerCacheOlapImpl\"},1088:{n:\"BrtBeginSlicerCacheLevelsData\"},1089:{n:\"BrtEndSlicerCacheLevelsData\"},1090:{n:\"BrtBeginSlicerCacheLevelData\"},1091:{n:\"BrtEndSlicerCacheLevelData\"},1092:{n:\"BrtBeginSlicerCacheSiRanges\"},1093:{n:\"BrtEndSlicerCacheSiRanges\"},1094:{n:\"BrtBeginSlicerCacheSiRange\"},1095:{n:\"BrtEndSlicerCacheSiRange\"},1096:{n:\"BrtSlicerCacheOlapItem\"},1097:{n:\"BrtBeginSlicerCacheSelections\"},1098:{n:\"BrtSlicerCacheSelection\"},1099:{n:\"BrtEndSlicerCacheSelections\"},1100:{n:\"BrtBeginSlicerCacheNative\"},1101:{n:\"BrtEndSlicerCacheNative\"},1102:{n:\"BrtSlicerCacheNativeItem\"},1103:{n:\"BrtRangeProtection14\"},1104:{n:\"BrtRangeProtectionIso14\"},1105:{n:\"BrtCellIgnoreEC14\"},1111:{n:\"BrtList14\"},1112:{n:\"BrtCFIcon\"},1113:{n:\"BrtBeginSlicerCachesPivotCacheIDs\"},1114:{n:\"BrtEndSlicerCachesPivotCacheIDs\"},1115:{n:\"BrtBeginSlicers\"},1116:{n:\"BrtEndSlicers\"},1117:{n:\"BrtWbProp14\"},1118:{n:\"BrtBeginSXEdit\"},1119:{n:\"BrtEndSXEdit\"},1120:{n:\"BrtBeginSXEdits\"},1121:{n:\"BrtEndSXEdits\"},1122:{n:\"BrtBeginSXChange\"},1123:{n:\"BrtEndSXChange\"},1124:{n:\"BrtBeginSXChanges\"},1125:{n:\"BrtEndSXChanges\"},1126:{n:\"BrtSXTupleItems\"},1128:{n:\"BrtBeginSlicerStyle\"},1129:{n:\"BrtEndSlicerStyle\"},1130:{n:\"BrtSlicerStyleElement\"},1131:{n:\"BrtBeginStyleSheetExt14\"},1132:{n:\"BrtEndStyleSheetExt14\"},1133:{n:\"BrtBeginSlicerCachesPivotCacheID\"},1134:{n:\"BrtEndSlicerCachesPivotCacheID\"},1135:{n:\"BrtBeginConditionalFormattings\"},1136:{n:\"BrtEndConditionalFormattings\"},1137:{n:\"BrtBeginPCDCalcMemExt\"},1138:{n:\"BrtEndPCDCalcMemExt\"},1139:{n:\"BrtBeginPCDCalcMemsExt\"},1140:{n:\"BrtEndPCDCalcMemsExt\"},1141:{n:\"BrtPCDField14\"},1142:{n:\"BrtBeginSlicerStyles\"},1143:{n:\"BrtEndSlicerStyles\"},1144:{n:\"BrtBeginSlicerStyleElements\"},1145:{n:\"BrtEndSlicerStyleElements\"},1146:{n:\"BrtCFRuleExt\"},1147:{n:\"BrtBeginSXCondFmt14\"},1148:{n:\"BrtEndSXCondFmt14\"},1149:{n:\"BrtBeginSXCondFmts14\"},1150:{n:\"BrtEndSXCondFmts14\"},1152:{n:\"BrtBeginSortCond14\"},1153:{n:\"BrtEndSortCond14\"},1154:{n:\"BrtEndDVals14\"},1155:{n:\"BrtEndIconSet14\"},1156:{n:\"BrtEndDatabar14\"},1157:{n:\"BrtBeginColorScale14\"},1158:{n:\"BrtEndColorScale14\"},1159:{n:\"BrtBeginSxrules14\"},1160:{n:\"BrtEndSxrules14\"},1161:{n:\"BrtBeginPRule14\"},1162:{n:\"BrtEndPRule14\"},1163:{n:\"BrtBeginPRFilters14\"},1164:{n:\"BrtEndPRFilters14\"},1165:{n:\"BrtBeginPRFilter14\"},1166:{n:\"BrtEndPRFilter14\"},1167:{n:\"BrtBeginPRFItem14\"},1168:{n:\"BrtEndPRFItem14\"},1169:{n:\"BrtBeginCellIgnoreECs14\"},1170:{n:\"BrtEndCellIgnoreECs14\"},1171:{n:\"BrtDxf14\"},1172:{n:\"BrtBeginDxF14s\"},1173:{n:\"BrtEndDxf14s\"},1177:{n:\"BrtFilter14\"},1178:{n:\"BrtBeginCustomFilters14\"},1180:{n:\"BrtCustomFilter14\"},1181:{n:\"BrtIconFilter14\"},1182:{n:\"BrtPivotCacheConnectionName\"},2048:{n:\"BrtBeginDecoupledPivotCacheIDs\"},2049:{n:\"BrtEndDecoupledPivotCacheIDs\"},2050:{n:\"BrtDecoupledPivotCacheID\"},2051:{n:\"BrtBeginPivotTableRefs\"},2052:{n:\"BrtEndPivotTableRefs\"},2053:{n:\"BrtPivotTableRef\"},2054:{n:\"BrtSlicerCacheBookPivotTables\"},2055:{n:\"BrtBeginSxvcells\"},2056:{n:\"BrtEndSxvcells\"},2057:{n:\"BrtBeginSxRow\"},2058:{n:\"BrtEndSxRow\"},2060:{n:\"BrtPcdCalcMem15\"},2067:{n:\"BrtQsi15\"},2068:{n:\"BrtBeginWebExtensions\"},2069:{n:\"BrtEndWebExtensions\"},2070:{n:\"BrtWebExtension\"},2071:{n:\"BrtAbsPath15\"},2072:{n:\"BrtBeginPivotTableUISettings\"},2073:{n:\"BrtEndPivotTableUISettings\"},2075:{n:\"BrtTableSlicerCacheIDs\"},2076:{n:\"BrtTableSlicerCacheID\"},2077:{n:\"BrtBeginTableSlicerCache\"},2078:{n:\"BrtEndTableSlicerCache\"},2079:{n:\"BrtSxFilter15\"},2080:{n:\"BrtBeginTimelineCachePivotCacheIDs\"},2081:{n:\"BrtEndTimelineCachePivotCacheIDs\"},2082:{n:\"BrtTimelineCachePivotCacheID\"},2083:{n:\"BrtBeginTimelineCacheIDs\"},2084:{n:\"BrtEndTimelineCacheIDs\"},2085:{n:\"BrtBeginTimelineCacheID\"},2086:{n:\"BrtEndTimelineCacheID\"},2087:{n:\"BrtBeginTimelinesEx\"},2088:{n:\"BrtEndTimelinesEx\"},2089:{n:\"BrtBeginTimelineEx\"},2090:{n:\"BrtEndTimelineEx\"},2091:{n:\"BrtWorkBookPr15\"},2092:{n:\"BrtPCDH15\"},2093:{n:\"BrtBeginTimelineStyle\"},2094:{n:\"BrtEndTimelineStyle\"},2095:{n:\"BrtTimelineStyleElement\"},2096:{n:\"BrtBeginTimelineStylesheetExt15\"},2097:{n:\"BrtEndTimelineStylesheetExt15\"},2098:{n:\"BrtBeginTimelineStyles\"},2099:{n:\"BrtEndTimelineStyles\"},2100:{n:\"BrtBeginTimelineStyleElements\"},2101:{n:\"BrtEndTimelineStyleElements\"},2102:{n:\"BrtDxf15\"},2103:{n:\"BrtBeginDxfs15\"},2104:{n:\"brtEndDxfs15\"},2105:{n:\"BrtSlicerCacheHideItemsWithNoData\"},2106:{n:\"BrtBeginItemUniqueNames\"},2107:{n:\"BrtEndItemUniqueNames\"},2108:{n:\"BrtItemUniqueName\"},2109:{n:\"BrtBeginExtConn15\"},2110:{n:\"BrtEndExtConn15\"},2111:{n:\"BrtBeginOledbPr15\"},2112:{n:\"BrtEndOledbPr15\"},2113:{n:\"BrtBeginDataFeedPr15\"},2114:{n:\"BrtEndDataFeedPr15\"},2115:{n:\"BrtTextPr15\"},2116:{n:\"BrtRangePr15\"},2117:{n:\"BrtDbCommand15\"},2118:{n:\"BrtBeginDbTables15\"},2119:{n:\"BrtEndDbTables15\"},2120:{n:\"BrtDbTable15\"},2121:{n:\"BrtBeginDataModel\"},2122:{n:\"BrtEndDataModel\"},2123:{n:\"BrtBeginModelTables\"},2124:{n:\"BrtEndModelTables\"},2125:{n:\"BrtModelTable\"},2126:{n:\"BrtBeginModelRelationships\"},2127:{n:\"BrtEndModelRelationships\"},2128:{n:\"BrtModelRelationship\"},2129:{n:\"BrtBeginECTxtWiz15\"},2130:{n:\"BrtEndECTxtWiz15\"},2131:{n:\"BrtBeginECTWFldInfoLst15\"},2132:{n:\"BrtEndECTWFldInfoLst15\"},2133:{n:\"BrtBeginECTWFldInfo15\"},2134:{n:\"BrtFieldListActiveItem\"},2135:{n:\"BrtPivotCacheIdVersion\"},2136:{n:\"BrtSXDI15\"},2137:{n:\"BrtBeginModelTimeGroupings\"},2138:{n:\"BrtEndModelTimeGroupings\"},2139:{n:\"BrtBeginModelTimeGrouping\"},2140:{n:\"BrtEndModelTimeGrouping\"},2141:{n:\"BrtModelTimeGroupingCalcCol\"},3072:{n:\"BrtUid\"},3073:{n:\"BrtRevisionPtr\"},5095:{n:\"BrtBeginCalcFeatures\"},5096:{n:\"BrtEndCalcFeatures\"},5097:{n:\"BrtCalcFeature\"},65535:{n:\"\"}},wc=H(yc,\"n\"),Sc={3:{n:\"BIFF2NUM\",f:function(e){var t=Vr(e);++e.l;var n=An(e);return t.t=\"n\",t.val=n,t}},4:{n:\"BIFF2STR\",f:function(e,t,n){var r=Vr(e);++e.l;var i=Mr(e,0,n);return r.t=\"str\",r.val=i,r}},6:{n:\"Formula\",f:Mo},9:{n:\"BOF\",f:ei},10:{n:\"EOF\",f:kr},12:{n:\"CalcCount\",f:Rr},13:{n:\"CalcMode\",f:Rr},14:{n:\"CalcPrecision\",f:_r},15:{n:\"CalcRefMode\",f:_r},16:{n:\"CalcDelta\",f:An},17:{n:\"CalcIter\",f:_r},18:{n:\"Protect\",f:_r},19:{n:\"Password\",f:Rr},20:{n:\"Header\",f:li},21:{n:\"Footer\",f:li},23:{n:\"ExternSheet\",f:fi},24:{n:\"Lbl\",f:ui},25:{n:\"WinProtect\",f:_r},26:{n:\"VerticalPageBreaks\"},27:{n:\"HorizontalPageBreaks\"},28:{n:\"Note\",f:function(e,t,n){return function(e,t,n){if(!(n.biff<8)){var r=e.read_shift(2),i=e.read_shift(2),s=e.read_shift(2),o=e.read_shift(2),a=Mr(e,0,n);return n.biff<8&&e.read_shift(1),[{r:r,c:i},a,o,s]}}(e,0,n)}},29:{n:\"Selection\"},34:{n:\"Date1904\",f:_r},35:{n:\"ExternName\",f:hi},38:{n:\"LeftMargin\",f:An},39:{n:\"RightMargin\",f:An},40:{n:\"TopMargin\",f:An},41:{n:\"BottomMargin\",f:An},42:{n:\"PrintRowCol\",f:_r},43:{n:\"PrintGrid\",f:_r},47:{n:\"FilePass\",f:function(e,t,n){var r={Type:n.biff>=8?e.read_shift(2):0};return r.Type?function(e,t,n){var r=n||{};r.Info=e.read_shift(2),e.l-=2,r.Data=1===r.Info?function(e){var t={},n=t.EncryptionVersionInfo=Hi(e,4);if(1!=n.Major||1!=n.Minor)throw\"unrecognized version code \"+n.Major+\" : \"+n.Minor;return t.Salt=e.read_shift(16),t.EncryptedVerifier=e.read_shift(16),t.EncryptedVerifierHash=e.read_shift(16),t}(e):function(e,t){var n={},r=n.EncryptionVersionInfo=Hi(e,4);if(t-=4,2!=r.Minor)throw new Error(\"unrecognized minor version code: \"+r.Minor);if(r.Major>4||r.Major<2)throw new Error(\"unrecognized major version code: \"+r.Major);n.Flags=e.read_shift(4),t-=4;var i=e.read_shift(4);return t-=4,n.EncryptionHeader=Vi(e,i),n.EncryptionVerifier=ji(e,t-=i),n}(e,t)}(e,t-2,r):function(e,t,n,r){var i,s,o={key:Rr(e),verificationBytes:Rr(e)};n.password&&(o.verifier=Xi(n.password)),r.valid=o.verificationBytes===o.verifier,r.valid&&(r.insitu=(i=0,s=qi(n.password),function(e){var t=function(e,t,n,r,i){var s,o;for(i||(i=t),r||(r=qi(\"\")),s=0;s!=t.length;++s)o=t[s],i[s]=o=255&((o^=r[n])>>5|o<<3),++n;return[i,n,r]}(0,e,i,s);return i=t[1],t[0]}))}(e,0,n,r),r}},49:{n:\"Font\",f:function(e,t,n){var r={dyHeight:e.read_shift(2),fl:e.read_shift(2)};switch(n&&n.biff||8){case 2:break;case 3:case 4:e.l+=2;break;default:e.l+=10}return r.name=Lr(e,0,n),r}},51:{n:\"PrintSize\",f:Rr},60:{n:\"Continue\"},61:{n:\"Window1\",f:function(e){return{Pos:[e.read_shift(2),e.read_shift(2)],Dim:[e.read_shift(2),e.read_shift(2)],Flags:e.read_shift(2),CurTab:e.read_shift(2),FirstTab:e.read_shift(2),Selected:e.read_shift(2),TabRatio:e.read_shift(2)}}},64:{n:\"Backup\",f:_r},65:{n:\"Pane\"},66:{n:\"CodePage\",f:Rr},77:{n:\"Pls\"},80:{n:\"DCon\"},81:{n:\"DConRef\"},82:{n:\"DConName\"},85:{n:\"DefColWidth\",f:Rr},89:{n:\"XCT\"},90:{n:\"CRN\"},91:{n:\"FileSharing\"},92:{n:\"WriteAccess\",f:function(e,t,n){if(n.enc)return e.l+=t,\"\";var r=e.l,i=Mr(e,0,n);return e.read_shift(t+r-e.l),i}},93:{n:\"Obj\",f:function(e,t,n){return n&&n.biff<8?function(e,t,n){e.l+=4;var r=e.read_shift(2),i=e.read_shift(2),s=e.read_shift(2);e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=6;var o=[];return o.push((pi[r]||Ot)(e,t-=36,n)),{cmo:[i,r,s],ft:o}}(e,t,n):{cmo:Jr(e),ft:function(e,t){for(var n=e.l+t,r=[];e.l<n;){var i=e.read_shift(2);e.l-=2;try{r.push(qr[i](e,n-e.l))}catch(El){return e.l=n,r}}return e.l!=n&&(e.l=n),r}(e,t-22)}}},94:{n:\"Uncalced\"},95:{n:\"CalcSaveRecalc\",f:_r},96:{n:\"Template\"},97:{n:\"Intl\"},99:{n:\"ObjProtect\",f:_r},125:{n:\"ColInfo\",f:bi},128:{n:\"Guts\",f:function(e){e.l+=4;var t=[e.read_shift(2),e.read_shift(2)];if(0!==t[0]&&t[0]--,0!==t[1]&&t[1]--,t[0]>7||t[1]>7)throw new Error(\"Bad Gutters: \"+t.join(\"|\"));return t}},129:{n:\"WsBool\",f:function(e,t,n){return{fDialog:16&(n&&8==n.biff||2==t?e.read_shift(2):(e.l+=t,0))}}},130:{n:\"GridSet\",f:Rr},131:{n:\"HCenter\",f:_r},132:{n:\"VCenter\",f:_r},133:{n:\"BoundSheet8\",f:function(e,t,n){var r=e.read_shift(4),i=3&e.read_shift(1),s=e.read_shift(1);switch(s){case 0:s=\"Worksheet\";break;case 1:s=\"Macrosheet\";break;case 2:s=\"Chartsheet\";break;case 6:s=\"VBAModule\"}var o=Lr(e,0,n);return 0===o.length&&(o=\"Sheet1\"),{pos:r,hs:i,dt:s,name:o}}},134:{n:\"WriteProtect\"},140:{n:\"Country\",f:function(e){var t,n=[0,0];return t=e.read_shift(2),n[0]=Fn[t]||t,t=e.read_shift(2),n[1]=Fn[t]||t,n}},141:{n:\"HideObj\",f:Rr},144:{n:\"Sort\"},146:{n:\"Palette\",f:function(e){for(var t=e.read_shift(2),n=[];t-- >0;)n.push(Gr(e));return n}},151:{n:\"Sync\"},152:{n:\"LPr\"},153:{n:\"DxGCol\"},154:{n:\"FnGroupName\"},155:{n:\"FilterMode\"},156:{n:\"BuiltInFnGroupCount\",f:Rr},157:{n:\"AutoFilterInfo\"},158:{n:\"AutoFilter\"},160:{n:\"Scl\",f:Ii},161:{n:\"Setup\",f:function(e,t){var n={};return t<32||(e.l+=16,n.header=An(e),n.footer=An(e),e.l+=2),n}},174:{n:\"ScenMan\"},175:{n:\"SCENARIO\"},176:{n:\"SxView\"},177:{n:\"Sxvd\"},178:{n:\"SXVI\"},180:{n:\"SxIvd\"},181:{n:\"SXLI\"},182:{n:\"SXPI\"},184:{n:\"DocRoute\"},185:{n:\"RecipName\"},189:{n:\"MulRk\",f:function(e,t){for(var n=e.l+t-2,r=e.read_shift(2),i=e.read_shift(2),s=[];e.l<n;)s.push(zr(e));if(e.l!==n)throw new Error(\"MulRK read error\");var o=e.read_shift(2);if(s.length!=o-i+1)throw new Error(\"MulRK length mismatch\");return{r:r,c:i,C:o,rkrec:s}}},190:{n:\"MulBlank\",f:function(e,t){for(var n=e.l+t-2,r=e.read_shift(2),i=e.read_shift(2),s=[];e.l<n;)s.push(e.read_shift(2));if(e.l!==n)throw new Error(\"MulBlank read error\");var o=e.read_shift(2);if(s.length!=o-i+1)throw new Error(\"MulBlank length mismatch\");return{r:r,c:i,C:o,ixfe:s}}},193:{n:\"Mms\",f:kr},197:{n:\"SXDI\"},198:{n:\"SXDB\"},199:{n:\"SXFDB\"},200:{n:\"SXDBB\"},201:{n:\"SXNum\"},202:{n:\"SxBool\",f:_r},203:{n:\"SxErr\"},204:{n:\"SXInt\"},205:{n:\"SXString\"},206:{n:\"SXDtr\"},207:{n:\"SxNil\"},208:{n:\"SXTbl\"},209:{n:\"SXTBRGIITM\"},210:{n:\"SxTbpg\"},211:{n:\"ObProj\"},213:{n:\"SXStreamID\"},215:{n:\"DBCell\"},216:{n:\"SXRng\"},217:{n:\"SxIsxoper\"},218:{n:\"BookBool\",f:Rr},220:{n:\"DbOrParamQry\"},221:{n:\"ScenarioProtect\",f:_r},222:{n:\"OleObjectSize\"},224:{n:\"XF\",f:function(e,t,n){var r={};return r.ifnt=e.read_shift(2),r.numFmtId=e.read_shift(2),r.flags=e.read_shift(2),r.fStyle=r.flags>>2&1,r.data=function(e,t,n,r){var i={},s=e.read_shift(4),o=e.read_shift(4),a=e.read_shift(4),c=e.read_shift(2);return i.patternType=Nn[a>>26],r.cellStyles?(i.alc=7&s,i.fWrap=s>>3&1,i.alcV=s>>4&7,i.fJustLast=s>>7&1,i.trot=s>>8&255,i.cIndent=s>>16&15,i.fShrinkToFit=s>>20&1,i.iReadOrder=s>>22&2,i.fAtrNum=s>>26&1,i.fAtrFnt=s>>27&1,i.fAtrAlc=s>>28&1,i.fAtrBdr=s>>29&1,i.fAtrPat=s>>30&1,i.fAtrProt=s>>31&1,i.dgLeft=15&o,i.dgRight=o>>4&15,i.dgTop=o>>8&15,i.dgBottom=o>>12&15,i.icvLeft=o>>16&127,i.icvRight=o>>23&127,i.grbitDiag=o>>30&3,i.icvTop=127&a,i.icvBottom=a>>7&127,i.icvDiag=a>>14&127,i.dgDiag=a>>21&15,i.icvFore=127&c,i.icvBack=c>>7&127,i.fsxButton=c>>14&1,i):i}(e,0,0,n),r}},225:{n:\"InterfaceHdr\",f:function(e,t){return 0===t||e.read_shift(2),1200}},226:{n:\"InterfaceEnd\",f:kr},227:{n:\"SXVS\"},229:{n:\"MergeCells\",f:function(e,t){for(var n=[],r=e.read_shift(2);r--;)n.push(Kr(e));return n}},233:{n:\"BkHim\"},235:{n:\"MsoDrawingGroup\"},236:{n:\"MsoDrawing\"},237:{n:\"MsoDrawingSelection\"},239:{n:\"PhoneticInfo\"},240:{n:\"SxRule\"},241:{n:\"SXEx\"},242:{n:\"SxFilt\"},244:{n:\"SxDXF\"},245:{n:\"SxItm\"},246:{n:\"SxName\"},247:{n:\"SxSelect\"},248:{n:\"SXPair\"},249:{n:\"SxFmla\"},251:{n:\"SxFormat\"},252:{n:\"SST\",f:function(e,t){for(var n=e.l+t,r=e.read_shift(4),i=e.read_shift(4),s=[],o=0;o!=i&&e.l<n;++o)s.push(Pr(e));return s.Count=r,s.Unique=i,s}},253:{n:\"LabelSst\",f:function(e){var t=Vr(e);return t.isst=e.read_shift(4),t}},255:{n:\"ExtSST\",f:function(e,t){var n={};return n.dsst=e.read_shift(2),e.l+=t-2,n}},256:{n:\"SXVDEx\"},259:{n:\"SXFormula\"},290:{n:\"SXDBEx\"},311:{n:\"RRDInsDel\"},312:{n:\"RRDHead\"},315:{n:\"RRDChgCell\"},317:{n:\"RRTabId\",f:Or},318:{n:\"RRDRenSheet\"},319:{n:\"RRSort\"},320:{n:\"RRDMove\"},330:{n:\"RRFormat\"},331:{n:\"RRAutoFmt\"},333:{n:\"RRInsertSh\"},334:{n:\"RRDMoveBegin\"},335:{n:\"RRDMoveEnd\"},336:{n:\"RRDInsDelBegin\"},337:{n:\"RRDInsDelEnd\"},338:{n:\"RRDConflict\"},339:{n:\"RRDDefName\"},340:{n:\"RRDRstEtxp\"},351:{n:\"LRng\"},352:{n:\"UsesELFs\",f:_r},353:{n:\"DSF\",f:kr},401:{n:\"CUsr\"},402:{n:\"CbUsr\"},403:{n:\"UsrInfo\"},404:{n:\"UsrExcl\"},405:{n:\"FileLock\"},406:{n:\"RRDInfo\"},407:{n:\"BCUsrs\"},408:{n:\"UsrChk\"},425:{n:\"UserBView\"},426:{n:\"UserSViewBegin\"},427:{n:\"UserSViewEnd\"},428:{n:\"RRDUserView\"},429:{n:\"Qsi\"},430:{n:\"SupBook\",f:function(e,t,n){var r=e.l+t,i=e.read_shift(2),s=e.read_shift(2);if(n.sbcch=s,1025==s||14849==s)return[s,i];if(s<1||s>255)throw new Error(\"Unexpected SupBook type: \"+s);for(var o=Fr(e,s),a=[];r>e.l;)a.push(Nr(e));return[s,i,o,a]}},431:{n:\"Prot4Rev\",f:_r},432:{n:\"CondFmt\"},433:{n:\"CF\"},434:{n:\"DVal\"},437:{n:\"DConBin\"},438:{n:\"TxO\",f:function(e,t,n){var r=e.l,i=\"\";try{e.l+=4,-1==[0,5,7,11,12,14].indexOf((n.lastobj||{cmo:[0,0]}).cmo[1])?e.l+=6:function(e){e.read_shift(1);e.l++;e.read_shift(2);e.l+=2}(e);var s=e.read_shift(2);e.read_shift(2),Rr(e);var o=e.read_shift(2);e.l+=o;for(var a=1;a<e.lens.length-1;++a){if(e.l-r!=e.lens[a])throw new Error(\"TxO: bad continue record\");var c=e[e.l];if((i+=Fr(e,e.lens[a+1]-e.lens[a]-1)).length>=(c?s:2*s))break}if(i.length!==s&&i.length!==2*s)throw new Error(\"cchText: \"+s+\" != \"+i.length);return e.l=r+t,{t:i}}catch(El){return e.l=r+t,{t:i}}}},439:{n:\"RefreshAll\",f:_r},440:{n:\"HLink\",f:function(e,t){var n=Kr(e);return e.l+=16,[n,function(e,t){var n=e.l+t,r=e.read_shift(4);if(2!==r)throw new Error(\"Unrecognized streamVersion: \"+r);var i=e.read_shift(2);e.l+=2;var s,o,a,c,l,h,d=\"\";16&i&&(s=$r(e)),128&i&&(o=$r(e)),257==(257&i)&&(a=$r(e)),1==(257&i)&&(c=function(e,t){var n=e.read_shift(16);switch(n){case\"e0c9ea79f9bace118c8200aa004ba90b\":return function(e){var t=e.read_shift(4),n=e.l,r=!1;t>24&&(e.l+=t-24,\"795881f43b1d7f48af2c825dc4852763\"===e.read_shift(16)&&(r=!0),e.l=n);var i=e.read_shift((r?t-24:t)>>1,\"utf16le\").replace(k,\"\");return r&&(e.l+=24),i}(e);case\"0303000000000000c000000000000046\":return function(e){e.l+=2;var t=e.read_shift(0,\"lpstr-ansi\");if(e.l+=2,57005!=e.read_shift(2))throw new Error(\"Bad FileMoniker\");if(0===e.read_shift(4))return t.replace(/\\\\/g,\"/\");var n=e.read_shift(4);if(3!=e.read_shift(2))throw new Error(\"Bad FileMoniker\");return e.read_shift(n>>1,\"utf16le\").replace(k,\"\")}(e);default:throw new Error(\"Unsupported Moniker \"+n)}}(e)),8&i&&(d=$r(e)),32&i&&(l=e.read_shift(16)),64&i&&(h=dr(e)),e.l=n;var u=o||a||c||\"\";u&&d&&(u+=\"#\"+d),u||(u=\"#\"+d);var f={Target:u};return l&&(f.guid=l),h&&(f.time=h),s&&(f.Tooltip=s),f}(e,t-24)]}},441:{n:\"Lel\"},442:{n:\"CodeName\",f:Nr},443:{n:\"SXFDBType\"},444:{n:\"Prot4RevPass\",f:Rr},445:{n:\"ObNoMacros\"},446:{n:\"Dv\"},448:{n:\"Excel9File\",f:kr},449:{n:\"RecalcId\",f:function(e){return e.read_shift(2),e.read_shift(4)},r:2},450:{n:\"EntExU2\",f:kr},512:{n:\"Dimensions\",f:oi},513:{n:\"Blank\",f:vi},515:{n:\"Number\",f:function(e){var t=Vr(e),n=An(e);return t.val=n,t}},516:{n:\"Label\",f:function(e,t,n){var r=Vr(e);2==n.biff&&e.l++;var i=Nr(e,0,n);return r.val=i,r}},517:{n:\"BoolErr\",f:ci},518:{n:\"Formula\",f:Mo},519:{n:\"String\",f:Ai},520:{n:\"Row\",f:function(e){var t={};t.r=e.read_shift(2),t.c=e.read_shift(2),t.cnt=e.read_shift(2)-t.c;var n=e.read_shift(2);e.l+=4;var r=e.read_shift(1);return e.l+=3,7&r&&(t.level=7&r),32&r&&(t.hidden=!0),64&r&&(t.hpt=n/20),t}},523:{n:\"Index\"},545:{n:\"Array\",f:gi},549:{n:\"DefaultRowHeight\",f:ri},566:{n:\"Table\"},574:{n:\"Window2\",f:function(e,t,n){return n&&n.biff>=2&&n.biff<8?{}:{RTL:64&e.read_shift(2)}}},638:{n:\"RK\",f:function(e){var t=e.read_shift(2),n=e.read_shift(2),r=zr(e);return{r:t,c:n,ixfe:r[0],rknum:r[1]}}},659:{n:\"Style\"},1030:{n:\"Formula\",f:Mo},1048:{n:\"BigName\"},1054:{n:\"Format\",f:function(e,t,n){return[e.read_shift(2),Mr(e,0,n)]}},1084:{n:\"ContinueBigName\"},1212:{n:\"ShrFmla\",f:function(e,t,n){var r=Ur(e);e.l++;var i=e.read_shift(1);return[No(e,t-=8,n),i,r]}},2048:{n:\"HLinkTooltip\",f:function(e,t){e.read_shift(2);var n=Kr(e),r=e.read_shift((t-10)/2,\"dbcs-cont\");return[n,r=r.replace(k,\"\")]}},2049:{n:\"WebPub\"},2050:{n:\"QsiSXTag\"},2051:{n:\"DBQueryExt\"},2052:{n:\"ExtString\"},2053:{n:\"TxtQry\"},2054:{n:\"Qsir\"},2055:{n:\"Qsif\"},2056:{n:\"RRDTQSIF\"},2057:{n:\"BOF\",f:ei},2058:{n:\"OleDbConn\"},2059:{n:\"WOpt\"},2060:{n:\"SXViewEx\"},2061:{n:\"SXTH\"},2062:{n:\"SXPIEx\"},2063:{n:\"SXVDTEx\"},2064:{n:\"SXViewEx9\"},2066:{n:\"ContinueFrt\"},2067:{n:\"RealTimeData\"},2128:{n:\"ChartFrtInfo\"},2129:{n:\"FrtWrapper\"},2130:{n:\"StartBlock\"},2131:{n:\"EndBlock\"},2132:{n:\"StartObject\"},2133:{n:\"EndObject\"},2134:{n:\"CatLab\"},2135:{n:\"YMult\"},2136:{n:\"SXViewLink\"},2137:{n:\"PivotChartBits\"},2138:{n:\"FrtFontList\"},2146:{n:\"SheetExt\"},2147:{n:\"BookExt\",r:12},2148:{n:\"SXAddl\"},2149:{n:\"CrErr\"},2150:{n:\"HFPicture\"},2151:{n:\"FeatHdr\",f:kr},2152:{n:\"Feat\"},2154:{n:\"DataLabExt\"},2155:{n:\"DataLabExtContents\"},2156:{n:\"CellWatch\"},2161:{n:\"FeatHdr11\"},2162:{n:\"Feature11\"},2164:{n:\"DropDownObjIds\"},2165:{n:\"ContinueFrt11\"},2166:{n:\"DConn\"},2167:{n:\"List12\"},2168:{n:\"Feature12\"},2169:{n:\"CondFmt12\"},2170:{n:\"CF12\"},2171:{n:\"CFEx\"},2172:{n:\"XFCRC\",f:function(e){e.l+=2;var t={cxfs:0,crc:0};return t.cxfs=e.read_shift(2),t.crc=e.read_shift(4),t},r:12},2173:{n:\"XFExt\",f:function(e,t){e.l+=2;var n=e.read_shift(2);e.l+=2;for(var r=e.read_shift(2),i=[];r-- >0;)i.push(Ws(e));return{ixfe:n,ext:i}},r:12},2174:{n:\"AutoFilter12\"},2175:{n:\"ContinueFrt12\"},2180:{n:\"MDTInfo\"},2181:{n:\"MDXStr\"},2182:{n:\"MDXTuple\"},2183:{n:\"MDXSet\"},2184:{n:\"MDXProp\"},2185:{n:\"MDXKPI\"},2186:{n:\"MDB\"},2187:{n:\"PLV\"},2188:{n:\"Compat12\",f:_r,r:12},2189:{n:\"DXF\"},2190:{n:\"TableStyles\",r:12},2191:{n:\"TableStyle\"},2192:{n:\"TableStyleElement\"},2194:{n:\"StyleExt\"},2195:{n:\"NamePublish\"},2196:{n:\"NameCmt\",f:function(e,t,n){if(!(n.biff<8)){var r=e.read_shift(2),i=e.read_shift(2);return[Fr(e,r,n),Fr(e,i,n)]}e.l+=t},r:12},2197:{n:\"SortData\"},2198:{n:\"Theme\",f:function(e,t,n){var r=e.l+t;if(124226!==e.read_shift(4))if(n.cellStyles&&re){var i,s=e.slice(e.l);e.l=r;try{i=new re(s)}catch(El){return}var o=le(i,\"theme/theme/theme1.xml\",!0);if(o)return Ds(o,n)}else e.l=r},r:12},2199:{n:\"GUIDTypeLib\"},2200:{n:\"FnGrp12\"},2201:{n:\"NameFnGrp12\"},2202:{n:\"MTRSettings\",f:function(e){return[0!==e.read_shift(4),0!==e.read_shift(4),e.read_shift(4)]},r:12},2203:{n:\"CompressPictures\",f:kr},2204:{n:\"HeaderFooter\"},2205:{n:\"CrtLayout12\"},2206:{n:\"CrtMlFrt\"},2207:{n:\"CrtMlFrtContinue\"},2211:{n:\"ForceFullCalculation\",f:function(e){var t=function(e){var t=e.read_shift(2),n=e.read_shift(2);return e.l+=8,{type:t,flags:n}}(e);if(2211!=t.type)throw new Error(\"Invalid Future Record \"+t.type);return 0!==e.read_shift(4)}},2212:{n:\"ShapePropsStream\"},2213:{n:\"TextPropsStream\"},2214:{n:\"RichTextStream\"},2215:{n:\"CrtLayout12A\"},4097:{n:\"Units\"},4098:{n:\"Chart\"},4099:{n:\"Series\"},4102:{n:\"DataFormat\"},4103:{n:\"LineFormat\"},4105:{n:\"MarkerFormat\"},4106:{n:\"AreaFormat\"},4107:{n:\"PieFormat\"},4108:{n:\"AttachedLabel\"},4109:{n:\"SeriesText\"},4116:{n:\"ChartFormat\"},4117:{n:\"Legend\"},4118:{n:\"SeriesList\"},4119:{n:\"Bar\"},4120:{n:\"Line\"},4121:{n:\"Pie\"},4122:{n:\"Area\"},4123:{n:\"Scatter\"},4124:{n:\"CrtLine\"},4125:{n:\"Axis\"},4126:{n:\"Tick\"},4127:{n:\"ValueRange\"},4128:{n:\"CatSerRange\"},4129:{n:\"AxisLine\"},4130:{n:\"CrtLink\"},4132:{n:\"DefaultText\"},4133:{n:\"Text\"},4134:{n:\"FontX\",f:Rr},4135:{n:\"ObjectLink\"},4146:{n:\"Frame\"},4147:{n:\"Begin\"},4148:{n:\"End\"},4149:{n:\"PlotArea\"},4154:{n:\"Chart3d\"},4156:{n:\"PicF\"},4157:{n:\"DropBar\"},4158:{n:\"Radar\"},4159:{n:\"Surf\"},4160:{n:\"RadarArea\"},4161:{n:\"AxisParent\"},4163:{n:\"LegendException\"},4164:{n:\"ShtProps\",f:function(e,t,n){var r={area:!1};if(5!=n.biff)return e.l+=t,r;var i=e.read_shift(1);return e.l+=3,16&i&&(r.area=!0),r}},4165:{n:\"SerToCrt\"},4166:{n:\"AxesUsed\"},4168:{n:\"SBaseRef\"},4170:{n:\"SerParent\"},4171:{n:\"SerAuxTrend\"},4174:{n:\"IFmtRecord\"},4175:{n:\"Pos\"},4176:{n:\"AlRuns\"},4177:{n:\"BRAI\"},4187:{n:\"SerAuxErrBar\"},4188:{n:\"ClrtClient\",f:function(e){for(var t=e.read_shift(2),n=[];t-- >0;)n.push(Gr(e));return n}},4189:{n:\"SerFmt\"},4191:{n:\"Chart3DBarShape\"},4192:{n:\"Fbi\"},4193:{n:\"BopPop\"},4194:{n:\"AxcExt\"},4195:{n:\"Dat\"},4196:{n:\"PlotGrowth\"},4197:{n:\"SIIndex\"},4198:{n:\"GelFrame\"},4199:{n:\"BopPopCustom\"},4200:{n:\"Fbi2\"},0:{n:\"Dimensions\",f:oi},2:{n:\"BIFF2INT\",f:function(e){var t=Vr(e);++e.l;var n=e.read_shift(2);return t.t=\"n\",t.val=n,t}},5:{n:\"BoolErr\",f:ci},7:{n:\"String\",f:function(e){var t=e.read_shift(1);return 0===t?(e.l++,\"\"):e.read_shift(t,\"sbcs-cont\")}},8:{n:\"BIFF2ROW\"},11:{n:\"Index\"},22:{n:\"ExternCount\",f:Rr},30:{n:\"BIFF2FORMAT\",f:si},31:{n:\"BIFF2FMTCNT\"},32:{n:\"BIFF2COLINFO\"},33:{n:\"Array\",f:gi},37:{n:\"DefaultRowHeight\",f:ri},50:{n:\"BIFF2FONTXTRA\",f:function(e,t){e.l+=6,e.l+=2,e.l+=1,e.l+=3,e.l+=1,e.l+=t-13}},52:{n:\"DDEObjName\"},62:{n:\"BIFF2WINDOW2\"},67:{n:\"BIFF2XF\"},69:{n:\"BIFF2FONTCLR\"},86:{n:\"BIFF4FMTCNT\"},126:{n:\"RK\"},127:{n:\"ImData\",f:function(e){var t=e.read_shift(2),n=e.read_shift(2),r=e.read_shift(4),i={fmt:t,env:n,len:r,data:e.slice(e.l,e.l+r)};return e.l+=r,i}},135:{n:\"Addin\"},136:{n:\"Edg\"},137:{n:\"Pub\"},145:{n:\"Sub\"},148:{n:\"LHRecord\"},149:{n:\"LHNGraph\"},150:{n:\"Sound\"},169:{n:\"CoordList\"},171:{n:\"GCW\"},188:{n:\"ShrFmla\"},191:{n:\"ToolbarHdr\"},192:{n:\"ToolbarEnd\"},194:{n:\"AddMenu\"},195:{n:\"DelMenu\"},214:{n:\"RString\",f:function(e,t,n){var r=e.l+t,i=Vr(e),s=e.read_shift(2),o=Fr(e,s,n);return e.l=r,i.t=\"str\",i.val=o,i}},223:{n:\"UDDesc\"},234:{n:\"TabIdConf\"},354:{n:\"XL5Modify\"},421:{n:\"FileSharing2\"},521:{n:\"BOF\",f:ei},536:{n:\"Lbl\",f:ui},547:{n:\"ExternName\",f:hi},561:{n:\"Font\"},579:{n:\"BIFF3XF\"},1033:{n:\"BOF\",f:ei},1091:{n:\"BIFF4XF\"},2157:{n:\"FeatInfo\"},2163:{n:\"FeatInfo11\"},2177:{n:\"SXAddl12\"},2240:{n:\"AutoWebPub\"},2241:{n:\"ListObj\"},2242:{n:\"ListField\"},2243:{n:\"ListDV\"},2244:{n:\"ListCondFmt\"},2245:{n:\"ListCF\"},2246:{n:\"FMQry\"},2247:{n:\"FMSQry\"},2248:{n:\"PLV\"},2249:{n:\"LnExt\"},2250:{n:\"MkrExt\"},2251:{n:\"CrtCoopt\"},2262:{n:\"FRTArchId$\",r:12},29282:{}},xc=H(Sc,\"n\");function Ec(e,t,n,r){var i=+t||+xc[t];if(!isNaN(i)){var s=r||(n||[]).length||0,o=e.next(4);o.write_shift(2,i),o.write_shift(2,s),s>0&&It(n)&&e.push(n)}}function kc(e,t,n){return e||(e=Lt(7)),e.write_shift(2,t),e.write_shift(2,n),e.write_shift(2,0),e.write_shift(1,0),e}function _c(e,t,n,r){if(null!=t.v)switch(t.t){case\"d\":case\"n\":var i=\"d\"==t.t?z(J(t.v)):t.v;return void(i==(0|i)&&i>=0&&i<65536?Ec(e,2,(s=n,o=r,a=i,c=Lt(9),kc(c,s,o),c.write_shift(2,a),c)):Ec(e,3,function(e,t,n){var r=Lt(15);return kc(r,e,t),r.write_shift(8,n,\"f\"),r}(n,r,i)));case\"b\":case\"e\":return void Ec(e,5,function(e,t,n,r){var i=Lt(9);return kc(i,e,t),\"e\"==r?(i.write_shift(1,n),i.write_shift(1,1)):(i.write_shift(1,n?1:0),i.write_shift(1,0)),i}(n,r,t.v,t.t));case\"s\":case\"str\":return void Ec(e,4,function(e,t,n){var r=Lt(8+2*n.length);return kc(r,e,t),r.write_shift(1,n.length),r.write_shift(n.length,n,\"sbcs\"),r.l<r.length?r.slice(0,r.l):r}(n,r,t.v))}var s,o,a,c;Ec(e,1,kc(null,n,r))}function Tc(e,t,n,r,i){var s=16+ta(i.cellXfs,t,i);if(null!=t.v)switch(t.t){case\"d\":case\"n\":return void Ec(e,\"Number\",function(e,t,n,r){var i=Lt(14);return jr(e,t,r,i),yn(n,i),i}(n,r,\"d\"==t.t?z(J(t.v)):t.v,s));case\"b\":case\"e\":return void Ec(e,517,function(e,t,n,r,i,s){var o=Lt(8);return jr(e,t,r,o),function(e,t,n){n||(n=Lt(2)),n.write_shift(1,+e),n.write_shift(1,\"e\"==t?1:0)}(n,s,o),o}(n,r,t.v,s,0,t.t));case\"s\":case\"str\":return void Ec(e,\"Label\",function(e,t,n,r,i){var s=!i||8==i.biff,o=Lt(+s+8+(1+s)*n.length);return jr(e,t,r,o),o.write_shift(2,n.length),s&&o.write_shift(1,1),o.write_shift((1+s)*n.length,n,s?\"utf16le\":\"sbcs\"),o}(n,r,t.v,s,i))}Ec(e,\"Blank\",jr(n,r,s))}function Rc(e,t,n){var r,i=Ft(),s=n.SheetNames[e],o=n.Sheets[s]||{},a=(n||{}).Workbook||{},c=(a.Sheets||[])[e]||{},l=Array.isArray(o),h=8==t.biff,d=\"\",u=[],f=Yt(o[\"!ref\"]||\"A1\"),g=h?65536:16384;if(f.e.c>255||f.e.r>=g){if(t.WTF)throw new Error(\"Range \"+(o[\"!ref\"]||\"A1\")+\" exceeds format limit A1:IV16384\");f.e.c=Math.min(f.e.c,255),f.e.r=Math.min(f.e.c,g-1)}Ec(i,2057,ti(0,16,t)),Ec(i,\"CalcMode\",Br(1)),Ec(i,\"CalcCount\",Br(100)),Ec(i,\"CalcRefMode\",Tr(!0)),Ec(i,\"CalcIter\",Tr(!1)),Ec(i,\"CalcDelta\",yn(.001)),Ec(i,\"CalcSaveRecalc\",Tr(!0)),Ec(i,\"PrintRowCol\",Tr(!1)),Ec(i,\"PrintGrid\",Tr(!1)),Ec(i,\"GridSet\",Br(1)),Ec(i,\"Guts\",function(e){var t=Lt(8);return t.write_shift(4,0),t.write_shift(2,e[0]?e[0]+1:0),t.write_shift(2,e[1]?e[1]+1:0),t}([0,0])),Ec(i,\"HCenter\",Tr(!1)),Ec(i,\"VCenter\",Tr(!1)),Ec(i,512,function(e,t){var n=8!=t.biff&&t.biff?2:4,r=Lt(2*n+6);return r.write_shift(n,e.s.r),r.write_shift(n,e.e.r+1),r.write_shift(2,e.s.c),r.write_shift(2,e.e.c+1),r.write_shift(2,0),r}(f,t)),h&&(o[\"!links\"]=[]);for(var p=f.s.r;p<=f.e.r;++p){d=Gt(p);for(var m=f.s.c;m<=f.e.c;++m){p===f.s.r&&(u[m]=jt(m)),r=u[m]+d;var C=l?(o[p]||[])[m]:o[r];C&&(Tc(i,C,p,m,t),h&&C.l&&o[\"!links\"].push([r,C.l]))}}var b=c.CodeName||c.name||s;return h&&a.Views&&Ec(i,\"Window2\",function(e){var t=Lt(18),n=1718;return e&&e.RTL&&(n|=64),t.write_shift(2,n),t.write_shift(4,0),t.write_shift(4,64),t.write_shift(4,0),t.write_shift(4,0),t}(a.Views[0])),h&&(o[\"!merges\"]||[]).length&&Ec(i,\"MergeCells\",function(e){var t=Lt(2+8*e.length);t.write_shift(2,e.length);for(var n=0;n<e.length;++n)Xr(e[n],t);return t}(o[\"!merges\"])),h&&function(e,t){for(var n=0;n<t[\"!links\"].length;++n){var r=t[\"!links\"][n];Ec(e,\"HLink\",mi(r)),r[1].Tooltip&&Ec(e,\"HLinkTooltip\",Ci(r))}delete t[\"!links\"]}(i,o),Ec(i,\"CodeName\",Dr(b)),h&&function(e,t){var n=Lt(19);n.write_shift(4,2151),n.write_shift(4,0),n.write_shift(4,0),n.write_shift(2,3),n.write_shift(1,1),n.write_shift(4,0),Ec(e,\"FeatHdr\",n),(n=Lt(39)).write_shift(4,2152),n.write_shift(4,0),n.write_shift(4,0),n.write_shift(2,3),n.write_shift(1,0),n.write_shift(4,0),n.write_shift(2,1),n.write_shift(4,4),n.write_shift(2,0),Xr(Yt(t[\"!ref\"]||\"A1\"),n),n.write_shift(4,4),Ec(e,\"Feat\",n)}(i,o),Ec(i,\"EOF\"),i.end()}function Bc(e,t){var n=t||{};switch(n.biff||2){case 8:case 5:return function(e,t){var n=t||{},r=[];e&&!e.SSF&&(e.SSF=T.get_table()),e&&e.SSF&&(R(T),T.load_table(e.SSF),n.revssf=V(e.SSF),n.revssf[e.SSF[65535]]=0,n.ssf=e.SSF),n.cellXfs=[],n.Strings=[],n.Strings.Count=0,n.Strings.Unique=0,ta(n.cellXfs,{},{revssf:{General:0}});for(var i=0;i<e.SheetNames.length;++i)r[r.length]=Rc(i,n,e);return r.unshift(function(e,t,n){var r=Ft(),i=(e||{}).Workbook||{},s=i.Sheets||[],o=i.WBProps||{},a=8==n.biff,c=5==n.biff;Ec(r,2057,ti(0,5,n)),\"xla\"==n.bookType&&Ec(r,\"Addin\"),Ec(r,\"InterfaceHdr\",a?Br(1200):null),Ec(r,\"Mms\",function(e,t){t||(t=Lt(2));for(var n=0;n<2;++n)t.write_shift(1,0);return t}()),c&&Ec(r,\"ToolbarHdr\"),c&&Ec(r,\"ToolbarEnd\"),Ec(r,\"InterfaceEnd\"),Ec(r,\"WriteAccess\",function(e,t){var n=!t||8==t.biff,r=Lt(n?112:54);for(r.write_shift(8==t.biff?2:1,7),n&&r.write_shift(1,0),r.write_shift(4,859007059),r.write_shift(4,5458548|(n?0:536870912));r.l<r.length;)r.write_shift(1,n?0:32);return r}(0,n)),Ec(r,\"CodePage\",Br(a?1200:1252)),a&&Ec(r,\"DSF\",Br(0)),a&&Ec(r,\"Excel9File\"),Ec(r,\"RRTabId\",function(e){for(var t=Lt(2*e),n=0;n<e;++n)t.write_shift(2,n+1);return t}(e.SheetNames.length)),a&&e.vbaraw&&(Ec(r,\"ObProj\"),Ec(r,\"CodeName\",Dr(o.CodeName||\"ThisWorkbook\"))),Ec(r,\"BuiltInFnGroupCount\",Br(17)),Ec(r,\"WinProtect\",Tr(!1)),Ec(r,\"Protect\",Tr(!1)),Ec(r,\"Password\",Br(0)),a&&Ec(r,\"Prot4Rev\",Tr(!1)),a&&Ec(r,\"Prot4RevPass\",Br(0)),Ec(r,\"Window1\",function(){var e=Lt(18);return e.write_shift(2,0),e.write_shift(2,0),e.write_shift(2,29280),e.write_shift(2,17600),e.write_shift(2,56),e.write_shift(2,0),e.write_shift(2,0),e.write_shift(2,1),e.write_shift(2,500),e}()),Ec(r,\"Backup\",Tr(!1)),Ec(r,\"HideObj\",Br(0)),Ec(r,\"Date1904\",Tr(\"true\"==function(e){return e.Workbook&&e.Workbook.WBProps&&Re(e.Workbook.WBProps.date1904)?\"true\":\"false\"}(e))),Ec(r,\"CalcPrecision\",Tr(!0)),a&&Ec(r,\"RefreshAll\",Tr(!1)),Ec(r,\"BookBool\",Br(0)),function(e,t,n){Ec(e,\"Font\",function(e,t){var n=e.name||\"Arial\",r=t&&5==t.biff,i=Lt(r?15+n.length:16+2*n.length);return i.write_shift(2,20*(e.sz||12)),i.write_shift(4,0),i.write_shift(2,400),i.write_shift(4,0),i.write_shift(2,0),i.write_shift(1,n.length),r||i.write_shift(1,1),i.write_shift((r?1:2)*n.length,n,r?\"sbcs\":\"utf16le\"),i}({sz:12,color:{theme:1},name:\"Arial\",family:2,scheme:\"minor\"},n))}(r,0,n),function(e,t,n){t&&[[5,8],[23,26],[41,44],[50,392]].forEach((function(r){for(var i=r[0];i<=r[1];++i)null!=t[i]&&Ec(e,\"Format\",ii(i,t[i],n))}))}(r,e.SSF,n),function(e,t){for(var n=0;n<16;++n)Ec(e,\"XF\",ai({numFmtId:0,style:!0},0,t));t.cellXfs.forEach((function(n){Ec(e,\"XF\",ai(n,0,t))}))}(r,n),a&&Ec(r,\"UsesELFs\",Tr(!1));var l=r.end(),h=Ft();a&&Ec(h,\"Country\",function(e){return e||(e=Lt(4)),e.write_shift(2,1),e.write_shift(2,1),e}()),Ec(h,\"EOF\");var d=h.end(),u=Ft(),f=0,g=0;for(g=0;g<e.SheetNames.length;++g)f+=(a?12:11)+(a?2:1)*e.SheetNames[g].length;var p=l.length+f+d.length;for(g=0;g<e.SheetNames.length;++g)Ec(u,\"BoundSheet8\",ni({pos:p,hs:(s[g]||{}).Hidden||0,dt:0,name:e.SheetNames[g]},n)),p+=t[g].length;var m=u.end();if(f!=m.length)throw new Error(\"BS8 \"+f+\" != \"+m.length);var C=[];return l.length&&C.push(l),m.length&&C.push(m),d.length&&C.push(d),nt([C])}(e,r,n)),nt([r])}(e,t);case 4:case 3:case 2:return function(e,t){for(var n=t||{},r=Ft(),i=0,s=0;s<e.SheetNames.length;++s)e.SheetNames[s]==n.sheet&&(i=s);if(0==i&&n.sheet&&e.SheetNames[0]!=n.sheet)throw new Error(\"Sheet not found: \"+n.sheet);return Ec(r,9,ti(0,16,n)),function(e,t,n,r){var i,s=Array.isArray(t),o=Yt(t[\"!ref\"]||\"A1\"),a=\"\",c=[];if(o.e.c>255||o.e.r>16383){if(r.WTF)throw new Error(\"Range \"+(t[\"!ref\"]||\"A1\")+\" exceeds format limit A1:IV16384\");o.e.c=Math.min(o.e.c,255),o.e.r=Math.min(o.e.c,16383),i=Ut(o)}for(var l=o.s.r;l<=o.e.r;++l){a=Gt(l);for(var h=o.s.c;h<=o.e.c;++h){l===o.s.r&&(c[h]=jt(h)),i=c[h]+a;var d=s?(t[l]||[])[h]:t[i];d&&_c(e,d,l,h)}}}(r,e.Sheets[e.SheetNames[i]],0,n),Ec(r,10),r.end()}(e,t)}throw new Error(\"invalid type \"+n.bookType+\" for BIFF\")}var Oc=function(){function e(e,t){var n=t||{},r=n.dense?[]:{},i=e.match(/<table/i);if(!i)throw new Error(\"Invalid HTML: could not find <table>\");var s=e.match(/<\\/table/i),o=i.index,a=s&&s.index||e.length,c=function(e,t,n){if(ie||\"string\"==typeof t)return e.split(t);for(var r=e.split(t),i=[r[0]],s=1;s<r.length;++s)i.push(\"<tr>\"),i.push(r[s]);return i}(e.slice(o,a),/(:?<tr[^>]*>)/i),l=-1,h=0,d=0,u=0,f={s:{r:1e7,c:1e7},e:{r:0,c:0}},g=[];for(o=0;o<c.length;++o){var p=c[o].trim(),m=p.slice(0,3).toLowerCase();if(\"<tr\"!=m){if(\"<td\"==m||\"<th\"==m){var C=p.split(/<\\/t[dh]>/i);for(a=0;a<C.length;++a){var b=C[a].trim();if(b.match(/<t[dh]/i)){for(var v=b,I=0;\"<\"==v.charAt(0)&&(I=v.indexOf(\">\"))>-1;)v=v.slice(I+1);var A=me(b.slice(0,b.indexOf(\">\")));u=A.colspan?+A.colspan:1,((d=+A.rowspan)>1||u>1)&&g.push({s:{r:l,c:h},e:{r:l+(d||1)-1,c:h+u-1}});var y=A.t||\"\";if(v.length){if(v=We(v),f.s.r>l&&(f.s.r=l),f.e.r<l&&(f.e.r=l),f.s.c>h&&(f.s.c=h),f.e.c<h&&(f.e.c=h),v.length){var w={t:\"s\",v:v};n.raw||!v.trim().length||\"s\"==y||(\"TRUE\"===v?w={t:\"b\",v:!0}:\"FALSE\"===v?w={t:\"b\",v:!1}:isNaN(te(v))?isNaN(ne(v).getDate())||(w={t:\"d\",v:J(v)},n.cellDates||(w={t:\"n\",v:z(w.v)}),w.z=n.dateNF||T._table[14]):w={t:\"n\",v:te(v)}),n.dense?(r[l]||(r[l]=[]),r[l][h]=w):r[Kt({r:l,c:h})]=w,h+=u}}else h+=u}}}}else{if(++l,n.sheetRows&&n.sheetRows<=l){--l;break}h=0}}return r[\"!ref\"]=Ut(f),r}function t(e,t,n,r){for(var i=e[\"!merges\"]||[],s=[],o=t.s.c;o<=t.e.c;++o){for(var a=0,c=0,l=0;l<i.length;++l)if(!(i[l].s.r>n||i[l].s.c>o||i[l].e.r<n||i[l].e.c<o)){if(i[l].s.r<n||i[l].s.c<o){a=-1;break}a=i[l].e.r-i[l].s.r+1,c=i[l].e.c-i[l].s.c+1;break}if(!(a<0)){var h=Kt({r:n,c:o}),d=r.dense?(e[n]||[])[o]:e[h],u={};a>1&&(u.rowspan=a),c>1&&(u.colspan=c);var f=d&&null!=d.v&&(d.h||_e(d.w||(Jt(d),d.w)||\"\"))||\"\";u.t=d&&d.t||\"z\",r.editable&&(f='<span contenteditable=\"true\">'+f+\"</span>\"),u.id=\"sjs-\"+h,s.push(Xe(\"td\",f,u))}}return\"<tr>\"+s.join(\"\")+\"</tr>\"}function n(e,t,n){return[].join(\"\")+\"<table\"+(n&&n.id?' id=\"'+n.id+'\"':\"\")+\">\"}var r='<html><head><meta charset=\"utf-8\"/><title>SheetJS Table Export</title></head><body>',i=\"</body></html>\";return{to_workbook:function(t,n){return Qt(e(t,n),n)},to_sheet:e,_row:t,BEGIN:r,END:i,_preamble:n,from_sheet:function(e,s){var o=s||{},a=null!=o.footer?o.footer:i,c=[null!=o.header?o.header:r],l=Xt(e[\"!ref\"]);o.dense=Array.isArray(e),c.push(n(0,0,o));for(var h=l.s.r;h<=l.e.r;++h)c.push(t(e,l,h,o));return c.push(\"</table>\"+a),c.join(\"\")}}}();function Lc(e,t){for(var n,r,i,s,o=t||{},a=o.dense?[]:{},c=e.getElementsByTagName(\"tr\"),l=o.sheetRows||1e7,h={s:{r:0,c:0},e:{r:0,c:0}},d=[],u=0,f=[],g=0,p=0;g<c.length&&p<l;++g){var m=c[g];if(Pc(m)){if(o.display)continue;f[p]={hidden:!0}}var C=m.children;for(n=r=0;n<C.length;++n){var b=C[n];if(!o.display||!Pc(b)){var v=We(b.innerHTML);for(u=0;u<d.length;++u){var I=d[u];I.s.c==r&&I.s.r<=p&&p<=I.e.r&&(r=I.e.c+1,u=-1)}s=+b.getAttribute(\"colspan\")||1,((i=+b.getAttribute(\"rowspan\"))>0||s>1)&&d.push({s:{r:p,c:r},e:{r:p+(i||1)-1,c:r+s-1}});var A={t:\"s\",v:v},y=b.getAttribute(\"t\")||\"\";null!=v&&(0==v.length?A.t=y||\"z\":o.raw||0==v.trim().length||\"s\"==y||(\"TRUE\"===v?A={t:\"b\",v:!0}:\"FALSE\"===v?A={t:\"b\",v:!1}:isNaN(te(v))?isNaN(ne(v).getDate())||(A={t:\"d\",v:J(v)},o.cellDates||(A={t:\"n\",v:z(A.v)}),A.z=o.dateNF||T._table[14]):A={t:\"n\",v:te(v)})),o.dense?(a[p]||(a[p]=[]),a[p][r]=A):a[Kt({c:r,r:p})]=A,h.e.c<r&&(h.e.c=r),r+=s}}++p}return d.length&&(a[\"!merges\"]=d),f.length&&(a[\"!rows\"]=f),h.e.r=p-1,a[\"!ref\"]=Ut(h),p>=l&&(a[\"!fullref\"]=Ut((h.e.r=c.length-g+p-1,h))),a}function Pc(e){var t=\"\",n=function(e){return e.ownerDocument.defaultView&&\"function\"==typeof e.ownerDocument.defaultView.getComputedStyle?e.ownerDocument.defaultView.getComputedStyle:\"function\"==typeof getComputedStyle?getComputedStyle:null}(e);return n&&(t=n(e).getPropertyValue(\"display\")),t||(t=e.style.display),\"none\"===t}var Fc,Nc=(Fc={day:[\"d\",\"dd\"],month:[\"m\",\"mm\"],year:[\"y\",\"yy\"],hours:[\"h\",\"hh\"],minutes:[\"m\",\"mm\"],seconds:[\"s\",\"ss\"],\"am-pm\":[\"A/P\",\"AM/PM\"],\"day-of-week\":[\"ddd\",\"dddd\"],era:[\"e\",\"ee\"],quarter:[\"\\\\Qm\",'m\\\\\"th quarter\"']},function(e,t){var n,r,i,s,o,a,c,l=t||{},h=cc(e),d=[],u={name:\"\"},f=\"\",g=0,p={},m=[],C=l.dense?[]:{},b={value:\"\"},v=\"\",I=0,A=[],y=-1,w=-1,S={s:{r:1e6,c:1e7},e:{r:0,c:0}},x=0,E={},k=[],_={},T=0,R=0,B=[],O=1,L=1,P=[],F={Names:[]},N={},M=[\"\",\"\"],D=[],$={},W=\"\",H=0,G=!1,V=!1,j=0;for(lc.lastIndex=0,h=h.replace(/<!--([\\s\\S]*?)-->/gm,\"\").replace(/<!DOCTYPE[^\\[]*\\[[^\\]]*\\]>/gm,\"\");o=lc.exec(h);)switch(o[3]=o[3].replace(/_.*$/,\"\")){case\"table\":case\"\\u5de5\\u4f5c\\u8868\":\"/\"===o[1]?(S.e.c>=S.s.c&&S.e.r>=S.s.r&&(C[\"!ref\"]=Ut(S)),l.sheetRows>0&&l.sheetRows<=S.e.r&&(C[\"!fullref\"]=C[\"!ref\"],S.e.r=l.sheetRows-1,C[\"!ref\"]=Ut(S)),k.length&&(C[\"!merges\"]=k),B.length&&(C[\"!rows\"]=B),i.name=i[\"\\u540d\\u79f0\"]||i.name,\"undefined\"!=typeof JSON&&JSON.stringify(i),m.push(i.name),p[i.name]=C,V=!1):\"/\"!==o[0].charAt(o[0].length-2)&&(i=me(o[0],!1),y=w=-1,S.s.r=S.s.c=1e7,S.e.r=S.e.c=0,C=l.dense?[]:{},k=[],B=[],V=!0);break;case\"table-row-group\":\"/\"===o[1]?--x:++x;break;case\"table-row\":case\"\\u884c\":if(\"/\"===o[1]){y+=O,O=1;break}if((s=me(o[0],!1))[\"\\u884c\\u53f7\"]?y=s[\"\\u884c\\u53f7\"]-1:-1==y&&(y=0),(O=+s[\"number-rows-repeated\"]||1)<10)for(j=0;j<O;++j)x>0&&(B[y+j]={level:x});w=-1;break;case\"covered-table-cell\":\"/\"!==o[1]&&++w,l.sheetStubs&&(l.dense?(C[y]||(C[y]=[]),C[y][w]={t:\"z\"}):C[Kt({r:y,c:w})]={t:\"z\"}),v=\"\",A=[];break;case\"table-cell\":case\"\\u6570\\u636e\":if(\"/\"===o[0].charAt(o[0].length-2))++w,b=me(o[0],!1),L=parseInt(b[\"number-columns-repeated\"]||\"1\",10),a={t:\"z\",v:null},b.formula&&0!=l.cellFormula&&(a.f=Ko(ye(b.formula))),\"string\"==(b[\"\\u6570\\u636e\\u7c7b\\u578b\"]||b[\"value-type\"])&&(a.t=\"s\",a.v=ye(b[\"string-value\"]||\"\"),l.dense?(C[y]||(C[y]=[]),C[y][w]=a):C[Kt({r:y,c:w})]=a),w+=L-1;else if(\"/\"!==o[1]){L=1;var Z=O?y+O-1:y;if(++w>S.e.c&&(S.e.c=w),w<S.s.c&&(S.s.c=w),y<S.s.r&&(S.s.r=y),Z>S.e.r&&(S.e.r=Z),D=[],$={},a={t:(b=me(o[0],!1))[\"\\u6570\\u636e\\u7c7b\\u578b\"]||b[\"value-type\"],v:null},l.cellFormula)if(b.formula&&(b.formula=ye(b.formula)),b[\"number-matrix-columns-spanned\"]&&b[\"number-matrix-rows-spanned\"]&&(T=parseInt(b[\"number-matrix-rows-spanned\"],10)||0,R=parseInt(b[\"number-matrix-columns-spanned\"],10)||0,a.F=Ut(_={s:{r:y,c:w},e:{r:y+T-1,c:w+R-1}}),P.push([_,a.F])),b.formula)a.f=Ko(b.formula);else for(j=0;j<P.length;++j)y>=P[j][0].s.r&&y<=P[j][0].e.r&&w>=P[j][0].s.c&&w<=P[j][0].e.c&&(a.F=P[j][1]);switch((b[\"number-columns-spanned\"]||b[\"number-rows-spanned\"])&&(T=parseInt(b[\"number-rows-spanned\"],10)||0,R=parseInt(b[\"number-columns-spanned\"],10)||0,k.push(_={s:{r:y,c:w},e:{r:y+T-1,c:w+R-1}})),b[\"number-columns-repeated\"]&&(L=parseInt(b[\"number-columns-repeated\"],10)),a.t){case\"boolean\":a.t=\"b\",a.v=Re(b[\"boolean-value\"]);break;case\"float\":case\"percentage\":case\"currency\":a.t=\"n\",a.v=parseFloat(b.value);break;case\"date\":a.t=\"d\",a.v=J(b[\"date-value\"]),l.cellDates||(a.t=\"n\",a.v=z(a.v)),a.z=\"m/d/yy\";break;case\"time\":a.t=\"n\",a.v=X(b[\"time-value\"])/86400;break;case\"number\":a.t=\"n\",a.v=parseFloat(b[\"\\u6570\\u636e\\u6570\\u503c\"]);break;default:if(\"string\"!==a.t&&\"text\"!==a.t&&a.t)throw new Error(\"Unsupported value type \"+a.t);a.t=\"s\",null!=b[\"string-value\"]&&(v=ye(b[\"string-value\"]),A=[])}}else{if(G=!1,\"s\"===a.t&&(a.v=v||\"\",A.length&&(a.R=A),G=0==I),N.Target&&(a.l=N),D.length>0&&(a.c=D,D=[]),v&&!1!==l.cellText&&(a.w=v),(!G||l.sheetStubs)&&!(l.sheetRows&&l.sheetRows<=y))for(var K=0;K<O;++K){if(L=parseInt(b[\"number-columns-repeated\"]||\"1\",10),l.dense)for(C[y+K]||(C[y+K]=[]),C[y+K][w]=0==K?a:q(a);--L>0;)C[y+K][w+L]=q(a);else for(C[Kt({r:y+K,c:w})]=a;--L>0;)C[Kt({r:y+K,c:w+L})]=q(a);S.e.c<=w&&(S.e.c=w)}w+=(L=parseInt(b[\"number-columns-repeated\"]||\"1\",10))-1,L=0,a={},v=\"\",A=[]}N={};break;case\"document\":case\"document-content\":case\"\\u7535\\u5b50\\u8868\\u683c\\u6587\\u6863\":case\"spreadsheet\":case\"\\u4e3b\\u4f53\":case\"scripts\":case\"styles\":case\"font-face-decls\":if(\"/\"===o[1]){if((n=d.pop())[0]!==o[3])throw\"Bad state: \"+n}else\"/\"!==o[0].charAt(o[0].length-2)&&d.push([o[3],!0]);break;case\"annotation\":if(\"/\"===o[1]){if((n=d.pop())[0]!==o[3])throw\"Bad state: \"+n;$.t=v,A.length&&($.R=A),$.a=W,D.push($)}else\"/\"!==o[0].charAt(o[0].length-2)&&d.push([o[3],!1]);W=\"\",H=0,v=\"\",I=0,A=[];break;case\"creator\":\"/\"===o[1]?W=h.slice(H,o.index):H=o.index+o[0].length;break;case\"meta\":case\"\\u5143\\u6570\\u636e\":case\"settings\":case\"config-item-set\":case\"config-item-map-indexed\":case\"config-item-map-entry\":case\"config-item-map-named\":case\"shapes\":case\"frame\":case\"text-box\":case\"image\":case\"data-pilot-tables\":case\"list-style\":case\"form\":case\"dde-links\":case\"event-listeners\":case\"chart\":if(\"/\"===o[1]){if((n=d.pop())[0]!==o[3])throw\"Bad state: \"+n}else\"/\"!==o[0].charAt(o[0].length-2)&&d.push([o[3],!1]);v=\"\",I=0,A=[];break;case\"scientific-number\":case\"currency-symbol\":case\"currency-style\":break;case\"number-style\":case\"percentage-style\":case\"date-style\":case\"time-style\":if(\"/\"===o[1]){if(E[u.name]=f,(n=d.pop())[0]!==o[3])throw\"Bad state: \"+n}else\"/\"!==o[0].charAt(o[0].length-2)&&(f=\"\",u=me(o[0],!1),d.push([o[3],!0]));break;case\"script\":case\"libraries\":case\"automatic-styles\":case\"master-styles\":break;case\"default-style\":case\"page-layout\":case\"style\":case\"map\":case\"font-face\":case\"paragraph-properties\":case\"table-properties\":case\"table-column-properties\":case\"table-row-properties\":case\"table-cell-properties\":break;case\"number\":switch(d[d.length-1][0]){case\"time-style\":case\"date-style\":r=me(o[0],!1),f+=Fc[o[3]][\"long\"===r.style?1:0]}break;case\"fraction\":break;case\"day\":case\"month\":case\"year\":case\"era\":case\"day-of-week\":case\"week-of-year\":case\"quarter\":case\"hours\":case\"minutes\":case\"seconds\":case\"am-pm\":switch(d[d.length-1][0]){case\"time-style\":case\"date-style\":r=me(o[0],!1),f+=Fc[o[3]][\"long\"===r.style?1:0]}break;case\"boolean-style\":case\"boolean\":case\"text-style\":break;case\"text\":if(\"/>\"===o[0].slice(-2))break;if(\"/\"===o[1])switch(d[d.length-1][0]){case\"number-style\":case\"date-style\":case\"time-style\":f+=h.slice(g,o.index)}else g=o.index+o[0].length;break;case\"named-range\":M=Xo((r=me(o[0],!1))[\"cell-range-address\"]);var U={Name:r.name,Ref:M[0]+\"!\"+M[1]};V&&(U.Sheet=m.length),F.Names.push(U);break;case\"text-content\":case\"text-properties\":case\"embedded-text\":break;case\"body\":case\"\\u7535\\u5b50\\u8868\\u683c\":case\"forms\":case\"table-column\":case\"table-header-rows\":case\"table-rows\":case\"table-column-group\":case\"table-header-columns\":case\"table-columns\":case\"null-date\":case\"graphic-properties\":case\"calculation-settings\":case\"named-expressions\":case\"label-range\":case\"label-ranges\":case\"named-expression\":case\"sort\":case\"sort-by\":case\"sort-groups\":case\"tab\":case\"line-break\":case\"span\":break;case\"p\":case\"\\u6587\\u672c\\u4e32\":if(\"/\"!==o[1]||b&&b[\"string-value\"])me(o[0],!1),I=o.index+o[0].length;else{var Y=(c=void 0,c=h.slice(I,o.index).replace(/[\\t\\r\\n]/g,\" \").trim().replace(/ +/g,\" \").replace(/<text:s\\/>/g,\" \").replace(/<text:s text:c=\"(\\d+)\"\\/>/g,(function(e,t){return Array(parseInt(t,10)+1).join(\" \")})).replace(/<text:tab[^>]*\\/>/g,\"\\t\").replace(/<text:line-break\\/>/g,\"\\n\"),[ye(c.replace(/<[^>]*>/g,\"\"))]);v=(v.length>0?v+\"\\n\":\"\")+Y[0]}break;case\"s\":break;case\"database-range\":if(\"/\"===o[1])break;try{p[(M=Xo(me(o[0])[\"target-range-address\"]))[0]][\"!autofilter\"]={ref:M[1]}}catch(El){}break;case\"date\":case\"object\":break;case\"title\":case\"\\u6807\\u9898\":case\"desc\":case\"binary-data\":case\"table-source\":case\"scenario\":case\"iteration\":case\"content-validations\":case\"content-validation\":case\"help-message\":case\"error-message\":case\"database-ranges\":case\"filter\":case\"filter-and\":case\"filter-or\":case\"filter-condition\":case\"list-level-style-bullet\":case\"list-level-style-number\":case\"list-level-properties\":break;case\"sender-firstname\":case\"sender-lastname\":case\"sender-initials\":case\"sender-title\":case\"sender-position\":case\"sender-email\":case\"sender-phone-private\":case\"sender-fax\":case\"sender-company\":case\"sender-phone-work\":case\"sender-street\":case\"sender-city\":case\"sender-postal-code\":case\"sender-country\":case\"sender-state-or-province\":case\"author-name\":case\"author-initials\":case\"chapter\":case\"file-name\":case\"template-name\":case\"sheet-name\":case\"event-listener\":break;case\"initial-creator\":case\"creation-date\":case\"print-date\":case\"generator\":case\"document-statistic\":case\"user-defined\":case\"editing-duration\":case\"editing-cycles\":case\"config-item\":case\"page-number\":case\"page-count\":case\"time\":case\"cell-range-source\":case\"detective\":case\"operation\":case\"highlighted-range\":break;case\"data-pilot-table\":case\"source-cell-range\":case\"source-service\":case\"data-pilot-field\":case\"data-pilot-level\":case\"data-pilot-subtotals\":case\"data-pilot-subtotal\":case\"data-pilot-members\":case\"data-pilot-member\":case\"data-pilot-display-info\":case\"data-pilot-sort-info\":case\"data-pilot-layout-info\":case\"data-pilot-field-reference\":case\"data-pilot-groups\":case\"data-pilot-group\":case\"data-pilot-group-member\":case\"rect\":break;case\"dde-connection-decls\":case\"dde-connection-decl\":case\"dde-link\":case\"dde-source\":case\"properties\":case\"property\":break;case\"a\":if(\"/\"!==o[1]){if(!(N=me(o[0],!1)).href)break;N.Target=N.href,delete N.href,\"#\"==N.Target.charAt(0)&&N.Target.indexOf(\".\")>-1&&(M=Xo(N.Target.slice(1)),N.Target=\"#\"+M[0]+\"!\"+M[1])}break;case\"table-protection\":case\"data-pilot-grand-total\":case\"office-document-common-attrs\":break;default:switch(o[2]){case\"dc:\":case\"calcext:\":case\"loext:\":case\"ooo:\":case\"chartooo:\":case\"draw:\":case\"style:\":case\"chart:\":case\"form:\":case\"uof:\":case\"\\u8868:\":case\"\\u5b57:\":break;default:if(l.WTF)throw new Error(o)}}var Q={Sheets:p,SheetNames:m,Workbook:F};return l.bookSheets&&delete Q.Sheets,Q});function Mc(e,t){t=t||{};var n=!!oe(e,\"objectdata\");n&&function(e,t){for(var n,r,i=cc(e);n=lc.exec(i);)switch(n[3]){case\"manifest\":break;case\"file-entry\":if(\"/\"==(r=me(n[0],!1)).path&&\"application/vnd.oasis.opendocument.spreadsheet\"!==r.type)throw new Error(\"This OpenDocument is not a spreadsheet\");break;case\"encryption-data\":case\"algorithm\":case\"start-key-generation\":case\"key-derivation\":throw new Error(\"Unsupported ODS Encryption\");default:if(t&&t.WTF)throw n}}(ce(e,\"META-INF/manifest.xml\"),t);var r=le(e,\"content.xml\");if(!r)throw new Error(\"Missing content.xml in \"+(n?\"ODS\":\"UOF\")+\" file\");var i=Nc(n?r:Be(r),t);return oe(e,\"meta.xml\")&&(i.Props=er(ce(e,\"meta.xml\"))),i}function Dc(e,t){return Nc(e,t)}var $c=function(){var e=\"<office:document-styles \"+Ke({\"xmlns:office\":\"urn:oasis:names:tc:opendocument:xmlns:office:1.0\",\"xmlns:table\":\"urn:oasis:names:tc:opendocument:xmlns:table:1.0\",\"xmlns:style\":\"urn:oasis:names:tc:opendocument:xmlns:style:1.0\",\"xmlns:text\":\"urn:oasis:names:tc:opendocument:xmlns:text:1.0\",\"xmlns:draw\":\"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\",\"xmlns:fo\":\"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\",\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\",\"xmlns:dc\":\"http://purl.org/dc/elements/1.1/\",\"xmlns:number\":\"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\",\"xmlns:svg\":\"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\",\"xmlns:of\":\"urn:oasis:names:tc:opendocument:xmlns:of:1.2\",\"office:version\":\"1.2\"})+\"></office:document-styles>\";return function(){return de+e}}(),Wc=function(){var e=\"          <table:table-cell />\\n\",t=function(t,n,r){var i=[];i.push('      <table:table table:name=\"'+xe(n.SheetNames[r])+'\">\\n');var s=0,o=0,a=Xt(t[\"!ref\"]),c=t[\"!merges\"]||[],l=0,h=Array.isArray(t);for(s=0;s<a.s.r;++s)i.push(\"        <table:table-row></table:table-row>\\n\");for(;s<=a.e.r;++s){for(i.push(\"        <table:table-row>\\n\"),o=0;o<a.s.c;++o)i.push(e);for(;o<=a.e.c;++o){var d=!1,u={},f=\"\";for(l=0;l!=c.length;++l)if(!(c[l].s.c>o||c[l].s.r>s||c[l].e.c<o||c[l].e.r<s)){c[l].s.c==o&&c[l].s.r==s||(d=!0),u[\"table:number-columns-spanned\"]=c[l].e.c-c[l].s.c+1,u[\"table:number-rows-spanned\"]=c[l].e.r-c[l].s.r+1;break}if(d)i.push(\"          <table:covered-table-cell/>\\n\");else{var g=Kt({r:s,c:o}),p=h?(t[s]||[])[o]:t[g];if(p&&p.f&&(u[\"table:formula\"]=xe((\"of:=\"+p.f.replace(Ys,\"$1[.$2$3$4$5]\").replace(/\\]:\\[/g,\":\")).replace(/;/g,\"|\").replace(/,/g,\";\")),p.F&&p.F.slice(0,g.length)==g)){var m=Xt(p.F);u[\"table:number-matrix-columns-spanned\"]=m.e.c-m.s.c+1,u[\"table:number-matrix-rows-spanned\"]=m.e.r-m.s.r+1}if(p){switch(p.t){case\"b\":f=p.v?\"TRUE\":\"FALSE\",u[\"office:value-type\"]=\"boolean\",u[\"office:boolean-value\"]=p.v?\"true\":\"false\";break;case\"n\":f=p.w||String(p.v||0),u[\"office:value-type\"]=\"float\",u[\"office:value\"]=p.v||0;break;case\"s\":case\"str\":f=p.v,u[\"office:value-type\"]=\"string\";break;case\"d\":f=p.w||J(p.v).toISOString(),u[\"office:value-type\"]=\"date\",u[\"office:date-value\"]=J(p.v).toISOString(),u[\"table:style-name\"]=\"ce1\";break;default:i.push(e);continue}var C=xe(f).replace(/  +/g,(function(e){return'<text:s text:c=\"'+e.length+'\"/>'})).replace(/\\t/g,\"<text:tab/>\").replace(/\\n/g,\"<text:line-break/>\").replace(/^ /,\"<text:s/>\").replace(/ $/,\"<text:s/>\");if(p.l&&p.l.Target){var b=p.l.Target;C=Xe(\"text:a\",C,{\"xlink:href\":b=\"#\"==b.charAt(0)?\"#\"+b.slice(1).replace(/\\./,\"!\"):b})}i.push(\"          \"+Xe(\"table:table-cell\",Xe(\"text:p\",C,{}),u)+\"\\n\")}else i.push(e)}}i.push(\"        </table:table-row>\\n\")}return i.push(\"      </table:table>\\n\"),i.join(\"\")};return function(e,n){var r=[de],i=Ke({\"xmlns:office\":\"urn:oasis:names:tc:opendocument:xmlns:office:1.0\",\"xmlns:table\":\"urn:oasis:names:tc:opendocument:xmlns:table:1.0\",\"xmlns:style\":\"urn:oasis:names:tc:opendocument:xmlns:style:1.0\",\"xmlns:text\":\"urn:oasis:names:tc:opendocument:xmlns:text:1.0\",\"xmlns:draw\":\"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\",\"xmlns:fo\":\"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\",\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\",\"xmlns:dc\":\"http://purl.org/dc/elements/1.1/\",\"xmlns:meta\":\"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\",\"xmlns:number\":\"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\",\"xmlns:presentation\":\"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0\",\"xmlns:svg\":\"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\",\"xmlns:chart\":\"urn:oasis:names:tc:opendocument:xmlns:chart:1.0\",\"xmlns:dr3d\":\"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\",\"xmlns:math\":\"http://www.w3.org/1998/Math/MathML\",\"xmlns:form\":\"urn:oasis:names:tc:opendocument:xmlns:form:1.0\",\"xmlns:script\":\"urn:oasis:names:tc:opendocument:xmlns:script:1.0\",\"xmlns:ooo\":\"http://openoffice.org/2004/office\",\"xmlns:ooow\":\"http://openoffice.org/2004/writer\",\"xmlns:oooc\":\"http://openoffice.org/2004/calc\",\"xmlns:dom\":\"http://www.w3.org/2001/xml-events\",\"xmlns:xforms\":\"http://www.w3.org/2002/xforms\",\"xmlns:xsd\":\"http://www.w3.org/2001/XMLSchema\",\"xmlns:xsi\":\"http://www.w3.org/2001/XMLSchema-instance\",\"xmlns:sheet\":\"urn:oasis:names:tc:opendocument:sh33tjs:1.0\",\"xmlns:rpt\":\"http://openoffice.org/2005/report\",\"xmlns:of\":\"urn:oasis:names:tc:opendocument:xmlns:of:1.2\",\"xmlns:xhtml\":\"http://www.w3.org/1999/xhtml\",\"xmlns:grddl\":\"http://www.w3.org/2003/g/data-view#\",\"xmlns:tableooo\":\"http://openoffice.org/2009/table\",\"xmlns:drawooo\":\"http://openoffice.org/2010/draw\",\"xmlns:calcext\":\"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0\",\"xmlns:loext\":\"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0\",\"xmlns:field\":\"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0\",\"xmlns:formx\":\"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0\",\"xmlns:css3t\":\"http://www.w3.org/TR/css3-text/\",\"office:version\":\"1.2\"}),s=Ke({\"xmlns:config\":\"urn:oasis:names:tc:opendocument:xmlns:config:1.0\",\"office:mimetype\":\"application/vnd.oasis.opendocument.spreadsheet\"});r.push(\"fods\"==n.bookType?\"<office:document\"+i+s+\">\\n\":\"<office:document-content\"+i+\">\\n\"),function(e){e.push(\" <office:automatic-styles>\\n\"),e.push('  <number:date-style style:name=\"N37\" number:automatic-order=\"true\">\\n'),e.push('   <number:month number:style=\"long\"/>\\n'),e.push(\"   <number:text>/</number:text>\\n\"),e.push('   <number:day number:style=\"long\"/>\\n'),e.push(\"   <number:text>/</number:text>\\n\"),e.push(\"   <number:year/>\\n\"),e.push(\"  </number:date-style>\\n\"),e.push('  <style:style style:name=\"ce1\" style:family=\"table-cell\" style:parent-style-name=\"Default\" style:data-style-name=\"N37\"/>\\n'),e.push(\" </office:automatic-styles>\\n\")}(r),r.push(\"  <office:body>\\n\"),r.push(\"    <office:spreadsheet>\\n\");for(var o=0;o!=e.SheetNames.length;++o)r.push(t(e.Sheets[e.SheetNames[o]],e,o));return r.push(\"    </office:spreadsheet>\\n\"),r.push(\"  </office:body>\\n\"),r.push(\"fods\"==n.bookType?\"</office:document>\":\"</office:document-content>\"),r.join(\"\")}}();function Hc(e,t){if(\"fods\"==t.bookType)return Wc(e,t);var n=new re,r=\"\",i=[],s=[];return n.file(r=\"mimetype\",\"application/vnd.oasis.opendocument.spreadsheet\"),n.file(r=\"content.xml\",Wc(e,t)),i.push([r,\"text/xml\"]),s.push([r,\"ContentFile\"]),n.file(r=\"styles.xml\",$c(e,t)),i.push([r,\"text/xml\"]),s.push([r,\"StylesFile\"]),n.file(r=\"meta.xml\",Jn()),i.push([r,\"text/xml\"]),s.push([r,\"MetadataFile\"]),n.file(r=\"manifest.rdf\",function(e){var t=[de];t.push('<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\\n');for(var n=0;n!=e.length;++n)t.push(Un(e[n][0],e[n][1])),t.push(['  <rdf:Description rdf:about=\"\">\\n','    <ns0:hasPart xmlns:ns0=\"http://docs.oasis-open.org/ns/office/1.2/meta/pkg#\" rdf:resource=\"'+e[n][0]+'\"/>\\n',\"  </rdf:Description>\\n\"].join(\"\"));return t.push(Un(\"\",\"Document\",\"pkg\")),t.push(\"</rdf:RDF>\"),t.join(\"\")}(s)),i.push([r,\"application/rdf+xml\"]),n.file(r=\"META-INF/manifest.xml\",function(e){var t=[de];t.push('<manifest:manifest xmlns:manifest=\"urn:oasis:names:tc:opendocument:xmlns:manifest:1.0\" manifest:version=\"1.2\">\\n'),t.push('  <manifest:file-entry manifest:full-path=\"/\" manifest:version=\"1.2\" manifest:media-type=\"application/vnd.oasis.opendocument.spreadsheet\"/>\\n');for(var n=0;n<e.length;++n)t.push('  <manifest:file-entry manifest:full-path=\"'+e[n][0]+'\" manifest:media-type=\"'+e[n][1]+'\"/>\\n');return t.push(\"</manifest:manifest>\"),t.join(\"\")}(i)),n}function Gc(e){return function(t,n){var r=function(e,t){if(!t)return 0;var n=e.SheetNames.indexOf(t);if(-1==n)throw new Error(\"Sheet not found: \"+t);return n}(t,n.sheet);return e.from_sheet(t.Sheets[t.SheetNames[r]],n,t)}}var Vc=Gc(Oc),jc=Gc({from_sheet:Il}),Zc=Gc(wi),zc=Gc(Si),Kc=Gc(Ei),Xc=Gc(es),Uc=Gc({from_sheet:Al}),Yc=Gc(yi),Jc=Gc(xi);function Qc(e){return function(t){for(var n=0;n!=e.length;++n){var r=e[n];void 0===t[r[0]]&&(t[r[0]]=r[1]),\"n\"===r[2]&&(t[r[0]]=Number(t[r[0]]))}}}var qc=Qc([[\"cellNF\",!1],[\"cellHTML\",!0],[\"cellFormula\",!0],[\"cellStyles\",!1],[\"cellText\",!0],[\"cellDates\",!1],[\"sheetStubs\",!1],[\"sheetRows\",0,\"n\"],[\"bookDeps\",!1],[\"bookSheets\",!1],[\"bookProps\",!1],[\"bookFiles\",!1],[\"bookVBA\",!1],[\"password\",\"\"],[\"WTF\",!1]]),el=Qc([[\"cellDates\",!1],[\"bookSST\",!1],[\"bookType\",\"xlsx\"],[\"compression\",!1],[\"WTF\",!1]]);function tl(e,t,n,r,i,s,o,a,c,l,h,d){try{s[r]=Zn(le(e,n,!0),t);var u,f=ce(e,t);switch(a){case\"sheet\":u=function(e,t,n,r,i,s,o,a){return\".bin\"===t.slice(-4)?function(e,t,n,r,i,s,o){if(!e)return e;var a=t||{};r||(r={\"!id\":{}});var c,l,h,d,u,f,g,p,m,C,b=a.dense?[]:{},v={s:{r:2e6,c:2e6},e:{r:0,c:0}},I=!1,A=!1,y=[];a.biff=12,a[\"!row\"]=0;var w=0,S=!1,x=[],E={},k=a.supbooks||i.supbooks||[[]];if(k.sharedf=E,k.arrayf=x,k.SheetNames=i.SheetNames||i.Sheets.map((function(e){return e.name})),!a.supbooks&&(a.supbooks=k,i.Names))for(var _=0;_<i.Names.length;++_)k[0][_+1]=i.Names[_];var R=[],B=[],O=!1;if(Pt(e,(function(e,t,_){if(!A)switch(_){case 148:c=e;break;case 0:l=e,a.sheetRows&&a.sheetRows<=l.r&&(A=!0),m=Gt(u=l.r),a[\"!row\"]=l.r,(e.hidden||e.hpt||null!=e.level)&&(e.hpt&&(e.hpx=ds(e.hpt)),B[e.r]=e);break;case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:switch(h={t:e[2]},e[2]){case\"n\":h.v=e[1];break;case\"s\":h.v=(p=Uo[e[1]]).t,h.r=p.r;break;case\"b\":h.v=!!e[1];break;case\"e\":h.v=e[1],!1!==a.cellText&&(h.w=wn[h.v]);break;case\"str\":h.t=\"s\",h.v=e[1]}if((d=o.CellXf[e[0].iStyleRef])&&na(h,d.numFmtId,null,a,s,o),f=e[0].c,a.dense?(b[u]||(b[u]=[]),b[u][f]=h):b[jt(f)+m]=h,a.cellFormula){for(S=!1,w=0;w<x.length;++w){var L=x[w];l.r>=L[0].s.r&&l.r<=L[0].e.r&&f>=L[0].s.c&&f<=L[0].e.c&&(h.F=Ut(L[0]),S=!0)}!S&&e.length>3&&(h.f=e[3])}if(v.s.r>l.r&&(v.s.r=l.r),v.s.c>f&&(v.s.c=f),v.e.r<l.r&&(v.e.r=l.r),v.e.c<f&&(v.e.c=f),a.cellDates&&d&&\"n\"==h.t&&T.is_date(T._table[d.numFmtId])){var P=T.parse_date_code(h.v);P&&(h.t=\"d\",h.v=new Date(P.y,P.m-1,P.d,P.H,P.M,P.S,P.u))}break;case 1:if(!a.sheetStubs||I)break;h={t:\"z\",v:void 0},f=e[0].c,a.dense?(b[u]||(b[u]=[]),b[u][f]=h):b[jt(f)+m]=h,v.s.r>l.r&&(v.s.r=l.r),v.s.c>f&&(v.s.c=f),v.e.r<l.r&&(v.e.r=l.r),v.e.c<f&&(v.e.c=f);break;case 176:y.push(e);break;case 494:var F=r[\"!id\"][e.relId];for(F?(e.Target=F.Target,e.loc&&(e.Target+=\"#\"+e.loc),e.Rel=F):\"\"==e.relId&&(e.Target=\"#\"+e.loc),u=e.rfx.s.r;u<=e.rfx.e.r;++u)for(f=e.rfx.s.c;f<=e.rfx.e.c;++f)a.dense?(b[u]||(b[u]=[]),b[u][f]||(b[u][f]={t:\"z\",v:void 0}),b[u][f].l=e):(g=Kt({c:f,r:u}),b[g]||(b[g]={t:\"z\",v:void 0}),b[g].l=e);break;case 426:if(!a.cellFormula)break;x.push(e),(C=a.dense?b[u][f]:b[jt(f)+m]).f=Po(e[1],0,{r:l.r,c:f},k,a),C.F=Ut(e[0]);break;case 427:if(!a.cellFormula)break;E[Kt(e[0].s)]=e[1],(C=a.dense?b[u][f]:b[jt(f)+m]).f=Po(e[1],0,{r:l.r,c:f},k,a);break;case 60:if(!a.cellStyles)break;for(;e.e>=e.s;)R[e.e--]={width:e.w/256,hidden:!!(1&e.flags)},O||(O=!0,cs(e.w/256)),ls(R[e.e+1]);break;case 161:b[\"!autofilter\"]={ref:Ut(e)};break;case 476:b[\"!margins\"]=e;break;case 147:i.Sheets[n]||(i.Sheets[n]={}),e.name&&(i.Sheets[n].CodeName=e.name);break;case 137:i.Views||(i.Views=[{}]),i.Views[0]||(i.Views[0]={}),e.RTL&&(i.Views[0].RTL=!0);break;case 485:break;case 175:case 644:case 625:case 562:case 396:case 1112:case 1146:case 471:case 1050:case 649:case 1105:case 49:case 589:case 607:case 564:case 1055:case 168:case 174:case 1180:case 499:case 64:case 1053:case 550:case 171:case 167:case 1177:case 169:case 1181:case 551:case 552:case 661:case 639:case 478:case 151:case 537:case 477:case 536:case 1103:case 680:case 1104:case 1024:case 152:case 663:case 535:case 678:case 504:case 1043:case 428:case 170:case 3072:case 50:case 2070:case 1045:break;case 35:I=!0;break;case 36:I=!1;break;case 37:case 38:break;default:if((t||\"\").indexOf(\"Begin\")>0);else if((t||\"\").indexOf(\"End\")>0);else if(!I||a.WTF)throw new Error(\"Unexpected record \"+_+\" \"+t)}}),a),delete a.supbooks,delete a[\"!row\"],!b[\"!ref\"]&&(v.s.r<2e6||c&&(c.e.r>0||c.e.c>0||c.s.r>0||c.s.c>0))&&(b[\"!ref\"]=Ut(c||v)),a.sheetRows&&b[\"!ref\"]){var L=Yt(b[\"!ref\"]);a.sheetRows<=+L.e.r&&(L.e.r=a.sheetRows-1,L.e.r>v.e.r&&(L.e.r=v.e.r),L.e.r<L.s.r&&(L.s.r=L.e.r),L.e.c>v.e.c&&(L.e.c=v.e.c),L.e.c<L.s.c&&(L.s.c=L.e.c),b[\"!fullref\"]=b[\"!ref\"],b[\"!ref\"]=Ut(L))}return y.length>0&&(b[\"!merges\"]=y),R.length>0&&(b[\"!cols\"]=R),B.length>0&&(b[\"!rows\"]=B),b}(e,r,n,i,s,o,a):function(e,t,n,r,i,s,o){if(!e)return e;var a=t.dense?[]:{},c={s:{r:2e6,c:2e6},e:{r:0,c:0}},l=\"\",h=\"\",d=e.match(sa);d?(l=e.slice(0,d.index),h=e.slice(d.index+d[0].length)):l=h=e;var u=l.match(da);u&&fa(u[0],0,i,n);var f=(l.match(/<(?:\\w*:)?dimension/)||{index:-1}).index;if(f>0){var g=l.slice(f,f+50).match(aa);g&&function(e,t){var n=Yt(t);n.s.r<=n.e.r&&n.s.c<=n.e.c&&n.s.r>=0&&n.s.c>=0&&(e[\"!ref\"]=Ut(n))}(a,g[1])}var p=l.match(ua);p&&p[1]&&function(e,t){(e.match(ga)||[]).forEach((function(e){Re(me(e).rightToLeft)&&(t.Views||(t.Views=[{}]),t.Views[0]||(t.Views[0]={}),t.Views[0].RTL=!0)}))}(p[1],i);var m=[];if(t.cellStyles){var C=l.match(ca);C&&function(e,t){for(var n=!1,r=0;r!=t.length;++r){var i=me(t[r],!0);i.hidden&&(i.hidden=Re(i.hidden));var s=parseInt(i.min,10)-1,o=parseInt(i.max,10)-1;for(delete i.min,delete i.max,i.width=+i.width,!n&&i.width&&(n=!0,cs(i.width)),ls(i);s<=o;)e[s++]=q(i)}}(m,C)}d&&wa(d[1],a,t,c,s,o);var b=h.match(la);b&&(a[\"!autofilter\"]=function(e){return{ref:(e.match(/ref=\"([^\"]*)\"/)||[])[1]}}(b[0]));var v=[],I=h.match(ia);if(I)for(f=0;f!=I.length;++f)v[f]=Yt(I[f].slice(I[f].indexOf('\"')+1));var A=h.match(oa);A&&function(e,t,n){for(var r=Array.isArray(e),i=0;i!=t.length;++i){var s=me(Be(t[i]),!0);if(!s.ref)return;var o=((n||{})[\"!id\"]||[])[s.id];o?(s.Target=o.Target,s.location&&(s.Target+=\"#\"+s.location)):(s.Target=\"#\"+s.location,o={Target:s.Target,TargetMode:\"Internal\"}),s.Rel=o,s.tooltip&&(s.Tooltip=s.tooltip,delete s.tooltip);for(var a=Yt(s.ref),c=a.s.r;c<=a.e.r;++c)for(var l=a.s.c;l<=a.e.c;++l){var h=Kt({c:l,r:c});r?(e[c]||(e[c]=[]),e[c][l]||(e[c][l]={t:\"z\",v:void 0}),e[c][l].l=s):(e[h]||(e[h]={t:\"z\",v:void 0}),e[h].l=s)}}}(a,A,r);var y=h.match(ha);if(y&&(a[\"!margins\"]=function(e){var t={};return[\"left\",\"right\",\"top\",\"bottom\",\"header\",\"footer\"].forEach((function(n){e[n]&&(t[n]=parseFloat(e[n]))})),t}(me(y[0]))),!a[\"!ref\"]&&c.e.c>=c.s.c&&c.e.r>=c.s.r&&(a[\"!ref\"]=Ut(c)),t.sheetRows>0&&a[\"!ref\"]){var w=Yt(a[\"!ref\"]);t.sheetRows<=+w.e.r&&(w.e.r=t.sheetRows-1,w.e.r>c.e.r&&(w.e.r=c.e.r),w.e.r<w.s.r&&(w.s.r=w.e.r),w.e.c>c.e.c&&(w.e.c=c.e.c),w.e.c<w.s.c&&(w.s.c=w.e.c),a[\"!fullref\"]=a[\"!ref\"],a[\"!ref\"]=Ut(w))}return m.length>0&&(a[\"!cols\"]=m),v.length>0&&(a[\"!merges\"]=v),a}(e,r,n,i,s,o,a)}(f,t,i,c,s[r],l,h,d);break;case\"chart\":if(!(u=function(e,t,n,r,i,s,o,a){return\".bin\"===t.slice(-4)?function(e,t,n,r,i){if(!e)return e;r||(r={\"!id\":{}});var s={\"!type\":\"chart\",\"!chart\":null,\"!rel\":\"\"},o=[],a=!1;return Pt(e,(function(e,r,c){switch(c){case 550:s[\"!rel\"]=e;break;case 651:i.Sheets[n]||(i.Sheets[n]={}),e.name&&(i.Sheets[n].CodeName=e.name);break;case 562:case 652:case 669:case 679:case 551:case 552:case 476:case 3072:break;case 35:a=!0;break;case 36:a=!1;break;case 37:o.push(r);break;case 38:o.pop();break;default:if((r||\"\").indexOf(\"Begin\")>0)o.push(r);else if((r||\"\").indexOf(\"End\")>0)o.pop();else if(!a||t.WTF)throw new Error(\"Unexpected record \"+c+\" \"+r)}}),t),r[\"!id\"][s[\"!rel\"]]&&(s[\"!chart\"]=r[\"!id\"][s[\"!rel\"]]),s}(e,r,n,i,s):function(e,t,n,r,i){if(!e)return e;r||(r={\"!id\":{}});var s,o={\"!type\":\"chart\",\"!chart\":null,\"!rel\":\"\"},a=e.match(da);return a&&fa(a[0],0,i,n),(s=e.match(/drawing r:id=\"(.*?)\"/))&&(o[\"!rel\"]=s[1]),r[\"!id\"][o[\"!rel\"]]&&(o[\"!chart\"]=r[\"!id\"][o[\"!rel\"]]),o}(e,0,n,i,s)}(f,t,i,c,s[r],l))||!u[\"!chart\"])break;var g=he(u[\"!chart\"].Target,t),p=jn(g),m=he(function(e,t){if(!e)return\"??\";var n=(e.match(/<c:chart [^>]*r:id=\"([^\"]*)\"/)||[\"\",\"\"])[1];return t[\"!id\"][n].Target}(le(e,g,!0),Zn(le(e,p,!0),g)),g),C=jn(m);u=function(e,t,n,r,i,s){var o=s||{\"!type\":\"chart\"};if(!e)return s;var a=0,c=0,l=\"A\",h={s:{r:2e6,c:2e6},e:{r:0,c:0}};return(e.match(/<c:numCache>[\\s\\S]*?<\\/c:numCache>/gm)||[]).forEach((function(e){var t=function(e){var t=[];(e.match(/<c:pt idx=\"(\\d*)\">(.*?)<\\/c:pt>/gm)||[]).forEach((function(e){var n=e.match(/<c:pt idx=\"(\\d*?)\"><c:v>(.*)<\\/c:v><\\/c:pt>/);n&&(t[+n[1]]=+n[2])}));var n=ye((e.match(/<c:formatCode>([\\s\\S]*?)<\\/c:formatCode>/)||[\"\",\"General\"])[1]);return[t,n]}(e);h.s.r=h.s.c=0,h.e.c=a,l=jt(a),t[0].forEach((function(e,n){o[l+Gt(n)]={t:\"n\",v:e,z:t[1]},c=n})),h.e.r<c&&(h.e.r=c),++a})),a>0&&(o[\"!ref\"]=Ut(h)),o}(le(e,m,!0),0,0,Zn(le(e,C,!0),m),0,u);break;case\"macro\":t.slice(-4),u={\"!type\":\"macro\"};break;case\"dialog\":t.slice(-4),u={\"!type\":\"dialog\"}}o[r]=u}catch(El){if(c.WTF)throw El}}function nl(e){return\"/\"==e.charAt(0)?e.slice(1):e}function rl(e,t){if(R(T),qc(t=t||{}),oe(e,\"META-INF/manifest.xml\"))return Mc(e,t);if(oe(e,\"objectdata.xml\"))return Mc(e,t);if(oe(e,\"Index/Document.iwa\"))throw new Error(\"Unsupported NUMBERS file\");var n,r,i=function(e){for(var t=W(e.files),n=[],r=0;r<t.length;++r)\"/\"!=t[r].slice(-1)&&n.push(t[r]);return n.sort()}(e),s=function(e){var t={workbooks:[],sheets:[],charts:[],dialogs:[],macros:[],rels:[],strs:[],comments:[],links:[],coreprops:[],extprops:[],custprops:[],themes:[],styles:[],calcchains:[],vba:[],drawings:[],TODO:[],xmlns:\"\"};if(!e||!e.match)return t;var n={};if((e.match(fe)||[]).forEach((function(e){var r=me(e);switch(r[0].replace(ge,\"<\")){case\"<?xml\":break;case\"<Types\":t.xmlns=r[\"xmlns\"+(r[0].match(/<(\\w+):/)||[\"\",\"\"])[1]];break;case\"<Default\":n[r.Extension]=r.ContentType;break;case\"<Override\":void 0!==t[Dn[r.ContentType]]&&t[Dn[r.ContentType]].push(r.PartName)}})),t.xmlns!==Qe.CT)throw new Error(\"Unknown Namespace: \"+t.xmlns);return t.calcchain=t.calcchains.length>0?t.calcchains[0]:\"\",t.sst=t.strs.length>0?t.strs[0]:\"\",t.style=t.styles.length>0?t.styles[0]:\"\",t.defaults=n,delete t.calcchains,t}(le(e,\"[Content_Types].xml\")),o=!1;if(0===s.workbooks.length&&ce(e,r=\"xl/workbook.xml\",!0)&&s.workbooks.push(r),0===s.workbooks.length){if(!ce(e,r=\"xl/workbook.bin\",!0))throw new Error(\"Could not find workbook\");s.workbooks.push(r),o=!0}\"bin\"==s.workbooks[0].slice(-3)&&(o=!0);var a={},c={};if(!t.bookSheets&&!t.bookProps){if(Uo=[],s.sst)try{Uo=function(e,t,n){return\".bin\"===t.slice(-4)?function(e,t){var n=[],r=!1;return Pt(e,(function(e,i,s){switch(s){case 159:n.Count=e[0],n.Unique=e[1];break;case 19:n.push(e);break;case 160:return!0;case 35:r=!0;break;case 36:r=!1;break;default:if(i.indexOf(\"Begin\")>0||i.indexOf(\"End\"),!r||t.WTF)throw new Error(\"Unexpected record \"+s+\" \"+i)}})),n}(e,n):function(e,t){var n=[],r=\"\";if(!e)return n;var i=e.match(Li);if(i){r=i[2].replace(Pi,\"\").split(Fi);for(var s=0;s!=r.length;++s){var o=Oi(r[s].trim(),t);null!=o&&(n[n.length]=o)}i=me(i[1]),n.Count=i.count,n.Unique=i.uniqueCount}return n}(e,n)}(ce(e,nl(s.sst)),s.sst,t)}catch(El){if(t.WTF)throw El}t.cellStyles&&s.themes.length&&(a=function(e,t,n){return Ds(e,n)}(le(e,s.themes[0].replace(/^\\//,\"\"),!0)||\"\",0,t)),s.style&&(c=function(e,t,n,r){return\".bin\"===t.slice(-4)?function(e,t,n){var r={NumberFmt:[]};for(var i in T._table)r.NumberFmt[i]=T._table[i];r.CellXf=[],r.Fonts=[];var s=[],o=!1;return Pt(e,(function(e,i,a){switch(a){case 44:r.NumberFmt[e[0]]=e[1],T.load(e[1],e[0]);break;case 43:r.Fonts.push(e),null!=e.color.theme&&t&&t.themeElements&&t.themeElements.clrScheme&&(e.color.rgb=ns(t.themeElements.clrScheme[e.color.theme].rgb,e.color.tint||0));break;case 1025:case 45:case 46:break;case 47:\"BrtBeginCellXFs\"==s[s.length-1]&&r.CellXf.push(e);break;case 48:case 507:case 572:case 475:break;case 1171:case 2102:case 1130:case 512:case 2095:case 3072:break;case 35:o=!0;break;case 36:o=!1;break;case 37:s.push(i);break;case 38:s.pop();break;default:if((i||\"\").indexOf(\"Begin\")>0)s.push(i);else if((i||\"\").indexOf(\"End\")>0)s.pop();else if(!o||n.WTF)throw new Error(\"Unexpected record \"+a+\" \"+i)}})),r}(e,n,r):Is(e,n,r)}(ce(e,nl(s.style)),s.style,a,t))}s.links.map((function(n){return function(e,t,n){if(\".bin\"===t.slice(-4))return function(e,t,n){if(!e)return e;var r=n||{},i=!1;Pt(e,(function(e,t,n){switch(n){case 359:case 363:case 364:case 366:case 367:case 368:case 369:case 370:case 371:case 472:case 577:case 578:case 579:case 580:case 581:case 582:case 583:case 584:case 585:case 586:case 587:break;case 35:i=!0;break;case 36:i=!1;break;default:if((t||\"\").indexOf(\"Begin\")>0);else if((t||\"\").indexOf(\"End\")>0);else if(!i||r.WTF)throw new Error(\"Unexpected record \"+n.toString(16)+\" \"+t)}}),r)}(e,0,n)}(ce(e,nl(n)),n,t)}));var l=function(e,t,n){return\".bin\"===t.slice(-4)?function(e,t){var n={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},xmlns:\"\"},r=[],i=!1;t||(t={}),t.biff=12;var s=[],o=[[]];return o.SheetNames=[],o.XTI=[],Pt(e,(function(e,a,c){switch(c){case 156:o.SheetNames.push(e.name),n.Sheets.push(e);break;case 153:n.WBProps=e;break;case 39:null!=e.Sheet&&(t.SID=e.Sheet),e.Ref=Po(e.Ptg,0,null,o,t),delete t.SID,delete e.Ptg,s.push(e);break;case 1036:break;case 357:case 358:case 355:case 667:o[0].length?o.push([c,e]):o[0]=[c,e],o[o.length-1].XTI=[];break;case 362:0===o.length&&(o[0]=[],o[0].XTI=[]),o[o.length-1].XTI=o[o.length-1].XTI.concat(e),o.XTI=o.XTI.concat(e);break;case 361:break;case 3072:case 3073:case 2071:case 534:case 677:case 158:case 157:case 610:case 2050:case 155:case 548:case 676:case 128:case 665:case 2128:case 2125:case 549:case 2053:case 596:case 2076:case 2075:case 2082:case 397:case 154:case 1117:case 553:case 2091:break;case 35:r.push(a),i=!0;break;case 36:r.pop(),i=!1;break;case 37:r.push(a),i=!0;break;case 38:r.pop(),i=!1;break;case 16:break;default:if((a||\"\").indexOf(\"Begin\")>0);else if((a||\"\").indexOf(\"End\")>0);else if(!i||t.WTF&&\"BrtACBegin\"!=r[r.length-1]&&\"BrtFRTBegin\"!=r[r.length-1])throw new Error(\"Unexpected record \"+c+\" \"+a)}}),t),Wa(n),n.Names=s,n.supbooks=o,n}(e,n):function(e,t){if(!e)throw new Error(\"Could not find file\");var n={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},Names:[],xmlns:\"\"},r=!1,i=\"xmlns\",s={},o=0;if(e.replace(fe,(function(a,c){var l=me(a);switch(Ce(l[0])){case\"<?xml\":break;case\"<workbook\":a.match(Va)&&(i=\"xmlns\"+a.match(/<(\\w+):/)[1]),n.xmlns=l[i];break;case\"</workbook>\":break;case\"<fileVersion\":delete l[0],n.AppVersion=l;break;case\"<fileVersion/>\":case\"</fileVersion>\":break;case\"<fileSharing\":case\"<fileSharing/>\":break;case\"<workbookPr\":case\"<workbookPr/>\":Pa.forEach((function(e){if(null!=l[e[0]])switch(e[2]){case\"bool\":n.WBProps[e[0]]=Re(l[e[0]]);break;case\"int\":n.WBProps[e[0]]=parseInt(l[e[0]],10);break;default:n.WBProps[e[0]]=l[e[0]]}})),l.codeName&&(n.WBProps.CodeName=l.codeName);break;case\"</workbookPr>\":case\"<workbookProtection\":case\"<workbookProtection/>\":break;case\"<bookViews\":case\"<bookViews>\":case\"</bookViews>\":break;case\"<workbookView\":case\"<workbookView/>\":delete l[0],n.WBView.push(l);break;case\"</workbookView>\":break;case\"<sheets\":case\"<sheets>\":case\"</sheets>\":break;case\"<sheet\":switch(l.state){case\"hidden\":l.Hidden=1;break;case\"veryHidden\":l.Hidden=2;break;default:l.Hidden=0}delete l.state,l.name=ye(Be(l.name)),delete l[0],n.Sheets.push(l);break;case\"</sheet>\":break;case\"<functionGroups\":case\"<functionGroups/>\":case\"<functionGroup\":break;case\"<externalReferences\":case\"</externalReferences>\":case\"<externalReferences>\":case\"<externalReference\":case\"<definedNames/>\":break;case\"<definedNames>\":case\"<definedNames\":r=!0;break;case\"</definedNames>\":r=!1;break;case\"<definedName\":(s={}).Name=Be(l.name),l.comment&&(s.Comment=l.comment),l.localSheetId&&(s.Sheet=+l.localSheetId),Re(l.hidden||\"0\")&&(s.Hidden=!0),o=c+a.length;break;case\"</definedName>\":s.Ref=ye(Be(e.slice(o,c))),n.Names.push(s);break;case\"<definedName/>\":break;case\"<calcPr\":case\"<calcPr/>\":delete l[0],n.CalcPr=l;break;case\"</calcPr>\":case\"<oleSize\":break;case\"<customWorkbookViews>\":case\"</customWorkbookViews>\":case\"<customWorkbookViews\":break;case\"<customWorkbookView\":case\"</customWorkbookView>\":break;case\"<pivotCaches>\":case\"</pivotCaches>\":case\"<pivotCaches\":case\"<pivotCache\":break;case\"<smartTagPr\":case\"<smartTagPr/>\":break;case\"<smartTagTypes\":case\"<smartTagTypes>\":case\"</smartTagTypes>\":case\"<smartTagType\":break;case\"<webPublishing\":case\"<webPublishing/>\":break;case\"<fileRecoveryPr\":case\"<fileRecoveryPr/>\":break;case\"<webPublishObjects>\":case\"<webPublishObjects\":case\"</webPublishObjects>\":case\"<webPublishObject\":break;case\"<extLst\":case\"<extLst>\":case\"</extLst>\":case\"<extLst/>\":break;case\"<ext\":r=!0;break;case\"</ext>\":r=!1;break;case\"<ArchID\":break;case\"<AlternateContent\":case\"<AlternateContent>\":r=!0;break;case\"</AlternateContent>\":r=!1;break;case\"<revisionPtr\":break;default:if(!r&&t.WTF)throw new Error(\"unrecognized \"+l[0]+\" in workbook\")}return a})),-1===Qe.main.indexOf(n.xmlns))throw new Error(\"Unknown Namespace: \"+n.xmlns);return Wa(n),n}(e,n)}(ce(e,nl(s.workbooks[0])),s.workbooks[0],t),h={},d=\"\";s.coreprops.length&&((d=ce(e,nl(s.coreprops[0]),!0))&&(h=er(d)),0!==s.extprops.length&&(d=ce(e,nl(s.extprops[0]),!0))&&function(e,t,n){var r={};t||(t={}),e=Be(e),rr.forEach((function(n){switch(n[2]){case\"string\":t[n[1]]=(e.match($e(n[0]))||[])[1];break;case\"bool\":t[n[1]]=\"true\"===(e.match($e(n[0]))||[])[1];break;case\"raw\":var i=e.match(new RegExp(\"<\"+n[0]+\"[^>]*>([\\\\s\\\\S]*?)</\"+n[0]+\">\"));i&&i.length>0&&(r[n[1]]=i[1])}})),r.HeadingPairs&&r.TitlesOfParts&&ir(r.HeadingPairs,r.TitlesOfParts,t,n)}(d,h,t));var u={};t.bookSheets&&!t.bookProps||0!==s.custprops.length&&(d=le(e,nl(s.custprops[0]),!0))&&(u=function(e,t){var n={},r=\"\",i=e.match(or);if(i)for(var s=0;s!=i.length;++s){var o=i[s],a=me(o);switch(a[0]){case\"<?xml\":case\"<Properties\":break;case\"<property\":r=a.name;break;case\"</property>\":r=null;break;default:if(0===o.indexOf(\"<vt:\")){var c=o.split(\">\"),l=c[0].slice(4),h=c[1];switch(l){case\"lpstr\":case\"bstr\":case\"lpwstr\":n[r]=ye(h);break;case\"bool\":n[r]=Re(h);break;case\"i1\":case\"i2\":case\"i4\":case\"i8\":case\"int\":case\"uint\":n[r]=parseInt(h,10);break;case\"r4\":case\"r8\":case\"decimal\":n[r]=parseFloat(h);break;case\"filetime\":case\"date\":n[r]=J(h);break;case\"cy\":case\"error\":n[r]=ye(h);break;default:if(\"/\"==l.slice(-1))break;t.WTF&&\"undefined\"!=typeof console&&console.warn(\"Unexpected\",o,l,c)}}else if(\"</\"===o.slice(0,2));else if(t.WTF)throw new Error(o)}}return n}(d,t));var f={};if((t.bookSheets||t.bookProps)&&(l.Sheets?n=l.Sheets.map((function(e){return e.name})):h.Worksheets&&h.SheetNames.length>0&&(n=h.SheetNames),t.bookProps&&(f.Props=h,f.Custprops=u),t.bookSheets&&void 0!==n&&(f.SheetNames=n),t.bookSheets?f.SheetNames:t.bookProps))return f;n={};var g,p={};t.bookDeps&&s.calcchain&&(g=ce(e,nl(s.calcchain)),p=\".bin\"===s.calcchain.slice(-4)?function(e,t,n){var r=[];return Pt(e,(function(e,t,n){switch(n){case 63:r.push(e);break;default:if((t||\"\").indexOf(\"Begin\")>0);else if(!((t||\"\").indexOf(\"End\")>0))throw new Error(\"Unexpected record \"+n+\" \"+t)}})),r}(g):function(e){var t=[];if(!e)return t;var n=1;return(e.match(fe)||[]).forEach((function(e){var r=me(e);switch(r[0]){case\"<?xml\":break;case\"<calcChain\":case\"<calcChain>\":case\"</calcChain>\":break;case\"<c\":delete r[0],r.i?n=r.i:r.i=n,t.push(r)}})),t}(g));var m,C,b=0,v={},I=l.Sheets;h.Worksheets=I.length,h.SheetNames=[];for(var A=0;A!=I.length;++A)h.SheetNames[A]=I[A].name;var y=o?\"bin\":\"xml\",w=s.workbooks[0].lastIndexOf(\"/\"),S=(s.workbooks[0].slice(0,w+1)+\"_rels/\"+s.workbooks[0].slice(w+1)+\".rels\").replace(/^\\//,\"\");oe(e,S)||(S=\"xl/_rels/workbook.\"+y+\".rels\");var x=Zn(le(e,S,!0),S);x&&(x=function(e,t){if(!e)return 0;try{e=t.map((function(t){return t.id||(t.id=t.strRelID),[t.name,e[\"!id\"][t.id].Target,(n=e[\"!id\"][t.id].Type,Vn.WS.indexOf(n)>-1?\"sheet\":Vn.CS&&n==Vn.CS?\"chart\":Vn.DS&&n==Vn.DS?\"dialog\":Vn.MS&&n==Vn.MS?\"macro\":n&&n.length?n:\"sheet\")];var n}))}catch(El){return null}return e&&0!==e.length?e:null}(x,l.Sheets));var E=ce(e,\"xl/worksheets/sheet.xml\",!0)?1:0;for(b=0;b!=h.Worksheets;++b){var k=\"sheet\";x&&x[b]?(m=\"xl/\"+x[b][1].replace(/[\\/]?xl\\//,\"\"),oe(e,m)||(m=x[b][1]),oe(e,m)||(m=S.replace(/_rels\\/.*$/,\"\")+x[b][1]),k=x[b][2]):m=(m=\"xl/worksheets/sheet\"+(b+1-E)+\".\"+y).replace(/sheet0\\./,\"sheet.\"),C=m.replace(/^(.*)(\\/)([^\\/]*)$/,\"$1/_rels/$3.rels\"),tl(e,m,C,h.SheetNames[b],b,v,n,k,t,l,a,c)}return s.comments&&function(e,t,n,r,i){for(var s=0;s!=t.length;++s){var o=t[s],a=Xa(ce(e,o.replace(/^\\//,\"\"),!0),o,i);if(a&&a.length)for(var c=W(n),l=0;l!=c.length;++l){var h=c[l],d=r[h];d&&d[o]&&Vs(0,n[h],a)}}}(e,s.comments,n,v,t),f={Directory:s,Workbook:l,Props:h,Custprops:u,Deps:p,Sheets:n,SheetNames:h.SheetNames,Strings:Uo,Styles:c,Themes:a,SSF:T.get_table()},t.bookFiles&&(f.keys=i,f.files=e.files),t.bookVBA&&(s.vba.length>0?f.vbaraw=ce(e,nl(s.vba[0]),!0):s.defaults&&\"application/vnd.ms-office.vbaProject\"===s.defaults.bin&&(f.vbaraw=ce(e,\"xl/vbaProject.bin\",!0))),f}function il(e,t){if(Hs=1024,\"ods\"==t.bookType)return Hc(e,t);e&&!e.SSF&&(e.SSF=T.get_table()),e&&e.SSF&&(R(T),T.load_table(e.SSF),t.revssf=V(e.SSF),t.revssf[e.SSF[65535]]=0,t.ssf=e.SSF),t.rels={},t.wbrels={},t.Strings=[],t.Strings.Count=0,t.Strings.Unique=0,Jo?t.revStrings=new Map:(t.revStrings={},t.revStrings.foo=[],delete t.revStrings.foo);var n=\"xlsb\"==t.bookType?\"bin\":\"xml\",r=Xs.indexOf(t.bookType)>-1,i={workbooks:[],sheets:[],charts:[],dialogs:[],macros:[],rels:[],strs:[],comments:[],links:[],coreprops:[],extprops:[],custprops:[],themes:[],styles:[],calcchains:[],vba:[],drawings:[],TODO:[],xmlns:\"\"};el(t=t||{});var s=new re,o=\"\",a=0;if(t.cellXfs=[],ta(t.cellXfs,{},{revssf:{General:0}}),e.Props||(e.Props={}),s.file(o=\"docProps/core.xml\",function(e,t){var n=t||{},r=[de,tr],i={};if(!e&&!n.Props)return r.join(\"\");e&&(null!=e.CreatedDate&&nr(\"dcterms:created\",\"string\"==typeof e.CreatedDate?e.CreatedDate:Ue(e.CreatedDate,n.WTF),{\"xsi:type\":\"dcterms:W3CDTF\"},r,i),null!=e.ModifiedDate&&nr(\"dcterms:modified\",\"string\"==typeof e.ModifiedDate?e.ModifiedDate:Ue(e.ModifiedDate,n.WTF),{\"xsi:type\":\"dcterms:W3CDTF\"},r,i));for(var s=0;s!=Qn.length;++s){var o=Qn[s],a=n.Props&&null!=n.Props[o[1]]?n.Props[o[1]]:e?e[o[1]]:null;!0===a?a=\"1\":!1===a?a=\"0\":\"number\"==typeof a&&(a=String(a)),null!=a&&nr(o[0],a,null,r,i)}return r.length>2&&(r[r.length]=\"</cp:coreProperties>\",r[1]=r[1].replace(\"/>\",\">\")),r.join(\"\")}(e.Props,t)),i.coreprops.push(o),Xn(t.rels,2,o,Vn.CORE_PROPS),o=\"docProps/app.xml\",e.Props&&e.Props.SheetNames);else if(e.Workbook&&e.Workbook.Sheets){for(var c=[],l=0;l<e.SheetNames.length;++l)2!=(e.Workbook.Sheets[l]||{}).Hidden&&c.push(e.SheetNames[l]);e.Props.SheetNames=c}else e.Props.SheetNames=e.SheetNames;for(e.Props.Worksheets=e.Props.SheetNames.length,s.file(o,function(e){var t=[],n=Xe;return e||(e={}),e.Application=\"SheetJS\",t[t.length]=de,t[t.length]=sr,rr.forEach((function(r){if(void 0!==e[r[1]]){var i;switch(r[2]){case\"string\":i=String(e[r[1]]);break;case\"bool\":i=e[r[1]]?\"true\":\"false\"}void 0!==i&&(t[t.length]=n(r[0],i))}})),t[t.length]=n(\"HeadingPairs\",n(\"vt:vector\",n(\"vt:variant\",\"<vt:lpstr>Worksheets</vt:lpstr>\")+n(\"vt:variant\",n(\"vt:i4\",String(e.Worksheets))),{size:2,baseType:\"variant\"})),t[t.length]=n(\"TitlesOfParts\",n(\"vt:vector\",e.SheetNames.map((function(e){return\"<vt:lpstr>\"+xe(e)+\"</vt:lpstr>\"})).join(\"\"),{size:e.Worksheets,baseType:\"lpstr\"})),t.length>2&&(t[t.length]=\"</Properties>\",t[1]=t[1].replace(\"/>\",\">\")),t.join(\"\")}(e.Props)),i.extprops.push(o),Xn(t.rels,3,o,Vn.EXT_PROPS),e.Custprops!==e.Props&&W(e.Custprops||{}).length>0&&(s.file(o=\"docProps/custom.xml\",function(e){var t=[de,ar];if(!e)return t.join(\"\");var n=1;return W(e).forEach((function(r){++n,t[t.length]=Xe(\"property\",function(e){switch(typeof e){case\"string\":return Xe(\"vt:lpwstr\",e);case\"number\":return Xe((0|e)==e?\"vt:i4\":\"vt:r8\",String(e));case\"boolean\":return Xe(\"vt:bool\",e?\"true\":\"false\")}if(e instanceof Date)return Xe(\"vt:filetime\",Ue(e));throw new Error(\"Unable to serialize \"+e)}(e[r]),{fmtid:\"{D5CDD505-2E9C-101B-9397-08002B2CF9AE}\",pid:n,name:r})})),t.length>2&&(t[t.length]=\"</Properties>\",t[1]=t[1].replace(\"/>\",\">\")),t.join(\"\")}(e.Custprops)),i.custprops.push(o),Xn(t.rels,4,o,Vn.CUST_PROPS)),a=1;a<=e.SheetNames.length;++a){var h={\"!id\":{}},d=e.Sheets[e.SheetNames[a-1]];switch((d||{})[\"!type\"]||\"sheet\"){case\"chart\":default:s.file(o=\"xl/worksheets/sheet\"+a+\".\"+n,Ya(a-1,o,t,e,h)),i.sheets.push(o),Xn(t.wbrels,-1,\"worksheets/sheet\"+a+\".\"+n,Vn.WS[0])}if(d){var u=d[\"!comments\"],f=!1;if(u&&u.length>0){var g=\"xl/comments\"+a+\".\"+n;s.file(g,Qa(u,g,t)),i.comments.push(g),Xn(h,-1,\"../comments\"+a+\".\"+n,Vn.CMNT),f=!0}d[\"!legacy\"]&&f&&s.file(\"xl/drawings/vmlDrawing\"+a+\".vml\",Gs(a,d[\"!comments\"])),delete d[\"!comments\"],delete d[\"!legacy\"]}h[\"!id\"].rId1&&s.file(jn(o),Kn(h))}return null!=t.Strings&&t.Strings.length>0&&(s.file(o=\"xl/sharedStrings.\"+n,Ja(t.Strings,o,t)),i.strs.push(o),Xn(t.wbrels,-1,\"sharedStrings.\"+n,Vn.SST)),s.file(o=\"xl/workbook.\"+n,Ua(e,o,t)),i.workbooks.push(o),Xn(t.rels,1,o,Vn.WB),s.file(o=\"xl/theme/theme1.xml\",$s(0,t)),i.themes.push(o),Xn(t.wbrels,-1,\"theme/theme1.xml\",Vn.THEME),s.file(o=\"xl/styles.\"+n,function(e,t,n){return(\".bin\"===t.slice(-4)?Rs:ys)(e,n)}(e,o,t)),i.styles.push(o),Xn(t.wbrels,-1,\"styles.\"+n,Vn.STY),e.vbaraw&&r&&(s.file(o=\"xl/vbaProject.bin\",e.vbaraw),i.vba.push(o),Xn(t.wbrels,-1,\"vbaProject.bin\",Vn.VBA)),s.file(\"[Content_Types].xml\",function(e,t){var n,r=[];r[r.length]=de,r[r.length]=Hn,r=r.concat(Gn);var i=function(i){e[i]&&e[i].length>0&&(r[r.length]=Xe(\"Override\",null,{PartName:(\"/\"==(n=e[i][0])[0]?\"\":\"/\")+n,ContentType:$n[i][t.bookType||\"xlsx\"]}))},s=function(n){(e[n]||[]).forEach((function(e){r[r.length]=Xe(\"Override\",null,{PartName:(\"/\"==e[0]?\"\":\"/\")+e,ContentType:$n[n][t.bookType||\"xlsx\"]})}))},o=function(t){(e[t]||[]).forEach((function(e){r[r.length]=Xe(\"Override\",null,{PartName:(\"/\"==e[0]?\"\":\"/\")+e,ContentType:Wn[t][0]})}))};return i(\"workbooks\"),s(\"sheets\"),s(\"charts\"),o(\"themes\"),[\"strs\",\"styles\"].forEach(i),[\"coreprops\",\"extprops\",\"custprops\"].forEach(o),o(\"vba\"),o(\"comments\"),o(\"drawings\"),r.length>2&&(r[r.length]=\"</Types>\",r[1]=r[1].replace(\"/>\",\">\")),r.join(\"\")}(i,t)),s.file(\"_rels/.rels\",Kn(t.rels)),s.file(\"xl/_rels/workbook.\"+n+\".rels\",Kn(t.wbrels)),delete t.revssf,delete t.ssf,s}function sl(e,t){var n=\"\";switch((t||{}).type||\"base64\"){case\"buffer\":return[e[0],e[1],e[2],e[3]];case\"base64\":n=m.decode(e.slice(0,24));break;case\"binary\":n=e;break;case\"array\":return[e[0],e[1],e[2],e[3]];default:throw new Error(\"Unrecognized type \"+(t&&t.type||\"undefined\"))}return[n.charCodeAt(0),n.charCodeAt(1),n.charCodeAt(2),n.charCodeAt(3)]}function ol(e,t){var n=0;e:for(;n<e.length;)switch(e.charCodeAt(n)){case 10:case 13:case 32:++n;break;case 60:return dc(e.slice(n),t);default:break e}return Ei.to_workbook(e,t)}function al(e,t,n,r){return r?(n.type=\"string\",Ei.to_workbook(e,n)):Ei.to_workbook(t,n)}function cl(e,t){if(h(),\"undefined\"!=typeof ArrayBuffer&&e instanceof ArrayBuffer)return cl(new Uint8Array(e),t);var n,r=e,i=!1,s=t||{};if(Yo={},s.dateNF&&(Yo.dateNF=s.dateNF),s.type||(s.type=C&&Buffer.isBuffer(e)?\"buffer\":\"base64\"),\"file\"==s.type&&(s.type=C?\"buffer\":\"binary\",r=function(e){if(void 0!==F)return F.readFileSync(e);if(\"undefined\"!=typeof $&&\"undefined\"!=typeof File&&\"undefined\"!=typeof Folder)try{var t=File(e);t.open(\"r\"),t.encoding=\"binary\";var n=t.read();return t.close(),n}catch(El){if(!El.message||!El.message.match(/onstruct/))throw El}throw new Error(\"Cannot access file \"+e)}(e)),\"string\"==s.type&&(i=!0,s.type=\"binary\",s.codepage=65001,r=function(e){return e.match(/[^\\x00-\\x7F]/)?Oe(e):e}(e)),\"array\"==s.type&&\"undefined\"!=typeof Uint8Array&&e instanceof Uint8Array&&\"undefined\"!=typeof ArrayBuffer){var o=new ArrayBuffer(3),a=new Uint8Array(o);if(a.foo=\"bar\",!a.foo)return(s=q(s)).type=\"array\",cl(x(r),s)}switch((n=sl(r,s))[0]){case 208:return function(e,t){return N.find(e,\"EncryptedPackage\")?function(e,t){var n=t||{},r=\"Workbook\",i=N.find(e,r);try{if(!(i=N.find(e,r=\"/!DataSpaces/Version\"))||!i.content)throw new Error(\"ECMA-376 Encrypted file missing \"+r);if(function(e){var t={};t.id=e.read_shift(0,\"lpp4\"),t.R=Hi(e,4),t.U=Hi(e,4),t.W=Hi(e,4)}(i.content),!(i=N.find(e,r=\"/!DataSpaces/DataSpaceMap\"))||!i.content)throw new Error(\"ECMA-376 Encrypted file missing \"+r);var s=function(e){var t=[];e.l+=4;for(var n=e.read_shift(4);n-- >0;)t.push(Gi(e));return t}(i.content);if(1!==s.length||1!==s[0].comps.length||0!==s[0].comps[0].t||\"StrongEncryptionDataSpace\"!==s[0].name||\"EncryptedPackage\"!==s[0].comps[0].v)throw new Error(\"ECMA-376 Encrypted file bad \"+r);if(!(i=N.find(e,r=\"/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace\"))||!i.content)throw new Error(\"ECMA-376 Encrypted file missing \"+r);var o=function(e){var t=[];e.l+=4;for(var n=e.read_shift(4);n-- >0;)t.push(e.read_shift(0,\"lpp4\"));return t}(i.content);if(1!=o.length||\"StrongEncryptionTransform\"!=o[0])throw new Error(\"ECMA-376 Encrypted file bad \"+r);if(!(i=N.find(e,r=\"/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary\"))||!i.content)throw new Error(\"ECMA-376 Encrypted file missing \"+r);!function(e){var t=function(e){var t={};return e.read_shift(4),e.l+=4,t.id=e.read_shift(0,\"lpp4\"),t.name=e.read_shift(0,\"lpp4\"),t.R=Hi(e,4),t.U=Hi(e,4),t.W=Hi(e,4),t}(e);if(t.ename=e.read_shift(0,\"8lpp4\"),t.blksz=e.read_shift(4),t.cmode=e.read_shift(4),4!=e.read_shift(4))throw new Error(\"Bad !Primary record\")}(i.content)}catch(El){}if(!(i=N.find(e,r=\"/EncryptionInfo\"))||!i.content)throw new Error(\"ECMA-376 Encrypted file missing \"+r);var a=function(e){var t=Hi(e);switch(t.Minor){case 2:return[t.Minor,Zi(e)];case 3:return[t.Minor,zi()];case 4:return[t.Minor,Ki(e)]}throw new Error(\"ECMA-376 Encrypted file unrecognized Version: \"+t.Minor)}(i.content);if(!(i=N.find(e,r=\"/EncryptedPackage\"))||!i.content)throw new Error(\"ECMA-376 Encrypted file missing \"+r);if(4==a[0]&&\"undefined\"!=typeof decrypt_agile)return decrypt_agile(a[1],i.content,n.password||\"\",n);if(2==a[0]&&\"undefined\"!=typeof decrypt_std76)return decrypt_std76(a[1],i.content,n.password||\"\",n);throw new Error(\"File is password-protected\")}(e,t):Ac(e,t)}(N.read(r,s),s);case 9:return Ac(r,s);case 60:return dc(r,s);case 73:if(68===n[1])return function(e,t){var n=t||{},r=!!n.WTF;n.WTF=!0;try{var i=wi.to_workbook(e,n);return n.WTF=r,i}catch(El){if(n.WTF=r,!El.message.match(/SYLK bad record ID/)&&r)throw El;return Ei.to_workbook(e,t)}}(r,s);break;case 84:if(65===n[1]&&66===n[2]&&76===n[3])return Si.to_workbook(r,s);break;case 80:return 75===n[1]&&n[2]<9&&n[3]<9?function(e,t){var n,r=e,i=t||{};switch(i.type||(i.type=C&&Buffer.isBuffer(e)?\"buffer\":\"base64\"),i.type){case\"base64\":n=new re(r,{base64:!0});break;case\"binary\":case\"array\":n=new re(r,{base64:!1});break;case\"buffer\":n=new re(r);break;default:throw new Error(\"Unrecognized type \"+i.type)}return rl(n,i)}(r,s):al(e,r,s,i);case 239:return 60===n[3]?dc(r,s):al(e,r,s,i);case 255:if(254===n[1])return function(e,t){var n=e;return\"base64\"==t.type&&(n=m.decode(n)),n=cptable.utils.decode(1200,n.slice(2),\"str\"),t.type=\"binary\",ol(n,t)}(r,s);break;case 0:if(0===n[1]&&n[2]>=2&&0===n[3])return ki.to_workbook(r,s);break;case 3:case 131:case 139:case 140:return yi.to_workbook(r,s);case 123:if(92===n[1]&&114===n[2]&&116===n[3])return es.to_workbook(r,s);break;case 10:case 13:case 32:return function(e,t){var n=\"\",r=sl(e,t);switch(t.type){case\"base64\":n=m.decode(e);break;case\"binary\":n=e;break;case\"buffer\":n=e.toString(\"binary\");break;case\"array\":n=Q(e);break;default:throw new Error(\"Unrecognized type \"+t.type)}return 239==r[0]&&187==r[1]&&191==r[2]&&(n=Be(n)),ol(n,t)}(r,s)}return n[2]<=12&&n[3]<=31?yi.to_workbook(r,s):al(e,r,s,i)}function ll(e,t){var n=t||{};return n.type=\"file\",cl(e,n)}function hl(e,t){switch(t.type){case\"base64\":case\"binary\":break;case\"buffer\":case\"array\":t.type=\"\";break;case\"file\":return D(t.file,N.write(e,{type:C?\"buffer\":\"\"}));case\"string\":throw new Error(\"'string' output type invalid for '\"+t.bookType+\"' files\");default:throw new Error(\"Unrecognized type \"+t.type)}return N.write(e,t)}function dl(e,t,n){n||(n=\"\");var r=n+e;switch(t.type){case\"base64\":return m.encode(Oe(r));case\"binary\":return Oe(r);case\"string\":return e;case\"file\":return D(t.file,r,\"utf8\");case\"buffer\":return C?b(r,\"utf8\"):dl(r,{type:\"binary\"}).split(\"\").map((function(e){return e.charCodeAt(0)}))}throw new Error(\"Unrecognized type \"+t.type)}function ul(e,t){switch(t.type){case\"string\":case\"base64\":case\"binary\":for(var n=\"\",r=0;r<e.length;++r)n+=String.fromCharCode(e[r]);return\"base64\"==t.type?m.encode(n):\"string\"==t.type?Be(n):n;case\"file\":return D(t.file,e);case\"buffer\":return e;default:throw new Error(\"Unrecognized type \"+t.type)}}function fl(e,t){!function(e){if(!e||!e.SheetNames||!e.Sheets)throw new Error(\"Invalid Workbook\");if(!e.SheetNames.length)throw new Error(\"Workbook is empty\");var t,n,r;n=e.Workbook&&e.Workbook.Sheets||[],r=!!e.vbaraw,(t=e.SheetNames).forEach((function(e,i){Ga(e);for(var s=0;s<i;++s)if(e==t[s])throw new Error(\"Duplicate Sheet Name: \"+e);if(r){var o=n&&n[i]&&n[i].CodeName||e;if(95==o.charCodeAt(0)&&o.length>22)throw new Error(\"Bad Code Name: Worksheet\"+o)}}));for(var i=0;i<e.SheetNames.length;++i)ra(e.Sheets[e.SheetNames[i]],0,i)}(e);var n=t||{};if(\"array\"==n.type){n.type=\"binary\";var r=fl(e,n);return n.type=\"array\",w(r)}switch(n.bookType||\"xlsb\"){case\"xml\":case\"xlml\":return dl(function(e,t){t||(t={}),e.SSF||(e.SSF=T.get_table()),e.SSF&&(R(T),T.load_table(e.SSF),t.revssf=V(e.SSF),t.revssf[e.SSF[65535]]=0,t.ssf=e.SSF,t.cellXfs=[],ta(t.cellXfs,{},{revssf:{General:0}}));var n=[];n.push(function(e,t){var n=[];return e.Props&&n.push(function(e,t){var n=[];return W(cr).map((function(e){for(var t=0;t<Qn.length;++t)if(Qn[t][1]==e)return Qn[t];for(t=0;t<rr.length;++t)if(rr[t][1]==e)return rr[t];throw e})).forEach((function(r){if(null!=e[r[1]]){var i=t&&t.Props&&null!=t.Props[r[1]]?t.Props[r[1]]:e[r[1]];switch(r[2]){case\"date\":i=new Date(i).toISOString().replace(/\\.\\d*Z/,\"Z\")}\"number\"==typeof i?i=String(i):!0===i||!1===i?i=i?\"1\":\"0\":i instanceof Date&&(i=new Date(i).toISOString().replace(/\\.\\d*Z/,\"\")),n.push(ze(cr[r[1]]||r[1],i))}})),Xe(\"DocumentProperties\",n.join(\"\"),{xmlns:qe})}(e.Props,t)),e.Custprops&&n.push(function(e,t){var n=[\"Worksheets\",\"SheetNames\"],r=\"CustomDocumentProperties\",i=[];return e&&W(e).forEach((function(t){if(e.hasOwnProperty(t)){for(var r=0;r<Qn.length;++r)if(t==Qn[r][1])return;for(r=0;r<rr.length;++r)if(t==rr[r][1])return;for(r=0;r<n.length;++r)if(t==n[r])return;var s=e[t],o=\"string\";\"number\"==typeof s?(o=\"float\",s=String(s)):!0===s||!1===s?(o=\"boolean\",s=s?\"1\":\"0\"):s=String(s),i.push(Xe(Ee(t),s,{\"dt:dt\":o}))}})),t&&W(t).forEach((function(n){if(t.hasOwnProperty(n)&&(!e||!e.hasOwnProperty(n))){var r=t[n],s=\"string\";\"number\"==typeof r?(s=\"float\",r=String(r)):!0===r||!1===r?(s=\"boolean\",r=r?\"1\":\"0\"):r instanceof Date?(s=\"dateTime.tz\",r=r.toISOString()):r=String(r),i.push(Xe(Ee(n),r,{\"dt:dt\":s}))}})),\"<\"+r+' xmlns=\"'+qe+'\">'+i.join(\"\")+\"</\"+r+\">\"}(e.Props,e.Custprops)),n.join(\"\")}(e,t)),n.push(\"\"),n.push(\"\"),n.push(\"\");for(var r=0;r<e.SheetNames.length;++r)n.push(Xe(\"Worksheet\",pc(r,t,e),{\"ss:Name\":xe(e.SheetNames[r])}));return n[2]=function(e,t){var n=['<Style ss:ID=\"Default\" ss:Name=\"Normal\"><NumberFormat/></Style>'];return t.cellXfs.forEach((function(e,t){var r=[];r.push(Xe(\"NumberFormat\",null,{\"ss:Format\":xe(T._table[e.numFmtId])})),n.push(Xe(\"Style\",r.join(\"\"),{\"ss:ID\":\"s\"+(21+t)}))})),Xe(\"Styles\",n.join(\"\"))}(0,t),n[3]=function(e){if(!((e||{}).Workbook||{}).Names)return\"\";for(var t=e.Workbook.Names,n=[],r=0;r<t.length;++r){var i=t[r];null==i.Sheet&&(i.Name.match(/^_xlfn\\./)||n.push(uc(i)))}return Xe(\"Names\",n.join(\"\"))}(e),de+Xe(\"Workbook\",n.join(\"\"),{xmlns:tt,\"xmlns:o\":qe,\"xmlns:x\":et,\"xmlns:ss\":tt,\"xmlns:dt\":\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\",\"xmlns:html\":\"http://www.w3.org/TR/REC-html40\"})}(e,n),n);case\"slk\":case\"sylk\":return dl(Zc(e,n),n);case\"htm\":case\"html\":return dl(Vc(e,n),n);case\"txt\":return function(e,t){switch(t.type){case\"base64\":return m.encode(e);case\"binary\":case\"string\":return e;case\"file\":return D(t.file,e,\"binary\");case\"buffer\":return C?b(e,\"binary\"):e.split(\"\").map((function(e){return e.charCodeAt(0)}))}throw new Error(\"Unrecognized type \"+t.type)}(Uc(e,n),n);case\"csv\":return dl(jc(e,n),n,\"\\ufeff\");case\"dif\":return dl(zc(e,n),n);case\"dbf\":return ul(Yc(e,n),n);case\"prn\":return dl(Kc(e,n),n);case\"rtf\":return dl(Xc(e,n),n);case\"eth\":return dl(Jc(e,n),n);case\"fods\":return dl(Hc(e,n),n);case\"biff2\":n.biff||(n.biff=2);case\"biff3\":n.biff||(n.biff=3);case\"biff4\":return n.biff||(n.biff=4),ul(Bc(e,n),n);case\"biff5\":n.biff||(n.biff=5);case\"biff8\":case\"xla\":case\"xls\":return n.biff||(n.biff=8),function(e,t){var n=t||{};return hl(function(e,t){var n=t||{},r=N.utils.cfb_new({root:\"R\"}),i=\"/Workbook\";switch(n.bookType||\"xls\"){case\"xls\":n.bookType=\"biff8\";case\"xla\":n.bookType||(n.bookType=\"xla\");case\"biff8\":i=\"/Workbook\",n.biff=8;break;case\"biff5\":i=\"/Book\",n.biff=5;break;default:throw new Error(\"invalid type \"+n.bookType+\" for XLS CFB\")}return N.utils.cfb_add(r,i,Bc(e,n)),8==n.biff&&(e.Props||e.Custprops)&&function(e,t){var n,r=[],i=[],s=[],o=0;if(e.Props)for(n=W(e.Props),o=0;o<n.length;++o)(Ln.hasOwnProperty(n[o])?r:Pn.hasOwnProperty(n[o])?i:s).push([n[o],e.Props[n[o]]]);if(e.Custprops)for(n=W(e.Custprops),o=0;o<n.length;++o)(e.Props||{}).hasOwnProperty(n[o])||(Ln.hasOwnProperty(n[o])?r:Pn.hasOwnProperty(n[o])?i:s).push([n[o],e.Custprops[n[o]]]);var a=[];for(o=0;o<s.length;++o)yr.indexOf(s[o][0])>-1||null!=s[o][1]&&a.push(s[o]);i.length&&N.utils.cfb_add(t,\"/\\x05SummaryInformation\",Er(i,vc,Pn,Rn)),(r.length||a.length)&&N.utils.cfb_add(t,\"/\\x05DocumentSummaryInformation\",Er(r,Ic,Ln,Tn,a.length?a:null,\"05d5cdd59c2e1b10939708002b2cf9ae\"))}(e,r),8==n.biff&&e.vbaraw&&function(e,t){t.FullPaths.forEach((function(n,r){if(0!=r){var i=n.replace(/[^\\/]*[\\/]/,\"/_VBA_PROJECT_CUR/\");\"/\"!==i.slice(-1)&&N.utils.cfb_add(e,i,t.FileIndex[r].content)}}))}(r,N.read(e.vbaraw,{type:\"string\"==typeof e.vbaraw?\"binary\":\"buffer\"})),r}(e,n),n)}(e,n);case\"xlsx\":case\"xlsm\":case\"xlam\":case\"xlsb\":case\"ods\":return function(e,t){var n=t||{},r=il(e,n),i={};if(n.compression&&(i.compression=\"DEFLATE\"),n.password)i.type=C?\"nodebuffer\":\"string\";else switch(n.type){case\"base64\":i.type=\"base64\";break;case\"binary\":i.type=\"string\";break;case\"string\":throw new Error(\"'string' output type invalid for '\"+n.bookType+\"' files\");case\"buffer\":case\"file\":i.type=C?\"nodebuffer\":\"string\";break;default:throw new Error(\"Unrecognized type \"+n.type)}var s=r.generate(i);return n.password&&\"undefined\"!=typeof encrypt_agile?hl(encrypt_agile(s,n.password),n):\"file\"===n.type?D(n.file,s):\"string\"==n.type?Be(s):s}(e,n);default:throw new Error(\"Unrecognized bookType |\"+n.bookType+\"|\")}}function gl(e){if(!e.bookType){var t=e.file.slice(e.file.lastIndexOf(\".\")).toLowerCase();t.match(/^\\.[a-z]+$/)&&(e.bookType=t.slice(1)),e.bookType={xls:\"biff8\",htm:\"html\",slk:\"sylk\",socialcalc:\"eth\",Sh33tJS:\"WTF\"}[e.bookType]||e.bookType}}function pl(e,t,n){var r=n||{};return r.type=\"file\",r.file=t,gl(r),fl(e,r)}function ml(e,t,n,r,i,s,o,a){var c=Gt(n),l=a.defval,h=a.raw||!a.hasOwnProperty(\"raw\"),d=!0,u=1===i?[]:{};if(1!==i)if(Object.defineProperty)try{Object.defineProperty(u,\"__rowNum__\",{value:n,enumerable:!1})}catch(El){u.__rowNum__=n}else u.__rowNum__=n;if(!o||e[n])for(var f=t.s.c;f<=t.e.c;++f){var g=o?e[n][f]:e[r[f]+c];if(void 0!==g&&void 0!==g.t){var p=g.v;switch(g.t){case\"z\":if(null==p)break;continue;case\"e\":p=void 0;break;case\"s\":case\"d\":case\"b\":case\"n\":break;default:throw new Error(\"unrecognized type \"+g.t)}if(null!=s[f]){if(null==p)if(void 0!==l)u[s[f]]=l;else{if(!h||null!==p)continue;u[s[f]]=null}else u[s[f]]=h?p:Jt(g,p,a);null!=p&&(d=!1)}}else{if(void 0===l)continue;null!=s[f]&&(u[s[f]]=l)}}return{row:u,isempty:d}}function Cl(e,t){if(null==e||null==e[\"!ref\"])return[];var n={t:\"n\",v:0},r=0,i=1,s=[],o=0,a=\"\",c={s:{r:0,c:0},e:{r:0,c:0}},l=t||{},h=null!=l.range?l.range:e[\"!ref\"];switch(1===l.header?r=1:\"A\"===l.header?r=2:Array.isArray(l.header)&&(r=3),typeof h){case\"string\":c=Yt(h);break;case\"number\":(c=Yt(e[\"!ref\"])).s.r=h;break;default:c=h}r>0&&(i=0);var d=Gt(c.s.r),u=[],f=[],g=0,p=0,m=Array.isArray(e),C=c.s.r,b=0,v=0;for(m&&!e[C]&&(e[C]=[]),b=c.s.c;b<=c.e.c;++b)switch(u[b]=jt(b),n=m?e[C][b]:e[u[b]+d],r){case 1:s[b]=b-c.s.c;break;case 2:s[b]=u[b];break;case 3:s[b]=l.header[b-c.s.c];break;default:for(null==n&&(n={w:\"__EMPTY\",t:\"s\"}),a=o=Jt(n,null,l),p=0,v=0;v<s.length;++v)s[v]==a&&(a=o+\"_\"+ ++p);s[b]=a}for(C=c.s.r+i;C<=c.e.r;++C){var I=ml(e,c,C,u,r,s,m,l);(!1===I.isempty||(1===r?!1!==l.blankrows:l.blankrows))&&(f[g++]=I.row)}return f.length=g,f}var bl=/\"/g;function vl(e,t,n,r,i,s,o,a){for(var c=!0,l=[],h=\"\",d=Gt(n),u=t.s.c;u<=t.e.c;++u)if(r[u]){var f=a.dense?(e[n]||[])[u]:e[r[u]+d];if(null==f)h=\"\";else if(null!=f.v){c=!1,h=\"\"+Jt(f,null,a);for(var g=0,p=0;g!==h.length;++g)if((p=h.charCodeAt(g))===i||p===s||34===p){h='\"'+h.replace(bl,'\"\"')+'\"';break}\"ID\"==h&&(h='\"ID\"')}else null==f.f||f.F?h=\"\":(c=!1,(h=\"=\"+f.f).indexOf(\",\")>=0&&(h='\"'+h.replace(bl,'\"\"')+'\"'));l.push(h)}return!1===a.blankrows&&c?null:l.join(o)}function Il(e,t){var n=[],r=null==t?{}:t;if(null==e||null==e[\"!ref\"])return\"\";var i=Yt(e[\"!ref\"]),s=void 0!==r.FS?r.FS:\",\",o=s.charCodeAt(0),a=void 0!==r.RS?r.RS:\"\\n\",c=a.charCodeAt(0),l=new RegExp((\"|\"==s?\"\\\\|\":s)+\"+$\"),h=\"\",d=[];r.dense=Array.isArray(e);for(var u=r.skipHidden&&e[\"!cols\"]||[],f=r.skipHidden&&e[\"!rows\"]||[],g=i.s.c;g<=i.e.c;++g)(u[g]||{}).hidden||(d[g]=jt(g));for(var p=i.s.r;p<=i.e.r;++p)(f[p]||{}).hidden||null!=(h=vl(e,i,p,d,o,c,s,r))&&(r.strip&&(h=h.replace(l,\"\")),n.push(h+a));return delete r.dense,n.join(\"\")}function Al(e,t){t||(t={}),t.FS=\"\\t\",t.RS=\"\\n\";var n=Il(e,t);if(\"undefined\"==typeof cptable||\"string\"==t.type)return n;var r=cptable.utils.encode(1200,n,\"str\");return String.fromCharCode(255)+String.fromCharCode(254)+r}function yl(e){var t,n=\"\",r=\"\";if(null==e||null==e[\"!ref\"])return[];var i,s=Yt(e[\"!ref\"]),o=\"\",a=[],c=[],l=Array.isArray(e);for(i=s.s.c;i<=s.e.c;++i)a[i]=jt(i);for(var h=s.s.r;h<=s.e.r;++h)for(o=Gt(h),i=s.s.c;i<=s.e.c;++i)if(n=a[i]+o,r=\"\",void 0!==(t=l?(e[h]||[])[i]:e[n])){if(null!=t.F){if(n=t.F,!t.f)continue;r=t.f,-1==n.indexOf(\":\")&&(n=n+\":\"+n)}if(null!=t.f)r=t.f;else{if(\"z\"==t.t)continue;if(\"n\"==t.t&&null!=t.v)r=\"\"+t.v;else if(\"b\"==t.t)r=t.v?\"TRUE\":\"FALSE\";else if(void 0!==t.w)r=\"'\"+t.w;else{if(void 0===t.v)continue;r=\"s\"==t.t?\"'\"+t.v:\"\"+t.v}}c[c.length]=n+\"=\"+r}return c}function wl(e,t,n){var r,i=n||{},s=+!i.skipHeader,o=e||{},a=0,c=0;if(o&&null!=i.origin)if(\"number\"==typeof i.origin)a=i.origin;else{var l=\"string\"==typeof i.origin?zt(i.origin):i.origin;a=l.r,c=l.c}var h={s:{c:0,r:0},e:{c:c,r:a+t.length-1+s}};if(o[\"!ref\"]){var d=Yt(o[\"!ref\"]);h.e.c=Math.max(h.e.c,d.e.c),h.e.r=Math.max(h.e.r,d.e.r),-1==a&&(h.e.r=(a=h.e.r+1)+t.length-1+s)}var u=i.header||[],f=0;t.forEach((function(e,t){W(e).forEach((function(n){-1==(f=u.indexOf(n))&&(u[f=u.length]=n);var l=e[n],h=\"z\",d=\"\";!l||\"object\"!=typeof l||l instanceof Date?(\"number\"==typeof l?h=\"n\":\"boolean\"==typeof l?h=\"b\":\"string\"==typeof l?h=\"s\":l instanceof Date&&(h=\"d\",i.cellDates||(h=\"n\",l=z(l)),d=i.dateNF||T._table[14]),o[Kt({c:c+f,r:a+t+s})]=r={t:h,v:l},d&&(r.z=d)):o[Kt({c:c+f,r:a+t+s})]=l}))})),h.e.c=Math.max(h.e.c,c+u.length-1);var g=Gt(a);if(s)for(f=0;f<u.length;++f)o[jt(f+c)+g]={t:\"s\",v:u[f]};return o[\"!ref\"]=Ut(h),o}var Sl,xl={encode_col:jt,encode_row:Gt,encode_cell:Kt,encode_range:Ut,decode_col:Vt,decode_row:Ht,split_cell:Zt,decode_cell:zt,decode_range:Xt,format_cell:Jt,get_formulae:yl,make_csv:Il,make_json:Cl,make_formulae:yl,sheet_add_aoa:qt,sheet_add_json:wl,aoa_to_sheet:en,json_to_sheet:function(e,t){return wl(null,e,t)},table_to_sheet:Lc,table_to_book:function(e,t){return Qt(Lc(e,t),t)},sheet_to_csv:Il,sheet_to_txt:Al,sheet_to_json:Cl,sheet_to_html:Oc.from_sheet,sheet_to_dif:Si.from_sheet,sheet_to_slk:wi.from_sheet,sheet_to_eth:xi.from_sheet,sheet_to_formulae:yl,sheet_to_row_object_array:Cl};!function(e){function t(e,t,n){return null!=e[t]?e[t]:e[t]=n}function n(e,t,r){return\"string\"==typeof t?e[t]||(e[t]={t:\"z\"}):n(e,Kt(\"number\"!=typeof t?t:{r:t,c:r||0}))}e.consts=e.consts||{},e.book_new=function(){return{SheetNames:[],Sheets:{}}},e.book_append_sheet=function(e,t,n){if(!n)for(var r=1;r<=65535&&-1!=e.SheetNames.indexOf(n=\"Sheet\"+r);++r);if(!n)throw new Error(\"Too many worksheets\");if(Ga(n),e.SheetNames.indexOf(n)>=0)throw new Error(\"Worksheet with name |\"+n+\"| already exists!\");e.SheetNames.push(n),e.Sheets[n]=t},e.book_set_sheet_visibility=function(e,n,r){t(e,\"Workbook\",{}),t(e.Workbook,\"Sheets\",[]);var i=function(e,t){if(\"number\"==typeof t){if(t>=0&&e.SheetNames.length>t)return t;throw new Error(\"Cannot find sheet # \"+t)}if(\"string\"==typeof t){var n=e.SheetNames.indexOf(t);if(n>-1)return n;throw new Error(\"Cannot find sheet name |\"+t+\"|\")}throw new Error(\"Cannot find sheet |\"+t+\"|\")}(e,n);switch(t(e.Workbook.Sheets,i,{}),r){case 0:case 1:case 2:break;default:throw new Error(\"Bad sheet visibility setting \"+r)}e.Workbook.Sheets[i].Hidden=r},[[\"SHEET_VISIBLE\",0],[\"SHEET_HIDDEN\",1],[\"SHEET_VERY_HIDDEN\",2]].forEach((function(t){e.consts[t[0]]=t[1]})),e.cell_set_number_format=function(e,t){return e.z=t,e},e.cell_set_hyperlink=function(e,t,n){return t?(e.l={Target:t},n&&(e.l.Tooltip=n)):delete e.l,e},e.cell_set_internal_link=function(t,n,r){return e.cell_set_hyperlink(t,\"#\"+n,r)},e.cell_add_comment=function(e,t,n){e.c||(e.c=[]),e.c.push({t:t,a:n||\"SheetJS\"})},e.sheet_set_array_formula=function(e,t,r){for(var i=\"string\"!=typeof t?t:Yt(t),s=\"string\"==typeof t?t:Ut(t),o=i.s.r;o<=i.e.r;++o)for(var a=i.s.c;a<=i.e.c;++a){var c=n(e,o,a);c.t=\"n\",c.F=s,delete c.v,o==i.s.r&&a==i.s.c&&(c.f=r)}return e}}(xl),C&&(Sl=n(5).Readable,t.stream={to_json:function(e,t){var n=Sl({objectMode:!0});if(null==e||null==e[\"!ref\"])return n.push(null),n;var r={t:\"n\",v:0},i=0,s=1,o=[],a=0,c=\"\",l={s:{r:0,c:0},e:{r:0,c:0}},h=t||{},d=null!=h.range?h.range:e[\"!ref\"];switch(1===h.header?i=1:\"A\"===h.header?i=2:Array.isArray(h.header)&&(i=3),typeof d){case\"string\":l=Yt(d);break;case\"number\":(l=Yt(e[\"!ref\"])).s.r=d;break;default:l=d}i>0&&(s=0);var u=Gt(l.s.r),f=[],g=0,p=Array.isArray(e),m=l.s.r,C=0,b=0;for(p&&!e[m]&&(e[m]=[]),C=l.s.c;C<=l.e.c;++C)switch(f[C]=jt(C),r=p?e[m][C]:e[f[C]+u],i){case 1:o[C]=C-l.s.c;break;case 2:o[C]=f[C];break;case 3:o[C]=h.header[C-l.s.c];break;default:for(null==r&&(r={w:\"__EMPTY\",t:\"s\"}),c=a=Jt(r,null,h),g=0,b=0;b<o.length;++b)o[b]==c&&(c=a+\"_\"+ ++g);o[C]=c}return m=l.s.r+s,n._read=function(){if(m>l.e.r)return n.push(null);for(;m<=l.e.r;){var t=ml(e,l,m,f,i,o,p,h);if(++m,!1===t.isempty||(1===i?!1!==h.blankrows:h.blankrows)){n.push(t.row);break}}},n},to_html:function(e,t){var n=Sl(),r=t||{},i=null!=r.footer?r.footer:Oc.END;n.push(null!=r.header?r.header:Oc.BEGIN);var s=Xt(e[\"!ref\"]);r.dense=Array.isArray(e),n.push(Oc._preamble(e,s,r));var o=s.s.r,a=!1;return n._read=function(){if(o>s.e.r)return a||(a=!0,n.push(\"</table>\"+i)),n.push(null);for(;o<=s.e.r;){n.push(Oc._row(e,s,o,r)),++o;break}},n},to_csv:function(e,t){var n=Sl(),r=null==t?{}:t;if(null==e||null==e[\"!ref\"])return n.push(null),n;var i=Yt(e[\"!ref\"]),s=void 0!==r.FS?r.FS:\",\",o=s.charCodeAt(0),a=void 0!==r.RS?r.RS:\"\\n\",c=a.charCodeAt(0),l=new RegExp((\"|\"==s?\"\\\\|\":s)+\"+$\"),h=\"\",d=[];r.dense=Array.isArray(e);for(var u=r.skipHidden&&e[\"!cols\"]||[],f=r.skipHidden&&e[\"!rows\"]||[],g=i.s.c;g<=i.e.c;++g)(u[g]||{}).hidden||(d[g]=jt(g));var p=i.s.r,m=!1;return n._read=function(){if(!m)return m=!0,n.push(\"\\ufeff\");for(;p<=i.e.r;)if(++p,!(f[p-1]||{}).hidden&&null!=(h=vl(e,i,p-1,d,o,c,s,r))){r.strip&&(h=h.replace(l,\"\")),n.push(h+a);break}return p>i.e.r?n.push(null):void 0},n}}),t.parse_xlscfb=Ac,t.parse_ods=Mc,t.parse_fods=Dc,t.write_ods=Hc,t.parse_zip=rl,t.read=cl,t.readFile=ll,t.readFileSync=ll,t.write=fl,t.writeFile=pl,t.writeFileSync=pl,t.writeFileAsync=function(e,t,n,r){var i=n||{};i.type=\"file\",i.file=e,gl(i),i.type=\"buffer\";var s=r;return s instanceof Function||(s=n),F.writeFile(e,fl(t,i),s)},t.utils=xl,t.SSF=T,t.CFB=N}(t)},FaQm:function(e,t,n){var r,i,s;!function(n){if(\"undefined\"==typeof DO_NOT_EXPORT_JSZIP)e.exports=n();else if(\"undefined\"==typeof DO_NOT_EXPORT_JSZIP)JSZipSync=n(),i=[],void 0===(s=\"function\"==typeof(r=n)?r.apply(t,i):r)||(e.exports=s);else{var o;\"undefined\"!=typeof window?o=window:\"undefined\"!=typeof global?o=global:\"undefined\"!=typeof $&&$.global?o=$.global:\"undefined\"!=typeof self&&(o=self),o.JSZipSync=n()}}((function(){return function e(t,n,r){function i(o,a){if(!n[o]){if(!t[o]){if(s)return s(o,!0);throw new Error(\"Cannot find module '\"+o+\"'\")}var c=n[o]={exports:{}};t[o][0].call(c.exports,(function(e){return i(t[o][1][e]||e)}),c,c.exports,e,t,n,r)}return n[o].exports}for(var s=!1,o=0;o<r.length;o++)i(r[o]);return i}({1:[function(e,t,n){\"use strict\";var r=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";n.encode=function(e,t){for(var n,i,s,o,a,c,l,h=\"\",d=0;d<e.length;)o=(n=e.charCodeAt(d++))>>2,a=(3&n)<<4|(i=e.charCodeAt(d++))>>4,c=(15&i)<<2|(s=e.charCodeAt(d++))>>6,l=63&s,isNaN(i)?c=l=64:isNaN(s)&&(l=64),h=h+r.charAt(o)+r.charAt(a)+r.charAt(c)+r.charAt(l);return h},n.decode=function(e,t){var n,i,s,o,a,c,l=\"\",h=0;for(e=e.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");h<e.length;)s=r.indexOf(e.charAt(h++)),n=(15&(o=r.indexOf(e.charAt(h++))))<<4|(a=r.indexOf(e.charAt(h++)))>>2,i=(3&a)<<6|(c=r.indexOf(e.charAt(h++))),l+=String.fromCharCode(s<<2|o>>4),64!=a&&(l+=String.fromCharCode(n)),64!=c&&(l+=String.fromCharCode(i));return l}},{}],2:[function(e,t,n){\"use strict\";function r(){this.compressedSize=0,this.uncompressedSize=0,this.crc32=0,this.compressionMethod=null,this.compressedContent=null}r.prototype={getContent:function(){return null},getCompressedContent:function(){return null}},t.exports=r},{}],3:[function(e,t,n){\"use strict\";n.STORE={magic:\"\\0\\0\",compress:function(e){return e},uncompress:function(e){return e},compressInputType:null,uncompressInputType:null},n.DEFLATE=e(\"./flate\")},{\"./flate\":8}],4:[function(e,t,n){\"use strict\";var r=e(\"./utils\"),i=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];t.exports=function(e,t){if(void 0===e||!e.length)return 0;var n=\"string\"!==r.getTypeOf(e);void 0===t&&(t=0);var s=0;t^=-1;for(var o=0,a=e.length;o<a;o++)s=n?e[o]:e.charCodeAt(o),t=t>>>8^i[255&(t^s)];return-1^t}},{\"./utils\":21}],5:[function(e,t,n){\"use strict\";var r=e(\"./utils\");function i(e){this.data=null,this.length=0,this.index=0}i.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length<e||e<0)throw new Error(\"End of data reached (data length = \"+this.length+\", asked index = \"+e+\"). Corrupted zip ?\")},setIndex:function(e){this.checkIndex(e),this.index=e},skip:function(e){this.setIndex(this.index+e)},byteAt:function(e){},readInt:function(e){var t,n=0;for(this.checkOffset(e),t=this.index+e-1;t>=this.index;t--)n=(n<<8)+this.byteAt(t);return this.index+=e,n},readString:function(e){return r.transformTo(\"string\",this.readData(e))},readData:function(e){},lastIndexOfSignature:function(e){},readDate:function(){var e=this.readInt(4);return new Date(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1)}},t.exports=i},{\"./utils\":21}],6:[function(e,t,n){\"use strict\";n.base64=!1,n.binary=!1,n.dir=!1,n.createFolders=!1,n.date=null,n.compression=null,n.comment=null},{}],7:[function(e,t,n){\"use strict\";var r=e(\"./utils\");n.string2binary=function(e){return r.string2binary(e)},n.string2Uint8Array=function(e){return r.transformTo(\"uint8array\",e)},n.uint8Array2String=function(e){return r.transformTo(\"string\",e)},n.string2Blob=function(e){var t=r.transformTo(\"arraybuffer\",e);return r.arrayBuffer2Blob(t)},n.arrayBuffer2Blob=function(e){return r.arrayBuffer2Blob(e)},n.transformTo=function(e,t){return r.transformTo(e,t)},n.getTypeOf=function(e){return r.getTypeOf(e)},n.checkSupport=function(e){return r.checkSupport(e)},n.MAX_VALUE_16BITS=r.MAX_VALUE_16BITS,n.MAX_VALUE_32BITS=r.MAX_VALUE_32BITS,n.pretty=function(e){return r.pretty(e)},n.findCompression=function(e){return r.findCompression(e)},n.isRegExp=function(e){return r.isRegExp(e)}},{\"./utils\":21}],8:[function(e,t,n){\"use strict\";var r=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\");n.uncompressInputType=r?\"uint8array\":\"array\",n.compressInputType=r?\"uint8array\":\"array\",n.magic=\"\\b\\0\",n.compress=function(e){return i.deflateRaw(e)},n.uncompress=function(e){return i.inflateRaw(e)}},{pako:24}],9:[function(e,t,n){\"use strict\";var r=e(\"./base64\");function i(e,t){if(!(this instanceof i))return new i(e,t);this.files={},this.comment=null,this.root=\"\",e&&this.load(e,t),this.clone=function(){var e=new i;for(var t in this)\"function\"!=typeof this[t]&&(e[t]=this[t]);return e}}(i.prototype=e(\"./object\")).load=e(\"./load\"),i.support=e(\"./support\"),i.defaults=e(\"./defaults\"),i.utils=e(\"./deprecatedPublicUtils\"),i.base64={encode:function(e){return r.encode(e)},decode:function(e){return r.decode(e)}},i.compressions=e(\"./compressions\"),t.exports=i},{\"./base64\":1,\"./compressions\":3,\"./defaults\":6,\"./deprecatedPublicUtils\":7,\"./load\":10,\"./object\":13,\"./support\":17}],10:[function(e,t,n){\"use strict\";var r=e(\"./base64\"),i=e(\"./zipEntries\");t.exports=function(e,t){var n,s,o,a;for((t=t||{}).base64&&(e=r.decode(e)),n=(s=new i(e,t)).files,o=0;o<n.length;o++)this.file((a=n[o]).fileName,a.decompressed,{binary:!0,optimizedBinaryString:!0,date:a.date,dir:a.dir,comment:a.fileComment.length?a.fileComment:null,createFolders:t.createFolders});return s.zipComment.length&&(this.comment=s.zipComment),this}},{\"./base64\":1,\"./zipEntries\":22}],11:[function(e,t,n){(function(e){\"use strict\";var n=function(){};if(void 0!==e){var r=!e.from;if(!r)try{e.from(\"foo\",\"utf8\")}catch(i){r=!0}n=r?function(t,n){return n?new e(t,n):new e(t)}:e.from.bind(e),e.alloc||(e.alloc=function(t){return new e(t)})}t.exports=function(t,r){return\"number\"==typeof t?e.alloc(t):n(t,r)},t.exports.test=function(t){return e.isBuffer(t)}}).call(this,\"undefined\"!=typeof Buffer?Buffer:void 0)},{}],12:[function(e,t,n){\"use strict\";var r=e(\"./uint8ArrayReader\");function i(e){this.data=e,this.length=this.data.length,this.index=0}(i.prototype=new r).readData=function(e){this.checkOffset(e);var t=this.data.slice(this.index,this.index+e);return this.index+=e,t},t.exports=i},{\"./uint8ArrayReader\":18}],13:[function(e,t,n){\"use strict\";var r=e(\"./support\"),i=e(\"./utils\"),s=e(\"./crc32\"),o=e(\"./signature\"),a=e(\"./defaults\"),c=e(\"./base64\"),l=e(\"./compressions\"),h=e(\"./compressedObject\"),d=e(\"./nodeBuffer\"),u=e(\"./utf8\"),f=e(\"./stringWriter\"),g=e(\"./uint8ArrayWriter\"),p=function(e){if(e._data instanceof h&&(e._data=e._data.getContent(),e.options.binary=!0,e.options.base64=!1,\"uint8array\"===i.getTypeOf(e._data))){var t=e._data;e._data=new Uint8Array(t.length),0!==t.length&&e._data.set(t,0)}return e._data},m=function(e){var t=p(e);return\"string\"===i.getTypeOf(t)?!e.options.binary&&r.nodebuffer?d(t,\"utf-8\"):e.asBinary():t},C=function(e){var t=p(this);return null==t?\"\":(this.options.base64&&(t=c.decode(t)),t=e&&this.options.binary?E.utf8decode(t):i.transformTo(\"string\",t),e||this.options.binary||(t=i.transformTo(\"string\",E.utf8encode(t))),t)},b=function(e,t,n){this.name=e,this.dir=n.dir,this.date=n.date,this.comment=n.comment,this._data=t,this.options=n,this._initialMetadata={dir:n.dir,date:n.date}};b.prototype={asText:function(){return C.call(this,!0)},asBinary:function(){return C.call(this,!1)},asNodeBuffer:function(){var e=m(this);return i.transformTo(\"nodebuffer\",e)},asUint8Array:function(){var e=m(this);return i.transformTo(\"uint8array\",e)},asArrayBuffer:function(){return this.asUint8Array().buffer}};var v=function(e,t){var n,r=\"\";for(n=0;n<t;n++)r+=String.fromCharCode(255&e),e>>>=8;return r},I=function(){var e,t,n={};for(e=0;e<arguments.length;e++)for(t in arguments[e])arguments[e].hasOwnProperty(t)&&void 0===n[t]&&(n[t]=arguments[e][t]);return n},A=function(e,t,n){var r,s=i.getTypeOf(t);if((n=function(e){return!0===(e=e||{}).base64&&null==e.binary&&(e.binary=!0),(e=I(e,a)).date=e.date||new Date,null!==e.compression&&(e.compression=e.compression.toUpperCase()),e}(n)).createFolders&&(r=y(e))&&w.call(this,r,!0),n.dir||null==t)n.base64=!1,n.binary=!1,t=null;else if(\"string\"===s)n.binary&&!n.base64&&!0!==n.optimizedBinaryString&&(t=i.string2binary(t));else{if(n.base64=!1,n.binary=!0,!(s||t instanceof h))throw new Error(\"The data of '\"+e+\"' is in an unsupported format !\");\"arraybuffer\"===s&&(t=i.transformTo(\"uint8array\",t))}var o=new b(e,t,n);return this.files[e]=o,o},y=function(e){\"/\"==e.slice(-1)&&(e=e.substring(0,e.length-1));var t=e.lastIndexOf(\"/\");return t>0?e.substring(0,t):\"\"},w=function(e,t){return\"/\"!=e.slice(-1)&&(e+=\"/\"),t=void 0!==t&&t,this.files[e]||A.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]},S=function(e,t){var n,r=new h;return e._data instanceof h?(r.uncompressedSize=e._data.uncompressedSize,r.crc32=e._data.crc32,0===r.uncompressedSize||e.dir?(t=l.STORE,r.compressedContent=\"\",r.crc32=0):e._data.compressionMethod===t.magic?r.compressedContent=e._data.getCompressedContent():(n=e._data.getContent(),r.compressedContent=t.compress(i.transformTo(t.compressInputType,n)))):((n=m(e))&&0!==n.length&&!e.dir||(t=l.STORE,n=\"\"),r.uncompressedSize=n.length,r.crc32=s(n),r.compressedContent=t.compress(i.transformTo(t.compressInputType,n))),r.compressedSize=r.compressedContent.length,r.compressionMethod=t.magic,r},x=function(e,t,n,r){var a,c,l,h,d=i.transformTo(\"string\",u.utf8encode(t.name)),f=t.comment||\"\",g=i.transformTo(\"string\",u.utf8encode(f)),p=d.length!==t.name.length,m=g.length!==f.length,C=t.options,b=\"\",I=\"\",A=\"\";l=t._initialMetadata.dir!==t.dir?t.dir:C.dir,a=(h=t._initialMetadata.date!==t.date?t.date:C.date).getHours(),a<<=6,a|=h.getMinutes(),a<<=5,a|=h.getSeconds()/2,c=h.getFullYear()-1980,c<<=4,c|=h.getMonth()+1,c<<=5,c|=h.getDate(),p&&(I=v(1,1)+v(s(d),4)+d,b+=\"up\"+v(I.length,2)+I),m&&(A=v(1,1)+v(this.crc32(g),4)+g,b+=\"uc\"+v(A.length,2)+A);var y=\"\";return y+=\"\\n\\0\",y+=p||m?\"\\0\\b\":\"\\0\\0\",y+=n.compressionMethod,y+=v(a,2),y+=v(c,2),y+=v(n.crc32,4),y+=v(n.compressedSize,4),y+=v(n.uncompressedSize,4),y+=v(d.length,2),y+=v(b.length,2),{fileRecord:o.LOCAL_FILE_HEADER+y+d+b,dirRecord:o.CENTRAL_FILE_HEADER+\"\\x14\\0\"+y+v(g.length,2)+\"\\0\\0\\0\\0\"+(!0===l?\"\\x10\\0\\0\\0\":\"\\0\\0\\0\\0\")+v(r,4)+d+b+g,compressedObject:n}},E={load:function(e,t){throw new Error(\"Load method is not defined. Is the file jszip-load.js included ?\")},filter:function(e){var t,n,r,i,s=[];for(t in this.files)this.files.hasOwnProperty(t)&&(i=new b((r=this.files[t]).name,r._data,I(r.options)),n=t.slice(this.root.length,t.length),t.slice(0,this.root.length)===this.root&&e(n,i)&&s.push(i));return s},file:function(e,t,n){if(1===arguments.length){if(i.isRegExp(e)){var r=e;return this.filter((function(e,t){return!t.dir&&r.test(e)}))}return this.filter((function(t,n){return!n.dir&&t===e}))[0]||null}return A.call(this,e=this.root+e,t,n),this},folder:function(e){if(!e)return this;if(i.isRegExp(e))return this.filter((function(t,n){return n.dir&&e.test(t)}));var t=w.call(this,this.root+e),n=this.clone();return n.root=t.name,n},remove:function(e){var t=this.files[e=this.root+e];if(t||(\"/\"!=e.slice(-1)&&(e+=\"/\"),t=this.files[e]),t&&!t.dir)delete this.files[e];else for(var n=this.filter((function(t,n){return n.name.slice(0,e.length)===e})),r=0;r<n.length;r++)delete this.files[n[r].name];return this},generate:function(e){e=I(e||{},{base64:!0,compression:\"STORE\",type:\"base64\",comment:null}),i.checkSupport(e.type);var t,n,r,s=[],a=0,h=0,d=i.transformTo(\"string\",this.utf8encode(e.comment||this.comment||\"\"));for(var u in this.files)if(this.files.hasOwnProperty(u)){var p=this.files[u],m=p.options.compression||e.compression.toUpperCase(),C=l[m];if(!C)throw new Error(m+\" is not a valid compression method !\");var b=S.call(this,p,C),A=x.call(this,u,p,b,a);a+=A.fileRecord.length+b.compressedSize,h+=A.dirRecord.length,s.push(A)}r=o.CENTRAL_DIRECTORY_END+\"\\0\\0\\0\\0\"+v(s.length,2)+v(s.length,2)+v(h,4)+v(a,4)+v(d.length,2)+d;var y=e.type.toLowerCase();for(t=\"uint8array\"===y||\"arraybuffer\"===y||\"blob\"===y||\"nodebuffer\"===y?new g(a+h+r.length):new f(a+h+r.length),n=0;n<s.length;n++)t.append(s[n].fileRecord),t.append(s[n].compressedObject.compressedContent);for(n=0;n<s.length;n++)t.append(s[n].dirRecord);t.append(r);var w=t.finalize();switch(e.type.toLowerCase()){case\"uint8array\":case\"arraybuffer\":case\"nodebuffer\":return i.transformTo(e.type.toLowerCase(),w);case\"blob\":return i.arrayBuffer2Blob(i.transformTo(\"arraybuffer\",w));case\"base64\":return e.base64?c.encode(w):w;default:return w}},crc32:function(e,t){return s(e,t)},utf8encode:function(e){return i.transformTo(\"string\",u.utf8encode(e))},utf8decode:function(e){return u.utf8decode(e)}};t.exports=E},{\"./base64\":1,\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./defaults\":6,\"./nodeBuffer\":11,\"./signature\":14,\"./stringWriter\":16,\"./support\":17,\"./uint8ArrayWriter\":19,\"./utf8\":20,\"./utils\":21}],14:[function(e,t,n){\"use strict\";n.LOCAL_FILE_HEADER=\"PK\\x03\\x04\",n.CENTRAL_FILE_HEADER=\"PK\\x01\\x02\",n.CENTRAL_DIRECTORY_END=\"PK\\x05\\x06\",n.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\\x06\\x07\",n.ZIP64_CENTRAL_DIRECTORY_END=\"PK\\x06\\x06\",n.DATA_DESCRIPTOR=\"PK\\x07\\b\"},{}],15:[function(e,t,n){\"use strict\";var r=e(\"./dataReader\"),i=e(\"./utils\");function s(e,t){this.data=e,t||(this.data=i.string2binary(this.data)),this.length=this.data.length,this.index=0}(s.prototype=new r).byteAt=function(e){return this.data.charCodeAt(e)},s.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)},s.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.index,this.index+e);return this.index+=e,t},t.exports=s},{\"./dataReader\":5,\"./utils\":21}],16:[function(e,t,n){\"use strict\";var r=e(\"./utils\"),i=function(){this.data=[]};i.prototype={append:function(e){e=r.transformTo(\"string\",e),this.data.push(e)},finalize:function(){return this.data.join(\"\")}},t.exports=i},{\"./utils\":21}],17:[function(e,t,n){(function(e){\"use strict\";if(n.base64=!0,n.array=!0,n.string=!0,n.arraybuffer=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array,n.nodebuffer=void 0!==e,n.uint8array=\"undefined\"!=typeof Uint8Array,\"undefined\"==typeof ArrayBuffer)n.blob=!1;else{var t=new ArrayBuffer(0);try{n.blob=0===new Blob([t],{type:\"application/zip\"}).size}catch(i){try{var r=new(window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder);r.append(t),n.blob=0===r.getBlob(\"application/zip\").size}catch(i){n.blob=!1}}}}).call(this,\"undefined\"!=typeof Buffer?Buffer:void 0)},{}],18:[function(e,t,n){\"use strict\";var r=e(\"./dataReader\");function i(e){e&&(this.data=e,this.length=this.data.length,this.index=0)}(i.prototype=new r).byteAt=function(e){return this.data[e]},i.prototype.lastIndexOfSignature=function(e){for(var t=e.charCodeAt(0),n=e.charCodeAt(1),r=e.charCodeAt(2),i=e.charCodeAt(3),s=this.length-4;s>=0;--s)if(this.data[s]===t&&this.data[s+1]===n&&this.data[s+2]===r&&this.data[s+3]===i)return s;return-1},i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.index,this.index+e);return this.index+=e,t},t.exports=i},{\"./dataReader\":5}],19:[function(e,t,n){\"use strict\";var r=e(\"./utils\"),i=function(e){this.data=new Uint8Array(e),this.index=0};i.prototype={append:function(e){0!==e.length&&(e=r.transformTo(\"uint8array\",e),this.data.set(e,this.index),this.index+=e.length)},finalize:function(){return this.data}},t.exports=i},{\"./utils\":21}],20:[function(e,t,n){\"use strict\";for(var r=e(\"./utils\"),i=e(\"./support\"),s=e(\"./nodeBuffer\"),o=new Array(256),a=0;a<256;a++)o[a]=a>=252?6:a>=248?5:a>=240?4:a>=224?3:a>=192?2:1;o[254]=o[254]=1;var c=function(e,t){var n;for((t=t||e.length)>e.length&&(t=e.length),n=t-1;n>=0&&128==(192&e[n]);)n--;return n<0||0===n?t:n+o[e[n]]>t?n:t},l=function(e){var t,n,i,s,a=e.length,c=new Array(2*a);for(n=0,t=0;t<a;)if((i=e[t++])<128)c[n++]=i;else if((s=o[i])>4)c[n++]=65533,t+=s-1;else{for(i&=2===s?31:3===s?15:7;s>1&&t<a;)i=i<<6|63&e[t++],s--;s>1?c[n++]=65533:i<65536?c[n++]=i:(c[n++]=55296|(i-=65536)>>10&1023,c[n++]=56320|1023&i)}return c.length!==n&&(c.subarray?c=c.subarray(0,n):c.length=n),r.applyFromCharCode(c)};n.utf8encode=function(e){return i.nodebuffer?s(e,\"utf-8\"):function(e){var t,n,r,s,o,a=e.length,c=0;for(s=0;s<a;s++)55296==(64512&(n=e.charCodeAt(s)))&&s+1<a&&56320==(64512&(r=e.charCodeAt(s+1)))&&(n=65536+(n-55296<<10)+(r-56320),s++),c+=n<128?1:n<2048?2:n<65536?3:4;for(t=i.uint8array?new Uint8Array(c):new Array(c),o=0,s=0;o<c;s++)55296==(64512&(n=e.charCodeAt(s)))&&s+1<a&&56320==(64512&(r=e.charCodeAt(s+1)))&&(n=65536+(n-55296<<10)+(r-56320),s++),n<128?t[o++]=n:n<2048?(t[o++]=192|n>>>6,t[o++]=128|63&n):n<65536?(t[o++]=224|n>>>12,t[o++]=128|n>>>6&63,t[o++]=128|63&n):(t[o++]=240|n>>>18,t[o++]=128|n>>>12&63,t[o++]=128|n>>>6&63,t[o++]=128|63&n);return t}(e)},n.utf8decode=function(e){if(i.nodebuffer)return r.transformTo(\"nodebuffer\",e).toString(\"utf-8\");for(var t=[],n=0,s=(e=r.transformTo(i.uint8array?\"uint8array\":\"array\",e)).length;n<s;){var o=c(e,Math.min(n+65536,s));t.push(l(i.uint8array?e.subarray(n,o):e.slice(n,o))),n=o}return t.join(\"\")}},{\"./nodeBuffer\":11,\"./support\":17,\"./utils\":21}],21:[function(e,t,n){\"use strict\";var r=e(\"./support\"),i=e(\"./compressions\"),s=e(\"./nodeBuffer\");function o(e){return e}function a(e,t){for(var n=0;n<e.length;++n)t[n]=255&e.charCodeAt(n);return t}function c(e){var t=65536,r=[],i=e.length,o=n.getTypeOf(e),a=0,c=!0;try{switch(o){case\"uint8array\":String.fromCharCode.apply(null,new Uint8Array(0));break;case\"nodebuffer\":String.fromCharCode.apply(null,s(0))}}catch(d){c=!1}if(!c){for(var l=\"\",h=0;h<e.length;h++)l+=String.fromCharCode(e[h]);return l}for(;a<i&&t>1;)try{r.push(String.fromCharCode.apply(null,\"array\"===o||\"nodebuffer\"===o?e.slice(a,Math.min(a+t,i)):e.subarray(a,Math.min(a+t,i)))),a+=t}catch(d){t=Math.floor(t/2)}return r.join(\"\")}function l(e,t){for(var n=0;n<e.length;n++)t[n]=e[n];return t}n.string2binary=function(e){for(var t=\"\",n=0;n<e.length;n++)t+=String.fromCharCode(255&e.charCodeAt(n));return t},n.arrayBuffer2Blob=function(e){n.checkSupport(\"blob\");try{return new Blob([e],{type:\"application/zip\"})}catch(r){try{var t=new(window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder);return t.append(e),t.getBlob(\"application/zip\")}catch(r){throw new Error(\"Bug : can't construct the Blob.\")}}},n.applyFromCharCode=c;var h={};h.string={string:o,array:function(e){return a(e,new Array(e.length))},arraybuffer:function(e){return h.string.uint8array(e).buffer},uint8array:function(e){return a(e,new Uint8Array(e.length))},nodebuffer:function(e){return a(e,s(e.length))}},h.array={string:c,array:o,arraybuffer:function(e){return new Uint8Array(e).buffer},uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return s(e)}},h.arraybuffer={string:function(e){return c(new Uint8Array(e))},array:function(e){return l(new Uint8Array(e),new Array(e.byteLength))},arraybuffer:o,uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return s(new Uint8Array(e))}},h.uint8array={string:c,array:function(e){return l(e,new Array(e.length))},arraybuffer:function(e){return e.buffer},uint8array:o,nodebuffer:function(e){return s(e)}},h.nodebuffer={string:c,array:function(e){return l(e,new Array(e.length))},arraybuffer:function(e){return h.nodebuffer.uint8array(e).buffer},uint8array:function(e){return l(e,new Uint8Array(e.length))},nodebuffer:o},n.transformTo=function(e,t){if(t||(t=\"\"),!e)return t;n.checkSupport(e);var r=n.getTypeOf(t);return h[r][e](t)},n.getTypeOf=function(e){return\"string\"==typeof e?\"string\":\"[object Array]\"===Object.prototype.toString.call(e)?\"array\":r.nodebuffer&&s.test(e)?\"nodebuffer\":r.uint8array&&e instanceof Uint8Array?\"uint8array\":r.arraybuffer&&e instanceof ArrayBuffer?\"arraybuffer\":void 0},n.checkSupport=function(e){if(!r[e.toLowerCase()])throw new Error(e+\" is not supported by this browser\")},n.MAX_VALUE_16BITS=65535,n.MAX_VALUE_32BITS=-1,n.pretty=function(e){var t,n,r=\"\";for(n=0;n<(e||\"\").length;n++)r+=\"\\\\x\"+((t=e.charCodeAt(n))<16?\"0\":\"\")+t.toString(16).toUpperCase();return r},n.findCompression=function(e){for(var t in i)if(i.hasOwnProperty(t)&&i[t].magic===e)return i[t];return null},n.isRegExp=function(e){return\"[object RegExp]\"===Object.prototype.toString.call(e)}},{\"./compressions\":3,\"./nodeBuffer\":11,\"./support\":17}],22:[function(e,t,n){\"use strict\";var r=e(\"./stringReader\"),i=e(\"./nodeBufferReader\"),s=e(\"./uint8ArrayReader\"),o=e(\"./utils\"),a=e(\"./signature\"),c=e(\"./zipEntry\"),l=e(\"./support\"),h=e(\"./object\");function d(e,t){this.files=[],this.loadOptions=t,e&&this.load(e)}d.prototype={checkSignature:function(e){var t=this.reader.readString(4);if(t!==e)throw new Error(\"Corrupted zip or bug : unexpected signature (\"+o.pretty(t)+\", expected \"+o.pretty(e)+\")\")},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2),this.zipComment=this.reader.readString(this.zipCommentLength),this.zipComment=h.utf8decode(this.zipComment)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.versionMadeBy=this.reader.readString(2),this.versionNeeded=this.reader.readInt(2),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var e,t,n,r=this.zip64EndOfCentralSize-44;0<r;)e=this.reader.readInt(2),t=this.reader.readInt(4),n=this.reader.readString(t),this.zip64ExtensibleData[e]={id:e,length:t,value:n}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),this.disksCount>1)throw new Error(\"Multi-volumes zip are not supported\")},readLocalFiles:function(){var e,t;for(e=0;e<this.files.length;e++)this.reader.setIndex((t=this.files[e]).localHeaderOffset),this.checkSignature(a.LOCAL_FILE_HEADER),t.readLocalPart(this.reader),t.handleUTF8()},readCentralDir:function(){var e;for(this.reader.setIndex(this.centralDirOffset);this.reader.readString(4)===a.CENTRAL_FILE_HEADER;)(e=new c({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(e)},readEndOfCentral:function(){var e=this.reader.lastIndexOfSignature(a.CENTRAL_DIRECTORY_END);if(-1===e)throw new Error(\"Corrupted zip : can't find end of central directory\");if(this.reader.setIndex(e),this.checkSignature(a.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===o.MAX_VALUE_16BITS||this.diskWithCentralDirStart===o.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===o.MAX_VALUE_16BITS||this.centralDirRecords===o.MAX_VALUE_16BITS||this.centralDirSize===o.MAX_VALUE_32BITS||this.centralDirOffset===o.MAX_VALUE_32BITS){if(this.zip64=!0,-1===(e=this.reader.lastIndexOfSignature(a.ZIP64_CENTRAL_DIRECTORY_LOCATOR)))throw new Error(\"Corrupted zip : can't find the ZIP64 end of central directory locator\");this.reader.setIndex(e),this.checkSignature(a.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(a.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}},prepareReader:function(e){var t=o.getTypeOf(e);this.reader=\"string\"!==t||l.uint8array?\"nodebuffer\"===t?new i(e):new s(o.transformTo(\"uint8array\",e)):new r(e,this.loadOptions.optimizedBinaryString)},load:function(e){this.prepareReader(e),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},t.exports=d},{\"./nodeBufferReader\":12,\"./object\":13,\"./signature\":14,\"./stringReader\":15,\"./support\":17,\"./uint8ArrayReader\":18,\"./utils\":21,\"./zipEntry\":23}],23:[function(e,t,n){\"use strict\";var r=e(\"./stringReader\"),i=e(\"./utils\"),s=e(\"./compressedObject\"),o=e(\"./object\");function a(e,t){this.options=e,this.loadOptions=t}a.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},prepareCompressedContent:function(e,t,n){return function(){var r=e.index;e.setIndex(t);var i=e.readData(n);return e.setIndex(r),i}},prepareContent:function(e,t,n,r,s){return function(){var e=i.transformTo(r.uncompressInputType,this.getCompressedContent()),t=r.uncompress(e);if(t.length!==s)throw new Error(\"Bug : uncompressed data size mismatch\");return t}},readLocalPart:function(e){var t,n;if(e.skip(22),this.fileNameLength=e.readInt(2),n=e.readInt(2),this.fileName=e.readString(this.fileNameLength),e.skip(n),-1==this.compressedSize||-1==this.uncompressedSize)throw new Error(\"Bug or corrupted zip : didn't get enough informations from the central directory (compressedSize == -1 || uncompressedSize == -1)\");if(null===(t=i.findCompression(this.compressionMethod)))throw new Error(\"Corrupted zip : compression \"+i.pretty(this.compressionMethod)+\" unknown (inner file : \"+this.fileName+\")\");if(this.decompressed=new s,this.decompressed.compressedSize=this.compressedSize,this.decompressed.uncompressedSize=this.uncompressedSize,this.decompressed.crc32=this.crc32,this.decompressed.compressionMethod=this.compressionMethod,this.decompressed.getCompressedContent=this.prepareCompressedContent(e,e.index,this.compressedSize,t),this.decompressed.getContent=this.prepareContent(e,e.index,this.compressedSize,t,this.uncompressedSize),this.loadOptions.checkCRC32&&(this.decompressed=i.transformTo(\"string\",this.decompressed.getContent()),o.crc32(this.decompressed)!==this.crc32))throw new Error(\"Corrupted zip : CRC32 mismatch\")},readCentralPart:function(e){if(this.versionMadeBy=e.readString(2),this.versionNeeded=e.readInt(2),this.bitFlag=e.readInt(2),this.compressionMethod=e.readString(2),this.date=e.readDate(),this.crc32=e.readInt(4),this.compressedSize=e.readInt(4),this.uncompressedSize=e.readInt(4),this.fileNameLength=e.readInt(2),this.extraFieldsLength=e.readInt(2),this.fileCommentLength=e.readInt(2),this.diskNumberStart=e.readInt(2),this.internalFileAttributes=e.readInt(2),this.externalFileAttributes=e.readInt(4),this.localHeaderOffset=e.readInt(4),this.isEncrypted())throw new Error(\"Encrypted zip are not supported\");this.fileName=e.readString(this.fileNameLength),this.readExtraFields(e),this.parseZIP64ExtraField(e),this.fileComment=e.readString(this.fileCommentLength),this.dir=!!(16&this.externalFileAttributes)},parseZIP64ExtraField:function(e){if(this.extraFields[1]){var t=new r(this.extraFields[1].value);this.uncompressedSize===i.MAX_VALUE_32BITS&&(this.uncompressedSize=t.readInt(8)),this.compressedSize===i.MAX_VALUE_32BITS&&(this.compressedSize=t.readInt(8)),this.localHeaderOffset===i.MAX_VALUE_32BITS&&(this.localHeaderOffset=t.readInt(8)),this.diskNumberStart===i.MAX_VALUE_32BITS&&(this.diskNumberStart=t.readInt(4))}},readExtraFields:function(e){var t,n,r,i=e.index;for(this.extraFields=this.extraFields||{};e.index<i+this.extraFieldsLength;)t=e.readInt(2),n=e.readInt(2),r=e.readString(n),this.extraFields[t]={id:t,length:n,value:r}},handleUTF8:function(){if(this.useUTF8())this.fileName=o.utf8decode(this.fileName),this.fileComment=o.utf8decode(this.fileComment);else{var e=this.findExtraFieldUnicodePath();null!==e&&(this.fileName=e);var t=this.findExtraFieldUnicodeComment();null!==t&&(this.fileComment=t)}},findExtraFieldUnicodePath:function(){var e=this.extraFields[28789];if(e){var t=new r(e.value);return 1!==t.readInt(1)||o.crc32(this.fileName)!==t.readInt(4)?null:o.utf8decode(t.readString(e.length-5))}return null},findExtraFieldUnicodeComment:function(){var e=this.extraFields[25461];if(e){var t=new r(e.value);return 1!==t.readInt(1)||o.crc32(this.fileComment)!==t.readInt(4)?null:o.utf8decode(t.readString(e.length-5))}return null}},t.exports=a},{\"./compressedObject\":2,\"./object\":13,\"./stringReader\":15,\"./utils\":21}],24:[function(e,t,n){\"use strict\";var r={};(0,e(\"./lib/utils/common\").assign)(r,e(\"./lib/deflate\"),e(\"./lib/inflate\"),e(\"./lib/zlib/constants\")),t.exports=r},{\"./lib/deflate\":25,\"./lib/inflate\":26,\"./lib/utils/common\":27,\"./lib/zlib/constants\":30}],25:[function(e,t,n){\"use strict\";var r=e(\"./zlib/deflate.js\"),i=e(\"./utils/common\"),s=e(\"./utils/strings\"),o=e(\"./zlib/messages\"),a=e(\"./zlib/zstream\"),c=function(e){this.options=i.assign({level:-1,method:8,chunkSize:16384,windowBits:15,memLevel:8,strategy:0,to:\"\"},e||{});var t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new a,this.strm.avail_out=0;var n=r.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(0!==n)throw new Error(o[n]);t.header&&r.deflateSetHeader(this.strm,t.header)};function l(e,t){var n=new c(t);if(n.push(e,!0),n.err)throw n.msg;return n.result}c.prototype.push=function(e,t){var n,o,a=this.strm,c=this.options.chunkSize;if(this.ended)return!1;o=t===~~t?t:!0===t?4:0,a.input=\"string\"==typeof e?s.string2buf(e):e,a.next_in=0,a.avail_in=a.input.length;do{if(0===a.avail_out&&(a.output=new i.Buf8(c),a.next_out=0,a.avail_out=c),1!==(n=r.deflate(a,o))&&0!==n)return this.onEnd(n),this.ended=!0,!1;(0===a.avail_out||0===a.avail_in&&4===o)&&this.onData(\"string\"===this.options.to?s.buf2binstring(i.shrinkBuf(a.output,a.next_out)):i.shrinkBuf(a.output,a.next_out))}while((a.avail_in>0||0===a.avail_out)&&1!==n);return 4!==o||(n=r.deflateEnd(this.strm),this.onEnd(n),this.ended=!0,0===n)},c.prototype.onData=function(e){this.chunks.push(e)},c.prototype.onEnd=function(e){0===e&&(this.result=\"string\"===this.options.to?this.chunks.join(\"\"):i.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},n.Deflate=c,n.deflate=l,n.deflateRaw=function(e,t){return(t=t||{}).raw=!0,l(e,t)},n.gzip=function(e,t){return(t=t||{}).gzip=!0,l(e,t)}},{\"./utils/common\":27,\"./utils/strings\":28,\"./zlib/deflate.js\":32,\"./zlib/messages\":37,\"./zlib/zstream\":39}],26:[function(e,t,n){\"use strict\";var r=e(\"./zlib/inflate.js\"),i=e(\"./utils/common\"),s=e(\"./utils/strings\"),o=e(\"./zlib/constants\"),a=e(\"./zlib/messages\"),c=e(\"./zlib/zstream\"),l=e(\"./zlib/gzheader\"),h=function(e){this.options=i.assign({chunkSize:16384,windowBits:0,to:\"\"},e||{});var t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new c,this.strm.avail_out=0;var n=r.inflateInit2(this.strm,t.windowBits);if(n!==o.Z_OK)throw new Error(a[n]);this.header=new l,r.inflateGetHeader(this.strm,this.header)};function d(e,t){var n=new h(t);if(n.push(e,!0),n.err)throw n.msg;return n.result}h.prototype.push=function(e,t){var n,a,c,l,h,d=this.strm,u=this.options.chunkSize;if(this.ended)return!1;a=t===~~t?t:!0===t?o.Z_FINISH:o.Z_NO_FLUSH,d.input=\"string\"==typeof e?s.binstring2buf(e):e,d.next_in=0,d.avail_in=d.input.length;do{if(0===d.avail_out&&(d.output=new i.Buf8(u),d.next_out=0,d.avail_out=u),(n=r.inflate(d,o.Z_NO_FLUSH))!==o.Z_STREAM_END&&n!==o.Z_OK)return this.onEnd(n),this.ended=!0,!1;d.next_out&&(0===d.avail_out||n===o.Z_STREAM_END||0===d.avail_in&&a===o.Z_FINISH)&&(\"string\"===this.options.to?(c=s.utf8border(d.output,d.next_out),l=d.next_out-c,h=s.buf2string(d.output,c),d.next_out=l,d.avail_out=u-l,l&&i.arraySet(d.output,d.output,c,l,0),this.onData(h)):this.onData(i.shrinkBuf(d.output,d.next_out)))}while(d.avail_in>0&&n!==o.Z_STREAM_END);return n===o.Z_STREAM_END&&(a=o.Z_FINISH),a!==o.Z_FINISH||(n=r.inflateEnd(this.strm),this.onEnd(n),this.ended=!0,n===o.Z_OK)},h.prototype.onData=function(e){this.chunks.push(e)},h.prototype.onEnd=function(e){e===o.Z_OK&&(this.result=\"string\"===this.options.to?this.chunks.join(\"\"):i.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},n.Inflate=h,n.inflate=d,n.inflateRaw=function(e,t){return(t=t||{}).raw=!0,d(e,t)},n.ungzip=d},{\"./utils/common\":27,\"./utils/strings\":28,\"./zlib/constants\":30,\"./zlib/gzheader\":33,\"./zlib/inflate.js\":35,\"./zlib/messages\":37,\"./zlib/zstream\":39}],27:[function(e,t,n){\"use strict\";var r=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;n.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var n=t.shift();if(n){if(\"object\"!=typeof n)throw new TypeError(n+\"must be non-object\");for(var r in n)n.hasOwnProperty(r)&&(e[r]=n[r])}}return e},n.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var i={arraySet:function(e,t,n,r,i){if(t.subarray&&e.subarray)e.set(t.subarray(n,n+r),i);else for(var s=0;s<r;s++)e[i+s]=t[n+s]},flattenChunks:function(e){var t,n,r,i,s,o;for(r=0,t=0,n=e.length;t<n;t++)r+=e[t].length;for(o=new Uint8Array(r),i=0,t=0,n=e.length;t<n;t++)o.set(s=e[t],i),i+=s.length;return o}},s={arraySet:function(e,t,n,r,i){for(var s=0;s<r;s++)e[i+s]=t[n+s]},flattenChunks:function(e){return[].concat.apply([],e)}};n.setTyped=function(e){e?(n.Buf8=Uint8Array,n.Buf16=Uint16Array,n.Buf32=Int32Array,n.assign(n,i)):(n.Buf8=Array,n.Buf16=Array,n.Buf32=Array,n.assign(n,s))},n.setTyped(r)},{}],28:[function(e,t,n){\"use strict\";var r=e(\"./common\"),i=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(l){i=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(l){s=!1}for(var o=new r.Buf8(256),a=0;a<256;a++)o[a]=a>=252?6:a>=248?5:a>=240?4:a>=224?3:a>=192?2:1;function c(e,t){if(t<65537&&(e.subarray&&s||!e.subarray&&i))return String.fromCharCode.apply(null,r.shrinkBuf(e,t));for(var n=\"\",o=0;o<t;o++)n+=String.fromCharCode(e[o]);return n}o[254]=o[254]=1,n.string2buf=function(e){var t,n,i,s,o,a=e.length,c=0;for(s=0;s<a;s++)55296==(64512&(n=e.charCodeAt(s)))&&s+1<a&&56320==(64512&(i=e.charCodeAt(s+1)))&&(n=65536+(n-55296<<10)+(i-56320),s++),c+=n<128?1:n<2048?2:n<65536?3:4;for(t=new r.Buf8(c),o=0,s=0;o<c;s++)55296==(64512&(n=e.charCodeAt(s)))&&s+1<a&&56320==(64512&(i=e.charCodeAt(s+1)))&&(n=65536+(n-55296<<10)+(i-56320),s++),n<128?t[o++]=n:n<2048?(t[o++]=192|n>>>6,t[o++]=128|63&n):n<65536?(t[o++]=224|n>>>12,t[o++]=128|n>>>6&63,t[o++]=128|63&n):(t[o++]=240|n>>>18,t[o++]=128|n>>>12&63,t[o++]=128|n>>>6&63,t[o++]=128|63&n);return t},n.buf2binstring=function(e){return c(e,e.length)},n.binstring2buf=function(e){for(var t=new r.Buf8(e.length),n=0,i=t.length;n<i;n++)t[n]=e.charCodeAt(n);return t},n.buf2string=function(e,t){var n,r,i,s,a=t||e.length,l=new Array(2*a);for(r=0,n=0;n<a;)if((i=e[n++])<128)l[r++]=i;else if((s=o[i])>4)l[r++]=65533,n+=s-1;else{for(i&=2===s?31:3===s?15:7;s>1&&n<a;)i=i<<6|63&e[n++],s--;s>1?l[r++]=65533:i<65536?l[r++]=i:(l[r++]=55296|(i-=65536)>>10&1023,l[r++]=56320|1023&i)}return c(l,r)},n.utf8border=function(e,t){var n;for((t=t||e.length)>e.length&&(t=e.length),n=t-1;n>=0&&128==(192&e[n]);)n--;return n<0||0===n?t:n+o[e[n]]>t?n:t}},{\"./common\":27}],29:[function(e,t,n){\"use strict\";t.exports=function(e,t,n,r){for(var i=65535&e|0,s=e>>>16&65535|0,o=0;0!==n;){n-=o=n>2e3?2e3:n;do{s=s+(i=i+t[r++]|0)|0}while(--o);i%=65521,s%=65521}return i|s<<16|0}},{}],30:[function(e,t,n){t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],31:[function(e,t,n){\"use strict\";var r=function(){for(var e,t=[],n=0;n<256;n++){e=n;for(var r=0;r<8;r++)e=1&e?3988292384^e>>>1:e>>>1;t[n]=e}return t}();t.exports=function(e,t,n,i){var s=r,o=i+n;e^=-1;for(var a=i;a<o;a++)e=e>>>8^s[255&(e^t[a])];return-1^e}},{}],32:[function(e,t,n){\"use strict\";var r=e(\"../utils/common\"),i=e(\"./trees\"),s=e(\"./adler32\"),o=e(\"./crc32\"),a=e(\"./messages\"),c=-2,l=258,h=262,d=103,u=113,f=666;function g(e,t){return e.msg=a[t],t}function p(e){return(e<<1)-(e>4?9:0)}function m(e){for(var t=e.length;--t>=0;)e[t]=0}function C(e){var t=e.state,n=t.pending;n>e.avail_out&&(n=e.avail_out),0!==n&&(r.arraySet(e.output,t.pending_buf,t.pending_out,n,e.next_out),e.next_out+=n,t.pending_out+=n,e.total_out+=n,e.avail_out-=n,t.pending-=n,0===t.pending&&(t.pending_out=0))}function b(e,t){i._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,C(e.strm)}function v(e,t){e.pending_buf[e.pending++]=t}function I(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function A(e,t){var n,r,i=e.max_chain_length,s=e.strstart,o=e.prev_length,a=e.nice_match,c=e.strstart>e.w_size-h?e.strstart-(e.w_size-h):0,d=e.window,u=e.w_mask,f=e.prev,g=e.strstart+l,p=d[s+o-1],m=d[s+o];e.prev_length>=e.good_match&&(i>>=2),a>e.lookahead&&(a=e.lookahead);do{if(d[(n=t)+o]===m&&d[n+o-1]===p&&d[n]===d[s]&&d[++n]===d[s+1]){s+=2,n++;do{}while(d[++s]===d[++n]&&d[++s]===d[++n]&&d[++s]===d[++n]&&d[++s]===d[++n]&&d[++s]===d[++n]&&d[++s]===d[++n]&&d[++s]===d[++n]&&d[++s]===d[++n]&&s<g);if(r=l-(g-s),s=g-l,r>o){if(e.match_start=t,o=r,r>=a)break;p=d[s+o-1],m=d[s+o]}}}while((t=f[t&u])>c&&0!=--i);return o<=e.lookahead?o:e.lookahead}function y(e){var t,n,i,a,c,l,d,u,f,g,p=e.w_size;do{if(a=e.window_size-e.lookahead-e.strstart,e.strstart>=p+(p-h)){r.arraySet(e.window,e.window,p,p,0),e.match_start-=p,e.strstart-=p,e.block_start-=p,t=n=e.hash_size;do{i=e.head[--t],e.head[t]=i>=p?i-p:0}while(--n);t=n=p;do{i=e.prev[--t],e.prev[t]=i>=p?i-p:0}while(--n);a+=p}if(0===e.strm.avail_in)break;if(d=e.window,u=e.strstart+e.lookahead,g=void 0,(g=(l=e.strm).avail_in)>(f=a)&&(g=f),n=0===g?0:(l.avail_in-=g,r.arraySet(d,l.input,l.next_in,g,u),1===l.state.wrap?l.adler=s(l.adler,d,g,u):2===l.state.wrap&&(l.adler=o(l.adler,d,g,u)),l.next_in+=g,l.total_in+=g,g),e.lookahead+=n,e.lookahead+e.insert>=3)for(e.ins_h=e.window[c=e.strstart-e.insert],e.ins_h=(e.ins_h<<e.hash_shift^e.window[c+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[c+3-1])&e.hash_mask,e.prev[c&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=c,c++,e.insert--,!(e.lookahead+e.insert<3)););}while(e.lookahead<h&&0!==e.strm.avail_in)}function w(e,t){for(var n,r;;){if(e.lookahead<h){if(y(e),e.lookahead<h&&0===t)return 1;if(0===e.lookahead)break}if(n=0,e.lookahead>=3&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==n&&e.strstart-n<=e.w_size-h&&(e.match_length=A(e,n)),e.match_length>=3)if(r=i._tr_tally(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart}while(0!=--e.match_length);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else r=i._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(r&&(b(e,!1),0===e.strm.avail_out))return 1}return e.insert=e.strstart<2?e.strstart:2,4===t?(b(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(b(e,!1),0===e.strm.avail_out)?1:2}function S(e,t){for(var n,r,s;;){if(e.lookahead<h){if(y(e),e.lookahead<h&&0===t)return 1;if(0===e.lookahead)break}if(n=0,e.lookahead>=3&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=2,0!==n&&e.prev_length<e.max_lazy_match&&e.strstart-n<=e.w_size-h&&(e.match_length=A(e,n),e.match_length<=5&&(1===e.strategy||3===e.match_length&&e.strstart-e.match_start>4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){s=e.strstart+e.lookahead-3,r=i._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=s&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart)}while(0!=--e.prev_length);if(e.match_available=0,e.match_length=2,e.strstart++,r&&(b(e,!1),0===e.strm.avail_out))return 1}else if(e.match_available){if((r=i._tr_tally(e,0,e.window[e.strstart-1]))&&b(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return 1}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(r=i._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<2?e.strstart:2,4===t?(b(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(b(e,!1),0===e.strm.avail_out)?1:2}var x,E=function(e,t,n,r,i){this.good_length=e,this.max_lazy=t,this.nice_length=n,this.max_chain=r,this.func=i};function k(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=8,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new r.Buf16(1146),this.dyn_dtree=new r.Buf16(122),this.bl_tree=new r.Buf16(78),m(this.dyn_ltree),m(this.dyn_dtree),m(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new r.Buf16(16),this.heap=new r.Buf16(573),m(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new r.Buf16(573),m(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function _(e){var t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=2,(t=e.state).pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?42:u,e.adler=2===t.wrap?0:1,t.last_flush=0,i._tr_init(t),0):g(e,c)}function T(e){var t,n=_(e);return 0===n&&((t=e.state).window_size=2*t.w_size,m(t.head),t.max_lazy_match=x[t.level].max_lazy,t.good_match=x[t.level].good_length,t.nice_match=x[t.level].nice_length,t.max_chain_length=x[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=2,t.match_available=0,t.ins_h=0),n}function R(e,t,n,i,s,o){if(!e)return c;var a=1;if(-1===t&&(t=6),i<0?(a=0,i=-i):i>15&&(a=2,i-=16),s<1||s>9||8!==n||i<8||i>15||t<0||t>9||o<0||o>4)return g(e,c);8===i&&(i=9);var l=new k;return e.state=l,l.strm=e,l.wrap=a,l.gzhead=null,l.w_bits=i,l.w_size=1<<l.w_bits,l.w_mask=l.w_size-1,l.hash_bits=s+7,l.hash_size=1<<l.hash_bits,l.hash_mask=l.hash_size-1,l.hash_shift=~~((l.hash_bits+3-1)/3),l.window=new r.Buf8(2*l.w_size),l.head=new r.Buf16(l.hash_size),l.prev=new r.Buf16(l.w_size),l.lit_bufsize=1<<s+6,l.pending_buf_size=4*l.lit_bufsize,l.pending_buf=new r.Buf8(l.pending_buf_size),l.d_buf=l.lit_bufsize>>1,l.l_buf=3*l.lit_bufsize,l.level=t,l.strategy=o,l.method=n,T(e)}x=[new E(0,0,0,0,(function(e,t){var n=65535;for(n>e.pending_buf_size-5&&(n=e.pending_buf_size-5);;){if(e.lookahead<=1){if(y(e),0===e.lookahead&&0===t)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var r=e.block_start+n;if((0===e.strstart||e.strstart>=r)&&(e.lookahead=e.strstart-r,e.strstart=r,b(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-h&&(b(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(b(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&b(e,!1),1)})),new E(4,4,8,4,w),new E(4,5,16,8,w),new E(4,6,32,32,w),new E(4,4,16,16,S),new E(8,16,32,32,S),new E(8,16,128,128,S),new E(8,32,128,256,S),new E(32,128,258,1024,S),new E(32,258,258,4096,S)],n.deflateInit=function(e,t){return R(e,t,8,15,8,0)},n.deflateInit2=R,n.deflateReset=T,n.deflateResetKeep=_,n.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?c:(e.state.gzhead=t,0):c},n.deflate=function(e,t){var n,r,s,a;if(!e||!e.state||t>5||t<0)return e?g(e,c):c;if(r=e.state,!e.output||!e.input&&0!==e.avail_in||r.status===f&&4!==t)return g(e,0===e.avail_out?-5:c);if(r.strm=e,n=r.last_flush,r.last_flush=t,42===r.status)if(2===r.wrap)e.adler=0,v(r,31),v(r,139),v(r,8),r.gzhead?(v(r,(r.gzhead.text?1:0)+(r.gzhead.hcrc?2:0)+(r.gzhead.extra?4:0)+(r.gzhead.name?8:0)+(r.gzhead.comment?16:0)),v(r,255&r.gzhead.time),v(r,r.gzhead.time>>8&255),v(r,r.gzhead.time>>16&255),v(r,r.gzhead.time>>24&255),v(r,9===r.level?2:r.strategy>=2||r.level<2?4:0),v(r,255&r.gzhead.os),r.gzhead.extra&&r.gzhead.extra.length&&(v(r,255&r.gzhead.extra.length),v(r,r.gzhead.extra.length>>8&255)),r.gzhead.hcrc&&(e.adler=o(e.adler,r.pending_buf,r.pending,0)),r.gzindex=0,r.status=69):(v(r,0),v(r,0),v(r,0),v(r,0),v(r,0),v(r,9===r.level?2:r.strategy>=2||r.level<2?4:0),v(r,3),r.status=u);else{var h=8+(r.w_bits-8<<4)<<8;h|=(r.strategy>=2||r.level<2?0:r.level<6?1:6===r.level?2:3)<<6,0!==r.strstart&&(h|=32),h+=31-h%31,r.status=u,I(r,h),0!==r.strstart&&(I(r,e.adler>>>16),I(r,65535&e.adler)),e.adler=1}if(69===r.status)if(r.gzhead.extra){for(s=r.pending;r.gzindex<(65535&r.gzhead.extra.length)&&(r.pending!==r.pending_buf_size||(r.gzhead.hcrc&&r.pending>s&&(e.adler=o(e.adler,r.pending_buf,r.pending-s,s)),C(e),s=r.pending,r.pending!==r.pending_buf_size));)v(r,255&r.gzhead.extra[r.gzindex]),r.gzindex++;r.gzhead.hcrc&&r.pending>s&&(e.adler=o(e.adler,r.pending_buf,r.pending-s,s)),r.gzindex===r.gzhead.extra.length&&(r.gzindex=0,r.status=73)}else r.status=73;if(73===r.status)if(r.gzhead.name){s=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>s&&(e.adler=o(e.adler,r.pending_buf,r.pending-s,s)),C(e),s=r.pending,r.pending===r.pending_buf_size)){a=1;break}a=r.gzindex<r.gzhead.name.length?255&r.gzhead.name.charCodeAt(r.gzindex++):0,v(r,a)}while(0!==a);r.gzhead.hcrc&&r.pending>s&&(e.adler=o(e.adler,r.pending_buf,r.pending-s,s)),0===a&&(r.gzindex=0,r.status=91)}else r.status=91;if(91===r.status)if(r.gzhead.comment){s=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>s&&(e.adler=o(e.adler,r.pending_buf,r.pending-s,s)),C(e),s=r.pending,r.pending===r.pending_buf_size)){a=1;break}a=r.gzindex<r.gzhead.comment.length?255&r.gzhead.comment.charCodeAt(r.gzindex++):0,v(r,a)}while(0!==a);r.gzhead.hcrc&&r.pending>s&&(e.adler=o(e.adler,r.pending_buf,r.pending-s,s)),0===a&&(r.status=d)}else r.status=d;if(r.status===d&&(r.gzhead.hcrc?(r.pending+2>r.pending_buf_size&&C(e),r.pending+2<=r.pending_buf_size&&(v(r,255&e.adler),v(r,e.adler>>8&255),e.adler=0,r.status=u)):r.status=u),0!==r.pending){if(C(e),0===e.avail_out)return r.last_flush=-1,0}else if(0===e.avail_in&&p(t)<=p(n)&&4!==t)return g(e,-5);if(r.status===f&&0!==e.avail_in)return g(e,-5);if(0!==e.avail_in||0!==r.lookahead||0!==t&&r.status!==f){var A=2===r.strategy?function(e,t){for(var n;;){if(0===e.lookahead&&(y(e),0===e.lookahead)){if(0===t)return 1;break}if(e.match_length=0,n=i._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,n&&(b(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(b(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(b(e,!1),0===e.strm.avail_out)?1:2}(r,t):3===r.strategy?function(e,t){for(var n,r,s,o,a=e.window;;){if(e.lookahead<=l){if(y(e),e.lookahead<=l&&0===t)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(r=a[s=e.strstart-1])===a[++s]&&r===a[++s]&&r===a[++s]){o=e.strstart+l;do{}while(r===a[++s]&&r===a[++s]&&r===a[++s]&&r===a[++s]&&r===a[++s]&&r===a[++s]&&r===a[++s]&&r===a[++s]&&s<o);e.match_length=l-(o-s),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(n=i._tr_tally(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(n=i._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),n&&(b(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(b(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(b(e,!1),0===e.strm.avail_out)?1:2}(r,t):x[r.level].func(r,t);if(3!==A&&4!==A||(r.status=f),1===A||3===A)return 0===e.avail_out&&(r.last_flush=-1),0;if(2===A&&(1===t?i._tr_align(r):5!==t&&(i._tr_stored_block(r,0,0,!1),3===t&&(m(r.head),0===r.lookahead&&(r.strstart=0,r.block_start=0,r.insert=0))),C(e),0===e.avail_out))return r.last_flush=-1,0}return 4!==t?0:r.wrap<=0?1:(2===r.wrap?(v(r,255&e.adler),v(r,e.adler>>8&255),v(r,e.adler>>16&255),v(r,e.adler>>24&255),v(r,255&e.total_in),v(r,e.total_in>>8&255),v(r,e.total_in>>16&255),v(r,e.total_in>>24&255)):(I(r,e.adler>>>16),I(r,65535&e.adler)),C(e),r.wrap>0&&(r.wrap=-r.wrap),0!==r.pending?0:1)},n.deflateEnd=function(e){var t;return e&&e.state?42!==(t=e.state.status)&&69!==t&&73!==t&&91!==t&&t!==d&&t!==u&&t!==f?g(e,c):(e.state=null,t===u?g(e,-3):0):c},n.deflateInfo=\"pako deflate (from Nodeca project)\"},{\"../utils/common\":27,\"./adler32\":29,\"./crc32\":31,\"./messages\":37,\"./trees\":38}],33:[function(e,t,n){\"use strict\";t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}},{}],34:[function(e,t,n){\"use strict\";t.exports=function(e,t){var n,r,i,s,o,a,c,l,h,d,u,f,g,p,m,C,b,v,I,A,y,w,S,x,E;x=e.input,i=(r=e.next_in)+(e.avail_in-5),E=e.output,o=(s=e.next_out)-(t-e.avail_out),a=s+(e.avail_out-257),c=(n=e.state).dmax,l=n.wsize,h=n.whave,d=n.wnext,u=n.window,f=n.hold,g=n.bits,p=n.lencode,m=n.distcode,C=(1<<n.lenbits)-1,b=(1<<n.distbits)-1;e:do{g<15&&(f+=x[r++]<<g,f+=x[r++]<<(g+=8),g+=8),v=p[f&C];t:for(;;){if(f>>>=I=v>>>24,g-=I,0==(I=v>>>16&255))E[s++]=65535&v;else{if(!(16&I)){if(0==(64&I)){v=p[(65535&v)+(f&(1<<I)-1)];continue t}if(32&I){n.mode=12;break e}e.msg=\"invalid literal/length code\",n.mode=30;break e}A=65535&v,(I&=15)&&(g<I&&(f+=x[r++]<<g,g+=8),A+=f&(1<<I)-1,f>>>=I,g-=I),g<15&&(f+=x[r++]<<g,f+=x[r++]<<(g+=8),g+=8),v=m[f&b];n:for(;;){if(f>>>=I=v>>>24,g-=I,!(16&(I=v>>>16&255))){if(0==(64&I)){v=m[(65535&v)+(f&(1<<I)-1)];continue n}e.msg=\"invalid distance code\",n.mode=30;break e}if(y=65535&v,g<(I&=15)&&(f+=x[r++]<<g,(g+=8)<I&&(f+=x[r++]<<g,g+=8)),(y+=f&(1<<I)-1)>c){e.msg=\"invalid distance too far back\",n.mode=30;break e}if(f>>>=I,g-=I,y>(I=s-o)){if((I=y-I)>h&&n.sane){e.msg=\"invalid distance too far back\",n.mode=30;break e}if(w=0,S=u,0===d){if(w+=l-I,I<A){A-=I;do{E[s++]=u[w++]}while(--I);w=s-y,S=E}}else if(d<I){if(w+=l+d-I,(I-=d)<A){A-=I;do{E[s++]=u[w++]}while(--I);if(w=0,d<A){A-=I=d;do{E[s++]=u[w++]}while(--I);w=s-y,S=E}}}else if(w+=d-I,I<A){A-=I;do{E[s++]=u[w++]}while(--I);w=s-y,S=E}for(;A>2;)E[s++]=S[w++],E[s++]=S[w++],E[s++]=S[w++],A-=3;A&&(E[s++]=S[w++],A>1&&(E[s++]=S[w++]))}else{w=s-y;do{E[s++]=E[w++],E[s++]=E[w++],E[s++]=E[w++],A-=3}while(A>2);A&&(E[s++]=E[w++],A>1&&(E[s++]=E[w++]))}break}}break}}while(r<i&&s<a);f&=(1<<(g-=(A=g>>3)<<3))-1,e.next_in=r-=A,e.next_out=s,e.avail_in=r<i?i-r+5:5-(r-i),e.avail_out=s<a?a-s+257:257-(s-a),n.hold=f,n.bits=g}},{}],35:[function(e,t,n){\"use strict\";var r=e(\"../utils/common\"),i=e(\"./adler32\"),s=e(\"./crc32\"),o=e(\"./inffast\"),a=e(\"./inftrees\"),c=-2,l=12,h=30;function d(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function u(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new r.Buf16(320),this.work=new r.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(e){var t;return e&&e.state?(e.total_in=e.total_out=(t=e.state).total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new r.Buf32(852),t.distcode=t.distdyn=new r.Buf32(592),t.sane=1,t.back=-1,0):c}function g(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,f(e)):c}function p(e,t){var n,r;return e&&e.state?(t<0?(n=0,t=-t):(n=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?c:(null!==(r=e.state).window&&r.wbits!==t&&(r.window=null),r.wrap=n,r.wbits=t,g(e))):c}function m(e,t){var n,r;return e?(r=new u,e.state=r,r.window=null,0!==(n=p(e,t))&&(e.state=null),n):c}var C,b,v=!0;function I(e){if(v){var t;for(C=new r.Buf32(512),b=new r.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(a(1,e.lens,0,288,C,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;a(2,e.lens,0,32,b,0,e.work,{bits:5}),v=!1}e.lencode=C,e.lenbits=9,e.distcode=b,e.distbits=5}n.inflateReset=g,n.inflateReset2=p,n.inflateResetKeep=f,n.inflateInit=function(e){return m(e,15)},n.inflateInit2=m,n.inflate=function(e,t){var n,u,f,g,p,m,C,b,v,A,y,w,S,x,E,k,_,T,R,B,O,L,P,F,N=0,M=new r.Buf8(4),D=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return c;(n=e.state).mode===l&&(n.mode=13),p=e.next_out,f=e.output,g=e.next_in,u=e.input,b=n.hold,v=n.bits,A=m=e.avail_in,y=C=e.avail_out,L=0;e:for(;;)switch(n.mode){case 1:if(0===n.wrap){n.mode=13;break}for(;v<16;){if(0===m)break e;m--,b+=u[g++]<<v,v+=8}if(2&n.wrap&&35615===b){n.check=0,M[0]=255&b,M[1]=b>>>8&255,n.check=s(n.check,M,2,0),b=0,v=0,n.mode=2;break}if(n.flags=0,n.head&&(n.head.done=!1),!(1&n.wrap)||(((255&b)<<8)+(b>>8))%31){e.msg=\"incorrect header check\",n.mode=h;break}if(8!=(15&b)){e.msg=\"unknown compression method\",n.mode=h;break}if(v-=4,O=8+(15&(b>>>=4)),0===n.wbits)n.wbits=O;else if(O>n.wbits){e.msg=\"invalid window size\",n.mode=h;break}n.dmax=1<<O,e.adler=n.check=1,n.mode=512&b?10:l,b=0,v=0;break;case 2:for(;v<16;){if(0===m)break e;m--,b+=u[g++]<<v,v+=8}if(n.flags=b,8!=(255&n.flags)){e.msg=\"unknown compression method\",n.mode=h;break}if(57344&n.flags){e.msg=\"unknown header flags set\",n.mode=h;break}n.head&&(n.head.text=b>>8&1),512&n.flags&&(M[0]=255&b,M[1]=b>>>8&255,n.check=s(n.check,M,2,0)),b=0,v=0,n.mode=3;case 3:for(;v<32;){if(0===m)break e;m--,b+=u[g++]<<v,v+=8}n.head&&(n.head.time=b),512&n.flags&&(M[0]=255&b,M[1]=b>>>8&255,M[2]=b>>>16&255,M[3]=b>>>24&255,n.check=s(n.check,M,4,0)),b=0,v=0,n.mode=4;case 4:for(;v<16;){if(0===m)break e;m--,b+=u[g++]<<v,v+=8}n.head&&(n.head.xflags=255&b,n.head.os=b>>8),512&n.flags&&(M[0]=255&b,M[1]=b>>>8&255,n.check=s(n.check,M,2,0)),b=0,v=0,n.mode=5;case 5:if(1024&n.flags){for(;v<16;){if(0===m)break e;m--,b+=u[g++]<<v,v+=8}n.length=b,n.head&&(n.head.extra_len=b),512&n.flags&&(M[0]=255&b,M[1]=b>>>8&255,n.check=s(n.check,M,2,0)),b=0,v=0}else n.head&&(n.head.extra=null);n.mode=6;case 6:if(1024&n.flags&&((w=n.length)>m&&(w=m),w&&(n.head&&(O=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Array(n.head.extra_len)),r.arraySet(n.head.extra,u,g,w,O)),512&n.flags&&(n.check=s(n.check,u,w,g)),m-=w,g+=w,n.length-=w),n.length))break e;n.length=0,n.mode=7;case 7:if(2048&n.flags){if(0===m)break e;w=0;do{O=u[g+w++],n.head&&O&&n.length<65536&&(n.head.name+=String.fromCharCode(O))}while(O&&w<m);if(512&n.flags&&(n.check=s(n.check,u,w,g)),m-=w,g+=w,O)break e}else n.head&&(n.head.name=null);n.length=0,n.mode=8;case 8:if(4096&n.flags){if(0===m)break e;w=0;do{O=u[g+w++],n.head&&O&&n.length<65536&&(n.head.comment+=String.fromCharCode(O))}while(O&&w<m);if(512&n.flags&&(n.check=s(n.check,u,w,g)),m-=w,g+=w,O)break e}else n.head&&(n.head.comment=null);n.mode=9;case 9:if(512&n.flags){for(;v<16;){if(0===m)break e;m--,b+=u[g++]<<v,v+=8}if(b!==(65535&n.check)){e.msg=\"header crc mismatch\",n.mode=h;break}b=0,v=0}n.head&&(n.head.hcrc=n.flags>>9&1,n.head.done=!0),e.adler=n.check=0,n.mode=l;break;case 10:for(;v<32;){if(0===m)break e;m--,b+=u[g++]<<v,v+=8}e.adler=n.check=d(b),b=0,v=0,n.mode=11;case 11:if(0===n.havedict)return e.next_out=p,e.avail_out=C,e.next_in=g,e.avail_in=m,n.hold=b,n.bits=v,2;e.adler=n.check=1,n.mode=l;case l:if(5===t||6===t)break e;case 13:if(n.last){b>>>=7&v,v-=7&v,n.mode=27;break}for(;v<3;){if(0===m)break e;m--,b+=u[g++]<<v,v+=8}switch(n.last=1&b,v-=1,3&(b>>>=1)){case 0:n.mode=14;break;case 1:if(I(n),n.mode=20,6===t){b>>>=2,v-=2;break e}break;case 2:n.mode=17;break;case 3:e.msg=\"invalid block type\",n.mode=h}b>>>=2,v-=2;break;case 14:for(b>>>=7&v,v-=7&v;v<32;){if(0===m)break e;m--,b+=u[g++]<<v,v+=8}if((65535&b)!=(b>>>16^65535)){e.msg=\"invalid stored block lengths\",n.mode=h;break}if(n.length=65535&b,b=0,v=0,n.mode=15,6===t)break e;case 15:n.mode=16;case 16:if(w=n.length){if(w>m&&(w=m),w>C&&(w=C),0===w)break e;r.arraySet(f,u,g,w,p),m-=w,g+=w,C-=w,p+=w,n.length-=w;break}n.mode=l;break;case 17:for(;v<14;){if(0===m)break e;m--,b+=u[g++]<<v,v+=8}if(n.nlen=257+(31&b),v-=5,n.ndist=1+(31&(b>>>=5)),v-=5,n.ncode=4+(15&(b>>>=5)),b>>>=4,v-=4,n.nlen>286||n.ndist>30){e.msg=\"too many length or distance symbols\",n.mode=h;break}n.have=0,n.mode=18;case 18:for(;n.have<n.ncode;){for(;v<3;){if(0===m)break e;m--,b+=u[g++]<<v,v+=8}n.lens[D[n.have++]]=7&b,b>>>=3,v-=3}for(;n.have<19;)n.lens[D[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,L=a(0,n.lens,0,19,n.lencode,0,n.work,P={bits:n.lenbits}),n.lenbits=P.bits,L){e.msg=\"invalid code lengths set\",n.mode=h;break}n.have=0,n.mode=19;case 19:for(;n.have<n.nlen+n.ndist;){for(;k=(N=n.lencode[b&(1<<n.lenbits)-1])>>>16&255,_=65535&N,!((E=N>>>24)<=v);){if(0===m)break e;m--,b+=u[g++]<<v,v+=8}if(_<16)b>>>=E,v-=E,n.lens[n.have++]=_;else{if(16===_){for(F=E+2;v<F;){if(0===m)break e;m--,b+=u[g++]<<v,v+=8}if(b>>>=E,v-=E,0===n.have){e.msg=\"invalid bit length repeat\",n.mode=h;break}O=n.lens[n.have-1],w=3+(3&b),b>>>=2,v-=2}else if(17===_){for(F=E+3;v<F;){if(0===m)break e;m--,b+=u[g++]<<v,v+=8}v-=E,O=0,w=3+(7&(b>>>=E)),b>>>=3,v-=3}else{for(F=E+7;v<F;){if(0===m)break e;m--,b+=u[g++]<<v,v+=8}v-=E,O=0,w=11+(127&(b>>>=E)),b>>>=7,v-=7}if(n.have+w>n.nlen+n.ndist){e.msg=\"invalid bit length repeat\",n.mode=h;break}for(;w--;)n.lens[n.have++]=O}}if(n.mode===h)break;if(0===n.lens[256]){e.msg=\"invalid code -- missing end-of-block\",n.mode=h;break}if(n.lenbits=9,L=a(1,n.lens,0,n.nlen,n.lencode,0,n.work,P={bits:n.lenbits}),n.lenbits=P.bits,L){e.msg=\"invalid literal/lengths set\",n.mode=h;break}if(n.distbits=6,n.distcode=n.distdyn,L=a(2,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,P={bits:n.distbits}),n.distbits=P.bits,L){e.msg=\"invalid distances set\",n.mode=h;break}if(n.mode=20,6===t)break e;case 20:n.mode=21;case 21:if(m>=6&&C>=258){e.next_out=p,e.avail_out=C,e.next_in=g,e.avail_in=m,n.hold=b,n.bits=v,o(e,y),p=e.next_out,f=e.output,C=e.avail_out,g=e.next_in,u=e.input,m=e.avail_in,b=n.hold,v=n.bits,n.mode===l&&(n.back=-1);break}for(n.back=0;k=(N=n.lencode[b&(1<<n.lenbits)-1])>>>16&255,_=65535&N,!((E=N>>>24)<=v);){if(0===m)break e;m--,b+=u[g++]<<v,v+=8}if(k&&0==(240&k)){for(T=E,R=k,B=_;k=(N=n.lencode[B+((b&(1<<T+R)-1)>>T)])>>>16&255,_=65535&N,!(T+(E=N>>>24)<=v);){if(0===m)break e;m--,b+=u[g++]<<v,v+=8}b>>>=T,v-=T,n.back+=T}if(b>>>=E,v-=E,n.back+=E,n.length=_,0===k){n.mode=26;break}if(32&k){n.back=-1,n.mode=l;break}if(64&k){e.msg=\"invalid literal/length code\",n.mode=h;break}n.extra=15&k,n.mode=22;case 22:if(n.extra){for(F=n.extra;v<F;){if(0===m)break e;m--,b+=u[g++]<<v,v+=8}n.length+=b&(1<<n.extra)-1,b>>>=n.extra,v-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=23;case 23:for(;k=(N=n.distcode[b&(1<<n.distbits)-1])>>>16&255,_=65535&N,!((E=N>>>24)<=v);){if(0===m)break e;m--,b+=u[g++]<<v,v+=8}if(0==(240&k)){for(T=E,R=k,B=_;k=(N=n.distcode[B+((b&(1<<T+R)-1)>>T)])>>>16&255,_=65535&N,!(T+(E=N>>>24)<=v);){if(0===m)break e;m--,b+=u[g++]<<v,v+=8}b>>>=T,v-=T,n.back+=T}if(b>>>=E,v-=E,n.back+=E,64&k){e.msg=\"invalid distance code\",n.mode=h;break}n.offset=_,n.extra=15&k,n.mode=24;case 24:if(n.extra){for(F=n.extra;v<F;){if(0===m)break e;m--,b+=u[g++]<<v,v+=8}n.offset+=b&(1<<n.extra)-1,b>>>=n.extra,v-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){e.msg=\"invalid distance too far back\",n.mode=h;break}n.mode=25;case 25:if(0===C)break e;if(n.offset>(w=y-C)){if((w=n.offset-w)>n.whave&&n.sane){e.msg=\"invalid distance too far back\",n.mode=h;break}S=w>n.wnext?n.wsize-(w-=n.wnext):n.wnext-w,w>n.length&&(w=n.length),x=n.window}else x=f,S=p-n.offset,w=n.length;w>C&&(w=C),C-=w,n.length-=w;do{f[p++]=x[S++]}while(--w);0===n.length&&(n.mode=21);break;case 26:if(0===C)break e;f[p++]=n.length,C--,n.mode=21;break;case 27:if(n.wrap){for(;v<32;){if(0===m)break e;m--,b|=u[g++]<<v,v+=8}if(e.total_out+=y-=C,n.total+=y,y&&(e.adler=n.check=n.flags?s(n.check,f,y,p-y):i(n.check,f,y,p-y)),y=C,(n.flags?b:d(b))!==n.check){e.msg=\"incorrect data check\",n.mode=h;break}b=0,v=0}n.mode=28;case 28:if(n.wrap&&n.flags){for(;v<32;){if(0===m)break e;m--,b+=u[g++]<<v,v+=8}if(b!==(4294967295&n.total)){e.msg=\"incorrect length check\",n.mode=h;break}b=0,v=0}n.mode=29;case 29:L=1;break e;case h:L=-3;break e;case 31:return-4;case 32:default:return c}return e.next_out=p,e.avail_out=C,e.next_in=g,e.avail_in=m,n.hold=b,n.bits=v,(n.wsize||y!==e.avail_out&&n.mode<h&&(n.mode<27||4!==t))&&function(e,t,n,i){var s,o=e.state;return null===o.window&&(o.wsize=1<<o.wbits,o.wnext=0,o.whave=0,o.window=new r.Buf8(o.wsize)),i>=o.wsize?(r.arraySet(o.window,t,n-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):((s=o.wsize-o.wnext)>i&&(s=i),r.arraySet(o.window,t,n-i,s,o.wnext),(i-=s)?(r.arraySet(o.window,t,n-i,i,0),o.wnext=i,o.whave=o.wsize):(o.wnext+=s,o.wnext===o.wsize&&(o.wnext=0),o.whave<o.wsize&&(o.whave+=s))),0}(e,e.output,e.next_out,y-e.avail_out)?(n.mode=31,-4):(y-=e.avail_out,e.total_in+=A-=e.avail_in,e.total_out+=y,n.total+=y,n.wrap&&y&&(e.adler=n.check=n.flags?s(n.check,f,y,e.next_out-y):i(n.check,f,y,e.next_out-y)),e.data_type=n.bits+(n.last?64:0)+(n.mode===l?128:0)+(20===n.mode||15===n.mode?256:0),(0===A&&0===y||4===t)&&0===L&&(L=-5),L)},n.inflateEnd=function(e){if(!e||!e.state)return c;var t=e.state;return t.window&&(t.window=null),e.state=null,0},n.inflateGetHeader=function(e,t){var n;return e&&e.state?0==(2&(n=e.state).wrap)?c:(n.head=t,t.done=!1,0):c},n.inflateInfo=\"pako inflate (from Nodeca project)\"},{\"../utils/common\":27,\"./adler32\":29,\"./crc32\":31,\"./inffast\":34,\"./inftrees\":36}],36:[function(e,t,n){\"use strict\";var r=e(\"../utils/common\"),i=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],s=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],o=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],a=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];t.exports=function(e,t,n,c,l,h,d,u){var f,g,p,m,C,b,v,I,A,y=u.bits,w=0,S=0,x=0,E=0,k=0,_=0,T=0,R=0,B=0,O=0,L=null,P=0,F=new r.Buf16(16),N=new r.Buf16(16),M=null,D=0;for(w=0;w<=15;w++)F[w]=0;for(S=0;S<c;S++)F[t[n+S]]++;for(k=y,E=15;E>=1&&0===F[E];E--);if(k>E&&(k=E),0===E)return l[h++]=20971520,l[h++]=20971520,u.bits=1,0;for(x=1;x<E&&0===F[x];x++);for(k<x&&(k=x),R=1,w=1;w<=15;w++)if(R<<=1,(R-=F[w])<0)return-1;if(R>0&&(0===e||1!==E))return-1;for(N[1]=0,w=1;w<15;w++)N[w+1]=N[w]+F[w];for(S=0;S<c;S++)0!==t[n+S]&&(d[N[t[n+S]]++]=S);if(0===e?(L=M=d,b=19):1===e?(L=i,P-=257,M=s,D-=257,b=256):(L=o,M=a,b=-1),O=0,S=0,w=x,C=h,_=k,T=0,p=-1,m=(B=1<<k)-1,1===e&&B>852||2===e&&B>592)return 1;for(;;){v=w-T,d[S]<b?(I=0,A=d[S]):d[S]>b?(I=M[D+d[S]],A=L[P+d[S]]):(I=96,A=0),f=1<<w-T,x=g=1<<_;do{l[C+(O>>T)+(g-=f)]=v<<24|I<<16|A|0}while(0!==g);for(f=1<<w-1;O&f;)f>>=1;if(0!==f?(O&=f-1,O+=f):O=0,S++,0==--F[w]){if(w===E)break;w=t[n+d[S]]}if(w>k&&(O&m)!==p){for(0===T&&(T=k),C+=x,R=1<<(_=w-T);_+T<E&&!((R-=F[_+T])<=0);)_++,R<<=1;if(B+=1<<_,1===e&&B>852||2===e&&B>592)return 1;l[p=O&m]=k<<24|_<<16|C-h|0}}return 0!==O&&(l[C+O]=w-T<<24|64<<16|0),u.bits=k,0}},{\"../utils/common\":27}],37:[function(e,t,n){\"use strict\";t.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},{}],38:[function(e,t,n){\"use strict\";var r=e(\"../utils/common\");function i(e){for(var t=e.length;--t>=0;)e[t]=0}var s=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],o=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],c=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],l=new Array(576);i(l);var h=new Array(60);i(h);var d=new Array(512);i(d);var u=new Array(256);i(u);var f=new Array(29);i(f);var g=new Array(30);i(g);var p,m,C,b=function(e,t,n,r,i){this.static_tree=e,this.extra_bits=t,this.extra_base=n,this.elems=r,this.max_length=i,this.has_stree=e&&e.length},v=function(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t};function I(e){return e<256?d[e]:d[256+(e>>>7)]}function A(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function y(e,t,n){e.bi_valid>16-n?(e.bi_buf|=t<<e.bi_valid&65535,A(e,e.bi_buf),e.bi_buf=t>>16-e.bi_valid,e.bi_valid+=n-16):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=n)}function w(e,t,n){y(e,n[2*t],n[2*t+1])}function S(e,t){var n=0;do{n|=1&e,e>>>=1,n<<=1}while(--t>0);return n>>>1}function x(e,t,n){var r,i,s=new Array(16),o=0;for(r=1;r<=15;r++)s[r]=o=o+n[r-1]<<1;for(i=0;i<=t;i++){var a=e[2*i+1];0!==a&&(e[2*i]=S(s[a]++,a))}}function E(e){var t;for(t=0;t<286;t++)e.dyn_ltree[2*t]=0;for(t=0;t<30;t++)e.dyn_dtree[2*t]=0;for(t=0;t<19;t++)e.bl_tree[2*t]=0;e.dyn_ltree[512]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function k(e){e.bi_valid>8?A(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function _(e,t,n,r){var i=2*t,s=2*n;return e[i]<e[s]||e[i]===e[s]&&r[t]<=r[n]}function T(e,t,n){for(var r=e.heap[n],i=n<<1;i<=e.heap_len&&(i<e.heap_len&&_(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!_(t,r,e.heap[i],e.depth));)e.heap[n]=e.heap[i],n=i,i<<=1;e.heap[n]=r}function R(e,t,n){var r,i,a,c,l=0;if(0!==e.last_lit)do{r=e.pending_buf[e.d_buf+2*l]<<8|e.pending_buf[e.d_buf+2*l+1],i=e.pending_buf[e.l_buf+l],l++,0===r?w(e,i,t):(w(e,(a=u[i])+256+1,t),0!==(c=s[a])&&y(e,i-=f[a],c),w(e,a=I(--r),n),0!==(c=o[a])&&y(e,r-=g[a],c))}while(l<e.last_lit);w(e,256,t)}function B(e,t){var n,r,i,s=t.dyn_tree,o=t.stat_desc.static_tree,a=t.stat_desc.has_stree,c=t.stat_desc.elems,l=-1;for(e.heap_len=0,e.heap_max=573,n=0;n<c;n++)0!==s[2*n]?(e.heap[++e.heap_len]=l=n,e.depth[n]=0):s[2*n+1]=0;for(;e.heap_len<2;)s[2*(i=e.heap[++e.heap_len]=l<2?++l:0)]=1,e.depth[i]=0,e.opt_len--,a&&(e.static_len-=o[2*i+1]);for(t.max_code=l,n=e.heap_len>>1;n>=1;n--)T(e,s,n);i=c;do{n=e.heap[1],e.heap[1]=e.heap[e.heap_len--],T(e,s,1),r=e.heap[1],e.heap[--e.heap_max]=n,e.heap[--e.heap_max]=r,s[2*i]=s[2*n]+s[2*r],e.depth[i]=(e.depth[n]>=e.depth[r]?e.depth[n]:e.depth[r])+1,s[2*n+1]=s[2*r+1]=i,e.heap[1]=i++,T(e,s,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){var n,r,i,s,o,a,c=t.dyn_tree,l=t.max_code,h=t.stat_desc.static_tree,d=t.stat_desc.has_stree,u=t.stat_desc.extra_bits,f=t.stat_desc.extra_base,g=t.stat_desc.max_length,p=0;for(s=0;s<=15;s++)e.bl_count[s]=0;for(c[2*e.heap[e.heap_max]+1]=0,n=e.heap_max+1;n<573;n++)(s=c[2*c[2*(r=e.heap[n])+1]+1]+1)>g&&(s=g,p++),c[2*r+1]=s,r>l||(e.bl_count[s]++,o=0,r>=f&&(o=u[r-f]),e.opt_len+=(a=c[2*r])*(s+o),d&&(e.static_len+=a*(h[2*r+1]+o)));if(0!==p){do{for(s=g-1;0===e.bl_count[s];)s--;e.bl_count[s]--,e.bl_count[s+1]+=2,e.bl_count[g]--,p-=2}while(p>0);for(s=g;0!==s;s--)for(r=e.bl_count[s];0!==r;)(i=e.heap[--n])>l||(c[2*i+1]!==s&&(e.opt_len+=(s-c[2*i+1])*c[2*i],c[2*i+1]=s),r--)}}(e,t),x(s,l,e.bl_count)}function O(e,t,n){var r,i,s=-1,o=t[1],a=0,c=7,l=4;for(0===o&&(c=138,l=3),t[2*(n+1)+1]=65535,r=0;r<=n;r++)i=o,o=t[2*(r+1)+1],++a<c&&i===o||(a<l?e.bl_tree[2*i]+=a:0!==i?(i!==s&&e.bl_tree[2*i]++,e.bl_tree[32]++):a<=10?e.bl_tree[34]++:e.bl_tree[36]++,a=0,s=i,0===o?(c=138,l=3):i===o?(c=6,l=3):(c=7,l=4))}function L(e,t,n){var r,i,s=-1,o=t[1],a=0,c=7,l=4;for(0===o&&(c=138,l=3),r=0;r<=n;r++)if(i=o,o=t[2*(r+1)+1],!(++a<c&&i===o)){if(a<l)do{w(e,i,e.bl_tree)}while(0!=--a);else 0!==i?(i!==s&&(w(e,i,e.bl_tree),a--),w(e,16,e.bl_tree),y(e,a-3,2)):a<=10?(w(e,17,e.bl_tree),y(e,a-3,3)):(w(e,18,e.bl_tree),y(e,a-11,7));a=0,s=i,0===o?(c=138,l=3):i===o?(c=6,l=3):(c=7,l=4)}}var P=!1;function F(e,t,n,i){y(e,0+(i?1:0),3),function(e,t,n,i){k(e),A(e,n),A(e,~n),r.arraySet(e.pending_buf,e.window,t,n,e.pending),e.pending+=n}(e,t,n)}n._tr_init=function(e){P||(function(){var e,t,n,r,i,c=new Array(16);for(n=0,r=0;r<28;r++)for(f[r]=n,e=0;e<1<<s[r];e++)u[n++]=r;for(u[n-1]=r,i=0,r=0;r<16;r++)for(g[r]=i,e=0;e<1<<o[r];e++)d[i++]=r;for(i>>=7;r<30;r++)for(g[r]=i<<7,e=0;e<1<<o[r]-7;e++)d[256+i++]=r;for(t=0;t<=15;t++)c[t]=0;for(e=0;e<=143;)l[2*e+1]=8,e++,c[8]++;for(;e<=255;)l[2*e+1]=9,e++,c[9]++;for(;e<=279;)l[2*e+1]=7,e++,c[7]++;for(;e<=287;)l[2*e+1]=8,e++,c[8]++;for(x(l,287,c),e=0;e<30;e++)h[2*e+1]=5,h[2*e]=S(e,5);p=new b(l,s,257,286,15),m=new b(h,o,0,30,15),C=new b(new Array(0),a,0,19,7)}(),P=!0),e.l_desc=new v(e.dyn_ltree,p),e.d_desc=new v(e.dyn_dtree,m),e.bl_desc=new v(e.bl_tree,C),e.bi_buf=0,e.bi_valid=0,E(e)},n._tr_stored_block=F,n._tr_flush_block=function(e,t,n,r){var i,s,o=0;e.level>0?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,n=4093624447;for(t=0;t<=31;t++,n>>>=1)if(1&n&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t<256;t++)if(0!==e.dyn_ltree[2*t])return 1;return 0}(e)),B(e,e.l_desc),B(e,e.d_desc),o=function(e){var t;for(O(e,e.dyn_ltree,e.l_desc.max_code),O(e,e.dyn_dtree,e.d_desc.max_code),B(e,e.bl_desc),t=18;t>=3&&0===e.bl_tree[2*c[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),(s=e.static_len+3+7>>>3)<=(i=e.opt_len+3+7>>>3)&&(i=s)):i=s=n+5,n+4<=i&&-1!==t?F(e,t,n,r):4===e.strategy||s===i?(y(e,2+(r?1:0),3),R(e,l,h)):(y(e,4+(r?1:0),3),function(e,t,n,r){var i;for(y(e,t-257,5),y(e,n-1,5),y(e,r-4,4),i=0;i<r;i++)y(e,e.bl_tree[2*c[i]+1],3);L(e,e.dyn_ltree,t-1),L(e,e.dyn_dtree,n-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,o+1),R(e,e.dyn_ltree,e.dyn_dtree)),E(e),r&&k(e)},n._tr_tally=function(e,t,n){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&n,e.last_lit++,0===t?e.dyn_ltree[2*n]++:(e.matches++,t--,e.dyn_ltree[2*(u[n]+256+1)]++,e.dyn_dtree[2*I(t)]++),e.last_lit===e.lit_bufsize-1},n._tr_align=function(e){y(e,2,3),w(e,256,l),function(e){16===e.bi_valid?(A(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":27}],39:[function(e,t,n){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}]},{},[9])(9)}))},Iab2:function(e,t,n){var r,i;void 0===(i=\"function\"==typeof(r=function(){\"use strict\";function t(e,t,n){var r=new XMLHttpRequest;r.open(\"GET\",e),r.responseType=\"blob\",r.onload=function(){o(r.response,t,n)},r.onerror=function(){console.error(\"could not download file\")},r.send()}function n(e){var t=new XMLHttpRequest;t.open(\"HEAD\",e,!1);try{t.send()}catch(e){}return 200<=t.status&&299>=t.status}function r(e){try{e.dispatchEvent(new MouseEvent(\"click\"))}catch(t){var n=document.createEvent(\"MouseEvents\");n.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(n)}}var i=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof global&&global.global===global?global:void 0,s=i.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),o=i.saveAs||(\"object\"!=typeof window||window!==i?function(){}:\"download\"in HTMLAnchorElement.prototype&&!s?function(e,s,o){var a=i.URL||i.webkitURL,c=document.createElement(\"a\");c.download=s=s||e.name||\"download\",c.rel=\"noopener\",\"string\"==typeof e?(c.href=e,c.origin===location.origin?r(c):n(c.href)?t(e,s,o):r(c,c.target=\"_blank\")):(c.href=a.createObjectURL(e),setTimeout((function(){a.revokeObjectURL(c.href)}),4e4),setTimeout((function(){r(c)}),0))}:\"msSaveOrOpenBlob\"in navigator?function(e,i,s){if(i=i||e.name||\"download\",\"string\"!=typeof e)navigator.msSaveOrOpenBlob(function(e,t){return void 0===t?t={autoBom:!1}:\"object\"!=typeof t&&(console.warn(\"Deprecated: Expected third argument to be a object\"),t={autoBom:!t}),t.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(e.type)?new Blob([\"\\ufeff\",e],{type:e.type}):e}(e,s),i);else if(n(e))t(e,i,s);else{var o=document.createElement(\"a\");o.href=e,o.target=\"_blank\",setTimeout((function(){r(o)}))}}:function(e,n,r,o){if((o=o||open(\"\",\"_blank\"))&&(o.document.title=o.document.body.innerText=\"downloading...\"),\"string\"==typeof e)return t(e,n,r);var a=\"application/octet-stream\"===e.type,c=/constructor/i.test(i.HTMLElement)||i.safari,l=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((l||a&&c||s)&&\"undefined\"!=typeof FileReader){var h=new FileReader;h.onloadend=function(){var e=h.result;e=l?e:e.replace(/^data:[^;]*;/,\"data:attachment/file;\"),o?o.location.href=e:location=e,o=null},h.readAsDataURL(e)}else{var d=i.URL||i.webkitURL,u=d.createObjectURL(e);o?o.location=u:location.href=u,o=null,setTimeout((function(){d.revokeObjectURL(u)}),4e4)}});i.saveAs=o.saveAs=o,e.exports=o})?r.apply(t,[]):r)||(e.exports=i)},IkRI:function(e,t,n){var r={version:\"1.14.0\"};r[437]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\xc7\\xfc\\xe9\\xe2\\xe4\\xe0\\xe5\\xe7\\xea\\xeb\\xe8\\xef\\xee\\xec\\xc4\\xc5\\xc9\\xe6\\xc6\\xf4\\xf6\\xf2\\xfb\\xf9\\xff\\xd6\\xdc\\xa2\\xa3\\xa5\\u20a7\\u0192\\xe1\\xed\\xf3\\xfa\\xf1\\xd1\\xaa\\xba\\xbf\\u2310\\xac\\xbd\\xbc\\xa1\\xab\\xbb\\u2591\\u2592\\u2593\\u2502\\u2524\\u2561\\u2562\\u2556\\u2555\\u2563\\u2551\\u2557\\u255d\\u255c\\u255b\\u2510\\u2514\\u2534\\u252c\\u251c\\u2500\\u253c\\u255e\\u255f\\u255a\\u2554\\u2569\\u2566\\u2560\\u2550\\u256c\\u2567\\u2568\\u2564\\u2565\\u2559\\u2558\\u2552\\u2553\\u256b\\u256a\\u2518\\u250c\\u2588\\u2584\\u258c\\u2590\\u2580\\u03b1\\xdf\\u0393\\u03c0\\u03a3\\u03c3\\xb5\\u03c4\\u03a6\\u0398\\u03a9\\u03b4\\u221e\\u03c6\\u03b5\\u2229\\u2261\\xb1\\u2265\\u2264\\u2320\\u2321\\xf7\\u2248\\xb0\\u2219\\xb7\\u221a\\u207f\\xb2\\u25a0\\xa0\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[620]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\xc7\\xfc\\xe9\\xe2\\xe4\\xe0\\u0105\\xe7\\xea\\xeb\\xe8\\xef\\xee\\u0107\\xc4\\u0104\\u0118\\u0119\\u0142\\xf4\\xf6\\u0106\\xfb\\xf9\\u015a\\xd6\\xdc\\xa2\\u0141\\xa5\\u015b\\u0192\\u0179\\u017b\\xf3\\xd3\\u0144\\u0143\\u017a\\u017c\\xbf\\u2310\\xac\\xbd\\xbc\\xa1\\xab\\xbb\\u2591\\u2592\\u2593\\u2502\\u2524\\u2561\\u2562\\u2556\\u2555\\u2563\\u2551\\u2557\\u255d\\u255c\\u255b\\u2510\\u2514\\u2534\\u252c\\u251c\\u2500\\u253c\\u255e\\u255f\\u255a\\u2554\\u2569\\u2566\\u2560\\u2550\\u256c\\u2567\\u2568\\u2564\\u2565\\u2559\\u2558\\u2552\\u2553\\u256b\\u256a\\u2518\\u250c\\u2588\\u2584\\u258c\\u2590\\u2580\\u03b1\\xdf\\u0393\\u03c0\\u03a3\\u03c3\\xb5\\u03c4\\u03a6\\u0398\\u03a9\\u03b4\\u221e\\u03c6\\u03b5\\u2229\\u2261\\xb1\\u2265\\u2264\\u2320\\u2321\\xf7\\u2248\\xb0\\u2219\\xb7\\u221a\\u207f\\xb2\\u25a0\\xa0\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[737]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c3\\u03c2\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u2591\\u2592\\u2593\\u2502\\u2524\\u2561\\u2562\\u2556\\u2555\\u2563\\u2551\\u2557\\u255d\\u255c\\u255b\\u2510\\u2514\\u2534\\u252c\\u251c\\u2500\\u253c\\u255e\\u255f\\u255a\\u2554\\u2569\\u2566\\u2560\\u2550\\u256c\\u2567\\u2568\\u2564\\u2565\\u2559\\u2558\\u2552\\u2553\\u256b\\u256a\\u2518\\u250c\\u2588\\u2584\\u258c\\u2590\\u2580\\u03c9\\u03ac\\u03ad\\u03ae\\u03ca\\u03af\\u03cc\\u03cd\\u03cb\\u03ce\\u0386\\u0388\\u0389\\u038a\\u038c\\u038e\\u038f\\xb1\\u2265\\u2264\\u03aa\\u03ab\\xf7\\u2248\\xb0\\u2219\\xb7\\u221a\\u207f\\xb2\\u25a0\\xa0\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[850]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\xc7\\xfc\\xe9\\xe2\\xe4\\xe0\\xe5\\xe7\\xea\\xeb\\xe8\\xef\\xee\\xec\\xc4\\xc5\\xc9\\xe6\\xc6\\xf4\\xf6\\xf2\\xfb\\xf9\\xff\\xd6\\xdc\\xf8\\xa3\\xd8\\xd7\\u0192\\xe1\\xed\\xf3\\xfa\\xf1\\xd1\\xaa\\xba\\xbf\\xae\\xac\\xbd\\xbc\\xa1\\xab\\xbb\\u2591\\u2592\\u2593\\u2502\\u2524\\xc1\\xc2\\xc0\\xa9\\u2563\\u2551\\u2557\\u255d\\xa2\\xa5\\u2510\\u2514\\u2534\\u252c\\u251c\\u2500\\u253c\\xe3\\xc3\\u255a\\u2554\\u2569\\u2566\\u2560\\u2550\\u256c\\xa4\\xf0\\xd0\\xca\\xcb\\xc8\\u0131\\xcd\\xce\\xcf\\u2518\\u250c\\u2588\\u2584\\xa6\\xcc\\u2580\\xd3\\xdf\\xd4\\xd2\\xf5\\xd5\\xb5\\xfe\\xde\\xda\\xdb\\xd9\\xfd\\xdd\\xaf\\xb4\\xad\\xb1\\u2017\\xbe\\xb6\\xa7\\xf7\\xb8\\xb0\\xa8\\xb7\\xb9\\xb3\\xb2\\u25a0\\xa0\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[852]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\xc7\\xfc\\xe9\\xe2\\xe4\\u016f\\u0107\\xe7\\u0142\\xeb\\u0150\\u0151\\xee\\u0179\\xc4\\u0106\\xc9\\u0139\\u013a\\xf4\\xf6\\u013d\\u013e\\u015a\\u015b\\xd6\\xdc\\u0164\\u0165\\u0141\\xd7\\u010d\\xe1\\xed\\xf3\\xfa\\u0104\\u0105\\u017d\\u017e\\u0118\\u0119\\xac\\u017a\\u010c\\u015f\\xab\\xbb\\u2591\\u2592\\u2593\\u2502\\u2524\\xc1\\xc2\\u011a\\u015e\\u2563\\u2551\\u2557\\u255d\\u017b\\u017c\\u2510\\u2514\\u2534\\u252c\\u251c\\u2500\\u253c\\u0102\\u0103\\u255a\\u2554\\u2569\\u2566\\u2560\\u2550\\u256c\\xa4\\u0111\\u0110\\u010e\\xcb\\u010f\\u0147\\xcd\\xce\\u011b\\u2518\\u250c\\u2588\\u2584\\u0162\\u016e\\u2580\\xd3\\xdf\\xd4\\u0143\\u0144\\u0148\\u0160\\u0161\\u0154\\xda\\u0155\\u0170\\xfd\\xdd\\u0163\\xb4\\xad\\u02dd\\u02db\\u02c7\\u02d8\\xa7\\xf7\\xb8\\xb0\\xa8\\u02d9\\u0171\\u0158\\u0159\\u25a0\\xa0\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[857]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\xc7\\xfc\\xe9\\xe2\\xe4\\xe0\\xe5\\xe7\\xea\\xeb\\xe8\\xef\\xee\\u0131\\xc4\\xc5\\xc9\\xe6\\xc6\\xf4\\xf6\\xf2\\xfb\\xf9\\u0130\\xd6\\xdc\\xf8\\xa3\\xd8\\u015e\\u015f\\xe1\\xed\\xf3\\xfa\\xf1\\xd1\\u011e\\u011f\\xbf\\xae\\xac\\xbd\\xbc\\xa1\\xab\\xbb\\u2591\\u2592\\u2593\\u2502\\u2524\\xc1\\xc2\\xc0\\xa9\\u2563\\u2551\\u2557\\u255d\\xa2\\xa5\\u2510\\u2514\\u2534\\u252c\\u251c\\u2500\\u253c\\xe3\\xc3\\u255a\\u2554\\u2569\\u2566\\u2560\\u2550\\u256c\\xa4\\xba\\xaa\\xca\\xcb\\xc8\\ufffd\\xcd\\xce\\xcf\\u2518\\u250c\\u2588\\u2584\\xa6\\xcc\\u2580\\xd3\\xdf\\xd4\\xd2\\xf5\\xd5\\xb5\\ufffd\\xd7\\xda\\xdb\\xd9\\xec\\xff\\xaf\\xb4\\xad\\xb1\\ufffd\\xbe\\xb6\\xa7\\xf7\\xb8\\xb0\\xa8\\xb7\\xb9\\xb3\\xb2\\u25a0\\xa0\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[861]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\xc7\\xfc\\xe9\\xe2\\xe4\\xe0\\xe5\\xe7\\xea\\xeb\\xe8\\xd0\\xf0\\xde\\xc4\\xc5\\xc9\\xe6\\xc6\\xf4\\xf6\\xfe\\xfb\\xdd\\xfd\\xd6\\xdc\\xf8\\xa3\\xd8\\u20a7\\u0192\\xe1\\xed\\xf3\\xfa\\xc1\\xcd\\xd3\\xda\\xbf\\u2310\\xac\\xbd\\xbc\\xa1\\xab\\xbb\\u2591\\u2592\\u2593\\u2502\\u2524\\u2561\\u2562\\u2556\\u2555\\u2563\\u2551\\u2557\\u255d\\u255c\\u255b\\u2510\\u2514\\u2534\\u252c\\u251c\\u2500\\u253c\\u255e\\u255f\\u255a\\u2554\\u2569\\u2566\\u2560\\u2550\\u256c\\u2567\\u2568\\u2564\\u2565\\u2559\\u2558\\u2552\\u2553\\u256b\\u256a\\u2518\\u250c\\u2588\\u2584\\u258c\\u2590\\u2580\\u03b1\\xdf\\u0393\\u03c0\\u03a3\\u03c3\\xb5\\u03c4\\u03a6\\u0398\\u03a9\\u03b4\\u221e\\u03c6\\u03b5\\u2229\\u2261\\xb1\\u2265\\u2264\\u2320\\u2321\\xf7\\u2248\\xb0\\u2219\\xb7\\u221a\\u207f\\xb2\\u25a0\\xa0\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[865]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\xc7\\xfc\\xe9\\xe2\\xe4\\xe0\\xe5\\xe7\\xea\\xeb\\xe8\\xef\\xee\\xec\\xc4\\xc5\\xc9\\xe6\\xc6\\xf4\\xf6\\xf2\\xfb\\xf9\\xff\\xd6\\xdc\\xf8\\xa3\\xd8\\u20a7\\u0192\\xe1\\xed\\xf3\\xfa\\xf1\\xd1\\xaa\\xba\\xbf\\u2310\\xac\\xbd\\xbc\\xa1\\xab\\xa4\\u2591\\u2592\\u2593\\u2502\\u2524\\u2561\\u2562\\u2556\\u2555\\u2563\\u2551\\u2557\\u255d\\u255c\\u255b\\u2510\\u2514\\u2534\\u252c\\u251c\\u2500\\u253c\\u255e\\u255f\\u255a\\u2554\\u2569\\u2566\\u2560\\u2550\\u256c\\u2567\\u2568\\u2564\\u2565\\u2559\\u2558\\u2552\\u2553\\u256b\\u256a\\u2518\\u250c\\u2588\\u2584\\u258c\\u2590\\u2580\\u03b1\\xdf\\u0393\\u03c0\\u03a3\\u03c3\\xb5\\u03c4\\u03a6\\u0398\\u03a9\\u03b4\\u221e\\u03c6\\u03b5\\u2229\\u2261\\xb1\\u2265\\u2264\\u2320\\u2321\\xf7\\u2248\\xb0\\u2219\\xb7\\u221a\\u207f\\xb2\\u25a0\\xa0\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[866]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\u0410\\u0411\\u0412\\u0413\\u0414\\u0415\\u0416\\u0417\\u0418\\u0419\\u041a\\u041b\\u041c\\u041d\\u041e\\u041f\\u0420\\u0421\\u0422\\u0423\\u0424\\u0425\\u0426\\u0427\\u0428\\u0429\\u042a\\u042b\\u042c\\u042d\\u042e\\u042f\\u0430\\u0431\\u0432\\u0433\\u0434\\u0435\\u0436\\u0437\\u0438\\u0439\\u043a\\u043b\\u043c\\u043d\\u043e\\u043f\\u2591\\u2592\\u2593\\u2502\\u2524\\u2561\\u2562\\u2556\\u2555\\u2563\\u2551\\u2557\\u255d\\u255c\\u255b\\u2510\\u2514\\u2534\\u252c\\u251c\\u2500\\u253c\\u255e\\u255f\\u255a\\u2554\\u2569\\u2566\\u2560\\u2550\\u256c\\u2567\\u2568\\u2564\\u2565\\u2559\\u2558\\u2552\\u2553\\u256b\\u256a\\u2518\\u250c\\u2588\\u2584\\u258c\\u2590\\u2580\\u0440\\u0441\\u0442\\u0443\\u0444\\u0445\\u0446\\u0447\\u0448\\u0449\\u044a\\u044b\\u044c\\u044d\\u044e\\u044f\\u0401\\u0451\\u0404\\u0454\\u0407\\u0457\\u040e\\u045e\\xb0\\u2219\\xb7\\u221a\\u2116\\xa4\\u25a0\\xa0\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[874]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\u20ac\\ufffd\\ufffd\\ufffd\\ufffd\\u2026\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u2018\\u2019\\u201c\\u201d\\u2022\\u2013\\u2014\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\xa0\\u0e01\\u0e02\\u0e03\\u0e04\\u0e05\\u0e06\\u0e07\\u0e08\\u0e09\\u0e0a\\u0e0b\\u0e0c\\u0e0d\\u0e0e\\u0e0f\\u0e10\\u0e11\\u0e12\\u0e13\\u0e14\\u0e15\\u0e16\\u0e17\\u0e18\\u0e19\\u0e1a\\u0e1b\\u0e1c\\u0e1d\\u0e1e\\u0e1f\\u0e20\\u0e21\\u0e22\\u0e23\\u0e24\\u0e25\\u0e26\\u0e27\\u0e28\\u0e29\\u0e2a\\u0e2b\\u0e2c\\u0e2d\\u0e2e\\u0e2f\\u0e30\\u0e31\\u0e32\\u0e33\\u0e34\\u0e35\\u0e36\\u0e37\\u0e38\\u0e39\\u0e3a\\ufffd\\ufffd\\ufffd\\ufffd\\u0e3f\\u0e40\\u0e41\\u0e42\\u0e43\\u0e44\\u0e45\\u0e46\\u0e47\\u0e48\\u0e49\\u0e4a\\u0e4b\\u0e4c\\u0e4d\\u0e4e\\u0e4f\\u0e50\\u0e51\\u0e52\\u0e53\\u0e54\\u0e55\\u0e56\\u0e57\\u0e58\\u0e59\\u0e5a\\u0e5b\\ufffd\\ufffd\\ufffd\\ufffd\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[895]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\u010c\\xfc\\xe9\\u010f\\xe4\\u010e\\u0164\\u010d\\u011b\\u011a\\u0139\\xcd\\u013e\\u01ea\\xc4\\xc1\\xc9\\u017e\\u017d\\xf4\\xf6\\xd3\\u016f\\xda\\xfd\\xd6\\xdc\\u0160\\u013d\\xdd\\u0158\\u0165\\xe1\\xed\\xf3\\xfa\\u0148\\u0147\\u016e\\xd4\\u0161\\u0159\\u0155\\u0154\\xbc\\xa7\\xab\\xbb\\u2591\\u2592\\u2593\\u2502\\u2524\\u2561\\u2562\\u2556\\u2555\\u2563\\u2551\\u2557\\u255d\\u255c\\u255b\\u2510\\u2514\\u2534\\u252c\\u251c\\u2500\\u253c\\u255e\\u255f\\u255a\\u2554\\u2569\\u2566\\u2560\\u2550\\u256c\\u2567\\u2568\\u2564\\u2565\\u2559\\u2558\\u2552\\u2553\\u256b\\u256a\\u2518\\u250c\\u2588\\u2584\\u258c\\u2590\\u2580\\u03b1\\xdf\\u0393\\u03c0\\u03a3\\u03c3\\xb5\\u03c4\\u03a6\\u0398\\u03a9\\u03b4\\u221e\\u03c6\\u03b5\\u2229\\u2261\\xb1\\u2265\\u2264\\u2320\\u2321\\xf7\\u2248\\xb0\\u2219\\xb7\\u221a\\u207f\\xb2\\u25a0\\xa0\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[932]=function(){var e,t=[],n={},r=[];for(r[0]=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uff61\\uff62\\uff63\\uff64\\uff65\\uff66\\uff67\\uff68\\uff69\\uff6a\\uff6b\\uff6c\\uff6d\\uff6e\\uff6f\\uff70\\uff71\\uff72\\uff73\\uff74\\uff75\\uff76\\uff77\\uff78\\uff79\\uff7a\\uff7b\\uff7c\\uff7d\\uff7e\\uff7f\\uff80\\uff81\\uff82\\uff83\\uff84\\uff85\\uff86\\uff87\\uff88\\uff89\\uff8a\\uff8b\\uff8c\\uff8d\\uff8e\\uff8f\\uff90\\uff91\\uff92\\uff93\\uff94\\uff95\\uff96\\uff97\\uff98\\uff99\\uff9a\\uff9b\\uff9c\\uff9d\\uff9e\\uff9f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[0].length;++e)65533!==r[0][e].charCodeAt(0)&&(n[r[0][e]]=0+e,t[0+e]=r[0][e]);for(r[129]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u3000\\u3001\\u3002\\uff0c\\uff0e\\u30fb\\uff1a\\uff1b\\uff1f\\uff01\\u309b\\u309c\\xb4\\uff40\\xa8\\uff3e\\uffe3\\uff3f\\u30fd\\u30fe\\u309d\\u309e\\u3003\\u4edd\\u3005\\u3006\\u3007\\u30fc\\u2015\\u2010\\uff0f\\uff3c\\uff5e\\u2225\\uff5c\\u2026\\u2025\\u2018\\u2019\\u201c\\u201d\\uff08\\uff09\\u3014\\u3015\\uff3b\\uff3d\\uff5b\\uff5d\\u3008\\u3009\\u300a\\u300b\\u300c\\u300d\\u300e\\u300f\\u3010\\u3011\\uff0b\\uff0d\\xb1\\xd7\\ufffd\\xf7\\uff1d\\u2260\\uff1c\\uff1e\\u2266\\u2267\\u221e\\u2234\\u2642\\u2640\\xb0\\u2032\\u2033\\u2103\\uffe5\\uff04\\uffe0\\uffe1\\uff05\\uff03\\uff06\\uff0a\\uff20\\xa7\\u2606\\u2605\\u25cb\\u25cf\\u25ce\\u25c7\\u25c6\\u25a1\\u25a0\\u25b3\\u25b2\\u25bd\\u25bc\\u203b\\u3012\\u2192\\u2190\\u2191\\u2193\\u3013\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u2208\\u220b\\u2286\\u2287\\u2282\\u2283\\u222a\\u2229\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u2227\\u2228\\uffe2\\u21d2\\u21d4\\u2200\\u2203\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u2220\\u22a5\\u2312\\u2202\\u2207\\u2261\\u2252\\u226a\\u226b\\u221a\\u223d\\u221d\\u2235\\u222b\\u222c\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u212b\\u2030\\u266f\\u266d\\u266a\\u2020\\u2021\\xb6\\ufffd\\ufffd\\ufffd\\ufffd\\u25ef\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[129].length;++e)65533!==r[129][e].charCodeAt(0)&&(n[r[129][e]]=33024+e,t[33024+e]=r[129][e]);for(r[130]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uff10\\uff11\\uff12\\uff13\\uff14\\uff15\\uff16\\uff17\\uff18\\uff19\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uff21\\uff22\\uff23\\uff24\\uff25\\uff26\\uff27\\uff28\\uff29\\uff2a\\uff2b\\uff2c\\uff2d\\uff2e\\uff2f\\uff30\\uff31\\uff32\\uff33\\uff34\\uff35\\uff36\\uff37\\uff38\\uff39\\uff3a\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uff41\\uff42\\uff43\\uff44\\uff45\\uff46\\uff47\\uff48\\uff49\\uff4a\\uff4b\\uff4c\\uff4d\\uff4e\\uff4f\\uff50\\uff51\\uff52\\uff53\\uff54\\uff55\\uff56\\uff57\\uff58\\uff59\\uff5a\\ufffd\\ufffd\\ufffd\\ufffd\\u3041\\u3042\\u3043\\u3044\\u3045\\u3046\\u3047\\u3048\\u3049\\u304a\\u304b\\u304c\\u304d\\u304e\\u304f\\u3050\\u3051\\u3052\\u3053\\u3054\\u3055\\u3056\\u3057\\u3058\\u3059\\u305a\\u305b\\u305c\\u305d\\u305e\\u305f\\u3060\\u3061\\u3062\\u3063\\u3064\\u3065\\u3066\\u3067\\u3068\\u3069\\u306a\\u306b\\u306c\\u306d\\u306e\\u306f\\u3070\\u3071\\u3072\\u3073\\u3074\\u3075\\u3076\\u3077\\u3078\\u3079\\u307a\\u307b\\u307c\\u307d\\u307e\\u307f\\u3080\\u3081\\u3082\\u3083\\u3084\\u3085\\u3086\\u3087\\u3088\\u3089\\u308a\\u308b\\u308c\\u308d\\u308e\\u308f\\u3090\\u3091\\u3092\\u3093\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[130].length;++e)65533!==r[130][e].charCodeAt(0)&&(n[r[130][e]]=33280+e,t[33280+e]=r[130][e]);for(r[131]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u30a1\\u30a2\\u30a3\\u30a4\\u30a5\\u30a6\\u30a7\\u30a8\\u30a9\\u30aa\\u30ab\\u30ac\\u30ad\\u30ae\\u30af\\u30b0\\u30b1\\u30b2\\u30b3\\u30b4\\u30b5\\u30b6\\u30b7\\u30b8\\u30b9\\u30ba\\u30bb\\u30bc\\u30bd\\u30be\\u30bf\\u30c0\\u30c1\\u30c2\\u30c3\\u30c4\\u30c5\\u30c6\\u30c7\\u30c8\\u30c9\\u30ca\\u30cb\\u30cc\\u30cd\\u30ce\\u30cf\\u30d0\\u30d1\\u30d2\\u30d3\\u30d4\\u30d5\\u30d6\\u30d7\\u30d8\\u30d9\\u30da\\u30db\\u30dc\\u30dd\\u30de\\u30df\\ufffd\\u30e0\\u30e1\\u30e2\\u30e3\\u30e4\\u30e5\\u30e6\\u30e7\\u30e8\\u30e9\\u30ea\\u30eb\\u30ec\\u30ed\\u30ee\\u30ef\\u30f0\\u30f1\\u30f2\\u30f3\\u30f4\\u30f5\\u30f6\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[131].length;++e)65533!==r[131][e].charCodeAt(0)&&(n[r[131][e]]=33536+e,t[33536+e]=r[131][e]);for(r[132]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u0410\\u0411\\u0412\\u0413\\u0414\\u0415\\u0401\\u0416\\u0417\\u0418\\u0419\\u041a\\u041b\\u041c\\u041d\\u041e\\u041f\\u0420\\u0421\\u0422\\u0423\\u0424\\u0425\\u0426\\u0427\\u0428\\u0429\\u042a\\u042b\\u042c\\u042d\\u042e\\u042f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u0430\\u0431\\u0432\\u0433\\u0434\\u0435\\u0451\\u0436\\u0437\\u0438\\u0439\\u043a\\u043b\\u043c\\u043d\\ufffd\\u043e\\u043f\\u0440\\u0441\\u0442\\u0443\\u0444\\u0445\\u0446\\u0447\\u0448\\u0449\\u044a\\u044b\\u044c\\u044d\\u044e\\u044f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u2500\\u2502\\u250c\\u2510\\u2518\\u2514\\u251c\\u252c\\u2524\\u2534\\u253c\\u2501\\u2503\\u250f\\u2513\\u251b\\u2517\\u2523\\u2533\\u252b\\u253b\\u254b\\u2520\\u252f\\u2528\\u2537\\u253f\\u251d\\u2530\\u2525\\u2538\\u2542\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[132].length;++e)65533!==r[132][e].charCodeAt(0)&&(n[r[132][e]]=33792+e,t[33792+e]=r[132][e]);for(r[135]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u2460\\u2461\\u2462\\u2463\\u2464\\u2465\\u2466\\u2467\\u2468\\u2469\\u246a\\u246b\\u246c\\u246d\\u246e\\u246f\\u2470\\u2471\\u2472\\u2473\\u2160\\u2161\\u2162\\u2163\\u2164\\u2165\\u2166\\u2167\\u2168\\u2169\\ufffd\\u3349\\u3314\\u3322\\u334d\\u3318\\u3327\\u3303\\u3336\\u3351\\u3357\\u330d\\u3326\\u3323\\u332b\\u334a\\u333b\\u339c\\u339d\\u339e\\u338e\\u338f\\u33c4\\u33a1\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u337b\\ufffd\\u301d\\u301f\\u2116\\u33cd\\u2121\\u32a4\\u32a5\\u32a6\\u32a7\\u32a8\\u3231\\u3232\\u3239\\u337e\\u337d\\u337c\\u2252\\u2261\\u222b\\u222e\\u2211\\u221a\\u22a5\\u2220\\u221f\\u22bf\\u2235\\u2229\\u222a\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[135].length;++e)65533!==r[135][e].charCodeAt(0)&&(n[r[135][e]]=34560+e,t[34560+e]=r[135][e]);for(r[136]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u4e9c\\u5516\\u5a03\\u963f\\u54c0\\u611b\\u6328\\u59f6\\u9022\\u8475\\u831c\\u7a50\\u60aa\\u63e1\\u6e25\\u65ed\\u8466\\u82a6\\u9bf5\\u6893\\u5727\\u65a1\\u6271\\u5b9b\\u59d0\\u867b\\u98f4\\u7d62\\u7dbe\\u9b8e\\u6216\\u7c9f\\u88b7\\u5b89\\u5eb5\\u6309\\u6697\\u6848\\u95c7\\u978d\\u674f\\u4ee5\\u4f0a\\u4f4d\\u4f9d\\u5049\\u56f2\\u5937\\u59d4\\u5a01\\u5c09\\u60df\\u610f\\u6170\\u6613\\u6905\\u70ba\\u754f\\u7570\\u79fb\\u7dad\\u7def\\u80c3\\u840e\\u8863\\u8b02\\u9055\\u907a\\u533b\\u4e95\\u4ea5\\u57df\\u80b2\\u90c1\\u78ef\\u4e00\\u58f1\\u6ea2\\u9038\\u7a32\\u8328\\u828b\\u9c2f\\u5141\\u5370\\u54bd\\u54e1\\u56e0\\u59fb\\u5f15\\u98f2\\u6deb\\u80e4\\u852d\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[136].length;++e)65533!==r[136][e].charCodeAt(0)&&(n[r[136][e]]=34816+e,t[34816+e]=r[136][e]);for(r[137]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9662\\u9670\\u96a0\\u97fb\\u540b\\u53f3\\u5b87\\u70cf\\u7fbd\\u8fc2\\u96e8\\u536f\\u9d5c\\u7aba\\u4e11\\u7893\\u81fc\\u6e26\\u5618\\u5504\\u6b1d\\u851a\\u9c3b\\u59e5\\u53a9\\u6d66\\u74dc\\u958f\\u5642\\u4e91\\u904b\\u96f2\\u834f\\u990c\\u53e1\\u55b6\\u5b30\\u5f71\\u6620\\u66f3\\u6804\\u6c38\\u6cf3\\u6d29\\u745b\\u76c8\\u7a4e\\u9834\\u82f1\\u885b\\u8a60\\u92ed\\u6db2\\u75ab\\u76ca\\u99c5\\u60a6\\u8b01\\u8d8a\\u95b2\\u698e\\u53ad\\u5186\\ufffd\\u5712\\u5830\\u5944\\u5bb4\\u5ef6\\u6028\\u63a9\\u63f4\\u6cbf\\u6f14\\u708e\\u7114\\u7159\\u71d5\\u733f\\u7e01\\u8276\\u82d1\\u8597\\u9060\\u925b\\u9d1b\\u5869\\u65bc\\u6c5a\\u7525\\u51f9\\u592e\\u5965\\u5f80\\u5fdc\\u62bc\\u65fa\\u6a2a\\u6b27\\u6bb4\\u738b\\u7fc1\\u8956\\u9d2c\\u9d0e\\u9ec4\\u5ca1\\u6c96\\u837b\\u5104\\u5c4b\\u61b6\\u81c6\\u6876\\u7261\\u4e59\\u4ffa\\u5378\\u6069\\u6e29\\u7a4f\\u97f3\\u4e0b\\u5316\\u4eee\\u4f55\\u4f3d\\u4fa1\\u4f73\\u52a0\\u53ef\\u5609\\u590f\\u5ac1\\u5bb6\\u5be1\\u79d1\\u6687\\u679c\\u67b6\\u6b4c\\u6cb3\\u706b\\u73c2\\u798d\\u79be\\u7a3c\\u7b87\\u82b1\\u82db\\u8304\\u8377\\u83ef\\u83d3\\u8766\\u8ab2\\u5629\\u8ca8\\u8fe6\\u904e\\u971e\\u868a\\u4fc4\\u5ce8\\u6211\\u7259\\u753b\\u81e5\\u82bd\\u86fe\\u8cc0\\u96c5\\u9913\\u99d5\\u4ecb\\u4f1a\\u89e3\\u56de\\u584a\\u58ca\\u5efb\\u5feb\\u602a\\u6094\\u6062\\u61d0\\u6212\\u62d0\\u6539\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[137].length;++e)65533!==r[137][e].charCodeAt(0)&&(n[r[137][e]]=35072+e,t[35072+e]=r[137][e]);for(r[138]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9b41\\u6666\\u68b0\\u6d77\\u7070\\u754c\\u7686\\u7d75\\u82a5\\u87f9\\u958b\\u968e\\u8c9d\\u51f1\\u52be\\u5916\\u54b3\\u5bb3\\u5d16\\u6168\\u6982\\u6daf\\u788d\\u84cb\\u8857\\u8a72\\u93a7\\u9ab8\\u6d6c\\u99a8\\u86d9\\u57a3\\u67ff\\u86ce\\u920e\\u5283\\u5687\\u5404\\u5ed3\\u62e1\\u64b9\\u683c\\u6838\\u6bbb\\u7372\\u78ba\\u7a6b\\u899a\\u89d2\\u8d6b\\u8f03\\u90ed\\u95a3\\u9694\\u9769\\u5b66\\u5cb3\\u697d\\u984d\\u984e\\u639b\\u7b20\\u6a2b\\ufffd\\u6a7f\\u68b6\\u9c0d\\u6f5f\\u5272\\u559d\\u6070\\u62ec\\u6d3b\\u6e07\\u6ed1\\u845b\\u8910\\u8f44\\u4e14\\u9c39\\u53f6\\u691b\\u6a3a\\u9784\\u682a\\u515c\\u7ac3\\u84b2\\u91dc\\u938c\\u565b\\u9d28\\u6822\\u8305\\u8431\\u7ca5\\u5208\\u82c5\\u74e6\\u4e7e\\u4f83\\u51a0\\u5bd2\\u520a\\u52d8\\u52e7\\u5dfb\\u559a\\u582a\\u59e6\\u5b8c\\u5b98\\u5bdb\\u5e72\\u5e79\\u60a3\\u611f\\u6163\\u61be\\u63db\\u6562\\u67d1\\u6853\\u68fa\\u6b3e\\u6b53\\u6c57\\u6f22\\u6f97\\u6f45\\u74b0\\u7518\\u76e3\\u770b\\u7aff\\u7ba1\\u7c21\\u7de9\\u7f36\\u7ff0\\u809d\\u8266\\u839e\\u89b3\\u8acc\\u8cab\\u9084\\u9451\\u9593\\u9591\\u95a2\\u9665\\u97d3\\u9928\\u8218\\u4e38\\u542b\\u5cb8\\u5dcc\\u73a9\\u764c\\u773c\\u5ca9\\u7feb\\u8d0b\\u96c1\\u9811\\u9854\\u9858\\u4f01\\u4f0e\\u5371\\u559c\\u5668\\u57fa\\u5947\\u5b09\\u5bc4\\u5c90\\u5e0c\\u5e7e\\u5fcc\\u63ee\\u673a\\u65d7\\u65e2\\u671f\\u68cb\\u68c4\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[138].length;++e)65533!==r[138][e].charCodeAt(0)&&(n[r[138][e]]=35328+e,t[35328+e]=r[138][e]);for(r[139]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6a5f\\u5e30\\u6bc5\\u6c17\\u6c7d\\u757f\\u7948\\u5b63\\u7a00\\u7d00\\u5fbd\\u898f\\u8a18\\u8cb4\\u8d77\\u8ecc\\u8f1d\\u98e2\\u9a0e\\u9b3c\\u4e80\\u507d\\u5100\\u5993\\u5b9c\\u622f\\u6280\\u64ec\\u6b3a\\u72a0\\u7591\\u7947\\u7fa9\\u87fb\\u8abc\\u8b70\\u63ac\\u83ca\\u97a0\\u5409\\u5403\\u55ab\\u6854\\u6a58\\u8a70\\u7827\\u6775\\u9ecd\\u5374\\u5ba2\\u811a\\u8650\\u9006\\u4e18\\u4e45\\u4ec7\\u4f11\\u53ca\\u5438\\u5bae\\u5f13\\u6025\\u6551\\ufffd\\u673d\\u6c42\\u6c72\\u6ce3\\u7078\\u7403\\u7a76\\u7aae\\u7b08\\u7d1a\\u7cfe\\u7d66\\u65e7\\u725b\\u53bb\\u5c45\\u5de8\\u62d2\\u62e0\\u6319\\u6e20\\u865a\\u8a31\\u8ddd\\u92f8\\u6f01\\u79a6\\u9b5a\\u4ea8\\u4eab\\u4eac\\u4f9b\\u4fa0\\u50d1\\u5147\\u7af6\\u5171\\u51f6\\u5354\\u5321\\u537f\\u53eb\\u55ac\\u5883\\u5ce1\\u5f37\\u5f4a\\u602f\\u6050\\u606d\\u631f\\u6559\\u6a4b\\u6cc1\\u72c2\\u72ed\\u77ef\\u80f8\\u8105\\u8208\\u854e\\u90f7\\u93e1\\u97ff\\u9957\\u9a5a\\u4ef0\\u51dd\\u5c2d\\u6681\\u696d\\u5c40\\u66f2\\u6975\\u7389\\u6850\\u7c81\\u50c5\\u52e4\\u5747\\u5dfe\\u9326\\u65a4\\u6b23\\u6b3d\\u7434\\u7981\\u79bd\\u7b4b\\u7dca\\u82b9\\u83cc\\u887f\\u895f\\u8b39\\u8fd1\\u91d1\\u541f\\u9280\\u4e5d\\u5036\\u53e5\\u533a\\u72d7\\u7396\\u77e9\\u82e6\\u8eaf\\u99c6\\u99c8\\u99d2\\u5177\\u611a\\u865e\\u55b0\\u7a7a\\u5076\\u5bd3\\u9047\\u9685\\u4e32\\u6adb\\u91e7\\u5c51\\u5c48\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[139].length;++e)65533!==r[139][e].charCodeAt(0)&&(n[r[139][e]]=35584+e,t[35584+e]=r[139][e]);for(r[140]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6398\\u7a9f\\u6c93\\u9774\\u8f61\\u7aaa\\u718a\\u9688\\u7c82\\u6817\\u7e70\\u6851\\u936c\\u52f2\\u541b\\u85ab\\u8a13\\u7fa4\\u8ecd\\u90e1\\u5366\\u8888\\u7941\\u4fc2\\u50be\\u5211\\u5144\\u5553\\u572d\\u73ea\\u578b\\u5951\\u5f62\\u5f84\\u6075\\u6176\\u6167\\u61a9\\u63b2\\u643a\\u656c\\u666f\\u6842\\u6e13\\u7566\\u7a3d\\u7cfb\\u7d4c\\u7d99\\u7e4b\\u7f6b\\u830e\\u834a\\u86cd\\u8a08\\u8a63\\u8b66\\u8efd\\u981a\\u9d8f\\u82b8\\u8fce\\u9be8\\ufffd\\u5287\\u621f\\u6483\\u6fc0\\u9699\\u6841\\u5091\\u6b20\\u6c7a\\u6f54\\u7a74\\u7d50\\u8840\\u8a23\\u6708\\u4ef6\\u5039\\u5026\\u5065\\u517c\\u5238\\u5263\\u55a7\\u570f\\u5805\\u5acc\\u5efa\\u61b2\\u61f8\\u62f3\\u6372\\u691c\\u6a29\\u727d\\u72ac\\u732e\\u7814\\u786f\\u7d79\\u770c\\u80a9\\u898b\\u8b19\\u8ce2\\u8ed2\\u9063\\u9375\\u967a\\u9855\\u9a13\\u9e78\\u5143\\u539f\\u53b3\\u5e7b\\u5f26\\u6e1b\\u6e90\\u7384\\u73fe\\u7d43\\u8237\\u8a00\\u8afa\\u9650\\u4e4e\\u500b\\u53e4\\u547c\\u56fa\\u59d1\\u5b64\\u5df1\\u5eab\\u5f27\\u6238\\u6545\\u67af\\u6e56\\u72d0\\u7cca\\u88b4\\u80a1\\u80e1\\u83f0\\u864e\\u8a87\\u8de8\\u9237\\u96c7\\u9867\\u9f13\\u4e94\\u4e92\\u4f0d\\u5348\\u5449\\u543e\\u5a2f\\u5f8c\\u5fa1\\u609f\\u68a7\\u6a8e\\u745a\\u7881\\u8a9e\\u8aa4\\u8b77\\u9190\\u4e5e\\u9bc9\\u4ea4\\u4f7c\\u4faf\\u5019\\u5016\\u5149\\u516c\\u529f\\u52b9\\u52fe\\u539a\\u53e3\\u5411\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[140].length;++e)65533!==r[140][e].charCodeAt(0)&&(n[r[140][e]]=35840+e,t[35840+e]=r[140][e]);for(r[141]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u540e\\u5589\\u5751\\u57a2\\u597d\\u5b54\\u5b5d\\u5b8f\\u5de5\\u5de7\\u5df7\\u5e78\\u5e83\\u5e9a\\u5eb7\\u5f18\\u6052\\u614c\\u6297\\u62d8\\u63a7\\u653b\\u6602\\u6643\\u66f4\\u676d\\u6821\\u6897\\u69cb\\u6c5f\\u6d2a\\u6d69\\u6e2f\\u6e9d\\u7532\\u7687\\u786c\\u7a3f\\u7ce0\\u7d05\\u7d18\\u7d5e\\u7db1\\u8015\\u8003\\u80af\\u80b1\\u8154\\u818f\\u822a\\u8352\\u884c\\u8861\\u8b1b\\u8ca2\\u8cfc\\u90ca\\u9175\\u9271\\u783f\\u92fc\\u95a4\\u964d\\ufffd\\u9805\\u9999\\u9ad8\\u9d3b\\u525b\\u52ab\\u53f7\\u5408\\u58d5\\u62f7\\u6fe0\\u8c6a\\u8f5f\\u9eb9\\u514b\\u523b\\u544a\\u56fd\\u7a40\\u9177\\u9d60\\u9ed2\\u7344\\u6f09\\u8170\\u7511\\u5ffd\\u60da\\u9aa8\\u72db\\u8fbc\\u6b64\\u9803\\u4eca\\u56f0\\u5764\\u58be\\u5a5a\\u6068\\u61c7\\u660f\\u6606\\u6839\\u68b1\\u6df7\\u75d5\\u7d3a\\u826e\\u9b42\\u4e9b\\u4f50\\u53c9\\u5506\\u5d6f\\u5de6\\u5dee\\u67fb\\u6c99\\u7473\\u7802\\u8a50\\u9396\\u88df\\u5750\\u5ea7\\u632b\\u50b5\\u50ac\\u518d\\u6700\\u54c9\\u585e\\u59bb\\u5bb0\\u5f69\\u624d\\u63a1\\u683d\\u6b73\\u6e08\\u707d\\u91c7\\u7280\\u7815\\u7826\\u796d\\u658e\\u7d30\\u83dc\\u88c1\\u8f09\\u969b\\u5264\\u5728\\u6750\\u7f6a\\u8ca1\\u51b4\\u5742\\u962a\\u583a\\u698a\\u80b4\\u54b2\\u5d0e\\u57fc\\u7895\\u9dfa\\u4f5c\\u524a\\u548b\\u643e\\u6628\\u6714\\u67f5\\u7a84\\u7b56\\u7d22\\u932f\\u685c\\u9bad\\u7b39\\u5319\\u518a\\u5237\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[141].length;++e)65533!==r[141][e].charCodeAt(0)&&(n[r[141][e]]=36096+e,t[36096+e]=r[141][e]);for(r[142]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5bdf\\u62f6\\u64ae\\u64e6\\u672d\\u6bba\\u85a9\\u96d1\\u7690\\u9bd6\\u634c\\u9306\\u9bab\\u76bf\\u6652\\u4e09\\u5098\\u53c2\\u5c71\\u60e8\\u6492\\u6563\\u685f\\u71e6\\u73ca\\u7523\\u7b97\\u7e82\\u8695\\u8b83\\u8cdb\\u9178\\u9910\\u65ac\\u66ab\\u6b8b\\u4ed5\\u4ed4\\u4f3a\\u4f7f\\u523a\\u53f8\\u53f2\\u55e3\\u56db\\u58eb\\u59cb\\u59c9\\u59ff\\u5b50\\u5c4d\\u5e02\\u5e2b\\u5fd7\\u601d\\u6307\\u652f\\u5b5c\\u65af\\u65bd\\u65e8\\u679d\\u6b62\\ufffd\\u6b7b\\u6c0f\\u7345\\u7949\\u79c1\\u7cf8\\u7d19\\u7d2b\\u80a2\\u8102\\u81f3\\u8996\\u8a5e\\u8a69\\u8a66\\u8a8c\\u8aee\\u8cc7\\u8cdc\\u96cc\\u98fc\\u6b6f\\u4e8b\\u4f3c\\u4f8d\\u5150\\u5b57\\u5bfa\\u6148\\u6301\\u6642\\u6b21\\u6ecb\\u6cbb\\u723e\\u74bd\\u75d4\\u78c1\\u793a\\u800c\\u8033\\u81ea\\u8494\\u8f9e\\u6c50\\u9e7f\\u5f0f\\u8b58\\u9d2b\\u7afa\\u8ef8\\u5b8d\\u96eb\\u4e03\\u53f1\\u57f7\\u5931\\u5ac9\\u5ba4\\u6089\\u6e7f\\u6f06\\u75be\\u8cea\\u5b9f\\u8500\\u7be0\\u5072\\u67f4\\u829d\\u5c61\\u854a\\u7e1e\\u820e\\u5199\\u5c04\\u6368\\u8d66\\u659c\\u716e\\u793e\\u7d17\\u8005\\u8b1d\\u8eca\\u906e\\u86c7\\u90aa\\u501f\\u52fa\\u5c3a\\u6753\\u707c\\u7235\\u914c\\u91c8\\u932b\\u82e5\\u5bc2\\u5f31\\u60f9\\u4e3b\\u53d6\\u5b88\\u624b\\u6731\\u6b8a\\u72e9\\u73e0\\u7a2e\\u816b\\u8da3\\u9152\\u9996\\u5112\\u53d7\\u546a\\u5bff\\u6388\\u6a39\\u7dac\\u9700\\u56da\\u53ce\\u5468\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[142].length;++e)65533!==r[142][e].charCodeAt(0)&&(n[r[142][e]]=36352+e,t[36352+e]=r[142][e]);for(r[143]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5b97\\u5c31\\u5dde\\u4fee\\u6101\\u62fe\\u6d32\\u79c0\\u79cb\\u7d42\\u7e4d\\u7fd2\\u81ed\\u821f\\u8490\\u8846\\u8972\\u8b90\\u8e74\\u8f2f\\u9031\\u914b\\u916c\\u96c6\\u919c\\u4ec0\\u4f4f\\u5145\\u5341\\u5f93\\u620e\\u67d4\\u6c41\\u6e0b\\u7363\\u7e26\\u91cd\\u9283\\u53d4\\u5919\\u5bbf\\u6dd1\\u795d\\u7e2e\\u7c9b\\u587e\\u719f\\u51fa\\u8853\\u8ff0\\u4fca\\u5cfb\\u6625\\u77ac\\u7ae3\\u821c\\u99ff\\u51c6\\u5faa\\u65ec\\u696f\\u6b89\\u6df3\\ufffd\\u6e96\\u6f64\\u76fe\\u7d14\\u5de1\\u9075\\u9187\\u9806\\u51e6\\u521d\\u6240\\u6691\\u66d9\\u6e1a\\u5eb6\\u7dd2\\u7f72\\u66f8\\u85af\\u85f7\\u8af8\\u52a9\\u53d9\\u5973\\u5e8f\\u5f90\\u6055\\u92e4\\u9664\\u50b7\\u511f\\u52dd\\u5320\\u5347\\u53ec\\u54e8\\u5546\\u5531\\u5617\\u5968\\u59be\\u5a3c\\u5bb5\\u5c06\\u5c0f\\u5c11\\u5c1a\\u5e84\\u5e8a\\u5ee0\\u5f70\\u627f\\u6284\\u62db\\u638c\\u6377\\u6607\\u660c\\u662d\\u6676\\u677e\\u68a2\\u6a1f\\u6a35\\u6cbc\\u6d88\\u6e09\\u6e58\\u713c\\u7126\\u7167\\u75c7\\u7701\\u785d\\u7901\\u7965\\u79f0\\u7ae0\\u7b11\\u7ca7\\u7d39\\u8096\\u83d6\\u848b\\u8549\\u885d\\u88f3\\u8a1f\\u8a3c\\u8a54\\u8a73\\u8c61\\u8cde\\u91a4\\u9266\\u937e\\u9418\\u969c\\u9798\\u4e0a\\u4e08\\u4e1e\\u4e57\\u5197\\u5270\\u57ce\\u5834\\u58cc\\u5b22\\u5e38\\u60c5\\u64fe\\u6761\\u6756\\u6d44\\u72b6\\u7573\\u7a63\\u84b8\\u8b72\\u91b8\\u9320\\u5631\\u57f4\\u98fe\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[143].length;++e)65533!==r[143][e].charCodeAt(0)&&(n[r[143][e]]=36608+e,t[36608+e]=r[143][e]);for(r[144]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u62ed\\u690d\\u6b96\\u71ed\\u7e54\\u8077\\u8272\\u89e6\\u98df\\u8755\\u8fb1\\u5c3b\\u4f38\\u4fe1\\u4fb5\\u5507\\u5a20\\u5bdd\\u5be9\\u5fc3\\u614e\\u632f\\u65b0\\u664b\\u68ee\\u699b\\u6d78\\u6df1\\u7533\\u75b9\\u771f\\u795e\\u79e6\\u7d33\\u81e3\\u82af\\u85aa\\u89aa\\u8a3a\\u8eab\\u8f9b\\u9032\\u91dd\\u9707\\u4eba\\u4ec1\\u5203\\u5875\\u58ec\\u5c0b\\u751a\\u5c3d\\u814e\\u8a0a\\u8fc5\\u9663\\u976d\\u7b25\\u8acf\\u9808\\u9162\\u56f3\\u53a8\\ufffd\\u9017\\u5439\\u5782\\u5e25\\u63a8\\u6c34\\u708a\\u7761\\u7c8b\\u7fe0\\u8870\\u9042\\u9154\\u9310\\u9318\\u968f\\u745e\\u9ac4\\u5d07\\u5d69\\u6570\\u67a2\\u8da8\\u96db\\u636e\\u6749\\u6919\\u83c5\\u9817\\u96c0\\u88fe\\u6f84\\u647a\\u5bf8\\u4e16\\u702c\\u755d\\u662f\\u51c4\\u5236\\u52e2\\u59d3\\u5f81\\u6027\\u6210\\u653f\\u6574\\u661f\\u6674\\u68f2\\u6816\\u6b63\\u6e05\\u7272\\u751f\\u76db\\u7cbe\\u8056\\u58f0\\u88fd\\u897f\\u8aa0\\u8a93\\u8acb\\u901d\\u9192\\u9752\\u9759\\u6589\\u7a0e\\u8106\\u96bb\\u5e2d\\u60dc\\u621a\\u65a5\\u6614\\u6790\\u77f3\\u7a4d\\u7c4d\\u7e3e\\u810a\\u8cac\\u8d64\\u8de1\\u8e5f\\u78a9\\u5207\\u62d9\\u63a5\\u6442\\u6298\\u8a2d\\u7a83\\u7bc0\\u8aac\\u96ea\\u7d76\\u820c\\u8749\\u4ed9\\u5148\\u5343\\u5360\\u5ba3\\u5c02\\u5c16\\u5ddd\\u6226\\u6247\\u64b0\\u6813\\u6834\\u6cc9\\u6d45\\u6d17\\u67d3\\u6f5c\\u714e\\u717d\\u65cb\\u7a7f\\u7bad\\u7dda\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[144].length;++e)65533!==r[144][e].charCodeAt(0)&&(n[r[144][e]]=36864+e,t[36864+e]=r[144][e]);for(r[145]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7e4a\\u7fa8\\u817a\\u821b\\u8239\\u85a6\\u8a6e\\u8cce\\u8df5\\u9078\\u9077\\u92ad\\u9291\\u9583\\u9bae\\u524d\\u5584\\u6f38\\u7136\\u5168\\u7985\\u7e55\\u81b3\\u7cce\\u564c\\u5851\\u5ca8\\u63aa\\u66fe\\u66fd\\u695a\\u72d9\\u758f\\u758e\\u790e\\u7956\\u79df\\u7c97\\u7d20\\u7d44\\u8607\\u8a34\\u963b\\u9061\\u9f20\\u50e7\\u5275\\u53cc\\u53e2\\u5009\\u55aa\\u58ee\\u594f\\u723d\\u5b8b\\u5c64\\u531d\\u60e3\\u60f3\\u635c\\u6383\\u633f\\u63bb\\ufffd\\u64cd\\u65e9\\u66f9\\u5de3\\u69cd\\u69fd\\u6f15\\u71e5\\u4e89\\u75e9\\u76f8\\u7a93\\u7cdf\\u7dcf\\u7d9c\\u8061\\u8349\\u8358\\u846c\\u84bc\\u85fb\\u88c5\\u8d70\\u9001\\u906d\\u9397\\u971c\\u9a12\\u50cf\\u5897\\u618e\\u81d3\\u8535\\u8d08\\u9020\\u4fc3\\u5074\\u5247\\u5373\\u606f\\u6349\\u675f\\u6e2c\\u8db3\\u901f\\u4fd7\\u5c5e\\u8cca\\u65cf\\u7d9a\\u5352\\u8896\\u5176\\u63c3\\u5b58\\u5b6b\\u5c0a\\u640d\\u6751\\u905c\\u4ed6\\u591a\\u592a\\u6c70\\u8a51\\u553e\\u5815\\u59a5\\u60f0\\u6253\\u67c1\\u8235\\u6955\\u9640\\u99c4\\u9a28\\u4f53\\u5806\\u5bfe\\u8010\\u5cb1\\u5e2f\\u5f85\\u6020\\u614b\\u6234\\u66ff\\u6cf0\\u6ede\\u80ce\\u817f\\u82d4\\u888b\\u8cb8\\u9000\\u902e\\u968a\\u9edb\\u9bdb\\u4ee3\\u53f0\\u5927\\u7b2c\\u918d\\u984c\\u9df9\\u6edd\\u7027\\u5353\\u5544\\u5b85\\u6258\\u629e\\u62d3\\u6ca2\\u6fef\\u7422\\u8a17\\u9438\\u6fc1\\u8afe\\u8338\\u51e7\\u86f8\\u53ea\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[145].length;++e)65533!==r[145][e].charCodeAt(0)&&(n[r[145][e]]=37120+e,t[37120+e]=r[145][e]);for(r[146]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u53e9\\u4f46\\u9054\\u8fb0\\u596a\\u8131\\u5dfd\\u7aea\\u8fbf\\u68da\\u8c37\\u72f8\\u9c48\\u6a3d\\u8ab0\\u4e39\\u5358\\u5606\\u5766\\u62c5\\u63a2\\u65e6\\u6b4e\\u6de1\\u6e5b\\u70ad\\u77ed\\u7aef\\u7baa\\u7dbb\\u803d\\u80c6\\u86cb\\u8a95\\u935b\\u56e3\\u58c7\\u5f3e\\u65ad\\u6696\\u6a80\\u6bb5\\u7537\\u8ac7\\u5024\\u77e5\\u5730\\u5f1b\\u6065\\u667a\\u6c60\\u75f4\\u7a1a\\u7f6e\\u81f4\\u8718\\u9045\\u99b3\\u7bc9\\u755c\\u7af9\\u7b51\\u84c4\\ufffd\\u9010\\u79e9\\u7a92\\u8336\\u5ae1\\u7740\\u4e2d\\u4ef2\\u5b99\\u5fe0\\u62bd\\u663c\\u67f1\\u6ce8\\u866b\\u8877\\u8a3b\\u914e\\u92f3\\u99d0\\u6a17\\u7026\\u732a\\u82e7\\u8457\\u8caf\\u4e01\\u5146\\u51cb\\u558b\\u5bf5\\u5e16\\u5e33\\u5e81\\u5f14\\u5f35\\u5f6b\\u5fb4\\u61f2\\u6311\\u66a2\\u671d\\u6f6e\\u7252\\u753a\\u773a\\u8074\\u8139\\u8178\\u8776\\u8abf\\u8adc\\u8d85\\u8df3\\u929a\\u9577\\u9802\\u9ce5\\u52c5\\u6357\\u76f4\\u6715\\u6c88\\u73cd\\u8cc3\\u93ae\\u9673\\u6d25\\u589c\\u690e\\u69cc\\u8ffd\\u939a\\u75db\\u901a\\u585a\\u6802\\u63b4\\u69fb\\u4f43\\u6f2c\\u67d8\\u8fbb\\u8526\\u7db4\\u9354\\u693f\\u6f70\\u576a\\u58f7\\u5b2c\\u7d2c\\u722a\\u540a\\u91e3\\u9db4\\u4ead\\u4f4e\\u505c\\u5075\\u5243\\u8c9e\\u5448\\u5824\\u5b9a\\u5e1d\\u5e95\\u5ead\\u5ef7\\u5f1f\\u608c\\u62b5\\u633a\\u63d0\\u68af\\u6c40\\u7887\\u798e\\u7a0b\\u7de0\\u8247\\u8a02\\u8ae6\\u8e44\\u9013\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[146].length;++e)65533!==r[146][e].charCodeAt(0)&&(n[r[146][e]]=37376+e,t[37376+e]=r[146][e]);for(r[147]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u90b8\\u912d\\u91d8\\u9f0e\\u6ce5\\u6458\\u64e2\\u6575\\u6ef4\\u7684\\u7b1b\\u9069\\u93d1\\u6eba\\u54f2\\u5fb9\\u64a4\\u8f4d\\u8fed\\u9244\\u5178\\u586b\\u5929\\u5c55\\u5e97\\u6dfb\\u7e8f\\u751c\\u8cbc\\u8ee2\\u985b\\u70b9\\u4f1d\\u6bbf\\u6fb1\\u7530\\u96fb\\u514e\\u5410\\u5835\\u5857\\u59ac\\u5c60\\u5f92\\u6597\\u675c\\u6e21\\u767b\\u83df\\u8ced\\u9014\\u90fd\\u934d\\u7825\\u783a\\u52aa\\u5ea6\\u571f\\u5974\\u6012\\u5012\\u515a\\u51ac\\ufffd\\u51cd\\u5200\\u5510\\u5854\\u5858\\u5957\\u5b95\\u5cf6\\u5d8b\\u60bc\\u6295\\u642d\\u6771\\u6843\\u68bc\\u68df\\u76d7\\u6dd8\\u6e6f\\u6d9b\\u706f\\u71c8\\u5f53\\u75d8\\u7977\\u7b49\\u7b54\\u7b52\\u7cd6\\u7d71\\u5230\\u8463\\u8569\\u85e4\\u8a0e\\u8b04\\u8c46\\u8e0f\\u9003\\u900f\\u9419\\u9676\\u982d\\u9a30\\u95d8\\u50cd\\u52d5\\u540c\\u5802\\u5c0e\\u61a7\\u649e\\u6d1e\\u77b3\\u7ae5\\u80f4\\u8404\\u9053\\u9285\\u5ce0\\u9d07\\u533f\\u5f97\\u5fb3\\u6d9c\\u7279\\u7763\\u79bf\\u7be4\\u6bd2\\u72ec\\u8aad\\u6803\\u6a61\\u51f8\\u7a81\\u6934\\u5c4a\\u9cf6\\u82eb\\u5bc5\\u9149\\u701e\\u5678\\u5c6f\\u60c7\\u6566\\u6c8c\\u8c5a\\u9041\\u9813\\u5451\\u66c7\\u920d\\u5948\\u90a3\\u5185\\u4e4d\\u51ea\\u8599\\u8b0e\\u7058\\u637a\\u934b\\u6962\\u99b4\\u7e04\\u7577\\u5357\\u6960\\u8edf\\u96e3\\u6c5d\\u4e8c\\u5c3c\\u5f10\\u8fe9\\u5302\\u8cd1\\u8089\\u8679\\u5eff\\u65e5\\u4e73\\u5165\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[147].length;++e)65533!==r[147][e].charCodeAt(0)&&(n[r[147][e]]=37632+e,t[37632+e]=r[147][e]);for(r[148]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5982\\u5c3f\\u97ee\\u4efb\\u598a\\u5fcd\\u8a8d\\u6fe1\\u79b0\\u7962\\u5be7\\u8471\\u732b\\u71b1\\u5e74\\u5ff5\\u637b\\u649a\\u71c3\\u7c98\\u4e43\\u5efc\\u4e4b\\u57dc\\u56a2\\u60a9\\u6fc3\\u7d0d\\u80fd\\u8133\\u81bf\\u8fb2\\u8997\\u86a4\\u5df4\\u628a\\u64ad\\u8987\\u6777\\u6ce2\\u6d3e\\u7436\\u7834\\u5a46\\u7f75\\u82ad\\u99ac\\u4ff3\\u5ec3\\u62dd\\u6392\\u6557\\u676f\\u76c3\\u724c\\u80cc\\u80ba\\u8f29\\u914d\\u500d\\u57f9\\u5a92\\u6885\\ufffd\\u6973\\u7164\\u72fd\\u8cb7\\u58f2\\u8ce0\\u966a\\u9019\\u877f\\u79e4\\u77e7\\u8429\\u4f2f\\u5265\\u535a\\u62cd\\u67cf\\u6cca\\u767d\\u7b94\\u7c95\\u8236\\u8584\\u8feb\\u66dd\\u6f20\\u7206\\u7e1b\\u83ab\\u99c1\\u9ea6\\u51fd\\u7bb1\\u7872\\u7bb8\\u8087\\u7b48\\u6ae8\\u5e61\\u808c\\u7551\\u7560\\u516b\\u9262\\u6e8c\\u767a\\u9197\\u9aea\\u4f10\\u7f70\\u629c\\u7b4f\\u95a5\\u9ce9\\u567a\\u5859\\u86e4\\u96bc\\u4f34\\u5224\\u534a\\u53cd\\u53db\\u5e06\\u642c\\u6591\\u677f\\u6c3e\\u6c4e\\u7248\\u72af\\u73ed\\u7554\\u7e41\\u822c\\u85e9\\u8ca9\\u7bc4\\u91c6\\u7169\\u9812\\u98ef\\u633d\\u6669\\u756a\\u76e4\\u78d0\\u8543\\u86ee\\u532a\\u5351\\u5426\\u5983\\u5e87\\u5f7c\\u60b2\\u6249\\u6279\\u62ab\\u6590\\u6bd4\\u6ccc\\u75b2\\u76ae\\u7891\\u79d8\\u7dcb\\u7f77\\u80a5\\u88ab\\u8ab9\\u8cbb\\u907f\\u975e\\u98db\\u6a0b\\u7c38\\u5099\\u5c3e\\u5fae\\u6787\\u6bd8\\u7435\\u7709\\u7f8e\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[148].length;++e)65533!==r[148][e].charCodeAt(0)&&(n[r[148][e]]=37888+e,t[37888+e]=r[148][e]);for(r[149]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9f3b\\u67ca\\u7a17\\u5339\\u758b\\u9aed\\u5f66\\u819d\\u83f1\\u8098\\u5f3c\\u5fc5\\u7562\\u7b46\\u903c\\u6867\\u59eb\\u5a9b\\u7d10\\u767e\\u8b2c\\u4ff5\\u5f6a\\u6a19\\u6c37\\u6f02\\u74e2\\u7968\\u8868\\u8a55\\u8c79\\u5edf\\u63cf\\u75c5\\u79d2\\u82d7\\u9328\\u92f2\\u849c\\u86ed\\u9c2d\\u54c1\\u5f6c\\u658c\\u6d5c\\u7015\\u8ca7\\u8cd3\\u983b\\u654f\\u74f6\\u4e0d\\u4ed8\\u57e0\\u592b\\u5a66\\u5bcc\\u51a8\\u5e03\\u5e9c\\u6016\\u6276\\u6577\\ufffd\\u65a7\\u666e\\u6d6e\\u7236\\u7b26\\u8150\\u819a\\u8299\\u8b5c\\u8ca0\\u8ce6\\u8d74\\u961c\\u9644\\u4fae\\u64ab\\u6b66\\u821e\\u8461\\u856a\\u90e8\\u5c01\\u6953\\u98a8\\u847a\\u8557\\u4f0f\\u526f\\u5fa9\\u5e45\\u670d\\u798f\\u8179\\u8907\\u8986\\u6df5\\u5f17\\u6255\\u6cb8\\u4ecf\\u7269\\u9b92\\u5206\\u543b\\u5674\\u58b3\\u61a4\\u626e\\u711a\\u596e\\u7c89\\u7cde\\u7d1b\\u96f0\\u6587\\u805e\\u4e19\\u4f75\\u5175\\u5840\\u5e63\\u5e73\\u5f0a\\u67c4\\u4e26\\u853d\\u9589\\u965b\\u7c73\\u9801\\u50fb\\u58c1\\u7656\\u78a7\\u5225\\u77a5\\u8511\\u7b86\\u504f\\u5909\\u7247\\u7bc7\\u7de8\\u8fba\\u8fd4\\u904d\\u4fbf\\u52c9\\u5a29\\u5f01\\u97ad\\u4fdd\\u8217\\u92ea\\u5703\\u6355\\u6b69\\u752b\\u88dc\\u8f14\\u7a42\\u52df\\u5893\\u6155\\u620a\\u66ae\\u6bcd\\u7c3f\\u83e9\\u5023\\u4ff8\\u5305\\u5446\\u5831\\u5949\\u5b9d\\u5cf0\\u5cef\\u5d29\\u5e96\\u62b1\\u6367\\u653e\\u65b9\\u670b\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[149].length;++e)65533!==r[149][e].charCodeAt(0)&&(n[r[149][e]]=38144+e,t[38144+e]=r[149][e]);for(r[150]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6cd5\\u6ce1\\u70f9\\u7832\\u7e2b\\u80de\\u82b3\\u840c\\u84ec\\u8702\\u8912\\u8a2a\\u8c4a\\u90a6\\u92d2\\u98fd\\u9cf3\\u9d6c\\u4e4f\\u4ea1\\u508d\\u5256\\u574a\\u59a8\\u5e3d\\u5fd8\\u5fd9\\u623f\\u66b4\\u671b\\u67d0\\u68d2\\u5192\\u7d21\\u80aa\\u81a8\\u8b00\\u8c8c\\u8cbf\\u927e\\u9632\\u5420\\u982c\\u5317\\u50d5\\u535c\\u58a8\\u64b2\\u6734\\u7267\\u7766\\u7a46\\u91e6\\u52c3\\u6ca1\\u6b86\\u5800\\u5e4c\\u5954\\u672c\\u7ffb\\u51e1\\u76c6\\ufffd\\u6469\\u78e8\\u9b54\\u9ebb\\u57cb\\u59b9\\u6627\\u679a\\u6bce\\u54e9\\u69d9\\u5e55\\u819c\\u6795\\u9baa\\u67fe\\u9c52\\u685d\\u4ea6\\u4fe3\\u53c8\\u62b9\\u672b\\u6cab\\u8fc4\\u4fad\\u7e6d\\u9ebf\\u4e07\\u6162\\u6e80\\u6f2b\\u8513\\u5473\\u672a\\u9b45\\u5df3\\u7b95\\u5cac\\u5bc6\\u871c\\u6e4a\\u84d1\\u7a14\\u8108\\u5999\\u7c8d\\u6c11\\u7720\\u52d9\\u5922\\u7121\\u725f\\u77db\\u9727\\u9d61\\u690b\\u5a7f\\u5a18\\u51a5\\u540d\\u547d\\u660e\\u76df\\u8ff7\\u9298\\u9cf4\\u59ea\\u725d\\u6ec5\\u514d\\u68c9\\u7dbf\\u7dec\\u9762\\u9eba\\u6478\\u6a21\\u8302\\u5984\\u5b5f\\u6bdb\\u731b\\u76f2\\u7db2\\u8017\\u8499\\u5132\\u6728\\u9ed9\\u76ee\\u6762\\u52ff\\u9905\\u5c24\\u623b\\u7c7e\\u8cb0\\u554f\\u60b6\\u7d0b\\u9580\\u5301\\u4e5f\\u51b6\\u591c\\u723a\\u8036\\u91ce\\u5f25\\u77e2\\u5384\\u5f79\\u7d04\\u85ac\\u8a33\\u8e8d\\u9756\\u67f3\\u85ae\\u9453\\u6109\\u6108\\u6cb9\\u7652\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[150].length;++e)65533!==r[150][e].charCodeAt(0)&&(n[r[150][e]]=38400+e,t[38400+e]=r[150][e]);for(r[151]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8aed\\u8f38\\u552f\\u4f51\\u512a\\u52c7\\u53cb\\u5ba5\\u5e7d\\u60a0\\u6182\\u63d6\\u6709\\u67da\\u6e67\\u6d8c\\u7336\\u7337\\u7531\\u7950\\u88d5\\u8a98\\u904a\\u9091\\u90f5\\u96c4\\u878d\\u5915\\u4e88\\u4f59\\u4e0e\\u8a89\\u8f3f\\u9810\\u50ad\\u5e7c\\u5996\\u5bb9\\u5eb8\\u63da\\u63fa\\u64c1\\u66dc\\u694a\\u69d8\\u6d0b\\u6eb6\\u7194\\u7528\\u7aaf\\u7f8a\\u8000\\u8449\\u84c9\\u8981\\u8b21\\u8e0a\\u9065\\u967d\\u990a\\u617e\\u6291\\u6b32\\ufffd\\u6c83\\u6d74\\u7fcc\\u7ffc\\u6dc0\\u7f85\\u87ba\\u88f8\\u6765\\u83b1\\u983c\\u96f7\\u6d1b\\u7d61\\u843d\\u916a\\u4e71\\u5375\\u5d50\\u6b04\\u6feb\\u85cd\\u862d\\u89a7\\u5229\\u540f\\u5c65\\u674e\\u68a8\\u7406\\u7483\\u75e2\\u88cf\\u88e1\\u91cc\\u96e2\\u9678\\u5f8b\\u7387\\u7acb\\u844e\\u63a0\\u7565\\u5289\\u6d41\\u6e9c\\u7409\\u7559\\u786b\\u7c92\\u9686\\u7adc\\u9f8d\\u4fb6\\u616e\\u65c5\\u865c\\u4e86\\u4eae\\u50da\\u4e21\\u51cc\\u5bee\\u6599\\u6881\\u6dbc\\u731f\\u7642\\u77ad\\u7a1c\\u7ce7\\u826f\\u8ad2\\u907c\\u91cf\\u9675\\u9818\\u529b\\u7dd1\\u502b\\u5398\\u6797\\u6dcb\\u71d0\\u7433\\u81e8\\u8f2a\\u96a3\\u9c57\\u9e9f\\u7460\\u5841\\u6d99\\u7d2f\\u985e\\u4ee4\\u4f36\\u4f8b\\u51b7\\u52b1\\u5dba\\u601c\\u73b2\\u793c\\u82d3\\u9234\\u96b7\\u96f6\\u970a\\u9e97\\u9f62\\u66a6\\u6b74\\u5217\\u52a3\\u70c8\\u88c2\\u5ec9\\u604b\\u6190\\u6f23\\u7149\\u7c3e\\u7df4\\u806f\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[151].length;++e)65533!==r[151][e].charCodeAt(0)&&(n[r[151][e]]=38656+e,t[38656+e]=r[151][e]);for(r[152]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u84ee\\u9023\\u932c\\u5442\\u9b6f\\u6ad3\\u7089\\u8cc2\\u8def\\u9732\\u52b4\\u5a41\\u5eca\\u5f04\\u6717\\u697c\\u6994\\u6d6a\\u6f0f\\u7262\\u72fc\\u7bed\\u8001\\u807e\\u874b\\u90ce\\u516d\\u9e93\\u7984\\u808b\\u9332\\u8ad6\\u502d\\u548c\\u8a71\\u6b6a\\u8cc4\\u8107\\u60d1\\u67a0\\u9df2\\u4e99\\u4e98\\u9c10\\u8a6b\\u85c1\\u8568\\u6900\\u6e7e\\u7897\\u8155\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5f0c\\u4e10\\u4e15\\u4e2a\\u4e31\\u4e36\\u4e3c\\u4e3f\\u4e42\\u4e56\\u4e58\\u4e82\\u4e85\\u8c6b\\u4e8a\\u8212\\u5f0d\\u4e8e\\u4e9e\\u4e9f\\u4ea0\\u4ea2\\u4eb0\\u4eb3\\u4eb6\\u4ece\\u4ecd\\u4ec4\\u4ec6\\u4ec2\\u4ed7\\u4ede\\u4eed\\u4edf\\u4ef7\\u4f09\\u4f5a\\u4f30\\u4f5b\\u4f5d\\u4f57\\u4f47\\u4f76\\u4f88\\u4f8f\\u4f98\\u4f7b\\u4f69\\u4f70\\u4f91\\u4f6f\\u4f86\\u4f96\\u5118\\u4fd4\\u4fdf\\u4fce\\u4fd8\\u4fdb\\u4fd1\\u4fda\\u4fd0\\u4fe4\\u4fe5\\u501a\\u5028\\u5014\\u502a\\u5025\\u5005\\u4f1c\\u4ff6\\u5021\\u5029\\u502c\\u4ffe\\u4fef\\u5011\\u5006\\u5043\\u5047\\u6703\\u5055\\u5050\\u5048\\u505a\\u5056\\u506c\\u5078\\u5080\\u509a\\u5085\\u50b4\\u50b2\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[152].length;++e)65533!==r[152][e].charCodeAt(0)&&(n[r[152][e]]=38912+e,t[38912+e]=r[152][e]);for(r[153]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u50c9\\u50ca\\u50b3\\u50c2\\u50d6\\u50de\\u50e5\\u50ed\\u50e3\\u50ee\\u50f9\\u50f5\\u5109\\u5101\\u5102\\u5116\\u5115\\u5114\\u511a\\u5121\\u513a\\u5137\\u513c\\u513b\\u513f\\u5140\\u5152\\u514c\\u5154\\u5162\\u7af8\\u5169\\u516a\\u516e\\u5180\\u5182\\u56d8\\u518c\\u5189\\u518f\\u5191\\u5193\\u5195\\u5196\\u51a4\\u51a6\\u51a2\\u51a9\\u51aa\\u51ab\\u51b3\\u51b1\\u51b2\\u51b0\\u51b5\\u51bd\\u51c5\\u51c9\\u51db\\u51e0\\u8655\\u51e9\\u51ed\\ufffd\\u51f0\\u51f5\\u51fe\\u5204\\u520b\\u5214\\u520e\\u5227\\u522a\\u522e\\u5233\\u5239\\u524f\\u5244\\u524b\\u524c\\u525e\\u5254\\u526a\\u5274\\u5269\\u5273\\u527f\\u527d\\u528d\\u5294\\u5292\\u5271\\u5288\\u5291\\u8fa8\\u8fa7\\u52ac\\u52ad\\u52bc\\u52b5\\u52c1\\u52cd\\u52d7\\u52de\\u52e3\\u52e6\\u98ed\\u52e0\\u52f3\\u52f5\\u52f8\\u52f9\\u5306\\u5308\\u7538\\u530d\\u5310\\u530f\\u5315\\u531a\\u5323\\u532f\\u5331\\u5333\\u5338\\u5340\\u5346\\u5345\\u4e17\\u5349\\u534d\\u51d6\\u535e\\u5369\\u536e\\u5918\\u537b\\u5377\\u5382\\u5396\\u53a0\\u53a6\\u53a5\\u53ae\\u53b0\\u53b6\\u53c3\\u7c12\\u96d9\\u53df\\u66fc\\u71ee\\u53ee\\u53e8\\u53ed\\u53fa\\u5401\\u543d\\u5440\\u542c\\u542d\\u543c\\u542e\\u5436\\u5429\\u541d\\u544e\\u548f\\u5475\\u548e\\u545f\\u5471\\u5477\\u5470\\u5492\\u547b\\u5480\\u5476\\u5484\\u5490\\u5486\\u54c7\\u54a2\\u54b8\\u54a5\\u54ac\\u54c4\\u54c8\\u54a8\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[153].length;++e)65533!==r[153][e].charCodeAt(0)&&(n[r[153][e]]=39168+e,t[39168+e]=r[153][e]);for(r[154]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u54ab\\u54c2\\u54a4\\u54be\\u54bc\\u54d8\\u54e5\\u54e6\\u550f\\u5514\\u54fd\\u54ee\\u54ed\\u54fa\\u54e2\\u5539\\u5540\\u5563\\u554c\\u552e\\u555c\\u5545\\u5556\\u5557\\u5538\\u5533\\u555d\\u5599\\u5580\\u54af\\u558a\\u559f\\u557b\\u557e\\u5598\\u559e\\u55ae\\u557c\\u5583\\u55a9\\u5587\\u55a8\\u55da\\u55c5\\u55df\\u55c4\\u55dc\\u55e4\\u55d4\\u5614\\u55f7\\u5616\\u55fe\\u55fd\\u561b\\u55f9\\u564e\\u5650\\u71df\\u5634\\u5636\\u5632\\u5638\\ufffd\\u566b\\u5664\\u562f\\u566c\\u566a\\u5686\\u5680\\u568a\\u56a0\\u5694\\u568f\\u56a5\\u56ae\\u56b6\\u56b4\\u56c2\\u56bc\\u56c1\\u56c3\\u56c0\\u56c8\\u56ce\\u56d1\\u56d3\\u56d7\\u56ee\\u56f9\\u5700\\u56ff\\u5704\\u5709\\u5708\\u570b\\u570d\\u5713\\u5718\\u5716\\u55c7\\u571c\\u5726\\u5737\\u5738\\u574e\\u573b\\u5740\\u574f\\u5769\\u57c0\\u5788\\u5761\\u577f\\u5789\\u5793\\u57a0\\u57b3\\u57a4\\u57aa\\u57b0\\u57c3\\u57c6\\u57d4\\u57d2\\u57d3\\u580a\\u57d6\\u57e3\\u580b\\u5819\\u581d\\u5872\\u5821\\u5862\\u584b\\u5870\\u6bc0\\u5852\\u583d\\u5879\\u5885\\u58b9\\u589f\\u58ab\\u58ba\\u58de\\u58bb\\u58b8\\u58ae\\u58c5\\u58d3\\u58d1\\u58d7\\u58d9\\u58d8\\u58e5\\u58dc\\u58e4\\u58df\\u58ef\\u58fa\\u58f9\\u58fb\\u58fc\\u58fd\\u5902\\u590a\\u5910\\u591b\\u68a6\\u5925\\u592c\\u592d\\u5932\\u5938\\u593e\\u7ad2\\u5955\\u5950\\u594e\\u595a\\u5958\\u5962\\u5960\\u5967\\u596c\\u5969\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[154].length;++e)65533!==r[154][e].charCodeAt(0)&&(n[r[154][e]]=39424+e,t[39424+e]=r[154][e]);for(r[155]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5978\\u5981\\u599d\\u4f5e\\u4fab\\u59a3\\u59b2\\u59c6\\u59e8\\u59dc\\u598d\\u59d9\\u59da\\u5a25\\u5a1f\\u5a11\\u5a1c\\u5a09\\u5a1a\\u5a40\\u5a6c\\u5a49\\u5a35\\u5a36\\u5a62\\u5a6a\\u5a9a\\u5abc\\u5abe\\u5acb\\u5ac2\\u5abd\\u5ae3\\u5ad7\\u5ae6\\u5ae9\\u5ad6\\u5afa\\u5afb\\u5b0c\\u5b0b\\u5b16\\u5b32\\u5ad0\\u5b2a\\u5b36\\u5b3e\\u5b43\\u5b45\\u5b40\\u5b51\\u5b55\\u5b5a\\u5b5b\\u5b65\\u5b69\\u5b70\\u5b73\\u5b75\\u5b78\\u6588\\u5b7a\\u5b80\\ufffd\\u5b83\\u5ba6\\u5bb8\\u5bc3\\u5bc7\\u5bc9\\u5bd4\\u5bd0\\u5be4\\u5be6\\u5be2\\u5bde\\u5be5\\u5beb\\u5bf0\\u5bf6\\u5bf3\\u5c05\\u5c07\\u5c08\\u5c0d\\u5c13\\u5c20\\u5c22\\u5c28\\u5c38\\u5c39\\u5c41\\u5c46\\u5c4e\\u5c53\\u5c50\\u5c4f\\u5b71\\u5c6c\\u5c6e\\u4e62\\u5c76\\u5c79\\u5c8c\\u5c91\\u5c94\\u599b\\u5cab\\u5cbb\\u5cb6\\u5cbc\\u5cb7\\u5cc5\\u5cbe\\u5cc7\\u5cd9\\u5ce9\\u5cfd\\u5cfa\\u5ced\\u5d8c\\u5cea\\u5d0b\\u5d15\\u5d17\\u5d5c\\u5d1f\\u5d1b\\u5d11\\u5d14\\u5d22\\u5d1a\\u5d19\\u5d18\\u5d4c\\u5d52\\u5d4e\\u5d4b\\u5d6c\\u5d73\\u5d76\\u5d87\\u5d84\\u5d82\\u5da2\\u5d9d\\u5dac\\u5dae\\u5dbd\\u5d90\\u5db7\\u5dbc\\u5dc9\\u5dcd\\u5dd3\\u5dd2\\u5dd6\\u5ddb\\u5deb\\u5df2\\u5df5\\u5e0b\\u5e1a\\u5e19\\u5e11\\u5e1b\\u5e36\\u5e37\\u5e44\\u5e43\\u5e40\\u5e4e\\u5e57\\u5e54\\u5e5f\\u5e62\\u5e64\\u5e47\\u5e75\\u5e76\\u5e7a\\u9ebc\\u5e7f\\u5ea0\\u5ec1\\u5ec2\\u5ec8\\u5ed0\\u5ecf\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[155].length;++e)65533!==r[155][e].charCodeAt(0)&&(n[r[155][e]]=39680+e,t[39680+e]=r[155][e]);for(r[156]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5ed6\\u5ee3\\u5edd\\u5eda\\u5edb\\u5ee2\\u5ee1\\u5ee8\\u5ee9\\u5eec\\u5ef1\\u5ef3\\u5ef0\\u5ef4\\u5ef8\\u5efe\\u5f03\\u5f09\\u5f5d\\u5f5c\\u5f0b\\u5f11\\u5f16\\u5f29\\u5f2d\\u5f38\\u5f41\\u5f48\\u5f4c\\u5f4e\\u5f2f\\u5f51\\u5f56\\u5f57\\u5f59\\u5f61\\u5f6d\\u5f73\\u5f77\\u5f83\\u5f82\\u5f7f\\u5f8a\\u5f88\\u5f91\\u5f87\\u5f9e\\u5f99\\u5f98\\u5fa0\\u5fa8\\u5fad\\u5fbc\\u5fd6\\u5ffb\\u5fe4\\u5ff8\\u5ff1\\u5fdd\\u60b3\\u5fff\\u6021\\u6060\\ufffd\\u6019\\u6010\\u6029\\u600e\\u6031\\u601b\\u6015\\u602b\\u6026\\u600f\\u603a\\u605a\\u6041\\u606a\\u6077\\u605f\\u604a\\u6046\\u604d\\u6063\\u6043\\u6064\\u6042\\u606c\\u606b\\u6059\\u6081\\u608d\\u60e7\\u6083\\u609a\\u6084\\u609b\\u6096\\u6097\\u6092\\u60a7\\u608b\\u60e1\\u60b8\\u60e0\\u60d3\\u60b4\\u5ff0\\u60bd\\u60c6\\u60b5\\u60d8\\u614d\\u6115\\u6106\\u60f6\\u60f7\\u6100\\u60f4\\u60fa\\u6103\\u6121\\u60fb\\u60f1\\u610d\\u610e\\u6147\\u613e\\u6128\\u6127\\u614a\\u613f\\u613c\\u612c\\u6134\\u613d\\u6142\\u6144\\u6173\\u6177\\u6158\\u6159\\u615a\\u616b\\u6174\\u616f\\u6165\\u6171\\u615f\\u615d\\u6153\\u6175\\u6199\\u6196\\u6187\\u61ac\\u6194\\u619a\\u618a\\u6191\\u61ab\\u61ae\\u61cc\\u61ca\\u61c9\\u61f7\\u61c8\\u61c3\\u61c6\\u61ba\\u61cb\\u7f79\\u61cd\\u61e6\\u61e3\\u61f6\\u61fa\\u61f4\\u61ff\\u61fd\\u61fc\\u61fe\\u6200\\u6208\\u6209\\u620d\\u620c\\u6214\\u621b\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[156].length;++e)65533!==r[156][e].charCodeAt(0)&&(n[r[156][e]]=39936+e,t[39936+e]=r[156][e]);for(r[157]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u621e\\u6221\\u622a\\u622e\\u6230\\u6232\\u6233\\u6241\\u624e\\u625e\\u6263\\u625b\\u6260\\u6268\\u627c\\u6282\\u6289\\u627e\\u6292\\u6293\\u6296\\u62d4\\u6283\\u6294\\u62d7\\u62d1\\u62bb\\u62cf\\u62ff\\u62c6\\u64d4\\u62c8\\u62dc\\u62cc\\u62ca\\u62c2\\u62c7\\u629b\\u62c9\\u630c\\u62ee\\u62f1\\u6327\\u6302\\u6308\\u62ef\\u62f5\\u6350\\u633e\\u634d\\u641c\\u634f\\u6396\\u638e\\u6380\\u63ab\\u6376\\u63a3\\u638f\\u6389\\u639f\\u63b5\\u636b\\ufffd\\u6369\\u63be\\u63e9\\u63c0\\u63c6\\u63e3\\u63c9\\u63d2\\u63f6\\u63c4\\u6416\\u6434\\u6406\\u6413\\u6426\\u6436\\u651d\\u6417\\u6428\\u640f\\u6467\\u646f\\u6476\\u644e\\u652a\\u6495\\u6493\\u64a5\\u64a9\\u6488\\u64bc\\u64da\\u64d2\\u64c5\\u64c7\\u64bb\\u64d8\\u64c2\\u64f1\\u64e7\\u8209\\u64e0\\u64e1\\u62ac\\u64e3\\u64ef\\u652c\\u64f6\\u64f4\\u64f2\\u64fa\\u6500\\u64fd\\u6518\\u651c\\u6505\\u6524\\u6523\\u652b\\u6534\\u6535\\u6537\\u6536\\u6538\\u754b\\u6548\\u6556\\u6555\\u654d\\u6558\\u655e\\u655d\\u6572\\u6578\\u6582\\u6583\\u8b8a\\u659b\\u659f\\u65ab\\u65b7\\u65c3\\u65c6\\u65c1\\u65c4\\u65cc\\u65d2\\u65db\\u65d9\\u65e0\\u65e1\\u65f1\\u6772\\u660a\\u6603\\u65fb\\u6773\\u6635\\u6636\\u6634\\u661c\\u664f\\u6644\\u6649\\u6641\\u665e\\u665d\\u6664\\u6667\\u6668\\u665f\\u6662\\u6670\\u6683\\u6688\\u668e\\u6689\\u6684\\u6698\\u669d\\u66c1\\u66b9\\u66c9\\u66be\\u66bc\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[157].length;++e)65533!==r[157][e].charCodeAt(0)&&(n[r[157][e]]=40192+e,t[40192+e]=r[157][e]);for(r[158]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u66c4\\u66b8\\u66d6\\u66da\\u66e0\\u663f\\u66e6\\u66e9\\u66f0\\u66f5\\u66f7\\u670f\\u6716\\u671e\\u6726\\u6727\\u9738\\u672e\\u673f\\u6736\\u6741\\u6738\\u6737\\u6746\\u675e\\u6760\\u6759\\u6763\\u6764\\u6789\\u6770\\u67a9\\u677c\\u676a\\u678c\\u678b\\u67a6\\u67a1\\u6785\\u67b7\\u67ef\\u67b4\\u67ec\\u67b3\\u67e9\\u67b8\\u67e4\\u67de\\u67dd\\u67e2\\u67ee\\u67b9\\u67ce\\u67c6\\u67e7\\u6a9c\\u681e\\u6846\\u6829\\u6840\\u684d\\u6832\\u684e\\ufffd\\u68b3\\u682b\\u6859\\u6863\\u6877\\u687f\\u689f\\u688f\\u68ad\\u6894\\u689d\\u689b\\u6883\\u6aae\\u68b9\\u6874\\u68b5\\u68a0\\u68ba\\u690f\\u688d\\u687e\\u6901\\u68ca\\u6908\\u68d8\\u6922\\u6926\\u68e1\\u690c\\u68cd\\u68d4\\u68e7\\u68d5\\u6936\\u6912\\u6904\\u68d7\\u68e3\\u6925\\u68f9\\u68e0\\u68ef\\u6928\\u692a\\u691a\\u6923\\u6921\\u68c6\\u6979\\u6977\\u695c\\u6978\\u696b\\u6954\\u697e\\u696e\\u6939\\u6974\\u693d\\u6959\\u6930\\u6961\\u695e\\u695d\\u6981\\u696a\\u69b2\\u69ae\\u69d0\\u69bf\\u69c1\\u69d3\\u69be\\u69ce\\u5be8\\u69ca\\u69dd\\u69bb\\u69c3\\u69a7\\u6a2e\\u6991\\u69a0\\u699c\\u6995\\u69b4\\u69de\\u69e8\\u6a02\\u6a1b\\u69ff\\u6b0a\\u69f9\\u69f2\\u69e7\\u6a05\\u69b1\\u6a1e\\u69ed\\u6a14\\u69eb\\u6a0a\\u6a12\\u6ac1\\u6a23\\u6a13\\u6a44\\u6a0c\\u6a72\\u6a36\\u6a78\\u6a47\\u6a62\\u6a59\\u6a66\\u6a48\\u6a38\\u6a22\\u6a90\\u6a8d\\u6aa0\\u6a84\\u6aa2\\u6aa3\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[158].length;++e)65533!==r[158][e].charCodeAt(0)&&(n[r[158][e]]=40448+e,t[40448+e]=r[158][e]);for(r[159]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6a97\\u8617\\u6abb\\u6ac3\\u6ac2\\u6ab8\\u6ab3\\u6aac\\u6ade\\u6ad1\\u6adf\\u6aaa\\u6ada\\u6aea\\u6afb\\u6b05\\u8616\\u6afa\\u6b12\\u6b16\\u9b31\\u6b1f\\u6b38\\u6b37\\u76dc\\u6b39\\u98ee\\u6b47\\u6b43\\u6b49\\u6b50\\u6b59\\u6b54\\u6b5b\\u6b5f\\u6b61\\u6b78\\u6b79\\u6b7f\\u6b80\\u6b84\\u6b83\\u6b8d\\u6b98\\u6b95\\u6b9e\\u6ba4\\u6baa\\u6bab\\u6baf\\u6bb2\\u6bb1\\u6bb3\\u6bb7\\u6bbc\\u6bc6\\u6bcb\\u6bd3\\u6bdf\\u6bec\\u6beb\\u6bf3\\u6bef\\ufffd\\u9ebe\\u6c08\\u6c13\\u6c14\\u6c1b\\u6c24\\u6c23\\u6c5e\\u6c55\\u6c62\\u6c6a\\u6c82\\u6c8d\\u6c9a\\u6c81\\u6c9b\\u6c7e\\u6c68\\u6c73\\u6c92\\u6c90\\u6cc4\\u6cf1\\u6cd3\\u6cbd\\u6cd7\\u6cc5\\u6cdd\\u6cae\\u6cb1\\u6cbe\\u6cba\\u6cdb\\u6cef\\u6cd9\\u6cea\\u6d1f\\u884d\\u6d36\\u6d2b\\u6d3d\\u6d38\\u6d19\\u6d35\\u6d33\\u6d12\\u6d0c\\u6d63\\u6d93\\u6d64\\u6d5a\\u6d79\\u6d59\\u6d8e\\u6d95\\u6fe4\\u6d85\\u6df9\\u6e15\\u6e0a\\u6db5\\u6dc7\\u6de6\\u6db8\\u6dc6\\u6dec\\u6dde\\u6dcc\\u6de8\\u6dd2\\u6dc5\\u6dfa\\u6dd9\\u6de4\\u6dd5\\u6dea\\u6dee\\u6e2d\\u6e6e\\u6e2e\\u6e19\\u6e72\\u6e5f\\u6e3e\\u6e23\\u6e6b\\u6e2b\\u6e76\\u6e4d\\u6e1f\\u6e43\\u6e3a\\u6e4e\\u6e24\\u6eff\\u6e1d\\u6e38\\u6e82\\u6eaa\\u6e98\\u6ec9\\u6eb7\\u6ed3\\u6ebd\\u6eaf\\u6ec4\\u6eb2\\u6ed4\\u6ed5\\u6e8f\\u6ea5\\u6ec2\\u6e9f\\u6f41\\u6f11\\u704c\\u6eec\\u6ef8\\u6efe\\u6f3f\\u6ef2\\u6f31\\u6eef\\u6f32\\u6ecc\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[159].length;++e)65533!==r[159][e].charCodeAt(0)&&(n[r[159][e]]=40704+e,t[40704+e]=r[159][e]);for(r[224]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6f3e\\u6f13\\u6ef7\\u6f86\\u6f7a\\u6f78\\u6f81\\u6f80\\u6f6f\\u6f5b\\u6ff3\\u6f6d\\u6f82\\u6f7c\\u6f58\\u6f8e\\u6f91\\u6fc2\\u6f66\\u6fb3\\u6fa3\\u6fa1\\u6fa4\\u6fb9\\u6fc6\\u6faa\\u6fdf\\u6fd5\\u6fec\\u6fd4\\u6fd8\\u6ff1\\u6fee\\u6fdb\\u7009\\u700b\\u6ffa\\u7011\\u7001\\u700f\\u6ffe\\u701b\\u701a\\u6f74\\u701d\\u7018\\u701f\\u7030\\u703e\\u7032\\u7051\\u7063\\u7099\\u7092\\u70af\\u70f1\\u70ac\\u70b8\\u70b3\\u70ae\\u70df\\u70cb\\u70dd\\ufffd\\u70d9\\u7109\\u70fd\\u711c\\u7119\\u7165\\u7155\\u7188\\u7166\\u7162\\u714c\\u7156\\u716c\\u718f\\u71fb\\u7184\\u7195\\u71a8\\u71ac\\u71d7\\u71b9\\u71be\\u71d2\\u71c9\\u71d4\\u71ce\\u71e0\\u71ec\\u71e7\\u71f5\\u71fc\\u71f9\\u71ff\\u720d\\u7210\\u721b\\u7228\\u722d\\u722c\\u7230\\u7232\\u723b\\u723c\\u723f\\u7240\\u7246\\u724b\\u7258\\u7274\\u727e\\u7282\\u7281\\u7287\\u7292\\u7296\\u72a2\\u72a7\\u72b9\\u72b2\\u72c3\\u72c6\\u72c4\\u72ce\\u72d2\\u72e2\\u72e0\\u72e1\\u72f9\\u72f7\\u500f\\u7317\\u730a\\u731c\\u7316\\u731d\\u7334\\u732f\\u7329\\u7325\\u733e\\u734e\\u734f\\u9ed8\\u7357\\u736a\\u7368\\u7370\\u7378\\u7375\\u737b\\u737a\\u73c8\\u73b3\\u73ce\\u73bb\\u73c0\\u73e5\\u73ee\\u73de\\u74a2\\u7405\\u746f\\u7425\\u73f8\\u7432\\u743a\\u7455\\u743f\\u745f\\u7459\\u7441\\u745c\\u7469\\u7470\\u7463\\u746a\\u7476\\u747e\\u748b\\u749e\\u74a7\\u74ca\\u74cf\\u74d4\\u73f1\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[224].length;++e)65533!==r[224][e].charCodeAt(0)&&(n[r[224][e]]=57344+e,t[57344+e]=r[224][e]);for(r[225]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u74e0\\u74e3\\u74e7\\u74e9\\u74ee\\u74f2\\u74f0\\u74f1\\u74f8\\u74f7\\u7504\\u7503\\u7505\\u750c\\u750e\\u750d\\u7515\\u7513\\u751e\\u7526\\u752c\\u753c\\u7544\\u754d\\u754a\\u7549\\u755b\\u7546\\u755a\\u7569\\u7564\\u7567\\u756b\\u756d\\u7578\\u7576\\u7586\\u7587\\u7574\\u758a\\u7589\\u7582\\u7594\\u759a\\u759d\\u75a5\\u75a3\\u75c2\\u75b3\\u75c3\\u75b5\\u75bd\\u75b8\\u75bc\\u75b1\\u75cd\\u75ca\\u75d2\\u75d9\\u75e3\\u75de\\u75fe\\u75ff\\ufffd\\u75fc\\u7601\\u75f0\\u75fa\\u75f2\\u75f3\\u760b\\u760d\\u7609\\u761f\\u7627\\u7620\\u7621\\u7622\\u7624\\u7634\\u7630\\u763b\\u7647\\u7648\\u7646\\u765c\\u7658\\u7661\\u7662\\u7668\\u7669\\u766a\\u7667\\u766c\\u7670\\u7672\\u7676\\u7678\\u767c\\u7680\\u7683\\u7688\\u768b\\u768e\\u7696\\u7693\\u7699\\u769a\\u76b0\\u76b4\\u76b8\\u76b9\\u76ba\\u76c2\\u76cd\\u76d6\\u76d2\\u76de\\u76e1\\u76e5\\u76e7\\u76ea\\u862f\\u76fb\\u7708\\u7707\\u7704\\u7729\\u7724\\u771e\\u7725\\u7726\\u771b\\u7737\\u7738\\u7747\\u775a\\u7768\\u776b\\u775b\\u7765\\u777f\\u777e\\u7779\\u778e\\u778b\\u7791\\u77a0\\u779e\\u77b0\\u77b6\\u77b9\\u77bf\\u77bc\\u77bd\\u77bb\\u77c7\\u77cd\\u77d7\\u77da\\u77dc\\u77e3\\u77ee\\u77fc\\u780c\\u7812\\u7926\\u7820\\u792a\\u7845\\u788e\\u7874\\u7886\\u787c\\u789a\\u788c\\u78a3\\u78b5\\u78aa\\u78af\\u78d1\\u78c6\\u78cb\\u78d4\\u78be\\u78bc\\u78c5\\u78ca\\u78ec\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[225].length;++e)65533!==r[225][e].charCodeAt(0)&&(n[r[225][e]]=57600+e,t[57600+e]=r[225][e]);for(r[226]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u78e7\\u78da\\u78fd\\u78f4\\u7907\\u7912\\u7911\\u7919\\u792c\\u792b\\u7940\\u7960\\u7957\\u795f\\u795a\\u7955\\u7953\\u797a\\u797f\\u798a\\u799d\\u79a7\\u9f4b\\u79aa\\u79ae\\u79b3\\u79b9\\u79ba\\u79c9\\u79d5\\u79e7\\u79ec\\u79e1\\u79e3\\u7a08\\u7a0d\\u7a18\\u7a19\\u7a20\\u7a1f\\u7980\\u7a31\\u7a3b\\u7a3e\\u7a37\\u7a43\\u7a57\\u7a49\\u7a61\\u7a62\\u7a69\\u9f9d\\u7a70\\u7a79\\u7a7d\\u7a88\\u7a97\\u7a95\\u7a98\\u7a96\\u7aa9\\u7ac8\\u7ab0\\ufffd\\u7ab6\\u7ac5\\u7ac4\\u7abf\\u9083\\u7ac7\\u7aca\\u7acd\\u7acf\\u7ad5\\u7ad3\\u7ad9\\u7ada\\u7add\\u7ae1\\u7ae2\\u7ae6\\u7aed\\u7af0\\u7b02\\u7b0f\\u7b0a\\u7b06\\u7b33\\u7b18\\u7b19\\u7b1e\\u7b35\\u7b28\\u7b36\\u7b50\\u7b7a\\u7b04\\u7b4d\\u7b0b\\u7b4c\\u7b45\\u7b75\\u7b65\\u7b74\\u7b67\\u7b70\\u7b71\\u7b6c\\u7b6e\\u7b9d\\u7b98\\u7b9f\\u7b8d\\u7b9c\\u7b9a\\u7b8b\\u7b92\\u7b8f\\u7b5d\\u7b99\\u7bcb\\u7bc1\\u7bcc\\u7bcf\\u7bb4\\u7bc6\\u7bdd\\u7be9\\u7c11\\u7c14\\u7be6\\u7be5\\u7c60\\u7c00\\u7c07\\u7c13\\u7bf3\\u7bf7\\u7c17\\u7c0d\\u7bf6\\u7c23\\u7c27\\u7c2a\\u7c1f\\u7c37\\u7c2b\\u7c3d\\u7c4c\\u7c43\\u7c54\\u7c4f\\u7c40\\u7c50\\u7c58\\u7c5f\\u7c64\\u7c56\\u7c65\\u7c6c\\u7c75\\u7c83\\u7c90\\u7ca4\\u7cad\\u7ca2\\u7cab\\u7ca1\\u7ca8\\u7cb3\\u7cb2\\u7cb1\\u7cae\\u7cb9\\u7cbd\\u7cc0\\u7cc5\\u7cc2\\u7cd8\\u7cd2\\u7cdc\\u7ce2\\u9b3b\\u7cef\\u7cf2\\u7cf4\\u7cf6\\u7cfa\\u7d06\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[226].length;++e)65533!==r[226][e].charCodeAt(0)&&(n[r[226][e]]=57856+e,t[57856+e]=r[226][e]);for(r[227]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7d02\\u7d1c\\u7d15\\u7d0a\\u7d45\\u7d4b\\u7d2e\\u7d32\\u7d3f\\u7d35\\u7d46\\u7d73\\u7d56\\u7d4e\\u7d72\\u7d68\\u7d6e\\u7d4f\\u7d63\\u7d93\\u7d89\\u7d5b\\u7d8f\\u7d7d\\u7d9b\\u7dba\\u7dae\\u7da3\\u7db5\\u7dc7\\u7dbd\\u7dab\\u7e3d\\u7da2\\u7daf\\u7ddc\\u7db8\\u7d9f\\u7db0\\u7dd8\\u7ddd\\u7de4\\u7dde\\u7dfb\\u7df2\\u7de1\\u7e05\\u7e0a\\u7e23\\u7e21\\u7e12\\u7e31\\u7e1f\\u7e09\\u7e0b\\u7e22\\u7e46\\u7e66\\u7e3b\\u7e35\\u7e39\\u7e43\\u7e37\\ufffd\\u7e32\\u7e3a\\u7e67\\u7e5d\\u7e56\\u7e5e\\u7e59\\u7e5a\\u7e79\\u7e6a\\u7e69\\u7e7c\\u7e7b\\u7e83\\u7dd5\\u7e7d\\u8fae\\u7e7f\\u7e88\\u7e89\\u7e8c\\u7e92\\u7e90\\u7e93\\u7e94\\u7e96\\u7e8e\\u7e9b\\u7e9c\\u7f38\\u7f3a\\u7f45\\u7f4c\\u7f4d\\u7f4e\\u7f50\\u7f51\\u7f55\\u7f54\\u7f58\\u7f5f\\u7f60\\u7f68\\u7f69\\u7f67\\u7f78\\u7f82\\u7f86\\u7f83\\u7f88\\u7f87\\u7f8c\\u7f94\\u7f9e\\u7f9d\\u7f9a\\u7fa3\\u7faf\\u7fb2\\u7fb9\\u7fae\\u7fb6\\u7fb8\\u8b71\\u7fc5\\u7fc6\\u7fca\\u7fd5\\u7fd4\\u7fe1\\u7fe6\\u7fe9\\u7ff3\\u7ff9\\u98dc\\u8006\\u8004\\u800b\\u8012\\u8018\\u8019\\u801c\\u8021\\u8028\\u803f\\u803b\\u804a\\u8046\\u8052\\u8058\\u805a\\u805f\\u8062\\u8068\\u8073\\u8072\\u8070\\u8076\\u8079\\u807d\\u807f\\u8084\\u8086\\u8085\\u809b\\u8093\\u809a\\u80ad\\u5190\\u80ac\\u80db\\u80e5\\u80d9\\u80dd\\u80c4\\u80da\\u80d6\\u8109\\u80ef\\u80f1\\u811b\\u8129\\u8123\\u812f\\u814b\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[227].length;++e)65533!==r[227][e].charCodeAt(0)&&(n[r[227][e]]=58112+e,t[58112+e]=r[227][e]);for(r[228]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u968b\\u8146\\u813e\\u8153\\u8151\\u80fc\\u8171\\u816e\\u8165\\u8166\\u8174\\u8183\\u8188\\u818a\\u8180\\u8182\\u81a0\\u8195\\u81a4\\u81a3\\u815f\\u8193\\u81a9\\u81b0\\u81b5\\u81be\\u81b8\\u81bd\\u81c0\\u81c2\\u81ba\\u81c9\\u81cd\\u81d1\\u81d9\\u81d8\\u81c8\\u81da\\u81df\\u81e0\\u81e7\\u81fa\\u81fb\\u81fe\\u8201\\u8202\\u8205\\u8207\\u820a\\u820d\\u8210\\u8216\\u8229\\u822b\\u8238\\u8233\\u8240\\u8259\\u8258\\u825d\\u825a\\u825f\\u8264\\ufffd\\u8262\\u8268\\u826a\\u826b\\u822e\\u8271\\u8277\\u8278\\u827e\\u828d\\u8292\\u82ab\\u829f\\u82bb\\u82ac\\u82e1\\u82e3\\u82df\\u82d2\\u82f4\\u82f3\\u82fa\\u8393\\u8303\\u82fb\\u82f9\\u82de\\u8306\\u82dc\\u8309\\u82d9\\u8335\\u8334\\u8316\\u8332\\u8331\\u8340\\u8339\\u8350\\u8345\\u832f\\u832b\\u8317\\u8318\\u8385\\u839a\\u83aa\\u839f\\u83a2\\u8396\\u8323\\u838e\\u8387\\u838a\\u837c\\u83b5\\u8373\\u8375\\u83a0\\u8389\\u83a8\\u83f4\\u8413\\u83eb\\u83ce\\u83fd\\u8403\\u83d8\\u840b\\u83c1\\u83f7\\u8407\\u83e0\\u83f2\\u840d\\u8422\\u8420\\u83bd\\u8438\\u8506\\u83fb\\u846d\\u842a\\u843c\\u855a\\u8484\\u8477\\u846b\\u84ad\\u846e\\u8482\\u8469\\u8446\\u842c\\u846f\\u8479\\u8435\\u84ca\\u8462\\u84b9\\u84bf\\u849f\\u84d9\\u84cd\\u84bb\\u84da\\u84d0\\u84c1\\u84c6\\u84d6\\u84a1\\u8521\\u84ff\\u84f4\\u8517\\u8518\\u852c\\u851f\\u8515\\u8514\\u84fc\\u8540\\u8563\\u8558\\u8548\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[228].length;++e)65533!==r[228][e].charCodeAt(0)&&(n[r[228][e]]=58368+e,t[58368+e]=r[228][e]);for(r[229]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8541\\u8602\\u854b\\u8555\\u8580\\u85a4\\u8588\\u8591\\u858a\\u85a8\\u856d\\u8594\\u859b\\u85ea\\u8587\\u859c\\u8577\\u857e\\u8590\\u85c9\\u85ba\\u85cf\\u85b9\\u85d0\\u85d5\\u85dd\\u85e5\\u85dc\\u85f9\\u860a\\u8613\\u860b\\u85fe\\u85fa\\u8606\\u8622\\u861a\\u8630\\u863f\\u864d\\u4e55\\u8654\\u865f\\u8667\\u8671\\u8693\\u86a3\\u86a9\\u86aa\\u868b\\u868c\\u86b6\\u86af\\u86c4\\u86c6\\u86b0\\u86c9\\u8823\\u86ab\\u86d4\\u86de\\u86e9\\u86ec\\ufffd\\u86df\\u86db\\u86ef\\u8712\\u8706\\u8708\\u8700\\u8703\\u86fb\\u8711\\u8709\\u870d\\u86f9\\u870a\\u8734\\u873f\\u8737\\u873b\\u8725\\u8729\\u871a\\u8760\\u875f\\u8778\\u874c\\u874e\\u8774\\u8757\\u8768\\u876e\\u8759\\u8753\\u8763\\u876a\\u8805\\u87a2\\u879f\\u8782\\u87af\\u87cb\\u87bd\\u87c0\\u87d0\\u96d6\\u87ab\\u87c4\\u87b3\\u87c7\\u87c6\\u87bb\\u87ef\\u87f2\\u87e0\\u880f\\u880d\\u87fe\\u87f6\\u87f7\\u880e\\u87d2\\u8811\\u8816\\u8815\\u8822\\u8821\\u8831\\u8836\\u8839\\u8827\\u883b\\u8844\\u8842\\u8852\\u8859\\u885e\\u8862\\u886b\\u8881\\u887e\\u889e\\u8875\\u887d\\u88b5\\u8872\\u8882\\u8897\\u8892\\u88ae\\u8899\\u88a2\\u888d\\u88a4\\u88b0\\u88bf\\u88b1\\u88c3\\u88c4\\u88d4\\u88d8\\u88d9\\u88dd\\u88f9\\u8902\\u88fc\\u88f4\\u88e8\\u88f2\\u8904\\u890c\\u890a\\u8913\\u8943\\u891e\\u8925\\u892a\\u892b\\u8941\\u8944\\u893b\\u8936\\u8938\\u894c\\u891d\\u8960\\u895e\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[229].length;++e)65533!==r[229][e].charCodeAt(0)&&(n[r[229][e]]=58624+e,t[58624+e]=r[229][e]);for(r[230]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8966\\u8964\\u896d\\u896a\\u896f\\u8974\\u8977\\u897e\\u8983\\u8988\\u898a\\u8993\\u8998\\u89a1\\u89a9\\u89a6\\u89ac\\u89af\\u89b2\\u89ba\\u89bd\\u89bf\\u89c0\\u89da\\u89dc\\u89dd\\u89e7\\u89f4\\u89f8\\u8a03\\u8a16\\u8a10\\u8a0c\\u8a1b\\u8a1d\\u8a25\\u8a36\\u8a41\\u8a5b\\u8a52\\u8a46\\u8a48\\u8a7c\\u8a6d\\u8a6c\\u8a62\\u8a85\\u8a82\\u8a84\\u8aa8\\u8aa1\\u8a91\\u8aa5\\u8aa6\\u8a9a\\u8aa3\\u8ac4\\u8acd\\u8ac2\\u8ada\\u8aeb\\u8af3\\u8ae7\\ufffd\\u8ae4\\u8af1\\u8b14\\u8ae0\\u8ae2\\u8af7\\u8ade\\u8adb\\u8b0c\\u8b07\\u8b1a\\u8ae1\\u8b16\\u8b10\\u8b17\\u8b20\\u8b33\\u97ab\\u8b26\\u8b2b\\u8b3e\\u8b28\\u8b41\\u8b4c\\u8b4f\\u8b4e\\u8b49\\u8b56\\u8b5b\\u8b5a\\u8b6b\\u8b5f\\u8b6c\\u8b6f\\u8b74\\u8b7d\\u8b80\\u8b8c\\u8b8e\\u8b92\\u8b93\\u8b96\\u8b99\\u8b9a\\u8c3a\\u8c41\\u8c3f\\u8c48\\u8c4c\\u8c4e\\u8c50\\u8c55\\u8c62\\u8c6c\\u8c78\\u8c7a\\u8c82\\u8c89\\u8c85\\u8c8a\\u8c8d\\u8c8e\\u8c94\\u8c7c\\u8c98\\u621d\\u8cad\\u8caa\\u8cbd\\u8cb2\\u8cb3\\u8cae\\u8cb6\\u8cc8\\u8cc1\\u8ce4\\u8ce3\\u8cda\\u8cfd\\u8cfa\\u8cfb\\u8d04\\u8d05\\u8d0a\\u8d07\\u8d0f\\u8d0d\\u8d10\\u9f4e\\u8d13\\u8ccd\\u8d14\\u8d16\\u8d67\\u8d6d\\u8d71\\u8d73\\u8d81\\u8d99\\u8dc2\\u8dbe\\u8dba\\u8dcf\\u8dda\\u8dd6\\u8dcc\\u8ddb\\u8dcb\\u8dea\\u8deb\\u8ddf\\u8de3\\u8dfc\\u8e08\\u8e09\\u8dff\\u8e1d\\u8e1e\\u8e10\\u8e1f\\u8e42\\u8e35\\u8e30\\u8e34\\u8e4a\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[230].length;++e)65533!==r[230][e].charCodeAt(0)&&(n[r[230][e]]=58880+e,t[58880+e]=r[230][e]);for(r[231]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8e47\\u8e49\\u8e4c\\u8e50\\u8e48\\u8e59\\u8e64\\u8e60\\u8e2a\\u8e63\\u8e55\\u8e76\\u8e72\\u8e7c\\u8e81\\u8e87\\u8e85\\u8e84\\u8e8b\\u8e8a\\u8e93\\u8e91\\u8e94\\u8e99\\u8eaa\\u8ea1\\u8eac\\u8eb0\\u8ec6\\u8eb1\\u8ebe\\u8ec5\\u8ec8\\u8ecb\\u8edb\\u8ee3\\u8efc\\u8efb\\u8eeb\\u8efe\\u8f0a\\u8f05\\u8f15\\u8f12\\u8f19\\u8f13\\u8f1c\\u8f1f\\u8f1b\\u8f0c\\u8f26\\u8f33\\u8f3b\\u8f39\\u8f45\\u8f42\\u8f3e\\u8f4c\\u8f49\\u8f46\\u8f4e\\u8f57\\u8f5c\\ufffd\\u8f62\\u8f63\\u8f64\\u8f9c\\u8f9f\\u8fa3\\u8fad\\u8faf\\u8fb7\\u8fda\\u8fe5\\u8fe2\\u8fea\\u8fef\\u9087\\u8ff4\\u9005\\u8ff9\\u8ffa\\u9011\\u9015\\u9021\\u900d\\u901e\\u9016\\u900b\\u9027\\u9036\\u9035\\u9039\\u8ff8\\u904f\\u9050\\u9051\\u9052\\u900e\\u9049\\u903e\\u9056\\u9058\\u905e\\u9068\\u906f\\u9076\\u96a8\\u9072\\u9082\\u907d\\u9081\\u9080\\u908a\\u9089\\u908f\\u90a8\\u90af\\u90b1\\u90b5\\u90e2\\u90e4\\u6248\\u90db\\u9102\\u9112\\u9119\\u9132\\u9130\\u914a\\u9156\\u9158\\u9163\\u9165\\u9169\\u9173\\u9172\\u918b\\u9189\\u9182\\u91a2\\u91ab\\u91af\\u91aa\\u91b5\\u91b4\\u91ba\\u91c0\\u91c1\\u91c9\\u91cb\\u91d0\\u91d6\\u91df\\u91e1\\u91db\\u91fc\\u91f5\\u91f6\\u921e\\u91ff\\u9214\\u922c\\u9215\\u9211\\u925e\\u9257\\u9245\\u9249\\u9264\\u9248\\u9295\\u923f\\u924b\\u9250\\u929c\\u9296\\u9293\\u929b\\u925a\\u92cf\\u92b9\\u92b7\\u92e9\\u930f\\u92fa\\u9344\\u932e\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[231].length;++e)65533!==r[231][e].charCodeAt(0)&&(n[r[231][e]]=59136+e,t[59136+e]=r[231][e]);for(r[232]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9319\\u9322\\u931a\\u9323\\u933a\\u9335\\u933b\\u935c\\u9360\\u937c\\u936e\\u9356\\u93b0\\u93ac\\u93ad\\u9394\\u93b9\\u93d6\\u93d7\\u93e8\\u93e5\\u93d8\\u93c3\\u93dd\\u93d0\\u93c8\\u93e4\\u941a\\u9414\\u9413\\u9403\\u9407\\u9410\\u9436\\u942b\\u9435\\u9421\\u943a\\u9441\\u9452\\u9444\\u945b\\u9460\\u9462\\u945e\\u946a\\u9229\\u9470\\u9475\\u9477\\u947d\\u945a\\u947c\\u947e\\u9481\\u947f\\u9582\\u9587\\u958a\\u9594\\u9596\\u9598\\u9599\\ufffd\\u95a0\\u95a8\\u95a7\\u95ad\\u95bc\\u95bb\\u95b9\\u95be\\u95ca\\u6ff6\\u95c3\\u95cd\\u95cc\\u95d5\\u95d4\\u95d6\\u95dc\\u95e1\\u95e5\\u95e2\\u9621\\u9628\\u962e\\u962f\\u9642\\u964c\\u964f\\u964b\\u9677\\u965c\\u965e\\u965d\\u965f\\u9666\\u9672\\u966c\\u968d\\u9698\\u9695\\u9697\\u96aa\\u96a7\\u96b1\\u96b2\\u96b0\\u96b4\\u96b6\\u96b8\\u96b9\\u96ce\\u96cb\\u96c9\\u96cd\\u894d\\u96dc\\u970d\\u96d5\\u96f9\\u9704\\u9706\\u9708\\u9713\\u970e\\u9711\\u970f\\u9716\\u9719\\u9724\\u972a\\u9730\\u9739\\u973d\\u973e\\u9744\\u9746\\u9748\\u9742\\u9749\\u975c\\u9760\\u9764\\u9766\\u9768\\u52d2\\u976b\\u9771\\u9779\\u9785\\u977c\\u9781\\u977a\\u9786\\u978b\\u978f\\u9790\\u979c\\u97a8\\u97a6\\u97a3\\u97b3\\u97b4\\u97c3\\u97c6\\u97c8\\u97cb\\u97dc\\u97ed\\u9f4f\\u97f2\\u7adf\\u97f6\\u97f5\\u980f\\u980c\\u9838\\u9824\\u9821\\u9837\\u983d\\u9846\\u984f\\u984b\\u986b\\u986f\\u9870\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[232].length;++e)65533!==r[232][e].charCodeAt(0)&&(n[r[232][e]]=59392+e,t[59392+e]=r[232][e]);for(r[233]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9871\\u9874\\u9873\\u98aa\\u98af\\u98b1\\u98b6\\u98c4\\u98c3\\u98c6\\u98e9\\u98eb\\u9903\\u9909\\u9912\\u9914\\u9918\\u9921\\u991d\\u991e\\u9924\\u9920\\u992c\\u992e\\u993d\\u993e\\u9942\\u9949\\u9945\\u9950\\u994b\\u9951\\u9952\\u994c\\u9955\\u9997\\u9998\\u99a5\\u99ad\\u99ae\\u99bc\\u99df\\u99db\\u99dd\\u99d8\\u99d1\\u99ed\\u99ee\\u99f1\\u99f2\\u99fb\\u99f8\\u9a01\\u9a0f\\u9a05\\u99e2\\u9a19\\u9a2b\\u9a37\\u9a45\\u9a42\\u9a40\\u9a43\\ufffd\\u9a3e\\u9a55\\u9a4d\\u9a5b\\u9a57\\u9a5f\\u9a62\\u9a65\\u9a64\\u9a69\\u9a6b\\u9a6a\\u9aad\\u9ab0\\u9abc\\u9ac0\\u9acf\\u9ad1\\u9ad3\\u9ad4\\u9ade\\u9adf\\u9ae2\\u9ae3\\u9ae6\\u9aef\\u9aeb\\u9aee\\u9af4\\u9af1\\u9af7\\u9afb\\u9b06\\u9b18\\u9b1a\\u9b1f\\u9b22\\u9b23\\u9b25\\u9b27\\u9b28\\u9b29\\u9b2a\\u9b2e\\u9b2f\\u9b32\\u9b44\\u9b43\\u9b4f\\u9b4d\\u9b4e\\u9b51\\u9b58\\u9b74\\u9b93\\u9b83\\u9b91\\u9b96\\u9b97\\u9b9f\\u9ba0\\u9ba8\\u9bb4\\u9bc0\\u9bca\\u9bb9\\u9bc6\\u9bcf\\u9bd1\\u9bd2\\u9be3\\u9be2\\u9be4\\u9bd4\\u9be1\\u9c3a\\u9bf2\\u9bf1\\u9bf0\\u9c15\\u9c14\\u9c09\\u9c13\\u9c0c\\u9c06\\u9c08\\u9c12\\u9c0a\\u9c04\\u9c2e\\u9c1b\\u9c25\\u9c24\\u9c21\\u9c30\\u9c47\\u9c32\\u9c46\\u9c3e\\u9c5a\\u9c60\\u9c67\\u9c76\\u9c78\\u9ce7\\u9cec\\u9cf0\\u9d09\\u9d08\\u9ceb\\u9d03\\u9d06\\u9d2a\\u9d26\\u9daf\\u9d23\\u9d1f\\u9d44\\u9d15\\u9d12\\u9d41\\u9d3f\\u9d3e\\u9d46\\u9d48\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[233].length;++e)65533!==r[233][e].charCodeAt(0)&&(n[r[233][e]]=59648+e,t[59648+e]=r[233][e]);for(r[234]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9d5d\\u9d5e\\u9d64\\u9d51\\u9d50\\u9d59\\u9d72\\u9d89\\u9d87\\u9dab\\u9d6f\\u9d7a\\u9d9a\\u9da4\\u9da9\\u9db2\\u9dc4\\u9dc1\\u9dbb\\u9db8\\u9dba\\u9dc6\\u9dcf\\u9dc2\\u9dd9\\u9dd3\\u9df8\\u9de6\\u9ded\\u9def\\u9dfd\\u9e1a\\u9e1b\\u9e1e\\u9e75\\u9e79\\u9e7d\\u9e81\\u9e88\\u9e8b\\u9e8c\\u9e92\\u9e95\\u9e91\\u9e9d\\u9ea5\\u9ea9\\u9eb8\\u9eaa\\u9ead\\u9761\\u9ecc\\u9ece\\u9ecf\\u9ed0\\u9ed4\\u9edc\\u9ede\\u9edd\\u9ee0\\u9ee5\\u9ee8\\u9eef\\ufffd\\u9ef4\\u9ef6\\u9ef7\\u9ef9\\u9efb\\u9efc\\u9efd\\u9f07\\u9f08\\u76b7\\u9f15\\u9f21\\u9f2c\\u9f3e\\u9f4a\\u9f52\\u9f54\\u9f63\\u9f5f\\u9f60\\u9f61\\u9f66\\u9f67\\u9f6c\\u9f6a\\u9f77\\u9f72\\u9f76\\u9f95\\u9f9c\\u9fa0\\u582f\\u69c7\\u9059\\u7464\\u51dc\\u7199\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[234].length;++e)65533!==r[234][e].charCodeAt(0)&&(n[r[234][e]]=59904+e,t[59904+e]=r[234][e]);for(r[237]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7e8a\\u891c\\u9348\\u9288\\u84dc\\u4fc9\\u70bb\\u6631\\u68c8\\u92f9\\u66fb\\u5f45\\u4e28\\u4ee1\\u4efc\\u4f00\\u4f03\\u4f39\\u4f56\\u4f92\\u4f8a\\u4f9a\\u4f94\\u4fcd\\u5040\\u5022\\u4fff\\u501e\\u5046\\u5070\\u5042\\u5094\\u50f4\\u50d8\\u514a\\u5164\\u519d\\u51be\\u51ec\\u5215\\u529c\\u52a6\\u52c0\\u52db\\u5300\\u5307\\u5324\\u5372\\u5393\\u53b2\\u53dd\\ufa0e\\u549c\\u548a\\u54a9\\u54ff\\u5586\\u5759\\u5765\\u57ac\\u57c8\\u57c7\\ufa0f\\ufffd\\ufa10\\u589e\\u58b2\\u590b\\u5953\\u595b\\u595d\\u5963\\u59a4\\u59ba\\u5b56\\u5bc0\\u752f\\u5bd8\\u5bec\\u5c1e\\u5ca6\\u5cba\\u5cf5\\u5d27\\u5d53\\ufa11\\u5d42\\u5d6d\\u5db8\\u5db9\\u5dd0\\u5f21\\u5f34\\u5f67\\u5fb7\\u5fde\\u605d\\u6085\\u608a\\u60de\\u60d5\\u6120\\u60f2\\u6111\\u6137\\u6130\\u6198\\u6213\\u62a6\\u63f5\\u6460\\u649d\\u64ce\\u654e\\u6600\\u6615\\u663b\\u6609\\u662e\\u661e\\u6624\\u6665\\u6657\\u6659\\ufa12\\u6673\\u6699\\u66a0\\u66b2\\u66bf\\u66fa\\u670e\\uf929\\u6766\\u67bb\\u6852\\u67c0\\u6801\\u6844\\u68cf\\ufa13\\u6968\\ufa14\\u6998\\u69e2\\u6a30\\u6a6b\\u6a46\\u6a73\\u6a7e\\u6ae2\\u6ae4\\u6bd6\\u6c3f\\u6c5c\\u6c86\\u6c6f\\u6cda\\u6d04\\u6d87\\u6d6f\\u6d96\\u6dac\\u6dcf\\u6df8\\u6df2\\u6dfc\\u6e39\\u6e5c\\u6e27\\u6e3c\\u6ebf\\u6f88\\u6fb5\\u6ff5\\u7005\\u7007\\u7028\\u7085\\u70ab\\u710f\\u7104\\u715c\\u7146\\u7147\\ufa15\\u71c1\\u71fe\\u72b1\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[237].length;++e)65533!==r[237][e].charCodeAt(0)&&(n[r[237][e]]=60672+e,t[60672+e]=r[237][e]);for(r[238]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u72be\\u7324\\ufa16\\u7377\\u73bd\\u73c9\\u73d6\\u73e3\\u73d2\\u7407\\u73f5\\u7426\\u742a\\u7429\\u742e\\u7462\\u7489\\u749f\\u7501\\u756f\\u7682\\u769c\\u769e\\u769b\\u76a6\\ufa17\\u7746\\u52af\\u7821\\u784e\\u7864\\u787a\\u7930\\ufa18\\ufa19\\ufa1a\\u7994\\ufa1b\\u799b\\u7ad1\\u7ae7\\ufa1c\\u7aeb\\u7b9e\\ufa1d\\u7d48\\u7d5c\\u7db7\\u7da0\\u7dd6\\u7e52\\u7f47\\u7fa1\\ufa1e\\u8301\\u8362\\u837f\\u83c7\\u83f6\\u8448\\u84b4\\u8553\\u8559\\ufffd\\u856b\\ufa1f\\u85b0\\ufa20\\ufa21\\u8807\\u88f5\\u8a12\\u8a37\\u8a79\\u8aa7\\u8abe\\u8adf\\ufa22\\u8af6\\u8b53\\u8b7f\\u8cf0\\u8cf4\\u8d12\\u8d76\\ufa23\\u8ecf\\ufa24\\ufa25\\u9067\\u90de\\ufa26\\u9115\\u9127\\u91da\\u91d7\\u91de\\u91ed\\u91ee\\u91e4\\u91e5\\u9206\\u9210\\u920a\\u923a\\u9240\\u923c\\u924e\\u9259\\u9251\\u9239\\u9267\\u92a7\\u9277\\u9278\\u92e7\\u92d7\\u92d9\\u92d0\\ufa27\\u92d5\\u92e0\\u92d3\\u9325\\u9321\\u92fb\\ufa28\\u931e\\u92ff\\u931d\\u9302\\u9370\\u9357\\u93a4\\u93c6\\u93de\\u93f8\\u9431\\u9445\\u9448\\u9592\\uf9dc\\ufa29\\u969d\\u96af\\u9733\\u973b\\u9743\\u974d\\u974f\\u9751\\u9755\\u9857\\u9865\\ufa2a\\ufa2b\\u9927\\ufa2c\\u999e\\u9a4e\\u9ad9\\u9adc\\u9b75\\u9b72\\u9b8f\\u9bb1\\u9bbb\\u9c00\\u9d70\\u9d6b\\ufa2d\\u9e19\\u9ed1\\ufffd\\ufffd\\u2170\\u2171\\u2172\\u2173\\u2174\\u2175\\u2176\\u2177\\u2178\\u2179\\uffe2\\uffe4\\uff07\\uff02\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[238].length;++e)65533!==r[238][e].charCodeAt(0)&&(n[r[238][e]]=60928+e,t[60928+e]=r[238][e]);for(r[250]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u2170\\u2171\\u2172\\u2173\\u2174\\u2175\\u2176\\u2177\\u2178\\u2179\\u2160\\u2161\\u2162\\u2163\\u2164\\u2165\\u2166\\u2167\\u2168\\u2169\\uffe2\\uffe4\\uff07\\uff02\\u3231\\u2116\\u2121\\u2235\\u7e8a\\u891c\\u9348\\u9288\\u84dc\\u4fc9\\u70bb\\u6631\\u68c8\\u92f9\\u66fb\\u5f45\\u4e28\\u4ee1\\u4efc\\u4f00\\u4f03\\u4f39\\u4f56\\u4f92\\u4f8a\\u4f9a\\u4f94\\u4fcd\\u5040\\u5022\\u4fff\\u501e\\u5046\\u5070\\u5042\\u5094\\u50f4\\u50d8\\u514a\\ufffd\\u5164\\u519d\\u51be\\u51ec\\u5215\\u529c\\u52a6\\u52c0\\u52db\\u5300\\u5307\\u5324\\u5372\\u5393\\u53b2\\u53dd\\ufa0e\\u549c\\u548a\\u54a9\\u54ff\\u5586\\u5759\\u5765\\u57ac\\u57c8\\u57c7\\ufa0f\\ufa10\\u589e\\u58b2\\u590b\\u5953\\u595b\\u595d\\u5963\\u59a4\\u59ba\\u5b56\\u5bc0\\u752f\\u5bd8\\u5bec\\u5c1e\\u5ca6\\u5cba\\u5cf5\\u5d27\\u5d53\\ufa11\\u5d42\\u5d6d\\u5db8\\u5db9\\u5dd0\\u5f21\\u5f34\\u5f67\\u5fb7\\u5fde\\u605d\\u6085\\u608a\\u60de\\u60d5\\u6120\\u60f2\\u6111\\u6137\\u6130\\u6198\\u6213\\u62a6\\u63f5\\u6460\\u649d\\u64ce\\u654e\\u6600\\u6615\\u663b\\u6609\\u662e\\u661e\\u6624\\u6665\\u6657\\u6659\\ufa12\\u6673\\u6699\\u66a0\\u66b2\\u66bf\\u66fa\\u670e\\uf929\\u6766\\u67bb\\u6852\\u67c0\\u6801\\u6844\\u68cf\\ufa13\\u6968\\ufa14\\u6998\\u69e2\\u6a30\\u6a6b\\u6a46\\u6a73\\u6a7e\\u6ae2\\u6ae4\\u6bd6\\u6c3f\\u6c5c\\u6c86\\u6c6f\\u6cda\\u6d04\\u6d87\\u6d6f\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[250].length;++e)65533!==r[250][e].charCodeAt(0)&&(n[r[250][e]]=64e3+e,t[64e3+e]=r[250][e]);for(r[251]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6d96\\u6dac\\u6dcf\\u6df8\\u6df2\\u6dfc\\u6e39\\u6e5c\\u6e27\\u6e3c\\u6ebf\\u6f88\\u6fb5\\u6ff5\\u7005\\u7007\\u7028\\u7085\\u70ab\\u710f\\u7104\\u715c\\u7146\\u7147\\ufa15\\u71c1\\u71fe\\u72b1\\u72be\\u7324\\ufa16\\u7377\\u73bd\\u73c9\\u73d6\\u73e3\\u73d2\\u7407\\u73f5\\u7426\\u742a\\u7429\\u742e\\u7462\\u7489\\u749f\\u7501\\u756f\\u7682\\u769c\\u769e\\u769b\\u76a6\\ufa17\\u7746\\u52af\\u7821\\u784e\\u7864\\u787a\\u7930\\ufa18\\ufa19\\ufffd\\ufa1a\\u7994\\ufa1b\\u799b\\u7ad1\\u7ae7\\ufa1c\\u7aeb\\u7b9e\\ufa1d\\u7d48\\u7d5c\\u7db7\\u7da0\\u7dd6\\u7e52\\u7f47\\u7fa1\\ufa1e\\u8301\\u8362\\u837f\\u83c7\\u83f6\\u8448\\u84b4\\u8553\\u8559\\u856b\\ufa1f\\u85b0\\ufa20\\ufa21\\u8807\\u88f5\\u8a12\\u8a37\\u8a79\\u8aa7\\u8abe\\u8adf\\ufa22\\u8af6\\u8b53\\u8b7f\\u8cf0\\u8cf4\\u8d12\\u8d76\\ufa23\\u8ecf\\ufa24\\ufa25\\u9067\\u90de\\ufa26\\u9115\\u9127\\u91da\\u91d7\\u91de\\u91ed\\u91ee\\u91e4\\u91e5\\u9206\\u9210\\u920a\\u923a\\u9240\\u923c\\u924e\\u9259\\u9251\\u9239\\u9267\\u92a7\\u9277\\u9278\\u92e7\\u92d7\\u92d9\\u92d0\\ufa27\\u92d5\\u92e0\\u92d3\\u9325\\u9321\\u92fb\\ufa28\\u931e\\u92ff\\u931d\\u9302\\u9370\\u9357\\u93a4\\u93c6\\u93de\\u93f8\\u9431\\u9445\\u9448\\u9592\\uf9dc\\ufa29\\u969d\\u96af\\u9733\\u973b\\u9743\\u974d\\u974f\\u9751\\u9755\\u9857\\u9865\\ufa2a\\ufa2b\\u9927\\ufa2c\\u999e\\u9a4e\\u9ad9\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[251].length;++e)65533!==r[251][e].charCodeAt(0)&&(n[r[251][e]]=64256+e,t[64256+e]=r[251][e]);for(r[252]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9adc\\u9b75\\u9b72\\u9b8f\\u9bb1\\u9bbb\\u9c00\\u9d70\\u9d6b\\ufa2d\\u9e19\\u9ed1\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[252].length;++e)65533!==r[252][e].charCodeAt(0)&&(n[r[252][e]]=64512+e,t[64512+e]=r[252][e]);return{enc:n,dec:t}}(),r[936]=function(){var e,t=[],n={},r=[];for(r[0]=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\u20ac\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[0].length;++e)65533!==r[0][e].charCodeAt(0)&&(n[r[0][e]]=0+e,t[0+e]=r[0][e]);for(r[129]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u4e02\\u4e04\\u4e05\\u4e06\\u4e0f\\u4e12\\u4e17\\u4e1f\\u4e20\\u4e21\\u4e23\\u4e26\\u4e29\\u4e2e\\u4e2f\\u4e31\\u4e33\\u4e35\\u4e37\\u4e3c\\u4e40\\u4e41\\u4e42\\u4e44\\u4e46\\u4e4a\\u4e51\\u4e55\\u4e57\\u4e5a\\u4e5b\\u4e62\\u4e63\\u4e64\\u4e65\\u4e67\\u4e68\\u4e6a\\u4e6b\\u4e6c\\u4e6d\\u4e6e\\u4e6f\\u4e72\\u4e74\\u4e75\\u4e76\\u4e77\\u4e78\\u4e79\\u4e7a\\u4e7b\\u4e7c\\u4e7d\\u4e7f\\u4e80\\u4e81\\u4e82\\u4e83\\u4e84\\u4e85\\u4e87\\u4e8a\\ufffd\\u4e90\\u4e96\\u4e97\\u4e99\\u4e9c\\u4e9d\\u4e9e\\u4ea3\\u4eaa\\u4eaf\\u4eb0\\u4eb1\\u4eb4\\u4eb6\\u4eb7\\u4eb8\\u4eb9\\u4ebc\\u4ebd\\u4ebe\\u4ec8\\u4ecc\\u4ecf\\u4ed0\\u4ed2\\u4eda\\u4edb\\u4edc\\u4ee0\\u4ee2\\u4ee6\\u4ee7\\u4ee9\\u4eed\\u4eee\\u4eef\\u4ef1\\u4ef4\\u4ef8\\u4ef9\\u4efa\\u4efc\\u4efe\\u4f00\\u4f02\\u4f03\\u4f04\\u4f05\\u4f06\\u4f07\\u4f08\\u4f0b\\u4f0c\\u4f12\\u4f13\\u4f14\\u4f15\\u4f16\\u4f1c\\u4f1d\\u4f21\\u4f23\\u4f28\\u4f29\\u4f2c\\u4f2d\\u4f2e\\u4f31\\u4f33\\u4f35\\u4f37\\u4f39\\u4f3b\\u4f3e\\u4f3f\\u4f40\\u4f41\\u4f42\\u4f44\\u4f45\\u4f47\\u4f48\\u4f49\\u4f4a\\u4f4b\\u4f4c\\u4f52\\u4f54\\u4f56\\u4f61\\u4f62\\u4f66\\u4f68\\u4f6a\\u4f6b\\u4f6d\\u4f6e\\u4f71\\u4f72\\u4f75\\u4f77\\u4f78\\u4f79\\u4f7a\\u4f7d\\u4f80\\u4f81\\u4f82\\u4f85\\u4f86\\u4f87\\u4f8a\\u4f8c\\u4f8e\\u4f90\\u4f92\\u4f93\\u4f95\\u4f96\\u4f98\\u4f99\\u4f9a\\u4f9c\\u4f9e\\u4f9f\\u4fa1\\u4fa2\\ufffd\".split(\"\"),e=0;e!=r[129].length;++e)65533!==r[129][e].charCodeAt(0)&&(n[r[129][e]]=33024+e,t[33024+e]=r[129][e]);for(r[130]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u4fa4\\u4fab\\u4fad\\u4fb0\\u4fb1\\u4fb2\\u4fb3\\u4fb4\\u4fb6\\u4fb7\\u4fb8\\u4fb9\\u4fba\\u4fbb\\u4fbc\\u4fbd\\u4fbe\\u4fc0\\u4fc1\\u4fc2\\u4fc6\\u4fc7\\u4fc8\\u4fc9\\u4fcb\\u4fcc\\u4fcd\\u4fd2\\u4fd3\\u4fd4\\u4fd5\\u4fd6\\u4fd9\\u4fdb\\u4fe0\\u4fe2\\u4fe4\\u4fe5\\u4fe7\\u4feb\\u4fec\\u4ff0\\u4ff2\\u4ff4\\u4ff5\\u4ff6\\u4ff7\\u4ff9\\u4ffb\\u4ffc\\u4ffd\\u4fff\\u5000\\u5001\\u5002\\u5003\\u5004\\u5005\\u5006\\u5007\\u5008\\u5009\\u500a\\ufffd\\u500b\\u500e\\u5010\\u5011\\u5013\\u5015\\u5016\\u5017\\u501b\\u501d\\u501e\\u5020\\u5022\\u5023\\u5024\\u5027\\u502b\\u502f\\u5030\\u5031\\u5032\\u5033\\u5034\\u5035\\u5036\\u5037\\u5038\\u5039\\u503b\\u503d\\u503f\\u5040\\u5041\\u5042\\u5044\\u5045\\u5046\\u5049\\u504a\\u504b\\u504d\\u5050\\u5051\\u5052\\u5053\\u5054\\u5056\\u5057\\u5058\\u5059\\u505b\\u505d\\u505e\\u505f\\u5060\\u5061\\u5062\\u5063\\u5064\\u5066\\u5067\\u5068\\u5069\\u506a\\u506b\\u506d\\u506e\\u506f\\u5070\\u5071\\u5072\\u5073\\u5074\\u5075\\u5078\\u5079\\u507a\\u507c\\u507d\\u5081\\u5082\\u5083\\u5084\\u5086\\u5087\\u5089\\u508a\\u508b\\u508c\\u508e\\u508f\\u5090\\u5091\\u5092\\u5093\\u5094\\u5095\\u5096\\u5097\\u5098\\u5099\\u509a\\u509b\\u509c\\u509d\\u509e\\u509f\\u50a0\\u50a1\\u50a2\\u50a4\\u50a6\\u50aa\\u50ab\\u50ad\\u50ae\\u50af\\u50b0\\u50b1\\u50b3\\u50b4\\u50b5\\u50b6\\u50b7\\u50b8\\u50b9\\u50bc\\ufffd\".split(\"\"),e=0;e!=r[130].length;++e)65533!==r[130][e].charCodeAt(0)&&(n[r[130][e]]=33280+e,t[33280+e]=r[130][e]);for(r[131]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u50bd\\u50be\\u50bf\\u50c0\\u50c1\\u50c2\\u50c3\\u50c4\\u50c5\\u50c6\\u50c7\\u50c8\\u50c9\\u50ca\\u50cb\\u50cc\\u50cd\\u50ce\\u50d0\\u50d1\\u50d2\\u50d3\\u50d4\\u50d5\\u50d7\\u50d8\\u50d9\\u50db\\u50dc\\u50dd\\u50de\\u50df\\u50e0\\u50e1\\u50e2\\u50e3\\u50e4\\u50e5\\u50e8\\u50e9\\u50ea\\u50eb\\u50ef\\u50f0\\u50f1\\u50f2\\u50f4\\u50f6\\u50f7\\u50f8\\u50f9\\u50fa\\u50fc\\u50fd\\u50fe\\u50ff\\u5100\\u5101\\u5102\\u5103\\u5104\\u5105\\u5108\\ufffd\\u5109\\u510a\\u510c\\u510d\\u510e\\u510f\\u5110\\u5111\\u5113\\u5114\\u5115\\u5116\\u5117\\u5118\\u5119\\u511a\\u511b\\u511c\\u511d\\u511e\\u511f\\u5120\\u5122\\u5123\\u5124\\u5125\\u5126\\u5127\\u5128\\u5129\\u512a\\u512b\\u512c\\u512d\\u512e\\u512f\\u5130\\u5131\\u5132\\u5133\\u5134\\u5135\\u5136\\u5137\\u5138\\u5139\\u513a\\u513b\\u513c\\u513d\\u513e\\u5142\\u5147\\u514a\\u514c\\u514e\\u514f\\u5150\\u5152\\u5153\\u5157\\u5158\\u5159\\u515b\\u515d\\u515e\\u515f\\u5160\\u5161\\u5163\\u5164\\u5166\\u5167\\u5169\\u516a\\u516f\\u5172\\u517a\\u517e\\u517f\\u5183\\u5184\\u5186\\u5187\\u518a\\u518b\\u518e\\u518f\\u5190\\u5191\\u5193\\u5194\\u5198\\u519a\\u519d\\u519e\\u519f\\u51a1\\u51a3\\u51a6\\u51a7\\u51a8\\u51a9\\u51aa\\u51ad\\u51ae\\u51b4\\u51b8\\u51b9\\u51ba\\u51be\\u51bf\\u51c1\\u51c2\\u51c3\\u51c5\\u51c8\\u51ca\\u51cd\\u51ce\\u51d0\\u51d2\\u51d3\\u51d4\\u51d5\\u51d6\\u51d7\\ufffd\".split(\"\"),e=0;e!=r[131].length;++e)65533!==r[131][e].charCodeAt(0)&&(n[r[131][e]]=33536+e,t[33536+e]=r[131][e]);for(r[132]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u51d8\\u51d9\\u51da\\u51dc\\u51de\\u51df\\u51e2\\u51e3\\u51e5\\u51e6\\u51e7\\u51e8\\u51e9\\u51ea\\u51ec\\u51ee\\u51f1\\u51f2\\u51f4\\u51f7\\u51fe\\u5204\\u5205\\u5209\\u520b\\u520c\\u520f\\u5210\\u5213\\u5214\\u5215\\u521c\\u521e\\u521f\\u5221\\u5222\\u5223\\u5225\\u5226\\u5227\\u522a\\u522c\\u522f\\u5231\\u5232\\u5234\\u5235\\u523c\\u523e\\u5244\\u5245\\u5246\\u5247\\u5248\\u5249\\u524b\\u524e\\u524f\\u5252\\u5253\\u5255\\u5257\\u5258\\ufffd\\u5259\\u525a\\u525b\\u525d\\u525f\\u5260\\u5262\\u5263\\u5264\\u5266\\u5268\\u526b\\u526c\\u526d\\u526e\\u5270\\u5271\\u5273\\u5274\\u5275\\u5276\\u5277\\u5278\\u5279\\u527a\\u527b\\u527c\\u527e\\u5280\\u5283\\u5284\\u5285\\u5286\\u5287\\u5289\\u528a\\u528b\\u528c\\u528d\\u528e\\u528f\\u5291\\u5292\\u5294\\u5295\\u5296\\u5297\\u5298\\u5299\\u529a\\u529c\\u52a4\\u52a5\\u52a6\\u52a7\\u52ae\\u52af\\u52b0\\u52b4\\u52b5\\u52b6\\u52b7\\u52b8\\u52b9\\u52ba\\u52bb\\u52bc\\u52bd\\u52c0\\u52c1\\u52c2\\u52c4\\u52c5\\u52c6\\u52c8\\u52ca\\u52cc\\u52cd\\u52ce\\u52cf\\u52d1\\u52d3\\u52d4\\u52d5\\u52d7\\u52d9\\u52da\\u52db\\u52dc\\u52dd\\u52de\\u52e0\\u52e1\\u52e2\\u52e3\\u52e5\\u52e6\\u52e7\\u52e8\\u52e9\\u52ea\\u52eb\\u52ec\\u52ed\\u52ee\\u52ef\\u52f1\\u52f2\\u52f3\\u52f4\\u52f5\\u52f6\\u52f7\\u52f8\\u52fb\\u52fc\\u52fd\\u5301\\u5302\\u5303\\u5304\\u5307\\u5309\\u530a\\u530b\\u530c\\u530e\\ufffd\".split(\"\"),e=0;e!=r[132].length;++e)65533!==r[132][e].charCodeAt(0)&&(n[r[132][e]]=33792+e,t[33792+e]=r[132][e]);for(r[133]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5311\\u5312\\u5313\\u5314\\u5318\\u531b\\u531c\\u531e\\u531f\\u5322\\u5324\\u5325\\u5327\\u5328\\u5329\\u532b\\u532c\\u532d\\u532f\\u5330\\u5331\\u5332\\u5333\\u5334\\u5335\\u5336\\u5337\\u5338\\u533c\\u533d\\u5340\\u5342\\u5344\\u5346\\u534b\\u534c\\u534d\\u5350\\u5354\\u5358\\u5359\\u535b\\u535d\\u5365\\u5368\\u536a\\u536c\\u536d\\u5372\\u5376\\u5379\\u537b\\u537c\\u537d\\u537e\\u5380\\u5381\\u5383\\u5387\\u5388\\u538a\\u538e\\u538f\\ufffd\\u5390\\u5391\\u5392\\u5393\\u5394\\u5396\\u5397\\u5399\\u539b\\u539c\\u539e\\u53a0\\u53a1\\u53a4\\u53a7\\u53aa\\u53ab\\u53ac\\u53ad\\u53af\\u53b0\\u53b1\\u53b2\\u53b3\\u53b4\\u53b5\\u53b7\\u53b8\\u53b9\\u53ba\\u53bc\\u53bd\\u53be\\u53c0\\u53c3\\u53c4\\u53c5\\u53c6\\u53c7\\u53ce\\u53cf\\u53d0\\u53d2\\u53d3\\u53d5\\u53da\\u53dc\\u53dd\\u53de\\u53e1\\u53e2\\u53e7\\u53f4\\u53fa\\u53fe\\u53ff\\u5400\\u5402\\u5405\\u5407\\u540b\\u5414\\u5418\\u5419\\u541a\\u541c\\u5422\\u5424\\u5425\\u542a\\u5430\\u5433\\u5436\\u5437\\u543a\\u543d\\u543f\\u5441\\u5442\\u5444\\u5445\\u5447\\u5449\\u544c\\u544d\\u544e\\u544f\\u5451\\u545a\\u545d\\u545e\\u545f\\u5460\\u5461\\u5463\\u5465\\u5467\\u5469\\u546a\\u546b\\u546c\\u546d\\u546e\\u546f\\u5470\\u5474\\u5479\\u547a\\u547e\\u547f\\u5481\\u5483\\u5485\\u5487\\u5488\\u5489\\u548a\\u548d\\u5491\\u5493\\u5497\\u5498\\u549c\\u549e\\u549f\\u54a0\\u54a1\\ufffd\".split(\"\"),e=0;e!=r[133].length;++e)65533!==r[133][e].charCodeAt(0)&&(n[r[133][e]]=34048+e,t[34048+e]=r[133][e]);for(r[134]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u54a2\\u54a5\\u54ae\\u54b0\\u54b2\\u54b5\\u54b6\\u54b7\\u54b9\\u54ba\\u54bc\\u54be\\u54c3\\u54c5\\u54ca\\u54cb\\u54d6\\u54d8\\u54db\\u54e0\\u54e1\\u54e2\\u54e3\\u54e4\\u54eb\\u54ec\\u54ef\\u54f0\\u54f1\\u54f4\\u54f5\\u54f6\\u54f7\\u54f8\\u54f9\\u54fb\\u54fe\\u5500\\u5502\\u5503\\u5504\\u5505\\u5508\\u550a\\u550b\\u550c\\u550d\\u550e\\u5512\\u5513\\u5515\\u5516\\u5517\\u5518\\u5519\\u551a\\u551c\\u551d\\u551e\\u551f\\u5521\\u5525\\u5526\\ufffd\\u5528\\u5529\\u552b\\u552d\\u5532\\u5534\\u5535\\u5536\\u5538\\u5539\\u553a\\u553b\\u553d\\u5540\\u5542\\u5545\\u5547\\u5548\\u554b\\u554c\\u554d\\u554e\\u554f\\u5551\\u5552\\u5553\\u5554\\u5557\\u5558\\u5559\\u555a\\u555b\\u555d\\u555e\\u555f\\u5560\\u5562\\u5563\\u5568\\u5569\\u556b\\u556f\\u5570\\u5571\\u5572\\u5573\\u5574\\u5579\\u557a\\u557d\\u557f\\u5585\\u5586\\u558c\\u558d\\u558e\\u5590\\u5592\\u5593\\u5595\\u5596\\u5597\\u559a\\u559b\\u559e\\u55a0\\u55a1\\u55a2\\u55a3\\u55a4\\u55a5\\u55a6\\u55a8\\u55a9\\u55aa\\u55ab\\u55ac\\u55ad\\u55ae\\u55af\\u55b0\\u55b2\\u55b4\\u55b6\\u55b8\\u55ba\\u55bc\\u55bf\\u55c0\\u55c1\\u55c2\\u55c3\\u55c6\\u55c7\\u55c8\\u55ca\\u55cb\\u55ce\\u55cf\\u55d0\\u55d5\\u55d7\\u55d8\\u55d9\\u55da\\u55db\\u55de\\u55e0\\u55e2\\u55e7\\u55e9\\u55ed\\u55ee\\u55f0\\u55f1\\u55f4\\u55f6\\u55f8\\u55f9\\u55fa\\u55fb\\u55fc\\u55ff\\u5602\\u5603\\u5604\\u5605\\ufffd\".split(\"\"),e=0;e!=r[134].length;++e)65533!==r[134][e].charCodeAt(0)&&(n[r[134][e]]=34304+e,t[34304+e]=r[134][e]);for(r[135]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5606\\u5607\\u560a\\u560b\\u560d\\u5610\\u5611\\u5612\\u5613\\u5614\\u5615\\u5616\\u5617\\u5619\\u561a\\u561c\\u561d\\u5620\\u5621\\u5622\\u5625\\u5626\\u5628\\u5629\\u562a\\u562b\\u562e\\u562f\\u5630\\u5633\\u5635\\u5637\\u5638\\u563a\\u563c\\u563d\\u563e\\u5640\\u5641\\u5642\\u5643\\u5644\\u5645\\u5646\\u5647\\u5648\\u5649\\u564a\\u564b\\u564f\\u5650\\u5651\\u5652\\u5653\\u5655\\u5656\\u565a\\u565b\\u565d\\u565e\\u565f\\u5660\\u5661\\ufffd\\u5663\\u5665\\u5666\\u5667\\u566d\\u566e\\u566f\\u5670\\u5672\\u5673\\u5674\\u5675\\u5677\\u5678\\u5679\\u567a\\u567d\\u567e\\u567f\\u5680\\u5681\\u5682\\u5683\\u5684\\u5687\\u5688\\u5689\\u568a\\u568b\\u568c\\u568d\\u5690\\u5691\\u5692\\u5694\\u5695\\u5696\\u5697\\u5698\\u5699\\u569a\\u569b\\u569c\\u569d\\u569e\\u569f\\u56a0\\u56a1\\u56a2\\u56a4\\u56a5\\u56a6\\u56a7\\u56a8\\u56a9\\u56aa\\u56ab\\u56ac\\u56ad\\u56ae\\u56b0\\u56b1\\u56b2\\u56b3\\u56b4\\u56b5\\u56b6\\u56b8\\u56b9\\u56ba\\u56bb\\u56bd\\u56be\\u56bf\\u56c0\\u56c1\\u56c2\\u56c3\\u56c4\\u56c5\\u56c6\\u56c7\\u56c8\\u56c9\\u56cb\\u56cc\\u56cd\\u56ce\\u56cf\\u56d0\\u56d1\\u56d2\\u56d3\\u56d5\\u56d6\\u56d8\\u56d9\\u56dc\\u56e3\\u56e5\\u56e6\\u56e7\\u56e8\\u56e9\\u56ea\\u56ec\\u56ee\\u56ef\\u56f2\\u56f3\\u56f6\\u56f7\\u56f8\\u56fb\\u56fc\\u5700\\u5701\\u5702\\u5705\\u5707\\u570b\\u570c\\u570d\\u570e\\u570f\\u5710\\u5711\\ufffd\".split(\"\"),e=0;e!=r[135].length;++e)65533!==r[135][e].charCodeAt(0)&&(n[r[135][e]]=34560+e,t[34560+e]=r[135][e]);for(r[136]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5712\\u5713\\u5714\\u5715\\u5716\\u5717\\u5718\\u5719\\u571a\\u571b\\u571d\\u571e\\u5720\\u5721\\u5722\\u5724\\u5725\\u5726\\u5727\\u572b\\u5731\\u5732\\u5734\\u5735\\u5736\\u5737\\u5738\\u573c\\u573d\\u573f\\u5741\\u5743\\u5744\\u5745\\u5746\\u5748\\u5749\\u574b\\u5752\\u5753\\u5754\\u5755\\u5756\\u5758\\u5759\\u5762\\u5763\\u5765\\u5767\\u576c\\u576e\\u5770\\u5771\\u5772\\u5774\\u5775\\u5778\\u5779\\u577a\\u577d\\u577e\\u577f\\u5780\\ufffd\\u5781\\u5787\\u5788\\u5789\\u578a\\u578d\\u578e\\u578f\\u5790\\u5791\\u5794\\u5795\\u5796\\u5797\\u5798\\u5799\\u579a\\u579c\\u579d\\u579e\\u579f\\u57a5\\u57a8\\u57aa\\u57ac\\u57af\\u57b0\\u57b1\\u57b3\\u57b5\\u57b6\\u57b7\\u57b9\\u57ba\\u57bb\\u57bc\\u57bd\\u57be\\u57bf\\u57c0\\u57c1\\u57c4\\u57c5\\u57c6\\u57c7\\u57c8\\u57c9\\u57ca\\u57cc\\u57cd\\u57d0\\u57d1\\u57d3\\u57d6\\u57d7\\u57db\\u57dc\\u57de\\u57e1\\u57e2\\u57e3\\u57e5\\u57e6\\u57e7\\u57e8\\u57e9\\u57ea\\u57eb\\u57ec\\u57ee\\u57f0\\u57f1\\u57f2\\u57f3\\u57f5\\u57f6\\u57f7\\u57fb\\u57fc\\u57fe\\u57ff\\u5801\\u5803\\u5804\\u5805\\u5808\\u5809\\u580a\\u580c\\u580e\\u580f\\u5810\\u5812\\u5813\\u5814\\u5816\\u5817\\u5818\\u581a\\u581b\\u581c\\u581d\\u581f\\u5822\\u5823\\u5825\\u5826\\u5827\\u5828\\u5829\\u582b\\u582c\\u582d\\u582e\\u582f\\u5831\\u5832\\u5833\\u5834\\u5836\\u5837\\u5838\\u5839\\u583a\\u583b\\u583c\\u583d\\ufffd\".split(\"\"),e=0;e!=r[136].length;++e)65533!==r[136][e].charCodeAt(0)&&(n[r[136][e]]=34816+e,t[34816+e]=r[136][e]);for(r[137]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u583e\\u583f\\u5840\\u5841\\u5842\\u5843\\u5845\\u5846\\u5847\\u5848\\u5849\\u584a\\u584b\\u584e\\u584f\\u5850\\u5852\\u5853\\u5855\\u5856\\u5857\\u5859\\u585a\\u585b\\u585c\\u585d\\u585f\\u5860\\u5861\\u5862\\u5863\\u5864\\u5866\\u5867\\u5868\\u5869\\u586a\\u586d\\u586e\\u586f\\u5870\\u5871\\u5872\\u5873\\u5874\\u5875\\u5876\\u5877\\u5878\\u5879\\u587a\\u587b\\u587c\\u587d\\u587f\\u5882\\u5884\\u5886\\u5887\\u5888\\u588a\\u588b\\u588c\\ufffd\\u588d\\u588e\\u588f\\u5890\\u5891\\u5894\\u5895\\u5896\\u5897\\u5898\\u589b\\u589c\\u589d\\u58a0\\u58a1\\u58a2\\u58a3\\u58a4\\u58a5\\u58a6\\u58a7\\u58aa\\u58ab\\u58ac\\u58ad\\u58ae\\u58af\\u58b0\\u58b1\\u58b2\\u58b3\\u58b4\\u58b5\\u58b6\\u58b7\\u58b8\\u58b9\\u58ba\\u58bb\\u58bd\\u58be\\u58bf\\u58c0\\u58c2\\u58c3\\u58c4\\u58c6\\u58c7\\u58c8\\u58c9\\u58ca\\u58cb\\u58cc\\u58cd\\u58ce\\u58cf\\u58d0\\u58d2\\u58d3\\u58d4\\u58d6\\u58d7\\u58d8\\u58d9\\u58da\\u58db\\u58dc\\u58dd\\u58de\\u58df\\u58e0\\u58e1\\u58e2\\u58e3\\u58e5\\u58e6\\u58e7\\u58e8\\u58e9\\u58ea\\u58ed\\u58ef\\u58f1\\u58f2\\u58f4\\u58f5\\u58f7\\u58f8\\u58fa\\u58fb\\u58fc\\u58fd\\u58fe\\u58ff\\u5900\\u5901\\u5903\\u5905\\u5906\\u5908\\u5909\\u590a\\u590b\\u590c\\u590e\\u5910\\u5911\\u5912\\u5913\\u5917\\u5918\\u591b\\u591d\\u591e\\u5920\\u5921\\u5922\\u5923\\u5926\\u5928\\u592c\\u5930\\u5932\\u5933\\u5935\\u5936\\u593b\\ufffd\".split(\"\"),e=0;e!=r[137].length;++e)65533!==r[137][e].charCodeAt(0)&&(n[r[137][e]]=35072+e,t[35072+e]=r[137][e]);for(r[138]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u593d\\u593e\\u593f\\u5940\\u5943\\u5945\\u5946\\u594a\\u594c\\u594d\\u5950\\u5952\\u5953\\u5959\\u595b\\u595c\\u595d\\u595e\\u595f\\u5961\\u5963\\u5964\\u5966\\u5967\\u5968\\u5969\\u596a\\u596b\\u596c\\u596d\\u596e\\u596f\\u5970\\u5971\\u5972\\u5975\\u5977\\u597a\\u597b\\u597c\\u597e\\u597f\\u5980\\u5985\\u5989\\u598b\\u598c\\u598e\\u598f\\u5990\\u5991\\u5994\\u5995\\u5998\\u599a\\u599b\\u599c\\u599d\\u599f\\u59a0\\u59a1\\u59a2\\u59a6\\ufffd\\u59a7\\u59ac\\u59ad\\u59b0\\u59b1\\u59b3\\u59b4\\u59b5\\u59b6\\u59b7\\u59b8\\u59ba\\u59bc\\u59bd\\u59bf\\u59c0\\u59c1\\u59c2\\u59c3\\u59c4\\u59c5\\u59c7\\u59c8\\u59c9\\u59cc\\u59cd\\u59ce\\u59cf\\u59d5\\u59d6\\u59d9\\u59db\\u59de\\u59df\\u59e0\\u59e1\\u59e2\\u59e4\\u59e6\\u59e7\\u59e9\\u59ea\\u59eb\\u59ed\\u59ee\\u59ef\\u59f0\\u59f1\\u59f2\\u59f3\\u59f4\\u59f5\\u59f6\\u59f7\\u59f8\\u59fa\\u59fc\\u59fd\\u59fe\\u5a00\\u5a02\\u5a0a\\u5a0b\\u5a0d\\u5a0e\\u5a0f\\u5a10\\u5a12\\u5a14\\u5a15\\u5a16\\u5a17\\u5a19\\u5a1a\\u5a1b\\u5a1d\\u5a1e\\u5a21\\u5a22\\u5a24\\u5a26\\u5a27\\u5a28\\u5a2a\\u5a2b\\u5a2c\\u5a2d\\u5a2e\\u5a2f\\u5a30\\u5a33\\u5a35\\u5a37\\u5a38\\u5a39\\u5a3a\\u5a3b\\u5a3d\\u5a3e\\u5a3f\\u5a41\\u5a42\\u5a43\\u5a44\\u5a45\\u5a47\\u5a48\\u5a4b\\u5a4c\\u5a4d\\u5a4e\\u5a4f\\u5a50\\u5a51\\u5a52\\u5a53\\u5a54\\u5a56\\u5a57\\u5a58\\u5a59\\u5a5b\\u5a5c\\u5a5d\\u5a5e\\u5a5f\\u5a60\\ufffd\".split(\"\"),e=0;e!=r[138].length;++e)65533!==r[138][e].charCodeAt(0)&&(n[r[138][e]]=35328+e,t[35328+e]=r[138][e]);for(r[139]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5a61\\u5a63\\u5a64\\u5a65\\u5a66\\u5a68\\u5a69\\u5a6b\\u5a6c\\u5a6d\\u5a6e\\u5a6f\\u5a70\\u5a71\\u5a72\\u5a73\\u5a78\\u5a79\\u5a7b\\u5a7c\\u5a7d\\u5a7e\\u5a80\\u5a81\\u5a82\\u5a83\\u5a84\\u5a85\\u5a86\\u5a87\\u5a88\\u5a89\\u5a8a\\u5a8b\\u5a8c\\u5a8d\\u5a8e\\u5a8f\\u5a90\\u5a91\\u5a93\\u5a94\\u5a95\\u5a96\\u5a97\\u5a98\\u5a99\\u5a9c\\u5a9d\\u5a9e\\u5a9f\\u5aa0\\u5aa1\\u5aa2\\u5aa3\\u5aa4\\u5aa5\\u5aa6\\u5aa7\\u5aa8\\u5aa9\\u5aab\\u5aac\\ufffd\\u5aad\\u5aae\\u5aaf\\u5ab0\\u5ab1\\u5ab4\\u5ab6\\u5ab7\\u5ab9\\u5aba\\u5abb\\u5abc\\u5abd\\u5abf\\u5ac0\\u5ac3\\u5ac4\\u5ac5\\u5ac6\\u5ac7\\u5ac8\\u5aca\\u5acb\\u5acd\\u5ace\\u5acf\\u5ad0\\u5ad1\\u5ad3\\u5ad5\\u5ad7\\u5ad9\\u5ada\\u5adb\\u5add\\u5ade\\u5adf\\u5ae2\\u5ae4\\u5ae5\\u5ae7\\u5ae8\\u5aea\\u5aec\\u5aed\\u5aee\\u5aef\\u5af0\\u5af2\\u5af3\\u5af4\\u5af5\\u5af6\\u5af7\\u5af8\\u5af9\\u5afa\\u5afb\\u5afc\\u5afd\\u5afe\\u5aff\\u5b00\\u5b01\\u5b02\\u5b03\\u5b04\\u5b05\\u5b06\\u5b07\\u5b08\\u5b0a\\u5b0b\\u5b0c\\u5b0d\\u5b0e\\u5b0f\\u5b10\\u5b11\\u5b12\\u5b13\\u5b14\\u5b15\\u5b18\\u5b19\\u5b1a\\u5b1b\\u5b1c\\u5b1d\\u5b1e\\u5b1f\\u5b20\\u5b21\\u5b22\\u5b23\\u5b24\\u5b25\\u5b26\\u5b27\\u5b28\\u5b29\\u5b2a\\u5b2b\\u5b2c\\u5b2d\\u5b2e\\u5b2f\\u5b30\\u5b31\\u5b33\\u5b35\\u5b36\\u5b38\\u5b39\\u5b3a\\u5b3b\\u5b3c\\u5b3d\\u5b3e\\u5b3f\\u5b41\\u5b42\\u5b43\\u5b44\\u5b45\\u5b46\\u5b47\\ufffd\".split(\"\"),e=0;e!=r[139].length;++e)65533!==r[139][e].charCodeAt(0)&&(n[r[139][e]]=35584+e,t[35584+e]=r[139][e]);for(r[140]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5b48\\u5b49\\u5b4a\\u5b4b\\u5b4c\\u5b4d\\u5b4e\\u5b4f\\u5b52\\u5b56\\u5b5e\\u5b60\\u5b61\\u5b67\\u5b68\\u5b6b\\u5b6d\\u5b6e\\u5b6f\\u5b72\\u5b74\\u5b76\\u5b77\\u5b78\\u5b79\\u5b7b\\u5b7c\\u5b7e\\u5b7f\\u5b82\\u5b86\\u5b8a\\u5b8d\\u5b8e\\u5b90\\u5b91\\u5b92\\u5b94\\u5b96\\u5b9f\\u5ba7\\u5ba8\\u5ba9\\u5bac\\u5bad\\u5bae\\u5baf\\u5bb1\\u5bb2\\u5bb7\\u5bba\\u5bbb\\u5bbc\\u5bc0\\u5bc1\\u5bc3\\u5bc8\\u5bc9\\u5bca\\u5bcb\\u5bcd\\u5bce\\u5bcf\\ufffd\\u5bd1\\u5bd4\\u5bd5\\u5bd6\\u5bd7\\u5bd8\\u5bd9\\u5bda\\u5bdb\\u5bdc\\u5be0\\u5be2\\u5be3\\u5be6\\u5be7\\u5be9\\u5bea\\u5beb\\u5bec\\u5bed\\u5bef\\u5bf1\\u5bf2\\u5bf3\\u5bf4\\u5bf5\\u5bf6\\u5bf7\\u5bfd\\u5bfe\\u5c00\\u5c02\\u5c03\\u5c05\\u5c07\\u5c08\\u5c0b\\u5c0c\\u5c0d\\u5c0e\\u5c10\\u5c12\\u5c13\\u5c17\\u5c19\\u5c1b\\u5c1e\\u5c1f\\u5c20\\u5c21\\u5c23\\u5c26\\u5c28\\u5c29\\u5c2a\\u5c2b\\u5c2d\\u5c2e\\u5c2f\\u5c30\\u5c32\\u5c33\\u5c35\\u5c36\\u5c37\\u5c43\\u5c44\\u5c46\\u5c47\\u5c4c\\u5c4d\\u5c52\\u5c53\\u5c54\\u5c56\\u5c57\\u5c58\\u5c5a\\u5c5b\\u5c5c\\u5c5d\\u5c5f\\u5c62\\u5c64\\u5c67\\u5c68\\u5c69\\u5c6a\\u5c6b\\u5c6c\\u5c6d\\u5c70\\u5c72\\u5c73\\u5c74\\u5c75\\u5c76\\u5c77\\u5c78\\u5c7b\\u5c7c\\u5c7d\\u5c7e\\u5c80\\u5c83\\u5c84\\u5c85\\u5c86\\u5c87\\u5c89\\u5c8a\\u5c8b\\u5c8e\\u5c8f\\u5c92\\u5c93\\u5c95\\u5c9d\\u5c9e\\u5c9f\\u5ca0\\u5ca1\\u5ca4\\u5ca5\\u5ca6\\u5ca7\\u5ca8\\ufffd\".split(\"\"),e=0;e!=r[140].length;++e)65533!==r[140][e].charCodeAt(0)&&(n[r[140][e]]=35840+e,t[35840+e]=r[140][e]);for(r[141]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5caa\\u5cae\\u5caf\\u5cb0\\u5cb2\\u5cb4\\u5cb6\\u5cb9\\u5cba\\u5cbb\\u5cbc\\u5cbe\\u5cc0\\u5cc2\\u5cc3\\u5cc5\\u5cc6\\u5cc7\\u5cc8\\u5cc9\\u5cca\\u5ccc\\u5ccd\\u5cce\\u5ccf\\u5cd0\\u5cd1\\u5cd3\\u5cd4\\u5cd5\\u5cd6\\u5cd7\\u5cd8\\u5cda\\u5cdb\\u5cdc\\u5cdd\\u5cde\\u5cdf\\u5ce0\\u5ce2\\u5ce3\\u5ce7\\u5ce9\\u5ceb\\u5cec\\u5cee\\u5cef\\u5cf1\\u5cf2\\u5cf3\\u5cf4\\u5cf5\\u5cf6\\u5cf7\\u5cf8\\u5cf9\\u5cfa\\u5cfc\\u5cfd\\u5cfe\\u5cff\\u5d00\\ufffd\\u5d01\\u5d04\\u5d05\\u5d08\\u5d09\\u5d0a\\u5d0b\\u5d0c\\u5d0d\\u5d0f\\u5d10\\u5d11\\u5d12\\u5d13\\u5d15\\u5d17\\u5d18\\u5d19\\u5d1a\\u5d1c\\u5d1d\\u5d1f\\u5d20\\u5d21\\u5d22\\u5d23\\u5d25\\u5d28\\u5d2a\\u5d2b\\u5d2c\\u5d2f\\u5d30\\u5d31\\u5d32\\u5d33\\u5d35\\u5d36\\u5d37\\u5d38\\u5d39\\u5d3a\\u5d3b\\u5d3c\\u5d3f\\u5d40\\u5d41\\u5d42\\u5d43\\u5d44\\u5d45\\u5d46\\u5d48\\u5d49\\u5d4d\\u5d4e\\u5d4f\\u5d50\\u5d51\\u5d52\\u5d53\\u5d54\\u5d55\\u5d56\\u5d57\\u5d59\\u5d5a\\u5d5c\\u5d5e\\u5d5f\\u5d60\\u5d61\\u5d62\\u5d63\\u5d64\\u5d65\\u5d66\\u5d67\\u5d68\\u5d6a\\u5d6d\\u5d6e\\u5d70\\u5d71\\u5d72\\u5d73\\u5d75\\u5d76\\u5d77\\u5d78\\u5d79\\u5d7a\\u5d7b\\u5d7c\\u5d7d\\u5d7e\\u5d7f\\u5d80\\u5d81\\u5d83\\u5d84\\u5d85\\u5d86\\u5d87\\u5d88\\u5d89\\u5d8a\\u5d8b\\u5d8c\\u5d8d\\u5d8e\\u5d8f\\u5d90\\u5d91\\u5d92\\u5d93\\u5d94\\u5d95\\u5d96\\u5d97\\u5d98\\u5d9a\\u5d9b\\u5d9c\\u5d9e\\u5d9f\\u5da0\\ufffd\".split(\"\"),e=0;e!=r[141].length;++e)65533!==r[141][e].charCodeAt(0)&&(n[r[141][e]]=36096+e,t[36096+e]=r[141][e]);for(r[142]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5da1\\u5da2\\u5da3\\u5da4\\u5da5\\u5da6\\u5da7\\u5da8\\u5da9\\u5daa\\u5dab\\u5dac\\u5dad\\u5dae\\u5daf\\u5db0\\u5db1\\u5db2\\u5db3\\u5db4\\u5db5\\u5db6\\u5db8\\u5db9\\u5dba\\u5dbb\\u5dbc\\u5dbd\\u5dbe\\u5dbf\\u5dc0\\u5dc1\\u5dc2\\u5dc3\\u5dc4\\u5dc6\\u5dc7\\u5dc8\\u5dc9\\u5dca\\u5dcb\\u5dcc\\u5dce\\u5dcf\\u5dd0\\u5dd1\\u5dd2\\u5dd3\\u5dd4\\u5dd5\\u5dd6\\u5dd7\\u5dd8\\u5dd9\\u5dda\\u5ddc\\u5ddf\\u5de0\\u5de3\\u5de4\\u5dea\\u5dec\\u5ded\\ufffd\\u5df0\\u5df5\\u5df6\\u5df8\\u5df9\\u5dfa\\u5dfb\\u5dfc\\u5dff\\u5e00\\u5e04\\u5e07\\u5e09\\u5e0a\\u5e0b\\u5e0d\\u5e0e\\u5e12\\u5e13\\u5e17\\u5e1e\\u5e1f\\u5e20\\u5e21\\u5e22\\u5e23\\u5e24\\u5e25\\u5e28\\u5e29\\u5e2a\\u5e2b\\u5e2c\\u5e2f\\u5e30\\u5e32\\u5e33\\u5e34\\u5e35\\u5e36\\u5e39\\u5e3a\\u5e3e\\u5e3f\\u5e40\\u5e41\\u5e43\\u5e46\\u5e47\\u5e48\\u5e49\\u5e4a\\u5e4b\\u5e4d\\u5e4e\\u5e4f\\u5e50\\u5e51\\u5e52\\u5e53\\u5e56\\u5e57\\u5e58\\u5e59\\u5e5a\\u5e5c\\u5e5d\\u5e5f\\u5e60\\u5e63\\u5e64\\u5e65\\u5e66\\u5e67\\u5e68\\u5e69\\u5e6a\\u5e6b\\u5e6c\\u5e6d\\u5e6e\\u5e6f\\u5e70\\u5e71\\u5e75\\u5e77\\u5e79\\u5e7e\\u5e81\\u5e82\\u5e83\\u5e85\\u5e88\\u5e89\\u5e8c\\u5e8d\\u5e8e\\u5e92\\u5e98\\u5e9b\\u5e9d\\u5ea1\\u5ea2\\u5ea3\\u5ea4\\u5ea8\\u5ea9\\u5eaa\\u5eab\\u5eac\\u5eae\\u5eaf\\u5eb0\\u5eb1\\u5eb2\\u5eb4\\u5eba\\u5ebb\\u5ebc\\u5ebd\\u5ebf\\u5ec0\\u5ec1\\u5ec2\\u5ec3\\u5ec4\\u5ec5\\ufffd\".split(\"\"),e=0;e!=r[142].length;++e)65533!==r[142][e].charCodeAt(0)&&(n[r[142][e]]=36352+e,t[36352+e]=r[142][e]);for(r[143]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5ec6\\u5ec7\\u5ec8\\u5ecb\\u5ecc\\u5ecd\\u5ece\\u5ecf\\u5ed0\\u5ed4\\u5ed5\\u5ed7\\u5ed8\\u5ed9\\u5eda\\u5edc\\u5edd\\u5ede\\u5edf\\u5ee0\\u5ee1\\u5ee2\\u5ee3\\u5ee4\\u5ee5\\u5ee6\\u5ee7\\u5ee9\\u5eeb\\u5eec\\u5eed\\u5eee\\u5eef\\u5ef0\\u5ef1\\u5ef2\\u5ef3\\u5ef5\\u5ef8\\u5ef9\\u5efb\\u5efc\\u5efd\\u5f05\\u5f06\\u5f07\\u5f09\\u5f0c\\u5f0d\\u5f0e\\u5f10\\u5f12\\u5f14\\u5f16\\u5f19\\u5f1a\\u5f1c\\u5f1d\\u5f1e\\u5f21\\u5f22\\u5f23\\u5f24\\ufffd\\u5f28\\u5f2b\\u5f2c\\u5f2e\\u5f30\\u5f32\\u5f33\\u5f34\\u5f35\\u5f36\\u5f37\\u5f38\\u5f3b\\u5f3d\\u5f3e\\u5f3f\\u5f41\\u5f42\\u5f43\\u5f44\\u5f45\\u5f46\\u5f47\\u5f48\\u5f49\\u5f4a\\u5f4b\\u5f4c\\u5f4d\\u5f4e\\u5f4f\\u5f51\\u5f54\\u5f59\\u5f5a\\u5f5b\\u5f5c\\u5f5e\\u5f5f\\u5f60\\u5f63\\u5f65\\u5f67\\u5f68\\u5f6b\\u5f6e\\u5f6f\\u5f72\\u5f74\\u5f75\\u5f76\\u5f78\\u5f7a\\u5f7d\\u5f7e\\u5f7f\\u5f83\\u5f86\\u5f8d\\u5f8e\\u5f8f\\u5f91\\u5f93\\u5f94\\u5f96\\u5f9a\\u5f9b\\u5f9d\\u5f9e\\u5f9f\\u5fa0\\u5fa2\\u5fa3\\u5fa4\\u5fa5\\u5fa6\\u5fa7\\u5fa9\\u5fab\\u5fac\\u5faf\\u5fb0\\u5fb1\\u5fb2\\u5fb3\\u5fb4\\u5fb6\\u5fb8\\u5fb9\\u5fba\\u5fbb\\u5fbe\\u5fbf\\u5fc0\\u5fc1\\u5fc2\\u5fc7\\u5fc8\\u5fca\\u5fcb\\u5fce\\u5fd3\\u5fd4\\u5fd5\\u5fda\\u5fdb\\u5fdc\\u5fde\\u5fdf\\u5fe2\\u5fe3\\u5fe5\\u5fe6\\u5fe8\\u5fe9\\u5fec\\u5fef\\u5ff0\\u5ff2\\u5ff3\\u5ff4\\u5ff6\\u5ff7\\u5ff9\\u5ffa\\u5ffc\\u6007\\ufffd\".split(\"\"),e=0;e!=r[143].length;++e)65533!==r[143][e].charCodeAt(0)&&(n[r[143][e]]=36608+e,t[36608+e]=r[143][e]);for(r[144]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6008\\u6009\\u600b\\u600c\\u6010\\u6011\\u6013\\u6017\\u6018\\u601a\\u601e\\u601f\\u6022\\u6023\\u6024\\u602c\\u602d\\u602e\\u6030\\u6031\\u6032\\u6033\\u6034\\u6036\\u6037\\u6038\\u6039\\u603a\\u603d\\u603e\\u6040\\u6044\\u6045\\u6046\\u6047\\u6048\\u6049\\u604a\\u604c\\u604e\\u604f\\u6051\\u6053\\u6054\\u6056\\u6057\\u6058\\u605b\\u605c\\u605e\\u605f\\u6060\\u6061\\u6065\\u6066\\u606e\\u6071\\u6072\\u6074\\u6075\\u6077\\u607e\\u6080\\ufffd\\u6081\\u6082\\u6085\\u6086\\u6087\\u6088\\u608a\\u608b\\u608e\\u608f\\u6090\\u6091\\u6093\\u6095\\u6097\\u6098\\u6099\\u609c\\u609e\\u60a1\\u60a2\\u60a4\\u60a5\\u60a7\\u60a9\\u60aa\\u60ae\\u60b0\\u60b3\\u60b5\\u60b6\\u60b7\\u60b9\\u60ba\\u60bd\\u60be\\u60bf\\u60c0\\u60c1\\u60c2\\u60c3\\u60c4\\u60c7\\u60c8\\u60c9\\u60cc\\u60cd\\u60ce\\u60cf\\u60d0\\u60d2\\u60d3\\u60d4\\u60d6\\u60d7\\u60d9\\u60db\\u60de\\u60e1\\u60e2\\u60e3\\u60e4\\u60e5\\u60ea\\u60f1\\u60f2\\u60f5\\u60f7\\u60f8\\u60fb\\u60fc\\u60fd\\u60fe\\u60ff\\u6102\\u6103\\u6104\\u6105\\u6107\\u610a\\u610b\\u610c\\u6110\\u6111\\u6112\\u6113\\u6114\\u6116\\u6117\\u6118\\u6119\\u611b\\u611c\\u611d\\u611e\\u6121\\u6122\\u6125\\u6128\\u6129\\u612a\\u612c\\u612d\\u612e\\u612f\\u6130\\u6131\\u6132\\u6133\\u6134\\u6135\\u6136\\u6137\\u6138\\u6139\\u613a\\u613b\\u613c\\u613d\\u613e\\u6140\\u6141\\u6142\\u6143\\u6144\\u6145\\u6146\\ufffd\".split(\"\"),e=0;e!=r[144].length;++e)65533!==r[144][e].charCodeAt(0)&&(n[r[144][e]]=36864+e,t[36864+e]=r[144][e]);for(r[145]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6147\\u6149\\u614b\\u614d\\u614f\\u6150\\u6152\\u6153\\u6154\\u6156\\u6157\\u6158\\u6159\\u615a\\u615b\\u615c\\u615e\\u615f\\u6160\\u6161\\u6163\\u6164\\u6165\\u6166\\u6169\\u616a\\u616b\\u616c\\u616d\\u616e\\u616f\\u6171\\u6172\\u6173\\u6174\\u6176\\u6178\\u6179\\u617a\\u617b\\u617c\\u617d\\u617e\\u617f\\u6180\\u6181\\u6182\\u6183\\u6184\\u6185\\u6186\\u6187\\u6188\\u6189\\u618a\\u618c\\u618d\\u618f\\u6190\\u6191\\u6192\\u6193\\u6195\\ufffd\\u6196\\u6197\\u6198\\u6199\\u619a\\u619b\\u619c\\u619e\\u619f\\u61a0\\u61a1\\u61a2\\u61a3\\u61a4\\u61a5\\u61a6\\u61aa\\u61ab\\u61ad\\u61ae\\u61af\\u61b0\\u61b1\\u61b2\\u61b3\\u61b4\\u61b5\\u61b6\\u61b8\\u61b9\\u61ba\\u61bb\\u61bc\\u61bd\\u61bf\\u61c0\\u61c1\\u61c3\\u61c4\\u61c5\\u61c6\\u61c7\\u61c9\\u61cc\\u61cd\\u61ce\\u61cf\\u61d0\\u61d3\\u61d5\\u61d6\\u61d7\\u61d8\\u61d9\\u61da\\u61db\\u61dc\\u61dd\\u61de\\u61df\\u61e0\\u61e1\\u61e2\\u61e3\\u61e4\\u61e5\\u61e7\\u61e8\\u61e9\\u61ea\\u61eb\\u61ec\\u61ed\\u61ee\\u61ef\\u61f0\\u61f1\\u61f2\\u61f3\\u61f4\\u61f6\\u61f7\\u61f8\\u61f9\\u61fa\\u61fb\\u61fc\\u61fd\\u61fe\\u6200\\u6201\\u6202\\u6203\\u6204\\u6205\\u6207\\u6209\\u6213\\u6214\\u6219\\u621c\\u621d\\u621e\\u6220\\u6223\\u6226\\u6227\\u6228\\u6229\\u622b\\u622d\\u622f\\u6230\\u6231\\u6232\\u6235\\u6236\\u6238\\u6239\\u623a\\u623b\\u623c\\u6242\\u6244\\u6245\\u6246\\u624a\\ufffd\".split(\"\"),e=0;e!=r[145].length;++e)65533!==r[145][e].charCodeAt(0)&&(n[r[145][e]]=37120+e,t[37120+e]=r[145][e]);for(r[146]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u624f\\u6250\\u6255\\u6256\\u6257\\u6259\\u625a\\u625c\\u625d\\u625e\\u625f\\u6260\\u6261\\u6262\\u6264\\u6265\\u6268\\u6271\\u6272\\u6274\\u6275\\u6277\\u6278\\u627a\\u627b\\u627d\\u6281\\u6282\\u6283\\u6285\\u6286\\u6287\\u6288\\u628b\\u628c\\u628d\\u628e\\u628f\\u6290\\u6294\\u6299\\u629c\\u629d\\u629e\\u62a3\\u62a6\\u62a7\\u62a9\\u62aa\\u62ad\\u62ae\\u62af\\u62b0\\u62b2\\u62b3\\u62b4\\u62b6\\u62b7\\u62b8\\u62ba\\u62be\\u62c0\\u62c1\\ufffd\\u62c3\\u62cb\\u62cf\\u62d1\\u62d5\\u62dd\\u62de\\u62e0\\u62e1\\u62e4\\u62ea\\u62eb\\u62f0\\u62f2\\u62f5\\u62f8\\u62f9\\u62fa\\u62fb\\u6300\\u6303\\u6304\\u6305\\u6306\\u630a\\u630b\\u630c\\u630d\\u630f\\u6310\\u6312\\u6313\\u6314\\u6315\\u6317\\u6318\\u6319\\u631c\\u6326\\u6327\\u6329\\u632c\\u632d\\u632e\\u6330\\u6331\\u6333\\u6334\\u6335\\u6336\\u6337\\u6338\\u633b\\u633c\\u633e\\u633f\\u6340\\u6341\\u6344\\u6347\\u6348\\u634a\\u6351\\u6352\\u6353\\u6354\\u6356\\u6357\\u6358\\u6359\\u635a\\u635b\\u635c\\u635d\\u6360\\u6364\\u6365\\u6366\\u6368\\u636a\\u636b\\u636c\\u636f\\u6370\\u6372\\u6373\\u6374\\u6375\\u6378\\u6379\\u637c\\u637d\\u637e\\u637f\\u6381\\u6383\\u6384\\u6385\\u6386\\u638b\\u638d\\u6391\\u6393\\u6394\\u6395\\u6397\\u6399\\u639a\\u639b\\u639c\\u639d\\u639e\\u639f\\u63a1\\u63a4\\u63a6\\u63ab\\u63af\\u63b1\\u63b2\\u63b5\\u63b6\\u63b9\\u63bb\\u63bd\\u63bf\\u63c0\\ufffd\".split(\"\"),e=0;e!=r[146].length;++e)65533!==r[146][e].charCodeAt(0)&&(n[r[146][e]]=37376+e,t[37376+e]=r[146][e]);for(r[147]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u63c1\\u63c2\\u63c3\\u63c5\\u63c7\\u63c8\\u63ca\\u63cb\\u63cc\\u63d1\\u63d3\\u63d4\\u63d5\\u63d7\\u63d8\\u63d9\\u63da\\u63db\\u63dc\\u63dd\\u63df\\u63e2\\u63e4\\u63e5\\u63e6\\u63e7\\u63e8\\u63eb\\u63ec\\u63ee\\u63ef\\u63f0\\u63f1\\u63f3\\u63f5\\u63f7\\u63f9\\u63fa\\u63fb\\u63fc\\u63fe\\u6403\\u6404\\u6406\\u6407\\u6408\\u6409\\u640a\\u640d\\u640e\\u6411\\u6412\\u6415\\u6416\\u6417\\u6418\\u6419\\u641a\\u641d\\u641f\\u6422\\u6423\\u6424\\ufffd\\u6425\\u6427\\u6428\\u6429\\u642b\\u642e\\u642f\\u6430\\u6431\\u6432\\u6433\\u6435\\u6436\\u6437\\u6438\\u6439\\u643b\\u643c\\u643e\\u6440\\u6442\\u6443\\u6449\\u644b\\u644c\\u644d\\u644e\\u644f\\u6450\\u6451\\u6453\\u6455\\u6456\\u6457\\u6459\\u645a\\u645b\\u645c\\u645d\\u645f\\u6460\\u6461\\u6462\\u6463\\u6464\\u6465\\u6466\\u6468\\u646a\\u646b\\u646c\\u646e\\u646f\\u6470\\u6471\\u6472\\u6473\\u6474\\u6475\\u6476\\u6477\\u647b\\u647c\\u647d\\u647e\\u647f\\u6480\\u6481\\u6483\\u6486\\u6488\\u6489\\u648a\\u648b\\u648c\\u648d\\u648e\\u648f\\u6490\\u6493\\u6494\\u6497\\u6498\\u649a\\u649b\\u649c\\u649d\\u649f\\u64a0\\u64a1\\u64a2\\u64a3\\u64a5\\u64a6\\u64a7\\u64a8\\u64aa\\u64ab\\u64af\\u64b1\\u64b2\\u64b3\\u64b4\\u64b6\\u64b9\\u64bb\\u64bd\\u64be\\u64bf\\u64c1\\u64c3\\u64c4\\u64c6\\u64c7\\u64c8\\u64c9\\u64ca\\u64cb\\u64cc\\u64cf\\u64d1\\u64d3\\u64d4\\u64d5\\u64d6\\u64d9\\u64da\\ufffd\".split(\"\"),e=0;e!=r[147].length;++e)65533!==r[147][e].charCodeAt(0)&&(n[r[147][e]]=37632+e,t[37632+e]=r[147][e]);for(r[148]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u64db\\u64dc\\u64dd\\u64df\\u64e0\\u64e1\\u64e3\\u64e5\\u64e7\\u64e8\\u64e9\\u64ea\\u64eb\\u64ec\\u64ed\\u64ee\\u64ef\\u64f0\\u64f1\\u64f2\\u64f3\\u64f4\\u64f5\\u64f6\\u64f7\\u64f8\\u64f9\\u64fa\\u64fb\\u64fc\\u64fd\\u64fe\\u64ff\\u6501\\u6502\\u6503\\u6504\\u6505\\u6506\\u6507\\u6508\\u650a\\u650b\\u650c\\u650d\\u650e\\u650f\\u6510\\u6511\\u6513\\u6514\\u6515\\u6516\\u6517\\u6519\\u651a\\u651b\\u651c\\u651d\\u651e\\u651f\\u6520\\u6521\\ufffd\\u6522\\u6523\\u6524\\u6526\\u6527\\u6528\\u6529\\u652a\\u652c\\u652d\\u6530\\u6531\\u6532\\u6533\\u6537\\u653a\\u653c\\u653d\\u6540\\u6541\\u6542\\u6543\\u6544\\u6546\\u6547\\u654a\\u654b\\u654d\\u654e\\u6550\\u6552\\u6553\\u6554\\u6557\\u6558\\u655a\\u655c\\u655f\\u6560\\u6561\\u6564\\u6565\\u6567\\u6568\\u6569\\u656a\\u656d\\u656e\\u656f\\u6571\\u6573\\u6575\\u6576\\u6578\\u6579\\u657a\\u657b\\u657c\\u657d\\u657e\\u657f\\u6580\\u6581\\u6582\\u6583\\u6584\\u6585\\u6586\\u6588\\u6589\\u658a\\u658d\\u658e\\u658f\\u6592\\u6594\\u6595\\u6596\\u6598\\u659a\\u659d\\u659e\\u65a0\\u65a2\\u65a3\\u65a6\\u65a8\\u65aa\\u65ac\\u65ae\\u65b1\\u65b2\\u65b3\\u65b4\\u65b5\\u65b6\\u65b7\\u65b8\\u65ba\\u65bb\\u65be\\u65bf\\u65c0\\u65c2\\u65c7\\u65c8\\u65c9\\u65ca\\u65cd\\u65d0\\u65d1\\u65d3\\u65d4\\u65d5\\u65d8\\u65d9\\u65da\\u65db\\u65dc\\u65dd\\u65de\\u65df\\u65e1\\u65e3\\u65e4\\u65ea\\u65eb\\ufffd\".split(\"\"),e=0;e!=r[148].length;++e)65533!==r[148][e].charCodeAt(0)&&(n[r[148][e]]=37888+e,t[37888+e]=r[148][e]);for(r[149]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u65f2\\u65f3\\u65f4\\u65f5\\u65f8\\u65f9\\u65fb\\u65fc\\u65fd\\u65fe\\u65ff\\u6601\\u6604\\u6605\\u6607\\u6608\\u6609\\u660b\\u660d\\u6610\\u6611\\u6612\\u6616\\u6617\\u6618\\u661a\\u661b\\u661c\\u661e\\u6621\\u6622\\u6623\\u6624\\u6626\\u6629\\u662a\\u662b\\u662c\\u662e\\u6630\\u6632\\u6633\\u6637\\u6638\\u6639\\u663a\\u663b\\u663d\\u663f\\u6640\\u6642\\u6644\\u6645\\u6646\\u6647\\u6648\\u6649\\u664a\\u664d\\u664e\\u6650\\u6651\\u6658\\ufffd\\u6659\\u665b\\u665c\\u665d\\u665e\\u6660\\u6662\\u6663\\u6665\\u6667\\u6669\\u666a\\u666b\\u666c\\u666d\\u6671\\u6672\\u6673\\u6675\\u6678\\u6679\\u667b\\u667c\\u667d\\u667f\\u6680\\u6681\\u6683\\u6685\\u6686\\u6688\\u6689\\u668a\\u668b\\u668d\\u668e\\u668f\\u6690\\u6692\\u6693\\u6694\\u6695\\u6698\\u6699\\u669a\\u669b\\u669c\\u669e\\u669f\\u66a0\\u66a1\\u66a2\\u66a3\\u66a4\\u66a5\\u66a6\\u66a9\\u66aa\\u66ab\\u66ac\\u66ad\\u66af\\u66b0\\u66b1\\u66b2\\u66b3\\u66b5\\u66b6\\u66b7\\u66b8\\u66ba\\u66bb\\u66bc\\u66bd\\u66bf\\u66c0\\u66c1\\u66c2\\u66c3\\u66c4\\u66c5\\u66c6\\u66c7\\u66c8\\u66c9\\u66ca\\u66cb\\u66cc\\u66cd\\u66ce\\u66cf\\u66d0\\u66d1\\u66d2\\u66d3\\u66d4\\u66d5\\u66d6\\u66d7\\u66d8\\u66da\\u66de\\u66df\\u66e0\\u66e1\\u66e2\\u66e3\\u66e4\\u66e5\\u66e7\\u66e8\\u66ea\\u66eb\\u66ec\\u66ed\\u66ee\\u66ef\\u66f1\\u66f5\\u66f6\\u66f8\\u66fa\\u66fb\\u66fd\\u6701\\u6702\\u6703\\ufffd\".split(\"\"),e=0;e!=r[149].length;++e)65533!==r[149][e].charCodeAt(0)&&(n[r[149][e]]=38144+e,t[38144+e]=r[149][e]);for(r[150]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6704\\u6705\\u6706\\u6707\\u670c\\u670e\\u670f\\u6711\\u6712\\u6713\\u6716\\u6718\\u6719\\u671a\\u671c\\u671e\\u6720\\u6721\\u6722\\u6723\\u6724\\u6725\\u6727\\u6729\\u672e\\u6730\\u6732\\u6733\\u6736\\u6737\\u6738\\u6739\\u673b\\u673c\\u673e\\u673f\\u6741\\u6744\\u6745\\u6747\\u674a\\u674b\\u674d\\u6752\\u6754\\u6755\\u6757\\u6758\\u6759\\u675a\\u675b\\u675d\\u6762\\u6763\\u6764\\u6766\\u6767\\u676b\\u676c\\u676e\\u6771\\u6774\\u6776\\ufffd\\u6778\\u6779\\u677a\\u677b\\u677d\\u6780\\u6782\\u6783\\u6785\\u6786\\u6788\\u678a\\u678c\\u678d\\u678e\\u678f\\u6791\\u6792\\u6793\\u6794\\u6796\\u6799\\u679b\\u679f\\u67a0\\u67a1\\u67a4\\u67a6\\u67a9\\u67ac\\u67ae\\u67b1\\u67b2\\u67b4\\u67b9\\u67ba\\u67bb\\u67bc\\u67bd\\u67be\\u67bf\\u67c0\\u67c2\\u67c5\\u67c6\\u67c7\\u67c8\\u67c9\\u67ca\\u67cb\\u67cc\\u67cd\\u67ce\\u67d5\\u67d6\\u67d7\\u67db\\u67df\\u67e1\\u67e3\\u67e4\\u67e6\\u67e7\\u67e8\\u67ea\\u67eb\\u67ed\\u67ee\\u67f2\\u67f5\\u67f6\\u67f7\\u67f8\\u67f9\\u67fa\\u67fb\\u67fc\\u67fe\\u6801\\u6802\\u6803\\u6804\\u6806\\u680d\\u6810\\u6812\\u6814\\u6815\\u6818\\u6819\\u681a\\u681b\\u681c\\u681e\\u681f\\u6820\\u6822\\u6823\\u6824\\u6825\\u6826\\u6827\\u6828\\u682b\\u682c\\u682d\\u682e\\u682f\\u6830\\u6831\\u6834\\u6835\\u6836\\u683a\\u683b\\u683f\\u6847\\u684b\\u684d\\u684f\\u6852\\u6856\\u6857\\u6858\\u6859\\u685a\\u685b\\ufffd\".split(\"\"),e=0;e!=r[150].length;++e)65533!==r[150][e].charCodeAt(0)&&(n[r[150][e]]=38400+e,t[38400+e]=r[150][e]);for(r[151]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u685c\\u685d\\u685e\\u685f\\u686a\\u686c\\u686d\\u686e\\u686f\\u6870\\u6871\\u6872\\u6873\\u6875\\u6878\\u6879\\u687a\\u687b\\u687c\\u687d\\u687e\\u687f\\u6880\\u6882\\u6884\\u6887\\u6888\\u6889\\u688a\\u688b\\u688c\\u688d\\u688e\\u6890\\u6891\\u6892\\u6894\\u6895\\u6896\\u6898\\u6899\\u689a\\u689b\\u689c\\u689d\\u689e\\u689f\\u68a0\\u68a1\\u68a3\\u68a4\\u68a5\\u68a9\\u68aa\\u68ab\\u68ac\\u68ae\\u68b1\\u68b2\\u68b4\\u68b6\\u68b7\\u68b8\\ufffd\\u68b9\\u68ba\\u68bb\\u68bc\\u68bd\\u68be\\u68bf\\u68c1\\u68c3\\u68c4\\u68c5\\u68c6\\u68c7\\u68c8\\u68ca\\u68cc\\u68ce\\u68cf\\u68d0\\u68d1\\u68d3\\u68d4\\u68d6\\u68d7\\u68d9\\u68db\\u68dc\\u68dd\\u68de\\u68df\\u68e1\\u68e2\\u68e4\\u68e5\\u68e6\\u68e7\\u68e8\\u68e9\\u68ea\\u68eb\\u68ec\\u68ed\\u68ef\\u68f2\\u68f3\\u68f4\\u68f6\\u68f7\\u68f8\\u68fb\\u68fd\\u68fe\\u68ff\\u6900\\u6902\\u6903\\u6904\\u6906\\u6907\\u6908\\u6909\\u690a\\u690c\\u690f\\u6911\\u6913\\u6914\\u6915\\u6916\\u6917\\u6918\\u6919\\u691a\\u691b\\u691c\\u691d\\u691e\\u6921\\u6922\\u6923\\u6925\\u6926\\u6927\\u6928\\u6929\\u692a\\u692b\\u692c\\u692e\\u692f\\u6931\\u6932\\u6933\\u6935\\u6936\\u6937\\u6938\\u693a\\u693b\\u693c\\u693e\\u6940\\u6941\\u6943\\u6944\\u6945\\u6946\\u6947\\u6948\\u6949\\u694a\\u694b\\u694c\\u694d\\u694e\\u694f\\u6950\\u6951\\u6952\\u6953\\u6955\\u6956\\u6958\\u6959\\u695b\\u695c\\u695f\\ufffd\".split(\"\"),e=0;e!=r[151].length;++e)65533!==r[151][e].charCodeAt(0)&&(n[r[151][e]]=38656+e,t[38656+e]=r[151][e]);for(r[152]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6961\\u6962\\u6964\\u6965\\u6967\\u6968\\u6969\\u696a\\u696c\\u696d\\u696f\\u6970\\u6972\\u6973\\u6974\\u6975\\u6976\\u697a\\u697b\\u697d\\u697e\\u697f\\u6981\\u6983\\u6985\\u698a\\u698b\\u698c\\u698e\\u698f\\u6990\\u6991\\u6992\\u6993\\u6996\\u6997\\u6999\\u699a\\u699d\\u699e\\u699f\\u69a0\\u69a1\\u69a2\\u69a3\\u69a4\\u69a5\\u69a6\\u69a9\\u69aa\\u69ac\\u69ae\\u69af\\u69b0\\u69b2\\u69b3\\u69b5\\u69b6\\u69b8\\u69b9\\u69ba\\u69bc\\u69bd\\ufffd\\u69be\\u69bf\\u69c0\\u69c2\\u69c3\\u69c4\\u69c5\\u69c6\\u69c7\\u69c8\\u69c9\\u69cb\\u69cd\\u69cf\\u69d1\\u69d2\\u69d3\\u69d5\\u69d6\\u69d7\\u69d8\\u69d9\\u69da\\u69dc\\u69dd\\u69de\\u69e1\\u69e2\\u69e3\\u69e4\\u69e5\\u69e6\\u69e7\\u69e8\\u69e9\\u69ea\\u69eb\\u69ec\\u69ee\\u69ef\\u69f0\\u69f1\\u69f3\\u69f4\\u69f5\\u69f6\\u69f7\\u69f8\\u69f9\\u69fa\\u69fb\\u69fc\\u69fe\\u6a00\\u6a01\\u6a02\\u6a03\\u6a04\\u6a05\\u6a06\\u6a07\\u6a08\\u6a09\\u6a0b\\u6a0c\\u6a0d\\u6a0e\\u6a0f\\u6a10\\u6a11\\u6a12\\u6a13\\u6a14\\u6a15\\u6a16\\u6a19\\u6a1a\\u6a1b\\u6a1c\\u6a1d\\u6a1e\\u6a20\\u6a22\\u6a23\\u6a24\\u6a25\\u6a26\\u6a27\\u6a29\\u6a2b\\u6a2c\\u6a2d\\u6a2e\\u6a30\\u6a32\\u6a33\\u6a34\\u6a36\\u6a37\\u6a38\\u6a39\\u6a3a\\u6a3b\\u6a3c\\u6a3f\\u6a40\\u6a41\\u6a42\\u6a43\\u6a45\\u6a46\\u6a48\\u6a49\\u6a4a\\u6a4b\\u6a4c\\u6a4d\\u6a4e\\u6a4f\\u6a51\\u6a52\\u6a53\\u6a54\\u6a55\\u6a56\\u6a57\\u6a5a\\ufffd\".split(\"\"),e=0;e!=r[152].length;++e)65533!==r[152][e].charCodeAt(0)&&(n[r[152][e]]=38912+e,t[38912+e]=r[152][e]);for(r[153]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6a5c\\u6a5d\\u6a5e\\u6a5f\\u6a60\\u6a62\\u6a63\\u6a64\\u6a66\\u6a67\\u6a68\\u6a69\\u6a6a\\u6a6b\\u6a6c\\u6a6d\\u6a6e\\u6a6f\\u6a70\\u6a72\\u6a73\\u6a74\\u6a75\\u6a76\\u6a77\\u6a78\\u6a7a\\u6a7b\\u6a7d\\u6a7e\\u6a7f\\u6a81\\u6a82\\u6a83\\u6a85\\u6a86\\u6a87\\u6a88\\u6a89\\u6a8a\\u6a8b\\u6a8c\\u6a8d\\u6a8f\\u6a92\\u6a93\\u6a94\\u6a95\\u6a96\\u6a98\\u6a99\\u6a9a\\u6a9b\\u6a9c\\u6a9d\\u6a9e\\u6a9f\\u6aa1\\u6aa2\\u6aa3\\u6aa4\\u6aa5\\u6aa6\\ufffd\\u6aa7\\u6aa8\\u6aaa\\u6aad\\u6aae\\u6aaf\\u6ab0\\u6ab1\\u6ab2\\u6ab3\\u6ab4\\u6ab5\\u6ab6\\u6ab7\\u6ab8\\u6ab9\\u6aba\\u6abb\\u6abc\\u6abd\\u6abe\\u6abf\\u6ac0\\u6ac1\\u6ac2\\u6ac3\\u6ac4\\u6ac5\\u6ac6\\u6ac7\\u6ac8\\u6ac9\\u6aca\\u6acb\\u6acc\\u6acd\\u6ace\\u6acf\\u6ad0\\u6ad1\\u6ad2\\u6ad3\\u6ad4\\u6ad5\\u6ad6\\u6ad7\\u6ad8\\u6ad9\\u6ada\\u6adb\\u6adc\\u6add\\u6ade\\u6adf\\u6ae0\\u6ae1\\u6ae2\\u6ae3\\u6ae4\\u6ae5\\u6ae6\\u6ae7\\u6ae8\\u6ae9\\u6aea\\u6aeb\\u6aec\\u6aed\\u6aee\\u6aef\\u6af0\\u6af1\\u6af2\\u6af3\\u6af4\\u6af5\\u6af6\\u6af7\\u6af8\\u6af9\\u6afa\\u6afb\\u6afc\\u6afd\\u6afe\\u6aff\\u6b00\\u6b01\\u6b02\\u6b03\\u6b04\\u6b05\\u6b06\\u6b07\\u6b08\\u6b09\\u6b0a\\u6b0b\\u6b0c\\u6b0d\\u6b0e\\u6b0f\\u6b10\\u6b11\\u6b12\\u6b13\\u6b14\\u6b15\\u6b16\\u6b17\\u6b18\\u6b19\\u6b1a\\u6b1b\\u6b1c\\u6b1d\\u6b1e\\u6b1f\\u6b25\\u6b26\\u6b28\\u6b29\\u6b2a\\u6b2b\\u6b2c\\u6b2d\\u6b2e\\ufffd\".split(\"\"),e=0;e!=r[153].length;++e)65533!==r[153][e].charCodeAt(0)&&(n[r[153][e]]=39168+e,t[39168+e]=r[153][e]);for(r[154]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6b2f\\u6b30\\u6b31\\u6b33\\u6b34\\u6b35\\u6b36\\u6b38\\u6b3b\\u6b3c\\u6b3d\\u6b3f\\u6b40\\u6b41\\u6b42\\u6b44\\u6b45\\u6b48\\u6b4a\\u6b4b\\u6b4d\\u6b4e\\u6b4f\\u6b50\\u6b51\\u6b52\\u6b53\\u6b54\\u6b55\\u6b56\\u6b57\\u6b58\\u6b5a\\u6b5b\\u6b5c\\u6b5d\\u6b5e\\u6b5f\\u6b60\\u6b61\\u6b68\\u6b69\\u6b6b\\u6b6c\\u6b6d\\u6b6e\\u6b6f\\u6b70\\u6b71\\u6b72\\u6b73\\u6b74\\u6b75\\u6b76\\u6b77\\u6b78\\u6b7a\\u6b7d\\u6b7e\\u6b7f\\u6b80\\u6b85\\u6b88\\ufffd\\u6b8c\\u6b8e\\u6b8f\\u6b90\\u6b91\\u6b94\\u6b95\\u6b97\\u6b98\\u6b99\\u6b9c\\u6b9d\\u6b9e\\u6b9f\\u6ba0\\u6ba2\\u6ba3\\u6ba4\\u6ba5\\u6ba6\\u6ba7\\u6ba8\\u6ba9\\u6bab\\u6bac\\u6bad\\u6bae\\u6baf\\u6bb0\\u6bb1\\u6bb2\\u6bb6\\u6bb8\\u6bb9\\u6bba\\u6bbb\\u6bbc\\u6bbd\\u6bbe\\u6bc0\\u6bc3\\u6bc4\\u6bc6\\u6bc7\\u6bc8\\u6bc9\\u6bca\\u6bcc\\u6bce\\u6bd0\\u6bd1\\u6bd8\\u6bda\\u6bdc\\u6bdd\\u6bde\\u6bdf\\u6be0\\u6be2\\u6be3\\u6be4\\u6be5\\u6be6\\u6be7\\u6be8\\u6be9\\u6bec\\u6bed\\u6bee\\u6bf0\\u6bf1\\u6bf2\\u6bf4\\u6bf6\\u6bf7\\u6bf8\\u6bfa\\u6bfb\\u6bfc\\u6bfe\\u6bff\\u6c00\\u6c01\\u6c02\\u6c03\\u6c04\\u6c08\\u6c09\\u6c0a\\u6c0b\\u6c0c\\u6c0e\\u6c12\\u6c17\\u6c1c\\u6c1d\\u6c1e\\u6c20\\u6c23\\u6c25\\u6c2b\\u6c2c\\u6c2d\\u6c31\\u6c33\\u6c36\\u6c37\\u6c39\\u6c3a\\u6c3b\\u6c3c\\u6c3e\\u6c3f\\u6c43\\u6c44\\u6c45\\u6c48\\u6c4b\\u6c4c\\u6c4d\\u6c4e\\u6c4f\\u6c51\\u6c52\\u6c53\\u6c56\\u6c58\\ufffd\".split(\"\"),e=0;e!=r[154].length;++e)65533!==r[154][e].charCodeAt(0)&&(n[r[154][e]]=39424+e,t[39424+e]=r[154][e]);for(r[155]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6c59\\u6c5a\\u6c62\\u6c63\\u6c65\\u6c66\\u6c67\\u6c6b\\u6c6c\\u6c6d\\u6c6e\\u6c6f\\u6c71\\u6c73\\u6c75\\u6c77\\u6c78\\u6c7a\\u6c7b\\u6c7c\\u6c7f\\u6c80\\u6c84\\u6c87\\u6c8a\\u6c8b\\u6c8d\\u6c8e\\u6c91\\u6c92\\u6c95\\u6c96\\u6c97\\u6c98\\u6c9a\\u6c9c\\u6c9d\\u6c9e\\u6ca0\\u6ca2\\u6ca8\\u6cac\\u6caf\\u6cb0\\u6cb4\\u6cb5\\u6cb6\\u6cb7\\u6cba\\u6cc0\\u6cc1\\u6cc2\\u6cc3\\u6cc6\\u6cc7\\u6cc8\\u6ccb\\u6ccd\\u6cce\\u6ccf\\u6cd1\\u6cd2\\u6cd8\\ufffd\\u6cd9\\u6cda\\u6cdc\\u6cdd\\u6cdf\\u6ce4\\u6ce6\\u6ce7\\u6ce9\\u6cec\\u6ced\\u6cf2\\u6cf4\\u6cf9\\u6cff\\u6d00\\u6d02\\u6d03\\u6d05\\u6d06\\u6d08\\u6d09\\u6d0a\\u6d0d\\u6d0f\\u6d10\\u6d11\\u6d13\\u6d14\\u6d15\\u6d16\\u6d18\\u6d1c\\u6d1d\\u6d1f\\u6d20\\u6d21\\u6d22\\u6d23\\u6d24\\u6d26\\u6d28\\u6d29\\u6d2c\\u6d2d\\u6d2f\\u6d30\\u6d34\\u6d36\\u6d37\\u6d38\\u6d3a\\u6d3f\\u6d40\\u6d42\\u6d44\\u6d49\\u6d4c\\u6d50\\u6d55\\u6d56\\u6d57\\u6d58\\u6d5b\\u6d5d\\u6d5f\\u6d61\\u6d62\\u6d64\\u6d65\\u6d67\\u6d68\\u6d6b\\u6d6c\\u6d6d\\u6d70\\u6d71\\u6d72\\u6d73\\u6d75\\u6d76\\u6d79\\u6d7a\\u6d7b\\u6d7d\\u6d7e\\u6d7f\\u6d80\\u6d81\\u6d83\\u6d84\\u6d86\\u6d87\\u6d8a\\u6d8b\\u6d8d\\u6d8f\\u6d90\\u6d92\\u6d96\\u6d97\\u6d98\\u6d99\\u6d9a\\u6d9c\\u6da2\\u6da5\\u6dac\\u6dad\\u6db0\\u6db1\\u6db3\\u6db4\\u6db6\\u6db7\\u6db9\\u6dba\\u6dbb\\u6dbc\\u6dbd\\u6dbe\\u6dc1\\u6dc2\\u6dc3\\u6dc8\\u6dc9\\u6dca\\ufffd\".split(\"\"),e=0;e!=r[155].length;++e)65533!==r[155][e].charCodeAt(0)&&(n[r[155][e]]=39680+e,t[39680+e]=r[155][e]);for(r[156]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6dcd\\u6dce\\u6dcf\\u6dd0\\u6dd2\\u6dd3\\u6dd4\\u6dd5\\u6dd7\\u6dda\\u6ddb\\u6ddc\\u6ddf\\u6de2\\u6de3\\u6de5\\u6de7\\u6de8\\u6de9\\u6dea\\u6ded\\u6def\\u6df0\\u6df2\\u6df4\\u6df5\\u6df6\\u6df8\\u6dfa\\u6dfd\\u6dfe\\u6dff\\u6e00\\u6e01\\u6e02\\u6e03\\u6e04\\u6e06\\u6e07\\u6e08\\u6e09\\u6e0b\\u6e0f\\u6e12\\u6e13\\u6e15\\u6e18\\u6e19\\u6e1b\\u6e1c\\u6e1e\\u6e1f\\u6e22\\u6e26\\u6e27\\u6e28\\u6e2a\\u6e2c\\u6e2e\\u6e30\\u6e31\\u6e33\\u6e35\\ufffd\\u6e36\\u6e37\\u6e39\\u6e3b\\u6e3c\\u6e3d\\u6e3e\\u6e3f\\u6e40\\u6e41\\u6e42\\u6e45\\u6e46\\u6e47\\u6e48\\u6e49\\u6e4a\\u6e4b\\u6e4c\\u6e4f\\u6e50\\u6e51\\u6e52\\u6e55\\u6e57\\u6e59\\u6e5a\\u6e5c\\u6e5d\\u6e5e\\u6e60\\u6e61\\u6e62\\u6e63\\u6e64\\u6e65\\u6e66\\u6e67\\u6e68\\u6e69\\u6e6a\\u6e6c\\u6e6d\\u6e6f\\u6e70\\u6e71\\u6e72\\u6e73\\u6e74\\u6e75\\u6e76\\u6e77\\u6e78\\u6e79\\u6e7a\\u6e7b\\u6e7c\\u6e7d\\u6e80\\u6e81\\u6e82\\u6e84\\u6e87\\u6e88\\u6e8a\\u6e8b\\u6e8c\\u6e8d\\u6e8e\\u6e91\\u6e92\\u6e93\\u6e94\\u6e95\\u6e96\\u6e97\\u6e99\\u6e9a\\u6e9b\\u6e9d\\u6e9e\\u6ea0\\u6ea1\\u6ea3\\u6ea4\\u6ea6\\u6ea8\\u6ea9\\u6eab\\u6eac\\u6ead\\u6eae\\u6eb0\\u6eb3\\u6eb5\\u6eb8\\u6eb9\\u6ebc\\u6ebe\\u6ebf\\u6ec0\\u6ec3\\u6ec4\\u6ec5\\u6ec6\\u6ec8\\u6ec9\\u6eca\\u6ecc\\u6ecd\\u6ece\\u6ed0\\u6ed2\\u6ed6\\u6ed8\\u6ed9\\u6edb\\u6edc\\u6edd\\u6ee3\\u6ee7\\u6eea\\u6eeb\\u6eec\\u6eed\\u6eee\\u6eef\\ufffd\".split(\"\"),e=0;e!=r[156].length;++e)65533!==r[156][e].charCodeAt(0)&&(n[r[156][e]]=39936+e,t[39936+e]=r[156][e]);for(r[157]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6ef0\\u6ef1\\u6ef2\\u6ef3\\u6ef5\\u6ef6\\u6ef7\\u6ef8\\u6efa\\u6efb\\u6efc\\u6efd\\u6efe\\u6eff\\u6f00\\u6f01\\u6f03\\u6f04\\u6f05\\u6f07\\u6f08\\u6f0a\\u6f0b\\u6f0c\\u6f0d\\u6f0e\\u6f10\\u6f11\\u6f12\\u6f16\\u6f17\\u6f18\\u6f19\\u6f1a\\u6f1b\\u6f1c\\u6f1d\\u6f1e\\u6f1f\\u6f21\\u6f22\\u6f23\\u6f25\\u6f26\\u6f27\\u6f28\\u6f2c\\u6f2e\\u6f30\\u6f32\\u6f34\\u6f35\\u6f37\\u6f38\\u6f39\\u6f3a\\u6f3b\\u6f3c\\u6f3d\\u6f3f\\u6f40\\u6f41\\u6f42\\ufffd\\u6f43\\u6f44\\u6f45\\u6f48\\u6f49\\u6f4a\\u6f4c\\u6f4e\\u6f4f\\u6f50\\u6f51\\u6f52\\u6f53\\u6f54\\u6f55\\u6f56\\u6f57\\u6f59\\u6f5a\\u6f5b\\u6f5d\\u6f5f\\u6f60\\u6f61\\u6f63\\u6f64\\u6f65\\u6f67\\u6f68\\u6f69\\u6f6a\\u6f6b\\u6f6c\\u6f6f\\u6f70\\u6f71\\u6f73\\u6f75\\u6f76\\u6f77\\u6f79\\u6f7b\\u6f7d\\u6f7e\\u6f7f\\u6f80\\u6f81\\u6f82\\u6f83\\u6f85\\u6f86\\u6f87\\u6f8a\\u6f8b\\u6f8f\\u6f90\\u6f91\\u6f92\\u6f93\\u6f94\\u6f95\\u6f96\\u6f97\\u6f98\\u6f99\\u6f9a\\u6f9b\\u6f9d\\u6f9e\\u6f9f\\u6fa0\\u6fa2\\u6fa3\\u6fa4\\u6fa5\\u6fa6\\u6fa8\\u6fa9\\u6faa\\u6fab\\u6fac\\u6fad\\u6fae\\u6faf\\u6fb0\\u6fb1\\u6fb2\\u6fb4\\u6fb5\\u6fb7\\u6fb8\\u6fba\\u6fbb\\u6fbc\\u6fbd\\u6fbe\\u6fbf\\u6fc1\\u6fc3\\u6fc4\\u6fc5\\u6fc6\\u6fc7\\u6fc8\\u6fca\\u6fcb\\u6fcc\\u6fcd\\u6fce\\u6fcf\\u6fd0\\u6fd3\\u6fd4\\u6fd5\\u6fd6\\u6fd7\\u6fd8\\u6fd9\\u6fda\\u6fdb\\u6fdc\\u6fdd\\u6fdf\\u6fe2\\u6fe3\\u6fe4\\u6fe5\\ufffd\".split(\"\"),e=0;e!=r[157].length;++e)65533!==r[157][e].charCodeAt(0)&&(n[r[157][e]]=40192+e,t[40192+e]=r[157][e]);for(r[158]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6fe6\\u6fe7\\u6fe8\\u6fe9\\u6fea\\u6feb\\u6fec\\u6fed\\u6ff0\\u6ff1\\u6ff2\\u6ff3\\u6ff4\\u6ff5\\u6ff6\\u6ff7\\u6ff8\\u6ff9\\u6ffa\\u6ffb\\u6ffc\\u6ffd\\u6ffe\\u6fff\\u7000\\u7001\\u7002\\u7003\\u7004\\u7005\\u7006\\u7007\\u7008\\u7009\\u700a\\u700b\\u700c\\u700d\\u700e\\u700f\\u7010\\u7012\\u7013\\u7014\\u7015\\u7016\\u7017\\u7018\\u7019\\u701c\\u701d\\u701e\\u701f\\u7020\\u7021\\u7022\\u7024\\u7025\\u7026\\u7027\\u7028\\u7029\\u702a\\ufffd\\u702b\\u702c\\u702d\\u702e\\u702f\\u7030\\u7031\\u7032\\u7033\\u7034\\u7036\\u7037\\u7038\\u703a\\u703b\\u703c\\u703d\\u703e\\u703f\\u7040\\u7041\\u7042\\u7043\\u7044\\u7045\\u7046\\u7047\\u7048\\u7049\\u704a\\u704b\\u704d\\u704e\\u7050\\u7051\\u7052\\u7053\\u7054\\u7055\\u7056\\u7057\\u7058\\u7059\\u705a\\u705b\\u705c\\u705d\\u705f\\u7060\\u7061\\u7062\\u7063\\u7064\\u7065\\u7066\\u7067\\u7068\\u7069\\u706a\\u706e\\u7071\\u7072\\u7073\\u7074\\u7077\\u7079\\u707a\\u707b\\u707d\\u7081\\u7082\\u7083\\u7084\\u7086\\u7087\\u7088\\u708b\\u708c\\u708d\\u708f\\u7090\\u7091\\u7093\\u7097\\u7098\\u709a\\u709b\\u709e\\u709f\\u70a0\\u70a1\\u70a2\\u70a3\\u70a4\\u70a5\\u70a6\\u70a7\\u70a8\\u70a9\\u70aa\\u70b0\\u70b2\\u70b4\\u70b5\\u70b6\\u70ba\\u70be\\u70bf\\u70c4\\u70c5\\u70c6\\u70c7\\u70c9\\u70cb\\u70cc\\u70cd\\u70ce\\u70cf\\u70d0\\u70d1\\u70d2\\u70d3\\u70d4\\u70d5\\u70d6\\u70d7\\u70da\\ufffd\".split(\"\"),e=0;e!=r[158].length;++e)65533!==r[158][e].charCodeAt(0)&&(n[r[158][e]]=40448+e,t[40448+e]=r[158][e]);for(r[159]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u70dc\\u70dd\\u70de\\u70e0\\u70e1\\u70e2\\u70e3\\u70e5\\u70ea\\u70ee\\u70f0\\u70f1\\u70f2\\u70f3\\u70f4\\u70f5\\u70f6\\u70f8\\u70fa\\u70fb\\u70fc\\u70fe\\u70ff\\u7100\\u7101\\u7102\\u7103\\u7104\\u7105\\u7106\\u7107\\u7108\\u710b\\u710c\\u710d\\u710e\\u710f\\u7111\\u7112\\u7114\\u7117\\u711b\\u711c\\u711d\\u711e\\u711f\\u7120\\u7121\\u7122\\u7123\\u7124\\u7125\\u7127\\u7128\\u7129\\u712a\\u712b\\u712c\\u712d\\u712e\\u7132\\u7133\\u7134\\ufffd\\u7135\\u7137\\u7138\\u7139\\u713a\\u713b\\u713c\\u713d\\u713e\\u713f\\u7140\\u7141\\u7142\\u7143\\u7144\\u7146\\u7147\\u7148\\u7149\\u714b\\u714d\\u714f\\u7150\\u7151\\u7152\\u7153\\u7154\\u7155\\u7156\\u7157\\u7158\\u7159\\u715a\\u715b\\u715d\\u715f\\u7160\\u7161\\u7162\\u7163\\u7165\\u7169\\u716a\\u716b\\u716c\\u716d\\u716f\\u7170\\u7171\\u7174\\u7175\\u7176\\u7177\\u7179\\u717b\\u717c\\u717e\\u717f\\u7180\\u7181\\u7182\\u7183\\u7185\\u7186\\u7187\\u7188\\u7189\\u718b\\u718c\\u718d\\u718e\\u7190\\u7191\\u7192\\u7193\\u7195\\u7196\\u7197\\u719a\\u719b\\u719c\\u719d\\u719e\\u71a1\\u71a2\\u71a3\\u71a4\\u71a5\\u71a6\\u71a7\\u71a9\\u71aa\\u71ab\\u71ad\\u71ae\\u71af\\u71b0\\u71b1\\u71b2\\u71b4\\u71b6\\u71b7\\u71b8\\u71ba\\u71bb\\u71bc\\u71bd\\u71be\\u71bf\\u71c0\\u71c1\\u71c2\\u71c4\\u71c5\\u71c6\\u71c7\\u71c8\\u71c9\\u71ca\\u71cb\\u71cc\\u71cd\\u71cf\\u71d0\\u71d1\\u71d2\\u71d3\\ufffd\".split(\"\"),e=0;e!=r[159].length;++e)65533!==r[159][e].charCodeAt(0)&&(n[r[159][e]]=40704+e,t[40704+e]=r[159][e]);for(r[160]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u71d6\\u71d7\\u71d8\\u71d9\\u71da\\u71db\\u71dc\\u71dd\\u71de\\u71df\\u71e1\\u71e2\\u71e3\\u71e4\\u71e6\\u71e8\\u71e9\\u71ea\\u71eb\\u71ec\\u71ed\\u71ef\\u71f0\\u71f1\\u71f2\\u71f3\\u71f4\\u71f5\\u71f6\\u71f7\\u71f8\\u71fa\\u71fb\\u71fc\\u71fd\\u71fe\\u71ff\\u7200\\u7201\\u7202\\u7203\\u7204\\u7205\\u7207\\u7208\\u7209\\u720a\\u720b\\u720c\\u720d\\u720e\\u720f\\u7210\\u7211\\u7212\\u7213\\u7214\\u7215\\u7216\\u7217\\u7218\\u7219\\u721a\\ufffd\\u721b\\u721c\\u721e\\u721f\\u7220\\u7221\\u7222\\u7223\\u7224\\u7225\\u7226\\u7227\\u7229\\u722b\\u722d\\u722e\\u722f\\u7232\\u7233\\u7234\\u723a\\u723c\\u723e\\u7240\\u7241\\u7242\\u7243\\u7244\\u7245\\u7246\\u7249\\u724a\\u724b\\u724e\\u724f\\u7250\\u7251\\u7253\\u7254\\u7255\\u7257\\u7258\\u725a\\u725c\\u725e\\u7260\\u7263\\u7264\\u7265\\u7268\\u726a\\u726b\\u726c\\u726d\\u7270\\u7271\\u7273\\u7274\\u7276\\u7277\\u7278\\u727b\\u727c\\u727d\\u7282\\u7283\\u7285\\u7286\\u7287\\u7288\\u7289\\u728c\\u728e\\u7290\\u7291\\u7293\\u7294\\u7295\\u7296\\u7297\\u7298\\u7299\\u729a\\u729b\\u729c\\u729d\\u729e\\u72a0\\u72a1\\u72a2\\u72a3\\u72a4\\u72a5\\u72a6\\u72a7\\u72a8\\u72a9\\u72aa\\u72ab\\u72ae\\u72b1\\u72b2\\u72b3\\u72b5\\u72ba\\u72bb\\u72bc\\u72bd\\u72be\\u72bf\\u72c0\\u72c5\\u72c6\\u72c7\\u72c9\\u72ca\\u72cb\\u72cc\\u72cf\\u72d1\\u72d3\\u72d4\\u72d5\\u72d6\\u72d8\\u72da\\u72db\\ufffd\".split(\"\"),e=0;e!=r[160].length;++e)65533!==r[160][e].charCodeAt(0)&&(n[r[160][e]]=40960+e,t[40960+e]=r[160][e]);for(r[161]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u3000\\u3001\\u3002\\xb7\\u02c9\\u02c7\\xa8\\u3003\\u3005\\u2014\\uff5e\\u2016\\u2026\\u2018\\u2019\\u201c\\u201d\\u3014\\u3015\\u3008\\u3009\\u300a\\u300b\\u300c\\u300d\\u300e\\u300f\\u3016\\u3017\\u3010\\u3011\\xb1\\xd7\\xf7\\u2236\\u2227\\u2228\\u2211\\u220f\\u222a\\u2229\\u2208\\u2237\\u221a\\u22a5\\u2225\\u2220\\u2312\\u2299\\u222b\\u222e\\u2261\\u224c\\u2248\\u223d\\u221d\\u2260\\u226e\\u226f\\u2264\\u2265\\u221e\\u2235\\u2234\\u2642\\u2640\\xb0\\u2032\\u2033\\u2103\\uff04\\xa4\\uffe0\\uffe1\\u2030\\xa7\\u2116\\u2606\\u2605\\u25cb\\u25cf\\u25ce\\u25c7\\u25c6\\u25a1\\u25a0\\u25b3\\u25b2\\u203b\\u2192\\u2190\\u2191\\u2193\\u3013\\ufffd\".split(\"\"),e=0;e!=r[161].length;++e)65533!==r[161][e].charCodeAt(0)&&(n[r[161][e]]=41216+e,t[41216+e]=r[161][e]);for(r[162]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u2170\\u2171\\u2172\\u2173\\u2174\\u2175\\u2176\\u2177\\u2178\\u2179\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u2488\\u2489\\u248a\\u248b\\u248c\\u248d\\u248e\\u248f\\u2490\\u2491\\u2492\\u2493\\u2494\\u2495\\u2496\\u2497\\u2498\\u2499\\u249a\\u249b\\u2474\\u2475\\u2476\\u2477\\u2478\\u2479\\u247a\\u247b\\u247c\\u247d\\u247e\\u247f\\u2480\\u2481\\u2482\\u2483\\u2484\\u2485\\u2486\\u2487\\u2460\\u2461\\u2462\\u2463\\u2464\\u2465\\u2466\\u2467\\u2468\\u2469\\ufffd\\ufffd\\u3220\\u3221\\u3222\\u3223\\u3224\\u3225\\u3226\\u3227\\u3228\\u3229\\ufffd\\ufffd\\u2160\\u2161\\u2162\\u2163\\u2164\\u2165\\u2166\\u2167\\u2168\\u2169\\u216a\\u216b\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[162].length;++e)65533!==r[162][e].charCodeAt(0)&&(n[r[162][e]]=41472+e,t[41472+e]=r[162][e]);for(r[163]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uff01\\uff02\\uff03\\uffe5\\uff05\\uff06\\uff07\\uff08\\uff09\\uff0a\\uff0b\\uff0c\\uff0d\\uff0e\\uff0f\\uff10\\uff11\\uff12\\uff13\\uff14\\uff15\\uff16\\uff17\\uff18\\uff19\\uff1a\\uff1b\\uff1c\\uff1d\\uff1e\\uff1f\\uff20\\uff21\\uff22\\uff23\\uff24\\uff25\\uff26\\uff27\\uff28\\uff29\\uff2a\\uff2b\\uff2c\\uff2d\\uff2e\\uff2f\\uff30\\uff31\\uff32\\uff33\\uff34\\uff35\\uff36\\uff37\\uff38\\uff39\\uff3a\\uff3b\\uff3c\\uff3d\\uff3e\\uff3f\\uff40\\uff41\\uff42\\uff43\\uff44\\uff45\\uff46\\uff47\\uff48\\uff49\\uff4a\\uff4b\\uff4c\\uff4d\\uff4e\\uff4f\\uff50\\uff51\\uff52\\uff53\\uff54\\uff55\\uff56\\uff57\\uff58\\uff59\\uff5a\\uff5b\\uff5c\\uff5d\\uffe3\\ufffd\".split(\"\"),e=0;e!=r[163].length;++e)65533!==r[163][e].charCodeAt(0)&&(n[r[163][e]]=41728+e,t[41728+e]=r[163][e]);for(r[164]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u3041\\u3042\\u3043\\u3044\\u3045\\u3046\\u3047\\u3048\\u3049\\u304a\\u304b\\u304c\\u304d\\u304e\\u304f\\u3050\\u3051\\u3052\\u3053\\u3054\\u3055\\u3056\\u3057\\u3058\\u3059\\u305a\\u305b\\u305c\\u305d\\u305e\\u305f\\u3060\\u3061\\u3062\\u3063\\u3064\\u3065\\u3066\\u3067\\u3068\\u3069\\u306a\\u306b\\u306c\\u306d\\u306e\\u306f\\u3070\\u3071\\u3072\\u3073\\u3074\\u3075\\u3076\\u3077\\u3078\\u3079\\u307a\\u307b\\u307c\\u307d\\u307e\\u307f\\u3080\\u3081\\u3082\\u3083\\u3084\\u3085\\u3086\\u3087\\u3088\\u3089\\u308a\\u308b\\u308c\\u308d\\u308e\\u308f\\u3090\\u3091\\u3092\\u3093\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[164].length;++e)65533!==r[164][e].charCodeAt(0)&&(n[r[164][e]]=41984+e,t[41984+e]=r[164][e]);for(r[165]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u30a1\\u30a2\\u30a3\\u30a4\\u30a5\\u30a6\\u30a7\\u30a8\\u30a9\\u30aa\\u30ab\\u30ac\\u30ad\\u30ae\\u30af\\u30b0\\u30b1\\u30b2\\u30b3\\u30b4\\u30b5\\u30b6\\u30b7\\u30b8\\u30b9\\u30ba\\u30bb\\u30bc\\u30bd\\u30be\\u30bf\\u30c0\\u30c1\\u30c2\\u30c3\\u30c4\\u30c5\\u30c6\\u30c7\\u30c8\\u30c9\\u30ca\\u30cb\\u30cc\\u30cd\\u30ce\\u30cf\\u30d0\\u30d1\\u30d2\\u30d3\\u30d4\\u30d5\\u30d6\\u30d7\\u30d8\\u30d9\\u30da\\u30db\\u30dc\\u30dd\\u30de\\u30df\\u30e0\\u30e1\\u30e2\\u30e3\\u30e4\\u30e5\\u30e6\\u30e7\\u30e8\\u30e9\\u30ea\\u30eb\\u30ec\\u30ed\\u30ee\\u30ef\\u30f0\\u30f1\\u30f2\\u30f3\\u30f4\\u30f5\\u30f6\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[165].length;++e)65533!==r[165][e].charCodeAt(0)&&(n[r[165][e]]=42240+e,t[42240+e]=r[165][e]);for(r[166]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufe35\\ufe36\\ufe39\\ufe3a\\ufe3f\\ufe40\\ufe3d\\ufe3e\\ufe41\\ufe42\\ufe43\\ufe44\\ufffd\\ufffd\\ufe3b\\ufe3c\\ufe37\\ufe38\\ufe31\\ufffd\\ufe33\\ufe34\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[166].length;++e)65533!==r[166][e].charCodeAt(0)&&(n[r[166][e]]=42496+e,t[42496+e]=r[166][e]);for(r[167]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u0410\\u0411\\u0412\\u0413\\u0414\\u0415\\u0401\\u0416\\u0417\\u0418\\u0419\\u041a\\u041b\\u041c\\u041d\\u041e\\u041f\\u0420\\u0421\\u0422\\u0423\\u0424\\u0425\\u0426\\u0427\\u0428\\u0429\\u042a\\u042b\\u042c\\u042d\\u042e\\u042f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u0430\\u0431\\u0432\\u0433\\u0434\\u0435\\u0451\\u0436\\u0437\\u0438\\u0439\\u043a\\u043b\\u043c\\u043d\\u043e\\u043f\\u0440\\u0441\\u0442\\u0443\\u0444\\u0445\\u0446\\u0447\\u0448\\u0449\\u044a\\u044b\\u044c\\u044d\\u044e\\u044f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[167].length;++e)65533!==r[167][e].charCodeAt(0)&&(n[r[167][e]]=42752+e,t[42752+e]=r[167][e]);for(r[168]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u02ca\\u02cb\\u02d9\\u2013\\u2015\\u2025\\u2035\\u2105\\u2109\\u2196\\u2197\\u2198\\u2199\\u2215\\u221f\\u2223\\u2252\\u2266\\u2267\\u22bf\\u2550\\u2551\\u2552\\u2553\\u2554\\u2555\\u2556\\u2557\\u2558\\u2559\\u255a\\u255b\\u255c\\u255d\\u255e\\u255f\\u2560\\u2561\\u2562\\u2563\\u2564\\u2565\\u2566\\u2567\\u2568\\u2569\\u256a\\u256b\\u256c\\u256d\\u256e\\u256f\\u2570\\u2571\\u2572\\u2573\\u2581\\u2582\\u2583\\u2584\\u2585\\u2586\\u2587\\ufffd\\u2588\\u2589\\u258a\\u258b\\u258c\\u258d\\u258e\\u258f\\u2593\\u2594\\u2595\\u25bc\\u25bd\\u25e2\\u25e3\\u25e4\\u25e5\\u2609\\u2295\\u3012\\u301d\\u301e\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u0101\\xe1\\u01ce\\xe0\\u0113\\xe9\\u011b\\xe8\\u012b\\xed\\u01d0\\xec\\u014d\\xf3\\u01d2\\xf2\\u016b\\xfa\\u01d4\\xf9\\u01d6\\u01d8\\u01da\\u01dc\\xfc\\xea\\u0251\\ufffd\\u0144\\u0148\\ufffd\\u0261\\ufffd\\ufffd\\ufffd\\ufffd\\u3105\\u3106\\u3107\\u3108\\u3109\\u310a\\u310b\\u310c\\u310d\\u310e\\u310f\\u3110\\u3111\\u3112\\u3113\\u3114\\u3115\\u3116\\u3117\\u3118\\u3119\\u311a\\u311b\\u311c\\u311d\\u311e\\u311f\\u3120\\u3121\\u3122\\u3123\\u3124\\u3125\\u3126\\u3127\\u3128\\u3129\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[168].length;++e)65533!==r[168][e].charCodeAt(0)&&(n[r[168][e]]=43008+e,t[43008+e]=r[168][e]);for(r[169]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u3021\\u3022\\u3023\\u3024\\u3025\\u3026\\u3027\\u3028\\u3029\\u32a3\\u338e\\u338f\\u339c\\u339d\\u339e\\u33a1\\u33c4\\u33ce\\u33d1\\u33d2\\u33d5\\ufe30\\uffe2\\uffe4\\ufffd\\u2121\\u3231\\ufffd\\u2010\\ufffd\\ufffd\\ufffd\\u30fc\\u309b\\u309c\\u30fd\\u30fe\\u3006\\u309d\\u309e\\ufe49\\ufe4a\\ufe4b\\ufe4c\\ufe4d\\ufe4e\\ufe4f\\ufe50\\ufe51\\ufe52\\ufe54\\ufe55\\ufe56\\ufe57\\ufe59\\ufe5a\\ufe5b\\ufe5c\\ufe5d\\ufe5e\\ufe5f\\ufe60\\ufe61\\ufffd\\ufe62\\ufe63\\ufe64\\ufe65\\ufe66\\ufe68\\ufe69\\ufe6a\\ufe6b\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u3007\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u2500\\u2501\\u2502\\u2503\\u2504\\u2505\\u2506\\u2507\\u2508\\u2509\\u250a\\u250b\\u250c\\u250d\\u250e\\u250f\\u2510\\u2511\\u2512\\u2513\\u2514\\u2515\\u2516\\u2517\\u2518\\u2519\\u251a\\u251b\\u251c\\u251d\\u251e\\u251f\\u2520\\u2521\\u2522\\u2523\\u2524\\u2525\\u2526\\u2527\\u2528\\u2529\\u252a\\u252b\\u252c\\u252d\\u252e\\u252f\\u2530\\u2531\\u2532\\u2533\\u2534\\u2535\\u2536\\u2537\\u2538\\u2539\\u253a\\u253b\\u253c\\u253d\\u253e\\u253f\\u2540\\u2541\\u2542\\u2543\\u2544\\u2545\\u2546\\u2547\\u2548\\u2549\\u254a\\u254b\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[169].length;++e)65533!==r[169][e].charCodeAt(0)&&(n[r[169][e]]=43264+e,t[43264+e]=r[169][e]);for(r[170]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u72dc\\u72dd\\u72df\\u72e2\\u72e3\\u72e4\\u72e5\\u72e6\\u72e7\\u72ea\\u72eb\\u72f5\\u72f6\\u72f9\\u72fd\\u72fe\\u72ff\\u7300\\u7302\\u7304\\u7305\\u7306\\u7307\\u7308\\u7309\\u730b\\u730c\\u730d\\u730f\\u7310\\u7311\\u7312\\u7314\\u7318\\u7319\\u731a\\u731f\\u7320\\u7323\\u7324\\u7326\\u7327\\u7328\\u732d\\u732f\\u7330\\u7332\\u7333\\u7335\\u7336\\u733a\\u733b\\u733c\\u733d\\u7340\\u7341\\u7342\\u7343\\u7344\\u7345\\u7346\\u7347\\u7348\\ufffd\\u7349\\u734a\\u734b\\u734c\\u734e\\u734f\\u7351\\u7353\\u7354\\u7355\\u7356\\u7358\\u7359\\u735a\\u735b\\u735c\\u735d\\u735e\\u735f\\u7361\\u7362\\u7363\\u7364\\u7365\\u7366\\u7367\\u7368\\u7369\\u736a\\u736b\\u736e\\u7370\\u7371\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[170].length;++e)65533!==r[170][e].charCodeAt(0)&&(n[r[170][e]]=43520+e,t[43520+e]=r[170][e]);for(r[171]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7372\\u7373\\u7374\\u7375\\u7376\\u7377\\u7378\\u7379\\u737a\\u737b\\u737c\\u737d\\u737f\\u7380\\u7381\\u7382\\u7383\\u7385\\u7386\\u7388\\u738a\\u738c\\u738d\\u738f\\u7390\\u7392\\u7393\\u7394\\u7395\\u7397\\u7398\\u7399\\u739a\\u739c\\u739d\\u739e\\u73a0\\u73a1\\u73a3\\u73a4\\u73a5\\u73a6\\u73a7\\u73a8\\u73aa\\u73ac\\u73ad\\u73b1\\u73b4\\u73b5\\u73b6\\u73b8\\u73b9\\u73bc\\u73bd\\u73be\\u73bf\\u73c1\\u73c3\\u73c4\\u73c5\\u73c6\\u73c7\\ufffd\\u73cb\\u73cc\\u73ce\\u73d2\\u73d3\\u73d4\\u73d5\\u73d6\\u73d7\\u73d8\\u73da\\u73db\\u73dc\\u73dd\\u73df\\u73e1\\u73e2\\u73e3\\u73e4\\u73e6\\u73e8\\u73ea\\u73eb\\u73ec\\u73ee\\u73ef\\u73f0\\u73f1\\u73f3\\u73f4\\u73f5\\u73f6\\u73f7\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[171].length;++e)65533!==r[171][e].charCodeAt(0)&&(n[r[171][e]]=43776+e,t[43776+e]=r[171][e]);for(r[172]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u73f8\\u73f9\\u73fa\\u73fb\\u73fc\\u73fd\\u73fe\\u73ff\\u7400\\u7401\\u7402\\u7404\\u7407\\u7408\\u740b\\u740c\\u740d\\u740e\\u7411\\u7412\\u7413\\u7414\\u7415\\u7416\\u7417\\u7418\\u7419\\u741c\\u741d\\u741e\\u741f\\u7420\\u7421\\u7423\\u7424\\u7427\\u7429\\u742b\\u742d\\u742f\\u7431\\u7432\\u7437\\u7438\\u7439\\u743a\\u743b\\u743d\\u743e\\u743f\\u7440\\u7442\\u7443\\u7444\\u7445\\u7446\\u7447\\u7448\\u7449\\u744a\\u744b\\u744c\\u744d\\ufffd\\u744e\\u744f\\u7450\\u7451\\u7452\\u7453\\u7454\\u7456\\u7458\\u745d\\u7460\\u7461\\u7462\\u7463\\u7464\\u7465\\u7466\\u7467\\u7468\\u7469\\u746a\\u746b\\u746c\\u746e\\u746f\\u7471\\u7472\\u7473\\u7474\\u7475\\u7478\\u7479\\u747a\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[172].length;++e)65533!==r[172][e].charCodeAt(0)&&(n[r[172][e]]=44032+e,t[44032+e]=r[172][e]);for(r[173]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u747b\\u747c\\u747d\\u747f\\u7482\\u7484\\u7485\\u7486\\u7488\\u7489\\u748a\\u748c\\u748d\\u748f\\u7491\\u7492\\u7493\\u7494\\u7495\\u7496\\u7497\\u7498\\u7499\\u749a\\u749b\\u749d\\u749f\\u74a0\\u74a1\\u74a2\\u74a3\\u74a4\\u74a5\\u74a6\\u74aa\\u74ab\\u74ac\\u74ad\\u74ae\\u74af\\u74b0\\u74b1\\u74b2\\u74b3\\u74b4\\u74b5\\u74b6\\u74b7\\u74b8\\u74b9\\u74bb\\u74bc\\u74bd\\u74be\\u74bf\\u74c0\\u74c1\\u74c2\\u74c3\\u74c4\\u74c5\\u74c6\\u74c7\\ufffd\\u74c8\\u74c9\\u74ca\\u74cb\\u74cc\\u74cd\\u74ce\\u74cf\\u74d0\\u74d1\\u74d3\\u74d4\\u74d5\\u74d6\\u74d7\\u74d8\\u74d9\\u74da\\u74db\\u74dd\\u74df\\u74e1\\u74e5\\u74e7\\u74e8\\u74e9\\u74ea\\u74eb\\u74ec\\u74ed\\u74f0\\u74f1\\u74f2\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[173].length;++e)65533!==r[173][e].charCodeAt(0)&&(n[r[173][e]]=44288+e,t[44288+e]=r[173][e]);for(r[174]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u74f3\\u74f5\\u74f8\\u74f9\\u74fa\\u74fb\\u74fc\\u74fd\\u74fe\\u7500\\u7501\\u7502\\u7503\\u7505\\u7506\\u7507\\u7508\\u7509\\u750a\\u750b\\u750c\\u750e\\u7510\\u7512\\u7514\\u7515\\u7516\\u7517\\u751b\\u751d\\u751e\\u7520\\u7521\\u7522\\u7523\\u7524\\u7526\\u7527\\u752a\\u752e\\u7534\\u7536\\u7539\\u753c\\u753d\\u753f\\u7541\\u7542\\u7543\\u7544\\u7546\\u7547\\u7549\\u754a\\u754d\\u7550\\u7551\\u7552\\u7553\\u7555\\u7556\\u7557\\u7558\\ufffd\\u755d\\u755e\\u755f\\u7560\\u7561\\u7562\\u7563\\u7564\\u7567\\u7568\\u7569\\u756b\\u756c\\u756d\\u756e\\u756f\\u7570\\u7571\\u7573\\u7575\\u7576\\u7577\\u757a\\u757b\\u757c\\u757d\\u757e\\u7580\\u7581\\u7582\\u7584\\u7585\\u7587\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[174].length;++e)65533!==r[174][e].charCodeAt(0)&&(n[r[174][e]]=44544+e,t[44544+e]=r[174][e]);for(r[175]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7588\\u7589\\u758a\\u758c\\u758d\\u758e\\u7590\\u7593\\u7595\\u7598\\u759b\\u759c\\u759e\\u75a2\\u75a6\\u75a7\\u75a8\\u75a9\\u75aa\\u75ad\\u75b6\\u75b7\\u75ba\\u75bb\\u75bf\\u75c0\\u75c1\\u75c6\\u75cb\\u75cc\\u75ce\\u75cf\\u75d0\\u75d1\\u75d3\\u75d7\\u75d9\\u75da\\u75dc\\u75dd\\u75df\\u75e0\\u75e1\\u75e5\\u75e9\\u75ec\\u75ed\\u75ee\\u75ef\\u75f2\\u75f3\\u75f5\\u75f6\\u75f7\\u75f8\\u75fa\\u75fb\\u75fd\\u75fe\\u7602\\u7604\\u7606\\u7607\\ufffd\\u7608\\u7609\\u760b\\u760d\\u760e\\u760f\\u7611\\u7612\\u7613\\u7614\\u7616\\u761a\\u761c\\u761d\\u761e\\u7621\\u7623\\u7627\\u7628\\u762c\\u762e\\u762f\\u7631\\u7632\\u7636\\u7637\\u7639\\u763a\\u763b\\u763d\\u7641\\u7642\\u7644\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[175].length;++e)65533!==r[175][e].charCodeAt(0)&&(n[r[175][e]]=44800+e,t[44800+e]=r[175][e]);for(r[176]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7645\\u7646\\u7647\\u7648\\u7649\\u764a\\u764b\\u764e\\u764f\\u7650\\u7651\\u7652\\u7653\\u7655\\u7657\\u7658\\u7659\\u765a\\u765b\\u765d\\u765f\\u7660\\u7661\\u7662\\u7664\\u7665\\u7666\\u7667\\u7668\\u7669\\u766a\\u766c\\u766d\\u766e\\u7670\\u7671\\u7672\\u7673\\u7674\\u7675\\u7676\\u7677\\u7679\\u767a\\u767c\\u767f\\u7680\\u7681\\u7683\\u7685\\u7689\\u768a\\u768c\\u768d\\u768f\\u7690\\u7692\\u7694\\u7695\\u7697\\u7698\\u769a\\u769b\\ufffd\\u769c\\u769d\\u769e\\u769f\\u76a0\\u76a1\\u76a2\\u76a3\\u76a5\\u76a6\\u76a7\\u76a8\\u76a9\\u76aa\\u76ab\\u76ac\\u76ad\\u76af\\u76b0\\u76b3\\u76b5\\u76b6\\u76b7\\u76b8\\u76b9\\u76ba\\u76bb\\u76bc\\u76bd\\u76be\\u76c0\\u76c1\\u76c3\\u554a\\u963f\\u57c3\\u6328\\u54ce\\u5509\\u54c0\\u7691\\u764c\\u853c\\u77ee\\u827e\\u788d\\u7231\\u9698\\u978d\\u6c28\\u5b89\\u4ffa\\u6309\\u6697\\u5cb8\\u80fa\\u6848\\u80ae\\u6602\\u76ce\\u51f9\\u6556\\u71ac\\u7ff1\\u8884\\u50b2\\u5965\\u61ca\\u6fb3\\u82ad\\u634c\\u6252\\u53ed\\u5427\\u7b06\\u516b\\u75a4\\u5df4\\u62d4\\u8dcb\\u9776\\u628a\\u8019\\u575d\\u9738\\u7f62\\u7238\\u767d\\u67cf\\u767e\\u6446\\u4f70\\u8d25\\u62dc\\u7a17\\u6591\\u73ed\\u642c\\u6273\\u822c\\u9881\\u677f\\u7248\\u626e\\u62cc\\u4f34\\u74e3\\u534a\\u529e\\u7eca\\u90a6\\u5e2e\\u6886\\u699c\\u8180\\u7ed1\\u68d2\\u78c5\\u868c\\u9551\\u508d\\u8c24\\u82de\\u80de\\u5305\\u8912\\u5265\\ufffd\".split(\"\"),e=0;e!=r[176].length;++e)65533!==r[176][e].charCodeAt(0)&&(n[r[176][e]]=45056+e,t[45056+e]=r[176][e]);for(r[177]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u76c4\\u76c7\\u76c9\\u76cb\\u76cc\\u76d3\\u76d5\\u76d9\\u76da\\u76dc\\u76dd\\u76de\\u76e0\\u76e1\\u76e2\\u76e3\\u76e4\\u76e6\\u76e7\\u76e8\\u76e9\\u76ea\\u76eb\\u76ec\\u76ed\\u76f0\\u76f3\\u76f5\\u76f6\\u76f7\\u76fa\\u76fb\\u76fd\\u76ff\\u7700\\u7702\\u7703\\u7705\\u7706\\u770a\\u770c\\u770e\\u770f\\u7710\\u7711\\u7712\\u7713\\u7714\\u7715\\u7716\\u7717\\u7718\\u771b\\u771c\\u771d\\u771e\\u7721\\u7723\\u7724\\u7725\\u7727\\u772a\\u772b\\ufffd\\u772c\\u772e\\u7730\\u7731\\u7732\\u7733\\u7734\\u7739\\u773b\\u773d\\u773e\\u773f\\u7742\\u7744\\u7745\\u7746\\u7748\\u7749\\u774a\\u774b\\u774c\\u774d\\u774e\\u774f\\u7752\\u7753\\u7754\\u7755\\u7756\\u7757\\u7758\\u7759\\u775c\\u8584\\u96f9\\u4fdd\\u5821\\u9971\\u5b9d\\u62b1\\u62a5\\u66b4\\u8c79\\u9c8d\\u7206\\u676f\\u7891\\u60b2\\u5351\\u5317\\u8f88\\u80cc\\u8d1d\\u94a1\\u500d\\u72c8\\u5907\\u60eb\\u7119\\u88ab\\u5954\\u82ef\\u672c\\u7b28\\u5d29\\u7ef7\\u752d\\u6cf5\\u8e66\\u8ff8\\u903c\\u9f3b\\u6bd4\\u9119\\u7b14\\u5f7c\\u78a7\\u84d6\\u853d\\u6bd5\\u6bd9\\u6bd6\\u5e01\\u5e87\\u75f9\\u95ed\\u655d\\u5f0a\\u5fc5\\u8f9f\\u58c1\\u81c2\\u907f\\u965b\\u97ad\\u8fb9\\u7f16\\u8d2c\\u6241\\u4fbf\\u53d8\\u535e\\u8fa8\\u8fa9\\u8fab\\u904d\\u6807\\u5f6a\\u8198\\u8868\\u9cd6\\u618b\\u522b\\u762a\\u5f6c\\u658c\\u6fd2\\u6ee8\\u5bbe\\u6448\\u5175\\u51b0\\u67c4\\u4e19\\u79c9\\u997c\\u70b3\\ufffd\".split(\"\"),e=0;e!=r[177].length;++e)65533!==r[177][e].charCodeAt(0)&&(n[r[177][e]]=45312+e,t[45312+e]=r[177][e]);for(r[178]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u775d\\u775e\\u775f\\u7760\\u7764\\u7767\\u7769\\u776a\\u776d\\u776e\\u776f\\u7770\\u7771\\u7772\\u7773\\u7774\\u7775\\u7776\\u7777\\u7778\\u777a\\u777b\\u777c\\u7781\\u7782\\u7783\\u7786\\u7787\\u7788\\u7789\\u778a\\u778b\\u778f\\u7790\\u7793\\u7794\\u7795\\u7796\\u7797\\u7798\\u7799\\u779a\\u779b\\u779c\\u779d\\u779e\\u77a1\\u77a3\\u77a4\\u77a6\\u77a8\\u77ab\\u77ad\\u77ae\\u77af\\u77b1\\u77b2\\u77b4\\u77b6\\u77b7\\u77b8\\u77b9\\u77ba\\ufffd\\u77bc\\u77be\\u77c0\\u77c1\\u77c2\\u77c3\\u77c4\\u77c5\\u77c6\\u77c7\\u77c8\\u77c9\\u77ca\\u77cb\\u77cc\\u77ce\\u77cf\\u77d0\\u77d1\\u77d2\\u77d3\\u77d4\\u77d5\\u77d6\\u77d8\\u77d9\\u77da\\u77dd\\u77de\\u77df\\u77e0\\u77e1\\u77e4\\u75c5\\u5e76\\u73bb\\u83e0\\u64ad\\u62e8\\u94b5\\u6ce2\\u535a\\u52c3\\u640f\\u94c2\\u7b94\\u4f2f\\u5e1b\\u8236\\u8116\\u818a\\u6e24\\u6cca\\u9a73\\u6355\\u535c\\u54fa\\u8865\\u57e0\\u4e0d\\u5e03\\u6b65\\u7c3f\\u90e8\\u6016\\u64e6\\u731c\\u88c1\\u6750\\u624d\\u8d22\\u776c\\u8e29\\u91c7\\u5f69\\u83dc\\u8521\\u9910\\u53c2\\u8695\\u6b8b\\u60ed\\u60e8\\u707f\\u82cd\\u8231\\u4ed3\\u6ca7\\u85cf\\u64cd\\u7cd9\\u69fd\\u66f9\\u8349\\u5395\\u7b56\\u4fa7\\u518c\\u6d4b\\u5c42\\u8e6d\\u63d2\\u53c9\\u832c\\u8336\\u67e5\\u78b4\\u643d\\u5bdf\\u5c94\\u5dee\\u8be7\\u62c6\\u67f4\\u8c7a\\u6400\\u63ba\\u8749\\u998b\\u8c17\\u7f20\\u94f2\\u4ea7\\u9610\\u98a4\\u660c\\u7316\\ufffd\".split(\"\"),e=0;e!=r[178].length;++e)65533!==r[178][e].charCodeAt(0)&&(n[r[178][e]]=45568+e,t[45568+e]=r[178][e]);for(r[179]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u77e6\\u77e8\\u77ea\\u77ef\\u77f0\\u77f1\\u77f2\\u77f4\\u77f5\\u77f7\\u77f9\\u77fa\\u77fb\\u77fc\\u7803\\u7804\\u7805\\u7806\\u7807\\u7808\\u780a\\u780b\\u780e\\u780f\\u7810\\u7813\\u7815\\u7819\\u781b\\u781e\\u7820\\u7821\\u7822\\u7824\\u7828\\u782a\\u782b\\u782e\\u782f\\u7831\\u7832\\u7833\\u7835\\u7836\\u783d\\u783f\\u7841\\u7842\\u7843\\u7844\\u7846\\u7848\\u7849\\u784a\\u784b\\u784d\\u784f\\u7851\\u7853\\u7854\\u7858\\u7859\\u785a\\ufffd\\u785b\\u785c\\u785e\\u785f\\u7860\\u7861\\u7862\\u7863\\u7864\\u7865\\u7866\\u7867\\u7868\\u7869\\u786f\\u7870\\u7871\\u7872\\u7873\\u7874\\u7875\\u7876\\u7878\\u7879\\u787a\\u787b\\u787d\\u787e\\u787f\\u7880\\u7881\\u7882\\u7883\\u573a\\u5c1d\\u5e38\\u957f\\u507f\\u80a0\\u5382\\u655e\\u7545\\u5531\\u5021\\u8d85\\u6284\\u949e\\u671d\\u5632\\u6f6e\\u5de2\\u5435\\u7092\\u8f66\\u626f\\u64a4\\u63a3\\u5f7b\\u6f88\\u90f4\\u81e3\\u8fb0\\u5c18\\u6668\\u5ff1\\u6c89\\u9648\\u8d81\\u886c\\u6491\\u79f0\\u57ce\\u6a59\\u6210\\u5448\\u4e58\\u7a0b\\u60e9\\u6f84\\u8bda\\u627f\\u901e\\u9a8b\\u79e4\\u5403\\u75f4\\u6301\\u5319\\u6c60\\u8fdf\\u5f1b\\u9a70\\u803b\\u9f7f\\u4f88\\u5c3a\\u8d64\\u7fc5\\u65a5\\u70bd\\u5145\\u51b2\\u866b\\u5d07\\u5ba0\\u62bd\\u916c\\u7574\\u8e0c\\u7a20\\u6101\\u7b79\\u4ec7\\u7ef8\\u7785\\u4e11\\u81ed\\u521d\\u51fa\\u6a71\\u53a8\\u8e87\\u9504\\u96cf\\u6ec1\\u9664\\u695a\\ufffd\".split(\"\"),e=0;e!=r[179].length;++e)65533!==r[179][e].charCodeAt(0)&&(n[r[179][e]]=45824+e,t[45824+e]=r[179][e]);for(r[180]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7884\\u7885\\u7886\\u7888\\u788a\\u788b\\u788f\\u7890\\u7892\\u7894\\u7895\\u7896\\u7899\\u789d\\u789e\\u78a0\\u78a2\\u78a4\\u78a6\\u78a8\\u78a9\\u78aa\\u78ab\\u78ac\\u78ad\\u78ae\\u78af\\u78b5\\u78b6\\u78b7\\u78b8\\u78ba\\u78bb\\u78bc\\u78bd\\u78bf\\u78c0\\u78c2\\u78c3\\u78c4\\u78c6\\u78c7\\u78c8\\u78cc\\u78cd\\u78ce\\u78cf\\u78d1\\u78d2\\u78d3\\u78d6\\u78d7\\u78d8\\u78da\\u78db\\u78dc\\u78dd\\u78de\\u78df\\u78e0\\u78e1\\u78e2\\u78e3\\ufffd\\u78e4\\u78e5\\u78e6\\u78e7\\u78e9\\u78ea\\u78eb\\u78ed\\u78ee\\u78ef\\u78f0\\u78f1\\u78f3\\u78f5\\u78f6\\u78f8\\u78f9\\u78fb\\u78fc\\u78fd\\u78fe\\u78ff\\u7900\\u7902\\u7903\\u7904\\u7906\\u7907\\u7908\\u7909\\u790a\\u790b\\u790c\\u7840\\u50a8\\u77d7\\u6410\\u89e6\\u5904\\u63e3\\u5ddd\\u7a7f\\u693d\\u4f20\\u8239\\u5598\\u4e32\\u75ae\\u7a97\\u5e62\\u5e8a\\u95ef\\u521b\\u5439\\u708a\\u6376\\u9524\\u5782\\u6625\\u693f\\u9187\\u5507\\u6df3\\u7eaf\\u8822\\u6233\\u7ef0\\u75b5\\u8328\\u78c1\\u96cc\\u8f9e\\u6148\\u74f7\\u8bcd\\u6b64\\u523a\\u8d50\\u6b21\\u806a\\u8471\\u56f1\\u5306\\u4ece\\u4e1b\\u51d1\\u7c97\\u918b\\u7c07\\u4fc3\\u8e7f\\u7be1\\u7a9c\\u6467\\u5d14\\u50ac\\u8106\\u7601\\u7cb9\\u6dec\\u7fe0\\u6751\\u5b58\\u5bf8\\u78cb\\u64ae\\u6413\\u63aa\\u632b\\u9519\\u642d\\u8fbe\\u7b54\\u7629\\u6253\\u5927\\u5446\\u6b79\\u50a3\\u6234\\u5e26\\u6b86\\u4ee3\\u8d37\\u888b\\u5f85\\u902e\\ufffd\".split(\"\"),e=0;e!=r[180].length;++e)65533!==r[180][e].charCodeAt(0)&&(n[r[180][e]]=46080+e,t[46080+e]=r[180][e]);for(r[181]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u790d\\u790e\\u790f\\u7910\\u7911\\u7912\\u7914\\u7915\\u7916\\u7917\\u7918\\u7919\\u791a\\u791b\\u791c\\u791d\\u791f\\u7920\\u7921\\u7922\\u7923\\u7925\\u7926\\u7927\\u7928\\u7929\\u792a\\u792b\\u792c\\u792d\\u792e\\u792f\\u7930\\u7931\\u7932\\u7933\\u7935\\u7936\\u7937\\u7938\\u7939\\u793d\\u793f\\u7942\\u7943\\u7944\\u7945\\u7947\\u794a\\u794b\\u794c\\u794d\\u794e\\u794f\\u7950\\u7951\\u7952\\u7954\\u7955\\u7958\\u7959\\u7961\\u7963\\ufffd\\u7964\\u7966\\u7969\\u796a\\u796b\\u796c\\u796e\\u7970\\u7971\\u7972\\u7973\\u7974\\u7975\\u7976\\u7979\\u797b\\u797c\\u797d\\u797e\\u797f\\u7982\\u7983\\u7986\\u7987\\u7988\\u7989\\u798b\\u798c\\u798d\\u798e\\u7990\\u7991\\u7992\\u6020\\u803d\\u62c5\\u4e39\\u5355\\u90f8\\u63b8\\u80c6\\u65e6\\u6c2e\\u4f46\\u60ee\\u6de1\\u8bde\\u5f39\\u86cb\\u5f53\\u6321\\u515a\\u8361\\u6863\\u5200\\u6363\\u8e48\\u5012\\u5c9b\\u7977\\u5bfc\\u5230\\u7a3b\\u60bc\\u9053\\u76d7\\u5fb7\\u5f97\\u7684\\u8e6c\\u706f\\u767b\\u7b49\\u77aa\\u51f3\\u9093\\u5824\\u4f4e\\u6ef4\\u8fea\\u654c\\u7b1b\\u72c4\\u6da4\\u7fdf\\u5ae1\\u62b5\\u5e95\\u5730\\u8482\\u7b2c\\u5e1d\\u5f1f\\u9012\\u7f14\\u98a0\\u6382\\u6ec7\\u7898\\u70b9\\u5178\\u975b\\u57ab\\u7535\\u4f43\\u7538\\u5e97\\u60e6\\u5960\\u6dc0\\u6bbf\\u7889\\u53fc\\u96d5\\u51cb\\u5201\\u6389\\u540a\\u9493\\u8c03\\u8dcc\\u7239\\u789f\\u8776\\u8fed\\u8c0d\\u53e0\\ufffd\".split(\"\"),e=0;e!=r[181].length;++e)65533!==r[181][e].charCodeAt(0)&&(n[r[181][e]]=46336+e,t[46336+e]=r[181][e]);for(r[182]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7993\\u7994\\u7995\\u7996\\u7997\\u7998\\u7999\\u799b\\u799c\\u799d\\u799e\\u799f\\u79a0\\u79a1\\u79a2\\u79a3\\u79a4\\u79a5\\u79a6\\u79a8\\u79a9\\u79aa\\u79ab\\u79ac\\u79ad\\u79ae\\u79af\\u79b0\\u79b1\\u79b2\\u79b4\\u79b5\\u79b6\\u79b7\\u79b8\\u79bc\\u79bf\\u79c2\\u79c4\\u79c5\\u79c7\\u79c8\\u79ca\\u79cc\\u79ce\\u79cf\\u79d0\\u79d3\\u79d4\\u79d6\\u79d7\\u79d9\\u79da\\u79db\\u79dc\\u79dd\\u79de\\u79e0\\u79e1\\u79e2\\u79e5\\u79e8\\u79ea\\ufffd\\u79ec\\u79ee\\u79f1\\u79f2\\u79f3\\u79f4\\u79f5\\u79f6\\u79f7\\u79f9\\u79fa\\u79fc\\u79fe\\u79ff\\u7a01\\u7a04\\u7a05\\u7a07\\u7a08\\u7a09\\u7a0a\\u7a0c\\u7a0f\\u7a10\\u7a11\\u7a12\\u7a13\\u7a15\\u7a16\\u7a18\\u7a19\\u7a1b\\u7a1c\\u4e01\\u76ef\\u53ee\\u9489\\u9876\\u9f0e\\u952d\\u5b9a\\u8ba2\\u4e22\\u4e1c\\u51ac\\u8463\\u61c2\\u52a8\\u680b\\u4f97\\u606b\\u51bb\\u6d1e\\u515c\\u6296\\u6597\\u9661\\u8c46\\u9017\\u75d8\\u90fd\\u7763\\u6bd2\\u728a\\u72ec\\u8bfb\\u5835\\u7779\\u8d4c\\u675c\\u9540\\u809a\\u5ea6\\u6e21\\u5992\\u7aef\\u77ed\\u953b\\u6bb5\\u65ad\\u7f0e\\u5806\\u5151\\u961f\\u5bf9\\u58a9\\u5428\\u8e72\\u6566\\u987f\\u56e4\\u949d\\u76fe\\u9041\\u6387\\u54c6\\u591a\\u593a\\u579b\\u8eb2\\u6735\\u8dfa\\u8235\\u5241\\u60f0\\u5815\\u86fe\\u5ce8\\u9e45\\u4fc4\\u989d\\u8bb9\\u5a25\\u6076\\u5384\\u627c\\u904f\\u9102\\u997f\\u6069\\u800c\\u513f\\u8033\\u5c14\\u9975\\u6d31\\u4e8c\\ufffd\".split(\"\"),e=0;e!=r[182].length;++e)65533!==r[182][e].charCodeAt(0)&&(n[r[182][e]]=46592+e,t[46592+e]=r[182][e]);for(r[183]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7a1d\\u7a1f\\u7a21\\u7a22\\u7a24\\u7a25\\u7a26\\u7a27\\u7a28\\u7a29\\u7a2a\\u7a2b\\u7a2c\\u7a2d\\u7a2e\\u7a2f\\u7a30\\u7a31\\u7a32\\u7a34\\u7a35\\u7a36\\u7a38\\u7a3a\\u7a3e\\u7a40\\u7a41\\u7a42\\u7a43\\u7a44\\u7a45\\u7a47\\u7a48\\u7a49\\u7a4a\\u7a4b\\u7a4c\\u7a4d\\u7a4e\\u7a4f\\u7a50\\u7a52\\u7a53\\u7a54\\u7a55\\u7a56\\u7a58\\u7a59\\u7a5a\\u7a5b\\u7a5c\\u7a5d\\u7a5e\\u7a5f\\u7a60\\u7a61\\u7a62\\u7a63\\u7a64\\u7a65\\u7a66\\u7a67\\u7a68\\ufffd\\u7a69\\u7a6a\\u7a6b\\u7a6c\\u7a6d\\u7a6e\\u7a6f\\u7a71\\u7a72\\u7a73\\u7a75\\u7a7b\\u7a7c\\u7a7d\\u7a7e\\u7a82\\u7a85\\u7a87\\u7a89\\u7a8a\\u7a8b\\u7a8c\\u7a8e\\u7a8f\\u7a90\\u7a93\\u7a94\\u7a99\\u7a9a\\u7a9b\\u7a9e\\u7aa1\\u7aa2\\u8d30\\u53d1\\u7f5a\\u7b4f\\u4f10\\u4e4f\\u9600\\u6cd5\\u73d0\\u85e9\\u5e06\\u756a\\u7ffb\\u6a0a\\u77fe\\u9492\\u7e41\\u51e1\\u70e6\\u53cd\\u8fd4\\u8303\\u8d29\\u72af\\u996d\\u6cdb\\u574a\\u82b3\\u65b9\\u80aa\\u623f\\u9632\\u59a8\\u4eff\\u8bbf\\u7eba\\u653e\\u83f2\\u975e\\u5561\\u98de\\u80a5\\u532a\\u8bfd\\u5420\\u80ba\\u5e9f\\u6cb8\\u8d39\\u82ac\\u915a\\u5429\\u6c1b\\u5206\\u7eb7\\u575f\\u711a\\u6c7e\\u7c89\\u594b\\u4efd\\u5fff\\u6124\\u7caa\\u4e30\\u5c01\\u67ab\\u8702\\u5cf0\\u950b\\u98ce\\u75af\\u70fd\\u9022\\u51af\\u7f1d\\u8bbd\\u5949\\u51e4\\u4f5b\\u5426\\u592b\\u6577\\u80a4\\u5b75\\u6276\\u62c2\\u8f90\\u5e45\\u6c1f\\u7b26\\u4f0f\\u4fd8\\u670d\\ufffd\".split(\"\"),e=0;e!=r[183].length;++e)65533!==r[183][e].charCodeAt(0)&&(n[r[183][e]]=46848+e,t[46848+e]=r[183][e]);for(r[184]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7aa3\\u7aa4\\u7aa7\\u7aa9\\u7aaa\\u7aab\\u7aae\\u7aaf\\u7ab0\\u7ab1\\u7ab2\\u7ab4\\u7ab5\\u7ab6\\u7ab7\\u7ab8\\u7ab9\\u7aba\\u7abb\\u7abc\\u7abd\\u7abe\\u7ac0\\u7ac1\\u7ac2\\u7ac3\\u7ac4\\u7ac5\\u7ac6\\u7ac7\\u7ac8\\u7ac9\\u7aca\\u7acc\\u7acd\\u7ace\\u7acf\\u7ad0\\u7ad1\\u7ad2\\u7ad3\\u7ad4\\u7ad5\\u7ad7\\u7ad8\\u7ada\\u7adb\\u7adc\\u7add\\u7ae1\\u7ae2\\u7ae4\\u7ae7\\u7ae8\\u7ae9\\u7aea\\u7aeb\\u7aec\\u7aee\\u7af0\\u7af1\\u7af2\\u7af3\\ufffd\\u7af4\\u7af5\\u7af6\\u7af7\\u7af8\\u7afb\\u7afc\\u7afe\\u7b00\\u7b01\\u7b02\\u7b05\\u7b07\\u7b09\\u7b0c\\u7b0d\\u7b0e\\u7b10\\u7b12\\u7b13\\u7b16\\u7b17\\u7b18\\u7b1a\\u7b1c\\u7b1d\\u7b1f\\u7b21\\u7b22\\u7b23\\u7b27\\u7b29\\u7b2d\\u6d6e\\u6daa\\u798f\\u88b1\\u5f17\\u752b\\u629a\\u8f85\\u4fef\\u91dc\\u65a7\\u812f\\u8151\\u5e9c\\u8150\\u8d74\\u526f\\u8986\\u8d4b\\u590d\\u5085\\u4ed8\\u961c\\u7236\\u8179\\u8d1f\\u5bcc\\u8ba3\\u9644\\u5987\\u7f1a\\u5490\\u5676\\u560e\\u8be5\\u6539\\u6982\\u9499\\u76d6\\u6e89\\u5e72\\u7518\\u6746\\u67d1\\u7aff\\u809d\\u8d76\\u611f\\u79c6\\u6562\\u8d63\\u5188\\u521a\\u94a2\\u7f38\\u809b\\u7eb2\\u5c97\\u6e2f\\u6760\\u7bd9\\u768b\\u9ad8\\u818f\\u7f94\\u7cd5\\u641e\\u9550\\u7a3f\\u544a\\u54e5\\u6b4c\\u6401\\u6208\\u9e3d\\u80f3\\u7599\\u5272\\u9769\\u845b\\u683c\\u86e4\\u9601\\u9694\\u94ec\\u4e2a\\u5404\\u7ed9\\u6839\\u8ddf\\u8015\\u66f4\\u5e9a\\u7fb9\\ufffd\".split(\"\"),e=0;e!=r[184].length;++e)65533!==r[184][e].charCodeAt(0)&&(n[r[184][e]]=47104+e,t[47104+e]=r[184][e]);for(r[185]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7b2f\\u7b30\\u7b32\\u7b34\\u7b35\\u7b36\\u7b37\\u7b39\\u7b3b\\u7b3d\\u7b3f\\u7b40\\u7b41\\u7b42\\u7b43\\u7b44\\u7b46\\u7b48\\u7b4a\\u7b4d\\u7b4e\\u7b53\\u7b55\\u7b57\\u7b59\\u7b5c\\u7b5e\\u7b5f\\u7b61\\u7b63\\u7b64\\u7b65\\u7b66\\u7b67\\u7b68\\u7b69\\u7b6a\\u7b6b\\u7b6c\\u7b6d\\u7b6f\\u7b70\\u7b73\\u7b74\\u7b76\\u7b78\\u7b7a\\u7b7c\\u7b7d\\u7b7f\\u7b81\\u7b82\\u7b83\\u7b84\\u7b86\\u7b87\\u7b88\\u7b89\\u7b8a\\u7b8b\\u7b8c\\u7b8e\\u7b8f\\ufffd\\u7b91\\u7b92\\u7b93\\u7b96\\u7b98\\u7b99\\u7b9a\\u7b9b\\u7b9e\\u7b9f\\u7ba0\\u7ba3\\u7ba4\\u7ba5\\u7bae\\u7baf\\u7bb0\\u7bb2\\u7bb3\\u7bb5\\u7bb6\\u7bb7\\u7bb9\\u7bba\\u7bbb\\u7bbc\\u7bbd\\u7bbe\\u7bbf\\u7bc0\\u7bc2\\u7bc3\\u7bc4\\u57c2\\u803f\\u6897\\u5de5\\u653b\\u529f\\u606d\\u9f9a\\u4f9b\\u8eac\\u516c\\u5bab\\u5f13\\u5de9\\u6c5e\\u62f1\\u8d21\\u5171\\u94a9\\u52fe\\u6c9f\\u82df\\u72d7\\u57a2\\u6784\\u8d2d\\u591f\\u8f9c\\u83c7\\u5495\\u7b8d\\u4f30\\u6cbd\\u5b64\\u59d1\\u9f13\\u53e4\\u86ca\\u9aa8\\u8c37\\u80a1\\u6545\\u987e\\u56fa\\u96c7\\u522e\\u74dc\\u5250\\u5be1\\u6302\\u8902\\u4e56\\u62d0\\u602a\\u68fa\\u5173\\u5b98\\u51a0\\u89c2\\u7ba1\\u9986\\u7f50\\u60ef\\u704c\\u8d2f\\u5149\\u5e7f\\u901b\\u7470\\u89c4\\u572d\\u7845\\u5f52\\u9f9f\\u95fa\\u8f68\\u9b3c\\u8be1\\u7678\\u6842\\u67dc\\u8dea\\u8d35\\u523d\\u8f8a\\u6eda\\u68cd\\u9505\\u90ed\\u56fd\\u679c\\u88f9\\u8fc7\\u54c8\\ufffd\".split(\"\"),e=0;e!=r[185].length;++e)65533!==r[185][e].charCodeAt(0)&&(n[r[185][e]]=47360+e,t[47360+e]=r[185][e]);for(r[186]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7bc5\\u7bc8\\u7bc9\\u7bca\\u7bcb\\u7bcd\\u7bce\\u7bcf\\u7bd0\\u7bd2\\u7bd4\\u7bd5\\u7bd6\\u7bd7\\u7bd8\\u7bdb\\u7bdc\\u7bde\\u7bdf\\u7be0\\u7be2\\u7be3\\u7be4\\u7be7\\u7be8\\u7be9\\u7beb\\u7bec\\u7bed\\u7bef\\u7bf0\\u7bf2\\u7bf3\\u7bf4\\u7bf5\\u7bf6\\u7bf8\\u7bf9\\u7bfa\\u7bfb\\u7bfd\\u7bff\\u7c00\\u7c01\\u7c02\\u7c03\\u7c04\\u7c05\\u7c06\\u7c08\\u7c09\\u7c0a\\u7c0d\\u7c0e\\u7c10\\u7c11\\u7c12\\u7c13\\u7c14\\u7c15\\u7c17\\u7c18\\u7c19\\ufffd\\u7c1a\\u7c1b\\u7c1c\\u7c1d\\u7c1e\\u7c20\\u7c21\\u7c22\\u7c23\\u7c24\\u7c25\\u7c28\\u7c29\\u7c2b\\u7c2c\\u7c2d\\u7c2e\\u7c2f\\u7c30\\u7c31\\u7c32\\u7c33\\u7c34\\u7c35\\u7c36\\u7c37\\u7c39\\u7c3a\\u7c3b\\u7c3c\\u7c3d\\u7c3e\\u7c42\\u9ab8\\u5b69\\u6d77\\u6c26\\u4ea5\\u5bb3\\u9a87\\u9163\\u61a8\\u90af\\u97e9\\u542b\\u6db5\\u5bd2\\u51fd\\u558a\\u7f55\\u7ff0\\u64bc\\u634d\\u65f1\\u61be\\u608d\\u710a\\u6c57\\u6c49\\u592f\\u676d\\u822a\\u58d5\\u568e\\u8c6a\\u6beb\\u90dd\\u597d\\u8017\\u53f7\\u6d69\\u5475\\u559d\\u8377\\u83cf\\u6838\\u79be\\u548c\\u4f55\\u5408\\u76d2\\u8c89\\u9602\\u6cb3\\u6db8\\u8d6b\\u8910\\u9e64\\u8d3a\\u563f\\u9ed1\\u75d5\\u5f88\\u72e0\\u6068\\u54fc\\u4ea8\\u6a2a\\u8861\\u6052\\u8f70\\u54c4\\u70d8\\u8679\\u9e3f\\u6d2a\\u5b8f\\u5f18\\u7ea2\\u5589\\u4faf\\u7334\\u543c\\u539a\\u5019\\u540e\\u547c\\u4e4e\\u5ffd\\u745a\\u58f6\\u846b\\u80e1\\u8774\\u72d0\\u7cca\\u6e56\\ufffd\".split(\"\"),e=0;e!=r[186].length;++e)65533!==r[186][e].charCodeAt(0)&&(n[r[186][e]]=47616+e,t[47616+e]=r[186][e]);for(r[187]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7c43\\u7c44\\u7c45\\u7c46\\u7c47\\u7c48\\u7c49\\u7c4a\\u7c4b\\u7c4c\\u7c4e\\u7c4f\\u7c50\\u7c51\\u7c52\\u7c53\\u7c54\\u7c55\\u7c56\\u7c57\\u7c58\\u7c59\\u7c5a\\u7c5b\\u7c5c\\u7c5d\\u7c5e\\u7c5f\\u7c60\\u7c61\\u7c62\\u7c63\\u7c64\\u7c65\\u7c66\\u7c67\\u7c68\\u7c69\\u7c6a\\u7c6b\\u7c6c\\u7c6d\\u7c6e\\u7c6f\\u7c70\\u7c71\\u7c72\\u7c75\\u7c76\\u7c77\\u7c78\\u7c79\\u7c7a\\u7c7e\\u7c7f\\u7c80\\u7c81\\u7c82\\u7c83\\u7c84\\u7c85\\u7c86\\u7c87\\ufffd\\u7c88\\u7c8a\\u7c8b\\u7c8c\\u7c8d\\u7c8e\\u7c8f\\u7c90\\u7c93\\u7c94\\u7c96\\u7c99\\u7c9a\\u7c9b\\u7ca0\\u7ca1\\u7ca3\\u7ca6\\u7ca7\\u7ca8\\u7ca9\\u7cab\\u7cac\\u7cad\\u7caf\\u7cb0\\u7cb4\\u7cb5\\u7cb6\\u7cb7\\u7cb8\\u7cba\\u7cbb\\u5f27\\u864e\\u552c\\u62a4\\u4e92\\u6caa\\u6237\\u82b1\\u54d7\\u534e\\u733e\\u6ed1\\u753b\\u5212\\u5316\\u8bdd\\u69d0\\u5f8a\\u6000\\u6dee\\u574f\\u6b22\\u73af\\u6853\\u8fd8\\u7f13\\u6362\\u60a3\\u5524\\u75ea\\u8c62\\u7115\\u6da3\\u5ba6\\u5e7b\\u8352\\u614c\\u9ec4\\u78fa\\u8757\\u7c27\\u7687\\u51f0\\u60f6\\u714c\\u6643\\u5e4c\\u604d\\u8c0e\\u7070\\u6325\\u8f89\\u5fbd\\u6062\\u86d4\\u56de\\u6bc1\\u6094\\u6167\\u5349\\u60e0\\u6666\\u8d3f\\u79fd\\u4f1a\\u70e9\\u6c47\\u8bb3\\u8bf2\\u7ed8\\u8364\\u660f\\u5a5a\\u9b42\\u6d51\\u6df7\\u8c41\\u6d3b\\u4f19\\u706b\\u83b7\\u6216\\u60d1\\u970d\\u8d27\\u7978\\u51fb\\u573e\\u57fa\\u673a\\u7578\\u7a3d\\u79ef\\u7b95\\ufffd\".split(\"\"),e=0;e!=r[187].length;++e)65533!==r[187][e].charCodeAt(0)&&(n[r[187][e]]=47872+e,t[47872+e]=r[187][e]);for(r[188]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7cbf\\u7cc0\\u7cc2\\u7cc3\\u7cc4\\u7cc6\\u7cc9\\u7ccb\\u7cce\\u7ccf\\u7cd0\\u7cd1\\u7cd2\\u7cd3\\u7cd4\\u7cd8\\u7cda\\u7cdb\\u7cdd\\u7cde\\u7ce1\\u7ce2\\u7ce3\\u7ce4\\u7ce5\\u7ce6\\u7ce7\\u7ce9\\u7cea\\u7ceb\\u7cec\\u7ced\\u7cee\\u7cf0\\u7cf1\\u7cf2\\u7cf3\\u7cf4\\u7cf5\\u7cf6\\u7cf7\\u7cf9\\u7cfa\\u7cfc\\u7cfd\\u7cfe\\u7cff\\u7d00\\u7d01\\u7d02\\u7d03\\u7d04\\u7d05\\u7d06\\u7d07\\u7d08\\u7d09\\u7d0b\\u7d0c\\u7d0d\\u7d0e\\u7d0f\\u7d10\\ufffd\\u7d11\\u7d12\\u7d13\\u7d14\\u7d15\\u7d16\\u7d17\\u7d18\\u7d19\\u7d1a\\u7d1b\\u7d1c\\u7d1d\\u7d1e\\u7d1f\\u7d21\\u7d23\\u7d24\\u7d25\\u7d26\\u7d28\\u7d29\\u7d2a\\u7d2c\\u7d2d\\u7d2e\\u7d30\\u7d31\\u7d32\\u7d33\\u7d34\\u7d35\\u7d36\\u808c\\u9965\\u8ff9\\u6fc0\\u8ba5\\u9e21\\u59ec\\u7ee9\\u7f09\\u5409\\u6781\\u68d8\\u8f91\\u7c4d\\u96c6\\u53ca\\u6025\\u75be\\u6c72\\u5373\\u5ac9\\u7ea7\\u6324\\u51e0\\u810a\\u5df1\\u84df\\u6280\\u5180\\u5b63\\u4f0e\\u796d\\u5242\\u60b8\\u6d4e\\u5bc4\\u5bc2\\u8ba1\\u8bb0\\u65e2\\u5fcc\\u9645\\u5993\\u7ee7\\u7eaa\\u5609\\u67b7\\u5939\\u4f73\\u5bb6\\u52a0\\u835a\\u988a\\u8d3e\\u7532\\u94be\\u5047\\u7a3c\\u4ef7\\u67b6\\u9a7e\\u5ac1\\u6b7c\\u76d1\\u575a\\u5c16\\u7b3a\\u95f4\\u714e\\u517c\\u80a9\\u8270\\u5978\\u7f04\\u8327\\u68c0\\u67ec\\u78b1\\u7877\\u62e3\\u6361\\u7b80\\u4fed\\u526a\\u51cf\\u8350\\u69db\\u9274\\u8df5\\u8d31\\u89c1\\u952e\\u7bad\\u4ef6\\ufffd\".split(\"\"),e=0;e!=r[188].length;++e)65533!==r[188][e].charCodeAt(0)&&(n[r[188][e]]=48128+e,t[48128+e]=r[188][e]);for(r[189]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7d37\\u7d38\\u7d39\\u7d3a\\u7d3b\\u7d3c\\u7d3d\\u7d3e\\u7d3f\\u7d40\\u7d41\\u7d42\\u7d43\\u7d44\\u7d45\\u7d46\\u7d47\\u7d48\\u7d49\\u7d4a\\u7d4b\\u7d4c\\u7d4d\\u7d4e\\u7d4f\\u7d50\\u7d51\\u7d52\\u7d53\\u7d54\\u7d55\\u7d56\\u7d57\\u7d58\\u7d59\\u7d5a\\u7d5b\\u7d5c\\u7d5d\\u7d5e\\u7d5f\\u7d60\\u7d61\\u7d62\\u7d63\\u7d64\\u7d65\\u7d66\\u7d67\\u7d68\\u7d69\\u7d6a\\u7d6b\\u7d6c\\u7d6d\\u7d6f\\u7d70\\u7d71\\u7d72\\u7d73\\u7d74\\u7d75\\u7d76\\ufffd\\u7d78\\u7d79\\u7d7a\\u7d7b\\u7d7c\\u7d7d\\u7d7e\\u7d7f\\u7d80\\u7d81\\u7d82\\u7d83\\u7d84\\u7d85\\u7d86\\u7d87\\u7d88\\u7d89\\u7d8a\\u7d8b\\u7d8c\\u7d8d\\u7d8e\\u7d8f\\u7d90\\u7d91\\u7d92\\u7d93\\u7d94\\u7d95\\u7d96\\u7d97\\u7d98\\u5065\\u8230\\u5251\\u996f\\u6e10\\u6e85\\u6da7\\u5efa\\u50f5\\u59dc\\u5c06\\u6d46\\u6c5f\\u7586\\u848b\\u6868\\u5956\\u8bb2\\u5320\\u9171\\u964d\\u8549\\u6912\\u7901\\u7126\\u80f6\\u4ea4\\u90ca\\u6d47\\u9a84\\u5a07\\u56bc\\u6405\\u94f0\\u77eb\\u4fa5\\u811a\\u72e1\\u89d2\\u997a\\u7f34\\u7ede\\u527f\\u6559\\u9175\\u8f7f\\u8f83\\u53eb\\u7a96\\u63ed\\u63a5\\u7686\\u79f8\\u8857\\u9636\\u622a\\u52ab\\u8282\\u6854\\u6770\\u6377\\u776b\\u7aed\\u6d01\\u7ed3\\u89e3\\u59d0\\u6212\\u85c9\\u82a5\\u754c\\u501f\\u4ecb\\u75a5\\u8beb\\u5c4a\\u5dfe\\u7b4b\\u65a4\\u91d1\\u4eca\\u6d25\\u895f\\u7d27\\u9526\\u4ec5\\u8c28\\u8fdb\\u9773\\u664b\\u7981\\u8fd1\\u70ec\\u6d78\\ufffd\".split(\"\"),e=0;e!=r[189].length;++e)65533!==r[189][e].charCodeAt(0)&&(n[r[189][e]]=48384+e,t[48384+e]=r[189][e]);for(r[190]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7d99\\u7d9a\\u7d9b\\u7d9c\\u7d9d\\u7d9e\\u7d9f\\u7da0\\u7da1\\u7da2\\u7da3\\u7da4\\u7da5\\u7da7\\u7da8\\u7da9\\u7daa\\u7dab\\u7dac\\u7dad\\u7daf\\u7db0\\u7db1\\u7db2\\u7db3\\u7db4\\u7db5\\u7db6\\u7db7\\u7db8\\u7db9\\u7dba\\u7dbb\\u7dbc\\u7dbd\\u7dbe\\u7dbf\\u7dc0\\u7dc1\\u7dc2\\u7dc3\\u7dc4\\u7dc5\\u7dc6\\u7dc7\\u7dc8\\u7dc9\\u7dca\\u7dcb\\u7dcc\\u7dcd\\u7dce\\u7dcf\\u7dd0\\u7dd1\\u7dd2\\u7dd3\\u7dd4\\u7dd5\\u7dd6\\u7dd7\\u7dd8\\u7dd9\\ufffd\\u7dda\\u7ddb\\u7ddc\\u7ddd\\u7dde\\u7ddf\\u7de0\\u7de1\\u7de2\\u7de3\\u7de4\\u7de5\\u7de6\\u7de7\\u7de8\\u7de9\\u7dea\\u7deb\\u7dec\\u7ded\\u7dee\\u7def\\u7df0\\u7df1\\u7df2\\u7df3\\u7df4\\u7df5\\u7df6\\u7df7\\u7df8\\u7df9\\u7dfa\\u5c3d\\u52b2\\u8346\\u5162\\u830e\\u775b\\u6676\\u9cb8\\u4eac\\u60ca\\u7cbe\\u7cb3\\u7ecf\\u4e95\\u8b66\\u666f\\u9888\\u9759\\u5883\\u656c\\u955c\\u5f84\\u75c9\\u9756\\u7adf\\u7ade\\u51c0\\u70af\\u7a98\\u63ea\\u7a76\\u7ea0\\u7396\\u97ed\\u4e45\\u7078\\u4e5d\\u9152\\u53a9\\u6551\\u65e7\\u81fc\\u8205\\u548e\\u5c31\\u759a\\u97a0\\u62d8\\u72d9\\u75bd\\u5c45\\u9a79\\u83ca\\u5c40\\u5480\\u77e9\\u4e3e\\u6cae\\u805a\\u62d2\\u636e\\u5de8\\u5177\\u8ddd\\u8e1e\\u952f\\u4ff1\\u53e5\\u60e7\\u70ac\\u5267\\u6350\\u9e43\\u5a1f\\u5026\\u7737\\u5377\\u7ee2\\u6485\\u652b\\u6289\\u6398\\u5014\\u7235\\u89c9\\u51b3\\u8bc0\\u7edd\\u5747\\u83cc\\u94a7\\u519b\\u541b\\u5cfb\\ufffd\".split(\"\"),e=0;e!=r[190].length;++e)65533!==r[190][e].charCodeAt(0)&&(n[r[190][e]]=48640+e,t[48640+e]=r[190][e]);for(r[191]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7dfb\\u7dfc\\u7dfd\\u7dfe\\u7dff\\u7e00\\u7e01\\u7e02\\u7e03\\u7e04\\u7e05\\u7e06\\u7e07\\u7e08\\u7e09\\u7e0a\\u7e0b\\u7e0c\\u7e0d\\u7e0e\\u7e0f\\u7e10\\u7e11\\u7e12\\u7e13\\u7e14\\u7e15\\u7e16\\u7e17\\u7e18\\u7e19\\u7e1a\\u7e1b\\u7e1c\\u7e1d\\u7e1e\\u7e1f\\u7e20\\u7e21\\u7e22\\u7e23\\u7e24\\u7e25\\u7e26\\u7e27\\u7e28\\u7e29\\u7e2a\\u7e2b\\u7e2c\\u7e2d\\u7e2e\\u7e2f\\u7e30\\u7e31\\u7e32\\u7e33\\u7e34\\u7e35\\u7e36\\u7e37\\u7e38\\u7e39\\ufffd\\u7e3a\\u7e3c\\u7e3d\\u7e3e\\u7e3f\\u7e40\\u7e42\\u7e43\\u7e44\\u7e45\\u7e46\\u7e48\\u7e49\\u7e4a\\u7e4b\\u7e4c\\u7e4d\\u7e4e\\u7e4f\\u7e50\\u7e51\\u7e52\\u7e53\\u7e54\\u7e55\\u7e56\\u7e57\\u7e58\\u7e59\\u7e5a\\u7e5b\\u7e5c\\u7e5d\\u4fca\\u7ae3\\u6d5a\\u90e1\\u9a8f\\u5580\\u5496\\u5361\\u54af\\u5f00\\u63e9\\u6977\\u51ef\\u6168\\u520a\\u582a\\u52d8\\u574e\\u780d\\u770b\\u5eb7\\u6177\\u7ce0\\u625b\\u6297\\u4ea2\\u7095\\u8003\\u62f7\\u70e4\\u9760\\u5777\\u82db\\u67ef\\u68f5\\u78d5\\u9897\\u79d1\\u58f3\\u54b3\\u53ef\\u6e34\\u514b\\u523b\\u5ba2\\u8bfe\\u80af\\u5543\\u57a6\\u6073\\u5751\\u542d\\u7a7a\\u6050\\u5b54\\u63a7\\u62a0\\u53e3\\u6263\\u5bc7\\u67af\\u54ed\\u7a9f\\u82e6\\u9177\\u5e93\\u88e4\\u5938\\u57ae\\u630e\\u8de8\\u80ef\\u5757\\u7b77\\u4fa9\\u5feb\\u5bbd\\u6b3e\\u5321\\u7b50\\u72c2\\u6846\\u77ff\\u7736\\u65f7\\u51b5\\u4e8f\\u76d4\\u5cbf\\u7aa5\\u8475\\u594e\\u9b41\\u5080\\ufffd\".split(\"\"),e=0;e!=r[191].length;++e)65533!==r[191][e].charCodeAt(0)&&(n[r[191][e]]=48896+e,t[48896+e]=r[191][e]);for(r[192]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7e5e\\u7e5f\\u7e60\\u7e61\\u7e62\\u7e63\\u7e64\\u7e65\\u7e66\\u7e67\\u7e68\\u7e69\\u7e6a\\u7e6b\\u7e6c\\u7e6d\\u7e6e\\u7e6f\\u7e70\\u7e71\\u7e72\\u7e73\\u7e74\\u7e75\\u7e76\\u7e77\\u7e78\\u7e79\\u7e7a\\u7e7b\\u7e7c\\u7e7d\\u7e7e\\u7e7f\\u7e80\\u7e81\\u7e83\\u7e84\\u7e85\\u7e86\\u7e87\\u7e88\\u7e89\\u7e8a\\u7e8b\\u7e8c\\u7e8d\\u7e8e\\u7e8f\\u7e90\\u7e91\\u7e92\\u7e93\\u7e94\\u7e95\\u7e96\\u7e97\\u7e98\\u7e99\\u7e9a\\u7e9c\\u7e9d\\u7e9e\\ufffd\\u7eae\\u7eb4\\u7ebb\\u7ebc\\u7ed6\\u7ee4\\u7eec\\u7ef9\\u7f0a\\u7f10\\u7f1e\\u7f37\\u7f39\\u7f3b\\u7f3c\\u7f3d\\u7f3e\\u7f3f\\u7f40\\u7f41\\u7f43\\u7f46\\u7f47\\u7f48\\u7f49\\u7f4a\\u7f4b\\u7f4c\\u7f4d\\u7f4e\\u7f4f\\u7f52\\u7f53\\u9988\\u6127\\u6e83\\u5764\\u6606\\u6346\\u56f0\\u62ec\\u6269\\u5ed3\\u9614\\u5783\\u62c9\\u5587\\u8721\\u814a\\u8fa3\\u5566\\u83b1\\u6765\\u8d56\\u84dd\\u5a6a\\u680f\\u62e6\\u7bee\\u9611\\u5170\\u6f9c\\u8c30\\u63fd\\u89c8\\u61d2\\u7f06\\u70c2\\u6ee5\\u7405\\u6994\\u72fc\\u5eca\\u90ce\\u6717\\u6d6a\\u635e\\u52b3\\u7262\\u8001\\u4f6c\\u59e5\\u916a\\u70d9\\u6d9d\\u52d2\\u4e50\\u96f7\\u956d\\u857e\\u78ca\\u7d2f\\u5121\\u5792\\u64c2\\u808b\\u7c7b\\u6cea\\u68f1\\u695e\\u51b7\\u5398\\u68a8\\u7281\\u9ece\\u7bf1\\u72f8\\u79bb\\u6f13\\u7406\\u674e\\u91cc\\u9ca4\\u793c\\u8389\\u8354\\u540f\\u6817\\u4e3d\\u5389\\u52b1\\u783e\\u5386\\u5229\\u5088\\u4f8b\\u4fd0\\ufffd\".split(\"\"),e=0;e!=r[192].length;++e)65533!==r[192][e].charCodeAt(0)&&(n[r[192][e]]=49152+e,t[49152+e]=r[192][e]);for(r[193]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7f56\\u7f59\\u7f5b\\u7f5c\\u7f5d\\u7f5e\\u7f60\\u7f63\\u7f64\\u7f65\\u7f66\\u7f67\\u7f6b\\u7f6c\\u7f6d\\u7f6f\\u7f70\\u7f73\\u7f75\\u7f76\\u7f77\\u7f78\\u7f7a\\u7f7b\\u7f7c\\u7f7d\\u7f7f\\u7f80\\u7f82\\u7f83\\u7f84\\u7f85\\u7f86\\u7f87\\u7f88\\u7f89\\u7f8b\\u7f8d\\u7f8f\\u7f90\\u7f91\\u7f92\\u7f93\\u7f95\\u7f96\\u7f97\\u7f98\\u7f99\\u7f9b\\u7f9c\\u7fa0\\u7fa2\\u7fa3\\u7fa5\\u7fa6\\u7fa8\\u7fa9\\u7faa\\u7fab\\u7fac\\u7fad\\u7fae\\u7fb1\\ufffd\\u7fb3\\u7fb4\\u7fb5\\u7fb6\\u7fb7\\u7fba\\u7fbb\\u7fbe\\u7fc0\\u7fc2\\u7fc3\\u7fc4\\u7fc6\\u7fc7\\u7fc8\\u7fc9\\u7fcb\\u7fcd\\u7fcf\\u7fd0\\u7fd1\\u7fd2\\u7fd3\\u7fd6\\u7fd7\\u7fd9\\u7fda\\u7fdb\\u7fdc\\u7fdd\\u7fde\\u7fe2\\u7fe3\\u75e2\\u7acb\\u7c92\\u6ca5\\u96b6\\u529b\\u7483\\u54e9\\u4fe9\\u8054\\u83b2\\u8fde\\u9570\\u5ec9\\u601c\\u6d9f\\u5e18\\u655b\\u8138\\u94fe\\u604b\\u70bc\\u7ec3\\u7cae\\u51c9\\u6881\\u7cb1\\u826f\\u4e24\\u8f86\\u91cf\\u667e\\u4eae\\u8c05\\u64a9\\u804a\\u50da\\u7597\\u71ce\\u5be5\\u8fbd\\u6f66\\u4e86\\u6482\\u9563\\u5ed6\\u6599\\u5217\\u88c2\\u70c8\\u52a3\\u730e\\u7433\\u6797\\u78f7\\u9716\\u4e34\\u90bb\\u9cde\\u6dcb\\u51db\\u8d41\\u541d\\u62ce\\u73b2\\u83f1\\u96f6\\u9f84\\u94c3\\u4f36\\u7f9a\\u51cc\\u7075\\u9675\\u5cad\\u9886\\u53e6\\u4ee4\\u6e9c\\u7409\\u69b4\\u786b\\u998f\\u7559\\u5218\\u7624\\u6d41\\u67f3\\u516d\\u9f99\\u804b\\u5499\\u7b3c\\u7abf\\ufffd\".split(\"\"),e=0;e!=r[193].length;++e)65533!==r[193][e].charCodeAt(0)&&(n[r[193][e]]=49408+e,t[49408+e]=r[193][e]);for(r[194]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7fe4\\u7fe7\\u7fe8\\u7fea\\u7feb\\u7fec\\u7fed\\u7fef\\u7ff2\\u7ff4\\u7ff5\\u7ff6\\u7ff7\\u7ff8\\u7ff9\\u7ffa\\u7ffd\\u7ffe\\u7fff\\u8002\\u8007\\u8008\\u8009\\u800a\\u800e\\u800f\\u8011\\u8013\\u801a\\u801b\\u801d\\u801e\\u801f\\u8021\\u8023\\u8024\\u802b\\u802c\\u802d\\u802e\\u802f\\u8030\\u8032\\u8034\\u8039\\u803a\\u803c\\u803e\\u8040\\u8041\\u8044\\u8045\\u8047\\u8048\\u8049\\u804e\\u804f\\u8050\\u8051\\u8053\\u8055\\u8056\\u8057\\ufffd\\u8059\\u805b\\u805c\\u805d\\u805e\\u805f\\u8060\\u8061\\u8062\\u8063\\u8064\\u8065\\u8066\\u8067\\u8068\\u806b\\u806c\\u806d\\u806e\\u806f\\u8070\\u8072\\u8073\\u8074\\u8075\\u8076\\u8077\\u8078\\u8079\\u807a\\u807b\\u807c\\u807d\\u9686\\u5784\\u62e2\\u9647\\u697c\\u5a04\\u6402\\u7bd3\\u6f0f\\u964b\\u82a6\\u5362\\u9885\\u5e90\\u7089\\u63b3\\u5364\\u864f\\u9c81\\u9e93\\u788c\\u9732\\u8def\\u8d42\\u9e7f\\u6f5e\\u7984\\u5f55\\u9646\\u622e\\u9a74\\u5415\\u94dd\\u4fa3\\u65c5\\u5c65\\u5c61\\u7f15\\u8651\\u6c2f\\u5f8b\\u7387\\u6ee4\\u7eff\\u5ce6\\u631b\\u5b6a\\u6ee6\\u5375\\u4e71\\u63a0\\u7565\\u62a1\\u8f6e\\u4f26\\u4ed1\\u6ca6\\u7eb6\\u8bba\\u841d\\u87ba\\u7f57\\u903b\\u9523\\u7ba9\\u9aa1\\u88f8\\u843d\\u6d1b\\u9a86\\u7edc\\u5988\\u9ebb\\u739b\\u7801\\u8682\\u9a6c\\u9a82\\u561b\\u5417\\u57cb\\u4e70\\u9ea6\\u5356\\u8fc8\\u8109\\u7792\\u9992\\u86ee\\u6ee1\\u8513\\u66fc\\u6162\\u6f2b\\ufffd\".split(\"\"),e=0;e!=r[194].length;++e)65533!==r[194][e].charCodeAt(0)&&(n[r[194][e]]=49664+e,t[49664+e]=r[194][e]);for(r[195]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u807e\\u8081\\u8082\\u8085\\u8088\\u808a\\u808d\\u808e\\u808f\\u8090\\u8091\\u8092\\u8094\\u8095\\u8097\\u8099\\u809e\\u80a3\\u80a6\\u80a7\\u80a8\\u80ac\\u80b0\\u80b3\\u80b5\\u80b6\\u80b8\\u80b9\\u80bb\\u80c5\\u80c7\\u80c8\\u80c9\\u80ca\\u80cb\\u80cf\\u80d0\\u80d1\\u80d2\\u80d3\\u80d4\\u80d5\\u80d8\\u80df\\u80e0\\u80e2\\u80e3\\u80e6\\u80ee\\u80f5\\u80f7\\u80f9\\u80fb\\u80fe\\u80ff\\u8100\\u8101\\u8103\\u8104\\u8105\\u8107\\u8108\\u810b\\ufffd\\u810c\\u8115\\u8117\\u8119\\u811b\\u811c\\u811d\\u811f\\u8120\\u8121\\u8122\\u8123\\u8124\\u8125\\u8126\\u8127\\u8128\\u8129\\u812a\\u812b\\u812d\\u812e\\u8130\\u8133\\u8134\\u8135\\u8137\\u8139\\u813a\\u813b\\u813c\\u813d\\u813f\\u8c29\\u8292\\u832b\\u76f2\\u6c13\\u5fd9\\u83bd\\u732b\\u8305\\u951a\\u6bdb\\u77db\\u94c6\\u536f\\u8302\\u5192\\u5e3d\\u8c8c\\u8d38\\u4e48\\u73ab\\u679a\\u6885\\u9176\\u9709\\u7164\\u6ca1\\u7709\\u5a92\\u9541\\u6bcf\\u7f8e\\u6627\\u5bd0\\u59b9\\u5a9a\\u95e8\\u95f7\\u4eec\\u840c\\u8499\\u6aac\\u76df\\u9530\\u731b\\u68a6\\u5b5f\\u772f\\u919a\\u9761\\u7cdc\\u8ff7\\u8c1c\\u5f25\\u7c73\\u79d8\\u89c5\\u6ccc\\u871c\\u5bc6\\u5e42\\u68c9\\u7720\\u7ef5\\u5195\\u514d\\u52c9\\u5a29\\u7f05\\u9762\\u82d7\\u63cf\\u7784\\u85d0\\u79d2\\u6e3a\\u5e99\\u5999\\u8511\\u706d\\u6c11\\u62bf\\u76bf\\u654f\\u60af\\u95fd\\u660e\\u879f\\u9e23\\u94ed\\u540d\\u547d\\u8c2c\\u6478\\ufffd\".split(\"\"),e=0;e!=r[195].length;++e)65533!==r[195][e].charCodeAt(0)&&(n[r[195][e]]=49920+e,t[49920+e]=r[195][e]);for(r[196]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8140\\u8141\\u8142\\u8143\\u8144\\u8145\\u8147\\u8149\\u814d\\u814e\\u814f\\u8152\\u8156\\u8157\\u8158\\u815b\\u815c\\u815d\\u815e\\u815f\\u8161\\u8162\\u8163\\u8164\\u8166\\u8168\\u816a\\u816b\\u816c\\u816f\\u8172\\u8173\\u8175\\u8176\\u8177\\u8178\\u8181\\u8183\\u8184\\u8185\\u8186\\u8187\\u8189\\u818b\\u818c\\u818d\\u818e\\u8190\\u8192\\u8193\\u8194\\u8195\\u8196\\u8197\\u8199\\u819a\\u819e\\u819f\\u81a0\\u81a1\\u81a2\\u81a4\\u81a5\\ufffd\\u81a7\\u81a9\\u81ab\\u81ac\\u81ad\\u81ae\\u81af\\u81b0\\u81b1\\u81b2\\u81b4\\u81b5\\u81b6\\u81b7\\u81b8\\u81b9\\u81bc\\u81bd\\u81be\\u81bf\\u81c4\\u81c5\\u81c7\\u81c8\\u81c9\\u81cb\\u81cd\\u81ce\\u81cf\\u81d0\\u81d1\\u81d2\\u81d3\\u6479\\u8611\\u6a21\\u819c\\u78e8\\u6469\\u9b54\\u62b9\\u672b\\u83ab\\u58a8\\u9ed8\\u6cab\\u6f20\\u5bde\\u964c\\u8c0b\\u725f\\u67d0\\u62c7\\u7261\\u4ea9\\u59c6\\u6bcd\\u5893\\u66ae\\u5e55\\u52df\\u6155\\u6728\\u76ee\\u7766\\u7267\\u7a46\\u62ff\\u54ea\\u5450\\u94a0\\u90a3\\u5a1c\\u7eb3\\u6c16\\u4e43\\u5976\\u8010\\u5948\\u5357\\u7537\\u96be\\u56ca\\u6320\\u8111\\u607c\\u95f9\\u6dd6\\u5462\\u9981\\u5185\\u5ae9\\u80fd\\u59ae\\u9713\\u502a\\u6ce5\\u5c3c\\u62df\\u4f60\\u533f\\u817b\\u9006\\u6eba\\u852b\\u62c8\\u5e74\\u78be\\u64b5\\u637b\\u5ff5\\u5a18\\u917f\\u9e1f\\u5c3f\\u634f\\u8042\\u5b7d\\u556e\\u954a\\u954d\\u6d85\\u60a8\\u67e0\\u72de\\u51dd\\u5b81\\ufffd\".split(\"\"),e=0;e!=r[196].length;++e)65533!==r[196][e].charCodeAt(0)&&(n[r[196][e]]=50176+e,t[50176+e]=r[196][e]);for(r[197]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u81d4\\u81d5\\u81d6\\u81d7\\u81d8\\u81d9\\u81da\\u81db\\u81dc\\u81dd\\u81de\\u81df\\u81e0\\u81e1\\u81e2\\u81e4\\u81e5\\u81e6\\u81e8\\u81e9\\u81eb\\u81ee\\u81ef\\u81f0\\u81f1\\u81f2\\u81f5\\u81f6\\u81f7\\u81f8\\u81f9\\u81fa\\u81fd\\u81ff\\u8203\\u8207\\u8208\\u8209\\u820a\\u820b\\u820e\\u820f\\u8211\\u8213\\u8215\\u8216\\u8217\\u8218\\u8219\\u821a\\u821d\\u8220\\u8224\\u8225\\u8226\\u8227\\u8229\\u822e\\u8232\\u823a\\u823c\\u823d\\u823f\\ufffd\\u8240\\u8241\\u8242\\u8243\\u8245\\u8246\\u8248\\u824a\\u824c\\u824d\\u824e\\u8250\\u8251\\u8252\\u8253\\u8254\\u8255\\u8256\\u8257\\u8259\\u825b\\u825c\\u825d\\u825e\\u8260\\u8261\\u8262\\u8263\\u8264\\u8265\\u8266\\u8267\\u8269\\u62e7\\u6cde\\u725b\\u626d\\u94ae\\u7ebd\\u8113\\u6d53\\u519c\\u5f04\\u5974\\u52aa\\u6012\\u5973\\u6696\\u8650\\u759f\\u632a\\u61e6\\u7cef\\u8bfa\\u54e6\\u6b27\\u9e25\\u6bb4\\u85d5\\u5455\\u5076\\u6ca4\\u556a\\u8db4\\u722c\\u5e15\\u6015\\u7436\\u62cd\\u6392\\u724c\\u5f98\\u6e43\\u6d3e\\u6500\\u6f58\\u76d8\\u78d0\\u76fc\\u7554\\u5224\\u53db\\u4e53\\u5e9e\\u65c1\\u802a\\u80d6\\u629b\\u5486\\u5228\\u70ae\\u888d\\u8dd1\\u6ce1\\u5478\\u80da\\u57f9\\u88f4\\u8d54\\u966a\\u914d\\u4f69\\u6c9b\\u55b7\\u76c6\\u7830\\u62a8\\u70f9\\u6f8e\\u5f6d\\u84ec\\u68da\\u787c\\u7bf7\\u81a8\\u670b\\u9e4f\\u6367\\u78b0\\u576f\\u7812\\u9739\\u6279\\u62ab\\u5288\\u7435\\u6bd7\\ufffd\".split(\"\"),e=0;e!=r[197].length;++e)65533!==r[197][e].charCodeAt(0)&&(n[r[197][e]]=50432+e,t[50432+e]=r[197][e]);for(r[198]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u826a\\u826b\\u826c\\u826d\\u8271\\u8275\\u8276\\u8277\\u8278\\u827b\\u827c\\u8280\\u8281\\u8283\\u8285\\u8286\\u8287\\u8289\\u828c\\u8290\\u8293\\u8294\\u8295\\u8296\\u829a\\u829b\\u829e\\u82a0\\u82a2\\u82a3\\u82a7\\u82b2\\u82b5\\u82b6\\u82ba\\u82bb\\u82bc\\u82bf\\u82c0\\u82c2\\u82c3\\u82c5\\u82c6\\u82c9\\u82d0\\u82d6\\u82d9\\u82da\\u82dd\\u82e2\\u82e7\\u82e8\\u82e9\\u82ea\\u82ec\\u82ed\\u82ee\\u82f0\\u82f2\\u82f3\\u82f5\\u82f6\\u82f8\\ufffd\\u82fa\\u82fc\\u82fd\\u82fe\\u82ff\\u8300\\u830a\\u830b\\u830d\\u8310\\u8312\\u8313\\u8316\\u8318\\u8319\\u831d\\u831e\\u831f\\u8320\\u8321\\u8322\\u8323\\u8324\\u8325\\u8326\\u8329\\u832a\\u832e\\u8330\\u8332\\u8337\\u833b\\u833d\\u5564\\u813e\\u75b2\\u76ae\\u5339\\u75de\\u50fb\\u5c41\\u8b6c\\u7bc7\\u504f\\u7247\\u9a97\\u98d8\\u6f02\\u74e2\\u7968\\u6487\\u77a5\\u62fc\\u9891\\u8d2b\\u54c1\\u8058\\u4e52\\u576a\\u82f9\\u840d\\u5e73\\u51ed\\u74f6\\u8bc4\\u5c4f\\u5761\\u6cfc\\u9887\\u5a46\\u7834\\u9b44\\u8feb\\u7c95\\u5256\\u6251\\u94fa\\u4ec6\\u8386\\u8461\\u83e9\\u84b2\\u57d4\\u6734\\u5703\\u666e\\u6d66\\u8c31\\u66dd\\u7011\\u671f\\u6b3a\\u6816\\u621a\\u59bb\\u4e03\\u51c4\\u6f06\\u67d2\\u6c8f\\u5176\\u68cb\\u5947\\u6b67\\u7566\\u5d0e\\u8110\\u9f50\\u65d7\\u7948\\u7941\\u9a91\\u8d77\\u5c82\\u4e5e\\u4f01\\u542f\\u5951\\u780c\\u5668\\u6c14\\u8fc4\\u5f03\\u6c7d\\u6ce3\\u8bab\\u6390\\ufffd\".split(\"\"),e=0;e!=r[198].length;++e)65533!==r[198][e].charCodeAt(0)&&(n[r[198][e]]=50688+e,t[50688+e]=r[198][e]);for(r[199]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u833e\\u833f\\u8341\\u8342\\u8344\\u8345\\u8348\\u834a\\u834b\\u834c\\u834d\\u834e\\u8353\\u8355\\u8356\\u8357\\u8358\\u8359\\u835d\\u8362\\u8370\\u8371\\u8372\\u8373\\u8374\\u8375\\u8376\\u8379\\u837a\\u837e\\u837f\\u8380\\u8381\\u8382\\u8383\\u8384\\u8387\\u8388\\u838a\\u838b\\u838c\\u838d\\u838f\\u8390\\u8391\\u8394\\u8395\\u8396\\u8397\\u8399\\u839a\\u839d\\u839f\\u83a1\\u83a2\\u83a3\\u83a4\\u83a5\\u83a6\\u83a7\\u83ac\\u83ad\\u83ae\\ufffd\\u83af\\u83b5\\u83bb\\u83be\\u83bf\\u83c2\\u83c3\\u83c4\\u83c6\\u83c8\\u83c9\\u83cb\\u83cd\\u83ce\\u83d0\\u83d1\\u83d2\\u83d3\\u83d5\\u83d7\\u83d9\\u83da\\u83db\\u83de\\u83e2\\u83e3\\u83e4\\u83e6\\u83e7\\u83e8\\u83eb\\u83ec\\u83ed\\u6070\\u6d3d\\u7275\\u6266\\u948e\\u94c5\\u5343\\u8fc1\\u7b7e\\u4edf\\u8c26\\u4e7e\\u9ed4\\u94b1\\u94b3\\u524d\\u6f5c\\u9063\\u6d45\\u8c34\\u5811\\u5d4c\\u6b20\\u6b49\\u67aa\\u545b\\u8154\\u7f8c\\u5899\\u8537\\u5f3a\\u62a2\\u6a47\\u9539\\u6572\\u6084\\u6865\\u77a7\\u4e54\\u4fa8\\u5de7\\u9798\\u64ac\\u7fd8\\u5ced\\u4fcf\\u7a8d\\u5207\\u8304\\u4e14\\u602f\\u7a83\\u94a6\\u4fb5\\u4eb2\\u79e6\\u7434\\u52e4\\u82b9\\u64d2\\u79bd\\u5bdd\\u6c81\\u9752\\u8f7b\\u6c22\\u503e\\u537f\\u6e05\\u64ce\\u6674\\u6c30\\u60c5\\u9877\\u8bf7\\u5e86\\u743c\\u7a77\\u79cb\\u4e18\\u90b1\\u7403\\u6c42\\u56da\\u914b\\u6cc5\\u8d8b\\u533a\\u86c6\\u66f2\\u8eaf\\u5c48\\u9a71\\u6e20\\ufffd\".split(\"\"),e=0;e!=r[199].length;++e)65533!==r[199][e].charCodeAt(0)&&(n[r[199][e]]=50944+e,t[50944+e]=r[199][e]);for(r[200]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u83ee\\u83ef\\u83f3\\u83f4\\u83f5\\u83f6\\u83f7\\u83fa\\u83fb\\u83fc\\u83fe\\u83ff\\u8400\\u8402\\u8405\\u8407\\u8408\\u8409\\u840a\\u8410\\u8412\\u8413\\u8414\\u8415\\u8416\\u8417\\u8419\\u841a\\u841b\\u841e\\u841f\\u8420\\u8421\\u8422\\u8423\\u8429\\u842a\\u842b\\u842c\\u842d\\u842e\\u842f\\u8430\\u8432\\u8433\\u8434\\u8435\\u8436\\u8437\\u8439\\u843a\\u843b\\u843e\\u843f\\u8440\\u8441\\u8442\\u8443\\u8444\\u8445\\u8447\\u8448\\u8449\\ufffd\\u844a\\u844b\\u844c\\u844d\\u844e\\u844f\\u8450\\u8452\\u8453\\u8454\\u8455\\u8456\\u8458\\u845d\\u845e\\u845f\\u8460\\u8462\\u8464\\u8465\\u8466\\u8467\\u8468\\u846a\\u846e\\u846f\\u8470\\u8472\\u8474\\u8477\\u8479\\u847b\\u847c\\u53d6\\u5a36\\u9f8b\\u8da3\\u53bb\\u5708\\u98a7\\u6743\\u919b\\u6cc9\\u5168\\u75ca\\u62f3\\u72ac\\u5238\\u529d\\u7f3a\\u7094\\u7638\\u5374\\u9e4a\\u69b7\\u786e\\u96c0\\u88d9\\u7fa4\\u7136\\u71c3\\u5189\\u67d3\\u74e4\\u58e4\\u6518\\u56b7\\u8ba9\\u9976\\u6270\\u7ed5\\u60f9\\u70ed\\u58ec\\u4ec1\\u4eba\\u5fcd\\u97e7\\u4efb\\u8ba4\\u5203\\u598a\\u7eab\\u6254\\u4ecd\\u65e5\\u620e\\u8338\\u84c9\\u8363\\u878d\\u7194\\u6eb6\\u5bb9\\u7ed2\\u5197\\u63c9\\u67d4\\u8089\\u8339\\u8815\\u5112\\u5b7a\\u5982\\u8fb1\\u4e73\\u6c5d\\u5165\\u8925\\u8f6f\\u962e\\u854a\\u745e\\u9510\\u95f0\\u6da6\\u82e5\\u5f31\\u6492\\u6d12\\u8428\\u816e\\u9cc3\\u585e\\u8d5b\\u4e09\\u53c1\\ufffd\".split(\"\"),e=0;e!=r[200].length;++e)65533!==r[200][e].charCodeAt(0)&&(n[r[200][e]]=51200+e,t[51200+e]=r[200][e]);for(r[201]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u847d\\u847e\\u847f\\u8480\\u8481\\u8483\\u8484\\u8485\\u8486\\u848a\\u848d\\u848f\\u8490\\u8491\\u8492\\u8493\\u8494\\u8495\\u8496\\u8498\\u849a\\u849b\\u849d\\u849e\\u849f\\u84a0\\u84a2\\u84a3\\u84a4\\u84a5\\u84a6\\u84a7\\u84a8\\u84a9\\u84aa\\u84ab\\u84ac\\u84ad\\u84ae\\u84b0\\u84b1\\u84b3\\u84b5\\u84b6\\u84b7\\u84bb\\u84bc\\u84be\\u84c0\\u84c2\\u84c3\\u84c5\\u84c6\\u84c7\\u84c8\\u84cb\\u84cc\\u84ce\\u84cf\\u84d2\\u84d4\\u84d5\\u84d7\\ufffd\\u84d8\\u84d9\\u84da\\u84db\\u84dc\\u84de\\u84e1\\u84e2\\u84e4\\u84e7\\u84e8\\u84e9\\u84ea\\u84eb\\u84ed\\u84ee\\u84ef\\u84f1\\u84f2\\u84f3\\u84f4\\u84f5\\u84f6\\u84f7\\u84f8\\u84f9\\u84fa\\u84fb\\u84fd\\u84fe\\u8500\\u8501\\u8502\\u4f1e\\u6563\\u6851\\u55d3\\u4e27\\u6414\\u9a9a\\u626b\\u5ac2\\u745f\\u8272\\u6da9\\u68ee\\u50e7\\u838e\\u7802\\u6740\\u5239\\u6c99\\u7eb1\\u50bb\\u5565\\u715e\\u7b5b\\u6652\\u73ca\\u82eb\\u6749\\u5c71\\u5220\\u717d\\u886b\\u95ea\\u9655\\u64c5\\u8d61\\u81b3\\u5584\\u6c55\\u6247\\u7f2e\\u5892\\u4f24\\u5546\\u8d4f\\u664c\\u4e0a\\u5c1a\\u88f3\\u68a2\\u634e\\u7a0d\\u70e7\\u828d\\u52fa\\u97f6\\u5c11\\u54e8\\u90b5\\u7ecd\\u5962\\u8d4a\\u86c7\\u820c\\u820d\\u8d66\\u6444\\u5c04\\u6151\\u6d89\\u793e\\u8bbe\\u7837\\u7533\\u547b\\u4f38\\u8eab\\u6df1\\u5a20\\u7ec5\\u795e\\u6c88\\u5ba1\\u5a76\\u751a\\u80be\\u614e\\u6e17\\u58f0\\u751f\\u7525\\u7272\\u5347\\u7ef3\\ufffd\".split(\"\"),e=0;e!=r[201].length;++e)65533!==r[201][e].charCodeAt(0)&&(n[r[201][e]]=51456+e,t[51456+e]=r[201][e]);for(r[202]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8503\\u8504\\u8505\\u8506\\u8507\\u8508\\u8509\\u850a\\u850b\\u850d\\u850e\\u850f\\u8510\\u8512\\u8514\\u8515\\u8516\\u8518\\u8519\\u851b\\u851c\\u851d\\u851e\\u8520\\u8522\\u8523\\u8524\\u8525\\u8526\\u8527\\u8528\\u8529\\u852a\\u852d\\u852e\\u852f\\u8530\\u8531\\u8532\\u8533\\u8534\\u8535\\u8536\\u853e\\u853f\\u8540\\u8541\\u8542\\u8544\\u8545\\u8546\\u8547\\u854b\\u854c\\u854d\\u854e\\u854f\\u8550\\u8551\\u8552\\u8553\\u8554\\u8555\\ufffd\\u8557\\u8558\\u855a\\u855b\\u855c\\u855d\\u855f\\u8560\\u8561\\u8562\\u8563\\u8565\\u8566\\u8567\\u8569\\u856a\\u856b\\u856c\\u856d\\u856e\\u856f\\u8570\\u8571\\u8573\\u8575\\u8576\\u8577\\u8578\\u857c\\u857d\\u857f\\u8580\\u8581\\u7701\\u76db\\u5269\\u80dc\\u5723\\u5e08\\u5931\\u72ee\\u65bd\\u6e7f\\u8bd7\\u5c38\\u8671\\u5341\\u77f3\\u62fe\\u65f6\\u4ec0\\u98df\\u8680\\u5b9e\\u8bc6\\u53f2\\u77e2\\u4f7f\\u5c4e\\u9a76\\u59cb\\u5f0f\\u793a\\u58eb\\u4e16\\u67ff\\u4e8b\\u62ed\\u8a93\\u901d\\u52bf\\u662f\\u55dc\\u566c\\u9002\\u4ed5\\u4f8d\\u91ca\\u9970\\u6c0f\\u5e02\\u6043\\u5ba4\\u89c6\\u8bd5\\u6536\\u624b\\u9996\\u5b88\\u5bff\\u6388\\u552e\\u53d7\\u7626\\u517d\\u852c\\u67a2\\u68b3\\u6b8a\\u6292\\u8f93\\u53d4\\u8212\\u6dd1\\u758f\\u4e66\\u8d4e\\u5b70\\u719f\\u85af\\u6691\\u66d9\\u7f72\\u8700\\u9ecd\\u9f20\\u5c5e\\u672f\\u8ff0\\u6811\\u675f\\u620d\\u7ad6\\u5885\\u5eb6\\u6570\\u6f31\\ufffd\".split(\"\"),e=0;e!=r[202].length;++e)65533!==r[202][e].charCodeAt(0)&&(n[r[202][e]]=51712+e,t[51712+e]=r[202][e]);for(r[203]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8582\\u8583\\u8586\\u8588\\u8589\\u858a\\u858b\\u858c\\u858d\\u858e\\u8590\\u8591\\u8592\\u8593\\u8594\\u8595\\u8596\\u8597\\u8598\\u8599\\u859a\\u859d\\u859e\\u859f\\u85a0\\u85a1\\u85a2\\u85a3\\u85a5\\u85a6\\u85a7\\u85a9\\u85ab\\u85ac\\u85ad\\u85b1\\u85b2\\u85b3\\u85b4\\u85b5\\u85b6\\u85b8\\u85ba\\u85bb\\u85bc\\u85bd\\u85be\\u85bf\\u85c0\\u85c2\\u85c3\\u85c4\\u85c5\\u85c6\\u85c7\\u85c8\\u85ca\\u85cb\\u85cc\\u85cd\\u85ce\\u85d1\\u85d2\\ufffd\\u85d4\\u85d6\\u85d7\\u85d8\\u85d9\\u85da\\u85db\\u85dd\\u85de\\u85df\\u85e0\\u85e1\\u85e2\\u85e3\\u85e5\\u85e6\\u85e7\\u85e8\\u85ea\\u85eb\\u85ec\\u85ed\\u85ee\\u85ef\\u85f0\\u85f1\\u85f2\\u85f3\\u85f4\\u85f5\\u85f6\\u85f7\\u85f8\\u6055\\u5237\\u800d\\u6454\\u8870\\u7529\\u5e05\\u6813\\u62f4\\u971c\\u53cc\\u723d\\u8c01\\u6c34\\u7761\\u7a0e\\u542e\\u77ac\\u987a\\u821c\\u8bf4\\u7855\\u6714\\u70c1\\u65af\\u6495\\u5636\\u601d\\u79c1\\u53f8\\u4e1d\\u6b7b\\u8086\\u5bfa\\u55e3\\u56db\\u4f3a\\u4f3c\\u9972\\u5df3\\u677e\\u8038\\u6002\\u9882\\u9001\\u5b8b\\u8bbc\\u8bf5\\u641c\\u8258\\u64de\\u55fd\\u82cf\\u9165\\u4fd7\\u7d20\\u901f\\u7c9f\\u50f3\\u5851\\u6eaf\\u5bbf\\u8bc9\\u8083\\u9178\\u849c\\u7b97\\u867d\\u968b\\u968f\\u7ee5\\u9ad3\\u788e\\u5c81\\u7a57\\u9042\\u96a7\\u795f\\u5b59\\u635f\\u7b0b\\u84d1\\u68ad\\u5506\\u7f29\\u7410\\u7d22\\u9501\\u6240\\u584c\\u4ed6\\u5b83\\u5979\\u5854\\ufffd\".split(\"\"),e=0;e!=r[203].length;++e)65533!==r[203][e].charCodeAt(0)&&(n[r[203][e]]=51968+e,t[51968+e]=r[203][e]);for(r[204]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u85f9\\u85fa\\u85fc\\u85fd\\u85fe\\u8600\\u8601\\u8602\\u8603\\u8604\\u8606\\u8607\\u8608\\u8609\\u860a\\u860b\\u860c\\u860d\\u860e\\u860f\\u8610\\u8612\\u8613\\u8614\\u8615\\u8617\\u8618\\u8619\\u861a\\u861b\\u861c\\u861d\\u861e\\u861f\\u8620\\u8621\\u8622\\u8623\\u8624\\u8625\\u8626\\u8628\\u862a\\u862b\\u862c\\u862d\\u862e\\u862f\\u8630\\u8631\\u8632\\u8633\\u8634\\u8635\\u8636\\u8637\\u8639\\u863a\\u863b\\u863d\\u863e\\u863f\\u8640\\ufffd\\u8641\\u8642\\u8643\\u8644\\u8645\\u8646\\u8647\\u8648\\u8649\\u864a\\u864b\\u864c\\u8652\\u8653\\u8655\\u8656\\u8657\\u8658\\u8659\\u865b\\u865c\\u865d\\u865f\\u8660\\u8661\\u8663\\u8664\\u8665\\u8666\\u8667\\u8668\\u8669\\u866a\\u736d\\u631e\\u8e4b\\u8e0f\\u80ce\\u82d4\\u62ac\\u53f0\\u6cf0\\u915e\\u592a\\u6001\\u6c70\\u574d\\u644a\\u8d2a\\u762b\\u6ee9\\u575b\\u6a80\\u75f0\\u6f6d\\u8c2d\\u8c08\\u5766\\u6bef\\u8892\\u78b3\\u63a2\\u53f9\\u70ad\\u6c64\\u5858\\u642a\\u5802\\u68e0\\u819b\\u5510\\u7cd6\\u5018\\u8eba\\u6dcc\\u8d9f\\u70eb\\u638f\\u6d9b\\u6ed4\\u7ee6\\u8404\\u6843\\u9003\\u6dd8\\u9676\\u8ba8\\u5957\\u7279\\u85e4\\u817e\\u75bc\\u8a8a\\u68af\\u5254\\u8e22\\u9511\\u63d0\\u9898\\u8e44\\u557c\\u4f53\\u66ff\\u568f\\u60d5\\u6d95\\u5243\\u5c49\\u5929\\u6dfb\\u586b\\u7530\\u751c\\u606c\\u8214\\u8146\\u6311\\u6761\\u8fe2\\u773a\\u8df3\\u8d34\\u94c1\\u5e16\\u5385\\u542c\\u70c3\\ufffd\".split(\"\"),e=0;e!=r[204].length;++e)65533!==r[204][e].charCodeAt(0)&&(n[r[204][e]]=52224+e,t[52224+e]=r[204][e]);for(r[205]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u866d\\u866f\\u8670\\u8672\\u8673\\u8674\\u8675\\u8676\\u8677\\u8678\\u8683\\u8684\\u8685\\u8686\\u8687\\u8688\\u8689\\u868e\\u868f\\u8690\\u8691\\u8692\\u8694\\u8696\\u8697\\u8698\\u8699\\u869a\\u869b\\u869e\\u869f\\u86a0\\u86a1\\u86a2\\u86a5\\u86a6\\u86ab\\u86ad\\u86ae\\u86b2\\u86b3\\u86b7\\u86b8\\u86b9\\u86bb\\u86bc\\u86bd\\u86be\\u86bf\\u86c1\\u86c2\\u86c3\\u86c5\\u86c8\\u86cc\\u86cd\\u86d2\\u86d3\\u86d5\\u86d6\\u86d7\\u86da\\u86dc\\ufffd\\u86dd\\u86e0\\u86e1\\u86e2\\u86e3\\u86e5\\u86e6\\u86e7\\u86e8\\u86ea\\u86eb\\u86ec\\u86ef\\u86f5\\u86f6\\u86f7\\u86fa\\u86fb\\u86fc\\u86fd\\u86ff\\u8701\\u8704\\u8705\\u8706\\u870b\\u870c\\u870e\\u870f\\u8710\\u8711\\u8714\\u8716\\u6c40\\u5ef7\\u505c\\u4ead\\u5ead\\u633a\\u8247\\u901a\\u6850\\u916e\\u77b3\\u540c\\u94dc\\u5f64\\u7ae5\\u6876\\u6345\\u7b52\\u7edf\\u75db\\u5077\\u6295\\u5934\\u900f\\u51f8\\u79c3\\u7a81\\u56fe\\u5f92\\u9014\\u6d82\\u5c60\\u571f\\u5410\\u5154\\u6e4d\\u56e2\\u63a8\\u9893\\u817f\\u8715\\u892a\\u9000\\u541e\\u5c6f\\u81c0\\u62d6\\u6258\\u8131\\u9e35\\u9640\\u9a6e\\u9a7c\\u692d\\u59a5\\u62d3\\u553e\\u6316\\u54c7\\u86d9\\u6d3c\\u5a03\\u74e6\\u889c\\u6b6a\\u5916\\u8c4c\\u5f2f\\u6e7e\\u73a9\\u987d\\u4e38\\u70f7\\u5b8c\\u7897\\u633d\\u665a\\u7696\\u60cb\\u5b9b\\u5a49\\u4e07\\u8155\\u6c6a\\u738b\\u4ea1\\u6789\\u7f51\\u5f80\\u65fa\\u671b\\u5fd8\\u5984\\u5a01\\ufffd\".split(\"\"),e=0;e!=r[205].length;++e)65533!==r[205][e].charCodeAt(0)&&(n[r[205][e]]=52480+e,t[52480+e]=r[205][e]);for(r[206]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8719\\u871b\\u871d\\u871f\\u8720\\u8724\\u8726\\u8727\\u8728\\u872a\\u872b\\u872c\\u872d\\u872f\\u8730\\u8732\\u8733\\u8735\\u8736\\u8738\\u8739\\u873a\\u873c\\u873d\\u8740\\u8741\\u8742\\u8743\\u8744\\u8745\\u8746\\u874a\\u874b\\u874d\\u874f\\u8750\\u8751\\u8752\\u8754\\u8755\\u8756\\u8758\\u875a\\u875b\\u875c\\u875d\\u875e\\u875f\\u8761\\u8762\\u8766\\u8767\\u8768\\u8769\\u876a\\u876b\\u876c\\u876d\\u876f\\u8771\\u8772\\u8773\\u8775\\ufffd\\u8777\\u8778\\u8779\\u877a\\u877f\\u8780\\u8781\\u8784\\u8786\\u8787\\u8789\\u878a\\u878c\\u878e\\u878f\\u8790\\u8791\\u8792\\u8794\\u8795\\u8796\\u8798\\u8799\\u879a\\u879b\\u879c\\u879d\\u879e\\u87a0\\u87a1\\u87a2\\u87a3\\u87a4\\u5dcd\\u5fae\\u5371\\u97e6\\u8fdd\\u6845\\u56f4\\u552f\\u60df\\u4e3a\\u6f4d\\u7ef4\\u82c7\\u840e\\u59d4\\u4f1f\\u4f2a\\u5c3e\\u7eac\\u672a\\u851a\\u5473\\u754f\\u80c3\\u5582\\u9b4f\\u4f4d\\u6e2d\\u8c13\\u5c09\\u6170\\u536b\\u761f\\u6e29\\u868a\\u6587\\u95fb\\u7eb9\\u543b\\u7a33\\u7d0a\\u95ee\\u55e1\\u7fc1\\u74ee\\u631d\\u8717\\u6da1\\u7a9d\\u6211\\u65a1\\u5367\\u63e1\\u6c83\\u5deb\\u545c\\u94a8\\u4e4c\\u6c61\\u8bec\\u5c4b\\u65e0\\u829c\\u68a7\\u543e\\u5434\\u6bcb\\u6b66\\u4e94\\u6342\\u5348\\u821e\\u4f0d\\u4fae\\u575e\\u620a\\u96fe\\u6664\\u7269\\u52ff\\u52a1\\u609f\\u8bef\\u6614\\u7199\\u6790\\u897f\\u7852\\u77fd\\u6670\\u563b\\u5438\\u9521\\u727a\\ufffd\".split(\"\"),e=0;e!=r[206].length;++e)65533!==r[206][e].charCodeAt(0)&&(n[r[206][e]]=52736+e,t[52736+e]=r[206][e]);for(r[207]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u87a5\\u87a6\\u87a7\\u87a9\\u87aa\\u87ae\\u87b0\\u87b1\\u87b2\\u87b4\\u87b6\\u87b7\\u87b8\\u87b9\\u87bb\\u87bc\\u87be\\u87bf\\u87c1\\u87c2\\u87c3\\u87c4\\u87c5\\u87c7\\u87c8\\u87c9\\u87cc\\u87cd\\u87ce\\u87cf\\u87d0\\u87d4\\u87d5\\u87d6\\u87d7\\u87d8\\u87d9\\u87da\\u87dc\\u87dd\\u87de\\u87df\\u87e1\\u87e2\\u87e3\\u87e4\\u87e6\\u87e7\\u87e8\\u87e9\\u87eb\\u87ec\\u87ed\\u87ef\\u87f0\\u87f1\\u87f2\\u87f3\\u87f4\\u87f5\\u87f6\\u87f7\\u87f8\\ufffd\\u87fa\\u87fb\\u87fc\\u87fd\\u87ff\\u8800\\u8801\\u8802\\u8804\\u8805\\u8806\\u8807\\u8808\\u8809\\u880b\\u880c\\u880d\\u880e\\u880f\\u8810\\u8811\\u8812\\u8814\\u8817\\u8818\\u8819\\u881a\\u881c\\u881d\\u881e\\u881f\\u8820\\u8823\\u7a00\\u606f\\u5e0c\\u6089\\u819d\\u5915\\u60dc\\u7184\\u70ef\\u6eaa\\u6c50\\u7280\\u6a84\\u88ad\\u5e2d\\u4e60\\u5ab3\\u559c\\u94e3\\u6d17\\u7cfb\\u9699\\u620f\\u7ec6\\u778e\\u867e\\u5323\\u971e\\u8f96\\u6687\\u5ce1\\u4fa0\\u72ed\\u4e0b\\u53a6\\u590f\\u5413\\u6380\\u9528\\u5148\\u4ed9\\u9c9c\\u7ea4\\u54b8\\u8d24\\u8854\\u8237\\u95f2\\u6d8e\\u5f26\\u5acc\\u663e\\u9669\\u73b0\\u732e\\u53bf\\u817a\\u9985\\u7fa1\\u5baa\\u9677\\u9650\\u7ebf\\u76f8\\u53a2\\u9576\\u9999\\u7bb1\\u8944\\u6e58\\u4e61\\u7fd4\\u7965\\u8be6\\u60f3\\u54cd\\u4eab\\u9879\\u5df7\\u6a61\\u50cf\\u5411\\u8c61\\u8427\\u785d\\u9704\\u524a\\u54ee\\u56a3\\u9500\\u6d88\\u5bb5\\u6dc6\\u6653\\ufffd\".split(\"\"),e=0;e!=r[207].length;++e)65533!==r[207][e].charCodeAt(0)&&(n[r[207][e]]=52992+e,t[52992+e]=r[207][e]);for(r[208]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8824\\u8825\\u8826\\u8827\\u8828\\u8829\\u882a\\u882b\\u882c\\u882d\\u882e\\u882f\\u8830\\u8831\\u8833\\u8834\\u8835\\u8836\\u8837\\u8838\\u883a\\u883b\\u883d\\u883e\\u883f\\u8841\\u8842\\u8843\\u8846\\u8847\\u8848\\u8849\\u884a\\u884b\\u884e\\u884f\\u8850\\u8851\\u8852\\u8853\\u8855\\u8856\\u8858\\u885a\\u885b\\u885c\\u885d\\u885e\\u885f\\u8860\\u8866\\u8867\\u886a\\u886d\\u886f\\u8871\\u8873\\u8874\\u8875\\u8876\\u8878\\u8879\\u887a\\ufffd\\u887b\\u887c\\u8880\\u8883\\u8886\\u8887\\u8889\\u888a\\u888c\\u888e\\u888f\\u8890\\u8891\\u8893\\u8894\\u8895\\u8897\\u8898\\u8899\\u889a\\u889b\\u889d\\u889e\\u889f\\u88a0\\u88a1\\u88a3\\u88a5\\u88a6\\u88a7\\u88a8\\u88a9\\u88aa\\u5c0f\\u5b5d\\u6821\\u8096\\u5578\\u7b11\\u6548\\u6954\\u4e9b\\u6b47\\u874e\\u978b\\u534f\\u631f\\u643a\\u90aa\\u659c\\u80c1\\u8c10\\u5199\\u68b0\\u5378\\u87f9\\u61c8\\u6cc4\\u6cfb\\u8c22\\u5c51\\u85aa\\u82af\\u950c\\u6b23\\u8f9b\\u65b0\\u5ffb\\u5fc3\\u4fe1\\u8845\\u661f\\u8165\\u7329\\u60fa\\u5174\\u5211\\u578b\\u5f62\\u90a2\\u884c\\u9192\\u5e78\\u674f\\u6027\\u59d3\\u5144\\u51f6\\u80f8\\u5308\\u6c79\\u96c4\\u718a\\u4f11\\u4fee\\u7f9e\\u673d\\u55c5\\u9508\\u79c0\\u8896\\u7ee3\\u589f\\u620c\\u9700\\u865a\\u5618\\u987b\\u5f90\\u8bb8\\u84c4\\u9157\\u53d9\\u65ed\\u5e8f\\u755c\\u6064\\u7d6e\\u5a7f\\u7eea\\u7eed\\u8f69\\u55a7\\u5ba3\\u60ac\\u65cb\\u7384\\ufffd\".split(\"\"),e=0;e!=r[208].length;++e)65533!==r[208][e].charCodeAt(0)&&(n[r[208][e]]=53248+e,t[53248+e]=r[208][e]);for(r[209]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u88ac\\u88ae\\u88af\\u88b0\\u88b2\\u88b3\\u88b4\\u88b5\\u88b6\\u88b8\\u88b9\\u88ba\\u88bb\\u88bd\\u88be\\u88bf\\u88c0\\u88c3\\u88c4\\u88c7\\u88c8\\u88ca\\u88cb\\u88cc\\u88cd\\u88cf\\u88d0\\u88d1\\u88d3\\u88d6\\u88d7\\u88da\\u88db\\u88dc\\u88dd\\u88de\\u88e0\\u88e1\\u88e6\\u88e7\\u88e9\\u88ea\\u88eb\\u88ec\\u88ed\\u88ee\\u88ef\\u88f2\\u88f5\\u88f6\\u88f7\\u88fa\\u88fb\\u88fd\\u88ff\\u8900\\u8901\\u8903\\u8904\\u8905\\u8906\\u8907\\u8908\\ufffd\\u8909\\u890b\\u890c\\u890d\\u890e\\u890f\\u8911\\u8914\\u8915\\u8916\\u8917\\u8918\\u891c\\u891d\\u891e\\u891f\\u8920\\u8922\\u8923\\u8924\\u8926\\u8927\\u8928\\u8929\\u892c\\u892d\\u892e\\u892f\\u8931\\u8932\\u8933\\u8935\\u8937\\u9009\\u7663\\u7729\\u7eda\\u9774\\u859b\\u5b66\\u7a74\\u96ea\\u8840\\u52cb\\u718f\\u5faa\\u65ec\\u8be2\\u5bfb\\u9a6f\\u5de1\\u6b89\\u6c5b\\u8bad\\u8baf\\u900a\\u8fc5\\u538b\\u62bc\\u9e26\\u9e2d\\u5440\\u4e2b\\u82bd\\u7259\\u869c\\u5d16\\u8859\\u6daf\\u96c5\\u54d1\\u4e9a\\u8bb6\\u7109\\u54bd\\u9609\\u70df\\u6df9\\u76d0\\u4e25\\u7814\\u8712\\u5ca9\\u5ef6\\u8a00\\u989c\\u960e\\u708e\\u6cbf\\u5944\\u63a9\\u773c\\u884d\\u6f14\\u8273\\u5830\\u71d5\\u538c\\u781a\\u96c1\\u5501\\u5f66\\u7130\\u5bb4\\u8c1a\\u9a8c\\u6b83\\u592e\\u9e2f\\u79e7\\u6768\\u626c\\u4f6f\\u75a1\\u7f8a\\u6d0b\\u9633\\u6c27\\u4ef0\\u75d2\\u517b\\u6837\\u6f3e\\u9080\\u8170\\u5996\\u7476\\ufffd\".split(\"\"),e=0;e!=r[209].length;++e)65533!==r[209][e].charCodeAt(0)&&(n[r[209][e]]=53504+e,t[53504+e]=r[209][e]);for(r[210]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8938\\u8939\\u893a\\u893b\\u893c\\u893d\\u893e\\u893f\\u8940\\u8942\\u8943\\u8945\\u8946\\u8947\\u8948\\u8949\\u894a\\u894b\\u894c\\u894d\\u894e\\u894f\\u8950\\u8951\\u8952\\u8953\\u8954\\u8955\\u8956\\u8957\\u8958\\u8959\\u895a\\u895b\\u895c\\u895d\\u8960\\u8961\\u8962\\u8963\\u8964\\u8965\\u8967\\u8968\\u8969\\u896a\\u896b\\u896c\\u896d\\u896e\\u896f\\u8970\\u8971\\u8972\\u8973\\u8974\\u8975\\u8976\\u8977\\u8978\\u8979\\u897a\\u897c\\ufffd\\u897d\\u897e\\u8980\\u8982\\u8984\\u8985\\u8987\\u8988\\u8989\\u898a\\u898b\\u898c\\u898d\\u898e\\u898f\\u8990\\u8991\\u8992\\u8993\\u8994\\u8995\\u8996\\u8997\\u8998\\u8999\\u899a\\u899b\\u899c\\u899d\\u899e\\u899f\\u89a0\\u89a1\\u6447\\u5c27\\u9065\\u7a91\\u8c23\\u59da\\u54ac\\u8200\\u836f\\u8981\\u8000\\u6930\\u564e\\u8036\\u7237\\u91ce\\u51b6\\u4e5f\\u9875\\u6396\\u4e1a\\u53f6\\u66f3\\u814b\\u591c\\u6db2\\u4e00\\u58f9\\u533b\\u63d6\\u94f1\\u4f9d\\u4f0a\\u8863\\u9890\\u5937\\u9057\\u79fb\\u4eea\\u80f0\\u7591\\u6c82\\u5b9c\\u59e8\\u5f5d\\u6905\\u8681\\u501a\\u5df2\\u4e59\\u77e3\\u4ee5\\u827a\\u6291\\u6613\\u9091\\u5c79\\u4ebf\\u5f79\\u81c6\\u9038\\u8084\\u75ab\\u4ea6\\u88d4\\u610f\\u6bc5\\u5fc6\\u4e49\\u76ca\\u6ea2\\u8be3\\u8bae\\u8c0a\\u8bd1\\u5f02\\u7ffc\\u7fcc\\u7ece\\u8335\\u836b\\u56e0\\u6bb7\\u97f3\\u9634\\u59fb\\u541f\\u94f6\\u6deb\\u5bc5\\u996e\\u5c39\\u5f15\\u9690\\ufffd\".split(\"\"),e=0;e!=r[210].length;++e)65533!==r[210][e].charCodeAt(0)&&(n[r[210][e]]=53760+e,t[53760+e]=r[210][e]);for(r[211]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u89a2\\u89a3\\u89a4\\u89a5\\u89a6\\u89a7\\u89a8\\u89a9\\u89aa\\u89ab\\u89ac\\u89ad\\u89ae\\u89af\\u89b0\\u89b1\\u89b2\\u89b3\\u89b4\\u89b5\\u89b6\\u89b7\\u89b8\\u89b9\\u89ba\\u89bb\\u89bc\\u89bd\\u89be\\u89bf\\u89c0\\u89c3\\u89cd\\u89d3\\u89d4\\u89d5\\u89d7\\u89d8\\u89d9\\u89db\\u89dd\\u89df\\u89e0\\u89e1\\u89e2\\u89e4\\u89e7\\u89e8\\u89e9\\u89ea\\u89ec\\u89ed\\u89ee\\u89f0\\u89f1\\u89f2\\u89f4\\u89f5\\u89f6\\u89f7\\u89f8\\u89f9\\u89fa\\ufffd\\u89fb\\u89fc\\u89fd\\u89fe\\u89ff\\u8a01\\u8a02\\u8a03\\u8a04\\u8a05\\u8a06\\u8a08\\u8a09\\u8a0a\\u8a0b\\u8a0c\\u8a0d\\u8a0e\\u8a0f\\u8a10\\u8a11\\u8a12\\u8a13\\u8a14\\u8a15\\u8a16\\u8a17\\u8a18\\u8a19\\u8a1a\\u8a1b\\u8a1c\\u8a1d\\u5370\\u82f1\\u6a31\\u5a74\\u9e70\\u5e94\\u7f28\\u83b9\\u8424\\u8425\\u8367\\u8747\\u8fce\\u8d62\\u76c8\\u5f71\\u9896\\u786c\\u6620\\u54df\\u62e5\\u4f63\\u81c3\\u75c8\\u5eb8\\u96cd\\u8e0a\\u86f9\\u548f\\u6cf3\\u6d8c\\u6c38\\u607f\\u52c7\\u7528\\u5e7d\\u4f18\\u60a0\\u5fe7\\u5c24\\u7531\\u90ae\\u94c0\\u72b9\\u6cb9\\u6e38\\u9149\\u6709\\u53cb\\u53f3\\u4f51\\u91c9\\u8bf1\\u53c8\\u5e7c\\u8fc2\\u6de4\\u4e8e\\u76c2\\u6986\\u865e\\u611a\\u8206\\u4f59\\u4fde\\u903e\\u9c7c\\u6109\\u6e1d\\u6e14\\u9685\\u4e88\\u5a31\\u96e8\\u4e0e\\u5c7f\\u79b9\\u5b87\\u8bed\\u7fbd\\u7389\\u57df\\u828b\\u90c1\\u5401\\u9047\\u55bb\\u5cea\\u5fa1\\u6108\\u6b32\\u72f1\\u80b2\\u8a89\\ufffd\".split(\"\"),e=0;e!=r[211].length;++e)65533!==r[211][e].charCodeAt(0)&&(n[r[211][e]]=54016+e,t[54016+e]=r[211][e]);for(r[212]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8a1e\\u8a1f\\u8a20\\u8a21\\u8a22\\u8a23\\u8a24\\u8a25\\u8a26\\u8a27\\u8a28\\u8a29\\u8a2a\\u8a2b\\u8a2c\\u8a2d\\u8a2e\\u8a2f\\u8a30\\u8a31\\u8a32\\u8a33\\u8a34\\u8a35\\u8a36\\u8a37\\u8a38\\u8a39\\u8a3a\\u8a3b\\u8a3c\\u8a3d\\u8a3f\\u8a40\\u8a41\\u8a42\\u8a43\\u8a44\\u8a45\\u8a46\\u8a47\\u8a49\\u8a4a\\u8a4b\\u8a4c\\u8a4d\\u8a4e\\u8a4f\\u8a50\\u8a51\\u8a52\\u8a53\\u8a54\\u8a55\\u8a56\\u8a57\\u8a58\\u8a59\\u8a5a\\u8a5b\\u8a5c\\u8a5d\\u8a5e\\ufffd\\u8a5f\\u8a60\\u8a61\\u8a62\\u8a63\\u8a64\\u8a65\\u8a66\\u8a67\\u8a68\\u8a69\\u8a6a\\u8a6b\\u8a6c\\u8a6d\\u8a6e\\u8a6f\\u8a70\\u8a71\\u8a72\\u8a73\\u8a74\\u8a75\\u8a76\\u8a77\\u8a78\\u8a7a\\u8a7b\\u8a7c\\u8a7d\\u8a7e\\u8a7f\\u8a80\\u6d74\\u5bd3\\u88d5\\u9884\\u8c6b\\u9a6d\\u9e33\\u6e0a\\u51a4\\u5143\\u57a3\\u8881\\u539f\\u63f4\\u8f95\\u56ed\\u5458\\u5706\\u733f\\u6e90\\u7f18\\u8fdc\\u82d1\\u613f\\u6028\\u9662\\u66f0\\u7ea6\\u8d8a\\u8dc3\\u94a5\\u5cb3\\u7ca4\\u6708\\u60a6\\u9605\\u8018\\u4e91\\u90e7\\u5300\\u9668\\u5141\\u8fd0\\u8574\\u915d\\u6655\\u97f5\\u5b55\\u531d\\u7838\\u6742\\u683d\\u54c9\\u707e\\u5bb0\\u8f7d\\u518d\\u5728\\u54b1\\u6512\\u6682\\u8d5e\\u8d43\\u810f\\u846c\\u906d\\u7cdf\\u51ff\\u85fb\\u67a3\\u65e9\\u6fa1\\u86a4\\u8e81\\u566a\\u9020\\u7682\\u7076\\u71e5\\u8d23\\u62e9\\u5219\\u6cfd\\u8d3c\\u600e\\u589e\\u618e\\u66fe\\u8d60\\u624e\\u55b3\\u6e23\\u672d\\u8f67\\ufffd\".split(\"\"),e=0;e!=r[212].length;++e)65533!==r[212][e].charCodeAt(0)&&(n[r[212][e]]=54272+e,t[54272+e]=r[212][e]);for(r[213]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8a81\\u8a82\\u8a83\\u8a84\\u8a85\\u8a86\\u8a87\\u8a88\\u8a8b\\u8a8c\\u8a8d\\u8a8e\\u8a8f\\u8a90\\u8a91\\u8a92\\u8a94\\u8a95\\u8a96\\u8a97\\u8a98\\u8a99\\u8a9a\\u8a9b\\u8a9c\\u8a9d\\u8a9e\\u8a9f\\u8aa0\\u8aa1\\u8aa2\\u8aa3\\u8aa4\\u8aa5\\u8aa6\\u8aa7\\u8aa8\\u8aa9\\u8aaa\\u8aab\\u8aac\\u8aad\\u8aae\\u8aaf\\u8ab0\\u8ab1\\u8ab2\\u8ab3\\u8ab4\\u8ab5\\u8ab6\\u8ab7\\u8ab8\\u8ab9\\u8aba\\u8abb\\u8abc\\u8abd\\u8abe\\u8abf\\u8ac0\\u8ac1\\u8ac2\\ufffd\\u8ac3\\u8ac4\\u8ac5\\u8ac6\\u8ac7\\u8ac8\\u8ac9\\u8aca\\u8acb\\u8acc\\u8acd\\u8ace\\u8acf\\u8ad0\\u8ad1\\u8ad2\\u8ad3\\u8ad4\\u8ad5\\u8ad6\\u8ad7\\u8ad8\\u8ad9\\u8ada\\u8adb\\u8adc\\u8add\\u8ade\\u8adf\\u8ae0\\u8ae1\\u8ae2\\u8ae3\\u94e1\\u95f8\\u7728\\u6805\\u69a8\\u548b\\u4e4d\\u70b8\\u8bc8\\u6458\\u658b\\u5b85\\u7a84\\u503a\\u5be8\\u77bb\\u6be1\\u8a79\\u7c98\\u6cbe\\u76cf\\u65a9\\u8f97\\u5d2d\\u5c55\\u8638\\u6808\\u5360\\u6218\\u7ad9\\u6e5b\\u7efd\\u6a1f\\u7ae0\\u5f70\\u6f33\\u5f20\\u638c\\u6da8\\u6756\\u4e08\\u5e10\\u8d26\\u4ed7\\u80c0\\u7634\\u969c\\u62db\\u662d\\u627e\\u6cbc\\u8d75\\u7167\\u7f69\\u5146\\u8087\\u53ec\\u906e\\u6298\\u54f2\\u86f0\\u8f99\\u8005\\u9517\\u8517\\u8fd9\\u6d59\\u73cd\\u659f\\u771f\\u7504\\u7827\\u81fb\\u8d1e\\u9488\\u4fa6\\u6795\\u75b9\\u8bca\\u9707\\u632f\\u9547\\u9635\\u84b8\\u6323\\u7741\\u5f81\\u72f0\\u4e89\\u6014\\u6574\\u62ef\\u6b63\\u653f\\ufffd\".split(\"\"),e=0;e!=r[213].length;++e)65533!==r[213][e].charCodeAt(0)&&(n[r[213][e]]=54528+e,t[54528+e]=r[213][e]);for(r[214]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8ae4\\u8ae5\\u8ae6\\u8ae7\\u8ae8\\u8ae9\\u8aea\\u8aeb\\u8aec\\u8aed\\u8aee\\u8aef\\u8af0\\u8af1\\u8af2\\u8af3\\u8af4\\u8af5\\u8af6\\u8af7\\u8af8\\u8af9\\u8afa\\u8afb\\u8afc\\u8afd\\u8afe\\u8aff\\u8b00\\u8b01\\u8b02\\u8b03\\u8b04\\u8b05\\u8b06\\u8b08\\u8b09\\u8b0a\\u8b0b\\u8b0c\\u8b0d\\u8b0e\\u8b0f\\u8b10\\u8b11\\u8b12\\u8b13\\u8b14\\u8b15\\u8b16\\u8b17\\u8b18\\u8b19\\u8b1a\\u8b1b\\u8b1c\\u8b1d\\u8b1e\\u8b1f\\u8b20\\u8b21\\u8b22\\u8b23\\ufffd\\u8b24\\u8b25\\u8b27\\u8b28\\u8b29\\u8b2a\\u8b2b\\u8b2c\\u8b2d\\u8b2e\\u8b2f\\u8b30\\u8b31\\u8b32\\u8b33\\u8b34\\u8b35\\u8b36\\u8b37\\u8b38\\u8b39\\u8b3a\\u8b3b\\u8b3c\\u8b3d\\u8b3e\\u8b3f\\u8b40\\u8b41\\u8b42\\u8b43\\u8b44\\u8b45\\u5e27\\u75c7\\u90d1\\u8bc1\\u829d\\u679d\\u652f\\u5431\\u8718\\u77e5\\u80a2\\u8102\\u6c41\\u4e4b\\u7ec7\\u804c\\u76f4\\u690d\\u6b96\\u6267\\u503c\\u4f84\\u5740\\u6307\\u6b62\\u8dbe\\u53ea\\u65e8\\u7eb8\\u5fd7\\u631a\\u63b7\\u81f3\\u81f4\\u7f6e\\u5e1c\\u5cd9\\u5236\\u667a\\u79e9\\u7a1a\\u8d28\\u7099\\u75d4\\u6ede\\u6cbb\\u7a92\\u4e2d\\u76c5\\u5fe0\\u949f\\u8877\\u7ec8\\u79cd\\u80bf\\u91cd\\u4ef2\\u4f17\\u821f\\u5468\\u5dde\\u6d32\\u8bcc\\u7ca5\\u8f74\\u8098\\u5e1a\\u5492\\u76b1\\u5b99\\u663c\\u9aa4\\u73e0\\u682a\\u86db\\u6731\\u732a\\u8bf8\\u8bdb\\u9010\\u7af9\\u70db\\u716e\\u62c4\\u77a9\\u5631\\u4e3b\\u8457\\u67f1\\u52a9\\u86c0\\u8d2e\\u94f8\\u7b51\\ufffd\".split(\"\"),e=0;e!=r[214].length;++e)65533!==r[214][e].charCodeAt(0)&&(n[r[214][e]]=54784+e,t[54784+e]=r[214][e]);for(r[215]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8b46\\u8b47\\u8b48\\u8b49\\u8b4a\\u8b4b\\u8b4c\\u8b4d\\u8b4e\\u8b4f\\u8b50\\u8b51\\u8b52\\u8b53\\u8b54\\u8b55\\u8b56\\u8b57\\u8b58\\u8b59\\u8b5a\\u8b5b\\u8b5c\\u8b5d\\u8b5e\\u8b5f\\u8b60\\u8b61\\u8b62\\u8b63\\u8b64\\u8b65\\u8b67\\u8b68\\u8b69\\u8b6a\\u8b6b\\u8b6d\\u8b6e\\u8b6f\\u8b70\\u8b71\\u8b72\\u8b73\\u8b74\\u8b75\\u8b76\\u8b77\\u8b78\\u8b79\\u8b7a\\u8b7b\\u8b7c\\u8b7d\\u8b7e\\u8b7f\\u8b80\\u8b81\\u8b82\\u8b83\\u8b84\\u8b85\\u8b86\\ufffd\\u8b87\\u8b88\\u8b89\\u8b8a\\u8b8b\\u8b8c\\u8b8d\\u8b8e\\u8b8f\\u8b90\\u8b91\\u8b92\\u8b93\\u8b94\\u8b95\\u8b96\\u8b97\\u8b98\\u8b99\\u8b9a\\u8b9b\\u8b9c\\u8b9d\\u8b9e\\u8b9f\\u8bac\\u8bb1\\u8bbb\\u8bc7\\u8bd0\\u8bea\\u8c09\\u8c1e\\u4f4f\\u6ce8\\u795d\\u9a7b\\u6293\\u722a\\u62fd\\u4e13\\u7816\\u8f6c\\u64b0\\u8d5a\\u7bc6\\u6869\\u5e84\\u88c5\\u5986\\u649e\\u58ee\\u72b6\\u690e\\u9525\\u8ffd\\u8d58\\u5760\\u7f00\\u8c06\\u51c6\\u6349\\u62d9\\u5353\\u684c\\u7422\\u8301\\u914c\\u5544\\u7740\\u707c\\u6d4a\\u5179\\u54a8\\u8d44\\u59ff\\u6ecb\\u6dc4\\u5b5c\\u7d2b\\u4ed4\\u7c7d\\u6ed3\\u5b50\\u81ea\\u6e0d\\u5b57\\u9b03\\u68d5\\u8e2a\\u5b97\\u7efc\\u603b\\u7eb5\\u90b9\\u8d70\\u594f\\u63cd\\u79df\\u8db3\\u5352\\u65cf\\u7956\\u8bc5\\u963b\\u7ec4\\u94bb\\u7e82\\u5634\\u9189\\u6700\\u7f6a\\u5c0a\\u9075\\u6628\\u5de6\\u4f50\\u67de\\u505a\\u4f5c\\u5750\\u5ea7\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[215].length;++e)65533!==r[215][e].charCodeAt(0)&&(n[r[215][e]]=55040+e,t[55040+e]=r[215][e]);for(r[216]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8c38\\u8c39\\u8c3a\\u8c3b\\u8c3c\\u8c3d\\u8c3e\\u8c3f\\u8c40\\u8c42\\u8c43\\u8c44\\u8c45\\u8c48\\u8c4a\\u8c4b\\u8c4d\\u8c4e\\u8c4f\\u8c50\\u8c51\\u8c52\\u8c53\\u8c54\\u8c56\\u8c57\\u8c58\\u8c59\\u8c5b\\u8c5c\\u8c5d\\u8c5e\\u8c5f\\u8c60\\u8c63\\u8c64\\u8c65\\u8c66\\u8c67\\u8c68\\u8c69\\u8c6c\\u8c6d\\u8c6e\\u8c6f\\u8c70\\u8c71\\u8c72\\u8c74\\u8c75\\u8c76\\u8c77\\u8c7b\\u8c7c\\u8c7d\\u8c7e\\u8c7f\\u8c80\\u8c81\\u8c83\\u8c84\\u8c86\\u8c87\\ufffd\\u8c88\\u8c8b\\u8c8d\\u8c8e\\u8c8f\\u8c90\\u8c91\\u8c92\\u8c93\\u8c95\\u8c96\\u8c97\\u8c99\\u8c9a\\u8c9b\\u8c9c\\u8c9d\\u8c9e\\u8c9f\\u8ca0\\u8ca1\\u8ca2\\u8ca3\\u8ca4\\u8ca5\\u8ca6\\u8ca7\\u8ca8\\u8ca9\\u8caa\\u8cab\\u8cac\\u8cad\\u4e8d\\u4e0c\\u5140\\u4e10\\u5eff\\u5345\\u4e15\\u4e98\\u4e1e\\u9b32\\u5b6c\\u5669\\u4e28\\u79ba\\u4e3f\\u5315\\u4e47\\u592d\\u723b\\u536e\\u6c10\\u56df\\u80e4\\u9997\\u6bd3\\u777e\\u9f17\\u4e36\\u4e9f\\u9f10\\u4e5c\\u4e69\\u4e93\\u8288\\u5b5b\\u556c\\u560f\\u4ec4\\u538d\\u539d\\u53a3\\u53a5\\u53ae\\u9765\\u8d5d\\u531a\\u53f5\\u5326\\u532e\\u533e\\u8d5c\\u5366\\u5363\\u5202\\u5208\\u520e\\u522d\\u5233\\u523f\\u5240\\u524c\\u525e\\u5261\\u525c\\u84af\\u527d\\u5282\\u5281\\u5290\\u5293\\u5182\\u7f54\\u4ebb\\u4ec3\\u4ec9\\u4ec2\\u4ee8\\u4ee1\\u4eeb\\u4ede\\u4f1b\\u4ef3\\u4f22\\u4f64\\u4ef5\\u4f25\\u4f27\\u4f09\\u4f2b\\u4f5e\\u4f67\\u6538\\u4f5a\\u4f5d\\ufffd\".split(\"\"),e=0;e!=r[216].length;++e)65533!==r[216][e].charCodeAt(0)&&(n[r[216][e]]=55296+e,t[55296+e]=r[216][e]);for(r[217]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8cae\\u8caf\\u8cb0\\u8cb1\\u8cb2\\u8cb3\\u8cb4\\u8cb5\\u8cb6\\u8cb7\\u8cb8\\u8cb9\\u8cba\\u8cbb\\u8cbc\\u8cbd\\u8cbe\\u8cbf\\u8cc0\\u8cc1\\u8cc2\\u8cc3\\u8cc4\\u8cc5\\u8cc6\\u8cc7\\u8cc8\\u8cc9\\u8cca\\u8ccb\\u8ccc\\u8ccd\\u8cce\\u8ccf\\u8cd0\\u8cd1\\u8cd2\\u8cd3\\u8cd4\\u8cd5\\u8cd6\\u8cd7\\u8cd8\\u8cd9\\u8cda\\u8cdb\\u8cdc\\u8cdd\\u8cde\\u8cdf\\u8ce0\\u8ce1\\u8ce2\\u8ce3\\u8ce4\\u8ce5\\u8ce6\\u8ce7\\u8ce8\\u8ce9\\u8cea\\u8ceb\\u8cec\\ufffd\\u8ced\\u8cee\\u8cef\\u8cf0\\u8cf1\\u8cf2\\u8cf3\\u8cf4\\u8cf5\\u8cf6\\u8cf7\\u8cf8\\u8cf9\\u8cfa\\u8cfb\\u8cfc\\u8cfd\\u8cfe\\u8cff\\u8d00\\u8d01\\u8d02\\u8d03\\u8d04\\u8d05\\u8d06\\u8d07\\u8d08\\u8d09\\u8d0a\\u8d0b\\u8d0c\\u8d0d\\u4f5f\\u4f57\\u4f32\\u4f3d\\u4f76\\u4f74\\u4f91\\u4f89\\u4f83\\u4f8f\\u4f7e\\u4f7b\\u4faa\\u4f7c\\u4fac\\u4f94\\u4fe6\\u4fe8\\u4fea\\u4fc5\\u4fda\\u4fe3\\u4fdc\\u4fd1\\u4fdf\\u4ff8\\u5029\\u504c\\u4ff3\\u502c\\u500f\\u502e\\u502d\\u4ffe\\u501c\\u500c\\u5025\\u5028\\u507e\\u5043\\u5055\\u5048\\u504e\\u506c\\u507b\\u50a5\\u50a7\\u50a9\\u50ba\\u50d6\\u5106\\u50ed\\u50ec\\u50e6\\u50ee\\u5107\\u510b\\u4edd\\u6c3d\\u4f58\\u4f65\\u4fce\\u9fa0\\u6c46\\u7c74\\u516e\\u5dfd\\u9ec9\\u9998\\u5181\\u5914\\u52f9\\u530d\\u8a07\\u5310\\u51eb\\u5919\\u5155\\u4ea0\\u5156\\u4eb3\\u886e\\u88a4\\u4eb5\\u8114\\u88d2\\u7980\\u5b34\\u8803\\u7fb8\\u51ab\\u51b1\\u51bd\\u51bc\\ufffd\".split(\"\"),e=0;e!=r[217].length;++e)65533!==r[217][e].charCodeAt(0)&&(n[r[217][e]]=55552+e,t[55552+e]=r[217][e]);for(r[218]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8d0e\\u8d0f\\u8d10\\u8d11\\u8d12\\u8d13\\u8d14\\u8d15\\u8d16\\u8d17\\u8d18\\u8d19\\u8d1a\\u8d1b\\u8d1c\\u8d20\\u8d51\\u8d52\\u8d57\\u8d5f\\u8d65\\u8d68\\u8d69\\u8d6a\\u8d6c\\u8d6e\\u8d6f\\u8d71\\u8d72\\u8d78\\u8d79\\u8d7a\\u8d7b\\u8d7c\\u8d7d\\u8d7e\\u8d7f\\u8d80\\u8d82\\u8d83\\u8d86\\u8d87\\u8d88\\u8d89\\u8d8c\\u8d8d\\u8d8e\\u8d8f\\u8d90\\u8d92\\u8d93\\u8d95\\u8d96\\u8d97\\u8d98\\u8d99\\u8d9a\\u8d9b\\u8d9c\\u8d9d\\u8d9e\\u8da0\\u8da1\\ufffd\\u8da2\\u8da4\\u8da5\\u8da6\\u8da7\\u8da8\\u8da9\\u8daa\\u8dab\\u8dac\\u8dad\\u8dae\\u8daf\\u8db0\\u8db2\\u8db6\\u8db7\\u8db9\\u8dbb\\u8dbd\\u8dc0\\u8dc1\\u8dc2\\u8dc5\\u8dc7\\u8dc8\\u8dc9\\u8dca\\u8dcd\\u8dd0\\u8dd2\\u8dd3\\u8dd4\\u51c7\\u5196\\u51a2\\u51a5\\u8ba0\\u8ba6\\u8ba7\\u8baa\\u8bb4\\u8bb5\\u8bb7\\u8bc2\\u8bc3\\u8bcb\\u8bcf\\u8bce\\u8bd2\\u8bd3\\u8bd4\\u8bd6\\u8bd8\\u8bd9\\u8bdc\\u8bdf\\u8be0\\u8be4\\u8be8\\u8be9\\u8bee\\u8bf0\\u8bf3\\u8bf6\\u8bf9\\u8bfc\\u8bff\\u8c00\\u8c02\\u8c04\\u8c07\\u8c0c\\u8c0f\\u8c11\\u8c12\\u8c14\\u8c15\\u8c16\\u8c19\\u8c1b\\u8c18\\u8c1d\\u8c1f\\u8c20\\u8c21\\u8c25\\u8c27\\u8c2a\\u8c2b\\u8c2e\\u8c2f\\u8c32\\u8c33\\u8c35\\u8c36\\u5369\\u537a\\u961d\\u9622\\u9621\\u9631\\u962a\\u963d\\u963c\\u9642\\u9649\\u9654\\u965f\\u9667\\u966c\\u9672\\u9674\\u9688\\u968d\\u9697\\u96b0\\u9097\\u909b\\u909d\\u9099\\u90ac\\u90a1\\u90b4\\u90b3\\u90b6\\u90ba\\ufffd\".split(\"\"),e=0;e!=r[218].length;++e)65533!==r[218][e].charCodeAt(0)&&(n[r[218][e]]=55808+e,t[55808+e]=r[218][e]);for(r[219]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8dd5\\u8dd8\\u8dd9\\u8ddc\\u8de0\\u8de1\\u8de2\\u8de5\\u8de6\\u8de7\\u8de9\\u8ded\\u8dee\\u8df0\\u8df1\\u8df2\\u8df4\\u8df6\\u8dfc\\u8dfe\\u8dff\\u8e00\\u8e01\\u8e02\\u8e03\\u8e04\\u8e06\\u8e07\\u8e08\\u8e0b\\u8e0d\\u8e0e\\u8e10\\u8e11\\u8e12\\u8e13\\u8e15\\u8e16\\u8e17\\u8e18\\u8e19\\u8e1a\\u8e1b\\u8e1c\\u8e20\\u8e21\\u8e24\\u8e25\\u8e26\\u8e27\\u8e28\\u8e2b\\u8e2d\\u8e30\\u8e32\\u8e33\\u8e34\\u8e36\\u8e37\\u8e38\\u8e3b\\u8e3c\\u8e3e\\ufffd\\u8e3f\\u8e43\\u8e45\\u8e46\\u8e4c\\u8e4d\\u8e4e\\u8e4f\\u8e50\\u8e53\\u8e54\\u8e55\\u8e56\\u8e57\\u8e58\\u8e5a\\u8e5b\\u8e5c\\u8e5d\\u8e5e\\u8e5f\\u8e60\\u8e61\\u8e62\\u8e63\\u8e64\\u8e65\\u8e67\\u8e68\\u8e6a\\u8e6b\\u8e6e\\u8e71\\u90b8\\u90b0\\u90cf\\u90c5\\u90be\\u90d0\\u90c4\\u90c7\\u90d3\\u90e6\\u90e2\\u90dc\\u90d7\\u90db\\u90eb\\u90ef\\u90fe\\u9104\\u9122\\u911e\\u9123\\u9131\\u912f\\u9139\\u9143\\u9146\\u520d\\u5942\\u52a2\\u52ac\\u52ad\\u52be\\u54ff\\u52d0\\u52d6\\u52f0\\u53df\\u71ee\\u77cd\\u5ef4\\u51f5\\u51fc\\u9b2f\\u53b6\\u5f01\\u755a\\u5def\\u574c\\u57a9\\u57a1\\u587e\\u58bc\\u58c5\\u58d1\\u5729\\u572c\\u572a\\u5733\\u5739\\u572e\\u572f\\u575c\\u573b\\u5742\\u5769\\u5785\\u576b\\u5786\\u577c\\u577b\\u5768\\u576d\\u5776\\u5773\\u57ad\\u57a4\\u578c\\u57b2\\u57cf\\u57a7\\u57b4\\u5793\\u57a0\\u57d5\\u57d8\\u57da\\u57d9\\u57d2\\u57b8\\u57f4\\u57ef\\u57f8\\u57e4\\u57dd\\ufffd\".split(\"\"),e=0;e!=r[219].length;++e)65533!==r[219][e].charCodeAt(0)&&(n[r[219][e]]=56064+e,t[56064+e]=r[219][e]);for(r[220]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8e73\\u8e75\\u8e77\\u8e78\\u8e79\\u8e7a\\u8e7b\\u8e7d\\u8e7e\\u8e80\\u8e82\\u8e83\\u8e84\\u8e86\\u8e88\\u8e89\\u8e8a\\u8e8b\\u8e8c\\u8e8d\\u8e8e\\u8e91\\u8e92\\u8e93\\u8e95\\u8e96\\u8e97\\u8e98\\u8e99\\u8e9a\\u8e9b\\u8e9d\\u8e9f\\u8ea0\\u8ea1\\u8ea2\\u8ea3\\u8ea4\\u8ea5\\u8ea6\\u8ea7\\u8ea8\\u8ea9\\u8eaa\\u8ead\\u8eae\\u8eb0\\u8eb1\\u8eb3\\u8eb4\\u8eb5\\u8eb6\\u8eb7\\u8eb8\\u8eb9\\u8ebb\\u8ebc\\u8ebd\\u8ebe\\u8ebf\\u8ec0\\u8ec1\\u8ec2\\ufffd\\u8ec3\\u8ec4\\u8ec5\\u8ec6\\u8ec7\\u8ec8\\u8ec9\\u8eca\\u8ecb\\u8ecc\\u8ecd\\u8ecf\\u8ed0\\u8ed1\\u8ed2\\u8ed3\\u8ed4\\u8ed5\\u8ed6\\u8ed7\\u8ed8\\u8ed9\\u8eda\\u8edb\\u8edc\\u8edd\\u8ede\\u8edf\\u8ee0\\u8ee1\\u8ee2\\u8ee3\\u8ee4\\u580b\\u580d\\u57fd\\u57ed\\u5800\\u581e\\u5819\\u5844\\u5820\\u5865\\u586c\\u5881\\u5889\\u589a\\u5880\\u99a8\\u9f19\\u61ff\\u8279\\u827d\\u827f\\u828f\\u828a\\u82a8\\u8284\\u828e\\u8291\\u8297\\u8299\\u82ab\\u82b8\\u82be\\u82b0\\u82c8\\u82ca\\u82e3\\u8298\\u82b7\\u82ae\\u82cb\\u82cc\\u82c1\\u82a9\\u82b4\\u82a1\\u82aa\\u829f\\u82c4\\u82ce\\u82a4\\u82e1\\u8309\\u82f7\\u82e4\\u830f\\u8307\\u82dc\\u82f4\\u82d2\\u82d8\\u830c\\u82fb\\u82d3\\u8311\\u831a\\u8306\\u8314\\u8315\\u82e0\\u82d5\\u831c\\u8351\\u835b\\u835c\\u8308\\u8392\\u833c\\u8334\\u8331\\u839b\\u835e\\u832f\\u834f\\u8347\\u8343\\u835f\\u8340\\u8317\\u8360\\u832d\\u833a\\u8333\\u8366\\u8365\\ufffd\".split(\"\"),e=0;e!=r[220].length;++e)65533!==r[220][e].charCodeAt(0)&&(n[r[220][e]]=56320+e,t[56320+e]=r[220][e]);for(r[221]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8ee5\\u8ee6\\u8ee7\\u8ee8\\u8ee9\\u8eea\\u8eeb\\u8eec\\u8eed\\u8eee\\u8eef\\u8ef0\\u8ef1\\u8ef2\\u8ef3\\u8ef4\\u8ef5\\u8ef6\\u8ef7\\u8ef8\\u8ef9\\u8efa\\u8efb\\u8efc\\u8efd\\u8efe\\u8eff\\u8f00\\u8f01\\u8f02\\u8f03\\u8f04\\u8f05\\u8f06\\u8f07\\u8f08\\u8f09\\u8f0a\\u8f0b\\u8f0c\\u8f0d\\u8f0e\\u8f0f\\u8f10\\u8f11\\u8f12\\u8f13\\u8f14\\u8f15\\u8f16\\u8f17\\u8f18\\u8f19\\u8f1a\\u8f1b\\u8f1c\\u8f1d\\u8f1e\\u8f1f\\u8f20\\u8f21\\u8f22\\u8f23\\ufffd\\u8f24\\u8f25\\u8f26\\u8f27\\u8f28\\u8f29\\u8f2a\\u8f2b\\u8f2c\\u8f2d\\u8f2e\\u8f2f\\u8f30\\u8f31\\u8f32\\u8f33\\u8f34\\u8f35\\u8f36\\u8f37\\u8f38\\u8f39\\u8f3a\\u8f3b\\u8f3c\\u8f3d\\u8f3e\\u8f3f\\u8f40\\u8f41\\u8f42\\u8f43\\u8f44\\u8368\\u831b\\u8369\\u836c\\u836a\\u836d\\u836e\\u83b0\\u8378\\u83b3\\u83b4\\u83a0\\u83aa\\u8393\\u839c\\u8385\\u837c\\u83b6\\u83a9\\u837d\\u83b8\\u837b\\u8398\\u839e\\u83a8\\u83ba\\u83bc\\u83c1\\u8401\\u83e5\\u83d8\\u5807\\u8418\\u840b\\u83dd\\u83fd\\u83d6\\u841c\\u8438\\u8411\\u8406\\u83d4\\u83df\\u840f\\u8403\\u83f8\\u83f9\\u83ea\\u83c5\\u83c0\\u8426\\u83f0\\u83e1\\u845c\\u8451\\u845a\\u8459\\u8473\\u8487\\u8488\\u847a\\u8489\\u8478\\u843c\\u8446\\u8469\\u8476\\u848c\\u848e\\u8431\\u846d\\u84c1\\u84cd\\u84d0\\u84e6\\u84bd\\u84d3\\u84ca\\u84bf\\u84ba\\u84e0\\u84a1\\u84b9\\u84b4\\u8497\\u84e5\\u84e3\\u850c\\u750d\\u8538\\u84f0\\u8539\\u851f\\u853a\\ufffd\".split(\"\"),e=0;e!=r[221].length;++e)65533!==r[221][e].charCodeAt(0)&&(n[r[221][e]]=56576+e,t[56576+e]=r[221][e]);for(r[222]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8f45\\u8f46\\u8f47\\u8f48\\u8f49\\u8f4a\\u8f4b\\u8f4c\\u8f4d\\u8f4e\\u8f4f\\u8f50\\u8f51\\u8f52\\u8f53\\u8f54\\u8f55\\u8f56\\u8f57\\u8f58\\u8f59\\u8f5a\\u8f5b\\u8f5c\\u8f5d\\u8f5e\\u8f5f\\u8f60\\u8f61\\u8f62\\u8f63\\u8f64\\u8f65\\u8f6a\\u8f80\\u8f8c\\u8f92\\u8f9d\\u8fa0\\u8fa1\\u8fa2\\u8fa4\\u8fa5\\u8fa6\\u8fa7\\u8faa\\u8fac\\u8fad\\u8fae\\u8faf\\u8fb2\\u8fb3\\u8fb4\\u8fb5\\u8fb7\\u8fb8\\u8fba\\u8fbb\\u8fbc\\u8fbf\\u8fc0\\u8fc3\\u8fc6\\ufffd\\u8fc9\\u8fca\\u8fcb\\u8fcc\\u8fcd\\u8fcf\\u8fd2\\u8fd6\\u8fd7\\u8fda\\u8fe0\\u8fe1\\u8fe3\\u8fe7\\u8fec\\u8fef\\u8ff1\\u8ff2\\u8ff4\\u8ff5\\u8ff6\\u8ffa\\u8ffb\\u8ffc\\u8ffe\\u8fff\\u9007\\u9008\\u900c\\u900e\\u9013\\u9015\\u9018\\u8556\\u853b\\u84ff\\u84fc\\u8559\\u8548\\u8568\\u8564\\u855e\\u857a\\u77a2\\u8543\\u8572\\u857b\\u85a4\\u85a8\\u8587\\u858f\\u8579\\u85ae\\u859c\\u8585\\u85b9\\u85b7\\u85b0\\u85d3\\u85c1\\u85dc\\u85ff\\u8627\\u8605\\u8629\\u8616\\u863c\\u5efe\\u5f08\\u593c\\u5941\\u8037\\u5955\\u595a\\u5958\\u530f\\u5c22\\u5c25\\u5c2c\\u5c34\\u624c\\u626a\\u629f\\u62bb\\u62ca\\u62da\\u62d7\\u62ee\\u6322\\u62f6\\u6339\\u634b\\u6343\\u63ad\\u63f6\\u6371\\u637a\\u638e\\u63b4\\u636d\\u63ac\\u638a\\u6369\\u63ae\\u63bc\\u63f2\\u63f8\\u63e0\\u63ff\\u63c4\\u63de\\u63ce\\u6452\\u63c6\\u63be\\u6445\\u6441\\u640b\\u641b\\u6420\\u640c\\u6426\\u6421\\u645e\\u6484\\u646d\\u6496\\ufffd\".split(\"\"),e=0;e!=r[222].length;++e)65533!==r[222][e].charCodeAt(0)&&(n[r[222][e]]=56832+e,t[56832+e]=r[222][e]);for(r[223]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9019\\u901c\\u9023\\u9024\\u9025\\u9027\\u9028\\u9029\\u902a\\u902b\\u902c\\u9030\\u9031\\u9032\\u9033\\u9034\\u9037\\u9039\\u903a\\u903d\\u903f\\u9040\\u9043\\u9045\\u9046\\u9048\\u9049\\u904a\\u904b\\u904c\\u904e\\u9054\\u9055\\u9056\\u9059\\u905a\\u905c\\u905d\\u905e\\u905f\\u9060\\u9061\\u9064\\u9066\\u9067\\u9069\\u906a\\u906b\\u906c\\u906f\\u9070\\u9071\\u9072\\u9073\\u9076\\u9077\\u9078\\u9079\\u907a\\u907b\\u907c\\u907e\\u9081\\ufffd\\u9084\\u9085\\u9086\\u9087\\u9089\\u908a\\u908c\\u908d\\u908e\\u908f\\u9090\\u9092\\u9094\\u9096\\u9098\\u909a\\u909c\\u909e\\u909f\\u90a0\\u90a4\\u90a5\\u90a7\\u90a8\\u90a9\\u90ab\\u90ad\\u90b2\\u90b7\\u90bc\\u90bd\\u90bf\\u90c0\\u647a\\u64b7\\u64b8\\u6499\\u64ba\\u64c0\\u64d0\\u64d7\\u64e4\\u64e2\\u6509\\u6525\\u652e\\u5f0b\\u5fd2\\u7519\\u5f11\\u535f\\u53f1\\u53fd\\u53e9\\u53e8\\u53fb\\u5412\\u5416\\u5406\\u544b\\u5452\\u5453\\u5454\\u5456\\u5443\\u5421\\u5457\\u5459\\u5423\\u5432\\u5482\\u5494\\u5477\\u5471\\u5464\\u549a\\u549b\\u5484\\u5476\\u5466\\u549d\\u54d0\\u54ad\\u54c2\\u54b4\\u54d2\\u54a7\\u54a6\\u54d3\\u54d4\\u5472\\u54a3\\u54d5\\u54bb\\u54bf\\u54cc\\u54d9\\u54da\\u54dc\\u54a9\\u54aa\\u54a4\\u54dd\\u54cf\\u54de\\u551b\\u54e7\\u5520\\u54fd\\u5514\\u54f3\\u5522\\u5523\\u550f\\u5511\\u5527\\u552a\\u5567\\u558f\\u55b5\\u5549\\u556d\\u5541\\u5555\\u553f\\u5550\\u553c\\ufffd\".split(\"\"),e=0;e!=r[223].length;++e)65533!==r[223][e].charCodeAt(0)&&(n[r[223][e]]=57088+e,t[57088+e]=r[223][e]);for(r[224]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u90c2\\u90c3\\u90c6\\u90c8\\u90c9\\u90cb\\u90cc\\u90cd\\u90d2\\u90d4\\u90d5\\u90d6\\u90d8\\u90d9\\u90da\\u90de\\u90df\\u90e0\\u90e3\\u90e4\\u90e5\\u90e9\\u90ea\\u90ec\\u90ee\\u90f0\\u90f1\\u90f2\\u90f3\\u90f5\\u90f6\\u90f7\\u90f9\\u90fa\\u90fb\\u90fc\\u90ff\\u9100\\u9101\\u9103\\u9105\\u9106\\u9107\\u9108\\u9109\\u910a\\u910b\\u910c\\u910d\\u910e\\u910f\\u9110\\u9111\\u9112\\u9113\\u9114\\u9115\\u9116\\u9117\\u9118\\u911a\\u911b\\u911c\\ufffd\\u911d\\u911f\\u9120\\u9121\\u9124\\u9125\\u9126\\u9127\\u9128\\u9129\\u912a\\u912b\\u912c\\u912d\\u912e\\u9130\\u9132\\u9133\\u9134\\u9135\\u9136\\u9137\\u9138\\u913a\\u913b\\u913c\\u913d\\u913e\\u913f\\u9140\\u9141\\u9142\\u9144\\u5537\\u5556\\u5575\\u5576\\u5577\\u5533\\u5530\\u555c\\u558b\\u55d2\\u5583\\u55b1\\u55b9\\u5588\\u5581\\u559f\\u557e\\u55d6\\u5591\\u557b\\u55df\\u55bd\\u55be\\u5594\\u5599\\u55ea\\u55f7\\u55c9\\u561f\\u55d1\\u55eb\\u55ec\\u55d4\\u55e6\\u55dd\\u55c4\\u55ef\\u55e5\\u55f2\\u55f3\\u55cc\\u55cd\\u55e8\\u55f5\\u55e4\\u8f94\\u561e\\u5608\\u560c\\u5601\\u5624\\u5623\\u55fe\\u5600\\u5627\\u562d\\u5658\\u5639\\u5657\\u562c\\u564d\\u5662\\u5659\\u565c\\u564c\\u5654\\u5686\\u5664\\u5671\\u566b\\u567b\\u567c\\u5685\\u5693\\u56af\\u56d4\\u56d7\\u56dd\\u56e1\\u56f5\\u56eb\\u56f9\\u56ff\\u5704\\u570a\\u5709\\u571c\\u5e0f\\u5e19\\u5e14\\u5e11\\u5e31\\u5e3b\\u5e3c\\ufffd\".split(\"\"),e=0;e!=r[224].length;++e)65533!==r[224][e].charCodeAt(0)&&(n[r[224][e]]=57344+e,t[57344+e]=r[224][e]);for(r[225]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9145\\u9147\\u9148\\u9151\\u9153\\u9154\\u9155\\u9156\\u9158\\u9159\\u915b\\u915c\\u915f\\u9160\\u9166\\u9167\\u9168\\u916b\\u916d\\u9173\\u917a\\u917b\\u917c\\u9180\\u9181\\u9182\\u9183\\u9184\\u9186\\u9188\\u918a\\u918e\\u918f\\u9193\\u9194\\u9195\\u9196\\u9197\\u9198\\u9199\\u919c\\u919d\\u919e\\u919f\\u91a0\\u91a1\\u91a4\\u91a5\\u91a6\\u91a7\\u91a8\\u91a9\\u91ab\\u91ac\\u91b0\\u91b1\\u91b2\\u91b3\\u91b6\\u91b7\\u91b8\\u91b9\\u91bb\\ufffd\\u91bc\\u91bd\\u91be\\u91bf\\u91c0\\u91c1\\u91c2\\u91c3\\u91c4\\u91c5\\u91c6\\u91c8\\u91cb\\u91d0\\u91d2\\u91d3\\u91d4\\u91d5\\u91d6\\u91d7\\u91d8\\u91d9\\u91da\\u91db\\u91dd\\u91de\\u91df\\u91e0\\u91e1\\u91e2\\u91e3\\u91e4\\u91e5\\u5e37\\u5e44\\u5e54\\u5e5b\\u5e5e\\u5e61\\u5c8c\\u5c7a\\u5c8d\\u5c90\\u5c96\\u5c88\\u5c98\\u5c99\\u5c91\\u5c9a\\u5c9c\\u5cb5\\u5ca2\\u5cbd\\u5cac\\u5cab\\u5cb1\\u5ca3\\u5cc1\\u5cb7\\u5cc4\\u5cd2\\u5ce4\\u5ccb\\u5ce5\\u5d02\\u5d03\\u5d27\\u5d26\\u5d2e\\u5d24\\u5d1e\\u5d06\\u5d1b\\u5d58\\u5d3e\\u5d34\\u5d3d\\u5d6c\\u5d5b\\u5d6f\\u5d5d\\u5d6b\\u5d4b\\u5d4a\\u5d69\\u5d74\\u5d82\\u5d99\\u5d9d\\u8c73\\u5db7\\u5dc5\\u5f73\\u5f77\\u5f82\\u5f87\\u5f89\\u5f8c\\u5f95\\u5f99\\u5f9c\\u5fa8\\u5fad\\u5fb5\\u5fbc\\u8862\\u5f61\\u72ad\\u72b0\\u72b4\\u72b7\\u72b8\\u72c3\\u72c1\\u72ce\\u72cd\\u72d2\\u72e8\\u72ef\\u72e9\\u72f2\\u72f4\\u72f7\\u7301\\u72f3\\u7303\\u72fa\\ufffd\".split(\"\"),e=0;e!=r[225].length;++e)65533!==r[225][e].charCodeAt(0)&&(n[r[225][e]]=57600+e,t[57600+e]=r[225][e]);for(r[226]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u91e6\\u91e7\\u91e8\\u91e9\\u91ea\\u91eb\\u91ec\\u91ed\\u91ee\\u91ef\\u91f0\\u91f1\\u91f2\\u91f3\\u91f4\\u91f5\\u91f6\\u91f7\\u91f8\\u91f9\\u91fa\\u91fb\\u91fc\\u91fd\\u91fe\\u91ff\\u9200\\u9201\\u9202\\u9203\\u9204\\u9205\\u9206\\u9207\\u9208\\u9209\\u920a\\u920b\\u920c\\u920d\\u920e\\u920f\\u9210\\u9211\\u9212\\u9213\\u9214\\u9215\\u9216\\u9217\\u9218\\u9219\\u921a\\u921b\\u921c\\u921d\\u921e\\u921f\\u9220\\u9221\\u9222\\u9223\\u9224\\ufffd\\u9225\\u9226\\u9227\\u9228\\u9229\\u922a\\u922b\\u922c\\u922d\\u922e\\u922f\\u9230\\u9231\\u9232\\u9233\\u9234\\u9235\\u9236\\u9237\\u9238\\u9239\\u923a\\u923b\\u923c\\u923d\\u923e\\u923f\\u9240\\u9241\\u9242\\u9243\\u9244\\u9245\\u72fb\\u7317\\u7313\\u7321\\u730a\\u731e\\u731d\\u7315\\u7322\\u7339\\u7325\\u732c\\u7338\\u7331\\u7350\\u734d\\u7357\\u7360\\u736c\\u736f\\u737e\\u821b\\u5925\\u98e7\\u5924\\u5902\\u9963\\u9967\\u9968\\u9969\\u996a\\u996b\\u996c\\u9974\\u9977\\u997d\\u9980\\u9984\\u9987\\u998a\\u998d\\u9990\\u9991\\u9993\\u9994\\u9995\\u5e80\\u5e91\\u5e8b\\u5e96\\u5ea5\\u5ea0\\u5eb9\\u5eb5\\u5ebe\\u5eb3\\u8d53\\u5ed2\\u5ed1\\u5edb\\u5ee8\\u5eea\\u81ba\\u5fc4\\u5fc9\\u5fd6\\u5fcf\\u6003\\u5fee\\u6004\\u5fe1\\u5fe4\\u5ffe\\u6005\\u6006\\u5fea\\u5fed\\u5ff8\\u6019\\u6035\\u6026\\u601b\\u600f\\u600d\\u6029\\u602b\\u600a\\u603f\\u6021\\u6078\\u6079\\u607b\\u607a\\u6042\\ufffd\".split(\"\"),e=0;e!=r[226].length;++e)65533!==r[226][e].charCodeAt(0)&&(n[r[226][e]]=57856+e,t[57856+e]=r[226][e]);for(r[227]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9246\\u9247\\u9248\\u9249\\u924a\\u924b\\u924c\\u924d\\u924e\\u924f\\u9250\\u9251\\u9252\\u9253\\u9254\\u9255\\u9256\\u9257\\u9258\\u9259\\u925a\\u925b\\u925c\\u925d\\u925e\\u925f\\u9260\\u9261\\u9262\\u9263\\u9264\\u9265\\u9266\\u9267\\u9268\\u9269\\u926a\\u926b\\u926c\\u926d\\u926e\\u926f\\u9270\\u9271\\u9272\\u9273\\u9275\\u9276\\u9277\\u9278\\u9279\\u927a\\u927b\\u927c\\u927d\\u927e\\u927f\\u9280\\u9281\\u9282\\u9283\\u9284\\u9285\\ufffd\\u9286\\u9287\\u9288\\u9289\\u928a\\u928b\\u928c\\u928d\\u928f\\u9290\\u9291\\u9292\\u9293\\u9294\\u9295\\u9296\\u9297\\u9298\\u9299\\u929a\\u929b\\u929c\\u929d\\u929e\\u929f\\u92a0\\u92a1\\u92a2\\u92a3\\u92a4\\u92a5\\u92a6\\u92a7\\u606a\\u607d\\u6096\\u609a\\u60ad\\u609d\\u6083\\u6092\\u608c\\u609b\\u60ec\\u60bb\\u60b1\\u60dd\\u60d8\\u60c6\\u60da\\u60b4\\u6120\\u6126\\u6115\\u6123\\u60f4\\u6100\\u610e\\u612b\\u614a\\u6175\\u61ac\\u6194\\u61a7\\u61b7\\u61d4\\u61f5\\u5fdd\\u96b3\\u95e9\\u95eb\\u95f1\\u95f3\\u95f5\\u95f6\\u95fc\\u95fe\\u9603\\u9604\\u9606\\u9608\\u960a\\u960b\\u960c\\u960d\\u960f\\u9612\\u9615\\u9616\\u9617\\u9619\\u961a\\u4e2c\\u723f\\u6215\\u6c35\\u6c54\\u6c5c\\u6c4a\\u6ca3\\u6c85\\u6c90\\u6c94\\u6c8c\\u6c68\\u6c69\\u6c74\\u6c76\\u6c86\\u6ca9\\u6cd0\\u6cd4\\u6cad\\u6cf7\\u6cf8\\u6cf1\\u6cd7\\u6cb2\\u6ce0\\u6cd6\\u6cfa\\u6ceb\\u6cee\\u6cb1\\u6cd3\\u6cef\\u6cfe\\ufffd\".split(\"\"),e=0;e!=r[227].length;++e)65533!==r[227][e].charCodeAt(0)&&(n[r[227][e]]=58112+e,t[58112+e]=r[227][e]);for(r[228]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u92a8\\u92a9\\u92aa\\u92ab\\u92ac\\u92ad\\u92af\\u92b0\\u92b1\\u92b2\\u92b3\\u92b4\\u92b5\\u92b6\\u92b7\\u92b8\\u92b9\\u92ba\\u92bb\\u92bc\\u92bd\\u92be\\u92bf\\u92c0\\u92c1\\u92c2\\u92c3\\u92c4\\u92c5\\u92c6\\u92c7\\u92c9\\u92ca\\u92cb\\u92cc\\u92cd\\u92ce\\u92cf\\u92d0\\u92d1\\u92d2\\u92d3\\u92d4\\u92d5\\u92d6\\u92d7\\u92d8\\u92d9\\u92da\\u92db\\u92dc\\u92dd\\u92de\\u92df\\u92e0\\u92e1\\u92e2\\u92e3\\u92e4\\u92e5\\u92e6\\u92e7\\u92e8\\ufffd\\u92e9\\u92ea\\u92eb\\u92ec\\u92ed\\u92ee\\u92ef\\u92f0\\u92f1\\u92f2\\u92f3\\u92f4\\u92f5\\u92f6\\u92f7\\u92f8\\u92f9\\u92fa\\u92fb\\u92fc\\u92fd\\u92fe\\u92ff\\u9300\\u9301\\u9302\\u9303\\u9304\\u9305\\u9306\\u9307\\u9308\\u9309\\u6d39\\u6d27\\u6d0c\\u6d43\\u6d48\\u6d07\\u6d04\\u6d19\\u6d0e\\u6d2b\\u6d4d\\u6d2e\\u6d35\\u6d1a\\u6d4f\\u6d52\\u6d54\\u6d33\\u6d91\\u6d6f\\u6d9e\\u6da0\\u6d5e\\u6d93\\u6d94\\u6d5c\\u6d60\\u6d7c\\u6d63\\u6e1a\\u6dc7\\u6dc5\\u6dde\\u6e0e\\u6dbf\\u6de0\\u6e11\\u6de6\\u6ddd\\u6dd9\\u6e16\\u6dab\\u6e0c\\u6dae\\u6e2b\\u6e6e\\u6e4e\\u6e6b\\u6eb2\\u6e5f\\u6e86\\u6e53\\u6e54\\u6e32\\u6e25\\u6e44\\u6edf\\u6eb1\\u6e98\\u6ee0\\u6f2d\\u6ee2\\u6ea5\\u6ea7\\u6ebd\\u6ebb\\u6eb7\\u6ed7\\u6eb4\\u6ecf\\u6e8f\\u6ec2\\u6e9f\\u6f62\\u6f46\\u6f47\\u6f24\\u6f15\\u6ef9\\u6f2f\\u6f36\\u6f4b\\u6f74\\u6f2a\\u6f09\\u6f29\\u6f89\\u6f8d\\u6f8c\\u6f78\\u6f72\\u6f7c\\u6f7a\\u6fd1\\ufffd\".split(\"\"),e=0;e!=r[228].length;++e)65533!==r[228][e].charCodeAt(0)&&(n[r[228][e]]=58368+e,t[58368+e]=r[228][e]);for(r[229]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u930a\\u930b\\u930c\\u930d\\u930e\\u930f\\u9310\\u9311\\u9312\\u9313\\u9314\\u9315\\u9316\\u9317\\u9318\\u9319\\u931a\\u931b\\u931c\\u931d\\u931e\\u931f\\u9320\\u9321\\u9322\\u9323\\u9324\\u9325\\u9326\\u9327\\u9328\\u9329\\u932a\\u932b\\u932c\\u932d\\u932e\\u932f\\u9330\\u9331\\u9332\\u9333\\u9334\\u9335\\u9336\\u9337\\u9338\\u9339\\u933a\\u933b\\u933c\\u933d\\u933f\\u9340\\u9341\\u9342\\u9343\\u9344\\u9345\\u9346\\u9347\\u9348\\u9349\\ufffd\\u934a\\u934b\\u934c\\u934d\\u934e\\u934f\\u9350\\u9351\\u9352\\u9353\\u9354\\u9355\\u9356\\u9357\\u9358\\u9359\\u935a\\u935b\\u935c\\u935d\\u935e\\u935f\\u9360\\u9361\\u9362\\u9363\\u9364\\u9365\\u9366\\u9367\\u9368\\u9369\\u936b\\u6fc9\\u6fa7\\u6fb9\\u6fb6\\u6fc2\\u6fe1\\u6fee\\u6fde\\u6fe0\\u6fef\\u701a\\u7023\\u701b\\u7039\\u7035\\u704f\\u705e\\u5b80\\u5b84\\u5b95\\u5b93\\u5ba5\\u5bb8\\u752f\\u9a9e\\u6434\\u5be4\\u5bee\\u8930\\u5bf0\\u8e47\\u8b07\\u8fb6\\u8fd3\\u8fd5\\u8fe5\\u8fee\\u8fe4\\u8fe9\\u8fe6\\u8ff3\\u8fe8\\u9005\\u9004\\u900b\\u9026\\u9011\\u900d\\u9016\\u9021\\u9035\\u9036\\u902d\\u902f\\u9044\\u9051\\u9052\\u9050\\u9068\\u9058\\u9062\\u905b\\u66b9\\u9074\\u907d\\u9082\\u9088\\u9083\\u908b\\u5f50\\u5f57\\u5f56\\u5f58\\u5c3b\\u54ab\\u5c50\\u5c59\\u5b71\\u5c63\\u5c66\\u7fbc\\u5f2a\\u5f29\\u5f2d\\u8274\\u5f3c\\u9b3b\\u5c6e\\u5981\\u5983\\u598d\\u59a9\\u59aa\\u59a3\\ufffd\".split(\"\"),e=0;e!=r[229].length;++e)65533!==r[229][e].charCodeAt(0)&&(n[r[229][e]]=58624+e,t[58624+e]=r[229][e]);for(r[230]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u936c\\u936d\\u936e\\u936f\\u9370\\u9371\\u9372\\u9373\\u9374\\u9375\\u9376\\u9377\\u9378\\u9379\\u937a\\u937b\\u937c\\u937d\\u937e\\u937f\\u9380\\u9381\\u9382\\u9383\\u9384\\u9385\\u9386\\u9387\\u9388\\u9389\\u938a\\u938b\\u938c\\u938d\\u938e\\u9390\\u9391\\u9392\\u9393\\u9394\\u9395\\u9396\\u9397\\u9398\\u9399\\u939a\\u939b\\u939c\\u939d\\u939e\\u939f\\u93a0\\u93a1\\u93a2\\u93a3\\u93a4\\u93a5\\u93a6\\u93a7\\u93a8\\u93a9\\u93aa\\u93ab\\ufffd\\u93ac\\u93ad\\u93ae\\u93af\\u93b0\\u93b1\\u93b2\\u93b3\\u93b4\\u93b5\\u93b6\\u93b7\\u93b8\\u93b9\\u93ba\\u93bb\\u93bc\\u93bd\\u93be\\u93bf\\u93c0\\u93c1\\u93c2\\u93c3\\u93c4\\u93c5\\u93c6\\u93c7\\u93c8\\u93c9\\u93cb\\u93cc\\u93cd\\u5997\\u59ca\\u59ab\\u599e\\u59a4\\u59d2\\u59b2\\u59af\\u59d7\\u59be\\u5a05\\u5a06\\u59dd\\u5a08\\u59e3\\u59d8\\u59f9\\u5a0c\\u5a09\\u5a32\\u5a34\\u5a11\\u5a23\\u5a13\\u5a40\\u5a67\\u5a4a\\u5a55\\u5a3c\\u5a62\\u5a75\\u80ec\\u5aaa\\u5a9b\\u5a77\\u5a7a\\u5abe\\u5aeb\\u5ab2\\u5ad2\\u5ad4\\u5ab8\\u5ae0\\u5ae3\\u5af1\\u5ad6\\u5ae6\\u5ad8\\u5adc\\u5b09\\u5b17\\u5b16\\u5b32\\u5b37\\u5b40\\u5c15\\u5c1c\\u5b5a\\u5b65\\u5b73\\u5b51\\u5b53\\u5b62\\u9a75\\u9a77\\u9a78\\u9a7a\\u9a7f\\u9a7d\\u9a80\\u9a81\\u9a85\\u9a88\\u9a8a\\u9a90\\u9a92\\u9a93\\u9a96\\u9a98\\u9a9b\\u9a9c\\u9a9d\\u9a9f\\u9aa0\\u9aa2\\u9aa3\\u9aa5\\u9aa7\\u7e9f\\u7ea1\\u7ea3\\u7ea5\\u7ea8\\u7ea9\\ufffd\".split(\"\"),e=0;e!=r[230].length;++e)65533!==r[230][e].charCodeAt(0)&&(n[r[230][e]]=58880+e,t[58880+e]=r[230][e]);for(r[231]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u93ce\\u93cf\\u93d0\\u93d1\\u93d2\\u93d3\\u93d4\\u93d5\\u93d7\\u93d8\\u93d9\\u93da\\u93db\\u93dc\\u93dd\\u93de\\u93df\\u93e0\\u93e1\\u93e2\\u93e3\\u93e4\\u93e5\\u93e6\\u93e7\\u93e8\\u93e9\\u93ea\\u93eb\\u93ec\\u93ed\\u93ee\\u93ef\\u93f0\\u93f1\\u93f2\\u93f3\\u93f4\\u93f5\\u93f6\\u93f7\\u93f8\\u93f9\\u93fa\\u93fb\\u93fc\\u93fd\\u93fe\\u93ff\\u9400\\u9401\\u9402\\u9403\\u9404\\u9405\\u9406\\u9407\\u9408\\u9409\\u940a\\u940b\\u940c\\u940d\\ufffd\\u940e\\u940f\\u9410\\u9411\\u9412\\u9413\\u9414\\u9415\\u9416\\u9417\\u9418\\u9419\\u941a\\u941b\\u941c\\u941d\\u941e\\u941f\\u9420\\u9421\\u9422\\u9423\\u9424\\u9425\\u9426\\u9427\\u9428\\u9429\\u942a\\u942b\\u942c\\u942d\\u942e\\u7ead\\u7eb0\\u7ebe\\u7ec0\\u7ec1\\u7ec2\\u7ec9\\u7ecb\\u7ecc\\u7ed0\\u7ed4\\u7ed7\\u7edb\\u7ee0\\u7ee1\\u7ee8\\u7eeb\\u7eee\\u7eef\\u7ef1\\u7ef2\\u7f0d\\u7ef6\\u7efa\\u7efb\\u7efe\\u7f01\\u7f02\\u7f03\\u7f07\\u7f08\\u7f0b\\u7f0c\\u7f0f\\u7f11\\u7f12\\u7f17\\u7f19\\u7f1c\\u7f1b\\u7f1f\\u7f21\\u7f22\\u7f23\\u7f24\\u7f25\\u7f26\\u7f27\\u7f2a\\u7f2b\\u7f2c\\u7f2d\\u7f2f\\u7f30\\u7f31\\u7f32\\u7f33\\u7f35\\u5e7a\\u757f\\u5ddb\\u753e\\u9095\\u738e\\u7391\\u73ae\\u73a2\\u739f\\u73cf\\u73c2\\u73d1\\u73b7\\u73b3\\u73c0\\u73c9\\u73c8\\u73e5\\u73d9\\u987c\\u740a\\u73e9\\u73e7\\u73de\\u73ba\\u73f2\\u740f\\u742a\\u745b\\u7426\\u7425\\u7428\\u7430\\u742e\\u742c\\ufffd\".split(\"\"),e=0;e!=r[231].length;++e)65533!==r[231][e].charCodeAt(0)&&(n[r[231][e]]=59136+e,t[59136+e]=r[231][e]);for(r[232]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u942f\\u9430\\u9431\\u9432\\u9433\\u9434\\u9435\\u9436\\u9437\\u9438\\u9439\\u943a\\u943b\\u943c\\u943d\\u943f\\u9440\\u9441\\u9442\\u9443\\u9444\\u9445\\u9446\\u9447\\u9448\\u9449\\u944a\\u944b\\u944c\\u944d\\u944e\\u944f\\u9450\\u9451\\u9452\\u9453\\u9454\\u9455\\u9456\\u9457\\u9458\\u9459\\u945a\\u945b\\u945c\\u945d\\u945e\\u945f\\u9460\\u9461\\u9462\\u9463\\u9464\\u9465\\u9466\\u9467\\u9468\\u9469\\u946a\\u946c\\u946d\\u946e\\u946f\\ufffd\\u9470\\u9471\\u9472\\u9473\\u9474\\u9475\\u9476\\u9477\\u9478\\u9479\\u947a\\u947b\\u947c\\u947d\\u947e\\u947f\\u9480\\u9481\\u9482\\u9483\\u9484\\u9491\\u9496\\u9498\\u94c7\\u94cf\\u94d3\\u94d4\\u94da\\u94e6\\u94fb\\u951c\\u9520\\u741b\\u741a\\u7441\\u745c\\u7457\\u7455\\u7459\\u7477\\u746d\\u747e\\u749c\\u748e\\u7480\\u7481\\u7487\\u748b\\u749e\\u74a8\\u74a9\\u7490\\u74a7\\u74d2\\u74ba\\u97ea\\u97eb\\u97ec\\u674c\\u6753\\u675e\\u6748\\u6769\\u67a5\\u6787\\u676a\\u6773\\u6798\\u67a7\\u6775\\u67a8\\u679e\\u67ad\\u678b\\u6777\\u677c\\u67f0\\u6809\\u67d8\\u680a\\u67e9\\u67b0\\u680c\\u67d9\\u67b5\\u67da\\u67b3\\u67dd\\u6800\\u67c3\\u67b8\\u67e2\\u680e\\u67c1\\u67fd\\u6832\\u6833\\u6860\\u6861\\u684e\\u6862\\u6844\\u6864\\u6883\\u681d\\u6855\\u6866\\u6841\\u6867\\u6840\\u683e\\u684a\\u6849\\u6829\\u68b5\\u688f\\u6874\\u6877\\u6893\\u686b\\u68c2\\u696e\\u68fc\\u691f\\u6920\\u68f9\\ufffd\".split(\"\"),e=0;e!=r[232].length;++e)65533!==r[232][e].charCodeAt(0)&&(n[r[232][e]]=59392+e,t[59392+e]=r[232][e]);for(r[233]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9527\\u9533\\u953d\\u9543\\u9548\\u954b\\u9555\\u955a\\u9560\\u956e\\u9574\\u9575\\u9577\\u9578\\u9579\\u957a\\u957b\\u957c\\u957d\\u957e\\u9580\\u9581\\u9582\\u9583\\u9584\\u9585\\u9586\\u9587\\u9588\\u9589\\u958a\\u958b\\u958c\\u958d\\u958e\\u958f\\u9590\\u9591\\u9592\\u9593\\u9594\\u9595\\u9596\\u9597\\u9598\\u9599\\u959a\\u959b\\u959c\\u959d\\u959e\\u959f\\u95a0\\u95a1\\u95a2\\u95a3\\u95a4\\u95a5\\u95a6\\u95a7\\u95a8\\u95a9\\u95aa\\ufffd\\u95ab\\u95ac\\u95ad\\u95ae\\u95af\\u95b0\\u95b1\\u95b2\\u95b3\\u95b4\\u95b5\\u95b6\\u95b7\\u95b8\\u95b9\\u95ba\\u95bb\\u95bc\\u95bd\\u95be\\u95bf\\u95c0\\u95c1\\u95c2\\u95c3\\u95c4\\u95c5\\u95c6\\u95c7\\u95c8\\u95c9\\u95ca\\u95cb\\u6924\\u68f0\\u690b\\u6901\\u6957\\u68e3\\u6910\\u6971\\u6939\\u6960\\u6942\\u695d\\u6984\\u696b\\u6980\\u6998\\u6978\\u6934\\u69cc\\u6987\\u6988\\u69ce\\u6989\\u6966\\u6963\\u6979\\u699b\\u69a7\\u69bb\\u69ab\\u69ad\\u69d4\\u69b1\\u69c1\\u69ca\\u69df\\u6995\\u69e0\\u698d\\u69ff\\u6a2f\\u69ed\\u6a17\\u6a18\\u6a65\\u69f2\\u6a44\\u6a3e\\u6aa0\\u6a50\\u6a5b\\u6a35\\u6a8e\\u6a79\\u6a3d\\u6a28\\u6a58\\u6a7c\\u6a91\\u6a90\\u6aa9\\u6a97\\u6aab\\u7337\\u7352\\u6b81\\u6b82\\u6b87\\u6b84\\u6b92\\u6b93\\u6b8d\\u6b9a\\u6b9b\\u6ba1\\u6baa\\u8f6b\\u8f6d\\u8f71\\u8f72\\u8f73\\u8f75\\u8f76\\u8f78\\u8f77\\u8f79\\u8f7a\\u8f7c\\u8f7e\\u8f81\\u8f82\\u8f84\\u8f87\\u8f8b\\ufffd\".split(\"\"),e=0;e!=r[233].length;++e)65533!==r[233][e].charCodeAt(0)&&(n[r[233][e]]=59648+e,t[59648+e]=r[233][e]);for(r[234]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u95cc\\u95cd\\u95ce\\u95cf\\u95d0\\u95d1\\u95d2\\u95d3\\u95d4\\u95d5\\u95d6\\u95d7\\u95d8\\u95d9\\u95da\\u95db\\u95dc\\u95dd\\u95de\\u95df\\u95e0\\u95e1\\u95e2\\u95e3\\u95e4\\u95e5\\u95e6\\u95e7\\u95ec\\u95ff\\u9607\\u9613\\u9618\\u961b\\u961e\\u9620\\u9623\\u9624\\u9625\\u9626\\u9627\\u9628\\u9629\\u962b\\u962c\\u962d\\u962f\\u9630\\u9637\\u9638\\u9639\\u963a\\u963e\\u9641\\u9643\\u964a\\u964e\\u964f\\u9651\\u9652\\u9653\\u9656\\u9657\\ufffd\\u9658\\u9659\\u965a\\u965c\\u965d\\u965e\\u9660\\u9663\\u9665\\u9666\\u966b\\u966d\\u966e\\u966f\\u9670\\u9671\\u9673\\u9678\\u9679\\u967a\\u967b\\u967c\\u967d\\u967e\\u967f\\u9680\\u9681\\u9682\\u9683\\u9684\\u9687\\u9689\\u968a\\u8f8d\\u8f8e\\u8f8f\\u8f98\\u8f9a\\u8ece\\u620b\\u6217\\u621b\\u621f\\u6222\\u6221\\u6225\\u6224\\u622c\\u81e7\\u74ef\\u74f4\\u74ff\\u750f\\u7511\\u7513\\u6534\\u65ee\\u65ef\\u65f0\\u660a\\u6619\\u6772\\u6603\\u6615\\u6600\\u7085\\u66f7\\u661d\\u6634\\u6631\\u6636\\u6635\\u8006\\u665f\\u6654\\u6641\\u664f\\u6656\\u6661\\u6657\\u6677\\u6684\\u668c\\u66a7\\u669d\\u66be\\u66db\\u66dc\\u66e6\\u66e9\\u8d32\\u8d33\\u8d36\\u8d3b\\u8d3d\\u8d40\\u8d45\\u8d46\\u8d48\\u8d49\\u8d47\\u8d4d\\u8d55\\u8d59\\u89c7\\u89ca\\u89cb\\u89cc\\u89ce\\u89cf\\u89d0\\u89d1\\u726e\\u729f\\u725d\\u7266\\u726f\\u727e\\u727f\\u7284\\u728b\\u728d\\u728f\\u7292\\u6308\\u6332\\u63b0\\ufffd\".split(\"\"),e=0;e!=r[234].length;++e)65533!==r[234][e].charCodeAt(0)&&(n[r[234][e]]=59904+e,t[59904+e]=r[234][e]);for(r[235]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u968c\\u968e\\u9691\\u9692\\u9693\\u9695\\u9696\\u969a\\u969b\\u969d\\u969e\\u969f\\u96a0\\u96a1\\u96a2\\u96a3\\u96a4\\u96a5\\u96a6\\u96a8\\u96a9\\u96aa\\u96ab\\u96ac\\u96ad\\u96ae\\u96af\\u96b1\\u96b2\\u96b4\\u96b5\\u96b7\\u96b8\\u96ba\\u96bb\\u96bf\\u96c2\\u96c3\\u96c8\\u96ca\\u96cb\\u96d0\\u96d1\\u96d3\\u96d4\\u96d6\\u96d7\\u96d8\\u96d9\\u96da\\u96db\\u96dc\\u96dd\\u96de\\u96df\\u96e1\\u96e2\\u96e3\\u96e4\\u96e5\\u96e6\\u96e7\\u96eb\\ufffd\\u96ec\\u96ed\\u96ee\\u96f0\\u96f1\\u96f2\\u96f4\\u96f5\\u96f8\\u96fa\\u96fb\\u96fc\\u96fd\\u96ff\\u9702\\u9703\\u9705\\u970a\\u970b\\u970c\\u9710\\u9711\\u9712\\u9714\\u9715\\u9717\\u9718\\u9719\\u971a\\u971b\\u971d\\u971f\\u9720\\u643f\\u64d8\\u8004\\u6bea\\u6bf3\\u6bfd\\u6bf5\\u6bf9\\u6c05\\u6c07\\u6c06\\u6c0d\\u6c15\\u6c18\\u6c19\\u6c1a\\u6c21\\u6c29\\u6c24\\u6c2a\\u6c32\\u6535\\u6555\\u656b\\u724d\\u7252\\u7256\\u7230\\u8662\\u5216\\u809f\\u809c\\u8093\\u80bc\\u670a\\u80bd\\u80b1\\u80ab\\u80ad\\u80b4\\u80b7\\u80e7\\u80e8\\u80e9\\u80ea\\u80db\\u80c2\\u80c4\\u80d9\\u80cd\\u80d7\\u6710\\u80dd\\u80eb\\u80f1\\u80f4\\u80ed\\u810d\\u810e\\u80f2\\u80fc\\u6715\\u8112\\u8c5a\\u8136\\u811e\\u812c\\u8118\\u8132\\u8148\\u814c\\u8153\\u8174\\u8159\\u815a\\u8171\\u8160\\u8169\\u817c\\u817d\\u816d\\u8167\\u584d\\u5ab5\\u8188\\u8182\\u8191\\u6ed5\\u81a3\\u81aa\\u81cc\\u6726\\u81ca\\u81bb\\ufffd\".split(\"\"),e=0;e!=r[235].length;++e)65533!==r[235][e].charCodeAt(0)&&(n[r[235][e]]=60160+e,t[60160+e]=r[235][e]);for(r[236]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9721\\u9722\\u9723\\u9724\\u9725\\u9726\\u9727\\u9728\\u9729\\u972b\\u972c\\u972e\\u972f\\u9731\\u9733\\u9734\\u9735\\u9736\\u9737\\u973a\\u973b\\u973c\\u973d\\u973f\\u9740\\u9741\\u9742\\u9743\\u9744\\u9745\\u9746\\u9747\\u9748\\u9749\\u974a\\u974b\\u974c\\u974d\\u974e\\u974f\\u9750\\u9751\\u9754\\u9755\\u9757\\u9758\\u975a\\u975c\\u975d\\u975f\\u9763\\u9764\\u9766\\u9767\\u9768\\u976a\\u976b\\u976c\\u976d\\u976e\\u976f\\u9770\\u9771\\ufffd\\u9772\\u9775\\u9777\\u9778\\u9779\\u977a\\u977b\\u977d\\u977e\\u977f\\u9780\\u9781\\u9782\\u9783\\u9784\\u9786\\u9787\\u9788\\u9789\\u978a\\u978c\\u978e\\u978f\\u9790\\u9793\\u9795\\u9796\\u9797\\u9799\\u979a\\u979b\\u979c\\u979d\\u81c1\\u81a6\\u6b24\\u6b37\\u6b39\\u6b43\\u6b46\\u6b59\\u98d1\\u98d2\\u98d3\\u98d5\\u98d9\\u98da\\u6bb3\\u5f40\\u6bc2\\u89f3\\u6590\\u9f51\\u6593\\u65bc\\u65c6\\u65c4\\u65c3\\u65cc\\u65ce\\u65d2\\u65d6\\u7080\\u709c\\u7096\\u709d\\u70bb\\u70c0\\u70b7\\u70ab\\u70b1\\u70e8\\u70ca\\u7110\\u7113\\u7116\\u712f\\u7131\\u7173\\u715c\\u7168\\u7145\\u7172\\u714a\\u7178\\u717a\\u7198\\u71b3\\u71b5\\u71a8\\u71a0\\u71e0\\u71d4\\u71e7\\u71f9\\u721d\\u7228\\u706c\\u7118\\u7166\\u71b9\\u623e\\u623d\\u6243\\u6248\\u6249\\u793b\\u7940\\u7946\\u7949\\u795b\\u795c\\u7953\\u795a\\u7962\\u7957\\u7960\\u796f\\u7967\\u797a\\u7985\\u798a\\u799a\\u79a7\\u79b3\\u5fd1\\u5fd0\\ufffd\".split(\"\"),e=0;e!=r[236].length;++e)65533!==r[236][e].charCodeAt(0)&&(n[r[236][e]]=60416+e,t[60416+e]=r[236][e]);for(r[237]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u979e\\u979f\\u97a1\\u97a2\\u97a4\\u97a5\\u97a6\\u97a7\\u97a8\\u97a9\\u97aa\\u97ac\\u97ae\\u97b0\\u97b1\\u97b3\\u97b5\\u97b6\\u97b7\\u97b8\\u97b9\\u97ba\\u97bb\\u97bc\\u97bd\\u97be\\u97bf\\u97c0\\u97c1\\u97c2\\u97c3\\u97c4\\u97c5\\u97c6\\u97c7\\u97c8\\u97c9\\u97ca\\u97cb\\u97cc\\u97cd\\u97ce\\u97cf\\u97d0\\u97d1\\u97d2\\u97d3\\u97d4\\u97d5\\u97d6\\u97d7\\u97d8\\u97d9\\u97da\\u97db\\u97dc\\u97dd\\u97de\\u97df\\u97e0\\u97e1\\u97e2\\u97e3\\ufffd\\u97e4\\u97e5\\u97e8\\u97ee\\u97ef\\u97f0\\u97f1\\u97f2\\u97f4\\u97f7\\u97f8\\u97f9\\u97fa\\u97fb\\u97fc\\u97fd\\u97fe\\u97ff\\u9800\\u9801\\u9802\\u9803\\u9804\\u9805\\u9806\\u9807\\u9808\\u9809\\u980a\\u980b\\u980c\\u980d\\u980e\\u603c\\u605d\\u605a\\u6067\\u6041\\u6059\\u6063\\u60ab\\u6106\\u610d\\u615d\\u61a9\\u619d\\u61cb\\u61d1\\u6206\\u8080\\u807f\\u6c93\\u6cf6\\u6dfc\\u77f6\\u77f8\\u7800\\u7809\\u7817\\u7818\\u7811\\u65ab\\u782d\\u781c\\u781d\\u7839\\u783a\\u783b\\u781f\\u783c\\u7825\\u782c\\u7823\\u7829\\u784e\\u786d\\u7856\\u7857\\u7826\\u7850\\u7847\\u784c\\u786a\\u789b\\u7893\\u789a\\u7887\\u789c\\u78a1\\u78a3\\u78b2\\u78b9\\u78a5\\u78d4\\u78d9\\u78c9\\u78ec\\u78f2\\u7905\\u78f4\\u7913\\u7924\\u791e\\u7934\\u9f9b\\u9ef9\\u9efb\\u9efc\\u76f1\\u7704\\u770d\\u76f9\\u7707\\u7708\\u771a\\u7722\\u7719\\u772d\\u7726\\u7735\\u7738\\u7750\\u7751\\u7747\\u7743\\u775a\\u7768\\ufffd\".split(\"\"),e=0;e!=r[237].length;++e)65533!==r[237][e].charCodeAt(0)&&(n[r[237][e]]=60672+e,t[60672+e]=r[237][e]);for(r[238]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u980f\\u9810\\u9811\\u9812\\u9813\\u9814\\u9815\\u9816\\u9817\\u9818\\u9819\\u981a\\u981b\\u981c\\u981d\\u981e\\u981f\\u9820\\u9821\\u9822\\u9823\\u9824\\u9825\\u9826\\u9827\\u9828\\u9829\\u982a\\u982b\\u982c\\u982d\\u982e\\u982f\\u9830\\u9831\\u9832\\u9833\\u9834\\u9835\\u9836\\u9837\\u9838\\u9839\\u983a\\u983b\\u983c\\u983d\\u983e\\u983f\\u9840\\u9841\\u9842\\u9843\\u9844\\u9845\\u9846\\u9847\\u9848\\u9849\\u984a\\u984b\\u984c\\u984d\\ufffd\\u984e\\u984f\\u9850\\u9851\\u9852\\u9853\\u9854\\u9855\\u9856\\u9857\\u9858\\u9859\\u985a\\u985b\\u985c\\u985d\\u985e\\u985f\\u9860\\u9861\\u9862\\u9863\\u9864\\u9865\\u9866\\u9867\\u9868\\u9869\\u986a\\u986b\\u986c\\u986d\\u986e\\u7762\\u7765\\u777f\\u778d\\u777d\\u7780\\u778c\\u7791\\u779f\\u77a0\\u77b0\\u77b5\\u77bd\\u753a\\u7540\\u754e\\u754b\\u7548\\u755b\\u7572\\u7579\\u7583\\u7f58\\u7f61\\u7f5f\\u8a48\\u7f68\\u7f74\\u7f71\\u7f79\\u7f81\\u7f7e\\u76cd\\u76e5\\u8832\\u9485\\u9486\\u9487\\u948b\\u948a\\u948c\\u948d\\u948f\\u9490\\u9494\\u9497\\u9495\\u949a\\u949b\\u949c\\u94a3\\u94a4\\u94ab\\u94aa\\u94ad\\u94ac\\u94af\\u94b0\\u94b2\\u94b4\\u94b6\\u94b7\\u94b8\\u94b9\\u94ba\\u94bc\\u94bd\\u94bf\\u94c4\\u94c8\\u94c9\\u94ca\\u94cb\\u94cc\\u94cd\\u94ce\\u94d0\\u94d1\\u94d2\\u94d5\\u94d6\\u94d7\\u94d9\\u94d8\\u94db\\u94de\\u94df\\u94e0\\u94e2\\u94e4\\u94e5\\u94e7\\u94e8\\u94ea\\ufffd\".split(\"\"),e=0;e!=r[238].length;++e)65533!==r[238][e].charCodeAt(0)&&(n[r[238][e]]=60928+e,t[60928+e]=r[238][e]);for(r[239]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u986f\\u9870\\u9871\\u9872\\u9873\\u9874\\u988b\\u988e\\u9892\\u9895\\u9899\\u98a3\\u98a8\\u98a9\\u98aa\\u98ab\\u98ac\\u98ad\\u98ae\\u98af\\u98b0\\u98b1\\u98b2\\u98b3\\u98b4\\u98b5\\u98b6\\u98b7\\u98b8\\u98b9\\u98ba\\u98bb\\u98bc\\u98bd\\u98be\\u98bf\\u98c0\\u98c1\\u98c2\\u98c3\\u98c4\\u98c5\\u98c6\\u98c7\\u98c8\\u98c9\\u98ca\\u98cb\\u98cc\\u98cd\\u98cf\\u98d0\\u98d4\\u98d6\\u98d7\\u98db\\u98dc\\u98dd\\u98e0\\u98e1\\u98e2\\u98e3\\u98e4\\ufffd\\u98e5\\u98e6\\u98e9\\u98ea\\u98eb\\u98ec\\u98ed\\u98ee\\u98ef\\u98f0\\u98f1\\u98f2\\u98f3\\u98f4\\u98f5\\u98f6\\u98f7\\u98f8\\u98f9\\u98fa\\u98fb\\u98fc\\u98fd\\u98fe\\u98ff\\u9900\\u9901\\u9902\\u9903\\u9904\\u9905\\u9906\\u9907\\u94e9\\u94eb\\u94ee\\u94ef\\u94f3\\u94f4\\u94f5\\u94f7\\u94f9\\u94fc\\u94fd\\u94ff\\u9503\\u9502\\u9506\\u9507\\u9509\\u950a\\u950d\\u950e\\u950f\\u9512\\u9513\\u9514\\u9515\\u9516\\u9518\\u951b\\u951d\\u951e\\u951f\\u9522\\u952a\\u952b\\u9529\\u952c\\u9531\\u9532\\u9534\\u9536\\u9537\\u9538\\u953c\\u953e\\u953f\\u9542\\u9535\\u9544\\u9545\\u9546\\u9549\\u954c\\u954e\\u954f\\u9552\\u9553\\u9554\\u9556\\u9557\\u9558\\u9559\\u955b\\u955e\\u955f\\u955d\\u9561\\u9562\\u9564\\u9565\\u9566\\u9567\\u9568\\u9569\\u956a\\u956b\\u956c\\u956f\\u9571\\u9572\\u9573\\u953a\\u77e7\\u77ec\\u96c9\\u79d5\\u79ed\\u79e3\\u79eb\\u7a06\\u5d47\\u7a03\\u7a02\\u7a1e\\u7a14\\ufffd\".split(\"\"),e=0;e!=r[239].length;++e)65533!==r[239][e].charCodeAt(0)&&(n[r[239][e]]=61184+e,t[61184+e]=r[239][e]);for(r[240]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9908\\u9909\\u990a\\u990b\\u990c\\u990e\\u990f\\u9911\\u9912\\u9913\\u9914\\u9915\\u9916\\u9917\\u9918\\u9919\\u991a\\u991b\\u991c\\u991d\\u991e\\u991f\\u9920\\u9921\\u9922\\u9923\\u9924\\u9925\\u9926\\u9927\\u9928\\u9929\\u992a\\u992b\\u992c\\u992d\\u992f\\u9930\\u9931\\u9932\\u9933\\u9934\\u9935\\u9936\\u9937\\u9938\\u9939\\u993a\\u993b\\u993c\\u993d\\u993e\\u993f\\u9940\\u9941\\u9942\\u9943\\u9944\\u9945\\u9946\\u9947\\u9948\\u9949\\ufffd\\u994a\\u994b\\u994c\\u994d\\u994e\\u994f\\u9950\\u9951\\u9952\\u9953\\u9956\\u9957\\u9958\\u9959\\u995a\\u995b\\u995c\\u995d\\u995e\\u995f\\u9960\\u9961\\u9962\\u9964\\u9966\\u9973\\u9978\\u9979\\u997b\\u997e\\u9982\\u9983\\u9989\\u7a39\\u7a37\\u7a51\\u9ecf\\u99a5\\u7a70\\u7688\\u768e\\u7693\\u7699\\u76a4\\u74de\\u74e0\\u752c\\u9e20\\u9e22\\u9e28\\u9e29\\u9e2a\\u9e2b\\u9e2c\\u9e32\\u9e31\\u9e36\\u9e38\\u9e37\\u9e39\\u9e3a\\u9e3e\\u9e41\\u9e42\\u9e44\\u9e46\\u9e47\\u9e48\\u9e49\\u9e4b\\u9e4c\\u9e4e\\u9e51\\u9e55\\u9e57\\u9e5a\\u9e5b\\u9e5c\\u9e5e\\u9e63\\u9e66\\u9e67\\u9e68\\u9e69\\u9e6a\\u9e6b\\u9e6c\\u9e71\\u9e6d\\u9e73\\u7592\\u7594\\u7596\\u75a0\\u759d\\u75ac\\u75a3\\u75b3\\u75b4\\u75b8\\u75c4\\u75b1\\u75b0\\u75c3\\u75c2\\u75d6\\u75cd\\u75e3\\u75e8\\u75e6\\u75e4\\u75eb\\u75e7\\u7603\\u75f1\\u75fc\\u75ff\\u7610\\u7600\\u7605\\u760c\\u7617\\u760a\\u7625\\u7618\\u7615\\u7619\\ufffd\".split(\"\"),e=0;e!=r[240].length;++e)65533!==r[240][e].charCodeAt(0)&&(n[r[240][e]]=61440+e,t[61440+e]=r[240][e]);for(r[241]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u998c\\u998e\\u999a\\u999b\\u999c\\u999d\\u999e\\u999f\\u99a0\\u99a1\\u99a2\\u99a3\\u99a4\\u99a6\\u99a7\\u99a9\\u99aa\\u99ab\\u99ac\\u99ad\\u99ae\\u99af\\u99b0\\u99b1\\u99b2\\u99b3\\u99b4\\u99b5\\u99b6\\u99b7\\u99b8\\u99b9\\u99ba\\u99bb\\u99bc\\u99bd\\u99be\\u99bf\\u99c0\\u99c1\\u99c2\\u99c3\\u99c4\\u99c5\\u99c6\\u99c7\\u99c8\\u99c9\\u99ca\\u99cb\\u99cc\\u99cd\\u99ce\\u99cf\\u99d0\\u99d1\\u99d2\\u99d3\\u99d4\\u99d5\\u99d6\\u99d7\\u99d8\\ufffd\\u99d9\\u99da\\u99db\\u99dc\\u99dd\\u99de\\u99df\\u99e0\\u99e1\\u99e2\\u99e3\\u99e4\\u99e5\\u99e6\\u99e7\\u99e8\\u99e9\\u99ea\\u99eb\\u99ec\\u99ed\\u99ee\\u99ef\\u99f0\\u99f1\\u99f2\\u99f3\\u99f4\\u99f5\\u99f6\\u99f7\\u99f8\\u99f9\\u761b\\u763c\\u7622\\u7620\\u7640\\u762d\\u7630\\u763f\\u7635\\u7643\\u763e\\u7633\\u764d\\u765e\\u7654\\u765c\\u7656\\u766b\\u766f\\u7fca\\u7ae6\\u7a78\\u7a79\\u7a80\\u7a86\\u7a88\\u7a95\\u7aa6\\u7aa0\\u7aac\\u7aa8\\u7aad\\u7ab3\\u8864\\u8869\\u8872\\u887d\\u887f\\u8882\\u88a2\\u88c6\\u88b7\\u88bc\\u88c9\\u88e2\\u88ce\\u88e3\\u88e5\\u88f1\\u891a\\u88fc\\u88e8\\u88fe\\u88f0\\u8921\\u8919\\u8913\\u891b\\u890a\\u8934\\u892b\\u8936\\u8941\\u8966\\u897b\\u758b\\u80e5\\u76b2\\u76b4\\u77dc\\u8012\\u8014\\u8016\\u801c\\u8020\\u8022\\u8025\\u8026\\u8027\\u8029\\u8028\\u8031\\u800b\\u8035\\u8043\\u8046\\u804d\\u8052\\u8069\\u8071\\u8983\\u9878\\u9880\\u9883\\ufffd\".split(\"\"),e=0;e!=r[241].length;++e)65533!==r[241][e].charCodeAt(0)&&(n[r[241][e]]=61696+e,t[61696+e]=r[241][e]);for(r[242]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u99fa\\u99fb\\u99fc\\u99fd\\u99fe\\u99ff\\u9a00\\u9a01\\u9a02\\u9a03\\u9a04\\u9a05\\u9a06\\u9a07\\u9a08\\u9a09\\u9a0a\\u9a0b\\u9a0c\\u9a0d\\u9a0e\\u9a0f\\u9a10\\u9a11\\u9a12\\u9a13\\u9a14\\u9a15\\u9a16\\u9a17\\u9a18\\u9a19\\u9a1a\\u9a1b\\u9a1c\\u9a1d\\u9a1e\\u9a1f\\u9a20\\u9a21\\u9a22\\u9a23\\u9a24\\u9a25\\u9a26\\u9a27\\u9a28\\u9a29\\u9a2a\\u9a2b\\u9a2c\\u9a2d\\u9a2e\\u9a2f\\u9a30\\u9a31\\u9a32\\u9a33\\u9a34\\u9a35\\u9a36\\u9a37\\u9a38\\ufffd\\u9a39\\u9a3a\\u9a3b\\u9a3c\\u9a3d\\u9a3e\\u9a3f\\u9a40\\u9a41\\u9a42\\u9a43\\u9a44\\u9a45\\u9a46\\u9a47\\u9a48\\u9a49\\u9a4a\\u9a4b\\u9a4c\\u9a4d\\u9a4e\\u9a4f\\u9a50\\u9a51\\u9a52\\u9a53\\u9a54\\u9a55\\u9a56\\u9a57\\u9a58\\u9a59\\u9889\\u988c\\u988d\\u988f\\u9894\\u989a\\u989b\\u989e\\u989f\\u98a1\\u98a2\\u98a5\\u98a6\\u864d\\u8654\\u866c\\u866e\\u867f\\u867a\\u867c\\u867b\\u86a8\\u868d\\u868b\\u86ac\\u869d\\u86a7\\u86a3\\u86aa\\u8693\\u86a9\\u86b6\\u86c4\\u86b5\\u86ce\\u86b0\\u86ba\\u86b1\\u86af\\u86c9\\u86cf\\u86b4\\u86e9\\u86f1\\u86f2\\u86ed\\u86f3\\u86d0\\u8713\\u86de\\u86f4\\u86df\\u86d8\\u86d1\\u8703\\u8707\\u86f8\\u8708\\u870a\\u870d\\u8709\\u8723\\u873b\\u871e\\u8725\\u872e\\u871a\\u873e\\u8748\\u8734\\u8731\\u8729\\u8737\\u873f\\u8782\\u8722\\u877d\\u877e\\u877b\\u8760\\u8770\\u874c\\u876e\\u878b\\u8753\\u8763\\u877c\\u8764\\u8759\\u8765\\u8793\\u87af\\u87a8\\u87d2\\ufffd\".split(\"\"),e=0;e!=r[242].length;++e)65533!==r[242][e].charCodeAt(0)&&(n[r[242][e]]=61952+e,t[61952+e]=r[242][e]);for(r[243]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9a5a\\u9a5b\\u9a5c\\u9a5d\\u9a5e\\u9a5f\\u9a60\\u9a61\\u9a62\\u9a63\\u9a64\\u9a65\\u9a66\\u9a67\\u9a68\\u9a69\\u9a6a\\u9a6b\\u9a72\\u9a83\\u9a89\\u9a8d\\u9a8e\\u9a94\\u9a95\\u9a99\\u9aa6\\u9aa9\\u9aaa\\u9aab\\u9aac\\u9aad\\u9aae\\u9aaf\\u9ab2\\u9ab3\\u9ab4\\u9ab5\\u9ab9\\u9abb\\u9abd\\u9abe\\u9abf\\u9ac3\\u9ac4\\u9ac6\\u9ac7\\u9ac8\\u9ac9\\u9aca\\u9acd\\u9ace\\u9acf\\u9ad0\\u9ad2\\u9ad4\\u9ad5\\u9ad6\\u9ad7\\u9ad9\\u9ada\\u9adb\\u9adc\\ufffd\\u9add\\u9ade\\u9ae0\\u9ae2\\u9ae3\\u9ae4\\u9ae5\\u9ae7\\u9ae8\\u9ae9\\u9aea\\u9aec\\u9aee\\u9af0\\u9af1\\u9af2\\u9af3\\u9af4\\u9af5\\u9af6\\u9af7\\u9af8\\u9afa\\u9afc\\u9afd\\u9afe\\u9aff\\u9b00\\u9b01\\u9b02\\u9b04\\u9b05\\u9b06\\u87c6\\u8788\\u8785\\u87ad\\u8797\\u8783\\u87ab\\u87e5\\u87ac\\u87b5\\u87b3\\u87cb\\u87d3\\u87bd\\u87d1\\u87c0\\u87ca\\u87db\\u87ea\\u87e0\\u87ee\\u8816\\u8813\\u87fe\\u880a\\u881b\\u8821\\u8839\\u883c\\u7f36\\u7f42\\u7f44\\u7f45\\u8210\\u7afa\\u7afd\\u7b08\\u7b03\\u7b04\\u7b15\\u7b0a\\u7b2b\\u7b0f\\u7b47\\u7b38\\u7b2a\\u7b19\\u7b2e\\u7b31\\u7b20\\u7b25\\u7b24\\u7b33\\u7b3e\\u7b1e\\u7b58\\u7b5a\\u7b45\\u7b75\\u7b4c\\u7b5d\\u7b60\\u7b6e\\u7b7b\\u7b62\\u7b72\\u7b71\\u7b90\\u7ba6\\u7ba7\\u7bb8\\u7bac\\u7b9d\\u7ba8\\u7b85\\u7baa\\u7b9c\\u7ba2\\u7bab\\u7bb4\\u7bd1\\u7bc1\\u7bcc\\u7bdd\\u7bda\\u7be5\\u7be6\\u7bea\\u7c0c\\u7bfe\\u7bfc\\u7c0f\\u7c16\\u7c0b\\ufffd\".split(\"\"),e=0;e!=r[243].length;++e)65533!==r[243][e].charCodeAt(0)&&(n[r[243][e]]=62208+e,t[62208+e]=r[243][e]);for(r[244]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9b07\\u9b09\\u9b0a\\u9b0b\\u9b0c\\u9b0d\\u9b0e\\u9b10\\u9b11\\u9b12\\u9b14\\u9b15\\u9b16\\u9b17\\u9b18\\u9b19\\u9b1a\\u9b1b\\u9b1c\\u9b1d\\u9b1e\\u9b20\\u9b21\\u9b22\\u9b24\\u9b25\\u9b26\\u9b27\\u9b28\\u9b29\\u9b2a\\u9b2b\\u9b2c\\u9b2d\\u9b2e\\u9b30\\u9b31\\u9b33\\u9b34\\u9b35\\u9b36\\u9b37\\u9b38\\u9b39\\u9b3a\\u9b3d\\u9b3e\\u9b3f\\u9b40\\u9b46\\u9b4a\\u9b4b\\u9b4c\\u9b4e\\u9b50\\u9b52\\u9b53\\u9b55\\u9b56\\u9b57\\u9b58\\u9b59\\u9b5a\\ufffd\\u9b5b\\u9b5c\\u9b5d\\u9b5e\\u9b5f\\u9b60\\u9b61\\u9b62\\u9b63\\u9b64\\u9b65\\u9b66\\u9b67\\u9b68\\u9b69\\u9b6a\\u9b6b\\u9b6c\\u9b6d\\u9b6e\\u9b6f\\u9b70\\u9b71\\u9b72\\u9b73\\u9b74\\u9b75\\u9b76\\u9b77\\u9b78\\u9b79\\u9b7a\\u9b7b\\u7c1f\\u7c2a\\u7c26\\u7c38\\u7c41\\u7c40\\u81fe\\u8201\\u8202\\u8204\\u81ec\\u8844\\u8221\\u8222\\u8223\\u822d\\u822f\\u8228\\u822b\\u8238\\u823b\\u8233\\u8234\\u823e\\u8244\\u8249\\u824b\\u824f\\u825a\\u825f\\u8268\\u887e\\u8885\\u8888\\u88d8\\u88df\\u895e\\u7f9d\\u7f9f\\u7fa7\\u7faf\\u7fb0\\u7fb2\\u7c7c\\u6549\\u7c91\\u7c9d\\u7c9c\\u7c9e\\u7ca2\\u7cb2\\u7cbc\\u7cbd\\u7cc1\\u7cc7\\u7ccc\\u7ccd\\u7cc8\\u7cc5\\u7cd7\\u7ce8\\u826e\\u66a8\\u7fbf\\u7fce\\u7fd5\\u7fe5\\u7fe1\\u7fe6\\u7fe9\\u7fee\\u7ff3\\u7cf8\\u7d77\\u7da6\\u7dae\\u7e47\\u7e9b\\u9eb8\\u9eb4\\u8d73\\u8d84\\u8d94\\u8d91\\u8db1\\u8d67\\u8d6d\\u8c47\\u8c49\\u914a\\u9150\\u914e\\u914f\\u9164\\ufffd\".split(\"\"),e=0;e!=r[244].length;++e)65533!==r[244][e].charCodeAt(0)&&(n[r[244][e]]=62464+e,t[62464+e]=r[244][e]);for(r[245]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9b7c\\u9b7d\\u9b7e\\u9b7f\\u9b80\\u9b81\\u9b82\\u9b83\\u9b84\\u9b85\\u9b86\\u9b87\\u9b88\\u9b89\\u9b8a\\u9b8b\\u9b8c\\u9b8d\\u9b8e\\u9b8f\\u9b90\\u9b91\\u9b92\\u9b93\\u9b94\\u9b95\\u9b96\\u9b97\\u9b98\\u9b99\\u9b9a\\u9b9b\\u9b9c\\u9b9d\\u9b9e\\u9b9f\\u9ba0\\u9ba1\\u9ba2\\u9ba3\\u9ba4\\u9ba5\\u9ba6\\u9ba7\\u9ba8\\u9ba9\\u9baa\\u9bab\\u9bac\\u9bad\\u9bae\\u9baf\\u9bb0\\u9bb1\\u9bb2\\u9bb3\\u9bb4\\u9bb5\\u9bb6\\u9bb7\\u9bb8\\u9bb9\\u9bba\\ufffd\\u9bbb\\u9bbc\\u9bbd\\u9bbe\\u9bbf\\u9bc0\\u9bc1\\u9bc2\\u9bc3\\u9bc4\\u9bc5\\u9bc6\\u9bc7\\u9bc8\\u9bc9\\u9bca\\u9bcb\\u9bcc\\u9bcd\\u9bce\\u9bcf\\u9bd0\\u9bd1\\u9bd2\\u9bd3\\u9bd4\\u9bd5\\u9bd6\\u9bd7\\u9bd8\\u9bd9\\u9bda\\u9bdb\\u9162\\u9161\\u9170\\u9169\\u916f\\u917d\\u917e\\u9172\\u9174\\u9179\\u918c\\u9185\\u9190\\u918d\\u9191\\u91a2\\u91a3\\u91aa\\u91ad\\u91ae\\u91af\\u91b5\\u91b4\\u91ba\\u8c55\\u9e7e\\u8db8\\u8deb\\u8e05\\u8e59\\u8e69\\u8db5\\u8dbf\\u8dbc\\u8dba\\u8dc4\\u8dd6\\u8dd7\\u8dda\\u8dde\\u8dce\\u8dcf\\u8ddb\\u8dc6\\u8dec\\u8df7\\u8df8\\u8de3\\u8df9\\u8dfb\\u8de4\\u8e09\\u8dfd\\u8e14\\u8e1d\\u8e1f\\u8e2c\\u8e2e\\u8e23\\u8e2f\\u8e3a\\u8e40\\u8e39\\u8e35\\u8e3d\\u8e31\\u8e49\\u8e41\\u8e42\\u8e51\\u8e52\\u8e4a\\u8e70\\u8e76\\u8e7c\\u8e6f\\u8e74\\u8e85\\u8e8f\\u8e94\\u8e90\\u8e9c\\u8e9e\\u8c78\\u8c82\\u8c8a\\u8c85\\u8c98\\u8c94\\u659b\\u89d6\\u89de\\u89da\\u89dc\\ufffd\".split(\"\"),e=0;e!=r[245].length;++e)65533!==r[245][e].charCodeAt(0)&&(n[r[245][e]]=62720+e,t[62720+e]=r[245][e]);for(r[246]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9bdc\\u9bdd\\u9bde\\u9bdf\\u9be0\\u9be1\\u9be2\\u9be3\\u9be4\\u9be5\\u9be6\\u9be7\\u9be8\\u9be9\\u9bea\\u9beb\\u9bec\\u9bed\\u9bee\\u9bef\\u9bf0\\u9bf1\\u9bf2\\u9bf3\\u9bf4\\u9bf5\\u9bf6\\u9bf7\\u9bf8\\u9bf9\\u9bfa\\u9bfb\\u9bfc\\u9bfd\\u9bfe\\u9bff\\u9c00\\u9c01\\u9c02\\u9c03\\u9c04\\u9c05\\u9c06\\u9c07\\u9c08\\u9c09\\u9c0a\\u9c0b\\u9c0c\\u9c0d\\u9c0e\\u9c0f\\u9c10\\u9c11\\u9c12\\u9c13\\u9c14\\u9c15\\u9c16\\u9c17\\u9c18\\u9c19\\u9c1a\\ufffd\\u9c1b\\u9c1c\\u9c1d\\u9c1e\\u9c1f\\u9c20\\u9c21\\u9c22\\u9c23\\u9c24\\u9c25\\u9c26\\u9c27\\u9c28\\u9c29\\u9c2a\\u9c2b\\u9c2c\\u9c2d\\u9c2e\\u9c2f\\u9c30\\u9c31\\u9c32\\u9c33\\u9c34\\u9c35\\u9c36\\u9c37\\u9c38\\u9c39\\u9c3a\\u9c3b\\u89e5\\u89eb\\u89ef\\u8a3e\\u8b26\\u9753\\u96e9\\u96f3\\u96ef\\u9706\\u9701\\u9708\\u970f\\u970e\\u972a\\u972d\\u9730\\u973e\\u9f80\\u9f83\\u9f85\\u9f86\\u9f87\\u9f88\\u9f89\\u9f8a\\u9f8c\\u9efe\\u9f0b\\u9f0d\\u96b9\\u96bc\\u96bd\\u96ce\\u96d2\\u77bf\\u96e0\\u928e\\u92ae\\u92c8\\u933e\\u936a\\u93ca\\u938f\\u943e\\u946b\\u9c7f\\u9c82\\u9c85\\u9c86\\u9c87\\u9c88\\u7a23\\u9c8b\\u9c8e\\u9c90\\u9c91\\u9c92\\u9c94\\u9c95\\u9c9a\\u9c9b\\u9c9e\\u9c9f\\u9ca0\\u9ca1\\u9ca2\\u9ca3\\u9ca5\\u9ca6\\u9ca7\\u9ca8\\u9ca9\\u9cab\\u9cad\\u9cae\\u9cb0\\u9cb1\\u9cb2\\u9cb3\\u9cb4\\u9cb5\\u9cb6\\u9cb7\\u9cba\\u9cbb\\u9cbc\\u9cbd\\u9cc4\\u9cc5\\u9cc6\\u9cc7\\u9cca\\u9ccb\\ufffd\".split(\"\"),e=0;e!=r[246].length;++e)65533!==r[246][e].charCodeAt(0)&&(n[r[246][e]]=62976+e,t[62976+e]=r[246][e]);for(r[247]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9c3c\\u9c3d\\u9c3e\\u9c3f\\u9c40\\u9c41\\u9c42\\u9c43\\u9c44\\u9c45\\u9c46\\u9c47\\u9c48\\u9c49\\u9c4a\\u9c4b\\u9c4c\\u9c4d\\u9c4e\\u9c4f\\u9c50\\u9c51\\u9c52\\u9c53\\u9c54\\u9c55\\u9c56\\u9c57\\u9c58\\u9c59\\u9c5a\\u9c5b\\u9c5c\\u9c5d\\u9c5e\\u9c5f\\u9c60\\u9c61\\u9c62\\u9c63\\u9c64\\u9c65\\u9c66\\u9c67\\u9c68\\u9c69\\u9c6a\\u9c6b\\u9c6c\\u9c6d\\u9c6e\\u9c6f\\u9c70\\u9c71\\u9c72\\u9c73\\u9c74\\u9c75\\u9c76\\u9c77\\u9c78\\u9c79\\u9c7a\\ufffd\\u9c7b\\u9c7d\\u9c7e\\u9c80\\u9c83\\u9c84\\u9c89\\u9c8a\\u9c8c\\u9c8f\\u9c93\\u9c96\\u9c97\\u9c98\\u9c99\\u9c9d\\u9caa\\u9cac\\u9caf\\u9cb9\\u9cbe\\u9cbf\\u9cc0\\u9cc1\\u9cc2\\u9cc8\\u9cc9\\u9cd1\\u9cd2\\u9cda\\u9cdb\\u9ce0\\u9ce1\\u9ccc\\u9ccd\\u9cce\\u9ccf\\u9cd0\\u9cd3\\u9cd4\\u9cd5\\u9cd7\\u9cd8\\u9cd9\\u9cdc\\u9cdd\\u9cdf\\u9ce2\\u977c\\u9785\\u9791\\u9792\\u9794\\u97af\\u97ab\\u97a3\\u97b2\\u97b4\\u9ab1\\u9ab0\\u9ab7\\u9e58\\u9ab6\\u9aba\\u9abc\\u9ac1\\u9ac0\\u9ac5\\u9ac2\\u9acb\\u9acc\\u9ad1\\u9b45\\u9b43\\u9b47\\u9b49\\u9b48\\u9b4d\\u9b51\\u98e8\\u990d\\u992e\\u9955\\u9954\\u9adf\\u9ae1\\u9ae6\\u9aef\\u9aeb\\u9afb\\u9aed\\u9af9\\u9b08\\u9b0f\\u9b13\\u9b1f\\u9b23\\u9ebd\\u9ebe\\u7e3b\\u9e82\\u9e87\\u9e88\\u9e8b\\u9e92\\u93d6\\u9e9d\\u9e9f\\u9edb\\u9edc\\u9edd\\u9ee0\\u9edf\\u9ee2\\u9ee9\\u9ee7\\u9ee5\\u9eea\\u9eef\\u9f22\\u9f2c\\u9f2f\\u9f39\\u9f37\\u9f3d\\u9f3e\\u9f44\\ufffd\".split(\"\"),e=0;e!=r[247].length;++e)65533!==r[247][e].charCodeAt(0)&&(n[r[247][e]]=63232+e,t[63232+e]=r[247][e]);for(r[248]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9ce3\\u9ce4\\u9ce5\\u9ce6\\u9ce7\\u9ce8\\u9ce9\\u9cea\\u9ceb\\u9cec\\u9ced\\u9cee\\u9cef\\u9cf0\\u9cf1\\u9cf2\\u9cf3\\u9cf4\\u9cf5\\u9cf6\\u9cf7\\u9cf8\\u9cf9\\u9cfa\\u9cfb\\u9cfc\\u9cfd\\u9cfe\\u9cff\\u9d00\\u9d01\\u9d02\\u9d03\\u9d04\\u9d05\\u9d06\\u9d07\\u9d08\\u9d09\\u9d0a\\u9d0b\\u9d0c\\u9d0d\\u9d0e\\u9d0f\\u9d10\\u9d11\\u9d12\\u9d13\\u9d14\\u9d15\\u9d16\\u9d17\\u9d18\\u9d19\\u9d1a\\u9d1b\\u9d1c\\u9d1d\\u9d1e\\u9d1f\\u9d20\\u9d21\\ufffd\\u9d22\\u9d23\\u9d24\\u9d25\\u9d26\\u9d27\\u9d28\\u9d29\\u9d2a\\u9d2b\\u9d2c\\u9d2d\\u9d2e\\u9d2f\\u9d30\\u9d31\\u9d32\\u9d33\\u9d34\\u9d35\\u9d36\\u9d37\\u9d38\\u9d39\\u9d3a\\u9d3b\\u9d3c\\u9d3d\\u9d3e\\u9d3f\\u9d40\\u9d41\\u9d42\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[248].length;++e)65533!==r[248][e].charCodeAt(0)&&(n[r[248][e]]=63488+e,t[63488+e]=r[248][e]);for(r[249]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9d43\\u9d44\\u9d45\\u9d46\\u9d47\\u9d48\\u9d49\\u9d4a\\u9d4b\\u9d4c\\u9d4d\\u9d4e\\u9d4f\\u9d50\\u9d51\\u9d52\\u9d53\\u9d54\\u9d55\\u9d56\\u9d57\\u9d58\\u9d59\\u9d5a\\u9d5b\\u9d5c\\u9d5d\\u9d5e\\u9d5f\\u9d60\\u9d61\\u9d62\\u9d63\\u9d64\\u9d65\\u9d66\\u9d67\\u9d68\\u9d69\\u9d6a\\u9d6b\\u9d6c\\u9d6d\\u9d6e\\u9d6f\\u9d70\\u9d71\\u9d72\\u9d73\\u9d74\\u9d75\\u9d76\\u9d77\\u9d78\\u9d79\\u9d7a\\u9d7b\\u9d7c\\u9d7d\\u9d7e\\u9d7f\\u9d80\\u9d81\\ufffd\\u9d82\\u9d83\\u9d84\\u9d85\\u9d86\\u9d87\\u9d88\\u9d89\\u9d8a\\u9d8b\\u9d8c\\u9d8d\\u9d8e\\u9d8f\\u9d90\\u9d91\\u9d92\\u9d93\\u9d94\\u9d95\\u9d96\\u9d97\\u9d98\\u9d99\\u9d9a\\u9d9b\\u9d9c\\u9d9d\\u9d9e\\u9d9f\\u9da0\\u9da1\\u9da2\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[249].length;++e)65533!==r[249][e].charCodeAt(0)&&(n[r[249][e]]=63744+e,t[63744+e]=r[249][e]);for(r[250]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9da3\\u9da4\\u9da5\\u9da6\\u9da7\\u9da8\\u9da9\\u9daa\\u9dab\\u9dac\\u9dad\\u9dae\\u9daf\\u9db0\\u9db1\\u9db2\\u9db3\\u9db4\\u9db5\\u9db6\\u9db7\\u9db8\\u9db9\\u9dba\\u9dbb\\u9dbc\\u9dbd\\u9dbe\\u9dbf\\u9dc0\\u9dc1\\u9dc2\\u9dc3\\u9dc4\\u9dc5\\u9dc6\\u9dc7\\u9dc8\\u9dc9\\u9dca\\u9dcb\\u9dcc\\u9dcd\\u9dce\\u9dcf\\u9dd0\\u9dd1\\u9dd2\\u9dd3\\u9dd4\\u9dd5\\u9dd6\\u9dd7\\u9dd8\\u9dd9\\u9dda\\u9ddb\\u9ddc\\u9ddd\\u9dde\\u9ddf\\u9de0\\u9de1\\ufffd\\u9de2\\u9de3\\u9de4\\u9de5\\u9de6\\u9de7\\u9de8\\u9de9\\u9dea\\u9deb\\u9dec\\u9ded\\u9dee\\u9def\\u9df0\\u9df1\\u9df2\\u9df3\\u9df4\\u9df5\\u9df6\\u9df7\\u9df8\\u9df9\\u9dfa\\u9dfb\\u9dfc\\u9dfd\\u9dfe\\u9dff\\u9e00\\u9e01\\u9e02\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[250].length;++e)65533!==r[250][e].charCodeAt(0)&&(n[r[250][e]]=64e3+e,t[64e3+e]=r[250][e]);for(r[251]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9e03\\u9e04\\u9e05\\u9e06\\u9e07\\u9e08\\u9e09\\u9e0a\\u9e0b\\u9e0c\\u9e0d\\u9e0e\\u9e0f\\u9e10\\u9e11\\u9e12\\u9e13\\u9e14\\u9e15\\u9e16\\u9e17\\u9e18\\u9e19\\u9e1a\\u9e1b\\u9e1c\\u9e1d\\u9e1e\\u9e24\\u9e27\\u9e2e\\u9e30\\u9e34\\u9e3b\\u9e3c\\u9e40\\u9e4d\\u9e50\\u9e52\\u9e53\\u9e54\\u9e56\\u9e59\\u9e5d\\u9e5f\\u9e60\\u9e61\\u9e62\\u9e65\\u9e6e\\u9e6f\\u9e72\\u9e74\\u9e75\\u9e76\\u9e77\\u9e78\\u9e79\\u9e7a\\u9e7b\\u9e7c\\u9e7d\\u9e80\\ufffd\\u9e81\\u9e83\\u9e84\\u9e85\\u9e86\\u9e89\\u9e8a\\u9e8c\\u9e8d\\u9e8e\\u9e8f\\u9e90\\u9e91\\u9e94\\u9e95\\u9e96\\u9e97\\u9e98\\u9e99\\u9e9a\\u9e9b\\u9e9c\\u9e9e\\u9ea0\\u9ea1\\u9ea2\\u9ea3\\u9ea4\\u9ea5\\u9ea7\\u9ea8\\u9ea9\\u9eaa\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[251].length;++e)65533!==r[251][e].charCodeAt(0)&&(n[r[251][e]]=64256+e,t[64256+e]=r[251][e]);for(r[252]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9eab\\u9eac\\u9ead\\u9eae\\u9eaf\\u9eb0\\u9eb1\\u9eb2\\u9eb3\\u9eb5\\u9eb6\\u9eb7\\u9eb9\\u9eba\\u9ebc\\u9ebf\\u9ec0\\u9ec1\\u9ec2\\u9ec3\\u9ec5\\u9ec6\\u9ec7\\u9ec8\\u9eca\\u9ecb\\u9ecc\\u9ed0\\u9ed2\\u9ed3\\u9ed5\\u9ed6\\u9ed7\\u9ed9\\u9eda\\u9ede\\u9ee1\\u9ee3\\u9ee4\\u9ee6\\u9ee8\\u9eeb\\u9eec\\u9eed\\u9eee\\u9ef0\\u9ef1\\u9ef2\\u9ef3\\u9ef4\\u9ef5\\u9ef6\\u9ef7\\u9ef8\\u9efa\\u9efd\\u9eff\\u9f00\\u9f01\\u9f02\\u9f03\\u9f04\\u9f05\\ufffd\\u9f06\\u9f07\\u9f08\\u9f09\\u9f0a\\u9f0c\\u9f0f\\u9f11\\u9f12\\u9f14\\u9f15\\u9f16\\u9f18\\u9f1a\\u9f1b\\u9f1c\\u9f1d\\u9f1e\\u9f1f\\u9f21\\u9f23\\u9f24\\u9f25\\u9f26\\u9f27\\u9f28\\u9f29\\u9f2a\\u9f2b\\u9f2d\\u9f2e\\u9f30\\u9f31\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[252].length;++e)65533!==r[252][e].charCodeAt(0)&&(n[r[252][e]]=64512+e,t[64512+e]=r[252][e]);for(r[253]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9f32\\u9f33\\u9f34\\u9f35\\u9f36\\u9f38\\u9f3a\\u9f3c\\u9f3f\\u9f40\\u9f41\\u9f42\\u9f43\\u9f45\\u9f46\\u9f47\\u9f48\\u9f49\\u9f4a\\u9f4b\\u9f4c\\u9f4d\\u9f4e\\u9f4f\\u9f52\\u9f53\\u9f54\\u9f55\\u9f56\\u9f57\\u9f58\\u9f59\\u9f5a\\u9f5b\\u9f5c\\u9f5d\\u9f5e\\u9f5f\\u9f60\\u9f61\\u9f62\\u9f63\\u9f64\\u9f65\\u9f66\\u9f67\\u9f68\\u9f69\\u9f6a\\u9f6b\\u9f6c\\u9f6d\\u9f6e\\u9f6f\\u9f70\\u9f71\\u9f72\\u9f73\\u9f74\\u9f75\\u9f76\\u9f77\\u9f78\\ufffd\\u9f79\\u9f7a\\u9f7b\\u9f7c\\u9f7d\\u9f7e\\u9f81\\u9f82\\u9f8d\\u9f8e\\u9f8f\\u9f90\\u9f91\\u9f92\\u9f93\\u9f94\\u9f95\\u9f96\\u9f97\\u9f98\\u9f9c\\u9f9d\\u9f9e\\u9fa1\\u9fa2\\u9fa3\\u9fa4\\u9fa5\\uf92c\\uf979\\uf995\\uf9e7\\uf9f1\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[253].length;++e)65533!==r[253][e].charCodeAt(0)&&(n[r[253][e]]=64768+e,t[64768+e]=r[253][e]);for(r[254]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufa0c\\ufa0d\\ufa0e\\ufa0f\\ufa11\\ufa13\\ufa14\\ufa18\\ufa1f\\ufa20\\ufa21\\ufa23\\ufa24\\ufa27\\ufa28\\ufa29\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[254].length;++e)65533!==r[254][e].charCodeAt(0)&&(n[r[254][e]]=65024+e,t[65024+e]=r[254][e]);return{enc:n,dec:t}}(),r[949]=function(){var e,t=[],n={},r=[];for(r[0]=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[0].length;++e)65533!==r[0][e].charCodeAt(0)&&(n[r[0][e]]=0+e,t[0+e]=r[0][e]);for(r[129]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uac02\\uac03\\uac05\\uac06\\uac0b\\uac0c\\uac0d\\uac0e\\uac0f\\uac18\\uac1e\\uac1f\\uac21\\uac22\\uac23\\uac25\\uac26\\uac27\\uac28\\uac29\\uac2a\\uac2b\\uac2e\\uac32\\uac33\\uac34\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uac35\\uac36\\uac37\\uac3a\\uac3b\\uac3d\\uac3e\\uac3f\\uac41\\uac42\\uac43\\uac44\\uac45\\uac46\\uac47\\uac48\\uac49\\uac4a\\uac4c\\uac4e\\uac4f\\uac50\\uac51\\uac52\\uac53\\uac55\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uac56\\uac57\\uac59\\uac5a\\uac5b\\uac5d\\uac5e\\uac5f\\uac60\\uac61\\uac62\\uac63\\uac64\\uac65\\uac66\\uac67\\uac68\\uac69\\uac6a\\uac6b\\uac6c\\uac6d\\uac6e\\uac6f\\uac72\\uac73\\uac75\\uac76\\uac79\\uac7b\\uac7c\\uac7d\\uac7e\\uac7f\\uac82\\uac87\\uac88\\uac8d\\uac8e\\uac8f\\uac91\\uac92\\uac93\\uac95\\uac96\\uac97\\uac98\\uac99\\uac9a\\uac9b\\uac9e\\uaca2\\uaca3\\uaca4\\uaca5\\uaca6\\uaca7\\uacab\\uacad\\uacae\\uacb1\\uacb2\\uacb3\\uacb4\\uacb5\\uacb6\\uacb7\\uacba\\uacbe\\uacbf\\uacc0\\uacc2\\uacc3\\uacc5\\uacc6\\uacc7\\uacc9\\uacca\\uaccb\\uaccd\\uacce\\uaccf\\uacd0\\uacd1\\uacd2\\uacd3\\uacd4\\uacd6\\uacd8\\uacd9\\uacda\\uacdb\\uacdc\\uacdd\\uacde\\uacdf\\uace2\\uace3\\uace5\\uace6\\uace9\\uaceb\\uaced\\uacee\\uacf2\\uacf4\\uacf7\\uacf8\\uacf9\\uacfa\\uacfb\\uacfe\\uacff\\uad01\\uad02\\uad03\\uad05\\uad07\\uad08\\uad09\\uad0a\\uad0b\\uad0e\\uad10\\uad12\\uad13\\ufffd\".split(\"\"),e=0;e!=r[129].length;++e)65533!==r[129][e].charCodeAt(0)&&(n[r[129][e]]=33024+e,t[33024+e]=r[129][e]);for(r[130]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uad14\\uad15\\uad16\\uad17\\uad19\\uad1a\\uad1b\\uad1d\\uad1e\\uad1f\\uad21\\uad22\\uad23\\uad24\\uad25\\uad26\\uad27\\uad28\\uad2a\\uad2b\\uad2e\\uad2f\\uad30\\uad31\\uad32\\uad33\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uad36\\uad37\\uad39\\uad3a\\uad3b\\uad3d\\uad3e\\uad3f\\uad40\\uad41\\uad42\\uad43\\uad46\\uad48\\uad4a\\uad4b\\uad4c\\uad4d\\uad4e\\uad4f\\uad51\\uad52\\uad53\\uad55\\uad56\\uad57\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uad59\\uad5a\\uad5b\\uad5c\\uad5d\\uad5e\\uad5f\\uad60\\uad62\\uad64\\uad65\\uad66\\uad67\\uad68\\uad69\\uad6a\\uad6b\\uad6e\\uad6f\\uad71\\uad72\\uad77\\uad78\\uad79\\uad7a\\uad7e\\uad80\\uad83\\uad84\\uad85\\uad86\\uad87\\uad8a\\uad8b\\uad8d\\uad8e\\uad8f\\uad91\\uad92\\uad93\\uad94\\uad95\\uad96\\uad97\\uad98\\uad99\\uad9a\\uad9b\\uad9e\\uad9f\\uada0\\uada1\\uada2\\uada3\\uada5\\uada6\\uada7\\uada8\\uada9\\uadaa\\uadab\\uadac\\uadad\\uadae\\uadaf\\uadb0\\uadb1\\uadb2\\uadb3\\uadb4\\uadb5\\uadb6\\uadb8\\uadb9\\uadba\\uadbb\\uadbc\\uadbd\\uadbe\\uadbf\\uadc2\\uadc3\\uadc5\\uadc6\\uadc7\\uadc9\\uadca\\uadcb\\uadcc\\uadcd\\uadce\\uadcf\\uadd2\\uadd4\\uadd5\\uadd6\\uadd7\\uadd8\\uadd9\\uadda\\uaddb\\uaddd\\uadde\\uaddf\\uade1\\uade2\\uade3\\uade5\\uade6\\uade7\\uade8\\uade9\\uadea\\uadeb\\uadec\\uaded\\uadee\\uadef\\uadf0\\uadf1\\uadf2\\uadf3\\uadf4\\uadf5\\uadf6\\uadf7\\ufffd\".split(\"\"),e=0;e!=r[130].length;++e)65533!==r[130][e].charCodeAt(0)&&(n[r[130][e]]=33280+e,t[33280+e]=r[130][e]);for(r[131]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uadfa\\uadfb\\uadfd\\uadfe\\uae02\\uae03\\uae04\\uae05\\uae06\\uae07\\uae0a\\uae0c\\uae0e\\uae0f\\uae10\\uae11\\uae12\\uae13\\uae15\\uae16\\uae17\\uae18\\uae19\\uae1a\\uae1b\\uae1c\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uae1d\\uae1e\\uae1f\\uae20\\uae21\\uae22\\uae23\\uae24\\uae25\\uae26\\uae27\\uae28\\uae29\\uae2a\\uae2b\\uae2c\\uae2d\\uae2e\\uae2f\\uae32\\uae33\\uae35\\uae36\\uae39\\uae3b\\uae3c\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uae3d\\uae3e\\uae3f\\uae42\\uae44\\uae47\\uae48\\uae49\\uae4b\\uae4f\\uae51\\uae52\\uae53\\uae55\\uae57\\uae58\\uae59\\uae5a\\uae5b\\uae5e\\uae62\\uae63\\uae64\\uae66\\uae67\\uae6a\\uae6b\\uae6d\\uae6e\\uae6f\\uae71\\uae72\\uae73\\uae74\\uae75\\uae76\\uae77\\uae7a\\uae7e\\uae7f\\uae80\\uae81\\uae82\\uae83\\uae86\\uae87\\uae88\\uae89\\uae8a\\uae8b\\uae8d\\uae8e\\uae8f\\uae90\\uae91\\uae92\\uae93\\uae94\\uae95\\uae96\\uae97\\uae98\\uae99\\uae9a\\uae9b\\uae9c\\uae9d\\uae9e\\uae9f\\uaea0\\uaea1\\uaea2\\uaea3\\uaea4\\uaea5\\uaea6\\uaea7\\uaea8\\uaea9\\uaeaa\\uaeab\\uaeac\\uaead\\uaeae\\uaeaf\\uaeb0\\uaeb1\\uaeb2\\uaeb3\\uaeb4\\uaeb5\\uaeb6\\uaeb7\\uaeb8\\uaeb9\\uaeba\\uaebb\\uaebf\\uaec1\\uaec2\\uaec3\\uaec5\\uaec6\\uaec7\\uaec8\\uaec9\\uaeca\\uaecb\\uaece\\uaed2\\uaed3\\uaed4\\uaed5\\uaed6\\uaed7\\uaeda\\uaedb\\uaedd\\uaede\\uaedf\\uaee0\\uaee1\\uaee2\\uaee3\\uaee4\\uaee5\\ufffd\".split(\"\"),e=0;e!=r[131].length;++e)65533!==r[131][e].charCodeAt(0)&&(n[r[131][e]]=33536+e,t[33536+e]=r[131][e]);for(r[132]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uaee6\\uaee7\\uaee9\\uaeea\\uaeec\\uaeee\\uaeef\\uaef0\\uaef1\\uaef2\\uaef3\\uaef5\\uaef6\\uaef7\\uaef9\\uaefa\\uaefb\\uaefd\\uaefe\\uaeff\\uaf00\\uaf01\\uaf02\\uaf03\\uaf04\\uaf05\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uaf06\\uaf09\\uaf0a\\uaf0b\\uaf0c\\uaf0e\\uaf0f\\uaf11\\uaf12\\uaf13\\uaf14\\uaf15\\uaf16\\uaf17\\uaf18\\uaf19\\uaf1a\\uaf1b\\uaf1c\\uaf1d\\uaf1e\\uaf1f\\uaf20\\uaf21\\uaf22\\uaf23\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uaf24\\uaf25\\uaf26\\uaf27\\uaf28\\uaf29\\uaf2a\\uaf2b\\uaf2e\\uaf2f\\uaf31\\uaf33\\uaf35\\uaf36\\uaf37\\uaf38\\uaf39\\uaf3a\\uaf3b\\uaf3e\\uaf40\\uaf44\\uaf45\\uaf46\\uaf47\\uaf4a\\uaf4b\\uaf4c\\uaf4d\\uaf4e\\uaf4f\\uaf51\\uaf52\\uaf53\\uaf54\\uaf55\\uaf56\\uaf57\\uaf58\\uaf59\\uaf5a\\uaf5b\\uaf5e\\uaf5f\\uaf60\\uaf61\\uaf62\\uaf63\\uaf66\\uaf67\\uaf68\\uaf69\\uaf6a\\uaf6b\\uaf6c\\uaf6d\\uaf6e\\uaf6f\\uaf70\\uaf71\\uaf72\\uaf73\\uaf74\\uaf75\\uaf76\\uaf77\\uaf78\\uaf7a\\uaf7b\\uaf7c\\uaf7d\\uaf7e\\uaf7f\\uaf81\\uaf82\\uaf83\\uaf85\\uaf86\\uaf87\\uaf89\\uaf8a\\uaf8b\\uaf8c\\uaf8d\\uaf8e\\uaf8f\\uaf92\\uaf93\\uaf94\\uaf96\\uaf97\\uaf98\\uaf99\\uaf9a\\uaf9b\\uaf9d\\uaf9e\\uaf9f\\uafa0\\uafa1\\uafa2\\uafa3\\uafa4\\uafa5\\uafa6\\uafa7\\uafa8\\uafa9\\uafaa\\uafab\\uafac\\uafad\\uafae\\uafaf\\uafb0\\uafb1\\uafb2\\uafb3\\uafb4\\uafb5\\uafb6\\uafb7\\uafba\\uafbb\\uafbd\\uafbe\\ufffd\".split(\"\"),e=0;e!=r[132].length;++e)65533!==r[132][e].charCodeAt(0)&&(n[r[132][e]]=33792+e,t[33792+e]=r[132][e]);for(r[133]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uafbf\\uafc1\\uafc2\\uafc3\\uafc4\\uafc5\\uafc6\\uafca\\uafcc\\uafcf\\uafd0\\uafd1\\uafd2\\uafd3\\uafd5\\uafd6\\uafd7\\uafd8\\uafd9\\uafda\\uafdb\\uafdd\\uafde\\uafdf\\uafe0\\uafe1\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uafe2\\uafe3\\uafe4\\uafe5\\uafe6\\uafe7\\uafea\\uafeb\\uafec\\uafed\\uafee\\uafef\\uaff2\\uaff3\\uaff5\\uaff6\\uaff7\\uaff9\\uaffa\\uaffb\\uaffc\\uaffd\\uaffe\\uafff\\ub002\\ub003\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub005\\ub006\\ub007\\ub008\\ub009\\ub00a\\ub00b\\ub00d\\ub00e\\ub00f\\ub011\\ub012\\ub013\\ub015\\ub016\\ub017\\ub018\\ub019\\ub01a\\ub01b\\ub01e\\ub01f\\ub020\\ub021\\ub022\\ub023\\ub024\\ub025\\ub026\\ub027\\ub029\\ub02a\\ub02b\\ub02c\\ub02d\\ub02e\\ub02f\\ub030\\ub031\\ub032\\ub033\\ub034\\ub035\\ub036\\ub037\\ub038\\ub039\\ub03a\\ub03b\\ub03c\\ub03d\\ub03e\\ub03f\\ub040\\ub041\\ub042\\ub043\\ub046\\ub047\\ub049\\ub04b\\ub04d\\ub04f\\ub050\\ub051\\ub052\\ub056\\ub058\\ub05a\\ub05b\\ub05c\\ub05e\\ub05f\\ub060\\ub061\\ub062\\ub063\\ub064\\ub065\\ub066\\ub067\\ub068\\ub069\\ub06a\\ub06b\\ub06c\\ub06d\\ub06e\\ub06f\\ub070\\ub071\\ub072\\ub073\\ub074\\ub075\\ub076\\ub077\\ub078\\ub079\\ub07a\\ub07b\\ub07e\\ub07f\\ub081\\ub082\\ub083\\ub085\\ub086\\ub087\\ub088\\ub089\\ub08a\\ub08b\\ub08e\\ub090\\ub092\\ub093\\ub094\\ub095\\ub096\\ub097\\ub09b\\ub09d\\ub09e\\ub0a3\\ub0a4\\ufffd\".split(\"\"),e=0;e!=r[133].length;++e)65533!==r[133][e].charCodeAt(0)&&(n[r[133][e]]=34048+e,t[34048+e]=r[133][e]);for(r[134]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub0a5\\ub0a6\\ub0a7\\ub0aa\\ub0b0\\ub0b2\\ub0b6\\ub0b7\\ub0b9\\ub0ba\\ub0bb\\ub0bd\\ub0be\\ub0bf\\ub0c0\\ub0c1\\ub0c2\\ub0c3\\ub0c6\\ub0ca\\ub0cb\\ub0cc\\ub0cd\\ub0ce\\ub0cf\\ub0d2\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub0d3\\ub0d5\\ub0d6\\ub0d7\\ub0d9\\ub0da\\ub0db\\ub0dc\\ub0dd\\ub0de\\ub0df\\ub0e1\\ub0e2\\ub0e3\\ub0e4\\ub0e6\\ub0e7\\ub0e8\\ub0e9\\ub0ea\\ub0eb\\ub0ec\\ub0ed\\ub0ee\\ub0ef\\ub0f0\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub0f1\\ub0f2\\ub0f3\\ub0f4\\ub0f5\\ub0f6\\ub0f7\\ub0f8\\ub0f9\\ub0fa\\ub0fb\\ub0fc\\ub0fd\\ub0fe\\ub0ff\\ub100\\ub101\\ub102\\ub103\\ub104\\ub105\\ub106\\ub107\\ub10a\\ub10d\\ub10e\\ub10f\\ub111\\ub114\\ub115\\ub116\\ub117\\ub11a\\ub11e\\ub11f\\ub120\\ub121\\ub122\\ub126\\ub127\\ub129\\ub12a\\ub12b\\ub12d\\ub12e\\ub12f\\ub130\\ub131\\ub132\\ub133\\ub136\\ub13a\\ub13b\\ub13c\\ub13d\\ub13e\\ub13f\\ub142\\ub143\\ub145\\ub146\\ub147\\ub149\\ub14a\\ub14b\\ub14c\\ub14d\\ub14e\\ub14f\\ub152\\ub153\\ub156\\ub157\\ub159\\ub15a\\ub15b\\ub15d\\ub15e\\ub15f\\ub161\\ub162\\ub163\\ub164\\ub165\\ub166\\ub167\\ub168\\ub169\\ub16a\\ub16b\\ub16c\\ub16d\\ub16e\\ub16f\\ub170\\ub171\\ub172\\ub173\\ub174\\ub175\\ub176\\ub177\\ub17a\\ub17b\\ub17d\\ub17e\\ub17f\\ub181\\ub183\\ub184\\ub185\\ub186\\ub187\\ub18a\\ub18c\\ub18e\\ub18f\\ub190\\ub191\\ub195\\ub196\\ub197\\ub199\\ub19a\\ub19b\\ub19d\\ufffd\".split(\"\"),e=0;e!=r[134].length;++e)65533!==r[134][e].charCodeAt(0)&&(n[r[134][e]]=34304+e,t[34304+e]=r[134][e]);for(r[135]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub19e\\ub19f\\ub1a0\\ub1a1\\ub1a2\\ub1a3\\ub1a4\\ub1a5\\ub1a6\\ub1a7\\ub1a9\\ub1aa\\ub1ab\\ub1ac\\ub1ad\\ub1ae\\ub1af\\ub1b0\\ub1b1\\ub1b2\\ub1b3\\ub1b4\\ub1b5\\ub1b6\\ub1b7\\ub1b8\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub1b9\\ub1ba\\ub1bb\\ub1bc\\ub1bd\\ub1be\\ub1bf\\ub1c0\\ub1c1\\ub1c2\\ub1c3\\ub1c4\\ub1c5\\ub1c6\\ub1c7\\ub1c8\\ub1c9\\ub1ca\\ub1cb\\ub1cd\\ub1ce\\ub1cf\\ub1d1\\ub1d2\\ub1d3\\ub1d5\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub1d6\\ub1d7\\ub1d8\\ub1d9\\ub1da\\ub1db\\ub1de\\ub1e0\\ub1e1\\ub1e2\\ub1e3\\ub1e4\\ub1e5\\ub1e6\\ub1e7\\ub1ea\\ub1eb\\ub1ed\\ub1ee\\ub1ef\\ub1f1\\ub1f2\\ub1f3\\ub1f4\\ub1f5\\ub1f6\\ub1f7\\ub1f8\\ub1fa\\ub1fc\\ub1fe\\ub1ff\\ub200\\ub201\\ub202\\ub203\\ub206\\ub207\\ub209\\ub20a\\ub20d\\ub20e\\ub20f\\ub210\\ub211\\ub212\\ub213\\ub216\\ub218\\ub21a\\ub21b\\ub21c\\ub21d\\ub21e\\ub21f\\ub221\\ub222\\ub223\\ub224\\ub225\\ub226\\ub227\\ub228\\ub229\\ub22a\\ub22b\\ub22c\\ub22d\\ub22e\\ub22f\\ub230\\ub231\\ub232\\ub233\\ub235\\ub236\\ub237\\ub238\\ub239\\ub23a\\ub23b\\ub23d\\ub23e\\ub23f\\ub240\\ub241\\ub242\\ub243\\ub244\\ub245\\ub246\\ub247\\ub248\\ub249\\ub24a\\ub24b\\ub24c\\ub24d\\ub24e\\ub24f\\ub250\\ub251\\ub252\\ub253\\ub254\\ub255\\ub256\\ub257\\ub259\\ub25a\\ub25b\\ub25d\\ub25e\\ub25f\\ub261\\ub262\\ub263\\ub264\\ub265\\ub266\\ub267\\ub26a\\ub26b\\ub26c\\ub26d\\ub26e\\ufffd\".split(\"\"),e=0;e!=r[135].length;++e)65533!==r[135][e].charCodeAt(0)&&(n[r[135][e]]=34560+e,t[34560+e]=r[135][e]);for(r[136]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub26f\\ub270\\ub271\\ub272\\ub273\\ub276\\ub277\\ub278\\ub279\\ub27a\\ub27b\\ub27d\\ub27e\\ub27f\\ub280\\ub281\\ub282\\ub283\\ub286\\ub287\\ub288\\ub28a\\ub28b\\ub28c\\ub28d\\ub28e\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub28f\\ub292\\ub293\\ub295\\ub296\\ub297\\ub29b\\ub29c\\ub29d\\ub29e\\ub29f\\ub2a2\\ub2a4\\ub2a7\\ub2a8\\ub2a9\\ub2ab\\ub2ad\\ub2ae\\ub2af\\ub2b1\\ub2b2\\ub2b3\\ub2b5\\ub2b6\\ub2b7\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub2b8\\ub2b9\\ub2ba\\ub2bb\\ub2bc\\ub2bd\\ub2be\\ub2bf\\ub2c0\\ub2c1\\ub2c2\\ub2c3\\ub2c4\\ub2c5\\ub2c6\\ub2c7\\ub2ca\\ub2cb\\ub2cd\\ub2ce\\ub2cf\\ub2d1\\ub2d3\\ub2d4\\ub2d5\\ub2d6\\ub2d7\\ub2da\\ub2dc\\ub2de\\ub2df\\ub2e0\\ub2e1\\ub2e3\\ub2e7\\ub2e9\\ub2ea\\ub2f0\\ub2f1\\ub2f2\\ub2f6\\ub2fc\\ub2fd\\ub2fe\\ub302\\ub303\\ub305\\ub306\\ub307\\ub309\\ub30a\\ub30b\\ub30c\\ub30d\\ub30e\\ub30f\\ub312\\ub316\\ub317\\ub318\\ub319\\ub31a\\ub31b\\ub31d\\ub31e\\ub31f\\ub320\\ub321\\ub322\\ub323\\ub324\\ub325\\ub326\\ub327\\ub328\\ub329\\ub32a\\ub32b\\ub32c\\ub32d\\ub32e\\ub32f\\ub330\\ub331\\ub332\\ub333\\ub334\\ub335\\ub336\\ub337\\ub338\\ub339\\ub33a\\ub33b\\ub33c\\ub33d\\ub33e\\ub33f\\ub340\\ub341\\ub342\\ub343\\ub344\\ub345\\ub346\\ub347\\ub348\\ub349\\ub34a\\ub34b\\ub34c\\ub34d\\ub34e\\ub34f\\ub350\\ub351\\ub352\\ub353\\ub357\\ub359\\ub35a\\ub35d\\ub360\\ub361\\ub362\\ub363\\ufffd\".split(\"\"),e=0;e!=r[136].length;++e)65533!==r[136][e].charCodeAt(0)&&(n[r[136][e]]=34816+e,t[34816+e]=r[136][e]);for(r[137]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub366\\ub368\\ub36a\\ub36c\\ub36d\\ub36f\\ub372\\ub373\\ub375\\ub376\\ub377\\ub379\\ub37a\\ub37b\\ub37c\\ub37d\\ub37e\\ub37f\\ub382\\ub386\\ub387\\ub388\\ub389\\ub38a\\ub38b\\ub38d\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub38e\\ub38f\\ub391\\ub392\\ub393\\ub395\\ub396\\ub397\\ub398\\ub399\\ub39a\\ub39b\\ub39c\\ub39d\\ub39e\\ub39f\\ub3a2\\ub3a3\\ub3a4\\ub3a5\\ub3a6\\ub3a7\\ub3a9\\ub3aa\\ub3ab\\ub3ad\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub3ae\\ub3af\\ub3b0\\ub3b1\\ub3b2\\ub3b3\\ub3b4\\ub3b5\\ub3b6\\ub3b7\\ub3b8\\ub3b9\\ub3ba\\ub3bb\\ub3bc\\ub3bd\\ub3be\\ub3bf\\ub3c0\\ub3c1\\ub3c2\\ub3c3\\ub3c6\\ub3c7\\ub3c9\\ub3ca\\ub3cd\\ub3cf\\ub3d1\\ub3d2\\ub3d3\\ub3d6\\ub3d8\\ub3da\\ub3dc\\ub3de\\ub3df\\ub3e1\\ub3e2\\ub3e3\\ub3e5\\ub3e6\\ub3e7\\ub3e9\\ub3ea\\ub3eb\\ub3ec\\ub3ed\\ub3ee\\ub3ef\\ub3f0\\ub3f1\\ub3f2\\ub3f3\\ub3f4\\ub3f5\\ub3f6\\ub3f7\\ub3f8\\ub3f9\\ub3fa\\ub3fb\\ub3fd\\ub3fe\\ub3ff\\ub400\\ub401\\ub402\\ub403\\ub404\\ub405\\ub406\\ub407\\ub408\\ub409\\ub40a\\ub40b\\ub40c\\ub40d\\ub40e\\ub40f\\ub411\\ub412\\ub413\\ub414\\ub415\\ub416\\ub417\\ub419\\ub41a\\ub41b\\ub41d\\ub41e\\ub41f\\ub421\\ub422\\ub423\\ub424\\ub425\\ub426\\ub427\\ub42a\\ub42c\\ub42d\\ub42e\\ub42f\\ub430\\ub431\\ub432\\ub433\\ub435\\ub436\\ub437\\ub438\\ub439\\ub43a\\ub43b\\ub43c\\ub43d\\ub43e\\ub43f\\ub440\\ub441\\ub442\\ub443\\ub444\\ufffd\".split(\"\"),e=0;e!=r[137].length;++e)65533!==r[137][e].charCodeAt(0)&&(n[r[137][e]]=35072+e,t[35072+e]=r[137][e]);for(r[138]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub445\\ub446\\ub447\\ub448\\ub449\\ub44a\\ub44b\\ub44c\\ub44d\\ub44e\\ub44f\\ub452\\ub453\\ub455\\ub456\\ub457\\ub459\\ub45a\\ub45b\\ub45c\\ub45d\\ub45e\\ub45f\\ub462\\ub464\\ub466\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub467\\ub468\\ub469\\ub46a\\ub46b\\ub46d\\ub46e\\ub46f\\ub470\\ub471\\ub472\\ub473\\ub474\\ub475\\ub476\\ub477\\ub478\\ub479\\ub47a\\ub47b\\ub47c\\ub47d\\ub47e\\ub47f\\ub481\\ub482\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub483\\ub484\\ub485\\ub486\\ub487\\ub489\\ub48a\\ub48b\\ub48c\\ub48d\\ub48e\\ub48f\\ub490\\ub491\\ub492\\ub493\\ub494\\ub495\\ub496\\ub497\\ub498\\ub499\\ub49a\\ub49b\\ub49c\\ub49e\\ub49f\\ub4a0\\ub4a1\\ub4a2\\ub4a3\\ub4a5\\ub4a6\\ub4a7\\ub4a9\\ub4aa\\ub4ab\\ub4ad\\ub4ae\\ub4af\\ub4b0\\ub4b1\\ub4b2\\ub4b3\\ub4b4\\ub4b6\\ub4b8\\ub4ba\\ub4bb\\ub4bc\\ub4bd\\ub4be\\ub4bf\\ub4c1\\ub4c2\\ub4c3\\ub4c5\\ub4c6\\ub4c7\\ub4c9\\ub4ca\\ub4cb\\ub4cc\\ub4cd\\ub4ce\\ub4cf\\ub4d1\\ub4d2\\ub4d3\\ub4d4\\ub4d6\\ub4d7\\ub4d8\\ub4d9\\ub4da\\ub4db\\ub4de\\ub4df\\ub4e1\\ub4e2\\ub4e5\\ub4e7\\ub4e8\\ub4e9\\ub4ea\\ub4eb\\ub4ee\\ub4f0\\ub4f2\\ub4f3\\ub4f4\\ub4f5\\ub4f6\\ub4f7\\ub4f9\\ub4fa\\ub4fb\\ub4fc\\ub4fd\\ub4fe\\ub4ff\\ub500\\ub501\\ub502\\ub503\\ub504\\ub505\\ub506\\ub507\\ub508\\ub509\\ub50a\\ub50b\\ub50c\\ub50d\\ub50e\\ub50f\\ub510\\ub511\\ub512\\ub513\\ub516\\ub517\\ub519\\ub51a\\ub51d\\ufffd\".split(\"\"),e=0;e!=r[138].length;++e)65533!==r[138][e].charCodeAt(0)&&(n[r[138][e]]=35328+e,t[35328+e]=r[138][e]);for(r[139]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub51e\\ub51f\\ub520\\ub521\\ub522\\ub523\\ub526\\ub52b\\ub52c\\ub52d\\ub52e\\ub52f\\ub532\\ub533\\ub535\\ub536\\ub537\\ub539\\ub53a\\ub53b\\ub53c\\ub53d\\ub53e\\ub53f\\ub542\\ub546\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub547\\ub548\\ub549\\ub54a\\ub54e\\ub54f\\ub551\\ub552\\ub553\\ub555\\ub556\\ub557\\ub558\\ub559\\ub55a\\ub55b\\ub55e\\ub562\\ub563\\ub564\\ub565\\ub566\\ub567\\ub568\\ub569\\ub56a\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub56b\\ub56c\\ub56d\\ub56e\\ub56f\\ub570\\ub571\\ub572\\ub573\\ub574\\ub575\\ub576\\ub577\\ub578\\ub579\\ub57a\\ub57b\\ub57c\\ub57d\\ub57e\\ub57f\\ub580\\ub581\\ub582\\ub583\\ub584\\ub585\\ub586\\ub587\\ub588\\ub589\\ub58a\\ub58b\\ub58c\\ub58d\\ub58e\\ub58f\\ub590\\ub591\\ub592\\ub593\\ub594\\ub595\\ub596\\ub597\\ub598\\ub599\\ub59a\\ub59b\\ub59c\\ub59d\\ub59e\\ub59f\\ub5a2\\ub5a3\\ub5a5\\ub5a6\\ub5a7\\ub5a9\\ub5ac\\ub5ad\\ub5ae\\ub5af\\ub5b2\\ub5b6\\ub5b7\\ub5b8\\ub5b9\\ub5ba\\ub5be\\ub5bf\\ub5c1\\ub5c2\\ub5c3\\ub5c5\\ub5c6\\ub5c7\\ub5c8\\ub5c9\\ub5ca\\ub5cb\\ub5ce\\ub5d2\\ub5d3\\ub5d4\\ub5d5\\ub5d6\\ub5d7\\ub5d9\\ub5da\\ub5db\\ub5dc\\ub5dd\\ub5de\\ub5df\\ub5e0\\ub5e1\\ub5e2\\ub5e3\\ub5e4\\ub5e5\\ub5e6\\ub5e7\\ub5e8\\ub5e9\\ub5ea\\ub5eb\\ub5ed\\ub5ee\\ub5ef\\ub5f0\\ub5f1\\ub5f2\\ub5f3\\ub5f4\\ub5f5\\ub5f6\\ub5f7\\ub5f8\\ub5f9\\ub5fa\\ub5fb\\ub5fc\\ub5fd\\ub5fe\\ub5ff\\ufffd\".split(\"\"),e=0;e!=r[139].length;++e)65533!==r[139][e].charCodeAt(0)&&(n[r[139][e]]=35584+e,t[35584+e]=r[139][e]);for(r[140]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub600\\ub601\\ub602\\ub603\\ub604\\ub605\\ub606\\ub607\\ub608\\ub609\\ub60a\\ub60b\\ub60c\\ub60d\\ub60e\\ub60f\\ub612\\ub613\\ub615\\ub616\\ub617\\ub619\\ub61a\\ub61b\\ub61c\\ub61d\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub61e\\ub61f\\ub620\\ub621\\ub622\\ub623\\ub624\\ub626\\ub627\\ub628\\ub629\\ub62a\\ub62b\\ub62d\\ub62e\\ub62f\\ub630\\ub631\\ub632\\ub633\\ub635\\ub636\\ub637\\ub638\\ub639\\ub63a\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub63b\\ub63c\\ub63d\\ub63e\\ub63f\\ub640\\ub641\\ub642\\ub643\\ub644\\ub645\\ub646\\ub647\\ub649\\ub64a\\ub64b\\ub64c\\ub64d\\ub64e\\ub64f\\ub650\\ub651\\ub652\\ub653\\ub654\\ub655\\ub656\\ub657\\ub658\\ub659\\ub65a\\ub65b\\ub65c\\ub65d\\ub65e\\ub65f\\ub660\\ub661\\ub662\\ub663\\ub665\\ub666\\ub667\\ub669\\ub66a\\ub66b\\ub66c\\ub66d\\ub66e\\ub66f\\ub670\\ub671\\ub672\\ub673\\ub674\\ub675\\ub676\\ub677\\ub678\\ub679\\ub67a\\ub67b\\ub67c\\ub67d\\ub67e\\ub67f\\ub680\\ub681\\ub682\\ub683\\ub684\\ub685\\ub686\\ub687\\ub688\\ub689\\ub68a\\ub68b\\ub68c\\ub68d\\ub68e\\ub68f\\ub690\\ub691\\ub692\\ub693\\ub694\\ub695\\ub696\\ub697\\ub698\\ub699\\ub69a\\ub69b\\ub69e\\ub69f\\ub6a1\\ub6a2\\ub6a3\\ub6a5\\ub6a6\\ub6a7\\ub6a8\\ub6a9\\ub6aa\\ub6ad\\ub6ae\\ub6af\\ub6b0\\ub6b2\\ub6b3\\ub6b4\\ub6b5\\ub6b6\\ub6b7\\ub6b8\\ub6b9\\ub6ba\\ub6bb\\ub6bc\\ub6bd\\ub6be\\ub6bf\\ub6c0\\ub6c1\\ub6c2\\ufffd\".split(\"\"),e=0;e!=r[140].length;++e)65533!==r[140][e].charCodeAt(0)&&(n[r[140][e]]=35840+e,t[35840+e]=r[140][e]);for(r[141]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub6c3\\ub6c4\\ub6c5\\ub6c6\\ub6c7\\ub6c8\\ub6c9\\ub6ca\\ub6cb\\ub6cc\\ub6cd\\ub6ce\\ub6cf\\ub6d0\\ub6d1\\ub6d2\\ub6d3\\ub6d5\\ub6d6\\ub6d7\\ub6d8\\ub6d9\\ub6da\\ub6db\\ub6dc\\ub6dd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub6de\\ub6df\\ub6e0\\ub6e1\\ub6e2\\ub6e3\\ub6e4\\ub6e5\\ub6e6\\ub6e7\\ub6e8\\ub6e9\\ub6ea\\ub6eb\\ub6ec\\ub6ed\\ub6ee\\ub6ef\\ub6f1\\ub6f2\\ub6f3\\ub6f5\\ub6f6\\ub6f7\\ub6f9\\ub6fa\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub6fb\\ub6fc\\ub6fd\\ub6fe\\ub6ff\\ub702\\ub703\\ub704\\ub706\\ub707\\ub708\\ub709\\ub70a\\ub70b\\ub70c\\ub70d\\ub70e\\ub70f\\ub710\\ub711\\ub712\\ub713\\ub714\\ub715\\ub716\\ub717\\ub718\\ub719\\ub71a\\ub71b\\ub71c\\ub71d\\ub71e\\ub71f\\ub720\\ub721\\ub722\\ub723\\ub724\\ub725\\ub726\\ub727\\ub72a\\ub72b\\ub72d\\ub72e\\ub731\\ub732\\ub733\\ub734\\ub735\\ub736\\ub737\\ub73a\\ub73c\\ub73d\\ub73e\\ub73f\\ub740\\ub741\\ub742\\ub743\\ub745\\ub746\\ub747\\ub749\\ub74a\\ub74b\\ub74d\\ub74e\\ub74f\\ub750\\ub751\\ub752\\ub753\\ub756\\ub757\\ub758\\ub759\\ub75a\\ub75b\\ub75c\\ub75d\\ub75e\\ub75f\\ub761\\ub762\\ub763\\ub765\\ub766\\ub767\\ub769\\ub76a\\ub76b\\ub76c\\ub76d\\ub76e\\ub76f\\ub772\\ub774\\ub776\\ub777\\ub778\\ub779\\ub77a\\ub77b\\ub77e\\ub77f\\ub781\\ub782\\ub783\\ub785\\ub786\\ub787\\ub788\\ub789\\ub78a\\ub78b\\ub78e\\ub793\\ub794\\ub795\\ub79a\\ub79b\\ub79d\\ub79e\\ufffd\".split(\"\"),e=0;e!=r[141].length;++e)65533!==r[141][e].charCodeAt(0)&&(n[r[141][e]]=36096+e,t[36096+e]=r[141][e]);for(r[142]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub79f\\ub7a1\\ub7a2\\ub7a3\\ub7a4\\ub7a5\\ub7a6\\ub7a7\\ub7aa\\ub7ae\\ub7af\\ub7b0\\ub7b1\\ub7b2\\ub7b3\\ub7b6\\ub7b7\\ub7b9\\ub7ba\\ub7bb\\ub7bc\\ub7bd\\ub7be\\ub7bf\\ub7c0\\ub7c1\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub7c2\\ub7c3\\ub7c4\\ub7c5\\ub7c6\\ub7c8\\ub7ca\\ub7cb\\ub7cc\\ub7cd\\ub7ce\\ub7cf\\ub7d0\\ub7d1\\ub7d2\\ub7d3\\ub7d4\\ub7d5\\ub7d6\\ub7d7\\ub7d8\\ub7d9\\ub7da\\ub7db\\ub7dc\\ub7dd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub7de\\ub7df\\ub7e0\\ub7e1\\ub7e2\\ub7e3\\ub7e4\\ub7e5\\ub7e6\\ub7e7\\ub7e8\\ub7e9\\ub7ea\\ub7eb\\ub7ee\\ub7ef\\ub7f1\\ub7f2\\ub7f3\\ub7f5\\ub7f6\\ub7f7\\ub7f8\\ub7f9\\ub7fa\\ub7fb\\ub7fe\\ub802\\ub803\\ub804\\ub805\\ub806\\ub80a\\ub80b\\ub80d\\ub80e\\ub80f\\ub811\\ub812\\ub813\\ub814\\ub815\\ub816\\ub817\\ub81a\\ub81c\\ub81e\\ub81f\\ub820\\ub821\\ub822\\ub823\\ub826\\ub827\\ub829\\ub82a\\ub82b\\ub82d\\ub82e\\ub82f\\ub830\\ub831\\ub832\\ub833\\ub836\\ub83a\\ub83b\\ub83c\\ub83d\\ub83e\\ub83f\\ub841\\ub842\\ub843\\ub845\\ub846\\ub847\\ub848\\ub849\\ub84a\\ub84b\\ub84c\\ub84d\\ub84e\\ub84f\\ub850\\ub852\\ub854\\ub855\\ub856\\ub857\\ub858\\ub859\\ub85a\\ub85b\\ub85e\\ub85f\\ub861\\ub862\\ub863\\ub865\\ub866\\ub867\\ub868\\ub869\\ub86a\\ub86b\\ub86e\\ub870\\ub872\\ub873\\ub874\\ub875\\ub876\\ub877\\ub879\\ub87a\\ub87b\\ub87d\\ub87e\\ub87f\\ub880\\ub881\\ub882\\ub883\\ub884\\ufffd\".split(\"\"),e=0;e!=r[142].length;++e)65533!==r[142][e].charCodeAt(0)&&(n[r[142][e]]=36352+e,t[36352+e]=r[142][e]);for(r[143]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub885\\ub886\\ub887\\ub888\\ub889\\ub88a\\ub88b\\ub88c\\ub88e\\ub88f\\ub890\\ub891\\ub892\\ub893\\ub894\\ub895\\ub896\\ub897\\ub898\\ub899\\ub89a\\ub89b\\ub89c\\ub89d\\ub89e\\ub89f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub8a0\\ub8a1\\ub8a2\\ub8a3\\ub8a4\\ub8a5\\ub8a6\\ub8a7\\ub8a9\\ub8aa\\ub8ab\\ub8ac\\ub8ad\\ub8ae\\ub8af\\ub8b1\\ub8b2\\ub8b3\\ub8b5\\ub8b6\\ub8b7\\ub8b9\\ub8ba\\ub8bb\\ub8bc\\ub8bd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub8be\\ub8bf\\ub8c2\\ub8c4\\ub8c6\\ub8c7\\ub8c8\\ub8c9\\ub8ca\\ub8cb\\ub8cd\\ub8ce\\ub8cf\\ub8d1\\ub8d2\\ub8d3\\ub8d5\\ub8d6\\ub8d7\\ub8d8\\ub8d9\\ub8da\\ub8db\\ub8dc\\ub8de\\ub8e0\\ub8e2\\ub8e3\\ub8e4\\ub8e5\\ub8e6\\ub8e7\\ub8ea\\ub8eb\\ub8ed\\ub8ee\\ub8ef\\ub8f1\\ub8f2\\ub8f3\\ub8f4\\ub8f5\\ub8f6\\ub8f7\\ub8fa\\ub8fc\\ub8fe\\ub8ff\\ub900\\ub901\\ub902\\ub903\\ub905\\ub906\\ub907\\ub908\\ub909\\ub90a\\ub90b\\ub90c\\ub90d\\ub90e\\ub90f\\ub910\\ub911\\ub912\\ub913\\ub914\\ub915\\ub916\\ub917\\ub919\\ub91a\\ub91b\\ub91c\\ub91d\\ub91e\\ub91f\\ub921\\ub922\\ub923\\ub924\\ub925\\ub926\\ub927\\ub928\\ub929\\ub92a\\ub92b\\ub92c\\ub92d\\ub92e\\ub92f\\ub930\\ub931\\ub932\\ub933\\ub934\\ub935\\ub936\\ub937\\ub938\\ub939\\ub93a\\ub93b\\ub93e\\ub93f\\ub941\\ub942\\ub943\\ub945\\ub946\\ub947\\ub948\\ub949\\ub94a\\ub94b\\ub94d\\ub94e\\ub950\\ub952\\ub953\\ub954\\ub955\\ub956\\ub957\\ufffd\".split(\"\"),e=0;e!=r[143].length;++e)65533!==r[143][e].charCodeAt(0)&&(n[r[143][e]]=36608+e,t[36608+e]=r[143][e]);for(r[144]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub95a\\ub95b\\ub95d\\ub95e\\ub95f\\ub961\\ub962\\ub963\\ub964\\ub965\\ub966\\ub967\\ub96a\\ub96c\\ub96e\\ub96f\\ub970\\ub971\\ub972\\ub973\\ub976\\ub977\\ub979\\ub97a\\ub97b\\ub97d\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub97e\\ub97f\\ub980\\ub981\\ub982\\ub983\\ub986\\ub988\\ub98b\\ub98c\\ub98f\\ub990\\ub991\\ub992\\ub993\\ub994\\ub995\\ub996\\ub997\\ub998\\ub999\\ub99a\\ub99b\\ub99c\\ub99d\\ub99e\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ub99f\\ub9a0\\ub9a1\\ub9a2\\ub9a3\\ub9a4\\ub9a5\\ub9a6\\ub9a7\\ub9a8\\ub9a9\\ub9aa\\ub9ab\\ub9ae\\ub9af\\ub9b1\\ub9b2\\ub9b3\\ub9b5\\ub9b6\\ub9b7\\ub9b8\\ub9b9\\ub9ba\\ub9bb\\ub9be\\ub9c0\\ub9c2\\ub9c3\\ub9c4\\ub9c5\\ub9c6\\ub9c7\\ub9ca\\ub9cb\\ub9cd\\ub9d3\\ub9d4\\ub9d5\\ub9d6\\ub9d7\\ub9da\\ub9dc\\ub9df\\ub9e0\\ub9e2\\ub9e6\\ub9e7\\ub9e9\\ub9ea\\ub9eb\\ub9ed\\ub9ee\\ub9ef\\ub9f0\\ub9f1\\ub9f2\\ub9f3\\ub9f6\\ub9fb\\ub9fc\\ub9fd\\ub9fe\\ub9ff\\uba02\\uba03\\uba04\\uba05\\uba06\\uba07\\uba09\\uba0a\\uba0b\\uba0c\\uba0d\\uba0e\\uba0f\\uba10\\uba11\\uba12\\uba13\\uba14\\uba16\\uba17\\uba18\\uba19\\uba1a\\uba1b\\uba1c\\uba1d\\uba1e\\uba1f\\uba20\\uba21\\uba22\\uba23\\uba24\\uba25\\uba26\\uba27\\uba28\\uba29\\uba2a\\uba2b\\uba2c\\uba2d\\uba2e\\uba2f\\uba30\\uba31\\uba32\\uba33\\uba34\\uba35\\uba36\\uba37\\uba3a\\uba3b\\uba3d\\uba3e\\uba3f\\uba41\\uba43\\uba44\\uba45\\uba46\\ufffd\".split(\"\"),e=0;e!=r[144].length;++e)65533!==r[144][e].charCodeAt(0)&&(n[r[144][e]]=36864+e,t[36864+e]=r[144][e]);for(r[145]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uba47\\uba4a\\uba4c\\uba4f\\uba50\\uba51\\uba52\\uba56\\uba57\\uba59\\uba5a\\uba5b\\uba5d\\uba5e\\uba5f\\uba60\\uba61\\uba62\\uba63\\uba66\\uba6a\\uba6b\\uba6c\\uba6d\\uba6e\\uba6f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uba72\\uba73\\uba75\\uba76\\uba77\\uba79\\uba7a\\uba7b\\uba7c\\uba7d\\uba7e\\uba7f\\uba80\\uba81\\uba82\\uba86\\uba88\\uba89\\uba8a\\uba8b\\uba8d\\uba8e\\uba8f\\uba90\\uba91\\uba92\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uba93\\uba94\\uba95\\uba96\\uba97\\uba98\\uba99\\uba9a\\uba9b\\uba9c\\uba9d\\uba9e\\uba9f\\ubaa0\\ubaa1\\ubaa2\\ubaa3\\ubaa4\\ubaa5\\ubaa6\\ubaa7\\ubaaa\\ubaad\\ubaae\\ubaaf\\ubab1\\ubab3\\ubab4\\ubab5\\ubab6\\ubab7\\ubaba\\ubabc\\ubabe\\ubabf\\ubac0\\ubac1\\ubac2\\ubac3\\ubac5\\ubac6\\ubac7\\ubac9\\ubaca\\ubacb\\ubacc\\ubacd\\ubace\\ubacf\\ubad0\\ubad1\\ubad2\\ubad3\\ubad4\\ubad5\\ubad6\\ubad7\\ubada\\ubadb\\ubadc\\ubadd\\ubade\\ubadf\\ubae0\\ubae1\\ubae2\\ubae3\\ubae4\\ubae5\\ubae6\\ubae7\\ubae8\\ubae9\\ubaea\\ubaeb\\ubaec\\ubaed\\ubaee\\ubaef\\ubaf0\\ubaf1\\ubaf2\\ubaf3\\ubaf4\\ubaf5\\ubaf6\\ubaf7\\ubaf8\\ubaf9\\ubafa\\ubafb\\ubafd\\ubafe\\ubaff\\ubb01\\ubb02\\ubb03\\ubb05\\ubb06\\ubb07\\ubb08\\ubb09\\ubb0a\\ubb0b\\ubb0c\\ubb0e\\ubb10\\ubb12\\ubb13\\ubb14\\ubb15\\ubb16\\ubb17\\ubb19\\ubb1a\\ubb1b\\ubb1d\\ubb1e\\ubb1f\\ubb21\\ubb22\\ubb23\\ubb24\\ubb25\\ubb26\\ubb27\\ufffd\".split(\"\"),e=0;e!=r[145].length;++e)65533!==r[145][e].charCodeAt(0)&&(n[r[145][e]]=37120+e,t[37120+e]=r[145][e]);for(r[146]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ubb28\\ubb2a\\ubb2c\\ubb2d\\ubb2e\\ubb2f\\ubb30\\ubb31\\ubb32\\ubb33\\ubb37\\ubb39\\ubb3a\\ubb3f\\ubb40\\ubb41\\ubb42\\ubb43\\ubb46\\ubb48\\ubb4a\\ubb4b\\ubb4c\\ubb4e\\ubb51\\ubb52\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ubb53\\ubb55\\ubb56\\ubb57\\ubb59\\ubb5a\\ubb5b\\ubb5c\\ubb5d\\ubb5e\\ubb5f\\ubb60\\ubb62\\ubb64\\ubb65\\ubb66\\ubb67\\ubb68\\ubb69\\ubb6a\\ubb6b\\ubb6d\\ubb6e\\ubb6f\\ubb70\\ubb71\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ubb72\\ubb73\\ubb74\\ubb75\\ubb76\\ubb77\\ubb78\\ubb79\\ubb7a\\ubb7b\\ubb7c\\ubb7d\\ubb7e\\ubb7f\\ubb80\\ubb81\\ubb82\\ubb83\\ubb84\\ubb85\\ubb86\\ubb87\\ubb89\\ubb8a\\ubb8b\\ubb8d\\ubb8e\\ubb8f\\ubb91\\ubb92\\ubb93\\ubb94\\ubb95\\ubb96\\ubb97\\ubb98\\ubb99\\ubb9a\\ubb9b\\ubb9c\\ubb9d\\ubb9e\\ubb9f\\ubba0\\ubba1\\ubba2\\ubba3\\ubba5\\ubba6\\ubba7\\ubba9\\ubbaa\\ubbab\\ubbad\\ubbae\\ubbaf\\ubbb0\\ubbb1\\ubbb2\\ubbb3\\ubbb5\\ubbb6\\ubbb8\\ubbb9\\ubbba\\ubbbb\\ubbbc\\ubbbd\\ubbbe\\ubbbf\\ubbc1\\ubbc2\\ubbc3\\ubbc5\\ubbc6\\ubbc7\\ubbc9\\ubbca\\ubbcb\\ubbcc\\ubbcd\\ubbce\\ubbcf\\ubbd1\\ubbd2\\ubbd4\\ubbd5\\ubbd6\\ubbd7\\ubbd8\\ubbd9\\ubbda\\ubbdb\\ubbdc\\ubbdd\\ubbde\\ubbdf\\ubbe0\\ubbe1\\ubbe2\\ubbe3\\ubbe4\\ubbe5\\ubbe6\\ubbe7\\ubbe8\\ubbe9\\ubbea\\ubbeb\\ubbec\\ubbed\\ubbee\\ubbef\\ubbf0\\ubbf1\\ubbf2\\ubbf3\\ubbf4\\ubbf5\\ubbf6\\ubbf7\\ubbfa\\ubbfb\\ubbfd\\ubbfe\\ubc01\\ufffd\".split(\"\"),e=0;e!=r[146].length;++e)65533!==r[146][e].charCodeAt(0)&&(n[r[146][e]]=37376+e,t[37376+e]=r[146][e]);for(r[147]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ubc03\\ubc04\\ubc05\\ubc06\\ubc07\\ubc0a\\ubc0e\\ubc10\\ubc12\\ubc13\\ubc19\\ubc1a\\ubc20\\ubc21\\ubc22\\ubc23\\ubc26\\ubc28\\ubc2a\\ubc2b\\ubc2c\\ubc2e\\ubc2f\\ubc32\\ubc33\\ubc35\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ubc36\\ubc37\\ubc39\\ubc3a\\ubc3b\\ubc3c\\ubc3d\\ubc3e\\ubc3f\\ubc42\\ubc46\\ubc47\\ubc48\\ubc4a\\ubc4b\\ubc4e\\ubc4f\\ubc51\\ubc52\\ubc53\\ubc54\\ubc55\\ubc56\\ubc57\\ubc58\\ubc59\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ubc5a\\ubc5b\\ubc5c\\ubc5e\\ubc5f\\ubc60\\ubc61\\ubc62\\ubc63\\ubc64\\ubc65\\ubc66\\ubc67\\ubc68\\ubc69\\ubc6a\\ubc6b\\ubc6c\\ubc6d\\ubc6e\\ubc6f\\ubc70\\ubc71\\ubc72\\ubc73\\ubc74\\ubc75\\ubc76\\ubc77\\ubc78\\ubc79\\ubc7a\\ubc7b\\ubc7c\\ubc7d\\ubc7e\\ubc7f\\ubc80\\ubc81\\ubc82\\ubc83\\ubc86\\ubc87\\ubc89\\ubc8a\\ubc8d\\ubc8f\\ubc90\\ubc91\\ubc92\\ubc93\\ubc96\\ubc98\\ubc9b\\ubc9c\\ubc9d\\ubc9e\\ubc9f\\ubca2\\ubca3\\ubca5\\ubca6\\ubca9\\ubcaa\\ubcab\\ubcac\\ubcad\\ubcae\\ubcaf\\ubcb2\\ubcb6\\ubcb7\\ubcb8\\ubcb9\\ubcba\\ubcbb\\ubcbe\\ubcbf\\ubcc1\\ubcc2\\ubcc3\\ubcc5\\ubcc6\\ubcc7\\ubcc8\\ubcc9\\ubcca\\ubccb\\ubccc\\ubcce\\ubcd2\\ubcd3\\ubcd4\\ubcd6\\ubcd7\\ubcd9\\ubcda\\ubcdb\\ubcdd\\ubcde\\ubcdf\\ubce0\\ubce1\\ubce2\\ubce3\\ubce4\\ubce5\\ubce6\\ubce7\\ubce8\\ubce9\\ubcea\\ubceb\\ubcec\\ubced\\ubcee\\ubcef\\ubcf0\\ubcf1\\ubcf2\\ubcf3\\ubcf7\\ubcf9\\ubcfa\\ubcfb\\ubcfd\\ufffd\".split(\"\"),e=0;e!=r[147].length;++e)65533!==r[147][e].charCodeAt(0)&&(n[r[147][e]]=37632+e,t[37632+e]=r[147][e]);for(r[148]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ubcfe\\ubcff\\ubd00\\ubd01\\ubd02\\ubd03\\ubd06\\ubd08\\ubd0a\\ubd0b\\ubd0c\\ubd0d\\ubd0e\\ubd0f\\ubd11\\ubd12\\ubd13\\ubd15\\ubd16\\ubd17\\ubd18\\ubd19\\ubd1a\\ubd1b\\ubd1c\\ubd1d\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ubd1e\\ubd1f\\ubd20\\ubd21\\ubd22\\ubd23\\ubd25\\ubd26\\ubd27\\ubd28\\ubd29\\ubd2a\\ubd2b\\ubd2d\\ubd2e\\ubd2f\\ubd30\\ubd31\\ubd32\\ubd33\\ubd34\\ubd35\\ubd36\\ubd37\\ubd38\\ubd39\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ubd3a\\ubd3b\\ubd3c\\ubd3d\\ubd3e\\ubd3f\\ubd41\\ubd42\\ubd43\\ubd44\\ubd45\\ubd46\\ubd47\\ubd4a\\ubd4b\\ubd4d\\ubd4e\\ubd4f\\ubd51\\ubd52\\ubd53\\ubd54\\ubd55\\ubd56\\ubd57\\ubd5a\\ubd5b\\ubd5c\\ubd5d\\ubd5e\\ubd5f\\ubd60\\ubd61\\ubd62\\ubd63\\ubd65\\ubd66\\ubd67\\ubd69\\ubd6a\\ubd6b\\ubd6c\\ubd6d\\ubd6e\\ubd6f\\ubd70\\ubd71\\ubd72\\ubd73\\ubd74\\ubd75\\ubd76\\ubd77\\ubd78\\ubd79\\ubd7a\\ubd7b\\ubd7c\\ubd7d\\ubd7e\\ubd7f\\ubd82\\ubd83\\ubd85\\ubd86\\ubd8b\\ubd8c\\ubd8d\\ubd8e\\ubd8f\\ubd92\\ubd94\\ubd96\\ubd97\\ubd98\\ubd9b\\ubd9d\\ubd9e\\ubd9f\\ubda0\\ubda1\\ubda2\\ubda3\\ubda5\\ubda6\\ubda7\\ubda8\\ubda9\\ubdaa\\ubdab\\ubdac\\ubdad\\ubdae\\ubdaf\\ubdb1\\ubdb2\\ubdb3\\ubdb4\\ubdb5\\ubdb6\\ubdb7\\ubdb9\\ubdba\\ubdbb\\ubdbc\\ubdbd\\ubdbe\\ubdbf\\ubdc0\\ubdc1\\ubdc2\\ubdc3\\ubdc4\\ubdc5\\ubdc6\\ubdc7\\ubdc8\\ubdc9\\ubdca\\ubdcb\\ubdcc\\ubdcd\\ubdce\\ubdcf\\ubdd0\\ubdd1\\ufffd\".split(\"\"),e=0;e!=r[148].length;++e)65533!==r[148][e].charCodeAt(0)&&(n[r[148][e]]=37888+e,t[37888+e]=r[148][e]);for(r[149]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ubdd2\\ubdd3\\ubdd6\\ubdd7\\ubdd9\\ubdda\\ubddb\\ubddd\\ubdde\\ubddf\\ubde0\\ubde1\\ubde2\\ubde3\\ubde4\\ubde5\\ubde6\\ubde7\\ubde8\\ubdea\\ubdeb\\ubdec\\ubded\\ubdee\\ubdef\\ubdf1\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ubdf2\\ubdf3\\ubdf5\\ubdf6\\ubdf7\\ubdf9\\ubdfa\\ubdfb\\ubdfc\\ubdfd\\ubdfe\\ubdff\\ube01\\ube02\\ube04\\ube06\\ube07\\ube08\\ube09\\ube0a\\ube0b\\ube0e\\ube0f\\ube11\\ube12\\ube13\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ube15\\ube16\\ube17\\ube18\\ube19\\ube1a\\ube1b\\ube1e\\ube20\\ube21\\ube22\\ube23\\ube24\\ube25\\ube26\\ube27\\ube28\\ube29\\ube2a\\ube2b\\ube2c\\ube2d\\ube2e\\ube2f\\ube30\\ube31\\ube32\\ube33\\ube34\\ube35\\ube36\\ube37\\ube38\\ube39\\ube3a\\ube3b\\ube3c\\ube3d\\ube3e\\ube3f\\ube40\\ube41\\ube42\\ube43\\ube46\\ube47\\ube49\\ube4a\\ube4b\\ube4d\\ube4f\\ube50\\ube51\\ube52\\ube53\\ube56\\ube58\\ube5c\\ube5d\\ube5e\\ube5f\\ube62\\ube63\\ube65\\ube66\\ube67\\ube69\\ube6b\\ube6c\\ube6d\\ube6e\\ube6f\\ube72\\ube76\\ube77\\ube78\\ube79\\ube7a\\ube7e\\ube7f\\ube81\\ube82\\ube83\\ube85\\ube86\\ube87\\ube88\\ube89\\ube8a\\ube8b\\ube8e\\ube92\\ube93\\ube94\\ube95\\ube96\\ube97\\ube9a\\ube9b\\ube9c\\ube9d\\ube9e\\ube9f\\ubea0\\ubea1\\ubea2\\ubea3\\ubea4\\ubea5\\ubea6\\ubea7\\ubea9\\ubeaa\\ubeab\\ubeac\\ubead\\ubeae\\ubeaf\\ubeb0\\ubeb1\\ubeb2\\ubeb3\\ubeb4\\ubeb5\\ubeb6\\ubeb7\\ufffd\".split(\"\"),e=0;e!=r[149].length;++e)65533!==r[149][e].charCodeAt(0)&&(n[r[149][e]]=38144+e,t[38144+e]=r[149][e]);for(r[150]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ubeb8\\ubeb9\\ubeba\\ubebb\\ubebc\\ubebd\\ubebe\\ubebf\\ubec0\\ubec1\\ubec2\\ubec3\\ubec4\\ubec5\\ubec6\\ubec7\\ubec8\\ubec9\\ubeca\\ubecb\\ubecc\\ubecd\\ubece\\ubecf\\ubed2\\ubed3\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ubed5\\ubed6\\ubed9\\ubeda\\ubedb\\ubedc\\ubedd\\ubede\\ubedf\\ubee1\\ubee2\\ubee6\\ubee7\\ubee8\\ubee9\\ubeea\\ubeeb\\ubeed\\ubeee\\ubeef\\ubef0\\ubef1\\ubef2\\ubef3\\ubef4\\ubef5\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ubef6\\ubef7\\ubef8\\ubef9\\ubefa\\ubefb\\ubefc\\ubefd\\ubefe\\ubeff\\ubf00\\ubf02\\ubf03\\ubf04\\ubf05\\ubf06\\ubf07\\ubf0a\\ubf0b\\ubf0c\\ubf0d\\ubf0e\\ubf0f\\ubf10\\ubf11\\ubf12\\ubf13\\ubf14\\ubf15\\ubf16\\ubf17\\ubf1a\\ubf1e\\ubf1f\\ubf20\\ubf21\\ubf22\\ubf23\\ubf24\\ubf25\\ubf26\\ubf27\\ubf28\\ubf29\\ubf2a\\ubf2b\\ubf2c\\ubf2d\\ubf2e\\ubf2f\\ubf30\\ubf31\\ubf32\\ubf33\\ubf34\\ubf35\\ubf36\\ubf37\\ubf38\\ubf39\\ubf3a\\ubf3b\\ubf3c\\ubf3d\\ubf3e\\ubf3f\\ubf42\\ubf43\\ubf45\\ubf46\\ubf47\\ubf49\\ubf4a\\ubf4b\\ubf4c\\ubf4d\\ubf4e\\ubf4f\\ubf52\\ubf53\\ubf54\\ubf56\\ubf57\\ubf58\\ubf59\\ubf5a\\ubf5b\\ubf5c\\ubf5d\\ubf5e\\ubf5f\\ubf60\\ubf61\\ubf62\\ubf63\\ubf64\\ubf65\\ubf66\\ubf67\\ubf68\\ubf69\\ubf6a\\ubf6b\\ubf6c\\ubf6d\\ubf6e\\ubf6f\\ubf70\\ubf71\\ubf72\\ubf73\\ubf74\\ubf75\\ubf76\\ubf77\\ubf78\\ubf79\\ubf7a\\ubf7b\\ubf7c\\ubf7d\\ubf7e\\ubf7f\\ubf80\\ubf81\\ubf82\\ufffd\".split(\"\"),e=0;e!=r[150].length;++e)65533!==r[150][e].charCodeAt(0)&&(n[r[150][e]]=38400+e,t[38400+e]=r[150][e]);for(r[151]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ubf83\\ubf84\\ubf85\\ubf86\\ubf87\\ubf88\\ubf89\\ubf8a\\ubf8b\\ubf8c\\ubf8d\\ubf8e\\ubf8f\\ubf90\\ubf91\\ubf92\\ubf93\\ubf95\\ubf96\\ubf97\\ubf98\\ubf99\\ubf9a\\ubf9b\\ubf9c\\ubf9d\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ubf9e\\ubf9f\\ubfa0\\ubfa1\\ubfa2\\ubfa3\\ubfa4\\ubfa5\\ubfa6\\ubfa7\\ubfa8\\ubfa9\\ubfaa\\ubfab\\ubfac\\ubfad\\ubfae\\ubfaf\\ubfb1\\ubfb2\\ubfb3\\ubfb4\\ubfb5\\ubfb6\\ubfb7\\ubfb8\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ubfb9\\ubfba\\ubfbb\\ubfbc\\ubfbd\\ubfbe\\ubfbf\\ubfc0\\ubfc1\\ubfc2\\ubfc3\\ubfc4\\ubfc6\\ubfc7\\ubfc8\\ubfc9\\ubfca\\ubfcb\\ubfce\\ubfcf\\ubfd1\\ubfd2\\ubfd3\\ubfd5\\ubfd6\\ubfd7\\ubfd8\\ubfd9\\ubfda\\ubfdb\\ubfdd\\ubfde\\ubfe0\\ubfe2\\ubfe3\\ubfe4\\ubfe5\\ubfe6\\ubfe7\\ubfe8\\ubfe9\\ubfea\\ubfeb\\ubfec\\ubfed\\ubfee\\ubfef\\ubff0\\ubff1\\ubff2\\ubff3\\ubff4\\ubff5\\ubff6\\ubff7\\ubff8\\ubff9\\ubffa\\ubffb\\ubffc\\ubffd\\ubffe\\ubfff\\uc000\\uc001\\uc002\\uc003\\uc004\\uc005\\uc006\\uc007\\uc008\\uc009\\uc00a\\uc00b\\uc00c\\uc00d\\uc00e\\uc00f\\uc010\\uc011\\uc012\\uc013\\uc014\\uc015\\uc016\\uc017\\uc018\\uc019\\uc01a\\uc01b\\uc01c\\uc01d\\uc01e\\uc01f\\uc020\\uc021\\uc022\\uc023\\uc024\\uc025\\uc026\\uc027\\uc028\\uc029\\uc02a\\uc02b\\uc02c\\uc02d\\uc02e\\uc02f\\uc030\\uc031\\uc032\\uc033\\uc034\\uc035\\uc036\\uc037\\uc038\\uc039\\uc03a\\uc03b\\uc03d\\uc03e\\uc03f\\ufffd\".split(\"\"),e=0;e!=r[151].length;++e)65533!==r[151][e].charCodeAt(0)&&(n[r[151][e]]=38656+e,t[38656+e]=r[151][e]);for(r[152]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc040\\uc041\\uc042\\uc043\\uc044\\uc045\\uc046\\uc047\\uc048\\uc049\\uc04a\\uc04b\\uc04c\\uc04d\\uc04e\\uc04f\\uc050\\uc052\\uc053\\uc054\\uc055\\uc056\\uc057\\uc059\\uc05a\\uc05b\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc05d\\uc05e\\uc05f\\uc061\\uc062\\uc063\\uc064\\uc065\\uc066\\uc067\\uc06a\\uc06b\\uc06c\\uc06d\\uc06e\\uc06f\\uc070\\uc071\\uc072\\uc073\\uc074\\uc075\\uc076\\uc077\\uc078\\uc079\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc07a\\uc07b\\uc07c\\uc07d\\uc07e\\uc07f\\uc080\\uc081\\uc082\\uc083\\uc084\\uc085\\uc086\\uc087\\uc088\\uc089\\uc08a\\uc08b\\uc08c\\uc08d\\uc08e\\uc08f\\uc092\\uc093\\uc095\\uc096\\uc097\\uc099\\uc09a\\uc09b\\uc09c\\uc09d\\uc09e\\uc09f\\uc0a2\\uc0a4\\uc0a6\\uc0a7\\uc0a8\\uc0a9\\uc0aa\\uc0ab\\uc0ae\\uc0b1\\uc0b2\\uc0b7\\uc0b8\\uc0b9\\uc0ba\\uc0bb\\uc0be\\uc0c2\\uc0c3\\uc0c4\\uc0c6\\uc0c7\\uc0ca\\uc0cb\\uc0cd\\uc0ce\\uc0cf\\uc0d1\\uc0d2\\uc0d3\\uc0d4\\uc0d5\\uc0d6\\uc0d7\\uc0da\\uc0de\\uc0df\\uc0e0\\uc0e1\\uc0e2\\uc0e3\\uc0e6\\uc0e7\\uc0e9\\uc0ea\\uc0eb\\uc0ed\\uc0ee\\uc0ef\\uc0f0\\uc0f1\\uc0f2\\uc0f3\\uc0f6\\uc0f8\\uc0fa\\uc0fb\\uc0fc\\uc0fd\\uc0fe\\uc0ff\\uc101\\uc102\\uc103\\uc105\\uc106\\uc107\\uc109\\uc10a\\uc10b\\uc10c\\uc10d\\uc10e\\uc10f\\uc111\\uc112\\uc113\\uc114\\uc116\\uc117\\uc118\\uc119\\uc11a\\uc11b\\uc121\\uc122\\uc125\\uc128\\uc129\\uc12a\\uc12b\\uc12e\\ufffd\".split(\"\"),e=0;e!=r[152].length;++e)65533!==r[152][e].charCodeAt(0)&&(n[r[152][e]]=38912+e,t[38912+e]=r[152][e]);for(r[153]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc132\\uc133\\uc134\\uc135\\uc137\\uc13a\\uc13b\\uc13d\\uc13e\\uc13f\\uc141\\uc142\\uc143\\uc144\\uc145\\uc146\\uc147\\uc14a\\uc14e\\uc14f\\uc150\\uc151\\uc152\\uc153\\uc156\\uc157\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc159\\uc15a\\uc15b\\uc15d\\uc15e\\uc15f\\uc160\\uc161\\uc162\\uc163\\uc166\\uc16a\\uc16b\\uc16c\\uc16d\\uc16e\\uc16f\\uc171\\uc172\\uc173\\uc175\\uc176\\uc177\\uc179\\uc17a\\uc17b\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc17c\\uc17d\\uc17e\\uc17f\\uc180\\uc181\\uc182\\uc183\\uc184\\uc186\\uc187\\uc188\\uc189\\uc18a\\uc18b\\uc18f\\uc191\\uc192\\uc193\\uc195\\uc197\\uc198\\uc199\\uc19a\\uc19b\\uc19e\\uc1a0\\uc1a2\\uc1a3\\uc1a4\\uc1a6\\uc1a7\\uc1aa\\uc1ab\\uc1ad\\uc1ae\\uc1af\\uc1b1\\uc1b2\\uc1b3\\uc1b4\\uc1b5\\uc1b6\\uc1b7\\uc1b8\\uc1b9\\uc1ba\\uc1bb\\uc1bc\\uc1be\\uc1bf\\uc1c0\\uc1c1\\uc1c2\\uc1c3\\uc1c5\\uc1c6\\uc1c7\\uc1c9\\uc1ca\\uc1cb\\uc1cd\\uc1ce\\uc1cf\\uc1d0\\uc1d1\\uc1d2\\uc1d3\\uc1d5\\uc1d6\\uc1d9\\uc1da\\uc1db\\uc1dc\\uc1dd\\uc1de\\uc1df\\uc1e1\\uc1e2\\uc1e3\\uc1e5\\uc1e6\\uc1e7\\uc1e9\\uc1ea\\uc1eb\\uc1ec\\uc1ed\\uc1ee\\uc1ef\\uc1f2\\uc1f4\\uc1f5\\uc1f6\\uc1f7\\uc1f8\\uc1f9\\uc1fa\\uc1fb\\uc1fe\\uc1ff\\uc201\\uc202\\uc203\\uc205\\uc206\\uc207\\uc208\\uc209\\uc20a\\uc20b\\uc20e\\uc210\\uc212\\uc213\\uc214\\uc215\\uc216\\uc217\\uc21a\\uc21b\\uc21d\\uc21e\\uc221\\uc222\\uc223\\ufffd\".split(\"\"),e=0;e!=r[153].length;++e)65533!==r[153][e].charCodeAt(0)&&(n[r[153][e]]=39168+e,t[39168+e]=r[153][e]);for(r[154]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc224\\uc225\\uc226\\uc227\\uc22a\\uc22c\\uc22e\\uc230\\uc233\\uc235\\uc236\\uc237\\uc238\\uc239\\uc23a\\uc23b\\uc23c\\uc23d\\uc23e\\uc23f\\uc240\\uc241\\uc242\\uc243\\uc244\\uc245\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc246\\uc247\\uc249\\uc24a\\uc24b\\uc24c\\uc24d\\uc24e\\uc24f\\uc252\\uc253\\uc255\\uc256\\uc257\\uc259\\uc25a\\uc25b\\uc25c\\uc25d\\uc25e\\uc25f\\uc261\\uc262\\uc263\\uc264\\uc266\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc267\\uc268\\uc269\\uc26a\\uc26b\\uc26e\\uc26f\\uc271\\uc272\\uc273\\uc275\\uc276\\uc277\\uc278\\uc279\\uc27a\\uc27b\\uc27e\\uc280\\uc282\\uc283\\uc284\\uc285\\uc286\\uc287\\uc28a\\uc28b\\uc28c\\uc28d\\uc28e\\uc28f\\uc291\\uc292\\uc293\\uc294\\uc295\\uc296\\uc297\\uc299\\uc29a\\uc29c\\uc29e\\uc29f\\uc2a0\\uc2a1\\uc2a2\\uc2a3\\uc2a6\\uc2a7\\uc2a9\\uc2aa\\uc2ab\\uc2ae\\uc2af\\uc2b0\\uc2b1\\uc2b2\\uc2b3\\uc2b6\\uc2b8\\uc2ba\\uc2bb\\uc2bc\\uc2bd\\uc2be\\uc2bf\\uc2c0\\uc2c1\\uc2c2\\uc2c3\\uc2c4\\uc2c5\\uc2c6\\uc2c7\\uc2c8\\uc2c9\\uc2ca\\uc2cb\\uc2cc\\uc2cd\\uc2ce\\uc2cf\\uc2d0\\uc2d1\\uc2d2\\uc2d3\\uc2d4\\uc2d5\\uc2d6\\uc2d7\\uc2d8\\uc2d9\\uc2da\\uc2db\\uc2de\\uc2df\\uc2e1\\uc2e2\\uc2e5\\uc2e6\\uc2e7\\uc2e8\\uc2e9\\uc2ea\\uc2ee\\uc2f0\\uc2f2\\uc2f3\\uc2f4\\uc2f5\\uc2f7\\uc2fa\\uc2fd\\uc2fe\\uc2ff\\uc301\\uc302\\uc303\\uc304\\uc305\\uc306\\uc307\\uc30a\\uc30b\\uc30e\\uc30f\\ufffd\".split(\"\"),e=0;e!=r[154].length;++e)65533!==r[154][e].charCodeAt(0)&&(n[r[154][e]]=39424+e,t[39424+e]=r[154][e]);for(r[155]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc310\\uc311\\uc312\\uc316\\uc317\\uc319\\uc31a\\uc31b\\uc31d\\uc31e\\uc31f\\uc320\\uc321\\uc322\\uc323\\uc326\\uc327\\uc32a\\uc32b\\uc32c\\uc32d\\uc32e\\uc32f\\uc330\\uc331\\uc332\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc333\\uc334\\uc335\\uc336\\uc337\\uc338\\uc339\\uc33a\\uc33b\\uc33c\\uc33d\\uc33e\\uc33f\\uc340\\uc341\\uc342\\uc343\\uc344\\uc346\\uc347\\uc348\\uc349\\uc34a\\uc34b\\uc34c\\uc34d\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc34e\\uc34f\\uc350\\uc351\\uc352\\uc353\\uc354\\uc355\\uc356\\uc357\\uc358\\uc359\\uc35a\\uc35b\\uc35c\\uc35d\\uc35e\\uc35f\\uc360\\uc361\\uc362\\uc363\\uc364\\uc365\\uc366\\uc367\\uc36a\\uc36b\\uc36d\\uc36e\\uc36f\\uc371\\uc373\\uc374\\uc375\\uc376\\uc377\\uc37a\\uc37b\\uc37e\\uc37f\\uc380\\uc381\\uc382\\uc383\\uc385\\uc386\\uc387\\uc389\\uc38a\\uc38b\\uc38d\\uc38e\\uc38f\\uc390\\uc391\\uc392\\uc393\\uc394\\uc395\\uc396\\uc397\\uc398\\uc399\\uc39a\\uc39b\\uc39c\\uc39d\\uc39e\\uc39f\\uc3a0\\uc3a1\\uc3a2\\uc3a3\\uc3a4\\uc3a5\\uc3a6\\uc3a7\\uc3a8\\uc3a9\\uc3aa\\uc3ab\\uc3ac\\uc3ad\\uc3ae\\uc3af\\uc3b0\\uc3b1\\uc3b2\\uc3b3\\uc3b4\\uc3b5\\uc3b6\\uc3b7\\uc3b8\\uc3b9\\uc3ba\\uc3bb\\uc3bc\\uc3bd\\uc3be\\uc3bf\\uc3c1\\uc3c2\\uc3c3\\uc3c4\\uc3c5\\uc3c6\\uc3c7\\uc3c8\\uc3c9\\uc3ca\\uc3cb\\uc3cc\\uc3cd\\uc3ce\\uc3cf\\uc3d0\\uc3d1\\uc3d2\\uc3d3\\uc3d4\\uc3d5\\uc3d6\\uc3d7\\uc3da\\ufffd\".split(\"\"),e=0;e!=r[155].length;++e)65533!==r[155][e].charCodeAt(0)&&(n[r[155][e]]=39680+e,t[39680+e]=r[155][e]);for(r[156]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc3db\\uc3dd\\uc3de\\uc3e1\\uc3e3\\uc3e4\\uc3e5\\uc3e6\\uc3e7\\uc3ea\\uc3eb\\uc3ec\\uc3ee\\uc3ef\\uc3f0\\uc3f1\\uc3f2\\uc3f3\\uc3f6\\uc3f7\\uc3f9\\uc3fa\\uc3fb\\uc3fc\\uc3fd\\uc3fe\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc3ff\\uc400\\uc401\\uc402\\uc403\\uc404\\uc405\\uc406\\uc407\\uc409\\uc40a\\uc40b\\uc40c\\uc40d\\uc40e\\uc40f\\uc411\\uc412\\uc413\\uc414\\uc415\\uc416\\uc417\\uc418\\uc419\\uc41a\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc41b\\uc41c\\uc41d\\uc41e\\uc41f\\uc420\\uc421\\uc422\\uc423\\uc425\\uc426\\uc427\\uc428\\uc429\\uc42a\\uc42b\\uc42d\\uc42e\\uc42f\\uc431\\uc432\\uc433\\uc435\\uc436\\uc437\\uc438\\uc439\\uc43a\\uc43b\\uc43e\\uc43f\\uc440\\uc441\\uc442\\uc443\\uc444\\uc445\\uc446\\uc447\\uc449\\uc44a\\uc44b\\uc44c\\uc44d\\uc44e\\uc44f\\uc450\\uc451\\uc452\\uc453\\uc454\\uc455\\uc456\\uc457\\uc458\\uc459\\uc45a\\uc45b\\uc45c\\uc45d\\uc45e\\uc45f\\uc460\\uc461\\uc462\\uc463\\uc466\\uc467\\uc469\\uc46a\\uc46b\\uc46d\\uc46e\\uc46f\\uc470\\uc471\\uc472\\uc473\\uc476\\uc477\\uc478\\uc47a\\uc47b\\uc47c\\uc47d\\uc47e\\uc47f\\uc481\\uc482\\uc483\\uc484\\uc485\\uc486\\uc487\\uc488\\uc489\\uc48a\\uc48b\\uc48c\\uc48d\\uc48e\\uc48f\\uc490\\uc491\\uc492\\uc493\\uc495\\uc496\\uc497\\uc498\\uc499\\uc49a\\uc49b\\uc49d\\uc49e\\uc49f\\uc4a0\\uc4a1\\uc4a2\\uc4a3\\uc4a4\\uc4a5\\uc4a6\\uc4a7\\uc4a8\\uc4a9\\ufffd\".split(\"\"),e=0;e!=r[156].length;++e)65533!==r[156][e].charCodeAt(0)&&(n[r[156][e]]=39936+e,t[39936+e]=r[156][e]);for(r[157]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc4aa\\uc4ab\\uc4ac\\uc4ad\\uc4ae\\uc4af\\uc4b0\\uc4b1\\uc4b2\\uc4b3\\uc4b4\\uc4b5\\uc4b6\\uc4b7\\uc4b9\\uc4ba\\uc4bb\\uc4bd\\uc4be\\uc4bf\\uc4c0\\uc4c1\\uc4c2\\uc4c3\\uc4c4\\uc4c5\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc4c6\\uc4c7\\uc4c8\\uc4c9\\uc4ca\\uc4cb\\uc4cc\\uc4cd\\uc4ce\\uc4cf\\uc4d0\\uc4d1\\uc4d2\\uc4d3\\uc4d4\\uc4d5\\uc4d6\\uc4d7\\uc4d8\\uc4d9\\uc4da\\uc4db\\uc4dc\\uc4dd\\uc4de\\uc4df\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc4e0\\uc4e1\\uc4e2\\uc4e3\\uc4e4\\uc4e5\\uc4e6\\uc4e7\\uc4e8\\uc4ea\\uc4eb\\uc4ec\\uc4ed\\uc4ee\\uc4ef\\uc4f2\\uc4f3\\uc4f5\\uc4f6\\uc4f7\\uc4f9\\uc4fb\\uc4fc\\uc4fd\\uc4fe\\uc502\\uc503\\uc504\\uc505\\uc506\\uc507\\uc508\\uc509\\uc50a\\uc50b\\uc50d\\uc50e\\uc50f\\uc511\\uc512\\uc513\\uc515\\uc516\\uc517\\uc518\\uc519\\uc51a\\uc51b\\uc51d\\uc51e\\uc51f\\uc520\\uc521\\uc522\\uc523\\uc524\\uc525\\uc526\\uc527\\uc52a\\uc52b\\uc52d\\uc52e\\uc52f\\uc531\\uc532\\uc533\\uc534\\uc535\\uc536\\uc537\\uc53a\\uc53c\\uc53e\\uc53f\\uc540\\uc541\\uc542\\uc543\\uc546\\uc547\\uc54b\\uc54f\\uc550\\uc551\\uc552\\uc556\\uc55a\\uc55b\\uc55c\\uc55f\\uc562\\uc563\\uc565\\uc566\\uc567\\uc569\\uc56a\\uc56b\\uc56c\\uc56d\\uc56e\\uc56f\\uc572\\uc576\\uc577\\uc578\\uc579\\uc57a\\uc57b\\uc57e\\uc57f\\uc581\\uc582\\uc583\\uc585\\uc586\\uc588\\uc589\\uc58a\\uc58b\\uc58e\\uc590\\uc592\\uc593\\uc594\\ufffd\".split(\"\"),e=0;e!=r[157].length;++e)65533!==r[157][e].charCodeAt(0)&&(n[r[157][e]]=40192+e,t[40192+e]=r[157][e]);for(r[158]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc596\\uc599\\uc59a\\uc59b\\uc59d\\uc59e\\uc59f\\uc5a1\\uc5a2\\uc5a3\\uc5a4\\uc5a5\\uc5a6\\uc5a7\\uc5a8\\uc5aa\\uc5ab\\uc5ac\\uc5ad\\uc5ae\\uc5af\\uc5b0\\uc5b1\\uc5b2\\uc5b3\\uc5b6\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc5b7\\uc5ba\\uc5bf\\uc5c0\\uc5c1\\uc5c2\\uc5c3\\uc5cb\\uc5cd\\uc5cf\\uc5d2\\uc5d3\\uc5d5\\uc5d6\\uc5d7\\uc5d9\\uc5da\\uc5db\\uc5dc\\uc5dd\\uc5de\\uc5df\\uc5e2\\uc5e4\\uc5e6\\uc5e7\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc5e8\\uc5e9\\uc5ea\\uc5eb\\uc5ef\\uc5f1\\uc5f2\\uc5f3\\uc5f5\\uc5f8\\uc5f9\\uc5fa\\uc5fb\\uc602\\uc603\\uc604\\uc609\\uc60a\\uc60b\\uc60d\\uc60e\\uc60f\\uc611\\uc612\\uc613\\uc614\\uc615\\uc616\\uc617\\uc61a\\uc61d\\uc61e\\uc61f\\uc620\\uc621\\uc622\\uc623\\uc626\\uc627\\uc629\\uc62a\\uc62b\\uc62f\\uc631\\uc632\\uc636\\uc638\\uc63a\\uc63c\\uc63d\\uc63e\\uc63f\\uc642\\uc643\\uc645\\uc646\\uc647\\uc649\\uc64a\\uc64b\\uc64c\\uc64d\\uc64e\\uc64f\\uc652\\uc656\\uc657\\uc658\\uc659\\uc65a\\uc65b\\uc65e\\uc65f\\uc661\\uc662\\uc663\\uc664\\uc665\\uc666\\uc667\\uc668\\uc669\\uc66a\\uc66b\\uc66d\\uc66e\\uc670\\uc672\\uc673\\uc674\\uc675\\uc676\\uc677\\uc67a\\uc67b\\uc67d\\uc67e\\uc67f\\uc681\\uc682\\uc683\\uc684\\uc685\\uc686\\uc687\\uc68a\\uc68c\\uc68e\\uc68f\\uc690\\uc691\\uc692\\uc693\\uc696\\uc697\\uc699\\uc69a\\uc69b\\uc69d\\uc69e\\uc69f\\uc6a0\\uc6a1\\uc6a2\\uc6a3\\uc6a6\\ufffd\".split(\"\"),e=0;e!=r[158].length;++e)65533!==r[158][e].charCodeAt(0)&&(n[r[158][e]]=40448+e,t[40448+e]=r[158][e]);for(r[159]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc6a8\\uc6aa\\uc6ab\\uc6ac\\uc6ad\\uc6ae\\uc6af\\uc6b2\\uc6b3\\uc6b5\\uc6b6\\uc6b7\\uc6bb\\uc6bc\\uc6bd\\uc6be\\uc6bf\\uc6c2\\uc6c4\\uc6c6\\uc6c7\\uc6c8\\uc6c9\\uc6ca\\uc6cb\\uc6ce\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc6cf\\uc6d1\\uc6d2\\uc6d3\\uc6d5\\uc6d6\\uc6d7\\uc6d8\\uc6d9\\uc6da\\uc6db\\uc6de\\uc6df\\uc6e2\\uc6e3\\uc6e4\\uc6e5\\uc6e6\\uc6e7\\uc6ea\\uc6eb\\uc6ed\\uc6ee\\uc6ef\\uc6f1\\uc6f2\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc6f3\\uc6f4\\uc6f5\\uc6f6\\uc6f7\\uc6fa\\uc6fb\\uc6fc\\uc6fe\\uc6ff\\uc700\\uc701\\uc702\\uc703\\uc706\\uc707\\uc709\\uc70a\\uc70b\\uc70d\\uc70e\\uc70f\\uc710\\uc711\\uc712\\uc713\\uc716\\uc718\\uc71a\\uc71b\\uc71c\\uc71d\\uc71e\\uc71f\\uc722\\uc723\\uc725\\uc726\\uc727\\uc729\\uc72a\\uc72b\\uc72c\\uc72d\\uc72e\\uc72f\\uc732\\uc734\\uc736\\uc738\\uc739\\uc73a\\uc73b\\uc73e\\uc73f\\uc741\\uc742\\uc743\\uc745\\uc746\\uc747\\uc748\\uc749\\uc74b\\uc74e\\uc750\\uc759\\uc75a\\uc75b\\uc75d\\uc75e\\uc75f\\uc761\\uc762\\uc763\\uc764\\uc765\\uc766\\uc767\\uc769\\uc76a\\uc76c\\uc76d\\uc76e\\uc76f\\uc770\\uc771\\uc772\\uc773\\uc776\\uc777\\uc779\\uc77a\\uc77b\\uc77f\\uc780\\uc781\\uc782\\uc786\\uc78b\\uc78c\\uc78d\\uc78f\\uc792\\uc793\\uc795\\uc799\\uc79b\\uc79c\\uc79d\\uc79e\\uc79f\\uc7a2\\uc7a7\\uc7a8\\uc7a9\\uc7aa\\uc7ab\\uc7ae\\uc7af\\uc7b1\\uc7b2\\uc7b3\\uc7b5\\uc7b6\\uc7b7\\ufffd\".split(\"\"),e=0;e!=r[159].length;++e)65533!==r[159][e].charCodeAt(0)&&(n[r[159][e]]=40704+e,t[40704+e]=r[159][e]);for(r[160]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc7b8\\uc7b9\\uc7ba\\uc7bb\\uc7be\\uc7c2\\uc7c3\\uc7c4\\uc7c5\\uc7c6\\uc7c7\\uc7ca\\uc7cb\\uc7cd\\uc7cf\\uc7d1\\uc7d2\\uc7d3\\uc7d4\\uc7d5\\uc7d6\\uc7d7\\uc7d9\\uc7da\\uc7db\\uc7dc\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc7de\\uc7df\\uc7e0\\uc7e1\\uc7e2\\uc7e3\\uc7e5\\uc7e6\\uc7e7\\uc7e9\\uc7ea\\uc7eb\\uc7ed\\uc7ee\\uc7ef\\uc7f0\\uc7f1\\uc7f2\\uc7f3\\uc7f4\\uc7f5\\uc7f6\\uc7f7\\uc7f8\\uc7f9\\uc7fa\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc7fb\\uc7fc\\uc7fd\\uc7fe\\uc7ff\\uc802\\uc803\\uc805\\uc806\\uc807\\uc809\\uc80b\\uc80c\\uc80d\\uc80e\\uc80f\\uc812\\uc814\\uc817\\uc818\\uc819\\uc81a\\uc81b\\uc81e\\uc81f\\uc821\\uc822\\uc823\\uc825\\uc826\\uc827\\uc828\\uc829\\uc82a\\uc82b\\uc82e\\uc830\\uc832\\uc833\\uc834\\uc835\\uc836\\uc837\\uc839\\uc83a\\uc83b\\uc83d\\uc83e\\uc83f\\uc841\\uc842\\uc843\\uc844\\uc845\\uc846\\uc847\\uc84a\\uc84b\\uc84e\\uc84f\\uc850\\uc851\\uc852\\uc853\\uc855\\uc856\\uc857\\uc858\\uc859\\uc85a\\uc85b\\uc85c\\uc85d\\uc85e\\uc85f\\uc860\\uc861\\uc862\\uc863\\uc864\\uc865\\uc866\\uc867\\uc868\\uc869\\uc86a\\uc86b\\uc86c\\uc86d\\uc86e\\uc86f\\uc872\\uc873\\uc875\\uc876\\uc877\\uc879\\uc87b\\uc87c\\uc87d\\uc87e\\uc87f\\uc882\\uc884\\uc888\\uc889\\uc88a\\uc88e\\uc88f\\uc890\\uc891\\uc892\\uc893\\uc895\\uc896\\uc897\\uc898\\uc899\\uc89a\\uc89b\\uc89c\\uc89e\\uc8a0\\uc8a2\\uc8a3\\uc8a4\\ufffd\".split(\"\"),e=0;e!=r[160].length;++e)65533!==r[160][e].charCodeAt(0)&&(n[r[160][e]]=40960+e,t[40960+e]=r[160][e]);for(r[161]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc8a5\\uc8a6\\uc8a7\\uc8a9\\uc8aa\\uc8ab\\uc8ac\\uc8ad\\uc8ae\\uc8af\\uc8b0\\uc8b1\\uc8b2\\uc8b3\\uc8b4\\uc8b5\\uc8b6\\uc8b7\\uc8b8\\uc8b9\\uc8ba\\uc8bb\\uc8be\\uc8bf\\uc8c0\\uc8c1\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc8c2\\uc8c3\\uc8c5\\uc8c6\\uc8c7\\uc8c9\\uc8ca\\uc8cb\\uc8cd\\uc8ce\\uc8cf\\uc8d0\\uc8d1\\uc8d2\\uc8d3\\uc8d6\\uc8d8\\uc8da\\uc8db\\uc8dc\\uc8dd\\uc8de\\uc8df\\uc8e2\\uc8e3\\uc8e5\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc8e6\\uc8e7\\uc8e8\\uc8e9\\uc8ea\\uc8eb\\uc8ec\\uc8ed\\uc8ee\\uc8ef\\uc8f0\\uc8f1\\uc8f2\\uc8f3\\uc8f4\\uc8f6\\uc8f7\\uc8f8\\uc8f9\\uc8fa\\uc8fb\\uc8fe\\uc8ff\\uc901\\uc902\\uc903\\uc907\\uc908\\uc909\\uc90a\\uc90b\\uc90e\\u3000\\u3001\\u3002\\xb7\\u2025\\u2026\\xa8\\u3003\\xad\\u2015\\u2225\\uff3c\\u223c\\u2018\\u2019\\u201c\\u201d\\u3014\\u3015\\u3008\\u3009\\u300a\\u300b\\u300c\\u300d\\u300e\\u300f\\u3010\\u3011\\xb1\\xd7\\xf7\\u2260\\u2264\\u2265\\u221e\\u2234\\xb0\\u2032\\u2033\\u2103\\u212b\\uffe0\\uffe1\\uffe5\\u2642\\u2640\\u2220\\u22a5\\u2312\\u2202\\u2207\\u2261\\u2252\\xa7\\u203b\\u2606\\u2605\\u25cb\\u25cf\\u25ce\\u25c7\\u25c6\\u25a1\\u25a0\\u25b3\\u25b2\\u25bd\\u25bc\\u2192\\u2190\\u2191\\u2193\\u2194\\u3013\\u226a\\u226b\\u221a\\u223d\\u221d\\u2235\\u222b\\u222c\\u2208\\u220b\\u2286\\u2287\\u2282\\u2283\\u222a\\u2229\\u2227\\u2228\\uffe2\\ufffd\".split(\"\"),e=0;e!=r[161].length;++e)65533!==r[161][e].charCodeAt(0)&&(n[r[161][e]]=41216+e,t[41216+e]=r[161][e]);for(r[162]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc910\\uc912\\uc913\\uc914\\uc915\\uc916\\uc917\\uc919\\uc91a\\uc91b\\uc91c\\uc91d\\uc91e\\uc91f\\uc920\\uc921\\uc922\\uc923\\uc924\\uc925\\uc926\\uc927\\uc928\\uc929\\uc92a\\uc92b\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc92d\\uc92e\\uc92f\\uc930\\uc931\\uc932\\uc933\\uc935\\uc936\\uc937\\uc938\\uc939\\uc93a\\uc93b\\uc93c\\uc93d\\uc93e\\uc93f\\uc940\\uc941\\uc942\\uc943\\uc944\\uc945\\uc946\\uc947\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc948\\uc949\\uc94a\\uc94b\\uc94c\\uc94d\\uc94e\\uc94f\\uc952\\uc953\\uc955\\uc956\\uc957\\uc959\\uc95a\\uc95b\\uc95c\\uc95d\\uc95e\\uc95f\\uc962\\uc964\\uc965\\uc966\\uc967\\uc968\\uc969\\uc96a\\uc96b\\uc96d\\uc96e\\uc96f\\u21d2\\u21d4\\u2200\\u2203\\xb4\\uff5e\\u02c7\\u02d8\\u02dd\\u02da\\u02d9\\xb8\\u02db\\xa1\\xbf\\u02d0\\u222e\\u2211\\u220f\\xa4\\u2109\\u2030\\u25c1\\u25c0\\u25b7\\u25b6\\u2664\\u2660\\u2661\\u2665\\u2667\\u2663\\u2299\\u25c8\\u25a3\\u25d0\\u25d1\\u2592\\u25a4\\u25a5\\u25a8\\u25a7\\u25a6\\u25a9\\u2668\\u260f\\u260e\\u261c\\u261e\\xb6\\u2020\\u2021\\u2195\\u2197\\u2199\\u2196\\u2198\\u266d\\u2669\\u266a\\u266c\\u327f\\u321c\\u2116\\u33c7\\u2122\\u33c2\\u33d8\\u2121\\u20ac\\xae\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[162].length;++e)65533!==r[162][e].charCodeAt(0)&&(n[r[162][e]]=41472+e,t[41472+e]=r[162][e]);for(r[163]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc971\\uc972\\uc973\\uc975\\uc976\\uc977\\uc978\\uc979\\uc97a\\uc97b\\uc97d\\uc97e\\uc97f\\uc980\\uc981\\uc982\\uc983\\uc984\\uc985\\uc986\\uc987\\uc98a\\uc98b\\uc98d\\uc98e\\uc98f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc991\\uc992\\uc993\\uc994\\uc995\\uc996\\uc997\\uc99a\\uc99c\\uc99e\\uc99f\\uc9a0\\uc9a1\\uc9a2\\uc9a3\\uc9a4\\uc9a5\\uc9a6\\uc9a7\\uc9a8\\uc9a9\\uc9aa\\uc9ab\\uc9ac\\uc9ad\\uc9ae\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc9af\\uc9b0\\uc9b1\\uc9b2\\uc9b3\\uc9b4\\uc9b5\\uc9b6\\uc9b7\\uc9b8\\uc9b9\\uc9ba\\uc9bb\\uc9bc\\uc9bd\\uc9be\\uc9bf\\uc9c2\\uc9c3\\uc9c5\\uc9c6\\uc9c9\\uc9cb\\uc9cc\\uc9cd\\uc9ce\\uc9cf\\uc9d2\\uc9d4\\uc9d7\\uc9d8\\uc9db\\uff01\\uff02\\uff03\\uff04\\uff05\\uff06\\uff07\\uff08\\uff09\\uff0a\\uff0b\\uff0c\\uff0d\\uff0e\\uff0f\\uff10\\uff11\\uff12\\uff13\\uff14\\uff15\\uff16\\uff17\\uff18\\uff19\\uff1a\\uff1b\\uff1c\\uff1d\\uff1e\\uff1f\\uff20\\uff21\\uff22\\uff23\\uff24\\uff25\\uff26\\uff27\\uff28\\uff29\\uff2a\\uff2b\\uff2c\\uff2d\\uff2e\\uff2f\\uff30\\uff31\\uff32\\uff33\\uff34\\uff35\\uff36\\uff37\\uff38\\uff39\\uff3a\\uff3b\\uffe6\\uff3d\\uff3e\\uff3f\\uff40\\uff41\\uff42\\uff43\\uff44\\uff45\\uff46\\uff47\\uff48\\uff49\\uff4a\\uff4b\\uff4c\\uff4d\\uff4e\\uff4f\\uff50\\uff51\\uff52\\uff53\\uff54\\uff55\\uff56\\uff57\\uff58\\uff59\\uff5a\\uff5b\\uff5c\\uff5d\\uffe3\\ufffd\".split(\"\"),e=0;e!=r[163].length;++e)65533!==r[163][e].charCodeAt(0)&&(n[r[163][e]]=41728+e,t[41728+e]=r[163][e]);for(r[164]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uc9de\\uc9df\\uc9e1\\uc9e3\\uc9e5\\uc9e6\\uc9e8\\uc9e9\\uc9ea\\uc9eb\\uc9ee\\uc9f2\\uc9f3\\uc9f4\\uc9f5\\uc9f6\\uc9f7\\uc9fa\\uc9fb\\uc9fd\\uc9fe\\uc9ff\\uca01\\uca02\\uca03\\uca04\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uca05\\uca06\\uca07\\uca0a\\uca0e\\uca0f\\uca10\\uca11\\uca12\\uca13\\uca15\\uca16\\uca17\\uca19\\uca1a\\uca1b\\uca1c\\uca1d\\uca1e\\uca1f\\uca20\\uca21\\uca22\\uca23\\uca24\\uca25\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uca26\\uca27\\uca28\\uca2a\\uca2b\\uca2c\\uca2d\\uca2e\\uca2f\\uca30\\uca31\\uca32\\uca33\\uca34\\uca35\\uca36\\uca37\\uca38\\uca39\\uca3a\\uca3b\\uca3c\\uca3d\\uca3e\\uca3f\\uca40\\uca41\\uca42\\uca43\\uca44\\uca45\\uca46\\u3131\\u3132\\u3133\\u3134\\u3135\\u3136\\u3137\\u3138\\u3139\\u313a\\u313b\\u313c\\u313d\\u313e\\u313f\\u3140\\u3141\\u3142\\u3143\\u3144\\u3145\\u3146\\u3147\\u3148\\u3149\\u314a\\u314b\\u314c\\u314d\\u314e\\u314f\\u3150\\u3151\\u3152\\u3153\\u3154\\u3155\\u3156\\u3157\\u3158\\u3159\\u315a\\u315b\\u315c\\u315d\\u315e\\u315f\\u3160\\u3161\\u3162\\u3163\\u3164\\u3165\\u3166\\u3167\\u3168\\u3169\\u316a\\u316b\\u316c\\u316d\\u316e\\u316f\\u3170\\u3171\\u3172\\u3173\\u3174\\u3175\\u3176\\u3177\\u3178\\u3179\\u317a\\u317b\\u317c\\u317d\\u317e\\u317f\\u3180\\u3181\\u3182\\u3183\\u3184\\u3185\\u3186\\u3187\\u3188\\u3189\\u318a\\u318b\\u318c\\u318d\\u318e\\ufffd\".split(\"\"),e=0;e!=r[164].length;++e)65533!==r[164][e].charCodeAt(0)&&(n[r[164][e]]=41984+e,t[41984+e]=r[164][e]);for(r[165]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uca47\\uca48\\uca49\\uca4a\\uca4b\\uca4e\\uca4f\\uca51\\uca52\\uca53\\uca55\\uca56\\uca57\\uca58\\uca59\\uca5a\\uca5b\\uca5e\\uca62\\uca63\\uca64\\uca65\\uca66\\uca67\\uca69\\uca6a\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uca6b\\uca6c\\uca6d\\uca6e\\uca6f\\uca70\\uca71\\uca72\\uca73\\uca74\\uca75\\uca76\\uca77\\uca78\\uca79\\uca7a\\uca7b\\uca7c\\uca7e\\uca7f\\uca80\\uca81\\uca82\\uca83\\uca85\\uca86\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uca87\\uca88\\uca89\\uca8a\\uca8b\\uca8c\\uca8d\\uca8e\\uca8f\\uca90\\uca91\\uca92\\uca93\\uca94\\uca95\\uca96\\uca97\\uca99\\uca9a\\uca9b\\uca9c\\uca9d\\uca9e\\uca9f\\ucaa0\\ucaa1\\ucaa2\\ucaa3\\ucaa4\\ucaa5\\ucaa6\\ucaa7\\u2170\\u2171\\u2172\\u2173\\u2174\\u2175\\u2176\\u2177\\u2178\\u2179\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u2160\\u2161\\u2162\\u2163\\u2164\\u2165\\u2166\\u2167\\u2168\\u2169\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[165].length;++e)65533!==r[165][e].charCodeAt(0)&&(n[r[165][e]]=42240+e,t[42240+e]=r[165][e]);for(r[166]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucaa8\\ucaa9\\ucaaa\\ucaab\\ucaac\\ucaad\\ucaae\\ucaaf\\ucab0\\ucab1\\ucab2\\ucab3\\ucab4\\ucab5\\ucab6\\ucab7\\ucab8\\ucab9\\ucaba\\ucabb\\ucabe\\ucabf\\ucac1\\ucac2\\ucac3\\ucac5\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucac6\\ucac7\\ucac8\\ucac9\\ucaca\\ucacb\\ucace\\ucad0\\ucad2\\ucad4\\ucad5\\ucad6\\ucad7\\ucada\\ucadb\\ucadc\\ucadd\\ucade\\ucadf\\ucae1\\ucae2\\ucae3\\ucae4\\ucae5\\ucae6\\ucae7\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucae8\\ucae9\\ucaea\\ucaeb\\ucaed\\ucaee\\ucaef\\ucaf0\\ucaf1\\ucaf2\\ucaf3\\ucaf5\\ucaf6\\ucaf7\\ucaf8\\ucaf9\\ucafa\\ucafb\\ucafc\\ucafd\\ucafe\\ucaff\\ucb00\\ucb01\\ucb02\\ucb03\\ucb04\\ucb05\\ucb06\\ucb07\\ucb09\\ucb0a\\u2500\\u2502\\u250c\\u2510\\u2518\\u2514\\u251c\\u252c\\u2524\\u2534\\u253c\\u2501\\u2503\\u250f\\u2513\\u251b\\u2517\\u2523\\u2533\\u252b\\u253b\\u254b\\u2520\\u252f\\u2528\\u2537\\u253f\\u251d\\u2530\\u2525\\u2538\\u2542\\u2512\\u2511\\u251a\\u2519\\u2516\\u2515\\u250e\\u250d\\u251e\\u251f\\u2521\\u2522\\u2526\\u2527\\u2529\\u252a\\u252d\\u252e\\u2531\\u2532\\u2535\\u2536\\u2539\\u253a\\u253d\\u253e\\u2540\\u2541\\u2543\\u2544\\u2545\\u2546\\u2547\\u2548\\u2549\\u254a\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[166].length;++e)65533!==r[166][e].charCodeAt(0)&&(n[r[166][e]]=42496+e,t[42496+e]=r[166][e]);for(r[167]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucb0b\\ucb0c\\ucb0d\\ucb0e\\ucb0f\\ucb11\\ucb12\\ucb13\\ucb15\\ucb16\\ucb17\\ucb19\\ucb1a\\ucb1b\\ucb1c\\ucb1d\\ucb1e\\ucb1f\\ucb22\\ucb23\\ucb24\\ucb25\\ucb26\\ucb27\\ucb28\\ucb29\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucb2a\\ucb2b\\ucb2c\\ucb2d\\ucb2e\\ucb2f\\ucb30\\ucb31\\ucb32\\ucb33\\ucb34\\ucb35\\ucb36\\ucb37\\ucb38\\ucb39\\ucb3a\\ucb3b\\ucb3c\\ucb3d\\ucb3e\\ucb3f\\ucb40\\ucb42\\ucb43\\ucb44\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucb45\\ucb46\\ucb47\\ucb4a\\ucb4b\\ucb4d\\ucb4e\\ucb4f\\ucb51\\ucb52\\ucb53\\ucb54\\ucb55\\ucb56\\ucb57\\ucb5a\\ucb5b\\ucb5c\\ucb5e\\ucb5f\\ucb60\\ucb61\\ucb62\\ucb63\\ucb65\\ucb66\\ucb67\\ucb68\\ucb69\\ucb6a\\ucb6b\\ucb6c\\u3395\\u3396\\u3397\\u2113\\u3398\\u33c4\\u33a3\\u33a4\\u33a5\\u33a6\\u3399\\u339a\\u339b\\u339c\\u339d\\u339e\\u339f\\u33a0\\u33a1\\u33a2\\u33ca\\u338d\\u338e\\u338f\\u33cf\\u3388\\u3389\\u33c8\\u33a7\\u33a8\\u33b0\\u33b1\\u33b2\\u33b3\\u33b4\\u33b5\\u33b6\\u33b7\\u33b8\\u33b9\\u3380\\u3381\\u3382\\u3383\\u3384\\u33ba\\u33bb\\u33bc\\u33bd\\u33be\\u33bf\\u3390\\u3391\\u3392\\u3393\\u3394\\u2126\\u33c0\\u33c1\\u338a\\u338b\\u338c\\u33d6\\u33c5\\u33ad\\u33ae\\u33af\\u33db\\u33a9\\u33aa\\u33ab\\u33ac\\u33dd\\u33d0\\u33d3\\u33c3\\u33c9\\u33dc\\u33c6\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[167].length;++e)65533!==r[167][e].charCodeAt(0)&&(n[r[167][e]]=42752+e,t[42752+e]=r[167][e]);for(r[168]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucb6d\\ucb6e\\ucb6f\\ucb70\\ucb71\\ucb72\\ucb73\\ucb74\\ucb75\\ucb76\\ucb77\\ucb7a\\ucb7b\\ucb7c\\ucb7d\\ucb7e\\ucb7f\\ucb80\\ucb81\\ucb82\\ucb83\\ucb84\\ucb85\\ucb86\\ucb87\\ucb88\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucb89\\ucb8a\\ucb8b\\ucb8c\\ucb8d\\ucb8e\\ucb8f\\ucb90\\ucb91\\ucb92\\ucb93\\ucb94\\ucb95\\ucb96\\ucb97\\ucb98\\ucb99\\ucb9a\\ucb9b\\ucb9d\\ucb9e\\ucb9f\\ucba0\\ucba1\\ucba2\\ucba3\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucba4\\ucba5\\ucba6\\ucba7\\ucba8\\ucba9\\ucbaa\\ucbab\\ucbac\\ucbad\\ucbae\\ucbaf\\ucbb0\\ucbb1\\ucbb2\\ucbb3\\ucbb4\\ucbb5\\ucbb6\\ucbb7\\ucbb9\\ucbba\\ucbbb\\ucbbc\\ucbbd\\ucbbe\\ucbbf\\ucbc0\\ucbc1\\ucbc2\\ucbc3\\ucbc4\\xc6\\xd0\\xaa\\u0126\\ufffd\\u0132\\ufffd\\u013f\\u0141\\xd8\\u0152\\xba\\xde\\u0166\\u014a\\ufffd\\u3260\\u3261\\u3262\\u3263\\u3264\\u3265\\u3266\\u3267\\u3268\\u3269\\u326a\\u326b\\u326c\\u326d\\u326e\\u326f\\u3270\\u3271\\u3272\\u3273\\u3274\\u3275\\u3276\\u3277\\u3278\\u3279\\u327a\\u327b\\u24d0\\u24d1\\u24d2\\u24d3\\u24d4\\u24d5\\u24d6\\u24d7\\u24d8\\u24d9\\u24da\\u24db\\u24dc\\u24dd\\u24de\\u24df\\u24e0\\u24e1\\u24e2\\u24e3\\u24e4\\u24e5\\u24e6\\u24e7\\u24e8\\u24e9\\u2460\\u2461\\u2462\\u2463\\u2464\\u2465\\u2466\\u2467\\u2468\\u2469\\u246a\\u246b\\u246c\\u246d\\u246e\\xbd\\u2153\\u2154\\xbc\\xbe\\u215b\\u215c\\u215d\\u215e\\ufffd\".split(\"\"),e=0;e!=r[168].length;++e)65533!==r[168][e].charCodeAt(0)&&(n[r[168][e]]=43008+e,t[43008+e]=r[168][e]);for(r[169]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucbc5\\ucbc6\\ucbc7\\ucbc8\\ucbc9\\ucbca\\ucbcb\\ucbcc\\ucbcd\\ucbce\\ucbcf\\ucbd0\\ucbd1\\ucbd2\\ucbd3\\ucbd5\\ucbd6\\ucbd7\\ucbd8\\ucbd9\\ucbda\\ucbdb\\ucbdc\\ucbdd\\ucbde\\ucbdf\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucbe0\\ucbe1\\ucbe2\\ucbe3\\ucbe5\\ucbe6\\ucbe8\\ucbea\\ucbeb\\ucbec\\ucbed\\ucbee\\ucbef\\ucbf0\\ucbf1\\ucbf2\\ucbf3\\ucbf4\\ucbf5\\ucbf6\\ucbf7\\ucbf8\\ucbf9\\ucbfa\\ucbfb\\ucbfc\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucbfd\\ucbfe\\ucbff\\ucc00\\ucc01\\ucc02\\ucc03\\ucc04\\ucc05\\ucc06\\ucc07\\ucc08\\ucc09\\ucc0a\\ucc0b\\ucc0e\\ucc0f\\ucc11\\ucc12\\ucc13\\ucc15\\ucc16\\ucc17\\ucc18\\ucc19\\ucc1a\\ucc1b\\ucc1e\\ucc1f\\ucc20\\ucc23\\ucc24\\xe6\\u0111\\xf0\\u0127\\u0131\\u0133\\u0138\\u0140\\u0142\\xf8\\u0153\\xdf\\xfe\\u0167\\u014b\\u0149\\u3200\\u3201\\u3202\\u3203\\u3204\\u3205\\u3206\\u3207\\u3208\\u3209\\u320a\\u320b\\u320c\\u320d\\u320e\\u320f\\u3210\\u3211\\u3212\\u3213\\u3214\\u3215\\u3216\\u3217\\u3218\\u3219\\u321a\\u321b\\u249c\\u249d\\u249e\\u249f\\u24a0\\u24a1\\u24a2\\u24a3\\u24a4\\u24a5\\u24a6\\u24a7\\u24a8\\u24a9\\u24aa\\u24ab\\u24ac\\u24ad\\u24ae\\u24af\\u24b0\\u24b1\\u24b2\\u24b3\\u24b4\\u24b5\\u2474\\u2475\\u2476\\u2477\\u2478\\u2479\\u247a\\u247b\\u247c\\u247d\\u247e\\u247f\\u2480\\u2481\\u2482\\xb9\\xb2\\xb3\\u2074\\u207f\\u2081\\u2082\\u2083\\u2084\\ufffd\".split(\"\"),e=0;e!=r[169].length;++e)65533!==r[169][e].charCodeAt(0)&&(n[r[169][e]]=43264+e,t[43264+e]=r[169][e]);for(r[170]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucc25\\ucc26\\ucc2a\\ucc2b\\ucc2d\\ucc2f\\ucc31\\ucc32\\ucc33\\ucc34\\ucc35\\ucc36\\ucc37\\ucc3a\\ucc3f\\ucc40\\ucc41\\ucc42\\ucc43\\ucc46\\ucc47\\ucc49\\ucc4a\\ucc4b\\ucc4d\\ucc4e\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucc4f\\ucc50\\ucc51\\ucc52\\ucc53\\ucc56\\ucc5a\\ucc5b\\ucc5c\\ucc5d\\ucc5e\\ucc5f\\ucc61\\ucc62\\ucc63\\ucc65\\ucc67\\ucc69\\ucc6a\\ucc6b\\ucc6c\\ucc6d\\ucc6e\\ucc6f\\ucc71\\ucc72\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucc73\\ucc74\\ucc76\\ucc77\\ucc78\\ucc79\\ucc7a\\ucc7b\\ucc7c\\ucc7d\\ucc7e\\ucc7f\\ucc80\\ucc81\\ucc82\\ucc83\\ucc84\\ucc85\\ucc86\\ucc87\\ucc88\\ucc89\\ucc8a\\ucc8b\\ucc8c\\ucc8d\\ucc8e\\ucc8f\\ucc90\\ucc91\\ucc92\\ucc93\\u3041\\u3042\\u3043\\u3044\\u3045\\u3046\\u3047\\u3048\\u3049\\u304a\\u304b\\u304c\\u304d\\u304e\\u304f\\u3050\\u3051\\u3052\\u3053\\u3054\\u3055\\u3056\\u3057\\u3058\\u3059\\u305a\\u305b\\u305c\\u305d\\u305e\\u305f\\u3060\\u3061\\u3062\\u3063\\u3064\\u3065\\u3066\\u3067\\u3068\\u3069\\u306a\\u306b\\u306c\\u306d\\u306e\\u306f\\u3070\\u3071\\u3072\\u3073\\u3074\\u3075\\u3076\\u3077\\u3078\\u3079\\u307a\\u307b\\u307c\\u307d\\u307e\\u307f\\u3080\\u3081\\u3082\\u3083\\u3084\\u3085\\u3086\\u3087\\u3088\\u3089\\u308a\\u308b\\u308c\\u308d\\u308e\\u308f\\u3090\\u3091\\u3092\\u3093\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[170].length;++e)65533!==r[170][e].charCodeAt(0)&&(n[r[170][e]]=43520+e,t[43520+e]=r[170][e]);for(r[171]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucc94\\ucc95\\ucc96\\ucc97\\ucc9a\\ucc9b\\ucc9d\\ucc9e\\ucc9f\\ucca1\\ucca2\\ucca3\\ucca4\\ucca5\\ucca6\\ucca7\\uccaa\\uccae\\uccaf\\uccb0\\uccb1\\uccb2\\uccb3\\uccb6\\uccb7\\uccb9\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uccba\\uccbb\\uccbd\\uccbe\\uccbf\\uccc0\\uccc1\\uccc2\\uccc3\\uccc6\\uccc8\\uccca\\ucccb\\ucccc\\ucccd\\uccce\\ucccf\\uccd1\\uccd2\\uccd3\\uccd5\\uccd6\\uccd7\\uccd8\\uccd9\\uccda\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uccdb\\uccdc\\uccdd\\uccde\\uccdf\\ucce0\\ucce1\\ucce2\\ucce3\\ucce5\\ucce6\\ucce7\\ucce8\\ucce9\\uccea\\ucceb\\ucced\\uccee\\uccef\\uccf1\\uccf2\\uccf3\\uccf4\\uccf5\\uccf6\\uccf7\\uccf8\\uccf9\\uccfa\\uccfb\\uccfc\\uccfd\\u30a1\\u30a2\\u30a3\\u30a4\\u30a5\\u30a6\\u30a7\\u30a8\\u30a9\\u30aa\\u30ab\\u30ac\\u30ad\\u30ae\\u30af\\u30b0\\u30b1\\u30b2\\u30b3\\u30b4\\u30b5\\u30b6\\u30b7\\u30b8\\u30b9\\u30ba\\u30bb\\u30bc\\u30bd\\u30be\\u30bf\\u30c0\\u30c1\\u30c2\\u30c3\\u30c4\\u30c5\\u30c6\\u30c7\\u30c8\\u30c9\\u30ca\\u30cb\\u30cc\\u30cd\\u30ce\\u30cf\\u30d0\\u30d1\\u30d2\\u30d3\\u30d4\\u30d5\\u30d6\\u30d7\\u30d8\\u30d9\\u30da\\u30db\\u30dc\\u30dd\\u30de\\u30df\\u30e0\\u30e1\\u30e2\\u30e3\\u30e4\\u30e5\\u30e6\\u30e7\\u30e8\\u30e9\\u30ea\\u30eb\\u30ec\\u30ed\\u30ee\\u30ef\\u30f0\\u30f1\\u30f2\\u30f3\\u30f4\\u30f5\\u30f6\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[171].length;++e)65533!==r[171][e].charCodeAt(0)&&(n[r[171][e]]=43776+e,t[43776+e]=r[171][e]);for(r[172]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uccfe\\uccff\\ucd00\\ucd02\\ucd03\\ucd04\\ucd05\\ucd06\\ucd07\\ucd0a\\ucd0b\\ucd0d\\ucd0e\\ucd0f\\ucd11\\ucd12\\ucd13\\ucd14\\ucd15\\ucd16\\ucd17\\ucd1a\\ucd1c\\ucd1e\\ucd1f\\ucd20\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucd21\\ucd22\\ucd23\\ucd25\\ucd26\\ucd27\\ucd29\\ucd2a\\ucd2b\\ucd2d\\ucd2e\\ucd2f\\ucd30\\ucd31\\ucd32\\ucd33\\ucd34\\ucd35\\ucd36\\ucd37\\ucd38\\ucd3a\\ucd3b\\ucd3c\\ucd3d\\ucd3e\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucd3f\\ucd40\\ucd41\\ucd42\\ucd43\\ucd44\\ucd45\\ucd46\\ucd47\\ucd48\\ucd49\\ucd4a\\ucd4b\\ucd4c\\ucd4d\\ucd4e\\ucd4f\\ucd50\\ucd51\\ucd52\\ucd53\\ucd54\\ucd55\\ucd56\\ucd57\\ucd58\\ucd59\\ucd5a\\ucd5b\\ucd5d\\ucd5e\\ucd5f\\u0410\\u0411\\u0412\\u0413\\u0414\\u0415\\u0401\\u0416\\u0417\\u0418\\u0419\\u041a\\u041b\\u041c\\u041d\\u041e\\u041f\\u0420\\u0421\\u0422\\u0423\\u0424\\u0425\\u0426\\u0427\\u0428\\u0429\\u042a\\u042b\\u042c\\u042d\\u042e\\u042f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u0430\\u0431\\u0432\\u0433\\u0434\\u0435\\u0451\\u0436\\u0437\\u0438\\u0439\\u043a\\u043b\\u043c\\u043d\\u043e\\u043f\\u0440\\u0441\\u0442\\u0443\\u0444\\u0445\\u0446\\u0447\\u0448\\u0449\\u044a\\u044b\\u044c\\u044d\\u044e\\u044f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[172].length;++e)65533!==r[172][e].charCodeAt(0)&&(n[r[172][e]]=44032+e,t[44032+e]=r[172][e]);for(r[173]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucd61\\ucd62\\ucd63\\ucd65\\ucd66\\ucd67\\ucd68\\ucd69\\ucd6a\\ucd6b\\ucd6e\\ucd70\\ucd72\\ucd73\\ucd74\\ucd75\\ucd76\\ucd77\\ucd79\\ucd7a\\ucd7b\\ucd7c\\ucd7d\\ucd7e\\ucd7f\\ucd80\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucd81\\ucd82\\ucd83\\ucd84\\ucd85\\ucd86\\ucd87\\ucd89\\ucd8a\\ucd8b\\ucd8c\\ucd8d\\ucd8e\\ucd8f\\ucd90\\ucd91\\ucd92\\ucd93\\ucd96\\ucd97\\ucd99\\ucd9a\\ucd9b\\ucd9d\\ucd9e\\ucd9f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucda0\\ucda1\\ucda2\\ucda3\\ucda6\\ucda8\\ucdaa\\ucdab\\ucdac\\ucdad\\ucdae\\ucdaf\\ucdb1\\ucdb2\\ucdb3\\ucdb4\\ucdb5\\ucdb6\\ucdb7\\ucdb8\\ucdb9\\ucdba\\ucdbb\\ucdbc\\ucdbd\\ucdbe\\ucdbf\\ucdc0\\ucdc1\\ucdc2\\ucdc3\\ucdc5\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[173].length;++e)65533!==r[173][e].charCodeAt(0)&&(n[r[173][e]]=44288+e,t[44288+e]=r[173][e]);for(r[174]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucdc6\\ucdc7\\ucdc8\\ucdc9\\ucdca\\ucdcb\\ucdcd\\ucdce\\ucdcf\\ucdd1\\ucdd2\\ucdd3\\ucdd4\\ucdd5\\ucdd6\\ucdd7\\ucdd8\\ucdd9\\ucdda\\ucddb\\ucddc\\ucddd\\ucdde\\ucddf\\ucde0\\ucde1\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucde2\\ucde3\\ucde4\\ucde5\\ucde6\\ucde7\\ucde9\\ucdea\\ucdeb\\ucded\\ucdee\\ucdef\\ucdf1\\ucdf2\\ucdf3\\ucdf4\\ucdf5\\ucdf6\\ucdf7\\ucdfa\\ucdfc\\ucdfe\\ucdff\\uce00\\uce01\\uce02\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uce03\\uce05\\uce06\\uce07\\uce09\\uce0a\\uce0b\\uce0d\\uce0e\\uce0f\\uce10\\uce11\\uce12\\uce13\\uce15\\uce16\\uce17\\uce18\\uce1a\\uce1b\\uce1c\\uce1d\\uce1e\\uce1f\\uce22\\uce23\\uce25\\uce26\\uce27\\uce29\\uce2a\\uce2b\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[174].length;++e)65533!==r[174][e].charCodeAt(0)&&(n[r[174][e]]=44544+e,t[44544+e]=r[174][e]);for(r[175]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uce2c\\uce2d\\uce2e\\uce2f\\uce32\\uce34\\uce36\\uce37\\uce38\\uce39\\uce3a\\uce3b\\uce3c\\uce3d\\uce3e\\uce3f\\uce40\\uce41\\uce42\\uce43\\uce44\\uce45\\uce46\\uce47\\uce48\\uce49\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uce4a\\uce4b\\uce4c\\uce4d\\uce4e\\uce4f\\uce50\\uce51\\uce52\\uce53\\uce54\\uce55\\uce56\\uce57\\uce5a\\uce5b\\uce5d\\uce5e\\uce62\\uce63\\uce64\\uce65\\uce66\\uce67\\uce6a\\uce6c\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uce6e\\uce6f\\uce70\\uce71\\uce72\\uce73\\uce76\\uce77\\uce79\\uce7a\\uce7b\\uce7d\\uce7e\\uce7f\\uce80\\uce81\\uce82\\uce83\\uce86\\uce88\\uce8a\\uce8b\\uce8c\\uce8d\\uce8e\\uce8f\\uce92\\uce93\\uce95\\uce96\\uce97\\uce99\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[175].length;++e)65533!==r[175][e].charCodeAt(0)&&(n[r[175][e]]=44800+e,t[44800+e]=r[175][e]);for(r[176]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uce9a\\uce9b\\uce9c\\uce9d\\uce9e\\uce9f\\ucea2\\ucea6\\ucea7\\ucea8\\ucea9\\uceaa\\uceab\\uceae\\uceaf\\uceb0\\uceb1\\uceb2\\uceb3\\uceb4\\uceb5\\uceb6\\uceb7\\uceb8\\uceb9\\uceba\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucebb\\ucebc\\ucebd\\ucebe\\ucebf\\ucec0\\ucec2\\ucec3\\ucec4\\ucec5\\ucec6\\ucec7\\ucec8\\ucec9\\uceca\\ucecb\\ucecc\\ucecd\\ucece\\ucecf\\uced0\\uced1\\uced2\\uced3\\uced4\\uced5\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uced6\\uced7\\uced8\\uced9\\uceda\\ucedb\\ucedc\\ucedd\\ucede\\ucedf\\ucee0\\ucee1\\ucee2\\ucee3\\ucee6\\ucee7\\ucee9\\uceea\\uceed\\uceee\\uceef\\ucef0\\ucef1\\ucef2\\ucef3\\ucef6\\ucefa\\ucefb\\ucefc\\ucefd\\ucefe\\uceff\\uac00\\uac01\\uac04\\uac07\\uac08\\uac09\\uac0a\\uac10\\uac11\\uac12\\uac13\\uac14\\uac15\\uac16\\uac17\\uac19\\uac1a\\uac1b\\uac1c\\uac1d\\uac20\\uac24\\uac2c\\uac2d\\uac2f\\uac30\\uac31\\uac38\\uac39\\uac3c\\uac40\\uac4b\\uac4d\\uac54\\uac58\\uac5c\\uac70\\uac71\\uac74\\uac77\\uac78\\uac7a\\uac80\\uac81\\uac83\\uac84\\uac85\\uac86\\uac89\\uac8a\\uac8b\\uac8c\\uac90\\uac94\\uac9c\\uac9d\\uac9f\\uaca0\\uaca1\\uaca8\\uaca9\\uacaa\\uacac\\uacaf\\uacb0\\uacb8\\uacb9\\uacbb\\uacbc\\uacbd\\uacc1\\uacc4\\uacc8\\uaccc\\uacd5\\uacd7\\uace0\\uace1\\uace4\\uace7\\uace8\\uacea\\uacec\\uacef\\uacf0\\uacf1\\uacf3\\uacf5\\uacf6\\uacfc\\uacfd\\uad00\\uad04\\uad06\\ufffd\".split(\"\"),e=0;e!=r[176].length;++e)65533!==r[176][e].charCodeAt(0)&&(n[r[176][e]]=45056+e,t[45056+e]=r[176][e]);for(r[177]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucf02\\ucf03\\ucf05\\ucf06\\ucf07\\ucf09\\ucf0a\\ucf0b\\ucf0c\\ucf0d\\ucf0e\\ucf0f\\ucf12\\ucf14\\ucf16\\ucf17\\ucf18\\ucf19\\ucf1a\\ucf1b\\ucf1d\\ucf1e\\ucf1f\\ucf21\\ucf22\\ucf23\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucf25\\ucf26\\ucf27\\ucf28\\ucf29\\ucf2a\\ucf2b\\ucf2e\\ucf32\\ucf33\\ucf34\\ucf35\\ucf36\\ucf37\\ucf39\\ucf3a\\ucf3b\\ucf3c\\ucf3d\\ucf3e\\ucf3f\\ucf40\\ucf41\\ucf42\\ucf43\\ucf44\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucf45\\ucf46\\ucf47\\ucf48\\ucf49\\ucf4a\\ucf4b\\ucf4c\\ucf4d\\ucf4e\\ucf4f\\ucf50\\ucf51\\ucf52\\ucf53\\ucf56\\ucf57\\ucf59\\ucf5a\\ucf5b\\ucf5d\\ucf5e\\ucf5f\\ucf60\\ucf61\\ucf62\\ucf63\\ucf66\\ucf68\\ucf6a\\ucf6b\\ucf6c\\uad0c\\uad0d\\uad0f\\uad11\\uad18\\uad1c\\uad20\\uad29\\uad2c\\uad2d\\uad34\\uad35\\uad38\\uad3c\\uad44\\uad45\\uad47\\uad49\\uad50\\uad54\\uad58\\uad61\\uad63\\uad6c\\uad6d\\uad70\\uad73\\uad74\\uad75\\uad76\\uad7b\\uad7c\\uad7d\\uad7f\\uad81\\uad82\\uad88\\uad89\\uad8c\\uad90\\uad9c\\uad9d\\uada4\\uadb7\\uadc0\\uadc1\\uadc4\\uadc8\\uadd0\\uadd1\\uadd3\\uaddc\\uade0\\uade4\\uadf8\\uadf9\\uadfc\\uadff\\uae00\\uae01\\uae08\\uae09\\uae0b\\uae0d\\uae14\\uae30\\uae31\\uae34\\uae37\\uae38\\uae3a\\uae40\\uae41\\uae43\\uae45\\uae46\\uae4a\\uae4c\\uae4d\\uae4e\\uae50\\uae54\\uae56\\uae5c\\uae5d\\uae5f\\uae60\\uae61\\uae65\\uae68\\uae69\\uae6c\\uae70\\uae78\\ufffd\".split(\"\"),e=0;e!=r[177].length;++e)65533!==r[177][e].charCodeAt(0)&&(n[r[177][e]]=45312+e,t[45312+e]=r[177][e]);for(r[178]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucf6d\\ucf6e\\ucf6f\\ucf72\\ucf73\\ucf75\\ucf76\\ucf77\\ucf79\\ucf7a\\ucf7b\\ucf7c\\ucf7d\\ucf7e\\ucf7f\\ucf81\\ucf82\\ucf83\\ucf84\\ucf86\\ucf87\\ucf88\\ucf89\\ucf8a\\ucf8b\\ucf8d\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucf8e\\ucf8f\\ucf90\\ucf91\\ucf92\\ucf93\\ucf94\\ucf95\\ucf96\\ucf97\\ucf98\\ucf99\\ucf9a\\ucf9b\\ucf9c\\ucf9d\\ucf9e\\ucf9f\\ucfa0\\ucfa2\\ucfa3\\ucfa4\\ucfa5\\ucfa6\\ucfa7\\ucfa9\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucfaa\\ucfab\\ucfac\\ucfad\\ucfae\\ucfaf\\ucfb1\\ucfb2\\ucfb3\\ucfb4\\ucfb5\\ucfb6\\ucfb7\\ucfb8\\ucfb9\\ucfba\\ucfbb\\ucfbc\\ucfbd\\ucfbe\\ucfbf\\ucfc0\\ucfc1\\ucfc2\\ucfc3\\ucfc5\\ucfc6\\ucfc7\\ucfc8\\ucfc9\\ucfca\\ucfcb\\uae79\\uae7b\\uae7c\\uae7d\\uae84\\uae85\\uae8c\\uaebc\\uaebd\\uaebe\\uaec0\\uaec4\\uaecc\\uaecd\\uaecf\\uaed0\\uaed1\\uaed8\\uaed9\\uaedc\\uaee8\\uaeeb\\uaeed\\uaef4\\uaef8\\uaefc\\uaf07\\uaf08\\uaf0d\\uaf10\\uaf2c\\uaf2d\\uaf30\\uaf32\\uaf34\\uaf3c\\uaf3d\\uaf3f\\uaf41\\uaf42\\uaf43\\uaf48\\uaf49\\uaf50\\uaf5c\\uaf5d\\uaf64\\uaf65\\uaf79\\uaf80\\uaf84\\uaf88\\uaf90\\uaf91\\uaf95\\uaf9c\\uafb8\\uafb9\\uafbc\\uafc0\\uafc7\\uafc8\\uafc9\\uafcb\\uafcd\\uafce\\uafd4\\uafdc\\uafe8\\uafe9\\uaff0\\uaff1\\uaff4\\uaff8\\ub000\\ub001\\ub004\\ub00c\\ub010\\ub014\\ub01c\\ub01d\\ub028\\ub044\\ub045\\ub048\\ub04a\\ub04c\\ub04e\\ub053\\ub054\\ub055\\ub057\\ub059\\ufffd\".split(\"\"),e=0;e!=r[178].length;++e)65533!==r[178][e].charCodeAt(0)&&(n[r[178][e]]=45568+e,t[45568+e]=r[178][e]);for(r[179]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucfcc\\ucfcd\\ucfce\\ucfcf\\ucfd0\\ucfd1\\ucfd2\\ucfd3\\ucfd4\\ucfd5\\ucfd6\\ucfd7\\ucfd8\\ucfd9\\ucfda\\ucfdb\\ucfdc\\ucfdd\\ucfde\\ucfdf\\ucfe2\\ucfe3\\ucfe5\\ucfe6\\ucfe7\\ucfe9\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ucfea\\ucfeb\\ucfec\\ucfed\\ucfee\\ucfef\\ucff2\\ucff4\\ucff6\\ucff7\\ucff8\\ucff9\\ucffa\\ucffb\\ucffd\\ucffe\\ucfff\\ud001\\ud002\\ud003\\ud005\\ud006\\ud007\\ud008\\ud009\\ud00a\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud00b\\ud00c\\ud00d\\ud00e\\ud00f\\ud010\\ud012\\ud013\\ud014\\ud015\\ud016\\ud017\\ud019\\ud01a\\ud01b\\ud01c\\ud01d\\ud01e\\ud01f\\ud020\\ud021\\ud022\\ud023\\ud024\\ud025\\ud026\\ud027\\ud028\\ud029\\ud02a\\ud02b\\ud02c\\ub05d\\ub07c\\ub07d\\ub080\\ub084\\ub08c\\ub08d\\ub08f\\ub091\\ub098\\ub099\\ub09a\\ub09c\\ub09f\\ub0a0\\ub0a1\\ub0a2\\ub0a8\\ub0a9\\ub0ab\\ub0ac\\ub0ad\\ub0ae\\ub0af\\ub0b1\\ub0b3\\ub0b4\\ub0b5\\ub0b8\\ub0bc\\ub0c4\\ub0c5\\ub0c7\\ub0c8\\ub0c9\\ub0d0\\ub0d1\\ub0d4\\ub0d8\\ub0e0\\ub0e5\\ub108\\ub109\\ub10b\\ub10c\\ub110\\ub112\\ub113\\ub118\\ub119\\ub11b\\ub11c\\ub11d\\ub123\\ub124\\ub125\\ub128\\ub12c\\ub134\\ub135\\ub137\\ub138\\ub139\\ub140\\ub141\\ub144\\ub148\\ub150\\ub151\\ub154\\ub155\\ub158\\ub15c\\ub160\\ub178\\ub179\\ub17c\\ub180\\ub182\\ub188\\ub189\\ub18b\\ub18d\\ub192\\ub193\\ub194\\ub198\\ub19c\\ub1a8\\ub1cc\\ub1d0\\ub1d4\\ub1dc\\ub1dd\\ufffd\".split(\"\"),e=0;e!=r[179].length;++e)65533!==r[179][e].charCodeAt(0)&&(n[r[179][e]]=45824+e,t[45824+e]=r[179][e]);for(r[180]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud02e\\ud02f\\ud030\\ud031\\ud032\\ud033\\ud036\\ud037\\ud039\\ud03a\\ud03b\\ud03d\\ud03e\\ud03f\\ud040\\ud041\\ud042\\ud043\\ud046\\ud048\\ud04a\\ud04b\\ud04c\\ud04d\\ud04e\\ud04f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud051\\ud052\\ud053\\ud055\\ud056\\ud057\\ud059\\ud05a\\ud05b\\ud05c\\ud05d\\ud05e\\ud05f\\ud061\\ud062\\ud063\\ud064\\ud065\\ud066\\ud067\\ud068\\ud069\\ud06a\\ud06b\\ud06e\\ud06f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud071\\ud072\\ud073\\ud075\\ud076\\ud077\\ud078\\ud079\\ud07a\\ud07b\\ud07e\\ud07f\\ud080\\ud082\\ud083\\ud084\\ud085\\ud086\\ud087\\ud088\\ud089\\ud08a\\ud08b\\ud08c\\ud08d\\ud08e\\ud08f\\ud090\\ud091\\ud092\\ud093\\ud094\\ub1df\\ub1e8\\ub1e9\\ub1ec\\ub1f0\\ub1f9\\ub1fb\\ub1fd\\ub204\\ub205\\ub208\\ub20b\\ub20c\\ub214\\ub215\\ub217\\ub219\\ub220\\ub234\\ub23c\\ub258\\ub25c\\ub260\\ub268\\ub269\\ub274\\ub275\\ub27c\\ub284\\ub285\\ub289\\ub290\\ub291\\ub294\\ub298\\ub299\\ub29a\\ub2a0\\ub2a1\\ub2a3\\ub2a5\\ub2a6\\ub2aa\\ub2ac\\ub2b0\\ub2b4\\ub2c8\\ub2c9\\ub2cc\\ub2d0\\ub2d2\\ub2d8\\ub2d9\\ub2db\\ub2dd\\ub2e2\\ub2e4\\ub2e5\\ub2e6\\ub2e8\\ub2eb\\ub2ec\\ub2ed\\ub2ee\\ub2ef\\ub2f3\\ub2f4\\ub2f5\\ub2f7\\ub2f8\\ub2f9\\ub2fa\\ub2fb\\ub2ff\\ub300\\ub301\\ub304\\ub308\\ub310\\ub311\\ub313\\ub314\\ub315\\ub31c\\ub354\\ub355\\ub356\\ub358\\ub35b\\ub35c\\ub35e\\ub35f\\ub364\\ub365\\ufffd\".split(\"\"),e=0;e!=r[180].length;++e)65533!==r[180][e].charCodeAt(0)&&(n[r[180][e]]=46080+e,t[46080+e]=r[180][e]);for(r[181]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud095\\ud096\\ud097\\ud098\\ud099\\ud09a\\ud09b\\ud09c\\ud09d\\ud09e\\ud09f\\ud0a0\\ud0a1\\ud0a2\\ud0a3\\ud0a6\\ud0a7\\ud0a9\\ud0aa\\ud0ab\\ud0ad\\ud0ae\\ud0af\\ud0b0\\ud0b1\\ud0b2\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud0b3\\ud0b6\\ud0b8\\ud0ba\\ud0bb\\ud0bc\\ud0bd\\ud0be\\ud0bf\\ud0c2\\ud0c3\\ud0c5\\ud0c6\\ud0c7\\ud0ca\\ud0cb\\ud0cc\\ud0cd\\ud0ce\\ud0cf\\ud0d2\\ud0d6\\ud0d7\\ud0d8\\ud0d9\\ud0da\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud0db\\ud0de\\ud0df\\ud0e1\\ud0e2\\ud0e3\\ud0e5\\ud0e6\\ud0e7\\ud0e8\\ud0e9\\ud0ea\\ud0eb\\ud0ee\\ud0f2\\ud0f3\\ud0f4\\ud0f5\\ud0f6\\ud0f7\\ud0f9\\ud0fa\\ud0fb\\ud0fc\\ud0fd\\ud0fe\\ud0ff\\ud100\\ud101\\ud102\\ud103\\ud104\\ub367\\ub369\\ub36b\\ub36e\\ub370\\ub371\\ub374\\ub378\\ub380\\ub381\\ub383\\ub384\\ub385\\ub38c\\ub390\\ub394\\ub3a0\\ub3a1\\ub3a8\\ub3ac\\ub3c4\\ub3c5\\ub3c8\\ub3cb\\ub3cc\\ub3ce\\ub3d0\\ub3d4\\ub3d5\\ub3d7\\ub3d9\\ub3db\\ub3dd\\ub3e0\\ub3e4\\ub3e8\\ub3fc\\ub410\\ub418\\ub41c\\ub420\\ub428\\ub429\\ub42b\\ub434\\ub450\\ub451\\ub454\\ub458\\ub460\\ub461\\ub463\\ub465\\ub46c\\ub480\\ub488\\ub49d\\ub4a4\\ub4a8\\ub4ac\\ub4b5\\ub4b7\\ub4b9\\ub4c0\\ub4c4\\ub4c8\\ub4d0\\ub4d5\\ub4dc\\ub4dd\\ub4e0\\ub4e3\\ub4e4\\ub4e6\\ub4ec\\ub4ed\\ub4ef\\ub4f1\\ub4f8\\ub514\\ub515\\ub518\\ub51b\\ub51c\\ub524\\ub525\\ub527\\ub528\\ub529\\ub52a\\ub530\\ub531\\ub534\\ub538\\ufffd\".split(\"\"),e=0;e!=r[181].length;++e)65533!==r[181][e].charCodeAt(0)&&(n[r[181][e]]=46336+e,t[46336+e]=r[181][e]);for(r[182]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud105\\ud106\\ud107\\ud108\\ud109\\ud10a\\ud10b\\ud10c\\ud10e\\ud10f\\ud110\\ud111\\ud112\\ud113\\ud114\\ud115\\ud116\\ud117\\ud118\\ud119\\ud11a\\ud11b\\ud11c\\ud11d\\ud11e\\ud11f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud120\\ud121\\ud122\\ud123\\ud124\\ud125\\ud126\\ud127\\ud128\\ud129\\ud12a\\ud12b\\ud12c\\ud12d\\ud12e\\ud12f\\ud132\\ud133\\ud135\\ud136\\ud137\\ud139\\ud13b\\ud13c\\ud13d\\ud13e\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud13f\\ud142\\ud146\\ud147\\ud148\\ud149\\ud14a\\ud14b\\ud14e\\ud14f\\ud151\\ud152\\ud153\\ud155\\ud156\\ud157\\ud158\\ud159\\ud15a\\ud15b\\ud15e\\ud160\\ud162\\ud163\\ud164\\ud165\\ud166\\ud167\\ud169\\ud16a\\ud16b\\ud16d\\ub540\\ub541\\ub543\\ub544\\ub545\\ub54b\\ub54c\\ub54d\\ub550\\ub554\\ub55c\\ub55d\\ub55f\\ub560\\ub561\\ub5a0\\ub5a1\\ub5a4\\ub5a8\\ub5aa\\ub5ab\\ub5b0\\ub5b1\\ub5b3\\ub5b4\\ub5b5\\ub5bb\\ub5bc\\ub5bd\\ub5c0\\ub5c4\\ub5cc\\ub5cd\\ub5cf\\ub5d0\\ub5d1\\ub5d8\\ub5ec\\ub610\\ub611\\ub614\\ub618\\ub625\\ub62c\\ub634\\ub648\\ub664\\ub668\\ub69c\\ub69d\\ub6a0\\ub6a4\\ub6ab\\ub6ac\\ub6b1\\ub6d4\\ub6f0\\ub6f4\\ub6f8\\ub700\\ub701\\ub705\\ub728\\ub729\\ub72c\\ub72f\\ub730\\ub738\\ub739\\ub73b\\ub744\\ub748\\ub74c\\ub754\\ub755\\ub760\\ub764\\ub768\\ub770\\ub771\\ub773\\ub775\\ub77c\\ub77d\\ub780\\ub784\\ub78c\\ub78d\\ub78f\\ub790\\ub791\\ub792\\ub796\\ub797\\ufffd\".split(\"\"),e=0;e!=r[182].length;++e)65533!==r[182][e].charCodeAt(0)&&(n[r[182][e]]=46592+e,t[46592+e]=r[182][e]);for(r[183]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud16e\\ud16f\\ud170\\ud171\\ud172\\ud173\\ud174\\ud175\\ud176\\ud177\\ud178\\ud179\\ud17a\\ud17b\\ud17d\\ud17e\\ud17f\\ud180\\ud181\\ud182\\ud183\\ud185\\ud186\\ud187\\ud189\\ud18a\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud18b\\ud18c\\ud18d\\ud18e\\ud18f\\ud190\\ud191\\ud192\\ud193\\ud194\\ud195\\ud196\\ud197\\ud198\\ud199\\ud19a\\ud19b\\ud19c\\ud19d\\ud19e\\ud19f\\ud1a2\\ud1a3\\ud1a5\\ud1a6\\ud1a7\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud1a9\\ud1aa\\ud1ab\\ud1ac\\ud1ad\\ud1ae\\ud1af\\ud1b2\\ud1b4\\ud1b6\\ud1b7\\ud1b8\\ud1b9\\ud1bb\\ud1bd\\ud1be\\ud1bf\\ud1c1\\ud1c2\\ud1c3\\ud1c4\\ud1c5\\ud1c6\\ud1c7\\ud1c8\\ud1c9\\ud1ca\\ud1cb\\ud1cc\\ud1cd\\ud1ce\\ud1cf\\ub798\\ub799\\ub79c\\ub7a0\\ub7a8\\ub7a9\\ub7ab\\ub7ac\\ub7ad\\ub7b4\\ub7b5\\ub7b8\\ub7c7\\ub7c9\\ub7ec\\ub7ed\\ub7f0\\ub7f4\\ub7fc\\ub7fd\\ub7ff\\ub800\\ub801\\ub807\\ub808\\ub809\\ub80c\\ub810\\ub818\\ub819\\ub81b\\ub81d\\ub824\\ub825\\ub828\\ub82c\\ub834\\ub835\\ub837\\ub838\\ub839\\ub840\\ub844\\ub851\\ub853\\ub85c\\ub85d\\ub860\\ub864\\ub86c\\ub86d\\ub86f\\ub871\\ub878\\ub87c\\ub88d\\ub8a8\\ub8b0\\ub8b4\\ub8b8\\ub8c0\\ub8c1\\ub8c3\\ub8c5\\ub8cc\\ub8d0\\ub8d4\\ub8dd\\ub8df\\ub8e1\\ub8e8\\ub8e9\\ub8ec\\ub8f0\\ub8f8\\ub8f9\\ub8fb\\ub8fd\\ub904\\ub918\\ub920\\ub93c\\ub93d\\ub940\\ub944\\ub94c\\ub94f\\ub951\\ub958\\ub959\\ub95c\\ub960\\ub968\\ub969\\ufffd\".split(\"\"),e=0;e!=r[183].length;++e)65533!==r[183][e].charCodeAt(0)&&(n[r[183][e]]=46848+e,t[46848+e]=r[183][e]);for(r[184]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud1d0\\ud1d1\\ud1d2\\ud1d3\\ud1d4\\ud1d5\\ud1d6\\ud1d7\\ud1d9\\ud1da\\ud1db\\ud1dc\\ud1dd\\ud1de\\ud1df\\ud1e0\\ud1e1\\ud1e2\\ud1e3\\ud1e4\\ud1e5\\ud1e6\\ud1e7\\ud1e8\\ud1e9\\ud1ea\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud1eb\\ud1ec\\ud1ed\\ud1ee\\ud1ef\\ud1f0\\ud1f1\\ud1f2\\ud1f3\\ud1f5\\ud1f6\\ud1f7\\ud1f9\\ud1fa\\ud1fb\\ud1fc\\ud1fd\\ud1fe\\ud1ff\\ud200\\ud201\\ud202\\ud203\\ud204\\ud205\\ud206\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud208\\ud20a\\ud20b\\ud20c\\ud20d\\ud20e\\ud20f\\ud211\\ud212\\ud213\\ud214\\ud215\\ud216\\ud217\\ud218\\ud219\\ud21a\\ud21b\\ud21c\\ud21d\\ud21e\\ud21f\\ud220\\ud221\\ud222\\ud223\\ud224\\ud225\\ud226\\ud227\\ud228\\ud229\\ub96b\\ub96d\\ub974\\ub975\\ub978\\ub97c\\ub984\\ub985\\ub987\\ub989\\ub98a\\ub98d\\ub98e\\ub9ac\\ub9ad\\ub9b0\\ub9b4\\ub9bc\\ub9bd\\ub9bf\\ub9c1\\ub9c8\\ub9c9\\ub9cc\\ub9ce\\ub9cf\\ub9d0\\ub9d1\\ub9d2\\ub9d8\\ub9d9\\ub9db\\ub9dd\\ub9de\\ub9e1\\ub9e3\\ub9e4\\ub9e5\\ub9e8\\ub9ec\\ub9f4\\ub9f5\\ub9f7\\ub9f8\\ub9f9\\ub9fa\\uba00\\uba01\\uba08\\uba15\\uba38\\uba39\\uba3c\\uba40\\uba42\\uba48\\uba49\\uba4b\\uba4d\\uba4e\\uba53\\uba54\\uba55\\uba58\\uba5c\\uba64\\uba65\\uba67\\uba68\\uba69\\uba70\\uba71\\uba74\\uba78\\uba83\\uba84\\uba85\\uba87\\uba8c\\ubaa8\\ubaa9\\ubaab\\ubaac\\ubab0\\ubab2\\ubab8\\ubab9\\ubabb\\ubabd\\ubac4\\ubac8\\ubad8\\ubad9\\ubafc\\ufffd\".split(\"\"),e=0;e!=r[184].length;++e)65533!==r[184][e].charCodeAt(0)&&(n[r[184][e]]=47104+e,t[47104+e]=r[184][e]);for(r[185]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud22a\\ud22b\\ud22e\\ud22f\\ud231\\ud232\\ud233\\ud235\\ud236\\ud237\\ud238\\ud239\\ud23a\\ud23b\\ud23e\\ud240\\ud242\\ud243\\ud244\\ud245\\ud246\\ud247\\ud249\\ud24a\\ud24b\\ud24c\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud24d\\ud24e\\ud24f\\ud250\\ud251\\ud252\\ud253\\ud254\\ud255\\ud256\\ud257\\ud258\\ud259\\ud25a\\ud25b\\ud25d\\ud25e\\ud25f\\ud260\\ud261\\ud262\\ud263\\ud265\\ud266\\ud267\\ud268\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud269\\ud26a\\ud26b\\ud26c\\ud26d\\ud26e\\ud26f\\ud270\\ud271\\ud272\\ud273\\ud274\\ud275\\ud276\\ud277\\ud278\\ud279\\ud27a\\ud27b\\ud27c\\ud27d\\ud27e\\ud27f\\ud282\\ud283\\ud285\\ud286\\ud287\\ud289\\ud28a\\ud28b\\ud28c\\ubb00\\ubb04\\ubb0d\\ubb0f\\ubb11\\ubb18\\ubb1c\\ubb20\\ubb29\\ubb2b\\ubb34\\ubb35\\ubb36\\ubb38\\ubb3b\\ubb3c\\ubb3d\\ubb3e\\ubb44\\ubb45\\ubb47\\ubb49\\ubb4d\\ubb4f\\ubb50\\ubb54\\ubb58\\ubb61\\ubb63\\ubb6c\\ubb88\\ubb8c\\ubb90\\ubba4\\ubba8\\ubbac\\ubbb4\\ubbb7\\ubbc0\\ubbc4\\ubbc8\\ubbd0\\ubbd3\\ubbf8\\ubbf9\\ubbfc\\ubbff\\ubc00\\ubc02\\ubc08\\ubc09\\ubc0b\\ubc0c\\ubc0d\\ubc0f\\ubc11\\ubc14\\ubc15\\ubc16\\ubc17\\ubc18\\ubc1b\\ubc1c\\ubc1d\\ubc1e\\ubc1f\\ubc24\\ubc25\\ubc27\\ubc29\\ubc2d\\ubc30\\ubc31\\ubc34\\ubc38\\ubc40\\ubc41\\ubc43\\ubc44\\ubc45\\ubc49\\ubc4c\\ubc4d\\ubc50\\ubc5d\\ubc84\\ubc85\\ubc88\\ubc8b\\ubc8c\\ubc8e\\ubc94\\ubc95\\ubc97\\ufffd\".split(\"\"),e=0;e!=r[185].length;++e)65533!==r[185][e].charCodeAt(0)&&(n[r[185][e]]=47360+e,t[47360+e]=r[185][e]);for(r[186]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud28d\\ud28e\\ud28f\\ud292\\ud293\\ud294\\ud296\\ud297\\ud298\\ud299\\ud29a\\ud29b\\ud29d\\ud29e\\ud29f\\ud2a1\\ud2a2\\ud2a3\\ud2a5\\ud2a6\\ud2a7\\ud2a8\\ud2a9\\ud2aa\\ud2ab\\ud2ad\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud2ae\\ud2af\\ud2b0\\ud2b2\\ud2b3\\ud2b4\\ud2b5\\ud2b6\\ud2b7\\ud2ba\\ud2bb\\ud2bd\\ud2be\\ud2c1\\ud2c3\\ud2c4\\ud2c5\\ud2c6\\ud2c7\\ud2ca\\ud2cc\\ud2cd\\ud2ce\\ud2cf\\ud2d0\\ud2d1\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud2d2\\ud2d3\\ud2d5\\ud2d6\\ud2d7\\ud2d9\\ud2da\\ud2db\\ud2dd\\ud2de\\ud2df\\ud2e0\\ud2e1\\ud2e2\\ud2e3\\ud2e6\\ud2e7\\ud2e8\\ud2e9\\ud2ea\\ud2eb\\ud2ec\\ud2ed\\ud2ee\\ud2ef\\ud2f2\\ud2f3\\ud2f5\\ud2f6\\ud2f7\\ud2f9\\ud2fa\\ubc99\\ubc9a\\ubca0\\ubca1\\ubca4\\ubca7\\ubca8\\ubcb0\\ubcb1\\ubcb3\\ubcb4\\ubcb5\\ubcbc\\ubcbd\\ubcc0\\ubcc4\\ubccd\\ubccf\\ubcd0\\ubcd1\\ubcd5\\ubcd8\\ubcdc\\ubcf4\\ubcf5\\ubcf6\\ubcf8\\ubcfc\\ubd04\\ubd05\\ubd07\\ubd09\\ubd10\\ubd14\\ubd24\\ubd2c\\ubd40\\ubd48\\ubd49\\ubd4c\\ubd50\\ubd58\\ubd59\\ubd64\\ubd68\\ubd80\\ubd81\\ubd84\\ubd87\\ubd88\\ubd89\\ubd8a\\ubd90\\ubd91\\ubd93\\ubd95\\ubd99\\ubd9a\\ubd9c\\ubda4\\ubdb0\\ubdb8\\ubdd4\\ubdd5\\ubdd8\\ubddc\\ubde9\\ubdf0\\ubdf4\\ubdf8\\ube00\\ube03\\ube05\\ube0c\\ube0d\\ube10\\ube14\\ube1c\\ube1d\\ube1f\\ube44\\ube45\\ube48\\ube4c\\ube4e\\ube54\\ube55\\ube57\\ube59\\ube5a\\ube5b\\ube60\\ube61\\ube64\\ufffd\".split(\"\"),e=0;e!=r[186].length;++e)65533!==r[186][e].charCodeAt(0)&&(n[r[186][e]]=47616+e,t[47616+e]=r[186][e]);for(r[187]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud2fb\\ud2fc\\ud2fd\\ud2fe\\ud2ff\\ud302\\ud304\\ud306\\ud307\\ud308\\ud309\\ud30a\\ud30b\\ud30f\\ud311\\ud312\\ud313\\ud315\\ud317\\ud318\\ud319\\ud31a\\ud31b\\ud31e\\ud322\\ud323\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud324\\ud326\\ud327\\ud32a\\ud32b\\ud32d\\ud32e\\ud32f\\ud331\\ud332\\ud333\\ud334\\ud335\\ud336\\ud337\\ud33a\\ud33e\\ud33f\\ud340\\ud341\\ud342\\ud343\\ud346\\ud347\\ud348\\ud349\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud34a\\ud34b\\ud34c\\ud34d\\ud34e\\ud34f\\ud350\\ud351\\ud352\\ud353\\ud354\\ud355\\ud356\\ud357\\ud358\\ud359\\ud35a\\ud35b\\ud35c\\ud35d\\ud35e\\ud35f\\ud360\\ud361\\ud362\\ud363\\ud364\\ud365\\ud366\\ud367\\ud368\\ud369\\ube68\\ube6a\\ube70\\ube71\\ube73\\ube74\\ube75\\ube7b\\ube7c\\ube7d\\ube80\\ube84\\ube8c\\ube8d\\ube8f\\ube90\\ube91\\ube98\\ube99\\ubea8\\ubed0\\ubed1\\ubed4\\ubed7\\ubed8\\ubee0\\ubee3\\ubee4\\ubee5\\ubeec\\ubf01\\ubf08\\ubf09\\ubf18\\ubf19\\ubf1b\\ubf1c\\ubf1d\\ubf40\\ubf41\\ubf44\\ubf48\\ubf50\\ubf51\\ubf55\\ubf94\\ubfb0\\ubfc5\\ubfcc\\ubfcd\\ubfd0\\ubfd4\\ubfdc\\ubfdf\\ubfe1\\uc03c\\uc051\\uc058\\uc05c\\uc060\\uc068\\uc069\\uc090\\uc091\\uc094\\uc098\\uc0a0\\uc0a1\\uc0a3\\uc0a5\\uc0ac\\uc0ad\\uc0af\\uc0b0\\uc0b3\\uc0b4\\uc0b5\\uc0b6\\uc0bc\\uc0bd\\uc0bf\\uc0c0\\uc0c1\\uc0c5\\uc0c8\\uc0c9\\uc0cc\\uc0d0\\uc0d8\\uc0d9\\uc0db\\uc0dc\\uc0dd\\uc0e4\\ufffd\".split(\"\"),e=0;e!=r[187].length;++e)65533!==r[187][e].charCodeAt(0)&&(n[r[187][e]]=47872+e,t[47872+e]=r[187][e]);for(r[188]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud36a\\ud36b\\ud36c\\ud36d\\ud36e\\ud36f\\ud370\\ud371\\ud372\\ud373\\ud374\\ud375\\ud376\\ud377\\ud378\\ud379\\ud37a\\ud37b\\ud37e\\ud37f\\ud381\\ud382\\ud383\\ud385\\ud386\\ud387\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud388\\ud389\\ud38a\\ud38b\\ud38e\\ud392\\ud393\\ud394\\ud395\\ud396\\ud397\\ud39a\\ud39b\\ud39d\\ud39e\\ud39f\\ud3a1\\ud3a2\\ud3a3\\ud3a4\\ud3a5\\ud3a6\\ud3a7\\ud3aa\\ud3ac\\ud3ae\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud3af\\ud3b0\\ud3b1\\ud3b2\\ud3b3\\ud3b5\\ud3b6\\ud3b7\\ud3b9\\ud3ba\\ud3bb\\ud3bd\\ud3be\\ud3bf\\ud3c0\\ud3c1\\ud3c2\\ud3c3\\ud3c6\\ud3c7\\ud3ca\\ud3cb\\ud3cc\\ud3cd\\ud3ce\\ud3cf\\ud3d1\\ud3d2\\ud3d3\\ud3d4\\ud3d5\\ud3d6\\uc0e5\\uc0e8\\uc0ec\\uc0f4\\uc0f5\\uc0f7\\uc0f9\\uc100\\uc104\\uc108\\uc110\\uc115\\uc11c\\uc11d\\uc11e\\uc11f\\uc120\\uc123\\uc124\\uc126\\uc127\\uc12c\\uc12d\\uc12f\\uc130\\uc131\\uc136\\uc138\\uc139\\uc13c\\uc140\\uc148\\uc149\\uc14b\\uc14c\\uc14d\\uc154\\uc155\\uc158\\uc15c\\uc164\\uc165\\uc167\\uc168\\uc169\\uc170\\uc174\\uc178\\uc185\\uc18c\\uc18d\\uc18e\\uc190\\uc194\\uc196\\uc19c\\uc19d\\uc19f\\uc1a1\\uc1a5\\uc1a8\\uc1a9\\uc1ac\\uc1b0\\uc1bd\\uc1c4\\uc1c8\\uc1cc\\uc1d4\\uc1d7\\uc1d8\\uc1e0\\uc1e4\\uc1e8\\uc1f0\\uc1f1\\uc1f3\\uc1fc\\uc1fd\\uc200\\uc204\\uc20c\\uc20d\\uc20f\\uc211\\uc218\\uc219\\uc21c\\uc21f\\uc220\\uc228\\uc229\\uc22b\\uc22d\\ufffd\".split(\"\"),e=0;e!=r[188].length;++e)65533!==r[188][e].charCodeAt(0)&&(n[r[188][e]]=48128+e,t[48128+e]=r[188][e]);for(r[189]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud3d7\\ud3d9\\ud3da\\ud3db\\ud3dc\\ud3dd\\ud3de\\ud3df\\ud3e0\\ud3e2\\ud3e4\\ud3e5\\ud3e6\\ud3e7\\ud3e8\\ud3e9\\ud3ea\\ud3eb\\ud3ee\\ud3ef\\ud3f1\\ud3f2\\ud3f3\\ud3f5\\ud3f6\\ud3f7\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud3f8\\ud3f9\\ud3fa\\ud3fb\\ud3fe\\ud400\\ud402\\ud403\\ud404\\ud405\\ud406\\ud407\\ud409\\ud40a\\ud40b\\ud40c\\ud40d\\ud40e\\ud40f\\ud410\\ud411\\ud412\\ud413\\ud414\\ud415\\ud416\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud417\\ud418\\ud419\\ud41a\\ud41b\\ud41c\\ud41e\\ud41f\\ud420\\ud421\\ud422\\ud423\\ud424\\ud425\\ud426\\ud427\\ud428\\ud429\\ud42a\\ud42b\\ud42c\\ud42d\\ud42e\\ud42f\\ud430\\ud431\\ud432\\ud433\\ud434\\ud435\\ud436\\ud437\\uc22f\\uc231\\uc232\\uc234\\uc248\\uc250\\uc251\\uc254\\uc258\\uc260\\uc265\\uc26c\\uc26d\\uc270\\uc274\\uc27c\\uc27d\\uc27f\\uc281\\uc288\\uc289\\uc290\\uc298\\uc29b\\uc29d\\uc2a4\\uc2a5\\uc2a8\\uc2ac\\uc2ad\\uc2b4\\uc2b5\\uc2b7\\uc2b9\\uc2dc\\uc2dd\\uc2e0\\uc2e3\\uc2e4\\uc2eb\\uc2ec\\uc2ed\\uc2ef\\uc2f1\\uc2f6\\uc2f8\\uc2f9\\uc2fb\\uc2fc\\uc300\\uc308\\uc309\\uc30c\\uc30d\\uc313\\uc314\\uc315\\uc318\\uc31c\\uc324\\uc325\\uc328\\uc329\\uc345\\uc368\\uc369\\uc36c\\uc370\\uc372\\uc378\\uc379\\uc37c\\uc37d\\uc384\\uc388\\uc38c\\uc3c0\\uc3d8\\uc3d9\\uc3dc\\uc3df\\uc3e0\\uc3e2\\uc3e8\\uc3e9\\uc3ed\\uc3f4\\uc3f5\\uc3f8\\uc408\\uc410\\uc424\\uc42c\\uc430\\ufffd\".split(\"\"),e=0;e!=r[189].length;++e)65533!==r[189][e].charCodeAt(0)&&(n[r[189][e]]=48384+e,t[48384+e]=r[189][e]);for(r[190]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud438\\ud439\\ud43a\\ud43b\\ud43c\\ud43d\\ud43e\\ud43f\\ud441\\ud442\\ud443\\ud445\\ud446\\ud447\\ud448\\ud449\\ud44a\\ud44b\\ud44c\\ud44d\\ud44e\\ud44f\\ud450\\ud451\\ud452\\ud453\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud454\\ud455\\ud456\\ud457\\ud458\\ud459\\ud45a\\ud45b\\ud45d\\ud45e\\ud45f\\ud461\\ud462\\ud463\\ud465\\ud466\\ud467\\ud468\\ud469\\ud46a\\ud46b\\ud46c\\ud46e\\ud470\\ud471\\ud472\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud473\\ud474\\ud475\\ud476\\ud477\\ud47a\\ud47b\\ud47d\\ud47e\\ud481\\ud483\\ud484\\ud485\\ud486\\ud487\\ud48a\\ud48c\\ud48e\\ud48f\\ud490\\ud491\\ud492\\ud493\\ud495\\ud496\\ud497\\ud498\\ud499\\ud49a\\ud49b\\ud49c\\ud49d\\uc434\\uc43c\\uc43d\\uc448\\uc464\\uc465\\uc468\\uc46c\\uc474\\uc475\\uc479\\uc480\\uc494\\uc49c\\uc4b8\\uc4bc\\uc4e9\\uc4f0\\uc4f1\\uc4f4\\uc4f8\\uc4fa\\uc4ff\\uc500\\uc501\\uc50c\\uc510\\uc514\\uc51c\\uc528\\uc529\\uc52c\\uc530\\uc538\\uc539\\uc53b\\uc53d\\uc544\\uc545\\uc548\\uc549\\uc54a\\uc54c\\uc54d\\uc54e\\uc553\\uc554\\uc555\\uc557\\uc558\\uc559\\uc55d\\uc55e\\uc560\\uc561\\uc564\\uc568\\uc570\\uc571\\uc573\\uc574\\uc575\\uc57c\\uc57d\\uc580\\uc584\\uc587\\uc58c\\uc58d\\uc58f\\uc591\\uc595\\uc597\\uc598\\uc59c\\uc5a0\\uc5a9\\uc5b4\\uc5b5\\uc5b8\\uc5b9\\uc5bb\\uc5bc\\uc5bd\\uc5be\\uc5c4\\uc5c5\\uc5c6\\uc5c7\\uc5c8\\uc5c9\\uc5ca\\uc5cc\\uc5ce\\ufffd\".split(\"\"),e=0;e!=r[190].length;++e)65533!==r[190][e].charCodeAt(0)&&(n[r[190][e]]=48640+e,t[48640+e]=r[190][e]);for(r[191]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud49e\\ud49f\\ud4a0\\ud4a1\\ud4a2\\ud4a3\\ud4a4\\ud4a5\\ud4a6\\ud4a7\\ud4a8\\ud4aa\\ud4ab\\ud4ac\\ud4ad\\ud4ae\\ud4af\\ud4b0\\ud4b1\\ud4b2\\ud4b3\\ud4b4\\ud4b5\\ud4b6\\ud4b7\\ud4b8\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud4b9\\ud4ba\\ud4bb\\ud4bc\\ud4bd\\ud4be\\ud4bf\\ud4c0\\ud4c1\\ud4c2\\ud4c3\\ud4c4\\ud4c5\\ud4c6\\ud4c7\\ud4c8\\ud4c9\\ud4ca\\ud4cb\\ud4cd\\ud4ce\\ud4cf\\ud4d1\\ud4d2\\ud4d3\\ud4d5\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud4d6\\ud4d7\\ud4d8\\ud4d9\\ud4da\\ud4db\\ud4dd\\ud4de\\ud4e0\\ud4e1\\ud4e2\\ud4e3\\ud4e4\\ud4e5\\ud4e6\\ud4e7\\ud4e9\\ud4ea\\ud4eb\\ud4ed\\ud4ee\\ud4ef\\ud4f1\\ud4f2\\ud4f3\\ud4f4\\ud4f5\\ud4f6\\ud4f7\\ud4f9\\ud4fa\\ud4fc\\uc5d0\\uc5d1\\uc5d4\\uc5d8\\uc5e0\\uc5e1\\uc5e3\\uc5e5\\uc5ec\\uc5ed\\uc5ee\\uc5f0\\uc5f4\\uc5f6\\uc5f7\\uc5fc\\uc5fd\\uc5fe\\uc5ff\\uc600\\uc601\\uc605\\uc606\\uc607\\uc608\\uc60c\\uc610\\uc618\\uc619\\uc61b\\uc61c\\uc624\\uc625\\uc628\\uc62c\\uc62d\\uc62e\\uc630\\uc633\\uc634\\uc635\\uc637\\uc639\\uc63b\\uc640\\uc641\\uc644\\uc648\\uc650\\uc651\\uc653\\uc654\\uc655\\uc65c\\uc65d\\uc660\\uc66c\\uc66f\\uc671\\uc678\\uc679\\uc67c\\uc680\\uc688\\uc689\\uc68b\\uc68d\\uc694\\uc695\\uc698\\uc69c\\uc6a4\\uc6a5\\uc6a7\\uc6a9\\uc6b0\\uc6b1\\uc6b4\\uc6b8\\uc6b9\\uc6ba\\uc6c0\\uc6c1\\uc6c3\\uc6c5\\uc6cc\\uc6cd\\uc6d0\\uc6d4\\uc6dc\\uc6dd\\uc6e0\\uc6e1\\uc6e8\\ufffd\".split(\"\"),e=0;e!=r[191].length;++e)65533!==r[191][e].charCodeAt(0)&&(n[r[191][e]]=48896+e,t[48896+e]=r[191][e]);for(r[192]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud4fe\\ud4ff\\ud500\\ud501\\ud502\\ud503\\ud505\\ud506\\ud507\\ud509\\ud50a\\ud50b\\ud50d\\ud50e\\ud50f\\ud510\\ud511\\ud512\\ud513\\ud516\\ud518\\ud519\\ud51a\\ud51b\\ud51c\\ud51d\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud51e\\ud51f\\ud520\\ud521\\ud522\\ud523\\ud524\\ud525\\ud526\\ud527\\ud528\\ud529\\ud52a\\ud52b\\ud52c\\ud52d\\ud52e\\ud52f\\ud530\\ud531\\ud532\\ud533\\ud534\\ud535\\ud536\\ud537\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud538\\ud539\\ud53a\\ud53b\\ud53e\\ud53f\\ud541\\ud542\\ud543\\ud545\\ud546\\ud547\\ud548\\ud549\\ud54a\\ud54b\\ud54e\\ud550\\ud552\\ud553\\ud554\\ud555\\ud556\\ud557\\ud55a\\ud55b\\ud55d\\ud55e\\ud55f\\ud561\\ud562\\ud563\\uc6e9\\uc6ec\\uc6f0\\uc6f8\\uc6f9\\uc6fd\\uc704\\uc705\\uc708\\uc70c\\uc714\\uc715\\uc717\\uc719\\uc720\\uc721\\uc724\\uc728\\uc730\\uc731\\uc733\\uc735\\uc737\\uc73c\\uc73d\\uc740\\uc744\\uc74a\\uc74c\\uc74d\\uc74f\\uc751\\uc752\\uc753\\uc754\\uc755\\uc756\\uc757\\uc758\\uc75c\\uc760\\uc768\\uc76b\\uc774\\uc775\\uc778\\uc77c\\uc77d\\uc77e\\uc783\\uc784\\uc785\\uc787\\uc788\\uc789\\uc78a\\uc78e\\uc790\\uc791\\uc794\\uc796\\uc797\\uc798\\uc79a\\uc7a0\\uc7a1\\uc7a3\\uc7a4\\uc7a5\\uc7a6\\uc7ac\\uc7ad\\uc7b0\\uc7b4\\uc7bc\\uc7bd\\uc7bf\\uc7c0\\uc7c1\\uc7c8\\uc7c9\\uc7cc\\uc7ce\\uc7d0\\uc7d8\\uc7dd\\uc7e4\\uc7e8\\uc7ec\\uc800\\uc801\\uc804\\uc808\\uc80a\\ufffd\".split(\"\"),e=0;e!=r[192].length;++e)65533!==r[192][e].charCodeAt(0)&&(n[r[192][e]]=49152+e,t[49152+e]=r[192][e]);for(r[193]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud564\\ud566\\ud567\\ud56a\\ud56c\\ud56e\\ud56f\\ud570\\ud571\\ud572\\ud573\\ud576\\ud577\\ud579\\ud57a\\ud57b\\ud57d\\ud57e\\ud57f\\ud580\\ud581\\ud582\\ud583\\ud586\\ud58a\\ud58b\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud58c\\ud58d\\ud58e\\ud58f\\ud591\\ud592\\ud593\\ud594\\ud595\\ud596\\ud597\\ud598\\ud599\\ud59a\\ud59b\\ud59c\\ud59d\\ud59e\\ud59f\\ud5a0\\ud5a1\\ud5a2\\ud5a3\\ud5a4\\ud5a6\\ud5a7\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud5a8\\ud5a9\\ud5aa\\ud5ab\\ud5ac\\ud5ad\\ud5ae\\ud5af\\ud5b0\\ud5b1\\ud5b2\\ud5b3\\ud5b4\\ud5b5\\ud5b6\\ud5b7\\ud5b8\\ud5b9\\ud5ba\\ud5bb\\ud5bc\\ud5bd\\ud5be\\ud5bf\\ud5c0\\ud5c1\\ud5c2\\ud5c3\\ud5c4\\ud5c5\\ud5c6\\ud5c7\\uc810\\uc811\\uc813\\uc815\\uc816\\uc81c\\uc81d\\uc820\\uc824\\uc82c\\uc82d\\uc82f\\uc831\\uc838\\uc83c\\uc840\\uc848\\uc849\\uc84c\\uc84d\\uc854\\uc870\\uc871\\uc874\\uc878\\uc87a\\uc880\\uc881\\uc883\\uc885\\uc886\\uc887\\uc88b\\uc88c\\uc88d\\uc894\\uc89d\\uc89f\\uc8a1\\uc8a8\\uc8bc\\uc8bd\\uc8c4\\uc8c8\\uc8cc\\uc8d4\\uc8d5\\uc8d7\\uc8d9\\uc8e0\\uc8e1\\uc8e4\\uc8f5\\uc8fc\\uc8fd\\uc900\\uc904\\uc905\\uc906\\uc90c\\uc90d\\uc90f\\uc911\\uc918\\uc92c\\uc934\\uc950\\uc951\\uc954\\uc958\\uc960\\uc961\\uc963\\uc96c\\uc970\\uc974\\uc97c\\uc988\\uc989\\uc98c\\uc990\\uc998\\uc999\\uc99b\\uc99d\\uc9c0\\uc9c1\\uc9c4\\uc9c7\\uc9c8\\uc9ca\\uc9d0\\uc9d1\\uc9d3\\ufffd\".split(\"\"),e=0;e!=r[193].length;++e)65533!==r[193][e].charCodeAt(0)&&(n[r[193][e]]=49408+e,t[49408+e]=r[193][e]);for(r[194]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud5ca\\ud5cb\\ud5cd\\ud5ce\\ud5cf\\ud5d1\\ud5d3\\ud5d4\\ud5d5\\ud5d6\\ud5d7\\ud5da\\ud5dc\\ud5de\\ud5df\\ud5e0\\ud5e1\\ud5e2\\ud5e3\\ud5e6\\ud5e7\\ud5e9\\ud5ea\\ud5eb\\ud5ed\\ud5ee\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud5ef\\ud5f0\\ud5f1\\ud5f2\\ud5f3\\ud5f6\\ud5f8\\ud5fa\\ud5fb\\ud5fc\\ud5fd\\ud5fe\\ud5ff\\ud602\\ud603\\ud605\\ud606\\ud607\\ud609\\ud60a\\ud60b\\ud60c\\ud60d\\ud60e\\ud60f\\ud612\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud616\\ud617\\ud618\\ud619\\ud61a\\ud61b\\ud61d\\ud61e\\ud61f\\ud621\\ud622\\ud623\\ud625\\ud626\\ud627\\ud628\\ud629\\ud62a\\ud62b\\ud62c\\ud62e\\ud62f\\ud630\\ud631\\ud632\\ud633\\ud634\\ud635\\ud636\\ud637\\ud63a\\ud63b\\uc9d5\\uc9d6\\uc9d9\\uc9da\\uc9dc\\uc9dd\\uc9e0\\uc9e2\\uc9e4\\uc9e7\\uc9ec\\uc9ed\\uc9ef\\uc9f0\\uc9f1\\uc9f8\\uc9f9\\uc9fc\\uca00\\uca08\\uca09\\uca0b\\uca0c\\uca0d\\uca14\\uca18\\uca29\\uca4c\\uca4d\\uca50\\uca54\\uca5c\\uca5d\\uca5f\\uca60\\uca61\\uca68\\uca7d\\uca84\\uca98\\ucabc\\ucabd\\ucac0\\ucac4\\ucacc\\ucacd\\ucacf\\ucad1\\ucad3\\ucad8\\ucad9\\ucae0\\ucaec\\ucaf4\\ucb08\\ucb10\\ucb14\\ucb18\\ucb20\\ucb21\\ucb41\\ucb48\\ucb49\\ucb4c\\ucb50\\ucb58\\ucb59\\ucb5d\\ucb64\\ucb78\\ucb79\\ucb9c\\ucbb8\\ucbd4\\ucbe4\\ucbe7\\ucbe9\\ucc0c\\ucc0d\\ucc10\\ucc14\\ucc1c\\ucc1d\\ucc21\\ucc22\\ucc27\\ucc28\\ucc29\\ucc2c\\ucc2e\\ucc30\\ucc38\\ucc39\\ucc3b\\ufffd\".split(\"\"),e=0;e!=r[194].length;++e)65533!==r[194][e].charCodeAt(0)&&(n[r[194][e]]=49664+e,t[49664+e]=r[194][e]);for(r[195]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud63d\\ud63e\\ud63f\\ud641\\ud642\\ud643\\ud644\\ud646\\ud647\\ud64a\\ud64c\\ud64e\\ud64f\\ud650\\ud652\\ud653\\ud656\\ud657\\ud659\\ud65a\\ud65b\\ud65d\\ud65e\\ud65f\\ud660\\ud661\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud662\\ud663\\ud664\\ud665\\ud666\\ud668\\ud66a\\ud66b\\ud66c\\ud66d\\ud66e\\ud66f\\ud672\\ud673\\ud675\\ud676\\ud677\\ud678\\ud679\\ud67a\\ud67b\\ud67c\\ud67d\\ud67e\\ud67f\\ud680\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud681\\ud682\\ud684\\ud686\\ud687\\ud688\\ud689\\ud68a\\ud68b\\ud68e\\ud68f\\ud691\\ud692\\ud693\\ud695\\ud696\\ud697\\ud698\\ud699\\ud69a\\ud69b\\ud69c\\ud69e\\ud6a0\\ud6a2\\ud6a3\\ud6a4\\ud6a5\\ud6a6\\ud6a7\\ud6a9\\ud6aa\\ucc3c\\ucc3d\\ucc3e\\ucc44\\ucc45\\ucc48\\ucc4c\\ucc54\\ucc55\\ucc57\\ucc58\\ucc59\\ucc60\\ucc64\\ucc66\\ucc68\\ucc70\\ucc75\\ucc98\\ucc99\\ucc9c\\ucca0\\ucca8\\ucca9\\uccab\\uccac\\uccad\\uccb4\\uccb5\\uccb8\\uccbc\\uccc4\\uccc5\\uccc7\\uccc9\\uccd0\\uccd4\\ucce4\\uccec\\uccf0\\ucd01\\ucd08\\ucd09\\ucd0c\\ucd10\\ucd18\\ucd19\\ucd1b\\ucd1d\\ucd24\\ucd28\\ucd2c\\ucd39\\ucd5c\\ucd60\\ucd64\\ucd6c\\ucd6d\\ucd6f\\ucd71\\ucd78\\ucd88\\ucd94\\ucd95\\ucd98\\ucd9c\\ucda4\\ucda5\\ucda7\\ucda9\\ucdb0\\ucdc4\\ucdcc\\ucdd0\\ucde8\\ucdec\\ucdf0\\ucdf8\\ucdf9\\ucdfb\\ucdfd\\uce04\\uce08\\uce0c\\uce14\\uce19\\uce20\\uce21\\uce24\\uce28\\uce30\\uce31\\uce33\\uce35\\ufffd\".split(\"\"),e=0;e!=r[195].length;++e)65533!==r[195][e].charCodeAt(0)&&(n[r[195][e]]=49920+e,t[49920+e]=r[195][e]);for(r[196]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud6ab\\ud6ad\\ud6ae\\ud6af\\ud6b1\\ud6b2\\ud6b3\\ud6b4\\ud6b5\\ud6b6\\ud6b7\\ud6b8\\ud6ba\\ud6bc\\ud6bd\\ud6be\\ud6bf\\ud6c0\\ud6c1\\ud6c2\\ud6c3\\ud6c6\\ud6c7\\ud6c9\\ud6ca\\ud6cb\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud6cd\\ud6ce\\ud6cf\\ud6d0\\ud6d2\\ud6d3\\ud6d5\\ud6d6\\ud6d8\\ud6da\\ud6db\\ud6dc\\ud6dd\\ud6de\\ud6df\\ud6e1\\ud6e2\\ud6e3\\ud6e5\\ud6e6\\ud6e7\\ud6e9\\ud6ea\\ud6eb\\ud6ec\\ud6ed\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud6ee\\ud6ef\\ud6f1\\ud6f2\\ud6f3\\ud6f4\\ud6f6\\ud6f7\\ud6f8\\ud6f9\\ud6fa\\ud6fb\\ud6fe\\ud6ff\\ud701\\ud702\\ud703\\ud705\\ud706\\ud707\\ud708\\ud709\\ud70a\\ud70b\\ud70c\\ud70d\\ud70e\\ud70f\\ud710\\ud712\\ud713\\ud714\\uce58\\uce59\\uce5c\\uce5f\\uce60\\uce61\\uce68\\uce69\\uce6b\\uce6d\\uce74\\uce75\\uce78\\uce7c\\uce84\\uce85\\uce87\\uce89\\uce90\\uce91\\uce94\\uce98\\ucea0\\ucea1\\ucea3\\ucea4\\ucea5\\uceac\\ucead\\ucec1\\ucee4\\ucee5\\ucee8\\uceeb\\uceec\\ucef4\\ucef5\\ucef7\\ucef8\\ucef9\\ucf00\\ucf01\\ucf04\\ucf08\\ucf10\\ucf11\\ucf13\\ucf15\\ucf1c\\ucf20\\ucf24\\ucf2c\\ucf2d\\ucf2f\\ucf30\\ucf31\\ucf38\\ucf54\\ucf55\\ucf58\\ucf5c\\ucf64\\ucf65\\ucf67\\ucf69\\ucf70\\ucf71\\ucf74\\ucf78\\ucf80\\ucf85\\ucf8c\\ucfa1\\ucfa8\\ucfb0\\ucfc4\\ucfe0\\ucfe1\\ucfe4\\ucfe8\\ucff0\\ucff1\\ucff3\\ucff5\\ucffc\\ud000\\ud004\\ud011\\ud018\\ud02d\\ud034\\ud035\\ud038\\ud03c\\ufffd\".split(\"\"),e=0;e!=r[196].length;++e)65533!==r[196][e].charCodeAt(0)&&(n[r[196][e]]=50176+e,t[50176+e]=r[196][e]);for(r[197]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud715\\ud716\\ud717\\ud71a\\ud71b\\ud71d\\ud71e\\ud71f\\ud721\\ud722\\ud723\\ud724\\ud725\\ud726\\ud727\\ud72a\\ud72c\\ud72e\\ud72f\\ud730\\ud731\\ud732\\ud733\\ud736\\ud737\\ud739\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud73a\\ud73b\\ud73d\\ud73e\\ud73f\\ud740\\ud741\\ud742\\ud743\\ud745\\ud746\\ud748\\ud74a\\ud74b\\ud74c\\ud74d\\ud74e\\ud74f\\ud752\\ud753\\ud755\\ud75a\\ud75b\\ud75c\\ud75d\\ud75e\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud75f\\ud762\\ud764\\ud766\\ud767\\ud768\\ud76a\\ud76b\\ud76d\\ud76e\\ud76f\\ud771\\ud772\\ud773\\ud775\\ud776\\ud777\\ud778\\ud779\\ud77a\\ud77b\\ud77e\\ud77f\\ud780\\ud782\\ud783\\ud784\\ud785\\ud786\\ud787\\ud78a\\ud78b\\ud044\\ud045\\ud047\\ud049\\ud050\\ud054\\ud058\\ud060\\ud06c\\ud06d\\ud070\\ud074\\ud07c\\ud07d\\ud081\\ud0a4\\ud0a5\\ud0a8\\ud0ac\\ud0b4\\ud0b5\\ud0b7\\ud0b9\\ud0c0\\ud0c1\\ud0c4\\ud0c8\\ud0c9\\ud0d0\\ud0d1\\ud0d3\\ud0d4\\ud0d5\\ud0dc\\ud0dd\\ud0e0\\ud0e4\\ud0ec\\ud0ed\\ud0ef\\ud0f0\\ud0f1\\ud0f8\\ud10d\\ud130\\ud131\\ud134\\ud138\\ud13a\\ud140\\ud141\\ud143\\ud144\\ud145\\ud14c\\ud14d\\ud150\\ud154\\ud15c\\ud15d\\ud15f\\ud161\\ud168\\ud16c\\ud17c\\ud184\\ud188\\ud1a0\\ud1a1\\ud1a4\\ud1a8\\ud1b0\\ud1b1\\ud1b3\\ud1b5\\ud1ba\\ud1bc\\ud1c0\\ud1d8\\ud1f4\\ud1f8\\ud207\\ud209\\ud210\\ud22c\\ud22d\\ud230\\ud234\\ud23c\\ud23d\\ud23f\\ud241\\ud248\\ud25c\\ufffd\".split(\"\"),e=0;e!=r[197].length;++e)65533!==r[197][e].charCodeAt(0)&&(n[r[197][e]]=50432+e,t[50432+e]=r[197][e]);for(r[198]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud78d\\ud78e\\ud78f\\ud791\\ud792\\ud793\\ud794\\ud795\\ud796\\ud797\\ud79a\\ud79c\\ud79e\\ud79f\\ud7a0\\ud7a1\\ud7a2\\ud7a3\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud264\\ud280\\ud281\\ud284\\ud288\\ud290\\ud291\\ud295\\ud29c\\ud2a0\\ud2a4\\ud2ac\\ud2b1\\ud2b8\\ud2b9\\ud2bc\\ud2bf\\ud2c0\\ud2c2\\ud2c8\\ud2c9\\ud2cb\\ud2d4\\ud2d8\\ud2dc\\ud2e4\\ud2e5\\ud2f0\\ud2f1\\ud2f4\\ud2f8\\ud300\\ud301\\ud303\\ud305\\ud30c\\ud30d\\ud30e\\ud310\\ud314\\ud316\\ud31c\\ud31d\\ud31f\\ud320\\ud321\\ud325\\ud328\\ud329\\ud32c\\ud330\\ud338\\ud339\\ud33b\\ud33c\\ud33d\\ud344\\ud345\\ud37c\\ud37d\\ud380\\ud384\\ud38c\\ud38d\\ud38f\\ud390\\ud391\\ud398\\ud399\\ud39c\\ud3a0\\ud3a8\\ud3a9\\ud3ab\\ud3ad\\ud3b4\\ud3b8\\ud3bc\\ud3c4\\ud3c5\\ud3c8\\ud3c9\\ud3d0\\ud3d8\\ud3e1\\ud3e3\\ud3ec\\ud3ed\\ud3f0\\ud3f4\\ud3fc\\ud3fd\\ud3ff\\ud401\\ufffd\".split(\"\"),e=0;e!=r[198].length;++e)65533!==r[198][e].charCodeAt(0)&&(n[r[198][e]]=50688+e,t[50688+e]=r[198][e]);for(r[199]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud408\\ud41d\\ud440\\ud444\\ud45c\\ud460\\ud464\\ud46d\\ud46f\\ud478\\ud479\\ud47c\\ud47f\\ud480\\ud482\\ud488\\ud489\\ud48b\\ud48d\\ud494\\ud4a9\\ud4cc\\ud4d0\\ud4d4\\ud4dc\\ud4df\\ud4e8\\ud4ec\\ud4f0\\ud4f8\\ud4fb\\ud4fd\\ud504\\ud508\\ud50c\\ud514\\ud515\\ud517\\ud53c\\ud53d\\ud540\\ud544\\ud54c\\ud54d\\ud54f\\ud551\\ud558\\ud559\\ud55c\\ud560\\ud565\\ud568\\ud569\\ud56b\\ud56d\\ud574\\ud575\\ud578\\ud57c\\ud584\\ud585\\ud587\\ud588\\ud589\\ud590\\ud5a5\\ud5c8\\ud5c9\\ud5cc\\ud5d0\\ud5d2\\ud5d8\\ud5d9\\ud5db\\ud5dd\\ud5e4\\ud5e5\\ud5e8\\ud5ec\\ud5f4\\ud5f5\\ud5f7\\ud5f9\\ud600\\ud601\\ud604\\ud608\\ud610\\ud611\\ud613\\ud614\\ud615\\ud61c\\ud620\\ufffd\".split(\"\"),e=0;e!=r[199].length;++e)65533!==r[199][e].charCodeAt(0)&&(n[r[199][e]]=50944+e,t[50944+e]=r[199][e]);for(r[200]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ud624\\ud62d\\ud638\\ud639\\ud63c\\ud640\\ud645\\ud648\\ud649\\ud64b\\ud64d\\ud651\\ud654\\ud655\\ud658\\ud65c\\ud667\\ud669\\ud670\\ud671\\ud674\\ud683\\ud685\\ud68c\\ud68d\\ud690\\ud694\\ud69d\\ud69f\\ud6a1\\ud6a8\\ud6ac\\ud6b0\\ud6b9\\ud6bb\\ud6c4\\ud6c5\\ud6c8\\ud6cc\\ud6d1\\ud6d4\\ud6d7\\ud6d9\\ud6e0\\ud6e4\\ud6e8\\ud6f0\\ud6f5\\ud6fc\\ud6fd\\ud700\\ud704\\ud711\\ud718\\ud719\\ud71c\\ud720\\ud728\\ud729\\ud72b\\ud72d\\ud734\\ud735\\ud738\\ud73c\\ud744\\ud747\\ud749\\ud750\\ud751\\ud754\\ud756\\ud757\\ud758\\ud759\\ud760\\ud761\\ud763\\ud765\\ud769\\ud76c\\ud770\\ud774\\ud77c\\ud77d\\ud781\\ud788\\ud789\\ud78c\\ud790\\ud798\\ud799\\ud79b\\ud79d\\ufffd\".split(\"\"),e=0;e!=r[200].length;++e)65533!==r[200][e].charCodeAt(0)&&(n[r[200][e]]=51200+e,t[51200+e]=r[200][e]);for(r[202]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u4f3d\\u4f73\\u5047\\u50f9\\u52a0\\u53ef\\u5475\\u54e5\\u5609\\u5ac1\\u5bb6\\u6687\\u67b6\\u67b7\\u67ef\\u6b4c\\u73c2\\u75c2\\u7a3c\\u82db\\u8304\\u8857\\u8888\\u8a36\\u8cc8\\u8dcf\\u8efb\\u8fe6\\u99d5\\u523b\\u5374\\u5404\\u606a\\u6164\\u6bbc\\u73cf\\u811a\\u89ba\\u89d2\\u95a3\\u4f83\\u520a\\u58be\\u5978\\u59e6\\u5e72\\u5e79\\u61c7\\u63c0\\u6746\\u67ec\\u687f\\u6f97\\u764e\\u770b\\u78f5\\u7a08\\u7aff\\u7c21\\u809d\\u826e\\u8271\\u8aeb\\u9593\\u4e6b\\u559d\\u66f7\\u6e34\\u78a3\\u7aed\\u845b\\u8910\\u874e\\u97a8\\u52d8\\u574e\\u582a\\u5d4c\\u611f\\u61be\\u6221\\u6562\\u67d1\\u6a44\\u6e1b\\u7518\\u75b3\\u76e3\\u77b0\\u7d3a\\u90af\\u9451\\u9452\\u9f95\\ufffd\".split(\"\"),e=0;e!=r[202].length;++e)65533!==r[202][e].charCodeAt(0)&&(n[r[202][e]]=51712+e,t[51712+e]=r[202][e]);for(r[203]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5323\\u5cac\\u7532\\u80db\\u9240\\u9598\\u525b\\u5808\\u59dc\\u5ca1\\u5d17\\u5eb7\\u5f3a\\u5f4a\\u6177\\u6c5f\\u757a\\u7586\\u7ce0\\u7d73\\u7db1\\u7f8c\\u8154\\u8221\\u8591\\u8941\\u8b1b\\u92fc\\u964d\\u9c47\\u4ecb\\u4ef7\\u500b\\u51f1\\u584f\\u6137\\u613e\\u6168\\u6539\\u69ea\\u6f11\\u75a5\\u7686\\u76d6\\u7b87\\u82a5\\u84cb\\uf900\\u93a7\\u958b\\u5580\\u5ba2\\u5751\\uf901\\u7cb3\\u7fb9\\u91b5\\u5028\\u53bb\\u5c45\\u5de8\\u62d2\\u636e\\u64da\\u64e7\\u6e20\\u70ac\\u795b\\u8ddd\\u8e1e\\uf902\\u907d\\u9245\\u92f8\\u4e7e\\u4ef6\\u5065\\u5dfe\\u5efa\\u6106\\u6957\\u8171\\u8654\\u8e47\\u9375\\u9a2b\\u4e5e\\u5091\\u6770\\u6840\\u5109\\u528d\\u5292\\u6aa2\\ufffd\".split(\"\"),e=0;e!=r[203].length;++e)65533!==r[203][e].charCodeAt(0)&&(n[r[203][e]]=51968+e,t[51968+e]=r[203][e]);for(r[204]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u77bc\\u9210\\u9ed4\\u52ab\\u602f\\u8ff2\\u5048\\u61a9\\u63ed\\u64ca\\u683c\\u6a84\\u6fc0\\u8188\\u89a1\\u9694\\u5805\\u727d\\u72ac\\u7504\\u7d79\\u7e6d\\u80a9\\u898b\\u8b74\\u9063\\u9d51\\u6289\\u6c7a\\u6f54\\u7d50\\u7f3a\\u8a23\\u517c\\u614a\\u7b9d\\u8b19\\u9257\\u938c\\u4eac\\u4fd3\\u501e\\u50be\\u5106\\u52c1\\u52cd\\u537f\\u5770\\u5883\\u5e9a\\u5f91\\u6176\\u61ac\\u64ce\\u656c\\u666f\\u66bb\\u66f4\\u6897\\u6d87\\u7085\\u70f1\\u749f\\u74a5\\u74ca\\u75d9\\u786c\\u78ec\\u7adf\\u7af6\\u7d45\\u7d93\\u8015\\u803f\\u811b\\u8396\\u8b66\\u8f15\\u9015\\u93e1\\u9803\\u9838\\u9a5a\\u9be8\\u4fc2\\u5553\\u583a\\u5951\\u5b63\\u5c46\\u60b8\\u6212\\u6842\\u68b0\\ufffd\".split(\"\"),e=0;e!=r[204].length;++e)65533!==r[204][e].charCodeAt(0)&&(n[r[204][e]]=52224+e,t[52224+e]=r[204][e]);for(r[205]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u68e8\\u6eaa\\u754c\\u7678\\u78ce\\u7a3d\\u7cfb\\u7e6b\\u7e7c\\u8a08\\u8aa1\\u8c3f\\u968e\\u9dc4\\u53e4\\u53e9\\u544a\\u5471\\u56fa\\u59d1\\u5b64\\u5c3b\\u5eab\\u62f7\\u6537\\u6545\\u6572\\u66a0\\u67af\\u69c1\\u6cbd\\u75fc\\u7690\\u777e\\u7a3f\\u7f94\\u8003\\u80a1\\u818f\\u82e6\\u82fd\\u83f0\\u85c1\\u8831\\u88b4\\u8aa5\\uf903\\u8f9c\\u932e\\u96c7\\u9867\\u9ad8\\u9f13\\u54ed\\u659b\\u66f2\\u688f\\u7a40\\u8c37\\u9d60\\u56f0\\u5764\\u5d11\\u6606\\u68b1\\u68cd\\u6efe\\u7428\\u889e\\u9be4\\u6c68\\uf904\\u9aa8\\u4f9b\\u516c\\u5171\\u529f\\u5b54\\u5de5\\u6050\\u606d\\u62f1\\u63a7\\u653b\\u73d9\\u7a7a\\u86a3\\u8ca2\\u978f\\u4e32\\u5be1\\u6208\\u679c\\u74dc\\ufffd\".split(\"\"),e=0;e!=r[205].length;++e)65533!==r[205][e].charCodeAt(0)&&(n[r[205][e]]=52480+e,t[52480+e]=r[205][e]);for(r[206]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u79d1\\u83d3\\u8a87\\u8ab2\\u8de8\\u904e\\u934b\\u9846\\u5ed3\\u69e8\\u85ff\\u90ed\\uf905\\u51a0\\u5b98\\u5bec\\u6163\\u68fa\\u6b3e\\u704c\\u742f\\u74d8\\u7ba1\\u7f50\\u83c5\\u89c0\\u8cab\\u95dc\\u9928\\u522e\\u605d\\u62ec\\u9002\\u4f8a\\u5149\\u5321\\u58d9\\u5ee3\\u66e0\\u6d38\\u709a\\u72c2\\u73d6\\u7b50\\u80f1\\u945b\\u5366\\u639b\\u7f6b\\u4e56\\u5080\\u584a\\u58de\\u602a\\u6127\\u62d0\\u69d0\\u9b41\\u5b8f\\u7d18\\u80b1\\u8f5f\\u4ea4\\u50d1\\u54ac\\u55ac\\u5b0c\\u5da0\\u5de7\\u652a\\u654e\\u6821\\u6a4b\\u72e1\\u768e\\u77ef\\u7d5e\\u7ff9\\u81a0\\u854e\\u86df\\u8f03\\u8f4e\\u90ca\\u9903\\u9a55\\u9bab\\u4e18\\u4e45\\u4e5d\\u4ec7\\u4ff1\\u5177\\u52fe\\ufffd\".split(\"\"),e=0;e!=r[206].length;++e)65533!==r[206][e].charCodeAt(0)&&(n[r[206][e]]=52736+e,t[52736+e]=r[206][e]);for(r[207]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5340\\u53e3\\u53e5\\u548e\\u5614\\u5775\\u57a2\\u5bc7\\u5d87\\u5ed0\\u61fc\\u62d8\\u6551\\u67b8\\u67e9\\u69cb\\u6b50\\u6bc6\\u6bec\\u6c42\\u6e9d\\u7078\\u72d7\\u7396\\u7403\\u77bf\\u77e9\\u7a76\\u7d7f\\u8009\\u81fc\\u8205\\u820a\\u82df\\u8862\\u8b33\\u8cfc\\u8ec0\\u9011\\u90b1\\u9264\\u92b6\\u99d2\\u9a45\\u9ce9\\u9dd7\\u9f9c\\u570b\\u5c40\\u83ca\\u97a0\\u97ab\\u9eb4\\u541b\\u7a98\\u7fa4\\u88d9\\u8ecd\\u90e1\\u5800\\u5c48\\u6398\\u7a9f\\u5bae\\u5f13\\u7a79\\u7aae\\u828e\\u8eac\\u5026\\u5238\\u52f8\\u5377\\u5708\\u62f3\\u6372\\u6b0a\\u6dc3\\u7737\\u53a5\\u7357\\u8568\\u8e76\\u95d5\\u673a\\u6ac3\\u6f70\\u8a6d\\u8ecc\\u994b\\uf906\\u6677\\u6b78\\u8cb4\\ufffd\".split(\"\"),e=0;e!=r[207].length;++e)65533!==r[207][e].charCodeAt(0)&&(n[r[207][e]]=52992+e,t[52992+e]=r[207][e]);for(r[208]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9b3c\\uf907\\u53eb\\u572d\\u594e\\u63c6\\u69fb\\u73ea\\u7845\\u7aba\\u7ac5\\u7cfe\\u8475\\u898f\\u8d73\\u9035\\u95a8\\u52fb\\u5747\\u7547\\u7b60\\u83cc\\u921e\\uf908\\u6a58\\u514b\\u524b\\u5287\\u621f\\u68d8\\u6975\\u9699\\u50c5\\u52a4\\u52e4\\u61c3\\u65a4\\u6839\\u69ff\\u747e\\u7b4b\\u82b9\\u83eb\\u89b2\\u8b39\\u8fd1\\u9949\\uf909\\u4eca\\u5997\\u64d2\\u6611\\u6a8e\\u7434\\u7981\\u79bd\\u82a9\\u887e\\u887f\\u895f\\uf90a\\u9326\\u4f0b\\u53ca\\u6025\\u6271\\u6c72\\u7d1a\\u7d66\\u4e98\\u5162\\u77dc\\u80af\\u4f01\\u4f0e\\u5176\\u5180\\u55dc\\u5668\\u573b\\u57fa\\u57fc\\u5914\\u5947\\u5993\\u5bc4\\u5c90\\u5d0e\\u5df1\\u5e7e\\u5fcc\\u6280\\u65d7\\u65e3\\ufffd\".split(\"\"),e=0;e!=r[208].length;++e)65533!==r[208][e].charCodeAt(0)&&(n[r[208][e]]=53248+e,t[53248+e]=r[208][e]);for(r[209]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u671e\\u671f\\u675e\\u68cb\\u68c4\\u6a5f\\u6b3a\\u6c23\\u6c7d\\u6c82\\u6dc7\\u7398\\u7426\\u742a\\u7482\\u74a3\\u7578\\u757f\\u7881\\u78ef\\u7941\\u7947\\u7948\\u797a\\u7b95\\u7d00\\u7dba\\u7f88\\u8006\\u802d\\u808c\\u8a18\\u8b4f\\u8c48\\u8d77\\u9321\\u9324\\u98e2\\u9951\\u9a0e\\u9a0f\\u9a65\\u9e92\\u7dca\\u4f76\\u5409\\u62ee\\u6854\\u91d1\\u55ab\\u513a\\uf90b\\uf90c\\u5a1c\\u61e6\\uf90d\\u62cf\\u62ff\\uf90e\\uf90f\\uf910\\uf911\\uf912\\uf913\\u90a3\\uf914\\uf915\\uf916\\uf917\\uf918\\u8afe\\uf919\\uf91a\\uf91b\\uf91c\\u6696\\uf91d\\u7156\\uf91e\\uf91f\\u96e3\\uf920\\u634f\\u637a\\u5357\\uf921\\u678f\\u6960\\u6e73\\uf922\\u7537\\uf923\\uf924\\uf925\\ufffd\".split(\"\"),e=0;e!=r[209].length;++e)65533!==r[209][e].charCodeAt(0)&&(n[r[209][e]]=53504+e,t[53504+e]=r[209][e]);for(r[210]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7d0d\\uf926\\uf927\\u8872\\u56ca\\u5a18\\uf928\\uf929\\uf92a\\uf92b\\uf92c\\u4e43\\uf92d\\u5167\\u5948\\u67f0\\u8010\\uf92e\\u5973\\u5e74\\u649a\\u79ca\\u5ff5\\u606c\\u62c8\\u637b\\u5be7\\u5bd7\\u52aa\\uf92f\\u5974\\u5f29\\u6012\\uf930\\uf931\\uf932\\u7459\\uf933\\uf934\\uf935\\uf936\\uf937\\uf938\\u99d1\\uf939\\uf93a\\uf93b\\uf93c\\uf93d\\uf93e\\uf93f\\uf940\\uf941\\uf942\\uf943\\u6fc3\\uf944\\uf945\\u81bf\\u8fb2\\u60f1\\uf946\\uf947\\u8166\\uf948\\uf949\\u5c3f\\uf94a\\uf94b\\uf94c\\uf94d\\uf94e\\uf94f\\uf950\\uf951\\u5ae9\\u8a25\\u677b\\u7d10\\uf952\\uf953\\uf954\\uf955\\uf956\\uf957\\u80fd\\uf958\\uf959\\u5c3c\\u6ce5\\u533f\\u6eba\\u591a\\u8336\\ufffd\".split(\"\"),e=0;e!=r[210].length;++e)65533!==r[210][e].charCodeAt(0)&&(n[r[210][e]]=53760+e,t[53760+e]=r[210][e]);for(r[211]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u4e39\\u4eb6\\u4f46\\u55ae\\u5718\\u58c7\\u5f56\\u65b7\\u65e6\\u6a80\\u6bb5\\u6e4d\\u77ed\\u7aef\\u7c1e\\u7dde\\u86cb\\u8892\\u9132\\u935b\\u64bb\\u6fbe\\u737a\\u75b8\\u9054\\u5556\\u574d\\u61ba\\u64d4\\u66c7\\u6de1\\u6e5b\\u6f6d\\u6fb9\\u75f0\\u8043\\u81bd\\u8541\\u8983\\u8ac7\\u8b5a\\u931f\\u6c93\\u7553\\u7b54\\u8e0f\\u905d\\u5510\\u5802\\u5858\\u5e62\\u6207\\u649e\\u68e0\\u7576\\u7cd6\\u87b3\\u9ee8\\u4ee3\\u5788\\u576e\\u5927\\u5c0d\\u5cb1\\u5e36\\u5f85\\u6234\\u64e1\\u73b3\\u81fa\\u888b\\u8cb8\\u968a\\u9edb\\u5b85\\u5fb7\\u60b3\\u5012\\u5200\\u5230\\u5716\\u5835\\u5857\\u5c0e\\u5c60\\u5cf6\\u5d8b\\u5ea6\\u5f92\\u60bc\\u6311\\u6389\\u6417\\u6843\\ufffd\".split(\"\"),e=0;e!=r[211].length;++e)65533!==r[211][e].charCodeAt(0)&&(n[r[211][e]]=54016+e,t[54016+e]=r[211][e]);for(r[212]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u68f9\\u6ac2\\u6dd8\\u6e21\\u6ed4\\u6fe4\\u71fe\\u76dc\\u7779\\u79b1\\u7a3b\\u8404\\u89a9\\u8ced\\u8df3\\u8e48\\u9003\\u9014\\u9053\\u90fd\\u934d\\u9676\\u97dc\\u6bd2\\u7006\\u7258\\u72a2\\u7368\\u7763\\u79bf\\u7be4\\u7e9b\\u8b80\\u58a9\\u60c7\\u6566\\u65fd\\u66be\\u6c8c\\u711e\\u71c9\\u8c5a\\u9813\\u4e6d\\u7a81\\u4edd\\u51ac\\u51cd\\u52d5\\u540c\\u61a7\\u6771\\u6850\\u68df\\u6d1e\\u6f7c\\u75bc\\u77b3\\u7ae5\\u80f4\\u8463\\u9285\\u515c\\u6597\\u675c\\u6793\\u75d8\\u7ac7\\u8373\\uf95a\\u8c46\\u9017\\u982d\\u5c6f\\u81c0\\u829a\\u9041\\u906f\\u920d\\u5f97\\u5d9d\\u6a59\\u71c8\\u767b\\u7b49\\u85e4\\u8b04\\u9127\\u9a30\\u5587\\u61f6\\uf95b\\u7669\\u7f85\\ufffd\".split(\"\"),e=0;e!=r[212].length;++e)65533!==r[212][e].charCodeAt(0)&&(n[r[212][e]]=54272+e,t[54272+e]=r[212][e]);for(r[213]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u863f\\u87ba\\u88f8\\u908f\\uf95c\\u6d1b\\u70d9\\u73de\\u7d61\\u843d\\uf95d\\u916a\\u99f1\\uf95e\\u4e82\\u5375\\u6b04\\u6b12\\u703e\\u721b\\u862d\\u9e1e\\u524c\\u8fa3\\u5d50\\u64e5\\u652c\\u6b16\\u6feb\\u7c43\\u7e9c\\u85cd\\u8964\\u89bd\\u62c9\\u81d8\\u881f\\u5eca\\u6717\\u6d6a\\u72fc\\u7405\\u746f\\u8782\\u90de\\u4f86\\u5d0d\\u5fa0\\u840a\\u51b7\\u63a0\\u7565\\u4eae\\u5006\\u5169\\u51c9\\u6881\\u6a11\\u7cae\\u7cb1\\u7ce7\\u826f\\u8ad2\\u8f1b\\u91cf\\u4fb6\\u5137\\u52f5\\u5442\\u5eec\\u616e\\u623e\\u65c5\\u6ada\\u6ffe\\u792a\\u85dc\\u8823\\u95ad\\u9a62\\u9a6a\\u9e97\\u9ece\\u529b\\u66c6\\u6b77\\u701d\\u792b\\u8f62\\u9742\\u6190\\u6200\\u6523\\u6f23\\ufffd\".split(\"\"),e=0;e!=r[213].length;++e)65533!==r[213][e].charCodeAt(0)&&(n[r[213][e]]=54528+e,t[54528+e]=r[213][e]);for(r[214]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7149\\u7489\\u7df4\\u806f\\u84ee\\u8f26\\u9023\\u934a\\u51bd\\u5217\\u52a3\\u6d0c\\u70c8\\u88c2\\u5ec9\\u6582\\u6bae\\u6fc2\\u7c3e\\u7375\\u4ee4\\u4f36\\u56f9\\uf95f\\u5cba\\u5dba\\u601c\\u73b2\\u7b2d\\u7f9a\\u7fce\\u8046\\u901e\\u9234\\u96f6\\u9748\\u9818\\u9f61\\u4f8b\\u6fa7\\u79ae\\u91b4\\u96b7\\u52de\\uf960\\u6488\\u64c4\\u6ad3\\u6f5e\\u7018\\u7210\\u76e7\\u8001\\u8606\\u865c\\u8def\\u8f05\\u9732\\u9b6f\\u9dfa\\u9e75\\u788c\\u797f\\u7da0\\u83c9\\u9304\\u9e7f\\u9e93\\u8ad6\\u58df\\u5f04\\u6727\\u7027\\u74cf\\u7c60\\u807e\\u5121\\u7028\\u7262\\u78ca\\u8cc2\\u8cda\\u8cf4\\u96f7\\u4e86\\u50da\\u5bee\\u5ed6\\u6599\\u71ce\\u7642\\u77ad\\u804a\\u84fc\\ufffd\".split(\"\"),e=0;e!=r[214].length;++e)65533!==r[214][e].charCodeAt(0)&&(n[r[214][e]]=54784+e,t[54784+e]=r[214][e]);for(r[215]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u907c\\u9b27\\u9f8d\\u58d8\\u5a41\\u5c62\\u6a13\\u6dda\\u6f0f\\u763b\\u7d2f\\u7e37\\u851e\\u8938\\u93e4\\u964b\\u5289\\u65d2\\u67f3\\u69b4\\u6d41\\u6e9c\\u700f\\u7409\\u7460\\u7559\\u7624\\u786b\\u8b2c\\u985e\\u516d\\u622e\\u9678\\u4f96\\u502b\\u5d19\\u6dea\\u7db8\\u8f2a\\u5f8b\\u6144\\u6817\\uf961\\u9686\\u52d2\\u808b\\u51dc\\u51cc\\u695e\\u7a1c\\u7dbe\\u83f1\\u9675\\u4fda\\u5229\\u5398\\u540f\\u550e\\u5c65\\u60a7\\u674e\\u68a8\\u6d6c\\u7281\\u72f8\\u7406\\u7483\\uf962\\u75e2\\u7c6c\\u7f79\\u7fb8\\u8389\\u88cf\\u88e1\\u91cc\\u91d0\\u96e2\\u9bc9\\u541d\\u6f7e\\u71d0\\u7498\\u85fa\\u8eaa\\u96a3\\u9c57\\u9e9f\\u6797\\u6dcb\\u7433\\u81e8\\u9716\\u782c\\ufffd\".split(\"\"),e=0;e!=r[215].length;++e)65533!==r[215][e].charCodeAt(0)&&(n[r[215][e]]=55040+e,t[55040+e]=r[215][e]);for(r[216]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7acb\\u7b20\\u7c92\\u6469\\u746a\\u75f2\\u78bc\\u78e8\\u99ac\\u9b54\\u9ebb\\u5bde\\u5e55\\u6f20\\u819c\\u83ab\\u9088\\u4e07\\u534d\\u5a29\\u5dd2\\u5f4e\\u6162\\u633d\\u6669\\u66fc\\u6eff\\u6f2b\\u7063\\u779e\\u842c\\u8513\\u883b\\u8f13\\u9945\\u9c3b\\u551c\\u62b9\\u672b\\u6cab\\u8309\\u896a\\u977a\\u4ea1\\u5984\\u5fd8\\u5fd9\\u671b\\u7db2\\u7f54\\u8292\\u832b\\u83bd\\u8f1e\\u9099\\u57cb\\u59b9\\u5a92\\u5bd0\\u6627\\u679a\\u6885\\u6bcf\\u7164\\u7f75\\u8cb7\\u8ce3\\u9081\\u9b45\\u8108\\u8c8a\\u964c\\u9a40\\u9ea5\\u5b5f\\u6c13\\u731b\\u76f2\\u76df\\u840c\\u51aa\\u8993\\u514d\\u5195\\u52c9\\u68c9\\u6c94\\u7704\\u7720\\u7dbf\\u7dec\\u9762\\u9eb5\\u6ec5\\ufffd\".split(\"\"),e=0;e!=r[216].length;++e)65533!==r[216][e].charCodeAt(0)&&(n[r[216][e]]=55296+e,t[55296+e]=r[216][e]);for(r[217]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8511\\u51a5\\u540d\\u547d\\u660e\\u669d\\u6927\\u6e9f\\u76bf\\u7791\\u8317\\u84c2\\u879f\\u9169\\u9298\\u9cf4\\u8882\\u4fae\\u5192\\u52df\\u59c6\\u5e3d\\u6155\\u6478\\u6479\\u66ae\\u67d0\\u6a21\\u6bcd\\u6bdb\\u725f\\u7261\\u7441\\u7738\\u77db\\u8017\\u82bc\\u8305\\u8b00\\u8b28\\u8c8c\\u6728\\u6c90\\u7267\\u76ee\\u7766\\u7a46\\u9da9\\u6b7f\\u6c92\\u5922\\u6726\\u8499\\u536f\\u5893\\u5999\\u5edf\\u63cf\\u6634\\u6773\\u6e3a\\u732b\\u7ad7\\u82d7\\u9328\\u52d9\\u5deb\\u61ae\\u61cb\\u620a\\u62c7\\u64ab\\u65e0\\u6959\\u6b66\\u6bcb\\u7121\\u73f7\\u755d\\u7e46\\u821e\\u8302\\u856a\\u8aa3\\u8cbf\\u9727\\u9d61\\u58a8\\u9ed8\\u5011\\u520e\\u543b\\u554f\\u6587\\ufffd\".split(\"\"),e=0;e!=r[217].length;++e)65533!==r[217][e].charCodeAt(0)&&(n[r[217][e]]=55552+e,t[55552+e]=r[217][e]);for(r[218]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6c76\\u7d0a\\u7d0b\\u805e\\u868a\\u9580\\u96ef\\u52ff\\u6c95\\u7269\\u5473\\u5a9a\\u5c3e\\u5d4b\\u5f4c\\u5fae\\u672a\\u68b6\\u6963\\u6e3c\\u6e44\\u7709\\u7c73\\u7f8e\\u8587\\u8b0e\\u8ff7\\u9761\\u9ef4\\u5cb7\\u60b6\\u610d\\u61ab\\u654f\\u65fb\\u65fc\\u6c11\\u6cef\\u739f\\u73c9\\u7de1\\u9594\\u5bc6\\u871c\\u8b10\\u525d\\u535a\\u62cd\\u640f\\u64b2\\u6734\\u6a38\\u6cca\\u73c0\\u749e\\u7b94\\u7c95\\u7e1b\\u818a\\u8236\\u8584\\u8feb\\u96f9\\u99c1\\u4f34\\u534a\\u53cd\\u53db\\u62cc\\u642c\\u6500\\u6591\\u69c3\\u6cee\\u6f58\\u73ed\\u7554\\u7622\\u76e4\\u76fc\\u78d0\\u78fb\\u792c\\u7d46\\u822c\\u87e0\\u8fd4\\u9812\\u98ef\\u52c3\\u62d4\\u64a5\\u6e24\\u6f51\\ufffd\".split(\"\"),e=0;e!=r[218].length;++e)65533!==r[218][e].charCodeAt(0)&&(n[r[218][e]]=55808+e,t[55808+e]=r[218][e]);for(r[219]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u767c\\u8dcb\\u91b1\\u9262\\u9aee\\u9b43\\u5023\\u508d\\u574a\\u59a8\\u5c28\\u5e47\\u5f77\\u623f\\u653e\\u65b9\\u65c1\\u6609\\u678b\\u699c\\u6ec2\\u78c5\\u7d21\\u80aa\\u8180\\u822b\\u82b3\\u84a1\\u868c\\u8a2a\\u8b17\\u90a6\\u9632\\u9f90\\u500d\\u4ff3\\uf963\\u57f9\\u5f98\\u62dc\\u6392\\u676f\\u6e43\\u7119\\u76c3\\u80cc\\u80da\\u88f4\\u88f5\\u8919\\u8ce0\\u8f29\\u914d\\u966a\\u4f2f\\u4f70\\u5e1b\\u67cf\\u6822\\u767d\\u767e\\u9b44\\u5e61\\u6a0a\\u7169\\u71d4\\u756a\\uf964\\u7e41\\u8543\\u85e9\\u98dc\\u4f10\\u7b4f\\u7f70\\u95a5\\u51e1\\u5e06\\u68b5\\u6c3e\\u6c4e\\u6cdb\\u72af\\u7bc4\\u8303\\u6cd5\\u743a\\u50fb\\u5288\\u58c1\\u64d8\\u6a97\\u74a7\\u7656\\ufffd\".split(\"\"),e=0;e!=r[219].length;++e)65533!==r[219][e].charCodeAt(0)&&(n[r[219][e]]=56064+e,t[56064+e]=r[219][e]);for(r[220]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u78a7\\u8617\\u95e2\\u9739\\uf965\\u535e\\u5f01\\u8b8a\\u8fa8\\u8faf\\u908a\\u5225\\u77a5\\u9c49\\u9f08\\u4e19\\u5002\\u5175\\u5c5b\\u5e77\\u661e\\u663a\\u67c4\\u68c5\\u70b3\\u7501\\u75c5\\u79c9\\u7add\\u8f27\\u9920\\u9a08\\u4fdd\\u5821\\u5831\\u5bf6\\u666e\\u6b65\\u6d11\\u6e7a\\u6f7d\\u73e4\\u752b\\u83e9\\u88dc\\u8913\\u8b5c\\u8f14\\u4f0f\\u50d5\\u5310\\u535c\\u5b93\\u5fa9\\u670d\\u798f\\u8179\\u832f\\u8514\\u8907\\u8986\\u8f39\\u8f3b\\u99a5\\u9c12\\u672c\\u4e76\\u4ff8\\u5949\\u5c01\\u5cef\\u5cf0\\u6367\\u68d2\\u70fd\\u71a2\\u742b\\u7e2b\\u84ec\\u8702\\u9022\\u92d2\\u9cf3\\u4e0d\\u4ed8\\u4fef\\u5085\\u5256\\u526f\\u5426\\u5490\\u57e0\\u592b\\u5a66\\ufffd\".split(\"\"),e=0;e!=r[220].length;++e)65533!==r[220][e].charCodeAt(0)&&(n[r[220][e]]=56320+e,t[56320+e]=r[220][e]);for(r[221]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5b5a\\u5b75\\u5bcc\\u5e9c\\uf966\\u6276\\u6577\\u65a7\\u6d6e\\u6ea5\\u7236\\u7b26\\u7c3f\\u7f36\\u8150\\u8151\\u819a\\u8240\\u8299\\u83a9\\u8a03\\u8ca0\\u8ce6\\u8cfb\\u8d74\\u8dba\\u90e8\\u91dc\\u961c\\u9644\\u99d9\\u9ce7\\u5317\\u5206\\u5429\\u5674\\u58b3\\u5954\\u596e\\u5fff\\u61a4\\u626e\\u6610\\u6c7e\\u711a\\u76c6\\u7c89\\u7cde\\u7d1b\\u82ac\\u8cc1\\u96f0\\uf967\\u4f5b\\u5f17\\u5f7f\\u62c2\\u5d29\\u670b\\u68da\\u787c\\u7e43\\u9d6c\\u4e15\\u5099\\u5315\\u532a\\u5351\\u5983\\u5a62\\u5e87\\u60b2\\u618a\\u6249\\u6279\\u6590\\u6787\\u69a7\\u6bd4\\u6bd6\\u6bd7\\u6bd8\\u6cb8\\uf968\\u7435\\u75fa\\u7812\\u7891\\u79d5\\u79d8\\u7c83\\u7dcb\\u7fe1\\u80a5\\ufffd\".split(\"\"),e=0;e!=r[221].length;++e)65533!==r[221][e].charCodeAt(0)&&(n[r[221][e]]=56576+e,t[56576+e]=r[221][e]);for(r[222]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u813e\\u81c2\\u83f2\\u871a\\u88e8\\u8ab9\\u8b6c\\u8cbb\\u9119\\u975e\\u98db\\u9f3b\\u56ac\\u5b2a\\u5f6c\\u658c\\u6ab3\\u6baf\\u6d5c\\u6ff1\\u7015\\u725d\\u73ad\\u8ca7\\u8cd3\\u983b\\u6191\\u6c37\\u8058\\u9a01\\u4e4d\\u4e8b\\u4e9b\\u4ed5\\u4f3a\\u4f3c\\u4f7f\\u4fdf\\u50ff\\u53f2\\u53f8\\u5506\\u55e3\\u56db\\u58eb\\u5962\\u5a11\\u5beb\\u5bfa\\u5c04\\u5df3\\u5e2b\\u5f99\\u601d\\u6368\\u659c\\u65af\\u67f6\\u67fb\\u68ad\\u6b7b\\u6c99\\u6cd7\\u6e23\\u7009\\u7345\\u7802\\u793e\\u7940\\u7960\\u79c1\\u7be9\\u7d17\\u7d72\\u8086\\u820d\\u838e\\u84d1\\u86c7\\u88df\\u8a50\\u8a5e\\u8b1d\\u8cdc\\u8d66\\u8fad\\u90aa\\u98fc\\u99df\\u9e9d\\u524a\\uf969\\u6714\\uf96a\\ufffd\".split(\"\"),e=0;e!=r[222].length;++e)65533!==r[222][e].charCodeAt(0)&&(n[r[222][e]]=56832+e,t[56832+e]=r[222][e]);for(r[223]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5098\\u522a\\u5c71\\u6563\\u6c55\\u73ca\\u7523\\u759d\\u7b97\\u849c\\u9178\\u9730\\u4e77\\u6492\\u6bba\\u715e\\u85a9\\u4e09\\uf96b\\u6749\\u68ee\\u6e17\\u829f\\u8518\\u886b\\u63f7\\u6f81\\u9212\\u98af\\u4e0a\\u50b7\\u50cf\\u511f\\u5546\\u55aa\\u5617\\u5b40\\u5c19\\u5ce0\\u5e38\\u5e8a\\u5ea0\\u5ec2\\u60f3\\u6851\\u6a61\\u6e58\\u723d\\u7240\\u72c0\\u76f8\\u7965\\u7bb1\\u7fd4\\u88f3\\u89f4\\u8a73\\u8c61\\u8cde\\u971c\\u585e\\u74bd\\u8cfd\\u55c7\\uf96c\\u7a61\\u7d22\\u8272\\u7272\\u751f\\u7525\\uf96d\\u7b19\\u5885\\u58fb\\u5dbc\\u5e8f\\u5eb6\\u5f90\\u6055\\u6292\\u637f\\u654d\\u6691\\u66d9\\u66f8\\u6816\\u68f2\\u7280\\u745e\\u7b6e\\u7d6e\\u7dd6\\u7f72\\ufffd\".split(\"\"),e=0;e!=r[223].length;++e)65533!==r[223][e].charCodeAt(0)&&(n[r[223][e]]=57088+e,t[57088+e]=r[223][e]);for(r[224]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u80e5\\u8212\\u85af\\u897f\\u8a93\\u901d\\u92e4\\u9ecd\\u9f20\\u5915\\u596d\\u5e2d\\u60dc\\u6614\\u6673\\u6790\\u6c50\\u6dc5\\u6f5f\\u77f3\\u78a9\\u84c6\\u91cb\\u932b\\u4ed9\\u50ca\\u5148\\u5584\\u5b0b\\u5ba3\\u6247\\u657e\\u65cb\\u6e32\\u717d\\u7401\\u7444\\u7487\\u74bf\\u766c\\u79aa\\u7dda\\u7e55\\u7fa8\\u817a\\u81b3\\u8239\\u861a\\u87ec\\u8a75\\u8de3\\u9078\\u9291\\u9425\\u994d\\u9bae\\u5368\\u5c51\\u6954\\u6cc4\\u6d29\\u6e2b\\u820c\\u859b\\u893b\\u8a2d\\u8aaa\\u96ea\\u9f67\\u5261\\u66b9\\u6bb2\\u7e96\\u87fe\\u8d0d\\u9583\\u965d\\u651d\\u6d89\\u71ee\\uf96e\\u57ce\\u59d3\\u5bac\\u6027\\u60fa\\u6210\\u661f\\u665f\\u7329\\u73f9\\u76db\\u7701\\u7b6c\\ufffd\".split(\"\"),e=0;e!=r[224].length;++e)65533!==r[224][e].charCodeAt(0)&&(n[r[224][e]]=57344+e,t[57344+e]=r[224][e]);for(r[225]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8056\\u8072\\u8165\\u8aa0\\u9192\\u4e16\\u52e2\\u6b72\\u6d17\\u7a05\\u7b39\\u7d30\\uf96f\\u8cb0\\u53ec\\u562f\\u5851\\u5bb5\\u5c0f\\u5c11\\u5de2\\u6240\\u6383\\u6414\\u662d\\u68b3\\u6cbc\\u6d88\\u6eaf\\u701f\\u70a4\\u71d2\\u7526\\u758f\\u758e\\u7619\\u7b11\\u7be0\\u7c2b\\u7d20\\u7d39\\u852c\\u856d\\u8607\\u8a34\\u900d\\u9061\\u90b5\\u92b7\\u97f6\\u9a37\\u4fd7\\u5c6c\\u675f\\u6d91\\u7c9f\\u7e8c\\u8b16\\u8d16\\u901f\\u5b6b\\u5dfd\\u640d\\u84c0\\u905c\\u98e1\\u7387\\u5b8b\\u609a\\u677e\\u6dde\\u8a1f\\u8aa6\\u9001\\u980c\\u5237\\uf970\\u7051\\u788e\\u9396\\u8870\\u91d7\\u4fee\\u53d7\\u55fd\\u56da\\u5782\\u58fd\\u5ac2\\u5b88\\u5cab\\u5cc0\\u5e25\\u6101\\ufffd\".split(\"\"),e=0;e!=r[225].length;++e)65533!==r[225][e].charCodeAt(0)&&(n[r[225][e]]=57600+e,t[57600+e]=r[225][e]);for(r[226]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u620d\\u624b\\u6388\\u641c\\u6536\\u6578\\u6a39\\u6b8a\\u6c34\\u6d19\\u6f31\\u71e7\\u72e9\\u7378\\u7407\\u74b2\\u7626\\u7761\\u79c0\\u7a57\\u7aea\\u7cb9\\u7d8f\\u7dac\\u7e61\\u7f9e\\u8129\\u8331\\u8490\\u84da\\u85ea\\u8896\\u8ab0\\u8b90\\u8f38\\u9042\\u9083\\u916c\\u9296\\u92b9\\u968b\\u96a7\\u96a8\\u96d6\\u9700\\u9808\\u9996\\u9ad3\\u9b1a\\u53d4\\u587e\\u5919\\u5b70\\u5bbf\\u6dd1\\u6f5a\\u719f\\u7421\\u74b9\\u8085\\u83fd\\u5de1\\u5f87\\u5faa\\u6042\\u65ec\\u6812\\u696f\\u6a53\\u6b89\\u6d35\\u6df3\\u73e3\\u76fe\\u77ac\\u7b4d\\u7d14\\u8123\\u821c\\u8340\\u84f4\\u8563\\u8a62\\u8ac4\\u9187\\u931e\\u9806\\u99b4\\u620c\\u8853\\u8ff0\\u9265\\u5d07\\u5d27\\ufffd\".split(\"\"),e=0;e!=r[226].length;++e)65533!==r[226][e].charCodeAt(0)&&(n[r[226][e]]=57856+e,t[57856+e]=r[226][e]);for(r[227]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5d69\\u745f\\u819d\\u8768\\u6fd5\\u62fe\\u7fd2\\u8936\\u8972\\u4e1e\\u4e58\\u50e7\\u52dd\\u5347\\u627f\\u6607\\u7e69\\u8805\\u965e\\u4f8d\\u5319\\u5636\\u59cb\\u5aa4\\u5c38\\u5c4e\\u5c4d\\u5e02\\u5f11\\u6043\\u65bd\\u662f\\u6642\\u67be\\u67f4\\u731c\\u77e2\\u793a\\u7fc5\\u8494\\u84cd\\u8996\\u8a66\\u8a69\\u8ae1\\u8c55\\u8c7a\\u57f4\\u5bd4\\u5f0f\\u606f\\u62ed\\u690d\\u6b96\\u6e5c\\u7184\\u7bd2\\u8755\\u8b58\\u8efe\\u98df\\u98fe\\u4f38\\u4f81\\u4fe1\\u547b\\u5a20\\u5bb8\\u613c\\u65b0\\u6668\\u71fc\\u7533\\u795e\\u7d33\\u814e\\u81e3\\u8398\\u85aa\\u85ce\\u8703\\u8a0a\\u8eab\\u8f9b\\uf971\\u8fc5\\u5931\\u5ba4\\u5be6\\u6089\\u5be9\\u5c0b\\u5fc3\\u6c81\\ufffd\".split(\"\"),e=0;e!=r[227].length;++e)65533!==r[227][e].charCodeAt(0)&&(n[r[227][e]]=58112+e,t[58112+e]=r[227][e]);for(r[228]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uf972\\u6df1\\u700b\\u751a\\u82af\\u8af6\\u4ec0\\u5341\\uf973\\u96d9\\u6c0f\\u4e9e\\u4fc4\\u5152\\u555e\\u5a25\\u5ce8\\u6211\\u7259\\u82bd\\u83aa\\u86fe\\u8859\\u8a1d\\u963f\\u96c5\\u9913\\u9d09\\u9d5d\\u580a\\u5cb3\\u5dbd\\u5e44\\u60e1\\u6115\\u63e1\\u6a02\\u6e25\\u9102\\u9354\\u984e\\u9c10\\u9f77\\u5b89\\u5cb8\\u6309\\u664f\\u6848\\u773c\\u96c1\\u978d\\u9854\\u9b9f\\u65a1\\u8b01\\u8ecb\\u95bc\\u5535\\u5ca9\\u5dd6\\u5eb5\\u6697\\u764c\\u83f4\\u95c7\\u58d3\\u62bc\\u72ce\\u9d28\\u4ef0\\u592e\\u600f\\u663b\\u6b83\\u79e7\\u9d26\\u5393\\u54c0\\u57c3\\u5d16\\u611b\\u66d6\\u6daf\\u788d\\u827e\\u9698\\u9744\\u5384\\u627c\\u6396\\u6db2\\u7e0a\\u814b\\u984d\\ufffd\".split(\"\"),e=0;e!=r[228].length;++e)65533!==r[228][e].charCodeAt(0)&&(n[r[228][e]]=58368+e,t[58368+e]=r[228][e]);for(r[229]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6afb\\u7f4c\\u9daf\\u9e1a\\u4e5f\\u503b\\u51b6\\u591c\\u60f9\\u63f6\\u6930\\u723a\\u8036\\uf974\\u91ce\\u5f31\\uf975\\uf976\\u7d04\\u82e5\\u846f\\u84bb\\u85e5\\u8e8d\\uf977\\u4f6f\\uf978\\uf979\\u58e4\\u5b43\\u6059\\u63da\\u6518\\u656d\\u6698\\uf97a\\u694a\\u6a23\\u6d0b\\u7001\\u716c\\u75d2\\u760d\\u79b3\\u7a70\\uf97b\\u7f8a\\uf97c\\u8944\\uf97d\\u8b93\\u91c0\\u967d\\uf97e\\u990a\\u5704\\u5fa1\\u65bc\\u6f01\\u7600\\u79a6\\u8a9e\\u99ad\\u9b5a\\u9f6c\\u5104\\u61b6\\u6291\\u6a8d\\u81c6\\u5043\\u5830\\u5f66\\u7109\\u8a00\\u8afa\\u5b7c\\u8616\\u4ffa\\u513c\\u56b4\\u5944\\u63a9\\u6df9\\u5daa\\u696d\\u5186\\u4e88\\u4f59\\uf97f\\uf980\\uf981\\u5982\\uf982\\ufffd\".split(\"\"),e=0;e!=r[229].length;++e)65533!==r[229][e].charCodeAt(0)&&(n[r[229][e]]=58624+e,t[58624+e]=r[229][e]);for(r[230]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uf983\\u6b5f\\u6c5d\\uf984\\u74b5\\u7916\\uf985\\u8207\\u8245\\u8339\\u8f3f\\u8f5d\\uf986\\u9918\\uf987\\uf988\\uf989\\u4ea6\\uf98a\\u57df\\u5f79\\u6613\\uf98b\\uf98c\\u75ab\\u7e79\\u8b6f\\uf98d\\u9006\\u9a5b\\u56a5\\u5827\\u59f8\\u5a1f\\u5bb4\\uf98e\\u5ef6\\uf98f\\uf990\\u6350\\u633b\\uf991\\u693d\\u6c87\\u6cbf\\u6d8e\\u6d93\\u6df5\\u6f14\\uf992\\u70df\\u7136\\u7159\\uf993\\u71c3\\u71d5\\uf994\\u784f\\u786f\\uf995\\u7b75\\u7de3\\uf996\\u7e2f\\uf997\\u884d\\u8edf\\uf998\\uf999\\uf99a\\u925b\\uf99b\\u9cf6\\uf99c\\uf99d\\uf99e\\u6085\\u6d85\\uf99f\\u71b1\\uf9a0\\uf9a1\\u95b1\\u53ad\\uf9a2\\uf9a3\\uf9a4\\u67d3\\uf9a5\\u708e\\u7130\\u7430\\u8276\\u82d2\\ufffd\".split(\"\"),e=0;e!=r[230].length;++e)65533!==r[230][e].charCodeAt(0)&&(n[r[230][e]]=58880+e,t[58880+e]=r[230][e]);for(r[231]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uf9a6\\u95bb\\u9ae5\\u9e7d\\u66c4\\uf9a7\\u71c1\\u8449\\uf9a8\\uf9a9\\u584b\\uf9aa\\uf9ab\\u5db8\\u5f71\\uf9ac\\u6620\\u668e\\u6979\\u69ae\\u6c38\\u6cf3\\u6e36\\u6f41\\u6fda\\u701b\\u702f\\u7150\\u71df\\u7370\\uf9ad\\u745b\\uf9ae\\u74d4\\u76c8\\u7a4e\\u7e93\\uf9af\\uf9b0\\u82f1\\u8a60\\u8fce\\uf9b1\\u9348\\uf9b2\\u9719\\uf9b3\\uf9b4\\u4e42\\u502a\\uf9b5\\u5208\\u53e1\\u66f3\\u6c6d\\u6fca\\u730a\\u777f\\u7a62\\u82ae\\u85dd\\u8602\\uf9b6\\u88d4\\u8a63\\u8b7d\\u8c6b\\uf9b7\\u92b3\\uf9b8\\u9713\\u9810\\u4e94\\u4f0d\\u4fc9\\u50b2\\u5348\\u543e\\u5433\\u55da\\u5862\\u58ba\\u5967\\u5a1b\\u5be4\\u609f\\uf9b9\\u61ca\\u6556\\u65ff\\u6664\\u68a7\\u6c5a\\u6fb3\\ufffd\".split(\"\"),e=0;e!=r[231].length;++e)65533!==r[231][e].charCodeAt(0)&&(n[r[231][e]]=59136+e,t[59136+e]=r[231][e]);for(r[232]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u70cf\\u71ac\\u7352\\u7b7d\\u8708\\u8aa4\\u9c32\\u9f07\\u5c4b\\u6c83\\u7344\\u7389\\u923a\\u6eab\\u7465\\u761f\\u7a69\\u7e15\\u860a\\u5140\\u58c5\\u64c1\\u74ee\\u7515\\u7670\\u7fc1\\u9095\\u96cd\\u9954\\u6e26\\u74e6\\u7aa9\\u7aaa\\u81e5\\u86d9\\u8778\\u8a1b\\u5a49\\u5b8c\\u5b9b\\u68a1\\u6900\\u6d63\\u73a9\\u7413\\u742c\\u7897\\u7de9\\u7feb\\u8118\\u8155\\u839e\\u8c4c\\u962e\\u9811\\u66f0\\u5f80\\u65fa\\u6789\\u6c6a\\u738b\\u502d\\u5a03\\u6b6a\\u77ee\\u5916\\u5d6c\\u5dcd\\u7325\\u754f\\uf9ba\\uf9bb\\u50e5\\u51f9\\u582f\\u592d\\u5996\\u59da\\u5be5\\uf9bc\\uf9bd\\u5da2\\u62d7\\u6416\\u6493\\u64fe\\uf9be\\u66dc\\uf9bf\\u6a48\\uf9c0\\u71ff\\u7464\\uf9c1\\ufffd\".split(\"\"),e=0;e!=r[232].length;++e)65533!==r[232][e].charCodeAt(0)&&(n[r[232][e]]=59392+e,t[59392+e]=r[232][e]);for(r[233]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7a88\\u7aaf\\u7e47\\u7e5e\\u8000\\u8170\\uf9c2\\u87ef\\u8981\\u8b20\\u9059\\uf9c3\\u9080\\u9952\\u617e\\u6b32\\u6d74\\u7e1f\\u8925\\u8fb1\\u4fd1\\u50ad\\u5197\\u52c7\\u57c7\\u5889\\u5bb9\\u5eb8\\u6142\\u6995\\u6d8c\\u6e67\\u6eb6\\u7194\\u7462\\u7528\\u752c\\u8073\\u8338\\u84c9\\u8e0a\\u9394\\u93de\\uf9c4\\u4e8e\\u4f51\\u5076\\u512a\\u53c8\\u53cb\\u53f3\\u5b87\\u5bd3\\u5c24\\u611a\\u6182\\u65f4\\u725b\\u7397\\u7440\\u76c2\\u7950\\u7991\\u79b9\\u7d06\\u7fbd\\u828b\\u85d5\\u865e\\u8fc2\\u9047\\u90f5\\u91ea\\u9685\\u96e8\\u96e9\\u52d6\\u5f67\\u65ed\\u6631\\u682f\\u715c\\u7a36\\u90c1\\u980a\\u4e91\\uf9c5\\u6a52\\u6b9e\\u6f90\\u7189\\u8018\\u82b8\\u8553\\ufffd\".split(\"\"),e=0;e!=r[233].length;++e)65533!==r[233][e].charCodeAt(0)&&(n[r[233][e]]=59648+e,t[59648+e]=r[233][e]);for(r[234]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u904b\\u9695\\u96f2\\u97fb\\u851a\\u9b31\\u4e90\\u718a\\u96c4\\u5143\\u539f\\u54e1\\u5713\\u5712\\u57a3\\u5a9b\\u5ac4\\u5bc3\\u6028\\u613f\\u63f4\\u6c85\\u6d39\\u6e72\\u6e90\\u7230\\u733f\\u7457\\u82d1\\u8881\\u8f45\\u9060\\uf9c6\\u9662\\u9858\\u9d1b\\u6708\\u8d8a\\u925e\\u4f4d\\u5049\\u50de\\u5371\\u570d\\u59d4\\u5a01\\u5c09\\u6170\\u6690\\u6e2d\\u7232\\u744b\\u7def\\u80c3\\u840e\\u8466\\u853f\\u875f\\u885b\\u8918\\u8b02\\u9055\\u97cb\\u9b4f\\u4e73\\u4f91\\u5112\\u516a\\uf9c7\\u552f\\u55a9\\u5b7a\\u5ba5\\u5e7c\\u5e7d\\u5ebe\\u60a0\\u60df\\u6108\\u6109\\u63c4\\u6538\\u6709\\uf9c8\\u67d4\\u67da\\uf9c9\\u6961\\u6962\\u6cb9\\u6d27\\uf9ca\\u6e38\\uf9cb\\ufffd\".split(\"\"),e=0;e!=r[234].length;++e)65533!==r[234][e].charCodeAt(0)&&(n[r[234][e]]=59904+e,t[59904+e]=r[234][e]);for(r[235]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6fe1\\u7336\\u7337\\uf9cc\\u745c\\u7531\\uf9cd\\u7652\\uf9ce\\uf9cf\\u7dad\\u81fe\\u8438\\u88d5\\u8a98\\u8adb\\u8aed\\u8e30\\u8e42\\u904a\\u903e\\u907a\\u9149\\u91c9\\u936e\\uf9d0\\uf9d1\\u5809\\uf9d2\\u6bd3\\u8089\\u80b2\\uf9d3\\uf9d4\\u5141\\u596b\\u5c39\\uf9d5\\uf9d6\\u6f64\\u73a7\\u80e4\\u8d07\\uf9d7\\u9217\\u958f\\uf9d8\\uf9d9\\uf9da\\uf9db\\u807f\\u620e\\u701c\\u7d68\\u878d\\uf9dc\\u57a0\\u6069\\u6147\\u6bb7\\u8abe\\u9280\\u96b1\\u4e59\\u541f\\u6deb\\u852d\\u9670\\u97f3\\u98ee\\u63d6\\u6ce3\\u9091\\u51dd\\u61c9\\u81ba\\u9df9\\u4f9d\\u501a\\u5100\\u5b9c\\u610f\\u61ff\\u64ec\\u6905\\u6bc5\\u7591\\u77e3\\u7fa9\\u8264\\u858f\\u87fb\\u8863\\u8abc\\ufffd\".split(\"\"),e=0;e!=r[235].length;++e)65533!==r[235][e].charCodeAt(0)&&(n[r[235][e]]=60160+e,t[60160+e]=r[235][e]);for(r[236]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8b70\\u91ab\\u4e8c\\u4ee5\\u4f0a\\uf9dd\\uf9de\\u5937\\u59e8\\uf9df\\u5df2\\u5f1b\\u5f5b\\u6021\\uf9e0\\uf9e1\\uf9e2\\uf9e3\\u723e\\u73e5\\uf9e4\\u7570\\u75cd\\uf9e5\\u79fb\\uf9e6\\u800c\\u8033\\u8084\\u82e1\\u8351\\uf9e7\\uf9e8\\u8cbd\\u8cb3\\u9087\\uf9e9\\uf9ea\\u98f4\\u990c\\uf9eb\\uf9ec\\u7037\\u76ca\\u7fca\\u7fcc\\u7ffc\\u8b1a\\u4eba\\u4ec1\\u5203\\u5370\\uf9ed\\u54bd\\u56e0\\u59fb\\u5bc5\\u5f15\\u5fcd\\u6e6e\\uf9ee\\uf9ef\\u7d6a\\u8335\\uf9f0\\u8693\\u8a8d\\uf9f1\\u976d\\u9777\\uf9f2\\uf9f3\\u4e00\\u4f5a\\u4f7e\\u58f9\\u65e5\\u6ea2\\u9038\\u93b0\\u99b9\\u4efb\\u58ec\\u598a\\u59d9\\u6041\\uf9f4\\uf9f5\\u7a14\\uf9f6\\u834f\\u8cc3\\u5165\\u5344\\ufffd\".split(\"\"),e=0;e!=r[236].length;++e)65533!==r[236][e].charCodeAt(0)&&(n[r[236][e]]=60416+e,t[60416+e]=r[236][e]);for(r[237]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uf9f7\\uf9f8\\uf9f9\\u4ecd\\u5269\\u5b55\\u82bf\\u4ed4\\u523a\\u54a8\\u59c9\\u59ff\\u5b50\\u5b57\\u5b5c\\u6063\\u6148\\u6ecb\\u7099\\u716e\\u7386\\u74f7\\u75b5\\u78c1\\u7d2b\\u8005\\u81ea\\u8328\\u8517\\u85c9\\u8aee\\u8cc7\\u96cc\\u4f5c\\u52fa\\u56bc\\u65ab\\u6628\\u707c\\u70b8\\u7235\\u7dbd\\u828d\\u914c\\u96c0\\u9d72\\u5b71\\u68e7\\u6b98\\u6f7a\\u76de\\u5c91\\u66ab\\u6f5b\\u7bb4\\u7c2a\\u8836\\u96dc\\u4e08\\u4ed7\\u5320\\u5834\\u58bb\\u58ef\\u596c\\u5c07\\u5e33\\u5e84\\u5f35\\u638c\\u66b2\\u6756\\u6a1f\\u6aa3\\u6b0c\\u6f3f\\u7246\\uf9fa\\u7350\\u748b\\u7ae0\\u7ca7\\u8178\\u81df\\u81e7\\u838a\\u846c\\u8523\\u8594\\u85cf\\u88dd\\u8d13\\u91ac\\u9577\\ufffd\".split(\"\"),e=0;e!=r[237].length;++e)65533!==r[237][e].charCodeAt(0)&&(n[r[237][e]]=60672+e,t[60672+e]=r[237][e]);for(r[238]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u969c\\u518d\\u54c9\\u5728\\u5bb0\\u624d\\u6750\\u683d\\u6893\\u6e3d\\u6ed3\\u707d\\u7e21\\u88c1\\u8ca1\\u8f09\\u9f4b\\u9f4e\\u722d\\u7b8f\\u8acd\\u931a\\u4f47\\u4f4e\\u5132\\u5480\\u59d0\\u5e95\\u62b5\\u6775\\u696e\\u6a17\\u6cae\\u6e1a\\u72d9\\u732a\\u75bd\\u7bb8\\u7d35\\u82e7\\u83f9\\u8457\\u85f7\\u8a5b\\u8caf\\u8e87\\u9019\\u90b8\\u96ce\\u9f5f\\u52e3\\u540a\\u5ae1\\u5bc2\\u6458\\u6575\\u6ef4\\u72c4\\uf9fb\\u7684\\u7a4d\\u7b1b\\u7c4d\\u7e3e\\u7fdf\\u837b\\u8b2b\\u8cca\\u8d64\\u8de1\\u8e5f\\u8fea\\u8ff9\\u9069\\u93d1\\u4f43\\u4f7a\\u50b3\\u5168\\u5178\\u524d\\u526a\\u5861\\u587c\\u5960\\u5c08\\u5c55\\u5edb\\u609b\\u6230\\u6813\\u6bbf\\u6c08\\u6fb1\\ufffd\".split(\"\"),e=0;e!=r[238].length;++e)65533!==r[238][e].charCodeAt(0)&&(n[r[238][e]]=60928+e,t[60928+e]=r[238][e]);for(r[239]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u714e\\u7420\\u7530\\u7538\\u7551\\u7672\\u7b4c\\u7b8b\\u7bad\\u7bc6\\u7e8f\\u8a6e\\u8f3e\\u8f49\\u923f\\u9293\\u9322\\u942b\\u96fb\\u985a\\u986b\\u991e\\u5207\\u622a\\u6298\\u6d59\\u7664\\u7aca\\u7bc0\\u7d76\\u5360\\u5cbe\\u5e97\\u6f38\\u70b9\\u7c98\\u9711\\u9b8e\\u9ede\\u63a5\\u647a\\u8776\\u4e01\\u4e95\\u4ead\\u505c\\u5075\\u5448\\u59c3\\u5b9a\\u5e40\\u5ead\\u5ef7\\u5f81\\u60c5\\u633a\\u653f\\u6574\\u65cc\\u6676\\u6678\\u67fe\\u6968\\u6a89\\u6b63\\u6c40\\u6dc0\\u6de8\\u6e1f\\u6e5e\\u701e\\u70a1\\u738e\\u73fd\\u753a\\u775b\\u7887\\u798e\\u7a0b\\u7a7d\\u7cbe\\u7d8e\\u8247\\u8a02\\u8aea\\u8c9e\\u912d\\u914a\\u91d8\\u9266\\u92cc\\u9320\\u9706\\u9756\\ufffd\".split(\"\"),e=0;e!=r[239].length;++e)65533!==r[239][e].charCodeAt(0)&&(n[r[239][e]]=61184+e,t[61184+e]=r[239][e]);for(r[240]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u975c\\u9802\\u9f0e\\u5236\\u5291\\u557c\\u5824\\u5e1d\\u5f1f\\u608c\\u63d0\\u68af\\u6fdf\\u796d\\u7b2c\\u81cd\\u85ba\\u88fd\\u8af8\\u8e44\\u918d\\u9664\\u969b\\u973d\\u984c\\u9f4a\\u4fce\\u5146\\u51cb\\u52a9\\u5632\\u5f14\\u5f6b\\u63aa\\u64cd\\u65e9\\u6641\\u66fa\\u66f9\\u671d\\u689d\\u68d7\\u69fd\\u6f15\\u6f6e\\u7167\\u71e5\\u722a\\u74aa\\u773a\\u7956\\u795a\\u79df\\u7a20\\u7a95\\u7c97\\u7cdf\\u7d44\\u7e70\\u8087\\u85fb\\u86a4\\u8a54\\u8abf\\u8d99\\u8e81\\u9020\\u906d\\u91e3\\u963b\\u96d5\\u9ce5\\u65cf\\u7c07\\u8db3\\u93c3\\u5b58\\u5c0a\\u5352\\u62d9\\u731d\\u5027\\u5b97\\u5f9e\\u60b0\\u616b\\u68d5\\u6dd9\\u742e\\u7a2e\\u7d42\\u7d9c\\u7e31\\u816b\\ufffd\".split(\"\"),e=0;e!=r[240].length;++e)65533!==r[240][e].charCodeAt(0)&&(n[r[240][e]]=61440+e,t[61440+e]=r[240][e]);for(r[241]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8e2a\\u8e35\\u937e\\u9418\\u4f50\\u5750\\u5de6\\u5ea7\\u632b\\u7f6a\\u4e3b\\u4f4f\\u4f8f\\u505a\\u59dd\\u80c4\\u546a\\u5468\\u55fe\\u594f\\u5b99\\u5dde\\u5eda\\u665d\\u6731\\u67f1\\u682a\\u6ce8\\u6d32\\u6e4a\\u6f8d\\u70b7\\u73e0\\u7587\\u7c4c\\u7d02\\u7d2c\\u7da2\\u821f\\u86db\\u8a3b\\u8a85\\u8d70\\u8e8a\\u8f33\\u9031\\u914e\\u9152\\u9444\\u99d0\\u7af9\\u7ca5\\u4fca\\u5101\\u51c6\\u57c8\\u5bef\\u5cfb\\u6659\\u6a3d\\u6d5a\\u6e96\\u6fec\\u710c\\u756f\\u7ae3\\u8822\\u9021\\u9075\\u96cb\\u99ff\\u8301\\u4e2d\\u4ef2\\u8846\\u91cd\\u537d\\u6adb\\u696b\\u6c41\\u847a\\u589e\\u618e\\u66fe\\u62ef\\u70dd\\u7511\\u75c7\\u7e52\\u84b8\\u8b49\\u8d08\\u4e4b\\u53ea\\ufffd\".split(\"\"),e=0;e!=r[241].length;++e)65533!==r[241][e].charCodeAt(0)&&(n[r[241][e]]=61696+e,t[61696+e]=r[241][e]);for(r[242]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u54ab\\u5730\\u5740\\u5fd7\\u6301\\u6307\\u646f\\u652f\\u65e8\\u667a\\u679d\\u67b3\\u6b62\\u6c60\\u6c9a\\u6f2c\\u77e5\\u7825\\u7949\\u7957\\u7d19\\u80a2\\u8102\\u81f3\\u829d\\u82b7\\u8718\\u8a8c\\uf9fc\\u8d04\\u8dbe\\u9072\\u76f4\\u7a19\\u7a37\\u7e54\\u8077\\u5507\\u55d4\\u5875\\u632f\\u6422\\u6649\\u664b\\u686d\\u699b\\u6b84\\u6d25\\u6eb1\\u73cd\\u7468\\u74a1\\u755b\\u75b9\\u76e1\\u771e\\u778b\\u79e6\\u7e09\\u7e1d\\u81fb\\u852f\\u8897\\u8a3a\\u8cd1\\u8eeb\\u8fb0\\u9032\\u93ad\\u9663\\u9673\\u9707\\u4f84\\u53f1\\u59ea\\u5ac9\\u5e19\\u684e\\u74c6\\u75be\\u79e9\\u7a92\\u81a3\\u86ed\\u8cea\\u8dcc\\u8fed\\u659f\\u6715\\uf9fd\\u57f7\\u6f57\\u7ddd\\u8f2f\\ufffd\".split(\"\"),e=0;e!=r[242].length;++e)65533!==r[242][e].charCodeAt(0)&&(n[r[242][e]]=61952+e,t[61952+e]=r[242][e]);for(r[243]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u93f6\\u96c6\\u5fb5\\u61f2\\u6f84\\u4e14\\u4f98\\u501f\\u53c9\\u55df\\u5d6f\\u5dee\\u6b21\\u6b64\\u78cb\\u7b9a\\uf9fe\\u8e49\\u8eca\\u906e\\u6349\\u643e\\u7740\\u7a84\\u932f\\u947f\\u9f6a\\u64b0\\u6faf\\u71e6\\u74a8\\u74da\\u7ac4\\u7c12\\u7e82\\u7cb2\\u7e98\\u8b9a\\u8d0a\\u947d\\u9910\\u994c\\u5239\\u5bdf\\u64e6\\u672d\\u7d2e\\u50ed\\u53c3\\u5879\\u6158\\u6159\\u61fa\\u65ac\\u7ad9\\u8b92\\u8b96\\u5009\\u5021\\u5275\\u5531\\u5a3c\\u5ee0\\u5f70\\u6134\\u655e\\u660c\\u6636\\u66a2\\u69cd\\u6ec4\\u6f32\\u7316\\u7621\\u7a93\\u8139\\u8259\\u83d6\\u84bc\\u50b5\\u57f0\\u5bc0\\u5be8\\u5f69\\u63a1\\u7826\\u7db5\\u83dc\\u8521\\u91c7\\u91f5\\u518a\\u67f5\\u7b56\\ufffd\".split(\"\"),e=0;e!=r[243].length;++e)65533!==r[243][e].charCodeAt(0)&&(n[r[243][e]]=62208+e,t[62208+e]=r[243][e]);for(r[244]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8cac\\u51c4\\u59bb\\u60bd\\u8655\\u501c\\uf9ff\\u5254\\u5c3a\\u617d\\u621a\\u62d3\\u64f2\\u65a5\\u6ecc\\u7620\\u810a\\u8e60\\u965f\\u96bb\\u4edf\\u5343\\u5598\\u5929\\u5ddd\\u64c5\\u6cc9\\u6dfa\\u7394\\u7a7f\\u821b\\u85a6\\u8ce4\\u8e10\\u9077\\u91e7\\u95e1\\u9621\\u97c6\\u51f8\\u54f2\\u5586\\u5fb9\\u64a4\\u6f88\\u7db4\\u8f1f\\u8f4d\\u9435\\u50c9\\u5c16\\u6cbe\\u6dfb\\u751b\\u77bb\\u7c3d\\u7c64\\u8a79\\u8ac2\\u581e\\u59be\\u5e16\\u6377\\u7252\\u758a\\u776b\\u8adc\\u8cbc\\u8f12\\u5ef3\\u6674\\u6df8\\u807d\\u83c1\\u8acb\\u9751\\u9bd6\\ufa00\\u5243\\u66ff\\u6d95\\u6eef\\u7de0\\u8ae6\\u902e\\u905e\\u9ad4\\u521d\\u527f\\u54e8\\u6194\\u6284\\u62db\\u68a2\\ufffd\".split(\"\"),e=0;e!=r[244].length;++e)65533!==r[244][e].charCodeAt(0)&&(n[r[244][e]]=62464+e,t[62464+e]=r[244][e]);for(r[245]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6912\\u695a\\u6a35\\u7092\\u7126\\u785d\\u7901\\u790e\\u79d2\\u7a0d\\u8096\\u8278\\u82d5\\u8349\\u8549\\u8c82\\u8d85\\u9162\\u918b\\u91ae\\u4fc3\\u56d1\\u71ed\\u77d7\\u8700\\u89f8\\u5bf8\\u5fd6\\u6751\\u90a8\\u53e2\\u585a\\u5bf5\\u60a4\\u6181\\u6460\\u7e3d\\u8070\\u8525\\u9283\\u64ae\\u50ac\\u5d14\\u6700\\u589c\\u62bd\\u63a8\\u690e\\u6978\\u6a1e\\u6e6b\\u76ba\\u79cb\\u82bb\\u8429\\u8acf\\u8da8\\u8ffd\\u9112\\u914b\\u919c\\u9310\\u9318\\u939a\\u96db\\u9a36\\u9c0d\\u4e11\\u755c\\u795d\\u7afa\\u7b51\\u7bc9\\u7e2e\\u84c4\\u8e59\\u8e74\\u8ef8\\u9010\\u6625\\u693f\\u7443\\u51fa\\u672e\\u9edc\\u5145\\u5fe0\\u6c96\\u87f2\\u885d\\u8877\\u60b4\\u81b5\\u8403\\ufffd\".split(\"\"),e=0;e!=r[245].length;++e)65533!==r[245][e].charCodeAt(0)&&(n[r[245][e]]=62720+e,t[62720+e]=r[245][e]);for(r[246]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8d05\\u53d6\\u5439\\u5634\\u5a36\\u5c31\\u708a\\u7fe0\\u805a\\u8106\\u81ed\\u8da3\\u9189\\u9a5f\\u9df2\\u5074\\u4ec4\\u53a0\\u60fb\\u6e2c\\u5c64\\u4f88\\u5024\\u55e4\\u5cd9\\u5e5f\\u6065\\u6894\\u6cbb\\u6dc4\\u71be\\u75d4\\u75f4\\u7661\\u7a1a\\u7a49\\u7dc7\\u7dfb\\u7f6e\\u81f4\\u86a9\\u8f1c\\u96c9\\u99b3\\u9f52\\u5247\\u52c5\\u98ed\\u89aa\\u4e03\\u67d2\\u6f06\\u4fb5\\u5be2\\u6795\\u6c88\\u6d78\\u741b\\u7827\\u91dd\\u937c\\u87c4\\u79e4\\u7a31\\u5feb\\u4ed6\\u54a4\\u553e\\u58ae\\u59a5\\u60f0\\u6253\\u62d6\\u6736\\u6955\\u8235\\u9640\\u99b1\\u99dd\\u502c\\u5353\\u5544\\u577c\\ufa01\\u6258\\ufa02\\u64e2\\u666b\\u67dd\\u6fc1\\u6fef\\u7422\\u7438\\u8a17\\ufffd\".split(\"\"),e=0;e!=r[246].length;++e)65533!==r[246][e].charCodeAt(0)&&(n[r[246][e]]=62976+e,t[62976+e]=r[246][e]);for(r[247]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9438\\u5451\\u5606\\u5766\\u5f48\\u619a\\u6b4e\\u7058\\u70ad\\u7dbb\\u8a95\\u596a\\u812b\\u63a2\\u7708\\u803d\\u8caa\\u5854\\u642d\\u69bb\\u5b95\\u5e11\\u6e6f\\ufa03\\u8569\\u514c\\u53f0\\u592a\\u6020\\u614b\\u6b86\\u6c70\\u6cf0\\u7b1e\\u80ce\\u82d4\\u8dc6\\u90b0\\u98b1\\ufa04\\u64c7\\u6fa4\\u6491\\u6504\\u514e\\u5410\\u571f\\u8a0e\\u615f\\u6876\\ufa05\\u75db\\u7b52\\u7d71\\u901a\\u5806\\u69cc\\u817f\\u892a\\u9000\\u9839\\u5078\\u5957\\u59ac\\u6295\\u900f\\u9b2a\\u615d\\u7279\\u95d6\\u5761\\u5a46\\u5df4\\u628a\\u64ad\\u64fa\\u6777\\u6ce2\\u6d3e\\u722c\\u7436\\u7834\\u7f77\\u82ad\\u8ddb\\u9817\\u5224\\u5742\\u677f\\u7248\\u74e3\\u8ca9\\u8fa6\\u9211\\ufffd\".split(\"\"),e=0;e!=r[247].length;++e)65533!==r[247][e].charCodeAt(0)&&(n[r[247][e]]=63232+e,t[63232+e]=r[247][e]);for(r[248]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u962a\\u516b\\u53ed\\u634c\\u4f69\\u5504\\u6096\\u6557\\u6c9b\\u6d7f\\u724c\\u72fd\\u7a17\\u8987\\u8c9d\\u5f6d\\u6f8e\\u70f9\\u81a8\\u610e\\u4fbf\\u504f\\u6241\\u7247\\u7bc7\\u7de8\\u7fe9\\u904d\\u97ad\\u9a19\\u8cb6\\u576a\\u5e73\\u67b0\\u840d\\u8a55\\u5420\\u5b16\\u5e63\\u5ee2\\u5f0a\\u6583\\u80ba\\u853d\\u9589\\u965b\\u4f48\\u5305\\u530d\\u530f\\u5486\\u54fa\\u5703\\u5e03\\u6016\\u629b\\u62b1\\u6355\\ufa06\\u6ce1\\u6d66\\u75b1\\u7832\\u80de\\u812f\\u82de\\u8461\\u84b2\\u888d\\u8912\\u900b\\u92ea\\u98fd\\u9b91\\u5e45\\u66b4\\u66dd\\u7011\\u7206\\ufa07\\u4ff5\\u527d\\u5f6a\\u6153\\u6753\\u6a19\\u6f02\\u74e2\\u7968\\u8868\\u8c79\\u98c7\\u98c4\\u9a43\\ufffd\".split(\"\"),e=0;e!=r[248].length;++e)65533!==r[248][e].charCodeAt(0)&&(n[r[248][e]]=63488+e,t[63488+e]=r[248][e]);for(r[249]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u54c1\\u7a1f\\u6953\\u8af7\\u8c4a\\u98a8\\u99ae\\u5f7c\\u62ab\\u75b2\\u76ae\\u88ab\\u907f\\u9642\\u5339\\u5f3c\\u5fc5\\u6ccc\\u73cc\\u7562\\u758b\\u7b46\\u82fe\\u999d\\u4e4f\\u903c\\u4e0b\\u4f55\\u53a6\\u590f\\u5ec8\\u6630\\u6cb3\\u7455\\u8377\\u8766\\u8cc0\\u9050\\u971e\\u9c15\\u58d1\\u5b78\\u8650\\u8b14\\u9db4\\u5bd2\\u6068\\u608d\\u65f1\\u6c57\\u6f22\\u6fa3\\u701a\\u7f55\\u7ff0\\u9591\\u9592\\u9650\\u97d3\\u5272\\u8f44\\u51fd\\u542b\\u54b8\\u5563\\u558a\\u6abb\\u6db5\\u7dd8\\u8266\\u929c\\u9677\\u9e79\\u5408\\u54c8\\u76d2\\u86e4\\u95a4\\u95d4\\u965c\\u4ea2\\u4f09\\u59ee\\u5ae6\\u5df7\\u6052\\u6297\\u676d\\u6841\\u6c86\\u6e2f\\u7f38\\u809b\\u822a\\ufffd\".split(\"\"),e=0;e!=r[249].length;++e)65533!==r[249][e].charCodeAt(0)&&(n[r[249][e]]=63744+e,t[63744+e]=r[249][e]);for(r[250]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufa08\\ufa09\\u9805\\u4ea5\\u5055\\u54b3\\u5793\\u595a\\u5b69\\u5bb3\\u61c8\\u6977\\u6d77\\u7023\\u87f9\\u89e3\\u8a72\\u8ae7\\u9082\\u99ed\\u9ab8\\u52be\\u6838\\u5016\\u5e78\\u674f\\u8347\\u884c\\u4eab\\u5411\\u56ae\\u73e6\\u9115\\u97ff\\u9909\\u9957\\u9999\\u5653\\u589f\\u865b\\u8a31\\u61b2\\u6af6\\u737b\\u8ed2\\u6b47\\u96aa\\u9a57\\u5955\\u7200\\u8d6b\\u9769\\u4fd4\\u5cf4\\u5f26\\u61f8\\u665b\\u6ceb\\u70ab\\u7384\\u73b9\\u73fe\\u7729\\u774d\\u7d43\\u7d62\\u7e23\\u8237\\u8852\\ufa0a\\u8ce2\\u9249\\u986f\\u5b51\\u7a74\\u8840\\u9801\\u5acc\\u4fe0\\u5354\\u593e\\u5cfd\\u633e\\u6d79\\u72f9\\u8105\\u8107\\u83a2\\u92cf\\u9830\\u4ea8\\u5144\\u5211\\u578b\\ufffd\".split(\"\"),e=0;e!=r[250].length;++e)65533!==r[250][e].charCodeAt(0)&&(n[r[250][e]]=64e3+e,t[64e3+e]=r[250][e]);for(r[251]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5f62\\u6cc2\\u6ece\\u7005\\u7050\\u70af\\u7192\\u73e9\\u7469\\u834a\\u87a2\\u8861\\u9008\\u90a2\\u93a3\\u99a8\\u516e\\u5f57\\u60e0\\u6167\\u66b3\\u8559\\u8e4a\\u91af\\u978b\\u4e4e\\u4e92\\u547c\\u58d5\\u58fa\\u597d\\u5cb5\\u5f27\\u6236\\u6248\\u660a\\u6667\\u6beb\\u6d69\\u6dcf\\u6e56\\u6ef8\\u6f94\\u6fe0\\u6fe9\\u705d\\u72d0\\u7425\\u745a\\u74e0\\u7693\\u795c\\u7cca\\u7e1e\\u80e1\\u82a6\\u846b\\u84bf\\u864e\\u865f\\u8774\\u8b77\\u8c6a\\u93ac\\u9800\\u9865\\u60d1\\u6216\\u9177\\u5a5a\\u660f\\u6df7\\u6e3e\\u743f\\u9b42\\u5ffd\\u60da\\u7b0f\\u54c4\\u5f18\\u6c5e\\u6cd3\\u6d2a\\u70d8\\u7d05\\u8679\\u8a0c\\u9d3b\\u5316\\u548c\\u5b05\\u6a3a\\u706b\\u7575\\ufffd\".split(\"\"),e=0;e!=r[251].length;++e)65533!==r[251][e].charCodeAt(0)&&(n[r[251][e]]=64256+e,t[64256+e]=r[251][e]);for(r[252]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u798d\\u79be\\u82b1\\u83ef\\u8a71\\u8b41\\u8ca8\\u9774\\ufa0b\\u64f4\\u652b\\u78ba\\u78bb\\u7a6b\\u4e38\\u559a\\u5950\\u5ba6\\u5e7b\\u60a3\\u63db\\u6b61\\u6665\\u6853\\u6e19\\u7165\\u74b0\\u7d08\\u9084\\u9a69\\u9c25\\u6d3b\\u6ed1\\u733e\\u8c41\\u95ca\\u51f0\\u5e4c\\u5fa8\\u604d\\u60f6\\u6130\\u614c\\u6643\\u6644\\u69a5\\u6cc1\\u6e5f\\u6ec9\\u6f62\\u714c\\u749c\\u7687\\u7bc1\\u7c27\\u8352\\u8757\\u9051\\u968d\\u9ec3\\u532f\\u56de\\u5efb\\u5f8a\\u6062\\u6094\\u61f7\\u6666\\u6703\\u6a9c\\u6dee\\u6fae\\u7070\\u736a\\u7e6a\\u81be\\u8334\\u86d4\\u8aa8\\u8cc4\\u5283\\u7372\\u5b96\\u6a6b\\u9404\\u54ee\\u5686\\u5b5d\\u6548\\u6585\\u66c9\\u689f\\u6d8d\\u6dc6\\ufffd\".split(\"\"),e=0;e!=r[252].length;++e)65533!==r[252][e].charCodeAt(0)&&(n[r[252][e]]=64512+e,t[64512+e]=r[252][e]);for(r[253]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u723b\\u80b4\\u9175\\u9a4d\\u4faf\\u5019\\u539a\\u540e\\u543c\\u5589\\u55c5\\u5e3f\\u5f8c\\u673d\\u7166\\u73dd\\u9005\\u52db\\u52f3\\u5864\\u58ce\\u7104\\u718f\\u71fb\\u85b0\\u8a13\\u6688\\u85a8\\u55a7\\u6684\\u714a\\u8431\\u5349\\u5599\\u6bc1\\u5f59\\u5fbd\\u63ee\\u6689\\u7147\\u8af1\\u8f1d\\u9ebe\\u4f11\\u643a\\u70cb\\u7566\\u8667\\u6064\\u8b4e\\u9df8\\u5147\\u51f6\\u5308\\u6d36\\u80f8\\u9ed1\\u6615\\u6b23\\u7098\\u75d5\\u5403\\u5c79\\u7d07\\u8a16\\u6b20\\u6b3d\\u6b46\\u5438\\u6070\\u6d3d\\u7fd5\\u8208\\u50d6\\u51de\\u559c\\u566b\\u56cd\\u59ec\\u5b09\\u5e0c\\u6199\\u6198\\u6231\\u665e\\u66e6\\u7199\\u71b9\\u71ba\\u72a7\\u79a7\\u7a00\\u7fb2\\u8a70\\ufffd\".split(\"\"),e=0;e!=r[253].length;++e)65533!==r[253][e].charCodeAt(0)&&(n[r[253][e]]=64768+e,t[64768+e]=r[253][e]);return{enc:n,dec:t}}(),r[950]=function(){var e,t=[],n={},r=[];for(r[0]=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[0].length;++e)65533!==r[0][e].charCodeAt(0)&&(n[r[0][e]]=0+e,t[0+e]=r[0][e]);for(r[161]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u3000\\uff0c\\u3001\\u3002\\uff0e\\u2027\\uff1b\\uff1a\\uff1f\\uff01\\ufe30\\u2026\\u2025\\ufe50\\ufe51\\ufe52\\xb7\\ufe54\\ufe55\\ufe56\\ufe57\\uff5c\\u2013\\ufe31\\u2014\\ufe33\\u2574\\ufe34\\ufe4f\\uff08\\uff09\\ufe35\\ufe36\\uff5b\\uff5d\\ufe37\\ufe38\\u3014\\u3015\\ufe39\\ufe3a\\u3010\\u3011\\ufe3b\\ufe3c\\u300a\\u300b\\ufe3d\\ufe3e\\u3008\\u3009\\ufe3f\\ufe40\\u300c\\u300d\\ufe41\\ufe42\\u300e\\u300f\\ufe43\\ufe44\\ufe59\\ufe5a\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufe5b\\ufe5c\\ufe5d\\ufe5e\\u2018\\u2019\\u201c\\u201d\\u301d\\u301e\\u2035\\u2032\\uff03\\uff06\\uff0a\\u203b\\xa7\\u3003\\u25cb\\u25cf\\u25b3\\u25b2\\u25ce\\u2606\\u2605\\u25c7\\u25c6\\u25a1\\u25a0\\u25bd\\u25bc\\u32a3\\u2105\\xaf\\uffe3\\uff3f\\u02cd\\ufe49\\ufe4a\\ufe4d\\ufe4e\\ufe4b\\ufe4c\\ufe5f\\ufe60\\ufe61\\uff0b\\uff0d\\xd7\\xf7\\xb1\\u221a\\uff1c\\uff1e\\uff1d\\u2266\\u2267\\u2260\\u221e\\u2252\\u2261\\ufe62\\ufe63\\ufe64\\ufe65\\ufe66\\uff5e\\u2229\\u222a\\u22a5\\u2220\\u221f\\u22bf\\u33d2\\u33d1\\u222b\\u222e\\u2235\\u2234\\u2640\\u2642\\u2295\\u2299\\u2191\\u2193\\u2190\\u2192\\u2196\\u2197\\u2199\\u2198\\u2225\\u2223\\uff0f\\ufffd\".split(\"\"),e=0;e!=r[161].length;++e)65533!==r[161][e].charCodeAt(0)&&(n[r[161][e]]=41216+e,t[41216+e]=r[161][e]);for(r[162]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uff3c\\u2215\\ufe68\\uff04\\uffe5\\u3012\\uffe0\\uffe1\\uff05\\uff20\\u2103\\u2109\\ufe69\\ufe6a\\ufe6b\\u33d5\\u339c\\u339d\\u339e\\u33ce\\u33a1\\u338e\\u338f\\u33c4\\xb0\\u5159\\u515b\\u515e\\u515d\\u5161\\u5163\\u55e7\\u74e9\\u7cce\\u2581\\u2582\\u2583\\u2584\\u2585\\u2586\\u2587\\u2588\\u258f\\u258e\\u258d\\u258c\\u258b\\u258a\\u2589\\u253c\\u2534\\u252c\\u2524\\u251c\\u2594\\u2500\\u2502\\u2595\\u250c\\u2510\\u2514\\u2518\\u256d\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u256e\\u2570\\u256f\\u2550\\u255e\\u256a\\u2561\\u25e2\\u25e3\\u25e5\\u25e4\\u2571\\u2572\\u2573\\uff10\\uff11\\uff12\\uff13\\uff14\\uff15\\uff16\\uff17\\uff18\\uff19\\u2160\\u2161\\u2162\\u2163\\u2164\\u2165\\u2166\\u2167\\u2168\\u2169\\u3021\\u3022\\u3023\\u3024\\u3025\\u3026\\u3027\\u3028\\u3029\\u5341\\u5344\\u5345\\uff21\\uff22\\uff23\\uff24\\uff25\\uff26\\uff27\\uff28\\uff29\\uff2a\\uff2b\\uff2c\\uff2d\\uff2e\\uff2f\\uff30\\uff31\\uff32\\uff33\\uff34\\uff35\\uff36\\uff37\\uff38\\uff39\\uff3a\\uff41\\uff42\\uff43\\uff44\\uff45\\uff46\\uff47\\uff48\\uff49\\uff4a\\uff4b\\uff4c\\uff4d\\uff4e\\uff4f\\uff50\\uff51\\uff52\\uff53\\uff54\\uff55\\uff56\\ufffd\".split(\"\"),e=0;e!=r[162].length;++e)65533!==r[162][e].charCodeAt(0)&&(n[r[162][e]]=41472+e,t[41472+e]=r[162][e]);for(r[163]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uff57\\uff58\\uff59\\uff5a\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9\\u3105\\u3106\\u3107\\u3108\\u3109\\u310a\\u310b\\u310c\\u310d\\u310e\\u310f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u3110\\u3111\\u3112\\u3113\\u3114\\u3115\\u3116\\u3117\\u3118\\u3119\\u311a\\u311b\\u311c\\u311d\\u311e\\u311f\\u3120\\u3121\\u3122\\u3123\\u3124\\u3125\\u3126\\u3127\\u3128\\u3129\\u02d9\\u02c9\\u02ca\\u02c7\\u02cb\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u20ac\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[163].length;++e)65533!==r[163][e].charCodeAt(0)&&(n[r[163][e]]=41728+e,t[41728+e]=r[163][e]);for(r[164]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u4e00\\u4e59\\u4e01\\u4e03\\u4e43\\u4e5d\\u4e86\\u4e8c\\u4eba\\u513f\\u5165\\u516b\\u51e0\\u5200\\u5201\\u529b\\u5315\\u5341\\u535c\\u53c8\\u4e09\\u4e0b\\u4e08\\u4e0a\\u4e2b\\u4e38\\u51e1\\u4e45\\u4e48\\u4e5f\\u4e5e\\u4e8e\\u4ea1\\u5140\\u5203\\u52fa\\u5343\\u53c9\\u53e3\\u571f\\u58eb\\u5915\\u5927\\u5973\\u5b50\\u5b51\\u5b53\\u5bf8\\u5c0f\\u5c22\\u5c38\\u5c71\\u5ddd\\u5de5\\u5df1\\u5df2\\u5df3\\u5dfe\\u5e72\\u5efe\\u5f0b\\u5f13\\u624d\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u4e11\\u4e10\\u4e0d\\u4e2d\\u4e30\\u4e39\\u4e4b\\u5c39\\u4e88\\u4e91\\u4e95\\u4e92\\u4e94\\u4ea2\\u4ec1\\u4ec0\\u4ec3\\u4ec6\\u4ec7\\u4ecd\\u4eca\\u4ecb\\u4ec4\\u5143\\u5141\\u5167\\u516d\\u516e\\u516c\\u5197\\u51f6\\u5206\\u5207\\u5208\\u52fb\\u52fe\\u52ff\\u5316\\u5339\\u5348\\u5347\\u5345\\u535e\\u5384\\u53cb\\u53ca\\u53cd\\u58ec\\u5929\\u592b\\u592a\\u592d\\u5b54\\u5c11\\u5c24\\u5c3a\\u5c6f\\u5df4\\u5e7b\\u5eff\\u5f14\\u5f15\\u5fc3\\u6208\\u6236\\u624b\\u624e\\u652f\\u6587\\u6597\\u65a4\\u65b9\\u65e5\\u66f0\\u6708\\u6728\\u6b20\\u6b62\\u6b79\\u6bcb\\u6bd4\\u6bdb\\u6c0f\\u6c34\\u706b\\u722a\\u7236\\u723b\\u7247\\u7259\\u725b\\u72ac\\u738b\\u4e19\\ufffd\".split(\"\"),e=0;e!=r[164].length;++e)65533!==r[164][e].charCodeAt(0)&&(n[r[164][e]]=41984+e,t[41984+e]=r[164][e]);for(r[165]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u4e16\\u4e15\\u4e14\\u4e18\\u4e3b\\u4e4d\\u4e4f\\u4e4e\\u4ee5\\u4ed8\\u4ed4\\u4ed5\\u4ed6\\u4ed7\\u4ee3\\u4ee4\\u4ed9\\u4ede\\u5145\\u5144\\u5189\\u518a\\u51ac\\u51f9\\u51fa\\u51f8\\u520a\\u52a0\\u529f\\u5305\\u5306\\u5317\\u531d\\u4edf\\u534a\\u5349\\u5361\\u5360\\u536f\\u536e\\u53bb\\u53ef\\u53e4\\u53f3\\u53ec\\u53ee\\u53e9\\u53e8\\u53fc\\u53f8\\u53f5\\u53eb\\u53e6\\u53ea\\u53f2\\u53f1\\u53f0\\u53e5\\u53ed\\u53fb\\u56db\\u56da\\u5916\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u592e\\u5931\\u5974\\u5976\\u5b55\\u5b83\\u5c3c\\u5de8\\u5de7\\u5de6\\u5e02\\u5e03\\u5e73\\u5e7c\\u5f01\\u5f18\\u5f17\\u5fc5\\u620a\\u6253\\u6254\\u6252\\u6251\\u65a5\\u65e6\\u672e\\u672c\\u672a\\u672b\\u672d\\u6b63\\u6bcd\\u6c11\\u6c10\\u6c38\\u6c41\\u6c40\\u6c3e\\u72af\\u7384\\u7389\\u74dc\\u74e6\\u7518\\u751f\\u7528\\u7529\\u7530\\u7531\\u7532\\u7533\\u758b\\u767d\\u76ae\\u76bf\\u76ee\\u77db\\u77e2\\u77f3\\u793a\\u79be\\u7a74\\u7acb\\u4e1e\\u4e1f\\u4e52\\u4e53\\u4e69\\u4e99\\u4ea4\\u4ea6\\u4ea5\\u4eff\\u4f09\\u4f19\\u4f0a\\u4f15\\u4f0d\\u4f10\\u4f11\\u4f0f\\u4ef2\\u4ef6\\u4efb\\u4ef0\\u4ef3\\u4efd\\u4f01\\u4f0b\\u5149\\u5147\\u5146\\u5148\\u5168\\ufffd\".split(\"\"),e=0;e!=r[165].length;++e)65533!==r[165][e].charCodeAt(0)&&(n[r[165][e]]=42240+e,t[42240+e]=r[165][e]);for(r[166]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5171\\u518d\\u51b0\\u5217\\u5211\\u5212\\u520e\\u5216\\u52a3\\u5308\\u5321\\u5320\\u5370\\u5371\\u5409\\u540f\\u540c\\u540a\\u5410\\u5401\\u540b\\u5404\\u5411\\u540d\\u5408\\u5403\\u540e\\u5406\\u5412\\u56e0\\u56de\\u56dd\\u5733\\u5730\\u5728\\u572d\\u572c\\u572f\\u5729\\u5919\\u591a\\u5937\\u5938\\u5984\\u5978\\u5983\\u597d\\u5979\\u5982\\u5981\\u5b57\\u5b58\\u5b87\\u5b88\\u5b85\\u5b89\\u5bfa\\u5c16\\u5c79\\u5dde\\u5e06\\u5e76\\u5e74\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5f0f\\u5f1b\\u5fd9\\u5fd6\\u620e\\u620c\\u620d\\u6210\\u6263\\u625b\\u6258\\u6536\\u65e9\\u65e8\\u65ec\\u65ed\\u66f2\\u66f3\\u6709\\u673d\\u6734\\u6731\\u6735\\u6b21\\u6b64\\u6b7b\\u6c16\\u6c5d\\u6c57\\u6c59\\u6c5f\\u6c60\\u6c50\\u6c55\\u6c61\\u6c5b\\u6c4d\\u6c4e\\u7070\\u725f\\u725d\\u767e\\u7af9\\u7c73\\u7cf8\\u7f36\\u7f8a\\u7fbd\\u8001\\u8003\\u800c\\u8012\\u8033\\u807f\\u8089\\u808b\\u808c\\u81e3\\u81ea\\u81f3\\u81fc\\u820c\\u821b\\u821f\\u826e\\u8272\\u827e\\u866b\\u8840\\u884c\\u8863\\u897f\\u9621\\u4e32\\u4ea8\\u4f4d\\u4f4f\\u4f47\\u4f57\\u4f5e\\u4f34\\u4f5b\\u4f55\\u4f30\\u4f50\\u4f51\\u4f3d\\u4f3a\\u4f38\\u4f43\\u4f54\\u4f3c\\u4f46\\u4f63\\ufffd\".split(\"\"),e=0;e!=r[166].length;++e)65533!==r[166][e].charCodeAt(0)&&(n[r[166][e]]=42496+e,t[42496+e]=r[166][e]);for(r[167]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u4f5c\\u4f60\\u4f2f\\u4f4e\\u4f36\\u4f59\\u4f5d\\u4f48\\u4f5a\\u514c\\u514b\\u514d\\u5175\\u51b6\\u51b7\\u5225\\u5224\\u5229\\u522a\\u5228\\u52ab\\u52a9\\u52aa\\u52ac\\u5323\\u5373\\u5375\\u541d\\u542d\\u541e\\u543e\\u5426\\u544e\\u5427\\u5446\\u5443\\u5433\\u5448\\u5442\\u541b\\u5429\\u544a\\u5439\\u543b\\u5438\\u542e\\u5435\\u5436\\u5420\\u543c\\u5440\\u5431\\u542b\\u541f\\u542c\\u56ea\\u56f0\\u56e4\\u56eb\\u574a\\u5751\\u5740\\u574d\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5747\\u574e\\u573e\\u5750\\u574f\\u573b\\u58ef\\u593e\\u599d\\u5992\\u59a8\\u599e\\u59a3\\u5999\\u5996\\u598d\\u59a4\\u5993\\u598a\\u59a5\\u5b5d\\u5b5c\\u5b5a\\u5b5b\\u5b8c\\u5b8b\\u5b8f\\u5c2c\\u5c40\\u5c41\\u5c3f\\u5c3e\\u5c90\\u5c91\\u5c94\\u5c8c\\u5deb\\u5e0c\\u5e8f\\u5e87\\u5e8a\\u5ef7\\u5f04\\u5f1f\\u5f64\\u5f62\\u5f77\\u5f79\\u5fd8\\u5fcc\\u5fd7\\u5fcd\\u5ff1\\u5feb\\u5ff8\\u5fea\\u6212\\u6211\\u6284\\u6297\\u6296\\u6280\\u6276\\u6289\\u626d\\u628a\\u627c\\u627e\\u6279\\u6273\\u6292\\u626f\\u6298\\u626e\\u6295\\u6293\\u6291\\u6286\\u6539\\u653b\\u6538\\u65f1\\u66f4\\u675f\\u674e\\u674f\\u6750\\u6751\\u675c\\u6756\\u675e\\u6749\\u6746\\u6760\\ufffd\".split(\"\"),e=0;e!=r[167].length;++e)65533!==r[167][e].charCodeAt(0)&&(n[r[167][e]]=42752+e,t[42752+e]=r[167][e]);for(r[168]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6753\\u6757\\u6b65\\u6bcf\\u6c42\\u6c5e\\u6c99\\u6c81\\u6c88\\u6c89\\u6c85\\u6c9b\\u6c6a\\u6c7a\\u6c90\\u6c70\\u6c8c\\u6c68\\u6c96\\u6c92\\u6c7d\\u6c83\\u6c72\\u6c7e\\u6c74\\u6c86\\u6c76\\u6c8d\\u6c94\\u6c98\\u6c82\\u7076\\u707c\\u707d\\u7078\\u7262\\u7261\\u7260\\u72c4\\u72c2\\u7396\\u752c\\u752b\\u7537\\u7538\\u7682\\u76ef\\u77e3\\u79c1\\u79c0\\u79bf\\u7a76\\u7cfb\\u7f55\\u8096\\u8093\\u809d\\u8098\\u809b\\u809a\\u80b2\\u826f\\u8292\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u828b\\u828d\\u898b\\u89d2\\u8a00\\u8c37\\u8c46\\u8c55\\u8c9d\\u8d64\\u8d70\\u8db3\\u8eab\\u8eca\\u8f9b\\u8fb0\\u8fc2\\u8fc6\\u8fc5\\u8fc4\\u5de1\\u9091\\u90a2\\u90aa\\u90a6\\u90a3\\u9149\\u91c6\\u91cc\\u9632\\u962e\\u9631\\u962a\\u962c\\u4e26\\u4e56\\u4e73\\u4e8b\\u4e9b\\u4e9e\\u4eab\\u4eac\\u4f6f\\u4f9d\\u4f8d\\u4f73\\u4f7f\\u4f6c\\u4f9b\\u4f8b\\u4f86\\u4f83\\u4f70\\u4f75\\u4f88\\u4f69\\u4f7b\\u4f96\\u4f7e\\u4f8f\\u4f91\\u4f7a\\u5154\\u5152\\u5155\\u5169\\u5177\\u5176\\u5178\\u51bd\\u51fd\\u523b\\u5238\\u5237\\u523a\\u5230\\u522e\\u5236\\u5241\\u52be\\u52bb\\u5352\\u5354\\u5353\\u5351\\u5366\\u5377\\u5378\\u5379\\u53d6\\u53d4\\u53d7\\u5473\\u5475\\ufffd\".split(\"\"),e=0;e!=r[168].length;++e)65533!==r[168][e].charCodeAt(0)&&(n[r[168][e]]=43008+e,t[43008+e]=r[168][e]);for(r[169]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5496\\u5478\\u5495\\u5480\\u547b\\u5477\\u5484\\u5492\\u5486\\u547c\\u5490\\u5471\\u5476\\u548c\\u549a\\u5462\\u5468\\u548b\\u547d\\u548e\\u56fa\\u5783\\u5777\\u576a\\u5769\\u5761\\u5766\\u5764\\u577c\\u591c\\u5949\\u5947\\u5948\\u5944\\u5954\\u59be\\u59bb\\u59d4\\u59b9\\u59ae\\u59d1\\u59c6\\u59d0\\u59cd\\u59cb\\u59d3\\u59ca\\u59af\\u59b3\\u59d2\\u59c5\\u5b5f\\u5b64\\u5b63\\u5b97\\u5b9a\\u5b98\\u5b9c\\u5b99\\u5b9b\\u5c1a\\u5c48\\u5c45\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5c46\\u5cb7\\u5ca1\\u5cb8\\u5ca9\\u5cab\\u5cb1\\u5cb3\\u5e18\\u5e1a\\u5e16\\u5e15\\u5e1b\\u5e11\\u5e78\\u5e9a\\u5e97\\u5e9c\\u5e95\\u5e96\\u5ef6\\u5f26\\u5f27\\u5f29\\u5f80\\u5f81\\u5f7f\\u5f7c\\u5fdd\\u5fe0\\u5ffd\\u5ff5\\u5fff\\u600f\\u6014\\u602f\\u6035\\u6016\\u602a\\u6015\\u6021\\u6027\\u6029\\u602b\\u601b\\u6216\\u6215\\u623f\\u623e\\u6240\\u627f\\u62c9\\u62cc\\u62c4\\u62bf\\u62c2\\u62b9\\u62d2\\u62db\\u62ab\\u62d3\\u62d4\\u62cb\\u62c8\\u62a8\\u62bd\\u62bc\\u62d0\\u62d9\\u62c7\\u62cd\\u62b5\\u62da\\u62b1\\u62d8\\u62d6\\u62d7\\u62c6\\u62ac\\u62ce\\u653e\\u65a7\\u65bc\\u65fa\\u6614\\u6613\\u660c\\u6606\\u6602\\u660e\\u6600\\u660f\\u6615\\u660a\\ufffd\".split(\"\"),e=0;e!=r[169].length;++e)65533!==r[169][e].charCodeAt(0)&&(n[r[169][e]]=43264+e,t[43264+e]=r[169][e]);for(r[170]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6607\\u670d\\u670b\\u676d\\u678b\\u6795\\u6771\\u679c\\u6773\\u6777\\u6787\\u679d\\u6797\\u676f\\u6770\\u677f\\u6789\\u677e\\u6790\\u6775\\u679a\\u6793\\u677c\\u676a\\u6772\\u6b23\\u6b66\\u6b67\\u6b7f\\u6c13\\u6c1b\\u6ce3\\u6ce8\\u6cf3\\u6cb1\\u6ccc\\u6ce5\\u6cb3\\u6cbd\\u6cbe\\u6cbc\\u6ce2\\u6cab\\u6cd5\\u6cd3\\u6cb8\\u6cc4\\u6cb9\\u6cc1\\u6cae\\u6cd7\\u6cc5\\u6cf1\\u6cbf\\u6cbb\\u6ce1\\u6cdb\\u6cca\\u6cac\\u6cef\\u6cdc\\u6cd6\\u6ce0\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7095\\u708e\\u7092\\u708a\\u7099\\u722c\\u722d\\u7238\\u7248\\u7267\\u7269\\u72c0\\u72ce\\u72d9\\u72d7\\u72d0\\u73a9\\u73a8\\u739f\\u73ab\\u73a5\\u753d\\u759d\\u7599\\u759a\\u7684\\u76c2\\u76f2\\u76f4\\u77e5\\u77fd\\u793e\\u7940\\u7941\\u79c9\\u79c8\\u7a7a\\u7a79\\u7afa\\u7cfe\\u7f54\\u7f8c\\u7f8b\\u8005\\u80ba\\u80a5\\u80a2\\u80b1\\u80a1\\u80ab\\u80a9\\u80b4\\u80aa\\u80af\\u81e5\\u81fe\\u820d\\u82b3\\u829d\\u8299\\u82ad\\u82bd\\u829f\\u82b9\\u82b1\\u82ac\\u82a5\\u82af\\u82b8\\u82a3\\u82b0\\u82be\\u82b7\\u864e\\u8671\\u521d\\u8868\\u8ecb\\u8fce\\u8fd4\\u8fd1\\u90b5\\u90b8\\u90b1\\u90b6\\u91c7\\u91d1\\u9577\\u9580\\u961c\\u9640\\u963f\\u963b\\u9644\\ufffd\".split(\"\"),e=0;e!=r[170].length;++e)65533!==r[170][e].charCodeAt(0)&&(n[r[170][e]]=43520+e,t[43520+e]=r[170][e]);for(r[171]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9642\\u96b9\\u96e8\\u9752\\u975e\\u4e9f\\u4ead\\u4eae\\u4fe1\\u4fb5\\u4faf\\u4fbf\\u4fe0\\u4fd1\\u4fcf\\u4fdd\\u4fc3\\u4fb6\\u4fd8\\u4fdf\\u4fca\\u4fd7\\u4fae\\u4fd0\\u4fc4\\u4fc2\\u4fda\\u4fce\\u4fde\\u4fb7\\u5157\\u5192\\u5191\\u51a0\\u524e\\u5243\\u524a\\u524d\\u524c\\u524b\\u5247\\u52c7\\u52c9\\u52c3\\u52c1\\u530d\\u5357\\u537b\\u539a\\u53db\\u54ac\\u54c0\\u54a8\\u54ce\\u54c9\\u54b8\\u54a6\\u54b3\\u54c7\\u54c2\\u54bd\\u54aa\\u54c1\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u54c4\\u54c8\\u54af\\u54ab\\u54b1\\u54bb\\u54a9\\u54a7\\u54bf\\u56ff\\u5782\\u578b\\u57a0\\u57a3\\u57a2\\u57ce\\u57ae\\u5793\\u5955\\u5951\\u594f\\u594e\\u5950\\u59dc\\u59d8\\u59ff\\u59e3\\u59e8\\u5a03\\u59e5\\u59ea\\u59da\\u59e6\\u5a01\\u59fb\\u5b69\\u5ba3\\u5ba6\\u5ba4\\u5ba2\\u5ba5\\u5c01\\u5c4e\\u5c4f\\u5c4d\\u5c4b\\u5cd9\\u5cd2\\u5df7\\u5e1d\\u5e25\\u5e1f\\u5e7d\\u5ea0\\u5ea6\\u5efa\\u5f08\\u5f2d\\u5f65\\u5f88\\u5f85\\u5f8a\\u5f8b\\u5f87\\u5f8c\\u5f89\\u6012\\u601d\\u6020\\u6025\\u600e\\u6028\\u604d\\u6070\\u6068\\u6062\\u6046\\u6043\\u606c\\u606b\\u606a\\u6064\\u6241\\u62dc\\u6316\\u6309\\u62fc\\u62ed\\u6301\\u62ee\\u62fd\\u6307\\u62f1\\u62f7\\ufffd\".split(\"\"),e=0;e!=r[171].length;++e)65533!==r[171][e].charCodeAt(0)&&(n[r[171][e]]=43776+e,t[43776+e]=r[171][e]);for(r[172]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u62ef\\u62ec\\u62fe\\u62f4\\u6311\\u6302\\u653f\\u6545\\u65ab\\u65bd\\u65e2\\u6625\\u662d\\u6620\\u6627\\u662f\\u661f\\u6628\\u6631\\u6624\\u66f7\\u67ff\\u67d3\\u67f1\\u67d4\\u67d0\\u67ec\\u67b6\\u67af\\u67f5\\u67e9\\u67ef\\u67c4\\u67d1\\u67b4\\u67da\\u67e5\\u67b8\\u67cf\\u67de\\u67f3\\u67b0\\u67d9\\u67e2\\u67dd\\u67d2\\u6b6a\\u6b83\\u6b86\\u6bb5\\u6bd2\\u6bd7\\u6c1f\\u6cc9\\u6d0b\\u6d32\\u6d2a\\u6d41\\u6d25\\u6d0c\\u6d31\\u6d1e\\u6d17\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6d3b\\u6d3d\\u6d3e\\u6d36\\u6d1b\\u6cf5\\u6d39\\u6d27\\u6d38\\u6d29\\u6d2e\\u6d35\\u6d0e\\u6d2b\\u70ab\\u70ba\\u70b3\\u70ac\\u70af\\u70ad\\u70b8\\u70ae\\u70a4\\u7230\\u7272\\u726f\\u7274\\u72e9\\u72e0\\u72e1\\u73b7\\u73ca\\u73bb\\u73b2\\u73cd\\u73c0\\u73b3\\u751a\\u752d\\u754f\\u754c\\u754e\\u754b\\u75ab\\u75a4\\u75a5\\u75a2\\u75a3\\u7678\\u7686\\u7687\\u7688\\u76c8\\u76c6\\u76c3\\u76c5\\u7701\\u76f9\\u76f8\\u7709\\u770b\\u76fe\\u76fc\\u7707\\u77dc\\u7802\\u7814\\u780c\\u780d\\u7946\\u7949\\u7948\\u7947\\u79b9\\u79ba\\u79d1\\u79d2\\u79cb\\u7a7f\\u7a81\\u7aff\\u7afd\\u7c7d\\u7d02\\u7d05\\u7d00\\u7d09\\u7d07\\u7d04\\u7d06\\u7f38\\u7f8e\\u7fbf\\u8004\\ufffd\".split(\"\"),e=0;e!=r[172].length;++e)65533!==r[172][e].charCodeAt(0)&&(n[r[172][e]]=44032+e,t[44032+e]=r[172][e]);for(r[173]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8010\\u800d\\u8011\\u8036\\u80d6\\u80e5\\u80da\\u80c3\\u80c4\\u80cc\\u80e1\\u80db\\u80ce\\u80de\\u80e4\\u80dd\\u81f4\\u8222\\u82e7\\u8303\\u8305\\u82e3\\u82db\\u82e6\\u8304\\u82e5\\u8302\\u8309\\u82d2\\u82d7\\u82f1\\u8301\\u82dc\\u82d4\\u82d1\\u82de\\u82d3\\u82df\\u82ef\\u8306\\u8650\\u8679\\u867b\\u867a\\u884d\\u886b\\u8981\\u89d4\\u8a08\\u8a02\\u8a03\\u8c9e\\u8ca0\\u8d74\\u8d73\\u8db4\\u8ecd\\u8ecc\\u8ff0\\u8fe6\\u8fe2\\u8fea\\u8fe5\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8fed\\u8feb\\u8fe4\\u8fe8\\u90ca\\u90ce\\u90c1\\u90c3\\u914b\\u914a\\u91cd\\u9582\\u9650\\u964b\\u964c\\u964d\\u9762\\u9769\\u97cb\\u97ed\\u97f3\\u9801\\u98a8\\u98db\\u98df\\u9996\\u9999\\u4e58\\u4eb3\\u500c\\u500d\\u5023\\u4fef\\u5026\\u5025\\u4ff8\\u5029\\u5016\\u5006\\u503c\\u501f\\u501a\\u5012\\u5011\\u4ffa\\u5000\\u5014\\u5028\\u4ff1\\u5021\\u500b\\u5019\\u5018\\u4ff3\\u4fee\\u502d\\u502a\\u4ffe\\u502b\\u5009\\u517c\\u51a4\\u51a5\\u51a2\\u51cd\\u51cc\\u51c6\\u51cb\\u5256\\u525c\\u5254\\u525b\\u525d\\u532a\\u537f\\u539f\\u539d\\u53df\\u54e8\\u5510\\u5501\\u5537\\u54fc\\u54e5\\u54f2\\u5506\\u54fa\\u5514\\u54e9\\u54ed\\u54e1\\u5509\\u54ee\\u54ea\\ufffd\".split(\"\"),e=0;e!=r[173].length;++e)65533!==r[173][e].charCodeAt(0)&&(n[r[173][e]]=44288+e,t[44288+e]=r[173][e]);for(r[174]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u54e6\\u5527\\u5507\\u54fd\\u550f\\u5703\\u5704\\u57c2\\u57d4\\u57cb\\u57c3\\u5809\\u590f\\u5957\\u5958\\u595a\\u5a11\\u5a18\\u5a1c\\u5a1f\\u5a1b\\u5a13\\u59ec\\u5a20\\u5a23\\u5a29\\u5a25\\u5a0c\\u5a09\\u5b6b\\u5c58\\u5bb0\\u5bb3\\u5bb6\\u5bb4\\u5bae\\u5bb5\\u5bb9\\u5bb8\\u5c04\\u5c51\\u5c55\\u5c50\\u5ced\\u5cfd\\u5cfb\\u5cea\\u5ce8\\u5cf0\\u5cf6\\u5d01\\u5cf4\\u5dee\\u5e2d\\u5e2b\\u5eab\\u5ead\\u5ea7\\u5f31\\u5f92\\u5f91\\u5f90\\u6059\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6063\\u6065\\u6050\\u6055\\u606d\\u6069\\u606f\\u6084\\u609f\\u609a\\u608d\\u6094\\u608c\\u6085\\u6096\\u6247\\u62f3\\u6308\\u62ff\\u634e\\u633e\\u632f\\u6355\\u6342\\u6346\\u634f\\u6349\\u633a\\u6350\\u633d\\u632a\\u632b\\u6328\\u634d\\u634c\\u6548\\u6549\\u6599\\u65c1\\u65c5\\u6642\\u6649\\u664f\\u6643\\u6652\\u664c\\u6645\\u6641\\u66f8\\u6714\\u6715\\u6717\\u6821\\u6838\\u6848\\u6846\\u6853\\u6839\\u6842\\u6854\\u6829\\u68b3\\u6817\\u684c\\u6851\\u683d\\u67f4\\u6850\\u6840\\u683c\\u6843\\u682a\\u6845\\u6813\\u6818\\u6841\\u6b8a\\u6b89\\u6bb7\\u6c23\\u6c27\\u6c28\\u6c26\\u6c24\\u6cf0\\u6d6a\\u6d95\\u6d88\\u6d87\\u6d66\\u6d78\\u6d77\\u6d59\\u6d93\\ufffd\".split(\"\"),e=0;e!=r[174].length;++e)65533!==r[174][e].charCodeAt(0)&&(n[r[174][e]]=44544+e,t[44544+e]=r[174][e]);for(r[175]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6d6c\\u6d89\\u6d6e\\u6d5a\\u6d74\\u6d69\\u6d8c\\u6d8a\\u6d79\\u6d85\\u6d65\\u6d94\\u70ca\\u70d8\\u70e4\\u70d9\\u70c8\\u70cf\\u7239\\u7279\\u72fc\\u72f9\\u72fd\\u72f8\\u72f7\\u7386\\u73ed\\u7409\\u73ee\\u73e0\\u73ea\\u73de\\u7554\\u755d\\u755c\\u755a\\u7559\\u75be\\u75c5\\u75c7\\u75b2\\u75b3\\u75bd\\u75bc\\u75b9\\u75c2\\u75b8\\u768b\\u76b0\\u76ca\\u76cd\\u76ce\\u7729\\u771f\\u7720\\u7728\\u77e9\\u7830\\u7827\\u7838\\u781d\\u7834\\u7837\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7825\\u782d\\u7820\\u781f\\u7832\\u7955\\u7950\\u7960\\u795f\\u7956\\u795e\\u795d\\u7957\\u795a\\u79e4\\u79e3\\u79e7\\u79df\\u79e6\\u79e9\\u79d8\\u7a84\\u7a88\\u7ad9\\u7b06\\u7b11\\u7c89\\u7d21\\u7d17\\u7d0b\\u7d0a\\u7d20\\u7d22\\u7d14\\u7d10\\u7d15\\u7d1a\\u7d1c\\u7d0d\\u7d19\\u7d1b\\u7f3a\\u7f5f\\u7f94\\u7fc5\\u7fc1\\u8006\\u8018\\u8015\\u8019\\u8017\\u803d\\u803f\\u80f1\\u8102\\u80f0\\u8105\\u80ed\\u80f4\\u8106\\u80f8\\u80f3\\u8108\\u80fd\\u810a\\u80fc\\u80ef\\u81ed\\u81ec\\u8200\\u8210\\u822a\\u822b\\u8228\\u822c\\u82bb\\u832b\\u8352\\u8354\\u834a\\u8338\\u8350\\u8349\\u8335\\u8334\\u834f\\u8332\\u8339\\u8336\\u8317\\u8340\\u8331\\u8328\\u8343\\ufffd\".split(\"\"),e=0;e!=r[175].length;++e)65533!==r[175][e].charCodeAt(0)&&(n[r[175][e]]=44800+e,t[44800+e]=r[175][e]);for(r[176]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8654\\u868a\\u86aa\\u8693\\u86a4\\u86a9\\u868c\\u86a3\\u869c\\u8870\\u8877\\u8881\\u8882\\u887d\\u8879\\u8a18\\u8a10\\u8a0e\\u8a0c\\u8a15\\u8a0a\\u8a17\\u8a13\\u8a16\\u8a0f\\u8a11\\u8c48\\u8c7a\\u8c79\\u8ca1\\u8ca2\\u8d77\\u8eac\\u8ed2\\u8ed4\\u8ecf\\u8fb1\\u9001\\u9006\\u8ff7\\u9000\\u8ffa\\u8ff4\\u9003\\u8ffd\\u9005\\u8ff8\\u9095\\u90e1\\u90dd\\u90e2\\u9152\\u914d\\u914c\\u91d8\\u91dd\\u91d7\\u91dc\\u91d9\\u9583\\u9662\\u9663\\u9661\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u965b\\u965d\\u9664\\u9658\\u965e\\u96bb\\u98e2\\u99ac\\u9aa8\\u9ad8\\u9b25\\u9b32\\u9b3c\\u4e7e\\u507a\\u507d\\u505c\\u5047\\u5043\\u504c\\u505a\\u5049\\u5065\\u5076\\u504e\\u5055\\u5075\\u5074\\u5077\\u504f\\u500f\\u506f\\u506d\\u515c\\u5195\\u51f0\\u526a\\u526f\\u52d2\\u52d9\\u52d8\\u52d5\\u5310\\u530f\\u5319\\u533f\\u5340\\u533e\\u53c3\\u66fc\\u5546\\u556a\\u5566\\u5544\\u555e\\u5561\\u5543\\u554a\\u5531\\u5556\\u554f\\u5555\\u552f\\u5564\\u5538\\u552e\\u555c\\u552c\\u5563\\u5533\\u5541\\u5557\\u5708\\u570b\\u5709\\u57df\\u5805\\u580a\\u5806\\u57e0\\u57e4\\u57fa\\u5802\\u5835\\u57f7\\u57f9\\u5920\\u5962\\u5a36\\u5a41\\u5a49\\u5a66\\u5a6a\\u5a40\\ufffd\".split(\"\"),e=0;e!=r[176].length;++e)65533!==r[176][e].charCodeAt(0)&&(n[r[176][e]]=45056+e,t[45056+e]=r[176][e]);for(r[177]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5a3c\\u5a62\\u5a5a\\u5a46\\u5a4a\\u5b70\\u5bc7\\u5bc5\\u5bc4\\u5bc2\\u5bbf\\u5bc6\\u5c09\\u5c08\\u5c07\\u5c60\\u5c5c\\u5c5d\\u5d07\\u5d06\\u5d0e\\u5d1b\\u5d16\\u5d22\\u5d11\\u5d29\\u5d14\\u5d19\\u5d24\\u5d27\\u5d17\\u5de2\\u5e38\\u5e36\\u5e33\\u5e37\\u5eb7\\u5eb8\\u5eb6\\u5eb5\\u5ebe\\u5f35\\u5f37\\u5f57\\u5f6c\\u5f69\\u5f6b\\u5f97\\u5f99\\u5f9e\\u5f98\\u5fa1\\u5fa0\\u5f9c\\u607f\\u60a3\\u6089\\u60a0\\u60a8\\u60cb\\u60b4\\u60e6\\u60bd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u60c5\\u60bb\\u60b5\\u60dc\\u60bc\\u60d8\\u60d5\\u60c6\\u60df\\u60b8\\u60da\\u60c7\\u621a\\u621b\\u6248\\u63a0\\u63a7\\u6372\\u6396\\u63a2\\u63a5\\u6377\\u6367\\u6398\\u63aa\\u6371\\u63a9\\u6389\\u6383\\u639b\\u636b\\u63a8\\u6384\\u6388\\u6399\\u63a1\\u63ac\\u6392\\u638f\\u6380\\u637b\\u6369\\u6368\\u637a\\u655d\\u6556\\u6551\\u6559\\u6557\\u555f\\u654f\\u6558\\u6555\\u6554\\u659c\\u659b\\u65ac\\u65cf\\u65cb\\u65cc\\u65ce\\u665d\\u665a\\u6664\\u6668\\u6666\\u665e\\u66f9\\u52d7\\u671b\\u6881\\u68af\\u68a2\\u6893\\u68b5\\u687f\\u6876\\u68b1\\u68a7\\u6897\\u68b0\\u6883\\u68c4\\u68ad\\u6886\\u6885\\u6894\\u689d\\u68a8\\u689f\\u68a1\\u6882\\u6b32\\u6bba\\ufffd\".split(\"\"),e=0;e!=r[177].length;++e)65533!==r[177][e].charCodeAt(0)&&(n[r[177][e]]=45312+e,t[45312+e]=r[177][e]);for(r[178]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6beb\\u6bec\\u6c2b\\u6d8e\\u6dbc\\u6df3\\u6dd9\\u6db2\\u6de1\\u6dcc\\u6de4\\u6dfb\\u6dfa\\u6e05\\u6dc7\\u6dcb\\u6daf\\u6dd1\\u6dae\\u6dde\\u6df9\\u6db8\\u6df7\\u6df5\\u6dc5\\u6dd2\\u6e1a\\u6db5\\u6dda\\u6deb\\u6dd8\\u6dea\\u6df1\\u6dee\\u6de8\\u6dc6\\u6dc4\\u6daa\\u6dec\\u6dbf\\u6de6\\u70f9\\u7109\\u710a\\u70fd\\u70ef\\u723d\\u727d\\u7281\\u731c\\u731b\\u7316\\u7313\\u7319\\u7387\\u7405\\u740a\\u7403\\u7406\\u73fe\\u740d\\u74e0\\u74f6\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u74f7\\u751c\\u7522\\u7565\\u7566\\u7562\\u7570\\u758f\\u75d4\\u75d5\\u75b5\\u75ca\\u75cd\\u768e\\u76d4\\u76d2\\u76db\\u7737\\u773e\\u773c\\u7736\\u7738\\u773a\\u786b\\u7843\\u784e\\u7965\\u7968\\u796d\\u79fb\\u7a92\\u7a95\\u7b20\\u7b28\\u7b1b\\u7b2c\\u7b26\\u7b19\\u7b1e\\u7b2e\\u7c92\\u7c97\\u7c95\\u7d46\\u7d43\\u7d71\\u7d2e\\u7d39\\u7d3c\\u7d40\\u7d30\\u7d33\\u7d44\\u7d2f\\u7d42\\u7d32\\u7d31\\u7f3d\\u7f9e\\u7f9a\\u7fcc\\u7fce\\u7fd2\\u801c\\u804a\\u8046\\u812f\\u8116\\u8123\\u812b\\u8129\\u8130\\u8124\\u8202\\u8235\\u8237\\u8236\\u8239\\u838e\\u839e\\u8398\\u8378\\u83a2\\u8396\\u83bd\\u83ab\\u8392\\u838a\\u8393\\u8389\\u83a0\\u8377\\u837b\\u837c\\ufffd\".split(\"\"),e=0;e!=r[178].length;++e)65533!==r[178][e].charCodeAt(0)&&(n[r[178][e]]=45568+e,t[45568+e]=r[178][e]);for(r[179]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8386\\u83a7\\u8655\\u5f6a\\u86c7\\u86c0\\u86b6\\u86c4\\u86b5\\u86c6\\u86cb\\u86b1\\u86af\\u86c9\\u8853\\u889e\\u8888\\u88ab\\u8892\\u8896\\u888d\\u888b\\u8993\\u898f\\u8a2a\\u8a1d\\u8a23\\u8a25\\u8a31\\u8a2d\\u8a1f\\u8a1b\\u8a22\\u8c49\\u8c5a\\u8ca9\\u8cac\\u8cab\\u8ca8\\u8caa\\u8ca7\\u8d67\\u8d66\\u8dbe\\u8dba\\u8edb\\u8edf\\u9019\\u900d\\u901a\\u9017\\u9023\\u901f\\u901d\\u9010\\u9015\\u901e\\u9020\\u900f\\u9022\\u9016\\u901b\\u9014\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u90e8\\u90ed\\u90fd\\u9157\\u91ce\\u91f5\\u91e6\\u91e3\\u91e7\\u91ed\\u91e9\\u9589\\u966a\\u9675\\u9673\\u9678\\u9670\\u9674\\u9676\\u9677\\u966c\\u96c0\\u96ea\\u96e9\\u7ae0\\u7adf\\u9802\\u9803\\u9b5a\\u9ce5\\u9e75\\u9e7f\\u9ea5\\u9ebb\\u50a2\\u508d\\u5085\\u5099\\u5091\\u5080\\u5096\\u5098\\u509a\\u6700\\u51f1\\u5272\\u5274\\u5275\\u5269\\u52de\\u52dd\\u52db\\u535a\\u53a5\\u557b\\u5580\\u55a7\\u557c\\u558a\\u559d\\u5598\\u5582\\u559c\\u55aa\\u5594\\u5587\\u558b\\u5583\\u55b3\\u55ae\\u559f\\u553e\\u55b2\\u559a\\u55bb\\u55ac\\u55b1\\u557e\\u5589\\u55ab\\u5599\\u570d\\u582f\\u582a\\u5834\\u5824\\u5830\\u5831\\u5821\\u581d\\u5820\\u58f9\\u58fa\\u5960\\ufffd\".split(\"\"),e=0;e!=r[179].length;++e)65533!==r[179][e].charCodeAt(0)&&(n[r[179][e]]=45824+e,t[45824+e]=r[179][e]);for(r[180]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5a77\\u5a9a\\u5a7f\\u5a92\\u5a9b\\u5aa7\\u5b73\\u5b71\\u5bd2\\u5bcc\\u5bd3\\u5bd0\\u5c0a\\u5c0b\\u5c31\\u5d4c\\u5d50\\u5d34\\u5d47\\u5dfd\\u5e45\\u5e3d\\u5e40\\u5e43\\u5e7e\\u5eca\\u5ec1\\u5ec2\\u5ec4\\u5f3c\\u5f6d\\u5fa9\\u5faa\\u5fa8\\u60d1\\u60e1\\u60b2\\u60b6\\u60e0\\u611c\\u6123\\u60fa\\u6115\\u60f0\\u60fb\\u60f4\\u6168\\u60f1\\u610e\\u60f6\\u6109\\u6100\\u6112\\u621f\\u6249\\u63a3\\u638c\\u63cf\\u63c0\\u63e9\\u63c9\\u63c6\\u63cd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u63d2\\u63e3\\u63d0\\u63e1\\u63d6\\u63ed\\u63ee\\u6376\\u63f4\\u63ea\\u63db\\u6452\\u63da\\u63f9\\u655e\\u6566\\u6562\\u6563\\u6591\\u6590\\u65af\\u666e\\u6670\\u6674\\u6676\\u666f\\u6691\\u667a\\u667e\\u6677\\u66fe\\u66ff\\u671f\\u671d\\u68fa\\u68d5\\u68e0\\u68d8\\u68d7\\u6905\\u68df\\u68f5\\u68ee\\u68e7\\u68f9\\u68d2\\u68f2\\u68e3\\u68cb\\u68cd\\u690d\\u6912\\u690e\\u68c9\\u68da\\u696e\\u68fb\\u6b3e\\u6b3a\\u6b3d\\u6b98\\u6b96\\u6bbc\\u6bef\\u6c2e\\u6c2f\\u6c2c\\u6e2f\\u6e38\\u6e54\\u6e21\\u6e32\\u6e67\\u6e4a\\u6e20\\u6e25\\u6e23\\u6e1b\\u6e5b\\u6e58\\u6e24\\u6e56\\u6e6e\\u6e2d\\u6e26\\u6e6f\\u6e34\\u6e4d\\u6e3a\\u6e2c\\u6e43\\u6e1d\\u6e3e\\u6ecb\\ufffd\".split(\"\"),e=0;e!=r[180].length;++e)65533!==r[180][e].charCodeAt(0)&&(n[r[180][e]]=46080+e,t[46080+e]=r[180][e]);for(r[181]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6e89\\u6e19\\u6e4e\\u6e63\\u6e44\\u6e72\\u6e69\\u6e5f\\u7119\\u711a\\u7126\\u7130\\u7121\\u7136\\u716e\\u711c\\u724c\\u7284\\u7280\\u7336\\u7325\\u7334\\u7329\\u743a\\u742a\\u7433\\u7422\\u7425\\u7435\\u7436\\u7434\\u742f\\u741b\\u7426\\u7428\\u7525\\u7526\\u756b\\u756a\\u75e2\\u75db\\u75e3\\u75d9\\u75d8\\u75de\\u75e0\\u767b\\u767c\\u7696\\u7693\\u76b4\\u76dc\\u774f\\u77ed\\u785d\\u786c\\u786f\\u7a0d\\u7a08\\u7a0b\\u7a05\\u7a00\\u7a98\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7a97\\u7a96\\u7ae5\\u7ae3\\u7b49\\u7b56\\u7b46\\u7b50\\u7b52\\u7b54\\u7b4d\\u7b4b\\u7b4f\\u7b51\\u7c9f\\u7ca5\\u7d5e\\u7d50\\u7d68\\u7d55\\u7d2b\\u7d6e\\u7d72\\u7d61\\u7d66\\u7d62\\u7d70\\u7d73\\u5584\\u7fd4\\u7fd5\\u800b\\u8052\\u8085\\u8155\\u8154\\u814b\\u8151\\u814e\\u8139\\u8146\\u813e\\u814c\\u8153\\u8174\\u8212\\u821c\\u83e9\\u8403\\u83f8\\u840d\\u83e0\\u83c5\\u840b\\u83c1\\u83ef\\u83f1\\u83f4\\u8457\\u840a\\u83f0\\u840c\\u83cc\\u83fd\\u83f2\\u83ca\\u8438\\u840e\\u8404\\u83dc\\u8407\\u83d4\\u83df\\u865b\\u86df\\u86d9\\u86ed\\u86d4\\u86db\\u86e4\\u86d0\\u86de\\u8857\\u88c1\\u88c2\\u88b1\\u8983\\u8996\\u8a3b\\u8a60\\u8a55\\u8a5e\\u8a3c\\u8a41\\ufffd\".split(\"\"),e=0;e!=r[181].length;++e)65533!==r[181][e].charCodeAt(0)&&(n[r[181][e]]=46336+e,t[46336+e]=r[181][e]);for(r[182]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8a54\\u8a5b\\u8a50\\u8a46\\u8a34\\u8a3a\\u8a36\\u8a56\\u8c61\\u8c82\\u8caf\\u8cbc\\u8cb3\\u8cbd\\u8cc1\\u8cbb\\u8cc0\\u8cb4\\u8cb7\\u8cb6\\u8cbf\\u8cb8\\u8d8a\\u8d85\\u8d81\\u8dce\\u8ddd\\u8dcb\\u8dda\\u8dd1\\u8dcc\\u8ddb\\u8dc6\\u8efb\\u8ef8\\u8efc\\u8f9c\\u902e\\u9035\\u9031\\u9038\\u9032\\u9036\\u9102\\u90f5\\u9109\\u90fe\\u9163\\u9165\\u91cf\\u9214\\u9215\\u9223\\u9209\\u921e\\u920d\\u9210\\u9207\\u9211\\u9594\\u958f\\u958b\\u9591\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9593\\u9592\\u958e\\u968a\\u968e\\u968b\\u967d\\u9685\\u9686\\u968d\\u9672\\u9684\\u96c1\\u96c5\\u96c4\\u96c6\\u96c7\\u96ef\\u96f2\\u97cc\\u9805\\u9806\\u9808\\u98e7\\u98ea\\u98ef\\u98e9\\u98f2\\u98ed\\u99ae\\u99ad\\u9ec3\\u9ecd\\u9ed1\\u4e82\\u50ad\\u50b5\\u50b2\\u50b3\\u50c5\\u50be\\u50ac\\u50b7\\u50bb\\u50af\\u50c7\\u527f\\u5277\\u527d\\u52df\\u52e6\\u52e4\\u52e2\\u52e3\\u532f\\u55df\\u55e8\\u55d3\\u55e6\\u55ce\\u55dc\\u55c7\\u55d1\\u55e3\\u55e4\\u55ef\\u55da\\u55e1\\u55c5\\u55c6\\u55e5\\u55c9\\u5712\\u5713\\u585e\\u5851\\u5858\\u5857\\u585a\\u5854\\u586b\\u584c\\u586d\\u584a\\u5862\\u5852\\u584b\\u5967\\u5ac1\\u5ac9\\u5acc\\u5abe\\u5abd\\u5abc\\ufffd\".split(\"\"),e=0;e!=r[182].length;++e)65533!==r[182][e].charCodeAt(0)&&(n[r[182][e]]=46592+e,t[46592+e]=r[182][e]);for(r[183]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5ab3\\u5ac2\\u5ab2\\u5d69\\u5d6f\\u5e4c\\u5e79\\u5ec9\\u5ec8\\u5f12\\u5f59\\u5fac\\u5fae\\u611a\\u610f\\u6148\\u611f\\u60f3\\u611b\\u60f9\\u6101\\u6108\\u614e\\u614c\\u6144\\u614d\\u613e\\u6134\\u6127\\u610d\\u6106\\u6137\\u6221\\u6222\\u6413\\u643e\\u641e\\u642a\\u642d\\u643d\\u642c\\u640f\\u641c\\u6414\\u640d\\u6436\\u6416\\u6417\\u6406\\u656c\\u659f\\u65b0\\u6697\\u6689\\u6687\\u6688\\u6696\\u6684\\u6698\\u668d\\u6703\\u6994\\u696d\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u695a\\u6977\\u6960\\u6954\\u6975\\u6930\\u6982\\u694a\\u6968\\u696b\\u695e\\u6953\\u6979\\u6986\\u695d\\u6963\\u695b\\u6b47\\u6b72\\u6bc0\\u6bbf\\u6bd3\\u6bfd\\u6ea2\\u6eaf\\u6ed3\\u6eb6\\u6ec2\\u6e90\\u6e9d\\u6ec7\\u6ec5\\u6ea5\\u6e98\\u6ebc\\u6eba\\u6eab\\u6ed1\\u6e96\\u6e9c\\u6ec4\\u6ed4\\u6eaa\\u6ea7\\u6eb4\\u714e\\u7159\\u7169\\u7164\\u7149\\u7167\\u715c\\u716c\\u7166\\u714c\\u7165\\u715e\\u7146\\u7168\\u7156\\u723a\\u7252\\u7337\\u7345\\u733f\\u733e\\u746f\\u745a\\u7455\\u745f\\u745e\\u7441\\u743f\\u7459\\u745b\\u745c\\u7576\\u7578\\u7600\\u75f0\\u7601\\u75f2\\u75f1\\u75fa\\u75ff\\u75f4\\u75f3\\u76de\\u76df\\u775b\\u776b\\u7766\\u775e\\u7763\\ufffd\".split(\"\"),e=0;e!=r[183].length;++e)65533!==r[183][e].charCodeAt(0)&&(n[r[183][e]]=46848+e,t[46848+e]=r[183][e]);for(r[184]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7779\\u776a\\u776c\\u775c\\u7765\\u7768\\u7762\\u77ee\\u788e\\u78b0\\u7897\\u7898\\u788c\\u7889\\u787c\\u7891\\u7893\\u787f\\u797a\\u797f\\u7981\\u842c\\u79bd\\u7a1c\\u7a1a\\u7a20\\u7a14\\u7a1f\\u7a1e\\u7a9f\\u7aa0\\u7b77\\u7bc0\\u7b60\\u7b6e\\u7b67\\u7cb1\\u7cb3\\u7cb5\\u7d93\\u7d79\\u7d91\\u7d81\\u7d8f\\u7d5b\\u7f6e\\u7f69\\u7f6a\\u7f72\\u7fa9\\u7fa8\\u7fa4\\u8056\\u8058\\u8086\\u8084\\u8171\\u8170\\u8178\\u8165\\u816e\\u8173\\u816b\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8179\\u817a\\u8166\\u8205\\u8247\\u8482\\u8477\\u843d\\u8431\\u8475\\u8466\\u846b\\u8449\\u846c\\u845b\\u843c\\u8435\\u8461\\u8463\\u8469\\u846d\\u8446\\u865e\\u865c\\u865f\\u86f9\\u8713\\u8708\\u8707\\u8700\\u86fe\\u86fb\\u8702\\u8703\\u8706\\u870a\\u8859\\u88df\\u88d4\\u88d9\\u88dc\\u88d8\\u88dd\\u88e1\\u88ca\\u88d5\\u88d2\\u899c\\u89e3\\u8a6b\\u8a72\\u8a73\\u8a66\\u8a69\\u8a70\\u8a87\\u8a7c\\u8a63\\u8aa0\\u8a71\\u8a85\\u8a6d\\u8a62\\u8a6e\\u8a6c\\u8a79\\u8a7b\\u8a3e\\u8a68\\u8c62\\u8c8a\\u8c89\\u8cca\\u8cc7\\u8cc8\\u8cc4\\u8cb2\\u8cc3\\u8cc2\\u8cc5\\u8de1\\u8ddf\\u8de8\\u8def\\u8df3\\u8dfa\\u8dea\\u8de4\\u8de6\\u8eb2\\u8f03\\u8f09\\u8efe\\u8f0a\\ufffd\".split(\"\"),e=0;e!=r[184].length;++e)65533!==r[184][e].charCodeAt(0)&&(n[r[184][e]]=47104+e,t[47104+e]=r[184][e]);for(r[185]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8f9f\\u8fb2\\u904b\\u904a\\u9053\\u9042\\u9054\\u903c\\u9055\\u9050\\u9047\\u904f\\u904e\\u904d\\u9051\\u903e\\u9041\\u9112\\u9117\\u916c\\u916a\\u9169\\u91c9\\u9237\\u9257\\u9238\\u923d\\u9240\\u923e\\u925b\\u924b\\u9264\\u9251\\u9234\\u9249\\u924d\\u9245\\u9239\\u923f\\u925a\\u9598\\u9698\\u9694\\u9695\\u96cd\\u96cb\\u96c9\\u96ca\\u96f7\\u96fb\\u96f9\\u96f6\\u9756\\u9774\\u9776\\u9810\\u9811\\u9813\\u980a\\u9812\\u980c\\u98fc\\u98f4\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u98fd\\u98fe\\u99b3\\u99b1\\u99b4\\u9ae1\\u9ce9\\u9e82\\u9f0e\\u9f13\\u9f20\\u50e7\\u50ee\\u50e5\\u50d6\\u50ed\\u50da\\u50d5\\u50cf\\u50d1\\u50f1\\u50ce\\u50e9\\u5162\\u51f3\\u5283\\u5282\\u5331\\u53ad\\u55fe\\u5600\\u561b\\u5617\\u55fd\\u5614\\u5606\\u5609\\u560d\\u560e\\u55f7\\u5616\\u561f\\u5608\\u5610\\u55f6\\u5718\\u5716\\u5875\\u587e\\u5883\\u5893\\u588a\\u5879\\u5885\\u587d\\u58fd\\u5925\\u5922\\u5924\\u596a\\u5969\\u5ae1\\u5ae6\\u5ae9\\u5ad7\\u5ad6\\u5ad8\\u5ae3\\u5b75\\u5bde\\u5be7\\u5be1\\u5be5\\u5be6\\u5be8\\u5be2\\u5be4\\u5bdf\\u5c0d\\u5c62\\u5d84\\u5d87\\u5e5b\\u5e63\\u5e55\\u5e57\\u5e54\\u5ed3\\u5ed6\\u5f0a\\u5f46\\u5f70\\u5fb9\\u6147\\ufffd\".split(\"\"),e=0;e!=r[185].length;++e)65533!==r[185][e].charCodeAt(0)&&(n[r[185][e]]=47360+e,t[47360+e]=r[185][e]);for(r[186]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u613f\\u614b\\u6177\\u6162\\u6163\\u615f\\u615a\\u6158\\u6175\\u622a\\u6487\\u6458\\u6454\\u64a4\\u6478\\u645f\\u647a\\u6451\\u6467\\u6434\\u646d\\u647b\\u6572\\u65a1\\u65d7\\u65d6\\u66a2\\u66a8\\u669d\\u699c\\u69a8\\u6995\\u69c1\\u69ae\\u69d3\\u69cb\\u699b\\u69b7\\u69bb\\u69ab\\u69b4\\u69d0\\u69cd\\u69ad\\u69cc\\u69a6\\u69c3\\u69a3\\u6b49\\u6b4c\\u6c33\\u6f33\\u6f14\\u6efe\\u6f13\\u6ef4\\u6f29\\u6f3e\\u6f20\\u6f2c\\u6f0f\\u6f02\\u6f22\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6eff\\u6eef\\u6f06\\u6f31\\u6f38\\u6f32\\u6f23\\u6f15\\u6f2b\\u6f2f\\u6f88\\u6f2a\\u6eec\\u6f01\\u6ef2\\u6ecc\\u6ef7\\u7194\\u7199\\u717d\\u718a\\u7184\\u7192\\u723e\\u7292\\u7296\\u7344\\u7350\\u7464\\u7463\\u746a\\u7470\\u746d\\u7504\\u7591\\u7627\\u760d\\u760b\\u7609\\u7613\\u76e1\\u76e3\\u7784\\u777d\\u777f\\u7761\\u78c1\\u789f\\u78a7\\u78b3\\u78a9\\u78a3\\u798e\\u798f\\u798d\\u7a2e\\u7a31\\u7aaa\\u7aa9\\u7aed\\u7aef\\u7ba1\\u7b95\\u7b8b\\u7b75\\u7b97\\u7b9d\\u7b94\\u7b8f\\u7bb8\\u7b87\\u7b84\\u7cb9\\u7cbd\\u7cbe\\u7dbb\\u7db0\\u7d9c\\u7dbd\\u7dbe\\u7da0\\u7dca\\u7db4\\u7db2\\u7db1\\u7dba\\u7da2\\u7dbf\\u7db5\\u7db8\\u7dad\\u7dd2\\u7dc7\\u7dac\\ufffd\".split(\"\"),e=0;e!=r[186].length;++e)65533!==r[186][e].charCodeAt(0)&&(n[r[186][e]]=47616+e,t[47616+e]=r[186][e]);for(r[187]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7f70\\u7fe0\\u7fe1\\u7fdf\\u805e\\u805a\\u8087\\u8150\\u8180\\u818f\\u8188\\u818a\\u817f\\u8182\\u81e7\\u81fa\\u8207\\u8214\\u821e\\u824b\\u84c9\\u84bf\\u84c6\\u84c4\\u8499\\u849e\\u84b2\\u849c\\u84cb\\u84b8\\u84c0\\u84d3\\u8490\\u84bc\\u84d1\\u84ca\\u873f\\u871c\\u873b\\u8722\\u8725\\u8734\\u8718\\u8755\\u8737\\u8729\\u88f3\\u8902\\u88f4\\u88f9\\u88f8\\u88fd\\u88e8\\u891a\\u88ef\\u8aa6\\u8a8c\\u8a9e\\u8aa3\\u8a8d\\u8aa1\\u8a93\\u8aa4\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8aaa\\u8aa5\\u8aa8\\u8a98\\u8a91\\u8a9a\\u8aa7\\u8c6a\\u8c8d\\u8c8c\\u8cd3\\u8cd1\\u8cd2\\u8d6b\\u8d99\\u8d95\\u8dfc\\u8f14\\u8f12\\u8f15\\u8f13\\u8fa3\\u9060\\u9058\\u905c\\u9063\\u9059\\u905e\\u9062\\u905d\\u905b\\u9119\\u9118\\u911e\\u9175\\u9178\\u9177\\u9174\\u9278\\u9280\\u9285\\u9298\\u9296\\u927b\\u9293\\u929c\\u92a8\\u927c\\u9291\\u95a1\\u95a8\\u95a9\\u95a3\\u95a5\\u95a4\\u9699\\u969c\\u969b\\u96cc\\u96d2\\u9700\\u977c\\u9785\\u97f6\\u9817\\u9818\\u98af\\u98b1\\u9903\\u9905\\u990c\\u9909\\u99c1\\u9aaf\\u9ab0\\u9ae6\\u9b41\\u9b42\\u9cf4\\u9cf6\\u9cf3\\u9ebc\\u9f3b\\u9f4a\\u5104\\u5100\\u50fb\\u50f5\\u50f9\\u5102\\u5108\\u5109\\u5105\\u51dc\\ufffd\".split(\"\"),e=0;e!=r[187].length;++e)65533!==r[187][e].charCodeAt(0)&&(n[r[187][e]]=47872+e,t[47872+e]=r[187][e]);for(r[188]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5287\\u5288\\u5289\\u528d\\u528a\\u52f0\\u53b2\\u562e\\u563b\\u5639\\u5632\\u563f\\u5634\\u5629\\u5653\\u564e\\u5657\\u5674\\u5636\\u562f\\u5630\\u5880\\u589f\\u589e\\u58b3\\u589c\\u58ae\\u58a9\\u58a6\\u596d\\u5b09\\u5afb\\u5b0b\\u5af5\\u5b0c\\u5b08\\u5bee\\u5bec\\u5be9\\u5beb\\u5c64\\u5c65\\u5d9d\\u5d94\\u5e62\\u5e5f\\u5e61\\u5ee2\\u5eda\\u5edf\\u5edd\\u5ee3\\u5ee0\\u5f48\\u5f71\\u5fb7\\u5fb5\\u6176\\u6167\\u616e\\u615d\\u6155\\u6182\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u617c\\u6170\\u616b\\u617e\\u61a7\\u6190\\u61ab\\u618e\\u61ac\\u619a\\u61a4\\u6194\\u61ae\\u622e\\u6469\\u646f\\u6479\\u649e\\u64b2\\u6488\\u6490\\u64b0\\u64a5\\u6493\\u6495\\u64a9\\u6492\\u64ae\\u64ad\\u64ab\\u649a\\u64ac\\u6499\\u64a2\\u64b3\\u6575\\u6577\\u6578\\u66ae\\u66ab\\u66b4\\u66b1\\u6a23\\u6a1f\\u69e8\\u6a01\\u6a1e\\u6a19\\u69fd\\u6a21\\u6a13\\u6a0a\\u69f3\\u6a02\\u6a05\\u69ed\\u6a11\\u6b50\\u6b4e\\u6ba4\\u6bc5\\u6bc6\\u6f3f\\u6f7c\\u6f84\\u6f51\\u6f66\\u6f54\\u6f86\\u6f6d\\u6f5b\\u6f78\\u6f6e\\u6f8e\\u6f7a\\u6f70\\u6f64\\u6f97\\u6f58\\u6ed5\\u6f6f\\u6f60\\u6f5f\\u719f\\u71ac\\u71b1\\u71a8\\u7256\\u729b\\u734e\\u7357\\u7469\\u748b\\u7483\\ufffd\".split(\"\"),e=0;e!=r[188].length;++e)65533!==r[188][e].charCodeAt(0)&&(n[r[188][e]]=48128+e,t[48128+e]=r[188][e]);for(r[189]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u747e\\u7480\\u757f\\u7620\\u7629\\u761f\\u7624\\u7626\\u7621\\u7622\\u769a\\u76ba\\u76e4\\u778e\\u7787\\u778c\\u7791\\u778b\\u78cb\\u78c5\\u78ba\\u78ca\\u78be\\u78d5\\u78bc\\u78d0\\u7a3f\\u7a3c\\u7a40\\u7a3d\\u7a37\\u7a3b\\u7aaf\\u7aae\\u7bad\\u7bb1\\u7bc4\\u7bb4\\u7bc6\\u7bc7\\u7bc1\\u7ba0\\u7bcc\\u7cca\\u7de0\\u7df4\\u7def\\u7dfb\\u7dd8\\u7dec\\u7ddd\\u7de8\\u7de3\\u7dda\\u7dde\\u7de9\\u7d9e\\u7dd9\\u7df2\\u7df9\\u7f75\\u7f77\\u7faf\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7fe9\\u8026\\u819b\\u819c\\u819d\\u81a0\\u819a\\u8198\\u8517\\u853d\\u851a\\u84ee\\u852c\\u852d\\u8513\\u8511\\u8523\\u8521\\u8514\\u84ec\\u8525\\u84ff\\u8506\\u8782\\u8774\\u8776\\u8760\\u8766\\u8778\\u8768\\u8759\\u8757\\u874c\\u8753\\u885b\\u885d\\u8910\\u8907\\u8912\\u8913\\u8915\\u890a\\u8abc\\u8ad2\\u8ac7\\u8ac4\\u8a95\\u8acb\\u8af8\\u8ab2\\u8ac9\\u8ac2\\u8abf\\u8ab0\\u8ad6\\u8acd\\u8ab6\\u8ab9\\u8adb\\u8c4c\\u8c4e\\u8c6c\\u8ce0\\u8cde\\u8ce6\\u8ce4\\u8cec\\u8ced\\u8ce2\\u8ce3\\u8cdc\\u8cea\\u8ce1\\u8d6d\\u8d9f\\u8da3\\u8e2b\\u8e10\\u8e1d\\u8e22\\u8e0f\\u8e29\\u8e1f\\u8e21\\u8e1e\\u8eba\\u8f1d\\u8f1b\\u8f1f\\u8f29\\u8f26\\u8f2a\\u8f1c\\u8f1e\\ufffd\".split(\"\"),e=0;e!=r[189].length;++e)65533!==r[189][e].charCodeAt(0)&&(n[r[189][e]]=48384+e,t[48384+e]=r[189][e]);for(r[190]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8f25\\u9069\\u906e\\u9068\\u906d\\u9077\\u9130\\u912d\\u9127\\u9131\\u9187\\u9189\\u918b\\u9183\\u92c5\\u92bb\\u92b7\\u92ea\\u92ac\\u92e4\\u92c1\\u92b3\\u92bc\\u92d2\\u92c7\\u92f0\\u92b2\\u95ad\\u95b1\\u9704\\u9706\\u9707\\u9709\\u9760\\u978d\\u978b\\u978f\\u9821\\u982b\\u981c\\u98b3\\u990a\\u9913\\u9912\\u9918\\u99dd\\u99d0\\u99df\\u99db\\u99d1\\u99d5\\u99d2\\u99d9\\u9ab7\\u9aee\\u9aef\\u9b27\\u9b45\\u9b44\\u9b77\\u9b6f\\u9d06\\u9d09\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9d03\\u9ea9\\u9ebe\\u9ece\\u58a8\\u9f52\\u5112\\u5118\\u5114\\u5110\\u5115\\u5180\\u51aa\\u51dd\\u5291\\u5293\\u52f3\\u5659\\u566b\\u5679\\u5669\\u5664\\u5678\\u566a\\u5668\\u5665\\u5671\\u566f\\u566c\\u5662\\u5676\\u58c1\\u58be\\u58c7\\u58c5\\u596e\\u5b1d\\u5b34\\u5b78\\u5bf0\\u5c0e\\u5f4a\\u61b2\\u6191\\u61a9\\u618a\\u61cd\\u61b6\\u61be\\u61ca\\u61c8\\u6230\\u64c5\\u64c1\\u64cb\\u64bb\\u64bc\\u64da\\u64c4\\u64c7\\u64c2\\u64cd\\u64bf\\u64d2\\u64d4\\u64be\\u6574\\u66c6\\u66c9\\u66b9\\u66c4\\u66c7\\u66b8\\u6a3d\\u6a38\\u6a3a\\u6a59\\u6a6b\\u6a58\\u6a39\\u6a44\\u6a62\\u6a61\\u6a4b\\u6a47\\u6a35\\u6a5f\\u6a48\\u6b59\\u6b77\\u6c05\\u6fc2\\u6fb1\\u6fa1\\ufffd\".split(\"\"),e=0;e!=r[190].length;++e)65533!==r[190][e].charCodeAt(0)&&(n[r[190][e]]=48640+e,t[48640+e]=r[190][e]);for(r[191]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6fc3\\u6fa4\\u6fc1\\u6fa7\\u6fb3\\u6fc0\\u6fb9\\u6fb6\\u6fa6\\u6fa0\\u6fb4\\u71be\\u71c9\\u71d0\\u71d2\\u71c8\\u71d5\\u71b9\\u71ce\\u71d9\\u71dc\\u71c3\\u71c4\\u7368\\u749c\\u74a3\\u7498\\u749f\\u749e\\u74e2\\u750c\\u750d\\u7634\\u7638\\u763a\\u76e7\\u76e5\\u77a0\\u779e\\u779f\\u77a5\\u78e8\\u78da\\u78ec\\u78e7\\u79a6\\u7a4d\\u7a4e\\u7a46\\u7a4c\\u7a4b\\u7aba\\u7bd9\\u7c11\\u7bc9\\u7be4\\u7bdb\\u7be1\\u7be9\\u7be6\\u7cd5\\u7cd6\\u7e0a\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7e11\\u7e08\\u7e1b\\u7e23\\u7e1e\\u7e1d\\u7e09\\u7e10\\u7f79\\u7fb2\\u7ff0\\u7ff1\\u7fee\\u8028\\u81b3\\u81a9\\u81a8\\u81fb\\u8208\\u8258\\u8259\\u854a\\u8559\\u8548\\u8568\\u8569\\u8543\\u8549\\u856d\\u856a\\u855e\\u8783\\u879f\\u879e\\u87a2\\u878d\\u8861\\u892a\\u8932\\u8925\\u892b\\u8921\\u89aa\\u89a6\\u8ae6\\u8afa\\u8aeb\\u8af1\\u8b00\\u8adc\\u8ae7\\u8aee\\u8afe\\u8b01\\u8b02\\u8af7\\u8aed\\u8af3\\u8af6\\u8afc\\u8c6b\\u8c6d\\u8c93\\u8cf4\\u8e44\\u8e31\\u8e34\\u8e42\\u8e39\\u8e35\\u8f3b\\u8f2f\\u8f38\\u8f33\\u8fa8\\u8fa6\\u9075\\u9074\\u9078\\u9072\\u907c\\u907a\\u9134\\u9192\\u9320\\u9336\\u92f8\\u9333\\u932f\\u9322\\u92fc\\u932b\\u9304\\u931a\\ufffd\".split(\"\"),e=0;e!=r[191].length;++e)65533!==r[191][e].charCodeAt(0)&&(n[r[191][e]]=48896+e,t[48896+e]=r[191][e]);for(r[192]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9310\\u9326\\u9321\\u9315\\u932e\\u9319\\u95bb\\u96a7\\u96a8\\u96aa\\u96d5\\u970e\\u9711\\u9716\\u970d\\u9713\\u970f\\u975b\\u975c\\u9766\\u9798\\u9830\\u9838\\u983b\\u9837\\u982d\\u9839\\u9824\\u9910\\u9928\\u991e\\u991b\\u9921\\u991a\\u99ed\\u99e2\\u99f1\\u9ab8\\u9abc\\u9afb\\u9aed\\u9b28\\u9b91\\u9d15\\u9d23\\u9d26\\u9d28\\u9d12\\u9d1b\\u9ed8\\u9ed4\\u9f8d\\u9f9c\\u512a\\u511f\\u5121\\u5132\\u52f5\\u568e\\u5680\\u5690\\u5685\\u5687\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u568f\\u58d5\\u58d3\\u58d1\\u58ce\\u5b30\\u5b2a\\u5b24\\u5b7a\\u5c37\\u5c68\\u5dbc\\u5dba\\u5dbd\\u5db8\\u5e6b\\u5f4c\\u5fbd\\u61c9\\u61c2\\u61c7\\u61e6\\u61cb\\u6232\\u6234\\u64ce\\u64ca\\u64d8\\u64e0\\u64f0\\u64e6\\u64ec\\u64f1\\u64e2\\u64ed\\u6582\\u6583\\u66d9\\u66d6\\u6a80\\u6a94\\u6a84\\u6aa2\\u6a9c\\u6adb\\u6aa3\\u6a7e\\u6a97\\u6a90\\u6aa0\\u6b5c\\u6bae\\u6bda\\u6c08\\u6fd8\\u6ff1\\u6fdf\\u6fe0\\u6fdb\\u6fe4\\u6feb\\u6fef\\u6f80\\u6fec\\u6fe1\\u6fe9\\u6fd5\\u6fee\\u6ff0\\u71e7\\u71df\\u71ee\\u71e6\\u71e5\\u71ed\\u71ec\\u71f4\\u71e0\\u7235\\u7246\\u7370\\u7372\\u74a9\\u74b0\\u74a6\\u74a8\\u7646\\u7642\\u764c\\u76ea\\u77b3\\u77aa\\u77b0\\u77ac\\ufffd\".split(\"\"),e=0;e!=r[192].length;++e)65533!==r[192][e].charCodeAt(0)&&(n[r[192][e]]=49152+e,t[49152+e]=r[192][e]);for(r[193]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u77a7\\u77ad\\u77ef\\u78f7\\u78fa\\u78f4\\u78ef\\u7901\\u79a7\\u79aa\\u7a57\\u7abf\\u7c07\\u7c0d\\u7bfe\\u7bf7\\u7c0c\\u7be0\\u7ce0\\u7cdc\\u7cde\\u7ce2\\u7cdf\\u7cd9\\u7cdd\\u7e2e\\u7e3e\\u7e46\\u7e37\\u7e32\\u7e43\\u7e2b\\u7e3d\\u7e31\\u7e45\\u7e41\\u7e34\\u7e39\\u7e48\\u7e35\\u7e3f\\u7e2f\\u7f44\\u7ff3\\u7ffc\\u8071\\u8072\\u8070\\u806f\\u8073\\u81c6\\u81c3\\u81ba\\u81c2\\u81c0\\u81bf\\u81bd\\u81c9\\u81be\\u81e8\\u8209\\u8271\\u85aa\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8584\\u857e\\u859c\\u8591\\u8594\\u85af\\u859b\\u8587\\u85a8\\u858a\\u8667\\u87c0\\u87d1\\u87b3\\u87d2\\u87c6\\u87ab\\u87bb\\u87ba\\u87c8\\u87cb\\u893b\\u8936\\u8944\\u8938\\u893d\\u89ac\\u8b0e\\u8b17\\u8b19\\u8b1b\\u8b0a\\u8b20\\u8b1d\\u8b04\\u8b10\\u8c41\\u8c3f\\u8c73\\u8cfa\\u8cfd\\u8cfc\\u8cf8\\u8cfb\\u8da8\\u8e49\\u8e4b\\u8e48\\u8e4a\\u8f44\\u8f3e\\u8f42\\u8f45\\u8f3f\\u907f\\u907d\\u9084\\u9081\\u9082\\u9080\\u9139\\u91a3\\u919e\\u919c\\u934d\\u9382\\u9328\\u9375\\u934a\\u9365\\u934b\\u9318\\u937e\\u936c\\u935b\\u9370\\u935a\\u9354\\u95ca\\u95cb\\u95cc\\u95c8\\u95c6\\u96b1\\u96b8\\u96d6\\u971c\\u971e\\u97a0\\u97d3\\u9846\\u98b6\\u9935\\u9a01\\ufffd\".split(\"\"),e=0;e!=r[193].length;++e)65533!==r[193][e].charCodeAt(0)&&(n[r[193][e]]=49408+e,t[49408+e]=r[193][e]);for(r[194]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u99ff\\u9bae\\u9bab\\u9baa\\u9bad\\u9d3b\\u9d3f\\u9e8b\\u9ecf\\u9ede\\u9edc\\u9edd\\u9edb\\u9f3e\\u9f4b\\u53e2\\u5695\\u56ae\\u58d9\\u58d8\\u5b38\\u5f5d\\u61e3\\u6233\\u64f4\\u64f2\\u64fe\\u6506\\u64fa\\u64fb\\u64f7\\u65b7\\u66dc\\u6726\\u6ab3\\u6aac\\u6ac3\\u6abb\\u6ab8\\u6ac2\\u6aae\\u6aaf\\u6b5f\\u6b78\\u6baf\\u7009\\u700b\\u6ffe\\u7006\\u6ffa\\u7011\\u700f\\u71fb\\u71fc\\u71fe\\u71f8\\u7377\\u7375\\u74a7\\u74bf\\u7515\\u7656\\u7658\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7652\\u77bd\\u77bf\\u77bb\\u77bc\\u790e\\u79ae\\u7a61\\u7a62\\u7a60\\u7ac4\\u7ac5\\u7c2b\\u7c27\\u7c2a\\u7c1e\\u7c23\\u7c21\\u7ce7\\u7e54\\u7e55\\u7e5e\\u7e5a\\u7e61\\u7e52\\u7e59\\u7f48\\u7ff9\\u7ffb\\u8077\\u8076\\u81cd\\u81cf\\u820a\\u85cf\\u85a9\\u85cd\\u85d0\\u85c9\\u85b0\\u85ba\\u85b9\\u85a6\\u87ef\\u87ec\\u87f2\\u87e0\\u8986\\u89b2\\u89f4\\u8b28\\u8b39\\u8b2c\\u8b2b\\u8c50\\u8d05\\u8e59\\u8e63\\u8e66\\u8e64\\u8e5f\\u8e55\\u8ec0\\u8f49\\u8f4d\\u9087\\u9083\\u9088\\u91ab\\u91ac\\u91d0\\u9394\\u938a\\u9396\\u93a2\\u93b3\\u93ae\\u93ac\\u93b0\\u9398\\u939a\\u9397\\u95d4\\u95d6\\u95d0\\u95d5\\u96e2\\u96dc\\u96d9\\u96db\\u96de\\u9724\\u97a3\\u97a6\\ufffd\".split(\"\"),e=0;e!=r[194].length;++e)65533!==r[194][e].charCodeAt(0)&&(n[r[194][e]]=49664+e,t[49664+e]=r[194][e]);for(r[195]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u97ad\\u97f9\\u984d\\u984f\\u984c\\u984e\\u9853\\u98ba\\u993e\\u993f\\u993d\\u992e\\u99a5\\u9a0e\\u9ac1\\u9b03\\u9b06\\u9b4f\\u9b4e\\u9b4d\\u9bca\\u9bc9\\u9bfd\\u9bc8\\u9bc0\\u9d51\\u9d5d\\u9d60\\u9ee0\\u9f15\\u9f2c\\u5133\\u56a5\\u58de\\u58df\\u58e2\\u5bf5\\u9f90\\u5eec\\u61f2\\u61f7\\u61f6\\u61f5\\u6500\\u650f\\u66e0\\u66dd\\u6ae5\\u6add\\u6ada\\u6ad3\\u701b\\u701f\\u7028\\u701a\\u701d\\u7015\\u7018\\u7206\\u720d\\u7258\\u72a2\\u7378\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u737a\\u74bd\\u74ca\\u74e3\\u7587\\u7586\\u765f\\u7661\\u77c7\\u7919\\u79b1\\u7a6b\\u7a69\\u7c3e\\u7c3f\\u7c38\\u7c3d\\u7c37\\u7c40\\u7e6b\\u7e6d\\u7e79\\u7e69\\u7e6a\\u7f85\\u7e73\\u7fb6\\u7fb9\\u7fb8\\u81d8\\u85e9\\u85dd\\u85ea\\u85d5\\u85e4\\u85e5\\u85f7\\u87fb\\u8805\\u880d\\u87f9\\u87fe\\u8960\\u895f\\u8956\\u895e\\u8b41\\u8b5c\\u8b58\\u8b49\\u8b5a\\u8b4e\\u8b4f\\u8b46\\u8b59\\u8d08\\u8d0a\\u8e7c\\u8e72\\u8e87\\u8e76\\u8e6c\\u8e7a\\u8e74\\u8f54\\u8f4e\\u8fad\\u908a\\u908b\\u91b1\\u91ae\\u93e1\\u93d1\\u93df\\u93c3\\u93c8\\u93dc\\u93dd\\u93d6\\u93e2\\u93cd\\u93d8\\u93e4\\u93d7\\u93e8\\u95dc\\u96b4\\u96e3\\u972a\\u9727\\u9761\\u97dc\\u97fb\\u985e\\ufffd\".split(\"\"),e=0;e!=r[195].length;++e)65533!==r[195][e].charCodeAt(0)&&(n[r[195][e]]=49920+e,t[49920+e]=r[195][e]);for(r[196]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9858\\u985b\\u98bc\\u9945\\u9949\\u9a16\\u9a19\\u9b0d\\u9be8\\u9be7\\u9bd6\\u9bdb\\u9d89\\u9d61\\u9d72\\u9d6a\\u9d6c\\u9e92\\u9e97\\u9e93\\u9eb4\\u52f8\\u56a8\\u56b7\\u56b6\\u56b4\\u56bc\\u58e4\\u5b40\\u5b43\\u5b7d\\u5bf6\\u5dc9\\u61f8\\u61fa\\u6518\\u6514\\u6519\\u66e6\\u6727\\u6aec\\u703e\\u7030\\u7032\\u7210\\u737b\\u74cf\\u7662\\u7665\\u7926\\u792a\\u792c\\u792b\\u7ac7\\u7af6\\u7c4c\\u7c43\\u7c4d\\u7cef\\u7cf0\\u8fae\\u7e7d\\u7e7c\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7e82\\u7f4c\\u8000\\u81da\\u8266\\u85fb\\u85f9\\u8611\\u85fa\\u8606\\u860b\\u8607\\u860a\\u8814\\u8815\\u8964\\u89ba\\u89f8\\u8b70\\u8b6c\\u8b66\\u8b6f\\u8b5f\\u8b6b\\u8d0f\\u8d0d\\u8e89\\u8e81\\u8e85\\u8e82\\u91b4\\u91cb\\u9418\\u9403\\u93fd\\u95e1\\u9730\\u98c4\\u9952\\u9951\\u99a8\\u9a2b\\u9a30\\u9a37\\u9a35\\u9c13\\u9c0d\\u9e79\\u9eb5\\u9ee8\\u9f2f\\u9f5f\\u9f63\\u9f61\\u5137\\u5138\\u56c1\\u56c0\\u56c2\\u5914\\u5c6c\\u5dcd\\u61fc\\u61fe\\u651d\\u651c\\u6595\\u66e9\\u6afb\\u6b04\\u6afa\\u6bb2\\u704c\\u721b\\u72a7\\u74d6\\u74d4\\u7669\\u77d3\\u7c50\\u7e8f\\u7e8c\\u7fbc\\u8617\\u862d\\u861a\\u8823\\u8822\\u8821\\u881f\\u896a\\u896c\\u89bd\\u8b74\\ufffd\".split(\"\"),e=0;e!=r[196].length;++e)65533!==r[196][e].charCodeAt(0)&&(n[r[196][e]]=50176+e,t[50176+e]=r[196][e]);for(r[197]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8b77\\u8b7d\\u8d13\\u8e8a\\u8e8d\\u8e8b\\u8f5f\\u8faf\\u91ba\\u942e\\u9433\\u9435\\u943a\\u9438\\u9432\\u942b\\u95e2\\u9738\\u9739\\u9732\\u97ff\\u9867\\u9865\\u9957\\u9a45\\u9a43\\u9a40\\u9a3e\\u9acf\\u9b54\\u9b51\\u9c2d\\u9c25\\u9daf\\u9db4\\u9dc2\\u9db8\\u9e9d\\u9eef\\u9f19\\u9f5c\\u9f66\\u9f67\\u513c\\u513b\\u56c8\\u56ca\\u56c9\\u5b7f\\u5dd4\\u5dd2\\u5f4e\\u61ff\\u6524\\u6b0a\\u6b61\\u7051\\u7058\\u7380\\u74e4\\u758a\\u766e\\u766c\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u79b3\\u7c60\\u7c5f\\u807e\\u807d\\u81df\\u8972\\u896f\\u89fc\\u8b80\\u8d16\\u8d17\\u8e91\\u8e93\\u8f61\\u9148\\u9444\\u9451\\u9452\\u973d\\u973e\\u97c3\\u97c1\\u986b\\u9955\\u9a55\\u9a4d\\u9ad2\\u9b1a\\u9c49\\u9c31\\u9c3e\\u9c3b\\u9dd3\\u9dd7\\u9f34\\u9f6c\\u9f6a\\u9f94\\u56cc\\u5dd6\\u6200\\u6523\\u652b\\u652a\\u66ec\\u6b10\\u74da\\u7aca\\u7c64\\u7c63\\u7c65\\u7e93\\u7e96\\u7e94\\u81e2\\u8638\\u863f\\u8831\\u8b8a\\u9090\\u908f\\u9463\\u9460\\u9464\\u9768\\u986f\\u995c\\u9a5a\\u9a5b\\u9a57\\u9ad3\\u9ad4\\u9ad1\\u9c54\\u9c57\\u9c56\\u9de5\\u9e9f\\u9ef4\\u56d1\\u58e9\\u652c\\u705e\\u7671\\u7672\\u77d7\\u7f50\\u7f88\\u8836\\u8839\\u8862\\u8b93\\u8b92\\ufffd\".split(\"\"),e=0;e!=r[197].length;++e)65533!==r[197][e].charCodeAt(0)&&(n[r[197][e]]=50432+e,t[50432+e]=r[197][e]);for(r[198]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8b96\\u8277\\u8d1b\\u91c0\\u946a\\u9742\\u9748\\u9744\\u97c6\\u9870\\u9a5f\\u9b22\\u9b58\\u9c5f\\u9df9\\u9dfa\\u9e7c\\u9e7d\\u9f07\\u9f77\\u9f72\\u5ef3\\u6b16\\u7063\\u7c6c\\u7c6e\\u883b\\u89c0\\u8ea1\\u91c1\\u9472\\u9470\\u9871\\u995e\\u9ad6\\u9b23\\u9ecc\\u7064\\u77da\\u8b9a\\u9477\\u97c9\\u9a62\\u9a65\\u7e9c\\u8b9c\\u8eaa\\u91c5\\u947d\\u947e\\u947c\\u9c77\\u9c78\\u9ef7\\u8c54\\u947f\\u9e1a\\u7228\\u9a6a\\u9b31\\u9e1b\\u9e1e\\u7c72\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[198].length;++e)65533!==r[198][e].charCodeAt(0)&&(n[r[198][e]]=50688+e,t[50688+e]=r[198][e]);for(r[201]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u4e42\\u4e5c\\u51f5\\u531a\\u5382\\u4e07\\u4e0c\\u4e47\\u4e8d\\u56d7\\ufa0c\\u5c6e\\u5f73\\u4e0f\\u5187\\u4e0e\\u4e2e\\u4e93\\u4ec2\\u4ec9\\u4ec8\\u5198\\u52fc\\u536c\\u53b9\\u5720\\u5903\\u592c\\u5c10\\u5dff\\u65e1\\u6bb3\\u6bcc\\u6c14\\u723f\\u4e31\\u4e3c\\u4ee8\\u4edc\\u4ee9\\u4ee1\\u4edd\\u4eda\\u520c\\u531c\\u534c\\u5722\\u5723\\u5917\\u592f\\u5b81\\u5b84\\u5c12\\u5c3b\\u5c74\\u5c73\\u5e04\\u5e80\\u5e82\\u5fc9\\u6209\\u6250\\u6c15\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6c36\\u6c43\\u6c3f\\u6c3b\\u72ae\\u72b0\\u738a\\u79b8\\u808a\\u961e\\u4f0e\\u4f18\\u4f2c\\u4ef5\\u4f14\\u4ef1\\u4f00\\u4ef7\\u4f08\\u4f1d\\u4f02\\u4f05\\u4f22\\u4f13\\u4f04\\u4ef4\\u4f12\\u51b1\\u5213\\u5209\\u5210\\u52a6\\u5322\\u531f\\u534d\\u538a\\u5407\\u56e1\\u56df\\u572e\\u572a\\u5734\\u593c\\u5980\\u597c\\u5985\\u597b\\u597e\\u5977\\u597f\\u5b56\\u5c15\\u5c25\\u5c7c\\u5c7a\\u5c7b\\u5c7e\\u5ddf\\u5e75\\u5e84\\u5f02\\u5f1a\\u5f74\\u5fd5\\u5fd4\\u5fcf\\u625c\\u625e\\u6264\\u6261\\u6266\\u6262\\u6259\\u6260\\u625a\\u6265\\u65ef\\u65ee\\u673e\\u6739\\u6738\\u673b\\u673a\\u673f\\u673c\\u6733\\u6c18\\u6c46\\u6c52\\u6c5c\\u6c4f\\u6c4a\\u6c54\\u6c4b\\ufffd\".split(\"\"),e=0;e!=r[201].length;++e)65533!==r[201][e].charCodeAt(0)&&(n[r[201][e]]=51456+e,t[51456+e]=r[201][e]);for(r[202]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6c4c\\u7071\\u725e\\u72b4\\u72b5\\u738e\\u752a\\u767f\\u7a75\\u7f51\\u8278\\u827c\\u8280\\u827d\\u827f\\u864d\\u897e\\u9099\\u9097\\u9098\\u909b\\u9094\\u9622\\u9624\\u9620\\u9623\\u4f56\\u4f3b\\u4f62\\u4f49\\u4f53\\u4f64\\u4f3e\\u4f67\\u4f52\\u4f5f\\u4f41\\u4f58\\u4f2d\\u4f33\\u4f3f\\u4f61\\u518f\\u51b9\\u521c\\u521e\\u5221\\u52ad\\u52ae\\u5309\\u5363\\u5372\\u538e\\u538f\\u5430\\u5437\\u542a\\u5454\\u5445\\u5419\\u541c\\u5425\\u5418\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u543d\\u544f\\u5441\\u5428\\u5424\\u5447\\u56ee\\u56e7\\u56e5\\u5741\\u5745\\u574c\\u5749\\u574b\\u5752\\u5906\\u5940\\u59a6\\u5998\\u59a0\\u5997\\u598e\\u59a2\\u5990\\u598f\\u59a7\\u59a1\\u5b8e\\u5b92\\u5c28\\u5c2a\\u5c8d\\u5c8f\\u5c88\\u5c8b\\u5c89\\u5c92\\u5c8a\\u5c86\\u5c93\\u5c95\\u5de0\\u5e0a\\u5e0e\\u5e8b\\u5e89\\u5e8c\\u5e88\\u5e8d\\u5f05\\u5f1d\\u5f78\\u5f76\\u5fd2\\u5fd1\\u5fd0\\u5fed\\u5fe8\\u5fee\\u5ff3\\u5fe1\\u5fe4\\u5fe3\\u5ffa\\u5fef\\u5ff7\\u5ffb\\u6000\\u5ff4\\u623a\\u6283\\u628c\\u628e\\u628f\\u6294\\u6287\\u6271\\u627b\\u627a\\u6270\\u6281\\u6288\\u6277\\u627d\\u6272\\u6274\\u6537\\u65f0\\u65f4\\u65f3\\u65f2\\u65f5\\u6745\\u6747\\ufffd\".split(\"\"),e=0;e!=r[202].length;++e)65533!==r[202][e].charCodeAt(0)&&(n[r[202][e]]=51712+e,t[51712+e]=r[202][e]);for(r[203]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6759\\u6755\\u674c\\u6748\\u675d\\u674d\\u675a\\u674b\\u6bd0\\u6c19\\u6c1a\\u6c78\\u6c67\\u6c6b\\u6c84\\u6c8b\\u6c8f\\u6c71\\u6c6f\\u6c69\\u6c9a\\u6c6d\\u6c87\\u6c95\\u6c9c\\u6c66\\u6c73\\u6c65\\u6c7b\\u6c8e\\u7074\\u707a\\u7263\\u72bf\\u72bd\\u72c3\\u72c6\\u72c1\\u72ba\\u72c5\\u7395\\u7397\\u7393\\u7394\\u7392\\u753a\\u7539\\u7594\\u7595\\u7681\\u793d\\u8034\\u8095\\u8099\\u8090\\u8092\\u809c\\u8290\\u828f\\u8285\\u828e\\u8291\\u8293\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u828a\\u8283\\u8284\\u8c78\\u8fc9\\u8fbf\\u909f\\u90a1\\u90a5\\u909e\\u90a7\\u90a0\\u9630\\u9628\\u962f\\u962d\\u4e33\\u4f98\\u4f7c\\u4f85\\u4f7d\\u4f80\\u4f87\\u4f76\\u4f74\\u4f89\\u4f84\\u4f77\\u4f4c\\u4f97\\u4f6a\\u4f9a\\u4f79\\u4f81\\u4f78\\u4f90\\u4f9c\\u4f94\\u4f9e\\u4f92\\u4f82\\u4f95\\u4f6b\\u4f6e\\u519e\\u51bc\\u51be\\u5235\\u5232\\u5233\\u5246\\u5231\\u52bc\\u530a\\u530b\\u533c\\u5392\\u5394\\u5487\\u547f\\u5481\\u5491\\u5482\\u5488\\u546b\\u547a\\u547e\\u5465\\u546c\\u5474\\u5466\\u548d\\u546f\\u5461\\u5460\\u5498\\u5463\\u5467\\u5464\\u56f7\\u56f9\\u576f\\u5772\\u576d\\u576b\\u5771\\u5770\\u5776\\u5780\\u5775\\u577b\\u5773\\u5774\\u5762\\ufffd\".split(\"\"),e=0;e!=r[203].length;++e)65533!==r[203][e].charCodeAt(0)&&(n[r[203][e]]=51968+e,t[51968+e]=r[203][e]);for(r[204]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5768\\u577d\\u590c\\u5945\\u59b5\\u59ba\\u59cf\\u59ce\\u59b2\\u59cc\\u59c1\\u59b6\\u59bc\\u59c3\\u59d6\\u59b1\\u59bd\\u59c0\\u59c8\\u59b4\\u59c7\\u5b62\\u5b65\\u5b93\\u5b95\\u5c44\\u5c47\\u5cae\\u5ca4\\u5ca0\\u5cb5\\u5caf\\u5ca8\\u5cac\\u5c9f\\u5ca3\\u5cad\\u5ca2\\u5caa\\u5ca7\\u5c9d\\u5ca5\\u5cb6\\u5cb0\\u5ca6\\u5e17\\u5e14\\u5e19\\u5f28\\u5f22\\u5f23\\u5f24\\u5f54\\u5f82\\u5f7e\\u5f7d\\u5fde\\u5fe5\\u602d\\u6026\\u6019\\u6032\\u600b\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6034\\u600a\\u6017\\u6033\\u601a\\u601e\\u602c\\u6022\\u600d\\u6010\\u602e\\u6013\\u6011\\u600c\\u6009\\u601c\\u6214\\u623d\\u62ad\\u62b4\\u62d1\\u62be\\u62aa\\u62b6\\u62ca\\u62ae\\u62b3\\u62af\\u62bb\\u62a9\\u62b0\\u62b8\\u653d\\u65a8\\u65bb\\u6609\\u65fc\\u6604\\u6612\\u6608\\u65fb\\u6603\\u660b\\u660d\\u6605\\u65fd\\u6611\\u6610\\u66f6\\u670a\\u6785\\u676c\\u678e\\u6792\\u6776\\u677b\\u6798\\u6786\\u6784\\u6774\\u678d\\u678c\\u677a\\u679f\\u6791\\u6799\\u6783\\u677d\\u6781\\u6778\\u6779\\u6794\\u6b25\\u6b80\\u6b7e\\u6bde\\u6c1d\\u6c93\\u6cec\\u6ceb\\u6cee\\u6cd9\\u6cb6\\u6cd4\\u6cad\\u6ce7\\u6cb7\\u6cd0\\u6cc2\\u6cba\\u6cc3\\u6cc6\\u6ced\\u6cf2\\ufffd\".split(\"\"),e=0;e!=r[204].length;++e)65533!==r[204][e].charCodeAt(0)&&(n[r[204][e]]=52224+e,t[52224+e]=r[204][e]);for(r[205]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6cd2\\u6cdd\\u6cb4\\u6c8a\\u6c9d\\u6c80\\u6cde\\u6cc0\\u6d30\\u6ccd\\u6cc7\\u6cb0\\u6cf9\\u6ccf\\u6ce9\\u6cd1\\u7094\\u7098\\u7085\\u7093\\u7086\\u7084\\u7091\\u7096\\u7082\\u709a\\u7083\\u726a\\u72d6\\u72cb\\u72d8\\u72c9\\u72dc\\u72d2\\u72d4\\u72da\\u72cc\\u72d1\\u73a4\\u73a1\\u73ad\\u73a6\\u73a2\\u73a0\\u73ac\\u739d\\u74dd\\u74e8\\u753f\\u7540\\u753e\\u758c\\u7598\\u76af\\u76f3\\u76f1\\u76f0\\u76f5\\u77f8\\u77fc\\u77f9\\u77fb\\u77fa\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u77f7\\u7942\\u793f\\u79c5\\u7a78\\u7a7b\\u7afb\\u7c75\\u7cfd\\u8035\\u808f\\u80ae\\u80a3\\u80b8\\u80b5\\u80ad\\u8220\\u82a0\\u82c0\\u82ab\\u829a\\u8298\\u829b\\u82b5\\u82a7\\u82ae\\u82bc\\u829e\\u82ba\\u82b4\\u82a8\\u82a1\\u82a9\\u82c2\\u82a4\\u82c3\\u82b6\\u82a2\\u8670\\u866f\\u866d\\u866e\\u8c56\\u8fd2\\u8fcb\\u8fd3\\u8fcd\\u8fd6\\u8fd5\\u8fd7\\u90b2\\u90b4\\u90af\\u90b3\\u90b0\\u9639\\u963d\\u963c\\u963a\\u9643\\u4fcd\\u4fc5\\u4fd3\\u4fb2\\u4fc9\\u4fcb\\u4fc1\\u4fd4\\u4fdc\\u4fd9\\u4fbb\\u4fb3\\u4fdb\\u4fc7\\u4fd6\\u4fba\\u4fc0\\u4fb9\\u4fec\\u5244\\u5249\\u52c0\\u52c2\\u533d\\u537c\\u5397\\u5396\\u5399\\u5398\\u54ba\\u54a1\\u54ad\\u54a5\\u54cf\\ufffd\".split(\"\"),e=0;e!=r[205].length;++e)65533!==r[205][e].charCodeAt(0)&&(n[r[205][e]]=52480+e,t[52480+e]=r[205][e]);for(r[206]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u54c3\\u830d\\u54b7\\u54ae\\u54d6\\u54b6\\u54c5\\u54c6\\u54a0\\u5470\\u54bc\\u54a2\\u54be\\u5472\\u54de\\u54b0\\u57b5\\u579e\\u579f\\u57a4\\u578c\\u5797\\u579d\\u579b\\u5794\\u5798\\u578f\\u5799\\u57a5\\u579a\\u5795\\u58f4\\u590d\\u5953\\u59e1\\u59de\\u59ee\\u5a00\\u59f1\\u59dd\\u59fa\\u59fd\\u59fc\\u59f6\\u59e4\\u59f2\\u59f7\\u59db\\u59e9\\u59f3\\u59f5\\u59e0\\u59fe\\u59f4\\u59ed\\u5ba8\\u5c4c\\u5cd0\\u5cd8\\u5ccc\\u5cd7\\u5ccb\\u5cdb\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5cde\\u5cda\\u5cc9\\u5cc7\\u5cca\\u5cd6\\u5cd3\\u5cd4\\u5ccf\\u5cc8\\u5cc6\\u5cce\\u5cdf\\u5cf8\\u5df9\\u5e21\\u5e22\\u5e23\\u5e20\\u5e24\\u5eb0\\u5ea4\\u5ea2\\u5e9b\\u5ea3\\u5ea5\\u5f07\\u5f2e\\u5f56\\u5f86\\u6037\\u6039\\u6054\\u6072\\u605e\\u6045\\u6053\\u6047\\u6049\\u605b\\u604c\\u6040\\u6042\\u605f\\u6024\\u6044\\u6058\\u6066\\u606e\\u6242\\u6243\\u62cf\\u630d\\u630b\\u62f5\\u630e\\u6303\\u62eb\\u62f9\\u630f\\u630c\\u62f8\\u62f6\\u6300\\u6313\\u6314\\u62fa\\u6315\\u62fb\\u62f0\\u6541\\u6543\\u65aa\\u65bf\\u6636\\u6621\\u6632\\u6635\\u661c\\u6626\\u6622\\u6633\\u662b\\u663a\\u661d\\u6634\\u6639\\u662e\\u670f\\u6710\\u67c1\\u67f2\\u67c8\\u67ba\\ufffd\".split(\"\"),e=0;e!=r[206].length;++e)65533!==r[206][e].charCodeAt(0)&&(n[r[206][e]]=52736+e,t[52736+e]=r[206][e]);for(r[207]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u67dc\\u67bb\\u67f8\\u67d8\\u67c0\\u67b7\\u67c5\\u67eb\\u67e4\\u67df\\u67b5\\u67cd\\u67b3\\u67f7\\u67f6\\u67ee\\u67e3\\u67c2\\u67b9\\u67ce\\u67e7\\u67f0\\u67b2\\u67fc\\u67c6\\u67ed\\u67cc\\u67ae\\u67e6\\u67db\\u67fa\\u67c9\\u67ca\\u67c3\\u67ea\\u67cb\\u6b28\\u6b82\\u6b84\\u6bb6\\u6bd6\\u6bd8\\u6be0\\u6c20\\u6c21\\u6d28\\u6d34\\u6d2d\\u6d1f\\u6d3c\\u6d3f\\u6d12\\u6d0a\\u6cda\\u6d33\\u6d04\\u6d19\\u6d3a\\u6d1a\\u6d11\\u6d00\\u6d1d\\u6d42\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6d01\\u6d18\\u6d37\\u6d03\\u6d0f\\u6d40\\u6d07\\u6d20\\u6d2c\\u6d08\\u6d22\\u6d09\\u6d10\\u70b7\\u709f\\u70be\\u70b1\\u70b0\\u70a1\\u70b4\\u70b5\\u70a9\\u7241\\u7249\\u724a\\u726c\\u7270\\u7273\\u726e\\u72ca\\u72e4\\u72e8\\u72eb\\u72df\\u72ea\\u72e6\\u72e3\\u7385\\u73cc\\u73c2\\u73c8\\u73c5\\u73b9\\u73b6\\u73b5\\u73b4\\u73eb\\u73bf\\u73c7\\u73be\\u73c3\\u73c6\\u73b8\\u73cb\\u74ec\\u74ee\\u752e\\u7547\\u7548\\u75a7\\u75aa\\u7679\\u76c4\\u7708\\u7703\\u7704\\u7705\\u770a\\u76f7\\u76fb\\u76fa\\u77e7\\u77e8\\u7806\\u7811\\u7812\\u7805\\u7810\\u780f\\u780e\\u7809\\u7803\\u7813\\u794a\\u794c\\u794b\\u7945\\u7944\\u79d5\\u79cd\\u79cf\\u79d6\\u79ce\\u7a80\\ufffd\".split(\"\"),e=0;e!=r[207].length;++e)65533!==r[207][e].charCodeAt(0)&&(n[r[207][e]]=52992+e,t[52992+e]=r[207][e]);for(r[208]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7a7e\\u7ad1\\u7b00\\u7b01\\u7c7a\\u7c78\\u7c79\\u7c7f\\u7c80\\u7c81\\u7d03\\u7d08\\u7d01\\u7f58\\u7f91\\u7f8d\\u7fbe\\u8007\\u800e\\u800f\\u8014\\u8037\\u80d8\\u80c7\\u80e0\\u80d1\\u80c8\\u80c2\\u80d0\\u80c5\\u80e3\\u80d9\\u80dc\\u80ca\\u80d5\\u80c9\\u80cf\\u80d7\\u80e6\\u80cd\\u81ff\\u8221\\u8294\\u82d9\\u82fe\\u82f9\\u8307\\u82e8\\u8300\\u82d5\\u833a\\u82eb\\u82d6\\u82f4\\u82ec\\u82e1\\u82f2\\u82f5\\u830c\\u82fb\\u82f6\\u82f0\\u82ea\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u82e4\\u82e0\\u82fa\\u82f3\\u82ed\\u8677\\u8674\\u867c\\u8673\\u8841\\u884e\\u8867\\u886a\\u8869\\u89d3\\u8a04\\u8a07\\u8d72\\u8fe3\\u8fe1\\u8fee\\u8fe0\\u90f1\\u90bd\\u90bf\\u90d5\\u90c5\\u90be\\u90c7\\u90cb\\u90c8\\u91d4\\u91d3\\u9654\\u964f\\u9651\\u9653\\u964a\\u964e\\u501e\\u5005\\u5007\\u5013\\u5022\\u5030\\u501b\\u4ff5\\u4ff4\\u5033\\u5037\\u502c\\u4ff6\\u4ff7\\u5017\\u501c\\u5020\\u5027\\u5035\\u502f\\u5031\\u500e\\u515a\\u5194\\u5193\\u51ca\\u51c4\\u51c5\\u51c8\\u51ce\\u5261\\u525a\\u5252\\u525e\\u525f\\u5255\\u5262\\u52cd\\u530e\\u539e\\u5526\\u54e2\\u5517\\u5512\\u54e7\\u54f3\\u54e4\\u551a\\u54ff\\u5504\\u5508\\u54eb\\u5511\\u5505\\u54f1\\ufffd\".split(\"\"),e=0;e!=r[208].length;++e)65533!==r[208][e].charCodeAt(0)&&(n[r[208][e]]=53248+e,t[53248+e]=r[208][e]);for(r[209]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u550a\\u54fb\\u54f7\\u54f8\\u54e0\\u550e\\u5503\\u550b\\u5701\\u5702\\u57cc\\u5832\\u57d5\\u57d2\\u57ba\\u57c6\\u57bd\\u57bc\\u57b8\\u57b6\\u57bf\\u57c7\\u57d0\\u57b9\\u57c1\\u590e\\u594a\\u5a19\\u5a16\\u5a2d\\u5a2e\\u5a15\\u5a0f\\u5a17\\u5a0a\\u5a1e\\u5a33\\u5b6c\\u5ba7\\u5bad\\u5bac\\u5c03\\u5c56\\u5c54\\u5cec\\u5cff\\u5cee\\u5cf1\\u5cf7\\u5d00\\u5cf9\\u5e29\\u5e28\\u5ea8\\u5eae\\u5eaa\\u5eac\\u5f33\\u5f30\\u5f67\\u605d\\u605a\\u6067\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6041\\u60a2\\u6088\\u6080\\u6092\\u6081\\u609d\\u6083\\u6095\\u609b\\u6097\\u6087\\u609c\\u608e\\u6219\\u6246\\u62f2\\u6310\\u6356\\u632c\\u6344\\u6345\\u6336\\u6343\\u63e4\\u6339\\u634b\\u634a\\u633c\\u6329\\u6341\\u6334\\u6358\\u6354\\u6359\\u632d\\u6347\\u6333\\u635a\\u6351\\u6338\\u6357\\u6340\\u6348\\u654a\\u6546\\u65c6\\u65c3\\u65c4\\u65c2\\u664a\\u665f\\u6647\\u6651\\u6712\\u6713\\u681f\\u681a\\u6849\\u6832\\u6833\\u683b\\u684b\\u684f\\u6816\\u6831\\u681c\\u6835\\u682b\\u682d\\u682f\\u684e\\u6844\\u6834\\u681d\\u6812\\u6814\\u6826\\u6828\\u682e\\u684d\\u683a\\u6825\\u6820\\u6b2c\\u6b2f\\u6b2d\\u6b31\\u6b34\\u6b6d\\u8082\\u6b88\\u6be6\\u6be4\\ufffd\".split(\"\"),e=0;e!=r[209].length;++e)65533!==r[209][e].charCodeAt(0)&&(n[r[209][e]]=53504+e,t[53504+e]=r[209][e]);for(r[210]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6be8\\u6be3\\u6be2\\u6be7\\u6c25\\u6d7a\\u6d63\\u6d64\\u6d76\\u6d0d\\u6d61\\u6d92\\u6d58\\u6d62\\u6d6d\\u6d6f\\u6d91\\u6d8d\\u6def\\u6d7f\\u6d86\\u6d5e\\u6d67\\u6d60\\u6d97\\u6d70\\u6d7c\\u6d5f\\u6d82\\u6d98\\u6d2f\\u6d68\\u6d8b\\u6d7e\\u6d80\\u6d84\\u6d16\\u6d83\\u6d7b\\u6d7d\\u6d75\\u6d90\\u70dc\\u70d3\\u70d1\\u70dd\\u70cb\\u7f39\\u70e2\\u70d7\\u70d2\\u70de\\u70e0\\u70d4\\u70cd\\u70c5\\u70c6\\u70c7\\u70da\\u70ce\\u70e1\\u7242\\u7278\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7277\\u7276\\u7300\\u72fa\\u72f4\\u72fe\\u72f6\\u72f3\\u72fb\\u7301\\u73d3\\u73d9\\u73e5\\u73d6\\u73bc\\u73e7\\u73e3\\u73e9\\u73dc\\u73d2\\u73db\\u73d4\\u73dd\\u73da\\u73d7\\u73d8\\u73e8\\u74de\\u74df\\u74f4\\u74f5\\u7521\\u755b\\u755f\\u75b0\\u75c1\\u75bb\\u75c4\\u75c0\\u75bf\\u75b6\\u75ba\\u768a\\u76c9\\u771d\\u771b\\u7710\\u7713\\u7712\\u7723\\u7711\\u7715\\u7719\\u771a\\u7722\\u7727\\u7823\\u782c\\u7822\\u7835\\u782f\\u7828\\u782e\\u782b\\u7821\\u7829\\u7833\\u782a\\u7831\\u7954\\u795b\\u794f\\u795c\\u7953\\u7952\\u7951\\u79eb\\u79ec\\u79e0\\u79ee\\u79ed\\u79ea\\u79dc\\u79de\\u79dd\\u7a86\\u7a89\\u7a85\\u7a8b\\u7a8c\\u7a8a\\u7a87\\u7ad8\\u7b10\\ufffd\".split(\"\"),e=0;e!=r[210].length;++e)65533!==r[210][e].charCodeAt(0)&&(n[r[210][e]]=53760+e,t[53760+e]=r[210][e]);for(r[211]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7b04\\u7b13\\u7b05\\u7b0f\\u7b08\\u7b0a\\u7b0e\\u7b09\\u7b12\\u7c84\\u7c91\\u7c8a\\u7c8c\\u7c88\\u7c8d\\u7c85\\u7d1e\\u7d1d\\u7d11\\u7d0e\\u7d18\\u7d16\\u7d13\\u7d1f\\u7d12\\u7d0f\\u7d0c\\u7f5c\\u7f61\\u7f5e\\u7f60\\u7f5d\\u7f5b\\u7f96\\u7f92\\u7fc3\\u7fc2\\u7fc0\\u8016\\u803e\\u8039\\u80fa\\u80f2\\u80f9\\u80f5\\u8101\\u80fb\\u8100\\u8201\\u822f\\u8225\\u8333\\u832d\\u8344\\u8319\\u8351\\u8325\\u8356\\u833f\\u8341\\u8326\\u831c\\u8322\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8342\\u834e\\u831b\\u832a\\u8308\\u833c\\u834d\\u8316\\u8324\\u8320\\u8337\\u832f\\u8329\\u8347\\u8345\\u834c\\u8353\\u831e\\u832c\\u834b\\u8327\\u8348\\u8653\\u8652\\u86a2\\u86a8\\u8696\\u868d\\u8691\\u869e\\u8687\\u8697\\u8686\\u868b\\u869a\\u8685\\u86a5\\u8699\\u86a1\\u86a7\\u8695\\u8698\\u868e\\u869d\\u8690\\u8694\\u8843\\u8844\\u886d\\u8875\\u8876\\u8872\\u8880\\u8871\\u887f\\u886f\\u8883\\u887e\\u8874\\u887c\\u8a12\\u8c47\\u8c57\\u8c7b\\u8ca4\\u8ca3\\u8d76\\u8d78\\u8db5\\u8db7\\u8db6\\u8ed1\\u8ed3\\u8ffe\\u8ff5\\u9002\\u8fff\\u8ffb\\u9004\\u8ffc\\u8ff6\\u90d6\\u90e0\\u90d9\\u90da\\u90e3\\u90df\\u90e5\\u90d8\\u90db\\u90d7\\u90dc\\u90e4\\u9150\\ufffd\".split(\"\"),e=0;e!=r[211].length;++e)65533!==r[211][e].charCodeAt(0)&&(n[r[211][e]]=54016+e,t[54016+e]=r[211][e]);for(r[212]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u914e\\u914f\\u91d5\\u91e2\\u91da\\u965c\\u965f\\u96bc\\u98e3\\u9adf\\u9b2f\\u4e7f\\u5070\\u506a\\u5061\\u505e\\u5060\\u5053\\u504b\\u505d\\u5072\\u5048\\u504d\\u5041\\u505b\\u504a\\u5062\\u5015\\u5045\\u505f\\u5069\\u506b\\u5063\\u5064\\u5046\\u5040\\u506e\\u5073\\u5057\\u5051\\u51d0\\u526b\\u526d\\u526c\\u526e\\u52d6\\u52d3\\u532d\\u539c\\u5575\\u5576\\u553c\\u554d\\u5550\\u5534\\u552a\\u5551\\u5562\\u5536\\u5535\\u5530\\u5552\\u5545\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u550c\\u5532\\u5565\\u554e\\u5539\\u5548\\u552d\\u553b\\u5540\\u554b\\u570a\\u5707\\u57fb\\u5814\\u57e2\\u57f6\\u57dc\\u57f4\\u5800\\u57ed\\u57fd\\u5808\\u57f8\\u580b\\u57f3\\u57cf\\u5807\\u57ee\\u57e3\\u57f2\\u57e5\\u57ec\\u57e1\\u580e\\u57fc\\u5810\\u57e7\\u5801\\u580c\\u57f1\\u57e9\\u57f0\\u580d\\u5804\\u595c\\u5a60\\u5a58\\u5a55\\u5a67\\u5a5e\\u5a38\\u5a35\\u5a6d\\u5a50\\u5a5f\\u5a65\\u5a6c\\u5a53\\u5a64\\u5a57\\u5a43\\u5a5d\\u5a52\\u5a44\\u5a5b\\u5a48\\u5a8e\\u5a3e\\u5a4d\\u5a39\\u5a4c\\u5a70\\u5a69\\u5a47\\u5a51\\u5a56\\u5a42\\u5a5c\\u5b72\\u5b6e\\u5bc1\\u5bc0\\u5c59\\u5d1e\\u5d0b\\u5d1d\\u5d1a\\u5d20\\u5d0c\\u5d28\\u5d0d\\u5d26\\u5d25\\u5d0f\\ufffd\".split(\"\"),e=0;e!=r[212].length;++e)65533!==r[212][e].charCodeAt(0)&&(n[r[212][e]]=54272+e,t[54272+e]=r[212][e]);for(r[213]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5d30\\u5d12\\u5d23\\u5d1f\\u5d2e\\u5e3e\\u5e34\\u5eb1\\u5eb4\\u5eb9\\u5eb2\\u5eb3\\u5f36\\u5f38\\u5f9b\\u5f96\\u5f9f\\u608a\\u6090\\u6086\\u60be\\u60b0\\u60ba\\u60d3\\u60d4\\u60cf\\u60e4\\u60d9\\u60dd\\u60c8\\u60b1\\u60db\\u60b7\\u60ca\\u60bf\\u60c3\\u60cd\\u60c0\\u6332\\u6365\\u638a\\u6382\\u637d\\u63bd\\u639e\\u63ad\\u639d\\u6397\\u63ab\\u638e\\u636f\\u6387\\u6390\\u636e\\u63af\\u6375\\u639c\\u636d\\u63ae\\u637c\\u63a4\\u633b\\u639f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6378\\u6385\\u6381\\u6391\\u638d\\u6370\\u6553\\u65cd\\u6665\\u6661\\u665b\\u6659\\u665c\\u6662\\u6718\\u6879\\u6887\\u6890\\u689c\\u686d\\u686e\\u68ae\\u68ab\\u6956\\u686f\\u68a3\\u68ac\\u68a9\\u6875\\u6874\\u68b2\\u688f\\u6877\\u6892\\u687c\\u686b\\u6872\\u68aa\\u6880\\u6871\\u687e\\u689b\\u6896\\u688b\\u68a0\\u6889\\u68a4\\u6878\\u687b\\u6891\\u688c\\u688a\\u687d\\u6b36\\u6b33\\u6b37\\u6b38\\u6b91\\u6b8f\\u6b8d\\u6b8e\\u6b8c\\u6c2a\\u6dc0\\u6dab\\u6db4\\u6db3\\u6e74\\u6dac\\u6de9\\u6de2\\u6db7\\u6df6\\u6dd4\\u6e00\\u6dc8\\u6de0\\u6ddf\\u6dd6\\u6dbe\\u6de5\\u6ddc\\u6ddd\\u6ddb\\u6df4\\u6dca\\u6dbd\\u6ded\\u6df0\\u6dba\\u6dd5\\u6dc2\\u6dcf\\u6dc9\\ufffd\".split(\"\"),e=0;e!=r[213].length;++e)65533!==r[213][e].charCodeAt(0)&&(n[r[213][e]]=54528+e,t[54528+e]=r[213][e]);for(r[214]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6dd0\\u6df2\\u6dd3\\u6dfd\\u6dd7\\u6dcd\\u6de3\\u6dbb\\u70fa\\u710d\\u70f7\\u7117\\u70f4\\u710c\\u70f0\\u7104\\u70f3\\u7110\\u70fc\\u70ff\\u7106\\u7113\\u7100\\u70f8\\u70f6\\u710b\\u7102\\u710e\\u727e\\u727b\\u727c\\u727f\\u731d\\u7317\\u7307\\u7311\\u7318\\u730a\\u7308\\u72ff\\u730f\\u731e\\u7388\\u73f6\\u73f8\\u73f5\\u7404\\u7401\\u73fd\\u7407\\u7400\\u73fa\\u73fc\\u73ff\\u740c\\u740b\\u73f4\\u7408\\u7564\\u7563\\u75ce\\u75d2\\u75cf\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u75cb\\u75cc\\u75d1\\u75d0\\u768f\\u7689\\u76d3\\u7739\\u772f\\u772d\\u7731\\u7732\\u7734\\u7733\\u773d\\u7725\\u773b\\u7735\\u7848\\u7852\\u7849\\u784d\\u784a\\u784c\\u7826\\u7845\\u7850\\u7964\\u7967\\u7969\\u796a\\u7963\\u796b\\u7961\\u79bb\\u79fa\\u79f8\\u79f6\\u79f7\\u7a8f\\u7a94\\u7a90\\u7b35\\u7b47\\u7b34\\u7b25\\u7b30\\u7b22\\u7b24\\u7b33\\u7b18\\u7b2a\\u7b1d\\u7b31\\u7b2b\\u7b2d\\u7b2f\\u7b32\\u7b38\\u7b1a\\u7b23\\u7c94\\u7c98\\u7c96\\u7ca3\\u7d35\\u7d3d\\u7d38\\u7d36\\u7d3a\\u7d45\\u7d2c\\u7d29\\u7d41\\u7d47\\u7d3e\\u7d3f\\u7d4a\\u7d3b\\u7d28\\u7f63\\u7f95\\u7f9c\\u7f9d\\u7f9b\\u7fca\\u7fcb\\u7fcd\\u7fd0\\u7fd1\\u7fc7\\u7fcf\\u7fc9\\u801f\\ufffd\".split(\"\"),e=0;e!=r[214].length;++e)65533!==r[214][e].charCodeAt(0)&&(n[r[214][e]]=54784+e,t[54784+e]=r[214][e]);for(r[215]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u801e\\u801b\\u8047\\u8043\\u8048\\u8118\\u8125\\u8119\\u811b\\u812d\\u811f\\u812c\\u811e\\u8121\\u8115\\u8127\\u811d\\u8122\\u8211\\u8238\\u8233\\u823a\\u8234\\u8232\\u8274\\u8390\\u83a3\\u83a8\\u838d\\u837a\\u8373\\u83a4\\u8374\\u838f\\u8381\\u8395\\u8399\\u8375\\u8394\\u83a9\\u837d\\u8383\\u838c\\u839d\\u839b\\u83aa\\u838b\\u837e\\u83a5\\u83af\\u8388\\u8397\\u83b0\\u837f\\u83a6\\u8387\\u83ae\\u8376\\u839a\\u8659\\u8656\\u86bf\\u86b7\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u86c2\\u86c1\\u86c5\\u86ba\\u86b0\\u86c8\\u86b9\\u86b3\\u86b8\\u86cc\\u86b4\\u86bb\\u86bc\\u86c3\\u86bd\\u86be\\u8852\\u8889\\u8895\\u88a8\\u88a2\\u88aa\\u889a\\u8891\\u88a1\\u889f\\u8898\\u88a7\\u8899\\u889b\\u8897\\u88a4\\u88ac\\u888c\\u8893\\u888e\\u8982\\u89d6\\u89d9\\u89d5\\u8a30\\u8a27\\u8a2c\\u8a1e\\u8c39\\u8c3b\\u8c5c\\u8c5d\\u8c7d\\u8ca5\\u8d7d\\u8d7b\\u8d79\\u8dbc\\u8dc2\\u8db9\\u8dbf\\u8dc1\\u8ed8\\u8ede\\u8edd\\u8edc\\u8ed7\\u8ee0\\u8ee1\\u9024\\u900b\\u9011\\u901c\\u900c\\u9021\\u90ef\\u90ea\\u90f0\\u90f4\\u90f2\\u90f3\\u90d4\\u90eb\\u90ec\\u90e9\\u9156\\u9158\\u915a\\u9153\\u9155\\u91ec\\u91f4\\u91f1\\u91f3\\u91f8\\u91e4\\u91f9\\u91ea\\ufffd\".split(\"\"),e=0;e!=r[215].length;++e)65533!==r[215][e].charCodeAt(0)&&(n[r[215][e]]=55040+e,t[55040+e]=r[215][e]);for(r[216]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u91eb\\u91f7\\u91e8\\u91ee\\u957a\\u9586\\u9588\\u967c\\u966d\\u966b\\u9671\\u966f\\u96bf\\u976a\\u9804\\u98e5\\u9997\\u509b\\u5095\\u5094\\u509e\\u508b\\u50a3\\u5083\\u508c\\u508e\\u509d\\u5068\\u509c\\u5092\\u5082\\u5087\\u515f\\u51d4\\u5312\\u5311\\u53a4\\u53a7\\u5591\\u55a8\\u55a5\\u55ad\\u5577\\u5645\\u55a2\\u5593\\u5588\\u558f\\u55b5\\u5581\\u55a3\\u5592\\u55a4\\u557d\\u558c\\u55a6\\u557f\\u5595\\u55a1\\u558e\\u570c\\u5829\\u5837\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5819\\u581e\\u5827\\u5823\\u5828\\u57f5\\u5848\\u5825\\u581c\\u581b\\u5833\\u583f\\u5836\\u582e\\u5839\\u5838\\u582d\\u582c\\u583b\\u5961\\u5aaf\\u5a94\\u5a9f\\u5a7a\\u5aa2\\u5a9e\\u5a78\\u5aa6\\u5a7c\\u5aa5\\u5aac\\u5a95\\u5aae\\u5a37\\u5a84\\u5a8a\\u5a97\\u5a83\\u5a8b\\u5aa9\\u5a7b\\u5a7d\\u5a8c\\u5a9c\\u5a8f\\u5a93\\u5a9d\\u5bea\\u5bcd\\u5bcb\\u5bd4\\u5bd1\\u5bca\\u5bce\\u5c0c\\u5c30\\u5d37\\u5d43\\u5d6b\\u5d41\\u5d4b\\u5d3f\\u5d35\\u5d51\\u5d4e\\u5d55\\u5d33\\u5d3a\\u5d52\\u5d3d\\u5d31\\u5d59\\u5d42\\u5d39\\u5d49\\u5d38\\u5d3c\\u5d32\\u5d36\\u5d40\\u5d45\\u5e44\\u5e41\\u5f58\\u5fa6\\u5fa5\\u5fab\\u60c9\\u60b9\\u60cc\\u60e2\\u60ce\\u60c4\\u6114\\ufffd\".split(\"\"),e=0;e!=r[216].length;++e)65533!==r[216][e].charCodeAt(0)&&(n[r[216][e]]=55296+e,t[55296+e]=r[216][e]);for(r[217]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u60f2\\u610a\\u6116\\u6105\\u60f5\\u6113\\u60f8\\u60fc\\u60fe\\u60c1\\u6103\\u6118\\u611d\\u6110\\u60ff\\u6104\\u610b\\u624a\\u6394\\u63b1\\u63b0\\u63ce\\u63e5\\u63e8\\u63ef\\u63c3\\u649d\\u63f3\\u63ca\\u63e0\\u63f6\\u63d5\\u63f2\\u63f5\\u6461\\u63df\\u63be\\u63dd\\u63dc\\u63c4\\u63d8\\u63d3\\u63c2\\u63c7\\u63cc\\u63cb\\u63c8\\u63f0\\u63d7\\u63d9\\u6532\\u6567\\u656a\\u6564\\u655c\\u6568\\u6565\\u658c\\u659d\\u659e\\u65ae\\u65d0\\u65d2\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u667c\\u666c\\u667b\\u6680\\u6671\\u6679\\u666a\\u6672\\u6701\\u690c\\u68d3\\u6904\\u68dc\\u692a\\u68ec\\u68ea\\u68f1\\u690f\\u68d6\\u68f7\\u68eb\\u68e4\\u68f6\\u6913\\u6910\\u68f3\\u68e1\\u6907\\u68cc\\u6908\\u6970\\u68b4\\u6911\\u68ef\\u68c6\\u6914\\u68f8\\u68d0\\u68fd\\u68fc\\u68e8\\u690b\\u690a\\u6917\\u68ce\\u68c8\\u68dd\\u68de\\u68e6\\u68f4\\u68d1\\u6906\\u68d4\\u68e9\\u6915\\u6925\\u68c7\\u6b39\\u6b3b\\u6b3f\\u6b3c\\u6b94\\u6b97\\u6b99\\u6b95\\u6bbd\\u6bf0\\u6bf2\\u6bf3\\u6c30\\u6dfc\\u6e46\\u6e47\\u6e1f\\u6e49\\u6e88\\u6e3c\\u6e3d\\u6e45\\u6e62\\u6e2b\\u6e3f\\u6e41\\u6e5d\\u6e73\\u6e1c\\u6e33\\u6e4b\\u6e40\\u6e51\\u6e3b\\u6e03\\u6e2e\\u6e5e\\ufffd\".split(\"\"),e=0;e!=r[217].length;++e)65533!==r[217][e].charCodeAt(0)&&(n[r[217][e]]=55552+e,t[55552+e]=r[217][e]);for(r[218]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6e68\\u6e5c\\u6e61\\u6e31\\u6e28\\u6e60\\u6e71\\u6e6b\\u6e39\\u6e22\\u6e30\\u6e53\\u6e65\\u6e27\\u6e78\\u6e64\\u6e77\\u6e55\\u6e79\\u6e52\\u6e66\\u6e35\\u6e36\\u6e5a\\u7120\\u711e\\u712f\\u70fb\\u712e\\u7131\\u7123\\u7125\\u7122\\u7132\\u711f\\u7128\\u713a\\u711b\\u724b\\u725a\\u7288\\u7289\\u7286\\u7285\\u728b\\u7312\\u730b\\u7330\\u7322\\u7331\\u7333\\u7327\\u7332\\u732d\\u7326\\u7323\\u7335\\u730c\\u742e\\u742c\\u7430\\u742b\\u7416\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u741a\\u7421\\u742d\\u7431\\u7424\\u7423\\u741d\\u7429\\u7420\\u7432\\u74fb\\u752f\\u756f\\u756c\\u75e7\\u75da\\u75e1\\u75e6\\u75dd\\u75df\\u75e4\\u75d7\\u7695\\u7692\\u76da\\u7746\\u7747\\u7744\\u774d\\u7745\\u774a\\u774e\\u774b\\u774c\\u77de\\u77ec\\u7860\\u7864\\u7865\\u785c\\u786d\\u7871\\u786a\\u786e\\u7870\\u7869\\u7868\\u785e\\u7862\\u7974\\u7973\\u7972\\u7970\\u7a02\\u7a0a\\u7a03\\u7a0c\\u7a04\\u7a99\\u7ae6\\u7ae4\\u7b4a\\u7b3b\\u7b44\\u7b48\\u7b4c\\u7b4e\\u7b40\\u7b58\\u7b45\\u7ca2\\u7c9e\\u7ca8\\u7ca1\\u7d58\\u7d6f\\u7d63\\u7d53\\u7d56\\u7d67\\u7d6a\\u7d4f\\u7d6d\\u7d5c\\u7d6b\\u7d52\\u7d54\\u7d69\\u7d51\\u7d5f\\u7d4e\\u7f3e\\u7f3f\\u7f65\\ufffd\".split(\"\"),e=0;e!=r[218].length;++e)65533!==r[218][e].charCodeAt(0)&&(n[r[218][e]]=55808+e,t[55808+e]=r[218][e]);for(r[219]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7f66\\u7fa2\\u7fa0\\u7fa1\\u7fd7\\u8051\\u804f\\u8050\\u80fe\\u80d4\\u8143\\u814a\\u8152\\u814f\\u8147\\u813d\\u814d\\u813a\\u81e6\\u81ee\\u81f7\\u81f8\\u81f9\\u8204\\u823c\\u823d\\u823f\\u8275\\u833b\\u83cf\\u83f9\\u8423\\u83c0\\u83e8\\u8412\\u83e7\\u83e4\\u83fc\\u83f6\\u8410\\u83c6\\u83c8\\u83eb\\u83e3\\u83bf\\u8401\\u83dd\\u83e5\\u83d8\\u83ff\\u83e1\\u83cb\\u83ce\\u83d6\\u83f5\\u83c9\\u8409\\u840f\\u83de\\u8411\\u8406\\u83c2\\u83f3\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u83d5\\u83fa\\u83c7\\u83d1\\u83ea\\u8413\\u83c3\\u83ec\\u83ee\\u83c4\\u83fb\\u83d7\\u83e2\\u841b\\u83db\\u83fe\\u86d8\\u86e2\\u86e6\\u86d3\\u86e3\\u86da\\u86ea\\u86dd\\u86eb\\u86dc\\u86ec\\u86e9\\u86d7\\u86e8\\u86d1\\u8848\\u8856\\u8855\\u88ba\\u88d7\\u88b9\\u88b8\\u88c0\\u88be\\u88b6\\u88bc\\u88b7\\u88bd\\u88b2\\u8901\\u88c9\\u8995\\u8998\\u8997\\u89dd\\u89da\\u89db\\u8a4e\\u8a4d\\u8a39\\u8a59\\u8a40\\u8a57\\u8a58\\u8a44\\u8a45\\u8a52\\u8a48\\u8a51\\u8a4a\\u8a4c\\u8a4f\\u8c5f\\u8c81\\u8c80\\u8cba\\u8cbe\\u8cb0\\u8cb9\\u8cb5\\u8d84\\u8d80\\u8d89\\u8dd8\\u8dd3\\u8dcd\\u8dc7\\u8dd6\\u8ddc\\u8dcf\\u8dd5\\u8dd9\\u8dc8\\u8dd7\\u8dc5\\u8eef\\u8ef7\\u8efa\\ufffd\".split(\"\"),e=0;e!=r[219].length;++e)65533!==r[219][e].charCodeAt(0)&&(n[r[219][e]]=56064+e,t[56064+e]=r[219][e]);for(r[220]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8ef9\\u8ee6\\u8eee\\u8ee5\\u8ef5\\u8ee7\\u8ee8\\u8ef6\\u8eeb\\u8ef1\\u8eec\\u8ef4\\u8ee9\\u902d\\u9034\\u902f\\u9106\\u912c\\u9104\\u90ff\\u90fc\\u9108\\u90f9\\u90fb\\u9101\\u9100\\u9107\\u9105\\u9103\\u9161\\u9164\\u915f\\u9162\\u9160\\u9201\\u920a\\u9225\\u9203\\u921a\\u9226\\u920f\\u920c\\u9200\\u9212\\u91ff\\u91fd\\u9206\\u9204\\u9227\\u9202\\u921c\\u9224\\u9219\\u9217\\u9205\\u9216\\u957b\\u958d\\u958c\\u9590\\u9687\\u967e\\u9688\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9689\\u9683\\u9680\\u96c2\\u96c8\\u96c3\\u96f1\\u96f0\\u976c\\u9770\\u976e\\u9807\\u98a9\\u98eb\\u9ce6\\u9ef9\\u4e83\\u4e84\\u4eb6\\u50bd\\u50bf\\u50c6\\u50ae\\u50c4\\u50ca\\u50b4\\u50c8\\u50c2\\u50b0\\u50c1\\u50ba\\u50b1\\u50cb\\u50c9\\u50b6\\u50b8\\u51d7\\u527a\\u5278\\u527b\\u527c\\u55c3\\u55db\\u55cc\\u55d0\\u55cb\\u55ca\\u55dd\\u55c0\\u55d4\\u55c4\\u55e9\\u55bf\\u55d2\\u558d\\u55cf\\u55d5\\u55e2\\u55d6\\u55c8\\u55f2\\u55cd\\u55d9\\u55c2\\u5714\\u5853\\u5868\\u5864\\u584f\\u584d\\u5849\\u586f\\u5855\\u584e\\u585d\\u5859\\u5865\\u585b\\u583d\\u5863\\u5871\\u58fc\\u5ac7\\u5ac4\\u5acb\\u5aba\\u5ab8\\u5ab1\\u5ab5\\u5ab0\\u5abf\\u5ac8\\u5abb\\u5ac6\\ufffd\".split(\"\"),e=0;e!=r[220].length;++e)65533!==r[220][e].charCodeAt(0)&&(n[r[220][e]]=56320+e,t[56320+e]=r[220][e]);for(r[221]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5ab7\\u5ac0\\u5aca\\u5ab4\\u5ab6\\u5acd\\u5ab9\\u5a90\\u5bd6\\u5bd8\\u5bd9\\u5c1f\\u5c33\\u5d71\\u5d63\\u5d4a\\u5d65\\u5d72\\u5d6c\\u5d5e\\u5d68\\u5d67\\u5d62\\u5df0\\u5e4f\\u5e4e\\u5e4a\\u5e4d\\u5e4b\\u5ec5\\u5ecc\\u5ec6\\u5ecb\\u5ec7\\u5f40\\u5faf\\u5fad\\u60f7\\u6149\\u614a\\u612b\\u6145\\u6136\\u6132\\u612e\\u6146\\u612f\\u614f\\u6129\\u6140\\u6220\\u9168\\u6223\\u6225\\u6224\\u63c5\\u63f1\\u63eb\\u6410\\u6412\\u6409\\u6420\\u6424\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6433\\u6443\\u641f\\u6415\\u6418\\u6439\\u6437\\u6422\\u6423\\u640c\\u6426\\u6430\\u6428\\u6441\\u6435\\u642f\\u640a\\u641a\\u6440\\u6425\\u6427\\u640b\\u63e7\\u641b\\u642e\\u6421\\u640e\\u656f\\u6592\\u65d3\\u6686\\u668c\\u6695\\u6690\\u668b\\u668a\\u6699\\u6694\\u6678\\u6720\\u6966\\u695f\\u6938\\u694e\\u6962\\u6971\\u693f\\u6945\\u696a\\u6939\\u6942\\u6957\\u6959\\u697a\\u6948\\u6949\\u6935\\u696c\\u6933\\u693d\\u6965\\u68f0\\u6978\\u6934\\u6969\\u6940\\u696f\\u6944\\u6976\\u6958\\u6941\\u6974\\u694c\\u693b\\u694b\\u6937\\u695c\\u694f\\u6951\\u6932\\u6952\\u692f\\u697b\\u693c\\u6b46\\u6b45\\u6b43\\u6b42\\u6b48\\u6b41\\u6b9b\\ufa0d\\u6bfb\\u6bfc\\ufffd\".split(\"\"),e=0;e!=r[221].length;++e)65533!==r[221][e].charCodeAt(0)&&(n[r[221][e]]=56576+e,t[56576+e]=r[221][e]);for(r[222]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6bf9\\u6bf7\\u6bf8\\u6e9b\\u6ed6\\u6ec8\\u6e8f\\u6ec0\\u6e9f\\u6e93\\u6e94\\u6ea0\\u6eb1\\u6eb9\\u6ec6\\u6ed2\\u6ebd\\u6ec1\\u6e9e\\u6ec9\\u6eb7\\u6eb0\\u6ecd\\u6ea6\\u6ecf\\u6eb2\\u6ebe\\u6ec3\\u6edc\\u6ed8\\u6e99\\u6e92\\u6e8e\\u6e8d\\u6ea4\\u6ea1\\u6ebf\\u6eb3\\u6ed0\\u6eca\\u6e97\\u6eae\\u6ea3\\u7147\\u7154\\u7152\\u7163\\u7160\\u7141\\u715d\\u7162\\u7172\\u7178\\u716a\\u7161\\u7142\\u7158\\u7143\\u714b\\u7170\\u715f\\u7150\\u7153\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7144\\u714d\\u715a\\u724f\\u728d\\u728c\\u7291\\u7290\\u728e\\u733c\\u7342\\u733b\\u733a\\u7340\\u734a\\u7349\\u7444\\u744a\\u744b\\u7452\\u7451\\u7457\\u7440\\u744f\\u7450\\u744e\\u7442\\u7446\\u744d\\u7454\\u74e1\\u74ff\\u74fe\\u74fd\\u751d\\u7579\\u7577\\u6983\\u75ef\\u760f\\u7603\\u75f7\\u75fe\\u75fc\\u75f9\\u75f8\\u7610\\u75fb\\u75f6\\u75ed\\u75f5\\u75fd\\u7699\\u76b5\\u76dd\\u7755\\u775f\\u7760\\u7752\\u7756\\u775a\\u7769\\u7767\\u7754\\u7759\\u776d\\u77e0\\u7887\\u789a\\u7894\\u788f\\u7884\\u7895\\u7885\\u7886\\u78a1\\u7883\\u7879\\u7899\\u7880\\u7896\\u787b\\u797c\\u7982\\u797d\\u7979\\u7a11\\u7a18\\u7a19\\u7a12\\u7a17\\u7a15\\u7a22\\u7a13\\ufffd\".split(\"\"),e=0;e!=r[222].length;++e)65533!==r[222][e].charCodeAt(0)&&(n[r[222][e]]=56832+e,t[56832+e]=r[222][e]);for(r[223]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7a1b\\u7a10\\u7aa3\\u7aa2\\u7a9e\\u7aeb\\u7b66\\u7b64\\u7b6d\\u7b74\\u7b69\\u7b72\\u7b65\\u7b73\\u7b71\\u7b70\\u7b61\\u7b78\\u7b76\\u7b63\\u7cb2\\u7cb4\\u7caf\\u7d88\\u7d86\\u7d80\\u7d8d\\u7d7f\\u7d85\\u7d7a\\u7d8e\\u7d7b\\u7d83\\u7d7c\\u7d8c\\u7d94\\u7d84\\u7d7d\\u7d92\\u7f6d\\u7f6b\\u7f67\\u7f68\\u7f6c\\u7fa6\\u7fa5\\u7fa7\\u7fdb\\u7fdc\\u8021\\u8164\\u8160\\u8177\\u815c\\u8169\\u815b\\u8162\\u8172\\u6721\\u815e\\u8176\\u8167\\u816f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8144\\u8161\\u821d\\u8249\\u8244\\u8240\\u8242\\u8245\\u84f1\\u843f\\u8456\\u8476\\u8479\\u848f\\u848d\\u8465\\u8451\\u8440\\u8486\\u8467\\u8430\\u844d\\u847d\\u845a\\u8459\\u8474\\u8473\\u845d\\u8507\\u845e\\u8437\\u843a\\u8434\\u847a\\u8443\\u8478\\u8432\\u8445\\u8429\\u83d9\\u844b\\u842f\\u8442\\u842d\\u845f\\u8470\\u8439\\u844e\\u844c\\u8452\\u846f\\u84c5\\u848e\\u843b\\u8447\\u8436\\u8433\\u8468\\u847e\\u8444\\u842b\\u8460\\u8454\\u846e\\u8450\\u870b\\u8704\\u86f7\\u870c\\u86fa\\u86d6\\u86f5\\u874d\\u86f8\\u870e\\u8709\\u8701\\u86f6\\u870d\\u8705\\u88d6\\u88cb\\u88cd\\u88ce\\u88de\\u88db\\u88da\\u88cc\\u88d0\\u8985\\u899b\\u89df\\u89e5\\u89e4\\ufffd\".split(\"\"),e=0;e!=r[223].length;++e)65533!==r[223][e].charCodeAt(0)&&(n[r[223][e]]=57088+e,t[57088+e]=r[223][e]);for(r[224]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u89e1\\u89e0\\u89e2\\u89dc\\u89e6\\u8a76\\u8a86\\u8a7f\\u8a61\\u8a3f\\u8a77\\u8a82\\u8a84\\u8a75\\u8a83\\u8a81\\u8a74\\u8a7a\\u8c3c\\u8c4b\\u8c4a\\u8c65\\u8c64\\u8c66\\u8c86\\u8c84\\u8c85\\u8ccc\\u8d68\\u8d69\\u8d91\\u8d8c\\u8d8e\\u8d8f\\u8d8d\\u8d93\\u8d94\\u8d90\\u8d92\\u8df0\\u8de0\\u8dec\\u8df1\\u8dee\\u8dd0\\u8de9\\u8de3\\u8de2\\u8de7\\u8df2\\u8deb\\u8df4\\u8f06\\u8eff\\u8f01\\u8f00\\u8f05\\u8f07\\u8f08\\u8f02\\u8f0b\\u9052\\u903f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9044\\u9049\\u903d\\u9110\\u910d\\u910f\\u9111\\u9116\\u9114\\u910b\\u910e\\u916e\\u916f\\u9248\\u9252\\u9230\\u923a\\u9266\\u9233\\u9265\\u925e\\u9283\\u922e\\u924a\\u9246\\u926d\\u926c\\u924f\\u9260\\u9267\\u926f\\u9236\\u9261\\u9270\\u9231\\u9254\\u9263\\u9250\\u9272\\u924e\\u9253\\u924c\\u9256\\u9232\\u959f\\u959c\\u959e\\u959b\\u9692\\u9693\\u9691\\u9697\\u96ce\\u96fa\\u96fd\\u96f8\\u96f5\\u9773\\u9777\\u9778\\u9772\\u980f\\u980d\\u980e\\u98ac\\u98f6\\u98f9\\u99af\\u99b2\\u99b0\\u99b5\\u9aad\\u9aab\\u9b5b\\u9cea\\u9ced\\u9ce7\\u9e80\\u9efd\\u50e6\\u50d4\\u50d7\\u50e8\\u50f3\\u50db\\u50ea\\u50dd\\u50e4\\u50d3\\u50ec\\u50f0\\u50ef\\u50e3\\u50e0\\ufffd\".split(\"\"),e=0;e!=r[224].length;++e)65533!==r[224][e].charCodeAt(0)&&(n[r[224][e]]=57344+e,t[57344+e]=r[224][e]);for(r[225]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u51d8\\u5280\\u5281\\u52e9\\u52eb\\u5330\\u53ac\\u5627\\u5615\\u560c\\u5612\\u55fc\\u560f\\u561c\\u5601\\u5613\\u5602\\u55fa\\u561d\\u5604\\u55ff\\u55f9\\u5889\\u587c\\u5890\\u5898\\u5886\\u5881\\u587f\\u5874\\u588b\\u587a\\u5887\\u5891\\u588e\\u5876\\u5882\\u5888\\u587b\\u5894\\u588f\\u58fe\\u596b\\u5adc\\u5aee\\u5ae5\\u5ad5\\u5aea\\u5ada\\u5aed\\u5aeb\\u5af3\\u5ae2\\u5ae0\\u5adb\\u5aec\\u5ade\\u5add\\u5ad9\\u5ae8\\u5adf\\u5b77\\u5be0\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5be3\\u5c63\\u5d82\\u5d80\\u5d7d\\u5d86\\u5d7a\\u5d81\\u5d77\\u5d8a\\u5d89\\u5d88\\u5d7e\\u5d7c\\u5d8d\\u5d79\\u5d7f\\u5e58\\u5e59\\u5e53\\u5ed8\\u5ed1\\u5ed7\\u5ece\\u5edc\\u5ed5\\u5ed9\\u5ed2\\u5ed4\\u5f44\\u5f43\\u5f6f\\u5fb6\\u612c\\u6128\\u6141\\u615e\\u6171\\u6173\\u6152\\u6153\\u6172\\u616c\\u6180\\u6174\\u6154\\u617a\\u615b\\u6165\\u613b\\u616a\\u6161\\u6156\\u6229\\u6227\\u622b\\u642b\\u644d\\u645b\\u645d\\u6474\\u6476\\u6472\\u6473\\u647d\\u6475\\u6466\\u64a6\\u644e\\u6482\\u645e\\u645c\\u644b\\u6453\\u6460\\u6450\\u647f\\u643f\\u646c\\u646b\\u6459\\u6465\\u6477\\u6573\\u65a0\\u66a1\\u66a0\\u669f\\u6705\\u6704\\u6722\\u69b1\\u69b6\\u69c9\\ufffd\".split(\"\"),e=0;e!=r[225].length;++e)65533!==r[225][e].charCodeAt(0)&&(n[r[225][e]]=57600+e,t[57600+e]=r[225][e]);for(r[226]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u69a0\\u69ce\\u6996\\u69b0\\u69ac\\u69bc\\u6991\\u6999\\u698e\\u69a7\\u698d\\u69a9\\u69be\\u69af\\u69bf\\u69c4\\u69bd\\u69a4\\u69d4\\u69b9\\u69ca\\u699a\\u69cf\\u69b3\\u6993\\u69aa\\u69a1\\u699e\\u69d9\\u6997\\u6990\\u69c2\\u69b5\\u69a5\\u69c6\\u6b4a\\u6b4d\\u6b4b\\u6b9e\\u6b9f\\u6ba0\\u6bc3\\u6bc4\\u6bfe\\u6ece\\u6ef5\\u6ef1\\u6f03\\u6f25\\u6ef8\\u6f37\\u6efb\\u6f2e\\u6f09\\u6f4e\\u6f19\\u6f1a\\u6f27\\u6f18\\u6f3b\\u6f12\\u6eed\\u6f0a\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6f36\\u6f73\\u6ef9\\u6eee\\u6f2d\\u6f40\\u6f30\\u6f3c\\u6f35\\u6eeb\\u6f07\\u6f0e\\u6f43\\u6f05\\u6efd\\u6ef6\\u6f39\\u6f1c\\u6efc\\u6f3a\\u6f1f\\u6f0d\\u6f1e\\u6f08\\u6f21\\u7187\\u7190\\u7189\\u7180\\u7185\\u7182\\u718f\\u717b\\u7186\\u7181\\u7197\\u7244\\u7253\\u7297\\u7295\\u7293\\u7343\\u734d\\u7351\\u734c\\u7462\\u7473\\u7471\\u7475\\u7472\\u7467\\u746e\\u7500\\u7502\\u7503\\u757d\\u7590\\u7616\\u7608\\u760c\\u7615\\u7611\\u760a\\u7614\\u76b8\\u7781\\u777c\\u7785\\u7782\\u776e\\u7780\\u776f\\u777e\\u7783\\u78b2\\u78aa\\u78b4\\u78ad\\u78a8\\u787e\\u78ab\\u789e\\u78a5\\u78a0\\u78ac\\u78a2\\u78a4\\u7998\\u798a\\u798b\\u7996\\u7995\\u7994\\u7993\\ufffd\".split(\"\"),e=0;e!=r[226].length;++e)65533!==r[226][e].charCodeAt(0)&&(n[r[226][e]]=57856+e,t[57856+e]=r[226][e]);for(r[227]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7997\\u7988\\u7992\\u7990\\u7a2b\\u7a4a\\u7a30\\u7a2f\\u7a28\\u7a26\\u7aa8\\u7aab\\u7aac\\u7aee\\u7b88\\u7b9c\\u7b8a\\u7b91\\u7b90\\u7b96\\u7b8d\\u7b8c\\u7b9b\\u7b8e\\u7b85\\u7b98\\u5284\\u7b99\\u7ba4\\u7b82\\u7cbb\\u7cbf\\u7cbc\\u7cba\\u7da7\\u7db7\\u7dc2\\u7da3\\u7daa\\u7dc1\\u7dc0\\u7dc5\\u7d9d\\u7dce\\u7dc4\\u7dc6\\u7dcb\\u7dcc\\u7daf\\u7db9\\u7d96\\u7dbc\\u7d9f\\u7da6\\u7dae\\u7da9\\u7da1\\u7dc9\\u7f73\\u7fe2\\u7fe3\\u7fe5\\u7fde\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8024\\u805d\\u805c\\u8189\\u8186\\u8183\\u8187\\u818d\\u818c\\u818b\\u8215\\u8497\\u84a4\\u84a1\\u849f\\u84ba\\u84ce\\u84c2\\u84ac\\u84ae\\u84ab\\u84b9\\u84b4\\u84c1\\u84cd\\u84aa\\u849a\\u84b1\\u84d0\\u849d\\u84a7\\u84bb\\u84a2\\u8494\\u84c7\\u84cc\\u849b\\u84a9\\u84af\\u84a8\\u84d6\\u8498\\u84b6\\u84cf\\u84a0\\u84d7\\u84d4\\u84d2\\u84db\\u84b0\\u8491\\u8661\\u8733\\u8723\\u8728\\u876b\\u8740\\u872e\\u871e\\u8721\\u8719\\u871b\\u8743\\u872c\\u8741\\u873e\\u8746\\u8720\\u8732\\u872a\\u872d\\u873c\\u8712\\u873a\\u8731\\u8735\\u8742\\u8726\\u8727\\u8738\\u8724\\u871a\\u8730\\u8711\\u88f7\\u88e7\\u88f1\\u88f2\\u88fa\\u88fe\\u88ee\\u88fc\\u88f6\\u88fb\\ufffd\".split(\"\"),e=0;e!=r[227].length;++e)65533!==r[227][e].charCodeAt(0)&&(n[r[227][e]]=58112+e,t[58112+e]=r[227][e]);for(r[228]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u88f0\\u88ec\\u88eb\\u899d\\u89a1\\u899f\\u899e\\u89e9\\u89eb\\u89e8\\u8aab\\u8a99\\u8a8b\\u8a92\\u8a8f\\u8a96\\u8c3d\\u8c68\\u8c69\\u8cd5\\u8ccf\\u8cd7\\u8d96\\u8e09\\u8e02\\u8dff\\u8e0d\\u8dfd\\u8e0a\\u8e03\\u8e07\\u8e06\\u8e05\\u8dfe\\u8e00\\u8e04\\u8f10\\u8f11\\u8f0e\\u8f0d\\u9123\\u911c\\u9120\\u9122\\u911f\\u911d\\u911a\\u9124\\u9121\\u911b\\u917a\\u9172\\u9179\\u9173\\u92a5\\u92a4\\u9276\\u929b\\u927a\\u92a0\\u9294\\u92aa\\u928d\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u92a6\\u929a\\u92ab\\u9279\\u9297\\u927f\\u92a3\\u92ee\\u928e\\u9282\\u9295\\u92a2\\u927d\\u9288\\u92a1\\u928a\\u9286\\u928c\\u9299\\u92a7\\u927e\\u9287\\u92a9\\u929d\\u928b\\u922d\\u969e\\u96a1\\u96ff\\u9758\\u977d\\u977a\\u977e\\u9783\\u9780\\u9782\\u977b\\u9784\\u9781\\u977f\\u97ce\\u97cd\\u9816\\u98ad\\u98ae\\u9902\\u9900\\u9907\\u999d\\u999c\\u99c3\\u99b9\\u99bb\\u99ba\\u99c2\\u99bd\\u99c7\\u9ab1\\u9ae3\\u9ae7\\u9b3e\\u9b3f\\u9b60\\u9b61\\u9b5f\\u9cf1\\u9cf2\\u9cf5\\u9ea7\\u50ff\\u5103\\u5130\\u50f8\\u5106\\u5107\\u50f6\\u50fe\\u510b\\u510c\\u50fd\\u510a\\u528b\\u528c\\u52f1\\u52ef\\u5648\\u5642\\u564c\\u5635\\u5641\\u564a\\u5649\\u5646\\u5658\\ufffd\".split(\"\"),e=0;e!=r[228].length;++e)65533!==r[228][e].charCodeAt(0)&&(n[r[228][e]]=58368+e,t[58368+e]=r[228][e]);for(r[229]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u565a\\u5640\\u5633\\u563d\\u562c\\u563e\\u5638\\u562a\\u563a\\u571a\\u58ab\\u589d\\u58b1\\u58a0\\u58a3\\u58af\\u58ac\\u58a5\\u58a1\\u58ff\\u5aff\\u5af4\\u5afd\\u5af7\\u5af6\\u5b03\\u5af8\\u5b02\\u5af9\\u5b01\\u5b07\\u5b05\\u5b0f\\u5c67\\u5d99\\u5d97\\u5d9f\\u5d92\\u5da2\\u5d93\\u5d95\\u5da0\\u5d9c\\u5da1\\u5d9a\\u5d9e\\u5e69\\u5e5d\\u5e60\\u5e5c\\u7df3\\u5edb\\u5ede\\u5ee1\\u5f49\\u5fb2\\u618b\\u6183\\u6179\\u61b1\\u61b0\\u61a2\\u6189\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u619b\\u6193\\u61af\\u61ad\\u619f\\u6192\\u61aa\\u61a1\\u618d\\u6166\\u61b3\\u622d\\u646e\\u6470\\u6496\\u64a0\\u6485\\u6497\\u649c\\u648f\\u648b\\u648a\\u648c\\u64a3\\u649f\\u6468\\u64b1\\u6498\\u6576\\u657a\\u6579\\u657b\\u65b2\\u65b3\\u66b5\\u66b0\\u66a9\\u66b2\\u66b7\\u66aa\\u66af\\u6a00\\u6a06\\u6a17\\u69e5\\u69f8\\u6a15\\u69f1\\u69e4\\u6a20\\u69ff\\u69ec\\u69e2\\u6a1b\\u6a1d\\u69fe\\u6a27\\u69f2\\u69ee\\u6a14\\u69f7\\u69e7\\u6a40\\u6a08\\u69e6\\u69fb\\u6a0d\\u69fc\\u69eb\\u6a09\\u6a04\\u6a18\\u6a25\\u6a0f\\u69f6\\u6a26\\u6a07\\u69f4\\u6a16\\u6b51\\u6ba5\\u6ba3\\u6ba2\\u6ba6\\u6c01\\u6c00\\u6bff\\u6c02\\u6f41\\u6f26\\u6f7e\\u6f87\\u6fc6\\u6f92\\ufffd\".split(\"\"),e=0;e!=r[229].length;++e)65533!==r[229][e].charCodeAt(0)&&(n[r[229][e]]=58624+e,t[58624+e]=r[229][e]);for(r[230]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6f8d\\u6f89\\u6f8c\\u6f62\\u6f4f\\u6f85\\u6f5a\\u6f96\\u6f76\\u6f6c\\u6f82\\u6f55\\u6f72\\u6f52\\u6f50\\u6f57\\u6f94\\u6f93\\u6f5d\\u6f00\\u6f61\\u6f6b\\u6f7d\\u6f67\\u6f90\\u6f53\\u6f8b\\u6f69\\u6f7f\\u6f95\\u6f63\\u6f77\\u6f6a\\u6f7b\\u71b2\\u71af\\u719b\\u71b0\\u71a0\\u719a\\u71a9\\u71b5\\u719d\\u71a5\\u719e\\u71a4\\u71a1\\u71aa\\u719c\\u71a7\\u71b3\\u7298\\u729a\\u7358\\u7352\\u735e\\u735f\\u7360\\u735d\\u735b\\u7361\\u735a\\u7359\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7362\\u7487\\u7489\\u748a\\u7486\\u7481\\u747d\\u7485\\u7488\\u747c\\u7479\\u7508\\u7507\\u757e\\u7625\\u761e\\u7619\\u761d\\u761c\\u7623\\u761a\\u7628\\u761b\\u769c\\u769d\\u769e\\u769b\\u778d\\u778f\\u7789\\u7788\\u78cd\\u78bb\\u78cf\\u78cc\\u78d1\\u78ce\\u78d4\\u78c8\\u78c3\\u78c4\\u78c9\\u799a\\u79a1\\u79a0\\u799c\\u79a2\\u799b\\u6b76\\u7a39\\u7ab2\\u7ab4\\u7ab3\\u7bb7\\u7bcb\\u7bbe\\u7bac\\u7bce\\u7baf\\u7bb9\\u7bca\\u7bb5\\u7cc5\\u7cc8\\u7ccc\\u7ccb\\u7df7\\u7ddb\\u7dea\\u7de7\\u7dd7\\u7de1\\u7e03\\u7dfa\\u7de6\\u7df6\\u7df1\\u7df0\\u7dee\\u7ddf\\u7f76\\u7fac\\u7fb0\\u7fad\\u7fed\\u7feb\\u7fea\\u7fec\\u7fe6\\u7fe8\\u8064\\u8067\\u81a3\\u819f\\ufffd\".split(\"\"),e=0;e!=r[230].length;++e)65533!==r[230][e].charCodeAt(0)&&(n[r[230][e]]=58880+e,t[58880+e]=r[230][e]);for(r[231]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u819e\\u8195\\u81a2\\u8199\\u8197\\u8216\\u824f\\u8253\\u8252\\u8250\\u824e\\u8251\\u8524\\u853b\\u850f\\u8500\\u8529\\u850e\\u8509\\u850d\\u851f\\u850a\\u8527\\u851c\\u84fb\\u852b\\u84fa\\u8508\\u850c\\u84f4\\u852a\\u84f2\\u8515\\u84f7\\u84eb\\u84f3\\u84fc\\u8512\\u84ea\\u84e9\\u8516\\u84fe\\u8528\\u851d\\u852e\\u8502\\u84fd\\u851e\\u84f6\\u8531\\u8526\\u84e7\\u84e8\\u84f0\\u84ef\\u84f9\\u8518\\u8520\\u8530\\u850b\\u8519\\u852f\\u8662\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8756\\u8763\\u8764\\u8777\\u87e1\\u8773\\u8758\\u8754\\u875b\\u8752\\u8761\\u875a\\u8751\\u875e\\u876d\\u876a\\u8750\\u874e\\u875f\\u875d\\u876f\\u876c\\u877a\\u876e\\u875c\\u8765\\u874f\\u877b\\u8775\\u8762\\u8767\\u8769\\u885a\\u8905\\u890c\\u8914\\u890b\\u8917\\u8918\\u8919\\u8906\\u8916\\u8911\\u890e\\u8909\\u89a2\\u89a4\\u89a3\\u89ed\\u89f0\\u89ec\\u8acf\\u8ac6\\u8ab8\\u8ad3\\u8ad1\\u8ad4\\u8ad5\\u8abb\\u8ad7\\u8abe\\u8ac0\\u8ac5\\u8ad8\\u8ac3\\u8aba\\u8abd\\u8ad9\\u8c3e\\u8c4d\\u8c8f\\u8ce5\\u8cdf\\u8cd9\\u8ce8\\u8cda\\u8cdd\\u8ce7\\u8da0\\u8d9c\\u8da1\\u8d9b\\u8e20\\u8e23\\u8e25\\u8e24\\u8e2e\\u8e15\\u8e1b\\u8e16\\u8e11\\u8e19\\u8e26\\u8e27\\ufffd\".split(\"\"),e=0;e!=r[231].length;++e)65533!==r[231][e].charCodeAt(0)&&(n[r[231][e]]=59136+e,t[59136+e]=r[231][e]);for(r[232]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8e14\\u8e12\\u8e18\\u8e13\\u8e1c\\u8e17\\u8e1a\\u8f2c\\u8f24\\u8f18\\u8f1a\\u8f20\\u8f23\\u8f16\\u8f17\\u9073\\u9070\\u906f\\u9067\\u906b\\u912f\\u912b\\u9129\\u912a\\u9132\\u9126\\u912e\\u9185\\u9186\\u918a\\u9181\\u9182\\u9184\\u9180\\u92d0\\u92c3\\u92c4\\u92c0\\u92d9\\u92b6\\u92cf\\u92f1\\u92df\\u92d8\\u92e9\\u92d7\\u92dd\\u92cc\\u92ef\\u92c2\\u92e8\\u92ca\\u92c8\\u92ce\\u92e6\\u92cd\\u92d5\\u92c9\\u92e0\\u92de\\u92e7\\u92d1\\u92d3\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u92b5\\u92e1\\u92c6\\u92b4\\u957c\\u95ac\\u95ab\\u95ae\\u95b0\\u96a4\\u96a2\\u96d3\\u9705\\u9708\\u9702\\u975a\\u978a\\u978e\\u9788\\u97d0\\u97cf\\u981e\\u981d\\u9826\\u9829\\u9828\\u9820\\u981b\\u9827\\u98b2\\u9908\\u98fa\\u9911\\u9914\\u9916\\u9917\\u9915\\u99dc\\u99cd\\u99cf\\u99d3\\u99d4\\u99ce\\u99c9\\u99d6\\u99d8\\u99cb\\u99d7\\u99cc\\u9ab3\\u9aec\\u9aeb\\u9af3\\u9af2\\u9af1\\u9b46\\u9b43\\u9b67\\u9b74\\u9b71\\u9b66\\u9b76\\u9b75\\u9b70\\u9b68\\u9b64\\u9b6c\\u9cfc\\u9cfa\\u9cfd\\u9cff\\u9cf7\\u9d07\\u9d00\\u9cf9\\u9cfb\\u9d08\\u9d05\\u9d04\\u9e83\\u9ed3\\u9f0f\\u9f10\\u511c\\u5113\\u5117\\u511a\\u5111\\u51de\\u5334\\u53e1\\u5670\\u5660\\u566e\\ufffd\".split(\"\"),e=0;e!=r[232].length;++e)65533!==r[232][e].charCodeAt(0)&&(n[r[232][e]]=59392+e,t[59392+e]=r[232][e]);for(r[233]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5673\\u5666\\u5663\\u566d\\u5672\\u565e\\u5677\\u571c\\u571b\\u58c8\\u58bd\\u58c9\\u58bf\\u58ba\\u58c2\\u58bc\\u58c6\\u5b17\\u5b19\\u5b1b\\u5b21\\u5b14\\u5b13\\u5b10\\u5b16\\u5b28\\u5b1a\\u5b20\\u5b1e\\u5bef\\u5dac\\u5db1\\u5da9\\u5da7\\u5db5\\u5db0\\u5dae\\u5daa\\u5da8\\u5db2\\u5dad\\u5daf\\u5db4\\u5e67\\u5e68\\u5e66\\u5e6f\\u5ee9\\u5ee7\\u5ee6\\u5ee8\\u5ee5\\u5f4b\\u5fbc\\u619d\\u61a8\\u6196\\u61c5\\u61b4\\u61c6\\u61c1\\u61cc\\u61ba\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u61bf\\u61b8\\u618c\\u64d7\\u64d6\\u64d0\\u64cf\\u64c9\\u64bd\\u6489\\u64c3\\u64db\\u64f3\\u64d9\\u6533\\u657f\\u657c\\u65a2\\u66c8\\u66be\\u66c0\\u66ca\\u66cb\\u66cf\\u66bd\\u66bb\\u66ba\\u66cc\\u6723\\u6a34\\u6a66\\u6a49\\u6a67\\u6a32\\u6a68\\u6a3e\\u6a5d\\u6a6d\\u6a76\\u6a5b\\u6a51\\u6a28\\u6a5a\\u6a3b\\u6a3f\\u6a41\\u6a6a\\u6a64\\u6a50\\u6a4f\\u6a54\\u6a6f\\u6a69\\u6a60\\u6a3c\\u6a5e\\u6a56\\u6a55\\u6a4d\\u6a4e\\u6a46\\u6b55\\u6b54\\u6b56\\u6ba7\\u6baa\\u6bab\\u6bc8\\u6bc7\\u6c04\\u6c03\\u6c06\\u6fad\\u6fcb\\u6fa3\\u6fc7\\u6fbc\\u6fce\\u6fc8\\u6f5e\\u6fc4\\u6fbd\\u6f9e\\u6fca\\u6fa8\\u7004\\u6fa5\\u6fae\\u6fba\\u6fac\\u6faa\\u6fcf\\u6fbf\\u6fb8\\ufffd\".split(\"\"),e=0;e!=r[233].length;++e)65533!==r[233][e].charCodeAt(0)&&(n[r[233][e]]=59648+e,t[59648+e]=r[233][e]);for(r[234]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6fa2\\u6fc9\\u6fab\\u6fcd\\u6faf\\u6fb2\\u6fb0\\u71c5\\u71c2\\u71bf\\u71b8\\u71d6\\u71c0\\u71c1\\u71cb\\u71d4\\u71ca\\u71c7\\u71cf\\u71bd\\u71d8\\u71bc\\u71c6\\u71da\\u71db\\u729d\\u729e\\u7369\\u7366\\u7367\\u736c\\u7365\\u736b\\u736a\\u747f\\u749a\\u74a0\\u7494\\u7492\\u7495\\u74a1\\u750b\\u7580\\u762f\\u762d\\u7631\\u763d\\u7633\\u763c\\u7635\\u7632\\u7630\\u76bb\\u76e6\\u779a\\u779d\\u77a1\\u779c\\u779b\\u77a2\\u77a3\\u7795\\u7799\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7797\\u78dd\\u78e9\\u78e5\\u78ea\\u78de\\u78e3\\u78db\\u78e1\\u78e2\\u78ed\\u78df\\u78e0\\u79a4\\u7a44\\u7a48\\u7a47\\u7ab6\\u7ab8\\u7ab5\\u7ab1\\u7ab7\\u7bde\\u7be3\\u7be7\\u7bdd\\u7bd5\\u7be5\\u7bda\\u7be8\\u7bf9\\u7bd4\\u7bea\\u7be2\\u7bdc\\u7beb\\u7bd8\\u7bdf\\u7cd2\\u7cd4\\u7cd7\\u7cd0\\u7cd1\\u7e12\\u7e21\\u7e17\\u7e0c\\u7e1f\\u7e20\\u7e13\\u7e0e\\u7e1c\\u7e15\\u7e1a\\u7e22\\u7e0b\\u7e0f\\u7e16\\u7e0d\\u7e14\\u7e25\\u7e24\\u7f43\\u7f7b\\u7f7c\\u7f7a\\u7fb1\\u7fef\\u802a\\u8029\\u806c\\u81b1\\u81a6\\u81ae\\u81b9\\u81b5\\u81ab\\u81b0\\u81ac\\u81b4\\u81b2\\u81b7\\u81a7\\u81f2\\u8255\\u8256\\u8257\\u8556\\u8545\\u856b\\u854d\\u8553\\u8561\\u8558\\ufffd\".split(\"\"),e=0;e!=r[234].length;++e)65533!==r[234][e].charCodeAt(0)&&(n[r[234][e]]=59904+e,t[59904+e]=r[234][e]);for(r[235]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8540\\u8546\\u8564\\u8541\\u8562\\u8544\\u8551\\u8547\\u8563\\u853e\\u855b\\u8571\\u854e\\u856e\\u8575\\u8555\\u8567\\u8560\\u858c\\u8566\\u855d\\u8554\\u8565\\u856c\\u8663\\u8665\\u8664\\u879b\\u878f\\u8797\\u8793\\u8792\\u8788\\u8781\\u8796\\u8798\\u8779\\u8787\\u87a3\\u8785\\u8790\\u8791\\u879d\\u8784\\u8794\\u879c\\u879a\\u8789\\u891e\\u8926\\u8930\\u892d\\u892e\\u8927\\u8931\\u8922\\u8929\\u8923\\u892f\\u892c\\u891f\\u89f1\\u8ae0\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8ae2\\u8af2\\u8af4\\u8af5\\u8add\\u8b14\\u8ae4\\u8adf\\u8af0\\u8ac8\\u8ade\\u8ae1\\u8ae8\\u8aff\\u8aef\\u8afb\\u8c91\\u8c92\\u8c90\\u8cf5\\u8cee\\u8cf1\\u8cf0\\u8cf3\\u8d6c\\u8d6e\\u8da5\\u8da7\\u8e33\\u8e3e\\u8e38\\u8e40\\u8e45\\u8e36\\u8e3c\\u8e3d\\u8e41\\u8e30\\u8e3f\\u8ebd\\u8f36\\u8f2e\\u8f35\\u8f32\\u8f39\\u8f37\\u8f34\\u9076\\u9079\\u907b\\u9086\\u90fa\\u9133\\u9135\\u9136\\u9193\\u9190\\u9191\\u918d\\u918f\\u9327\\u931e\\u9308\\u931f\\u9306\\u930f\\u937a\\u9338\\u933c\\u931b\\u9323\\u9312\\u9301\\u9346\\u932d\\u930e\\u930d\\u92cb\\u931d\\u92fa\\u9325\\u9313\\u92f9\\u92f7\\u9334\\u9302\\u9324\\u92ff\\u9329\\u9339\\u9335\\u932a\\u9314\\u930c\\ufffd\".split(\"\"),e=0;e!=r[235].length;++e)65533!==r[235][e].charCodeAt(0)&&(n[r[235][e]]=60160+e,t[60160+e]=r[235][e]);for(r[236]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u930b\\u92fe\\u9309\\u9300\\u92fb\\u9316\\u95bc\\u95cd\\u95be\\u95b9\\u95ba\\u95b6\\u95bf\\u95b5\\u95bd\\u96a9\\u96d4\\u970b\\u9712\\u9710\\u9799\\u9797\\u9794\\u97f0\\u97f8\\u9835\\u982f\\u9832\\u9924\\u991f\\u9927\\u9929\\u999e\\u99ee\\u99ec\\u99e5\\u99e4\\u99f0\\u99e3\\u99ea\\u99e9\\u99e7\\u9ab9\\u9abf\\u9ab4\\u9abb\\u9af6\\u9afa\\u9af9\\u9af7\\u9b33\\u9b80\\u9b85\\u9b87\\u9b7c\\u9b7e\\u9b7b\\u9b82\\u9b93\\u9b92\\u9b90\\u9b7a\\u9b95\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9b7d\\u9b88\\u9d25\\u9d17\\u9d20\\u9d1e\\u9d14\\u9d29\\u9d1d\\u9d18\\u9d22\\u9d10\\u9d19\\u9d1f\\u9e88\\u9e86\\u9e87\\u9eae\\u9ead\\u9ed5\\u9ed6\\u9efa\\u9f12\\u9f3d\\u5126\\u5125\\u5122\\u5124\\u5120\\u5129\\u52f4\\u5693\\u568c\\u568d\\u5686\\u5684\\u5683\\u567e\\u5682\\u567f\\u5681\\u58d6\\u58d4\\u58cf\\u58d2\\u5b2d\\u5b25\\u5b32\\u5b23\\u5b2c\\u5b27\\u5b26\\u5b2f\\u5b2e\\u5b7b\\u5bf1\\u5bf2\\u5db7\\u5e6c\\u5e6a\\u5fbe\\u5fbb\\u61c3\\u61b5\\u61bc\\u61e7\\u61e0\\u61e5\\u61e4\\u61e8\\u61de\\u64ef\\u64e9\\u64e3\\u64eb\\u64e4\\u64e8\\u6581\\u6580\\u65b6\\u65da\\u66d2\\u6a8d\\u6a96\\u6a81\\u6aa5\\u6a89\\u6a9f\\u6a9b\\u6aa1\\u6a9e\\u6a87\\u6a93\\u6a8e\\ufffd\".split(\"\"),e=0;e!=r[236].length;++e)65533!==r[236][e].charCodeAt(0)&&(n[r[236][e]]=60416+e,t[60416+e]=r[236][e]);for(r[237]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6a95\\u6a83\\u6aa8\\u6aa4\\u6a91\\u6a7f\\u6aa6\\u6a9a\\u6a85\\u6a8c\\u6a92\\u6b5b\\u6bad\\u6c09\\u6fcc\\u6fa9\\u6ff4\\u6fd4\\u6fe3\\u6fdc\\u6fed\\u6fe7\\u6fe6\\u6fde\\u6ff2\\u6fdd\\u6fe2\\u6fe8\\u71e1\\u71f1\\u71e8\\u71f2\\u71e4\\u71f0\\u71e2\\u7373\\u736e\\u736f\\u7497\\u74b2\\u74ab\\u7490\\u74aa\\u74ad\\u74b1\\u74a5\\u74af\\u7510\\u7511\\u7512\\u750f\\u7584\\u7643\\u7648\\u7649\\u7647\\u76a4\\u76e9\\u77b5\\u77ab\\u77b2\\u77b7\\u77b6\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u77b4\\u77b1\\u77a8\\u77f0\\u78f3\\u78fd\\u7902\\u78fb\\u78fc\\u78f2\\u7905\\u78f9\\u78fe\\u7904\\u79ab\\u79a8\\u7a5c\\u7a5b\\u7a56\\u7a58\\u7a54\\u7a5a\\u7abe\\u7ac0\\u7ac1\\u7c05\\u7c0f\\u7bf2\\u7c00\\u7bff\\u7bfb\\u7c0e\\u7bf4\\u7c0b\\u7bf3\\u7c02\\u7c09\\u7c03\\u7c01\\u7bf8\\u7bfd\\u7c06\\u7bf0\\u7bf1\\u7c10\\u7c0a\\u7ce8\\u7e2d\\u7e3c\\u7e42\\u7e33\\u9848\\u7e38\\u7e2a\\u7e49\\u7e40\\u7e47\\u7e29\\u7e4c\\u7e30\\u7e3b\\u7e36\\u7e44\\u7e3a\\u7f45\\u7f7f\\u7f7e\\u7f7d\\u7ff4\\u7ff2\\u802c\\u81bb\\u81c4\\u81cc\\u81ca\\u81c5\\u81c7\\u81bc\\u81e9\\u825b\\u825a\\u825c\\u8583\\u8580\\u858f\\u85a7\\u8595\\u85a0\\u858b\\u85a3\\u857b\\u85a4\\u859a\\u859e\\ufffd\".split(\"\"),e=0;e!=r[237].length;++e)65533!==r[237][e].charCodeAt(0)&&(n[r[237][e]]=60672+e,t[60672+e]=r[237][e]);for(r[238]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8577\\u857c\\u8589\\u85a1\\u857a\\u8578\\u8557\\u858e\\u8596\\u8586\\u858d\\u8599\\u859d\\u8581\\u85a2\\u8582\\u8588\\u8585\\u8579\\u8576\\u8598\\u8590\\u859f\\u8668\\u87be\\u87aa\\u87ad\\u87c5\\u87b0\\u87ac\\u87b9\\u87b5\\u87bc\\u87ae\\u87c9\\u87c3\\u87c2\\u87cc\\u87b7\\u87af\\u87c4\\u87ca\\u87b4\\u87b6\\u87bf\\u87b8\\u87bd\\u87de\\u87b2\\u8935\\u8933\\u893c\\u893e\\u8941\\u8952\\u8937\\u8942\\u89ad\\u89af\\u89ae\\u89f2\\u89f3\\u8b1e\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8b18\\u8b16\\u8b11\\u8b05\\u8b0b\\u8b22\\u8b0f\\u8b12\\u8b15\\u8b07\\u8b0d\\u8b08\\u8b06\\u8b1c\\u8b13\\u8b1a\\u8c4f\\u8c70\\u8c72\\u8c71\\u8c6f\\u8c95\\u8c94\\u8cf9\\u8d6f\\u8e4e\\u8e4d\\u8e53\\u8e50\\u8e4c\\u8e47\\u8f43\\u8f40\\u9085\\u907e\\u9138\\u919a\\u91a2\\u919b\\u9199\\u919f\\u91a1\\u919d\\u91a0\\u93a1\\u9383\\u93af\\u9364\\u9356\\u9347\\u937c\\u9358\\u935c\\u9376\\u9349\\u9350\\u9351\\u9360\\u936d\\u938f\\u934c\\u936a\\u9379\\u9357\\u9355\\u9352\\u934f\\u9371\\u9377\\u937b\\u9361\\u935e\\u9363\\u9367\\u9380\\u934e\\u9359\\u95c7\\u95c0\\u95c9\\u95c3\\u95c5\\u95b7\\u96ae\\u96b0\\u96ac\\u9720\\u971f\\u9718\\u971d\\u9719\\u979a\\u97a1\\u979c\\ufffd\".split(\"\"),e=0;e!=r[238].length;++e)65533!==r[238][e].charCodeAt(0)&&(n[r[238][e]]=60928+e,t[60928+e]=r[238][e]);for(r[239]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u979e\\u979d\\u97d5\\u97d4\\u97f1\\u9841\\u9844\\u984a\\u9849\\u9845\\u9843\\u9925\\u992b\\u992c\\u992a\\u9933\\u9932\\u992f\\u992d\\u9931\\u9930\\u9998\\u99a3\\u99a1\\u9a02\\u99fa\\u99f4\\u99f7\\u99f9\\u99f8\\u99f6\\u99fb\\u99fd\\u99fe\\u99fc\\u9a03\\u9abe\\u9afe\\u9afd\\u9b01\\u9afc\\u9b48\\u9b9a\\u9ba8\\u9b9e\\u9b9b\\u9ba6\\u9ba1\\u9ba5\\u9ba4\\u9b86\\u9ba2\\u9ba0\\u9baf\\u9d33\\u9d41\\u9d67\\u9d36\\u9d2e\\u9d2f\\u9d31\\u9d38\\u9d30\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9d45\\u9d42\\u9d43\\u9d3e\\u9d37\\u9d40\\u9d3d\\u7ff5\\u9d2d\\u9e8a\\u9e89\\u9e8d\\u9eb0\\u9ec8\\u9eda\\u9efb\\u9eff\\u9f24\\u9f23\\u9f22\\u9f54\\u9fa0\\u5131\\u512d\\u512e\\u5698\\u569c\\u5697\\u569a\\u569d\\u5699\\u5970\\u5b3c\\u5c69\\u5c6a\\u5dc0\\u5e6d\\u5e6e\\u61d8\\u61df\\u61ed\\u61ee\\u61f1\\u61ea\\u61f0\\u61eb\\u61d6\\u61e9\\u64ff\\u6504\\u64fd\\u64f8\\u6501\\u6503\\u64fc\\u6594\\u65db\\u66da\\u66db\\u66d8\\u6ac5\\u6ab9\\u6abd\\u6ae1\\u6ac6\\u6aba\\u6ab6\\u6ab7\\u6ac7\\u6ab4\\u6aad\\u6b5e\\u6bc9\\u6c0b\\u7007\\u700c\\u700d\\u7001\\u7005\\u7014\\u700e\\u6fff\\u7000\\u6ffb\\u7026\\u6ffc\\u6ff7\\u700a\\u7201\\u71ff\\u71f9\\u7203\\u71fd\\u7376\\ufffd\".split(\"\"),e=0;e!=r[239].length;++e)65533!==r[239][e].charCodeAt(0)&&(n[r[239][e]]=61184+e,t[61184+e]=r[239][e]);for(r[240]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u74b8\\u74c0\\u74b5\\u74c1\\u74be\\u74b6\\u74bb\\u74c2\\u7514\\u7513\\u765c\\u7664\\u7659\\u7650\\u7653\\u7657\\u765a\\u76a6\\u76bd\\u76ec\\u77c2\\u77ba\\u78ff\\u790c\\u7913\\u7914\\u7909\\u7910\\u7912\\u7911\\u79ad\\u79ac\\u7a5f\\u7c1c\\u7c29\\u7c19\\u7c20\\u7c1f\\u7c2d\\u7c1d\\u7c26\\u7c28\\u7c22\\u7c25\\u7c30\\u7e5c\\u7e50\\u7e56\\u7e63\\u7e58\\u7e62\\u7e5f\\u7e51\\u7e60\\u7e57\\u7e53\\u7fb5\\u7fb3\\u7ff7\\u7ff8\\u8075\\u81d1\\u81d2\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u81d0\\u825f\\u825e\\u85b4\\u85c6\\u85c0\\u85c3\\u85c2\\u85b3\\u85b5\\u85bd\\u85c7\\u85c4\\u85bf\\u85cb\\u85ce\\u85c8\\u85c5\\u85b1\\u85b6\\u85d2\\u8624\\u85b8\\u85b7\\u85be\\u8669\\u87e7\\u87e6\\u87e2\\u87db\\u87eb\\u87ea\\u87e5\\u87df\\u87f3\\u87e4\\u87d4\\u87dc\\u87d3\\u87ed\\u87d8\\u87e3\\u87a4\\u87d7\\u87d9\\u8801\\u87f4\\u87e8\\u87dd\\u8953\\u894b\\u894f\\u894c\\u8946\\u8950\\u8951\\u8949\\u8b2a\\u8b27\\u8b23\\u8b33\\u8b30\\u8b35\\u8b47\\u8b2f\\u8b3c\\u8b3e\\u8b31\\u8b25\\u8b37\\u8b26\\u8b36\\u8b2e\\u8b24\\u8b3b\\u8b3d\\u8b3a\\u8c42\\u8c75\\u8c99\\u8c98\\u8c97\\u8cfe\\u8d04\\u8d02\\u8d00\\u8e5c\\u8e62\\u8e60\\u8e57\\u8e56\\u8e5e\\u8e65\\u8e67\\ufffd\".split(\"\"),e=0;e!=r[240].length;++e)65533!==r[240][e].charCodeAt(0)&&(n[r[240][e]]=61440+e,t[61440+e]=r[240][e]);for(r[241]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8e5b\\u8e5a\\u8e61\\u8e5d\\u8e69\\u8e54\\u8f46\\u8f47\\u8f48\\u8f4b\\u9128\\u913a\\u913b\\u913e\\u91a8\\u91a5\\u91a7\\u91af\\u91aa\\u93b5\\u938c\\u9392\\u93b7\\u939b\\u939d\\u9389\\u93a7\\u938e\\u93aa\\u939e\\u93a6\\u9395\\u9388\\u9399\\u939f\\u938d\\u93b1\\u9391\\u93b2\\u93a4\\u93a8\\u93b4\\u93a3\\u93a5\\u95d2\\u95d3\\u95d1\\u96b3\\u96d7\\u96da\\u5dc2\\u96df\\u96d8\\u96dd\\u9723\\u9722\\u9725\\u97ac\\u97ae\\u97a8\\u97ab\\u97a4\\u97aa\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u97a2\\u97a5\\u97d7\\u97d9\\u97d6\\u97d8\\u97fa\\u9850\\u9851\\u9852\\u98b8\\u9941\\u993c\\u993a\\u9a0f\\u9a0b\\u9a09\\u9a0d\\u9a04\\u9a11\\u9a0a\\u9a05\\u9a07\\u9a06\\u9ac0\\u9adc\\u9b08\\u9b04\\u9b05\\u9b29\\u9b35\\u9b4a\\u9b4c\\u9b4b\\u9bc7\\u9bc6\\u9bc3\\u9bbf\\u9bc1\\u9bb5\\u9bb8\\u9bd3\\u9bb6\\u9bc4\\u9bb9\\u9bbd\\u9d5c\\u9d53\\u9d4f\\u9d4a\\u9d5b\\u9d4b\\u9d59\\u9d56\\u9d4c\\u9d57\\u9d52\\u9d54\\u9d5f\\u9d58\\u9d5a\\u9e8e\\u9e8c\\u9edf\\u9f01\\u9f00\\u9f16\\u9f25\\u9f2b\\u9f2a\\u9f29\\u9f28\\u9f4c\\u9f55\\u5134\\u5135\\u5296\\u52f7\\u53b4\\u56ab\\u56ad\\u56a6\\u56a7\\u56aa\\u56ac\\u58da\\u58dd\\u58db\\u5912\\u5b3d\\u5b3e\\u5b3f\\u5dc3\\u5e70\\ufffd\".split(\"\"),e=0;e!=r[241].length;++e)65533!==r[241][e].charCodeAt(0)&&(n[r[241][e]]=61696+e,t[61696+e]=r[241][e]);for(r[242]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5fbf\\u61fb\\u6507\\u6510\\u650d\\u6509\\u650c\\u650e\\u6584\\u65de\\u65dd\\u66de\\u6ae7\\u6ae0\\u6acc\\u6ad1\\u6ad9\\u6acb\\u6adf\\u6adc\\u6ad0\\u6aeb\\u6acf\\u6acd\\u6ade\\u6b60\\u6bb0\\u6c0c\\u7019\\u7027\\u7020\\u7016\\u702b\\u7021\\u7022\\u7023\\u7029\\u7017\\u7024\\u701c\\u702a\\u720c\\u720a\\u7207\\u7202\\u7205\\u72a5\\u72a6\\u72a4\\u72a3\\u72a1\\u74cb\\u74c5\\u74b7\\u74c3\\u7516\\u7660\\u77c9\\u77ca\\u77c4\\u77f1\\u791d\\u791b\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7921\\u791c\\u7917\\u791e\\u79b0\\u7a67\\u7a68\\u7c33\\u7c3c\\u7c39\\u7c2c\\u7c3b\\u7cec\\u7cea\\u7e76\\u7e75\\u7e78\\u7e70\\u7e77\\u7e6f\\u7e7a\\u7e72\\u7e74\\u7e68\\u7f4b\\u7f4a\\u7f83\\u7f86\\u7fb7\\u7ffd\\u7ffe\\u8078\\u81d7\\u81d5\\u8264\\u8261\\u8263\\u85eb\\u85f1\\u85ed\\u85d9\\u85e1\\u85e8\\u85da\\u85d7\\u85ec\\u85f2\\u85f8\\u85d8\\u85df\\u85e3\\u85dc\\u85d1\\u85f0\\u85e6\\u85ef\\u85de\\u85e2\\u8800\\u87fa\\u8803\\u87f6\\u87f7\\u8809\\u880c\\u880b\\u8806\\u87fc\\u8808\\u87ff\\u880a\\u8802\\u8962\\u895a\\u895b\\u8957\\u8961\\u895c\\u8958\\u895d\\u8959\\u8988\\u89b7\\u89b6\\u89f6\\u8b50\\u8b48\\u8b4a\\u8b40\\u8b53\\u8b56\\u8b54\\u8b4b\\u8b55\\ufffd\".split(\"\"),e=0;e!=r[242].length;++e)65533!==r[242][e].charCodeAt(0)&&(n[r[242][e]]=61952+e,t[61952+e]=r[242][e]);for(r[243]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8b51\\u8b42\\u8b52\\u8b57\\u8c43\\u8c77\\u8c76\\u8c9a\\u8d06\\u8d07\\u8d09\\u8dac\\u8daa\\u8dad\\u8dab\\u8e6d\\u8e78\\u8e73\\u8e6a\\u8e6f\\u8e7b\\u8ec2\\u8f52\\u8f51\\u8f4f\\u8f50\\u8f53\\u8fb4\\u9140\\u913f\\u91b0\\u91ad\\u93de\\u93c7\\u93cf\\u93c2\\u93da\\u93d0\\u93f9\\u93ec\\u93cc\\u93d9\\u93a9\\u93e6\\u93ca\\u93d4\\u93ee\\u93e3\\u93d5\\u93c4\\u93ce\\u93c0\\u93d2\\u93e7\\u957d\\u95da\\u95db\\u96e1\\u9729\\u972b\\u972c\\u9728\\u9726\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u97b3\\u97b7\\u97b6\\u97dd\\u97de\\u97df\\u985c\\u9859\\u985d\\u9857\\u98bf\\u98bd\\u98bb\\u98be\\u9948\\u9947\\u9943\\u99a6\\u99a7\\u9a1a\\u9a15\\u9a25\\u9a1d\\u9a24\\u9a1b\\u9a22\\u9a20\\u9a27\\u9a23\\u9a1e\\u9a1c\\u9a14\\u9ac2\\u9b0b\\u9b0a\\u9b0e\\u9b0c\\u9b37\\u9bea\\u9beb\\u9be0\\u9bde\\u9be4\\u9be6\\u9be2\\u9bf0\\u9bd4\\u9bd7\\u9bec\\u9bdc\\u9bd9\\u9be5\\u9bd5\\u9be1\\u9bda\\u9d77\\u9d81\\u9d8a\\u9d84\\u9d88\\u9d71\\u9d80\\u9d78\\u9d86\\u9d8b\\u9d8c\\u9d7d\\u9d6b\\u9d74\\u9d75\\u9d70\\u9d69\\u9d85\\u9d73\\u9d7b\\u9d82\\u9d6f\\u9d79\\u9d7f\\u9d87\\u9d68\\u9e94\\u9e91\\u9ec0\\u9efc\\u9f2d\\u9f40\\u9f41\\u9f4d\\u9f56\\u9f57\\u9f58\\u5337\\u56b2\\ufffd\".split(\"\"),e=0;e!=r[243].length;++e)65533!==r[243][e].charCodeAt(0)&&(n[r[243][e]]=62208+e,t[62208+e]=r[243][e]);for(r[244]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u56b5\\u56b3\\u58e3\\u5b45\\u5dc6\\u5dc7\\u5eee\\u5eef\\u5fc0\\u5fc1\\u61f9\\u6517\\u6516\\u6515\\u6513\\u65df\\u66e8\\u66e3\\u66e4\\u6af3\\u6af0\\u6aea\\u6ae8\\u6af9\\u6af1\\u6aee\\u6aef\\u703c\\u7035\\u702f\\u7037\\u7034\\u7031\\u7042\\u7038\\u703f\\u703a\\u7039\\u7040\\u703b\\u7033\\u7041\\u7213\\u7214\\u72a8\\u737d\\u737c\\u74ba\\u76ab\\u76aa\\u76be\\u76ed\\u77cc\\u77ce\\u77cf\\u77cd\\u77f2\\u7925\\u7923\\u7927\\u7928\\u7924\\u7929\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u79b2\\u7a6e\\u7a6c\\u7a6d\\u7af7\\u7c49\\u7c48\\u7c4a\\u7c47\\u7c45\\u7cee\\u7e7b\\u7e7e\\u7e81\\u7e80\\u7fba\\u7fff\\u8079\\u81db\\u81d9\\u820b\\u8268\\u8269\\u8622\\u85ff\\u8601\\u85fe\\u861b\\u8600\\u85f6\\u8604\\u8609\\u8605\\u860c\\u85fd\\u8819\\u8810\\u8811\\u8817\\u8813\\u8816\\u8963\\u8966\\u89b9\\u89f7\\u8b60\\u8b6a\\u8b5d\\u8b68\\u8b63\\u8b65\\u8b67\\u8b6d\\u8dae\\u8e86\\u8e88\\u8e84\\u8f59\\u8f56\\u8f57\\u8f55\\u8f58\\u8f5a\\u908d\\u9143\\u9141\\u91b7\\u91b5\\u91b2\\u91b3\\u940b\\u9413\\u93fb\\u9420\\u940f\\u9414\\u93fe\\u9415\\u9410\\u9428\\u9419\\u940d\\u93f5\\u9400\\u93f7\\u9407\\u940e\\u9416\\u9412\\u93fa\\u9409\\u93f8\\u940a\\u93ff\\ufffd\".split(\"\"),e=0;e!=r[244].length;++e)65533!==r[244][e].charCodeAt(0)&&(n[r[244][e]]=62464+e,t[62464+e]=r[244][e]);for(r[245]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u93fc\\u940c\\u93f6\\u9411\\u9406\\u95de\\u95e0\\u95df\\u972e\\u972f\\u97b9\\u97bb\\u97fd\\u97fe\\u9860\\u9862\\u9863\\u985f\\u98c1\\u98c2\\u9950\\u994e\\u9959\\u994c\\u994b\\u9953\\u9a32\\u9a34\\u9a31\\u9a2c\\u9a2a\\u9a36\\u9a29\\u9a2e\\u9a38\\u9a2d\\u9ac7\\u9aca\\u9ac6\\u9b10\\u9b12\\u9b11\\u9c0b\\u9c08\\u9bf7\\u9c05\\u9c12\\u9bf8\\u9c40\\u9c07\\u9c0e\\u9c06\\u9c17\\u9c14\\u9c09\\u9d9f\\u9d99\\u9da4\\u9d9d\\u9d92\\u9d98\\u9d90\\u9d9b\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9da0\\u9d94\\u9d9c\\u9daa\\u9d97\\u9da1\\u9d9a\\u9da2\\u9da8\\u9d9e\\u9da3\\u9dbf\\u9da9\\u9d96\\u9da6\\u9da7\\u9e99\\u9e9b\\u9e9a\\u9ee5\\u9ee4\\u9ee7\\u9ee6\\u9f30\\u9f2e\\u9f5b\\u9f60\\u9f5e\\u9f5d\\u9f59\\u9f91\\u513a\\u5139\\u5298\\u5297\\u56c3\\u56bd\\u56be\\u5b48\\u5b47\\u5dcb\\u5dcf\\u5ef1\\u61fd\\u651b\\u6b02\\u6afc\\u6b03\\u6af8\\u6b00\\u7043\\u7044\\u704a\\u7048\\u7049\\u7045\\u7046\\u721d\\u721a\\u7219\\u737e\\u7517\\u766a\\u77d0\\u792d\\u7931\\u792f\\u7c54\\u7c53\\u7cf2\\u7e8a\\u7e87\\u7e88\\u7e8b\\u7e86\\u7e8d\\u7f4d\\u7fbb\\u8030\\u81dd\\u8618\\u862a\\u8626\\u861f\\u8623\\u861c\\u8619\\u8627\\u862e\\u8621\\u8620\\u8629\\u861e\\u8625\\ufffd\".split(\"\"),e=0;e!=r[245].length;++e)65533!==r[245][e].charCodeAt(0)&&(n[r[245][e]]=62720+e,t[62720+e]=r[245][e]);for(r[246]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8829\\u881d\\u881b\\u8820\\u8824\\u881c\\u882b\\u884a\\u896d\\u8969\\u896e\\u896b\\u89fa\\u8b79\\u8b78\\u8b45\\u8b7a\\u8b7b\\u8d10\\u8d14\\u8daf\\u8e8e\\u8e8c\\u8f5e\\u8f5b\\u8f5d\\u9146\\u9144\\u9145\\u91b9\\u943f\\u943b\\u9436\\u9429\\u943d\\u943c\\u9430\\u9439\\u942a\\u9437\\u942c\\u9440\\u9431\\u95e5\\u95e4\\u95e3\\u9735\\u973a\\u97bf\\u97e1\\u9864\\u98c9\\u98c6\\u98c0\\u9958\\u9956\\u9a39\\u9a3d\\u9a46\\u9a44\\u9a42\\u9a41\\u9a3a\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9a3f\\u9acd\\u9b15\\u9b17\\u9b18\\u9b16\\u9b3a\\u9b52\\u9c2b\\u9c1d\\u9c1c\\u9c2c\\u9c23\\u9c28\\u9c29\\u9c24\\u9c21\\u9db7\\u9db6\\u9dbc\\u9dc1\\u9dc7\\u9dca\\u9dcf\\u9dbe\\u9dc5\\u9dc3\\u9dbb\\u9db5\\u9dce\\u9db9\\u9dba\\u9dac\\u9dc8\\u9db1\\u9dad\\u9dcc\\u9db3\\u9dcd\\u9db2\\u9e7a\\u9e9c\\u9eeb\\u9eee\\u9eed\\u9f1b\\u9f18\\u9f1a\\u9f31\\u9f4e\\u9f65\\u9f64\\u9f92\\u4eb9\\u56c6\\u56c5\\u56cb\\u5971\\u5b4b\\u5b4c\\u5dd5\\u5dd1\\u5ef2\\u6521\\u6520\\u6526\\u6522\\u6b0b\\u6b08\\u6b09\\u6c0d\\u7055\\u7056\\u7057\\u7052\\u721e\\u721f\\u72a9\\u737f\\u74d8\\u74d5\\u74d9\\u74d7\\u766d\\u76ad\\u7935\\u79b4\\u7a70\\u7a71\\u7c57\\u7c5c\\u7c59\\u7c5b\\u7c5a\\ufffd\".split(\"\"),e=0;e!=r[246].length;++e)65533!==r[246][e].charCodeAt(0)&&(n[r[246][e]]=62976+e,t[62976+e]=r[246][e]);for(r[247]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7cf4\\u7cf1\\u7e91\\u7f4f\\u7f87\\u81de\\u826b\\u8634\\u8635\\u8633\\u862c\\u8632\\u8636\\u882c\\u8828\\u8826\\u882a\\u8825\\u8971\\u89bf\\u89be\\u89fb\\u8b7e\\u8b84\\u8b82\\u8b86\\u8b85\\u8b7f\\u8d15\\u8e95\\u8e94\\u8e9a\\u8e92\\u8e90\\u8e96\\u8e97\\u8f60\\u8f62\\u9147\\u944c\\u9450\\u944a\\u944b\\u944f\\u9447\\u9445\\u9448\\u9449\\u9446\\u973f\\u97e3\\u986a\\u9869\\u98cb\\u9954\\u995b\\u9a4e\\u9a53\\u9a54\\u9a4c\\u9a4f\\u9a48\\u9a4a\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9a49\\u9a52\\u9a50\\u9ad0\\u9b19\\u9b2b\\u9b3b\\u9b56\\u9b55\\u9c46\\u9c48\\u9c3f\\u9c44\\u9c39\\u9c33\\u9c41\\u9c3c\\u9c37\\u9c34\\u9c32\\u9c3d\\u9c36\\u9ddb\\u9dd2\\u9dde\\u9dda\\u9dcb\\u9dd0\\u9ddc\\u9dd1\\u9ddf\\u9de9\\u9dd9\\u9dd8\\u9dd6\\u9df5\\u9dd5\\u9ddd\\u9eb6\\u9ef0\\u9f35\\u9f33\\u9f32\\u9f42\\u9f6b\\u9f95\\u9fa2\\u513d\\u5299\\u58e8\\u58e7\\u5972\\u5b4d\\u5dd8\\u882f\\u5f4f\\u6201\\u6203\\u6204\\u6529\\u6525\\u6596\\u66eb\\u6b11\\u6b12\\u6b0f\\u6bca\\u705b\\u705a\\u7222\\u7382\\u7381\\u7383\\u7670\\u77d4\\u7c67\\u7c66\\u7e95\\u826c\\u863a\\u8640\\u8639\\u863c\\u8631\\u863b\\u863e\\u8830\\u8832\\u882e\\u8833\\u8976\\u8974\\u8973\\u89fe\\ufffd\".split(\"\"),e=0;e!=r[247].length;++e)65533!==r[247][e].charCodeAt(0)&&(n[r[247][e]]=63232+e,t[63232+e]=r[247][e]);for(r[248]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8b8c\\u8b8e\\u8b8b\\u8b88\\u8c45\\u8d19\\u8e98\\u8f64\\u8f63\\u91bc\\u9462\\u9455\\u945d\\u9457\\u945e\\u97c4\\u97c5\\u9800\\u9a56\\u9a59\\u9b1e\\u9b1f\\u9b20\\u9c52\\u9c58\\u9c50\\u9c4a\\u9c4d\\u9c4b\\u9c55\\u9c59\\u9c4c\\u9c4e\\u9dfb\\u9df7\\u9def\\u9de3\\u9deb\\u9df8\\u9de4\\u9df6\\u9de1\\u9dee\\u9de6\\u9df2\\u9df0\\u9de2\\u9dec\\u9df4\\u9df3\\u9de8\\u9ded\\u9ec2\\u9ed0\\u9ef2\\u9ef3\\u9f06\\u9f1c\\u9f38\\u9f37\\u9f36\\u9f43\\u9f4f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9f71\\u9f70\\u9f6e\\u9f6f\\u56d3\\u56cd\\u5b4e\\u5c6d\\u652d\\u66ed\\u66ee\\u6b13\\u705f\\u7061\\u705d\\u7060\\u7223\\u74db\\u74e5\\u77d5\\u7938\\u79b7\\u79b6\\u7c6a\\u7e97\\u7f89\\u826d\\u8643\\u8838\\u8837\\u8835\\u884b\\u8b94\\u8b95\\u8e9e\\u8e9f\\u8ea0\\u8e9d\\u91be\\u91bd\\u91c2\\u946b\\u9468\\u9469\\u96e5\\u9746\\u9743\\u9747\\u97c7\\u97e5\\u9a5e\\u9ad5\\u9b59\\u9c63\\u9c67\\u9c66\\u9c62\\u9c5e\\u9c60\\u9e02\\u9dfe\\u9e07\\u9e03\\u9e06\\u9e05\\u9e00\\u9e01\\u9e09\\u9dff\\u9dfd\\u9e04\\u9ea0\\u9f1e\\u9f46\\u9f74\\u9f75\\u9f76\\u56d4\\u652e\\u65b8\\u6b18\\u6b19\\u6b17\\u6b1a\\u7062\\u7226\\u72aa\\u77d8\\u77d9\\u7939\\u7c69\\u7c6b\\u7cf6\\u7e9a\\ufffd\".split(\"\"),e=0;e!=r[248].length;++e)65533!==r[248][e].charCodeAt(0)&&(n[r[248][e]]=63488+e,t[63488+e]=r[248][e]);for(r[249]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7e98\\u7e9b\\u7e99\\u81e0\\u81e1\\u8646\\u8647\\u8648\\u8979\\u897a\\u897c\\u897b\\u89ff\\u8b98\\u8b99\\u8ea5\\u8ea4\\u8ea3\\u946e\\u946d\\u946f\\u9471\\u9473\\u9749\\u9872\\u995f\\u9c68\\u9c6e\\u9c6d\\u9e0b\\u9e0d\\u9e10\\u9e0f\\u9e12\\u9e11\\u9ea1\\u9ef5\\u9f09\\u9f47\\u9f78\\u9f7b\\u9f7a\\u9f79\\u571e\\u7066\\u7c6f\\u883c\\u8db2\\u8ea6\\u91c3\\u9474\\u9478\\u9476\\u9475\\u9a60\\u9c74\\u9c73\\u9c71\\u9c75\\u9e14\\u9e13\\u9ef6\\u9f0a\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9fa4\\u7068\\u7065\\u7cf7\\u866a\\u883e\\u883d\\u883f\\u8b9e\\u8c9c\\u8ea9\\u8ec9\\u974b\\u9873\\u9874\\u98cc\\u9961\\u99ab\\u9a64\\u9a66\\u9a67\\u9b24\\u9e15\\u9e17\\u9f48\\u6207\\u6b1e\\u7227\\u864c\\u8ea8\\u9482\\u9480\\u9481\\u9a69\\u9a68\\u9b2e\\u9e19\\u7229\\u864b\\u8b9f\\u9483\\u9c79\\u9eb7\\u7675\\u9a6b\\u9c7a\\u9e1d\\u7069\\u706a\\u9ea4\\u9f7e\\u9f49\\u9f98\\u7881\\u92b9\\u88cf\\u58bb\\u6052\\u7ca7\\u5afa\\u2554\\u2566\\u2557\\u2560\\u256c\\u2563\\u255a\\u2569\\u255d\\u2552\\u2564\\u2555\\u255e\\u256a\\u2561\\u2558\\u2567\\u255b\\u2553\\u2565\\u2556\\u255f\\u256b\\u2562\\u2559\\u2568\\u255c\\u2551\\u2550\\u256d\\u256e\\u2570\\u256f\\u2593\\ufffd\".split(\"\"),e=0;e!=r[249].length;++e)65533!==r[249][e].charCodeAt(0)&&(n[r[249][e]]=63744+e,t[63744+e]=r[249][e]);return{enc:n,dec:t}}(),r[1250]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\u20ac\\ufffd\\u201a\\ufffd\\u201e\\u2026\\u2020\\u2021\\ufffd\\u2030\\u0160\\u2039\\u015a\\u0164\\u017d\\u0179\\ufffd\\u2018\\u2019\\u201c\\u201d\\u2022\\u2013\\u2014\\ufffd\\u2122\\u0161\\u203a\\u015b\\u0165\\u017e\\u017a\\xa0\\u02c7\\u02d8\\u0141\\xa4\\u0104\\xa6\\xa7\\xa8\\xa9\\u015e\\xab\\xac\\xad\\xae\\u017b\\xb0\\xb1\\u02db\\u0142\\xb4\\xb5\\xb6\\xb7\\xb8\\u0105\\u015f\\xbb\\u013d\\u02dd\\u013e\\u017c\\u0154\\xc1\\xc2\\u0102\\xc4\\u0139\\u0106\\xc7\\u010c\\xc9\\u0118\\xcb\\u011a\\xcd\\xce\\u010e\\u0110\\u0143\\u0147\\xd3\\xd4\\u0150\\xd6\\xd7\\u0158\\u016e\\xda\\u0170\\xdc\\xdd\\u0162\\xdf\\u0155\\xe1\\xe2\\u0103\\xe4\\u013a\\u0107\\xe7\\u010d\\xe9\\u0119\\xeb\\u011b\\xed\\xee\\u010f\\u0111\\u0144\\u0148\\xf3\\xf4\\u0151\\xf6\\xf7\\u0159\\u016f\\xfa\\u0171\\xfc\\xfd\\u0163\\u02d9\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[1251]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\u0402\\u0403\\u201a\\u0453\\u201e\\u2026\\u2020\\u2021\\u20ac\\u2030\\u0409\\u2039\\u040a\\u040c\\u040b\\u040f\\u0452\\u2018\\u2019\\u201c\\u201d\\u2022\\u2013\\u2014\\ufffd\\u2122\\u0459\\u203a\\u045a\\u045c\\u045b\\u045f\\xa0\\u040e\\u045e\\u0408\\xa4\\u0490\\xa6\\xa7\\u0401\\xa9\\u0404\\xab\\xac\\xad\\xae\\u0407\\xb0\\xb1\\u0406\\u0456\\u0491\\xb5\\xb6\\xb7\\u0451\\u2116\\u0454\\xbb\\u0458\\u0405\\u0455\\u0457\\u0410\\u0411\\u0412\\u0413\\u0414\\u0415\\u0416\\u0417\\u0418\\u0419\\u041a\\u041b\\u041c\\u041d\\u041e\\u041f\\u0420\\u0421\\u0422\\u0423\\u0424\\u0425\\u0426\\u0427\\u0428\\u0429\\u042a\\u042b\\u042c\\u042d\\u042e\\u042f\\u0430\\u0431\\u0432\\u0433\\u0434\\u0435\\u0436\\u0437\\u0438\\u0439\\u043a\\u043b\\u043c\\u043d\\u043e\\u043f\\u0440\\u0441\\u0442\\u0443\\u0444\\u0445\\u0446\\u0447\\u0448\\u0449\\u044a\\u044b\\u044c\\u044d\\u044e\\u044f\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[1252]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\u20ac\\ufffd\\u201a\\u0192\\u201e\\u2026\\u2020\\u2021\\u02c6\\u2030\\u0160\\u2039\\u0152\\ufffd\\u017d\\ufffd\\ufffd\\u2018\\u2019\\u201c\\u201d\\u2022\\u2013\\u2014\\u02dc\\u2122\\u0161\\u203a\\u0153\\ufffd\\u017e\\u0178\\xa0\\xa1\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\xaa\\xab\\xac\\xad\\xae\\xaf\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\xba\\xbb\\xbc\\xbd\\xbe\\xbf\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7\\xc8\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf\\xd0\\xd1\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7\\xd8\\xd9\\xda\\xdb\\xdc\\xdd\\xde\\xdf\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef\\xf0\\xf1\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xfb\\xfc\\xfd\\xfe\\xff\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[1253]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\u20ac\\ufffd\\u201a\\u0192\\u201e\\u2026\\u2020\\u2021\\ufffd\\u2030\\ufffd\\u2039\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u2018\\u2019\\u201c\\u201d\\u2022\\u2013\\u2014\\ufffd\\u2122\\ufffd\\u203a\\ufffd\\ufffd\\ufffd\\ufffd\\xa0\\u0385\\u0386\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\ufffd\\xab\\xac\\xad\\xae\\u2015\\xb0\\xb1\\xb2\\xb3\\u0384\\xb5\\xb6\\xb7\\u0388\\u0389\\u038a\\xbb\\u038c\\xbd\\u038e\\u038f\\u0390\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\ufffd\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\\u03aa\\u03ab\\u03ac\\u03ad\\u03ae\\u03af\\u03b0\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c2\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9\\u03ca\\u03cb\\u03cc\\u03cd\\u03ce\\ufffd\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[1254]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\u20ac\\ufffd\\u201a\\u0192\\u201e\\u2026\\u2020\\u2021\\u02c6\\u2030\\u0160\\u2039\\u0152\\ufffd\\ufffd\\ufffd\\ufffd\\u2018\\u2019\\u201c\\u201d\\u2022\\u2013\\u2014\\u02dc\\u2122\\u0161\\u203a\\u0153\\ufffd\\ufffd\\u0178\\xa0\\xa1\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\xaa\\xab\\xac\\xad\\xae\\xaf\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\xba\\xbb\\xbc\\xbd\\xbe\\xbf\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7\\xc8\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf\\u011e\\xd1\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7\\xd8\\xd9\\xda\\xdb\\xdc\\u0130\\u015e\\xdf\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef\\u011f\\xf1\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xfb\\xfc\\u0131\\u015f\\xff\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[1255]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\u20ac\\ufffd\\u201a\\u0192\\u201e\\u2026\\u2020\\u2021\\u02c6\\u2030\\ufffd\\u2039\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u2018\\u2019\\u201c\\u201d\\u2022\\u2013\\u2014\\u02dc\\u2122\\ufffd\\u203a\\ufffd\\ufffd\\ufffd\\ufffd\\xa0\\xa1\\xa2\\xa3\\u20aa\\xa5\\xa6\\xa7\\xa8\\xa9\\xd7\\xab\\xac\\xad\\xae\\xaf\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\xf7\\xbb\\xbc\\xbd\\xbe\\xbf\\u05b0\\u05b1\\u05b2\\u05b3\\u05b4\\u05b5\\u05b6\\u05b7\\u05b8\\u05b9\\ufffd\\u05bb\\u05bc\\u05bd\\u05be\\u05bf\\u05c0\\u05c1\\u05c2\\u05c3\\u05f0\\u05f1\\u05f2\\u05f3\\u05f4\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u05d0\\u05d1\\u05d2\\u05d3\\u05d4\\u05d5\\u05d6\\u05d7\\u05d8\\u05d9\\u05da\\u05db\\u05dc\\u05dd\\u05de\\u05df\\u05e0\\u05e1\\u05e2\\u05e3\\u05e4\\u05e5\\u05e6\\u05e7\\u05e8\\u05e9\\u05ea\\ufffd\\ufffd\\u200e\\u200f\\ufffd\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[1256]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\u20ac\\u067e\\u201a\\u0192\\u201e\\u2026\\u2020\\u2021\\u02c6\\u2030\\u0679\\u2039\\u0152\\u0686\\u0698\\u0688\\u06af\\u2018\\u2019\\u201c\\u201d\\u2022\\u2013\\u2014\\u06a9\\u2122\\u0691\\u203a\\u0153\\u200c\\u200d\\u06ba\\xa0\\u060c\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\u06be\\xab\\xac\\xad\\xae\\xaf\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\u061b\\xbb\\xbc\\xbd\\xbe\\u061f\\u06c1\\u0621\\u0622\\u0623\\u0624\\u0625\\u0626\\u0627\\u0628\\u0629\\u062a\\u062b\\u062c\\u062d\\u062e\\u062f\\u0630\\u0631\\u0632\\u0633\\u0634\\u0635\\u0636\\xd7\\u0637\\u0638\\u0639\\u063a\\u0640\\u0641\\u0642\\u0643\\xe0\\u0644\\xe2\\u0645\\u0646\\u0647\\u0648\\xe7\\xe8\\xe9\\xea\\xeb\\u0649\\u064a\\xee\\xef\\u064b\\u064c\\u064d\\u064e\\xf4\\u064f\\u0650\\xf7\\u0651\\xf9\\u0652\\xfb\\xfc\\u200e\\u200f\\u06d2\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[1257]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\u20ac\\ufffd\\u201a\\ufffd\\u201e\\u2026\\u2020\\u2021\\ufffd\\u2030\\ufffd\\u2039\\ufffd\\xa8\\u02c7\\xb8\\ufffd\\u2018\\u2019\\u201c\\u201d\\u2022\\u2013\\u2014\\ufffd\\u2122\\ufffd\\u203a\\ufffd\\xaf\\u02db\\ufffd\\xa0\\ufffd\\xa2\\xa3\\xa4\\ufffd\\xa6\\xa7\\xd8\\xa9\\u0156\\xab\\xac\\xad\\xae\\xc6\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xf8\\xb9\\u0157\\xbb\\xbc\\xbd\\xbe\\xe6\\u0104\\u012e\\u0100\\u0106\\xc4\\xc5\\u0118\\u0112\\u010c\\xc9\\u0179\\u0116\\u0122\\u0136\\u012a\\u013b\\u0160\\u0143\\u0145\\xd3\\u014c\\xd5\\xd6\\xd7\\u0172\\u0141\\u015a\\u016a\\xdc\\u017b\\u017d\\xdf\\u0105\\u012f\\u0101\\u0107\\xe4\\xe5\\u0119\\u0113\\u010d\\xe9\\u017a\\u0117\\u0123\\u0137\\u012b\\u013c\\u0161\\u0144\\u0146\\xf3\\u014d\\xf5\\xf6\\xf7\\u0173\\u0142\\u015b\\u016b\\xfc\\u017c\\u017e\\u02d9\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[1258]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\u20ac\\ufffd\\u201a\\u0192\\u201e\\u2026\\u2020\\u2021\\u02c6\\u2030\\ufffd\\u2039\\u0152\\ufffd\\ufffd\\ufffd\\ufffd\\u2018\\u2019\\u201c\\u201d\\u2022\\u2013\\u2014\\u02dc\\u2122\\ufffd\\u203a\\u0153\\ufffd\\ufffd\\u0178\\xa0\\xa1\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\xaa\\xab\\xac\\xad\\xae\\xaf\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\xba\\xbb\\xbc\\xbd\\xbe\\xbf\\xc0\\xc1\\xc2\\u0102\\xc4\\xc5\\xc6\\xc7\\xc8\\xc9\\xca\\xcb\\u0300\\xcd\\xce\\xcf\\u0110\\xd1\\u0309\\xd3\\xd4\\u01a0\\xd6\\xd7\\xd8\\xd9\\xda\\xdb\\xdc\\u01af\\u0303\\xdf\\xe0\\xe1\\xe2\\u0103\\xe4\\xe5\\xe6\\xe7\\xe8\\xe9\\xea\\xeb\\u0301\\xed\\xee\\xef\\u0111\\xf1\\u0323\\xf3\\xf4\\u01a1\\xf6\\xf7\\xf8\\xf9\\xfa\\xfb\\xfc\\u01b0\\u20ab\\xff\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[1e4]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\xc4\\xc5\\xc7\\xc9\\xd1\\xd6\\xdc\\xe1\\xe0\\xe2\\xe4\\xe3\\xe5\\xe7\\xe9\\xe8\\xea\\xeb\\xed\\xec\\xee\\xef\\xf1\\xf3\\xf2\\xf4\\xf6\\xf5\\xfa\\xf9\\xfb\\xfc\\u2020\\xb0\\xa2\\xa3\\xa7\\u2022\\xb6\\xdf\\xae\\xa9\\u2122\\xb4\\xa8\\u2260\\xc6\\xd8\\u221e\\xb1\\u2264\\u2265\\xa5\\xb5\\u2202\\u2211\\u220f\\u03c0\\u222b\\xaa\\xba\\u2126\\xe6\\xf8\\xbf\\xa1\\xac\\u221a\\u0192\\u2248\\u2206\\xab\\xbb\\u2026\\xa0\\xc0\\xc3\\xd5\\u0152\\u0153\\u2013\\u2014\\u201c\\u201d\\u2018\\u2019\\xf7\\u25ca\\xff\\u0178\\u2044\\xa4\\u2039\\u203a\\ufb01\\ufb02\\u2021\\xb7\\u201a\\u201e\\u2030\\xc2\\xca\\xc1\\xcb\\xc8\\xcd\\xce\\xcf\\xcc\\xd3\\xd4\\ufffd\\xd2\\xda\\xdb\\xd9\\u0131\\u02c6\\u02dc\\xaf\\u02d8\\u02d9\\u02da\\xb8\\u02dd\\u02db\\u02c7\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[10006]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\xc4\\xb9\\xb2\\xc9\\xb3\\xd6\\xdc\\u0385\\xe0\\xe2\\xe4\\u0384\\xa8\\xe7\\xe9\\xe8\\xea\\xeb\\xa3\\u2122\\xee\\xef\\u2022\\xbd\\u2030\\xf4\\xf6\\xa6\\xad\\xf9\\xfb\\xfc\\u2020\\u0393\\u0394\\u0398\\u039b\\u039e\\u03a0\\xdf\\xae\\xa9\\u03a3\\u03aa\\xa7\\u2260\\xb0\\u0387\\u0391\\xb1\\u2264\\u2265\\xa5\\u0392\\u0395\\u0396\\u0397\\u0399\\u039a\\u039c\\u03a6\\u03ab\\u03a8\\u03a9\\u03ac\\u039d\\xac\\u039f\\u03a1\\u2248\\u03a4\\xab\\xbb\\u2026\\xa0\\u03a5\\u03a7\\u0386\\u0388\\u0153\\u2013\\u2015\\u201c\\u201d\\u2018\\u2019\\xf7\\u0389\\u038a\\u038c\\u038e\\u03ad\\u03ae\\u03af\\u03cc\\u038f\\u03cd\\u03b1\\u03b2\\u03c8\\u03b4\\u03b5\\u03c6\\u03b3\\u03b7\\u03b9\\u03be\\u03ba\\u03bb\\u03bc\\u03bd\\u03bf\\u03c0\\u03ce\\u03c1\\u03c3\\u03c4\\u03b8\\u03c9\\u03c2\\u03c7\\u03c5\\u03b6\\u03ca\\u03cb\\u0390\\u03b0\\ufffd\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[10007]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\u0410\\u0411\\u0412\\u0413\\u0414\\u0415\\u0416\\u0417\\u0418\\u0419\\u041a\\u041b\\u041c\\u041d\\u041e\\u041f\\u0420\\u0421\\u0422\\u0423\\u0424\\u0425\\u0426\\u0427\\u0428\\u0429\\u042a\\u042b\\u042c\\u042d\\u042e\\u042f\\u2020\\xb0\\xa2\\xa3\\xa7\\u2022\\xb6\\u0406\\xae\\xa9\\u2122\\u0402\\u0452\\u2260\\u0403\\u0453\\u221e\\xb1\\u2264\\u2265\\u0456\\xb5\\u2202\\u0408\\u0404\\u0454\\u0407\\u0457\\u0409\\u0459\\u040a\\u045a\\u0458\\u0405\\xac\\u221a\\u0192\\u2248\\u2206\\xab\\xbb\\u2026\\xa0\\u040b\\u045b\\u040c\\u045c\\u0455\\u2013\\u2014\\u201c\\u201d\\u2018\\u2019\\xf7\\u201e\\u040e\\u045e\\u040f\\u045f\\u2116\\u0401\\u0451\\u044f\\u0430\\u0431\\u0432\\u0433\\u0434\\u0435\\u0436\\u0437\\u0438\\u0439\\u043a\\u043b\\u043c\\u043d\\u043e\\u043f\\u0440\\u0441\\u0442\\u0443\\u0444\\u0445\\u0446\\u0447\\u0448\\u0449\\u044a\\u044b\\u044c\\u044d\\u044e\\xa4\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[10008]=function(){var e,t=[],n={},r=[];for(r[0]=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\x80\\uf8d8\\uf8d9\\uf8da\\uf8db\\uf8dc\\uf8dd\\uf8de\\uf8df\\uf8e0\\uf8e1\\uf8e2\\uf8e3\\uf8e4\\uf8e5\\uf8e6\\uf8e7\\uf8e8\\uf8e9\\uf8ea\\uf8eb\\uf8ec\\uf8ed\\uf8ee\\uf8ef\\uf8f0\\uf8f1\\uf8f2\\uf8f3\\uf8f4\\uf8f5\\uf8f6\\uf8f7\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uf8f8\\uf8f9\\uf8fa\\uf8fb\\uf8fc\\uf8fd\\uf8fe\\uf8ff\".split(\"\"),e=0;e!=r[0].length;++e)65533!==r[0][e].charCodeAt(0)&&(n[r[0][e]]=0+e,t[0+e]=r[0][e]);for(r[161]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u3000\\u3001\\u3002\\u30fb\\u02c9\\u02c7\\xa8\\u3003\\u3005\\u2015\\uff5e\\ufffd\\u2026\\u2018\\u2019\\u201c\\u201d\\u3014\\u3015\\u3008\\u3009\\u300a\\u300b\\u300c\\u300d\\u300e\\u300f\\u3016\\u3017\\u3010\\u3011\\xb1\\xd7\\xf7\\u2236\\u2227\\u2228\\u2211\\u220f\\u222a\\u2229\\u2208\\u2237\\u221a\\u22a5\\u2225\\u2220\\u2312\\u2299\\u222b\\u222e\\u2261\\u224c\\u2248\\u223d\\u221d\\u2260\\u226e\\u226f\\u2264\\u2265\\u221e\\u2235\\u2234\\u2642\\u2640\\xb0\\u2032\\u2033\\u2103\\uff04\\xa4\\uffe0\\uffe1\\u2030\\xa7\\u2116\\u2606\\u2605\\u25cb\\u25cf\\u25ce\\u25c7\\u25c6\\u25a1\\u25a0\\u25b3\\u25b2\\u203b\\u2192\\u2190\\u2191\\u2193\\u3013\\ufffd\".split(\"\"),e=0;e!=r[161].length;++e)65533!==r[161][e].charCodeAt(0)&&(n[r[161][e]]=41216+e,t[41216+e]=r[161][e]);for(r[162]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u2488\\u2489\\u248a\\u248b\\u248c\\u248d\\u248e\\u248f\\u2490\\u2491\\u2492\\u2493\\u2494\\u2495\\u2496\\u2497\\u2498\\u2499\\u249a\\u249b\\u2474\\u2475\\u2476\\u2477\\u2478\\u2479\\u247a\\u247b\\u247c\\u247d\\u247e\\u247f\\u2480\\u2481\\u2482\\u2483\\u2484\\u2485\\u2486\\u2487\\u2460\\u2461\\u2462\\u2463\\u2464\\u2465\\u2466\\u2467\\u2468\\u2469\\ufffd\\ufffd\\u3220\\u3221\\u3222\\u3223\\u3224\\u3225\\u3226\\u3227\\u3228\\u3229\\ufffd\\ufffd\\u2160\\u2161\\u2162\\u2163\\u2164\\u2165\\u2166\\u2167\\u2168\\u2169\\u216a\\u216b\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[162].length;++e)65533!==r[162][e].charCodeAt(0)&&(n[r[162][e]]=41472+e,t[41472+e]=r[162][e]);for(r[163]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\uff01\\uff02\\uff03\\uffe5\\uff05\\uff06\\uff07\\uff08\\uff09\\uff0a\\uff0b\\uff0c\\uff0d\\uff0e\\uff0f\\uff10\\uff11\\uff12\\uff13\\uff14\\uff15\\uff16\\uff17\\uff18\\uff19\\uff1a\\uff1b\\uff1c\\uff1d\\uff1e\\uff1f\\uff20\\uff21\\uff22\\uff23\\uff24\\uff25\\uff26\\uff27\\uff28\\uff29\\uff2a\\uff2b\\uff2c\\uff2d\\uff2e\\uff2f\\uff30\\uff31\\uff32\\uff33\\uff34\\uff35\\uff36\\uff37\\uff38\\uff39\\uff3a\\uff3b\\uff3c\\uff3d\\uff3e\\uff3f\\uff40\\uff41\\uff42\\uff43\\uff44\\uff45\\uff46\\uff47\\uff48\\uff49\\uff4a\\uff4b\\uff4c\\uff4d\\uff4e\\uff4f\\uff50\\uff51\\uff52\\uff53\\uff54\\uff55\\uff56\\uff57\\uff58\\uff59\\uff5a\\uff5b\\uff5c\\uff5d\\uffe3\\ufffd\".split(\"\"),e=0;e!=r[163].length;++e)65533!==r[163][e].charCodeAt(0)&&(n[r[163][e]]=41728+e,t[41728+e]=r[163][e]);for(r[164]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u3041\\u3042\\u3043\\u3044\\u3045\\u3046\\u3047\\u3048\\u3049\\u304a\\u304b\\u304c\\u304d\\u304e\\u304f\\u3050\\u3051\\u3052\\u3053\\u3054\\u3055\\u3056\\u3057\\u3058\\u3059\\u305a\\u305b\\u305c\\u305d\\u305e\\u305f\\u3060\\u3061\\u3062\\u3063\\u3064\\u3065\\u3066\\u3067\\u3068\\u3069\\u306a\\u306b\\u306c\\u306d\\u306e\\u306f\\u3070\\u3071\\u3072\\u3073\\u3074\\u3075\\u3076\\u3077\\u3078\\u3079\\u307a\\u307b\\u307c\\u307d\\u307e\\u307f\\u3080\\u3081\\u3082\\u3083\\u3084\\u3085\\u3086\\u3087\\u3088\\u3089\\u308a\\u308b\\u308c\\u308d\\u308e\\u308f\\u3090\\u3091\\u3092\\u3093\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[164].length;++e)65533!==r[164][e].charCodeAt(0)&&(n[r[164][e]]=41984+e,t[41984+e]=r[164][e]);for(r[165]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u30a1\\u30a2\\u30a3\\u30a4\\u30a5\\u30a6\\u30a7\\u30a8\\u30a9\\u30aa\\u30ab\\u30ac\\u30ad\\u30ae\\u30af\\u30b0\\u30b1\\u30b2\\u30b3\\u30b4\\u30b5\\u30b6\\u30b7\\u30b8\\u30b9\\u30ba\\u30bb\\u30bc\\u30bd\\u30be\\u30bf\\u30c0\\u30c1\\u30c2\\u30c3\\u30c4\\u30c5\\u30c6\\u30c7\\u30c8\\u30c9\\u30ca\\u30cb\\u30cc\\u30cd\\u30ce\\u30cf\\u30d0\\u30d1\\u30d2\\u30d3\\u30d4\\u30d5\\u30d6\\u30d7\\u30d8\\u30d9\\u30da\\u30db\\u30dc\\u30dd\\u30de\\u30df\\u30e0\\u30e1\\u30e2\\u30e3\\u30e4\\u30e5\\u30e6\\u30e7\\u30e8\\u30e9\\u30ea\\u30eb\\u30ec\\u30ed\\u30ee\\u30ef\\u30f0\\u30f1\\u30f2\\u30f3\\u30f4\\u30f5\\u30f6\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[165].length;++e)65533!==r[165][e].charCodeAt(0)&&(n[r[165][e]]=42240+e,t[42240+e]=r[165][e]);for(r[166]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[166].length;++e)65533!==r[166][e].charCodeAt(0)&&(n[r[166][e]]=42496+e,t[42496+e]=r[166][e]);for(r[167]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u0410\\u0411\\u0412\\u0413\\u0414\\u0415\\u0401\\u0416\\u0417\\u0418\\u0419\\u041a\\u041b\\u041c\\u041d\\u041e\\u041f\\u0420\\u0421\\u0422\\u0423\\u0424\\u0425\\u0426\\u0427\\u0428\\u0429\\u042a\\u042b\\u042c\\u042d\\u042e\\u042f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u0430\\u0431\\u0432\\u0433\\u0434\\u0435\\u0451\\u0436\\u0437\\u0438\\u0439\\u043a\\u043b\\u043c\\u043d\\u043e\\u043f\\u0440\\u0441\\u0442\\u0443\\u0444\\u0445\\u0446\\u0447\\u0448\\u0449\\u044a\\u044b\\u044c\\u044d\\u044e\\u044f\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[167].length;++e)65533!==r[167][e].charCodeAt(0)&&(n[r[167][e]]=42752+e,t[42752+e]=r[167][e]);for(r[168]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u0101\\xe1\\u01ce\\xe0\\u0113\\xe9\\u011b\\xe8\\u012b\\xed\\u01d0\\xec\\u014d\\xf3\\u01d2\\xf2\\u016b\\xfa\\u01d4\\xf9\\u01d6\\u01d8\\u01da\\u01dc\\xfc\\xea\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u3105\\u3106\\u3107\\u3108\\u3109\\u310a\\u310b\\u310c\\u310d\\u310e\\u310f\\u3110\\u3111\\u3112\\u3113\\u3114\\u3115\\u3116\\u3117\\u3118\\u3119\\u311a\\u311b\\u311c\\u311d\\u311e\\u311f\\u3120\\u3121\\u3122\\u3123\\u3124\\u3125\\u3126\\u3127\\u3128\\u3129\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[168].length;++e)65533!==r[168][e].charCodeAt(0)&&(n[r[168][e]]=43008+e,t[43008+e]=r[168][e]);for(r[169]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u2500\\u2501\\u2502\\u2503\\u2504\\u2505\\u2506\\u2507\\u2508\\u2509\\u250a\\u250b\\u250c\\u250d\\u250e\\u250f\\u2510\\u2511\\u2512\\u2513\\u2514\\u2515\\u2516\\u2517\\u2518\\u2519\\u251a\\u251b\\u251c\\u251d\\u251e\\u251f\\u2520\\u2521\\u2522\\u2523\\u2524\\u2525\\u2526\\u2527\\u2528\\u2529\\u252a\\u252b\\u252c\\u252d\\u252e\\u252f\\u2530\\u2531\\u2532\\u2533\\u2534\\u2535\\u2536\\u2537\\u2538\\u2539\\u253a\\u253b\\u253c\\u253d\\u253e\\u253f\\u2540\\u2541\\u2542\\u2543\\u2544\\u2545\\u2546\\u2547\\u2548\\u2549\\u254a\\u254b\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[169].length;++e)65533!==r[169][e].charCodeAt(0)&&(n[r[169][e]]=43264+e,t[43264+e]=r[169][e]);for(r[176]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u554a\\u963f\\u57c3\\u6328\\u54ce\\u5509\\u54c0\\u7691\\u764c\\u853c\\u77ee\\u827e\\u788d\\u7231\\u9698\\u978d\\u6c28\\u5b89\\u4ffa\\u6309\\u6697\\u5cb8\\u80fa\\u6848\\u80ae\\u6602\\u76ce\\u51f9\\u6556\\u71ac\\u7ff1\\u8884\\u50b2\\u5965\\u61ca\\u6fb3\\u82ad\\u634c\\u6252\\u53ed\\u5427\\u7b06\\u516b\\u75a4\\u5df4\\u62d4\\u8dcb\\u9776\\u628a\\u8019\\u575d\\u9738\\u7f62\\u7238\\u767d\\u67cf\\u767e\\u6446\\u4f70\\u8d25\\u62dc\\u7a17\\u6591\\u73ed\\u642c\\u6273\\u822c\\u9881\\u677f\\u7248\\u626e\\u62cc\\u4f34\\u74e3\\u534a\\u529e\\u7eca\\u90a6\\u5e2e\\u6886\\u699c\\u8180\\u7ed1\\u68d2\\u78c5\\u868c\\u9551\\u508d\\u8c24\\u82de\\u80de\\u5305\\u8912\\u5265\\ufffd\".split(\"\"),e=0;e!=r[176].length;++e)65533!==r[176][e].charCodeAt(0)&&(n[r[176][e]]=45056+e,t[45056+e]=r[176][e]);for(r[177]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8584\\u96f9\\u4fdd\\u5821\\u9971\\u5b9d\\u62b1\\u62a5\\u66b4\\u8c79\\u9c8d\\u7206\\u676f\\u7891\\u60b2\\u5351\\u5317\\u8f88\\u80cc\\u8d1d\\u94a1\\u500d\\u72c8\\u5907\\u60eb\\u7119\\u88ab\\u5954\\u82ef\\u672c\\u7b28\\u5d29\\u7ef7\\u752d\\u6cf5\\u8e66\\u8ff8\\u903c\\u9f3b\\u6bd4\\u9119\\u7b14\\u5f7c\\u78a7\\u84d6\\u853d\\u6bd5\\u6bd9\\u6bd6\\u5e01\\u5e87\\u75f9\\u95ed\\u655d\\u5f0a\\u5fc5\\u8f9f\\u58c1\\u81c2\\u907f\\u965b\\u97ad\\u8fb9\\u7f16\\u8d2c\\u6241\\u4fbf\\u53d8\\u535e\\u8fa8\\u8fa9\\u8fab\\u904d\\u6807\\u5f6a\\u8198\\u8868\\u9cd6\\u618b\\u522b\\u762a\\u5f6c\\u658c\\u6fd2\\u6ee8\\u5bbe\\u6448\\u5175\\u51b0\\u67c4\\u4e19\\u79c9\\u997c\\u70b3\\ufffd\".split(\"\"),e=0;e!=r[177].length;++e)65533!==r[177][e].charCodeAt(0)&&(n[r[177][e]]=45312+e,t[45312+e]=r[177][e]);for(r[178]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u75c5\\u5e76\\u73bb\\u83e0\\u64ad\\u62e8\\u94b5\\u6ce2\\u535a\\u52c3\\u640f\\u94c2\\u7b94\\u4f2f\\u5e1b\\u8236\\u8116\\u818a\\u6e24\\u6cca\\u9a73\\u6355\\u535c\\u54fa\\u8865\\u57e0\\u4e0d\\u5e03\\u6b65\\u7c3f\\u90e8\\u6016\\u64e6\\u731c\\u88c1\\u6750\\u624d\\u8d22\\u776c\\u8e29\\u91c7\\u5f69\\u83dc\\u8521\\u9910\\u53c2\\u8695\\u6b8b\\u60ed\\u60e8\\u707f\\u82cd\\u8231\\u4ed3\\u6ca7\\u85cf\\u64cd\\u7cd9\\u69fd\\u66f9\\u8349\\u5395\\u7b56\\u4fa7\\u518c\\u6d4b\\u5c42\\u8e6d\\u63d2\\u53c9\\u832c\\u8336\\u67e5\\u78b4\\u643d\\u5bdf\\u5c94\\u5dee\\u8be7\\u62c6\\u67f4\\u8c7a\\u6400\\u63ba\\u8749\\u998b\\u8c17\\u7f20\\u94f2\\u4ea7\\u9610\\u98a4\\u660c\\u7316\\ufffd\".split(\"\"),e=0;e!=r[178].length;++e)65533!==r[178][e].charCodeAt(0)&&(n[r[178][e]]=45568+e,t[45568+e]=r[178][e]);for(r[179]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u573a\\u5c1d\\u5e38\\u957f\\u507f\\u80a0\\u5382\\u655e\\u7545\\u5531\\u5021\\u8d85\\u6284\\u949e\\u671d\\u5632\\u6f6e\\u5de2\\u5435\\u7092\\u8f66\\u626f\\u64a4\\u63a3\\u5f7b\\u6f88\\u90f4\\u81e3\\u8fb0\\u5c18\\u6668\\u5ff1\\u6c89\\u9648\\u8d81\\u886c\\u6491\\u79f0\\u57ce\\u6a59\\u6210\\u5448\\u4e58\\u7a0b\\u60e9\\u6f84\\u8bda\\u627f\\u901e\\u9a8b\\u79e4\\u5403\\u75f4\\u6301\\u5319\\u6c60\\u8fdf\\u5f1b\\u9a70\\u803b\\u9f7f\\u4f88\\u5c3a\\u8d64\\u7fc5\\u65a5\\u70bd\\u5145\\u51b2\\u866b\\u5d07\\u5ba0\\u62bd\\u916c\\u7574\\u8e0c\\u7a20\\u6101\\u7b79\\u4ec7\\u7ef8\\u7785\\u4e11\\u81ed\\u521d\\u51fa\\u6a71\\u53a8\\u8e87\\u9504\\u96cf\\u6ec1\\u9664\\u695a\\ufffd\".split(\"\"),e=0;e!=r[179].length;++e)65533!==r[179][e].charCodeAt(0)&&(n[r[179][e]]=45824+e,t[45824+e]=r[179][e]);for(r[180]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7840\\u50a8\\u77d7\\u6410\\u89e6\\u5904\\u63e3\\u5ddd\\u7a7f\\u693d\\u4f20\\u8239\\u5598\\u4e32\\u75ae\\u7a97\\u5e62\\u5e8a\\u95ef\\u521b\\u5439\\u708a\\u6376\\u9524\\u5782\\u6625\\u693f\\u9187\\u5507\\u6df3\\u7eaf\\u8822\\u6233\\u7ef0\\u75b5\\u8328\\u78c1\\u96cc\\u8f9e\\u6148\\u74f7\\u8bcd\\u6b64\\u523a\\u8d50\\u6b21\\u806a\\u8471\\u56f1\\u5306\\u4ece\\u4e1b\\u51d1\\u7c97\\u918b\\u7c07\\u4fc3\\u8e7f\\u7be1\\u7a9c\\u6467\\u5d14\\u50ac\\u8106\\u7601\\u7cb9\\u6dec\\u7fe0\\u6751\\u5b58\\u5bf8\\u78cb\\u64ae\\u6413\\u63aa\\u632b\\u9519\\u642d\\u8fbe\\u7b54\\u7629\\u6253\\u5927\\u5446\\u6b79\\u50a3\\u6234\\u5e26\\u6b86\\u4ee3\\u8d37\\u888b\\u5f85\\u902e\\ufffd\".split(\"\"),e=0;e!=r[180].length;++e)65533!==r[180][e].charCodeAt(0)&&(n[r[180][e]]=46080+e,t[46080+e]=r[180][e]);for(r[181]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6020\\u803d\\u62c5\\u4e39\\u5355\\u90f8\\u63b8\\u80c6\\u65e6\\u6c2e\\u4f46\\u60ee\\u6de1\\u8bde\\u5f39\\u86cb\\u5f53\\u6321\\u515a\\u8361\\u6863\\u5200\\u6363\\u8e48\\u5012\\u5c9b\\u7977\\u5bfc\\u5230\\u7a3b\\u60bc\\u9053\\u76d7\\u5fb7\\u5f97\\u7684\\u8e6c\\u706f\\u767b\\u7b49\\u77aa\\u51f3\\u9093\\u5824\\u4f4e\\u6ef4\\u8fea\\u654c\\u7b1b\\u72c4\\u6da4\\u7fdf\\u5ae1\\u62b5\\u5e95\\u5730\\u8482\\u7b2c\\u5e1d\\u5f1f\\u9012\\u7f14\\u98a0\\u6382\\u6ec7\\u7898\\u70b9\\u5178\\u975b\\u57ab\\u7535\\u4f43\\u7538\\u5e97\\u60e6\\u5960\\u6dc0\\u6bbf\\u7889\\u53fc\\u96d5\\u51cb\\u5201\\u6389\\u540a\\u9493\\u8c03\\u8dcc\\u7239\\u789f\\u8776\\u8fed\\u8c0d\\u53e0\\ufffd\".split(\"\"),e=0;e!=r[181].length;++e)65533!==r[181][e].charCodeAt(0)&&(n[r[181][e]]=46336+e,t[46336+e]=r[181][e]);for(r[182]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u4e01\\u76ef\\u53ee\\u9489\\u9876\\u9f0e\\u952d\\u5b9a\\u8ba2\\u4e22\\u4e1c\\u51ac\\u8463\\u61c2\\u52a8\\u680b\\u4f97\\u606b\\u51bb\\u6d1e\\u515c\\u6296\\u6597\\u9661\\u8c46\\u9017\\u75d8\\u90fd\\u7763\\u6bd2\\u728a\\u72ec\\u8bfb\\u5835\\u7779\\u8d4c\\u675c\\u9540\\u809a\\u5ea6\\u6e21\\u5992\\u7aef\\u77ed\\u953b\\u6bb5\\u65ad\\u7f0e\\u5806\\u5151\\u961f\\u5bf9\\u58a9\\u5428\\u8e72\\u6566\\u987f\\u56e4\\u949d\\u76fe\\u9041\\u6387\\u54c6\\u591a\\u593a\\u579b\\u8eb2\\u6735\\u8dfa\\u8235\\u5241\\u60f0\\u5815\\u86fe\\u5ce8\\u9e45\\u4fc4\\u989d\\u8bb9\\u5a25\\u6076\\u5384\\u627c\\u904f\\u9102\\u997f\\u6069\\u800c\\u513f\\u8033\\u5c14\\u9975\\u6d31\\u4e8c\\ufffd\".split(\"\"),e=0;e!=r[182].length;++e)65533!==r[182][e].charCodeAt(0)&&(n[r[182][e]]=46592+e,t[46592+e]=r[182][e]);for(r[183]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8d30\\u53d1\\u7f5a\\u7b4f\\u4f10\\u4e4f\\u9600\\u6cd5\\u73d0\\u85e9\\u5e06\\u756a\\u7ffb\\u6a0a\\u77fe\\u9492\\u7e41\\u51e1\\u70e6\\u53cd\\u8fd4\\u8303\\u8d29\\u72af\\u996d\\u6cdb\\u574a\\u82b3\\u65b9\\u80aa\\u623f\\u9632\\u59a8\\u4eff\\u8bbf\\u7eba\\u653e\\u83f2\\u975e\\u5561\\u98de\\u80a5\\u532a\\u8bfd\\u5420\\u80ba\\u5e9f\\u6cb8\\u8d39\\u82ac\\u915a\\u5429\\u6c1b\\u5206\\u7eb7\\u575f\\u711a\\u6c7e\\u7c89\\u594b\\u4efd\\u5fff\\u6124\\u7caa\\u4e30\\u5c01\\u67ab\\u8702\\u5cf0\\u950b\\u98ce\\u75af\\u70fd\\u9022\\u51af\\u7f1d\\u8bbd\\u5949\\u51e4\\u4f5b\\u5426\\u592b\\u6577\\u80a4\\u5b75\\u6276\\u62c2\\u8f90\\u5e45\\u6c1f\\u7b26\\u4f0f\\u4fd8\\u670d\\ufffd\".split(\"\"),e=0;e!=r[183].length;++e)65533!==r[183][e].charCodeAt(0)&&(n[r[183][e]]=46848+e,t[46848+e]=r[183][e]);for(r[184]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6d6e\\u6daa\\u798f\\u88b1\\u5f17\\u752b\\u629a\\u8f85\\u4fef\\u91dc\\u65a7\\u812f\\u8151\\u5e9c\\u8150\\u8d74\\u526f\\u8986\\u8d4b\\u590d\\u5085\\u4ed8\\u961c\\u7236\\u8179\\u8d1f\\u5bcc\\u8ba3\\u9644\\u5987\\u7f1a\\u5490\\u5676\\u560e\\u8be5\\u6539\\u6982\\u9499\\u76d6\\u6e89\\u5e72\\u7518\\u6746\\u67d1\\u7aff\\u809d\\u8d76\\u611f\\u79c6\\u6562\\u8d63\\u5188\\u521a\\u94a2\\u7f38\\u809b\\u7eb2\\u5c97\\u6e2f\\u6760\\u7bd9\\u768b\\u9ad8\\u818f\\u7f94\\u7cd5\\u641e\\u9550\\u7a3f\\u544a\\u54e5\\u6b4c\\u6401\\u6208\\u9e3d\\u80f3\\u7599\\u5272\\u9769\\u845b\\u683c\\u86e4\\u9601\\u9694\\u94ec\\u4e2a\\u5404\\u7ed9\\u6839\\u8ddf\\u8015\\u66f4\\u5e9a\\u7fb9\\ufffd\".split(\"\"),e=0;e!=r[184].length;++e)65533!==r[184][e].charCodeAt(0)&&(n[r[184][e]]=47104+e,t[47104+e]=r[184][e]);for(r[185]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u57c2\\u803f\\u6897\\u5de5\\u653b\\u529f\\u606d\\u9f9a\\u4f9b\\u8eac\\u516c\\u5bab\\u5f13\\u5de9\\u6c5e\\u62f1\\u8d21\\u5171\\u94a9\\u52fe\\u6c9f\\u82df\\u72d7\\u57a2\\u6784\\u8d2d\\u591f\\u8f9c\\u83c7\\u5495\\u7b8d\\u4f30\\u6cbd\\u5b64\\u59d1\\u9f13\\u53e4\\u86ca\\u9aa8\\u8c37\\u80a1\\u6545\\u987e\\u56fa\\u96c7\\u522e\\u74dc\\u5250\\u5be1\\u6302\\u8902\\u4e56\\u62d0\\u602a\\u68fa\\u5173\\u5b98\\u51a0\\u89c2\\u7ba1\\u9986\\u7f50\\u60ef\\u704c\\u8d2f\\u5149\\u5e7f\\u901b\\u7470\\u89c4\\u572d\\u7845\\u5f52\\u9f9f\\u95fa\\u8f68\\u9b3c\\u8be1\\u7678\\u6842\\u67dc\\u8dea\\u8d35\\u523d\\u8f8a\\u6eda\\u68cd\\u9505\\u90ed\\u56fd\\u679c\\u88f9\\u8fc7\\u54c8\\ufffd\".split(\"\"),e=0;e!=r[185].length;++e)65533!==r[185][e].charCodeAt(0)&&(n[r[185][e]]=47360+e,t[47360+e]=r[185][e]);for(r[186]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9ab8\\u5b69\\u6d77\\u6c26\\u4ea5\\u5bb3\\u9a87\\u9163\\u61a8\\u90af\\u97e9\\u542b\\u6db5\\u5bd2\\u51fd\\u558a\\u7f55\\u7ff0\\u64bc\\u634d\\u65f1\\u61be\\u608d\\u710a\\u6c57\\u6c49\\u592f\\u676d\\u822a\\u58d5\\u568e\\u8c6a\\u6beb\\u90dd\\u597d\\u8017\\u53f7\\u6d69\\u5475\\u559d\\u8377\\u83cf\\u6838\\u79be\\u548c\\u4f55\\u5408\\u76d2\\u8c89\\u9602\\u6cb3\\u6db8\\u8d6b\\u8910\\u9e64\\u8d3a\\u563f\\u9ed1\\u75d5\\u5f88\\u72e0\\u6068\\u54fc\\u4ea8\\u6a2a\\u8861\\u6052\\u8f70\\u54c4\\u70d8\\u8679\\u9e3f\\u6d2a\\u5b8f\\u5f18\\u7ea2\\u5589\\u4faf\\u7334\\u543c\\u539a\\u5019\\u540e\\u547c\\u4e4e\\u5ffd\\u745a\\u58f6\\u846b\\u80e1\\u8774\\u72d0\\u7cca\\u6e56\\ufffd\".split(\"\"),e=0;e!=r[186].length;++e)65533!==r[186][e].charCodeAt(0)&&(n[r[186][e]]=47616+e,t[47616+e]=r[186][e]);for(r[187]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5f27\\u864e\\u552c\\u62a4\\u4e92\\u6caa\\u6237\\u82b1\\u54d7\\u534e\\u733e\\u6ed1\\u753b\\u5212\\u5316\\u8bdd\\u69d0\\u5f8a\\u6000\\u6dee\\u574f\\u6b22\\u73af\\u6853\\u8fd8\\u7f13\\u6362\\u60a3\\u5524\\u75ea\\u8c62\\u7115\\u6da3\\u5ba6\\u5e7b\\u8352\\u614c\\u9ec4\\u78fa\\u8757\\u7c27\\u7687\\u51f0\\u60f6\\u714c\\u6643\\u5e4c\\u604d\\u8c0e\\u7070\\u6325\\u8f89\\u5fbd\\u6062\\u86d4\\u56de\\u6bc1\\u6094\\u6167\\u5349\\u60e0\\u6666\\u8d3f\\u79fd\\u4f1a\\u70e9\\u6c47\\u8bb3\\u8bf2\\u7ed8\\u8364\\u660f\\u5a5a\\u9b42\\u6d51\\u6df7\\u8c41\\u6d3b\\u4f19\\u706b\\u83b7\\u6216\\u60d1\\u970d\\u8d27\\u7978\\u51fb\\u573e\\u57fa\\u673a\\u7578\\u7a3d\\u79ef\\u7b95\\ufffd\".split(\"\"),e=0;e!=r[187].length;++e)65533!==r[187][e].charCodeAt(0)&&(n[r[187][e]]=47872+e,t[47872+e]=r[187][e]);for(r[188]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u808c\\u9965\\u8ff9\\u6fc0\\u8ba5\\u9e21\\u59ec\\u7ee9\\u7f09\\u5409\\u6781\\u68d8\\u8f91\\u7c4d\\u96c6\\u53ca\\u6025\\u75be\\u6c72\\u5373\\u5ac9\\u7ea7\\u6324\\u51e0\\u810a\\u5df1\\u84df\\u6280\\u5180\\u5b63\\u4f0e\\u796d\\u5242\\u60b8\\u6d4e\\u5bc4\\u5bc2\\u8ba1\\u8bb0\\u65e2\\u5fcc\\u9645\\u5993\\u7ee7\\u7eaa\\u5609\\u67b7\\u5939\\u4f73\\u5bb6\\u52a0\\u835a\\u988a\\u8d3e\\u7532\\u94be\\u5047\\u7a3c\\u4ef7\\u67b6\\u9a7e\\u5ac1\\u6b7c\\u76d1\\u575a\\u5c16\\u7b3a\\u95f4\\u714e\\u517c\\u80a9\\u8270\\u5978\\u7f04\\u8327\\u68c0\\u67ec\\u78b1\\u7877\\u62e3\\u6361\\u7b80\\u4fed\\u526a\\u51cf\\u8350\\u69db\\u9274\\u8df5\\u8d31\\u89c1\\u952e\\u7bad\\u4ef6\\ufffd\".split(\"\"),e=0;e!=r[188].length;++e)65533!==r[188][e].charCodeAt(0)&&(n[r[188][e]]=48128+e,t[48128+e]=r[188][e]);for(r[189]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5065\\u8230\\u5251\\u996f\\u6e10\\u6e85\\u6da7\\u5efa\\u50f5\\u59dc\\u5c06\\u6d46\\u6c5f\\u7586\\u848b\\u6868\\u5956\\u8bb2\\u5320\\u9171\\u964d\\u8549\\u6912\\u7901\\u7126\\u80f6\\u4ea4\\u90ca\\u6d47\\u9a84\\u5a07\\u56bc\\u6405\\u94f0\\u77eb\\u4fa5\\u811a\\u72e1\\u89d2\\u997a\\u7f34\\u7ede\\u527f\\u6559\\u9175\\u8f7f\\u8f83\\u53eb\\u7a96\\u63ed\\u63a5\\u7686\\u79f8\\u8857\\u9636\\u622a\\u52ab\\u8282\\u6854\\u6770\\u6377\\u776b\\u7aed\\u6d01\\u7ed3\\u89e3\\u59d0\\u6212\\u85c9\\u82a5\\u754c\\u501f\\u4ecb\\u75a5\\u8beb\\u5c4a\\u5dfe\\u7b4b\\u65a4\\u91d1\\u4eca\\u6d25\\u895f\\u7d27\\u9526\\u4ec5\\u8c28\\u8fdb\\u9773\\u664b\\u7981\\u8fd1\\u70ec\\u6d78\\ufffd\".split(\"\"),e=0;e!=r[189].length;++e)65533!==r[189][e].charCodeAt(0)&&(n[r[189][e]]=48384+e,t[48384+e]=r[189][e]);for(r[190]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5c3d\\u52b2\\u8346\\u5162\\u830e\\u775b\\u6676\\u9cb8\\u4eac\\u60ca\\u7cbe\\u7cb3\\u7ecf\\u4e95\\u8b66\\u666f\\u9888\\u9759\\u5883\\u656c\\u955c\\u5f84\\u75c9\\u9756\\u7adf\\u7ade\\u51c0\\u70af\\u7a98\\u63ea\\u7a76\\u7ea0\\u7396\\u97ed\\u4e45\\u7078\\u4e5d\\u9152\\u53a9\\u6551\\u65e7\\u81fc\\u8205\\u548e\\u5c31\\u759a\\u97a0\\u62d8\\u72d9\\u75bd\\u5c45\\u9a79\\u83ca\\u5c40\\u5480\\u77e9\\u4e3e\\u6cae\\u805a\\u62d2\\u636e\\u5de8\\u5177\\u8ddd\\u8e1e\\u952f\\u4ff1\\u53e5\\u60e7\\u70ac\\u5267\\u6350\\u9e43\\u5a1f\\u5026\\u7737\\u5377\\u7ee2\\u6485\\u652b\\u6289\\u6398\\u5014\\u7235\\u89c9\\u51b3\\u8bc0\\u7edd\\u5747\\u83cc\\u94a7\\u519b\\u541b\\u5cfb\\ufffd\".split(\"\"),e=0;e!=r[190].length;++e)65533!==r[190][e].charCodeAt(0)&&(n[r[190][e]]=48640+e,t[48640+e]=r[190][e]);for(r[191]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u4fca\\u7ae3\\u6d5a\\u90e1\\u9a8f\\u5580\\u5496\\u5361\\u54af\\u5f00\\u63e9\\u6977\\u51ef\\u6168\\u520a\\u582a\\u52d8\\u574e\\u780d\\u770b\\u5eb7\\u6177\\u7ce0\\u625b\\u6297\\u4ea2\\u7095\\u8003\\u62f7\\u70e4\\u9760\\u5777\\u82db\\u67ef\\u68f5\\u78d5\\u9897\\u79d1\\u58f3\\u54b3\\u53ef\\u6e34\\u514b\\u523b\\u5ba2\\u8bfe\\u80af\\u5543\\u57a6\\u6073\\u5751\\u542d\\u7a7a\\u6050\\u5b54\\u63a7\\u62a0\\u53e3\\u6263\\u5bc7\\u67af\\u54ed\\u7a9f\\u82e6\\u9177\\u5e93\\u88e4\\u5938\\u57ae\\u630e\\u8de8\\u80ef\\u5757\\u7b77\\u4fa9\\u5feb\\u5bbd\\u6b3e\\u5321\\u7b50\\u72c2\\u6846\\u77ff\\u7736\\u65f7\\u51b5\\u4e8f\\u76d4\\u5cbf\\u7aa5\\u8475\\u594e\\u9b41\\u5080\\ufffd\".split(\"\"),e=0;e!=r[191].length;++e)65533!==r[191][e].charCodeAt(0)&&(n[r[191][e]]=48896+e,t[48896+e]=r[191][e]);for(r[192]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9988\\u6127\\u6e83\\u5764\\u6606\\u6346\\u56f0\\u62ec\\u6269\\u5ed3\\u9614\\u5783\\u62c9\\u5587\\u8721\\u814a\\u8fa3\\u5566\\u83b1\\u6765\\u8d56\\u84dd\\u5a6a\\u680f\\u62e6\\u7bee\\u9611\\u5170\\u6f9c\\u8c30\\u63fd\\u89c8\\u61d2\\u7f06\\u70c2\\u6ee5\\u7405\\u6994\\u72fc\\u5eca\\u90ce\\u6717\\u6d6a\\u635e\\u52b3\\u7262\\u8001\\u4f6c\\u59e5\\u916a\\u70d9\\u6d9d\\u52d2\\u4e50\\u96f7\\u956d\\u857e\\u78ca\\u7d2f\\u5121\\u5792\\u64c2\\u808b\\u7c7b\\u6cea\\u68f1\\u695e\\u51b7\\u5398\\u68a8\\u7281\\u9ece\\u7bf1\\u72f8\\u79bb\\u6f13\\u7406\\u674e\\u91cc\\u9ca4\\u793c\\u8389\\u8354\\u540f\\u6817\\u4e3d\\u5389\\u52b1\\u783e\\u5386\\u5229\\u5088\\u4f8b\\u4fd0\\ufffd\".split(\"\"),e=0;e!=r[192].length;++e)65533!==r[192][e].charCodeAt(0)&&(n[r[192][e]]=49152+e,t[49152+e]=r[192][e]);for(r[193]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u75e2\\u7acb\\u7c92\\u6ca5\\u96b6\\u529b\\u7483\\u54e9\\u4fe9\\u8054\\u83b2\\u8fde\\u9570\\u5ec9\\u601c\\u6d9f\\u5e18\\u655b\\u8138\\u94fe\\u604b\\u70bc\\u7ec3\\u7cae\\u51c9\\u6881\\u7cb1\\u826f\\u4e24\\u8f86\\u91cf\\u667e\\u4eae\\u8c05\\u64a9\\u804a\\u50da\\u7597\\u71ce\\u5be5\\u8fbd\\u6f66\\u4e86\\u6482\\u9563\\u5ed6\\u6599\\u5217\\u88c2\\u70c8\\u52a3\\u730e\\u7433\\u6797\\u78f7\\u9716\\u4e34\\u90bb\\u9cde\\u6dcb\\u51db\\u8d41\\u541d\\u62ce\\u73b2\\u83f1\\u96f6\\u9f84\\u94c3\\u4f36\\u7f9a\\u51cc\\u7075\\u9675\\u5cad\\u9886\\u53e6\\u4ee4\\u6e9c\\u7409\\u69b4\\u786b\\u998f\\u7559\\u5218\\u7624\\u6d41\\u67f3\\u516d\\u9f99\\u804b\\u5499\\u7b3c\\u7abf\\ufffd\".split(\"\"),e=0;e!=r[193].length;++e)65533!==r[193][e].charCodeAt(0)&&(n[r[193][e]]=49408+e,t[49408+e]=r[193][e]);for(r[194]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9686\\u5784\\u62e2\\u9647\\u697c\\u5a04\\u6402\\u7bd3\\u6f0f\\u964b\\u82a6\\u5362\\u9885\\u5e90\\u7089\\u63b3\\u5364\\u864f\\u9c81\\u9e93\\u788c\\u9732\\u8def\\u8d42\\u9e7f\\u6f5e\\u7984\\u5f55\\u9646\\u622e\\u9a74\\u5415\\u94dd\\u4fa3\\u65c5\\u5c65\\u5c61\\u7f15\\u8651\\u6c2f\\u5f8b\\u7387\\u6ee4\\u7eff\\u5ce6\\u631b\\u5b6a\\u6ee6\\u5375\\u4e71\\u63a0\\u7565\\u62a1\\u8f6e\\u4f26\\u4ed1\\u6ca6\\u7eb6\\u8bba\\u841d\\u87ba\\u7f57\\u903b\\u9523\\u7ba9\\u9aa1\\u88f8\\u843d\\u6d1b\\u9a86\\u7edc\\u5988\\u9ebb\\u739b\\u7801\\u8682\\u9a6c\\u9a82\\u561b\\u5417\\u57cb\\u4e70\\u9ea6\\u5356\\u8fc8\\u8109\\u7792\\u9992\\u86ee\\u6ee1\\u8513\\u66fc\\u6162\\u6f2b\\ufffd\".split(\"\"),e=0;e!=r[194].length;++e)65533!==r[194][e].charCodeAt(0)&&(n[r[194][e]]=49664+e,t[49664+e]=r[194][e]);for(r[195]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8c29\\u8292\\u832b\\u76f2\\u6c13\\u5fd9\\u83bd\\u732b\\u8305\\u951a\\u6bdb\\u77db\\u94c6\\u536f\\u8302\\u5192\\u5e3d\\u8c8c\\u8d38\\u4e48\\u73ab\\u679a\\u6885\\u9176\\u9709\\u7164\\u6ca1\\u7709\\u5a92\\u9541\\u6bcf\\u7f8e\\u6627\\u5bd0\\u59b9\\u5a9a\\u95e8\\u95f7\\u4eec\\u840c\\u8499\\u6aac\\u76df\\u9530\\u731b\\u68a6\\u5b5f\\u772f\\u919a\\u9761\\u7cdc\\u8ff7\\u8c1c\\u5f25\\u7c73\\u79d8\\u89c5\\u6ccc\\u871c\\u5bc6\\u5e42\\u68c9\\u7720\\u7ef5\\u5195\\u514d\\u52c9\\u5a29\\u7f05\\u9762\\u82d7\\u63cf\\u7784\\u85d0\\u79d2\\u6e3a\\u5e99\\u5999\\u8511\\u706d\\u6c11\\u62bf\\u76bf\\u654f\\u60af\\u95fd\\u660e\\u879f\\u9e23\\u94ed\\u540d\\u547d\\u8c2c\\u6478\\ufffd\".split(\"\"),e=0;e!=r[195].length;++e)65533!==r[195][e].charCodeAt(0)&&(n[r[195][e]]=49920+e,t[49920+e]=r[195][e]);for(r[196]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6479\\u8611\\u6a21\\u819c\\u78e8\\u6469\\u9b54\\u62b9\\u672b\\u83ab\\u58a8\\u9ed8\\u6cab\\u6f20\\u5bde\\u964c\\u8c0b\\u725f\\u67d0\\u62c7\\u7261\\u4ea9\\u59c6\\u6bcd\\u5893\\u66ae\\u5e55\\u52df\\u6155\\u6728\\u76ee\\u7766\\u7267\\u7a46\\u62ff\\u54ea\\u5450\\u94a0\\u90a3\\u5a1c\\u7eb3\\u6c16\\u4e43\\u5976\\u8010\\u5948\\u5357\\u7537\\u96be\\u56ca\\u6320\\u8111\\u607c\\u95f9\\u6dd6\\u5462\\u9981\\u5185\\u5ae9\\u80fd\\u59ae\\u9713\\u502a\\u6ce5\\u5c3c\\u62df\\u4f60\\u533f\\u817b\\u9006\\u6eba\\u852b\\u62c8\\u5e74\\u78be\\u64b5\\u637b\\u5ff5\\u5a18\\u917f\\u9e1f\\u5c3f\\u634f\\u8042\\u5b7d\\u556e\\u954a\\u954d\\u6d85\\u60a8\\u67e0\\u72de\\u51dd\\u5b81\\ufffd\".split(\"\"),e=0;e!=r[196].length;++e)65533!==r[196][e].charCodeAt(0)&&(n[r[196][e]]=50176+e,t[50176+e]=r[196][e]);for(r[197]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u62e7\\u6cde\\u725b\\u626d\\u94ae\\u7ebd\\u8113\\u6d53\\u519c\\u5f04\\u5974\\u52aa\\u6012\\u5973\\u6696\\u8650\\u759f\\u632a\\u61e6\\u7cef\\u8bfa\\u54e6\\u6b27\\u9e25\\u6bb4\\u85d5\\u5455\\u5076\\u6ca4\\u556a\\u8db4\\u722c\\u5e15\\u6015\\u7436\\u62cd\\u6392\\u724c\\u5f98\\u6e43\\u6d3e\\u6500\\u6f58\\u76d8\\u78d0\\u76fc\\u7554\\u5224\\u53db\\u4e53\\u5e9e\\u65c1\\u802a\\u80d6\\u629b\\u5486\\u5228\\u70ae\\u888d\\u8dd1\\u6ce1\\u5478\\u80da\\u57f9\\u88f4\\u8d54\\u966a\\u914d\\u4f69\\u6c9b\\u55b7\\u76c6\\u7830\\u62a8\\u70f9\\u6f8e\\u5f6d\\u84ec\\u68da\\u787c\\u7bf7\\u81a8\\u670b\\u9e4f\\u6367\\u78b0\\u576f\\u7812\\u9739\\u6279\\u62ab\\u5288\\u7435\\u6bd7\\ufffd\".split(\"\"),e=0;e!=r[197].length;++e)65533!==r[197][e].charCodeAt(0)&&(n[r[197][e]]=50432+e,t[50432+e]=r[197][e]);for(r[198]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5564\\u813e\\u75b2\\u76ae\\u5339\\u75de\\u50fb\\u5c41\\u8b6c\\u7bc7\\u504f\\u7247\\u9a97\\u98d8\\u6f02\\u74e2\\u7968\\u6487\\u77a5\\u62fc\\u9891\\u8d2b\\u54c1\\u8058\\u4e52\\u576a\\u82f9\\u840d\\u5e73\\u51ed\\u74f6\\u8bc4\\u5c4f\\u5761\\u6cfc\\u9887\\u5a46\\u7834\\u9b44\\u8feb\\u7c95\\u5256\\u6251\\u94fa\\u4ec6\\u8386\\u8461\\u83e9\\u84b2\\u57d4\\u6734\\u5703\\u666e\\u6d66\\u8c31\\u66dd\\u7011\\u671f\\u6b3a\\u6816\\u621a\\u59bb\\u4e03\\u51c4\\u6f06\\u67d2\\u6c8f\\u5176\\u68cb\\u5947\\u6b67\\u7566\\u5d0e\\u8110\\u9f50\\u65d7\\u7948\\u7941\\u9a91\\u8d77\\u5c82\\u4e5e\\u4f01\\u542f\\u5951\\u780c\\u5668\\u6c14\\u8fc4\\u5f03\\u6c7d\\u6ce3\\u8bab\\u6390\\ufffd\".split(\"\"),e=0;e!=r[198].length;++e)65533!==r[198][e].charCodeAt(0)&&(n[r[198][e]]=50688+e,t[50688+e]=r[198][e]);for(r[199]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6070\\u6d3d\\u7275\\u6266\\u948e\\u94c5\\u5343\\u8fc1\\u7b7e\\u4edf\\u8c26\\u4e7e\\u9ed4\\u94b1\\u94b3\\u524d\\u6f5c\\u9063\\u6d45\\u8c34\\u5811\\u5d4c\\u6b20\\u6b49\\u67aa\\u545b\\u8154\\u7f8c\\u5899\\u8537\\u5f3a\\u62a2\\u6a47\\u9539\\u6572\\u6084\\u6865\\u77a7\\u4e54\\u4fa8\\u5de7\\u9798\\u64ac\\u7fd8\\u5ced\\u4fcf\\u7a8d\\u5207\\u8304\\u4e14\\u602f\\u7a83\\u94a6\\u4fb5\\u4eb2\\u79e6\\u7434\\u52e4\\u82b9\\u64d2\\u79bd\\u5bdd\\u6c81\\u9752\\u8f7b\\u6c22\\u503e\\u537f\\u6e05\\u64ce\\u6674\\u6c30\\u60c5\\u9877\\u8bf7\\u5e86\\u743c\\u7a77\\u79cb\\u4e18\\u90b1\\u7403\\u6c42\\u56da\\u914b\\u6cc5\\u8d8b\\u533a\\u86c6\\u66f2\\u8eaf\\u5c48\\u9a71\\u6e20\\ufffd\".split(\"\"),e=0;e!=r[199].length;++e)65533!==r[199][e].charCodeAt(0)&&(n[r[199][e]]=50944+e,t[50944+e]=r[199][e]);for(r[200]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u53d6\\u5a36\\u9f8b\\u8da3\\u53bb\\u5708\\u98a7\\u6743\\u919b\\u6cc9\\u5168\\u75ca\\u62f3\\u72ac\\u5238\\u529d\\u7f3a\\u7094\\u7638\\u5374\\u9e4a\\u69b7\\u786e\\u96c0\\u88d9\\u7fa4\\u7136\\u71c3\\u5189\\u67d3\\u74e4\\u58e4\\u6518\\u56b7\\u8ba9\\u9976\\u6270\\u7ed5\\u60f9\\u70ed\\u58ec\\u4ec1\\u4eba\\u5fcd\\u97e7\\u4efb\\u8ba4\\u5203\\u598a\\u7eab\\u6254\\u4ecd\\u65e5\\u620e\\u8338\\u84c9\\u8363\\u878d\\u7194\\u6eb6\\u5bb9\\u7ed2\\u5197\\u63c9\\u67d4\\u8089\\u8339\\u8815\\u5112\\u5b7a\\u5982\\u8fb1\\u4e73\\u6c5d\\u5165\\u8925\\u8f6f\\u962e\\u854a\\u745e\\u9510\\u95f0\\u6da6\\u82e5\\u5f31\\u6492\\u6d12\\u8428\\u816e\\u9cc3\\u585e\\u8d5b\\u4e09\\u53c1\\ufffd\".split(\"\"),e=0;e!=r[200].length;++e)65533!==r[200][e].charCodeAt(0)&&(n[r[200][e]]=51200+e,t[51200+e]=r[200][e]);for(r[201]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u4f1e\\u6563\\u6851\\u55d3\\u4e27\\u6414\\u9a9a\\u626b\\u5ac2\\u745f\\u8272\\u6da9\\u68ee\\u50e7\\u838e\\u7802\\u6740\\u5239\\u6c99\\u7eb1\\u50bb\\u5565\\u715e\\u7b5b\\u6652\\u73ca\\u82eb\\u6749\\u5c71\\u5220\\u717d\\u886b\\u95ea\\u9655\\u64c5\\u8d61\\u81b3\\u5584\\u6c55\\u6247\\u7f2e\\u5892\\u4f24\\u5546\\u8d4f\\u664c\\u4e0a\\u5c1a\\u88f3\\u68a2\\u634e\\u7a0d\\u70e7\\u828d\\u52fa\\u97f6\\u5c11\\u54e8\\u90b5\\u7ecd\\u5962\\u8d4a\\u86c7\\u820c\\u820d\\u8d66\\u6444\\u5c04\\u6151\\u6d89\\u793e\\u8bbe\\u7837\\u7533\\u547b\\u4f38\\u8eab\\u6df1\\u5a20\\u7ec5\\u795e\\u6c88\\u5ba1\\u5a76\\u751a\\u80be\\u614e\\u6e17\\u58f0\\u751f\\u7525\\u7272\\u5347\\u7ef3\\ufffd\".split(\"\"),e=0;e!=r[201].length;++e)65533!==r[201][e].charCodeAt(0)&&(n[r[201][e]]=51456+e,t[51456+e]=r[201][e]);for(r[202]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7701\\u76db\\u5269\\u80dc\\u5723\\u5e08\\u5931\\u72ee\\u65bd\\u6e7f\\u8bd7\\u5c38\\u8671\\u5341\\u77f3\\u62fe\\u65f6\\u4ec0\\u98df\\u8680\\u5b9e\\u8bc6\\u53f2\\u77e2\\u4f7f\\u5c4e\\u9a76\\u59cb\\u5f0f\\u793a\\u58eb\\u4e16\\u67ff\\u4e8b\\u62ed\\u8a93\\u901d\\u52bf\\u662f\\u55dc\\u566c\\u9002\\u4ed5\\u4f8d\\u91ca\\u9970\\u6c0f\\u5e02\\u6043\\u5ba4\\u89c6\\u8bd5\\u6536\\u624b\\u9996\\u5b88\\u5bff\\u6388\\u552e\\u53d7\\u7626\\u517d\\u852c\\u67a2\\u68b3\\u6b8a\\u6292\\u8f93\\u53d4\\u8212\\u6dd1\\u758f\\u4e66\\u8d4e\\u5b70\\u719f\\u85af\\u6691\\u66d9\\u7f72\\u8700\\u9ecd\\u9f20\\u5c5e\\u672f\\u8ff0\\u6811\\u675f\\u620d\\u7ad6\\u5885\\u5eb6\\u6570\\u6f31\\ufffd\".split(\"\"),e=0;e!=r[202].length;++e)65533!==r[202][e].charCodeAt(0)&&(n[r[202][e]]=51712+e,t[51712+e]=r[202][e]);for(r[203]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6055\\u5237\\u800d\\u6454\\u8870\\u7529\\u5e05\\u6813\\u62f4\\u971c\\u53cc\\u723d\\u8c01\\u6c34\\u7761\\u7a0e\\u542e\\u77ac\\u987a\\u821c\\u8bf4\\u7855\\u6714\\u70c1\\u65af\\u6495\\u5636\\u601d\\u79c1\\u53f8\\u4e1d\\u6b7b\\u8086\\u5bfa\\u55e3\\u56db\\u4f3a\\u4f3c\\u9972\\u5df3\\u677e\\u8038\\u6002\\u9882\\u9001\\u5b8b\\u8bbc\\u8bf5\\u641c\\u8258\\u64de\\u55fd\\u82cf\\u9165\\u4fd7\\u7d20\\u901f\\u7c9f\\u50f3\\u5851\\u6eaf\\u5bbf\\u8bc9\\u8083\\u9178\\u849c\\u7b97\\u867d\\u968b\\u968f\\u7ee5\\u9ad3\\u788e\\u5c81\\u7a57\\u9042\\u96a7\\u795f\\u5b59\\u635f\\u7b0b\\u84d1\\u68ad\\u5506\\u7f29\\u7410\\u7d22\\u9501\\u6240\\u584c\\u4ed6\\u5b83\\u5979\\u5854\\ufffd\".split(\"\"),e=0;e!=r[203].length;++e)65533!==r[203][e].charCodeAt(0)&&(n[r[203][e]]=51968+e,t[51968+e]=r[203][e]);for(r[204]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u736d\\u631e\\u8e4b\\u8e0f\\u80ce\\u82d4\\u62ac\\u53f0\\u6cf0\\u915e\\u592a\\u6001\\u6c70\\u574d\\u644a\\u8d2a\\u762b\\u6ee9\\u575b\\u6a80\\u75f0\\u6f6d\\u8c2d\\u8c08\\u5766\\u6bef\\u8892\\u78b3\\u63a2\\u53f9\\u70ad\\u6c64\\u5858\\u642a\\u5802\\u68e0\\u819b\\u5510\\u7cd6\\u5018\\u8eba\\u6dcc\\u8d9f\\u70eb\\u638f\\u6d9b\\u6ed4\\u7ee6\\u8404\\u6843\\u9003\\u6dd8\\u9676\\u8ba8\\u5957\\u7279\\u85e4\\u817e\\u75bc\\u8a8a\\u68af\\u5254\\u8e22\\u9511\\u63d0\\u9898\\u8e44\\u557c\\u4f53\\u66ff\\u568f\\u60d5\\u6d95\\u5243\\u5c49\\u5929\\u6dfb\\u586b\\u7530\\u751c\\u606c\\u8214\\u8146\\u6311\\u6761\\u8fe2\\u773a\\u8df3\\u8d34\\u94c1\\u5e16\\u5385\\u542c\\u70c3\\ufffd\".split(\"\"),e=0;e!=r[204].length;++e)65533!==r[204][e].charCodeAt(0)&&(n[r[204][e]]=52224+e,t[52224+e]=r[204][e]);for(r[205]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6c40\\u5ef7\\u505c\\u4ead\\u5ead\\u633a\\u8247\\u901a\\u6850\\u916e\\u77b3\\u540c\\u94dc\\u5f64\\u7ae5\\u6876\\u6345\\u7b52\\u7edf\\u75db\\u5077\\u6295\\u5934\\u900f\\u51f8\\u79c3\\u7a81\\u56fe\\u5f92\\u9014\\u6d82\\u5c60\\u571f\\u5410\\u5154\\u6e4d\\u56e2\\u63a8\\u9893\\u817f\\u8715\\u892a\\u9000\\u541e\\u5c6f\\u81c0\\u62d6\\u6258\\u8131\\u9e35\\u9640\\u9a6e\\u9a7c\\u692d\\u59a5\\u62d3\\u553e\\u6316\\u54c7\\u86d9\\u6d3c\\u5a03\\u74e6\\u889c\\u6b6a\\u5916\\u8c4c\\u5f2f\\u6e7e\\u73a9\\u987d\\u4e38\\u70f7\\u5b8c\\u7897\\u633d\\u665a\\u7696\\u60cb\\u5b9b\\u5a49\\u4e07\\u8155\\u6c6a\\u738b\\u4ea1\\u6789\\u7f51\\u5f80\\u65fa\\u671b\\u5fd8\\u5984\\u5a01\\ufffd\".split(\"\"),e=0;e!=r[205].length;++e)65533!==r[205][e].charCodeAt(0)&&(n[r[205][e]]=52480+e,t[52480+e]=r[205][e]);for(r[206]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5dcd\\u5fae\\u5371\\u97e6\\u8fdd\\u6845\\u56f4\\u552f\\u60df\\u4e3a\\u6f4d\\u7ef4\\u82c7\\u840e\\u59d4\\u4f1f\\u4f2a\\u5c3e\\u7eac\\u672a\\u851a\\u5473\\u754f\\u80c3\\u5582\\u9b4f\\u4f4d\\u6e2d\\u8c13\\u5c09\\u6170\\u536b\\u761f\\u6e29\\u868a\\u6587\\u95fb\\u7eb9\\u543b\\u7a33\\u7d0a\\u95ee\\u55e1\\u7fc1\\u74ee\\u631d\\u8717\\u6da1\\u7a9d\\u6211\\u65a1\\u5367\\u63e1\\u6c83\\u5deb\\u545c\\u94a8\\u4e4c\\u6c61\\u8bec\\u5c4b\\u65e0\\u829c\\u68a7\\u543e\\u5434\\u6bcb\\u6b66\\u4e94\\u6342\\u5348\\u821e\\u4f0d\\u4fae\\u575e\\u620a\\u96fe\\u6664\\u7269\\u52ff\\u52a1\\u609f\\u8bef\\u6614\\u7199\\u6790\\u897f\\u7852\\u77fd\\u6670\\u563b\\u5438\\u9521\\u727a\\ufffd\".split(\"\"),e=0;e!=r[206].length;++e)65533!==r[206][e].charCodeAt(0)&&(n[r[206][e]]=52736+e,t[52736+e]=r[206][e]);for(r[207]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7a00\\u606f\\u5e0c\\u6089\\u819d\\u5915\\u60dc\\u7184\\u70ef\\u6eaa\\u6c50\\u7280\\u6a84\\u88ad\\u5e2d\\u4e60\\u5ab3\\u559c\\u94e3\\u6d17\\u7cfb\\u9699\\u620f\\u7ec6\\u778e\\u867e\\u5323\\u971e\\u8f96\\u6687\\u5ce1\\u4fa0\\u72ed\\u4e0b\\u53a6\\u590f\\u5413\\u6380\\u9528\\u5148\\u4ed9\\u9c9c\\u7ea4\\u54b8\\u8d24\\u8854\\u8237\\u95f2\\u6d8e\\u5f26\\u5acc\\u663e\\u9669\\u73b0\\u732e\\u53bf\\u817a\\u9985\\u7fa1\\u5baa\\u9677\\u9650\\u7ebf\\u76f8\\u53a2\\u9576\\u9999\\u7bb1\\u8944\\u6e58\\u4e61\\u7fd4\\u7965\\u8be6\\u60f3\\u54cd\\u4eab\\u9879\\u5df7\\u6a61\\u50cf\\u5411\\u8c61\\u8427\\u785d\\u9704\\u524a\\u54ee\\u56a3\\u9500\\u6d88\\u5bb5\\u6dc6\\u6653\\ufffd\".split(\"\"),e=0;e!=r[207].length;++e)65533!==r[207][e].charCodeAt(0)&&(n[r[207][e]]=52992+e,t[52992+e]=r[207][e]);for(r[208]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5c0f\\u5b5d\\u6821\\u8096\\u5578\\u7b11\\u6548\\u6954\\u4e9b\\u6b47\\u874e\\u978b\\u534f\\u631f\\u643a\\u90aa\\u659c\\u80c1\\u8c10\\u5199\\u68b0\\u5378\\u87f9\\u61c8\\u6cc4\\u6cfb\\u8c22\\u5c51\\u85aa\\u82af\\u950c\\u6b23\\u8f9b\\u65b0\\u5ffb\\u5fc3\\u4fe1\\u8845\\u661f\\u8165\\u7329\\u60fa\\u5174\\u5211\\u578b\\u5f62\\u90a2\\u884c\\u9192\\u5e78\\u674f\\u6027\\u59d3\\u5144\\u51f6\\u80f8\\u5308\\u6c79\\u96c4\\u718a\\u4f11\\u4fee\\u7f9e\\u673d\\u55c5\\u9508\\u79c0\\u8896\\u7ee3\\u589f\\u620c\\u9700\\u865a\\u5618\\u987b\\u5f90\\u8bb8\\u84c4\\u9157\\u53d9\\u65ed\\u5e8f\\u755c\\u6064\\u7d6e\\u5a7f\\u7eea\\u7eed\\u8f69\\u55a7\\u5ba3\\u60ac\\u65cb\\u7384\\ufffd\".split(\"\"),e=0;e!=r[208].length;++e)65533!==r[208][e].charCodeAt(0)&&(n[r[208][e]]=53248+e,t[53248+e]=r[208][e]);for(r[209]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9009\\u7663\\u7729\\u7eda\\u9774\\u859b\\u5b66\\u7a74\\u96ea\\u8840\\u52cb\\u718f\\u5faa\\u65ec\\u8be2\\u5bfb\\u9a6f\\u5de1\\u6b89\\u6c5b\\u8bad\\u8baf\\u900a\\u8fc5\\u538b\\u62bc\\u9e26\\u9e2d\\u5440\\u4e2b\\u82bd\\u7259\\u869c\\u5d16\\u8859\\u6daf\\u96c5\\u54d1\\u4e9a\\u8bb6\\u7109\\u54bd\\u9609\\u70df\\u6df9\\u76d0\\u4e25\\u7814\\u8712\\u5ca9\\u5ef6\\u8a00\\u989c\\u960e\\u708e\\u6cbf\\u5944\\u63a9\\u773c\\u884d\\u6f14\\u8273\\u5830\\u71d5\\u538c\\u781a\\u96c1\\u5501\\u5f66\\u7130\\u5bb4\\u8c1a\\u9a8c\\u6b83\\u592e\\u9e2f\\u79e7\\u6768\\u626c\\u4f6f\\u75a1\\u7f8a\\u6d0b\\u9633\\u6c27\\u4ef0\\u75d2\\u517b\\u6837\\u6f3e\\u9080\\u8170\\u5996\\u7476\\ufffd\".split(\"\"),e=0;e!=r[209].length;++e)65533!==r[209][e].charCodeAt(0)&&(n[r[209][e]]=53504+e,t[53504+e]=r[209][e]);for(r[210]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6447\\u5c27\\u9065\\u7a91\\u8c23\\u59da\\u54ac\\u8200\\u836f\\u8981\\u8000\\u6930\\u564e\\u8036\\u7237\\u91ce\\u51b6\\u4e5f\\u9875\\u6396\\u4e1a\\u53f6\\u66f3\\u814b\\u591c\\u6db2\\u4e00\\u58f9\\u533b\\u63d6\\u94f1\\u4f9d\\u4f0a\\u8863\\u9890\\u5937\\u9057\\u79fb\\u4eea\\u80f0\\u7591\\u6c82\\u5b9c\\u59e8\\u5f5d\\u6905\\u8681\\u501a\\u5df2\\u4e59\\u77e3\\u4ee5\\u827a\\u6291\\u6613\\u9091\\u5c79\\u4ebf\\u5f79\\u81c6\\u9038\\u8084\\u75ab\\u4ea6\\u88d4\\u610f\\u6bc5\\u5fc6\\u4e49\\u76ca\\u6ea2\\u8be3\\u8bae\\u8c0a\\u8bd1\\u5f02\\u7ffc\\u7fcc\\u7ece\\u8335\\u836b\\u56e0\\u6bb7\\u97f3\\u9634\\u59fb\\u541f\\u94f6\\u6deb\\u5bc5\\u996e\\u5c39\\u5f15\\u9690\\ufffd\".split(\"\"),e=0;e!=r[210].length;++e)65533!==r[210][e].charCodeAt(0)&&(n[r[210][e]]=53760+e,t[53760+e]=r[210][e]);for(r[211]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5370\\u82f1\\u6a31\\u5a74\\u9e70\\u5e94\\u7f28\\u83b9\\u8424\\u8425\\u8367\\u8747\\u8fce\\u8d62\\u76c8\\u5f71\\u9896\\u786c\\u6620\\u54df\\u62e5\\u4f63\\u81c3\\u75c8\\u5eb8\\u96cd\\u8e0a\\u86f9\\u548f\\u6cf3\\u6d8c\\u6c38\\u607f\\u52c7\\u7528\\u5e7d\\u4f18\\u60a0\\u5fe7\\u5c24\\u7531\\u90ae\\u94c0\\u72b9\\u6cb9\\u6e38\\u9149\\u6709\\u53cb\\u53f3\\u4f51\\u91c9\\u8bf1\\u53c8\\u5e7c\\u8fc2\\u6de4\\u4e8e\\u76c2\\u6986\\u865e\\u611a\\u8206\\u4f59\\u4fde\\u903e\\u9c7c\\u6109\\u6e1d\\u6e14\\u9685\\u4e88\\u5a31\\u96e8\\u4e0e\\u5c7f\\u79b9\\u5b87\\u8bed\\u7fbd\\u7389\\u57df\\u828b\\u90c1\\u5401\\u9047\\u55bb\\u5cea\\u5fa1\\u6108\\u6b32\\u72f1\\u80b2\\u8a89\\ufffd\".split(\"\"),e=0;e!=r[211].length;++e)65533!==r[211][e].charCodeAt(0)&&(n[r[211][e]]=54016+e,t[54016+e]=r[211][e]);for(r[212]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6d74\\u5bd3\\u88d5\\u9884\\u8c6b\\u9a6d\\u9e33\\u6e0a\\u51a4\\u5143\\u57a3\\u8881\\u539f\\u63f4\\u8f95\\u56ed\\u5458\\u5706\\u733f\\u6e90\\u7f18\\u8fdc\\u82d1\\u613f\\u6028\\u9662\\u66f0\\u7ea6\\u8d8a\\u8dc3\\u94a5\\u5cb3\\u7ca4\\u6708\\u60a6\\u9605\\u8018\\u4e91\\u90e7\\u5300\\u9668\\u5141\\u8fd0\\u8574\\u915d\\u6655\\u97f5\\u5b55\\u531d\\u7838\\u6742\\u683d\\u54c9\\u707e\\u5bb0\\u8f7d\\u518d\\u5728\\u54b1\\u6512\\u6682\\u8d5e\\u8d43\\u810f\\u846c\\u906d\\u7cdf\\u51ff\\u85fb\\u67a3\\u65e9\\u6fa1\\u86a4\\u8e81\\u566a\\u9020\\u7682\\u7076\\u71e5\\u8d23\\u62e9\\u5219\\u6cfd\\u8d3c\\u600e\\u589e\\u618e\\u66fe\\u8d60\\u624e\\u55b3\\u6e23\\u672d\\u8f67\\ufffd\".split(\"\"),e=0;e!=r[212].length;++e)65533!==r[212][e].charCodeAt(0)&&(n[r[212][e]]=54272+e,t[54272+e]=r[212][e]);for(r[213]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u94e1\\u95f8\\u7728\\u6805\\u69a8\\u548b\\u4e4d\\u70b8\\u8bc8\\u6458\\u658b\\u5b85\\u7a84\\u503a\\u5be8\\u77bb\\u6be1\\u8a79\\u7c98\\u6cbe\\u76cf\\u65a9\\u8f97\\u5d2d\\u5c55\\u8638\\u6808\\u5360\\u6218\\u7ad9\\u6e5b\\u7efd\\u6a1f\\u7ae0\\u5f70\\u6f33\\u5f20\\u638c\\u6da8\\u6756\\u4e08\\u5e10\\u8d26\\u4ed7\\u80c0\\u7634\\u969c\\u62db\\u662d\\u627e\\u6cbc\\u8d75\\u7167\\u7f69\\u5146\\u8087\\u53ec\\u906e\\u6298\\u54f2\\u86f0\\u8f99\\u8005\\u9517\\u8517\\u8fd9\\u6d59\\u73cd\\u659f\\u771f\\u7504\\u7827\\u81fb\\u8d1e\\u9488\\u4fa6\\u6795\\u75b9\\u8bca\\u9707\\u632f\\u9547\\u9635\\u84b8\\u6323\\u7741\\u5f81\\u72f0\\u4e89\\u6014\\u6574\\u62ef\\u6b63\\u653f\\ufffd\".split(\"\"),e=0;e!=r[213].length;++e)65533!==r[213][e].charCodeAt(0)&&(n[r[213][e]]=54528+e,t[54528+e]=r[213][e]);for(r[214]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5e27\\u75c7\\u90d1\\u8bc1\\u829d\\u679d\\u652f\\u5431\\u8718\\u77e5\\u80a2\\u8102\\u6c41\\u4e4b\\u7ec7\\u804c\\u76f4\\u690d\\u6b96\\u6267\\u503c\\u4f84\\u5740\\u6307\\u6b62\\u8dbe\\u53ea\\u65e8\\u7eb8\\u5fd7\\u631a\\u63b7\\u81f3\\u81f4\\u7f6e\\u5e1c\\u5cd9\\u5236\\u667a\\u79e9\\u7a1a\\u8d28\\u7099\\u75d4\\u6ede\\u6cbb\\u7a92\\u4e2d\\u76c5\\u5fe0\\u949f\\u8877\\u7ec8\\u79cd\\u80bf\\u91cd\\u4ef2\\u4f17\\u821f\\u5468\\u5dde\\u6d32\\u8bcc\\u7ca5\\u8f74\\u8098\\u5e1a\\u5492\\u76b1\\u5b99\\u663c\\u9aa4\\u73e0\\u682a\\u86db\\u6731\\u732a\\u8bf8\\u8bdb\\u9010\\u7af9\\u70db\\u716e\\u62c4\\u77a9\\u5631\\u4e3b\\u8457\\u67f1\\u52a9\\u86c0\\u8d2e\\u94f8\\u7b51\\ufffd\".split(\"\"),e=0;e!=r[214].length;++e)65533!==r[214][e].charCodeAt(0)&&(n[r[214][e]]=54784+e,t[54784+e]=r[214][e]);for(r[215]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u4f4f\\u6ce8\\u795d\\u9a7b\\u6293\\u722a\\u62fd\\u4e13\\u7816\\u8f6c\\u64b0\\u8d5a\\u7bc6\\u6869\\u5e84\\u88c5\\u5986\\u649e\\u58ee\\u72b6\\u690e\\u9525\\u8ffd\\u8d58\\u5760\\u7f00\\u8c06\\u51c6\\u6349\\u62d9\\u5353\\u684c\\u7422\\u8301\\u914c\\u5544\\u7740\\u707c\\u6d4a\\u5179\\u54a8\\u8d44\\u59ff\\u6ecb\\u6dc4\\u5b5c\\u7d2b\\u4ed4\\u7c7d\\u6ed3\\u5b50\\u81ea\\u6e0d\\u5b57\\u9b03\\u68d5\\u8e2a\\u5b97\\u7efc\\u603b\\u7eb5\\u90b9\\u8d70\\u594f\\u63cd\\u79df\\u8db3\\u5352\\u65cf\\u7956\\u8bc5\\u963b\\u7ec4\\u94bb\\u7e82\\u5634\\u9189\\u6700\\u7f6a\\u5c0a\\u9075\\u6628\\u5de6\\u4f50\\u67de\\u505a\\u4f5c\\u5750\\u5ea7\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\".split(\"\"),e=0;e!=r[215].length;++e)65533!==r[215][e].charCodeAt(0)&&(n[r[215][e]]=55040+e,t[55040+e]=r[215][e]);for(r[216]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u4e8d\\u4e0c\\u5140\\u4e10\\u5eff\\u5345\\u4e15\\u4e98\\u4e1e\\u9b32\\u5b6c\\u5669\\u4e28\\u79ba\\u4e3f\\u5315\\u4e47\\u592d\\u723b\\u536e\\u6c10\\u56df\\u80e4\\u9997\\u6bd3\\u777e\\u9f17\\u4e36\\u4e9f\\u9f10\\u4e5c\\u4e69\\u4e93\\u8288\\u5b5b\\u556c\\u560f\\u4ec4\\u538d\\u539d\\u53a3\\u53a5\\u53ae\\u9765\\u8d5d\\u531a\\u53f5\\u5326\\u532e\\u533e\\u8d5c\\u5366\\u5363\\u5202\\u5208\\u520e\\u522d\\u5233\\u523f\\u5240\\u524c\\u525e\\u5261\\u525c\\u84af\\u527d\\u5282\\u5281\\u5290\\u5293\\u5182\\u7f54\\u4ebb\\u4ec3\\u4ec9\\u4ec2\\u4ee8\\u4ee1\\u4eeb\\u4ede\\u4f1b\\u4ef3\\u4f22\\u4f64\\u4ef5\\u4f25\\u4f27\\u4f09\\u4f2b\\u4f5e\\u4f67\\u6538\\u4f5a\\u4f5d\\ufffd\".split(\"\"),e=0;e!=r[216].length;++e)65533!==r[216][e].charCodeAt(0)&&(n[r[216][e]]=55296+e,t[55296+e]=r[216][e]);for(r[217]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u4f5f\\u4f57\\u4f32\\u4f3d\\u4f76\\u4f74\\u4f91\\u4f89\\u4f83\\u4f8f\\u4f7e\\u4f7b\\u4faa\\u4f7c\\u4fac\\u4f94\\u4fe6\\u4fe8\\u4fea\\u4fc5\\u4fda\\u4fe3\\u4fdc\\u4fd1\\u4fdf\\u4ff8\\u5029\\u504c\\u4ff3\\u502c\\u500f\\u502e\\u502d\\u4ffe\\u501c\\u500c\\u5025\\u5028\\u507e\\u5043\\u5055\\u5048\\u504e\\u506c\\u507b\\u50a5\\u50a7\\u50a9\\u50ba\\u50d6\\u5106\\u50ed\\u50ec\\u50e6\\u50ee\\u5107\\u510b\\u4edd\\u6c3d\\u4f58\\u4f65\\u4fce\\u9fa0\\u6c46\\u7c74\\u516e\\u5dfd\\u9ec9\\u9998\\u5181\\u5914\\u52f9\\u530d\\u8a07\\u5310\\u51eb\\u5919\\u5155\\u4ea0\\u5156\\u4eb3\\u886e\\u88a4\\u4eb5\\u8114\\u88d2\\u7980\\u5b34\\u8803\\u7fb8\\u51ab\\u51b1\\u51bd\\u51bc\\ufffd\".split(\"\"),e=0;e!=r[217].length;++e)65533!==r[217][e].charCodeAt(0)&&(n[r[217][e]]=55552+e,t[55552+e]=r[217][e]);for(r[218]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u51c7\\u5196\\u51a2\\u51a5\\u8ba0\\u8ba6\\u8ba7\\u8baa\\u8bb4\\u8bb5\\u8bb7\\u8bc2\\u8bc3\\u8bcb\\u8bcf\\u8bce\\u8bd2\\u8bd3\\u8bd4\\u8bd6\\u8bd8\\u8bd9\\u8bdc\\u8bdf\\u8be0\\u8be4\\u8be8\\u8be9\\u8bee\\u8bf0\\u8bf3\\u8bf6\\u8bf9\\u8bfc\\u8bff\\u8c00\\u8c02\\u8c04\\u8c07\\u8c0c\\u8c0f\\u8c11\\u8c12\\u8c14\\u8c15\\u8c16\\u8c19\\u8c1b\\u8c18\\u8c1d\\u8c1f\\u8c20\\u8c21\\u8c25\\u8c27\\u8c2a\\u8c2b\\u8c2e\\u8c2f\\u8c32\\u8c33\\u8c35\\u8c36\\u5369\\u537a\\u961d\\u9622\\u9621\\u9631\\u962a\\u963d\\u963c\\u9642\\u9649\\u9654\\u965f\\u9667\\u966c\\u9672\\u9674\\u9688\\u968d\\u9697\\u96b0\\u9097\\u909b\\u909d\\u9099\\u90ac\\u90a1\\u90b4\\u90b3\\u90b6\\u90ba\\ufffd\".split(\"\"),e=0;e!=r[218].length;++e)65533!==r[218][e].charCodeAt(0)&&(n[r[218][e]]=55808+e,t[55808+e]=r[218][e]);for(r[219]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u90b8\\u90b0\\u90cf\\u90c5\\u90be\\u90d0\\u90c4\\u90c7\\u90d3\\u90e6\\u90e2\\u90dc\\u90d7\\u90db\\u90eb\\u90ef\\u90fe\\u9104\\u9122\\u911e\\u9123\\u9131\\u912f\\u9139\\u9143\\u9146\\u520d\\u5942\\u52a2\\u52ac\\u52ad\\u52be\\u54ff\\u52d0\\u52d6\\u52f0\\u53df\\u71ee\\u77cd\\u5ef4\\u51f5\\u51fc\\u9b2f\\u53b6\\u5f01\\u755a\\u5def\\u574c\\u57a9\\u57a1\\u587e\\u58bc\\u58c5\\u58d1\\u5729\\u572c\\u572a\\u5733\\u5739\\u572e\\u572f\\u575c\\u573b\\u5742\\u5769\\u5785\\u576b\\u5786\\u577c\\u577b\\u5768\\u576d\\u5776\\u5773\\u57ad\\u57a4\\u578c\\u57b2\\u57cf\\u57a7\\u57b4\\u5793\\u57a0\\u57d5\\u57d8\\u57da\\u57d9\\u57d2\\u57b8\\u57f4\\u57ef\\u57f8\\u57e4\\u57dd\\ufffd\".split(\"\"),e=0;e!=r[219].length;++e)65533!==r[219][e].charCodeAt(0)&&(n[r[219][e]]=56064+e,t[56064+e]=r[219][e]);for(r[220]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u580b\\u580d\\u57fd\\u57ed\\u5800\\u581e\\u5819\\u5844\\u5820\\u5865\\u586c\\u5881\\u5889\\u589a\\u5880\\u99a8\\u9f19\\u61ff\\u8279\\u827d\\u827f\\u828f\\u828a\\u82a8\\u8284\\u828e\\u8291\\u8297\\u8299\\u82ab\\u82b8\\u82be\\u82b0\\u82c8\\u82ca\\u82e3\\u8298\\u82b7\\u82ae\\u82cb\\u82cc\\u82c1\\u82a9\\u82b4\\u82a1\\u82aa\\u829f\\u82c4\\u82ce\\u82a4\\u82e1\\u8309\\u82f7\\u82e4\\u830f\\u8307\\u82dc\\u82f4\\u82d2\\u82d8\\u830c\\u82fb\\u82d3\\u8311\\u831a\\u8306\\u8314\\u8315\\u82e0\\u82d5\\u831c\\u8351\\u835b\\u835c\\u8308\\u8392\\u833c\\u8334\\u8331\\u839b\\u835e\\u832f\\u834f\\u8347\\u8343\\u835f\\u8340\\u8317\\u8360\\u832d\\u833a\\u8333\\u8366\\u8365\\ufffd\".split(\"\"),e=0;e!=r[220].length;++e)65533!==r[220][e].charCodeAt(0)&&(n[r[220][e]]=56320+e,t[56320+e]=r[220][e]);for(r[221]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8368\\u831b\\u8369\\u836c\\u836a\\u836d\\u836e\\u83b0\\u8378\\u83b3\\u83b4\\u83a0\\u83aa\\u8393\\u839c\\u8385\\u837c\\u83b6\\u83a9\\u837d\\u83b8\\u837b\\u8398\\u839e\\u83a8\\u83ba\\u83bc\\u83c1\\u8401\\u83e5\\u83d8\\u5807\\u8418\\u840b\\u83dd\\u83fd\\u83d6\\u841c\\u8438\\u8411\\u8406\\u83d4\\u83df\\u840f\\u8403\\u83f8\\u83f9\\u83ea\\u83c5\\u83c0\\u8426\\u83f0\\u83e1\\u845c\\u8451\\u845a\\u8459\\u8473\\u8487\\u8488\\u847a\\u8489\\u8478\\u843c\\u8446\\u8469\\u8476\\u848c\\u848e\\u8431\\u846d\\u84c1\\u84cd\\u84d0\\u84e6\\u84bd\\u84d3\\u84ca\\u84bf\\u84ba\\u84e0\\u84a1\\u84b9\\u84b4\\u8497\\u84e5\\u84e3\\u850c\\u750d\\u8538\\u84f0\\u8539\\u851f\\u853a\\ufffd\".split(\"\"),e=0;e!=r[221].length;++e)65533!==r[221][e].charCodeAt(0)&&(n[r[221][e]]=56576+e,t[56576+e]=r[221][e]);for(r[222]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8556\\u853b\\u84ff\\u84fc\\u8559\\u8548\\u8568\\u8564\\u855e\\u857a\\u77a2\\u8543\\u8572\\u857b\\u85a4\\u85a8\\u8587\\u858f\\u8579\\u85ae\\u859c\\u8585\\u85b9\\u85b7\\u85b0\\u85d3\\u85c1\\u85dc\\u85ff\\u8627\\u8605\\u8629\\u8616\\u863c\\u5efe\\u5f08\\u593c\\u5941\\u8037\\u5955\\u595a\\u5958\\u530f\\u5c22\\u5c25\\u5c2c\\u5c34\\u624c\\u626a\\u629f\\u62bb\\u62ca\\u62da\\u62d7\\u62ee\\u6322\\u62f6\\u6339\\u634b\\u6343\\u63ad\\u63f6\\u6371\\u637a\\u638e\\u63b4\\u636d\\u63ac\\u638a\\u6369\\u63ae\\u63bc\\u63f2\\u63f8\\u63e0\\u63ff\\u63c4\\u63de\\u63ce\\u6452\\u63c6\\u63be\\u6445\\u6441\\u640b\\u641b\\u6420\\u640c\\u6426\\u6421\\u645e\\u6484\\u646d\\u6496\\ufffd\".split(\"\"),e=0;e!=r[222].length;++e)65533!==r[222][e].charCodeAt(0)&&(n[r[222][e]]=56832+e,t[56832+e]=r[222][e]);for(r[223]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u647a\\u64b7\\u64b8\\u6499\\u64ba\\u64c0\\u64d0\\u64d7\\u64e4\\u64e2\\u6509\\u6525\\u652e\\u5f0b\\u5fd2\\u7519\\u5f11\\u535f\\u53f1\\u53fd\\u53e9\\u53e8\\u53fb\\u5412\\u5416\\u5406\\u544b\\u5452\\u5453\\u5454\\u5456\\u5443\\u5421\\u5457\\u5459\\u5423\\u5432\\u5482\\u5494\\u5477\\u5471\\u5464\\u549a\\u549b\\u5484\\u5476\\u5466\\u549d\\u54d0\\u54ad\\u54c2\\u54b4\\u54d2\\u54a7\\u54a6\\u54d3\\u54d4\\u5472\\u54a3\\u54d5\\u54bb\\u54bf\\u54cc\\u54d9\\u54da\\u54dc\\u54a9\\u54aa\\u54a4\\u54dd\\u54cf\\u54de\\u551b\\u54e7\\u5520\\u54fd\\u5514\\u54f3\\u5522\\u5523\\u550f\\u5511\\u5527\\u552a\\u5567\\u558f\\u55b5\\u5549\\u556d\\u5541\\u5555\\u553f\\u5550\\u553c\\ufffd\".split(\"\"),e=0;e!=r[223].length;++e)65533!==r[223][e].charCodeAt(0)&&(n[r[223][e]]=57088+e,t[57088+e]=r[223][e]);for(r[224]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5537\\u5556\\u5575\\u5576\\u5577\\u5533\\u5530\\u555c\\u558b\\u55d2\\u5583\\u55b1\\u55b9\\u5588\\u5581\\u559f\\u557e\\u55d6\\u5591\\u557b\\u55df\\u55bd\\u55be\\u5594\\u5599\\u55ea\\u55f7\\u55c9\\u561f\\u55d1\\u55eb\\u55ec\\u55d4\\u55e6\\u55dd\\u55c4\\u55ef\\u55e5\\u55f2\\u55f3\\u55cc\\u55cd\\u55e8\\u55f5\\u55e4\\u8f94\\u561e\\u5608\\u560c\\u5601\\u5624\\u5623\\u55fe\\u5600\\u5627\\u562d\\u5658\\u5639\\u5657\\u562c\\u564d\\u5662\\u5659\\u565c\\u564c\\u5654\\u5686\\u5664\\u5671\\u566b\\u567b\\u567c\\u5685\\u5693\\u56af\\u56d4\\u56d7\\u56dd\\u56e1\\u56f5\\u56eb\\u56f9\\u56ff\\u5704\\u570a\\u5709\\u571c\\u5e0f\\u5e19\\u5e14\\u5e11\\u5e31\\u5e3b\\u5e3c\\ufffd\".split(\"\"),e=0;e!=r[224].length;++e)65533!==r[224][e].charCodeAt(0)&&(n[r[224][e]]=57344+e,t[57344+e]=r[224][e]);for(r[225]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5e37\\u5e44\\u5e54\\u5e5b\\u5e5e\\u5e61\\u5c8c\\u5c7a\\u5c8d\\u5c90\\u5c96\\u5c88\\u5c98\\u5c99\\u5c91\\u5c9a\\u5c9c\\u5cb5\\u5ca2\\u5cbd\\u5cac\\u5cab\\u5cb1\\u5ca3\\u5cc1\\u5cb7\\u5cc4\\u5cd2\\u5ce4\\u5ccb\\u5ce5\\u5d02\\u5d03\\u5d27\\u5d26\\u5d2e\\u5d24\\u5d1e\\u5d06\\u5d1b\\u5d58\\u5d3e\\u5d34\\u5d3d\\u5d6c\\u5d5b\\u5d6f\\u5d5d\\u5d6b\\u5d4b\\u5d4a\\u5d69\\u5d74\\u5d82\\u5d99\\u5d9d\\u8c73\\u5db7\\u5dc5\\u5f73\\u5f77\\u5f82\\u5f87\\u5f89\\u5f8c\\u5f95\\u5f99\\u5f9c\\u5fa8\\u5fad\\u5fb5\\u5fbc\\u8862\\u5f61\\u72ad\\u72b0\\u72b4\\u72b7\\u72b8\\u72c3\\u72c1\\u72ce\\u72cd\\u72d2\\u72e8\\u72ef\\u72e9\\u72f2\\u72f4\\u72f7\\u7301\\u72f3\\u7303\\u72fa\\ufffd\".split(\"\"),e=0;e!=r[225].length;++e)65533!==r[225][e].charCodeAt(0)&&(n[r[225][e]]=57600+e,t[57600+e]=r[225][e]);for(r[226]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u72fb\\u7317\\u7313\\u7321\\u730a\\u731e\\u731d\\u7315\\u7322\\u7339\\u7325\\u732c\\u7338\\u7331\\u7350\\u734d\\u7357\\u7360\\u736c\\u736f\\u737e\\u821b\\u5925\\u98e7\\u5924\\u5902\\u9963\\u9967\\u9968\\u9969\\u996a\\u996b\\u996c\\u9974\\u9977\\u997d\\u9980\\u9984\\u9987\\u998a\\u998d\\u9990\\u9991\\u9993\\u9994\\u9995\\u5e80\\u5e91\\u5e8b\\u5e96\\u5ea5\\u5ea0\\u5eb9\\u5eb5\\u5ebe\\u5eb3\\u8d53\\u5ed2\\u5ed1\\u5edb\\u5ee8\\u5eea\\u81ba\\u5fc4\\u5fc9\\u5fd6\\u5fcf\\u6003\\u5fee\\u6004\\u5fe1\\u5fe4\\u5ffe\\u6005\\u6006\\u5fea\\u5fed\\u5ff8\\u6019\\u6035\\u6026\\u601b\\u600f\\u600d\\u6029\\u602b\\u600a\\u603f\\u6021\\u6078\\u6079\\u607b\\u607a\\u6042\\ufffd\".split(\"\"),e=0;e!=r[226].length;++e)65533!==r[226][e].charCodeAt(0)&&(n[r[226][e]]=57856+e,t[57856+e]=r[226][e]);for(r[227]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u606a\\u607d\\u6096\\u609a\\u60ad\\u609d\\u6083\\u6092\\u608c\\u609b\\u60ec\\u60bb\\u60b1\\u60dd\\u60d8\\u60c6\\u60da\\u60b4\\u6120\\u6126\\u6115\\u6123\\u60f4\\u6100\\u610e\\u612b\\u614a\\u6175\\u61ac\\u6194\\u61a7\\u61b7\\u61d4\\u61f5\\u5fdd\\u96b3\\u95e9\\u95eb\\u95f1\\u95f3\\u95f5\\u95f6\\u95fc\\u95fe\\u9603\\u9604\\u9606\\u9608\\u960a\\u960b\\u960c\\u960d\\u960f\\u9612\\u9615\\u9616\\u9617\\u9619\\u961a\\u4e2c\\u723f\\u6215\\u6c35\\u6c54\\u6c5c\\u6c4a\\u6ca3\\u6c85\\u6c90\\u6c94\\u6c8c\\u6c68\\u6c69\\u6c74\\u6c76\\u6c86\\u6ca9\\u6cd0\\u6cd4\\u6cad\\u6cf7\\u6cf8\\u6cf1\\u6cd7\\u6cb2\\u6ce0\\u6cd6\\u6cfa\\u6ceb\\u6cee\\u6cb1\\u6cd3\\u6cef\\u6cfe\\ufffd\".split(\"\"),e=0;e!=r[227].length;++e)65533!==r[227][e].charCodeAt(0)&&(n[r[227][e]]=58112+e,t[58112+e]=r[227][e]);for(r[228]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6d39\\u6d27\\u6d0c\\u6d43\\u6d48\\u6d07\\u6d04\\u6d19\\u6d0e\\u6d2b\\u6d4d\\u6d2e\\u6d35\\u6d1a\\u6d4f\\u6d52\\u6d54\\u6d33\\u6d91\\u6d6f\\u6d9e\\u6da0\\u6d5e\\u6d93\\u6d94\\u6d5c\\u6d60\\u6d7c\\u6d63\\u6e1a\\u6dc7\\u6dc5\\u6dde\\u6e0e\\u6dbf\\u6de0\\u6e11\\u6de6\\u6ddd\\u6dd9\\u6e16\\u6dab\\u6e0c\\u6dae\\u6e2b\\u6e6e\\u6e4e\\u6e6b\\u6eb2\\u6e5f\\u6e86\\u6e53\\u6e54\\u6e32\\u6e25\\u6e44\\u6edf\\u6eb1\\u6e98\\u6ee0\\u6f2d\\u6ee2\\u6ea5\\u6ea7\\u6ebd\\u6ebb\\u6eb7\\u6ed7\\u6eb4\\u6ecf\\u6e8f\\u6ec2\\u6e9f\\u6f62\\u6f46\\u6f47\\u6f24\\u6f15\\u6ef9\\u6f2f\\u6f36\\u6f4b\\u6f74\\u6f2a\\u6f09\\u6f29\\u6f89\\u6f8d\\u6f8c\\u6f78\\u6f72\\u6f7c\\u6f7a\\u6fd1\\ufffd\".split(\"\"),e=0;e!=r[228].length;++e)65533!==r[228][e].charCodeAt(0)&&(n[r[228][e]]=58368+e,t[58368+e]=r[228][e]);for(r[229]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6fc9\\u6fa7\\u6fb9\\u6fb6\\u6fc2\\u6fe1\\u6fee\\u6fde\\u6fe0\\u6fef\\u701a\\u7023\\u701b\\u7039\\u7035\\u704f\\u705e\\u5b80\\u5b84\\u5b95\\u5b93\\u5ba5\\u5bb8\\u752f\\u9a9e\\u6434\\u5be4\\u5bee\\u8930\\u5bf0\\u8e47\\u8b07\\u8fb6\\u8fd3\\u8fd5\\u8fe5\\u8fee\\u8fe4\\u8fe9\\u8fe6\\u8ff3\\u8fe8\\u9005\\u9004\\u900b\\u9026\\u9011\\u900d\\u9016\\u9021\\u9035\\u9036\\u902d\\u902f\\u9044\\u9051\\u9052\\u9050\\u9068\\u9058\\u9062\\u905b\\u66b9\\u9074\\u907d\\u9082\\u9088\\u9083\\u908b\\u5f50\\u5f57\\u5f56\\u5f58\\u5c3b\\u54ab\\u5c50\\u5c59\\u5b71\\u5c63\\u5c66\\u7fbc\\u5f2a\\u5f29\\u5f2d\\u8274\\u5f3c\\u9b3b\\u5c6e\\u5981\\u5983\\u598d\\u59a9\\u59aa\\u59a3\\ufffd\".split(\"\"),e=0;e!=r[229].length;++e)65533!==r[229][e].charCodeAt(0)&&(n[r[229][e]]=58624+e,t[58624+e]=r[229][e]);for(r[230]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u5997\\u59ca\\u59ab\\u599e\\u59a4\\u59d2\\u59b2\\u59af\\u59d7\\u59be\\u5a05\\u5a06\\u59dd\\u5a08\\u59e3\\u59d8\\u59f9\\u5a0c\\u5a09\\u5a32\\u5a34\\u5a11\\u5a23\\u5a13\\u5a40\\u5a67\\u5a4a\\u5a55\\u5a3c\\u5a62\\u5a75\\u80ec\\u5aaa\\u5a9b\\u5a77\\u5a7a\\u5abe\\u5aeb\\u5ab2\\u5ad2\\u5ad4\\u5ab8\\u5ae0\\u5ae3\\u5af1\\u5ad6\\u5ae6\\u5ad8\\u5adc\\u5b09\\u5b17\\u5b16\\u5b32\\u5b37\\u5b40\\u5c15\\u5c1c\\u5b5a\\u5b65\\u5b73\\u5b51\\u5b53\\u5b62\\u9a75\\u9a77\\u9a78\\u9a7a\\u9a7f\\u9a7d\\u9a80\\u9a81\\u9a85\\u9a88\\u9a8a\\u9a90\\u9a92\\u9a93\\u9a96\\u9a98\\u9a9b\\u9a9c\\u9a9d\\u9a9f\\u9aa0\\u9aa2\\u9aa3\\u9aa5\\u9aa7\\u7e9f\\u7ea1\\u7ea3\\u7ea5\\u7ea8\\u7ea9\\ufffd\".split(\"\"),e=0;e!=r[230].length;++e)65533!==r[230][e].charCodeAt(0)&&(n[r[230][e]]=58880+e,t[58880+e]=r[230][e]);for(r[231]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7ead\\u7eb0\\u7ebe\\u7ec0\\u7ec1\\u7ec2\\u7ec9\\u7ecb\\u7ecc\\u7ed0\\u7ed4\\u7ed7\\u7edb\\u7ee0\\u7ee1\\u7ee8\\u7eeb\\u7eee\\u7eef\\u7ef1\\u7ef2\\u7f0d\\u7ef6\\u7efa\\u7efb\\u7efe\\u7f01\\u7f02\\u7f03\\u7f07\\u7f08\\u7f0b\\u7f0c\\u7f0f\\u7f11\\u7f12\\u7f17\\u7f19\\u7f1c\\u7f1b\\u7f1f\\u7f21\\u7f22\\u7f23\\u7f24\\u7f25\\u7f26\\u7f27\\u7f2a\\u7f2b\\u7f2c\\u7f2d\\u7f2f\\u7f30\\u7f31\\u7f32\\u7f33\\u7f35\\u5e7a\\u757f\\u5ddb\\u753e\\u9095\\u738e\\u7391\\u73ae\\u73a2\\u739f\\u73cf\\u73c2\\u73d1\\u73b7\\u73b3\\u73c0\\u73c9\\u73c8\\u73e5\\u73d9\\u987c\\u740a\\u73e9\\u73e7\\u73de\\u73ba\\u73f2\\u740f\\u742a\\u745b\\u7426\\u7425\\u7428\\u7430\\u742e\\u742c\\ufffd\".split(\"\"),e=0;e!=r[231].length;++e)65533!==r[231][e].charCodeAt(0)&&(n[r[231][e]]=59136+e,t[59136+e]=r[231][e]);for(r[232]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u741b\\u741a\\u7441\\u745c\\u7457\\u7455\\u7459\\u7477\\u746d\\u747e\\u749c\\u748e\\u7480\\u7481\\u7487\\u748b\\u749e\\u74a8\\u74a9\\u7490\\u74a7\\u74d2\\u74ba\\u97ea\\u97eb\\u97ec\\u674c\\u6753\\u675e\\u6748\\u6769\\u67a5\\u6787\\u676a\\u6773\\u6798\\u67a7\\u6775\\u67a8\\u679e\\u67ad\\u678b\\u6777\\u677c\\u67f0\\u6809\\u67d8\\u680a\\u67e9\\u67b0\\u680c\\u67d9\\u67b5\\u67da\\u67b3\\u67dd\\u6800\\u67c3\\u67b8\\u67e2\\u680e\\u67c1\\u67fd\\u6832\\u6833\\u6860\\u6861\\u684e\\u6862\\u6844\\u6864\\u6883\\u681d\\u6855\\u6866\\u6841\\u6867\\u6840\\u683e\\u684a\\u6849\\u6829\\u68b5\\u688f\\u6874\\u6877\\u6893\\u686b\\u68c2\\u696e\\u68fc\\u691f\\u6920\\u68f9\\ufffd\".split(\"\"),e=0;e!=r[232].length;++e)65533!==r[232][e].charCodeAt(0)&&(n[r[232][e]]=59392+e,t[59392+e]=r[232][e]);for(r[233]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u6924\\u68f0\\u690b\\u6901\\u6957\\u68e3\\u6910\\u6971\\u6939\\u6960\\u6942\\u695d\\u6984\\u696b\\u6980\\u6998\\u6978\\u6934\\u69cc\\u6987\\u6988\\u69ce\\u6989\\u6966\\u6963\\u6979\\u699b\\u69a7\\u69bb\\u69ab\\u69ad\\u69d4\\u69b1\\u69c1\\u69ca\\u69df\\u6995\\u69e0\\u698d\\u69ff\\u6a2f\\u69ed\\u6a17\\u6a18\\u6a65\\u69f2\\u6a44\\u6a3e\\u6aa0\\u6a50\\u6a5b\\u6a35\\u6a8e\\u6a79\\u6a3d\\u6a28\\u6a58\\u6a7c\\u6a91\\u6a90\\u6aa9\\u6a97\\u6aab\\u7337\\u7352\\u6b81\\u6b82\\u6b87\\u6b84\\u6b92\\u6b93\\u6b8d\\u6b9a\\u6b9b\\u6ba1\\u6baa\\u8f6b\\u8f6d\\u8f71\\u8f72\\u8f73\\u8f75\\u8f76\\u8f78\\u8f77\\u8f79\\u8f7a\\u8f7c\\u8f7e\\u8f81\\u8f82\\u8f84\\u8f87\\u8f8b\\ufffd\".split(\"\"),e=0;e!=r[233].length;++e)65533!==r[233][e].charCodeAt(0)&&(n[r[233][e]]=59648+e,t[59648+e]=r[233][e]);for(r[234]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u8f8d\\u8f8e\\u8f8f\\u8f98\\u8f9a\\u8ece\\u620b\\u6217\\u621b\\u621f\\u6222\\u6221\\u6225\\u6224\\u622c\\u81e7\\u74ef\\u74f4\\u74ff\\u750f\\u7511\\u7513\\u6534\\u65ee\\u65ef\\u65f0\\u660a\\u6619\\u6772\\u6603\\u6615\\u6600\\u7085\\u66f7\\u661d\\u6634\\u6631\\u6636\\u6635\\u8006\\u665f\\u6654\\u6641\\u664f\\u6656\\u6661\\u6657\\u6677\\u6684\\u668c\\u66a7\\u669d\\u66be\\u66db\\u66dc\\u66e6\\u66e9\\u8d32\\u8d33\\u8d36\\u8d3b\\u8d3d\\u8d40\\u8d45\\u8d46\\u8d48\\u8d49\\u8d47\\u8d4d\\u8d55\\u8d59\\u89c7\\u89ca\\u89cb\\u89cc\\u89ce\\u89cf\\u89d0\\u89d1\\u726e\\u729f\\u725d\\u7266\\u726f\\u727e\\u727f\\u7284\\u728b\\u728d\\u728f\\u7292\\u6308\\u6332\\u63b0\\ufffd\".split(\"\"),e=0;e!=r[234].length;++e)65533!==r[234][e].charCodeAt(0)&&(n[r[234][e]]=59904+e,t[59904+e]=r[234][e]);for(r[235]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u643f\\u64d8\\u8004\\u6bea\\u6bf3\\u6bfd\\u6bf5\\u6bf9\\u6c05\\u6c07\\u6c06\\u6c0d\\u6c15\\u6c18\\u6c19\\u6c1a\\u6c21\\u6c29\\u6c24\\u6c2a\\u6c32\\u6535\\u6555\\u656b\\u724d\\u7252\\u7256\\u7230\\u8662\\u5216\\u809f\\u809c\\u8093\\u80bc\\u670a\\u80bd\\u80b1\\u80ab\\u80ad\\u80b4\\u80b7\\u80e7\\u80e8\\u80e9\\u80ea\\u80db\\u80c2\\u80c4\\u80d9\\u80cd\\u80d7\\u6710\\u80dd\\u80eb\\u80f1\\u80f4\\u80ed\\u810d\\u810e\\u80f2\\u80fc\\u6715\\u8112\\u8c5a\\u8136\\u811e\\u812c\\u8118\\u8132\\u8148\\u814c\\u8153\\u8174\\u8159\\u815a\\u8171\\u8160\\u8169\\u817c\\u817d\\u816d\\u8167\\u584d\\u5ab5\\u8188\\u8182\\u8191\\u6ed5\\u81a3\\u81aa\\u81cc\\u6726\\u81ca\\u81bb\\ufffd\".split(\"\"),e=0;e!=r[235].length;++e)65533!==r[235][e].charCodeAt(0)&&(n[r[235][e]]=60160+e,t[60160+e]=r[235][e]);for(r[236]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u81c1\\u81a6\\u6b24\\u6b37\\u6b39\\u6b43\\u6b46\\u6b59\\u98d1\\u98d2\\u98d3\\u98d5\\u98d9\\u98da\\u6bb3\\u5f40\\u6bc2\\u89f3\\u6590\\u9f51\\u6593\\u65bc\\u65c6\\u65c4\\u65c3\\u65cc\\u65ce\\u65d2\\u65d6\\u7080\\u709c\\u7096\\u709d\\u70bb\\u70c0\\u70b7\\u70ab\\u70b1\\u70e8\\u70ca\\u7110\\u7113\\u7116\\u712f\\u7131\\u7173\\u715c\\u7168\\u7145\\u7172\\u714a\\u7178\\u717a\\u7198\\u71b3\\u71b5\\u71a8\\u71a0\\u71e0\\u71d4\\u71e7\\u71f9\\u721d\\u7228\\u706c\\u7118\\u7166\\u71b9\\u623e\\u623d\\u6243\\u6248\\u6249\\u793b\\u7940\\u7946\\u7949\\u795b\\u795c\\u7953\\u795a\\u7962\\u7957\\u7960\\u796f\\u7967\\u797a\\u7985\\u798a\\u799a\\u79a7\\u79b3\\u5fd1\\u5fd0\\ufffd\".split(\"\"),e=0;e!=r[236].length;++e)65533!==r[236][e].charCodeAt(0)&&(n[r[236][e]]=60416+e,t[60416+e]=r[236][e]);for(r[237]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u603c\\u605d\\u605a\\u6067\\u6041\\u6059\\u6063\\u60ab\\u6106\\u610d\\u615d\\u61a9\\u619d\\u61cb\\u61d1\\u6206\\u8080\\u807f\\u6c93\\u6cf6\\u6dfc\\u77f6\\u77f8\\u7800\\u7809\\u7817\\u7818\\u7811\\u65ab\\u782d\\u781c\\u781d\\u7839\\u783a\\u783b\\u781f\\u783c\\u7825\\u782c\\u7823\\u7829\\u784e\\u786d\\u7856\\u7857\\u7826\\u7850\\u7847\\u784c\\u786a\\u789b\\u7893\\u789a\\u7887\\u789c\\u78a1\\u78a3\\u78b2\\u78b9\\u78a5\\u78d4\\u78d9\\u78c9\\u78ec\\u78f2\\u7905\\u78f4\\u7913\\u7924\\u791e\\u7934\\u9f9b\\u9ef9\\u9efb\\u9efc\\u76f1\\u7704\\u770d\\u76f9\\u7707\\u7708\\u771a\\u7722\\u7719\\u772d\\u7726\\u7735\\u7738\\u7750\\u7751\\u7747\\u7743\\u775a\\u7768\\ufffd\".split(\"\"),e=0;e!=r[237].length;++e)65533!==r[237][e].charCodeAt(0)&&(n[r[237][e]]=60672+e,t[60672+e]=r[237][e]);for(r[238]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7762\\u7765\\u777f\\u778d\\u777d\\u7780\\u778c\\u7791\\u779f\\u77a0\\u77b0\\u77b5\\u77bd\\u753a\\u7540\\u754e\\u754b\\u7548\\u755b\\u7572\\u7579\\u7583\\u7f58\\u7f61\\u7f5f\\u8a48\\u7f68\\u7f74\\u7f71\\u7f79\\u7f81\\u7f7e\\u76cd\\u76e5\\u8832\\u9485\\u9486\\u9487\\u948b\\u948a\\u948c\\u948d\\u948f\\u9490\\u9494\\u9497\\u9495\\u949a\\u949b\\u949c\\u94a3\\u94a4\\u94ab\\u94aa\\u94ad\\u94ac\\u94af\\u94b0\\u94b2\\u94b4\\u94b6\\u94b7\\u94b8\\u94b9\\u94ba\\u94bc\\u94bd\\u94bf\\u94c4\\u94c8\\u94c9\\u94ca\\u94cb\\u94cc\\u94cd\\u94ce\\u94d0\\u94d1\\u94d2\\u94d5\\u94d6\\u94d7\\u94d9\\u94d8\\u94db\\u94de\\u94df\\u94e0\\u94e2\\u94e4\\u94e5\\u94e7\\u94e8\\u94ea\\ufffd\".split(\"\"),e=0;e!=r[238].length;++e)65533!==r[238][e].charCodeAt(0)&&(n[r[238][e]]=60928+e,t[60928+e]=r[238][e]);for(r[239]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u94e9\\u94eb\\u94ee\\u94ef\\u94f3\\u94f4\\u94f5\\u94f7\\u94f9\\u94fc\\u94fd\\u94ff\\u9503\\u9502\\u9506\\u9507\\u9509\\u950a\\u950d\\u950e\\u950f\\u9512\\u9513\\u9514\\u9515\\u9516\\u9518\\u951b\\u951d\\u951e\\u951f\\u9522\\u952a\\u952b\\u9529\\u952c\\u9531\\u9532\\u9534\\u9536\\u9537\\u9538\\u953c\\u953e\\u953f\\u9542\\u9535\\u9544\\u9545\\u9546\\u9549\\u954c\\u954e\\u954f\\u9552\\u9553\\u9554\\u9556\\u9557\\u9558\\u9559\\u955b\\u955e\\u955f\\u955d\\u9561\\u9562\\u9564\\u9565\\u9566\\u9567\\u9568\\u9569\\u956a\\u956b\\u956c\\u956f\\u9571\\u9572\\u9573\\u953a\\u77e7\\u77ec\\u96c9\\u79d5\\u79ed\\u79e3\\u79eb\\u7a06\\u5d47\\u7a03\\u7a02\\u7a1e\\u7a14\\ufffd\".split(\"\"),e=0;e!=r[239].length;++e)65533!==r[239][e].charCodeAt(0)&&(n[r[239][e]]=61184+e,t[61184+e]=r[239][e]);for(r[240]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7a39\\u7a37\\u7a51\\u9ecf\\u99a5\\u7a70\\u7688\\u768e\\u7693\\u7699\\u76a4\\u74de\\u74e0\\u752c\\u9e20\\u9e22\\u9e28\\u9e29\\u9e2a\\u9e2b\\u9e2c\\u9e32\\u9e31\\u9e36\\u9e38\\u9e37\\u9e39\\u9e3a\\u9e3e\\u9e41\\u9e42\\u9e44\\u9e46\\u9e47\\u9e48\\u9e49\\u9e4b\\u9e4c\\u9e4e\\u9e51\\u9e55\\u9e57\\u9e5a\\u9e5b\\u9e5c\\u9e5e\\u9e63\\u9e66\\u9e67\\u9e68\\u9e69\\u9e6a\\u9e6b\\u9e6c\\u9e71\\u9e6d\\u9e73\\u7592\\u7594\\u7596\\u75a0\\u759d\\u75ac\\u75a3\\u75b3\\u75b4\\u75b8\\u75c4\\u75b1\\u75b0\\u75c3\\u75c2\\u75d6\\u75cd\\u75e3\\u75e8\\u75e6\\u75e4\\u75eb\\u75e7\\u7603\\u75f1\\u75fc\\u75ff\\u7610\\u7600\\u7605\\u760c\\u7617\\u760a\\u7625\\u7618\\u7615\\u7619\\ufffd\".split(\"\"),e=0;e!=r[240].length;++e)65533!==r[240][e].charCodeAt(0)&&(n[r[240][e]]=61440+e,t[61440+e]=r[240][e]);for(r[241]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u761b\\u763c\\u7622\\u7620\\u7640\\u762d\\u7630\\u763f\\u7635\\u7643\\u763e\\u7633\\u764d\\u765e\\u7654\\u765c\\u7656\\u766b\\u766f\\u7fca\\u7ae6\\u7a78\\u7a79\\u7a80\\u7a86\\u7a88\\u7a95\\u7aa6\\u7aa0\\u7aac\\u7aa8\\u7aad\\u7ab3\\u8864\\u8869\\u8872\\u887d\\u887f\\u8882\\u88a2\\u88c6\\u88b7\\u88bc\\u88c9\\u88e2\\u88ce\\u88e3\\u88e5\\u88f1\\u891a\\u88fc\\u88e8\\u88fe\\u88f0\\u8921\\u8919\\u8913\\u891b\\u890a\\u8934\\u892b\\u8936\\u8941\\u8966\\u897b\\u758b\\u80e5\\u76b2\\u76b4\\u77dc\\u8012\\u8014\\u8016\\u801c\\u8020\\u8022\\u8025\\u8026\\u8027\\u8029\\u8028\\u8031\\u800b\\u8035\\u8043\\u8046\\u804d\\u8052\\u8069\\u8071\\u8983\\u9878\\u9880\\u9883\\ufffd\".split(\"\"),e=0;e!=r[241].length;++e)65533!==r[241][e].charCodeAt(0)&&(n[r[241][e]]=61696+e,t[61696+e]=r[241][e]);for(r[242]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9889\\u988c\\u988d\\u988f\\u9894\\u989a\\u989b\\u989e\\u989f\\u98a1\\u98a2\\u98a5\\u98a6\\u864d\\u8654\\u866c\\u866e\\u867f\\u867a\\u867c\\u867b\\u86a8\\u868d\\u868b\\u86ac\\u869d\\u86a7\\u86a3\\u86aa\\u8693\\u86a9\\u86b6\\u86c4\\u86b5\\u86ce\\u86b0\\u86ba\\u86b1\\u86af\\u86c9\\u86cf\\u86b4\\u86e9\\u86f1\\u86f2\\u86ed\\u86f3\\u86d0\\u8713\\u86de\\u86f4\\u86df\\u86d8\\u86d1\\u8703\\u8707\\u86f8\\u8708\\u870a\\u870d\\u8709\\u8723\\u873b\\u871e\\u8725\\u872e\\u871a\\u873e\\u8748\\u8734\\u8731\\u8729\\u8737\\u873f\\u8782\\u8722\\u877d\\u877e\\u877b\\u8760\\u8770\\u874c\\u876e\\u878b\\u8753\\u8763\\u877c\\u8764\\u8759\\u8765\\u8793\\u87af\\u87a8\\u87d2\\ufffd\".split(\"\"),e=0;e!=r[242].length;++e)65533!==r[242][e].charCodeAt(0)&&(n[r[242][e]]=61952+e,t[61952+e]=r[242][e]);for(r[243]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u87c6\\u8788\\u8785\\u87ad\\u8797\\u8783\\u87ab\\u87e5\\u87ac\\u87b5\\u87b3\\u87cb\\u87d3\\u87bd\\u87d1\\u87c0\\u87ca\\u87db\\u87ea\\u87e0\\u87ee\\u8816\\u8813\\u87fe\\u880a\\u881b\\u8821\\u8839\\u883c\\u7f36\\u7f42\\u7f44\\u7f45\\u8210\\u7afa\\u7afd\\u7b08\\u7b03\\u7b04\\u7b15\\u7b0a\\u7b2b\\u7b0f\\u7b47\\u7b38\\u7b2a\\u7b19\\u7b2e\\u7b31\\u7b20\\u7b25\\u7b24\\u7b33\\u7b3e\\u7b1e\\u7b58\\u7b5a\\u7b45\\u7b75\\u7b4c\\u7b5d\\u7b60\\u7b6e\\u7b7b\\u7b62\\u7b72\\u7b71\\u7b90\\u7ba6\\u7ba7\\u7bb8\\u7bac\\u7b9d\\u7ba8\\u7b85\\u7baa\\u7b9c\\u7ba2\\u7bab\\u7bb4\\u7bd1\\u7bc1\\u7bcc\\u7bdd\\u7bda\\u7be5\\u7be6\\u7bea\\u7c0c\\u7bfe\\u7bfc\\u7c0f\\u7c16\\u7c0b\\ufffd\".split(\"\"),e=0;e!=r[243].length;++e)65533!==r[243][e].charCodeAt(0)&&(n[r[243][e]]=62208+e,t[62208+e]=r[243][e]);for(r[244]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u7c1f\\u7c2a\\u7c26\\u7c38\\u7c41\\u7c40\\u81fe\\u8201\\u8202\\u8204\\u81ec\\u8844\\u8221\\u8222\\u8223\\u822d\\u822f\\u8228\\u822b\\u8238\\u823b\\u8233\\u8234\\u823e\\u8244\\u8249\\u824b\\u824f\\u825a\\u825f\\u8268\\u887e\\u8885\\u8888\\u88d8\\u88df\\u895e\\u7f9d\\u7f9f\\u7fa7\\u7faf\\u7fb0\\u7fb2\\u7c7c\\u6549\\u7c91\\u7c9d\\u7c9c\\u7c9e\\u7ca2\\u7cb2\\u7cbc\\u7cbd\\u7cc1\\u7cc7\\u7ccc\\u7ccd\\u7cc8\\u7cc5\\u7cd7\\u7ce8\\u826e\\u66a8\\u7fbf\\u7fce\\u7fd5\\u7fe5\\u7fe1\\u7fe6\\u7fe9\\u7fee\\u7ff3\\u7cf8\\u7d77\\u7da6\\u7dae\\u7e47\\u7e9b\\u9eb8\\u9eb4\\u8d73\\u8d84\\u8d94\\u8d91\\u8db1\\u8d67\\u8d6d\\u8c47\\u8c49\\u914a\\u9150\\u914e\\u914f\\u9164\\ufffd\".split(\"\"),e=0;e!=r[244].length;++e)65533!==r[244][e].charCodeAt(0)&&(n[r[244][e]]=62464+e,t[62464+e]=r[244][e]);for(r[245]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9162\\u9161\\u9170\\u9169\\u916f\\u917d\\u917e\\u9172\\u9174\\u9179\\u918c\\u9185\\u9190\\u918d\\u9191\\u91a2\\u91a3\\u91aa\\u91ad\\u91ae\\u91af\\u91b5\\u91b4\\u91ba\\u8c55\\u9e7e\\u8db8\\u8deb\\u8e05\\u8e59\\u8e69\\u8db5\\u8dbf\\u8dbc\\u8dba\\u8dc4\\u8dd6\\u8dd7\\u8dda\\u8dde\\u8dce\\u8dcf\\u8ddb\\u8dc6\\u8dec\\u8df7\\u8df8\\u8de3\\u8df9\\u8dfb\\u8de4\\u8e09\\u8dfd\\u8e14\\u8e1d\\u8e1f\\u8e2c\\u8e2e\\u8e23\\u8e2f\\u8e3a\\u8e40\\u8e39\\u8e35\\u8e3d\\u8e31\\u8e49\\u8e41\\u8e42\\u8e51\\u8e52\\u8e4a\\u8e70\\u8e76\\u8e7c\\u8e6f\\u8e74\\u8e85\\u8e8f\\u8e94\\u8e90\\u8e9c\\u8e9e\\u8c78\\u8c82\\u8c8a\\u8c85\\u8c98\\u8c94\\u659b\\u89d6\\u89de\\u89da\\u89dc\\ufffd\".split(\"\"),e=0;e!=r[245].length;++e)65533!==r[245][e].charCodeAt(0)&&(n[r[245][e]]=62720+e,t[62720+e]=r[245][e]);for(r[246]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u89e5\\u89eb\\u89ef\\u8a3e\\u8b26\\u9753\\u96e9\\u96f3\\u96ef\\u9706\\u9701\\u9708\\u970f\\u970e\\u972a\\u972d\\u9730\\u973e\\u9f80\\u9f83\\u9f85\\u9f86\\u9f87\\u9f88\\u9f89\\u9f8a\\u9f8c\\u9efe\\u9f0b\\u9f0d\\u96b9\\u96bc\\u96bd\\u96ce\\u96d2\\u77bf\\u96e0\\u928e\\u92ae\\u92c8\\u933e\\u936a\\u93ca\\u938f\\u943e\\u946b\\u9c7f\\u9c82\\u9c85\\u9c86\\u9c87\\u9c88\\u7a23\\u9c8b\\u9c8e\\u9c90\\u9c91\\u9c92\\u9c94\\u9c95\\u9c9a\\u9c9b\\u9c9e\\u9c9f\\u9ca0\\u9ca1\\u9ca2\\u9ca3\\u9ca5\\u9ca6\\u9ca7\\u9ca8\\u9ca9\\u9cab\\u9cad\\u9cae\\u9cb0\\u9cb1\\u9cb2\\u9cb3\\u9cb4\\u9cb5\\u9cb6\\u9cb7\\u9cba\\u9cbb\\u9cbc\\u9cbd\\u9cc4\\u9cc5\\u9cc6\\u9cc7\\u9cca\\u9ccb\\ufffd\".split(\"\"),e=0;e!=r[246].length;++e)65533!==r[246][e].charCodeAt(0)&&(n[r[246][e]]=62976+e,t[62976+e]=r[246][e]);for(r[247]=\"\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\ufffd\\u9ccc\\u9ccd\\u9cce\\u9ccf\\u9cd0\\u9cd3\\u9cd4\\u9cd5\\u9cd7\\u9cd8\\u9cd9\\u9cdc\\u9cdd\\u9cdf\\u9ce2\\u977c\\u9785\\u9791\\u9792\\u9794\\u97af\\u97ab\\u97a3\\u97b2\\u97b4\\u9ab1\\u9ab0\\u9ab7\\u9e58\\u9ab6\\u9aba\\u9abc\\u9ac1\\u9ac0\\u9ac5\\u9ac2\\u9acb\\u9acc\\u9ad1\\u9b45\\u9b43\\u9b47\\u9b49\\u9b48\\u9b4d\\u9b51\\u98e8\\u990d\\u992e\\u9955\\u9954\\u9adf\\u9ae1\\u9ae6\\u9aef\\u9aeb\\u9afb\\u9aed\\u9af9\\u9b08\\u9b0f\\u9b13\\u9b1f\\u9b23\\u9ebd\\u9ebe\\u7e3b\\u9e82\\u9e87\\u9e88\\u9e8b\\u9e92\\u93d6\\u9e9d\\u9e9f\\u9edb\\u9edc\\u9edd\\u9ee0\\u9edf\\u9ee2\\u9ee9\\u9ee7\\u9ee5\\u9eea\\u9eef\\u9f22\\u9f2c\\u9f2f\\u9f39\\u9f37\\u9f3d\\u9f3e\\u9f44\\ufffd\".split(\"\"),e=0;e!=r[247].length;++e)65533!==r[247][e].charCodeAt(0)&&(n[r[247][e]]=63232+e,t[63232+e]=r[247][e]);return{enc:n,dec:t}}(),r[10029]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\xc4\\u0100\\u0101\\xc9\\u0104\\xd6\\xdc\\xe1\\u0105\\u010c\\xe4\\u010d\\u0106\\u0107\\xe9\\u0179\\u017a\\u010e\\xed\\u010f\\u0112\\u0113\\u0116\\xf3\\u0117\\xf4\\xf6\\xf5\\xfa\\u011a\\u011b\\xfc\\u2020\\xb0\\u0118\\xa3\\xa7\\u2022\\xb6\\xdf\\xae\\xa9\\u2122\\u0119\\xa8\\u2260\\u0123\\u012e\\u012f\\u012a\\u2264\\u2265\\u012b\\u0136\\u2202\\u2211\\u0142\\u013b\\u013c\\u013d\\u013e\\u0139\\u013a\\u0145\\u0146\\u0143\\xac\\u221a\\u0144\\u0147\\u2206\\xab\\xbb\\u2026\\xa0\\u0148\\u0150\\xd5\\u0151\\u014c\\u2013\\u2014\\u201c\\u201d\\u2018\\u2019\\xf7\\u25ca\\u014d\\u0154\\u0155\\u0158\\u2039\\u203a\\u0159\\u0156\\u0157\\u0160\\u201a\\u201e\\u0161\\u015a\\u015b\\xc1\\u0164\\u0165\\xcd\\u017d\\u017e\\u016a\\xd3\\xd4\\u016b\\u016e\\xda\\u016f\\u0170\\u0171\\u0172\\u0173\\xdd\\xfd\\u0137\\u017b\\u0141\\u017c\\u0122\\u02c7\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[10079]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\xc4\\xc5\\xc7\\xc9\\xd1\\xd6\\xdc\\xe1\\xe0\\xe2\\xe4\\xe3\\xe5\\xe7\\xe9\\xe8\\xea\\xeb\\xed\\xec\\xee\\xef\\xf1\\xf3\\xf2\\xf4\\xf6\\xf5\\xfa\\xf9\\xfb\\xfc\\xdd\\xb0\\xa2\\xa3\\xa7\\u2022\\xb6\\xdf\\xae\\xa9\\u2122\\xb4\\xa8\\u2260\\xc6\\xd8\\u221e\\xb1\\u2264\\u2265\\xa5\\xb5\\u2202\\u2211\\u220f\\u03c0\\u222b\\xaa\\xba\\u2126\\xe6\\xf8\\xbf\\xa1\\xac\\u221a\\u0192\\u2248\\u2206\\xab\\xbb\\u2026\\xa0\\xc0\\xc3\\xd5\\u0152\\u0153\\u2013\\u2014\\u201c\\u201d\\u2018\\u2019\\xf7\\u25ca\\xff\\u0178\\u2044\\xa4\\xd0\\xf0\\xde\\xfe\\xfd\\xb7\\u201a\\u201e\\u2030\\xc2\\xca\\xc1\\xcb\\xc8\\xcd\\xce\\xcf\\xcc\\xd3\\xd4\\ufffd\\xd2\\xda\\xdb\\xd9\\u0131\\u02c6\\u02dc\\xaf\\u02d8\\u02d9\\u02da\\xb8\\u02dd\\u02db\\u02c7\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),r[10081]=function(){for(var e=\"\\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\xc4\\xc5\\xc7\\xc9\\xd1\\xd6\\xdc\\xe1\\xe0\\xe2\\xe4\\xe3\\xe5\\xe7\\xe9\\xe8\\xea\\xeb\\xed\\xec\\xee\\xef\\xf1\\xf3\\xf2\\xf4\\xf6\\xf5\\xfa\\xf9\\xfb\\xfc\\u2020\\xb0\\xa2\\xa3\\xa7\\u2022\\xb6\\xdf\\xae\\xa9\\u2122\\xb4\\xa8\\u2260\\xc6\\xd8\\u221e\\xb1\\u2264\\u2265\\xa5\\xb5\\u2202\\u2211\\u220f\\u03c0\\u222b\\xaa\\xba\\u2126\\xe6\\xf8\\xbf\\xa1\\xac\\u221a\\u0192\\u2248\\u2206\\xab\\xbb\\u2026\\xa0\\xc0\\xc3\\xd5\\u0152\\u0153\\u2013\\u2014\\u201c\\u201d\\u2018\\u2019\\xf7\\u25ca\\xff\\u0178\\u011e\\u011f\\u0130\\u0131\\u015e\\u015f\\u2021\\xb7\\u201a\\u201e\\u2030\\xc2\\xca\\xc1\\xcb\\xc8\\xcd\\xce\\xcf\\xcc\\xd3\\xd4\\ufffd\\xd2\\xda\\xdb\\xd9\\ufffd\\u02c6\\u02dc\\xaf\\u02d8\\u02d9\\u02da\\xb8\\u02dd\\u02db\\u02c7\",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),e.exports&&\"undefined\"==typeof DO_NOT_EXPORT_CODEPAGE&&(e.exports=r),function(t,n){\"use strict\";if(void 0===r){var i=r;e.exports&&\"undefined\"==typeof DO_NOT_EXPORT_CODEPAGE?e.exports=n(i):t.cptable=n(i)}else r=n(r)}(this,(function(e){\"use strict\";var t={1200:\"utf16le\",1201:\"utf16be\",12e3:\"utf32le\",12001:\"utf32be\",16969:\"utf64le\",20127:\"ascii\",65e3:\"utf7\",65001:\"utf8\"},n=[874,1250,1251,1252,1253,1254,1255,1256,1e4],r=[932,936,949,950],i=[65001],s={},o={},a={},c={},l=function(e){return String.fromCharCode(e)},h=function(e){return e.charCodeAt(0)},d=\"undefined\"!=typeof Buffer,u=function(){};if(d){var f=!Buffer.from;if(!f)try{Buffer.from(\"foo\",\"utf8\")}catch(k){f=!0}u=f?function(e,t){return t?new Buffer(e,t):new Buffer(e)}:Buffer.from.bind(Buffer),Buffer.allocUnsafe||(Buffer.allocUnsafe=function(e){return new Buffer(e)});var g=1024,p=Buffer.allocUnsafe(g),m=function(t){var n=function(e){for(var t=Buffer.allocUnsafe(65536),n=0;n<65536;++n)t[n]=0;for(var r=Object.keys(e),i=r.length,s=0,o=r[s];s<i;++s)(o=r[s])&&(t[o.charCodeAt(0)]=e[o]);return t}(e[t].enc);return function(e,t){var r,i=e.length,s=0,o=0,a=0,c=0;if(\"string\"==typeof e)for(r=Buffer.allocUnsafe(i),s=0;s<i;++s)r[s]=n[e.charCodeAt(s)];else if(Buffer.isBuffer(e)){for(r=Buffer.allocUnsafe(2*i),o=0,s=0;s<i;++s)(a=e[s])<128?r[o++]=n[a]:a<224?(r[o++]=n[((31&a)<<6)+(63&e[s+1])],++s):a<240?(r[o++]=n[((15&a)<<12)+((63&e[s+1])<<6)+(63&e[s+2])],s+=2):(c=((7&a)<<18)+((63&e[s+1])<<12)+((63&e[s+2])<<6)+(63&e[s+3]),s+=3,c<65536?r[o++]=n[c]:(r[o++]=n[55296+((c-=65536)>>10&1023)],r[o++]=n[56320+(1023&c)]));r=r.slice(0,o)}else for(r=Buffer.allocUnsafe(i),s=0;s<i;++s)r[s]=n[e[s].charCodeAt(0)];return t&&\"buf\"!==t?\"arr\"!==t?r.toString(\"binary\"):[].slice.call(r):r}},C=function(t){var n=e[t].dec,r=Buffer.allocUnsafe(131072),i=0,s=\"\";for(i=0;i<n.length;++i)if(s=n[i]){var o=s.charCodeAt(0);r[2*i]=255&o,r[2*i+1]=o>>8}return function(e){var t=e.length,n=0,i=0;if(2*t>g&&(g=2*t,p=Buffer.allocUnsafe(g)),Buffer.isBuffer(e))for(n=0;n<t;n++)p[2*n]=r[i=2*e[n]],p[2*n+1]=r[i+1];else if(\"string\"==typeof e)for(n=0;n<t;n++)i=2*e.charCodeAt(n),p[2*n]=r[i],p[2*n+1]=r[i+1];else for(n=0;n<t;n++)p[2*n]=r[i=2*e[n]],p[2*n+1]=r[i+1];return p.slice(0,2*t).toString(\"ucs2\")}},b=function(t){for(var n=e[t].enc,r=Buffer.allocUnsafe(131072),i=0;i<131072;++i)r[i]=0;for(var s=Object.keys(n),o=0,a=s[o];o<s.length;++o)if(a=s[o]){var c=a.charCodeAt(0);r[2*c]=255&n[a],r[2*c+1]=n[a]>>8}return function(e,t){var n=e.length,i=Buffer.allocUnsafe(2*n),s=0,o=0,a=0,c=0,l=0;if(\"string\"==typeof e){for(s=c=0;s<n;++s)o=2*e.charCodeAt(s),i[c++]=r[o+1]||r[o],r[o+1]>0&&(i[c++]=r[o]);i=i.slice(0,c)}else if(Buffer.isBuffer(e)){for(s=c=0;s<n;++s)(l=e[s])<128?o=l:l<224?(o=((31&l)<<6)+(63&e[s+1]),++s):l<240?(o=((15&l)<<12)+((63&e[s+1])<<6)+(63&e[s+2]),s+=2):(o=((7&l)<<18)+((63&e[s+1])<<12)+((63&e[s+2])<<6)+(63&e[s+3]),s+=3),o<65536?(i[c++]=r[1+(o*=2)]||r[o],r[o+1]>0&&(i[c++]=r[o])):(i[c++]=r[1+(o=2*(55296+((a=o-65536)>>10&1023)))]||r[o],r[o+1]>0&&(i[c++]=r[o]),i[c++]=r[1+(o=2*(56320+(1023&a)))]||r[o],r[o+1]>0&&(i[c++]=r[o]));i=i.slice(0,c)}else for(s=c=0;s<n;s++)o=2*e[s].charCodeAt(0),i[c++]=r[o+1]||r[o],r[o+1]>0&&(i[c++]=r[o]);return t&&\"buf\"!==t?\"arr\"!==t?i.toString(\"binary\"):[].slice.call(i):i}},v=function(t){var n,r=e[t].dec,i=Buffer.allocUnsafe(131072),s=0,o=0,a=0,c=0;for(c=0;c<65536;++c)i[2*c]=255,i[2*c+1]=253;for(s=0;s<r.length;++s)(n=r[s])&&(o=n.charCodeAt(0),i[a=2*s]=255&o,i[a+1]=o>>8);return function(e){var t=e.length,n=Buffer.allocUnsafe(2*t),r=0,s=0,o=0;if(Buffer.isBuffer(e))for(r=0;r<t;r++)255===i[s=2*e[r]]&&253===i[s+1]&&(s=2*((e[r]<<8)+e[r+1]),++r),n[o++]=i[s],n[o++]=i[s+1];else if(\"string\"==typeof e)for(r=0;r<t;r++)s=2*e.charCodeAt(r),255===i[s]&&253===i[s+1]&&(s=2*((e.charCodeAt(r)<<8)+e.charCodeAt(r+1)),++r),n[o++]=i[s],n[o++]=i[s+1];else for(r=0;r<t;r++)255===i[s=2*e[r]]&&253===i[s+1]&&(s=2*((e[r]<<8)+e[r+1]),++r),n[o++]=i[s],n[o++]=i[s+1];return n.slice(0,o).toString(\"ucs2\")}};s[65001]=function e(t){if(\"string\"==typeof t)return e(t.split(\"\").map(h));var n=t.length,r=0,i=0;4*n>g&&(g=4*n,p=Buffer.allocUnsafe(g));var s=0;n>=3&&239==t[0]&&187==t[1]&&191==t[2]&&(s=3);for(var o=1,a=0,c=0;s<n;s+=o)o=1,(c=t[s])<128?r=c:c<224?(r=64*(31&c)+(63&t[s+1]),o=2):c<240?(r=((15&c)<<12)+64*(63&t[s+1])+(63&t[s+2]),o=3):(r=262144*(7&c)+((63&t[s+1])<<12)+64*(63&t[s+2])+(63&t[s+3]),o=4),r<65536?(p[a++]=255&r,p[a++]=r>>8):(i=55296+((r-=65536)>>10&1023),r=56320+(1023&r),p[a++]=255&i,p[a++]=i>>>8,p[a++]=255&r,p[a++]=r>>>8&255);return p.slice(0,a).toString(\"ucs2\")},o[65001]=function(e,t){if(d&&Buffer.isBuffer(e))return t&&\"buf\"!==t?\"arr\"!==t?e.toString(\"binary\"):[].slice.call(e):e;var n=e.length,r=0,i=0,s=0,o=\"string\"==typeof e;4*n>g&&(g=4*n,p=Buffer.allocUnsafe(g));for(var a=0;a<n;++a)(r=o?e.charCodeAt(a):e[a].charCodeAt(0))<=127?p[s++]=r:r<=2047?(p[s++]=192+(r>>6),p[s++]=128+(63&r)):r>=55296&&r<=57343?(r-=55296,++a,i=(o?e.charCodeAt(a):e[a].charCodeAt(0))-56320+(r<<10),p[s++]=240+(i>>>18&7),p[s++]=144+(i>>>12&63),p[s++]=128+(i>>>6&63),p[s++]=128+(63&i)):(p[s++]=224+(r>>12),p[s++]=128+(r>>6&63),p[s++]=128+(63&r));return t&&\"buf\"!==t?\"arr\"!==t?p.slice(0,s).toString(\"binary\"):[].slice.call(p,0,s):p.slice(0,s)}}var I=function(){if(d){if(a[n[0]])return;var t=0,l=0;for(t=0;t<n.length;++t)e[l=n[t]]&&(a[l]=C(l),c[l]=m(l));for(t=0;t<r.length;++t)e[l=r[t]]&&(a[l]=v(l),c[l]=b(l));for(t=0;t<i.length;++t)s[l=i[t]]&&(a[l]=s[l]),o[l]&&(c[l]=o[l])}},A=function(e,t){return\"\"},y=function(e){delete a[e],delete c[e]},w={encache:I,decache:function(){if(d){if(!a[n[0]])return;n.forEach(y),r.forEach(y),i.forEach(y)}x=A,E=0},sbcs:n,dbcs:r};I();var S=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",x=A,E=0;return e.utils={decode:function n(r,i){var s;if(s=a[r])return s(i);if(\"string\"==typeof i)return n(r,i.split(\"\").map(h));var o,c=i.length,l=new Array(c),u=\"\",f=0,g=0,p=1,m=0,C=0,b=e[r],v=\"\";if(b&&(o=b.dec))for(g=0;g<c;g+=p){if(p=2,(u=o[(i[g]<<8)+i[g+1]])||(p=1,u=o[i[g]]),!u)throw new Error(\"Unrecognized code: \"+i[g]+\" \"+i[g+p-1]+\" \"+g+\" \"+p+\" \"+o[i[g]]);l[m++]=u}else{if(!(v=t[r]))throw new Error(\"Unrecognized CP: \"+r);switch(v){case\"utf8\":for(c>=3&&239==i[0]&&187==i[1]&&191==i[2]&&(g=3);g<c;g+=p)p=1,i[g]<128?f=i[g]:i[g]<224?(f=64*(31&i[g])+(63&i[g+1]),p=2):i[g]<240?(f=((15&i[g])<<12)+64*(63&i[g+1])+(63&i[g+2]),p=3):(f=262144*(7&i[g])+((63&i[g+1])<<12)+64*(63&i[g+2])+(63&i[g+3]),p=4),f<65536||(C=55296+((f-=65536)>>10&1023),f=56320+(1023&f),l[m++]=String.fromCharCode(C)),l[m++]=String.fromCharCode(f);break;case\"ascii\":if(d&&Buffer.isBuffer(i))return i.toString(v);for(g=0;g<c;g++)l[g]=String.fromCharCode(i[g]);m=c;break;case\"utf16le\":if(c>=2&&255==i[0]&&254==i[1]&&(g=2),d&&Buffer.isBuffer(i))return i.toString(v);for(p=2;g+1<c;g+=p)l[m++]=String.fromCharCode((i[g+1]<<8)+i[g]);break;case\"utf16be\":for(c>=2&&254==i[0]&&255==i[1]&&(g=2),p=2;g+1<c;g+=p)l[m++]=String.fromCharCode((i[g]<<8)+i[g+1]);break;case\"utf32le\":for(c>=4&&255==i[0]&&254==i[1]&&0===i[2]&&0===i[3]&&(g=4),p=4;g<c;g+=p)(f=(i[g+3]<<24)+(i[g+2]<<16)+(i[g+1]<<8)+i[g])>65535?(f-=65536,l[m++]=String.fromCharCode(55296+(f>>10&1023)),l[m++]=String.fromCharCode(56320+(1023&f))):l[m++]=String.fromCharCode(f);break;case\"utf32be\":for(c>=4&&255==i[3]&&254==i[2]&&0===i[1]&&0===i[0]&&(g=4),p=4;g<c;g+=p)(f=(i[g]<<24)+(i[g+1]<<16)+(i[g+2]<<8)+i[g+3])>65535?(f-=65536,l[m++]=String.fromCharCode(55296+(f>>10&1023)),l[m++]=String.fromCharCode(56320+(1023&f))):l[m++]=String.fromCharCode(f);break;case\"utf7\":for(c>=4&&43==i[0]&&47==i[1]&&118==i[2]&&(c>=5&&56==i[3]&&45==i[4]?g=5:56!=i[3]&&57!=i[3]&&43!=i[3]&&47!=i[3]||(g=4));g<c;g+=p)if(43===i[g])if(p=1,45!==i[g+1]){for(;String.fromCharCode(i[g+p]).match(/[A-Za-z0-9+\\/]/);)p++;var I=0;45===i[g+p]&&(++p,I=1);for(var A=[],y=\"\",w=0,x=0,E=0,k=0,_=1;_<p-I&&(w=S.indexOf(String.fromCharCode(i[g+_++])),x=S.indexOf(String.fromCharCode(i[g+_++])),A.push(w<<2|x>>4),-1!==(E=S.indexOf(String.fromCharCode(i[g+_++]))))&&(A.push((15&x)<<4|E>>2),-1!==(k=S.indexOf(String.fromCharCode(i[g+_++]))));)k<64&&A.push((3&E)<<6|k);for(y=n(1201,A),_=0;_<y.length;++_)l[m++]=y.charAt(_)}else p=2,l[m++]=\"+\";else p=1,l[m++]=String.fromCharCode(i[g]);break;default:throw new Error(\"Unsupported magic: \"+r+\" \"+t[r])}}return l.slice(0,m).join(\"\")},encode:function n(r,i,s){if(r===E&&x)return x(i,s);if(c[r])return(x=c[E=r])(i,s);d&&Buffer.isBuffer(i)&&(i=i.toString(\"utf8\"));var o,a=i.length,h=d?Buffer.allocUnsafe(4*a):[],f=0,g=0,p=0,m=0,C=e[r],b=\"\",v=\"string\"==typeof i;if(C&&(o=C.enc))for(g=0;g<a;++g,++p)(f=o[v?i.charAt(g):i[g]])>255?(h[p]=f>>8,h[++p]=255&f):h[p]=255&f;else{if(!(b=t[r]))throw new Error(\"Unrecognized CP: \"+r);switch(b){case\"utf8\":if(d&&v){p=(h=u(i,b)).length;break}for(g=0;g<a;++g,++p)(f=v?i.charCodeAt(g):i[g].charCodeAt(0))<=127?h[p]=f:f<=2047?(h[p]=192+(f>>6),h[++p]=128+(63&f)):f>=55296&&f<=57343?(f-=55296,m=(v?i.charCodeAt(++g):i[++g].charCodeAt(0))-56320+(f<<10),h[p]=240+(m>>>18&7),h[++p]=144+(m>>>12&63),h[++p]=128+(m>>>6&63),h[++p]=128+(63&m)):(h[p]=224+(f>>12),h[++p]=128+(f>>6&63),h[++p]=128+(63&f));break;case\"ascii\":if(d&&\"string\"==typeof i){p=(h=u(i,b)).length;break}for(g=0;g<a;++g,++p){if(!((f=v?i.charCodeAt(g):i[g].charCodeAt(0))<=127))throw new Error(\"bad ascii \"+f);h[p]=f}break;case\"utf16le\":if(d&&\"string\"==typeof i){p=(h=u(i,b)).length;break}for(g=0;g<a;++g)f=v?i.charCodeAt(g):i[g].charCodeAt(0),h[p++]=255&f,h[p++]=f>>8;break;case\"utf16be\":for(g=0;g<a;++g)f=v?i.charCodeAt(g):i[g].charCodeAt(0),h[p++]=f>>8,h[p++]=255&f;break;case\"utf32le\":for(g=0;g<a;++g)(f=v?i.charCodeAt(g):i[g].charCodeAt(0))>=55296&&f<=57343&&(f=65536+(f-55296<<10)+(i[++g].charCodeAt(0)-56320)),h[p++]=255&f,h[p++]=255&(f>>=8),h[p++]=255&(f>>=8),h[p++]=255&(f>>=8);break;case\"utf32be\":for(g=0;g<a;++g)(f=v?i.charCodeAt(g):i[g].charCodeAt(0))>=55296&&f<=57343&&(f=65536+(f-55296<<10)+(i[++g].charCodeAt(0)-56320)),h[p+3]=255&f,h[p+2]=255&(f>>=8),h[p+1]=255&(f>>=8),h[p]=255&(f>>=8),p+=4;break;case\"utf7\":for(g=0;g<a;g++){var I=v?i.charAt(g):i[g].charAt(0);if(\"+\"!==I)if(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'(),-./:?\".indexOf(I)>-1)h[p++]=I.charCodeAt(0);else{var A=n(1201,I);h[p++]=43,h[p++]=S.charCodeAt(A[0]>>2),h[p++]=S.charCodeAt(((3&A[0])<<4)+((A[1]||0)>>4)),h[p++]=S.charCodeAt(((15&A[1])<<2)+((A[2]||0)>>6)),h[p++]=45}else h[p++]=43,h[p++]=45}break;default:throw new Error(\"Unsupported magic: \"+r+\" \"+t[r])}}return h=h.slice(0,p),d?s&&\"buf\"!==s?\"arr\"!==s?h.toString(\"binary\"):[].slice.call(h):h:\"str\"==s?h.map(l).join(\"\"):h},hascp:function(n){return!(!e[n]&&!t[n])},magic:t,cache:w},e}))},YfBG:function(e,t,n){self,e.exports=function(){return t={6835:function(e){\"use strict\";e.exports=JSON.parse('{\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"$id\":\"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\"description\":\"Meta-schema for $data reference (JSON Schema extension proposal)\",\"type\":\"object\",\"required\":[\"$data\"],\"properties\":{\"$data\":{\"type\":\"string\",\"anyOf\":[{\"format\":\"relative-json-pointer\"},{\"format\":\"json-pointer\"}]}},\"additionalProperties\":false}')},2689:function(e){\"use strict\";e.exports=JSON.parse('{\"id\":\"http://json-schema.org/draft-04/schema#\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"description\":\"Core schema meta-schema\",\"definitions\":{\"schemaArray\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#\"}},\"positiveInteger\":{\"type\":\"integer\",\"minimum\":0},\"positiveIntegerDefault0\":{\"allOf\":[{\"$ref\":\"#/definitions/positiveInteger\"},{\"default\":0}]},\"simpleTypes\":{\"enum\":[\"array\",\"boolean\",\"integer\",\"null\",\"number\",\"object\",\"string\"]},\"stringArray\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"minItems\":1,\"uniqueItems\":true}},\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"$schema\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"default\":{},\"multipleOf\":{\"type\":\"number\",\"minimum\":0,\"exclusiveMinimum\":true},\"maximum\":{\"type\":\"number\"},\"exclusiveMaximum\":{\"type\":\"boolean\",\"default\":false},\"minimum\":{\"type\":\"number\"},\"exclusiveMinimum\":{\"type\":\"boolean\",\"default\":false},\"maxLength\":{\"$ref\":\"#/definitions/positiveInteger\"},\"minLength\":{\"$ref\":\"#/definitions/positiveIntegerDefault0\"},\"pattern\":{\"type\":\"string\",\"format\":\"regex\"},\"additionalItems\":{\"anyOf\":[{\"type\":\"boolean\"},{\"$ref\":\"#\"}],\"default\":{}},\"items\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/schemaArray\"}],\"default\":{}},\"maxItems\":{\"$ref\":\"#/definitions/positiveInteger\"},\"minItems\":{\"$ref\":\"#/definitions/positiveIntegerDefault0\"},\"uniqueItems\":{\"type\":\"boolean\",\"default\":false},\"maxProperties\":{\"$ref\":\"#/definitions/positiveInteger\"},\"minProperties\":{\"$ref\":\"#/definitions/positiveIntegerDefault0\"},\"required\":{\"$ref\":\"#/definitions/stringArray\"},\"additionalProperties\":{\"anyOf\":[{\"type\":\"boolean\"},{\"$ref\":\"#\"}],\"default\":{}},\"definitions\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"properties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"patternProperties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"dependencies\":{\"type\":\"object\",\"additionalProperties\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/stringArray\"}]}},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true},\"type\":{\"anyOf\":[{\"$ref\":\"#/definitions/simpleTypes\"},{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/simpleTypes\"},\"minItems\":1,\"uniqueItems\":true}]},\"format\":{\"type\":\"string\"},\"allOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"anyOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"oneOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"not\":{\"$ref\":\"#\"}},\"dependencies\":{\"exclusiveMaximum\":[\"maximum\"],\"exclusiveMinimum\":[\"minimum\"]},\"default\":{}}')},1030:function(e){\"use strict\";e.exports=JSON.parse('{\"$schema\":\"http://json-schema.org/draft-06/schema#\",\"$id\":\"http://json-schema.org/draft-06/schema#\",\"title\":\"Core schema meta-schema\",\"definitions\":{\"schemaArray\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#\"}},\"nonNegativeInteger\":{\"type\":\"integer\",\"minimum\":0},\"nonNegativeIntegerDefault0\":{\"allOf\":[{\"$ref\":\"#/definitions/nonNegativeInteger\"},{\"default\":0}]},\"simpleTypes\":{\"enum\":[\"array\",\"boolean\",\"integer\",\"null\",\"number\",\"object\",\"string\"]},\"stringArray\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"uniqueItems\":true,\"default\":[]}},\"type\":[\"object\",\"boolean\"],\"properties\":{\"$id\":{\"type\":\"string\",\"format\":\"uri-reference\"},\"$schema\":{\"type\":\"string\",\"format\":\"uri\"},\"$ref\":{\"type\":\"string\",\"format\":\"uri-reference\"},\"title\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"default\":{},\"examples\":{\"type\":\"array\",\"items\":{}},\"multipleOf\":{\"type\":\"number\",\"exclusiveMinimum\":0},\"maximum\":{\"type\":\"number\"},\"exclusiveMaximum\":{\"type\":\"number\"},\"minimum\":{\"type\":\"number\"},\"exclusiveMinimum\":{\"type\":\"number\"},\"maxLength\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minLength\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"pattern\":{\"type\":\"string\",\"format\":\"regex\"},\"additionalItems\":{\"$ref\":\"#\"},\"items\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/schemaArray\"}],\"default\":{}},\"maxItems\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minItems\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"uniqueItems\":{\"type\":\"boolean\",\"default\":false},\"contains\":{\"$ref\":\"#\"},\"maxProperties\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minProperties\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"required\":{\"$ref\":\"#/definitions/stringArray\"},\"additionalProperties\":{\"$ref\":\"#\"},\"definitions\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"properties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"patternProperties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"dependencies\":{\"type\":\"object\",\"additionalProperties\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/stringArray\"}]}},\"propertyNames\":{\"$ref\":\"#\"},\"const\":{},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true},\"type\":{\"anyOf\":[{\"$ref\":\"#/definitions/simpleTypes\"},{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/simpleTypes\"},\"minItems\":1,\"uniqueItems\":true}]},\"format\":{\"type\":\"string\"},\"allOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"anyOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"oneOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"not\":{\"$ref\":\"#\"}},\"default\":{}}')},38:function(e){\"use strict\";e.exports=JSON.parse('{\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"$id\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"Core schema meta-schema\",\"definitions\":{\"schemaArray\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#\"}},\"nonNegativeInteger\":{\"type\":\"integer\",\"minimum\":0},\"nonNegativeIntegerDefault0\":{\"allOf\":[{\"$ref\":\"#/definitions/nonNegativeInteger\"},{\"default\":0}]},\"simpleTypes\":{\"enum\":[\"array\",\"boolean\",\"integer\",\"null\",\"number\",\"object\",\"string\"]},\"stringArray\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"uniqueItems\":true,\"default\":[]}},\"type\":[\"object\",\"boolean\"],\"properties\":{\"$id\":{\"type\":\"string\",\"format\":\"uri-reference\"},\"$schema\":{\"type\":\"string\",\"format\":\"uri\"},\"$ref\":{\"type\":\"string\",\"format\":\"uri-reference\"},\"$comment\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"default\":true,\"readOnly\":{\"type\":\"boolean\",\"default\":false},\"examples\":{\"type\":\"array\",\"items\":true},\"multipleOf\":{\"type\":\"number\",\"exclusiveMinimum\":0},\"maximum\":{\"type\":\"number\"},\"exclusiveMaximum\":{\"type\":\"number\"},\"minimum\":{\"type\":\"number\"},\"exclusiveMinimum\":{\"type\":\"number\"},\"maxLength\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minLength\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"pattern\":{\"type\":\"string\",\"format\":\"regex\"},\"additionalItems\":{\"$ref\":\"#\"},\"items\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/schemaArray\"}],\"default\":true},\"maxItems\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minItems\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"uniqueItems\":{\"type\":\"boolean\",\"default\":false},\"contains\":{\"$ref\":\"#\"},\"maxProperties\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minProperties\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"required\":{\"$ref\":\"#/definitions/stringArray\"},\"additionalProperties\":{\"$ref\":\"#\"},\"definitions\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"properties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"patternProperties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"propertyNames\":{\"format\":\"regex\"},\"default\":{}},\"dependencies\":{\"type\":\"object\",\"additionalProperties\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/stringArray\"}]}},\"propertyNames\":{\"$ref\":\"#\"},\"const\":true,\"enum\":{\"type\":\"array\",\"items\":true,\"minItems\":1,\"uniqueItems\":true},\"type\":{\"anyOf\":[{\"$ref\":\"#/definitions/simpleTypes\"},{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/simpleTypes\"},\"minItems\":1,\"uniqueItems\":true}]},\"format\":{\"type\":\"string\"},\"contentMediaType\":{\"type\":\"string\"},\"contentEncoding\":{\"type\":\"string\"},\"if\":{\"$ref\":\"#\"},\"then\":{\"$ref\":\"#\"},\"else\":{\"$ref\":\"#\"},\"allOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"anyOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"oneOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"not\":{\"$ref\":\"#\"}},\"default\":true}')},897:function(e,t,n){\"use strict\";n.d(t,{x:function(){return o}});var r=n(2602),i=n(9791),s=n(7907);var o=function(){function e(t,n){!function(t){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this),this.dom={};var r=this,i=this.dom;this.anchor=void 0,this.items=t,this.eventListeners={},this.selection=void 0,this.onClose=n?n.close:void 0,this.limitHeight=!!n&&n.limitHeight;var o=document.createElement(\"div\");o.className=\"jsoneditor-contextmenu-root\",i.root=o,(n=document.createElement(\"div\")).className=\"jsoneditor-contextmenu\",i.menu=n,o.appendChild(n),(o=document.createElement(\"ul\")).className=\"jsoneditor-menu\",n.appendChild(o),i.list=o,i.items=[],(n=document.createElement(\"button\")).type=\"button\",i.focusButton=n,(i=document.createElement(\"li\")).style.overflow=\"hidden\",i.style.height=\"0\",i.appendChild(n),o.appendChild(i),function e(t,n,i){i.forEach((function(i){var o,a,c,l,h,d,u;\"separator\"===i.type?((c=document.createElement(\"div\")).className=\"jsoneditor-separator\",(h=document.createElement(\"li\")).appendChild(c),t.appendChild(h)):(o={},a=document.createElement(\"li\"),t.appendChild(a),(c=document.createElement(\"button\")).type=\"button\",c.className=i.className,o.button=c,i.title&&(c.title=i.title),i.click&&(c.onclick=function(e){e.preventDefault(),r.hide(),i.click()}),a.appendChild(c),i.submenu?((h=document.createElement(\"div\")).className=\"jsoneditor-icon\",c.appendChild(h),(h=document.createElement(\"div\")).className=\"jsoneditor-text\"+(i.click?\"\":\" jsoneditor-right-margin\"),h.appendChild(document.createTextNode(i.text)),c.appendChild(h),(l=i.click?(c.className+=\" jsoneditor-default\",(u=document.createElement(\"button\")).type=\"button\",(o.buttonExpand=u).className=\"jsoneditor-expand\",(h=document.createElement(\"div\")).className=\"jsoneditor-expand\",u.appendChild(h),a.appendChild(u),i.submenuTitle&&(u.title=i.submenuTitle),u):((d=document.createElement(\"div\")).className=\"jsoneditor-expand\",c.appendChild(d),c)).onclick=function(e){e.preventDefault(),r._onExpandItem(o),l.focus()},o.subItems=u=[],d=document.createElement(\"ul\"),(o.ul=d).className=\"jsoneditor-menu\",d.style.height=\"0\",a.appendChild(d),e(d,u,i.submenu)):((u=document.createElement(\"div\")).className=\"jsoneditor-icon\",c.appendChild(u),(u=document.createElement(\"div\")).className=\"jsoneditor-text\",u.appendChild(document.createTextNode((0,s.Iu)(i.text))),c.appendChild(u)),n.push(o))}))}(o,this.dom.items,t),this.maxHeight=0,t.forEach((function(e){e=24*(t.length+(e.submenu?e.submenu.length:0)),r.maxHeight=Math.max(r.maxHeight,e)}))}var t;return(t=[{key:\"_getVisibleButtons\",value:function(){var e=[],t=this;return this.dom.items.forEach((function(n){e.push(n.button),n.buttonExpand&&e.push(n.buttonExpand),n.subItems&&n===t.expandedItem&&n.subItems.forEach((function(t){e.push(t.button),t.buttonExpand&&e.push(t.buttonExpand)}))})),e}},{key:\"show\",value:function(t,n,s){this.hide();var o=!0,a=t.parentNode,c=t.getBoundingClientRect(),l=a.getBoundingClientRect(),h=(a=n.getBoundingClientRect(),this);this.dom.absoluteAnchor=(0,r.w)(t,n,(function(){h.hide()})),c.bottom+this.maxHeight<a.bottom||c.top-this.maxHeight>a.top&&(o=!1),s=s?0:c.top-l.top,o?(l=t.offsetHeight,this.dom.menu.style.left=\"0\",this.dom.menu.style.top=s+l+\"px\",this.dom.menu.style.bottom=\"\"):(this.dom.menu.style.left=\"0\",this.dom.menu.style.top=\"\",this.dom.menu.style.bottom=\"0px\"),this.limitHeight&&(this.dom.list.style.maxHeight=(a=o?a.bottom-c.bottom-10:c.top-a.top-10)+\"px\",this.dom.list.style.overflowY=\"auto\"),this.dom.absoluteAnchor.appendChild(this.dom.root),this.selection=(0,i.getSelection)(),this.anchor=t,setTimeout((function(){h.dom.focusButton.focus()}),0),e.visibleMenu&&e.visibleMenu.hide(),e.visibleMenu=this}},{key:\"hide\",value:function(){this.dom.absoluteAnchor&&(this.dom.absoluteAnchor.destroy(),delete this.dom.absoluteAnchor),this.dom.root.parentNode&&(this.dom.root.parentNode.removeChild(this.dom.root),this.onClose&&this.onClose()),e.visibleMenu===this&&(e.visibleMenu=void 0)}},{key:\"_onExpandItem\",value:function(e){var t,n=this,r=e===this.expandedItem,s=this.expandedItem;s&&(s.ul.style.height=\"0\",s.ul.style.padding=\"\",setTimeout((function(){n.expandedItem!==s&&(s.ul.style.display=\"\",i.removeClassName)(s.ul.parentNode,\"jsoneditor-selected\")}),300),this.expandedItem=void 0),r||((t=e.ul).style.display=\"block\",setTimeout((function(){if(n.expandedItem===e){for(var r=0,i=0;i<t.childNodes.length;i++)r+=t.childNodes[i].clientHeight;t.style.height=r+\"px\",t.style.padding=\"5px 10px\"}}),0),(0,i.addClassName)(t.parentNode,\"jsoneditor-selected\"),this.expandedItem=e)}},{key:\"_onKeyDown\",value:function(e){var t,n,r,s,o=e.target,a=e.which,c=!1;27===a?(this.selection&&(0,i.setSelection)(this.selection),this.anchor&&this.anchor.focus(),this.hide(),c=!0):9===a?e.shiftKey?0===(n=(t=this._getVisibleButtons()).indexOf(o))&&(t[t.length-1].focus(),c=!0):(n=(t=this._getVisibleButtons()).indexOf(o))===t.length-1&&(t[0].focus(),c=!0):37===a?(\"jsoneditor-expand\"===o.className&&(n=(t=this._getVisibleButtons()).indexOf(o),(r=t[n-1])&&r.focus()),c=!0):38===a?(n=(t=this._getVisibleButtons()).indexOf(o),(r=t[n-1])&&\"jsoneditor-expand\"===r.className&&(r=t[n-2]),(r=r||t[t.length-1])&&r.focus(),c=!0):39===a?(n=(t=this._getVisibleButtons()).indexOf(o),(s=t[n+1])&&\"jsoneditor-expand\"===s.className&&s.focus(),c=!0):40===a&&(n=(t=this._getVisibleButtons()).indexOf(o),(s=t[n+1])&&\"jsoneditor-expand\"===s.className&&(s=t[n+2]),(s=s||t[0])&&(s.focus(),c=!0),c=!0),c&&(e.stopPropagation(),e.preventDefault())}}])&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(e.prototype,t),e}();o.visibleMenu=void 0},6436:function(e,t,n){\"use strict\";n.d(t,{Q:function(){return r}});var r=function(){function e(t){!function(t){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this),this.errorTableVisible=t.errorTableVisible,this.onToggleVisibility=t.onToggleVisibility,this.onFocusLine=t.onFocusLine||function(){},this.onChangeHeight=t.onChangeHeight,this.dom={};var n=document.createElement(\"div\");n.className=\"jsoneditor-validation-errors-container\",this.dom.validationErrorsContainer=n,(t=document.createElement(\"div\")).style.display=\"none\",t.className=\"jsoneditor-additional-errors fadein\",t.textContent=\"Scroll for more \\u25bf\",this.dom.additionalErrorsIndication=t,n.appendChild(t),(t=document.createElement(\"span\")).className=\"jsoneditor-validation-error-icon\",t.style.display=\"none\",this.dom.validationErrorIcon=t,(t=document.createElement(\"span\")).className=\"jsoneditor-validation-error-count\",t.style.display=\"none\",this.dom.validationErrorCount=t,this.dom.parseErrorIndication=document.createElement(\"span\"),this.dom.parseErrorIndication.className=\"jsoneditor-parse-error-icon\",this.dom.parseErrorIndication.style.display=\"none\"}var t;return(t=[{key:\"getErrorTable\",value:function(){return this.dom.validationErrorsContainer}},{key:\"getErrorCounter\",value:function(){return this.dom.validationErrorCount}},{key:\"getWarningIcon\",value:function(){return this.dom.validationErrorIcon}},{key:\"getErrorIcon\",value:function(){return this.dom.parseErrorIndication}},{key:\"toggleTableVisibility\",value:function(){this.errorTableVisible=!this.errorTableVisible,this.onToggleVisibility(this.errorTableVisible)}},{key:\"setErrors\",value:function(e,t){var n,r,i=this;this.dom.validationErrors&&(this.dom.validationErrors.parentNode.removeChild(this.dom.validationErrors),this.dom.validationErrors=null,this.dom.additionalErrorsIndication.style.display=\"none\"),this.errorTableVisible&&0<e.length?((s=document.createElement(\"div\")).className=\"jsoneditor-validation-errors\",(n=document.createElement(\"table\")).className=\"jsoneditor-text-errors\",s.appendChild(n),r=document.createElement(\"tbody\"),n.appendChild(r),e.forEach((function(e){var n;isNaN(e.line)?!e.dataPath||(l=t.find((function(t){return t.path===e.dataPath})))&&(n=l.line+1):n=e.line;var s=document.createElement(\"tr\");s.className=isNaN(n)?\"\":\"jump-to-line\",s.className+=\"error\"===e.type?\" parse-error\":\" validation-error\";var o,a,c=document.createElement(\"td\"),l=document.createElement(\"button\");l.className=\"jsoneditor-schema-error\",c.appendChild(l),s.appendChild(c),(c=document.createElement(\"td\")).style=\"white-space: nowrap;\",c.textContent=isNaN(n)?\"\":\"Ln \"+n,s.appendChild(c),\"string\"==typeof e?((o=document.createElement(\"td\")).colSpan=2,(a=document.createElement(\"pre\")).appendChild(document.createTextNode(e)),o.appendChild(a),s.appendChild(o)):((a=document.createElement(\"td\")).appendChild(document.createTextNode(e.dataPath||\"\")),s.appendChild(a),o=document.createElement(\"td\"),(a=document.createElement(\"pre\")).appendChild(document.createTextNode(e.message)),o.appendChild(a),s.appendChild(o)),s.onclick=function(){i.onFocusLine(n)},r.appendChild(s)})),this.dom.validationErrors=s,this.dom.validationErrorsContainer.appendChild(s),this.dom.additionalErrorsIndication.title=e.length+\" errors total\",this.dom.validationErrorsContainer.clientHeight<this.dom.validationErrorsContainer.scrollHeight?(this.dom.additionalErrorsIndication.style.display=\"block\",this.dom.validationErrorsContainer.onscroll=function(){i.dom.additionalErrorsIndication.style.display=0<i.dom.validationErrorsContainer.clientHeight&&0===i.dom.validationErrorsContainer.scrollTop?\"block\":\"none\"}):this.dom.validationErrorsContainer.onscroll=void 0,this.onChangeHeight(s=this.dom.validationErrorsContainer.clientHeight+(this.dom.statusBar?this.dom.statusBar.clientHeight:0))):this.onChangeHeight(0);var s=e.filter((function(e){return\"error\"!==e.type})).length;0<s?(this.dom.validationErrorCount.style.display=\"inline\",this.dom.validationErrorCount.innerText=s,this.dom.validationErrorCount.onclick=this.toggleTableVisibility.bind(this),this.dom.validationErrorIcon.style.display=\"inline\",this.dom.validationErrorIcon.title=s+\" schema validation error(s) found\",this.dom.validationErrorIcon.onclick=this.toggleTableVisibility.bind(this)):(this.dom.validationErrorCount.style.display=\"none\",this.dom.validationErrorIcon.style.display=\"none\"),e.some((function(e){return\"error\"===e.type}))?(e=e[0].line,this.dom.parseErrorIndication.style.display=\"block\",this.dom.parseErrorIndication.title=isNaN(e)?\"parse error - check that the json is valid\":\"parse error on line \"+e,this.dom.parseErrorIndication.onclick=this.toggleTableVisibility.bind(this)):this.dom.parseErrorIndication.style.display=\"none\"}}])&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(e.prototype,t),e}()},2474:function(e,t,n){\"use strict\";n.d(t,{R:function(){return r}});var r=function(){function e(t){if(function(t){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this),this.target=t.target||null,!this.target)throw new Error('FocusTracker constructor called without a \"target\" to track.');this.onFocus=\"function\"==typeof t.onFocus?t.onFocus:null,this.onBlur=\"function\"==typeof t.onBlur?t.onBlur:null,this._onClick=this._onEvent.bind(this),this._onKeyUp=(function(e){9!==e.which&&9!==e.keyCode||this._onEvent(e)}).bind(this),this.focusFlag=!1,this.firstEventFlag=!0,(this.onFocus||this.onBlur)&&(document.addEventListener(\"click\",this._onClick),document.addEventListener(\"keyup\",this._onKeyUp))}var t;return(t=[{key:\"destroy\",value:function(){document.removeEventListener(\"click\",this._onClick),document.removeEventListener(\"keyup\",this._onKeyUp),this._onEvent({target:document.body})}},{key:\"_onEvent\",value:function(e){(e=(e=e.target)===this.target||!(!this.target.contains(e)&&!this.target.contains(document.activeElement)))?this.focusFlag||(this.onFocus&&this.onFocus({type:\"focus\",target:this.target}),this.focusFlag=!0):(this.focusFlag||this.firstEventFlag)&&(this.onBlur&&this.onBlur({type:\"blur\",target:this.target}),this.focusFlag=!1,this.firstEventFlag&&(this.firstEventFlag=!1))}}])&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(e.prototype,t),e}()},3161:function(e,t,n){\"use strict\";var r=n(8170),i=n(8037),s=n(8038).treeModeMixins,o=n(5956).textModeMixins,a=n(341).previewModeMixins,c=(p=n(9791)).clear,l=p.extend,h=p.getInnerText,d=p.getInternetExplorerVersion,u=p.parse,f=n(2744).tryRequireAjv,g=n(2558).showTransformModal,p=n(6210).showSortModal,m=f();function C(e,t,n){if(!(this instanceof C))throw new Error('JSONEditor constructor called without \"new\".');var r=d();if(-1!==r&&r<9)throw new Error(\"Unsupported browser, IE9 or newer required. Please install the newest version of your browser.\");t&&(t.error&&(console.warn('Option \"error\" has been renamed to \"onError\"'),t.onError=t.error,delete t.error),t.change&&(console.warn('Option \"change\" has been renamed to \"onChange\"'),t.onChange=t.change,delete t.change),t.editable&&(console.warn('Option \"editable\" has been renamed to \"onEditable\"'),t.onEditable=t.editable,delete t.editable),t.onChangeJSON&&(\"text\"!==t.mode&&\"code\"!==t.mode&&(!t.modes||-1===t.modes.indexOf(\"text\")&&-1===t.modes.indexOf(\"code\"))||console.warn('Option \"onChangeJSON\" is not applicable to modes \"text\" and \"code\". Use \"onChangeText\" or \"onChange\" instead.')),t&&Object.keys(t).forEach((function(e){-1===C.VALID_OPTIONS.indexOf(e)&&console.warn('Unknown option \"'+e+'\". This option will be ignored')}))),arguments.length&&this._create(e,t,n)}\"undefined\"==typeof Promise&&console.error(\"Promise undefined. Please load a Promise polyfill in the browser in order to use JSONEditor\"),C.modes={},C.prototype.DEBOUNCE_INTERVAL=150,C.VALID_OPTIONS=[\"ajv\",\"schema\",\"schemaRefs\",\"templates\",\"ace\",\"theme\",\"autocomplete\",\"onChange\",\"onChangeJSON\",\"onChangeText\",\"onEditable\",\"onError\",\"onEvent\",\"onModeChange\",\"onNodeName\",\"onValidate\",\"onCreateMenu\",\"onSelectionChange\",\"onTextSelectionChange\",\"onClassName\",\"onFocus\",\"onBlur\",\"colorPicker\",\"onColorPicker\",\"timestampTag\",\"timestampFormat\",\"escapeUnicode\",\"history\",\"search\",\"mode\",\"modes\",\"name\",\"indentation\",\"sortObjectKeys\",\"navigationBar\",\"statusBar\",\"mainMenuBar\",\"languages\",\"language\",\"enableSort\",\"enableTransform\",\"limitDragging\",\"maxVisibleChilds\",\"onValidationError\",\"modalAnchor\",\"popupAnchor\",\"createQuery\",\"executeQuery\",\"queryDescription\"],C.prototype._create=function(e,t,n){this.container=e,this.options=t||{},this.json=n||{},this.setMode(n=this.options.mode||this.options.modes&&this.options.modes[0]||\"tree\")},C.prototype.destroy=function(){},C.prototype.set=function(e){this.json=e},C.prototype.get=function(){return this.json},C.prototype.setText=function(e){this.json=u(e)},C.prototype.getText=function(){return JSON.stringify(this.json)},C.prototype.setName=function(e){this.options||(this.options={}),this.options.name=e},C.prototype.getName=function(){return this.options&&this.options.name},C.prototype.setMode=function(e){if(e!==this.options.mode||!this.create){var t=this.container,n=l({},this.options),r=n.mode;n.mode=e;var i=C.modes[e];if(!i)throw new Error('Unknown mode \"'+n.mode+'\"');try{var s=\"text\"===i.data,o=this.getName(),a=this[s?\"getText\":\"get\"]();if(this.destroy(),c(this),l(this,i.mixin),this.create(t,n),this.setName(o),this[s?\"setText\":\"set\"](a),\"function\"==typeof i.load)try{i.load.call(this)}catch(e){console.error(e)}if(\"function\"==typeof n.onModeChange&&e!==r)try{n.onModeChange(e,r)}catch(e){console.error(e)}}catch(e){this._onError(e)}}},C.prototype.getMode=function(){return this.options.mode},C.prototype._onError=function(e){if(!this.options||\"function\"!=typeof this.options.onError)throw e;this.options.onError(e)},C.prototype.setSchema=function(e,t){if(e){var r;try{this.options.ajv?r=this.options.ajv:((r=m({allErrors:!0,verbose:!0,schemaId:\"auto\",$data:!0})).addMetaSchema(n(2689)),r.addMetaSchema(n(1030)))}catch(e){console.warn(\"Failed to create an instance of Ajv, JSON Schema validation is not available. Please use a JSONEditor bundle including Ajv, or pass an instance of Ajv as via the configuration option `ajv`.\")}if(r){if(t){for(var i in t)r.removeSchema(i),t[i]&&r.addSchema(t[i],i);this.options.schemaRefs=t}this.validateSchema=r.compile(e),this.options.schema=e,this.validate()}this.refresh()}else this.validateSchema=null,this.options.schema=null,this.options.schemaRefs=null,this.validate(),this.refresh()},C.prototype.validate=function(){},C.prototype.refresh=function(){},C.registerMode=function(e){var t;if(Array.isArray(e))for(i=0;i<e.length;i++)C.registerMode(e[i]);else{if(!(\"mode\"in e))throw new Error('Property \"mode\" missing');if(!(\"mixin\"in e))throw new Error('Property \"mixin\" missing');if(!(\"data\"in e))throw new Error('Property \"data\" missing');var n=e.mode;if(n in C.modes)throw new Error('Mode \"'+n+'\" already registered');if(\"function\"!=typeof e.mixin.create)throw new Error('Required function \"create\" missing on mixin');for(var r=[\"setMode\",\"registerMode\",\"modes\"],i=0;i<r.length;i++)if((t=r[i])in e.mixin)throw new Error('Reserved property \"'+t+'\" not allowed in mixin');C.modes[n]=e}},C.registerMode(s),C.registerMode(o),C.registerMode(a),C.ace=r,C.Ajv=m,C.VanillaPicker=i,C.showTransformModal=g,C.showSortModal=p,C.getInnerText=h,C.default=C,e.exports=C},6617:function(e,t,n){\"use strict\";n.d(t,{x:function(){return s}});var r=n(897),i=n(7907);var s=function(){function e(t,n,s,o){!function(t){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this);for(var a={code:{text:(0,i.Iu)(\"modeCodeText\"),title:(0,i.Iu)(\"modeCodeTitle\"),click:function(){o(\"code\")}},form:{text:(0,i.Iu)(\"modeFormText\"),title:(0,i.Iu)(\"modeFormTitle\"),click:function(){o(\"form\")}},text:{text:(0,i.Iu)(\"modeTextText\"),title:(0,i.Iu)(\"modeTextTitle\"),click:function(){o(\"text\")}},tree:{text:(0,i.Iu)(\"modeTreeText\"),title:(0,i.Iu)(\"modeTreeTitle\"),click:function(){o(\"tree\")}},view:{text:(0,i.Iu)(\"modeViewText\"),title:(0,i.Iu)(\"modeViewTitle\"),click:function(){o(\"view\")}},preview:{text:(0,i.Iu)(\"modePreviewText\"),title:(0,i.Iu)(\"modePreviewTitle\"),click:function(){o(\"preview\")}}},c=[],l=0;l<n.length;l++){var h=n[l],d=a[h];if(!d)throw new Error('Unknown mode \"'+h+'\"');d.className=\"jsoneditor-type-modes\"+(s===h?\" jsoneditor-selected\":\"\"),c.push(d)}if(!(u=a[s]))throw new Error('Unknown mode \"'+s+'\"');var u=u.text,f=document.createElement(\"button\");f.type=\"button\",f.className=\"jsoneditor-modes jsoneditor-separator\",f.textContent=u+\" \\u25be\",f.title=(0,i.Iu)(\"modeEditorTitle\"),f.onclick=function(){new r.x(c).show(f,t)},(u=document.createElement(\"div\")).className=\"jsoneditor-modes\",u.style.position=\"relative\",u.appendChild(f),t.appendChild(u),this.dom={container:t,box:f,frame:u}}var t;return(t=[{key:\"focus\",value:function(){this.dom.box.focus()}},{key:\"destroy\",value:function(){this.dom&&this.dom.frame&&this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame),this.dom=null}}])&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(e.prototype,t),e}()},8170:function(e,t,n){var r;if(window.ace)r=window.ace;else try{r=n(6225),n(4091),n(3330);var i=n(7923);r.config.setModuleUrl(\"ace/mode/json_worker\",i)}catch(e){}e.exports=r},4864:function(){window.ace.define(\"ace/theme/jsoneditor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],(function(e,t,n){t.isDark=!1,t.cssClass=\"ace-jsoneditor\",t.cssText='.ace-jsoneditor .ace_gutter {\\nbackground: #ebebeb;\\ncolor: #333\\n}\\n\\n.ace-jsoneditor.ace_editor {\\nfont-family: \"dejavu sans mono\", \"droid sans mono\", consolas, monaco, \"lucida console\", \"courier new\", courier, monospace, sans-serif;\\nline-height: 1.3;\\nbackground-color: #fff;\\n}\\n.ace-jsoneditor .ace_print-margin {\\nwidth: 1px;\\nbackground: #e8e8e8\\n}\\n.ace-jsoneditor .ace_scroller {\\nbackground-color: #FFFFFF\\n}\\n.ace-jsoneditor .ace_text-layer {\\ncolor: gray\\n}\\n.ace-jsoneditor .ace_variable {\\ncolor: #1a1a1a\\n}\\n.ace-jsoneditor .ace_cursor {\\nborder-left: 2px solid #000000\\n}\\n.ace-jsoneditor .ace_overwrite-cursors .ace_cursor {\\nborder-left: 0px;\\nborder-bottom: 1px solid #000000\\n}\\n.ace-jsoneditor .ace_marker-layer .ace_selection {\\nbackground: lightgray\\n}\\n.ace-jsoneditor.ace_multiselect .ace_selection.ace_start {\\nbox-shadow: 0 0 3px 0px #FFFFFF;\\nborder-radius: 2px\\n}\\n.ace-jsoneditor .ace_marker-layer .ace_step {\\nbackground: rgb(255, 255, 0)\\n}\\n.ace-jsoneditor .ace_marker-layer .ace_bracket {\\nmargin: -1px 0 0 -1px;\\nborder: 1px solid #BFBFBF\\n}\\n.ace-jsoneditor .ace_marker-layer .ace_active-line {\\nbackground: #FFFBD1\\n}\\n.ace-jsoneditor .ace_gutter-active-line {\\nbackground-color : #dcdcdc\\n}\\n.ace-jsoneditor .ace_marker-layer .ace_selected-word {\\nborder: 1px solid lightgray\\n}\\n.ace-jsoneditor .ace_invisible {\\ncolor: #BFBFBF\\n}\\n.ace-jsoneditor .ace_keyword,\\n.ace-jsoneditor .ace_meta,\\n.ace-jsoneditor .ace_support.ace_constant.ace_property-value {\\ncolor: #AF956F\\n}\\n.ace-jsoneditor .ace_keyword.ace_operator {\\ncolor: #484848\\n}\\n.ace-jsoneditor .ace_keyword.ace_other.ace_unit {\\ncolor: #96DC5F\\n}\\n.ace-jsoneditor .ace_constant.ace_language {\\ncolor: darkorange\\n}\\n.ace-jsoneditor .ace_constant.ace_numeric {\\ncolor: red\\n}\\n.ace-jsoneditor .ace_constant.ace_character.ace_entity {\\ncolor: #BF78CC\\n}\\n.ace-jsoneditor .ace_invalid {\\ncolor: #FFFFFF;\\nbackground-color: #FF002A;\\n}\\n.ace-jsoneditor .ace_fold {\\nbackground-color: #AF956F;\\nborder-color: #000000\\n}\\n.ace-jsoneditor .ace_storage,\\n.ace-jsoneditor .ace_support.ace_class,\\n.ace-jsoneditor .ace_support.ace_function,\\n.ace-jsoneditor .ace_support.ace_other,\\n.ace-jsoneditor .ace_support.ace_type {\\ncolor: #C52727\\n}\\n.ace-jsoneditor .ace_string {\\ncolor: green\\n}\\n.ace-jsoneditor .ace_comment {\\ncolor: #BCC8BA\\n}\\n.ace-jsoneditor .ace_entity.ace_name.ace_tag,\\n.ace-jsoneditor .ace_entity.ace_other.ace_attribute-name {\\ncolor: #606060\\n}\\n.ace-jsoneditor .ace_markup.ace_underline {\\ntext-decoration: underline\\n}\\n.ace-jsoneditor .ace_indent-guide {\\nbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y\\n}',e(\"../lib/dom\").importCssString(t.cssText,t.cssClass)}))},6589:function(e,t){var n=((n={trace:function(){},yy:{},symbols_:{error:2,JSONString:3,STRING:4,JSONNumber:5,NUMBER:6,JSONNullLiteral:7,NULL:8,JSONBooleanLiteral:9,TRUE:10,FALSE:11,JSONText:12,JSONValue:13,EOF:14,JSONObject:15,JSONArray:16,\"{\":17,\"}\":18,JSONMemberList:19,JSONMember:20,\":\":21,\",\":22,\"[\":23,\"]\":24,JSONElementList:25,$accept:0,$end:1},terminals_:{2:\"error\",4:\"STRING\",6:\"NUMBER\",8:\"NULL\",10:\"TRUE\",11:\"FALSE\",14:\"EOF\",17:\"{\",18:\"}\",21:\":\",22:\",\",23:\"[\",24:\"]\"},productions_:[0,[3,1],[5,1],[7,1],[9,1],[9,1],[12,2],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[15,2],[15,3],[20,3],[19,1],[19,3],[16,2],[16,3],[25,1],[25,3]],performAction:function(e,t,n,r,i,s,o){var a=s.length-1;switch(i){case 1:this.$=e.replace(/\\\\(\\\\|\")/g,\"$1\").replace(/\\\\n/g,\"\\n\").replace(/\\\\r/g,\"\\r\").replace(/\\\\t/g,\"\\t\").replace(/\\\\v/g,\"\\v\").replace(/\\\\f/g,\"\\f\").replace(/\\\\b/g,\"\\b\");break;case 2:this.$=Number(e);break;case 3:this.$=null;break;case 4:this.$=!0;break;case 5:this.$=!1;break;case 6:return this.$=s[a-1];case 13:this.$={};break;case 14:this.$=s[a-1];break;case 15:this.$=[s[a-2],s[a]];break;case 16:this.$={},this.$[s[a][0]]=s[a][1];break;case 17:this.$=s[a-2],s[a-2][s[a][0]]=s[a][1];break;case 18:this.$=[];break;case 19:this.$=s[a-1];break;case 20:this.$=[s[a]];break;case 21:this.$=s[a-2],s[a-2].push(s[a])}},table:[{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],12:1,13:2,15:7,16:8,17:[1,14],23:[1,15]},{1:[3]},{14:[1,16]},{14:[2,7],18:[2,7],22:[2,7],24:[2,7]},{14:[2,8],18:[2,8],22:[2,8],24:[2,8]},{14:[2,9],18:[2,9],22:[2,9],24:[2,9]},{14:[2,10],18:[2,10],22:[2,10],24:[2,10]},{14:[2,11],18:[2,11],22:[2,11],24:[2,11]},{14:[2,12],18:[2,12],22:[2,12],24:[2,12]},{14:[2,3],18:[2,3],22:[2,3],24:[2,3]},{14:[2,4],18:[2,4],22:[2,4],24:[2,4]},{14:[2,5],18:[2,5],22:[2,5],24:[2,5]},{14:[2,1],18:[2,1],21:[2,1],22:[2,1],24:[2,1]},{14:[2,2],18:[2,2],22:[2,2],24:[2,2]},{3:20,4:[1,12],18:[1,17],19:18,20:19},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:23,15:7,16:8,17:[1,14],23:[1,15],24:[1,21],25:22},{1:[2,6]},{14:[2,13],18:[2,13],22:[2,13],24:[2,13]},{18:[1,24],22:[1,25]},{18:[2,16],22:[2,16]},{21:[1,26]},{14:[2,18],18:[2,18],22:[2,18],24:[2,18]},{22:[1,28],24:[1,27]},{22:[2,20],24:[2,20]},{14:[2,14],18:[2,14],22:[2,14],24:[2,14]},{3:20,4:[1,12],20:29},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:30,15:7,16:8,17:[1,14],23:[1,15]},{14:[2,19],18:[2,19],22:[2,19],24:[2,19]},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:31,15:7,16:8,17:[1,14],23:[1,15]},{18:[2,17],22:[2,17]},{18:[2,15],22:[2,15]},{22:[2,21],24:[2,21]}],defaultActions:{16:[2,6]},parseError:function(e,t){throw new Error(e)},parse:function(e){var t=this,n=[0],r=[null],i=[],s=this.table,o=\"\",a=0,c=0,l=0;this.lexer.setInput(e),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,void 0===this.lexer.yylloc&&(this.lexer.yylloc={});var h=this.lexer.yylloc;function d(){var e=t.lexer.lex()||1;return\"number\"!=typeof e&&(e=t.symbols_[e]||e),e}i.push(h),\"function\"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var u,f,g,p,m,C,b,v,I={};;){if(void 0===(p=this.defaultActions[g=n[n.length-1]]||(null==u&&(u=d()),s[g]&&s[g][u]))||!p.length||!p[0]){if(!l){for(C in v=[],s[g])this.terminals_[C]&&2<C&&v.push(\"'\"+this.terminals_[C]+\"'\");var A=\"\";A=this.lexer.showPosition?\"Parse error on line \"+(a+1)+\":\\n\"+this.lexer.showPosition()+\"\\nExpecting \"+v.join(\", \")+\", got '\"+this.terminals_[u]+\"'\":\"Parse error on line \"+(a+1)+\": Unexpected \"+(1==u?\"end of input\":\"'\"+(this.terminals_[u]||u)+\"'\"),this.parseError(A,{text:this.lexer.match,token:this.terminals_[u]||u,line:this.lexer.yylineno,loc:h,expected:v})}if(3==l){if(1==u)throw new Error(A||\"Parsing halted.\");c=this.lexer.yyleng,o=this.lexer.yytext,a=this.lexer.yylineno,h=this.lexer.yylloc,u=d()}for(;!(2..toString()in s[g]);){if(0==g)throw new Error(A||\"Parsing halted.\");n.length=n.length-2,r.length=r.length-1,i.length=i.length-1,g=n[n.length-1]}f=u,u=2,p=s[g=n[n.length-1]]&&s[g][2],l=3}if(p[0]instanceof Array&&1<p.length)throw new Error(\"Parse Error: multiple actions possible at state: \"+g+\", token: \"+u);switch(p[0]){case 1:n.push(u),r.push(this.lexer.yytext),i.push(this.lexer.yylloc),n.push(p[1]),u=null,f?(u=f,f=null):(c=this.lexer.yyleng,o=this.lexer.yytext,a=this.lexer.yylineno,h=this.lexer.yylloc,0<l&&l--);break;case 2:if(I.$=r[r.length-(b=this.productions_[p[1]][1])],I._$={first_line:i[i.length-(b||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(b||1)].first_column,last_column:i[i.length-1].last_column},void 0!==(m=this.performAction.call(I,o,c,a,this.yy,p[1],r,i)))return m;b&&(n=n.slice(0,-1*b*2),r=r.slice(0,-1*b),i=i.slice(0,-1*b)),n.push(this.productions_[p[1]][0]),r.push(I.$),i.push(I._$),n.push(b=s[n[n.length-2]][n[n.length-1]]);break;case 3:return!0}}return!0}}).lexer={EOF:1,parseError:function(e,t){if(!this.yy.parseError)throw new Error(e);this.yy.parseError(e,t)},setInput:function(e){return this._input=e,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match=\"\",this.conditionStack=[\"INITIAL\"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.match+=e,this.matched+=e,e.match(/\\n/)&&this.yylineno++,this._input=this._input.slice(1),e},unput:function(e){return this._input=e+this._input,this},more:function(){return this._more=!0,this},less:function(e){this._input=this.match.slice(e)+this._input},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(20<e.length?\"...\":\"\")+e.substr(-20).replace(/\\n/g,\"\")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(20<e.length?\"...\":\"\")).replace(/\\n/g,\"\")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join(\"-\");return e+this.upcomingInput()+\"\\n\"+t+\"^\"},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext=\"\",this.match=\"\");for(var i=this._currentRules(),s=0;s<i.length&&(!(t=this._input.match(this.rules[i[s]]))||e&&!(t[0].length>e[0].length)||(e=t,n=s,this.options.flex));s++);return e?((r=e[0].match(/\\n.*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-1:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.yyleng=this.yytext.length,this._more=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],r=this.performAction.call(this,this.yy,this,i[n],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r||void 0):\"\"===this._input?this.EOF:void this.parseError(\"Lexical error on line \"+(this.yylineno+1)+\". Unrecognized text.\\n\"+this.showPosition(),{text:\"\",token:null,line:this.yylineno})},lex:function(){var e=this.next();return void 0!==e?e:this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(e){this.begin(e)},options:{},performAction:function(e,t,n,r){switch(n){case 0:break;case 1:return 6;case 2:return t.yytext=t.yytext.substr(1,t.yyleng-2),4;case 3:return 17;case 4:return 18;case 5:return 23;case 6:return 24;case 7:return 22;case 8:return 21;case 9:return 10;case 10:return 11;case 11:return 8;case 12:return 14;case 13:return\"INVALID\"}},rules:[/^(?:\\s+)/,/^(?:(-?([0-9]|[1-9][0-9]+))(\\.[0-9]+)?([eE][-+]?[0-9]+)?\\b)/,/^(?:\"(?:\\\\[\\\\\"bfnrt/]|\\\\u[a-fA-F0-9]{4}|[^\\\\\\0-\\x09\\x0a-\\x1f\"])*\")/,/^(?:\\{)/,/^(?:\\})/,/^(?:\\[)/,/^(?:\\])/,/^(?:,)/,/^(?::)/,/^(?:true\\b)/,/^(?:false\\b)/,/^(?:null\\b)/,/^(?:$)/,/^(?:.)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],inclusive:!0}}},n);t.parser=n,t.parse=n.parse.bind(n)},3879:function(e){\"use strict\";function t(){}var n={defaultSelected:!0,width:\"auto\",disabled:!1,searchable:!0,clearable:!1,sortSelected:!1,allowDeselect:!1,closeOnScroll:!1,nativeDropdown:!1,placeholder:\"Select an option...\",taggable:!1,tagPlaceholder:\"Enter a tag...\"};t.prototype={on:function(e,t){this._events=this._events||{},this._events[e]=this._events[e]||[],this._events[e].push(t)},off:function(e,t){this._events=this._events||{},e in this._events!=0&&this._events[e].splice(this._events[e].indexOf(t),1)},emit:function(e){if(this._events=this._events||{},e in this._events!=0)for(var t=0;t<this._events[e].length;t++)this._events[e][t].apply(this,Array.prototype.slice.call(arguments,1))}},t.mixin=function(e){for(var n=[\"on\",\"off\",\"emit\"],r=0;r<n.length;r++)\"function\"==typeof e?e.prototype[n[r]]=t.prototype[n[r]]:e[n[r]]=t.prototype[n[r]];return e};var r={extend:function(e,t){for(var n in t=t||{},e)e.hasOwnProperty(n)&&(t.hasOwnProperty(n)||(t[n]=e[n]));return t},each:function(e,t,n){if(\"[object Object]\"===Object.prototype.toString.call(e))for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.call(n,r,e[r],e);else for(var i=0,s=e.length;i<s;i++)t.call(n,i,e[i],e)},createElement:function(e,t){var n,r,i=document,s=i.createElement(e);if(t&&\"[object Object]\"===Object.prototype.toString.call(t))for(n in t)n in s?s[n]=t[n]:\"html\"===n?s.textContent=t[n]:\"text\"===n?(r=i.createTextNode(t[n]),s.appendChild(r)):s.setAttribute(n,t[n]);return s},hasClass:function(e,t){if(e)return e.classList?e.classList.contains(t):!!e.className&&!!e.className.match(new RegExp(\"(\\\\s|^)\"+t+\"(\\\\s|$)\"))},addClass:function(e,t){r.hasClass(e,t)||(e.classList?e.classList.add(t):e.className=e.className.trim()+\" \"+t)},removeClass:function(e,t){r.hasClass(e,t)&&(e.classList?e.classList.remove(t):e.className=e.className.replace(new RegExp(\"(^|\\\\s)\"+t.split(\" \").join(\"|\")+\"(\\\\s|$)\",\"gi\"),\" \"))},closest:function(e,t){return e&&e!==document.body&&(t(e)?e:r.closest(e.parentNode,t))},isInt:function(e){return\"number\"==typeof e&&isFinite(e)&&Math.floor(e)===e},debounce:function(e,t,n){var r;return function(){var i=this,s=arguments,o=n&&!r;clearTimeout(r),r=setTimeout((function(){r=null,n||e.apply(i,s)}),t),o&&e.apply(i,s)}},rect:function(e,t){var n=window,r=e.getBoundingClientRect();return e=t?n.pageXOffset:0,{bottom:r.bottom+(n=t?n.pageYOffset:0),height:r.height,left:r.left+e,right:r.right+e,top:r.top+n,width:r.width}},includes:function(e,t){return-1<e.indexOf(t)},truncate:function(e){for(;e.firstChild;)e.removeChild(e.firstChild)}};function i(e,t){return e.hasOwnProperty(t)&&(!0===e[t]||e[t].length)}function s(e,t,n){e.parentNode?e.parentNode.parentNode||t.appendChild(e.parentNode):t.appendChild(e),r.removeClass(e,\"excluded\"),n||(e.textContent=e.textContent+\"\")}function o(){var e,t;this.items.length&&(e=document.createDocumentFragment(),this.config.pagination?(t=this.pages.slice(0,this.pageIndex),r.each(t,(function(t,n){r.each(n,(function(t,n){s(n,e,this.customOption)}),this)}),this)):r.each(this.items,(function(t,n){s(n,e,this.customOption)}),this),e.childElementCount&&(r.removeClass(this.items[this.navIndex],\"active\"),this.navIndex=e.querySelector(\".selectr-option\").idx,r.addClass(this.items[this.navIndex],\"active\")),this.tree.appendChild(e))}function a(e,t){return t=t||e,t=this.customOption?this.config.renderOption(t):e.textContent,(t=r.createElement(\"li\",{class:\"selectr-option\",html:t,role:\"treeitem\",\"aria-selected\":!1})).idx=e.idx,this.items.push(t),e.defaultSelected&&this.defaultSelected.push(e.idx),e.disabled&&(t.disabled=!0,r.addClass(t,\"disabled\")),t}function c(){(this.config.searchable||this.config.taggable)&&(this.input.value=null,this.searching=!1,this.config.searchable&&r.removeClass(this.inputContainer,\"active\"),r.hasClass(this.container,\"notice\")&&(r.removeClass(this.container,\"notice\"),r.addClass(this.container,\"open\"),this.input.focus()),r.each(this.items,(function(e,t){r.removeClass(t,\"excluded\"),this.customOption||(t.textContent=t.textContent+\"\")}),this))}function l(e,t){if(t=t||{},!e)throw new Error(\"You must supply either a HTMLSelectElement or a CSS3 selector string.\");if(\"string\"==typeof(this.el=e)&&(this.el=document.querySelector(e)),null===this.el)throw new Error(\"The element you passed to Selectr can not be found.\");if(\"select\"!==this.el.nodeName.toLowerCase())throw new Error(\"The element you passed to Selectr is not a HTMLSelectElement.\");this.render(t)}var h=function(){var e,t=this.tree;t.scrollHeight-t.offsetHeight<=t.scrollTop&&this.pageIndex<this.pages.length&&(e=document.createDocumentFragment(),r.each(this.pages[this.pageIndex],(function(t,n){s(n,e,this.customOption)}),this),t.appendChild(e),this.pageIndex++,this.emit(\"selectr.paginate\",{items:this.items.length,total:this.data.length,page:this.pageIndex,pages:this.pages.length}))};l.prototype.render=function(e){var s;this.rendered||(this.config=r.extend(n,e),this.originalType=this.el.type,this.originalIndex=this.el.tabIndex,this.defaultSelected=[],this.originalOptionCount=this.el.options.length,(this.config.multiple||this.config.taggable)&&(this.el.multiple=!0),this.disabled=i(this.config,\"disabled\"),this.opened=!1,this.config.taggable&&(this.config.searchable=!1),this.navigating=!1,this.mobileDevice=!1,/Android|webOS|iPhone|iPad|BlackBerry|Windows Phone|Opera Mini|IEMobile|Mobile/i.test(navigator.userAgent)&&(this.mobileDevice=!0),this.customOption=this.config.hasOwnProperty(\"renderOption\")&&\"function\"==typeof this.config.renderOption,this.customSelected=this.config.hasOwnProperty(\"renderSelection\")&&\"function\"==typeof this.config.renderSelection,t.mixin(this),(function(){this.requiresPagination=this.config.pagination&&0<this.config.pagination,i(this.config,\"width\")&&(r.isInt(this.config.width)?this.width=this.config.width+\"px\":\"auto\"===this.config.width?this.width=\"100%\":r.includes(this.config.width,\"%\")&&(this.width=this.config.width)),this.container=r.createElement(\"div\",{class:\"selectr-container\"}),this.config.customClass&&r.addClass(this.container,this.config.customClass),r.addClass(this.container,this.mobileDevice?\"selectr-mobile\":\"selectr-desktop\"),this.el.tabIndex=-1,r.addClass(this.el,this.config.nativeDropdown||this.mobileDevice?\"selectr-visible\":\"selectr-hidden\"),this.selected=r.createElement(\"div\",{class:\"selectr-selected\",disabled:this.disabled,tabIndex:1,\"aria-expanded\":!1}),this.label=r.createElement(this.el.multiple?\"ul\":\"span\",{class:\"selectr-label\"});var e,t=r.createElement(\"div\",{class:\"selectr-options-container\"});this.tree=r.createElement(\"ul\",{class:\"selectr-options\",role:\"tree\",\"aria-hidden\":!0,\"aria-expanded\":!1}),this.notice=r.createElement(\"div\",{class:\"selectr-notice\"}),this.el.setAttribute(\"aria-hidden\",!0),this.disabled&&(this.el.disabled=!0),this.el.multiple&&(r.addClass(this.label,\"selectr-tags\"),r.addClass(this.container,\"multiple\"),this.tags=[],this.selectedValues=this.getSelectedProperties(\"value\"),this.selectedIndexes=this.getSelectedProperties(\"idx\")),this.selected.appendChild(this.label),this.config.clearable&&(this.selectClear=r.createElement(\"button\",{class:\"selectr-clear\",type:\"button\"}),this.container.appendChild(this.selectClear),r.addClass(this.container,\"clearable\")),this.config.taggable&&(e=r.createElement(\"li\",{class:\"input-tag\"}),this.input=r.createElement(\"input\",{class:\"selectr-tag-input\",placeholder:this.config.tagPlaceholder,tagIndex:0,autocomplete:\"off\",autocorrect:\"off\",autocapitalize:\"off\",spellcheck:\"false\",role:\"textbox\",type:\"search\"}),e.appendChild(this.input),this.label.appendChild(e),r.addClass(this.container,\"taggable\"),this.tagSeperators=[\",\"],this.config.tagSeperators&&(this.tagSeperators=this.tagSeperators.concat(this.config.tagSeperators))),this.config.searchable&&(this.input=r.createElement(\"input\",{class:\"selectr-input\",tagIndex:-1,autocomplete:\"off\",autocorrect:\"off\",autocapitalize:\"off\",spellcheck:\"false\",role:\"textbox\",type:\"search\"}),this.inputClear=r.createElement(\"button\",{class:\"selectr-input-clear\",type:\"button\"}),this.inputContainer=r.createElement(\"div\",{class:\"selectr-input-container\"}),this.inputContainer.appendChild(this.input),this.inputContainer.appendChild(this.inputClear),t.appendChild(this.inputContainer)),t.appendChild(this.notice),t.appendChild(this.tree),this.items=[],this.options=[],this.el.options.length&&(this.options=[].slice.call(this.el.options));var n,s,o,c=!1,l=0;this.el.children.length&&r.each(this.el.children,(function(e,t){\"OPTGROUP\"===t.nodeName?(c=r.createElement(\"ul\",{class:\"selectr-optgroup\",role:\"group\",html:\"<li class='selectr-optgroup--label'>\"+t.label+\"</li>\"}),r.each(t.children,(function(e,t){t.idx=l,c.appendChild(a.call(this,t,c)),l++}),this)):(t.idx=l,a.call(this,t),l++)}),this),this.config.data&&Array.isArray(this.config.data)&&(n=!(this.data=[]),c=!1,l=0,r.each(this.config.data,(function(e,t){i(t,\"children\")?(n=r.createElement(\"optgroup\",{label:t.text}),c=r.createElement(\"ul\",{class:\"selectr-optgroup\",role:\"group\",html:\"<li class='selectr-optgroup--label'>\"+t.text+\"</li>\"}),r.each(t.children,(function(e,t){(s=new Option(t.text,t.value,!1,t.hasOwnProperty(\"selected\")&&!0===t.selected)).disabled=i(t,\"disabled\"),this.options.push(s),n.appendChild(s),s.idx=l,c.appendChild(a.call(this,s,t)),this.data[l]=t,l++}),this)):((s=new Option(t.text,t.value,!1,t.hasOwnProperty(\"selected\")&&!0===t.selected)).disabled=i(t,\"disabled\"),this.options.push(s),s.idx=l,a.call(this,s,t),this.data[l]=t,l++)}),this)),this.setSelected(!0);for(var h=this.navIndex=0;h<this.items.length;h++)if(!r.hasClass(o=this.items[h],\"disabled\")){r.addClass(o,\"active\"),this.navIndex=h;break}this.requiresPagination&&(this.pageIndex=1,this.paginate()),this.container.appendChild(this.selected),this.container.appendChild(t),this.placeEl=r.createElement(\"div\",{class:\"selectr-placeholder\"}),this.setPlaceholder(),this.selected.appendChild(this.placeEl),this.disabled&&this.disable(),this.el.parentNode.insertBefore(this.container,this.el),this.container.appendChild(this.el)}).call(this),this.bindEvents(),this.update(),this.optsRect=r.rect(this.tree),this.rendered=!0,this.el.multiple||(this.el.selectedIndex=this.selectedIndex),s=this,setTimeout((function(){s.emit(\"selectr.init\")}),20))},l.prototype.getSelected=function(){return this.el.querySelectorAll(\"option:checked\")},l.prototype.getSelectedProperties=function(e){var t=this.getSelected();return[].slice.call(t).map((function(t){return t[e]})).filter((function(e){return null!=e}))},l.prototype.bindEvents=function(){var e=this;this.events={},this.events.dismiss=(function(e){this.container.contains(e=e.target)||!this.opened&&!r.hasClass(this.container,\"notice\")||this.close()}).bind(this),this.events.navigate=(function(e){if(e=e||window.event,this.items.length&&this.opened&&r.includes([13,38,40],e.which)){if(e.preventDefault(),13===e.which)return!(this.config.taggable&&0<this.input.value.length)&&this.change(this.navIndex);var t,n=this.items[this.navIndex];switch(e.which){case 38:(t=0)<this.navIndex&&this.navIndex--;break;case 40:t=1,this.navIndex<this.items.length-1&&this.navIndex++}for(this.navigating=!0;r.hasClass(this.items[this.navIndex],\"disabled\")||r.hasClass(this.items[this.navIndex],\"excluded\");)if(t?this.navIndex++:this.navIndex--,this.searching){if(this.navIndex>this.tree.lastElementChild.idx){this.navIndex=this.tree.lastElementChild.idx;break}if(this.navIndex<this.tree.firstElementChild.idx){this.navIndex=this.tree.firstElementChild.idx;break}}e=r.rect(this.items[this.navIndex]),t?(0===this.navIndex?this.tree.scrollTop=0:e.top+e.height>this.optsRect.top+this.optsRect.height&&(this.tree.scrollTop=this.tree.scrollTop+(e.top+e.height-(this.optsRect.top+this.optsRect.height))),this.navIndex===this.tree.childElementCount-1&&this.requiresPagination&&h.call(this)):0===this.navIndex?this.tree.scrollTop=0:e.top-this.optsRect.top<0&&(this.tree.scrollTop=this.tree.scrollTop+(e.top-this.optsRect.top)),n&&r.removeClass(n,\"active\"),r.addClass(this.items[this.navIndex],\"active\")}else this.navigating=!1}).bind(this),this.events.reset=this.reset.bind(this),(this.config.nativeDropdown||this.mobileDevice)&&(this.container.addEventListener(\"touchstart\",(function(t){t.changedTouches[0].target===e.el&&e.toggle()})),(this.config.nativeDropdown||this.mobileDevice)&&this.container.addEventListener(\"click\",(function(t){t.preventDefault(),t.stopPropagation(),t.target===e.el&&e.toggle()})),this.el.addEventListener(\"change\",(function(t){var n;e.el.multiple?(n=e.getSelectedProperties(\"idx\"),n=function(e,t){for(var n,r=[],i=e.slice(0),s=0;s<t.length;s++)-1<(n=i.indexOf(t[s]))?i.splice(n,1):r.push(t[s]);return[r,i]}(e.selectedIndexes,n),r.each(n[0],(function(t,n){e.select(n)}),e),r.each(n[1],(function(t,n){e.deselect(n)}),e)):-1<e.el.selectedIndex&&e.select(e.el.selectedIndex)}))),this.config.nativeDropdown&&this.container.addEventListener(\"keydown\",(function(t){\"Enter\"===t.key&&e.selected===document.activeElement&&(e.toggle(),setTimeout((function(){e.el.focus()}),200))})),this.selected.addEventListener(\"click\",(function(t){e.disabled||e.toggle(),t.preventDefault(),t.stopPropagation()})),this.label.addEventListener(\"click\",(function(t){r.hasClass(t.target,\"selectr-tag-remove\")&&e.deselect(t.target.parentNode.idx)})),this.selectClear&&this.selectClear.addEventListener(\"click\",this.clear.bind(this)),this.tree.addEventListener(\"mousedown\",(function(e){e.preventDefault()})),this.tree.addEventListener(\"click\",(function(t){t.preventDefault(),t.stopPropagation(),(t=r.closest(t.target,(function(e){return e&&r.hasClass(e,\"selectr-option\")})))&&(r.hasClass(t,\"disabled\")||(r.hasClass(t,\"selected\")?(e.el.multiple||!e.el.multiple&&e.config.allowDeselect)&&e.deselect(t.idx):e.select(t.idx),e.opened&&!e.el.multiple&&e.close()))})),this.tree.addEventListener(\"mouseover\",(function(t){r.hasClass(t.target,\"selectr-option\")&&(r.hasClass(t.target,\"disabled\")||(r.removeClass(e.items[e.navIndex],\"active\"),r.addClass(t.target,\"active\"),e.navIndex=[].slice.call(e.items).indexOf(t.target)))})),this.config.searchable&&(this.input.addEventListener(\"focus\",(function(t){e.searching=!0})),this.input.addEventListener(\"blur\",(function(t){e.searching=!1})),this.input.addEventListener(\"keyup\",(function(t){e.search(),e.config.taggable||(this.value.length?r.addClass(this.parentNode,\"active\"):r.removeClass(this.parentNode,\"active\"))})),this.inputClear.addEventListener(\"click\",(function(t){e.input.value=null,c.call(e),e.tree.childElementCount||o.call(e)}))),this.config.taggable&&this.input.addEventListener(\"keyup\",(function(t){var n;e.search(),e.config.taggable&&this.value.length&&(n=this.value.trim(),13!==t.which&&!r.includes(e.tagSeperators,t.key)||(r.each(e.tagSeperators,(function(e,t){n=n.replace(t,\"\")})),e.add({value:n,text:n,selected:!0},!0)?(e.close(),c.call(e)):(this.value=\"\",e.setMessage(\"That tag is already in use.\"))))})),this.update=r.debounce((function(){e.opened&&e.config.closeOnScroll&&e.close(),e.width&&(e.container.style.width=e.width),e.invert()}),50),this.requiresPagination&&(this.paginateItems=r.debounce((function(){h.call(this)}),50),this.tree.addEventListener(\"scroll\",this.paginateItems.bind(this))),document.addEventListener(\"click\",this.events.dismiss),window.addEventListener(\"keydown\",this.events.navigate),window.addEventListener(\"resize\",this.update),window.addEventListener(\"scroll\",this.update),this.el.form&&this.el.form.addEventListener(\"reset\",this.events.reset)},l.prototype.setSelected=function(e){var t;this.config.data||this.el.multiple||!this.el.options.length||(0===this.el.selectedIndex&&(this.el.options[0].defaultSelected||this.config.defaultSelected||(this.el.selectedIndex=-1)),this.selectedIndex=this.el.selectedIndex,-1<this.selectedIndex&&this.select(this.selectedIndex)),this.config.multiple&&\"select-one\"===this.originalType&&!this.config.data&&this.el.options[0].selected&&!this.el.options[0].defaultSelected&&(this.el.options[0].selected=!1),r.each(this.options,(function(e,t){t.selected&&t.defaultSelected&&this.select(t.idx)}),this),this.config.selectedValue&&this.setValue(this.config.selectedValue),this.config.data&&(!this.el.multiple&&this.config.defaultSelected&&this.el.selectedIndex<0&&this.select(0),t=0,r.each(this.config.data,(function(e,n){i(n,\"children\")?r.each(n.children,(function(e,n){n.hasOwnProperty(\"selected\")&&!0===n.selected&&this.select(t),t++}),this):(n.hasOwnProperty(\"selected\")&&!0===n.selected&&this.select(t),t++)}),this))},l.prototype.destroy=function(){this.rendered&&(this.emit(\"selectr.destroy\"),\"select-one\"===this.originalType&&(this.el.multiple=!1),this.config.data&&(this.el.textContent=\"\"),r.removeClass(this.el,\"selectr-hidden\"),this.el.form&&r.off(this.el.form,\"reset\",this.events.reset),r.off(document,\"click\",this.events.dismiss),r.off(document,\"keydown\",this.events.navigate),r.off(window,\"resize\",this.update),r.off(window,\"scroll\",this.update),this.container.parentNode.replaceChild(this.el,this.container),this.rendered=!1)},l.prototype.change=function(e){var t=this.options[e];t.disabled||(t.selected&&r.hasClass(this.items[e],\"selected\")?this.deselect(e):this.select(e),this.opened&&!this.el.multiple&&this.close())},l.prototype.select=function(e){var t=this.items[e],n=[].slice.call(this.el.options),i=this.options[e];if(this.el.multiple){if(r.includes(this.selectedIndexes,e))return!1;if(this.config.maxSelections&&this.tags.length===this.config.maxSelections)return this.setMessage(\"A maximum of \"+this.config.maxSelections+\" items can be selected.\",!0),!1;this.selectedValues.push(i.value),this.selectedIndexes.push(e),(function(e){var t,n=this,i=document.createDocumentFragment(),s=this.options[e.idx],o=this.data?this.data[e.idx]:s,a=this.customSelected?this.config.renderSelection(o):s.textContent;o=r.createElement(\"li\",{class:\"selectr-tag\",html:a}),a=r.createElement(\"button\",{class:\"selectr-tag-remove\",type:\"button\"}),o.appendChild(a),o.idx=e.idx,o.tag=s.value,this.tags.push(o),this.config.sortSelected?(s=this.tags.slice(),t=function(e,t){e.replace(/(\\d+)|(\\D+)/g,(function(e,n,r){t.push([n||1/0,r||\"\"])}))},s.sort((function(e,r){var i,s,o=[],a=[];for(!0===n.config.sortSelected?(i=e.tag,s=r.tag):\"text\"===n.config.sortSelected&&(i=e.textContent,s=r.textContent),t(i,o),t(s,a);o.length&&a.length;){var c=o.shift(),l=a.shift();if(l=c[0]-l[0]||c[1].localeCompare(l[1]))return l}return o.length-a.length})),r.each(s,(function(e,t){i.appendChild(t)})),this.label.textContent=\"\"):i.appendChild(o),this.config.taggable?this.label.insertBefore(i,this.input.parentNode):this.label.appendChild(i)}).call(this,t)}else this.label.textContent=this.customSelected?this.config.renderSelection(this.data?this.data[e]:i):i.textContent,this.selectedValue=i.value,this.selectedIndex=e,r.each(this.options,(function(t,n){var i=this.items[t];t!==e&&(i&&r.removeClass(i,\"selected\"),n.selected=!1,n.removeAttribute(\"selected\"))}),this);r.includes(n,i)||this.el.add(i),t.setAttribute(\"aria-selected\",!0),r.addClass(t,\"selected\"),r.addClass(this.container,\"has-selected\"),i.selected=!0,i.setAttribute(\"selected\",\"\"),this.emit(\"selectr.change\",i),this.emit(\"selectr.select\",i)},l.prototype.deselect=function(e,t){var n=this.items[e],i=this.options[e];if(this.el.multiple){var s=this.selectedIndexes.indexOf(e);this.selectedIndexes.splice(s,1),s=this.selectedValues.indexOf(i.value),this.selectedValues.splice(s,1),(function(e){var t=!1;r.each(this.tags,(function(n,r){r.idx===e.idx&&(t=r)}),this),t&&(this.label.removeChild(t),this.tags.splice(this.tags.indexOf(t),1))}).call(this,n),this.tags.length||r.removeClass(this.container,\"has-selected\")}else{if(!t&&!this.config.clearable&&!this.config.allowDeselect)return!1;this.label.textContent=\"\",this.selectedValue=null,this.el.selectedIndex=this.selectedIndex=-1,r.removeClass(this.container,\"has-selected\")}this.items[e].setAttribute(\"aria-selected\",!1),r.removeClass(this.items[e],\"selected\"),i.selected=!1,i.removeAttribute(\"selected\"),this.emit(\"selectr.change\",null),this.emit(\"selectr.deselect\",i)},l.prototype.setValue=function(e){var t=Array.isArray(e);if(t||(e=e.toString().trim()),!this.el.multiple&&t)return!1;r.each(this.options,(function(n,i){(t&&r.includes(e.toString(),i.value)||i.value===e)&&this.change(i.idx)}),this)},l.prototype.getValue=function(e,t){var n,i;return this.el.multiple?e?this.selectedIndexes.length&&(i={values:[]},r.each(this.selectedIndexes,(function(e,t){i.values[e]={value:(t=this.options[t]).value,text:t.textContent}}),this)):i=this.selectedValues.slice():i=e?{value:(n=this.options[this.selectedIndex]).value,text:n.textContent}:this.selectedValue,e&&t&&(i=JSON.stringify(i)),i},l.prototype.add=function(e,t){if(e){if(this.data=this.data||[],this.items=this.items||[],this.options=this.options||[],Array.isArray(e))r.each(e,(function(e,n){this.add(n,t)}),this);else if(\"[object Object]\"===Object.prototype.toString.call(e)){if(t){var n=!1;if(r.each(this.options,(function(t,r){r.value.toLowerCase()===e.value.toLowerCase()&&(n=!0)})),n)return!1}var i=r.createElement(\"option\",e);return this.data.push(e),this.options.push(i),i.idx=0<this.options.length?this.options.length-1:0,a.call(this,i),e.selected&&this.select(i.idx),i}return this.setPlaceholder(),this.config.pagination&&this.paginate(),!0}},l.prototype.remove=function(e){var t,n=[];Array.isArray(e)?r.each(e,(function(t,i){r.isInt(i)?n.push(this.getOptionByIndex(i)):\"string\"==typeof e&&n.push(this.getOptionByValue(i))}),this):r.isInt(e)?n.push(this.getOptionByIndex(e)):\"string\"==typeof e&&n.push(this.getOptionByValue(e)),n.length&&(r.each(n,(function(e,n){t=n.idx,this.el.remove(n),this.options.splice(t,1),(n=this.items[t].parentNode)&&n.removeChild(this.items[t]),this.items.splice(t,1),r.each(this.options,(function(e,t){t.idx=e,this.items[e].idx=e}),this)}),this),this.setPlaceholder(),this.config.pagination&&this.paginate())},l.prototype.removeAll=function(){this.clear(!0),r.each(this.el.options,(function(e,t){this.el.remove(t)}),this),r.truncate(this.tree),this.items=[],this.options=[],this.data=[],this.navIndex=0,this.requiresPagination&&(this.requiresPagination=!1,this.pageIndex=1,this.pages=[]),this.setPlaceholder()},l.prototype.search=function(e){var t,n;this.navigating||(e=e||this.input.value,t=document.createDocumentFragment(),this.removeMessage(),r.truncate(this.tree),1<e.length?(r.each(this.options,(function(n,i){var o,a=this.items[i.idx];r.includes(i.textContent.toLowerCase(),e.toLowerCase())&&!i.disabled?(s(a,t,this.customOption),r.removeClass(a,\"excluded\"),this.customOption||(a.textContent=\"\",(o=function(e,t){var n=new RegExp(e,\"i\").exec(t);return n?(e=n.index,n=n.index+n[0].length,{before:t.substring(0,e),match:t.substring(e,n),after:t.substring(n)}):null}(e,i.textContent))&&(a.appendChild(document.createTextNode(o.before)),(i=document.createElement(\"span\")).className=\"selectr-match\",i.appendChild(document.createTextNode(o.match)),a.appendChild(i),a.appendChild(document.createTextNode(o.after))))):r.addClass(a,\"excluded\")}),this),t.childElementCount?(n=t.firstElementChild,r.removeClass(this.items[this.navIndex],\"active\"),this.navIndex=n.idx,r.addClass(n,\"active\")):this.config.taggable||this.setMessage(\"no results.\")):o.call(this),this.tree.appendChild(t))},l.prototype.toggle=function(){this.disabled||(this.opened?this.close():this.open())},l.prototype.open=function(){var e=this;return!!this.options.length&&(this.opened||this.emit(\"selectr.open\"),this.opened=!0,this.mobileDevice||this.config.nativeDropdown?(r.addClass(this.container,\"native-open\"),void(this.config.data&&r.each(this.options,(function(e,t){this.el.add(t)}),this))):(r.addClass(this.container,\"open\"),o.call(this),this.invert(),this.tree.scrollTop=0,r.removeClass(this.container,\"notice\"),this.selected.setAttribute(\"aria-expanded\",!0),this.tree.setAttribute(\"aria-hidden\",!1),this.tree.setAttribute(\"aria-expanded\",!0),void(this.config.searchable&&!this.config.taggable&&setTimeout((function(){e.input.focus(),e.input.tabIndex=0}),10))))},l.prototype.close=function(){var e;this.opened&&this.emit(\"selectr.close\"),this.opened=!1,this.mobileDevice||this.config.nativeDropdown?r.removeClass(this.container,\"native-open\"):(e=r.hasClass(this.container,\"notice\"),this.config.searchable&&!e&&(this.input.blur(),this.input.tabIndex=-1,this.searching=!1),e&&(r.removeClass(this.container,\"notice\"),this.notice.textContent=\"\"),r.removeClass(this.container,\"open\"),r.removeClass(this.container,\"native-open\"),this.selected.setAttribute(\"aria-expanded\",!1),this.tree.setAttribute(\"aria-hidden\",!0),this.tree.setAttribute(\"aria-expanded\",!1),r.truncate(this.tree),c.call(this))},l.prototype.enable=function(){this.disabled=!1,this.el.disabled=!1,this.selected.tabIndex=this.originalIndex,this.el.multiple&&r.each(this.tags,(function(e,t){t.lastElementChild.tabIndex=0})),r.removeClass(this.container,\"selectr-disabled\")},l.prototype.disable=function(e){e||(this.el.disabled=!0),this.selected.tabIndex=-1,this.el.multiple&&r.each(this.tags,(function(e,t){t.lastElementChild.tabIndex=-1})),this.disabled=!0,r.addClass(this.container,\"selectr-disabled\")},l.prototype.reset=function(){this.disabled||(this.clear(),this.setSelected(!0),r.each(this.defaultSelected,(function(e,t){this.select(t)}),this),this.emit(\"selectr.reset\"))},l.prototype.clear=function(e){var t;this.el.multiple?this.selectedIndexes.length&&(t=this.selectedIndexes.slice(),r.each(t,(function(e,t){this.deselect(t)}),this)):-1<this.selectedIndex&&this.deselect(this.selectedIndex,e),this.emit(\"selectr.clear\")},l.prototype.serialise=function(e){var t=[];return r.each(this.options,(function(e,n){var r={value:n.value,text:n.textContent};n.selected&&(r.selected=!0),n.disabled&&(r.disabled=!0),t[e]=r})),e?JSON.stringify(t):t},l.prototype.serialize=function(e){return this.serialise(e)},l.prototype.setPlaceholder=function(e){e=e||this.config.placeholder||this.el.getAttribute(\"placeholder\"),this.options.length||(e=\"No options available\"),this.placeEl.textContent=e},l.prototype.paginate=function(){if(this.items.length){var e=this;return this.pages=this.items.map((function(t,n){return n%e.config.pagination==0?e.items.slice(n,n+e.config.pagination):null})).filter((function(e){return e})),this.pages}},l.prototype.setMessage=function(e,t){t&&this.close(),r.addClass(this.container,\"notice\"),this.notice.textContent=e},l.prototype.removeMessage=function(){r.removeClass(this.container,\"notice\"),this.notice.textContent=\"\"},l.prototype.invert=function(){var e=r.rect(this.selected),t=window.innerHeight;e.top+e.height+this.tree.parentNode.offsetHeight>t?(r.addClass(this.container,\"inverted\"),this.isInverted=!0):(r.removeClass(this.container,\"inverted\"),this.isInverted=!1),this.optsRect=r.rect(this.tree)},l.prototype.getOptionByIndex=function(e){return this.options[e]},l.prototype.getOptionByValue=function(e){for(var t=!1,n=0,r=this.options.length;n<r;n++)if(this.options[n].value.trim()===e.toString().trim()){t=this.options[n];break}return t},e.exports=l},4188:function(e,t,n){\"use strict\";n.d(t,{qD:function(){return r},EX:function(){return i},WF:function(){return s},oW:function(){return o}});var r=document.body,i=10485760,s=2e4,o=2147483648},2602:function(e,t,n){\"use strict\";n.d(t,{w:function(){return i}});var r=n(9791);function i(e,t,n){var i,s=3<arguments.length&&void 0!==arguments[3]&&arguments[3],o=\"function\"==typeof(l=e).getRootNode?l.getRootNode():window,a={},c=e.getBoundingClientRect(),l=t.getBoundingClientRect(),h=document.createElement(\"div\");function d(){if(h&&h.parentNode){for(var t in h.parentNode.removeChild(h),a)i=t,Object.prototype.hasOwnProperty.call(a,i)&&((i=a[t])&&(0,r.removeEventListener)(o,t,i),delete a[t]);\"function\"==typeof n&&n(e)}var i}function u(e){(e=e.target)===h||(0,r.isChildOf)(e,h)||d()}return h.className=\"jsoneditor-anchor\",h.style.position=\"absolute\",h.style.left=c.left-l.left+\"px\",h.style.top=c.top-l.top+\"px\",h.style.width=c.width-2+\"px\",h.style.height=c.height-2+\"px\",h.style.boxSizing=\"border-box\",t.appendChild(h),a.mousedown=(0,r.addEventListener)(o,\"mousedown\",u),a.mousewheel=(0,r.addEventListener)(o,\"mousewheel\",u),s&&(i=null,h.onmouseover=function(){clearTimeout(i),i=null},h.onmouseout=function(){i=i||setTimeout(d,200)}),h.destroy=d,h}},7923:function(e){e.exports=\"data:application/javascript;base64,Im5vIHVzZSBzdHJpY3QiOwohKGZ1bmN0aW9uKHdpbmRvdykgewppZiAodHlwZW9mIHdpbmRvdy53aW5kb3cgIT0gInVuZGVmaW5lZCIgJiYgd2luZG93LmRvY3VtZW50KQogICAgcmV0dXJuOwppZiAod2luZG93LnJlcXVpcmUgJiYgd2luZG93LmRlZmluZSkKICAgIHJldHVybjsKCmlmICghd2luZG93LmNvbnNvbGUpIHsKICAgIHdpbmRvdy5jb25zb2xlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG1zZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOwogICAgICAgIHBvc3RNZXNzYWdlKHt0eXBlOiAibG9nIiwgZGF0YTogbXNnc30pOwogICAgfTsKICAgIHdpbmRvdy5jb25zb2xlLmVycm9yID0KICAgIHdpbmRvdy5jb25zb2xlLndhcm4gPSAKICAgIHdpbmRvdy5jb25zb2xlLmxvZyA9CiAgICB3aW5kb3cuY29uc29sZS50cmFjZSA9IHdpbmRvdy5jb25zb2xlOwp9CndpbmRvdy53aW5kb3cgPSB3aW5kb3c7CndpbmRvdy5hY2UgPSB3aW5kb3c7Cgp3aW5kb3cub25lcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIGZpbGUsIGxpbmUsIGNvbCwgZXJyKSB7CiAgICBwb3N0TWVzc2FnZSh7dHlwZTogImVycm9yIiwgZGF0YTogewogICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsCiAgICAgICAgZGF0YTogZXJyLmRhdGEsCiAgICAgICAgZmlsZTogZmlsZSwKICAgICAgICBsaW5lOiBsaW5lLCAKICAgICAgICBjb2w6IGNvbCwKICAgICAgICBzdGFjazogZXJyLnN0YWNrCiAgICB9fSk7Cn07Cgp3aW5kb3cubm9ybWFsaXplTW9kdWxlID0gZnVuY3Rpb24ocGFyZW50SWQsIG1vZHVsZU5hbWUpIHsKICAgIC8vIG5vcm1hbGl6ZSBwbHVnaW4gcmVxdWlyZXMKICAgIGlmIChtb2R1bGVOYW1lLmluZGV4T2YoIiEiKSAhPT0gLTEpIHsKICAgICAgICB2YXIgY2h1bmtzID0gbW9kdWxlTmFtZS5zcGxpdCgiISIpOwogICAgICAgIHJldHVybiB3aW5kb3cubm9ybWFsaXplTW9kdWxlKHBhcmVudElkLCBjaHVua3NbMF0pICsgIiEiICsgd2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgY2h1bmtzWzFdKTsKICAgIH0KICAgIC8vIG5vcm1hbGl6ZSByZWxhdGl2ZSByZXF1aXJlcwogICAgaWYgKG1vZHVsZU5hbWUuY2hhckF0KDApID09ICIuIikgewogICAgICAgIHZhciBiYXNlID0gcGFyZW50SWQuc3BsaXQoIi8iKS5zbGljZSgwLCAtMSkuam9pbigiLyIpOwogICAgICAgIG1vZHVsZU5hbWUgPSAoYmFzZSA/IGJhc2UgKyAiLyIgOiAiIikgKyBtb2R1bGVOYW1lOwogICAgICAgIAogICAgICAgIHdoaWxlIChtb2R1bGVOYW1lLmluZGV4T2YoIi4iKSAhPT0gLTEgJiYgcHJldmlvdXMgIT0gbW9kdWxlTmFtZSkgewogICAgICAgICAgICB2YXIgcHJldmlvdXMgPSBtb2R1bGVOYW1lOwogICAgICAgICAgICBtb2R1bGVOYW1lID0gbW9kdWxlTmFtZS5yZXBsYWNlKC9eXC5cLy8sICIiKS5yZXBsYWNlKC9cL1wuXC8vLCAiLyIpLnJlcGxhY2UoL1teXC9dK1wvXC5cLlwvLywgIiIpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgcmV0dXJuIG1vZHVsZU5hbWU7Cn07Cgp3aW5kb3cucmVxdWlyZSA9IGZ1bmN0aW9uIHJlcXVpcmUocGFyZW50SWQsIGlkKSB7CiAgICBpZiAoIWlkKSB7CiAgICAgICAgaWQgPSBwYXJlbnRJZDsKICAgICAgICBwYXJlbnRJZCA9IG51bGw7CiAgICB9CiAgICBpZiAoIWlkLmNoYXJBdCkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIndvcmtlci5qcyByZXF1aXJlKCkgYWNjZXB0cyBvbmx5IChwYXJlbnRJZCwgaWQpIGFzIGFyZ3VtZW50cyIpOwoKICAgIGlkID0gd2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgaWQpOwoKICAgIHZhciBtb2R1bGUgPSB3aW5kb3cucmVxdWlyZS5tb2R1bGVzW2lkXTsKICAgIGlmIChtb2R1bGUpIHsKICAgICAgICBpZiAoIW1vZHVsZS5pbml0aWFsaXplZCkgewogICAgICAgICAgICBtb2R1bGUuaW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG1vZHVsZS5mYWN0b3J5KCkuZXhwb3J0czsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1vZHVsZS5leHBvcnRzOwogICAgfQogICAKICAgIGlmICghd2luZG93LnJlcXVpcmUudGxucykKICAgICAgICByZXR1cm4gY29uc29sZS5sb2coInVuYWJsZSB0byBsb2FkICIgKyBpZCk7CiAgICAKICAgIHZhciBwYXRoID0gcmVzb2x2ZU1vZHVsZUlkKGlkLCB3aW5kb3cucmVxdWlyZS50bG5zKTsKICAgIGlmIChwYXRoLnNsaWNlKC0zKSAhPSAiLmpzIikgcGF0aCArPSAiLmpzIjsKICAgIAogICAgd2luZG93LnJlcXVpcmUuaWQgPSBpZDsKICAgIHdpbmRvdy5yZXF1aXJlLm1vZHVsZXNbaWRdID0ge307IC8vIHByZXZlbnQgaW5maW5pdGUgbG9vcCBvbiBicm9rZW4gbW9kdWxlcwogICAgaW1wb3J0U2NyaXB0cyhwYXRoKTsKICAgIHJldHVybiB3aW5kb3cucmVxdWlyZShwYXJlbnRJZCwgaWQpOwp9OwpmdW5jdGlvbiByZXNvbHZlTW9kdWxlSWQoaWQsIHBhdGhzKSB7CiAgICB2YXIgdGVzdFBhdGggPSBpZCwgdGFpbCA9ICIiOwogICAgd2hpbGUgKHRlc3RQYXRoKSB7CiAgICAgICAgdmFyIGFsaWFzID0gcGF0aHNbdGVzdFBhdGhdOwogICAgICAgIGlmICh0eXBlb2YgYWxpYXMgPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgcmV0dXJuIGFsaWFzICsgdGFpbDsKICAgICAgICB9IGVsc2UgaWYgKGFsaWFzKSB7CiAgICAgICAgICAgIHJldHVybiAgYWxpYXMubG9jYXRpb24ucmVwbGFjZSgvXC8qJC8sICIvIikgKyAodGFpbCB8fCBhbGlhcy5tYWluIHx8IGFsaWFzLm5hbWUpOwogICAgICAgIH0gZWxzZSBpZiAoYWxpYXMgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgdmFyIGkgPSB0ZXN0UGF0aC5sYXN0SW5kZXhPZigiLyIpOwogICAgICAgIGlmIChpID09PSAtMSkgYnJlYWs7CiAgICAgICAgdGFpbCA9IHRlc3RQYXRoLnN1YnN0cihpKSArIHRhaWw7CiAgICAgICAgdGVzdFBhdGggPSB0ZXN0UGF0aC5zbGljZSgwLCBpKTsKICAgIH0KICAgIHJldHVybiBpZDsKfQp3aW5kb3cucmVxdWlyZS5tb2R1bGVzID0ge307CndpbmRvdy5yZXF1aXJlLnRsbnMgPSB7fTsKCndpbmRvdy5kZWZpbmUgPSBmdW5jdGlvbihpZCwgZGVwcywgZmFjdG9yeSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICAgIGZhY3RvcnkgPSBkZXBzOwogICAgICAgIGlmICh0eXBlb2YgaWQgIT0gInN0cmluZyIpIHsKICAgICAgICAgICAgZGVwcyA9IGlkOwogICAgICAgICAgICBpZCA9IHdpbmRvdy5yZXF1aXJlLmlkOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgZmFjdG9yeSA9IGlkOwogICAgICAgIGRlcHMgPSBbXTsKICAgICAgICBpZCA9IHdpbmRvdy5yZXF1aXJlLmlkOwogICAgfQogICAgCiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT0gImZ1bmN0aW9uIikgewogICAgICAgIHdpbmRvdy5yZXF1aXJlLm1vZHVsZXNbaWRdID0gewogICAgICAgICAgICBleHBvcnRzOiBmYWN0b3J5LAogICAgICAgICAgICBpbml0aWFsaXplZDogdHJ1ZQogICAgICAgIH07CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghZGVwcy5sZW5ndGgpCiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGVwZW5kZW5jaWVzLCB3ZSBpbmplY3QgInJlcXVpcmUiLCAiZXhwb3J0cyIgYW5kCiAgICAgICAgLy8gIm1vZHVsZSIgYXMgZGVwZW5kZW5jaWVzLCB0byBwcm92aWRlIENvbW1vbkpTIGNvbXBhdGliaWxpdHkuCiAgICAgICAgZGVwcyA9IFsicmVxdWlyZSIsICJleHBvcnRzIiwgIm1vZHVsZSJdOwoKICAgIHZhciByZXEgPSBmdW5jdGlvbihjaGlsZElkKSB7CiAgICAgICAgcmV0dXJuIHdpbmRvdy5yZXF1aXJlKGlkLCBjaGlsZElkKTsKICAgIH07CgogICAgd2luZG93LnJlcXVpcmUubW9kdWxlc1tpZF0gPSB7CiAgICAgICAgZXhwb3J0czoge30sCiAgICAgICAgZmFjdG9yeTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBtb2R1bGUgPSB0aGlzOwogICAgICAgICAgICB2YXIgcmV0dXJuRXhwb3J0cyA9IGZhY3RvcnkuYXBwbHkodGhpcywgZGVwcy5zbGljZSgwLCBmYWN0b3J5Lmxlbmd0aCkubWFwKGZ1bmN0aW9uKGRlcCkgewogICAgICAgICAgICAgICAgc3dpdGNoIChkZXApIHsKICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlICJyZXF1aXJlIiwgImV4cG9ydHMiIGFuZCAibW9kdWxlIiBhcmVuJ3QgYWN0dWFsCiAgICAgICAgICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzLCB3ZSBtdXN0IGhhbmRsZSB0aGVtIHNlcGVyYXRlbHkuCiAgICAgICAgICAgICAgICAgICAgY2FzZSAicmVxdWlyZSI6IHJldHVybiByZXE7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAiZXhwb3J0cyI6IHJldHVybiBtb2R1bGUuZXhwb3J0czsKICAgICAgICAgICAgICAgICAgICBjYXNlICJtb2R1bGUiOiAgcmV0dXJuIG1vZHVsZTsKICAgICAgICAgICAgICAgICAgICAvLyBCdXQgZm9yIGFsbCBvdGhlciBkZXBlbmRlbmNpZXMsIHdlIGNhbiBqdXN0IGdvIGFoZWFkIGFuZAogICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgdGhlbS4KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgcmV0dXJuIHJlcShkZXApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIGlmIChyZXR1cm5FeHBvcnRzKQogICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSByZXR1cm5FeHBvcnRzOwogICAgICAgICAgICByZXR1cm4gbW9kdWxlOwogICAgICAgIH0KICAgIH07Cn07CndpbmRvdy5kZWZpbmUuYW1kID0ge307CnJlcXVpcmUudGxucyA9IHt9Owp3aW5kb3cuaW5pdEJhc2VVcmxzICA9IGZ1bmN0aW9uIGluaXRCYXNlVXJscyh0b3BMZXZlbE5hbWVzcGFjZXMpIHsKICAgIGZvciAodmFyIGkgaW4gdG9wTGV2ZWxOYW1lc3BhY2VzKQogICAgICAgIHJlcXVpcmUudGxuc1tpXSA9IHRvcExldmVsTmFtZXNwYWNlc1tpXTsKfTsKCndpbmRvdy5pbml0U2VuZGVyID0gZnVuY3Rpb24gaW5pdFNlbmRlcigpIHsKCiAgICB2YXIgRXZlbnRFbWl0dGVyID0gd2luZG93LnJlcXVpcmUoImFjZS9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKICAgIHZhciBvb3AgPSB3aW5kb3cucmVxdWlyZSgiYWNlL2xpYi9vb3AiKTsKICAgIAogICAgdmFyIFNlbmRlciA9IGZ1bmN0aW9uKCkge307CiAgICAKICAgIChmdW5jdGlvbigpIHsKICAgICAgICAKICAgICAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICAgICAgICAgICAgICAKICAgICAgICB0aGlzLmNhbGxiYWNrID0gZnVuY3Rpb24oZGF0YSwgY2FsbGJhY2tJZCkgewogICAgICAgICAgICBwb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgICB0eXBlOiAiY2FsbCIsCiAgICAgICAgICAgICAgICBpZDogY2FsbGJhY2tJZCwKICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEKICAgICAgICAgICAgfSk7CiAgICAgICAgfTsKICAgIAogICAgICAgIHRoaXMuZW1pdCA9IGZ1bmN0aW9uKG5hbWUsIGRhdGEpIHsKICAgICAgICAgICAgcG9zdE1lc3NhZ2UoewogICAgICAgICAgICAgICAgdHlwZTogImV2ZW50IiwKICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhCiAgICAgICAgICAgIH0pOwogICAgICAgIH07CiAgICAgICAgCiAgICB9KS5jYWxsKFNlbmRlci5wcm90b3R5cGUpOwogICAgCiAgICByZXR1cm4gbmV3IFNlbmRlcigpOwp9OwoKdmFyIG1haW4gPSB3aW5kb3cubWFpbiA9IG51bGw7CnZhciBzZW5kZXIgPSB3aW5kb3cuc2VuZGVyID0gbnVsbDsKCndpbmRvdy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7CiAgICB2YXIgbXNnID0gZS5kYXRhOwogICAgaWYgKG1zZy5ldmVudCAmJiBzZW5kZXIpIHsKICAgICAgICBzZW5kZXIuX3NpZ25hbChtc2cuZXZlbnQsIG1zZy5kYXRhKTsKICAgIH0KICAgIGVsc2UgaWYgKG1zZy5jb21tYW5kKSB7CiAgICAgICAgaWYgKG1haW5bbXNnLmNvbW1hbmRdKQogICAgICAgICAgICBtYWluW21zZy5jb21tYW5kXS5hcHBseShtYWluLCBtc2cuYXJncyk7CiAgICAgICAgZWxzZSBpZiAod2luZG93W21zZy5jb21tYW5kXSkKICAgICAgICAgICAgd2luZG93W21zZy5jb21tYW5kXS5hcHBseSh3aW5kb3csIG1zZy5hcmdzKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb21tYW5kOiIgKyBtc2cuY29tbWFuZCk7CiAgICB9CiAgICBlbHNlIGlmIChtc2cuaW5pdCkgewogICAgICAgIHdpbmRvdy5pbml0QmFzZVVybHMobXNnLnRsbnMpOwogICAgICAgIHNlbmRlciA9IHdpbmRvdy5zZW5kZXIgPSB3aW5kb3cuaW5pdFNlbmRlcigpOwogICAgICAgIHZhciBjbGF6eiA9IHJlcXVpcmUobXNnLm1vZHVsZSlbbXNnLmNsYXNzbmFtZV07CiAgICAgICAgbWFpbiA9IHdpbmRvdy5tYWluID0gbmV3IGNsYXp6KHNlbmRlcik7CiAgICB9Cn07Cn0pKHRoaXMpOwoKYWNlLmRlZmluZSgiYWNlL2xpYi9vb3AiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5pbmhlcml0cyA9IGZ1bmN0aW9uKGN0b3IsIHN1cGVyQ3RvcikgewogICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3I7CiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwgewogICAgICAgIGNvbnN0cnVjdG9yOiB7CiAgICAgICAgICAgIHZhbHVlOiBjdG9yLAogICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgIH0KICAgIH0pOwp9OwoKZXhwb3J0cy5taXhpbiA9IGZ1bmN0aW9uKG9iaiwgbWl4aW4pIHsKICAgIGZvciAodmFyIGtleSBpbiBtaXhpbikgewogICAgICAgIG9ialtrZXldID0gbWl4aW5ba2V5XTsKICAgIH0KICAgIHJldHVybiBvYmo7Cn07CgpleHBvcnRzLmltcGxlbWVudCA9IGZ1bmN0aW9uKHByb3RvLCBtaXhpbikgewogICAgZXhwb3J0cy5taXhpbihwcm90bywgbWl4aW4pOwp9OwoKfSk7CgphY2UuZGVmaW5lKCJhY2UvcmFuZ2UiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwp2YXIgY29tcGFyZVBvaW50cyA9IGZ1bmN0aW9uKHAxLCBwMikgewogICAgcmV0dXJuIHAxLnJvdyAtIHAyLnJvdyB8fCBwMS5jb2x1bW4gLSBwMi5jb2x1bW47Cn07CnZhciBSYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBlbmRDb2x1bW4pIHsKICAgIHRoaXMuc3RhcnQgPSB7CiAgICAgICAgcm93OiBzdGFydFJvdywKICAgICAgICBjb2x1bW46IHN0YXJ0Q29sdW1uCiAgICB9OwoKICAgIHRoaXMuZW5kID0gewogICAgICAgIHJvdzogZW5kUm93LAogICAgICAgIGNvbHVtbjogZW5kQ29sdW1uCiAgICB9Owp9OwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5pc0VxdWFsID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICByZXR1cm4gdGhpcy5zdGFydC5yb3cgPT09IHJhbmdlLnN0YXJ0LnJvdyAmJgogICAgICAgICAgICB0aGlzLmVuZC5yb3cgPT09IHJhbmdlLmVuZC5yb3cgJiYKICAgICAgICAgICAgdGhpcy5zdGFydC5jb2x1bW4gPT09IHJhbmdlLnN0YXJ0LmNvbHVtbiAmJgogICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPT09IHJhbmdlLmVuZC5jb2x1bW47CiAgICB9OwogICAgdGhpcy50b1N0cmluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAoIlJhbmdlOiBbIiArIHRoaXMuc3RhcnQucm93ICsgIi8iICsgdGhpcy5zdGFydC5jb2x1bW4gKwogICAgICAgICAgICAiXSAtPiBbIiArIHRoaXMuZW5kLnJvdyArICIvIiArIHRoaXMuZW5kLmNvbHVtbiArICJdIik7CiAgICB9OwoKICAgIHRoaXMuY29udGFpbnMgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pID09IDA7CiAgICB9OwogICAgdGhpcy5jb21wYXJlUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgewogICAgICAgIHZhciBjbXAsCiAgICAgICAgICAgIGVuZCA9IHJhbmdlLmVuZCwKICAgICAgICAgICAgc3RhcnQgPSByYW5nZS5zdGFydDsKCiAgICAgICAgY21wID0gdGhpcy5jb21wYXJlKGVuZC5yb3csIGVuZC5jb2x1bW4pOwogICAgICAgIGlmIChjbXAgPT0gMSkgewogICAgICAgICAgICBjbXAgPSB0aGlzLmNvbXBhcmUoc3RhcnQucm93LCBzdGFydC5jb2x1bW4pOwogICAgICAgICAgICBpZiAoY21wID09IDEpIHsKICAgICAgICAgICAgICAgIHJldHVybiAyOwogICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gLTEpIHsKICAgICAgICAgICAgcmV0dXJuIC0yOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIGlmIChjbXAgPT0gLTEpIHsKICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIDQyOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgdGhpcy5jb21wYXJlUG9pbnQgPSBmdW5jdGlvbihwKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShwLnJvdywgcC5jb2x1bW4pOwogICAgfTsKICAgIHRoaXMuY29udGFpbnNSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZVBvaW50KHJhbmdlLnN0YXJ0KSA9PSAwICYmIHRoaXMuY29tcGFyZVBvaW50KHJhbmdlLmVuZCkgPT0gMDsKICAgIH07CiAgICB0aGlzLmludGVyc2VjdHMgPSBmdW5jdGlvbihyYW5nZSkgewogICAgICAgIHZhciBjbXAgPSB0aGlzLmNvbXBhcmVSYW5nZShyYW5nZSk7CiAgICAgICAgcmV0dXJuIChjbXAgPT0gLTEgfHwgY21wID09IDAgfHwgY21wID09IDEpOwogICAgfTsKICAgIHRoaXMuaXNFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHJldHVybiB0aGlzLmVuZC5yb3cgPT0gcm93ICYmIHRoaXMuZW5kLmNvbHVtbiA9PSBjb2x1bW47CiAgICB9OwogICAgdGhpcy5pc1N0YXJ0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICByZXR1cm4gdGhpcy5zdGFydC5yb3cgPT0gcm93ICYmIHRoaXMuc3RhcnQuY29sdW1uID09IGNvbHVtbjsKICAgIH07CiAgICB0aGlzLnNldFN0YXJ0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAodHlwZW9mIHJvdyA9PSAib2JqZWN0IikgewogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9IHJvdy5jb2x1bW47CiAgICAgICAgICAgIHRoaXMuc3RhcnQucm93ID0gcm93LnJvdzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLnN0YXJ0LnJvdyA9IHJvdzsKICAgICAgICAgICAgdGhpcy5zdGFydC5jb2x1bW4gPSBjb2x1bW47CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuc2V0RW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAodHlwZW9mIHJvdyA9PSAib2JqZWN0IikgewogICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSByb3cuY29sdW1uOwogICAgICAgICAgICB0aGlzLmVuZC5yb3cgPSByb3cucm93OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IHJvdzsKICAgICAgICAgICAgdGhpcy5lbmQuY29sdW1uID0gY29sdW1uOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmluc2lkZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5pc0VuZChyb3csIGNvbHVtbikgfHwgdGhpcy5pc1N0YXJ0KHJvdywgY29sdW1uKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICAgIHRoaXMuaW5zaWRlU3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pID09IDApIHsKICAgICAgICAgICAgaWYgKHRoaXMuaXNFbmQocm93LCBjb2x1bW4pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgdGhpcy5pbnNpZGVFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pID09IDApIHsKICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGFydChyb3csIGNvbHVtbikpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLmNvbXBhcmUgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICghdGhpcy5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgIGlmIChyb3cgPT09IHRoaXMuc3RhcnQucm93KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uIDwgdGhpcy5zdGFydC5jb2x1bW4gPyAtMSA6IChjb2x1bW4gPiB0aGlzLmVuZC5jb2x1bW4gPyAxIDogMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChyb3cgPCB0aGlzLnN0YXJ0LnJvdykKICAgICAgICAgICAgcmV0dXJuIC0xOwoKICAgICAgICBpZiAocm93ID4gdGhpcy5lbmQucm93KQogICAgICAgICAgICByZXR1cm4gMTsKCiAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID09PSByb3cpCiAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPj0gdGhpcy5zdGFydC5jb2x1bW4gPyAwIDogLTE7CgogICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPT09IHJvdykKICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiA8PSB0aGlzLmVuZC5jb2x1bW4gPyAwIDogMTsKCiAgICAgICAgcmV0dXJuIDA7CiAgICB9OwogICAgdGhpcy5jb21wYXJlU3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA9PSByb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gY29sdW1uKSB7CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5jb21wYXJlRW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAodGhpcy5lbmQucm93ID09IHJvdyAmJiB0aGlzLmVuZC5jb2x1bW4gPT0gY29sdW1uKSB7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNvbXBhcmVJbnNpZGUgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPT0gcm93ICYmIHRoaXMuZW5kLmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXJ0LnJvdyA9PSByb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gY29sdW1uKSB7CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5jbGlwUm93cyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA+IGxhc3RSb3cpCiAgICAgICAgICAgIHZhciBlbmQgPSB7cm93OiBsYXN0Um93ICsgMSwgY29sdW1uOiAwfTsKICAgICAgICBlbHNlIGlmICh0aGlzLmVuZC5yb3cgPCBmaXJzdFJvdykKICAgICAgICAgICAgdmFyIGVuZCA9IHtyb3c6IGZpcnN0Um93LCBjb2x1bW46IDB9OwoKICAgICAgICBpZiAodGhpcy5zdGFydC5yb3cgPiBsYXN0Um93KQogICAgICAgICAgICB2YXIgc3RhcnQgPSB7cm93OiBsYXN0Um93ICsgMSwgY29sdW1uOiAwfTsKICAgICAgICBlbHNlIGlmICh0aGlzLnN0YXJ0LnJvdyA8IGZpcnN0Um93KQogICAgICAgICAgICB2YXIgc3RhcnQgPSB7cm93OiBmaXJzdFJvdywgY29sdW1uOiAwfTsKCiAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHMoc3RhcnQgfHwgdGhpcy5zdGFydCwgZW5kIHx8IHRoaXMuZW5kKTsKICAgIH07CiAgICB0aGlzLmV4dGVuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgdmFyIGNtcCA9IHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7CgogICAgICAgIGlmIChjbXAgPT0gMCkKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgZWxzZSBpZiAoY21wID09IC0xKQogICAgICAgICAgICB2YXIgc3RhcnQgPSB7cm93OiByb3csIGNvbHVtbjogY29sdW1ufTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHZhciBlbmQgPSB7cm93OiByb3csIGNvbHVtbjogY29sdW1ufTsKCiAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHMoc3RhcnQgfHwgdGhpcy5zdGFydCwgZW5kIHx8IHRoaXMuZW5kKTsKICAgIH07CgogICAgdGhpcy5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICh0aGlzLnN0YXJ0LnJvdyA9PT0gdGhpcy5lbmQucm93ICYmIHRoaXMuc3RhcnQuY29sdW1uID09PSB0aGlzLmVuZC5jb2x1bW4pOwogICAgfTsKICAgIHRoaXMuaXNNdWx0aUxpbmUgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gKHRoaXMuc3RhcnQucm93ICE9PSB0aGlzLmVuZC5yb3cpOwogICAgfTsKICAgIHRoaXMuY2xvbmUgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyh0aGlzLnN0YXJ0LCB0aGlzLmVuZCk7CiAgICB9OwogICAgdGhpcy5jb2xsYXBzZVJvd3MgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5lbmQuY29sdW1uID09IDApCiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2UodGhpcy5zdGFydC5yb3csIDAsIE1hdGgubWF4KHRoaXMuc3RhcnQucm93LCB0aGlzLmVuZC5yb3ctMSksIDApOwogICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywgMCwgdGhpcy5lbmQucm93LCAwKTsKICAgIH07CiAgICB0aGlzLnRvU2NyZWVuUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHNjcmVlblBvc1N0YXJ0ID0gc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5zdGFydCk7CiAgICAgICAgdmFyIHNjcmVlblBvc0VuZCA9IHNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHRoaXMuZW5kKTsKCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSgKICAgICAgICAgICAgc2NyZWVuUG9zU3RhcnQucm93LCBzY3JlZW5Qb3NTdGFydC5jb2x1bW4sCiAgICAgICAgICAgIHNjcmVlblBvc0VuZC5yb3csIHNjcmVlblBvc0VuZC5jb2x1bW4KICAgICAgICApOwogICAgfTsKICAgIHRoaXMubW92ZUJ5ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICB0aGlzLnN0YXJ0LnJvdyArPSByb3c7CiAgICAgICAgdGhpcy5zdGFydC5jb2x1bW4gKz0gY29sdW1uOwogICAgICAgIHRoaXMuZW5kLnJvdyArPSByb3c7CiAgICAgICAgdGhpcy5lbmQuY29sdW1uICs9IGNvbHVtbjsKICAgIH07Cgp9KS5jYWxsKFJhbmdlLnByb3RvdHlwZSk7ClJhbmdlLmZyb21Qb2ludHMgPSBmdW5jdGlvbihzdGFydCwgZW5kKSB7CiAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uLCBlbmQucm93LCBlbmQuY29sdW1uKTsKfTsKUmFuZ2UuY29tcGFyZVBvaW50cyA9IGNvbXBhcmVQb2ludHM7CgpSYW5nZS5jb21wYXJlUG9pbnRzID0gZnVuY3Rpb24ocDEsIHAyKSB7CiAgICByZXR1cm4gcDEucm93IC0gcDIucm93IHx8IHAxLmNvbHVtbiAtIHAyLmNvbHVtbjsKfTsKCgpleHBvcnRzLlJhbmdlID0gUmFuZ2U7Cn0pOwoKYWNlLmRlZmluZSgiYWNlL2FwcGx5X2RlbHRhIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmZ1bmN0aW9uIHRocm93RGVsdGFFcnJvcihkZWx0YSwgZXJyb3JUZXh0KXsKICAgIGNvbnNvbGUubG9nKCJJbnZhbGlkIERlbHRhOiIsIGRlbHRhKTsKICAgIHRocm93ICJJbnZhbGlkIERlbHRhOiAiICsgZXJyb3JUZXh0Owp9CgpmdW5jdGlvbiBwb3NpdGlvbkluRG9jdW1lbnQoZG9jTGluZXMsIHBvc2l0aW9uKSB7CiAgICByZXR1cm4gcG9zaXRpb24ucm93ICAgID49IDAgJiYgcG9zaXRpb24ucm93ICAgIDwgIGRvY0xpbmVzLmxlbmd0aCAmJgogICAgICAgICAgIHBvc2l0aW9uLmNvbHVtbiA+PSAwICYmIHBvc2l0aW9uLmNvbHVtbiA8PSBkb2NMaW5lc1twb3NpdGlvbi5yb3ddLmxlbmd0aDsKfQoKZnVuY3Rpb24gdmFsaWRhdGVEZWx0YShkb2NMaW5lcywgZGVsdGEpIHsKICAgIGlmIChkZWx0YS5hY3Rpb24gIT0gImluc2VydCIgJiYgZGVsdGEuYWN0aW9uICE9ICJyZW1vdmUiKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLmFjdGlvbiBtdXN0IGJlICdpbnNlcnQnIG9yICdyZW1vdmUnIik7CiAgICBpZiAoIShkZWx0YS5saW5lcyBpbnN0YW5jZW9mIEFycmF5KSkKICAgICAgICB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsICJkZWx0YS5saW5lcyBtdXN0IGJlIGFuIEFycmF5Iik7CiAgICBpZiAoIWRlbHRhLnN0YXJ0IHx8ICFkZWx0YS5lbmQpCiAgICAgICB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsICJkZWx0YS5zdGFydC9lbmQgbXVzdCBiZSBhbiBwcmVzZW50Iik7CiAgICB2YXIgc3RhcnQgPSBkZWx0YS5zdGFydDsKICAgIGlmICghcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBkZWx0YS5zdGFydCkpCiAgICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEuc3RhcnQgbXVzdCBiZSBjb250YWluZWQgaW4gZG9jdW1lbnQiKTsKICAgIHZhciBlbmQgPSBkZWx0YS5lbmQ7CiAgICBpZiAoZGVsdGEuYWN0aW9uID09ICJyZW1vdmUiICYmICFwb3NpdGlvbkluRG9jdW1lbnQoZG9jTGluZXMsIGVuZCkpCiAgICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEuZW5kIG11c3QgY29udGFpbmVkIGluIGRvY3VtZW50IGZvciAncmVtb3ZlJyBhY3Rpb25zIik7CiAgICB2YXIgbnVtUmFuZ2VSb3dzID0gZW5kLnJvdyAtIHN0YXJ0LnJvdzsKICAgIHZhciBudW1SYW5nZUxhc3RMaW5lQ2hhcnMgPSAoZW5kLmNvbHVtbiAtIChudW1SYW5nZVJvd3MgPT0gMCA/IHN0YXJ0LmNvbHVtbiA6IDApKTsKICAgIGlmIChudW1SYW5nZVJvd3MgIT0gZGVsdGEubGluZXMubGVuZ3RoIC0gMSB8fCBkZWx0YS5saW5lc1tudW1SYW5nZVJvd3NdLmxlbmd0aCAhPSBudW1SYW5nZUxhc3RMaW5lQ2hhcnMpCiAgICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEucmFuZ2UgbXVzdCBtYXRjaCBkZWx0YSBsaW5lcyIpOwp9CgpleHBvcnRzLmFwcGx5RGVsdGEgPSBmdW5jdGlvbihkb2NMaW5lcywgZGVsdGEsIGRvTm90VmFsaWRhdGUpIHsKICAgIAogICAgdmFyIHJvdyA9IGRlbHRhLnN0YXJ0LnJvdzsKICAgIHZhciBzdGFydENvbHVtbiA9IGRlbHRhLnN0YXJ0LmNvbHVtbjsKICAgIHZhciBsaW5lID0gZG9jTGluZXNbcm93XSB8fCAiIjsKICAgIHN3aXRjaCAoZGVsdGEuYWN0aW9uKSB7CiAgICAgICAgY2FzZSAiaW5zZXJ0IjoKICAgICAgICAgICAgdmFyIGxpbmVzID0gZGVsdGEubGluZXM7CiAgICAgICAgICAgIGlmIChsaW5lcy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgICAgIGRvY0xpbmVzW3Jvd10gPSBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBkZWx0YS5saW5lc1swXSArIGxpbmUuc3Vic3RyaW5nKHN0YXJ0Q29sdW1uKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW3JvdywgMV0uY29uY2F0KGRlbHRhLmxpbmVzKTsKICAgICAgICAgICAgICAgIGRvY0xpbmVzLnNwbGljZS5hcHBseShkb2NMaW5lcywgYXJncyk7CiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3ddID0gbGluZS5zdWJzdHJpbmcoMCwgc3RhcnRDb2x1bW4pICsgZG9jTGluZXNbcm93XTsKICAgICAgICAgICAgICAgIGRvY0xpbmVzW3JvdyArIGRlbHRhLmxpbmVzLmxlbmd0aCAtIDFdICs9IGxpbmUuc3Vic3RyaW5nKHN0YXJ0Q29sdW1uKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJyZW1vdmUiOgogICAgICAgICAgICB2YXIgZW5kQ29sdW1uID0gZGVsdGEuZW5kLmNvbHVtbjsKICAgICAgICAgICAgdmFyIGVuZFJvdyA9IGRlbHRhLmVuZC5yb3c7CiAgICAgICAgICAgIGlmIChyb3cgPT09IGVuZFJvdykgewogICAgICAgICAgICAgICAgZG9jTGluZXNbcm93XSA9IGxpbmUuc3Vic3RyaW5nKDAsIHN0YXJ0Q29sdW1uKSArIGxpbmUuc3Vic3RyaW5nKGVuZENvbHVtbik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkb2NMaW5lcy5zcGxpY2UoCiAgICAgICAgICAgICAgICAgICAgcm93LCBlbmRSb3cgLSByb3cgKyAxLAogICAgICAgICAgICAgICAgICAgIGxpbmUuc3Vic3RyaW5nKDAsIHN0YXJ0Q29sdW1uKSArIGRvY0xpbmVzW2VuZFJvd10uc3Vic3RyaW5nKGVuZENvbHVtbikKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICB9Cn07Cn0pOwoKYWNlLmRlZmluZSgiYWNlL2xpYi9ldmVudF9lbWl0dGVyIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBFdmVudEVtaXR0ZXIgPSB7fTsKdmFyIHN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkgeyB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7IH07CnZhciBwcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkgeyB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOyB9OwoKRXZlbnRFbWl0dGVyLl9lbWl0ID0KRXZlbnRFbWl0dGVyLl9kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7CiAgICB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8ICh0aGlzLl9ldmVudFJlZ2lzdHJ5ID0ge30pOwogICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzIHx8ICh0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7fSk7CgogICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSB8fCBbXTsKICAgIHZhciBkZWZhdWx0SGFuZGxlciA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdOwogICAgaWYgKCFsaXN0ZW5lcnMubGVuZ3RoICYmICFkZWZhdWx0SGFuZGxlcikKICAgICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZiBlICE9ICJvYmplY3QiIHx8ICFlKQogICAgICAgIGUgPSB7fTsKCiAgICBpZiAoIWUudHlwZSkKICAgICAgICBlLnR5cGUgPSBldmVudE5hbWU7CiAgICBpZiAoIWUuc3RvcFByb3BhZ2F0aW9uKQogICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uID0gc3RvcFByb3BhZ2F0aW9uOwogICAgaWYgKCFlLnByZXZlbnREZWZhdWx0KQogICAgICAgIGUucHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdDsKCiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBsaXN0ZW5lcnNbaV0oZSwgdGhpcyk7CiAgICAgICAgaWYgKGUucHJvcGFnYXRpb25TdG9wcGVkKQogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIAogICAgaWYgKGRlZmF1bHRIYW5kbGVyICYmICFlLmRlZmF1bHRQcmV2ZW50ZWQpCiAgICAgICAgcmV0dXJuIGRlZmF1bHRIYW5kbGVyKGUsIHRoaXMpOwp9OwoKCkV2ZW50RW1pdHRlci5fc2lnbmFsID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7CiAgICB2YXIgbGlzdGVuZXJzID0gKHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge30pW2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspCiAgICAgICAgbGlzdGVuZXJzW2ldKGUsIHRoaXMpOwp9OwoKRXZlbnRFbWl0dGVyLm9uY2UgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgX3NlbGYgPSB0aGlzOwogICAgdGhpcy5vbihldmVudE5hbWUsIGZ1bmN0aW9uIG5ld0NhbGxiYWNrKCkgewogICAgICAgIF9zZWxmLm9mZihldmVudE5hbWUsIG5ld0NhbGxiYWNrKTsKICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSk7CiAgICBpZiAoIWNhbGxiYWNrKSB7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHsKICAgICAgICAgICAgY2FsbGJhY2sgPSByZXNvbHZlOwogICAgICAgIH0pOwogICAgfQp9OwoKCkV2ZW50RW1pdHRlci5zZXREZWZhdWx0SGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKICAgIHZhciBoYW5kbGVycyA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyczsKICAgIGlmICghaGFuZGxlcnMpCiAgICAgICAgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7X2Rpc2FibGVkXzoge319OwogICAgCiAgICBpZiAoaGFuZGxlcnNbZXZlbnROYW1lXSkgewogICAgICAgIHZhciBvbGQgPSBoYW5kbGVyc1tldmVudE5hbWVdOwogICAgICAgIHZhciBkaXNhYmxlZCA9IGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTsKICAgICAgICBpZiAoIWRpc2FibGVkKQogICAgICAgICAgICBoYW5kbGVycy5fZGlzYWJsZWRfW2V2ZW50TmFtZV0gPSBkaXNhYmxlZCA9IFtdOwogICAgICAgIGRpc2FibGVkLnB1c2gob2xkKTsKICAgICAgICB2YXIgaSA9IGRpc2FibGVkLmluZGV4T2YoY2FsbGJhY2spOwogICAgICAgIGlmIChpICE9IC0xKSAKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQogICAgaGFuZGxlcnNbZXZlbnROYW1lXSA9IGNhbGxiYWNrOwp9OwpFdmVudEVtaXR0ZXIucmVtb3ZlRGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnM7CiAgICBpZiAoIWhhbmRsZXJzKQogICAgICAgIHJldHVybjsKICAgIHZhciBkaXNhYmxlZCA9IGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTsKICAgIAogICAgaWYgKGhhbmRsZXJzW2V2ZW50TmFtZV0gPT0gY2FsbGJhY2spIHsKICAgICAgICBpZiAoZGlzYWJsZWQpCiAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdEhhbmRsZXIoZXZlbnROYW1lLCBkaXNhYmxlZC5wb3AoKSk7CiAgICB9IGVsc2UgaWYgKGRpc2FibGVkKSB7CiAgICAgICAgdmFyIGkgPSBkaXNhYmxlZC5pbmRleE9mKGNhbGxiYWNrKTsKICAgICAgICBpZiAoaSAhPSAtMSkKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQp9OwoKRXZlbnRFbWl0dGVyLm9uID0KRXZlbnRFbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrLCBjYXB0dXJpbmcpIHsKICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwoKICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKCiAgICBpZiAobGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spID09IC0xKQogICAgICAgIGxpc3RlbmVyc1tjYXB0dXJpbmcgPyAidW5zaGlmdCIgOiAicHVzaCJdKGNhbGxiYWNrKTsKICAgIHJldHVybiBjYWxsYmFjazsKfTsKCkV2ZW50RW1pdHRlci5vZmYgPQpFdmVudEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPQpFdmVudEVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwoKICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CgogICAgdmFyIGluZGV4ID0gbGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spOwogICAgaWYgKGluZGV4ICE9PSAtMSkKICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTsKfTsKCkV2ZW50RW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudE5hbWUpIHsKICAgIGlmICghZXZlbnROYW1lKSB0aGlzLl9ldmVudFJlZ2lzdHJ5ID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJzID0gdW5kZWZpbmVkOwogICAgaWYgKHRoaXMuX2V2ZW50UmVnaXN0cnkpIHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSA9IHVuZGVmaW5lZDsKICAgIGlmICh0aGlzLl9kZWZhdWx0SGFuZGxlcnMpIHRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdID0gdW5kZWZpbmVkOwp9OwoKZXhwb3J0cy5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7Cgp9KTsKCmFjZS5kZWZpbmUoImFjZS9hbmNob3IiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwp2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKCnZhciBBbmNob3IgPSBleHBvcnRzLkFuY2hvciA9IGZ1bmN0aW9uKGRvYywgcm93LCBjb2x1bW4pIHsKICAgIHRoaXMuJG9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpOwogICAgdGhpcy5hdHRhY2goZG9jKTsKICAgIAogICAgaWYgKHR5cGVvZiBjb2x1bW4gPT0gInVuZGVmaW5lZCIpCiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbihyb3cucm93LCByb3cuY29sdW1uKTsKICAgIGVsc2UKICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHJvdywgY29sdW1uKTsKfTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICB0aGlzLmdldFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQodGhpcy5yb3csIHRoaXMuY29sdW1uKTsKICAgIH07CiAgICB0aGlzLmdldERvY3VtZW50ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQ7CiAgICB9OwogICAgdGhpcy4kaW5zZXJ0UmlnaHQgPSBmYWxzZTsKICAgIHRoaXMub25DaGFuZ2UgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIGlmIChkZWx0YS5zdGFydC5yb3cgPT0gZGVsdGEuZW5kLnJvdyAmJiBkZWx0YS5zdGFydC5yb3cgIT0gdGhpcy5yb3cpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgaWYgKGRlbHRhLnN0YXJ0LnJvdyA+IHRoaXMucm93KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIAogICAgICAgIHZhciBwb2ludCA9ICRnZXRUcmFuc2Zvcm1lZFBvaW50KGRlbHRhLCB7cm93OiB0aGlzLnJvdywgY29sdW1uOiB0aGlzLmNvbHVtbn0sIHRoaXMuJGluc2VydFJpZ2h0KTsKICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHBvaW50LnJvdywgcG9pbnQuY29sdW1uLCB0cnVlKTsKICAgIH07CiAgICAKICAgIGZ1bmN0aW9uICRwb2ludHNJbk9yZGVyKHBvaW50MSwgcG9pbnQyLCBlcXVhbFBvaW50c0luT3JkZXIpIHsKICAgICAgICB2YXIgYkNvbElzQWZ0ZXIgPSBlcXVhbFBvaW50c0luT3JkZXIgPyBwb2ludDEuY29sdW1uIDw9IHBvaW50Mi5jb2x1bW4gOiBwb2ludDEuY29sdW1uIDwgcG9pbnQyLmNvbHVtbjsKICAgICAgICByZXR1cm4gKHBvaW50MS5yb3cgPCBwb2ludDIucm93KSB8fCAocG9pbnQxLnJvdyA9PSBwb2ludDIucm93ICYmIGJDb2xJc0FmdGVyKTsKICAgIH0KICAgICAgICAgICAgCiAgICBmdW5jdGlvbiAkZ2V0VHJhbnNmb3JtZWRQb2ludChkZWx0YSwgcG9pbnQsIG1vdmVJZkVxdWFsKSB7CiAgICAgICAgdmFyIGRlbHRhSXNJbnNlcnQgPSBkZWx0YS5hY3Rpb24gPT0gImluc2VydCI7CiAgICAgICAgdmFyIGRlbHRhUm93U2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLnJvdyAgICAtIGRlbHRhLnN0YXJ0LnJvdyk7CiAgICAgICAgdmFyIGRlbHRhQ29sU2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLmNvbHVtbiAtIGRlbHRhLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgdmFyIGRlbHRhU3RhcnQgPSBkZWx0YS5zdGFydDsKICAgICAgICB2YXIgZGVsdGFFbmQgPSBkZWx0YUlzSW5zZXJ0ID8gZGVsdGFTdGFydCA6IGRlbHRhLmVuZDsgLy8gQ29sbGFwc2UgaW5zZXJ0IHJhbmdlLgogICAgICAgIGlmICgkcG9pbnRzSW5PcmRlcihwb2ludCwgZGVsdGFTdGFydCwgbW92ZUlmRXF1YWwpKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICByb3c6IHBvaW50LnJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogcG9pbnQuY29sdW1uCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmICgkcG9pbnRzSW5PcmRlcihkZWx0YUVuZCwgcG9pbnQsICFtb3ZlSWZFcXVhbCkpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHJvdzogcG9pbnQucm93ICsgZGVsdGFSb3dTaGlmdCwKICAgICAgICAgICAgICAgIGNvbHVtbjogcG9pbnQuY29sdW1uICsgKHBvaW50LnJvdyA9PSBkZWx0YUVuZC5yb3cgPyBkZWx0YUNvbFNoaWZ0IDogMCkKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcm93OiBkZWx0YVN0YXJ0LnJvdywKICAgICAgICAgICAgY29sdW1uOiBkZWx0YVN0YXJ0LmNvbHVtbgogICAgICAgIH07CiAgICB9CiAgICB0aGlzLnNldFBvc2l0aW9uID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIG5vQ2xpcCkgewogICAgICAgIHZhciBwb3M7CiAgICAgICAgaWYgKG5vQ2xpcCkgewogICAgICAgICAgICBwb3MgPSB7CiAgICAgICAgICAgICAgICByb3c6IHJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uCiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChyb3csIGNvbHVtbik7CiAgICAgICAgfQoKICAgICAgICBpZiAodGhpcy5yb3cgPT0gcG9zLnJvdyAmJiB0aGlzLmNvbHVtbiA9PSBwb3MuY29sdW1uKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBvbGQgPSB7CiAgICAgICAgICAgIHJvdzogdGhpcy5yb3csCiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4KICAgICAgICB9OwoKICAgICAgICB0aGlzLnJvdyA9IHBvcy5yb3c7CiAgICAgICAgdGhpcy5jb2x1bW4gPSBwb3MuY29sdW1uOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgewogICAgICAgICAgICBvbGQ6IG9sZCwKICAgICAgICAgICAgdmFsdWU6IHBvcwogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMuZGV0YWNoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5kb2N1bWVudC5vZmYoImNoYW5nZSIsIHRoaXMuJG9uQ2hhbmdlKTsKICAgIH07CiAgICB0aGlzLmF0dGFjaCA9IGZ1bmN0aW9uKGRvYykgewogICAgICAgIHRoaXMuZG9jdW1lbnQgPSBkb2MgfHwgdGhpcy5kb2N1bWVudDsKICAgICAgICB0aGlzLmRvY3VtZW50Lm9uKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7CiAgICB9OwogICAgdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgdmFyIHBvcyA9IHt9OwoKICAgICAgICBpZiAocm93ID49IHRoaXMuZG9jdW1lbnQuZ2V0TGVuZ3RoKCkpIHsKICAgICAgICAgICAgcG9zLnJvdyA9IE1hdGgubWF4KDAsIHRoaXMuZG9jdW1lbnQuZ2V0TGVuZ3RoKCkgLSAxKTsKICAgICAgICAgICAgcG9zLmNvbHVtbiA9IHRoaXMuZG9jdW1lbnQuZ2V0TGluZShwb3Mucm93KS5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHJvdyA8IDApIHsKICAgICAgICAgICAgcG9zLnJvdyA9IDA7CiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSAwOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcG9zLnJvdyA9IHJvdzsKICAgICAgICAgICAgcG9zLmNvbHVtbiA9IE1hdGgubWluKHRoaXMuZG9jdW1lbnQuZ2V0TGluZShwb3Mucm93KS5sZW5ndGgsIE1hdGgubWF4KDAsIGNvbHVtbikpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNvbHVtbiA8IDApCiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSAwOwoKICAgICAgICByZXR1cm4gcG9zOwogICAgfTsKCn0pLmNhbGwoQW5jaG9yLnByb3RvdHlwZSk7Cgp9KTsKCmFjZS5kZWZpbmUoImFjZS9kb2N1bWVudCIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7CnZhciBhcHBseURlbHRhID0gcmVxdWlyZSgiLi9hcHBseV9kZWx0YSIpLmFwcGx5RGVsdGE7CnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7CnZhciBBbmNob3IgPSByZXF1aXJlKCIuL2FuY2hvciIpLkFuY2hvcjsKCnZhciBEb2N1bWVudCA9IGZ1bmN0aW9uKHRleHRPckxpbmVzKSB7CiAgICB0aGlzLiRsaW5lcyA9IFsiIl07CiAgICBpZiAodGV4dE9yTGluZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy4kbGluZXMgPSBbIiJdOwogICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRleHRPckxpbmVzKSkgewogICAgICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMoe3JvdzogMCwgY29sdW1uOiAwfSwgdGV4dE9yTGluZXMpOwogICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46MH0sIHRleHRPckxpbmVzKTsKICAgIH0KfTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHZhciBsZW4gPSB0aGlzLmdldExlbmd0aCgpIC0gMTsKICAgICAgICB0aGlzLnJlbW92ZShuZXcgUmFuZ2UoMCwgMCwgbGVuLCB0aGlzLmdldExpbmUobGVuKS5sZW5ndGgpKTsKICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46IDB9LCB0ZXh0KTsKICAgIH07CiAgICB0aGlzLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsTGluZXMoKS5qb2luKHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpKTsKICAgIH07CiAgICB0aGlzLmNyZWF0ZUFuY2hvciA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIG5ldyBBbmNob3IodGhpcywgcm93LCBjb2x1bW4pOwogICAgfTsKICAgIGlmICgiYWFhIi5zcGxpdCgvYS8pLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9cclxufFxyL2csICJcbiIpLnNwbGl0KCJcbiIpOwogICAgICAgIH07CiAgICB9IGVsc2UgewogICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgICAgICByZXR1cm4gdGV4dC5zcGxpdCgvXHJcbnxccnxcbi8pOwogICAgICAgIH07CiAgICB9CgoKICAgIHRoaXMuJGRldGVjdE5ld0xpbmUgPSBmdW5jdGlvbih0ZXh0KSB7CiAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5tYXRjaCgvXi4qPyhcclxufFxyfFxuKS9tKTsKICAgICAgICB0aGlzLiRhdXRvTmV3TGluZSA9IG1hdGNoID8gbWF0Y2hbMV0gOiAiXG4iOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKTsKICAgIH07CiAgICB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICBzd2l0Y2ggKHRoaXMuJG5ld0xpbmVNb2RlKSB7CiAgICAgICAgICBjYXNlICJ3aW5kb3dzIjoKICAgICAgICAgICAgcmV0dXJuICJcclxuIjsKICAgICAgICAgIGNhc2UgInVuaXgiOgogICAgICAgICAgICByZXR1cm4gIlxuIjsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiB0aGlzLiRhdXRvTmV3TGluZSB8fCAiXG4iOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy4kYXV0b05ld0xpbmUgPSAiIjsKICAgIHRoaXMuJG5ld0xpbmVNb2RlID0gImF1dG8iOwogICAgdGhpcy5zZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKG5ld0xpbmVNb2RlKSB7CiAgICAgICAgaWYgKHRoaXMuJG5ld0xpbmVNb2RlID09PSBuZXdMaW5lTW9kZSkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB0aGlzLiRuZXdMaW5lTW9kZSA9IG5ld0xpbmVNb2RlOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKTsKICAgIH07CiAgICB0aGlzLmdldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG5ld0xpbmVNb2RlOwogICAgfTsKICAgIHRoaXMuaXNOZXdMaW5lID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHJldHVybiAodGV4dCA9PSAiXHJcbiIgfHwgdGV4dCA9PSAiXHIiIHx8IHRleHQgPT0gIlxuIik7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lID0gZnVuY3Rpb24ocm93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzW3Jvd10gfHwgIiI7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CiAgICB9OwogICAgdGhpcy5nZXRBbGxMaW5lcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmdldExpbmVzKDAsIHRoaXMuZ2V0TGVuZ3RoKCkpOwogICAgfTsKICAgIHRoaXMuZ2V0TGVuZ3RoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLmxlbmd0aDsKICAgIH07CiAgICB0aGlzLmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSkuam9pbih0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSk7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lc0ZvclJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICB2YXIgbGluZXM7CiAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PT0gcmFuZ2UuZW5kLnJvdykgewogICAgICAgICAgICBsaW5lcyA9IFt0aGlzLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uKV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGluZXMgPSB0aGlzLmdldExpbmVzKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2UuZW5kLnJvdyk7CiAgICAgICAgICAgIGxpbmVzWzBdID0gKGxpbmVzWzBdIHx8ICIiKS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgdmFyIGwgPSBsaW5lcy5sZW5ndGggLSAxOwogICAgICAgICAgICBpZiAocmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdyA9PSBsKQogICAgICAgICAgICAgICAgbGluZXNbbF0gPSBsaW5lc1tsXS5zdWJzdHJpbmcoMCwgcmFuZ2UuZW5kLmNvbHVtbik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaW5lczsKICAgIH07CiAgICB0aGlzLmluc2VydExpbmVzID0gZnVuY3Rpb24ocm93LCBsaW5lcykgewogICAgICAgIGNvbnNvbGUud2FybigiVXNlIG9mIGRvY3VtZW50Lmluc2VydExpbmVzIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgaW5zZXJ0RnVsbExpbmVzIG1ldGhvZCBpbnN0ZWFkLiIpOwogICAgICAgIHJldHVybiB0aGlzLmluc2VydEZ1bGxMaW5lcyhyb3csIGxpbmVzKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICBjb25zb2xlLndhcm4oIlVzZSBvZiBkb2N1bWVudC5yZW1vdmVMaW5lcyBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHJlbW92ZUZ1bGxMaW5lcyBtZXRob2QgaW5zdGVhZC4iKTsKICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVGdWxsTGluZXMoZmlyc3RSb3csIGxhc3RSb3cpOwogICAgfTsKICAgIHRoaXMuaW5zZXJ0TmV3TGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJVc2Ugb2YgZG9jdW1lbnQuaW5zZXJ0TmV3TGluZSBpcyBkZXByZWNhdGVkLiBVc2UgaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIFsnJywgJyddKSBpbnN0ZWFkLiIpOwogICAgICAgIHJldHVybiB0aGlzLmluc2VydE1lcmdlZExpbmVzKHBvc2l0aW9uLCBbIiIsICIiXSk7CiAgICB9OwogICAgdGhpcy5pbnNlcnQgPSBmdW5jdGlvbihwb3NpdGlvbiwgdGV4dCkgewogICAgICAgIGlmICh0aGlzLmdldExlbmd0aCgpIDw9IDEpCiAgICAgICAgICAgIHRoaXMuJGRldGVjdE5ld0xpbmUodGV4dCk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIHRoaXMuJHNwbGl0KHRleHQpKTsKICAgIH07CiAgICB0aGlzLmluc2VydEluTGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uLCB0ZXh0KSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5wb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4gKyB0ZXh0Lmxlbmd0aCk7CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICBlbmQ6IGVuZCwKICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0IiwKICAgICAgICAgICAgbGluZXM6IFt0ZXh0XQogICAgICAgIH0sIHRydWUpOwogICAgICAgIAogICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKGVuZCk7CiAgICB9OwogICAgCiAgICB0aGlzLmNsaXBwZWRQb3MgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwogICAgICAgIGlmIChyb3cgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICByb3cgPSBsZW5ndGg7CiAgICAgICAgfSBlbHNlIGlmIChyb3cgPCAwKSB7CiAgICAgICAgICAgIHJvdyA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChyb3cgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgIHJvdyA9IGxlbmd0aCAtIDE7CiAgICAgICAgICAgIGNvbHVtbiA9IHVuZGVmaW5lZDsKICAgICAgICB9CiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUocm93KTsKICAgICAgICBpZiAoY29sdW1uID09IHVuZGVmaW5lZCkKICAgICAgICAgICAgY29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgY29sdW1uID0gTWF0aC5taW4oTWF0aC5tYXgoY29sdW1uLCAwKSwgbGluZS5sZW5ndGgpOwogICAgICAgIHJldHVybiB7cm93OiByb3csIGNvbHVtbjogY29sdW1ufTsKICAgIH07CiAgICAKICAgIHRoaXMuY2xvbmVQb3MgPSBmdW5jdGlvbihwb3MpIHsKICAgICAgICByZXR1cm4ge3JvdzogcG9zLnJvdywgY29sdW1uOiBwb3MuY29sdW1ufTsKICAgIH07CiAgICAKICAgIHRoaXMucG9zID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICByZXR1cm4ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07CiAgICB9OwogICAgCiAgICB0aGlzLiRjbGlwUG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwogICAgICAgIGlmIChwb3NpdGlvbi5yb3cgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIGxlbmd0aCAtIDEpOwogICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPSB0aGlzLmdldExpbmUobGVuZ3RoIC0gMSkubGVuZ3RoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIHBvc2l0aW9uLnJvdyk7CiAgICAgICAgICAgIHBvc2l0aW9uLmNvbHVtbiA9IE1hdGgubWluKE1hdGgubWF4KHBvc2l0aW9uLmNvbHVtbiwgMCksIHRoaXMuZ2V0TGluZShwb3NpdGlvbi5yb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgIH07CiAgICB0aGlzLmluc2VydEZ1bGxMaW5lcyA9IGZ1bmN0aW9uKHJvdywgbGluZXMpIHsKICAgICAgICByb3cgPSBNYXRoLm1pbihNYXRoLm1heChyb3csIDApLCB0aGlzLmdldExlbmd0aCgpKTsKICAgICAgICB2YXIgY29sdW1uID0gMDsKICAgICAgICBpZiAocm93IDwgdGhpcy5nZXRMZW5ndGgoKSkgewogICAgICAgICAgICBsaW5lcyA9IGxpbmVzLmNvbmNhdChbIiJdKTsKICAgICAgICAgICAgY29sdW1uID0gMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsaW5lcyA9IFsiIl0uY29uY2F0KGxpbmVzKTsKICAgICAgICAgICAgcm93LS07CiAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuJGxpbmVzW3Jvd10ubGVuZ3RoOwogICAgICAgIH0KICAgICAgICB0aGlzLmluc2VydE1lcmdlZExpbmVzKHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59LCBsaW5lcyk7CiAgICB9OyAgICAKICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMgPSBmdW5jdGlvbihwb3NpdGlvbiwgbGluZXMpIHsKICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmNsaXBwZWRQb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pOwogICAgICAgIHZhciBlbmQgPSB7CiAgICAgICAgICAgIHJvdzogc3RhcnQucm93ICsgbGluZXMubGVuZ3RoIC0gMSwKICAgICAgICAgICAgY29sdW1uOiAobGluZXMubGVuZ3RoID09IDEgPyBzdGFydC5jb2x1bW4gOiAwKSArIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aAogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICBlbmQ6IGVuZCwKICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0IiwKICAgICAgICAgICAgbGluZXM6IGxpbmVzCiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmVQb3MoZW5kKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLmVuZC5yb3csIHJhbmdlLmVuZC5jb2x1bW4pOwogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKICAgICAgICAgICAgZW5kOiBlbmQsCiAgICAgICAgICAgIGFjdGlvbjogInJlbW92ZSIsCiAgICAgICAgICAgIGxpbmVzOiB0aGlzLmdldExpbmVzRm9yUmFuZ2Uoe3N0YXJ0OiBzdGFydCwgZW5kOiBlbmR9KQogICAgICAgIH0pOwogICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKHN0YXJ0KTsKICAgIH07CiAgICB0aGlzLnJlbW92ZUluTGluZSA9IGZ1bmN0aW9uKHJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikgewogICAgICAgIHZhciBzdGFydCA9IHRoaXMuY2xpcHBlZFBvcyhyb3csIHN0YXJ0Q29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJvdywgZW5kQ29sdW1uKTsKICAgICAgICAKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICBzdGFydDogc3RhcnQsCiAgICAgICAgICAgIGVuZDogZW5kLAogICAgICAgICAgICBhY3Rpb246ICJyZW1vdmUiLAogICAgICAgICAgICBsaW5lczogdGhpcy5nZXRMaW5lc0ZvclJhbmdlKHtzdGFydDogc3RhcnQsIGVuZDogZW5kfSkKICAgICAgICB9LCB0cnVlKTsKICAgICAgICAKICAgICAgICByZXR1cm4gdGhpcy5jbG9uZVBvcyhzdGFydCk7CiAgICB9OwogICAgdGhpcy5yZW1vdmVGdWxsTGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgewogICAgICAgIGZpcnN0Um93ID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZmlyc3RSb3cpLCB0aGlzLmdldExlbmd0aCgpIC0gMSk7CiAgICAgICAgbGFzdFJvdyAgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBsYXN0Um93ICksIHRoaXMuZ2V0TGVuZ3RoKCkgLSAxKTsKICAgICAgICB2YXIgZGVsZXRlRmlyc3ROZXdMaW5lID0gbGFzdFJvdyA9PSB0aGlzLmdldExlbmd0aCgpIC0gMSAmJiBmaXJzdFJvdyA+IDA7CiAgICAgICAgdmFyIGRlbGV0ZUxhc3ROZXdMaW5lICA9IGxhc3RSb3cgIDwgdGhpcy5nZXRMZW5ndGgoKSAtIDE7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gKCBkZWxldGVGaXJzdE5ld0xpbmUgPyBmaXJzdFJvdyAtIDEgICAgICAgICAgICAgICAgICA6IGZpcnN0Um93ICAgICAgICAgICAgICAgICAgICApOwogICAgICAgIHZhciBzdGFydENvbCA9ICggZGVsZXRlRmlyc3ROZXdMaW5lID8gdGhpcy5nZXRMaW5lKHN0YXJ0Um93KS5sZW5ndGggOiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICB2YXIgZW5kUm93ICAgPSAoIGRlbGV0ZUxhc3ROZXdMaW5lICA/IGxhc3RSb3cgKyAxICAgICAgICAgICAgICAgICAgIDogbGFzdFJvdyAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgdmFyIGVuZENvbCAgID0gKCBkZWxldGVMYXN0TmV3TGluZSAgPyAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZ2V0TGluZShlbmRSb3cpLmxlbmd0aCApOyAKICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sLCBlbmRSb3csIGVuZENvbCk7CiAgICAgICAgdmFyIGRlbGV0ZWRMaW5lcyA9IHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHJhbmdlLnN0YXJ0LAogICAgICAgICAgICBlbmQ6IHJhbmdlLmVuZCwKICAgICAgICAgICAgYWN0aW9uOiAicmVtb3ZlIiwKICAgICAgICAgICAgbGluZXM6IHRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSkKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZGVsZXRlZExpbmVzOwogICAgfTsKICAgIHRoaXMucmVtb3ZlTmV3TGluZSA9IGZ1bmN0aW9uKHJvdykgewogICAgICAgIGlmIChyb3cgPCB0aGlzLmdldExlbmd0aCgpIC0gMSAmJiByb3cgPj0gMCkgewogICAgICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMucG9zKHJvdywgdGhpcy5nZXRMaW5lKHJvdykubGVuZ3RoKSwKICAgICAgICAgICAgICAgIGVuZDogdGhpcy5wb3Mocm93ICsgMSwgMCksCiAgICAgICAgICAgICAgICBhY3Rpb246ICJyZW1vdmUiLAogICAgICAgICAgICAgICAgbGluZXM6IFsiIiwgIiJdCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLnJlcGxhY2UgPSBmdW5jdGlvbihyYW5nZSwgdGV4dCkgewogICAgICAgIGlmICghKHJhbmdlIGluc3RhbmNlb2YgUmFuZ2UpKQogICAgICAgICAgICByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7CiAgICAgICAgaWYgKHRleHQubGVuZ3RoID09PSAwICYmIHJhbmdlLmlzRW1wdHkoKSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0OwogICAgICAgIGlmICh0ZXh0ID09IHRoaXMuZ2V0VGV4dFJhbmdlKHJhbmdlKSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlLmVuZDsKCiAgICAgICAgdGhpcy5yZW1vdmUocmFuZ2UpOwogICAgICAgIHZhciBlbmQ7CiAgICAgICAgaWYgKHRleHQpIHsKICAgICAgICAgICAgZW5kID0gdGhpcy5pbnNlcnQocmFuZ2Uuc3RhcnQsIHRleHQpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZW5kID0gcmFuZ2Uuc3RhcnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBlbmQ7CiAgICB9OwogICAgdGhpcy5hcHBseURlbHRhcyA9IGZ1bmN0aW9uKGRlbHRhcykgewogICAgICAgIGZvciAodmFyIGk9MDsgaTxkZWx0YXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKGRlbHRhc1tpXSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMucmV2ZXJ0RGVsdGFzID0gZnVuY3Rpb24oZGVsdGFzKSB7CiAgICAgICAgZm9yICh2YXIgaT1kZWx0YXMubGVuZ3RoLTE7IGk+PTA7IGktLSkgewogICAgICAgICAgICB0aGlzLnJldmVydERlbHRhKGRlbHRhc1tpXSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuYXBwbHlEZWx0YSA9IGZ1bmN0aW9uKGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7CiAgICAgICAgdmFyIGlzSW5zZXJ0ID0gZGVsdGEuYWN0aW9uID09ICJpbnNlcnQiOwogICAgICAgIGlmIChpc0luc2VydCA/IGRlbHRhLmxpbmVzLmxlbmd0aCA8PSAxICYmICFkZWx0YS5saW5lc1swXQogICAgICAgICAgICA6ICFSYW5nZS5jb21wYXJlUG9pbnRzKGRlbHRhLnN0YXJ0LCBkZWx0YS5lbmQpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKGlzSW5zZXJ0ICYmIGRlbHRhLmxpbmVzLmxlbmd0aCA+IDIwMDAwKSB7CiAgICAgICAgICAgIHRoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhKGRlbHRhLCAyMDAwMCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBhcHBseURlbHRhKHRoaXMuJGxpbmVzLCBkZWx0YSwgZG9Ob3RWYWxpZGF0ZSk7CiAgICAgICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgZGVsdGEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuJHNhZmVBcHBseURlbHRhID0gZnVuY3Rpb24oZGVsdGEpIHsKICAgICAgICB2YXIgZG9jTGVuZ3RoID0gdGhpcy4kbGluZXMubGVuZ3RoOwogICAgICAgIGlmICgKICAgICAgICAgICAgZGVsdGEuYWN0aW9uID09ICJyZW1vdmUiICYmIGRlbHRhLnN0YXJ0LnJvdyA8IGRvY0xlbmd0aCAmJiBkZWx0YS5lbmQucm93IDwgZG9jTGVuZ3RoCiAgICAgICAgICAgIHx8IGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0IiAmJiBkZWx0YS5zdGFydC5yb3cgPD0gZG9jTGVuZ3RoCiAgICAgICAgKSB7CiAgICAgICAgICAgIHRoaXMuYXBwbHlEZWx0YShkZWx0YSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy4kc3BsaXRBbmRhcHBseUxhcmdlRGVsdGEgPSBmdW5jdGlvbihkZWx0YSwgTUFYKSB7CiAgICAgICAgdmFyIGxpbmVzID0gZGVsdGEubGluZXM7CiAgICAgICAgdmFyIGwgPSBsaW5lcy5sZW5ndGggLSBNQVggKyAxOwogICAgICAgIHZhciByb3cgPSBkZWx0YS5zdGFydC5yb3c7IAogICAgICAgIHZhciBjb2x1bW4gPSBkZWx0YS5zdGFydC5jb2x1bW47CiAgICAgICAgZm9yICh2YXIgZnJvbSA9IDAsIHRvID0gMDsgZnJvbSA8IGw7IGZyb20gPSB0bykgewogICAgICAgICAgICB0byArPSBNQVggLSAxOwogICAgICAgICAgICB2YXIgY2h1bmsgPSBsaW5lcy5zbGljZShmcm9tLCB0byk7CiAgICAgICAgICAgIGNodW5rLnB1c2goIiIpOwogICAgICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMucG9zKHJvdyArIGZyb20sIGNvbHVtbiksCiAgICAgICAgICAgICAgICBlbmQ6IHRoaXMucG9zKHJvdyArIHRvLCBjb2x1bW4gPSAwKSwKICAgICAgICAgICAgICAgIGFjdGlvbjogZGVsdGEuYWN0aW9uLAogICAgICAgICAgICAgICAgbGluZXM6IGNodW5rCiAgICAgICAgICAgIH0sIHRydWUpOwogICAgICAgIH0KICAgICAgICBkZWx0YS5saW5lcyA9IGxpbmVzLnNsaWNlKGZyb20pOwogICAgICAgIGRlbHRhLnN0YXJ0LnJvdyA9IHJvdyArIGZyb207CiAgICAgICAgZGVsdGEuc3RhcnQuY29sdW1uID0gY29sdW1uOwogICAgICAgIHRoaXMuYXBwbHlEZWx0YShkZWx0YSwgdHJ1ZSk7CiAgICB9OwogICAgdGhpcy5yZXZlcnREZWx0YSA9IGZ1bmN0aW9uKGRlbHRhKSB7CiAgICAgICAgdGhpcy4kc2FmZUFwcGx5RGVsdGEoewogICAgICAgICAgICBzdGFydDogdGhpcy5jbG9uZVBvcyhkZWx0YS5zdGFydCksCiAgICAgICAgICAgIGVuZDogdGhpcy5jbG9uZVBvcyhkZWx0YS5lbmQpLAogICAgICAgICAgICBhY3Rpb246IChkZWx0YS5hY3Rpb24gPT0gImluc2VydCIgPyAicmVtb3ZlIiA6ICJpbnNlcnQiKSwKICAgICAgICAgICAgbGluZXM6IGRlbHRhLmxpbmVzLnNsaWNlKCkKICAgICAgICB9KTsKICAgIH07CiAgICB0aGlzLmluZGV4VG9Qb3NpdGlvbiA9IGZ1bmN0aW9uKGluZGV4LCBzdGFydFJvdykgewogICAgICAgIHZhciBsaW5lcyA9IHRoaXMuJGxpbmVzIHx8IHRoaXMuZ2V0QWxsTGluZXMoKTsKICAgICAgICB2YXIgbmV3bGluZUxlbmd0aCA9IHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpLmxlbmd0aDsKICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3cgfHwgMCwgbCA9IGxpbmVzLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICBpbmRleCAtPSBsaW5lc1tpXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RoOwogICAgICAgICAgICBpZiAoaW5kZXggPCAwKQogICAgICAgICAgICAgICAgcmV0dXJuIHtyb3c6IGksIGNvbHVtbjogaW5kZXggKyBsaW5lc1tpXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RofTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHtyb3c6IGwtMSwgY29sdW1uOiBpbmRleCArIGxpbmVzW2wtMV0ubGVuZ3RoICsgbmV3bGluZUxlbmd0aH07CiAgICB9OwogICAgdGhpcy5wb3NpdGlvblRvSW5kZXggPSBmdW5jdGlvbihwb3MsIHN0YXJ0Um93KSB7CiAgICAgICAgdmFyIGxpbmVzID0gdGhpcy4kbGluZXMgfHwgdGhpcy5nZXRBbGxMaW5lcygpOwogICAgICAgIHZhciBuZXdsaW5lTGVuZ3RoID0gdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkubGVuZ3RoOwogICAgICAgIHZhciBpbmRleCA9IDA7CiAgICAgICAgdmFyIHJvdyA9IE1hdGgubWluKHBvcy5yb3csIGxpbmVzLmxlbmd0aCk7CiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0Um93IHx8IDA7IGkgPCByb3c7ICsraSkKICAgICAgICAgICAgaW5kZXggKz0gbGluZXNbaV0ubGVuZ3RoICsgbmV3bGluZUxlbmd0aDsKCiAgICAgICAgcmV0dXJuIGluZGV4ICsgcG9zLmNvbHVtbjsKICAgIH07Cgp9KS5jYWxsKERvY3VtZW50LnByb3RvdHlwZSk7CgpleHBvcnRzLkRvY3VtZW50ID0gRG9jdW1lbnQ7Cn0pOwoKYWNlLmRlZmluZSgiYWNlL2xpYi9sYW5nIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMubGFzdCA9IGZ1bmN0aW9uKGEpIHsKICAgIHJldHVybiBhW2EubGVuZ3RoIC0gMV07Cn07CgpleHBvcnRzLnN0cmluZ1JldmVyc2UgPSBmdW5jdGlvbihzdHJpbmcpIHsKICAgIHJldHVybiBzdHJpbmcuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKTsKfTsKCmV4cG9ydHMuc3RyaW5nUmVwZWF0ID0gZnVuY3Rpb24gKHN0cmluZywgY291bnQpIHsKICAgIHZhciByZXN1bHQgPSAnJzsKICAgIHdoaWxlIChjb3VudCA+IDApIHsKICAgICAgICBpZiAoY291bnQgJiAxKQogICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5nOwoKICAgICAgICBpZiAoY291bnQgPj49IDEpCiAgICAgICAgICAgIHN0cmluZyArPSBzdHJpbmc7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0Owp9OwoKdmFyIHRyaW1CZWdpblJlZ2V4cCA9IC9eXHNccyovOwp2YXIgdHJpbUVuZFJlZ2V4cCA9IC9cc1xzKiQvOwoKZXhwb3J0cy5zdHJpbmdUcmltTGVmdCA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSh0cmltQmVnaW5SZWdleHAsICcnKTsKfTsKCmV4cG9ydHMuc3RyaW5nVHJpbVJpZ2h0ID0gZnVuY3Rpb24gKHN0cmluZykgewogICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHRyaW1FbmRSZWdleHAsICcnKTsKfTsKCmV4cG9ydHMuY29weU9iamVjdCA9IGZ1bmN0aW9uKG9iaikgewogICAgdmFyIGNvcHkgPSB7fTsKICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsKICAgICAgICBjb3B5W2tleV0gPSBvYmpba2V5XTsKICAgIH0KICAgIHJldHVybiBjb3B5Owp9OwoKZXhwb3J0cy5jb3B5QXJyYXkgPSBmdW5jdGlvbihhcnJheSl7CiAgICB2YXIgY29weSA9IFtdOwogICAgZm9yICh2YXIgaT0wLCBsPWFycmF5Lmxlbmd0aDsgaTxsOyBpKyspIHsKICAgICAgICBpZiAoYXJyYXlbaV0gJiYgdHlwZW9mIGFycmF5W2ldID09ICJvYmplY3QiKQogICAgICAgICAgICBjb3B5W2ldID0gdGhpcy5jb3B5T2JqZWN0KGFycmF5W2ldKTsKICAgICAgICBlbHNlIAogICAgICAgICAgICBjb3B5W2ldID0gYXJyYXlbaV07CiAgICB9CiAgICByZXR1cm4gY29weTsKfTsKCmV4cG9ydHMuZGVlcENvcHkgPSBmdW5jdGlvbiBkZWVwQ29weShvYmopIHsKICAgIGlmICh0eXBlb2Ygb2JqICE9PSAib2JqZWN0IiB8fCAhb2JqKQogICAgICAgIHJldHVybiBvYmo7CiAgICB2YXIgY29weTsKICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHsKICAgICAgICBjb3B5ID0gW107CiAgICAgICAgZm9yICh2YXIga2V5ID0gMDsga2V5IDwgb2JqLmxlbmd0aDsga2V5KyspIHsKICAgICAgICAgICAgY29weVtrZXldID0gZGVlcENvcHkob2JqW2tleV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY29weTsKICAgIH0KICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSAhPT0gIltvYmplY3QgT2JqZWN0XSIpCiAgICAgICAgcmV0dXJuIG9iajsKICAgIAogICAgY29weSA9IHt9OwogICAgZm9yICh2YXIga2V5IGluIG9iaikKICAgICAgICBjb3B5W2tleV0gPSBkZWVwQ29weShvYmpba2V5XSk7CiAgICByZXR1cm4gY29weTsKfTsKCmV4cG9ydHMuYXJyYXlUb01hcCA9IGZ1bmN0aW9uKGFycikgewogICAgdmFyIG1hcCA9IHt9OwogICAgZm9yICh2YXIgaT0wOyBpPGFyci5sZW5ndGg7IGkrKykgewogICAgICAgIG1hcFthcnJbaV1dID0gMTsKICAgIH0KICAgIHJldHVybiBtYXA7Cgp9OwoKZXhwb3J0cy5jcmVhdGVNYXAgPSBmdW5jdGlvbihwcm9wcykgewogICAgdmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICBmb3IgKHZhciBpIGluIHByb3BzKSB7CiAgICAgICAgbWFwW2ldID0gcHJvcHNbaV07CiAgICB9CiAgICByZXR1cm4gbWFwOwp9OwpleHBvcnRzLmFycmF5UmVtb3ZlID0gZnVuY3Rpb24oYXJyYXksIHZhbHVlKSB7CiAgZm9yICh2YXIgaSA9IDA7IGkgPD0gYXJyYXkubGVuZ3RoOyBpKyspIHsKICAgIGlmICh2YWx1ZSA9PT0gYXJyYXlbaV0pIHsKICAgICAgYXJyYXkuc3BsaWNlKGksIDEpOwogICAgfQogIH0KfTsKCmV4cG9ydHMuZXNjYXBlUmVnRXhwID0gZnVuY3Rpb24oc3RyKSB7CiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbLiorP14ke30oKXxbXF1cL1xcXSkvZywgJ1xcJDEnKTsKfTsKCmV4cG9ydHMuZXNjYXBlSFRNTCA9IGZ1bmN0aW9uKHN0cikgewogICAgcmV0dXJuICgiIiArIHN0cikucmVwbGFjZSgvJi9nLCAiJiMzODsiKS5yZXBsYWNlKC8iL2csICImIzM0OyIpLnJlcGxhY2UoLycvZywgIiYjMzk7IikucmVwbGFjZSgvPC9nLCAiJiM2MDsiKTsKfTsKCmV4cG9ydHMuZ2V0TWF0Y2hPZmZzZXRzID0gZnVuY3Rpb24oc3RyaW5nLCByZWdFeHApIHsKICAgIHZhciBtYXRjaGVzID0gW107CgogICAgc3RyaW5nLnJlcGxhY2UocmVnRXhwLCBmdW5jdGlvbihzdHIpIHsKICAgICAgICBtYXRjaGVzLnB1c2goewogICAgICAgICAgICBvZmZzZXQ6IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTJdLAogICAgICAgICAgICBsZW5ndGg6IHN0ci5sZW5ndGgKICAgICAgICB9KTsKICAgIH0pOwoKICAgIHJldHVybiBtYXRjaGVzOwp9OwpleHBvcnRzLmRlZmVycmVkQ2FsbCA9IGZ1bmN0aW9uKGZjbikgewogICAgdmFyIHRpbWVyID0gbnVsbDsKICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRpbWVyID0gbnVsbDsKICAgICAgICBmY24oKTsKICAgIH07CgogICAgdmFyIGRlZmVycmVkID0gZnVuY3Rpb24odGltZW91dCkgewogICAgICAgIGRlZmVycmVkLmNhbmNlbCgpOwogICAgICAgIHRpbWVyID0gc2V0VGltZW91dChjYWxsYmFjaywgdGltZW91dCB8fCAwKTsKICAgICAgICByZXR1cm4gZGVmZXJyZWQ7CiAgICB9OwoKICAgIGRlZmVycmVkLnNjaGVkdWxlID0gZGVmZXJyZWQ7CgogICAgZGVmZXJyZWQuY2FsbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuY2FuY2VsKCk7CiAgICAgICAgZmNuKCk7CiAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgfTsKCiAgICBkZWZlcnJlZC5jYW5jZWwgPSBmdW5jdGlvbigpIHsKICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpOwogICAgICAgIHRpbWVyID0gbnVsbDsKICAgICAgICByZXR1cm4gZGVmZXJyZWQ7CiAgICB9OwogICAgCiAgICBkZWZlcnJlZC5pc1BlbmRpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGltZXI7CiAgICB9OwoKICAgIHJldHVybiBkZWZlcnJlZDsKfTsKCgpleHBvcnRzLmRlbGF5ZWRDYWxsID0gZnVuY3Rpb24oZmNuLCBkZWZhdWx0VGltZW91dCkgewogICAgdmFyIHRpbWVyID0gbnVsbDsKICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRpbWVyID0gbnVsbDsKICAgICAgICBmY24oKTsKICAgIH07CgogICAgdmFyIF9zZWxmID0gZnVuY3Rpb24odGltZW91dCkgewogICAgICAgIGlmICh0aW1lciA9PSBudWxsKQogICAgICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgZGVmYXVsdFRpbWVvdXQpOwogICAgfTsKCiAgICBfc2VsZi5kZWxheSA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKICAgICAgICB0aW1lciAmJiBjbGVhclRpbWVvdXQodGltZXIpOwogICAgICAgIHRpbWVyID0gc2V0VGltZW91dChjYWxsYmFjaywgdGltZW91dCB8fCBkZWZhdWx0VGltZW91dCk7CiAgICB9OwogICAgX3NlbGYuc2NoZWR1bGUgPSBfc2VsZjsKCiAgICBfc2VsZi5jYWxsID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5jYW5jZWwoKTsKICAgICAgICBmY24oKTsKICAgIH07CgogICAgX3NlbGYuY2FuY2VsID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICB9OwoKICAgIF9zZWxmLmlzUGVuZGluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aW1lcjsKICAgIH07CgogICAgcmV0dXJuIF9zZWxmOwp9Owp9KTsKCmFjZS5kZWZpbmUoImFjZS93b3JrZXIvbWlycm9yIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CnZhciBEb2N1bWVudCA9IHJlcXVpcmUoIi4uL2RvY3VtZW50IikuRG9jdW1lbnQ7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKICAgIAp2YXIgTWlycm9yID0gZXhwb3J0cy5NaXJyb3IgPSBmdW5jdGlvbihzZW5kZXIpIHsKICAgIHRoaXMuc2VuZGVyID0gc2VuZGVyOwogICAgdmFyIGRvYyA9IHRoaXMuZG9jID0gbmV3IERvY3VtZW50KCIiKTsKICAgIAogICAgdmFyIGRlZmVycmVkVXBkYXRlID0gdGhpcy5kZWZlcnJlZFVwZGF0ZSA9IGxhbmcuZGVsYXllZENhbGwodGhpcy5vblVwZGF0ZS5iaW5kKHRoaXMpKTsKICAgIAogICAgdmFyIF9zZWxmID0gdGhpczsKICAgIHNlbmRlci5vbigiY2hhbmdlIiwgZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBkYXRhID0gZS5kYXRhOwogICAgICAgIGlmIChkYXRhWzBdLnN0YXJ0KSB7CiAgICAgICAgICAgIGRvYy5hcHBseURlbHRhcyhkYXRhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGFbaSsxXSkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IHthY3Rpb246ICJpbnNlcnQiLCBzdGFydDogZGF0YVtpXSwgbGluZXM6IGRhdGFbaSsxXX07CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHZhciBkID0ge2FjdGlvbjogInJlbW92ZSIsIHN0YXJ0OiBkYXRhW2ldLCBlbmQ6IGRhdGFbaSsxXX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkb2MuYXBwbHlEZWx0YShkLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoX3NlbGYuJHRpbWVvdXQpCiAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZShfc2VsZi4kdGltZW91dCk7CiAgICAgICAgX3NlbGYub25VcGRhdGUoKTsKICAgIH0pOwp9OwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLiR0aW1lb3V0ID0gNTAwOwogICAgCiAgICB0aGlzLnNldFRpbWVvdXQgPSBmdW5jdGlvbih0aW1lb3V0KSB7CiAgICAgICAgdGhpcy4kdGltZW91dCA9IHRpbWVvdXQ7CiAgICB9OwogICAgCiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICB0aGlzLmRvYy5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAgICAgdGhpcy5kZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZSh0aGlzLiR0aW1lb3V0KTsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0VmFsdWUgPSBmdW5jdGlvbihjYWxsYmFja0lkKSB7CiAgICAgICAgdGhpcy5zZW5kZXIuY2FsbGJhY2sodGhpcy5kb2MuZ2V0VmFsdWUoKSwgY2FsbGJhY2tJZCk7CiAgICB9OwogICAgCiAgICB0aGlzLm9uVXBkYXRlID0gZnVuY3Rpb24oKSB7CiAgICB9OwogICAgCiAgICB0aGlzLmlzUGVuZGluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmRlZmVycmVkVXBkYXRlLmlzUGVuZGluZygpOwogICAgfTsKICAgIAp9KS5jYWxsKE1pcnJvci5wcm90b3R5cGUpOwoKfSk7CgphY2UuZGVmaW5lKCJhY2UvbW9kZS9qc29uL2pzb25fcGFyc2UiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKICAgIHZhciBhdCwgICAgIC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIKICAgICAgICBjaCwgICAgIC8vIFRoZSBjdXJyZW50IGNoYXJhY3RlcgogICAgICAgIGVzY2FwZWUgPSB7CiAgICAgICAgICAgICciJzogICciJywKICAgICAgICAgICAgJ1xcJzogJ1xcJywKICAgICAgICAgICAgJy8nOiAgJy8nLAogICAgICAgICAgICBiOiAgICAnXGInLAogICAgICAgICAgICBmOiAgICAnXGYnLAogICAgICAgICAgICBuOiAgICAnXG4nLAogICAgICAgICAgICByOiAgICAnXHInLAogICAgICAgICAgICB0OiAgICAnXHQnCiAgICAgICAgfSwKICAgICAgICB0ZXh0LAoKICAgICAgICBlcnJvciA9IGZ1bmN0aW9uIChtKSB7CgogICAgICAgICAgICB0aHJvdyB7CiAgICAgICAgICAgICAgICBuYW1lOiAgICAnU3ludGF4RXJyb3InLAogICAgICAgICAgICAgICAgbWVzc2FnZTogbSwKICAgICAgICAgICAgICAgIGF0OiAgICAgIGF0LAogICAgICAgICAgICAgICAgdGV4dDogICAgdGV4dAogICAgICAgICAgICB9OwogICAgICAgIH0sCgogICAgICAgIG5leHQgPSBmdW5jdGlvbiAoYykgewoKICAgICAgICAgICAgaWYgKGMgJiYgYyAhPT0gY2gpIHsKICAgICAgICAgICAgICAgIGVycm9yKCJFeHBlY3RlZCAnIiArIGMgKyAiJyBpbnN0ZWFkIG9mICciICsgY2ggKyAiJyIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBjaCA9IHRleHQuY2hhckF0KGF0KTsKICAgICAgICAgICAgYXQgKz0gMTsKICAgICAgICAgICAgcmV0dXJuIGNoOwogICAgICAgIH0sCgogICAgICAgIG51bWJlciA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgIHZhciBudW1iZXIsCiAgICAgICAgICAgICAgICBzdHJpbmcgPSAnJzsKCiAgICAgICAgICAgIGlmIChjaCA9PT0gJy0nKSB7CiAgICAgICAgICAgICAgICBzdHJpbmcgPSAnLSc7CiAgICAgICAgICAgICAgICBuZXh0KCctJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKICAgICAgICAgICAgICAgIHN0cmluZyArPSBjaDsKICAgICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY2ggPT09ICcuJykgewogICAgICAgICAgICAgICAgc3RyaW5nICs9ICcuJzsKICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0KCkgJiYgY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgewogICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBjaDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7CiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gY2g7CiAgICAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoOwogICAgICAgICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoOwogICAgICAgICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBudW1iZXIgPSArc3RyaW5nOwogICAgICAgICAgICBpZiAoaXNOYU4obnVtYmVyKSkgewogICAgICAgICAgICAgICAgZXJyb3IoIkJhZCBudW1iZXIiKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBzdHJpbmcgPSBmdW5jdGlvbiAoKSB7CgogICAgICAgICAgICB2YXIgaGV4LAogICAgICAgICAgICAgICAgaSwKICAgICAgICAgICAgICAgIHN0cmluZyA9ICcnLAogICAgICAgICAgICAgICAgdWZmZmY7CgogICAgICAgICAgICBpZiAoY2ggPT09ICciJykgewogICAgICAgICAgICAgICAgd2hpbGUgKG5leHQoKSkgewogICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJyInKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnXFwnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAndScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVmZmZmID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpICs9IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXggPSBwYXJzZUludChuZXh0KCksIDE2KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRmluaXRlKGhleCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVmZmZmID0gdWZmZmYgKiAxNiArIGhleDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHVmZmZmKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXNjYXBlZVtjaF0gPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgKz0gZXNjYXBlZVtjaF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gIlxuIiB8fCBjaCA9PSAiXHIiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBjaDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXJyb3IoIkJhZCBzdHJpbmciKTsKICAgICAgICB9LAoKICAgICAgICB3aGl0ZSA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgIHdoaWxlIChjaCAmJiBjaCA8PSAnICcpIHsKICAgICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIHdvcmQgPSBmdW5jdGlvbiAoKSB7CgogICAgICAgICAgICBzd2l0Y2ggKGNoKSB7CiAgICAgICAgICAgIGNhc2UgJ3QnOgogICAgICAgICAgICAgICAgbmV4dCgndCcpOwogICAgICAgICAgICAgICAgbmV4dCgncicpOwogICAgICAgICAgICAgICAgbmV4dCgndScpOwogICAgICAgICAgICAgICAgbmV4dCgnZScpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIGNhc2UgJ2YnOgogICAgICAgICAgICAgICAgbmV4dCgnZicpOwogICAgICAgICAgICAgICAgbmV4dCgnYScpOwogICAgICAgICAgICAgICAgbmV4dCgnbCcpOwogICAgICAgICAgICAgICAgbmV4dCgncycpOwogICAgICAgICAgICAgICAgbmV4dCgnZScpOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICBjYXNlICduJzoKICAgICAgICAgICAgICAgIG5leHQoJ24nKTsKICAgICAgICAgICAgICAgIG5leHQoJ3UnKTsKICAgICAgICAgICAgICAgIG5leHQoJ2wnKTsKICAgICAgICAgICAgICAgIG5leHQoJ2wnKTsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVycm9yKCJVbmV4cGVjdGVkICciICsgY2ggKyAiJyIpOwogICAgICAgIH0sCgogICAgICAgIHZhbHVlLCAgLy8gUGxhY2UgaG9sZGVyIGZvciB0aGUgdmFsdWUgZnVuY3Rpb24uCgogICAgICAgIGFycmF5ID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgdmFyIGFycmF5ID0gW107CgogICAgICAgICAgICBpZiAoY2ggPT09ICdbJykgewogICAgICAgICAgICAgICAgbmV4dCgnWycpOwogICAgICAgICAgICAgICAgd2hpdGUoKTsKICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ10nKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCgnXScpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheTsgICAvLyBlbXB0eSBhcnJheQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUgKGNoKSB7CiAgICAgICAgICAgICAgICAgICAgYXJyYXkucHVzaCh2YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICB3aGl0ZSgpOwogICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ10nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoJ10nKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBuZXh0KCcsJyk7CiAgICAgICAgICAgICAgICAgICAgd2hpdGUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlcnJvcigiQmFkIGFycmF5Iik7CiAgICAgICAgfSwKCiAgICAgICAgb2JqZWN0ID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgdmFyIGtleSwKICAgICAgICAgICAgICAgIG9iamVjdCA9IHt9OwoKICAgICAgICAgICAgaWYgKGNoID09PSAneycpIHsKICAgICAgICAgICAgICAgIG5leHQoJ3snKTsKICAgICAgICAgICAgICAgIHdoaXRlKCk7CiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICd9JykgewogICAgICAgICAgICAgICAgICAgIG5leHQoJ30nKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OyAgIC8vIGVtcHR5IG9iamVjdAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUgKGNoKSB7CiAgICAgICAgICAgICAgICAgICAga2V5ID0gc3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgd2hpdGUoKTsKICAgICAgICAgICAgICAgICAgICBuZXh0KCc6Jyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkgewogICAgICAgICAgICAgICAgICAgICAgICBlcnJvcignRHVwbGljYXRlIGtleSAiJyArIGtleSArICciJyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICB3aGl0ZSgpOwogICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ30nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoJ30nKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgbmV4dCgnLCcpOwogICAgICAgICAgICAgICAgICAgIHdoaXRlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXJyb3IoIkJhZCBvYmplY3QiKTsKICAgICAgICB9OwoKICAgIHZhbHVlID0gZnVuY3Rpb24gKCkgewoKICAgICAgICB3aGl0ZSgpOwogICAgICAgIHN3aXRjaCAoY2gpIHsKICAgICAgICBjYXNlICd7JzoKICAgICAgICAgICAgcmV0dXJuIG9iamVjdCgpOwogICAgICAgIGNhc2UgJ1snOgogICAgICAgICAgICByZXR1cm4gYXJyYXkoKTsKICAgICAgICBjYXNlICciJzoKICAgICAgICAgICAgcmV0dXJuIHN0cmluZygpOwogICAgICAgIGNhc2UgJy0nOgogICAgICAgICAgICByZXR1cm4gbnVtYmVyKCk7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIGNoID49ICcwJyAmJiBjaCA8PSAnOScgPyBudW1iZXIoKSA6IHdvcmQoKTsKICAgICAgICB9CiAgICB9OwoKICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlLCByZXZpdmVyKSB7CiAgICAgICAgdmFyIHJlc3VsdDsKCiAgICAgICAgdGV4dCA9IHNvdXJjZTsKICAgICAgICBhdCA9IDA7CiAgICAgICAgY2ggPSAnICc7CiAgICAgICAgcmVzdWx0ID0gdmFsdWUoKTsKICAgICAgICB3aGl0ZSgpOwogICAgICAgIGlmIChjaCkgewogICAgICAgICAgICBlcnJvcigiU3ludGF4IGVycm9yIik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHlwZW9mIHJldml2ZXIgPT09ICdmdW5jdGlvbicgPyBmdW5jdGlvbiB3YWxrKGhvbGRlciwga2V5KSB7CiAgICAgICAgICAgIHZhciBrLCB2LCB2YWx1ZSA9IGhvbGRlcltrZXldOwogICAgICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykgewogICAgICAgICAgICAgICAgZm9yIChrIGluIHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrKSkgewogICAgICAgICAgICAgICAgICAgICAgICB2ID0gd2Fsayh2YWx1ZSwgayk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW2tdID0gdjsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtrXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmV2aXZlci5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7CiAgICAgICAgfSh7Jyc6IHJlc3VsdH0sICcnKSA6IHJlc3VsdDsKICAgIH07Cn0pOwoKYWNlLmRlZmluZSgiYWNlL21vZGUvanNvbl93b3JrZXIiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIE1pcnJvciA9IHJlcXVpcmUoIi4uL3dvcmtlci9taXJyb3IiKS5NaXJyb3I7CnZhciBwYXJzZSA9IHJlcXVpcmUoIi4vanNvbi9qc29uX3BhcnNlIik7Cgp2YXIgSnNvbldvcmtlciA9IGV4cG9ydHMuSnNvbldvcmtlciA9IGZ1bmN0aW9uKHNlbmRlcikgewogICAgTWlycm9yLmNhbGwodGhpcywgc2VuZGVyKTsKICAgIHRoaXMuc2V0VGltZW91dCgyMDApOwp9OwoKb29wLmluaGVyaXRzKEpzb25Xb3JrZXIsIE1pcnJvcik7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5vblVwZGF0ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZG9jLmdldFZhbHVlKCk7CiAgICAgICAgdmFyIGVycm9ycyA9IFtdOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAgICAgIHBhcnNlKHZhbHVlKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIHZhciBwb3MgPSB0aGlzLmRvYy5pbmRleFRvUG9zaXRpb24oZS5hdC0xKTsKICAgICAgICAgICAgZXJyb3JzLnB1c2goewogICAgICAgICAgICAgICAgcm93OiBwb3Mucm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBwb3MuY29sdW1uLAogICAgICAgICAgICAgICAgdGV4dDogZS5tZXNzYWdlLAogICAgICAgICAgICAgICAgdHlwZTogImVycm9yIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgdGhpcy5zZW5kZXIuZW1pdCgiYW5ub3RhdGUiLCBlcnJvcnMpOwogICAgfTsKCn0pLmNhbGwoSnNvbldvcmtlci5wcm90b3R5cGUpOwoKfSk7Cg==\"},7907:function(e,t,n){\"use strict\";n.d(t,{m0:function(){return a},cC:function(){return c},Iu:function(){return l}}),t=n(4987);var r=[\"en\",\"pt-BR\",\"zh-CN\",\"tr\",\"ja\",\"fr-FR\",\"de\"],i={en:{array:\"Array\",auto:\"Auto\",appendText:\"Append\",appendTitle:\"Append a new field with type 'auto' after this field (Ctrl+Shift+Ins)\",appendSubmenuTitle:\"Select the type of the field to be appended\",appendTitleAuto:\"Append a new field with type 'auto' (Ctrl+Shift+Ins)\",ascending:\"Ascending\",ascendingTitle:\"Sort the childs of this ${type} in ascending order\",actionsMenu:\"Click to open the actions menu (Ctrl+M)\",cannotParseFieldError:\"Cannot parse field into JSON\",cannotParseValueError:\"Cannot parse value into JSON\",collapseAll:\"Collapse all fields\",compactTitle:\"Compact JSON data, remove all whitespaces (Ctrl+Shift+\\\\)\",descending:\"Descending\",descendingTitle:\"Sort the childs of this ${type} in descending order\",drag:\"Drag to move this field (Alt+Shift+Arrows)\",duplicateKey:\"duplicate key\",duplicateText:\"Duplicate\",duplicateTitle:\"Duplicate selected fields (Ctrl+D)\",duplicateField:\"Duplicate this field (Ctrl+D)\",duplicateFieldError:\"Duplicate field name\",empty:\"empty\",expandAll:\"Expand all fields\",expandTitle:\"Click to expand/collapse this field (Ctrl+E). \\nCtrl+Click to expand/collapse including all childs.\",formatTitle:\"Format JSON data, with proper indentation and line feeds (Ctrl+\\\\)\",insert:\"Insert\",insertTitle:\"Insert a new field with type 'auto' before this field (Ctrl+Ins)\",insertSub:\"Select the type of the field to be inserted\",object:\"Object\",ok:\"Ok\",redo:\"Redo (Ctrl+Shift+Z)\",removeText:\"Remove\",removeTitle:\"Remove selected fields (Ctrl+Del)\",removeField:\"Remove this field (Ctrl+Del)\",repairTitle:\"Repair JSON: fix quotes and escape characters, remove comments and JSONP notation, turn JavaScript objects into JSON.\",searchTitle:\"Search fields and values\",searchNextResultTitle:\"Next result (Enter)\",searchPreviousResultTitle:\"Previous result (Shift + Enter)\",selectNode:\"Select a node...\",showAll:\"show all\",showMore:\"show more\",showMoreStatus:\"displaying ${visibleChilds} of ${totalChilds} items.\",sort:\"Sort\",sortTitle:\"Sort the childs of this ${type}\",sortTitleShort:\"Sort contents\",sortFieldLabel:\"Field:\",sortDirectionLabel:\"Direction:\",sortFieldTitle:\"Select the nested field by which to sort the array or object\",sortAscending:\"Ascending\",sortAscendingTitle:\"Sort the selected field in ascending order\",sortDescending:\"Descending\",sortDescendingTitle:\"Sort the selected field in descending order\",string:\"String\",transform:\"Transform\",transformTitle:\"Filter, sort, or transform the childs of this ${type}\",transformTitleShort:\"Filter, sort, or transform contents\",extract:\"Extract\",extractTitle:\"Extract this ${type}\",transformQueryTitle:\"Enter a JMESPath query\",transformWizardLabel:\"Wizard\",transformWizardFilter:\"Filter\",transformWizardSortBy:\"Sort by\",transformWizardSelectFields:\"Select fields\",transformQueryLabel:\"Query\",transformPreviewLabel:\"Preview\",type:\"Type\",typeTitle:\"Change the type of this field\",openUrl:\"Ctrl+Click or Ctrl+Enter to open url in new window\",undo:\"Undo last action (Ctrl+Z)\",validationCannotMove:\"Cannot move a field into a child of itself\",autoType:'Field type \"auto\". The field type is automatically determined from the value and can be a string, number, boolean, or null.',objectType:'Field type \"object\". An object contains an unordered set of key/value pairs.',arrayType:'Field type \"array\". An array contains an ordered collection of values.',stringType:'Field type \"string\". Field type is not determined from the value, but always returned as string.',modeEditorTitle:\"Switch Editor Mode\",modeCodeText:\"Code\",modeCodeTitle:\"Switch to code highlighter\",modeFormText:\"Form\",modeFormTitle:\"Switch to form editor\",modeTextText:\"Text\",modeTextTitle:\"Switch to plain text editor\",modeTreeText:\"Tree\",modeTreeTitle:\"Switch to tree editor\",modeViewText:\"View\",modeViewTitle:\"Switch to tree view\",modePreviewText:\"Preview\",modePreviewTitle:\"Switch to preview mode\",examples:\"Examples\",default:\"Default\",containsInvalidProperties:\"Contains invalid properties\",containsInvalidItems:\"Contains invalid items\"},\"zh-CN\":{array:\"\\u6570\\u7ec4\",auto:\"\\u81ea\\u52a8\",appendText:\"\\u8ffd\\u52a0\",appendTitle:\"\\u5728\\u6b64\\u5b57\\u6bb5\\u540e\\u8ffd\\u52a0\\u4e00\\u4e2a\\u7c7b\\u578b\\u4e3a\\u201cauto\\u201d\\u7684\\u65b0\\u5b57\\u6bb5 (Ctrl+Shift+Ins)\",appendSubmenuTitle:\"\\u9009\\u62e9\\u8981\\u8ffd\\u52a0\\u7684\\u5b57\\u6bb5\\u7c7b\\u578b\",appendTitleAuto:\"\\u8ffd\\u52a0\\u7c7b\\u578b\\u4e3a\\u201cauto\\u201d\\u7684\\u65b0\\u5b57\\u6bb5 (Ctrl+Shift+Ins)\",ascending:\"\\u5347\\u5e8f\",ascendingTitle:\"\\u5347\\u5e8f\\u6392\\u5217${type}\\u7684\\u5b50\\u8282\\u70b9\",actionsMenu:\"\\u70b9\\u51fb\\u6253\\u5f00\\u52a8\\u4f5c\\u83dc\\u5355(Ctrl+M)\",cannotParseFieldError:\"\\u65e0\\u6cd5\\u5c06\\u5b57\\u6bb5\\u89e3\\u6790\\u4e3aJSON\",cannotParseValueError:\"\\u65e0\\u6cd5\\u5c06\\u503c\\u89e3\\u6790\\u4e3aJSON\",collapseAll:\"\\u7f29\\u8fdb\\u6240\\u6709\\u5b57\\u6bb5\",compactTitle:\"\\u538b\\u7f29JSON\\u6570\\u636e\\uff0c\\u5220\\u9664\\u6240\\u6709\\u7a7a\\u683c (Ctrl+Shift+\\\\)\",descending:\"\\u964d\\u5e8f\",descendingTitle:\"\\u964d\\u5e8f\\u6392\\u5217${type}\\u7684\\u5b50\\u8282\\u70b9\",drag:\"\\u62d6\\u62fd\\u79fb\\u52a8\\u8be5\\u8282\\u70b9(Alt+Shift+Arrows)\",duplicateKey:\"\\u91cd\\u590d\\u952e\",duplicateText:\"\\u590d\\u5236\",duplicateTitle:\"\\u590d\\u5236\\u9009\\u4e2d\\u5b57\\u6bb5(Ctrl+D)\",duplicateField:\"\\u590d\\u5236\\u8be5\\u5b57\\u6bb5(Ctrl+D)\",duplicateFieldError:\"\\u91cd\\u590d\\u7684\\u5b57\\u6bb5\\u540d\\u79f0\",empty:\"\\u6e05\\u7a7a\",expandAll:\"\\u5c55\\u5f00\\u6240\\u6709\\u5b57\\u6bb5\",expandTitle:\"\\u70b9\\u51fb \\u5c55\\u5f00/\\u6536\\u7f29 \\u8be5\\u5b57\\u6bb5(Ctrl+E). \\nCtrl+Click \\u5c55\\u5f00/\\u6536\\u7f29 \\u5305\\u542b\\u6240\\u6709\\u5b50\\u8282\\u70b9.\",formatTitle:\"\\u4f7f\\u7528\\u9002\\u5f53\\u7684\\u7f29\\u8fdb\\u548c\\u6362\\u884c\\u7b26\\u683c\\u5f0f\\u5316JSON\\u6570\\u636e (Ctrl+\\\\)\",insert:\"\\u63d2\\u5165\",insertTitle:\"\\u5728\\u6b64\\u5b57\\u6bb5\\u524d\\u63d2\\u5165\\u7c7b\\u578b\\u4e3a\\u201cauto\\u201d\\u7684\\u65b0\\u5b57\\u6bb5 (Ctrl+Ins)\",insertSub:\"\\u9009\\u62e9\\u8981\\u63d2\\u5165\\u7684\\u5b57\\u6bb5\\u7c7b\\u578b\",object:\"\\u5bf9\\u8c61\",ok:\"Ok\",redo:\"\\u91cd\\u505a (Ctrl+Shift+Z)\",removeText:\"\\u79fb\\u9664\",removeTitle:\"\\u79fb\\u9664\\u9009\\u4e2d\\u5b57\\u6bb5 (Ctrl+Del)\",removeField:\"\\u79fb\\u9664\\u8be5\\u5b57\\u6bb5 (Ctrl+Del)\",repairTitle:\"\\u4fee\\u590dJSON\\uff1a\\u4fee\\u590d\\u5f15\\u53f7\\u548c\\u8f6c\\u4e49\\u7b26\\uff0c\\u5220\\u9664\\u6ce8\\u91ca\\u548cJSONP\\u8868\\u793a\\u6cd5\\uff0c\\u5c06JavaScript\\u5bf9\\u8c61\\u8f6c\\u6362\\u4e3aJSON\\u3002\",selectNode:\"\\u9009\\u62e9\\u4e00\\u4e2a\\u8282\\u70b9...\",showAll:\"\\u5c55\\u793a\\u5168\\u90e8\",showMore:\"\\u5c55\\u793a\\u66f4\\u591a\",showMoreStatus:\"\\u663e\\u793a${totalChilds}\\u7684${visibleChilds}\\u9879\\u76ee.\",sort:\"\\u6392\\u5e8f\",sortTitle:\"\\u6392\\u5e8f${type}\\u7684\\u5b50\\u8282\\u70b9\",sortTitleShort:\"\\u5185\\u5bb9\\u6392\\u5e8f\",sortFieldLabel:\"\\u5b57\\u6bb5\\uff1a\",sortDirectionLabel:\"\\u65b9\\u5411\\uff1a\",sortFieldTitle:\"\\u9009\\u62e9\\u7528\\u4e8e\\u5bf9\\u6570\\u7ec4\\u6216\\u5bf9\\u8c61\\u6392\\u5e8f\\u7684\\u5d4c\\u5957\\u5b57\\u6bb5\",sortAscending:\"\\u5347\\u5e8f\\u6392\\u5e8f\",sortAscendingTitle:\"\\u6309\\u7167\\u8be5\\u5b57\\u6bb5\\u5347\\u5e8f\\u6392\\u5e8f\",sortDescending:\"\\u964d\\u5e8f\\u6392\\u5e8f\",sortDescendingTitle:\"\\u6309\\u7167\\u8be5\\u5b57\\u6bb5\\u964d\\u5e8f\\u6392\\u5e8f\",string:\"\\u5b57\\u7b26\\u4e32\",transform:\"\\u53d8\\u6362\",transformTitle:\"\\u7b5b\\u9009\\uff0c\\u6392\\u5e8f\\uff0c\\u6216\\u8005\\u8f6c\\u6362${type}\\u7684\\u5b50\\u8282\\u70b9\",transformTitleShort:\"\\u7b5b\\u9009\\uff0c\\u6392\\u5e8f\\uff0c\\u6216\\u8005\\u8f6c\\u6362\\u5185\\u5bb9\",extract:\"\\u63d0\\u53d6\",extractTitle:\"\\u63d0\\u53d6\\u8fd9\\u4e2a ${type}\",transformQueryTitle:\"\\u8f93\\u5165JMESPath\\u67e5\\u8be2\",transformWizardLabel:\"\\u5411\\u5bfc\",transformWizardFilter:\"\\u7b5b\\u9009\",transformWizardSortBy:\"\\u6392\\u5e8f\",transformWizardSelectFields:\"\\u9009\\u62e9\\u5b57\\u6bb5\",transformQueryLabel:\"\\u67e5\\u8be2\",transformPreviewLabel:\"\\u9884\\u89c8\",type:\"\\u7c7b\\u578b\",typeTitle:\"\\u66f4\\u6539\\u5b57\\u6bb5\\u7c7b\\u578b\",openUrl:\"Ctrl+Click \\u6216\\u8005 Ctrl+Enter \\u5728\\u65b0\\u7a97\\u53e3\\u6253\\u5f00\\u94fe\\u63a5\",undo:\"\\u64a4\\u9500\\u4e0a\\u6b21\\u52a8\\u4f5c (Ctrl+Z)\",validationCannotMove:\"\\u65e0\\u6cd5\\u5c06\\u5b57\\u6bb5\\u79fb\\u5165\\u5176\\u5b50\\u8282\\u70b9\",autoType:'\\u5b57\\u6bb5\\u7c7b\\u578b \"auto\". \\u5b57\\u6bb5\\u7c7b\\u578b\\u7531\\u503c\\u81ea\\u52a8\\u786e\\u5b9a \\u53ef\\u4ee5\\u4e3a string\\uff0cnumber\\uff0cboolean\\uff0c\\u6216\\u8005 null.',objectType:'\\u5b57\\u6bb5\\u7c7b\\u578b \"object\". \\u5bf9\\u8c61\\u5305\\u542b\\u4e00\\u7ec4\\u65e0\\u5e8f\\u7684\\u952e/\\u503c\\u5bf9.',arrayType:'\\u5b57\\u6bb5\\u7c7b\\u578b \"array\". \\u6570\\u7ec4\\u5305\\u542b\\u503c\\u7684\\u6709\\u5e8f\\u96c6\\u5408.',stringType:'\\u5b57\\u6bb5\\u7c7b\\u578b \"string\". \\u5b57\\u6bb5\\u7c7b\\u578b\\u7531\\u503c\\u81ea\\u52a8\\u786e\\u5b9a\\uff0c\\u4f46\\u59cb\\u7ec8\\u4f5c\\u4e3a\\u5b57\\u7b26\\u4e32\\u8fd4\\u56de.',modeCodeText:\"\\u4ee3\\u7801\",modeCodeTitle:\"\\u5207\\u6362\\u81f3\\u4ee3\\u7801\\u9ad8\\u4eae\",modeFormText:\"\\u8868\\u5355\",modeFormTitle:\"\\u5207\\u6362\\u81f3\\u8868\\u5355\\u7f16\\u8f91\",modeTextText:\"\\u6587\\u672c\",modeTextTitle:\"\\u5207\\u6362\\u81f3\\u6587\\u672c\\u7f16\\u8f91\",modeTreeText:\"\\u6811\",modeTreeTitle:\"\\u5207\\u6362\\u81f3\\u6811\\u7f16\\u8f91\",modeViewText:\"\\u89c6\\u56fe\",modeViewTitle:\"\\u5207\\u6362\\u81f3\\u6811\\u89c6\\u56fe\",modePreviewText:\"\\u9884\\u89c8\",modePreviewTitle:\"\\u5207\\u6362\\u81f3\\u9884\\u89c8\\u6a21\\u5f0f\",examples:\"\\u4f8b\\u5b50\",default:\"\\u7f3a\\u7701\",containsInvalidProperties:\"\\u5305\\u542b\\u65e0\\u6548\\u7684\\u5c5e\\u6027\",containsInvalidItems:\"\\u5305\\u542b\\u65e0\\u6548\\u9879\\u76ee\"},\"pt-BR\":{array:\"Lista\",auto:\"Automatico\",appendText:\"Adicionar\",appendTitle:\"Adicionar novo campo com tipo 'auto' depois deste campo (Ctrl+Shift+Ins)\",appendSubmenuTitle:\"Selecione o tipo do campo a ser adicionado\",appendTitleAuto:\"Adicionar novo campo com tipo 'auto' (Ctrl+Shift+Ins)\",ascending:\"Ascendente\",ascendingTitle:\"Organizar filhor do tipo ${type} em crescente\",actionsMenu:\"Clique para abrir o menu de a\\xe7\\xf5es (Ctrl+M)\",cannotParseFieldError:\"N\\xe3o \\xe9 poss\\xedvel analisar o campo no JSON\",cannotParseValueError:\"N\\xe3o \\xe9 poss\\xedvel analisar o valor em JSON\",collapseAll:\"Fechar todos campos\",compactTitle:\"Dados JSON compactos, remova todos os espa\\xe7os em branco (Ctrl+Shift+\\\\)\",descending:\"Descendente\",descendingTitle:\"Organizar o filhos do tipo ${type} em decrescente\",duplicateKey:\"chave duplicada\",drag:\"Arraste para mover este campo (Alt+Shift+Arrows)\",duplicateText:\"Duplicar\",duplicateTitle:\"Duplicar campos selecionados (Ctrl+D)\",duplicateField:\"Duplicar este campo (Ctrl+D)\",duplicateFieldError:\"Nome do campo duplicado\",empty:\"vazio\",expandAll:\"Expandir todos campos\",expandTitle:\"Clique para expandir/encolher este campo (Ctrl+E). \\nCtrl+Click para expandir/encolher incluindo todos os filhos.\",formatTitle:\"Formate dados JSON, com recuo e feeds de linha adequados (Ctrl+\\\\)\",insert:\"Inserir\",insertTitle:\"Inserir um novo campo do tipo 'auto' antes deste campo (Ctrl+Ins)\",insertSub:\"Selecionar o tipo de campo a ser inserido\",object:\"Objeto\",ok:\"Ok\",redo:\"Refazer (Ctrl+Shift+Z)\",removeText:\"Remover\",removeTitle:\"Remover campos selecionados (Ctrl+Del)\",removeField:\"Remover este campo (Ctrl+Del)\",repairTitle:\"Repare JSON: corrija aspas e caracteres de escape, remova coment\\xe1rios e nota\\xe7\\xe3o JSONP, transforme objetos JavaScript em JSON.\",selectNode:\"Selecione um n\\xf3dulo...\",showAll:\"mostrar todos\",showMore:\"mostrar mais\",showMoreStatus:\"exibindo ${visibleChilds} de ${totalChilds} itens.\",sort:\"Organizar\",sortTitle:\"Organizar os filhos deste ${type}\",sortTitleShort:\"Organizar os filhos\",sortFieldLabel:\"Campo:\",sortDirectionLabel:\"Dire\\xe7\\xe3o:\",sortFieldTitle:\"Selecione um campo filho pelo qual ordenar o array ou objeto\",sortAscending:\"Ascendente\",sortAscendingTitle:\"Ordenar o campo selecionado por ordem ascendente\",sortDescending:\"Descendente\",sortDescendingTitle:\"Ordenar o campo selecionado por ordem descendente\",string:\"Texto\",transform:\"Transformar\",transformTitle:\"Filtrar, ordenar ou transformar os filhos deste ${type}\",transformTitleShort:\"Filtrar, ordenar ou transformar conte\\xfados\",transformQueryTitle:\"Insira uma express\\xe3o JMESPath\",transformWizardLabel:\"Assistente\",transformWizardFilter:\"Filtro\",transformWizardSortBy:\"Ordenar por\",transformWizardSelectFields:\"Selecionar campos\",transformQueryLabel:\"Express\\xe3o\",transformPreviewLabel:\"Visualizar\",type:\"Tipo\",typeTitle:\"Mudar o tipo deste campo\",openUrl:\"Ctrl+Click ou Ctrl+Enter para abrir link em nova janela\",undo:\"Desfazer \\xfaltimo a\\xe7\\xe3o (Ctrl+Z)\",validationCannotMove:\"N\\xe3o pode mover um campo como filho dele mesmo\",autoType:'Campo do tipo \"auto\". O tipo do campo \\xe9 determinao automaticamente a partir do seu valor e pode ser texto, n\\xfamero, verdade/falso ou nulo.',objectType:'Campo do tipo \"objeto\". Um objeto cont\\xe9m uma lista de pares com chave e valor.',arrayType:'Campo do tipo \"lista\". Uma lista contem uma cole\\xe7\\xe3o de valores ordenados.',stringType:'Campo do tipo \"string\". Campo do tipo nao \\xe9 determinado atrav\\xe9s do seu valor, mas sempre retornara um texto.',examples:\"Exemplos\",default:\"Revelia\",containsInvalidProperties:\"Cont\\xe9m propriedades inv\\xe1lidas\",containsInvalidItems:\"Cont\\xe9m itens inv\\xe1lidos\"},tr:{array:\"Dizin\",auto:\"Otomatik\",appendText:\"Ekle\",appendTitle:\"Bu alan\\u0131n alt\\u0131na 'otomatik' tipinde yeni bir alan ekle (Ctrl+Shift+Ins)\",appendSubmenuTitle:\"Eklenecek alan\\u0131n tipini se\\xe7\",appendTitleAuto:\"'Otomatik' tipinde yeni bir alan ekle (Ctrl+Shift+Ins)\",ascending:\"Artan\",ascendingTitle:\"${type}'\\u0131n alt tiplerini artan d\\xfczende s\\u0131rala\",actionsMenu:\"Aksiyon men\\xfcs\\xfcn\\xfc a\\xe7mak i\\xe7in t\\u0131klay\\u0131n (Ctrl+M)\",collapseAll:\"T\\xfcm alanlar\\u0131 kapat\",descending:\"Azalan\",descendingTitle:\"${type}'\\u0131n alt tiplerini azalan d\\xfczende s\\u0131rala\",drag:\"Bu alan\\u0131 ta\\u015f\\u0131mak i\\xe7in s\\xfcr\\xfckleyin (Alt+Shift+Arrows)\",duplicateKey:\"Var olan anahtar\",duplicateText:\"A\\u015fa\\u011f\\u0131ya kopyala\",duplicateTitle:\"Se\\xe7ili alanlardan bir daha olu\\u015ftur (Ctrl+D)\",duplicateField:\"Bu alandan bir daha olu\\u015ftur (Ctrl+D)\",duplicateFieldError:\"Duplicate field name\",cannotParseFieldError:\"Alan JSON'a ayr\\u0131\\u015ft\\u0131r\\u0131lam\\u0131yor\",cannotParseValueError:\"JSON'a de\\u011fer ayr\\u0131\\u015ft\\u0131r\\u0131lam\\u0131yor\",empty:\"bo\\u015f\",expandAll:\"T\\xfcm alanlar\\u0131 a\\xe7\",expandTitle:\"Bu alan\\u0131 a\\xe7mak/kapatmak i\\xe7in t\\u0131kla (Ctrl+E). \\nAlt alanlarda dahil t\\xfcm alanlar\\u0131 a\\xe7mak i\\xe7in Ctrl+Click \",insert:\"Ekle\",insertTitle:\"Bu alan\\u0131n \\xfcst\\xfcne 'otomatik' tipinde yeni bir alan ekle (Ctrl+Ins)\",insertSub:\"Araya eklenecek alan\\u0131n tipini se\\xe7\",object:\"Nesne\",ok:\"Tamam\",redo:\"Yeniden yap (Ctrl+Shift+Z)\",removeText:\"Kald\\u0131r\",removeTitle:\"Se\\xe7ilen alanlar\\u0131 kald\\u0131r (Ctrl+Del)\",removeField:\"Bu alan\\u0131 kald\\u0131r (Ctrl+Del)\",selectNode:\"Bir nesne se\\xe7...\",showAll:\"t\\xfcm\\xfcn\\xfc g\\xf6ster\",showMore:\"daha fazla g\\xf6ster\",showMoreStatus:\"${totalChilds} alan\\u0131n ${visibleChilds} alt alanlar\\u0131 g\\xf6steriliyor\",sort:\"S\\u0131rala\",sortTitle:\"${type}'\\u0131n alt alanlar\\u0131n\\u0131 s\\u0131rala\",sortTitleShort:\"\\u0130\\xe7erikleri s\\u0131rala\",sortFieldLabel:\"Alan:\",sortDirectionLabel:\"Y\\xf6n:\",sortFieldTitle:\"Diziyi veya nesneyi s\\u0131ralamak i\\xe7in i\\xe7 i\\xe7e ge\\xe7mi\\u015f alan\\u0131 se\\xe7in\",sortAscending:\"Artan\",sortAscendingTitle:\"Se\\xe7ili alan\\u0131 artan d\\xfczende s\\u0131rala\",sortDescending:\"Azalan\",sortDescendingTitle:\"Se\\xe7ili alan\\u0131 azalan d\\xfczende s\\u0131rala\",string:\"Karakter Dizisi\",transform:\"D\\xf6n\\xfc\\u015ft\\xfcr\",transformTitle:\"${type}'\\u0131n alt alanlar\\u0131n\\u0131 filtrele, s\\u0131rala veya d\\xf6n\\xfc\\u015ft\\xfcr\",transformTitleShort:\"\\u0130\\xe7erikleri filterele, s\\u0131rala veya d\\xf6n\\xfc\\u015ft\\xfcr\",transformQueryTitle:\"JMESPath sorgusu gir\",transformWizardLabel:\"Sihirbaz\",transformWizardFilter:\"Filtre\",transformWizardSortBy:\"S\\u0131rala\",transformWizardSelectFields:\"Alanlar\\u0131 se\\xe7\",transformQueryLabel:\"Sorgu\",transformPreviewLabel:\"\\xd6nizleme\",type:\"Tip\",typeTitle:\"Bu alan\\u0131n tipini de\\u011fi\\u015ftir\",openUrl:\"URL'i yeni bir pencerede a\\xe7mak i\\xe7in Ctrl+Click veya Ctrl+Enter\",undo:\"Son de\\u011fi\\u015fikli\\u011fi geri al (Ctrl+Z)\",validationCannotMove:\"Alt alan olarak ta\\u015f\\u0131nam\\u0131yor\",autoType:'Alan tipi \"otomatik\". Alan t\\xfcr\\xfc otomatik olarak de\\u011ferden belirlenirve bir dize, say\\u0131, boolean veya null olabilir.',objectType:'Alan tipi \"nesne\". Bir nesne, s\\u0131ralanmam\\u0131\\u015f bir anahtar / de\\u011fer \\xe7ifti k\\xfcmesi i\\xe7erir.',arrayType:'Alan tipi \"dizi\". Bir dizi, d\\xfczenli de\\u011ferler koleksiyonu i\\xe7erir.',stringType:'Alan tipi \"karakter dizisi\". Alan t\\xfcr\\xfc de\\u011ferden belirlenmez,ancak her zaman karakter dizisi olarak d\\xf6nd\\xfcr\\xfcl\\xfcr.',modeCodeText:\"Kod\",modeCodeTitle:\"Kod vurgulay\\u0131c\\u0131ya ge\\xe7\",modeFormText:\"Form\",modeFormTitle:\"Form d\\xfczenleyiciye ge\\xe7\",modeTextText:\"Metin\",modeTextTitle:\"D\\xfcz metin d\\xfczenleyiciye ge\\xe7\",modeTreeText:\"A\\u011fa\\xe7\",modeTreeTitle:\"A\\u011fa\\xe7 d\\xfczenleyiciye ge\\xe7\",modeViewText:\"G\\xf6r\\xfcn\\xfcm\",modeViewTitle:\"A\\u011fa\\xe7 g\\xf6r\\xfcn\\xfcm\\xfcne ge\\xe7\",examples:\"\\xd6rnekler\",default:\"Varsay\\u0131lan\",containsInvalidProperties:\"Ge\\xe7ersiz \\xf6zellikler i\\xe7eriyor\",containsInvalidItems:\"Ge\\xe7ersiz \\xf6\\u011feler i\\xe7eriyor\"},ja:{array:\"\\u914d\\u5217\",auto:\"\\u30aa\\u30fc\\u30c8\",appendText:\"\\u8ffd\\u52a0\",appendTitle:'\\u6b21\\u306e\\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\\u306b\"\\u30aa\\u30fc\\u30c8\"\\u306e\\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\\u3092\\u8ffd\\u52a0 (Ctrl+Shift+Ins)',appendSubmenuTitle:\"\\u8ffd\\u52a0\\u3059\\u308b\\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\\u306e\\u578b\\u3092\\u9078\\u629e\\u3057\\u3066\\u304f\\u3060\\u3055\\u3044\",appendTitleAuto:'\"\\u30aa\\u30fc\\u30c8\"\\u306e\\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\\u3092\\u8ffd\\u52a0 (Ctrl+Shift+Ins)',ascending:\"\\u6607\\u9806\",ascendingTitle:\"${type}\\u306e\\u5b50\\u8981\\u7d20\\u3092\\u6607\\u9806\\u306b\\u4e26\\u3079\\u66ff\\u3048\",actionsMenu:\"\\u30af\\u30ea\\u30c3\\u30af\\u3057\\u3066\\u30a2\\u30af\\u30b7\\u30e7\\u30f3\\u30e1\\u30cb\\u30e5\\u30fc\\u3092\\u958b\\u304f (Ctrl+M)\",collapseAll:\"\\u3059\\u3079\\u3066\\u3092\\u6298\\u308a\\u305f\\u305f\\u3080\",descending:\"\\u964d\\u9806\",descendingTitle:\"${type}\\u306e\\u5b50\\u8981\\u7d20\\u3092\\u964d\\u9806\\u306b\\u4e26\\u3079\\u66ff\\u3048\",drag:\"\\u30c9\\u30e9\\u30c3\\u30b0\\u3057\\u3066\\u9078\\u629e\\u4e2d\\u306e\\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\\u3092\\u79fb\\u52d5 (Alt+Shift+Arrows)\",duplicateKey:\"\\u8907\\u88fd\\u30ad\\u30fc\",duplicateText:\"\\u8907\\u88fd\",duplicateTitle:\"\\u9078\\u629e\\u4e2d\\u306e\\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\\u3092\\u8907\\u88fd (Ctrl+D)\",duplicateField:\"\\u9078\\u629e\\u4e2d\\u306e\\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\\u3092\\u8907\\u88fd (Ctrl+D)\",duplicateFieldError:\"\\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\\u540d\\u304c\\u91cd\\u8907\\u3057\\u3066\\u3044\\u307e\\u3059\",cannotParseFieldError:\"JSON\\u306e\\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\\u3092\\u89e3\\u6790\\u3067\\u304d\\u307e\\u305b\\u3093\",cannotParseValueError:\"JSON\\u306e\\u5024\\u3092\\u89e3\\u6790\\u3067\\u304d\\u307e\\u305b\\u3093\",empty:\"\\u7a7a\",expandAll:\"\\u3059\\u3079\\u3066\\u3092\\u5c55\\u958b\",expandTitle:\"\\u30af\\u30ea\\u30c3\\u30af\\u3057\\u3066\\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\\u3092\\u5c55\\u958b/\\u6298\\u308a\\u305f\\u305f\\u3080 (Ctrl+E). \\nCtrl+Click \\u3067\\u3059\\u3079\\u3066\\u306e\\u5b50\\u8981\\u7d20\\u3092\\u5c55\\u958b/\\u6298\\u308a\\u305f\\u305f\\u3080\",insert:\"\\u633f\\u5165\",insertTitle:\"\\u9078\\u629e\\u4e2d\\u306e\\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\\u306e\\u524d\\u306b\\u65b0\\u3057\\u3044\\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\\u3092\\u633f\\u5165 (Ctrl+Ins)\",insertSub:\"\\u633f\\u5165\\u3059\\u308b\\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\\u306e\\u578b\\u3092\\u9078\\u629e\",object:\"\\u30aa\\u30d6\\u30b8\\u30a7\\u30af\\u30c8\",ok:\"\\u5b9f\\u884c\",redo:\"\\u3084\\u308a\\u76f4\\u3059 (Ctrl+Shift+Z)\",removeText:\"\\u524a\\u9664\",removeTitle:\"\\u9078\\u629e\\u4e2d\\u306e\\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\\u3092\\u524a\\u9664 (Ctrl+Del)\",removeField:\"\\u9078\\u629e\\u4e2d\\u306e\\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\\u3092\\u524a\\u9664 (Ctrl+Del)\",selectNode:\"\\u30ce\\u30fc\\u30c9\\u3092\\u9078\\u629e...\",showAll:\"\\u3059\\u3079\\u3066\\u3092\\u8868\\u793a\",showMore:\"\\u3082\\u3063\\u3068\\u898b\\u308b\",showMoreStatus:\"${totalChilds}\\u500b\\u306e\\u30a2\\u30a4\\u30c6\\u30e0\\u306e\\u3046\\u3061 ${visibleChilds}\\u500b\\u3092\\u8868\\u793a\\u3057\\u3066\\u3044\\u307e\\u3059\\u3002\",sort:\"\\u4e26\\u3079\\u66ff\\u3048\",sortTitle:\"${type}\\u306e\\u5b50\\u8981\\u7d20\\u3092\\u4e26\\u3079\\u66ff\\u3048\",sortTitleShort:\"\\u4e26\\u3079\\u66ff\\u3048\",sortFieldLabel:\"\\u30d5\\u30a3\\u30fc\\u30eb\\u30c9:\",sortDirectionLabel:\"\\u9806\\u5e8f:\",sortFieldTitle:\"\\u914d\\u5217\\u307e\\u305f\\u306f\\u30aa\\u30d6\\u30b8\\u30a7\\u30af\\u30c8\\u3092\\u4e26\\u3073\\u66ff\\u3048\\u308b\\u305f\\u3081\\u306e\\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\\u3092\\u9078\\u629e\",sortAscending:\"\\u6607\\u9806\",sortAscendingTitle:\"\\u9078\\u629e\\u4e2d\\u306e\\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\\u3092\\u6607\\u9806\\u306b\\u4e26\\u3073\\u66ff\\u3048\",sortDescending:\"\\u964d\\u9806\",sortDescendingTitle:\"\\u9078\\u629e\\u4e2d\\u306e\\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\\u3092\\u964d\\u9806\\u306b\\u4e26\\u3073\\u66ff\\u3048\",string:\"\\u6587\\u5b57\\u5217\",transform:\"\\u5909\\u63db\",transformTitle:\"${type}\\u306e\\u5b50\\u8981\\u7d20\\u3092\\u30d5\\u30a3\\u30eb\\u30bf\\u30fc\\u30fb\\u4e26\\u3073\\u66ff\\u3048\\u30fb\\u5909\\u63db\\u3059\\u308b\",transformTitleShort:\"\\u5185\\u5bb9\\u3092\\u30d5\\u30a3\\u30eb\\u30bf\\u30fc\\u30fb\\u4e26\\u3073\\u66ff\\u3048\\u30fb\\u5909\\u63db\\u3059\\u308b\",extract:\"\\u62bd\\u51fa\",extractTitle:\"${type}\\u3092\\u62bd\\u51fa\",transformQueryTitle:\"JMESPath\\u30af\\u30a8\\u30ea\\u3092\\u5165\\u529b\",transformWizardLabel:\"\\u30a6\\u30a3\\u30b6\\u30fc\\u30c9\",transformWizardFilter:\"\\u30d5\\u30a3\\u30eb\\u30bf\\u30fc\",transformWizardSortBy:\"\\u4e26\\u3073\\u66ff\\u3048\",transformWizardSelectFields:\"\\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\\u3092\\u9078\\u629e\",transformQueryLabel:\"\\u30af\\u30a8\\u30ea\",transformPreviewLabel:\"\\u30d7\\u30ec\\u30d3\\u30e5\\u30fc\",type:\"\\u578b\",typeTitle:\"\\u9078\\u629e\\u4e2d\\u306e\\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\\u306e\\u578b\\u3092\\u5909\\u66f4\",openUrl:\"Ctrl+Click \\u307e\\u305f\\u306f Ctrl+Enter \\u3067 \\u65b0\\u898f\\u30a6\\u30a3\\u30f3\\u30c9\\u30a6\\u3067URL\\u3092\\u958b\\u304f\",undo:\"\\u5143\\u306b\\u623b\\u3059 (Ctrl+Z)\",validationCannotMove:\"\\u5b50\\u8981\\u7d20\\u306b\\u79fb\\u52d5\\u3067\\u304d\\u307e\\u305b\\u3093 \",autoType:\"\\u30aa\\u30fc\\u30c8\\uff1a \\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\\u306e\\u578b\\u306f\\u5024\\u304b\\u3089\\u81ea\\u52d5\\u7684\\u306b\\u6c7a\\u5b9a\\u3055\\u308c\\u307e\\u3059\\u3002 (\\u6587\\u5b57\\u5217\\u30fb\\u6570\\u5024\\u30fb\\u30d6\\u30fc\\u30eb\\u30fbnull)\",objectType:\"\\u30aa\\u30d6\\u30b8\\u30a7\\u30af\\u30c8\\uff1a \\u30aa\\u30d6\\u30b8\\u30a7\\u30af\\u30c8\\u306f\\u9806\\u5e8f\\u304c\\u6c7a\\u307e\\u3063\\u3066\\u3044\\u306a\\u3044\\u30ad\\u30fc\\u3068\\u5024\\u306e\\u30da\\u30a2\\u7d44\\u307f\\u5408\\u308f\\u305b\\u3067\\u3059\\u3002\",arrayType:\"\\u914d\\u5217\\uff1a \\u914d\\u5217\\u306f\\u9806\\u5e8f\\u304c\\u6c7a\\u307e\\u3063\\u3066\\u3044\\u308b\\u5024\\u306e\\u96c6\\u5408\\u4f53\\u3067\\u3059\\u3002\",stringType:\"\\u6587\\u5b57\\u5217\\uff1a \\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\\u578b\\u306f\\u5024\\u304b\\u3089\\u6c7a\\u5b9a\\u3055\\u308c\\u307e\\u305b\\u3093\\u304c\\u3001\\u5e38\\u306b\\u6587\\u5b57\\u5217\\u3068\\u3057\\u3066\\u8fd4\\u3055\\u308c\\u307e\\u3059\\u3002\",modeCodeText:\"\\u30b3\\u30fc\\u30c9\\u30e2\\u30fc\\u30c9\",modeCodeTitle:\"\\u30cf\\u30a4\\u30e9\\u30a4\\u30c8\\u30e2\\u30fc\\u30c9\\u306b\\u5207\\u308a\\u66ff\\u3048\",modeFormText:\"\\u30d5\\u30a9\\u30fc\\u30e0\\u30e2\\u30fc\\u30c9\",modeFormTitle:\"\\u30d5\\u30a9\\u30fc\\u30e0\\u30e2\\u30fc\\u30c9\\u306b\\u5207\\u308a\\u66ff\\u3048\",modeTextText:\"\\u30c6\\u30ad\\u30b9\\u30c8\\u30e2\\u30fc\\u30c9\",modeTextTitle:\"\\u30c6\\u30ad\\u30b9\\u30c8\\u30e2\\u30fc\\u30c9\\u306b\\u5207\\u308a\\u66ff\\u3048\",modeTreeText:\"\\u30c4\\u30ea\\u30fc\\u30e2\\u30fc\\u30c9\",modeTreeTitle:\"\\u30c4\\u30ea\\u30fc\\u30e2\\u30fc\\u30c9\\u306b\\u5207\\u308a\\u66ff\\u3048\",modeViewText:\"\\u30d3\\u30e5\\u30fc\\u30e2\\u30fc\\u30c9\",modeViewTitle:\"\\u30d3\\u30e5\\u30fc\\u30e2\\u30fc\\u30c9\\u306b\\u5207\\u308a\\u66ff\\u3048\",modePreviewText:\"\\u30d7\\u30ec\\u30d3\\u30e5\\u30fc\",modePreviewTitle:\"\\u30d7\\u30ec\\u30d3\\u30e5\\u30fc\\u306b\\u5207\\u308a\\u66ff\\u3048\",examples:\"\\u4f8b\",default:\"\\u30c7\\u30d5\\u30a9\\u30eb\\u30c8\",containsInvalidProperties:\"\\u7121\\u52b9\\u306a\\u30d7\\u30ed\\u30d1\\u30c6\\u30a3\\u304c\\u542b\\u307e\\u308c\\u3066\\u3044\\u307e\\u3059\",containsInvalidItems:\"\\u7121\\u52b9\\u306a\\u30a2\\u30a4\\u30c6\\u30e0\\u304c\\u542b\\u307e\\u308c\\u3066\\u3044\\u307e\\u3059\"},\"fr-FR\":{array:\"Liste\",auto:\"Auto\",appendText:\"Ajouter\",appendTitle:\"Ajouter un champ de type 'auto' apr\\xe8s ce champ (Ctrl+Shift+Ins)\",appendSubmenuTitle:\"S\\xe9lectionner le type du champ \\xe0 ajouter\",appendTitleAuto:\"Ajouter un champ de type 'auto' (Ctrl+Shift+Ins)\",ascending:\"Ascendant\",ascendingTitle:\"Trier les enfants de ce ${type} par ordre ascendant\",actionsMenu:\"Ouvrir le menu des actions (Ctrl+M)\",collapseAll:\"Regrouper\",descending:\"Descendant\",descendingTitle:\"Trier les enfants de ce ${type} par ordre descendant\",drag:\"D\\xe9placer (Alt+Shift+Arrows)\",duplicateKey:\"Dupliquer la cl\\xe9\",duplicateText:\"Dupliquer\",duplicateTitle:\"Dupliquer les champs s\\xe9lectionn\\xe9s (Ctrl+D)\",duplicateField:\"Dupliquer ce champ (Ctrl+D)\",duplicateFieldError:\"Dupliquer le nom de champ\",cannotParseFieldError:\"Champ impossible \\xe0 parser en JSON\",cannotParseValueError:\"Valeur impossible \\xe0 parser en JSON\",empty:\"vide\",expandAll:\"\\xc9tendre\",expandTitle:\"\\xc9tendre/regrouper ce champ (Ctrl+E). \\nCtrl+Click pour \\xe9tendre/regrouper avec tous les champs.\",insert:\"Ins\\xe9rer\",insertTitle:\"Ins\\xe9rer un champ de type 'auto' avant ce champ (Ctrl+Ins)\",insertSub:\"S\\xe9lectionner le type de champ \\xe0 ins\\xe9rer\",object:\"Objet\",ok:\"Ok\",redo:\"Rejouer (Ctrl+Shift+Z)\",removeText:\"Supprimer\",removeTitle:\"Supprimer les champs s\\xe9lectionn\\xe9s (Ctrl+Del)\",removeField:\"Supprimer ce champ (Ctrl+Del)\",searchTitle:\"Rechercher champs et valeurs\",searchNextResultTitle:\"R\\xe9sultat suivant (Enter)\",searchPreviousResultTitle:\"R\\xe9sultat pr\\xe9c\\xe9dent (Shift + Enter)\",selectNode:\"S\\xe9lectionner un n\\u0153ud...\",showAll:\"voir tout\",showMore:\"voir plus\",showMoreStatus:\"${visibleChilds} \\xe9l\\xe9ments affich\\xe9s de ${totalChilds}.\",sort:\"Trier\",sortTitle:\"Trier les champs de ce ${type}\",sortTitleShort:\"Trier\",sortFieldLabel:\"Champ:\",sortDirectionLabel:\"Direction:\",sortFieldTitle:\"S\\xe9lectionner les champs permettant de trier les listes et objet\",sortAscending:\"Ascendant\",sortAscendingTitle:\"Trier les champs s\\xe9lectionn\\xe9s par ordre ascendant\",sortDescending:\"Descendant\",sortDescendingTitle:\"Trier les champs s\\xe9lectionn\\xe9s par ordre descendant\",string:\"Cha\\xeene\",transform:\"Transformer\",transformTitle:\"Filtrer, trier, or transformer les enfants de ce ${type}\",transformTitleShort:\"Filtrer, trier ou transformer le contenu\",extract:\"Extraire\",extractTitle:\"Extraire ce ${type}\",transformQueryTitle:\"Saisir une requ\\xeate JMESPath\",transformWizardLabel:\"Assistant\",transformWizardFilter:\"Filtrer\",transformWizardSortBy:\"Trier par\",transformWizardSelectFields:\"S\\xe9lectionner les champs\",transformQueryLabel:\"Requ\\xeate\",transformPreviewLabel:\"Pr\\xe9visualisation\",type:\"Type\",typeTitle:\"Changer le type de ce champ\",openUrl:\"Ctrl+Click ou Ctrl+Enter pour ouvrir l'url dans une autre fen\\xeatre\",undo:\"Annuler la derni\\xe8re action (Ctrl+Z)\",validationCannotMove:\"Cannot move a field into a child of itself\",autoType:'Champe de type \"auto\". Ce type de champ est automatiquement d\\xe9termin\\xe9 en fonction de la valeur et peut \\xeatre de type \"cha\\xeene\", \"nombre\", \"bool\\xe9en\" ou null.',objectType:'Champ de type \"objet\". Un objet contient un ensemble non ordonn\\xe9 de paires cl\\xe9/valeur.',arrayType:'Champ de type \"liste\". Une liste contient une collection ordonn\\xe9e de valeurs.',stringType:'Champ de type \"cha\\xeene\". Ce type de champ n\\'est pas d\\xe9termin\\xe9 en fonction de la valeur, mais retourne syst\\xe9matiquement une cha\\xeene de caract\\xe8res.',modeEditorTitle:\"Changer mode d'\\xe9dition\",modeCodeText:\"Code\",modeCodeTitle:\"Activer surlignage code\",modeFormText:\"Formulaire\",modeFormTitle:\"Activer formulaire\",modeTextText:\"Texte\",modeTextTitle:\"Activer \\xe9diteur texte\",modeTreeText:\"Arbre\",modeTreeTitle:\"Activer \\xe9diteur arbre\",modeViewText:\"Lecture seule\",modeViewTitle:\"Activer vue arbre\",modePreviewText:\"Pr\\xe9visualisation\",modePreviewTitle:\"Activer mode pr\\xe9visualiser\",examples:\"Exemples\",default:\"D\\xe9faut\",containsInvalidProperties:\"Contient des propri\\xe9t\\xe9s non valides\",containsInvalidItems:\"Contient des \\xe9l\\xe9ments invalides\"},de:{array:\"Auflistung\",auto:\"Auto\",appendText:\"anh\\xe4ngen\",appendTitle:\"F\\xfcgen Sie nach diesem Feld ein neues Feld mit dem Typ 'auto' ein (Strg+Umschalt+Ein)\",appendSubmenuTitle:\"W\\xe4hlen Sie den Typ des neuen Feldes\",appendTitleAuto:\"Ein neues Feld vom Typ 'auto' hinzuf\\xfcgen (Strg+Umschalt+Ein)\",ascending:\"Aufsteigend\",ascendingTitle:\"Sortieren Sie die Elemente dieses ${type} in aufsteigender Reihenfolge\",actionsMenu:\"Klicken Sie zum \\xd6ffnen des Aktionsmen\\xfcs (Strg+M)\",cannotParseFieldError:\"Feld kann nicht in JSON geparst werden\",cannotParseValueError:\"Wert kann nicht in JSON geparst werden\",collapseAll:\"Alle Felder zuklappen\",compactTitle:\"JSON-Daten verdichten, alle Leerzeichen entfernen (Strg+Umschalt+\\\\)\",descending:\"Absteigend\",descendingTitle:\"Sortieren Sie die Elemente dieses ${type} in absteigender Reihenfolge\",drag:\"Ziehen, um dieses Feld zu verschieben (Alt+Umschalt+Pfeile)\",duplicateKey:\"Doppelter Schl\\xfcssel\",duplicateText:\"Duplikat\",duplicateTitle:\"Ausgew\\xe4hlte Felder duplizieren (Strg+D)\",duplicateField:\"Dieses Feld duplizieren (Strg+D)\",duplicateFieldError:\"Doppelter Feldname\",empty:\"leer\",expandAll:\"Alle Felder anzeigen\",expandTitle:\"Klicken Sie, um dieses Feld zu erweitern/zu kollabieren (Strg+E). \\nStrg+Klicken Sie, um dieses Feld einschlie\\xdflich aller Elemente zu erweitern/zu kollabieren.\",formatTitle:\"JSON-Daten mit korrekter Einr\\xfcckung und Zeilenvorsch\\xfcben formatieren (Strg+\\\\)\",insert:\"einf\\xfcgen\",insertTitle:\"F\\xfcgen Sie vor diesem Feld ein neues Feld mit dem Typ 'auto' ein (Strg+Einfg)\",insertSub:\"W\\xe4hlen Sie den Typ des neuen Feldes\",object:\"Objekt\",ok:\"Ok\",redo:\"Wiederholen (Strg+Umschalt+Z)\",removeText:\"entfernen\",removeTitle:\"Ausgew\\xe4hlte Felder entfernen (Strg+Entf)\",removeField:\"Dieses Feld entfernen (Strg+Entf)\",repairTitle:\"JSON reparieren: Anf\\xfchrungszeichen und Escape-Zeichen korrigieren, Kommentare und JSONP-Notation entfernen, JavaScript-Objekte in JSON umwandeln.\",searchTitle:\"Suchfelder und Werte\",searchNextResultTitle:\"N\\xe4chstes Ergebnis (Enter)\",searchPreviousResultTitle:\"Vorheriges Ergebnis (Umschalt + Eingabe)\",selectNode:\"W\\xe4hlen Sie einen Knoten aus...\",showAll:\"alle anzeigen\",showMore:\"mehr anzeigen\",showMoreStatus:\"Anzeige von ${visibleChilds} von ${totalChilds}-Elementen.\",sort:\"Sortieren\",sortTitle:\"Sortieren Sie die Elemente dieses ${type}\",sortTitleShort:\"Inhalt sortieren\",sortFieldLabel:\"Feld:\",sortDirectionLabel:\"Richtung:\",sortFieldTitle:\"W\\xe4hlen Sie das verschachtelte Feld, nach dem das Array oder Objekt sortiert werden soll.\",sortAscending:\"Aufsteigend\",sortAscendingTitle:\"Sortieren Sie das ausgew\\xe4hlte Feld in aufsteigender Reihenfolge\",sortDescending:\"Absteigend\",sortDescendingTitle:\"Sortieren Sie das ausgew\\xe4hlte Feld in absteigender Reihenfolge\",string:\"Zeichenfolge\",transform:\"Verwandeln\",transformTitle:\"Die Elemente dieses ${type} filtern, sortieren oder transformieren\",transformTitleShort:\"Inhalte filtern, sortieren oder transformieren\",extract:\"Auszug\",extractTitle:\"Extrahieren Sie diesen ${type}\",transformQueryTitle:\"Eine JMESPath-Abfrage eingeben\",transformWizardLabel:\"Zauberer\",transformWizardFilter:\"Filter\",transformWizardSortBy:\"Sortieren nach\",transformWizardSelectFields:\"Felder ausw\\xe4hlen\",transformQueryLabel:\"Anfrage\",transformPreviewLabel:\"Vorschau\",type:\"Geben Sie  ein.\",typeTitle:\"\\xc4ndern Sie den Typ dieses Feldes\",openUrl:\"Strg+Klicken oder Strg+Eingabe, um die URL in einem neuen Fenster zu \\xf6ffnen\",undo:\"Letzte Aktion r\\xfcckg\\xe4ngig machen (Strg+Z)\",validationCannotMove:\"Kann ein Feld nicht in ein Kind seiner selbst verschieben\",autoType:'Feldtyp \"auto\". Der Feldtyp wird automatisch aus dem Wert bestimmt und kann ein String, eine Zahl, boolesch oder null sein.',objectType:'Feldtyp \"Objekt\". Ein Objekt enth\\xe4lt eine ungeordnete Menge von Schl\\xfcssel/Wert-Paaren.',arrayType:'Feldtyp \"Array\". Ein Array enth\\xe4lt eine geordnete Sammlung von Werten.',stringType:'Feldtyp \"Zeichenfolge\". Der Feldtyp wird nicht aus dem Wert bestimmt, sondern immer als Zeichenfolge zur\\xfcckgegeben.',modeEditorTitle:\"Editor-Modus umschalten\",modeCodeText:\"Code\",modeCodeTitle:\"Umschalten auf Code-Highlighter\",modeFormText:\"Formular\",modeFormTitle:\"Zum Formular-Editor wechseln\",modeTextText:\"Text\",modeTextTitle:\"Zum Editor f\\xfcr einfachen Text wechseln\",modeTreeText:\"Baum\",modeTreeTitle:\"Zum Baum-Editor wechseln\",modeViewText:\"Siehe\",modeViewTitle:\"Zur Baumansicht wechseln\",modePreviewText:\"Vorschau\",modePreviewTitle:\"In den Vorschau-Modus wechseln\",examples:\"Beispiele\",default:\"Standardm\\xe4\\xdfig\",containsInvalidProperties:\"Enth\\xe4lt ung\\xfcltige Eigenschaften\",containsInvalidItems:\"Enth\\xe4lt ung\\xfcltige Elemente\"}},s=\"undefined\"!=typeof navigator?navigator.language||navigator.userLanguage:void 0,o=r.find((function(e){return e===s}))||\"en\";function a(e){var t;e&&((t=r.find((function(t){return t===e})))?o=t:console.error(\"Language not found\"))}function c(e){if(e)for(var t in e)!function(t){r.find((function(e){return e===t}))||r.push(t),i[t]=Object.assign({},i.en,i[t],e[t])}(t)}function l(e,t,n){var r=i[n=n||o][e]||i.en[e]||e;if(t)for(var s in t)r=r.replace(\"${\"+s+\"}\",t[s]);return r}},6056:function(e,t,n){\"use strict\";n.d(t,{r:function(){return s},J:function(){return o}}),t=n(5156);var r=n.n(t),i=n(9791);function s(e,t){var n=t.sort,r=t.filter,s=t.projection,o=\"\";return r?(t=\"@\"!==r.field?[\"0\"].concat((0,i.parsePath)(\".\"+r.field)):[\"0\"],t=\"string\"==typeof(0,i.get)(e,t)?r.value:(0,i.parseString)(r.value),o+=\"[? \"+r.field+\" \"+r.relation+\" `\"+JSON.stringify(t)+\"`]\"):o+=Array.isArray(e)?\"[*]\":\"@\",n&&(o+=\"desc\"===n.direction?\" | reverse(sort_by(@, &\"+n.field+\"))\":\" | sort_by(@, &\"+n.field+\")\"),s&&(\"]\"!==o[o.length-1]&&(o+=\" | [*]\"),1===s.fields.length?o+=\".\"+s.fields[0]:1<s.fields.length&&(o+=\".{\"+s.fields.map((function(e){var t=e.split(\".\");return t[t.length-1]+\": \"+e})).join(\", \")+\"}\")),o}function o(e,t){return r().search(e,t)}},4987:function(){function e(e){\"remove\"in e||Object.defineProperty(e,\"remove\",{configurable:!0,enumerable:!0,writable:!0,value:function(){void 0!==this.parentNode&&this.parentNode.removeChild(this)}})}\"undefined\"!=typeof Element&&(void 0!==window.Element&&e(window.Element.prototype),void 0!==window.CharacterData&&e(window.CharacterData.prototype),void 0!==window.DocumentType&&e(window.DocumentType.prototype)),Array.prototype.findIndex||Object.defineProperty(Array.prototype,\"findIndex\",{value:function(e){for(var t=0;t<this.length;t++)if(e.call(this,this[t],t,this))return t;return-1},configurable:!0,writable:!0}),Array.prototype.find||Object.defineProperty(Array.prototype,\"find\",{value:function(e){return this[e=this.findIndex(e)]},configurable:!0,writable:!0}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\"\")})},341:function(e,t,n){\"use strict\";n.r(t),n.d(t,{previewModeMixins:function(){return g}}),t=n(8909);var r=n.n(t),i=n(4188),s=n(6436),o=n(2474);var a=function(){function e(t,n,r){!function(t){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this),this.onChange=t,this.calculateItemSize=n||function(){return 1},this.limit=r,this.items=[],this.index=-1}var t;return(t=[{key:\"add\",value:function(e){for(;this._calculateHistorySize()>this.limit&&1<this.items.length;)this.items.shift(),this.index--;this.items=this.items.slice(0,this.index+1),this.items.push(e),this.index++,this.onChange()}},{key:\"_calculateHistorySize\",value:function(){var e=this.calculateItemSize,t=0;return this.items.forEach((function(n){t+=e(n)})),t}},{key:\"undo\",value:function(){if(this.canUndo())return this.index--,this.onChange(),this.items[this.index]}},{key:\"redo\",value:function(){if(this.canRedo())return this.index++,this.onChange(),this.items[this.index]}},{key:\"canUndo\",value:function(){return 0<this.index}},{key:\"canRedo\",value:function(){return this.index<this.items.length-1}},{key:\"clear\",value:function(){this.items=[],this.index=-1,this.onChange()}}])&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(e.prototype,t),e}(),c=n(7907),l=n(6056),h=n(6617),d=n(6210),u=n(2558),f=(t=n(5956),n(9791));n=t.textModeMixins[0].mixin,(t={create:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};void 0===t.statusBar&&(t.statusBar=!0),t.mainMenuBar=!1!==t.mainMenuBar,t.enableSort=!1!==t.enableSort,t.enableTransform=!1!==t.enableTransform,t.createQuery=t.createQuery||l.r,t.executeQuery=t.executeQuery||l.J,this.indentation=\"number\"==typeof(this.options=t).indentation?Number(t.indentation):2,(0,c.cC)(this.options.languages),(0,c.m0)(this.options.language),this.mode=\"preview\";var n,r=this;this.container=e,this.dom={},this.json=void 0,this.text=\"\",this._debouncedValidate=(0,f.debounce)(this.validate.bind(this),this.DEBOUNCE_INTERVAL),this.width=e.clientWidth,this.height=e.clientHeight,this.frame=document.createElement(\"div\"),this.frame.className=\"jsoneditor jsoneditor-mode-preview\",this.frame.onclick=function(e){e.preventDefault()},this.frameFocusTracker=new o.R(e={target:this.frame,onFocus:this.options.onFocus||null,onBlur:this.options.onBlur||null}),this.content=document.createElement(\"div\"),this.content.className=\"jsoneditor-outer\",this.dom.busy=document.createElement(\"div\"),this.dom.busy.className=\"jsoneditor-busy\",this.dom.busyContent=document.createElement(\"span\"),this.dom.busyContent.textContent=\"busy...\",this.dom.busy.appendChild(this.dom.busyContent),this.content.appendChild(this.dom.busy),this.dom.previewContent=document.createElement(\"pre\"),this.dom.previewContent.className=\"jsoneditor-preview\",this.dom.previewText=document.createTextNode(\"\"),this.dom.previewContent.appendChild(this.dom.previewText),this.content.appendChild(this.dom.previewContent),this.options.mainMenuBar&&((0,f.addClassName)(this.content,\"has-main-menu-bar\"),this.menu=document.createElement(\"div\"),this.menu.className=\"jsoneditor-menu\",this.frame.appendChild(this.menu),(e=document.createElement(\"button\")).type=\"button\",e.className=\"jsoneditor-format\",e.title=(0,c.Iu)(\"formatTitle\"),this.menu.appendChild(e),e.onclick=function(){r.executeWithBusyMessage((function(){try{r.format()}catch(e){r._onError(e)}}),\"formatting...\")},(e=document.createElement(\"button\")).type=\"button\",e.className=\"jsoneditor-compact\",e.title=(0,c.Iu)(\"compactTitle\"),this.menu.appendChild(e),e.onclick=function(){r.executeWithBusyMessage((function(){try{r.compact()}catch(e){r._onError(e)}}),\"compacting...\")},this.options.enableSort&&((e=document.createElement(\"button\")).type=\"button\",e.className=\"jsoneditor-sort\",e.title=(0,c.Iu)(\"sortTitleShort\"),e.onclick=function(){r._showSortModal()},this.menu.appendChild(e)),this.options.enableTransform&&((n=document.createElement(\"button\")).type=\"button\",n.title=(0,c.Iu)(\"transformTitleShort\"),n.className=\"jsoneditor-transform\",n.onclick=function(){r._showTransformModal()},this.dom.transform=n,this.menu.appendChild(n)),(n=document.createElement(\"button\")).type=\"button\",n.className=\"jsoneditor-repair\",n.title=(0,c.Iu)(\"repairTitle\"),this.menu.appendChild(n),!(n.onclick=function(){void 0===r.json&&r.executeWithBusyMessage((function(){try{r.repair()}catch(e){r._onError(e)}}),\"repairing...\")})!==this.options.history&&(this.history=new a((function(){r.dom.undo.disabled=!r.history.canUndo(),r.dom.redo.disabled=!r.history.canRedo()}),(function(e){return 2*e.text.length}),i.oW),(n=document.createElement(\"button\")).type=\"button\",n.className=\"jsoneditor-undo jsoneditor-separator\",n.title=(0,c.Iu)(\"undo\"),n.onclick=function(){var e=r.history.undo();e&&r._applyHistory(e)},this.menu.appendChild(n),this.dom.undo=n,(n=document.createElement(\"button\")).type=\"button\",n.className=\"jsoneditor-redo\",n.title=(0,c.Iu)(\"redo\"),n.onclick=function(){var e=r.history.redo();e&&r._applyHistory(e)},this.menu.appendChild(n),this.dom.redo=n,this.history.onChange()),this.options&&this.options.modes&&this.options.modes.length&&(this.modeSwitcher=new h.x(this.menu,this.options.modes,this.options.mode,(function(e){r.setMode(e),r.modeSwitcher.focus()})))),this.errorTable=new s.Q({errorTableVisible:!0,onToggleVisibility:function(){r.validate()},onFocusLine:null,onChangeHeight:function(e){r.content.style.marginBottom=-(e=e+(r.dom.statusBar?r.dom.statusBar.clientHeight:0)+1)+\"px\",r.content.style.paddingBottom=e+\"px\"}}),this.frame.appendChild(this.content),this.frame.appendChild(this.errorTable.getErrorTable()),this.container.appendChild(this.frame),t.statusBar&&((0,f.addClassName)(this.content,\"has-status-bar\"),t=document.createElement(\"div\"),(this.dom.statusBar=t).className=\"jsoneditor-statusbar\",this.frame.appendChild(t),this.dom.fileSizeInfo=document.createElement(\"span\"),this.dom.fileSizeInfo.className=\"jsoneditor-size-info\",this.dom.fileSizeInfo.innerText=\"\",t.appendChild(this.dom.fileSizeInfo),this.dom.arrayInfo=document.createElement(\"span\"),this.dom.arrayInfo.className=\"jsoneditor-size-info\",this.dom.arrayInfo.innerText=\"\",t.appendChild(this.dom.arrayInfo),t.appendChild(this.errorTable.getErrorCounter()),t.appendChild(this.errorTable.getWarningIcon()),t.appendChild(this.errorTable.getErrorIcon())),this._renderPreview(),this.setSchema(this.options.schema,this.options.schemaRefs)},_renderPreview:function(){var e=this.getText();this.dom.previewText.nodeValue=(0,f.limitCharacters)(e,i.WF),this.dom.fileSizeInfo&&(this.dom.fileSizeInfo.innerText=\"Size: \"+(0,f.formatSize)(e.length)),this.dom.arrayInfo&&(this.dom.arrayInfo.innerText=Array.isArray(this.json)?\"Array: \"+this.json.length+\" items\":\"\")},_onChange:function(){if(this._debouncedValidate(),this.options.onChange)try{this.options.onChange()}catch(e){console.error(\"Error in onChange callback: \",e)}if(this.options.onChangeJSON)try{this.options.onChangeJSON(this.get())}catch(e){console.error(\"Error in onChangeJSON callback: \",e)}if(this.options.onChangeText)try{this.options.onChangeText(this.getText())}catch(e){console.error(\"Error in onChangeText callback: \",e)}},_showSortModal:function(){var e=this;this.executeWithBusyMessage((function(){var t=e.options.modalAnchor||i.qD,n=e.get();e._renderPreview(),(0,d.showSortModal)(t,n,(function(t){e.executeWithBusyMessage((function(){var r,i,s;r=n,i=t,Array.isArray(r)&&(s=(0,f.sort)(r,i.path,i.direction),e.sortedBy=i,e._setAndFireOnChange(s)),(0,f.isObject)(r)&&(r=(0,f.sortObjectKeys)(r,i.direction),e.sortedBy=i,e._setAndFireOnChange(r))}),\"sorting...\")}),e.sortedBy)}),\"parsing...\")},_showTransformModal:function(){var e=this;this.executeWithBusyMessage((function(){var t=(s=e.options).createQuery,n=s.executeQuery,r=s.modalAnchor,s=s.queryDescription,o=e.get();e._renderPreview(),(0,u.showTransformModal)({container:r||i.qD,json:o,queryDescription:s,createQuery:t,executeQuery:n,onTransform:function(t){e.executeWithBusyMessage((function(){var r=n(o,t);e._setAndFireOnChange(r)}),\"transforming...\")}})}),\"parsing...\")},destroy:function(){this.frame&&this.container&&this.frame.parentNode===this.container&&this.container.removeChild(this.frame),this.modeSwitcher&&(this.modeSwitcher.destroy(),this.modeSwitcher=null),this._debouncedValidate=null,this.history&&(this.history.clear(),this.history=null),this.frameFocusTracker.destroy()},compact:function(){var e=this.get(),t=JSON.stringify(e);this._setTextAndFireOnChange(t,e)},format:function(){var e=this.get(),t=JSON.stringify(e,null,this.indentation);this._setTextAndFireOnChange(t,e)},repair:function(){var e=this.getText();try{var t=r()(e);this._setTextAndFireOnChange(t)}catch(e){}},focus:function(){this.dom.transform.focus()},set:function(e){this.history&&this.history.clear(),this._set(e)},update:function(e){this._set(e)},_set:function(e){this.text=void 0,this.json=e,this._renderPreview(),this._pushHistory(),this._debouncedValidate()},_setAndFireOnChange:function(e){this._set(e),this._onChange()},get:function(){var e;return void 0===this.json&&(e=this.getText(),this.json=(0,f.parse)(e)),this.json},getText:function(){return void 0===this.text&&(this.text=JSON.stringify(this.json,null,this.indentation),!0===this.options.escapeUnicode&&(this.text=(0,f.escapeUnicodeChars)(this.text))),this.text},setText:function(e){this.history&&this.history.clear(),this._setText(e)},updateText:function(e){this.getText()!==e&&this._setText(e)},_setText:function(e,t){var n;this.text=!0===this.options.escapeUnicode?(0,f.escapeUnicodeChars)(e):e,this.json=t,this._renderPreview(),void 0===this.json?(n=this).executeWithBusyMessage((function(){try{n.json=n.get(),n._renderPreview(),n._pushHistory()}catch(e){}}),\"parsing...\"):this._pushHistory(),this._debouncedValidate()},_setTextAndFireOnChange:function(e,t){this._setText(e,t),this._onChange()},_applyHistory:function(e){this.json=e.json,this.text=e.text,this._renderPreview(),this._debouncedValidate()},_pushHistory:function(){this.history&&this.history.add({text:this.text,json:this.json})},executeWithBusyMessage:function(e,t){var n;this.getText().length>i.EX?((0,f.addClassName)((n=this).frame,\"busy\"),n.dom.busyContent.innerText=t,setTimeout((function(){e(),(0,f.removeClassName)(n.frame,\"busy\"),n.dom.busyContent.innerText=\"\"}),100)):e()}}).validate=n.validate,t._renderErrors=n._renderErrors;var g=[{mode:\"preview\",mixin:t,data:\"json\"}]},6210:function(e,t,n){\"use strict\";n.r(t),n.d(t,{showSortModal:function(){return o}}),t=n(483);var r=n.n(t),i=n(7907),s=n(9791);function o(e,t,n,o){var a=Array.isArray(t)?(0,s.getChildPaths)(t):[\"\"],c=o&&o.path&&(0,s.contains)(a,o.path)?o.path:a[0],l=o&&o.direction||\"asc\";o='<div class=\"pico-modal-contents\"><div class=\"pico-modal-header\">'+(0,i.Iu)(\"sort\")+\"</div><form><table><tbody><tr>  <td>\"+(0,i.Iu)(\"sortFieldLabel\")+' </td>  <td class=\"jsoneditor-modal-input\">  <div class=\"jsoneditor-select-wrapper\">    <select id=\"field\" title=\"'+(0,i.Iu)(\"sortFieldTitle\")+'\">    </select>  </div>  </td></tr><tr>  <td>'+(0,i.Iu)(\"sortDirectionLabel\")+' </td>  <td class=\"jsoneditor-modal-input\">  <div id=\"direction\" class=\"jsoneditor-button-group\"><input type=\"button\" value=\"'+(0,i.Iu)(\"sortAscending\")+'\" title=\"'+(0,i.Iu)(\"sortAscendingTitle\")+'\" data-value=\"asc\" class=\"jsoneditor-button-first jsoneditor-button-asc\"/><input type=\"button\" value=\"'+(0,i.Iu)(\"sortDescending\")+'\" title=\"'+(0,i.Iu)(\"sortDescendingTitle\")+'\" data-value=\"desc\" class=\"jsoneditor-button-last jsoneditor-button-desc\"/>  </div>  </td></tr><tr><td colspan=\"2\" class=\"jsoneditor-modal-input jsoneditor-modal-actions\">  <input type=\"submit\" id=\"ok\" value=\"'+(0,i.Iu)(\"ok\")+'\" /></td></tr></tbody></table></form></div>',r()({parent:e,content:o,overlayClass:\"jsoneditor-modal-overlay\",overlayStyles:{backgroundColor:\"rgb(1,1,1)\",opacity:.3},modalClass:\"jsoneditor-modal jsoneditor-modal-sort\"}).afterCreate((function(e){var t=e.modalElem().querySelector(\"form\"),r=e.modalElem().querySelector(\"#ok\"),i=e.modalElem().querySelector(\"#field\"),s=e.modalElem().querySelector(\"#direction\");function o(e){s.value=e,s.className=\"jsoneditor-button-group jsoneditor-button-group-value-\"+s.value}a.forEach((function(e){var t,n=document.createElement(\"option\");n.text=\"\"===(t=e)?\"@\":\".\"===t[0]?t.slice(1):t,n.value=e,i.appendChild(n)})),i.value=c||a[0],o(l||\"asc\"),s.onclick=function(e){o(e.target.getAttribute(\"data-value\"))},r.onclick=function(t){t.preventDefault(),t.stopPropagation(),e.close(),n({path:i.value,direction:s.value})},t&&(t.onsubmit=r.onclick)})).afterClose((function(e){e.destroy()})).show()}},2558:function(e,t,n){\"use strict\";n.r(t),n.d(t,{showTransformModal:function(){return h}}),t=n(483);var r=n.n(t),i=(t=n(3879),n.n(t)),s=n(7907);function o(e){return(o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function a(e,t,n,r){return\"boolean\"==typeof e||e instanceof Boolean||null===e||\"number\"==typeof e||e instanceof Number||\"string\"==typeof e||e instanceof String||e instanceof Date?JSON.stringify(e):Array.isArray(e)?function(e,t,n,r){for(var i=t?n+t:void 0,s=t?\"[\\n\":\"[\",o=0;o<e.length;o++){var c=e[o];if(t&&(s+=i),s+=void 0!==c&&\"function\"!=typeof c?a(c,t,i,r):\"null\",o<e.length-1&&(s+=t?\",\\n\":\",\"),s.length>r)return s+\"...\"}return s+(t?\"\\n\"+n+\"]\":\"]\")}(e,t,n,r):e&&\"object\"===o(e)?function(e,t,n,r){var i,s=t?n+t:void 0,o=!0,c=t?\"{\\n\":\"{\";if(\"function\"==typeof e.toJSON)return a(e.toJSON(),t,n,r);for(i in e)if(function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}(e,i)&&(o?o=!1:c+=t?\",\\n\":\",\",c+=t?s+'\"'+i+'\": ':'\"'+i+'\":',(c+=a(e[i],t,s,r)).length>r))return c+\"...\";return c+(t?\"\\n\"+n+\"}\":\"}\")}(e,t,n,r):void 0}var c=n(9791),l=n(4188);function h(e){var t=e.container,n=e.json,o=void 0===(o=e.queryDescription)?'Enter a <a href=\"http://jmespath.org\" target=\"_blank\">JMESPath</a> query to filter, sort, or transform the JSON data.<br/>To learn JMESPath, go to <a href=\"http://jmespath.org/tutorial.html\" target=\"_blank\">the interactive tutorial</a>.':o,h=e.createQuery,d=e.executeQuery,u=e.onTransform,f=n;o='<label class=\"pico-modal-contents\"><div class=\"pico-modal-header\">'+(0,s.Iu)(\"transform\")+\"</div><p>\"+o+'</p><div class=\"jsoneditor-jmespath-label\">'+(0,s.Iu)(\"transformWizardLabel\")+' </div><div id=\"wizard\" class=\"jsoneditor-jmespath-block jsoneditor-jmespath-wizard\">  <table class=\"jsoneditor-jmespath-wizard-table\">    <tbody>      <tr>        <th>'+(0,s.Iu)(\"transformWizardFilter\")+'</th>        <td class=\"jsoneditor-jmespath-filter\">          <div class=\"jsoneditor-inline jsoneditor-jmespath-filter-field\" >            <select id=\"filterField\">            </select>          </div>          <div class=\"jsoneditor-inline jsoneditor-jmespath-filter-relation\" >            <select id=\"filterRelation\">              <option value=\"==\">==</option>              <option value=\"!=\">!=</option>              <option value=\"<\">&lt;</option>              <option value=\"<=\">&lt;=</option>              <option value=\">\">&gt;</option>              <option value=\">=\">&gt;=</option>            </select>          </div>          <div class=\"jsoneditor-inline jsoneditor-jmespath-filter-value\" >            <input type=\"text\" class=\"value\" placeholder=\"value...\" id=\"filterValue\" />          </div>        </td>      </tr>      <tr>        <th>'+(0,s.Iu)(\"transformWizardSortBy\")+'</th>        <td class=\"jsoneditor-jmespath-filter\">          <div class=\"jsoneditor-inline jsoneditor-jmespath-sort-field\">            <select id=\"sortField\">            </select>          </div>          <div class=\"jsoneditor-inline jsoneditor-jmespath-sort-order\" >            <select id=\"sortOrder\">              <option value=\"asc\">Ascending</option>              <option value=\"desc\">Descending</option>            </select>          </div>        </td>      </tr>      <tr id=\"selectFieldsPart\">        <th>'+(0,s.Iu)(\"transformWizardSelectFields\")+'</th>        <td class=\"jsoneditor-jmespath-filter\">          <select class=\"jsoneditor-jmespath-select-fields\" id=\"selectFields\" multiple></select>        </td>      </tr>    </tbody>  </table></div><div class=\"jsoneditor-jmespath-label\">'+(0,s.Iu)(\"transformQueryLabel\")+' </div><div class=\"jsoneditor-jmespath-block\">  <textarea id=\"query\"             rows=\"4\"             autocomplete=\"off\"             autocorrect=\"off\"             autocapitalize=\"off\"             spellcheck=\"false\"            title=\"'+(0,s.Iu)(\"transformQueryTitle\")+'\">[*]</textarea></div><div class=\"jsoneditor-jmespath-label\">'+(0,s.Iu)(\"transformPreviewLabel\")+' </div><div class=\"jsoneditor-jmespath-block\">  <textarea id=\"preview\"       class=\"jsoneditor-transform-preview\"      readonly> </textarea></div><div class=\"jsoneditor-jmespath-block jsoneditor-modal-actions\">  <input type=\"submit\" id=\"ok\" value=\"'+(0,s.Iu)(\"ok\")+'\" autofocus /></div></div>',r()({parent:t,content:o,overlayClass:\"jsoneditor-modal-overlay\",overlayStyles:{backgroundColor:\"rgb(1,1,1)\",opacity:.3},modalClass:\"jsoneditor-modal jsoneditor-modal-transform\",focus:!1}).afterCreate((function(e){var t=e.modalElem(),r=t.querySelector(\"#wizard\"),s=t.querySelector(\"#ok\"),o=t.querySelector(\"#filterField\"),g=t.querySelector(\"#filterRelation\"),p=t.querySelector(\"#filterValue\"),m=t.querySelector(\"#sortField\"),C=t.querySelector(\"#sortOrder\"),b=t.querySelector(\"#selectFields\"),v=t.querySelector(\"#query\"),I=t.querySelector(\"#preview\");Array.isArray(f)||(r.style.fontStyle=\"italic\",r.textContent=\"(wizard not available for objects, only for arrays)\"),(0,c.getChildPaths)(n).forEach((function(e){var t=x(e);(e=document.createElement(\"option\")).text=t,e.value=t,o.appendChild(e),(e=document.createElement(\"option\")).text=t,e.value=t,m.appendChild(e)})),0<(w=(0,c.getChildPaths)(n,!0).filter((function(e){return\"\"!==e}))).length?w.forEach((function(e){var t=x(e);(e=document.createElement(\"option\")).text=t,e.value=t,b.appendChild(e)})):(S=t.querySelector(\"#selectFieldsPart\"))&&(S.style.display=\"none\");var A=new(i())(o,{defaultSelected:!1,clearable:!0,allowDeselect:!0,placeholder:\"field...\"}),y=new(i())(g,{defaultSelected:!1,clearable:!0,allowDeselect:!0,placeholder:\"compare...\"}),w=(r=new(i())(m,{defaultSelected:!1,clearable:!0,allowDeselect:!0,placeholder:\"field...\"}),new(i())(C,{defaultSelected:!1,clearable:!0,allowDeselect:!0,placeholder:\"order...\"})),S=new(i())(b,{multiple:!0,clearable:!0,defaultSelected:!1,placeholder:\"select fields...\"});function x(e){return\"\"===e?\"@\":\".\"===e[0]?e.slice(1):e}A.on(\"selectr.change\",_),y.on(\"selectr.change\",_),p.oninput=_,r.on(\"selectr.change\",_),w.on(\"selectr.change\",_),S.on(\"selectr.change\",_),t.querySelector(\".pico-modal-contents\").onclick=function(e){\"A\"!==e.target.nodeName&&e.preventDefault()};var E=(0,c.debounce)((function(){try{var e=d(f,v.value);I.className=\"jsoneditor-transform-preview\",I.value=(t=e,e=l.WF,n=function(e,t){for(var n=\"\";0<t--;)n+=e;return n}(\" \",2),(t=a(t,n,\"\",e)).length>e?(n=t,(\"number\"==typeof(e=e)?n.slice(0,e):n)+\"...\"):t),s.disabled=!1}catch(e){I.className=\"jsoneditor-transform-preview jsoneditor-error\",I.value=e.toString(),s.disabled=!0}var t,n}),300);function k(e,t){try{v.value=h(e,t),s.disabled=!1,E()}catch(e){var n='Error: an error happened when executing \"createQuery\": '+(e.message||e.toString());v.value=\"\",s.disabled=!0,I.className=\"jsoneditor-transform-preview jsoneditor-error\",I.value=n}}function _(){var e={};if(o.value&&g.value&&p.value&&(e.filter={field:o.value,relation:g.value,value:p.value}),m.value&&C.value&&(e.sort={field:m.value,direction:C.value}),b.value){for(var t=[],r=0;r<b.options.length;r++)b.options[r].selected&&t.push(b.options[r].value);e.projection={fields:t}}k(n,e)}v.oninput=E,s.onclick=function(t){t.preventDefault(),t.stopPropagation(),e.close(),u(v.value)},k(n,{}),setTimeout((function(){v.select(),v.focus(),v.selectionStart=3,v.selectionEnd=3}))})).afterClose((function(e){e.destroy()})).show()}},5956:function(e,t,n){\"use strict\";n.r(t),n.d(t,{textModeMixins:function(){return b}}),t=n(8909);var r=n.n(t),i=(t=n(8170),n.n(t)),s=n(4188),o=n(6436),a=n(2474),c=n(7907),l=n(6056),h=n(6617),d=n(6210),u=n(2558),f=n(9125),g=n(9791);function p(e){return(p=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}var m=\"ace/theme/jsoneditor\";function C(){try{this.format()}catch(e){}}(n={}).create=function(e){var t=this,n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};void 0===n.statusBar&&(n.statusBar=!0),n.mainMenuBar=!1!==n.mainMenuBar,n.enableSort=!1!==n.enableSort,n.enableTransform=!1!==n.enableTransform,n.createQuery=n.createQuery||l.r,n.executeQuery=n.executeQuery||l.J,this.indentation=\"number\"==typeof(this.options=n).indentation?Number(n.indentation):2,(0,c.cC)(this.options.languages),(0,c.m0)(this.options.language);var r=n.ace||i();this.mode=\"code\"===n.mode?\"code\":\"text\",\"code\"===this.mode&&void 0===r&&(this.mode=\"text\",console.warn(\"Failed to load Ace editor, falling back to plain text mode. Please use a JSONEditor bundle including Ace, or pass Ace as via the configuration option `ace`.\")),this.theme=n.theme||m,this.theme===m&&r&&(0,f.O)(),n.onTextSelectionChange&&this.onTextSelectionChange(n.onTextSelectionChange);var s,d,u=this;this.container=e,this.dom={},this.aceEditor=void 0,this.textarea=void 0,this.validateSchema=null,this.annotations=[],this.lastSchemaErrors=void 0,this._debouncedValidate=(0,g.debounce)(this.validate.bind(this),this.DEBOUNCE_INTERVAL),this.width=e.clientWidth,this.height=e.clientHeight,this.frame=document.createElement(\"div\"),this.frame.className=\"jsoneditor jsoneditor-mode-\"+this.options.mode,this.frame.onclick=function(e){e.preventDefault()},this.frame.onkeydown=function(e){u._onKeyDown(e)},this.frameFocusTracker=new a.R(e={target:this.frame,onFocus:this.options.onFocus||null,onBlur:this.options.onBlur||null}),this.content=document.createElement(\"div\"),this.content.className=\"jsoneditor-outer\",this.options.mainMenuBar&&((0,g.addClassName)(this.content,\"has-main-menu-bar\"),this.menu=document.createElement(\"div\"),this.menu.className=\"jsoneditor-menu\",this.frame.appendChild(this.menu),(e=document.createElement(\"button\")).type=\"button\",e.className=\"jsoneditor-format\",e.title=(0,c.Iu)(\"formatTitle\"),this.menu.appendChild(e),e.onclick=function(){try{u.format(),u._onChange()}catch(e){u._onError(e)}},(e=document.createElement(\"button\")).type=\"button\",e.className=\"jsoneditor-compact\",e.title=(0,c.Iu)(\"compactTitle\"),this.menu.appendChild(e),e.onclick=function(){try{u.compact(),u._onChange()}catch(e){u._onError(e)}},this.options.enableSort&&((e=document.createElement(\"button\")).type=\"button\",e.className=\"jsoneditor-sort\",e.title=(0,c.Iu)(\"sortTitleShort\"),e.onclick=function(){u._showSortModal()},this.menu.appendChild(e)),this.options.enableTransform&&((s=document.createElement(\"button\")).type=\"button\",s.title=(0,c.Iu)(\"transformTitleShort\"),s.className=\"jsoneditor-transform\",s.onclick=function(){u._showTransformModal()},this.menu.appendChild(s)),(s=document.createElement(\"button\")).type=\"button\",s.className=\"jsoneditor-repair\",s.title=(0,c.Iu)(\"repairTitle\"),this.menu.appendChild(s),s.onclick=function(){try{u.repair(),u._onChange()}catch(e){u._onError(e)}},\"code\"===this.mode&&((I=document.createElement(\"button\")).type=\"button\",I.className=\"jsoneditor-undo jsoneditor-separator\",I.title=(0,c.Iu)(\"undo\"),I.onclick=function(){t.aceEditor.getSession().getUndoManager().undo()},this.menu.appendChild(I),this.dom.undo=I,(I=document.createElement(\"button\")).type=\"button\",I.className=\"jsoneditor-redo\",I.title=(0,c.Iu)(\"redo\"),I.onclick=function(){t.aceEditor.getSession().getUndoManager().redo()},this.menu.appendChild(I),this.dom.redo=I),this.options&&this.options.modes&&this.options.modes.length&&(this.modeSwitcher=new h.x(this.menu,this.options.modes,this.options.mode,(function(e){u.setMode(e),u.modeSwitcher.focus()}))),\"code\"===this.mode&&((d=document.createElement(\"a\")).appendChild(document.createTextNode(\"powered by ace\")),d.href=\"https://ace.c9.io/\",d.target=\"_blank\",d.className=\"jsoneditor-poweredBy\",d.onclick=function(){window.open(d.href,d.target,\"noopener\")},this.menu.appendChild(d)));var C,b,v,I=this.options.onEditable&&p(\"function\"===this.options.onEditable)&&!this.options.onEditable({});this.frame.appendChild(this.content),this.container.appendChild(this.frame),\"code\"===this.mode?(this.editorDom=document.createElement(\"div\"),this.editorDom.style.height=\"100%\",this.editorDom.style.width=\"100%\",this.content.appendChild(this.editorDom),r=(b=r.edit(this.editorDom)).getSession(),b.$blockScrolling=1/0,b.setTheme(this.theme),b.setOptions({readOnly:I}),b.setShowPrintMargin(!1),b.setFontSize(\"13px\"),r.setMode(\"ace/mode/json\"),r.setTabSize(this.indentation),r.setUseSoftTabs(!0),r.setUseWrapMode(!0),C=r.setAnnotations,r.setAnnotations=function(e){C.call(this,e&&e.length?e:u.annotations)},b.commands.bindKey(\"Ctrl-L\",null),b.commands.bindKey(\"Command-L\",null),b.commands.bindKey(\"Ctrl-\\\\\",null),b.commands.bindKey(\"Command-\\\\\",null),b.commands.bindKey(\"Ctrl-Shift-\\\\\",null),b.commands.bindKey(\"Command-Shift-\\\\\",null),(this.aceEditor=b).on(\"change\",this._onChange.bind(this)),b.on(\"changeSelection\",this._onSelect.bind(this))):((v=document.createElement(\"textarea\")).className=\"jsoneditor-text\",v.spellcheck=!1,this.content.appendChild(v),this.textarea=v,this.textarea.readOnly=I,null===this.textarea.oninput?this.textarea.oninput=this._onChange.bind(this):this.textarea.onchange=this._onChange.bind(this),v.onselect=this._onSelect.bind(this),v.onmousedown=this._onMouseDown.bind(this),v.onblur=this._onBlur.bind(this)),this._updateHistoryButtons(),this.errorTable=new o.Q({errorTableVisible:\"text\"===this.mode,onToggleVisibility:function(){u.validate()},onFocusLine:function(e){u.isFocused=!0,isNaN(e)||u.setTextSelection({row:e,column:1},{row:e,column:1e3})},onChangeHeight:function(e){u.content.style.marginBottom=-(e=e+(u.dom.statusBar?u.dom.statusBar.clientHeight:0)+1)+\"px\",u.content.style.paddingBottom=e+\"px\"}}),this.frame.appendChild(this.errorTable.getErrorTable()),n.statusBar&&((0,g.addClassName)(this.content,\"has-status-bar\"),this.curserInfoElements={},b=document.createElement(\"div\"),(this.dom.statusBar=b).className=\"jsoneditor-statusbar\",this.frame.appendChild(b),(I=document.createElement(\"span\")).className=\"jsoneditor-curserinfo-label\",I.innerText=\"Ln:\",(v=document.createElement(\"span\")).className=\"jsoneditor-curserinfo-val\",v.innerText=\"1\",b.appendChild(I),b.appendChild(v),(n=document.createElement(\"span\")).className=\"jsoneditor-curserinfo-label\",n.innerText=\"Col:\",(I=document.createElement(\"span\")).className=\"jsoneditor-curserinfo-val\",I.innerText=\"1\",b.appendChild(n),b.appendChild(I),this.curserInfoElements.colVal=I,this.curserInfoElements.lnVal=v,(I=document.createElement(\"span\")).className=\"jsoneditor-curserinfo-label\",I.innerText=\"characters selected\",I.style.display=\"none\",(v=document.createElement(\"span\")).className=\"jsoneditor-curserinfo-count\",v.innerText=\"0\",v.style.display=\"none\",this.curserInfoElements.countLabel=I,this.curserInfoElements.countVal=v,b.appendChild(v),b.appendChild(I),b.appendChild(this.errorTable.getErrorCounter()),b.appendChild(this.errorTable.getWarningIcon()),b.appendChild(this.errorTable.getErrorIcon())),this.setSchema(this.options.schema,this.options.schemaRefs)},n._onChange=function(){var e=this;if(!this.onChangeDisabled){if(setTimeout((function(){return e._updateHistoryButtons()})),this._debouncedValidate(),this.options.onChange)try{this.options.onChange()}catch(e){console.error(\"Error in onChange callback: \",e)}if(this.options.onChangeText)try{this.options.onChangeText(this.getText())}catch(e){console.error(\"Error in onChangeText callback: \",e)}}},n._updateHistoryButtons=function(){var e;this.aceEditor&&this.dom.undo&&this.dom.redo&&(e=this.aceEditor.getSession().getUndoManager())&&e.hasUndo&&e.hasRedo&&(this.dom.undo.disabled=!e.hasUndo(),this.dom.redo.disabled=!e.hasRedo())},n._showSortModal=function(){var e=this,t=this.options.modalAnchor||s.qD,n=this.get();(0,d.showSortModal)(t,n,(function(t){var r;Array.isArray(n)&&(r=(0,g.sort)(n,t.path,t.direction),e.sortedBy=t,e.update(r)),(0,g.isObject)(n)&&(r=(0,g.sortObjectKeys)(n,t.direction),e.sortedBy=t,e.update(r))}),e.sortedBy)},n._showTransformModal=function(){var e=this,t=(i=this.options).modalAnchor,n=i.createQuery,r=i.executeQuery,i=i.queryDescription,o=this.get();(0,u.showTransformModal)({container:t||s.qD,json:o,queryDescription:i,createQuery:n,executeQuery:r,onTransform:function(t){t=r(o,t),e.update(t)}})},n._onSelect=function(){this._updateCursorInfo(),this._emitSelectionChange()},n._onKeyDown=function(e){var t=!1;220===(e.which||e.keyCode)&&e.ctrlKey&&(e.shiftKey?this.compact():this.format(),this._onChange(),t=!0),t&&(e.preventDefault(),e.stopPropagation()),this._updateCursorInfo(),this._emitSelectionChange()},n._onMouseDown=function(){this._updateCursorInfo(),this._emitSelectionChange()},n._onBlur=function(){var e=this;setTimeout((function(){e.isFocused||(e._updateCursorInfo(),e._emitSelectionChange()),e.isFocused=!1}))},n._updateCursorInfo=function(){var e,t,n,r,i,s=this;function o(){s.curserInfoElements.countVal.innerText!==i&&(s.curserInfoElements.countVal.innerText=i,s.curserInfoElements.countVal.style.display=i?\"inline\":\"none\",s.curserInfoElements.countLabel.style.display=i?\"inline\":\"none\"),s.curserInfoElements.lnVal.innerText=n,s.curserInfoElements.colVal.innerText=r}this.textarea?setTimeout((function(){var e=(0,g.getInputSelection)(s.textarea);e.startIndex!==e.endIndex&&(i=e.endIndex-e.startIndex),r=i&&s.cursorInfo&&s.cursorInfo.line===e.end.row&&s.cursorInfo.column===e.end.column?(n=e.start.row,e.start.column):(n=e.end.row,e.end.column),s.cursorInfo={line:n,column:r,count:i},s.options.statusBar&&o()}),0):this.aceEditor&&this.curserInfoElements&&(e=this.aceEditor.getCursorPosition(),t=this.aceEditor.getSelectedText(),s.cursorInfo={line:n=e.row+1,column:r=e.column+1,count:i=t.length},this.options.statusBar&&o())},n._emitSelectionChange=function(){var e;this._selectionChangedHandler&&(e=this.getTextSelection(),this._selectionChangedHandler(e.start,e.end,e.text))},n._refreshAnnotations=function(){var e,t=this.aceEditor&&this.aceEditor.getSession();t&&(e=t.getAnnotations().filter((function(e){return\"error\"===e.type})),t.setAnnotations(e))},n.destroy=function(){this.aceEditor&&(this.aceEditor.destroy(),this.aceEditor=null),this.frame&&this.container&&this.frame.parentNode===this.container&&this.container.removeChild(this.frame),this.modeSwitcher&&(this.modeSwitcher.destroy(),this.modeSwitcher=null),this.textarea=null,this._debouncedValidate=null,this.frameFocusTracker.destroy()},n.compact=function(){var e=this.get();e=JSON.stringify(e),this.updateText(e)},n.format=function(){var e=this.get();e=JSON.stringify(e,null,this.indentation),this.updateText(e)},n.repair=function(){var e=this.getText();try{var t=r()(e);this.updateText(t)}catch(e){}},n.focus=function(){this.textarea&&this.textarea.focus(),this.aceEditor&&this.aceEditor.focus()},n.resize=function(){this.aceEditor&&this.aceEditor.resize(!1)},n.set=function(e){this.setText(JSON.stringify(e,null,this.indentation))},n.update=function(e){this.updateText(JSON.stringify(e,null,this.indentation))},n.get=function(){var e=this.getText();return(0,g.parse)(e)},n.getText=function(){return this.textarea?this.textarea.value:this.aceEditor?this.aceEditor.getValue():\"\"},n._setText=function(e,t){var n,r=this;e=!0===this.options.escapeUnicode?(0,g.escapeUnicodeChars)(e):e,this.textarea&&(this.textarea.value=e),this.aceEditor&&(this.onChangeDisabled=!0,this.aceEditor.setValue(e,-1),this.onChangeDisabled=!1,t&&(n=this,setTimeout((function(){n.aceEditor&&n.aceEditor.session.getUndoManager().reset()}))),setTimeout((function(){return r._updateHistoryButtons()}))),this._debouncedValidate()},n.setText=function(e){this._setText(e,!0)},n.updateText=function(e){this.getText()!==e&&this._setText(e,!1)},n.validate=function(){var e,t,n=this,r=[],i=[];try{var s=this.get();this.validateSchema&&(this.validateSchema(s)||(r=this.validateSchema.errors.map((function(e){return e.type=\"validation\",(0,g.improveSchemaError)(e)})))),this.validationSequence=(this.validationSequence||0)+1;var o=this,a=this.validationSequence;(function(e,t){if(!t)return Promise.resolve([]);try{var n=t(e);return((0,g.isPromise)(n)?n:Promise.resolve(n)).then((function(e){return Array.isArray(e)?e.filter((function(e){var t=(0,g.isValidValidationError)(e);return t||console.warn('Ignoring a custom validation error with invalid structure. Expected structure: {path: [...], message: \"...\"}. Actual error:',e),t})).map((function(e){return{dataPath:(0,g.stringifyPath)(e.path),message:e.message,type:\"customValidation\"}})):[]}))}catch(e){return Promise.reject(e)}})(s,this.options.onValidate).then((function(e){a===o.validationSequence&&(e=r.concat(i).concat(e),o._renderErrors(e),\"function\"==typeof n.options.onValidationError&&((0,g.isValidationErrorChanged)(e,n.lastSchemaErrors)&&n.options.onValidationError.call(n,e),n.lastSchemaErrors=e))})).catch((function(e){console.error(\"Custom validation function did throw an error\",e)}))}catch(s){this.getText()&&((e=/\\w*line\\s*(\\d+)\\w*/g.exec(s.message))&&(t=+e[1]),i=[{type:\"error\",message:s.message.replace(/\\n/g,\"<br>\"),line:t}]),this._renderErrors(i),\"function\"==typeof this.options.onValidationError&&((0,g.isValidationErrorChanged)(i,this.lastSchemaErrors)&&this.options.onValidationError.call(this,i),this.lastSchemaErrors=i)}},n._renderErrors=function(e){var t=this.getText(),n=[];e.reduce((function(e,t){return\"string\"==typeof t.dataPath&&-1===e.indexOf(t.dataPath)&&e.push(t.dataPath),e}),n),n=(0,g.getPositionForPath)(t,n),this.aceEditor&&(this.annotations=n.map((function(t){var n=e.filter((function(e){return e.dataPath===t.path})),r=n.map((function(e){return e.message})).join(\"\\n\");return r?{row:t.line,column:t.column,text:\"Schema validation error\"+(1!==n.length?\"s\":\"\")+\": \\n\"+r,type:\"warning\",source:\"jsoneditor\"}:{}})),this._refreshAnnotations()),this.errorTable.setErrors(e,n),this.aceEditor&&this.aceEditor.resize(!1)},n.getTextSelection=function(){var e={};if(this.textarea){var t=(0,g.getInputSelection)(this.textarea);return this.cursorInfo&&this.cursorInfo.line===t.end.row&&this.cursorInfo.column===t.end.column?(e.start=t.end,e.end=t.start):e=t,{start:e.start,end:e.end,text:this.textarea.value.substring(t.startIndex,t.endIndex)}}if(this.aceEditor){var n=this.aceEditor.getSelection(),r=this.aceEditor.getSelectedText();return t=n.getRange(),(n=n.getSelectionLead()).row===t.end.row&&n.column===t.end.column?e=t:(e.start=t.end,e.end=t.start),{start:{row:e.start.row+1,column:e.start.column+1},end:{row:e.end.row+1,column:e.end.column+1},text:r}}},n.onTextSelectionChange=function(e){\"function\"==typeof e&&(this._selectionChangedHandler=(0,g.debounce)(e,this.DEBOUNCE_INTERVAL))},n.setTextSelection=function(e,t){var n,r,i;e&&t&&(this.textarea?(n=(0,g.getIndexForPosition)(this.textarea,e.row,e.column),r=(0,g.getIndexForPosition)(this.textarea,t.row,t.column),-1<n&&-1<r&&(this.textarea.setSelectionRange?(this.textarea.focus(),this.textarea.setSelectionRange(n,r)):this.textarea.createTextRange&&((i=this.textarea.createTextRange()).collapse(!0),i.moveEnd(\"character\",r),i.moveStart(\"character\",n),i.select()),i=(this.textarea.value.match(/\\n/g)||[]).length+1,i=this.textarea.scrollHeight/i,this.textarea.scrollTop=(i*=e.row)>this.textarea.clientHeight?i-this.textarea.clientHeight/2:0)):this.aceEditor&&(this.aceEditor.selection.setRange(t={start:{row:e.row-1,column:e.column-1},end:{row:t.row-1,column:t.column-1}}),this.aceEditor.scrollToLine(e.row-1,!0)))};var b=[{mode:\"text\",mixin:n,data:\"text\",load:C},{mode:\"code\",mixin:n,data:\"text\",load:C}]},8038:function(e,t,n){\"use strict\";n.r(t),n.d(t,{treeModeMixins:function(){return O}});var r={start:function(e,t,n){return 0===t.indexOf(e)},contain:function(e,t,n){return-1<t.indexOf(e)}},i=n(897),s=n(2474);var o=function(){function e(){!function(t){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this),this.locked=!1}var t;return(t=[{key:\"highlight\",value:function(e){this.locked||(this.node!==e&&(this.node&&this.node.setHighlight(!1),this.node=e,this.node.setHighlight(!0)),this._cancelUnhighlight())}},{key:\"unhighlight\",value:function(){var e;this.locked||(e=this).node&&(this._cancelUnhighlight(),this.unhighlightTimer=setTimeout((function(){e.node.setHighlight(!1),e.node=void 0,e.unhighlightTimer=void 0}),0))}},{key:\"_cancelUnhighlight\",value:function(){this.unhighlightTimer&&(clearTimeout(this.unhighlightTimer),this.unhighlightTimer=void 0)}},{key:\"lock\",value:function(){this.locked=!0}},{key:\"unlock\",value:function(){this.locked=!1}}])&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(e.prototype,t),e}(),a=n(7907),c=n(6056),l=n(6617),h=(t=n(233),n.n(t)),d=n(2602),u=n(9791),f=n(6210),g=n(2558),p=n(4188);function m(e,t){var n;if(\"undefined\"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(e){if(\"string\"==typeof e)return C(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(e):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?C(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){n&&(e=n);var r=0;return{s:t=function(){},n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:t}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var i,s=!0,o=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return s=e.done,e},e:function(e){o=!0,i=e},f:function(){try{s||null==n.return||n.return()}finally{if(o)throw i}}}}function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function b(e){return(b=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}var v=function(){function e(t,n){!function(t){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this),this.editor=t,this.dom={},this.expanded=!1,n&&n instanceof Object?(this.setField(n.field,n.fieldEditable),\"value\"in n&&this.setValue(n.value,n.type),\"internalValue\"in n&&this.setInternalValue(n.internalValue)):(this.setField(\"\"),this.setValue(null)),this._debouncedOnChangeValue=(0,u.debounce)(this._onChangeValue.bind(this),e.prototype.DEBOUNCE_INTERVAL),this._debouncedOnChangeField=(0,u.debounce)(this._onChangeField.bind(this),e.prototype.DEBOUNCE_INTERVAL),this.visibleChilds=this.getMaxVisibleChilds()}var t;return(t=[{key:\"getMaxVisibleChilds\",value:function(){return this.editor&&this.editor.options&&this.editor.options.maxVisibleChilds?this.editor.options.maxVisibleChilds:I}},{key:\"_updateEditability\",value:function(){var e;this.editable={field:!0,value:!0},this.editor&&(this.editable.field=\"tree\"===this.editor.options.mode,this.editable.value=\"view\"!==this.editor.options.mode,\"tree\"!==this.editor.options.mode&&\"form\"!==this.editor.options.mode||\"function\"!=typeof this.editor.options.onEditable||(\"boolean\"==typeof(e=this.editor.options.onEditable({field:this.field,value:this.value,path:this.getPath()}))?(this.editable.field=e,this.editable.value=e):\"object\"===b(e)&&null!==e?(\"boolean\"==typeof e.field&&(this.editable.field=e.field),\"boolean\"==typeof e.value&&(this.editable.value=e.value)):(console.error(\"Invalid return value for function onEditable.\",\"Actual value:\",e,\".\",\"Either a boolean or object { field: boolean, value: boolean } expected.\"),this.editable.field=!1,this.editable.value=!1)))}},{key:\"getPath\",value:function(){for(var e=this,t=[];e;){var n=e.getName();void 0!==n&&t.unshift(n),e=e.parent}return t}},{key:\"getInternalPath\",value:function(){for(var e=this,t=[];e;)e.parent&&t.unshift(e.getIndex()),e=e.parent;return t}},{key:\"getName\",value:function(){return this.parent?\"array\"!==this.parent.type?this.field:this.index:void 0}},{key:\"findNodeByPath\",value:function(e){if(e){if(0===e.length)return this;if(e.length&&this.childs&&this.childs.length)for(var t=0;t<this.childs.length;++t)if(\"\"+e[0]==\"\"+this.childs[t].getName())return this.childs[t].findNodeByPath(e.slice(1))}}},{key:\"findNodeByInternalPath\",value:function(e){if(e){for(var t=this,n=0;n<e.length&&t;n++)t=t.childs[e[n]];return t}}},{key:\"serialize\",value:function(){return{value:this.getValue(),path:this.getPath()}}},{key:\"findNode\",value:function(e){for(var t=(0,u.parsePath)(e),n=this;n&&0<t.length;)!function(){var e=t.shift();if(\"number\"==typeof e){if(\"array\"!==n.type)throw new Error(\"Cannot get child node at index \"+e+\": node is no array\");n=n.childs[e]}else{if(\"object\"!==n.type)throw new Error(\"Cannot get child node \"+e+\": node is no object\");n=n.childs.filter((function(t){return t.field===e}))[0]}}();return n}},{key:\"findParents\",value:function(){for(var e=[],t=this.parent;t;)e.unshift(t),t=t.parent;return e}},{key:\"setError\",value:function(e,t){this.error=e,this.errorChild=t,this.dom&&this.dom.tr&&this.updateError()}},{key:\"updateError\",value:function(){var e=this,t=this.fieldError||this.valueError||this.error,n=this.dom.tdError;if(t&&this.dom&&this.dom.tr){(0,u.addClassName)(this.dom.tr,\"jsoneditor-validation-error\"),n||(n=document.createElement(\"td\"),this.dom.tdError=n,this.dom.tdValue.parentNode.appendChild(n));var r=document.createElement(\"button\");r.type=\"button\",r.className=\"jsoneditor-button jsoneditor-schema-error\";var i=function(){e.dom.popupAnchor&&e.dom.popupAnchor.destroy()},s=function(){delete e.dom.popupAnchor},o=function(n){var i=e.editor.frame;e.dom.popupAnchor=(0,d.w)(r,e.editor.getPopupAnchor(),s,n),n=r.getBoundingClientRect(),i=120<i.getBoundingClientRect().width-n.x?\"jsoneditor-above\":\"jsoneditor-left\",(n=document.createElement(\"div\")).className=\"jsoneditor-popover \"+i,n.appendChild(document.createTextNode(t.message)),e.dom.popupAnchor.appendChild(n)};r.onmouseover=function(){e.dom.popupAnchor||o(!0)},r.onfocus=function(){i(),o(!1)},r.onblur=function(){i()};var a=this.errorChild;for(a&&(r.onclick=function(){a.findParents().forEach((function(e){e.expand(!1)})),a.scrollTo((function(){a.focus()}))});n.firstChild;)n.removeChild(n.firstChild);n.appendChild(r)}else this.dom.tr&&(0,u.removeClassName)(this.dom.tr,\"jsoneditor-validation-error\"),n&&(this.dom.tdError.parentNode.removeChild(this.dom.tdError),delete this.dom.tdError)}},{key:\"getIndex\",value:function(){if(this.parent){var e=this.parent.childs.indexOf(this);return-1!==e?e:null}return-1}},{key:\"setParent\",value:function(e){this.parent=e}},{key:\"setField\",value:function(e,t){this.field=e,this.previousField=e,this.fieldEditable=!0===t}},{key:\"getField\",value:function(){return void 0===this.field&&this._getDomField(),this.field}},{key:\"setValue\",value:function(t,n){var r,i,s,o,a,c,l,h=this.childs;if(this.type=this._getType(t),n&&n!==this.type){if(\"string\"!==n||\"auto\"!==this.type)throw new Error('Type mismatch: cannot cast value of type \"'+this.type+' to the specified type \"'+n+'\"');this.type=n}if(\"array\"===this.type){for(this.childs||(this.childs=[]),i=0;i<t.length;i++)void 0===(a=t[i])||a instanceof Function||(i<this.childs.length?((r=this.childs[i]).fieldEditable=!1,r.index=i,r.setValue(a)):(r=new e(this.editor,{value:a}),o=i<this.getMaxVisibleChilds(),this.appendChild(r,o,!1)));for(s=this.childs.length;s>=t.length;s--)this.removeChild(this.childs[s],!1)}else if(\"object\"===this.type){for(this.childs||(this.childs=[]),s=this.childs.length-1;0<=s;s--)w(t,this.childs[s].field)||this.removeChild(this.childs[s],!1);for(var d in i=0,t)w(t,d)&&(void 0===(a=t[d])||a instanceof Function||((l=this.findChildByProperty(d))?(l.setField(d,!0),l.setValue(a)):(c=new e(this.editor,{field:d,value:a}),l=i<this.getMaxVisibleChilds(),this.appendChild(c,l,!1))),i++);!(this.value=\"\")===this.editor.options.sortObjectKeys&&this.sort([],\"asc\",!1)}else this.hideChilds(),delete this.append,delete this.showMore,delete this.expanded,delete this.childs,this.value=t;Array.isArray(h)!==Array.isArray(this.childs)&&this.recreateDom(),this.updateDom({updateIndexes:!0}),this.previousValue=this.value}},{key:\"setInternalValue\",value:function(t){var n,r,i,s,o,a=this.childs;if(this.type=t.type,\"array\"===t.type){for(this.childs||(this.childs=[]),s=0;s<t.childs.length;s++)void 0===(n=t.childs[s])||n instanceof Function||(s<this.childs.length?((r=this.childs[s]).fieldEditable=!1,r.index=s,r.setInternalValue(n)):(r=new e(this.editor,{internalValue:n}),i=s<this.getMaxVisibleChilds(),this.appendChild(r,i,!1)));for(o=this.childs.length;o>=t.childs.length;o--)this.removeChild(this.childs[o],!1)}else if(\"object\"===t.type){for(this.childs||(this.childs=[]),s=0;s<t.childs.length;s++)void 0===(n=t.childs[s])||n instanceof Function||(s<this.childs.length?(delete(r=this.childs[s]).index,r.setField(n.field,!0),r.setInternalValue(n.value)):(r=new e(this.editor,{field:n.field,internalValue:n.value}),i=s<this.getMaxVisibleChilds(),this.appendChild(r,i,!1)));for(o=this.childs.length;o>=t.childs.length;o--)this.removeChild(this.childs[o],!1)}else this.hideChilds(),delete this.append,delete this.showMore,delete this.expanded,delete this.childs,this.value=t.value;Array.isArray(a)!==Array.isArray(this.childs)&&this.recreateDom(),this.updateDom({updateIndexes:!0}),this.previousValue=this.value}},{key:\"recreateDom\",value:function(){var e;this.dom&&this.dom.tr&&this.dom.tr.parentNode?(e=this._detachFromDom(),this.clearDom(),this._attachToDom(e)):this.clearDom()}},{key:\"getValue\",value:function(){if(\"array\"===this.type){var e=[];return this.childs.forEach((function(t){e.push(t.getValue())})),e}if(\"object\"!==this.type)return void 0===this.value&&this._getDomValue(),this.value;var t={};return this.childs.forEach((function(e){t[e.getField()]=e.getValue()})),t}},{key:\"getInternalValue\",value:function(){return\"array\"===this.type?{type:this.type,childs:this.childs.map((function(e){return e.getInternalValue()}))}:\"object\"===this.type?{type:this.type,childs:this.childs.map((function(e){return{field:e.getField(),value:e.getInternalValue()}}))}:(void 0===this.value&&this._getDomValue(),{type:this.type,value:this.value})}},{key:\"getLevel\",value:function(){return this.parent?this.parent.getLevel()+1:0}},{key:\"getNodePath\",value:function(){var e=this.parent?this.parent.getNodePath():[];return e.push(this),e}},{key:\"clone\",value:function(){var t,n=new e(this.editor);return n.type=this.type,n.field=this.field,n.fieldInnerText=this.fieldInnerText,n.fieldEditable=this.fieldEditable,n.previousField=this.previousField,n.value=this.value,n.valueInnerText=this.valueInnerText,n.previousValue=this.previousValue,n.expanded=this.expanded,n.visibleChilds=this.visibleChilds,this.childs?(t=[],this.childs.forEach((function(e){(e=e.clone()).setParent(n),t.push(e)})),n.childs=t):n.childs=void 0,n}},{key:\"expand\",value:function(e){this.childs&&(this.expanded=!0,this.dom.expand&&(this.dom.expand.className=\"jsoneditor-button jsoneditor-expanded\"),this.showChilds(),!1!==e&&this.childs.forEach((function(t){t.expand(e)})),this.updateDom({recurse:!1}))}},{key:\"collapse\",value:function(e){this.childs&&(this.hideChilds(),!1!==e&&this.childs.forEach((function(t){t.collapse(e)})),this.dom.expand&&(this.dom.expand.className=\"jsoneditor-button jsoneditor-collapsed\"),this.expanded=!1,this.updateDom({recurse:!1}))}},{key:\"showChilds\",value:function(){var e=this.childs;if(e&&this.expanded){var t=this.dom.tr,n=t?t.parentNode:void 0;if(n){(e=this.getAppendDom()).parentNode||((i=t.nextSibling)?n.insertBefore(e,i):n.appendChild(e));for(var r=Math.min(this.childs.length,this.visibleChilds),i=this._getNextTr(),s=0;s<r;s++){var o=this.childs[s];o.getDom().parentNode||n.insertBefore(o.getDom(),i),o.showChilds()}e=this.getShowMoreDom(),i=this._getNextTr(),e.parentNode||n.insertBefore(e,i),this.showMore.updateDom()}}}},{key:\"_getNextTr\",value:function(){return this.showMore&&this.showMore.getDom().parentNode?this.showMore.getDom():this.append&&this.append.getDom().parentNode?this.append.getDom():void 0}},{key:\"hide\",value:function(e){var t=this.dom.tr,n=t?t.parentNode:void 0;n&&n.removeChild(t),this.dom.popupAnchor&&this.dom.popupAnchor.destroy(),this.hideChilds(e)}},{key:\"hideChilds\",value:function(e){var t;this.childs&&this.expanded&&((t=this.getAppendDom()).parentNode&&t.parentNode.removeChild(t),this.childs.forEach((function(e){e.hide()})),(t=this.getShowMoreDom()).parentNode&&t.parentNode.removeChild(t),e&&!e.resetVisibleChilds||(this.visibleChilds=this.getMaxVisibleChilds()))}},{key:\"_updateCssClassName\",value:function(){var e;this.dom.field&&this.editor&&this.editor.options&&\"function\"==typeof this.editor.options.onClassName&&this.dom.tree&&((0,u.removeAllClassNames)(this.dom.tree),e=this.editor.options.onClassName({path:this.getPath(),field:this.field,value:this.value})||\"\",(0,u.addClassName)(this.dom.tree,\"jsoneditor-values \"+e))}},{key:\"recursivelyUpdateCssClassesOnNodes\",value:function(){if(this._updateCssClassName(),Array.isArray(this.childs))for(var e=0;e<this.childs.length;e++)this.childs[e].recursivelyUpdateCssClassesOnNodes()}},{key:\"expandTo\",value:function(){for(var e=this.parent;e;)e.expanded||e.expand(),e=e.parent}},{key:\"appendChild\",value:function(e,t,n){var r,i;this._hasChilds()&&(e.setParent(this),e.fieldEditable=\"object\"===this.type,\"array\"===this.type&&(e.index=this.childs.length),\"object\"===this.type&&void 0===e.field&&e.setField(\"\"),this.childs.push(e),this.expanded&&!1!==t&&(r=e.getDom(),t=(i=this._getNextTr())?i.parentNode:void 0,i&&t&&t.insertBefore(r,i),e.showChilds(),this.visibleChilds++),!1!==n&&(this.updateDom({updateIndexes:!0}),e.updateDom({recurse:!0})))}},{key:\"moveBefore\",value:function(e,t,n){var r,i;this._hasChilds()&&((r=this.dom.tr?this.dom.tr.parentNode:void 0)&&((i=document.createElement(\"tr\")).style.height=r.clientHeight+\"px\",r.appendChild(i)),e.parent&&e.parent.removeChild(e),t instanceof S||!t?this.childs.length+1>this.visibleChilds?this.insertBefore(e,this.childs[this.visibleChilds-1],n):this.appendChild(e,!0,n):this.insertBefore(e,t,n),r&&i&&r.removeChild(i))}},{key:\"insertBefore\",value:function(e,t,n){if(this._hasChilds()){if(this.visibleChilds++,\"object\"===this.type&&void 0===e.field&&e.setField(\"\"),t===this.append)e.setParent(this),e.fieldEditable=\"object\"===this.type,this.childs.push(e);else{var r=this.childs.indexOf(t);if(-1===r)throw new Error(\"Node not found\");e.setParent(this),e.fieldEditable=\"object\"===this.type,this.childs.splice(r,0,e)}var i;this.expanded&&(i=e.getDom(),t=(r=t.getDom())?r.parentNode:void 0,r&&t&&t.insertBefore(i,r),e.showChilds(),this.showChilds()),!1!==n&&(this.updateDom({updateIndexes:!0}),e.updateDom({recurse:!0}))}}},{key:\"insertAfter\",value:function(e,t){this._hasChilds()&&(t=this.childs.indexOf(t),(t=this.childs[t+1])?this.insertBefore(e,t):this.appendChild(e))}},{key:\"search\",value:function(e,t){Array.isArray(t)||(t=[]);var n=e?e.toLowerCase():void 0;return delete this.searchField,delete this.searchValue,void 0!==this.field&&t.length<=this.MAX_SEARCH_RESULTS&&(-1!==String(this.field).toLowerCase().indexOf(n)&&(this.searchField=!0,t.push({node:this,elem:\"field\"})),this._updateDomField()),this._hasChilds()?this.childs&&this.childs.forEach((function(n){n.search(e,t)})):void 0!==this.value&&t.length<=this.MAX_SEARCH_RESULTS&&(-1!==String(this.value).toLowerCase().indexOf(n)&&(this.searchValue=!0,t.push({node:this,elem:\"value\"})),this._updateDomValue()),t}},{key:\"scrollTo\",value:function(e){this.expandPathToNode(),this.dom.tr&&this.dom.tr.parentNode&&this.editor.scrollTo(this.dom.tr.offsetTop,e)}},{key:\"expandPathToNode\",value:function(){for(var e=this;e&&e.parent;){for(var t=\"array\"===e.parent.type?e.index:e.parent.childs.indexOf(e);e.parent.visibleChilds<t+1;)e.parent.visibleChilds+=this.getMaxVisibleChilds();e.parent.expand(!1),e=e.parent}}},{key:\"focus\",value:function(t){if(e.focusElement=t,this.dom.tr&&this.dom.tr.parentNode){var n=this.dom;switch(t){case\"drag\":(n.drag||n.menu).focus();break;case\"menu\":n.menu.focus();break;case\"expand\":this._hasChilds()?n.expand.focus():n.field&&this.fieldEditable?(n.field.focus(),(0,u.selectContentEditable)(n.field)):n.value&&!this._hasChilds()?(n.value.focus(),(0,u.selectContentEditable)(n.value)):n.menu.focus();break;case\"field\":n.field&&this.fieldEditable?(n.field.focus(),(0,u.selectContentEditable)(n.field)):n.value&&!this._hasChilds()?(n.value.focus(),(0,u.selectContentEditable)(n.value)):(this._hasChilds()?n.expand:n.menu).focus();break;case\"value\":default:n.select?n.select.focus():n.value&&!this._hasChilds()?(n.value.focus(),(0,u.selectContentEditable)(n.value)):n.field&&this.fieldEditable?(n.field.focus(),(0,u.selectContentEditable)(n.field)):(this._hasChilds()?n.expand:n.menu).focus()}}}},{key:\"containsNode\",value:function(e){if(this===e)return!0;var t=this.childs;if(t)for(var n=0,r=t.length;n<r;n++)if(t[n].containsNode(e))return!0;return!1}},{key:\"removeChild\",value:function(e,t){if(this.childs){var n=this.childs.indexOf(e);if(-1!==n)return n<this.visibleChilds&&this.expanded&&this.visibleChilds--,e.hide(),delete e.searchField,delete e.searchValue,(n=this.childs.splice(n,1)[0]).parent=null,!1!==t&&this.updateDom({updateIndexes:!0}),n}}},{key:\"_remove\",value:function(e){this.removeChild(e)}},{key:\"changeType\",value:function(e){var t,n=this.type;n!==e&&(\"string\"!==e&&\"auto\"!==e||\"string\"!==n&&\"auto\"!==n?(t=this._detachFromDom(),this.clearDom(),\"object\"===(this.type=e)?(this.childs||(this.childs=[]),this.childs.forEach((function(e){e.clearDom(),delete e.index,e.fieldEditable=!0,void 0===e.field&&(e.field=\"\")})),\"string\"!==n&&\"auto\"!==n||(this.expanded=!0)):\"array\"===e?(this.childs||(this.childs=[]),this.childs.forEach((function(e,t){e.clearDom(),e.fieldEditable=!1,e.index=t})),\"string\"!==n&&\"auto\"!==n||(this.expanded=!0)):this.expanded=!1,this._attachToDom(t)):this.type=e,\"auto\"!==e&&\"string\"!==e||(this.value=\"string\"===e?String(this.value):(0,u.parseString)(String(this.value)),this.focus()),this.updateDom({updateIndexes:!0}))}},{key:\"deepEqual\",value:function(e){var t;if(\"array\"===this.type){if(!Array.isArray(e))return!1;if(this.childs.length!==e.length)return!1;for(t=0;t<this.childs.length;t++)if(!this.childs[t].deepEqual(e[t]))return!1}else if(\"object\"===this.type){if(\"object\"!==b(e)||!e)return!1;var n=Object.keys(e);if(this.childs.length!==n.length)return!1;for(t=0;t<n.length;t++){var r=this.childs[t];if(r.field!==n[t]||!r.deepEqual(e[r.field]))return!1}}else if(this.value!==e)return!1;return!0}},{key:\"_getDomValue\",value:function(){if(this._clearValueError(),this.dom.value&&\"array\"!==this.type&&\"object\"!==this.type&&(this.valueInnerText=(0,u.getInnerText)(this.dom.value),\"\"===this.valueInnerText&&\"\"!==this.dom.value.innerHTML&&(this.dom.value.textContent=\"\")),void 0!==this.valueInnerText)try{var e;(e=\"string\"===this.type?this._unescapeHTML(this.valueInnerText):(e=this._unescapeHTML(this.valueInnerText),(0,u.parseString)(e)))!==this.value&&(this.value=e,this._debouncedOnChangeValue())}catch(e){this._setValueError((0,a.Iu)(\"cannotParseValueError\"))}}},{key:\"_setValueError\",value:function(e){this.valueError={message:e},this.updateError()}},{key:\"_clearValueError\",value:function(){this.valueError&&(this.valueError=null,this.updateError())}},{key:\"_setFieldError\",value:function(e){this.fieldError={message:e},this.updateError()}},{key:\"_clearFieldError\",value:function(){this.fieldError&&(this.fieldError=null,this.updateError())}},{key:\"_onChangeValue\",value:function(){var e=this.editor.getDomSelection();e.range&&(t=(0,u.textDiff)(String(this.value),String(this.previousValue)),e.range.startOffset=t.start,e.range.endOffset=t.end);var t,n=this.editor.getDomSelection();n.range&&(t=(0,u.textDiff)(String(this.previousValue),String(this.value)),n.range.startOffset=t.start,n.range.endOffset=t.end),this.editor._onAction(\"editValue\",{path:this.getInternalPath(),oldValue:this.previousValue,newValue:this.value,oldSelection:e,newSelection:n}),this.previousValue=this.value}},{key:\"_onChangeField\",value:function(){var e=this.editor.getDomSelection(),t=this.previousField||\"\";e.range&&(n=(0,u.textDiff)(this.field,t),e.range.startOffset=n.start,e.range.endOffset=n.end);var n=this.editor.getDomSelection();n.range&&(t=(0,u.textDiff)(t,this.field),n.range.startOffset=t.start,n.range.endOffset=t.end),this.editor._onAction(\"editField\",{parentPath:this.parent.getInternalPath(),index:this.getIndex(),oldValue:this.previousField,newValue:this.field,oldSelection:e,newSelection:n}),this.previousField=this.field}},{key:\"_updateDomValue\",value:function(){var e=this.dom.value;if(e){var t=[\"jsoneditor-value\"],n=this.value,r=\"auto\"===this.type?(0,u.getType)(n):this.type,i=\"string\"===r&&(0,u.isUrl)(n);if(t.push(\"jsoneditor-\"+r),i&&t.push(\"jsoneditor-url\"),\"\"===String(this.value)&&\"array\"!==this.type&&\"object\"!==this.type&&t.push(\"jsoneditor-empty\"),this.searchValueActive&&t.push(\"jsoneditor-highlight-active\"),this.searchValue&&t.push(\"jsoneditor-highlight\"),e.className=t.join(\" \"),e.title=\"array\"===r||\"object\"===r?this.type+\" containing \"+(t=this.childs?this.childs.length:0)+\" items\":i&&this.editable.value?(0,a.Iu)(\"openUrl\"):\"\",\"boolean\"===r&&this.editable.value?(this.dom.checkbox||(this.dom.checkbox=document.createElement(\"input\"),this.dom.checkbox.type=\"checkbox\",this.dom.tdCheckbox=document.createElement(\"td\"),this.dom.tdCheckbox.className=\"jsoneditor-tree\",this.dom.tdCheckbox.appendChild(this.dom.checkbox),this.dom.tdValue.parentNode.insertBefore(this.dom.tdCheckbox,this.dom.tdValue)),this.dom.checkbox.checked=this.value):this.dom.tdCheckbox&&(this.dom.tdCheckbox.parentNode.removeChild(this.dom.tdCheckbox),delete this.dom.tdCheckbox,delete this.dom.checkbox),this.enum&&this.editable.value){if(!this.dom.select){this.dom.select=document.createElement(\"select\"),this.id=this.field+\"_\"+(new Date).getUTCMilliseconds(),this.dom.select.id=this.id,this.dom.select.name=this.dom.select.id;var s=document.createElement(\"option\");s.value=\"\",s.textContent=\"--\",this.dom.select.appendChild(s);for(var o=0;o<this.enum.length;o++){var c=document.createElement(\"option\");c.value=this.enum[o],c.textContent=this.enum[o],this.dom.select.appendChild(c)}this.dom.tdSelect=document.createElement(\"td\"),this.dom.tdSelect.className=\"jsoneditor-tree\",this.dom.tdSelect.appendChild(this.dom.select),this.dom.tdValue.parentNode.insertBefore(this.dom.tdSelect,this.dom.tdValue)}this.dom.select.value=-1!==this.enum.indexOf(this.value)?this.value:\"\",!this.schema||w(this.schema,\"oneOf\")||w(this.schema,\"anyOf\")||w(this.schema,\"allOf\")?delete this.valueFieldHTML:(this.valueFieldHTML=this.dom.tdValue.innerHTML,this.dom.tdValue.style.visibility=\"hidden\",this.dom.tdValue.textContent=\"\")}else this.dom.tdSelect&&(this.dom.tdSelect.parentNode.removeChild(this.dom.tdSelect),delete this.dom.tdSelect,delete this.dom.select,this.dom.tdValue.innerHTML=this.valueFieldHTML,this.dom.tdValue.style.visibility=\"\",delete this.valueFieldHTML);if(this.editable.value&&this.editor.options.colorPicker&&\"string\"==typeof n&&(0,u.isValidColor)(n)?(this.dom.color||(this.dom.color=document.createElement(\"div\"),this.dom.color.className=\"jsoneditor-color\",this.dom.tdColor=document.createElement(\"td\"),this.dom.tdColor.className=\"jsoneditor-tree\",this.dom.tdColor.appendChild(this.dom.color),this.dom.tdValue.parentNode.insertBefore(this.dom.tdColor,this.dom.tdValue)),(0,u.addClassName)(this.dom.value,\"jsoneditor-color-value\"),this.dom.color.style.backgroundColor=n):this._deleteDomColor(),this._showTimestampTag()){if(this.dom.date||(this.dom.date=document.createElement(\"div\"),this.dom.date.className=\"jsoneditor-date\",this.dom.value.parentNode.appendChild(this.dom.date)),s=null,\"function\"==typeof this.editor.options.timestampFormat&&(s=this.editor.options.timestampFormat({field:this.field,value:this.value,path:this.getPath()})),s){for(;this.dom.date.firstChild;)this.dom.date.removeChild(this.dom.date.firstChild);this.dom.date.appendChild(document.createTextNode(s))}else this.dom.date.textContent=new Date(n).toISOString();this.dom.date.title=new Date(n).toString()}else this.dom.date&&(this.dom.date.parentNode.removeChild(this.dom.date),delete this.dom.date);(0,u.stripFormatting)(e),this._updateDomDefault()}}},{key:\"_deleteDomColor\",value:function(){this.dom.color&&(this.dom.tdColor.parentNode.removeChild(this.dom.tdColor),delete this.dom.tdColor,delete this.dom.color,(0,u.removeClassName)(this.dom.value,\"jsoneditor-color-value\"))}},{key:\"_updateDomField\",value:function(){var e,t=this.dom.field;t&&((e=(0,u.makeFieldTooltip)(this.schema,this.editor.options.language))&&(t.title=e),(\"\"===String(this.field)&&this.parent&&\"array\"!==this.parent.type?u.addClassName:u.removeClassName)(t,\"jsoneditor-empty\"),(this.searchFieldActive?u.addClassName:u.removeClassName)(t,\"jsoneditor-highlight-active\"),(this.searchField?u.addClassName:u.removeClassName)(t,\"jsoneditor-highlight\"),(0,u.stripFormatting)(t))}},{key:\"_getDomField\",value:function(e){if(this._clearFieldError(),this.dom.field&&this.fieldEditable&&(this.fieldInnerText=(0,u.getInnerText)(this.dom.field),\"\"===this.fieldInnerText&&\"\"!==this.dom.field.innerHTML&&(this.dom.field.textContent=\"\")),void 0!==this.fieldInnerText)try{var t=this._unescapeHTML(this.fieldInnerText),n=this.parent.getFieldNames(this);-1!==n.indexOf(t)?e?(t=(0,u.findUniqueName)(t,n))!==this.field&&(this.field=t,this._debouncedOnChangeField()):this._setFieldError((0,a.Iu)(\"duplicateFieldError\")):t!==this.field&&(this.field=t,this._debouncedOnChangeField())}catch(e){this._setFieldError((0,a.Iu)(\"cannotParseFieldError\"))}}},{key:\"_updateDomDefault\",value:function(){var e;!this.schema||void 0===this.schema.default||this._hasChilds()||(e=this.dom.select||this.dom.value)&&(this.value===this.schema.default?(e.title=(0,a.Iu)(\"default\"),(0,u.addClassName)(e,\"jsoneditor-is-default\"),(0,u.removeClassName)(e,\"jsoneditor-is-not-default\")):(e.removeAttribute(\"title\"),(0,u.removeClassName)(e,\"jsoneditor-is-default\"),(0,u.addClassName)(e,\"jsoneditor-is-not-default\")))}},{key:\"_showTimestampTag\",value:function(){if(\"number\"!=typeof this.value)return!1;var e=this.editor.options.timestampTag;return\"function\"!=typeof e?!0===e&&(0,u.isTimestamp)(this.field,this.value):\"boolean\"==typeof(e=e({field:this.field,value:this.value,path:this.getPath()}))?e:(0,u.isTimestamp)(this.field,this.value)}},{key:\"clearDom\",value:function(){this.dom={}}},{key:\"getDom\",value:function(){var e,t=this.dom;if(t.tr)return t.tr;this._updateEditability(),t.tr=document.createElement(\"tr\"),\"tree\"===(t.tr.node=this).editor.options.mode&&(e=document.createElement(\"td\"),this.editable.field&&this.parent&&((n=document.createElement(\"button\")).type=\"button\",(t.drag=n).className=\"jsoneditor-button jsoneditor-dragarea\",n.title=(0,a.Iu)(\"drag\"),e.appendChild(n)),t.tr.appendChild(e),n=document.createElement(\"td\"),(e=document.createElement(\"button\")).type=\"button\",(t.menu=e).className=\"jsoneditor-button jsoneditor-contextmenu-button\",e.title=(0,a.Iu)(\"actionsMenu\"),n.appendChild(t.menu),t.tr.appendChild(n));var n=document.createElement(\"td\");return t.tr.appendChild(n),t.tree=this._createDomTree(),n.appendChild(t.tree),this.updateDom({updateIndexes:!0}),t.tr}},{key:\"isVisible\",value:function(){return this.dom&&this.dom.tr&&this.dom.tr.parentNode||!1}},{key:\"isDescendantOf\",value:function(e){for(var t=this.parent;t;){if(t===e)return!0;t=t.parent}return!1}},{key:\"_createDomField\",value:function(){return document.createElement(\"div\")}},{key:\"setHighlight\",value:function(e){this.dom.tr&&((e?u.addClassName:u.removeClassName)(this.dom.tr,\"jsoneditor-highlight\"),this.append&&this.append.setHighlight(e),this.childs&&this.childs.forEach((function(t){t.setHighlight(e)})))}},{key:\"setSelected\",value:function(e,t){this.selected=e,this.dom.tr&&((e?u.addClassName:u.removeClassName)(this.dom.tr,\"jsoneditor-selected\"),(t?u.addClassName:u.removeClassName)(this.dom.tr,\"jsoneditor-first\"),this.append&&this.append.setSelected(e),this.showMore&&this.showMore.setSelected(e),this.childs&&this.childs.forEach((function(t){t.setSelected(e)})))}},{key:\"updateValue\",value:function(e){this.value=e,this.previousValue=e,this.valueError=void 0,this.updateDom()}},{key:\"updateField\",value:function(e){this.field=e,this.previousField=e,this.fieldError=void 0,this.updateDom()}},{key:\"updateDom\",value:function(t){var n=this.dom.tree;n&&(n.style.marginLeft=24*this.getLevel()+\"px\"),(n=this.dom.field)&&(this.fieldEditable?(n.contentEditable=this.editable.field,n.spellcheck=!1,n.className=\"jsoneditor-field\"):(n.contentEditable=!1,n.className=\"jsoneditor-readonly\"),r=void 0!==this.index?this.index:void 0!==this.field?this.field:(r=this.editor.options.schema?e._findSchema(this.editor.options.schema,this.editor.options.schemaRefs||{},this.getPath()):void 0)&&r.title?r.title:this._hasChilds()?this.type:\"\",r=this._escapeHTML(r),document.activeElement===n&&r===this._unescapeHTML((0,u.getInnerText)(n))||(n.innerHTML=r),this._updateSchema());var r=this.dom.value;r&&(\"array\"===this.type||\"object\"===this.type?this.updateNodeName():(i=this._escapeHTML(this.value),document.activeElement===r&&i===this._unescapeHTML((0,u.getInnerText)(r))||(r.innerHTML=i)));var i=this.dom.tr;i&&(\"array\"===this.type||\"object\"===this.type?((0,u.addClassName)(i,\"jsoneditor-expandable\"),this.expanded?((0,u.addClassName)(i,\"jsoneditor-expanded\"),(0,u.removeClassName)(i,\"jsoneditor-collapsed\")):((0,u.addClassName)(i,\"jsoneditor-collapsed\"),(0,u.removeClassName)(i,\"jsoneditor-expanded\"))):((0,u.removeClassName)(i,\"jsoneditor-expandable\"),(0,u.removeClassName)(i,\"jsoneditor-expanded\"),(0,u.removeClassName)(i,\"jsoneditor-collapsed\"))),this._updateDomField(),this._updateDomValue(),t&&!0===t.updateIndexes&&this._updateDomIndexes(),t&&!0===t.recurse&&this.childs&&this.childs.forEach((function(e){e.updateDom(t)})),this.error&&this.updateError(),this.append&&this.append.updateDom(),this.showMore&&this.showMore.updateDom(),this._updateCssClassName()}},{key:\"_updateSchema\",value:function(){this.editor&&this.editor.options&&(this.schema=this.editor.options.schema?e._findSchema(this.editor.options.schema,this.editor.options.schemaRefs||{},this.getPath()):null,this.schema?this.enum=e._findEnum(this.schema):delete this.enum)}},{key:\"_updateDomIndexes\",value:function(){var e=this.childs;this.dom.value&&e&&(\"array\"===this.type?e.forEach((function(e,t){e.index=t,(e=e.dom.field)&&(e.textContent=t)})):\"object\"===this.type&&e.forEach((function(e){void 0!==e.index&&(delete e.index,void 0===e.field&&(e.field=\"\"))})))}},{key:\"_createDomValue\",value:function(){var e;return\"array\"===this.type?(e=document.createElement(\"div\")).textContent=\"[...]\":\"object\"===this.type?(e=document.createElement(\"div\")).textContent=\"{...}\":(!this.editable.value&&(0,u.isUrl)(this.value)?(e=document.createElement(\"a\")).href=this.value:((e=document.createElement(\"div\")).contentEditable=this.editable.value,e.spellcheck=!1),e.innerHTML=this._escapeHTML(this.value)),e}},{key:\"_createDomExpandButton\",value:function(){var e=document.createElement(\"button\");return e.type=\"button\",this._hasChilds()?(e.className=this.expanded?\"jsoneditor-button jsoneditor-expanded\":\"jsoneditor-button jsoneditor-collapsed\",e.title=(0,a.Iu)(\"expandTitle\")):(e.className=\"jsoneditor-button jsoneditor-invisible\",e.title=\"\"),e}},{key:\"_createDomTree\",value:function(){var e=this.dom,t=document.createElement(\"table\"),n=document.createElement(\"tbody\");t.style.borderCollapse=\"collapse\",t.className=\"jsoneditor-values\",t.appendChild(n);var r=document.createElement(\"tr\");return n.appendChild(r),(n=document.createElement(\"td\")).className=\"jsoneditor-tree\",r.appendChild(n),e.expand=this._createDomExpandButton(),n.appendChild(e.expand),e.tdExpand=n,(n=document.createElement(\"td\")).className=\"jsoneditor-tree\",r.appendChild(n),e.field=this._createDomField(),n.appendChild(e.field),e.tdField=n,(n=document.createElement(\"td\")).className=\"jsoneditor-tree\",r.appendChild(n),\"object\"!==this.type&&\"array\"!==this.type&&(n.appendChild(document.createTextNode(\":\")),n.className=\"jsoneditor-separator\"),e.tdSeparator=n,(n=document.createElement(\"td\")).className=\"jsoneditor-tree\",r.appendChild(n),e.value=this._createDomValue(),n.appendChild(e.value),e.tdValue=n,t}},{key:\"onEvent\",value:function(e){var t,n=e.type,r=e.target||e.srcElement,i=this.dom,s=this,o=this._hasChilds();r!==i.drag&&r!==i.menu||(\"mouseover\"===n?this.editor.highlighter.highlight(this):\"mouseout\"===n&&this.editor.highlighter.unhighlight()),\"click\"===n&&r===i.menu&&((t=s.editor.highlighter).highlight(s),t.lock(),(0,u.addClassName)(i.menu,\"jsoneditor-selected\"),this.showContextMenu(i.menu,(function(){(0,u.removeClassName)(i.menu,\"jsoneditor-selected\"),t.unlock(),t.unhighlight()}))),\"click\"===n&&r===i.expand&&o&&this._onExpand(d=e.ctrlKey),\"click\"!==n||e.target!==s.dom.tdColor&&e.target!==s.dom.color||this._showColorPicker(),\"change\"===n&&r===i.checkbox&&(this.dom.value.textContent=String(!this.value),this._getDomValue(),this._updateDomDefault()),\"change\"===n&&r===i.select&&(this.dom.value.innerHTML=this._escapeHTML(i.select.value),this._getDomValue(),this._updateDomValue());var a=i.value;if(r===a)switch(n){case\"blur\":case\"change\":this._getDomValue(),this._clearValueError(),this._updateDomValue();var c=this._escapeHTML(this.value);c!==this._unescapeHTML((0,u.getInnerText)(a))&&(a.innerHTML=c);break;case\"input\":this._getDomValue(),this._updateDomValue();break;case\"keydown\":case\"mousedown\":this.editor.selection=this.editor.getDomSelection();break;case\"click\":e.ctrlKey&&this.editable.value&&(0,u.isUrl)(this.value)&&(e.preventDefault(),window.open(this.value,\"_blank\",\"noopener\"));break;case\"keyup\":this._getDomValue(),this._updateDomValue();break;case\"cut\":case\"paste\":setTimeout((function(){s._getDomValue(),s._updateDomValue()}),1)}var l=i.field;if(r===l)switch(n){case\"blur\":this._getDomField(!0),this._updateDomField();var h=this._escapeHTML(this.field);h!==this._unescapeHTML((0,u.getInnerText)(l))&&(l.innerHTML=h);break;case\"input\":this._getDomField(),this._updateSchema(),this._updateDomField(),this._updateDomValue();break;case\"keydown\":case\"mousedown\":this.editor.selection=this.editor.getDomSelection();break;case\"keyup\":this._getDomField(),this._updateDomField();break;case\"cut\":case\"paste\":setTimeout((function(){s._getDomField(),s._updateDomField()}),1)}var d=i.tree;d&&r===d.parentNode&&\"click\"===n&&!e.hasMoved&&((void 0!==e.offsetX?e.offsetX<24*(this.getLevel()+1):e.pageX<(0,u.getAbsoluteLeft)(i.tdSeparator))||o?l&&((0,u.setEndOfContentEditable)(l),l.focus()):a&&!this.enum&&((0,u.setEndOfContentEditable)(a),a.focus())),(r!==i.tdExpand||o)&&r!==i.tdField&&r!==i.tdSeparator||\"click\"!==n||e.hasMoved||l&&((0,u.setEndOfContentEditable)(l),l.focus()),\"keydown\"===n&&this.onKeyDown(e),\"function\"==typeof this.editor.options.onEvent&&this._onEvent(e)}},{key:\"_onEvent\",value:function(e){var t=(n=e.target)===this.dom.field,n=n===this.dom.value||n===this.dom.checkbox||n===this.dom.select;(t||n)&&(t={field:this.getField(),path:this.getPath()},n&&!this._hasChilds()&&(t.value=this.getValue()),this.editor.options.onEvent(t,e))}},{key:\"onKeyDown\",value:function(t){var n,r,i,s,o,a,c,l,h,d,f,g,p,m,C,b,v,I=t.which||t.keyCode,A=t.target||t.srcElement,w=t.ctrlKey,x=t.shiftKey,E=t.altKey,k=!1,_=\"tree\"===this.editor.options.mode,T=0<this.editor.multiselection.nodes.length?this.editor.multiselection.nodes:[this],R=T[0],B=T[T.length-1];13===I?A===this.dom.value?this.editable.value&&!t.ctrlKey||(0,u.isUrl)(this.value)&&(window.open(this.value,\"_blank\",\"noopener\"),k=!0):A===this.dom.expand&&this._hasChilds()&&(this._onExpand(g=t.ctrlKey),A.focus(),k=!0):68===I?w&&_&&(e.onDuplicate(T),k=!0):69===I?w&&(this._onExpand(x),A.focus(),k=!0):77===I&&_?w&&(this.showContextMenu(A),k=!0):46===I&&_?w&&(e.onRemove(T),k=!0):45===I&&_?w&&!x?(this._onInsertBefore(),k=!0):w&&x&&(this._onInsertAfter(),k=!0):35===I?E&&((g=this._lastNode())&&g.focus(e.focusElement||this._getElementName(A)),k=!0):36===I?E&&((p=this._firstNode())&&p.focus(e.focusElement||this._getElementName(A)),k=!0):37===I?E&&!x?((p=this._previousElement(A))&&this.focus(this._getElementName(p)),k=!0):E&&x&&_&&(m=B.expanded?(m=B.getAppendDom())?m.nextSibling:void 0:B.getDom().nextSibling)&&(r=e.getNodeFromTarget(m),C=e.getNodeFromTarget(m=m.nextSibling),r&&r instanceof S&&1!==B.parent.childs.length&&C&&C.parent&&(i=this.editor.getDomSelection(),s=(o=R.parent).childs[B.getIndex()+1]||o.append,a=R.getIndex(),c=C.getIndex(),l=o.getInternalPath(),h=C.parent.getInternalPath(),T.forEach((function(e){C.parent.moveBefore(e,C)})),this.focus(e.focusElement||this._getElementName(A)),this.editor._onAction(\"moveNodes\",{count:T.length,fieldNames:T.map(y),oldParentPath:o.getInternalPath(),newParentPath:R.parent.getInternalPath(),oldIndex:s.getIndex(),newIndex:R.getIndex(),oldIndexRedo:a,newIndexRedo:c,oldParentPathRedo:l,newParentPathRedo:h,oldSelection:i,newSelection:this.editor.getDomSelection()}))):38===I?E&&!x?((n=this._previousNode())&&(this.editor.deselect(!0),n.focus(e.focusElement||this._getElementName(A))),k=!0):!E&&w&&x&&_?((n=this._previousNode())&&((f=this.editor.multiselection).start=f.start||this,f.end=n,d=this.editor._findTopLevelNodes(f.start,f.end),this.editor.select(d),n.focus(\"field\")),k=!0):E&&x&&_&&((n=R._previousNode())&&n.parent&&(i=this.editor.getDomSelection(),s=(o=R.parent).childs[B.getIndex()+1]||o.append,a=R.getIndex(),c=n.getIndex(),l=o.getInternalPath(),h=n.parent.getInternalPath(),T.forEach((function(e){n.parent.moveBefore(e,n)})),this.focus(e.focusElement||this._getElementName(A)),this.editor._onAction(\"moveNodes\",{count:T.length,fieldNames:T.map(y),oldParentPath:o.getInternalPath(),newParentPath:R.parent.getInternalPath(),oldIndex:s.getIndex(),newIndex:R.getIndex(),oldIndexRedo:a,newIndexRedo:c,oldParentPathRedo:l,newParentPathRedo:h,oldSelection:i,newSelection:this.editor.getDomSelection()})),k=!0):39===I?E&&!x?((b=this._nextElement(A))&&this.focus(this._getElementName(b)),k=!0):E&&x&&_&&(b=R.getDom().previousSibling)&&(n=e.getNodeFromTarget(b))&&n.parent&&!n.isVisible()&&(i=this.editor.getDomSelection(),s=(o=R.parent).childs[B.getIndex()+1]||o.append,a=R.getIndex(),c=n.getIndex(),l=o.getInternalPath(),h=n.parent.getInternalPath(),T.forEach((function(e){n.parent.moveBefore(e,n)})),this.focus(e.focusElement||this._getElementName(A)),this.editor._onAction(\"moveNodes\",{count:T.length,fieldNames:T.map(y),oldParentPath:o.getInternalPath(),newParentPath:R.parent.getInternalPath(),oldIndex:s.getIndex(),newIndex:R.getIndex(),oldIndexRedo:a,newIndexRedo:c,oldParentPathRedo:l,newParentPathRedo:h,oldSelection:i,newSelection:this.editor.getDomSelection()})):40===I&&(E&&!x?((r=this._nextNode())&&(this.editor.deselect(!0),r.focus(e.focusElement||this._getElementName(A))),k=!0):!E&&w&&x&&_?((r=this._nextNode())&&((f=this.editor.multiselection).start=f.start||this,f.end=r,d=this.editor._findTopLevelNodes(f.start,f.end),this.editor.select(d),r.focus(\"field\")),k=!0):E&&x&&_&&((r=B.expanded?B.append?B.append._nextNode():void 0:B._nextNode())&&!r.isVisible()&&(r=r.parent.showMore),r&&r instanceof S&&(r=B),(v=r&&(r._nextNode()||r.parent.append))&&v.parent&&(i=this.editor.getDomSelection(),s=(o=R.parent).childs[B.getIndex()+1]||o.append,a=R.getIndex(),c=v.getIndex(),l=o.getInternalPath(),h=v.parent.getInternalPath(),T.forEach((function(e){v.parent.moveBefore(e,v)})),this.focus(e.focusElement||this._getElementName(A)),this.editor._onAction(\"moveNodes\",{count:T.length,fieldNames:T.map(y),oldParentPath:o.getInternalPath(),newParentPath:R.parent.getInternalPath(),oldParentPathRedo:l,newParentPathRedo:h,oldIndexRedo:a,newIndexRedo:c,oldIndex:s.getIndex(),newIndex:R.getIndex(),oldSelection:i,newSelection:this.editor.getDomSelection()})),k=!0)),k&&(t.preventDefault(),t.stopPropagation())}},{key:\"_onExpand\",value:function(e){var t,n,r;e&&(r=(n=(t=this.dom.tr.parentNode).parentNode).scrollTop,n.removeChild(t)),this.expanded?this.collapse(e):this.expand(e),e&&(n.appendChild(t),n.scrollTop=r)}},{key:\"_showColorPicker\",value:function(){var e,t;\"function\"==typeof this.editor.options.onColorPicker&&this.dom.color&&((e=this)._deleteDomColor(),e.updateDom(),t=(0,d.w)(this.dom.color,this.editor.getPopupAnchor()),this.editor.options.onColorPicker(t,this.value,(function(t){\"string\"==typeof t&&t!==e.value&&(e._deleteDomColor(),e.value=t,e.updateDom(),e._debouncedOnChangeValue())})))}},{key:\"getFieldNames\",value:function(e){return\"object\"===this.type?this.childs.filter((function(t){return t!==e})).map((function(e){return e.field})):[]}},{key:\"_onInsertBefore\",value:function(t,n,r){var i=this.editor.getDomSelection();(t=new e(this.editor,{field:void 0!==t?t:\"\",value:void 0!==n?n:\"\",type:r})).expand(!0),n=this.getInternalPath(),this.parent.insertBefore(t,this),this.editor.highlighter.unhighlight(),t.focus(\"field\"),r=this.editor.getDomSelection(),this.editor._onAction(\"insertBeforeNodes\",{nodes:[t],paths:[t.getInternalPath()],beforePath:n,parentPath:this.parent.getInternalPath(),oldSelection:i,newSelection:r})}},{key:\"_onInsertAfter\",value:function(t,n,r){var i=this.editor.getDomSelection();(n=new e(this.editor,{field:void 0!==t?t:\"\",value:void 0!==n?n:\"\",type:r})).expand(!0),this.parent.insertAfter(n,this),this.editor.highlighter.unhighlight(),n.focus(\"field\"),r=this.editor.getDomSelection(),this.editor._onAction(\"insertAfterNodes\",{nodes:[n],paths:[n.getInternalPath()],afterPath:this.getInternalPath(),parentPath:this.parent.getInternalPath(),oldSelection:i,newSelection:r})}},{key:\"_onAppend\",value:function(t,n,r){var i=this.editor.getDomSelection();(n=new e(this.editor,{field:void 0!==t?t:\"\",value:void 0!==n?n:\"\",type:r})).expand(!0),this.parent.appendChild(n),this.editor.highlighter.unhighlight(),n.focus(\"field\"),r=this.editor.getDomSelection(),this.editor._onAction(\"appendNodes\",{nodes:[n],paths:[n.getInternalPath()],parentPath:this.parent.getInternalPath(),oldSelection:i,newSelection:r})}},{key:\"_onChangeType\",value:function(e){var t,n,r=this.type;e!==r&&(t=this.editor.getDomSelection(),this.changeType(e),n=this.editor.getDomSelection(),this.editor._onAction(\"changeType\",{path:this.getInternalPath(),oldType:r,newType:e,oldSelection:t,newSelection:n}))}},{key:\"sort\",value:function(e,t){var n,r,i=!(2<arguments.length&&void 0!==arguments[2])||arguments[2];\"string\"==typeof e&&(e=(0,u.parsePath)(e)),this._hasChilds()&&(this.hideChilds(),n=this.childs,this.childs=this.childs.concat(),r=\"desc\"===t?-1:1,this.childs.sort(\"object\"===this.type?function(e,t){return r*h()(e.field,t.field)}:function(t,n){return t=t.getNestedChild(e),n=n.getNestedChild(e),t?n?(n=n.value,\"string\"!=typeof(t=t.value)&&\"string\"!=typeof n?n<t?r:t<n?-r:0:r*h()(t,n)):-r:r}),this._updateDomIndexes(),this.showChilds(),!0===i&&this.editor._onAction(\"sort\",{path:this.getInternalPath(),oldChilds:n,newChilds:this.childs}))}},{key:\"update\",value:function(e){var t=this.getInternalValue();this.setValue(e),this.editor._onAction(\"transform\",{path:this.getInternalPath(),oldValue:t,newValue:this.getInternalValue()})}},{key:\"_detachFromDom\",value:function(){var e=this.dom.tr?this.dom.tr.parentNode:void 0,t=(t=this.expanded?this.getAppendDom():this.getDom())&&t.parentNode?t.nextSibling:void 0;return this.hide({resetVisibleChilds:!1}),{table:e,nextTr:t}}},{key:\"_attachToDom\",value:function(e){e.table&&(e.nextTr?e.table.insertBefore(this.getDom(),e.nextTr):e.table.appendChild(this.getDom())),this.expanded&&this.showChilds()}},{key:\"transform\",value:function(e){if(this._hasChilds()){this.hideChilds();try{var t=this.getInternalValue(),n=this.getValue();n=this.editor.options.executeQuery(n,e),this.setValue(n),n=this.getInternalValue(),this.editor._onAction(\"transform\",{path:this.getInternalPath(),oldValue:t,newValue:n}),this.showChilds()}catch(e){this.showChilds(),this.editor._onError(e)}}}},{key:\"extract\",value:function(){this.editor.node.hideChilds(),this.hideChilds();try{var e=this.editor.node.getInternalValue();this.editor._setRoot(this);var t=this.editor.node.getInternalValue();this.editor._onAction(\"transform\",{path:this.editor.node.getInternalPath(),oldValue:e,newValue:t})}catch(e){this.editor._onError(e)}finally{this.updateDom({recurse:!0}),this.showChilds()}}},{key:\"getNestedChild\",value:function(e){for(var t=0,n=this;n&&t<e.length;)n=n.findChildByProperty(e[t]),t++;return n}},{key:\"findChildByProperty\",value:function(e){if(\"object\"===this.type)return this.childs.find((function(t){return t.field===e}))}},{key:\"getAppendDom\",value:function(){return this.append||(this.append=new S(this.editor),this.append.setParent(this)),this.append.getDom()}},{key:\"getShowMoreDom\",value:function(){return this.showMore||(this.showMore=new E(this.editor,this)),this.showMore.getDom()}},{key:\"nextSibling\",value:function(){var e=this.parent.childs.indexOf(this);return this.parent.childs[e+1]||this.parent.append}},{key:\"_previousNode\",value:function(){var t=null,n=this.getDom();if(n&&n.parentNode)for(var r=n;t=e.getNodeFromTarget(r=r.previousSibling),r&&t&&t instanceof S&&!t.isVisible(););return t}},{key:\"_nextNode\",value:function(){var t=null,n=this.getDom();if(n&&n.parentNode)for(var r=n;t=e.getNodeFromTarget(r=r.nextSibling),r&&t&&t instanceof S&&!t.isVisible(););return t}},{key:\"_firstNode\",value:function(){var t=null,n=this.getDom();return n&&n.parentNode&&(t=e.getNodeFromTarget(n=n.parentNode.firstChild)),t}},{key:\"_lastNode\",value:function(){var t=null,n=this.getDom();if(n&&n.parentNode){var r=n.parentNode.lastChild;for(t=e.getNodeFromTarget(r);r&&t&&!t.isVisible();)t=e.getNodeFromTarget(r=r.previousSibling)}return t}},{key:\"_previousElement\",value:function(e){var t=this.dom;switch(e){case t.value:if(this.fieldEditable)return t.field;case t.field:if(this._hasChilds())return t.expand;case t.expand:return t.menu;case t.menu:if(t.drag)return t.drag;default:return null}}},{key:\"_nextElement\",value:function(e){var t=this.dom;switch(e){case t.drag:return t.menu;case t.menu:if(this._hasChilds())return t.expand;case t.expand:if(this.fieldEditable)return t.field;case t.field:if(!this._hasChilds())return t.value;default:return null}}},{key:\"_getElementName\",value:function(e){var t=this;return Object.keys(this.dom).find((function(n){return t.dom[n]===e}))}},{key:\"_hasChilds\",value:function(){return\"array\"===this.type||\"object\"===this.type}},{key:\"addTemplates\",value:function(e,t){var n=this,r=n.editor.options.templates;null!=r&&(r.length&&e.push({type:\"separator\"}),r.forEach((function(r){e.push({text:r.text,className:r.className||\"jsoneditor-type-object\",title:r.title,click:(t?function(e,t){n._onAppend(e,t)}:function(e,t){n._onInsertBefore(e,t)}).bind(this,r.field,r.value)})})))}},{key:\"showContextMenu\",value:function(t,n){var r,s,o=this,c=[];this.editable.value&&c.push({text:(0,a.Iu)(\"type\"),title:(0,a.Iu)(\"typeTitle\"),className:\"jsoneditor-type-\"+this.type,submenu:[{text:(0,a.Iu)(\"auto\"),className:\"jsoneditor-type-auto\"+(\"auto\"===this.type?\" jsoneditor-selected\":\"\"),title:(0,a.Iu)(\"autoType\"),click:function(){o._onChangeType(\"auto\")}},{text:(0,a.Iu)(\"array\"),className:\"jsoneditor-type-array\"+(\"array\"===this.type?\" jsoneditor-selected\":\"\"),title:(0,a.Iu)(\"arrayType\"),click:function(){o._onChangeType(\"array\")}},{text:(0,a.Iu)(\"object\"),className:\"jsoneditor-type-object\"+(\"object\"===this.type?\" jsoneditor-selected\":\"\"),title:(0,a.Iu)(\"objectType\"),click:function(){o._onChangeType(\"object\")}},{text:(0,a.Iu)(\"string\"),className:\"jsoneditor-type-string\"+(\"string\"===this.type?\" jsoneditor-selected\":\"\"),title:(0,a.Iu)(\"stringType\"),click:function(){o._onChangeType(\"string\")}}]}),this._hasChilds()&&(this.editor.options.enableSort&&c.push({text:(0,a.Iu)(\"sort\"),title:(0,a.Iu)(\"sortTitle\",{type:this.type}),className:\"jsoneditor-sort-asc\",click:function(){o.showSortModal()}}),this.editor.options.enableTransform&&c.push({text:(0,a.Iu)(\"transform\"),title:(0,a.Iu)(\"transformTitle\",{type:this.type}),className:\"jsoneditor-transform\",click:function(){o.showTransformModal()}}),this.parent&&c.push({text:(0,a.Iu)(\"extract\"),title:(0,a.Iu)(\"extractTitle\",{type:this.type}),className:\"jsoneditor-extract\",click:function(){o.extract()}})),this.parent&&this.parent._hasChilds()&&(c.length&&c.push({type:\"separator\"}),o===(r=o.parent.childs)[r.length-1]&&(s=[{text:(0,a.Iu)(\"auto\"),className:\"jsoneditor-type-auto\",title:(0,a.Iu)(\"autoType\"),click:function(){o._onAppend(\"\",\"\",\"auto\")}},{text:(0,a.Iu)(\"array\"),className:\"jsoneditor-type-array\",title:(0,a.Iu)(\"arrayType\"),click:function(){o._onAppend(\"\",[])}},{text:(0,a.Iu)(\"object\"),className:\"jsoneditor-type-object\",title:(0,a.Iu)(\"objectType\"),click:function(){o._onAppend(\"\",{})}},{text:(0,a.Iu)(\"string\"),className:\"jsoneditor-type-string\",title:(0,a.Iu)(\"stringType\"),click:function(){o._onAppend(\"\",\"\",\"string\")}}],o.addTemplates(s,!0),c.push({text:(0,a.Iu)(\"appendText\"),title:(0,a.Iu)(\"appendTitle\"),submenuTitle:(0,a.Iu)(\"appendSubmenuTitle\"),className:\"jsoneditor-append\",click:function(){o._onAppend(\"\",\"\",\"auto\")},submenu:s})),s=[{text:(0,a.Iu)(\"auto\"),className:\"jsoneditor-type-auto\",title:(0,a.Iu)(\"autoType\"),click:function(){o._onInsertBefore(\"\",\"\",\"auto\")}},{text:(0,a.Iu)(\"array\"),className:\"jsoneditor-type-array\",title:(0,a.Iu)(\"arrayType\"),click:function(){o._onInsertBefore(\"\",[])}},{text:(0,a.Iu)(\"object\"),className:\"jsoneditor-type-object\",title:(0,a.Iu)(\"objectType\"),click:function(){o._onInsertBefore(\"\",{})}},{text:(0,a.Iu)(\"string\"),className:\"jsoneditor-type-string\",title:(0,a.Iu)(\"stringType\"),click:function(){o._onInsertBefore(\"\",\"\",\"string\")}}],o.addTemplates(s,!1),c.push({text:(0,a.Iu)(\"insert\"),title:(0,a.Iu)(\"insertTitle\"),submenuTitle:(0,a.Iu)(\"insertSub\"),className:\"jsoneditor-insert\",click:function(){o._onInsertBefore(\"\",\"\",\"auto\")},submenu:s}),this.editable.field&&(c.push({text:(0,a.Iu)(\"duplicateText\"),title:(0,a.Iu)(\"duplicateField\"),className:\"jsoneditor-duplicate\",click:function(){e.onDuplicate(o)}}),c.push({text:(0,a.Iu)(\"removeText\"),title:(0,a.Iu)(\"removeField\"),className:\"jsoneditor-remove\",click:function(){e.onRemove(o)}}))),this.editor.options.onCreateMenu&&(s=o.getPath(),c=this.editor.options.onCreateMenu(c,{type:\"single\",path:s,paths:[s]})),new i.x(c,{close:n}).show(t,this.editor.getPopupAnchor())}},{key:\"showSortModal\",value:function(){var e=this,t=this.editor.options.modalAnchor||p.qD,n=this.getValue();(0,f.showSortModal)(t,n,(function(t){var n=(0,u.parsePath)(n=t.path);e.sortedBy=t,e.sort(n,t.direction)}),e.sortedBy)}},{key:\"showTransformModal\",value:function(){var e=this,t=(s=this.editor.options).modalAnchor,n=s.createQuery,r=s.executeQuery,i=s.queryDescription,s=this.getValue();(0,g.showTransformModal)({container:t||p.qD,json:s,queryDescription:i,createQuery:n,executeQuery:r,onTransform:function(t){e.transform(t)}})}},{key:\"_getType\",value:function(e){return e instanceof Array?\"array\":e instanceof Object?\"object\":\"string\"==typeof e&&\"string\"!=typeof(0,u.parseString)(e)?\"string\":\"auto\"}},{key:\"_escapeHTML\",value:function(e){return\"string\"!=typeof e?String(e):(e=String(e).replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/ {2}/g,\" &nbsp;\").replace(/^ /,\"&nbsp;\").replace(/ $/,\"&nbsp;\"),e=(e=JSON.stringify(e)).substring(1,e.length-1),!0===this.editor.options.escapeUnicode&&(e=(0,u.escapeUnicodeChars)(e)),e)}},{key:\"_unescapeHTML\",value:function(e){return e='\"'+this._escapeJSON(e)+'\"',(0,u.parse)(e).replace(/&lt;/g,\"<\").replace(/&gt;/g,\">\").replace(/&nbsp;|\\u00A0/g,\" \").replace(/&amp;/g,\"&\")}},{key:\"_escapeJSON\",value:function(e){for(var t=\"\",n=0;n<e.length;){var r=e.charAt(n);\"\\n\"===r?t+=\"\\\\n\":\"\\\\\"===r?(t+=r,n++,\"\"!==(r=e.charAt(n))&&-1!=='\"\\\\/bfnrtu'.indexOf(r)||(t+=\"\\\\\"),t+=r):t+='\"'===r?'\\\\\"':r,n++}return t}},{key:\"updateNodeName\",value:function(){var e,t=this.childs?this.childs.length:0;if(\"object\"===this.type||\"array\"===this.type){if(this.editor.options.onNodeName)try{e=this.editor.options.onNodeName({path:this.getPath(),size:t,type:this.type})}catch(e){console.error(\"Error in onNodeName callback: \",e)}this.dom.value.textContent=\"object\"===this.type?\"{\"+(e||t)+\"}\":\"[\"+(e||t)+\"]\"}}},{key:\"recursivelyUpdateNodeName\",value:function(){if(this.expanded&&(this.updateNodeName(),\"undefined\"!==this.childs))for(var e in this.childs)this.childs[e].recursivelyUpdateNodeName()}}])&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(e.prototype,t),e}();v.prototype.DEBOUNCE_INTERVAL=150,v.prototype.MAX_SEARCH_RESULTS=999;var I=100;function A(e){return e.getInternalPath()}function y(e){return e.getField()}function w(e,t){return Object.prototype.hasOwnProperty.call(e,t)}v.focusElement=void 0,v.select=function(e){setTimeout((function(){(0,u.selectContentEditable)(e)}),0)},v.onDragStart=function(e,t){if(!Array.isArray(e))return v.onDragStart([e],t);var n,r,i,s,o;0!==e.length&&(r=e[e.length-1],i=(n=e[0]).parent,o=v.getNodeFromTarget(t.target),s=n.editor,o=(0,u.getAbsoluteTop)(o.dom.tr)-(0,u.getAbsoluteTop)(n.dom.tr),s.mousemove||(s.mousemove=(0,u.addEventListener)(t.view,\"mousemove\",(function(t){v.onDrag(e,t)}))),s.mouseup||(s.mouseup=(0,u.addEventListener)(t.view,\"mouseup\",(function(t){v.onDragEnd(e,t)}))),s.highlighter.lock(),s.drag={oldCursor:document.body.style.cursor,oldSelection:s.getDomSelection(),oldPaths:e.map(A),oldParent:i,oldNextNode:i.childs[r.getIndex()+1]||i.append,oldParentPathRedo:i.getInternalPath(),oldIndexRedo:n.getIndex(),mouseX:t.pageX,offsetY:o,level:n.getLevel()},document.body.style.cursor=\"move\",t.preventDefault())},v.onDrag=function(e,t){if(!Array.isArray(e))return v.onDrag([e],t);if(0!==e.length){var n,r,i,s,o,a,c=e[0].editor,l=t.pageY-c.drag.offsetY,h=t.pageX,d=!1,f=e[0],g=f.dom.tr,p=(0,u.getAbsoluteTop)(g),m=g.offsetHeight;if(l<p){for(y=g;r=v.getNodeFromTarget(y=y.previousSibling),s=y?(0,u.getAbsoluteTop)(y):0,y&&l<s;);r&&!r.parent&&(r=void 0),r||(y=(C=g.parentNode.firstChild)?C.nextSibling:void 0,(r=v.getNodeFromTarget(y))===f&&(r=void 0)),r&&r.isVisible()&&(s=(y=r.dom.tr)?(0,u.getAbsoluteTop)(y):0)+m<l&&(r=void 0),!r||!1!==c.options.limitDragging&&r.parent!==e[0].parent||(e.forEach((function(e){r.parent.moveBefore(e,r)})),d=!0)}else{var C,b=e[e.length-1];if(m=(C=b.expanded&&b.append?b.append.getDom():b.dom.tr)?C.nextSibling:void 0){for(o=(0,u.getAbsoluteTop)(m),n=m;i=v.getNodeFromTarget(n),n&&(a=n.nextSibling?(0,u.getAbsoluteTop)(n.nextSibling):0,a=n?a-o:0,i&&i.parent.childs.length===e.length&&i.parent.childs[e.length-1]===b&&(p+=27),n=n.nextSibling),n&&p+a<l;);if(i&&i.parent){m=h-c.drag.mouseX,m=Math.round(m/24/2);for(var I=c.drag.level+m,A=i.getLevel(),y=i.dom.tr&&i.dom.tr.previousSibling;A<I&&y;){r=v.getNodeFromTarget(y);var w=e.some((function(e){return e===r||r.isDescendantOf(e)}));if(!w){if(!(r instanceof S))break;if((w=r.parent.childs).length===e.length&&w[e.length-1]===b)break;A=(i=v.getNodeFromTarget(y)).getLevel()}y=y.previousSibling}i instanceof S&&!i.isVisible()&&i.parent.showMore.isVisible()&&(i=i._nextNode()),i&&(!1===c.options.limitDragging||i.parent===e[0].parent)&&i.dom.tr&&i.dom.tr!==C.nextSibling&&(e.forEach((function(e){i.parent.moveBefore(e,i)})),d=!0)}}}d&&(c.drag.mouseX=h,c.drag.level=f.getLevel()),c.startAutoScroll(l),t.preventDefault()}},v.onDragEnd=function(e,t){if(!Array.isArray(e))return v.onDrag([e],t);var n,r,i,s,o,a,c,l,h;0!==e.length&&(n=(h=e[0]).editor,e[0]&&e[0].dom.menu.focus(),r=n.drag.oldParent.getInternalPath(),i=h.parent.getInternalPath(),s=n.drag.oldParent===h.parent,o=n.drag.oldNextNode.getIndex(),a=h.getIndex(),c=n.drag.oldParentPathRedo,l=n.drag.oldIndexRedo,h=s&&l<a?a+e.length:a,s&&l===a||n._onAction(\"moveNodes\",{count:e.length,fieldNames:e.map(y),oldParentPath:r,newParentPath:i,oldIndex:o,newIndex:a,oldIndexRedo:l,newIndexRedo:h,oldParentPathRedo:c,newParentPathRedo:null,oldSelection:n.drag.oldSelection,newSelection:n.getDomSelection()}),document.body.style.cursor=n.drag.oldCursor,n.highlighter.unlock(),e.forEach((function(e){e.updateDom(),t.target!==e.dom.drag&&t.target!==e.dom.menu&&n.highlighter.unhighlight()})),delete n.drag,n.mousemove&&((0,u.removeEventListener)(t.view,\"mousemove\",n.mousemove),delete n.mousemove),n.mouseup&&((0,u.removeEventListener)(t.view,\"mouseup\",n.mouseup),delete n.mouseup),n.stopAutoScroll(),t.preventDefault())},v._findEnum=function(e){return e.enum?e.enum:(e=e.oneOf||e.anyOf||e.allOf)&&0<(e=e.filter((function(e){return e.enum}))).length?e[0].enum:null},v._findSchema=function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:e,i=n.slice(1,n.length),s=n[0],o=m(r.oneOf||r.anyOf||r.allOf||[r]);try{for(o.s();!(c=o.n()).done;){if(\"$ref\"in(r=c.value)&&\"string\"==typeof r.$ref){var a=r.$ref;if(a in t)r=t[a];else{if(!a.startsWith(\"#/\"))throw Error(\"Unable to resolve reference \".concat(a));var c=a.substring(2).split(\"/\"),l=(r=e,m(c));try{for(l.s();!(h=l.n()).done;){var h=h.value;if(!(h in r))throw Error(\"Unable to resovle reference \".concat(a));r=r[h]}}catch(e){l.e(e)}finally{l.f()}}}if(void 0===s)return r;if(\"string\"!=typeof s){if(\"number\"==typeof s&&\"object\"===b(r.items)&&null!==r.items)return v._findSchema(e,t,i,r=r.items)}else{if(\"object\"===b(r.properties)&&null!==r.properties&&s in r.properties)return v._findSchema(e,t,i,r=r.properties[s]);if(\"object\"===b(r.patternProperties)&&null!==r.patternProperties)for(var d in r.patternProperties)if(s.match(d))return v._findSchema(e,t,i,r=r.patternProperties[d]);if(\"object\"===b(r.additionalProperties))return v._findSchema(e,t,i,r=r.additionalProperties)}}}catch(e){o.e(e)}finally{o.f()}return null},v.onRemove=function(e){if(!Array.isArray(e))return v.onRemove([e]);var t,n,r,i,s,o;e&&0<e.length&&(t=(o=e[0]).parent,n=o.editor,r=o.getIndex(),n.highlighter.unhighlight(),i=n.getDomSelection(),v.blurNodes(e),s=n.getDomSelection(),o=e.map(A),e.forEach((function(e){e.parent._remove(e)})),n._onAction(\"removeNodes\",{nodes:e,paths:o,parentPath:t.getInternalPath(),index:r,oldSelection:i,newSelection:s}))},v.onDuplicate=function(e){if(!Array.isArray(e))return v.onDuplicate([e]);var t,n,r,i,s,o,a;e&&0<e.length&&(n=(t=e[e.length-1]).parent,(r=t.editor).deselect(r.multiselection.nodes),i=r.getDomSelection(),s=t,o=e.map((function(e){var t,r=e.clone();return\"object\"===e.parent.type&&(t=e.parent.getFieldNames(),r.field=(0,u.findUniqueName)(e.field,t)),n.insertAfter(r,s),s=r})),1===e.length?\"object\"===o[0].parent.type?(o[0].dom.field.innerHTML=e[0]._escapeHTML(e[0].field),o[0].focus(\"field\")):o[0].focus():r.select(o),a=r.getDomSelection(),r._onAction(\"duplicateNodes\",{paths:e.map(A),clonePaths:o.map(A),afterPath:t.getInternalPath(),parentPath:n.getInternalPath(),oldSelection:i,newSelection:a}))},v.getNodeFromTarget=function(e){for(;e;){if(e.node)return e.node;e=e.parentNode}},v.targetIsColorPicker=function(e){var t=v.getNodeFromTarget(e);if(t)for(var n=e&&e.parentNode;n;){if(n===t.dom.color)return!0;n=n.parentNode}return!1},v.blurNodes=function(e){var t,n;Array.isArray(e)?(t=(n=e[0]).parent,n=n.getIndex(),(t.childs[n+e.length]?t.childs[n+e.length]:t.childs[n-1]||t).focus()):v.blurNodes([e])};var S=((x.prototype=new v).getDom=function(){var e=this.dom;if(e.tr)return e.tr;this._updateEditability();var t=document.createElement(\"tr\");t.className=\"jsoneditor-append\",t.node=this,e.tr=t,\"tree\"===this.editor.options.mode&&(e.tdDrag=document.createElement(\"td\"),r=document.createElement(\"td\"),e.tdMenu=r,(n=document.createElement(\"button\")).type=\"button\",n.className=\"jsoneditor-button jsoneditor-contextmenu-button\",n.title=\"Click to open the actions menu (Ctrl+M)\",e.menu=n,r.appendChild(e.menu));var n=document.createElement(\"td\"),r=document.createElement(\"div\");return r.appendChild(document.createTextNode(\"(\"+(0,a.Iu)(\"empty\")+\")\")),r.className=\"jsoneditor-readonly\",n.appendChild(r),e.td=n,e.text=r,this.updateDom(),t},x.prototype.getPath=function(){return null},x.prototype.getIndex=function(){return null},x.prototype.updateDom=function(e){var t=this.dom,n=t.td;n&&(n.style.paddingLeft=24*this.getLevel()+26+\"px\");var r=t.text;r&&(r.firstChild.nodeValue=\"(\"+(0,a.Iu)(\"empty\")+\" \"+this.parent.type+\")\"),r=t.tr,this.isVisible()?t.tr.firstChild||(t.tdDrag&&r.appendChild(t.tdDrag),t.tdMenu&&r.appendChild(t.tdMenu),r.appendChild(n)):t.tr.firstChild&&(t.tdDrag&&r.removeChild(t.tdDrag),t.tdMenu&&r.removeChild(t.tdMenu),r.removeChild(n))},x.prototype.isVisible=function(){return 0===this.parent.childs.length},x.prototype.showContextMenu=function(e,t){var n=this,r=[{text:(0,a.Iu)(\"auto\"),className:\"jsoneditor-type-auto\",title:(0,a.Iu)(\"autoType\"),click:function(){n._onAppend(\"\",\"\",\"auto\")}},{text:(0,a.Iu)(\"array\"),className:\"jsoneditor-type-array\",title:(0,a.Iu)(\"arrayType\"),click:function(){n._onAppend(\"\",[])}},{text:(0,a.Iu)(\"object\"),className:\"jsoneditor-type-object\",title:(0,a.Iu)(\"objectType\"),click:function(){n._onAppend(\"\",{})}},{text:(0,a.Iu)(\"string\"),className:\"jsoneditor-type-string\",title:(0,a.Iu)(\"stringType\"),click:function(){n._onAppend(\"\",\"\",\"string\")}}];n.addTemplates(r,!0);var s=[{text:(0,a.Iu)(\"appendText\"),title:(0,a.Iu)(\"appendTitleAuto\"),submenuTitle:(0,a.Iu)(\"appendSubmenuTitle\"),className:\"jsoneditor-insert\",click:function(){n._onAppend(\"\",\"\",\"auto\")},submenu:r}];this.editor.options.onCreateMenu&&(r=n.parent.getPath(),s=this.editor.options.onCreateMenu(s,{type:\"append\",path:r,paths:[r]})),new i.x(s,{close:t}).show(e,this.editor.getPopupAnchor())},x.prototype.onEvent=function(e){var t,n=e.type,r=e.target||e.srcElement,i=this.dom;r===i.menu&&(\"mouseover\"===n?this.editor.highlighter.highlight(this.parent):\"mouseout\"===n&&this.editor.highlighter.unhighlight()),\"click\"===n&&r===i.menu&&((t=this.editor.highlighter).highlight(this.parent),t.lock(),(0,u.addClassName)(i.menu,\"jsoneditor-selected\"),this.showContextMenu(i.menu,(function(){(0,u.removeClassName)(i.menu,\"jsoneditor-selected\"),t.unlock(),t.unhighlight()}))),\"keydown\"===n&&this.onKeyDown(e)},x);function x(e){this.editor=e,this.dom={}}var E=((k.prototype=new v).getDom=function(){return this.dom.tr||(this._updateEditability(),this.dom.tr||(t=(e=this).parent,(i=document.createElement(\"a\")).appendChild(document.createTextNode((0,a.Iu)(\"showMore\"))),i.href=\"#\",i.onclick=function(n){return t.visibleChilds=Math.floor(t.visibleChilds/t.getMaxVisibleChilds()+1)*t.getMaxVisibleChilds(),e.updateDom(),t.showChilds(),n.preventDefault(),!1},(s=document.createElement(\"a\")).appendChild(document.createTextNode((0,a.Iu)(\"showAll\"))),s.href=\"#\",s.onclick=function(n){return t.visibleChilds=1/0,e.updateDom(),t.showChilds(),n.preventDefault(),!1},n=document.createElement(\"div\"),r=document.createTextNode(this._getShowMoreText()),n.className=\"jsoneditor-show-more\",n.appendChild(r),n.appendChild(i),n.appendChild(document.createTextNode(\". \")),n.appendChild(s),n.appendChild(document.createTextNode(\". \")),(i=document.createElement(\"td\")).appendChild(n),s=document.createElement(\"tr\"),\"tree\"===this.editor.options.mode&&(s.appendChild(document.createElement(\"td\")),s.appendChild(document.createElement(\"td\"))),s.appendChild(i),s.className=\"jsoneditor-show-more\",this.dom.tr=s,this.dom.moreContents=n,this.dom.moreText=r),this.updateDom(),this.dom.tr);var e,t,n,r,i,s},k.prototype.updateDom=function(e){var t;this.isVisible()?(this.dom.tr.node=this.parent.childs[this.parent.visibleChilds],this.dom.tr.parentNode||(t=this.parent._getNextTr())&&t.parentNode.insertBefore(this.dom.tr,t),this.dom.moreText.nodeValue=this._getShowMoreText(),this.dom.moreContents.style.marginLeft=24*(this.getLevel()+1)+\"px\"):this.dom.tr&&this.dom.tr.parentNode&&this.dom.tr.parentNode.removeChild(this.dom.tr)},k.prototype._getShowMoreText=function(){return(0,a.Iu)(\"showMoreStatus\",{visibleChilds:this.parent.visibleChilds,totalChilds:this.parent.childs.length})+\" \"},k.prototype.isVisible=function(){return this.parent.expanded&&this.parent.childs.length>this.parent.visibleChilds},k.prototype.onEvent=function(e){\"keydown\"===e.type&&this.onKeyDown(e)},k);function k(e,t){this.editor=e,this.parent=t,this.dom={}}var _=function(){function e(t){function n(e){return t.node.findNodeByInternalPath(e)}!function(t){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this),this.editor=t,this.history=[],this.index=-1,this.clear(),this.actions={editField:{undo:function(e){n(e.parentPath).childs[e.index].updateField(e.oldValue)},redo:function(e){n(e.parentPath).childs[e.index].updateField(e.newValue)}},editValue:{undo:function(e){n(e.path).updateValue(e.oldValue)},redo:function(e){n(e.path).updateValue(e.newValue)}},changeType:{undo:function(e){n(e.path).changeType(e.oldType)},redo:function(e){n(e.path).changeType(e.newType)}},appendNodes:{undo:function(e){var t=n(e.parentPath);e.paths.map(n).forEach((function(e){t.removeChild(e)}))},redo:function(e){var t=n(e.parentPath);e.nodes.forEach((function(e){t.appendChild(e)}))}},insertBeforeNodes:{undo:function(e){var t=n(e.parentPath);e.paths.map(n).forEach((function(e){t.removeChild(e)}))},redo:function(e){var t=n(e.parentPath),r=n(e.beforePath);e.nodes.forEach((function(e){t.insertBefore(e,r)}))}},insertAfterNodes:{undo:function(e){var t=n(e.parentPath);e.paths.map(n).forEach((function(e){t.removeChild(e)}))},redo:function(e){var t=n(e.parentPath),r=n(e.afterPath);e.nodes.forEach((function(e){t.insertAfter(e,r),r=e}))}},removeNodes:{undo:function(e){var t=n(e.parentPath),r=t.childs[e.index]||t.append;e.nodes.forEach((function(e){t.insertBefore(e,r)}))},redo:function(e){var t=n(e.parentPath);e.paths.map(n).forEach((function(e){t.removeChild(e)}))}},duplicateNodes:{undo:function(e){var t=n(e.parentPath);e.clonePaths.map(n).forEach((function(e){t.removeChild(e)}))},redo:function(e){var t=n(e.parentPath),r=n(e.afterPath);e.paths.map(n).forEach((function(e){var n,i=e.clone();\"object\"===t.type&&(n=t.getFieldNames(),i.field=(0,u.findUniqueName)(e.field,n)),t.insertAfter(i,r),r=i}))}},moveNodes:{undo:function(e){var t=n(e.oldParentPath),r=n(e.newParentPath),i=t.childs[e.oldIndex]||t.append;r.childs.slice(e.newIndex,e.newIndex+e.count).forEach((function(n,r){n.field=e.fieldNames[r],t.moveBefore(n,i)})),null===e.newParentPathRedo&&(e.newParentPathRedo=r.getInternalPath())},redo:function(e){var t=n(e.oldParentPathRedo),r=n(e.newParentPathRedo),i=r.childs[e.newIndexRedo]||r.append;t.childs.slice(e.oldIndexRedo,e.oldIndexRedo+e.count).forEach((function(t,n){t.field=e.fieldNames[n],r.moveBefore(t,i)}))}},sort:{undo:function(e){var t=n(e.path);t.hideChilds(),t.childs=e.oldChilds,t.updateDom({updateIndexes:!0}),t.showChilds()},redo:function(e){var t=n(e.path);t.hideChilds(),t.childs=e.newChilds,t.updateDom({updateIndexes:!0}),t.showChilds()}},transform:{undo:function(e){n(e.path).setInternalValue(e.oldValue)},redo:function(e){n(e.path).setInternalValue(e.newValue)}}}}var t;return(t=[{key:\"onChange\",value:function(){}},{key:\"add\",value:function(e,t){this.index++,this.history[this.index]={action:e,params:t,timestamp:new Date},this.index<this.history.length-1&&this.history.splice(this.index+1,this.history.length-this.index-1),this.onChange()}},{key:\"clear\",value:function(){this.history=[],this.index=-1,this.onChange()}},{key:\"canUndo\",value:function(){return 0<=this.index}},{key:\"canRedo\",value:function(){return this.index<this.history.length-1}},{key:\"undo\",value:function(){if(this.canUndo()){var e=this.history[this.index];if(e){var t=this.actions[e.action];if(t&&t.undo){if(t.undo(e.params),e.params.oldSelection)try{this.editor.setDomSelection(e.params.oldSelection)}catch(e){console.error(e)}}else console.error(new Error('unknown action \"'+e.action+'\"'))}this.index--,this.onChange()}}},{key:\"redo\",value:function(){if(this.canRedo()){this.index++;var e=this.history[this.index];if(e){var t=this.actions[e.action];if(t&&t.redo){if(t.redo(e.params),e.params.newSelection)try{this.editor.setDomSelection(e.params.newSelection)}catch(e){console.error(e)}}else console.error(new Error('unknown action \"'+e.action+'\"'))}this.onChange()}}},{key:\"destroy\",value:function(){this.editor=null,this.history=[],this.index=-1}}])&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(e.prototype,t),e}();var T=function(){function e(t,n){!function(t){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this);var r=this;this.editor=t,this.timeout=void 0,this.delay=200,this.lastText=void 0,this.results=null,this.dom={},this.dom.container=n,t=document.createElement(\"div\"),(this.dom.wrapper=t).className=\"jsoneditor-search\",n.appendChild(t),n=document.createElement(\"div\"),(this.dom.results=n).className=\"jsoneditor-results\",t.appendChild(n),n=document.createElement(\"div\"),(this.dom.input=n).className=\"jsoneditor-frame\",n.title=(0,a.Iu)(\"searchTitle\"),t.appendChild(n),(t=document.createElement(\"button\")).type=\"button\",t.className=\"jsoneditor-refresh\",n.appendChild(t);var i=document.createElement(\"input\");i.type=\"text\",(this.dom.search=i).oninput=function(e){r._onDelayedSearch(e)},i.onchange=function(e){r._onSearch()},i.onkeydown=function(e){r._onKeyDown(e)},i.onkeyup=function(e){r._onKeyUp(e)},t.onclick=function(e){i.select()},n.appendChild(i),(t=document.createElement(\"button\")).type=\"button\",t.title=(0,a.Iu)(\"searchNextResultTitle\"),t.className=\"jsoneditor-next\",t.onclick=function(){r.next()},n.appendChild(t),(t=document.createElement(\"button\")).type=\"button\",t.title=(0,a.Iu)(\"searchPreviousResultTitle\"),t.className=\"jsoneditor-previous\",t.onclick=function(){r.previous()},n.appendChild(t)}var t;return(t=[{key:\"next\",value:function(e){var t;this.results&&((t=null!==this.resultIndex?this.resultIndex+1:0)>this.results.length-1&&(t=0),this._setActiveResult(t,e))}},{key:\"previous\",value:function(e){var t,n;this.results&&(t=this.results.length-1,(n=null!==this.resultIndex?this.resultIndex-1:t)<0&&(n=t),this._setActiveResult(n,e))}},{key:\"_setActiveResult\",value:function(e,t){var n;if(this.activeResult&&(n=this.activeResult.node,\"field\"===this.activeResult.elem?delete n.searchFieldActive:delete n.searchValueActive,n.updateDom()),!this.results||!this.results[e])return this.resultIndex=void 0,void(this.activeResult=void 0);this.resultIndex=e;var r=this.results[this.resultIndex].node,i=this.results[this.resultIndex].elem;\"field\"===i?r.searchFieldActive=!0:r.searchValueActive=!0,this.activeResult=this.results[this.resultIndex],r.updateDom(),r.scrollTo((function(){t&&r.focus(i)}))}},{key:\"_clearDelay\",value:function(){void 0!==this.timeout&&(clearTimeout(this.timeout),delete this.timeout)}},{key:\"_onDelayedSearch\",value:function(e){this._clearDelay();var t=this;this.timeout=setTimeout((function(e){t._onSearch()}),this.delay)}},{key:\"_onSearch\",value:function(e){var t;if(this._clearDelay(),(t=0<(t=this.dom.search.value).length?t:void 0)!==this.lastText||e){this.lastText=t,this.results=this.editor.search(t),e=this.results[0]?this.results[0].node.MAX_SEARCH_RESULTS:1/0;var n=0;if(this.activeResult)for(var r=0;r<this.results.length;r++)if(this.results[r].node===this.activeResult.node){n=r;break}this._setActiveResult(n,!1),this.dom.results.textContent=void 0!==t?0===(t=this.results.length)?\"no\\xa0results\":1===t?\"1\\xa0result\":e<t?e+\"+\\xa0results\":t+\"\\xa0results\":\"\"}}},{key:\"_onKeyDown\",value:function(e){var t=e.which;27===t?(this.dom.search.value=\"\",this._onSearch(),e.preventDefault(),e.stopPropagation()):13===t&&(e.ctrlKey?this._onSearch(!0):e.shiftKey?this.previous():this.next(),e.preventDefault(),e.stopPropagation())}},{key:\"_onKeyUp\",value:function(e){var t=e.keyCode;27!==t&&13!==t&&this._onDelayedSearch(e)}},{key:\"clear\",value:function(){this.dom.search.value=\"\",this._onSearch()}},{key:\"forceSearch\",value:function(){this._onSearch(!0)}},{key:\"isEmpty\",value:function(){return\"\"===this.dom.search.value}},{key:\"destroy\",value:function(){this.editor=null,this.dom.container.removeChild(this.dom.wrapper),this.dom=null,this.results=null,this.activeResult=null,this._clearDelay()}}])&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(e.prototype,t),e}();var R=function(){function e(t,n){!function(t){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this),t&&(this.root=n,this.path=document.createElement(\"div\"),this.path.className=\"jsoneditor-treepath\",this.path.setAttribute(\"tabindex\",0),this.contentMenuClicked=!1,t.appendChild(this.path),this.reset())}var t;return(t=[{key:\"reset\",value:function(){this.path.textContent=(0,a.Iu)(\"selectNode\")}},{key:\"setPath\",value:function(e){var t=this;this.path.textContent=\"\",e&&e.length&&e.forEach((function(n,r){var s,o=document.createElement(\"span\");o.className=\"jsoneditor-treepath-element\",o.innerText=n.name,o.onclick=(function(e){this.selectionCallback&&this.selectionCallback(e)}).bind(t,n),t.path.appendChild(o),n.children.length&&((s=document.createElement(\"span\")).className=\"jsoneditor-treepath-seperator\",s.textContent=\"\\u25ba\",s.onclick=function(){t.contentMenuClicked=!0;var o=[];n.children.forEach((function(i){o.push({text:i.name,className:\"jsoneditor-type-modes\"+(e[r+1]+1&&e[r+1].name===i.name?\" jsoneditor-selected\":\"\"),click:(function(e,t){this.contextMenuCallback&&this.contextMenuCallback(e,t)}).bind(t,n,i.name)})})),new i.x(o,{limitHeight:!0}).show(s,t.root,!0)},t.path.appendChild(s)),r===e.length-1&&(o=(s||o).getBoundingClientRect().right,t.path.offsetWidth<o&&(t.path.scrollLeft=o),t.path.scrollLeft&&((o=document.createElement(\"span\")).className=\"jsoneditor-treepath-show-all-btn\",o.title=\"show all path\",o.textContent=\"...\",o.onclick=(function(e){(t.contentMenuClicked=!1,u.addClassName)(t.path,\"show-all\"),t.path.style.width=t.path.parentNode.getBoundingClientRect().width-10+\"px\",t.path.onblur=function(){if(t.contentMenuClicked)return t.contentMenuClicked=!1,void t.path.focus();(0,u.removeClassName)(t.path,\"show-all\"),t.path.onblur=void 0,t.path.style.width=\"\",t.setPath(e)}}).bind(t,e),t.path.insertBefore(o,t.path.firstChild)))}))}},{key:\"onSectionSelected\",value:function(e){\"function\"==typeof e&&(this.selectionCallback=e)}},{key:\"onContextMenuItemSelected\",value:function(e){\"function\"==typeof e&&(this.contextMenuCallback=e)}}])&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(e.prototype,t),e}(),B=(t=n(8037),n.n(t)),O=[{mode:\"tree\",mixin:t={create:function(e,t){if(!e)throw new Error(\"No container element provided.\");this.container=e,this.dom={},this.highlighter=new o,this.selection=void 0,this.multiselection={nodes:[]},this.validateSchema=null,this.validationSequence=0,this.errorNodes=[],this.lastSchemaErrors=void 0,this.node=null,this.focusTarget=null,this._setOptions(t),t.autocomplete&&(this.autocomplete=function(e){(e=e||{}).filter=e.filter||\"start\",e.trigger=e.trigger||\"keydown\",e.confirmKeys=e.confirmKeys||[39,35,9],e.caseSensitive=e.caseSensitive||!1;var t=\"\",n=\"\",i=document.createElement(\"div\");i.style.position=\"relative\",i.style.outline=\"0\",i.style.border=\"0\",i.style.margin=\"0\",i.style.padding=\"0\";var s,o,a=document.createElement(\"div\");function c(e){var t,n;document.createRange?((t=document.createRange()).selectNodeContents(e),t.collapse(!1),(n=window.getSelection()).removeAllRanges(),n.addRange(t)):document.selection&&((t=document.body.createTextRange()).moveToElementText(e),t.collapse(!1),t.select())}function l(e){return void 0===s&&((s=document.createElement(\"span\")).style.visibility=\"hidden\",s.style.position=\"fixed\",s.style.outline=\"0\",s.style.margin=\"0\",s.style.padding=\"0\",s.style.border=\"0\",s.style.left=\"0\",s.style.whiteSpace=\"pre\",s.style.fontSize=t,s.style.fontFamily=n,s.style.fontWeight=\"normal\",document.body.appendChild(s)),s.textContent=e,s.getBoundingClientRect().right}a.className=\"autocomplete dropdown\",a.style.position=\"absolute\",a.style.visibility=\"hidden\";var h,d,u,f,g,p={onArrowDown:function(){},onArrowUp:function(){},onEnter:function(){},onTab:function(){},startFrom:0,options:[],element:null,elementHint:null,elementStyle:null,wrapper:i,show:function(e,r,s){var o=this;this.startFrom=r,this.wrapper.remove(),this.elementHint&&(this.elementHint.remove(),this.elementHint=null),\"\"===t&&(t=window.getComputedStyle(e).getPropertyValue(\"font-size\")),\"\"===n&&(n=window.getComputedStyle(e).getPropertyValue(\"font-family\")),a.style.marginLeft=\"0\",a.style.marginTop=e.getBoundingClientRect().height+\"px\",this.options=s.map(String),this.element!==e&&(this.element=e,this.elementStyle={zIndex:this.element.style.zIndex,position:this.element.style.position,backgroundColor:this.element.style.backgroundColor,borderColor:this.element.style.borderColor}),this.element.style.zIndex=3,this.element.style.position=\"relative\",this.element.style.backgroundColor=\"transparent\",this.element.style.borderColor=\"transparent\",this.elementHint=e.cloneNode(),this.elementHint.className=\"autocomplete hint\",this.elementHint.style.zIndex=2,this.elementHint.style.position=\"absolute\",this.elementHint.onfocus=function(){o.element.focus()},this.element.addEventListener&&(this.element.removeEventListener(\"keydown\",I),this.element.addEventListener(\"keydown\",I,!1),this.element.removeEventListener(\"blur\",A),this.element.addEventListener(\"blur\",A,!1)),i.appendChild(this.elementHint),i.appendChild(a),e.parentElement.appendChild(i),this.repaint(e)},setText:function(e){this.element.innerText=e},getText:function(){return this.element.innerText},hideDropDown:function(){this.wrapper.remove(),this.elementHint&&(this.elementHint.remove(),this.elementHint=null,m.hide(),this.element.style.zIndex=this.elementStyle.zIndex,this.element.style.position=this.elementStyle.position,this.element.style.backgroundColor=this.elementStyle.backgroundColor,this.element.style.borderColor=this.elementStyle.borderColor)},repaint:function(t){t=(t=t.innerText).replace(\"\\n\",\"\");var n=this.options.length,r=t.substring(this.startFrom);o=t.substring(0,this.startFrom);for(var i=0;i<n;i++){var s=this.options[i];if(!e.caseSensitive&&0===s.toLowerCase().indexOf(r.toLowerCase())||e.caseSensitive&&0===s.indexOf(r)){this.elementHint.innerText=o+r+s.substring(r.length),this.elementHint.realInnerText=o+s;break}}a.style.left=l(o)+\"px\",m.refresh(r,this.options),this.elementHint.style.width=l(this.elementHint.innerText)+10+\"px\",\"hidden\"===a.style.visibility||(this.elementHint.style.width=l(this.elementHint.innerText)+a.clientWidth+\"px\")}},m=(h=a,d=[],u=0,f=-1,g={rs:p,hide:function(){h.style.visibility=\"hidden\"},refresh:function(t,n){h.style.visibility=\"hidden\",u=0,h.textContent=\"\";var i=window.innerHeight||document.documentElement.clientHeight,s=(o=h.parentNode.getBoundingClientRect()).top-6,o=i-o.bottom-6;d=[];var a=\"function\"==typeof e.filter?e.filter:r[e.filter];n=a?n.filter((function(n){return a(e.caseSensitive?t:t.toLowerCase(),e.caseSensitive?n:n.toLowerCase(),e)})):[],0!==(d=n.map((function(e){var n=document.createElement(\"div\");n.className=\"item\",n.onmouseover=C,n.onmouseout=b,n.onmousedown=v,n.__hint=e,n.textContent=\"\",n.appendChild(document.createTextNode(e.substring(0,t.length)));var r=document.createElement(\"b\");return r.appendChild(document.createTextNode(e.substring(t.length))),n.appendChild(r),h.appendChild(n),n}))).length&&(1===d.length&&(t.toLowerCase()===d[0].__hint.toLowerCase()&&!e.caseSensitive||t===d[0].__hint&&e.caseSensitive)||d.length<2||(g.highlight(0),3*o<s?(h.style.maxHeight=s+\"px\",h.style.top=\"\",h.style.bottom=\"100%\"):(h.style.top=\"100%\",h.style.bottom=\"\",h.style.maxHeight=o+\"px\"),h.style.visibility=\"visible\"))},highlight:function(e){-1!==f&&d[f]&&(d[f].className=\"item\"),d[e].className=\"item hover\",f=e},move:function(e){return\"hidden\"===h.style.visibility?\"\":(u+e===-1||u+e===d.length||g.highlight(u+=e),d[u].__hint)},onmouseselection:function(){}});function C(){this.style.backgroundColor=\"#ddd\"}function b(){this.style.backgroundColor=\"\"}function v(){g.hide(),g.onmouseselection(this.__hint,g.rs)}var I=(function(t){var n=(t=t||window.event).keyCode;if(null!=this.elementHint&&33!==n&&34!==n){if(27===n)return p.hideDropDown(),p.element.focus(),t.preventDefault(),void t.stopPropagation();var r=(r=this.element.innerText).replace(\"\\n\",\"\");if(0<=e.confirmKeys.indexOf(n))return 9===n&&0===this.elementHint.innerText.length&&p.onTab(),void(0<this.elementHint.innerText.length&&this.element.innerText!==this.elementHint.realInnerText&&(this.element.innerText=this.elementHint.realInnerText,p.hideDropDown(),c(this.element),9===n&&(p.element.focus(),t.preventDefault(),t.stopPropagation())));if(13!==n){if(40===n){var i=r.substring(this.startFrom),s=m.move(1);return\"\"===s&&p.onArrowDown(),this.elementHint.innerText=o+i+s.substring(i.length),this.elementHint.realInnerText=o+s,t.preventDefault(),void t.stopPropagation()}38===n&&(r=r.substring(this.startFrom),\"\"===(l=m.move(-1))&&p.onArrowUp(),this.elementHint.innerText=o+r+l.substring(r.length),this.elementHint.realInnerText=o+l,t.preventDefault(),t.stopPropagation())}else if(0===this.elementHint.innerText.length)p.onEnter();else{var l=\"hidden\"===a.style.visibility;if(m.hide(),l)return p.hideDropDown(),p.element.focus(),void p.onEnter();this.element.innerText=this.elementHint.realInnerText,p.hideDropDown(),c(this.element),t.preventDefault(),t.stopPropagation()}}}).bind(p),A=function(e){p.hideDropDown()};return m.onmouseselection=function(e,t){t.element.innerText=t.elementHint.innerText=o+e,t.hideDropDown(),window.setTimeout((function(){t.element.focus(),c(t.element)}),1)},p}(t.autocomplete)),this.options.history&&\"view\"!==this.options.mode&&(this.history=new _(this)),this._createFrame(),this._createTable()},destroy:function(){this.frame&&this.container&&this.frame.parentNode===this.container&&(this.container.removeChild(this.frame),this.frame=null),this.container=null,this.dom=null,this.clear(),this.node=null,this.focusTarget=null,this.selection=null,this.multiselection=null,this.errorNodes=null,this.validateSchema=null,this._debouncedValidate=null,this.history&&(this.history.destroy(),this.history=null),this.searchBox&&(this.searchBox.destroy(),this.searchBox=null),this.modeSwitcher&&(this.modeSwitcher.destroy(),this.modeSwitcher=null),this.frameFocusTracker.destroy()},_setOptions:function(e){var t=this;this.options={search:!0,history:!0,mode:\"tree\",name:void 0,schema:null,schemaRefs:null,autocomplete:null,navigationBar:!0,mainMenuBar:!0,limitDragging:!1,onSelectionChange:null,colorPicker:!0,onColorPicker:function(e,t,n){var r;B()?(r=e.getBoundingClientRect().top,r=(0,u.getWindow)(e).innerHeight-r<300&&300<r,new(B())({parent:e,color:t,popup:r?\"top\":\"bottom\",onDone:function(e){e=1===e.rgba[3]?e.hex.substr(0,7):e.hex,n(e)}}).show()):console.warn(\"Cannot open color picker: the `vanilla-picker` library is not included in the bundle. Either use the full bundle or implement your own color picker using `onColorPicker`.\")},timestampTag:!0,timestampFormat:null,createQuery:c.r,executeQuery:c.J,onEvent:null,enableSort:!0,enableTransform:!0},e&&(Object.keys(e).forEach((function(n){t.options[n]=e[n]})),null==e.limitDragging&&null!=e.schema&&(this.options.limitDragging=!0)),this.setSchema(this.options.schema,this.options.schemaRefs),this._debouncedValidate=(0,u.debounce)(this.validate.bind(this),this.DEBOUNCE_INTERVAL),e.onSelectionChange&&this.onSelectionChange(e.onSelectionChange),(0,a.cC)(this.options.languages),(0,a.m0)(this.options.language)},set:function(e){e instanceof Function||void 0===e?this.clear():(this.content.removeChild(this.table),e=new v(this,e={field:this.options.name,value:e}),this._setRoot(e),this.validate(),this.node.expand(!1),this.content.appendChild(this.table)),this.history&&this.history.clear(),this.searchBox&&this.searchBox.clear()},update:function(e){var t,n;this.node.deepEqual(e)||(t=this.getSelection(),this.onChangeDisabled=!0,this.node.update(e),this.onChangeDisabled=!1,this.validate(),this.searchBox&&!this.searchBox.isEmpty()&&this.searchBox.forceSearch(),t&&t.start&&t.end?(n=this.node.findNodeByPath(t.start.path),e=this.node.findNodeByPath(t.end.path),n&&e?this.setSelection(t.start,t.end):this.setSelection({},{})):this.setSelection({},{}))},get:function(){if(this.node)return this.node.getValue()},getText:function(){return JSON.stringify(this.get())},setText:function(t){try{this.set((0,u.parse)(t))}catch(e){var n=(0,u.tryJsonRepair)(t);this.set((0,u.parse)(n))}},updateText:function(t){try{this.update((0,u.parse)(t))}catch(e){var n=(0,u.tryJsonRepair)(t);this.update((0,u.parse)(n))}},setName:function(e){this.options.name=e,this.node&&this.node.updateField(this.options.name)},getName:function(){return this.options.name},focus:function(){var e=this.scrollableContent.querySelector(\"[contenteditable=true]\");e?e.focus():this.node.dom.expand?this.node.dom.expand.focus():this.node.dom.menu?this.node.dom.menu.focus():(e=this.frame.querySelector(\"button\"))&&e.focus()},clear:function(){this.node&&(this.node.hide(),delete this.node),this.treePath&&this.treePath.reset()},_setRoot:function(e){this.clear(),(this.node=e).setParent(null),e.setField(this.getName(),!1),delete e.index,this.tbody.appendChild(e.getDom())},search:function(e){var t;return this.node?(this.content.removeChild(this.table),t=this.node.search(e),this.content.appendChild(this.table)):t=[],t},expandAll:function(){this.node&&(this.content.removeChild(this.table),this.node.expand(),this.content.appendChild(this.table))},collapseAll:function(){this.node&&(this.content.removeChild(this.table),this.node.collapse(),this.content.appendChild(this.table))},_onAction:function(e,t){this.history&&this.history.add(e,t),this._onChange()},_onChange:function(){if(!this.onChangeDisabled){var e;if(this.selection=this.getDomSelection(),this._debouncedValidate(),this.treePath&&((e=this.node&&this.selection?this.node.findNodeByInternalPath(this.selection.path):this.multiselection?this.multiselection.nodes[0]:void 0)?this._updateTreePath(e.getNodePath()):this.treePath.reset()),this.options.onChange)try{this.options.onChange()}catch(e){console.error(\"Error in onChange callback: \",e)}if(this.options.onChangeJSON)try{this.options.onChangeJSON(this.get())}catch(e){console.error(\"Error in onChangeJSON callback: \",e)}if(this.options.onChangeText)try{this.options.onChangeText(this.getText())}catch(e){console.error(\"Error in onChangeText callback: \",e)}if(this.options.onClassName&&this.node.recursivelyUpdateCssClassesOnNodes(),this.options.onNodeName&&this.node.childs)try{this.node.recursivelyUpdateNodeName()}catch(e){console.error(\"Error in onNodeName callback: \",e)}}},validate:function(){var e=this,t=this.node;if(t){var n=t.getValue(),r=[];this.validateSchema&&(this.validateSchema(n)||(r=this.validateSchema.errors.map((function(e){return(0,u.improveSchemaError)(e)})).map((function(e){return{node:t.findNode(e.dataPath),error:e,type:\"validation\"}})).filter((function(e){return null!=e.node}))));try{this.validationSequence++;var i=this,s=this.validationSequence;this._validateCustom(n).then((function(t){s===i.validationSequence&&(t=[].concat(r,t||[]),i._renderValidationErrors(t),\"function\"==typeof e.options.onValidationError&&((0,u.isValidationErrorChanged)(t,e.lastSchemaErrors)&&e.options.onValidationError.call(e,t),e.lastSchemaErrors=t))})).catch((function(e){console.error(e)}))}catch(n){console.error(n)}}},_renderValidationErrors:function(e){this.errorNodes&&this.errorNodes.forEach((function(e){e.setError(null)}));var t=e.reduce((function(e,t){return t.node.findParents().filter((function(t){return!e.some((function(e){return e[0]===t}))})).map((function(e){return[e,t.node]})).concat(e)}),[]);this.errorNodes=t.map((function(e){return{node:e[0],child:e[1],error:{message:(0,a.Iu)(\"object\"===e[0].type?\"containsInvalidProperties\":\"containsInvalidItems\")}}})).concat(e).map((function(e){return e.node.setError(e.error,e.child),e.node}))},_validateCustom:function(e){try{if(this.options.onValidate){var t=this.node,n=this.options.onValidate(e);return((0,u.isPromise)(n)?n:Promise.resolve(n)).then((function(e){return Array.isArray(e)?e.filter((function(e){var t=(0,u.isValidValidationError)(e);return t||console.warn('Ignoring a custom validation error with invalid structure. Expected structure: {path: [...], message: \"...\"}. Actual error:',e),t})).map((function(e){var n;try{n=e&&e.path?t.findNodeByPath(e.path):null}catch(e){}return n||console.warn(\"Ignoring validation error: node not found. Path:\",e.path,\"Error:\",e),{node:n,error:e,type:\"customValidation\"}})).filter((function(e){return e&&e.node&&e.error&&e.error.message})):null}))}}catch(e){return Promise.reject(e)}return Promise.resolve(null)},refresh:function(){this.node&&this.node.updateDom({recurse:!0})},startAutoScroll:function(e){var t=this,n=this.scrollableContent,r=(0,u.getAbsoluteTop)(n),i=n.clientHeight,s=r+i;this.autoScrollStep=e<r+24&&0<n.scrollTop?(r+24-e)/3:s-24<e&&i+n.scrollTop<n.scrollHeight?(s-24-e)/3:void 0,this.autoScrollStep?this.autoScrollTimer||(this.autoScrollTimer=setInterval((function(){t.autoScrollStep?n.scrollTop-=t.autoScrollStep:t.stopAutoScroll()}),50)):this.stopAutoScroll()},stopAutoScroll:function(){this.autoScrollTimer&&(clearTimeout(this.autoScrollTimer),delete this.autoScrollTimer),this.autoScrollStep&&delete this.autoScrollStep},setDomSelection:function(e){var t,n,r;e&&(\"scrollTop\"in e&&this.scrollableContent&&(this.scrollableContent.scrollTop=e.scrollTop),e.paths?(t=this,r=e.paths.map((function(e){return t.node.findNodeByInternalPath(e)})),this.select(r)):(r=(n=e.path?this.node.findNodeByInternalPath(e.path):null)&&e.domName?n.dom[e.domName]:null,e.range&&r?(r=Object.assign({},e.range,{container:r}),(0,u.setSelectionOffset)(r)):n&&n.focus()))},getDomSelection:function(){var e=v.getNodeFromTarget(this.focusTarget),t=this.focusTarget,n=e?Object.keys(e.dom).find((function(n){return e.dom[n]===t})):null,r=(0,u.getSelectionOffset)();return r&&\"DIV\"!==r.container.nodeName&&(r=null),r&&r.container!==t&&(r=null),r&&delete r.container,{path:e?e.getInternalPath():null,domName:n,range:r,paths:0<this.multiselection.length?this.multiselection.nodes.map((function(e){return e.getInternalPath()})):null,scrollTop:this.scrollableContent?this.scrollableContent.scrollTop:0}},scrollTo:function(e,t){var n,r,i,s,o=this.scrollableContent;o?((n=this).animateTimeout&&(clearTimeout(n.animateTimeout),delete n.animateTimeout),n.animateCallback&&(n.animateCallback(!1),delete n.animateCallback),i=o.scrollHeight-(r=o.clientHeight),s=Math.min(Math.max(e-r/4,0),i),function e(){var r=s-(r=o.scrollTop);3<Math.abs(r)?(o.scrollTop+=r/3,n.animateCallback=t,n.animateTimeout=setTimeout(e,50)):(t&&t(!0),o.scrollTop=s,delete n.animateTimeout,delete n.animateCallback)}()):t&&t(!1)},_createFrame:function(){this.frame=document.createElement(\"div\"),this.frame.className=\"jsoneditor jsoneditor-mode-\"+this.options.mode,this.container.appendChild(this.frame),this.contentOuter=document.createElement(\"div\"),this.contentOuter.className=\"jsoneditor-outer\";var e=this;function t(t){e._onEvent&&e._onEvent(t)}var n,r,i,o,c={target:this.frame,onFocus:this.options.onFocus||null,onBlur:this.options.onBlur||null};this.frameFocusTracker=new s.R(c),this.frame.onclick=function(e){var n=e.target;t(e),\"BUTTON\"===n.nodeName&&e.preventDefault()},this.frame.oninput=t,this.frame.onchange=t,this.frame.onkeydown=t,this.frame.onkeyup=t,this.frame.oncut=t,this.frame.onpaste=t,this.frame.onmousedown=t,this.frame.onmouseup=t,this.frame.onmouseover=t,this.frame.onmouseout=t,(0,u.addEventListener)(this.frame,\"focus\",t,!0),(0,u.addEventListener)(this.frame,\"blur\",t,!0),this.frame.onfocusin=t,this.frame.onfocusout=t,this.options.mainMenuBar&&((0,u.addClassName)(this.contentOuter,\"has-main-menu-bar\"),this.menu=document.createElement(\"div\"),this.menu.className=\"jsoneditor-menu\",this.frame.appendChild(this.menu),(c=document.createElement(\"button\")).type=\"button\",c.className=\"jsoneditor-expand-all\",c.title=(0,a.Iu)(\"expandAll\"),c.onclick=function(){e.expandAll()},this.menu.appendChild(c),(c=document.createElement(\"button\")).type=\"button\",c.title=(0,a.Iu)(\"collapseAll\"),c.className=\"jsoneditor-collapse-all\",c.onclick=function(){e.collapseAll()},this.menu.appendChild(c),this.options.enableSort&&((n=document.createElement(\"button\")).type=\"button\",n.className=\"jsoneditor-sort\",n.title=(0,a.Iu)(\"sortTitleShort\"),n.onclick=function(){e.node.showSortModal()},this.menu.appendChild(n)),this.options.enableTransform&&((n=document.createElement(\"button\")).type=\"button\",n.title=(0,a.Iu)(\"transformTitleShort\"),n.className=\"jsoneditor-transform\",n.onclick=function(){e.node.showTransformModal()},this.menu.appendChild(n)),this.history&&((r=document.createElement(\"button\")).type=\"button\",r.className=\"jsoneditor-undo jsoneditor-separator\",r.title=(0,a.Iu)(\"undo\"),r.onclick=function(){e._onUndo()},this.menu.appendChild(r),this.dom.undo=r,(i=document.createElement(\"button\")).type=\"button\",i.className=\"jsoneditor-redo\",i.title=(0,a.Iu)(\"redo\"),i.onclick=function(){e._onRedo()},this.menu.appendChild(i),this.dom.redo=i,this.history.onChange=function(){r.disabled=!e.history.canUndo(),i.disabled=!e.history.canRedo()},this.history.onChange()),this.options&&this.options.modes&&this.options.modes.length&&((o=this).modeSwitcher=new l.x(this.menu,this.options.modes,this.options.mode,(function(e){o.setMode(e),o.modeSwitcher.focus()}))),this.options.search&&(this.searchBox=new T(this,this.menu))),this.options.navigationBar&&(this.navBar=document.createElement(\"div\"),this.navBar.className=\"jsoneditor-navigation-bar nav-bar-empty\",this.frame.appendChild(this.navBar),this.treePath=new R(this.navBar,this.getPopupAnchor()),this.treePath.onSectionSelected(this._onTreePathSectionSelected.bind(this)),this.treePath.onContextMenuItemSelected(this._onTreePathMenuItemSelected.bind(this)))},_onUndo:function(){this.history&&(this.history.undo(),this._onChange())},_onRedo:function(){this.history&&(this.history.redo(),this._onChange())},_onEvent:function(e){if(!v.targetIsColorPicker(e.target)){var t,n=v.getNodeFromTarget(e.target);if(\"keydown\"===e.type&&this._onKeyDown(e),n&&\"focus\"===e.type&&(this.focusTarget=e.target,this.options.autocomplete&&\"focus\"===this.options.autocomplete.trigger&&this._showAutoComplete(e.target)),\"mousedown\"===e.type&&this._startDragDistance(e),\"mousemove\"!==e.type&&\"mouseup\"!==e.type&&\"click\"!==e.type||this._updateDragDistance(e),n&&this.options&&this.options.navigationBar&&n&&(\"keydown\"===e.type||\"mousedown\"===e.type)&&(t=this,setTimeout((function(){t._updateTreePath(n.getNodePath())}))),n&&n.selected){if(\"click\"===e.type){if(e.target===n.dom.menu)return void this.showContextMenu(e.target);e.hasMoved||this.deselect()}\"mousedown\"===e.type&&v.onDragStart(this.multiselection.nodes,e)}else\"mousedown\"===e.type&&(0,u.hasParentNode)(e.target,this.content)&&(this.deselect(),n&&e.target===n.dom.drag?v.onDragStart(n,e):n&&(e.target===n.dom.field||e.target===n.dom.value||e.target===n.dom.select)||this._onMultiSelectStart(e));n&&n.onEvent(e)}},_updateTreePath:function(e){var t;function n(e){return e.parent?\"array\"===e.parent.type?e.index:e.field:e.field||e.type}e&&e.length?((0,u.removeClassName)(this.navBar,\"nav-bar-empty\"),t=[],e.forEach((function(e){var r={name:n(e),node:e,children:[]};e.childs&&e.childs.length&&e.childs.forEach((function(e){r.children.push({name:n(e),node:e})})),t.push(r)})),this.treePath.setPath(t)):(0,u.addClassName)(this.navBar,\"nav-bar-empty\")},_onTreePathSectionSelected:function(e){e&&e.node&&(e.node.expandTo(),e.node.focus())},_onTreePathMenuItemSelected:function(e,t){e&&e.children.length&&(e=e.children.find((function(e){return e.name===t})))&&e.node&&(this._updateTreePath(e.node.getNodePath()),e.node.expandTo(),e.node.focus())},_startDragDistance:function(e){this.dragDistanceEvent={initialTarget:e.target,initialPageX:e.pageX,initialPageY:e.pageY,dragDistance:0,hasMoved:!1}},_updateDragDistance:function(e){this.dragDistanceEvent||this._startDragDistance(e);var t=e.pageX-this.dragDistanceEvent.initialPageX,n=e.pageY-this.dragDistanceEvent.initialPageY;return this.dragDistanceEvent.dragDistance=Math.sqrt(t*t+n*n),this.dragDistanceEvent.hasMoved=this.dragDistanceEvent.hasMoved||10<this.dragDistanceEvent.dragDistance,e.dragDistance=this.dragDistanceEvent.dragDistance,e.hasMoved=this.dragDistanceEvent.hasMoved,e.dragDistance},_onMultiSelectStart:function(e){var t,n=v.getNodeFromTarget(e.target);\"tree\"===this.options.mode&&void 0===this.options.onEditable&&(this.multiselection={start:n||null,end:null,nodes:[]},this._startDragDistance(e),(t=this).mousemove||(this.mousemove=(0,u.addEventListener)(e.view,\"mousemove\",(function(e){t._onMultiSelect(e)}))),this.mouseup||(this.mouseup=(0,u.addEventListener)(e.view,\"mouseup\",(function(e){t._onMultiSelectEnd(e)}))),e.preventDefault())},_onMultiSelect:function(e){var t;e.preventDefault(),this._updateDragDistance(e),e.hasMoved&&((t=v.getNodeFromTarget(e.target))&&(null==this.multiselection.start&&(this.multiselection.start=t),this.multiselection.end=t),this.deselect(),t=this.multiselection.end||this.multiselection.start,(e=this.multiselection.start)&&t&&(this.multiselection.nodes=this._findTopLevelNodes(e,t),this.multiselection.nodes&&this.multiselection.nodes.length&&(this.multiselection.direction=this.multiselection.start===(t=this.multiselection.nodes[0])||this.multiselection.start.isDescendantOf(t)?\"down\":\"up\"),this.select(this.multiselection.nodes)))},_onMultiSelectEnd:function(e){this.multiselection.nodes[0]&&this.multiselection.nodes[0].dom.menu.focus(),this.multiselection.start=null,this.multiselection.end=null,this.mousemove&&((0,u.removeEventListener)(e.view,\"mousemove\",this.mousemove),delete this.mousemove),this.mouseup&&((0,u.removeEventListener)(e.view,\"mouseup\",this.mouseup),delete this.mouseup)},deselect:function(e){var t=!!this.multiselection.nodes.length;this.multiselection.nodes.forEach((function(e){e.setSelected(!1)})),this.multiselection.nodes=[],e&&(this.multiselection.start=null,this.multiselection.end=null),t&&this._selectionChangedHandler&&this._selectionChangedHandler()},select:function(e){if(!Array.isArray(e))return this.select([e]);var t;e&&(this.deselect(),this.multiselection.nodes=e.slice(0),t=e[0],e.forEach((function(e){e.expandPathToNode(),e.setSelected(!0,e===t)})),this._selectionChangedHandler&&(e=this.getSelection(),this._selectionChangedHandler(e.start,e.end)))},_findTopLevelNodes:function(e,t){for(var n=e.getNodePath(),r=t.getNodePath(),i=0;i<n.length&&n[i]===r[i];)i++;var s=n[i-1],o=n[i];return e=r[i],o&&e||(s.parent?s=(e=o=s).parent:(o=s.childs[0],e=s.childs[s.childs.length-1])),s&&o&&e?(t=s.childs.indexOf(o),o=s.childs.indexOf(e),e=Math.min(t,o),o=Math.max(t,o),s.childs.slice(e,o+1)):[]},_showAutoComplete:function(e){var t,n=v.getNodeFromTarget(e),r=\"\";0<=e.className.indexOf(\"jsoneditor-value\")&&(r=\"value\"),0<=e.className.indexOf(\"jsoneditor-field\")&&(r=\"field\"),\"\"!==r&&(t=this,setTimeout((function(){var i;n&&(\"focus\"===t.options.autocomplete.trigger||0<e.innerText.length)&&null!==(i=t.options.autocomplete.getOptions(e.innerText,n.getPath(),r,n.editor))?\"function\"==typeof i.then?i.then((function(n){null===n?t.autocomplete.hideDropDown():n.options?t.autocomplete.show(e,n.startFrom,n.options):t.autocomplete.show(e,0,n)})).catch((function(e){console.error(e)})):i.options?t.autocomplete.show(e,i.startFrom,i.options):t.autocomplete.show(e,0,i):t.autocomplete.hideDropDown()}),50))},_onKeyDown:function(e){var t,n=e.which||e.keyCode,r=e.altKey,i=e.ctrlKey,s=e.metaKey,o=e.shiftKey,a=!1,c=this.focusTarget;9===n&&(t=this,setTimeout((function(){t.focusTarget!==c&&(0,u.selectContentEditable)(t.focusTarget)}),0)),this.searchBox&&(i&&70===n?(this.searchBox.dom.search.focus(),this.searchBox.dom.search.select(),a=!0):(114===n||i&&71===n)&&(o?this.searchBox.previous(!0):this.searchBox.next(!0),a=!0)),this.history&&(i&&!o&&90===n?(this._onUndo(),a=!0):i&&o&&90===n&&(this._onRedo(),a=!0)),this.options.autocomplete&&!a&&(i||r||s||1!==e.key.length&&8!==n&&46!==n||(a=!1,this._showAutoComplete(e.target))),a&&(e.preventDefault(),e.stopPropagation())},_createTable:function(){var e;this.options.navigationBar&&(0,u.addClassName)(this.contentOuter,\"has-nav-bar\"),this.scrollableContent=document.createElement(\"div\"),this.scrollableContent.className=\"jsoneditor-tree\",this.contentOuter.appendChild(this.scrollableContent),this.content=document.createElement(\"div\"),this.content.className=\"jsoneditor-tree-inner\",this.scrollableContent.appendChild(this.content),this.table=document.createElement(\"table\"),this.table.className=\"jsoneditor-tree\",this.content.appendChild(this.table),this.colgroupContent=document.createElement(\"colgroup\"),\"tree\"===this.options.mode&&((e=document.createElement(\"col\")).width=\"24px\",this.colgroupContent.appendChild(e)),(e=document.createElement(\"col\")).width=\"24px\",this.colgroupContent.appendChild(e),e=document.createElement(\"col\"),this.colgroupContent.appendChild(e),this.table.appendChild(this.colgroupContent),this.tbody=document.createElement(\"tbody\"),this.table.appendChild(this.tbody),this.frame.appendChild(this.contentOuter)},showContextMenu:function(e,t){var n,r=[],s=this.multiselection.nodes.slice();r.push({text:(0,a.Iu)(\"duplicateText\"),title:(0,a.Iu)(\"duplicateTitle\"),className:\"jsoneditor-duplicate\",click:function(){v.onDuplicate(s)}}),r.push({text:(0,a.Iu)(\"remove\"),title:(0,a.Iu)(\"removeTitle\"),className:\"jsoneditor-remove\",click:function(){v.onRemove(s)}}),this.options.onCreateMenu&&(n=s.map((function(e){return e.getPath()})),r=this.options.onCreateMenu(r,{type:\"multiple\",path:n[0],paths:n})),new i.x(r,{close:t}).show(e,this.getPopupAnchor())},getPopupAnchor:function(){return this.options.popupAnchor||this.frame},getSelection:function(){var e,t,n={start:null,end:null};return this.multiselection.nodes&&this.multiselection.nodes.length&&this.multiselection.nodes.length&&(e=this.multiselection.nodes[0],t=this.multiselection.nodes[this.multiselection.nodes.length-1],\"down\"===this.multiselection.direction?(n.start=e.serialize(),n.end=t.serialize()):(n.start=t.serialize(),n.end=e.serialize())),n},onSelectionChange:function(e){\"function\"==typeof e&&(this._selectionChangedHandler=(0,u.debounce)(e,this.DEBOUNCE_INTERVAL))},setSelection:function(e,t){e&&e.dom&&e.range&&(console.warn(\"setSelection/getSelection usage for text selection is deprecated and should not be used, see documentation for supported selection options\"),this.setDomSelection(e)),(t=this._getNodeInstancesByRange(e,t)).forEach((function(e){e.expandTo()})),this.select(t)},_getNodeInstancesByRange:function(e,t){var n,r;e&&e.path&&(n=this.node.findNodeByPath(e.path),t&&t.path&&(r=this.node.findNodeByPath(t.path)));var i=[];if(n instanceof v)if(r instanceof v&&r!==n)if(n.parent===r.parent){t=n.getIndex()<r.getIndex()?(e=n,r):(e=r,n);var s=e;for(i.push(s);s=s.nextSibling(),i.push(s),s&&s!==t;);}else i=this._findTopLevelNodes(n,r);else i.push(n);return i},getNodesByRange:function(e,t){t=this._getNodeInstancesByRange(e,t);var n=[];return t.forEach((function(e){n.push(e.serialize())})),n}},data:\"json\"},{mode:\"view\",mixin:t,data:\"json\"},{mode:\"form\",mixin:t,data:\"json\"}]},2744:function(e,t,n){t.tryRequireAjv=function(){try{return n(8903)}catch(e){}}},9125:function(e,t,n){t.O=function(){try{n(4864)}catch(e){console.error(e)}}},9791:function(e,t,n){\"use strict\";n.r(t),n.d(t,{parse:function(){return l},tryJsonRepair:function(){return h},escapeUnicodeChars:function(){return d},validate:function(){return u},extend:function(){return f},clear:function(){return g},getType:function(){return p},isUrl:function(){return C},isArray:function(){return b},getWindow:function(){return v},getAbsoluteLeft:function(){return I},getAbsoluteTop:function(){return A},addClassName:function(){return y},removeAllClassNames:function(){return w},removeClassName:function(){return S},stripFormatting:function(){return x},setEndOfContentEditable:function(){return E},selectContentEditable:function(){return k},getSelection:function(){return _},setSelection:function(){return T},getSelectionOffset:function(){return R},setSelectionOffset:function(){return B},getInnerText:function(){return O},hasParentNode:function(){return L},getInternetExplorerVersion:function(){return P},isFirefox:function(){return N},addEventListener:function(){return M},removeEventListener:function(){return D},isChildOf:function(){return $},parsePath:function(){return W},stringifyPath:function(){return H},improveSchemaError:function(){return G},isPromise:function(){return V},isValidValidationError:function(){return j},insideRect:function(){return Z},debounce:function(){return z},textDiff:function(){return K},getInputSelection:function(){return X},getIndexForPosition:function(){return U},getPositionForPath:function(){return Y},compileJSONPointer:function(){return J},getColorCSS:function(){return Q},isValidColor:function(){return q},makeFieldTooltip:function(){return ee},get:function(){return te},findUniqueName:function(){return ne},getChildPaths:function(){return re},sort:function(){return ie},sortObjectKeys:function(){return se},parseString:function(){return oe},isTimestamp:function(){return ae},formatSize:function(){return ce},limitCharacters:function(){return le},isObject:function(){return he},contains:function(){return de},isValidationErrorChanged:function(){return ue}}),t=n(4987),t=n(233);var r=n.n(t),i=(t=n(8909),n.n(t)),s=n(6589),o=n(7026),a=n(7907);function c(e){return(c=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function l(t){try{return JSON.parse(t)}catch(e){throw u(t),e}}function h(t){try{return i()(t)}catch(e){return t}}function d(e){return e.replace(/[\\u007F-\\uFFFF]/g,(function(e){return\"\\\\u\"+(\"0000\"+e.charCodeAt(0).toString(16)).slice(-4)}))}function u(e){(void 0!==s?s:JSON).parse(e)}function f(e,t){for(var n in t)fe(t,n)&&(e[n]=t[n]);return e}function g(e){for(var t in e)fe(e,t)&&delete e[t];return e}function p(e){return null===e?\"null\":void 0===e?\"undefined\":e instanceof Number||\"number\"==typeof e?\"number\":e instanceof String||\"string\"==typeof e?\"string\":e instanceof Boolean||\"boolean\"==typeof e?\"boolean\":e instanceof RegExp?\"regexp\":b(e)?\"array\":\"object\"}var m=/^https?:\\/\\/\\S+$/;function C(e){return(\"string\"==typeof e||e instanceof String)&&m.test(e)}function b(e){return\"[object Array]\"===Object.prototype.toString.call(e)}function v(e){return e.ownerDocument.defaultView}function I(e){return e.getBoundingClientRect().left+window.pageXOffset||document.scrollLeft||0}function A(e){return e.getBoundingClientRect().top+window.pageYOffset||document.scrollTop||0}function y(e,t){var n=e.className.split(\" \");-1===n.indexOf(t)&&(n.push(t),e.className=n.join(\" \"))}function w(e){e.className=\"\"}function S(e,t){var n=e.className.split(\" \");-1!==(t=n.indexOf(t))&&(n.splice(t,1),e.className=n.join(\" \"))}function x(e){for(var t=e.childNodes,n=0,r=t.length;n<r;n++){var i=t[n];i.style&&i.removeAttribute(\"style\");var s=i.attributes;if(s)for(var o=s.length-1;0<=o;o--){var a=s[o];!0===a.specified&&i.removeAttribute(a.name)}x(i)}}function E(e){var t;document.createRange&&((t=document.createRange()).selectNodeContents(e),t.collapse(!1),(e=window.getSelection()).removeAllRanges(),e.addRange(t))}function k(e){var t;e&&\"DIV\"===e.nodeName&&window.getSelection&&document.createRange&&((t=document.createRange()).selectNodeContents(e),(e=window.getSelection()).removeAllRanges(),e.addRange(t))}function _(){if(window.getSelection){var e=window.getSelection();if(e.getRangeAt&&e.rangeCount)return e.getRangeAt(0)}return null}function T(e){var t;e&&window.getSelection&&((t=window.getSelection()).removeAllRanges(),t.addRange(e))}function R(){var e=_();return e&&\"startOffset\"in e&&\"endOffset\"in e&&e.startContainer&&e.startContainer===e.endContainer?{startOffset:e.startOffset,endOffset:e.endOffset,container:e.startContainer.parentNode}:null}function B(e){var t;document.createRange&&window.getSelection&&window.getSelection()&&(t=document.createRange(),e.container.firstChild||e.container.appendChild(document.createTextNode(\"\")),t.setStart(e.container.firstChild,e.startOffset),t.setEnd(e.container.firstChild,e.endOffset),T(t))}function O(e,t){if(void 0===t&&(t={_text:\"\",flush:function(){var e=this._text;return this._text=\"\",e},set:function(e){this._text=e}}),e.nodeValue){var n=e.nodeValue.replace(/\\s*\\n\\s*/g,\"\");return\"\"!==n?t.flush()+n:\"\"}if(e.hasChildNodes()){for(var r=e.childNodes,i=\"\",s=0,o=r.length;s<o;s++){var a,c=r[s];\"DIV\"===c.nodeName||\"P\"===c.nodeName?((a=(a=r[s-1])?a.nodeName:void 0)&&\"DIV\"!==a&&\"P\"!==a&&\"BR\"!==a&&(\"\"!==i&&(i+=\"\\n\"),t.flush()),i+=O(c,t),t.set(\"\\n\")):\"BR\"===c.nodeName?(i+=t.flush(),t.set(\"\\n\")):i+=O(c,t)}return i}return\"\"}function L(e,t){for(var n=e?e.parentNode:void 0;n;){if(n===t)return!0;n=n.parentNode}return!1}function P(){var e;return-1===F&&(e=-1,\"undefined\"!=typeof navigator&&\"Microsoft Internet Explorer\"===navigator.appName&&null!=/MSIE ([0-9]+[.0-9]+)/.exec(navigator.userAgent)&&(e=parseFloat(RegExp.$1)),F=e),F}var F=-1;function N(){return\"undefined\"!=typeof navigator&&-1!==navigator.userAgent.indexOf(\"Firefox\")}function M(e,t,n,r){return e.addEventListener?(void 0===r&&(r=!1),\"mousewheel\"===t&&N()&&(t=\"DOMMouseScroll\"),e.addEventListener(t,n,r),n):e.attachEvent?(e.attachEvent(\"on\"+t,r=function(){return n.call(e,window.event)}),r):void 0}function D(e,t,n,r){e.removeEventListener?(void 0===r&&(r=!1),\"mousewheel\"===t&&N()&&(t=\"DOMMouseScroll\"),e.removeEventListener(t,n,r)):e.detachEvent&&e.detachEvent(\"on\"+t,n)}function $(e,t){for(var n=e.parentNode;n;){if(n===t)return!0;n=n.parentNode}return!1}function W(e){var t=[],n=0;function r(t){for(var r=\"\";void 0!==e[n]&&e[n]!==t;)r+=e[n],n++;if(e[n]!==t)throw new Error(\"Invalid JSON path: unexpected end, character \"+t+\" expected\");return r}for(;void 0!==e[n];)if(\".\"===e[n])n++,t.push(function(){for(var t=\"\";void 0!==e[n]&&/[\\w$]/.test(e[n]);)t+=e[n],n++;if(\"\"===t)throw new Error(\"Invalid JSON path: property name expected at index \"+n);return t}());else{if(\"[\"!==e[n])throw new Error('Invalid JSON path: unexpected character \"'+e[n]+'\" at index '+n);if(\"'\"===e[++n]||'\"'===e[n]){var i=e[n];if(n++,t.push(r(i)),e[n]!==i)throw new Error(\"Invalid JSON path: closing quote ' expected at index \"+n);n++}else{if(0===(i=r(\"]\").trim()).length)throw new Error(\"Invalid JSON path: array value expected at index \"+n);i=\"*\"===i?i:JSON.parse(i),t.push(i)}if(\"]\"!==e[n])throw new Error(\"Invalid JSON path: closing bracket ] expected at index \"+n);n++}return t}function H(e){return e.map((function(e){return\"number\"==typeof e?\"[\"+e+\"]\":\"string\"==typeof e&&e.match(/^[A-Za-z0-9_$]+$/)?\".\"+e:'[\"'+e+'\"]'})).join(\"\")}function G(e){var t,n;return\"enum\"!==e.keyword||!Array.isArray(e.schema)||(n=e.schema)&&(5<(n=n.map((function(e){return JSON.stringify(e)}))).length&&(t=[\"(\"+(n.length-5)+\" more...)\"],(n=n.slice(0,5)).push(t)),e.message=\"should be equal to one of: \"+n.join(\", \")),\"additionalProperties\"===e.keyword&&(e.message=\"should NOT have additional property: \"+e.params.additionalProperty),e}function V(e){return e&&\"function\"==typeof e.then&&\"function\"==typeof e.catch}function j(e){return\"object\"===c(e)&&Array.isArray(e.path)&&\"string\"==typeof e.message}function Z(e,t,n){return t.left-(n=void 0!==n?n:0)>=e.left&&t.right+n<=e.right&&t.top-n>=e.top&&t.bottom+n<=e.bottom}function z(e,t,n){var r;return function(){var i=this,s=arguments,o=n&&!r;clearTimeout(r),r=setTimeout((function(){r=null,n||e.apply(i,s)}),t),o&&e.apply(i,s)}}function K(e,t){for(var n=t.length,r=0,i=e.length,s=t.length;t.charAt(r)===e.charAt(r)&&r<n;)r++;for(;t.charAt(s-1)===e.charAt(i-1)&&r<s&&0<i;)s--,i--;return{start:r,end:s}}function X(e){var t,n,r,i,s=0,o=0;return\"number\"==typeof e.selectionStart&&\"number\"==typeof e.selectionEnd?(s=e.selectionStart,o=e.selectionEnd):(i=document.selection.createRange())&&i.parentElement()===e&&(r=e.value.length,t=e.value.replace(/\\r\\n/g,\"\\n\"),(n=e.createTextRange()).moveToBookmark(i.getBookmark()),(i=e.createTextRange()).collapse(!1),-1<n.compareEndPoints(\"StartToEnd\",i)?s=o=r:(s=-n.moveStart(\"character\",-r),s+=t.slice(0,s).split(\"\\n\").length-1,-1<n.compareEndPoints(\"EndToEnd\",i)?o=r:(o=-n.moveEnd(\"character\",-r),o+=t.slice(0,o).split(\"\\n\").length-1))),{startIndex:s,endIndex:o,start:a(s),end:a(o)};function a(t){return{row:((t=e.value.substring(0,t)).match(/\\n/g)||[]).length+1,column:t.length-t.lastIndexOf(\"\\n\")}}}function U(e,t,n){return e=e.value||\"\",0<t&&0<n?(e=e.split(\"\\n\",t),t=Math.min(e.length,t),n=Math.min(e[t-1].length,n-1),n=1===t?n:n+1,e.slice(0,t-1).join(\"\\n\").length+n):-1}function Y(e,t){var n,r=[];if(!t||!t.length)return r;try{n=o.Q(e)}catch(e){return r}return t.forEach((function(e){var t=J(W(e));(t=n.pointers[t])&&r.push({path:e,line:t.key?t.key.line:t.value?t.value.line:0,column:t.key?t.key.column:t.value?t.value.column:0})})),r}function J(e){return e.map((function(e){return\"/\"+String(e).replace(/~/g,\"~0\").replace(/\\//g,\"~1\")})).join(\"\")}function Q(e){var t=document.createElement(\"div\");return t.style.color=e,t.style.color.split(/\\s+/).join(\"\").toLowerCase()||null}function q(e){return!!Q(e)}function ee(e,t){if(!e)return\"\";var n=\"\";return e.title&&(n+=e.title),e.description&&(0<n.length&&(n+=\"\\n\"),n+=e.description),e.default&&(0<n.length&&(n+=\"\\n\\n\"),n+=(0,a.Iu)(\"default\",void 0,t)+\"\\n\",n+=JSON.stringify(e.default,null,2)),Array.isArray(e.examples)&&0<e.examples.length&&(0<n.length&&(n+=\"\\n\\n\"),n+=(0,a.Iu)(\"examples\",void 0,t)+\"\\n\",e.examples.forEach((function(t,r){n+=JSON.stringify(t,null,2),r!==e.examples.length-1&&(n+=\"\\n\")}))),n}function te(e,t){for(var n=e,r=0;r<t.length&&null!=n;r++)n=n[t[r]];return n}function ne(e,t){for(var n=e.replace(/ \\(copy( \\d+)?\\)$/,\"\"),r=n,i=1;-1!==t.indexOf(r);)r=n+\" (copy\"+(1<i?\" \"+i:\"\")+\")\",i++;return r}function re(e,t){var n={};if(Array.isArray(e))for(var r=Math.min(e.length,1e4),i=0;i<r;i++)!function e(t,n,r,i){(Array.isArray(t)||he(t))&&!i||(n[r||\"\"]=!0),he(t)&&Object.keys(t).forEach((function(s){e(t[s],n,r+\".\"+s,i)}))}(e[i],n,\"\",t);else n[\"\"]=!0;return Object.keys(n).sort()}function ie(e,t,n){var r=t&&\".\"!==t?W(t):[],i=\"desc\"===n?-1:1;return(e=e.slice()).sort((function(e,t){return e=te(e,r),t=te(t,r),i*(t<e?1:e<t?-1:0)})),e}function se(e,t){var n=\"desc\"===t?-1:1,i=(t=Object.keys(e).sort((function(e,t){return n*r()(e,t)})),{});return t.forEach((function(t){i[t]=e[t]})),i}function oe(e){if(\"\"===e)return\"\";if(\"null\"===(n=e.toLowerCase()))return null;if(\"true\"===n)return!0;if(\"false\"===n)return!1;var t=Number(e),n=parseFloat(e);return isNaN(t)||isNaN(n)?e:t}function ae(e,t){return\"number\"==typeof t&&9466848e5<t&&isFinite(t)&&Math.floor(t)===t&&!isNaN(new Date(t).valueOf())}function ce(e){return e<900?e.toFixed()+\" B\":(e/=1e3)<900?e.toFixed(1)+\" KB\":(e/=1e3)<900?e.toFixed(1)+\" MB\":(e/=1e3)<900?e.toFixed(1)+\" GB\":(e/1e3).toFixed(1)+\" TB\"}function le(e,t){return e.length<=t?e:e.slice(0,t)+\"...\"}function he(e){return\"object\"===c(e)&&null!==e&&!Array.isArray(e)}function de(e,t){return-1!==e.indexOf(t)}function ue(e,t){if(!t&&!e)return!1;if(t&&!e||!t&&e)return!0;if(t.length!==e.length)return!0;for(var n=0;n<e.length;++n){var r=function(n){if(!t.find(\"error\"===e[n].type?function(t){return t.line===e[n].line}:function(t){return t.dataPath===e[n].dataPath&&t.schemaPath===e[n].schemaPath}))return{v:!0}}(n);if(\"object\"===c(r))return r.v}return!1}function fe(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},8037:function(e,t,n){var r;if(window.Picker)r=window.Picker;else try{r=n(4049)}catch(e){}e.exports=r},6225:function(e,t,n){e=n.nmd(e),function(){var e=function(){return this}();e||\"undefined\"==typeof window||(e=window);var t=function(e,n,r){\"string\"==typeof e?(2==arguments.length&&(r=n),t.modules[e]||(t.payloads[e]=r,t.modules[e]=null)):t.original?t.original.apply(this,arguments):(console.error(\"dropping module because define wasn't a string.\"),console.trace())};function n(e,t,n){if(\"string\"==typeof t){var r=a(e,t);if(null!=r)return n&&n(),r}else if(\"[object Array]\"===Object.prototype.toString.call(t)){for(var i=[],o=0,c=t.length;o<c;++o){var l=a(e,t[o]);if(null==l&&s.original)return;i.push(l)}return n&&n.apply(null,i)||!0}}t.modules={},t.payloads={};var r,i,s=function(e,t){var r=n(\"\",e,t);return null==r&&s.original?s.original.apply(this,arguments):r},o=function(e,t){if(-1!==t.indexOf(\"!\")){var n=t.split(\"!\");return o(e,n[0])+\"!\"+o(e,n[1])}if(\".\"==t.charAt(0))for(t=e.split(\"/\").slice(0,-1).join(\"/\")+\"/\"+t;-1!==t.indexOf(\".\")&&r!=t;){var r=t;t=t.replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}return t},a=function(e,r){r=o(e,r);var i,s=t.modules[r];return s||(\"function\"==typeof(s=t.payloads[r])&&(e={id:r,uri:\"\",exports:i={},packaged:!0},i=s((function(e,t){return n(r,e,t)}),i,e)||e.exports,t.modules[r]=i,delete t.payloads[r]),s=t.modules[r]=i||s),s};i=e,(r=\"ace\")&&(e[r]||(e[r]={}),i=e[r]),i.define&&i.define.packaged||(t.original=i.define,i.define=t,i.define.packaged=!0),i.require&&i.require.packaged||(s.original=i.require,i.require=s,i.require.packaged=!0)}(),ace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";\"undefined\"==typeof Element||Element.prototype.remove||Object.defineProperty(Element.prototype,\"remove\",{enumerable:!1,writable:!0,configurable:!0,value:function(){this.parentNode&&this.parentNode.removeChild(this)}})})),ace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";t.OS={LINUX:\"LINUX\",MAC:\"MAC\",WINDOWS:\"WINDOWS\"},t.getOS=function(){return t.isMac?t.OS.MAC:t.isLinux?t.OS.LINUX:t.OS.WINDOWS};var r=\"object\"==typeof navigator?navigator:{},i=(/mac|win|linux/i.exec(r.platform)||[\"other\"])[0].toLowerCase(),s=r.userAgent||\"\";r=r.appName||\"\",t.isWin=\"win\"==i,t.isMac=\"mac\"==i,t.isLinux=\"linux\"==i,t.isIE=\"Microsoft Internet Explorer\"==r||0<=r.indexOf(\"MSAppHost\")?parseFloat((s.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]):parseFloat((s.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=s.match(/ Gecko\\/\\d+/),t.isOpera=\"object\"==typeof opera&&\"[object Opera]\"==Object.prototype.toString.call(window.opera),t.isWebKit=parseFloat(s.split(\"WebKit/\")[1])||void 0,t.isChrome=parseFloat(s.split(\" Chrome/\")[1])||void 0,t.isEdge=parseFloat(s.split(\" Edge/\")[1])||void 0,t.isAIR=0<=s.indexOf(\"AdobeAIR\"),t.isAndroid=0<=s.indexOf(\"Android\"),t.isChromeOS=0<=s.indexOf(\" CrOS \"),t.isIOS=/iPad|iPhone|iPod/.test(s)&&!window.MSStream,t.isIOS&&(t.isMac=!0),t.isMobile=t.isIOS||t.isAndroid})),ace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"],(function(e,t,n){\"use strict\";var r=e(\"./useragent\");t.buildDom=function e(t,n,r){if(\"string\"==typeof t&&t){var i=document.createTextNode(t);return n&&n.appendChild(i),i}if(!Array.isArray(t))return t&&t.appendChild&&n&&n.appendChild(t),t;if(\"string\"!=typeof t[0]||!t[0]){for(var s=[],o=0;o<t.length;o++){var a=e(t[o],n,r);a&&s.push(a)}return s}var c=document.createElement(t[0]),l=t[1];for(i=1,l&&\"object\"==typeof l&&!Array.isArray(l)&&(i=2),o=i;o<t.length;o++)e(t[o],c,r);return 2==i&&Object.keys(l).forEach((function(e){var t=l[e];\"class\"===e?c.className=Array.isArray(t)?t.join(\" \"):t:\"function\"==typeof t||\"value\"==e||\"$\"==e[0]?c[e]=t:\"ref\"===e?r&&(r[t]=c):null!=t&&c.setAttribute(e,t)})),n&&n.appendChild(c),c},t.getDocumentHead=function(e){return(e=e||document).head||e.getElementsByTagName(\"head\")[0]||e.documentElement},t.createElement=function(e,t){return document.createElementNS?document.createElementNS(t||\"http://www.w3.org/1999/xhtml\",e):document.createElement(e)},t.removeChildren=function(e){e.innerHTML=\"\"},t.createTextNode=function(e,t){return(t?t.ownerDocument:document).createTextNode(e)},t.createFragment=function(e){return(e?e.ownerDocument:document).createDocumentFragment()},t.hasCssClass=function(e,t){return-1!==(e.className+\"\").split(/\\s+/g).indexOf(t)},t.addCssClass=function(e,n){t.hasCssClass(e,n)||(e.className+=\" \"+n)},t.removeCssClass=function(e,t){for(var n=e.className.split(/\\s+/g);;){var r=n.indexOf(t);if(-1==r)break;n.splice(r,1)}e.className=n.join(\" \")},t.toggleCssClass=function(e,t){for(var n=e.className.split(/\\s+/g),r=!0;;){var i=n.indexOf(t);if(-1==i)break;r=!1,n.splice(i,1)}return r&&n.push(t),e.className=n.join(\" \"),r},t.setCssClass=function(e,n,r){r?t.addCssClass(e,n):t.removeCssClass(e,n)},t.hasCssString=function(e,t){var n,r=0;if(n=(t=t||document).querySelectorAll(\"style\"))for(;r<n.length;)if(n[r++].id===e)return!0},t.importCssString=function(e,n,r){var i=r;r&&r.getRootNode&&(i=r.getRootNode())&&i!=r||(i=document);var s=i.ownerDocument||i;if(n&&t.hasCssString(n,i))return null;n&&(e+=\"\\n/*# sourceURL=ace/css/\"+n+\" */\"),(r=t.createElement(\"style\")).appendChild(s.createTextNode(e)),n&&(r.id=n),i==s&&(i=t.getDocumentHead(s)),i.insertBefore(r,i.firstChild)},t.importCssStylsheet=function(e,n){t.buildDom([\"link\",{rel:\"stylesheet\",href:e}],t.getDocumentHead(n))},t.scrollbarWidth=function(e){var n=t.createElement(\"ace_inner\");n.style.width=\"100%\",n.style.minWidth=\"0px\",n.style.height=\"200px\",n.style.display=\"block\";var r=t.createElement(\"ace_outer\"),i=r.style;i.position=\"absolute\",i.left=\"-10000px\",i.overflow=\"hidden\",i.width=\"200px\",i.minWidth=\"0px\",i.height=\"150px\",i.display=\"block\",r.appendChild(n);var s=e.documentElement;return s.appendChild(r),e=n.offsetWidth,i.overflow=\"scroll\",e==(n=n.offsetWidth)&&(n=r.clientWidth),s.removeChild(r),e-n},\"undefined\"==typeof document&&(t.importCssString=function(){}),t.computedStyle=function(e,t){return window.getComputedStyle(e,\"\")||{}},t.setStyle=function(e,t,n){e[t]!==n&&(e[t]=n)},t.HAS_CSS_ANIMATION=!1,t.HAS_CSS_TRANSFORMS=!1,t.HI_DPI=!r.isWin||\"undefined\"!=typeof window&&1.5<=window.devicePixelRatio,\"undefined\"!=typeof document&&(e=document.createElement(\"div\"),t.HI_DPI&&void 0!==e.style.transform&&(t.HAS_CSS_TRANSFORMS=!0),r.isEdge||void 0===e.style.animationName||(t.HAS_CSS_ANIMATION=!0),e=null),t.translate=t.HAS_CSS_TRANSFORMS?function(e,t,n){e.style.transform=\"translate(\"+Math.round(t)+\"px, \"+Math.round(n)+\"px)\"}:function(e,t,n){e.style.top=Math.round(n)+\"px\",e.style.left=Math.round(t)+\"px\"}})),ace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}})),ace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"],(function(e,t,n){\"use strict\";var r=e(\"./oop\"),i=function(){var e,t,n={MODIFIER_KEYS:{16:\"Shift\",17:\"Ctrl\",18:\"Alt\",224:\"Meta\",91:\"MetaLeft\",92:\"MetaRight\",93:\"ContextMenu\"},KEY_MODS:{ctrl:1,alt:2,option:2,shift:4,super:8,meta:8,command:8,cmd:8,control:1},FUNCTION_KEYS:{8:\"Backspace\",9:\"Tab\",13:\"Return\",19:\"Pause\",27:\"Esc\",32:\"Space\",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"Print\",45:\"Insert\",46:\"Delete\",96:\"Numpad0\",97:\"Numpad1\",98:\"Numpad2\",99:\"Numpad3\",100:\"Numpad4\",101:\"Numpad5\",102:\"Numpad6\",103:\"Numpad7\",104:\"Numpad8\",105:\"Numpad9\",\"-13\":\"NumpadEnter\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"Numlock\",145:\"Scrolllock\"},PRINTABLE_KEYS:{32:\" \",48:\"0\",49:\"1\",50:\"2\",51:\"3\",52:\"4\",53:\"5\",54:\"6\",55:\"7\",56:\"8\",57:\"9\",59:\";\",61:\"=\",65:\"a\",66:\"b\",67:\"c\",68:\"d\",69:\"e\",70:\"f\",71:\"g\",72:\"h\",73:\"i\",74:\"j\",75:\"k\",76:\"l\",77:\"m\",78:\"n\",79:\"o\",80:\"p\",81:\"q\",82:\"r\",83:\"s\",84:\"t\",85:\"u\",86:\"v\",87:\"w\",88:\"x\",89:\"y\",90:\"z\",107:\"+\",109:\"-\",110:\".\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\",111:\"/\",106:\"*\"}};for(t in n.FUNCTION_KEYS)e=n.FUNCTION_KEYS[t].toLowerCase(),n[e]=parseInt(t,10);for(t in n.PRINTABLE_KEYS)e=n.PRINTABLE_KEYS[t].toLowerCase(),n[e]=parseInt(t,10);return r.mixin(n,n.MODIFIER_KEYS),r.mixin(n,n.PRINTABLE_KEYS),r.mixin(n,n.FUNCTION_KEYS),n.enter=n.return,n.escape=n.esc,n.del=n.delete,n[173]=\"-\",function(){for(var e=[\"cmd\",\"ctrl\",\"alt\",\"shift\"],t=Math.pow(2,e.length);t--;)n.KEY_MODS[t]=e.filter((function(e){return t&n.KEY_MODS[e]})).join(\"-\")+\"-\"}(),n.KEY_MODS[0]=\"\",n.KEY_MODS[-1]=\"input-\",n}();r.mixin(t,i),t.keyCodeToString=function(e){var t=i[e];return\"string\"!=typeof t&&(t=String.fromCharCode(e)),t.toLowerCase()}})),ace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"],(function(e,t,n){\"use strict\";var r,i=e(\"./keys\"),s=e(\"./useragent\"),o=null,a=0;function c(){return null==r&&function(){r=!1;try{document.createComment(\"\").addEventListener(\"test\",(function(){}),{get passive(){r={passive:!1}}})}catch(e){}}(),r}function l(e,t,n){this.elem=e,this.type=t,this.callback=n}l.prototype.destroy=function(){u(this.elem,this.type,this.callback),this.elem=this.type=this.callback=void 0};var h,d=t.addListener=function(e,t,n,r){e.addEventListener(t,n,c()),r&&r.$toDestroy.push(new l(e,t,n))},u=t.removeListener=function(e,t,n){e.removeEventListener(t,n,c())};function f(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)}function g(e,t,n){var r=f(t);if(!s.isMac&&o){if(t.getModifierState&&(t.getModifierState(\"OS\")||t.getModifierState(\"Win\"))&&(r|=8),o.altGr){if(3==(3&r))return;o.altGr=0}18!==n&&17!==n||(c=\"location\"in t?t.location:t.keyLocation,17===n&&1===c?1==o[n]&&(a=t.timeStamp):18===n&&3===r&&2===c&&t.timeStamp-a<50&&(o.altGr=!0))}if(n in i.MODIFIER_KEYS&&(n=-1),!r&&13===n){var c=\"location\"in t?t.location:t.keyLocation;if(3===c&&(e(t,r,-n),t.defaultPrevented))return}if(s.isChromeOS&&8&r){if(e(t,r,n),t.defaultPrevented)return;r&=-9}return!!(r||n in i.FUNCTION_KEYS||n in i.PRINTABLE_KEYS)&&e(t,r,n)}function p(){o=Object.create(null)}t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation&&e.stopPropagation()},t.preventDefault=function(e){e.preventDefault&&e.preventDefault()},t.getButton=function(e){return\"dblclick\"==e.type?0:\"contextmenu\"==e.type||s.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.button},t.capture=function(e,t,n){var r=e&&e.ownerDocument||document;function i(e){t&&t(e),n&&n(e),u(r,\"mousemove\",t),u(r,\"mouseup\",i),u(r,\"dragstart\",i)}return d(r,\"mousemove\",t),d(r,\"mouseup\",i),d(r,\"dragstart\",i),i},t.addMouseWheelListener=function(e,t,n){\"onmousewheel\"in e?d(e,\"mousewheel\",(function(e){void 0!==e.wheelDeltaX?(e.wheelX=-e.wheelDeltaX/8,e.wheelY=-e.wheelDeltaY/8):(e.wheelX=0,e.wheelY=-e.wheelDelta/8),t(e)}),n):\"onwheel\"in e?d(e,\"wheel\",(function(e){switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=.35*e.deltaX||0,e.wheelY=.35*e.deltaY||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=5*(e.deltaX||0),e.wheelY=5*(e.deltaY||0)}t(e)}),n):d(e,\"DOMMouseScroll\",(function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=5*(e.detail||0),e.wheelY=0):(e.wheelX=0,e.wheelY=5*(e.detail||0)),t(e)}),n)},t.addMultiMouseDownListener=function(e,n,r,i,o){var a,c,l,h=0,u={2:\"dblclick\",3:\"tripleclick\",4:\"quadclick\"};function f(e){var o;if(0!==t.getButton(e)?h=0:1<e.detail&&!(4<++h)||(h=1),s.isIE&&(o=5<Math.abs(e.clientX-a)||5<Math.abs(e.clientY-c),l&&!o||(h=1),l&&clearTimeout(l),l=setTimeout((function(){l=null}),n[h-1]||600),1==h&&(a=e.clientX,c=e.clientY)),e._clicks=h,r[i](\"mousedown\",e),4<h)h=0;else if(1<h)return r[i](u[h],e)}Array.isArray(e)||(e=[e]),e.forEach((function(e){d(e,\"mousedown\",f,o)}))},t.getModifierString=function(e){return i.KEY_MODS[f(e)]},t.addCommandKeyListener=function(e,n,r){var i,a;s.isOldGecko||s.isOpera&&!(\"KeyboardEvent\"in window)?(i=null,d(e,\"keydown\",(function(e){i=e.keyCode}),r),d(e,\"keypress\",(function(e){return g(n,e,i)}),r)):(a=null,d(e,\"keydown\",(function(e){o[e.keyCode]=(o[e.keyCode]||0)+1;var t=g(n,e,e.keyCode);return a=e.defaultPrevented,t}),r),d(e,\"keypress\",(function(e){a&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),a=null)}),r),d(e,\"keyup\",(function(e){o[e.keyCode]=null}),r),o||(p(),d(window,\"focus\",p)))},\"object\"==typeof window&&window.postMessage&&!s.isOldIE&&(h=1,t.nextTick=function(e,n){n=n||window;var r=\"zero-timeout-message-\"+h++,i=function(s){s.data==r&&(t.stopPropagation(s),u(n,\"message\",i),e())};d(n,\"message\",i),n.postMessage(r,\"*\")}),t.$idleBlocked=!1,t.onIdle=function(e,n){return setTimeout((function n(){t.$idleBlocked?setTimeout(n,100):e()}),n)},t.$idleBlockId=null,t.blockIdle=function(e){t.$idleBlockId&&clearTimeout(t.$idleBlockId),t.$idleBlocked=!0,t.$idleBlockId=setTimeout((function(){t.$idleBlocked=!1}),e||100)},t.nextFrame=\"object\"==typeof window&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),t.nextFrame=t.nextFrame?t.nextFrame.bind(window):function(e){setTimeout(e,17)}})),ace.define(\"ace/range\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";function r(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}}(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return 0==this.compare(e,t)},this.compareRange=function(e){var t=e.end;return e=e.start,1==(t=this.compare(t.row,t.column))?1==(t=this.compare(e.row,e.column))?2:0==t?1:0:-1==t?-2:-1==(t=this.compare(e.row,e.column))?-1:1==t?42:0},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return 0==this.comparePoint(e.start)&&0==this.comparePoint(e.end)},this.intersects=function(e){return-1==(e=this.compareRange(e))||0==e||1==e},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){\"object\"==typeof e?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){\"object\"==typeof e?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return 0==this.compare(e,t)&&!this.isEnd(e,t)&&!this.isStart(e,t)},this.insideStart=function(e,t){return 0==this.compare(e,t)&&!this.isEnd(e,t)},this.insideEnd=function(e,t){return 0==this.compare(e,t)&&!this.isStart(e,t)},this.compare=function(e,t){return this.isMultiLine()||e!==this.start.row?e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row!==e||t<=this.end.column?0:1:t<this.start.column?-1:t>this.end.column?1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){var n,i;return this.end.row>t?n={row:t+1,column:0}:this.end.row<e&&(n={row:e,column:0}),this.start.row>t?i={row:t+1,column:0}:this.start.row<e&&(i={row:e,column:0}),r.fromPoints(i||this.start,n||this.end)},this.extend=function(e,t){var n,i,s=this.compare(e,t);return 0==s?this:(-1==s?n={row:e,column:t}:i={row:e,column:t},r.fromPoints(n||this.start,i||this.end))},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return r.fromPoints(this.start,this.end)},this.collapseRows=function(){return new r(this.start.row,0,0==this.end.column?Math.max(this.start.row,this.end.row-1):this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start);return e=e.documentToScreenPosition(this.end),new r(t.row,t.column,e.row,e.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(r.prototype),r.fromPoints=function(e,t){return new r(e.row,e.column,t.row,t.column)},r.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},r.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=r})),ace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){for(var n=\"\";0<t;)1&t&&(n+=e),(t>>=1)&&(e+=e);return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t,n={};for(t in e)n[t]=e[t];return n},t.copyArray=function(e){for(var t=[],n=0,r=e.length;n<r;n++)t[n]=e[n]&&\"object\"==typeof e[n]?this.copyObject(e[n]):e[n];return t},t.deepCopy=function e(t){if(\"object\"!=typeof t||!t)return t;var n;if(Array.isArray(t)){n=[];for(var r=0;r<t.length;r++)n[r]=e(t[r]);return n}if(\"[object Object]\"!==Object.prototype.toString.call(t))return t;for(r in n={},t)n[r]=e(t[r]);return n},t.arrayToMap=function(e){for(var t={},n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t,n=Object.create(null);for(t in e)n[t]=e[t];return n},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,(function(e){n.push({offset:arguments[arguments.length-2],length:e.length})})),n},t.deferredCall=function(e){function t(){n=null,e()}var n=null,r=function(e){return r.cancel(),n=setTimeout(t,e||0),r};return(r.schedule=r).call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(n),n=null,r},r.isPending=function(){return n},r},t.delayedCall=function(e,t){function n(){i=null,e()}function r(e){null==i&&(i=setTimeout(n,e||t))}var i=null;return r.delay=function(e){i&&clearTimeout(i),i=setTimeout(n,e||t)},(r.schedule=r).call=function(){this.cancel(),e()},r.cancel=function(){i&&clearTimeout(i),i=null},r.isPending=function(){return i},r}})),ace.define(\"ace/clipboard\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";var r;n.exports={lineMode:!1,pasteCancelled:function(){return!!(r&&r>Date.now()-50)||(r=!1)},cancel:function(){r=Date.now()}}})),ace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/clipboard\",\"ace/lib/keys\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/event\"),i=e(\"../lib/useragent\"),s=e(\"../lib/dom\"),o=e(\"../lib/lang\"),a=e(\"../clipboard\"),c=i.isChrome<18,l=i.isIE,h=63<i.isChrome,d=e(\"../lib/keys\"),u=d.KEY_MODS,f=i.isIOS,g=f?/\\s/:/\\n/,p=i.isMobile;t.TextInput=function(e,t){var n=s.createElement(\"textarea\");n.className=\"ace_text-input\",n.setAttribute(\"wrap\",\"off\"),n.setAttribute(\"autocorrect\",\"off\"),n.setAttribute(\"autocapitalize\",\"off\"),n.setAttribute(\"spellcheck\",!1),n.style.opacity=\"0\",e.insertBefore(n,e.firstChild);var m=!1,C=!1,b=!1,v=!1,I=\"\";p||(n.style.fontSize=\"1px\");var A=!1,y=!1,w=\"\",S=0,x=0,E=0;try{var k=document.activeElement===n}catch(e){}r.addListener(n,\"blur\",(function(e){y||(t.onBlur(e),k=!1)}),t),r.addListener(n,\"focus\",(function(e){if(!y){if(k=!0,i.isEdge)try{if(!document.hasFocus())return}catch(e){}t.onFocus(e),i.isEdge?setTimeout(_):_()}}),t),this.$focusScroll=!1,this.focus=function(){if(I||h||\"browser\"==this.$focusScroll)return n.focus({preventScroll:!0});var e=n.style.top;n.style.position=\"fixed\",n.style.top=\"0px\";try{var t=0!=n.getBoundingClientRect().top}catch(e){return}var r=[];if(t)for(var i=n.parentElement;i&&1==i.nodeType;)r.push(i),i.setAttribute(\"ace_nocontext\",!0),i=!i.parentElement&&i.getRootNode?i.getRootNode().host:i.parentElement;n.focus({preventScroll:!0}),t&&r.forEach((function(e){e.removeAttribute(\"ace_nocontext\")})),setTimeout((function(){n.style.position=\"\",\"0px\"==n.style.top&&(n.style.top=e)}),0)},this.blur=function(){n.blur()},this.isFocused=function(){return k},t.on(\"beforeEndOperation\",(function(){var e=t.curOp,r=e&&e.command&&e.command.name;\"insertstring\"!=r&&(e=r&&(e.docChanged||e.selectionChanged),b&&e&&(w=n.value=\"\",$()),_())}));var _=f?function(e){var r;!k||m&&!e||v||((r=\"\\n ab\"+(e=e||\"\")+\"cde fg\\n\")!=n.value&&(n.value=w=r),e=4+(e.length||(t.selection.isEmpty()?0:1)),4==S&&x==e||n.setSelectionRange(4,e),S=4,x=e)}:function(){if(!b&&!v&&(k||N)){b=!0;var e,r,i,s=0,o=0,a=\"\";if(t.session&&(s=(e=(r=t.selection).getRange()).start.column,o=e.end.column,a=t.session.getLine(r=r.cursor.row),e.start.row!=r?(i=t.session.getLine(r-1),s=e.start.row<r-1?0:s,o+=i.length+1,a=i+\"\\n\"+a):e.end.row!=r?(i=t.session.getLine(r+1),o=e.end.row>r+1?i.length:o,o+=a.length+1,a=a+\"\\n\"+i):p&&0<r&&(a=\"\\n\"+a,o+=1,s+=1),400<a.length&&(s<400&&o<400?a=a.slice(0,400):(a=\"\\n\",s==o?s=o=0:(s=0,o=1)))),(a+=\"\\n\\n\")!=w&&(n.value=w=a,S=x=a.length),N&&(S=n.selectionStart,x=n.selectionEnd),x!=o||S!=s||n.selectionEnd!=x)try{n.setSelectionRange(s,o),S=s,x=o}catch(e){}b=!1}};this.resetSelection=_,k&&t.onFocus();var T=null;function R(e,r){if(N=N&&!1,C)return _(),e&&t.onPaste(e),C=!1,\"\";for(var s=n.selectionStart,o=n.selectionEnd,a=S,c=w.length-x,l=e,h=e.length-s,d=e.length-o,u=0;0<a&&w[u]==e[u];)u++,a--;for(l=l.slice(u),u=1;0<c&&w.length-u>S-1&&w[w.length-u]==e[e.length-u];)u++,c--;h-=u-1,d-=u-1;var f=l.length-u+1;return f<0&&(a=-f,f=0),l=l.slice(0,f),r||l||h||a||c||d?(r=!(v=!0),i.isAndroid&&\". \"==l&&(l=\"  \",r=!0),l&&!a&&!c&&!h&&!d||A?t.onTextInput(l):t.onTextInput(l,{extendLeft:a,extendRight:c,restoreStart:h,restoreEnd:d}),v=!1,w=e,S=s,x=o,E=d,r?\"\\n\":l):\"\"}function B(e){if(b)return D();if(e&&e.inputType){if(\"historyUndo\"==e.inputType)return t.execCommand(\"undo\");if(\"historyRedo\"==e.inputType)return t.execCommand(\"redo\")}var r=n.value;e=R(r,!0),(500<r.length||g.test(e)||p&&S<1&&S==x)&&_()}function O(e,i){var s=t.getCopyText();if(!s)return r.preventDefault(e);M(e,s)?(f&&(_(s),m=s,setTimeout((function(){m=!1}),10)),i?t.onCut():t.onCopy(),r.preventDefault(e)):(m=!0,n.value=s,n.select(),setTimeout((function(){m=!1,_(),i?t.onCut():t.onCopy()})))}function L(e){O(e,!0)}function P(e){O(e,!1)}function F(e){var s=M(e);a.pasteCancelled()||(\"string\"==typeof s?(s&&t.onPaste(s,e),i.isIE&&setTimeout(_),r.preventDefault(e)):(n.value=\"\",C=!0))}this.setInputHandler=function(e){T=e};var N=!(this.getInputHandler=function(){return T}),M=function(e,t,n){var r=e.clipboardData||window.clipboardData;if(r&&!c){var i=l||n?\"Text\":\"text/plain\";try{return t?!1!==r.setData(i,t):r.getData(i)}catch(e){if(!n)return M(e,t,!0)}}};r.addCommandKeyListener(n,t.onCommandKey.bind(t),t),r.addListener(n,\"select\",(function(e){var r;b||(m?m=!1:0===(r=n).selectionStart&&r.selectionEnd>=w.length&&r.value===w&&w&&r.selectionEnd!==x?(t.selectAll(),_()):p&&n.selectionStart!=S&&_())}),t),r.addListener(n,\"input\",B,t),r.addListener(n,\"cut\",L,t),r.addListener(n,\"copy\",P,t),r.addListener(n,\"paste\",F,t),\"oncut\"in n&&\"oncopy\"in n&&\"onpaste\"in n||r.addListener(e,\"keydown\",(function(e){if((!i.isMac||e.metaKey)&&e.ctrlKey)switch(e.keyCode){case 67:P(e);break;case 86:F(e);break;case 88:L(e)}}),t);var D=function(){var e;if(b&&t.onCompositionUpdate&&!t.$readOnly)return A?W():void(b.useTextareaForIME?t.onCompositionUpdate(n.value):(e=n.value,R(e),b.markerRange&&(b.context&&(b.markerRange.start.column=b.selectionStart=b.context.compositionStartOffset),b.markerRange.end.column=b.markerRange.start.column+x-b.selectionStart+E)))},$=function(e){t.onCompositionEnd&&!t.$readOnly&&(b=!1,t.onCompositionEnd(),t.off(\"mousedown\",W),e&&B())};function W(){y=!0,n.blur(),n.focus(),y=!1}var H,G,V,j,Z,z=o.delayedCall(D,50).schedule.bind(null,null);function K(){clearTimeout(H),H=setTimeout((function(){I&&(n.style.cssText=I,I=\"\"),t.renderer.$isMousePressed=!1,t.renderer.$keepTextAreaAtCursor&&t.renderer.$moveTextAreaToCursor()}),0)}function X(e){var t,n,r,i;document.activeElement===V&&(Z||b||G.$mouseHandler.isMousePressed||m||(n=V.selectionEnd,i=null,(r=0)==(t=V.selectionStart)?i=d.up:1==t?i=d.home:x<n&&\"\\n\"==w[n]?i=d.end:t<S&&\" \"==w[t-1]?(i=d.left,r=u.option):t<S||t==S&&x!=S&&t==n?i=d.left:x<n&&2<w.slice(0,n).split(\"\\n\").length?i=d.down:x<n&&\" \"==w[n-1]?(i=d.right,r=u.option):(x<n||n==x&&x!=S&&t==n)&&(i=d.right),t!==n&&(r|=u.shift),i&&(!G.onCommandKey({},r,i)&&G.commands&&(i=d.keyCodeToString(i),(i=G.commands.findKeyCommand(r,i))&&G.execCommand(i)),S=t,x=n,_(\"\"))))}r.addListener(n,\"compositionstart\",(function(e){b||!t.onCompositionStart||t.$readOnly||(b={},A||(e.data&&(b.useTextareaForIME=!1),setTimeout(D,0),t._signal(\"compositionStart\"),t.on(\"mousedown\",W),(e=t.getSelectionRange()).end.row=e.start.row,e.end.column=e.start.column,b.markerRange=e,b.selectionStart=S,t.onCompositionStart(b),b.useTextareaForIME?(w=n.value=\"\",x=S=0):(n.msGetInputContext&&(b.context=n.msGetInputContext()),n.getInputContext&&(b.context=n.getInputContext()))))}),t),r.addListener(n,\"compositionupdate\",D,t),r.addListener(n,\"keyup\",(function(e){27==e.keyCode&&n.value.length<n.selectionStart&&(b||(w=n.value),S=x=-1,_()),z()}),t),r.addListener(n,\"keydown\",z,t),r.addListener(n,\"compositionend\",$,t),this.getElement=function(){return n},this.setCommandMode=function(e){A=e,n.readOnly=!1},this.setReadOnly=function(e){A||(n.readOnly=e)},this.setCopyWithEmptySelection=function(e){},this.onContextMenu=function(e){N=!0,_(),t._emit(\"nativecontextmenu\",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,o){I=I||n.style.cssText,n.style.cssText=(o?\"z-index:100000;\":\"\")+(i.isIE?\"opacity:0.1;\":\"\")+\"text-indent: -\"+(S+x)*t.renderer.characterWidth*.5+\"px;\";var a=t.container.getBoundingClientRect(),c=(o=s.computedStyle(t.container),a.top+(parseInt(o.borderTopWidth)||0)),l=a.left+(parseInt(a.borderLeftWidth)||0),h=a.bottom-c-n.clientHeight-2;(a=function(e){s.translate(n,e.clientX-l-2,Math.min(e.clientY-c-2,h))})(e),\"mousedown\"==e.type&&(t.renderer.$isMousePressed=!0,clearTimeout(H),i.isWin&&r.capture(t.container,a,K))},this.onContextMenuClose=K,r.addListener(n,\"mouseup\",e=function(e){t.textInput.onContextMenu(e),K()},t),r.addListener(n,\"mousedown\",(function(e){e.preventDefault(),K()}),t),r.addListener(t.renderer.scroller,\"contextmenu\",e,t),r.addListener(n,\"contextmenu\",e,t),f&&(G=t,j=null,Z=!1,(V=n).addEventListener(\"keydown\",(function(e){j&&clearTimeout(j),Z=!0}),!0),V.addEventListener(\"keyup\",(function(e){j=setTimeout((function(){Z=!1}),100)}),!0),document.addEventListener(\"selectionchange\",X),G.on(\"destroy\",(function(){document.removeEventListener(\"selectionchange\",X)})))},t.$setUserAgentForTests=function(e,t){p=e,f=t}})),ace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/useragent\");function i(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler(\"mousedown\",this.onMouseDown.bind(e)),t.setDefaultHandler(\"dblclick\",this.onDoubleClick.bind(e)),t.setDefaultHandler(\"tripleclick\",this.onTripleClick.bind(e)),t.setDefaultHandler(\"quadclick\",this.onQuadClick.bind(e)),t.setDefaultHandler(\"mousewheel\",this.onMouseWheel.bind(e)),[\"select\",\"startSelect\",\"selectEnd\",\"selectAllEnd\",\"selectByWordsEnd\",\"selectByLinesEnd\",\"dragWait\",\"dragWaitEnd\",\"focusWait\"].forEach((function(t){e[t]=this[t]}),this),e.selectByLines=this.extendSelectionBy.bind(e,\"getLineRange\"),e.selectByWords=this.extendSelectionBy.bind(e,\"getWordRange\")}function s(e,t){return(e.start.row==e.end.row?2*t.column-e.start.column-e.end.column:e.start.row!=e.end.row-1||e.start.column||e.end.column?2*t.row-e.start.row-e.end.row:t.column-4)<0?{cursor:e.start,anchor:e.end}:{cursor:e.end,anchor:e.start}}(function(){this.onMouseDown=function(e){var t=e.inSelection(),n=e.getDocumentPosition();this.mousedownEvent=e;var i=this.editor,s=e.getButton();return 0!==s?(!i.getSelectionRange().isEmpty()&&1!=s||i.selection.moveToPosition(n),void(2==s&&(i.textInput.onContextMenu(e.domEvent),r.isMozilla||e.preventDefault()))):(this.mousedownEvent.time=Date.now(),!t||i.isFocused()||(i.focus(),!this.$focusTimeout||this.$clickSelection||i.inMultiSelectMode)?(this.captureMouse(e),this.startSelect(n,1<e.domEvent._clicks),e.preventDefault()):(this.setState(\"focusWait\"),void this.captureMouse(e)))},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var n=this.editor;this.mousedownEvent&&(this.mousedownEvent.getShiftKey()?n.selection.selectToPosition(e):t||n.selection.moveToPosition(e),t||this.select(),n.renderer.scroller.setCapture&&n.renderer.scroller.setCapture(),n.setStyle(\"ace_selecting\"),this.setState(\"select\"))},this.select=function(){var e,t,n=this.editor,r=n.renderer.screenToTextCoordinates(this.x,this.y);this.$clickSelection&&(t=-1==(e=this.$clickSelection.comparePoint(r))?this.$clickSelection.end:1==e?this.$clickSelection.start:(r=(t=s(this.$clickSelection,r)).cursor,t.anchor),n.selection.setSelectionAnchor(t.row,t.column)),n.selection.selectToPosition(r),n.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,n,r=this.editor,i=r.renderer.screenToTextCoordinates(this.x,this.y),o=r.selection[e](i.row,i.column);this.$clickSelection&&(t=this.$clickSelection.comparePoint(o.start),e=this.$clickSelection.comparePoint(o.end),-1==t&&e<=0?(n=this.$clickSelection.end,o.end.row==i.row&&o.end.column==i.column||(i=o.start)):1==e&&0<=t?(n=this.$clickSelection.start,o.start.row==i.row&&o.start.column==i.column||(i=o.end)):n=-1==t&&1==e?(i=o.end,o.start):(i=(o=s(this.$clickSelection,i)).cursor,o.anchor),r.selection.setSelectionAnchor(n.row,n.column)),r.selection.selectToPosition(i),r.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle(\"ace_selecting\"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e=(t=this.mousedownEvent.y,e=this.y,Math.sqrt(Math.pow(this.x-this.mousedownEvent.x,2)+Math.pow(e-t,2))),t=Date.now();(0<e||t-this.mousedownEvent.time>this.$focusTimeout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),n=this.editor;(e=n.session.getBracketRange(t))?(e.isEmpty()&&(e.start.column--,e.end.column++),this.setState(\"select\")):(e=n.selection.getWordRange(t.row,t.column),this.setState(\"selectByWords\")),this.$clickSelection=e,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),n=this.editor;this.setState(\"selectByLines\"),(e=n.getSelectionRange()).isMultiLine()&&e.contains(t.row,t.column)?(this.$clickSelection=n.selection.getLineRange(e.start.row),this.$clickSelection.end=n.selection.getLineRange(e.end.row).end):this.$clickSelection=n.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState(\"selectAll\")},this.onMouseWheel=function(e){if(!e.getAccelKey()){e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=this.editor;this.$lastScroll||(this.$lastScroll={t:0,vx:0,vy:0,allowed:0});var n=this.$lastScroll,r=e.domEvent.timeStamp,i=(a=r-n.t)?e.wheelX/a:n.vx,s=a?e.wheelY/a:n.vy;a<550&&(i=(i+n.vx)/2,s=(s+n.vy)/2);var o=Math.abs(i/s),a=!1;return 1<=o&&t.renderer.isScrollableBy(e.wheelX*e.speed,0)&&(a=!0),o<=1&&t.renderer.isScrollableBy(0,e.wheelY*e.speed)&&(a=!0),a?n.allowed=r:r-n.allowed<550&&(Math.abs(i)<=1.5*Math.abs(n.vx)&&Math.abs(s)<=1.5*Math.abs(n.vy)?(a=!0,n.allowed=r):n.allowed=0),n.t=r,n.vx=i,n.vy=s,a?(t.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()):void 0}}}).call(i.prototype),t.DefaultHandlers=i})),ace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"],(function(e,t,n){\"use strict\";e(\"./lib/oop\");var r=e(\"./lib/dom\");function i(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}(function(){this.$init=function(){return this.$element=r.createElement(\"div\"),this.$element.className=\"ace_tooltip\",this.$element.style.display=\"none\",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(e){this.getElement().textContent=e},this.setHtml=function(e){this.getElement().innerHTML=e},this.setPosition=function(e,t){this.getElement().style.left=e+\"px\",this.getElement().style.top=t+\"px\"},this.setClassName=function(e){r.addCssClass(this.getElement(),e)},this.show=function(e,t,n){null!=e&&this.setText(e),null!=t&&null!=n&&this.setPosition(t,n),this.isOpen||(this.getElement().style.display=\"block\",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display=\"none\",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth},this.destroy=function(){this.isOpen=!1,this.$element&&this.$element.parentNode&&this.$element.parentNode.removeChild(this.$element)}}).call(i.prototype),t.Tooltip=i})),ace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),i=e(\"../lib/oop\"),s=e(\"../lib/event\"),o=e(\"../tooltip\").Tooltip;function a(e){o.call(this,e)}i.inherits(a,o),(function(){this.setPosition=function(e,t){var n=window.innerWidth||document.documentElement.clientWidth,r=window.innerHeight||document.documentElement.clientHeight,i=this.getWidth(),s=this.getHeight();n<(e+=15)+i&&(e-=e+i-n),r<(t+=15)+s&&(t-=20+s),o.prototype.setPosition.call(this,e,t)}}).call(a.prototype),t.GutterHandler=function(e){var t,n,i,o=e.editor,c=o.renderer.$gutterLayer,l=new a(o.container);function h(){t=t&&clearTimeout(t),i&&(l.hide(),i=null,o._signal(\"hideGutterTooltip\",l),o.off(\"mousewheel\",h))}function d(e){l.setPosition(e.x,e.y)}e.editor.setDefaultHandler(\"guttermousedown\",(function(t){if(o.isFocused()&&0==t.getButton()&&\"foldWidgets\"!=c.getRegion(t)){var n=t.getDocumentPosition().row,r=o.session.selection;if(t.getShiftKey())r.selectTo(n,0);else{if(2==t.domEvent.detail)return o.selectAll(),t.preventDefault();e.$clickSelection=o.selection.getLineRange(n)}return e.setState(\"selectByLines\"),e.captureMouse(t),t.preventDefault()}})),e.editor.setDefaultHandler(\"guttermousemove\",(function(s){if(r.hasCssClass(s.domEvent.target||s.domEvent.srcElement,\"ace_fold-widget\"))return h();i&&e.$tooltipFollowsMouse&&d(s),n=s,t=t||setTimeout((function(){t=null,(n&&!e.isMousePressed?function(){var t=n.getDocumentPosition().row,r=c.$annotations[t];if(!r)return h();if(t==o.session.getLength()){t=o.renderer.pixelToScreenCoordinates(0,n.y).row;var s=n.$pos;if(t>o.session.documentToScreenRow(s.row,s.column))return h()}i!=r&&(i=r.text.join(\"<br/>\"),l.setHtml(i),l.show(),o._signal(\"showGutterTooltip\",l),o.on(\"mousewheel\",h),e.$tooltipFollowsMouse?d(n):(s=n.domEvent.target.getBoundingClientRect(),(r=l.getElement().style).left=s.right+\"px\",r.top=s.bottom+\"px\"))}:h)()}),50)})),s.addListener(o.renderer.$gutter,\"mouseout\",(function(e){n=null,i&&!t&&(t=setTimeout((function(){t=null,h()}),50))}),o),o.on(\"changeSession\",h)}})),ace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/event\"),i=e(\"../lib/useragent\");t=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1},(function(){this.stopPropagation=function(){r.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){r.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos||(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY),this.$pos)},this.inSelection=function(){if(null!==this.$inSelection)return this.$inSelection;var e,t=this.editor.getSelectionRange();return t.isEmpty()?this.$inSelection=!1:(e=this.getDocumentPosition(),this.$inSelection=t.contains(e.row,e.column)),this.$inSelection},this.getButton=function(){return r.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=i.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(t.prototype)})),ace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),i=e(\"../lib/event\"),s=e(\"../lib/useragent\");function o(e){var t=e.editor,n=r.createElement(\"img\");n.src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\",s.isOpera&&(n.style.cssText=\"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\"),[\"dragWait\",\"dragWaitEnd\",\"startDrag\",\"dragReadyEnd\",\"onMouseDrag\"].forEach((function(t){e[t]=this[t]}),this),t.on(\"mousedown\",this.onMouseDown.bind(e));var o,c,l,h,d,u,f,g,p,m,C,b=t.container,v=0;function I(){var e,n,r,i,s,o,h,d,f=u;h=u=t.renderer.screenToTextCoordinates(c,l),o=f,d=Date.now(),s=!o||h.row!=o.row,o=!o||h.column!=o.column,!m||s||o?(t.moveCursorToPosition(h),m=d,C={x:c,y:l}):5<a(C.x,C.y,c,l)?m=null:200<=d-m&&(t.renderer.scrollCursorIntoView(),m=null),e=u,n=f,r=Date.now(),i=t.renderer.layerConfig.lineHeight,s=t.renderer.layerConfig.characterWidth,o=t.renderer.scroller.getBoundingClientRect(),h={x:{left:c-o.left,right:o.right-c},y:{top:l-o.top,bottom:o.bottom-l}},d=Math.min(h.x.left,h.x.right),f=Math.min(h.y.top,h.y.bottom),o={row:e.row,column:e.column},d/s<=2&&(o.column+=h.x.left<h.x.right?-3:2),f/i<=1&&(o.row+=h.y.top<h.y.bottom?-1:1),h=e.column!=o.column,n=!n||e.row!=n.row,(i=e.row!=o.row)||h&&!n?p?200<=r-p&&t.renderer.scrollCursorIntoView(o):p=r:p=null}function A(){d=t.selection.toOrientedRange(),o=t.session.addMarker(d,\"ace_selection\",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(h),I(),h=setInterval(I,20),v=0,i.addListener(document,\"mousemove\",S)}function y(){clearInterval(h),t.session.removeMarker(o),o=null,t.selection.fromOrientedRange(d),t.isFocused()&&!g&&t.$resetCursorStyle(),v=0,m=p=u=d=null,i.removeListener(document,\"mousemove\",S)}this.onDragStart=function(e){if(this.cancelDrag||!b.draggable){var r=this;return setTimeout((function(){r.startSelect(),r.captureMouse(e)}),0),e.preventDefault()}d=t.getSelectionRange();var i=e.dataTransfer;i.effectAllowed=t.getReadOnly()?\"copy\":\"copyMove\",s.isOpera&&(t.container.appendChild(n),n.scrollTop=0),i.setDragImage&&i.setDragImage(n,0,0),s.isOpera&&t.container.removeChild(n),i.clearData(),i.setData(\"Text\",t.session.getTextRange()),g=!0,this.setState(\"drag\")},this.onDragEnd=function(e){b.draggable=!1,g=!1,this.setState(null),t.getReadOnly()||(e=e.dataTransfer.dropEffect,f||\"move\"!=e||t.session.remove(t.getSelectionRange()),t.$resetCursorStyle()),this.editor.unsetStyle(\"ace_dragging\"),this.editor.renderer.setCursorStyle(\"\")},this.onDragEnter=function(e){if(!t.getReadOnly()&&x(e.dataTransfer))return c=e.clientX,l=e.clientY,o||A(),v++,e.dataTransfer.dropEffect=f=E(e),i.preventDefault(e)},this.onDragOver=function(e){if(!t.getReadOnly()&&x(e.dataTransfer))return c=e.clientX,l=e.clientY,o||(A(),v++),null!==w&&(w=null),e.dataTransfer.dropEffect=f=E(e),i.preventDefault(e)},this.onDragLeave=function(e){if(--v<=0&&o)return y(),f=null,i.preventDefault(e)},this.onDrop=function(e){if(u){var n=e.dataTransfer;if(g)switch(f){case\"move\":d=d.contains(u.row,u.column)?{start:u,end:u}:t.moveText(d,u);break;case\"copy\":d=t.moveText(d,u,!0)}else n=n.getData(\"Text\"),d={start:u,end:t.session.insert(u,n)},t.focus(),f=null;return y(),i.preventDefault(e)}},i.addListener(b,\"dragstart\",this.onDragStart.bind(e),t),i.addListener(b,\"dragend\",this.onDragEnd.bind(e),t),i.addListener(b,\"dragenter\",this.onDragEnter.bind(e),t),i.addListener(b,\"dragover\",this.onDragOver.bind(e),t),i.addListener(b,\"dragleave\",this.onDragLeave.bind(e),t),i.addListener(b,\"drop\",this.onDrop.bind(e),t);var w=null;function S(){null==w&&(w=setTimeout((function(){null!=w&&o&&y()}),20))}function x(e){return!(e=e.types)||Array.prototype.some.call(e,(function(e){return\"text/plain\"==e||\"Text\"==e}))}function E(e){var t=[\"copy\",\"copymove\",\"all\",\"uninitialized\"],n=s.isMac?e.altKey:e.ctrlKey,r=\"uninitialized\";try{r=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var i=\"none\";return n&&0<=t.indexOf(r)?i=\"copy\":0<=[\"move\",\"copymove\",\"linkmove\",\"all\",\"uninitialized\"].indexOf(r)?i=\"move\":0<=t.indexOf(r)&&(i=\"copy\"),i}}function a(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}(function(){this.dragWait=function(){Date.now()-this.mousedownEvent.time>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){this.editor.container.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.$resetCursorStyle(),this.editor.unsetStyle(\"ace_dragging\"),this.editor.renderer.setCursorStyle(\"\"),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor;e.container.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle(\"ace_dragging\"),e.renderer.setCursorStyle(s.isWin?\"default\":\"move\"),this.setState(\"dragReady\")},this.onMouseDrag=function(e){var t=this.editor.container;s.isIE&&\"dragReady\"==this.state&&3<a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)&&t.dragDrop(),\"dragWait\"===this.state&&0<a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))},this.onMouseDown=function(e){var t,n,r;this.$dragEnabled&&(this.mousedownEvent=e,t=this.editor,r=e.inSelection(),n=e.getButton(),1===(e.domEvent.detail||1)&&0===n&&r&&(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey())||(this.mousedownEvent.time=Date.now(),\"unselectable\"in(r=e.domEvent.target||e.domEvent.srcElement)&&(r.unselectable=\"on\"),t.getDragDelay()?(s.isWebKit&&(this.cancelDrag=!0,t.container.draggable=!0),this.setState(\"dragWait\")):this.startDrag(),this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0)))}}).call(o.prototype),t.DragdropHandler=o})),ace.define(\"ace/mouse/touch_handler\",[\"require\",\"exports\",\"module\",\"ace/mouse/mouse_event\",\"ace/lib/event\",\"ace/lib/dom\"],(function(e,t,n){\"use strict\";var r=e(\"./mouse_event\").MouseEvent,i=e(\"../lib/event\"),s=e(\"../lib/dom\");t.addTouchListeners=function(e,t){var n,o,a,c,l,h,d,u,f,g=\"scroll\",p=0,m=0,C=0,b=0;function v(){f||function(){function e(e){var i,o=e.target.getAttribute(\"action\");if(\"more\"==o||!r)return r=!r,i=t.getCopyText(),e=t.session.getUndoManager().hasUndo(),void f.replaceChild(s.buildDom(r?[\"span\",!i&&[\"span\",{class:\"ace_mobile-button\",action:\"selectall\"},\"Select All\"],i&&[\"span\",{class:\"ace_mobile-button\",action:\"copy\"},\"Copy\"],i&&[\"span\",{class:\"ace_mobile-button\",action:\"cut\"},\"Cut\"],n&&[\"span\",{class:\"ace_mobile-button\",action:\"paste\"},\"Paste\"],e&&[\"span\",{class:\"ace_mobile-button\",action:\"undo\"},\"Undo\"],[\"span\",{class:\"ace_mobile-button\",action:\"find\"},\"Find\"],[\"span\",{class:\"ace_mobile-button\",action:\"openCommandPallete\"},\"Pallete\"]]:[\"span\"]),f.firstChild);\"paste\"==o?n.readText().then((function(e){t.execCommand(o,e)})):o&&(\"cut\"!=o&&\"copy\"!=o||(n?n.writeText(t.getCopyText()):document.execCommand(\"copy\")),t.execCommand(o)),f.firstChild.style.display=\"none\",r=!1,\"openCommandPallete\"!=o&&t.focus()}var n=window.navigator&&window.navigator.clipboard,r=!1;f=s.buildDom([\"div\",{class:\"ace_mobile-menu\",ontouchstart:function(e){g=\"menu\",e.stopPropagation(),e.preventDefault(),t.textInput.focus()},ontouchend:function(t){t.stopPropagation(),t.preventDefault(),e(t)},onclick:e},[\"span\"],[\"span\",{class:\"ace_mobile-button\",action:\"more\"},\"...\"]],t.container)}();var e=t.renderer.textToScreenCoordinates((i=t.selection.cursor).row,i.column),n=t.renderer.textToScreenCoordinates(0,0).pageX,r=t.renderer.scrollLeft,i=t.container.getBoundingClientRect();f.style.top=e.pageY-i.top-3+\"px\",e.pageX-i.left<i.width-70?(f.style.left=\"\",f.style.right=\"10px\"):(f.style.right=\"\",f.style.left=n+r-i.left+\"px\"),f.style.display=\"\",f.firstChild.style.display=\"none\",t.on(\"input\",I)}function I(e){f&&(f.style.display=\"none\"),t.off(\"input\",I)}function A(){l=null,clearTimeout(l);var e=t.selection.getRange(),n=e.contains(d.row,d.column);!e.isEmpty()&&n||(t.selection.moveToPosition(d),t.selection.selectWord()),g=\"wait\",v()}i.addListener(e,\"contextmenu\",(function(e){u&&t.textInput.getElement().focus()}),t),i.addListener(e,\"touchstart\",(function(e){var i=e.touches;if(l||1<i.length)return clearTimeout(l),l=null,a=-1,void(g=\"zoom\");u=t.$mouseHandler.isMousePressed=!0;var s=t.renderer.layerConfig.lineHeight,h=t.renderer.layerConfig.lineHeight,f=e.timeStamp;c=f;var v=(S=i[0]).clientX,I=S.clientY;Math.abs(n-v)+Math.abs(o-I)>s&&(a=-1),n=e.clientX=v,o=e.clientY=I,C=b=0;var y=new r(e,t);if(d=y.getDocumentPosition(),f-a<500&&1==i.length&&!p)m++,e.preventDefault(),e.button=0,function(){l=null,clearTimeout(l),t.selection.moveToPosition(d);var e=2<=m?t.selection.getLineRange(d.row):t.session.getBracketRange(d);e&&!e.isEmpty()?t.selection.setRange(e):t.selection.selectWord(),g=\"wait\"}();else{m=0;var w=t.selection.cursor,S=t.selection.isEmpty()?w:t.selection.anchor;if(v=t.renderer.$cursorLayer.getPixelPosition(w,!0),I=t.renderer.$cursorLayer.getPixelPosition(S,!0),y=t.renderer.scroller.getBoundingClientRect(),S=function(e,t){return(e/=h)*e+(t=t/s-.75)*t},e.clientX<y.left)return void(g=\"zoom\");v=S(e.clientX-y.left-v.left+(w=t.renderer.scrollLeft),e.clientY-y.top-v.top+(i=t.renderer.layerConfig.offset)),i=S(e.clientX-y.left-I.left+w,e.clientY-y.top-I.top+i),v<3.5&&i<3.5&&(g=i<v?\"cursor\":\"anchor\"),g=i<3.5?\"anchor\":v<3.5?\"cursor\":\"scroll\",l=setTimeout(A,450)}a=f}),t),i.addListener(e,\"touchend\",(function(e){u=t.$mouseHandler.isMousePressed=!1,h&&clearInterval(h),\"zoom\"==g?(g=\"\",p=0):l?(t.selection.moveToPosition(d),p=0,v()):\"scroll\"==g?(p+=60,h=setInterval((function(){p--<=0&&(clearInterval(h),h=null),Math.abs(C)<.01&&(C=0),Math.abs(b)<.01&&(b=0),p<20&&(C*=.9),p<20&&(b*=.9);var e=t.session.getScrollTop();t.renderer.scrollBy(10*C,10*b),e==t.session.getScrollTop()&&(p=0)}),10),I()):v(),clearTimeout(l),l=null}),t),i.addListener(e,\"touchmove\",(function(e){if(l&&(clearTimeout(l),l=null),!(1<(h=e.touches).length||\"zoom\"==g)){var i=n-(d=h[0]).clientX,s=o-d.clientY;if(\"wait\"==g){if(!(4<i*i+s*s))return e.preventDefault();g=\"cursor\"}n=d.clientX,o=d.clientY,e.clientX=d.clientX,e.clientY=d.clientY;var a,h,d=(h=e.timeStamp)-c;c=h,\"scroll\"==g?((a=new r(e,t)).speed=1,a.wheelX=i,a.wheelY=s,10*Math.abs(i)<Math.abs(s)&&(i=0),10*Math.abs(s)<Math.abs(i)&&(s=0),0!=d&&(C=i/d,b=s/d),t._emit(\"mousewheel\",a),a.propagationStopped||(C=b=0)):(a=new r(e,t).getDocumentPosition(),\"cursor\"==g?t.selection.moveCursorToPosition(a):\"anchor\"==g&&t.selection.setSelectionAnchor(a.row,a.column),t.renderer.scrollCursorIntoView(a),e.preventDefault())}}),t)}})),ace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],(function(e,t,n){\"use strict\";var r=e(\"./dom\");t.get=function(e,t){var n=new XMLHttpRequest;n.open(\"GET\",e,!0),n.onreadystatechange=function(){4===n.readyState&&t(n.responseText)},n.send(null)},t.loadScript=function(e,t){var n=r.getDocumentHead(),i=document.createElement(\"script\");i.src=e,n.appendChild(i),i.onload=i.onreadystatechange=function(e,n){!n&&i.readyState&&\"loaded\"!=i.readyState&&\"complete\"!=i.readyState||(i=i.onload=i.onreadystatechange=null,n||t())}},t.qualifyURL=function(e){var t=document.createElement(\"a\");return t.href=e,t.href}})),ace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";function r(){this.propagationStopped=!0}function i(){this.defaultPrevented=!0}var s={};s._emit=s._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],s=this._defaultHandlers[e];if(n.length||s){\"object\"==typeof t&&t||(t={}),t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=r),t.preventDefault||(t.preventDefault=i),n=n.slice();for(var o=0;o<n.length&&(n[o](t,this),!t.propagationStopped);o++);return s&&!t.defaultPrevented?s(t,this):void 0}},s._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(n){n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)}},s.once=function(e,t){var n=this;if(this.on(e,(function r(){n.off(e,r),t.apply(null,arguments)})),!t)return new Promise((function(e){t=e}))},s.setDefaultHandler=function(e,t){var n,r,i=this._defaultHandlers;(i=i||(this._defaultHandlers={_disabled_:{}}))[e]&&(r=i[e],(n=i._disabled_[e])||(i._disabled_[e]=n=[]),n.push(r),-1!=(r=n.indexOf(t))&&n.splice(r,1)),i[e]=t},s.removeDefaultHandler=function(e,t){var n,r=this._defaultHandlers;r&&(n=r._disabled_[e],r[e]==t?n&&this.setDefaultHandler(e,n.pop()):!n||-1!=(t=n.indexOf(t))&&n.splice(t,1))},s.on=s.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return-1==(r=r||(this._eventRegistry[e]=[])).indexOf(t)&&r[n?\"unshift\":\"push\"](t),t},s.off=s.removeListener=s.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{},!(e=this._eventRegistry[e])||-1!==(t=e.indexOf(t))&&e.splice(t,1)},s.removeAllListeners=function(e){e||(this._eventRegistry=this._defaultHandlers=void 0),this._eventRegistry&&(this._eventRegistry[e]=void 0),this._defaultHandlers&&(this._defaultHandlers[e]=void 0)},t.EventEmitter=s})),ace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],(function(e,t,n){var r=e(\"./oop\"),i=e(\"./event_emitter\").EventEmitter,s={setOptions:function(e){Object.keys(e).forEach((function(t){this.setOption(t,e[t])}),this)},getOptions:function(e){var t,n={};return e?Array.isArray(e)||(n=e,e=Object.keys(n)):(t=this.$options,e=Object.keys(t).filter((function(e){return!t[e].hidden}))),e.forEach((function(e){n[e]=this.getOption(e)}),this),n},setOption:function(e,t){if(this[\"$\"+e]!==t){var n=this.$options[e];return n?n.forwardTo?this[n.forwardTo]&&this[n.forwardTo].setOption(e,t):(n.handlesSet||(this[\"$\"+e]=t),void(n&&n.set&&n.set.call(this,t))):o('misspelled option \"'+e+'\"')}},getOption:function(e){var t=this.$options[e];return t?t.forwardTo?this[t.forwardTo]&&this[t.forwardTo].getOption(e):t&&t.get?t.get.call(this):this[\"$\"+e]:o('misspelled option \"'+e+'\"')}};function o(e){\"undefined\"!=typeof console&&console.warn&&console.warn.apply(console,arguments)}function a(e,t){var n=new Error(e);n.data=t,\"object\"==typeof console&&console.error&&console.error(n),setTimeout((function(){throw n}))}(function(){r.implement(this,i),this.defineOptions=function(e,t,n){return e.$options||(this.$defaultOptions[t]=e.$options={}),Object.keys(n).forEach((function(t){var r=n[t];\"string\"==typeof r&&(r={forwardTo:r}),r.name||(r.name=t),\"initialValue\"in(e.$options[r.name]=r)&&(e[\"$\"+r.name]=r.initialValue)})),r.implement(e,s),this},this.resetOptions=function(e){Object.keys(e.$options).forEach((function(t){var n=e.$options[t];\"value\"in n&&e.setOption(t,n.value)}))},this.setDefaultValue=function(e,t,n){if(!e){for(e in this.$defaultOptions)if(this.$defaultOptions[e][t])break;if(!this.$defaultOptions[e][t])return!1}var r=this.$defaultOptions[e]||(this.$defaultOptions[e]={});r[t]&&(r.forwardTo?this.setDefaultValue(r.forwardTo,t,n):r[t].value=n)},this.setDefaultValues=function(e,t){Object.keys(t).forEach((function(n){this.setDefaultValue(e,n,t[n])}),this)},this.warn=o,this.reportError=a}).call((e=function(){this.$defaultOptions={}}).prototype),t.AppConfig=e})),ace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/app_config\"],(function(e,t,r){var i=e(\"./lib/lang\"),s=(e(\"./lib/oop\"),e(\"./lib/net\")),o=e(\"./lib/app_config\").AppConfig;r.exports=t=new o;var a=function(){return this||\"undefined\"!=typeof window&&window}(),c={packaged:!1,workerPath:null,modePath:null,themePath:null,basePath:\"\",suffix:\".js\",$moduleUrls:{},loadWorkerFromBlob:!0,sharedPopups:!1};t.get=function(e){if(!c.hasOwnProperty(e))throw new Error(\"Unknown config key: \"+e);return c[e]},t.set=function(e,t){if(c.hasOwnProperty(e))c[e]=t;else if(0==this.setDefaultValue(\"\",e,t))throw new Error(\"Unknown config key: \"+e)},t.all=function(){return i.copyObject(c)},t.$modes={},t.moduleUrl=function(e,t){if(c.$moduleUrls[e])return c.$moduleUrls[e];var n=e.split(\"/\"),r=\"snippets\"==(t=t||n[n.length-2]||\"\")?\"/\":\"-\",i=n[n.length-1];return\"worker\"==t&&\"-\"==r&&(e=new RegExp(\"^\"+t+\"[\\\\-_]|[\\\\-_]\"+t+\"$\",\"g\"),i=i.replace(e,\"\")),(!i||i==t)&&1<n.length&&(i=n[n.length-2]),null==(n=c[t+\"Path\"])?n=c.basePath:\"/\"==r&&(t=r=\"\"),n&&\"/\"!=n.slice(-1)&&(n+=\"/\"),n+t+r+i+this.get(\"suffix\")},t.setModuleUrl=function(e,t){return c.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(n,r){var i,o;Array.isArray(n)&&(o=n[0],n=n[1]);try{i=e(n)}catch(r){}if(i&&!t.$loading[n])return r&&r(i);if(t.$loading[n]||(t.$loading[n]=[]),t.$loading[n].push(r),!(1<t.$loading[n].length)){if(r=function(){e([n],(function(e){t._emit(\"load.module\",{name:n,module:e});var r=t.$loading[n];t.$loading[n]=null,r.forEach((function(t){t&&t(e)}))}))},!t.get(\"packaged\"))return r();s.loadScript(t.moduleUrl(n,o),r),l()}};var l=function(){c.basePath||c.workerPath||c.modePath||c.themePath||Object.keys(c.$moduleUrls).length||(console.error(\"Unable to infer path to ace from script src,\",\"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\",\"or with webpack use ace/webpack-resolver\"),l=function(){})};function h(i){if(a&&a.document){c.packaged=i||e.packaged||r.packaged||a.define&&n.amdD.packaged;for(var s,o={},l=\"\",h=((i=document.currentScript||document._currentScript)&&i.ownerDocument||document).getElementsByTagName(\"script\"),d=0;d<h.length;d++){var u=h[d],f=u.src||u.getAttribute(\"src\");if(f){for(var g=u.attributes,p=0,m=g.length;p<m;p++){var C=g[p];0===C.name.indexOf(\"data-ace-\")&&(o[C.name.replace(/^data-ace-/,\"\").replace(/-(.)/g,(function(e,t){return t.toUpperCase()}))]=C.value)}(f=f.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/))&&(l=f[1])}}for(s in l&&(o.base=o.base||l,o.packaged=!0),o.basePath=o.base,o.workerPath=o.workerPath||o.base,o.modePath=o.modePath||o.base,o.themePath=o.themePath||o.base,delete o.base,o)void 0!==o[s]&&t.set(s,o[s])}}h(!0),t.init=h,t.version=\"1.4.12\"})),ace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/mouse/touch_handler\",\"ace/config\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/event\"),i=e(\"../lib/useragent\"),s=e(\"./default_handlers\").DefaultHandlers,o=e(\"./default_gutter_handler\").GutterHandler,a=e(\"./mouse_event\").MouseEvent,c=e(\"./dragdrop_handler\").DragdropHandler,l=e(\"./touch_handler\").addTouchListeners,h=e(\"../config\");(function(){this.onMouseEvent=function(e,t){this.editor._emit(e,new a(t,this.editor))},this.onMouseMove=function(e,t){var n=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;n&&n.length&&this.editor._emit(e,new a(t,this.editor))},this.onMouseWheel=function(e,t){var n=new a(t,this.editor);n.speed=2*this.$scrollSpeed,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.setState=function(e){this.state=e},this.captureMouse=function(e,t){this.x=e.x,this.y=e.y,this.isMousePressed=!0;var n=this.editor,s=this.editor.renderer;function o(e){if(e){if(i.isWebKit&&!e.which&&l.releaseMouse)return l.releaseMouse();l.x=e.clientX,l.y=e.clientY,t&&t(e),l.mouseEvent=new a(e,l.editor),l.$mouseMoved=!0}}function c(e){n.off(\"beforeEndOperation\",d),clearInterval(u),h(),l[l.state+\"End\"]&&l[l.state+\"End\"](e),l.state=\"\",l.isMousePressed=s.$isMousePressed=!1,s.$keepTextAreaAtCursor&&s.$moveTextAreaToCursor(),l.$onCaptureMouseMove=l.releaseMouse=null,e&&l.onMouseEvent(\"mouseup\",e),n.endOperation()}s.$isMousePressed=!0;var l=this,h=function(){l[l.state]&&l[l.state](),l.$mouseMoved=!1};if(i.isOldIE&&\"dblclick\"==e.domEvent.type)return setTimeout((function(){c(e)}));var d=function(e){l.releaseMouse&&n.curOp.command.name&&n.curOp.selectionChanged&&(l[l.state+\"End\"]&&l[l.state+\"End\"](),l.state=\"\",l.releaseMouse())};n.on(\"beforeEndOperation\",d),n.startOperation({command:{name:\"mouse\"}}),l.$onCaptureMouseMove=o,l.releaseMouse=r.capture(this.editor.container,o,c);var u=setInterval(h,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var e=(function(t){t&&t.domEvent&&\"contextmenu\"!=t.domEvent.type||(this.editor.off(\"nativecontextmenu\",e),t&&t.domEvent&&r.stopEvent(t.domEvent))}).bind(this);setTimeout(e,10),this.editor.on(\"nativecontextmenu\",e)},this.destroy=function(){this.releaseMouse&&this.releaseMouse()}}).call((e=function(e){var t=this;function n(t){document.hasFocus&&document.hasFocus()&&(e.isFocused()||document.activeElement!=(e.textInput&&e.textInput.getElement()))||window.focus(),e.focus()}this.editor=e,new s(this),new o(this),new c(this);var a=e.renderer.getMouseEventTarget();r.addListener(a,\"click\",this.onMouseEvent.bind(this,\"click\"),e),r.addListener(a,\"mousemove\",this.onMouseMove.bind(this,\"mousemove\"),e),r.addMultiMouseDownListener([a,e.renderer.scrollBarV&&e.renderer.scrollBarV.inner,e.renderer.scrollBarH&&e.renderer.scrollBarH.inner,e.textInput&&e.textInput.getElement()].filter(Boolean),[400,300,250],this,\"onMouseEvent\",e),r.addMouseWheelListener(e.container,this.onMouseWheel.bind(this,\"mousewheel\"),e),l(e.container,e);var h=e.renderer.$gutter;r.addListener(h,\"mousedown\",this.onMouseEvent.bind(this,\"guttermousedown\"),e),r.addListener(h,\"click\",this.onMouseEvent.bind(this,\"gutterclick\"),e),r.addListener(h,\"dblclick\",this.onMouseEvent.bind(this,\"gutterdblclick\"),e),r.addListener(h,\"mousemove\",this.onMouseEvent.bind(this,\"guttermousemove\"),e),r.addListener(a,\"mousedown\",n,e),r.addListener(h,\"mousedown\",n,e),i.isIE&&e.renderer.scrollBarV&&(r.addListener(e.renderer.scrollBarV.element,\"mousedown\",n,e),r.addListener(e.renderer.scrollBarH.element,\"mousedown\",n,e)),e.on(\"mousemove\",(function(n){var r,i;t.state||t.$dragDelay||!t.$dragEnabled||(r=e.renderer.screenToTextCoordinates(n.x,n.y),i=e.session.selection.getRange(),n=e.renderer,!i.isEmpty()&&i.insideStart(r.row,r.column)?n.setCursorStyle(\"default\"):n.setCursorStyle(\"\"))}),e)}).prototype),h.defineOptions(e.prototype,\"mouseHandler\",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:i.isMac?150:0},dragEnabled:{initialValue:!0},focusTimeout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),t.MouseHandler=e})),ace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/dom\");t.FoldHandler=function(e){e.on(\"click\",(function(t){var n=t.getDocumentPosition(),i=e.session;(n=i.getFoldAt(n.row,n.column,1))&&(t.getAccelKey()?i.removeFold(n):i.expandFold(n),t.stop()),(t=t.domEvent&&t.domEvent.target)&&r.hasCssClass(t,\"ace_inline_button\")&&r.hasCssClass(t,\"ace_toggle_wrap\")&&(i.setOption(\"wrap\",!i.getUseWrapMode()),e.renderer.scrollCursorIntoView())})),e.on(\"gutterclick\",(function(t){var n,r;\"foldWidgets\"==e.renderer.$gutterLayer.getRegion(t)&&(n=t.getDocumentPosition().row,(r=e.session).foldWidgets&&r.foldWidgets[n]&&e.session.onFoldWidgetClick(n,t),e.isFocused()||e.focus(),t.stop())})),e.on(\"gutterdblclick\",(function(t){var n,r,i;\"foldWidgets\"==e.renderer.$gutterLayer.getRegion(t)&&(i=t.getDocumentPosition().row,(r=(r=(n=e.session).getParentFoldRangeData(i,!0)).range||r.firstRange)&&((i=n.getFoldAt(i=r.start.row,n.getLine(i).length,1))?n.removeFold(i):(n.addFold(\"...\",r),e.renderer.scrollCursorIntoView({row:r.start.row,column:0}))),t.stop())}))}})),ace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/keys\"),i=e(\"../lib/event\");(function(){this.setDefaultHandler=function(e){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=e,this.addKeyboardHandler(e,0)},this.setKeyboardHandler=function(e){var t=this.$handlers;if(t[t.length-1]!=e){for(;t[t.length-1]&&t[t.length-1]!=this.$defaultHandler;)this.removeKeyboardHandler(t[t.length-1]);this.addKeyboardHandler(e,1)}},this.addKeyboardHandler=function(e,t){var n;e&&(\"function\"!=typeof e||e.handleKeyboard||(e.handleKeyboard=e),-1!=(n=this.$handlers.indexOf(e))&&this.$handlers.splice(n,1),null==t?this.$handlers.push(e):this.$handlers.splice(t,0,e),-1==n&&e.attach&&e.attach(this.$editor))},this.removeKeyboardHandler=function(e){var t=this.$handlers.indexOf(e);return-1!=t&&(this.$handlers.splice(t,1),e.detach&&e.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.getStatusText=function(){var e=this.$data,t=e.editor;return this.$handlers.map((function(n){return n.getStatusText&&n.getStatusText(t,e)||\"\"})).filter(Boolean).join(\" \")},this.$callKeyboardHandlers=function(e,t,n,r){for(var s,o=!1,a=this.$editor.commands,c=this.$handlers.length;c--&&!((s=this.$handlers[c].handleKeyboard(this.$data,e,t,n,r))&&s.command&&((o=\"null\"==s.command||a.exec(s.command,this.$editor,s.args,r))&&r&&-1!=e&&1!=s.passEvent&&1!=s.command.passEvent&&i.stopEvent(r),o)););return o||-1!=e||(s={command:\"insertstring\"},o=a.exec(\"insertstring\",this.$editor,t)),o&&this.$editor._signal&&this.$editor._signal(\"keyboardActivity\",s),o},this.onCommandKey=function(e,t,n){var i=r.keyCodeToString(n);return this.$callKeyboardHandlers(t,i,n,e)},this.onTextInput=function(e){return this.$callKeyboardHandlers(-1,e)}}).call((e=function(e){this.$editor=e,this.$data={editor:e},this.$handlers=[],this.setDefaultHandler(e.commands)}).prototype),t.KeyBinding=e})),ace.define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";var r=0,i=0,s=!1,o=!1,a=!1,c=[[0,3,0,1,0,0,0],[0,3,0,1,2,2,0],[0,3,0,17,2,0,1],[0,3,5,5,4,1,0],[0,3,21,21,4,0,1],[0,3,5,5,4,2,0]],l=[[2,0,1,1,0,1,0],[2,0,1,1,0,2,0],[2,0,2,1,3,2,0],[2,0,2,33,3,1,1]],h=11,d=18,u=[d,d,d,d,d,d,d,d,d,6,5,6,8,5,d,d,d,d,d,d,d,d,d,d,d,d,d,d,5,5,5,6,8,4,4,h,h,h,4,4,4,4,4,10,9,10,9,9,2,2,2,2,2,2,2,2,2,2,9,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,d,d,d,d,d,d,5,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,9,4,h,h,h,h,4,4,4,4,0,4,4,d,4,4,h,h,2,2,4,0,4,4,4,2,0,4,4,4,4,4],f=[8,8,8,8,8,8,8,8,8,8,8,d,d,d,0,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8,5,13,14,15,16,17,9,h,h,h,h,h,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,9,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8];function g(e,t,n){if(!(i<e))if(1!=e||1!=r||o)for(var s,a,c,l,h=n.length,d=0;d<h;){if(t[d]>=e){for(s=d+1;s<h&&t[s]>=e;)s++;for(a=d,c=s-1;a<c;a++,c--)l=n[a],n[a]=n[c],n[c]=l;d=s}d++}else n.reverse()}function p(e){var t=e.charCodeAt(0),n=t>>8;return 0==n?191<t?0:u[t]:5==n?/[\\u0591-\\u05f4]/.test(e)?1:0:6==n?/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(e)?12:/[\\u0660-\\u0669\\u066b-\\u066c]/.test(e)?3:1642==t?h:/[\\u06f0-\\u06f9]/.test(e)?2:7:32==n&&t<=8287?f[255&t]:254==n&&65136<=t?7:4}t.L=0,t.R=1,t.EN=2,t.ON_R=3,t.AN=4,t.R_H=5,t.B=6,t.RLE=7,t.DOT=\"\\xb7\",t.doBidiReorder=function(e,n,u){if(e.length<2)return{};var f=e.split(\"\"),m=new Array(f.length),C=new Array(f.length),b=[];r=u?1:0,function(e,t,n,u){var f,g,m,C,b=r?l:c,v=0,I=-1,A=null,y=null,w=[];if(!u)for(A=0,u=[];A<n;A++)u[A]=p(e[A]);for(i=r,a=o=s=!1,y=0;y<n;y++){if(f=v,w[y]=g=function(e,t,n,i){var c,l,u,f=t[i];switch(f){case 0:case 1:s=!1;case 4:case 3:return f;case 2:return s?3:2;case 7:return s=!0,1;case 8:return 4;case 9:return i<1||i+1>=t.length||2!=(c=n[i-1])&&3!=c||2!=(g=t[i+1])&&3!=g?4:(s&&(g=3),g==c?g:4);case 10:return 2==(c=0<i?n[i-1]:5)&&i+1<t.length&&2==t[i+1]?2:4;case h:if(0<i&&2==n[i-1])return 2;if(s)return 4;for(u=i+1,l=t.length;u<l&&t[u]==h;)u++;return u<l&&2==t[u]?2:4;case 12:for(l=t.length,u=i+1;u<l&&12==t[u];)u++;var g;return u<l&&(c=t[u],(g=1425<=(g=e[i])&&g<=2303||64286==g)&&(1==c||7==c))?1:i<1||5==(c=t[i-1])?4:n[i-1];case 5:return o=!(s=!1),r;case 6:return a=!0,4;case 13:case 14:case 16:case 17:case 15:s=!1;case d:return 4}}(e,u,w,y),C=240&(v=b[f][g]),t[y]=m=b[v&=15][5],0<C)if(16==C){for(A=I;A<y;A++)t[A]=1;I=-1}else I=-1;if(b[v][6])-1==I&&(I=y);else if(-1<I){for(A=I;A<y;A++)t[A]=m;I=-1}5==u[y]&&(t[y]=0),i|=m}if(a)for(A=0;A<n;A++)if(6==u[A]){t[A]=r;for(var S=A-1;0<=S&&8==u[S];S--)t[S]=r}}(f,b,f.length,n);for(var v=0;v<m.length;m[v]=v,v++);for(g(2,b,m),g(1,b,m),v=0;v<m.length-1;v++)3===n[v]?b[v]=t.AN:1===b[v]&&(n[v]>7&&n[v]<13||4===n[v]||n[v]===d)?b[v]=t.ON_R:0<v&&\"\\u0644\"===f[v-1]&&/\\u0622|\\u0623|\\u0625|\\u0627/.test(f[v])&&(b[v-1]=b[v]=t.R_H,v++);for(f[f.length-1]===t.DOT&&(b[f.length-1]=t.B),\"\\u202b\"===f[0]&&(b[0]=t.RLE),v=0;v<m.length;v++)C[v]=b[m[v]];return{logicalFromVisual:m,bidiLevels:C}},t.hasBidiCharacters=function(e,t){for(var n=!1,r=0;r<e.length;r++)t[r]=p(e.charAt(r)),n||1!=t[r]&&7!=t[r]&&3!=t[r]||(n=!0);return n},t.getVisualFromLogicalIdx=function(e,t){for(var n=0;n<t.logicalFromVisual.length;n++)if(t.logicalFromVisual[n]==e)return n;return 0}})),ace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"],(function(e,t,n){\"use strict\";var r=e(\"./lib/bidiutil\"),i=e(\"./lib/lang\"),s=/[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;(function(){this.isBidiRow=function(e,t,n){return!!this.seenBidi&&(e!==this.currentRow&&(this.currentRow=e,this.updateRowLine(t,n),this.updateBidiMap()),this.bidiMap.bidiLevels)},this.onChange=function(e){this.seenBidi?this.currentRow=null:\"insert\"==e.action&&s.test(e.lines.join(\"\\n\"))&&(this.seenBidi=!0,this.currentRow=null)},this.getDocumentRow=function(){var e=0,t=this.session.$screenRowCache;return!t.length||0<=(t=this.session.$getRowCacheIndex(t,this.currentRow))&&(e=this.session.$docRowCache[t]),e},this.getSplitIndex=function(){var e=0,t=this.session.$screenRowCache;if(t.length)for(var n,r=this.session.$getRowCacheIndex(t,this.currentRow);0<this.currentRow-e&&(n=this.session.$getRowCacheIndex(t,this.currentRow-e-1))===r;)r=n,e++;else e=this.currentRow;return e},this.updateRowLine=function(e,t){void 0===e&&(e=this.getDocumentRow());var n=e===this.session.getLength()-1?this.EOF:this.EOL;this.wrapIndent=0,this.line=this.session.getLine(e),this.isRtlDir=this.$isRtl||this.line.charAt(0)===this.RLE,this.session.$useWrapMode?((e=this.session.$wrapData[e])&&(void 0===t&&(t=this.getSplitIndex()),0<t&&e.length?(this.wrapIndent=e.indent,this.wrapOffset=this.wrapIndent*this.charWidths[r.L],this.line=t<e.length?this.line.substring(e[t-1],e[t]):this.line.substring(e[e.length-1])):this.line=this.line.substring(0,e[t])),t==e.length&&(this.line+=this.showInvisibles?n:r.DOT)):this.line+=this.showInvisibles?n:r.DOT;var s,o=this.session,a=0;this.line=this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g,(function(e,t){return\"\\t\"===e||o.isFullWidth(e.charCodeAt(0))?(s=\"\\t\"===e?o.getScreenTabSize(t+a):2,a+=s-1,i.stringRepeat(r.DOT,s)):e})),this.isRtlDir&&(this.fontMetrics.$main.textContent=this.line.charAt(this.line.length-1)==r.DOT?this.line.substr(0,this.line.length-1):this.line,this.rtlLineOffset=this.contentWidth-this.fontMetrics.$main.getBoundingClientRect().width)},this.updateBidiMap=function(){var e=[];this.bidiMap=r.hasBidiCharacters(this.line,e)||this.isRtlDir?r.doBidiReorder(this.line,e,this.isRtlDir):{}},this.markAsDirty=function(){this.currentRow=null},this.updateCharacterWidths=function(e){var t;this.characterWidth!==e.$characterSize.width&&(this.fontMetrics=e,t=this.characterWidth=e.$characterSize.width,e=e.$measureCharWidth(\"\\u05d4\"),this.charWidths[r.L]=this.charWidths[r.EN]=this.charWidths[r.ON_R]=t,this.charWidths[r.R]=this.charWidths[r.AN]=e,this.charWidths[r.R_H]=.45*e,this.charWidths[r.B]=this.charWidths[r.RLE]=0,this.currentRow=null)},this.setShowInvisibles=function(e){this.showInvisibles=e,this.currentRow=null},this.setEolChar=function(e){this.EOL=e},this.setContentWidth=function(e){this.contentWidth=e},this.isRtlLine=function(e){return!!this.$isRtl||(null!=e?this.session.getLine(e).charAt(0)==this.RLE:this.isRtlDir)},this.setRtlDirection=function(e,t){for(var n=e.getCursorPosition(),r=e.selection.getSelectionAnchor().row;r<=n.row;r++)t||e.session.getLine(r).charAt(0)!==e.session.$bidiHandler.RLE?t&&e.session.getLine(r).charAt(0)!==e.session.$bidiHandler.RLE&&e.session.doc.insert({column:0,row:r},e.session.$bidiHandler.RLE):e.session.doc.removeInLine(r,0,1)},this.getPosLeft=function(e){e-=this.wrapIndent;var t=this.line.charAt(0)===this.RLE?1:0,n=t<e?this.session.getOverwrite()?e:e-1:t,i=r.getVisualFromLogicalIdx(n,this.bidiMap),s=this.bidiMap.bidiLevels,o=0;!this.session.getOverwrite()&&e<=t&&s[i]%2!=0&&i++;for(var a=0;a<i;a++)o+=this.charWidths[s[a]];return!this.session.getOverwrite()&&t<e&&s[i]%2==0&&(o+=this.charWidths[s[i]]),this.wrapIndent&&(o+=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset),this.isRtlDir&&(o+=this.rtlLineOffset),o},this.getSelections=function(e,t){var n,r=this.bidiMap,i=r.bidiLevels,s=[],o=0,a=Math.min(e,t)-this.wrapIndent,c=Math.max(e,t)-this.wrapIndent,l=!1,h=!1,d=0;this.wrapIndent&&(o+=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset);for(var u,f=0;f<i.length;f++)n=i[f],(l=a<=(u=r.logicalFromVisual[f])&&u<c)&&!h?d=o:!l&&h&&s.push({left:d,width:o-d}),o+=this.charWidths[n],h=l;if(l&&f===i.length&&s.push({left:d,width:o-d}),this.isRtlDir)for(var g=0;g<s.length;g++)s[g].left+=this.rtlLineOffset;return s},this.offsetToCol=function(e){this.isRtlDir&&(e-=this.rtlLineOffset);var t=0,n=(e=Math.max(e,0),0),r=0,i=this.bidiMap.bidiLevels,s=this.charWidths[i[r]];for(this.wrapIndent&&(e-=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset);n+s/2<e;){if(n+=s,r===i.length-1){s=0;break}s=this.charWidths[i[++r]]}return 0===(t=0<r&&i[r-1]%2!=0&&i[r]%2==0?(e<n&&r--,this.bidiMap.logicalFromVisual[r]):0<r&&i[r-1]%2==0&&i[r]%2!=0?1+(n<e?this.bidiMap.logicalFromVisual[r]:this.bidiMap.logicalFromVisual[r-1]):this.isRtlDir&&r===i.length-1&&0===s&&i[r-1]%2==0||!this.isRtlDir&&0===r&&i[r]%2!=0?1+this.bidiMap.logicalFromVisual[r]:(0<r&&i[r-1]%2!=0&&0!==s&&r--,this.bidiMap.logicalFromVisual[r]))&&this.isRtlDir&&t++,t+this.wrapIndent}}).call((e=function(e){this.session=e,this.bidiMap={},this.currentRow=null,this.bidiUtil=r,this.charWidths=[],this.EOL=\"\\xac\",this.showInvisibles=!0,this.isRtlDir=!1,this.$isRtl=!1,this.line=\"\",this.wrapIndent=0,this.EOF=\"\\xb6\",this.RLE=\"\\u202b\",this.contentWidth=0,this.fontMetrics=null,this.rtlLineOffset=0,this.wrapOffset=0,this.isMoveLeftOperation=!1,this.seenBidi=s.test(e.getValue())}).prototype),t.BidiHandler=e})),ace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/lang\"),s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range;(function(){r.implement(this,s),this.isEmpty=function(){return this.$isEmpty||this.anchor.row==this.lead.row&&this.anchor.column==this.lead.column},this.isMultiLine=function(){return!this.$isEmpty&&this.anchor.row!=this.cursor.row},this.getCursor=function(){return this.lead.getPosition()},this.setSelectionAnchor=function(e,t){this.$isEmpty=!1,this.anchor.setPosition(e,t)},this.getAnchor=this.getSelectionAnchor=function(){return this.$isEmpty?this.getSelectionLead():this.anchor.getPosition()},this.getSelectionLead=function(){return this.lead.getPosition()},this.isBackwards=function(){var e=this.anchor,t=this.lead;return e.row>t.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.$isEmpty?o.fromPoints(t,t):this.isBackwards()?o.fromPoints(t,e):o.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit(\"changeSelection\"))},this.selectAll=function(){this.$setSelection(0,0,Number.MAX_VALUE,Number.MAX_VALUE)},this.setRange=this.setSelectionRange=function(e,t){var n=t?e.end:e.start;this.$setSelection(n.row,n.column,(e=t?e.start:e.end).row,e.column)},this.$setSelection=function(e,t,n,r){var i,s;this.$silent||(i=this.$isEmpty,s=this.inMultiSelectMode,this.$silent=!0,this.$cursorChanged=this.$anchorChanged=!1,this.anchor.setPosition(e,t),this.cursor.setPosition(n,r),this.$isEmpty=!o.comparePoints(this.anchor,this.cursor),this.$silent=!1,this.$cursorChanged&&this._emit(\"changeCursor\"),(this.$cursorChanged||this.$anchorChanged||i!=this.$isEmpty||s)&&this._emit(\"changeSelection\"))},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection((function(){this.moveCursorTo(e,t)}))},this.selectToPosition=function(e){this.$moveSelection((function(){this.moveCursorToPosition(e)}))},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){var n;return void 0===t&&(e=(n=e||this.lead).row,t=n.column),this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor();e=this.session.getAWordRange(e.row,e.column),this.setSelectionRange(e)},this.getLineRange=function(e,t){var n=\"number\"==typeof e?e:this.lead.row;return e=(e=this.session.getFoldLine(n))?(n=e.start.row,e.end.row):n,!0===t?new o(n,0,e,this.session.getLine(e).length):new o(n,0,e+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.wouldMoveIntoSoftTab=function(e,t,n){var r=e.column,i=e.column+t;return n<0&&(r=e.column-t,i=e.column),this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(r,i).split(\" \").length-1==t},this.moveCursorLeft=function(){var e,t=this.lead.getPosition();(e=this.session.getFoldAt(t.row,t.column,-1))?this.moveCursorTo(e.start.row,e.start.column):0===t.column?0<t.row&&this.moveCursorTo(t.row-1,this.doc.getLine(t.row-1).length):(e=this.session.getTabSize(),this.wouldMoveIntoSoftTab(t,e,-1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,-e):this.moveCursorBy(0,-1))},this.moveCursorRight=function(){var e,t=this.lead.getPosition();(e=this.session.getFoldAt(t.row,t.column,1))?this.moveCursorTo(e.end.row,e.end.column):this.lead.column==this.doc.getLine(this.lead.row).length?this.lead.row<this.doc.getLength()-1&&this.moveCursorTo(this.lead.row+1,0):(e=this.session.getTabSize(),this.wouldMoveIntoSoftTab(t=this.lead,e,1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,e):this.moveCursorBy(0,1))},this.moveCursorLineStart=function(){var e,t=this.lead.column,n=this.session.documentToScreenRow(e=this.lead.row,t);n=this.session.screenToDocumentPosition(n,0),(e=this.session.getDisplayLine(e,null,n.row,n.column).match(/^\\s*/))[0].length==t||this.session.$useEmacsStyleLineStart||(n.column+=e[0].length),this.moveCursorToPosition(n)},this.moveCursorLineEnd=function(){var e=this.lead,t=this.session.getDocumentLastRowColumnPosition(e.row,e.column);this.lead.column==t.column&&(e=this.session.getLine(t.row),t.column!=e.length||0<(e=e.search(/\\s+$/))&&(t.column=e)),this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var i=this.session.getFoldAt(e,t,1);if(i)this.moveCursorTo(i.end.row,i.end.column);else{if(this.session.nonTokenRe.exec(r)&&(t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,r=n.substring(t)),t>=n.length)return this.moveCursorTo(e,n.length),this.moveCursorRight(),void(e<this.doc.getLength()-1&&this.moveCursorWordRight());this.session.tokenRe.exec(r)&&(t+=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(e,t)}},this.moveCursorLongWordLeft=function(){var e=this.lead.row,t=this.lead.column;if(n=this.session.getFoldAt(e,t,-1))this.moveCursorTo(n.start.row,n.start.column);else{var n=this.session.getFoldStringAt(e,t,-1);if(null==n&&(n=this.doc.getLine(e).substring(0,t)),n=i.stringReverse(n),this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0,this.session.nonTokenRe.exec(n)&&(t-=this.session.nonTokenRe.lastIndex,n=n.slice(this.session.nonTokenRe.lastIndex),this.session.nonTokenRe.lastIndex=0),t<=0)return this.moveCursorTo(e,0),this.moveCursorLeft(),void(0<e&&this.moveCursorWordLeft());this.session.tokenRe.exec(n)&&(t-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(e,t)}},this.$shortWordEndIndex=function(e){var t,n=0,r=/\\s/,i=this.session.tokenRe;if(i.lastIndex=0,this.session.tokenRe.exec(e))n=this.session.tokenRe.lastIndex;else{for(;(t=e[n])&&r.test(t);)n++;if(n<1)for(i.lastIndex=0;(t=e[n])&&!i.test(t);)if(i.lastIndex=0,n++,r.test(t)){if(2<n){n--;break}for(;(t=e[n])&&r.test(t);)n++;if(2<n)break}}return i.lastIndex=0,n},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t),i=this.session.getFoldAt(e,t,1);if(i)return this.moveCursorTo(i.end.row,i.end.column);if(t==n.length){for(var s=this.doc.getLength();e++,r=this.doc.getLine(e),e<s&&/^\\s*$/.test(r););/^\\s+/.test(r)||(r=\"\"),t=0}n=this.$shortWordEndIndex(r),this.moveCursorTo(e,t+n)},this.moveCursorShortWordLeft=function(){var e=this.lead.row,t=this.lead.column;if(r=this.session.getFoldAt(e,t,-1))return this.moveCursorTo(r.start.row,r.start.column);var n=this.session.getLine(e).substring(0,t);if(0===t){for(;e--,n=this.doc.getLine(e),0<e&&/^\\s*$/.test(n););t=n.length,/\\s+$/.test(n)||(n=\"\")}var r=i.stringReverse(n);return r=this.$shortWordEndIndex(r),this.moveCursorTo(e,t-r)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var n,r=this.session.documentToScreenPosition(this.lead.row,this.lead.column);0===t&&(0!==e&&(this.session.$bidiHandler.isBidiRow(r.row,this.lead.row)?(i=this.session.$bidiHandler.getPosLeft(r.column),r.column=Math.round(i/this.session.$bidiHandler.charWidths[0])):i=r.column*this.session.$bidiHandler.charWidths[0]),this.$desiredColumn?r.column=this.$desiredColumn:this.$desiredColumn=r.column),0!=e&&this.session.lineWidgets&&this.session.lineWidgets[this.lead.row]&&(n=this.session.lineWidgets[this.lead.row],e<0?e-=n.rowsAbove||0:0<e&&(e+=n.rowCount-(n.rowsAbove||0)));var i=this.session.screenToDocumentPosition(r.row+e,r.column,i);this.moveCursorTo(i.row,i.column+t,0===t)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,n){var r=this.session.getFoldAt(e,t,1);r&&(e=r.start.row,t=r.start.column),this.$keepDesiredColumnOnChange=!0,r=this.session.getLine(e),/[\\uDC00-\\uDFFF]/.test(r.charAt(t))&&r.charAt(t-1)&&(this.lead.row==e&&this.lead.column==t+1?--t:t+=1),this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,n||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,n){t=this.session.screenToDocumentPosition(e,t),this.moveCursorTo(t.row,t.column,n)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e(this);var n=this.getCursor();return o.fromPoints(t,n)}catch(e){return o.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){var e;return this.rangeCount?e=this.ranges.map((function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t})):(e=this.getRange()).isBackwards=this.isBackwards(),e},this.fromJSON=function(e){if(null==e.start){if(this.rangeList&&1<e.length){this.toSingleRange(e[0]);for(var t=e.length;t--;){var n=o.fromPoints(e[t].start,e[t].end);e[t].isBackwards&&(n.cursor=n.start),this.addRange(n,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call((e=function(e){this.session=e,this.doc=e.getDocument(),this.clearSelection(),this.cursor=this.lead=this.doc.createAnchor(0,0),this.anchor=this.doc.createAnchor(0,0),this.$silent=!1;var t=this;this.cursor.on(\"change\",(function(e){t.$cursorChanged=!0,t.$silent||t._emit(\"changeCursor\"),t.$isEmpty||t.$silent||t._emit(\"changeSelection\"),t.$keepDesiredColumnOnChange||e.old.column==e.value.column||(t.$desiredColumn=null)})),this.anchor.on(\"change\",(function(){t.$anchorChanged=!0,t.$isEmpty||t.$silent||t._emit(\"changeSelection\")}))}).prototype),t.Selection=e})),ace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"],(function(e,t,n){\"use strict\";var r=e(\"./config\"),i=2e3;(function(){this.$setMaxTokenCount=function(e){i=0|e},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),n=this.token.apply(this,t);if(\"string\"==typeof n)return[{type:n,value:e}];for(var r=[],i=0,s=n.length;i<s;i++)t[i]&&(r[r.length]={type:n[i],value:t[i]});return r},this.$arrayTokens=function(e){if(!e)return[];var t=this.splitRegex.exec(e);if(!t)return\"text\";for(var n=[],r=this.tokenArray,i=0,s=r.length;i<s;i++)t[i+1]&&(n[n.length]={type:r[i],value:t[i+1]});return n},this.removeCapturingGroups=function(e){return e.replace(/\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!]|(\\()/g,(function(e,t){return t?\"(?:\":e}))},this.createSplitterRegexp=function(e,t){var n,r,i;return-1!=e.indexOf(\"(?=\")&&(n=0,r=!1,i={},e.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g,(function(e,t,s,o,a,c){return r?r=\"]\"!=a:a?r=!0:o?(n==i.stack&&(i.end=c+1,i.stack=-1),n--):s&&(n++,1!=s.length&&(i.stack=n,i.start=c)),e})),null!=i.end&&/^\\)*$/.test(e.substr(i.end))&&(e=e.substring(0,i.start)+e.substr(i.end))),\"^\"!=e.charAt(0)&&(e=\"^\"+e),\"$\"!=e.charAt(e.length-1)&&(e+=\"$\"),new RegExp(e,(t||\"\").replace(\"g\",\"\"))},this.getLineTokens=function(e,t){var n;t&&\"string\"!=typeof t?\"#tmp\"===(t=(n=t.slice(0))[0])&&(n.shift(),t=n.shift()):n=[];var r=t||\"start\",s=this.states[r];s||(s=this.states[r=\"start\"]);for(var o,a=this.matchMappings[r],c=this.regExps[r],l=[],h=c.lastIndex=0,d=0,u={type:null,value:\"\"};o=c.exec(e);){var f,g=a.defaultToken,p=null,m=o[0],C=c.lastIndex;C-m.length>h&&(f=e.substring(h,C-m.length),u.type==g?u.value+=f:(u.type&&l.push(u),u={type:g,value:f}));for(var b=0;b<o.length-2;b++)if(void 0!==o[b+1]){g=(p=s[a[b]]).onMatch?p.onMatch(m,r,n,e):p.token,p.next&&(r=\"string\"==typeof p.next?p.next:p.next(r,n),(s=this.states[r])||(this.reportError(\"state doesn't exist\",r),s=this.states[r=\"start\"]),a=this.matchMappings[r],h=C,(c=this.regExps[r]).lastIndex=C),p.consumeLineEnd&&(h=C);break}if(m)if(\"string\"==typeof g)p&&!1===p.merge||u.type!==g?(u.type&&l.push(u),u={type:g,value:m}):u.value+=m;else if(g)for(u.type&&l.push(u),u={type:null,value:\"\"},b=0;b<g.length;b++)l.push(g[b]);if(h==e.length)break;if(h=C,d++>i){for(d>2*e.length&&this.reportError(\"infinite loop with in ace tokenizer\",{startState:t,line:e});h<e.length;)u.type&&l.push(u),u={value:e.substring(h,h+=500),type:\"overflow\"};r=\"start\",n=[];break}}return u.type&&l.push(u),1<n.length&&n[0]!==r&&n.unshift(\"#tmp\",r),{tokens:l,state:n.length?n:r}},this.reportError=r.reportError}).call((e=function(e){for(var t in this.states=e,this.regExps={},this.matchMappings={},this.states){for(var n=this.states[t],r=[],i=0,s=this.matchMappings[t]={defaultToken:\"text\"},o=\"g\",a=[],c=0;c<n.length;c++){var l,h,d=n[c];d.defaultToken&&(s.defaultToken=d.defaultToken),d.caseInsensitive&&(o=\"gi\"),null!=d.regex&&(d.regex instanceof RegExp&&(d.regex=d.regex.toString().slice(1,-1)),l=d.regex,h=new RegExp(\"(?:(\"+l+\")|(.))\").exec(\"a\").length-2,Array.isArray(d.token)?1==d.token.length||1==h?d.token=d.token[0]:h-1!=d.token.length?(this.reportError(\"number of classes and regexp groups doesn't match\",{rule:d,groupCount:h-1}),d.token=d.token[0]):(d.tokenArray=d.token,d.token=null,d.onMatch=this.$arrayTokens):\"function\"!=typeof d.token||d.onMatch||(d.onMatch=1<h?this.$applyToken:d.token),1<h&&(l=/\\\\\\d/.test(d.regex)?d.regex.replace(/\\\\([0-9]+)/g,(function(e,t){return\"\\\\\"+(parseInt(t,10)+i+1)})):(h=1,this.removeCapturingGroups(d.regex)),d.splitRegex||\"string\"==typeof d.token||a.push(d)),s[i]=c,i+=h,r.push(l),d.onMatch||(d.onMatch=null))}r.length||(s[0]=0,r.push(\"$\")),a.forEach((function(e){e.splitRegex=this.createSplitterRegexp(e.regex,o)}),this),this.regExps[t]=new RegExp(\"(\"+r.join(\")|(\")+\")|($)\",o)}}).prototype),t.Tokenizer=e})),ace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/lang\");(function(){function e(e,t){return\"start\"==e&&!t.length||t.unshift(this.nextState,e),this.nextState}function t(e,t){return t.shift(),t.shift()||\"start\"}this.addRules=function(e,t){if(t)for(var n in e){for(var r=e[n],i=0;i<r.length;i++){var s=r[i];(s.next||s.onMatch)&&(\"string\"==typeof s.next&&0!==s.next.indexOf(t)&&(s.next=t+s.next),s.nextState&&0!==s.nextState.indexOf(t)&&(s.nextState=t+s.nextState))}this.$rules[t+n]=r}else for(var n in e)this.$rules[n]=e[n]},this.getRules=function(){return this.$rules},this.embedRules=function(e,t,n,i,s){if(e=\"function\"==typeof e?(new e).getRules():e,i)for(var o=0;o<i.length;o++)i[o]=t+i[o];else for(var a in i=[],e)i.push(t+a);if(this.addRules(e,t),n){var c=Array.prototype[s?\"push\":\"unshift\"];for(o=0;o<i.length;o++)c.apply(this.$rules[i[o]],r.deepCopy(n))}this.$embeds||(this.$embeds=[]),this.$embeds.push(t)},this.getEmbeds=function(){return this.$embeds},this.normalizeRules=function(){var n=0,r=this.$rules;Object.keys(r).forEach((function i(s){var o=r[s];o.processed=!0;for(var a=0;a<o.length;a++){var c=o[a],l=null;Array.isArray(c)&&(l=c,c={}),!c.regex&&c.start&&(c.regex=c.start,c.next||(c.next=[]),c.next.push({defaultToken:c.token},{token:c.token+\".end\",regex:c.end||c.start,next:\"pop\"}),c.token=c.token+\".start\",c.push=!0);var h,d=c.next||c.push;if(d&&Array.isArray(d)?((h=c.stateName)||(\"string\"!=typeof(h=c.token)&&(h=h[0]||\"\"),r[h]&&(h+=n++)),r[h]=d,i(c.next=h)):\"pop\"==d&&(c.next=t),c.push&&(c.nextState=c.next||c.push,c.next=e,delete c.push),c.rules)for(var u in c.rules)r[u]?r[u].push&&r[u].push.apply(r[u],c.rules[u]):r[u]=c.rules[u];(d=\"string\"==typeof c?c:c.include)&&(l=Array.isArray(d)?d.map((function(e){return r[e]})):r[d]),l&&(l=[a,1].concat(l),c.noEscape&&(l=l.filter((function(e){return!e.next}))),o.splice.apply(o,l),a--),c.keywordMap&&(c.token=this.createKeywordMapper(c.keywordMap,c.defaultToken||\"text\",c.caseInsensitive),delete c.defaultToken)}}),this)},this.createKeywordMapper=function(e,t,n,r){var i=Object.create(null);return this.$keywordList=[],Object.keys(e).forEach((function(t){for(var s=e[t].split(r||\"|\"),o=s.length;o--;){var a=s[o];this.$keywordList.push(a),n&&(a=a.toLowerCase()),i[a]=t}}),this),e=null,n?function(e){return i[e.toLowerCase()]||t}:function(e){return i[e]||t}},this.getKeywords=function(){return this.$keywords}}).call((e=function(){this.$rules={start:[{token:\"empty_line\",regex:\"^$\"},{defaultToken:\"text\"}]}}).prototype),t.TextHighlightRules=e})),ace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";function r(){this.$behaviours={}}(function(){this.add=function(e,t,n){switch(void 0){case this.$behaviours:this.$behaviours={};case this.$behaviours[e]:this.$behaviours[e]={}}this.$behaviours[e][t]=n},this.addBehaviours=function(e){for(var t in e)for(var n in e[t])this.add(t,n,e[t][n])},this.remove=function(e){this.$behaviours&&this.$behaviours[e]&&delete this.$behaviours[e]},this.inherit=function(e,t){t=(\"function\"==typeof e?new e:e).getBehaviours(t),this.addBehaviours(t)},this.getBehaviours=function(e){if(e){for(var t={},n=0;n<e.length;n++)this.$behaviours[e[n]]&&(t[e[n]]=this.$behaviours[e[n]]);return t}return this.$behaviours}}).call(r.prototype),t.Behaviour=r})),ace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"./range\").Range;(function(){this.stepBackward=function(){for(--this.$tokenIndex;this.$tokenIndex<0;){if(--this.$row,this.$row<0)return this.$row=0,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=this.$rowTokens.length-1}return this.$rowTokens[this.$tokenIndex]},this.stepForward=function(){var e;for(this.$tokenIndex+=1;this.$tokenIndex>=this.$rowTokens.length;){if(this.$row+=1,e=e||this.$session.getLength(),this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,n=e[t].start;if(void 0!==n)return n;for(n=0;0<t;)n+=e[--t].value.length;return n},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}},this.getCurrentTokenRange=function(){var e=this.$rowTokens[this.$tokenIndex],t=this.getCurrentTokenColumn();return new r(this.$row,t,this.$row,t+e.value.length)}}).call((e=function(e,t,n){this.$session=e,this.$row=t,this.$rowTokens=e.getTokens(t),n=e.getTokenAt(t,n),this.$tokenIndex=n?n.index:-1}).prototype),t.TokenIterator=e})),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],(function(e,t,n){\"use strict\";function r(e){var t=-1;if(e.multiSelect&&(t=e.selection.index,u.rangeCount!=e.multiSelect.rangeCount&&(u={rangeCount:e.multiSelect.rangeCount})),u[t])return s=u[t];s=u[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}}function i(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}}var s,o=e(\"../../lib/oop\"),a=e(\"../behaviour\").Behaviour,c=e(\"../../token_iterator\").TokenIterator,l=e(\"../../lib/lang\"),h=[\"text\",\"paren.rparen\",\"rparen\",\"paren\",\"punctuation.operator\"],d=[\"text\",\"paren.rparen\",\"rparen\",\"paren\",\"punctuation.operator\",\"comment\"],u={},f={'\"':'\"',\"'\":\"'\"},g=function(e){this.add(\"braces\",\"insertion\",(function(t,n,o,a,c){var h=o.getCursorPosition(),d=a.doc.getLine(h.row);if(\"{\"==c){r(o);var u=o.getSelectionRange(),f=a.doc.getTextRange(u);return\"\"!==f&&\"{\"!==f&&o.getWrapBehavioursEnabled()?i(u,f,\"{\",\"}\"):g.isSaneInsertion(o,a)?/[\\]\\}\\)]/.test(d[h.column])||o.inMultiSelectMode||e&&e.braces?(g.recordAutoInsert(o,a,\"}\"),{text:\"{}\",selection:[1,1]}):(g.recordMaybeInsert(o,a,\"{\"),{text:\"{\",selection:[1,1]}):void 0}if(\"}\"==c){r(o);var p=d.substring(h.column,h.column+1);if(\"}\"==p&&null!==a.$findOpeningBracket(\"}\",{column:h.column+1,row:h.row})&&g.isAutoInsertedClosing(h,d,c))return g.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}else{if(\"\\n\"==c||\"\\r\\n\"==c){if(r(o),o=\"\",g.isMaybeInsertedClosing(h,d)&&(o=l.stringRepeat(\"}\",s.maybeInsertedBrackets),g.clearMaybeInsertedClosing()),\"}\"===(p=d.substring(h.column,h.column+1))){var m=a.findMatchingBracket({row:h.row,column:h.column+1},\"}\");if(!m)return null;m=this.$getIndent(a.getLine(m.row))}else{if(!o)return void g.clearMaybeInsertedClosing();m=this.$getIndent(d)}return{text:\"\\n\"+(a=m+a.getTabString())+\"\\n\"+m+o,selection:[1,a.length,1,a.length]}}g.clearMaybeInsertedClosing()}})),this.add(\"braces\",\"deletion\",(function(e,t,n,i,o){var a=i.doc.getTextRange(o);if(!o.isMultiLine()&&\"{\"==a){if(r(n),\"}\"==i.doc.getLine(o.start.row).substring(o.end.column,o.end.column+1))return o.end.column++,o;s.maybeInsertedBrackets--}})),this.add(\"parens\",\"insertion\",(function(e,t,n,s,o){if(\"(\"==o){r(n);var a=n.getSelectionRange(),c=s.doc.getTextRange(a);return\"\"!==c&&n.getWrapBehavioursEnabled()?i(a,c,\"(\",\")\"):g.isSaneInsertion(n,s)?(g.recordAutoInsert(n,s,\")\"),{text:\"()\",selection:[1,1]}):void 0}if(\")\"==o&&(r(n),a=n.getCursorPosition(),\")\"==(n=(c=s.doc.getLine(a.row)).substring(a.column,a.column+1))&&null!==s.$findOpeningBracket(\")\",{column:a.column+1,row:a.row})&&g.isAutoInsertedClosing(a,c,o)))return g.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}})),this.add(\"parens\",\"deletion\",(function(e,t,n,i,s){var o=i.doc.getTextRange(s);if(!s.isMultiLine()&&\"(\"==o&&(r(n),\")\"==i.doc.getLine(s.start.row).substring(s.start.column+1,s.start.column+2)))return s.end.column++,s})),this.add(\"brackets\",\"insertion\",(function(e,t,n,s,o){if(\"[\"==o){r(n);var a=n.getSelectionRange(),c=s.doc.getTextRange(a);return\"\"!==c&&n.getWrapBehavioursEnabled()?i(a,c,\"[\",\"]\"):g.isSaneInsertion(n,s)?(g.recordAutoInsert(n,s,\"]\"),{text:\"[]\",selection:[1,1]}):void 0}if(\"]\"==o&&(r(n),a=n.getCursorPosition(),\"]\"==(n=(c=s.doc.getLine(a.row)).substring(a.column,a.column+1))&&null!==s.$findOpeningBracket(\"]\",{column:a.column+1,row:a.row})&&g.isAutoInsertedClosing(a,c,o)))return g.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}})),this.add(\"brackets\",\"deletion\",(function(e,t,n,i,s){var o=i.doc.getTextRange(s);if(!s.isMultiLine()&&\"[\"==o&&(r(n),\"]\"==i.doc.getLine(s.start.row).substring(s.start.column+1,s.start.column+2)))return s.end.column++,s})),this.add(\"string_dquotes\",\"insertion\",(function(e,t,n,s,o){var a=s.$mode.$quotes||f;if(1==o.length&&a[o]&&(!this.lineCommentStart||-1==this.lineCommentStart.indexOf(o))){r(n);var c=o,l=n.getSelectionRange();if(!(\"\"===(g=s.doc.getTextRange(l))||1==g.length&&a[g])&&n.getWrapBehavioursEnabled())return i(l,g,c,c);if(!g){var h,d=n.getCursorPosition(),u=s.doc.getLine(d.row),g=(o=u.substring(d.column-1,d.column),a=u.substring(d.column,d.column+1),l=s.getTokenAt(d.row,d.column),s.getTokenAt(d.row,d.column+1));if(\"\\\\\"==o&&l&&/escape/.test(l.type))return null;if(n=l&&/string|escape/.test(l.type),l=!g||/string|escape/.test(g.type),a==c)(h=n!==l)&&/string\\.end/.test(g.type)&&(h=!1);else{if(n&&!l)return null;if(n&&l)return null;if((n=s.$mode.tokenRe).lastIndex=0,l=n.test(o),n.lastIndex=0,s=n.test(o),l||s)return null;if(a&&!/[\\s;,.})\\]\\\\]/.test(a))return null;if(d=u[d.column-2],o==c&&(d==c||n.test(d)))return null;h=!0}return{text:h?c+c:\"\",selection:[1,1]}}}})),this.add(\"string_dquotes\",\"deletion\",(function(e,t,n,i,s){var o=i.$mode.$quotes||f,a=i.doc.getTextRange(s);if(!s.isMultiLine()&&o.hasOwnProperty(a)&&(r(n),i.doc.getLine(s.start.row).substring(s.start.column+1,s.start.column+2)==a))return s.end.column++,s}))};g.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new c(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",h)){if(/[)}\\]]/.test(e.session.getLine(n.row)[n.column]))return!0;if(t=new c(t,n.row,n.column+1),!this.$matchTokenType(t.getCurrentToken()||\"text\",h))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",d)},g.$matchTokenType=function(e,t){return-1<t.indexOf(e.type||e)},g.recordAutoInsert=function(e,t,n){e=e.getCursorPosition(),t=t.doc.getLine(e.row),this.isAutoInsertedClosing(e,t,s.autoInsertedLineEnd[0])||(s.autoInsertedBrackets=0),s.autoInsertedRow=e.row,s.autoInsertedLineEnd=n+t.substr(e.column),s.autoInsertedBrackets++},g.recordMaybeInsert=function(e,t,n){e=e.getCursorPosition(),t=t.doc.getLine(e.row),this.isMaybeInsertedClosing(e,t)||(s.maybeInsertedBrackets=0),s.maybeInsertedRow=e.row,s.maybeInsertedLineStart=t.substr(0,e.column)+n,s.maybeInsertedLineEnd=t.substr(e.column),s.maybeInsertedBrackets++},g.isAutoInsertedClosing=function(e,t,n){return 0<s.autoInsertedBrackets&&e.row===s.autoInsertedRow&&n===s.autoInsertedLineEnd[0]&&t.substr(e.column)===s.autoInsertedLineEnd},g.isMaybeInsertedClosing=function(e,t){return 0<s.maybeInsertedBrackets&&e.row===s.maybeInsertedRow&&t.substr(e.column)===s.maybeInsertedLineEnd&&t.substr(0,e.column)==s.maybeInsertedLineStart},g.popAutoInsertedClosing=function(){s.autoInsertedLineEnd=s.autoInsertedLineEnd.substr(1),s.autoInsertedBrackets--},g.clearMaybeInsertedClosing=function(){s&&(s.maybeInsertedBrackets=0,s.maybeInsertedRow=-1)},o.inherits(g,a),t.CstyleBehaviour=g})),ace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";for(var r=[48,9,8,25,5,0,2,25,48,0,11,0,5,0,6,22,2,30,2,457,5,11,15,4,8,0,2,0,18,116,2,1,3,3,9,0,2,2,2,0,2,19,2,82,2,138,2,4,3,155,12,37,3,0,8,38,10,44,2,0,2,1,2,1,2,0,9,26,6,2,30,10,7,61,2,9,5,101,2,7,3,9,2,18,3,0,17,58,3,100,15,53,5,0,6,45,211,57,3,18,2,5,3,11,3,9,2,1,7,6,2,2,2,7,3,1,3,21,2,6,2,0,4,3,3,8,3,1,3,3,9,0,5,1,2,4,3,11,16,2,2,5,5,1,3,21,2,6,2,1,2,1,2,1,3,0,2,4,5,1,3,2,4,0,8,3,2,0,8,15,12,2,2,8,2,2,2,21,2,6,2,1,2,4,3,9,2,2,2,2,3,0,16,3,3,9,18,2,2,7,3,1,3,21,2,6,2,1,2,4,3,8,3,1,3,2,9,1,5,1,2,4,3,9,2,0,17,1,2,5,4,2,2,3,4,1,2,0,2,1,4,1,4,2,4,11,5,4,4,2,2,3,3,0,7,0,15,9,18,2,2,7,2,2,2,22,2,9,2,4,4,7,2,2,2,3,8,1,2,1,7,3,3,9,19,1,2,7,2,2,2,22,2,9,2,4,3,8,2,2,2,3,8,1,8,0,2,3,3,9,19,1,2,7,2,2,2,22,2,15,4,7,2,2,2,3,10,0,9,3,3,9,11,5,3,1,2,17,4,23,2,8,2,0,3,6,4,0,5,5,2,0,2,7,19,1,14,57,6,14,2,9,40,1,2,0,3,1,2,0,3,0,7,3,2,6,2,2,2,0,2,0,3,1,2,12,2,2,3,4,2,0,2,5,3,9,3,1,35,0,24,1,7,9,12,0,2,0,2,0,5,9,2,35,5,19,2,5,5,7,2,35,10,0,58,73,7,77,3,37,11,42,2,0,4,328,2,3,3,6,2,0,2,3,3,40,2,3,3,32,2,3,3,6,2,0,2,3,3,14,2,56,2,3,3,66,5,0,33,15,17,84,13,619,3,16,2,25,6,74,22,12,2,6,12,20,12,19,13,12,2,2,2,1,13,51,3,29,4,0,5,1,3,9,34,2,3,9,7,87,9,42,6,69,11,28,4,11,5,11,11,39,3,4,12,43,5,25,7,10,38,27,5,62,2,28,3,10,7,9,14,0,89,75,5,9,18,8,13,42,4,11,71,55,9,9,4,48,83,2,2,30,14,230,23,280,3,5,3,37,3,5,3,7,2,0,2,0,2,0,2,30,3,52,2,6,2,0,4,2,2,6,4,3,3,5,5,12,6,2,2,6,67,1,20,0,29,0,14,0,17,4,60,12,5,0,4,11,18,0,5,0,3,9,2,0,4,4,7,0,2,0,2,0,2,3,2,10,3,3,6,4,5,0,53,1,2684,46,2,46,2,132,7,6,15,37,11,53,10,0,17,22,10,6,2,6,2,6,2,6,2,6,2,6,2,6,2,6,2,31,48,0,470,1,36,5,2,4,6,1,5,85,3,1,3,2,2,89,2,3,6,40,4,93,18,23,57,15,513,6581,75,20939,53,1164,68,45,3,268,4,27,21,31,3,13,13,1,2,24,9,69,11,1,38,8,3,102,3,1,111,44,25,51,13,68,12,9,7,23,4,0,5,45,3,35,13,28,4,64,15,10,39,54,10,13,3,9,7,22,4,1,5,66,25,2,227,42,2,1,3,9,7,11171,13,22,5,48,8453,301,3,61,3,105,39,6,13,4,6,11,2,12,2,4,2,0,2,1,2,1,2,107,34,362,19,63,3,53,41,11,5,15,17,6,13,1,25,2,33,4,2,134,20,9,8,25,5,0,2,25,12,88,4,5,3,5,3,5,3,2],i=0,s=[],o=0;o<r.length;o+=2)s.push(i+=r[o]),r[o+1]&&s.push(45,i+=r[o+1]);t.wordChars=String.fromCharCode.apply(null,s)})),ace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"../config\"),i=e(\"../tokenizer\").Tokenizer,s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"../unicode\"),c=e(\"../lib/lang\"),l=e(\"../token_iterator\").TokenIterator,h=e(\"../range\").Range;(function(){this.$defaultBehaviour=new o,this.tokenRe=new RegExp(\"^[\"+a.wordChars+\"\\\\$_]+\",\"g\"),this.nonTokenRe=new RegExp(\"^(?:[^\"+a.wordChars+\"\\\\$_]|\\\\s])+\",\"g\"),this.getTokenizer=function(){return this.$tokenizer||(this.$highlightRules=this.$highlightRules||new this.HighlightRules(this.$highlightRuleConfig),this.$tokenizer=new i(this.$highlightRules.getRules())),this.$tokenizer},this.lineCommentStart=\"\",this.blockComment=\"\",this.toggleCommentLines=function(e,t,n,r){var i=t.doc,s=!0,o=!0,a=1/0,l=t.getTabSize(),h=!1;if(this.lineCommentStart){m=Array.isArray(this.lineCommentStart)?(b=this.lineCommentStart.map(c.escapeRegExp).join(\"|\"),this.lineCommentStart[0]):(b=c.escapeRegExp(this.lineCommentStart),this.lineCommentStart),b=new RegExp(\"^(\\\\s*)(?:\"+b+\") ?\"),h=t.getUseSoftTabs();var d=function(e,t){var n,r,s=e.match(b);s&&(p(e,n=s[1].length,r=s[0].length)||\" \"!=s[0][r-1]||r--,i.removeInLine(t,n,r))},u=m+\" \",f=function(e,t){s&&!/\\S/.test(e)||(p(e,a,a)?i.insertInLine({row:t,column:a},u):i.insertInLine({row:t,column:a},m))},g=function(e,t){return b.test(e)},p=function(e,t,n){for(var r=0;t--&&\" \"==e.charAt(t);)r++;if(r%l!=0)return!1;for(r=0;\" \"==e.charAt(n++);)r++;return 2<l?r%l!=l-1:r%l==0}}else{if(!this.blockComment)return!1;var m=this.blockComment.start,C=this.blockComment.end,b=new RegExp(\"^(\\\\s*)(?:\"+c.escapeRegExp(m)+\")\"),v=new RegExp(\"(?:\"+c.escapeRegExp(C)+\")\\\\s*$\");f=function(e,t){g(e,t)||s&&!/\\S/.test(e)||(i.insertInLine({row:t,column:e.length},C),i.insertInLine({row:t,column:a},m))},d=function(e,t){var n;(n=e.match(v))&&i.removeInLine(t,e.length-n[0].length,e.length),(n=e.match(b))&&i.removeInLine(t,n[1].length,n[0].length)},g=function(e,n){if(b.test(e))return!0;for(var r=t.getTokens(n),i=0;i<r.length;i++)if(\"comment\"===r[i].type)return!0}}function I(e){for(var t=n;t<=r;t++)e(i.getLine(t),t)}var A=1/0;I((function(e,t){var n=e.search(/\\S/);-1!==n?(n<a&&(a=n),o&&!g(e,t)&&(o=!1)):A>e.length&&(A=e.length)})),a==1/0&&(a=A,o=s=!1),h&&a%l!=0&&(a=Math.floor(a/l)*l),I(o?d:f)},this.toggleBlockComment=function(e,t,n,r){var i=this.blockComment;if(i){!i.start&&i[0]&&(i=i[0]);var s,o,a=(g=new l(t,r.row,r.column)).getCurrentToken(),c=t.selection.toOrientedRange();if(a&&/comment/.test(a.type)){for(;a&&/comment/.test(a.type);){if(-1!=(p=a.value.indexOf(i.start))){var d=g.getCurrentTokenRow(),u=g.getCurrentTokenColumn()+p,f=new h(d,u,d,u+i.start.length);break}a=g.stepBackward()}var g,p;for(a=(g=new l(t,r.row,r.column)).getCurrentToken();a&&/comment/.test(a.type);){if(-1!=(p=a.value.indexOf(i.end))){d=g.getCurrentTokenRow(),u=g.getCurrentTokenColumn()+p;var m=new h(d,u,d,u+i.end.length);break}a=g.stepForward()}m&&t.remove(m),f&&(t.remove(f),s=f.start.row,o=-i.start.length)}else o=i.start.length,s=n.start.row,t.insert(n.end,i.end),t.insert(n.start,i.start);c.start.row==s&&(c.start.column+=o),c.end.row==s&&(c.end.column+=o),t.selection.fromOrientedRange(c)}},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.autoOutdent=function(e,t,n){},this.$getIndent=function(e){return e.match(/^\\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){for(var t in this.$embeds=[],this.$modes={},e){var n,i,s;e[t]&&(i=(n=e[t]).prototype.$id,(s=r.$modes[i])||(r.$modes[i]=s=new n),r.$modes[t]||(r.$modes[t]=s),this.$embeds.push(t),this.$modes[t]=s)}var o=[\"toggleBlockComment\",\"toggleCommentLines\",\"getNextLineIndent\",\"checkOutdent\",\"autoOutdent\",\"transformAction\",\"getCompletions\"];for(t=0;t<o.length;t++)!function(e){var n=o[t],r=e[n];e[o[t]]=function(){return this.$delegator(n,arguments,r)}}(this)},this.$delegator=function(e,t,n){var r=t[0]||\"start\";if(\"string\"!=typeof r){if(Array.isArray(r[2])){var i=r[2][r[2].length-1];if(o=this.$modes[i])return o[e].apply(o,[r[1]].concat([].slice.call(t,1)))}r=r[0]||\"start\"}for(var s=0;s<this.$embeds.length;s++)if(this.$modes[this.$embeds[s]]){var o,a=r.split(this.$embeds[s]);if(!a[0]&&a[1])return t[0]=a[1],(o=this.$modes[this.$embeds[s]])[e].apply(o,t)}return i=n.apply(this,t),n?i:void 0},this.transformAction=function(e,t,n,r,i){if(this.$behaviour){var s,o=this.$behaviour.getBehaviours();for(s in o)if(o[s][t]){var a=o[s][t].apply(this,arguments);if(a)return a}}},this.getKeywords=function(e){if(!this.completionKeywords){var t=this.$tokenizer.rules,n=[];for(o in t)for(var r=t[o],i=0,s=r.length;i<s;i++)if(\"string\"==typeof r[i].token)/keyword|support|storage/.test(r[i].token)&&n.push(r[i].regex);else if(\"object\"==typeof r[i].token)for(var o,a=0,c=r[i].token.length;a<c;a++)/keyword|support|storage/.test(r[i].token[a])&&(o=r[i].regex.match(/\\(.+?\\)/g)[a],n.push(o.substr(1,o.length-2)));this.completionKeywords=n}return e?n.concat(this.$keywordList||[]):this.$keywordList},this.$createKeywordList=function(){return this.$highlightRules||this.getTokenizer(),this.$keywordList=this.$highlightRules.$keywordList||[]},this.getCompletions=function(e,t,n,r){return(this.$keywordList||this.$createKeywordList()).map((function(e){return{name:e,value:e,score:0,meta:\"keyword\"}}))},this.$id=\"ace/mode/text\"}).call((e=function(){this.HighlightRules=s}).prototype),t.Mode=e})),ace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":1===t.lines.length?e[r]=s.substring(0,i)+t.lines[0]+s.substring(i):(a=[r,1].concat(t.lines),e.splice.apply(e,a),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i));break;case\"remove\":var o=t.end.column,a=t.end.row;r===a?e[r]=s.substring(0,i)+s.substring(o):e.splice(r,a-r+1,s.substring(0,i)+e[a].substring(o))}}})),ace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],(function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter;t=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),void 0===n?this.setPosition(t.row,t.column):this.setPosition(t,n)},(function(){function e(e,t,n){return n=n?e.column<=t.column:e.column<t.column,e.row<t.row||e.row==t.row&&n}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(t){t.start.row==t.end.row&&t.start.row!=this.row||t.start.row>this.row||(t=function(t,n,r){var i=\"insert\"==t.action,s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),a=t.start;return t=i?a:t.end,e(n,a,r)?{row:n.row,column:n.column}:e(t,n,!r)?{row:n.row+s,column:n.column+(n.row==t.row?o:0)}:{row:a.row,column:a.column}}(t,{row:this.row,column:this.column},this.$insertRight),this.setPosition(t.row,t.column,!0))},this.setPosition=function(e,t,n){e=n?{row:e,column:t}:this.$clipPositionToDocument(e,t),this.row==e.row&&this.column==e.column||(t={row:this.row,column:this.column},this.row=e.row,this.column=e.column,this._signal(\"change\",{old:t,value:e}))},this.detach=function(){this.document.off(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(t.prototype)})),ace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],(function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,a=e(\"./anchor\").Anchor;(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new a(this,e,t)},this.$split=0===\"aaa\".split(/a/).length?function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){e=e.match(/^.*?(\\r\\n|\\r|\\n)/m),this.$autoNewLine=e?e[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){this.$newLineMode!==e&&(this.$newLineMode=e,this._signal(\"changeNewLineMode\"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return\"\\r\\n\"==e||\"\\r\"==e||\"\\n\"==e},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t,n;return e.start.row===e.end.row?t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)]:((t=this.getLines(e.start.row,e.end.row))[0]=(t[0]||\"\").substring(e.start.column),e.end.row-e.start.row==(n=t.length-1)&&(t[n]=t[n].substring(0,e.end.column))),t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column);return e=this.pos(e.row,e.column+t.length),this.applyDelta({start:n,end:e,action:\"insert\",lines:[t]},!0),this.clonePos(e)},this.clippedPos=function(e,t){var n=this.getLength();return void 0===e?e=n:e<0?e=0:n<=e&&(e=n-1,t=void 0),n=this.getLine(e),null==t&&(t=n.length),{row:e,column:t=Math.min(Math.max(t,0),n.length)}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){var n;n=(e=Math.min(Math.max(e,0),this.getLength()))<this.getLength()?(t=t.concat([\"\"]),0):(t=[\"\"].concat(t),e--,this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column);return this.applyDelta({start:n,end:e={row:n.row+t.length-1,column:(1==t.length?n.column:0)+t[t.length-1].length},action:\"insert\",lines:t}),this.clonePos(e)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column);return e=this.clippedPos(e.end.row,e.end.column),this.applyDelta({start:t,end:e,action:\"remove\",lines:this.getLinesForRange({start:t,end:e})}),this.clonePos(t)},this.removeInLine=function(e,t,n){return t=this.clippedPos(e,t),n=this.clippedPos(e,n),this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})},!0),this.clonePos(t)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1);var n=(t=Math.min(Math.max(0,t),this.getLength()-1))==this.getLength()-1&&0<e,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0;return n=r?t+1:t,r=r?0:this.getLine(n).length,r=new o(i,s,n,r),t=this.$lines.slice(e,t+1),this.applyDelta({start:r.start,end:r.end,action:\"remove\",lines:this.getLinesForRange(r)}),t},this.removeNewLine=function(e){e<this.getLength()-1&&0<=e&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){return e instanceof o||(e=o.fromPoints(e.start,e.end)),0===t.length&&e.isEmpty()?e.start:t==this.getTextRange(e)?e.end:(this.remove(e),t?this.insert(e.start,t):e.start)},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;0<=t;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=\"insert\"==e.action;(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))||(n&&2e4<e.lines.length?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e)))},this.$safeApplyDelta=function(e){var t=this.$lines.length;(\"remove\"==e.action&&e.start.row<t&&e.end.row<t||\"insert\"==e.action&&e.start.row<=t)&&this.applyDelta(e)},this.$splitAndapplyLargeDelta=function(e,t){for(var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column,o=0,a=0;o<r;o=a){var c=n.slice(o,a+=t-1);c.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+a,s=0),action:e.action,lines:c},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.$safeApplyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:\"insert\"==e.action?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){for(var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=t||0,s=n.length;i<s;i++)if((e-=n[i].length+r)<0)return{row:i,column:e+n[i].length+r};return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){for(var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length),o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call((e=function(e){this.$lines=[\"\"],0===e.length?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)}).prototype),t.Document=e})),ace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],(function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter;(function(){r.implement(this,i),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){this._signal(\"update\",{data:t={first:e,last:t}})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.start.row,n=e.end.row-t;0==n?this.lines[t]=null:\"remove\"==e.action?(this.lines.splice(t,1+n,null),this.states.splice(t,1+n,null)):((n=Array(1+n)).unshift(t,1),this.lines.splice.apply(this.lines,n),this.states.splice.apply(this.states,n)),this.currentLine=Math.min(t,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||\"start\"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),n=this.tokenizer.getLineTokens(t,n=this.states[e-1],e);return this.states[e]+\"\"!=n.state+\"\"?(this.states[e]=n.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=n.tokens}}).call((e=function(e,t){this.running=!1,this.lines=[],this.states=[],this.currentLine=0,this.tokenizer=e;var n=this;this.$worker=function(){if(n.running){for(var e=new Date,t=n.currentLine,r=-1,i=n.doc,s=t;n.lines[t];)t++;var o=i.getLength(),a=0;for(n.running=!1;t<o;){for(n.$tokenizeRow(t),r=t;t++,n.lines[t];);if(++a%5==0&&20<new Date-e){n.running=setTimeout(n.$worker,20);break}}n.currentLine=t,-1==r&&(r=t),s<=r&&n.fireUpdateEvent(s,r)}}}).prototype),t.BackgroundTokenizer=e})),ace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"./lib/lang\"),i=(e(\"./lib/oop\"),e(\"./range\").Range);(function(){this.MAX_RANGES=500,this.setRegexp=function(e){this.regExp+\"\"!=e+\"\"&&(this.regExp=e,this.cache=[])},this.update=function(e,t,n,s){if(this.regExp)for(var o=s.lastRow,a=s.firstRow;a<=o;a++){var c=this.cache[a];null==c&&((c=r.getMatchOffsets(n.getLine(a),this.regExp)).length>this.MAX_RANGES&&(c=c.slice(0,this.MAX_RANGES)),c=c.map((function(e){return new i(a,e.offset,a,e.offset+e.length)})),this.cache[a]=c.length?c:\"\");for(var l=c.length;l--;)t.drawSingleLineMarker(e,c[l].toScreenRange(n),this.clazz,s)}}}).call((e=function(e,t,n){this.setRegexp(e),this.clazz=t,this.type=n||\"text\"}).prototype),t.SearchHighlight=e})),ace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"../range\").Range;function i(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t],this.range=new r(t[0].start.row,t[0].start.column,(e=t[t.length-1]).end.row,e.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach((function(e){e.setFoldLine(this)}),this)}(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach((function(t){t.start.row+=e,t.end.row+=e}))},this.addFold=function(e){if(e.sameRow){if(e.start.row<this.startRow||e.endRow>this.endRow)throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");this.folds.push(e),this.folds.sort((function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)})),0<this.range.compareEnd(e.start.row,e.start.column)?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,n){var r,i,s=0,o=this.folds,a=!0;null==t&&(t=this.end.row,n=this.end.column);for(var c=0;c<o.length;c++){if(-1==(i=(r=o[c]).range.compareStart(t,n)))return void e(null,t,n,s,a);if(!e(null,r.start.row,r.start.column,s,a)&&e(r.placeholder,r.start.row,r.start.column,s)||0===i)return;a=!r.sameRow,s=r.end.column}e(null,t,n,s,a)},this.getNextFoldTo=function(e,t){for(var n,r,i=0;i<this.folds.length;i++){if(-1==(r=(n=this.folds[i]).range.compareEnd(e,t)))return{fold:n,kind:\"after\"};if(0===r)return{fold:n,kind:\"inside\"}}return null},this.addRemoveChars=function(e,t,n){var r,i,s=this.getNextFoldTo(e,t);if(s)if(r=s.fold,\"inside\"==s.kind&&r.start.column!=t&&r.start.row!=e)window.console&&window.console.log(e,t,r);else if(r.start.row==e){var o=(i=this.folds).indexOf(r);for(0===o&&(this.start.column+=n);o<i.length;o++){if((r=i[o]).start.column+=n,!r.sameRow)return;r.end.column+=n}this.end.column+=n}},this.split=function(e,t){if(!(r=this.getNextFoldTo(e,t))||\"inside\"==r.kind)return null;t=this.foldData;var n,r=(e=this.folds).indexOf(r.fold);return this.end.row=(n=e[r-1]).end.row,this.end.column=n.end.column,e=new i(t,e=e.splice(r,e.length-r)),t.splice(t.indexOf(this)+1,0,e),e},this.merge=function(e){for(var t=e.folds,n=0;n<t.length;n++)this.addFold(t[n]);var r=this.foldData;r.splice(r.indexOf(e),1)},this.toString=function(){var e=[this.range.toString()+\": [\"];return this.folds.forEach((function(t){e.push(\"  \"+t.toString())})),e.push(\"]\"),e.join(\"\\n\")},this.idxToPosition=function(e){for(var t=0,n=0;n<this.folds.length;n++){var r=this.folds[n];if((e-=r.start.column-t)<0)return{row:r.start.row,column:r.start.column+e};if((e-=r.placeholder.length)<0)return r.start;t=r.end.column}return{row:this.end.row,column:this.end.column+e}}}).call(i.prototype),t.FoldLine=i})),ace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"./range\").Range.comparePoints;(function(){this.comparePoints=r,this.pointIndex=function(e,t,n){for(var i=this.ranges,s=n||0;s<i.length;s++){var o=i[s],a=r(e,o.end);if(!(0<a))return o=r(e,o.start),0===a?t&&0!==o?-s-2:s:0<o||0===o&&!t?s:-s-1}return-s-1},this.add=function(e){var t=!e.isEmpty(),n=this.pointIndex(e.start,t);return n<0&&(n=-n-1),(t=this.pointIndex(e.end,t,n))<0?t=-t-1:t++,this.ranges.splice(n,t-n,e)},this.addList=function(e){for(var t=[],n=e.length;n--;)t.push.apply(t,this.add(e[n]));return t},this.substractPoint=function(e){if(0<=(e=this.pointIndex(e)))return this.ranges.splice(e,1)},this.merge=function(){for(var e,t=[],n=this.ranges,i=(n=n.sort((function(e,t){return r(e.start,t.start)})))[0],s=1;s<n.length;s++){var o=r((e=i).end,(i=n[s]).start);o<0||(0!=o||e.isEmpty()||i.isEmpty())&&(r(e.end,i.end)<0&&(e.end.row=i.end.row,e.end.column=i.end.column),n.splice(s,1),t.push(i),i=e,s--)}return this.ranges=n,t},this.contains=function(e,t){return 0<=this.pointIndex({row:e,column:t})},this.containsPoint=function(e){return 0<=this.pointIndex(e)},this.rangeAtPoint=function(e){if(0<=(e=this.pointIndex(e)))return this.ranges[e]},this.clipRows=function(e,t){var n=this.ranges;if(n[0].start.row>t||n[n.length-1].start.row<e)return[];(e=this.pointIndex({row:e,column:0}))<0&&(e=-e-1);var r=this.pointIndex({row:t,column:0},e);r<0&&(r=-r-1);for(var i=[],s=e;s<r;s++)i.push(n[s]);return i},this.removeAll=function(){return this.ranges.splice(0,this.ranges.length)},this.attach=function(e){this.session&&this.detach(),this.session=e,this.onChange=this.$onChange.bind(this),this.session.on(\"change\",this.onChange)},this.detach=function(){this.session&&(this.session.removeListener(\"change\",this.onChange),this.session=null)},this.$onChange=function(e){for(var t=e.start,n=e.end,r=t.row,i=n.row,s=this.ranges,o=0,a=s.length;o<a&&!((c=s[o]).end.row>=r);o++);var c;if(\"insert\"==e.action)for(var l=i-r,h=-t.column+n.column;o<a&&!((c=s[o]).start.row>r);o++)c.start.row==r&&c.start.column>=t.column&&(c.start.column==t.column&&this.$bias<=0||(c.start.column+=h,c.start.row+=l)),c.end.row==r&&c.end.column>=t.column&&(c.end.column==t.column&&this.$bias<0||(c.end.column==t.column&&0<h&&o<a-1&&c.end.column>c.start.column&&c.end.column==s[o+1].start.column&&(c.end.column-=h),c.end.column+=h,c.end.row+=l));else for(l=r-i,h=t.column-n.column;o<a&&!((c=s[o]).start.row>i);o++)c.end.row<i&&(r<c.end.row||r==c.end.row&&t.column<c.end.column)?(c.end.row=r,c.end.column=t.column):c.end.row==i?c.end.column<=n.column?(l||c.end.column>t.column)&&(c.end.column=t.column,c.end.row=t.row):(c.end.column+=h,c.end.row+=l):c.end.row>i&&(c.end.row+=l),c.start.row<i&&(r<c.start.row||r==c.start.row&&t.column<c.start.column)?(c.start.row=r,c.start.column=t.column):c.start.row==i?c.start.column<=n.column?(l||c.start.column>t.column)&&(c.start.column=t.column,c.start.row=t.row):(c.start.column+=h,c.start.row+=l):c.start.row>i&&(c.start.row+=l);if(0!=l&&o<a)for(;o<a;o++)(c=s[o]).start.row+=l,c.end.row+=l}}).call((e=function(){this.ranges=[],this.$bias=1}).prototype),t.RangeList=e})),ace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/lib/oop\"],(function(e,t,n){\"use strict\";var r=e(\"../range_list\").RangeList,i=(e=e(\"../lib/oop\"),t.Fold=function(e,t){this.foldLine=null,this.placeholder=t,this.range=e,this.start=e.start,this.end=e.end,this.sameRow=e.start.row==e.end.row,this.subFolds=this.ranges=[]});function s(e,t){e.row-=t.row,0==e.row&&(e.column-=t.column)}function o(e,t){0==e.row&&(e.column+=t.column),e.row+=t.row}e.inherits(i,r),(function(){this.toString=function(){return'\"'+this.placeholder+'\" '+this.range.toString()},this.setFoldLine=function(e){this.foldLine=e,this.subFolds.forEach((function(t){t.setFoldLine(e)}))},this.clone=function(){var e=this.range.clone(),t=new i(e,this.placeholder);return this.subFolds.forEach((function(e){t.subFolds.push(e.clone())})),t.collapseChildren=this.collapseChildren,t},this.addSubFold=function(e){if(!this.range.isEqual(e)){s((o=e).start,a=this.start),s(o.end,a);for(var t=e.start.row,n=e.start.column,r=0,i=-1;r<this.subFolds.length&&1==(i=this.subFolds[r].range.compare(t,n));r++);var o=this.subFolds[r],a=0;if(0==i){if(o.range.containsRange(e))return o.addSubFold(e);a=1}t=e.range.end.row,n=e.range.end.column;var c=r;for(i=-1;c<this.subFolds.length&&1==(i=this.subFolds[c].range.compare(t,n));c++);0==i&&c++;for(var l=this.subFolds.splice(r,c-r,e),h=0==i?l.length-1:l.length,d=a;d<h;d++)e.addSubFold(l[d]);return e.setFoldLine(this.foldLine),e}},this.restoreRange=function(e){return o((t=e).start,e=this.start),void o(t.end,e);var t}}).call(i.prototype)})),ace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"],(function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"./fold_line\").FoldLine,s=e(\"./fold\").Fold,o=e(\"../token_iterator\").TokenIterator;t.Folding=function(){this.getFoldAt=function(e,t,n){var r=this.getFoldLine(e);if(!r)return null;for(var i=r.folds,s=0;s<i.length;s++){var o=i[s].range;if(o.contains(e,t)&&(1!=n||!o.isEnd(e,t)||o.isEmpty())&&(-1!=n||!o.isStart(e,t)||o.isEmpty()))return i[s]}},this.getFoldsInRange=function(e){var t=e.start,n=e.end,r=this.$foldData,i=[];t.column+=1,--n.column;for(var s=0;s<r.length;s++)if(2!=(c=r[s].range.compareRange(e))){if(-2==c)break;for(var o=r[s].folds,a=0;a<o.length;a++){var c,l=o[a];if(-2==(c=l.range.compareRange(e)))break;if(2!=c){if(42==c)break;i.push(l)}}}return--t.column,n.column+=1,i},this.getFoldsInRangeList=function(e){var t;return Array.isArray(e)?(t=[],e.forEach((function(e){t=t.concat(this.getFoldsInRange(e))}),this)):t=this.getFoldsInRange(e),t},this.getAllFolds=function(){for(var e=[],t=this.$foldData,n=0;n<t.length;n++)for(var r=0;r<t[n].folds.length;r++)e.push(t[n].folds[r]);return e},this.getFoldStringAt=function(e,t,n,r){if(!(r=r||this.getFoldLine(e)))return null;for(var i,s,o={end:{column:0}},a=0;a<r.folds.length;a++){var c=(s=r.folds[a]).range.compareEnd(e,t);if(-1==c){i=this.getLine(s.start.row).substring(o.end.column,s.start.column);break}if(0===c)return null;o=s}return i=i||this.getLine(s.start.row).substring(o.end.column),-1==n?i.substring(0,t-o.end.column):1==n?i.substring(t-o.end.column):i},this.getFoldLine=function(e,t){var n=this.$foldData,r=0;for(t&&(r=n.indexOf(t)),-1==r&&(r=0);r<n.length;r++){var i=n[r];if(i.start.row<=e&&i.end.row>=e)return i;if(i.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var n=this.$foldData,r=0;for(t&&(r=n.indexOf(t)),-1==r&&(r=0);r<n.length;r++){var i=n[r];if(i.end.row>=e)return i}return null},this.getFoldedRowCount=function(e,t){for(var n=this.$foldData,r=t-e+1,i=0;i<n.length;i++){var s=(o=n[i]).end.row,o=o.start.row;if(t<=s){o<t&&(e<=o?r-=t-o:r=0);break}e<=s&&(r-=e<=o?s-o:s-e+1)}return r},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort((function(e,t){return e.start.row-t.start.row})),e},this.addFold=function(e,t){var n,r=this.$foldData,o=!1;e instanceof s?n=e:(n=new s(t,e)).collapseChildren=t.collapseChildren,this.$clipRangeToDocument(n.range);var a=n.start.row,c=n.start.column,l=n.end.row,h=n.end.column;if(e=this.getFoldAt(a,c,1),t=this.getFoldAt(l,h,-1),e&&t==e)return e.addSubFold(n);e&&!e.range.isStart(a,c)&&this.removeFold(e),t&&!t.range.isEnd(l,h)&&this.removeFold(t),0<(t=this.getFoldsInRange(n.range)).length&&(this.removeFolds(t),n.collapseChildren||t.forEach((function(e){n.addSubFold(e)})));for(var d=0;d<r.length;d++){var u=r[d];if(l==u.start.row){u.addFold(n),o=!0;break}if(a==u.end.row){if(u.addFold(n),o=!0,!n.sameRow){var f=r[d+1];if(f&&f.start.row==l){u.merge(f);break}}break}if(l<=u.start.row)break}return o||(u=this.$addFoldLine(new i(this.$foldData,n))),this.$useWrapMode?this.$updateWrapData(u.start.row,u.start.row):this.$updateRowLengthCache(u.start.row,u.start.row),this.$modified=!0,this._signal(\"changeFold\",{data:n,action:\"add\"}),n},this.addFolds=function(e){e.forEach((function(e){this.addFold(e)}),this)},this.removeFold=function(e){var t=e.foldLine,n=t.start.row,r=t.end.row,i=this.$foldData,s=t.folds;1==s.length?i.splice(i.indexOf(t),1):t.range.isEnd(e.end.row,e.end.column)?(s.pop(),t.end.row=s[s.length-1].end.row,t.end.column=s[s.length-1].end.column):t.range.isStart(e.start.row,e.start.column)?(s.shift(),t.start.row=s[0].start.row,t.start.column=s[0].start.column):e.sameRow?s.splice(s.indexOf(e),1):((s=(t=t.split(e.start.row,e.start.column)).folds).shift(),t.start.row=s[0].start.row,t.start.column=s[0].start.column),this.$updating||(this.$useWrapMode?this.$updateWrapData(n,r):this.$updateRowLengthCache(n,r)),this.$modified=!0,this._signal(\"changeFold\",{data:e,action:\"remove\"})},this.removeFolds=function(e){for(var t=[],n=0;n<e.length;n++)t.push(e[n]);t.forEach((function(e){this.removeFold(e)}),this),this.$modified=!0},this.expandFold=function(e){this.removeFold(e),e.subFolds.forEach((function(t){e.restoreRange(t),this.addFold(t)}),this),0<e.collapseChildren&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach((function(e){this.expandFold(e)}),this)},this.unfold=function(e,t){var n;if(null==e?(n=new r(0,0,this.getLength(),0),null==t&&(t=!0)):n=\"number\"==typeof e?new r(e,0,e,this.getLine(e).length):\"row\"in e?r.fromPoints(e,e):e,n=this.getFoldsInRangeList(n),0!=t?this.removeFolds(n):this.expandFolds(n),n.length)return n},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){return(t=this.getFoldLine(e,t))?t.end.row:e},this.getRowFoldStart=function(e,t){return(t=this.getFoldLine(e,t))?t.start.row:e},this.getFoldDisplayLine=function(e,t,n,r,i){null==r&&(r=e.start.row),null==i&&(i=0),null==t&&(t=e.end.row),null==n&&(n=this.getLine(t).length);var s=this.doc,o=\"\";return e.walk((function(e,t,n,a){if(!(t<r)){if(t==r){if(n<i)return;a=Math.max(i,a)}o+=null!=e?e:s.getLine(t).substring(a,n)}}),t,n),o},this.getDisplayLine=function(e,t,n,r){var i=this.getFoldLine(e);return i?this.getFoldDisplayLine(i,e,t,n,r):(e=this.doc.getLine(e)).substring(r||0,t||e.length)},this.$cloneFoldData=function(){var e=[];return e=this.$foldData.map((function(t){return t=t.folds.map((function(e){return e.clone()})),new i(e,t)}))},this.toggleFold=function(e){var t,n=this.selection.getRange();if(n.isEmpty()){var r=n.start;if(i=this.getFoldAt(r.row,r.column))return void this.expandFold(i);(t=this.findMatchingBracket(r))?1==n.comparePoint(t)?n.end=t:(n.start=t,n.start.column++,n.end.column--):(t=this.findMatchingBracket({row:r.row,column:r.column+1}))?(1==n.comparePoint(t)?n.end=t:n.start=t,n.start.column++):n=this.getCommentFoldRange(r.row,r.column)||n}else{if(r=this.getFoldsInRange(n),e&&r.length)return void this.expandFolds(r);1==r.length&&(i=r[0])}if((i=i||this.getFoldAt(n.start.row,n.start.column))&&i.range.toString()==n.toString())this.expandFold(i);else{var i=\"...\";if(!n.isMultiLine()){if((i=this.getTextRange(n)).length<4)return;i=i.trim().substring(0,2)+\"..\"}this.addFold(i,n)}},this.getCommentFoldRange=function(e,t,n){var i=new o(this,e,t),s=i.getCurrentToken(),a=s&&s.type;if(s&&/^comment|string/.test(a)){\"comment\"==(a=a.match(/comment|string/)[0])&&(a+=\"|doc-start\");var c=new RegExp(a);if(a=new r,1!=n){for(;(s=i.stepBackward())&&c.test(s.type););i.stepForward()}if(a.start.row=i.getCurrentTokenRow(),a.start.column=i.getCurrentTokenColumn()+2,i=new o(this,e,t),-1!=n){var l=-1;do{if(s=i.stepForward(),-1==l){var h=this.getState(i.$row);c.test(h)||(l=i.$row)}else if(i.$row>l)break}while(s&&c.test(s.type));s=i.stepBackward()}else s=i.getCurrentToken();return a.end.row=i.getCurrentTokenRow(),a.end.column=i.getCurrentTokenColumn()+s.value.length-2,a}},this.foldAll=function(e,t,n,r){null==n&&(n=1e5);var i=this.foldWidgets;if(i){t=t||this.getLength();for(var s,o=e=e||0;o<t;o++)null==i[o]&&(i[o]=this.getFoldWidget(o)),\"start\"==i[o]&&(r&&!r(o)||(s=this.getFoldWidgetRange(o))&&s.isMultiLine()&&s.end.row<=t&&s.start.row>=e&&(o=s.end.row,s.collapseChildren=n,this.addFold(\"...\",s)))}},this.foldToLevel=function(e){for(this.foldAll();0<e--;)this.unfold(null,!1)},this.foldAllComments=function(){var e=this;this.foldAll(null,null,null,(function(t){for(var n=e.getTokens(t),r=0;r<n.length;r++){var i=n[r];if(\"text\"!=i.type||!/^\\s+$/.test(i.value))return!!/comment/.test(i.type)}}))},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle=\"markbegin\",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error(\"invalid fold style: \"+e+\"[\"+Object.keys(this.$foldStyles).join(\", \")+\"]\");this.$foldStyle!=e&&(\"manual\"==(this.$foldStyle=e)&&this.unfold(),e=this.$foldMode,this.$setFolding(null),this.$setFolding(e))},this.$setFolding=function(e){this.$foldMode!=e&&(this.$foldMode=e,this.off(\"change\",this.$updateFoldWidgets),this.off(\"tokenizerUpdate\",this.$tokenizerUpdateFoldWidgets),this._signal(\"changeAnnotation\"),e&&\"manual\"!=this.$foldStyle?(this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on(\"change\",this.$updateFoldWidgets),this.on(\"tokenizerUpdate\",this.$tokenizerUpdateFoldWidgets)):this.foldWidgets=null)},this.getParentFoldRangeData=function(e,t){var n=this.foldWidgets;if(!n||t&&n[e])return{};for(var r=e-1;0<=r;){var i=n[r];if(null==i&&(i=n[r]=this.getFoldWidget(r)),\"start\"==i){var s=this.getFoldWidgetRange(r),o=o||s;if(s&&s.end.row>=e)break}r--}return{range:-1!==r&&s,firstRange:o}},this.onFoldWidgetClick=function(e,t){var n={children:(t=t.domEvent).shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey};this.$toggleFoldWidget(e,n)||(t=t.target||t.srcElement)&&/ace_fold-widget/.test(t.className)&&(t.className+=\" ace_invalid\")},this.$toggleFoldWidget=function(e,t){if(this.getFoldWidget){var n,r,i=this.getFoldWidget(e),s=this.getLine(e);return(s=this.getFoldAt(e,-1==(i=\"end\"===i?-1:1)?0:s.length,i))?(t.children||t.all?this.removeFold(s):this.expandFold(s),s):(i=this.getFoldWidgetRange(e,!0))&&!i.isMultiLine()&&(s=this.getFoldAt(i.start.row,i.start.column,1))&&i.isEqual(s.range)?(this.removeFold(s),s):(t.siblings?((s=this.getParentFoldRangeData(e)).range&&(n=s.range.start.row+1,r=s.range.end.row),this.foldAll(n,r,t.all?1e4:0)):t.children?(r=i?i.end.row:this.getLength(),this.foldAll(e+1,r,t.all?1e4:0)):i&&(t.all&&(i.collapseChildren=1e4),this.addFold(\"...\",i)),i)}},this.toggleFoldWidget=function(e){var t,n=this.selection.getCursor().row,r=(n=this.getRowFoldStart(n),this.$toggleFoldWidget(n,{}));r||(r=(t=this.getParentFoldRangeData(n,!0)).range||t.firstRange)&&((n=this.getFoldAt(n=r.start.row,this.getLine(n).length,1))?this.removeFold(n):this.addFold(\"...\",r))},this.updateFoldWidgets=function(e){var t=e.start.row,n=e.end.row-t;0==n?this.foldWidgets[t]=null:\"remove\"==e.action?this.foldWidgets.splice(t,1+n,null):((n=Array(1+n)).unshift(t,1),this.foldWidgets.splice.apply(this.foldWidgets,n))},this.tokenizerUpdateFoldWidgets=function(e){(e=e.data).first!=e.last&&this.foldWidgets.length>e.first&&this.foldWidgets.splice(e.first,this.foldWidgets.length)}}})),ace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"../token_iterator\").TokenIterator,i=e(\"../range\").Range;t.BracketMatch=function(){this.findMatchingBracket=function(e,t){return 0==e.column||\"\"==(t=t||this.getLine(e.row).charAt(e.column-1))?null:(t=t.match(/([\\(\\[\\{])|([\\)\\]\\}])/))?t[1]?this.$findClosingBracket(t[1],e):this.$findOpeningBracket(t[2],e):null},this.getBracketRange=function(e){var t,n,r=this.getLine(e.row),s=!0,o=r.charAt(e.column-1),a=o&&o.match(/([\\(\\[\\{])|([\\)\\]\\}])/);if(a||(o=r.charAt(e.column),e={row:e.row,column:e.column+1},a=o&&o.match(/([\\(\\[\\{])|([\\)\\]\\}])/),s=!1),!a)return null;if(a[1]){if(!(n=this.$findClosingBracket(a[1],e)))return null;t=i.fromPoints(e,n),s||(t.end.column++,t.start.column--),t.cursor=t.end}else{if(!(n=this.$findOpeningBracket(a[2],e)))return null;t=i.fromPoints(n,e),s||(t.start.column++,t.end.column--),t.cursor=t.start}return t},this.getMatchingBracketRanges=function(e){var t=this.getLine(e.row),n=t.charAt(e.column-1),r=n&&n.match(/([\\(\\[\\{])|([\\)\\]\\}])/);return r||(n=t.charAt(e.column),e={row:e.row,column:e.column+1},r=n&&n.match(/([\\(\\[\\{])|([\\)\\]\\}])/)),r?(n=new i(e.row,e.column-1,e.row,e.column),(e=r[1]?this.$findClosingBracket(r[1],e):this.$findOpeningBracket(r[2],e))?[n,new i(e.row,e.column,e.row,e.column+1)]:[n]):null},this.$brackets={\")\":\"(\",\"(\":\")\",\"]\":\"[\",\"[\":\"]\",\"{\":\"}\",\"}\":\"{\",\"<\":\">\",\">\":\"<\"},this.$findOpeningBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),a=o.getCurrentToken();if(a=a||o.stepForward()){n=n||new RegExp(\"(\\\\.?\"+a.type.replace(\".\",\"\\\\.\").replace(\"rparen\",\".paren\").replace(/\\b(?:end)\\b/,\"(?:start|begin|end)\")+\")+\");for(var c=t.column-o.getCurrentTokenColumn()-2,l=a.value;;){for(;0<=c;){var h=l.charAt(c);if(h==i){if(0==--s)return{row:o.getCurrentTokenRow(),column:c+o.getCurrentTokenColumn()}}else h==e&&(s+=1);--c}for(;(a=o.stepBackward())&&!n.test(a.type););if(null==a)break;c=(l=a.value).length-1}return null}},this.$findClosingBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),a=o.getCurrentToken();if(a=a||o.stepForward()){n=n||new RegExp(\"(\\\\.?\"+a.type.replace(\".\",\"\\\\.\").replace(\"lparen\",\".paren\").replace(/\\b(?:start|begin)\\b/,\"(?:start|begin|end)\")+\")+\");for(var c=t.column-o.getCurrentTokenColumn();;){for(var l=a.value,h=l.length;c<h;){var d=l.charAt(c);if(d==i){if(0==--s)return{row:o.getCurrentTokenRow(),column:c+o.getCurrentTokenColumn()}}else d==e&&(s+=1);c+=1}for(;(a=o.stepForward())&&!n.test(a.type););if(null==a)break;c=0}return null}}}})),ace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"],(function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/lang\"),s=e(\"./bidihandler\").BidiHandler,o=e(\"./config\"),a=e(\"./lib/event_emitter\").EventEmitter,c=e(\"./selection\").Selection,l=e(\"./mode/text\").Mode,h=e(\"./range\").Range,d=e(\"./document\").Document,u=e(\"./background_tokenizer\").BackgroundTokenizer,f=e(\"./search_highlight\").SearchHighlight,g=function(e,t){this.$breakpoints=[],this.$decorations=[],this.$frontMarkers={},this.$backMarkers={},this.$markerId=1,this.$undoSelect=!0,this.$foldData=[],this.id=\"session\"+ ++g.$uid,this.$foldData.toString=function(){return this.join(\"\\n\")},this.on(\"changeFold\",this.onChangeFold.bind(this)),this.$onChange=this.onChange.bind(this),\"object\"==typeof e&&e.getLine||(e=new d(e)),this.setDocument(e),this.selection=new c(this),this.$bidiHandler=new s(this),o.resetOptions(this),this.setMode(t),o._signal(\"session\",this)};g.$uid=0,(function(){r.implement(this,a),this.setDocument=function(e){this.doc&&this.doc.removeListener(\"change\",this.$onChange),(this.doc=e).on(\"change\",this.$onChange),this.bgTokenizer&&this.bgTokenizer.setDocument(this.getDocument()),this.resetCaches()},this.getDocument=function(){return this.doc},this.$resetRowCache=function(e){if(!e)return this.$docRowCache=[],void(this.$screenRowCache=[]);var t=this.$docRowCache.length;(e=this.$getRowCacheIndex(this.$docRowCache,e)+1)<t&&(this.$docRowCache.splice(e,t),this.$screenRowCache.splice(e,t))},this.$getRowCacheIndex=function(e,t){for(var n=0,r=e.length-1;n<=r;){var i=n+r>>1,s=e[i];if(s<t)n=1+i;else{if(!(t<s))return i;r=i-1}}return n-1},this.resetCaches=function(){this.$modified=!0,this.$wrapData=[],this.$rowLengthCache=[],this.$resetRowCache(0),this.bgTokenizer&&this.bgTokenizer.start(0)},this.onChangeFold=function(e){this.$resetRowCache((e=e.data).start.row)},this.onChange=function(e){this.$modified=!0,this.$bidiHandler.onChange(e),this.$resetRowCache(e.start.row);var t=this.$updateInternalDataOnChange(e);!this.$fromUndo&&this.$undoManager&&(t&&t.length&&(this.$undoManager.add({action:\"removeFolds\",folds:t},this.mergeUndoDeltas),this.mergeUndoDeltas=!0),this.$undoManager.add(e,this.mergeUndoDeltas),this.mergeUndoDeltas=!0,this.$informUndoManager.schedule()),this.bgTokenizer&&this.bgTokenizer.$updateOnChange(e),this._signal(\"change\",e)},this.setValue=function(e){this.doc.setValue(e),this.selection.moveTo(0,0),this.$resetRowCache(0),this.setUndoManager(this.$undoManager),this.getUndoManager().reset()},this.getValue=this.toString=function(){return this.doc.getValue()},this.getSelection=function(){return this.selection},this.getState=function(e){return this.bgTokenizer.getState(e)},this.getTokens=function(e){return this.bgTokenizer.getTokens(e)},this.getTokenAt=function(e,t){var n=this.bgTokenizer.getTokens(e),r=0;if(null==t){var i=n.length-1;r=this.getLine(e).length}else for(i=0;i<n.length&&!(t<=(r+=n[i].value.length));i++);return(e=n[i])?(e.index=i,e.start=r-e.value.length,e):null},this.setUndoManager=function(e){var t;this.$undoManager=e,this.$informUndoManager&&this.$informUndoManager.cancel(),e?(t=this,e.addSession(this),this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.mergeUndoDeltas=!1},this.$informUndoManager=i.delayedCall(this.$syncInformUndoManager)):this.$syncInformUndoManager=function(){}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},hasUndo:function(){},hasRedo:function(){},reset:function(){},add:function(){},addSelection:function(){},startNewGroup:function(){},addSession:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?i.stringRepeat(\" \",this.getTabSize()):\"\\t\"},this.setUseSoftTabs=function(e){this.setOption(\"useSoftTabs\",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption(\"tabSize\",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize==0},this.setNavigateWithinSoftTabs=function(e){this.setOption(\"navigateWithinSoftTabs\",e)},this.getNavigateWithinSoftTabs=function(){return this.$navigateWithinSoftTabs},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption(\"overwrite\",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=\"\"),this.$decorations[e]+=\" \"+t,this._signal(\"changeBreakpoint\",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||\"\").replace(\" \"+t,\"\"),this._signal(\"changeBreakpoint\",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t<e.length;t++)this.$breakpoints[e[t]]=\"ace_breakpoint\";this._signal(\"changeBreakpoint\",{})},this.clearBreakpoints=function(){this.$breakpoints=[],this._signal(\"changeBreakpoint\",{})},this.setBreakpoint=function(e,t){void 0===t&&(t=\"ace_breakpoint\"),t?this.$breakpoints[e]=t:delete this.$breakpoints[e],this._signal(\"changeBreakpoint\",{})},this.clearBreakpoint=function(e){delete this.$breakpoints[e],this._signal(\"changeBreakpoint\",{})},this.addMarker=function(e,t,n,r){var i=this.$markerId++;return t={range:e,type:n||\"line\",renderer:\"function\"==typeof n?n:null,clazz:t,inFront:!!r,id:i},r?(this.$frontMarkers[i]=t,this._signal(\"changeFrontMarker\")):(this.$backMarkers[i]=t,this._signal(\"changeBackMarker\")),i},this.addDynamicMarker=function(e,t){if(e.update){var n=this.$markerId++;return e.id=n,e.inFront=!!t,t?(this.$frontMarkers[n]=e,this._signal(\"changeFrontMarker\")):(this.$backMarkers[n]=e,this._signal(\"changeBackMarker\")),e}},this.removeMarker=function(e){var t=this.$frontMarkers[e]||this.$backMarkers[e];t&&(delete(t.inFront?this.$frontMarkers:this.$backMarkers)[e],this._signal(t.inFront?\"changeFrontMarker\":\"changeBackMarker\"))},this.getMarkers=function(e){return e?this.$frontMarkers:this.$backMarkers},this.highlight=function(e){var t;this.$searchHighlight||(t=new f(null,\"ace_selected-word\",\"text\"),this.$searchHighlight=this.addDynamicMarker(t)),this.$searchHighlight.setRegexp(e)},this.highlightLines=function(e,t,n,r){return\"number\"!=typeof t&&(n=t,t=e),n=n||\"ace_step\",(t=new h(e,0,t,1/0)).id=this.addMarker(t,n,\"fullLine\",r),t},this.setAnnotations=function(e){this.$annotations=e,this._signal(\"changeAnnotation\",{})},this.getAnnotations=function(){return this.$annotations||[]},this.clearAnnotations=function(){this.setAnnotations([])},this.$detectNewLine=function(e){e=e.match(/^.*?(\\r?\\n)/m),this.$autoNewLine=e?e[1]:\"\\n\"},this.getWordRange=function(e,t){var n,r=this.getLine(e),i=!1;0<t&&(i=!!r.charAt(t-1).match(this.tokenRe)),n=(i=i||!!r.charAt(t).match(this.tokenRe))?this.tokenRe:/^\\s+$/.test(r.slice(t-1,t+1))?/\\s/:this.nonTokenRe;var s=t;if(0<s){for(;0<=--s&&r.charAt(s).match(n););s++}for(var o=t;o<r.length&&r.charAt(o).match(n);)o++;return new h(e,s,e,o)},this.getAWordRange=function(e,t){for(var n=this.getWordRange(e,t),r=this.getLine(n.end.row);r.charAt(n.end.column).match(/[ \\t]/);)n.end.column+=1;return n},this.setNewLineMode=function(e){this.doc.setNewLineMode(e)},this.getNewLineMode=function(){return this.doc.getNewLineMode()},this.setUseWorker=function(e){this.setOption(\"useWorker\",e)},this.getUseWorker=function(){return this.$useWorker},this.onReloadTokenizer=function(e){this.bgTokenizer.start(e.data.first),this._signal(\"tokenizerUpdate\",e)},this.$modes=o.$modes,this.$mode=null,this.$modeId=null,this.setMode=function(e,t){if(e&&\"object\"==typeof e){if(e.getTokenizer)return this.$onChangeMode(e);var n=e,r=e.path}else r=e||\"ace/mode/text\";if(this.$modes[\"ace/mode/text\"]||(this.$modes[\"ace/mode/text\"]=new l),this.$modes[r]&&!n)return this.$onChangeMode(this.$modes[r]),void(t&&t());this.$modeId=r,o.loadModule([\"mode\",r],(function(e){if(this.$modeId!==r)return t&&t();this.$modes[r]&&!n?this.$onChangeMode(this.$modes[r]):e&&e.Mode&&(e=new e.Mode(n),n||((this.$modes[r]=e).$id=r),this.$onChangeMode(e)),t&&t()}).bind(this)),this.$mode||this.$onChangeMode(this.$modes[\"ace/mode/text\"],!0)},this.$onChangeMode=function(e,t){var n,r,i,s;t||(this.$modeId=e.$id),this.$mode!==e&&(n=this.$mode,this.$mode=e,this.$stopWorker(),this.$useWorker&&this.$startWorker(),void 0!==(r=e.getTokenizer()).on&&(i=this.onReloadTokenizer.bind(this),r.on(\"update\",i)),this.bgTokenizer?this.bgTokenizer.setTokenizer(r):(this.bgTokenizer=new u(r),(s=this).bgTokenizer.on(\"update\",(function(e){s._signal(\"tokenizerUpdate\",e)}))),this.bgTokenizer.setDocument(this.getDocument()),this.tokenRe=e.tokenRe,this.nonTokenRe=e.nonTokenRe,t||(e.attachToSession&&e.attachToSession(this),this.$options.wrapMethod.set.call(this,this.$wrapMethod),this.$setFolding(e.foldingRules),this.bgTokenizer.start(0),this._emit(\"changeMode\",{oldMode:n,mode:e})))},this.$stopWorker=function(){this.$worker&&(this.$worker.terminate(),this.$worker=null)},this.$startWorker=function(){try{this.$worker=this.$mode.createWorker(this)}catch(e){o.warn(\"Could not load worker\",e),this.$worker=null}},this.getMode=function(){return this.$mode},this.$scrollTop=0,this.setScrollTop=function(e){this.$scrollTop===e||isNaN(e)||(this.$scrollTop=e,this._signal(\"changeScrollTop\",e))},this.getScrollTop=function(){return this.$scrollTop},this.$scrollLeft=0,this.setScrollLeft=function(e){this.$scrollLeft===e||isNaN(e)||(this.$scrollLeft=e,this._signal(\"changeScrollLeft\",e))},this.getScrollLeft=function(){return this.$scrollLeft},this.getScreenWidth=function(){return this.$computeWidth(),this.lineWidgets?Math.max(this.getLineWidgetMaxWidth(),this.screenWidth):this.screenWidth},this.getLineWidgetMaxWidth=function(){if(null!=this.lineWidgetsWidth)return this.lineWidgetsWidth;var e=0;return this.lineWidgets.forEach((function(t){t&&t.screenWidth>e&&(e=t.screenWidth)})),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){if(this.$modified=!1,this.$useWrapMode)return this.screenWidth=this.$wrapLimit;for(var t=this.doc.getAllLines(),n=this.$rowLengthCache,r=0,i=0,s=this.$foldData[i],o=s?s.start.row:1/0,a=t.length,c=0;c<a;c++){if(o<c){if(a<=(c=s.end.row+1))break;o=(s=this.$foldData[i++])?s.start.row:1/0}null==n[c]&&(n[c]=this.$getStringScreenWidth(t[c])[0]),n[c]>r&&(r=n[c])}this.screenWidth=r}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.removeFullLines=function(e,t){return this.doc.removeFullLines(e,t)},this.undoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var n=e.length-1;-1!=n;n--){var r=e[n];\"insert\"==r.action||\"remove\"==r.action?this.doc.revertDelta(r):r.folds&&this.addFolds(r.folds)}!t&&this.$undoSelect&&(e.selectionBefore?this.selection.fromJSON(e.selectionBefore):this.selection.setRange(this.$getUndoSelection(e,!0))),this.$fromUndo=!1}},this.redoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var n=0;n<e.length;n++){var r=e[n];\"insert\"!=r.action&&\"remove\"!=r.action||this.doc.$safeApplyDelta(r)}!t&&this.$undoSelect&&(e.selectionAfter?this.selection.fromJSON(e.selectionAfter):this.selection.setRange(this.$getUndoSelection(e,!1))),this.$fromUndo=!1}},this.setUndoSelect=function(e){this.$undoSelect=e},this.$getUndoSelection=function(e,t){function n(e){return t?\"insert\"!==e.action:\"insert\"===e.action}for(var r,i,s=0;s<e.length;s++){var o=e[s];o.start&&(r?n(o)?(-1==r.compare((i=o.start).row,i.column)&&r.setStart(i),1==r.compare((i=o.end).row,i.column)&&r.setEnd(i)):-1==r.compare((i=o.start).row,i.column)&&(r=h.fromPoints(o.start,o.start)):r=n(o)?h.fromPoints(o.start,o.end):h.fromPoints(o.start,o.start))}return r},this.replace=function(e,t){return this.doc.replace(e,t)},this.moveText=function(e,t,n){var r,i,s,o=this.getTextRange(e),a=this.getFoldsInRange(e);return t=h.fromPoints(t,t),n||(this.remove(e),(s=(i=e.start.row-e.end.row)?-e.end.column:e.start.column-e.end.column)&&(t.start.row==e.end.row&&t.start.column>e.end.column&&(t.start.column+=s),t.end.row==e.end.row&&t.end.column>e.end.column&&(t.end.column+=s)),i&&t.start.row>=e.end.row&&(t.start.row+=i,t.end.row+=i)),t.end=this.insert(t.start,o),a.length&&(r=e.start,i=(e=t.start).row-r.row,s=e.column-r.column,this.addFolds(a.map((function(e){return(e=e.clone()).start.row==r.row&&(e.start.column+=s),e.end.row==r.row&&(e.end.column+=s),e.start.row+=i,e.end.row+=i,e})))),t},this.indentRows=function(e,t,n){n=n.replace(/\\t/g,this.getTabString());for(var r=e;r<=t;r++)this.doc.insertInLine({row:r,column:0},n)},this.outdentRows=function(e){for(var t=e.collapseRows(),n=new h(0,0,0,0),r=this.getTabSize(),i=t.start.row;i<=t.end.row;++i){var s=this.getLine(i);n.start.row=i,n.end.row=i;for(var o=0;o<r&&\" \"==s.charAt(o);++o);o<r&&\"\\t\"==s.charAt(o)?(n.start.column=o,n.end.column=o+1):(n.start.column=0,n.end.column=o),this.remove(n)}},this.$moveLines=function(e,t,n){if(e=this.getRowFoldStart(e),t=this.getRowFoldEnd(t),n<0){if((i=this.getRowFoldStart(e+n))<0)return 0;var r=i-e}else if(0<n){if((i=this.getRowFoldEnd(t+n))>this.doc.getLength()-1)return 0;r=i-t}else e=this.$clipRowToDocument(e),r=(t=this.$clipRowToDocument(t))-e+1;var i=new h(e,0,t,Number.MAX_VALUE);return i=this.getFoldsInRange(i).map((function(e){return(e=e.clone()).start.row+=r,e.end.row+=r,e})),t=0==n?this.doc.getLines(e,t):this.doc.removeFullLines(e,t),this.doc.insertFullLines(e+r,t),i.length&&this.addFolds(i),r},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){var n;return t=Math.max(0,t),t=e<0?e=0:(n=this.doc.getLength())<=e?(e=n-1,this.doc.getLine(n-1).length):Math.min(this.doc.getLine(e).length,t),{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){e!=this.$useWrapMode&&(this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0),e&&(e=this.getLength(),this.$wrapData=Array(e),this.$updateWrapData(0,e-1)),this._signal(\"changeWrapMode\"))},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){this.$wrapLimitRange.min===e&&this.$wrapLimitRange.max===t||(this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this.$bidiHandler.markAsDirty(),this.$useWrapMode&&this._signal(\"changeWrapMode\"))},this.adjustWrapLimit=function(e,t){var n=this.$wrapLimitRange;return n.max<0&&(n={min:t,max:t}),(n=this.$constrainWrapLimit(e,n.min,n.max))!=this.$wrapLimit&&1<n&&(this.$wrapLimit=n,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal(\"changeWrapLimit\")),!0)},this.$constrainWrapLimit=function(e,t,n){return t&&(e=Math.max(t,e)),n&&(e=Math.min(n,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t,n=this.$useWrapMode,r=e.action,i=e.start,s=e.end,o=i.row,a=s.row,c=a-o,l=null;if(this.$updating=!0,0!=c)if(\"remove\"===r){this[n?\"$wrapData\":\"$rowLengthCache\"].splice(o,c);var h=this.$foldData;l=this.getFoldsInRange(e),this.removeFolds(l);var d=0;for((t=this.getFoldLine(s.row))&&(t.addRemoveChars(s.row,s.column,i.column-s.column),t.shiftRow(-c),(f=this.getFoldLine(o))&&f!==t&&(f.merge(t),t=f),d=h.indexOf(t)+1);d<h.length;d++)(t=h[d]).start.row>=s.row&&t.shiftRow(-c);a=o}else{var u=Array(c);u.unshift(o,0);var f=n?this.$wrapData:this.$rowLengthCache;for(f.splice.apply(f,u),h=this.$foldData,d=0,(t=this.getFoldLine(o))&&(0==(u=t.range.compareInside(i.row,i.column))?(t=t.split(i.row,i.column))&&(t.shiftRow(c),t.addRemoveChars(a,0,s.column-i.column)):-1==u&&(t.addRemoveChars(o,0,s.column-i.column),t.shiftRow(c)),d=h.indexOf(t)+1);d<h.length;d++)(t=h[d]).start.row>=o&&t.shiftRow(c)}else c=Math.abs(e.start.column-e.end.column),\"remove\"===r&&(l=this.getFoldsInRange(e),this.removeFolds(l),c=-c),(t=this.getFoldLine(o))&&t.addRemoveChars(o,i.column,c);return n&&this.$wrapData.length!=this.doc.getLength()&&console.error(\"doc.getLength() and $wrapData.length have to be the same!\"),this.$updating=!1,n?this.$updateWrapData(o,a):this.$updateRowLengthCache(o,a),l},this.$updateRowLengthCache=function(e,t,n){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(e,r){var i,s,o=this.doc.getAllLines(),a=this.getTabSize(),c=this.$wrapData,l=this.$wrapLimit,h=e;for(r=Math.min(r,o.length-1);h<=r;)(s=this.getFoldLine(h,s))?(i=[],s.walk((function(e,r,s,a){var c;if(null!=e){(c=this.$getDisplayTokens(e,i.length))[0]=t;for(var l=1;l<c.length;l++)c[l]=n}else c=this.$getDisplayTokens(o[r].substring(a,s),i.length);i=i.concat(c)}).bind(this),s.end.row,o[s.end.row].length+1),c[s.start.row]=this.$computeWrapSplits(i,l,a),h=s.end.row+1):(i=this.$getDisplayTokens(o[h]),c[h]=this.$computeWrapSplits(i,l,a),h++)};var t=3,n=4;function s(e){return!(e<4352)&&(4352<=e&&e<=4447||4515<=e&&e<=4519||4602<=e&&e<=4607||9001<=e&&e<=9002||11904<=e&&e<=11929||11931<=e&&e<=12019||12032<=e&&e<=12245||12272<=e&&e<=12283||12288<=e&&e<=12350||12353<=e&&e<=12438||12441<=e&&e<=12543||12549<=e&&e<=12589||12593<=e&&e<=12686||12688<=e&&e<=12730||12736<=e&&e<=12771||12784<=e&&e<=12830||12832<=e&&e<=12871||12880<=e&&e<=13054||13056<=e&&e<=19903||19968<=e&&e<=42124||42128<=e&&e<=42182||43360<=e&&e<=43388||44032<=e&&e<=55203||55216<=e&&e<=55238||55243<=e&&e<=55291||63744<=e&&e<=64255||65040<=e&&e<=65049||65072<=e&&e<=65106||65108<=e&&e<=65126||65128<=e&&e<=65131||65281<=e&&e<=65376||65504<=e&&e<=65510)}this.$computeWrapSplits=function(e,r,i){if(0==e.length)return[];var s=[],o=e.length,a=0,c=0,l=this.$wrapAsCode,h=this.$indentedSoftWrap,d=r<=Math.max(2*i,8)||!1===h?0:Math.floor(r/2);function u(t){for(var n=t-a,r=a;r<t;r++){var o=e[r];12!==o&&2!==o||--n}s.length||(f=function(){var t=0;if(0===d)return t;if(h)for(var n=0;n<e.length;n++){var r=e[n];if(10==r)t+=1;else if(11==r)t+=i;else if(12!=r)break}return l&&!1!==h&&(t+=i),Math.min(t,d)}(),s.indent=f),s.push(c+=n),a=t}for(var f=0;r-f<o-a;){var g=a+r-f;if(10<=e[g-1]&&10<=e[g])u(g);else if(e[g]!=t&&e[g]!=n){for(var p=Math.max(g-(r-(r>>2)),a-1);p<g&&e[g]<t;)g--;if(l){for(;p<g&&e[g]<t;)g--;for(;p<g&&9==e[g];)g--}else for(;p<g&&e[g]<10;)g--;p<g?u(++g):(2==e[g=a+r]&&g--,u(g-f))}else{for(;g!=a-1&&e[g]!=t;g--);if(a<g)u(g);else{for(g=a+r;g<e.length&&e[g]==n;g++);if(g==e.length)break;u(g)}}}return s},this.$getDisplayTokens=function(e,t){var n,r=[];t=t||0;for(var i=0;i<e.length;i++){var o=e.charCodeAt(i);if(9==o){n=this.getScreenTabSize(r.length+t),r.push(11);for(var a=1;a<n;a++)r.push(12)}else 32==o?r.push(10):39<o&&o<48||57<o&&o<64?r.push(9):4352<=o&&s(o)?r.push(1,2):r.push(1)}return r},this.$getStringScreenWidth=function(e,t,n){if(0==t)return[0,0];var r,i;for(null==t&&(t=1/0),n=n||0,i=0;i<e.length&&(9==(r=e.charCodeAt(i))?n+=this.getScreenTabSize(n):4352<=r&&s(r)?n+=2:n+=1,!(t<n));i++);return[n,i]},this.lineWidgets=null,this.getRowLength=function(e){var t=1;return this.lineWidgets&&(t+=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0),this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+t:t},this.getRowLineCount=function(e){return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1:1},this.getRowWrapIndent=function(e){if(this.$useWrapMode){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE);return(e=this.$wrapData[t.row]).length&&e[0]<t.column?e.indent:0}return 0},this.getScreenLastRowColumn=function(e){return e=this.screenToDocumentPosition(e,Number.MAX_VALUE),this.documentToScreenColumn(e.row,e.column)},this.getDocumentLastRowColumn=function(e,t){return t=this.documentToScreenRow(e,t),this.getScreenLastRowColumn(t)},this.getDocumentLastRowColumnPosition=function(e,t){return t=this.documentToScreenRow(e,t),this.screenToDocumentPosition(t,Number.MAX_VALUE/10)},this.getRowSplitData=function(e){if(this.$useWrapMode)return this.$wrapData[e]},this.getScreenTabSize=function(e){return this.$tabSize-(e%this.$tabSize|0)},this.screenToDocumentRow=function(e,t){return this.screenToDocumentPosition(e,t).row},this.screenToDocumentColumn=function(e,t){return this.screenToDocumentPosition(e,t).column},this.screenToDocumentPosition=function(e,t,n){if(e<0)return{row:0,column:0};var r,i,s,o=0,a=0,c=0,l=0,h=this.$screenRowCache,d=this.$getRowCacheIndex(h,e),u=h.length;s=u&&0<=d?(c=h[d],o=this.$docRowCache[d],e>h[u-1]):!u;for(var f=this.getLength()-1,g=this.getNextFoldLine(o),p=g?g.start.row:1/0;c<=e&&!(e<c+(l=this.getRowLength(o))||f<=o);)c+=l,p<++o&&(p=(g=this.getNextFoldLine(o=g.end.row+1,g))?g.start.row:1/0),s&&(this.$docRowCache.push(o),this.$screenRowCache.push(c));if(g&&g.start.row<=o)r=this.getFoldDisplayLine(g),o=g.start.row;else{if(c+l<=e||f<o)return{row:f,column:this.getLine(f).length};r=this.getLine(o),g=null}return d=0,h=Math.floor(e-c),!this.$useWrapMode||(u=this.$wrapData[o])&&(i=u[h],0<h&&u.length&&(d=u.indent,r=r.substring(a=u[h-1]||u[u.length-1]))),void 0!==n&&this.$bidiHandler.isBidiRow(c+h,o,h)&&(t=this.$bidiHandler.offsetToCol(n)),a+=this.$getStringScreenWidth(r,t-d)[1],this.$useWrapMode&&i<=a&&(a=i-1),g?g.idxToPosition(a):{row:o,column:a}},this.documentToScreenPosition=function(e,t){e=(l=void 0===t?this.$clipPositionToDocument(e.row,e.column):this.$clipPositionToDocument(e,t)).row;var n,r=0,i=null;(i=this.getFoldAt(e,t=l.column,1))&&(e=i.start.row,t=i.start.column);var s,o,a=0,c=this.$docRowCache,l=this.$getRowCacheIndex(c,e);o=(i=c.length)&&0<=l?(a=c[l],r=this.$screenRowCache[l],e>c[i-1]):!i;for(var h=this.getNextFoldLine(a),d=h?h.start.row:1/0;a<e;){if(d<=a){if(e<(s=h.end.row+1))break;d=(h=this.getNextFoldLine(s,h))?h.start.row:1/0}else s=a+1;r+=this.getRowLength(a),a=s,o&&(this.$docRowCache.push(a),this.$screenRowCache.push(r))}var u=\"\";if(n=h&&d<=a?(u=this.getFoldDisplayLine(h,e,t),h.start.row):(u=this.getLine(e).substring(0,t),e),t=0,this.$useWrapMode){var f=this.$wrapData[n];if(f){for(var g=0;u.length>=f[g];)r++,g++;u=u.substring(f[g-1]||0,u.length),t=0<g?f.indent:0}}return this.lineWidgets&&this.lineWidgets[a]&&this.lineWidgets[a].rowsAbove&&(r+=this.lineWidgets[a].rowsAbove),{row:r,column:t+this.$getStringScreenWidth(u)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(this.$useWrapMode)for(var n=this.$wrapData.length,r=0,i=0,s=(t=this.$foldData[i++])?t.start.row:1/0;r<n;){var o=this.$wrapData[r];e+=o?o.length+1:1,s<++r&&(r=t.end.row+1,s=(t=this.$foldData[i++])?t.start.row:1/0)}else{e=this.getLength();var a=this.$foldData;for(i=0;i<a.length;i++)e-=(t=a[i]).end.row-t.start.row}return this.lineWidgets&&(e+=this.$getWidgetScreenLength()),e},this.$setFontMetrics=function(e){this.$enableVarChar&&(this.$getStringScreenWidth=function(t,n,r){if(0===n)return[0,0];var i,s;for(n=n||1/0,r=r||0,s=0;s<t.length&&!(n<(r+=\"\\t\"===(i=t.charAt(s))?this.getScreenTabSize(r):e.getCharacterWidth(i)));s++);return[r,s]})},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker(),this.removeAllListeners(),this.selection.detach()},this.isFullWidth=s}).call(g.prototype),e(\"./edit_session/folding\").Folding.call(g.prototype),e(\"./edit_session/bracket_match\").BracketMatch.call(g.prototype),o.defineOptions(g.prototype,\"session\",{wrap:{set:function(e){e&&\"off\"!=e?\"free\"==e?e=!0:\"printMargin\"==e?e=-1:\"string\"==typeof e&&(e=parseInt(e,10)||!1):e=!1,this.$wrap!=e&&((this.$wrap=e)?(this.setWrapLimitRange(e=\"number\"==typeof e?e:null,e),this.setUseWrapMode(!0)):this.setUseWrapMode(!1))},get:function(){return this.getUseWrapMode()?-1==this.$wrap?\"printMargin\":this.getWrapLimitRange().min?this.$wrap:\"free\":\"off\"},handlesSet:!0},wrapMethod:{set:function(e){(e=\"auto\"==e?\"text\"!=this.$mode.type:\"text\"!=e)!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$useWrapMode=!1,this.setUseWrapMode(!0)))},initialValue:\"auto\"},indentedSoftWrap:{set:function(){this.$useWrapMode&&(this.$useWrapMode=!1,this.setUseWrapMode(!0))},initialValue:!0},firstLineNumber:{set:function(){this._signal(\"changeBreakpoint\")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){0<(e=parseInt(e))&&this.$tabSize!==e&&(this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal(\"changeTabSize\"))},initialValue:4,handlesSet:!0},navigateWithinSoftTabs:{initialValue:!1},foldStyle:{set:function(e){this.setFoldStyle(e)},handlesSet:!0},overwrite:{set:function(e){this._signal(\"changeOverwrite\")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId},handlesSet:!0}}),t.EditSession=g})),ace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"./lib/lang\"),i=e(\"./lib/oop\"),s=e(\"./range\").Range;(function(){this.set=function(e){return i.mixin(this.$options,e),this},this.getOptions=function(){return r.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options;if(!(e=this.$matchIterator(e,t)))return!1;var n=null;return e.forEach((function(e,r,i,o){return n=new s(e,r,i,o),!(r==o&&t.start&&t.start.start&&0!=t.skipCurrent&&n.isEqual(t.start)&&(n=null,1))})),n},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var n=t.range,i=n?e.getLines(n.start.row,n.end.row):e.doc.getAllLines(),o=[],a=t.re;if(t.$isMultiLine){var c,l=a.length,h=i.length-l;e:for(var d=a.offset||0;d<=h;d++){for(var u=0;u<l;u++)if(-1==i[d+u].search(a[u]))continue e;var f=i[d+l-1],g=(g=i[d]).length-g.match(a[0])[0].length;f=f.match(a[l-1])[0].length,c&&c.end.row===d&&c.end.column>g||(o.push(c=new s(d,g,d+l-1,f)),2<l&&(d=d+l-2))}}else for(var p=0;p<i.length;p++){var m=r.getMatchOffsets(i[p],a);for(u=0;u<m.length;u++){var C=m[u];o.push(new s(p,C.offset,p,C.offset+C.length))}}if(n){var b=n.start.column,v=n.start.column;for(p=0,u=o.length-1;p<u&&o[p].start.column<b&&o[p].start.row==n.start.row;)p++;for(;p<u&&o[u].end.column>v&&o[u].end.row==n.end.row;)u--;for(o=o.slice(p,u+1),p=0,u=o.length;p<u;p++)o[p].start.row+=n.start.row,o[p].end.row+=n.start.row}return o},this.replace=function(e,t){var n=this.$options,r=this.$assembleRegExp(n);if(n.$isMultiLine)return t;if(r){var i=r.exec(e);if(!i||i[0].length!=e.length)return null;if(t=e.replace(r,t),n.preserveCase){t=t.split(\"\");for(var s=Math.min(e.length,e.length);s--;){var o=e[s];t[s]=o&&o.toLowerCase()!=o?t[s].toUpperCase():t[s].toLowerCase()}t=t.join(\"\")}return t}},this.$assembleRegExp=function(e,t){if(e.needle instanceof RegExp)return e.re=e.needle;var n,i,s=e.needle;if(!e.needle)return e.re=!1;function o(e){return/\\w/.test(e)||i.regExp?\"\\\\b\":\"\"}e.regExp||(s=r.escapeRegExp(s)),e.wholeWord&&(i=e,s=o((n=s)[0])+n+o(n[n.length-1]));var a=e.caseSensitive?\"gm\":\"gmi\";if(e.$isMultiLine=!t&&/[\\n\\r]/.test(s),e.$isMultiLine)return e.re=this.$assembleMultilineRegExp(s,a);try{var c=new RegExp(s,a)}catch(e){c=!1}return e.re=c},this.$assembleMultilineRegExp=function(e,t){for(var n=e.replace(/\\r\\n|\\r|\\n/g,\"$\\n^\").split(\"\\n\"),r=[],i=0;i<n.length;i++)try{r.push(new RegExp(n[i],t))}catch(e){return!1}return r},this.$matchIterator=function(e,t){var n=this.$assembleRegExp(t);if(!n)return!1;var r=1==t.backwards,i=0!=t.skipCurrent,s=t.range,o=t.start;(o=o||(s?s[r?\"end\":\"start\"]:e.selection.getRange())).start&&(o=o[i!=r?\"end\":\"start\"]);var a,c,l=s?s.start.row:0,h=s?s.end.row:e.getLength()-1;return s=r?function(e){var n=o.row;if(!c(n,o.column,e)){for(n--;l<=n;n--)if(c(n,Number.MAX_VALUE,e))return;if(0!=t.wrap)for(n=h,l=o.row;l<=n;n--)if(c(n,Number.MAX_VALUE,e))return}}:function(e){var n=o.row;if(!c(n,o.column,e)){for(n+=1;n<=h;n++)if(c(n,0,e))return;if(0!=t.wrap)for(n=l,h=o.row;n<=h;n++)if(c(n,0,e))return}},c=t.$isMultiLine?(a=n.length,function(t,i,s){var o=r?t-a+1:t;if(!(o<0)){var c=e.getLine(o),l=c.search(n[0]);if(!(!r&&l<i||-1===l)){for(var h=1;h<a;h++)if(-1==(c=e.getLine(o+h)).search(n[h]))return;if(t=c.match(n[a-1])[0].length,!(r&&i<t))return!!s(o,l,o+a-1,t)||void 0}}}):r?function(t,r,i){var s,o=e.getLine(t),a=[];for(n.lastIndex=0;s=n.exec(o);){var c=s[0].length,l=s.index;if(!c){if(l>=o.length)break;n.lastIndex=l+=1}if(s.index+c>r)break;a.push(s.index,c)}for(var h=a.length-1;0<=h;h-=2){var d=a[h-1];if(i(t,d,t,d+(c=a[h])))return!0}}:function(t,r,i){var s=e.getLine(t);for(n.lastIndex=r;o=n.exec(s);){var o,a=o[0].length;if(i(t,o=o.index,t,o+a))return!0;if(!a&&(n.lastIndex=o+=1,o>=s.length))return!1}},{forEach:s}}}).call((e=function(){this.$options={}}).prototype),t.Search=e})),ace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/keys\"),i=e(\"../lib/useragent\"),s=r.KEY_MODS;function o(e,t){this.platform=t||(i.isMac?\"mac\":\"win\"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function a(e,t){o.call(this,e,t),this.$singleCommand=!1}a.prototype=o.prototype,(function(){function e(e){return\"object\"==typeof e&&e.bindKey&&e.bindKey.position||(e.isDefault?-100:0)}this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),(this.commands[e.name]=e).bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var n=e&&(\"string\"==typeof e?e:e.name);e=this.commands[n],t||delete this.commands[n];var r,i=this.commandKeyBinding;for(r in i){var s,o=i[r];o==e?delete i[r]:!Array.isArray(o)||-1!=(s=o.indexOf(e))&&(o.splice(s,1),1==o.length&&(i[r]=o[0]))}},this.bindKey=function(e,t,n){if(\"object\"==typeof e&&e&&(null==n&&(n=e.position),e=e[this.platform]),e)return\"function\"==typeof t?this.addCommand({exec:t,bindKey:e,name:t.name||e}):void e.split(\"|\").forEach((function(e){var r,i=\"\";-1!=e.indexOf(\" \")&&(e=(r=e.split(/\\s+/)).pop(),r.forEach((function(e){e=this.parseKeys(e),this._addCommandToBinding(i+=(i?\" \":\"\")+(e=s[e.hashId]+e.key),\"chainKeys\")}),this),i+=\" \"),e=this.parseKeys(e),this._addCommandToBinding(i+(e=s[e.hashId]+e.key),t,n)}),this)},this._addCommandToBinding=function(t,n,r){var i=this.commandKeyBinding;if(n)if(!i[t]||this.$singleCommand)i[t]=n;else{Array.isArray(i[t])?-1!=(o=i[t].indexOf(n))&&i[t].splice(o,1):i[t]=[i[t]],\"number\"!=typeof r&&(r=e(n));for(var s=i[t],o=0;o<s.length&&!(r<e(s[o]));o++);s.splice(o,0,n)}else delete i[t]},this.addCommands=function(e){e&&Object.keys(e).forEach((function(t){var n=e[t];if(n){if(\"string\"==typeof n)return this.bindKey(n,t);\"function\"==typeof n&&(n={exec:n}),\"object\"==typeof n&&(n.name||(n.name=t),this.addCommand(n))}}),this)},this.removeCommands=function(e){Object.keys(e).forEach((function(t){this.removeCommand(e[t])}),this)},this.bindKeys=function(e){Object.keys(e).forEach((function(t){this.bindKey(t,e[t])}),this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter((function(e){return e})),n=t.pop(),i=r[n];if(r.FUNCTION_KEYS[i])n=r.FUNCTION_KEYS[i].toLowerCase();else{if(!t.length)return{key:n,hashId:-1};if(1==t.length&&\"shift\"==t[0])return{key:n.toUpperCase(),hashId:-1}}for(var s=0,o=t.length;o--;){var a=r.KEY_MODS[t[o]];if(null==a)return\"undefined\"!=typeof console&&console.error(\"invalid modifier \"+t[o]+\" in \"+e),!1;s|=a}return{key:n,hashId:s}},this.findKeyCommand=function(e,t){return this.commandKeyBinding[t=s[e]+t]},this.handleKeyboard=function(e,t,n,r){if(!(r<0)){var i=s[t]+n,o=this.commandKeyBinding[i];return e.$keyChain&&(e.$keyChain+=\" \"+i,o=this.commandKeyBinding[e.$keyChain]||o),!o||\"chainKeys\"!=o&&\"chainKeys\"!=o[o.length-1]?(e.$keyChain&&(t&&4!=t||1!=n.length?(-1==t||0<r)&&(e.$keyChain=\"\"):e.$keyChain=e.$keyChain.slice(0,-i.length-1)),{command:o}):(e.$keyChain=e.$keyChain||i,{command:\"null\"})}},this.getStatusText=function(e,t){return t.$keyChain||\"\"}}).call(o.prototype),t.HashHandler=o,t.MultiHashHandler=a})),ace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../keyboard/hash_handler\").MultiHashHandler,s=e(\"../lib/event_emitter\").EventEmitter;r.inherits(e=function(e,t){i.call(this,t,e),this.byName=this.commands,this.setDefaultHandler(\"exec\",(function(e){return e.command.exec(e.editor,e.args||{})}))},i),(function(){r.implement(this,s),this.exec=function(e,t,n){if(Array.isArray(e)){for(var r=e.length;r--;)if(this.exec(e[r],t,n))return!0;return!1}if(\"string\"==typeof e&&(e=this.commands[e]),!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;if(0!=this.$checkCommandState&&e.isAvailable&&!e.isAvailable(t))return!1;var i={editor:t,command:e,args:n};return i.returnValue=this._emit(\"exec\",i),this._signal(\"afterExec\",i),!1!==i.returnValue},this.toggleRecording=function(e){if(!this.$inReplay)return e&&e._emit(\"changeStatus\"),this.recording?(this.macro.pop(),this.off(\"exec\",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=(function(e){this.macro.push([e.command,e.args])}).bind(this)),this.oldMacro=this.macro,this.macro=[],this.on(\"exec\",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(!this.$inReplay&&this.macro){if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach((function(t){\"string\"==typeof t?this.exec(t,e):this.exec(t[0],e,t[1])}),this)}finally{this.$inReplay=!1}}},this.trimMacro=function(e){return e.map((function(e){return\"string\"!=typeof e[0]&&(e[0]=e[0].name),e[1]||(e=e[0]),e}))}}).call(e.prototype),t.CommandManager=e})),ace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/lang\"),i=e(\"../config\"),s=e(\"../range\").Range;function o(e,t){return{win:e,mac:t}}t.commands=[{name:\"showSettingsMenu\",bindKey:o(\"Ctrl-,\",\"Command-,\"),exec:function(e){i.loadModule(\"ace/ext/settings_menu\",(function(t){t.init(e),e.showSettingsMenu()}))},readOnly:!0},{name:\"goToNextError\",bindKey:o(\"Alt-E\",\"F4\"),exec:function(e){i.loadModule(\"./ext/error_marker\",(function(t){t.showErrorMarker(e,1)}))},scrollIntoView:\"animate\",readOnly:!0},{name:\"goToPreviousError\",bindKey:o(\"Alt-Shift-E\",\"Shift-F4\"),exec:function(e){i.loadModule(\"./ext/error_marker\",(function(t){t.showErrorMarker(e,-1)}))},scrollIntoView:\"animate\",readOnly:!0},{name:\"selectall\",description:\"Select all\",bindKey:o(\"Ctrl-A\",\"Command-A\"),exec:function(e){e.selectAll()},readOnly:!0},{name:\"centerselection\",description:\"Center selection\",bindKey:o(null,\"Ctrl-L\"),exec:function(e){e.centerSelection()},readOnly:!0},{name:\"gotoline\",description:\"Go to line...\",bindKey:o(\"Ctrl-L\",\"Command-L\"),exec:function(e,t){\"number\"!=typeof t||isNaN(t)||e.gotoLine(t),e.prompt({$type:\"gotoLine\"})},readOnly:!0},{name:\"fold\",bindKey:o(\"Alt-L|Ctrl-F1\",\"Command-Alt-L|Command-F1\"),exec:function(e){e.session.toggleFold(!1)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"unfold\",bindKey:o(\"Alt-Shift-L|Ctrl-Shift-F1\",\"Command-Alt-Shift-L|Command-Shift-F1\"),exec:function(e){e.session.toggleFold(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"toggleFoldWidget\",bindKey:o(\"F2\",\"F2\"),exec:function(e){e.session.toggleFoldWidget()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"toggleParentFoldWidget\",bindKey:o(\"Alt-F2\",\"Alt-F2\"),exec:function(e){e.session.toggleFoldWidget(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"foldall\",description:\"Fold all\",bindKey:o(null,\"Ctrl-Command-Option-0\"),exec:function(e){e.session.foldAll()},scrollIntoView:\"center\",readOnly:!0},{name:\"foldAllComments\",description:\"Fold all comments\",bindKey:o(null,\"Ctrl-Command-Option-0\"),exec:function(e){e.session.foldAllComments()},scrollIntoView:\"center\",readOnly:!0},{name:\"foldOther\",description:\"Fold other\",bindKey:o(\"Alt-0\",\"Command-Option-0\"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:\"center\",readOnly:!0},{name:\"unfoldall\",description:\"Unfold all\",bindKey:o(\"Alt-Shift-0\",\"Command-Option-Shift-0\"),exec:function(e){e.session.unfold()},scrollIntoView:\"center\",readOnly:!0},{name:\"findnext\",description:\"Find next\",bindKey:o(\"Ctrl-K\",\"Command-G\"),exec:function(e){e.findNext()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"findprevious\",description:\"Find previous\",bindKey:o(\"Ctrl-Shift-K\",\"Command-Shift-G\"),exec:function(e){e.findPrevious()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"selectOrFindNext\",description:\"Select or find next\",bindKey:o(\"Alt-K\",\"Ctrl-G\"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:\"selectOrFindPrevious\",description:\"Select or find previous\",bindKey:o(\"Alt-Shift-K\",\"Ctrl-Shift-G\"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:\"find\",description:\"Find\",bindKey:o(\"Ctrl-F\",\"Command-F\"),exec:function(e){i.loadModule(\"ace/ext/searchbox\",(function(t){t.Search(e)}))},readOnly:!0},{name:\"overwrite\",description:\"Overwrite\",bindKey:\"Insert\",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:\"selecttostart\",description:\"Select to start\",bindKey:o(\"Ctrl-Shift-Home\",\"Command-Shift-Home|Command-Shift-Up\"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"gotostart\",description:\"Go to start\",bindKey:o(\"Ctrl-Home\",\"Command-Home|Command-Up\"),exec:function(e){e.navigateFileStart()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"selectup\",description:\"Select up\",bindKey:o(\"Shift-Up\",\"Shift-Up|Ctrl-Shift-P\"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"golineup\",description:\"Go line up\",bindKey:o(\"Up\",\"Up|Ctrl-P\"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttoend\",description:\"Select to end\",bindKey:o(\"Ctrl-Shift-End\",\"Command-Shift-End|Command-Shift-Down\"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"gotoend\",description:\"Go to end\",bindKey:o(\"Ctrl-End\",\"Command-End|Command-Down\"),exec:function(e){e.navigateFileEnd()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"selectdown\",description:\"Select down\",bindKey:o(\"Shift-Down\",\"Shift-Down|Ctrl-Shift-N\"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"golinedown\",description:\"Go line down\",bindKey:o(\"Down\",\"Down|Ctrl-N\"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectwordleft\",description:\"Select word left\",bindKey:o(\"Ctrl-Shift-Left\",\"Option-Shift-Left\"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotowordleft\",description:\"Go to word left\",bindKey:o(\"Ctrl-Left\",\"Option-Left\"),exec:function(e){e.navigateWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttolinestart\",description:\"Select to line start\",bindKey:o(\"Alt-Shift-Left\",\"Command-Shift-Left|Ctrl-Shift-A\"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotolinestart\",description:\"Go to line start\",bindKey:o(\"Alt-Left|Home\",\"Command-Left|Home|Ctrl-A\"),exec:function(e){e.navigateLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectleft\",description:\"Select left\",bindKey:o(\"Shift-Left\",\"Shift-Left|Ctrl-Shift-B\"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotoleft\",description:\"Go to left\",bindKey:o(\"Left\",\"Left|Ctrl-B\"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectwordright\",description:\"Select word right\",bindKey:o(\"Ctrl-Shift-Right\",\"Option-Shift-Right\"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotowordright\",description:\"Go to word right\",bindKey:o(\"Ctrl-Right\",\"Option-Right\"),exec:function(e){e.navigateWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttolineend\",description:\"Select to line end\",bindKey:o(\"Alt-Shift-Right\",\"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotolineend\",description:\"Go to line end\",bindKey:o(\"Alt-Right|End\",\"Command-Right|End|Ctrl-E\"),exec:function(e){e.navigateLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectright\",description:\"Select right\",bindKey:o(\"Shift-Right\",\"Shift-Right\"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotoright\",description:\"Go to right\",bindKey:o(\"Right\",\"Right|Ctrl-F\"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectpagedown\",description:\"Select page down\",bindKey:\"Shift-PageDown\",exec:function(e){e.selectPageDown()},readOnly:!0},{name:\"pagedown\",description:\"Page down\",bindKey:o(null,\"Option-PageDown\"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:\"gotopagedown\",description:\"Go to page down\",bindKey:o(\"PageDown\",\"PageDown|Ctrl-V\"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:\"selectpageup\",description:\"Select page up\",bindKey:\"Shift-PageUp\",exec:function(e){e.selectPageUp()},readOnly:!0},{name:\"pageup\",description:\"Page up\",bindKey:o(null,\"Option-PageUp\"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:\"gotopageup\",description:\"Go to page up\",bindKey:\"PageUp\",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:\"scrollup\",description:\"Scroll up\",bindKey:o(\"Ctrl-Up\",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:\"scrolldown\",description:\"Scroll down\",bindKey:o(\"Ctrl-Down\",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:\"selectlinestart\",description:\"Select line start\",bindKey:\"Shift-Home\",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectlineend\",description:\"Select line end\",bindKey:\"Shift-End\",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"togglerecording\",description:\"Toggle recording\",bindKey:o(\"Ctrl-Alt-E\",\"Command-Option-E\"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:\"replaymacro\",description:\"Replay macro\",bindKey:o(\"Ctrl-Shift-E\",\"Command-Shift-E\"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:\"jumptomatching\",description:\"Jump to matching\",bindKey:o(\"Ctrl-\\\\|Ctrl-P\",\"Command-\\\\\"),exec:function(e){e.jumpToMatching()},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"selecttomatching\",description:\"Select to matching\",bindKey:o(\"Ctrl-Shift-\\\\|Ctrl-Shift-P\",\"Command-Shift-\\\\\"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"expandToMatching\",description:\"Expand to matching\",bindKey:o(\"Ctrl-Shift-M\",\"Ctrl-Shift-M\"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"passKeysToBrowser\",description:\"Pass keys to browser\",bindKey:o(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:\"copy\",description:\"Copy\",exec:function(e){},readOnly:!0},{name:\"cut\",description:\"Cut\",exec:function(e){var t=e.$copyWithEmptySelection&&e.selection.isEmpty()?e.selection.getLineRange():e.selection.getRange();e._emit(\"cut\",t),t.isEmpty()||e.session.remove(t),e.clearSelection()},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"paste\",description:\"Paste\",exec:function(e,t){e.$handlePaste(t)},scrollIntoView:\"cursor\"},{name:\"removeline\",description:\"Remove line\",bindKey:o(\"Ctrl-D\",\"Command-D\"),exec:function(e){e.removeLines()},scrollIntoView:\"cursor\",multiSelectAction:\"forEachLine\"},{name:\"duplicateSelection\",description:\"Duplicate selection\",bindKey:o(\"Ctrl-Shift-D\",\"Command-Shift-D\"),exec:function(e){e.duplicateSelection()},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"sortlines\",description:\"Sort lines\",bindKey:o(\"Ctrl-Alt-S\",\"Command-Alt-S\"),exec:function(e){e.sortLines()},scrollIntoView:\"selection\",multiSelectAction:\"forEachLine\"},{name:\"togglecomment\",description:\"Toggle comment\",bindKey:o(\"Ctrl-/\",\"Command-/\"),exec:function(e){e.toggleCommentLines()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"toggleBlockComment\",description:\"Toggle block comment\",bindKey:o(\"Ctrl-Shift-/\",\"Command-Shift-/\"),exec:function(e){e.toggleBlockComment()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"modifyNumberUp\",description:\"Modify number up\",bindKey:o(\"Ctrl-Shift-Up\",\"Alt-Shift-Up\"),exec:function(e){e.modifyNumber(1)},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"modifyNumberDown\",description:\"Modify number down\",bindKey:o(\"Ctrl-Shift-Down\",\"Alt-Shift-Down\"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"replace\",description:\"Replace\",bindKey:o(\"Ctrl-H\",\"Command-Option-F\"),exec:function(e){i.loadModule(\"ace/ext/searchbox\",(function(t){t.Search(e,!0)}))}},{name:\"undo\",description:\"Undo\",bindKey:o(\"Ctrl-Z\",\"Command-Z\"),exec:function(e){e.undo()}},{name:\"redo\",description:\"Redo\",bindKey:o(\"Ctrl-Shift-Z|Ctrl-Y\",\"Command-Shift-Z|Command-Y\"),exec:function(e){e.redo()}},{name:\"copylinesup\",description:\"Copy lines up\",bindKey:o(\"Alt-Shift-Up\",\"Command-Option-Up\"),exec:function(e){e.copyLinesUp()},scrollIntoView:\"cursor\"},{name:\"movelinesup\",description:\"Move lines up\",bindKey:o(\"Alt-Up\",\"Option-Up\"),exec:function(e){e.moveLinesUp()},scrollIntoView:\"cursor\"},{name:\"copylinesdown\",description:\"Copy lines down\",bindKey:o(\"Alt-Shift-Down\",\"Command-Option-Down\"),exec:function(e){e.copyLinesDown()},scrollIntoView:\"cursor\"},{name:\"movelinesdown\",description:\"Move lines down\",bindKey:o(\"Alt-Down\",\"Option-Down\"),exec:function(e){e.moveLinesDown()},scrollIntoView:\"cursor\"},{name:\"del\",description:\"Delete\",bindKey:o(\"Delete\",\"Delete|Ctrl-D|Shift-Delete\"),exec:function(e){e.remove(\"right\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"backspace\",description:\"Backspace\",bindKey:o(\"Shift-Backspace|Backspace\",\"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),exec:function(e){e.remove(\"left\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"cut_or_delete\",description:\"Cut or delete\",bindKey:o(\"Shift-Delete\",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove(\"left\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolinestart\",description:\"Remove to line start\",bindKey:o(\"Alt-Backspace\",\"Command-Backspace\"),exec:function(e){e.removeToLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolineend\",description:\"Remove to line end\",bindKey:o(\"Alt-Delete\",\"Ctrl-K|Command-Delete\"),exec:function(e){e.removeToLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolinestarthard\",description:\"Remove to line start hard\",bindKey:o(\"Ctrl-Shift-Backspace\",null),exec:function(e){var t=e.selection.getRange();t.start.column=0,e.session.remove(t)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolineendhard\",description:\"Remove to line end hard\",bindKey:o(\"Ctrl-Shift-Delete\",null),exec:function(e){var t=e.selection.getRange();t.end.column=Number.MAX_VALUE,e.session.remove(t)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removewordleft\",description:\"Remove word left\",bindKey:o(\"Ctrl-Backspace\",\"Alt-Backspace|Ctrl-Alt-Backspace\"),exec:function(e){e.removeWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removewordright\",description:\"Remove word right\",bindKey:o(\"Ctrl-Delete\",\"Alt-Delete\"),exec:function(e){e.removeWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"outdent\",description:\"Outdent\",bindKey:o(\"Shift-Tab\",\"Shift-Tab\"),exec:function(e){e.blockOutdent()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"indent\",description:\"Indent\",bindKey:o(\"Tab\",\"Tab\"),exec:function(e){e.indent()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"blockoutdent\",description:\"Block outdent\",bindKey:o(\"Ctrl-[\",\"Ctrl-[\"),exec:function(e){e.blockOutdent()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"blockindent\",description:\"Block indent\",bindKey:o(\"Ctrl-]\",\"Ctrl-]\"),exec:function(e){e.blockIndent()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"insertstring\",description:\"Insert string\",exec:function(e,t){e.insert(t)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"inserttext\",description:\"Insert text\",exec:function(e,t){e.insert(r.stringRepeat(t.text||\"\",t.times||1))},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"splitline\",description:\"Split line\",bindKey:o(null,\"Ctrl-O\"),exec:function(e){e.splitLine()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"transposeletters\",description:\"Transpose letters\",bindKey:o(\"Alt-Shift-X\",\"Ctrl-T\"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:\"cursor\"},{name:\"touppercase\",description:\"To uppercase\",bindKey:o(\"Ctrl-U\",\"Ctrl-U\"),exec:function(e){e.toUpperCase()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"tolowercase\",description:\"To lowercase\",bindKey:o(\"Ctrl-Shift-U\",\"Ctrl-Shift-U\"),exec:function(e){e.toLowerCase()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"autoindent\",description:\"Auto Indent\",bindKey:o(null,null),exec:function(e){e.autoIndent()},multiSelectAction:\"forEachLine\",scrollIntoView:\"animate\"},{name:\"expandtoline\",description:\"Expand to line\",bindKey:o(\"Ctrl-Shift-L\",\"Command-Shift-L\"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"joinlines\",description:\"Join lines\",bindKey:o(null,null),exec:function(e){for(var t=(o=e.selection.isBackwards())?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),n=o?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),i=e.session.doc.getLine(t.row).length,o=e.session.doc.getTextRange(e.selection.getRange()).replace(/\\n\\s*/,\" \").length,a=e.session.doc.getLine(t.row),c=t.row+1;c<=n.row+1;c++){var l=r.stringTrimLeft(r.stringTrimRight(e.session.doc.getLine(c)));0!==l.length&&(l=\" \"+l),a+=l}n.row+1<e.session.doc.getLength()-1&&(a+=e.session.doc.getNewLineCharacter()),e.clearSelection(),e.session.doc.replace(new s(t.row,0,n.row+2,0),a),0<o?(e.selection.moveCursorTo(t.row,t.column),e.selection.selectTo(t.row,t.column+o)):(i=e.session.doc.getLine(t.row).length>i?i+1:i,e.selection.moveCursorTo(t.row,i))},multiSelectAction:\"forEach\",readOnly:!0},{name:\"invertSelection\",description:\"Invert selection\",bindKey:o(null,null),exec:function(e){var t=e.session.doc.getLength()-1,n=e.session.doc.getLine(t).length,r=e.selection.rangeList.ranges,i=[];r.length<1&&(r=[e.selection.getRange()]);for(var o=0;o<r.length;o++)o==r.length-1&&(r[o].end.row===t&&r[o].end.column===n||i.push(new s(r[o].end.row,r[o].end.column,t,n))),0===o?0===r[o].start.row&&0===r[o].start.column||i.push(new s(0,0,r[o].start.row,r[o].start.column)):i.push(new s(r[o-1].end.row,r[o-1].end.column,r[o].start.row,r[o].start.column));for(e.exitMultiSelectMode(),e.clearSelection(),o=0;o<i.length;o++)e.selection.addRange(i[o],!1)},readOnly:!0,scrollIntoView:\"none\"},{name:\"addLineAfter\",exec:function(e){e.selection.clearSelection(),e.navigateLineEnd(),e.insert(\"\\n\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"addLineBefore\",exec:function(e){e.selection.clearSelection();var t=e.getCursorPosition();e.selection.moveTo(t.row-1,Number.MAX_VALUE),e.insert(\"\\n\"),0===t.row&&e.navigateUp()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"openCommandPallete\",description:\"Open command pallete\",bindKey:o(\"F1\",\"F1\"),exec:function(e){e.prompt({$type:\"commands\"})},readOnly:!0},{name:\"modeSelect\",description:\"Change language mode...\",bindKey:o(null,null),exec:function(e){e.prompt({$type:\"modes\"})},readOnly:!0}];for(var a=1;a<9;a++)t.commands.push({name:\"foldToLevel\"+a,description:\"Fold To Level \"+a,level:a,exec:function(e){e.session.foldToLevel(this.level)},scrollIntoView:\"center\",readOnly:!0})})),ace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\",\"ace/clipboard\"],(function(e,t,n){\"use strict\";e(\"./lib/fixoldbrowsers\");var r=e(\"./lib/oop\"),i=e(\"./lib/dom\"),s=e(\"./lib/lang\"),o=e(\"./lib/useragent\"),a=e(\"./keyboard/textinput\").TextInput,c=e(\"./mouse/mouse_handler\").MouseHandler,l=e(\"./mouse/fold_handler\").FoldHandler,h=e(\"./keyboard/keybinding\").KeyBinding,d=e(\"./edit_session\").EditSession,u=e(\"./search\").Search,f=e(\"./range\").Range,g=e(\"./lib/event_emitter\").EventEmitter,p=e(\"./commands/command_manager\").CommandManager,m=e(\"./commands/default_commands\").commands,C=e(\"./config\"),b=e(\"./token_iterator\").TokenIterator,v=e(\"./clipboard\"),I=function(e,t,n){this.$toDestroy=[];var r=e.getContainerElement();this.container=r,this.renderer=e,this.id=\"editor\"+ ++I.$uid,this.commands=new p(o.isMac?\"mac\":\"win\",m),\"object\"==typeof document&&(this.textInput=new a(e.getTextAreaContainer(),this),this.renderer.textarea=this.textInput.getElement(),this.$mouseHandler=new c(this),new l(this)),this.keyBinding=new h(this),this.$search=(new u).set({wrap:!0}),this.$historyTracker=this.$historyTracker.bind(this),this.commands.on(\"exec\",this.$historyTracker),this.$initOperationListeners(),this._$emitInputEvent=s.delayedCall((function(){this._signal(\"input\",{}),this.session&&this.session.bgTokenizer&&this.session.bgTokenizer.scheduleStart()}).bind(this)),this.on(\"change\",(function(e,t){t._$emitInputEvent.schedule(31)})),this.setSession(t||n&&n.session||new d(\"\")),C.resetOptions(this),n&&this.setOptions(n),C._signal(\"editor\",this)};I.$uid=0,(function(){r.implement(this,g),this.$initOperationListeners=function(){this.commands.on(\"exec\",this.startOperation.bind(this),!0),this.commands.on(\"afterExec\",this.endOperation.bind(this),!0),this.$opResetTimer=s.delayedCall(this.endOperation.bind(this,!0)),this.on(\"change\",(function(){this.curOp||(this.startOperation(),this.curOp.selectionBefore=this.$lastSel),this.curOp.docChanged=!0}).bind(this),!0),this.on(\"changeSelection\",(function(){this.curOp||(this.startOperation(),this.curOp.selectionBefore=this.$lastSel),this.curOp.selectionChanged=!0}).bind(this),!0)},this.curOp=null,this.prevOp={},this.startOperation=function(e){if(this.curOp){if(!e||this.curOp.command)return;this.prevOp=this.curOp}e||(this.previousCommand=null,e={}),this.$opResetTimer.schedule(),this.curOp=this.session.curOp={command:e.command||{},args:e.args,scrollTop:this.renderer.scrollTop},this.curOp.selectionBefore=this.selection.toJSON()},this.endOperation=function(e){if(this.curOp&&this.session){if(e&&!1===e.returnValue||!this.session)return this.curOp=null;if((1!=e||!this.curOp.command||\"mouse\"!=this.curOp.command.name)&&(this._signal(\"beforeEndOperation\"),this.curOp)){var t=(e=this.curOp.command)&&e.scrollIntoView;if(t){switch(t){case\"center-animate\":t=\"animate\";case\"center\":this.renderer.scrollCursorIntoView(null,.5);break;case\"animate\":case\"cursor\":this.renderer.scrollCursorIntoView();break;case\"selectionPart\":var n=this.selection.getRange(),r=this.renderer.layerConfig;(n.start.row>=r.lastRow||n.end.row<=r.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead)}\"animate\"==t&&this.renderer.animateScrolling(this.curOp.scrollTop)}e=this.selection.toJSON(),this.curOp.selectionAfter=e,this.$lastSel=this.selection.toJSON(),this.session.getUndoManager().addSelection(e),this.prevOp=this.curOp,this.curOp=null}}},this.$mergeableCommands=[\"backspace\",\"del\",\"insertstring\"],this.$historyTracker=function(e){var t,n,r,i;this.$mergeUndoDeltas&&(n=this.$mergeableCommands,r=(t=this.prevOp).command&&e.command.name==t.command.name,\"insertstring\"==e.command.name?(i=e.args,void 0===this.mergeNextCommand&&(this.mergeNextCommand=!0),r=r&&this.mergeNextCommand&&(!/\\s/.test(i)||/\\s/.test(t.args)),this.mergeNextCommand=!0):r=r&&-1!==n.indexOf(e.command.name),\"always\"!=this.$mergeUndoDeltas&&2e3<Date.now()-this.sequenceStartTime&&(r=!1),r?this.session.mergeUndoDeltas=!0:-1!==n.indexOf(e.command.name)&&(this.sequenceStartTime=Date.now()))},this.setKeyboardHandler=function(e,t){var n;e&&\"string\"==typeof e&&\"ace\"!=e?(this.$keybindingId=e,n=this,C.loadModule([\"keybinding\",e],(function(r){n.$keybindingId==e&&n.keyBinding.setKeyboardHandler(r&&r.handler),t&&t()}))):(this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t())},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){var t,n;this.session!=e&&(this.curOp&&this.endOperation(),this.curOp={},(t=this.session)&&(this.session.off(\"change\",this.$onDocumentChange),this.session.off(\"changeMode\",this.$onChangeMode),this.session.off(\"tokenizerUpdate\",this.$onTokenizerUpdate),this.session.off(\"changeTabSize\",this.$onChangeTabSize),this.session.off(\"changeWrapLimit\",this.$onChangeWrapLimit),this.session.off(\"changeWrapMode\",this.$onChangeWrapMode),this.session.off(\"changeFold\",this.$onChangeFold),this.session.off(\"changeFrontMarker\",this.$onChangeFrontMarker),this.session.off(\"changeBackMarker\",this.$onChangeBackMarker),this.session.off(\"changeBreakpoint\",this.$onChangeBreakpoint),this.session.off(\"changeAnnotation\",this.$onChangeAnnotation),this.session.off(\"changeOverwrite\",this.$onCursorChange),this.session.off(\"changeScrollTop\",this.$onScrollTopChange),this.session.off(\"changeScrollLeft\",this.$onScrollLeftChange),(n=this.session.getSelection()).off(\"changeCursor\",this.$onCursorChange),n.off(\"changeSelection\",this.$onSelectionChange)),(this.session=e)?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.on(\"change\",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.on(\"changeMode\",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.on(\"tokenizerUpdate\",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.on(\"changeTabSize\",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.on(\"changeWrapLimit\",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.on(\"changeWrapMode\",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.on(\"changeFold\",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on(\"changeFrontMarker\",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on(\"changeBackMarker\",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on(\"changeBreakpoint\",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on(\"changeAnnotation\",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on(\"changeOverwrite\",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on(\"changeScrollTop\",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on(\"changeScrollLeft\",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.on(\"changeCursor\",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on(\"changeSelection\",this.$onSelectionChange),this.onChangeMode(),this.onCursorChange(),this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal(\"changeSession\",{session:e,oldSession:t}),this.curOp=null,t&&t._signal(\"changeEditor\",{oldEditor:this}),e&&e._signal(\"changeEditor\",{editor:this}),e&&e.bgTokenizer&&e.bgTokenizer.scheduleStart())},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?1==t?this.navigateFileEnd():-1==t&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption(\"fontSize\")||i.computedStyle(this.container).fontSize},this.setFontSize=function(e){this.setOption(\"fontSize\",e)},this.$highlightBrackets=function(){var e;this.$highlightPending||((e=this).$highlightPending=!0,setTimeout((function(){e.$highlightPending=!1;var t,n,r=e.session;r&&r.bgTokenizer&&(r.$bracketHighlight&&(r.$bracketHighlight.markerIds.forEach((function(e){r.removeMarker(e)})),r.$bracketHighlight=null),!(t=r.getMatchingBracketRanges(e.getCursorPosition()))&&r.$mode.getMatching&&(t=r.$mode.getMatching(e.session)),t&&(n=\"ace_bracket\",Array.isArray(t)?1==t.length&&(n=\"ace_error_bracket\"):t=[t],2==t.length&&(0==f.comparePoints(t[0].end,t[1].start)?t=[f.fromPoints(t[0].start,t[1].end)]:0==f.comparePoints(t[0].start,t[1].end)&&(t=[f.fromPoints(t[1].start,t[0].end)])),r.$bracketHighlight={ranges:t,markerIds:t.map((function(e){return r.addMarker(e,n,\"text\")}))}))}),50))},this.$highlightTags=function(){var e;this.$highlightTagPending||((e=this).$highlightTagPending=!0,setTimeout((function(){e.$highlightTagPending=!1;var t=e.session;if(t&&t.bgTokenizer){var n=e.getCursorPosition(),r=new b(e.session,n.row,n.column),i=r.getCurrentToken();if(!i||!/\\b(?:tag-open|tag-name)/.test(i.type))return t.removeMarker(t.$tagHighlight),void(t.$tagHighlight=null);if(-1===i.type.indexOf(\"tag-open\")||(i=r.stepForward())){var s=i.value,o=i.value,a=0,c=r.stepBackward();if(\"<\"===c.value)for(;c=i,(i=r.stepForward())&&(-1!==i.type.indexOf(\"tag-name\")?s===(o=i.value)&&(\"<\"===c.value?a++:\"</\"===c.value&&a--):s===o&&\"/>\"===i.value&&a--),i&&0<=a;);else{do{if(i=c,c=r.stepBackward(),i)if(-1!==i.type.indexOf(\"tag-name\"))s===i.value&&(\"<\"===c.value?a++:\"</\"===c.value&&a--);else if(\"/>\"===i.value){for(var l=0,h=c;h;){if(-1!==h.type.indexOf(\"tag-name\")&&h.value===s){a--;break}if(\"<\"===h.value)break;h=r.stepBackward(),l++}for(var d=0;d<l;d++)r.stepForward()}}while(c&&a<=0);r.stepForward()}if(!i)return t.removeMarker(t.$tagHighlight),void(t.$tagHighlight=null);var u=r.getCurrentTokenRow();n=r.getCurrentTokenColumn(),u=new f(u,n,u,n+i.value.length),n=t.$backMarkers[t.$tagHighlight],t.$tagHighlight&&null!=n&&0!==u.compareRange(n.range)&&(t.removeMarker(t.$tagHighlight),t.$tagHighlight=null),t.$tagHighlight||(t.$tagHighlight=t.addMarker(u,\"ace_bracket\",\"text\"))}}}),50))},this.focus=function(){var e=this;setTimeout((function(){e.isFocused()||e.textInput.focus()})),this.textInput.focus()},this.isFocused=function(){return this.textInput.isFocused()},this.blur=function(){this.textInput.blur()},this.onFocus=function(e){this.$isFocused||(this.$isFocused=!0,this.renderer.showCursor(),this.renderer.visualizeFocus(),this._emit(\"focus\",e))},this.onBlur=function(e){this.$isFocused&&(this.$isFocused=!1,this.renderer.hideCursor(),this.renderer.visualizeBlur(),this._emit(\"blur\",e))},this.$cursorChange=function(){this.renderer.updateCursor(),this.$highlightBrackets(),this.$highlightTags(),this.$updateHighlightActiveLine()},this.onDocumentChange=function(e){this.renderer.updateLines(e.start.row,e.start.row==e.end.row?e.end.row:1/0,this.session.$useWrapMode),this._signal(\"change\",e),this.$cursorChange()},this.onTokenizerUpdate=function(e){this.renderer.updateLines((e=e.data).first,e.last)},this.onScrollTopChange=function(){this.renderer.scrollToY(this.session.getScrollTop())},this.onScrollLeftChange=function(){this.renderer.scrollToX(this.session.getScrollLeft())},this.onCursorChange=function(){this.$cursorChange(),this._signal(\"changeSelection\")},this.$updateHighlightActiveLine=function(){var e,t,n=this.getSession();this.$highlightActiveLine&&(\"line\"==this.$selectionStyle&&this.selection.isMultiLine()||(e=this.getCursorPosition()),this.renderer.theme&&this.renderer.theme.$selectionColorConflict&&!this.selection.isEmpty()&&(e=!1),!this.renderer.$maxLines||1!==this.session.getLength()||1<this.renderer.$minLines||(e=!1)),n.$highlightLineMarker&&!e?(n.removeMarker(n.$highlightLineMarker.id),n.$highlightLineMarker=null):!n.$highlightLineMarker&&e?((t=new f(e.row,e.column,e.row,1/0)).id=n.addMarker(t,\"ace_active-line\",\"screenLine\"),n.$highlightLineMarker=t):e&&(n.$highlightLineMarker.start.row=e.row,n.$highlightLineMarker.end.row=e.row,n.$highlightLineMarker.start.column=e.column,n._signal(\"changeBackMarker\"))},this.onSelectionChange=function(e){var t,n=this.session;n.$selectionMarker&&n.removeMarker(n.$selectionMarker),n.$selectionMarker=null,this.selection.isEmpty()?this.$updateHighlightActiveLine():(t=this.selection.getRange(),r=this.getSelectionStyle(),n.$selectionMarker=n.addMarker(t,\"ace_selection\",r));var r=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(r),this._signal(\"changeSelection\")},this.$getSelectionHighLightRegexp=function(){var e=this.session;if(!(t=this.getSelectionRange()).isEmpty()&&!t.isMultiLine()){var t,n=t.start.column,r=t.end.column;if(!(5e3<(t=(e=e.getLine(t.start.row)).substring(n,r)).length)&&/[\\w\\d]/.test(t)&&(t=this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:t}),r=e.substring(n-1,r+1),t.test(r)))return t}},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit(\"changeMode\",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText(),t=this.session.doc.getNewLineCharacter(),n=!1;if(!e&&this.$copyWithEmptySelection){n=!0;for(var r=this.selection.getAllRanges(),i=0;i<r.length;i++){var s=r[i];i&&r[i-1].start.row==s.start.row||(e+=this.session.getLine(s.start.row)+t)}}var o={text:e};return this._signal(\"copy\",o),v.lineMode=n?o.text:\"\",o.text},this.onCopy=function(){this.commands.exec(\"copy\",this)},this.onCut=function(){this.commands.exec(\"cut\",this)},this.onPaste=function(e,t){this.commands.exec(\"paste\",this,t={text:e,event:t})},this.$handlePaste=function(e){\"string\"==typeof e&&(e={text:e}),this._signal(\"paste\",e);var t=e.text,n=(e=t==v.lineMode,this.session);if(!this.inMultiSelectMode||this.inVirtualSelectionMode)e?n.insert({row:this.selection.lead.row,column:0},t):this.insert(t);else if(e)this.selection.rangeList.ranges.forEach((function(e){n.insert({row:e.start.row,column:0},t)}));else{var r=t.split(/\\r\\n|\\r|\\n/),i=this.selection.rangeList.ranges;if(e=!(2!=r.length||r[0]&&r[1]),r.length!=i.length||e)return this.commands.exec(\"insertstring\",this,t);for(var s=i.length;s--;){var o=i[s];o.isEmpty()||n.remove(o),n.insert(o.start,r[s])}}},this.execCommand=function(e,t){return this.commands.exec(e,this,t)},this.insert=function(e,t){var n,r=this.session,i=r.getMode(),s=this.getCursorPosition();!this.getBehavioursEnabled()||t||(n=i.transformAction(r.getState(s.row),\"insertion\",this,r,e))&&(e!==n.text&&(this.inVirtualSelectionMode||(this.session.mergeUndoDeltas=!1,this.mergeNextCommand=!1)),e=n.text),\"\\t\"==e&&(e=this.session.getTabString()),this.selection.isEmpty()?this.session.getOverwrite()&&-1==e.indexOf(\"\\n\")&&((o=new f.fromPoints(s,s)).end.column+=e.length,this.session.remove(o)):(o=this.getSelectionRange(),s=this.session.remove(o),this.clearSelection()),\"\\n\"!=e&&\"\\r\\n\"!=e||(a=r.getLine(s.row),s.column>a.search(/\\S|$/)&&(c=a.substr(s.column).search(/\\S|$/),r.doc.removeInLine(s.row,s.column,s.column+c))),this.clearSelection(),t=s.column;var o=r.getState(s.row),a=r.getLine(s.row),c=i.checkOutdent(o,a,e);r.insert(s,e),n&&n.selection&&this.selection.setSelectionRange(2==n.selection.length?new f(s.row,t+n.selection[0],s.row,t+n.selection[1]):new f(s.row+n.selection[0],n.selection[1],s.row+n.selection[2],n.selection[3])),this.$enableAutoIndent&&(r.getDocument().isNewLine(e)&&(a=i.getNextLineIndent(o,a.slice(0,s.column),r.getTabString()),r.insert({row:s.row+1,column:0},a)),c&&i.autoOutdent(o,r,s.row))},this.autoIndent=function(){var e,t,n,r=this.session,i=r.getMode();n=this.selection.isEmpty()?(t=0,r.doc.getLength()-1):(t=(e=this.getSelectionRange()).start.row,e.end.row);for(var s,o,a=\"\",c=\"\",l=r.getTabString(),h=t;h<=n;h++)0<h&&(a=r.getState(h-1),s=r.getLine(h-1),c=i.getNextLineIndent(a,s,l)),o=r.getLine(h),c!==(o=i.$getIndent(o))&&(0<o.length&&(o=new f(h,0,h,o.length),r.remove(o)),0<c.length&&r.insert({row:h,column:0},c)),i.autoOutdent(a,r,h)},this.onTextInput=function(e,t){if(!t)return this.keyBinding.onTextInput(e);this.startOperation({command:{name:\"insertstring\"}}),t=this.applyComposition.bind(this,e,t),this.selection.rangeCount?this.forEachSelection(t):t(),this.endOperation()},this.applyComposition=function(e,t){var n;(t.extendLeft||t.extendRight)&&((n=this.selection.getRange()).start.column-=t.extendLeft,n.end.column+=t.extendRight,n.start.column<0&&(n.start.row--,n.start.column+=this.session.getLine(n.start.row).length+1),this.selection.setRange(n),e||n.isEmpty()||this.remove()),!e&&this.selection.isEmpty()||this.insert(e,!0),(t.restoreStart||t.restoreEnd)&&((n=this.selection.getRange()).start.column-=t.restoreStart,n.end.column-=t.restoreEnd,this.selection.setRange(n))},this.onCommandKey=function(e,t,n){return this.keyBinding.onCommandKey(e,t,n)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption(\"scrollSpeed\",e)},this.getScrollSpeed=function(){return this.getOption(\"scrollSpeed\")},this.setDragDelay=function(e){this.setOption(\"dragDelay\",e)},this.getDragDelay=function(){return this.getOption(\"dragDelay\")},this.setSelectionStyle=function(e){this.setOption(\"selectionStyle\",e)},this.getSelectionStyle=function(){return this.getOption(\"selectionStyle\")},this.setHighlightActiveLine=function(e){this.setOption(\"highlightActiveLine\",e)},this.getHighlightActiveLine=function(){return this.getOption(\"highlightActiveLine\")},this.setHighlightGutterLine=function(e){this.setOption(\"highlightGutterLine\",e)},this.getHighlightGutterLine=function(){return this.getOption(\"highlightGutterLine\")},this.setHighlightSelectedWord=function(e){this.setOption(\"highlightSelectedWord\",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption(\"readOnly\",e)},this.getReadOnly=function(){return this.getOption(\"readOnly\")},this.setBehavioursEnabled=function(e){this.setOption(\"behavioursEnabled\",e)},this.getBehavioursEnabled=function(){return this.getOption(\"behavioursEnabled\")},this.setWrapBehavioursEnabled=function(e){this.setOption(\"wrapBehavioursEnabled\",e)},this.getWrapBehavioursEnabled=function(){return this.getOption(\"wrapBehavioursEnabled\")},this.setShowFoldWidgets=function(e){this.setOption(\"showFoldWidgets\",e)},this.getShowFoldWidgets=function(){return this.getOption(\"showFoldWidgets\")},this.setFadeFoldWidgets=function(e){this.setOption(\"fadeFoldWidgets\",e)},this.getFadeFoldWidgets=function(){return this.getOption(\"fadeFoldWidgets\")},this.remove=function(e){this.selection.isEmpty()&&(\"left\"==e?this.selection.selectLeft():this.selection.selectRight());var t,n,r=this.getSelectionRange();this.getBehavioursEnabled()&&(t=(n=this.session).getState(r.start.row),e=n.getMode().transformAction(t,\"deletion\",this,n,r),0!==r.end.column||\"\\n\"==(t=n.getTextRange(r))[t.length-1]&&(n=n.getLine(r.end.row),/^\\s+$/.test(n)&&(r.end.column=n.length)),e&&(r=e)),this.session.remove(r),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.selection.isEmpty()&&this.selection.selectLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert(\"\\n\"),this.moveCursorToPosition(e)},this.transposeLetters=function(){var e,t,n,r;!this.selection.isEmpty()||0!==(r=(e=this.getCursorPosition()).column)&&(r=r<(t=this.session.getLine(e.row)).length?(n=t.charAt(r)+t.charAt(r-1),new f(e.row,r-1,e.row,r+1)):(n=t.charAt(r-1)+t.charAt(r-2),new f(e.row,r-2,e.row,r)),this.session.replace(r,n),this.session.selection.moveToPosition(r.end))},this.toLowerCase=function(){var e=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var t=this.getSelectionRange(),n=this.session.getTextRange(t);this.session.replace(t,n.toLowerCase()),this.selection.setSelectionRange(e)},this.toUpperCase=function(){var e=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var t=this.getSelectionRange(),n=this.session.getTextRange(t);this.session.replace(t,n.toUpperCase()),this.selection.setSelectionRange(e)},this.indent=function(){var e=this.session,t=this.getSelectionRange();if(!(t.start.row<t.end.row)){if(t.start.column<t.end.column){var n=e.getTextRange(t);if(!/^\\s+$/.test(n))return c=this.$getSelectedRows(),void e.indentRows(c.first,c.last,\"\\t\")}var r=e.getLine(t.start.row),i=t.start;if(n=e.getTabSize(),i=e.documentToScreenColumn(i.row,i.column),this.session.getUseSoftTabs())var o=n-i%n,a=s.stringRepeat(\" \",o);else{for(o=i%n;\" \"==r[t.start.column-1]&&o;)t.start.column--,o--;this.selection.setSelectionRange(t),a=\"\\t\"}return this.insert(a)}var c=this.$getSelectedRows();e.indentRows(c.first,c.last,\"\\t\")},this.blockIndent=function(){var e=this.$getSelectedRows();this.session.indentRows(e.first,e.last,\"\\t\")},this.blockOutdent=function(){var e=this.session.getSelection();this.session.outdentRows(e.getRange())},this.sortLines=function(){for(var e=this.$getSelectedRows(),t=this.session,n=[],r=e.first;r<=e.last;r++)n.push(t.getLine(r));n.sort((function(e,t){return e.toLowerCase()<t.toLowerCase()?-1:e.toLowerCase()>t.toLowerCase()?1:0}));var i=new f(0,0,0,0);for(r=e.first;r<=e.last;r++){var s=t.getLine(r);i.start.row=r,i.end.row=r,i.end.column=s.length,t.replace(i,n[r-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),n=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,n,e)},this.getNumberAt=function(e,t){var n=/[\\-]?[0-9]+(?:\\.[0-9]+)?/g;n.lastIndex=0;for(var r=this.session.getLine(e);n.lastIndex<t;){var i=n.exec(r);if(i.index<=t&&i.index+i[0].length>=t)return{value:i[0],start:i.index,end:i.index+i[0].length}}return null},this.modifyNumber=function(e){var t,n,r=this.selection.getCursor().row,i=this.selection.getCursor().column,s=new f(r,i-1,r,i),o=this.session.getTextRange(s);!isNaN(parseFloat(o))&&isFinite(o)?(t=this.getNumberAt(r,i))&&(n=0<=t.value.indexOf(\".\")?t.start+t.value.indexOf(\".\")+1:t.end,s=t.start+t.value.length-n,o=parseFloat(t.value),o*=Math.pow(10,s),o+=e*=n!==t.end&&i<n?Math.pow(10,t.end-i-1):Math.pow(10,t.end-i),o=(o/=Math.pow(10,s)).toFixed(s),s=new f(r,t.start,r,t.end),this.session.replace(s,o),this.moveCursorTo(r,Math.max(t.start+1,i+o.length-t.value.length))):this.toggleWord()},this.$toggleWordPairs=[[\"first\",\"last\"],[\"true\",\"false\"],[\"yes\",\"no\"],[\"width\",\"height\"],[\"top\",\"bottom\"],[\"right\",\"left\"],[\"on\",\"off\"],[\"x\",\"y\"],[\"get\",\"set\"],[\"max\",\"min\"],[\"horizontal\",\"vertical\"],[\"show\",\"hide\"],[\"add\",\"remove\"],[\"up\",\"down\"],[\"before\",\"after\"],[\"even\",\"odd\"],[\"in\",\"out\"],[\"inside\",\"outside\"],[\"next\",\"previous\"],[\"increase\",\"decrease\"],[\"attach\",\"detach\"],[\"&&\",\"||\"],[\"==\",\"!=\"]],this.toggleWord=function(){var e=this.selection.getCursor().row,t=this.selection.getCursor().column;this.selection.selectWord();var n=this.getSelectedText(),r=this.selection.getWordRange().start.column,i=n.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g,\"$1 \").split(/\\s/),o=t-r-1;o<0&&(o=0);var a,c=0,l=this;n.match(/[A-Za-z0-9_]+/)&&i.forEach((function(t,i){a=c+t.length,c<=o&&o<=a&&(n=t,l.selection.clearSelection(),l.moveCursorTo(e,c+r),l.selection.selectTo(e,a+r)),c=a}));for(var h=this.$toggleWordPairs,d=0;d<h.length;d++)for(var u=h[d],f=0;f<=1;f++){var g=+!f,p=n.match(new RegExp(\"^\\\\s?_?(\"+s.escapeRegExp(u[f])+\")\\\\s?$\",\"i\"));p&&n.match(new RegExp(\"([_]|^|\\\\s)(\"+s.escapeRegExp(p[1])+\")($|\\\\s)\",\"g\"))&&(p=n.replace(new RegExp(s.escapeRegExp(u[f]),\"i\"),(function(e){var t=u[g];return e.toUpperCase()==e?t=t.toUpperCase():e.charAt(0).toUpperCase()==e.charAt(0)&&(t=t.substr(0,0)+u[g].charAt(0).toUpperCase()+t.substr(1)),t})),this.insert(p))}},this.removeLines=function(){var e=this.$getSelectedRows();this.session.removeFullLines(e.first,e.last),this.clearSelection()},this.duplicateSelection=function(){var e,t=this.selection,n=this.session,r=t.getRange(),i=t.isBackwards();r.isEmpty()?n.duplicateLines(e=r.start.row,e):(n=n.insert(e=i?r.start:r.end,n.getTextRange(r),!1),r.start=e,r.end=n,t.setSelectionRange(r,i))},this.moveLinesDown=function(){this.$moveLines(1,!1)},this.moveLinesUp=function(){this.$moveLines(-1,!1)},this.moveText=function(e,t,n){return this.session.moveText(e,t,n)},this.copyLinesUp=function(){this.$moveLines(-1,!0)},this.copyLinesDown=function(){this.$moveLines(1,!0)},this.$moveLines=function(e,t){var n=this.selection;if(!n.inMultiSelectMode||this.inVirtualSelectionMode){var r=n.toOrientedRange(),i=this.$getSelectedRows(r),s=this.session.$moveLines(i.first,i.last,t?0:e);t&&-1==e&&(s=0),r.moveBy(s,0),n.fromOrientedRange(r)}else{var o=n.rangeList.ranges;n.rangeList.detach(this.session),this.inVirtualSelectionMode=!0;for(var a=0,c=0,l=o.length,h=0;h<l;h++){var d=h;o[h].moveBy(a,0);for(var u=(i=this.$getSelectedRows(o[h])).first,f=i.last;++h<l;){c&&o[h].moveBy(c,0);var g=this.$getSelectedRows(o[h]);if(t&&g.first!=f)break;if(!t&&g.first>f+1)break;f=g.last}for(h--,a=this.session.$moveLines(u,f,t?0:e),t&&-1==e&&(d=h+1);d<=h;)o[d].moveBy(a,0),d++;t||(a=0),c+=a}n.fromOrientedRange(n.ranges[0]),n.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(e)},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var n=this.renderer,r=this.renderer.layerConfig,i=e*Math.floor(r.height/r.lineHeight);!0===t?this.selection.$moveSelection((function(){this.moveCursorBy(i,0)})):!1===t&&(this.selection.moveCursorBy(i,0),this.selection.clearSelection()),e=n.scrollTop,n.scrollBy(0,i*r.lineHeight),null!=t&&n.scrollCursorIntoView(null,.5),n.animateScrolling(e)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,n,r){this.renderer.scrollToLine(e,t,n,r)},this.centerSelection=function(){var e=this.getSelectionRange();e={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)},this.renderer.alignCursor(e,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.selection.selectAll()},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var n=this.getCursorPosition(),r=new b(this.session,n.row,n.column),i=r.getCurrentToken(),s=i||r.stepForward();if(s){var o,a,c,l=!1,h={},d=n.column-s.start,u={\")\":\"(\",\"(\":\"(\",\"]\":\"[\",\"[\":\"[\",\"{\":\"{\",\"}\":\"{\"};do{if(s.value.match(/[{}()\\[\\]]/g)){for(;d<s.value.length&&!l;d++)if(u[s.value[d]])switch(a=u[s.value[d]]+\".\"+s.type.replace(\"rparen\",\"lparen\"),isNaN(h[a])&&(h[a]=0),s.value[d]){case\"(\":case\"[\":case\"{\":h[a]++;break;case\")\":case\"]\":case\"}\":h[a]--,-1===h[a]&&(o=\"bracket\",l=!0)}}else-1!==s.type.indexOf(\"tag-name\")&&(isNaN(h[s.value])&&(h[s.value]=0),\"<\"===i.value?h[s.value]++:\"</\"===i.value&&h[s.value]--,-1===h[s.value]&&(o=\"tag\",l=!0))}while(l||(i=s,s=r.stepForward(),d=0),s&&!l);if(o){if(\"bracket\"===o)(g=this.session.getBracketRange(n))||(c=(g=new f(r.getCurrentTokenRow(),r.getCurrentTokenColumn()+d-1,r.getCurrentTokenRow(),r.getCurrentTokenColumn()+d-1)).start,(t||c.row===n.row&&Math.abs(c.column-n.column)<2)&&(g=this.session.getBracketRange(c)));else if(\"tag\"===o){if(!s||-1===s.type.indexOf(\"tag-name\"))return;var g,p=s.value;if(0===(g=new f(r.getCurrentTokenRow(),r.getCurrentTokenColumn()-2,r.getCurrentTokenRow(),r.getCurrentTokenColumn()-2)).compare(n.row,n.column))for(l=!1;s=i,(i=r.stepBackward())&&(-1!==i.type.indexOf(\"tag-close\")&&g.setEnd(r.getCurrentTokenRow(),r.getCurrentTokenColumn()+1),s.value===p&&-1!==s.type.indexOf(\"tag-name\")&&(\"<\"===i.value?h[p]++:\"</\"===i.value&&h[p]--,0===h[p]&&(l=!0))),i&&!l;);s&&s.type.indexOf(\"tag-name\")&&(c=g.start).row==n.row&&Math.abs(c.column-n.column)<2&&(c=g.end)}(c=g&&g.cursor||c)&&(e?g&&t?this.selection.setRange(g):g&&g.isEqual(this.getSelectionRange())?this.clearSelection():this.selection.selectTo(c.row,c.column):this.selection.moveTo(c.row,c.column))}}},this.gotoLine=function(e,t,n){this.selection.clearSelection(),this.session.unfold({row:e-1,column:t||0}),this.exitMultiSelectMode&&this.exitMultiSelectMode(),this.moveCursorTo(e-1,t||0),this.isRowFullyVisible(e-1)||this.scrollToLine(e-1,!0,n)},this.navigateTo=function(e,t){this.selection.moveTo(e,t)},this.navigateUp=function(e){if(this.selection.isMultiLine()&&!this.selection.isBackwards()){var t=this.selection.anchor.getPosition();return this.moveCursorToPosition(t)}this.selection.clearSelection(),this.selection.moveCursorBy(-e||-1,0)},this.navigateDown=function(e){if(this.selection.isMultiLine()&&this.selection.isBackwards()){var t=this.selection.anchor.getPosition();return this.moveCursorToPosition(t)}this.selection.clearSelection(),this.selection.moveCursorBy(e||1,0)},this.navigateLeft=function(e){if(this.selection.isEmpty())for(e=e||1;e--;)this.selection.moveCursorLeft();else{var t=this.getSelectionRange().start;this.moveCursorToPosition(t)}this.clearSelection()},this.navigateRight=function(e){if(this.selection.isEmpty())for(e=e||1;e--;)this.selection.moveCursorRight();else{var t=this.getSelectionRange().end;this.moveCursorToPosition(t)}this.clearSelection()},this.navigateLineStart=function(){this.selection.moveCursorLineStart(),this.clearSelection()},this.navigateLineEnd=function(){this.selection.moveCursorLineEnd(),this.clearSelection()},this.navigateFileEnd=function(){this.selection.moveCursorFileEnd(),this.clearSelection()},this.navigateFileStart=function(){this.selection.moveCursorFileStart(),this.clearSelection()},this.navigateWordRight=function(){this.selection.moveCursorWordRight(),this.clearSelection()},this.navigateWordLeft=function(){this.selection.moveCursorWordLeft(),this.clearSelection()},this.replace=function(e,t){t&&this.$search.set(t);var n=this.$search.find(this.session);return t=0,n&&(this.$tryReplace(n,e)&&(t=1),this.selection.setSelectionRange(n),this.renderer.scrollSelectionIntoView(n.start,n.end)),t},this.replaceAll=function(e,t){t&&this.$search.set(t);var n=this.$search.findAll(this.session),r=0;if(!n.length)return r;t=this.getSelectionRange(),this.selection.moveTo(0,0);for(var i=n.length-1;0<=i;--i)this.$tryReplace(n[i],e)&&r++;return this.selection.setSelectionRange(t),r},this.$tryReplace=function(e,t){var n=this.session.getTextRange(e);return null!==(t=this.$search.replace(n,t))?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,n){t=t||{},\"string\"==typeof e||e instanceof RegExp?t.needle=e:\"object\"==typeof e&&r.mixin(t,e);var i=this.selection.getRange();return null==t.needle&&((e=this.session.getTextRange(i)||this.$search.$options.needle)||(i=this.session.getWordRange(i.start.row,i.start.column),e=this.session.getTextRange(i)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:i}),e=this.$search.find(this.session),t.preventScroll?e:e?(this.revealRange(e,n),e):(t.backwards?i.start=i.end:i.end=i.start,void this.selection.setRange(i))},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.session.unfold(e),this.selection.setSelectionRange(e);var n=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),!1!==t&&this.renderer.animateScrolling(n)},this.undo=function(){this.session.getUndoManager().undo(this.session),this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.session.getUndoManager().redo(this.session),this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.$toDestroy&&(this.$toDestroy.forEach((function(e){e.destroy()})),this.$toDestroy=null),this.$mouseHandler&&this.$mouseHandler.destroy(),this.renderer.destroy(),this._signal(\"destroy\",this),this.session&&this.session.destroy(),this._$emitInputEvent&&this._$emitInputEvent.cancel(),this.removeAllListeners()},this.setAutoScrollEditorIntoView=function(e){var t,n,r,i,s,o,a;e&&(r=!1,(n=this).$scrollAnchor||(this.$scrollAnchor=document.createElement(\"div\")),(i=this.$scrollAnchor).style.cssText=\"position:absolute\",this.container.insertBefore(i,this.container.firstChild),s=this.on(\"changeSelection\",(function(){r=!0})),o=this.renderer.on(\"beforeRender\",(function(){r&&(t=n.renderer.container.getBoundingClientRect())})),a=this.renderer.on(\"afterRender\",(function(){var e,s,o;r&&t&&(n.isFocused()||n.searchBox&&n.searchBox.isFocused())&&(e=(o=n.renderer).$cursorLayer.$pixelPos,o=e.top-(s=o.layerConfig).offset,null!=(r=0<=e.top&&o+t.top<0||!(e.top<s.height&&e.top+t.top+s.lineHeight>window.innerHeight)&&null)&&(i.style.top=o+\"px\",i.style.left=e.left+\"px\",i.style.height=s.lineHeight+\"px\",i.scrollIntoView(r)),r=t=null)})),this.setAutoScrollEditorIntoView=function(e){e||(delete this.setAutoScrollEditorIntoView,this.off(\"changeSelection\",s),this.renderer.off(\"afterRender\",a),this.renderer.off(\"beforeRender\",o))})},this.$resetCursorStyle=function(){var e=this.$cursorStyle||\"ace\",t=this.renderer.$cursorLayer;t&&(t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&\"wide\"!=e,i.setCssClass(t.element,\"ace_slim-cursors\",/slim/.test(e)))},this.prompt=function(e,t,n){var r=this;C.loadModule(\"./ext/prompt\",(function(i){i.prompt(r,e,t,n)}))}}).call(I.prototype),C.defineOptions(I.prototype,\"editor\",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal(\"changeSelectionStyle\",{data:e})},initialValue:\"line\"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.textInput.setReadOnly(e),this.$resetCursorStyle()},initialValue:!1},copyWithEmptySelection:{set:function(e){this.textInput.setCopyWithEmptySelection(e)},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:[\"ace\",\"slim\",\"smooth\",\"wide\"],initialValue:\"ace\"},mergeUndoDeltas:{values:[!1,!0,\"always\"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},enableAutoIndent:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},keyboardHandler:{set:function(e){this.setKeyboardHandler(e)},get:function(){return this.$keybindingId},handlesSet:!0},value:{set:function(e){this.session.setValue(e)},get:function(){return this.getValue()},handlesSet:!0,hidden:!0},session:{set:function(e){this.setSession(e)},get:function(){return this.session},handlesSet:!0,hidden:!0},showLineNumbers:{set:function(e){this.renderer.$gutterLayer.setShowLineNumbers(e),this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER),e&&this.$relativeLineNumbers?A.attach(this):A.detach(this)},initialValue:!0},relativeLineNumbers:{set:function(e){this.$showLineNumbers&&e?A.attach(this):A.detach(this)}},placeholder:{set:function(e){this.$updatePlaceholder||(this.$updatePlaceholder=(function(){var e=this.session&&(this.renderer.$composition||this.getValue());e&&this.renderer.placeholderNode?(this.renderer.off(\"afterRender\",this.$updatePlaceholder),i.removeCssClass(this.container,\"ace_hasPlaceholder\"),this.renderer.placeholderNode.remove(),this.renderer.placeholderNode=null):e||this.renderer.placeholderNode?!e&&this.renderer.placeholderNode&&(this.renderer.placeholderNode.textContent=this.$placeholder||\"\"):(this.renderer.on(\"afterRender\",this.$updatePlaceholder),i.addCssClass(this.container,\"ace_hasPlaceholder\"),(e=i.createElement(\"div\")).className=\"ace_placeholder\",e.textContent=this.$placeholder||\"\",this.renderer.placeholderNode=e,this.renderer.content.appendChild(this.renderer.placeholderNode))}).bind(this),this.on(\"input\",this.$updatePlaceholder)),this.$updatePlaceholder()}},hScrollBarAlwaysVisible:\"renderer\",vScrollBarAlwaysVisible:\"renderer\",highlightGutterLine:\"renderer\",animatedScroll:\"renderer\",showInvisibles:\"renderer\",showPrintMargin:\"renderer\",printMarginColumn:\"renderer\",printMargin:\"renderer\",fadeFoldWidgets:\"renderer\",showFoldWidgets:\"renderer\",displayIndentGuides:\"renderer\",showGutter:\"renderer\",fontSize:\"renderer\",fontFamily:\"renderer\",maxLines:\"renderer\",minLines:\"renderer\",scrollPastEnd:\"renderer\",fixedWidthGutter:\"renderer\",theme:\"renderer\",hasCssTransforms:\"renderer\",maxPixelHeight:\"renderer\",useTextareaForIME:\"renderer\",scrollSpeed:\"$mouseHandler\",dragDelay:\"$mouseHandler\",dragEnabled:\"$mouseHandler\",focusTimeout:\"$mouseHandler\",tooltipFollowsMouse:\"$mouseHandler\",firstLineNumber:\"session\",overwrite:\"session\",newLineMode:\"session\",useWorker:\"session\",useSoftTabs:\"session\",navigateWithinSoftTabs:\"session\",tabSize:\"session\",wrap:\"session\",indentedSoftWrap:\"session\",foldStyle:\"session\",mode:\"session\"});var A={getText:function(e,t){return(Math.abs(e.selection.lead.row-t)||t+1+(t<9?\"\\xb7\":\"\"))+\"\"},getWidth:function(e,t,n){return Math.max(t.toString().length,(n.lastRow+1).toString().length,2)*n.characterWidth},update:function(e,t){t.renderer.$loop.schedule(t.renderer.CHANGE_GUTTER)},attach:function(e){e.renderer.$gutterLayer.$renderer=this,e.on(\"changeSelection\",this.update),this.update(null,e)},detach:function(e){e.renderer.$gutterLayer.$renderer==this&&(e.renderer.$gutterLayer.$renderer=null),e.off(\"changeSelection\",this.update),this.update(null,e)}};t.Editor=I})),ace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"],(function(e,t,n){\"use strict\";function r(){this.$maxRev=0,this.$fromUndo=!1,this.reset()}(function(){this.addSession=function(e){this.$session=e},this.add=function(e,t,n){this.$fromUndo||e!=this.$lastDelta&&(this.$keepRedoStack||(this.$redoStack.length=0),!1!==t&&this.lastDeltas||(this.lastDeltas=[],this.$undoStack.push(this.lastDeltas),e.id=this.$rev=++this.$maxRev),\"remove\"!=e.action&&\"insert\"!=e.action||(this.$lastDelta=e),this.lastDeltas.push(e))},this.addSelection=function(e,t){this.selections.push({value:e,rev:t||this.$rev})},this.startNewGroup=function(){return this.lastDeltas=null,this.$rev},this.markIgnored=function(e,t){null==t&&(t=this.$rev+1);for(var n=this.$undoStack,r=n.length;r--;){var i=n[r][0];if(i.id<=e)break;i.id<t&&(i.ignore=!0)}this.lastDeltas=null},this.getSelection=function(e,t){for(var n=this.selections,r=n.length;r--;){var i=n[r];if(i.rev<e)return t&&(i=n[r+1]),i}},this.getRevision=function(){return this.$rev},this.getDeltas=function(e,t){null==t&&(t=this.$rev+1);for(var n=this.$undoStack,r=null,i=0,s=n.length;s--;){var o=n[s][0];if(o.id<t&&!r&&(r=s+1),o.id<=e){i=s+1;break}}return n.slice(i,r)},this.getChangedRanges=function(e,t){null==t&&(t=this.$rev+1)},this.getChangedLines=function(e,t){null==t&&(t=this.$rev+1)},this.undo=function(e,t){if(this.lastDeltas=null,function(e,t){for(var n=t;n--;){var r=e[n];if(r&&!r[0].ignore){for(;n<t-1;){var i=function(e,t){for(var n=e.length;n--;)for(var r=0;r<t.length;r++)if(!l(e[n],t[r])){for(;n<e.length;){for(;r--;)l(t[r],e[n]);r=t.length,n++}return[e,t]}return e.selectionBefore=t.selectionBefore=e.selectionAfter=t.selectionAfter=null,[t,e]}(e[n],e[n+1]);e[n]=i[0],e[n+1]=i[1],n++}return!0}}}(r=this.$undoStack,r.length)){e=e||this.$session,this.$redoStackBaseRev!==this.$rev&&this.$redoStack.length&&(this.$redoStack=[]),this.$fromUndo=!0;var n=r.pop(),r=null;return n&&(r=e.undoChanges(n,t),this.$redoStack.push(n),this.$syncRev()),this.$fromUndo=!1,r}},this.redo=function(e,t){this.lastDeltas=null,e=e||this.$session,this.$fromUndo=!0,this.$redoStackBaseRev!=this.$rev&&(r=this.getDeltas(this.$redoStackBaseRev,this.$rev+1),function(e,t){for(var n=0;n<t.length;n++)for(var r=t[n],a=0;a<r.length;a++)!function(e,t){t=function(e){return{start:o(e.start),end:o(e.end),action:e.action,lines:e.lines.slice()}}(t);for(var n=e.length;n--;){for(var r=e[n],a=0;a<r.length;a++){var c=function(e,t){var n,r,o=\"insert\"==e.action,a=\"insert\"==t.action;if(o&&a)s(e.start,t.start)<0?h(t,e,1):h(e,t,1);else if(o&&!a)0<=s(e.start,t.end)?h(e,t,-1):(s(e.start,t.start)<=0||h(e,i.fromPoints(t.start,e.start),-1),h(t,e,1));else if(!o&&a)0<=s(t.start,e.end)?h(t,e,-1):(s(t.start,e.start)<=0||h(t,i.fromPoints(e.start,t.start),-1),h(e,t,1));else if(!o&&!a)if(0<=s(t.start,e.end))h(t,e,-1);else{if(!(s(t.end,e.start)<=0))return s(e.start,t.start)<0&&(e=u(n=e,t.start)),0<s(e.end,t.end)&&(r=u(e,t.end)),d(t.end,e.start,e.end,-1),r&&!n&&(e.lines=r.lines,e.start=r.start,e.end=r.end,r=e),[t,n,r].filter(Boolean);h(e,t,-1)}return[t,e]}(r[a],t);t=c[0],2!=c.length&&(c[2]?(r.splice(a+1,1,c[1],c[2]),a++):c[1]||(r.splice(a,1),a--))}r.length||e.splice(n,1)}}(e,r[a])}(this.$redoStack,r),this.$redoStackBaseRev=this.$rev,this.$redoStack.forEach((function(e){e[0].id=++this.$maxRev}),this));var n=this.$redoStack.pop(),r=null;return n&&(r=e.redoChanges(n,t),this.$undoStack.push(n),this.$syncRev()),this.$fromUndo=!1,r},this.$syncRev=function(){var e;this.$redoStackBaseRev=e=(e=(e=this.$undoStack)[e.length-1])&&e[0].id||0,this.$rev=e},this.reset=function(){this.lastDeltas=null,this.$lastDelta=null,this.$undoStack=[],this.$redoStack=[],this.$rev=0,this.mark=0,this.$redoStackBaseRev=this.$rev,this.selections=[]},this.canUndo=function(){return 0<this.$undoStack.length},this.canRedo=function(){return 0<this.$redoStack.length},this.bookmark=function(e){null==e&&(e=this.$rev),this.mark=e},this.isAtBookmark=function(){return this.$rev===this.mark},this.toJSON=function(){},this.fromJSON=function(){},this.hasUndo=this.canUndo,this.hasRedo=this.canRedo,this.isClean=this.isAtBookmark,this.markClean=this.bookmark,this.$prettyPrint=function(e){return e?a(e):a(this.$undoStack)+\"\\n---\\n\"+a(this.$redoStack)}}).call(r.prototype);var i=e(\"./range\").Range,s=i.comparePoints;function o(e){return{row:e.row,column:e.column}}function a(e){if(e=e||this,Array.isArray(e))return e.map(a).join(\"\\n\");var t=\"\";return e.action?(t=\"insert\"==e.action?\"+\":\"-\",t+=\"[\"+e.lines+\"]\"):e.value&&(t=Array.isArray(e.value)?e.value.map(c).join(\"\\n\"):c(e.value)),e.start&&(t+=c(e)),(e.id||e.rev)&&(t+=\"\\t(\"+(e.id||e.rev)+\")\"),t}function c(e){return e.start.row+\":\"+e.start.column+\"=>\"+e.end.row+\":\"+e.end.column}function l(e,t){var n=\"insert\"==e.action,r=\"insert\"==t.action;if(n&&r)if(0<=s(t.start,e.end))h(t,e,-1);else{if(!(s(t.start,e.start)<=0))return;h(e,t,1)}else if(n&&!r)if(0<=s(t.start,e.end))h(t,e,-1);else{if(!(s(t.end,e.start)<=0))return;h(e,t,-1)}else if(!n&&r)if(0<=s(t.start,e.start))h(t,e,1);else{if(!(s(t.start,e.start)<=0))return;h(e,t,1)}else if(!n&&!r)if(0<=s(t.start,e.start))h(t,e,1);else{if(!(s(t.end,e.start)<=0))return;h(e,t,-1)}return 1}function h(e,t,n){d(e.start,t.start,t.end,n),d(e.end,t.start,t.end,n)}function d(e,t,n,r){e.row==(1==r?t:n).row&&(e.column+=r*(n.column-t.column)),e.row+=r*(n.row-t.row)}function u(e,t){var n=e.lines,r=e.end;e.end=o(t);var i,s=n.splice(i=e.end.row-e.start.row,n.length);return n.push(s[0].substring(0,i=i?t.column:t.column-e.start.column)),s[0]=s[0].substr(i),{start:o(t),end:r,lines:s,action:e.action}}t.UndoManager=r})),ace.define(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/dom\");(function(){this.moveContainer=function(e){r.translate(this.element,0,-e.firstRowScreen*e.lineHeight%this.canvasHeight-e.offset*this.$offsetCoefficient)},this.pageChanged=function(e,t){return Math.floor(e.firstRowScreen*e.lineHeight/this.canvasHeight)!==Math.floor(t.firstRowScreen*t.lineHeight/this.canvasHeight)},this.computeLineTop=function(e,t,n){var r=t.firstRowScreen*t.lineHeight;return r=Math.floor(r/this.canvasHeight),n.documentToScreenRow(e,0)*t.lineHeight-r*this.canvasHeight},this.computeLineHeight=function(e,t,n){return t.lineHeight*n.getRowLineCount(e)},this.getLength=function(){return this.cells.length},this.get=function(e){return this.cells[e]},this.shift=function(){this.$cacheCell(this.cells.shift())},this.pop=function(){this.$cacheCell(this.cells.pop())},this.push=function(e){if(Array.isArray(e)){this.cells.push.apply(this.cells,e);for(var t=r.createFragment(this.element),n=0;n<e.length;n++)t.appendChild(e[n].element);this.element.appendChild(t)}else this.cells.push(e),this.element.appendChild(e.element)},this.unshift=function(e){if(Array.isArray(e)){this.cells.unshift.apply(this.cells,e);for(var t=r.createFragment(this.element),n=0;n<e.length;n++)t.appendChild(e[n].element);this.element.firstChild?this.element.insertBefore(t,this.element.firstChild):this.element.appendChild(t)}else this.cells.unshift(e),this.element.insertAdjacentElement(\"afterbegin\",e.element)},this.last=function(){return this.cells.length?this.cells[this.cells.length-1]:null},this.$cacheCell=function(e){e&&(e.element.remove(),this.cellCache.push(e))},this.createCell=function(e,t,n,i){var s,o=this.cellCache.pop();return o||(s=r.createElement(\"div\"),i&&i(s),this.element.appendChild(s),o={element:s,text:\"\",row:e}),o.row=e,o}}).call((e=function(e,t){this.element=e,this.canvasHeight=t||5e5,this.element.style.height=2*this.canvasHeight+\"px\",this.cells=[],this.cellCache=[],this.$offsetCoefficient=0}).prototype),t.Lines=e})),ace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/layer/lines\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),i=e(\"../lib/oop\"),s=e(\"../lib/lang\"),o=e(\"../lib/event_emitter\").EventEmitter,a=e(\"./lines\").Lines;function c(e){var t=document.createTextNode(\"\");return e.appendChild(t),t=r.createElement(\"span\"),e.appendChild(t),e}(function(){i.implement(this,o),this.setSession=function(e){this.session&&this.session.off(\"change\",this.$updateAnnotations),(this.session=e)&&e.on(\"change\",this.$updateAnnotations)},this.addGutterDecoration=function(e,t){window.console&&console.warn&&console.warn(\"deprecated use session.addGutterDecoration\"),this.session.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){window.console&&console.warn&&console.warn(\"deprecated use session.removeGutterDecoration\"),this.session.removeGutterDecoration(e,t)},this.setAnnotations=function(e){this.$annotations=[];for(var t=0;t<e.length;t++){var n=e[t],r=(r=this.$annotations[i=n.row])||(this.$annotations[i]={text:[]}),i=(i=n.text)?s.escapeHTML(i):n.html||\"\";-1===r.text.indexOf(i)&&r.text.push(i),\"error\"==(n=n.type)?r.className=\" ace_error\":\"warning\"==n&&\" ace_error\"!=r.className?r.className=\" ace_warning\":\"info\"!=n||r.className||(r.className=\" ace_info\")}},this.$updateAnnotations=function(e){var t,n;this.$annotations.length&&(0==(n=e.end.row-(t=e.start.row))||(\"remove\"==e.action?this.$annotations.splice(t,1+n,null):((n=new Array(1+n)).unshift(t,1),this.$annotations.splice.apply(this.$annotations,n))))},this.update=function(e){this.config=e;var t=this.session,n=e.firstRow,r=Math.min(e.lastRow+e.gutterOffset,t.getLength()-1);this.oldLastRow=r,this.config=e,this.$lines.moveContainer(e),this.$updateCursorRow();for(var i=t.getNextFoldLine(n),s=i?i.start.row:1/0,o=null,a=-1,l=n;;){if(s<l&&(s=(i=t.getNextFoldLine(l=i.end.row+1,i))?i.start.row:1/0),r<l){for(;this.$lines.getLength()>a+1;)this.$lines.pop();break}(o=this.$lines.get(++a))?o.row=l:(o=this.$lines.createCell(l,e,this.session,c),this.$lines.push(o)),this.$renderCell(o,e,i,l),l++}this._signal(\"afterRender\"),this.$updateGutterWidth(e)},this.$updateGutterWidth=function(e){var t=this.session,n=t.gutterRenderer||this.$renderer,r=t.$firstLineNumber,i=this.$lines.last()?this.$lines.last().text:\"\";(this.$fixedWidth||t.$useWrapMode)&&(i=t.getLength()+r-1),i=n?n.getWidth(t,i,e):i.toString().length*e.characterWidth,(i+=(e=this.$padding||this.$computePadding()).left+e.right)===this.gutterWidth||isNaN(i)||(this.gutterWidth=i,this.element.parentNode.style.width=this.element.style.width=Math.ceil(this.gutterWidth)+\"px\",this._signal(\"changeGutterWidth\",i))},this.$updateCursorRow=function(){var e;this.$highlightGutterLine&&(e=this.session.selection.getCursor(),this.$cursorRow!==e.row&&(this.$cursorRow=e.row))},this.updateLineHighlight=function(){if(this.$highlightGutterLine){var e=this.session.selection.cursor.row;if(this.$cursorRow=e,!this.$cursorCell||this.$cursorCell.row!=e){this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace(\"ace_gutter-active-line \",\"\"));var t=this.$lines.cells;this.$cursorCell=null;for(var n=0;n<t.length;n++){var r=t[n];if(r.row>=this.$cursorRow){if(r.row>this.$cursorRow){var i=this.session.getFoldLine(this.$cursorRow);if(!(0<n&&i&&i.start.row==t[n-1].row))break;r=t[n-1]}r.element.className=\"ace_gutter-active-line \"+r.element.className,this.$cursorCell=r;break}}}}},this.scrollLines=function(e){var t=this.config;if(this.config=e,this.$updateCursorRow(),this.$lines.pageChanged(t,e))return this.update(e);this.$lines.moveContainer(e);var n=Math.min(e.lastRow+e.gutterOffset,this.session.getLength()-1),r=this.oldLastRow;if(this.oldLastRow=n,!t||r<e.firstRow)return this.update(e);if(n<t.firstRow)return this.update(e);if(t.firstRow<e.firstRow)for(var i=this.session.getFoldedRowCount(t.firstRow,e.firstRow-1);0<i;i--)this.$lines.shift();if(n<r)for(i=this.session.getFoldedRowCount(n+1,r);0<i;i--)this.$lines.pop();e.firstRow<t.firstRow&&this.$lines.unshift(this.$renderLines(e,e.firstRow,t.firstRow-1)),r<n&&this.$lines.push(this.$renderLines(e,r+1,n)),this.updateLineHighlight(),this._signal(\"afterRender\"),this.$updateGutterWidth(e)},this.$renderLines=function(e,t,n){for(var r=[],i=t,s=this.session.getNextFoldLine(i),o=s?s.start.row:1/0;o<i&&(o=(s=this.session.getNextFoldLine(i=s.end.row+1,s))?s.start.row:1/0),!(n<i);){var a=this.$lines.createCell(i,e,this.session,c);this.$renderCell(a,e,s,i),r.push(a),i++}return r},this.$renderCell=function(e,t,n,i){var s,o=e.element,a=this.session,c=o.childNodes[0],l=o.childNodes[1],h=a.$firstLineNumber,d=a.$breakpoints,u=a.$decorations,f=a.gutterRenderer||this.$renderer,g=this.$showFoldWidgets&&a.foldWidgets,p=n?n.start.row:Number.MAX_VALUE,m=\"ace_gutter-cell \";return this.$highlightGutterLine&&(i==this.$cursorRow||n&&i<this.$cursorRow&&p<=i&&this.$cursorRow<=n.end.row)&&(m+=\"ace_gutter-active-line \",this.$cursorCell!=e&&(this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace(\"ace_gutter-active-line \",\"\")),this.$cursorCell=e)),d[i]&&(m+=d[i]),u[i]&&(m+=u[i]),this.$annotations[i]&&(m+=this.$annotations[i].className),o.className!=m&&(o.className=m),!g||null==(s=g[i])&&(s=g[i]=a.getFoldWidget(i)),s?(m=\"ace_fold-widget ace_\"+s,l.className!=(m+=\"start\"==s&&i==p&&i<n.end.row?\" ace_closed\":\" ace_open\")&&(l.className=m),r.setStyle(l.style,\"height\",m=t.lineHeight+\"px\"),r.setStyle(l.style,\"display\",\"inline-block\")):l&&r.setStyle(l.style,\"display\",\"none\"),(h=(f?f.getText(a,i):i+h).toString())!==c.data&&(c.data=h),r.setStyle(e.element.style,\"height\",this.$lines.computeLineHeight(i,t,a)+\"px\"),r.setStyle(e.element.style,\"top\",this.$lines.computeLineTop(i,t,a)+\"px\"),e.text=h,e},this.$fixedWidth=!1,this.$highlightGutterLine=!0,this.$renderer=\"\",this.setHighlightGutterLine=function(e){this.$highlightGutterLine=e},this.$showLineNumbers=!0,this.$renderer=\"\",this.setShowLineNumbers=function(e){this.$renderer=!e&&{getWidth:function(){return 0},getText:function(){return\"\"}}},this.getShowLineNumbers=function(){return this.$showLineNumbers},this.$showFoldWidgets=!0,this.setShowFoldWidgets=function(e){e?r.addCssClass(this.element,\"ace_folding-enabled\"):r.removeCssClass(this.element,\"ace_folding-enabled\"),this.$showFoldWidgets=e,this.$padding=null},this.getShowFoldWidgets=function(){return this.$showFoldWidgets},this.$computePadding=function(){if(!this.element.firstChild)return{left:0,right:0};var e=r.computedStyle(this.element.firstChild);return this.$padding={},this.$padding.left=(parseInt(e.borderLeftWidth)||0)+(parseInt(e.paddingLeft)||0)+1,this.$padding.right=(parseInt(e.borderRightWidth)||0)+(parseInt(e.paddingRight)||0),this.$padding},this.getRegion=function(e){var t=this.$padding||this.$computePadding(),n=this.element.getBoundingClientRect();return e.x<t.left+n.left?\"markers\":this.$showFoldWidgets&&e.x>n.right-t.right?\"foldWidgets\":void 0}}).call((e=function(e){this.element=r.createElement(\"div\"),this.element.className=\"ace_layer ace_gutter-layer\",e.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$annotations=[],this.$updateAnnotations=this.$updateAnnotations.bind(this),this.$lines=new a(this.element),this.$lines.$offsetCoefficient=1}).prototype),t.Gutter=e})),ace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"],(function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../lib/dom\");(function(){this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.elt=function(e,t){var n=-1!=this.i&&this.element.childNodes[this.i];n?this.i++:(n=document.createElement(\"div\"),this.element.appendChild(n),this.i=-1),n.style.cssText=t,n.className=e},this.update=function(e){if(e){var t,n;for(n in this.config=e,this.i=0,this.markers){var r,i,s=this.markers[n];s.range?(i=s.range.clipRows(e.firstRow,e.lastRow)).isEmpty()||(i=i.toScreenRange(this.session),s.renderer?(r=this.$getTop(i.start.row,e),s.renderer(t,i,this.$padding+i.start.column*e.characterWidth,r,e)):\"fullLine\"==s.type?this.drawFullLineMarker(t,i,s.clazz,e):\"screenLine\"==s.type?this.drawScreenLineMarker(t,i,s.clazz,e):i.isMultiLine()?\"text\"==s.type?this.drawTextMarker(t,i,s.clazz,e):this.drawMultiLineMarker(t,i,s.clazz,e):this.drawSingleLineMarker(t,i,s.clazz+\" ace_start ace_br15\",e)):s.update(t,this,this.session,e)}if(-1!=this.i)for(;this.i<this.element.childElementCount;)this.element.removeChild(this.element.lastChild)}},this.$getTop=function(e,t){return(e-t.firstRowScreen)*t.lineHeight},this.drawTextMarker=function(e,t,n,i,s){for(var o,a=this.session,c=t.start.row,l=t.end.row,h=c,d=0,u=a.getScreenLastRowColumn(h),f=new r(h,t.start.column,h,d);h<=l;h++)f.start.row=f.end.row=h,f.start.column=h==c?t.start.column:a.getRowWrapIndent(h),o=d,d=f.end.column=u,u=h+1<l?a.getScreenLastRowColumn(h+1):h==l?0:t.end.column,this.drawSingleLineMarker(e,f,n+(h==c?\" ace_start\":\"\")+\" ace_br\"+((h==c||h==c+1&&t.start.column?1:0)|(o<d?2:0)|(u<d?4:0)|(h==l?8:0)),i,h==l?0:1,s)},this.drawMultiLineMarker=function(e,t,n,r,i){var s,o=this.$padding,a=r.lineHeight,c=this.$getTop(t.start.row,r),l=o+t.start.column*r.characterWidth;i=i||\"\",this.session.$bidiHandler.isBidiRow(t.start.row)?((s=t.clone()).end.row=s.start.row,s.end.column=this.session.getLine(s.start.row).length,this.drawBidiSingleLineMarker(e,s,n+\" ace_br1 ace_start\",r,null,i)):this.elt(n+\" ace_br1 ace_start\",\"height:\"+a+\"px;right:0;top:\"+c+\"px;left:\"+l+\"px;\"+(i||\"\")),this.session.$bidiHandler.isBidiRow(t.end.row)?((s=t.clone()).start.row=s.end.row,s.start.column=0,this.drawBidiSingleLineMarker(e,s,n+\" ace_br12\",r,null,i)):(c=this.$getTop(t.end.row,r),this.elt(n+\" ace_br12\",\"height:\"+a+\"px;width:\"+(s=t.end.column*r.characterWidth)+\"px;top:\"+c+\"px;left:\"+o+\"px;\"+(i||\"\"))),(a=(t.end.row-t.start.row-1)*r.lineHeight)<=0||(c=this.$getTop(t.start.row+1,r),this.elt(n+((t=(t.start.column?1:0)|(t.end.column?0:8))?\" ace_br\"+t:\"\"),\"height:\"+a+\"px;right:0;top:\"+c+\"px;left:\"+o+\"px;\"+(i||\"\")))},this.drawSingleLineMarker=function(e,t,n,r,i,s){if(this.session.$bidiHandler.isBidiRow(t.start.row))return this.drawBidiSingleLineMarker(e,t,n,r,i,s);var o=r.lineHeight;e=(t.end.column+(i||0)-t.start.column)*r.characterWidth,i=this.$getTop(t.start.row,r),this.elt(n,\"height:\"+o+\"px;width:\"+e+\"px;top:\"+i+\"px;left:\"+(r=this.$padding+t.start.column*r.characterWidth)+\"px;\"+(s||\"\"))},this.drawBidiSingleLineMarker=function(e,t,n,r,i,s){var o=r.lineHeight,a=this.$getTop(t.start.row,r),c=this.$padding;this.session.$bidiHandler.getSelections(t.start.column,t.end.column).forEach((function(e){this.elt(n,\"height:\"+o+\"px;width:\"+e.width+(i||0)+\"px;top:\"+a+\"px;left:\"+(c+e.left)+\"px;\"+(s||\"\"))}),this)},this.drawFullLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;t.start.row!=t.end.row&&(o+=this.$getTop(t.end.row,r)-s),this.elt(n,\"height:\"+o+\"px;top:\"+s+\"px;left:0;right:0;\"+(i||\"\"))},this.drawScreenLineMarker=function(e,t,n,r,i){t=this.$getTop(t.start.row,r),this.elt(n,\"height:\"+(r=r.lineHeight)+\"px;top:\"+t+\"px;left:0;right:0;\"+(i||\"\"))}}).call((e=function(e){this.element=i.createElement(\"div\"),this.element.className=\"ace_layer ace_marker-layer\",e.appendChild(this.element)}).prototype),t.Marker=e})),ace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/dom\"),s=e(\"../lib/lang\"),o=e(\"./lines\").Lines,a=e(\"../lib/event_emitter\").EventEmitter;(function(){r.implement(this,a),this.EOF_CHAR=\"\\xb6\",this.EOL_CHAR_LF=\"\\xac\",this.EOL_CHAR_CRLF=\"\\xa4\",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR=\"\\u2014\",this.SPACE_CHAR=\"\\xb7\",this.$padding=0,this.MAX_LINE_LENGTH=1e4,this.$updateEolChar=function(){var e=\"\\n\"==(e=this.session.doc).getNewLineCharacter()&&\"windows\"!=e.getNewLineMode()?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=e)return this.EOL_CHAR=e,!0},this.setPadding=function(e){this.$padding=e,this.element.style.margin=\"0 \"+e+\"px\"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on(\"changeCharacterSize\",(function(e){this._signal(\"changeCharacterSize\",e)}).bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){(this.session=e)&&this.$computeTabString()},this.showInvisibles=!1,this.showSpaces=!1,this.showTabs=!1,this.showEOL=!1,this.setShowInvisibles=function(e){return this.showInvisibles!=e&&(\"string\"==typeof(this.showInvisibles=e)?(this.showSpaces=/tab/i.test(e),this.showTabs=/space/i.test(e),this.showEOL=/eol/i.test(e)):this.showSpaces=this.showTabs=this.showEOL=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides!=e&&(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;for(var t,n,r,i,o,a,c=this.$tabStrings=[0],l=1;l<e+1;l++)this.showTabs?((a=this.dom.createElement(\"span\")).className=\"ace_invisible ace_invisible_tab\",a.textContent=s.stringRepeat(this.TAB_CHAR,l),c.push(a)):c.push(this.dom.createTextNode(s.stringRepeat(\" \",l),this.element));this.displayIndentGuides&&(this.$indentGuideRe=/\\s\\S| \\t|\\t |\\s$/,t=\"ace_indent-guide\",n=this.showSpaces?\" ace_invisible ace_invisible_space\":\"\",r=s.stringRepeat(this.showSpaces?this.SPACE_CHAR:\" \",this.tabSize),i=this.showTabs?\" ace_invisible ace_invisible_tab\":\"\",o=this.showTabs?s.stringRepeat(this.TAB_CHAR,this.tabSize):r,(a=this.dom.createElement(\"span\")).className=t+n,a.textContent=r,this.$tabStrings[\" \"]=a,(a=this.dom.createElement(\"span\")).className=t+i,a.textContent=o,this.$tabStrings[\"\\t\"]=a)},this.updateLines=function(e,t,n){if(this.config.lastRow!=e.lastRow||this.config.firstRow!=e.firstRow)return this.update(e);this.config=e;for(var r=Math.max(t,e.firstRow),i=Math.min(n,e.lastRow),s=this.element.childNodes,o=0,a=e.firstRow;a<r;a++){if(c=this.session.getFoldLine(a)){if(c.containsRow(r)){r=c.start.row;break}a=c.end.row}o++}for(var c,l=!1,h=(c=this.session.getNextFoldLine(a=r))?c.start.row:1/0;h<a&&(h=(c=this.session.getNextFoldLine(a=c.end.row+1,c))?c.start.row:1/0),!(i<a);){var d,u=s[o++];u&&(this.dom.removeChildren(u),this.$renderLine(u,a,a==h&&c),l&&(u.style.top=this.$lines.computeLineTop(a,e,this.session)+\"px\"),d=e.lineHeight*this.session.getRowLength(a)+\"px\",u.style.height!=d&&(l=!0,u.style.height=d)),a++}if(l)for(;o<this.$lines.cells.length;){var f=this.$lines.cells[o++];f.element.style.top=this.$lines.computeLineTop(f.row,e,this.session)+\"px\"}},this.scrollLines=function(e){var t=this.config;if(this.config=e,this.$lines.pageChanged(t,e))return this.update(e);this.$lines.moveContainer(e);var n=e.lastRow;if(!t||(t?t.lastRow:-1)<e.firstRow)return this.update(e);if(n<t.firstRow)return this.update(e);if(!t||t.lastRow<e.firstRow)return this.update(e);if(e.lastRow<t.firstRow)return this.update(e);if(t.firstRow<e.firstRow)for(var r=this.session.getFoldedRowCount(t.firstRow,e.firstRow-1);0<r;r--)this.$lines.shift();if(t.lastRow>e.lastRow)for(r=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);0<r;r--)this.$lines.pop();e.firstRow<t.firstRow&&this.$lines.unshift(this.$renderLinesFragment(e,e.firstRow,t.firstRow-1)),e.lastRow>t.lastRow&&this.$lines.push(this.$renderLinesFragment(e,t.lastRow+1,e.lastRow))},this.$renderLinesFragment=function(e,t,n){for(var r=[],s=t,o=this.session.getNextFoldLine(s),a=o?o.start.row:1/0;a<s&&(a=(o=this.session.getNextFoldLine(s=o.end.row+1,o))?o.start.row:1/0),!(n<s);){var c=this.$lines.createCell(s,e,this.session),l=c.element;this.dom.removeChildren(l),i.setStyle(l.style,\"height\",this.$lines.computeLineHeight(s,e,this.session)+\"px\"),i.setStyle(l.style,\"top\",this.$lines.computeLineTop(s,e,this.session)+\"px\"),this.$renderLine(l,s,s==a&&o),l.className=this.$useLineGroups()?\"ace_line_group\":\"ace_line\",r.push(c),s++}return r},this.update=function(e){this.$lines.moveContainer(e);for(var t=(this.config=e).firstRow,n=e.lastRow,r=this.$lines;r.getLength();)r.pop();r.push(this.$renderLinesFragment(e,t,n))},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,n,r){for(var i,o=this,a=/(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g,c=this.dom.createFragment(this.element),l=0;d=a.exec(r);){var h,d,u,f=d[1],g=d[2],p=d[3],m=d[4],C=d[5];!o.showSpaces&&g||(h=l!=d.index?r.slice(l,d.index):\"\",l=d.index+d[0].length,h&&c.appendChild(this.dom.createTextNode(h,this.element)),f?(d=o.session.getScreenTabSize(t+d.index),c.appendChild(o.$tabStrings[d].cloneNode(!0)),t+=d-1):g?o.showSpaces?((u=this.dom.createElement(\"span\")).className=\"ace_invisible ace_invisible_space\",u.textContent=s.stringRepeat(o.SPACE_CHAR,g.length),c.appendChild(u)):c.appendChild(this.com.createTextNode(g,this.element)):p?((u=this.dom.createElement(\"span\")).className=\"ace_invisible ace_invisible_space ace_invalid\",u.textContent=s.stringRepeat(o.SPACE_CHAR,p.length),c.appendChild(u)):m?(t+=1,(u=this.dom.createElement(\"span\")).style.width=2*o.config.characterWidth+\"px\",u.className=o.showSpaces?\"ace_cjk ace_invisible ace_invisible_space\":\"ace_cjk\",u.textContent=o.showSpaces?o.SPACE_CHAR:m,c.appendChild(u)):C&&(t+=1,(u=this.dom.createElement(\"span\")).style.width=2*o.config.characterWidth+\"px\",u.className=\"ace_cjk\",u.textContent=C,c.appendChild(u)))}return c.appendChild(this.dom.createTextNode(l?r.slice(l):r,this.element)),this.$textToken[n.type]?e.appendChild(c):(i=\"ace_\"+n.type.replace(/\\./g,\" ace_\"),u=this.dom.createElement(\"span\"),\"fold\"==n.type&&(u.style.width=n.value.length*this.config.characterWidth+\"px\"),u.className=i,u.appendChild(c),e.appendChild(u)),t+r.length},this.renderIndentGuide=function(e,t,n){var r=t.search(this.$indentGuideRe);if(r<=0||n<=r)return t;if(\" \"==t[0]){for(var i=(r-=r%this.tabSize)/this.tabSize,s=0;s<i;s++)e.appendChild(this.$tabStrings[\" \"].cloneNode(!0));return t.substr(r)}if(\"\\t\"!=t[0])return t;for(s=0;s<r;s++)e.appendChild(this.$tabStrings[\"\\t\"].cloneNode(!0));return t.substr(r)},this.$createLineElement=function(e){var t=this.dom.createElement(\"div\");return t.className=\"ace_line\",t.style.height=this.config.lineHeight+\"px\",t},this.$renderWrappedLine=function(e,t,n){var r=0,i=0,o=n[0],a=0,c=this.$createLineElement();e.appendChild(c);for(var l=0;l<t.length;l++){var h=t[l],d=h.value;if(0==l&&this.displayIndentGuides){if(r=d.length,!(d=this.renderIndentGuide(c,d,o)))continue;r-=d.length}if(r+d.length<o)a=this.$renderToken(c,a,h,d),r+=d.length;else{for(;r+d.length>=o;)a=this.$renderToken(c,a,h,d.substring(0,o-r)),d=d.substring(o-r),r=o,c=this.$createLineElement(),e.appendChild(c),c.appendChild(this.dom.createTextNode(s.stringRepeat(\"\\xa0\",n.indent),this.element)),a=0,o=n[++i]||Number.MAX_VALUE;0!=d.length&&(r+=d.length,a=this.$renderToken(c,a,h,d))}}n[n.length-1]>this.MAX_LINE_LENGTH&&this.$renderOverflowMessage(c,a,null,\"\",!0)},this.$renderSimpleLine=function(e,t){var n=0,r=t[0],i=r.value;this.displayIndentGuides&&(i=this.renderIndentGuide(e,i)),i&&(n=this.$renderToken(e,n,r,i));for(var s=1;s<t.length;s++){if(n+(i=(r=t[s]).value).length>this.MAX_LINE_LENGTH)return this.$renderOverflowMessage(e,n,r,i);n=this.$renderToken(e,n,r,i)}},this.$renderOverflowMessage=function(e,t,n,r,i){n&&this.$renderToken(e,t,n,r.slice(0,this.MAX_LINE_LENGTH-t)),(t=this.dom.createElement(\"span\")).className=\"ace_inline_button ace_keyword ace_toggle_wrap\",t.textContent=i?\"<hide>\":\"<click to see more...>\",e.appendChild(t)},this.$renderLine=function(e,t,n){var r;n||0==n||(n=this.session.getFoldLine(t));var i,s=e;(r=n?this.$getFoldLineTokens(t,n):this.session.getTokens(t)).length?(i=this.session.getRowSplitData(t))&&i.length?(this.$renderWrappedLine(e,r,i),s=e.lastChild):(s=e,this.$useLineGroups()&&(s=this.$createLineElement(),e.appendChild(s)),this.$renderSimpleLine(s,r)):this.$useLineGroups()&&(s=this.$createLineElement(),e.appendChild(s)),this.showEOL&&s&&(n&&(t=n.end.row),(n=this.dom.createElement(\"span\")).className=\"ace_invisible ace_invisible_eol\",n.textContent=t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,s.appendChild(n))},this.$getFoldLineTokens=function(e,t){var n=this.session,r=[],i=n.getTokens(e);return t.walk((function(e,t,s,o,a){null!=e?r.push({type:\"fold\",value:e}):(a&&(i=n.getTokens(t)),i.length&&function(e,t,n){for(var i,s=0,o=0;o+e[s].value.length<t;)if(o+=e[s].value.length,++s==e.length)return;for(o!=t&&((i=e[s].value.substring(t-o)).length>n-t&&(i=i.substring(0,n-t)),r.push({type:e[s].type,value:i}),o=t+i.length,s+=1);o<n&&s<e.length;)(i=e[s].value).length+o>n?r.push({type:e[s].type,value:i.substring(0,n-o)}):r.push(e[s]),o+=i.length,s+=1}(i,o,s))}),t.end.row,this.session.getLine(t.end.row).length),r},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){}}).call((e=function(e){this.dom=i,this.element=this.dom.createElement(\"div\"),this.element.className=\"ace_layer ace_text-layer\",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this),this.$lines=new o(this.element)}).prototype),t.Text=e})),ace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/dom\");(function(){this.$updateOpacity=function(e){for(var t=this.cursors,n=t.length;n--;)r.setStyle(t[n].style,\"opacity\",e?\"\":\"0\")},this.$startCssAnimation=function(){for(var e=this.cursors,t=e.length;t--;)e[t].style.animationDuration=this.blinkInterval+\"ms\";setTimeout((function(){r.addCssClass(this.element,\"ace_animate-blinking\")}).bind(this))},this.$stopCssAnimation=function(){r.removeCssClass(this.element,\"ace_animate-blinking\")},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e!=this.smoothBlinking&&(this.smoothBlinking=e,r.setCssClass(this.element,\"ace_smooth-blinking\",e),this.$updateCursors(!0),this.restartTimer())},this.addCursor=function(){var e=r.createElement(\"div\");return e.className=\"ace_cursor\",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(1<this.cursors.length){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,r.addCssClass(this.element,\"ace_hidden-cursors\"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,r.removeCssClass(this.element,\"ace_hidden-cursors\"),this.restartTimer()},this.restartTimer=function(){var e,t=this.$updateCursors;clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.$stopCssAnimation(),this.smoothBlinking&&r.removeCssClass(this.element,\"ace_smooth-blinking\"),t(!0),this.isBlinking&&this.blinkInterval&&this.isVisible?(this.smoothBlinking&&setTimeout((function(){r.addCssClass(this.element,\"ace_smooth-blinking\")}).bind(this)),r.HAS_CSS_ANIMATION?this.$startCssAnimation():(e=(function(){this.timeoutId=setTimeout((function(){t(!1)}),.6*this.blinkInterval)}).bind(this),this.intervalId=setInterval((function(){t(!0),e()}),this.blinkInterval),e())):this.$stopCssAnimation()},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e=e||this.session.selection.getCursor();var n=this.session.documentToScreenPosition(e);return{left:this.$padding+(this.session.$bidiHandler.isBidiRow(n.row,e.row)?this.session.$bidiHandler.getPosLeft(n.column):n.column*this.config.characterWidth),top:(n.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight}},this.isCursorInView=function(e,t){return 0<=e.top&&e.top<t.maxHeight},this.update=function(e){this.config=e;var t=this.session.$selectionMarkers,n=0,i=0;void 0!==t&&0!==t.length||(t=[{cursor:null}]),n=0;for(var s=t.length;n<s;n++){var o,a,c=this.getPixelPosition(t[n].cursor,!0);(c.top>e.height+e.offset||c.top<0)&&1<n||(a=(o=this.cursors[i++]||this.addCursor()).style,this.drawCursor?this.drawCursor(o,c,e,t[n],this.session):this.isCursorInView(c,e)?(r.setStyle(a,\"display\",\"block\"),r.translate(o,c.left,c.top),r.setStyle(a,\"width\",Math.round(e.characterWidth)+\"px\"),r.setStyle(a,\"height\",e.lineHeight+\"px\")):r.setStyle(a,\"display\",\"none\"))}for(;this.cursors.length>i;)this.removeCursor();var l=this.session.getOverwrite();this.$setOverwrite(l),this.$pixelPos=c,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&((this.overwrite=e)?r.addCssClass(this.element,\"ace_overwrite-cursors\"):r.removeCssClass(this.element,\"ace_overwrite-cursors\"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call((e=function(e){this.element=r.createElement(\"div\"),this.element.className=\"ace_layer ace_cursor-layer\",e.appendChild(this.element),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),r.addCssClass(this.element,\"ace_hidden-cursors\"),this.$updateCursors=this.$updateOpacity.bind(this)}).prototype),t.Cursor=e})),ace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"],(function(e,t,n){\"use strict\";function r(e){this.element=s.createElement(\"div\"),this.element.className=\"ace_scrollbar ace_scrollbar\"+this.classSuffix,this.inner=s.createElement(\"div\"),this.inner.className=\"ace_scrollbar-inner\",this.inner.textContent=\"\\xa0\",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,o.addListener(this.element,\"scroll\",this.onScroll.bind(this)),o.addListener(this.element,\"mousedown\",o.preventDefault)}var i=e(\"./lib/oop\"),s=e(\"./lib/dom\"),o=e(\"./lib/event\"),a=e(\"./lib/event_emitter\").EventEmitter;function c(e,t){r.call(this,e),this.scrollTop=0,this.scrollHeight=0,t.$scrollbarWidth=this.width=s.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+\"px\",this.$minWidth=0}(function(){i.implement(this,a),this.setVisible=function(e){this.element.style.display=e?\"\":\"none\",this.isVisible=e,this.coeff=1}}).call(r.prototype),i.inherits(c,r),(function(){this.classSuffix=\"-v\",this.onScroll=function(){var e;this.skipEvent||(this.scrollTop=this.element.scrollTop,1!=this.coeff&&(this.scrollTop=this.scrollTop*(1-(e=this.element.clientHeight/this.scrollHeight))/(this.coeff-e)),this._emit(\"scroll\",{data:this.scrollTop})),this.skipEvent=!1},this.getWidth=function(){return Math.max(this.isVisible?this.width:0,this.$minWidth||0)},this.setHeight=function(e){this.element.style.height=e+\"px\"},this.setInnerHeight=this.setScrollHeight=function(e){32768<(this.scrollHeight=e)?(this.coeff=32768/e,e=32768):1!=this.coeff&&(this.coeff=1),this.inner.style.height=e+\"px\"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=e,this.element.scrollTop=e*this.coeff)}}).call(c.prototype),i.inherits(e=function(e,t){r.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+\"px\"},r),(function(){this.classSuffix=\"-h\",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit(\"scroll\",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+\"px\"},this.setInnerWidth=function(e){this.inner.style.width=e+\"px\"},this.setScrollWidth=function(e){this.inner.style.width=e+\"px\"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}).call(e.prototype),t.ScrollBar=c,t.ScrollBarV=c,t.ScrollBarH=e,t.VScrollBar=c,t.HScrollBar=e})),ace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"],(function(e,t,n){\"use strict\";var r=e(\"./lib/event\");(function(){this.schedule=function(e){this.changes=this.changes|e,this.changes&&!this.pending&&(r.nextFrame(this._flush),this.pending=!0)},this.clear=function(e){var t=this.changes;return this.changes=0,t}}).call((e=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.$recursionLimit=2,this.window=t||window;var n=this;this._flush=function(e){n.pending=!1;var t=n.changes;t&&(r.blockIdle(100),n.changes=0,n.onRender(t)),n.changes?n.$recursionLimit--<0||n.schedule():n.$recursionLimit=2}}).prototype),t.RenderLoop=e})),ace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"],(function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/dom\"),s=e(\"../lib/lang\"),o=e(\"../lib/event\"),a=e(\"../lib/useragent\"),c=e(\"../lib/event_emitter\").EventEmitter,l=\"function\"==typeof ResizeObserver;t=t.FontMetrics=function(e){this.el=i.createElement(\"div\"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=i.createElement(\"div\"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=i.createElement(\"div\"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),this.$measureNode.textContent=s.stringRepeat(\"X\",256),this.$characterSize={width:0,height:0},l?this.$addObserver():this.checkForSizeChanges()},(function(){r.implement(this,c),this.$characterSize={width:0,height:0},this.$setMeasureNodeStyles=function(e,t){e.width=e.height=\"auto\",e.left=e.top=\"0px\",e.visibility=\"hidden\",e.position=\"absolute\",e.whiteSpace=\"pre\",a.isIE<8?e[\"font-family\"]=\"inherit\":e.font=\"inherit\",e.overflow=t?\"hidden\":\"visible\"},this.checkForSizeChanges=function(e){var t;void 0===e&&(e=this.$measureSizes()),!e||this.$characterSize.width===e.width&&this.$characterSize.height===e.height||(this.$measureNode.style.fontWeight=\"bold\",t=this.$measureSizes(),this.$measureNode.style.fontWeight=\"\",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit(\"changeCharacterSize\",{data:e}))},this.$addObserver=function(){var e=this;this.$observer=new window.ResizeObserver((function(t){e.checkForSizeChanges()})),this.$observer.observe(this.$measureNode)},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer||this.$observer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=o.onIdle((function t(){e.checkForSizeChanges(),o.onIdle(t,500)}),500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(e){return 0===(e={height:(e||this.$measureNode).clientHeight,width:(e||this.$measureNode).clientWidth/256}).width||0===e.height?null:e},this.$measureCharWidth=function(e){return this.$main.textContent=s.stringRepeat(e,256),this.$main.getBoundingClientRect().width/256},this.getCharacterWidth=function(e){var t=this.charSizes[e];return void 0===t&&(t=this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$observer&&this.$observer.disconnect(),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)},this.$getZoom=function e(t){return t&&t.parentElement?(window.getComputedStyle(t).zoom||1)*e(t.parentElement):1},this.$initTransformMeasureNodes=function(){function e(e,t){return[\"div\",{style:\"position: absolute;top:\"+e+\"px;left:\"+t+\"px;\"}]}this.els=i.buildDom([e(0,0),e(200,0),e(0,200),e(200,200)],this.el)},this.transformCoordinates=function(e,t){function n(e,t,n){var r=e[1]*t[0]-e[0]*t[1];return[(-t[1]*n[0]+t[0]*n[1])/r,(+e[1]*n[0]-e[0]*n[1])/r]}function r(e,t){return[e[0]-t[0],e[1]-t[1]]}function i(e,t){return[e[0]+t[0],e[1]+t[1]]}function s(e,t){return[e*t[0],e*t[1]]}function o(e){return[(e=e.getBoundingClientRect()).left,e.top]}e=e&&s(1/this.$getZoom(this.el),e),this.els||this.$initTransformMeasureNodes();var a=o(this.els[0]),c=o(this.els[1]),l=o(this.els[2]),h=n(r(d=o(this.els[3]),c),r(d,l),r(i(c,l),i(d,a))),d=s(1+h[0],r(c,a));return c=s(1+h[1],r(l,a)),t?(l=h[0]*t[0]/200+h[1]*t[1]/200+1,t=i(s(t[0],d),s(t[1],c)),i(s(1/l/200,t),a)):(a=r(e,a),a=n(r(d,s(h[0],a)),r(c,s(h[1],a)),a),s(200,a))}}).call(t.prototype)})),ace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/lib/useragent\"],(function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/dom\"),s=e(\"./config\"),o=e(\"./layer/gutter\").Gutter,a=e(\"./layer/marker\").Marker,c=e(\"./layer/text\").Text,l=e(\"./layer/cursor\").Cursor,h=e(\"./scrollbar\").HScrollBar,d=e(\"./scrollbar\").VScrollBar,u=e(\"./renderloop\").RenderLoop,f=e(\"./layer/font_metrics\").FontMetrics,g=e(\"./lib/event_emitter\").EventEmitter,p='.ace_br1 {border-top-left-radius    : 3px;}.ace_br2 {border-top-right-radius   : 3px;}.ace_br3 {border-top-left-radius    : 3px; border-top-right-radius:    3px;}.ace_br4 {border-bottom-right-radius: 3px;}.ace_br5 {border-top-left-radius    : 3px; border-bottom-right-radius: 3px;}.ace_br6 {border-top-right-radius   : 3px; border-bottom-right-radius: 3px;}.ace_br7 {border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px;}.ace_br8 {border-bottom-left-radius : 3px;}.ace_br9 {border-top-left-radius    : 3px; border-bottom-left-radius:  3px;}.ace_br10{border-top-right-radius   : 3px; border-bottom-left-radius:  3px;}.ace_br11{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-left-radius:  3px;}.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}.ace_br13{border-top-left-radius    : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}.ace_br14{border-top-right-radius   : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}.ace_br15{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_editor {position: relative;overflow: hidden;padding: 0;font: 12px/normal \\'Monaco\\', \\'Menlo\\', \\'Ubuntu Mono\\', \\'Consolas\\', \\'source-code-pro\\', monospace;direction: ltr;text-align: left;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;box-sizing: border-box;min-width: 100%;contain: style size layout;font-variant-ligatures: no-common-ligatures;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \\'\\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;contain: style size layout;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {position: absolute;top: 0;left: 0;right: 0;padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\");}.ace_scrollbar {contain: strict;position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;contain: strict;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;white-space: pre!important;}.ace_text-input.ace_composition {background: transparent;color: inherit;z-index: 1000;opacity: 1;}.ace_composition_placeholder { color: transparent }.ace_composition_marker { border-bottom: 1px solid;position: absolute;border-radius: 0;margin-top: 1px;}[ace_nocontext=true] {transform: none!important;filter: none!important;clip-path: none!important;mask : none!important;contain: none!important;perspective: none!important;mix-blend-mode: initial!important;z-index: auto;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;word-wrap: normal;white-space: pre;height: 100%;width: 100%;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;height: 1000000px;contain: style size layout;}.ace_text-layer {font: inherit !important;position: absolute;height: 1000000px;width: 1000000px;contain: style size layout;}.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {contain: style size layout;position: absolute;top: 0;left: 0;right: 0;}.ace_hidpi .ace_text-layer,.ace_hidpi .ace_gutter-layer,.ace_hidpi .ace_content,.ace_hidpi .ace_gutter {contain: strict;will-change: transform;}.ace_hidpi .ace_text-layer > .ace_line, .ace_hidpi .ace_text-layer > .ace_line_group {contain: strict;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;box-sizing: border-box;border-left: 2px solid;transform: translatez(0);}.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {opacity: 0;}.ace_smooth-blinking .ace_cursor {transition: opacity 0.18s;}.ace_animate-blinking .ace_cursor {animation-duration: 1000ms;animation-timing-function: step-end;animation-name: blink-ace-animate;animation-iteration-count: infinite;}.ace_animate-blinking.ace_smooth-blinking .ace_cursor {animation-duration: 1000ms;animation-timing-function: ease-in-out;animation-name: blink-ace-animate-smooth;}@keyframes blink-ace-animate {from, to { opacity: 1; }60% { opacity: 0; }}@keyframes blink-ace-animate-smooth {from, to { opacity: 1; }45% { opacity: 1; }60% { opacity: 0; }85% { opacity: 0; }}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_error_bracket {position: absolute;border-bottom: 1px solid #DE5555;border-radius: 0;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;box-sizing: border-box;}.ace_line .ace_fold {box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\");}.ace_tooltip {background-color: #FFF;background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block;   }.ace_fold-widget.ace_end {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\");}.ace_fold-widget.ace_closed {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");}.ace_dark .ace_fold-widget.ace_end {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");}.ace_dark .ace_fold-widget.ace_closed {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_inline_button {border: 1px solid lightgray;display: inline-block;margin: -1px 8px;padding: 0 5px;pointer-events: auto;cursor: pointer;}.ace_inline_button:hover {border-color: gray;background: rgba(200,200,200,0.2);display: inline-block;pointer-events: auto;}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}.ace_mobile-menu {position: absolute;line-height: 1.5;border-radius: 4px;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;background: white;box-shadow: 1px 3px 2px grey;border: 1px solid #dcdcdc;color: black;}.ace_dark > .ace_mobile-menu {background: #333;color: #ccc;box-shadow: 1px 3px 2px grey;border: 1px solid #444;}.ace_mobile-button {padding: 2px;cursor: pointer;overflow: hidden;}.ace_mobile-button:hover {background-color: #eee;opacity:1;}.ace_mobile-button:active {background-color: #ddd;}.ace_placeholder {font-family: arial;transform: scale(0.9);transform-origin: left;white-space: pre;opacity: 0.7;margin: 0 10px;}',m=e(\"./lib/useragent\"),C=m.isIE;i.importCssString(p,\"ace_editor.css\"),(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,r.implement(this,g),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle(\"ace_nobold\",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin(),i.setStyle(this.scroller.style,\"line-height\",this.lineHeight+\"px\")},this.setSession=function(e){this.session&&this.session.doc.off(\"changeNewLineMode\",this.onChangeNewLineMode),(this.session=e)&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e),e&&(this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.scrollBarH.scrollLeft=this.scrollBarV.scrollTop=null,this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on(\"changeNewLineMode\",this.onChangeNewLineMode))},this.updateLines=function(e,t,n){if(void 0===t&&(t=1/0),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRow<t&&(this.$changedLines.lastRow=t)):this.$changedLines={firstRow:e,lastRow:t},this.$changedLines.lastRow<this.layerConfig.firstRow){if(!n)return;this.$changedLines.lastRow=this.layerConfig.lastRow}this.$changedLines.firstRow>this.layerConfig.lastRow||this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar(),this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR)},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,n,r){if(!(2<this.resizing)){0<this.resizing?this.resizing++:this.resizing=e?1:0;var i=this.container;if(t=this.$updateCachedSize(e,t,n=n||i.clientWidth||i.scrollWidth,r=r||i.clientHeight||i.scrollHeight),!this.$size.scrollerHeight||!n&&!r)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(t|this.$changes,!0):this.$loop.schedule(t|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null}},this.$updateCachedSize=function(e,t,n,r){var s=0,o=this.$size,a={width:o.width,height:o.height,scrollerHeight:o.scrollerHeight,scrollerWidth:o.scrollerWidth};return(r-=this.$extraHeight||0)&&(e||o.height!=r)&&(o.height=r,s|=this.CHANGE_SIZE,o.scrollerHeight=o.height,this.$horizScroll&&(o.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+\"px\",s|=this.CHANGE_SCROLL),n&&(e||o.width!=n)&&(s|=this.CHANGE_SIZE,o.width=n,null==t&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,i.setStyle(this.scrollBarH.element.style,\"left\",t+\"px\"),i.setStyle(this.scroller.style,\"left\",t+this.margin.left+\"px\"),o.scrollerWidth=Math.max(0,n-t-this.scrollBarV.getWidth()-this.margin.h),i.setStyle(this.$gutter.style,\"left\",this.margin.left+\"px\"),t=this.scrollBarV.getWidth()+\"px\",i.setStyle(this.scrollBarH.element.style,\"right\",t),i.setStyle(this.scroller.style,\"right\",t),i.setStyle(this.scroller.style,\"bottom\",this.scrollBarH.getHeight()),(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)&&(s|=this.CHANGE_FULL)),o.$dirty=!n||!r,s&&this._signal(\"resize\",a),s},this.onGutterResize=function(e){(e=this.$showGutter?e:0)!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,e,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()||this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):this.$computeLayerConfig()},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-2*this.$padding;return e=Math.floor(e/this.characterWidth),this.session.adjustWrapLimit(e,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption(\"animatedScroll\",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption(\"showInvisibles\",e),this.session.$bidiHandler.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.getOption(\"showInvisibles\")},this.getDisplayIndentGuides=function(){return this.getOption(\"displayIndentGuides\")},this.setDisplayIndentGuides=function(e){this.setOption(\"displayIndentGuides\",e)},this.setShowPrintMargin=function(e){this.setOption(\"showPrintMargin\",e)},this.getShowPrintMargin=function(){return this.getOption(\"showPrintMargin\")},this.setPrintMarginColumn=function(e){this.setOption(\"printMarginColumn\",e)},this.getPrintMarginColumn=function(){return this.getOption(\"printMarginColumn\")},this.getShowGutter=function(){return this.getOption(\"showGutter\")},this.setShowGutter=function(e){return this.setOption(\"showGutter\",e)},this.getFadeFoldWidgets=function(){return this.getOption(\"fadeFoldWidgets\")},this.setFadeFoldWidgets=function(e){this.setOption(\"fadeFoldWidgets\",e)},this.setHighlightGutterLine=function(e){this.setOption(\"highlightGutterLine\",e)},this.getHighlightGutterLine=function(){return this.getOption(\"highlightGutterLine\")},this.$updatePrintMargin=function(){var e;(this.$showPrintMargin||this.$printMarginEl)&&(this.$printMarginEl||((e=i.createElement(\"div\")).className=\"ace_layer ace_print-margin-layer\",this.$printMarginEl=i.createElement(\"div\"),this.$printMarginEl.className=\"ace_print-margin\",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)),(e=this.$printMarginEl.style).left=Math.round(this.characterWidth*this.$printMarginColumn+this.$padding)+\"px\",e.visibility=this.$showPrintMargin?\"visible\":\"hidden\",this.session&&-1==this.session.$wrap&&this.adjustWrapLimit())},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){var e,t,n,r,s,o,a;this.$isMousePressed||(e=this.textarea.style,o=this.$composition,this.$keepTextAreaAtCursor||o?(a=this.$cursorLayer.$pixelPos)&&(o&&o.markerRange&&(a=this.$cursorLayer.getPixelPosition(o.markerRange.start,!0)),t=a.top,n=a.left,r=o&&o.useTextareaForIME?this.lineHeight:C?0:1,(t-=(s=this.layerConfig).offset)<0||t>s.height-r?i.translate(this.textarea,0,0):(a=1,s=this.$size.height-r,o?o.useTextareaForIME?a=this.characterWidth*this.session.$getStringScreenWidth(o=this.textarea.value)[0]:t+=this.lineHeight+2:t+=this.lineHeight,(n-=this.scrollLeft)>this.$size.scrollerWidth-a&&(n=this.$size.scrollerWidth-a),n+=this.gutterWidth+this.margin.left,i.setStyle(e,\"height\",r+\"px\"),i.setStyle(e,\"width\",a+\"px\"),i.translate(this.textarea,Math.min(n,this.$size.scrollerWidth-a),Math.min(t,s)))):i.translate(this.textarea,-100,0))},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(0===this.layerConfig.offset?0:1)},this.getLastFullyVisibleRow=function(){var e=this.layerConfig,t=e.lastRow;return this.session.documentToScreenRow(t,0)*e.lineHeight-this.session.getScrollTop()>e.height-e.lineHeight?t-1:t},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,n,r){var i=this.scrollMargin;i.top=0|e,i.bottom=0|t,i.right=0|r,i.left=0|n,i.v=i.top+i.bottom,i.h=i.left+i.right,i.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-i.top),this.updateFull()},this.setMargin=function(e,t,n,r){var i=this.margin;i.top=0|e,i.bottom=0|t,i.right=0|r,i.left=0|n,i.v=i.top+i.bottom,i.h=i.left+i.right,this.$updateCachedSize(!0,this.gutterWidth,this.$size.width,this.$size.height),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption(\"hScrollBarAlwaysVisible\",e)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption(\"vScrollBarAlwaysVisible\",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&this.scrollTop>(e-=(t-this.lineHeight)*this.$scrollPastEnd)-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){if(this.$changes&&(e|=this.$changes,this.$changes=0),this.session&&this.container.offsetWidth&&!this.$frozen&&(e||t)){if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal(\"beforeRender\",e),this.session&&this.session.$bidiHandler&&this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);var n,r=this.layerConfig;return(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL)&&(e|=this.$computeLayerConfig()|this.$loop.clear(),r.firstRow==this.layerConfig.firstRow||r.firstRowScreen!=this.layerConfig.firstRowScreen||0<(n=this.scrollTop+(r.firstRow-this.layerConfig.firstRow)*this.lineHeight)&&(this.scrollTop=n,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig()|this.$loop.clear()),r=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),i.translate(this.content,-this.scrollLeft,-r.offset),n=r.minHeight+\"px\",i.setStyle(this.content.style,\"width\",t=r.width+2*this.$padding+\"px\"),i.setStyle(this.content.style,\"height\",n)),e&this.CHANGE_H_SCROLL&&(i.translate(this.content,-this.scrollLeft,-r.offset),this.scroller.className=this.scrollLeft<=0?\"ace_scroller\":\"ace_scroller ace_scroll-left\"),e&this.CHANGE_FULL?(this.$changedLines=null,this.$textLayer.update(r),this.$showGutter&&this.$gutterLayer.update(r),this.$markerBack.update(r),this.$markerFront.update(r),this.$cursorLayer.update(r),this.$moveTextAreaToCursor(),void this._signal(\"afterRender\",e)):(e&this.CHANGE_SCROLL?(this.$changedLines=null,e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(r):this.$textLayer.scrollLines(r),this.$showGutter&&(e&this.CHANGE_GUTTER||e&this.CHANGE_LINES?this.$gutterLayer.update(r):this.$gutterLayer.scrollLines(r)),this.$markerBack.update(r),this.$markerFront.update(r),this.$cursorLayer.update(r),this.$moveTextAreaToCursor()):(e&this.CHANGE_TEXT?(this.$changedLines=null,this.$textLayer.update(r),this.$showGutter&&this.$gutterLayer.update(r)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(r):e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER?this.$showGutter&&this.$gutterLayer.update(r):e&this.CHANGE_CURSOR&&this.$highlightGutterLine&&this.$gutterLayer.updateLineHighlight(r),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(r),this.$moveTextAreaToCursor()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(r),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(r)),void this._signal(\"afterRender\",e))}this.$changes|=e},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,n=Math.min(t,Math.max((this.$minLines||1)*this.lineHeight,e))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(n+=this.scrollBarH.getHeight()),this.$maxPixelHeight&&n>this.$maxPixelHeight&&(n=this.$maxPixelHeight),e=!(n<=2*this.lineHeight)&&t<e,n==this.desiredHeight&&this.$size.height==this.desiredHeight&&e==this.$vScroll||(e!=this.$vScroll&&(this.$vScroll=e,this.scrollBarV.setVisible(e)),e=this.container.clientWidth,this.container.style.height=n+\"px\",this.$updateCachedSize(!0,this.$gutterWidth,e,n),this.desiredHeight=n,this._signal(\"autosize\"))},this.$computeLayerConfig=function(){var e=this.session,t=this.$size,n=t.height<=2*this.lineHeight,r=this.session.getScreenLength()*this.lineHeight,i=this.$getLongestLine(),s=this.$horizScroll!==(d=!n&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-i-2*this.$padding<0));s&&(this.$horizScroll=d,this.scrollBarH.setVisible(d));var o=this.$vScroll;this.$maxLines&&1<this.lineHeight&&this.$autosize();var a=t.scrollerHeight+this.lineHeight;r+=u=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;var c=this.scrollMargin;this.session.setScrollTop(Math.max(-c.top,Math.min(this.scrollTop,r-t.scrollerHeight+c.bottom))),this.session.setScrollLeft(Math.max(-c.left,Math.min(this.scrollLeft,i+2*this.$padding-t.scrollerWidth+c.right)));var l=o!==(h=!n&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-r+u<0||this.scrollTop>c.top));l&&(this.$vScroll=h,this.scrollBarV.setVisible(h));var h,d=this.scrollTop%this.lineHeight,u=(n=Math.ceil(a/this.lineHeight)-1,c=(u=Math.max(0,Math.round((this.scrollTop-d)/this.lineHeight)))+n,o=this.lineHeight,e.screenToDocumentRow(u,0));return(h=e.getFoldLine(u))&&(u=h.start.row),n=e.documentToScreenRow(u,0),h=e.getRowLength(u)*o,c=Math.min(e.screenToDocumentRow(c,0),e.getLength()-1),a=t.scrollerHeight+e.getRowLength(c)*o+h,d=this.scrollTop-n*o,h=0,this.layerConfig.width==i&&!s||(h=this.CHANGE_H_SCROLL),(s||l)&&(h|=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal(\"scrollbarVisibilityChanged\"),l&&(i=this.$getLongestLine())),this.layerConfig={width:i,padding:this.$padding,firstRow:u,firstRowScreen:n,lastRow:c,lineHeight:o,characterWidth:this.characterWidth,minHeight:a,maxHeight:r,offset:d,gutterOffset:o?Math.max(0,Math.ceil((d+t.height-t.scrollerHeight)/o)):0,height:this.$size.scrollerHeight},this.session.$bidiHandler&&this.session.$bidiHandler.setContentWidth(i-this.$padding),h},this.$updateLines=function(){if(this.$changedLines){var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var n=this.layerConfig;if(!(e>n.lastRow+1||t<n.firstRow))return t===1/0?(this.$showGutter&&this.$gutterLayer.update(n),void this.$textLayer.update(n)):(this.$textLayer.updateLines(n,e,t),!0)}},this.$getLongestLine=function(){var e=this.session.getScreenWidth();return this.showInvisibles&&!this.session.$useWrapMode&&(e+=1),this.$textLayer&&e>this.$textLayer.MAX_LINE_LENGTH&&(e=this.$textLayer.MAX_LINE_LENGTH+30),Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(e*this.characterWidth))},this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},this.addGutterDecoration=function(e,t){this.$gutterLayer.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){this.$gutterLayer.removeGutterDecoration(e,t)},this.updateBreakpoints=function(e){this.$loop.schedule(this.CHANGE_GUTTER)},this.setAnnotations=function(e){this.$gutterLayer.setAnnotations(e),this.$loop.schedule(this.CHANGE_GUTTER)},this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},this.hideCursor=function(){this.$cursorLayer.hideCursor()},this.showCursor=function(){this.$cursorLayer.showCursor()},this.scrollSelectionIntoView=function(e,t,n){this.scrollCursorIntoView(e,n),this.scrollCursorIntoView(t,n)},this.scrollCursorIntoView=function(e,t,n){var r,i,s;0!==this.$size.scrollerHeight&&(r=(s=this.$cursorLayer.getPixelPosition(e)).left,i=s.top,e=n&&n.top||0,s=n&&n.bottom||0,i<(n=this.$scrollAnimation?this.session.getScrollTop():this.scrollTop)+e?(t&&n+e>i+this.lineHeight&&(i-=t*this.$size.scrollerHeight),0===i&&(i=-this.scrollMargin.top),this.session.setScrollTop(i)):n+this.$size.scrollerHeight-s<i+this.lineHeight&&(t&&n+this.$size.scrollerHeight-s<i-this.lineHeight&&(i+=t*this.$size.scrollerHeight),this.session.setScrollTop(i+this.lineHeight+s-this.$size.scrollerHeight)),r<(s=this.scrollLeft)?(r<this.$padding+2*this.layerConfig.characterWidth&&(r=-this.scrollMargin.left),this.session.setScrollLeft(r)):s+this.$size.scrollerWidth<r+this.characterWidth?this.session.setScrollLeft(Math.round(r+this.characterWidth-this.$size.scrollerWidth)):s<=this.$padding&&r-s<this.characterWidth&&this.session.setScrollLeft(0))},this.getScrollTop=function(){return this.session.getScrollTop()},this.getScrollLeft=function(){return this.session.getScrollLeft()},this.getScrollTopRow=function(){return this.scrollTop/this.lineHeight},this.getScrollBottomRow=function(){return Math.max(0,Math.floor((this.scrollTop+this.$size.scrollerHeight)/this.lineHeight)-1)},this.scrollToRow=function(e){this.session.setScrollTop(e*this.lineHeight)},this.alignCursor=function(e,t){\"number\"==typeof e&&(e={row:e,column:0});var n=this.$cursorLayer.getPixelPosition(e);return this.session.setScrollTop(t=n.top-(e=this.$size.scrollerHeight-this.lineHeight)*(t||0)),t},this.STEPS=8,this.$calcSteps=function(e,t){var n,r=0,i=this.STEPS,s=[];for(r=0;r<i;++r)s.push((t-(n=e))*(Math.pow(r/this.STEPS-1,3)+1)+n);return s},this.scrollToLine=function(e,t,n,r){e=this.$cursorLayer.getPixelPosition({row:e,column:0}).top,t&&(e-=this.$size.scrollerHeight/2),t=this.scrollTop,this.session.setScrollTop(e),!1!==n&&this.animateScrolling(t,r)},this.animateScrolling=function(e,t){var n=this.scrollTop;if(this.$animatedScroll){var r=this;if(e!=n){if(this.$scrollAnimation){var i=this.$scrollAnimation.steps;if(i.length&&(e=i[0])==n)return}var s=r.$calcSteps(e,n);this.$scrollAnimation={from:e,to:n,steps:s},clearInterval(this.$timer),r.session.setScrollTop(s.shift()),r.session.$scrollTop=n,this.$timer=setInterval((function(){return r.session?void(s.length?(r.session.setScrollTop(s.shift()),r.session.$scrollTop=n):null!=n?(r.session.$scrollTop=-1,r.session.setScrollTop(n),n=null):(r.$timer=clearInterval(r.$timer),r.$scrollAnimation=null,t&&t())):clearInterval(r.$timer)}),10)}}},this.scrollToY=function(e){this.scrollTop!==e&&(this.$loop.schedule(this.CHANGE_SCROLL),this.scrollTop=e)},this.scrollToX=function(e){this.scrollLeft!==e&&(this.scrollLeft=e),this.$loop.schedule(this.CHANGE_H_SCROLL)},this.scrollTo=function(e,t){this.session.setScrollTop(t),this.session.setScrollLeft(t)},this.scrollBy=function(e,t){t&&this.session.setScrollTop(this.session.getScrollTop()+t),e&&this.session.setScrollLeft(this.session.getScrollLeft()+e)},this.isScrollableBy=function(e,t){return t<0&&this.session.getScrollTop()>=1-this.scrollMargin.top||0<t&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom||e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left||0<e&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right||void 0},this.pixelToScreenCoordinates=function(e,t){this.$hasCssTransforms?(r={top:0,left:0},e=(n=this.$fontMetrics.transformCoordinates([e,t]))[1]-this.gutterWidth-this.margin.left,t=n[0]):r=this.scroller.getBoundingClientRect();var n=e+this.scrollLeft-r.left-this.$padding,r=(e=n/this.characterWidth,t=Math.floor((t+this.scrollTop-r.top)/this.lineHeight),this.$blockCursor?Math.floor(e):Math.round(e));return{row:t,column:r,side:0<e-r?1:-1,offsetX:n}},this.screenToTextCoordinates=function(e,t){this.$hasCssTransforms?(r={top:0,left:0},e=(n=this.$fontMetrics.transformCoordinates([e,t]))[1]-this.gutterWidth-this.margin.left,t=n[0]):r=this.scroller.getBoundingClientRect();var n=e+this.scrollLeft-r.left-this.$padding,r=(e=n/this.characterWidth,e=this.$blockCursor?Math.floor(e):Math.round(e),Math.floor((t+this.scrollTop-r.top)/this.lineHeight));return this.session.screenToDocumentPosition(r,Math.max(e,0),n)},this.textToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect();return t=this.session.documentToScreenPosition(e,t),e=this.$padding+(this.session.$bidiHandler.isBidiRow(t.row,e)?this.session.$bidiHandler.getPosLeft(t.column):Math.round(t.column*this.characterWidth)),{pageX:n.left+e-this.scrollLeft,pageY:n.top+(t=t.row*this.lineHeight)-this.scrollTop}},this.visualizeFocus=function(){i.addCssClass(this.container,\"ace_focus\")},this.visualizeBlur=function(){i.removeCssClass(this.container,\"ace_focus\")},this.showComposition=function(e){(this.$composition=e).cssText||(e.cssText=this.textarea.style.cssText),null==e.useTextareaForIME&&(e.useTextareaForIME=this.$useTextareaForIME),this.$useTextareaForIME?(i.addCssClass(this.textarea,\"ace_composition\"),this.textarea.style.cssText=\"\",this.$moveTextAreaToCursor(),this.$cursorLayer.element.style.display=\"none\"):e.markerId=this.session.addMarker(e.markerRange,\"ace_composition_marker\",\"text\")},this.setCompositionText=function(e){var t=this.session.selection.cursor;this.addToken(e,\"composition_placeholder\",t.row,t.column),this.$moveTextAreaToCursor()},this.hideComposition=function(){var e;this.$composition&&(this.$composition.markerId&&this.session.removeMarker(this.$composition.markerId),i.removeCssClass(this.textarea,\"ace_composition\"),this.textarea.style.cssText=this.$composition.cssText,this.removeExtraToken((e=this.session.selection.cursor).row,e.column),this.$composition=null,this.$cursorLayer.element.style.display=\"\")},this.addToken=function(e,t,n,r){var i=this.session;i.bgTokenizer.lines[n]=null;var s={type:t,value:e},o=i.getTokens(n);if(null==r)o.push(s);else for(var a=0,c=0;c<o.length;c++){var l=o[c];if(r<=(a+=l.value.length)){var h=l.value.slice(0,d=l.value.length-(a-r)),d=l.value.slice(d);o.splice(c,1,{type:l.type,value:h},s,{type:l.type,value:d});break}}this.updateLines(n,n)},this.removeExtraToken=function(e,t){this.updateLines(e,e)},this.setTheme=function(e,t){var n=this;function r(r){if(n.$themeId!=e)return t&&t();if(!r||!r.cssClass)throw new Error(\"couldn't load module \"+e+\" or it didn't call define\");r.$id&&(n.$themeId=r.$id),i.importCssString(r.cssText,r.cssClass,n.container),n.theme&&i.removeCssClass(n.container,n.theme.cssClass);var s=\"padding\"in r?r.padding:\"padding\"in(n.theme||{})?4:n.$padding;n.$padding&&s!=n.$padding&&n.setPadding(s),n.$theme=r.cssClass,n.theme=r,i.addCssClass(n.container,r.cssClass),i.setCssClass(n.container,\"ace_dark\",r.isDark),n.$size&&(n.$size.width=0,n.$updateSizeAsync()),n._dispatchEvent(\"themeLoaded\",{theme:r}),t&&t()}this.$themeId=e,n._dispatchEvent(\"themeChange\",{theme:e}),e&&\"string\"!=typeof e?r(e):s.loadModule([\"theme\",e||this.$options.theme.initialValue],r)},this.getTheme=function(){return this.$themeId},this.setStyle=function(e,t){i.setCssClass(this.container,e,!1!==t)},this.unsetStyle=function(e){i.removeCssClass(this.container,e)},this.setCursorStyle=function(e){i.setStyle(this.scroller.style,\"cursor\",e)},this.setMouseCursor=function(e){i.setStyle(this.scroller.style,\"cursor\",e)},this.attachToShadowRoot=function(){i.importCssString(p,\"ace_editor.css\",this.container)},this.destroy=function(){this.freeze(),this.$fontMetrics.destroy(),this.$cursorLayer.destroy(),this.removeAllListeners(),this.container.textContent=\"\"}}).call((e=function(e,t){var n=this;this.container=e||i.createElement(\"div\"),i.addCssClass(this.container,\"ace_editor\"),i.HI_DPI&&i.addCssClass(this.container,\"ace_hidpi\"),this.setTheme(t),this.$gutter=i.createElement(\"div\"),this.$gutter.className=\"ace_gutter\",this.container.appendChild(this.$gutter),this.$gutter.setAttribute(\"aria-hidden\",!0),this.scroller=i.createElement(\"div\"),this.scroller.className=\"ace_scroller\",this.container.appendChild(this.scroller),this.content=i.createElement(\"div\"),this.content.className=\"ace_content\",this.scroller.appendChild(this.content),this.$gutterLayer=new o(this.$gutter),this.$gutterLayer.on(\"changeGutterWidth\",this.onGutterResize.bind(this)),this.$markerBack=new a(this.content),t=this.$textLayer=new c(this.content),this.canvas=t.element,this.$markerFront=new a(this.content),this.$cursorLayer=new l(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new d(this.container,this),this.scrollBarH=new h(this.container,this),this.scrollBarV.on(\"scroll\",(function(e){n.$scrollAnimation||n.session.setScrollTop(e.data-n.scrollMargin.top)})),this.scrollBarH.on(\"scroll\",(function(e){n.$scrollAnimation||n.session.setScrollLeft(e.data-n.scrollMargin.left)})),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new f(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.on(\"changeCharacterSize\",(function(e){n.updateCharacterSize(),n.onResize(!0,n.gutterWidth,n.$size.width,n.$size.height),n._signal(\"changeCharacterSize\",e)})),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.margin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$keepTextAreaAtCursor=!m.isIOS,this.$loop=new u(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),s.resetOptions(this),s._signal(\"renderer\",this)}).prototype),s.defineOptions(e.prototype,\"renderer\",{animatedScroll:{initialValue:!1},showInvisibles:{set:function(e){this.$textLayer.setShowInvisibles(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!1},showPrintMargin:{set:function(){this.$updatePrintMargin()},initialValue:!0},printMarginColumn:{set:function(){this.$updatePrintMargin()},initialValue:80},printMargin:{set:function(e){\"number\"==typeof e&&(this.$printMarginColumn=e),this.$showPrintMargin=!!e,this.$updatePrintMargin()},get:function(){return this.$showPrintMargin&&this.$printMarginColumn}},showGutter:{set:function(e){this.$gutter.style.display=e?\"block\":\"none\",this.$loop.schedule(this.CHANGE_FULL),this.onGutterResize()},initialValue:!0},fadeFoldWidgets:{set:function(e){i.setCssClass(this.$gutter,\"ace_fade-fold-widgets\",e)},initialValue:!1},showFoldWidgets:{set:function(e){this.$gutterLayer.setShowFoldWidgets(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},displayIndentGuides:{set:function(e){this.$textLayer.setDisplayIndentGuides(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!0},highlightGutterLine:{set:function(e){this.$gutterLayer.setHighlightGutterLine(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},hScrollBarAlwaysVisible:{set:function(e){this.$hScrollBarAlwaysVisible&&this.$horizScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},vScrollBarAlwaysVisible:{set:function(e){this.$vScrollBarAlwaysVisible&&this.$vScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},fontSize:{set:function(e){\"number\"==typeof e&&(e+=\"px\"),this.container.style.fontSize=e,this.updateFontSize()},initialValue:12},fontFamily:{set:function(e){this.container.style.fontFamily=e,this.updateFontSize()}},maxLines:{set:function(e){this.updateFull()}},minLines:{set:function(e){this.$minLines<562949953421311||(this.$minLines=0),this.updateFull()}},maxPixelHeight:{set:function(e){this.updateFull()},initialValue:0},scrollPastEnd:{set:function(e){this.$scrollPastEnd!=(e=+e||0)&&(this.$scrollPastEnd=e,this.$loop.schedule(this.CHANGE_SCROLL))},initialValue:0,handlesSet:!0},fixedWidthGutter:{set:function(e){this.$gutterLayer.$fixedWidth=!!e,this.$loop.schedule(this.CHANGE_GUTTER)}},theme:{set:function(e){this.setTheme(e)},get:function(){return this.$themeId||this.theme},initialValue:\"./theme/textmate\",handlesSet:!0},hasCssTransforms:{},useTextareaForIME:{initialValue:!m.isMobile&&!m.isIE}}),t.VirtualRenderer=e})),ace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/net\"),s=e(\"../lib/event_emitter\").EventEmitter,o=e(\"../config\");function a(e){if(\"undefined\"==typeof Worker)return{postMessage:function(){},terminate:function(){}};if(o.get(\"loadWorkerFromBlob\")){var t=function(t){var n=\"importScripts('\"+i.qualifyURL(t)+\"');\";try{return new Blob([n],{type:\"application/javascript\"})}catch(e){return(t=new(window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder)).append(n),t.getBlob(\"application/javascript\")}}(e);return t=(window.URL||window.webkitURL).createObjectURL(t),new Worker(t)}return new Worker(e)}function c(e){e.postMessage||(e=this.$createWorkerFromOldConfig.apply(this,arguments)),this.$worker=e,this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),this.callbackId=1,this.callbacks={},this.$worker.onmessage=this.onMessage}(function(){r.implement(this,s),this.$createWorkerFromOldConfig=function(t,n,r,i,s){var c,l;return e.nameToUrl&&!e.toUrl&&(e.toUrl=e.nameToUrl),o.get(\"packaged\")||!e.toUrl?i=i||o.moduleUrl(n,\"worker\"):(c=this.$normalizePath,i=i||c(e.toUrl(\"ace/worker/worker.js\",null,\"_\")),l={},t.forEach((function(t){l[t]=c(e.toUrl(t,null,\"_\").replace(/(\\.js)?(\\?.*)?$/,\"\"))}))),this.$worker=a(i),s&&this.send(\"importScripts\",s),this.$worker.postMessage({init:!0,tlns:l,module:n,classname:r}),this.$worker},this.onMessage=function(e){var t=e.data;switch(t.type){case\"event\":this._signal(t.name,{data:t.data});break;case\"call\":var n=this.callbacks[t.id];n&&(n(t.data),delete this.callbacks[t.id]);break;case\"error\":this.reportError(t.data);break;case\"log\":window.console&&console.log&&console.log.apply(console,t.data)}},this.reportError=function(e){window.console&&console.error&&console.error(e)},this.$normalizePath=function(e){return i.qualifyURL(e)},this.terminate=function(){this._signal(\"terminate\",{}),this.deltaQueue=null,this.$worker.terminate(),this.$worker=null,this.$doc&&this.$doc.off(\"change\",this.changeListener),this.$doc=null},this.send=function(e,t){this.$worker.postMessage({command:e,args:t})},this.call=function(e,t,n){var r;n&&(r=this.callbackId++,this.callbacks[r]=n,t.push(r)),this.send(e,t)},this.emit=function(e,t){try{t.data&&t.data.err&&(t.data.err={message:t.data.err.message,stack:t.data.err.stack,code:t.data.err.code}),this.$worker.postMessage({event:e,data:{data:t.data}})}catch(e){console.error(e.stack)}},this.attachToDocument=function(e){this.$doc&&this.terminate(),this.$doc=e,this.call(\"setValue\",[e.getValue()]),e.on(\"change\",this.changeListener)},this.changeListener=function(e){this.deltaQueue||(this.deltaQueue=[],setTimeout(this.$sendDeltaQueue,0)),this.deltaQueue.push(e.start,\"insert\"==e.action?e.lines:e.end)},this.$sendDeltaQueue=function(){var e=this.deltaQueue;e&&(this.deltaQueue=null,50<e.length&&e.length>this.$doc.getLength()>>1?this.call(\"setValue\",[this.$doc.getValue()]):this.emit(\"change\",{data:e}))}}).call(c.prototype),t.UIWorkerClient=function(e,t,n){var r=null,i=!1,a=Object.create(s),l=[],h=new c({messageBuffer:l,terminate:function(){},postMessage:function(e){l.push(e),r&&(i?setTimeout(d):d())}});h.setEmitSync=function(e){i=e};var d=function(){var e=l.shift();e.command?r[e.command].apply(r,e.args):e.event&&a._signal(e.event,e.data)};return a.postMessage=function(e){h.onMessage({data:e})},a.callback=function(e,t){this.postMessage({type:\"call\",id:t,data:e})},a.emit=function(e,t){this.postMessage({type:\"event\",name:e,data:t})},o.loadModule([\"worker\",t],(function(e){for(r=new e[n](a);l.length;)d()})),h},t.WorkerClient=c,t.createWorker=a})),ace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"],(function(e,t,n){\"use strict\";var r=e(\"./range\").Range,i=e(\"./lib/event_emitter\").EventEmitter,s=e(\"./lib/oop\");(function(){s.implement(this,i),this.setup=function(){var e=this,t=this.doc,n=this.session;this.selectionBefore=n.selection.toJSON(),n.selection.inMultiSelectMode&&n.selection.toSingleRange(),this.pos=t.createAnchor(this.$pos.row,this.$pos.column);var i=this.pos;i.$insertRight=!0,i.detach(),i.markerId=n.addMarker(new r(i.row,i.column,i.row,i.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach((function(n){(n=t.createAnchor(n.row,n.column)).$insertRight=!0,n.detach(),e.others.push(n)})),n.setUndoSelect(!1)},this.showOtherMarkers=function(){var e,t;this.othersActive||(e=this.session,(t=this).othersActive=!0,this.others.forEach((function(n){n.markerId=e.addMarker(new r(n.row,n.column,n.row,n.column+t.length),t.othersClass,null,!1)})))},this.hideOtherMarkers=function(){if(this.othersActive){this.othersActive=!1;for(var e=0;e<this.others.length;e++)this.session.removeMarker(this.others[e].markerId)}},this.onUpdate=function(e){if(this.$updating)return this.updateAnchors(e);var t=e;if(t.start.row===t.end.row&&t.start.row===this.pos.row){this.$updating=!0;var n=\"insert\"===e.action?t.end.column-t.start.column:t.start.column-t.end.column,i=t.start.column>=this.pos.column&&t.start.column<=this.pos.column+this.length+1,s=t.start.column-this.pos.column;if(this.updateAnchors(e),i&&(this.length+=n),i&&!this.session.$fromUndo)if(\"insert\"===e.action)for(var o=this.others.length-1;0<=o;o--){var a={row:(c=this.others[o]).row,column:c.column+s};this.doc.insertMergedLines(a,e.lines)}else if(\"remove\"===e.action)for(o=this.others.length-1;0<=o;o--){var c;a={row:(c=this.others[o]).row,column:c.column+s},this.doc.remove(new r(a.row,a.column,a.row,a.column-n))}this.$updating=!1,this.updateMarkers()}},this.updateAnchors=function(e){this.pos.onChange(e);for(var t=this.others.length;t--;)this.others[t].onChange(e);this.updateMarkers()},this.updateMarkers=function(){if(!this.$updating){var e=this,t=this.session,n=function(n,i){t.removeMarker(n.markerId),n.markerId=t.addMarker(new r(n.row,n.column,n.row,n.column+e.length),i,null,!1)};n(this.pos,this.mainClass);for(var i=this.others.length;i--;)n(this.others[i],this.othersClass)}},this.onCursorChange=function(e){var t;!this.$updating&&this.session&&((t=this.session.selection.getCursor()).row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit(\"cursorEnter\",e)):(this.hideOtherMarkers(),this._emit(\"cursorLeave\",e)))},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.off(\"change\",this.$onUpdate),this.session.selection.off(\"changeCursor\",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(-1!==this.$undoStackDepth){for(var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth,n=0;n<t;n++)e.undo(this.session,!0);this.selectionBefore&&this.session.selection.fromJSON(this.selectionBefore)}}}).call((e=function(e,t,n,r,i,s){var o=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=i,this.othersClass=s,this.$onUpdate=this.onUpdate.bind(this),this.doc.on(\"change\",this.$onUpdate),this.$others=r,this.$onCursorChange=function(){setTimeout((function(){o.onCursorChange()}))},this.$pos=n,n=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1},this.$undoStackDepth=n.length,this.setup(),e.selection.on(\"changeCursor\",this.$onCursorChange)}).prototype),t.PlaceHolder=e})),ace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"],(function(e,t,n){var r=e(\"../lib/event\"),i=e(\"../lib/useragent\");function s(e,t){return e.row==t.row&&e.column==t.column}t.onMouseDown=function(e){var t=e.domEvent,n=t.altKey,o=t.shiftKey,a=t.ctrlKey,c=e.getAccelKey(),l=e.getButton();if(a&&i.isMac&&(l=t.button),e.editor.inMultiSelectMode&&2==l)e.editor.textInput.onContextMenu(e.domEvent);else if(a||n||c){if(0===l){var h,d,u,f,g=e.editor,p=g.selection,m=g.inMultiSelectMode,C=e.getDocumentPosition(),b=p.getCursor(),v=(b=e.inSelection()||p.isEmpty()&&s(C,b),e.x),I=e.y,A=g.session,y=g.renderer.pixelToScreenCoordinates(v,I),w=y;if(g.$mouseHandler.$enableJumpToDef)a&&n||c&&n?h=o?\"block\":\"add\":n&&g.$blockSelectEnabled&&(h=\"block\");else if(c&&!n){if(h=\"add\",!m&&o)return}else n&&g.$blockSelectEnabled&&(h=\"block\");if(h&&i.isMac&&t.ctrlKey&&g.$mouseHandler.cancelContextMenu(),\"add\"==h)!m&&b||(m||(d=p.toOrientedRange(),g.addSelectionMarker(d)),u=p.rangeList.rangeAtPoint(C),g.inVirtualSelectionMode=!0,o&&(u=null,g.removeSelectionMarker(d=p.ranges[0]||d)),g.once(\"mouseup\",(function(){var e=p.toOrientedRange();u&&e.isEmpty()&&s(u.cursor,e.cursor)?p.substractPoint(e.cursor):(o?p.substractPoint(d.cursor):d&&(g.removeSelectionMarker(d),p.addRange(d)),p.addRange(e)),g.inVirtualSelectionMode=!1})));else if(\"block\"==h){function S(){var e=g.renderer.pixelToScreenCoordinates(v,I),t=A.screenToDocumentPosition(e.row,e.column,e.offsetX);s(w,e)&&s(t,p.lead)||(w=e,g.selection.moveToPosition(t),g.renderer.scrollCursorIntoView(),g.removeSelectionMarkers(x),x=p.rectangularRangeBlock(w,y),g.$mouseHandler.$clickSelection&&1==x.length&&x[0].isEmpty()&&(x[0]=g.$mouseHandler.$clickSelection.clone()),x.forEach(g.addSelectionMarker,g),g.updateSelectionMarkers())}e.stop(),g.inVirtualSelectionMode=!0;var x=[];m&&!c?p.toSingleRange():!m&&c&&(f=p.toOrientedRange(),g.addSelectionMarker(f)),o?y=A.documentToScreenPosition(p.lead):p.moveToPosition(C),w={row:-1,column:-1};var E=S;r.capture(g.container,(function(e){v=e.clientX,I=e.clientY}),(function(e){S(),clearInterval(k),g.removeSelectionMarkers(x),x.length||(x=[p.toOrientedRange()]),f&&(g.removeSelectionMarker(f),p.toSingleRange(f));for(var t=0;t<x.length;t++)p.addRange(x[t]);g.inVirtualSelectionMode=!1,g.$mouseHandler.$clickSelection=null}));var k=setInterval((function(){E()}),20);return e.preventDefault()}}}else 0===l&&e.editor.inMultiSelectMode&&e.editor.exitMultiSelectMode()}})),ace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"],(function(e,t,n){t.defaultCommands=[{name:\"addCursorAbove\",description:\"Add cursor above\",exec:function(e){e.selectMoreLines(-1)},bindKey:{win:\"Ctrl-Alt-Up\",mac:\"Ctrl-Alt-Up\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"addCursorBelow\",description:\"Add cursor below\",exec:function(e){e.selectMoreLines(1)},bindKey:{win:\"Ctrl-Alt-Down\",mac:\"Ctrl-Alt-Down\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"addCursorAboveSkipCurrent\",description:\"Add cursor above (skip current)\",exec:function(e){e.selectMoreLines(-1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Up\",mac:\"Ctrl-Alt-Shift-Up\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"addCursorBelowSkipCurrent\",description:\"Add cursor below (skip current)\",exec:function(e){e.selectMoreLines(1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Down\",mac:\"Ctrl-Alt-Shift-Down\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectMoreBefore\",description:\"Select more before\",exec:function(e){e.selectMore(-1)},bindKey:{win:\"Ctrl-Alt-Left\",mac:\"Ctrl-Alt-Left\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectMoreAfter\",description:\"Select more after\",exec:function(e){e.selectMore(1)},bindKey:{win:\"Ctrl-Alt-Right\",mac:\"Ctrl-Alt-Right\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectNextBefore\",description:\"Select next before\",exec:function(e){e.selectMore(-1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Left\",mac:\"Ctrl-Alt-Shift-Left\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectNextAfter\",description:\"Select next after\",exec:function(e){e.selectMore(1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Right\",mac:\"Ctrl-Alt-Shift-Right\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"toggleSplitSelectionIntoLines\",description:\"Split into lines\",exec:function(e){1<e.multiSelect.rangeCount?e.multiSelect.joinSelections():e.multiSelect.splitIntoLines()},bindKey:{win:\"Ctrl-Alt-L\",mac:\"Ctrl-Alt-L\"},readOnly:!0},{name:\"splitSelectionIntoLines\",description:\"Split into lines\",exec:function(e){e.multiSelect.splitIntoLines()},readOnly:!0},{name:\"alignCursors\",description:\"Align cursors\",exec:function(e){e.alignCursors()},bindKey:{win:\"Ctrl-Alt-A\",mac:\"Ctrl-Alt-A\"},scrollIntoView:\"cursor\"},{name:\"findAll\",description:\"Find all\",exec:function(e){e.findAll()},bindKey:{win:\"Ctrl-Alt-K\",mac:\"Ctrl-Alt-G\"},scrollIntoView:\"cursor\",readOnly:!0}],t.multiSelectCommands=[{name:\"singleSelection\",description:\"Single selection\",bindKey:\"esc\",exec:function(e){e.exitMultiSelectMode()},scrollIntoView:\"cursor\",readOnly:!0,isAvailable:function(e){return e&&e.inMultiSelectMode}}],e=e(\"../keyboard/hash_handler\").HashHandler,t.keyboardHandler=new e(t.multiSelectCommands)})),ace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"],(function(e,t,n){var r=e(\"./range_list\").RangeList,i=e(\"./range\").Range,s=e(\"./selection\").Selection,o=e(\"./mouse/multi_select_handler\").onMouseDown,a=e(\"./lib/event\"),c=e(\"./lib/lang\"),l=e(\"./commands/multi_select_commands\");t.commands=l.defaultCommands.concat(l.multiSelectCommands);var h=new(e(\"./search\").Search),d=e(\"./edit_session\").EditSession;function u(e){var n,r;function i(e){r&&(n.renderer.setMouseCursor(\"\"),r=!1)}e.$multiselectOnSessionChange||(e.$onAddRange=e.$onAddRange.bind(e),e.$onRemoveRange=e.$onRemoveRange.bind(e),e.$onMultiSelect=e.$onMultiSelect.bind(e),e.$onSingleSelect=e.$onSingleSelect.bind(e),e.$multiselectOnSessionChange=t.onSessionChange.bind(e),e.$checkMultiselectChange=e.$checkMultiselectChange.bind(e),e.$multiselectOnSessionChange(e),e.on(\"changeSession\",e.$multiselectOnSessionChange),e.on(\"mousedown\",o),e.commands.addCommands(l.defaultCommands),(n=e).textInput&&(e=n.textInput.getElement(),r=!1,a.addListener(e,\"keydown\",(function(e){e=18==e.keyCode&&!(e.ctrlKey||e.shiftKey||e.metaKey),n.$blockSelectEnabled&&e?r||(n.renderer.setMouseCursor(\"crosshair\"),r=!0):r&&i()}),n),a.addListener(e,\"keyup\",i,n),a.addListener(e,\"blur\",i,n)))}(function(){this.getSelectionMarkers=function(){return this.$selectionMarkers}}).call(d.prototype),(function(){this.ranges=null,this.rangeList=null,this.addRange=function(e,t){if(e){if(!this.inMultiSelectMode&&0===this.rangeCount){var n=this.toOrientedRange();if(this.rangeList.add(n),this.rangeList.add(e),2!=this.rangeList.ranges.length)return this.rangeList.removeAll(),t||this.fromOrientedRange(e);this.rangeList.removeAll(),this.rangeList.add(n),this.$onAddRange(n)}return e.cursor||(e.cursor=e.end),n=this.rangeList.add(e),this.$onAddRange(e),n.length&&this.$onRemoveRange(n),1<this.rangeCount&&!this.inMultiSelectMode&&(this._signal(\"multiSelect\"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)}},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){if(e=this.rangeList.substractPoint(e))return this.$onRemoveRange(e),e[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length&&this.$onRemoveRange(e)},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal(\"addRange\",{range:e})},this.$onRemoveRange=function(e){var t;this.rangeCount=this.rangeList.ranges.length,1==this.rangeCount&&this.inMultiSelectMode&&(t=this.rangeList.ranges.pop(),e.push(t),this.rangeCount=0);for(var n=e.length;n--;){var r=this.ranges.indexOf(e[n]);this.ranges.splice(r,1)}this._signal(\"removeRange\",{ranges:e}),0===this.rangeCount&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal(\"singleSelect\"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),(t=t||this.ranges[0])&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){this.rangeList||(this.rangeList=new r,this.ranges=[],this.rangeCount=0)},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){for(var e=this.ranges.length?this.ranges:[this.getRange()],t=[],n=0;n<e.length;n++){var r=e[n],s=r.start.row,o=r.end.row;if(s===o)t.push(r.clone());else{for(t.push(new i(s,r.start.column,s,this.session.getLine(s).length));++s<o;)t.push(this.getLineRange(s,!0));t.push(new i(o,0,o,r.end.column))}0!=n||this.isBackwards()||(t=t.reverse())}for(this.toSingleRange(),n=t.length;n--;)this.addRange(t[n])},this.joinSelections=function(){var e=(t=this.rangeList.ranges)[t.length-1],t=i.fromPoints(t[0].start,e.end);this.toSingleRange(),this.setSelectionRange(t,e.cursor==e.start)},this.toggleBlockSelection=function(){var e,t;1<this.rangeCount?(t=(e=this.rangeList.ranges)[e.length-1],e=i.fromPoints(e[0].start,t.end),this.toSingleRange(),this.setSelectionRange(e,t.cursor==t.start)):(e=this.session.documentToScreenPosition(this.cursor),t=this.session.documentToScreenPosition(this.anchor),this.rectangularRangeBlock(e,t).forEach(this.addRange,this))},this.rectangularRangeBlock=function(e,t,n){var r,s,o,a,c=[],l=e.column<t.column;a=l?(r=e.column,s=t.column,o=e.offsetX,t.offsetX):(r=t.column,s=e.column,o=t.offsetX,e.offsetX);var h,d,u,f=e.row<t.row;d=f?(h=e.row,t.row):(h=t.row,e.row),r<0&&(r=0),h<0&&(h=0),h==d&&(n=!0);for(var g,p,m=h;m<=d;m++){var C=i.fromPoints(this.session.screenToDocumentPosition(m,r,o),this.session.screenToDocumentPosition(m,s,a));if(C.isEmpty()){if(u&&(g=C.end).row==(p=u).row&&g.column==p.column)break;u=C.end}C.cursor=l?C.start:C.end,c.push(C)}if(f&&c.reverse(),!n){for(var b=c.length-1;c[b].isEmpty()&&0<b;)b--;if(0<b)for(var v=0;c[v].isEmpty();)v++;for(var I=b;v<=I;I--)c[I].isEmpty()&&c.splice(I,1)}return c}}).call(s.prototype),d=e(\"./editor\").Editor,(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,\"ace_selection\",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){e.marker&&(this.session.removeMarker(e.marker),-1!=(e=this.session.$selectionMarkers.indexOf(e))&&this.session.$selectionMarkers.splice(e,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length)},this.removeSelectionMarkers=function(e){for(var t=this.session.$selectionMarkers,n=e.length;n--;){var r=e[n];r.marker&&(this.session.removeMarker(r.marker),-1!=(r=t.indexOf(r))&&t.splice(r,1))}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){this.inMultiSelectMode||(this.inMultiSelectMode=!0,this.setStyle(\"ace_multiselect\"),this.keyBinding.addKeyboardHandler(l.keyboardHandler),this.commands.setDefaultHandler(\"exec\",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers())},this.$onSingleSelect=function(e){this.session.multiSelect.inVirtualMode||(this.inMultiSelectMode=!1,this.unsetStyle(\"ace_multiselect\"),this.keyBinding.removeKeyboardHandler(l.keyboardHandler),this.commands.removeDefaultHandler(\"exec\",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit(\"changeSelection\"))},this.$onMultiSelectExec=function(e){var t,n=e.command,r=e.editor;if(r.multiSelect)return n.multiSelectAction?t=\"forEach\"==n.multiSelectAction?r.forEachSelection(n,e.args):\"forEachLine\"==n.multiSelectAction?r.forEachSelection(n,e.args,!0):\"single\"==n.multiSelectAction?(r.exitMultiSelectMode(),n.exec(r,e.args||{})):n.multiSelectAction(r,e.args||{}):(t=n.exec(r,e.args||{}),r.multiSelect.addRange(r.multiSelect.toOrientedRange()),r.multiSelect.mergeOverlappingRanges()),t},this.forEachSelection=function(e,t,n){if(!this.inVirtualSelectionMode){var r,i=n&&n.keepOrder,o=1==n||n&&n.$byLines,a=this.session,c=this.selection,l=(n=c.rangeList,(i?c:n).ranges);if(!l.length)return e.exec?e.exec(this,t||{}):e(this,t||{});n=c._eventRegistry,c._eventRegistry={};var h=new s(a);this.inVirtualSelectionMode=!0;for(var d=l.length;d--;){if(o)for(;0<d&&l[d].start.row==l[d-1].end.row;)d--;h.fromOrientedRange(l[d]),h.index=d,this.selection=a.selection=h;var u=e.exec?e.exec(this,t||{}):e(this,t||{});r||void 0===u||(r=u),h.toOrientedRange(l[d])}return h.detach(),this.selection=a.selection=c,this.inVirtualSelectionMode=!1,c._eventRegistry=n,c.mergeOverlappingRanges(),c.ranges[0]&&c.fromOrientedRange(c.ranges[0]),c=this.renderer.$scrollAnimation,this.onCursorChange(),this.onSelectionChange(),c&&c.from==c.to&&this.renderer.animateScrolling(c.from),r}},this.exitMultiSelectMode=function(){this.inMultiSelectMode&&!this.inVirtualSelectionMode&&this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e=\"\";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){for(var t=this.multiSelect.rangeList.ranges,n=[],r=0;r<t.length;r++)n.push(this.session.getTextRange(t[r]));var i=this.session.getDocument().getNewLineCharacter();(e=n.join(i)).length==(n.length-1)*i.length&&(e=\"\")}else this.selection.isEmpty()||(e=this.session.getTextRange(this.getSelectionRange()));return e},this.$checkMultiselectChange=function(e,t){var n;this.inMultiSelectMode&&!this.inVirtualSelectionMode&&(n=this.multiSelect.ranges[0],this.multiSelect.isEmpty()&&t==this.multiSelect.anchor||((n=t==this.multiSelect.anchor?n.cursor==n.start?n.end:n.start:n.cursor).row!=t.row||this.session.$clipPositionToDocument(n.row,n.column).column!=t.column?this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange()):this.multiSelect.mergeOverlappingRanges()))},this.findAll=function(e,t,n){var r;(t=t||{}).needle=e||t.needle,null==t.needle&&(r=this.selection.isEmpty()?this.selection.getWordRange():this.selection.getRange(),t.needle=this.session.getTextRange(r)),this.$search.set(t);var i=this.$search.findAll(this.session);if(!i.length)return 0;var s=this.multiSelect;n||s.toSingleRange(i[0]);for(var o=i.length;o--;)s.addRange(i[o],!0);return r&&s.rangeList.rangeAtPoint(r.start)&&s.addRange(r,!0),i.length},this.selectMoreLines=function(e,t){var n=this.selection.toOrientedRange(),r=n.cursor==n.end,s=this.session.documentToScreenPosition(n.cursor);this.selection.$desiredColumn&&(s.column=this.selection.$desiredColumn);var o,a,c,l=this.session.screenToDocumentPosition(s.row+e,s.column);o=n.isEmpty()?l:(o=this.session.documentToScreenPosition(r?n.end:n.start),this.session.screenToDocumentPosition(o.row+e,o.column)),r?(a=i.fromPoints(l,o)).cursor=a.start:(a=i.fromPoints(o,l)).cursor=a.end,a.desiredColumn=s.column,this.selection.inMultiSelectMode?t&&(c=n.cursor):this.selection.addRange(n),this.selection.addRange(a),c&&this.selection.substractPoint(c)},this.transposeSelections=function(e){for(var t=this.session,n=t.multiSelect,r=n.ranges,i=r.length;i--;)(o=r[i]).isEmpty()&&(a=t.getWordRange(o.start.row,o.start.column),o.start.row=a.start.row,o.start.column=a.start.column,o.end.row=a.end.row,o.end.column=a.end.column);n.mergeOverlappingRanges();var s=[];for(i=r.length;i--;){var o=r[i];s.unshift(t.getTextRange(o))}for(e<0?s.unshift(s.pop()):s.push(s.shift()),i=r.length;i--;){var a=(o=r[i]).clone();t.replace(o,s[i]),o.start.row=a.start.row,o.start.column=a.start.column}n.fromOrientedRange(n.ranges[0])},this.selectMore=function(e,t,n){var r,i=this.session,s=i.multiSelect.toOrientedRange();s.isEmpty()&&((s=i.getWordRange(s.start.row,s.start.column)).cursor=-1==e?s.start:s.end,this.multiSelect.addRange(s),n)||(r=i.getTextRange(s),n=i,i=r,r=e,h.$options.wrap=!0,h.$options.needle=i,h.$options.backwards=-1==r,(n=h.find(n))&&(n.cursor=-1==e?n.start:n.end,this.session.unfold(n),this.multiSelect.addRange(n),this.renderer.scrollCursorIntoView(null,.5)),t&&this.multiSelect.substractPoint(s.cursor))},this.alignCursors=function(){var e=this.session,t=e.multiSelect,n=t.ranges,r=-1,s=n.filter((function(e){return e.cursor.row==r||void(r=e.cursor.row)}));if(n.length&&s.length!=n.length-1){s.forEach((function(e){t.substractPoint(e.cursor)}));var o=0,a=1/0,l=n.map((function(t){var n=t.cursor;return-1==(t=e.getLine(n.row).substr(n.column).search(/\\S/g))&&(t=0),n.column>o&&(o=n.column),t<a&&(a=t),t}));n.forEach((function(t,n){var r=t.cursor,s=o-r.column;(n=l[n]-a)<s?e.insert(r,c.stringRepeat(\" \",s-n)):e.remove(new i(r.row,r.column,r.row,r.column-s+n)),t.start.column=t.end.column=o,t.start.row=t.end.row=r.row,t.cursor=t.end})),t.fromOrientedRange(n[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}else{var h=this.selection.getRange(),d=h.start.row,u=h.end.row;if(s=d==u){for(var f,g=this.session.getLength();f=this.session.getLine(u),/[=:]/.test(f)&&++u<g;);for(;f=this.session.getLine(d),/[=:]/.test(f)&&0<--d;);d<0&&(d=0),g<=u&&(u=g-1)}n=this.session.removeFullLines(d,u),n=this.$reAlignText(n,s),this.session.insert({row:d,column:0},n.join(\"\\n\")+\"\\n\"),s||(h.start.column=0,h.end.column=n[n.length-1].length),this.selection.setRange(h)}},this.$reAlignText=function(e,t){var n,r,i,s=!0,o=!0;return e.map((function(e){var t=e.match(/(\\s*)(.*?)(\\s*)([=:].*)/);return t?(null==n?(n=t[1].length,r=t[2].length,i=t[3].length):(n+r+i!=t[1].length+t[2].length+t[3].length&&(o=!1),n!=t[1].length&&(s=!1),n>t[1].length&&(n=t[1].length),r<t[2].length&&(r=t[2].length),i>t[3].length&&(i=t[3].length)),t):[e]})).map(t?l:s?o?function(e){return e[2]?a(n+r-e[2].length)+e[2]+a(i)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}:l:function(e){return e[2]?a(n)+e[2]+a(i)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]});function a(e){return c.stringRepeat(\" \",e)}function l(e){return e[2]?a(n)+e[2]+a(r-e[2].length+i)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}}}).call(d.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect,(e=e.oldSession)&&(e.multiSelect.off(\"addRange\",this.$onAddRange),e.multiSelect.off(\"removeRange\",this.$onRemoveRange),e.multiSelect.off(\"multiSelect\",this.$onMultiSelect),e.multiSelect.off(\"singleSelect\",this.$onSingleSelect),e.multiSelect.lead.off(\"change\",this.$checkMultiselectChange),e.multiSelect.anchor.off(\"change\",this.$checkMultiselectChange)),t&&(t.multiSelect.on(\"addRange\",this.$onAddRange),t.multiSelect.on(\"removeRange\",this.$onRemoveRange),t.multiSelect.on(\"multiSelect\",this.$onMultiSelect),t.multiSelect.on(\"singleSelect\",this.$onSingleSelect),t.multiSelect.lead.on(\"change\",this.$checkMultiselectChange),t.multiSelect.anchor.on(\"change\",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=u,e(\"./config\").defineOptions(d.prototype,\"editor\",{enableMultiselect:{set:function(e){u(this),e?(this.on(\"changeSession\",this.$multiselectOnSessionChange),this.on(\"mousedown\",o)):(this.off(\"changeSession\",this.$multiselectOnSessionChange),this.off(\"mousedown\",o))},value:!0},enableBlockSelect:{set:function(e){this.$blockSelectEnabled=e},value:!0}})})),ace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"../../range\").Range;t=t.FoldMode=function(){},(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,n){return n=e.getLine(n),this.foldingStartMarker.test(n)?\"start\":\"markbeginend\"==t&&this.foldingStopMarker&&this.foldingStopMarker.test(n)?\"end\":\"\"},this.getFoldWidgetRange=function(e,t,n){return null},this.indentationBlock=function(e,t,n){var i=/\\S/,s=e.getLine(t),o=s.search(i);if(-1!=o){for(var a=n||s.length,c=e.getLength(),l=(n=t,t);++t<c;){var h=e.getLine(t).search(i);if(-1!=h){if(h<=o&&(!(h=e.getTokenAt(t,0))||\"string\"!==h.type))break;l=t}}if(n<l)return s=e.getLine(l).length,new r(n,a,l,s)}},this.openingBracketBlock=function(e,t,n,i,s){if(t=e.$findClosingBracket(t,i={row:n,column:i+1},s))return null==(s=e.foldWidgets[t.row])&&(s=e.getFoldWidget(t.row)),\"start\"==s&&t.row>i.row&&(t.row--,t.column=e.getLine(t.row).length),r.fromPoints(i,t)},this.closingBracketBlock=function(e,t,n,i,s){if(t=e.$findOpeningBracket(t,i={row:n,column:i}))return t.column++,i.column--,r.fromPoints(t,i)}}).call(t.prototype)})),ace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],(function(e,t,n){\"use strict\";t.isDark=!1,t.cssClass=\"ace-tm\",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}',t.$id=\"ace/theme/textmate\",e(\"../lib/dom\").importCssString(t.cssText,t.cssClass)})),ace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],(function(e,t,n){\"use strict\";var r=e(\"./lib/dom\");function i(e){this.session=e,(this.session.widgetManager=this).session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on(\"change\",this.updateOnChange),this.session.on(\"changeFold\",this.updateOnFold),this.session.on(\"changeEditor\",this.$onChangeEditor)}(function(){this.getRowLength=function(e){var t=this.lineWidgets&&this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach((function(t){t&&t.rowCount&&!t.hidden&&(e+=t.rowCount)})),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach(),this.editor!=e&&(this.detach(),(this.editor=e)&&(e.widgetManager=this,e.renderer.on(\"beforeRender\",this.measureWidgets),e.renderer.on(\"afterRender\",this.renderWidgets)))},this.detach=function(e){var t=this.editor;t&&(this.editor=null,t.widgetManager=null,t.renderer.off(\"beforeRender\",this.measureWidgets),t.renderer.off(\"afterRender\",this.renderWidgets),(t=this.session.lineWidgets)&&t.forEach((function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))})))},this.updateOnFold=function(e,t){var n=t.lineWidgets;if(n&&e.action){for(var r=e.data,i=r.end.row,s=\"add\"==e.action,o=(t=r.start.row)+1;o<i;o++)n[o]&&(n[o].hidden=s);n[i]&&(s?n[t]?n[i].hidden=s:n[t]=n[i]:(n[t]==n[i]&&(n[t]=void 0),n[i].hidden=s))}},this.updateOnChange=function(e){var t,n,r,i=this.session.lineWidgets;i&&(0==(r=e.end.row-(t=e.start.row))||(\"remove\"==e.action?(n=i.splice(t+1,r),!i[t]&&n[n.length-1]&&(i[t]=n.pop()),n.forEach((function(e){e&&this.removeLineWidget(e)}),this)):(r=new Array(r),i[t]&&null!=i[t].column&&e.start.column>i[t].column&&t++,r.unshift(t,0),i.splice.apply(i,r)),this.$updateRows()))},this.$updateRows=function(){var e,t=this.session.lineWidgets;t&&(e=!0,t.forEach((function(t,n){if(t)for(e=!1,t.row=n;t.$oldWidget;)t.$oldWidget.row=n,t=t.$oldWidget})),e&&(this.session.lineWidgets=null))},this.$registerLineWidget=function(e){this.session.lineWidgets||(this.session.lineWidgets=new Array(this.session.getLength()));var t=this.session.lineWidgets[e.row];return t&&(e.$oldWidget=t).el&&t.el.parentNode&&(t.el.parentNode.removeChild(t.el),t._inDocument=!1),this.session.lineWidgets[e.row]=e},this.addLineWidget=function(e){if(this.$registerLineWidget(e),e.session=this.session,!this.editor)return e;var t=this.editor.renderer;e.html&&!e.el&&(e.el=r.createElement(\"div\"),e.el.innerHTML=e.html),e.el&&(r.addCssClass(e.el,\"ace_lineWidgetContainer\"),e.el.style.position=\"absolute\",e.el.style.zIndex=5,t.container.appendChild(e.el),e._inDocument=!0,e.coverGutter||(e.el.style.zIndex=3),null==e.pixelHeight&&(e.pixelHeight=e.el.offsetHeight)),null==e.rowCount&&(e.rowCount=e.pixelHeight/t.layerConfig.lineHeight);var n,i=this.session.getFoldAt(e.row,0);return(e.$fold=i)&&(n=this.session.lineWidgets,e.row!=i.end.row||n[i.start.row]?e.hidden=!0:n[i.start.row]=e),this.session._emit(\"changeFold\",{data:{start:{row:e.row}}}),this.$updateRows(),this.renderWidgets(null,t),this.onWidgetChanged(e),e},this.removeLineWidget=function(e){if(e._inDocument=!1,e.session=null,e.el&&e.el.parentNode&&e.el.parentNode.removeChild(e.el),e.editor&&e.editor.destroy)try{e.editor.destroy()}catch(e){}if(this.session.lineWidgets){var t=this.session.lineWidgets[e.row];if(t==e)this.session.lineWidgets[e.row]=e.$oldWidget,e.$oldWidget&&this.onWidgetChanged(e.$oldWidget);else for(;t;){if(t.$oldWidget==e){t.$oldWidget=e.$oldWidget;break}t=t.$oldWidget}}this.session._emit(\"changeFold\",{data:{start:{row:e.row}}}),this.$updateRows()},this.getWidgetsAtRow=function(e){for(var t=this.session.lineWidgets,n=t&&t[e],r=[];n;)r.push(n),n=n.$oldWidget;return r},this.onWidgetChanged=function(e){this.session._changedWidgets.push(e),this.editor&&this.editor.renderer.updateFull()},this.measureWidgets=function(e,t){var n=this.session._changedWidgets,r=t.layerConfig;if(n&&n.length){for(var i=1/0,s=0;s<n.length;s++){var o=n[s];if(o&&o.el&&o.session==this.session){if(!o._inDocument){if(this.session.lineWidgets[o.row]!=o)continue;o._inDocument=!0,t.container.appendChild(o.el)}o.h=o.el.offsetHeight,o.fixedWidth||(o.w=o.el.offsetWidth,o.screenWidth=Math.ceil(o.w/r.characterWidth));var a=o.h/r.lineHeight;o.coverLine&&(a-=this.session.getRowLineCount(o.row))<0&&(a=0),o.rowCount!=a&&(o.rowCount=a,o.row<i&&(i=o.row))}}i!=1/0&&(this.session._emit(\"changeFold\",{data:{start:{row:i}}}),this.session.lineWidgetWidth=null),this.session._changedWidgets=[]}},this.renderWidgets=function(e,t){var n=t.layerConfig,r=this.session.lineWidgets;if(r){for(var i=Math.min(this.firstRow,n.firstRow),s=Math.max(this.lastRow,n.lastRow,r.length);0<i&&!r[i];)i--;this.firstRow=n.firstRow,this.lastRow=n.lastRow,t.$cursorLayer.config=n;for(var o=i;o<=s;o++){var a,c=r[o];c&&c.el&&(c.hidden?c.el.style.top=-100-(c.pixelHeight||0)+\"px\":(c._inDocument||(c._inDocument=!0,t.container.appendChild(c.el)),a=t.$cursorLayer.getPixelPosition({row:o,column:0},!0).top,c.coverLine||(a+=n.lineHeight*this.session.getRowLineCount(c.row)),c.el.style.top=a-n.offset+\"px\",a=c.coverGutter?0:t.gutterWidth,c.fixedWidth||(a-=t.scrollLeft),c.el.style.left=a+\"px\",c.fullWidth&&c.screenWidth&&(c.el.style.minWidth=n.width+2*n.padding+\"px\"),c.el.style.right=c.fixedWidth?t.scrollBar.getWidth()+\"px\":\"\"))}}}}).call(i.prototype),t.LineWidgets=i})),ace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"../line_widgets\").LineWidgets,i=e(\"../lib/dom\"),s=e(\"../range\").Range;function o(e,t,n){var r=e.getAnnotations().sort(s.comparePoints);if(r.length){var i=function(e,t,n){for(var r=0,i=e.length-1;r<=i;){var s=r+i>>1,o=n(t,e[s]);if(0<o)r=1+s;else{if(!(o<0))return s;i=s-1}}return-(r+1)}(r,{row:t,column:-1},s.comparePoints);i<0&&(i=-i-1),i>=r.length?i=0<n?0:r.length-1:0===i&&n<0&&(i=r.length-1);var o=r[i];if(o&&n){if(o.row===t){for(;(o=r[i+=n])&&o.row===t;);if(!o)return r.slice()}var a=[];for(t=o.row;a[n<0?\"unshift\":\"push\"](o),(o=r[i+=n])&&o.row==t;);return a.length&&a}}}t.showErrorMarker=function(e,t){var n=e.session;n.widgetManager||(n.widgetManager=new r(n),n.widgetManager.attach(e));var s,a=e.getCursorPosition(),c=a.row;if((l=n.widgetManager.getWidgetsAtRow(c).filter((function(e){return\"errorMarker\"==e.type}))[0])?l.destroy():c-=t,t=o(n,c,t))a.column=((d=t[0]).pos&&\"number\"!=typeof d.column?d.pos.sc:d.column)||0,a.row=d.row,s=e.renderer.$gutterLayer.$annotations[a.row];else{if(l)return;s={text:[\"Looks good!\"],className:\"ace_ok\"}}e.session.unfold(a.row),e.selection.moveToPosition(a);var l,h={row:a.row,fixedWidth:!0,coverGutter:!0,el:i.createElement(\"div\"),type:\"errorMarker\"},d=h.el.appendChild(i.createElement(\"div\"));function u(e,t,n){if(0===t&&(\"esc\"===n||\"return\"===n))return h.destroy(),{command:\"null\"}}(l=h.el.appendChild(i.createElement(\"div\"))).className=\"error_widget_arrow \"+s.className,a=e.renderer.$cursorLayer.getPixelPosition(a).left,l.style.left=a+e.renderer.gutterWidth-5+\"px\",h.el.className=\"error_widget_wrapper\",d.className=\"error_widget \"+s.className,d.innerHTML=s.text.join(\"<br>\"),d.appendChild(i.createElement(\"div\")),h.destroy=function(){e.$mouseHandler.isMousePressed||(e.keyBinding.removeKeyboardHandler(u),n.widgetManager.removeLineWidget(h),e.off(\"changeSelection\",h.destroy),e.off(\"changeSession\",h.destroy),e.off(\"mouseup\",h.destroy),e.off(\"change\",h.destroy))},e.keyBinding.addKeyboardHandler(u),e.on(\"changeSelection\",h.destroy),e.on(\"changeSession\",h.destroy),e.on(\"mouseup\",h.destroy),e.on(\"change\",h.destroy),e.session.widgetManager.addLineWidget(h),h.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:h.el.offsetHeight})},i.importCssString(\"    .error_widget_wrapper {        background: inherit;        color: inherit;        border:none    }    .error_widget {        border-top: solid 2px;        border-bottom: solid 2px;        margin: 5px 0;        padding: 10px 40px;        white-space: pre-wrap;    }    .error_widget.ace_error, .error_widget_arrow.ace_error{        border-color: #ff5a5a    }    .error_widget.ace_warning, .error_widget_arrow.ace_warning{        border-color: #F1D817    }    .error_widget.ace_info, .error_widget_arrow.ace_info{        border-color: #5a5a5a    }    .error_widget.ace_ok, .error_widget_arrow.ace_ok{        border-color: #5aaa5a    }    .error_widget_arrow {        position: absolute;        border: solid 5px;        border-top-color: transparent!important;        border-right-color: transparent!important;        border-left-color: transparent!important;        top: -5px;    }\",\"\")})),ace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"],(function(e,t,r){\"use strict\";e(\"./lib/fixoldbrowsers\");var i=e(\"./lib/dom\"),s=e(\"./lib/event\"),o=e(\"./range\").Range,a=e(\"./editor\").Editor,c=e(\"./edit_session\").EditSession,l=e(\"./undomanager\").UndoManager,h=e(\"./virtual_renderer\").VirtualRenderer;e(\"./worker/worker_client\"),e(\"./keyboard/hash_handler\"),e(\"./placeholder\"),e(\"./multi_select\"),e(\"./mode/folding/fold_mode\"),e(\"./theme/textmate\"),e(\"./ext/error_marker\"),t.config=e(\"./config\"),t.require=e,t.define=n.amdD,t.edit=function(e,n){if(\"string\"==typeof e){var r=e;if(!(e=document.getElementById(r)))throw new Error(\"ace.edit can't find div #\"+r)}if(e&&e.env&&e.env.editor instanceof a)return e.env.editor;var o;r=\"\",e&&/input|textarea/i.test(e.tagName)?(r=(o=e).value,e=i.createElement(\"pre\"),o.parentNode.replaceChild(e,o)):e&&(r=e.textContent,e.innerHTML=\"\");var c={document:r=t.createEditSession(r),editor:n=new a(new h(e),r,n),onResize:n.resize.bind(n,null)};return o&&(c.textarea=o),s.addListener(window,\"resize\",c.onResize),n.on(\"destroy\",(function(){s.removeListener(window,\"resize\",c.onResize),c.editor.container.env=null})),n.container.env=n.env=c,n},t.createEditSession=function(e,t){return(t=new c(e,t)).setUndoManager(new l),t},t.Range=o,t.Editor=a,t.EditSession=c,t.UndoManager=l,t.VirtualRenderer=h,t.version=t.config.version})),ace.require([\"ace/ace\"],(function(t){for(var n in t&&(t.config.init(!0),t.define=ace.define),window.ace||(window.ace=t),t)t.hasOwnProperty(n)&&(window.ace[n]=t[n]);window.ace.default=window.ace,e&&(e.exports=window.ace)}))},3330:function(e,t,n){e=n.nmd(e),ace.define(\"ace/ext/searchbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),i=e(\"../lib/lang\"),s=e(\"../lib/event\"),o='.ace_search {background-color: #ddd;color: #666;border: 1px solid #cbcbcb;border-top: 0 none;overflow: hidden;margin: 0;padding: 4px 6px 0 4px;position: absolute;top: 0;z-index: 99;white-space: normal;}.ace_search.left {border-left: 0 none;border-radius: 0px 0px 5px 0px;left: 0;}.ace_search.right {border-radius: 0px 0px 0px 5px;border-right: 0 none;right: 0;}.ace_search_form, .ace_replace_form {margin: 0 20px 4px 0;overflow: hidden;line-height: 1.9;}.ace_replace_form {margin-right: 0;}.ace_search_form.ace_nomatch {outline: 1px solid red;}.ace_search_field {border-radius: 3px 0 0 3px;background-color: white;color: black;border: 1px solid #cbcbcb;border-right: 0 none;outline: 0;padding: 0;font-size: inherit;margin: 0;line-height: inherit;padding: 0 6px;min-width: 17em;vertical-align: top;min-height: 1.8em;box-sizing: content-box;}.ace_searchbtn {border: 1px solid #cbcbcb;line-height: inherit;display: inline-block;padding: 0 6px;background: #fff;border-right: 0 none;border-left: 1px solid #dcdcdc;cursor: pointer;margin: 0;position: relative;color: #666;}.ace_searchbtn:last-child {border-radius: 0 3px 3px 0;border-right: 1px solid #cbcbcb;}.ace_searchbtn:disabled {background: none;cursor: default;}.ace_searchbtn:hover {background-color: #eef1f6;}.ace_searchbtn.prev, .ace_searchbtn.next {padding: 0px 0.7em}.ace_searchbtn.prev:after, .ace_searchbtn.next:after {content: \"\";border: solid 2px #888;width: 0.5em;height: 0.5em;border-width:  2px 0 0 2px;display:inline-block;transform: rotate(-45deg);}.ace_searchbtn.next:after {border-width: 0 2px 2px 0 ;}.ace_searchbtn_close {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;border-radius: 50%;border: 0 none;color: #656565;cursor: pointer;font: 16px/16px Arial;padding: 0;height: 14px;width: 14px;top: 9px;right: 7px;position: absolute;}.ace_searchbtn_close:hover {background-color: #656565;background-position: 50% 100%;color: white;}.ace_button {margin-left: 2px;cursor: pointer;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;overflow: hidden;opacity: 0.7;border: 1px solid rgba(100,100,100,0.23);padding: 1px;box-sizing:    border-box!important;color: black;}.ace_button:hover {background-color: #eee;opacity:1;}.ace_button:active {background-color: #ddd;}.ace_button.checked {border-color: #3399ff;opacity:1;}.ace_search_options{margin-bottom: 3px;text-align: right;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;clear: both;}.ace_search_counter {float: left;font-family: arial;padding: 0 8px;}',a=e(\"../keyboard/hash_handler\").HashHandler,c=e(\"../lib/keys\");function l(e,t,n){var i=r.createElement(\"div\");r.buildDom([\"div\",{class:\"ace_search right\"},[\"span\",{action:\"hide\",class:\"ace_searchbtn_close\"}],[\"div\",{class:\"ace_search_form\"},[\"input\",{class:\"ace_search_field\",placeholder:\"Search for\",spellcheck:\"false\"}],[\"span\",{action:\"findPrev\",class:\"ace_searchbtn prev\"},\"\\u200b\"],[\"span\",{action:\"findNext\",class:\"ace_searchbtn next\"},\"\\u200b\"],[\"span\",{action:\"findAll\",class:\"ace_searchbtn\",title:\"Alt-Enter\"},\"All\"]],[\"div\",{class:\"ace_replace_form\"},[\"input\",{class:\"ace_search_field\",placeholder:\"Replace with\",spellcheck:\"false\"}],[\"span\",{action:\"replaceAndFindNext\",class:\"ace_searchbtn\"},\"Replace\"],[\"span\",{action:\"replaceAll\",class:\"ace_searchbtn\"},\"All\"]],[\"div\",{class:\"ace_search_options\"},[\"span\",{action:\"toggleReplace\",class:\"ace_button\",title:\"Toggle Replace mode\",style:\"float:left;margin-top:-2px;padding:0 5px;\"},\"+\"],[\"span\",{class:\"ace_search_counter\"}],[\"span\",{action:\"toggleRegexpMode\",class:\"ace_button\",title:\"RegExp Search\"},\".*\"],[\"span\",{action:\"toggleCaseSensitive\",class:\"ace_button\",title:\"CaseSensitive Search\"},\"Aa\"],[\"span\",{action:\"toggleWholeWords\",class:\"ace_button\",title:\"Whole Word Search\"},\"\\\\b\"],[\"span\",{action:\"searchInSelection\",class:\"ace_button\",title:\"Search In Selection\"},\"S\"]]],i),this.element=i.firstChild,this.setSession=this.setSession.bind(this),this.$init(),this.setEditor(e),r.importCssString(o,\"ace_searchbox\",e.container)}r.importCssString(o,\"ace_searchbox\"),(function(){this.setEditor=function(e){e.searchBox=this,e.renderer.scroller.appendChild(this.element),this.editor=e},this.setSession=function(e){this.searchRange=null,this.$syncOptions(!0)},this.$initElements=function(e){this.searchBox=e.querySelector(\".ace_search_form\"),this.replaceBox=e.querySelector(\".ace_replace_form\"),this.searchOption=e.querySelector(\"[action=searchInSelection]\"),this.replaceOption=e.querySelector(\"[action=toggleReplace]\"),this.regExpOption=e.querySelector(\"[action=toggleRegexpMode]\"),this.caseSensitiveOption=e.querySelector(\"[action=toggleCaseSensitive]\"),this.wholeWordOption=e.querySelector(\"[action=toggleWholeWords]\"),this.searchInput=this.searchBox.querySelector(\".ace_search_field\"),this.replaceInput=this.replaceBox.querySelector(\".ace_search_field\"),this.searchCounter=e.querySelector(\".ace_search_counter\")},this.$init=function(){var e=this.element;this.$initElements(e);var t=this;s.addListener(e,\"mousedown\",(function(e){setTimeout((function(){t.activeInput.focus()}),0),s.stopPropagation(e)})),s.addListener(e,\"click\",(function(e){var n=(e.target||e.srcElement).getAttribute(\"action\");n&&t[n]?t[n]():t.$searchBarKb.commands[n]&&t.$searchBarKb.commands[n].exec(t),s.stopPropagation(e)})),s.addCommandKeyListener(e,(function(e,n,r){r=c.keyCodeToString(r),(r=t.$searchBarKb.findKeyCommand(n,r))&&r.exec&&(r.exec(t),s.stopEvent(e))})),this.$onChange=i.delayedCall((function(){t.find(!1,!1)})),s.addListener(this.searchInput,\"input\",(function(){t.$onChange.schedule(20)})),s.addListener(this.searchInput,\"focus\",(function(){t.activeInput=t.searchInput,t.searchInput.value&&t.highlight()})),s.addListener(this.replaceInput,\"focus\",(function(){t.activeInput=t.replaceInput,t.searchInput.value&&t.highlight()}))},this.$closeSearchBarKb=new a([{bindKey:\"Esc\",name:\"closeSearchBar\",exec:function(e){e.searchBox.hide()}}]),this.$searchBarKb=new a,this.$searchBarKb.bindKeys({\"Ctrl-f|Command-f\":function(e){var t=e.isReplace=!e.isReplace;e.replaceBox.style.display=t?\"\":\"none\",e.replaceOption.checked=!1,e.$syncOptions(),e.searchInput.focus()},\"Ctrl-H|Command-Option-F\":function(e){e.editor.getReadOnly()||(e.replaceOption.checked=!0,e.$syncOptions(),e.replaceInput.focus())},\"Ctrl-G|Command-G\":function(e){e.findNext()},\"Ctrl-Shift-G|Command-Shift-G\":function(e){e.findPrev()},esc:function(e){setTimeout((function(){e.hide()}))},Return:function(e){e.activeInput==e.replaceInput&&e.replace(),e.findNext()},\"Shift-Return\":function(e){e.activeInput==e.replaceInput&&e.replace(),e.findPrev()},\"Alt-Return\":function(e){e.activeInput==e.replaceInput&&e.replaceAll(),e.findAll()},Tab:function(e){(e.activeInput==e.replaceInput?e.searchInput:e.replaceInput).focus()}}),this.$searchBarKb.addCommands([{name:\"toggleRegexpMode\",bindKey:{win:\"Alt-R|Alt-/\",mac:\"Ctrl-Alt-R|Ctrl-Alt-/\"},exec:function(e){e.regExpOption.checked=!e.regExpOption.checked,e.$syncOptions()}},{name:\"toggleCaseSensitive\",bindKey:{win:\"Alt-C|Alt-I\",mac:\"Ctrl-Alt-R|Ctrl-Alt-I\"},exec:function(e){e.caseSensitiveOption.checked=!e.caseSensitiveOption.checked,e.$syncOptions()}},{name:\"toggleWholeWords\",bindKey:{win:\"Alt-B|Alt-W\",mac:\"Ctrl-Alt-B|Ctrl-Alt-W\"},exec:function(e){e.wholeWordOption.checked=!e.wholeWordOption.checked,e.$syncOptions()}},{name:\"toggleReplace\",exec:function(e){e.replaceOption.checked=!e.replaceOption.checked,e.$syncOptions()}},{name:\"searchInSelection\",exec:function(e){e.searchOption.checked=!e.searchRange,e.setSearchRange(e.searchOption.checked&&e.editor.getSelectionRange()),e.$syncOptions()}}]),this.setSearchRange=function(e){(this.searchRange=e)?this.searchRangeMarker=this.editor.session.addMarker(e,\"ace_active-line\"):this.searchRangeMarker&&(this.editor.session.removeMarker(this.searchRangeMarker),this.searchRangeMarker=null)},this.$syncOptions=function(e){r.setCssClass(this.replaceOption,\"checked\",this.searchRange),r.setCssClass(this.searchOption,\"checked\",this.searchOption.checked),this.replaceOption.textContent=this.replaceOption.checked?\"-\":\"+\",r.setCssClass(this.regExpOption,\"checked\",this.regExpOption.checked),r.setCssClass(this.wholeWordOption,\"checked\",this.wholeWordOption.checked),r.setCssClass(this.caseSensitiveOption,\"checked\",this.caseSensitiveOption.checked);var t=this.editor.getReadOnly();this.replaceOption.style.display=t?\"none\":\"\",this.replaceBox.style.display=this.replaceOption.checked&&!t?\"\":\"none\",this.find(!1,!1,e)},this.highlight=function(e){this.editor.session.highlight(e||this.editor.$search.$options.re),this.editor.renderer.updateBackMarkers()},this.find=function(e,t,n){n=!this.editor.find(this.searchInput.value,{skipCurrent:e,backwards:t,wrap:!0,regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked,preventScroll:n,range:this.searchRange})&&this.searchInput.value,r.setCssClass(this.searchBox,\"ace_nomatch\",n),this.editor._emit(\"findSearchBox\",{match:!n}),this.highlight(),this.updateCounter()},this.updateCounter=function(){var e=this.editor,t=e.$search.$options.re,n=0,r=0;if(t){var i=this.searchRange?e.session.getTextRange(this.searchRange):e.getValue(),s=e.session.doc.positionToIndex(e.selection.anchor);this.searchRange&&(s-=e.session.doc.positionToIndex(this.searchRange.start));for(var o,a=t.lastIndex=0;(o=t.exec(i))&&(n++,(a=o.index)<=s&&r++,!(999<n))&&(o[0]||(t.lastIndex=a+=1,!(a>=i.length))););}this.searchCounter.textContent=r+\" of \"+(999<n?\"999+\":n)},this.findNext=function(){this.find(!0,!1)},this.findPrev=function(){this.find(!0,!0)},this.findAll=function(){var e=!this.editor.findAll(this.searchInput.value,{regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked})&&this.searchInput.value;r.setCssClass(this.searchBox,\"ace_nomatch\",e),this.editor._emit(\"findSearchBox\",{match:!e}),this.highlight(),this.hide()},this.replace=function(){this.editor.getReadOnly()||this.editor.replace(this.replaceInput.value)},this.replaceAndFindNext=function(){this.editor.getReadOnly()||(this.editor.replace(this.replaceInput.value),this.findNext())},this.replaceAll=function(){this.editor.getReadOnly()||this.editor.replaceAll(this.replaceInput.value)},this.hide=function(){this.active=!1,this.setSearchRange(null),this.editor.off(\"changeSession\",this.setSession),this.element.style.display=\"none\",this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb),this.editor.focus()},this.show=function(e,t){this.active=!0,this.editor.on(\"changeSession\",this.setSession),this.element.style.display=\"\",this.replaceOption.checked=t,e&&(this.searchInput.value=e),this.searchInput.focus(),this.searchInput.select(),this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb),this.$syncOptions(!0)},this.isFocused=function(){var e=document.activeElement;return e==this.searchInput||e==this.replaceInput}}).call(l.prototype),t.SearchBox=l,t.Search=function(e,t){(e.searchBox||new l(e)).show(e.session.getTextRange(),t)}})),ace.require([\"ace/ext/searchbox\"],(function(t){e&&(e.exports=t)}))},4091:function(e,t,n){e=n.nmd(e),ace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules;r.inherits(e=function(){this.$rules={start:[{token:\"variable\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'},{token:\"string\",regex:'\"',next:\"string\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:\"text\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment.start\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],string:[{token:\"constant.language.escape\",regex:/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],comment:[{token:\"comment.end\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]}},i),t.JsonHighlightRules=e})),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"../range\").Range;(function(){this.checkOutdent=function(e,t){return!!/^\\s+$/.test(e)&&/^\\s*\\}/.test(t)},this.autoOutdent=function(e,t){if(!(n=e.getLine(t).match(/^(\\s*\\})/)))return 0;var n,i=n[1].length;if(!(n=e.findMatchingBracket({row:t,column:i}))||n.row==t)return 0;n=this.$getIndent(e.getLine(n.row)),e.replace(new r(t,0,t,i-1),n)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call((e=function(){}).prototype),t.MatchingBraceOutdent=e})),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],(function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range;e=e(\"./fold_mode\").FoldMode,t=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))},r.inherits(t,e),(function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return!this.singleLineBlockCommentRe.test(r)||this.startRegionRe.test(r)||this.tripleStarBlockCommentRe.test(r)?!(n=this._getFoldWidgetBase(e,t,n))&&this.startRegionRe.test(r)?\"start\":n:\"\"},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var a=e.getCommentFoldRange(n,o+s[0].length,1);return a&&!a.isMultiLine()&&(r?a=this.getSectionRange(e,n):\"all\"!=t&&(a=null)),a}return\"markbegin\"!==t&&(s=i.match(this.foldingStopMarker))?(o=s.index+s[0].length,s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)):void 0},this.getSectionRange=function(e,t){for(var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length,a=t+=1,c=e.getLength();++t<c;){var l=(n=e.getLine(t)).search(/\\S/);if(-1!==l){if(l<r)break;var h=this.getFoldWidgetRange(e,\"all\",t);if(h){if(h.start.row<=s)break;if(h.isMultiLine())t=h.end.row;else if(r==l)break}a=t}}return new i(s,o,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,n){for(var r=t.search(/\\s*$/),s=e.getLength(),o=n,a=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,c=1;++n<s;){t=e.getLine(n);var l=a.exec(t);if(l&&(l[1]?c--:c++,!c))break}if(o<n)return new i(o,r,n,t.length)}}).call(t.prototype)})),ace.define(\"ace/mode/json\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/json_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/worker/worker_client\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./json_highlight_rules\").JsonHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=e(\"./behaviour/cstyle\").CstyleBehaviour,c=e(\"./folding/cstyle\").FoldMode,l=e(\"../worker/worker_client\").WorkerClient;r.inherits(e=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new c},i),(function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);return\"start\"==e&&t.match(/^.*[\\{\\(\\[]\\s*$/)&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new l([\"ace\"],\"ace/mode/json_worker\",\"JsonWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",(function(t){e.setAnnotations(t.data)})),t.on(\"terminate\",(function(){e.clearAnnotations()})),t},this.$id=\"ace/mode/json\"}).call(e.prototype),t.Mode=e})),ace.require([\"ace/mode/json\"],(function(t){e&&(e.exports=t)}))},8903:function(e,t,n){\"use strict\";var r=n(5689),i=n(3969),s=n(5255),o=n(4293),a=n(3508),c=n(3368),l=n(742),h=n(9394),d=n(3724);(e.exports=p).prototype.validate=function(e,t){var n;if(\"string\"==typeof e){if(!(n=this.getSchema(e)))throw new Error('no schema with key or ref \"'+e+'\"')}else n=(e=this._addSchema(e)).validate||this._compile(e);return t=n(t),!0!==n.$async&&(this.errors=n.errors),t},p.prototype.compile=function(e,t){return(t=this._addSchema(e,void 0,t)).validate||this._compile(t)},p.prototype.addSchema=function(e,t,n,r){if(Array.isArray(e)){for(var s=0;s<e.length;s++)this.addSchema(e[s],void 0,n,r);return this}var o=this._getId(e);if(void 0!==o&&\"string\"!=typeof o)throw new Error(\"schema id must be string\");return A(this,t=i.normalizeId(t||o)),this._schemas[t]=this._addSchema(e,n,r,!0),this},p.prototype.addMetaSchema=function(e,t,n){return this.addSchema(e,t,n,!0),this},p.prototype.validateSchema=function(e,t){var n=e.$schema;if(void 0!==n&&\"string\"!=typeof n)throw new Error(\"$schema must be a string\");if(!(n=n||this._opts.defaultMeta||function(e){var t=e._opts.meta;return e._opts.defaultMeta=\"object\"==typeof t?e._getId(t)||t:e.getSchema(u)?u:void 0,e._opts.defaultMeta}(this)))return this.logger.warn(\"meta-schema not available\"),!(this.errors=null);if(!(e=this.validate(n,e))&&t){if(t=\"schema is invalid: \"+this.errorsText(),\"log\"!=this._opts.validateSchema)throw new Error(t);this.logger.error(t)}return e},p.prototype.getSchema=function(e){var t=m(this,e);switch(typeof t){case\"object\":return t.validate||this._compile(t);case\"string\":return this.getSchema(t);case\"undefined\":return function(e,t){if(c=i.schema.call(e,{schema:{}},t)){var n=c.schema,s=c.root,a=c.baseId,c=r.call(e,n,s,void 0,a);return e._fragments[t]=new o({ref:t,fragment:!0,schema:n,root:s,baseId:a,validate:c}),c}}(this,e)}},p.prototype.removeSchema=function(e){if(e instanceof RegExp)return C(this,this._schemas,e),C(this,this._refs,e),this;switch(typeof e){case\"undefined\":return C(this,this._schemas),C(this,this._refs),this._cache.clear(),this;case\"string\":var t=m(this,e);return t&&this._cache.del(t.cacheKey),delete this._schemas[e],delete this._refs[e],this;case\"object\":t=(t=this._opts.serialize)?t(e):e,this._cache.del(t),(t=this._getId(e))&&(t=i.normalizeId(t),delete this._schemas[t],delete this._refs[t])}return this},p.prototype.addFormat=function(e,t){return\"string\"==typeof t&&(t=new RegExp(t)),this._formats[e]=t,this},p.prototype.errorsText=function(e,t){if(!(e=e||this.errors))return\"No errors\";for(var n=void 0===(t=t||{}).separator?\", \":t.separator,r=void 0===t.dataVar?\"data\":t.dataVar,i=\"\",s=0;s<e.length;s++){var o=e[s];o&&(i+=r+o.dataPath+\" \"+o.message+n)}return i.slice(0,-n.length)},p.prototype._addSchema=function(e,t,n,r){if(\"object\"!=typeof e&&\"boolean\"!=typeof e)throw new Error(\"schema should be object or boolean\");var s,a,c=this._opts.serialize,l=c?c(e):e;return(a=this._cache.get(l))?a:(r=r||!1!==this._opts.addUsedSchema,(c=i.normalizeId(this._getId(e)))&&r&&A(this,c),(a=!1!==this._opts.validateSchema&&!t)&&!(s=c&&c==i.normalizeId(e.$schema))&&this.validateSchema(e,!0),t=i.ids.call(this,e),n=new o({id:c,schema:e,localRefs:t,cacheKey:l,meta:n}),\"#\"!=c[0]&&r&&(this._refs[c]=n),this._cache.put(l,n),a&&s&&this.validateSchema(e,!0),n)},p.prototype._compile=function(e,t){if(e.compiling)return(e.validate=s).schema=e.schema,s.errors=null,s.root=t||s,!0===e.schema.$async&&(s.$async=!0),s;var n,i;e.compiling=!0,e.meta&&(n=this._opts,this._opts=this._metaOpts);try{i=r.call(this,e.schema,t,e.localRefs)}catch(t){throw delete e.validate,t}finally{e.compiling=!1,e.meta&&(this._opts=n)}return e.validate=i,e.refs=i.refs,e.refVal=i.refVal,e.root=i.root,i;function s(){var t=e.validate,n=t.apply(this,arguments);return s.errors=t.errors,n}},p.prototype.compileAsync=n(9677),e=n(7931),p.prototype.addKeyword=e.add,p.prototype.getKeyword=e.get,p.prototype.removeKeyword=e.remove,p.prototype.validateKeyword=e.validate,e=n(5359),p.ValidationError=e.Validation,p.MissingRefError=e.MissingRef,p.$dataMetaSchema=h;var u=\"http://json-schema.org/draft-07/schema\",f=[\"removeAdditional\",\"useDefaults\",\"coerceTypes\",\"strictDefaults\"],g=[\"/properties\"];function p(e){if(!(this instanceof p))return new p(e);var t,r;e=this._opts=d.copy(e)||{},function(e){var t=e._opts.logger;if(!1===t)e.logger={log:y,warn:y,error:y};else{if(void 0===t&&(t=console),!(\"object\"==typeof t&&t.log&&t.warn&&t.error))throw new Error(\"logger must implement log, warn and error methods\");e.logger=t}}(this),this._schemas={},this._refs={},this._fragments={},this._formats=c(e.format),this._cache=e.cache||new s,this._loadingSchemas={},this._compilations=[],this.RULES=l(),this._getId=function(e){switch(e.schemaId){case\"auto\":return I;case\"id\":return b;default:return v}}(e),e.loopRequired=e.loopRequired||1/0,\"property\"==e.errorDataPath&&(e._errorDataPathProperty=!0),void 0===e.serialize&&(e.serialize=a),this._metaOpts=function(e){for(var t=d.copy(e._opts),n=0;n<f.length;n++)delete t[f[n]];return t}(this),e.formats&&function(e){for(var t in e._opts.formats)e.addFormat(t,e._opts.formats[t])}(this),e.keywords&&function(e){for(var t in e._opts.keywords)e.addKeyword(t,e._opts.keywords[t])}(this),(t=this)._opts.$data&&(r=n(6835),t.addMetaSchema(r,r.$id,!0)),!1!==t._opts.meta&&(r=n(38),t._opts.$data&&(r=h(r,g)),t.addMetaSchema(r,u,!0),t._refs[\"http://json-schema.org/schema\"]=u),\"object\"==typeof e.meta&&this.addMetaSchema(e.meta),e.nullable&&this.addKeyword(\"nullable\",{metaSchema:{type:\"boolean\"}}),function(e){var t=e._opts.schemas;if(t)if(Array.isArray(t))e.addSchema(t);else for(var n in t)e.addSchema(t[n],n)}(this)}function m(e,t){return t=i.normalizeId(t),e._schemas[t]||e._refs[t]||e._fragments[t]}function C(e,t,n){for(var r in t){var i=t[r];i.meta||n&&!n.test(r)||(e._cache.del(i.cacheKey),delete t[r])}}function b(e){return e.$id&&this.logger.warn(\"schema $id ignored\",e.$id),e.id}function v(e){return e.id&&this.logger.warn(\"schema id ignored\",e.id),e.$id}function I(e){if(e.$id&&e.id&&e.$id!=e.id)throw new Error(\"schema $id is different from id\");return e.$id||e.id}function A(e,t){if(e._schemas[t]||e._refs[t])throw new Error('schema with key or id \"'+t+'\" already exists')}function y(){}},5255:function(e){\"use strict\";(e=e.exports=function(){this._cache={}}).prototype.put=function(e,t){this._cache[e]=t},e.prototype.get=function(e){return this._cache[e]},e.prototype.del=function(e){delete this._cache[e]},e.prototype.clear=function(){this._cache={}}},9677:function(e,t,n){\"use strict\";var r=n(5359).MissingRef;e.exports=function e(t,n,i){var s=this;if(\"function\"!=typeof this._opts.loadSchema)throw new Error(\"options.loadSchema should be a function\");\"function\"==typeof n&&(i=n,n=void 0);var o=a(t).then((function(){var e=s._addSchema(t,void 0,n);return e.validate||function t(i){try{return s._compile(i)}catch(e){if(e instanceof r)return function(e){var r=e.missingSchema;if(c(r))throw new Error(\"Schema \"+r+\" is loaded but \"+e.missingRef+\" cannot be resolved\");return(e=s._loadingSchemas[r])||(e=s._loadingSchemas[r]=s._opts.loadSchema(r)).then(o,o),e.then((function(e){if(!c(r))return a(e).then((function(){c(r)||s.addSchema(e,r,void 0,n)}))})).then((function(){return t(i)}));function o(){delete s._loadingSchemas[r]}function c(e){return s._refs[e]||s._schemas[e]}}(e);throw e}}(e)}));return i&&o.then((function(e){i(null,e)}),i),o;function a(t){return(t=t.$schema)&&!s.getSchema(t)?e.call(s,{$ref:t},!0):Promise.resolve()}}},5359:function(e,t,n){\"use strict\";var r=n(3969);function i(e,t,n){this.message=n||i.message(e,t),this.missingRef=r.url(e,t),this.missingSchema=r.normalizeId(r.fullPath(this.missingRef))}function s(e){return e.prototype=Object.create(Error.prototype),e.prototype.constructor=e}e.exports={Validation:s((function(e){this.message=\"validation failed\",this.errors=e,this.ajv=this.validation=!0})),MissingRef:s(i)},i.message=function(e,t){return\"can't resolve reference \"+t+\" from id \"+e}},3368:function(e,t,n){\"use strict\";var r=n(3724),i=/^(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)$/,s=[0,31,28,31,30,31,30,31,31,30,31,30,31],o=/^(\\d\\d):(\\d\\d):(\\d\\d)(\\.\\d+)?(z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,a=/^(?=.{1,253}\\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\\.?$/i,c=/^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,l=/^(?:(?:[^\\x00-\\x20\"'<>%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i,h=/^(?:(?:http[s\\u017F]?|ftp):\\/\\/)(?:(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+(?::(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?@)?(?:(?!10(?:\\.[0-9]{1,3}){3})(?!127(?:\\.[0-9]{1,3}){3})(?!169\\.254(?:\\.[0-9]{1,3}){2})(?!192\\.168(?:\\.[0-9]{1,3}){2})(?!172\\.(?:1[6-9]|2[0-9]|3[01])(?:\\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-)*(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)(?:\\.(?:(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-)*(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)*(?:\\.(?:(?:[a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\\/(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?$/i,d=/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,u=/^(?:\\/(?:[^~/]|~0|~1)*)*$/,f=/^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;function g(e){return r.copy(g[e=\"full\"==e?\"full\":\"fast\"])}function p(e){if(!(n=e.match(i)))return!1;var t=+n[1],n=(e=+n[2],+n[3]);return 1<=e&&e<=12&&1<=n&&n<=(2!=e||(t=t)%4!=0||t%100==0&&t%400!=0?s[e]:29)}function m(e,t){if(!(i=e.match(o)))return!1;var n=i[1],r=i[2],i=(e=i[3],i[5]);return(n<=23&&r<=59&&e<=59||23==n&&59==r&&60==e)&&(!t||i)}n=/^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/,(e.exports=g).fast={date:/^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/,time:/^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,\"date-time\":/^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s](?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i,uri:/^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/)?[^\\s]*$/i,\"uri-reference\":/^(?:(?:[a-z][a-z0-9+\\-.]*:)?\\/?\\/)?(?:[^\\\\\\s#][^\\s#]*)?(?:#[^\\\\\\s]*)?$/i,\"uri-template\":l,url:h,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,hostname:a,ipv4:/^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,ipv6:/^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,regex:I,uuid:d,\"json-pointer\":u,\"json-pointer-uri-fragment\":f,\"relative-json-pointer\":n},g.full={date:p,time:m,\"date-time\":function(e){return 2==(e=e.split(C)).length&&p(e[0])&&m(e[1],!0)},uri:function(e){return b.test(e)&&c.test(e)},\"uri-reference\":/^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'\"()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\\?(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,\"uri-template\":l,url:h,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:a,ipv4:/^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,ipv6:/^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,regex:I,uuid:d,\"json-pointer\":u,\"json-pointer-uri-fragment\":f,\"relative-json-pointer\":n};var C=/t|\\s/i,b=/\\/|:/,v=/[^\\\\]\\\\Z/;function I(e){if(v.test(e))return!1;try{return new RegExp(e),!0}catch(e){return!1}}},5689:function(e,t,n){\"use strict\";var r=n(3969),i=n(3724),s=n(5359),o=n(3508),a=n(1869),c=i.ucs2length,l=n(2303),h=s.Validation;function d(e,t,n){for(var r=0;r<this._compilations.length;r++){var i=this._compilations[r];if(i.schema==e&&i.root==t&&i.baseId==n)return r}return-1}function u(e,t){return\"var pattern\"+e+\" = new RegExp(\"+i.toQuotedString(t[e])+\");\"}function f(e){return\"var default\"+e+\" = defaults[\"+e+\"];\"}function g(e,t){return void 0===t[e]?\"\":\"var refVal\"+e+\" = refVal[\"+e+\"];\"}function p(e){return\"var customRule\"+e+\" = customRules[\"+e+\"];\"}function m(e,t){if(!e.length)return\"\";for(var n=\"\",r=0;r<e.length;r++)n+=t(r,e);return n}e.exports=function e(t,n,C,b){var v=this,I=this._opts,A=[void 0],y={},w=[],S={},x=[],E={},k=[],_=(function(e,t,n){var r=d.call(this,e,t,n);return 0<=r?{index:r,compiling:!0}:(this._compilations[r=this._compilations.length]={schema:e,root:t,baseId:n},{index:r,compiling:!1})}).call(this,t,n=n||{schema:t,refVal:A,refs:y},b),T=this._compilations[_.index];if(_.compiling)return T.callValidate=function e(){var t=T.validate,n=t.apply(this,arguments);return e.errors=t.errors,n};var R=this._formats,B=this.RULES;try{var O=P(t,n,C,b);T.validate=O;var L=T.callValidate;return L&&(L.schema=O.schema,L.errors=null,L.refs=O.refs,L.refVal=O.refVal,L.root=O.root,L.$async=O.$async,I.sourceCode&&(L.source=O.source)),O}finally{(function(e,t,n){0<=(n=d.call(this,e,t,n))&&this._compilations.splice(n,1)}).call(this,t,n,b)}function P(t,o,d,C){var b=!o||o&&o.schema==t;if(o.schema!=n.schema)return e.call(v,t,o,d,C);d=!0===t.$async;var S=a({isTop:!0,schema:t,isRoot:b,baseId:C,root:o,schemaPath:\"\",errSchemaPath:\"#\",errorPath:'\"\"',MissingRefError:s.MissingRef,RULES:B,validate:a,util:i,resolve:r,resolveRef:F,usePattern:D,useDefault:$,useCustomRule:W,opts:I,formats:R,logger:v.logger,self:v});S=m(A,g)+m(w,u)+m(x,f)+m(k,p)+S,I.processCode&&(S=I.processCode(S,t));try{var E=new Function(\"self\",\"RULES\",\"formats\",\"root\",\"refVal\",\"defaults\",\"customRules\",\"equal\",\"ucs2length\",\"ValidationError\",S)(v,B,R,n,A,x,k,l,c,h);A[0]=E}catch(t){throw v.logger.error(\"Error compiling schema, function code:\",S),t}return E.schema=t,E.errors=null,E.refs=y,E.refVal=A,E.root=b?E:o,d&&(E.$async=!0),!0===I.sourceCode&&(E.source={code:S,patterns:w,defaults:x}),E}function F(t,i,s){i=r.url(t,i);var o,a,c,l=y[i];return void 0!==l?M(a=A[l],o=\"refVal[\"+l+\"]\"):!s&&n.refs&&void 0!==(c=n.refs[i])?M(a=n.refVal[c],o=N(i,a)):(o=N(i),void 0!==(c=r.call(v,P,n,i))||(a=C&&C[i])&&(c=r.inlineRef(a,I.inlineRefs)?a:e.call(v,a,n,C,t)),void 0!==c?(t=y[t=i],M(A[t]=c,o)):void delete y[i])}function N(e,t){var n=A.length;return A[n]=t,\"refVal\"+(y[e]=n)}function M(e,t){return\"object\"==typeof e||\"boolean\"==typeof e?{code:t,schema:e,inline:!0}:{code:t,$async:e&&!!e.$async}}function D(e){var t=S[e];return void 0===t&&(t=S[e]=w.length,w[t]=e),\"pattern\"+t}function $(e){switch(typeof e){case\"boolean\":case\"number\":return\"\"+e;case\"string\":return i.toQuotedString(e);case\"object\":if(null===e)return\"null\";var t=o(e),n=E[t];return void 0===n&&(n=E[t]=x.length,x[n]=e),\"default\"+n}}function W(e,t,n,r){if(!1!==v._opts.validateSchema){if((o=e.definition.dependencies)&&!o.every((function(e){return Object.prototype.hasOwnProperty.call(n,e)})))throw new Error(\"parent schema must have all required keywords: \"+o.join(\",\"));if((a=e.definition.validateSchema)&&!a(t)){var i=\"keyword schema is invalid: \"+v.errorsText(a.errors);if(\"log\"!=v._opts.validateSchema)throw new Error(i);v.logger.error(i)}}var s,o,a=e.definition.inline;if(i=e.definition.macro,o=e.definition.compile)s=o.call(v,t,n,r);else if(i)s=i.call(v,t,n,r),!1!==I.validateSchema&&v.validateSchema(s,!0);else if(a)s=a.call(v,r,e.keyword,t,n);else if(!(s=e.definition.validate))return;if(void 0===s)throw new Error('custom keyword \"'+e.keyword+'\"failed to compile');return{code:\"customRule\"+(e=k.length),validate:k[e]=s}}}},3969:function(e,t,n){\"use strict\";var r=n(7533),i=n(2303),s=n(3724),o=n(4293),a=n(500);function c(e,t,n){var r,i,s,a=this._refs[n];if(\"string\"==typeof a){if(!this._refs[a])return c.call(this,e,t,a);a=this._refs[a]}return(a=a||this._schemas[n])instanceof o?f(a.schema,this._opts.inlineRefs)?a.schema:a.validate||this._compile(a):((n=l.call(this,t,n))&&(r=n.schema,t=n.root,s=n.baseId),r instanceof o?i=r.validate||e.call(this,r.schema,t,void 0,s):void 0!==r&&(i=f(r,this._opts.inlineRefs)?r:e.call(this,r,t,void 0,s)),i)}function l(e,t){var n=r.parse(t),i=p(n),s=g(this._getId(e.schema));if(0===Object.keys(e.schema).length||i!==s){var a=C(i);if(\"string\"==typeof(i=this._refs[a]))return(function(e,t,n){var r=l.call(this,e,t);if(r){var i=r.schema;return t=r.baseId,e=r.root,(r=this._getId(i))&&(t=b(t,r)),d.call(this,n,t,i,e)}}).call(this,e,i,n);if(i instanceof o)i.validate||this._compile(i),e=i;else{if(!((i=this._schemas[a])instanceof o))return;if(i.validate||this._compile(i),a==C(t))return{schema:i,root:e,baseId:s};e=i}if(!e.schema)return;s=g(this._getId(e.schema))}return d.call(this,n,s,e.schema,e)}(e.exports=c).normalizeId=C,c.fullPath=g,c.url=b,c.ids=function(e){var t=C(this._getId(e)),n={\"\":t},o={\"\":g(t,!1)},c={},l=this;return a(e,{allKeys:!0},(function(e,t,a,h,d,u,f){if(\"\"!==t){var g=l._getId(e),p=n[h];if(d=o[h]+\"/\"+d,void 0!==f&&(d+=\"/\"+(\"number\"==typeof f?f:s.escapeFragment(f))),\"string\"==typeof g)if(g=p=C(p?r.resolve(p,g):g),\"string\"==typeof(f=l._refs[g])&&(f=l._refs[f]),f&&f.schema){if(!i(e,f.schema))throw new Error('id \"'+g+'\" resolves to more than one schema')}else if(g!=C(d))if(\"#\"==g[0]){if(c[g]&&!i(e,c[g]))throw new Error('id \"'+g+'\" resolves to more than one schema');c[g]=e}else l._refs[g]=d;n[t]=p,o[t]=d}})),c},c.inlineRef=f,c.schema=l;var h=s.toHash([\"properties\",\"patternProperties\",\"enum\",\"dependencies\",\"definitions\"]);function d(e,t,n,r){if(e.fragment=e.fragment||\"\",\"/\"==e.fragment.slice(0,1)){for(var i=e.fragment.split(\"/\"),o=1;o<i.length;o++){var a=i[o];if(a){if(void 0===(n=n[a=s.unescapeFragment(a)]))break;h[a]||((a=this._getId(n))&&(t=b(t,a)),n.$ref&&(a=b(t,n.$ref),(a=l.call(this,r,a))&&(n=a.schema,r=a.root,t=a.baseId)))}}return void 0!==n&&n!==r.schema?{schema:n,root:r,baseId:t}:void 0}}var u=s.toHash([\"type\",\"format\",\"pattern\",\"maxLength\",\"minLength\",\"maxProperties\",\"minProperties\",\"maxItems\",\"minItems\",\"maximum\",\"minimum\",\"uniqueItems\",\"multipleOf\",\"required\",\"enum\"]);function f(e,t){return!1!==t&&(void 0===t||!0===t?function e(t){var n;if(Array.isArray(t)){for(var r=0;r<t.length;r++)if(\"object\"==typeof(n=t[r])&&!e(n))return!1}else for(var i in t){if(\"$ref\"==i)return!1;if(\"object\"==typeof(n=t[i])&&!e(n))return!1}return!0}(e):t?function e(t){var n,r=0;if(Array.isArray(t)){for(var i=0;i<t.length;i++)if(\"object\"==typeof(n=t[i])&&(r+=e(n)),r==1/0)return 1/0}else for(var s in t){if(\"$ref\"==s)return 1/0;if(u[s])r++;else if(\"object\"==typeof(n=t[s])&&(r+=e(n)+1),r==1/0)return 1/0}return r}(e)<=t:void 0)}function g(e,t){return!1!==t&&(e=C(e)),p(r.parse(e))}function p(e){return r.serialize(e).split(\"#\")[0]+\"#\"}var m=/#\\/?$/;function C(e){return e?e.replace(m,\"\"):\"\"}function b(e,t){return t=C(t),r.resolve(e,t)}},742:function(e,t,n){\"use strict\";var r=n(9646),i=n(3724).toHash;e.exports=function(){var e=[{type:\"number\",rules:[{maximum:[\"exclusiveMaximum\"]},{minimum:[\"exclusiveMinimum\"]},\"multipleOf\",\"format\"]},{type:\"string\",rules:[\"maxLength\",\"minLength\",\"pattern\",\"format\"]},{type:\"array\",rules:[\"maxItems\",\"minItems\",\"items\",\"contains\",\"uniqueItems\"]},{type:\"object\",rules:[\"maxProperties\",\"minProperties\",\"required\",\"dependencies\",\"propertyNames\",{properties:[\"additionalProperties\",\"patternProperties\"]}]},{rules:[\"$ref\",\"const\",\"enum\",\"not\",\"anyOf\",\"oneOf\",\"allOf\",\"if\"]}],t=[\"type\",\"$comment\"];return e.all=i(t),e.types=i([\"number\",\"integer\",\"string\",\"array\",\"object\",\"boolean\",\"null\"]),e.forEach((function(n){n.rules=n.rules.map((function(n){var i,s;return\"object\"==typeof n&&(s=n[i=Object.keys(n)[0]],n=i,s.forEach((function(n){t.push(n),e.all[n]=!0}))),t.push(n),e.all[n]={keyword:n,code:r[n],implements:s}})),e.all.$comment={keyword:\"$comment\",code:r.$comment},n.type&&(e.types[n.type]=n)})),e.keywords=i(t.concat([\"$schema\",\"$id\",\"id\",\"$data\",\"$async\",\"title\",\"description\",\"default\",\"definitions\",\"examples\",\"readOnly\",\"writeOnly\",\"contentMediaType\",\"contentEncoding\",\"additionalItems\",\"then\",\"else\"])),e.custom={},e}},4293:function(e,t,n){\"use strict\";var r=n(3724);e.exports=function(e){r.copy(e,this)}},6887:function(e){\"use strict\";e.exports=function(e){for(var t,n=0,r=e.length,i=0;i<r;)n++,55296<=(t=e.charCodeAt(i++))&&t<=56319&&i<r&&56320==(64512&(t=e.charCodeAt(i)))&&i++;return n}},3724:function(e,t,n){\"use strict\";function r(e,t,n,r){var i=r?\" !== \":\" === \",s=r?\" || \":\" && \",o=r?\"!\":\"\",a=r?\"\":\"!\";switch(e){case\"null\":return t+i+\"null\";case\"array\":return o+\"Array.isArray(\"+t+\")\";case\"object\":return\"(\"+o+t+s+\"typeof \"+t+i+'\"object\"'+s+a+\"Array.isArray(\"+t+\"))\";case\"integer\":return\"(typeof \"+t+i+'\"number\"'+s+a+\"(\"+t+\" % 1)\"+s+t+i+t+(n?s+o+\"isFinite(\"+t+\")\":\"\")+\")\";case\"number\":return\"(typeof \"+t+i+'\"'+e+'\"'+(n?s+o+\"isFinite(\"+t+\")\":\"\")+\")\";default:return\"typeof \"+t+i+'\"'+e+'\"'}}e.exports={copy:function(e,t){for(var n in t=t||{},e)t[n]=e[n];return t},checkDataType:r,checkDataTypes:function(e,t,n){if(1===e.length)return r(e[0],t,n,!0);var i,o=\"\";for(i in(e=s(e)).array&&e.object&&(o=e.null?\"(\":\"(!\"+t+\" || \",o+=\"typeof \"+t+' !== \"object\")',delete e.null,delete e.array,delete e.object),e.number&&delete e.integer,e)o+=(o?\" && \":\"\")+r(i,t,n,!0);return o},coerceToTypes:function(e,t){if(!Array.isArray(t))return i[t]?[t]:\"array\"===e&&\"array\"===t?[\"array\"]:void 0;for(var n=[],r=0;r<t.length;r++){var s=t[r];(i[s]||\"array\"===e&&\"array\"===s)&&(n[n.length]=s)}return n.length?n:void 0},toHash:s,getProperty:c,escapeQuotes:l,equal:n(2303),ucs2length:n(6887),varOccurences:function(e,t){return t+=\"[^0-9]\",(t=e.match(new RegExp(t,\"g\")))?t.length:0},varReplace:function(e,t,n){return t+=\"([^0-9])\",n=n.replace(/\\$/g,\"$$$$\"),e.replace(new RegExp(t,\"g\"),n+\"$1\")},schemaHasRules:function(e,t){if(\"boolean\"==typeof e)return!e;for(var n in e)if(t[n])return!0},schemaHasRulesExcept:function(e,t,n){if(\"boolean\"==typeof e)return!e&&\"not\"!=n;for(var r in e)if(r!=n&&t[r])return!0},schemaUnknownRules:function(e,t){if(\"boolean\"!=typeof e)for(var n in e)if(!t[n])return n},toQuotedString:h,getPathExpr:function(e,t,n,r){return f(e,n?\"'/' + \"+t+(r?\"\":\".replace(/~/g, '~0').replace(/\\\\//g, '~1')\"):r?\"'[' + \"+t+\" + ']'\":\"'[\\\\'' + \"+t+\" + '\\\\']'\")},getPath:function(e,t,n){return f(e,t=h(n?\"/\"+g(t):c(t)))},getData:function(e,t,n){var r,i,s;if(\"\"===e)return\"rootData\";if(\"/\"==e[0]){if(!d.test(e))throw new Error(\"Invalid JSON-pointer: \"+e);r=e,i=\"rootData\"}else{if(!(s=e.match(u)))throw new Error(\"Invalid JSON-pointer: \"+e);if(e=+s[1],\"#\"==(r=s[2])){if(t<=e)throw new Error(\"Cannot access property/index \"+e+\" levels up, current level is \"+t);return n[t-e]}if(t<e)throw new Error(\"Cannot access data \"+e+\" levels up, current level is \"+t);if(i=\"data\"+(t-e||\"\"),!r)return i}for(var o=i,a=r.split(\"/\"),l=0;l<a.length;l++){var h=a[l];h&&(o+=\" && \"+(i+=c(p(h))))}return o},unescapeFragment:function(e){return p(decodeURIComponent(e))},unescapeJsonPointer:p,escapeFragment:function(e){return encodeURIComponent(g(e))},escapeJsonPointer:g};var i=s([\"string\",\"number\",\"integer\",\"boolean\",\"null\"]);function s(e){for(var t={},n=0;n<e.length;n++)t[e[n]]=!0;return t}var o=/^[a-z$_][a-z$_0-9]*$/i,a=/'|\\\\/g;function c(e){return\"number\"==typeof e?\"[\"+e+\"]\":o.test(e)?\".\"+e:\"['\"+l(e)+\"']\"}function l(e){return e.replace(a,\"\\\\$&\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/\\f/g,\"\\\\f\").replace(/\\t/g,\"\\\\t\")}function h(e){return\"'\"+l(e)+\"'\"}var d=/^\\/(?:[^~]|~0|~1)*$/,u=/^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/;function f(e,t){return'\"\"'==e?t:(e+\" + \"+t).replace(/([^\\\\])' \\+ '/g,\"$1\")}function g(e){return e.replace(/~/g,\"~0\").replace(/\\//g,\"~1\")}function p(e){return e.replace(/~1/g,\"/\").replace(/~0/g,\"~\")}},9394:function(e){\"use strict\";var t=[\"multipleOf\",\"maximum\",\"exclusiveMaximum\",\"minimum\",\"exclusiveMinimum\",\"maxLength\",\"minLength\",\"pattern\",\"additionalItems\",\"maxItems\",\"minItems\",\"uniqueItems\",\"maxProperties\",\"minProperties\",\"required\",\"additionalProperties\",\"enum\",\"format\",\"const\"];e.exports=function(e,n){for(var r=0;r<n.length;r++){e=JSON.parse(JSON.stringify(e));for(var i=n[r].split(\"/\"),s=e,o=1;o<i.length;o++)s=s[i[o]];for(o=0;o<t.length;o++){var a=t[o],c=s[a];c&&(s[a]={anyOf:[c,{$ref:\"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\"}]})}}return e}},5868:function(e,t,n){\"use strict\";n=n(38),e.exports={$id:\"https://github.com/ajv-validator/ajv/blob/master/lib/definition_schema.js\",definitions:{simpleTypes:n.definitions.simpleTypes},type:\"object\",dependencies:{schema:[\"validate\"],$data:[\"validate\"],statements:[\"inline\"],valid:{not:{required:[\"macro\"]}}},properties:{type:n.properties.type,schema:{type:\"boolean\"},statements:{type:\"boolean\"},dependencies:{type:\"array\",items:{type:\"string\"}},metaSchema:{type:\"object\"},modifying:{type:\"boolean\"},valid:{type:\"boolean\"},$data:{type:\"boolean\"},async:{type:\"boolean\"},errors:{anyOf:[{type:\"boolean\"},{const:\"full\"}]}}}},1796:function(e){\"use strict\";e.exports=function(e,t,n){var r,i,s,o,a,c,l=\" \",h=e.level,d=e.dataLevel,u=e.schema[t],f=e.schemaPath+e.util.getProperty(t),g=e.errSchemaPath+\"/\"+t,p=!e.opts.allErrors,m=\"data\"+(d||\"\"),C=e.opts.$data&&u&&u.$data,b=C?(l+=\" var schema\"+h+\" = \"+e.util.getData(u.$data,d,e.dataPathArr)+\"; \",\"schema\"+h):u,v=\"maximum\"==t,I=v?\"exclusiveMaximum\":\"exclusiveMinimum\",A=e.schema[I],y=e.opts.$data&&A&&A.$data,w=v?\"<\":\">\",S=v?\">\":\"<\",x=void 0;if(!C&&\"number\"!=typeof u&&void 0!==u)throw new Error(t+\" must be number\");if(!y&&void 0!==A&&\"number\"!=typeof A&&\"boolean\"!=typeof A)throw new Error(I+\" must be number or boolean\");y?(s=\"exclIsNumber\"+h,o=\"' + \"+(a=\"op\"+h)+\" + '\",l+=\" var schemaExcl\"+h+\" = \"+e.util.getData(A.$data,d,e.dataPathArr)+\"; \",x=I,(c=c||[]).push(l+=\" var \"+(i=\"exclusive\"+h)+\"; var \"+(d=\"exclType\"+h)+\" = typeof \"+(r=\"schemaExcl\"+h)+\"; if (\"+d+\" != 'boolean' && \"+d+\" != 'undefined' && \"+d+\" != 'number') { \"),l=\"\",!1!==e.createErrors?(l+=\" { keyword: '\"+(x||\"_exclusiveLimit\")+\"' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(g)+\" , params: {} \",!1!==e.opts.messages&&(l+=\" , message: '\"+I+\" should be boolean' \"),e.opts.verbose&&(l+=\" , schema: validate.schema\"+f+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+m+\" \"),l+=\" } \"):l+=\" {} \",E=l,l=c.pop(),l+=!e.compositeRule&&p?e.async?\" throw new ValidationError([\"+E+\"]); \":\" validate.errors = [\"+E+\"]; return false; \":\" var err = \"+E+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",l+=\" } else if ( \",C&&(l+=\" (\"+b+\" !== undefined && typeof \"+b+\" != 'number') || \"),l+=\" \"+d+\" == 'number' ? ( (\"+i+\" = \"+b+\" === undefined || \"+r+\" \"+w+\"= \"+b+\") ? \"+m+\" \"+S+\"= \"+r+\" : \"+m+\" \"+S+\" \"+b+\" ) : ( (\"+i+\" = \"+r+\" === true) ? \"+m+\" \"+S+\"= \"+b+\" : \"+m+\" \"+S+\" \"+b+\" ) || \"+m+\" !== \"+m+\") { var op\"+h+\" = \"+i+\" ? '\"+w+\"' : '\"+w+\"='; \",void 0===u&&(x=I,g=e.errSchemaPath+\"/\"+I,b=r,C=y)):(o=w,(s=\"number\"==typeof A)&&C?(a=\"'\"+o+\"'\",l+=\" if ( \",C&&(l+=\" (\"+b+\" !== undefined && typeof \"+b+\" != 'number') || \"),l+=\" ( \"+b+\" === undefined || \"+A+\" \"+w+\"= \"+b+\" ? \"+m+\" \"+S+\"= \"+A+\" : \"+m+\" \"+S+\" \"+b+\" ) || \"+m+\" !== \"+m+\") { \"):(s&&void 0===u?(i=!0,x=I,g=e.errSchemaPath+\"/\"+I,b=A,S+=\"=\"):(s&&(b=Math[v?\"min\":\"max\"](A,u)),A===(!s||b)?(i=!0,x=I,g=e.errSchemaPath+\"/\"+I,S+=\"=\"):(i=!1,o+=\"=\")),a=\"'\"+o+\"'\",l+=\" if ( \",C&&(l+=\" (\"+b+\" !== undefined && typeof \"+b+\" != 'number') || \"),l+=\" \"+m+\" \"+S+\" \"+b+\" || \"+m+\" !== \"+m+\") { \")),x=x||t,(c=c||[]).push(l),l=\"\",!1!==e.createErrors?(l+=\" { keyword: '\"+(x||\"_limit\")+\"' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(g)+\" , params: { comparison: \"+a+\", limit: \"+b+\", exclusive: \"+i+\" } \",!1!==e.opts.messages&&(l+=\" , message: 'should be \"+o+\" \",l+=C?\"' + \"+b:b+\"'\"),e.opts.verbose&&(l+=\" , schema:  \",l+=C?\"validate.schema\"+f:\"\"+u,l+=\"         , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+m+\" \"),l+=\" } \"):l+=\" {} \";var E=l;return l=c.pop(),l+=!e.compositeRule&&p?e.async?\" throw new ValidationError([\"+E+\"]); \":\" validate.errors = [\"+E+\"]; return false; \":\" var err = \"+E+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",l+=\" } \",p&&(l+=\" else { \"),l}},2407:function(e){\"use strict\";e.exports=function(e,t,n){var r=\" \",i=e.level,s=e.dataLevel,o=e.schema[t],a=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+\"/\"+t,l=!e.opts.allErrors,h=\"data\"+(s||\"\"),d=e.opts.$data&&o&&o.$data;if(s=d?(r+=\" var schema\"+i+\" = \"+e.util.getData(o.$data,s,e.dataPathArr)+\"; \",\"schema\"+i):o,!d&&\"number\"!=typeof o)throw new Error(t+\" must be number\");r+=\"if ( \",d&&(r+=\" (\"+s+\" !== undefined && typeof \"+s+\" != 'number') || \"),i=t;var u=u||[];return u.push(r+=\" \"+h+\".length \"+(\"maxItems\"==t?\">\":\"<\")+\" \"+s+\") { \"),r=\"\",!1!==e.createErrors?(r+=\" { keyword: '\"+(i||\"_limitItems\")+\"' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: { limit: \"+s+\" } \",!1!==e.opts.messages&&(r+=\" , message: 'should NOT have \",r+=\"maxItems\"==t?\"more\":\"fewer\",r+=\" than \",r+=d?\"' + \"+s+\" + '\":\"\"+o,r+=\" items' \"),e.opts.verbose&&(r+=\" , schema:  \",r+=d?\"validate.schema\"+a:\"\"+o,r+=\"         , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+h+\" \"),r+=\" } \"):r+=\" {} \",h=r,r=u.pop(),r+=!e.compositeRule&&l?e.async?\" throw new ValidationError([\"+h+\"]); \":\" validate.errors = [\"+h+\"]; return false; \":\" var err = \"+h+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",r+=\"} \",l&&(r+=\" else { \"),r}},1250:function(e){\"use strict\";e.exports=function(e,t,n){var r=\" \",i=e.level,s=e.dataLevel,o=e.schema[t],a=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+\"/\"+t,l=!e.opts.allErrors,h=\"data\"+(s||\"\"),d=e.opts.$data&&o&&o.$data;if(s=d?(r+=\" var schema\"+i+\" = \"+e.util.getData(o.$data,s,e.dataPathArr)+\"; \",\"schema\"+i):o,!d&&\"number\"!=typeof o)throw new Error(t+\" must be number\");r+=\"if ( \",d&&(r+=\" (\"+s+\" !== undefined && typeof \"+s+\" != 'number') || \"),r+=!1===e.opts.unicode?\" \"+h+\".length \":\" ucs2length(\"+h+\") \",r+=\" \"+(i=\"maxLength\"==t?\">\":\"<\")+\" \"+s+\") { \",i=t;var u=u||[];return u.push(r),r=\"\",!1!==e.createErrors?(r+=\" { keyword: '\"+(i||\"_limitLength\")+\"' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: { limit: \"+s+\" } \",!1!==e.opts.messages&&(r+=\" , message: 'should NOT be \",r+=\"maxLength\"==t?\"longer\":\"shorter\",r+=\" than \",r+=d?\"' + \"+s+\" + '\":\"\"+o,r+=\" characters' \"),e.opts.verbose&&(r+=\" , schema:  \",r+=d?\"validate.schema\"+a:\"\"+o,r+=\"         , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+h+\" \"),r+=\" } \"):r+=\" {} \",h=r,r=u.pop(),r+=!e.compositeRule&&l?e.async?\" throw new ValidationError([\"+h+\"]); \":\" validate.errors = [\"+h+\"]; return false; \":\" var err = \"+h+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",r+=\"} \",l&&(r+=\" else { \"),r}},2596:function(e){\"use strict\";e.exports=function(e,t,n){var r=\" \",i=e.level,s=e.dataLevel,o=e.schema[t],a=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+\"/\"+t,l=!e.opts.allErrors,h=\"data\"+(s||\"\"),d=e.opts.$data&&o&&o.$data;if(s=d?(r+=\" var schema\"+i+\" = \"+e.util.getData(o.$data,s,e.dataPathArr)+\"; \",\"schema\"+i):o,!d&&\"number\"!=typeof o)throw new Error(t+\" must be number\");r+=\"if ( \",d&&(r+=\" (\"+s+\" !== undefined && typeof \"+s+\" != 'number') || \"),i=t;var u=u||[];return u.push(r+=\" Object.keys(\"+h+\").length \"+(\"maxProperties\"==t?\">\":\"<\")+\" \"+s+\") { \"),r=\"\",!1!==e.createErrors?(r+=\" { keyword: '\"+(i||\"_limitProperties\")+\"' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: { limit: \"+s+\" } \",!1!==e.opts.messages&&(r+=\" , message: 'should NOT have \",r+=\"maxProperties\"==t?\"more\":\"fewer\",r+=\" than \",r+=d?\"' + \"+s+\" + '\":\"\"+o,r+=\" properties' \"),e.opts.verbose&&(r+=\" , schema:  \",r+=d?\"validate.schema\"+a:\"\"+o,r+=\"         , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+h+\" \"),r+=\" } \"):r+=\" {} \",h=r,r=u.pop(),r+=!e.compositeRule&&l?e.async?\" throw new ValidationError([\"+h+\"]); \":\" validate.errors = [\"+h+\"]; return false; \":\" var err = \"+h+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",r+=\"} \",l&&(r+=\" else { \"),r}},9486:function(e){\"use strict\";e.exports=function(e,t,n){var r=\" \",i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),o=e.errSchemaPath+\"/\"+t,a=!e.opts.allErrors,c=e.util.copy(e),l=\"\";c.level++;var h=\"valid\"+c.level,d=c.baseId,u=!0,f=i;if(f)for(var g,p=-1,m=f.length-1;p<m;)g=f[p+=1],(e.opts.strictKeywords?\"object\"==typeof g&&0<Object.keys(g).length||!1===g:e.util.schemaHasRules(g,e.RULES.all))&&(u=!1,c.schema=g,c.schemaPath=s+\"[\"+p+\"]\",c.errSchemaPath=o+\"/\"+p,r+=\"  \"+e.validate(c)+\" \",c.baseId=d,a&&(r+=\" if (\"+h+\") { \",l+=\"}\"));return a&&(r+=u?\" if (true) { \":\" \"+l.slice(0,-1)+\" \"),r}},5347:function(e){\"use strict\";e.exports=function(e,t,n){var r=\" \",i=e.level,s=e.dataLevel,o=e.schema[t],a=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+\"/\"+t,l=!e.opts.allErrors,h=(t=\"data\"+(s||\"\"),\"valid\"+i),d=(s=\"errs__\"+i,e.util.copy(e)),u=\"\";d.level++;var f=\"valid\"+d.level;if(o.every((function(t){return e.opts.strictKeywords?\"object\"==typeof t&&0<Object.keys(t).length||!1===t:e.util.schemaHasRules(t,e.RULES.all)}))){var g=d.baseId;r+=\" var \"+s+\" = errors; var \"+h+\" = false;  \",i=e.compositeRule,e.compositeRule=d.compositeRule=!0;var p=o;if(p)for(var m,C=-1,b=p.length-1;C<b;)m=p[C+=1],d.schema=m,d.schemaPath=a+\"[\"+C+\"]\",d.errSchemaPath=c+\"/\"+C,r+=\"  \"+e.validate(d)+\" \",d.baseId=g,r+=\" \"+h+\" = \"+h+\" || \"+f+\"; if (!\"+h+\") { \",u+=\"}\";e.compositeRule=d.compositeRule=i,r+=\" \"+u+\" if (!\"+h+\") {   var err =   \",!1!==e.createErrors?(r+=\" { keyword: 'anyOf' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: {} \",!1!==e.opts.messages&&(r+=\" , message: 'should match some schema in anyOf' \"),e.opts.verbose&&(r+=\" , schema: validate.schema\"+a+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+t+\" \"),r+=\" } \"):r+=\" {} \",r+=\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",!e.compositeRule&&l&&(r+=e.async?\" throw new ValidationError(vErrors); \":\" validate.errors = vErrors; return false; \"),r+=\" } else {  errors = \"+s+\"; if (vErrors !== null) { if (\"+s+\") vErrors.length = \"+s+\"; else vErrors = null; } \",e.opts.allErrors&&(r+=\" } \")}else l&&(r+=\" if (true) { \");return r}},923:function(e){\"use strict\";e.exports=function(e,t,n){var r=\" \",i=e.schema[t];return t=e.errSchemaPath+\"/\"+t,i=e.util.toQuotedString(i),!0===e.opts.$comment?r+=\" console.log(\"+i+\");\":\"function\"==typeof e.opts.$comment&&(r+=\" self._opts.$comment(\"+i+\", \"+e.util.toQuotedString(t)+\", validate.root.schema);\"),r}},2617:function(e){\"use strict\";e.exports=function(e,t,n){var r=\" \",i=e.level,s=e.dataLevel,o=e.schema[t],a=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+\"/\"+t,l=!e.opts.allErrors,h=\"data\"+(s||\"\"),d=\"valid\"+i;(t=e.opts.$data&&o&&o.$data)&&(r+=\" var schema\"+i+\" = \"+e.util.getData(o.$data,s,e.dataPathArr)+\"; \"),t||(r+=\" var schema\"+i+\" = validate.schema\"+a+\";\");var u=u||[];return u.push(r+=\"var \"+d+\" = equal(\"+h+\", schema\"+i+\"); if (!\"+d+\") {   \"),r=\"\",!1!==e.createErrors?(r+=\" { keyword: 'const' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: { allowedValue: schema\"+i+\" } \",!1!==e.opts.messages&&(r+=\" , message: 'should be equal to constant' \"),e.opts.verbose&&(r+=\" , schema: validate.schema\"+a+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+h+\" \"),r+=\" } \"):r+=\" {} \",h=r,r=u.pop(),r+=!e.compositeRule&&l?e.async?\" throw new ValidationError([\"+h+\"]); \":\" validate.errors = [\"+h+\"]; return false; \":\" var err = \"+h+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",r+=\" }\",l&&(r+=\" else { \"),r}},2119:function(e){\"use strict\";e.exports=function(e,t,n){var r=\" \",i=e.level,s=e.dataLevel,o=e.schema[t],a=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+\"/\"+t,l=!e.opts.allErrors,h=\"data\"+(s||\"\"),d=\"valid\"+i,u=\"errs__\"+i,f=e.util.copy(e);f.level++;var g=\"valid\"+f.level,p=\"i\"+i,m=f.dataLevel=e.dataLevel+1;t=\"data\"+m,s=e.baseId,r+=\"var \"+u+\" = errors;var \"+d+\";\",(i=e.opts.strictKeywords?\"object\"==typeof o&&0<Object.keys(o).length||!1===o:e.util.schemaHasRules(o,e.RULES.all))?(d=e.compositeRule,e.compositeRule=f.compositeRule=!0,f.schema=o,f.schemaPath=a,f.errSchemaPath=c,r+=\" var \"+g+\" = false; for (var \"+p+\" = 0; \"+p+\" < \"+h+\".length; \"+p+\"++) { \",f.errorPath=e.util.getPathExpr(e.errorPath,p,e.opts.jsonPointers,!0),o=h+\"[\"+p+\"]\",f.dataPathArr[m]=p,p=e.validate(f),f.baseId=s,e.util.varOccurences(p,t)<2?r+=\" \"+e.util.varReplace(p,t,o)+\" \":r+=\" var \"+t+\" = \"+o+\"; \"+p+\" \",r+=\" if (\"+g+\") break; }  \",e.compositeRule=f.compositeRule=d,r+=\"  if (!\"+g+\") {\"):r+=\" if (\"+h+\".length == 0) {\";var C=C||[];return C.push(r),r=\"\",!1!==e.createErrors?(r+=\" { keyword: 'contains' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: {} \",!1!==e.opts.messages&&(r+=\" , message: 'should contain a valid item' \"),e.opts.verbose&&(r+=\" , schema: validate.schema\"+a+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+h+\" \"),r+=\" } \"):r+=\" {} \",h=r,r=C.pop(),r+=!e.compositeRule&&l?e.async?\" throw new ValidationError([\"+h+\"]); \":\" validate.errors = [\"+h+\"]; return false; \":\" var err = \"+h+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",r+=\" } else { \",i&&(r+=\"  errors = \"+u+\"; if (vErrors !== null) { if (\"+u+\") vErrors.length = \"+u+\"; else vErrors = null; } \"),e.opts.allErrors&&(r+=\" } \"),r}},1793:function(e){\"use strict\";e.exports=function(e,t,n){var r,i,s,o,a=\" \",c=e.level,l=e.dataLevel,h=e.schema[t],d=e.schemaPath+e.util.getProperty(t),u=e.errSchemaPath+\"/\"+t,f=!e.opts.allErrors,g=\"data\"+(l||\"\"),p=\"valid\"+c,m=\"errs__\"+c,C=e.opts.$data&&h&&h.$data,b=C?(a+=\" var schema\"+c+\" = \"+e.util.getData(h.$data,l,e.dataPathArr)+\"; \",\"schema\"+c):h,v=\"definition\"+c,I=this.definition,A=\"\";if(C&&I.$data){var y=I.validateSchema;a+=\" var \"+v+\" = RULES.custom['\"+t+\"'].definition; var \"+(o=\"keywordValidate\"+c)+\" = \"+v+\".validate;\"}else{if(!(S=e.useCustomRule(this,h,e.schema,e)))return;b=\"validate.schema\"+d,o=S.code,r=I.compile,i=I.inline,s=I.macro}var w,S,x,E,k,_=o+\".errors\",T=\"i\"+c;if(t=\"ruleErr\"+c,(h=I.async)&&!e.async)throw new Error(\"async keyword in sync schema\");return i||s||(a+=_+\" = null;\"),a+=\"var \"+m+\" = errors;var \"+p+\";\",C&&I.$data&&(A+=\"}\",a+=\" if (\"+b+\" === undefined) { \"+p+\" = true; } else { \",y&&(A+=\"}\",a+=\" \"+p+\" = \"+v+\".validateSchema(\"+b+\"); if (\"+p+\") { \")),i?a+=I.statements?\" \"+S.validate+\" \":\" \"+p+\" = \"+S.validate+\"; \":s?(A=\"\",(y=e.util.copy(e)).level++,w=\"valid\"+y.level,y.schema=S.validate,y.schemaPath=\"\",v=e.compositeRule,e.compositeRule=y.compositeRule=!0,S=e.validate(y).replace(/validate\\.schema/g,o),e.compositeRule=y.compositeRule=v,a+=\" \"+S):((k=k||[]).push(a),a=\"\",a+=\"  \"+o+\".call( \",a+=e.opts.passContext?\"this\":\"self\",a+=r||!1===I.schema?\" , \"+g+\" \":\" , \"+b+\" , \"+g+\" , validate.schema\"+e.schemaPath+\" \",a+=\" , (dataPath || '')\",'\"\"'!=e.errorPath&&(a+=\" + \"+e.errorPath),l=a+=\" , \"+(x=l?\"data\"+(l-1||\"\"):\"parentData\")+\" , \"+(E=l?e.dataPathArr[l]:\"parentDataProperty\")+\" , rootData )  \",a=k.pop(),!1===I.errors?(a+=\" \"+p+\" = \",h&&(a+=\"await \"),a+=l+\"; \"):a+=h?\" var \"+(_=\"customErrors\"+c)+\" = null; try { \"+p+\" = await \"+l+\"; } catch (e) { \"+p+\" = false; if (e instanceof ValidationError) \"+_+\" = e.errors; else throw e; } \":\" \"+_+\" = null; \"+p+\" = \"+l+\"; \"),I.modifying&&(a+=\" if (\"+x+\") \"+g+\" = \"+x+\"[\"+E+\"];\"),a+=\"\"+A,I.valid?f&&(a+=\" if (true) { \"):(a+=\" if ( \",void 0===I.valid?(a+=\" !\",a+=s?\"\"+w:p):a+=\" \"+!I.valid+\" \",w=this.keyword,(k=k||[]).push(a+=\") { \"),(k=k||[]).push(a=\"\"),a=\"\",!1!==e.createErrors?(a+=\" { keyword: '\"+(w||\"custom\")+\"' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(u)+\" , params: { keyword: '\"+this.keyword+\"' } \",!1!==e.opts.messages&&(a+=\" , message: 'should pass \\\"\"+this.keyword+\"\\\" keyword validation' \"),e.opts.verbose&&(a+=\" , schema: validate.schema\"+d+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+g+\" \"),a+=\" } \"):a+=\" {} \",p=a,a=k.pop(),p=a+=!e.compositeRule&&f?e.async?\" throw new ValidationError([\"+p+\"]); \":\" validate.errors = [\"+p+\"]; return false; \":\" var err = \"+p+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",a=k.pop(),i?I.errors?\"full\"!=I.errors&&(a+=\"  for (var \"+T+\"=\"+m+\"; \"+T+\"<errors; \"+T+\"++) { var \"+t+\" = vErrors[\"+T+\"]; if (\"+t+\".dataPath === undefined) \"+t+\".dataPath = (dataPath || '') + \"+e.errorPath+\"; if (\"+t+\".schemaPath === undefined) { \"+t+'.schemaPath = \"'+u+'\"; } ',e.opts.verbose&&(a+=\" \"+t+\".schema = \"+b+\"; \"+t+\".data = \"+g+\"; \"),a+=\" } \"):!1===I.errors?a+=\" \"+p+\" \":(a+=\" if (\"+m+\" == errors) { \"+p+\" } else {  for (var \"+T+\"=\"+m+\"; \"+T+\"<errors; \"+T+\"++) { var \"+t+\" = vErrors[\"+T+\"]; if (\"+t+\".dataPath === undefined) \"+t+\".dataPath = (dataPath || '') + \"+e.errorPath+\"; if (\"+t+\".schemaPath === undefined) { \"+t+'.schemaPath = \"'+u+'\"; } ',e.opts.verbose&&(a+=\" \"+t+\".schema = \"+b+\"; \"+t+\".data = \"+g+\"; \"),a+=\" } } \"):s?(a+=\"   var err =   \",!1!==e.createErrors?(a+=\" { keyword: '\"+(w||\"custom\")+\"' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(u)+\" , params: { keyword: '\"+this.keyword+\"' } \",!1!==e.opts.messages&&(a+=\" , message: 'should pass \\\"\"+this.keyword+\"\\\" keyword validation' \"),e.opts.verbose&&(a+=\" , schema: validate.schema\"+d+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+g+\" \"),a+=\" } \"):a+=\" {} \",a+=\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",!e.compositeRule&&f&&(a+=e.async?\" throw new ValidationError(vErrors); \":\" validate.errors = vErrors; return false; \")):!1===I.errors?a+=\" \"+p+\" \":(a+=\" if (Array.isArray(\"+_+\")) { if (vErrors === null) vErrors = \"+_+\"; else vErrors = vErrors.concat(\"+_+\"); errors = vErrors.length;  for (var \"+T+\"=\"+m+\"; \"+T+\"<errors; \"+T+\"++) { var \"+t+\" = vErrors[\"+T+\"]; if (\"+t+\".dataPath === undefined) \"+t+\".dataPath = (dataPath || '') + \"+e.errorPath+\";  \"+t+'.schemaPath = \"'+u+'\";  ',e.opts.verbose&&(a+=\" \"+t+\".schema = \"+b+\"; \"+t+\".data = \"+g+\"; \"),a+=\" } } else { \"+p+\" } \"),a+=\" } \",f&&(a+=\" else { \")),a}},9115:function(e){\"use strict\";e.exports=function(e,t,n){var r=\" \",i=e.level,s=e.dataLevel,o=e.schema[t],a=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+\"/\"+t,l=!e.opts.allErrors,h=\"data\"+(s||\"\"),d=(s=\"errs__\"+i,e.util.copy(e)),u=\"\";d.level++;var f,g=\"valid\"+d.level,p={},m={},C=e.opts.ownProperties;for(B in o)\"__proto__\"!=B&&(L=o[B],(f=Array.isArray(L)?m:p)[B]=L);r+=\"var \"+s+\" = errors;\";var b=e.errorPath;for(B in r+=\"var missing\"+i+\";\",m)if((f=m[B]).length){if(r+=\" if ( \"+h+e.util.getProperty(B)+\" !== undefined \",C&&(r+=\" && Object.prototype.hasOwnProperty.call(\"+h+\", '\"+e.util.escapeQuotes(B)+\"') \"),l){r+=\" && ( \";var v=f;if(v)for(var I=-1,A=v.length-1;I<A;)E=v[I+=1],I&&(r+=\" || \"),r+=\" ( ( \"+(R=h+(T=e.util.getProperty(E)))+\" === undefined \",C&&(r+=\" || ! Object.prototype.hasOwnProperty.call(\"+h+\", '\"+e.util.escapeQuotes(E)+\"') \"),r+=\") && (missing\"+i+\" = \"+e.util.toQuotedString(e.opts.jsonPointers?E:T)+\") ) \";r+=\")) {  \";var y=\"missing\"+i,w=\"' + \"+y+\" + '\";e.opts._errorDataPathProperty&&(e.errorPath=e.opts.jsonPointers?e.util.getPathExpr(b,y,!0):b+\" + \"+y);var S=S||[];S.push(r),r=\"\",!1!==e.createErrors?(r+=\" { keyword: 'dependencies' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: { property: '\"+e.util.escapeQuotes(B)+\"', missingProperty: '\"+w+\"', depsCount: \"+f.length+\", deps: '\"+e.util.escapeQuotes(1==f.length?f[0]:f.join(\", \"))+\"' } \",!1!==e.opts.messages&&(r+=\" , message: 'should have \",r+=1==f.length?\"property \"+e.util.escapeQuotes(f[0]):\"properties \"+e.util.escapeQuotes(f.join(\", \")),r+=\" when property \"+e.util.escapeQuotes(B)+\" is present' \"),e.opts.verbose&&(r+=\" , schema: validate.schema\"+a+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+h+\" \"),r+=\" } \"):r+=\" {} \",y=r,r=S.pop(),r+=!e.compositeRule&&l?e.async?\" throw new ValidationError([\"+y+\"]); \":\" validate.errors = [\"+y+\"]; return false; \":\" var err = \"+y+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \"}else{r+=\" ) { \";var x=f;if(x)for(var E,k=-1,_=x.length-1;k<_;){E=x[k+=1];var T=e.util.getProperty(E),R=(w=e.util.escapeQuotes(E),h+T);e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPath(b,E,e.opts.jsonPointers)),r+=\" if ( \"+R+\" === undefined \",C&&(r+=\" || ! Object.prototype.hasOwnProperty.call(\"+h+\", '\"+e.util.escapeQuotes(E)+\"') \"),r+=\") {  var err =   \",!1!==e.createErrors?(r+=\" { keyword: 'dependencies' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: { property: '\"+e.util.escapeQuotes(B)+\"', missingProperty: '\"+w+\"', depsCount: \"+f.length+\", deps: '\"+e.util.escapeQuotes(1==f.length?f[0]:f.join(\", \"))+\"' } \",!1!==e.opts.messages&&(r+=\" , message: 'should have \",r+=1==f.length?\"property \"+e.util.escapeQuotes(f[0]):\"properties \"+e.util.escapeQuotes(f.join(\", \")),r+=\" when property \"+e.util.escapeQuotes(B)+\" is present' \"),e.opts.verbose&&(r+=\" , schema: validate.schema\"+a+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+h+\" \"),r+=\" } \"):r+=\" {} \",r+=\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } \"}}r+=\" }   \",l&&(u+=\"}\",r+=\" else { \")}e.errorPath=b;var B,O=d.baseId;for(B in p){var L=p[B];(e.opts.strictKeywords?\"object\"==typeof L&&0<Object.keys(L).length||!1===L:e.util.schemaHasRules(L,e.RULES.all))&&(r+=\" \"+g+\" = true; if ( \"+h+e.util.getProperty(B)+\" !== undefined \",C&&(r+=\" && Object.prototype.hasOwnProperty.call(\"+h+\", '\"+e.util.escapeQuotes(B)+\"') \"),r+=\") { \",d.schema=L,d.schemaPath=a+e.util.getProperty(B),d.errSchemaPath=c+\"/\"+e.util.escapeFragment(B),r+=\"  \"+e.validate(d)+\" \",d.baseId=O,r+=\" }  \",l&&(r+=\" if (\"+g+\") { \",u+=\"}\"))}return l&&(r+=\"   \"+u+\" if (\"+s+\" == errors) {\"),r}},9317:function(e){\"use strict\";e.exports=function(e,t,n){var r=\" \",i=e.level,s=e.dataLevel,o=e.schema[t],a=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+\"/\"+t,l=!e.opts.allErrors,h=\"data\"+(s||\"\"),d=\"valid\"+i;(t=e.opts.$data&&o&&o.$data)&&(r+=\" var schema\"+i+\" = \"+e.util.getData(o.$data,s,e.dataPathArr)+\"; \"),o=\"schema\"+i,t||(r+=\" var \"+o+\" = validate.schema\"+a+\";\"),r+=\"var \"+d+\";\",t&&(r+=\" if (schema\"+i+\" === undefined) \"+d+\" = true; else if (!Array.isArray(schema\"+i+\")) \"+d+\" = false; else {\"),r+=d+\" = false;for (var \"+(s=\"i\"+i)+\"=0; \"+s+\"<\"+o+\".length; \"+s+\"++) if (equal(\"+h+\", \"+o+\"[\"+s+\"])) { \"+d+\" = true; break; }\",t&&(r+=\"  }  \");var u=u||[];return u.push(r+=\" if (!\"+d+\") {   \"),r=\"\",!1!==e.createErrors?(r+=\" { keyword: 'enum' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: { allowedValues: schema\"+i+\" } \",!1!==e.opts.messages&&(r+=\" , message: 'should be equal to one of the allowed values' \"),e.opts.verbose&&(r+=\" , schema: validate.schema\"+a+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+h+\" \"),r+=\" } \"):r+=\" {} \",h=r,r=u.pop(),r+=!e.compositeRule&&l?e.async?\" throw new ValidationError([\"+h+\"]); \":\" validate.errors = [\"+h+\"]; return false; \":\" var err = \"+h+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",r+=\" }\",l&&(r+=\" else { \"),r}},8327:function(e){\"use strict\";e.exports=function(e,t,n){var r=\" \",i=e.level,s=e.dataLevel,o=e.schema[t],a=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+\"/\"+t,l=!e.opts.allErrors,h=\"data\"+(s||\"\");if(!1===e.opts.format)return l&&(r+=\" if (true) { \"),r;var d,u=e.opts.$data&&o&&o.$data,f=u?(r+=\" var schema\"+i+\" = \"+e.util.getData(o.$data,s,e.dataPathArr)+\"; \",\"schema\"+i):o;if(t=e.opts.unknownFormats,s=Array.isArray(t),u)r+=\" var \"+(d=\"format\"+i)+\" = formats[\"+f+\"]; var \"+(g=\"isObject\"+i)+\" = typeof \"+d+\" == 'object' && !(\"+d+\" instanceof RegExp) && \"+d+\".validate; var \"+(m=\"formatType\"+i)+\" = \"+g+\" && \"+d+\".type || 'string'; if (\"+g+\") { \",e.async&&(r+=\" var async\"+i+\" = \"+d+\".async; \"),r+=\" \"+d+\" = \"+d+\".validate; } if (  \",u&&(r+=\" (\"+f+\" !== undefined && typeof \"+f+\" != 'string') || \"),r+=\" (\",\"ignore\"!=t&&(r+=\" (\"+f+\" && !\"+d+\" \",s&&(r+=\" && self._opts.unknownFormats.indexOf(\"+f+\") == -1 \"),r+=\") || \"),r+=\" (\"+d+\" && \"+m+\" == '\"+n+\"' && !(typeof \"+d+\" == 'function' ? \",r+=e.async?\" (async\"+i+\" ? await \"+d+\"(\"+h+\") : \"+d+\"(\"+h+\")) \":\" \"+d+\"(\"+h+\") \",r+=\" : \"+d+\".test(\"+h+\"))))) {\";else{if(!(d=e.formats[o])){if(\"ignore\"==t)return e.logger.warn('unknown format \"'+o+'\" ignored in schema at path \"'+e.errSchemaPath+'\"'),l&&(r+=\" if (true) { \"),r;if(s&&0<=t.indexOf(o))return l&&(r+=\" if (true) { \"),r;throw new Error('unknown format \"'+o+'\" is used in schema at path \"'+e.errSchemaPath+'\"')}var g,p,m=(g=\"object\"==typeof d&&!(d instanceof RegExp)&&d.validate)&&d.type||\"string\";if(g&&(p=!0===d.async,d=d.validate),m!=n)return l&&(r+=\" if (true) { \"),r;if(p){if(!e.async)throw new Error(\"async format in sync schema\");r+=\" if (!(await \"+(C=\"formats\"+e.util.getProperty(o)+\".validate\")+\"(\"+h+\"))) { \"}else{r+=\" if (! \";var C=\"formats\"+e.util.getProperty(o);g&&(C+=\".validate\"),r+=\"function\"==typeof d?\" \"+C+\"(\"+h+\") \":\" \"+C+\".test(\"+h+\") \",r+=\") { \"}}var b=b||[];return b.push(r),r=\"\",!1!==e.createErrors?(r+=\" { keyword: 'format' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: { format:  \",r+=u?\"\"+f:\"\"+e.util.toQuotedString(o),r+=\"  } \",!1!==e.opts.messages&&(r+=\" , message: 'should match format \\\"\",r+=u?\"' + \"+f+\" + '\":\"\"+e.util.escapeQuotes(o),r+=\"\\\"' \"),e.opts.verbose&&(r+=\" , schema:  \",r+=u?\"validate.schema\"+a:\"\"+e.util.toQuotedString(o),r+=\"         , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+h+\" \"),r+=\" } \"):r+=\" {} \",h=r,r=b.pop(),r+=!e.compositeRule&&l?e.async?\" throw new ValidationError([\"+h+\"]); \":\" validate.errors = [\"+h+\"]; return false; \":\" var err = \"+h+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",r+=\" } \",l&&(r+=\" else { \"),r}},5926:function(e){\"use strict\";e.exports=function(e,t,n){var r=\" \",i=e.level,s=e.dataLevel,o=e.schema[t],a=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+\"/\"+t,l=!e.opts.allErrors,h=\"data\"+(s||\"\"),d=\"valid\"+i,u=\"errs__\"+i,f=e.util.copy(e);f.level++;var g,p=\"valid\"+f.level,m=(t=e.schema.else,s=void 0!==(m=e.schema.then)&&(e.opts.strictKeywords?\"object\"==typeof m&&0<Object.keys(m).length||!1===m:e.util.schemaHasRules(m,e.RULES.all)),void 0!==t&&(e.opts.strictKeywords?\"object\"==typeof t&&0<Object.keys(t).length||!1===t:e.util.schemaHasRules(t,e.RULES.all)));return t=f.baseId,s||m?(f.createErrors=!1,f.schema=o,f.schemaPath=a,f.errSchemaPath=c,r+=\" var \"+u+\" = errors; var \"+d+\" = true;  \",o=e.compositeRule,e.compositeRule=f.compositeRule=!0,r+=\"  \"+e.validate(f)+\" \",f.baseId=t,f.createErrors=!0,r+=\"  errors = \"+u+\"; if (vErrors !== null) { if (\"+u+\") vErrors.length = \"+u+\"; else vErrors = null; }  \",e.compositeRule=f.compositeRule=o,s?(r+=\" if (\"+p+\") {  \",f.schema=e.schema.then,f.schemaPath=e.schemaPath+\".then\",f.errSchemaPath=e.errSchemaPath+\"/then\",r+=\"  \"+e.validate(f)+\" \",f.baseId=t,r+=\" \"+d+\" = \"+p+\"; \",s&&m?r+=\" var \"+(g=\"ifClause\"+i)+\" = 'then'; \":g=\"'then'\",r+=\" } \",m&&(r+=\" else { \")):r+=\" if (!\"+p+\") { \",m&&(f.schema=e.schema.else,f.schemaPath=e.schemaPath+\".else\",f.errSchemaPath=e.errSchemaPath+\"/else\",r+=\"  \"+e.validate(f)+\" \",f.baseId=t,r+=\" \"+d+\" = \"+p+\"; \",s&&m?r+=\" var \"+(g=\"ifClause\"+i)+\" = 'else'; \":g=\"'else'\",r+=\" } \"),r+=\" if (!\"+d+\") {   var err =   \",!1!==e.createErrors?(r+=\" { keyword: 'if' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: { failingKeyword: \"+g+\" } \",!1!==e.opts.messages&&(r+=\" , message: 'should match \\\"' + \"+g+\" + '\\\" schema' \"),e.opts.verbose&&(r+=\" , schema: validate.schema\"+a+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+h+\" \"),r+=\" } \"):r+=\" {} \",r+=\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",!e.compositeRule&&l&&(r+=e.async?\" throw new ValidationError(vErrors); \":\" validate.errors = vErrors; return false; \"),r+=\" }   \",l&&(r+=\" else { \")):l&&(r+=\" if (true) { \"),r}},9646:function(e,t,n){\"use strict\";e.exports={$ref:n(2331),allOf:n(9486),anyOf:n(5347),$comment:n(923),const:n(2617),contains:n(2119),dependencies:n(9115),enum:n(9317),format:n(8327),if:n(5926),items:n(392),maximum:n(1796),minimum:n(1796),maxItems:n(2407),minItems:n(2407),maxLength:n(1250),minLength:n(1250),maxProperties:n(2596),minProperties:n(2596),multipleOf:n(6039),not:n(7946),oneOf:n(9344),pattern:n(9737),properties:n(2537),propertyNames:n(2127),required:n(1204),uniqueItems:n(1985),validate:n(1869)}},392:function(e){\"use strict\";e.exports=function(e,t,n){var r=\" \",i=e.level,s=e.dataLevel,o=e.schema[t],a=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+\"/\"+t,l=!e.opts.allErrors,h=\"data\"+(s||\"\"),d=\"valid\"+i,u=\"errs__\"+i,f=e.util.copy(e),g=\"\";f.level++;var p=\"valid\"+f.level,m=(t=\"i\"+i,f.dataLevel=e.dataLevel+1),C=\"data\"+m,b=e.baseId;if(r+=\"var \"+u+\" = errors;var \"+d+\";\",Array.isArray(o)){var v;!1===(s=e.schema.additionalItems)&&(r+=\" \"+d+\" = \"+h+\".length <= \"+o.length+\"; \",i=c,c=e.errSchemaPath+\"/additionalItems\",(v=v||[]).push(r+=\"  if (!\"+d+\") {   \"),r=\"\",!1!==e.createErrors?(r+=\" { keyword: 'additionalItems' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: { limit: \"+o.length+\" } \",!1!==e.opts.messages&&(r+=\" , message: 'should NOT have more than \"+o.length+\" items' \"),e.opts.verbose&&(r+=\" , schema: false , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+h+\" \"),r+=\" } \"):r+=\" {} \",d=r,r=v.pop(),r+=!e.compositeRule&&l?e.async?\" throw new ValidationError([\"+d+\"]); \":\" validate.errors = [\"+d+\"]; return false; \":\" var err = \"+d+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",r+=\" } \",c=i,l&&(g+=\"}\",r+=\" else { \"));var I=o;if(I)for(var A=-1,y=I.length-1;A<y;){var w,S,x=I[A+=1];(e.opts.strictKeywords?\"object\"==typeof x&&0<Object.keys(x).length||!1===x:e.util.schemaHasRules(x,e.RULES.all))&&(r+=\" \"+p+\" = true; if (\"+h+\".length > \"+A+\") { \",w=h+\"[\"+A+\"]\",f.schema=x,f.schemaPath=a+\"[\"+A+\"]\",f.errSchemaPath=c+\"/\"+A,f.errorPath=e.util.getPathExpr(e.errorPath,A,e.opts.jsonPointers,!0),f.dataPathArr[m]=A,S=e.validate(f),f.baseId=b,e.util.varOccurences(S,C)<2?r+=\" \"+e.util.varReplace(S,C,w)+\" \":r+=\" var \"+C+\" = \"+w+\"; \"+S+\" \",r+=\" }  \",l&&(r+=\" if (\"+p+\") { \",g+=\"}\"))}\"object\"==typeof s&&(e.opts.strictKeywords?\"object\"==typeof s&&0<Object.keys(s).length||!1===s:e.util.schemaHasRules(s,e.RULES.all))&&(f.schema=s,f.schemaPath=e.schemaPath+\".additionalItems\",f.errSchemaPath=e.errSchemaPath+\"/additionalItems\",r+=\" \"+p+\" = true; if (\"+h+\".length > \"+o.length+\") {  for (var \"+t+\" = \"+o.length+\"; \"+t+\" < \"+h+\".length; \"+t+\"++) { \",f.errorPath=e.util.getPathExpr(e.errorPath,t,e.opts.jsonPointers,!0),w=h+\"[\"+t+\"]\",f.dataPathArr[m]=t,S=e.validate(f),f.baseId=b,e.util.varOccurences(S,C)<2?r+=\" \"+e.util.varReplace(S,C,w)+\" \":r+=\" var \"+C+\" = \"+w+\"; \"+S+\" \",l&&(r+=\" if (!\"+p+\") break; \"),r+=\" } }  \",l&&(r+=\" if (\"+p+\") { \",g+=\"}\"))}else(e.opts.strictKeywords?\"object\"==typeof o&&0<Object.keys(o).length||!1===o:e.util.schemaHasRules(o,e.RULES.all))&&(f.schema=o,f.schemaPath=a,f.errSchemaPath=c,r+=\"  for (var \"+t+\" = 0; \"+t+\" < \"+h+\".length; \"+t+\"++) { \",f.errorPath=e.util.getPathExpr(e.errorPath,t,e.opts.jsonPointers,!0),w=h+\"[\"+t+\"]\",f.dataPathArr[m]=t,S=e.validate(f),f.baseId=b,e.util.varOccurences(S,C)<2?r+=\" \"+e.util.varReplace(S,C,w)+\" \":r+=\" var \"+C+\" = \"+w+\"; \"+S+\" \",l&&(r+=\" if (!\"+p+\") break; \"),r+=\" }\");return l&&(r+=\" \"+g+\" if (\"+u+\" == errors) {\"),r}},6039:function(e){\"use strict\";e.exports=function(e,t,n){var r=\" \",i=e.level,s=e.dataLevel,o=e.schema[t],a=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+\"/\"+t,l=!e.opts.allErrors,h=\"data\"+(s||\"\"),d=e.opts.$data&&o&&o.$data;if(s=d?(r+=\" var schema\"+i+\" = \"+e.util.getData(o.$data,s,e.dataPathArr)+\"; \",\"schema\"+i):o,!d&&\"number\"!=typeof o)throw new Error(t+\" must be number\");r+=\"var division\"+i+\";if (\",d&&(r+=\" \"+s+\" !== undefined && ( typeof \"+s+\" != 'number' || \"),r+=\" (division\"+i+\" = \"+h+\" / \"+s+\", \",r+=e.opts.multipleOfPrecision?\" Math.abs(Math.round(division\"+i+\") - division\"+i+\") > 1e-\"+e.opts.multipleOfPrecision+\" \":\" division\"+i+\" !== parseInt(division\"+i+\") \",r+=\" ) \",d&&(r+=\"  )  \");var u=u||[];return u.push(r+=\" ) {   \"),r=\"\",!1!==e.createErrors?(r+=\" { keyword: 'multipleOf' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: { multipleOf: \"+s+\" } \",!1!==e.opts.messages&&(r+=\" , message: 'should be multiple of \",r+=d?\"' + \"+s:s+\"'\"),e.opts.verbose&&(r+=\" , schema:  \",r+=d?\"validate.schema\"+a:\"\"+o,r+=\"         , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+h+\" \"),r+=\" } \"):r+=\" {} \",h=r,r=u.pop(),r+=!e.compositeRule&&l?e.async?\" throw new ValidationError([\"+h+\"]); \":\" validate.errors = [\"+h+\"]; return false; \":\" var err = \"+h+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",r+=\"} \",l&&(r+=\" else { \"),r}},7946:function(e){\"use strict\";e.exports=function(e,t,n){var r,i,s=\" \",o=e.level,a=e.dataLevel,c=e.schema[t],l=e.schemaPath+e.util.getProperty(t),h=e.errSchemaPath+\"/\"+t,d=!e.opts.allErrors,u=\"data\"+(a||\"\");return t=\"errs__\"+o,(a=e.util.copy(e)).level++,o=\"valid\"+a.level,(e.opts.strictKeywords?\"object\"==typeof c&&0<Object.keys(c).length||!1===c:e.util.schemaHasRules(c,e.RULES.all))?(a.schema=c,a.schemaPath=l,a.errSchemaPath=h,s+=\" var \"+t+\" = errors;  \",c=e.compositeRule,e.compositeRule=a.compositeRule=!0,a.createErrors=!1,a.opts.allErrors&&(r=a.opts.allErrors,a.opts.allErrors=!1),s+=\" \"+e.validate(a)+\" \",a.createErrors=!0,r&&(a.opts.allErrors=r),e.compositeRule=a.compositeRule=c,(i=i||[]).push(s+=\" if (\"+o+\") {   \"),s=\"\",!1!==e.createErrors?(s+=\" { keyword: 'not' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(h)+\" , params: {} \",!1!==e.opts.messages&&(s+=\" , message: 'should NOT be valid' \"),e.opts.verbose&&(s+=\" , schema: validate.schema\"+l+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+u+\" \"),s+=\" } \"):s+=\" {} \",o=s,s=i.pop(),s+=!e.compositeRule&&d?e.async?\" throw new ValidationError([\"+o+\"]); \":\" validate.errors = [\"+o+\"]; return false; \":\" var err = \"+o+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",s+=\" } else {  errors = \"+t+\"; if (vErrors !== null) { if (\"+t+\") vErrors.length = \"+t+\"; else vErrors = null; } \",e.opts.allErrors&&(s+=\" } \")):(s+=\"  var err =   \",!1!==e.createErrors?(s+=\" { keyword: 'not' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(h)+\" , params: {} \",!1!==e.opts.messages&&(s+=\" , message: 'should NOT be valid' \"),e.opts.verbose&&(s+=\" , schema: validate.schema\"+l+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+u+\" \"),s+=\" } \"):s+=\" {} \",s+=\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",d&&(s+=\" if (false) { \")),s}},9344:function(e){\"use strict\";e.exports=function(e,t,n){var r=\" \",i=e.level,s=e.dataLevel,o=e.schema[t],a=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+\"/\"+t,l=!e.opts.allErrors,h=(t=\"data\"+(s||\"\"),\"valid\"+i),d=(s=\"errs__\"+i,e.util.copy(e)),u=\"\";d.level++;var f=\"valid\"+d.level,g=d.baseId,p=\"prevValid\"+i,m=\"passingSchemas\"+i;r+=\"var \"+s+\" = errors , \"+p+\" = false , \"+h+\" = false , \"+m+\" = null; \",i=e.compositeRule,e.compositeRule=d.compositeRule=!0;var C=o;if(C)for(var b,v=-1,I=C.length-1;v<I;)b=C[v+=1],(e.opts.strictKeywords?\"object\"==typeof b&&0<Object.keys(b).length||!1===b:e.util.schemaHasRules(b,e.RULES.all))?(d.schema=b,d.schemaPath=a+\"[\"+v+\"]\",d.errSchemaPath=c+\"/\"+v,r+=\"  \"+e.validate(d)+\" \",d.baseId=g):r+=\" var \"+f+\" = true; \",v&&(r+=\" if (\"+f+\" && \"+p+\") { \"+h+\" = false; \"+m+\" = [\"+m+\", \"+v+\"]; } else { \",u+=\"}\"),r+=\" if (\"+f+\") { \"+h+\" = \"+p+\" = true; \"+m+\" = \"+v+\"; }\";return e.compositeRule=d.compositeRule=i,r+=u+\"if (!\"+h+\") {   var err =   \",!1!==e.createErrors?(r+=\" { keyword: 'oneOf' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: { passingSchemas: \"+m+\" } \",!1!==e.opts.messages&&(r+=\" , message: 'should match exactly one schema in oneOf' \"),e.opts.verbose&&(r+=\" , schema: validate.schema\"+a+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+t+\" \"),r+=\" } \"):r+=\" {} \",r+=\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",!e.compositeRule&&l&&(r+=e.async?\" throw new ValidationError(vErrors); \":\" validate.errors = vErrors; return false; \"),r+=\"} else {  errors = \"+s+\"; if (vErrors !== null) { if (\"+s+\") vErrors.length = \"+s+\"; else vErrors = null; }\",e.opts.allErrors&&(r+=\" } \"),r}},9737:function(e){\"use strict\";e.exports=function(e,t,n){var r=\" \",i=e.level,s=e.dataLevel,o=e.schema[t],a=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+\"/\"+t,l=!e.opts.allErrors,h=\"data\"+(s||\"\");i=(t=e.opts.$data&&o&&o.$data)?(r+=\" var schema\"+i+\" = \"+e.util.getData(o.$data,s,e.dataPathArr)+\"; \",\"schema\"+i):o,r+=\"if ( \",t&&(r+=\" (\"+i+\" !== undefined && typeof \"+i+\" != 'string') || \"),r+=\" !\"+(t?\"(new RegExp(\"+i+\"))\":e.usePattern(o))+\".test(\"+h+\") ) {   \";var d=d||[];return d.push(r),r=\"\",!1!==e.createErrors?(r+=\" { keyword: 'pattern' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: { pattern:  \",r+=t?\"\"+i:\"\"+e.util.toQuotedString(o),r+=\"  } \",!1!==e.opts.messages&&(r+=\" , message: 'should match pattern \\\"\",r+=t?\"' + \"+i+\" + '\":\"\"+e.util.escapeQuotes(o),r+=\"\\\"' \"),e.opts.verbose&&(r+=\" , schema:  \",r+=t?\"validate.schema\"+a:\"\"+e.util.toQuotedString(o),r+=\"         , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+h+\" \"),r+=\" } \"):r+=\" {} \",h=r,r=d.pop(),r+=!e.compositeRule&&l?e.async?\" throw new ValidationError([\"+h+\"]); \":\" validate.errors = [\"+h+\"]; return false; \":\" var err = \"+h+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",r+=\"} \",l&&(r+=\" else { \"),r}},2537:function(e){\"use strict\";e.exports=function(e,t,n){var r=\" \",i=e.level,s=e.dataLevel,o=e.schema[t],a=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+\"/\"+t,l=!e.opts.allErrors,h=\"data\"+(s||\"\"),d=\"errs__\"+i,u=e.util.copy(e),f=\"\";u.level++;var g,p=\"valid\"+u.level,m=\"key\"+i,C=\"idx\"+i,b=u.dataLevel=e.dataLevel+1,v=\"data\"+b,I=\"dataProperties\"+i,A=Object.keys(o||{}).filter(B),y=e.schema.patternProperties||{},w=Object.keys(y).filter(B),S=e.schema.additionalProperties,x=A.length||w.length,E=!1===S,k=\"object\"==typeof S&&Object.keys(S).length,_=e.opts.removeAdditional,T=(t=E||k||_,e.opts.ownProperties),R=e.baseId;function B(e){return\"__proto__\"!==e}if((s=e.schema.required)&&(!e.opts.$data||!s.$data)&&s.length<e.opts.loopRequired&&(g=e.util.toHash(s)),r+=\"var \"+d+\" = errors;var \"+p+\" = true;\",T&&(r+=\" var \"+I+\" = undefined;\"),t){if(r+=T?\" \"+I+\" = \"+I+\" || Object.keys(\"+h+\"); for (var \"+C+\"=0; \"+C+\"<\"+I+\".length; \"+C+\"++) { var \"+m+\" = \"+I+\"[\"+C+\"]; \":\" for (var \"+m+\" in \"+h+\") { \",x){if(r+=\" var isAdditional\"+i+\" = !(false \",A.length)if(8<A.length)r+=\" || validate.schema\"+a+\".hasOwnProperty(\"+m+\") \";else{var O=A;if(O)for(var L=-1,P=O.length-1;L<P;)W=O[L+=1],r+=\" || \"+m+\" == \"+e.util.toQuotedString(W)+\" \"}if(w.length){var F=w;if(F)for(var N=-1,M=F.length-1;N<M;)Q=F[N+=1],r+=\" || \"+e.usePattern(Q)+\".test(\"+m+\") \"}r+=\" ); if (isAdditional\"+i+\") { \"}\"all\"==_?r+=\" delete \"+h+\"[\"+m+\"]; \":(Z=e.errorPath,i=\"' + \"+m+\" + '\",e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPathExpr(e.errorPath,m,e.opts.jsonPointers)),E?_?r+=\" delete \"+h+\"[\"+m+\"]; \":(z=c,c=e.errSchemaPath+\"/additionalProperties\",(X=X||[]).push(r+=\" \"+p+\" = false; \"),r=\"\",!1!==e.createErrors?(r+=\" { keyword: 'additionalProperties' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: { additionalProperty: '\"+i+\"' } \",!1!==e.opts.messages&&(r+=\" , message: '\",r+=e.opts._errorDataPathProperty?\"is an invalid additional property\":\"should NOT have additional properties\",r+=\"' \"),e.opts.verbose&&(r+=\" , schema: false , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+h+\" \"),r+=\" } \"):r+=\" {} \",U=r,r=X.pop(),r+=!e.compositeRule&&l?e.async?\" throw new ValidationError([\"+U+\"]); \":\" validate.errors = [\"+U+\"]; return false; \":\" var err = \"+U+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",c=z,l&&(r+=\" break; \")):k&&(\"failing\"==_?(r+=\" var \"+d+\" = errors;  \",_=e.compositeRule,e.compositeRule=u.compositeRule=!0,u.schema=S,u.schemaPath=e.schemaPath+\".additionalProperties\",u.errSchemaPath=e.errSchemaPath+\"/additionalProperties\",u.errorPath=e.opts._errorDataPathProperty?e.errorPath:e.util.getPathExpr(e.errorPath,m,e.opts.jsonPointers),te=h+\"[\"+m+\"]\",u.dataPathArr[b]=m,ne=e.validate(u),u.baseId=R,e.util.varOccurences(ne,v)<2?r+=\" \"+e.util.varReplace(ne,v,te)+\" \":r+=\" var \"+v+\" = \"+te+\"; \"+ne+\" \",r+=\" if (!\"+p+\") { errors = \"+d+\"; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete \"+h+\"[\"+m+\"]; }  \",e.compositeRule=u.compositeRule=_):(u.schema=S,u.schemaPath=e.schemaPath+\".additionalProperties\",u.errSchemaPath=e.errSchemaPath+\"/additionalProperties\",u.errorPath=e.opts._errorDataPathProperty?e.errorPath:e.util.getPathExpr(e.errorPath,m,e.opts.jsonPointers),te=h+\"[\"+m+\"]\",u.dataPathArr[b]=m,ne=e.validate(u),u.baseId=R,e.util.varOccurences(ne,v)<2?r+=\" \"+e.util.varReplace(ne,v,te)+\" \":r+=\" var \"+v+\" = \"+te+\"; \"+ne+\" \",l&&(r+=\" if (!\"+p+\") break; \"))),e.errorPath=Z),x&&(r+=\" } \"),r+=\" }  \",l&&(r+=\" if (\"+p+\") { \",f+=\"}\")}var D=e.opts.useDefaults&&!e.compositeRule;if(A.length){var $=A;if($)for(var W,H=-1,G=$.length-1;H<G;){var V,j,Z,z,K,X,U,Y=o[W=$[H+=1]];(e.opts.strictKeywords?\"object\"==typeof Y&&0<Object.keys(Y).length||!1===Y:e.util.schemaHasRules(Y,e.RULES.all))&&(te=h+(V=e.util.getProperty(W)),K=D&&void 0!==Y.default,u.schema=Y,u.schemaPath=a+V,u.errSchemaPath=c+\"/\"+e.util.escapeFragment(W),u.errorPath=e.util.getPath(e.errorPath,W,e.opts.jsonPointers),u.dataPathArr[b]=e.util.toQuotedString(W),ne=e.validate(u),u.baseId=R,e.util.varOccurences(ne,v)<2?(ne=e.util.varReplace(ne,v,te),j=te):r+=\" var \"+(j=v)+\" = \"+te+\"; \",K?r+=\" \"+ne+\" \":(g&&g[W]?(r+=\" if ( \"+j+\" === undefined \",T&&(r+=\" || ! Object.prototype.hasOwnProperty.call(\"+h+\", '\"+e.util.escapeQuotes(W)+\"') \"),r+=\") { \"+p+\" = false; \",Z=e.errorPath,z=c,K=e.util.escapeQuotes(W),e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPath(Z,W,e.opts.jsonPointers)),c=e.errSchemaPath+\"/required\",(X=X||[]).push(r),r=\"\",!1!==e.createErrors?(r+=\" { keyword: 'required' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: { missingProperty: '\"+K+\"' } \",!1!==e.opts.messages&&(r+=\" , message: '\",r+=e.opts._errorDataPathProperty?\"is a required property\":\"should have required property \\\\'\"+K+\"\\\\'\",r+=\"' \"),e.opts.verbose&&(r+=\" , schema: validate.schema\"+a+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+h+\" \"),r+=\" } \"):r+=\" {} \",U=r,r=X.pop(),r+=!e.compositeRule&&l?e.async?\" throw new ValidationError([\"+U+\"]); \":\" validate.errors = [\"+U+\"]; return false; \":\" var err = \"+U+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",c=z,e.errorPath=Z,r+=\" } else { \"):l?(r+=\" if ( \"+j+\" === undefined \",T&&(r+=\" || ! Object.prototype.hasOwnProperty.call(\"+h+\", '\"+e.util.escapeQuotes(W)+\"') \"),r+=\") { \"+p+\" = true; } else { \"):(r+=\" if (\"+j+\" !== undefined \",T&&(r+=\" &&   Object.prototype.hasOwnProperty.call(\"+h+\", '\"+e.util.escapeQuotes(W)+\"') \"),r+=\" ) { \"),r+=\" \"+ne+\" } \")),l&&(r+=\" if (\"+p+\") { \",f+=\"}\")}}if(w.length){var J=w;if(J)for(var Q,q=-1,ee=J.length-1;q<ee;){var te,ne;Y=y[Q=J[q+=1]],(e.opts.strictKeywords?\"object\"==typeof Y&&0<Object.keys(Y).length||!1===Y:e.util.schemaHasRules(Y,e.RULES.all))&&(u.schema=Y,u.schemaPath=e.schemaPath+\".patternProperties\"+e.util.getProperty(Q),u.errSchemaPath=e.errSchemaPath+\"/patternProperties/\"+e.util.escapeFragment(Q),r+=T?\" \"+I+\" = \"+I+\" || Object.keys(\"+h+\"); for (var \"+C+\"=0; \"+C+\"<\"+I+\".length; \"+C+\"++) { var \"+m+\" = \"+I+\"[\"+C+\"]; \":\" for (var \"+m+\" in \"+h+\") { \",r+=\" if (\"+e.usePattern(Q)+\".test(\"+m+\")) { \",u.errorPath=e.util.getPathExpr(e.errorPath,m,e.opts.jsonPointers),te=h+\"[\"+m+\"]\",u.dataPathArr[b]=m,ne=e.validate(u),u.baseId=R,e.util.varOccurences(ne,v)<2?r+=\" \"+e.util.varReplace(ne,v,te)+\" \":r+=\" var \"+v+\" = \"+te+\"; \"+ne+\" \",l&&(r+=\" if (!\"+p+\") break; \"),r+=\" } \",l&&(r+=\" else \"+p+\" = true; \"),r+=\" }  \",l&&(r+=\" if (\"+p+\") { \",f+=\"}\"))}}return l&&(r+=\" \"+f+\" if (\"+d+\" == errors) {\"),r}},2127:function(e){\"use strict\";e.exports=function(e,t,n){var r=\" \",i=e.level,s=e.dataLevel,o=e.schema[t],a=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+\"/\"+t,l=!e.opts.allErrors,h=\"data\"+(s||\"\"),d=\"errs__\"+i,u=e.util.copy(e);u.level++;var f,g,p,m,C,b=\"valid\"+u.level;return r+=\"var \"+d+\" = errors;\",(e.opts.strictKeywords?\"object\"==typeof o&&0<Object.keys(o).length||!1===o:e.util.schemaHasRules(o,e.RULES.all))&&(u.schema=o,u.schemaPath=a,u.errSchemaPath=c,C=\"idx\"+i,g=\"i\"+i,p=\"' + \"+(f=\"key\"+i)+\" + '\",m=\"data\"+(u.dataLevel=e.dataLevel+1),t=\"dataProperties\"+i,o=e.baseId,(s=e.opts.ownProperties)&&(r+=\" var \"+t+\" = undefined; \"),r+=s?\" \"+t+\" = \"+t+\" || Object.keys(\"+h+\"); for (var \"+C+\"=0; \"+C+\"<\"+t+\".length; \"+C+\"++) { var \"+f+\" = \"+t+\"[\"+C+\"]; \":\" for (var \"+f+\" in \"+h+\") { \",r+=\" var startErrs\"+i+\" = errors; \",s=f,t=e.compositeRule,e.compositeRule=u.compositeRule=!0,C=e.validate(u),u.baseId=o,e.util.varOccurences(C,m)<2?r+=\" \"+e.util.varReplace(C,m,s)+\" \":r+=\" var \"+m+\" = \"+s+\"; \"+C+\" \",e.compositeRule=u.compositeRule=t,r+=\" if (!\"+b+\") { for (var \"+g+\"=startErrs\"+i+\"; \"+g+\"<errors; \"+g+\"++) { vErrors[\"+g+\"].propertyName = \"+f+\"; }   var err =   \",!1!==e.createErrors?(r+=\" { keyword: 'propertyNames' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: { propertyName: '\"+p+\"' } \",!1!==e.opts.messages&&(r+=\" , message: 'property name \\\\'\"+p+\"\\\\' is invalid' \"),e.opts.verbose&&(r+=\" , schema: validate.schema\"+a+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+h+\" \"),r+=\" } \"):r+=\" {} \",r+=\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",!e.compositeRule&&l&&(r+=e.async?\" throw new ValidationError(vErrors); \":\" validate.errors = vErrors; return false; \"),l&&(r+=\" break; \"),r+=\" } }\"),l&&(r+=\"  if (\"+d+\" == errors) {\"),r}},2331:function(e){\"use strict\";e.exports=function(e,t,n){var r,i,s=\" \",o=e.level,a=e.dataLevel,c=e.schema[t],l=e.errSchemaPath+\"/\"+t,h=!e.opts.allErrors,d=\"data\"+(a||\"\");if(t=\"valid\"+o,\"#\"==c||\"#/\"==c)i=e.isRoot?(r=e.async,\"validate\"):(r=!0===e.root.schema.$async,\"root.refVal[0]\");else if(void 0===(o=e.resolveRef(e.baseId,c,e.isRoot))){var u,f=e.MissingRefError.message(e.baseId,c);if(\"fail\"==e.opts.missingRefs){e.logger.error(f),(u=u||[]).push(s),s=\"\",!1!==e.createErrors?(s+=\" { keyword: '$ref' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(l)+\" , params: { ref: '\"+e.util.escapeQuotes(c)+\"' } \",!1!==e.opts.messages&&(s+=\" , message: 'can\\\\'t resolve reference \"+e.util.escapeQuotes(c)+\"' \"),e.opts.verbose&&(s+=\" , schema: \"+e.util.toQuotedString(c)+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+d+\" \"),s+=\" } \"):s+=\" {} \";var g=s;s=u.pop(),s+=!e.compositeRule&&h?e.async?\" throw new ValidationError([\"+g+\"]); \":\" validate.errors = [\"+g+\"]; return false; \":\" var err = \"+g+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",h&&(s+=\" if (false) { \")}else{if(\"ignore\"!=e.opts.missingRefs)throw new e.MissingRefError(e.baseId,c,f);e.logger.warn(f),h&&(s+=\" if (true) { \")}}else o.inline?((g=e.util.copy(e)).level++,f=\"valid\"+g.level,g.schema=o.schema,g.schemaPath=\"\",g.errSchemaPath=c,s+=\" \"+e.validate(g).replace(/validate\\.schema/g,o.code)+\" \",h&&(s+=\" if (\"+f+\") { \")):(r=!0===o.$async||e.async&&!1!==o.$async,i=o.code);if(i)if((u=u||[]).push(s),s=\"\",s+=e.opts.passContext?\" \"+i+\".call(this, \":\" \"+i+\"( \",s+=\" \"+d+\", (dataPath || '')\",'\"\"'!=e.errorPath&&(s+=\" + \"+e.errorPath),a=s+=\" , \"+(a?\"data\"+(a-1||\"\"):\"parentData\")+\" , \"+(a?e.dataPathArr[a]:\"parentDataProperty\")+\", rootData)  \",s=u.pop(),r){if(!e.async)throw new Error(\"async schema referenced by sync schema\");h&&(s+=\" var \"+t+\"; \"),s+=\" try { await \"+a+\"; \",h&&(s+=\" \"+t+\" = true; \"),s+=\" } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; \",h&&(s+=\" \"+t+\" = false; \"),s+=\" } \",h&&(s+=\" if (\"+t+\") { \")}else s+=\" if (!\"+a+\") { if (vErrors === null) vErrors = \"+i+\".errors; else vErrors = vErrors.concat(\"+i+\".errors); errors = vErrors.length; } \",h&&(s+=\" else { \");return s}},1204:function(e){\"use strict\";e.exports=function(e,t,n){var r=\" \",i=e.level,s=e.dataLevel,o=e.schema[t],a=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+\"/\"+t,l=!e.opts.allErrors,h=\"data\"+(s||\"\"),d=\"valid\"+i;if((t=e.opts.$data&&o&&o.$data)&&(r+=\" var schema\"+i+\" = \"+e.util.getData(o.$data,s,e.dataPathArr)+\"; \"),s=\"schema\"+i,!t)if(o.length<e.opts.loopRequired&&e.schema.properties&&Object.keys(e.schema.properties).length){var u=[],f=o;if(f)for(var g,p=-1,m=f.length-1;p<m;){g=f[p+=1];var C=e.schema.properties[g];C&&(e.opts.strictKeywords?\"object\"==typeof C&&0<Object.keys(C).length||!1===C:e.util.schemaHasRules(C,e.RULES.all))||(u[u.length]=g)}}else u=o;if(t||u.length){var b=e.errorPath,v=(o=t||u.length>=e.opts.loopRequired,e.opts.ownProperties);if(l)if(r+=\" var missing\"+i+\"; \",o){t||(r+=\" var \"+s+\" = validate.schema\"+a+\"; \");var I=\"' + \"+(E=\"schema\"+i+\"[\"+(S=\"i\"+i)+\"]\")+\" + '\";e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPathExpr(b,E,e.opts.jsonPointers)),r+=\" var \"+d+\" = true; \",t&&(r+=\" if (schema\"+i+\" === undefined) \"+d+\" = true; else if (!Array.isArray(schema\"+i+\")) \"+d+\" = false; else {\"),r+=\" for (var \"+S+\" = 0; \"+S+\" < \"+s+\".length; \"+S+\"++) { \"+d+\" = \"+h+\"[\"+s+\"[\"+S+\"]] !== undefined \",v&&(r+=\" &&   Object.prototype.hasOwnProperty.call(\"+h+\", \"+s+\"[\"+S+\"]) \"),r+=\"; if (!\"+d+\") break; } \",t&&(r+=\"  }  \"),(y=y||[]).push(r+=\"  if (!\"+d+\") {   \"),r=\"\",!1!==e.createErrors?(r+=\" { keyword: 'required' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: { missingProperty: '\"+I+\"' } \",!1!==e.opts.messages&&(r+=\" , message: '\",r+=e.opts._errorDataPathProperty?\"is a required property\":\"should have required property \\\\'\"+I+\"\\\\'\",r+=\"' \"),e.opts.verbose&&(r+=\" , schema: validate.schema\"+a+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+h+\" \"),r+=\" } \"):r+=\" {} \";var A=r;r=y.pop(),r+=!e.compositeRule&&l?e.async?\" throw new ValidationError([\"+A+\"]); \":\" validate.errors = [\"+A+\"]; return false; \":\" var err = \"+A+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",r+=\" } else { \"}else{r+=\" if ( \";var y,w=u;if(w)for(var S=-1,x=w.length-1;S<x;)_=w[S+=1],S&&(r+=\" || \"),r+=\" ( ( \"+(O=h+(B=e.util.getProperty(_)))+\" === undefined \",v&&(r+=\" || ! Object.prototype.hasOwnProperty.call(\"+h+\", '\"+e.util.escapeQuotes(_)+\"') \"),r+=\") && (missing\"+i+\" = \"+e.util.toQuotedString(e.opts.jsonPointers?_:B)+\") ) \";r+=\") {  \",I=\"' + \"+(E=\"missing\"+i)+\" + '\",e.opts._errorDataPathProperty&&(e.errorPath=e.opts.jsonPointers?e.util.getPathExpr(b,E,!0):b+\" + \"+E),(y=y||[]).push(r),r=\"\",!1!==e.createErrors?(r+=\" { keyword: 'required' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: { missingProperty: '\"+I+\"' } \",!1!==e.opts.messages&&(r+=\" , message: '\",r+=e.opts._errorDataPathProperty?\"is a required property\":\"should have required property \\\\'\"+I+\"\\\\'\",r+=\"' \"),e.opts.verbose&&(r+=\" , schema: validate.schema\"+a+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+h+\" \"),r+=\" } \"):r+=\" {} \",A=r,r=y.pop(),r+=!e.compositeRule&&l?e.async?\" throw new ValidationError([\"+A+\"]); \":\" validate.errors = [\"+A+\"]; return false; \":\" var err = \"+A+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",r+=\" } else { \"}else if(o){var E;t||(r+=\" var \"+s+\" = validate.schema\"+a+\"; \"),I=\"' + \"+(E=\"schema\"+i+\"[\"+(S=\"i\"+i)+\"]\")+\" + '\",e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPathExpr(b,E,e.opts.jsonPointers)),t&&(r+=\" if (\"+s+\" && !Array.isArray(\"+s+\")) {  var err =   \",!1!==e.createErrors?(r+=\" { keyword: 'required' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: { missingProperty: '\"+I+\"' } \",!1!==e.opts.messages&&(r+=\" , message: '\",r+=e.opts._errorDataPathProperty?\"is a required property\":\"should have required property \\\\'\"+I+\"\\\\'\",r+=\"' \"),e.opts.verbose&&(r+=\" , schema: validate.schema\"+a+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+h+\" \"),r+=\" } \"):r+=\" {} \",r+=\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (\"+s+\" !== undefined) { \"),r+=\" for (var \"+S+\" = 0; \"+S+\" < \"+s+\".length; \"+S+\"++) { if (\"+h+\"[\"+s+\"[\"+S+\"]] === undefined \",v&&(r+=\" || ! Object.prototype.hasOwnProperty.call(\"+h+\", \"+s+\"[\"+S+\"]) \"),r+=\") {  var err =   \",!1!==e.createErrors?(r+=\" { keyword: 'required' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: { missingProperty: '\"+I+\"' } \",!1!==e.opts.messages&&(r+=\" , message: '\",r+=e.opts._errorDataPathProperty?\"is a required property\":\"should have required property \\\\'\"+I+\"\\\\'\",r+=\"' \"),e.opts.verbose&&(r+=\" , schema: validate.schema\"+a+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+h+\" \"),r+=\" } \"):r+=\" {} \",r+=\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } \",t&&(r+=\"  }  \")}else{var k=u;if(k)for(var _,T=-1,R=k.length-1;T<R;){_=k[T+=1];var B=e.util.getProperty(_),O=(I=e.util.escapeQuotes(_),h+B);e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPath(b,_,e.opts.jsonPointers)),r+=\" if ( \"+O+\" === undefined \",v&&(r+=\" || ! Object.prototype.hasOwnProperty.call(\"+h+\", '\"+e.util.escapeQuotes(_)+\"') \"),r+=\") {  var err =   \",!1!==e.createErrors?(r+=\" { keyword: 'required' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(c)+\" , params: { missingProperty: '\"+I+\"' } \",!1!==e.opts.messages&&(r+=\" , message: '\",r+=e.opts._errorDataPathProperty?\"is a required property\":\"should have required property \\\\'\"+I+\"\\\\'\",r+=\"' \"),e.opts.verbose&&(r+=\" , schema: validate.schema\"+a+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+h+\" \"),r+=\" } \"):r+=\" {} \",r+=\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } \"}}e.errorPath=b}else l&&(r+=\" if (true) {\");return r}},1985:function(e){\"use strict\";e.exports=function(e,t,n){var r,i=\" \",s=e.level,o=e.dataLevel,a=e.schema[t],c=e.schemaPath+e.util.getProperty(t),l=e.errSchemaPath+\"/\"+t,h=!e.opts.allErrors,d=\"data\"+(o||\"\"),u=\"valid\"+s,f=e.opts.$data&&a&&a.$data;return t=f?(i+=\" var schema\"+s+\" = \"+e.util.getData(a.$data,o,e.dataPathArr)+\"; \",\"schema\"+s):a,(a||f)&&!1!==e.opts.uniqueItems?(f&&(i+=\" var \"+u+\"; if (\"+t+\" === false || \"+t+\" === undefined) \"+u+\" = true; else if (typeof \"+t+\" != 'boolean') \"+u+\" = false; else { \"),i+=\" var i = \"+d+\".length , \"+u+\" = true , j; if (i > 1) { \",o=e.schema.items&&e.schema.items.type,s=Array.isArray(o),!o||\"object\"==o||\"array\"==o||s&&(0<=o.indexOf(\"object\")||0<=o.indexOf(\"array\"))?i+=\" outer: for (;i--;) { for (j = i; j--;) { if (equal(\"+d+\"[i], \"+d+\"[j])) { \"+u+\" = false; break outer; } } } \":(i+=\" var itemIndices = {}, item; for (;i--;) { var item = \"+d+\"[i]; \",i+=\" if (\"+e.util[t=\"checkDataType\"+(s?\"s\":\"\")](o,\"item\",e.opts.strictNumbers,!0)+\") continue; \",s&&(i+=\" if (typeof item == 'string') item = '\\\"' + item; \"),i+=\" if (typeof itemIndices[item] == 'number') { \"+u+\" = false; j = itemIndices[item]; break; } itemIndices[item] = i; } \"),i+=\" } \",f&&(i+=\"  }  \"),(r=r||[]).push(i+=\" if (!\"+u+\") {   \"),i=\"\",!1!==e.createErrors?(i+=\" { keyword: 'uniqueItems' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(l)+\" , params: { i: i, j: j } \",!1!==e.opts.messages&&(i+=\" , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' \"),e.opts.verbose&&(i+=\" , schema:  \",i+=f?\"validate.schema\"+c:\"\"+a,i+=\"         , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+d+\" \"),i+=\" } \"):i+=\" {} \",d=i,i=r.pop(),i+=!e.compositeRule&&h?e.async?\" throw new ValidationError([\"+d+\"]); \":\" validate.errors = [\"+d+\"]; return false; \":\" var err = \"+d+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",i+=\" } \",h&&(i+=\" else { \")):h&&(i+=\" if (true) { \"),i}},1869:function(e){\"use strict\";e.exports=function(e,t,n){var r=\"\",i=!0===e.schema.$async,s=e.util.schemaHasRulesExcept(e.schema,e.RULES.all,\"$ref\"),o=e.self._getId(e.schema);if(e.opts.strictKeywords){var a=e.util.schemaUnknownRules(e.schema,e.RULES.keywords);if(a){if(a=\"unknown keyword: \"+a,\"log\"!==e.opts.strictKeywords)throw new Error(a);e.logger.warn(a)}}if(e.isTop&&(r+=\" var validate = \",i&&(e.async=!0,r+=\"async \"),r+=\"function(data, dataPath, parentData, parentDataProperty, rootData) { 'use strict'; \",o&&(e.opts.sourceCode||e.opts.processCode)&&(r+=\" /*# sourceURL=\"+o+\" */ \")),\"boolean\"==typeof e.schema||!s&&!e.schema.$ref){var c=e.level,l=e.dataLevel,h=e.schema[t=\"false schema\"],d=e.schemaPath+e.util.getProperty(t),u=e.errSchemaPath+\"/\"+t,f=!e.opts.allErrors,g=\"data\"+(l||\"\"),p=\"valid\"+c;return!1===e.schema?(e.isTop?f=!0:r+=\" var \"+p+\" = false; \",(G=G||[]).push(r),r=\"\",!1!==e.createErrors?(r+=\" { keyword: 'false schema' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(u)+\" , params: {} \",!1!==e.opts.messages&&(r+=\" , message: 'boolean schema is false' \"),e.opts.verbose&&(r+=\" , schema: false , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+g+\" \"),r+=\" } \"):r+=\" {} \",R=r,r=G.pop(),r+=!e.compositeRule&&f?e.async?\" throw new ValidationError([\"+R+\"]); \":\" validate.errors = [\"+R+\"]; return false; \":\" var err = \"+R+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \"):r+=e.isTop?i?\" return data; \":\" validate.errors = null; return true; \":\" var \"+p+\" = true; \",e.isTop&&(r+=\" }; return validate; \"),r}if(e.isTop){var m=e.isTop;if(c=e.level=0,l=e.dataLevel=0,g=\"data\",e.rootId=e.resolve.fullPath(e.self._getId(e.root.schema)),e.baseId=e.baseId||e.rootId,delete e.isTop,e.dataPathArr=[\"\"],void 0!==e.schema.default&&e.opts.useDefaults&&e.opts.strictDefaults){var C=\"default is ignored in the schema root\";if(\"log\"!==e.opts.strictDefaults)throw new Error(C);e.logger.warn(C)}r+=\" var vErrors = null; \",r+=\" var errors = 0;     \",r+=\" if (rootData === undefined) rootData = data; \"}else{if(c=e.level,g=\"data\"+((l=e.dataLevel)||\"\"),o&&(e.baseId=e.resolve.url(e.baseId,o)),i&&!e.async)throw new Error(\"async schema in sync schema\");r+=\" var errs_\"+c+\" = errors;\"}p=\"valid\"+c,f=!e.opts.allErrors;var b,v=\"\",I=\"\",A=e.schema.type,y=Array.isArray(A);if(A&&e.opts.nullable&&!0===e.schema.nullable&&(y?-1==A.indexOf(\"null\")&&(A=A.concat(\"null\")):\"null\"!=A&&(A=[A,\"null\"],y=!0)),y&&1==A.length&&(A=A[0],y=!1),e.schema.$ref&&s){if(\"fail\"==e.opts.extendRefs)throw new Error('$ref: validation keywords used in schema at path \"'+e.errSchemaPath+'\" (see option extendRefs)');!0!==e.opts.extendRefs&&(s=!1,e.logger.warn('$ref: keywords ignored in schema at path \"'+e.errSchemaPath+'\"'))}if(e.schema.$comment&&e.opts.$comment&&(r+=\" \"+e.RULES.all.$comment.code(e,\"$comment\")),A){e.opts.coerceTypes&&(b=e.util.coerceToTypes(e.opts.coerceTypes,A));var w=e.RULES.types[A];if(b||y||!0===w||w&&!K(w)){if(d=e.schemaPath+\".type\",u=e.errSchemaPath+\"/type\",d=e.schemaPath+\".type\",u=e.errSchemaPath+\"/type\",r+=\" if (\"+e.util[o=y?\"checkDataTypes\":\"checkDataType\"](A,g,e.opts.strictNumbers,!0)+\") { \",b){var S=\"dataType\"+c,x=\"coerced\"+c;r+=\" var \"+S+\" = typeof \"+g+\"; var \"+x+\" = undefined; \",\"array\"==e.opts.coerceTypes&&(r+=\" if (\"+S+\" == 'object' && Array.isArray(\"+g+\") && \"+g+\".length == 1) { \"+g+\" = \"+g+\"[0]; \"+S+\" = typeof \"+g+\"; if (\"+e.util.checkDataType(e.schema.type,g,e.opts.strictNumbers)+\") \"+x+\" = \"+g+\"; } \"),r+=\" if (\"+x+\" !== undefined) ; \";var E=b;if(E)for(var k,_=-1,T=E.length-1;_<T;)\"string\"==(k=E[_+=1])?r+=\" else if (\"+S+\" == 'number' || \"+S+\" == 'boolean') \"+x+\" = '' + \"+g+\"; else if (\"+g+\" === null) \"+x+\" = ''; \":\"number\"==k||\"integer\"==k?(r+=\" else if (\"+S+\" == 'boolean' || \"+g+\" === null || (\"+S+\" == 'string' && \"+g+\" && \"+g+\" == +\"+g+\" \",\"integer\"==k&&(r+=\" && !(\"+g+\" % 1)\"),r+=\")) \"+x+\" = +\"+g+\"; \"):\"boolean\"==k?r+=\" else if (\"+g+\" === 'false' || \"+g+\" === 0 || \"+g+\" === null) \"+x+\" = false; else if (\"+g+\" === 'true' || \"+g+\" === 1) \"+x+\" = true; \":\"null\"==k?r+=\" else if (\"+g+\" === '' || \"+g+\" === 0 || \"+g+\" === false) \"+x+\" = null; \":\"array\"==e.opts.coerceTypes&&\"array\"==k&&(r+=\" else if (\"+S+\" == 'string' || \"+S+\" == 'number' || \"+S+\" == 'boolean' || \"+g+\" == null) \"+x+\" = [\"+g+\"]; \");(G=G||[]).push(r+=\" else {   \"),r=\"\",!1!==e.createErrors?(r+=\" { keyword: 'type' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(u)+\" , params: { type: '\",r+=y?\"\"+A.join(\",\"):\"\"+A,r+=\"' } \",!1!==e.opts.messages&&(r+=\" , message: 'should be \",r+=y?\"\"+A.join(\",\"):\"\"+A,r+=\"' \"),e.opts.verbose&&(r+=\" , schema: validate.schema\"+d+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+g+\" \"),r+=\" } \"):r+=\" {} \";var R=r;r=G.pop(),r+=!e.compositeRule&&f?e.async?\" throw new ValidationError([\"+R+\"]); \":\" validate.errors = [\"+R+\"]; return false; \":\" var err = \"+R+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",r+=\" } if (\"+x+\" !== undefined) {  \",o=l?\"data\"+(l-1||\"\"):\"parentData\",r+=\" \"+g+\" = \"+x+\"; \",l||(r+=\"if (\"+o+\" !== undefined)\"),r+=\" \"+o+\"[\"+(l?e.dataPathArr[l]:\"parentDataProperty\")+\"] = \"+x+\"; } \"}else(G=G||[]).push(r),r=\"\",!1!==e.createErrors?(r+=\" { keyword: 'type' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(u)+\" , params: { type: '\",r+=y?\"\"+A.join(\",\"):\"\"+A,r+=\"' } \",!1!==e.opts.messages&&(r+=\" , message: 'should be \",r+=y?\"\"+A.join(\",\"):\"\"+A,r+=\"' \"),e.opts.verbose&&(r+=\" , schema: validate.schema\"+d+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+g+\" \"),r+=\" } \"):r+=\" {} \",R=r,r=G.pop(),r+=!e.compositeRule&&f?e.async?\" throw new ValidationError([\"+R+\"]); \":\" validate.errors = [\"+R+\"]; return false; \":\" var err = \"+R+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \";r+=\" } \"}}if(e.schema.$ref&&!s)r+=\" \"+e.RULES.all.$ref.code(e,\"$ref\")+\" \",f&&(r+=\" } if (errors === \",r+=m?\"0\":\"errs_\"+c,r+=\") { \",I+=\"}\");else{var B=e.RULES;if(B)for(var O=-1,L=B.length-1;O<L;)if(K(w=B[O+=1])){if(w.type&&(r+=\" if (\"+e.util.checkDataType(w.type,g,e.opts.strictNumbers)+\") { \"),e.opts.useDefaults)if(\"object\"==w.type&&e.schema.properties){h=e.schema.properties;var P=Object.keys(h);if(P)for(var F,N=-1,M=P.length-1;N<M;)if(void 0!==(W=h[F=P[N+=1]]).default){var D=g+e.util.getProperty(F);if(e.compositeRule){if(e.opts.strictDefaults){if(C=\"default is ignored for: \"+D,\"log\"!==e.opts.strictDefaults)throw new Error(C);e.logger.warn(C)}}else r+=\" if (\"+D+\" === undefined \",\"empty\"==e.opts.useDefaults&&(r+=\" || \"+D+\" === null || \"+D+\" === '' \"),r+=\" ) \"+D+\" = \",r+=\"shared\"==e.opts.useDefaults?\" \"+e.useDefault(W.default)+\" \":\" \"+JSON.stringify(W.default)+\" \",r+=\"; \"}}else if(\"array\"==w.type&&Array.isArray(e.schema.items)){var $=e.schema.items;if($){_=-1;for(var W,H=$.length-1;_<H;)if(void 0!==(W=$[_+=1]).default)if(D=g+\"[\"+_+\"]\",e.compositeRule){if(e.opts.strictDefaults){if(C=\"default is ignored for: \"+D,\"log\"!==e.opts.strictDefaults)throw new Error(C);e.logger.warn(C)}}else r+=\" if (\"+D+\" === undefined \",\"empty\"==e.opts.useDefaults&&(r+=\" || \"+D+\" === null || \"+D+\" === '' \"),r+=\" ) \"+D+\" = \",r+=\"shared\"==e.opts.useDefaults?\" \"+e.useDefault(W.default)+\" \":\" \"+JSON.stringify(W.default)+\" \",r+=\"; \"}}var G,V=w.rules;if(V)for(var j,Z=-1,z=V.length-1;Z<z;)!X(j=V[Z+=1])||(j=j.code(e,j.keyword,w.type))&&(r+=\" \"+j+\" \",f&&(v+=\"}\"));f&&(r+=\" \"+v+\" \",v=\"\"),w.type&&(r+=\" } \",A&&A===w.type&&!b&&(d=e.schemaPath+\".type\",u=e.errSchemaPath+\"/type\",(G=G||[]).push(r+=\" else { \"),r=\"\",!1!==e.createErrors?(r+=\" { keyword: 'type' , dataPath: (dataPath || '') + \"+e.errorPath+\" , schemaPath: \"+e.util.toQuotedString(u)+\" , params: { type: '\",r+=y?\"\"+A.join(\",\"):\"\"+A,r+=\"' } \",!1!==e.opts.messages&&(r+=\" , message: 'should be \",r+=y?\"\"+A.join(\",\"):\"\"+A,r+=\"' \"),e.opts.verbose&&(r+=\" , schema: validate.schema\"+d+\" , parentSchema: validate.schema\"+e.schemaPath+\" , data: \"+g+\" \"),r+=\" } \"):r+=\" {} \",R=r,r=G.pop(),r+=!e.compositeRule&&f?e.async?\" throw new ValidationError([\"+R+\"]); \":\" validate.errors = [\"+R+\"]; return false; \":\" var err = \"+R+\";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \",r+=\" } \")),f&&(r+=\" if (errors === \",r+=m?\"0\":\"errs_\"+c,r+=\") { \",I+=\"}\")}}function K(e){for(var t=e.rules,n=0;n<t.length;n++)if(X(t[n]))return 1}function X(t){return void 0!==e.schema[t.keyword]||t.implements&&function(t){for(var n=t.implements,r=0;r<n.length;r++)if(void 0!==e.schema[n[r]])return 1}(t)}return f&&(r+=\" \"+I+\" \"),m?(i?(r+=\" if (errors === 0) return data;           \",r+=\" else throw new ValidationError(vErrors); \"):(r+=\" validate.errors = vErrors; \",r+=\" return errors === 0;       \"),r+=\" }; return validate;\"):r+=\" var \"+p+\" = errors === errs_\"+c+\";\",r}},7931:function(e,t,n){\"use strict\";var r=/^[a-z_$][a-z0-9_$-]*$/i,i=n(1793),s=n(5868);e.exports={add:function(e,t){var n=this.RULES;if(n.keywords[e])throw new Error(\"Keyword \"+e+\" is already defined\");if(!r.test(e))throw new Error(\"Keyword \"+e+\" is not a valid identifier\");if(t){this.validateKeyword(t,!0);var s=t.type;if(Array.isArray(s))for(var o=0;o<s.length;o++)c(e,s[o],t);else c(e,s,t);var a=t.metaSchema;a&&(t.$data&&this._opts.$data&&(a={anyOf:[a,{$ref:\"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\"}]}),t.validateSchema=this.compile(a,!0))}function c(e,t,r){for(var s,o=0;o<n.length;o++){var a=n[o];if(a.type==t){s=a;break}}s||n.push(s={type:t,rules:[]}),s.rules.push(r={keyword:e,definition:r,custom:!0,code:i,implements:r.implements}),n.custom[e]=r}return n.keywords[e]=n.all[e]=!0,this},get:function(e){var t=this.RULES.custom[e];return t?t.definition:this.RULES.keywords[e]||!1},remove:function(e){var t=this.RULES;delete t.keywords[e],delete t.all[e],delete t.custom[e];for(var n=0;n<t.length;n++)for(var r=t[n].rules,i=0;i<r.length;i++)if(r[i].keyword==e){r.splice(i,1);break}return this},validate:function e(t,n){e.errors=null;var r=this._validateKeyword=this._validateKeyword||this.compile(s,!0);if(r(t))return!0;if(e.errors=r.errors,n)throw new Error(\"custom keyword definition is invalid: \"+this.errorsText(r.errors));return!1}}},2303:function(e){\"use strict\";e.exports=function e(t,n){if(t===n)return!0;if(t&&n&&\"object\"==typeof t&&\"object\"==typeof n){if(t.constructor!==n.constructor)return!1;var r,i,s;if(Array.isArray(t)){if((r=t.length)!=n.length)return!1;for(i=r;0!=i--;)if(!e(t[i],n[i]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if((r=(s=Object.keys(t)).length)!==Object.keys(n).length)return!1;for(i=r;0!=i--;)if(!Object.prototype.hasOwnProperty.call(n,s[i]))return!1;for(i=r;0!=i--;){var o=s[i];if(!e(t[o],n[o]))return!1}return!0}return t!=t&&n!=n}},3508:function(e){\"use strict\";e.exports=function(e,t){\"function\"==typeof(t=t||{})&&(t={cmp:t});var n,r=\"boolean\"==typeof t.cycles&&t.cycles,i=t.cmp&&(n=t.cmp,function(e){return function(t,r){return n(t={key:t,value:e[t]},r={key:r,value:e[r]})}}),s=[];return function e(t){if(t&&t.toJSON&&\"function\"==typeof t.toJSON&&(t=t.toJSON()),void 0!==t){if(\"number\"==typeof t)return isFinite(t)?\"\"+t:\"null\";if(\"object\"!=typeof t)return JSON.stringify(t);if(Array.isArray(t)){for(a=\"[\",c=0;c<t.length;c++)c&&(a+=\",\"),a+=e(t[c])||\"null\";return a+\"]\"}if(null===t)return\"null\";if(-1!==s.indexOf(t)){if(r)return JSON.stringify(\"__cycle__\");throw new TypeError(\"Converting circular structure to JSON\")}for(var n=s.push(t)-1,o=Object.keys(t).sort(i&&i(t)),a=\"\",c=0;c<o.length;c++){var l=o[c],h=e(t[l]);h&&(a&&(a+=\",\"),a+=JSON.stringify(l)+\":\"+h)}return s.splice(n,1),\"{\"+a+\"}\"}}(e)}},233:function(e){e.exports=function e(t,n){\"use strict\";function r(t){return e.insensitive&&(\"\"+t).toLowerCase()||\"\"+t}var i,s,o=/(^([+\\-]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?$|^0x[0-9a-f]+$|\\d+)/gi,a=/(^[ ]*|[ ]*$)/g,c=/(^([\\w ]+,?[\\w ]+)?[\\w ]+,?[\\w ]+\\d+:\\d+(:\\d+)?[\\w ]?|^\\d{1,4}[\\/\\-]\\d{1,4}[\\/\\-]\\d{1,4}|^\\w+, \\w+ \\d+, \\d{4})/,l=/^0x[0-9a-f]+$/i,h=/^0/,d=(t=r(t).replace(a,\"\")||\"\",a=r(n).replace(a,\"\")||\"\",t.replace(o,\"\\0$1\\0\").replace(/\\0$/,\"\").replace(/^\\0/,\"\").split(\"\\0\")),u=a.replace(o,\"\\0$1\\0\").replace(/\\0$/,\"\").replace(/^\\0/,\"\").split(\"\\0\");if(t=parseInt(t.match(l),16)||1!==d.length&&t.match(c)&&Date.parse(t),a=parseInt(a.match(l),16)||t&&a.match(c)&&Date.parse(a)||null){if(t<a)return-1;if(a<t)return 1}for(var f=0,g=Math.max(d.length,u.length);f<g;f++){if(i=!(d[f]||\"\").match(h)&&parseFloat(d[f])||d[f]||0,s=!(u[f]||\"\").match(h)&&parseFloat(u[f])||u[f]||0,isNaN(i)!==isNaN(s))return isNaN(i)?1:-1;if(typeof i!=typeof s&&(i+=\"\",s+=\"\"),i<s)return-1;if(s<i)return 1}return 0}},5156:function(e,t){!function(e){\"use strict\";function t(e){return null!==e&&\"[object Array]\"===Object.prototype.toString.call(e)}function n(e){return null!==e&&\"[object Object]\"===Object.prototype.toString.call(e)}function r(e,i){if(e===i)return!0;if(Object.prototype.toString.call(e)!==Object.prototype.toString.call(i))return!1;if(!0===t(e)){if(e.length!==i.length)return!1;for(var s=0;s<e.length;s++)if(!1===r(e[s],i[s]))return!1;return!0}if(!0!==n(e))return!1;var o,a,c={};for(o in e)if(hasOwnProperty.call(e,o)){if(!1===r(e[o],i[o]))return!1;c[o]=!0}for(a in i)if(hasOwnProperty.call(i,a)&&!0!==c[a])return!1;return!0}function i(e){if(\"\"===e||!1===e||null===e)return!0;if(t(e)&&0===e.length)return!0;if(n(e)){for(var r in e)if(e.hasOwnProperty(r))return!1;return!0}return!1}var s=\"function\"==typeof String.prototype.trimLeft?function(e){return e.trimLeft()}:function(e){return e.match(/^\\s*(.*)/)[1]},o=0,a=2,c=\"UnquotedIdentifier\",l=\"QuotedIdentifier\",h=\"Rbracket\",d=\"Rparen\",u=\"Comma\",f=\"Colon\",g=\"Rbrace\",p=\"Number\",m=\"Current\",C=\"Expref\",b=\"Pipe\",v=\"Flatten\",I=\"Star\",A=\"Filter\",y=\"Lbrace\",w=\"Lbracket\",S=\"Lparen\",x=\"Literal\",E={\".\":\"Dot\",\"*\":I,\",\":u,\":\":f,\"{\":y,\"}\":g,\"]\":h,\"(\":S,\")\":d,\"@\":m},k={\"<\":!0,\">\":!0,\"=\":!0,\"!\":!0},_={\" \":!0,\"\\t\":!0,\"\\n\":!0};function T(e){return\"0\"<=e&&e<=\"9\"||\"-\"===e}function R(){}R.prototype={tokenize:function(e){var t,n,r,i,s=[];for(this._current=0;this._current<e.length;)if(\"a\"<=(i=e[this._current])&&i<=\"z\"||\"A\"<=i&&i<=\"Z\"||\"_\"===i)t=this._current,n=this._consumeUnquotedIdentifier(e),s.push({type:c,value:n,start:t});else if(void 0!==E[e[this._current]])s.push({type:E[e[this._current]],value:e[this._current],start:this._current}),this._current++;else if(T(e[this._current]))r=this._consumeNumber(e),s.push(r);else if(\"[\"===e[this._current])r=this._consumeLBracket(e),s.push(r);else if('\"'===e[this._current])t=this._current,n=this._consumeQuotedIdentifier(e),s.push({type:l,value:n,start:t});else if(\"'\"===e[this._current])t=this._current,n=this._consumeRawStringLiteral(e),s.push({type:x,value:n,start:t});else if(\"`\"===e[this._current]){t=this._current;var o=this._consumeLiteral(e);s.push({type:x,value:o,start:t})}else if(void 0!==k[e[this._current]])s.push(this._consumeOperator(e));else if(void 0!==_[e[this._current]])this._current++;else if(\"&\"===e[this._current])t=this._current,this._current++,\"&\"===e[this._current]?(this._current++,s.push({type:\"And\",value:\"&&\",start:t})):s.push({type:C,value:\"&\",start:t});else{if(\"|\"!==e[this._current])throw(o=new Error(\"Unknown character:\"+e[this._current])).name=\"LexerError\",o;t=this._current,this._current++,\"|\"===e[this._current]?(this._current++,s.push({type:\"Or\",value:\"||\",start:t})):s.push({type:b,value:\"|\",start:t})}return s},_consumeUnquotedIdentifier:function(e){var t,n=this._current;for(this._current++;this._current<e.length&&(\"a\"<=(t=e[this._current])&&t<=\"z\"||\"A\"<=t&&t<=\"Z\"||\"0\"<=t&&t<=\"9\"||\"_\"===t);)this._current++;return e.slice(n,this._current)},_consumeQuotedIdentifier:function(e){var t=this._current;this._current++;for(var n=e.length;'\"'!==e[this._current]&&this._current<n;){var r=this._current;\"\\\\\"!==e[r]||\"\\\\\"!==e[r+1]&&'\"'!==e[r+1]?r++:r+=2,this._current=r}return this._current++,JSON.parse(e.slice(t,this._current))},_consumeRawStringLiteral:function(e){var t=this._current;this._current++;for(var n=e.length;\"'\"!==e[this._current]&&this._current<n;){var r=this._current;\"\\\\\"!==e[r]||\"\\\\\"!==e[r+1]&&\"'\"!==e[r+1]?r++:r+=2,this._current=r}return this._current++,e.slice(t+1,this._current-1).replace(\"\\\\'\",\"'\")},_consumeNumber:function(e){var t=this._current;this._current++;for(var n=e.length;T(e[this._current])&&this._current<n;)this._current++;var r=parseInt(e.slice(t,this._current));return{type:p,value:r,start:t}},_consumeLBracket:function(e){var t=this._current;return this._current++,\"?\"===e[this._current]?(this._current++,{type:A,value:\"[?\",start:t}):\"]\"===e[this._current]?(this._current++,{type:v,value:\"[]\",start:t}):{type:w,value:\"[\",start:t}},_consumeOperator:function(e){var t=this._current,n=e[t];return this._current++,\"!\"===n?\"=\"===e[this._current]?(this._current++,{type:\"NE\",value:\"!=\",start:t}):{type:\"Not\",value:\"!\",start:t}:\"<\"===n?\"=\"===e[this._current]?(this._current++,{type:\"LTE\",value:\"<=\",start:t}):{type:\"LT\",value:\"<\",start:t}:\">\"===n?\"=\"===e[this._current]?(this._current++,{type:\"GTE\",value:\">=\",start:t}):{type:\"GT\",value:\">\",start:t}:\"=\"===n&&\"=\"===e[this._current]?(this._current++,{type:\"EQ\",value:\"==\",start:t}):void 0},_consumeLiteral:function(e){this._current++;for(var t=this._current,n=e.length;\"`\"!==e[this._current]&&this._current<n;){var r=this._current;\"\\\\\"!==e[r]||\"\\\\\"!==e[r+1]&&\"`\"!==e[r+1]?r++:r+=2,this._current=r}return t=(t=s(e.slice(t,this._current))).replace(\"\\\\`\",\"`\"),t=this._looksLikeJSON(t)?JSON.parse(t):JSON.parse('\"'+t+'\"'),this._current++,t},_looksLikeJSON:function(e){if(\"\"===e)return!1;if(0<='[{\"'.indexOf(e[0]))return!0;if(0<=[\"true\",\"false\",\"null\"].indexOf(e))return!0;if(!(0<=\"-0123456789\".indexOf(e[0])))return!1;try{return JSON.parse(e),!0}catch(e){return!1}}};var B={};function O(){}function L(e){this.runtime=e}function P(e){this._interpreter=e,this.functionTable={abs:{_func:this._functionAbs,_signature:[{types:[o]}]},avg:{_func:this._functionAvg,_signature:[{types:[8]}]},ceil:{_func:this._functionCeil,_signature:[{types:[o]}]},contains:{_func:this._functionContains,_signature:[{types:[a,3]},{types:[1]}]},ends_with:{_func:this._functionEndsWith,_signature:[{types:[a]},{types:[a]}]},floor:{_func:this._functionFloor,_signature:[{types:[o]}]},length:{_func:this._functionLength,_signature:[{types:[a,3,4]}]},map:{_func:this._functionMap,_signature:[{types:[6]},{types:[3]}]},max:{_func:this._functionMax,_signature:[{types:[8,9]}]},merge:{_func:this._functionMerge,_signature:[{types:[4],variadic:!0}]},max_by:{_func:this._functionMaxBy,_signature:[{types:[3]},{types:[6]}]},sum:{_func:this._functionSum,_signature:[{types:[8]}]},starts_with:{_func:this._functionStartsWith,_signature:[{types:[a]},{types:[a]}]},min:{_func:this._functionMin,_signature:[{types:[8,9]}]},min_by:{_func:this._functionMinBy,_signature:[{types:[3]},{types:[6]}]},type:{_func:this._functionType,_signature:[{types:[1]}]},keys:{_func:this._functionKeys,_signature:[{types:[4]}]},values:{_func:this._functionValues,_signature:[{types:[4]}]},sort:{_func:this._functionSort,_signature:[{types:[9,8]}]},sort_by:{_func:this._functionSortBy,_signature:[{types:[3]},{types:[6]}]},join:{_func:this._functionJoin,_signature:[{types:[a]},{types:[9]}]},reverse:{_func:this._functionReverse,_signature:[{types:[a,3]}]},to_array:{_func:this._functionToArray,_signature:[{types:[1]}]},to_string:{_func:this._functionToString,_signature:[{types:[1]}]},to_number:{_func:this._functionToNumber,_signature:[{types:[1]}]},not_null:{_func:this._functionNotNull,_signature:[{types:[1],variadic:!0}]}}}B.EOF=0,B[c]=0,B[l]=0,B[h]=0,B[d]=0,B[u]=0,B[g]=0,B[p]=0,B[m]=0,B[C]=0,B.Pipe=1,B.Or=2,B.And=3,B.EQ=5,B.GT=5,B.LT=5,B.GTE=5,B.LTE=5,B.NE=5,B[v]=9,B.Star=20,B[A]=21,B.Dot=40,B.Not=45,B[y]=50,B[w]=55,B[S]=60,O.prototype={parse:function(e){if(this._loadTokens(e),this.index=0,e=this.expression(0),\"EOF\"===this._lookahead(0))return e;throw e=this._lookaheadToken(0),(e=new Error(\"Unexpected token type: \"+e.type+\", value: \"+e.value)).name=\"ParserError\",e},_loadTokens:function(e){var t=(new R).tokenize(e);t.push({type:\"EOF\",value:\"\",start:e.length}),this.tokens=t},expression:function(e){var t=this._lookaheadToken(0);this._advance();for(var n=this.nud(t),r=this._lookahead(0);e<B[r];)this._advance(),n=this.led(r,n),r=this._lookahead(0);return n},_lookahead:function(e){return this.tokens[this.index+e].type},_lookaheadToken:function(e){return this.tokens[this.index+e]},_advance:function(){this.index++},nud:function(e){var t,n;switch(e.type){case x:return{type:\"Literal\",value:e.value};case c:return{type:\"Field\",name:e.value};case l:var r={type:\"Field\",name:e.value};if(this._lookahead(0)===S)throw new Error(\"Quoted identifier not allowed for function names.\");return r;case\"Not\":return{type:\"NotExpression\",children:[t=this.expression(B.Not)]};case I:return t=null,{type:\"ValueProjection\",children:[{type:\"Identity\"},t=this._lookahead(0)===h?{type:\"Identity\"}:this._parseProjectionRHS(B.Star)]};case A:return this.led(e.type,{type:\"Identity\"});case y:return this._parseMultiselectHash();case v:return{type:\"Projection\",children:[{type:v,children:[{type:\"Identity\"}]},t=this._parseProjectionRHS(B.Flatten)]};case w:return this._lookahead(0)===p||this._lookahead(0)===f?(t=this._parseIndexExpression(),this._projectIfSlice({type:\"Identity\"},t)):this._lookahead(0)===I&&this._lookahead(1)===h?(this._advance(),this._advance(),{type:\"Projection\",children:[{type:\"Identity\"},t=this._parseProjectionRHS(B.Star)]}):this._parseMultiselectList();case m:return{type:m};case C:return{type:\"ExpressionReference\",children:[n=this.expression(B.Expref)]};case S:for(var i=[];this._lookahead(0)!==d;)this._lookahead(0)===m?(n={type:m},this._advance()):n=this.expression(0),i.push(n);return this._match(d),i[0];default:this._errorToken(e)}},led:function(e,t){var n;switch(e){case\"Dot\":var r=B.Dot;return this._lookahead(0)!==I?{type:\"Subexpression\",children:[t,n=this._parseDotRHS(r)]}:(this._advance(),{type:\"ValueProjection\",children:[t,n=this._parseProjectionRHS(r)]});case b:return n=this.expression(B.Pipe),{type:b,children:[t,n]};case\"Or\":return{type:\"OrExpression\",children:[t,n=this.expression(B.Or)]};case\"And\":return{type:\"AndExpression\",children:[t,n=this.expression(B.And)]};case S:r=t.name;for(var i,s=[];this._lookahead(0)!==d;)this._lookahead(0)===m?(i={type:m},this._advance()):i=this.expression(0),this._lookahead(0)===u&&this._match(u),s.push(i);return this._match(d),{type:\"Function\",name:r,children:s};case A:var o=this.expression(0);return this._match(h),{type:\"FilterProjection\",children:[t,n=this._lookahead(0)===v?{type:\"Identity\"}:this._parseProjectionRHS(B.Filter),o]};case v:return{type:\"Projection\",children:[{type:v,children:[t]},this._parseProjectionRHS(B.Flatten)]};case\"EQ\":case\"NE\":case\"GT\":case\"GTE\":case\"LT\":case\"LTE\":return this._parseComparator(t,e);case w:return(o=this._lookaheadToken(0)).type===p||o.type===f?(n=this._parseIndexExpression(),this._projectIfSlice(t,n)):(this._match(I),this._match(h),{type:\"Projection\",children:[t,n=this._parseProjectionRHS(B.Star)]});default:this._errorToken(this._lookaheadToken(0))}},_match:function(e){if(this._lookahead(0)!==e){var t=this._lookaheadToken(0);throw(t=new Error(\"Expected \"+e+\", got: \"+t.type)).name=\"ParserError\",t}this._advance()},_errorToken:function(e){throw(e=new Error(\"Invalid token (\"+e.type+'): \"'+e.value+'\"')).name=\"ParserError\",e},_parseIndexExpression:function(){if(this._lookahead(0)===f||this._lookahead(1)===f)return this._parseSliceExpression();var e={type:\"Index\",value:this._lookaheadToken(0).value};return this._advance(),this._match(h),e},_projectIfSlice:function(e,t){return e={type:\"IndexExpression\",children:[e,t]},\"Slice\"===t.type?{type:\"Projection\",children:[e,this._parseProjectionRHS(B.Star)]}:e},_parseSliceExpression:function(){for(var e=[null,null,null],t=0,n=this._lookahead(0);n!==h&&t<3;){if(n===f)t++,this._advance();else{if(n!==p){var r=this._lookahead(0);throw(r=new Error(\"Syntax error, unexpected token: \"+r.value+\"(\"+r.type+\")\")).name=\"Parsererror\",r}e[t]=this._lookaheadToken(0).value,this._advance()}n=this._lookahead(0)}return this._match(h),{type:\"Slice\",children:e}},_parseComparator:function(e,t){return{type:\"Comparator\",name:t,children:[e,this.expression(B[t])]}},_parseDotRHS:function(e){var t=this._lookahead(0);return 0<=[c,l,I].indexOf(t)?this.expression(e):t===w?(this._match(w),this._parseMultiselectList()):t===y?(this._match(y),this._parseMultiselectHash()):void 0},_parseProjectionRHS:function(e){var t;if(B[this._lookahead(0)]<10)t={type:\"Identity\"};else if(this._lookahead(0)===w)t=this.expression(e);else if(this._lookahead(0)===A)t=this.expression(e);else{if(\"Dot\"!==this._lookahead(0)){var n=this._lookaheadToken(0);throw(n=new Error(\"Sytanx error, unexpected token: \"+n.value+\"(\"+n.type+\")\")).name=\"ParserError\",n}this._match(\"Dot\"),t=this._parseDotRHS(e)}return t},_parseMultiselectList:function(){for(var e=[];this._lookahead(0)!==h;){var t=this.expression(0);if(e.push(t),this._lookahead(0)===u&&(this._match(u),this._lookahead(0)===h))throw new Error(\"Unexpected token Rbracket\")}return this._match(h),{type:\"MultiSelectList\",children:e}},_parseMultiselectHash:function(){for(var e,t=[],n=[c,l];;){if(e=this._lookaheadToken(0),n.indexOf(e.type)<0)throw new Error(\"Expecting an identifier token, got: \"+e.type);if(e=e.value,this._advance(),this._match(f),e={type:\"KeyValuePair\",name:e,value:this.expression(0)},t.push(e),this._lookahead(0)===u)this._match(u);else if(this._lookahead(0)===g){this._match(g);break}}return{type:\"MultiSelectHash\",children:t}}},L.prototype={search:function(e,t){return this.visit(e,t)},visit:function(e,s){var o,a,c,l;switch(e.type){case\"Field\":return null!==s&&n(s)&&void 0!==(d=s[e.name])?d:null;case\"Subexpression\":for(g=this.visit(e.children[0],s),A=1;A<e.children.length;A++)if(null===(g=this.visit(e.children[1],g)))return null;return g;case\"IndexExpression\":return R=this.visit(e.children[0],s),this.visit(e.children[1],R);case\"Index\":return t(s)?((h=e.value)<0&&(h=s.length+h),void 0===(g=s[h])&&(g=null),g):null;case\"Slice\":if(!t(s))return null;var h,d=e.children.slice(0),u=(d=(h=this.computeSliceParams(s.length,d))[0],h[1]),f=h[2],g=[];if(0<f)for(A=d;A<u;A+=f)g.push(s[A]);else for(A=d;u<A;A+=f)g.push(s[A]);return g;case\"Projection\":var p=this.visit(e.children[0],s);if(!t(p))return null;for(_=[],A=0;A<p.length;A++)null!==(a=this.visit(e.children[1],p[A]))&&_.push(a);return _;case\"ValueProjection\":if(!n(p=this.visit(e.children[0],s)))return null;_=[];for(var I=function(e){for(var t=Object.keys(e),n=[],r=0;r<t.length;r++)n.push(e[t[r]]);return n}(p),A=0;A<I.length;A++)null!==(a=this.visit(e.children[1],I[A]))&&_.push(a);return _;case\"FilterProjection\":if(!t(p=this.visit(e.children[0],s)))return null;var y=[],w=[];for(A=0;A<p.length;A++)i(o=this.visit(e.children[2],p[A]))||y.push(p[A]);for(var S=0;S<y.length;S++)null!==(a=this.visit(e.children[1],y[S]))&&w.push(a);return w;case\"Comparator\":switch(c=this.visit(e.children[0],s),l=this.visit(e.children[1],s),e.name){case\"EQ\":g=r(c,l);break;case\"NE\":g=!r(c,l);break;case\"GT\":g=l<c;break;case\"GTE\":g=l<=c;break;case\"LT\":g=c<l;break;case\"LTE\":g=c<=l;break;default:throw new Error(\"Unknown comparator: \"+e.name)}return g;case v:var x=this.visit(e.children[0],s);if(!t(x))return null;var E=[];for(A=0;A<x.length;A++)t(a=x[A])?E.push.apply(E,a):E.push(a);return E;case\"Identity\":return s;case\"MultiSelectList\":if(null===s)return null;for(_=[],A=0;A<e.children.length;A++)_.push(this.visit(e.children[A],s));return _;case\"MultiSelectHash\":if(null===s)return null;var k,_={};for(A=0;A<e.children.length;A++)_[(k=e.children[A]).name]=this.visit(k.value,s);return _;case\"OrExpression\":return i(o=this.visit(e.children[0],s))&&(o=this.visit(e.children[1],s)),o;case\"AndExpression\":return!0===i(c=this.visit(e.children[0],s))?c:this.visit(e.children[1],s);case\"NotExpression\":return i(c=this.visit(e.children[0],s));case\"Literal\":return e.value;case b:return R=this.visit(e.children[0],s),this.visit(e.children[1],R);case m:return s;case\"Function\":var T=[];for(A=0;A<e.children.length;A++)T.push(this.visit(e.children[A],s));return this.runtime.callFunction(e.name,T);case\"ExpressionReference\":var R=e.children[0];return R.jmespathType=C,R;default:throw new Error(\"Unknown node type: \"+e.type)}},computeSliceParams:function(e,t){var n=t[0],r=t[1],i=t[2];if(t=[null,null,null],null===i)i=1;else if(0===i){var s=new Error(\"Invalid slice, step cannot be 0\");throw s.name=\"RuntimeError\",s}return s=i<0,n=null===n?s?e-1:0:this.capSliceRange(e,n,i),r=null===r?s?-1:e:this.capSliceRange(e,r,i),t[0]=n,t[1]=r,t[2]=i,t},capSliceRange:function(e,t,n){return t<0?(t+=e)<0&&(t=n<0?-1:0):e<=t&&(t=n<0?e-1:e),t}},P.prototype={callFunction:function(e,t){var n=this.functionTable[e];if(void 0===n)throw new Error(\"Unknown function: \"+e+\"()\");return this._validateArgs(e,t,n._signature),n._func.call(this,t)},_validateArgs:function(e,t,n){var r,i,s,o;if(n[n.length-1].variadic){if(t.length<n.length)throw r=1===n.length?\" argument\":\" arguments\",new Error(\"ArgumentError: \"+e+\"() takes at least\"+n.length+r+\" but received \"+t.length)}else if(t.length!==n.length)throw r=1===n.length?\" argument\":\" arguments\",new Error(\"ArgumentError: \"+e+\"() takes \"+n.length+r+\" but received \"+t.length);for(var a=0;a<n.length;a++){o=!1,i=n[a].types,s=this._getTypeName(t[a]);for(var c=0;c<i.length;c++)if(this._typeMatches(s,i[c],t[a])){o=!0;break}if(!o)throw new Error(\"TypeError: \"+e+\"() expected argument \"+(a+1)+\" to be type \"+i+\" but received type \"+s+\" instead.\")}},_typeMatches:function(e,t,n){if(1===t)return!0;if(9!==t&&8!==t&&3!==t)return e===t;if(3===t)return 3===e;if(3===e){var r;8===t?r=o:9===t&&(r=a);for(var i=0;i<n.length;i++)if(!this._typeMatches(this._getTypeName(n[i]),r,n[i]))return!1;return!0}},_getTypeName:function(e){switch(Object.prototype.toString.call(e)){case\"[object String]\":return a;case\"[object Number]\":return o;case\"[object Array]\":return 3;case\"[object Boolean]\":return 5;case\"[object Null]\":return 7;case\"[object Object]\":return e.jmespathType===C?6:4}},_functionStartsWith:function(e){return 0===e[0].lastIndexOf(e[1])},_functionEndsWith:function(e){var t=e[0];return-1!==t.indexOf(e=e[1],t.length-e.length)},_functionReverse:function(e){if(this._getTypeName(e[0])===a){for(var t=e[0],n=\"\",r=t.length-1;0<=r;r--)n+=t[r];return n}return(e=e[0].slice(0)).reverse(),e},_functionAbs:function(e){return Math.abs(e[0])},_functionCeil:function(e){return Math.ceil(e[0])},_functionAvg:function(e){for(var t=0,n=e[0],r=0;r<n.length;r++)t+=n[r];return t/n.length},_functionContains:function(e){return 0<=e[0].indexOf(e[1])},_functionFloor:function(e){return Math.floor(e[0])},_functionLength:function(e){return(n(e[0])?Object.keys(e[0]):e[0]).length},_functionMap:function(e){for(var t=[],n=this._interpreter,r=e[0],i=e[1],s=0;s<i.length;s++)t.push(n.visit(r,i[s]));return t},_functionMerge:function(e){for(var t={},n=0;n<e.length;n++){var r,i=e[n];for(r in i)t[r]=i[r]}return t},_functionMax:function(e){if(0<e[0].length){if(this._getTypeName(e[0][0])===o)return Math.max.apply(Math,e[0]);for(var t=e[0],n=t[0],r=1;r<t.length;r++)n.localeCompare(t[r])<0&&(n=t[r]);return n}return null},_functionMin:function(e){if(0<e[0].length){if(this._getTypeName(e[0][0])===o)return Math.min.apply(Math,e[0]);for(var t=e[0],n=t[0],r=1;r<t.length;r++)t[r].localeCompare(n)<0&&(n=t[r]);return n}return null},_functionSum:function(e){for(var t=0,n=e[0],r=0;r<n.length;r++)t+=n[r];return t},_functionType:function(e){switch(this._getTypeName(e[0])){case o:return\"number\";case a:return\"string\";case 3:return\"array\";case 4:return\"object\";case 5:return\"boolean\";case 6:return\"expref\";case 7:return\"null\"}},_functionKeys:function(e){return Object.keys(e[0])},_functionValues:function(e){for(var t=e[0],n=Object.keys(t),r=[],i=0;i<n.length;i++)r.push(t[n[i]]);return r},_functionJoin:function(e){return e[1].join(e[0])},_functionToArray:function(e){return 3===this._getTypeName(e[0])?e[0]:[e[0]]},_functionToString:function(e){return this._getTypeName(e[0])===a?e[0]:JSON.stringify(e[0])},_functionToNumber:function(e){var t,n=this._getTypeName(e[0]);return n===o?e[0]:n!==a||(t=+e[0],isNaN(t))?null:t},_functionNotNull:function(e){for(var t=0;t<e.length;t++)if(7!==this._getTypeName(e[t]))return e[t];return null},_functionSort:function(e){return(e=e[0].slice(0)).sort(),e},_functionSortBy:function(e){var t=e[0].slice(0);if(0===t.length)return t;var n=this._interpreter,r=e[1],i=this._getTypeName(n.visit(r,t[0]));if([o,a].indexOf(i)<0)throw new Error(\"TypeError\");for(var s=this,c=[],l=0;l<t.length;l++)c.push([l,t[l]]);c.sort((function(e,t){var o=n.visit(r,e[1]),a=n.visit(r,t[1]);if(s._getTypeName(o)!==i)throw new Error(\"TypeError: expected \"+i+\", received \"+s._getTypeName(o));if(s._getTypeName(a)!==i)throw new Error(\"TypeError: expected \"+i+\", received \"+s._getTypeName(a));return a<o?1:o<a?-1:e[0]-t[0]}));for(var h=0;h<c.length;h++)t[h]=c[h][1];return t},_functionMaxBy:function(e){for(var t,n,r=e[0],i=this.createKeyFunction(e[1],[o,a]),s=-1/0,c=0;c<r.length;c++)s<(n=i(r[c]))&&(s=n,t=r[c]);return t},_functionMinBy:function(e){for(var t,n,r=e[0],i=this.createKeyFunction(e[1],[o,a]),s=1/0,c=0;c<r.length;c++)(n=i(r[c]))<s&&(s=n,t=r[c]);return t},createKeyFunction:function(e,t){var n=this,r=this._interpreter;return function(i){var s=r.visit(e,i);if(t.indexOf(n._getTypeName(s))<0)throw i=\"TypeError: expected one of \"+t+\", received \"+n._getTypeName(s),new Error(i);return s}}},e.tokenize=function(e){return(new R).tokenize(e)},e.compile=function(e){return(new O).parse(e)},e.search=function(e,t){var n=new O,r=new P,i=new L(r);return r._interpreter=i,t=n.parse(t),i.search(t,e)},e.strictDeepEqual=r}(t)},500:function(e){\"use strict\";var t=e.exports=function(e,r,i){\"function\"==typeof r&&(i=r,r={}),function e(r,i,s,o,a,c,l,h,d,u){if(o&&\"object\"==typeof o&&!Array.isArray(o)){for(var f in i(o,a,c,l,h,d,u),o){var g=o[f];if(Array.isArray(g)){if(f in t.arrayKeywords)for(var p=0;p<g.length;p++)e(r,i,s,g[p],a+\"/\"+f+\"/\"+p,c,a,f,o,p)}else if(f in t.propsKeywords){if(g&&\"object\"==typeof g)for(var m in g)e(r,i,s,g[m],a+\"/\"+f+\"/\"+n(m),c,a,f,o,m)}else(f in t.keywords||r.allKeys&&!(f in t.skipKeywords))&&e(r,i,s,g,a+\"/\"+f,c,a,f,o)}s(o,a,c,l,h,d,u)}}(r,\"function\"==typeof(i=r.cb||i)?i:i.pre||function(){},i.post||function(){},e,\"\",e)};function n(e){return e.replace(/~/g,\"~0\").replace(/\\//g,\"~1\")}t.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0},t.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0},t.propsKeywords={definitions:!0,properties:!0,patternProperties:!0,dependencies:!0},t.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0}},7026:function(e,t){\"use strict\";var n={b:\"\\b\",f:\"\\f\",n:\"\\n\",r:\"\\r\",t:\"\\t\",'\"':'\"',\"/\":\"/\",\"\\\\\":\"\\\\\"},r=\"a\".charCodeAt();t.Q=function(e,t,i){var s={},a=0,c=0,l=0,h=i&&i.bigint&&\"undefined\"!=typeof BigInt;return{data:function t(n,r){var i;d(),C(n,\"value\");var s=g();switch(s){case\"t\":f(\"rue\"),i=!0;break;case\"f\":f(\"alse\"),i=!1;break;case\"n\":f(\"ull\"),i=null;break;case'\"':i=u();break;case\"[\":i=function(e){d();var n=[],r=0;if(\"]\"==g())return n;for(p();;){var i=e+\"/\"+r;if(n.push(t(i)),d(),\"]\"==(i=g()))break;\",\"!=i&&A(),d(),r++}return n}(n);break;case\"{\":i=function(e){d();var n={};if(\"}\"==g())return n;for(p();;){var r=v();'\"'!=g()&&A();var i=u(),s=e+\"/\"+o(i);if(b(s,\"key\",r),C(s,\"keyEnd\"),d(),\":\"!=g()&&A(),d(),n[i]=t(s),d(),\"}\"==(s=g()))break;\",\"!=s&&A(),d()}return n}(n);break;default:p(),0<=\"-0123456789\".indexOf(s)?i=function(){var t=\"\",n=!0;\"-\"==e[l]&&(t+=g()),t+=(\"0\"==e[l]?g:m)(),\".\"==e[l]&&(t+=g()+m(),n=!1),\"e\"!=e[l]&&\"E\"!=e[l]||(t+=g(),\"+\"!=e[l]&&\"-\"!=e[l]||(t+=g()),t+=m(),n=!1);var r=+t;return h&&n&&(r>Number.MAX_SAFE_INTEGER||r<Number.MIN_SAFE_INTEGER)?BigInt(t):r}():I()}return C(n,\"valueEnd\"),d(),r&&l<e.length&&I(),i}(\"\",!0),pointers:s};function d(){e:for(;l<e.length;){switch(e[l]){case\" \":c++;break;case\"\\t\":c+=4;break;case\"\\r\":c=0;break;case\"\\n\":c=0,a++;break;default:break e}l++}}function u(){for(var e,t=\"\";'\"'!=(e=g());)\"\\\\\"==e?(e=g())in n?t+=n[e]:\"u\"==e?t+=function(){for(var e=4,t=0;e--;){t<<=4;var n=g().toLowerCase();\"a\"<=n&&n<=\"f\"?t+=n.charCodeAt()-r+10:\"0\"<=n&&n<=\"9\"?t+=+n:A()}return String.fromCharCode(t)}():A():t+=e;return t}function f(e){for(var t=0;t<e.length;t++)g()!==e[t]&&A()}function g(){y();var t=e[l];return l++,c++,t}function p(){l--,c--}function m(){for(var t=\"\";\"0\"<=e[l]&&e[l]<=\"9\";)t+=g();if(t.length)return t;y(),I()}function C(e,t){b(e,t,v())}function b(e,t,n){s[e]=s[e]||{},s[e][t]=n}function v(){return{line:a,column:c,pos:l}}function I(){throw new SyntaxError(\"Unexpected token \"+e[l]+\" in JSON at position \"+l)}function A(){p(),I()}function y(){if(l>=e.length)throw new SyntaxError(\"Unexpected end of JSON input\")}};var i=/~/g,s=/\\//g;function o(e){return e.replace(i,\"~0\").replace(s,\"~1\")}},5755:function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),((t.default=function e(t,n){if(!(this instanceof e))throw new SyntaxError(\"Constructor must be called with the new operator\");this.message=t+\" (char \"+n+\")\",this.char=n,this.stack=(new Error).stack}).prototype=new Error).constructor=Error},8909:function(e,t,n){e.exports=n(8107).default},8107:function(e,t,n){\"use strict\";t.default=function(e){if(g=\"\",p=0,m=(f=e).charAt(0),C=\"\",b=a,A(),e=b===o&&\"{\"===C,y(),\"\"===C)return g;if(e&&I()){for(;I();)g=(0,s.insertBeforeLastWhitespace)(g,\",\"),y();return\"[\\n\".concat(g,\"\\n]\")}throw new i.default(\"Unexpected characters\",p-C.length)};var r,i=(r=n(5755))&&r.__esModule?r:{default:r},s=n(1536),o=0,a=6,c={\"\":!0,\"{\":!0,\"}\":!0,\"[\":!0,\"]\":!0,\":\":!0,\",\":!0,\"(\":!0,\")\":!0,\";\":!0,\"+\":!0},l={'\"':'\"',\"\\\\\":\"\\\\\",\"/\":\"/\",b:\"\\b\",f:\"\\f\",n:\"\\n\",r:\"\\r\",t:\"\\t\"},h={\"\\b\":\"\\\\b\",\"\\f\":\"\\\\f\",\"\\n\":\"\\\\n\",\"\\r\":\"\\\\r\",\"\\t\":\"\\\\t\"},d={null:\"null\",true:\"true\",false:\"false\"},u={None:\"null\",True:\"true\",False:\"false\"},f=\"\",g=\"\",p=0,m=\"\",C=\"\",b=a;function v(){p++,m=f.charAt(p)}function I(){return b===o&&(\"[\"===C||\"{\"===C)||2===b||1===b||3===b}function A(){g+=C,b=a,C=\"\",c[m]?(b=o,C=m,v()):function(){if((0,s.isDigit)(m)||\"-\"===m){if(b=1,\"-\"===m){if(C+=m,v(),!(0,s.isDigit)(m))throw new i.default(\"Invalid number, digit expected\",p)}else\"0\"===m&&(C+=m,v());for(;(0,s.isDigit)(m);)C+=m,v();if(\".\"===m){if(C+=m,v(),!(0,s.isDigit)(m))throw new i.default(\"Invalid number, digit expected\",p);for(;(0,s.isDigit)(m);)C+=m,v()}if(\"e\"===m||\"E\"===m){if(C+=m,v(),\"+\"!==m&&\"-\"!==m||(C+=m,v()),!(0,s.isDigit)(m))throw new i.default(\"Invalid number, digit expected\",p);for(;(0,s.isDigit)(m);)C+=m,v()}}else!function(){if((0,s.isQuote)(m)){var e=(0,s.normalizeQuote)(m);for(C+='\"',b=2,v();\"\"!==m&&(0,s.normalizeQuote)(m)!==e;)if(\"\\\\\"===m)if(v(),void 0!==l[m])C+=\"\\\\\"+m,v();else if(\"u\"===m){C+=\"\\\\u\",v();for(var t=0;t<4;t++){if(!(0,s.isHex)(m))throw new i.default(\"Invalid unicode character\",p-C.length);C+=m,v()}}else{if(\"'\"!==m)throw new i.default('Invalid escape character \"\\\\'+m+'\"',p);C+=\"'\",v()}else C+=h[m]?h[m]:'\"'===m?'\\\\\"':m,v();if((0,s.normalizeQuote)(m)!==e)throw new i.default(\"End of string expected\",p-C.length);return C+='\"',v(),0}!function(){if((0,s.isAlpha)(m))for(b=3;(0,s.isAlpha)(m)||(0,s.isDigit)(m)||\"$\"===m;)C+=m,v();else!function(){if((0,s.isWhitespace)(m)||(0,s.isSpecialWhitespace)(m))for(b=4;(0,s.isWhitespace)(m)||(0,s.isSpecialWhitespace)(m);)C+=m,v();else!function(){if(\"/\"===m&&\"*\"===f[p+1]){for(b=5;\"\"!==m&&(\"*\"!==m||\"*\"===m&&\"/\"!==f[p+1]);)C+=m,v();return\"*\"===m&&\"/\"===f[p+1]&&(C+=m,v(),C+=m,v())}if(\"/\"!==m||\"/\"!==f[p+1])!function(){for(b=a;\"\"!==m;)C+=m,v();throw new i.default('Syntax error in part \"'+C+'\"',p-C.length)}();else for(b=5;\"\"!==m&&\"\\n\"!==m;)C+=m,v()}()}()}()}()}(),4===b&&(C=(0,s.normalizeWhitespace)(C),A()),5===b&&(b=a,C=\"\",A())}function y(){if(b!==o||\"{\"!==C)!function(){if(b===o&&\"[\"===C){if(A(),b===o&&\"]\"===C)return A();for(;;)if(y(),b===o&&\",\"===C){if(A(),b===o&&\"]\"===C){g=(0,s.stripLastOccurrence)(g,\",\");break}}else{if(!I())break;g=(0,s.insertBeforeLastWhitespace)(g,\",\")}return b===o&&\"]\"===C?A():g=(0,s.insertBeforeLastWhitespace)(g,\"]\")}!function(){if(2!==b)1===b?A():function(){if(3===b){if(d[C])return A();if(u[C])return C=u[C],A();var e=C,t=g.length;if(C=\"\",A(),b===o&&\"(\"===C)return C=\"\",A(),y(),b===o&&\")\"===C&&(C=\"\",A(),b===o&&\";\"===C&&(C=\"\",A()));for(g=(0,s.insertAtIndex)(g,'\"'.concat(e),t);3===b||1===b;)A();return g+='\"'}!function(){throw new i.default(\"\"===C?\"Unexpected end of json string\":\"Value expected\",p-C.length)}()}();else for(A();b===o&&\"+\"===C;){var e;C=\"\",A(),2===b&&(e=g.lastIndexOf('\"'),g=g.substring(0,e)+C.substring(1),C=\"\",A())}}()}();else if(A(),b!==o||\"}\"!==C){for(;;){if(3!==b&&1!==b||(b=2,C='\"'.concat(C,'\"')),2!==b)throw new i.default(\"Object key expected\",p-C.length);if(A(),b===o&&\":\"===C)A();else{if(!I())throw new i.default(\"Colon expected\",p-C.length);g=(0,s.insertBeforeLastWhitespace)(g,\":\")}if(y(),b===o&&\",\"===C){if(A(),b===o&&\"}\"===C){g=(0,s.stripLastOccurrence)(g,\",\");break}}else{if(2!==b&&1!==b&&3!==b)break;g=(0,s.insertBeforeLastWhitespace)(g,\",\")}}b===o&&\"}\"===C?A():g=(0,s.insertBeforeLastWhitespace)(g,\"}\")}else A()}},1536:function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.isAlpha=function(e){return/^[a-zA-Z_]$/.test(e)},t.isHex=function(e){return/^[0-9a-fA-F]$/.test(e)},t.isDigit=function(e){return\"0\"<=e&&e<=\"9\"},t.isWhitespace=function(e){return\" \"===e||\"\\t\"===e||\"\\n\"===e||\"\\r\"===e},t.isSpecialWhitespace=i,t.normalizeWhitespace=function(e){for(var t=\"\",n=0;n<e.length;n++){var r=e[n];t+=i(r)?\" \":r}return t},t.isQuote=function(e){return n.includes(e)||r.includes(e)},t.normalizeQuote=function(e){return n.includes(e)?\"'\":r.includes(e)?'\"':e},t.stripLastOccurrence=function(e,t){return-1!==(t=e.lastIndexOf(t))?e.substring(0,t)+e.substring(t+1):e},t.insertBeforeLastWhitespace=function(e,t){return e.replace(/\\s*$/,(function(e){return t+e}))},t.insertAtIndex=function(e,t,n){return e.substring(0,n)+t+e.substring(n)};var n=[\"'\",\"\\u2018\",\"\\u2019\",\"`\",\"\\xb4\"],r=['\"',\"\\u201c\",\"\\u201d\"];function i(e){return\"\\xa0\"===e||\"\\u2000\"<=e&&e<=\"\\u200a\"||\"\\u202f\"===e||\"\\u205f\"===e||\"\\u3000\"===e}},483:function(e,t){var n,r;!function(){\"use strict\";n=[],void 0===(r=\"function\"==typeof(r=function(){function e(e){return\"object\"==typeof Node?e instanceof Node:e&&\"object\"==typeof e&&\"number\"==typeof e.nodeType}function t(){var e=[];return{watch:e.push.bind(e),trigger:function(t,n){for(var r=!0,i={detail:n,preventDefault:function(){r=!1}},s=0;s<e.length;s++)e[s](t,i);return r}}}function n(e){return\"none\"===window.getComputedStyle(e).display}function r(e){this.elem=e}r.make=function(e,t){\"string\"==typeof e&&(e=document.querySelector(e));var n=document.createElement(t||\"div\");return(e||document.body).appendChild(n),new r(n)},r.prototype={child:function(e){return r.make(this.elem,e)},stylize:function(e){for(var t in void 0!==(e=e||{}).opacity&&(e.filter=\"alpha(opacity=\"+100*e.opacity+\")\"),e)e.hasOwnProperty(t)&&(this.elem.style[t]=e[t]);return this},clazz:function(e){return this.elem.className+=\" \"+e,this},html:function(t){return e(t)?this.elem.appendChild(t):this.elem.innerHTML=t,this},onClick:function(e){return this.elem.addEventListener(\"click\",e),this},destroy:function(){this.elem.parentNode.removeChild(this.elem)},hide:function(){this.elem.style.display=\"none\"},show:function(){this.elem.style.display=\"block\"},attr:function(e,t){return void 0!==t&&this.elem.setAttribute(e,t),this},anyAncestor:function(e){for(var t=this.elem;t;){if(e(new r(t)))return!0;t=t.parentNode}return!1},isVisible:function(){return!n(this.elem)}};var i=1;function s(e){return function(){return e().elem}}var o=t(),a=t();return document.documentElement.addEventListener(\"keydown\",(function(e){var t=e.which||e.keyCode;27===t?o.trigger():9===t&&a.trigger(e)})),function(c){\"string\"!=typeof c&&!e(c)||(c={content:c});var l=t(),h=t(),d=t(),u=t(),f=t();function g(e,t){return\"function\"==typeof(e=c[e])&&(e=e(t)),void 0===e?t:e}var p,m,C,b,v,I,A,y,w,S=R.bind(window,\"modal\"),x=R.bind(window,\"overlay\"),E=R.bind(window,\"close\");function k(e){x().hide(),S().hide(),f.trigger(p,e)}function _(e){u.trigger(p,e)&&k(e)}function T(e){return function(){return e.apply(this,arguments),p}}function R(e,t){var n,s,o;return m||(n=function(e,t){var n=e(\"width\",\"auto\");\"number\"==typeof n&&(n+=\"px\");var s=e(\"modalId\",\"pico-\"+i++);return r.make(e(\"parent\")).clazz(\"pico-content\").clazz(e(\"modalClass\",\"\")).stylize({display:\"none\",position:\"fixed\",zIndex:10001,left:\"50%\",top:\"38.1966%\",maxHeight:\"90%\",boxSizing:\"border-box\",width:n,\"-ms-transform\":\"translate(-50%,-38.1966%)\",\"-moz-transform\":\"translate(-50%,-38.1966%)\",\"-webkit-transform\":\"translate(-50%,-38.1966%)\",\"-o-transform\":\"translate(-50%,-38.1966%)\",transform:\"translate(-50%,-38.1966%)\"}).stylize(e(\"modalStyles\",{overflow:\"auto\",backgroundColor:\"white\",padding:\"20px\",borderRadius:\"5px\"})).html(e(\"content\")).attr(\"id\",s).attr(\"role\",\"dialog\").attr(\"aria-labelledby\",e(\"ariaLabelledBy\")).attr(\"aria-describedby\",e(\"ariaDescribedBy\",s)).onClick((function(e){new r(e.target).anyAncestor((function(e){return/\\bpico-close\\b/.test(e.elem.className)}))&&t()}))}(g,_),m={modal:n,overlay:(o=_,r.make((s=g)(\"parent\")).clazz(\"pico-overlay\").clazz(s(\"overlayClass\",\"\")).stylize({display:\"none\",position:\"fixed\",top:\"0px\",left:\"0px\",height:\"100%\",width:\"100%\",zIndex:1e4}).stylize(s(\"overlayStyles\",{opacity:.5,background:\"#000\"})).onClick((function(){s(\"overlayClose\",!0)&&o()}))),close:function(e,t){if(t(\"closeButton\",!0))return e.child(\"button\").html(t(\"closeHtml\",\"&#xD7;\")).clazz(\"pico-close\").clazz(t(\"closeClass\",\"\")).stylize(t(\"closeStyles\",{borderRadius:\"2px\",border:0,padding:0,cursor:\"pointer\",height:\"15px\",width:\"15px\",position:\"absolute\",top:\"5px\",right:\"5px\",fontSize:\"16px\",textAlign:\"center\",lineHeight:\"15px\",background:\"#CCC\"})).attr(\"aria-label\",t(\"close-label\",\"Close\"))}(n,g)},l.trigger(p,t)),m[e]}function B(e,t){return(e.msMatchesSelector||e.webkitMatchesSelector||e.matches).call(e,t)}function O(e){return!(n(e)||B(e,\":disabled\")||e.hasAttribute(\"contenteditable\"))&&(e.hasAttribute(\"tabindex\")||B(e,\"input,select,textarea,button,a[href],area[href],iframe\"))}function L(e){for(var t=e.getElementsByTagName(\"*\"),n=0;n<t.length;n++)if(O(t[n]))return t[n]}return p={modalElem:s(S),closeElem:s(E),overlayElem:s(x),buildDom:T(R.bind(null,null)),isVisible:function(){return!!(m&&S&&S().isVisible())},show:function(e){return h.trigger(p,e)&&(x().show(),E(),S().show(),d.trigger(p,e)),this},close:T(_),forceClose:T(k),destroy:function(){S().destroy(),x().destroy(),x=S=E=void 0},options:function(e){Object.keys(e).map((function(t){c[t]=e[t]}))},afterCreate:T(l.watch),beforeShow:T(h.watch),afterShow:T(d.watch),beforeClose:T(u.watch),afterClose:T(f.watch)},C=p,b=g.bind(null,\"focus\",!0),C.beforeShow((function(){v=document.activeElement})),C.afterShow((function(){var e;!b()||(e=L(C.modalElem()))&&e.focus()})),C.afterClose((function(){b()&&v&&v.focus(),v=null})),a.watch((function(e){var t,n;b()&&C.isVisible()&&(t=L(C.modalElem()),n=function(e){for(var t=e.getElementsByTagName(\"*\"),n=t.length;n--;)if(O(t[n]))return t[n]}(C.modalElem()),(e.shiftKey?t:n)===document.activeElement&&((e.shiftKey?n:t).focus(),e.preventDefault()))})),I=p,A=g.bind(null,\"bodyOverflow\",!0),w=new r(document.body),I.beforeShow((function(){y=w.elem.style.overflow,A()&&w.stylize({overflow:\"hidden\"})})),I.afterClose((function(){w.stylize({overflow:y})})),o.watch((function(){g(\"escCloses\",!0)&&p.isVisible()&&p.close()})),p}})?r.apply(t,n):r)||(e.exports=r)}()},7533:function(e,t){!function(e){\"use strict\";function t(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];if(1<t.length){t[0]=t[0].slice(0,-1);for(var r=t.length-1,i=1;i<r;++i)t[i]=t[i].slice(1,-1);return t[r]=t[r].slice(1),t.join(\"\")}return t[0]}function n(e){return\"(?:\"+e+\")\"}function r(e){return void 0===e?\"undefined\":null===e?\"null\":Object.prototype.toString.call(e).split(\" \").pop().split(\"]\").shift().toLowerCase()}function i(e){return e.toUpperCase()}function s(e){var r=\"[A-Za-z]\",i=\"[0-9]\",s=t(i,\"[A-Fa-f]\"),o=n(n(\"%[EFef]\"+s+\"%\"+s+s+\"%\"+s+s)+\"|\"+n(\"%[89A-Fa-f]\"+s+\"%\"+s+s)+\"|\"+n(\"%\"+s+s)),a=\"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",c=t(\"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",a),l=e?\"[\\\\uE000-\\\\uF8FF]\":\"[]\",h=t(r,i,\"[\\\\-\\\\.\\\\_\\\\~]\",e?\"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\":\"[]\"),d=n(r+t(r,i,\"[\\\\+\\\\-\\\\.]\")+\"*\"),u=n(n(o+\"|\"+t(h,a,\"[\\\\:]\"))+\"*\"),f=n((E=\"(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9][0-9])|(?:0?[1-9][0-9])|0?0?[0-9])\")+\"\\\\.\"+E+\"\\\\.\"+E+\"\\\\.\"+E),g=n(s+\"{1,4}\"),p=n(n(g+\"\\\\:\"+g)+\"|\"+f),m=n(n(g+\"\\\\:\")+\"{6}\"+p),C=n(\"\\\\:\\\\:\"+n(g+\"\\\\:\")+\"{5}\"+p),b=n(n(g)+\"?\\\\:\\\\:\"+n(g+\"\\\\:\")+\"{4}\"+p),v=n(n(n(g+\"\\\\:\")+\"{0,1}\"+g)+\"?\\\\:\\\\:\"+n(g+\"\\\\:\")+\"{3}\"+p),I=n(n(n(g+\"\\\\:\")+\"{0,2}\"+g)+\"?\\\\:\\\\:\"+n(g+\"\\\\:\")+\"{2}\"+p),A=n(n(n(g+\"\\\\:\")+\"{0,3}\"+g)+\"?\\\\:\\\\:\"+g+\"\\\\:\"+p),y=n(n(n(g+\"\\\\:\")+\"{0,4}\"+g)+\"?\\\\:\\\\:\"+p),w=n(n(n(g+\"\\\\:\")+\"{0,5}\"+g)+\"?\\\\:\\\\:\"+g),S=n(n(n(g+\"\\\\:\")+\"{0,6}\"+g)+\"?\\\\:\\\\:\"),x=n([m,C,b,v,I,A,y,w,S].join(\"|\")),E=(e=n(n(h+\"|\"+o)+\"+\"),n(x+\"\\\\%25\"+e),n(x+n(\"\\\\%25|\\\\%(?!\"+s+\"{2})\")+e));return p=n(\"[vV]\"+s+\"+\\\\.\"+t(h,a,\"[\\\\:]\")+\"+\"),g=n(\"\\\\[\"+n(E+\"|\"+x+\"|\"+p)+\"\\\\]\"),m=n(n(o+\"|\"+t(h,a))+\"*\"),C=n(g+\"|\"+f+\"(?!\"+m+\")|\"+m),b=\"(?:[0-9]*)\",v=n(n(u+\"@\")+\"?\"+C+n(\"\\\\:\"+b)+\"?\"),I=n(o+\"|\"+t(h,a,\"[\\\\:\\\\@]\")),A=n(I+\"*\"),y=n(I+\"+\"),w=n(n(o+\"|\"+t(h,a,\"[\\\\@]\"))+\"+\"),S=n(n(\"\\\\/\"+A)+\"*\"),E=n(\"\\\\/\"+n(y+S)+\"?\"),p=n(w+S),g=n(y+S),n(S+\"|\"+E+\"|\"+p+\"|\"+g+\"|\"+(m=\"(?!\"+I+\")\")),A=n(n(I+\"|\"+t(\"[\\\\/\\\\?]\",l))+\"*\"),w=n(n(I+\"|[\\\\/\\\\?]\")+\"*\"),y=n(n(\"\\\\/\\\\/\"+v+S)+\"|\"+E+\"|\"+g+\"|\"+m),I=n(d+\"\\\\:\"+y+n(\"\\\\?\"+A)+\"?\"+n(\"\\\\#\"+w)+\"?\"),v=n(n(\"\\\\/\\\\/\"+v+S)+\"|\"+E+\"|\"+p+\"|\"+m),v=n(v+n(\"\\\\?\"+A)+\"?\"+n(\"\\\\#\"+w)+\"?\"),n(I+\"|\"+v),n(d+\"\\\\:\"+y+n(\"\\\\?\"+A)+\"?\"),n(n(\"\\\\/\\\\/(\"+n(\"(\"+u+\")@\")+\"?(\"+C+\")\"+n(\"\\\\:(\"+b+\")\")+\"?)\")+\"?(\"+S+\"|\"+E+\"|\"+g+\"|\"+m+\")\"),n(\"\\\\?(\"+A+\")\"),n(\"\\\\#(\"+w+\")\"),n(n(\"\\\\/\\\\/(\"+n(\"(\"+u+\")@\")+\"?(\"+C+\")\"+n(\"\\\\:(\"+b+\")\")+\"?)\")+\"?(\"+S+\"|\"+E+\"|\"+p+\"|\"+m+\")\"),n(\"\\\\?(\"+A+\")\"),n(\"\\\\#(\"+w+\")\"),n(n(\"\\\\/\\\\/(\"+n(\"(\"+u+\")@\")+\"?(\"+C+\")\"+n(\"\\\\:(\"+b+\")\")+\"?)\")+\"?(\"+S+\"|\"+E+\"|\"+g+\"|\"+m+\")\"),n(\"\\\\?(\"+A+\")\"),n(\"\\\\#(\"+w+\")\"),n(\"(\"+u+\")@\"),n(\"\\\\:(\"+b+\")\"),{NOT_SCHEME:new RegExp(t(\"[^]\",r,i,\"[\\\\+\\\\-\\\\.]\"),\"g\"),NOT_USERINFO:new RegExp(t(\"[^\\\\%\\\\:]\",h,a),\"g\"),NOT_HOST:new RegExp(t(\"[^\\\\%\\\\[\\\\]\\\\:]\",h,a),\"g\"),NOT_PATH:new RegExp(t(\"[^\\\\%\\\\/\\\\:\\\\@]\",h,a),\"g\"),NOT_PATH_NOSCHEME:new RegExp(t(\"[^\\\\%\\\\/\\\\@]\",h,a),\"g\"),NOT_QUERY:new RegExp(t(\"[^\\\\%]\",h,a,\"[\\\\:\\\\@\\\\/\\\\?]\",l),\"g\"),NOT_FRAGMENT:new RegExp(t(\"[^\\\\%]\",h,a,\"[\\\\:\\\\@\\\\/\\\\?]\"),\"g\"),ESCAPE:new RegExp(t(\"[^]\",h,a),\"g\"),UNRESERVED:new RegExp(h,\"g\"),OTHER_CHARS:new RegExp(t(\"[^\\\\%]\",h,c),\"g\"),PCT_ENCODED:new RegExp(o,\"g\"),IPV4ADDRESS:new RegExp(\"^(\"+f+\")$\"),IPV6ADDRESS:new RegExp(\"^\\\\[?(\"+x+\")\"+n(n(\"\\\\%25|\\\\%(?!\"+s+\"{2})\")+\"(\"+e+\")\")+\"?\\\\]?$\")}}var o=s(!1),a=s(!0),c=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,s=void 0;try{for(var o,a=e[Symbol.iterator]();!(r=(o=a.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,s=e}finally{try{!r&&a.return&&a.return()}finally{if(i)throw s}}return n}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")},l=2147483647,h=/^xn--/,d=/[^\\0-\\x7E]/,u=/[\\x2E\\u3002\\uFF0E\\uFF61]/g,f={overflow:\"Overflow: input needs wider integers to process\",\"not-basic\":\"Illegal input >= 0x80 (not a basic code point)\",\"invalid-input\":\"Invalid input\"},g=Math.floor,p=String.fromCharCode;function m(e){throw new RangeError(f[e])}function C(e,t){var n=e.split(\"@\"),r=\"\";return 1<n.length&&(r=n[0]+\"@\",e=n[1]),r+function(e,t){for(var n=[],r=e.length;r--;)n[r]=t(e[r]);return n}((e=e.replace(u,\".\")).split(\".\"),t).join(\".\")}function b(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function v(e,t,n){var r=0;for(e=n?g(e/700):e>>1,e+=g(e/t);455<e;r+=36)e=g(e/35);return g(r+36*e/(e+38))}var I=function(e){return C(e,(function(e){return d.test(e)?\"xn--\"+function(e){var t=[],n=(e=function(e){for(var t=[],n=0,r=e.length;n<r;){var i,s=e.charCodeAt(n++);55296<=s&&s<=56319&&n<r?56320==(64512&(i=e.charCodeAt(n++)))?t.push(((1023&s)<<10)+(1023&i)+65536):(t.push(s),n--):t.push(s)}return t}(e)).length,r=128,i=0,s=72,o=!0,a=!1,c=void 0;try{for(var h=e[Symbol.iterator]();!(o=(d=h.next()).done);o=!0){var d=d.value;d<128&&t.push(p(d))}}catch(e){a=!0,c=e}finally{try{!o&&h.return&&h.return()}finally{if(a)throw c}}var u=t.length,f=u;for(u&&t.push(\"-\");f<n;){var C=l,I=!0,A=!1,y=void 0;try{for(var w=e[Symbol.iterator]();!(I=(S=w.next()).done);I=!0){var S=S.value;r<=S&&S<C&&(C=S)}}catch(e){A=!0,y=e}finally{try{!I&&w.return&&w.return()}finally{if(A)throw y}}var x=f+1;C-r>g((l-i)/x)&&m(\"overflow\"),i+=(C-r)*x,r=C;var E=!0,k=!1,_=void 0;try{for(var T=e[Symbol.iterator]();!(E=(R=T.next()).done);E=!0){var R=R.value;if(R<r&&++i>l&&m(\"overflow\"),R==r){for(var B=i,O=36;;O+=36){var L=O<=s?1:s+26<=O?26:O-s;if(B<L)break;var P=B-L,F=36-L;t.push(p(b(L+P%F,0))),B=g(P/F)}t.push(p(b(B,0))),s=v(i,x,f==u),i=0,++f}}}catch(e){k=!0,_=e}finally{try{!E&&T.return&&T.return()}finally{if(k)throw _}}++i,++r}return t.join(\"\")}(e):e}))},A=function(e){return C(e,(function(e){return h.test(e)?function(e){var t=[],n=e.length,r=0,i=128,s=72,o=e.lastIndexOf(\"-\");o<0&&(o=0);for(var a=0;a<o;++a)128<=e.charCodeAt(a)&&m(\"not-basic\"),t.push(e.charCodeAt(a));for(var c=0<o?o+1:0;c<n;){for(var h=r,d=1,u=36;;u+=36){n<=c&&m(\"invalid-input\");var f=(p=e.charCodeAt(c++))-48<10?p-22:p-65<26?p-65:p-97<26?p-97:36;(36<=f||f>g((l-r)/d))&&m(\"overflow\"),r+=f*d;var p=u<=s?1:s+26<=u?26:u-s;if(f<p)break;d>g(l/(p=36-p))&&m(\"overflow\"),d*=p}var C=t.length+1;s=v(r-h,C,0==h),g(r/C)>l-i&&m(\"overflow\"),i+=g(r/C),r%=C,t.splice(r++,0,i)}return String.fromCodePoint.apply(String,t)}(e.slice(4).toLowerCase()):e}))},y={};function w(e){return(e=e.charCodeAt(0))<16?\"%0\"+e.toString(16).toUpperCase():e<128?\"%\"+e.toString(16).toUpperCase():e<2048?\"%\"+(e>>6|192).toString(16).toUpperCase()+\"%\"+(63&e|128).toString(16).toUpperCase():\"%\"+(e>>12|224).toString(16).toUpperCase()+\"%\"+(e>>6&63|128).toString(16).toUpperCase()+\"%\"+(63&e|128).toString(16).toUpperCase()}function S(e){for(var t=\"\",n=0,r=e.length;n<r;){var i,s,o=parseInt(e.substr(n+1,2),16);o<128?(t+=String.fromCharCode(o),n+=3):194<=o&&o<224?(6<=r-n?(s=parseInt(e.substr(n+4,2),16),t+=String.fromCharCode((31&o)<<6|63&s)):t+=e.substr(n,6),n+=6):224<=o?(9<=r-n?(i=parseInt(e.substr(n+4,2),16),s=parseInt(e.substr(n+7,2),16),t+=String.fromCharCode((15&o)<<12|(63&i)<<6|63&s)):t+=e.substr(n,9),n+=9):(t+=e.substr(n,3),n+=3)}return t}function x(e,t){function n(e){var n=S(e);return n.match(t.UNRESERVED)?n:e}return e.scheme&&(e.scheme=String(e.scheme).replace(t.PCT_ENCODED,n).toLowerCase().replace(t.NOT_SCHEME,\"\")),void 0!==e.userinfo&&(e.userinfo=String(e.userinfo).replace(t.PCT_ENCODED,n).replace(t.NOT_USERINFO,w).replace(t.PCT_ENCODED,i)),void 0!==e.host&&(e.host=String(e.host).replace(t.PCT_ENCODED,n).toLowerCase().replace(t.NOT_HOST,w).replace(t.PCT_ENCODED,i)),void 0!==e.path&&(e.path=String(e.path).replace(t.PCT_ENCODED,n).replace(e.scheme?t.NOT_PATH:t.NOT_PATH_NOSCHEME,w).replace(t.PCT_ENCODED,i)),void 0!==e.query&&(e.query=String(e.query).replace(t.PCT_ENCODED,n).replace(t.NOT_QUERY,w).replace(t.PCT_ENCODED,i)),void 0!==e.fragment&&(e.fragment=String(e.fragment).replace(t.PCT_ENCODED,n).replace(t.NOT_FRAGMENT,w).replace(t.PCT_ENCODED,i)),e}function E(e){return e.replace(/^0*(.*)/,\"$1\")||\"0\"}function k(e,t){return t=e.match(t.IPV4ADDRESS)||[],(t=c(t,2)[1])?t.split(\".\").map(E).join(\".\"):e}function _(e,t){var n=e.match(t.IPV6ADDRESS)||[];if(n=(i=c(n,3))[2],r=i[1]){for(var r,i=r.toLowerCase().split(\"::\").reverse(),s=(i=(r=c(i,2))[0],(r=r[1])?r.split(\":\").map(E):[]),o=i.split(\":\").map(E),a=(r=t.IPV4ADDRESS.test(o[o.length-1]))?7:8,l=o.length-a,h=Array(a),d=0;d<a;++d)h[d]=s[d]||o[l+d]||\"\";return r&&(h[a-1]=k(h[a-1],t)),r=void 0,r=(i=h.reduce((function(e,t,n){return t&&\"0\"!==t||((t=e[e.length-1])&&t.index+t.length===n?t.length++:e.push({index:n,length:1})),e}),[]).sort((function(e,t){return t.length-e.length}))[0])&&1<i.length?(t=h.slice(0,i.index),i=h.slice(i.index+i.length),t.join(\":\")+\"::\"+i.join(\":\")):h.join(\":\"),n&&(r+=\"%\"+n),r}return e}var T=/^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i,R=void 0===\"\".match(/(){0}/)[1];function B(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n={},r=!1!==t.iri?a:o;\"suffix\"===t.reference&&(e=(t.scheme?t.scheme+\":\":\"\")+\"//\"+e);var i=e.match(T);if(i){if(R?(n.scheme=i[1],n.userinfo=i[3],n.host=i[4],n.port=parseInt(i[5],10),n.path=i[6]||\"\",n.query=i[7],n.fragment=i[8],isNaN(n.port)&&(n.port=i[5])):(n.scheme=i[1]||void 0,n.userinfo=-1!==e.indexOf(\"@\")?i[3]:void 0,n.host=-1!==e.indexOf(\"//\")?i[4]:void 0,n.port=parseInt(i[5],10),n.path=i[6]||\"\",n.query=-1!==e.indexOf(\"?\")?i[7]:void 0,n.fragment=-1!==e.indexOf(\"#\")?i[8]:void 0,isNaN(n.port)&&(n.port=e.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/)?i[4]:void 0)),n.host&&(n.host=_(k(n.host,r),r)),n.reference=void 0!==n.scheme||void 0!==n.userinfo||void 0!==n.host||void 0!==n.port||n.path||void 0!==n.query?void 0===n.scheme?\"relative\":void 0===n.fragment?\"absolute\":\"uri\":\"same-document\",t.reference&&\"suffix\"!==t.reference&&t.reference!==n.reference&&(n.error=n.error||\"URI is not a \"+t.reference+\" reference.\"),i=y[(t.scheme||n.scheme||\"\").toLowerCase()],t.unicodeSupport||i&&i.unicodeSupport)x(n,r);else{if(n.host&&(t.domainHost||i&&i.domainHost))try{n.host=I(n.host.replace(r.PCT_ENCODED,S).toLowerCase())}catch(e){n.error=n.error||\"Host's domain name can not be converted to ASCII via punycode: \"+e}x(n,o)}i&&i.parse&&i.parse(n,t)}else n.error=n.error||\"URI can not be parsed.\";return n}var O=/^\\.\\.?\\//,L=/^\\/\\.(\\/|$)/,P=/^\\/\\.\\.(\\/|$)/,F=/^\\/?(?:.|\\n)*?(?=\\/|$)/;function N(e){for(var t=[];e.length;)if(e.match(O))e=e.replace(O,\"\");else if(e.match(L))e=e.replace(L,\"/\");else if(e.match(P))e=e.replace(P,\"/\"),t.pop();else if(\".\"===e||\"..\"===e)e=\"\";else{var n=e.match(F);if(!n)throw new Error(\"Unexpected dot segment condition\");e=e.slice((n=n[0]).length),t.push(n)}return t.join(\"\")}function M(e){var t,n,r,i=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},s=i.iri?a:o,c=[],l=y[(i.scheme||e.scheme||\"\").toLowerCase()];if(l&&l.serialize&&l.serialize(e,i),e.host&&!s.IPV6ADDRESS.test(e.host)&&(i.domainHost||l&&l.domainHost))try{e.host=i.iri?A(e.host):I(e.host.replace(s.PCT_ENCODED,S).toLowerCase())}catch(s){e.error=e.error||\"Host's domain name can not be converted to \"+(i.iri?\"Unicode\":\"ASCII\")+\" via punycode: \"+s}return x(e,s),\"suffix\"!==i.reference&&e.scheme&&(c.push(e.scheme),c.push(\":\")),void 0!==(t=!1!==(n=i).iri?a:o,n=[],void 0!==(r=e).userinfo&&(n.push(r.userinfo),n.push(\"@\")),void 0!==r.host&&n.push(_(k(String(r.host),t),t).replace(t.IPV6ADDRESS,(function(e,t,n){return\"[\"+t+(n?\"%25\"+n:\"\")+\"]\"}))),\"number\"!=typeof r.port&&\"string\"!=typeof r.port||(n.push(\":\"),n.push(String(r.port))),r=n.length?n.join(\"\"):void 0)&&(\"suffix\"!==i.reference&&c.push(\"//\"),c.push(r),e.path&&\"/\"!==e.path.charAt(0)&&c.push(\"/\")),void 0!==e.path&&(n=e.path,i.absolutePath||l&&l.absolutePath||(n=N(n)),void 0===r&&(n=n.replace(/^\\/\\//,\"/%2F\")),c.push(n)),void 0!==e.query&&(c.push(\"?\"),c.push(e.query)),void 0!==e.fragment&&(c.push(\"#\"),c.push(e.fragment)),c.join(\"\")}function D(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},r={};return arguments[3]||(e=B(M(e,n),n),t=B(M(t,n),n)),!(n=n||{}).tolerant&&t.scheme?(r.scheme=t.scheme,r.userinfo=t.userinfo,r.host=t.host,r.port=t.port,r.path=N(t.path||\"\"),r.query=t.query):(void 0!==t.userinfo||void 0!==t.host||void 0!==t.port?(r.userinfo=t.userinfo,r.host=t.host,r.port=t.port,r.path=N(t.path||\"\"),r.query=t.query):(t.path?(\"/\"===t.path.charAt(0)?r.path=N(t.path):(r.path=void 0===e.userinfo&&void 0===e.host&&void 0===e.port||e.path?e.path?e.path.slice(0,e.path.lastIndexOf(\"/\")+1)+t.path:t.path:\"/\"+t.path,r.path=N(r.path)),r.query=t.query):(r.path=e.path,r.query=void 0!==t.query?t.query:e.query),r.userinfo=e.userinfo,r.host=e.host,r.port=e.port),r.scheme=e.scheme),r.fragment=t.fragment,r}function $(e,t){return e&&e.toString().replace((t&&t.iri?a:o).PCT_ENCODED,S)}var W={scheme:\"http\",domainHost:!0,parse:function(e,t){return e.host||(e.error=e.error||\"HTTP URIs must have a host.\"),e},serialize:function(e,t){var n=\"https\"===String(e.scheme).toLowerCase();return e.port!==(n?443:80)&&\"\"!==e.port||(e.port=void 0),e.path||(e.path=\"/\"),e}},H={scheme:\"https\",domainHost:W.domainHost,parse:W.parse,serialize:W.serialize};function G(e){return\"boolean\"==typeof e.secure?e.secure:\"wss\"===String(e.scheme).toLowerCase()}var V={scheme:\"ws\",domainHost:!0,parse:function(e,t){return e.secure=G(e),e.resourceName=(e.path||\"/\")+(e.query?\"?\"+e.query:\"\"),e.path=void 0,e.query=void 0,e},serialize:function(e,t){var n,r;return e.port!==(G(e)?443:80)&&\"\"!==e.port||(e.port=void 0),\"boolean\"==typeof e.secure&&(e.scheme=e.secure?\"wss\":\"ws\",e.secure=void 0),e.resourceName&&(n=e.resourceName.split(\"?\"),n=(r=c(n,2))[0],r=r[1],e.path=n&&\"/\"!==n?n:void 0,e.query=r,e.resourceName=void 0),e.fragment=void 0,e}},j={scheme:\"wss\",domainHost:V.domainHost,parse:V.parse,serialize:V.serialize},Z={},z=\"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\",K=(n(n(\"%[EFef]\"+(ee=\"[0-9A-Fa-f]\")+\"%\"+ee+ee+\"%\"+ee+ee)+\"|\"+n(\"%[89A-Fa-f]\"+ee+\"%\"+ee+ee)+\"|\"+n(\"%\"+ee+ee)),t(\"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\",'[\\\\\"\\\\\\\\]')),X=new RegExp(z,\"g\"),U=new RegExp(\"(?:(?:%[EFef][0-9A-Fa-f]%[0-9A-Fa-f][0-9A-Fa-f]%[0-9A-Fa-f][0-9A-Fa-f])|(?:%[89A-Fa-f][0-9A-Fa-f]%[0-9A-Fa-f][0-9A-Fa-f])|(?:%[0-9A-Fa-f][0-9A-Fa-f]))\",\"g\"),Y=new RegExp(t(\"[^]\",\"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\",\"[\\\\.]\",'[\\\\\"]',K),\"g\"),J=new RegExp(t(\"[^]\",z,\"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\"),\"g\"),Q=J;function q(e){var t=S(e);return t.match(X)?t:e}var ee={scheme:\"mailto\",parse:function(e,t){var n=e,r=n.to=n.path?n.path.split(\",\"):[];if(n.path=void 0,n.query){for(var i=!1,s={},o=n.query.split(\"&\"),a=0,c=o.length;a<c;++a){var l=o[a].split(\"=\");switch(l[0]){case\"to\":for(var h=l[1].split(\",\"),d=0,u=h.length;d<u;++d)r.push(h[d]);break;case\"subject\":n.subject=$(l[1],t);break;case\"body\":n.body=$(l[1],t);break;default:i=!0,s[$(l[0],t)]=$(l[1],t)}}i&&(n.headers=s)}n.query=void 0;for(var f=0,g=r.length;f<g;++f){var p=r[f].split(\"@\");if(p[0]=$(p[0]),t.unicodeSupport)p[1]=$(p[1],t).toLowerCase();else try{p[1]=I($(p[1],t).toLowerCase())}catch(e){n.error=n.error||\"Email address's domain name can not be converted to ASCII via punycode: \"+e}r[f]=p.join(\"@\")}return n},serialize:function(e,t){var n,r=e,s=null!=(n=e.to)?n instanceof Array?n:\"number\"!=typeof n.length||n.split||n.setInterval||n.call?[n]:Array.prototype.slice.call(n):[];if(s){for(var o=0,a=s.length;o<a;++o){var c=String(s[o]),l=c.lastIndexOf(\"@\"),h=c.slice(0,l).replace(U,q).replace(U,i).replace(Y,w),d=c.slice(l+1);try{d=t.iri?A(d):I($(d,t).toLowerCase())}catch(e){r.error=r.error||\"Email address's domain name can not be converted to \"+(t.iri?\"Unicode\":\"ASCII\")+\" via punycode: \"+e}s[o]=h+\"@\"+d}r.path=s.join(\",\")}var u=e.headers=e.headers||{};e.subject&&(u.subject=e.subject),e.body&&(u.body=e.body);var f,g=[];for(f in u)u[f]!==Z[f]&&g.push(f.replace(U,q).replace(U,i).replace(J,w)+\"=\"+u[f].replace(U,q).replace(U,i).replace(Q,w));return g.length&&(r.query=g.join(\"&\")),r}},te=/^([^\\:]+)\\:(.*)/,ne=(K={scheme:\"urn\",parse:function(e,t){var n,r=e.path&&e.path.match(te),i=e;return r?(n=t.scheme||i.scheme||\"urn\",e=r[1].toLowerCase(),r=r[2],n=y[n=n+\":\"+(t.nid||e)],i.nid=e,i.nss=r,i.path=void 0,n&&(i=n.parse(i,t))):i.error=i.error||\"URN can not be parsed.\",i},serialize:function(e,t){var n,r=e.nid;return(n=y[n=(n=t.scheme||e.scheme||\"urn\")+\":\"+(t.nid||r)])&&(e=n.serialize(e,t)),(n=e).path=(r||t.nid)+\":\"+(e=e.nss),n}},/^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/);z={scheme:\"urn:uuid\",parse:function(e,t){return e.uuid=e.nss,e.nss=void 0,t.tolerant||e.uuid&&e.uuid.match(ne)||(e.error=e.error||\"UUID is not valid.\"),e},serialize:function(e,t){var n=e;return n.nss=(e.uuid||\"\").toLowerCase(),n}},y[W.scheme]=W,y[H.scheme]=H,y[V.scheme]=V,y[j.scheme]=j,y[ee.scheme]=ee,y[K.scheme]=K,y[z.scheme]=z,e.SCHEMES=y,e.pctEncChar=w,e.pctDecChars=S,e.parse=B,e.removeDotSegments=N,e.serialize=M,e.resolveComponents=D,e.resolve=function(e,t,n){return M(D(B(e,n=function(e,t){var n={scheme:\"null\"};if(t)for(var r in t)n[r]=t[r];return n}(0,n)),B(t,n),n,!0),n)},e.normalize=function(e,t){return\"string\"==typeof e?e=M(B(e,t),t):\"object\"===r(e)&&(e=B(M(e,t),t)),e},e.equal=function(e,t,n){return\"string\"==typeof e?e=M(B(e,n),n):\"object\"===r(e)&&(e=M(e,n)),\"string\"==typeof t?t=M(B(t,n),n):\"object\"===r(t)&&(t=M(t,n)),e===t},e.escapeComponent=function(e,t){return e&&e.toString().replace((t&&t.iri?a:o).ESCAPE,w)},e.unescapeComponent=$,Object.defineProperty(e,\"__esModule\",{value:!0})}(t)},4049:function(e){e.exports=function(){\"use strict\";var e=function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")},t=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),n=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,s=void 0;try{for(var o,a=e[Symbol.iterator]();!(r=(o=a.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,s=e}finally{try{!r&&a.return&&a.return()}finally{if(i)throw s}}return n}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")};String.prototype.startsWith=String.prototype.startsWith||function(e){return 0===this.indexOf(e)},String.prototype.padStart=String.prototype.padStart||function(e,t){for(var n=this;n.length<e;)n=t+n;return n};var r={cb:\"0f8ff\",tqw:\"aebd7\",q:\"-ffff\",qmrn:\"7fffd4\",zr:\"0ffff\",bg:\"5f5dc\",bsq:\"e4c4\",bck:\"---\",nch:\"ebcd\",b:\"--ff\",bvt:\"8a2be2\",brwn:\"a52a2a\",brw:\"deb887\",ctb:\"5f9ea0\",hrt:\"7fff-\",chcT:\"d2691e\",cr:\"7f50\",rnw:\"6495ed\",crns:\"8dc\",crms:\"dc143c\",cn:\"-ffff\",Db:\"--8b\",Dcn:\"-8b8b\",Dgnr:\"b8860b\",Dgr:\"a9a9a9\",Dgrn:\"-64-\",Dkhk:\"bdb76b\",Dmgn:\"8b-8b\",Dvgr:\"556b2f\",Drng:\"8c-\",Drch:\"9932cc\",Dr:\"8b--\",Dsmn:\"e9967a\",Dsgr:\"8fbc8f\",DsTb:\"483d8b\",DsTg:\"2f4f4f\",Dtrq:\"-ced1\",Dvt:\"94-d3\",ppnk:\"1493\",pskb:\"-bfff\",mgr:\"696969\",grb:\"1e90ff\",rbrc:\"b22222\",rwht:\"af0\",stg:\"228b22\",chs:\"-ff\",gnsb:\"dcdcdc\",st:\"8f8ff\",g:\"d7-\",gnr:\"daa520\",gr:\"808080\",grn:\"-8-0\",grnw:\"adff2f\",hnw:\"0fff0\",htpn:\"69b4\",nnr:\"cd5c5c\",ng:\"4b-82\",vr:\"0\",khk:\"0e68c\",vnr:\"e6e6fa\",nrb:\"0f5\",wngr:\"7cfc-\",mnch:\"acd\",Lb:\"add8e6\",Lcr:\"08080\",Lcn:\"e0ffff\",Lgnr:\"afad2\",Lgr:\"d3d3d3\",Lgrn:\"90ee90\",Lpnk:\"b6c1\",Lsmn:\"a07a\",Lsgr:\"20b2aa\",Lskb:\"87cefa\",LsTg:\"778899\",Lstb:\"b0c4de\",Lw:\"e0\",m:\"-ff-\",mgrn:\"32cd32\",nn:\"af0e6\",mgnt:\"-ff\",mrn:\"8--0\",mqm:\"66cdaa\",mmb:\"--cd\",mmrc:\"ba55d3\",mmpr:\"9370db\",msg:\"3cb371\",mmsT:\"7b68ee\",\"\":\"-fa9a\",mtr:\"48d1cc\",mmvt:\"c71585\",mnLb:\"191970\",ntc:\"5fffa\",mstr:\"e4e1\",mccs:\"e4b5\",vjw:\"dead\",nv:\"--80\",c:\"df5e6\",v:\"808-0\",vrb:\"6b8e23\",rng:\"a5-\",rngr:\"45-\",rch:\"da70d6\",pgnr:\"eee8aa\",pgrn:\"98fb98\",ptrq:\"afeeee\",pvtr:\"db7093\",ppwh:\"efd5\",pchp:\"dab9\",pr:\"cd853f\",pnk:\"c0cb\",pm:\"dda0dd\",pwrb:\"b0e0e6\",prp:\"8-080\",cc:\"663399\",r:\"--\",sbr:\"bc8f8f\",rb:\"4169e1\",sbrw:\"8b4513\",smn:\"a8072\",nbr:\"4a460\",sgrn:\"2e8b57\",ssh:\"5ee\",snn:\"a0522d\",svr:\"c0c0c0\",skb:\"87ceeb\",sTb:\"6a5acd\",sTgr:\"708090\",snw:\"afa\",n:\"-ff7f\",stb:\"4682b4\",tn:\"d2b48c\",t:\"-8080\",thst:\"d8bfd8\",tmT:\"6347\",trqs:\"40e0d0\",vt:\"ee82ee\",whT:\"5deb3\",wht:\"\",hts:\"5f5f5\",w:\"-\",wgrn:\"9acd32\"};function i(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return(t>0?e.toFixed(t).replace(/0+$/,\"\").replace(/\\.$/,\"\"):e.toString())||\"0\"}var s=function(){function s(t,r,i,o){e(this,s);var a=this;if(void 0===t);else if(Array.isArray(t))this.rgba=t;else if(void 0===i){var c=t&&\"\"+t;c&&function(e){if(e.startsWith(\"hsl\")){var t=e.match(/([\\-\\d\\.e]+)/g).map(Number),r=n(t,4),i=r[0],o=r[1],c=r[2],l=r[3];void 0===l&&(l=1),a.hsla=[i/=360,o/=100,c/=100,l]}else if(e.startsWith(\"rgb\")){var h=e.match(/([\\-\\d\\.e]+)/g).map(Number),d=n(h,4),u=d[3];void 0===u&&(u=1),a.rgba=[d[0],d[1],d[2],u]}else a.rgba=e.startsWith(\"#\")?s.hexToRgb(e):s.nameToRgb(e)||s.hexToRgb(e)}(c.toLowerCase())}else this.rgba=[t,r,i,void 0===o?1:o]}return t(s,[{key:\"printRGB\",value:function(e){var t=(e?this.rgba:this.rgba.slice(0,3)).map((function(e,t){return i(e,3===t?3:0)}));return e?\"rgba(\"+t+\")\":\"rgb(\"+t+\")\"}},{key:\"printHSL\",value:function(e){var t=[360,100,100,1],n=[\"\",\"%\",\"%\",\"\"],r=(e?this.hsla:this.hsla.slice(0,3)).map((function(e,r){return i(e*t[r],3===r?3:1)+n[r]}));return e?\"hsla(\"+r+\")\":\"hsl(\"+r+\")\"}},{key:\"printHex\",value:function(e){var t=this.hex;return e?t:t.substring(0,7)}},{key:\"rgba\",get:function(){if(this._rgba)return this._rgba;if(!this._hsla)throw new Error(\"No color is set\");return this._rgba=s.hslToRgb(this._hsla)},set:function(e){3===e.length&&(e[3]=1),this._rgba=e,this._hsla=null}},{key:\"rgbString\",get:function(){return this.printRGB()}},{key:\"rgbaString\",get:function(){return this.printRGB(!0)}},{key:\"hsla\",get:function(){if(this._hsla)return this._hsla;if(!this._rgba)throw new Error(\"No color is set\");return this._hsla=s.rgbToHsl(this._rgba)},set:function(e){3===e.length&&(e[3]=1),this._hsla=e,this._rgba=null}},{key:\"hslString\",get:function(){return this.printHSL()}},{key:\"hslaString\",get:function(){return this.printHSL(!0)}},{key:\"hex\",get:function(){return\"#\"+this.rgba.map((function(e,t){return t<3?e.toString(16):Math.round(255*e).toString(16)})).map((function(e){return e.padStart(2,\"0\")})).join(\"\")},set:function(e){this.rgba=s.hexToRgb(e)}}],[{key:\"hexToRgb\",value:function(e){var t=(e.startsWith(\"#\")?e.slice(1):e).replace(/^(\\w{3})$/,\"$1F\").replace(/^(\\w)(\\w)(\\w)(\\w)$/,\"$1$1$2$2$3$3$4$4\").replace(/^(\\w{6})$/,\"$1FF\");if(!t.match(/^([0-9a-fA-F]{8})$/))throw new Error(\"Unknown hex color; \"+e);var n=t.match(/^(\\w\\w)(\\w\\w)(\\w\\w)(\\w\\w)$/).slice(1).map((function(e){return parseInt(e,16)}));return n[3]=n[3]/255,n}},{key:\"nameToRgb\",value:function(e){var t=e.toLowerCase().replace(\"at\",\"T\").replace(/[aeiouyldf]/g,\"\").replace(\"ght\",\"L\").replace(\"rk\",\"D\").slice(-5,4),n=r[t];return void 0===n?n:s.hexToRgb(n.replace(/\\-/g,\"00\").padStart(6,\"f\"))}},{key:\"rgbToHsl\",value:function(e){var t=n(e,4),r=t[0],i=t[1],s=t[2],o=t[3];r/=255,i/=255,s/=255;var a=Math.max(r,i,s),c=Math.min(r,i,s),l=void 0,h=void 0,d=(a+c)/2;if(a===c)l=h=0;else{var u=a-c;switch(h=d>.5?u/(2-a-c):u/(a+c),a){case r:l=(i-s)/u+(i<s?6:0);break;case i:l=(s-r)/u+2;break;case s:l=(r-i)/u+4}l/=6}return[l,h,d,o]}},{key:\"hslToRgb\",value:function(e){var t=n(e,4),r=t[0],i=t[1],s=t[2],o=t[3],a=void 0,c=void 0,l=void 0;if(0===i)a=c=l=s;else{var h=function(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e},d=s<.5?s*(1+i):s+i-s*i,u=2*s-d;a=h(u,d,r+1/3),c=h(u,d,r),l=h(u,d,r-1/3)}var f=[255*a,255*c,255*l].map(Math.round);return f[3]=o,f}}]),s}(),o=function(){function n(){e(this,n),this._events=[]}return t(n,[{key:\"add\",value:function(e,t,n){e.addEventListener(t,n,!1),this._events.push({target:e,type:t,handler:n})}},{key:\"remove\",value:function(e,t,r){this._events=this._events.filter((function(i){var s=!0;return e&&e!==i.target&&(s=!1),t&&t!==i.type&&(s=!1),r&&r!==i.handler&&(s=!1),s&&n._doRemove(i.target,i.type,i.handler),!s}))}},{key:\"destroy\",value:function(){this._events.forEach((function(e){return n._doRemove(e.target,e.type,e.handler)})),this._events=[]}}],[{key:\"_doRemove\",value:function(e,t,n){e.removeEventListener(t,n,!1)}}]),n}();function a(e,t,n){var r=!1;function i(e,t,n){return Math.max(t,Math.min(e,n))}function s(e,s,o){if(o&&(r=!0),r){e.preventDefault();var a=t.getBoundingClientRect(),c=a.width,l=a.height,h=s.clientY,d=i(s.clientX-a.left,0,c),u=i(h-a.top,0,l);n(d/c,u/l)}}function o(e,t){1===(void 0===e.buttons?e.which:e.buttons)?s(e,e,t):r=!1}function a(e,t){1===e.touches.length?s(e,e.touches[0],t):r=!1}e.add(t,\"mousedown\",(function(e){o(e,!0)})),e.add(t,\"touchstart\",(function(e){a(e,!0)})),e.add(window,\"mousemove\",o),e.add(t,\"touchmove\",a),e.add(window,\"mouseup\",(function(e){r=!1})),e.add(t,\"touchend\",(function(e){r=!1})),e.add(t,\"touchcancel\",(function(e){r=!1}))}var c=\"mousedown\",l=\"focusin\";function h(e,t){return(t||document).querySelector(e)}function d(e){e.preventDefault(),e.stopPropagation()}function u(e,t,n,r,i){e.add(t,\"keydown\",(function(e){n.indexOf(e.key)>=0&&(i&&d(e),r(e))}))}var f=document.createElement(\"style\");return f.textContent=\".picker_wrapper.no_alpha .picker_alpha{display:none}.picker_wrapper.no_editor .picker_editor{position:absolute;z-index:-1;opacity:0}.picker_wrapper.no_cancel .picker_cancel{display:none}.layout_default.picker_wrapper{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap;-webkit-box-pack:justify;justify-content:space-between;-webkit-box-align:stretch;align-items:stretch;font-size:10px;width:25em;padding:.5em}.layout_default.picker_wrapper input,.layout_default.picker_wrapper button{font-size:1rem}.layout_default.picker_wrapper>*{margin:.5em}.layout_default.picker_wrapper::before{content:'';display:block;width:100%;height:0;-webkit-box-ordinal-group:2;order:1}.layout_default .picker_slider,.layout_default .picker_selector{padding:1em}.layout_default .picker_hue{width:100%}.layout_default .picker_sl{-webkit-box-flex:1;flex:1 1 auto}.layout_default .picker_sl::before{content:'';display:block;padding-bottom:100%}.layout_default .picker_editor{-webkit-box-ordinal-group:2;order:1;width:6.5rem}.layout_default .picker_editor input{width:100%;height:100%}.layout_default .picker_sample{-webkit-box-ordinal-group:2;order:1;-webkit-box-flex:1;flex:1 1 auto}.layout_default .picker_done,.layout_default .picker_cancel{-webkit-box-ordinal-group:2;order:1}.picker_wrapper{box-sizing:border-box;background:#f2f2f2;box-shadow:0 0 0 1px silver;cursor:default;font-family:sans-serif;color:#444;pointer-events:auto}.picker_wrapper:focus{outline:none}.picker_wrapper button,.picker_wrapper input{box-sizing:border-box;border:none;box-shadow:0 0 0 1px silver;outline:none}.picker_wrapper button:focus,.picker_wrapper button:active,.picker_wrapper input:focus,.picker_wrapper input:active{box-shadow:0 0 2px 1px dodgerblue}.picker_wrapper button{padding:.4em .6em;cursor:pointer;background-color:whitesmoke;background-image:-webkit-gradient(linear, left bottom, left top, from(gainsboro), to(transparent));background-image:linear-gradient(0deg, gainsboro, transparent)}.picker_wrapper button:active{background-image:-webkit-gradient(linear, left bottom, left top, from(transparent), to(gainsboro));background-image:linear-gradient(0deg, transparent, gainsboro)}.picker_wrapper button:hover{background-color:white}.picker_selector{position:absolute;z-index:1;display:block;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);border:2px solid white;border-radius:100%;box-shadow:0 0 3px 1px #67b9ff;background:currentColor;cursor:pointer}.picker_slider .picker_selector{border-radius:2px}.picker_hue{position:relative;background-image:-webkit-gradient(linear, left top, right top, from(red), color-stop(yellow), color-stop(lime), color-stop(cyan), color-stop(blue), color-stop(magenta), to(red));background-image:linear-gradient(90deg, red, yellow, lime, cyan, blue, magenta, red);box-shadow:0 0 0 1px silver}.picker_sl{position:relative;box-shadow:0 0 0 1px silver;background-image:-webkit-gradient(linear, left top, left bottom, from(white), color-stop(50%, rgba(255,255,255,0))),-webkit-gradient(linear, left bottom, left top, from(black), color-stop(50%, rgba(0,0,0,0))),-webkit-gradient(linear, left top, right top, from(gray), to(rgba(128,128,128,0)));background-image:linear-gradient(180deg, white, rgba(255,255,255,0) 50%),linear-gradient(0deg, black, rgba(0,0,0,0) 50%),linear-gradient(90deg, gray, rgba(128,128,128,0))}.picker_alpha,.picker_sample{position:relative;background:url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='2' height='2'%3E%3Cpath d='M1,0H0V1H2V2H1' fill='lightgrey'/%3E%3C/svg%3E\\\") left top/contain white;box-shadow:0 0 0 1px silver}.picker_alpha .picker_selector,.picker_sample .picker_selector{background:none}.picker_editor input{font-family:monospace;padding:.2em .4em}.picker_sample::before{content:'';position:absolute;display:block;width:100%;height:100%;background:currentColor}.picker_arrow{position:absolute;z-index:-1}.picker_wrapper.popup{position:absolute;z-index:2;margin:1.5em}.picker_wrapper.popup,.picker_wrapper.popup .picker_arrow::before,.picker_wrapper.popup .picker_arrow::after{background:#f2f2f2;box-shadow:0 0 10px 1px rgba(0,0,0,0.4)}.picker_wrapper.popup .picker_arrow{width:3em;height:3em;margin:0}.picker_wrapper.popup .picker_arrow::before,.picker_wrapper.popup .picker_arrow::after{content:\\\"\\\";display:block;position:absolute;top:0;left:0;z-index:-99}.picker_wrapper.popup .picker_arrow::before{width:100%;height:100%;-webkit-transform:skew(45deg);transform:skew(45deg);-webkit-transform-origin:0 100%;transform-origin:0 100%}.picker_wrapper.popup .picker_arrow::after{width:150%;height:150%;box-shadow:none}.popup.popup_top{bottom:100%;left:0}.popup.popup_top .picker_arrow{bottom:0;left:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.popup.popup_bottom{top:100%;left:0}.popup.popup_bottom .picker_arrow{top:0;left:0;-webkit-transform:rotate(90deg) scale(1, -1);transform:rotate(90deg) scale(1, -1)}.popup.popup_left{top:0;right:100%}.popup.popup_left .picker_arrow{top:0;right:0;-webkit-transform:scale(-1, 1);transform:scale(-1, 1)}.popup.popup_right{top:0;left:100%}.popup.popup_right .picker_arrow{top:0;left:0}\",document.documentElement.firstElementChild.appendChild(f),function(){function n(t){e(this,n),this.settings={popup:\"right\",layout:\"default\",alpha:!0,editor:!0,editorFormat:\"hex\",cancelButton:!1,defaultColor:\"#0cf\"},this._events=new o,this.onChange=null,this.onDone=null,this.onOpen=null,this.onClose=null,this.setOptions(t)}return t(n,[{key:\"setOptions\",value:function(e){var t,n,r,i=this;e&&(t=this.settings,e instanceof HTMLElement?t.parent=e:(t.parent&&e.parent&&t.parent!==e.parent&&(this._events.remove(t.parent),this._popupInited=!1),function(e,t,n){for(var r in e)t[r]=e[r]}(e,t),e.onChange&&(this.onChange=e.onChange),e.onDone&&(this.onDone=e.onDone),e.onOpen&&(this.onOpen=e.onOpen),e.onClose&&(this.onClose=e.onClose),(r=e.color||e.colour)&&this._setColor(r)),(n=t.parent)&&t.popup&&!this._popupInited?(this._events.add(n,\"click\",r=function(e){return i.openHandler(e)}),u(this._events,n,[\" \",\"Spacebar\",\"Enter\"],r),this._popupInited=!0):e.parent&&!t.popup&&this.show())}},{key:\"openHandler\",value:function(e){var t;this.show()&&(e&&e.preventDefault(),this.settings.parent.style.pointerEvents=\"none\",t=e&&\"keydown\"===e.type?this._domEdit:this.domElement,setTimeout((function(){return t.focus()}),100),this.onOpen&&this.onOpen(this.colour))}},{key:\"closeHandler\",value:function(e){var t=e&&e.type,n=!1;e?t===c||t===l?e.timeStamp>(this.__containedEvent||0)+100&&(n=!0):(d(e),n=!0):n=!0,n&&this.hide()&&(this.settings.parent.style.pointerEvents=\"\",t!==c&&this.settings.parent.focus(),this.onClose&&this.onClose(this.colour))}},{key:\"movePopup\",value:function(e,t){this.closeHandler(),this.setOptions(e),t&&this.openHandler()}},{key:\"setColor\",value:function(e,t){this._setColor(e,{silent:t})}},{key:\"_setColor\",value:function(e,t){if(\"string\"==typeof e&&(e=e.trim()),e){t=t||{};var n,r=void 0;try{r=new s(e)}catch(e){if(t.failSilently)return;throw e}this.settings.alpha||((n=r.hsla)[3]=1,r.hsla=n),this.colour=this.color=r,this._setHSLA(null,null,null,null,t)}}},{key:\"setColour\",value:function(e,t){this.setColor(e,t)}},{key:\"show\",value:function(){if(!this.settings.parent)return!1;if(this.domElement){var e=this._toggleDOM(!0);return this._setPosition(),e}var t=this.settings.template||'<div class=\"picker_wrapper\" tabindex=\"-1\"><div class=\"picker_arrow\"></div><div class=\"picker_hue picker_slider\"><div class=\"picker_selector\"></div></div><div class=\"picker_sl\"><div class=\"picker_selector\"></div></div><div class=\"picker_alpha picker_slider\"><div class=\"picker_selector\"></div></div><div class=\"picker_editor\"><input aria-label=\"Type a color name or hex value\"/></div><div class=\"picker_sample\"></div><div class=\"picker_done\"><button>Ok</button></div><div class=\"picker_cancel\"><button>Cancel</button></div></div>',n=(e=t,(t=document.createElement(\"div\")).innerHTML=e,t.firstElementChild);return this.domElement=n,this._domH=h(\".picker_hue\",n),this._domSL=h(\".picker_sl\",n),this._domA=h(\".picker_alpha\",n),this._domEdit=h(\".picker_editor input\",n),this._domSample=h(\".picker_sample\",n),this._domOkay=h(\".picker_done button\",n),this._domCancel=h(\".picker_cancel button\",n),n.classList.add(\"layout_\"+this.settings.layout),this.settings.alpha||n.classList.add(\"no_alpha\"),this.settings.editor||n.classList.add(\"no_editor\"),this.settings.cancelButton||n.classList.add(\"no_cancel\"),this._ifPopup((function(){return n.classList.add(\"popup\")})),this._setPosition(),this.colour?this._updateUI():this._setColor(this.settings.defaultColor),this._bindEvents(),!0}},{key:\"hide\",value:function(){return this._toggleDOM(!1)}},{key:\"destroy\",value:function(){this._events.destroy(),this.domElement&&this.settings.parent.removeChild(this.domElement)}},{key:\"_bindEvents\",value:function(){var e=this,t=this,n=this.domElement,r=this._events;function i(e,t,n){r.add(e,t,n)}i(n,\"click\",(function(e){return e.preventDefault()})),a(r,this._domH,(function(e,n){return t._setHSLA(e)})),a(r,this._domSL,(function(e,n){return t._setHSLA(null,e,1-n)})),this.settings.alpha&&a(r,this._domA,(function(e,n){return t._setHSLA(null,null,null,1-n)}));var s=this._domEdit;i(s,\"input\",(function(e){t._setColor(this.value,{fromEditor:!0,failSilently:!0})})),i(s,\"focus\",(function(e){this.selectionStart===this.selectionEnd&&this.select()})),this._ifPopup((function(){function t(t){return e.closeHandler(t)}function s(t){e.__containedEvent=t.timeStamp}i(window,c,t),i(window,l,t),u(r,n,[\"Esc\",\"Escape\"],t),i(n,c,s),i(n,l,s),i(e._domCancel,\"click\",t)})),i(this._domOkay,\"click\",s=function(t){e._ifPopup((function(){return e.closeHandler(t)})),e.onDone&&e.onDone(e.colour)}),u(r,n,[\"Enter\"],s)}},{key:\"_setPosition\",value:function(){var e=this.settings.parent,t=this.domElement;e!==t.parentNode&&e.appendChild(t),this._ifPopup((function(n){\"static\"===getComputedStyle(e).position&&(e.style.position=\"relative\");var r=!0===n?\"popup_right\":\"popup_\"+n;[\"popup_top\",\"popup_bottom\",\"popup_left\",\"popup_right\"].forEach((function(e){e===r?t.classList.add(e):t.classList.remove(e)})),t.classList.add(r)}))}},{key:\"_setHSLA\",value:function(e,t,n,r,i){i=i||{};var s=this.colour,o=s.hsla;[e,t,n,r].forEach((function(e,t){!e&&0!==e||(o[t]=e)})),s.hsla=o,this._updateUI(i),this.onChange&&!i.silent&&this.onChange(s)}},{key:\"_updateUI\",value:function(e){if(this.domElement){e=e||{};var t=this.colour,n=t.hsla,r=\"hsl(\"+360*n[0]+\", 100%, 50%)\",i=t.hslString,s=t.hslaString,o=this._domSL,a=this._domA,c=h(\".picker_selector\",this._domH),l=h(\".picker_selector\",o);if(a=h(\".picker_selector\",a),f(0,c,n[0]),this._domSL.style.backgroundColor=this._domH.style.color=r,f(0,l,n[1]),g(0,l,1-n[2]),o.style.color=i,g(0,a,1-n[3]),i=(n=i).replace(\"hsl\",\"hsla\").replace(\")\",\", 0)\"),this._domA.style.backgroundImage=(i=\"linear-gradient(\"+[n,i]+\")\")+\", url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='2' height='2'%3E%3Cpath d='M1,0H0V1H2V2H1' fill='lightgrey'/%3E%3C/svg%3E\\\")\",!e.fromEditor){var d=this.settings.alpha,u=void 0;switch(e=this.settings.editorFormat){case\"rgb\":u=t.printRGB(d);break;case\"hsl\":u=t.printHSL(d);break;default:u=t.printHex(d)}this._domEdit.value=u}this._domSample.style.color=s}function f(e,t,n){t.style.left=100*n+\"%\"}function g(e,t,n){t.style.top=100*n+\"%\"}}},{key:\"_ifPopup\",value:function(e,t){this.settings.parent&&this.settings.popup?e&&e(this.settings.popup):t&&t()}},{key:\"_toggleDOM\",value:function(e){var t=this.domElement;if(!t)return!1;var n=e?\"\":\"none\";return(e=t.style.display!==n)&&(t.style.display=n),e}}],[{key:\"StyleElement\",get:function(){return f}}]),n}()}()}},n={},e.amdD=function(){throw new Error(\"define cannot be used indirect\")},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,{a:n}),n},e.d=function(t,n){for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},e.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},e.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},e.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},e(3161);function e(r){if(n[r])return n[r].exports;var i=n[r]={id:r,loaded:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var t,n}()}}]);"
  },
  {
    "path": "src/aup/dashboard/frontend/febuild/auptimizer-dashboard/5.0e291298e9c49cb93c71.js",
    "content": "(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{XpXM:function(n,t,e){\"use strict\";e.r(t),e.d(t,\"MainModule\",(function(){return u}));var r=e(\"ofXK\"),o=e(\"tyNb\"),c=e(\"fXoL\");const i=[{path:\"\",component:(()=>{class n{}return n.\\u0275fac=function(t){return new(t||n)},n.\\u0275cmp=c.Rb({type:n,selectors:[[\"app-main\"]],decls:2,vars:0,template:function(n,t){1&n&&(c.dc(0,\"main\"),c.Yb(1,\"router-outlet\"),c.cc())},directives:[o.k],styles:[\"\"]}),n})(),children:[{path:\"\",loadChildren:()=>e.e(4).then(e.bind(null,\"+c+f\")).then(n=>n.ExperimentModule)}]}];let s=(()=>{class n{}return n.\\u0275mod=c.Vb({type:n}),n.\\u0275inj=c.Ub({factory:function(t){return new(t||n)},imports:[[o.j.forChild(i)],o.j]}),n})();var a=e(\"PCNd\");let u=(()=>{class n{}return n.\\u0275mod=c.Vb({type:n}),n.\\u0275inj=c.Ub({factory:function(t){return new(t||n)},imports:[[r.c,s,a.a]]}),n})()}}]);"
  },
  {
    "path": "src/aup/dashboard/frontend/febuild/auptimizer-dashboard/_redirects",
    "content": "/*    /index.html    200\n"
  },
  {
    "path": "src/aup/dashboard/frontend/febuild/auptimizer-dashboard/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\">\n  <title>AuptimizerDashboard</title>\n  <base href=\"/\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n  <link rel=\"icon\" type=\"image/x-icon\" href=\"favicon.ico\">\n  <link href=\"https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap\" rel=\"stylesheet\">\n  <link href=\"https://fonts.googleapis.com/icon?family=Material+Icons\" rel=\"stylesheet\">\n<link rel=\"stylesheet\" href=\"styles.5a1d2b21684fc92c4f99.css\"></head>\n<body class=\"mat-typography\">\n  <app-root></app-root>\n<script src=\"runtime.29a333e72cc7398676d0.js\" defer></script><script src=\"polyfills.9cfb3f513e777138fb2c.js\" defer></script><script src=\"main.09d22743789a55973001.js\" defer></script></body>\n</html>\n"
  },
  {
    "path": "src/aup/dashboard/frontend/febuild/auptimizer-dashboard/main.09d22743789a55973001.js",
    "content": "(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{\"+0xr\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return S})),n.d(e,\"b\",(function(){return v})),n.d(e,\"c\",(function(){return w})),n.d(e,\"d\",(function(){return M})),n.d(e,\"e\",(function(){return b})),n.d(e,\"f\",(function(){return D})),n.d(e,\"g\",(function(){return L})),n.d(e,\"h\",(function(){return P})),n.d(e,\"i\",(function(){return E})),n.d(e,\"j\",(function(){return g})),n.d(e,\"k\",(function(){return F})),n.d(e,\"l\",(function(){return z}));var r=n(\"f6nW\"),i=n(\"0EQZ\"),a=n(\"FKr1\"),o=n(\"8LU1\"),s=n(\"2Vo4\"),l=n(\"XNiG\"),c=n(\"VRyK\"),u=n(\"LRne\"),h=n(\"itXk\"),d=n(\"lJxs\"),f=n(\"fXoL\");const p=[[[\"caption\"]],[[\"colgroup\"],[\"col\"]]],m=[\"caption\",\"colgroup, col\"];let g=(()=>{class t extends r.q{constructor(){super(...arguments),this.stickyCssClass=\"mat-table-sticky\",this.needsPositionStickyOnElement=!1}}return t.\\u0275fac=function(e){return y(e||t)},t.\\u0275cmp=f.Rb({type:t,selectors:[[\"mat-table\"],[\"table\",\"mat-table\",\"\"]],hostAttrs:[1,\"mat-table\"],hostVars:2,hostBindings:function(t,e){2&t&&f.Pb(\"mat-table-fixed-layout\",e.fixedLayout)},exportAs:[\"matTable\"],features:[f.Kb([{provide:i.g,useClass:i.e},{provide:r.q,useExisting:t},{provide:r.a,useExisting:t},{provide:r.x,useClass:r.y}]),f.Ib],ngContentSelectors:m,decls:6,vars:0,consts:[[\"headerRowOutlet\",\"\"],[\"rowOutlet\",\"\"],[\"noDataRowOutlet\",\"\"],[\"footerRowOutlet\",\"\"]],template:function(t,e){1&t&&(f.uc(p),f.tc(0),f.tc(1,1),f.Zb(2,0),f.Zb(3,1),f.Zb(4,2),f.Zb(5,3))},directives:[r.v,r.t,r.w,r.u],styles:['mat-table{display:block}mat-header-row{min-height:56px}mat-row,mat-footer-row{min-height:48px}mat-row,mat-header-row,mat-footer-row{display:flex;border-width:0;border-bottom-width:1px;border-style:solid;align-items:center;box-sizing:border-box}mat-row::after,mat-header-row::after,mat-footer-row::after{display:inline-block;min-height:inherit;content:\"\"}mat-cell:first-of-type,mat-header-cell:first-of-type,mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] mat-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] mat-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}mat-cell,mat-header-cell,mat-footer-cell{flex:1;display:flex;align-items:center;overflow:hidden;word-wrap:break-word;min-height:inherit}table.mat-table{border-spacing:0}tr.mat-header-row{height:56px}tr.mat-row,tr.mat-footer-row{height:48px}th.mat-header-cell{text-align:left}[dir=rtl] th.mat-header-cell{text-align:right}th.mat-header-cell,td.mat-cell,td.mat-footer-cell{padding:0;border-bottom-width:1px;border-bottom-style:solid}th.mat-header-cell:first-of-type,td.mat-cell:first-of-type,td.mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] th.mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] td.mat-cell:first-of-type:not(:only-of-type),[dir=rtl] td.mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}th.mat-header-cell:last-of-type,td.mat-cell:last-of-type,td.mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] th.mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] td.mat-cell:last-of-type:not(:only-of-type),[dir=rtl] td.mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}.mat-table-sticky{position:-webkit-sticky !important;position:sticky !important}.mat-table-fixed-layout{table-layout:fixed}\\n'],encapsulation:2}),t})();const y=f.fc(g);let v=(()=>{class t extends r.c{}return t.\\u0275fac=function(e){return _(e||t)},t.\\u0275dir=f.Sb({type:t,selectors:[[\"\",\"matCellDef\",\"\"]],features:[f.Kb([{provide:r.c,useExisting:t}]),f.Ib]}),t})();const _=f.fc(v);let b=(()=>{class t extends r.k{}return t.\\u0275fac=function(e){return x(e||t)},t.\\u0275dir=f.Sb({type:t,selectors:[[\"\",\"matHeaderCellDef\",\"\"]],features:[f.Kb([{provide:r.k,useExisting:t}]),f.Ib]}),t})();const x=f.fc(b);let w=(()=>{class t extends r.e{get name(){return this._name}set name(t){this._setNameInput(t)}_updateColumnCssClassName(){super._updateColumnCssClassName(),this._columnCssClassName.push(\"mat-column-\"+this.cssClassFriendlyName)}}return t.\\u0275fac=function(e){return k(e||t)},t.\\u0275dir=f.Sb({type:t,selectors:[[\"\",\"matColumnDef\",\"\"]],inputs:{sticky:\"sticky\",name:[\"matColumnDef\",\"name\"]},features:[f.Kb([{provide:r.e,useExisting:t},{provide:\"MAT_SORT_HEADER_COLUMN_DEF\",useExisting:t}]),f.Ib]}),t})();const k=f.fc(w);let M=(()=>{class t extends r.j{}return t.\\u0275fac=function(e){return T(e||t)},t.\\u0275dir=f.Sb({type:t,selectors:[[\"mat-header-cell\"],[\"th\",\"mat-header-cell\",\"\"]],hostAttrs:[\"role\",\"columnheader\",1,\"mat-header-cell\"],features:[f.Ib]}),t})();const T=f.fc(M);let S=(()=>{class t extends r.b{}return t.\\u0275fac=function(e){return A(e||t)},t.\\u0275dir=f.Sb({type:t,selectors:[[\"mat-cell\"],[\"td\",\"mat-cell\",\"\"]],hostAttrs:[\"role\",\"gridcell\",1,\"mat-cell\"],features:[f.Ib]}),t})();const A=f.fc(S);let L=(()=>{class t extends r.m{}return t.\\u0275fac=function(e){return C(e||t)},t.\\u0275dir=f.Sb({type:t,selectors:[[\"\",\"matHeaderRowDef\",\"\"]],inputs:{columns:[\"matHeaderRowDef\",\"columns\"],sticky:[\"matHeaderRowDefSticky\",\"sticky\"]},features:[f.Kb([{provide:r.m,useExisting:t}]),f.Ib]}),t})();const C=f.fc(L);let E=(()=>{class t extends r.p{}return t.\\u0275fac=function(e){return O(e||t)},t.\\u0275dir=f.Sb({type:t,selectors:[[\"\",\"matRowDef\",\"\"]],inputs:{columns:[\"matRowDefColumns\",\"columns\"],when:[\"matRowDefWhen\",\"when\"]},features:[f.Kb([{provide:r.p,useExisting:t}]),f.Ib]}),t})();const O=f.fc(E);let D=(()=>{class t extends r.l{}return t.\\u0275fac=function(e){return I(e||t)},t.\\u0275cmp=f.Rb({type:t,selectors:[[\"mat-header-row\"],[\"tr\",\"mat-header-row\",\"\"]],hostAttrs:[\"role\",\"row\",1,\"mat-header-row\"],exportAs:[\"matHeaderRow\"],features:[f.Kb([{provide:r.l,useExisting:t}]),f.Ib],decls:1,vars:0,consts:[[\"cdkCellOutlet\",\"\"]],template:function(t,e){1&t&&f.Zb(0,0)},directives:[r.d],encapsulation:2}),t})();const I=f.fc(D);let P=(()=>{class t extends r.o{}return t.\\u0275fac=function(e){return R(e||t)},t.\\u0275cmp=f.Rb({type:t,selectors:[[\"mat-row\"],[\"tr\",\"mat-row\",\"\"]],hostAttrs:[\"role\",\"row\",1,\"mat-row\"],exportAs:[\"matRow\"],features:[f.Kb([{provide:r.o,useExisting:t}]),f.Ib],decls:1,vars:0,consts:[[\"cdkCellOutlet\",\"\"]],template:function(t,e){1&t&&f.Zb(0,0)},directives:[r.d],encapsulation:2}),t})();const R=f.fc(P);let z=(()=>{class t{}return t.\\u0275mod=f.Vb({type:t}),t.\\u0275inj=f.Ub({factory:function(e){return new(e||t)},imports:[[r.r,a.i],a.i]}),t})();class j extends i.b{constructor(t=[]){super(),this._renderData=new s.a([]),this._filter=new s.a(\"\"),this._internalPageChanges=new l.a,this._renderChangesSubscription=null,this.sortingDataAccessor=(t,e)=>{const n=t[e];if(Object(o.a)(n)){const t=Number(n);return t<9007199254740991?t:n}return n},this.sortData=(t,e)=>{const n=e.active,r=e.direction;return n&&\"\"!=r?t.sort((t,e)=>{let i=this.sortingDataAccessor(t,n),a=this.sortingDataAccessor(e,n);const o=typeof i,s=typeof a;o!==s&&(\"number\"===o&&(i+=\"\"),\"number\"===s&&(a+=\"\"));let l=0;return null!=i&&null!=a?i>a?l=1:i<a&&(l=-1):null!=i?l=1:null!=a&&(l=-1),l*(\"asc\"==r?1:-1)}):t},this.filterPredicate=(t,e)=>{const n=Object.keys(t).reduce((e,n)=>e+t[n]+\"\\u25ec\",\"\").toLowerCase(),r=e.trim().toLowerCase();return-1!=n.indexOf(r)},this._data=new s.a(t),this._updateChangeSubscription()}get data(){return this._data.value}set data(t){this._data.next(t)}get filter(){return this._filter.value}set filter(t){this._filter.next(t)}get sort(){return this._sort}set sort(t){this._sort=t,this._updateChangeSubscription()}get paginator(){return this._paginator}set paginator(t){this._paginator=t,this._updateChangeSubscription()}_updateChangeSubscription(){var t;const e=this._sort?Object(c.a)(this._sort.sortChange,this._sort.initialized):Object(u.a)(null),n=this._paginator?Object(c.a)(this._paginator.page,this._internalPageChanges,this._paginator.initialized):Object(u.a)(null),r=this._data,i=Object(h.a)([r,this._filter]).pipe(Object(d.a)(([t])=>this._filterData(t))),a=Object(h.a)([i,e]).pipe(Object(d.a)(([t])=>this._orderData(t))),o=Object(h.a)([a,n]).pipe(Object(d.a)(([t])=>this._pageData(t)));null===(t=this._renderChangesSubscription)||void 0===t||t.unsubscribe(),this._renderChangesSubscription=o.subscribe(t=>this._renderData.next(t))}_filterData(t){return this.filteredData=null==this.filter||\"\"===this.filter?t:t.filter(t=>this.filterPredicate(t,this.filter)),this.paginator&&this._updatePaginator(this.filteredData.length),this.filteredData}_orderData(t){return this.sort?this.sortData(t.slice(),this.sort):t}_pageData(t){if(!this.paginator)return t;const e=this.paginator.pageIndex*this.paginator.pageSize;return t.slice(e,e+this.paginator.pageSize)}_updatePaginator(t){Promise.resolve().then(()=>{const e=this.paginator;if(e&&(e.length=t,e.pageIndex>0)){const t=Math.ceil(e.length/e.pageSize)-1||0,n=Math.min(e.pageIndex,t);n!==e.pageIndex&&(e.pageIndex=n,this._internalPageChanges.next())}})}connect(){return this._renderChangesSubscription||this._updateChangeSubscription(),this._renderData}disconnect(){var t;null===(t=this._renderChangesSubscription)||void 0===t||t.unsubscribe(),this._renderChangesSubscription=null}}class F extends j{}},\"+rOU\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return c})),n.d(e,\"b\",(function(){return h})),n.d(e,\"c\",(function(){return d})),n.d(e,\"d\",(function(){return o})),n.d(e,\"e\",(function(){return u})),n.d(e,\"f\",(function(){return f})),n.d(e,\"g\",(function(){return s}));var r=n(\"fXoL\"),i=n(\"ofXK\");class a{attach(t){return this._attachedHost=t,t.attach(this)}detach(){let t=this._attachedHost;null!=t&&(this._attachedHost=null,t.detach())}get isAttached(){return null!=this._attachedHost}setAttachedHost(t){this._attachedHost=t}}class o extends a{constructor(t,e,n,r){super(),this.component=t,this.viewContainerRef=e,this.injector=n,this.componentFactoryResolver=r}}class s extends a{constructor(t,e,n){super(),this.templateRef=t,this.viewContainerRef=e,this.context=n}get origin(){return this.templateRef.elementRef}attach(t,e=this.context){return this.context=e,super.attach(t)}detach(){return this.context=void 0,super.detach()}}class l extends a{constructor(t){super(),this.element=t instanceof r.p?t.nativeElement:t}}class c{constructor(){this._isDisposed=!1,this.attachDomPortal=null}hasAttached(){return!!this._attachedPortal}attach(t){return t instanceof o?(this._attachedPortal=t,this.attachComponentPortal(t)):t instanceof s?(this._attachedPortal=t,this.attachTemplatePortal(t)):this.attachDomPortal&&t instanceof l?(this._attachedPortal=t,this.attachDomPortal(t)):void 0}detach(){this._attachedPortal&&(this._attachedPortal.setAttachedHost(null),this._attachedPortal=null),this._invokeDisposeFn()}dispose(){this.hasAttached()&&this.detach(),this._invokeDisposeFn(),this._isDisposed=!0}setDisposeFn(t){this._disposeFn=t}_invokeDisposeFn(){this._disposeFn&&(this._disposeFn(),this._disposeFn=null)}}class u extends c{constructor(t,e,n,r,i){super(),this.outletElement=t,this._componentFactoryResolver=e,this._appRef=n,this._defaultInjector=r,this.attachDomPortal=t=>{const e=t.element,n=this._document.createComment(\"dom-portal\");e.parentNode.insertBefore(n,e),this.outletElement.appendChild(e),super.setDisposeFn(()=>{n.parentNode&&n.parentNode.replaceChild(e,n)})},this._document=i}attachComponentPortal(t){const e=(t.componentFactoryResolver||this._componentFactoryResolver).resolveComponentFactory(t.component);let n;return t.viewContainerRef?(n=t.viewContainerRef.createComponent(e,t.viewContainerRef.length,t.injector||t.viewContainerRef.injector),this.setDisposeFn(()=>n.destroy())):(n=e.create(t.injector||this._defaultInjector),this._appRef.attachView(n.hostView),this.setDisposeFn(()=>{this._appRef.detachView(n.hostView),n.destroy()})),this.outletElement.appendChild(this._getComponentRootNode(n)),n}attachTemplatePortal(t){let e=t.viewContainerRef,n=e.createEmbeddedView(t.templateRef,t.context);return n.rootNodes.forEach(t=>this.outletElement.appendChild(t)),n.detectChanges(),this.setDisposeFn(()=>{let t=e.indexOf(n);-1!==t&&e.remove(t)}),n}dispose(){super.dispose(),null!=this.outletElement.parentNode&&this.outletElement.parentNode.removeChild(this.outletElement)}_getComponentRootNode(t){return t.hostView.rootNodes[0]}}let h=(()=>{class t extends s{constructor(t,e){super(t,e)}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.V),r.Xb(r.Z))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"cdkPortal\",\"\"]],exportAs:[\"cdkPortal\"],features:[r.Ib]}),t})(),d=(()=>{class t extends c{constructor(t,e,n){super(),this._componentFactoryResolver=t,this._viewContainerRef=e,this._isInitialized=!1,this.attached=new r.s,this.attachDomPortal=t=>{const e=t.element,n=this._document.createComment(\"dom-portal\");t.setAttachedHost(this),e.parentNode.insertBefore(n,e),this._getRootNode().appendChild(e),super.setDisposeFn(()=>{n.parentNode&&n.parentNode.replaceChild(e,n)})},this._document=n}get portal(){return this._attachedPortal}set portal(t){(!this.hasAttached()||t||this._isInitialized)&&(this.hasAttached()&&super.detach(),t&&super.attach(t),this._attachedPortal=t)}get attachedRef(){return this._attachedRef}ngOnInit(){this._isInitialized=!0}ngOnDestroy(){super.dispose(),this._attachedPortal=null,this._attachedRef=null}attachComponentPortal(t){t.setAttachedHost(this);const e=null!=t.viewContainerRef?t.viewContainerRef:this._viewContainerRef,n=(t.componentFactoryResolver||this._componentFactoryResolver).resolveComponentFactory(t.component),r=e.createComponent(n,e.length,t.injector||e.injector);return e!==this._viewContainerRef&&this._getRootNode().appendChild(r.hostView.rootNodes[0]),super.setDisposeFn(()=>r.destroy()),this._attachedPortal=t,this._attachedRef=r,this.attached.emit(r),r}attachTemplatePortal(t){t.setAttachedHost(this);const e=this._viewContainerRef.createEmbeddedView(t.templateRef,t.context);return super.setDisposeFn(()=>this._viewContainerRef.clear()),this._attachedPortal=t,this._attachedRef=e,this.attached.emit(e),e}_getRootNode(){const t=this._viewContainerRef.element.nativeElement;return t.nodeType===t.ELEMENT_NODE?t:t.parentNode}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.m),r.Xb(r.Z),r.Xb(i.d))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"cdkPortalOutlet\",\"\"]],inputs:{portal:[\"cdkPortalOutlet\",\"portal\"]},outputs:{attached:\"attached\"},exportAs:[\"cdkPortalOutlet\"],features:[r.Ib]}),t})(),f=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)}}),t})()},\"+s0g\":function(t,e,n){!function(t){\"use strict\";var e=\"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.\".split(\"_\"),n=\"jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),r=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],i=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;t.defineLocale(\"nl\",{months:\"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december\".split(\"_\"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:\"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag\".split(\"_\"),weekdaysShort:\"zo._ma._di._wo._do._vr._za.\".split(\"_\"),weekdaysMin:\"zo_ma_di_wo_do_vr_za\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD-MM-YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[vandaag om] LT\",nextDay:\"[morgen om] LT\",nextWeek:\"dddd [om] LT\",lastDay:\"[gisteren om] LT\",lastWeek:\"[afgelopen] dddd [om] LT\",sameElse:\"L\"},relativeTime:{future:\"over %s\",past:\"%s geleden\",s:\"een paar seconden\",ss:\"%d seconden\",m:\"\\xe9\\xe9n minuut\",mm:\"%d minuten\",h:\"\\xe9\\xe9n uur\",hh:\"%d uur\",d:\"\\xe9\\xe9n dag\",dd:\"%d dagen\",w:\"\\xe9\\xe9n week\",ww:\"%d weken\",M:\"\\xe9\\xe9n maand\",MM:\"%d maanden\",y:\"\\xe9\\xe9n jaar\",yy:\"%d jaar\"},dayOfMonthOrdinalParse:/\\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?\"ste\":\"de\")},week:{dow:1,doy:4}})}(n(\"wd/R\"))},\"//9w\":function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"se\",{months:\"o\\u0111\\u0111ajagem\\xe1nnu_guovvam\\xe1nnu_njuk\\u010dam\\xe1nnu_cuo\\u014bom\\xe1nnu_miessem\\xe1nnu_geassem\\xe1nnu_suoidnem\\xe1nnu_borgem\\xe1nnu_\\u010dak\\u010dam\\xe1nnu_golggotm\\xe1nnu_sk\\xe1bmam\\xe1nnu_juovlam\\xe1nnu\".split(\"_\"),monthsShort:\"o\\u0111\\u0111j_guov_njuk_cuo_mies_geas_suoi_borg_\\u010dak\\u010d_golg_sk\\xe1b_juov\".split(\"_\"),weekdays:\"sotnabeaivi_vuoss\\xe1rga_ma\\u014b\\u014beb\\xe1rga_gaskavahkku_duorastat_bearjadat_l\\xe1vvardat\".split(\"_\"),weekdaysShort:\"sotn_vuos_ma\\u014b_gask_duor_bear_l\\xe1v\".split(\"_\"),weekdaysMin:\"s_v_m_g_d_b_L\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"MMMM D. [b.] YYYY\",LLL:\"MMMM D. [b.] YYYY [ti.] HH:mm\",LLLL:\"dddd, MMMM D. [b.] YYYY [ti.] HH:mm\"},calendar:{sameDay:\"[otne ti] LT\",nextDay:\"[ihttin ti] LT\",nextWeek:\"dddd [ti] LT\",lastDay:\"[ikte ti] LT\",lastWeek:\"[ovddit] dddd [ti] LT\",sameElse:\"L\"},relativeTime:{future:\"%s gea\\u017ees\",past:\"ma\\u014bit %s\",s:\"moadde sekunddat\",ss:\"%d sekunddat\",m:\"okta minuhta\",mm:\"%d minuhtat\",h:\"okta diimmu\",hh:\"%d diimmut\",d:\"okta beaivi\",dd:\"%d beaivvit\",M:\"okta m\\xe1nnu\",MM:\"%d m\\xe1nut\",y:\"okta jahki\",yy:\"%d jagit\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},\"/X5v\":function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"x-pseudo\",{months:\"J~\\xe1\\xf1\\xfa\\xe1~r\\xfd_F~\\xe9br\\xfa~\\xe1r\\xfd_~M\\xe1rc~h_\\xc1p~r\\xedl_~M\\xe1\\xfd_~J\\xfa\\xf1\\xe9~_J\\xfal~\\xfd_\\xc1\\xfa~g\\xfast~_S\\xe9p~t\\xe9mb~\\xe9r_\\xd3~ct\\xf3b~\\xe9r_\\xd1~\\xf3v\\xe9m~b\\xe9r_~D\\xe9c\\xe9~mb\\xe9r\".split(\"_\"),monthsShort:\"J~\\xe1\\xf1_~F\\xe9b_~M\\xe1r_~\\xc1pr_~M\\xe1\\xfd_~J\\xfa\\xf1_~J\\xfal_~\\xc1\\xfag_~S\\xe9p_~\\xd3ct_~\\xd1\\xf3v_~D\\xe9c\".split(\"_\"),monthsParseExact:!0,weekdays:\"S~\\xfa\\xf1d\\xe1~\\xfd_M\\xf3~\\xf1d\\xe1\\xfd~_T\\xfa\\xe9~sd\\xe1\\xfd~_W\\xe9d~\\xf1\\xe9sd~\\xe1\\xfd_T~h\\xfars~d\\xe1\\xfd_~Fr\\xedd~\\xe1\\xfd_S~\\xe1t\\xfar~d\\xe1\\xfd\".split(\"_\"),weekdaysShort:\"S~\\xfa\\xf1_~M\\xf3\\xf1_~T\\xfa\\xe9_~W\\xe9d_~Th\\xfa_~Fr\\xed_~S\\xe1t\".split(\"_\"),weekdaysMin:\"S~\\xfa_M\\xf3~_T\\xfa_~W\\xe9_T~h_Fr~_S\\xe1\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[T~\\xf3d\\xe1~\\xfd \\xe1t] LT\",nextDay:\"[T~\\xf3m\\xf3~rr\\xf3~w \\xe1t] LT\",nextWeek:\"dddd [\\xe1t] LT\",lastDay:\"[\\xdd~\\xe9st~\\xe9rd\\xe1~\\xfd \\xe1t] LT\",lastWeek:\"[L~\\xe1st] dddd [\\xe1t] LT\",sameElse:\"L\"},relativeTime:{future:\"\\xed~\\xf1 %s\",past:\"%s \\xe1~g\\xf3\",s:\"\\xe1 ~f\\xe9w ~s\\xe9c\\xf3~\\xf1ds\",ss:\"%d s~\\xe9c\\xf3\\xf1~ds\",m:\"\\xe1 ~m\\xed\\xf1~\\xfat\\xe9\",mm:\"%d m~\\xed\\xf1\\xfa~t\\xe9s\",h:\"\\xe1~\\xf1 h\\xf3~\\xfar\",hh:\"%d h~\\xf3\\xfars\",d:\"\\xe1 ~d\\xe1\\xfd\",dd:\"%d d~\\xe1\\xfds\",M:\"\\xe1 ~m\\xf3\\xf1~th\",MM:\"%d m~\\xf3\\xf1t~hs\",y:\"\\xe1 ~\\xfd\\xe9\\xe1r\",yy:\"%d \\xfd~\\xe9\\xe1rs\"},dayOfMonthOrdinalParse:/\\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?\"th\":1===e?\"st\":2===e?\"nd\":3===e?\"rd\":\"th\")},week:{dow:1,doy:4}})}(n(\"wd/R\"))},\"/t3+\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return d})),n.d(e,\"b\",(function(){return f}));var r=n(\"FKr1\"),i=n(\"ofXK\"),a=n(\"fXoL\"),o=n(\"nLfN\");const s=[\"*\",[[\"mat-toolbar-row\"]]],l=[\"*\",\"mat-toolbar-row\"];class c{constructor(t){this._elementRef=t}}const u=Object(r.w)(c);let h=(()=>{class t{}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275dir=a.Sb({type:t,selectors:[[\"mat-toolbar-row\"]],hostAttrs:[1,\"mat-toolbar-row\"],exportAs:[\"matToolbarRow\"]}),t})(),d=(()=>{class t extends u{constructor(t,e,n){super(t),this._platform=e,this._document=n}ngAfterViewInit(){this._platform.isBrowser&&(this._checkToolbarMixedModes(),this._toolbarRows.changes.subscribe(()=>this._checkToolbarMixedModes()))}_checkToolbarMixedModes(){}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(a.p),a.Xb(o.a),a.Xb(i.d))},t.\\u0275cmp=a.Rb({type:t,selectors:[[\"mat-toolbar\"]],contentQueries:function(t,e,n){if(1&t&&a.Qb(n,h,!0),2&t){let t;a.Ac(t=a.mc())&&(e._toolbarRows=t)}},hostAttrs:[1,\"mat-toolbar\"],hostVars:4,hostBindings:function(t,e){2&t&&a.Pb(\"mat-toolbar-multiple-rows\",e._toolbarRows.length>0)(\"mat-toolbar-single-row\",0===e._toolbarRows.length)},inputs:{color:\"color\"},exportAs:[\"matToolbar\"],features:[a.Ib],ngContentSelectors:l,decls:2,vars:0,template:function(t,e){1&t&&(a.uc(s),a.tc(0),a.tc(1,1))},styles:[\".cdk-high-contrast-active .mat-toolbar{outline:solid 1px}.mat-toolbar-row,.mat-toolbar-single-row{display:flex;box-sizing:border-box;padding:0 16px;width:100%;flex-direction:row;align-items:center;white-space:nowrap}.mat-toolbar-multiple-rows{display:flex;box-sizing:border-box;flex-direction:column;width:100%}\\n\"],encapsulation:2,changeDetection:0}),t})(),f=(()=>{class t{}return t.\\u0275mod=a.Vb({type:t}),t.\\u0275inj=a.Ub({factory:function(e){return new(e||t)},imports:[[r.i],r.i]}),t})()},\"/uUt\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));var r=n(\"7o/Q\");function i(t,e){return n=>n.lift(new a(t,e))}class a{constructor(t,e){this.compare=t,this.keySelector=e}call(t,e){return e.subscribe(new o(t,this.compare,this.keySelector))}}class o extends r.a{constructor(t,e,n){super(t),this.keySelector=n,this.hasKey=!1,\"function\"==typeof e&&(this.compare=e)}compare(t,e){return t===e}_next(t){let e;try{const{keySelector:n}=this;e=n?n(t):t}catch(r){return this.destination.error(r)}let n=!1;if(this.hasKey)try{const{compare:t}=this;n=t(this.key,e)}catch(r){return this.destination.error(r)}else this.hasKey=!0;n||(this.key=e,this.destination.next(t))}}},0:function(t,e,n){t.exports=n(\"zUnb\")},\"0EQZ\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return c})),n.d(e,\"b\",(function(){return s})),n.d(e,\"c\",(function(){return d})),n.d(e,\"d\",(function(){return f})),n.d(e,\"e\",(function(){return u})),n.d(e,\"f\",(function(){return h})),n.d(e,\"g\",(function(){return p})),n.d(e,\"h\",(function(){return l}));var r=n(\"7+OI\"),i=n(\"LRne\"),a=n(\"XNiG\"),o=n(\"fXoL\");class s{}function l(t){return t&&\"function\"==typeof t.connect}class c extends s{constructor(t){super(),this._data=t}connect(){return Object(r.a)(this._data)?this._data:Object(i.a)(this._data)}disconnect(){}}class u{applyChanges(t,e,n,r,i){t.forEachOperation((t,r,a)=>{let o,s;if(null==t.previousIndex){const i=n(t,r,a);o=e.createEmbeddedView(i.templateRef,i.context,i.index),s=1}else null==a?(e.remove(r),s=3):(o=e.get(r),e.move(o,a),s=2);i&&i({context:null==o?void 0:o.context,operation:s,record:t})})}detach(){}}class h{constructor(){this.viewCacheSize=20,this._viewCache=[]}applyChanges(t,e,n,r,i){t.forEachOperation((t,a,o)=>{let s,l;null==t.previousIndex?(s=this._insertView(()=>n(t,a,o),o,e,r(t)),l=s?1:0):null==o?(this._detachAndCacheView(a,e),l=3):(s=this._moveView(a,o,e,r(t)),l=2),i&&i({context:null==s?void 0:s.context,operation:l,record:t})})}detach(){for(const t of this._viewCache)t.destroy()}_insertView(t,e,n,r){let i=this._insertViewFromCache(e,n);if(i)return void(i.context.$implicit=r);const a=t();return n.createEmbeddedView(a.templateRef,a.context,a.index)}_detachAndCacheView(t,e){const n=this._detachView(t,e);this._maybeCacheView(n,e)}_moveView(t,e,n,r){const i=n.get(t);return n.move(i,e),i.context.$implicit=r,i}_maybeCacheView(t,e){if(this._viewCache.length<this.viewCacheSize)this._viewCache.push(t);else{const n=e.indexOf(t);-1===n?t.destroy():e.remove(n)}}_insertViewFromCache(t,e){const n=this._viewCache.pop();return n&&e.insert(n,t),n||null}_detachView(t,e){return e.detach(t)}}class d{constructor(t=!1,e,n=!0){this._multiple=t,this._emitChanges=n,this._selection=new Set,this._deselectedToEmit=[],this._selectedToEmit=[],this.changed=new a.a,e&&e.length&&(t?e.forEach(t=>this._markSelected(t)):this._markSelected(e[0]),this._selectedToEmit.length=0)}get selected(){return this._selected||(this._selected=Array.from(this._selection.values())),this._selected}select(...t){this._verifyValueAssignment(t),t.forEach(t=>this._markSelected(t)),this._emitChangeEvent()}deselect(...t){this._verifyValueAssignment(t),t.forEach(t=>this._unmarkSelected(t)),this._emitChangeEvent()}toggle(t){this.isSelected(t)?this.deselect(t):this.select(t)}clear(){this._unmarkAll(),this._emitChangeEvent()}isSelected(t){return this._selection.has(t)}isEmpty(){return 0===this._selection.size}hasValue(){return!this.isEmpty()}sort(t){this._multiple&&this.selected&&this._selected.sort(t)}isMultipleSelection(){return this._multiple}_emitChangeEvent(){this._selected=null,(this._selectedToEmit.length||this._deselectedToEmit.length)&&(this.changed.next({source:this,added:this._selectedToEmit,removed:this._deselectedToEmit}),this._deselectedToEmit=[],this._selectedToEmit=[])}_markSelected(t){this.isSelected(t)||(this._multiple||this._unmarkAll(),this._selection.add(t),this._emitChanges&&this._selectedToEmit.push(t))}_unmarkSelected(t){this.isSelected(t)&&(this._selection.delete(t),this._emitChanges&&this._deselectedToEmit.push(t))}_unmarkAll(){this.isEmpty()||this._selection.forEach(t=>this._unmarkSelected(t))}_verifyValueAssignment(t){}}let f=(()=>{class t{constructor(){this._listeners=[]}notify(t,e){for(let n of this._listeners)n(t,e)}listen(t){return this._listeners.push(t),()=>{this._listeners=this._listeners.filter(e=>t!==e)}}ngOnDestroy(){this._listeners=[]}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=Object(o.Tb)({factory:function(){return new t},token:t,providedIn:\"root\"}),t})();const p=new o.w(\"_ViewRepeater\")},\"0IaG\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return A})),n.d(e,\"b\",(function(){return D})),n.d(e,\"c\",(function(){return R})),n.d(e,\"d\",(function(){return I})),n.d(e,\"e\",(function(){return P})),n.d(e,\"f\",(function(){return z}));var r=n(\"rDax\"),i=n(\"+rOU\"),a=n(\"fXoL\"),o=n(\"FKr1\"),s=n(\"cH1L\"),l=n(\"ofXK\"),c=n(\"XNiG\"),u=n(\"NXyV\"),h=n(\"LRne\"),d=n(\"pLZG\"),f=n(\"IzEk\"),p=n(\"JX91\"),m=n(\"R0Ic\"),g=n(\"FtGj\"),y=n(\"u47x\");function v(t,e){}class _{constructor(){this.role=\"dialog\",this.panelClass=\"\",this.hasBackdrop=!0,this.backdropClass=\"\",this.disableClose=!1,this.width=\"\",this.height=\"\",this.maxWidth=\"80vw\",this.data=null,this.ariaDescribedBy=null,this.ariaLabelledBy=null,this.ariaLabel=null,this.autoFocus=!0,this.restoreFocus=!0,this.closeOnNavigation=!0}}const b={dialogContainer:Object(m.m)(\"dialogContainer\",[Object(m.j)(\"void, exit\",Object(m.k)({opacity:0,transform:\"scale(0.7)\"})),Object(m.j)(\"enter\",Object(m.k)({transform:\"none\"})),Object(m.l)(\"* => enter\",Object(m.e)(\"150ms cubic-bezier(0, 0, 0.2, 1)\",Object(m.k)({transform:\"none\",opacity:1}))),Object(m.l)(\"* => void, * => exit\",Object(m.e)(\"75ms cubic-bezier(0.4, 0.0, 0.2, 1)\",Object(m.k)({opacity:0})))])};let x=(()=>{class t extends i.a{constructor(t,e,n,r,i,o){super(),this._elementRef=t,this._focusTrapFactory=e,this._changeDetectorRef=n,this._config=i,this._focusMonitor=o,this._animationStateChanged=new a.s,this._elementFocusedBeforeDialogWasOpened=null,this._closeInteractionType=null,this.attachDomPortal=t=>(this._portalOutlet.hasAttached(),this._portalOutlet.attachDomPortal(t)),this._ariaLabelledBy=i.ariaLabelledBy||null,this._document=r}_initializeWithAttachedContent(){this._setupFocusTrap(),this._capturePreviouslyFocusedElement(),this._focusDialogContainer()}attachComponentPortal(t){return this._portalOutlet.hasAttached(),this._portalOutlet.attachComponentPortal(t)}attachTemplatePortal(t){return this._portalOutlet.hasAttached(),this._portalOutlet.attachTemplatePortal(t)}_recaptureFocus(){this._containsFocus()||(!this._config.autoFocus||!this._focusTrap.focusInitialElement())&&this._elementRef.nativeElement.focus()}_trapFocus(){this._config.autoFocus?this._focusTrap.focusInitialElementWhenReady():this._containsFocus()||this._elementRef.nativeElement.focus()}_restoreFocus(){const t=this._elementFocusedBeforeDialogWasOpened;if(this._config.restoreFocus&&t&&\"function\"==typeof t.focus){const e=this._document.activeElement,n=this._elementRef.nativeElement;e&&e!==this._document.body&&e!==n&&!n.contains(e)||(this._focusMonitor?(this._focusMonitor.focusVia(t,this._closeInteractionType),this._closeInteractionType=null):t.focus())}this._focusTrap&&this._focusTrap.destroy()}_setupFocusTrap(){this._focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement)}_capturePreviouslyFocusedElement(){this._document&&(this._elementFocusedBeforeDialogWasOpened=this._document.activeElement)}_focusDialogContainer(){this._elementRef.nativeElement.focus&&this._elementRef.nativeElement.focus()}_containsFocus(){const t=this._elementRef.nativeElement,e=this._document.activeElement;return t===e||t.contains(e)}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(a.p),a.Xb(y.i),a.Xb(a.j),a.Xb(l.d,8),a.Xb(_),a.Xb(y.h))},t.\\u0275dir=a.Sb({type:t,viewQuery:function(t,e){if(1&t&&a.Ic(i.c,!0),2&t){let t;a.Ac(t=a.mc())&&(e._portalOutlet=t.first)}},features:[a.Ib]}),t})(),w=(()=>{class t extends x{constructor(){super(...arguments),this._state=\"enter\"}_onAnimationDone({toState:t,totalTime:e}){\"enter\"===t?(this._trapFocus(),this._animationStateChanged.next({state:\"opened\",totalTime:e})):\"exit\"===t&&(this._restoreFocus(),this._animationStateChanged.next({state:\"closed\",totalTime:e}))}_onAnimationStart({toState:t,totalTime:e}){\"enter\"===t?this._animationStateChanged.next({state:\"opening\",totalTime:e}):\"exit\"!==t&&\"void\"!==t||this._animationStateChanged.next({state:\"closing\",totalTime:e})}_startExitAnimation(){this._state=\"exit\",this._changeDetectorRef.markForCheck()}}return t.\\u0275fac=function(e){return k(e||t)},t.\\u0275cmp=a.Rb({type:t,selectors:[[\"mat-dialog-container\"]],hostAttrs:[\"tabindex\",\"-1\",\"aria-modal\",\"true\",1,\"mat-dialog-container\"],hostVars:6,hostBindings:function(t,e){1&t&&a.Kc(\"@dialogContainer.start\",(function(t){return e._onAnimationStart(t)}))(\"@dialogContainer.done\",(function(t){return e._onAnimationDone(t)})),2&t&&(a.gc(\"id\",e._id),a.Mb(\"role\",e._config.role)(\"aria-labelledby\",e._config.ariaLabel?null:e._ariaLabelledBy)(\"aria-label\",e._config.ariaLabel)(\"aria-describedby\",e._config.ariaDescribedBy||null),a.Lc(\"@dialogContainer\",e._state))},features:[a.Ib],decls:1,vars:0,consts:[[\"cdkPortalOutlet\",\"\"]],template:function(t,e){1&t&&a.Mc(0,v,0,0,\"ng-template\",0)},directives:[i.c],styles:[\".mat-dialog-container{display:block;padding:24px;border-radius:4px;box-sizing:border-box;overflow:auto;outline:0;width:100%;height:100%;min-height:inherit;max-height:inherit}.cdk-high-contrast-active .mat-dialog-container{outline:solid 1px}.mat-dialog-content{display:block;margin:0 -24px;padding:0 24px;max-height:65vh;overflow:auto;-webkit-overflow-scrolling:touch}.mat-dialog-title{margin:0 0 20px;display:block}.mat-dialog-actions{padding:8px 0;display:flex;flex-wrap:wrap;min-height:52px;align-items:center;box-sizing:content-box;margin-bottom:-24px}.mat-dialog-actions[align=end]{justify-content:flex-end}.mat-dialog-actions[align=center]{justify-content:center}.mat-dialog-actions .mat-button-base+.mat-button-base,.mat-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-dialog-actions .mat-button-base+.mat-button-base,[dir=rtl] .mat-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}\\n\"],encapsulation:2,data:{animation:[b.dialogContainer]}}),t})();const k=a.fc(w);let M=0;class T{constructor(t,e,n=\"mat-dialog-\"+M++){this._overlayRef=t,this._containerInstance=e,this.id=n,this.disableClose=this._containerInstance._config.disableClose,this._afterOpened=new c.a,this._afterClosed=new c.a,this._beforeClosed=new c.a,this._state=0,e._id=n,e._animationStateChanged.pipe(Object(d.a)(t=>\"opened\"===t.state),Object(f.a)(1)).subscribe(()=>{this._afterOpened.next(),this._afterOpened.complete()}),e._animationStateChanged.pipe(Object(d.a)(t=>\"closed\"===t.state),Object(f.a)(1)).subscribe(()=>{clearTimeout(this._closeFallbackTimeout),this._finishDialogClose()}),t.detachments().subscribe(()=>{this._beforeClosed.next(this._result),this._beforeClosed.complete(),this._afterClosed.next(this._result),this._afterClosed.complete(),this.componentInstance=null,this._overlayRef.dispose()}),t.keydownEvents().pipe(Object(d.a)(t=>t.keyCode===g.f&&!this.disableClose&&!Object(g.r)(t))).subscribe(t=>{t.preventDefault(),S(this,\"keyboard\")}),t.backdropClick().subscribe(()=>{this.disableClose?this._containerInstance._recaptureFocus():S(this,\"mouse\")})}close(t){this._result=t,this._containerInstance._animationStateChanged.pipe(Object(d.a)(t=>\"closing\"===t.state),Object(f.a)(1)).subscribe(e=>{this._beforeClosed.next(t),this._beforeClosed.complete(),this._overlayRef.detachBackdrop(),this._closeFallbackTimeout=setTimeout(()=>this._finishDialogClose(),e.totalTime+100)}),this._state=1,this._containerInstance._startExitAnimation()}afterOpened(){return this._afterOpened}afterClosed(){return this._afterClosed}beforeClosed(){return this._beforeClosed}backdropClick(){return this._overlayRef.backdropClick()}keydownEvents(){return this._overlayRef.keydownEvents()}updatePosition(t){let e=this._getPositionStrategy();return t&&(t.left||t.right)?t.left?e.left(t.left):e.right(t.right):e.centerHorizontally(),t&&(t.top||t.bottom)?t.top?e.top(t.top):e.bottom(t.bottom):e.centerVertically(),this._overlayRef.updatePosition(),this}updateSize(t=\"\",e=\"\"){return this._overlayRef.updateSize({width:t,height:e}),this._overlayRef.updatePosition(),this}addPanelClass(t){return this._overlayRef.addPanelClass(t),this}removePanelClass(t){return this._overlayRef.removePanelClass(t),this}getState(){return this._state}_finishDialogClose(){this._state=2,this._overlayRef.dispose()}_getPositionStrategy(){return this._overlayRef.getConfig().positionStrategy}}function S(t,e,n){return void 0!==t._containerInstance&&(t._containerInstance._closeInteractionType=e),t.close(n)}const A=new a.w(\"MatDialogData\"),L=new a.w(\"mat-dialog-default-options\"),C=new a.w(\"mat-dialog-scroll-strategy\"),E={provide:C,deps:[r.c],useFactory:function(t){return()=>t.scrollStrategies.block()}};let O=(()=>{class t{constructor(t,e,n,r,i,a,o,s,l){this._overlay=t,this._injector=e,this._defaultOptions=n,this._parentDialog=r,this._overlayContainer=i,this._dialogRefConstructor=o,this._dialogContainerType=s,this._dialogDataToken=l,this._openDialogsAtThisLevel=[],this._afterAllClosedAtThisLevel=new c.a,this._afterOpenedAtThisLevel=new c.a,this._ariaHiddenElements=new Map,this.afterAllClosed=Object(u.a)(()=>this.openDialogs.length?this._getAfterAllClosed():this._getAfterAllClosed().pipe(Object(p.a)(void 0))),this._scrollStrategy=a}get openDialogs(){return this._parentDialog?this._parentDialog.openDialogs:this._openDialogsAtThisLevel}get afterOpened(){return this._parentDialog?this._parentDialog.afterOpened:this._afterOpenedAtThisLevel}_getAfterAllClosed(){const t=this._parentDialog;return t?t._getAfterAllClosed():this._afterAllClosedAtThisLevel}open(t,e){(e=function(t,e){return Object.assign(Object.assign({},e),t)}(e,this._defaultOptions||new _)).id&&this.getDialogById(e.id);const n=this._createOverlay(e),r=this._attachDialogContainer(n,e),i=this._attachDialogContent(t,r,n,e);return this.openDialogs.length||this._hideNonDialogContentFromAssistiveTechnology(),this.openDialogs.push(i),i.afterClosed().subscribe(()=>this._removeOpenDialog(i)),this.afterOpened.next(i),r._initializeWithAttachedContent(),i}closeAll(){this._closeDialogs(this.openDialogs)}getDialogById(t){return this.openDialogs.find(e=>e.id===t)}ngOnDestroy(){this._closeDialogs(this._openDialogsAtThisLevel),this._afterAllClosedAtThisLevel.complete(),this._afterOpenedAtThisLevel.complete()}_createOverlay(t){const e=this._getOverlayConfig(t);return this._overlay.create(e)}_getOverlayConfig(t){const e=new r.d({positionStrategy:this._overlay.position().global(),scrollStrategy:t.scrollStrategy||this._scrollStrategy(),panelClass:t.panelClass,hasBackdrop:t.hasBackdrop,direction:t.direction,minWidth:t.minWidth,minHeight:t.minHeight,maxWidth:t.maxWidth,maxHeight:t.maxHeight,disposeOnNavigation:t.closeOnNavigation});return t.backdropClass&&(e.backdropClass=t.backdropClass),e}_attachDialogContainer(t,e){const n=a.x.create({parent:e&&e.viewContainerRef&&e.viewContainerRef.injector||this._injector,providers:[{provide:_,useValue:e}]}),r=new i.d(this._dialogContainerType,e.viewContainerRef,n,e.componentFactoryResolver);return t.attach(r).instance}_attachDialogContent(t,e,n,r){const o=new this._dialogRefConstructor(n,e,r.id);if(t instanceof a.V)e.attachTemplatePortal(new i.g(t,null,{$implicit:r.data,dialogRef:o}));else{const n=this._createInjector(r,o,e),a=e.attachComponentPortal(new i.d(t,r.viewContainerRef,n));o.componentInstance=a.instance}return o.updateSize(r.width,r.height).updatePosition(r.position),o}_createInjector(t,e,n){const r=t&&t.viewContainerRef&&t.viewContainerRef.injector,i=[{provide:this._dialogContainerType,useValue:n},{provide:this._dialogDataToken,useValue:t.data},{provide:this._dialogRefConstructor,useValue:e}];return!t.direction||r&&r.get(s.b,null)||i.push({provide:s.b,useValue:{value:t.direction,change:Object(h.a)()}}),a.x.create({parent:r||this._injector,providers:i})}_removeOpenDialog(t){const e=this.openDialogs.indexOf(t);e>-1&&(this.openDialogs.splice(e,1),this.openDialogs.length||(this._ariaHiddenElements.forEach((t,e)=>{t?e.setAttribute(\"aria-hidden\",t):e.removeAttribute(\"aria-hidden\")}),this._ariaHiddenElements.clear(),this._getAfterAllClosed().next()))}_hideNonDialogContentFromAssistiveTechnology(){const t=this._overlayContainer.getContainerElement();if(t.parentElement){const e=t.parentElement.children;for(let n=e.length-1;n>-1;n--){let r=e[n];r===t||\"SCRIPT\"===r.nodeName||\"STYLE\"===r.nodeName||r.hasAttribute(\"aria-live\")||(this._ariaHiddenElements.set(r,r.getAttribute(\"aria-hidden\")),r.setAttribute(\"aria-hidden\",\"true\"))}}}_closeDialogs(t){let e=t.length;for(;e--;)t[e].close()}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(r.c),a.Xb(a.x),a.Xb(void 0),a.Xb(void 0),a.Xb(r.e),a.Xb(void 0),a.Xb(a.X),a.Xb(a.X),a.Xb(a.w))},t.\\u0275dir=a.Sb({type:t}),t})(),D=(()=>{class t extends O{constructor(t,e,n,r,i,a,o){super(t,e,r,a,o,i,T,w,A)}}return t.\\u0275fac=function(e){return new(e||t)(a.hc(r.c),a.hc(a.x),a.hc(l.j,8),a.hc(L,8),a.hc(C),a.hc(t,12),a.hc(r.e))},t.\\u0275prov=a.Tb({token:t,factory:t.\\u0275fac}),t})(),I=(()=>{class t{constructor(t,e,n){this.dialogRef=t,this._elementRef=e,this._dialog=n,this.type=\"button\"}ngOnInit(){this.dialogRef||(this.dialogRef=function(t,e){let n=t.nativeElement.parentElement;for(;n&&!n.classList.contains(\"mat-dialog-container\");)n=n.parentElement;return n?e.find(t=>t.id===n.id):null}(this._elementRef,this._dialog.openDialogs))}ngOnChanges(t){const e=t._matDialogClose||t._matDialogCloseResult;e&&(this.dialogResult=e.currentValue)}_onButtonClick(t){S(this.dialogRef,0===t.screenX&&0===t.screenY?\"keyboard\":\"mouse\",this.dialogResult)}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(T,8),a.Xb(a.p),a.Xb(D))},t.\\u0275dir=a.Sb({type:t,selectors:[[\"\",\"mat-dialog-close\",\"\"],[\"\",\"matDialogClose\",\"\"]],hostVars:2,hostBindings:function(t,e){1&t&&a.lc(\"click\",(function(t){return e._onButtonClick(t)})),2&t&&a.Mb(\"aria-label\",e.ariaLabel||null)(\"type\",e.type)},inputs:{type:\"type\",dialogResult:[\"mat-dialog-close\",\"dialogResult\"],ariaLabel:[\"aria-label\",\"ariaLabel\"],_matDialogClose:[\"matDialogClose\",\"_matDialogClose\"]},exportAs:[\"matDialogClose\"],features:[a.Jb]}),t})(),P=(()=>{class t{}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275dir=a.Sb({type:t,selectors:[[\"\",\"mat-dialog-content\",\"\"],[\"mat-dialog-content\"],[\"\",\"matDialogContent\",\"\"]],hostAttrs:[1,\"mat-dialog-content\"]}),t})(),R=(()=>{class t{}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275dir=a.Sb({type:t,selectors:[[\"\",\"mat-dialog-actions\",\"\"],[\"mat-dialog-actions\"],[\"\",\"matDialogActions\",\"\"]],hostAttrs:[1,\"mat-dialog-actions\"]}),t})(),z=(()=>{class t{}return t.\\u0275mod=a.Vb({type:t}),t.\\u0275inj=a.Ub({factory:function(e){return new(e||t)},providers:[D,E],imports:[[r.f,i.f,o.i],o.i]}),t})()},\"0MNC\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return w})),n.d(e,\"b\",(function(){return M}));var r=n(\"fXoL\"),i=n(\"8LU1\"),a=n(\"XNiG\"),o=n(\"itXk\"),s=n(\"GyhO\"),l=n(\"HDdC\"),c=n(\"IzEk\"),u=n(\"7o/Q\");class h{constructor(t){this.total=t}call(t,e){return e.subscribe(new d(t,this.total))}}class d extends u.a{constructor(t,e){super(t),this.total=e,this.count=0}_next(t){++this.count>this.total&&this.destination.next(t)}}var f=n(\"Kj3r\"),p=n(\"lJxs\"),m=n(\"JX91\"),g=n(\"1G5W\"),y=n(\"nLfN\");const v=new Set;let _,b=(()=>{class t{constructor(t){this._platform=t,this._matchMedia=this._platform.isBrowser&&window.matchMedia?window.matchMedia.bind(window):x}matchMedia(t){return this._platform.WEBKIT&&function(t){if(!v.has(t))try{_||(_=document.createElement(\"style\"),_.setAttribute(\"type\",\"text/css\"),document.head.appendChild(_)),_.sheet&&(_.sheet.insertRule(`@media ${t} {.fx-query-test{ }}`,0),v.add(t))}catch(e){console.error(e)}}(t),this._matchMedia(t)}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(y.a))},t.\\u0275prov=Object(r.Tb)({factory:function(){return new t(Object(r.hc)(y.a))},token:t,providedIn:\"root\"}),t})();function x(t){return{matches:\"all\"===t||\"\"===t,media:t,addListener:()=>{},removeListener:()=>{}}}let w=(()=>{class t{constructor(t,e){this._mediaMatcher=t,this._zone=e,this._queries=new Map,this._destroySubject=new a.a}ngOnDestroy(){this._destroySubject.next(),this._destroySubject.complete()}isMatched(t){return k(Object(i.b)(t)).some(t=>this._registerQuery(t).mql.matches)}observe(t){const e=k(Object(i.b)(t)).map(t=>this._registerQuery(t).observable);let n=Object(o.a)(e);return n=Object(s.a)(n.pipe(Object(c.a)(1)),n.pipe(t=>t.lift(new h(1)),Object(f.a)(0))),n.pipe(Object(p.a)(t=>{const e={matches:!1,breakpoints:{}};return t.forEach(({matches:t,query:n})=>{e.matches=e.matches||t,e.breakpoints[n]=t}),e}))}_registerQuery(t){if(this._queries.has(t))return this._queries.get(t);const e=this._mediaMatcher.matchMedia(t),n={observable:new l.a(t=>{const n=e=>this._zone.run(()=>t.next(e));return e.addListener(n),()=>{e.removeListener(n)}}).pipe(Object(m.a)(e),Object(p.a)(({matches:e})=>({query:t,matches:e})),Object(g.a)(this._destroySubject)),mql:e};return this._queries.set(t,n),n}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(b),r.hc(r.H))},t.\\u0275prov=Object(r.Tb)({factory:function(){return new t(Object(r.hc)(b),Object(r.hc)(r.H))},token:t,providedIn:\"root\"}),t})();function k(t){return t.map(t=>t.split(\",\")).reduce((t,e)=>t.concat(e)).map(t=>t.trim())}const M={XSmall:\"(max-width: 599.98px)\",Small:\"(min-width: 600px) and (max-width: 959.98px)\",Medium:\"(min-width: 960px) and (max-width: 1279.98px)\",Large:\"(min-width: 1280px) and (max-width: 1919.98px)\",XLarge:\"(min-width: 1920px)\",Handset:\"(max-width: 599.98px) and (orientation: portrait), (max-width: 959.98px) and (orientation: landscape)\",Tablet:\"(min-width: 600px) and (max-width: 839.98px) and (orientation: portrait), (min-width: 960px) and (max-width: 1279.98px) and (orientation: landscape)\",Web:\"(min-width: 840px) and (orientation: portrait), (min-width: 1280px) and (orientation: landscape)\",HandsetPortrait:\"(max-width: 599.98px) and (orientation: portrait)\",TabletPortrait:\"(min-width: 600px) and (max-width: 839.98px) and (orientation: portrait)\",WebPortrait:\"(min-width: 840px) and (orientation: portrait)\",HandsetLandscape:\"(max-width: 959.98px) and (orientation: landscape)\",TabletLandscape:\"(min-width: 960px) and (max-width: 1279.98px) and (orientation: landscape)\",WebLandscape:\"(min-width: 1280px) and (orientation: landscape)\"}},\"0mo+\":function(t,e,n){!function(t){\"use strict\";var e={1:\"\\u0f21\",2:\"\\u0f22\",3:\"\\u0f23\",4:\"\\u0f24\",5:\"\\u0f25\",6:\"\\u0f26\",7:\"\\u0f27\",8:\"\\u0f28\",9:\"\\u0f29\",0:\"\\u0f20\"},n={\"\\u0f21\":\"1\",\"\\u0f22\":\"2\",\"\\u0f23\":\"3\",\"\\u0f24\":\"4\",\"\\u0f25\":\"5\",\"\\u0f26\":\"6\",\"\\u0f27\":\"7\",\"\\u0f28\":\"8\",\"\\u0f29\":\"9\",\"\\u0f20\":\"0\"};t.defineLocale(\"bo\",{months:\"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f51\\u0f44\\u0f0b\\u0f54\\u0f7c_\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f42\\u0f49\\u0f72\\u0f66\\u0f0b\\u0f54_\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f42\\u0f66\\u0f74\\u0f58\\u0f0b\\u0f54_\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f5e\\u0f72\\u0f0b\\u0f54_\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f63\\u0f94\\u0f0b\\u0f54_\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f51\\u0fb2\\u0f74\\u0f42\\u0f0b\\u0f54_\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f51\\u0f74\\u0f53\\u0f0b\\u0f54_\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f62\\u0f92\\u0fb1\\u0f51\\u0f0b\\u0f54_\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f51\\u0f42\\u0f74\\u0f0b\\u0f54_\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f45\\u0f74\\u0f0b\\u0f54_\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f45\\u0f74\\u0f0b\\u0f42\\u0f45\\u0f72\\u0f42\\u0f0b\\u0f54_\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f56\\u0f45\\u0f74\\u0f0b\\u0f42\\u0f49\\u0f72\\u0f66\\u0f0b\\u0f54\".split(\"_\"),monthsShort:\"\\u0f5f\\u0fb3\\u0f0b1_\\u0f5f\\u0fb3\\u0f0b2_\\u0f5f\\u0fb3\\u0f0b3_\\u0f5f\\u0fb3\\u0f0b4_\\u0f5f\\u0fb3\\u0f0b5_\\u0f5f\\u0fb3\\u0f0b6_\\u0f5f\\u0fb3\\u0f0b7_\\u0f5f\\u0fb3\\u0f0b8_\\u0f5f\\u0fb3\\u0f0b9_\\u0f5f\\u0fb3\\u0f0b10_\\u0f5f\\u0fb3\\u0f0b11_\\u0f5f\\u0fb3\\u0f0b12\".split(\"_\"),monthsShortRegex:/^(\\u0f5f\\u0fb3\\u0f0b\\d{1,2})/,monthsParseExact:!0,weekdays:\"\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f49\\u0f72\\u0f0b\\u0f58\\u0f0b_\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b_\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f58\\u0f72\\u0f42\\u0f0b\\u0f51\\u0f58\\u0f62\\u0f0b_\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f63\\u0fb7\\u0f42\\u0f0b\\u0f54\\u0f0b_\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f55\\u0f74\\u0f62\\u0f0b\\u0f56\\u0f74_\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f54\\u0f0b\\u0f66\\u0f44\\u0f66\\u0f0b_\\u0f42\\u0f5f\\u0f60\\u0f0b\\u0f66\\u0fa4\\u0f7a\\u0f53\\u0f0b\\u0f54\\u0f0b\".split(\"_\"),weekdaysShort:\"\\u0f49\\u0f72\\u0f0b\\u0f58\\u0f0b_\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b_\\u0f58\\u0f72\\u0f42\\u0f0b\\u0f51\\u0f58\\u0f62\\u0f0b_\\u0f63\\u0fb7\\u0f42\\u0f0b\\u0f54\\u0f0b_\\u0f55\\u0f74\\u0f62\\u0f0b\\u0f56\\u0f74_\\u0f54\\u0f0b\\u0f66\\u0f44\\u0f66\\u0f0b_\\u0f66\\u0fa4\\u0f7a\\u0f53\\u0f0b\\u0f54\\u0f0b\".split(\"_\"),weekdaysMin:\"\\u0f49\\u0f72_\\u0f5f\\u0fb3_\\u0f58\\u0f72\\u0f42_\\u0f63\\u0fb7\\u0f42_\\u0f55\\u0f74\\u0f62_\\u0f66\\u0f44\\u0f66_\\u0f66\\u0fa4\\u0f7a\\u0f53\".split(\"_\"),longDateFormat:{LT:\"A h:mm\",LTS:\"A h:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm\",LLLL:\"dddd, D MMMM YYYY, A h:mm\"},calendar:{sameDay:\"[\\u0f51\\u0f72\\u0f0b\\u0f62\\u0f72\\u0f44] LT\",nextDay:\"[\\u0f66\\u0f44\\u0f0b\\u0f49\\u0f72\\u0f53] LT\",nextWeek:\"[\\u0f56\\u0f51\\u0f74\\u0f53\\u0f0b\\u0f55\\u0fb2\\u0f42\\u0f0b\\u0f62\\u0f97\\u0f7a\\u0f66\\u0f0b\\u0f58], LT\",lastDay:\"[\\u0f41\\u0f0b\\u0f66\\u0f44] LT\",lastWeek:\"[\\u0f56\\u0f51\\u0f74\\u0f53\\u0f0b\\u0f55\\u0fb2\\u0f42\\u0f0b\\u0f58\\u0f50\\u0f60\\u0f0b\\u0f58] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s \\u0f63\\u0f0b\",past:\"%s \\u0f66\\u0f94\\u0f53\\u0f0b\\u0f63\",s:\"\\u0f63\\u0f58\\u0f0b\\u0f66\\u0f44\",ss:\"%d \\u0f66\\u0f90\\u0f62\\u0f0b\\u0f46\\u0f0d\",m:\"\\u0f66\\u0f90\\u0f62\\u0f0b\\u0f58\\u0f0b\\u0f42\\u0f45\\u0f72\\u0f42\",mm:\"%d \\u0f66\\u0f90\\u0f62\\u0f0b\\u0f58\",h:\"\\u0f46\\u0f74\\u0f0b\\u0f5a\\u0f7c\\u0f51\\u0f0b\\u0f42\\u0f45\\u0f72\\u0f42\",hh:\"%d \\u0f46\\u0f74\\u0f0b\\u0f5a\\u0f7c\\u0f51\",d:\"\\u0f49\\u0f72\\u0f53\\u0f0b\\u0f42\\u0f45\\u0f72\\u0f42\",dd:\"%d \\u0f49\\u0f72\\u0f53\\u0f0b\",M:\"\\u0f5f\\u0fb3\\u0f0b\\u0f56\\u0f0b\\u0f42\\u0f45\\u0f72\\u0f42\",MM:\"%d \\u0f5f\\u0fb3\\u0f0b\\u0f56\",y:\"\\u0f63\\u0f7c\\u0f0b\\u0f42\\u0f45\\u0f72\\u0f42\",yy:\"%d \\u0f63\\u0f7c\"},preparse:function(t){return t.replace(/[\\u0f21\\u0f22\\u0f23\\u0f24\\u0f25\\u0f26\\u0f27\\u0f28\\u0f29\\u0f20]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\\d/g,(function(t){return e[t]}))},meridiemParse:/\\u0f58\\u0f5a\\u0f53\\u0f0b\\u0f58\\u0f7c|\\u0f5e\\u0f7c\\u0f42\\u0f66\\u0f0b\\u0f40\\u0f66|\\u0f49\\u0f72\\u0f53\\u0f0b\\u0f42\\u0f74\\u0f44|\\u0f51\\u0f42\\u0f7c\\u0f44\\u0f0b\\u0f51\\u0f42|\\u0f58\\u0f5a\\u0f53\\u0f0b\\u0f58\\u0f7c/,meridiemHour:function(t,e){return 12===t&&(t=0),\"\\u0f58\\u0f5a\\u0f53\\u0f0b\\u0f58\\u0f7c\"===e&&t>=4||\"\\u0f49\\u0f72\\u0f53\\u0f0b\\u0f42\\u0f74\\u0f44\"===e&&t<5||\"\\u0f51\\u0f42\\u0f7c\\u0f44\\u0f0b\\u0f51\\u0f42\"===e?t+12:t},meridiem:function(t,e,n){return t<4?\"\\u0f58\\u0f5a\\u0f53\\u0f0b\\u0f58\\u0f7c\":t<10?\"\\u0f5e\\u0f7c\\u0f42\\u0f66\\u0f0b\\u0f40\\u0f66\":t<17?\"\\u0f49\\u0f72\\u0f53\\u0f0b\\u0f42\\u0f74\\u0f44\":t<20?\"\\u0f51\\u0f42\\u0f7c\\u0f44\\u0f0b\\u0f51\\u0f42\":\"\\u0f58\\u0f5a\\u0f53\\u0f0b\\u0f58\\u0f7c\"},week:{dow:0,doy:6}})}(n(\"wd/R\"))},\"0tRk\":function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"pt-br\",{months:\"janeiro_fevereiro_mar\\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro\".split(\"_\"),monthsShort:\"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez\".split(\"_\"),weekdays:\"domingo_segunda-feira_ter\\xe7a-feira_quarta-feira_quinta-feira_sexta-feira_s\\xe1bado\".split(\"_\"),weekdaysShort:\"dom_seg_ter_qua_qui_sex_s\\xe1b\".split(\"_\"),weekdaysMin:\"do_2\\xaa_3\\xaa_4\\xaa_5\\xaa_6\\xaa_s\\xe1\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY [\\xe0s] HH:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY [\\xe0s] HH:mm\"},calendar:{sameDay:\"[Hoje \\xe0s] LT\",nextDay:\"[Amanh\\xe3 \\xe0s] LT\",nextWeek:\"dddd [\\xe0s] LT\",lastDay:\"[Ontem \\xe0s] LT\",lastWeek:function(){return 0===this.day()||6===this.day()?\"[\\xdaltimo] dddd [\\xe0s] LT\":\"[\\xdaltima] dddd [\\xe0s] LT\"},sameElse:\"L\"},relativeTime:{future:\"em %s\",past:\"h\\xe1 %s\",s:\"poucos segundos\",ss:\"%d segundos\",m:\"um minuto\",mm:\"%d minutos\",h:\"uma hora\",hh:\"%d horas\",d:\"um dia\",dd:\"%d dias\",M:\"um m\\xeas\",MM:\"%d meses\",y:\"um ano\",yy:\"%d anos\"},dayOfMonthOrdinalParse:/\\d{1,2}\\xba/,ordinal:\"%d\\xba\",invalidDate:\"Data inv\\xe1lida\"})}(n(\"wd/R\"))},\"1G5W\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));var r=n(\"zx2A\");function i(t){return e=>e.lift(new a(t))}class a{constructor(t){this.notifier=t}call(t,e){const n=new o(t),i=Object(r.c)(this.notifier,new r.a(n));return i&&!n.seenValue?(n.add(i),e.subscribe(n)):n}}class o extends r.b{constructor(t){super(t),this.seenValue=!1}notifyNext(){this.seenValue=!0,this.complete()}notifyComplete(){}}},\"1jcm\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return x})),n.d(e,\"b\",(function(){return k}));var r=n(\"GU7r\"),i=n(\"fXoL\"),a=n(\"FKr1\"),o=n(\"8LU1\"),s=n(\"3Pt+\"),l=n(\"R1ws\"),c=n(\"u47x\");const u=[\"thumbContainer\"],h=[\"toggleBar\"],d=[\"input\"],f=function(){return{enterDuration:150}},p=[\"*\"],m=new i.w(\"mat-slide-toggle-default-options\",{providedIn:\"root\",factory:()=>({disableToggleValue:!1})});let g=0;const y={provide:s.l,useExisting:Object(i.db)(()=>x),multi:!0};class v{constructor(t,e){this.source=t,this.checked=e}}class _{constructor(t){this._elementRef=t}}const b=Object(a.B)(Object(a.w)(Object(a.x)(Object(a.y)(_)),\"accent\"));let x=(()=>{class t extends b{constructor(t,e,n,r,a,o){super(t),this._focusMonitor=e,this._changeDetectorRef=n,this.defaults=a,this._animationMode=o,this._onChange=t=>{},this._onTouched=()=>{},this._uniqueId=\"mat-slide-toggle-\"+ ++g,this._required=!1,this._checked=!1,this.name=null,this.id=this._uniqueId,this.labelPosition=\"after\",this.ariaLabel=null,this.ariaLabelledby=null,this.change=new i.s,this.toggleChange=new i.s,this.tabIndex=parseInt(r)||0}get required(){return this._required}set required(t){this._required=Object(o.c)(t)}get checked(){return this._checked}set checked(t){this._checked=Object(o.c)(t),this._changeDetectorRef.markForCheck()}get inputId(){return(this.id||this._uniqueId)+\"-input\"}ngAfterContentInit(){this._focusMonitor.monitor(this._elementRef,!0).subscribe(t=>{\"keyboard\"===t||\"program\"===t?this._inputElement.nativeElement.focus():t||Promise.resolve().then(()=>this._onTouched())})}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef)}_onChangeEvent(t){t.stopPropagation(),this.toggleChange.emit(),this.defaults.disableToggleValue?this._inputElement.nativeElement.checked=this.checked:(this.checked=this._inputElement.nativeElement.checked,this._emitChangeEvent())}_onInputClick(t){t.stopPropagation()}writeValue(t){this.checked=!!t}registerOnChange(t){this._onChange=t}registerOnTouched(t){this._onTouched=t}setDisabledState(t){this.disabled=t,this._changeDetectorRef.markForCheck()}focus(t,e){e?this._focusMonitor.focusVia(this._inputElement,e,t):this._inputElement.nativeElement.focus(t)}toggle(){this.checked=!this.checked,this._onChange(this.checked)}_emitChangeEvent(){this._onChange(this.checked),this.change.emit(new v(this,this.checked))}_onLabelTextChange(){this._changeDetectorRef.detectChanges()}}return t.\\u0275fac=function(e){return new(e||t)(i.Xb(i.p),i.Xb(c.h),i.Xb(i.j),i.ic(\"tabindex\"),i.Xb(m),i.Xb(l.a,8))},t.\\u0275cmp=i.Rb({type:t,selectors:[[\"mat-slide-toggle\"]],viewQuery:function(t,e){if(1&t&&(i.Sc(u,!0),i.Sc(h,!0),i.Sc(d,!0)),2&t){let t;i.Ac(t=i.mc())&&(e._thumbEl=t.first),i.Ac(t=i.mc())&&(e._thumbBarEl=t.first),i.Ac(t=i.mc())&&(e._inputElement=t.first)}},hostAttrs:[1,\"mat-slide-toggle\"],hostVars:12,hostBindings:function(t,e){2&t&&(i.gc(\"id\",e.id),i.Mb(\"tabindex\",e.disabled?null:-1)(\"aria-label\",null)(\"aria-labelledby\",null),i.Pb(\"mat-checked\",e.checked)(\"mat-disabled\",e.disabled)(\"mat-slide-toggle-label-before\",\"before\"==e.labelPosition)(\"_mat-animation-noopable\",\"NoopAnimations\"===e._animationMode))},inputs:{disabled:\"disabled\",disableRipple:\"disableRipple\",color:\"color\",tabIndex:\"tabIndex\",name:\"name\",id:\"id\",labelPosition:\"labelPosition\",ariaLabel:[\"aria-label\",\"ariaLabel\"],ariaLabelledby:[\"aria-labelledby\",\"ariaLabelledby\"],required:\"required\",checked:\"checked\"},outputs:{change:\"change\",toggleChange:\"toggleChange\"},exportAs:[\"matSlideToggle\"],features:[i.Kb([y]),i.Ib],ngContentSelectors:p,decls:16,vars:18,consts:[[1,\"mat-slide-toggle-label\"],[\"label\",\"\"],[1,\"mat-slide-toggle-bar\"],[\"toggleBar\",\"\"],[\"type\",\"checkbox\",\"role\",\"switch\",1,\"mat-slide-toggle-input\",\"cdk-visually-hidden\",3,\"id\",\"required\",\"tabIndex\",\"checked\",\"disabled\",\"change\",\"click\"],[\"input\",\"\"],[1,\"mat-slide-toggle-thumb-container\"],[\"thumbContainer\",\"\"],[1,\"mat-slide-toggle-thumb\"],[\"mat-ripple\",\"\",1,\"mat-slide-toggle-ripple\",\"mat-focus-indicator\",3,\"matRippleTrigger\",\"matRippleDisabled\",\"matRippleCentered\",\"matRippleRadius\",\"matRippleAnimation\"],[1,\"mat-ripple-element\",\"mat-slide-toggle-persistent-ripple\"],[1,\"mat-slide-toggle-content\",3,\"cdkObserveContent\"],[\"labelContent\",\"\"],[2,\"display\",\"none\"]],template:function(t,e){if(1&t&&(i.uc(),i.dc(0,\"label\",0,1),i.dc(2,\"div\",2,3),i.dc(4,\"input\",4,5),i.lc(\"change\",(function(t){return e._onChangeEvent(t)}))(\"click\",(function(t){return e._onInputClick(t)})),i.cc(),i.dc(6,\"div\",6,7),i.Yb(8,\"div\",8),i.dc(9,\"div\",9),i.Yb(10,\"div\",10),i.cc(),i.cc(),i.cc(),i.dc(11,\"span\",11,12),i.lc(\"cdkObserveContent\",(function(){return e._onLabelTextChange()})),i.dc(13,\"span\",13),i.Oc(14,\"\\xa0\"),i.cc(),i.tc(15),i.cc(),i.cc()),2&t){const t=i.Bc(1),n=i.Bc(12);i.Mb(\"for\",e.inputId),i.Lb(2),i.Pb(\"mat-slide-toggle-bar-no-side-margin\",!n.textContent||!n.textContent.trim()),i.Lb(2),i.vc(\"id\",e.inputId)(\"required\",e.required)(\"tabIndex\",e.tabIndex)(\"checked\",e.checked)(\"disabled\",e.disabled),i.Mb(\"name\",e.name)(\"aria-checked\",e.checked.toString())(\"aria-label\",e.ariaLabel)(\"aria-labelledby\",e.ariaLabelledby),i.Lb(5),i.vc(\"matRippleTrigger\",t)(\"matRippleDisabled\",e.disableRipple||e.disabled)(\"matRippleCentered\",!0)(\"matRippleRadius\",20)(\"matRippleAnimation\",i.xc(17,f))}},directives:[a.r,r.a],styles:[\".mat-slide-toggle{display:inline-block;height:24px;max-width:100%;line-height:24px;white-space:nowrap;outline:none;-webkit-tap-highlight-color:transparent}.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(16px, 0, 0)}[dir=rtl] .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(-16px, 0, 0)}.mat-slide-toggle.mat-disabled{opacity:.38}.mat-slide-toggle.mat-disabled .mat-slide-toggle-label,.mat-slide-toggle.mat-disabled .mat-slide-toggle-thumb-container{cursor:default}.mat-slide-toggle-label{display:flex;flex:1;flex-direction:row;align-items:center;height:inherit;cursor:pointer}.mat-slide-toggle-content{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-slide-toggle-label-before .mat-slide-toggle-label{order:1}.mat-slide-toggle-label-before .mat-slide-toggle-bar{order:2}[dir=rtl] .mat-slide-toggle-label-before .mat-slide-toggle-bar,.mat-slide-toggle-bar{margin-right:8px;margin-left:0}[dir=rtl] .mat-slide-toggle-bar,.mat-slide-toggle-label-before .mat-slide-toggle-bar{margin-left:8px;margin-right:0}.mat-slide-toggle-bar-no-side-margin{margin-left:0;margin-right:0}.mat-slide-toggle-thumb-container{position:absolute;z-index:1;width:20px;height:20px;top:-3px;left:0;transform:translate3d(0, 0, 0);transition:all 80ms linear;transition-property:transform}._mat-animation-noopable .mat-slide-toggle-thumb-container{transition:none}[dir=rtl] .mat-slide-toggle-thumb-container{left:auto;right:0}.mat-slide-toggle-thumb{height:20px;width:20px;border-radius:50%}.mat-slide-toggle-bar{position:relative;width:36px;height:14px;flex-shrink:0;border-radius:8px}.mat-slide-toggle-input{bottom:0;left:10px}[dir=rtl] .mat-slide-toggle-input{left:auto;right:10px}.mat-slide-toggle-bar,.mat-slide-toggle-thumb{transition:all 80ms linear;transition-property:background-color;transition-delay:50ms}._mat-animation-noopable .mat-slide-toggle-bar,._mat-animation-noopable .mat-slide-toggle-thumb{transition:none}.mat-slide-toggle .mat-slide-toggle-ripple{position:absolute;top:calc(50% - 20px);left:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}.mat-slide-toggle .mat-slide-toggle-ripple .mat-ripple-element:not(.mat-slide-toggle-persistent-ripple){opacity:.12}.mat-slide-toggle-persistent-ripple{width:100%;height:100%;transform:none}.mat-slide-toggle-bar:hover .mat-slide-toggle-persistent-ripple{opacity:.04}.mat-slide-toggle:not(.mat-disabled).cdk-keyboard-focused .mat-slide-toggle-persistent-ripple{opacity:.12}.mat-slide-toggle-persistent-ripple,.mat-slide-toggle.mat-disabled .mat-slide-toggle-bar:hover .mat-slide-toggle-persistent-ripple{opacity:0}@media(hover: none){.mat-slide-toggle-bar:hover .mat-slide-toggle-persistent-ripple{display:none}}.cdk-high-contrast-active .mat-slide-toggle-thumb,.cdk-high-contrast-active .mat-slide-toggle-bar{border:1px solid}.cdk-high-contrast-active .mat-slide-toggle.cdk-keyboard-focused .mat-slide-toggle-bar{outline:2px dotted;outline-offset:5px}\\n\"],encapsulation:2,changeDetection:0}),t})(),w=(()=>{class t{}return t.\\u0275mod=i.Vb({type:t}),t.\\u0275inj=i.Ub({factory:function(e){return new(e||t)}}),t})(),k=(()=>{class t{}return t.\\u0275mod=i.Vb({type:t}),t.\\u0275inj=i.Ub({factory:function(e){return new(e||t)},imports:[[w,a.s,a.i,r.c],w,a.i]}),t})()},\"1ppg\":function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"fil\",{months:\"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre\".split(\"_\"),monthsShort:\"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis\".split(\"_\"),weekdays:\"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado\".split(\"_\"),weekdaysShort:\"Lin_Lun_Mar_Miy_Huw_Biy_Sab\".split(\"_\"),weekdaysMin:\"Li_Lu_Ma_Mi_Hu_Bi_Sab\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"MM/D/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY HH:mm\",LLLL:\"dddd, MMMM DD, YYYY HH:mm\"},calendar:{sameDay:\"LT [ngayong araw]\",nextDay:\"[Bukas ng] LT\",nextWeek:\"LT [sa susunod na] dddd\",lastDay:\"LT [kahapon]\",lastWeek:\"LT [noong nakaraang] dddd\",sameElse:\"L\"},relativeTime:{future:\"sa loob ng %s\",past:\"%s ang nakalipas\",s:\"ilang segundo\",ss:\"%d segundo\",m:\"isang minuto\",mm:\"%d minuto\",h:\"isang oras\",hh:\"%d oras\",d:\"isang araw\",dd:\"%d araw\",M:\"isang buwan\",MM:\"%d buwan\",y:\"isang taon\",yy:\"%d taon\"},dayOfMonthOrdinalParse:/\\d{1,2}/,ordinal:function(t){return t},week:{dow:1,doy:4}})}(n(\"wd/R\"))},\"1rYy\":function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"hy-am\",{months:{format:\"\\u0570\\u0578\\u0582\\u0576\\u057e\\u0561\\u0580\\u056b_\\u0583\\u0565\\u057f\\u0580\\u057e\\u0561\\u0580\\u056b_\\u0574\\u0561\\u0580\\u057f\\u056b_\\u0561\\u057a\\u0580\\u056b\\u056c\\u056b_\\u0574\\u0561\\u0575\\u056b\\u057d\\u056b_\\u0570\\u0578\\u0582\\u0576\\u056b\\u057d\\u056b_\\u0570\\u0578\\u0582\\u056c\\u056b\\u057d\\u056b_\\u0585\\u0563\\u0578\\u057d\\u057f\\u0578\\u057d\\u056b_\\u057d\\u0565\\u057a\\u057f\\u0565\\u0574\\u0562\\u0565\\u0580\\u056b_\\u0570\\u0578\\u056f\\u057f\\u0565\\u0574\\u0562\\u0565\\u0580\\u056b_\\u0576\\u0578\\u0575\\u0565\\u0574\\u0562\\u0565\\u0580\\u056b_\\u0564\\u0565\\u056f\\u057f\\u0565\\u0574\\u0562\\u0565\\u0580\\u056b\".split(\"_\"),standalone:\"\\u0570\\u0578\\u0582\\u0576\\u057e\\u0561\\u0580_\\u0583\\u0565\\u057f\\u0580\\u057e\\u0561\\u0580_\\u0574\\u0561\\u0580\\u057f_\\u0561\\u057a\\u0580\\u056b\\u056c_\\u0574\\u0561\\u0575\\u056b\\u057d_\\u0570\\u0578\\u0582\\u0576\\u056b\\u057d_\\u0570\\u0578\\u0582\\u056c\\u056b\\u057d_\\u0585\\u0563\\u0578\\u057d\\u057f\\u0578\\u057d_\\u057d\\u0565\\u057a\\u057f\\u0565\\u0574\\u0562\\u0565\\u0580_\\u0570\\u0578\\u056f\\u057f\\u0565\\u0574\\u0562\\u0565\\u0580_\\u0576\\u0578\\u0575\\u0565\\u0574\\u0562\\u0565\\u0580_\\u0564\\u0565\\u056f\\u057f\\u0565\\u0574\\u0562\\u0565\\u0580\".split(\"_\")},monthsShort:\"\\u0570\\u0576\\u057e_\\u0583\\u057f\\u0580_\\u0574\\u0580\\u057f_\\u0561\\u057a\\u0580_\\u0574\\u0575\\u057d_\\u0570\\u0576\\u057d_\\u0570\\u056c\\u057d_\\u0585\\u0563\\u057d_\\u057d\\u057a\\u057f_\\u0570\\u056f\\u057f_\\u0576\\u0574\\u0562_\\u0564\\u056f\\u057f\".split(\"_\"),weekdays:\"\\u056f\\u056b\\u0580\\u0561\\u056f\\u056b_\\u0565\\u0580\\u056f\\u0578\\u0582\\u0577\\u0561\\u0562\\u0569\\u056b_\\u0565\\u0580\\u0565\\u0584\\u0577\\u0561\\u0562\\u0569\\u056b_\\u0579\\u0578\\u0580\\u0565\\u0584\\u0577\\u0561\\u0562\\u0569\\u056b_\\u0570\\u056b\\u0576\\u0563\\u0577\\u0561\\u0562\\u0569\\u056b_\\u0578\\u0582\\u0580\\u0562\\u0561\\u0569_\\u0577\\u0561\\u0562\\u0561\\u0569\".split(\"_\"),weekdaysShort:\"\\u056f\\u0580\\u056f_\\u0565\\u0580\\u056f_\\u0565\\u0580\\u0584_\\u0579\\u0580\\u0584_\\u0570\\u0576\\u0563_\\u0578\\u0582\\u0580\\u0562_\\u0577\\u0562\\u0569\".split(\"_\"),weekdaysMin:\"\\u056f\\u0580\\u056f_\\u0565\\u0580\\u056f_\\u0565\\u0580\\u0584_\\u0579\\u0580\\u0584_\\u0570\\u0576\\u0563_\\u0578\\u0582\\u0580\\u0562_\\u0577\\u0562\\u0569\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY \\u0569.\",LLL:\"D MMMM YYYY \\u0569., HH:mm\",LLLL:\"dddd, D MMMM YYYY \\u0569., HH:mm\"},calendar:{sameDay:\"[\\u0561\\u0575\\u057d\\u0585\\u0580] LT\",nextDay:\"[\\u057e\\u0561\\u0572\\u0568] LT\",lastDay:\"[\\u0565\\u0580\\u0565\\u056f] LT\",nextWeek:function(){return\"dddd [\\u0585\\u0580\\u0568 \\u056a\\u0561\\u0574\\u0568] LT\"},lastWeek:function(){return\"[\\u0561\\u0576\\u0581\\u0561\\u056e] dddd [\\u0585\\u0580\\u0568 \\u056a\\u0561\\u0574\\u0568] LT\"},sameElse:\"L\"},relativeTime:{future:\"%s \\u0570\\u0565\\u057f\\u0578\",past:\"%s \\u0561\\u057c\\u0561\\u057b\",s:\"\\u0574\\u056b \\u0584\\u0561\\u0576\\u056b \\u057e\\u0561\\u0575\\u0580\\u056f\\u0575\\u0561\\u0576\",ss:\"%d \\u057e\\u0561\\u0575\\u0580\\u056f\\u0575\\u0561\\u0576\",m:\"\\u0580\\u0578\\u057a\\u0565\",mm:\"%d \\u0580\\u0578\\u057a\\u0565\",h:\"\\u056a\\u0561\\u0574\",hh:\"%d \\u056a\\u0561\\u0574\",d:\"\\u0585\\u0580\",dd:\"%d \\u0585\\u0580\",M:\"\\u0561\\u0574\\u056b\\u057d\",MM:\"%d \\u0561\\u0574\\u056b\\u057d\",y:\"\\u057f\\u0561\\u0580\\u056b\",yy:\"%d \\u057f\\u0561\\u0580\\u056b\"},meridiemParse:/\\u0563\\u056b\\u0577\\u0565\\u0580\\u057e\\u0561|\\u0561\\u057c\\u0561\\u057e\\u0578\\u057f\\u057e\\u0561|\\u0581\\u0565\\u0580\\u0565\\u056f\\u057e\\u0561|\\u0565\\u0580\\u0565\\u056f\\u0578\\u0575\\u0561\\u0576/,isPM:function(t){return/^(\\u0581\\u0565\\u0580\\u0565\\u056f\\u057e\\u0561|\\u0565\\u0580\\u0565\\u056f\\u0578\\u0575\\u0561\\u0576)$/.test(t)},meridiem:function(t){return t<4?\"\\u0563\\u056b\\u0577\\u0565\\u0580\\u057e\\u0561\":t<12?\"\\u0561\\u057c\\u0561\\u057e\\u0578\\u057f\\u057e\\u0561\":t<17?\"\\u0581\\u0565\\u0580\\u0565\\u056f\\u057e\\u0561\":\"\\u0565\\u0580\\u0565\\u056f\\u0578\\u0575\\u0561\\u0576\"},dayOfMonthOrdinalParse:/\\d{1,2}|\\d{1,2}-(\\u056b\\u0576|\\u0580\\u0564)/,ordinal:function(t,e){switch(e){case\"DDD\":case\"w\":case\"W\":case\"DDDo\":return 1===t?t+\"-\\u056b\\u0576\":t+\"-\\u0580\\u0564\";default:return t}},week:{dow:1,doy:7}})}(n(\"wd/R\"))},\"1xZ4\":function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"ca\",{months:{standalone:\"gener_febrer_mar\\xe7_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre\".split(\"_\"),format:\"de gener_de febrer_de mar\\xe7_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre\".split(\"_\"),isFormat:/D[oD]?(\\s)+MMMM/},monthsShort:\"gen._febr._mar\\xe7_abr._maig_juny_jul._ag._set._oct._nov._des.\".split(\"_\"),monthsParseExact:!0,weekdays:\"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte\".split(\"_\"),weekdaysShort:\"dg._dl._dt._dc._dj._dv._ds.\".split(\"_\"),weekdaysMin:\"dg_dl_dt_dc_dj_dv_ds\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM [de] YYYY\",ll:\"D MMM YYYY\",LLL:\"D MMMM [de] YYYY [a les] H:mm\",lll:\"D MMM YYYY, H:mm\",LLLL:\"dddd D MMMM [de] YYYY [a les] H:mm\",llll:\"ddd D MMM YYYY, H:mm\"},calendar:{sameDay:function(){return\"[avui a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},nextDay:function(){return\"[dem\\xe0 a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},nextWeek:function(){return\"dddd [a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},lastDay:function(){return\"[ahir a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [passat a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"d'aqu\\xed %s\",past:\"fa %s\",s:\"uns segons\",ss:\"%d segons\",m:\"un minut\",mm:\"%d minuts\",h:\"una hora\",hh:\"%d hores\",d:\"un dia\",dd:\"%d dies\",M:\"un mes\",MM:\"%d mesos\",y:\"un any\",yy:\"%d anys\"},dayOfMonthOrdinalParse:/\\d{1,2}(r|n|t|\\xe8|a)/,ordinal:function(t,e){var n=1===t?\"r\":2===t?\"n\":3===t?\"r\":4===t?\"t\":\"\\xe8\";return\"w\"!==e&&\"W\"!==e||(n=\"a\"),t+n},week:{dow:1,doy:4}})}(n(\"wd/R\"))},\"2QA8\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return r}));const r=(()=>\"function\"==typeof Symbol?Symbol(\"rxSubscriber\"):\"@@rxSubscriber_\"+Math.random())()},\"2Vo4\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return a}));var r=n(\"XNiG\"),i=n(\"9ppp\");class a extends r.a{constructor(t){super(),this._value=t}get value(){return this.getValue()}_subscribe(t){const e=super._subscribe(t);return e&&!e.closed&&t.next(this._value),e}getValue(){if(this.hasError)throw this.thrownError;if(this.closed)throw new i.a;return this._value}next(t){super.next(this._value=t)}}},\"2fFW\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));let r=!1;const i={Promise:void 0,set useDeprecatedSynchronousErrorHandling(t){if(t){const t=new Error;console.warn(\"DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \\n\"+t.stack)}else r&&console.log(\"RxJS: Back to a better error behavior. Thank you. <3\");r=t},get useDeprecatedSynchronousErrorHandling(){return r}}},\"2fjn\":function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"fr-ca\",{months:\"janvier_f\\xe9vrier_mars_avril_mai_juin_juillet_ao\\xfbt_septembre_octobre_novembre_d\\xe9cembre\".split(\"_\"),monthsShort:\"janv._f\\xe9vr._mars_avr._mai_juin_juil._ao\\xfbt_sept._oct._nov._d\\xe9c.\".split(\"_\"),monthsParseExact:!0,weekdays:\"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\".split(\"_\"),weekdaysShort:\"dim._lun._mar._mer._jeu._ven._sam.\".split(\"_\"),weekdaysMin:\"di_lu_ma_me_je_ve_sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Aujourd\\u2019hui \\xe0] LT\",nextDay:\"[Demain \\xe0] LT\",nextWeek:\"dddd [\\xe0] LT\",lastDay:\"[Hier \\xe0] LT\",lastWeek:\"dddd [dernier \\xe0] LT\",sameElse:\"L\"},relativeTime:{future:\"dans %s\",past:\"il y a %s\",s:\"quelques secondes\",ss:\"%d secondes\",m:\"une minute\",mm:\"%d minutes\",h:\"une heure\",hh:\"%d heures\",d:\"un jour\",dd:\"%d jours\",M:\"un mois\",MM:\"%d mois\",y:\"un an\",yy:\"%d ans\"},dayOfMonthOrdinalParse:/\\d{1,2}(er|e)/,ordinal:function(t,e){switch(e){default:case\"M\":case\"Q\":case\"D\":case\"DDD\":case\"d\":return t+(1===t?\"er\":\"e\");case\"w\":case\"W\":return t+(1===t?\"re\":\"e\")}}})}(n(\"wd/R\"))},\"2ykv\":function(t,e,n){!function(t){\"use strict\";var e=\"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.\".split(\"_\"),n=\"jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),r=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],i=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;t.defineLocale(\"nl-be\",{months:\"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december\".split(\"_\"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:\"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag\".split(\"_\"),weekdaysShort:\"zo._ma._di._wo._do._vr._za.\".split(\"_\"),weekdaysMin:\"zo_ma_di_wo_do_vr_za\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[vandaag om] LT\",nextDay:\"[morgen om] LT\",nextWeek:\"dddd [om] LT\",lastDay:\"[gisteren om] LT\",lastWeek:\"[afgelopen] dddd [om] LT\",sameElse:\"L\"},relativeTime:{future:\"over %s\",past:\"%s geleden\",s:\"een paar seconden\",ss:\"%d seconden\",m:\"\\xe9\\xe9n minuut\",mm:\"%d minuten\",h:\"\\xe9\\xe9n uur\",hh:\"%d uur\",d:\"\\xe9\\xe9n dag\",dd:\"%d dagen\",M:\"\\xe9\\xe9n maand\",MM:\"%d maanden\",y:\"\\xe9\\xe9n jaar\",yy:\"%d jaar\"},dayOfMonthOrdinalParse:/\\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?\"ste\":\"de\")},week:{dow:1,doy:4}})}(n(\"wd/R\"))},\"3E0/\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return o}));var r=n(\"D0XW\"),i=n(\"7o/Q\"),a=n(\"WMd4\");function o(t,e=r.a){var n;const i=(n=t)instanceof Date&&!isNaN(+n)?+t-e.now():Math.abs(t);return t=>t.lift(new s(i,e))}class s{constructor(t,e){this.delay=t,this.scheduler=e}call(t,e){return e.subscribe(new l(t,this.delay,this.scheduler))}}class l extends i.a{constructor(t,e,n){super(t),this.delay=e,this.scheduler=n,this.queue=[],this.active=!1,this.errored=!1}static dispatch(t){const e=t.source,n=e.queue,r=t.scheduler,i=t.destination;for(;n.length>0&&n[0].time-r.now()<=0;)n.shift().notification.observe(i);if(n.length>0){const e=Math.max(0,n[0].time-r.now());this.schedule(t,e)}else this.unsubscribe(),e.active=!1}_schedule(t){this.active=!0,this.destination.add(t.schedule(l.dispatch,this.delay,{source:this,destination:this.destination,scheduler:t}))}scheduleNotification(t){if(!0===this.errored)return;const e=this.scheduler,n=new c(e.now()+this.delay,t);this.queue.push(n),!1===this.active&&this._schedule(e)}_next(t){this.scheduleNotification(a.a.createNext(t))}_error(t){this.errored=!0,this.queue=[],this.destination.error(t),this.unsubscribe()}_complete(){this.scheduleNotification(a.a.createComplete()),this.unsubscribe()}}class c{constructor(t,e){this.time=t,this.notification=e}}},\"3E1r\":function(t,e,n){!function(t){\"use strict\";var e={1:\"\\u0967\",2:\"\\u0968\",3:\"\\u0969\",4:\"\\u096a\",5:\"\\u096b\",6:\"\\u096c\",7:\"\\u096d\",8:\"\\u096e\",9:\"\\u096f\",0:\"\\u0966\"},n={\"\\u0967\":\"1\",\"\\u0968\":\"2\",\"\\u0969\":\"3\",\"\\u096a\":\"4\",\"\\u096b\":\"5\",\"\\u096c\":\"6\",\"\\u096d\":\"7\",\"\\u096e\":\"8\",\"\\u096f\":\"9\",\"\\u0966\":\"0\"},r=[/^\\u091c\\u0928/i,/^\\u092b\\u093c\\u0930|\\u092b\\u0930/i,/^\\u092e\\u093e\\u0930\\u094d\\u091a/i,/^\\u0905\\u092a\\u094d\\u0930\\u0948/i,/^\\u092e\\u0908/i,/^\\u091c\\u0942\\u0928/i,/^\\u091c\\u0941\\u0932/i,/^\\u0905\\u0917/i,/^\\u0938\\u093f\\u0924\\u0902|\\u0938\\u093f\\u0924/i,/^\\u0905\\u0915\\u094d\\u091f\\u0942/i,/^\\u0928\\u0935|\\u0928\\u0935\\u0902/i,/^\\u0926\\u093f\\u0938\\u0902|\\u0926\\u093f\\u0938/i];t.defineLocale(\"hi\",{months:{format:\"\\u091c\\u0928\\u0935\\u0930\\u0940_\\u092b\\u093c\\u0930\\u0935\\u0930\\u0940_\\u092e\\u093e\\u0930\\u094d\\u091a_\\u0905\\u092a\\u094d\\u0930\\u0948\\u0932_\\u092e\\u0908_\\u091c\\u0942\\u0928_\\u091c\\u0941\\u0932\\u093e\\u0908_\\u0905\\u0917\\u0938\\u094d\\u0924_\\u0938\\u093f\\u0924\\u092e\\u094d\\u092c\\u0930_\\u0905\\u0915\\u094d\\u091f\\u0942\\u092c\\u0930_\\u0928\\u0935\\u092e\\u094d\\u092c\\u0930_\\u0926\\u093f\\u0938\\u092e\\u094d\\u092c\\u0930\".split(\"_\"),standalone:\"\\u091c\\u0928\\u0935\\u0930\\u0940_\\u092b\\u0930\\u0935\\u0930\\u0940_\\u092e\\u093e\\u0930\\u094d\\u091a_\\u0905\\u092a\\u094d\\u0930\\u0948\\u0932_\\u092e\\u0908_\\u091c\\u0942\\u0928_\\u091c\\u0941\\u0932\\u093e\\u0908_\\u0905\\u0917\\u0938\\u094d\\u0924_\\u0938\\u093f\\u0924\\u0902\\u092c\\u0930_\\u0905\\u0915\\u094d\\u091f\\u0942\\u092c\\u0930_\\u0928\\u0935\\u0902\\u092c\\u0930_\\u0926\\u093f\\u0938\\u0902\\u092c\\u0930\".split(\"_\")},monthsShort:\"\\u091c\\u0928._\\u092b\\u093c\\u0930._\\u092e\\u093e\\u0930\\u094d\\u091a_\\u0905\\u092a\\u094d\\u0930\\u0948._\\u092e\\u0908_\\u091c\\u0942\\u0928_\\u091c\\u0941\\u0932._\\u0905\\u0917._\\u0938\\u093f\\u0924._\\u0905\\u0915\\u094d\\u091f\\u0942._\\u0928\\u0935._\\u0926\\u093f\\u0938.\".split(\"_\"),weekdays:\"\\u0930\\u0935\\u093f\\u0935\\u093e\\u0930_\\u0938\\u094b\\u092e\\u0935\\u093e\\u0930_\\u092e\\u0902\\u0917\\u0932\\u0935\\u093e\\u0930_\\u092c\\u0941\\u0927\\u0935\\u093e\\u0930_\\u0917\\u0941\\u0930\\u0942\\u0935\\u093e\\u0930_\\u0936\\u0941\\u0915\\u094d\\u0930\\u0935\\u093e\\u0930_\\u0936\\u0928\\u093f\\u0935\\u093e\\u0930\".split(\"_\"),weekdaysShort:\"\\u0930\\u0935\\u093f_\\u0938\\u094b\\u092e_\\u092e\\u0902\\u0917\\u0932_\\u092c\\u0941\\u0927_\\u0917\\u0941\\u0930\\u0942_\\u0936\\u0941\\u0915\\u094d\\u0930_\\u0936\\u0928\\u093f\".split(\"_\"),weekdaysMin:\"\\u0930_\\u0938\\u094b_\\u092e\\u0902_\\u092c\\u0941_\\u0917\\u0941_\\u0936\\u0941_\\u0936\".split(\"_\"),longDateFormat:{LT:\"A h:mm \\u092c\\u091c\\u0947\",LTS:\"A h:mm:ss \\u092c\\u091c\\u0947\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm \\u092c\\u091c\\u0947\",LLLL:\"dddd, D MMMM YYYY, A h:mm \\u092c\\u091c\\u0947\"},monthsParse:r,longMonthsParse:r,shortMonthsParse:[/^\\u091c\\u0928/i,/^\\u092b\\u093c\\u0930/i,/^\\u092e\\u093e\\u0930\\u094d\\u091a/i,/^\\u0905\\u092a\\u094d\\u0930\\u0948/i,/^\\u092e\\u0908/i,/^\\u091c\\u0942\\u0928/i,/^\\u091c\\u0941\\u0932/i,/^\\u0905\\u0917/i,/^\\u0938\\u093f\\u0924/i,/^\\u0905\\u0915\\u094d\\u091f\\u0942/i,/^\\u0928\\u0935/i,/^\\u0926\\u093f\\u0938/i],monthsRegex:/^(\\u091c\\u0928\\u0935\\u0930\\u0940|\\u091c\\u0928\\.?|\\u092b\\u093c\\u0930\\u0935\\u0930\\u0940|\\u092b\\u0930\\u0935\\u0930\\u0940|\\u092b\\u093c\\u0930\\.?|\\u092e\\u093e\\u0930\\u094d\\u091a?|\\u0905\\u092a\\u094d\\u0930\\u0948\\u0932|\\u0905\\u092a\\u094d\\u0930\\u0948\\.?|\\u092e\\u0908?|\\u091c\\u0942\\u0928?|\\u091c\\u0941\\u0932\\u093e\\u0908|\\u091c\\u0941\\u0932\\.?|\\u0905\\u0917\\u0938\\u094d\\u0924|\\u0905\\u0917\\.?|\\u0938\\u093f\\u0924\\u092e\\u094d\\u092c\\u0930|\\u0938\\u093f\\u0924\\u0902\\u092c\\u0930|\\u0938\\u093f\\u0924\\.?|\\u0905\\u0915\\u094d\\u091f\\u0942\\u092c\\u0930|\\u0905\\u0915\\u094d\\u091f\\u0942\\.?|\\u0928\\u0935\\u092e\\u094d\\u092c\\u0930|\\u0928\\u0935\\u0902\\u092c\\u0930|\\u0928\\u0935\\.?|\\u0926\\u093f\\u0938\\u092e\\u094d\\u092c\\u0930|\\u0926\\u093f\\u0938\\u0902\\u092c\\u0930|\\u0926\\u093f\\u0938\\.?)/i,monthsShortRegex:/^(\\u091c\\u0928\\u0935\\u0930\\u0940|\\u091c\\u0928\\.?|\\u092b\\u093c\\u0930\\u0935\\u0930\\u0940|\\u092b\\u0930\\u0935\\u0930\\u0940|\\u092b\\u093c\\u0930\\.?|\\u092e\\u093e\\u0930\\u094d\\u091a?|\\u0905\\u092a\\u094d\\u0930\\u0948\\u0932|\\u0905\\u092a\\u094d\\u0930\\u0948\\.?|\\u092e\\u0908?|\\u091c\\u0942\\u0928?|\\u091c\\u0941\\u0932\\u093e\\u0908|\\u091c\\u0941\\u0932\\.?|\\u0905\\u0917\\u0938\\u094d\\u0924|\\u0905\\u0917\\.?|\\u0938\\u093f\\u0924\\u092e\\u094d\\u092c\\u0930|\\u0938\\u093f\\u0924\\u0902\\u092c\\u0930|\\u0938\\u093f\\u0924\\.?|\\u0905\\u0915\\u094d\\u091f\\u0942\\u092c\\u0930|\\u0905\\u0915\\u094d\\u091f\\u0942\\.?|\\u0928\\u0935\\u092e\\u094d\\u092c\\u0930|\\u0928\\u0935\\u0902\\u092c\\u0930|\\u0928\\u0935\\.?|\\u0926\\u093f\\u0938\\u092e\\u094d\\u092c\\u0930|\\u0926\\u093f\\u0938\\u0902\\u092c\\u0930|\\u0926\\u093f\\u0938\\.?)/i,monthsStrictRegex:/^(\\u091c\\u0928\\u0935\\u0930\\u0940?|\\u092b\\u093c\\u0930\\u0935\\u0930\\u0940|\\u092b\\u0930\\u0935\\u0930\\u0940?|\\u092e\\u093e\\u0930\\u094d\\u091a?|\\u0905\\u092a\\u094d\\u0930\\u0948\\u0932?|\\u092e\\u0908?|\\u091c\\u0942\\u0928?|\\u091c\\u0941\\u0932\\u093e\\u0908?|\\u0905\\u0917\\u0938\\u094d\\u0924?|\\u0938\\u093f\\u0924\\u092e\\u094d\\u092c\\u0930|\\u0938\\u093f\\u0924\\u0902\\u092c\\u0930|\\u0938\\u093f\\u0924?\\.?|\\u0905\\u0915\\u094d\\u091f\\u0942\\u092c\\u0930|\\u0905\\u0915\\u094d\\u091f\\u0942\\.?|\\u0928\\u0935\\u092e\\u094d\\u092c\\u0930|\\u0928\\u0935\\u0902\\u092c\\u0930?|\\u0926\\u093f\\u0938\\u092e\\u094d\\u092c\\u0930|\\u0926\\u093f\\u0938\\u0902\\u092c\\u0930?)/i,monthsShortStrictRegex:/^(\\u091c\\u0928\\.?|\\u092b\\u093c\\u0930\\.?|\\u092e\\u093e\\u0930\\u094d\\u091a?|\\u0905\\u092a\\u094d\\u0930\\u0948\\.?|\\u092e\\u0908?|\\u091c\\u0942\\u0928?|\\u091c\\u0941\\u0932\\.?|\\u0905\\u0917\\.?|\\u0938\\u093f\\u0924\\.?|\\u0905\\u0915\\u094d\\u091f\\u0942\\.?|\\u0928\\u0935\\.?|\\u0926\\u093f\\u0938\\.?)/i,calendar:{sameDay:\"[\\u0906\\u091c] LT\",nextDay:\"[\\u0915\\u0932] LT\",nextWeek:\"dddd, LT\",lastDay:\"[\\u0915\\u0932] LT\",lastWeek:\"[\\u092a\\u093f\\u091b\\u0932\\u0947] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s \\u092e\\u0947\\u0902\",past:\"%s \\u092a\\u0939\\u0932\\u0947\",s:\"\\u0915\\u0941\\u091b \\u0939\\u0940 \\u0915\\u094d\\u0937\\u0923\",ss:\"%d \\u0938\\u0947\\u0915\\u0902\\u0921\",m:\"\\u090f\\u0915 \\u092e\\u093f\\u0928\\u091f\",mm:\"%d \\u092e\\u093f\\u0928\\u091f\",h:\"\\u090f\\u0915 \\u0918\\u0902\\u091f\\u093e\",hh:\"%d \\u0918\\u0902\\u091f\\u0947\",d:\"\\u090f\\u0915 \\u0926\\u093f\\u0928\",dd:\"%d \\u0926\\u093f\\u0928\",M:\"\\u090f\\u0915 \\u092e\\u0939\\u0940\\u0928\\u0947\",MM:\"%d \\u092e\\u0939\\u0940\\u0928\\u0947\",y:\"\\u090f\\u0915 \\u0935\\u0930\\u094d\\u0937\",yy:\"%d \\u0935\\u0930\\u094d\\u0937\"},preparse:function(t){return t.replace(/[\\u0967\\u0968\\u0969\\u096a\\u096b\\u096c\\u096d\\u096e\\u096f\\u0966]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\\d/g,(function(t){return e[t]}))},meridiemParse:/\\u0930\\u093e\\u0924|\\u0938\\u0941\\u092c\\u0939|\\u0926\\u094b\\u092a\\u0939\\u0930|\\u0936\\u093e\\u092e/,meridiemHour:function(t,e){return 12===t&&(t=0),\"\\u0930\\u093e\\u0924\"===e?t<4?t:t+12:\"\\u0938\\u0941\\u092c\\u0939\"===e?t:\"\\u0926\\u094b\\u092a\\u0939\\u0930\"===e?t>=10?t:t+12:\"\\u0936\\u093e\\u092e\"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?\"\\u0930\\u093e\\u0924\":t<10?\"\\u0938\\u0941\\u092c\\u0939\":t<17?\"\\u0926\\u094b\\u092a\\u0939\\u0930\":t<20?\"\\u0936\\u093e\\u092e\":\"\\u0930\\u093e\\u0924\"},week:{dow:0,doy:6}})}(n(\"wd/R\"))},\"3N8a\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return a}));var r=n(\"quSY\");class i extends r.a{constructor(t,e){super()}schedule(t,e=0){return this}}class a extends i{constructor(t,e){super(t,e),this.scheduler=t,this.work=e,this.pending=!1}schedule(t,e=0){if(this.closed)return this;this.state=t;const n=this.id,r=this.scheduler;return null!=n&&(this.id=this.recycleAsyncId(r,n,e)),this.pending=!0,this.delay=e,this.id=this.id||this.requestAsyncId(r,this.id,e),this}requestAsyncId(t,e,n=0){return setInterval(t.flush.bind(t,this),n)}recycleAsyncId(t,e,n=0){if(null!==n&&this.delay===n&&!1===this.pending)return e;clearInterval(e)}execute(t,e){if(this.closed)return new Error(\"executing a cancelled action\");this.pending=!1;const n=this._execute(t,e);if(n)return n;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))}_execute(t,e){let n=!1,r=void 0;try{this.work(t)}catch(i){n=!0,r=!!i&&i||new Error(i)}if(n)return this.unsubscribe(),r}_unsubscribe(){const t=this.id,e=this.scheduler,n=e.actions,r=n.indexOf(this);this.work=null,this.state=null,this.pending=!1,this.scheduler=null,-1!==r&&n.splice(r,1),null!=t&&(this.id=this.recycleAsyncId(e,t,null)),this.delay=null}}},\"3Pt+\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return zt})),n.d(e,\"b\",(function(){return O})),n.d(e,\"c\",(function(){return f})),n.d(e,\"d\",(function(){return Nt})),n.d(e,\"e\",(function(){return gt})),n.d(e,\"f\",(function(){return Lt})),n.d(e,\"g\",(function(){return Dt})),n.d(e,\"h\",(function(){return yt})),n.d(e,\"i\",(function(){return Et})),n.d(e,\"j\",(function(){return Bt})),n.d(e,\"k\",(function(){return g})),n.d(e,\"l\",(function(){return l})),n.d(e,\"m\",(function(){return I})),n.d(e,\"n\",(function(){return R})),n.d(e,\"o\",(function(){return z})),n.d(e,\"p\",(function(){return xt})),n.d(e,\"q\",(function(){return Mt})),n.d(e,\"r\",(function(){return Yt})),n.d(e,\"s\",(function(){return Rt})),n.d(e,\"t\",(function(){return _})),n.d(e,\"u\",(function(){return Tt}));var r=n(\"fXoL\"),i=n(\"ofXK\"),a=n(\"cp0P\"),o=n(\"Cfvw\"),s=n(\"lJxs\");const l=new r.w(\"NgValueAccessor\"),c={provide:l,useExisting:Object(r.db)(()=>u),multi:!0};let u=(()=>{class t{constructor(t,e){this._renderer=t,this._elementRef=e,this.onChange=t=>{},this.onTouched=()=>{}}writeValue(t){this._renderer.setProperty(this._elementRef.nativeElement,\"checked\",t)}registerOnChange(t){this.onChange=t}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this._renderer.setProperty(this._elementRef.nativeElement,\"disabled\",t)}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.O),r.Xb(r.p))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"input\",\"type\",\"checkbox\",\"formControlName\",\"\"],[\"input\",\"type\",\"checkbox\",\"formControl\",\"\"],[\"input\",\"type\",\"checkbox\",\"ngModel\",\"\"]],hostBindings:function(t,e){1&t&&r.lc(\"change\",(function(t){return e.onChange(t.target.checked)}))(\"blur\",(function(){return e.onTouched()}))},features:[r.Kb([c])]}),t})();const h={provide:l,useExisting:Object(r.db)(()=>f),multi:!0},d=new r.w(\"CompositionEventMode\");let f=(()=>{class t{constructor(t,e,n){this._renderer=t,this._elementRef=e,this._compositionMode=n,this.onChange=t=>{},this.onTouched=()=>{},this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function(){const t=Object(i.C)()?Object(i.C)().getUserAgent():\"\";return/android (\\d+)/.test(t.toLowerCase())}())}writeValue(t){this._renderer.setProperty(this._elementRef.nativeElement,\"value\",null==t?\"\":t)}registerOnChange(t){this.onChange=t}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this._renderer.setProperty(this._elementRef.nativeElement,\"disabled\",t)}_handleInput(t){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(t)}_compositionStart(){this._composing=!0}_compositionEnd(t){this._composing=!1,this._compositionMode&&this.onChange(t)}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.O),r.Xb(r.p),r.Xb(d,8))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"input\",\"formControlName\",\"\",3,\"type\",\"checkbox\"],[\"textarea\",\"formControlName\",\"\"],[\"input\",\"formControl\",\"\",3,\"type\",\"checkbox\"],[\"textarea\",\"formControl\",\"\"],[\"input\",\"ngModel\",\"\",3,\"type\",\"checkbox\"],[\"textarea\",\"ngModel\",\"\"],[\"\",\"ngDefaultControl\",\"\"]],hostBindings:function(t,e){1&t&&r.lc(\"input\",(function(t){return e._handleInput(t.target.value)}))(\"blur\",(function(){return e.onTouched()}))(\"compositionstart\",(function(){return e._compositionStart()}))(\"compositionend\",(function(t){return e._compositionEnd(t.target.value)}))},features:[r.Kb([h])]}),t})();function p(t){return null==t||0===t.length}function m(t){return null!=t&&\"number\"==typeof t.length}const g=new r.w(\"NgValidators\"),y=new r.w(\"NgAsyncValidators\"),v=/^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;class _{static min(t){return e=>{if(p(e.value)||p(t))return null;const n=parseFloat(e.value);return!isNaN(n)&&n<t?{min:{min:t,actual:e.value}}:null}}static max(t){return e=>{if(p(e.value)||p(t))return null;const n=parseFloat(e.value);return!isNaN(n)&&n>t?{max:{max:t,actual:e.value}}:null}}static required(t){return p(t.value)?{required:!0}:null}static requiredTrue(t){return!0===t.value?null:{required:!0}}static email(t){return p(t.value)||v.test(t.value)?null:{email:!0}}static minLength(t){return e=>p(e.value)||!m(e.value)?null:e.value.length<t?{minlength:{requiredLength:t,actualLength:e.value.length}}:null}static maxLength(t){return e=>m(e.value)&&e.value.length>t?{maxlength:{requiredLength:t,actualLength:e.value.length}}:null}static pattern(t){if(!t)return _.nullValidator;let e,n;return\"string\"==typeof t?(n=\"\",\"^\"!==t.charAt(0)&&(n+=\"^\"),n+=t,\"$\"!==t.charAt(t.length-1)&&(n+=\"$\"),e=new RegExp(n)):(n=t.toString(),e=t),t=>{if(p(t.value))return null;const r=t.value;return e.test(r)?null:{pattern:{requiredPattern:n,actualValue:r}}}}static nullValidator(t){return null}static compose(t){if(!t)return null;const e=t.filter(b);return 0==e.length?null:function(t){return w(k(t,e))}}static composeAsync(t){if(!t)return null;const e=t.filter(b);return 0==e.length?null:function(t){const n=k(t,e).map(x);return Object(a.a)(n).pipe(Object(s.a)(w))}}}function b(t){return null!=t}function x(t){const e=Object(r.Cb)(t)?Object(o.a)(t):t;return Object(r.Bb)(e),e}function w(t){let e={};return t.forEach(t=>{e=null!=t?Object.assign(Object.assign({},e),t):e}),0===Object.keys(e).length?null:e}function k(t,e){return e.map(e=>e(t))}function M(t){return t.map(t=>function(t){return!t.validate}(t)?t:e=>t.validate(e))}function T(t){return null!=t?_.compose(M(t)):null}function S(t){return null!=t?_.composeAsync(M(t)):null}function A(t,e){return null===t?[e]:Array.isArray(t)?[...t,e]:[t,e]}function L(t){return t._rawValidators}function C(t){return t._rawAsyncValidators}let E=(()=>{class t{constructor(){this._rawValidators=[],this._rawAsyncValidators=[],this._onDestroyCallbacks=[]}get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_setValidators(t){this._rawValidators=t||[],this._composedValidatorFn=T(this._rawValidators)}_setAsyncValidators(t){this._rawAsyncValidators=t||[],this._composedAsyncValidatorFn=S(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_registerOnDestroy(t){this._onDestroyCallbacks.push(t)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(t=>t()),this._onDestroyCallbacks=[]}reset(t){this.control&&this.control.reset(t)}hasError(t,e){return!!this.control&&this.control.hasError(t,e)}getError(t,e){return this.control?this.control.getError(t,e):null}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275dir=r.Sb({type:t}),t})(),O=(()=>{class t extends E{get formDirective(){return null}get path(){return null}}return t.\\u0275fac=function(e){return D(e||t)},t.\\u0275dir=r.Sb({type:t,features:[r.Ib]}),t})();const D=r.fc(O);class I extends E{constructor(){super(...arguments),this._parent=null,this.name=null,this.valueAccessor=null}}class P{constructor(t){this._cd=t}get ngClassUntouched(){var t,e,n;return null!==(n=null===(e=null===(t=this._cd)||void 0===t?void 0:t.control)||void 0===e?void 0:e.untouched)&&void 0!==n&&n}get ngClassTouched(){var t,e,n;return null!==(n=null===(e=null===(t=this._cd)||void 0===t?void 0:t.control)||void 0===e?void 0:e.touched)&&void 0!==n&&n}get ngClassPristine(){var t,e,n;return null!==(n=null===(e=null===(t=this._cd)||void 0===t?void 0:t.control)||void 0===e?void 0:e.pristine)&&void 0!==n&&n}get ngClassDirty(){var t,e,n;return null!==(n=null===(e=null===(t=this._cd)||void 0===t?void 0:t.control)||void 0===e?void 0:e.dirty)&&void 0!==n&&n}get ngClassValid(){var t,e,n;return null!==(n=null===(e=null===(t=this._cd)||void 0===t?void 0:t.control)||void 0===e?void 0:e.valid)&&void 0!==n&&n}get ngClassInvalid(){var t,e,n;return null!==(n=null===(e=null===(t=this._cd)||void 0===t?void 0:t.control)||void 0===e?void 0:e.invalid)&&void 0!==n&&n}get ngClassPending(){var t,e,n;return null!==(n=null===(e=null===(t=this._cd)||void 0===t?void 0:t.control)||void 0===e?void 0:e.pending)&&void 0!==n&&n}}let R=(()=>{class t extends P{constructor(t){super(t)}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(I,2))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"formControlName\",\"\"],[\"\",\"ngModel\",\"\"],[\"\",\"formControl\",\"\"]],hostVars:14,hostBindings:function(t,e){2&t&&r.Pb(\"ng-untouched\",e.ngClassUntouched)(\"ng-touched\",e.ngClassTouched)(\"ng-pristine\",e.ngClassPristine)(\"ng-dirty\",e.ngClassDirty)(\"ng-valid\",e.ngClassValid)(\"ng-invalid\",e.ngClassInvalid)(\"ng-pending\",e.ngClassPending)},features:[r.Ib]}),t})(),z=(()=>{class t extends P{constructor(t){super(t)}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(O,10))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"formGroupName\",\"\"],[\"\",\"formArrayName\",\"\"],[\"\",\"ngModelGroup\",\"\"],[\"\",\"formGroup\",\"\"],[\"form\",3,\"ngNoForm\",\"\"],[\"\",\"ngForm\",\"\"]],hostVars:14,hostBindings:function(t,e){2&t&&r.Pb(\"ng-untouched\",e.ngClassUntouched)(\"ng-touched\",e.ngClassTouched)(\"ng-pristine\",e.ngClassPristine)(\"ng-dirty\",e.ngClassDirty)(\"ng-valid\",e.ngClassValid)(\"ng-invalid\",e.ngClassInvalid)(\"ng-pending\",e.ngClassPending)},features:[r.Ib]}),t})();const j={provide:l,useExisting:Object(r.db)(()=>F),multi:!0};let F=(()=>{class t{constructor(t,e){this._renderer=t,this._elementRef=e,this.onChange=t=>{},this.onTouched=()=>{}}writeValue(t){this._renderer.setProperty(this._elementRef.nativeElement,\"value\",null==t?\"\":t)}registerOnChange(t){this.onChange=e=>{t(\"\"==e?null:parseFloat(e))}}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this._renderer.setProperty(this._elementRef.nativeElement,\"disabled\",t)}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.O),r.Xb(r.p))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"input\",\"type\",\"number\",\"formControlName\",\"\"],[\"input\",\"type\",\"number\",\"formControl\",\"\"],[\"input\",\"type\",\"number\",\"ngModel\",\"\"]],hostBindings:function(t,e){1&t&&r.lc(\"input\",(function(t){return e.onChange(t.target.value)}))(\"blur\",(function(){return e.onTouched()}))},features:[r.Kb([j])]}),t})();const N={provide:l,useExisting:Object(r.db)(()=>Y),multi:!0};let B=(()=>{class t{constructor(){this._accessors=[]}add(t,e){this._accessors.push([t,e])}remove(t){for(let e=this._accessors.length-1;e>=0;--e)if(this._accessors[e][1]===t)return void this._accessors.splice(e,1)}select(t){this._accessors.forEach(e=>{this._isSameGroup(e,t)&&e[1]!==t&&e[1].fireUncheck(t.value)})}_isSameGroup(t,e){return!!t[0].control&&t[0]._parent===e._control._parent&&t[1].name===e.name}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})(),Y=(()=>{class t{constructor(t,e,n,r){this._renderer=t,this._elementRef=e,this._registry=n,this._injector=r,this.onChange=()=>{},this.onTouched=()=>{}}ngOnInit(){this._control=this._injector.get(I),this._checkName(),this._registry.add(this._control,this)}ngOnDestroy(){this._registry.remove(this)}writeValue(t){this._state=t===this.value,this._renderer.setProperty(this._elementRef.nativeElement,\"checked\",this._state)}registerOnChange(t){this._fn=t,this.onChange=()=>{t(this.value),this._registry.select(this)}}fireUncheck(t){this.writeValue(t)}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this._renderer.setProperty(this._elementRef.nativeElement,\"disabled\",t)}_checkName(){!this.name&&this.formControlName&&(this.name=this.formControlName)}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.O),r.Xb(r.p),r.Xb(B),r.Xb(r.x))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"input\",\"type\",\"radio\",\"formControlName\",\"\"],[\"input\",\"type\",\"radio\",\"formControl\",\"\"],[\"input\",\"type\",\"radio\",\"ngModel\",\"\"]],hostBindings:function(t,e){1&t&&r.lc(\"change\",(function(){return e.onChange()}))(\"blur\",(function(){return e.onTouched()}))},inputs:{name:\"name\",formControlName:\"formControlName\",value:\"value\"},features:[r.Kb([N])]}),t})();const H={provide:l,useExisting:Object(r.db)(()=>V),multi:!0};let V=(()=>{class t{constructor(t,e){this._renderer=t,this._elementRef=e,this.onChange=t=>{},this.onTouched=()=>{}}writeValue(t){this._renderer.setProperty(this._elementRef.nativeElement,\"value\",parseFloat(t))}registerOnChange(t){this.onChange=e=>{t(\"\"==e?null:parseFloat(e))}}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this._renderer.setProperty(this._elementRef.nativeElement,\"disabled\",t)}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.O),r.Xb(r.p))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"input\",\"type\",\"range\",\"formControlName\",\"\"],[\"input\",\"type\",\"range\",\"formControl\",\"\"],[\"input\",\"type\",\"range\",\"ngModel\",\"\"]],hostBindings:function(t,e){1&t&&r.lc(\"change\",(function(t){return e.onChange(t.target.value)}))(\"input\",(function(t){return e.onChange(t.target.value)}))(\"blur\",(function(){return e.onTouched()}))},features:[r.Kb([H])]}),t})();const U={provide:l,useExisting:Object(r.db)(()=>W),multi:!0};let W=(()=>{class t{constructor(t,e){this._renderer=t,this._elementRef=e,this._optionMap=new Map,this._idCounter=0,this.onChange=t=>{},this.onTouched=()=>{},this._compareWith=Object.is}set compareWith(t){this._compareWith=t}writeValue(t){this.value=t;const e=this._getOptionId(t);null==e&&this._renderer.setProperty(this._elementRef.nativeElement,\"selectedIndex\",-1);const n=function(t,e){return null==t?\"\"+e:(e&&\"object\"==typeof e&&(e=\"Object\"),`${t}: ${e}`.slice(0,50))}(e,t);this._renderer.setProperty(this._elementRef.nativeElement,\"value\",n)}registerOnChange(t){this.onChange=e=>{this.value=this._getOptionValue(e),t(this.value)}}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this._renderer.setProperty(this._elementRef.nativeElement,\"disabled\",t)}_registerOption(){return(this._idCounter++).toString()}_getOptionId(t){for(const e of Array.from(this._optionMap.keys()))if(this._compareWith(this._optionMap.get(e),t))return e;return null}_getOptionValue(t){const e=function(t){return t.split(\":\")[0]}(t);return this._optionMap.has(e)?this._optionMap.get(e):t}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.O),r.Xb(r.p))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"select\",\"formControlName\",\"\",3,\"multiple\",\"\"],[\"select\",\"formControl\",\"\",3,\"multiple\",\"\"],[\"select\",\"ngModel\",\"\",3,\"multiple\",\"\"]],hostBindings:function(t,e){1&t&&r.lc(\"change\",(function(t){return e.onChange(t.target.value)}))(\"blur\",(function(){return e.onTouched()}))},inputs:{compareWith:\"compareWith\"},features:[r.Kb([U])]}),t})();const q={provide:l,useExisting:Object(r.db)(()=>G),multi:!0};let G=(()=>{class t{constructor(t,e){this._renderer=t,this._elementRef=e,this._optionMap=new Map,this._idCounter=0,this.onChange=t=>{},this.onTouched=()=>{},this._compareWith=Object.is}set compareWith(t){this._compareWith=t}writeValue(t){let e;if(this.value=t,Array.isArray(t)){const n=t.map(t=>this._getOptionId(t));e=(t,e)=>{t._setSelected(n.indexOf(e.toString())>-1)}}else e=(t,e)=>{t._setSelected(!1)};this._optionMap.forEach(e)}registerOnChange(t){this.onChange=e=>{const n=[];if(void 0!==e.selectedOptions){const t=e.selectedOptions;for(let e=0;e<t.length;e++){const r=t.item(e),i=this._getOptionValue(r.value);n.push(i)}}else{const t=e.options;for(let e=0;e<t.length;e++){const r=t.item(e);if(r.selected){const t=this._getOptionValue(r.value);n.push(t)}}}this.value=n,t(n)}}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this._renderer.setProperty(this._elementRef.nativeElement,\"disabled\",t)}_registerOption(t){const e=(this._idCounter++).toString();return this._optionMap.set(e,t),e}_getOptionId(t){for(const e of Array.from(this._optionMap.keys()))if(this._compareWith(this._optionMap.get(e)._value,t))return e;return null}_getOptionValue(t){const e=function(t){return t.split(\":\")[0]}(t);return this._optionMap.has(e)?this._optionMap.get(e)._value:t}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.O),r.Xb(r.p))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"select\",\"multiple\",\"\",\"formControlName\",\"\"],[\"select\",\"multiple\",\"\",\"formControl\",\"\"],[\"select\",\"multiple\",\"\",\"ngModel\",\"\"]],hostBindings:function(t,e){1&t&&r.lc(\"change\",(function(t){return e.onChange(t.target)}))(\"blur\",(function(){return e.onTouched()}))},inputs:{compareWith:\"compareWith\"},features:[r.Kb([q])]}),t})();function X(t,e){return[...e.path,t]}function Z(t,e){K(t,e,!0),e.valueAccessor.writeValue(t.value),function(t,e){e.valueAccessor.registerOnChange(n=>{t._pendingValue=n,t._pendingChange=!0,t._pendingDirty=!0,\"change\"===t.updateOn&&Q(t,e)})}(t,e),function(t,e){const n=(t,n)=>{e.valueAccessor.writeValue(t),n&&e.viewToModelUpdate(t)};t.registerOnChange(n),e._registerOnDestroy(()=>{t._unregisterOnChange(n)})}(t,e),function(t,e){e.valueAccessor.registerOnTouched(()=>{t._pendingTouched=!0,\"blur\"===t.updateOn&&t._pendingChange&&Q(t,e),\"submit\"!==t.updateOn&&t.markAsTouched()})}(t,e),function(t,e){if(e.valueAccessor.setDisabledState){const n=t=>{e.valueAccessor.setDisabledState(t)};t.registerOnDisabledChange(n),e._registerOnDestroy(()=>{t._unregisterOnDisabledChange(n)})}}(t,e)}function J(t,e){t.forEach(t=>{t.registerOnValidatorChange&&t.registerOnValidatorChange(e)})}function K(t,e,n){const r=L(t);null!==e.validator?t.setValidators(A(r,e.validator)):\"function\"==typeof r&&t.setValidators([r]);const i=C(t);if(null!==e.asyncValidator?t.setAsyncValidators(A(i,e.asyncValidator)):\"function\"==typeof i&&t.setAsyncValidators([i]),n){const n=()=>t.updateValueAndValidity();J(e._rawValidators,n),J(e._rawAsyncValidators,n)}}function $(t,e,n){if(null!==t){if(null!==e.validator){const n=L(t);Array.isArray(n)&&n.length>0&&t.setValidators(n.filter(t=>t!==e.validator))}if(null!==e.asyncValidator){const n=C(t);Array.isArray(n)&&n.length>0&&t.setAsyncValidators(n.filter(t=>t!==e.asyncValidator))}}if(n){const t=()=>{};J(e._rawValidators,t),J(e._rawAsyncValidators,t)}}function Q(t,e){t._pendingDirty&&t.markAsDirty(),t.setValue(t._pendingValue,{emitModelToViewChange:!1}),e.viewToModelUpdate(t._pendingValue),t._pendingChange=!1}function tt(t,e){K(t,e,!1)}function et(t,e){if(!t.hasOwnProperty(\"model\"))return!1;const n=t.model;return!!n.isFirstChange()||!Object.is(e,n.currentValue)}const nt=[u,V,F,W,G,Y];function rt(t,e){t._syncPendingControls(),e.forEach(t=>{const e=t.control;\"submit\"===e.updateOn&&e._pendingChange&&(t.viewToModelUpdate(e._pendingValue),e._pendingChange=!1)})}function it(t,e){if(!e)return null;Array.isArray(e);let n=void 0,r=void 0,i=void 0;return e.forEach(t=>{var e;t.constructor===f?n=t:(e=t,nt.some(t=>e.constructor===t)?r=t:i=t)}),i||r||n||null}function at(t,e){const n=t.indexOf(e);n>-1&&t.splice(n,1)}const ot=\"VALID\",st=\"INVALID\",lt=\"PENDING\",ct=\"DISABLED\";function ut(t){return(pt(t)?t.validators:t)||null}function ht(t){return Array.isArray(t)?T(t):t||null}function dt(t,e){return(pt(e)?e.asyncValidators:t)||null}function ft(t){return Array.isArray(t)?S(t):t||null}function pt(t){return null!=t&&!Array.isArray(t)&&\"object\"==typeof t}class mt{constructor(t,e){this._hasOwnPendingAsyncValidator=!1,this._onCollectionChange=()=>{},this._parent=null,this.pristine=!0,this.touched=!1,this._onDisabledChange=[],this._rawValidators=t,this._rawAsyncValidators=e,this._composedValidatorFn=ht(this._rawValidators),this._composedAsyncValidatorFn=ft(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn}set validator(t){this._rawValidators=this._composedValidatorFn=t}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(t){this._rawAsyncValidators=this._composedAsyncValidatorFn=t}get parent(){return this._parent}get valid(){return this.status===ot}get invalid(){return this.status===st}get pending(){return this.status==lt}get disabled(){return this.status===ct}get enabled(){return this.status!==ct}get dirty(){return!this.pristine}get untouched(){return!this.touched}get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:\"change\"}setValidators(t){this._rawValidators=t,this._composedValidatorFn=ht(t)}setAsyncValidators(t){this._rawAsyncValidators=t,this._composedAsyncValidatorFn=ft(t)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(t={}){this.touched=!0,this._parent&&!t.onlySelf&&this._parent.markAsTouched(t)}markAllAsTouched(){this.markAsTouched({onlySelf:!0}),this._forEachChild(t=>t.markAllAsTouched())}markAsUntouched(t={}){this.touched=!1,this._pendingTouched=!1,this._forEachChild(t=>{t.markAsUntouched({onlySelf:!0})}),this._parent&&!t.onlySelf&&this._parent._updateTouched(t)}markAsDirty(t={}){this.pristine=!1,this._parent&&!t.onlySelf&&this._parent.markAsDirty(t)}markAsPristine(t={}){this.pristine=!0,this._pendingDirty=!1,this._forEachChild(t=>{t.markAsPristine({onlySelf:!0})}),this._parent&&!t.onlySelf&&this._parent._updatePristine(t)}markAsPending(t={}){this.status=lt,!1!==t.emitEvent&&this.statusChanges.emit(this.status),this._parent&&!t.onlySelf&&this._parent.markAsPending(t)}disable(t={}){const e=this._parentMarkedDirty(t.onlySelf);this.status=ct,this.errors=null,this._forEachChild(e=>{e.disable(Object.assign(Object.assign({},t),{onlySelf:!0}))}),this._updateValue(),!1!==t.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(Object.assign(Object.assign({},t),{skipPristineCheck:e})),this._onDisabledChange.forEach(t=>t(!0))}enable(t={}){const e=this._parentMarkedDirty(t.onlySelf);this.status=ot,this._forEachChild(e=>{e.enable(Object.assign(Object.assign({},t),{onlySelf:!0}))}),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent}),this._updateAncestors(Object.assign(Object.assign({},t),{skipPristineCheck:e})),this._onDisabledChange.forEach(t=>t(!1))}_updateAncestors(t){this._parent&&!t.onlySelf&&(this._parent.updateValueAndValidity(t),t.skipPristineCheck||this._parent._updatePristine(),this._parent._updateTouched())}setParent(t){this._parent=t}updateValueAndValidity(t={}){this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),this.status!==ot&&this.status!==lt||this._runAsyncValidator(t.emitEvent)),!1!==t.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!t.onlySelf&&this._parent.updateValueAndValidity(t)}_updateTreeValidity(t={emitEvent:!0}){this._forEachChild(e=>e._updateTreeValidity(t)),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?ct:ot}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(t){if(this.asyncValidator){this.status=lt,this._hasOwnPendingAsyncValidator=!0;const e=x(this.asyncValidator(this));this._asyncValidationSubscription=e.subscribe(e=>{this._hasOwnPendingAsyncValidator=!1,this.setErrors(e,{emitEvent:t})})}}_cancelExistingSubscription(){this._asyncValidationSubscription&&(this._asyncValidationSubscription.unsubscribe(),this._hasOwnPendingAsyncValidator=!1)}setErrors(t,e={}){this.errors=t,this._updateControlsErrors(!1!==e.emitEvent)}get(t){return function(t,e,n){if(null==e)return null;if(Array.isArray(e)||(e=e.split(\".\")),Array.isArray(e)&&0===e.length)return null;let r=t;return e.forEach(t=>{r=r instanceof yt?r.controls.hasOwnProperty(t)?r.controls[t]:null:r instanceof vt&&r.at(t)||null}),r}(this,t)}getError(t,e){const n=e?this.get(e):this;return n&&n.errors?n.errors[t]:null}hasError(t,e){return!!this.getError(t,e)}get root(){let t=this;for(;t._parent;)t=t._parent;return t}_updateControlsErrors(t){this.status=this._calculateStatus(),t&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(t)}_initObservables(){this.valueChanges=new r.s,this.statusChanges=new r.s}_calculateStatus(){return this._allControlsDisabled()?ct:this.errors?st:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(lt)?lt:this._anyControlsHaveStatus(st)?st:ot}_anyControlsHaveStatus(t){return this._anyControls(e=>e.status===t)}_anyControlsDirty(){return this._anyControls(t=>t.dirty)}_anyControlsTouched(){return this._anyControls(t=>t.touched)}_updatePristine(t={}){this.pristine=!this._anyControlsDirty(),this._parent&&!t.onlySelf&&this._parent._updatePristine(t)}_updateTouched(t={}){this.touched=this._anyControlsTouched(),this._parent&&!t.onlySelf&&this._parent._updateTouched(t)}_isBoxedValue(t){return\"object\"==typeof t&&null!==t&&2===Object.keys(t).length&&\"value\"in t&&\"disabled\"in t}_registerOnCollectionChange(t){this._onCollectionChange=t}_setUpdateStrategy(t){pt(t)&&null!=t.updateOn&&(this._updateOn=t.updateOn)}_parentMarkedDirty(t){return!t&&!(!this._parent||!this._parent.dirty)&&!this._parent._anyControlsDirty()}}class gt extends mt{constructor(t=null,e,n){super(ut(e),dt(n,e)),this._onChange=[],this._applyFormState(t),this._setUpdateStrategy(e),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!n})}setValue(t,e={}){this.value=this._pendingValue=t,this._onChange.length&&!1!==e.emitModelToViewChange&&this._onChange.forEach(t=>t(this.value,!1!==e.emitViewToModelChange)),this.updateValueAndValidity(e)}patchValue(t,e={}){this.setValue(t,e)}reset(t=null,e={}){this._applyFormState(t),this.markAsPristine(e),this.markAsUntouched(e),this.setValue(this.value,e),this._pendingChange=!1}_updateValue(){}_anyControls(t){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(t){this._onChange.push(t)}_unregisterOnChange(t){at(this._onChange,t)}registerOnDisabledChange(t){this._onDisabledChange.push(t)}_unregisterOnDisabledChange(t){at(this._onDisabledChange,t)}_forEachChild(t){}_syncPendingControls(){return!(\"submit\"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))}_applyFormState(t){this._isBoxedValue(t)?(this.value=this._pendingValue=t.value,t.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=t}}class yt extends mt{constructor(t,e,n){super(ut(e),dt(n,e)),this.controls=t,this._initObservables(),this._setUpdateStrategy(e),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!n})}registerControl(t,e){return this.controls[t]?this.controls[t]:(this.controls[t]=e,e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange),e)}addControl(t,e){this.registerControl(t,e),this.updateValueAndValidity(),this._onCollectionChange()}removeControl(t){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),delete this.controls[t],this.updateValueAndValidity(),this._onCollectionChange()}setControl(t,e){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),delete this.controls[t],e&&this.registerControl(t,e),this.updateValueAndValidity(),this._onCollectionChange()}contains(t){return this.controls.hasOwnProperty(t)&&this.controls[t].enabled}setValue(t,e={}){this._checkAllValuesPresent(t),Object.keys(t).forEach(n=>{this._throwIfControlMissing(n),this.controls[n].setValue(t[n],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)}patchValue(t,e={}){Object.keys(t).forEach(n=>{this.controls[n]&&this.controls[n].patchValue(t[n],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)}reset(t={},e={}){this._forEachChild((n,r)=>{n.reset(t[r],{onlySelf:!0,emitEvent:e.emitEvent})}),this._updatePristine(e),this._updateTouched(e),this.updateValueAndValidity(e)}getRawValue(){return this._reduceChildren({},(t,e,n)=>(t[n]=e instanceof gt?e.value:e.getRawValue(),t))}_syncPendingControls(){let t=this._reduceChildren(!1,(t,e)=>!!e._syncPendingControls()||t);return t&&this.updateValueAndValidity({onlySelf:!0}),t}_throwIfControlMissing(t){if(!Object.keys(this.controls).length)throw new Error(\"\\n        There are no form controls registered with this group yet. If you're using ngModel,\\n        you may want to check next tick (e.g. use setTimeout).\\n      \");if(!this.controls[t])throw new Error(`Cannot find form control with name: ${t}.`)}_forEachChild(t){Object.keys(this.controls).forEach(e=>t(this.controls[e],e))}_setUpControls(){this._forEachChild(t=>{t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(t){for(const e of Object.keys(this.controls)){const n=this.controls[e];if(this.contains(e)&&t(n))return!0}return!1}_reduceValue(){return this._reduceChildren({},(t,e,n)=>((e.enabled||this.disabled)&&(t[n]=e.value),t))}_reduceChildren(t,e){let n=t;return this._forEachChild((t,r)=>{n=e(n,t,r)}),n}_allControlsDisabled(){for(const t of Object.keys(this.controls))if(this.controls[t].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_checkAllValuesPresent(t){this._forEachChild((e,n)=>{if(void 0===t[n])throw new Error(`Must supply a value for form control with name: '${n}'.`)})}}class vt extends mt{constructor(t,e,n){super(ut(e),dt(n,e)),this.controls=t,this._initObservables(),this._setUpdateStrategy(e),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!n})}at(t){return this.controls[t]}push(t){this.controls.push(t),this._registerControl(t),this.updateValueAndValidity(),this._onCollectionChange()}insert(t,e){this.controls.splice(t,0,e),this._registerControl(e),this.updateValueAndValidity()}removeAt(t){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),this.controls.splice(t,1),this.updateValueAndValidity()}setControl(t,e){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),this.controls.splice(t,1),e&&(this.controls.splice(t,0,e),this._registerControl(e)),this.updateValueAndValidity(),this._onCollectionChange()}get length(){return this.controls.length}setValue(t,e={}){this._checkAllValuesPresent(t),t.forEach((t,n)=>{this._throwIfControlMissing(n),this.at(n).setValue(t,{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)}patchValue(t,e={}){t.forEach((t,n)=>{this.at(n)&&this.at(n).patchValue(t,{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)}reset(t=[],e={}){this._forEachChild((n,r)=>{n.reset(t[r],{onlySelf:!0,emitEvent:e.emitEvent})}),this._updatePristine(e),this._updateTouched(e),this.updateValueAndValidity(e)}getRawValue(){return this.controls.map(t=>t instanceof gt?t.value:t.getRawValue())}clear(){this.controls.length<1||(this._forEachChild(t=>t._registerOnCollectionChange(()=>{})),this.controls.splice(0),this.updateValueAndValidity())}_syncPendingControls(){let t=this.controls.reduce((t,e)=>!!e._syncPendingControls()||t,!1);return t&&this.updateValueAndValidity({onlySelf:!0}),t}_throwIfControlMissing(t){if(!this.controls.length)throw new Error(\"\\n        There are no form controls registered with this array yet. If you're using ngModel,\\n        you may want to check next tick (e.g. use setTimeout).\\n      \");if(!this.at(t))throw new Error(\"Cannot find form control at index \"+t)}_forEachChild(t){this.controls.forEach((e,n)=>{t(e,n)})}_updateValue(){this.value=this.controls.filter(t=>t.enabled||this.disabled).map(t=>t.value)}_anyControls(t){return this.controls.some(e=>e.enabled&&t(e))}_setUpControls(){this._forEachChild(t=>this._registerControl(t))}_checkAllValuesPresent(t){this._forEachChild((e,n)=>{if(void 0===t[n])throw new Error(`Must supply a value for form control at index: ${n}.`)})}_allControlsDisabled(){for(const t of this.controls)if(t.enabled)return!1;return this.controls.length>0||this.disabled}_registerControl(t){t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange)}}const _t={provide:O,useExisting:Object(r.db)(()=>xt)},bt=(()=>Promise.resolve(null))();let xt=(()=>{class t extends O{constructor(t,e){super(),this.submitted=!1,this._directives=[],this.ngSubmit=new r.s,this.form=new yt({},T(t),S(e))}ngAfterViewInit(){this._setUpdateStrategy()}get formDirective(){return this}get control(){return this.form}get path(){return[]}get controls(){return this.form.controls}addControl(t){bt.then(()=>{const e=this._findContainer(t.path);t.control=e.registerControl(t.name,t.control),Z(t.control,t),t.control.updateValueAndValidity({emitEvent:!1}),this._directives.push(t)})}getControl(t){return this.form.get(t.path)}removeControl(t){bt.then(()=>{const e=this._findContainer(t.path);e&&e.removeControl(t.name),at(this._directives,t)})}addFormGroup(t){bt.then(()=>{const e=this._findContainer(t.path),n=new yt({});tt(n,t),e.registerControl(t.name,n),n.updateValueAndValidity({emitEvent:!1})})}removeFormGroup(t){bt.then(()=>{const e=this._findContainer(t.path);e&&e.removeControl(t.name)})}getFormGroup(t){return this.form.get(t.path)}updateModel(t,e){bt.then(()=>{this.form.get(t.path).setValue(e)})}setValue(t){this.control.setValue(t)}onSubmit(t){return this.submitted=!0,rt(this.form,this._directives),this.ngSubmit.emit(t),!1}onReset(){this.resetForm()}resetForm(t){this.form.reset(t),this.submitted=!1}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.form._updateOn=this.options.updateOn)}_findContainer(t){return t.pop(),t.length?this.form.get(t):this.form}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(g,10),r.Xb(y,10))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"form\",3,\"ngNoForm\",\"\",3,\"formGroup\",\"\"],[\"ng-form\"],[\"\",\"ngForm\",\"\"]],hostBindings:function(t,e){1&t&&r.lc(\"submit\",(function(t){return e.onSubmit(t)}))(\"reset\",(function(){return e.onReset()}))},inputs:{options:[\"ngFormOptions\",\"options\"]},outputs:{ngSubmit:\"ngSubmit\"},exportAs:[\"ngForm\"],features:[r.Kb([_t]),r.Ib]}),t})();const wt={provide:I,useExisting:Object(r.db)(()=>Mt)},kt=(()=>Promise.resolve(null))();let Mt=(()=>{class t extends I{constructor(t,e,n,i){super(),this.control=new gt,this._registered=!1,this.update=new r.s,this._parent=t,this._setValidators(e),this._setAsyncValidators(n),this.valueAccessor=it(0,i)}ngOnChanges(t){this._checkForErrors(),this._registered||this._setUpControl(),\"isDisabled\"in t&&this._updateDisabled(t),et(t,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._parent?X(this.name,this._parent):[this.name]}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(t){this.viewModel=t,this.update.emit(t)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!(!this.options||!this.options.standalone)}_setUpStandalone(){Z(this.control,this),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._isStandalone()||this._checkParentType(),this._checkName()}_checkParentType(){}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()}_updateValue(t){kt.then(()=>{this.control.setValue(t,{emitViewToModelChange:!1})})}_updateDisabled(t){const e=t.isDisabled.currentValue,n=\"\"===e||e&&\"false\"!==e;kt.then(()=>{n&&!this.control.disabled?this.control.disable():!n&&this.control.disabled&&this.control.enable()})}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(O,9),r.Xb(g,10),r.Xb(y,10),r.Xb(l,10))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"ngModel\",\"\",3,\"formControlName\",\"\",3,\"formControl\",\"\"]],inputs:{name:\"name\",isDisabled:[\"disabled\",\"isDisabled\"],model:[\"ngModel\",\"model\"],options:[\"ngModelOptions\",\"options\"]},outputs:{update:\"ngModelChange\"},exportAs:[\"ngModel\"],features:[r.Kb([wt]),r.Ib,r.Jb]}),t})(),Tt=(()=>{class t{}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275dir=r.Sb({type:t,selectors:[[\"form\",3,\"ngNoForm\",\"\",3,\"ngNativeValidate\",\"\"]],hostAttrs:[\"novalidate\",\"\"]}),t})();const St=new r.w(\"NgModelWithFormControlWarning\"),At={provide:I,useExisting:Object(r.db)(()=>Lt)};let Lt=(()=>{class t extends I{constructor(t,e,n,i){super(),this._ngModelWarningConfig=i,this.update=new r.s,this._ngModelWarningSent=!1,this._setValidators(t),this._setAsyncValidators(e),this.valueAccessor=it(0,n)}set isDisabled(t){}ngOnChanges(t){this._isControlChanged(t)&&(Z(this.form,this),this.control.disabled&&this.valueAccessor.setDisabledState&&this.valueAccessor.setDisabledState(!0),this.form.updateValueAndValidity({emitEvent:!1})),et(t,this.viewModel)&&(this.form.setValue(this.model),this.viewModel=this.model)}get path(){return[]}get control(){return this.form}viewToModelUpdate(t){this.viewModel=t,this.update.emit(t)}_isControlChanged(t){return t.hasOwnProperty(\"form\")}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(g,10),r.Xb(y,10),r.Xb(l,10),r.Xb(St,8))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"formControl\",\"\"]],inputs:{isDisabled:[\"disabled\",\"isDisabled\"],form:[\"formControl\",\"form\"],model:[\"ngModel\",\"model\"]},outputs:{update:\"ngModelChange\"},exportAs:[\"ngForm\"],features:[r.Kb([At]),r.Ib,r.Jb]}),t._ngModelWarningSentOnce=!1,t})();const Ct={provide:O,useExisting:Object(r.db)(()=>Et)};let Et=(()=>{class t extends O{constructor(t,e){super(),this.validators=t,this.asyncValidators=e,this.submitted=!1,this.directives=[],this.form=null,this.ngSubmit=new r.s,this._setValidators(t),this._setAsyncValidators(e)}ngOnChanges(t){this._checkFormPresent(),t.hasOwnProperty(\"form\")&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations(),this._oldForm=this.form)}get formDirective(){return this}get control(){return this.form}get path(){return[]}addControl(t){const e=this.form.get(t.path);return Z(e,t),e.updateValueAndValidity({emitEvent:!1}),this.directives.push(t),e}getControl(t){return this.form.get(t.path)}removeControl(t){at(this.directives,t)}addFormGroup(t){const e=this.form.get(t.path);tt(e,t),e.updateValueAndValidity({emitEvent:!1})}removeFormGroup(t){}getFormGroup(t){return this.form.get(t.path)}addFormArray(t){const e=this.form.get(t.path);tt(e,t),e.updateValueAndValidity({emitEvent:!1})}removeFormArray(t){}getFormArray(t){return this.form.get(t.path)}updateModel(t,e){this.form.get(t.path).setValue(e)}onSubmit(t){return this.submitted=!0,rt(this.form,this.directives),this.ngSubmit.emit(t),!1}onReset(){this.resetForm()}resetForm(t){this.form.reset(t),this.submitted=!1}_updateDomValue(){this.directives.forEach(t=>{const e=this.form.get(t.path);t.control!==e&&(function(t,e){const n=()=>{};e.valueAccessor.registerOnChange(n),e.valueAccessor.registerOnTouched(n),$(t,e,!0),t&&(e._invokeOnDestroyCallbacks(),t._registerOnCollectionChange(()=>{}))}(t.control||null,t),e&&Z(e,t),t.control=e)}),this.form._updateTreeValidity({emitEvent:!1})}_updateRegistrations(){this.form._registerOnCollectionChange(()=>this._updateDomValue()),this._oldForm&&this._oldForm._registerOnCollectionChange(()=>{})}_updateValidators(){K(this.form,this,!1),this._oldForm&&$(this._oldForm,this,!1)}_checkFormPresent(){}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(g,10),r.Xb(y,10))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"formGroup\",\"\"]],hostBindings:function(t,e){1&t&&r.lc(\"submit\",(function(t){return e.onSubmit(t)}))(\"reset\",(function(){return e.onReset()}))},inputs:{form:[\"formGroup\",\"form\"]},outputs:{ngSubmit:\"ngSubmit\"},exportAs:[\"ngForm\"],features:[r.Kb([Ct]),r.Ib,r.Jb]}),t})();const Ot={provide:I,useExisting:Object(r.db)(()=>Dt)};let Dt=(()=>{class t extends I{constructor(t,e,n,i,a){super(),this._ngModelWarningConfig=a,this._added=!1,this.update=new r.s,this._ngModelWarningSent=!1,this._parent=t,this._setValidators(e),this._setAsyncValidators(n),this.valueAccessor=it(0,i)}set isDisabled(t){}ngOnChanges(t){this._added||this._setUpControl(),et(t,this.viewModel)&&(this.viewModel=this.model,this.formDirective.updateModel(this,this.model))}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}viewToModelUpdate(t){this.viewModel=t,this.update.emit(t)}get path(){return X(null==this.name?this.name:this.name.toString(),this._parent)}get formDirective(){return this._parent?this._parent.formDirective:null}_checkParentType(){}_setUpControl(){this._checkParentType(),this.control=this.formDirective.addControl(this),this.control.disabled&&this.valueAccessor.setDisabledState&&this.valueAccessor.setDisabledState(!0),this._added=!0}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(O,13),r.Xb(g,10),r.Xb(y,10),r.Xb(l,10),r.Xb(St,8))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"formControlName\",\"\"]],inputs:{isDisabled:[\"disabled\",\"isDisabled\"],name:[\"formControlName\",\"name\"],model:[\"ngModel\",\"model\"]},outputs:{update:\"ngModelChange\"},features:[r.Kb([Ot]),r.Ib,r.Jb]}),t._ngModelWarningSentOnce=!1,t})();const It={provide:g,useExisting:Object(r.db)(()=>Rt),multi:!0},Pt={provide:g,useExisting:Object(r.db)(()=>zt),multi:!0};let Rt=(()=>{class t{constructor(){this._required=!1}get required(){return this._required}set required(t){this._required=null!=t&&!1!==t&&\"\"+t!=\"false\",this._onChange&&this._onChange()}validate(t){return this.required?_.required(t):null}registerOnValidatorChange(t){this._onChange=t}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"required\",\"\",\"formControlName\",\"\",3,\"type\",\"checkbox\"],[\"\",\"required\",\"\",\"formControl\",\"\",3,\"type\",\"checkbox\"],[\"\",\"required\",\"\",\"ngModel\",\"\",3,\"type\",\"checkbox\"]],hostVars:1,hostBindings:function(t,e){2&t&&r.Mb(\"required\",e.required?\"\":null)},inputs:{required:\"required\"},features:[r.Kb([It])]}),t})(),zt=(()=>{class t extends Rt{validate(t){return this.required?_.requiredTrue(t):null}}return t.\\u0275fac=function(e){return jt(e||t)},t.\\u0275dir=r.Sb({type:t,selectors:[[\"input\",\"type\",\"checkbox\",\"required\",\"\",\"formControlName\",\"\"],[\"input\",\"type\",\"checkbox\",\"required\",\"\",\"formControl\",\"\"],[\"input\",\"type\",\"checkbox\",\"required\",\"\",\"ngModel\",\"\"]],hostVars:1,hostBindings:function(t,e){2&t&&r.Mb(\"required\",e.required?\"\":null)},features:[r.Kb([Pt]),r.Ib]}),t})();const jt=r.fc(zt);let Ft=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)}}),t})(),Nt=(()=>{class t{group(t,e=null){const n=this._reduceControls(t);let r=null,i=null,a=void 0;return null!=e&&(function(t){return void 0!==t.asyncValidators||void 0!==t.validators||void 0!==t.updateOn}(e)?(r=null!=e.validators?e.validators:null,i=null!=e.asyncValidators?e.asyncValidators:null,a=null!=e.updateOn?e.updateOn:void 0):(r=null!=e.validator?e.validator:null,i=null!=e.asyncValidator?e.asyncValidator:null)),new yt(n,{asyncValidators:i,updateOn:a,validators:r})}control(t,e,n){return new gt(t,e,n)}array(t,e,n){const r=t.map(t=>this._createControl(t));return new vt(r,e,n)}_reduceControls(t){const e={};return Object.keys(t).forEach(n=>{e[n]=this._createControl(t[n])}),e}_createControl(t){return t instanceof gt||t instanceof yt||t instanceof vt?t:Array.isArray(t)?this.control(t[0],t.length>1?t[1]:null,t.length>2?t[2]:null):this.control(t)}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})(),Bt=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},providers:[B],imports:[Ft]}),t})(),Yt=(()=>{class t{static withConfig(e){return{ngModule:t,providers:[{provide:St,useValue:e.warnOnNgModelWithFormControl}]}}}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},providers:[Nt,B],imports:[Ft]}),t})()},\"3UWI\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return l}));var r=n(\"D0XW\"),i=n(\"zx2A\");class a{constructor(t){this.durationSelector=t}call(t,e){return e.subscribe(new o(t,this.durationSelector))}}class o extends i.b{constructor(t,e){super(t),this.durationSelector=e,this.hasValue=!1}_next(t){if(this.value=t,this.hasValue=!0,!this.throttled){let n;try{const{durationSelector:e}=this;n=e(t)}catch(e){return this.destination.error(e)}const r=Object(i.c)(n,new i.a(this));!r||r.closed?this.clearThrottle():this.add(this.throttled=r)}}clearThrottle(){const{value:t,hasValue:e,throttled:n}=this;n&&(this.remove(n),this.throttled=void 0,n.unsubscribe()),e&&(this.value=void 0,this.hasValue=!1,this.destination.next(t))}notifyNext(){this.clearThrottle()}notifyComplete(){this.clearThrottle()}}var s=n(\"PqYM\");function l(t,e=r.a){return n=()=>Object(s.a)(t,e),function(t){return t.lift(new a(n))};var n}},\"4I5i\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return r}));const r=(()=>{function t(){return Error.call(this),this.message=\"argument out of range\",this.name=\"ArgumentOutOfRangeError\",this}return t.prototype=Object.create(Error.prototype),t})()},\"4MV3\":function(t,e,n){!function(t){\"use strict\";var e={1:\"\\u0ae7\",2:\"\\u0ae8\",3:\"\\u0ae9\",4:\"\\u0aea\",5:\"\\u0aeb\",6:\"\\u0aec\",7:\"\\u0aed\",8:\"\\u0aee\",9:\"\\u0aef\",0:\"\\u0ae6\"},n={\"\\u0ae7\":\"1\",\"\\u0ae8\":\"2\",\"\\u0ae9\":\"3\",\"\\u0aea\":\"4\",\"\\u0aeb\":\"5\",\"\\u0aec\":\"6\",\"\\u0aed\":\"7\",\"\\u0aee\":\"8\",\"\\u0aef\":\"9\",\"\\u0ae6\":\"0\"};t.defineLocale(\"gu\",{months:\"\\u0a9c\\u0abe\\u0aa8\\u0acd\\u0aaf\\u0ac1\\u0a86\\u0ab0\\u0ac0_\\u0aab\\u0ac7\\u0aac\\u0acd\\u0ab0\\u0ac1\\u0a86\\u0ab0\\u0ac0_\\u0aae\\u0abe\\u0ab0\\u0acd\\u0a9a_\\u0a8f\\u0aaa\\u0acd\\u0ab0\\u0abf\\u0ab2_\\u0aae\\u0ac7_\\u0a9c\\u0ac2\\u0aa8_\\u0a9c\\u0ac1\\u0ab2\\u0abe\\u0a88_\\u0a91\\u0a97\\u0ab8\\u0acd\\u0a9f_\\u0ab8\\u0aaa\\u0acd\\u0a9f\\u0ac7\\u0aae\\u0acd\\u0aac\\u0ab0_\\u0a91\\u0a95\\u0acd\\u0a9f\\u0acd\\u0aac\\u0ab0_\\u0aa8\\u0ab5\\u0ac7\\u0aae\\u0acd\\u0aac\\u0ab0_\\u0aa1\\u0abf\\u0ab8\\u0ac7\\u0aae\\u0acd\\u0aac\\u0ab0\".split(\"_\"),monthsShort:\"\\u0a9c\\u0abe\\u0aa8\\u0acd\\u0aaf\\u0ac1._\\u0aab\\u0ac7\\u0aac\\u0acd\\u0ab0\\u0ac1._\\u0aae\\u0abe\\u0ab0\\u0acd\\u0a9a_\\u0a8f\\u0aaa\\u0acd\\u0ab0\\u0abf._\\u0aae\\u0ac7_\\u0a9c\\u0ac2\\u0aa8_\\u0a9c\\u0ac1\\u0ab2\\u0abe._\\u0a91\\u0a97._\\u0ab8\\u0aaa\\u0acd\\u0a9f\\u0ac7._\\u0a91\\u0a95\\u0acd\\u0a9f\\u0acd._\\u0aa8\\u0ab5\\u0ac7._\\u0aa1\\u0abf\\u0ab8\\u0ac7.\".split(\"_\"),monthsParseExact:!0,weekdays:\"\\u0ab0\\u0ab5\\u0abf\\u0ab5\\u0abe\\u0ab0_\\u0ab8\\u0acb\\u0aae\\u0ab5\\u0abe\\u0ab0_\\u0aae\\u0a82\\u0a97\\u0ab3\\u0ab5\\u0abe\\u0ab0_\\u0aac\\u0ac1\\u0aa7\\u0acd\\u0ab5\\u0abe\\u0ab0_\\u0a97\\u0ac1\\u0ab0\\u0ac1\\u0ab5\\u0abe\\u0ab0_\\u0ab6\\u0ac1\\u0a95\\u0acd\\u0ab0\\u0ab5\\u0abe\\u0ab0_\\u0ab6\\u0aa8\\u0abf\\u0ab5\\u0abe\\u0ab0\".split(\"_\"),weekdaysShort:\"\\u0ab0\\u0ab5\\u0abf_\\u0ab8\\u0acb\\u0aae_\\u0aae\\u0a82\\u0a97\\u0ab3_\\u0aac\\u0ac1\\u0aa7\\u0acd_\\u0a97\\u0ac1\\u0ab0\\u0ac1_\\u0ab6\\u0ac1\\u0a95\\u0acd\\u0ab0_\\u0ab6\\u0aa8\\u0abf\".split(\"_\"),weekdaysMin:\"\\u0ab0_\\u0ab8\\u0acb_\\u0aae\\u0a82_\\u0aac\\u0ac1_\\u0a97\\u0ac1_\\u0ab6\\u0ac1_\\u0ab6\".split(\"_\"),longDateFormat:{LT:\"A h:mm \\u0ab5\\u0abe\\u0a97\\u0acd\\u0aaf\\u0ac7\",LTS:\"A h:mm:ss \\u0ab5\\u0abe\\u0a97\\u0acd\\u0aaf\\u0ac7\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm \\u0ab5\\u0abe\\u0a97\\u0acd\\u0aaf\\u0ac7\",LLLL:\"dddd, D MMMM YYYY, A h:mm \\u0ab5\\u0abe\\u0a97\\u0acd\\u0aaf\\u0ac7\"},calendar:{sameDay:\"[\\u0a86\\u0a9c] LT\",nextDay:\"[\\u0a95\\u0abe\\u0ab2\\u0ac7] LT\",nextWeek:\"dddd, LT\",lastDay:\"[\\u0a97\\u0a87\\u0a95\\u0abe\\u0ab2\\u0ac7] LT\",lastWeek:\"[\\u0aaa\\u0abe\\u0a9b\\u0ab2\\u0abe] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s \\u0aae\\u0abe\",past:\"%s \\u0aaa\\u0ab9\\u0ac7\\u0ab2\\u0abe\",s:\"\\u0a85\\u0aae\\u0ac1\\u0a95 \\u0aaa\\u0ab3\\u0acb\",ss:\"%d \\u0ab8\\u0ac7\\u0a95\\u0a82\\u0aa1\",m:\"\\u0a8f\\u0a95 \\u0aae\\u0abf\\u0aa8\\u0abf\\u0a9f\",mm:\"%d \\u0aae\\u0abf\\u0aa8\\u0abf\\u0a9f\",h:\"\\u0a8f\\u0a95 \\u0a95\\u0ab2\\u0abe\\u0a95\",hh:\"%d \\u0a95\\u0ab2\\u0abe\\u0a95\",d:\"\\u0a8f\\u0a95 \\u0aa6\\u0abf\\u0ab5\\u0ab8\",dd:\"%d \\u0aa6\\u0abf\\u0ab5\\u0ab8\",M:\"\\u0a8f\\u0a95 \\u0aae\\u0ab9\\u0abf\\u0aa8\\u0acb\",MM:\"%d \\u0aae\\u0ab9\\u0abf\\u0aa8\\u0acb\",y:\"\\u0a8f\\u0a95 \\u0ab5\\u0ab0\\u0acd\\u0ab7\",yy:\"%d \\u0ab5\\u0ab0\\u0acd\\u0ab7\"},preparse:function(t){return t.replace(/[\\u0ae7\\u0ae8\\u0ae9\\u0aea\\u0aeb\\u0aec\\u0aed\\u0aee\\u0aef\\u0ae6]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\\d/g,(function(t){return e[t]}))},meridiemParse:/\\u0ab0\\u0abe\\u0aa4|\\u0aac\\u0aaa\\u0acb\\u0ab0|\\u0ab8\\u0ab5\\u0abe\\u0ab0|\\u0ab8\\u0abe\\u0a82\\u0a9c/,meridiemHour:function(t,e){return 12===t&&(t=0),\"\\u0ab0\\u0abe\\u0aa4\"===e?t<4?t:t+12:\"\\u0ab8\\u0ab5\\u0abe\\u0ab0\"===e?t:\"\\u0aac\\u0aaa\\u0acb\\u0ab0\"===e?t>=10?t:t+12:\"\\u0ab8\\u0abe\\u0a82\\u0a9c\"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?\"\\u0ab0\\u0abe\\u0aa4\":t<10?\"\\u0ab8\\u0ab5\\u0abe\\u0ab0\":t<17?\"\\u0aac\\u0aaa\\u0acb\\u0ab0\":t<20?\"\\u0ab8\\u0abe\\u0a82\\u0a9c\":\"\\u0ab0\\u0abe\\u0aa4\"},week:{dow:0,doy:6}})}(n(\"wd/R\"))},\"4dOw\":function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"en-ie\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?\"th\":1===e?\"st\":2===e?\"nd\":3===e?\"rd\":\"th\")},week:{dow:1,doy:4}})}(n(\"wd/R\"))},\"5+tZ\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return o}));var r=n(\"lJxs\"),i=n(\"Cfvw\"),a=n(\"zx2A\");function o(t,e,n=Number.POSITIVE_INFINITY){return\"function\"==typeof e?a=>a.pipe(o((n,a)=>Object(i.a)(t(n,a)).pipe(Object(r.a)((t,r)=>e(n,t,a,r))),n)):(\"number\"==typeof e&&(n=e),e=>e.lift(new s(t,n)))}class s{constructor(t,e=Number.POSITIVE_INFINITY){this.project=t,this.concurrent=e}call(t,e){return e.subscribe(new l(t,this.project,this.concurrent))}}class l extends a.b{constructor(t,e,n=Number.POSITIVE_INFINITY){super(t),this.project=e,this.concurrent=n,this.hasCompleted=!1,this.buffer=[],this.active=0,this.index=0}_next(t){this.active<this.concurrent?this._tryNext(t):this.buffer.push(t)}_tryNext(t){let e;const n=this.index++;try{e=this.project(t,n)}catch(r){return void this.destination.error(r)}this.active++,this._innerSub(e)}_innerSub(t){const e=new a.a(this),n=this.destination;n.add(e);const r=Object(a.c)(t,e);r!==e&&n.add(r)}_complete(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&this.destination.complete(),this.unsubscribe()}notifyNext(t){this.destination.next(t)}notifyComplete(){const t=this.buffer;this.active--,t.length>0?this._next(t.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()}}},\"6+QB\":function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"ms\",{months:\"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember\".split(\"_\"),monthsShort:\"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis\".split(\"_\"),weekdays:\"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu\".split(\"_\"),weekdaysShort:\"Ahd_Isn_Sel_Rab_Kha_Jum_Sab\".split(\"_\"),weekdaysMin:\"Ah_Is_Sl_Rb_Km_Jm_Sb\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [pukul] HH.mm\",LLLL:\"dddd, D MMMM YYYY [pukul] HH.mm\"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),\"pagi\"===e?t:\"tengahari\"===e?t>=11?t:t+12:\"petang\"===e||\"malam\"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?\"pagi\":t<15?\"tengahari\":t<19?\"petang\":\"malam\"},calendar:{sameDay:\"[Hari ini pukul] LT\",nextDay:\"[Esok pukul] LT\",nextWeek:\"dddd [pukul] LT\",lastDay:\"[Kelmarin pukul] LT\",lastWeek:\"dddd [lepas pukul] LT\",sameElse:\"L\"},relativeTime:{future:\"dalam %s\",past:\"%s yang lepas\",s:\"beberapa saat\",ss:\"%d saat\",m:\"seminit\",mm:\"%d minit\",h:\"sejam\",hh:\"%d jam\",d:\"sehari\",dd:\"%d hari\",M:\"sebulan\",MM:\"%d bulan\",y:\"setahun\",yy:\"%d tahun\"},week:{dow:1,doy:7}})}(n(\"wd/R\"))},\"6B0Y\":function(t,e,n){!function(t){\"use strict\";var e={1:\"\\u17e1\",2:\"\\u17e2\",3:\"\\u17e3\",4:\"\\u17e4\",5:\"\\u17e5\",6:\"\\u17e6\",7:\"\\u17e7\",8:\"\\u17e8\",9:\"\\u17e9\",0:\"\\u17e0\"},n={\"\\u17e1\":\"1\",\"\\u17e2\":\"2\",\"\\u17e3\":\"3\",\"\\u17e4\":\"4\",\"\\u17e5\":\"5\",\"\\u17e6\":\"6\",\"\\u17e7\":\"7\",\"\\u17e8\":\"8\",\"\\u17e9\":\"9\",\"\\u17e0\":\"0\"};t.defineLocale(\"km\",{months:\"\\u1798\\u1780\\u179a\\u17b6_\\u1780\\u17bb\\u1798\\u17d2\\u1797\\u17c8_\\u1798\\u17b8\\u1793\\u17b6_\\u1798\\u17c1\\u179f\\u17b6_\\u17a7\\u179f\\u1797\\u17b6_\\u1798\\u17b7\\u1790\\u17bb\\u1793\\u17b6_\\u1780\\u1780\\u17d2\\u1780\\u178a\\u17b6_\\u179f\\u17b8\\u17a0\\u17b6_\\u1780\\u1789\\u17d2\\u1789\\u17b6_\\u178f\\u17bb\\u179b\\u17b6_\\u179c\\u17b7\\u1785\\u17d2\\u1786\\u17b7\\u1780\\u17b6_\\u1792\\u17d2\\u1793\\u17bc\".split(\"_\"),monthsShort:\"\\u1798\\u1780\\u179a\\u17b6_\\u1780\\u17bb\\u1798\\u17d2\\u1797\\u17c8_\\u1798\\u17b8\\u1793\\u17b6_\\u1798\\u17c1\\u179f\\u17b6_\\u17a7\\u179f\\u1797\\u17b6_\\u1798\\u17b7\\u1790\\u17bb\\u1793\\u17b6_\\u1780\\u1780\\u17d2\\u1780\\u178a\\u17b6_\\u179f\\u17b8\\u17a0\\u17b6_\\u1780\\u1789\\u17d2\\u1789\\u17b6_\\u178f\\u17bb\\u179b\\u17b6_\\u179c\\u17b7\\u1785\\u17d2\\u1786\\u17b7\\u1780\\u17b6_\\u1792\\u17d2\\u1793\\u17bc\".split(\"_\"),weekdays:\"\\u17a2\\u17b6\\u1791\\u17b7\\u178f\\u17d2\\u1799_\\u1785\\u17d0\\u1793\\u17d2\\u1791_\\u17a2\\u1784\\u17d2\\u1782\\u17b6\\u179a_\\u1796\\u17bb\\u1792_\\u1796\\u17d2\\u179a\\u17a0\\u179f\\u17d2\\u1794\\u178f\\u17b7\\u17cd_\\u179f\\u17bb\\u1780\\u17d2\\u179a_\\u179f\\u17c5\\u179a\\u17cd\".split(\"_\"),weekdaysShort:\"\\u17a2\\u17b6_\\u1785_\\u17a2_\\u1796_\\u1796\\u17d2\\u179a_\\u179f\\u17bb_\\u179f\".split(\"_\"),weekdaysMin:\"\\u17a2\\u17b6_\\u1785_\\u17a2_\\u1796_\\u1796\\u17d2\\u179a_\\u179f\\u17bb_\\u179f\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},meridiemParse:/\\u1796\\u17d2\\u179a\\u17b9\\u1780|\\u179b\\u17d2\\u1784\\u17b6\\u1785/,isPM:function(t){return\"\\u179b\\u17d2\\u1784\\u17b6\\u1785\"===t},meridiem:function(t,e,n){return t<12?\"\\u1796\\u17d2\\u179a\\u17b9\\u1780\":\"\\u179b\\u17d2\\u1784\\u17b6\\u1785\"},calendar:{sameDay:\"[\\u1790\\u17d2\\u1784\\u17c3\\u1793\\u17c1\\u17c7 \\u1798\\u17c9\\u17c4\\u1784] LT\",nextDay:\"[\\u179f\\u17d2\\u17a2\\u17c2\\u1780 \\u1798\\u17c9\\u17c4\\u1784] LT\",nextWeek:\"dddd [\\u1798\\u17c9\\u17c4\\u1784] LT\",lastDay:\"[\\u1798\\u17d2\\u179f\\u17b7\\u179b\\u1798\\u17b7\\u1789 \\u1798\\u17c9\\u17c4\\u1784] LT\",lastWeek:\"dddd [\\u179f\\u1794\\u17d2\\u178f\\u17b6\\u17a0\\u17cd\\u1798\\u17bb\\u1793] [\\u1798\\u17c9\\u17c4\\u1784] LT\",sameElse:\"L\"},relativeTime:{future:\"%s\\u1791\\u17c0\\u178f\",past:\"%s\\u1798\\u17bb\\u1793\",s:\"\\u1794\\u17c9\\u17bb\\u1793\\u17d2\\u1798\\u17b6\\u1793\\u179c\\u17b7\\u1793\\u17b6\\u1791\\u17b8\",ss:\"%d \\u179c\\u17b7\\u1793\\u17b6\\u1791\\u17b8\",m:\"\\u1798\\u17bd\\u1799\\u1793\\u17b6\\u1791\\u17b8\",mm:\"%d \\u1793\\u17b6\\u1791\\u17b8\",h:\"\\u1798\\u17bd\\u1799\\u1798\\u17c9\\u17c4\\u1784\",hh:\"%d \\u1798\\u17c9\\u17c4\\u1784\",d:\"\\u1798\\u17bd\\u1799\\u1790\\u17d2\\u1784\\u17c3\",dd:\"%d \\u1790\\u17d2\\u1784\\u17c3\",M:\"\\u1798\\u17bd\\u1799\\u1781\\u17c2\",MM:\"%d \\u1781\\u17c2\",y:\"\\u1798\\u17bd\\u1799\\u1786\\u17d2\\u1793\\u17b6\\u17c6\",yy:\"%d \\u1786\\u17d2\\u1793\\u17b6\\u17c6\"},dayOfMonthOrdinalParse:/\\u1791\\u17b8\\d{1,2}/,ordinal:\"\\u1791\\u17b8%d\",preparse:function(t){return t.replace(/[\\u17e1\\u17e2\\u17e3\\u17e4\\u17e5\\u17e6\\u17e7\\u17e8\\u17e9\\u17e0]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\\d/g,(function(t){return e[t]}))},week:{dow:1,doy:4}})}(n(\"wd/R\"))},\"7+OI\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));var r=n(\"HDdC\");function i(t){return!!t&&(t instanceof r.a||\"function\"==typeof t.lift&&\"function\"==typeof t.subscribe)}},\"7BjC\":function(t,e,n){!function(t){\"use strict\";function e(t,e,n,r){var i={s:[\"m\\xf5ne sekundi\",\"m\\xf5ni sekund\",\"paar sekundit\"],ss:[t+\"sekundi\",t+\"sekundit\"],m:[\"\\xfche minuti\",\"\\xfcks minut\"],mm:[t+\" minuti\",t+\" minutit\"],h:[\"\\xfche tunni\",\"tund aega\",\"\\xfcks tund\"],hh:[t+\" tunni\",t+\" tundi\"],d:[\"\\xfche p\\xe4eva\",\"\\xfcks p\\xe4ev\"],M:[\"kuu aja\",\"kuu aega\",\"\\xfcks kuu\"],MM:[t+\" kuu\",t+\" kuud\"],y:[\"\\xfche aasta\",\"aasta\",\"\\xfcks aasta\"],yy:[t+\" aasta\",t+\" aastat\"]};return e?i[n][2]?i[n][2]:i[n][1]:r?i[n][0]:i[n][1]}t.defineLocale(\"et\",{months:\"jaanuar_veebruar_m\\xe4rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember\".split(\"_\"),monthsShort:\"jaan_veebr_m\\xe4rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets\".split(\"_\"),weekdays:\"p\\xfchap\\xe4ev_esmasp\\xe4ev_teisip\\xe4ev_kolmap\\xe4ev_neljap\\xe4ev_reede_laup\\xe4ev\".split(\"_\"),weekdaysShort:\"P_E_T_K_N_R_L\".split(\"_\"),weekdaysMin:\"P_E_T_K_N_R_L\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[T\\xe4na,] LT\",nextDay:\"[Homme,] LT\",nextWeek:\"[J\\xe4rgmine] dddd LT\",lastDay:\"[Eile,] LT\",lastWeek:\"[Eelmine] dddd LT\",sameElse:\"L\"},relativeTime:{future:\"%s p\\xe4rast\",past:\"%s tagasi\",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:\"%d p\\xe4eva\",M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},\"7C5Q\":function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"en-in\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?\"th\":1===e?\"st\":2===e?\"nd\":3===e?\"rd\":\"th\")},week:{dow:0,doy:6}})}(n(\"wd/R\"))},\"7Hc7\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return d}));let r=1;const i=(()=>Promise.resolve())(),a={};function o(t){return t in a&&(delete a[t],!0)}const s={setImmediate(t){const e=r++;return a[e]=!0,i.then(()=>o(e)&&t()),e},clearImmediate(t){o(t)}};var l=n(\"3N8a\");class c extends l.a{constructor(t,e){super(t,e),this.scheduler=t,this.work=e}requestAsyncId(t,e,n=0){return null!==n&&n>0?super.requestAsyncId(t,e,n):(t.actions.push(this),t.scheduled||(t.scheduled=s.setImmediate(t.flush.bind(t,null))))}recycleAsyncId(t,e,n=0){if(null!==n&&n>0||null===n&&this.delay>0)return super.recycleAsyncId(t,e,n);0===t.actions.length&&(s.clearImmediate(e),t.scheduled=void 0)}}var u=n(\"IjjT\");class h extends u.a{flush(t){this.active=!0,this.scheduled=void 0;const{actions:e}=this;let n,r=-1,i=e.length;t=t||e.shift();do{if(n=t.execute(t.state,t.delay))break}while(++r<i&&(t=e.shift()));if(this.active=!1,n){for(;++r<i&&(t=e.shift());)t.unsubscribe();throw n}}}const d=new h(c)},\"7aV9\":function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"si\",{months:\"\\u0da2\\u0db1\\u0dc0\\u0dcf\\u0dbb\\u0dd2_\\u0db4\\u0dd9\\u0db6\\u0dbb\\u0dc0\\u0dcf\\u0dbb\\u0dd2_\\u0db8\\u0dcf\\u0dbb\\u0dca\\u0dad\\u0dd4_\\u0d85\\u0db4\\u0dca\\u200d\\u0dbb\\u0dda\\u0dbd\\u0dca_\\u0db8\\u0dd0\\u0dba\\u0dd2_\\u0da2\\u0dd6\\u0db1\\u0dd2_\\u0da2\\u0dd6\\u0dbd\\u0dd2_\\u0d85\\u0d9c\\u0ddd\\u0dc3\\u0dca\\u0dad\\u0dd4_\\u0dc3\\u0dd0\\u0db4\\u0dca\\u0dad\\u0dd0\\u0db8\\u0dca\\u0db6\\u0dbb\\u0dca_\\u0d94\\u0d9a\\u0dca\\u0dad\\u0ddd\\u0db6\\u0dbb\\u0dca_\\u0db1\\u0ddc\\u0dc0\\u0dd0\\u0db8\\u0dca\\u0db6\\u0dbb\\u0dca_\\u0daf\\u0dd9\\u0dc3\\u0dd0\\u0db8\\u0dca\\u0db6\\u0dbb\\u0dca\".split(\"_\"),monthsShort:\"\\u0da2\\u0db1_\\u0db4\\u0dd9\\u0db6_\\u0db8\\u0dcf\\u0dbb\\u0dca_\\u0d85\\u0db4\\u0dca_\\u0db8\\u0dd0\\u0dba\\u0dd2_\\u0da2\\u0dd6\\u0db1\\u0dd2_\\u0da2\\u0dd6\\u0dbd\\u0dd2_\\u0d85\\u0d9c\\u0ddd_\\u0dc3\\u0dd0\\u0db4\\u0dca_\\u0d94\\u0d9a\\u0dca_\\u0db1\\u0ddc\\u0dc0\\u0dd0_\\u0daf\\u0dd9\\u0dc3\\u0dd0\".split(\"_\"),weekdays:\"\\u0d89\\u0dbb\\u0dd2\\u0daf\\u0dcf_\\u0dc3\\u0db3\\u0dd4\\u0daf\\u0dcf_\\u0d85\\u0d9f\\u0dc4\\u0dbb\\u0dd4\\u0dc0\\u0dcf\\u0daf\\u0dcf_\\u0db6\\u0daf\\u0dcf\\u0daf\\u0dcf_\\u0db6\\u0dca\\u200d\\u0dbb\\u0dc4\\u0dc3\\u0dca\\u0db4\\u0dad\\u0dd2\\u0db1\\u0dca\\u0daf\\u0dcf_\\u0dc3\\u0dd2\\u0d9a\\u0dd4\\u0dbb\\u0dcf\\u0daf\\u0dcf_\\u0dc3\\u0dd9\\u0db1\\u0dc3\\u0dd4\\u0dbb\\u0dcf\\u0daf\\u0dcf\".split(\"_\"),weekdaysShort:\"\\u0d89\\u0dbb\\u0dd2_\\u0dc3\\u0db3\\u0dd4_\\u0d85\\u0d9f_\\u0db6\\u0daf\\u0dcf_\\u0db6\\u0dca\\u200d\\u0dbb\\u0dc4_\\u0dc3\\u0dd2\\u0d9a\\u0dd4_\\u0dc3\\u0dd9\\u0db1\".split(\"_\"),weekdaysMin:\"\\u0d89_\\u0dc3_\\u0d85_\\u0db6_\\u0db6\\u0dca\\u200d\\u0dbb_\\u0dc3\\u0dd2_\\u0dc3\\u0dd9\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"a h:mm\",LTS:\"a h:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY MMMM D\",LLL:\"YYYY MMMM D, a h:mm\",LLLL:\"YYYY MMMM D [\\u0dc0\\u0dd0\\u0db1\\u0dd2] dddd, a h:mm:ss\"},calendar:{sameDay:\"[\\u0d85\\u0daf] LT[\\u0da7]\",nextDay:\"[\\u0dc4\\u0dd9\\u0da7] LT[\\u0da7]\",nextWeek:\"dddd LT[\\u0da7]\",lastDay:\"[\\u0d8a\\u0dba\\u0dda] LT[\\u0da7]\",lastWeek:\"[\\u0db4\\u0dc3\\u0dd4\\u0d9c\\u0dd2\\u0dba] dddd LT[\\u0da7]\",sameElse:\"L\"},relativeTime:{future:\"%s\\u0d9a\\u0dd2\\u0db1\\u0dca\",past:\"%s\\u0d9a\\u0da7 \\u0db4\\u0dd9\\u0dbb\",s:\"\\u0dad\\u0dad\\u0dca\\u0db4\\u0dbb \\u0d9a\\u0dd2\\u0dc4\\u0dd2\\u0db4\\u0dba\",ss:\"\\u0dad\\u0dad\\u0dca\\u0db4\\u0dbb %d\",m:\"\\u0db8\\u0dd2\\u0db1\\u0dd2\\u0dad\\u0dca\\u0dad\\u0dd4\\u0dc0\",mm:\"\\u0db8\\u0dd2\\u0db1\\u0dd2\\u0dad\\u0dca\\u0dad\\u0dd4 %d\",h:\"\\u0db4\\u0dd0\\u0dba\",hh:\"\\u0db4\\u0dd0\\u0dba %d\",d:\"\\u0daf\\u0dd2\\u0db1\\u0dba\",dd:\"\\u0daf\\u0dd2\\u0db1 %d\",M:\"\\u0db8\\u0dcf\\u0dc3\\u0dba\",MM:\"\\u0db8\\u0dcf\\u0dc3 %d\",y:\"\\u0dc0\\u0dc3\\u0dbb\",yy:\"\\u0dc0\\u0dc3\\u0dbb %d\"},dayOfMonthOrdinalParse:/\\d{1,2} \\u0dc0\\u0dd0\\u0db1\\u0dd2/,ordinal:function(t){return t+\" \\u0dc0\\u0dd0\\u0db1\\u0dd2\"},meridiemParse:/\\u0db4\\u0dd9\\u0dbb \\u0dc0\\u0dbb\\u0dd4|\\u0db4\\u0dc3\\u0dca \\u0dc0\\u0dbb\\u0dd4|\\u0db4\\u0dd9.\\u0dc0|\\u0db4.\\u0dc0./,isPM:function(t){return\"\\u0db4.\\u0dc0.\"===t||\"\\u0db4\\u0dc3\\u0dca \\u0dc0\\u0dbb\\u0dd4\"===t},meridiem:function(t,e,n){return t>11?n?\"\\u0db4.\\u0dc0.\":\"\\u0db4\\u0dc3\\u0dca \\u0dc0\\u0dbb\\u0dd4\":n?\"\\u0db4\\u0dd9.\\u0dc0.\":\"\\u0db4\\u0dd9\\u0dbb \\u0dc0\\u0dbb\\u0dd4\"}})}(n(\"wd/R\"))},\"7o/Q\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return c}));var r=n(\"n6bG\"),i=n(\"gRHU\"),a=n(\"quSY\"),o=n(\"2QA8\"),s=n(\"2fFW\"),l=n(\"NJ4a\");class c extends a.a{constructor(t,e,n){switch(super(),this.syncErrorValue=null,this.syncErrorThrown=!1,this.syncErrorThrowable=!1,this.isStopped=!1,arguments.length){case 0:this.destination=i.a;break;case 1:if(!t){this.destination=i.a;break}if(\"object\"==typeof t){t instanceof c?(this.syncErrorThrowable=t.syncErrorThrowable,this.destination=t,t.add(this)):(this.syncErrorThrowable=!0,this.destination=new u(this,t));break}default:this.syncErrorThrowable=!0,this.destination=new u(this,t,e,n)}}[o.a](){return this}static create(t,e,n){const r=new c(t,e,n);return r.syncErrorThrowable=!1,r}next(t){this.isStopped||this._next(t)}error(t){this.isStopped||(this.isStopped=!0,this._error(t))}complete(){this.isStopped||(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe())}_next(t){this.destination.next(t)}_error(t){this.destination.error(t),this.unsubscribe()}_complete(){this.destination.complete(),this.unsubscribe()}_unsubscribeAndRecycle(){const{_parentOrParents:t}=this;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=t,this}}class u extends c{constructor(t,e,n,a){let o;super(),this._parentSubscriber=t;let s=this;Object(r.a)(e)?o=e:e&&(o=e.next,n=e.error,a=e.complete,e!==i.a&&(s=Object.create(e),Object(r.a)(s.unsubscribe)&&this.add(s.unsubscribe.bind(s)),s.unsubscribe=this.unsubscribe.bind(this))),this._context=s,this._next=o,this._error=n,this._complete=a}next(t){if(!this.isStopped&&this._next){const{_parentSubscriber:e}=this;s.a.useDeprecatedSynchronousErrorHandling&&e.syncErrorThrowable?this.__tryOrSetError(e,this._next,t)&&this.unsubscribe():this.__tryOrUnsub(this._next,t)}}error(t){if(!this.isStopped){const{_parentSubscriber:e}=this,{useDeprecatedSynchronousErrorHandling:n}=s.a;if(this._error)n&&e.syncErrorThrowable?(this.__tryOrSetError(e,this._error,t),this.unsubscribe()):(this.__tryOrUnsub(this._error,t),this.unsubscribe());else if(e.syncErrorThrowable)n?(e.syncErrorValue=t,e.syncErrorThrown=!0):Object(l.a)(t),this.unsubscribe();else{if(this.unsubscribe(),n)throw t;Object(l.a)(t)}}}complete(){if(!this.isStopped){const{_parentSubscriber:t}=this;if(this._complete){const e=()=>this._complete.call(this._context);s.a.useDeprecatedSynchronousErrorHandling&&t.syncErrorThrowable?(this.__tryOrSetError(t,e),this.unsubscribe()):(this.__tryOrUnsub(e),this.unsubscribe())}else this.unsubscribe()}}__tryOrUnsub(t,e){try{t.call(this._context,e)}catch(n){if(this.unsubscribe(),s.a.useDeprecatedSynchronousErrorHandling)throw n;Object(l.a)(n)}}__tryOrSetError(t,e,n){if(!s.a.useDeprecatedSynchronousErrorHandling)throw new Error(\"bad call\");try{e.call(this._context,n)}catch(r){return s.a.useDeprecatedSynchronousErrorHandling?(t.syncErrorValue=r,t.syncErrorThrown=!0,!0):(Object(l.a)(r),!0)}return!1}_unsubscribe(){const{_parentSubscriber:t}=this;this._context=null,this._parentSubscriber=null,t.unsubscribe()}}},\"8/+R\":function(t,e,n){!function(t){\"use strict\";var e={1:\"\\u0a67\",2:\"\\u0a68\",3:\"\\u0a69\",4:\"\\u0a6a\",5:\"\\u0a6b\",6:\"\\u0a6c\",7:\"\\u0a6d\",8:\"\\u0a6e\",9:\"\\u0a6f\",0:\"\\u0a66\"},n={\"\\u0a67\":\"1\",\"\\u0a68\":\"2\",\"\\u0a69\":\"3\",\"\\u0a6a\":\"4\",\"\\u0a6b\":\"5\",\"\\u0a6c\":\"6\",\"\\u0a6d\":\"7\",\"\\u0a6e\":\"8\",\"\\u0a6f\":\"9\",\"\\u0a66\":\"0\"};t.defineLocale(\"pa-in\",{months:\"\\u0a1c\\u0a28\\u0a35\\u0a30\\u0a40_\\u0a2b\\u0a3c\\u0a30\\u0a35\\u0a30\\u0a40_\\u0a2e\\u0a3e\\u0a30\\u0a1a_\\u0a05\\u0a2a\\u0a4d\\u0a30\\u0a48\\u0a32_\\u0a2e\\u0a08_\\u0a1c\\u0a42\\u0a28_\\u0a1c\\u0a41\\u0a32\\u0a3e\\u0a08_\\u0a05\\u0a17\\u0a38\\u0a24_\\u0a38\\u0a24\\u0a70\\u0a2c\\u0a30_\\u0a05\\u0a15\\u0a24\\u0a42\\u0a2c\\u0a30_\\u0a28\\u0a35\\u0a70\\u0a2c\\u0a30_\\u0a26\\u0a38\\u0a70\\u0a2c\\u0a30\".split(\"_\"),monthsShort:\"\\u0a1c\\u0a28\\u0a35\\u0a30\\u0a40_\\u0a2b\\u0a3c\\u0a30\\u0a35\\u0a30\\u0a40_\\u0a2e\\u0a3e\\u0a30\\u0a1a_\\u0a05\\u0a2a\\u0a4d\\u0a30\\u0a48\\u0a32_\\u0a2e\\u0a08_\\u0a1c\\u0a42\\u0a28_\\u0a1c\\u0a41\\u0a32\\u0a3e\\u0a08_\\u0a05\\u0a17\\u0a38\\u0a24_\\u0a38\\u0a24\\u0a70\\u0a2c\\u0a30_\\u0a05\\u0a15\\u0a24\\u0a42\\u0a2c\\u0a30_\\u0a28\\u0a35\\u0a70\\u0a2c\\u0a30_\\u0a26\\u0a38\\u0a70\\u0a2c\\u0a30\".split(\"_\"),weekdays:\"\\u0a10\\u0a24\\u0a35\\u0a3e\\u0a30_\\u0a38\\u0a4b\\u0a2e\\u0a35\\u0a3e\\u0a30_\\u0a2e\\u0a70\\u0a17\\u0a32\\u0a35\\u0a3e\\u0a30_\\u0a2c\\u0a41\\u0a27\\u0a35\\u0a3e\\u0a30_\\u0a35\\u0a40\\u0a30\\u0a35\\u0a3e\\u0a30_\\u0a38\\u0a3c\\u0a41\\u0a71\\u0a15\\u0a30\\u0a35\\u0a3e\\u0a30_\\u0a38\\u0a3c\\u0a28\\u0a40\\u0a1a\\u0a30\\u0a35\\u0a3e\\u0a30\".split(\"_\"),weekdaysShort:\"\\u0a10\\u0a24_\\u0a38\\u0a4b\\u0a2e_\\u0a2e\\u0a70\\u0a17\\u0a32_\\u0a2c\\u0a41\\u0a27_\\u0a35\\u0a40\\u0a30_\\u0a38\\u0a3c\\u0a41\\u0a15\\u0a30_\\u0a38\\u0a3c\\u0a28\\u0a40\".split(\"_\"),weekdaysMin:\"\\u0a10\\u0a24_\\u0a38\\u0a4b\\u0a2e_\\u0a2e\\u0a70\\u0a17\\u0a32_\\u0a2c\\u0a41\\u0a27_\\u0a35\\u0a40\\u0a30_\\u0a38\\u0a3c\\u0a41\\u0a15\\u0a30_\\u0a38\\u0a3c\\u0a28\\u0a40\".split(\"_\"),longDateFormat:{LT:\"A h:mm \\u0a35\\u0a1c\\u0a47\",LTS:\"A h:mm:ss \\u0a35\\u0a1c\\u0a47\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm \\u0a35\\u0a1c\\u0a47\",LLLL:\"dddd, D MMMM YYYY, A h:mm \\u0a35\\u0a1c\\u0a47\"},calendar:{sameDay:\"[\\u0a05\\u0a1c] LT\",nextDay:\"[\\u0a15\\u0a32] LT\",nextWeek:\"[\\u0a05\\u0a17\\u0a32\\u0a3e] dddd, LT\",lastDay:\"[\\u0a15\\u0a32] LT\",lastWeek:\"[\\u0a2a\\u0a3f\\u0a1b\\u0a32\\u0a47] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s \\u0a35\\u0a3f\\u0a71\\u0a1a\",past:\"%s \\u0a2a\\u0a3f\\u0a1b\\u0a32\\u0a47\",s:\"\\u0a15\\u0a41\\u0a1d \\u0a38\\u0a15\\u0a3f\\u0a70\\u0a1f\",ss:\"%d \\u0a38\\u0a15\\u0a3f\\u0a70\\u0a1f\",m:\"\\u0a07\\u0a15 \\u0a2e\\u0a3f\\u0a70\\u0a1f\",mm:\"%d \\u0a2e\\u0a3f\\u0a70\\u0a1f\",h:\"\\u0a07\\u0a71\\u0a15 \\u0a18\\u0a70\\u0a1f\\u0a3e\",hh:\"%d \\u0a18\\u0a70\\u0a1f\\u0a47\",d:\"\\u0a07\\u0a71\\u0a15 \\u0a26\\u0a3f\\u0a28\",dd:\"%d \\u0a26\\u0a3f\\u0a28\",M:\"\\u0a07\\u0a71\\u0a15 \\u0a2e\\u0a39\\u0a40\\u0a28\\u0a3e\",MM:\"%d \\u0a2e\\u0a39\\u0a40\\u0a28\\u0a47\",y:\"\\u0a07\\u0a71\\u0a15 \\u0a38\\u0a3e\\u0a32\",yy:\"%d \\u0a38\\u0a3e\\u0a32\"},preparse:function(t){return t.replace(/[\\u0a67\\u0a68\\u0a69\\u0a6a\\u0a6b\\u0a6c\\u0a6d\\u0a6e\\u0a6f\\u0a66]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\\d/g,(function(t){return e[t]}))},meridiemParse:/\\u0a30\\u0a3e\\u0a24|\\u0a38\\u0a35\\u0a47\\u0a30|\\u0a26\\u0a41\\u0a2a\\u0a39\\u0a3f\\u0a30|\\u0a38\\u0a3c\\u0a3e\\u0a2e/,meridiemHour:function(t,e){return 12===t&&(t=0),\"\\u0a30\\u0a3e\\u0a24\"===e?t<4?t:t+12:\"\\u0a38\\u0a35\\u0a47\\u0a30\"===e?t:\"\\u0a26\\u0a41\\u0a2a\\u0a39\\u0a3f\\u0a30\"===e?t>=10?t:t+12:\"\\u0a38\\u0a3c\\u0a3e\\u0a2e\"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?\"\\u0a30\\u0a3e\\u0a24\":t<10?\"\\u0a38\\u0a35\\u0a47\\u0a30\":t<17?\"\\u0a26\\u0a41\\u0a2a\\u0a39\\u0a3f\\u0a30\":t<20?\"\\u0a38\\u0a3c\\u0a3e\\u0a2e\":\"\\u0a30\\u0a3e\\u0a24\"},week:{dow:0,doy:6}})}(n(\"wd/R\"))},\"8LU1\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return o})),n.d(e,\"b\",(function(){return s})),n.d(e,\"c\",(function(){return i})),n.d(e,\"d\",(function(){return l})),n.d(e,\"e\",(function(){return c})),n.d(e,\"f\",(function(){return a})),n.d(e,\"g\",(function(){return u}));var r=n(\"fXoL\");function i(t){return null!=t&&\"\"+t!=\"false\"}function a(t,e=0){return o(t)?Number(t):e}function o(t){return!isNaN(parseFloat(t))&&!isNaN(Number(t))}function s(t){return Array.isArray(t)?t:[t]}function l(t){return null==t?\"\":\"string\"==typeof t?t:t+\"px\"}function c(t){return t instanceof r.p?t.nativeElement:t}function u(t,e=/\\s+/){const n=[];if(null!=t){const r=Array.isArray(t)?t:(\"\"+t).split(e);for(const t of r){const e=(\"\"+t).trim();e&&n.push(e)}}return n}},\"8mBD\":function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"pt\",{months:\"janeiro_fevereiro_mar\\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro\".split(\"_\"),monthsShort:\"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez\".split(\"_\"),weekdays:\"Domingo_Segunda-feira_Ter\\xe7a-feira_Quarta-feira_Quinta-feira_Sexta-feira_S\\xe1bado\".split(\"_\"),weekdaysShort:\"Dom_Seg_Ter_Qua_Qui_Sex_S\\xe1b\".split(\"_\"),weekdaysMin:\"Do_2\\xaa_3\\xaa_4\\xaa_5\\xaa_6\\xaa_S\\xe1\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY HH:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY HH:mm\"},calendar:{sameDay:\"[Hoje \\xe0s] LT\",nextDay:\"[Amanh\\xe3 \\xe0s] LT\",nextWeek:\"dddd [\\xe0s] LT\",lastDay:\"[Ontem \\xe0s] LT\",lastWeek:function(){return 0===this.day()||6===this.day()?\"[\\xdaltimo] dddd [\\xe0s] LT\":\"[\\xdaltima] dddd [\\xe0s] LT\"},sameElse:\"L\"},relativeTime:{future:\"em %s\",past:\"h\\xe1 %s\",s:\"segundos\",ss:\"%d segundos\",m:\"um minuto\",mm:\"%d minutos\",h:\"uma hora\",hh:\"%d horas\",d:\"um dia\",dd:\"%d dias\",w:\"uma semana\",ww:\"%d semanas\",M:\"um m\\xeas\",MM:\"%d meses\",y:\"um ano\",yy:\"%d anos\"},dayOfMonthOrdinalParse:/\\d{1,2}\\xba/,ordinal:\"%d\\xba\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},\"93C2\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));var r=n(\"fXoL\");let i=(()=>{class t{transform(t){if(t>0&&t>60){const e=Math.floor(t/60);return t%2!=0?`${e}min ${t-60*e}s`:e+\"min\"}return t+\"s\"}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275pipe=r.Wb({name:\"secToMin\",type:t,pure:!0}),t})()},\"95T3\":function(t,e,n){t.exports=function t(e,n,r){function i(o,s){if(!n[o]){if(!e[o]){if(a)return a(o,!0);var l=new Error(\"Cannot find module '\"+o+\"'\");throw l.code=\"MODULE_NOT_FOUND\",l}var c=n[o]={exports:{}};e[o][0].call(c.exports,(function(t){return i(e[o][1][t]||t)}),c,c.exports,t,e,n,r)}return n[o].exports}for(var a=!1,o=0;o<r.length;o++)i(r[o]);return i}({1:[function(t,e,n){\"use strict\";var r=t(\"../src/lib\"),i={\"X,X div\":\"direction:ltr;font-family:'Open Sans', verdana, arial, sans-serif;margin:0;padding:0;\",\"X input,X button\":\"font-family:'Open Sans', verdana, arial, sans-serif;\",\"X input:focus,X button:focus\":\"outline:none;\",\"X a\":\"text-decoration:none;\",\"X a:hover\":\"text-decoration:none;\",\"X .crisp\":\"shape-rendering:crispEdges;\",\"X .user-select-none\":\"-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;\",\"X svg\":\"overflow:hidden;\",\"X svg a\":\"fill:#447adb;\",\"X svg a:hover\":\"fill:#3c6dc5;\",\"X .main-svg\":\"position:absolute;top:0;left:0;pointer-events:none;\",\"X .main-svg .draglayer\":\"pointer-events:all;\",\"X .cursor-default\":\"cursor:default;\",\"X .cursor-pointer\":\"cursor:pointer;\",\"X .cursor-crosshair\":\"cursor:crosshair;\",\"X .cursor-move\":\"cursor:move;\",\"X .cursor-col-resize\":\"cursor:col-resize;\",\"X .cursor-row-resize\":\"cursor:row-resize;\",\"X .cursor-ns-resize\":\"cursor:ns-resize;\",\"X .cursor-ew-resize\":\"cursor:ew-resize;\",\"X .cursor-sw-resize\":\"cursor:sw-resize;\",\"X .cursor-s-resize\":\"cursor:s-resize;\",\"X .cursor-se-resize\":\"cursor:se-resize;\",\"X .cursor-w-resize\":\"cursor:w-resize;\",\"X .cursor-e-resize\":\"cursor:e-resize;\",\"X .cursor-nw-resize\":\"cursor:nw-resize;\",\"X .cursor-n-resize\":\"cursor:n-resize;\",\"X .cursor-ne-resize\":\"cursor:ne-resize;\",\"X .cursor-grab\":\"cursor:-webkit-grab;cursor:grab;\",\"X .modebar\":\"position:absolute;top:2px;right:2px;\",\"X .ease-bg\":\"-webkit-transition:background-color 0.3s ease 0s;-moz-transition:background-color 0.3s ease 0s;-ms-transition:background-color 0.3s ease 0s;-o-transition:background-color 0.3s ease 0s;transition:background-color 0.3s ease 0s;\",\"X .modebar--hover>:not(.watermark)\":\"opacity:0;-webkit-transition:opacity 0.3s ease 0s;-moz-transition:opacity 0.3s ease 0s;-ms-transition:opacity 0.3s ease 0s;-o-transition:opacity 0.3s ease 0s;transition:opacity 0.3s ease 0s;\",\"X:hover .modebar--hover .modebar-group\":\"opacity:1;\",\"X .modebar-group\":\"float:left;display:inline-block;box-sizing:border-box;padding-left:8px;position:relative;vertical-align:middle;white-space:nowrap;\",\"X .modebar-btn\":\"position:relative;font-size:16px;padding:3px 4px;height:22px;cursor:pointer;line-height:normal;box-sizing:border-box;\",\"X .modebar-btn svg\":\"position:relative;top:2px;\",\"X .modebar.vertical\":\"display:flex;flex-direction:column;flex-wrap:wrap;align-content:flex-end;max-height:100%;\",\"X .modebar.vertical svg\":\"top:-1px;\",\"X .modebar.vertical .modebar-group\":\"display:block;float:none;padding-left:0px;padding-bottom:8px;\",\"X .modebar.vertical .modebar-group .modebar-btn\":\"display:block;text-align:center;\",\"X [data-title]:before,X [data-title]:after\":\"position:absolute;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);display:none;opacity:0;z-index:1001;pointer-events:none;top:110%;right:50%;\",\"X [data-title]:hover:before,X [data-title]:hover:after\":\"display:block;opacity:1;\",\"X [data-title]:before\":\"content:'';position:absolute;background:transparent;border:6px solid transparent;z-index:1002;margin-top:-12px;border-bottom-color:#69738a;margin-right:-6px;\",\"X [data-title]:after\":\"content:attr(data-title);background:#69738a;color:white;padding:8px 10px;font-size:12px;line-height:12px;white-space:nowrap;margin-right:-18px;border-radius:2px;\",\"X .vertical [data-title]:before,X .vertical [data-title]:after\":\"top:0%;right:200%;\",\"X .vertical [data-title]:before\":\"border:6px solid transparent;border-left-color:#69738a;margin-top:8px;margin-right:-30px;\",\"X .select-outline\":\"fill:none;stroke-width:1;shape-rendering:crispEdges;\",\"X .select-outline-1\":\"stroke:white;\",\"X .select-outline-2\":\"stroke:black;stroke-dasharray:2px 2px;\",Y:\"font-family:'Open Sans', verdana, arial, sans-serif;position:fixed;top:50px;right:20px;z-index:10000;font-size:10pt;max-width:180px;\",\"Y p\":\"margin:0;\",\"Y .notifier-note\":\"min-width:180px;max-width:250px;border:1px solid #fff;z-index:3000;margin:0;background-color:#8c97af;background-color:rgba(140,151,175,0.9);color:#fff;padding:10px;overflow-wrap:break-word;word-wrap:break-word;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;\",\"Y .notifier-close\":\"color:#fff;opacity:0.8;float:right;padding:0 5px;background:none;border:none;font-size:20px;font-weight:bold;line-height:20px;\",\"Y .notifier-close:hover\":\"color:#444;text-decoration:none;cursor:pointer;\"};for(var a in i){var o=a.replace(/^,/,\" ,\").replace(/X/g,\".js-plotly-plot .plotly\").replace(/Y/g,\".plotly-notifier\");r.addStyleRule(o,i[a])}},{\"../src/lib\":778}],2:[function(t,e,n){\"use strict\";e.exports=t(\"../src/transforms/aggregate\")},{\"../src/transforms/aggregate\":1365}],3:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/bar\")},{\"../src/traces/bar\":929}],4:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/barpolar\")},{\"../src/traces/barpolar\":942}],5:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/box\")},{\"../src/traces/box\":952}],6:[function(t,e,n){\"use strict\";e.exports=t(\"../src/components/calendars\")},{\"../src/components/calendars\":641}],7:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/candlestick\")},{\"../src/traces/candlestick\":961}],8:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/carpet\")},{\"../src/traces/carpet\":980}],9:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/choropleth\")},{\"../src/traces/choropleth\":994}],10:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/choroplethmapbox\")},{\"../src/traces/choroplethmapbox\":1001}],11:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/cone\")},{\"../src/traces/cone\":1007}],12:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/contour\")},{\"../src/traces/contour\":1022}],13:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/contourcarpet\")},{\"../src/traces/contourcarpet\":1033}],14:[function(t,e,n){\"use strict\";e.exports=t(\"../src/core\")},{\"../src/core\":755}],15:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/densitymapbox\")},{\"../src/traces/densitymapbox\":1041}],16:[function(t,e,n){\"use strict\";e.exports=t(\"../src/transforms/filter\")},{\"../src/transforms/filter\":1366}],17:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/funnel\")},{\"../src/traces/funnel\":1051}],18:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/funnelarea\")},{\"../src/traces/funnelarea\":1060}],19:[function(t,e,n){\"use strict\";e.exports=t(\"../src/transforms/groupby\")},{\"../src/transforms/groupby\":1367}],20:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/heatmap\")},{\"../src/traces/heatmap\":1073}],21:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/heatmapgl\")},{\"../src/traces/heatmapgl\":1083}],22:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/histogram\")},{\"../src/traces/histogram\":1095}],23:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/histogram2d\")},{\"../src/traces/histogram2d\":1101}],24:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/histogram2dcontour\")},{\"../src/traces/histogram2dcontour\":1105}],25:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/image\")},{\"../src/traces/image\":1113}],26:[function(t,e,n){\"use strict\";var r=t(\"./core\");r.register([t(\"./bar\"),t(\"./box\"),t(\"./heatmap\"),t(\"./histogram\"),t(\"./histogram2d\"),t(\"./histogram2dcontour\"),t(\"./contour\"),t(\"./scatterternary\"),t(\"./violin\"),t(\"./funnel\"),t(\"./waterfall\"),t(\"./image\"),t(\"./pie\"),t(\"./sunburst\"),t(\"./treemap\"),t(\"./funnelarea\"),t(\"./scatter3d\"),t(\"./surface\"),t(\"./isosurface\"),t(\"./volume\"),t(\"./mesh3d\"),t(\"./cone\"),t(\"./streamtube\"),t(\"./scattergeo\"),t(\"./choropleth\"),t(\"./scattergl\"),t(\"./splom\"),t(\"./pointcloud\"),t(\"./heatmapgl\"),t(\"./parcoords\"),t(\"./parcats\"),t(\"./scattermapbox\"),t(\"./choroplethmapbox\"),t(\"./densitymapbox\"),t(\"./sankey\"),t(\"./indicator\"),t(\"./table\"),t(\"./carpet\"),t(\"./scattercarpet\"),t(\"./contourcarpet\"),t(\"./ohlc\"),t(\"./candlestick\"),t(\"./scatterpolar\"),t(\"./scatterpolargl\"),t(\"./barpolar\")]),r.register([t(\"./aggregate\"),t(\"./filter\"),t(\"./groupby\"),t(\"./sort\")]),r.register([t(\"./calendars\")]),e.exports=r},{\"./aggregate\":2,\"./bar\":3,\"./barpolar\":4,\"./box\":5,\"./calendars\":6,\"./candlestick\":7,\"./carpet\":8,\"./choropleth\":9,\"./choroplethmapbox\":10,\"./cone\":11,\"./contour\":12,\"./contourcarpet\":13,\"./core\":14,\"./densitymapbox\":15,\"./filter\":16,\"./funnel\":17,\"./funnelarea\":18,\"./groupby\":19,\"./heatmap\":20,\"./heatmapgl\":21,\"./histogram\":22,\"./histogram2d\":23,\"./histogram2dcontour\":24,\"./image\":25,\"./indicator\":27,\"./isosurface\":28,\"./mesh3d\":29,\"./ohlc\":30,\"./parcats\":31,\"./parcoords\":32,\"./pie\":33,\"./pointcloud\":34,\"./sankey\":35,\"./scatter3d\":36,\"./scattercarpet\":37,\"./scattergeo\":38,\"./scattergl\":39,\"./scattermapbox\":40,\"./scatterpolar\":41,\"./scatterpolargl\":42,\"./scatterternary\":43,\"./sort\":44,\"./splom\":45,\"./streamtube\":46,\"./sunburst\":47,\"./surface\":48,\"./table\":49,\"./treemap\":50,\"./violin\":51,\"./volume\":52,\"./waterfall\":53}],27:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/indicator\")},{\"../src/traces/indicator\":1121}],28:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/isosurface\")},{\"../src/traces/isosurface\":1127}],29:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/mesh3d\")},{\"../src/traces/mesh3d\":1132}],30:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/ohlc\")},{\"../src/traces/ohlc\":1137}],31:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/parcats\")},{\"../src/traces/parcats\":1146}],32:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/parcoords\")},{\"../src/traces/parcoords\":1156}],33:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/pie\")},{\"../src/traces/pie\":1167}],34:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/pointcloud\")},{\"../src/traces/pointcloud\":1176}],35:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/sankey\")},{\"../src/traces/sankey\":1182}],36:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/scatter3d\")},{\"../src/traces/scatter3d\":1220}],37:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/scattercarpet\")},{\"../src/traces/scattercarpet\":1227}],38:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/scattergeo\")},{\"../src/traces/scattergeo\":1235}],39:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/scattergl\")},{\"../src/traces/scattergl\":1248}],40:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/scattermapbox\")},{\"../src/traces/scattermapbox\":1258}],41:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/scatterpolar\")},{\"../src/traces/scatterpolar\":1266}],42:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/scatterpolargl\")},{\"../src/traces/scatterpolargl\":1273}],43:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/scatterternary\")},{\"../src/traces/scatterternary\":1281}],44:[function(t,e,n){\"use strict\";e.exports=t(\"../src/transforms/sort\")},{\"../src/transforms/sort\":1369}],45:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/splom\")},{\"../src/traces/splom\":1290}],46:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/streamtube\")},{\"../src/traces/streamtube\":1298}],47:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/sunburst\")},{\"../src/traces/sunburst\":1306}],48:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/surface\")},{\"../src/traces/surface\":1315}],49:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/table\")},{\"../src/traces/table\":1323}],50:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/treemap\")},{\"../src/traces/treemap\":1332}],51:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/violin\")},{\"../src/traces/violin\":1344}],52:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/volume\")},{\"../src/traces/volume\":1352}],53:[function(t,e,n){\"use strict\";e.exports=t(\"../src/traces/waterfall\")},{\"../src/traces/waterfall\":1360}],54:[function(t,e,n){\"use strict\";e.exports=function(t){var e=(t=t||{}).eye||[0,0,1],n=t.center||[0,0,0],s=t.up||[0,1,0],l=t.distanceLimits||[0,1/0],c=t.mode||\"turntable\",u=r(),h=i(),d=a();return u.setDistanceLimits(l[0],l[1]),u.lookAt(0,e,n,s),h.setDistanceLimits(l[0],l[1]),h.lookAt(0,e,n,s),d.setDistanceLimits(l[0],l[1]),d.lookAt(0,e,n,s),new o({turntable:u,orbit:h,matrix:d},c)};var r=t(\"turntable-camera-controller\"),i=t(\"orbit-camera-controller\"),a=t(\"matrix-camera-controller\");function o(t,e){this._controllerNames=Object.keys(t),this._controllerList=this._controllerNames.map((function(e){return t[e]})),this._mode=e,this._active=t[e],this._active||(this._mode=\"turntable\",this._active=t.turntable),this.modes=this._controllerNames,this.computedMatrix=this._active.computedMatrix,this.computedEye=this._active.computedEye,this.computedUp=this._active.computedUp,this.computedCenter=this._active.computedCenter,this.computedRadius=this._active.computedRadius}var s=o.prototype;[[\"flush\",1],[\"idle\",1],[\"lookAt\",4],[\"rotate\",4],[\"pan\",4],[\"translate\",4],[\"setMatrix\",2],[\"setDistanceLimits\",2],[\"setDistance\",2]].forEach((function(t){for(var e=t[0],n=[],r=0;r<t[1];++r)n.push(\"a\"+r);var i=\"var cc=this._controllerList;for(var i=0;i<cc.length;++i){cc[i].\"+t[0]+\"(\"+n.join()+\")}\";s[e]=Function.apply(null,n.concat(i))})),s.recalcMatrix=function(t){this._active.recalcMatrix(t)},s.getDistance=function(t){return this._active.getDistance(t)},s.getDistanceLimits=function(t){return this._active.getDistanceLimits(t)},s.lastT=function(){return this._active.lastT()},s.setMode=function(t){if(t!==this._mode){var e=this._controllerNames.indexOf(t);if(!(e<0)){var n=this._active,r=this._controllerList[e],i=Math.max(n.lastT(),r.lastT());n.recalcMatrix(i),r.setMatrix(i,n.computedMatrix),this._active=r,this._mode=t,this.computedMatrix=this._active.computedMatrix,this.computedEye=this._active.computedEye,this.computedUp=this._active.computedUp,this.computedCenter=this._active.computedCenter,this.computedRadius=this._active.computedRadius}}},s.getMode=function(){return this._mode}},{\"matrix-camera-controller\":480,\"orbit-camera-controller\":501,\"turntable-camera-controller\":581}],55:[function(t,e,n){!function(r,i){\"object\"==typeof n&&void 0!==e?i(n,t(\"d3-array\"),t(\"d3-collection\"),t(\"d3-shape\"),t(\"elementary-circuits-directed-graph\")):i(r.d3=r.d3||{},r.d3,r.d3,r.d3,null)}(this,(function(t,e,n,r,i){\"use strict\";function a(t){return t.target.depth}function o(t,e){return t.sourceLinks.length?t.depth:e-1}function s(t){return function(){return t}}i=i&&i.hasOwnProperty(\"default\")?i.default:i;var l=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t};function c(t,e){return h(t.source,e.source)||t.index-e.index}function u(t,e){return h(t.target,e.target)||t.index-e.index}function h(t,e){return t.partOfCycle===e.partOfCycle?t.y0-e.y0:\"top\"===t.circularLinkType||\"bottom\"===e.circularLinkType?-1:1}function d(t){return t.value}function f(t){return(t.y0+t.y1)/2}function p(t){return f(t.source)}function m(t){return f(t.target)}function g(t){return t.index}function y(t){return t.nodes}function v(t){return t.links}function _(t,e){var n=t.get(e);if(!n)throw new Error(\"missing: \"+e);return n}function b(t,e){return e(t)}var x=25,w=10;function k(t,e,n){var r=0;if(null===n){for(var a=[],o=0;o<t.links.length;o++){var s=t.links[o],l=s.source.index,c=s.target.index;a[l]||(a[l]=[]),a[c]||(a[c]=[]),-1===a[l].indexOf(c)&&a[l].push(c)}var u=i(a);u.sort((function(t,e){return t.length-e.length}));var h={};for(o=0;o<u.length;o++){var d=u[o].slice(-2);h[d[0]]||(h[d[0]]={}),h[d[0]][d[1]]=!0}t.links.forEach((function(t){var e=t.target.index,n=t.source.index;e===n||h[n]&&h[n][e]?(t.circular=!0,t.circularLinkID=r,r+=1):t.circular=!1}))}else t.links.forEach((function(t){t.source[n]<t.target[n]?t.circular=!1:(t.circular=!0,t.circularLinkID=r,r+=1)}))}function M(t,e){var n=0,r=0;t.links.forEach((function(i){i.circular&&(i.circularLinkType=i.source.circularLinkType||i.target.circularLinkType?i.source.circularLinkType?i.source.circularLinkType:i.target.circularLinkType:n<r?\"top\":\"bottom\",\"top\"==i.circularLinkType?n+=1:r+=1,t.nodes.forEach((function(t){b(t,e)!=b(i.source,e)&&b(t,e)!=b(i.target,e)||(t.circularLinkType=i.circularLinkType)})))})),t.links.forEach((function(t){t.circular&&(t.source.circularLinkType==t.target.circularLinkType&&(t.circularLinkType=t.source.circularLinkType),W(t,e)&&(t.circularLinkType=t.source.circularLinkType))}))}function T(t){var e=Math.abs(t.y1-t.y0),n=Math.abs(t.target.x0-t.source.x1);return Math.atan(n/e)}function S(t,e){var n=0;t.sourceLinks.forEach((function(t){n=t.circular&&!W(t,e)?n+1:n}));var r=0;return t.targetLinks.forEach((function(t){r=t.circular&&!W(t,e)?r+1:r})),n+r}function A(t){var e=0;t.source.sourceLinks.forEach((function(t){e=t.circular?e+1:e}));var n=0;return t.target.targetLinks.forEach((function(t){n=t.circular?n+1:n})),!(e>1||n>1)}function L(t,e,n){return t.sort(E),t.forEach((function(r,i){var a,o,s=0;if(W(r,n)&&A(r))r.circularPathData.verticalBuffer=s+r.width/2;else{for(var l=0;l<i;l++)if(!((a=t[i]).source.column<(o=t[l]).target.column||a.target.column>o.source.column)){var c=t[l].circularPathData.verticalBuffer+t[l].width/2+e;s=c>s?c:s}r.circularPathData.verticalBuffer=s+r.width/2}})),t}function C(t,n,i,a){var o=e.min(t.links,(function(t){return t.source.y0}));t.links.forEach((function(t){t.circular&&(t.circularPathData={})})),L(t.links.filter((function(t){return\"top\"==t.circularLinkType})),n,a),L(t.links.filter((function(t){return\"bottom\"==t.circularLinkType})),n,a),t.links.forEach((function(e){if(e.circular){if(e.circularPathData.arcRadius=e.width+w,e.circularPathData.leftNodeBuffer=5,e.circularPathData.rightNodeBuffer=5,e.circularPathData.sourceWidth=e.source.x1-e.source.x0,e.circularPathData.sourceX=e.source.x0+e.circularPathData.sourceWidth,e.circularPathData.targetX=e.target.x0,e.circularPathData.sourceY=e.y0,e.circularPathData.targetY=e.y1,W(e,a)&&A(e))e.circularPathData.leftSmallArcRadius=w+e.width/2,e.circularPathData.leftLargeArcRadius=w+e.width/2,e.circularPathData.rightSmallArcRadius=w+e.width/2,e.circularPathData.rightLargeArcRadius=w+e.width/2,\"bottom\"==e.circularLinkType?(e.circularPathData.verticalFullExtent=e.source.y1+x+e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent=e.circularPathData.verticalFullExtent-e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent=e.circularPathData.verticalFullExtent-e.circularPathData.rightLargeArcRadius):(e.circularPathData.verticalFullExtent=e.source.y0-x-e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent=e.circularPathData.verticalFullExtent+e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent=e.circularPathData.verticalFullExtent+e.circularPathData.rightLargeArcRadius);else{var s=e.source.column,l=e.circularLinkType,c=t.links.filter((function(t){return t.source.column==s&&t.circularLinkType==l}));c.sort(\"bottom\"==e.circularLinkType?D:O);var u=0;c.forEach((function(t,r){t.circularLinkID==e.circularLinkID&&(e.circularPathData.leftSmallArcRadius=w+e.width/2+u,e.circularPathData.leftLargeArcRadius=w+e.width/2+r*n+u),u+=t.width})),s=e.target.column,(c=t.links.filter((function(t){return t.target.column==s&&t.circularLinkType==l}))).sort(\"bottom\"==e.circularLinkType?P:I),u=0,c.forEach((function(t,r){t.circularLinkID==e.circularLinkID&&(e.circularPathData.rightSmallArcRadius=w+e.width/2+u,e.circularPathData.rightLargeArcRadius=w+e.width/2+r*n+u),u+=t.width})),\"bottom\"==e.circularLinkType?(e.circularPathData.verticalFullExtent=Math.max(i,e.source.y1,e.target.y1)+x+e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent=e.circularPathData.verticalFullExtent-e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent=e.circularPathData.verticalFullExtent-e.circularPathData.rightLargeArcRadius):(e.circularPathData.verticalFullExtent=o-x-e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent=e.circularPathData.verticalFullExtent+e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent=e.circularPathData.verticalFullExtent+e.circularPathData.rightLargeArcRadius)}e.circularPathData.leftInnerExtent=e.circularPathData.sourceX+e.circularPathData.leftNodeBuffer,e.circularPathData.rightInnerExtent=e.circularPathData.targetX-e.circularPathData.rightNodeBuffer,e.circularPathData.leftFullExtent=e.circularPathData.sourceX+e.circularPathData.leftLargeArcRadius+e.circularPathData.leftNodeBuffer,e.circularPathData.rightFullExtent=e.circularPathData.targetX-e.circularPathData.rightLargeArcRadius-e.circularPathData.rightNodeBuffer}if(e.circular)e.path=function(t){return\"top\"==t.circularLinkType?\"M\"+t.circularPathData.sourceX+\" \"+t.circularPathData.sourceY+\" L\"+t.circularPathData.leftInnerExtent+\" \"+t.circularPathData.sourceY+\" A\"+t.circularPathData.leftLargeArcRadius+\" \"+t.circularPathData.leftSmallArcRadius+\" 0 0 0 \"+t.circularPathData.leftFullExtent+\" \"+(t.circularPathData.sourceY-t.circularPathData.leftSmallArcRadius)+\" L\"+t.circularPathData.leftFullExtent+\" \"+t.circularPathData.verticalLeftInnerExtent+\" A\"+t.circularPathData.leftLargeArcRadius+\" \"+t.circularPathData.leftLargeArcRadius+\" 0 0 0 \"+t.circularPathData.leftInnerExtent+\" \"+t.circularPathData.verticalFullExtent+\" L\"+t.circularPathData.rightInnerExtent+\" \"+t.circularPathData.verticalFullExtent+\" A\"+t.circularPathData.rightLargeArcRadius+\" \"+t.circularPathData.rightLargeArcRadius+\" 0 0 0 \"+t.circularPathData.rightFullExtent+\" \"+t.circularPathData.verticalRightInnerExtent+\" L\"+t.circularPathData.rightFullExtent+\" \"+(t.circularPathData.targetY-t.circularPathData.rightSmallArcRadius)+\" A\"+t.circularPathData.rightLargeArcRadius+\" \"+t.circularPathData.rightSmallArcRadius+\" 0 0 0 \"+t.circularPathData.rightInnerExtent+\" \"+t.circularPathData.targetY+\" L\"+t.circularPathData.targetX+\" \"+t.circularPathData.targetY:\"M\"+t.circularPathData.sourceX+\" \"+t.circularPathData.sourceY+\" L\"+t.circularPathData.leftInnerExtent+\" \"+t.circularPathData.sourceY+\" A\"+t.circularPathData.leftLargeArcRadius+\" \"+t.circularPathData.leftSmallArcRadius+\" 0 0 1 \"+t.circularPathData.leftFullExtent+\" \"+(t.circularPathData.sourceY+t.circularPathData.leftSmallArcRadius)+\" L\"+t.circularPathData.leftFullExtent+\" \"+t.circularPathData.verticalLeftInnerExtent+\" A\"+t.circularPathData.leftLargeArcRadius+\" \"+t.circularPathData.leftLargeArcRadius+\" 0 0 1 \"+t.circularPathData.leftInnerExtent+\" \"+t.circularPathData.verticalFullExtent+\" L\"+t.circularPathData.rightInnerExtent+\" \"+t.circularPathData.verticalFullExtent+\" A\"+t.circularPathData.rightLargeArcRadius+\" \"+t.circularPathData.rightLargeArcRadius+\" 0 0 1 \"+t.circularPathData.rightFullExtent+\" \"+t.circularPathData.verticalRightInnerExtent+\" L\"+t.circularPathData.rightFullExtent+\" \"+(t.circularPathData.targetY+t.circularPathData.rightSmallArcRadius)+\" A\"+t.circularPathData.rightLargeArcRadius+\" \"+t.circularPathData.rightSmallArcRadius+\" 0 0 1 \"+t.circularPathData.rightInnerExtent+\" \"+t.circularPathData.targetY+\" L\"+t.circularPathData.targetX+\" \"+t.circularPathData.targetY}(e);else{var h=r.linkHorizontal().source((function(t){return[t.source.x0+(t.source.x1-t.source.x0),t.y0]})).target((function(t){return[t.target.x0,t.y1]}));e.path=h(e)}}))}function E(t,e){return R(t)==R(e)?\"bottom\"==t.circularLinkType?D(t,e):O(t,e):R(e)-R(t)}function O(t,e){return t.y0-e.y0}function D(t,e){return e.y0-t.y0}function I(t,e){return t.y1-e.y1}function P(t,e){return e.y1-t.y1}function R(t){return t.target.column-t.source.column}function z(t){return t.target.x0-t.source.x1}function j(t,e){var n=T(t),r=z(e)/Math.tan(n);return\"up\"==U(t)?t.y1+r:t.y1-r}function F(t,e){var n=T(t),r=z(e)/Math.tan(n);return\"up\"==U(t)?t.y1-r:t.y1+r}function N(t,e,n,r){t.links.forEach((function(i){if(!i.circular&&i.target.column-i.source.column>1){var a=i.source.column+1,o=i.target.column-1,s=1,l=o-a+1;for(s=1;a<=o;a++,s++)t.nodes.forEach((function(o){if(o.column==a){var c,u=s/(l+1),h=Math.pow(1-u,3),d=3*u*Math.pow(1-u,2),f=3*Math.pow(u,2)*(1-u),p=Math.pow(u,3),m=h*i.y0+d*i.y0+f*i.y1+p*i.y1,g=m-i.width/2,y=m+i.width/2;g>o.y0&&g<o.y1?(c=o.y1-g+10,o=B(o,c=\"bottom\"==o.circularLinkType?c:-c,e,n),t.nodes.forEach((function(t){var i,a;b(t,r)!=b(o,r)&&t.column==o.column&&((i=o).y0>(a=t).y0&&i.y0<a.y1||i.y1>a.y0&&i.y1<a.y1||i.y0<a.y0&&i.y1>a.y1)&&B(t,c,e,n)}))):(y>o.y0&&y<o.y1||g<o.y0&&y>o.y1)&&(o=B(o,c=y-o.y0+10,e,n),t.nodes.forEach((function(t){b(t,r)!=b(o,r)&&t.column==o.column&&t.y0<o.y1&&t.y1>o.y1&&B(t,c,e,n)})))}}))}}))}function B(t,e,n,r){return t.y0+e>=n&&t.y1+e<=r&&(t.y0=t.y0+e,t.y1=t.y1+e,t.targetLinks.forEach((function(t){t.y1=t.y1+e})),t.sourceLinks.forEach((function(t){t.y0=t.y0+e}))),t}function Y(t,e,n,r){t.nodes.forEach((function(i){r&&i.y+(i.y1-i.y0)>e&&(i.y=i.y-(i.y+(i.y1-i.y0)-e));var a=t.links.filter((function(t){return b(t.source,n)==b(i,n)})),o=a.length;o>1&&a.sort((function(t,e){if(!t.circular&&!e.circular){if(t.target.column==e.target.column)return t.y1-e.y1;if(!V(t,e))return t.y1-e.y1;if(t.target.column>e.target.column){var n=F(e,t);return t.y1-n}if(e.target.column>t.target.column)return F(t,e)-e.y1}return t.circular&&!e.circular?\"top\"==t.circularLinkType?-1:1:e.circular&&!t.circular?\"top\"==e.circularLinkType?1:-1:t.circular&&e.circular?t.circularLinkType===e.circularLinkType&&\"top\"==t.circularLinkType?t.target.column===e.target.column?t.target.y1-e.target.y1:e.target.column-t.target.column:t.circularLinkType===e.circularLinkType&&\"bottom\"==t.circularLinkType?t.target.column===e.target.column?e.target.y1-t.target.y1:t.target.column-e.target.column:\"top\"==t.circularLinkType?-1:1:void 0}));var s=i.y0;a.forEach((function(t){t.y0=s+t.width/2,s+=t.width})),a.forEach((function(t,e){if(\"bottom\"==t.circularLinkType){for(var n=e+1,r=0;n<o;n++)r+=a[n].width;t.y0=i.y1-r-t.width/2}}))}))}function H(t,e,n){t.nodes.forEach((function(e){var r=t.links.filter((function(t){return b(t.target,n)==b(e,n)})),i=r.length;i>1&&r.sort((function(t,e){if(!t.circular&&!e.circular){if(t.source.column==e.source.column)return t.y0-e.y0;if(!V(t,e))return t.y0-e.y0;if(e.source.column<t.source.column){var n=j(e,t);return t.y0-n}if(t.source.column<e.source.column)return j(t,e)-e.y0}return t.circular&&!e.circular?\"top\"==t.circularLinkType?-1:1:e.circular&&!t.circular?\"top\"==e.circularLinkType?1:-1:t.circular&&e.circular?t.circularLinkType===e.circularLinkType&&\"top\"==t.circularLinkType?t.source.column===e.source.column?t.source.y1-e.source.y1:t.source.column-e.source.column:t.circularLinkType===e.circularLinkType&&\"bottom\"==t.circularLinkType?t.source.column===e.source.column?t.source.y1-e.source.y1:e.source.column-t.source.column:\"top\"==t.circularLinkType?-1:1:void 0}));var a=e.y0;r.forEach((function(t){t.y1=a+t.width/2,a+=t.width})),r.forEach((function(t,n){if(\"bottom\"==t.circularLinkType){for(var a=n+1,o=0;a<i;a++)o+=r[a].width;t.y1=e.y1-o-t.width/2}}))}))}function V(t,e){return U(t)==U(e)}function U(t){return t.y0-t.y1>0?\"up\":\"down\"}function W(t,e){return b(t.source,e)==b(t.target,e)}function q(t,n,r){var i=t.nodes,a=t.links,o=!1,s=!1;if(a.forEach((function(t){\"top\"==t.circularLinkType?o=!0:\"bottom\"==t.circularLinkType&&(s=!0)})),0==o||0==s){var l=e.min(i,(function(t){return t.y0})),c=(r-n)/(e.max(i,(function(t){return t.y1}))-l);i.forEach((function(t){var e=(t.y1-t.y0)*c;t.y0=(t.y0-l)*c,t.y1=t.y0+e})),a.forEach((function(t){t.y0=(t.y0-l)*c,t.y1=(t.y1-l)*c,t.width=t.width*c}))}}t.sankeyCircular=function(){var t,r,i=0,a=0,b=1,T=1,A=24,L=g,E=o,O=y,D=v,I=32,P=2,R=null;function z(){var t={nodes:O.apply(null,arguments),links:D.apply(null,arguments)};j(t),k(t,0,R),F(t),B(t),M(t,L),V(t,I,L),U(t);for(var e=4,n=0;n<e;n++)Y(t,T,L),H(t,0,L),N(t,a,T,L),Y(t,T,L),H(t,0,L);return q(t,a,T),C(t,P,T,L),t}function j(t){t.nodes.forEach((function(t,e){t.index=e,t.sourceLinks=[],t.targetLinks=[]}));var e=n.map(t.nodes,L);return t.links.forEach((function(t,n){t.index=n;var r=t.source,i=t.target;\"object\"!==(void 0===r?\"undefined\":l(r))&&(r=t.source=_(e,r)),\"object\"!==(void 0===i?\"undefined\":l(i))&&(i=t.target=_(e,i)),r.sourceLinks.push(t),i.targetLinks.push(t)})),t}function F(t){t.nodes.forEach((function(t){t.partOfCycle=!1,t.value=Math.max(e.sum(t.sourceLinks,d),e.sum(t.targetLinks,d)),t.sourceLinks.forEach((function(e){e.circular&&(t.partOfCycle=!0,t.circularLinkType=e.circularLinkType)})),t.targetLinks.forEach((function(e){e.circular&&(t.partOfCycle=!0,t.circularLinkType=e.circularLinkType)}))}))}function B(t){var e,n,r;for(e=t.nodes,n=[],r=0;e.length;++r,e=n,n=[])e.forEach((function(t){t.depth=r,t.sourceLinks.forEach((function(t){n.indexOf(t.target)<0&&!t.circular&&n.push(t.target)}))}));for(e=t.nodes,n=[],r=0;e.length;++r,e=n,n=[])e.forEach((function(t){t.height=r,t.targetLinks.forEach((function(t){n.indexOf(t.source)<0&&!t.circular&&n.push(t.source)}))}));t.nodes.forEach((function(t){t.column=Math.floor(E.call(null,t,r))}))}function V(o,s,l){var c=n.nest().key((function(t){return t.column})).sortKeys(e.ascending).entries(o.nodes).map((function(t){return t.values}));(function(n){if(r){var s=1/0;c.forEach((function(t){var e=T*r/(t.length+1);s=e<s?e:s})),t=s}var l=e.min(c,(function(n){return(T-a-(n.length-1)*t)/e.sum(n,d)}));l*=.3,o.links.forEach((function(t){t.width=t.value*l}));var u=function(t){var n=0,r=0,i=0,a=0,o=e.max(t.nodes,(function(t){return t.column}));return t.links.forEach((function(t){t.circular&&(\"top\"==t.circularLinkType?n+=t.width:r+=t.width,0==t.target.column&&(a+=t.width),t.source.column==o&&(i+=t.width))})),{top:n=n>0?n+x+w:n,bottom:r=r>0?r+x+w:r,left:a=a>0?a+x+w:a,right:i=i>0?i+x+w:i}}(o),h=function(t,n){var r=e.max(t.nodes,(function(t){return t.column})),o=b-i,s=T-a,l=o/(o+n.right+n.left),c=s/(s+n.top+n.bottom);return i=i*l+n.left,b=0==n.right?b:b*l,a=a*c+n.top,T*=c,t.nodes.forEach((function(t){t.x0=i+t.column*((b-i-A)/r),t.x1=t.x0+A})),c}(o,u);l*=h,o.links.forEach((function(t){t.width=t.value*l})),c.forEach((function(t){var e=t.length;t.forEach((function(t,r){t.depth==c.length-1&&1==e||0==t.depth&&1==e?(t.y0=T/2-t.value*l,t.y1=t.y0+t.value*l):t.partOfCycle?0==S(t,n)?(t.y0=T/2+r,t.y1=t.y0+t.value*l):\"top\"==t.circularLinkType?(t.y0=a+r,t.y1=t.y0+t.value*l):(t.y0=T-t.value*l-r,t.y1=t.y0+t.value*l):0==u.top||0==u.bottom?(t.y0=(T-a)/e*r,t.y1=t.y0+t.value*l):(t.y0=(T-a)/2-e/2+r,t.y1=t.y0+t.value*l)}))}))})(l),v();for(var u=1,g=s;g>0;--g)y(u*=.99,l),v();function y(t,n){var r=c.length;c.forEach((function(i){var a=i.length,o=i[0].depth;i.forEach((function(i){var s;if(i.sourceLinks.length||i.targetLinks.length)if(i.partOfCycle&&S(i,n)>0);else if(0==o&&1==a)i.y0=T/2-(s=i.y1-i.y0)/2,i.y1=T/2+s/2;else if(o==r-1&&1==a)i.y0=T/2-(s=i.y1-i.y0)/2,i.y1=T/2+s/2;else{var l=e.mean(i.sourceLinks,m),c=e.mean(i.targetLinks,p),u=((l&&c?(l+c)/2:l||c)-f(i))*t;i.y0+=u,i.y1+=u}}))}))}function v(){c.forEach((function(e){var n,r,i,o=a,s=e.length;for(e.sort(h),i=0;i<s;++i)(r=o-(n=e[i]).y0)>0&&(n.y0+=r,n.y1+=r),o=n.y1+t;if((r=o-t-T)>0)for(o=n.y0-=r,n.y1-=r,i=s-2;i>=0;--i)(r=(n=e[i]).y1+t-o)>0&&(n.y0-=r,n.y1-=r),o=n.y0}))}}function U(t){t.nodes.forEach((function(t){t.sourceLinks.sort(u),t.targetLinks.sort(c)})),t.nodes.forEach((function(t){var e=t.y0,n=e,r=t.y1,i=r;t.sourceLinks.forEach((function(t){t.circular?(t.y0=r-t.width/2,r-=t.width):(t.y0=e+t.width/2,e+=t.width)})),t.targetLinks.forEach((function(t){t.circular?(t.y1=i-t.width/2,i-=t.width):(t.y1=n+t.width/2,n+=t.width)}))}))}return z.nodeId=function(t){return arguments.length?(L=\"function\"==typeof t?t:s(t),z):L},z.nodeAlign=function(t){return arguments.length?(E=\"function\"==typeof t?t:s(t),z):E},z.nodeWidth=function(t){return arguments.length?(A=+t,z):A},z.nodePadding=function(e){return arguments.length?(t=+e,z):t},z.nodes=function(t){return arguments.length?(O=\"function\"==typeof t?t:s(t),z):O},z.links=function(t){return arguments.length?(D=\"function\"==typeof t?t:s(t),z):D},z.size=function(t){return arguments.length?(i=a=0,b=+t[0],T=+t[1],z):[b-i,T-a]},z.extent=function(t){return arguments.length?(i=+t[0][0],b=+t[1][0],a=+t[0][1],T=+t[1][1],z):[[i,a],[b,T]]},z.iterations=function(t){return arguments.length?(I=+t,z):I},z.circularLinkGap=function(t){return arguments.length?(P=+t,z):P},z.nodePaddingRatio=function(t){return arguments.length?(r=+t,z):r},z.sortNodes=function(t){return arguments.length?(R=t,z):R},z.update=function(t){return M(t,L),U(t),t.links.forEach((function(t){t.circular&&(t.circularLinkType=t.y0+t.y1<T?\"top\":\"bottom\",t.source.circularLinkType=t.circularLinkType,t.target.circularLinkType=t.circularLinkType)})),Y(t,T,L,!1),H(t,0,L),C(t,P,T,L),t},z},t.sankeyCenter=function(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?e.min(t.sourceLinks,a)-1:0},t.sankeyLeft=function(t){return t.depth},t.sankeyRight=function(t,e){return e-1-t.height},t.sankeyJustify=o,Object.defineProperty(t,\"__esModule\",{value:!0})}))},{\"d3-array\":156,\"d3-collection\":157,\"d3-shape\":165,\"elementary-circuits-directed-graph\":179}],56:[function(t,e,n){!function(r,i){\"object\"==typeof n&&void 0!==e?i(n,t(\"d3-array\"),t(\"d3-collection\"),t(\"d3-shape\")):i(r.d3=r.d3||{},r.d3,r.d3,r.d3)}(this,(function(t,e,n,r){\"use strict\";function i(t){return t.target.depth}function a(t,e){return t.sourceLinks.length?t.depth:e-1}function o(t){return function(){return t}}function s(t,e){return c(t.source,e.source)||t.index-e.index}function l(t,e){return c(t.target,e.target)||t.index-e.index}function c(t,e){return t.y0-e.y0}function u(t){return t.value}function h(t){return(t.y0+t.y1)/2}function d(t){return h(t.source)*t.value}function f(t){return h(t.target)*t.value}function p(t){return t.index}function m(t){return t.nodes}function g(t){return t.links}function y(t,e){var n=t.get(e);if(!n)throw new Error(\"missing: \"+e);return n}function v(t){return[t.source.x1,t.y0]}function _(t){return[t.target.x0,t.y1]}t.sankey=function(){var t=0,r=0,i=1,v=1,_=24,b=8,x=p,w=a,k=m,M=g,T=32;function S(){var t={nodes:k.apply(null,arguments),links:M.apply(null,arguments)};return A(t),L(t),C(t),E(t),O(t),t}function A(t){t.nodes.forEach((function(t,e){t.index=e,t.sourceLinks=[],t.targetLinks=[]}));var e=n.map(t.nodes,x);t.links.forEach((function(t,n){t.index=n;var r=t.source,i=t.target;\"object\"!=typeof r&&(r=t.source=y(e,r)),\"object\"!=typeof i&&(i=t.target=y(e,i)),r.sourceLinks.push(t),i.targetLinks.push(t)}))}function L(t){t.nodes.forEach((function(t){t.value=Math.max(e.sum(t.sourceLinks,u),e.sum(t.targetLinks,u))}))}function C(e){var n,r,a;for(n=e.nodes,r=[],a=0;n.length;++a,n=r,r=[])n.forEach((function(t){t.depth=a,t.sourceLinks.forEach((function(t){r.indexOf(t.target)<0&&r.push(t.target)}))}));for(n=e.nodes,r=[],a=0;n.length;++a,n=r,r=[])n.forEach((function(t){t.height=a,t.targetLinks.forEach((function(t){r.indexOf(t.source)<0&&r.push(t.source)}))}));var o=(i-t-_)/(a-1);e.nodes.forEach((function(e){e.x1=(e.x0=t+Math.max(0,Math.min(a-1,Math.floor(w.call(null,e,a))))*o)+_}))}function E(t){var i=n.nest().key((function(t){return t.x0})).sortKeys(e.ascending).entries(t.nodes).map((function(t){return t.values}));(function(){var n=e.max(i,(function(t){return t.length})),a=.6666666666666666*(v-r)/(n-1);b>a&&(b=a);var o=e.min(i,(function(t){return(v-r-(t.length-1)*b)/e.sum(t,u)}));i.forEach((function(t){t.forEach((function(t,e){t.y1=(t.y0=e)+t.value*o}))})),t.links.forEach((function(t){t.width=t.value*o}))})(),p();for(var a=1,o=T;o>0;--o)l(a*=.99),p(),s(a),p();function s(t){i.forEach((function(n){n.forEach((function(n){if(n.targetLinks.length){var r=(e.sum(n.targetLinks,d)/e.sum(n.targetLinks,u)-h(n))*t;n.y0+=r,n.y1+=r}}))}))}function l(t){i.slice().reverse().forEach((function(n){n.forEach((function(n){if(n.sourceLinks.length){var r=(e.sum(n.sourceLinks,f)/e.sum(n.sourceLinks,u)-h(n))*t;n.y0+=r,n.y1+=r}}))}))}function p(){i.forEach((function(t){var e,n,i,a=r,o=t.length;for(t.sort(c),i=0;i<o;++i)(n=a-(e=t[i]).y0)>0&&(e.y0+=n,e.y1+=n),a=e.y1+b;if((n=a-b-v)>0)for(a=e.y0-=n,e.y1-=n,i=o-2;i>=0;--i)(n=(e=t[i]).y1+b-a)>0&&(e.y0-=n,e.y1-=n),a=e.y0}))}}function O(t){t.nodes.forEach((function(t){t.sourceLinks.sort(l),t.targetLinks.sort(s)})),t.nodes.forEach((function(t){var e=t.y0,n=e;t.sourceLinks.forEach((function(t){t.y0=e+t.width/2,e+=t.width})),t.targetLinks.forEach((function(t){t.y1=n+t.width/2,n+=t.width}))}))}return S.update=function(t){return O(t),t},S.nodeId=function(t){return arguments.length?(x=\"function\"==typeof t?t:o(t),S):x},S.nodeAlign=function(t){return arguments.length?(w=\"function\"==typeof t?t:o(t),S):w},S.nodeWidth=function(t){return arguments.length?(_=+t,S):_},S.nodePadding=function(t){return arguments.length?(b=+t,S):b},S.nodes=function(t){return arguments.length?(k=\"function\"==typeof t?t:o(t),S):k},S.links=function(t){return arguments.length?(M=\"function\"==typeof t?t:o(t),S):M},S.size=function(e){return arguments.length?(t=r=0,i=+e[0],v=+e[1],S):[i-t,v-r]},S.extent=function(e){return arguments.length?(t=+e[0][0],i=+e[1][0],r=+e[0][1],v=+e[1][1],S):[[t,r],[i,v]]},S.iterations=function(t){return arguments.length?(T=+t,S):T},S},t.sankeyCenter=function(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?e.min(t.sourceLinks,i)-1:0},t.sankeyLeft=function(t){return t.depth},t.sankeyRight=function(t,e){return e-1-t.height},t.sankeyJustify=a,t.sankeyLinkHorizontal=function(){return r.linkHorizontal().source(v).target(_)},Object.defineProperty(t,\"__esModule\",{value:!0})}))},{\"d3-array\":156,\"d3-collection\":157,\"d3-shape\":165}],57:[function(t,e,n){\"use strict\";e.exports=t(\"./quad\")},{\"./quad\":58}],58:[function(t,e,n){\"use strict\";var r=t(\"binary-search-bounds\"),i=t(\"clamp\"),a=t(\"parse-rect\"),o=t(\"array-bounds\"),s=t(\"pick-by-alias\"),l=t(\"defined\"),c=t(\"flatten-vertex-data\"),u=t(\"is-obj\"),h=t(\"dtype\"),d=t(\"math-log2\");function f(t,e){for(var n=e[0],r=e[1],a=1/(e[2]-n),o=1/(e[3]-r),s=new Array(t.length),l=0,c=t.length/2;l<c;l++)s[2*l]=i((t[2*l]-n)*a,0,1),s[2*l+1]=i((t[2*l+1]-r)*o,0,1);return s}e.exports=function(t,e){e||(e={}),t=c(t,\"float64\"),e=s(e,{bounds:\"range bounds dataBox databox\",maxDepth:\"depth maxDepth maxdepth level maxLevel maxlevel levels\",dtype:\"type dtype format out dst output destination\"});var n=l(e.maxDepth,255),i=l(e.bounds,o(t,2));i[0]===i[2]&&i[2]++,i[1]===i[3]&&i[3]++;var p,m=f(t,i),g=t.length>>>1;e.dtype||(e.dtype=\"array\"),\"string\"==typeof e.dtype?p=new(h(e.dtype))(g):e.dtype&&(p=e.dtype,Array.isArray(p)&&(p.length=g));for(var y=0;y<g;++y)p[y]=y;var v=[],_=[],b=[],x=[];!function t(e,r,i,a,o,s){if(!a.length)return null;var l=v[o]||(v[o]=[]),c=b[o]||(b[o]=[]),u=_[o]||(_[o]=[]),h=l.length;if(++o>n||s>1073741824){for(var d=0;d<a.length;d++)l.push(a[d]),c.push(s),u.push(null,null,null,null);return h}if(l.push(a[0]),c.push(s),a.length<=1)return u.push(null,null,null,null),h;for(var f=.5*i,p=e+f,g=r+f,y=[],x=[],w=[],k=[],M=1,T=a.length;M<T;M++){var S=a[M],A=m[2*S+1];m[2*S]<p?A<g?y.push(S):x.push(S):A<g?w.push(S):k.push(S)}return u.push(t(e,r,f,y,o,s<<=2),t(e,g,f,x,o,s+1),t(p,r,f,w,o,s+2),t(p,g,f,k,o,s+3)),h}(0,0,1,p,0,1);for(var w=0,k=0;k<v.length;k++){var M=v[k];if(p.set)p.set(M,w);else for(var T=0,S=M.length;T<S;T++)p[T+w]=M[T];var A=w+v[k].length;x[k]=[w,A],w=A}return p.range=function(){for(var e,n=[],r=arguments.length;r--;)n[r]=arguments[r];if(u(n[n.length-1])){var o=n.pop();n.length||null==o.x&&null==o.l&&null==o.left||(n=[o],e={}),e=s(o,{level:\"level maxLevel\",d:\"d diam diameter r radius px pxSize pixel pixelSize maxD size minSize\",lod:\"lod details ranges offsets\"})}else e={};n.length||(n=i);var c,h=a.apply(void 0,n),p=[Math.min(h.x,h.x+h.width),Math.min(h.y,h.y+h.height),Math.max(h.x,h.x+h.width),Math.max(h.y,h.y+h.height)],m=p[0],g=p[1],y=p[2],b=p[3],x=f([m,g,y,b],i),w=x[0],k=x[1],M=x[2],T=x[3],S=l(e.level,v.length);if(null!=e.d&&(\"number\"==typeof e.d?c=[e.d,e.d]:e.d.length&&(c=e.d),S=Math.min(Math.max(Math.ceil(-d(Math.abs(c[0])/(i[2]-i[0]))),Math.ceil(-d(Math.abs(c[1])/(i[3]-i[1])))),S)),S=Math.min(S,v.length),e.lod)return L(w,k,M,T,S);var A=[];function C(e,n,r,i,a,o){if(null!==a&&null!==o&&!(w>e+r||k>n+r||M<e||T<n||i>=S||a===o)){var s=v[i];void 0===o&&(o=s.length);for(var l=a;l<o;l++){var c=s[l],u=t[2*c],h=t[2*c+1];u>=m&&u<=y&&h>=g&&h<=b&&A.push(c)}var d=_[i],f=d[4*a+0],p=d[4*a+1],x=d[4*a+2],L=d[4*a+3],O=E(d,a+1),D=.5*r,I=i+1;C(e,n,D,I,f,p||x||L||O),C(e,n+D,D,I,p,x||L||O),C(e+D,n,D,I,x,L||O),C(e+D,n+D,D,I,L,O)}}function E(t,e){for(var n=null,r=0;null===n;)if(n=t[4*e+r],++r>t.length)return null;return n}return C(0,0,1,0,0,1),A},p;function L(t,e,n,i,a){for(var o=[],s=0;s<a;s++){var l=b[s],c=x[s][0],u=C(t,e,s),h=C(n,i,s),d=r.ge(l,u),f=r.gt(l,h,d,l.length-1);o[s]=[d+c,f+c]}return o}function C(t,e,n){for(var r=1,i=.5,a=.5,o=.5,s=0;s<n;s++)r<<=2,r+=t<i?e<a?0:1:e<a?2:3,o*=.5,i+=t<i?-o:o,a+=e<a?-o:o;return r}}},{\"array-bounds\":70,\"binary-search-bounds\":96,clamp:120,defined:170,dtype:175,\"flatten-vertex-data\":244,\"is-obj\":468,\"math-log2\":479,\"parse-rect\":504,\"pick-by-alias\":511}],59:[function(t,e,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var r=t(\"@turf/meta\"),i=6378137;function a(t){var e=0;if(t&&t.length>0){e+=Math.abs(o(t[0]));for(var n=1;n<t.length;n++)e-=Math.abs(o(t[n]))}return e}function o(t){var e,n,r,a,o,l,c=0,u=t.length;if(u>2){for(l=0;l<u;l++)l===u-2?(r=u-2,a=u-1,o=0):l===u-1?(r=u-1,a=0,o=1):(r=l,a=l+1,o=l+2),e=t[r],n=t[a],c+=(s(t[o][0])-s(e[0]))*Math.sin(s(n[1]));c=c*i*i/2}return c}function s(t){return t*Math.PI/180}n.default=function(t){return r.geomReduce(t,(function(t,e){return t+function(t){var e,n=0;switch(t.type){case\"Polygon\":return a(t.coordinates);case\"MultiPolygon\":for(e=0;e<t.coordinates.length;e++)n+=a(t.coordinates[e]);return n;case\"Point\":case\"MultiPoint\":case\"LineString\":case\"MultiLineString\":return 0}return 0}(e)}),0)}},{\"@turf/meta\":63}],60:[function(t,e,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var r=t(\"@turf/meta\");n.default=function(t){var e=[1/0,1/0,-1/0,-1/0];return r.coordEach(t,(function(t){e[0]>t[0]&&(e[0]=t[0]),e[1]>t[1]&&(e[1]=t[1]),e[2]<t[0]&&(e[2]=t[0]),e[3]<t[1]&&(e[3]=t[1])})),e}},{\"@turf/meta\":63}],61:[function(t,e,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var r=t(\"@turf/meta\"),i=t(\"@turf/helpers\");n.default=function(t,e){void 0===e&&(e={});var n=0,a=0,o=0;return r.coordEach(t,(function(t){n+=t[0],a+=t[1],o++})),i.point([n/o,a/o],e.properties)}},{\"@turf/helpers\":62,\"@turf/meta\":63}],62:[function(t,e,n){\"use strict\";function r(t,e,n){void 0===n&&(n={});var r={type:\"Feature\"};return(0===n.id||n.id)&&(r.id=n.id),n.bbox&&(r.bbox=n.bbox),r.properties=e||{},r.geometry=t,r}function i(t,e,n){return void 0===n&&(n={}),r({type:\"Point\",coordinates:t},e,n)}function a(t,e,n){void 0===n&&(n={});for(var i=0,a=t;i<a.length;i++){var o=a[i];if(o.length<4)throw new Error(\"Each LinearRing of a Polygon must have 4 or more Positions.\");for(var s=0;s<o[o.length-1].length;s++)if(o[o.length-1][s]!==o[0][s])throw new Error(\"First and last Position are not equivalent.\")}return r({type:\"Polygon\",coordinates:t},e,n)}function o(t,e,n){if(void 0===n&&(n={}),t.length<2)throw new Error(\"coordinates must be an array of two or more positions\");return r({type:\"LineString\",coordinates:t},e,n)}function s(t,e){void 0===e&&(e={});var n={type:\"FeatureCollection\"};return e.id&&(n.id=e.id),e.bbox&&(n.bbox=e.bbox),n.features=t,n}function l(t,e,n){return void 0===n&&(n={}),r({type:\"MultiLineString\",coordinates:t},e,n)}function c(t,e,n){return void 0===n&&(n={}),r({type:\"MultiPoint\",coordinates:t},e,n)}function u(t,e,n){return void 0===n&&(n={}),r({type:\"MultiPolygon\",coordinates:t},e,n)}function h(t,e){void 0===e&&(e=\"kilometers\");var r=n.factors[e];if(!r)throw new Error(e+\" units is invalid\");return t*r}function d(t,e){void 0===e&&(e=\"kilometers\");var r=n.factors[e];if(!r)throw new Error(e+\" units is invalid\");return t/r}function f(t){return t%(2*Math.PI)*180/Math.PI}function p(t){return!isNaN(t)&&null!==t&&!Array.isArray(t)&&!/^\\s*$/.test(t)}Object.defineProperty(n,\"__esModule\",{value:!0}),n.earthRadius=6371008.8,n.factors={centimeters:100*n.earthRadius,centimetres:100*n.earthRadius,degrees:n.earthRadius/111325,feet:3.28084*n.earthRadius,inches:39.37*n.earthRadius,kilometers:n.earthRadius/1e3,kilometres:n.earthRadius/1e3,meters:n.earthRadius,metres:n.earthRadius,miles:n.earthRadius/1609.344,millimeters:1e3*n.earthRadius,millimetres:1e3*n.earthRadius,nauticalmiles:n.earthRadius/1852,radians:1,yards:n.earthRadius/1.0936},n.unitsFactors={centimeters:100,centimetres:100,degrees:1/111325,feet:3.28084,inches:39.37,kilometers:.001,kilometres:.001,meters:1,metres:1,miles:1/1609.344,millimeters:1e3,millimetres:1e3,nauticalmiles:1/1852,radians:1/n.earthRadius,yards:1/1.0936},n.areaFactors={acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:386e-9,millimeters:1e6,millimetres:1e6,yards:1.195990046},n.feature=r,n.geometry=function(t,e,n){switch(void 0===n&&(n={}),t){case\"Point\":return i(e).geometry;case\"LineString\":return o(e).geometry;case\"Polygon\":return a(e).geometry;case\"MultiPoint\":return c(e).geometry;case\"MultiLineString\":return l(e).geometry;case\"MultiPolygon\":return u(e).geometry;default:throw new Error(t+\" is invalid\")}},n.point=i,n.points=function(t,e,n){return void 0===n&&(n={}),s(t.map((function(t){return i(t,e)})),n)},n.polygon=a,n.polygons=function(t,e,n){return void 0===n&&(n={}),s(t.map((function(t){return a(t,e)})),n)},n.lineString=o,n.lineStrings=function(t,e,n){return void 0===n&&(n={}),s(t.map((function(t){return o(t,e)})),n)},n.featureCollection=s,n.multiLineString=l,n.multiPoint=c,n.multiPolygon=u,n.geometryCollection=function(t,e,n){return void 0===n&&(n={}),r({type:\"GeometryCollection\",geometries:t},e,n)},n.round=function(t,e){if(void 0===e&&(e=0),e&&!(e>=0))throw new Error(\"precision must be a positive number\");var n=Math.pow(10,e||0);return Math.round(t*n)/n},n.radiansToLength=h,n.lengthToRadians=d,n.lengthToDegrees=function(t,e){return f(d(t,e))},n.bearingToAzimuth=function(t){var e=t%360;return e<0&&(e+=360),e},n.radiansToDegrees=f,n.degreesToRadians=function(t){return t%360*Math.PI/180},n.convertLength=function(t,e,n){if(void 0===e&&(e=\"kilometers\"),void 0===n&&(n=\"kilometers\"),!(t>=0))throw new Error(\"length must be a positive number\");return h(d(t,e),n)},n.convertArea=function(t,e,r){if(void 0===e&&(e=\"meters\"),void 0===r&&(r=\"kilometers\"),!(t>=0))throw new Error(\"area must be a positive number\");var i=n.areaFactors[e];if(!i)throw new Error(\"invalid original units\");var a=n.areaFactors[r];if(!a)throw new Error(\"invalid final units\");return t/i*a},n.isNumber=p,n.isObject=function(t){return!!t&&t.constructor===Object},n.validateBBox=function(t){if(!t)throw new Error(\"bbox is required\");if(!Array.isArray(t))throw new Error(\"bbox must be an Array\");if(4!==t.length&&6!==t.length)throw new Error(\"bbox must be an Array of 4 or 6 numbers\");t.forEach((function(t){if(!p(t))throw new Error(\"bbox must only contain numbers\")}))},n.validateId=function(t){if(!t)throw new Error(\"id is required\");if(-1===[\"string\",\"number\"].indexOf(typeof t))throw new Error(\"id must be a number or a string\")},n.radians2degrees=function(){throw new Error(\"method has been renamed to `radiansToDegrees`\")},n.degrees2radians=function(){throw new Error(\"method has been renamed to `degreesToRadians`\")},n.distanceToDegrees=function(){throw new Error(\"method has been renamed to `lengthToDegrees`\")},n.distanceToRadians=function(){throw new Error(\"method has been renamed to `lengthToRadians`\")},n.radiansToDistance=function(){throw new Error(\"method has been renamed to `radiansToLength`\")},n.bearingToAngle=function(){throw new Error(\"method has been renamed to `bearingToAzimuth`\")},n.convertDistance=function(){throw new Error(\"method has been renamed to `convertLength`\")}},{}],63:[function(t,e,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var r=t(\"@turf/helpers\");function i(t,e,n){if(null!==t)for(var r,a,o,s,l,c,u,h,d=0,f=0,p=t.type,m=\"FeatureCollection\"===p,g=\"Feature\"===p,y=m?t.features.length:1,v=0;v<y;v++){l=(h=!!(u=m?t.features[v].geometry:g?t.geometry:t)&&\"GeometryCollection\"===u.type)?u.geometries.length:1;for(var _=0;_<l;_++){var b=0,x=0;if(null!==(s=h?u.geometries[_]:u)){c=s.coordinates;var w=s.type;switch(d=!n||\"Polygon\"!==w&&\"MultiPolygon\"!==w?0:1,w){case null:break;case\"Point\":if(!1===e(c,f,v,b,x))return!1;f++,b++;break;case\"LineString\":case\"MultiPoint\":for(r=0;r<c.length;r++){if(!1===e(c[r],f,v,b,x))return!1;f++,\"MultiPoint\"===w&&b++}\"LineString\"===w&&b++;break;case\"Polygon\":case\"MultiLineString\":for(r=0;r<c.length;r++){for(a=0;a<c[r].length-d;a++){if(!1===e(c[r][a],f,v,b,x))return!1;f++}\"MultiLineString\"===w&&b++,\"Polygon\"===w&&x++}\"Polygon\"===w&&b++;break;case\"MultiPolygon\":for(r=0;r<c.length;r++){for(x=0,a=0;a<c[r].length;a++){for(o=0;o<c[r][a].length-d;o++){if(!1===e(c[r][a][o],f,v,b,x))return!1;f++}x++}b++}break;case\"GeometryCollection\":for(r=0;r<s.geometries.length;r++)if(!1===i(s.geometries[r],e,n))return!1;break;default:throw new Error(\"Unknown Geometry Type\")}}}}}function a(t,e){var n;switch(t.type){case\"FeatureCollection\":for(n=0;n<t.features.length&&!1!==e(t.features[n].properties,n);n++);break;case\"Feature\":e(t.properties,0)}}function o(t,e){if(\"Feature\"===t.type)e(t,0);else if(\"FeatureCollection\"===t.type)for(var n=0;n<t.features.length&&!1!==e(t.features[n],n);n++);}function s(t,e){var n,r,i,a,o,s,l,c,u,h,d=0,f=\"FeatureCollection\"===t.type,p=\"Feature\"===t.type,m=f?t.features.length:1;for(n=0;n<m;n++){for(c=f?t.features[n].properties:p?t.properties:{},u=f?t.features[n].bbox:p?t.bbox:void 0,h=f?t.features[n].id:p?t.id:void 0,o=(l=!!(s=f?t.features[n].geometry:p?t.geometry:t)&&\"GeometryCollection\"===s.type)?s.geometries.length:1,i=0;i<o;i++)if(null!==(a=l?s.geometries[i]:s))switch(a.type){case\"Point\":case\"LineString\":case\"MultiPoint\":case\"Polygon\":case\"MultiLineString\":case\"MultiPolygon\":if(!1===e(a,d,c,u,h))return!1;break;case\"GeometryCollection\":for(r=0;r<a.geometries.length;r++)if(!1===e(a.geometries[r],d,c,u,h))return!1;break;default:throw new Error(\"Unknown Geometry Type\")}else if(!1===e(null,d,c,u,h))return!1;d++}}function l(t,e){s(t,(function(t,n,i,a,o){var s,l=null===t?null:t.type;switch(l){case null:case\"Point\":case\"LineString\":case\"Polygon\":return!1!==e(r.feature(t,i,{bbox:a,id:o}),n,0)&&void 0}switch(l){case\"MultiPoint\":s=\"Point\";break;case\"MultiLineString\":s=\"LineString\";break;case\"MultiPolygon\":s=\"Polygon\"}for(var c=0;c<t.coordinates.length;c++)if(!1===e(r.feature({type:s,coordinates:t.coordinates[c]},i),n,c))return!1}))}function c(t,e){l(t,(function(t,n,a){var o=0;if(t.geometry){var s=t.geometry.type;if(\"Point\"!==s&&\"MultiPoint\"!==s){var l,c=0,u=0,h=0;return!1!==i(t,(function(i,s,d,f,p){if(void 0===l||n>c||f>u||p>h)return l=i,c=n,u=f,h=p,void(o=0);var m=r.lineString([l,i],t.properties);if(!1===e(m,n,a,p,o))return!1;o++,l=i}))&&void 0}}}))}function u(t,e){if(!t)throw new Error(\"geojson is required\");l(t,(function(t,n,i){if(null!==t.geometry){var a=t.geometry.coordinates;switch(t.geometry.type){case\"LineString\":if(!1===e(t,n,i,0,0))return!1;break;case\"Polygon\":for(var o=0;o<a.length;o++)if(!1===e(r.lineString(a[o],t.properties),n,i,o))return!1}}}))}n.coordEach=i,n.coordReduce=function(t,e,n,r){var a=n;return i(t,(function(t,r,i,o,s){a=0===r&&void 0===n?t:e(a,t,r,i,o,s)}),r),a},n.propEach=a,n.propReduce=function(t,e,n){var r=n;return a(t,(function(t,i){r=0===i&&void 0===n?t:e(r,t,i)})),r},n.featureEach=o,n.featureReduce=function(t,e,n){var r=n;return o(t,(function(t,i){r=0===i&&void 0===n?t:e(r,t,i)})),r},n.coordAll=function(t){var e=[];return i(t,(function(t){e.push(t)})),e},n.geomEach=s,n.geomReduce=function(t,e,n){var r=n;return s(t,(function(t,i,a,o,s){r=0===i&&void 0===n?t:e(r,t,i,a,o,s)})),r},n.flattenEach=l,n.flattenReduce=function(t,e,n){var r=n;return l(t,(function(t,i,a){r=0===i&&0===a&&void 0===n?t:e(r,t,i,a)})),r},n.segmentEach=c,n.segmentReduce=function(t,e,n){var r=n,i=!1;return c(t,(function(t,a,o,s,l){r=!1===i&&void 0===n?t:e(r,t,a,o,s,l),i=!0})),r},n.lineEach=u,n.lineReduce=function(t,e,n){var r=n;return u(t,(function(t,i,a,o){r=0===i&&void 0===n?t:e(r,t,i,a,o)})),r},n.findSegment=function(t,e){if(!r.isObject(e=e||{}))throw new Error(\"options is invalid\");var n,i=e.featureIndex||0,a=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.segmentIndex||0,l=e.properties;switch(t.type){case\"FeatureCollection\":i<0&&(i=t.features.length+i),l=l||t.features[i].properties,n=t.features[i].geometry;break;case\"Feature\":l=l||t.properties,n=t.geometry;break;case\"Point\":case\"MultiPoint\":return null;case\"LineString\":case\"Polygon\":case\"MultiLineString\":case\"MultiPolygon\":n=t;break;default:throw new Error(\"geojson is invalid\")}if(null===n)return null;var c=n.coordinates;switch(n.type){case\"Point\":case\"MultiPoint\":return null;case\"LineString\":return s<0&&(s=c.length+s-1),r.lineString([c[s],c[s+1]],l,e);case\"Polygon\":return o<0&&(o=c.length+o),s<0&&(s=c[o].length+s-1),r.lineString([c[o][s],c[o][s+1]],l,e);case\"MultiLineString\":return a<0&&(a=c.length+a),s<0&&(s=c[a].length+s-1),r.lineString([c[a][s],c[a][s+1]],l,e);case\"MultiPolygon\":return a<0&&(a=c.length+a),o<0&&(o=c[a].length+o),s<0&&(s=c[a][o].length-s-1),r.lineString([c[a][o][s],c[a][o][s+1]],l,e)}throw new Error(\"geojson is invalid\")},n.findPoint=function(t,e){if(!r.isObject(e=e||{}))throw new Error(\"options is invalid\");var n,i=e.featureIndex||0,a=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.coordIndex||0,l=e.properties;switch(t.type){case\"FeatureCollection\":i<0&&(i=t.features.length+i),l=l||t.features[i].properties,n=t.features[i].geometry;break;case\"Feature\":l=l||t.properties,n=t.geometry;break;case\"Point\":case\"MultiPoint\":return null;case\"LineString\":case\"Polygon\":case\"MultiLineString\":case\"MultiPolygon\":n=t;break;default:throw new Error(\"geojson is invalid\")}if(null===n)return null;var c=n.coordinates;switch(n.type){case\"Point\":return r.point(c,l,e);case\"MultiPoint\":return a<0&&(a=c.length+a),r.point(c[a],l,e);case\"LineString\":return s<0&&(s=c.length+s),r.point(c[s],l,e);case\"Polygon\":return o<0&&(o=c.length+o),s<0&&(s=c[o].length+s),r.point(c[o][s],l,e);case\"MultiLineString\":return a<0&&(a=c.length+a),s<0&&(s=c[a].length+s),r.point(c[a][s],l,e);case\"MultiPolygon\":return a<0&&(a=c.length+a),o<0&&(o=c[a].length+o),s<0&&(s=c[a][o].length-s),r.point(c[a][o][s],l,e)}throw new Error(\"geojson is invalid\")}},{\"@turf/helpers\":62}],64:[function(t,e,n){\"use strict\";var r=\"undefined\"==typeof WeakMap?t(\"weak-map\"):WeakMap,i=t(\"gl-buffer\"),a=t(\"gl-vao\"),o=new r;e.exports=function(t){var e=o.get(t),n=e&&(e._triangleBuffer.handle||e._triangleBuffer.buffer);if(!n||!t.isBuffer(n)){var r=i(t,new Float32Array([-1,-1,-1,4,4,-1]));(e=a(t,[{buffer:r,type:t.FLOAT,size:2}]))._triangleBuffer=r,o.set(t,e)}e.bind(),t.drawArrays(t.TRIANGLES,0,3),e.unbind()}},{\"gl-buffer\":259,\"gl-vao\":358,\"weak-map\":602}],65:[function(t,e,n){e.exports=function(t){var e=0,n=0,r=0,i=0;return t.map((function(t){var a=(t=t.slice())[0],o=a.toUpperCase();if(a!=o)switch(t[0]=o,a){case\"a\":t[6]+=r,t[7]+=i;break;case\"v\":t[1]+=i;break;case\"h\":t[1]+=r;break;default:for(var s=1;s<t.length;)t[s++]+=r,t[s++]+=i}switch(o){case\"Z\":r=e,i=n;break;case\"H\":r=t[1];break;case\"V\":i=t[1];break;case\"M\":r=e=t[1],i=n=t[2];break;default:r=t[t.length-2],i=t[t.length-1]}return t}))}},{}],66:[function(t,e,n){var r=t(\"pad-left\");e.exports=function(t,e,n){e=\"number\"==typeof e?e:1,n=n||\": \";var i=t.split(/\\r?\\n/),a=String(i.length+e-1).length;return i.map((function(t,i){var o=i+e,s=String(o).length;return r(o,a-s)+n+t})).join(\"\\n\")}},{\"pad-left\":502}],67:[function(t,e,n){\"use strict\";e.exports=function(t){var e=t.length;if(0===e)return[];if(1===e)return[0];for(var n=t[0].length,r=[t[0]],a=[0],o=1;o<e;++o)if(r.push(t[o]),i(r,n)){if(a.push(o),a.length===n+1)return a}else r.pop();return a};var r=t(\"robust-orientation\");function i(t,e){for(var n=new Array(e+1),i=0;i<t.length;++i)n[i]=t[i];for(i=0;i<=t.length;++i){for(var a=t.length;a<=e;++a){for(var o=new Array(e),s=0;s<e;++s)o[s]=Math.pow(a+1-i,s);n[a]=o}if(r.apply(void 0,n))return!0}return!1}},{\"robust-orientation\":548}],68:[function(t,e,n){\"use strict\";e.exports=function(t,e){return r(e).filter((function(n){for(var r=new Array(n.length),a=0;a<n.length;++a)r[a]=e[n[a]];return i(r)*t<1}))};var r=t(\"delaunay-triangulate\"),i=t(\"circumradius\")},{circumradius:119,\"delaunay-triangulate\":171}],69:[function(t,e,n){e.exports=function(t,e){return i(r(t,e))};var r=t(\"alpha-complex\"),i=t(\"simplicial-complex-boundary\")},{\"alpha-complex\":68,\"simplicial-complex-boundary\":555}],70:[function(t,e,n){\"use strict\";e.exports=function(t,e){if(!t||null==t.length)throw Error(\"Argument should be an array\");e=null==e?1:Math.floor(e);for(var n=Array(2*e),r=0;r<e;r++){for(var i=-1/0,a=1/0,o=r,s=t.length;o<s;o+=e)t[o]>i&&(i=t[o]),t[o]<a&&(a=t[o]);n[r]=a,n[e+r]=i}return n}},{}],71:[function(t,e,n){\"use strict\";var r=t(\"array-bounds\");e.exports=function(t,e,n){if(!t||null==t.length)throw Error(\"Argument should be an array\");null==e&&(e=1),null==n&&(n=r(t,e));for(var i=0;i<e;i++){var a=n[e+i],o=n[i],s=i,l=t.length;if(a===1/0&&o===-1/0)for(s=i;s<l;s+=e)t[s]=t[s]===a?1:t[s]===o?0:.5;else if(a===1/0)for(s=i;s<l;s+=e)t[s]=t[s]===a?1:0;else if(o===-1/0)for(s=i;s<l;s+=e)t[s]=t[s]===o?0:1;else{var c=a-o;for(s=i;s<l;s+=e)isNaN(t[s])||(t[s]=0===c?.5:(t[s]-o)/c)}}return t}},{\"array-bounds\":70}],72:[function(t,e,n){e.exports=function(t,e){var n=\"number\"==typeof t,r=\"number\"==typeof e;n&&!r?(e=t,t=0):n||r||(t=0,e=0);var i=(e|=0)-(t|=0);if(i<0)throw new Error(\"array length must be positive\");for(var a=new Array(i),o=0,s=t;o<i;o++,s++)a[o]=s;return a}},{}],73:[function(t,e,n){(function(n){(function(){\"use strict\";var r=t(\"object-assign\");function i(t,e){if(t===e)return 0;for(var n=t.length,r=e.length,i=0,a=Math.min(n,r);i<a;++i)if(t[i]!==e[i]){n=t[i],r=e[i];break}return n<r?-1:r<n?1:0}function a(t){return n.Buffer&&\"function\"==typeof n.Buffer.isBuffer?n.Buffer.isBuffer(t):!(null==t||!t._isBuffer)}var o=t(\"util/\"),s=Object.prototype.hasOwnProperty,l=Array.prototype.slice,c=\"foo\"===(function(){}).name;function u(t){return Object.prototype.toString.call(t)}function h(t){return!a(t)&&\"function\"==typeof n.ArrayBuffer&&(\"function\"==typeof ArrayBuffer.isView?ArrayBuffer.isView(t):!!t&&(t instanceof DataView||!!(t.buffer&&t.buffer instanceof ArrayBuffer)))}var d=e.exports=v,f=/\\s*function\\s+([^\\(\\s]*)\\s*/;function p(t){if(o.isFunction(t)){if(c)return t.name;var e=t.toString().match(f);return e&&e[1]}}function m(t,e){return\"string\"==typeof t?t.length<e?t:t.slice(0,e):t}function g(t){if(c||!o.isFunction(t))return o.inspect(t);var e=p(t);return\"[Function\"+(e?\": \"+e:\"\")+\"]\"}function y(t,e,n,r,i){throw new d.AssertionError({message:n,actual:t,expected:e,operator:r,stackStartFunction:i})}function v(t,e){t||y(t,!0,e,\"==\",d.ok)}function _(t,e,n,r){if(t===e)return!0;if(a(t)&&a(e))return 0===i(t,e);if(o.isDate(t)&&o.isDate(e))return t.getTime()===e.getTime();if(o.isRegExp(t)&&o.isRegExp(e))return t.source===e.source&&t.global===e.global&&t.multiline===e.multiline&&t.lastIndex===e.lastIndex&&t.ignoreCase===e.ignoreCase;if(null!==t&&\"object\"==typeof t||null!==e&&\"object\"==typeof e){if(h(t)&&h(e)&&u(t)===u(e)&&!(t instanceof Float32Array||t instanceof Float64Array))return 0===i(new Uint8Array(t.buffer),new Uint8Array(e.buffer));if(a(t)!==a(e))return!1;var s=(r=r||{actual:[],expected:[]}).actual.indexOf(t);return-1!==s&&s===r.expected.indexOf(e)||(r.actual.push(t),r.expected.push(e),function(t,e,n,r){if(null==t||null==e)return!1;if(o.isPrimitive(t)||o.isPrimitive(e))return t===e;if(n&&Object.getPrototypeOf(t)!==Object.getPrototypeOf(e))return!1;var i=b(t),a=b(e);if(i&&!a||!i&&a)return!1;if(i)return _(t=l.call(t),e=l.call(e),n);var s,c,u=k(t),h=k(e);if(u.length!==h.length)return!1;for(u.sort(),h.sort(),c=u.length-1;c>=0;c--)if(u[c]!==h[c])return!1;for(c=u.length-1;c>=0;c--)if(!_(t[s=u[c]],e[s],n,r))return!1;return!0}(t,e,n,r))}return n?t===e:t==e}function b(t){return\"[object Arguments]\"==Object.prototype.toString.call(t)}function x(t,e){if(!t||!e)return!1;if(\"[object RegExp]\"==Object.prototype.toString.call(e))return e.test(t);try{if(t instanceof e)return!0}catch(n){}return!Error.isPrototypeOf(e)&&!0===e.call({},t)}function w(t,e,n,r){var i;if(\"function\"!=typeof e)throw new TypeError('\"block\" argument must be a function');\"string\"==typeof n&&(r=n,n=null),i=function(t){var e;try{t()}catch(n){e=n}return e}(e),r=(n&&n.name?\" (\"+n.name+\").\":\".\")+(r?\" \"+r:\".\"),t&&!i&&y(i,n,\"Missing expected exception\"+r);var a=\"string\"==typeof r,s=!t&&i&&!n;if((!t&&o.isError(i)&&a&&x(i,n)||s)&&y(i,n,\"Got unwanted exception\"+r),t&&i&&n&&!x(i,n)||!t&&i)throw i}d.AssertionError=function(t){this.name=\"AssertionError\",this.actual=t.actual,this.expected=t.expected,this.operator=t.operator,t.message?(this.message=t.message,this.generatedMessage=!1):(this.message=function(t){return m(g(t.actual),128)+\" \"+t.operator+\" \"+m(g(t.expected),128)}(this),this.generatedMessage=!0);var e=t.stackStartFunction||y;if(Error.captureStackTrace)Error.captureStackTrace(this,e);else{var n=new Error;if(n.stack){var r=n.stack,i=p(e),a=r.indexOf(\"\\n\"+i);if(a>=0){var o=r.indexOf(\"\\n\",a+1);r=r.substring(o+1)}this.stack=r}}},o.inherits(d.AssertionError,Error),d.fail=y,d.ok=v,d.equal=function(t,e,n){t!=e&&y(t,e,n,\"==\",d.equal)},d.notEqual=function(t,e,n){t==e&&y(t,e,n,\"!=\",d.notEqual)},d.deepEqual=function(t,e,n){_(t,e,!1)||y(t,e,n,\"deepEqual\",d.deepEqual)},d.deepStrictEqual=function(t,e,n){_(t,e,!0)||y(t,e,n,\"deepStrictEqual\",d.deepStrictEqual)},d.notDeepEqual=function(t,e,n){_(t,e,!1)&&y(t,e,n,\"notDeepEqual\",d.notDeepEqual)},d.notDeepStrictEqual=function t(e,n,r){_(e,n,!0)&&y(e,n,r,\"notDeepStrictEqual\",t)},d.strictEqual=function(t,e,n){t!==e&&y(t,e,n,\"===\",d.strictEqual)},d.notStrictEqual=function(t,e,n){t===e&&y(t,e,n,\"!==\",d.notStrictEqual)},d.throws=function(t,e,n){w(!0,t,e,n)},d.doesNotThrow=function(t,e,n){w(!1,t,e,n)},d.ifError=function(t){if(t)throw t},d.strict=r((function t(e,n){e||y(e,!0,n,\"==\",t)}),d,{equal:d.strictEqual,deepEqual:d.deepStrictEqual,notEqual:d.notStrictEqual,notDeepEqual:d.notDeepStrictEqual}),d.strict.strict=d.strict;var k=Object.keys||function(t){var e=[];for(var n in t)s.call(t,n)&&e.push(n);return e}}).call(this)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{\"object-assign\":499,\"util/\":76}],74:[function(t,e,n){e.exports=\"function\"==typeof Object.create?function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:function(t,e){t.super_=e;var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}},{}],75:[function(t,e,n){e.exports=function(t){return t&&\"object\"==typeof t&&\"function\"==typeof t.copy&&\"function\"==typeof t.fill&&\"function\"==typeof t.readUInt8}},{}],76:[function(t,e,n){(function(e,r){(function(){var i=/%[sdj%]/g;n.format=function(t){if(!y(t)){for(var e=[],n=0;n<arguments.length;n++)e.push(s(arguments[n]));return e.join(\" \")}n=1;for(var r=arguments,a=r.length,o=String(t).replace(i,(function(t){if(\"%%\"===t)return\"%\";if(n>=a)return t;switch(t){case\"%s\":return String(r[n++]);case\"%d\":return Number(r[n++]);case\"%j\":try{return JSON.stringify(r[n++])}catch(e){return\"[Circular]\"}default:return t}})),l=r[n];n<a;l=r[++n])m(l)||!b(l)?o+=\" \"+l:o+=\" \"+s(l);return o},n.deprecate=function(t,i){if(v(r.process))return function(){return n.deprecate(t,i).apply(this,arguments)};if(!0===e.noDeprecation)return t;var a=!1;return function(){if(!a){if(e.throwDeprecation)throw new Error(i);e.traceDeprecation?console.trace(i):console.error(i),a=!0}return t.apply(this,arguments)}};var a,o={};function s(t,e){var r={seen:[],stylize:c};return arguments.length>=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),p(e)?r.showHidden=e:e&&n._extend(r,e),v(r.showHidden)&&(r.showHidden=!1),v(r.depth)&&(r.depth=2),v(r.colors)&&(r.colors=!1),v(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=l),u(r,t,r.depth)}function l(t,e){var n=s.styles[e];return n?\"\\x1b[\"+s.colors[n][0]+\"m\"+t+\"\\x1b[\"+s.colors[n][1]+\"m\":t}function c(t,e){return t}function u(t,e,r){if(t.customInspect&&e&&k(e.inspect)&&e.inspect!==n.inspect&&(!e.constructor||e.constructor.prototype!==e)){var i=e.inspect(r,t);return y(i)||(i=u(t,i,r)),i}var a=function(t,e){if(v(e))return t.stylize(\"undefined\",\"undefined\");if(y(e)){var n=\"'\"+JSON.stringify(e).replace(/^\"|\"$/g,\"\").replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"')+\"'\";return t.stylize(n,\"string\")}return g(e)?t.stylize(\"\"+e,\"number\"):p(e)?t.stylize(\"\"+e,\"boolean\"):m(e)?t.stylize(\"null\",\"null\"):void 0}(t,e);if(a)return a;var o=Object.keys(e),s=function(t){var e={};return t.forEach((function(t,n){e[t]=!0})),e}(o);if(t.showHidden&&(o=Object.getOwnPropertyNames(e)),w(e)&&(o.indexOf(\"message\")>=0||o.indexOf(\"description\")>=0))return h(e);if(0===o.length){if(k(e))return t.stylize(\"[Function\"+(e.name?\": \"+e.name:\"\")+\"]\",\"special\");if(_(e))return t.stylize(RegExp.prototype.toString.call(e),\"regexp\");if(x(e))return t.stylize(Date.prototype.toString.call(e),\"date\");if(w(e))return h(e)}var l,c=\"\",b=!1,M=[\"{\",\"}\"];return f(e)&&(b=!0,M=[\"[\",\"]\"]),k(e)&&(c=\" [Function\"+(e.name?\": \"+e.name:\"\")+\"]\"),_(e)&&(c=\" \"+RegExp.prototype.toString.call(e)),x(e)&&(c=\" \"+Date.prototype.toUTCString.call(e)),w(e)&&(c=\" \"+h(e)),0!==o.length||b&&0!=e.length?r<0?_(e)?t.stylize(RegExp.prototype.toString.call(e),\"regexp\"):t.stylize(\"[Object]\",\"special\"):(t.seen.push(e),l=b?function(t,e,n,r,i){for(var a=[],o=0,s=e.length;o<s;++o)L(e,String(o))?a.push(d(t,e,n,r,String(o),!0)):a.push(\"\");return i.forEach((function(i){i.match(/^\\d+$/)||a.push(d(t,e,n,r,i,!0))})),a}(t,e,r,s,o):o.map((function(n){return d(t,e,r,s,n,b)})),t.seen.pop(),function(t,e,n){return t.reduce((function(t,e){return e.indexOf(\"\\n\"),t+e.replace(/\\u001b\\[\\d\\d?m/g,\"\").length+1}),0)>60?n[0]+(\"\"===e?\"\":e+\"\\n \")+\" \"+t.join(\",\\n  \")+\" \"+n[1]:n[0]+e+\" \"+t.join(\", \")+\" \"+n[1]}(l,c,M)):M[0]+c+M[1]}function h(t){return\"[\"+Error.prototype.toString.call(t)+\"]\"}function d(t,e,n,r,i,a){var o,s,l;if((l=Object.getOwnPropertyDescriptor(e,i)||{value:e[i]}).get?s=t.stylize(l.set?\"[Getter/Setter]\":\"[Getter]\",\"special\"):l.set&&(s=t.stylize(\"[Setter]\",\"special\")),L(r,i)||(o=\"[\"+i+\"]\"),s||(t.seen.indexOf(l.value)<0?(s=m(n)?u(t,l.value,null):u(t,l.value,n-1)).indexOf(\"\\n\")>-1&&(s=a?s.split(\"\\n\").map((function(t){return\"  \"+t})).join(\"\\n\").substr(2):\"\\n\"+s.split(\"\\n\").map((function(t){return\"   \"+t})).join(\"\\n\")):s=t.stylize(\"[Circular]\",\"special\")),v(o)){if(a&&i.match(/^\\d+$/))return s;(o=JSON.stringify(\"\"+i)).match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)?(o=o.substr(1,o.length-2),o=t.stylize(o,\"name\")):(o=o.replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"').replace(/(^\"|\"$)/g,\"'\"),o=t.stylize(o,\"string\"))}return o+\": \"+s}function f(t){return Array.isArray(t)}function p(t){return\"boolean\"==typeof t}function m(t){return null===t}function g(t){return\"number\"==typeof t}function y(t){return\"string\"==typeof t}function v(t){return void 0===t}function _(t){return b(t)&&\"[object RegExp]\"===M(t)}function b(t){return\"object\"==typeof t&&null!==t}function x(t){return b(t)&&\"[object Date]\"===M(t)}function w(t){return b(t)&&(\"[object Error]\"===M(t)||t instanceof Error)}function k(t){return\"function\"==typeof t}function M(t){return Object.prototype.toString.call(t)}function T(t){return t<10?\"0\"+t.toString(10):t.toString(10)}n.debuglog=function(t){if(v(a)&&(a=e.env.NODE_DEBUG||\"\"),t=t.toUpperCase(),!o[t])if(new RegExp(\"\\\\b\"+t+\"\\\\b\",\"i\").test(a)){var r=e.pid;o[t]=function(){var e=n.format.apply(n,arguments);console.error(\"%s %d: %s\",t,r,e)}}else o[t]=function(){};return o[t]},n.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:\"cyan\",number:\"yellow\",boolean:\"yellow\",undefined:\"grey\",null:\"bold\",string:\"green\",date:\"magenta\",regexp:\"red\"},n.isArray=f,n.isBoolean=p,n.isNull=m,n.isNullOrUndefined=function(t){return null==t},n.isNumber=g,n.isString=y,n.isSymbol=function(t){return\"symbol\"==typeof t},n.isUndefined=v,n.isRegExp=_,n.isObject=b,n.isDate=x,n.isError=w,n.isFunction=k,n.isPrimitive=function(t){return null===t||\"boolean\"==typeof t||\"number\"==typeof t||\"string\"==typeof t||\"symbol\"==typeof t||void 0===t},n.isBuffer=t(\"./support/isBuffer\");var S=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"];function A(){var t=new Date,e=[T(t.getHours()),T(t.getMinutes()),T(t.getSeconds())].join(\":\");return[t.getDate(),S[t.getMonth()],e].join(\" \")}function L(t,e){return Object.prototype.hasOwnProperty.call(t,e)}n.log=function(){console.log(\"%s - %s\",A(),n.format.apply(n,arguments))},n.inherits=t(\"inherits\"),n._extend=function(t,e){if(!e||!b(e))return t;for(var n=Object.keys(e),r=n.length;r--;)t[n[r]]=e[n[r]];return t}}).call(this)}).call(this,t(\"_process\"),\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{\"./support/isBuffer\":75,_process:526,inherits:74}],77:[function(t,e,n){e.exports=function(t){return atob(t)}},{}],78:[function(t,e,n){\"use strict\";e.exports=function(t,e){for(var n=e.length,a=new Array(n+1),o=0;o<n;++o){for(var s=new Array(n+1),l=0;l<=n;++l)s[l]=t[l][o];a[o]=s}for(a[n]=new Array(n+1),o=0;o<=n;++o)a[n][o]=1;var c=new Array(n+1);for(o=0;o<n;++o)c[o]=e[o];c[n]=1;var u=r(a,c),h=i(u[n+1]);0===h&&(h=1);var d=new Array(n+1);for(o=0;o<=n;++o)d[o]=i(u[o])/h;return d};var r=t(\"robust-linear-solve\");function i(t){for(var e=0,n=0;n<t.length;++n)e+=t[n];return e}},{\"robust-linear-solve\":547}],79:[function(t,e,n){\"use strict\";n.byteLength=function(t){var e=c(t),n=e[1];return 3*(e[0]+n)/4-n},n.toByteArray=function(t){var e,n,r=c(t),o=r[0],s=r[1],l=new a(function(t,e,n){return 3*(e+n)/4-n}(0,o,s)),u=0,h=s>0?o-4:o;for(n=0;n<h;n+=4)e=i[t.charCodeAt(n)]<<18|i[t.charCodeAt(n+1)]<<12|i[t.charCodeAt(n+2)]<<6|i[t.charCodeAt(n+3)],l[u++]=e>>16&255,l[u++]=e>>8&255,l[u++]=255&e;return 2===s&&(e=i[t.charCodeAt(n)]<<2|i[t.charCodeAt(n+1)]>>4,l[u++]=255&e),1===s&&(e=i[t.charCodeAt(n)]<<10|i[t.charCodeAt(n+1)]<<4|i[t.charCodeAt(n+2)]>>2,l[u++]=e>>8&255,l[u++]=255&e),l},n.fromByteArray=function(t){for(var e,n=t.length,i=n%3,a=[],o=16383,s=0,l=n-i;s<l;s+=o)a.push(u(t,s,s+o>l?l:s+o));return 1===i?a.push(r[(e=t[n-1])>>2]+r[e<<4&63]+\"==\"):2===i&&a.push(r[(e=(t[n-2]<<8)+t[n-1])>>10]+r[e>>4&63]+r[e<<2&63]+\"=\"),a.join(\"\")};for(var r=[],i=[],a=\"undefined\"!=typeof Uint8Array?Uint8Array:Array,o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",s=0,l=o.length;s<l;++s)r[s]=o[s],i[o.charCodeAt(s)]=s;function c(t){var e=t.length;if(e%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var n=t.indexOf(\"=\");return-1===n&&(n=e),[n,n===e?0:4-n%4]}function u(t,e,n){for(var i=[],a=e;a<n;a+=3)i.push(r[(o=(t[a]<<16&16711680)+(t[a+1]<<8&65280)+(255&t[a+2]))>>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);var o;return i.join(\"\")}i[\"-\".charCodeAt(0)]=62,i[\"_\".charCodeAt(0)]=63},{}],80:[function(t,e,n){\"use strict\";var r=t(\"./lib/rationalize\");e.exports=function(t,e){return r(t[0].mul(e[1]).add(e[0].mul(t[1])),t[1].mul(e[1]))}},{\"./lib/rationalize\":90}],81:[function(t,e,n){\"use strict\";e.exports=function(t,e){return t[0].mul(e[1]).cmp(e[0].mul(t[1]))}},{}],82:[function(t,e,n){\"use strict\";var r=t(\"./lib/rationalize\");e.exports=function(t,e){return r(t[0].mul(e[1]),t[1].mul(e[0]))}},{\"./lib/rationalize\":90}],83:[function(t,e,n){\"use strict\";var r=t(\"./is-rat\"),i=t(\"./lib/is-bn\"),a=t(\"./lib/num-to-bn\"),o=t(\"./lib/str-to-bn\"),s=t(\"./lib/rationalize\"),l=t(\"./div\");e.exports=function t(e,n){if(r(e))return n?l(e,t(n)):[e[0].clone(),e[1].clone()];var c,u,h=0;if(i(e))c=e.clone();else if(\"string\"==typeof e)c=o(e);else{if(0===e)return[a(0),a(1)];if(e===Math.floor(e))c=a(e);else{for(;e!==Math.floor(e);)e*=Math.pow(2,256),h-=256;c=a(e)}}if(r(n))c.mul(n[1]),u=n[0].clone();else if(i(n))u=n.clone();else if(\"string\"==typeof n)u=o(n);else if(n)if(n===Math.floor(n))u=a(n);else{for(;n!==Math.floor(n);)n*=Math.pow(2,256),h+=256;u=a(n)}else u=a(1);return h>0?c=c.ushln(h):h<0&&(u=u.ushln(-h)),s(c,u)}},{\"./div\":82,\"./is-rat\":84,\"./lib/is-bn\":88,\"./lib/num-to-bn\":89,\"./lib/rationalize\":90,\"./lib/str-to-bn\":91}],84:[function(t,e,n){\"use strict\";var r=t(\"./lib/is-bn\");e.exports=function(t){return Array.isArray(t)&&2===t.length&&r(t[0])&&r(t[1])}},{\"./lib/is-bn\":88}],85:[function(t,e,n){\"use strict\";var r=t(\"bn.js\");e.exports=function(t){return t.cmp(new r(0))}},{\"bn.js\":99}],86:[function(t,e,n){\"use strict\";var r=t(\"./bn-sign\");e.exports=function(t){var e=t.length,n=t.words,i=0;if(1===e)i=n[0];else if(2===e)i=n[0]+67108864*n[1];else for(var a=0;a<e;a++)i+=n[a]*Math.pow(67108864,a);return r(t)*i}},{\"./bn-sign\":85}],87:[function(t,e,n){\"use strict\";var r=t(\"double-bits\"),i=t(\"bit-twiddle\").countTrailingZeros;e.exports=function(t){var e=i(r.lo(t));if(e<32)return e;var n=i(r.hi(t));return n>20?52:n+32}},{\"bit-twiddle\":97,\"double-bits\":173}],88:[function(t,e,n){\"use strict\";t(\"bn.js\"),e.exports=function(t){return t&&\"object\"==typeof t&&Boolean(t.words)}},{\"bn.js\":99}],89:[function(t,e,n){\"use strict\";var r=t(\"bn.js\"),i=t(\"double-bits\");e.exports=function(t){var e=i.exponent(t);return e<52?new r(t):new r(t*Math.pow(2,52-e)).ushln(e-52)}},{\"bn.js\":99,\"double-bits\":173}],90:[function(t,e,n){\"use strict\";var r=t(\"./num-to-bn\"),i=t(\"./bn-sign\");e.exports=function(t,e){var n=i(t),a=i(e);if(0===n)return[r(0),r(1)];if(0===a)return[r(0),r(0)];a<0&&(t=t.neg(),e=e.neg());var o=t.gcd(e);return o.cmpn(1)?[t.div(o),e.div(o)]:[t,e]}},{\"./bn-sign\":85,\"./num-to-bn\":89}],91:[function(t,e,n){\"use strict\";var r=t(\"bn.js\");e.exports=function(t){return new r(t)}},{\"bn.js\":99}],92:[function(t,e,n){\"use strict\";var r=t(\"./lib/rationalize\");e.exports=function(t,e){return r(t[0].mul(e[0]),t[1].mul(e[1]))}},{\"./lib/rationalize\":90}],93:[function(t,e,n){\"use strict\";var r=t(\"./lib/bn-sign\");e.exports=function(t){return r(t[0])*r(t[1])}},{\"./lib/bn-sign\":85}],94:[function(t,e,n){\"use strict\";var r=t(\"./lib/rationalize\");e.exports=function(t,e){return r(t[0].mul(e[1]).sub(t[1].mul(e[0])),t[1].mul(e[1]))}},{\"./lib/rationalize\":90}],95:[function(t,e,n){\"use strict\";var r=t(\"./lib/bn-to-num\"),i=t(\"./lib/ctz\");e.exports=function(t){var e=t[0],n=t[1];if(0===e.cmpn(0))return 0;var a=e.abs().divmod(n.abs()),o=r(a.div),s=a.mod,l=e.negative!==n.negative?-1:1;if(0===s.cmpn(0))return l*o;if(o){var c=i(o)+4;return l*(o+(h=r(s.ushln(c).divRound(n)))*Math.pow(2,-c))}var u=n.bitLength()-s.bitLength()+53,h=r(s.ushln(u).divRound(n));return u<1023?l*h*Math.pow(2,-u):l*(h*=Math.pow(2,-1023))*Math.pow(2,1023-u)}},{\"./lib/bn-to-num\":86,\"./lib/ctz\":87}],96:[function(t,e,n){\"use strict\";function r(t,e,n,r,i){var a=[\"function \",t,\"(a,l,h,\",r.join(\",\"),\"){\",i?\"\":\"var i=\",n?\"l-1\":\"h+1\",\";while(l<=h){var m=(l+h)>>>1,x=a[m]\"];return i?e.indexOf(\"c\")<0?a.push(\";if(x===y){return m}else if(x<=y){\"):a.push(\";var p=c(x,y);if(p===0){return m}else if(p<=0){\"):a.push(\";if(\",e,\"){i=m;\"),a.push(n?\"l=m+1}else{h=m-1}\":\"h=m-1}else{l=m+1}\"),a.push(\"}\"),a.push(i?\"return -1};\":\"return i};\"),a.join(\"\")}function i(t,e,n,i){return new Function([r(\"A\",\"x\"+t+\"y\",e,[\"y\"],i),r(\"P\",\"c(x,y)\"+t+\"0\",e,[\"y\",\"c\"],i),\"function dispatchBsearch\",n,\"(a,y,c,l,h){if(typeof(c)==='function'){return P(a,(l===void 0)?0:l|0,(h===void 0)?a.length-1:h|0,y,c)}else{return A(a,(c===void 0)?0:c|0,(l===void 0)?a.length-1:l|0,y)}}return dispatchBsearch\",n].join(\"\"))()}e.exports={ge:i(\">=\",!1,\"GE\"),gt:i(\">\",!1,\"GT\"),lt:i(\"<\",!0,\"LT\"),le:i(\"<=\",!0,\"LE\"),eq:i(\"-\",!0,\"EQ\",!0)}},{}],97:[function(t,e,n){\"use strict\";function r(t){var e=32;return(t&=-t)&&e--,65535&t&&(e-=16),16711935&t&&(e-=8),252645135&t&&(e-=4),858993459&t&&(e-=2),1431655765&t&&(e-=1),e}n.INT_BITS=32,n.INT_MAX=2147483647,n.INT_MIN=-1<<31,n.sign=function(t){return(t>0)-(t<0)},n.abs=function(t){var e=t>>31;return(t^e)-e},n.min=function(t,e){return e^(t^e)&-(t<e)},n.max=function(t,e){return t^(t^e)&-(t<e)},n.isPow2=function(t){return!(t&t-1||!t)},n.log2=function(t){var e,n;return e=(t>65535)<<4,e|=n=((t>>>=e)>255)<<3,e|=n=((t>>>=n)>15)<<2,(e|=n=((t>>>=n)>3)<<1)|(t>>>=n)>>1},n.log10=function(t){return t>=1e9?9:t>=1e8?8:t>=1e7?7:t>=1e6?6:t>=1e5?5:t>=1e4?4:t>=1e3?3:t>=100?2:t>=10?1:0},n.popCount=function(t){return 16843009*((t=(858993459&(t-=t>>>1&1431655765))+(t>>>2&858993459))+(t>>>4)&252645135)>>>24},n.countTrailingZeros=r,n.nextPow2=function(t){return t+=0===t,--t,t|=t>>>1,t|=t>>>2,t|=t>>>4,1+((t|=t>>>8)|t>>>16)},n.prevPow2=function(t){return t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,(t|=t>>>16)-(t>>>1)},n.parity=function(t){return t^=t>>>16,t^=t>>>8,t^=t>>>4,27030>>>(t&=15)&1};var i=new Array(256);!function(t){for(var e=0;e<256;++e){var n=e,r=e,i=7;for(n>>>=1;n;n>>>=1)r<<=1,r|=1&n,--i;t[e]=r<<i&255}}(i),n.reverse=function(t){return i[255&t]<<24|i[t>>>8&255]<<16|i[t>>>16&255]<<8|i[t>>>24&255]},n.interleave2=function(t,e){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t&=65535)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e&=65535)|e<<8))|e<<4))|e<<2))|e<<1))<<1},n.deinterleave2=function(t,e){return(t=65535&((t=16711935&((t=252645135&((t=858993459&((t=t>>>e&1431655765)|t>>>1))|t>>>2))|t>>>4))|t>>>16))<<16>>16},n.interleave3=function(t,e,n){return t=1227133513&((t=3272356035&((t=251719695&((t=4278190335&((t&=1023)|t<<16))|t<<8))|t<<4))|t<<2),(t|=(e=1227133513&((e=3272356035&((e=251719695&((e=4278190335&((e&=1023)|e<<16))|e<<8))|e<<4))|e<<2))<<1)|(n=1227133513&((n=3272356035&((n=251719695&((n=4278190335&((n&=1023)|n<<16))|n<<8))|n<<4))|n<<2))<<2},n.deinterleave3=function(t,e){return(t=1023&((t=4278190335&((t=251719695&((t=3272356035&((t=t>>>e&1227133513)|t>>>2))|t>>>4))|t>>>8))|t>>>16))<<22>>22},n.nextCombination=function(t){var e=t|t-1;return e+1|(~e&-~e)-1>>>r(t)+1}},{}],98:[function(t,e,n){\"use strict\";var r=t(\"clamp\");e.exports=function(t,e){e||(e={});var n,o,s,l,c,u,h,d,f,p=null==e.cutoff?.25:e.cutoff,m=null==e.radius?8:e.radius,g=e.channel||0;if(ArrayBuffer.isView(t)||Array.isArray(t)){if(!e.width||!e.height)throw Error(\"For raw data width and height should be provided by options\");n=e.width,o=e.height,l=t,u=e.stride?e.stride:Math.floor(t.length/n/o)}else window.HTMLCanvasElement&&t instanceof window.HTMLCanvasElement?(l=(h=t).getContext(\"2d\").getImageData(0,0,n=h.width,o=h.height).data,u=4):window.CanvasRenderingContext2D&&t instanceof window.CanvasRenderingContext2D?(l=t.getImageData(0,0,n=(h=t.canvas).width,o=h.height).data,u=4):window.ImageData&&t instanceof window.ImageData&&(n=t.width,o=t.height,l=t.data,u=4);if(s=Math.max(n,o),window.Uint8ClampedArray&&l instanceof window.Uint8ClampedArray||window.Uint8Array&&l instanceof window.Uint8Array)for(c=l,l=Array(n*o),d=0,f=c.length;d<f;d++)l[d]=c[d*u+g]/255;else if(1!==u)throw Error(\"Raw data can have only 1 value per pixel\");var y=Array(n*o),v=Array(n*o),_=Array(s),b=Array(s),x=Array(s+1),w=Array(s);for(d=0,f=n*o;d<f;d++){var k=l[d];y[d]=1===k?0:0===k?i:Math.pow(Math.max(0,.5-k),2),v[d]=1===k?i:0===k?0:Math.pow(Math.max(0,k-.5),2)}a(y,n,o,_,b,w,x),a(v,n,o,_,b,w,x);var M=window.Float32Array?new Float32Array(n*o):new Array(n*o);for(d=0,f=n*o;d<f;d++)M[d]=r(1-((y[d]-v[d])/m+p),0,1);return M};var i=1e20;function a(t,e,n,r,i,a,s){for(var l=0;l<e;l++){for(var c=0;c<n;c++)r[c]=t[c*e+l];for(o(r,i,a,s,n),c=0;c<n;c++)t[c*e+l]=i[c]}for(c=0;c<n;c++){for(l=0;l<e;l++)r[l]=t[c*e+l];for(o(r,i,a,s,e),l=0;l<e;l++)t[c*e+l]=Math.sqrt(i[l])}}function o(t,e,n,r,a){n[0]=0,r[0]=-i,r[1]=+i;for(var o=1,s=0;o<a;o++){for(var l=(t[o]+o*o-(t[n[s]]+n[s]*n[s]))/(2*o-2*n[s]);l<=r[s];)s--,l=(t[o]+o*o-(t[n[s]]+n[s]*n[s]))/(2*o-2*n[s]);n[++s]=o,r[s]=l,r[s+1]=+i}for(o=0,s=0;o<a;o++){for(;r[s+1]<o;)s++;e[o]=(o-n[s])*(o-n[s])+t[n[s]]}}},{clamp:120}],99:[function(t,e,n){!function(e,n){\"use strict\";function r(t,e){if(!t)throw new Error(e||\"Assertion failed\")}function i(t,e){t.super_=e;var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}function a(t,e,n){if(a.isBN(t))return t;this.negative=0,this.words=null,this.length=0,this.red=null,null!==t&&(\"le\"!==e&&\"be\"!==e||(n=e,e=10),this._init(t||0,e||10,n||\"be\"))}var o;\"object\"==typeof e?e.exports=a:n.BN=a,a.BN=a,a.wordSize=26;try{o=t(\"buffer\").Buffer}catch(M){}function s(t,e,n){for(var r=0,i=Math.min(t.length,n),a=e;a<i;a++){var o=t.charCodeAt(a)-48;r<<=4,r|=o>=49&&o<=54?o-49+10:o>=17&&o<=22?o-17+10:15&o}return r}function l(t,e,n,r){for(var i=0,a=Math.min(t.length,n),o=e;o<a;o++){var s=t.charCodeAt(o)-48;i*=r,i+=s>=49?s-49+10:s>=17?s-17+10:s}return i}a.isBN=function(t){return t instanceof a||null!==t&&\"object\"==typeof t&&t.constructor.wordSize===a.wordSize&&Array.isArray(t.words)},a.max=function(t,e){return t.cmp(e)>0?t:e},a.min=function(t,e){return t.cmp(e)<0?t:e},a.prototype._init=function(t,e,n){if(\"number\"==typeof t)return this._initNumber(t,e,n);if(\"object\"==typeof t)return this._initArray(t,e,n);\"hex\"===e&&(e=16),r(e===(0|e)&&e>=2&&e<=36);var i=0;\"-\"===(t=t.toString().replace(/\\s+/g,\"\"))[0]&&i++,16===e?this._parseHex(t,i):this._parseBase(t,e,i),\"-\"===t[0]&&(this.negative=1),this.strip(),\"le\"===n&&this._initArray(this.toArray(),e,n)},a.prototype._initNumber=function(t,e,n){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(r(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),\"le\"===n&&this._initArray(this.toArray(),e,n)},a.prototype._initArray=function(t,e,n){if(r(\"number\"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var i=0;i<this.length;i++)this.words[i]=0;var a,o,s=0;if(\"be\"===n)for(i=t.length-1,a=0;i>=0;i-=3)this.words[a]|=(o=t[i]|t[i-1]<<8|t[i-2]<<16)<<s&67108863,this.words[a+1]=o>>>26-s&67108863,(s+=24)>=26&&(s-=26,a++);else if(\"le\"===n)for(i=0,a=0;i<t.length;i+=3)this.words[a]|=(o=t[i]|t[i+1]<<8|t[i+2]<<16)<<s&67108863,this.words[a+1]=o>>>26-s&67108863,(s+=24)>=26&&(s-=26,a++);return this.strip()},a.prototype._parseHex=function(t,e){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var n=0;n<this.length;n++)this.words[n]=0;var r,i,a=0;for(n=t.length-6,r=0;n>=e;n-=6)i=s(t,n,n+6),this.words[r]|=i<<a&67108863,this.words[r+1]|=i>>>26-a&4194303,(a+=24)>=26&&(a-=26,r++);n+6!==e&&(i=s(t,e,n+6),this.words[r]|=i<<a&67108863,this.words[r+1]|=i>>>26-a&4194303),this.strip()},a.prototype._parseBase=function(t,e,n){this.words=[0],this.length=1;for(var r=0,i=1;i<=67108863;i*=e)r++;r--,i=i/e|0;for(var a=t.length-n,o=a%r,s=Math.min(a,a-o)+n,c=0,u=n;u<s;u+=r)c=l(t,u,u+r,e),this.imuln(i),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c);if(0!==o){var h=1;for(c=l(t,u,t.length,e),u=0;u<o;u++)h*=e;this.imuln(h),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c)}},a.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},a.prototype.clone=function(){var t=new a(null);return this.copy(t),t},a.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},a.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},a.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},a.prototype.inspect=function(){return(this.red?\"<BN-R: \":\"<BN: \")+this.toString(16)+\">\"};var c=[\"\",\"0\",\"00\",\"000\",\"0000\",\"00000\",\"000000\",\"0000000\",\"00000000\",\"000000000\",\"0000000000\",\"00000000000\",\"000000000000\",\"0000000000000\",\"00000000000000\",\"000000000000000\",\"0000000000000000\",\"00000000000000000\",\"000000000000000000\",\"0000000000000000000\",\"00000000000000000000\",\"000000000000000000000\",\"0000000000000000000000\",\"00000000000000000000000\",\"000000000000000000000000\",\"0000000000000000000000000\"],u=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],h=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function d(t,e,n){n.negative=e.negative^t.negative;var r=t.length+e.length|0;n.length=r,r=r-1|0;var i=0|t.words[0],a=0|e.words[0],o=i*a,s=o/67108864|0;n.words[0]=67108863&o;for(var l=1;l<r;l++){for(var c=s>>>26,u=67108863&s,h=Math.min(l,e.length-1),d=Math.max(0,l-t.length+1);d<=h;d++)c+=(o=(i=0|t.words[l-d|0])*(a=0|e.words[d])+u)/67108864|0,u=67108863&o;n.words[l]=0|u,s=0|c}return 0!==s?n.words[l]=0|s:n.length--,n.strip()}a.prototype.toString=function(t,e){var n;if(e=0|e||1,16===(t=t||10)||\"hex\"===t){n=\"\";for(var i=0,a=0,o=0;o<this.length;o++){var s=this.words[o],l=(16777215&(s<<i|a)).toString(16);n=0!=(a=s>>>24-i&16777215)||o!==this.length-1?c[6-l.length]+l+n:l+n,(i+=2)>=26&&(i-=26,o--)}for(0!==a&&(n=a.toString(16)+n);n.length%e!=0;)n=\"0\"+n;return 0!==this.negative&&(n=\"-\"+n),n}if(t===(0|t)&&t>=2&&t<=36){var d=u[t],f=h[t];n=\"\";var p=this.clone();for(p.negative=0;!p.isZero();){var m=p.modn(f).toString(t);n=(p=p.idivn(f)).isZero()?m+n:c[d-m.length]+m+n}for(this.isZero()&&(n=\"0\"+n);n.length%e!=0;)n=\"0\"+n;return 0!==this.negative&&(n=\"-\"+n),n}r(!1,\"Base should be between 2 and 36\")},a.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&r(!1,\"Number can only safely store up to 53 bits\"),0!==this.negative?-t:t},a.prototype.toJSON=function(){return this.toString(16)},a.prototype.toBuffer=function(t,e){return r(void 0!==o),this.toArrayLike(o,t,e)},a.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},a.prototype.toArrayLike=function(t,e,n){var i=this.byteLength(),a=n||Math.max(1,i);r(i<=a,\"byte array longer than desired length\"),r(a>0,\"Requested array length <= 0\"),this.strip();var o,s,l=\"le\"===e,c=new t(a),u=this.clone();if(l){for(s=0;!u.isZero();s++)o=u.andln(255),u.iushrn(8),c[s]=o;for(;s<a;s++)c[s]=0}else{for(s=0;s<a-i;s++)c[s]=0;for(s=0;!u.isZero();s++)o=u.andln(255),u.iushrn(8),c[a-s-1]=o}return c},a.prototype._countBits=Math.clz32?function(t){return 32-Math.clz32(t)}:function(t){var e=t,n=0;return e>=4096&&(n+=13,e>>>=13),e>=64&&(n+=7,e>>>=7),e>=8&&(n+=4,e>>>=4),e>=2&&(n+=2,e>>>=2),n+e},a.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,n=0;return 0==(8191&e)&&(n+=13,e>>>=13),0==(127&e)&&(n+=7,e>>>=7),0==(15&e)&&(n+=4,e>>>=4),0==(3&e)&&(n+=2,e>>>=2),0==(1&e)&&n++,n},a.prototype.bitLength=function(){var t=this._countBits(this.words[this.length-1]);return 26*(this.length-1)+t},a.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var n=this._zeroBits(this.words[e]);if(t+=n,26!==n)break}return t},a.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},a.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},a.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},a.prototype.isNeg=function(){return 0!==this.negative},a.prototype.neg=function(){return this.clone().ineg()},a.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},a.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},a.prototype.ior=function(t){return r(0==(this.negative|t.negative)),this.iuor(t)},a.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},a.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},a.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var n=0;n<e.length;n++)this.words[n]=this.words[n]&t.words[n];return this.length=e.length,this.strip()},a.prototype.iand=function(t){return r(0==(this.negative|t.negative)),this.iuand(t)},a.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},a.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},a.prototype.iuxor=function(t){var e,n;this.length>t.length?(e=this,n=t):(e=t,n=this);for(var r=0;r<n.length;r++)this.words[r]=e.words[r]^n.words[r];if(this!==e)for(;r<e.length;r++)this.words[r]=e.words[r];return this.length=e.length,this.strip()},a.prototype.ixor=function(t){return r(0==(this.negative|t.negative)),this.iuxor(t)},a.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},a.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},a.prototype.inotn=function(t){r(\"number\"==typeof t&&t>=0);var e=0|Math.ceil(t/26),n=t%26;this._expand(e),n>0&&e--;for(var i=0;i<e;i++)this.words[i]=67108863&~this.words[i];return n>0&&(this.words[i]=~this.words[i]&67108863>>26-n),this.strip()},a.prototype.notn=function(t){return this.clone().inotn(t)},a.prototype.setn=function(t,e){r(\"number\"==typeof t&&t>=0);var n=t/26|0,i=t%26;return this._expand(n+1),this.words[n]=e?this.words[n]|1<<i:this.words[n]&~(1<<i),this.strip()},a.prototype.iadd=function(t){var e,n,r;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();this.length>t.length?(n=this,r=t):(n=t,r=this);for(var i=0,a=0;a<r.length;a++)this.words[a]=67108863&(e=(0|n.words[a])+(0|r.words[a])+i),i=e>>>26;for(;0!==i&&a<n.length;a++)this.words[a]=67108863&(e=(0|n.words[a])+i),i=e>>>26;if(this.length=n.length,0!==i)this.words[this.length]=i,this.length++;else if(n!==this)for(;a<n.length;a++)this.words[a]=n.words[a];return this},a.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},a.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var n,r,i=this.cmp(t);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(n=this,r=t):(n=t,r=this);for(var a=0,o=0;o<r.length;o++)a=(e=(0|n.words[o])-(0|r.words[o])+a)>>26,this.words[o]=67108863&e;for(;0!==a&&o<n.length;o++)a=(e=(0|n.words[o])+a)>>26,this.words[o]=67108863&e;if(0===a&&o<n.length&&n!==this)for(;o<n.length;o++)this.words[o]=n.words[o];return this.length=Math.max(this.length,o),n!==this&&(this.negative=1),this.strip()},a.prototype.sub=function(t){return this.clone().isub(t)};var f=function(t,e,n){var r,i,a,o=t.words,s=e.words,l=n.words,c=0,u=0|o[0],h=8191&u,d=u>>>13,f=0|o[1],p=8191&f,m=f>>>13,g=0|o[2],y=8191&g,v=g>>>13,_=0|o[3],b=8191&_,x=_>>>13,w=0|o[4],k=8191&w,M=w>>>13,T=0|o[5],S=8191&T,A=T>>>13,L=0|o[6],C=8191&L,E=L>>>13,O=0|o[7],D=8191&O,I=O>>>13,P=0|o[8],R=8191&P,z=P>>>13,j=0|o[9],F=8191&j,N=j>>>13,B=0|s[0],Y=8191&B,H=B>>>13,V=0|s[1],U=8191&V,W=V>>>13,q=0|s[2],G=8191&q,X=q>>>13,Z=0|s[3],J=8191&Z,K=Z>>>13,$=0|s[4],Q=8191&$,tt=$>>>13,et=0|s[5],nt=8191&et,rt=et>>>13,it=0|s[6],at=8191&it,ot=it>>>13,st=0|s[7],lt=8191&st,ct=st>>>13,ut=0|s[8],ht=8191&ut,dt=ut>>>13,ft=0|s[9],pt=8191&ft,mt=ft>>>13;n.negative=t.negative^e.negative,n.length=19;var gt=(c+(r=Math.imul(h,Y))|0)+((8191&(i=(i=Math.imul(h,H))+Math.imul(d,Y)|0))<<13)|0;c=((a=Math.imul(d,H))+(i>>>13)|0)+(gt>>>26)|0,gt&=67108863,r=Math.imul(p,Y),i=(i=Math.imul(p,H))+Math.imul(m,Y)|0,a=Math.imul(m,H);var yt=(c+(r=r+Math.imul(h,U)|0)|0)+((8191&(i=(i=i+Math.imul(h,W)|0)+Math.imul(d,U)|0))<<13)|0;c=((a=a+Math.imul(d,W)|0)+(i>>>13)|0)+(yt>>>26)|0,yt&=67108863,r=Math.imul(y,Y),i=(i=Math.imul(y,H))+Math.imul(v,Y)|0,a=Math.imul(v,H),r=r+Math.imul(p,U)|0,i=(i=i+Math.imul(p,W)|0)+Math.imul(m,U)|0,a=a+Math.imul(m,W)|0;var vt=(c+(r=r+Math.imul(h,G)|0)|0)+((8191&(i=(i=i+Math.imul(h,X)|0)+Math.imul(d,G)|0))<<13)|0;c=((a=a+Math.imul(d,X)|0)+(i>>>13)|0)+(vt>>>26)|0,vt&=67108863,r=Math.imul(b,Y),i=(i=Math.imul(b,H))+Math.imul(x,Y)|0,a=Math.imul(x,H),r=r+Math.imul(y,U)|0,i=(i=i+Math.imul(y,W)|0)+Math.imul(v,U)|0,a=a+Math.imul(v,W)|0,r=r+Math.imul(p,G)|0,i=(i=i+Math.imul(p,X)|0)+Math.imul(m,G)|0,a=a+Math.imul(m,X)|0;var _t=(c+(r=r+Math.imul(h,J)|0)|0)+((8191&(i=(i=i+Math.imul(h,K)|0)+Math.imul(d,J)|0))<<13)|0;c=((a=a+Math.imul(d,K)|0)+(i>>>13)|0)+(_t>>>26)|0,_t&=67108863,r=Math.imul(k,Y),i=(i=Math.imul(k,H))+Math.imul(M,Y)|0,a=Math.imul(M,H),r=r+Math.imul(b,U)|0,i=(i=i+Math.imul(b,W)|0)+Math.imul(x,U)|0,a=a+Math.imul(x,W)|0,r=r+Math.imul(y,G)|0,i=(i=i+Math.imul(y,X)|0)+Math.imul(v,G)|0,a=a+Math.imul(v,X)|0,r=r+Math.imul(p,J)|0,i=(i=i+Math.imul(p,K)|0)+Math.imul(m,J)|0,a=a+Math.imul(m,K)|0;var bt=(c+(r=r+Math.imul(h,Q)|0)|0)+((8191&(i=(i=i+Math.imul(h,tt)|0)+Math.imul(d,Q)|0))<<13)|0;c=((a=a+Math.imul(d,tt)|0)+(i>>>13)|0)+(bt>>>26)|0,bt&=67108863,r=Math.imul(S,Y),i=(i=Math.imul(S,H))+Math.imul(A,Y)|0,a=Math.imul(A,H),r=r+Math.imul(k,U)|0,i=(i=i+Math.imul(k,W)|0)+Math.imul(M,U)|0,a=a+Math.imul(M,W)|0,r=r+Math.imul(b,G)|0,i=(i=i+Math.imul(b,X)|0)+Math.imul(x,G)|0,a=a+Math.imul(x,X)|0,r=r+Math.imul(y,J)|0,i=(i=i+Math.imul(y,K)|0)+Math.imul(v,J)|0,a=a+Math.imul(v,K)|0,r=r+Math.imul(p,Q)|0,i=(i=i+Math.imul(p,tt)|0)+Math.imul(m,Q)|0,a=a+Math.imul(m,tt)|0;var xt=(c+(r=r+Math.imul(h,nt)|0)|0)+((8191&(i=(i=i+Math.imul(h,rt)|0)+Math.imul(d,nt)|0))<<13)|0;c=((a=a+Math.imul(d,rt)|0)+(i>>>13)|0)+(xt>>>26)|0,xt&=67108863,r=Math.imul(C,Y),i=(i=Math.imul(C,H))+Math.imul(E,Y)|0,a=Math.imul(E,H),r=r+Math.imul(S,U)|0,i=(i=i+Math.imul(S,W)|0)+Math.imul(A,U)|0,a=a+Math.imul(A,W)|0,r=r+Math.imul(k,G)|0,i=(i=i+Math.imul(k,X)|0)+Math.imul(M,G)|0,a=a+Math.imul(M,X)|0,r=r+Math.imul(b,J)|0,i=(i=i+Math.imul(b,K)|0)+Math.imul(x,J)|0,a=a+Math.imul(x,K)|0,r=r+Math.imul(y,Q)|0,i=(i=i+Math.imul(y,tt)|0)+Math.imul(v,Q)|0,a=a+Math.imul(v,tt)|0,r=r+Math.imul(p,nt)|0,i=(i=i+Math.imul(p,rt)|0)+Math.imul(m,nt)|0,a=a+Math.imul(m,rt)|0;var wt=(c+(r=r+Math.imul(h,at)|0)|0)+((8191&(i=(i=i+Math.imul(h,ot)|0)+Math.imul(d,at)|0))<<13)|0;c=((a=a+Math.imul(d,ot)|0)+(i>>>13)|0)+(wt>>>26)|0,wt&=67108863,r=Math.imul(D,Y),i=(i=Math.imul(D,H))+Math.imul(I,Y)|0,a=Math.imul(I,H),r=r+Math.imul(C,U)|0,i=(i=i+Math.imul(C,W)|0)+Math.imul(E,U)|0,a=a+Math.imul(E,W)|0,r=r+Math.imul(S,G)|0,i=(i=i+Math.imul(S,X)|0)+Math.imul(A,G)|0,a=a+Math.imul(A,X)|0,r=r+Math.imul(k,J)|0,i=(i=i+Math.imul(k,K)|0)+Math.imul(M,J)|0,a=a+Math.imul(M,K)|0,r=r+Math.imul(b,Q)|0,i=(i=i+Math.imul(b,tt)|0)+Math.imul(x,Q)|0,a=a+Math.imul(x,tt)|0,r=r+Math.imul(y,nt)|0,i=(i=i+Math.imul(y,rt)|0)+Math.imul(v,nt)|0,a=a+Math.imul(v,rt)|0,r=r+Math.imul(p,at)|0,i=(i=i+Math.imul(p,ot)|0)+Math.imul(m,at)|0,a=a+Math.imul(m,ot)|0;var kt=(c+(r=r+Math.imul(h,lt)|0)|0)+((8191&(i=(i=i+Math.imul(h,ct)|0)+Math.imul(d,lt)|0))<<13)|0;c=((a=a+Math.imul(d,ct)|0)+(i>>>13)|0)+(kt>>>26)|0,kt&=67108863,r=Math.imul(R,Y),i=(i=Math.imul(R,H))+Math.imul(z,Y)|0,a=Math.imul(z,H),r=r+Math.imul(D,U)|0,i=(i=i+Math.imul(D,W)|0)+Math.imul(I,U)|0,a=a+Math.imul(I,W)|0,r=r+Math.imul(C,G)|0,i=(i=i+Math.imul(C,X)|0)+Math.imul(E,G)|0,a=a+Math.imul(E,X)|0,r=r+Math.imul(S,J)|0,i=(i=i+Math.imul(S,K)|0)+Math.imul(A,J)|0,a=a+Math.imul(A,K)|0,r=r+Math.imul(k,Q)|0,i=(i=i+Math.imul(k,tt)|0)+Math.imul(M,Q)|0,a=a+Math.imul(M,tt)|0,r=r+Math.imul(b,nt)|0,i=(i=i+Math.imul(b,rt)|0)+Math.imul(x,nt)|0,a=a+Math.imul(x,rt)|0,r=r+Math.imul(y,at)|0,i=(i=i+Math.imul(y,ot)|0)+Math.imul(v,at)|0,a=a+Math.imul(v,ot)|0,r=r+Math.imul(p,lt)|0,i=(i=i+Math.imul(p,ct)|0)+Math.imul(m,lt)|0,a=a+Math.imul(m,ct)|0;var Mt=(c+(r=r+Math.imul(h,ht)|0)|0)+((8191&(i=(i=i+Math.imul(h,dt)|0)+Math.imul(d,ht)|0))<<13)|0;c=((a=a+Math.imul(d,dt)|0)+(i>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,r=Math.imul(F,Y),i=(i=Math.imul(F,H))+Math.imul(N,Y)|0,a=Math.imul(N,H),r=r+Math.imul(R,U)|0,i=(i=i+Math.imul(R,W)|0)+Math.imul(z,U)|0,a=a+Math.imul(z,W)|0,r=r+Math.imul(D,G)|0,i=(i=i+Math.imul(D,X)|0)+Math.imul(I,G)|0,a=a+Math.imul(I,X)|0,r=r+Math.imul(C,J)|0,i=(i=i+Math.imul(C,K)|0)+Math.imul(E,J)|0,a=a+Math.imul(E,K)|0,r=r+Math.imul(S,Q)|0,i=(i=i+Math.imul(S,tt)|0)+Math.imul(A,Q)|0,a=a+Math.imul(A,tt)|0,r=r+Math.imul(k,nt)|0,i=(i=i+Math.imul(k,rt)|0)+Math.imul(M,nt)|0,a=a+Math.imul(M,rt)|0,r=r+Math.imul(b,at)|0,i=(i=i+Math.imul(b,ot)|0)+Math.imul(x,at)|0,a=a+Math.imul(x,ot)|0,r=r+Math.imul(y,lt)|0,i=(i=i+Math.imul(y,ct)|0)+Math.imul(v,lt)|0,a=a+Math.imul(v,ct)|0,r=r+Math.imul(p,ht)|0,i=(i=i+Math.imul(p,dt)|0)+Math.imul(m,ht)|0,a=a+Math.imul(m,dt)|0;var Tt=(c+(r=r+Math.imul(h,pt)|0)|0)+((8191&(i=(i=i+Math.imul(h,mt)|0)+Math.imul(d,pt)|0))<<13)|0;c=((a=a+Math.imul(d,mt)|0)+(i>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,r=Math.imul(F,U),i=(i=Math.imul(F,W))+Math.imul(N,U)|0,a=Math.imul(N,W),r=r+Math.imul(R,G)|0,i=(i=i+Math.imul(R,X)|0)+Math.imul(z,G)|0,a=a+Math.imul(z,X)|0,r=r+Math.imul(D,J)|0,i=(i=i+Math.imul(D,K)|0)+Math.imul(I,J)|0,a=a+Math.imul(I,K)|0,r=r+Math.imul(C,Q)|0,i=(i=i+Math.imul(C,tt)|0)+Math.imul(E,Q)|0,a=a+Math.imul(E,tt)|0,r=r+Math.imul(S,nt)|0,i=(i=i+Math.imul(S,rt)|0)+Math.imul(A,nt)|0,a=a+Math.imul(A,rt)|0,r=r+Math.imul(k,at)|0,i=(i=i+Math.imul(k,ot)|0)+Math.imul(M,at)|0,a=a+Math.imul(M,ot)|0,r=r+Math.imul(b,lt)|0,i=(i=i+Math.imul(b,ct)|0)+Math.imul(x,lt)|0,a=a+Math.imul(x,ct)|0,r=r+Math.imul(y,ht)|0,i=(i=i+Math.imul(y,dt)|0)+Math.imul(v,ht)|0,a=a+Math.imul(v,dt)|0;var St=(c+(r=r+Math.imul(p,pt)|0)|0)+((8191&(i=(i=i+Math.imul(p,mt)|0)+Math.imul(m,pt)|0))<<13)|0;c=((a=a+Math.imul(m,mt)|0)+(i>>>13)|0)+(St>>>26)|0,St&=67108863,r=Math.imul(F,G),i=(i=Math.imul(F,X))+Math.imul(N,G)|0,a=Math.imul(N,X),r=r+Math.imul(R,J)|0,i=(i=i+Math.imul(R,K)|0)+Math.imul(z,J)|0,a=a+Math.imul(z,K)|0,r=r+Math.imul(D,Q)|0,i=(i=i+Math.imul(D,tt)|0)+Math.imul(I,Q)|0,a=a+Math.imul(I,tt)|0,r=r+Math.imul(C,nt)|0,i=(i=i+Math.imul(C,rt)|0)+Math.imul(E,nt)|0,a=a+Math.imul(E,rt)|0,r=r+Math.imul(S,at)|0,i=(i=i+Math.imul(S,ot)|0)+Math.imul(A,at)|0,a=a+Math.imul(A,ot)|0,r=r+Math.imul(k,lt)|0,i=(i=i+Math.imul(k,ct)|0)+Math.imul(M,lt)|0,a=a+Math.imul(M,ct)|0,r=r+Math.imul(b,ht)|0,i=(i=i+Math.imul(b,dt)|0)+Math.imul(x,ht)|0,a=a+Math.imul(x,dt)|0;var At=(c+(r=r+Math.imul(y,pt)|0)|0)+((8191&(i=(i=i+Math.imul(y,mt)|0)+Math.imul(v,pt)|0))<<13)|0;c=((a=a+Math.imul(v,mt)|0)+(i>>>13)|0)+(At>>>26)|0,At&=67108863,r=Math.imul(F,J),i=(i=Math.imul(F,K))+Math.imul(N,J)|0,a=Math.imul(N,K),r=r+Math.imul(R,Q)|0,i=(i=i+Math.imul(R,tt)|0)+Math.imul(z,Q)|0,a=a+Math.imul(z,tt)|0,r=r+Math.imul(D,nt)|0,i=(i=i+Math.imul(D,rt)|0)+Math.imul(I,nt)|0,a=a+Math.imul(I,rt)|0,r=r+Math.imul(C,at)|0,i=(i=i+Math.imul(C,ot)|0)+Math.imul(E,at)|0,a=a+Math.imul(E,ot)|0,r=r+Math.imul(S,lt)|0,i=(i=i+Math.imul(S,ct)|0)+Math.imul(A,lt)|0,a=a+Math.imul(A,ct)|0,r=r+Math.imul(k,ht)|0,i=(i=i+Math.imul(k,dt)|0)+Math.imul(M,ht)|0,a=a+Math.imul(M,dt)|0;var Lt=(c+(r=r+Math.imul(b,pt)|0)|0)+((8191&(i=(i=i+Math.imul(b,mt)|0)+Math.imul(x,pt)|0))<<13)|0;c=((a=a+Math.imul(x,mt)|0)+(i>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,r=Math.imul(F,Q),i=(i=Math.imul(F,tt))+Math.imul(N,Q)|0,a=Math.imul(N,tt),r=r+Math.imul(R,nt)|0,i=(i=i+Math.imul(R,rt)|0)+Math.imul(z,nt)|0,a=a+Math.imul(z,rt)|0,r=r+Math.imul(D,at)|0,i=(i=i+Math.imul(D,ot)|0)+Math.imul(I,at)|0,a=a+Math.imul(I,ot)|0,r=r+Math.imul(C,lt)|0,i=(i=i+Math.imul(C,ct)|0)+Math.imul(E,lt)|0,a=a+Math.imul(E,ct)|0,r=r+Math.imul(S,ht)|0,i=(i=i+Math.imul(S,dt)|0)+Math.imul(A,ht)|0,a=a+Math.imul(A,dt)|0;var Ct=(c+(r=r+Math.imul(k,pt)|0)|0)+((8191&(i=(i=i+Math.imul(k,mt)|0)+Math.imul(M,pt)|0))<<13)|0;c=((a=a+Math.imul(M,mt)|0)+(i>>>13)|0)+(Ct>>>26)|0,Ct&=67108863,r=Math.imul(F,nt),i=(i=Math.imul(F,rt))+Math.imul(N,nt)|0,a=Math.imul(N,rt),r=r+Math.imul(R,at)|0,i=(i=i+Math.imul(R,ot)|0)+Math.imul(z,at)|0,a=a+Math.imul(z,ot)|0,r=r+Math.imul(D,lt)|0,i=(i=i+Math.imul(D,ct)|0)+Math.imul(I,lt)|0,a=a+Math.imul(I,ct)|0,r=r+Math.imul(C,ht)|0,i=(i=i+Math.imul(C,dt)|0)+Math.imul(E,ht)|0,a=a+Math.imul(E,dt)|0;var Et=(c+(r=r+Math.imul(S,pt)|0)|0)+((8191&(i=(i=i+Math.imul(S,mt)|0)+Math.imul(A,pt)|0))<<13)|0;c=((a=a+Math.imul(A,mt)|0)+(i>>>13)|0)+(Et>>>26)|0,Et&=67108863,r=Math.imul(F,at),i=(i=Math.imul(F,ot))+Math.imul(N,at)|0,a=Math.imul(N,ot),r=r+Math.imul(R,lt)|0,i=(i=i+Math.imul(R,ct)|0)+Math.imul(z,lt)|0,a=a+Math.imul(z,ct)|0,r=r+Math.imul(D,ht)|0,i=(i=i+Math.imul(D,dt)|0)+Math.imul(I,ht)|0,a=a+Math.imul(I,dt)|0;var Ot=(c+(r=r+Math.imul(C,pt)|0)|0)+((8191&(i=(i=i+Math.imul(C,mt)|0)+Math.imul(E,pt)|0))<<13)|0;c=((a=a+Math.imul(E,mt)|0)+(i>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,r=Math.imul(F,lt),i=(i=Math.imul(F,ct))+Math.imul(N,lt)|0,a=Math.imul(N,ct),r=r+Math.imul(R,ht)|0,i=(i=i+Math.imul(R,dt)|0)+Math.imul(z,ht)|0,a=a+Math.imul(z,dt)|0;var Dt=(c+(r=r+Math.imul(D,pt)|0)|0)+((8191&(i=(i=i+Math.imul(D,mt)|0)+Math.imul(I,pt)|0))<<13)|0;c=((a=a+Math.imul(I,mt)|0)+(i>>>13)|0)+(Dt>>>26)|0,Dt&=67108863,r=Math.imul(F,ht),i=(i=Math.imul(F,dt))+Math.imul(N,ht)|0,a=Math.imul(N,dt);var It=(c+(r=r+Math.imul(R,pt)|0)|0)+((8191&(i=(i=i+Math.imul(R,mt)|0)+Math.imul(z,pt)|0))<<13)|0;c=((a=a+Math.imul(z,mt)|0)+(i>>>13)|0)+(It>>>26)|0,It&=67108863;var Pt=(c+(r=Math.imul(F,pt))|0)+((8191&(i=(i=Math.imul(F,mt))+Math.imul(N,pt)|0))<<13)|0;return c=((a=Math.imul(N,mt))+(i>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,l[0]=gt,l[1]=yt,l[2]=vt,l[3]=_t,l[4]=bt,l[5]=xt,l[6]=wt,l[7]=kt,l[8]=Mt,l[9]=Tt,l[10]=St,l[11]=At,l[12]=Lt,l[13]=Ct,l[14]=Et,l[15]=Ot,l[16]=Dt,l[17]=It,l[18]=Pt,0!==c&&(l[19]=c,n.length++),n};function p(t,e,n){return(new m).mulp(t,e,n)}function m(t,e){this.x=t,this.y=e}Math.imul||(f=d),a.prototype.mulTo=function(t,e){var n=this.length+t.length;return 10===this.length&&10===t.length?f(this,t,e):n<63?d(this,t,e):n<1024?function(t,e,n){n.negative=e.negative^t.negative,n.length=t.length+e.length;for(var r=0,i=0,a=0;a<n.length-1;a++){var o=i;i=0;for(var s=67108863&r,l=Math.min(a,e.length-1),c=Math.max(0,a-t.length+1);c<=l;c++){var u=(0|t.words[a-c])*(0|e.words[c]),h=67108863&u;s=67108863&(h=h+s|0),i+=(o=(o=o+(u/67108864|0)|0)+(h>>>26)|0)>>>26,o&=67108863}n.words[a]=s,r=o,o=i}return 0!==r?n.words[a]=r:n.length--,n.strip()}(this,t,e):p(this,t,e)},m.prototype.makeRBT=function(t){for(var e=new Array(t),n=a.prototype._countBits(t)-1,r=0;r<t;r++)e[r]=this.revBin(r,n,t);return e},m.prototype.revBin=function(t,e,n){if(0===t||t===n-1)return t;for(var r=0,i=0;i<e;i++)r|=(1&t)<<e-i-1,t>>=1;return r},m.prototype.permute=function(t,e,n,r,i,a){for(var o=0;o<a;o++)r[o]=e[t[o]],i[o]=n[t[o]]},m.prototype.transform=function(t,e,n,r,i,a){this.permute(a,t,e,n,r,i);for(var o=1;o<i;o<<=1)for(var s=o<<1,l=Math.cos(2*Math.PI/s),c=Math.sin(2*Math.PI/s),u=0;u<i;u+=s)for(var h=l,d=c,f=0;f<o;f++){var p=n[u+f],m=r[u+f],g=n[u+f+o],y=r[u+f+o],v=h*g-d*y;y=h*y+d*g,n[u+f]=p+(g=v),r[u+f]=m+y,n[u+f+o]=p-g,r[u+f+o]=m-y,f!==s&&(v=l*h-c*d,d=l*d+c*h,h=v)}},m.prototype.guessLen13b=function(t,e){var n=1|Math.max(e,t),r=1&n,i=0;for(n=n/2|0;n;n>>>=1)i++;return 1<<i+1+r},m.prototype.conjugate=function(t,e,n){if(!(n<=1))for(var r=0;r<n/2;r++){var i=t[r];t[r]=t[n-r-1],t[n-r-1]=i,i=e[r],e[r]=-e[n-r-1],e[n-r-1]=-i}},m.prototype.normalize13b=function(t,e){for(var n=0,r=0;r<e/2;r++){var i=8192*Math.round(t[2*r+1]/e)+Math.round(t[2*r]/e)+n;t[r]=67108863&i,n=i<67108864?0:i/67108864|0}return t},m.prototype.convert13b=function(t,e,n,i){for(var a=0,o=0;o<e;o++)n[2*o]=8191&(a+=0|t[o]),n[2*o+1]=8191&(a>>>=13),a>>>=13;for(o=2*e;o<i;++o)n[o]=0;r(0===a),r(0==(-8192&a))},m.prototype.stub=function(t){for(var e=new Array(t),n=0;n<t;n++)e[n]=0;return e},m.prototype.mulp=function(t,e,n){var r=2*this.guessLen13b(t.length,e.length),i=this.makeRBT(r),a=this.stub(r),o=new Array(r),s=new Array(r),l=new Array(r),c=new Array(r),u=new Array(r),h=new Array(r),d=n.words;d.length=r,this.convert13b(t.words,t.length,o,r),this.convert13b(e.words,e.length,c,r),this.transform(o,a,s,l,r,i),this.transform(c,a,u,h,r,i);for(var f=0;f<r;f++){var p=s[f]*u[f]-l[f]*h[f];l[f]=s[f]*h[f]+l[f]*u[f],s[f]=p}return this.conjugate(s,l,r),this.transform(s,l,d,a,r,i),this.conjugate(d,a,r),this.normalize13b(d,r),n.negative=t.negative^e.negative,n.length=t.length+e.length,n.strip()},a.prototype.mul=function(t){var e=new a(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},a.prototype.mulf=function(t){var e=new a(null);return e.words=new Array(this.length+t.length),p(this,t,e)},a.prototype.imul=function(t){return this.clone().mulTo(t,this)},a.prototype.imuln=function(t){r(\"number\"==typeof t),r(t<67108864);for(var e=0,n=0;n<this.length;n++){var i=(0|this.words[n])*t,a=(67108863&i)+(67108863&e);e>>=26,e+=i/67108864|0,e+=a>>>26,this.words[n]=67108863&a}return 0!==e&&(this.words[n]=e,this.length++),this},a.prototype.muln=function(t){return this.clone().imuln(t)},a.prototype.sqr=function(){return this.mul(this)},a.prototype.isqr=function(){return this.imul(this.clone())},a.prototype.pow=function(t){var e=function(t){for(var e=new Array(t.bitLength()),n=0;n<e.length;n++){var r=n%26;e[n]=(t.words[n/26|0]&1<<r)>>>r}return e}(t);if(0===e.length)return new a(1);for(var n=this,r=0;r<e.length&&0===e[r];r++,n=n.sqr());if(++r<e.length)for(var i=n.sqr();r<e.length;r++,i=i.sqr())0!==e[r]&&(n=n.mul(i));return n},a.prototype.iushln=function(t){r(\"number\"==typeof t&&t>=0);var e,n=t%26,i=(t-n)/26,a=67108863>>>26-n<<26-n;if(0!==n){var o=0;for(e=0;e<this.length;e++){var s=this.words[e]&a;this.words[e]=(0|this.words[e])-s<<n|o,o=s>>>26-n}o&&(this.words[e]=o,this.length++)}if(0!==i){for(e=this.length-1;e>=0;e--)this.words[e+i]=this.words[e];for(e=0;e<i;e++)this.words[e]=0;this.length+=i}return this.strip()},a.prototype.ishln=function(t){return r(0===this.negative),this.iushln(t)},a.prototype.iushrn=function(t,e,n){var i;r(\"number\"==typeof t&&t>=0),i=e?(e-e%26)/26:0;var a=t%26,o=Math.min((t-a)/26,this.length),s=67108863^67108863>>>a<<a,l=n;if(i-=o,i=Math.max(0,i),l){for(var c=0;c<o;c++)l.words[c]=this.words[c];l.length=o}if(0===o);else if(this.length>o)for(this.length-=o,c=0;c<this.length;c++)this.words[c]=this.words[c+o];else this.words[0]=0,this.length=1;var u=0;for(c=this.length-1;c>=0&&(0!==u||c>=i);c--){var h=0|this.words[c];this.words[c]=u<<26-a|h>>>a,u=h&s}return l&&0!==u&&(l.words[l.length++]=u),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},a.prototype.ishrn=function(t,e,n){return r(0===this.negative),this.iushrn(t,e,n)},a.prototype.shln=function(t){return this.clone().ishln(t)},a.prototype.ushln=function(t){return this.clone().iushln(t)},a.prototype.shrn=function(t){return this.clone().ishrn(t)},a.prototype.ushrn=function(t){return this.clone().iushrn(t)},a.prototype.testn=function(t){r(\"number\"==typeof t&&t>=0);var e=t%26,n=(t-e)/26;return!(this.length<=n||!(this.words[n]&1<<e))},a.prototype.imaskn=function(t){r(\"number\"==typeof t&&t>=0);var e=t%26,n=(t-e)/26;return r(0===this.negative,\"imaskn works only with positive numbers\"),this.length<=n?this:(0!==e&&n++,this.length=Math.min(n,this.length),0!==e&&(this.words[this.length-1]&=67108863^67108863>>>e<<e),this.strip())},a.prototype.maskn=function(t){return this.clone().imaskn(t)},a.prototype.iaddn=function(t){return r(\"number\"==typeof t),r(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},a.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},a.prototype.isubn=function(t){if(r(\"number\"==typeof t),r(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this.strip()},a.prototype.addn=function(t){return this.clone().iaddn(t)},a.prototype.subn=function(t){return this.clone().isubn(t)},a.prototype.iabs=function(){return this.negative=0,this},a.prototype.abs=function(){return this.clone().iabs()},a.prototype._ishlnsubmul=function(t,e,n){var i,a;this._expand(t.length+n);var o=0;for(i=0;i<t.length;i++){a=(0|this.words[i+n])+o;var s=(0|t.words[i])*e;o=((a-=67108863&s)>>26)-(s/67108864|0),this.words[i+n]=67108863&a}for(;i<this.length-n;i++)o=(a=(0|this.words[i+n])+o)>>26,this.words[i+n]=67108863&a;if(0===o)return this.strip();for(r(-1===o),o=0,i=0;i<this.length;i++)o=(a=-(0|this.words[i])+o)>>26,this.words[i]=67108863&a;return this.negative=1,this.strip()},a.prototype._wordDiv=function(t,e){var n,r=this.clone(),i=t,o=0|i.words[i.length-1];0!=(n=26-this._countBits(o))&&(i=i.ushln(n),r.iushln(n),o=0|i.words[i.length-1]);var s,l=r.length-i.length;if(\"mod\"!==e){(s=new a(null)).length=l+1,s.words=new Array(s.length);for(var c=0;c<s.length;c++)s.words[c]=0}var u=r.clone()._ishlnsubmul(i,1,l);0===u.negative&&(r=u,s&&(s.words[l]=1));for(var h=l-1;h>=0;h--){var d=67108864*(0|r.words[i.length+h])+(0|r.words[i.length+h-1]);for(d=Math.min(d/o|0,67108863),r._ishlnsubmul(i,d,h);0!==r.negative;)d--,r.negative=0,r._ishlnsubmul(i,1,h),r.isZero()||(r.negative^=1);s&&(s.words[h]=d)}return s&&s.strip(),r.strip(),\"div\"!==e&&0!==n&&r.iushrn(n),{div:s||null,mod:r}},a.prototype.divmod=function(t,e,n){return r(!t.isZero()),this.isZero()?{div:new a(0),mod:new a(0)}:0!==this.negative&&0===t.negative?(s=this.neg().divmod(t,e),\"mod\"!==e&&(i=s.div.neg()),\"div\"!==e&&(o=s.mod.neg(),n&&0!==o.negative&&o.iadd(t)),{div:i,mod:o}):0===this.negative&&0!==t.negative?(s=this.divmod(t.neg(),e),\"mod\"!==e&&(i=s.div.neg()),{div:i,mod:s.mod}):0!=(this.negative&t.negative)?(s=this.neg().divmod(t.neg(),e),\"div\"!==e&&(o=s.mod.neg(),n&&0!==o.negative&&o.isub(t)),{div:s.div,mod:o}):t.length>this.length||this.cmp(t)<0?{div:new a(0),mod:this}:1===t.length?\"div\"===e?{div:this.divn(t.words[0]),mod:null}:\"mod\"===e?{div:null,mod:new a(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new a(this.modn(t.words[0]))}:this._wordDiv(t,e);var i,o,s},a.prototype.div=function(t){return this.divmod(t,\"div\",!1).div},a.prototype.mod=function(t){return this.divmod(t,\"mod\",!1).mod},a.prototype.umod=function(t){return this.divmod(t,\"mod\",!0).mod},a.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var n=0!==e.div.negative?e.mod.isub(t):e.mod,r=t.ushrn(1),i=t.andln(1),a=n.cmp(r);return a<0||1===i&&0===a?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},a.prototype.modn=function(t){r(t<=67108863);for(var e=(1<<26)%t,n=0,i=this.length-1;i>=0;i--)n=(e*n+(0|this.words[i]))%t;return n},a.prototype.idivn=function(t){r(t<=67108863);for(var e=0,n=this.length-1;n>=0;n--){var i=(0|this.words[n])+67108864*e;this.words[n]=i/t|0,e=i%t}return this.strip()},a.prototype.divn=function(t){return this.clone().idivn(t)},a.prototype.egcd=function(t){r(0===t.negative),r(!t.isZero());var e=this,n=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new a(1),o=new a(0),s=new a(0),l=new a(1),c=0;e.isEven()&&n.isEven();)e.iushrn(1),n.iushrn(1),++c;for(var u=n.clone(),h=e.clone();!e.isZero();){for(var d=0,f=1;0==(e.words[0]&f)&&d<26;++d,f<<=1);if(d>0)for(e.iushrn(d);d-- >0;)(i.isOdd()||o.isOdd())&&(i.iadd(u),o.isub(h)),i.iushrn(1),o.iushrn(1);for(var p=0,m=1;0==(n.words[0]&m)&&p<26;++p,m<<=1);if(p>0)for(n.iushrn(p);p-- >0;)(s.isOdd()||l.isOdd())&&(s.iadd(u),l.isub(h)),s.iushrn(1),l.iushrn(1);e.cmp(n)>=0?(e.isub(n),i.isub(s),o.isub(l)):(n.isub(e),s.isub(i),l.isub(o))}return{a:s,b:l,gcd:n.iushln(c)}},a.prototype._invmp=function(t){r(0===t.negative),r(!t.isZero());var e=this,n=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i,o=new a(1),s=new a(0),l=n.clone();e.cmpn(1)>0&&n.cmpn(1)>0;){for(var c=0,u=1;0==(e.words[0]&u)&&c<26;++c,u<<=1);if(c>0)for(e.iushrn(c);c-- >0;)o.isOdd()&&o.iadd(l),o.iushrn(1);for(var h=0,d=1;0==(n.words[0]&d)&&h<26;++h,d<<=1);if(h>0)for(n.iushrn(h);h-- >0;)s.isOdd()&&s.iadd(l),s.iushrn(1);e.cmp(n)>=0?(e.isub(n),o.isub(s)):(n.isub(e),s.isub(o))}return(i=0===e.cmpn(1)?o:s).cmpn(0)<0&&i.iadd(t),i},a.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),n=t.clone();e.negative=0,n.negative=0;for(var r=0;e.isEven()&&n.isEven();r++)e.iushrn(1),n.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;n.isEven();)n.iushrn(1);var i=e.cmp(n);if(i<0){var a=e;e=n,n=a}else if(0===i||0===n.cmpn(1))break;e.isub(n)}return n.iushln(r)},a.prototype.invm=function(t){return this.egcd(t).a.umod(t)},a.prototype.isEven=function(){return 0==(1&this.words[0])},a.prototype.isOdd=function(){return 1==(1&this.words[0])},a.prototype.andln=function(t){return this.words[0]&t},a.prototype.bincn=function(t){r(\"number\"==typeof t);var e=t%26,n=(t-e)/26,i=1<<e;if(this.length<=n)return this._expand(n+1),this.words[n]|=i,this;for(var a=i,o=n;0!==a&&o<this.length;o++){var s=0|this.words[o];a=(s+=a)>>>26,this.words[o]=s&=67108863}return 0!==a&&(this.words[o]=a,this.length++),this},a.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},a.prototype.cmpn=function(t){var e,n=t<0;if(0!==this.negative&&!n)return-1;if(0===this.negative&&n)return 1;if(this.strip(),this.length>1)e=1;else{n&&(t=-t),r(t<=67108863,\"Number is too big\");var i=0|this.words[0];e=i===t?0:i<t?-1:1}return 0!==this.negative?0|-e:e},a.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},a.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,n=this.length-1;n>=0;n--){var r=0|this.words[n],i=0|t.words[n];if(r!==i){r<i?e=-1:r>i&&(e=1);break}}return e},a.prototype.gtn=function(t){return 1===this.cmpn(t)},a.prototype.gt=function(t){return 1===this.cmp(t)},a.prototype.gten=function(t){return this.cmpn(t)>=0},a.prototype.gte=function(t){return this.cmp(t)>=0},a.prototype.ltn=function(t){return-1===this.cmpn(t)},a.prototype.lt=function(t){return-1===this.cmp(t)},a.prototype.lten=function(t){return this.cmpn(t)<=0},a.prototype.lte=function(t){return this.cmp(t)<=0},a.prototype.eqn=function(t){return 0===this.cmpn(t)},a.prototype.eq=function(t){return 0===this.cmp(t)},a.red=function(t){return new w(t)},a.prototype.toRed=function(t){return r(!this.red,\"Already a number in reduction context\"),r(0===this.negative,\"red works only with positives\"),t.convertTo(this)._forceRed(t)},a.prototype.fromRed=function(){return r(this.red,\"fromRed works only with numbers in reduction context\"),this.red.convertFrom(this)},a.prototype._forceRed=function(t){return this.red=t,this},a.prototype.forceRed=function(t){return r(!this.red,\"Already a number in reduction context\"),this._forceRed(t)},a.prototype.redAdd=function(t){return r(this.red,\"redAdd works only with red numbers\"),this.red.add(this,t)},a.prototype.redIAdd=function(t){return r(this.red,\"redIAdd works only with red numbers\"),this.red.iadd(this,t)},a.prototype.redSub=function(t){return r(this.red,\"redSub works only with red numbers\"),this.red.sub(this,t)},a.prototype.redISub=function(t){return r(this.red,\"redISub works only with red numbers\"),this.red.isub(this,t)},a.prototype.redShl=function(t){return r(this.red,\"redShl works only with red numbers\"),this.red.shl(this,t)},a.prototype.redMul=function(t){return r(this.red,\"redMul works only with red numbers\"),this.red._verify2(this,t),this.red.mul(this,t)},a.prototype.redIMul=function(t){return r(this.red,\"redMul works only with red numbers\"),this.red._verify2(this,t),this.red.imul(this,t)},a.prototype.redSqr=function(){return r(this.red,\"redSqr works only with red numbers\"),this.red._verify1(this),this.red.sqr(this)},a.prototype.redISqr=function(){return r(this.red,\"redISqr works only with red numbers\"),this.red._verify1(this),this.red.isqr(this)},a.prototype.redSqrt=function(){return r(this.red,\"redSqrt works only with red numbers\"),this.red._verify1(this),this.red.sqrt(this)},a.prototype.redInvm=function(){return r(this.red,\"redInvm works only with red numbers\"),this.red._verify1(this),this.red.invm(this)},a.prototype.redNeg=function(){return r(this.red,\"redNeg works only with red numbers\"),this.red._verify1(this),this.red.neg(this)},a.prototype.redPow=function(t){return r(this.red&&!t.red,\"redPow(normalNum)\"),this.red._verify1(this),this.red.pow(this,t)};var g={k256:null,p224:null,p192:null,p25519:null};function y(t,e){this.name=t,this.p=new a(e,16),this.n=this.p.bitLength(),this.k=new a(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function v(){y.call(this,\"k256\",\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f\")}function _(){y.call(this,\"p224\",\"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001\")}function b(){y.call(this,\"p192\",\"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff\")}function x(){y.call(this,\"25519\",\"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed\")}function w(t){if(\"string\"==typeof t){var e=a._prime(t);this.m=e.p,this.prime=e}else r(t.gtn(1),\"modulus must be greater than 1\"),this.m=t,this.prime=null}function k(t){w.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new a(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}y.prototype._tmp=function(){var t=new a(null);return t.words=new Array(Math.ceil(this.n/13)),t},y.prototype.ireduce=function(t){var e,n=t;do{this.split(n,this.tmp),e=(n=(n=this.imulK(n)).iadd(this.tmp)).bitLength()}while(e>this.n);var r=e<this.n?-1:n.ucmp(this.p);return 0===r?(n.words[0]=0,n.length=1):r>0?n.isub(this.p):n.strip(),n},y.prototype.split=function(t,e){t.iushrn(this.n,0,e)},y.prototype.imulK=function(t){return t.imul(this.k)},i(v,y),v.prototype.split=function(t,e){for(var n=4194303,r=Math.min(t.length,9),i=0;i<r;i++)e.words[i]=t.words[i];if(e.length=r,t.length<=9)return t.words[0]=0,void(t.length=1);var a=t.words[9];for(e.words[e.length++]=a&n,i=10;i<t.length;i++){var o=0|t.words[i];t.words[i-10]=(o&n)<<4|a>>>22,a=o}t.words[i-10]=a>>>=22,t.length-=0===a&&t.length>10?10:9},v.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,n=0;n<t.length;n++){var r=0|t.words[n];t.words[n]=67108863&(e+=977*r),e=64*r+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},i(_,y),i(b,y),i(x,y),x.prototype.imulK=function(t){for(var e=0,n=0;n<t.length;n++){var r=19*(0|t.words[n])+e,i=67108863&r;r>>>=26,t.words[n]=i,e=r}return 0!==e&&(t.words[t.length++]=e),t},a._prime=function(t){if(g[t])return g[t];var e;if(\"k256\"===t)e=new v;else if(\"p224\"===t)e=new _;else if(\"p192\"===t)e=new b;else{if(\"p25519\"!==t)throw new Error(\"Unknown prime \"+t);e=new x}return g[t]=e,e},w.prototype._verify1=function(t){r(0===t.negative,\"red works only with positives\"),r(t.red,\"red works only with red numbers\")},w.prototype._verify2=function(t,e){r(0==(t.negative|e.negative),\"red works only with positives\"),r(t.red&&t.red===e.red,\"red works only with red numbers\")},w.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},w.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},w.prototype.add=function(t,e){this._verify2(t,e);var n=t.add(e);return n.cmp(this.m)>=0&&n.isub(this.m),n._forceRed(this)},w.prototype.iadd=function(t,e){this._verify2(t,e);var n=t.iadd(e);return n.cmp(this.m)>=0&&n.isub(this.m),n},w.prototype.sub=function(t,e){this._verify2(t,e);var n=t.sub(e);return n.cmpn(0)<0&&n.iadd(this.m),n._forceRed(this)},w.prototype.isub=function(t,e){this._verify2(t,e);var n=t.isub(e);return n.cmpn(0)<0&&n.iadd(this.m),n},w.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},w.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},w.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},w.prototype.isqr=function(t){return this.imul(t,t.clone())},w.prototype.sqr=function(t){return this.mul(t,t)},w.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(r(e%2==1),3===e){var n=this.m.add(new a(1)).iushrn(2);return this.pow(t,n)}for(var i=this.m.subn(1),o=0;!i.isZero()&&0===i.andln(1);)o++,i.iushrn(1);r(!i.isZero());var s=new a(1).toRed(this),l=s.redNeg(),c=this.m.subn(1).iushrn(1),u=this.m.bitLength();for(u=new a(2*u*u).toRed(this);0!==this.pow(u,c).cmp(l);)u.redIAdd(l);for(var h=this.pow(u,i),d=this.pow(t,i.addn(1).iushrn(1)),f=this.pow(t,i),p=o;0!==f.cmp(s);){for(var m=f,g=0;0!==m.cmp(s);g++)m=m.redSqr();r(g<p);var y=this.pow(h,new a(1).iushln(p-g-1));d=d.redMul(y),h=y.redSqr(),f=f.redMul(h),p=g}return d},w.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},w.prototype.pow=function(t,e){if(e.isZero())return new a(1).toRed(this);if(0===e.cmpn(1))return t.clone();var n=new Array(16);n[0]=new a(1).toRed(this),n[1]=t;for(var r=2;r<n.length;r++)n[r]=this.mul(n[r-1],t);var i=n[0],o=0,s=0,l=e.bitLength()%26;for(0===l&&(l=26),r=e.length-1;r>=0;r--){for(var c=e.words[r],u=l-1;u>=0;u--){var h=c>>u&1;i!==n[0]&&(i=this.sqr(i)),0!==h||0!==o?(o<<=1,o|=h,(4==++s||0===r&&0===u)&&(i=this.mul(i,n[o]),s=0,o=0)):s=0}l=26}return i},w.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},w.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},a.mont=function(t){return new k(t)},i(k,w),k.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},k.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},k.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var n=t.imul(e),r=n.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=n.isub(r).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},k.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new a(0)._forceRed(this);var n=t.mul(e),r=n.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=n.isub(r).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},k.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0===e||e,this)},{buffer:108}],100:[function(t,e,n){\"use strict\";e.exports=function(t){var e,n,r,i=t.length,a=0;for(e=0;e<i;++e)a+=t[e].length;var o=new Array(a),s=0;for(e=0;e<i;++e){var l=t[e],c=l.length;for(n=0;n<c;++n){var u=o[s++]=new Array(c-1),h=0;for(r=0;r<c;++r)r!==n&&(u[h++]=l[r]);if(1&n){var d=u[1];u[1]=u[0],u[0]=d}}}return o}},{}],101:[function(t,e,n){\"use strict\";e.exports=function(t,e,n){switch(arguments.length){case 1:return h(t);case 2:return\"function\"==typeof e?c(t,t,e,!0):d(t,e);case 3:return c(t,e,n,!1);default:throw new Error(\"box-intersect: Invalid arguments\")}};var r,i=t(\"typedarray-pool\"),a=t(\"./lib/sweep\"),o=t(\"./lib/intersect\");function s(t,e){for(var n=0;n<t;++n)if(!(e[n]<=e[n+t]))return!0;return!1}function l(t,e,n,r){for(var i=0,a=0,o=0,l=t.length;o<l;++o){var c=t[o];if(!s(e,c)){for(var u=0;u<2*e;++u)n[i++]=c[u];r[a++]=o}}return a}function c(t,e,n,r){var s=t.length,c=e.length;if(!(s<=0||c<=0)){var u=t[0].length>>>1;if(!(u<=0)){var h,d=i.mallocDouble(2*u*s),f=i.mallocInt32(s);if((s=l(t,u,d,f))>0){if(1===u&&r)a.init(s),h=a.sweepComplete(u,n,0,s,d,f,0,s,d,f);else{var p=i.mallocDouble(2*u*c),m=i.mallocInt32(c);(c=l(e,u,p,m))>0&&(a.init(s+c),h=1===u?a.sweepBipartite(u,n,0,s,d,f,0,c,p,m):o(u,n,r,s,d,f,c,p,m),i.free(p),i.free(m))}i.free(d),i.free(f)}return h}}}function u(t,e){r.push([t,e])}function h(t){return r=[],c(t,t,u,!0),r}function d(t,e){return r=[],c(t,e,u,!1),r}},{\"./lib/intersect\":103,\"./lib/sweep\":107,\"typedarray-pool\":595}],102:[function(t,e,n){\"use strict\";var r=[\"d\",\"ax\",\"vv\",\"rs\",\"re\",\"rb\",\"ri\",\"bs\",\"be\",\"bb\",\"bi\"];function i(t){var e=\"bruteForce\"+(t?\"Full\":\"Partial\"),n=[],i=r.slice();t||i.splice(3,0,\"fp\");var a=[\"function \"+e+\"(\"+i.join()+\"){\"];function o(e,i){var o=function(t,e,n){var i=\"bruteForce\"+(t?\"Red\":\"Blue\")+(e?\"Flip\":\"\")+(n?\"Full\":\"\"),a=[\"function \",i,\"(\",r.join(),\"){\",\"var \",\"es\",\"=2*\",\"d\",\";\"],o=\"for(var i=rs,rp=es*rs;i<re;++i,rp+=es){var x0=rb[ax+rp],x1=rb[ax+rp+d],xi=ri[i];\",s=\"for(var j=bs,bp=es*bs;j<be;++j,bp+=es){var y0=bb[ax+bp],\"+(n?\"y1=bb[ax+bp+d],\":\"\")+\"yi=bi[j];\";return t?a.push(o,\"Q\",\":\",s):a.push(s,\"Q\",\":\",o),a.push(n?\"if(y1<x0||x1<y0)continue;\":e?\"if(y0<=x0||x1<y0)continue;\":\"if(y0<x0||x1<y0)continue;\"),a.push(\"for(var k=ax+1;k<d;++k){var r0=rb[k+rp],r1=rb[k+d+rp],b0=bb[k+bp],b1=bb[k+d+bp];if(r1<b0||b1<r0)continue Q;}var rv=vv(\"),a.push(e?\"yi,xi\":\"xi,yi\"),a.push(\");if(rv!==void 0)return rv;}}}\"),{name:i,code:a.join(\"\")}}(e,i,t);n.push(o.code),a.push(\"return \"+o.name+\"(\"+r.join()+\");\")}a.push(\"if(re-rs>be-bs){\"),t?(o(!0,!1),a.push(\"}else{\"),o(!1,!1)):(a.push(\"if(fp){\"),o(!0,!0),a.push(\"}else{\"),o(!0,!1),a.push(\"}}else{if(fp){\"),o(!1,!0),a.push(\"}else{\"),o(!1,!1),a.push(\"}\")),a.push(\"}}return \"+e);var s=n.join(\"\")+a.join(\"\");return new Function(s)()}n.partial=i(!1),n.full=i(!0)},{}],103:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,a,u,w,k,M,T){!function(t,e){var n=8*i.log2(e+1)*(t+1)|0,a=i.nextPow2(6*n);y.length<a&&(r.free(y),y=r.mallocInt32(a));var o=i.nextPow2(2*n);v.length<o&&(r.free(v),v=r.mallocDouble(o))}(t,a+k);var S,A=0,L=2*t;for(_(A++,0,0,a,0,k,n?16:0,-1/0,1/0),n||_(A++,0,0,k,0,a,1,-1/0,1/0);A>0;){var C=6*(A-=1),E=y[C],O=y[C+1],D=y[C+2],I=y[C+3],P=y[C+4],R=y[C+5],z=2*A,j=v[z],F=v[z+1],N=1&R,B=!!(16&R),Y=u,H=w,V=M,U=T;if(N&&(Y=M,H=T,V=u,U=w),!(2&R&&O>=(D=f(t,E,O,D,Y,H,F))||4&R&&(O=p(t,E,O,D,Y,H,j))>=D)){var W=D-O,q=P-I;if(B){if(t*W*(W+q)<4194304){if(void 0!==(S=l.scanComplete(t,E,e,O,D,Y,H,I,P,V,U)))return S;continue}}else{if(t*Math.min(W,q)<128){if(void 0!==(S=o(t,E,e,N,O,D,Y,H,I,P,V,U)))return S;continue}if(t*W*q<4194304){if(void 0!==(S=l.scanBipartite(t,E,e,N,O,D,Y,H,I,P,V,U)))return S;continue}}var G=h(t,E,O,D,Y,H,j,F);if(O<G)if(t*(G-O)<128){if(void 0!==(S=s(t,E+1,e,O,G,Y,H,I,P,V,U)))return S}else if(E===t-2){if(void 0!==(S=N?l.sweepBipartite(t,e,I,P,V,U,O,G,Y,H):l.sweepBipartite(t,e,O,G,Y,H,I,P,V,U)))return S}else _(A++,E+1,O,G,I,P,N,-1/0,1/0),_(A++,E+1,I,P,O,G,1^N,-1/0,1/0);if(G<D){var X=c(t,E,I,P,V,U),Z=V[L*X+E],J=d(t,E,X,P,V,U,Z);if(J<P&&_(A++,E,G,D,J,P,(4|N)+(B?16:0),Z,F),I<X&&_(A++,E,G,D,I,X,(2|N)+(B?16:0),j,Z),X+1===J){if(void 0!==(S=B?x(t,E,e,G,D,Y,H,X,V,U[X]):b(t,E,e,N,G,D,Y,H,X,V,U[X])))return S}else if(X<J){var K;if(B){if(G<(K=m(t,E,G,D,Y,H,Z))){var $=d(t,E,G,K,Y,H,Z);if(E===t-2){if(G<$&&void 0!==(S=l.sweepComplete(t,e,G,$,Y,H,X,J,V,U)))return S;if($<K&&void 0!==(S=l.sweepBipartite(t,e,$,K,Y,H,X,J,V,U)))return S}else G<$&&_(A++,E+1,G,$,X,J,16,-1/0,1/0),$<K&&(_(A++,E+1,$,K,X,J,0,-1/0,1/0),_(A++,E+1,X,J,$,K,1,-1/0,1/0))}}else G<(K=N?g(t,E,G,D,Y,H,Z):m(t,E,G,D,Y,H,Z))&&(E===t-2?S=N?l.sweepBipartite(t,e,X,J,V,U,G,K,Y,H):l.sweepBipartite(t,e,G,K,Y,H,X,J,V,U):(_(A++,E+1,G,K,X,J,N,-1/0,1/0),_(A++,E+1,X,J,G,K,1^N,-1/0,1/0)))}}}}};var r=t(\"typedarray-pool\"),i=t(\"bit-twiddle\"),a=t(\"./brute\"),o=a.partial,s=a.full,l=t(\"./sweep\"),c=t(\"./median\"),u=t(\"./partition\"),h=u(\"!(lo>=p0)&&!(p1>=hi)\",[\"p0\",\"p1\"]),d=u(\"lo===p0\",[\"p0\"]),f=u(\"lo<p0\",[\"p0\"]),p=u(\"hi<=p0\",[\"p0\"]),m=u(\"lo<=p0&&p0<=hi\",[\"p0\"]),g=u(\"lo<p0&&p0<=hi\",[\"p0\"]),y=r.mallocInt32(1024),v=r.mallocDouble(1024);function _(t,e,n,r,i,a,o,s,l){var c=6*t;y[c]=e,y[c+1]=n,y[c+2]=r,y[c+3]=i,y[c+4]=a,y[c+5]=o;var u=2*t;v[u]=s,v[u+1]=l}function b(t,e,n,r,i,a,o,s,l,c,u){var h=2*t,d=l*h,f=c[d+e];t:for(var p=i,m=i*h;p<a;++p,m+=h){var g=o[m+e+t];if(!(f<(b=o[m+e])||g<f||r&&f===b)){for(var y,v=s[p],_=e+1;_<t;++_){var b=o[m+_];if((g=o[m+_+t])<c[d+_]||c[d+_+t]<b)continue t}if(void 0!==(y=r?n(u,v):n(v,u)))return y}}}function x(t,e,n,r,i,a,o,s,l,c){var u=2*t,h=s*u,d=l[h+e];t:for(var f=r,p=r*u;f<i;++f,p+=u){var m=o[f];if(m!==c){var g=a[p+e+t];if(!(d<(v=a[p+e])||g<d)){for(var y=e+1;y<t;++y){var v=a[p+y];if((g=a[p+y+t])<l[h+y]||l[h+y+t]<v)continue t}var _=n(m,c);if(void 0!==_)return _}}}}},{\"./brute\":102,\"./median\":104,\"./partition\":105,\"./sweep\":107,\"bit-twiddle\":97,\"typedarray-pool\":595}],104:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,a,o,s){if(a<=n+1)return n;for(var l=n,c=a,u=a+n>>>1,h=2*t,d=u,f=o[h*u+e];l<c;){if(c-l<8){i(t,e,l,c,o,s),f=o[h*u+e];break}var p=c-l,m=Math.random()*p+l|0,g=o[h*m+e],y=Math.random()*p+l|0,v=o[h*y+e],_=Math.random()*p+l|0,b=o[h*_+e];g<=v?b>=v?(d=y,f=v):g>=b?(d=m,f=g):(d=_,f=b):v>=b?(d=y,f=v):b>=g?(d=m,f=g):(d=_,f=b);for(var x=h*(c-1),w=h*d,k=0;k<h;++k,++x,++w){var M=o[x];o[x]=o[w],o[w]=M}var T=s[c-1];for(s[c-1]=s[d],s[d]=T,x=h*(c-1),w=h*(d=r(t,e,l,c-1,o,s,f)),k=0;k<h;++k,++x,++w)M=o[x],o[x]=o[w],o[w]=M;if(T=s[c-1],s[c-1]=s[d],s[d]=T,u<d){for(c=d-1;l<c&&o[h*(c-1)+e]===f;)c-=1;c+=1}else{if(!(d<u))break;for(l=d+1;l<c&&o[h*l+e]===f;)l+=1}}return r(t,e,n,u,o,s,o[h*u+e])};var r=t(\"./partition\")(\"lo<p0\",[\"p0\"]);function i(t,e,n,r,i,a){for(var o=2*t,s=o*(n+1)+e,l=n+1;l<r;++l,s+=o)for(var c=i[s],u=l,h=o*(l-1);u>n&&i[h+e]>c;--u,h-=o){for(var d=h,f=h+o,p=0;p<o;++p,++d,++f){var m=i[d];i[d]=i[f],i[f]=m}var g=a[u];a[u]=a[u-1],a[u-1]=g}}},{\"./partition\":105}],105:[function(t,e,n){\"use strict\";e.exports=function(t,e){var n=\"abcdef\".split(\"\").concat(e),r=[];return t.indexOf(\"lo\")>=0&&r.push(\"lo=e[k+n]\"),t.indexOf(\"hi\")>=0&&r.push(\"hi=e[k+o]\"),n.push(\"for(var j=2*a,k=j*c,l=k,m=c,n=b,o=a+b,p=c;d>p;++p,k+=j){var _;if($)if(m===p)m+=1,l+=j;else{for(var s=0;j>s;++s){var t=e[k+s];e[k+s]=e[l],e[l++]=t}var u=f[p];f[p]=f[m],f[m++]=u}}return m\".replace(\"_\",r.join()).replace(\"$\",t)),Function.apply(void 0,n)}},{}],106:[function(t,e,n){\"use strict\";e.exports=function(t,e){e<=128?i(0,e-1,t):function t(e,n,h){var d=(n-e+1)/6|0,f=e+d,p=n-d,m=e+n>>1,g=m-d,y=m+d,v=f,_=g,b=m,x=y,w=p,k=e+1,M=n-1,T=0;c(v,_,h)&&(T=v,v=_,_=T),c(x,w,h)&&(T=x,x=w,w=T),c(v,b,h)&&(T=v,v=b,b=T),c(_,b,h)&&(T=_,_=b,b=T),c(v,x,h)&&(T=v,v=x,x=T),c(b,x,h)&&(T=b,b=x,x=T),c(_,w,h)&&(T=_,_=w,w=T),c(_,b,h)&&(T=_,_=b,b=T),c(x,w,h)&&(T=x,x=w,w=T);for(var S=h[2*_],A=h[2*_+1],L=h[2*x],C=h[2*x+1],E=2*v,O=2*b,D=2*w,I=2*f,P=2*m,R=2*p,z=0;z<2;++z){var j=h[O+z],F=h[D+z];h[I+z]=h[E+z],h[P+z]=j,h[R+z]=F}o(g,e,h),o(y,n,h);for(var N=k;N<=M;++N)if(u(N,S,A,h))N!==k&&a(N,k,h),++k;else if(!u(N,L,C,h))for(;;){if(u(M,L,C,h)){u(M,S,A,h)?(s(N,k,M,h),++k,--M):(a(N,M,h),--M);break}if(--M<N)break}l(e,k-1,S,A,h),l(n,M+1,L,C,h),k-2-e<=r?i(e,k-2,h):t(e,k-2,h),n-(M+2)<=r?i(M+2,n,h):t(M+2,n,h),M-k<=r?i(k,M,h):t(k,M,h)}(0,e-1,t)};var r=32;function i(t,e,n){for(var r=2*(t+1),i=t+1;i<=e;++i){for(var a=n[r++],o=n[r++],s=i,l=r-2;s-- >t;){var c=n[l-2],u=n[l-1];if(c<a)break;if(c===a&&u<o)break;n[l]=c,n[l+1]=u,l-=2}n[l]=a,n[l+1]=o}}function a(t,e,n){var r=n[t*=2],i=n[t+1];n[t]=n[e*=2],n[t+1]=n[e+1],n[e]=r,n[e+1]=i}function o(t,e,n){n[t*=2]=n[e*=2],n[t+1]=n[e+1]}function s(t,e,n,r){n*=2;var i=r[t*=2],a=r[t+1];r[t]=r[e*=2],r[t+1]=r[e+1],r[e]=r[n],r[e+1]=r[n+1],r[n]=i,r[n+1]=a}function l(t,e,n,r,i){i[t*=2]=i[e*=2],i[e]=n,i[t+1]=i[e+1],i[e+1]=r}function c(t,e,n){var r=n[t*=2],i=n[e*=2];return!(r<i)&&(r!==i||n[t+1]>n[e+1])}function u(t,e,n,r){var i=r[t*=2];return i<e||i===e&&r[t+1]<n}},{}],107:[function(t,e,n){\"use strict\";e.exports={init:function(t){var e=i.nextPow2(t);l.length<e&&(r.free(l),l=r.mallocInt32(e)),c.length<e&&(r.free(c),c=r.mallocInt32(e)),u.length<e&&(r.free(u),u=r.mallocInt32(e)),h.length<e&&(r.free(h),h=r.mallocInt32(e)),d.length<e&&(r.free(d),d=r.mallocInt32(e)),f.length<e&&(r.free(f),f=r.mallocInt32(e));var n=8*e;p.length<n&&(r.free(p),p=r.mallocDouble(n))},sweepBipartite:function(t,e,n,r,i,s,d,f,y,v){for(var _=0,b=2*t,x=t-1,w=b-1,k=n;k<r;++k){var M=s[k],T=b*k;p[_++]=i[T+x],p[_++]=-(M+1),p[_++]=i[T+w],p[_++]=M}for(k=d;k<f;++k){M=v[k]+o;var S=b*k;p[_++]=y[S+x],p[_++]=-M,p[_++]=y[S+w],p[_++]=M}var A=_>>>1;a(p,A);var L=0,C=0;for(k=0;k<A;++k){var E=0|p[2*k+1];if(E>=o)m(u,h,C--,E=E-o|0);else if(E>=0)m(l,c,L--,E);else if(E<=-268435456){E=-E-o|0;for(var O=0;O<L;++O)if(void 0!==(D=e(l[O],E)))return D;g(u,h,C++,E)}else{for(E=-E-1|0,O=0;O<C;++O){var D;if(void 0!==(D=e(E,u[O])))return D}g(l,c,L++,E)}}},sweepComplete:function(t,e,n,r,i,o,s,y,v,_){for(var b=0,x=2*t,w=t-1,k=x-1,M=n;M<r;++M){var T=o[M]+1<<1,S=x*M;p[b++]=i[S+w],p[b++]=-T,p[b++]=i[S+k],p[b++]=T}for(M=s;M<y;++M){T=_[M]+1<<1;var A=x*M;p[b++]=v[A+w],p[b++]=1|-T,p[b++]=v[A+k],p[b++]=1|T}var L=b>>>1;a(p,L);var C=0,E=0,O=0;for(M=0;M<L;++M){var D=0|p[2*M+1],I=1&D;if(M<L-1&&D>>1==p[2*M+3]>>1&&(I=2,M+=1),D<0){for(var P=-(D>>1)-1,R=0;R<O;++R)if(void 0!==(z=e(d[R],P)))return z;if(0!==I)for(R=0;R<C;++R)if(void 0!==(z=e(l[R],P)))return z;if(1!==I)for(R=0;R<E;++R){var z;if(void 0!==(z=e(u[R],P)))return z}0===I?g(l,c,C++,P):1===I?g(u,h,E++,P):2===I&&g(d,f,O++,P)}else P=(D>>1)-1,0===I?m(l,c,C--,P):1===I?m(u,h,E--,P):2===I&&m(d,f,O--,P)}},scanBipartite:function(t,e,n,r,i,s,u,h,d,f,y,v){var _=0,b=2*t,x=e,w=e+t,k=1,M=1;r?M=o:k=o;for(var T=i;T<s;++T){var S=T+k,A=b*T;p[_++]=u[A+x],p[_++]=-S,p[_++]=u[A+w],p[_++]=S}for(T=d;T<f;++T)S=T+M,p[_++]=y[b*T+x],p[_++]=-S;var L=_>>>1;a(p,L);var C=0;for(T=0;T<L;++T){var E=0|p[2*T+1];if(E<0){var O=!1;if((S=-E)>=o?(O=!r,S-=o):(O=!!r,S-=1),O)g(l,c,C++,S);else{var D=v[S],I=b*S,P=y[I+e+1],R=y[I+e+1+t];t:for(var z=0;z<C;++z){var j=l[z],F=b*j;if(!(R<u[F+e+1]||u[F+e+1+t]<P)){for(var N=e+2;N<t;++N)if(y[I+N+t]<u[F+N]||u[F+N+t]<y[I+N])continue t;var B,Y=h[j];if(void 0!==(B=r?n(D,Y):n(Y,D)))return B}}}}else m(l,c,C--,E-k)}},scanComplete:function(t,e,n,r,i,s,c,u,h,d,f){for(var m=0,g=2*t,y=e,v=e+t,_=r;_<i;++_){var b=_+o,x=g*_;p[m++]=s[x+y],p[m++]=-b,p[m++]=s[x+v],p[m++]=b}for(_=u;_<h;++_)b=_+1,p[m++]=d[g*_+y],p[m++]=-b;var w=m>>>1;a(p,w);var k=0;for(_=0;_<w;++_){var M=0|p[2*_+1];if(M<0)if((b=-M)>=o)l[k++]=b-o;else{var T=f[b-=1],S=g*b,A=d[S+e+1],L=d[S+e+1+t];t:for(var C=0;C<k;++C){var E=l[C],O=c[E];if(O===T)break;var D=g*E;if(!(L<s[D+e+1]||s[D+e+1+t]<A)){for(var I=e+2;I<t;++I)if(d[S+I+t]<s[D+I]||s[D+I+t]<d[S+I])continue t;var P=n(O,T);if(void 0!==P)return P}}}else{for(b=M-o,C=k-1;C>=0;--C)if(l[C]===b){for(I=C+1;I<k;++I)l[I-1]=l[I];break}--k}}}};var r=t(\"typedarray-pool\"),i=t(\"bit-twiddle\"),a=t(\"./sort\"),o=1<<28,s=1024,l=r.mallocInt32(s),c=r.mallocInt32(s),u=r.mallocInt32(s),h=r.mallocInt32(s),d=r.mallocInt32(s),f=r.mallocInt32(s),p=r.mallocDouble(8192);function m(t,e,n,r){var i=e[r],a=t[n-1];t[i]=a,e[a]=i}function g(t,e,n,r){t[n]=r,e[r]=n}},{\"./sort\":106,\"bit-twiddle\":97,\"typedarray-pool\":595}],108:[function(t,e,n){},{}],109:[function(t,e,n){arguments[4][108][0].apply(n,arguments)},{dup:108}],110:[function(t,e,n){\"use strict\";var r,i=\"object\"==typeof Reflect?Reflect:null,a=i&&\"function\"==typeof i.apply?i.apply:function(t,e,n){return Function.prototype.apply.call(t,e,n)};r=i&&\"function\"==typeof i.ownKeys?i.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};var o=Number.isNaN||function(t){return t!=t};function s(){s.init.call(this)}e.exports=s,e.exports.once=function(t,e){return new Promise((function(n,r){function i(){void 0!==a&&t.removeListener(\"error\",a),n([].slice.call(arguments))}var a;\"error\"!==e&&(a=function(n){t.removeListener(e,i),r(n)},t.once(\"error\",a)),t.once(e,i)}))},s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var l=10;function c(t){if(\"function\"!=typeof t)throw new TypeError('The \"listener\" argument must be of type Function. Received type '+typeof t)}function u(t){return void 0===t._maxListeners?s.defaultMaxListeners:t._maxListeners}function h(t,e,n,r){var i,a,o;if(c(n),void 0===(a=t._events)?(a=t._events=Object.create(null),t._eventsCount=0):(void 0!==a.newListener&&(t.emit(\"newListener\",e,n.listener?n.listener:n),a=t._events),o=a[e]),void 0===o)o=a[e]=n,++t._eventsCount;else if(\"function\"==typeof o?o=a[e]=r?[n,o]:[o,n]:r?o.unshift(n):o.push(n),(i=u(t))>0&&o.length>i&&!o.warned){o.warned=!0;var s=new Error(\"Possible EventEmitter memory leak detected. \"+o.length+\" \"+String(e)+\" listeners added. Use emitter.setMaxListeners() to increase limit\");s.name=\"MaxListenersExceededWarning\",s.emitter=t,s.type=e,s.count=o.length,console&&console.warn&&console.warn(s)}return t}function d(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function f(t,e,n){var r={fired:!1,wrapFn:void 0,target:t,type:e,listener:n},i=d.bind(r);return i.listener=n,r.wrapFn=i,i}function p(t,e,n){var r=t._events;if(void 0===r)return[];var i=r[e];return void 0===i?[]:\"function\"==typeof i?n?[i.listener||i]:[i]:n?function(t){for(var e=new Array(t.length),n=0;n<e.length;++n)e[n]=t[n].listener||t[n];return e}(i):g(i,i.length)}function m(t){var e=this._events;if(void 0!==e){var n=e[t];if(\"function\"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function g(t,e){for(var n=new Array(e),r=0;r<e;++r)n[r]=t[r];return n}Object.defineProperty(s,\"defaultMaxListeners\",{enumerable:!0,get:function(){return l},set:function(t){if(\"number\"!=typeof t||t<0||o(t))throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received '+t+\".\");l=t}}),s.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},s.prototype.setMaxListeners=function(t){if(\"number\"!=typeof t||t<0||o(t))throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received '+t+\".\");return this._maxListeners=t,this},s.prototype.getMaxListeners=function(){return u(this)},s.prototype.emit=function(t){for(var e=[],n=1;n<arguments.length;n++)e.push(arguments[n]);var r=\"error\"===t,i=this._events;if(void 0!==i)r=r&&void 0===i.error;else if(!r)return!1;if(r){var o;if(e.length>0&&(o=e[0]),o instanceof Error)throw o;var s=new Error(\"Unhandled error.\"+(o?\" (\"+o.message+\")\":\"\"));throw s.context=o,s}var l=i[t];if(void 0===l)return!1;if(\"function\"==typeof l)a(l,this,e);else{var c=l.length,u=g(l,c);for(n=0;n<c;++n)a(u[n],this,e)}return!0},s.prototype.on=s.prototype.addListener=function(t,e){return h(this,t,e,!1)},s.prototype.prependListener=function(t,e){return h(this,t,e,!0)},s.prototype.once=function(t,e){return c(e),this.on(t,f(this,t,e)),this},s.prototype.prependOnceListener=function(t,e){return c(e),this.prependListener(t,f(this,t,e)),this},s.prototype.off=s.prototype.removeListener=function(t,e){var n,r,i,a,o;if(c(e),void 0===(r=this._events))return this;if(void 0===(n=r[t]))return this;if(n===e||n.listener===e)0==--this._eventsCount?this._events=Object.create(null):(delete r[t],r.removeListener&&this.emit(\"removeListener\",t,n.listener||e));else if(\"function\"!=typeof n){for(i=-1,a=n.length-1;a>=0;a--)if(n[a]===e||n[a].listener===e){o=n[a].listener,i=a;break}if(i<0)return this;0===i?n.shift():function(t,e){for(;e+1<t.length;e++)t[e]=t[e+1];t.pop()}(n,i),1===n.length&&(r[t]=n[0]),void 0!==r.removeListener&&this.emit(\"removeListener\",t,o||e)}return this},s.prototype.removeAllListeners=function(t){var e,n,r;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[t]&&(0==--this._eventsCount?this._events=Object.create(null):delete n[t]),this;if(0===arguments.length){var i,a=Object.keys(n);for(r=0;r<a.length;++r)\"removeListener\"!==(i=a[r])&&this.removeAllListeners(i);return this.removeAllListeners(\"removeListener\"),this._events=Object.create(null),this._eventsCount=0,this}if(\"function\"==typeof(e=n[t]))this.removeListener(t,e);else if(void 0!==e)for(r=e.length-1;r>=0;r--)this.removeListener(t,e[r]);return this},s.prototype.listeners=function(t){return p(this,t,!0)},s.prototype.rawListeners=function(t){return p(this,t,!1)},s.listenerCount=function(t,e){return\"function\"==typeof t.listenerCount?t.listenerCount(e):m.call(t,e)},s.prototype.listenerCount=m,s.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}},{}],111:[function(t,e,n){(function(e){(function(){\"use strict\";var e=t(\"base64-js\"),r=t(\"ieee754\");n.Buffer=o,n.SlowBuffer=function(t){return+t!=t&&(t=0),o.alloc(+t)},n.INSPECT_MAX_BYTES=50;var i=2147483647;function a(t){if(t>i)throw new RangeError('The value \"'+t+'\" is invalid for option \"size\"');var e=new Uint8Array(t);return e.__proto__=o.prototype,e}function o(t,e,n){if(\"number\"==typeof t){if(\"string\"==typeof e)throw new TypeError('The \"string\" argument must be of type string. Received type number');return c(t)}return s(t,e,n)}function s(t,e,n){if(\"string\"==typeof t)return function(t,e){if(\"string\"==typeof e&&\"\"!==e||(e=\"utf8\"),!o.isEncoding(e))throw new TypeError(\"Unknown encoding: \"+e);var n=0|d(t,e),r=a(n),i=r.write(t,e);return i!==n&&(r=r.slice(0,i)),r}(t,e);if(ArrayBuffer.isView(t))return u(t);if(null==t)throw TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof t);if(N(t,ArrayBuffer)||t&&N(t.buffer,ArrayBuffer))return function(t,e,n){if(e<0||t.byteLength<e)throw new RangeError('\"offset\" is outside of buffer bounds');if(t.byteLength<e+(n||0))throw new RangeError('\"length\" is outside of buffer bounds');var r;return(r=void 0===e&&void 0===n?new Uint8Array(t):void 0===n?new Uint8Array(t,e):new Uint8Array(t,e,n)).__proto__=o.prototype,r}(t,e,n);if(\"number\"==typeof t)throw new TypeError('The \"value\" argument must not be of type number. Received type number');var r=t.valueOf&&t.valueOf();if(null!=r&&r!==t)return o.from(r,e,n);var i=function(t){if(o.isBuffer(t)){var e=0|h(t.length),n=a(e);return 0===n.length||t.copy(n,0,0,e),n}return void 0!==t.length?\"number\"!=typeof t.length||B(t.length)?a(0):u(t):\"Buffer\"===t.type&&Array.isArray(t.data)?u(t.data):void 0}(t);if(i)return i;if(\"undefined\"!=typeof Symbol&&null!=Symbol.toPrimitive&&\"function\"==typeof t[Symbol.toPrimitive])return o.from(t[Symbol.toPrimitive](\"string\"),e,n);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof t)}function l(t){if(\"number\"!=typeof t)throw new TypeError('\"size\" argument must be of type number');if(t<0)throw new RangeError('The value \"'+t+'\" is invalid for option \"size\"')}function c(t){return l(t),a(t<0?0:0|h(t))}function u(t){for(var e=t.length<0?0:0|h(t.length),n=a(e),r=0;r<e;r+=1)n[r]=255&t[r];return n}function h(t){if(t>=i)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+i.toString(16)+\" bytes\");return 0|t}function d(t,e){if(o.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||N(t,ArrayBuffer))return t.byteLength;if(\"string\"!=typeof t)throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);var n=t.length,r=arguments.length>2&&!0===arguments[2];if(!r&&0===n)return 0;for(var i=!1;;)switch(e){case\"ascii\":case\"latin1\":case\"binary\":return n;case\"utf8\":case\"utf-8\":return z(t).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*n;case\"hex\":return n>>>1;case\"base64\":return j(t).length;default:if(i)return r?-1:z(t).length;e=(\"\"+e).toLowerCase(),i=!0}}function f(t,e,n){var r=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return\"\";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return\"\";if((n>>>=0)<=(e>>>=0))return\"\";for(t||(t=\"utf8\");;)switch(t){case\"hex\":return L(this,e,n);case\"utf8\":case\"utf-8\":return M(this,e,n);case\"ascii\":return S(this,e,n);case\"latin1\":case\"binary\":return A(this,e,n);case\"base64\":return k(this,e,n);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return C(this,e,n);default:if(r)throw new TypeError(\"Unknown encoding: \"+t);t=(t+\"\").toLowerCase(),r=!0}}function p(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function m(t,e,n,r,i){if(0===t.length)return-1;if(\"string\"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),B(n=+n)&&(n=i?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(i)return-1;n=t.length-1}else if(n<0){if(!i)return-1;n=0}if(\"string\"==typeof e&&(e=o.from(e,r)),o.isBuffer(e))return 0===e.length?-1:g(t,e,n,r,i);if(\"number\"==typeof e)return e&=255,\"function\"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):g(t,[e],n,r,i);throw new TypeError(\"val must be string, number or Buffer\")}function g(t,e,n,r,i){var a,o=1,s=t.length,l=e.length;if(void 0!==r&&(\"ucs2\"===(r=String(r).toLowerCase())||\"ucs-2\"===r||\"utf16le\"===r||\"utf-16le\"===r)){if(t.length<2||e.length<2)return-1;o=2,s/=2,l/=2,n/=2}function c(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}if(i){var u=-1;for(a=n;a<s;a++)if(c(t,a)===c(e,-1===u?0:a-u)){if(-1===u&&(u=a),a-u+1===l)return u*o}else-1!==u&&(a-=a-u),u=-1}else for(n+l>s&&(n=s-l),a=n;a>=0;a--){for(var h=!0,d=0;d<l;d++)if(c(t,a+d)!==c(e,d)){h=!1;break}if(h)return a}return-1}function y(t,e,n,r){n=Number(n)||0;var i=t.length-n;r?(r=Number(r))>i&&(r=i):r=i;var a=e.length;r>a/2&&(r=a/2);for(var o=0;o<r;++o){var s=parseInt(e.substr(2*o,2),16);if(B(s))return o;t[n+o]=s}return o}function v(t,e,n,r){return F(z(e,t.length-n),t,n,r)}function _(t,e,n,r){return F(function(t){for(var e=[],n=0;n<t.length;++n)e.push(255&t.charCodeAt(n));return e}(e),t,n,r)}function b(t,e,n,r){return _(t,e,n,r)}function x(t,e,n,r){return F(j(e),t,n,r)}function w(t,e,n,r){return F(function(t,e){for(var n,r,i=[],a=0;a<t.length&&!((e-=2)<0);++a)r=(n=t.charCodeAt(a))>>8,i.push(n%256),i.push(r);return i}(e,t.length-n),t,n,r)}function k(t,n,r){return e.fromByteArray(0===n&&r===t.length?t:t.slice(n,r))}function M(t,e,n){n=Math.min(t.length,n);for(var r=[],i=e;i<n;){var a,o,s,l,c=t[i],u=null,h=c>239?4:c>223?3:c>191?2:1;if(i+h<=n)switch(h){case 1:c<128&&(u=c);break;case 2:128==(192&(a=t[i+1]))&&(l=(31&c)<<6|63&a)>127&&(u=l);break;case 3:o=t[i+2],128==(192&(a=t[i+1]))&&128==(192&o)&&(l=(15&c)<<12|(63&a)<<6|63&o)>2047&&(l<55296||l>57343)&&(u=l);break;case 4:o=t[i+2],s=t[i+3],128==(192&(a=t[i+1]))&&128==(192&o)&&128==(192&s)&&(l=(15&c)<<18|(63&a)<<12|(63&o)<<6|63&s)>65535&&l<1114112&&(u=l)}null===u?(u=65533,h=1):u>65535&&(r.push((u-=65536)>>>10&1023|55296),u=56320|1023&u),r.push(u),i+=h}return function(t){var e=t.length;if(e<=T)return String.fromCharCode.apply(String,t);for(var n=\"\",r=0;r<e;)n+=String.fromCharCode.apply(String,t.slice(r,r+=T));return n}(r)}n.kMaxLength=i,(o.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()}catch(e){return!1}}())||\"undefined\"==typeof console||\"function\"!=typeof console.error||console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\"),Object.defineProperty(o.prototype,\"parent\",{enumerable:!0,get:function(){if(o.isBuffer(this))return this.buffer}}),Object.defineProperty(o.prototype,\"offset\",{enumerable:!0,get:function(){if(o.isBuffer(this))return this.byteOffset}}),\"undefined\"!=typeof Symbol&&null!=Symbol.species&&o[Symbol.species]===o&&Object.defineProperty(o,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),o.poolSize=8192,o.from=function(t,e,n){return s(t,e,n)},o.prototype.__proto__=Uint8Array.prototype,o.__proto__=Uint8Array,o.alloc=function(t,e,n){return function(t,e,n){return l(t),t<=0?a(t):void 0!==e?\"string\"==typeof n?a(t).fill(e,n):a(t).fill(e):a(t)}(t,e,n)},o.allocUnsafe=function(t){return c(t)},o.allocUnsafeSlow=function(t){return c(t)},o.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==o.prototype},o.compare=function(t,e){if(N(t,Uint8Array)&&(t=o.from(t,t.offset,t.byteLength)),N(e,Uint8Array)&&(e=o.from(e,e.offset,e.byteLength)),!o.isBuffer(t)||!o.isBuffer(e))throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;for(var n=t.length,r=e.length,i=0,a=Math.min(n,r);i<a;++i)if(t[i]!==e[i]){n=t[i],r=e[i];break}return n<r?-1:r<n?1:0},o.isEncoding=function(t){switch(String(t).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}},o.concat=function(t,e){if(!Array.isArray(t))throw new TypeError('\"list\" argument must be an Array of Buffers');if(0===t.length)return o.alloc(0);var n;if(void 0===e)for(e=0,n=0;n<t.length;++n)e+=t[n].length;var r=o.allocUnsafe(e),i=0;for(n=0;n<t.length;++n){var a=t[n];if(N(a,Uint8Array)&&(a=o.from(a)),!o.isBuffer(a))throw new TypeError('\"list\" argument must be an Array of Buffers');a.copy(r,i),i+=a.length}return r},o.byteLength=d,o.prototype._isBuffer=!0,o.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(var e=0;e<t;e+=2)p(this,e,e+1);return this},o.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(var e=0;e<t;e+=4)p(this,e,e+3),p(this,e+1,e+2);return this},o.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(var e=0;e<t;e+=8)p(this,e,e+7),p(this,e+1,e+6),p(this,e+2,e+5),p(this,e+3,e+4);return this},o.prototype.toLocaleString=o.prototype.toString=function(){var t=this.length;return 0===t?\"\":0===arguments.length?M(this,0,t):f.apply(this,arguments)},o.prototype.equals=function(t){if(!o.isBuffer(t))throw new TypeError(\"Argument must be a Buffer\");return this===t||0===o.compare(this,t)},o.prototype.inspect=function(){var t=\"\",e=n.INSPECT_MAX_BYTES;return t=this.toString(\"hex\",0,e).replace(/(.{2})/g,\"$1 \").trim(),this.length>e&&(t+=\" ... \"),\"<Buffer \"+t+\">\"},o.prototype.compare=function(t,e,n,r,i){if(N(t,Uint8Array)&&(t=o.from(t,t.offset,t.byteLength)),!o.isBuffer(t))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),e<0||n>t.length||r<0||i>this.length)throw new RangeError(\"out of range index\");if(r>=i&&e>=n)return 0;if(r>=i)return-1;if(e>=n)return 1;if(this===t)return 0;for(var a=(i>>>=0)-(r>>>=0),s=(n>>>=0)-(e>>>=0),l=Math.min(a,s),c=this.slice(r,i),u=t.slice(e,n),h=0;h<l;++h)if(c[h]!==u[h]){a=c[h],s=u[h];break}return a<s?-1:s<a?1:0},o.prototype.includes=function(t,e,n){return-1!==this.indexOf(t,e,n)},o.prototype.indexOf=function(t,e,n){return m(this,t,e,n,!0)},o.prototype.lastIndexOf=function(t,e,n){return m(this,t,e,n,!1)},o.prototype.write=function(t,e,n,r){if(void 0===e)r=\"utf8\",n=this.length,e=0;else if(void 0===n&&\"string\"==typeof e)r=e,n=this.length,e=0;else{if(!isFinite(e))throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");e>>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r=\"utf8\")):(r=n,n=void 0)}var i=this.length-e;if((void 0===n||n>i)&&(n=i),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");r||(r=\"utf8\");for(var a=!1;;)switch(r){case\"hex\":return y(this,t,e,n);case\"utf8\":case\"utf-8\":return v(this,t,e,n);case\"ascii\":return _(this,t,e,n);case\"latin1\":case\"binary\":return b(this,t,e,n);case\"base64\":return x(this,t,e,n);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return w(this,t,e,n);default:if(a)throw new TypeError(\"Unknown encoding: \"+r);r=(\"\"+r).toLowerCase(),a=!0}},o.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};var T=4096;function S(t,e,n){var r=\"\";n=Math.min(t.length,n);for(var i=e;i<n;++i)r+=String.fromCharCode(127&t[i]);return r}function A(t,e,n){var r=\"\";n=Math.min(t.length,n);for(var i=e;i<n;++i)r+=String.fromCharCode(t[i]);return r}function L(t,e,n){var r,i=t.length;(!e||e<0)&&(e=0),(!n||n<0||n>i)&&(n=i);for(var a=\"\",o=e;o<n;++o)a+=(r=t[o])<16?\"0\"+r.toString(16):r.toString(16);return a}function C(t,e,n){for(var r=t.slice(e,n),i=\"\",a=0;a<r.length;a+=2)i+=String.fromCharCode(r[a]+256*r[a+1]);return i}function E(t,e,n){if(t%1!=0||t<0)throw new RangeError(\"offset is not uint\");if(t+e>n)throw new RangeError(\"Trying to access beyond buffer length\")}function O(t,e,n,r,i,a){if(!o.isBuffer(t))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(e>i||e<a)throw new RangeError('\"value\" argument is out of bounds');if(n+r>t.length)throw new RangeError(\"Index out of range\")}function D(t,e,n,r,i,a){if(n+r>t.length)throw new RangeError(\"Index out of range\");if(n<0)throw new RangeError(\"Index out of range\")}function I(t,e,n,i,a){return e=+e,n>>>=0,a||D(t,0,n,4),r.write(t,e,n,i,23,4),n+4}function P(t,e,n,i,a){return e=+e,n>>>=0,a||D(t,0,n,8),r.write(t,e,n,i,52,8),n+8}o.prototype.slice=function(t,e){var n=this.length;(t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(e=void 0===e?n:~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),e<t&&(e=t);var r=this.subarray(t,e);return r.__proto__=o.prototype,r},o.prototype.readUIntLE=function(t,e,n){t>>>=0,e>>>=0,n||E(t,e,this.length);for(var r=this[t],i=1,a=0;++a<e&&(i*=256);)r+=this[t+a]*i;return r},o.prototype.readUIntBE=function(t,e,n){t>>>=0,e>>>=0,n||E(t,e,this.length);for(var r=this[t+--e],i=1;e>0&&(i*=256);)r+=this[t+--e]*i;return r},o.prototype.readUInt8=function(t,e){return t>>>=0,e||E(t,1,this.length),this[t]},o.prototype.readUInt16LE=function(t,e){return t>>>=0,e||E(t,2,this.length),this[t]|this[t+1]<<8},o.prototype.readUInt16BE=function(t,e){return t>>>=0,e||E(t,2,this.length),this[t]<<8|this[t+1]},o.prototype.readUInt32LE=function(t,e){return t>>>=0,e||E(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},o.prototype.readUInt32BE=function(t,e){return t>>>=0,e||E(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},o.prototype.readIntLE=function(t,e,n){t>>>=0,e>>>=0,n||E(t,e,this.length);for(var r=this[t],i=1,a=0;++a<e&&(i*=256);)r+=this[t+a]*i;return r>=(i*=128)&&(r-=Math.pow(2,8*e)),r},o.prototype.readIntBE=function(t,e,n){t>>>=0,e>>>=0,n||E(t,e,this.length);for(var r=e,i=1,a=this[t+--r];r>0&&(i*=256);)a+=this[t+--r]*i;return a>=(i*=128)&&(a-=Math.pow(2,8*e)),a},o.prototype.readInt8=function(t,e){return t>>>=0,e||E(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},o.prototype.readInt16LE=function(t,e){t>>>=0,e||E(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},o.prototype.readInt16BE=function(t,e){t>>>=0,e||E(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},o.prototype.readInt32LE=function(t,e){return t>>>=0,e||E(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},o.prototype.readInt32BE=function(t,e){return t>>>=0,e||E(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},o.prototype.readFloatLE=function(t,e){return t>>>=0,e||E(t,4,this.length),r.read(this,t,!0,23,4)},o.prototype.readFloatBE=function(t,e){return t>>>=0,e||E(t,4,this.length),r.read(this,t,!1,23,4)},o.prototype.readDoubleLE=function(t,e){return t>>>=0,e||E(t,8,this.length),r.read(this,t,!0,52,8)},o.prototype.readDoubleBE=function(t,e){return t>>>=0,e||E(t,8,this.length),r.read(this,t,!1,52,8)},o.prototype.writeUIntLE=function(t,e,n,r){t=+t,e>>>=0,n>>>=0,r||O(this,t,e,n,Math.pow(2,8*n)-1,0);var i=1,a=0;for(this[e]=255&t;++a<n&&(i*=256);)this[e+a]=t/i&255;return e+n},o.prototype.writeUIntBE=function(t,e,n,r){t=+t,e>>>=0,n>>>=0,r||O(this,t,e,n,Math.pow(2,8*n)-1,0);var i=n-1,a=1;for(this[e+i]=255&t;--i>=0&&(a*=256);)this[e+i]=t/a&255;return e+n},o.prototype.writeUInt8=function(t,e,n){return t=+t,e>>>=0,n||O(this,t,e,1,255,0),this[e]=255&t,e+1},o.prototype.writeUInt16LE=function(t,e,n){return t=+t,e>>>=0,n||O(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},o.prototype.writeUInt16BE=function(t,e,n){return t=+t,e>>>=0,n||O(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},o.prototype.writeUInt32LE=function(t,e,n){return t=+t,e>>>=0,n||O(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},o.prototype.writeUInt32BE=function(t,e,n){return t=+t,e>>>=0,n||O(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},o.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e>>>=0,!r){var i=Math.pow(2,8*n-1);O(this,t,e,n,i-1,-i)}var a=0,o=1,s=0;for(this[e]=255&t;++a<n&&(o*=256);)t<0&&0===s&&0!==this[e+a-1]&&(s=1),this[e+a]=(t/o>>0)-s&255;return e+n},o.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e>>>=0,!r){var i=Math.pow(2,8*n-1);O(this,t,e,n,i-1,-i)}var a=n-1,o=1,s=0;for(this[e+a]=255&t;--a>=0&&(o*=256);)t<0&&0===s&&0!==this[e+a+1]&&(s=1),this[e+a]=(t/o>>0)-s&255;return e+n},o.prototype.writeInt8=function(t,e,n){return t=+t,e>>>=0,n||O(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},o.prototype.writeInt16LE=function(t,e,n){return t=+t,e>>>=0,n||O(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},o.prototype.writeInt16BE=function(t,e,n){return t=+t,e>>>=0,n||O(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},o.prototype.writeInt32LE=function(t,e,n){return t=+t,e>>>=0,n||O(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},o.prototype.writeInt32BE=function(t,e,n){return t=+t,e>>>=0,n||O(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},o.prototype.writeFloatLE=function(t,e,n){return I(this,t,e,!0,n)},o.prototype.writeFloatBE=function(t,e,n){return I(this,t,e,!1,n)},o.prototype.writeDoubleLE=function(t,e,n){return P(this,t,e,!0,n)},o.prototype.writeDoubleBE=function(t,e,n){return P(this,t,e,!1,n)},o.prototype.copy=function(t,e,n,r){if(!o.isBuffer(t))throw new TypeError(\"argument should be a Buffer\");if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r<n&&(r=n),r===n)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError(\"targetStart out of bounds\");if(n<0||n>=this.length)throw new RangeError(\"Index out of range\");if(r<0)throw new RangeError(\"sourceEnd out of bounds\");r>this.length&&(r=this.length),t.length-e<r-n&&(r=t.length-e+n);var i=r-n;if(this===t&&\"function\"==typeof Uint8Array.prototype.copyWithin)this.copyWithin(e,n,r);else if(this===t&&n<e&&e<r)for(var a=i-1;a>=0;--a)t[a+e]=this[a+n];else Uint8Array.prototype.set.call(t,this.subarray(n,r),e);return i},o.prototype.fill=function(t,e,n,r){if(\"string\"==typeof t){if(\"string\"==typeof e?(r=e,e=0,n=this.length):\"string\"==typeof n&&(r=n,n=this.length),void 0!==r&&\"string\"!=typeof r)throw new TypeError(\"encoding must be a string\");if(\"string\"==typeof r&&!o.isEncoding(r))throw new TypeError(\"Unknown encoding: \"+r);if(1===t.length){var i=t.charCodeAt(0);(\"utf8\"===r&&i<128||\"latin1\"===r)&&(t=i)}}else\"number\"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<n)throw new RangeError(\"Out of range index\");if(n<=e)return this;var a;if(e>>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),\"number\"==typeof t)for(a=e;a<n;++a)this[a]=t;else{var s=o.isBuffer(t)?t:o.from(t,r),l=s.length;if(0===l)throw new TypeError('The value \"'+t+'\" is invalid for argument \"value\"');for(a=0;a<n-e;++a)this[a+e]=s[a%l]}return this};var R=/[^+/0-9A-Za-z-_]/g;function z(t,e){var n;e=e||1/0;for(var r=t.length,i=null,a=[],o=0;o<r;++o){if((n=t.charCodeAt(o))>55295&&n<57344){if(!i){if(n>56319){(e-=3)>-1&&a.push(239,191,189);continue}if(o+1===r){(e-=3)>-1&&a.push(239,191,189);continue}i=n;continue}if(n<56320){(e-=3)>-1&&a.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(e-=3)>-1&&a.push(239,191,189);if(i=null,n<128){if((e-=1)<0)break;a.push(n)}else if(n<2048){if((e-=2)<0)break;a.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;a.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error(\"Invalid code point\");if((e-=4)<0)break;a.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return a}function j(t){return e.toByteArray(function(t){if((t=(t=t.split(\"=\")[0]).trim().replace(R,\"\")).length<2)return\"\";for(;t.length%4!=0;)t+=\"=\";return t}(t))}function F(t,e,n,r){for(var i=0;i<r&&!(i+n>=e.length||i>=t.length);++i)e[i+n]=t[i];return i}function N(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function B(t){return t!=t}}).call(this)}).call(this,t(\"buffer\").Buffer)},{\"base64-js\":79,buffer:111,ieee754:442}],112:[function(t,e,n){\"use strict\";var r=t(\"./lib/monotone\"),i=t(\"./lib/triangulation\"),a=t(\"./lib/delaunay\"),o=t(\"./lib/filter\");function s(t){return[Math.min(t[0],t[1]),Math.max(t[0],t[1])]}function l(t,e){return t[0]-e[0]||t[1]-e[1]}function c(t,e,n){return e in t?t[e]:n}e.exports=function(t,e,n){Array.isArray(e)?(n=n||{},e=e||[]):(n=e||{},e=[]);var u=!!c(n,\"delaunay\",!0),h=!!c(n,\"interior\",!0),d=!!c(n,\"exterior\",!0),f=!!c(n,\"infinity\",!1);if(!h&&!d||0===t.length)return[];var p=r(t,e);if(u||h!==d||f){for(var m=i(t.length,function(t){return t.map(s).sort(l)}(e)),g=0;g<p.length;++g){var y=p[g];m.addTriangle(y[0],y[1],y[2])}return u&&a(t,m),d?h?f?o(m,0,f):m.cells():o(m,1,f):o(m,-1)}return p}},{\"./lib/delaunay\":113,\"./lib/filter\":114,\"./lib/monotone\":115,\"./lib/triangulation\":116}],113:[function(t,e,n){\"use strict\";var r=t(\"robust-in-sphere\")[4];function i(t,e,n,i,a,o){var s=e.opposite(i,a);if(!(s<0)){if(a<i){var l=i;i=a,a=l,l=o,o=s,s=l}e.isConstraint(i,a)||r(t[i],t[a],t[o],t[s])<0&&n.push(i,a)}}t(\"binary-search-bounds\"),e.exports=function(t,e){for(var n=[],a=t.length,o=e.stars,s=0;s<a;++s)for(var l=o[s],c=1;c<l.length;c+=2)if(!((f=l[c])<s||e.isConstraint(s,f))){for(var u=l[c-1],h=-1,d=1;d<l.length;d+=2)if(l[d-1]===f){h=l[d];break}h<0||r(t[s],t[f],t[u],t[h])<0&&n.push(s,f)}for(;n.length>0;){for(var f=n.pop(),p=(u=-1,h=-1,l=o[s=n.pop()],1);p<l.length;p+=2){var m=l[p-1],g=l[p];m===f?h=g:g===f&&(u=m)}u<0||h<0||r(t[s],t[f],t[u],t[h])>=0||(e.flip(s,f),i(t,e,n,u,s,h),i(t,e,n,s,h,u),i(t,e,n,h,f,u),i(t,e,n,f,u,h))}}},{\"binary-search-bounds\":96,\"robust-in-sphere\":546}],114:[function(t,e,n){\"use strict\";var r,i=t(\"binary-search-bounds\");function a(t,e,n,r,i,a,o){this.cells=t,this.neighbor=e,this.flags=r,this.constraint=n,this.active=i,this.next=a,this.boundary=o}function o(t,e){return t[0]-e[0]||t[1]-e[1]||t[2]-e[2]}e.exports=function(t,e,n){var r=function(t,e){for(var n=t.cells(),r=n.length,i=0;i<r;++i){var s=(g=n[i])[0],l=g[2];(v=g[1])<l?v<s&&(g[0]=v,g[1]=l,g[2]=s):l<s&&(g[0]=l,g[1]=s,g[2]=v)}n.sort(o);var c=new Array(r);for(i=0;i<c.length;++i)c[i]=0;var u=[],h=[],d=new Array(3*r),f=new Array(3*r),p=null;e&&(p=[]);var m=new a(n,d,f,c,u,h,p);for(i=0;i<r;++i)for(var g=n[i],y=0;y<3;++y){var v,_=d[3*i+y]=m.locate(v=g[(y+1)%3],s=g[y],t.opposite(v,s)),b=f[3*i+y]=t.isConstraint(s,v);_<0&&(b?h.push(i):(u.push(i),c[i]=1),e&&p.push([v,s,-1]))}return m}(t,n);if(0===e)return n?r.cells.concat(r.boundary):r.cells;for(var i=1,s=r.active,l=r.next,c=r.flags,u=r.cells,h=r.constraint,d=r.neighbor;s.length>0||l.length>0;){for(;s.length>0;){var f=s.pop();if(c[f]!==-i){c[f]=i;for(var p=0;p<3;++p){var m=d[3*f+p];m>=0&&0===c[m]&&(h[3*f+p]?l.push(m):(s.push(m),c[m]=i))}}}var g=l;l=s,s=g,l.length=0,i=-i}var y=function(t,e,n){for(var r=0,i=0;i<t.length;++i)e[i]===n&&(t[r++]=t[i]);return t.length=r,t}(u,c,e);return n?y.concat(r.boundary):y},a.prototype.locate=(r=[0,0,0],function(t,e,n){var a=t,s=e,l=n;return e<n?e<t&&(a=e,s=n,l=t):n<t&&(a=n,s=t,l=e),a<0?-1:(r[0]=a,r[1]=s,r[2]=l,i.eq(this.cells,r,o))})},{\"binary-search-bounds\":96}],115:[function(t,e,n){\"use strict\";var r=t(\"binary-search-bounds\"),i=t(\"robust-orientation\")[3];function a(t,e,n,r,i){this.a=t,this.b=e,this.idx=n,this.lowerIds=r,this.upperIds=i}function o(t,e,n,r){this.a=t,this.b=e,this.type=n,this.idx=r}function s(t,e){var n=t.a[0]-e.a[0]||t.a[1]-e.a[1]||t.type-e.type;return n||(0!==t.type&&(n=i(t.a,t.b,e.b))?n:t.idx-e.idx)}function l(t,e){return i(t.a,t.b,e)}function c(t,e,n,a,o){for(var s=r.lt(e,a,l),c=r.gt(e,a,l),u=s;u<c;++u){for(var h=e[u],d=h.lowerIds,f=d.length;f>1&&i(n[d[f-2]],n[d[f-1]],a)>0;)t.push([d[f-1],d[f-2],o]),f-=1;d.length=f,d.push(o);var p=h.upperIds;for(f=p.length;f>1&&i(n[p[f-2]],n[p[f-1]],a)<0;)t.push([p[f-2],p[f-1],o]),f-=1;p.length=f,p.push(o)}}function u(t,e){var n;return(n=t.a[0]<e.a[0]?i(t.a,t.b,e.a):i(e.b,e.a,t.a))?n:(n=e.b[0]<t.b[0]?i(t.a,t.b,e.b):i(e.b,e.a,t.b))||t.idx-e.idx}function h(t,e,n){var i=r.le(t,n,u),o=t[i],s=o.upperIds,l=s[s.length-1];o.upperIds=[l],t.splice(i+1,0,new a(n.a,n.b,n.idx,[l],s))}function d(t,e,n){var i=n.a;n.a=n.b,n.b=i;var a=r.eq(t,n,u);t[a-1].upperIds=t[a].upperIds,t.splice(a,1)}e.exports=function(t,e){for(var n=t.length,r=e.length,i=[],l=0;l<n;++l)i.push(new o(t[l],null,0,l));for(l=0;l<r;++l){var u=e[l],f=t[u[0]],p=t[u[1]];f[0]<p[0]?i.push(new o(f,p,2,l),new o(p,f,1,l)):f[0]>p[0]&&i.push(new o(p,f,2,l),new o(f,p,1,l))}i.sort(s);for(var m=i[0].a[0]-(1+Math.abs(i[0].a[0]))*Math.pow(2,-52),g=[new a([m,1],[m,0],-1,[],[],[],[])],y=[],v=(l=0,i.length);l<v;++l){var _=i[l],b=_.type;0===b?c(y,g,t,_.a,_.idx):2===b?h(g,0,_):d(g,0,_)}return y}},{\"binary-search-bounds\":96,\"robust-orientation\":548}],116:[function(t,e,n){\"use strict\";var r=t(\"binary-search-bounds\");function i(t,e){this.stars=t,this.edges=e}e.exports=function(t,e){for(var n=new Array(t),r=0;r<t;++r)n[r]=[];return new i(n,e)};var a=i.prototype;function o(t,e,n){for(var r=1,i=t.length;r<i;r+=2)if(t[r-1]===e&&t[r]===n)return t[r-1]=t[i-2],t[r]=t[i-1],void(t.length=i-2)}a.isConstraint=function(){var t=[0,0];function e(t,e){return t[0]-e[0]||t[1]-e[1]}return function(n,i){return t[0]=Math.min(n,i),t[1]=Math.max(n,i),r.eq(this.edges,t,e)>=0}}(),a.removeTriangle=function(t,e,n){var r=this.stars;o(r[t],e,n),o(r[e],n,t),o(r[n],t,e)},a.addTriangle=function(t,e,n){var r=this.stars;r[t].push(e,n),r[e].push(n,t),r[n].push(t,e)},a.opposite=function(t,e){for(var n=this.stars[e],r=1,i=n.length;r<i;r+=2)if(n[r]===t)return n[r-1];return-1},a.flip=function(t,e){var n=this.opposite(t,e),r=this.opposite(e,t);this.removeTriangle(t,e,n),this.removeTriangle(e,t,r),this.addTriangle(t,r,n),this.addTriangle(e,n,r)},a.edges=function(){for(var t=this.stars,e=[],n=0,r=t.length;n<r;++n)for(var i=t[n],a=0,o=i.length;a<o;a+=2)e.push([i[a],i[a+1]]);return e},a.cells=function(){for(var t=this.stars,e=[],n=0,r=t.length;n<r;++n)for(var i=t[n],a=0,o=i.length;a<o;a+=2){var s=i[a],l=i[a+1];n<Math.min(s,l)&&e.push([n,s,l])}return e}},{\"binary-search-bounds\":96}],117:[function(t,e,n){\"use strict\";e.exports=function(t){for(var e=1,n=1;n<t.length;++n)for(var r=0;r<n;++r)if(t[n]<t[r])e=-e;else if(t[r]===t[n])return 0;return e}},{}],118:[function(t,e,n){\"use strict\";var r=t(\"dup\"),i=t(\"robust-linear-solve\");function a(t,e){for(var n=0,r=t.length,i=0;i<r;++i)n+=t[i]*e[i];return n}function o(t){var e=t.length;if(0===e)return[];var n=r([t.length+1,t.length+1],1),o=r([t.length+1],1);n[e][e]=0;for(var s=0;s<e;++s){for(var l=0;l<=s;++l)n[l][s]=n[s][l]=2*a(t[s],t[l]);o[s]=a(t[s],t[s])}var c=i(n,o),u=0,h=c[e+1];for(s=0;s<h.length;++s)u+=h[s];var d=new Array(e);for(s=0;s<e;++s){h=c[s];var f=0;for(l=0;l<h.length;++l)f+=h[l];d[s]=f/u}return d}function s(t){if(0===t.length)return[];for(var e=t[0].length,n=r([e]),i=o(t),a=0;a<t.length;++a)for(var s=0;s<e;++s)n[s]+=t[a][s]*i[a];return n}s.barycenetric=o,e.exports=s},{dup:176,\"robust-linear-solve\":547}],119:[function(t,e,n){e.exports=function(t){for(var e=r(t),n=0,i=0;i<t.length;++i)for(var a=t[i],o=0;o<e.length;++o)n+=Math.pow(a[o]-e[o],2);return Math.sqrt(n/t.length)};var r=t(\"circumcenter\")},{circumcenter:118}],120:[function(t,e,n){e.exports=function(t,e,n){return e<n?t<e?e:t>n?n:t:t<n?n:t>e?e:t}},{}],121:[function(t,e,n){\"use strict\";e.exports=function(t,e,n){var r;if(n){r=e;for(var i=new Array(e.length),a=0;a<e.length;++a)i[a]=[(s=e[a])[0],s[1],n[a]];e=i}for(var o=function(t,e,n){var r=p(t,[],f(t));return y(e,r,n),!!r}(t,e,!!n);v(t,e,!!n);)o=!0;if(n&&o)for(r.length=0,n.length=0,a=0;a<e.length;++a){var s;r.push([(s=e[a])[0],s[1]]),n.push(s[2])}return o};var r=t(\"union-find\"),i=t(\"box-intersect\"),a=t(\"robust-segment-intersect\"),o=t(\"big-rat\"),s=t(\"big-rat/cmp\"),l=t(\"big-rat/to-float\"),c=t(\"rat-vec\"),u=t(\"nextafter\"),h=t(\"./lib/rat-seg-intersect\");function d(t){var e=l(t);return[u(e,-1/0),u(e,1/0)]}function f(t){for(var e=new Array(t.length),n=0;n<t.length;++n){var r=t[n];e[n]=[u(r[0],-1/0),u(r[1],-1/0),u(r[0],1/0),u(r[1],1/0)]}return e}function p(t,e,n){for(var a=e.length,o=new r(a),s=[],l=0;l<e.length;++l){var c=e[l],h=d(c[0]),f=d(c[1]);s.push([u(h[0],-1/0),u(f[0],-1/0),u(h[1],1/0),u(f[1],1/0)])}i(s,(function(t,e){o.link(t,e)}));var p=!0,m=new Array(a);for(l=0;l<a;++l)(y=o.find(l))!==l&&(p=!1,t[y]=[Math.min(t[l][0],t[y][0]),Math.min(t[l][1],t[y][1])]);if(p)return null;var g=0;for(l=0;l<a;++l){var y;(y=o.find(l))===l?(m[l]=g,t[g++]=t[l]):m[l]=-1}for(t.length=g,l=0;l<a;++l)m[l]<0&&(m[l]=m[o.find(l)]);return m}function m(t,e){return t[0]-e[0]||t[1]-e[1]}function g(t,e){return t[0]-e[0]||t[1]-e[1]||(t[2]<e[2]?-1:t[2]>e[2]?1:0)}function y(t,e,n){if(0!==t.length){if(e)for(var r=0;r<t.length;++r){var i=e[(o=t[r])[0]],a=e[o[1]];o[0]=Math.min(i,a),o[1]=Math.max(i,a)}else for(r=0;r<t.length;++r){var o;i=(o=t[r])[0],a=o[1],o[0]=Math.min(i,a),o[1]=Math.max(i,a)}t.sort(n?g:m);var s=1;for(r=1;r<t.length;++r){var l=t[r-1],c=t[r];(c[0]!==l[0]||c[1]!==l[1]||n&&c[2]!==l[2])&&(t[s++]=c)}t.length=s}}function v(t,e,n){var r=function(t,e){for(var n=new Array(e.length),r=0;r<e.length;++r){var i=e[r],a=t[i[0]],o=t[i[1]];n[r]=[u(Math.min(a[0],o[0]),-1/0),u(Math.min(a[1],o[1]),-1/0),u(Math.max(a[0],o[0]),1/0),u(Math.max(a[1],o[1]),1/0)]}return n}(t,e),d=function(t,e,n){var r=[];return i(n,(function(n,i){var o=e[n],s=e[i];o[0]!==s[0]&&o[0]!==s[1]&&o[1]!==s[0]&&o[1]!==s[1]&&a(t[o[0]],t[o[1]],t[s[0]],t[s[1]])&&r.push([n,i])})),r}(t,e,r),m=function(t,e,n,r){var o=[];return i(n,r,(function(n,r){var i=e[n];if(i[0]!==r&&i[1]!==r){var s=t[r];a(t[i[0]],t[i[1]],s,s)&&o.push([n,r])}})),o}(t,e,r,f(t)),g=p(t,function(t,e,n,r,i){var a,u,d=t.map((function(t){return[o(t[0]),o(t[1])]}));for(a=0;a<n.length;++a){var f=n[a],p=f[1],m=e[u=f[0]],g=e[p],y=h(c(t[m[0]]),c(t[m[1]]),c(t[g[0]]),c(t[g[1]]));if(y){var v=t.length;t.push([l(y[0]),l(y[1])]),d.push(y),r.push([u,v],[p,v])}}for(r.sort((function(t,e){if(t[0]!==e[0])return t[0]-e[0];var n=d[t[1]],r=d[e[1]];return s(n[0],r[0])||s(n[1],r[1])})),a=r.length-1;a>=0;--a){var _=e[u=(A=r[a])[0]],b=_[0],x=_[1],w=t[b],k=t[x];if((w[0]-k[0]||w[1]-k[1])<0){var M=b;b=x,x=M}_[0]=b;var T,S=_[1]=A[1];for(i&&(T=_[2]);a>0&&r[a-1][0]===u;){var A,L=(A=r[--a])[1];e.push(i?[S,L,T]:[S,L]),S=L}e.push(i?[S,x,T]:[S,x])}return d}(t,e,d,m,n));return y(e,g,n),!!g||d.length>0||m.length>0}},{\"./lib/rat-seg-intersect\":122,\"big-rat\":83,\"big-rat/cmp\":81,\"big-rat/to-float\":95,\"box-intersect\":101,nextafter:496,\"rat-vec\":530,\"robust-segment-intersect\":551,\"union-find\":596}],122:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,r){var a=s(e,t),h=s(r,n),d=u(a,h);if(0===o(d))return null;var f=u(h,s(t,n)),p=i(f,d),m=c(a,p);return l(t,m)};var r=t(\"big-rat/mul\"),i=t(\"big-rat/div\"),a=t(\"big-rat/sub\"),o=t(\"big-rat/sign\"),s=t(\"rat-vec/sub\"),l=t(\"rat-vec/add\"),c=t(\"rat-vec/muls\");function u(t,e){return a(r(t[0],e[1]),r(t[1],e[0]))}},{\"big-rat/div\":82,\"big-rat/mul\":92,\"big-rat/sign\":93,\"big-rat/sub\":94,\"rat-vec/add\":529,\"rat-vec/muls\":531,\"rat-vec/sub\":532}],123:[function(t,e,n){\"use strict\";var r=t(\"clamp\");function i(t,e){null==e&&(e=!0);var n=t[0],i=t[1],a=t[2],o=t[3];return null==o&&(o=e?1:255),e&&(n*=255,i*=255,a*=255,o*=255),16777216*(n=255&r(n,0,255))+((i=255&r(i,0,255))<<16)+((a=255&r(a,0,255))<<8)+(255&r(o,0,255))}e.exports=i,e.exports.to=i,e.exports.from=function(t,e){var n=(t=+t)>>>24,r=(16711680&t)>>>16,i=(65280&t)>>>8,a=255&t;return!1===e?[n,r,i,a]:[n/255,r/255,i/255,a/255]}},{clamp:120}],124:[function(t,e,n){\"use strict\";e.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},{}],125:[function(t,e,n){\"use strict\";var r=t(\"color-rgba\"),i=t(\"clamp\"),a=t(\"dtype\");e.exports=function(t,e){\"float\"!==e&&e||(e=\"array\"),\"uint\"===e&&(e=\"uint8\"),\"uint_clamped\"===e&&(e=\"uint8_clamped\");var n=new(a(e))(4),o=\"uint8\"!==e&&\"uint8_clamped\"!==e;return t.length&&\"string\"!=typeof t||((t=r(t))[0]/=255,t[1]/=255,t[2]/=255),function(t){return t instanceof Uint8Array||t instanceof Uint8ClampedArray||!!(Array.isArray(t)&&(t[0]>1||0===t[0])&&(t[1]>1||0===t[1])&&(t[2]>1||0===t[2])&&(!t[3]||t[3]>1))}(t)?(n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=null!=t[3]?t[3]:255,o&&(n[0]/=255,n[1]/=255,n[2]/=255,n[3]/=255),n):(o?(n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=null!=t[3]?t[3]:1):(n[0]=i(Math.floor(255*t[0]),0,255),n[1]=i(Math.floor(255*t[1]),0,255),n[2]=i(Math.floor(255*t[2]),0,255),n[3]=null==t[3]?255:i(Math.floor(255*t[3]),0,255)),n)}},{clamp:120,\"color-rgba\":127,dtype:175}],126:[function(t,e,n){(function(n){(function(){\"use strict\";var r=t(\"color-name\"),i=t(\"is-plain-obj\"),a=t(\"defined\");e.exports=function(t){var e,s,l=[],c=1;if(\"string\"==typeof t)if(r[t])l=r[t].slice(),s=\"rgb\";else if(\"transparent\"===t)c=0,s=\"rgb\",l=[0,0,0];else if(/^#[A-Fa-f0-9]+$/.test(t)){var u=t.slice(1);c=1,(f=u.length)<=4?(l=[parseInt(u[0]+u[0],16),parseInt(u[1]+u[1],16),parseInt(u[2]+u[2],16)],4===f&&(c=parseInt(u[3]+u[3],16)/255)):(l=[parseInt(u[0]+u[1],16),parseInt(u[2]+u[3],16),parseInt(u[4]+u[5],16)],8===f&&(c=parseInt(u[6]+u[7],16)/255)),l[0]||(l[0]=0),l[1]||(l[1]=0),l[2]||(l[2]=0),s=\"rgb\"}else if(e=/^((?:rgb|hs[lvb]|hwb|cmyk?|xy[zy]|gray|lab|lchu?v?|[ly]uv|lms)a?)\\s*\\(([^\\)]*)\\)/.exec(t)){var h=e[1],d=\"rgb\"===h;s=u=h.replace(/a$/,\"\");var f=\"cmyk\"===u?4:\"gray\"===u?1:3;l=e[2].trim().split(/\\s*,\\s*/).map((function(t,e){if(/%$/.test(t))return e===f?parseFloat(t)/100:\"rgb\"===u?255*parseFloat(t)/100:parseFloat(t);if(\"h\"===u[e]){if(/deg$/.test(t))return parseFloat(t);if(void 0!==o[t])return o[t]}return parseFloat(t)})),h===u&&l.push(1),c=d||void 0===l[f]?1:l[f],l=l.slice(0,f)}else t.length>10&&/[0-9](?:\\s|\\/)/.test(t)&&(l=t.match(/([0-9]+)/g).map((function(t){return parseFloat(t)})),s=t.match(/([a-z])/gi).join(\"\").toLowerCase());else if(isNaN(t))if(i(t)){var p=a(t.r,t.red,t.R,null);null!==p?(s=\"rgb\",l=[p,a(t.g,t.green,t.G),a(t.b,t.blue,t.B)]):(s=\"hsl\",l=[a(t.h,t.hue,t.H),a(t.s,t.saturation,t.S),a(t.l,t.lightness,t.L,t.b,t.brightness)]),c=a(t.a,t.alpha,t.opacity,1),null!=t.opacity&&(c/=100)}else(Array.isArray(t)||n.ArrayBuffer&&ArrayBuffer.isView&&ArrayBuffer.isView(t))&&(l=[t[0],t[1],t[2]],s=\"rgb\",c=4===t.length?t[3]:1);else s=\"rgb\",l=[t>>>16,(65280&t)>>>8,255&t];return{space:s,values:l,alpha:c}};var o={red:0,orange:60,yellow:120,green:180,blue:240,purple:300}}).call(this)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{\"color-name\":124,defined:170,\"is-plain-obj\":469}],127:[function(t,e,n){\"use strict\";var r=t(\"color-parse\"),i=t(\"color-space/hsl\"),a=t(\"clamp\");e.exports=function(t){var e,n=r(t);return n.space?((e=Array(3))[0]=a(n.values[0],0,255),e[1]=a(n.values[1],0,255),e[2]=a(n.values[2],0,255),\"h\"===n.space[0]&&(e=i.rgb(e)),e.push(a(n.alpha,0,1)),e):[]}},{clamp:120,\"color-parse\":126,\"color-space/hsl\":128}],128:[function(t,e,n){\"use strict\";var r=t(\"./rgb\");e.exports={name:\"hsl\",min:[0,0,0],max:[360,100,100],channel:[\"hue\",\"saturation\",\"lightness\"],alias:[\"HSL\"],rgb:function(t){var e,n,r,i,a,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0===s)return[a=255*l,a,a];e=2*l-(n=l<.5?l*(1+s):l+s-l*s),i=[0,0,0];for(var c=0;c<3;c++)(r=o+1/3*-(c-1))<0?r++:r>1&&r--,i[c]=255*(a=6*r<1?e+6*(n-e)*r:2*r<1?n:3*r<2?e+(n-e)*(2/3-r)*6:e);return i}},r.hsl=function(t){var e,n,r=t[0]/255,i=t[1]/255,a=t[2]/255,o=Math.min(r,i,a),s=Math.max(r,i,a),l=s-o;return s===o?e=0:r===s?e=(i-a)/l:i===s?e=2+(a-r)/l:a===s&&(e=4+(r-i)/l),(e=Math.min(60*e,360))<0&&(e+=360),n=(o+s)/2,[e,100*(s===o?0:n<=.5?l/(s+o):l/(2-s-o)),100*n]}},{\"./rgb\":129}],129:[function(t,e,n){\"use strict\";e.exports={name:\"rgb\",min:[0,0,0],max:[255,255,255],channel:[\"red\",\"green\",\"blue\"],alias:[\"RGB\"]}},{}],130:[function(t,e,n){e.exports={jet:[{index:0,rgb:[0,0,131]},{index:.125,rgb:[0,60,170]},{index:.375,rgb:[5,255,255]},{index:.625,rgb:[255,255,0]},{index:.875,rgb:[250,0,0]},{index:1,rgb:[128,0,0]}],hsv:[{index:0,rgb:[255,0,0]},{index:.169,rgb:[253,255,2]},{index:.173,rgb:[247,255,2]},{index:.337,rgb:[0,252,4]},{index:.341,rgb:[0,252,10]},{index:.506,rgb:[1,249,255]},{index:.671,rgb:[2,0,253]},{index:.675,rgb:[8,0,253]},{index:.839,rgb:[255,0,251]},{index:.843,rgb:[255,0,245]},{index:1,rgb:[255,0,6]}],hot:[{index:0,rgb:[0,0,0]},{index:.3,rgb:[230,0,0]},{index:.6,rgb:[255,210,0]},{index:1,rgb:[255,255,255]}],cool:[{index:0,rgb:[0,255,255]},{index:1,rgb:[255,0,255]}],spring:[{index:0,rgb:[255,0,255]},{index:1,rgb:[255,255,0]}],summer:[{index:0,rgb:[0,128,102]},{index:1,rgb:[255,255,102]}],autumn:[{index:0,rgb:[255,0,0]},{index:1,rgb:[255,255,0]}],winter:[{index:0,rgb:[0,0,255]},{index:1,rgb:[0,255,128]}],bone:[{index:0,rgb:[0,0,0]},{index:.376,rgb:[84,84,116]},{index:.753,rgb:[169,200,200]},{index:1,rgb:[255,255,255]}],copper:[{index:0,rgb:[0,0,0]},{index:.804,rgb:[255,160,102]},{index:1,rgb:[255,199,127]}],greys:[{index:0,rgb:[0,0,0]},{index:1,rgb:[255,255,255]}],yignbu:[{index:0,rgb:[8,29,88]},{index:.125,rgb:[37,52,148]},{index:.25,rgb:[34,94,168]},{index:.375,rgb:[29,145,192]},{index:.5,rgb:[65,182,196]},{index:.625,rgb:[127,205,187]},{index:.75,rgb:[199,233,180]},{index:.875,rgb:[237,248,217]},{index:1,rgb:[255,255,217]}],greens:[{index:0,rgb:[0,68,27]},{index:.125,rgb:[0,109,44]},{index:.25,rgb:[35,139,69]},{index:.375,rgb:[65,171,93]},{index:.5,rgb:[116,196,118]},{index:.625,rgb:[161,217,155]},{index:.75,rgb:[199,233,192]},{index:.875,rgb:[229,245,224]},{index:1,rgb:[247,252,245]}],yiorrd:[{index:0,rgb:[128,0,38]},{index:.125,rgb:[189,0,38]},{index:.25,rgb:[227,26,28]},{index:.375,rgb:[252,78,42]},{index:.5,rgb:[253,141,60]},{index:.625,rgb:[254,178,76]},{index:.75,rgb:[254,217,118]},{index:.875,rgb:[255,237,160]},{index:1,rgb:[255,255,204]}],bluered:[{index:0,rgb:[0,0,255]},{index:1,rgb:[255,0,0]}],rdbu:[{index:0,rgb:[5,10,172]},{index:.35,rgb:[106,137,247]},{index:.5,rgb:[190,190,190]},{index:.6,rgb:[220,170,132]},{index:.7,rgb:[230,145,90]},{index:1,rgb:[178,10,28]}],picnic:[{index:0,rgb:[0,0,255]},{index:.1,rgb:[51,153,255]},{index:.2,rgb:[102,204,255]},{index:.3,rgb:[153,204,255]},{index:.4,rgb:[204,204,255]},{index:.5,rgb:[255,255,255]},{index:.6,rgb:[255,204,255]},{index:.7,rgb:[255,153,255]},{index:.8,rgb:[255,102,204]},{index:.9,rgb:[255,102,102]},{index:1,rgb:[255,0,0]}],rainbow:[{index:0,rgb:[150,0,90]},{index:.125,rgb:[0,0,200]},{index:.25,rgb:[0,25,255]},{index:.375,rgb:[0,152,255]},{index:.5,rgb:[44,255,150]},{index:.625,rgb:[151,255,0]},{index:.75,rgb:[255,234,0]},{index:.875,rgb:[255,111,0]},{index:1,rgb:[255,0,0]}],portland:[{index:0,rgb:[12,51,131]},{index:.25,rgb:[10,136,186]},{index:.5,rgb:[242,211,56]},{index:.75,rgb:[242,143,56]},{index:1,rgb:[217,30,30]}],blackbody:[{index:0,rgb:[0,0,0]},{index:.2,rgb:[230,0,0]},{index:.4,rgb:[230,210,0]},{index:.7,rgb:[255,255,255]},{index:1,rgb:[160,200,255]}],earth:[{index:0,rgb:[0,0,130]},{index:.1,rgb:[0,180,180]},{index:.2,rgb:[40,210,40]},{index:.4,rgb:[230,230,50]},{index:.6,rgb:[120,70,20]},{index:1,rgb:[255,255,255]}],electric:[{index:0,rgb:[0,0,0]},{index:.15,rgb:[30,0,100]},{index:.4,rgb:[120,0,100]},{index:.6,rgb:[160,90,0]},{index:.8,rgb:[230,200,0]},{index:1,rgb:[255,250,220]}],alpha:[{index:0,rgb:[255,255,255,0]},{index:1,rgb:[255,255,255,1]}],viridis:[{index:0,rgb:[68,1,84]},{index:.13,rgb:[71,44,122]},{index:.25,rgb:[59,81,139]},{index:.38,rgb:[44,113,142]},{index:.5,rgb:[33,144,141]},{index:.63,rgb:[39,173,129]},{index:.75,rgb:[92,200,99]},{index:.88,rgb:[170,220,50]},{index:1,rgb:[253,231,37]}],inferno:[{index:0,rgb:[0,0,4]},{index:.13,rgb:[31,12,72]},{index:.25,rgb:[85,15,109]},{index:.38,rgb:[136,34,106]},{index:.5,rgb:[186,54,85]},{index:.63,rgb:[227,89,51]},{index:.75,rgb:[249,140,10]},{index:.88,rgb:[249,201,50]},{index:1,rgb:[252,255,164]}],magma:[{index:0,rgb:[0,0,4]},{index:.13,rgb:[28,16,68]},{index:.25,rgb:[79,18,123]},{index:.38,rgb:[129,37,129]},{index:.5,rgb:[181,54,122]},{index:.63,rgb:[229,80,100]},{index:.75,rgb:[251,135,97]},{index:.88,rgb:[254,194,135]},{index:1,rgb:[252,253,191]}],plasma:[{index:0,rgb:[13,8,135]},{index:.13,rgb:[75,3,161]},{index:.25,rgb:[125,3,168]},{index:.38,rgb:[168,34,150]},{index:.5,rgb:[203,70,121]},{index:.63,rgb:[229,107,93]},{index:.75,rgb:[248,148,65]},{index:.88,rgb:[253,195,40]},{index:1,rgb:[240,249,33]}],warm:[{index:0,rgb:[125,0,179]},{index:.13,rgb:[172,0,187]},{index:.25,rgb:[219,0,170]},{index:.38,rgb:[255,0,130]},{index:.5,rgb:[255,63,74]},{index:.63,rgb:[255,123,0]},{index:.75,rgb:[234,176,0]},{index:.88,rgb:[190,228,0]},{index:1,rgb:[147,255,0]}],cool:[{index:0,rgb:[125,0,179]},{index:.13,rgb:[116,0,218]},{index:.25,rgb:[98,74,237]},{index:.38,rgb:[68,146,231]},{index:.5,rgb:[0,204,197]},{index:.63,rgb:[0,247,146]},{index:.75,rgb:[0,255,88]},{index:.88,rgb:[40,255,8]},{index:1,rgb:[147,255,0]}],\"rainbow-soft\":[{index:0,rgb:[125,0,179]},{index:.1,rgb:[199,0,180]},{index:.2,rgb:[255,0,121]},{index:.3,rgb:[255,108,0]},{index:.4,rgb:[222,194,0]},{index:.5,rgb:[150,255,0]},{index:.6,rgb:[0,255,55]},{index:.7,rgb:[0,246,150]},{index:.8,rgb:[50,167,222]},{index:.9,rgb:[103,51,235]},{index:1,rgb:[124,0,186]}],bathymetry:[{index:0,rgb:[40,26,44]},{index:.13,rgb:[59,49,90]},{index:.25,rgb:[64,76,139]},{index:.38,rgb:[63,110,151]},{index:.5,rgb:[72,142,158]},{index:.63,rgb:[85,174,163]},{index:.75,rgb:[120,206,163]},{index:.88,rgb:[187,230,172]},{index:1,rgb:[253,254,204]}],cdom:[{index:0,rgb:[47,15,62]},{index:.13,rgb:[87,23,86]},{index:.25,rgb:[130,28,99]},{index:.38,rgb:[171,41,96]},{index:.5,rgb:[206,67,86]},{index:.63,rgb:[230,106,84]},{index:.75,rgb:[242,149,103]},{index:.88,rgb:[249,193,135]},{index:1,rgb:[254,237,176]}],chlorophyll:[{index:0,rgb:[18,36,20]},{index:.13,rgb:[25,63,41]},{index:.25,rgb:[24,91,59]},{index:.38,rgb:[13,119,72]},{index:.5,rgb:[18,148,80]},{index:.63,rgb:[80,173,89]},{index:.75,rgb:[132,196,122]},{index:.88,rgb:[175,221,162]},{index:1,rgb:[215,249,208]}],density:[{index:0,rgb:[54,14,36]},{index:.13,rgb:[89,23,80]},{index:.25,rgb:[110,45,132]},{index:.38,rgb:[120,77,178]},{index:.5,rgb:[120,113,213]},{index:.63,rgb:[115,151,228]},{index:.75,rgb:[134,185,227]},{index:.88,rgb:[177,214,227]},{index:1,rgb:[230,241,241]}],\"freesurface-blue\":[{index:0,rgb:[30,4,110]},{index:.13,rgb:[47,14,176]},{index:.25,rgb:[41,45,236]},{index:.38,rgb:[25,99,212]},{index:.5,rgb:[68,131,200]},{index:.63,rgb:[114,156,197]},{index:.75,rgb:[157,181,203]},{index:.88,rgb:[200,208,216]},{index:1,rgb:[241,237,236]}],\"freesurface-red\":[{index:0,rgb:[60,9,18]},{index:.13,rgb:[100,17,27]},{index:.25,rgb:[142,20,29]},{index:.38,rgb:[177,43,27]},{index:.5,rgb:[192,87,63]},{index:.63,rgb:[205,125,105]},{index:.75,rgb:[216,162,148]},{index:.88,rgb:[227,199,193]},{index:1,rgb:[241,237,236]}],oxygen:[{index:0,rgb:[64,5,5]},{index:.13,rgb:[106,6,15]},{index:.25,rgb:[144,26,7]},{index:.38,rgb:[168,64,3]},{index:.5,rgb:[188,100,4]},{index:.63,rgb:[206,136,11]},{index:.75,rgb:[220,174,25]},{index:.88,rgb:[231,215,44]},{index:1,rgb:[248,254,105]}],par:[{index:0,rgb:[51,20,24]},{index:.13,rgb:[90,32,35]},{index:.25,rgb:[129,44,34]},{index:.38,rgb:[159,68,25]},{index:.5,rgb:[182,99,19]},{index:.63,rgb:[199,134,22]},{index:.75,rgb:[212,171,35]},{index:.88,rgb:[221,210,54]},{index:1,rgb:[225,253,75]}],phase:[{index:0,rgb:[145,105,18]},{index:.13,rgb:[184,71,38]},{index:.25,rgb:[186,58,115]},{index:.38,rgb:[160,71,185]},{index:.5,rgb:[110,97,218]},{index:.63,rgb:[50,123,164]},{index:.75,rgb:[31,131,110]},{index:.88,rgb:[77,129,34]},{index:1,rgb:[145,105,18]}],salinity:[{index:0,rgb:[42,24,108]},{index:.13,rgb:[33,50,162]},{index:.25,rgb:[15,90,145]},{index:.38,rgb:[40,118,137]},{index:.5,rgb:[59,146,135]},{index:.63,rgb:[79,175,126]},{index:.75,rgb:[120,203,104]},{index:.88,rgb:[193,221,100]},{index:1,rgb:[253,239,154]}],temperature:[{index:0,rgb:[4,35,51]},{index:.13,rgb:[23,51,122]},{index:.25,rgb:[85,59,157]},{index:.38,rgb:[129,79,143]},{index:.5,rgb:[175,95,130]},{index:.63,rgb:[222,112,101]},{index:.75,rgb:[249,146,66]},{index:.88,rgb:[249,196,65]},{index:1,rgb:[232,250,91]}],turbidity:[{index:0,rgb:[34,31,27]},{index:.13,rgb:[65,50,41]},{index:.25,rgb:[98,69,52]},{index:.38,rgb:[131,89,57]},{index:.5,rgb:[161,112,59]},{index:.63,rgb:[185,140,66]},{index:.75,rgb:[202,174,88]},{index:.88,rgb:[216,209,126]},{index:1,rgb:[233,246,171]}],\"velocity-blue\":[{index:0,rgb:[17,32,64]},{index:.13,rgb:[35,52,116]},{index:.25,rgb:[29,81,156]},{index:.38,rgb:[31,113,162]},{index:.5,rgb:[50,144,169]},{index:.63,rgb:[87,173,176]},{index:.75,rgb:[149,196,189]},{index:.88,rgb:[203,221,211]},{index:1,rgb:[254,251,230]}],\"velocity-green\":[{index:0,rgb:[23,35,19]},{index:.13,rgb:[24,64,38]},{index:.25,rgb:[11,95,45]},{index:.38,rgb:[39,123,35]},{index:.5,rgb:[95,146,12]},{index:.63,rgb:[152,165,18]},{index:.75,rgb:[201,186,69]},{index:.88,rgb:[233,216,137]},{index:1,rgb:[255,253,205]}],cubehelix:[{index:0,rgb:[0,0,0]},{index:.07,rgb:[22,5,59]},{index:.13,rgb:[60,4,105]},{index:.2,rgb:[109,1,135]},{index:.27,rgb:[161,0,147]},{index:.33,rgb:[210,2,142]},{index:.4,rgb:[251,11,123]},{index:.47,rgb:[255,29,97]},{index:.53,rgb:[255,54,69]},{index:.6,rgb:[255,85,46]},{index:.67,rgb:[255,120,34]},{index:.73,rgb:[255,157,37]},{index:.8,rgb:[241,191,57]},{index:.87,rgb:[224,220,93]},{index:.93,rgb:[218,241,142]},{index:1,rgb:[227,253,198]}]}},{}],131:[function(t,e,n){\"use strict\";var r=t(\"./colorScale\"),i=t(\"lerp\");function a(t){return[t[0]/255,t[1]/255,t[2]/255,t[3]]}function o(t){for(var e,n=\"#\",r=0;r<3;++r)n+=(\"00\"+(e=(e=t[r]).toString(16))).substr(e.length);return n}function s(t){return\"rgba(\"+t.join(\",\")+\")\"}e.exports=function(t){var e,n,l,c,u,h,d,f,p,m;if(t||(t={}),f=(t.nshades||72)-1,d=t.format||\"hex\",(h=t.colormap)||(h=\"jet\"),\"string\"==typeof h){if(h=h.toLowerCase(),!r[h])throw Error(h+\" not a supported colorscale\");u=r[h]}else{if(!Array.isArray(h))throw Error(\"unsupported colormap option\",h);u=h.slice()}if(u.length>f+1)throw new Error(h+\" map requires nshades to be at least size \"+u.length);p=Array.isArray(t.alpha)?2!==t.alpha.length?[1,1]:t.alpha.slice():\"number\"==typeof t.alpha?[t.alpha,t.alpha]:[1,1],e=u.map((function(t){return Math.round(t.index*f)})),p[0]=Math.min(Math.max(p[0],0),1),p[1]=Math.min(Math.max(p[1],0),1);var g=u.map((function(t,e){var n=u[e].index,r=u[e].rgb.slice();return 4===r.length&&r[3]>=0&&r[3]<=1||(r[3]=p[0]+(p[1]-p[0])*n),r})),y=[];for(m=0;m<e.length-1;++m){c=e[m+1]-e[m],n=g[m],l=g[m+1];for(var v=0;v<c;v++){var _=v/c;y.push([Math.round(i(n[0],l[0],_)),Math.round(i(n[1],l[1],_)),Math.round(i(n[2],l[2],_)),i(n[3],l[3],_)])}}return y.push(u[u.length-1].rgb.concat(p[1])),\"hex\"===d?y=y.map(o):\"rgbaString\"===d?y=y.map(s):\"float\"===d&&(y=y.map(a)),y}},{\"./colorScale\":130,lerp:472}],132:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,a){var o=r(e,n,a);if(0===o){var s=i(r(t,e,n)),c=i(r(t,e,a));if(s===c){if(0===s){var u=l(t,e,n);return u===l(t,e,a)?0:u?1:-1}return 0}return 0===c?s>0||l(t,e,a)?-1:1:0===s?c>0||l(t,e,n)?1:-1:i(c-s)}var h=r(t,e,n);return h>0?o>0&&r(t,e,a)>0?1:-1:h<0?o>0||r(t,e,a)>0?1:-1:r(t,e,a)>0||l(t,e,n)?1:-1};var r=t(\"robust-orientation\"),i=t(\"signum\"),a=t(\"two-sum\"),o=t(\"robust-product\"),s=t(\"robust-sum\");function l(t,e,n){var r=a(t[0],-e[0]),i=a(t[1],-e[1]),l=a(n[0],-e[0]),c=a(n[1],-e[1]),u=s(o(r,l),o(i,c));return u[u.length-1]>=0}},{\"robust-orientation\":548,\"robust-product\":549,\"robust-sum\":553,signum:554,\"two-sum\":583}],133:[function(t,e,n){e.exports=function(t,e){var n=t.length,a=t.length-e.length;if(a)return a;switch(n){case 0:return 0;case 1:return t[0]-e[0];case 2:return t[0]+t[1]-e[0]-e[1]||r(t[0],t[1])-r(e[0],e[1]);case 3:var o=t[0]+t[1],s=e[0]+e[1];if(a=o+t[2]-(s+e[2]))return a;var l=r(t[0],t[1]),c=r(e[0],e[1]);return r(l,t[2])-r(c,e[2])||r(l+t[2],o)-r(c+e[2],s);case 4:var u=t[0],h=t[1],d=t[2],f=t[3],p=e[0],m=e[1],g=e[2],y=e[3];return u+h+d+f-(p+m+g+y)||r(u,h,d,f)-r(p,m,g,y,p)||r(u+h,u+d,u+f,h+d,h+f,d+f)-r(p+m,p+g,p+y,m+g,m+y,g+y)||r(u+h+d,u+h+f,u+d+f,h+d+f)-r(p+m+g,p+m+y,p+g+y,m+g+y);default:for(var v=t.slice().sort(i),_=e.slice().sort(i),b=0;b<n;++b)if(a=v[b]-_[b])return a;return 0}};var r=Math.min;function i(t,e){return t-e}},{}],134:[function(t,e,n){\"use strict\";var r=t(\"compare-cell\"),i=t(\"cell-orientation\");e.exports=function(t,e){return r(t,e)||i(t)-i(e)}},{\"cell-orientation\":117,\"compare-cell\":133}],135:[function(t,e,n){\"use strict\";var r=t(\"./lib/ch1d\"),i=t(\"./lib/ch2d\"),a=t(\"./lib/chnd\");e.exports=function(t){var e=t.length;if(0===e)return[];if(1===e)return[[0]];var n=t[0].length;return 0===n?[]:1===n?r(t):2===n?i(t):a(t,n)}},{\"./lib/ch1d\":136,\"./lib/ch2d\":137,\"./lib/chnd\":138}],136:[function(t,e,n){\"use strict\";e.exports=function(t){for(var e=0,n=0,r=1;r<t.length;++r)t[r][0]<t[e][0]&&(e=r),t[r][0]>t[n][0]&&(n=r);return e<n?[[e],[n]]:e>n?[[n],[e]]:[[e]]}},{}],137:[function(t,e,n){\"use strict\";e.exports=function(t){var e=r(t),n=e.length;if(n<=2)return[];for(var i=new Array(n),a=e[n-1],o=0;o<n;++o){var s=e[o];i[o]=[a,s],a=s}return i};var r=t(\"monotone-convex-hull-2d\")},{\"monotone-convex-hull-2d\":482}],138:[function(t,e,n){\"use strict\";e.exports=function(t,e){try{return r(t,!0)}catch(o){var n=i(t);if(n.length<=e)return[];var a=function(t,e){for(var n=t.length,r=new Array(n),i=0;i<e.length;++i)r[i]=t[e[i]];var a=e.length;for(i=0;i<n;++i)e.indexOf(i)<0&&(r[a++]=t[i]);return r}(t,n);return function(t,e){for(var n=t.length,r=e.length,i=0;i<n;++i)for(var a=t[i],o=0;o<a.length;++o){var s=a[o];if(s<r)a[o]=e[s];else{s-=r;for(var l=0;l<r;++l)s>=e[l]&&(s+=1);a[o]=s}}return t}(r(a,!0),n)}};var r=t(\"incremental-convex-hull\"),i=t(\"affine-hull\")},{\"affine-hull\":67,\"incremental-convex-hull\":459}],139:[function(t,e,n){e.exports={AFG:\"afghan\",ALA:\"\\\\b\\\\wland\",ALB:\"albania\",DZA:\"algeria\",ASM:\"^(?=.*americ).*samoa\",AND:\"andorra\",AGO:\"angola\",AIA:\"anguill?a\",ATA:\"antarctica\",ATG:\"antigua\",ARG:\"argentin\",ARM:\"armenia\",ABW:\"^(?!.*bonaire).*\\\\baruba\",AUS:\"australia\",AUT:\"^(?!.*hungary).*austria|\\\\baustri.*\\\\bemp\",AZE:\"azerbaijan\",BHS:\"bahamas\",BHR:\"bahrain\",BGD:\"bangladesh|^(?=.*east).*paki?stan\",BRB:\"barbados\",BLR:\"belarus|byelo\",BEL:\"^(?!.*luxem).*belgium\",BLZ:\"belize|^(?=.*british).*honduras\",BEN:\"benin|dahome\",BMU:\"bermuda\",BTN:\"bhutan\",BOL:\"bolivia\",BES:\"^(?=.*bonaire).*eustatius|^(?=.*carib).*netherlands|\\\\bbes.?islands\",BIH:\"herzegovina|bosnia\",BWA:\"botswana|bechuana\",BVT:\"bouvet\",BRA:\"brazil\",IOT:\"british.?indian.?ocean\",BRN:\"brunei\",BGR:\"bulgaria\",BFA:\"burkina|\\\\bfaso|upper.?volta\",BDI:\"burundi\",CPV:\"verde\",KHM:\"cambodia|kampuchea|khmer\",CMR:\"cameroon\",CAN:\"canada\",CYM:\"cayman\",CAF:\"\\\\bcentral.african.republic\",TCD:\"\\\\bchad\",CHL:\"\\\\bchile\",CHN:\"^(?!.*\\\\bmac)(?!.*\\\\bhong)(?!.*\\\\btai)(?!.*\\\\brep).*china|^(?=.*peo)(?=.*rep).*china\",CXR:\"christmas\",CCK:\"\\\\bcocos|keeling\",COL:\"colombia\",COM:\"comoro\",COG:\"^(?!.*\\\\bdem)(?!.*\\\\bd[\\\\.]?r)(?!.*kinshasa)(?!.*zaire)(?!.*belg)(?!.*l.opoldville)(?!.*free).*\\\\bcongo\",COK:\"\\\\bcook\",CRI:\"costa.?rica\",CIV:\"ivoire|ivory\",HRV:\"croatia\",CUB:\"\\\\bcuba\",CUW:\"^(?!.*bonaire).*\\\\bcura(c|\\xe7)ao\",CYP:\"cyprus\",CSK:\"czechoslovakia\",CZE:\"^(?=.*rep).*czech|czechia|bohemia\",COD:\"\\\\bdem.*congo|congo.*\\\\bdem|congo.*\\\\bd[\\\\.]?r|\\\\bd[\\\\.]?r.*congo|belgian.?congo|congo.?free.?state|kinshasa|zaire|l.opoldville|drc|droc|rdc\",DNK:\"denmark\",DJI:\"djibouti\",DMA:\"dominica(?!n)\",DOM:\"dominican.rep\",ECU:\"ecuador\",EGY:\"egypt\",SLV:\"el.?salvador\",GNQ:\"guine.*eq|eq.*guine|^(?=.*span).*guinea\",ERI:\"eritrea\",EST:\"estonia\",ETH:\"ethiopia|abyssinia\",FLK:\"falkland|malvinas\",FRO:\"faroe|faeroe\",FJI:\"fiji\",FIN:\"finland\",FRA:\"^(?!.*\\\\bdep)(?!.*martinique).*france|french.?republic|\\\\bgaul\",GUF:\"^(?=.*french).*guiana\",PYF:\"french.?polynesia|tahiti\",ATF:\"french.?southern\",GAB:\"gabon\",GMB:\"gambia\",GEO:\"^(?!.*south).*georgia\",DDR:\"german.?democratic.?republic|democratic.?republic.*germany|east.germany\",DEU:\"^(?!.*east).*germany|^(?=.*\\\\bfed.*\\\\brep).*german\",GHA:\"ghana|gold.?coast\",GIB:\"gibraltar\",GRC:\"greece|hellenic|hellas\",GRL:\"greenland\",GRD:\"grenada\",GLP:\"guadeloupe\",GUM:\"\\\\bguam\",GTM:\"guatemala\",GGY:\"guernsey\",GIN:\"^(?!.*eq)(?!.*span)(?!.*bissau)(?!.*portu)(?!.*new).*guinea\",GNB:\"bissau|^(?=.*portu).*guinea\",GUY:\"guyana|british.?guiana\",HTI:\"haiti\",HMD:\"heard.*mcdonald\",VAT:\"holy.?see|vatican|papal.?st\",HND:\"^(?!.*brit).*honduras\",HKG:\"hong.?kong\",HUN:\"^(?!.*austr).*hungary\",ISL:\"iceland\",IND:\"india(?!.*ocea)\",IDN:\"indonesia\",IRN:\"\\\\biran|persia\",IRQ:\"\\\\biraq|mesopotamia\",IRL:\"(^ireland)|(^republic.*ireland)\",IMN:\"^(?=.*isle).*\\\\bman\",ISR:\"israel\",ITA:\"italy\",JAM:\"jamaica\",JPN:\"japan\",JEY:\"jersey\",JOR:\"jordan\",KAZ:\"kazak\",KEN:\"kenya|british.?east.?africa|east.?africa.?prot\",KIR:\"kiribati\",PRK:\"^(?=.*democrat|people|north|d.*p.*.r).*\\\\bkorea|dprk|korea.*(d.*p.*r)\",KWT:\"kuwait\",KGZ:\"kyrgyz|kirghiz\",LAO:\"\\\\blaos?\\\\b\",LVA:\"latvia\",LBN:\"lebanon\",LSO:\"lesotho|basuto\",LBR:\"liberia\",LBY:\"libya\",LIE:\"liechtenstein\",LTU:\"lithuania\",LUX:\"^(?!.*belg).*luxem\",MAC:\"maca(o|u)\",MDG:\"madagascar|malagasy\",MWI:\"malawi|nyasa\",MYS:\"malaysia\",MDV:\"maldive\",MLI:\"\\\\bmali\\\\b\",MLT:\"\\\\bmalta\",MHL:\"marshall\",MTQ:\"martinique\",MRT:\"mauritania\",MUS:\"mauritius\",MYT:\"\\\\bmayotte\",MEX:\"\\\\bmexic\",FSM:\"fed.*micronesia|micronesia.*fed\",MCO:\"monaco\",MNG:\"mongolia\",MNE:\"^(?!.*serbia).*montenegro\",MSR:\"montserrat\",MAR:\"morocco|\\\\bmaroc\",MOZ:\"mozambique\",MMR:\"myanmar|burma\",NAM:\"namibia\",NRU:\"nauru\",NPL:\"nepal\",NLD:\"^(?!.*\\\\bant)(?!.*\\\\bcarib).*netherlands\",ANT:\"^(?=.*\\\\bant).*(nether|dutch)\",NCL:\"new.?caledonia\",NZL:\"new.?zealand\",NIC:\"nicaragua\",NER:\"\\\\bniger(?!ia)\",NGA:\"nigeria\",NIU:\"niue\",NFK:\"norfolk\",MNP:\"mariana\",NOR:\"norway\",OMN:\"\\\\boman|trucial\",PAK:\"^(?!.*east).*paki?stan\",PLW:\"palau\",PSE:\"palestin|\\\\bgaza|west.?bank\",PAN:\"panama\",PNG:\"papua|new.?guinea\",PRY:\"paraguay\",PER:\"peru\",PHL:\"philippines\",PCN:\"pitcairn\",POL:\"poland\",PRT:\"portugal\",PRI:\"puerto.?rico\",QAT:\"qatar\",KOR:\"^(?!.*d.*p.*r)(?!.*democrat)(?!.*people)(?!.*north).*\\\\bkorea(?!.*d.*p.*r)\",MDA:\"moldov|b(a|e)ssarabia\",REU:\"r(e|\\xe9)union\",ROU:\"r(o|u|ou)mania\",RUS:\"\\\\brussia|soviet.?union|u\\\\.?s\\\\.?s\\\\.?r|socialist.?republics\",RWA:\"rwanda\",BLM:\"barth(e|\\xe9)lemy\",SHN:\"helena\",KNA:\"kitts|\\\\bnevis\",LCA:\"\\\\blucia\",MAF:\"^(?=.*collectivity).*martin|^(?=.*france).*martin(?!ique)|^(?=.*french).*martin(?!ique)\",SPM:\"miquelon\",VCT:\"vincent\",WSM:\"^(?!.*amer).*samoa\",SMR:\"san.?marino\",STP:\"\\\\bs(a|\\xe3)o.?tom(e|\\xe9)\",SAU:\"\\\\bsa\\\\w*.?arabia\",SEN:\"senegal\",SRB:\"^(?!.*monte).*serbia\",SYC:\"seychell\",SLE:\"sierra\",SGP:\"singapore\",SXM:\"^(?!.*martin)(?!.*saba).*maarten\",SVK:\"^(?!.*cze).*slovak\",SVN:\"slovenia\",SLB:\"solomon\",SOM:\"somali\",ZAF:\"south.africa|s\\\\\\\\..?africa\",SGS:\"south.?georgia|sandwich\",SSD:\"\\\\bs\\\\w*.?sudan\",ESP:\"spain\",LKA:\"sri.?lanka|ceylon\",SDN:\"^(?!.*\\\\bs(?!u)).*sudan\",SUR:\"surinam|dutch.?guiana\",SJM:\"svalbard\",SWZ:\"swaziland\",SWE:\"sweden\",CHE:\"switz|swiss\",SYR:\"syria\",TWN:\"taiwan|taipei|formosa|^(?!.*peo)(?=.*rep).*china\",TJK:\"tajik\",THA:\"thailand|\\\\bsiam\",MKD:\"macedonia|fyrom\",TLS:\"^(?=.*leste).*timor|^(?=.*east).*timor\",TGO:\"togo\",TKL:\"tokelau\",TON:\"tonga\",TTO:\"trinidad|tobago\",TUN:\"tunisia\",TUR:\"turkey\",TKM:\"turkmen\",TCA:\"turks\",TUV:\"tuvalu\",UGA:\"uganda\",UKR:\"ukrain\",ARE:\"emirates|^u\\\\.?a\\\\.?e\\\\.?$|united.?arab.?em\",GBR:\"united.?kingdom|britain|^u\\\\.?k\\\\.?$\",TZA:\"tanzania\",USA:\"united.?states\\\\b(?!.*islands)|\\\\bu\\\\.?s\\\\.?a\\\\.?\\\\b|^\\\\s*u\\\\.?s\\\\.?\\\\b(?!.*islands)\",UMI:\"minor.?outlying.?is\",URY:\"uruguay\",UZB:\"uzbek\",VUT:\"vanuatu|new.?hebrides\",VEN:\"venezuela\",VNM:\"^(?!.*republic).*viet.?nam|^(?=.*socialist).*viet.?nam\",VGB:\"^(?=.*\\\\bu\\\\.?\\\\s?k).*virgin|^(?=.*brit).*virgin|^(?=.*kingdom).*virgin\",VIR:\"^(?=.*\\\\bu\\\\.?\\\\s?s).*virgin|^(?=.*states).*virgin\",WLF:\"futuna|wallis\",ESH:\"western.sahara\",YEM:\"^(?!.*arab)(?!.*north)(?!.*sana)(?!.*peo)(?!.*dem)(?!.*south)(?!.*aden)(?!.*\\\\bp\\\\.?d\\\\.?r).*yemen\",YMD:\"^(?=.*peo).*yemen|^(?!.*rep)(?=.*dem).*yemen|^(?=.*south).*yemen|^(?=.*aden).*yemen|^(?=.*\\\\bp\\\\.?d\\\\.?r).*yemen\",YUG:\"yugoslavia\",ZMB:\"zambia|northern.?rhodesia\",EAZ:\"zanzibar\",ZWE:\"zimbabwe|^(?!.*northern).*rhodesia\"}},{}],140:[function(t,e,n){e.exports=[\"xx-small\",\"x-small\",\"small\",\"medium\",\"large\",\"x-large\",\"xx-large\",\"larger\",\"smaller\"]},{}],141:[function(t,e,n){e.exports=[\"normal\",\"condensed\",\"semi-condensed\",\"extra-condensed\",\"ultra-condensed\",\"expanded\",\"semi-expanded\",\"extra-expanded\",\"ultra-expanded\"]},{}],142:[function(t,e,n){e.exports=[\"normal\",\"italic\",\"oblique\"]},{}],143:[function(t,e,n){e.exports=[\"normal\",\"bold\",\"bolder\",\"lighter\",\"100\",\"200\",\"300\",\"400\",\"500\",\"600\",\"700\",\"800\",\"900\"]},{}],144:[function(t,e,n){\"use strict\";e.exports={parse:t(\"./parse\"),stringify:t(\"./stringify\")}},{\"./parse\":146,\"./stringify\":147}],145:[function(t,e,n){\"use strict\";var r=t(\"css-font-size-keywords\");e.exports={isSize:function(t){return/^[\\d\\.]/.test(t)||-1!==t.indexOf(\"/\")||-1!==r.indexOf(t)}}},{\"css-font-size-keywords\":140}],146:[function(t,e,n){\"use strict\";var r=t(\"unquote\"),i=t(\"css-global-keywords\"),a=t(\"css-system-font-keywords\"),o=t(\"css-font-weight-keywords\"),s=t(\"css-font-style-keywords\"),l=t(\"css-font-stretch-keywords\"),c=t(\"string-split-by\"),u=t(\"./lib/util\").isSize;e.exports=d;var h=d.cache={};function d(t){if(\"string\"!=typeof t)throw new Error(\"Font argument must be a string.\");if(h[t])return h[t];if(\"\"===t)throw new Error(\"Cannot parse an empty string.\");if(-1!==a.indexOf(t))return h[t]={system:t};for(var e,n={style:\"normal\",variant:\"normal\",weight:\"normal\",stretch:\"normal\",lineHeight:\"normal\",size:\"1rem\",family:[\"serif\"]},d=c(t,/\\s+/);e=d.shift();){if(-1!==i.indexOf(e))return[\"style\",\"variant\",\"weight\",\"stretch\"].forEach((function(t){n[t]=e})),h[t]=n;if(-1===s.indexOf(e))if(\"normal\"!==e&&\"small-caps\"!==e)if(-1===l.indexOf(e)){if(-1===o.indexOf(e)){if(u(e)){var p=c(e,\"/\");if(n.size=p[0],null!=p[1]?n.lineHeight=f(p[1]):\"/\"===d[0]&&(d.shift(),n.lineHeight=f(d.shift())),!d.length)throw new Error(\"Missing required font-family.\");return n.family=c(d.join(\" \"),/\\s*,\\s*/).map(r),h[t]=n}throw new Error(\"Unknown or unsupported font token: \"+e)}n.weight=e}else n.stretch=e;else n.variant=e;else n.style=e}throw new Error(\"Missing required font-size.\")}function f(t){var e=parseFloat(t);return e.toString()===t?e:t}},{\"./lib/util\":145,\"css-font-stretch-keywords\":141,\"css-font-style-keywords\":142,\"css-font-weight-keywords\":143,\"css-global-keywords\":148,\"css-system-font-keywords\":149,\"string-split-by\":568,unquote:598}],147:[function(t,e,n){\"use strict\";var r=t(\"pick-by-alias\"),i=t(\"./lib/util\").isSize,a=p(t(\"css-global-keywords\")),o=p(t(\"css-system-font-keywords\")),s=p(t(\"css-font-weight-keywords\")),l=p(t(\"css-font-style-keywords\")),c=p(t(\"css-font-stretch-keywords\")),u={normal:1,\"small-caps\":1},h={serif:1,\"sans-serif\":1,monospace:1,cursive:1,fantasy:1,\"system-ui\":1},d=\"serif\";function f(t,e){if(t&&!e[t]&&!a[t])throw Error(\"Unknown keyword `\"+t+\"`\");return t}function p(t){for(var e={},n=0;n<t.length;n++)e[t[n]]=1;return e}e.exports=function(t){if((t=r(t,{style:\"style fontstyle fontStyle font-style slope distinction\",variant:\"variant font-variant fontVariant fontvariant var capitalization\",weight:\"weight w font-weight fontWeight fontweight\",stretch:\"stretch font-stretch fontStretch fontstretch width\",size:\"size s font-size fontSize fontsize height em emSize\",lineHeight:\"lh line-height lineHeight lineheight leading\",family:\"font family fontFamily font-family fontfamily type typeface face\",system:\"system reserved default global\"})).system)return t.system&&f(t.system,o),t.system;if(f(t.style,l),f(t.variant,u),f(t.weight,s),f(t.stretch,c),null==t.size&&(t.size=\"1rem\"),\"number\"==typeof t.size&&(t.size+=\"px\"),!i)throw Error(\"Bad size value `\"+t.size+\"`\");t.family||(t.family=d),Array.isArray(t.family)&&(t.family.length||(t.family=[d]),t.family=t.family.map((function(t){return h[t]?t:'\"'+t+'\"'})).join(\", \"));var e=[];return e.push(t.style),t.variant!==t.style&&e.push(t.variant),t.weight!==t.variant&&t.weight!==t.style&&e.push(t.weight),t.stretch!==t.weight&&t.stretch!==t.variant&&t.stretch!==t.style&&e.push(t.stretch),e.push(t.size+(null==t.lineHeight||\"normal\"===t.lineHeight||t.lineHeight+\"\"==\"1\"?\"\":\"/\"+t.lineHeight)),e.push(t.family),e.filter(Boolean).join(\" \")}},{\"./lib/util\":145,\"css-font-stretch-keywords\":141,\"css-font-style-keywords\":142,\"css-font-weight-keywords\":143,\"css-global-keywords\":148,\"css-system-font-keywords\":149,\"pick-by-alias\":511}],148:[function(t,e,n){e.exports=[\"inherit\",\"initial\",\"unset\"]},{}],149:[function(t,e,n){e.exports=[\"caption\",\"icon\",\"menu\",\"message-box\",\"small-caption\",\"status-bar\"]},{}],150:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,r,i,a){var o=i-1,s=i*i,l=o*o,c=(1+2*i)*l,u=i*l,h=s*(3-2*i),d=s*o;if(t.length){a||(a=new Array(t.length));for(var f=t.length-1;f>=0;--f)a[f]=c*t[f]+u*e[f]+h*n[f]+d*r[f];return a}return c*t+u*e+h*n+d*r},e.exports.derivative=function(t,e,n,r,i,a){var o=6*i*i-6*i,s=3*i*i-4*i+1,l=-6*i*i+6*i,c=3*i*i-2*i;if(t.length){a||(a=new Array(t.length));for(var u=t.length-1;u>=0;--u)a[u]=o*t[u]+s*e[u]+l*n[u]+c*r[u];return a}return o*t+s*e+l*n[u]+c*r}},{}],151:[function(t,e,n){\"use strict\";var r=t(\"./lib/thunk.js\");function i(){this.argTypes=[],this.shimArgs=[],this.arrayArgs=[],this.arrayBlockIndices=[],this.scalarArgs=[],this.offsetArgs=[],this.offsetArgIndex=[],this.indexArgs=[],this.shapeArgs=[],this.funcName=\"\",this.pre=null,this.body=null,this.post=null,this.debug=!1}e.exports=function(t){var e=new i;e.pre=t.pre,e.body=t.body,e.post=t.post;var n=t.args.slice(0);e.argTypes=n;for(var a=0;a<n.length;++a){var o=n[a];if(\"array\"===o||\"object\"==typeof o&&o.blockIndices){if(e.argTypes[a]=\"array\",e.arrayArgs.push(a),e.arrayBlockIndices.push(o.blockIndices?o.blockIndices:0),e.shimArgs.push(\"array\"+a),a<e.pre.args.length&&e.pre.args[a].count>0)throw new Error(\"cwise: pre() block may not reference array args\");if(a<e.post.args.length&&e.post.args[a].count>0)throw new Error(\"cwise: post() block may not reference array args\")}else if(\"scalar\"===o)e.scalarArgs.push(a),e.shimArgs.push(\"scalar\"+a);else if(\"index\"===o){if(e.indexArgs.push(a),a<e.pre.args.length&&e.pre.args[a].count>0)throw new Error(\"cwise: pre() block may not reference array index\");if(a<e.body.args.length&&e.body.args[a].lvalue)throw new Error(\"cwise: body() block may not write to array index\");if(a<e.post.args.length&&e.post.args[a].count>0)throw new Error(\"cwise: post() block may not reference array index\")}else if(\"shape\"===o){if(e.shapeArgs.push(a),a<e.pre.args.length&&e.pre.args[a].lvalue)throw new Error(\"cwise: pre() block may not write to array shape\");if(a<e.body.args.length&&e.body.args[a].lvalue)throw new Error(\"cwise: body() block may not write to array shape\");if(a<e.post.args.length&&e.post.args[a].lvalue)throw new Error(\"cwise: post() block may not write to array shape\")}else{if(\"object\"!=typeof o||!o.offset)throw new Error(\"cwise: Unknown argument type \"+n[a]);e.argTypes[a]=\"offset\",e.offsetArgs.push({array:o.array,offset:o.offset}),e.offsetArgIndex.push(a)}}if(e.arrayArgs.length<=0)throw new Error(\"cwise: No array arguments specified\");if(e.pre.args.length>n.length)throw new Error(\"cwise: Too many arguments in pre() block\");if(e.body.args.length>n.length)throw new Error(\"cwise: Too many arguments in body() block\");if(e.post.args.length>n.length)throw new Error(\"cwise: Too many arguments in post() block\");return e.debug=!!t.printCode||!!t.debug,e.funcName=t.funcName||\"cwise\",e.blockSize=t.blockSize||64,r(e)}},{\"./lib/thunk.js\":153}],152:[function(t,e,n){\"use strict\";var r=t(\"uniq\");function i(t,e,n){var r,i,a=t.length,o=e.arrayArgs.length,s=e.indexArgs.length>0,l=[],c=[],u=0,h=0;for(r=0;r<a;++r)c.push([\"i\",r,\"=0\"].join(\"\"));for(i=0;i<o;++i)for(r=0;r<a;++r)h=u,u=t[r],c.push(0===r?[\"d\",i,\"s\",r,\"=t\",i,\"p\",u].join(\"\"):[\"d\",i,\"s\",r,\"=(t\",i,\"p\",u,\"-s\",h,\"*t\",i,\"p\",h,\")\"].join(\"\"));for(c.length>0&&l.push(\"var \"+c.join(\",\")),r=a-1;r>=0;--r)l.push([\"for(i\",r,\"=0;i\",r,\"<s\",u=t[r],\";++i\",r,\"){\"].join(\"\"));for(l.push(n),r=0;r<a;++r){for(h=u,u=t[r],i=0;i<o;++i)l.push([\"p\",i,\"+=d\",i,\"s\",r].join(\"\"));s&&(r>0&&l.push([\"index[\",h,\"]-=s\",h].join(\"\")),l.push([\"++index[\",u,\"]\"].join(\"\"))),l.push(\"}\")}return l.join(\"\\n\")}function a(t,e,n){for(var r=t.body,i=[],a=[],o=0;o<t.args.length;++o){var s=t.args[o];if(!(s.count<=0)){var l=new RegExp(s.name,\"g\"),c=\"\",u=e.arrayArgs.indexOf(o);switch(e.argTypes[o]){case\"offset\":var h=e.offsetArgIndex.indexOf(o);u=e.offsetArgs[h].array,c=\"+q\"+h;case\"array\":c=\"p\"+u+c;var d=\"l\"+o,f=\"a\"+u;if(0===e.arrayBlockIndices[u])1===s.count?\"generic\"===n[u]?s.lvalue?(i.push([\"var \",d,\"=\",f,\".get(\",c,\")\"].join(\"\")),r=r.replace(l,d),a.push([f,\".set(\",c,\",\",d,\")\"].join(\"\"))):r=r.replace(l,[f,\".get(\",c,\")\"].join(\"\")):r=r.replace(l,[f,\"[\",c,\"]\"].join(\"\")):\"generic\"===n[u]?(i.push([\"var \",d,\"=\",f,\".get(\",c,\")\"].join(\"\")),r=r.replace(l,d),s.lvalue&&a.push([f,\".set(\",c,\",\",d,\")\"].join(\"\"))):(i.push([\"var \",d,\"=\",f,\"[\",c,\"]\"].join(\"\")),r=r.replace(l,d),s.lvalue&&a.push([f,\"[\",c,\"]=\",d].join(\"\")));else{for(var p=[s.name],m=[c],g=0;g<Math.abs(e.arrayBlockIndices[u]);g++)p.push(\"\\\\s*\\\\[([^\\\\]]+)\\\\]\"),m.push(\"$\"+(g+1)+\"*t\"+u+\"b\"+g);if(l=new RegExp(p.join(\"\"),\"g\"),c=m.join(\"+\"),\"generic\"===n[u])throw new Error(\"cwise: Generic arrays not supported in combination with blocks!\");r=r.replace(l,[f,\"[\",c,\"]\"].join(\"\"))}break;case\"scalar\":r=r.replace(l,\"Y\"+e.scalarArgs.indexOf(o));break;case\"index\":r=r.replace(l,\"index\");break;case\"shape\":r=r.replace(l,\"shape\")}}}return[i.join(\"\\n\"),r,a.join(\"\\n\")].join(\"\\n\").trim()}function o(t){for(var e=new Array(t.length),n=!0,r=0;r<t.length;++r){var i=t[r],a=i.match(/\\d+/);a=a?a[0]:\"\",e[r]=0===i.charAt(0)?\"u\"+i.charAt(1)+a:i.charAt(0)+a,r>0&&(n=n&&e[r]===e[r-1])}return n?e[0]:e.join(\"\")}e.exports=function(t,e){for(var n=e[1].length-Math.abs(t.arrayBlockIndices[0])|0,s=new Array(t.arrayArgs.length),l=new Array(t.arrayArgs.length),c=0;c<t.arrayArgs.length;++c)l[c]=e[2*c],s[c]=e[2*c+1];var u=[],h=[],d=[],f=[],p=[];for(c=0;c<t.arrayArgs.length;++c){t.arrayBlockIndices[c]<0?(d.push(0),f.push(n),u.push(n),h.push(n+t.arrayBlockIndices[c])):(d.push(t.arrayBlockIndices[c]),f.push(t.arrayBlockIndices[c]+n),u.push(0),h.push(t.arrayBlockIndices[c]));for(var m=[],g=0;g<s[c].length;g++)d[c]<=s[c][g]&&s[c][g]<f[c]&&m.push(s[c][g]-d[c]);p.push(m)}var y=[\"SS\"],v=[\"'use strict'\"],_=[];for(g=0;g<n;++g)_.push([\"s\",g,\"=SS[\",g,\"]\"].join(\"\"));for(c=0;c<t.arrayArgs.length;++c){for(y.push(\"a\"+c),y.push(\"t\"+c),y.push(\"p\"+c),g=0;g<n;++g)_.push([\"t\",c,\"p\",g,\"=t\",c,\"[\",d[c]+g,\"]\"].join(\"\"));for(g=0;g<Math.abs(t.arrayBlockIndices[c]);++g)_.push([\"t\",c,\"b\",g,\"=t\",c,\"[\",u[c]+g,\"]\"].join(\"\"))}for(c=0;c<t.scalarArgs.length;++c)y.push(\"Y\"+c);if(t.shapeArgs.length>0&&_.push(\"shape=SS.slice(0)\"),t.indexArgs.length>0){var b=new Array(n);for(c=0;c<n;++c)b[c]=\"0\";_.push([\"index=[\",b.join(\",\"),\"]\"].join(\"\"))}for(c=0;c<t.offsetArgs.length;++c){var x=t.offsetArgs[c],w=[];for(g=0;g<x.offset.length;++g)0!==x.offset[g]&&w.push(1===x.offset[g]?[\"t\",x.array,\"p\",g].join(\"\"):[x.offset[g],\"*t\",x.array,\"p\",g].join(\"\"));_.push(0===w.length?\"q\"+c+\"=0\":[\"q\",c,\"=\",w.join(\"+\")].join(\"\"))}var k=r([].concat(t.pre.thisVars).concat(t.body.thisVars).concat(t.post.thisVars));for((_=_.concat(k)).length>0&&v.push(\"var \"+_.join(\",\")),c=0;c<t.arrayArgs.length;++c)v.push(\"p\"+c+\"|=0\");t.pre.body.length>3&&v.push(a(t.pre,t,l));var M=a(t.body,t,l),T=function(t){for(var e=0,n=t[0].length;e<n;){for(var r=1;r<t.length;++r)if(t[r][e]!==t[0][e])return e;++e}return e}(p);v.push(T<n?function(t,e,n,r){for(var a=e.length,o=n.arrayArgs.length,s=n.blockSize,l=n.indexArgs.length>0,c=[],u=0;u<o;++u)c.push([\"var offset\",u,\"=p\",u].join(\"\"));for(u=t;u<a;++u)c.push([\"for(var j\"+u+\"=SS[\",e[u],\"]|0;j\",u,\">0;){\"].join(\"\")),c.push([\"if(j\",u,\"<\",s,\"){\"].join(\"\")),c.push([\"s\",e[u],\"=j\",u].join(\"\")),c.push([\"j\",u,\"=0\"].join(\"\")),c.push([\"}else{s\",e[u],\"=\",s].join(\"\")),c.push([\"j\",u,\"-=\",s,\"}\"].join(\"\")),l&&c.push([\"index[\",e[u],\"]=j\",u].join(\"\"));for(u=0;u<o;++u){for(var h=[\"offset\"+u],d=t;d<a;++d)h.push([\"j\",d,\"*t\",u,\"p\",e[d]].join(\"\"));c.push([\"p\",u,\"=(\",h.join(\"+\"),\")\"].join(\"\"))}for(c.push(i(e,n,r)),u=t;u<a;++u)c.push(\"}\");return c.join(\"\\n\")}(T,p[0],t,M):i(p[0],t,M)),t.post.body.length>3&&v.push(a(t.post,t,l)),t.debug&&console.log(\"-----Generated cwise routine for \",e,\":\\n\"+v.join(\"\\n\")+\"\\n----------\");var S=[t.funcName||\"unnamed\",\"_cwise_loop_\",s[0].join(\"s\"),\"m\",T,o(l)].join(\"\");return new Function([\"function \",S,\"(\",y.join(\",\"),\"){\",v.join(\"\\n\"),\"} return \",S].join(\"\"))()}},{uniq:597}],153:[function(t,e,n){\"use strict\";var r=t(\"./compile.js\");e.exports=function(t){var e=[\"'use strict'\",\"var CACHED={}\"],n=[];e.push([\"return function \",t.funcName+\"_cwise_thunk\",\"(\",t.shimArgs.join(\",\"),\"){\"].join(\"\"));for(var i=[],a=[],o=[[\"array\",t.arrayArgs[0],\".shape.slice(\",Math.max(0,t.arrayBlockIndices[0]),t.arrayBlockIndices[0]<0?\",\"+t.arrayBlockIndices[0]+\")\":\")\"].join(\"\")],s=[],l=[],c=0;c<t.arrayArgs.length;++c){var u=t.arrayArgs[c];n.push([\"t\",u,\"=array\",u,\".dtype,\",\"r\",u,\"=array\",u,\".order\"].join(\"\")),i.push(\"t\"+u),i.push(\"r\"+u),a.push(\"t\"+u),a.push(\"r\"+u+\".join()\"),o.push(\"array\"+u+\".data\"),o.push(\"array\"+u+\".stride\"),o.push(\"array\"+u+\".offset|0\"),c>0&&(s.push(\"array\"+t.arrayArgs[0]+\".shape.length===array\"+u+\".shape.length+\"+(Math.abs(t.arrayBlockIndices[0])-Math.abs(t.arrayBlockIndices[c]))),l.push(\"array\"+t.arrayArgs[0]+\".shape[shapeIndex+\"+Math.max(0,t.arrayBlockIndices[0])+\"]===array\"+u+\".shape[shapeIndex+\"+Math.max(0,t.arrayBlockIndices[c])+\"]\"))}for(t.arrayArgs.length>1&&(e.push(\"if (!(\"+s.join(\" && \")+\")) throw new Error('cwise: Arrays do not all have the same dimensionality!')\"),e.push(\"for(var shapeIndex=array\"+t.arrayArgs[0]+\".shape.length-\"+Math.abs(t.arrayBlockIndices[0])+\"; shapeIndex--\\x3e0;) {\"),e.push(\"if (!(\"+l.join(\" && \")+\")) throw new Error('cwise: Arrays do not all have the same shape!')\"),e.push(\"}\")),c=0;c<t.scalarArgs.length;++c)o.push(\"scalar\"+t.scalarArgs[c]);return n.push([\"type=[\",a.join(\",\"),\"].join()\"].join(\"\")),n.push(\"proc=CACHED[type]\"),e.push(\"var \"+n.join(\",\")),e.push([\"if(!proc){\",\"CACHED[type]=proc=compile([\",i.join(\",\"),\"])}\",\"return proc(\",o.join(\",\"),\")}\"].join(\"\")),t.debug&&console.log(\"-----Generated thunk:\\n\"+e.join(\"\\n\")+\"\\n----------\"),new Function(\"compile\",e.join(\"\\n\"))(r.bind(void 0,t))}},{\"./compile.js\":152}],154:[function(t,e,n){\"use strict\";var r,i=t(\"type/value/is\"),a=t(\"type/value/ensure\"),o=t(\"type/plain-function/ensure\"),s=t(\"es5-ext/object/copy\"),l=t(\"es5-ext/object/normalize-options\"),c=t(\"es5-ext/object/map\"),u=Function.prototype.bind,h=Object.defineProperty,d=Object.prototype.hasOwnProperty;r=function(t,e,n){var r,i=a(e)&&o(e.value);return delete(r=s(e)).writable,delete r.value,r.get=function(){return!n.overwriteDefinition&&d.call(this,t)?i:(e.value=u.call(i,n.resolveContext?n.resolveContext(this):this),h(this,t,e),this[t])},r},e.exports=function(t){var e=l(arguments[1]);return i(e.resolveContext)&&o(e.resolveContext),c(t,(function(t,n){return r(n,t,e)}))}},{\"es5-ext/object/copy\":196,\"es5-ext/object/map\":204,\"es5-ext/object/normalize-options\":205,\"type/plain-function/ensure\":589,\"type/value/ensure\":593,\"type/value/is\":594}],155:[function(t,e,n){\"use strict\";var r=t(\"type/value/is\"),i=t(\"type/plain-function/is\"),a=t(\"es5-ext/object/assign\"),o=t(\"es5-ext/object/normalize-options\"),s=t(\"es5-ext/string/#/contains\");(e.exports=function(t,e){var n,i,l,c,u;return arguments.length<2||\"string\"!=typeof t?(c=e,e=t,t=null):c=arguments[2],r(t)?(n=s.call(t,\"c\"),i=s.call(t,\"e\"),l=s.call(t,\"w\")):(n=l=!0,i=!1),u={value:e,configurable:n,enumerable:i,writable:l},c?a(o(c),u):u}).gs=function(t,e,n){var l,c,u,h;return\"string\"!=typeof t?(u=n,n=e,e=t,t=null):u=arguments[3],r(e)?i(e)?r(n)?i(n)||(u=n,n=void 0):n=void 0:(u=e,e=n=void 0):e=void 0,r(t)?(l=s.call(t,\"c\"),c=s.call(t,\"e\")):(l=!0,c=!1),h={get:e,set:n,configurable:l,enumerable:c},u?a(o(u),h):h}},{\"es5-ext/object/assign\":193,\"es5-ext/object/normalize-options\":205,\"es5-ext/string/#/contains\":212,\"type/plain-function/is\":590,\"type/value/is\":594}],156:[function(t,e,n){!function(t,r){!function(t){\"use strict\";function e(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function n(t){return 1===t.length&&(n=t,t=function(t,r){return e(n(t),r)}),{left:function(e,n,r,i){for(null==r&&(r=0),null==i&&(i=e.length);r<i;){var a=r+i>>>1;t(e[a],n)<0?r=a+1:i=a}return r},right:function(e,n,r,i){for(null==r&&(r=0),null==i&&(i=e.length);r<i;){var a=r+i>>>1;t(e[a],n)>0?i=a:r=a+1}return r}};var n}var r=n(e),i=r.right,a=r.left;function o(t,e){return[t,e]}function s(t){return null===t?NaN:+t}function l(t,e){var n,r,i=t.length,a=0,o=-1,l=0,c=0;if(null==e)for(;++o<i;)isNaN(n=s(t[o]))||(c+=(r=n-l)*(n-(l+=r/++a)));else for(;++o<i;)isNaN(n=s(e(t[o],o,t)))||(c+=(r=n-l)*(n-(l+=r/++a)));if(a>1)return c/(a-1)}function c(t,e){var n=l(t,e);return n?Math.sqrt(n):n}function u(t,e){var n,r,i,a=t.length,o=-1;if(null==e){for(;++o<a;)if(null!=(n=t[o])&&n>=n)for(r=i=n;++o<a;)null!=(n=t[o])&&(r>n&&(r=n),i<n&&(i=n))}else for(;++o<a;)if(null!=(n=e(t[o],o,t))&&n>=n)for(r=i=n;++o<a;)null!=(n=e(t[o],o,t))&&(r>n&&(r=n),i<n&&(i=n));return[r,i]}var h=Array.prototype,d=h.slice,f=h.map;function p(t){return function(){return t}}function m(t){return t}function g(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((e-t)/n)),a=new Array(i);++r<i;)a[r]=t+r*n;return a}var y=Math.sqrt(50),v=Math.sqrt(10),_=Math.sqrt(2);function b(t,e,n){var r=(e-t)/Math.max(0,n),i=Math.floor(Math.log(r)/Math.LN10),a=r/Math.pow(10,i);return i>=0?(a>=y?10:a>=v?5:a>=_?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=y?10:a>=v?5:a>=_?2:1)}function x(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=y?i*=10:a>=v?i*=5:a>=_&&(i*=2),e<t?-i:i}function w(t){return Math.ceil(Math.log(t.length)/Math.LN2)+1}function k(t,e,n){if(null==n&&(n=s),r=t.length){if((e=+e)<=0||r<2)return+n(t[0],0,t);if(e>=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,a=Math.floor(i),o=+n(t[a],a,t);return o+(+n(t[a+1],a+1,t)-o)*(i-a)}}function M(t,e){var n,r,i=t.length,a=-1;if(null==e){for(;++a<i;)if(null!=(n=t[a])&&n>=n)for(r=n;++a<i;)null!=(n=t[a])&&r>n&&(r=n)}else for(;++a<i;)if(null!=(n=e(t[a],a,t))&&n>=n)for(r=n;++a<i;)null!=(n=e(t[a],a,t))&&r>n&&(r=n);return r}function T(t){if(!(i=t.length))return[];for(var e=-1,n=M(t,S),r=new Array(n);++e<n;)for(var i,a=-1,o=r[e]=new Array(i);++a<i;)o[a]=t[a][e];return r}function S(t){return t.length}t.bisect=i,t.bisectRight=i,t.bisectLeft=a,t.ascending=e,t.bisector=n,t.cross=function(t,e,n){var r,i,a,s,l=t.length,c=e.length,u=new Array(l*c);for(null==n&&(n=o),r=a=0;r<l;++r)for(s=t[r],i=0;i<c;++i,++a)u[a]=n(s,e[i]);return u},t.descending=function(t,e){return e<t?-1:e>t?1:e>=t?0:NaN},t.deviation=c,t.extent=u,t.histogram=function(){var t=m,e=u,n=w;function r(r){var a,o,s=r.length,l=new Array(s);for(a=0;a<s;++a)l[a]=t(r[a],a,r);var c=e(l),u=c[0],h=c[1],d=n(l,u,h);Array.isArray(d)||(d=x(u,h,d),d=g(Math.ceil(u/d)*d,h,d));for(var f=d.length;d[0]<=u;)d.shift(),--f;for(;d[f-1]>h;)d.pop(),--f;var p,m=new Array(f+1);for(a=0;a<=f;++a)(p=m[a]=[]).x0=a>0?d[a-1]:u,p.x1=a<f?d[a]:h;for(a=0;a<s;++a)u<=(o=l[a])&&o<=h&&m[i(d,o,0,f)].push(r[a]);return m}return r.value=function(e){return arguments.length?(t=\"function\"==typeof e?e:p(e),r):t},r.domain=function(t){return arguments.length?(e=\"function\"==typeof t?t:p([t[0],t[1]]),r):e},r.thresholds=function(t){return arguments.length?(n=\"function\"==typeof t?t:Array.isArray(t)?p(d.call(t)):p(t),r):n},r},t.thresholdFreedmanDiaconis=function(t,n,r){return t=f.call(t,s).sort(e),Math.ceil((r-n)/(2*(k(t,.75)-k(t,.25))*Math.pow(t.length,-1/3)))},t.thresholdScott=function(t,e,n){return Math.ceil((n-e)/(3.5*c(t)*Math.pow(t.length,-1/3)))},t.thresholdSturges=w,t.max=function(t,e){var n,r,i=t.length,a=-1;if(null==e){for(;++a<i;)if(null!=(n=t[a])&&n>=n)for(r=n;++a<i;)null!=(n=t[a])&&n>r&&(r=n)}else for(;++a<i;)if(null!=(n=e(t[a],a,t))&&n>=n)for(r=n;++a<i;)null!=(n=e(t[a],a,t))&&n>r&&(r=n);return r},t.mean=function(t,e){var n,r=t.length,i=r,a=-1,o=0;if(null==e)for(;++a<r;)isNaN(n=s(t[a]))?--i:o+=n;else for(;++a<r;)isNaN(n=s(e(t[a],a,t)))?--i:o+=n;if(i)return o/i},t.median=function(t,n){var r,i=t.length,a=-1,o=[];if(null==n)for(;++a<i;)isNaN(r=s(t[a]))||o.push(r);else for(;++a<i;)isNaN(r=s(n(t[a],a,t)))||o.push(r);return k(o.sort(e),.5)},t.merge=function(t){for(var e,n,r,i=t.length,a=-1,o=0;++a<i;)o+=t[a].length;for(n=new Array(o);--i>=0;)for(e=(r=t[i]).length;--e>=0;)n[--o]=r[e];return n},t.min=M,t.pairs=function(t,e){null==e&&(e=o);for(var n=0,r=t.length-1,i=t[0],a=new Array(r<0?0:r);n<r;)a[n]=e(i,i=t[++n]);return a},t.permute=function(t,e){for(var n=e.length,r=new Array(n);n--;)r[n]=t[e[n]];return r},t.quantile=k,t.range=g,t.scan=function(t,n){if(r=t.length){var r,i,a=0,o=0,s=t[o];for(null==n&&(n=e);++a<r;)(n(i=t[a],s)<0||0!==n(s,s))&&(s=i,o=a);return 0===n(s,s)?o:void 0}},t.shuffle=function(t,e,n){for(var r,i,a=(null==n?t.length:n)-(e=null==e?0:+e);a;)i=Math.random()*a--|0,r=t[a+e],t[a+e]=t[i+e],t[i+e]=r;return t},t.sum=function(t,e){var n,r=t.length,i=-1,a=0;if(null==e)for(;++i<r;)(n=+t[i])&&(a+=n);else for(;++i<r;)(n=+e(t[i],i,t))&&(a+=n);return a},t.ticks=function(t,e,n){var r,i,a,o,s=-1;if(n=+n,(t=+t)==(e=+e)&&n>0)return[t];if((r=e<t)&&(i=t,t=e,e=i),0===(o=b(t,e,n))||!isFinite(o))return[];if(o>0)for(t=Math.ceil(t/o),e=Math.floor(e/o),a=new Array(i=Math.ceil(e-t+1));++s<i;)a[s]=(t+s)*o;else for(t=Math.floor(t*o),e=Math.ceil(e*o),a=new Array(i=Math.ceil(t-e+1));++s<i;)a[s]=(t-s)/o;return r&&a.reverse(),a},t.tickIncrement=b,t.tickStep=x,t.transpose=T,t.variance=l,t.zip=function(){return T(arguments)},Object.defineProperty(t,\"__esModule\",{value:!0})}(\"object\"==typeof n&&void 0!==e?n:t.d3=t.d3||{})}(this)},{}],157:[function(t,e,n){!function(t,r){!function(t){\"use strict\";var e=\"$\";function n(){}function r(t,e){var r=new n;if(t instanceof n)t.each((function(t,e){r.set(e,t)}));else if(Array.isArray(t)){var i,a=-1,o=t.length;if(null==e)for(;++a<o;)r.set(a,t[a]);else for(;++a<o;)r.set(e(i=t[a],a,t),i)}else if(t)for(var s in t)r.set(s,t[s]);return r}function i(){return{}}function a(t,e,n){t[e]=n}function o(){return r()}function s(t,e,n){t.set(e,n)}function l(){}n.prototype=r.prototype={constructor:n,has:function(t){return e+t in this},get:function(t){return this[e+t]},set:function(t,n){return this[e+t]=n,this},remove:function(t){var n=e+t;return n in this&&delete this[n]},clear:function(){for(var t in this)t[0]===e&&delete this[t]},keys:function(){var t=[];for(var n in this)n[0]===e&&t.push(n.slice(1));return t},values:function(){var t=[];for(var n in this)n[0]===e&&t.push(this[n]);return t},entries:function(){var t=[];for(var n in this)n[0]===e&&t.push({key:n.slice(1),value:this[n]});return t},size:function(){var t=0;for(var n in this)n[0]===e&&++t;return t},empty:function(){for(var t in this)if(t[0]===e)return!1;return!0},each:function(t){for(var n in this)n[0]===e&&t(this[n],n.slice(1),this)}};var c=r.prototype;function u(t,e){var n=new l;if(t instanceof l)t.each((function(t){n.add(t)}));else if(t){var r=-1,i=t.length;if(null==e)for(;++r<i;)n.add(t[r]);else for(;++r<i;)n.add(e(t[r],r,t))}return n}l.prototype=u.prototype={constructor:l,has:c.has,add:function(t){return this[e+(t+=\"\")]=t,this},remove:c.remove,clear:c.clear,values:c.keys,size:c.size,empty:c.empty,each:c.each},t.nest=function(){var t,e,n,l=[],c=[];function u(n,i,a,o){if(i>=l.length)return null!=t&&n.sort(t),null!=e?e(n):n;for(var s,c,h,d=-1,f=n.length,p=l[i++],m=r(),g=a();++d<f;)(h=m.get(s=p(c=n[d])+\"\"))?h.push(c):m.set(s,[c]);return m.each((function(t,e){o(g,e,u(t,i,a,o))})),g}return n={object:function(t){return u(t,0,i,a)},map:function(t){return u(t,0,o,s)},entries:function(t){return function t(n,r){if(++r>l.length)return n;var i,a=c[r-1];return null!=e&&r>=l.length?i=n.entries():(i=[],n.each((function(e,n){i.push({key:n,values:t(e,r)})}))),null!=a?i.sort((function(t,e){return a(t.key,e.key)})):i}(u(t,0,o,s),0)},key:function(t){return l.push(t),n},sortKeys:function(t){return c[l.length-1]=t,n},sortValues:function(e){return t=e,n},rollup:function(t){return e=t,n}}},t.set=u,t.map=r,t.keys=function(t){var e=[];for(var n in t)e.push(n);return e},t.values=function(t){var e=[];for(var n in t)e.push(t[n]);return e},t.entries=function(t){var e=[];for(var n in t)e.push({key:n,value:t[n]});return e},Object.defineProperty(t,\"__esModule\",{value:!0})}(\"object\"==typeof n&&void 0!==e?n:t.d3=t.d3||{})}(this)},{}],158:[function(t,e,n){!function(t,r){!function(t){\"use strict\";function e(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function n(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function r(){}var i=.7,a=1/i,o=\"\\\\s*([+-]?\\\\d+)\\\\s*\",s=\"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",l=\"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",c=/^#([0-9a-f]{3,8})$/,u=new RegExp(\"^rgb\\\\(\"+[o,o,o]+\"\\\\)$\"),h=new RegExp(\"^rgb\\\\(\"+[l,l,l]+\"\\\\)$\"),d=new RegExp(\"^rgba\\\\(\"+[o,o,o,s]+\"\\\\)$\"),f=new RegExp(\"^rgba\\\\(\"+[l,l,l,s]+\"\\\\)$\"),p=new RegExp(\"^hsl\\\\(\"+[s,l,l]+\"\\\\)$\"),m=new RegExp(\"^hsla\\\\(\"+[s,l,l,s]+\"\\\\)$\"),g={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function y(){return this.rgb().formatHex()}function v(){return this.rgb().formatRgb()}function _(t){var e,n;return t=(t+\"\").trim().toLowerCase(),(e=c.exec(t))?(n=e[1].length,e=parseInt(e[1],16),6===n?b(e):3===n?new M(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?x(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?x(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=u.exec(t))?new M(e[1],e[2],e[3],1):(e=h.exec(t))?new M(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=d.exec(t))?x(e[1],e[2],e[3],e[4]):(e=f.exec(t))?x(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=p.exec(t))?L(e[1],e[2]/100,e[3]/100,1):(e=m.exec(t))?L(e[1],e[2]/100,e[3]/100,e[4]):g.hasOwnProperty(t)?b(g[t]):\"transparent\"===t?new M(NaN,NaN,NaN,0):null}function b(t){return new M(t>>16&255,t>>8&255,255&t,1)}function x(t,e,n,r){return r<=0&&(t=e=n=NaN),new M(t,e,n,r)}function w(t){return t instanceof r||(t=_(t)),t?new M((t=t.rgb()).r,t.g,t.b,t.opacity):new M}function k(t,e,n,r){return 1===arguments.length?w(t):new M(t,e,n,null==r?1:r)}function M(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function T(){return\"#\"+A(this.r)+A(this.g)+A(this.b)}function S(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?\"rgb(\":\"rgba(\")+Math.max(0,Math.min(255,Math.round(this.r)||0))+\", \"+Math.max(0,Math.min(255,Math.round(this.g)||0))+\", \"+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?\")\":\", \"+t+\")\")}function A(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?\"0\":\"\")+t.toString(16)}function L(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new O(t,e,n,r)}function C(t){if(t instanceof O)return new O(t.h,t.s,t.l,t.opacity);if(t instanceof r||(t=_(t)),!t)return new O;if(t instanceof O)return t;var e=(t=t.rgb()).r/255,n=t.g/255,i=t.b/255,a=Math.min(e,n,i),o=Math.max(e,n,i),s=NaN,l=o-a,c=(o+a)/2;return l?(s=e===o?(n-i)/l+6*(n<i):n===o?(i-e)/l+2:(e-n)/l+4,l/=c<.5?o+a:2-o-a,s*=60):l=c>0&&c<1?0:s,new O(s,l,c,t.opacity)}function E(t,e,n,r){return 1===arguments.length?C(t):new O(t,e,n,null==r?1:r)}function O(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function D(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}e(r,_,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:y,formatHex:y,formatHsl:function(){return C(this).formatHsl()},formatRgb:v,toString:v}),e(M,k,n(r,{brighter:function(t){return t=null==t?a:Math.pow(a,t),new M(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?i:Math.pow(i,t),new M(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:T,formatHex:T,formatRgb:S,toString:S})),e(O,E,n(r,{brighter:function(t){return t=null==t?a:Math.pow(a,t),new O(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?i:Math.pow(i,t),new O(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new M(D(t>=240?t-240:t+120,i,r),D(t,i,r),D(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?\"hsl(\":\"hsla(\")+(this.h||0)+\", \"+100*(this.s||0)+\"%, \"+100*(this.l||0)+\"%\"+(1===t?\")\":\", \"+t+\")\")}}));var I=Math.PI/180,P=180/Math.PI,R=.96422,z=.82521,j=4/29,F=6/29,N=3*F*F;function B(t){if(t instanceof H)return new H(t.l,t.a,t.b,t.opacity);if(t instanceof Z)return J(t);t instanceof M||(t=w(t));var e,n,r=q(t.r),i=q(t.g),a=q(t.b),o=V((.2225045*r+.7168786*i+.0606169*a)/1);return r===i&&i===a?e=n=o:(e=V((.4360747*r+.3850649*i+.1430804*a)/R),n=V((.0139322*r+.0971045*i+.7141733*a)/z)),new H(116*o-16,500*(e-o),200*(o-n),t.opacity)}function Y(t,e,n,r){return 1===arguments.length?B(t):new H(t,e,n,null==r?1:r)}function H(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}function V(t){return t>.008856451679035631?Math.pow(t,1/3):t/N+j}function U(t){return t>F?t*t*t:N*(t-j)}function W(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function q(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function G(t){if(t instanceof Z)return new Z(t.h,t.c,t.l,t.opacity);if(t instanceof H||(t=B(t)),0===t.a&&0===t.b)return new Z(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*P;return new Z(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function X(t,e,n,r){return 1===arguments.length?G(t):new Z(t,e,n,null==r?1:r)}function Z(t,e,n,r){this.h=+t,this.c=+e,this.l=+n,this.opacity=+r}function J(t){if(isNaN(t.h))return new H(t.l,0,0,t.opacity);var e=t.h*I;return new H(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}e(H,Y,n(r,{brighter:function(t){return new H(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new H(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return new M(W(3.1338561*(e=R*U(e))-1.6168667*(t=1*U(t))-.4906146*(n=z*U(n))),W(-.9787684*e+1.9161415*t+.033454*n),W(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}})),e(Z,X,n(r,{brighter:function(t){return new Z(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new Z(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return J(this).rgb()}}));var K=-.14861,$=1.78277,Q=-.29227,tt=-.90649,et=1.97294,nt=et*tt,rt=et*$,it=$*Q-tt*K;function at(t){if(t instanceof st)return new st(t.h,t.s,t.l,t.opacity);t instanceof M||(t=w(t));var e=t.g/255,n=t.b/255,r=(it*n+nt*(t.r/255)-rt*e)/(it+nt-rt),i=n-r,a=(et*(e-r)-Q*i)/tt,o=Math.sqrt(a*a+i*i)/(et*r*(1-r)),s=o?Math.atan2(a,i)*P-120:NaN;return new st(s<0?s+360:s,o,r,t.opacity)}function ot(t,e,n,r){return 1===arguments.length?at(t):new st(t,e,n,null==r?1:r)}function st(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}e(st,ot,n(r,{brighter:function(t){return t=null==t?a:Math.pow(a,t),new st(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?i:Math.pow(i,t),new st(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*I,e=+this.l,n=isNaN(this.s)?0:this.s*e*(1-e),r=Math.cos(t),i=Math.sin(t);return new M(255*(e+n*(K*r+$*i)),255*(e+n*(Q*r+tt*i)),255*(e+n*(et*r)),this.opacity)}})),t.color=_,t.cubehelix=ot,t.gray=function(t,e){return new H(t,0,0,null==e?1:e)},t.hcl=X,t.hsl=E,t.lab=Y,t.lch=function(t,e,n,r){return 1===arguments.length?G(t):new Z(n,e,t,null==r?1:r)},t.rgb=k,Object.defineProperty(t,\"__esModule\",{value:!0})}(\"object\"==typeof n&&void 0!==e?n:(t=t||self).d3=t.d3||{})}(this)},{}],159:[function(t,e,n){!function(t,r){!function(t){\"use strict\";var e={value:function(){}};function n(){for(var t,e=0,n=arguments.length,i={};e<n;++e){if(!(t=arguments[e]+\"\")||t in i||/[\\s.]/.test(t))throw new Error(\"illegal type: \"+t);i[t]=[]}return new r(i)}function r(t){this._=t}function i(t,e){return t.trim().split(/^|\\s+/).map((function(t){var n=\"\",r=t.indexOf(\".\");if(r>=0&&(n=t.slice(r+1),t=t.slice(0,r)),t&&!e.hasOwnProperty(t))throw new Error(\"unknown type: \"+t);return{type:t,name:n}}))}function a(t,e){for(var n,r=0,i=t.length;r<i;++r)if((n=t[r]).name===e)return n.value}function o(t,n,r){for(var i=0,a=t.length;i<a;++i)if(t[i].name===n){t[i]=e,t=t.slice(0,i).concat(t.slice(i+1));break}return null!=r&&t.push({name:n,value:r}),t}r.prototype=n.prototype={constructor:r,on:function(t,e){var n,r=this._,s=i(t+\"\",r),l=-1,c=s.length;if(!(arguments.length<2)){if(null!=e&&\"function\"!=typeof e)throw new Error(\"invalid callback: \"+e);for(;++l<c;)if(n=(t=s[l]).type)r[n]=o(r[n],t.name,e);else if(null==e)for(n in r)r[n]=o(r[n],t.name,null);return this}for(;++l<c;)if((n=(t=s[l]).type)&&(n=a(r[n],t.name)))return n},copy:function(){var t={},e=this._;for(var n in e)t[n]=e[n].slice();return new r(t)},call:function(t,e){if((n=arguments.length-2)>0)for(var n,r,i=new Array(n),a=0;a<n;++a)i[a]=arguments[a+2];if(!this._.hasOwnProperty(t))throw new Error(\"unknown type: \"+t);for(a=0,n=(r=this._[t]).length;a<n;++a)r[a].value.apply(e,i)},apply:function(t,e,n){if(!this._.hasOwnProperty(t))throw new Error(\"unknown type: \"+t);for(var r=this._[t],i=0,a=r.length;i<a;++i)r[i].value.apply(e,n)}},t.dispatch=n,Object.defineProperty(t,\"__esModule\",{value:!0})}(\"object\"==typeof n&&void 0!==e?n:(t=t||self).d3=t.d3||{})}(this)},{}],160:[function(t,e,n){!function(r,i){\"object\"==typeof n&&void 0!==e?i(n,t(\"d3-quadtree\"),t(\"d3-collection\"),t(\"d3-dispatch\"),t(\"d3-timer\")):i(r.d3=r.d3||{},r.d3,r.d3,r.d3,r.d3)}(this,(function(t,e,n,r,i){\"use strict\";function a(t){return function(){return t}}function o(){return 1e-6*(Math.random()-.5)}function s(t){return t.x+t.vx}function l(t){return t.y+t.vy}function c(t){return t.index}function u(t,e){var n=t.get(e);if(!n)throw new Error(\"missing: \"+e);return n}function h(t){return t.x}function d(t){return t.y}var f=Math.PI*(3-Math.sqrt(5));t.forceCenter=function(t,e){var n;function r(){var r,i,a=n.length,o=0,s=0;for(r=0;r<a;++r)o+=(i=n[r]).x,s+=i.y;for(o=o/a-t,s=s/a-e,r=0;r<a;++r)(i=n[r]).x-=o,i.y-=s}return null==t&&(t=0),null==e&&(e=0),r.initialize=function(t){n=t},r.x=function(e){return arguments.length?(t=+e,r):t},r.y=function(t){return arguments.length?(e=+t,r):e},r},t.forceCollide=function(t){var n,r,i=1,c=1;function u(){for(var t,a,u,d,f,p,m,g=n.length,y=0;y<c;++y)for(a=e.quadtree(n,s,l).visitAfter(h),t=0;t<g;++t)m=(p=r[(u=n[t]).index])*p,d=u.x+u.vx,f=u.y+u.vy,a.visit(v);function v(t,e,n,r,a){var s=t.data,l=t.r,c=p+l;if(!s)return e>d+c||r<d-c||n>f+c||a<f-c;if(s.index>u.index){var h=d-s.x-s.vx,g=f-s.y-s.vy,y=h*h+g*g;y<c*c&&(0===h&&(y+=(h=o())*h),0===g&&(y+=(g=o())*g),y=(c-(y=Math.sqrt(y)))/y*i,u.vx+=(h*=y)*(c=(l*=l)/(m+l)),u.vy+=(g*=y)*c,s.vx-=h*(c=1-c),s.vy-=g*c)}}}function h(t){if(t.data)return t.r=r[t.data.index];for(var e=t.r=0;e<4;++e)t[e]&&t[e].r>t.r&&(t.r=t[e].r)}function d(){if(n){var e,i,a=n.length;for(r=new Array(a),e=0;e<a;++e)r[(i=n[e]).index]=+t(i,e,n)}}return\"function\"!=typeof t&&(t=a(null==t?1:+t)),u.initialize=function(t){n=t,d()},u.iterations=function(t){return arguments.length?(c=+t,u):c},u.strength=function(t){return arguments.length?(i=+t,u):i},u.radius=function(e){return arguments.length?(t=\"function\"==typeof e?e:a(+e),d(),u):t},u},t.forceLink=function(t){var e,r,i,s,l,h=c,d=function(t){return 1/Math.min(s[t.source.index],s[t.target.index])},f=a(30),p=1;function m(n){for(var i=0,a=t.length;i<p;++i)for(var s,c,u,h,d,f,m,g=0;g<a;++g)h=(u=(s=t[g]).target).x+u.vx-(c=s.source).x-c.vx||o(),d=u.y+u.vy-c.y-c.vy||o(),d*=f=((f=Math.sqrt(h*h+d*d))-r[g])/f*n*e[g],u.vx-=(h*=f)*(m=l[g]),u.vy-=d*m,c.vx+=h*(m=1-m),c.vy+=d*m}function g(){if(i){var a,o,c=i.length,d=t.length,f=n.map(i,h);for(a=0,s=new Array(c);a<d;++a)(o=t[a]).index=a,\"object\"!=typeof o.source&&(o.source=u(f,o.source)),\"object\"!=typeof o.target&&(o.target=u(f,o.target)),s[o.source.index]=(s[o.source.index]||0)+1,s[o.target.index]=(s[o.target.index]||0)+1;for(a=0,l=new Array(d);a<d;++a)l[a]=s[(o=t[a]).source.index]/(s[o.source.index]+s[o.target.index]);e=new Array(d),y(),r=new Array(d),v()}}function y(){if(i)for(var n=0,r=t.length;n<r;++n)e[n]=+d(t[n],n,t)}function v(){if(i)for(var e=0,n=t.length;e<n;++e)r[e]=+f(t[e],e,t)}return null==t&&(t=[]),m.initialize=function(t){i=t,g()},m.links=function(e){return arguments.length?(t=e,g(),m):t},m.id=function(t){return arguments.length?(h=t,m):h},m.iterations=function(t){return arguments.length?(p=+t,m):p},m.strength=function(t){return arguments.length?(d=\"function\"==typeof t?t:a(+t),y(),m):d},m.distance=function(t){return arguments.length?(f=\"function\"==typeof t?t:a(+t),v(),m):f},m},t.forceManyBody=function(){var t,n,r,i,s=a(-30),l=1,c=1/0,u=.81;function f(i){var a,o=t.length,s=e.quadtree(t,h,d).visitAfter(m);for(r=i,a=0;a<o;++a)n=t[a],s.visit(g)}function p(){if(t){var e,n,r=t.length;for(i=new Array(r),e=0;e<r;++e)i[(n=t[e]).index]=+s(n,e,t)}}function m(t){var e,n,r,a,o,s=0,l=0;if(t.length){for(r=a=o=0;o<4;++o)(e=t[o])&&(n=Math.abs(e.value))&&(s+=e.value,l+=n,r+=n*e.x,a+=n*e.y);t.x=r/l,t.y=a/l}else{(e=t).x=e.data.x,e.y=e.data.y;do{s+=i[e.data.index]}while(e=e.next)}t.value=s}function g(t,e,a,s){if(!t.value)return!0;var h=t.x-n.x,d=t.y-n.y,f=s-e,p=h*h+d*d;if(f*f/u<p)return p<c&&(0===h&&(p+=(h=o())*h),0===d&&(p+=(d=o())*d),p<l&&(p=Math.sqrt(l*p)),n.vx+=h*t.value*r/p,n.vy+=d*t.value*r/p),!0;if(!(t.length||p>=c)){(t.data!==n||t.next)&&(0===h&&(p+=(h=o())*h),0===d&&(p+=(d=o())*d),p<l&&(p=Math.sqrt(l*p)));do{t.data!==n&&(n.vx+=h*(f=i[t.data.index]*r/p),n.vy+=d*f)}while(t=t.next)}}return f.initialize=function(e){t=e,p()},f.strength=function(t){return arguments.length?(s=\"function\"==typeof t?t:a(+t),p(),f):s},f.distanceMin=function(t){return arguments.length?(l=t*t,f):Math.sqrt(l)},f.distanceMax=function(t){return arguments.length?(c=t*t,f):Math.sqrt(c)},f.theta=function(t){return arguments.length?(u=t*t,f):Math.sqrt(u)},f},t.forceRadial=function(t,e,n){var r,i,o,s=a(.1);function l(t){for(var a=0,s=r.length;a<s;++a){var l=r[a],c=l.x-e||1e-6,u=l.y-n||1e-6,h=Math.sqrt(c*c+u*u),d=(o[a]-h)*i[a]*t/h;l.vx+=c*d,l.vy+=u*d}}function c(){if(r){var e,n=r.length;for(i=new Array(n),o=new Array(n),e=0;e<n;++e)o[e]=+t(r[e],e,r),i[e]=isNaN(o[e])?0:+s(r[e],e,r)}}return\"function\"!=typeof t&&(t=a(+t)),null==e&&(e=0),null==n&&(n=0),l.initialize=function(t){r=t,c()},l.strength=function(t){return arguments.length?(s=\"function\"==typeof t?t:a(+t),c(),l):s},l.radius=function(e){return arguments.length?(t=\"function\"==typeof e?e:a(+e),c(),l):t},l.x=function(t){return arguments.length?(e=+t,l):e},l.y=function(t){return arguments.length?(n=+t,l):n},l},t.forceSimulation=function(t){var e,a=1,o=.001,s=1-Math.pow(o,1/300),l=0,c=.6,u=n.map(),h=i.timer(p),d=r.dispatch(\"tick\",\"end\");function p(){m(),d.call(\"tick\",e),a<o&&(h.stop(),d.call(\"end\",e))}function m(n){var r,i,o=t.length;void 0===n&&(n=1);for(var h=0;h<n;++h)for(a+=(l-a)*s,u.each((function(t){t(a)})),r=0;r<o;++r)null==(i=t[r]).fx?i.x+=i.vx*=c:(i.x=i.fx,i.vx=0),null==i.fy?i.y+=i.vy*=c:(i.y=i.fy,i.vy=0);return e}function g(){for(var e,n=0,r=t.length;n<r;++n){if((e=t[n]).index=n,null!=e.fx&&(e.x=e.fx),null!=e.fy&&(e.y=e.fy),isNaN(e.x)||isNaN(e.y)){var i=10*Math.sqrt(n),a=n*f;e.x=i*Math.cos(a),e.y=i*Math.sin(a)}(isNaN(e.vx)||isNaN(e.vy))&&(e.vx=e.vy=0)}}function y(e){return e.initialize&&e.initialize(t),e}return null==t&&(t=[]),g(),e={tick:m,restart:function(){return h.restart(p),e},stop:function(){return h.stop(),e},nodes:function(n){return arguments.length?(t=n,g(),u.each(y),e):t},alpha:function(t){return arguments.length?(a=+t,e):a},alphaMin:function(t){return arguments.length?(o=+t,e):o},alphaDecay:function(t){return arguments.length?(s=+t,e):+s},alphaTarget:function(t){return arguments.length?(l=+t,e):l},velocityDecay:function(t){return arguments.length?(c=1-t,e):1-c},force:function(t,n){return arguments.length>1?(null==n?u.remove(t):u.set(t,y(n)),e):u.get(t)},find:function(e,n,r){var i,a,o,s,l,c=0,u=t.length;for(null==r?r=1/0:r*=r,c=0;c<u;++c)(o=(i=e-(s=t[c]).x)*i+(a=n-s.y)*a)<r&&(l=s,r=o);return l},on:function(t,n){return arguments.length>1?(d.on(t,n),e):d.on(t)}}},t.forceX=function(t){var e,n,r,i=a(.1);function o(t){for(var i,a=0,o=e.length;a<o;++a)(i=e[a]).vx+=(r[a]-i.x)*n[a]*t}function s(){if(e){var a,o=e.length;for(n=new Array(o),r=new Array(o),a=0;a<o;++a)n[a]=isNaN(r[a]=+t(e[a],a,e))?0:+i(e[a],a,e)}}return\"function\"!=typeof t&&(t=a(null==t?0:+t)),o.initialize=function(t){e=t,s()},o.strength=function(t){return arguments.length?(i=\"function\"==typeof t?t:a(+t),s(),o):i},o.x=function(e){return arguments.length?(t=\"function\"==typeof e?e:a(+e),s(),o):t},o},t.forceY=function(t){var e,n,r,i=a(.1);function o(t){for(var i,a=0,o=e.length;a<o;++a)(i=e[a]).vy+=(r[a]-i.y)*n[a]*t}function s(){if(e){var a,o=e.length;for(n=new Array(o),r=new Array(o),a=0;a<o;++a)n[a]=isNaN(r[a]=+t(e[a],a,e))?0:+i(e[a],a,e)}}return\"function\"!=typeof t&&(t=a(null==t?0:+t)),o.initialize=function(t){e=t,s()},o.strength=function(t){return arguments.length?(i=\"function\"==typeof t?t:a(+t),s(),o):i},o.y=function(e){return arguments.length?(t=\"function\"==typeof e?e:a(+e),s(),o):t},o},Object.defineProperty(t,\"__esModule\",{value:!0})}))},{\"d3-collection\":157,\"d3-dispatch\":159,\"d3-quadtree\":164,\"d3-timer\":168}],161:[function(t,e,n){!function(t,r){!function(t){\"use strict\";function e(t,e){return t.parent===e.parent?1:2}function n(t,e){return t+e.x}function r(t,e){return Math.max(t,e.y)}function i(t){var e=0,n=t.children,r=n&&n.length;if(r)for(;--r>=0;)e+=n[r].value;else e=1;t.value=e}function a(t,e){var n,r,i,a,s,u=new c(t),h=+t.value&&(u.value=t.value),d=[u];for(null==e&&(e=o);n=d.pop();)if(h&&(n.value=+n.data.value),(i=e(n.data))&&(s=i.length))for(n.children=new Array(s),a=s-1;a>=0;--a)d.push(r=n.children[a]=new c(i[a])),r.parent=n,r.depth=n.depth+1;return u.eachBefore(l)}function o(t){return t.children}function s(t){t.data=t.data.data}function l(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function c(t){this.data=t,this.depth=this.height=0,this.parent=null}c.prototype=a.prototype={constructor:c,count:function(){return this.eachAfter(i)},each:function(t){var e,n,r,i,a=this,o=[a];do{for(e=o.reverse(),o=[];a=e.pop();)if(t(a),n=a.children)for(r=0,i=n.length;r<i;++r)o.push(n[r])}while(o.length);return this},eachAfter:function(t){for(var e,n,r,i=this,a=[i],o=[];i=a.pop();)if(o.push(i),e=i.children)for(n=0,r=e.length;n<r;++n)a.push(e[n]);for(;i=o.pop();)t(i);return this},eachBefore:function(t){for(var e,n,r=this,i=[r];r=i.pop();)if(t(r),e=r.children)for(n=e.length-1;n>=0;--n)i.push(e[n]);return this},sum:function(t){return this.eachAfter((function(e){for(var n=+t(e.data)||0,r=e.children,i=r&&r.length;--i>=0;)n+=r[i].value;e.value=n}))},sort:function(t){return this.eachBefore((function(e){e.children&&e.children.sort(t)}))},path:function(t){for(var e=this,n=function(t,e){if(t===e)return t;var n=t.ancestors(),r=e.ancestors(),i=null;for(t=n.pop(),e=r.pop();t===e;)i=t,t=n.pop(),e=r.pop();return i}(e,t),r=[e];e!==n;)r.push(e=e.parent);for(var i=r.length;t!==n;)r.splice(i,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){var t=[];return this.each((function(e){t.push(e)})),t},leaves:function(){var t=[];return this.eachBefore((function(e){e.children||t.push(e)})),t},links:function(){var t=this,e=[];return t.each((function(n){n!==t&&e.push({source:n.parent,target:n})})),e},copy:function(){return a(this).eachBefore(s)}};var u=Array.prototype.slice;function h(t){for(var e,n,r=0,i=(t=function(t){for(var e,n,r=t.length;r;)n=Math.random()*r--|0,e=t[r],t[r]=t[n],t[n]=e;return t}(u.call(t))).length,a=[];r<i;)e=t[r],n&&p(n,e)?++r:(n=g(a=d(a,e)),r=0);return n}function d(t,e){var n,r;if(m(e,t))return[e];for(n=0;n<t.length;++n)if(f(e,t[n])&&m(y(t[n],e),t))return[t[n],e];for(n=0;n<t.length-1;++n)for(r=n+1;r<t.length;++r)if(f(y(t[n],t[r]),e)&&f(y(t[n],e),t[r])&&f(y(t[r],e),t[n])&&m(v(t[n],t[r],e),t))return[t[n],t[r],e];throw new Error}function f(t,e){var n=t.r-e.r,r=e.x-t.x,i=e.y-t.y;return n<0||n*n<r*r+i*i}function p(t,e){var n=t.r-e.r+1e-6,r=e.x-t.x,i=e.y-t.y;return n>0&&n*n>r*r+i*i}function m(t,e){for(var n=0;n<e.length;++n)if(!p(t,e[n]))return!1;return!0}function g(t){switch(t.length){case 1:return{x:(e=t[0]).x,y:e.y,r:e.r};case 2:return y(t[0],t[1]);case 3:return v(t[0],t[1],t[2])}var e}function y(t,e){var n=t.x,r=t.y,i=t.r,a=e.x,o=e.y,s=e.r,l=a-n,c=o-r,u=s-i,h=Math.sqrt(l*l+c*c);return{x:(n+a+l/h*u)/2,y:(r+o+c/h*u)/2,r:(h+i+s)/2}}function v(t,e,n){var r=t.x,i=t.y,a=t.r,o=e.x,s=e.y,l=e.r,c=n.x,u=n.y,h=n.r,d=r-o,f=r-c,p=i-s,m=i-u,g=l-a,y=h-a,v=r*r+i*i-a*a,_=v-o*o-s*s+l*l,b=v-c*c-u*u+h*h,x=f*p-d*m,w=(p*b-m*_)/(2*x)-r,k=(m*g-p*y)/x,M=(f*_-d*b)/(2*x)-i,T=(d*y-f*g)/x,S=k*k+T*T-1,A=2*(a+w*k+M*T),L=w*w+M*M-a*a,C=-(S?(A+Math.sqrt(A*A-4*S*L))/(2*S):L/A);return{x:r+w+k*C,y:i+M+T*C,r:C}}function _(t,e,n){var r,i,a,o,s=t.x-e.x,l=t.y-e.y,c=s*s+l*l;c?(i=e.r+n.r,o=t.r+n.r,(i*=i)>(o*=o)?(r=(c+o-i)/(2*c),a=Math.sqrt(Math.max(0,o/c-r*r)),n.x=t.x-r*s-a*l,n.y=t.y-r*l+a*s):(r=(c+i-o)/(2*c),a=Math.sqrt(Math.max(0,i/c-r*r)),n.x=e.x+r*s-a*l,n.y=e.y+r*l+a*s)):(n.x=e.x+n.r,n.y=e.y)}function b(t,e){var n=t.r+e.r-1e-6,r=e.x-t.x,i=e.y-t.y;return n>0&&n*n>r*r+i*i}function x(t){var e=t._,n=t.next._,r=e.r+n.r,i=(e.x*n.r+n.x*e.r)/r,a=(e.y*n.r+n.y*e.r)/r;return i*i+a*a}function w(t){this._=t,this.next=null,this.previous=null}function k(t){if(!(i=t.length))return 0;var e,n,r,i,a,o,s,l,c,u,d;if((e=t[0]).x=0,e.y=0,!(i>1))return e.r;if(e.x=-(n=t[1]).r,n.x=e.r,n.y=0,!(i>2))return e.r+n.r;_(n,e,r=t[2]),e=new w(e),n=new w(n),r=new w(r),e.next=r.previous=n,n.next=e.previous=r,r.next=n.previous=e;t:for(s=3;s<i;++s){_(e._,n._,r=t[s]),r=new w(r),l=n.next,c=e.previous,u=n._.r,d=e._.r;do{if(u<=d){if(b(l._,r._)){e.next=n=l,n.previous=e,--s;continue t}u+=l._.r,l=l.next}else{if(b(c._,r._)){(e=c).next=n,n.previous=e,--s;continue t}d+=c._.r,c=c.previous}}while(l!==c.next);for(r.previous=e,r.next=n,e.next=n.previous=n=r,a=x(e);(r=r.next)!==n;)(o=x(r))<a&&(e=r,a=o);n=e.next}for(e=[n._],r=n;(r=r.next)!==n;)e.push(r._);for(r=h(e),s=0;s<i;++s)(e=t[s]).x-=r.x,e.y-=r.y;return r.r}function M(t){return null==t?null:T(t)}function T(t){if(\"function\"!=typeof t)throw new Error;return t}function S(){return 0}function A(t){return function(){return t}}function L(t){return Math.sqrt(t.value)}function C(t){return function(e){e.children||(e.r=Math.max(0,+t(e)||0))}}function E(t,e){return function(n){if(r=n.children){var r,i,a,o=r.length,s=t(n)*e||0;if(s)for(i=0;i<o;++i)r[i].r+=s;if(a=k(r),s)for(i=0;i<o;++i)r[i].r-=s;n.r=a+s}}}function O(t){return function(e){var n=e.parent;e.r*=t,n&&(e.x=n.x+t*e.x,e.y=n.y+t*e.y)}}function D(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}function I(t,e,n,r,i){for(var a,o=t.children,s=-1,l=o.length,c=t.value&&(r-e)/t.value;++s<l;)(a=o[s]).y0=n,a.y1=i,a.x0=e,a.x1=e+=a.value*c}var P={depth:-1},R={};function z(t){return t.id}function j(t){return t.parentId}function F(t,e){return t.parent===e.parent?1:2}function N(t){var e=t.children;return e?e[0]:t.t}function B(t){var e=t.children;return e?e[e.length-1]:t.t}function Y(t,e,n){var r=n/(e.i-t.i);e.c-=r,e.s+=n,t.c+=r,e.z+=n,e.m+=n}function H(t,e,n){return t.a.parent===e.parent?t.a:n}function V(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}function U(t,e,n,r,i){for(var a,o=t.children,s=-1,l=o.length,c=t.value&&(i-n)/t.value;++s<l;)(a=o[s]).x0=e,a.x1=r,a.y0=n,a.y1=n+=a.value*c}V.prototype=Object.create(c.prototype);var W=(1+Math.sqrt(5))/2;function q(t,e,n,r,i,a){for(var o,s,l,c,u,h,d,f,p,m,g,y=[],v=e.children,_=0,b=0,x=v.length,w=e.value;_<x;){l=i-n,c=a-r;do{u=v[b++].value}while(!u&&b<x);for(h=d=u,g=u*u*(m=Math.max(c/l,l/c)/(w*t)),p=Math.max(d/g,g/h);b<x;++b){if(u+=s=v[b].value,s<h&&(h=s),s>d&&(d=s),g=u*u*m,(f=Math.max(d/g,g/h))>p){u-=s;break}p=f}y.push(o={value:u,dice:l<c,children:v.slice(_,b)}),o.dice?I(o,n,r,i,w?r+=c*u/w:a):U(o,n,r,w?n+=l*u/w:i,a),w-=u,_=b}return y}var G=function t(e){function n(t,n,r,i,a){q(e,t,n,r,i,a)}return n.ratio=function(e){return t((e=+e)>1?e:1)},n}(W),X=function t(e){function n(t,n,r,i,a){if((o=t._squarify)&&o.ratio===e)for(var o,s,l,c,u,h=-1,d=o.length,f=t.value;++h<d;){for(l=(s=o[h]).children,c=s.value=0,u=l.length;c<u;++c)s.value+=l[c].value;s.dice?I(s,n,r,i,r+=(a-r)*s.value/f):U(s,n,r,n+=(i-n)*s.value/f,a),f-=s.value}else t._squarify=o=q(e,t,n,r,i,a),o.ratio=e}return n.ratio=function(e){return t((e=+e)>1?e:1)},n}(W);t.cluster=function(){var t=e,i=1,a=1,o=!1;function s(e){var s,l=0;e.eachAfter((function(e){var i=e.children;i?(e.x=function(t){return t.reduce(n,0)/t.length}(i),e.y=function(t){return 1+t.reduce(r,0)}(i)):(e.x=s?l+=t(e,s):0,e.y=0,s=e)}));var c=function(t){for(var e;e=t.children;)t=e[0];return t}(e),u=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(e),h=c.x-t(c,u)/2,d=u.x+t(u,c)/2;return e.eachAfter(o?function(t){t.x=(t.x-e.x)*i,t.y=(e.y-t.y)*a}:function(t){t.x=(t.x-h)/(d-h)*i,t.y=(1-(e.y?t.y/e.y:1))*a})}return s.separation=function(e){return arguments.length?(t=e,s):t},s.size=function(t){return arguments.length?(o=!1,i=+t[0],a=+t[1],s):o?null:[i,a]},s.nodeSize=function(t){return arguments.length?(o=!0,i=+t[0],a=+t[1],s):o?[i,a]:null},s},t.hierarchy=a,t.pack=function(){var t=null,e=1,n=1,r=S;function i(i){return i.x=e/2,i.y=n/2,t?i.eachBefore(C(t)).eachAfter(E(r,.5)).eachBefore(O(1)):i.eachBefore(C(L)).eachAfter(E(S,1)).eachAfter(E(r,i.r/Math.min(e,n))).eachBefore(O(Math.min(e,n)/(2*i.r))),i}return i.radius=function(e){return arguments.length?(t=M(e),i):t},i.size=function(t){return arguments.length?(e=+t[0],n=+t[1],i):[e,n]},i.padding=function(t){return arguments.length?(r=\"function\"==typeof t?t:A(+t),i):r},i},t.packEnclose=h,t.packSiblings=function(t){return k(t),t},t.partition=function(){var t=1,e=1,n=0,r=!1;function i(i){var a=i.height+1;return i.x0=i.y0=n,i.x1=t,i.y1=e/a,i.eachBefore(function(t,e){return function(r){r.children&&I(r,r.x0,t*(r.depth+1)/e,r.x1,t*(r.depth+2)/e);var i=r.x0,a=r.y0,o=r.x1-n,s=r.y1-n;o<i&&(i=o=(i+o)/2),s<a&&(a=s=(a+s)/2),r.x0=i,r.y0=a,r.x1=o,r.y1=s}}(e,a)),r&&i.eachBefore(D),i}return i.round=function(t){return arguments.length?(r=!!t,i):r},i.size=function(n){return arguments.length?(t=+n[0],e=+n[1],i):[t,e]},i.padding=function(t){return arguments.length?(n=+t,i):n},i},t.stratify=function(){var t=z,e=j;function n(n){var r,i,a,o,s,u,h,d=n.length,f=new Array(d),p={};for(i=0;i<d;++i)s=f[i]=new c(r=n[i]),null!=(u=t(r,i,n))&&(u+=\"\")&&(p[h=\"$\"+(s.id=u)]=h in p?R:s);for(i=0;i<d;++i)if(s=f[i],null!=(u=e(n[i],i,n))&&(u+=\"\")){if(!(o=p[\"$\"+u]))throw new Error(\"missing: \"+u);if(o===R)throw new Error(\"ambiguous: \"+u);o.children?o.children.push(s):o.children=[s],s.parent=o}else{if(a)throw new Error(\"multiple roots\");a=s}if(!a)throw new Error(\"no root\");if(a.parent=P,a.eachBefore((function(t){t.depth=t.parent.depth+1,--d})).eachBefore(l),a.parent=null,d>0)throw new Error(\"cycle\");return a}return n.id=function(e){return arguments.length?(t=T(e),n):t},n.parentId=function(t){return arguments.length?(e=T(t),n):e},n},t.tree=function(){var t=F,e=1,n=1,r=null;function i(i){var l=function(t){for(var e,n,r,i,a,o=new V(t,0),s=[o];e=s.pop();)if(r=e._.children)for(e.children=new Array(a=r.length),i=a-1;i>=0;--i)s.push(n=e.children[i]=new V(r[i],i)),n.parent=e;return(o.parent=new V(null,0)).children=[o],o}(i);if(l.eachAfter(a),l.parent.m=-l.z,l.eachBefore(o),r)i.eachBefore(s);else{var c=i,u=i,h=i;i.eachBefore((function(t){t.x<c.x&&(c=t),t.x>u.x&&(u=t),t.depth>h.depth&&(h=t)}));var d=c===u?1:t(c,u)/2,f=d-c.x,p=e/(u.x+d+f),m=n/(h.depth||1);i.eachBefore((function(t){t.x=(t.x+f)*p,t.y=t.depth*m}))}return i}function a(e){var n=e.children,r=e.parent.children,i=e.i?r[e.i-1]:null;if(n){!function(t){for(var e,n=0,r=0,i=t.children,a=i.length;--a>=0;)(e=i[a]).z+=n,e.m+=n,n+=e.s+(r+=e.c)}(e);var a=(n[0].z+n[n.length-1].z)/2;i?(e.z=i.z+t(e._,i._),e.m=e.z-a):e.z=a}else i&&(e.z=i.z+t(e._,i._));e.parent.A=function(e,n,r){if(n){for(var i,a=e,o=e,s=n,l=a.parent.children[0],c=a.m,u=o.m,h=s.m,d=l.m;s=B(s),a=N(a),s&&a;)l=N(l),(o=B(o)).a=e,(i=s.z+h-a.z-c+t(s._,a._))>0&&(Y(H(s,e,r),e,i),c+=i,u+=i),h+=s.m,c+=a.m,d+=l.m,u+=o.m;s&&!B(o)&&(o.t=s,o.m+=h-u),a&&!N(l)&&(l.t=a,l.m+=c-d,r=e)}return r}(e,i,e.parent.A||r[0])}function o(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function s(t){t.x*=e,t.y=t.depth*n}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i},t.treemap=function(){var t=G,e=!1,n=1,r=1,i=[0],a=S,o=S,s=S,l=S,c=S;function u(t){return t.x0=t.y0=0,t.x1=n,t.y1=r,t.eachBefore(h),i=[0],e&&t.eachBefore(D),t}function h(e){var n=i[e.depth],r=e.x0+n,u=e.y0+n,h=e.x1-n,d=e.y1-n;h<r&&(r=h=(r+h)/2),d<u&&(u=d=(u+d)/2),e.x0=r,e.y0=u,e.x1=h,e.y1=d,e.children&&(n=i[e.depth+1]=a(e)/2,r+=c(e)-n,u+=o(e)-n,(h-=s(e)-n)<r&&(r=h=(r+h)/2),(d-=l(e)-n)<u&&(u=d=(u+d)/2),t(e,r,u,h,d))}return u.round=function(t){return arguments.length?(e=!!t,u):e},u.size=function(t){return arguments.length?(n=+t[0],r=+t[1],u):[n,r]},u.tile=function(e){return arguments.length?(t=T(e),u):t},u.padding=function(t){return arguments.length?u.paddingInner(t).paddingOuter(t):u.paddingInner()},u.paddingInner=function(t){return arguments.length?(a=\"function\"==typeof t?t:A(+t),u):a},u.paddingOuter=function(t){return arguments.length?u.paddingTop(t).paddingRight(t).paddingBottom(t).paddingLeft(t):u.paddingTop()},u.paddingTop=function(t){return arguments.length?(o=\"function\"==typeof t?t:A(+t),u):o},u.paddingRight=function(t){return arguments.length?(s=\"function\"==typeof t?t:A(+t),u):s},u.paddingBottom=function(t){return arguments.length?(l=\"function\"==typeof t?t:A(+t),u):l},u.paddingLeft=function(t){return arguments.length?(c=\"function\"==typeof t?t:A(+t),u):c},u},t.treemapBinary=function(t,e,n,r,i){var a,o,s=t.children,l=s.length,c=new Array(l+1);for(c[0]=o=a=0;a<l;++a)c[a+1]=o+=s[a].value;!function t(e,n,r,i,a,o,l){if(e>=n-1){var u=s[e];return u.x0=i,u.y0=a,u.x1=o,void(u.y1=l)}for(var h=c[e],d=r/2+h,f=e+1,p=n-1;f<p;){var m=f+p>>>1;c[m]<d?f=m+1:p=m}d-c[f-1]<c[f]-d&&e+1<f&&--f;var g=c[f]-h,y=r-g;if(o-i>l-a){var v=(i*y+o*g)/r;t(e,f,g,i,a,v,l),t(f,n,y,v,a,o,l)}else{var _=(a*y+l*g)/r;t(e,f,g,i,a,o,_),t(f,n,y,i,_,o,l)}}(0,l,t.value,e,n,r,i)},t.treemapDice=I,t.treemapResquarify=X,t.treemapSlice=U,t.treemapSliceDice=function(t,e,n,r,i){(1&t.depth?U:I)(t,e,n,r,i)},t.treemapSquarify=G,Object.defineProperty(t,\"__esModule\",{value:!0})}(\"object\"==typeof n&&void 0!==e?n:(t=t||self).d3=t.d3||{})}(this)},{}],162:[function(t,e,n){!function(r,i){\"object\"==typeof n&&void 0!==e?i(n,t(\"d3-color\")):i((r=r||self).d3=r.d3||{},r.d3)}(this,(function(t,e){\"use strict\";function n(t,e,n,r,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*n+(1+3*t+3*a-3*o)*r+o*i)/6}function r(t){var e=t.length-1;return function(r){var i=r<=0?r=0:r>=1?(r=1,e-1):Math.floor(r*e),a=t[i],o=t[i+1];return n((r-i/e)*e,i>0?t[i-1]:2*a-o,a,o,i<e-1?t[i+2]:2*o-a)}}function i(t){var e=t.length;return function(r){var i=Math.floor(((r%=1)<0?++r:r)*e);return n((r-i/e)*e,t[(i+e-1)%e],t[i%e],t[(i+1)%e],t[(i+2)%e])}}function a(t){return function(){return t}}function o(t,e){return function(n){return t+n*e}}function s(t,e){var n=e-t;return n?o(t,n>180||n<-180?n-360*Math.round(n/360):n):a(isNaN(t)?e:t)}function l(t,e){var n=e-t;return n?o(t,n):a(isNaN(t)?e:t)}var c=function t(n){var r=function(t){return 1==(t=+t)?l:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):a(isNaN(e)?n:e)}}(n);function i(t,n){var i=r((t=e.rgb(t)).r,(n=e.rgb(n)).r),a=r(t.g,n.g),o=r(t.b,n.b),s=l(t.opacity,n.opacity);return function(e){return t.r=i(e),t.g=a(e),t.b=o(e),t.opacity=s(e),t+\"\"}}return i.gamma=t,i}(1);function u(t){return function(n){var r,i,a=n.length,o=new Array(a),s=new Array(a),l=new Array(a);for(r=0;r<a;++r)i=e.rgb(n[r]),o[r]=i.r||0,s[r]=i.g||0,l[r]=i.b||0;return o=t(o),s=t(s),l=t(l),i.opacity=1,function(t){return i.r=o(t),i.g=s(t),i.b=l(t),i+\"\"}}}var h=u(r),d=u(i);function f(t,e){e||(e=[]);var n,r=t?Math.min(e.length,t.length):0,i=e.slice();return function(a){for(n=0;n<r;++n)i[n]=t[n]*(1-a)+e[n]*a;return i}}function p(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}function m(t,e){var n,r=e?e.length:0,i=t?Math.min(r,t.length):0,a=new Array(i),o=new Array(r);for(n=0;n<i;++n)a[n]=w(t[n],e[n]);for(;n<r;++n)o[n]=e[n];return function(t){for(n=0;n<i;++n)o[n]=a[n](t);return o}}function g(t,e){var n=new Date;return t=+t,e=+e,function(r){return n.setTime(t*(1-r)+e*r),n}}function y(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}function v(t,e){var n,r={},i={};for(n in null!==t&&\"object\"==typeof t||(t={}),null!==e&&\"object\"==typeof e||(e={}),e)n in t?r[n]=w(t[n],e[n]):i[n]=e[n];return function(t){for(n in r)i[n]=r[n](t);return i}}var _=/[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,b=new RegExp(_.source,\"g\");function x(t,e){var n,r,i,a=_.lastIndex=b.lastIndex=0,o=-1,s=[],l=[];for(t+=\"\",e+=\"\";(n=_.exec(t))&&(r=b.exec(e));)(i=r.index)>a&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(n=n[0])===(r=r[0])?s[o]?s[o]+=r:s[++o]=r:(s[++o]=null,l.push({i:o,x:y(n,r)})),a=b.lastIndex;return a<e.length&&(i=e.slice(a),s[o]?s[o]+=i:s[++o]=i),s.length<2?l[0]?function(t){return function(e){return t(e)+\"\"}}(l[0].x):function(t){return function(){return t}}(e):(e=l.length,function(t){for(var n,r=0;r<e;++r)s[(n=l[r]).i]=n.x(t);return s.join(\"\")})}function w(t,n){var r,i=typeof n;return null==n||\"boolean\"===i?a(n):(\"number\"===i?y:\"string\"===i?(r=e.color(n))?(n=r,c):x:n instanceof e.color?c:n instanceof Date?g:p(n)?f:Array.isArray(n)?m:\"function\"!=typeof n.valueOf&&\"function\"!=typeof n.toString||isNaN(n)?v:y)(t,n)}var k,M,T,S,A=180/Math.PI,L={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function C(t,e,n,r,i,a){var o,s,l;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(l=t*n+e*r)&&(n-=t*l,r-=e*l),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,l/=s),t*r<e*n&&(t=-t,e=-e,l=-l,o=-o),{translateX:i,translateY:a,rotate:Math.atan2(e,t)*A,skewX:Math.atan(l)*A,scaleX:o,scaleY:s}}function E(t,e,n,r){function i(t){return t.length?t.pop()+\" \":\"\"}return function(a,o){var s=[],l=[];return a=t(a),o=t(o),function(t,r,i,a,o,s){if(t!==i||r!==a){var l=o.push(\"translate(\",null,e,null,n);s.push({i:l-4,x:y(t,i)},{i:l-2,x:y(r,a)})}else(i||a)&&o.push(\"translate(\"+i+e+a+n)}(a.translateX,a.translateY,o.translateX,o.translateY,s,l),function(t,e,n,a){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(i(n)+\"rotate(\",null,r)-2,x:y(t,e)})):e&&n.push(i(n)+\"rotate(\"+e+r)}(a.rotate,o.rotate,s,l),function(t,e,n,a){t!==e?a.push({i:n.push(i(n)+\"skewX(\",null,r)-2,x:y(t,e)}):e&&n.push(i(n)+\"skewX(\"+e+r)}(a.skewX,o.skewX,s,l),function(t,e,n,r,a,o){if(t!==n||e!==r){var s=a.push(i(a)+\"scale(\",null,\",\",null,\")\");o.push({i:s-4,x:y(t,n)},{i:s-2,x:y(e,r)})}else 1===n&&1===r||a.push(i(a)+\"scale(\"+n+\",\"+r+\")\")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,l),a=o=null,function(t){for(var e,n=-1,r=l.length;++n<r;)s[(e=l[n]).i]=e.x(t);return s.join(\"\")}}}var O=E((function(t){return\"none\"===t?L:(k||(k=document.createElement(\"DIV\"),M=document.documentElement,T=document.defaultView),k.style.transform=t,t=T.getComputedStyle(M.appendChild(k),null).getPropertyValue(\"transform\"),M.removeChild(k),C(+(t=t.slice(7,-1).split(\",\"))[0],+t[1],+t[2],+t[3],+t[4],+t[5]))}),\"px, \",\"px)\",\"deg)\"),D=E((function(t){return null==t?L:(S||(S=document.createElementNS(\"http://www.w3.org/2000/svg\",\"g\")),S.setAttribute(\"transform\",t),(t=S.transform.baseVal.consolidate())?C((t=t.matrix).a,t.b,t.c,t.d,t.e,t.f):L)}),\", \",\")\",\")\"),I=Math.SQRT2;function P(t){return((t=Math.exp(t))+1/t)/2}function R(t){return function(n,r){var i=t((n=e.hsl(n)).h,(r=e.hsl(r)).h),a=l(n.s,r.s),o=l(n.l,r.l),s=l(n.opacity,r.opacity);return function(t){return n.h=i(t),n.s=a(t),n.l=o(t),n.opacity=s(t),n+\"\"}}}var z=R(s),j=R(l);function F(t){return function(n,r){var i=t((n=e.hcl(n)).h,(r=e.hcl(r)).h),a=l(n.c,r.c),o=l(n.l,r.l),s=l(n.opacity,r.opacity);return function(t){return n.h=i(t),n.c=a(t),n.l=o(t),n.opacity=s(t),n+\"\"}}}var N=F(s),B=F(l);function Y(t){return function n(r){function i(n,i){var a=t((n=e.cubehelix(n)).h,(i=e.cubehelix(i)).h),o=l(n.s,i.s),s=l(n.l,i.l),c=l(n.opacity,i.opacity);return function(t){return n.h=a(t),n.s=o(t),n.l=s(Math.pow(t,r)),n.opacity=c(t),n+\"\"}}return r=+r,i.gamma=n,i}(1)}var H=Y(s),V=Y(l);t.interpolate=w,t.interpolateArray=function(t,e){return(p(e)?f:m)(t,e)},t.interpolateBasis=r,t.interpolateBasisClosed=i,t.interpolateCubehelix=H,t.interpolateCubehelixLong=V,t.interpolateDate=g,t.interpolateDiscrete=function(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}},t.interpolateHcl=N,t.interpolateHclLong=B,t.interpolateHsl=z,t.interpolateHslLong=j,t.interpolateHue=function(t,e){var n=s(+t,+e);return function(t){var e=n(t);return e-360*Math.floor(e/360)}},t.interpolateLab=function(t,n){var r=l((t=e.lab(t)).l,(n=e.lab(n)).l),i=l(t.a,n.a),a=l(t.b,n.b),o=l(t.opacity,n.opacity);return function(e){return t.l=r(e),t.a=i(e),t.b=a(e),t.opacity=o(e),t+\"\"}},t.interpolateNumber=y,t.interpolateNumberArray=f,t.interpolateObject=v,t.interpolateRgb=c,t.interpolateRgbBasis=h,t.interpolateRgbBasisClosed=d,t.interpolateRound=function(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}},t.interpolateString=x,t.interpolateTransformCss=O,t.interpolateTransformSvg=D,t.interpolateZoom=function(t,e){var n,r,i=t[0],a=t[1],o=t[2],s=e[2],l=e[0]-i,c=e[1]-a,u=l*l+c*c;if(u<1e-12)r=Math.log(s/o)/I,n=function(t){return[i+t*l,a+t*c,o*Math.exp(I*t*r)]};else{var h=Math.sqrt(u),d=(s*s-o*o+4*u)/(2*o*2*h),f=(s*s-o*o-4*u)/(2*s*2*h),p=Math.log(Math.sqrt(d*d+1)-d),m=Math.log(Math.sqrt(f*f+1)-f);r=(m-p)/I,n=function(t){var e,n=t*r,s=P(p),u=o/(2*h)*(s*(e=I*n+p,((e=Math.exp(2*e))-1)/(e+1))-function(t){return((t=Math.exp(t))-1/t)/2}(p));return[i+u*l,a+u*c,o*s/P(I*n+p)]}}return n.duration=1e3*r,n},t.piecewise=function(t,e){for(var n=0,r=e.length-1,i=e[0],a=new Array(r<0?0:r);n<r;)a[n]=t(i,i=e[++n]);return function(t){var e=Math.max(0,Math.min(r-1,Math.floor(t*=r)));return a[e](t-e)}},t.quantize=function(t,e){for(var n=new Array(e),r=0;r<e;++r)n[r]=t(r/(e-1));return n},Object.defineProperty(t,\"__esModule\",{value:!0})}))},{\"d3-color\":158}],163:[function(t,e,n){!function(t,r){!function(t){\"use strict\";var e=Math.PI,n=2*e,r=1e-6,i=n-r;function a(){this._x0=this._y0=this._x1=this._y1=null,this._=\"\"}function o(){return new a}a.prototype=o.prototype={constructor:a,moveTo:function(t,e){this._+=\"M\"+(this._x0=this._x1=+t)+\",\"+(this._y0=this._y1=+e)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+=\"Z\")},lineTo:function(t,e){this._+=\"L\"+(this._x1=+t)+\",\"+(this._y1=+e)},quadraticCurveTo:function(t,e,n,r){this._+=\"Q\"+ +t+\",\"+ +e+\",\"+(this._x1=+n)+\",\"+(this._y1=+r)},bezierCurveTo:function(t,e,n,r,i,a){this._+=\"C\"+ +t+\",\"+ +e+\",\"+ +n+\",\"+ +r+\",\"+(this._x1=+i)+\",\"+(this._y1=+a)},arcTo:function(t,n,i,a,o){var s=this._x1,l=this._y1,c=(i=+i)-(t=+t),u=(a=+a)-(n=+n),h=s-t,d=l-n,f=h*h+d*d;if((o=+o)<0)throw new Error(\"negative radius: \"+o);if(null===this._x1)this._+=\"M\"+(this._x1=t)+\",\"+(this._y1=n);else if(f>r)if(Math.abs(d*c-u*h)>r&&o){var p=i-s,m=a-l,g=c*c+u*u,y=p*p+m*m,v=Math.sqrt(g),_=Math.sqrt(f),b=o*Math.tan((e-Math.acos((g+f-y)/(2*v*_)))/2),x=b/_,w=b/v;Math.abs(x-1)>r&&(this._+=\"L\"+(t+x*h)+\",\"+(n+x*d)),this._+=\"A\"+o+\",\"+o+\",0,0,\"+ +(d*p>h*m)+\",\"+(this._x1=t+w*c)+\",\"+(this._y1=n+w*u)}else this._+=\"L\"+(this._x1=t)+\",\"+(this._y1=n)},arc:function(t,a,o,s,l,c){t=+t,a=+a,c=!!c;var u=(o=+o)*Math.cos(s),h=o*Math.sin(s),d=t+u,f=a+h,p=1^c,m=c?s-l:l-s;if(o<0)throw new Error(\"negative radius: \"+o);null===this._x1?this._+=\"M\"+d+\",\"+f:(Math.abs(this._x1-d)>r||Math.abs(this._y1-f)>r)&&(this._+=\"L\"+d+\",\"+f),o&&(m<0&&(m=m%n+n),m>i?this._+=\"A\"+o+\",\"+o+\",0,1,\"+p+\",\"+(t-u)+\",\"+(a-h)+\"A\"+o+\",\"+o+\",0,1,\"+p+\",\"+(this._x1=d)+\",\"+(this._y1=f):m>r&&(this._+=\"A\"+o+\",\"+o+\",0,\"+ +(m>=e)+\",\"+p+\",\"+(this._x1=t+o*Math.cos(l))+\",\"+(this._y1=a+o*Math.sin(l))))},rect:function(t,e,n,r){this._+=\"M\"+(this._x0=this._x1=+t)+\",\"+(this._y0=this._y1=+e)+\"h\"+ +n+\"v\"+ +r+\"h\"+-n+\"Z\"},toString:function(){return this._}},t.path=o,Object.defineProperty(t,\"__esModule\",{value:!0})}(\"object\"==typeof n&&void 0!==e?n:(t=t||self).d3=t.d3||{})}(this)},{}],164:[function(t,e,n){!function(t,r){!function(t){\"use strict\";function e(t,e,n,r){if(isNaN(e)||isNaN(n))return t;var i,a,o,s,l,c,u,h,d,f=t._root,p={data:r},m=t._x0,g=t._y0,y=t._x1,v=t._y1;if(!f)return t._root=p,t;for(;f.length;)if((c=e>=(a=(m+y)/2))?m=a:y=a,(u=n>=(o=(g+v)/2))?g=o:v=o,i=f,!(f=f[h=u<<1|c]))return i[h]=p,t;if(s=+t._x.call(null,f.data),l=+t._y.call(null,f.data),e===s&&n===l)return p.next=f,i?i[h]=p:t._root=p,t;do{i=i?i[h]=new Array(4):t._root=new Array(4),(c=e>=(a=(m+y)/2))?m=a:y=a,(u=n>=(o=(g+v)/2))?g=o:v=o}while((h=u<<1|c)==(d=(l>=o)<<1|s>=a));return i[d]=f,i[h]=p,t}function n(t,e,n,r,i){this.node=t,this.x0=e,this.y0=n,this.x1=r,this.y1=i}function r(t){return t[0]}function i(t){return t[1]}function a(t,e,n){var a=new o(null==e?r:e,null==n?i:n,NaN,NaN,NaN,NaN);return null==t?a:a.addAll(t)}function o(t,e,n,r,i,a){this._x=t,this._y=e,this._x0=n,this._y0=r,this._x1=i,this._y1=a,this._root=void 0}function s(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}var l=a.prototype=o.prototype;l.copy=function(){var t,e,n=new o(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return n;if(!r.length)return n._root=s(r),n;for(t=[{source:r,target:n._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(e=r.source[i])&&(e.length?t.push({source:e,target:r.target[i]=new Array(4)}):r.target[i]=s(e));return n},l.add=function(t){var n=+this._x.call(null,t),r=+this._y.call(null,t);return e(this.cover(n,r),n,r,t)},l.addAll=function(t){var n,r,i,a,o=t.length,s=new Array(o),l=new Array(o),c=1/0,u=1/0,h=-1/0,d=-1/0;for(r=0;r<o;++r)isNaN(i=+this._x.call(null,n=t[r]))||isNaN(a=+this._y.call(null,n))||(s[r]=i,l[r]=a,i<c&&(c=i),i>h&&(h=i),a<u&&(u=a),a>d&&(d=a));if(c>h||u>d)return this;for(this.cover(c,u).cover(h,d),r=0;r<o;++r)e(this,s[r],l[r],t[r]);return this},l.cover=function(t,e){if(isNaN(t=+t)||isNaN(e=+e))return this;var n=this._x0,r=this._y0,i=this._x1,a=this._y1;if(isNaN(n))i=(n=Math.floor(t))+1,a=(r=Math.floor(e))+1;else{for(var o,s,l=i-n,c=this._root;n>t||t>=i||r>e||e>=a;)switch(s=(e<r)<<1|t<n,(o=new Array(4))[s]=c,c=o,l*=2,s){case 0:i=n+l,a=r+l;break;case 1:n=i-l,a=r+l;break;case 2:i=n+l,r=a-l;break;case 3:n=i-l,r=a-l}this._root&&this._root.length&&(this._root=c)}return this._x0=n,this._y0=r,this._x1=i,this._y1=a,this},l.data=function(){var t=[];return this.visit((function(e){if(!e.length)do{t.push(e.data)}while(e=e.next)})),t},l.extent=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},l.find=function(t,e,r){var i,a,o,s,l,c,u,h=this._x0,d=this._y0,f=this._x1,p=this._y1,m=[],g=this._root;for(g&&m.push(new n(g,h,d,f,p)),null==r?r=1/0:(h=t-r,d=e-r,f=t+r,p=e+r,r*=r);c=m.pop();)if(!(!(g=c.node)||(a=c.x0)>f||(o=c.y0)>p||(s=c.x1)<h||(l=c.y1)<d))if(g.length){var y=(a+s)/2,v=(o+l)/2;m.push(new n(g[3],y,v,s,l),new n(g[2],a,v,y,l),new n(g[1],y,o,s,v),new n(g[0],a,o,y,v)),(u=(e>=v)<<1|t>=y)&&(c=m[m.length-1],m[m.length-1]=m[m.length-1-u],m[m.length-1-u]=c)}else{var _=t-+this._x.call(null,g.data),b=e-+this._y.call(null,g.data),x=_*_+b*b;if(x<r){var w=Math.sqrt(r=x);h=t-w,d=e-w,f=t+w,p=e+w,i=g.data}}return i},l.remove=function(t){if(isNaN(a=+this._x.call(null,t))||isNaN(o=+this._y.call(null,t)))return this;var e,n,r,i,a,o,s,l,c,u,h,d,f=this._root,p=this._x0,m=this._y0,g=this._x1,y=this._y1;if(!f)return this;if(f.length)for(;;){if((c=a>=(s=(p+g)/2))?p=s:g=s,(u=o>=(l=(m+y)/2))?m=l:y=l,e=f,!(f=f[h=u<<1|c]))return this;if(!f.length)break;(e[h+1&3]||e[h+2&3]||e[h+3&3])&&(n=e,d=h)}for(;f.data!==t;)if(r=f,!(f=f.next))return this;return(i=f.next)&&delete f.next,r?(i?r.next=i:delete r.next,this):e?(i?e[h]=i:delete e[h],(f=e[0]||e[1]||e[2]||e[3])&&f===(e[3]||e[2]||e[1]||e[0])&&!f.length&&(n?n[d]=f:this._root=f),this):(this._root=i,this)},l.removeAll=function(t){for(var e=0,n=t.length;e<n;++e)this.remove(t[e]);return this},l.root=function(){return this._root},l.size=function(){var t=0;return this.visit((function(e){if(!e.length)do{++t}while(e=e.next)})),t},l.visit=function(t){var e,r,i,a,o,s,l=[],c=this._root;for(c&&l.push(new n(c,this._x0,this._y0,this._x1,this._y1));e=l.pop();)if(!t(c=e.node,i=e.x0,a=e.y0,o=e.x1,s=e.y1)&&c.length){var u=(i+o)/2,h=(a+s)/2;(r=c[3])&&l.push(new n(r,u,h,o,s)),(r=c[2])&&l.push(new n(r,i,h,u,s)),(r=c[1])&&l.push(new n(r,u,a,o,h)),(r=c[0])&&l.push(new n(r,i,a,u,h))}return this},l.visitAfter=function(t){var e,r=[],i=[];for(this._root&&r.push(new n(this._root,this._x0,this._y0,this._x1,this._y1));e=r.pop();){var a=e.node;if(a.length){var o,s=e.x0,l=e.y0,c=e.x1,u=e.y1,h=(s+c)/2,d=(l+u)/2;(o=a[0])&&r.push(new n(o,s,l,h,d)),(o=a[1])&&r.push(new n(o,h,l,c,d)),(o=a[2])&&r.push(new n(o,s,d,h,u)),(o=a[3])&&r.push(new n(o,h,d,c,u))}i.push(e)}for(;e=i.pop();)t(e.node,e.x0,e.y0,e.x1,e.y1);return this},l.x=function(t){return arguments.length?(this._x=t,this):this._x},l.y=function(t){return arguments.length?(this._y=t,this):this._y},t.quadtree=a,Object.defineProperty(t,\"__esModule\",{value:!0})}(\"object\"==typeof n&&void 0!==e?n:(t=t||self).d3=t.d3||{})}(this)},{}],165:[function(t,e,n){!function(r,i){\"object\"==typeof n&&void 0!==e?i(n,t(\"d3-path\")):i((r=r||self).d3=r.d3||{},r.d3)}(this,(function(t,e){\"use strict\";function n(t){return function(){return t}}var r=Math.abs,i=Math.atan2,a=Math.cos,o=Math.max,s=Math.min,l=Math.sin,c=Math.sqrt,u=1e-12,h=Math.PI,d=h/2,f=2*h;function p(t){return t>1?0:t<-1?h:Math.acos(t)}function m(t){return t>=1?d:t<=-1?-d:Math.asin(t)}function g(t){return t.innerRadius}function y(t){return t.outerRadius}function v(t){return t.startAngle}function _(t){return t.endAngle}function b(t){return t&&t.padAngle}function x(t,e,n,r,i,a,o,s){var l=n-t,c=r-e,h=o-i,d=s-a,f=d*l-h*c;if(!(f*f<u))return[t+(f=(h*(e-a)-d*(t-i))/f)*l,e+f*c]}function w(t,e,n,r,i,a,s){var l=t-n,u=e-r,h=(s?a:-a)/c(l*l+u*u),d=h*u,f=-h*l,p=t+d,m=e+f,g=n+d,y=r+f,v=(p+g)/2,_=(m+y)/2,b=g-p,x=y-m,w=b*b+x*x,k=i-a,M=p*y-g*m,T=(x<0?-1:1)*c(o(0,k*k*w-M*M)),S=(M*x-b*T)/w,A=(-M*b-x*T)/w,L=(M*x+b*T)/w,C=(-M*b+x*T)/w,E=S-v,O=A-_,D=L-v,I=C-_;return E*E+O*O>D*D+I*I&&(S=L,A=C),{cx:S,cy:A,x01:-d,y01:-f,x11:S*(i/k-1),y11:A*(i/k-1)}}function k(t){this._context=t}function M(t){return new k(t)}function T(t){return t[0]}function S(t){return t[1]}function A(){var t=T,r=S,i=n(!0),a=null,o=M,s=null;function l(n){var l,c,u,h=n.length,d=!1;for(null==a&&(s=o(u=e.path())),l=0;l<=h;++l)!(l<h&&i(c=n[l],l,n))===d&&((d=!d)?s.lineStart():s.lineEnd()),d&&s.point(+t(c,l,n),+r(c,l,n));if(u)return s=null,u+\"\"||null}return l.x=function(e){return arguments.length?(t=\"function\"==typeof e?e:n(+e),l):t},l.y=function(t){return arguments.length?(r=\"function\"==typeof t?t:n(+t),l):r},l.defined=function(t){return arguments.length?(i=\"function\"==typeof t?t:n(!!t),l):i},l.curve=function(t){return arguments.length?(o=t,null!=a&&(s=o(a)),l):o},l.context=function(t){return arguments.length?(null==t?a=s=null:s=o(a=t),l):a},l}function L(){var t=T,r=null,i=n(0),a=S,o=n(!0),s=null,l=M,c=null;function u(n){var u,h,d,f,p,m=n.length,g=!1,y=new Array(m),v=new Array(m);for(null==s&&(c=l(p=e.path())),u=0;u<=m;++u){if(!(u<m&&o(f=n[u],u,n))===g)if(g=!g)h=u,c.areaStart(),c.lineStart();else{for(c.lineEnd(),c.lineStart(),d=u-1;d>=h;--d)c.point(y[d],v[d]);c.lineEnd(),c.areaEnd()}g&&(y[u]=+t(f,u,n),v[u]=+i(f,u,n),c.point(r?+r(f,u,n):y[u],a?+a(f,u,n):v[u]))}if(p)return c=null,p+\"\"||null}function h(){return A().defined(o).curve(l).context(s)}return u.x=function(e){return arguments.length?(t=\"function\"==typeof e?e:n(+e),r=null,u):t},u.x0=function(e){return arguments.length?(t=\"function\"==typeof e?e:n(+e),u):t},u.x1=function(t){return arguments.length?(r=null==t?null:\"function\"==typeof t?t:n(+t),u):r},u.y=function(t){return arguments.length?(i=\"function\"==typeof t?t:n(+t),a=null,u):i},u.y0=function(t){return arguments.length?(i=\"function\"==typeof t?t:n(+t),u):i},u.y1=function(t){return arguments.length?(a=null==t?null:\"function\"==typeof t?t:n(+t),u):a},u.lineX0=u.lineY0=function(){return h().x(t).y(i)},u.lineY1=function(){return h().x(t).y(a)},u.lineX1=function(){return h().x(r).y(i)},u.defined=function(t){return arguments.length?(o=\"function\"==typeof t?t:n(!!t),u):o},u.curve=function(t){return arguments.length?(l=t,null!=s&&(c=l(s)),u):l},u.context=function(t){return arguments.length?(null==t?s=c=null:c=l(s=t),u):s},u}function C(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}function E(t){return t}k.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}};var O=I(M);function D(t){this._curve=t}function I(t){function e(e){return new D(t(e))}return e._curve=t,e}function P(t){var e=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?e(I(t)):e()._curve},t}function R(){return P(A().curve(O))}function z(){var t=L().curve(O),e=t.curve,n=t.lineX0,r=t.lineX1,i=t.lineY0,a=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return P(n())},delete t.lineX0,t.lineEndAngle=function(){return P(r())},delete t.lineX1,t.lineInnerRadius=function(){return P(i())},delete t.lineY0,t.lineOuterRadius=function(){return P(a())},delete t.lineY1,t.curve=function(t){return arguments.length?e(I(t)):e()._curve},t}function j(t,e){return[(e=+e)*Math.cos(t-=Math.PI/2),e*Math.sin(t)]}D.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,e){this._curve.point(e*Math.sin(t),e*-Math.cos(t))}};var F=Array.prototype.slice;function N(t){return t.source}function B(t){return t.target}function Y(t){var r=N,i=B,a=T,o=S,s=null;function l(){var n,l=F.call(arguments),c=r.apply(this,l),u=i.apply(this,l);if(s||(s=n=e.path()),t(s,+a.apply(this,(l[0]=c,l)),+o.apply(this,l),+a.apply(this,(l[0]=u,l)),+o.apply(this,l)),n)return s=null,n+\"\"||null}return l.source=function(t){return arguments.length?(r=t,l):r},l.target=function(t){return arguments.length?(i=t,l):i},l.x=function(t){return arguments.length?(a=\"function\"==typeof t?t:n(+t),l):a},l.y=function(t){return arguments.length?(o=\"function\"==typeof t?t:n(+t),l):o},l.context=function(t){return arguments.length?(s=null==t?null:t,l):s},l}function H(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e=(e+r)/2,n,e,i,r,i)}function V(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e,n=(n+i)/2,r,n,r,i)}function U(t,e,n,r,i){var a=j(e,n),o=j(e,n=(n+i)/2),s=j(r,n),l=j(r,i);t.moveTo(a[0],a[1]),t.bezierCurveTo(o[0],o[1],s[0],s[1],l[0],l[1])}var W={draw:function(t,e){var n=Math.sqrt(e/h);t.moveTo(n,0),t.arc(0,0,n,0,f)}},q={draw:function(t,e){var n=Math.sqrt(e/5)/2;t.moveTo(-3*n,-n),t.lineTo(-n,-n),t.lineTo(-n,-3*n),t.lineTo(n,-3*n),t.lineTo(n,-n),t.lineTo(3*n,-n),t.lineTo(3*n,n),t.lineTo(n,n),t.lineTo(n,3*n),t.lineTo(-n,3*n),t.lineTo(-n,n),t.lineTo(-3*n,n),t.closePath()}},G=Math.sqrt(1/3),X=2*G,Z={draw:function(t,e){var n=Math.sqrt(e/X),r=n*G;t.moveTo(0,-n),t.lineTo(r,0),t.lineTo(0,n),t.lineTo(-r,0),t.closePath()}},J=Math.sin(h/10)/Math.sin(7*h/10),K=Math.sin(f/10)*J,$=-Math.cos(f/10)*J,Q={draw:function(t,e){var n=Math.sqrt(.8908130915292852*e),r=K*n,i=$*n;t.moveTo(0,-n),t.lineTo(r,i);for(var a=1;a<5;++a){var o=f*a/5,s=Math.cos(o),l=Math.sin(o);t.lineTo(l*n,-s*n),t.lineTo(s*r-l*i,l*r+s*i)}t.closePath()}},tt={draw:function(t,e){var n=Math.sqrt(e),r=-n/2;t.rect(r,r,n,n)}},et=Math.sqrt(3),nt={draw:function(t,e){var n=-Math.sqrt(e/(3*et));t.moveTo(0,2*n),t.lineTo(-et*n,-n),t.lineTo(et*n,-n),t.closePath()}},rt=-.5,it=Math.sqrt(3)/2,at=1/Math.sqrt(12),ot=3*(at/2+1),st={draw:function(t,e){var n=Math.sqrt(e/ot),r=n/2,i=n*at,a=r,o=n*at+n,s=-a,l=o;t.moveTo(r,i),t.lineTo(a,o),t.lineTo(s,l),t.lineTo(rt*r-it*i,it*r+rt*i),t.lineTo(rt*a-it*o,it*a+rt*o),t.lineTo(rt*s-it*l,it*s+rt*l),t.lineTo(rt*r+it*i,rt*i-it*r),t.lineTo(rt*a+it*o,rt*o-it*a),t.lineTo(rt*s+it*l,rt*l-it*s),t.closePath()}},lt=[W,q,Z,tt,Q,nt,st];function ct(){}function ut(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function ht(t){this._context=t}function dt(t){this._context=t}function ft(t){this._context=t}function pt(t,e){this._basis=new ht(t),this._beta=e}ht.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:ut(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:ut(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},dt.prototype={areaStart:ct,areaEnd:ct,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:ut(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ft.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:ut(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},pt.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,n=t.length-1;if(n>0)for(var r,i=t[0],a=e[0],o=t[n]-i,s=e[n]-a,l=-1;++l<=n;)this._basis.point(this._beta*t[l]+(1-this._beta)*(i+(r=l/n)*o),this._beta*e[l]+(1-this._beta)*(a+r*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var mt=function t(e){function n(t){return 1===e?new ht(t):new pt(t,e)}return n.beta=function(e){return t(+e)},n}(.85);function gt(t,e,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function yt(t,e){this._context=t,this._k=(1-e)/6}yt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:gt(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:gt(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var vt=function t(e){function n(t){return new yt(t,e)}return n.tension=function(e){return t(+e)},n}(0);function _t(t,e){this._context=t,this._k=(1-e)/6}_t.prototype={areaStart:ct,areaEnd:ct,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:gt(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var bt=function t(e){function n(t){return new _t(t,e)}return n.tension=function(e){return t(+e)},n}(0);function xt(t,e){this._context=t,this._k=(1-e)/6}xt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:gt(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var wt=function t(e){function n(t){return new xt(t,e)}return n.tension=function(e){return t(+e)},n}(0);function kt(t,e,n){var r=t._x1,i=t._y1,a=t._x2,o=t._y2;if(t._l01_a>u){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,l=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/l,i=(i*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/l}if(t._l23_a>u){var c=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,h=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*c+t._x1*t._l23_2a-e*t._l12_2a)/h,o=(o*c+t._y1*t._l23_2a-n*t._l12_2a)/h}t._context.bezierCurveTo(r,i,a,o,t._x2,t._y2)}function Mt(t,e){this._context=t,this._alpha=e}Mt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:kt(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Tt=function t(e){function n(t){return e?new Mt(t,e):new yt(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function St(t,e){this._context=t,this._alpha=e}St.prototype={areaStart:ct,areaEnd:ct,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:kt(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var At=function t(e){function n(t){return e?new St(t,e):new _t(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Lt(t,e){this._context=t,this._alpha=e}Lt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:kt(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Ct=function t(e){function n(t){return e?new Lt(t,e):new xt(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Et(t){this._context=t}function Ot(t){return t<0?-1:1}function Dt(t,e,n){var r=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(r||i<0&&-0),o=(n-t._y1)/(i||r<0&&-0),s=(a*i+o*r)/(r+i);return(Ot(a)+Ot(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function It(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function Pt(t,e,n){var r=t._x0,i=t._x1,a=t._y1,o=(i-r)/3;t._context.bezierCurveTo(r+o,t._y0+o*e,i-o,a-o*n,i,a)}function Rt(t){this._context=t}function zt(t){this._context=new jt(t)}function jt(t){this._context=t}function Ft(t){this._context=t}function Nt(t){var e,n,r=t.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=t[0]+2*t[1],e=1;e<r-1;++e)i[e]=1,a[e]=4,o[e]=4*t[e]+2*t[e+1];for(i[r-1]=2,a[r-1]=7,o[r-1]=8*t[r-1]+t[r],e=1;e<r;++e)a[e]-=n=i[e]/a[e-1],o[e]-=n*o[e-1];for(i[r-1]=o[r-1]/a[r-1],e=r-2;e>=0;--e)i[e]=(o[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e<r-1;++e)a[e]=2*t[e+1]-i[e+1];return[i,a]}function Bt(t,e){this._context=t,this._t=e}function Yt(t,e){if((i=t.length)>1)for(var n,r,i,a=1,o=t[e[0]],s=o.length;a<i;++a)for(r=o,o=t[e[a]],n=0;n<s;++n)o[n][1]+=o[n][0]=isNaN(r[n][1])?r[n][0]:r[n][1]}function Ht(t){for(var e=t.length,n=new Array(e);--e>=0;)n[e]=e;return n}function Vt(t,e){return t[e]}function Ut(t){var e=t.map(Wt);return Ht(t).sort((function(t,n){return e[t]-e[n]}))}function Wt(t){for(var e,n=-1,r=0,i=t.length,a=-1/0;++n<i;)(e=+t[n][1])>a&&(a=e,r=n);return r}function qt(t){var e=t.map(Gt);return Ht(t).sort((function(t,n){return e[t]-e[n]}))}function Gt(t){for(var e,n=0,r=-1,i=t.length;++r<i;)(e=+t[r][1])&&(n+=e);return n}Et.prototype={areaStart:ct,areaEnd:ct,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}},Rt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Pt(this,this._t0,It(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var n=NaN;if(e=+e,(t=+t)!==this._x1||e!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,Pt(this,It(this,n=Dt(this,t,e)),n);break;default:Pt(this,this._t0,n=Dt(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=n}}},(zt.prototype=Object.create(Rt.prototype)).point=function(t,e){Rt.prototype.point.call(this,e,t)},jt.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,n,r,i,a){this._context.bezierCurveTo(e,t,r,n,a,i)}},Ft.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,n=t.length;if(n)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),2===n)this._context.lineTo(t[1],e[1]);else for(var r=Nt(t),i=Nt(e),a=0,o=1;o<n;++a,++o)this._context.bezierCurveTo(r[0][a],i[0][a],r[1][a],i[1][a],t[o],e[o]);(this._line||0!==this._line&&1===n)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,e){this._x.push(+t),this._y.push(+e)}},Bt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}},t.arc=function(){var t=g,o=y,k=n(0),M=null,T=v,S=_,A=b,L=null;function C(){var n,g,y=+t.apply(this,arguments),v=+o.apply(this,arguments),_=T.apply(this,arguments)-d,b=S.apply(this,arguments)-d,C=r(b-_),E=b>_;if(L||(L=n=e.path()),v<y&&(g=v,v=y,y=g),v>u)if(C>f-u)L.moveTo(v*a(_),v*l(_)),L.arc(0,0,v,_,b,!E),y>u&&(L.moveTo(y*a(b),y*l(b)),L.arc(0,0,y,b,_,E));else{var O,D,I=_,P=b,R=_,z=b,j=C,F=C,N=A.apply(this,arguments)/2,B=N>u&&(M?+M.apply(this,arguments):c(y*y+v*v)),Y=s(r(v-y)/2,+k.apply(this,arguments)),H=Y,V=Y;if(B>u){var U=m(B/y*l(N)),W=m(B/v*l(N));(j-=2*U)>u?(R+=U*=E?1:-1,z-=U):(j=0,R=z=(_+b)/2),(F-=2*W)>u?(I+=W*=E?1:-1,P-=W):(F=0,I=P=(_+b)/2)}var q=v*a(I),G=v*l(I),X=y*a(z),Z=y*l(z);if(Y>u){var J,K=v*a(P),$=v*l(P),Q=y*a(R),tt=y*l(R);if(C<h&&(J=x(q,G,Q,tt,K,$,X,Z))){var et=q-J[0],nt=G-J[1],rt=K-J[0],it=$-J[1],at=1/l(p((et*rt+nt*it)/(c(et*et+nt*nt)*c(rt*rt+it*it)))/2),ot=c(J[0]*J[0]+J[1]*J[1]);H=s(Y,(y-ot)/(at-1)),V=s(Y,(v-ot)/(at+1))}}F>u?V>u?(O=w(Q,tt,q,G,v,V,E),D=w(K,$,X,Z,v,V,E),L.moveTo(O.cx+O.x01,O.cy+O.y01),V<Y?L.arc(O.cx,O.cy,V,i(O.y01,O.x01),i(D.y01,D.x01),!E):(L.arc(O.cx,O.cy,V,i(O.y01,O.x01),i(O.y11,O.x11),!E),L.arc(0,0,v,i(O.cy+O.y11,O.cx+O.x11),i(D.cy+D.y11,D.cx+D.x11),!E),L.arc(D.cx,D.cy,V,i(D.y11,D.x11),i(D.y01,D.x01),!E))):(L.moveTo(q,G),L.arc(0,0,v,I,P,!E)):L.moveTo(q,G),y>u&&j>u?H>u?(O=w(X,Z,K,$,y,-H,E),D=w(q,G,Q,tt,y,-H,E),L.lineTo(O.cx+O.x01,O.cy+O.y01),H<Y?L.arc(O.cx,O.cy,H,i(O.y01,O.x01),i(D.y01,D.x01),!E):(L.arc(O.cx,O.cy,H,i(O.y01,O.x01),i(O.y11,O.x11),!E),L.arc(0,0,y,i(O.cy+O.y11,O.cx+O.x11),i(D.cy+D.y11,D.cx+D.x11),E),L.arc(D.cx,D.cy,H,i(D.y11,D.x11),i(D.y01,D.x01),!E))):L.arc(0,0,y,z,R,E):L.lineTo(X,Z)}else L.moveTo(0,0);if(L.closePath(),n)return L=null,n+\"\"||null}return C.centroid=function(){var e=(+t.apply(this,arguments)+ +o.apply(this,arguments))/2,n=(+T.apply(this,arguments)+ +S.apply(this,arguments))/2-h/2;return[a(n)*e,l(n)*e]},C.innerRadius=function(e){return arguments.length?(t=\"function\"==typeof e?e:n(+e),C):t},C.outerRadius=function(t){return arguments.length?(o=\"function\"==typeof t?t:n(+t),C):o},C.cornerRadius=function(t){return arguments.length?(k=\"function\"==typeof t?t:n(+t),C):k},C.padRadius=function(t){return arguments.length?(M=null==t?null:\"function\"==typeof t?t:n(+t),C):M},C.startAngle=function(t){return arguments.length?(T=\"function\"==typeof t?t:n(+t),C):T},C.endAngle=function(t){return arguments.length?(S=\"function\"==typeof t?t:n(+t),C):S},C.padAngle=function(t){return arguments.length?(A=\"function\"==typeof t?t:n(+t),C):A},C.context=function(t){return arguments.length?(L=null==t?null:t,C):L},C},t.area=L,t.areaRadial=z,t.curveBasis=function(t){return new ht(t)},t.curveBasisClosed=function(t){return new dt(t)},t.curveBasisOpen=function(t){return new ft(t)},t.curveBundle=mt,t.curveCardinal=vt,t.curveCardinalClosed=bt,t.curveCardinalOpen=wt,t.curveCatmullRom=Tt,t.curveCatmullRomClosed=At,t.curveCatmullRomOpen=Ct,t.curveLinear=M,t.curveLinearClosed=function(t){return new Et(t)},t.curveMonotoneX=function(t){return new Rt(t)},t.curveMonotoneY=function(t){return new zt(t)},t.curveNatural=function(t){return new Ft(t)},t.curveStep=function(t){return new Bt(t,.5)},t.curveStepAfter=function(t){return new Bt(t,1)},t.curveStepBefore=function(t){return new Bt(t,0)},t.line=A,t.lineRadial=R,t.linkHorizontal=function(){return Y(H)},t.linkRadial=function(){var t=Y(U);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t},t.linkVertical=function(){return Y(V)},t.pie=function(){var t=E,e=C,r=null,i=n(0),a=n(f),o=n(0);function s(n){var s,l,c,u,h,d=n.length,p=0,m=new Array(d),g=new Array(d),y=+i.apply(this,arguments),v=Math.min(f,Math.max(-f,a.apply(this,arguments)-y)),_=Math.min(Math.abs(v)/d,o.apply(this,arguments)),b=_*(v<0?-1:1);for(s=0;s<d;++s)(h=g[m[s]=s]=+t(n[s],s,n))>0&&(p+=h);for(null!=e?m.sort((function(t,n){return e(g[t],g[n])})):null!=r&&m.sort((function(t,e){return r(n[t],n[e])})),s=0,c=p?(v-d*b)/p:0;s<d;++s,y=u)g[l=m[s]]={data:n[l],index:s,value:h=g[l],startAngle:y,endAngle:u=y+(h>0?h*c:0)+b,padAngle:_};return g}return s.value=function(e){return arguments.length?(t=\"function\"==typeof e?e:n(+e),s):t},s.sortValues=function(t){return arguments.length?(e=t,r=null,s):e},s.sort=function(t){return arguments.length?(r=t,e=null,s):r},s.startAngle=function(t){return arguments.length?(i=\"function\"==typeof t?t:n(+t),s):i},s.endAngle=function(t){return arguments.length?(a=\"function\"==typeof t?t:n(+t),s):a},s.padAngle=function(t){return arguments.length?(o=\"function\"==typeof t?t:n(+t),s):o},s},t.pointRadial=j,t.radialArea=z,t.radialLine=R,t.stack=function(){var t=n([]),e=Ht,r=Yt,i=Vt;function a(n){var a,o,s=t.apply(this,arguments),l=n.length,c=s.length,u=new Array(c);for(a=0;a<c;++a){for(var h,d=s[a],f=u[a]=new Array(l),p=0;p<l;++p)f[p]=h=[0,+i(n[p],d,p,n)],h.data=n[p];f.key=d}for(a=0,o=e(u);a<c;++a)u[o[a]].index=a;return r(u,o),u}return a.keys=function(e){return arguments.length?(t=\"function\"==typeof e?e:n(F.call(e)),a):t},a.value=function(t){return arguments.length?(i=\"function\"==typeof t?t:n(+t),a):i},a.order=function(t){return arguments.length?(e=null==t?Ht:\"function\"==typeof t?t:n(F.call(t)),a):e},a.offset=function(t){return arguments.length?(r=null==t?Yt:t,a):r},a},t.stackOffsetDiverging=function(t,e){if((s=t.length)>0)for(var n,r,i,a,o,s,l=0,c=t[e[0]].length;l<c;++l)for(a=o=0,n=0;n<s;++n)(i=(r=t[e[n]][l])[1]-r[0])>0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):(r[0]=0,r[1]=i)},t.stackOffsetExpand=function(t,e){if((r=t.length)>0){for(var n,r,i,a=0,o=t[0].length;a<o;++a){for(i=n=0;n<r;++n)i+=t[n][a][1]||0;if(i)for(n=0;n<r;++n)t[n][a][1]/=i}Yt(t,e)}},t.stackOffsetNone=Yt,t.stackOffsetSilhouette=function(t,e){if((n=t.length)>0){for(var n,r=0,i=t[e[0]],a=i.length;r<a;++r){for(var o=0,s=0;o<n;++o)s+=t[o][r][1]||0;i[r][1]+=i[r][0]=-s/2}Yt(t,e)}},t.stackOffsetWiggle=function(t,e){if((i=t.length)>0&&(r=(n=t[e[0]]).length)>0){for(var n,r,i,a=0,o=1;o<r;++o){for(var s=0,l=0,c=0;s<i;++s){for(var u=t[e[s]],h=u[o][1]||0,d=(h-(u[o-1][1]||0))/2,f=0;f<s;++f){var p=t[e[f]];d+=(p[o][1]||0)-(p[o-1][1]||0)}l+=h,c+=d*h}n[o-1][1]+=n[o-1][0]=a,l&&(a-=c/l)}n[o-1][1]+=n[o-1][0]=a,Yt(t,e)}},t.stackOrderAppearance=Ut,t.stackOrderAscending=qt,t.stackOrderDescending=function(t){return qt(t).reverse()},t.stackOrderInsideOut=function(t){var e,n,r=t.length,i=t.map(Gt),a=Ut(t),o=0,s=0,l=[],c=[];for(e=0;e<r;++e)n=a[e],o<s?(o+=i[n],l.push(n)):(s+=i[n],c.push(n));return c.reverse().concat(l)},t.stackOrderNone=Ht,t.stackOrderReverse=function(t){return Ht(t).reverse()},t.symbol=function(){var t=n(W),r=n(64),i=null;function a(){var n;if(i||(i=n=e.path()),t.apply(this,arguments).draw(i,+r.apply(this,arguments)),n)return i=null,n+\"\"||null}return a.type=function(e){return arguments.length?(t=\"function\"==typeof e?e:n(e),a):t},a.size=function(t){return arguments.length?(r=\"function\"==typeof t?t:n(+t),a):r},a.context=function(t){return arguments.length?(i=null==t?null:t,a):i},a},t.symbolCircle=W,t.symbolCross=q,t.symbolDiamond=Z,t.symbolSquare=tt,t.symbolStar=Q,t.symbolTriangle=nt,t.symbolWye=st,t.symbols=lt,Object.defineProperty(t,\"__esModule\",{value:!0})}))},{\"d3-path\":163}],166:[function(t,e,n){!function(r,i){\"object\"==typeof n&&void 0!==e?i(n,t(\"d3-time\")):i((r=r||self).d3=r.d3||{},r.d3)}(this,(function(t,e){\"use strict\";function n(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function r(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function i(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}function a(t){var a=t.dateTime,o=t.date,l=t.time,c=t.periods,u=t.days,h=t.shortDays,d=t.months,vt=t.shortMonths,_t=f(c),bt=p(c),xt=f(u),wt=p(u),kt=f(h),Mt=p(h),Tt=f(d),St=p(d),At=f(vt),Lt=p(vt),Ct={a:function(t){return h[t.getDay()]},A:function(t){return u[t.getDay()]},b:function(t){return vt[t.getMonth()]},B:function(t){return d[t.getMonth()]},c:null,d:R,e:R,f:B,H:z,I:j,j:F,L:N,m:Y,M:H,p:function(t){return c[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:gt,s:yt,S:V,u:U,U:W,V:q,w:G,W:X,x:null,X:null,y:Z,Y:J,Z:K,\"%\":mt},Et={a:function(t){return h[t.getUTCDay()]},A:function(t){return u[t.getUTCDay()]},b:function(t){return vt[t.getUTCMonth()]},B:function(t){return d[t.getUTCMonth()]},c:null,d:$,e:$,f:rt,H:Q,I:tt,j:et,L:nt,m:it,M:at,p:function(t){return c[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:gt,s:yt,S:ot,u:st,U:lt,V:ct,w:ut,W:ht,x:null,X:null,y:dt,Y:ft,Z:pt,\"%\":mt},Ot={a:function(t,e,n){var r=kt.exec(e.slice(n));return r?(t.w=Mt[r[0].toLowerCase()],n+r[0].length):-1},A:function(t,e,n){var r=xt.exec(e.slice(n));return r?(t.w=wt[r[0].toLowerCase()],n+r[0].length):-1},b:function(t,e,n){var r=At.exec(e.slice(n));return r?(t.m=Lt[r[0].toLowerCase()],n+r[0].length):-1},B:function(t,e,n){var r=Tt.exec(e.slice(n));return r?(t.m=St[r[0].toLowerCase()],n+r[0].length):-1},c:function(t,e,n){return Pt(t,a,e,n)},d:T,e:T,f:O,H:A,I:A,j:S,L:E,m:M,M:L,p:function(t,e,n){var r=_t.exec(e.slice(n));return r?(t.p=bt[r[0].toLowerCase()],n+r[0].length):-1},q:k,Q:I,s:P,S:C,u:g,U:y,V:v,w:m,W:_,x:function(t,e,n){return Pt(t,o,e,n)},X:function(t,e,n){return Pt(t,l,e,n)},y:x,Y:b,Z:w,\"%\":D};function Dt(t,e){return function(n){var r,i,a,o=[],l=-1,c=0,u=t.length;for(n instanceof Date||(n=new Date(+n));++l<u;)37===t.charCodeAt(l)&&(o.push(t.slice(c,l)),null!=(i=s[r=t.charAt(++l)])?r=t.charAt(++l):i=\"e\"===r?\" \":\"0\",(a=e[r])&&(r=a(n,i)),o.push(r),c=l+1);return o.push(t.slice(c,l)),o.join(\"\")}}function It(t,a){return function(o){var s,l,c=i(1900,void 0,1);if(Pt(c,t,o+=\"\",0)!=o.length)return null;if(\"Q\"in c)return new Date(c.Q);if(\"s\"in c)return new Date(1e3*c.s+(\"L\"in c?c.L:0));if(a&&!(\"Z\"in c)&&(c.Z=0),\"p\"in c&&(c.H=c.H%12+12*c.p),void 0===c.m&&(c.m=\"q\"in c?c.q:0),\"V\"in c){if(c.V<1||c.V>53)return null;\"w\"in c||(c.w=1),\"Z\"in c?(l=(s=r(i(c.y,0,1))).getUTCDay(),s=l>4||0===l?e.utcMonday.ceil(s):e.utcMonday(s),s=e.utcDay.offset(s,7*(c.V-1)),c.y=s.getUTCFullYear(),c.m=s.getUTCMonth(),c.d=s.getUTCDate()+(c.w+6)%7):(l=(s=n(i(c.y,0,1))).getDay(),s=l>4||0===l?e.timeMonday.ceil(s):e.timeMonday(s),s=e.timeDay.offset(s,7*(c.V-1)),c.y=s.getFullYear(),c.m=s.getMonth(),c.d=s.getDate()+(c.w+6)%7)}else(\"W\"in c||\"U\"in c)&&(\"w\"in c||(c.w=\"u\"in c?c.u%7:\"W\"in c?1:0),l=\"Z\"in c?r(i(c.y,0,1)).getUTCDay():n(i(c.y,0,1)).getDay(),c.m=0,c.d=\"W\"in c?(c.w+6)%7+7*c.W-(l+5)%7:c.w+7*c.U-(l+6)%7);return\"Z\"in c?(c.H+=c.Z/100|0,c.M+=c.Z%100,r(c)):n(c)}}function Pt(t,e,n,r){for(var i,a,o=0,l=e.length,c=n.length;o<l;){if(r>=c)return-1;if(37===(i=e.charCodeAt(o++))){if(i=e.charAt(o++),!(a=Ot[i in s?e.charAt(o++):i])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return Ct.x=Dt(o,Ct),Ct.X=Dt(l,Ct),Ct.c=Dt(a,Ct),Et.x=Dt(o,Et),Et.X=Dt(l,Et),Et.c=Dt(a,Et),{format:function(t){var e=Dt(t+=\"\",Ct);return e.toString=function(){return t},e},parse:function(t){var e=It(t+=\"\",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=Dt(t+=\"\",Et);return e.toString=function(){return t},e},utcParse:function(t){var e=It(t+=\"\",!0);return e.toString=function(){return t},e}}}var o,s={\"-\":\"\",_:\" \",0:\"0\"},l=/^\\s*\\d+/,c=/^%/,u=/[\\\\^$*+?|[\\]().{}]/g;function h(t,e,n){var r=t<0?\"-\":\"\",i=(r?-t:t)+\"\",a=i.length;return r+(a<n?new Array(n-a+1).join(e)+i:i)}function d(t){return t.replace(u,\"\\\\$&\")}function f(t){return new RegExp(\"^(?:\"+t.map(d).join(\"|\")+\")\",\"i\")}function p(t){for(var e={},n=-1,r=t.length;++n<r;)e[t[n].toLowerCase()]=n;return e}function m(t,e,n){var r=l.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function g(t,e,n){var r=l.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function y(t,e,n){var r=l.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function v(t,e,n){var r=l.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function _(t,e,n){var r=l.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function b(t,e,n){var r=l.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function x(t,e,n){var r=l.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function w(t,e,n){var r=/^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||\"00\")),n+r[0].length):-1}function k(t,e,n){var r=l.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function M(t,e,n){var r=l.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function T(t,e,n){var r=l.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function S(t,e,n){var r=l.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function A(t,e,n){var r=l.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function L(t,e,n){var r=l.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function C(t,e,n){var r=l.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function E(t,e,n){var r=l.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function O(t,e,n){var r=l.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function D(t,e,n){var r=c.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function I(t,e,n){var r=l.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function P(t,e,n){var r=l.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function R(t,e){return h(t.getDate(),e,2)}function z(t,e){return h(t.getHours(),e,2)}function j(t,e){return h(t.getHours()%12||12,e,2)}function F(t,n){return h(1+e.timeDay.count(e.timeYear(t),t),n,3)}function N(t,e){return h(t.getMilliseconds(),e,3)}function B(t,e){return N(t,e)+\"000\"}function Y(t,e){return h(t.getMonth()+1,e,2)}function H(t,e){return h(t.getMinutes(),e,2)}function V(t,e){return h(t.getSeconds(),e,2)}function U(t){var e=t.getDay();return 0===e?7:e}function W(t,n){return h(e.timeSunday.count(e.timeYear(t)-1,t),n,2)}function q(t,n){var r=t.getDay();return t=r>=4||0===r?e.timeThursday(t):e.timeThursday.ceil(t),h(e.timeThursday.count(e.timeYear(t),t)+(4===e.timeYear(t).getDay()),n,2)}function G(t){return t.getDay()}function X(t,n){return h(e.timeMonday.count(e.timeYear(t)-1,t),n,2)}function Z(t,e){return h(t.getFullYear()%100,e,2)}function J(t,e){return h(t.getFullYear()%1e4,e,4)}function K(t){var e=t.getTimezoneOffset();return(e>0?\"-\":(e*=-1,\"+\"))+h(e/60|0,\"0\",2)+h(e%60,\"0\",2)}function $(t,e){return h(t.getUTCDate(),e,2)}function Q(t,e){return h(t.getUTCHours(),e,2)}function tt(t,e){return h(t.getUTCHours()%12||12,e,2)}function et(t,n){return h(1+e.utcDay.count(e.utcYear(t),t),n,3)}function nt(t,e){return h(t.getUTCMilliseconds(),e,3)}function rt(t,e){return nt(t,e)+\"000\"}function it(t,e){return h(t.getUTCMonth()+1,e,2)}function at(t,e){return h(t.getUTCMinutes(),e,2)}function ot(t,e){return h(t.getUTCSeconds(),e,2)}function st(t){var e=t.getUTCDay();return 0===e?7:e}function lt(t,n){return h(e.utcSunday.count(e.utcYear(t)-1,t),n,2)}function ct(t,n){var r=t.getUTCDay();return t=r>=4||0===r?e.utcThursday(t):e.utcThursday.ceil(t),h(e.utcThursday.count(e.utcYear(t),t)+(4===e.utcYear(t).getUTCDay()),n,2)}function ut(t){return t.getUTCDay()}function ht(t,n){return h(e.utcMonday.count(e.utcYear(t)-1,t),n,2)}function dt(t,e){return h(t.getUTCFullYear()%100,e,2)}function ft(t,e){return h(t.getUTCFullYear()%1e4,e,4)}function pt(){return\"+0000\"}function mt(){return\"%\"}function gt(t){return+t}function yt(t){return Math.floor(+t/1e3)}function vt(e){return o=a(e),t.timeFormat=o.format,t.timeParse=o.parse,t.utcFormat=o.utcFormat,t.utcParse=o.utcParse,o}vt({dateTime:\"%x, %X\",date:\"%-m/%-d/%Y\",time:\"%-I:%M:%S %p\",periods:[\"AM\",\"PM\"],days:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],shortDays:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],shortMonths:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]});var _t=\"%Y-%m-%dT%H:%M:%S.%LZ\",bt=Date.prototype.toISOString?function(t){return t.toISOString()}:t.utcFormat(_t),xt=+new Date(\"2000-01-01T00:00:00.000Z\")?function(t){var e=new Date(t);return isNaN(e)?null:e}:t.utcParse(_t);t.isoFormat=bt,t.isoParse=xt,t.timeFormatDefaultLocale=vt,t.timeFormatLocale=a,Object.defineProperty(t,\"__esModule\",{value:!0})}))},{\"d3-time\":167}],167:[function(t,e,n){!function(t,r){!function(t){\"use strict\";var e=new Date,n=new Date;function r(t,i,a,o){function s(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return s.floor=function(e){return t(e=new Date(+e)),e},s.ceil=function(e){return t(e=new Date(e-1)),i(e,1),t(e),e},s.round=function(t){var e=s(t),n=s.ceil(t);return t-e<n-t?e:n},s.offset=function(t,e){return i(t=new Date(+t),null==e?1:Math.floor(e)),t},s.range=function(e,n,r){var a,o=[];if(e=s.ceil(e),r=null==r?1:Math.floor(r),!(e<n&&r>0))return o;do{o.push(a=new Date(+e)),i(e,r),t(e)}while(a<e&&e<n);return o},s.filter=function(e){return r((function(n){if(n>=n)for(;t(n),!e(n);)n.setTime(n-1)}),(function(t,n){if(t>=t)if(n<0)for(;++n<=0;)for(;i(t,-1),!e(t););else for(;--n>=0;)for(;i(t,1),!e(t););}))},a&&(s.count=function(r,i){return e.setTime(+r),n.setTime(+i),t(e),t(n),Math.floor(a(e,n))},s.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?s.filter(o?function(e){return o(e)%t==0}:function(e){return s.count(0,e)%t==0}):s:null}),s}var i=r((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t}));i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?r((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,n){e.setTime(+e+n*t)}),(function(e,n){return(n-e)/t})):i:null};var a=i.range,o=1e3,s=6e4,l=36e5,c=864e5,u=6048e5,h=r((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+e*o)}),(function(t,e){return(e-t)/o}),(function(t){return t.getUTCSeconds()})),d=h.range,f=r((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*o)}),(function(t,e){t.setTime(+t+e*s)}),(function(t,e){return(e-t)/s}),(function(t){return t.getMinutes()})),p=f.range,m=r((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*o-t.getMinutes()*s)}),(function(t,e){t.setTime(+t+e*l)}),(function(t,e){return(e-t)/l}),(function(t){return t.getHours()})),g=m.range,y=r((function(t){t.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+e)}),(function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*s)/c}),(function(t){return t.getDate()-1})),v=y.range;function _(t){return r((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*s)/u}))}var b=_(0),x=_(1),w=_(2),k=_(3),M=_(4),T=_(5),S=_(6),A=b.range,L=x.range,C=w.range,E=k.range,O=M.range,D=T.range,I=S.range,P=r((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()})),R=P.range,z=r((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));z.every=function(t){return isFinite(t=Math.floor(t))&&t>0?r((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,n){e.setFullYear(e.getFullYear()+n*t)})):null};var j=z.range,F=r((function(t){t.setUTCSeconds(0,0)}),(function(t,e){t.setTime(+t+e*s)}),(function(t,e){return(e-t)/s}),(function(t){return t.getUTCMinutes()})),N=F.range,B=r((function(t){t.setUTCMinutes(0,0,0)}),(function(t,e){t.setTime(+t+e*l)}),(function(t,e){return(e-t)/l}),(function(t){return t.getUTCHours()})),Y=B.range,H=r((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/c}),(function(t){return t.getUTCDate()-1})),V=H.range;function U(t){return r((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/u}))}var W=U(0),q=U(1),G=U(2),X=U(3),Z=U(4),J=U(5),K=U(6),$=W.range,Q=q.range,tt=G.range,et=X.range,nt=Z.range,rt=J.range,it=K.range,at=r((function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCMonth(t.getUTCMonth()+e)}),(function(t,e){return e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())}),(function(t){return t.getUTCMonth()})),ot=at.range,st=r((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));st.every=function(t){return isFinite(t=Math.floor(t))&&t>0?r((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null};var lt=st.range;t.timeDay=y,t.timeDays=v,t.timeFriday=T,t.timeFridays=D,t.timeHour=m,t.timeHours=g,t.timeInterval=r,t.timeMillisecond=i,t.timeMilliseconds=a,t.timeMinute=f,t.timeMinutes=p,t.timeMonday=x,t.timeMondays=L,t.timeMonth=P,t.timeMonths=R,t.timeSaturday=S,t.timeSaturdays=I,t.timeSecond=h,t.timeSeconds=d,t.timeSunday=b,t.timeSundays=A,t.timeThursday=M,t.timeThursdays=O,t.timeTuesday=w,t.timeTuesdays=C,t.timeWednesday=k,t.timeWednesdays=E,t.timeWeek=b,t.timeWeeks=A,t.timeYear=z,t.timeYears=j,t.utcDay=H,t.utcDays=V,t.utcFriday=J,t.utcFridays=rt,t.utcHour=B,t.utcHours=Y,t.utcMillisecond=i,t.utcMilliseconds=a,t.utcMinute=F,t.utcMinutes=N,t.utcMonday=q,t.utcMondays=Q,t.utcMonth=at,t.utcMonths=ot,t.utcSaturday=K,t.utcSaturdays=it,t.utcSecond=h,t.utcSeconds=d,t.utcSunday=W,t.utcSundays=$,t.utcThursday=Z,t.utcThursdays=nt,t.utcTuesday=G,t.utcTuesdays=tt,t.utcWednesday=X,t.utcWednesdays=et,t.utcWeek=W,t.utcWeeks=$,t.utcYear=st,t.utcYears=lt,Object.defineProperty(t,\"__esModule\",{value:!0})}(\"object\"==typeof n&&void 0!==e?n:(t=t||self).d3=t.d3||{})}(this)},{}],168:[function(t,e,n){!function(t,r){!function(t){\"use strict\";var e,n,r=0,i=0,a=0,o=0,s=0,l=0,c=\"object\"==typeof performance&&performance.now?performance:Date,u=\"object\"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function h(){return s||(u(d),s=c.now()+l)}function d(){s=0}function f(){this._call=this._time=this._next=null}function p(t,e,n){var r=new f;return r.restart(t,e,n),r}function m(){h(),++r;for(var t,n=e;n;)(t=s-n._time)>=0&&n._call.call(null,t),n=n._next;--r}function g(){s=(o=c.now())+l,r=i=0;try{m()}finally{r=0,function(){for(var t,r,i=e,a=1/0;i;)i._call?(a>i._time&&(a=i._time),t=i,i=i._next):(r=i._next,i._next=null,i=t?t._next=r:e=r);n=t,v(a)}(),s=0}}function y(){var t=c.now(),e=t-o;e>1e3&&(l-=e,o=t)}function v(t){r||(i&&(i=clearTimeout(i)),t-s>24?(t<1/0&&(i=setTimeout(g,t-c.now()-l)),a&&(a=clearInterval(a))):(a||(o=c.now(),a=setInterval(y,1e3)),r=1,u(g)))}f.prototype=p.prototype={constructor:f,restart:function(t,r,i){if(\"function\"!=typeof t)throw new TypeError(\"callback is not a function\");i=(null==i?h():+i)+(null==r?0:+r),this._next||n===this||(n?n._next=this:e=this,n=this),this._call=t,this._time=i,v()},stop:function(){this._call&&(this._call=null,this._time=1/0,v())}},t.interval=function(t,e,n){var r=new f,i=e;return null==e?(r.restart(t,e,n),r):(e=+e,n=null==n?h():+n,r.restart((function a(o){o+=i,r.restart(a,i+=e,n),t(o)}),e,n),r)},t.now=h,t.timeout=function(t,e,n){var r=new f;return r.restart((function(n){r.stop(),t(n+e)}),e=null==e?0:+e,n),r},t.timer=p,t.timerFlush=m,Object.defineProperty(t,\"__esModule\",{value:!0})}(\"object\"==typeof n&&void 0!==e?n:(t=t||self).d3=t.d3||{})}(this)},{}],169:[function(t,e,n){!function(){var t={version:\"3.5.17\"},n=[].slice,r=function(t){return n.call(t)},i=this.document;function a(t){return t&&(t.ownerDocument||t.document||t).documentElement}function o(t){return t&&(t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView)}if(i)try{r(i.documentElement.childNodes)}catch(Js){r=function(t){for(var e=t.length,n=new Array(e);e--;)n[e]=t[e];return n}}if(Date.now||(Date.now=function(){return+new Date}),i)try{i.createElement(\"DIV\").style.setProperty(\"opacity\",0,\"\")}catch(Ks){var s=this.Element.prototype,l=s.setAttribute,c=s.setAttributeNS,u=this.CSSStyleDeclaration.prototype,h=u.setProperty;s.setAttribute=function(t,e){l.call(this,t,e+\"\")},s.setAttributeNS=function(t,e,n){c.call(this,t,e,n+\"\")},u.setProperty=function(t,e,n){h.call(this,t,e+\"\",n)}}function d(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function f(t){return null===t?NaN:+t}function p(t){return!isNaN(t)}function m(t){return{left:function(e,n,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=e.length);r<i;){var a=r+i>>>1;t(e[a],n)<0?r=a+1:i=a}return r},right:function(e,n,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=e.length);r<i;){var a=r+i>>>1;t(e[a],n)>0?i=a:r=a+1}return r}}}t.ascending=d,t.descending=function(t,e){return e<t?-1:e>t?1:e>=t?0:NaN},t.min=function(t,e){var n,r,i=-1,a=t.length;if(1===arguments.length){for(;++i<a;)if(null!=(r=t[i])&&r>=r){n=r;break}for(;++i<a;)null!=(r=t[i])&&n>r&&(n=r)}else{for(;++i<a;)if(null!=(r=e.call(t,t[i],i))&&r>=r){n=r;break}for(;++i<a;)null!=(r=e.call(t,t[i],i))&&n>r&&(n=r)}return n},t.max=function(t,e){var n,r,i=-1,a=t.length;if(1===arguments.length){for(;++i<a;)if(null!=(r=t[i])&&r>=r){n=r;break}for(;++i<a;)null!=(r=t[i])&&r>n&&(n=r)}else{for(;++i<a;)if(null!=(r=e.call(t,t[i],i))&&r>=r){n=r;break}for(;++i<a;)null!=(r=e.call(t,t[i],i))&&r>n&&(n=r)}return n},t.extent=function(t,e){var n,r,i,a=-1,o=t.length;if(1===arguments.length){for(;++a<o;)if(null!=(r=t[a])&&r>=r){n=i=r;break}for(;++a<o;)null!=(r=t[a])&&(n>r&&(n=r),i<r&&(i=r))}else{for(;++a<o;)if(null!=(r=e.call(t,t[a],a))&&r>=r){n=i=r;break}for(;++a<o;)null!=(r=e.call(t,t[a],a))&&(n>r&&(n=r),i<r&&(i=r))}return[n,i]},t.sum=function(t,e){var n,r=0,i=t.length,a=-1;if(1===arguments.length)for(;++a<i;)p(n=+t[a])&&(r+=n);else for(;++a<i;)p(n=+e.call(t,t[a],a))&&(r+=n);return r},t.mean=function(t,e){var n,r=0,i=t.length,a=-1,o=i;if(1===arguments.length)for(;++a<i;)p(n=f(t[a]))?r+=n:--o;else for(;++a<i;)p(n=f(e.call(t,t[a],a)))?r+=n:--o;if(o)return r/o},t.quantile=function(t,e){var n=(t.length-1)*e+1,r=Math.floor(n),i=+t[r-1],a=n-r;return a?i+a*(t[r]-i):i},t.median=function(e,n){var r,i=[],a=e.length,o=-1;if(1===arguments.length)for(;++o<a;)p(r=f(e[o]))&&i.push(r);else for(;++o<a;)p(r=f(n.call(e,e[o],o)))&&i.push(r);if(i.length)return t.quantile(i.sort(d),.5)},t.variance=function(t,e){var n,r,i=t.length,a=0,o=0,s=-1,l=0;if(1===arguments.length)for(;++s<i;)p(n=f(t[s]))&&(o+=(r=n-a)*(n-(a+=r/++l)));else for(;++s<i;)p(n=f(e.call(t,t[s],s)))&&(o+=(r=n-a)*(n-(a+=r/++l)));if(l>1)return o/(l-1)},t.deviation=function(){var e=t.variance.apply(this,arguments);return e?Math.sqrt(e):e};var g=m(d);function y(t){return t.length}t.bisectLeft=g.left,t.bisect=t.bisectRight=g.right,t.bisector=function(t){return m(1===t.length?function(e,n){return d(t(e),n)}:t)},t.shuffle=function(t,e,n){(a=arguments.length)<3&&(n=t.length,a<2&&(e=0));for(var r,i,a=n-e;a;)i=Math.random()*a--|0,r=t[a+e],t[a+e]=t[i+e],t[i+e]=r;return t},t.permute=function(t,e){for(var n=e.length,r=new Array(n);n--;)r[n]=t[e[n]];return r},t.pairs=function(t){for(var e=0,n=t.length-1,r=t[0],i=new Array(n<0?0:n);e<n;)i[e]=[r,r=t[++e]];return i},t.transpose=function(e){if(!(a=e.length))return[];for(var n=-1,r=t.min(e,y),i=new Array(r);++n<r;)for(var a,o=-1,s=i[n]=new Array(a);++o<a;)s[o]=e[o][n];return i},t.zip=function(){return t.transpose(arguments)},t.keys=function(t){var e=[];for(var n in t)e.push(n);return e},t.values=function(t){var e=[];for(var n in t)e.push(t[n]);return e},t.entries=function(t){var e=[];for(var n in t)e.push({key:n,value:t[n]});return e},t.merge=function(t){for(var e,n,r,i=t.length,a=-1,o=0;++a<i;)o+=t[a].length;for(n=new Array(o);--i>=0;)for(e=(r=t[i]).length;--e>=0;)n[--o]=r[e];return n};var v=Math.abs;function _(t){for(var e=1;t*e%1;)e*=10;return e}function b(t,e){for(var n in e)Object.defineProperty(t.prototype,n,{value:e[n],enumerable:!1})}function x(){this._=Object.create(null)}function w(t){return\"__proto__\"==(t+=\"\")||\"\\0\"===t[0]?\"\\0\"+t:t}function k(t){return\"\\0\"===(t+=\"\")[0]?t.slice(1):t}function M(t){return w(t)in this._}function T(t){return(t=w(t))in this._&&delete this._[t]}function S(){var t=[];for(var e in this._)t.push(k(e));return t}function A(){var t=0;for(var e in this._)++t;return t}function L(){for(var t in this._)return!1;return!0}function C(){this._=Object.create(null)}function E(t){return t}function O(t,e,n){return function(){var r=n.apply(e,arguments);return r===e?t:r}}function D(t,e){if(e in t)return e;e=e.charAt(0).toUpperCase()+e.slice(1);for(var n=0,r=I.length;n<r;++n){var i=I[n]+e;if(i in t)return i}}t.range=function(t,e,n){if(arguments.length<3&&(n=1,arguments.length<2&&(e=t,t=0)),(e-t)/n==1/0)throw new Error(\"infinite range\");var r,i=[],a=_(v(n)),o=-1;if(t*=a,e*=a,(n*=a)<0)for(;(r=t+n*++o)>e;)i.push(r/a);else for(;(r=t+n*++o)<e;)i.push(r/a);return i},t.map=function(t,e){var n=new x;if(t instanceof x)t.forEach((function(t,e){n.set(t,e)}));else if(Array.isArray(t)){var r,i=-1,a=t.length;if(1===arguments.length)for(;++i<a;)n.set(i,t[i]);else for(;++i<a;)n.set(e.call(t,r=t[i],i),r)}else for(var o in t)n.set(o,t[o]);return n},b(x,{has:M,get:function(t){return this._[w(t)]},set:function(t,e){return this._[w(t)]=e},remove:T,keys:S,values:function(){var t=[];for(var e in this._)t.push(this._[e]);return t},entries:function(){var t=[];for(var e in this._)t.push({key:k(e),value:this._[e]});return t},size:A,empty:L,forEach:function(t){for(var e in this._)t.call(this,k(e),this._[e])}}),t.nest=function(){var e,n,r={},i=[],a=[];function o(t,a,s){if(s>=i.length)return n?n.call(r,a):e?a.sort(e):a;for(var l,c,u,h,d=-1,f=a.length,p=i[s++],m=new x;++d<f;)(h=m.get(l=p(c=a[d])))?h.push(c):m.set(l,[c]);return t?(c=t(),u=function(e,n){c.set(e,o(t,n,s))}):(c={},u=function(e,n){c[e]=o(t,n,s)}),m.forEach(u),c}return r.map=function(t,e){return o(e,t,0)},r.entries=function(e){return function t(e,n){if(n>=i.length)return e;var r=[],o=a[n++];return e.forEach((function(e,i){r.push({key:e,values:t(i,n)})})),o?r.sort((function(t,e){return o(t.key,e.key)})):r}(o(t.map,e,0),0)},r.key=function(t){return i.push(t),r},r.sortKeys=function(t){return a[i.length-1]=t,r},r.sortValues=function(t){return e=t,r},r.rollup=function(t){return n=t,r},r},t.set=function(t){var e=new C;if(t)for(var n=0,r=t.length;n<r;++n)e.add(t[n]);return e},b(C,{has:M,add:function(t){return this._[w(t+=\"\")]=!0,t},remove:T,values:S,size:A,empty:L,forEach:function(t){for(var e in this._)t.call(this,k(e))}}),t.behavior={},t.rebind=function(t,e){for(var n,r=1,i=arguments.length;++r<i;)t[n=arguments[r]]=O(t,e,e[n]);return t};var I=[\"webkit\",\"ms\",\"moz\",\"Moz\",\"o\",\"O\"];function P(){}function R(){}function z(t){var e=[],n=new x;function r(){for(var n,r=e,i=-1,a=r.length;++i<a;)(n=r[i].on)&&n.apply(this,arguments);return t}return r.on=function(r,i){var a,o=n.get(r);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,a=e.indexOf(o)).concat(e.slice(a+1)),n.remove(r)),i&&e.push(n.set(r,{on:i})),t)},r}function j(){t.event.preventDefault()}function F(){for(var e,n=t.event;e=n.sourceEvent;)n=e;return n}function N(e){for(var n=new R,r=0,i=arguments.length;++r<i;)n[arguments[r]]=z(n);return n.of=function(r,i){return function(a){try{var o=a.sourceEvent=t.event;a.target=e,t.event=a,n[a.type].apply(r,i)}finally{t.event=o}}},n}t.dispatch=function(){for(var t=new R,e=-1,n=arguments.length;++e<n;)t[arguments[e]]=z(t);return t},R.prototype.on=function(t,e){var n=t.indexOf(\".\"),r=\"\";if(n>=0&&(r=t.slice(n+1),t=t.slice(0,n)),t)return arguments.length<2?this[t].on(r):this[t].on(r,e);if(2===arguments.length){if(null==e)for(t in this)this.hasOwnProperty(t)&&this[t].on(r,null);return this}},t.event=null,t.requote=function(t){return t.replace(B,\"\\\\$&\")};var B=/[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,Y={}.__proto__?function(t,e){t.__proto__=e}:function(t,e){for(var n in e)t[n]=e[n]};function H(t){return Y(t,q),t}var V=function(t,e){return e.querySelector(t)},U=function(t,e){return e.querySelectorAll(t)},W=function(t,e){var n=t.matches||t[D(t,\"matchesSelector\")];return(W=function(t,e){return n.call(t,e)})(t,e)};\"function\"==typeof Sizzle&&(V=function(t,e){return Sizzle(t,e)[0]||null},U=Sizzle,W=Sizzle.matchesSelector),t.selection=function(){return t.select(i.documentElement)};var q=t.selection.prototype=[];function G(t){return\"function\"==typeof t?t:function(){return V(t,this)}}function X(t){return\"function\"==typeof t?t:function(){return U(t,this)}}q.select=function(t){var e,n,r,i,a=[];t=G(t);for(var o=-1,s=this.length;++o<s;){a.push(e=[]),e.parentNode=(r=this[o]).parentNode;for(var l=-1,c=r.length;++l<c;)(i=r[l])?(e.push(n=t.call(i,i.__data__,l,o)),n&&\"__data__\"in i&&(n.__data__=i.__data__)):e.push(null)}return H(a)},q.selectAll=function(t){var e,n,i=[];t=X(t);for(var a=-1,o=this.length;++a<o;)for(var s=this[a],l=-1,c=s.length;++l<c;)(n=s[l])&&(i.push(e=r(t.call(n,n.__data__,l,a))),e.parentNode=n);return H(i)};var Z=\"http://www.w3.org/1999/xhtml\",J={svg:\"http://www.w3.org/2000/svg\",xhtml:Z,xlink:\"http://www.w3.org/1999/xlink\",xml:\"http://www.w3.org/XML/1998/namespace\",xmlns:\"http://www.w3.org/2000/xmlns/\"};function K(e,n){return e=t.ns.qualify(e),null==n?e.local?function(){this.removeAttributeNS(e.space,e.local)}:function(){this.removeAttribute(e)}:\"function\"==typeof n?e.local?function(){var t=n.apply(this,arguments);null==t?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,t)}:function(){var t=n.apply(this,arguments);null==t?this.removeAttribute(e):this.setAttribute(e,t)}:e.local?function(){this.setAttributeNS(e.space,e.local,n)}:function(){this.setAttribute(e,n)}}function $(t){return t.trim().replace(/\\s+/g,\" \")}function Q(e){return new RegExp(\"(?:^|\\\\s+)\"+t.requote(e)+\"(?:\\\\s+|$)\",\"g\")}function tt(t){return(t+\"\").trim().split(/^|\\s+/)}function et(t,e){var n=(t=tt(t).map(nt)).length;return\"function\"==typeof e?function(){for(var r=-1,i=e.apply(this,arguments);++r<n;)t[r](this,i)}:function(){for(var r=-1;++r<n;)t[r](this,e)}}function nt(t){var e=Q(t);return function(n,r){if(i=n.classList)return r?i.add(t):i.remove(t);var i=n.getAttribute(\"class\")||\"\";r?(e.lastIndex=0,e.test(i)||n.setAttribute(\"class\",$(i+\" \"+t))):n.setAttribute(\"class\",$(i.replace(e,\" \")))}}function rt(t,e,n){return null==e?function(){this.style.removeProperty(t)}:\"function\"==typeof e?function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}:function(){this.style.setProperty(t,e,n)}}function it(t,e){return null==e?function(){delete this[t]}:\"function\"==typeof e?function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}:function(){this[t]=e}}function at(e){return\"function\"==typeof e?e:(e=t.ns.qualify(e)).local?function(){return this.ownerDocument.createElementNS(e.space,e.local)}:function(){var t=this.ownerDocument,n=this.namespaceURI;return n===Z&&t.documentElement.namespaceURI===Z?t.createElement(e):t.createElementNS(n,e)}}function ot(){var t=this.parentNode;t&&t.removeChild(this)}function st(t){return{__data__:t}}function lt(t){return function(){return W(this,t)}}function ct(t){return arguments.length||(t=d),function(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}}function ut(t,e){for(var n=0,r=t.length;n<r;n++)for(var i,a=t[n],o=0,s=a.length;o<s;o++)(i=a[o])&&e(i,o,n);return t}function ht(t){return Y(t,dt),t}t.ns={prefix:J,qualify:function(t){var e=t.indexOf(\":\"),n=t;return e>=0&&\"xmlns\"!==(n=t.slice(0,e))&&(t=t.slice(e+1)),J.hasOwnProperty(n)?{space:J[n],local:t}:t}},q.attr=function(e,n){if(arguments.length<2){if(\"string\"==typeof e){var r=this.node();return(e=t.ns.qualify(e)).local?r.getAttributeNS(e.space,e.local):r.getAttribute(e)}for(n in e)this.each(K(n,e[n]));return this}return this.each(K(e,n))},q.classed=function(t,e){if(arguments.length<2){if(\"string\"==typeof t){var n=this.node(),r=(t=tt(t)).length,i=-1;if(e=n.classList){for(;++i<r;)if(!e.contains(t[i]))return!1}else for(e=n.getAttribute(\"class\");++i<r;)if(!Q(t[i]).test(e))return!1;return!0}for(e in t)this.each(et(e,t[e]));return this}return this.each(et(t,e))},q.style=function(t,e,n){var r=arguments.length;if(r<3){if(\"string\"!=typeof t){for(n in r<2&&(e=\"\"),t)this.each(rt(n,t[n],e));return this}if(r<2){var i=this.node();return o(i).getComputedStyle(i,null).getPropertyValue(t)}n=\"\"}return this.each(rt(t,e,n))},q.property=function(t,e){if(arguments.length<2){if(\"string\"==typeof t)return this.node()[t];for(e in t)this.each(it(e,t[e]));return this}return this.each(it(t,e))},q.text=function(t){return arguments.length?this.each(\"function\"==typeof t?function(){var e=t.apply(this,arguments);this.textContent=null==e?\"\":e}:null==t?function(){this.textContent=\"\"}:function(){this.textContent=t}):this.node().textContent},q.html=function(t){return arguments.length?this.each(\"function\"==typeof t?function(){var e=t.apply(this,arguments);this.innerHTML=null==e?\"\":e}:null==t?function(){this.innerHTML=\"\"}:function(){this.innerHTML=t}):this.node().innerHTML},q.append=function(t){return t=at(t),this.select((function(){return this.appendChild(t.apply(this,arguments))}))},q.insert=function(t,e){return t=at(t),e=G(e),this.select((function(){return this.insertBefore(t.apply(this,arguments),e.apply(this,arguments)||null)}))},q.remove=function(){return this.each(ot)},q.data=function(t,e){var n,r,i=-1,a=this.length;if(!arguments.length){for(t=new Array(a=(n=this[0]).length);++i<a;)(r=n[i])&&(t[i]=r.__data__);return t}function o(t,n){var r,i,a,o=t.length,u=n.length,h=Math.min(o,u),d=new Array(u),f=new Array(u),p=new Array(o);if(e){var m,g=new x,y=new Array(o);for(r=-1;++r<o;)(i=t[r])&&(g.has(m=e.call(i,i.__data__,r))?p[r]=i:g.set(m,i),y[r]=m);for(r=-1;++r<u;)(i=g.get(m=e.call(n,a=n[r],r)))?!0!==i&&(d[r]=i,i.__data__=a):f[r]=st(a),g.set(m,!0);for(r=-1;++r<o;)r in y&&!0!==g.get(y[r])&&(p[r]=t[r])}else{for(r=-1;++r<h;)a=n[r],(i=t[r])?(i.__data__=a,d[r]=i):f[r]=st(a);for(;r<u;++r)f[r]=st(n[r]);for(;r<o;++r)p[r]=t[r]}f.update=d,f.parentNode=d.parentNode=p.parentNode=t.parentNode,s.push(f),l.push(d),c.push(p)}var s=ht([]),l=H([]),c=H([]);if(\"function\"==typeof t)for(;++i<a;)o(n=this[i],t.call(n,n.parentNode.__data__,i));else for(;++i<a;)o(n=this[i],t);return l.enter=function(){return s},l.exit=function(){return c},l},q.datum=function(t){return arguments.length?this.property(\"__data__\",t):this.property(\"__data__\")},q.filter=function(t){var e,n,r,i=[];\"function\"!=typeof t&&(t=lt(t));for(var a=0,o=this.length;a<o;a++){i.push(e=[]),e.parentNode=(n=this[a]).parentNode;for(var s=0,l=n.length;s<l;s++)(r=n[s])&&t.call(r,r.__data__,s,a)&&e.push(r)}return H(i)},q.order=function(){for(var t=-1,e=this.length;++t<e;)for(var n,r=this[t],i=r.length-1,a=r[i];--i>=0;)(n=r[i])&&(a&&a!==n.nextSibling&&a.parentNode.insertBefore(n,a),a=n);return this},q.sort=function(t){t=ct.apply(this,arguments);for(var e=-1,n=this.length;++e<n;)this[e].sort(t);return this.order()},q.each=function(t){return ut(this,(function(e,n,r){t.call(e,e.__data__,n,r)}))},q.call=function(t){var e=r(arguments);return t.apply(e[0]=this,e),this},q.empty=function(){return!this.node()},q.node=function(){for(var t=0,e=this.length;t<e;t++)for(var n=this[t],r=0,i=n.length;r<i;r++){var a=n[r];if(a)return a}return null},q.size=function(){var t=0;return ut(this,(function(){++t})),t};var dt=[];function ft(t){var e,n;return function(r,i,a){var o,s=t[a].update,l=s.length;for(a!=n&&(n=a,e=0),i>=e&&(e=i+1);!(o=s[e])&&++e<l;);return o}}function pt(e,n,i){var a=\"__on\"+e,o=e.indexOf(\".\"),s=gt;o>0&&(e=e.slice(0,o));var l=mt.get(e);function c(){var t=this[a];t&&(this.removeEventListener(e,t,t.$),delete this[a])}return l&&(e=l,s=yt),o?n?function(){var t=s(n,r(arguments));c.call(this),this.addEventListener(e,this[a]=t,t.$=i),t._=n}:c:n?P:function(){var n,r=new RegExp(\"^__on([^.]+)\"+t.requote(e)+\"$\");for(var i in this)if(n=i.match(r)){var a=this[i];this.removeEventListener(n[1],a,a.$),delete this[i]}}}t.selection.enter=ht,t.selection.enter.prototype=dt,dt.append=q.append,dt.empty=q.empty,dt.node=q.node,dt.call=q.call,dt.size=q.size,dt.select=function(t){for(var e,n,r,i,a,o=[],s=-1,l=this.length;++s<l;){r=(i=this[s]).update,o.push(e=[]),e.parentNode=i.parentNode;for(var c=-1,u=i.length;++c<u;)(a=i[c])?(e.push(r[c]=n=t.call(i.parentNode,a.__data__,c,s)),n.__data__=a.__data__):e.push(null)}return H(o)},dt.insert=function(t,e){return arguments.length<2&&(e=ft(this)),q.insert.call(this,t,e)},t.select=function(t){var e;return\"string\"==typeof t?(e=[V(t,i)]).parentNode=i.documentElement:(e=[t]).parentNode=a(t),H([e])},t.selectAll=function(t){var e;return\"string\"==typeof t?(e=r(U(t,i))).parentNode=i.documentElement:(e=r(t)).parentNode=null,H([e])},q.on=function(t,e,n){var r=arguments.length;if(r<3){if(\"string\"!=typeof t){for(n in r<2&&(e=!1),t)this.each(pt(n,t[n],e));return this}if(r<2)return(r=this.node()[\"__on\"+t])&&r._;n=!1}return this.each(pt(t,e,n))};var mt=t.map({mouseenter:\"mouseover\",mouseleave:\"mouseout\"});function gt(e,n){return function(r){var i=t.event;t.event=r,n[0]=this.__data__;try{e.apply(this,n)}finally{t.event=i}}}function yt(t,e){var n=gt(t,e);return function(t){var e=this,r=t.relatedTarget;r&&(r===e||8&r.compareDocumentPosition(e))||n.call(e,t)}}i&&mt.forEach((function(t){\"on\"+t in i&&mt.remove(t)}));var vt,_t=0;function bt(e){var n=\".dragsuppress-\"+ ++_t,r=\"click\"+n,i=t.select(o(e)).on(\"touchmove\"+n,j).on(\"dragstart\"+n,j).on(\"selectstart\"+n,j);if(null==vt&&(vt=!(\"onselectstart\"in e)&&D(e.style,\"userSelect\")),vt){var s=a(e).style,l=s[vt];s[vt]=\"none\"}return function(t){if(i.on(n,null),vt&&(s[vt]=l),t){var e=function(){i.on(r,null)};i.on(r,(function(){j(),e()}),!0),setTimeout(e,0)}}}t.mouse=function(t){return wt(t,F())};var xt=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;function wt(e,n){n.changedTouches&&(n=n.changedTouches[0]);var r=e.ownerSVGElement||e;if(r.createSVGPoint){var i=r.createSVGPoint();if(xt<0){var a=o(e);if(a.scrollX||a.scrollY){var s=(r=t.select(\"body\").append(\"svg\").style({position:\"absolute\",top:0,left:0,margin:0,padding:0,border:\"none\"},\"important\"))[0][0].getScreenCTM();xt=!(s.f||s.e),r.remove()}}return xt?(i.x=n.pageX,i.y=n.pageY):(i.x=n.clientX,i.y=n.clientY),[(i=i.matrixTransform(e.getScreenCTM().inverse())).x,i.y]}var l=e.getBoundingClientRect();return[n.clientX-l.left-e.clientLeft,n.clientY-l.top-e.clientTop]}function kt(){return t.event.changedTouches[0].identifier}t.touch=function(t,e,n){if(arguments.length<3&&(n=e,e=F().changedTouches),e)for(var r,i=0,a=e.length;i<a;++i)if((r=e[i]).identifier===n)return wt(t,r)},t.behavior.drag=function(){var e=N(a,\"drag\",\"dragstart\",\"dragend\"),n=null,r=s(P,t.mouse,o,\"mousemove\",\"mouseup\"),i=s(kt,t.touch,E,\"touchmove\",\"touchend\");function a(){this.on(\"mousedown.drag\",r).on(\"touchstart.drag\",i)}function s(r,i,a,o,s){return function(){var l,c=this,u=t.event.target.correspondingElement||t.event.target,h=c.parentNode,d=e.of(c,arguments),f=0,p=r(),m=\".drag\"+(null==p?\"\":\"-\"+p),g=t.select(a(u)).on(o+m,_).on(s+m,b),y=bt(u),v=i(h,p);function _(){var t,e,n=i(h,p);n&&(f|=(t=n[0]-v[0])|(e=n[1]-v[1]),v=n,d({type:\"drag\",x:n[0]+l[0],y:n[1]+l[1],dx:t,dy:e}))}function b(){i(h,p)&&(g.on(o+m,null).on(s+m,null),y(f),d({type:\"dragend\"}))}l=n?[(l=n.apply(c,arguments)).x-v[0],l.y-v[1]]:[0,0],d({type:\"dragstart\"})}}return a.origin=function(t){return arguments.length?(n=t,a):n},t.rebind(a,e,\"on\")},t.touches=function(t,e){return arguments.length<2&&(e=F().touches),e?r(e).map((function(e){var n=wt(t,e);return n.identifier=e.identifier,n})):[]};var Mt=1e-6,Tt=Mt*Mt,St=Math.PI,At=2*St,Lt=At-Mt,Ct=St/2,Et=St/180,Ot=180/St;function Dt(t){return t>0?1:t<0?-1:0}function It(t,e,n){return(e[0]-t[0])*(n[1]-t[1])-(e[1]-t[1])*(n[0]-t[0])}function Pt(t){return t>1?0:t<-1?St:Math.acos(t)}function Rt(t){return t>1?Ct:t<-1?-Ct:Math.asin(t)}function zt(t){return((t=Math.exp(t))+1/t)/2}function jt(t){return(t=Math.sin(t/2))*t}var Ft=Math.SQRT2;t.interpolateZoom=function(t,e){var n,r,i=t[0],a=t[1],o=t[2],s=e[2],l=e[0]-i,c=e[1]-a,u=l*l+c*c;if(u<Tt)r=Math.log(s/o)/Ft,n=function(t){return[i+t*l,a+t*c,o*Math.exp(Ft*t*r)]};else{var h=Math.sqrt(u),d=(s*s-o*o+4*u)/(2*o*2*h),f=(s*s-o*o-4*u)/(2*s*2*h),p=Math.log(Math.sqrt(d*d+1)-d),m=Math.log(Math.sqrt(f*f+1)-f);r=(m-p)/Ft,n=function(t){var e,n=t*r,s=zt(p),u=o/(2*h)*(s*(e=Ft*n+p,((e=Math.exp(2*e))-1)/(e+1))-function(t){return((t=Math.exp(t))-1/t)/2}(p));return[i+u*l,a+u*c,o*s/zt(Ft*n+p)]}}return n.duration=1e3*r,n},t.behavior.zoom=function(){var e,n,r,a,s,l,c,u,h,d={x:0,y:0,k:1},f=[960,500],p=Yt,m=250,g=0,y=\"mousedown.zoom\",v=\"mousemove.zoom\",_=\"mouseup.zoom\",b=\"touchstart.zoom\",x=N(w,\"zoomstart\",\"zoom\",\"zoomend\");function w(t){t.on(y,O).on(Bt+\".zoom\",I).on(\"dblclick.zoom\",P).on(b,D)}function k(t){return[(t[0]-d.x)/d.k,(t[1]-d.y)/d.k]}function M(t){d.k=Math.max(p[0],Math.min(p[1],t))}function T(t,e){e=function(t){return[t[0]*d.k+d.x,t[1]*d.k+d.y]}(e),d.x+=t[0]-e[0],d.y+=t[1]-e[1]}function S(e,r,i,a){e.__chart__={x:d.x,y:d.y,k:d.k},M(Math.pow(2,a)),T(n=r,i),e=t.select(e),m>0&&(e=e.transition().duration(m)),e.call(w.event)}function A(){c&&c.domain(l.range().map((function(t){return(t-d.x)/d.k})).map(l.invert)),h&&h.domain(u.range().map((function(t){return(t-d.y)/d.k})).map(u.invert))}function L(t){g++||t({type:\"zoomstart\"})}function C(t){A(),t({type:\"zoom\",scale:d.k,translate:[d.x,d.y]})}function E(t){--g||(t({type:\"zoomend\"}),n=null)}function O(){var e=this,n=x.of(e,arguments),r=0,i=t.select(o(e)).on(v,l).on(_,c),a=k(t.mouse(e)),s=bt(e);function l(){r=1,T(t.mouse(e),a),C(n)}function c(){i.on(v,null).on(_,null),s(r),E(n)}_s.call(e),L(n)}function D(){var e,n=this,r=x.of(n,arguments),i={},a=0,o=\".zoom-\"+t.event.changedTouches[0].identifier,l=\"touchmove\"+o,c=\"touchend\"+o,u=[],h=t.select(n),f=bt(n);function p(){var r=t.touches(n);return e=d.k,r.forEach((function(t){t.identifier in i&&(i[t.identifier]=k(t))})),r}function m(){var e=t.event.target;t.select(e).on(l,g).on(c,v),u.push(e);for(var r=t.event.changedTouches,o=0,h=r.length;o<h;++o)i[r[o].identifier]=null;var f=p(),m=Date.now();if(1===f.length)m-s<500&&(S(n,y=f[0],i[y.identifier],Math.floor(Math.log(d.k)/Math.LN2)+1),j()),s=m;else if(f.length>1){var y,_=f[1],b=(y=f[0])[0]-_[0],x=y[1]-_[1];a=b*b+x*x}}function g(){var o,l,c,u,h=t.touches(n);_s.call(n);for(var d=0,f=h.length;d<f;++d,u=null)if(u=i[(c=h[d]).identifier]){if(l)break;o=c,l=u}if(u){var p=(p=c[0]-o[0])*p+(p=c[1]-o[1])*p,m=a&&Math.sqrt(p/a);o=[(o[0]+c[0])/2,(o[1]+c[1])/2],l=[(l[0]+u[0])/2,(l[1]+u[1])/2],M(m*e)}s=null,T(o,l),C(r)}function v(){if(t.event.touches.length){for(var e=t.event.changedTouches,n=0,a=e.length;n<a;++n)delete i[e[n].identifier];for(var s in i)return void p()}t.selectAll(u).on(o,null),h.on(y,O).on(b,D),f(),E(r)}m(),L(r),h.on(y,null).on(b,m)}function I(){var i=x.of(this,arguments);a?clearTimeout(a):(_s.call(this),e=k(n=r||t.mouse(this)),L(i)),a=setTimeout((function(){a=null,E(i)}),50),j(),M(Math.pow(2,.002*Nt())*d.k),T(n,e),C(i)}function P(){var e=t.mouse(this),n=Math.log(d.k)/Math.LN2;S(this,e,k(e),t.event.shiftKey?Math.ceil(n)-1:Math.floor(n)+1)}return Bt||(Bt=\"onwheel\"in i?(Nt=function(){return-t.event.deltaY*(t.event.deltaMode?120:1)},\"wheel\"):\"onmousewheel\"in i?(Nt=function(){return t.event.wheelDelta},\"mousewheel\"):(Nt=function(){return-t.event.detail},\"MozMousePixelScroll\")),w.event=function(e){e.each((function(){var e=x.of(this,arguments),r=d;ws?t.select(this).transition().each(\"start.zoom\",(function(){d=this.__chart__||{x:0,y:0,k:1},L(e)})).tween(\"zoom:zoom\",(function(){var i=f[0],a=n?n[0]:i/2,o=n?n[1]:f[1]/2,s=t.interpolateZoom([(a-d.x)/d.k,(o-d.y)/d.k,i/d.k],[(a-r.x)/r.k,(o-r.y)/r.k,i/r.k]);return function(t){var n=s(t),r=i/n[2];this.__chart__=d={x:a-n[0]*r,y:o-n[1]*r,k:r},C(e)}})).each(\"interrupt.zoom\",(function(){E(e)})).each(\"end.zoom\",(function(){E(e)})):(this.__chart__=d,L(e),C(e),E(e))}))},w.translate=function(t){return arguments.length?(d={x:+t[0],y:+t[1],k:d.k},A(),w):[d.x,d.y]},w.scale=function(t){return arguments.length?(d={x:d.x,y:d.y,k:null},M(+t),A(),w):d.k},w.scaleExtent=function(t){return arguments.length?(p=null==t?Yt:[+t[0],+t[1]],w):p},w.center=function(t){return arguments.length?(r=t&&[+t[0],+t[1]],w):r},w.size=function(t){return arguments.length?(f=t&&[+t[0],+t[1]],w):f},w.duration=function(t){return arguments.length?(m=+t,w):m},w.x=function(t){return arguments.length?(c=t,l=t.copy(),d={x:0,y:0,k:1},w):c},w.y=function(t){return arguments.length?(h=t,u=t.copy(),d={x:0,y:0,k:1},w):h},t.rebind(w,x,\"on\")};var Nt,Bt,Yt=[0,1/0];function Ht(){}function Vt(t,e,n){return this instanceof Vt?(this.h=+t,this.s=+e,void(this.l=+n)):arguments.length<2?t instanceof Vt?new Vt(t.h,t.s,t.l):ue(\"\"+t,he,Vt):new Vt(t,e,n)}t.color=Ht,Ht.prototype.toString=function(){return this.rgb()+\"\"},t.hsl=Vt;var Ut=Vt.prototype=new Ht;function Wt(t,e,n){var r,i;function a(t){return Math.round(255*function(t){return t>360?t-=360:t<0&&(t+=360),t<60?r+(i-r)*t/60:t<180?i:t<240?r+(i-r)*(240-t)/60:r}(t))}return t=isNaN(t)?0:(t%=360)<0?t+360:t,e=isNaN(e)||e<0?0:e>1?1:e,r=2*(n=n<0?0:n>1?1:n)-(i=n<=.5?n*(1+e):n+e-n*e),new ae(a(t+120),a(t),a(t-120))}function qt(e,n,r){return this instanceof qt?(this.h=+e,this.c=+n,void(this.l=+r)):arguments.length<2?e instanceof qt?new qt(e.h,e.c,e.l):ee(e instanceof Zt?e.l:(e=de((e=t.rgb(e)).r,e.g,e.b)).l,e.a,e.b):new qt(e,n,r)}Ut.brighter=function(t){return t=Math.pow(.7,arguments.length?t:1),new Vt(this.h,this.s,this.l/t)},Ut.darker=function(t){return t=Math.pow(.7,arguments.length?t:1),new Vt(this.h,this.s,t*this.l)},Ut.rgb=function(){return Wt(this.h,this.s,this.l)},t.hcl=qt;var Gt=qt.prototype=new Ht;function Xt(t,e,n){return isNaN(t)&&(t=0),isNaN(e)&&(e=0),new Zt(n,Math.cos(t*=Et)*e,Math.sin(t)*e)}function Zt(t,e,n){return this instanceof Zt?(this.l=+t,this.a=+e,void(this.b=+n)):arguments.length<2?t instanceof Zt?new Zt(t.l,t.a,t.b):t instanceof qt?Xt(t.h,t.c,t.l):de((t=ae(t)).r,t.g,t.b):new Zt(t,e,n)}Gt.brighter=function(t){return new qt(this.h,this.c,Math.min(100,this.l+Jt*(arguments.length?t:1)))},Gt.darker=function(t){return new qt(this.h,this.c,Math.max(0,this.l-Jt*(arguments.length?t:1)))},Gt.rgb=function(){return Xt(this.h,this.c,this.l).rgb()},t.lab=Zt;var Jt=18,Kt=.95047,$t=1.08883,Qt=Zt.prototype=new Ht;function te(t,e,n){var r=(t+16)/116,i=r+e/500,a=r-n/200;return new ae(ie(3.2404542*(i=ne(i)*Kt)-1.5371385*(r=1*ne(r))-.4985314*(a=ne(a)*$t)),ie(-.969266*i+1.8760108*r+.041556*a),ie(.0556434*i-.2040259*r+1.0572252*a))}function ee(t,e,n){return t>0?new qt(Math.atan2(n,e)*Ot,Math.sqrt(e*e+n*n),t):new qt(NaN,NaN,t)}function ne(t){return t>.206893034?t*t*t:(t-4/29)/7.787037}function re(t){return t>.008856?Math.pow(t,1/3):7.787037*t+4/29}function ie(t){return Math.round(255*(t<=.00304?12.92*t:1.055*Math.pow(t,1/2.4)-.055))}function ae(t,e,n){return this instanceof ae?(this.r=~~t,this.g=~~e,void(this.b=~~n)):arguments.length<2?t instanceof ae?new ae(t.r,t.g,t.b):ue(\"\"+t,ae,Wt):new ae(t,e,n)}function oe(t){return new ae(t>>16,t>>8&255,255&t)}function se(t){return oe(t)+\"\"}Qt.brighter=function(t){return new Zt(Math.min(100,this.l+Jt*(arguments.length?t:1)),this.a,this.b)},Qt.darker=function(t){return new Zt(Math.max(0,this.l-Jt*(arguments.length?t:1)),this.a,this.b)},Qt.rgb=function(){return te(this.l,this.a,this.b)},t.rgb=ae;var le=ae.prototype=new Ht;function ce(t){return t<16?\"0\"+Math.max(0,t).toString(16):Math.min(255,t).toString(16)}function ue(t,e,n){var r,i,a,o=0,s=0,l=0;if(r=/([a-z]+)\\((.*)\\)/.exec(t=t.toLowerCase()))switch(i=r[2].split(\",\"),r[1]){case\"hsl\":return n(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case\"rgb\":return e(pe(i[0]),pe(i[1]),pe(i[2]))}return(a=me.get(t))?e(a.r,a.g,a.b):(null==t||\"#\"!==t.charAt(0)||isNaN(a=parseInt(t.slice(1),16))||(4===t.length?(o=(3840&a)>>4,o|=o>>4,s=240&a,s|=s>>4,l=15&a,l|=l<<4):7===t.length&&(o=(16711680&a)>>16,s=(65280&a)>>8,l=255&a)),e(o,s,l))}function he(t,e,n){var r,i,a=Math.min(t/=255,e/=255,n/=255),o=Math.max(t,e,n),s=o-a,l=(o+a)/2;return s?(i=l<.5?s/(o+a):s/(2-o-a),r=t==o?(e-n)/s+(e<n?6:0):e==o?(n-t)/s+2:(t-e)/s+4,r*=60):(r=NaN,i=l>0&&l<1?0:r),new Vt(r,i,l)}function de(t,e,n){var r=re((.4124564*(t=fe(t))+.3575761*(e=fe(e))+.1804375*(n=fe(n)))/Kt),i=re((.2126729*t+.7151522*e+.072175*n)/1);return Zt(116*i-16,500*(r-i),200*(i-re((.0193339*t+.119192*e+.9503041*n)/$t)))}function fe(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function pe(t){var e=parseFloat(t);return\"%\"===t.charAt(t.length-1)?Math.round(2.55*e):e}le.brighter=function(t){t=Math.pow(.7,arguments.length?t:1);var e=this.r,n=this.g,r=this.b,i=30;return e||n||r?(e&&e<i&&(e=i),n&&n<i&&(n=i),r&&r<i&&(r=i),new ae(Math.min(255,e/t),Math.min(255,n/t),Math.min(255,r/t))):new ae(i,i,i)},le.darker=function(t){return new ae((t=Math.pow(.7,arguments.length?t:1))*this.r,t*this.g,t*this.b)},le.hsl=function(){return he(this.r,this.g,this.b)},le.toString=function(){return\"#\"+ce(this.r)+ce(this.g)+ce(this.b)};var me=t.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});function ge(t){return\"function\"==typeof t?t:function(){return t}}function ye(t){return function(e,n,r){return 2===arguments.length&&\"function\"==typeof n&&(r=n,n=null),ve(e,n,t,r)}}function ve(e,n,i,a){var o={},s=t.dispatch(\"beforesend\",\"progress\",\"load\",\"error\"),l={},c=new XMLHttpRequest,u=null;function h(){var t,e=c.status;if(!e&&function(t){var e=t.responseType;return e&&\"text\"!==e?t.response:t.responseText}(c)||e>=200&&e<300||304===e){try{t=i.call(o,c)}catch(Js){return void s.error.call(o,Js)}s.load.call(o,t)}else s.error.call(o,c)}return this.XDomainRequest&&!(\"withCredentials\"in c)&&/^(http(s)?:)?\\/\\//.test(e)&&(c=new XDomainRequest),\"onload\"in c?c.onload=c.onerror=h:c.onreadystatechange=function(){c.readyState>3&&h()},c.onprogress=function(e){var n=t.event;t.event=e;try{s.progress.call(o,c)}finally{t.event=n}},o.header=function(t,e){return t=(t+\"\").toLowerCase(),arguments.length<2?l[t]:(null==e?delete l[t]:l[t]=e+\"\",o)},o.mimeType=function(t){return arguments.length?(n=null==t?null:t+\"\",o):n},o.responseType=function(t){return arguments.length?(u=t,o):u},o.response=function(t){return i=t,o},[\"get\",\"post\"].forEach((function(t){o[t]=function(){return o.send.apply(o,[t].concat(r(arguments)))}})),o.send=function(t,r,i){if(2===arguments.length&&\"function\"==typeof r&&(i=r,r=null),c.open(t,e,!0),null==n||\"accept\"in l||(l.accept=n+\",*/*\"),c.setRequestHeader)for(var a in l)c.setRequestHeader(a,l[a]);return null!=n&&c.overrideMimeType&&c.overrideMimeType(n),null!=u&&(c.responseType=u),null!=i&&o.on(\"error\",i).on(\"load\",(function(t){i(null,t)})),s.beforesend.call(o,c),c.send(null==r?null:r),o},o.abort=function(){return c.abort(),o},t.rebind(o,s,\"on\"),null==a?o:o.get(function(t){return 1===t.length?function(e,n){t(null==e?n:null)}:t}(a))}me.forEach((function(t,e){me.set(t,oe(e))})),t.functor=ge,t.xhr=ye(E),t.dsv=function(t,e){var n=new RegExp('[\"'+t+\"\\n]\"),r=t.charCodeAt(0);function i(t,n,r){arguments.length<3&&(r=n,n=null);var i=ve(t,e,null==n?a:o(n),r);return i.row=function(t){return arguments.length?i.response(null==(n=t)?a:o(t)):n},i}function a(t){return i.parse(t.responseText)}function o(t){return function(e){return i.parse(e.responseText,t)}}function s(e){return e.map(l).join(t)}function l(t){return n.test(t)?'\"'+t.replace(/\\\"/g,'\"\"')+'\"':t}return i.parse=function(t,e){var n;return i.parseRows(t,(function(t,r){if(n)return n(t,r-1);var i=new Function(\"d\",\"return {\"+t.map((function(t,e){return JSON.stringify(t)+\": d[\"+e+\"]\"})).join(\",\")+\"}\");n=e?function(t,n){return e(i(t),n)}:i}))},i.parseRows=function(t,e){var n,i,a={},o={},s=[],l=t.length,c=0,u=0;function h(){if(c>=l)return o;if(i)return i=!1,a;var e=c;if(34===t.charCodeAt(e)){for(var n=e;n++<l;)if(34===t.charCodeAt(n)){if(34!==t.charCodeAt(n+1))break;++n}return c=n+2,13===(s=t.charCodeAt(n+1))?(i=!0,10===t.charCodeAt(n+2)&&++c):10===s&&(i=!0),t.slice(e+1,n).replace(/\"\"/g,'\"')}for(;c<l;){var s,u=1;if(10===(s=t.charCodeAt(c++)))i=!0;else if(13===s)i=!0,10===t.charCodeAt(c)&&(++c,++u);else if(s!==r)continue;return t.slice(e,c-u)}return t.slice(e)}for(;(n=h())!==o;){for(var d=[];n!==a&&n!==o;)d.push(n),n=h();e&&null==(d=e(d,u++))||s.push(d)}return s},i.format=function(e){if(Array.isArray(e[0]))return i.formatRows(e);var n=new C,r=[];return e.forEach((function(t){for(var e in t)n.has(e)||r.push(n.add(e))})),[r.map(l).join(t)].concat(e.map((function(e){return r.map((function(t){return l(e[t])})).join(t)}))).join(\"\\n\")},i.formatRows=function(t){return t.map(s).join(\"\\n\")},i},t.csv=t.dsv(\",\",\"text/csv\"),t.tsv=t.dsv(\"\\t\",\"text/tab-separated-values\");var _e,be,xe,we,ke=this[D(this,\"requestAnimationFrame\")]||function(t){setTimeout(t,17)};function Me(t,e,n){var r=arguments.length;r<2&&(e=0),r<3&&(n=Date.now());var i={c:t,t:n+e,n:null};return be?be.n=i:_e=i,be=i,xe||(we=clearTimeout(we),xe=1,ke(Te)),i}function Te(){var t=Se(),e=Ae()-t;e>24?(isFinite(e)&&(clearTimeout(we),we=setTimeout(Te,e)),xe=0):(xe=1,ke(Te))}function Se(){for(var t=Date.now(),e=_e;e;)t>=e.t&&e.c(t-e.t)&&(e.c=null),e=e.n;return t}function Ae(){for(var t,e=_e,n=1/0;e;)e.c?(e.t<n&&(n=e.t),e=(t=e).n):e=t?t.n=e.n:_e=e.n;return be=t,n}function Le(t,e){return e-(t?Math.ceil(Math.log(t)/Math.LN10):1)}t.timer=function(){Me.apply(this,arguments)},t.timer.flush=function(){Se(),Ae()},t.round=function(t,e){return e?Math.round(t*(e=Math.pow(10,e)))/e:Math.round(t)};var Ce=[\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"\\xb5\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"].map((function(t,e){var n=Math.pow(10,3*v(8-e));return{scale:e>8?function(t){return t/n}:function(t){return t*n},symbol:t}}));function Ee(e){var n=e.decimal,r=e.thousands,i=e.grouping,a=e.currency,o=i&&r?function(t,e){for(var n=t.length,a=[],o=0,s=i[0],l=0;n>0&&s>0&&(l+s+1>e&&(s=Math.max(1,e-l)),a.push(t.substring(n-=s,n+s)),!((l+=s+1)>e));)s=i[o=(o+1)%i.length];return a.reverse().join(r)}:E;return function(e){var r=Oe.exec(e),i=r[1]||\" \",s=r[2]||\">\",l=r[3]||\"-\",c=r[4]||\"\",u=r[5],h=+r[6],d=r[7],f=r[8],p=r[9],m=1,g=\"\",y=\"\",v=!1,_=!0;switch(f&&(f=+f.substring(1)),(u||\"0\"===i&&\"=\"===s)&&(u=i=\"0\",s=\"=\"),p){case\"n\":d=!0,p=\"g\";break;case\"%\":m=100,y=\"%\",p=\"f\";break;case\"p\":m=100,y=\"%\",p=\"r\";break;case\"b\":case\"o\":case\"x\":case\"X\":\"#\"===c&&(g=\"0\"+p.toLowerCase());case\"c\":_=!1;case\"d\":v=!0,f=0;break;case\"s\":m=-1,p=\"r\"}\"$\"===c&&(g=a[0],y=a[1]),\"r\"!=p||f||(p=\"g\"),null!=f&&(\"g\"==p?f=Math.max(1,Math.min(21,f)):\"e\"!=p&&\"f\"!=p||(f=Math.max(0,Math.min(20,f)))),p=De.get(p)||Ie;var b=u&&d;return function(e){var r=y;if(v&&e%1)return\"\";var a=e<0||0===e&&1/e<0?(e=-e,\"-\"):\"-\"===l?\"\":l;if(m<0){var c=t.formatPrefix(e,f);e=c.scale(e),r=c.symbol+y}else e*=m;var x,w,k=(e=p(e,f)).lastIndexOf(\".\");if(k<0){var M=_?e.lastIndexOf(\"e\"):-1;M<0?(x=e,w=\"\"):(x=e.substring(0,M),w=e.substring(M))}else x=e.substring(0,k),w=n+e.substring(k+1);!u&&d&&(x=o(x,1/0));var T=g.length+x.length+w.length+(b?0:a.length),S=T<h?new Array(T=h-T+1).join(i):\"\";return b&&(x=o(S+x,S.length?h-w.length:1/0)),a+=g,e=x+w,(\"<\"===s?a+e+S:\">\"===s?S+a+e:\"^\"===s?S.substring(0,T>>=1)+a+e+S.substring(T):a+(b?e:S+e))+r}}}t.formatPrefix=function(e,n){var r=0;return(e=+e)&&(e<0&&(e*=-1),n&&(e=t.round(e,Le(e,n))),r=1+Math.floor(1e-12+Math.log(e)/Math.LN10),r=Math.max(-24,Math.min(24,3*Math.floor((r-1)/3)))),Ce[8+r/3]};var Oe=/(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,De=t.map({b:function(t){return t.toString(2)},c:function(t){return String.fromCharCode(t)},o:function(t){return t.toString(8)},x:function(t){return t.toString(16)},X:function(t){return t.toString(16).toUpperCase()},g:function(t,e){return t.toPrecision(e)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},r:function(e,n){return(e=t.round(e,Le(e,n))).toFixed(Math.max(0,Math.min(20,Le(e*(1+1e-15),n))))}});function Ie(t){return t+\"\"}var Pe=t.time={},Re=Date;function ze(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}ze.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){je.setUTCDate.apply(this._,arguments)},setDay:function(){je.setUTCDay.apply(this._,arguments)},setFullYear:function(){je.setUTCFullYear.apply(this._,arguments)},setHours:function(){je.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){je.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){je.setUTCMinutes.apply(this._,arguments)},setMonth:function(){je.setUTCMonth.apply(this._,arguments)},setSeconds:function(){je.setUTCSeconds.apply(this._,arguments)},setTime:function(){je.setTime.apply(this._,arguments)}};var je=Date.prototype;function Fe(t,e,n){function r(e){var n=t(e),r=a(n,1);return e-n<r-e?n:r}function i(n){return e(n=t(new Re(n-1)),1),n}function a(t,n){return e(t=new Re(+t),n),t}function o(t,r,a){var o=i(t),s=[];if(a>1)for(;o<r;)n(o)%a||s.push(new Date(+o)),e(o,1);else for(;o<r;)s.push(new Date(+o)),e(o,1);return s}t.floor=t,t.round=r,t.ceil=i,t.offset=a,t.range=o;var s=t.utc=Ne(t);return s.floor=s,s.round=Ne(r),s.ceil=Ne(i),s.offset=Ne(a),s.range=function(t,e,n){try{Re=ze;var r=new ze;return r._=t,o(r,e,n)}finally{Re=Date}},t}function Ne(t){return function(e,n){try{Re=ze;var r=new ze;return r._=e,t(r,n)._}finally{Re=Date}}}function Be(e){var n=e.dateTime,r=e.date,i=e.time,a=e.periods,o=e.days,s=e.shortDays,l=e.months,c=e.shortMonths;function u(t){var e=t.length;function n(n){for(var r,i,a,o=[],s=-1,l=0;++s<e;)37===t.charCodeAt(s)&&(o.push(t.slice(l,s)),null!=(i=Ye[r=t.charAt(++s)])&&(r=t.charAt(++s)),(a=x[r])&&(r=a(n,null==i?\"e\"===r?\" \":\"0\":i)),o.push(r),l=s+1);return o.push(t.slice(l,s)),o.join(\"\")}return n.parse=function(e){var n={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null};if(h(n,t,e,0)!=e.length)return null;\"p\"in n&&(n.H=n.H%12+12*n.p);var r=null!=n.Z&&Re!==ze,i=new(r?ze:Re);return\"j\"in n?i.setFullYear(n.y,0,n.j):\"W\"in n||\"U\"in n?(\"w\"in n||(n.w=\"W\"in n?1:0),i.setFullYear(n.y,0,1),i.setFullYear(n.y,0,\"W\"in n?(n.w+6)%7+7*n.W-(i.getDay()+5)%7:n.w+7*n.U-(i.getDay()+6)%7)):i.setFullYear(n.y,n.m,n.d),i.setHours(n.H+(n.Z/100|0),n.M+n.Z%100,n.S,n.L),r?i._:i},n.toString=function(){return t},n}function h(t,e,n,r){for(var i,a,o,s=0,l=e.length,c=n.length;s<l;){if(r>=c)return-1;if(37===(i=e.charCodeAt(s++))){if(o=e.charAt(s++),!(a=w[o in Ye?e.charAt(s++):o])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}u.utc=function(t){var e=u(t);function n(t){try{var n=new(Re=ze);return n._=t,e(n)}finally{Re=Date}}return n.parse=function(t){try{Re=ze;var n=e.parse(t);return n&&n._}finally{Re=Date}},n.toString=e.toString,n},u.multi=u.utc.multi=cn;var d=t.map(),f=We(o),p=qe(o),m=We(s),g=qe(s),y=We(l),v=qe(l),_=We(c),b=qe(c);a.forEach((function(t,e){d.set(t.toLowerCase(),e)}));var x={a:function(t){return s[t.getDay()]},A:function(t){return o[t.getDay()]},b:function(t){return c[t.getMonth()]},B:function(t){return l[t.getMonth()]},c:u(n),d:function(t,e){return Ue(t.getDate(),e,2)},e:function(t,e){return Ue(t.getDate(),e,2)},H:function(t,e){return Ue(t.getHours(),e,2)},I:function(t,e){return Ue(t.getHours()%12||12,e,2)},j:function(t,e){return Ue(1+Pe.dayOfYear(t),e,3)},L:function(t,e){return Ue(t.getMilliseconds(),e,3)},m:function(t,e){return Ue(t.getMonth()+1,e,2)},M:function(t,e){return Ue(t.getMinutes(),e,2)},p:function(t){return a[+(t.getHours()>=12)]},S:function(t,e){return Ue(t.getSeconds(),e,2)},U:function(t,e){return Ue(Pe.sundayOfYear(t),e,2)},w:function(t){return t.getDay()},W:function(t,e){return Ue(Pe.mondayOfYear(t),e,2)},x:u(r),X:u(i),y:function(t,e){return Ue(t.getFullYear()%100,e,2)},Y:function(t,e){return Ue(t.getFullYear()%1e4,e,4)},Z:sn,\"%\":function(){return\"%\"}},w={a:function(t,e,n){m.lastIndex=0;var r=m.exec(e.slice(n));return r?(t.w=g.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(t,e,n){f.lastIndex=0;var r=f.exec(e.slice(n));return r?(t.w=p.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(t,e,n){_.lastIndex=0;var r=_.exec(e.slice(n));return r?(t.m=b.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(t,e,n){y.lastIndex=0;var r=y.exec(e.slice(n));return r?(t.m=v.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(t,e,n){return h(t,x.c.toString(),e,n)},d:tn,e:tn,H:nn,I:nn,j:en,L:on,m:Qe,M:rn,p:function(t,e,n){var r=d.get(e.slice(n,n+=2).toLowerCase());return null==r?-1:(t.p=r,n)},S:an,U:Xe,w:Ge,W:Ze,x:function(t,e,n){return h(t,x.x.toString(),e,n)},X:function(t,e,n){return h(t,x.X.toString(),e,n)},y:Ke,Y:Je,Z:$e,\"%\":ln};return u}Pe.year=Fe((function(t){return(t=Pe.day(t)).setMonth(0,1),t}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t){return t.getFullYear()})),Pe.years=Pe.year.range,Pe.years.utc=Pe.year.utc.range,Pe.day=Fe((function(t){var e=new Re(2e3,0);return e.setFullYear(t.getFullYear(),t.getMonth(),t.getDate()),e}),(function(t,e){t.setDate(t.getDate()+e)}),(function(t){return t.getDate()-1})),Pe.days=Pe.day.range,Pe.days.utc=Pe.day.utc.range,Pe.dayOfYear=function(t){var e=Pe.year(t);return Math.floor((t-e-6e4*(t.getTimezoneOffset()-e.getTimezoneOffset()))/864e5)},[\"sunday\",\"monday\",\"tuesday\",\"wednesday\",\"thursday\",\"friday\",\"saturday\"].forEach((function(t,e){e=7-e;var n=Pe[t]=Fe((function(t){return(t=Pe.day(t)).setDate(t.getDate()-(t.getDay()+e)%7),t}),(function(t,e){t.setDate(t.getDate()+7*Math.floor(e))}),(function(t){var n=Pe.year(t).getDay();return Math.floor((Pe.dayOfYear(t)+(n+e)%7)/7)-(n!==e)}));Pe[t+\"s\"]=n.range,Pe[t+\"s\"].utc=n.utc.range,Pe[t+\"OfYear\"]=function(t){var n=Pe.year(t).getDay();return Math.floor((Pe.dayOfYear(t)+(n+e)%7)/7)}})),Pe.week=Pe.sunday,Pe.weeks=Pe.sunday.range,Pe.weeks.utc=Pe.sunday.utc.range,Pe.weekOfYear=Pe.sundayOfYear;var Ye={\"-\":\"\",_:\" \",0:\"0\"},He=/^\\s*\\d+/,Ve=/^%/;function Ue(t,e,n){var r=t<0?\"-\":\"\",i=(r?-t:t)+\"\",a=i.length;return r+(a<n?new Array(n-a+1).join(e)+i:i)}function We(e){return new RegExp(\"^(?:\"+e.map(t.requote).join(\"|\")+\")\",\"i\")}function qe(t){for(var e=new x,n=-1,r=t.length;++n<r;)e.set(t[n].toLowerCase(),n);return e}function Ge(t,e,n){He.lastIndex=0;var r=He.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function Xe(t,e,n){He.lastIndex=0;var r=He.exec(e.slice(n));return r?(t.U=+r[0],n+r[0].length):-1}function Ze(t,e,n){He.lastIndex=0;var r=He.exec(e.slice(n));return r?(t.W=+r[0],n+r[0].length):-1}function Je(t,e,n){He.lastIndex=0;var r=He.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function Ke(t,e,n){He.lastIndex=0;var r,i=He.exec(e.slice(n,n+2));return i?(t.y=(r=+i[0])+(r>68?1900:2e3),n+i[0].length):-1}function $e(t,e,n){return/^[+-]\\d{4}$/.test(e=e.slice(n,n+5))?(t.Z=-e,n+5):-1}function Qe(t,e,n){He.lastIndex=0;var r=He.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function tn(t,e,n){He.lastIndex=0;var r=He.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function en(t,e,n){He.lastIndex=0;var r=He.exec(e.slice(n,n+3));return r?(t.j=+r[0],n+r[0].length):-1}function nn(t,e,n){He.lastIndex=0;var r=He.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function rn(t,e,n){He.lastIndex=0;var r=He.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function an(t,e,n){He.lastIndex=0;var r=He.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function on(t,e,n){He.lastIndex=0;var r=He.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function sn(t){var e=t.getTimezoneOffset(),n=e>0?\"-\":\"+\",r=v(e)/60|0,i=v(e)%60;return n+Ue(r,\"0\",2)+Ue(i,\"0\",2)}function ln(t,e,n){Ve.lastIndex=0;var r=Ve.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function cn(t){for(var e=t.length,n=-1;++n<e;)t[n][0]=this(t[n][0]);return function(e){for(var n=0,r=t[n];!r[1](e);)r=t[++n];return r[0](e)}}t.locale=function(t){return{numberFormat:Ee(t),timeFormat:Be(t)}};var un=t.locale({decimal:\".\",thousands:\",\",grouping:[3],currency:[\"$\",\"\"],dateTime:\"%a %b %e %X %Y\",date:\"%m/%d/%Y\",time:\"%H:%M:%S\",periods:[\"AM\",\"PM\"],days:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],shortDays:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],shortMonths:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]});function hn(){}t.format=un.numberFormat,t.geo={},hn.prototype={s:0,t:0,add:function(t){fn(t,this.t,dn),fn(dn.s,this.s,this),this.s?this.t+=dn.t:this.s=dn.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var dn=new hn;function fn(t,e,n){var r=n.s=t+e,i=r-t;n.t=t-(r-i)+(e-i)}function pn(t,e){t&&gn.hasOwnProperty(t.type)&&gn[t.type](t,e)}t.geo.stream=function(t,e){t&&mn.hasOwnProperty(t.type)?mn[t.type](t,e):pn(t,e)};var mn={Feature:function(t,e){pn(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r<i;)pn(n[r].geometry,e)}},gn={Sphere:function(t,e){e.sphere()},Point:function(t,e){e.point((t=t.coordinates)[0],t[1],t[2])},MultiPoint:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)e.point((t=n[r])[0],t[1],t[2])},LineString:function(t,e){yn(t.coordinates,e,0)},MultiLineString:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)yn(n[r],e,0)},Polygon:function(t,e){vn(t.coordinates,e)},MultiPolygon:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)vn(n[r],e)},GeometryCollection:function(t,e){for(var n=t.geometries,r=-1,i=n.length;++r<i;)pn(n[r],e)}};function yn(t,e,n){var r,i=-1,a=t.length-n;for(e.lineStart();++i<a;)e.point((r=t[i])[0],r[1],r[2]);e.lineEnd()}function vn(t,e){var n=-1,r=t.length;for(e.polygonStart();++n<r;)yn(t[n],e,1);e.polygonEnd()}t.geo.area=function(e){return _n=0,t.geo.stream(e,Dn),_n};var _n,bn,xn,wn,kn,Mn,Tn,Sn,An,Ln,Cn,En,On=new hn,Dn={sphere:function(){_n+=4*St},point:P,lineStart:P,lineEnd:P,polygonStart:function(){On.reset(),Dn.lineStart=In},polygonEnd:function(){var t=2*On;_n+=t<0?4*St+t:t,Dn.lineStart=Dn.lineEnd=Dn.point=P}};function In(){var t,e,n,r,i;function a(t,e){e=e*Et/2+St/4;var a=(t*=Et)-n,o=a>=0?1:-1,s=o*a,l=Math.cos(e),c=Math.sin(e),u=i*c,h=r*l+u*Math.cos(s),d=u*o*Math.sin(s);On.add(Math.atan2(d,h)),n=t,r=l,i=c}Dn.point=function(o,s){Dn.point=a,n=(t=o)*Et,r=Math.cos(s=(e=s)*Et/2+St/4),i=Math.sin(s)},Dn.lineEnd=function(){a(t,e)}}function Pn(t){var e=t[0],n=t[1],r=Math.cos(n);return[r*Math.cos(e),r*Math.sin(e),Math.sin(n)]}function Rn(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function zn(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function jn(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function Fn(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function Nn(t){var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}function Bn(t){return[Math.atan2(t[1],t[0]),Rt(t[2])]}function Yn(t,e){return v(t[0]-e[0])<Mt&&v(t[1]-e[1])<Mt}t.geo.bounds=function(){var e,n,r,i,a,o,s,l,c,u,h,d={point:f,lineStart:m,lineEnd:g,polygonStart:function(){d.point=y,d.lineStart=_,d.lineEnd=b,c=0,Dn.polygonStart()},polygonEnd:function(){Dn.polygonEnd(),d.point=f,d.lineStart=m,d.lineEnd=g,On<0?(e=-(r=180),n=-(i=90)):c>Mt?i=90:c<-Mt&&(n=-90),h[0]=e,h[1]=r}};function f(t,a){u.push(h=[e=t,r=t]),a<n&&(n=a),a>i&&(i=a)}function p(t,o){var s=Pn([t*Et,o*Et]);if(l){var c=zn(l,s),u=zn([c[1],-c[0],0],c);Nn(u),u=Bn(u);var h=t-a,d=h>0?1:-1,p=u[0]*Ot*d,m=v(h)>180;if(m^(d*a<p&&p<d*t))(g=u[1]*Ot)>i&&(i=g);else if(m^(d*a<(p=(p+360)%360-180)&&p<d*t)){var g;(g=-u[1]*Ot)<n&&(n=g)}else o<n&&(n=o),o>i&&(i=o);m?t<a?x(e,t)>x(e,r)&&(r=t):x(t,r)>x(e,r)&&(e=t):r>=e?(t<e&&(e=t),t>r&&(r=t)):t>a?x(e,t)>x(e,r)&&(r=t):x(t,r)>x(e,r)&&(e=t)}else f(t,o);l=s,a=t}function m(){d.point=p}function g(){h[0]=e,h[1]=r,d.point=f,l=null}function y(t,e){if(l){var n=t-a;c+=v(n)>180?n+(n>0?360:-360):n}else o=t,s=e;Dn.point(t,e),p(t,e)}function _(){Dn.lineStart()}function b(){y(o,s),Dn.lineEnd(),v(c)>Mt&&(e=-(r=180)),h[0]=e,h[1]=r,l=null}function x(t,e){return(e-=t)<0?e+360:e}function w(t,e){return t[0]-e[0]}function k(t,e){return e[0]<=e[1]?e[0]<=t&&t<=e[1]:t<e[0]||e[1]<t}return function(a){if(i=r=-(e=n=1/0),u=[],t.geo.stream(a,d),c=u.length){u.sort(w);for(var o=1,s=[m=u[0]];o<c;++o)k((f=u[o])[0],m)||k(f[1],m)?(x(m[0],f[1])>x(m[0],m[1])&&(m[1]=f[1]),x(f[0],m[1])>x(m[0],m[1])&&(m[0]=f[0])):s.push(m=f);for(var l,c,f,p=-1/0,m=(o=0,s[c=s.length-1]);o<=c;m=f,++o)(l=x(m[1],(f=s[o])[0]))>p&&(p=l,e=f[0],r=m[1])}return u=h=null,e===1/0||n===1/0?[[NaN,NaN],[NaN,NaN]]:[[e,n],[r,i]]}}(),t.geo.centroid=function(e){bn=xn=wn=kn=Mn=Tn=Sn=An=Ln=Cn=En=0,t.geo.stream(e,Hn);var n=Ln,r=Cn,i=En,a=n*n+r*r+i*i;return a<Tt&&(n=Tn,r=Sn,i=An,xn<Mt&&(n=wn,r=kn,i=Mn),(a=n*n+r*r+i*i)<Tt)?[NaN,NaN]:[Math.atan2(r,n)*Ot,Rt(i/Math.sqrt(a))*Ot]};var Hn={sphere:P,point:Vn,lineStart:Wn,lineEnd:qn,polygonStart:function(){Hn.lineStart=Gn},polygonEnd:function(){Hn.lineStart=Wn}};function Vn(t,e){t*=Et;var n=Math.cos(e*=Et);Un(n*Math.cos(t),n*Math.sin(t),Math.sin(e))}function Un(t,e,n){++bn,wn+=(t-wn)/bn,kn+=(e-kn)/bn,Mn+=(n-Mn)/bn}function Wn(){var t,e,n;function r(r,i){r*=Et;var a=Math.cos(i*=Et),o=a*Math.cos(r),s=a*Math.sin(r),l=Math.sin(i),c=Math.atan2(Math.sqrt((c=e*l-n*s)*c+(c=n*o-t*l)*c+(c=t*s-e*o)*c),t*o+e*s+n*l);xn+=c,Tn+=c*(t+(t=o)),Sn+=c*(e+(e=s)),An+=c*(n+(n=l)),Un(t,e,n)}Hn.point=function(i,a){i*=Et;var o=Math.cos(a*=Et);t=o*Math.cos(i),e=o*Math.sin(i),n=Math.sin(a),Hn.point=r,Un(t,e,n)}}function qn(){Hn.point=Vn}function Gn(){var t,e,n,r,i;function a(t,e){t*=Et;var a=Math.cos(e*=Et),o=a*Math.cos(t),s=a*Math.sin(t),l=Math.sin(e),c=r*l-i*s,u=i*o-n*l,h=n*s-r*o,d=Math.sqrt(c*c+u*u+h*h),f=n*o+r*s+i*l,p=d&&-Pt(f)/d,m=Math.atan2(d,f);Ln+=p*c,Cn+=p*u,En+=p*h,xn+=m,Tn+=m*(n+(n=o)),Sn+=m*(r+(r=s)),An+=m*(i+(i=l)),Un(n,r,i)}Hn.point=function(o,s){t=o,e=s,Hn.point=a,o*=Et;var l=Math.cos(s*=Et);n=l*Math.cos(o),r=l*Math.sin(o),i=Math.sin(s),Un(n,r,i)},Hn.lineEnd=function(){a(t,e),Hn.lineEnd=qn,Hn.point=Vn}}function Xn(t,e){function n(n,r){return n=t(n,r),e(n[0],n[1])}return t.invert&&e.invert&&(n.invert=function(n,r){return(n=e.invert(n,r))&&t.invert(n[0],n[1])}),n}function Zn(){return!0}function Jn(t,e,n,r,i){var a=[],o=[];if(t.forEach((function(t){if(!((e=t.length-1)<=0)){var e,n=t[0],r=t[e];if(Yn(n,r)){i.lineStart();for(var s=0;s<e;++s)i.point((n=t[s])[0],n[1]);i.lineEnd()}else{var l=new $n(n,t,null,!0),c=new $n(n,null,l,!1);l.o=c,a.push(l),o.push(c),l=new $n(r,t,null,!1),c=new $n(r,null,l,!0),l.o=c,a.push(l),o.push(c)}}})),o.sort(e),Kn(a),Kn(o),a.length){for(var s=0,l=n,c=o.length;s<c;++s)o[s].e=l=!l;for(var u,h,d=a[0];;){for(var f=d,p=!0;f.v;)if((f=f.n)===d)return;u=f.z,i.lineStart();do{if(f.v=f.o.v=!0,f.e){if(p)for(s=0,c=u.length;s<c;++s)i.point((h=u[s])[0],h[1]);else r(f.x,f.n.x,1,i);f=f.n}else{if(p)for(s=(u=f.p.z).length-1;s>=0;--s)i.point((h=u[s])[0],h[1]);else r(f.x,f.p.x,-1,i);f=f.p}u=(f=f.o).z,p=!p}while(!f.v);i.lineEnd()}}}function Kn(t){if(e=t.length){for(var e,n,r=0,i=t[0];++r<e;)i.n=n=t[r],n.p=i,i=n;i.n=n=t[0],n.p=i}}function $n(t,e,n,r){this.x=t,this.z=e,this.o=n,this.e=r,this.v=!1,this.n=this.p=null}function Qn(e,n,r,i){return function(a,o){var s,l=n(o),c=a.invert(i[0],i[1]),u={point:h,lineStart:f,lineEnd:p,polygonStart:function(){u.point=b,u.lineStart=x,u.lineEnd=w,s=[],m=[]},polygonEnd:function(){u.point=h,u.lineStart=f,u.lineEnd=p,s=t.merge(s);var e=function(t,e){var n=t[0],r=t[1],i=[Math.sin(n),-Math.cos(n),0],a=0,o=0;On.reset();for(var s=0,l=e.length;s<l;++s){var c=e[s],u=c.length;if(u)for(var h=c[0],d=h[0],f=h[1]/2+St/4,p=Math.sin(f),m=Math.cos(f),g=1;;){g===u&&(g=0);var y=(t=c[g])[0],v=t[1]/2+St/4,_=Math.sin(v),b=Math.cos(v),x=y-d,w=x>=0?1:-1,k=w*x,M=k>St,T=p*_;if(On.add(Math.atan2(T*w*Math.sin(k),m*b+T*Math.cos(k))),a+=M?x+w*At:x,M^d>=n^y>=n){var S=zn(Pn(h),Pn(t));Nn(S);var A=zn(i,S);Nn(A);var L=(M^x>=0?-1:1)*Rt(A[2]);(r>L||r===L&&(S[0]||S[1]))&&(o+=M^x>=0?1:-1)}if(!g++)break;d=y,p=_,m=b,h=t}}return(a<-Mt||a<Mt&&On<-Mt)^1&o}(c,m);s.length?(_||(o.polygonStart(),_=!0),Jn(s,nr,e,r,o)):e&&(_||(o.polygonStart(),_=!0),o.lineStart(),r(null,null,1,o),o.lineEnd()),_&&(o.polygonEnd(),_=!1),s=m=null},sphere:function(){o.polygonStart(),o.lineStart(),r(null,null,1,o),o.lineEnd(),o.polygonEnd()}};function h(t,n){var r=a(t,n);e(t=r[0],n=r[1])&&o.point(t,n)}function d(t,e){var n=a(t,e);l.point(n[0],n[1])}function f(){u.point=d,l.lineStart()}function p(){u.point=h,l.lineEnd()}var m,g,y=er(),v=n(y),_=!1;function b(t,e){g.push([t,e]);var n=a(t,e);v.point(n[0],n[1])}function x(){v.lineStart(),g=[]}function w(){b(g[0][0],g[0][1]),v.lineEnd();var t,e=v.clean(),n=y.buffer(),r=n.length;if(g.pop(),m.push(g),g=null,r)if(1&e){var i,a=-1;if((r=(t=n[0]).length-1)>0){for(_||(o.polygonStart(),_=!0),o.lineStart();++a<r;)o.point((i=t[a])[0],i[1]);o.lineEnd()}}else r>1&&2&e&&n.push(n.pop().concat(n.shift())),s.push(n.filter(tr))}return u}}function tr(t){return t.length>1}function er(){var t,e=[];return{lineStart:function(){e.push(t=[])},point:function(e,n){t.push([e,n])},lineEnd:P,buffer:function(){var n=e;return e=[],t=null,n},rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))}}}function nr(t,e){return((t=t.x)[0]<0?t[1]-Ct-Mt:Ct-t[1])-((e=e.x)[0]<0?e[1]-Ct-Mt:Ct-e[1])}var rr=Qn(Zn,(function(t){var e,n=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(a,o){var s=a>0?St:-St,l=v(a-n);v(l-St)<Mt?(t.point(n,r=(r+o)/2>0?Ct:-Ct),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(s,r),t.point(a,r),e=0):i!==s&&l>=St&&(v(n-i)<Mt&&(n-=i*Mt),v(a-s)<Mt&&(a-=s*Mt),r=function(t,e,n,r){var i,a,o=Math.sin(t-n);return v(o)>Mt?Math.atan((Math.sin(e)*(a=Math.cos(r))*Math.sin(n)-Math.sin(r)*(i=Math.cos(e))*Math.sin(t))/(i*a*o)):(e+r)/2}(n,r,a,o),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(s,r),e=0),t.point(n=a,r=o),i=s},lineEnd:function(){t.lineEnd(),n=r=NaN},clean:function(){return 2-e}}}),(function(t,e,n,r){var i;if(null==t)r.point(-St,i=n*Ct),r.point(0,i),r.point(St,i),r.point(St,0),r.point(St,-i),r.point(0,-i),r.point(-St,-i),r.point(-St,0),r.point(-St,i);else if(v(t[0]-e[0])>Mt){var a=t[0]<e[0]?St:-St;r.point(-a,i=n*a/2),r.point(0,i),r.point(a,i)}else r.point(e[0],e[1])}),[-St,-St/2]);function ir(t){var e=Math.cos(t),n=e>0,r=v(e)>Mt;return Qn(i,(function(t){var e,s,l,c,u;return{lineStart:function(){c=l=!1,u=1},point:function(h,d){var f,p=[h,d],m=i(h,d),g=n?m?0:o(h,d):m?o(h+(h<0?St:-St),d):0;if(!e&&(c=l=m)&&t.lineStart(),m!==l&&(f=a(e,p),(Yn(e,f)||Yn(p,f))&&(p[0]+=Mt,p[1]+=Mt,m=i(p[0],p[1]))),m!==l)u=0,m?(t.lineStart(),f=a(p,e),t.point(f[0],f[1])):(f=a(e,p),t.point(f[0],f[1]),t.lineEnd()),e=f;else if(r&&e&&n^m){var y;g&s||!(y=a(p,e,!0))||(u=0,n?(t.lineStart(),t.point(y[0][0],y[0][1]),t.point(y[1][0],y[1][1]),t.lineEnd()):(t.point(y[1][0],y[1][1]),t.lineEnd(),t.lineStart(),t.point(y[0][0],y[0][1])))}!m||e&&Yn(e,p)||t.point(p[0],p[1]),e=p,l=m,s=g},lineEnd:function(){l&&t.lineEnd(),e=null},clean:function(){return u|(c&&l)<<1}}}),Yr(t,6*Et),n?[0,-t]:[-St,t-St]);function i(t,n){return Math.cos(t)*Math.cos(n)>e}function a(t,n,r){var i=[1,0,0],a=zn(Pn(t),Pn(n)),o=Rn(a,a),s=a[0],l=o-s*s;if(!l)return!r&&t;var c=e*o/l,u=-e*s/l,h=zn(i,a),d=Fn(i,c);jn(d,Fn(a,u));var f=h,p=Rn(d,f),m=Rn(f,f),g=p*p-m*(Rn(d,d)-1);if(!(g<0)){var y=Math.sqrt(g),_=Fn(f,(-p-y)/m);if(jn(_,d),_=Bn(_),!r)return _;var b,x=t[0],w=n[0],k=t[1],M=n[1];w<x&&(b=x,x=w,w=b);var T=w-x,S=v(T-St)<Mt;if(!S&&M<k&&(b=k,k=M,M=b),S||T<Mt?S?k+M>0^_[1]<(v(_[0]-x)<Mt?k:M):k<=_[1]&&_[1]<=M:T>St^(x<=_[0]&&_[0]<=w)){var A=Fn(f,(-p+y)/m);return jn(A,d),[_,Bn(A)]}}}function o(e,r){var i=n?t:St-t,a=0;return e<-i?a|=1:e>i&&(a|=2),r<-i?a|=4:r>i&&(a|=8),a}}function ar(t,e,n,r){return function(i){var a,o=i.a,s=i.b,l=o.x,c=o.y,u=0,h=1,d=s.x-l,f=s.y-c;if(a=t-l,d||!(a>0)){if(a/=d,d<0){if(a<u)return;a<h&&(h=a)}else if(d>0){if(a>h)return;a>u&&(u=a)}if(a=n-l,d||!(a<0)){if(a/=d,d<0){if(a>h)return;a>u&&(u=a)}else if(d>0){if(a<u)return;a<h&&(h=a)}if(a=e-c,f||!(a>0)){if(a/=f,f<0){if(a<u)return;a<h&&(h=a)}else if(f>0){if(a>h)return;a>u&&(u=a)}if(a=r-c,f||!(a<0)){if(a/=f,f<0){if(a>h)return;a>u&&(u=a)}else if(f>0){if(a<u)return;a<h&&(h=a)}return u>0&&(i.a={x:l+u*d,y:c+u*f}),h<1&&(i.b={x:l+h*d,y:c+h*f}),i}}}}}}var or=1e9;function sr(e,n,r,i){return function(l){var c,u,h,d,f,p,m,g,y,v,_,b=l,x=er(),w=ar(e,n,r,i),k={point:S,lineStart:function(){k.point=A,u&&u.push(h=[]),v=!0,y=!1,m=g=NaN},lineEnd:function(){c&&(A(d,f),p&&y&&x.rejoin(),c.push(x.buffer())),k.point=S,y&&l.lineEnd()},polygonStart:function(){l=x,c=[],u=[],_=!0},polygonEnd:function(){l=b,c=t.merge(c);var n=function(t){for(var e=0,n=u.length,r=t[1],i=0;i<n;++i)for(var a,o=1,s=u[i],l=s.length,c=s[0];o<l;++o)a=s[o],c[1]<=r?a[1]>r&&It(c,a,t)>0&&++e:a[1]<=r&&It(c,a,t)<0&&--e,c=a;return 0!==e}([e,i]),r=_&&n,a=c.length;(r||a)&&(l.polygonStart(),r&&(l.lineStart(),M(null,null,1,l),l.lineEnd()),a&&Jn(c,o,n,M,l),l.polygonEnd()),c=u=h=null}};function M(t,o,l,c){var u=0,h=0;if(null==t||(u=a(t,l))!==(h=a(o,l))||s(t,o)<0^l>0)do{c.point(0===u||3===u?e:r,u>1?i:n)}while((u=(u+l+4)%4)!==h);else c.point(o[0],o[1])}function T(t,a){return e<=t&&t<=r&&n<=a&&a<=i}function S(t,e){T(t,e)&&l.point(t,e)}function A(t,e){var n=T(t=Math.max(-1e9,Math.min(or,t)),e=Math.max(-1e9,Math.min(or,e)));if(u&&h.push([t,e]),v)d=t,f=e,p=n,v=!1,n&&(l.lineStart(),l.point(t,e));else if(n&&y)l.point(t,e);else{var r={a:{x:m,y:g},b:{x:t,y:e}};w(r)?(y||(l.lineStart(),l.point(r.a.x,r.a.y)),l.point(r.b.x,r.b.y),n||l.lineEnd(),_=!1):n&&(l.lineStart(),l.point(t,e),_=!1)}m=t,g=e,y=n}return k};function a(t,i){return v(t[0]-e)<Mt?i>0?0:3:v(t[0]-r)<Mt?i>0?2:1:v(t[1]-n)<Mt?i>0?1:0:i>0?3:2}function o(t,e){return s(t.x,e.x)}function s(t,e){var n=a(t,1),r=a(e,1);return n!==r?n-r:0===n?e[1]-t[1]:1===n?t[0]-e[0]:2===n?t[1]-e[1]:e[0]-t[0]}}function lr(t){var e=0,n=St/3,r=Ir(t),i=r(e,n);return i.parallels=function(t){return arguments.length?r(e=t[0]*St/180,n=t[1]*St/180):[e/St*180,n/St*180]},i}function cr(t,e){var n=Math.sin(t),r=(n+Math.sin(e))/2,i=1+n*(2*r-n),a=Math.sqrt(i)/r;function o(t,e){var n=Math.sqrt(i-2*r*Math.sin(e))/r;return[n*Math.sin(t*=r),a-n*Math.cos(t)]}return o.invert=function(t,e){var n=a-e;return[Math.atan2(t,n)/r,Rt((i-(t*t+n*n)*r*r)/(2*r))]},o}t.geo.clipExtent=function(){var t,e,n,r,i,a,o={stream:function(t){return i&&(i.valid=!1),(i=a(t)).valid=!0,i},extent:function(s){return arguments.length?(a=sr(t=+s[0][0],e=+s[0][1],n=+s[1][0],r=+s[1][1]),i&&(i.valid=!1,i=null),o):[[t,e],[n,r]]}};return o.extent([[0,0],[960,500]])},(t.geo.conicEqualArea=function(){return lr(cr)}).raw=cr,t.geo.albers=function(){return t.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},t.geo.albersUsa=function(){var e,n,r,i,a=t.geo.albers(),o=t.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),s=t.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(t,n){e=[t,n]}};function c(t){var a=t[0],o=t[1];return e=null,n(a,o),e||(r(a,o),e)||i(a,o),e}return c.invert=function(t){var e=a.scale(),n=a.translate(),r=(t[0]-n[0])/e,i=(t[1]-n[1])/e;return(i>=.12&&i<.234&&r>=-.425&&r<-.214?o:i>=.166&&i<.234&&r>=-.214&&r<-.115?s:a).invert(t)},c.stream=function(t){var e=a.stream(t),n=o.stream(t),r=s.stream(t);return{point:function(t,i){e.point(t,i),n.point(t,i),r.point(t,i)},sphere:function(){e.sphere(),n.sphere(),r.sphere()},lineStart:function(){e.lineStart(),n.lineStart(),r.lineStart()},lineEnd:function(){e.lineEnd(),n.lineEnd(),r.lineEnd()},polygonStart:function(){e.polygonStart(),n.polygonStart(),r.polygonStart()},polygonEnd:function(){e.polygonEnd(),n.polygonEnd(),r.polygonEnd()}}},c.precision=function(t){return arguments.length?(a.precision(t),o.precision(t),s.precision(t),c):a.precision()},c.scale=function(t){return arguments.length?(a.scale(t),o.scale(.35*t),s.scale(t),c.translate(a.translate())):a.scale()},c.translate=function(t){if(!arguments.length)return a.translate();var e=a.scale(),u=+t[0],h=+t[1];return n=a.translate(t).clipExtent([[u-.455*e,h-.238*e],[u+.455*e,h+.238*e]]).stream(l).point,r=o.translate([u-.307*e,h+.201*e]).clipExtent([[u-.425*e+Mt,h+.12*e+Mt],[u-.214*e-Mt,h+.234*e-Mt]]).stream(l).point,i=s.translate([u-.205*e,h+.212*e]).clipExtent([[u-.214*e+Mt,h+.166*e+Mt],[u-.115*e-Mt,h+.234*e-Mt]]).stream(l).point,c},c.scale(1070)};var ur,hr,dr,fr,pr,mr,gr={point:P,lineStart:P,lineEnd:P,polygonStart:function(){hr=0,gr.lineStart=yr},polygonEnd:function(){gr.lineStart=gr.lineEnd=gr.point=P,ur+=v(hr/2)}};function yr(){var t,e,n,r;function i(t,e){hr+=r*t-n*e,n=t,r=e}gr.point=function(a,o){gr.point=i,t=n=a,e=r=o},gr.lineEnd=function(){i(t,e)}}var vr={point:function(t,e){t<dr&&(dr=t),t>pr&&(pr=t),e<fr&&(fr=e),e>mr&&(mr=e)},lineStart:P,lineEnd:P,polygonStart:P,polygonEnd:P};function _r(){var t=br(4.5),e=[],n={point:r,lineStart:function(){n.point=i},lineEnd:o,polygonStart:function(){n.lineEnd=s},polygonEnd:function(){n.lineEnd=o,n.point=r},pointRadius:function(e){return t=br(e),n},result:function(){if(e.length){var t=e.join(\"\");return e=[],t}}};function r(n,r){e.push(\"M\",n,\",\",r,t)}function i(t,r){e.push(\"M\",t,\",\",r),n.point=a}function a(t,n){e.push(\"L\",t,\",\",n)}function o(){n.point=r}function s(){e.push(\"Z\")}return n}function br(t){return\"m0,\"+t+\"a\"+t+\",\"+t+\" 0 1,1 0,\"+-2*t+\"a\"+t+\",\"+t+\" 0 1,1 0,\"+2*t+\"z\"}var xr,wr={point:kr,lineStart:Mr,lineEnd:Tr,polygonStart:function(){wr.lineStart=Sr},polygonEnd:function(){wr.point=kr,wr.lineStart=Mr,wr.lineEnd=Tr}};function kr(t,e){wn+=t,kn+=e,++Mn}function Mr(){var t,e;function n(n,r){var i=n-t,a=r-e,o=Math.sqrt(i*i+a*a);Tn+=o*(t+n)/2,Sn+=o*(e+r)/2,An+=o,kr(t=n,e=r)}wr.point=function(r,i){wr.point=n,kr(t=r,e=i)}}function Tr(){wr.point=kr}function Sr(){var t,e,n,r;function i(t,e){var i=t-n,a=e-r,o=Math.sqrt(i*i+a*a);Tn+=o*(n+t)/2,Sn+=o*(r+e)/2,An+=o,Ln+=(o=r*t-n*e)*(n+t),Cn+=o*(r+e),En+=3*o,kr(n=t,r=e)}wr.point=function(a,o){wr.point=i,kr(t=n=a,e=r=o)},wr.lineEnd=function(){i(t,e)}}function Ar(t){var e=4.5,n={point:r,lineStart:function(){n.point=i},lineEnd:o,polygonStart:function(){n.lineEnd=s},polygonEnd:function(){n.lineEnd=o,n.point=r},pointRadius:function(t){return e=t,n},result:P};function r(n,r){t.moveTo(n+e,r),t.arc(n,r,e,0,At)}function i(e,r){t.moveTo(e,r),n.point=a}function a(e,n){t.lineTo(e,n)}function o(){n.point=r}function s(){t.closePath()}return n}function Lr(t){var e=.5,n=Math.cos(30*Et),r=16;function i(t){return(r?o:a)(t)}function a(e){return Or(e,(function(n,r){n=t(n,r),e.point(n[0],n[1])}))}function o(e){var n,i,a,o,l,c,u,h,d,f,p,m,g={point:y,lineStart:v,lineEnd:b,polygonStart:function(){e.polygonStart(),g.lineStart=x},polygonEnd:function(){e.polygonEnd(),g.lineStart=v}};function y(n,r){n=t(n,r),e.point(n[0],n[1])}function v(){h=NaN,g.point=_,e.lineStart()}function _(n,i){var a=Pn([n,i]),o=t(n,i);s(h,d,u,f,p,m,h=o[0],d=o[1],u=n,f=a[0],p=a[1],m=a[2],r,e),e.point(h,d)}function b(){g.point=y,e.lineEnd()}function x(){v(),g.point=w,g.lineEnd=k}function w(t,e){_(n=t,e),i=h,a=d,o=f,l=p,c=m,g.point=_}function k(){s(h,d,u,f,p,m,i,a,n,o,l,c,r,e),g.lineEnd=b,b()}return g}function s(r,i,a,o,l,c,u,h,d,f,p,m,g,y){var _=u-r,b=h-i,x=_*_+b*b;if(x>4*e&&g--){var w=o+f,k=l+p,M=c+m,T=Math.sqrt(w*w+k*k+M*M),S=Math.asin(M/=T),A=v(v(M)-1)<Mt||v(a-d)<Mt?(a+d)/2:Math.atan2(k,w),L=t(A,S),C=L[0],E=L[1],O=C-r,D=E-i,I=b*O-_*D;(I*I/x>e||v((_*O+b*D)/x-.5)>.3||o*f+l*p+c*m<n)&&(s(r,i,a,o,l,c,C,E,A,w/=T,k/=T,M,g,y),y.point(C,E),s(C,E,A,w,k,M,u,h,d,f,p,m,g,y))}}return i.precision=function(t){return arguments.length?(r=(e=t*t)>0&&16,i):Math.sqrt(e)},i}function Cr(t){var e=Lr((function(e,n){return t([e*Ot,n*Ot])}));return function(t){return Pr(e(t))}}function Er(t){this.stream=t}function Or(t,e){return{point:e,sphere:function(){t.sphere()},lineStart:function(){t.lineStart()},lineEnd:function(){t.lineEnd()},polygonStart:function(){t.polygonStart()},polygonEnd:function(){t.polygonEnd()}}}function Dr(t){return Ir((function(){return t}))()}function Ir(e){var n,r,i,a,o,s,l=Lr((function(t,e){return[(t=n(t,e))[0]*c+a,o-t[1]*c]})),c=150,u=480,h=250,d=0,f=0,p=0,m=0,g=0,y=rr,v=E,_=null,b=null;function x(t){return[(t=i(t[0]*Et,t[1]*Et))[0]*c+a,o-t[1]*c]}function w(t){return(t=i.invert((t[0]-a)/c,(o-t[1])/c))&&[t[0]*Ot,t[1]*Ot]}function k(){i=Xn(r=jr(p,m,g),n);var t=n(d,f);return a=u-t[0]*c,o=h+t[1]*c,M()}function M(){return s&&(s.valid=!1,s=null),x}return x.stream=function(t){return s&&(s.valid=!1),(s=Pr(y(r,l(v(t))))).valid=!0,s},x.clipAngle=function(t){return arguments.length?(y=null==t?(_=t,rr):ir((_=+t)*Et),M()):_},x.clipExtent=function(t){return arguments.length?(b=t,v=t?sr(t[0][0],t[0][1],t[1][0],t[1][1]):E,M()):b},x.scale=function(t){return arguments.length?(c=+t,k()):c},x.translate=function(t){return arguments.length?(u=+t[0],h=+t[1],k()):[u,h]},x.center=function(t){return arguments.length?(d=t[0]%360*Et,f=t[1]%360*Et,k()):[d*Ot,f*Ot]},x.rotate=function(t){return arguments.length?(p=t[0]%360*Et,m=t[1]%360*Et,g=t.length>2?t[2]%360*Et:0,k()):[p*Ot,m*Ot,g*Ot]},t.rebind(x,l,\"precision\"),function(){return n=e.apply(this,arguments),x.invert=n.invert&&w,k()}}function Pr(t){return Or(t,(function(e,n){t.point(e*Et,n*Et)}))}function Rr(t,e){return[t,e]}function zr(t,e){return[t>St?t-At:t<-St?t+At:t,e]}function jr(t,e,n){return t?e||n?Xn(Nr(t),Br(e,n)):Nr(t):e||n?Br(e,n):zr}function Fr(t){return function(e,n){return[(e+=t)>St?e-At:e<-St?e+At:e,n]}}function Nr(t){var e=Fr(t);return e.invert=Fr(-t),e}function Br(t,e){var n=Math.cos(t),r=Math.sin(t),i=Math.cos(e),a=Math.sin(e);function o(t,e){var o=Math.cos(e),s=Math.cos(t)*o,l=Math.sin(t)*o,c=Math.sin(e),u=c*n+s*r;return[Math.atan2(l*i-u*a,s*n-c*r),Rt(u*i+l*a)]}return o.invert=function(t,e){var o=Math.cos(e),s=Math.cos(t)*o,l=Math.sin(t)*o,c=Math.sin(e),u=c*i-l*a;return[Math.atan2(l*i+c*a,s*n+u*r),Rt(u*n-s*r)]},o}function Yr(t,e){var n=Math.cos(t),r=Math.sin(t);return function(i,a,o,s){var l=o*e;null!=i?(i=Hr(n,i),a=Hr(n,a),(o>0?i<a:i>a)&&(i+=o*At)):(i=t+o*At,a=t-.5*l);for(var c,u=i;o>0?u>a:u<a;u-=l)s.point((c=Bn([n,-r*Math.cos(u),-r*Math.sin(u)]))[0],c[1])}}function Hr(t,e){var n=Pn(e);n[0]-=t,Nn(n);var r=Pt(-n[1]);return((-n[2]<0?-r:r)+2*Math.PI-Mt)%(2*Math.PI)}function Vr(e,n,r){var i=t.range(e,n-Mt,r).concat(n);return function(t){return i.map((function(e){return[t,e]}))}}function Ur(e,n,r){var i=t.range(e,n-Mt,r).concat(n);return function(t){return i.map((function(e){return[e,t]}))}}function Wr(t){return t.source}function qr(t){return t.target}t.geo.path=function(){var e,n,r,i,a,o=4.5;function s(e){return e&&(\"function\"==typeof o&&i.pointRadius(+o.apply(this,arguments)),a&&a.valid||(a=r(i)),t.geo.stream(e,a)),i.result()}function l(){return a=null,s}return s.area=function(e){return ur=0,t.geo.stream(e,r(gr)),ur},s.centroid=function(e){return wn=kn=Mn=Tn=Sn=An=Ln=Cn=En=0,t.geo.stream(e,r(wr)),En?[Ln/En,Cn/En]:An?[Tn/An,Sn/An]:Mn?[wn/Mn,kn/Mn]:[NaN,NaN]},s.bounds=function(e){return pr=mr=-(dr=fr=1/0),t.geo.stream(e,r(vr)),[[dr,fr],[pr,mr]]},s.projection=function(t){return arguments.length?(r=(e=t)?t.stream||Cr(t):E,l()):e},s.context=function(t){return arguments.length?(i=null==(n=t)?new _r:new Ar(t),\"function\"!=typeof o&&i.pointRadius(o),l()):n},s.pointRadius=function(t){return arguments.length?(o=\"function\"==typeof t?t:(i.pointRadius(+t),+t),s):o},s.projection(t.geo.albersUsa()).context(null)},t.geo.transform=function(t){return{stream:function(e){var n=new Er(e);for(var r in t)n[r]=t[r];return n}}},Er.prototype={point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},t.geo.projection=Dr,t.geo.projectionMutator=Ir,(t.geo.equirectangular=function(){return Dr(Rr)}).raw=Rr.invert=Rr,t.geo.rotation=function(t){function e(e){return(e=t(e[0]*Et,e[1]*Et))[0]*=Ot,e[1]*=Ot,e}return t=jr(t[0]%360*Et,t[1]*Et,t.length>2?t[2]*Et:0),e.invert=function(e){return(e=t.invert(e[0]*Et,e[1]*Et))[0]*=Ot,e[1]*=Ot,e},e},zr.invert=Rr,t.geo.circle=function(){var t,e,n=[0,0],r=6;function i(){var t=\"function\"==typeof n?n.apply(this,arguments):n,r=jr(-t[0]*Et,-t[1]*Et,0).invert,i=[];return e(null,null,1,{point:function(t,e){i.push(t=r(t,e)),t[0]*=Ot,t[1]*=Ot}}),{type:\"Polygon\",coordinates:[i]}}return i.origin=function(t){return arguments.length?(n=t,i):n},i.angle=function(n){return arguments.length?(e=Yr((t=+n)*Et,r*Et),i):t},i.precision=function(n){return arguments.length?(e=Yr(t*Et,(r=+n)*Et),i):r},i.angle(90)},t.geo.distance=function(t,e){var n,r=(e[0]-t[0])*Et,i=t[1]*Et,a=e[1]*Et,o=Math.sin(r),s=Math.cos(r),l=Math.sin(i),c=Math.cos(i),u=Math.sin(a),h=Math.cos(a);return Math.atan2(Math.sqrt((n=h*o)*n+(n=c*u-l*h*s)*n),l*u+c*h*s)},t.geo.graticule=function(){var e,n,r,i,a,o,s,l,c,u,h,d,f=10,p=f,m=90,g=360,y=2.5;function _(){return{type:\"MultiLineString\",coordinates:b()}}function b(){return t.range(Math.ceil(i/m)*m,r,m).map(h).concat(t.range(Math.ceil(l/g)*g,s,g).map(d)).concat(t.range(Math.ceil(n/f)*f,e,f).filter((function(t){return v(t%m)>Mt})).map(c)).concat(t.range(Math.ceil(o/p)*p,a,p).filter((function(t){return v(t%g)>Mt})).map(u))}return _.lines=function(){return b().map((function(t){return{type:\"LineString\",coordinates:t}}))},_.outline=function(){return{type:\"Polygon\",coordinates:[h(i).concat(d(s).slice(1),h(r).reverse().slice(1),d(l).reverse().slice(1))]}},_.extent=function(t){return arguments.length?_.majorExtent(t).minorExtent(t):_.minorExtent()},_.majorExtent=function(t){return arguments.length?(l=+t[0][1],s=+t[1][1],(i=+t[0][0])>(r=+t[1][0])&&(t=i,i=r,r=t),l>s&&(t=l,l=s,s=t),_.precision(y)):[[i,l],[r,s]]},_.minorExtent=function(t){return arguments.length?(o=+t[0][1],a=+t[1][1],(n=+t[0][0])>(e=+t[1][0])&&(t=n,n=e,e=t),o>a&&(t=o,o=a,a=t),_.precision(y)):[[n,o],[e,a]]},_.step=function(t){return arguments.length?_.majorStep(t).minorStep(t):_.minorStep()},_.majorStep=function(t){return arguments.length?(m=+t[0],g=+t[1],_):[m,g]},_.minorStep=function(t){return arguments.length?(f=+t[0],p=+t[1],_):[f,p]},_.precision=function(t){return arguments.length?(y=+t,c=Vr(o,a,90),u=Ur(n,e,y),h=Vr(l,s,90),d=Ur(i,r,y),_):y},_.majorExtent([[-180,-90+Mt],[180,90-Mt]]).minorExtent([[-180,-80-Mt],[180,80+Mt]])},t.geo.greatArc=function(){var e,n,r=Wr,i=qr;function a(){return{type:\"LineString\",coordinates:[e||r.apply(this,arguments),n||i.apply(this,arguments)]}}return a.distance=function(){return t.geo.distance(e||r.apply(this,arguments),n||i.apply(this,arguments))},a.source=function(t){return arguments.length?(r=t,e=\"function\"==typeof t?null:t,a):r},a.target=function(t){return arguments.length?(i=t,n=\"function\"==typeof t?null:t,a):i},a.precision=function(){return arguments.length?a:0},a},t.geo.interpolate=function(t,e){return n=t[0]*Et,r=t[1]*Et,i=e[0]*Et,a=e[1]*Et,o=Math.cos(r),s=Math.sin(r),l=Math.cos(a),c=Math.sin(a),u=o*Math.cos(n),h=o*Math.sin(n),d=l*Math.cos(i),f=l*Math.sin(i),p=2*Math.asin(Math.sqrt(jt(a-r)+o*l*jt(i-n))),m=1/Math.sin(p),(g=p?function(t){var e=Math.sin(t*=p)*m,n=Math.sin(p-t)*m,r=n*u+e*d,i=n*h+e*f,a=n*s+e*c;return[Math.atan2(i,r)*Ot,Math.atan2(a,Math.sqrt(r*r+i*i))*Ot]}:function(){return[n*Ot,r*Ot]}).distance=p,g;var n,r,i,a,o,s,l,c,u,h,d,f,p,m,g},t.geo.length=function(e){return xr=0,t.geo.stream(e,Gr),xr};var Gr={sphere:P,point:P,lineStart:function(){var t,e,n;function r(r,i){var a=Math.sin(i*=Et),o=Math.cos(i),s=v((r*=Et)-t),l=Math.cos(s);xr+=Math.atan2(Math.sqrt((s=o*Math.sin(s))*s+(s=n*a-e*o*l)*s),e*a+n*o*l),t=r,e=a,n=o}Gr.point=function(i,a){t=i*Et,e=Math.sin(a*=Et),n=Math.cos(a),Gr.point=r},Gr.lineEnd=function(){Gr.point=Gr.lineEnd=P}},lineEnd:P,polygonStart:P,polygonEnd:P};function Xr(t,e){function n(e,n){var r=Math.cos(e),i=Math.cos(n),a=t(r*i);return[a*i*Math.sin(e),a*Math.sin(n)]}return n.invert=function(t,n){var r=Math.sqrt(t*t+n*n),i=e(r),a=Math.sin(i),o=Math.cos(i);return[Math.atan2(t*a,r*o),Math.asin(r&&n*a/r)]},n}var Zr=Xr((function(t){return Math.sqrt(2/(1+t))}),(function(t){return 2*Math.asin(t/2)}));(t.geo.azimuthalEqualArea=function(){return Dr(Zr)}).raw=Zr;var Jr=Xr((function(t){var e=Math.acos(t);return e&&e/Math.sin(e)}),E);function Kr(t,e){var n=Math.cos(t),r=function(t){return Math.tan(St/4+t/2)},i=t===e?Math.sin(t):Math.log(n/Math.cos(e))/Math.log(r(e)/r(t)),a=n*Math.pow(r(t),i)/i;if(!i)return ti;function o(t,e){a>0?e<-Ct+Mt&&(e=-Ct+Mt):e>Ct-Mt&&(e=Ct-Mt);var n=a/Math.pow(r(e),i);return[n*Math.sin(i*t),a-n*Math.cos(i*t)]}return o.invert=function(t,e){var n=a-e,r=Dt(i)*Math.sqrt(t*t+n*n);return[Math.atan2(t,n)/i,2*Math.atan(Math.pow(a/r,1/i))-Ct]},o}function $r(t,e){var n=Math.cos(t),r=t===e?Math.sin(t):(n-Math.cos(e))/(e-t),i=n/r+t;if(v(r)<Mt)return Rr;function a(t,e){var n=i-e;return[n*Math.sin(r*t),i-n*Math.cos(r*t)]}return a.invert=function(t,e){var n=i-e;return[Math.atan2(t,n)/r,i-Dt(r)*Math.sqrt(t*t+n*n)]},a}(t.geo.azimuthalEquidistant=function(){return Dr(Jr)}).raw=Jr,(t.geo.conicConformal=function(){return lr(Kr)}).raw=Kr,(t.geo.conicEquidistant=function(){return lr($r)}).raw=$r;var Qr=Xr((function(t){return 1/t}),Math.atan);function ti(t,e){return[t,Math.log(Math.tan(St/4+e/2))]}function ei(t){var e,n=Dr(t),r=n.scale,i=n.translate,a=n.clipExtent;return n.scale=function(){var t=r.apply(n,arguments);return t===n?e?n.clipExtent(null):n:t},n.translate=function(){var t=i.apply(n,arguments);return t===n?e?n.clipExtent(null):n:t},n.clipExtent=function(t){var o=a.apply(n,arguments);if(o===n){if(e=null==t){var s=St*r(),l=i();a([[l[0]-s,l[1]-s],[l[0]+s,l[1]+s]])}}else e&&(o=null);return o},n.clipExtent(null)}(t.geo.gnomonic=function(){return Dr(Qr)}).raw=Qr,ti.invert=function(t,e){return[t,2*Math.atan(Math.exp(e))-Ct]},(t.geo.mercator=function(){return ei(ti)}).raw=ti;var ni=Xr((function(){return 1}),Math.asin);(t.geo.orthographic=function(){return Dr(ni)}).raw=ni;var ri=Xr((function(t){return 1/(1+t)}),(function(t){return 2*Math.atan(t)}));function ii(t,e){return[Math.log(Math.tan(St/4+e/2)),-t]}function ai(t){return t[0]}function oi(t){return t[1]}function si(t){for(var e=t.length,n=[0,1],r=2,i=2;i<e;i++){for(;r>1&&It(t[n[r-2]],t[n[r-1]],t[i])<=0;)--r;n[r++]=i}return n.slice(0,r)}function li(t,e){return t[0]-e[0]||t[1]-e[1]}(t.geo.stereographic=function(){return Dr(ri)}).raw=ri,ii.invert=function(t,e){return[-e,2*Math.atan(Math.exp(t))-Ct]},(t.geo.transverseMercator=function(){var t=ei(ii),e=t.center,n=t.rotate;return t.center=function(t){return t?e([-t[1],t[0]]):[(t=e())[1],-t[0]]},t.rotate=function(t){return t?n([t[0],t[1],t.length>2?t[2]+90:90]):[(t=n())[0],t[1],t[2]-90]},n([0,0,90])}).raw=ii,t.geom={},t.geom.hull=function(t){var e=ai,n=oi;if(arguments.length)return r(t);function r(t){if(t.length<3)return[];var r,i=ge(e),a=ge(n),o=t.length,s=[],l=[];for(r=0;r<o;r++)s.push([+i.call(this,t[r],r),+a.call(this,t[r],r),r]);for(s.sort(li),r=0;r<o;r++)l.push([s[r][0],-s[r][1]]);var c=si(s),u=si(l),h=u[0]===c[0],d=u[u.length-1]===c[c.length-1],f=[];for(r=c.length-1;r>=0;--r)f.push(t[s[c[r]][2]]);for(r=+h;r<u.length-d;++r)f.push(t[s[u[r]][2]]);return f}return r.x=function(t){return arguments.length?(e=t,r):e},r.y=function(t){return arguments.length?(n=t,r):n},r},t.geom.polygon=function(t){return Y(t,ci),t};var ci=t.geom.polygon.prototype=[];function ui(t,e,n){return(n[0]-e[0])*(t[1]-e[1])<(n[1]-e[1])*(t[0]-e[0])}function hi(t,e,n,r){var i=t[0],a=n[0],o=e[0]-i,s=r[0]-a,l=t[1],c=n[1],u=e[1]-l,h=r[1]-c,d=(s*(l-c)-h*(i-a))/(h*o-s*u);return[i+d*o,l+d*u]}function di(t){var e=t[0],n=t[t.length-1];return!(e[0]-n[0]||e[1]-n[1])}ci.area=function(){for(var t,e=-1,n=this.length,r=this[n-1],i=0;++e<n;)i+=(t=r)[1]*(r=this[e])[0]-t[0]*r[1];return.5*i},ci.centroid=function(t){var e,n,r=-1,i=this.length,a=0,o=0,s=this[i-1];for(arguments.length||(t=-1/(6*this.area()));++r<i;)a+=((e=s)[0]+(s=this[r])[0])*(n=e[0]*s[1]-s[0]*e[1]),o+=(e[1]+s[1])*n;return[a*t,o*t]},ci.clip=function(t){for(var e,n,r,i,a,o,s=di(t),l=-1,c=this.length-di(this),u=this[c-1];++l<c;){for(e=t.slice(),t.length=0,i=this[l],a=e[(r=e.length-s)-1],n=-1;++n<r;)ui(o=e[n],u,i)?(ui(a,u,i)||t.push(hi(a,o,u,i)),t.push(o)):ui(a,u,i)&&t.push(hi(a,o,u,i)),a=o;s&&t.push(t[0]),u=i}return t};var fi,pi,mi,gi,yi,vi=[],_i=[];function bi(){Fi(this),this.edge=this.site=this.circle=null}function xi(t){var e=vi.pop()||new bi;return e.site=t,e}function wi(t){Oi(t),mi.remove(t),vi.push(t),Fi(t)}function ki(t){var e=t.circle,n=e.x,r=e.cy,i={x:n,y:r},a=t.P,o=t.N,s=[t];wi(t);for(var l=a;l.circle&&v(n-l.circle.x)<Mt&&v(r-l.circle.cy)<Mt;)a=l.P,s.unshift(l),wi(l),l=a;s.unshift(l),Oi(l);for(var c=o;c.circle&&v(n-c.circle.x)<Mt&&v(r-c.circle.cy)<Mt;)o=c.N,s.push(c),wi(c),c=o;s.push(c),Oi(c);var u,h=s.length;for(u=1;u<h;++u)Ri((c=s[u]).edge,(l=s[u-1]).site,c.site,i);(c=s[h-1]).edge=Pi((l=s[0]).site,c.site,null,i),Ei(l),Ei(c)}function Mi(t){for(var e,n,r,i,a=t.x,o=t.y,s=mi._;s;)if((r=Ti(s,o)-a)>Mt)s=s.L;else{if(!((i=a-Si(s,o))>Mt)){r>-Mt?(e=s.P,n=s):i>-Mt?(e=s,n=s.N):e=n=s;break}if(!s.R){e=s;break}s=s.R}var l=xi(t);if(mi.insert(e,l),e||n){if(e===n)return Oi(e),n=xi(e.site),mi.insert(l,n),l.edge=n.edge=Pi(e.site,l.site),Ei(e),void Ei(n);if(n){Oi(e),Oi(n);var c=e.site,u=c.x,h=c.y,d=t.x-u,f=t.y-h,p=n.site,m=p.x-u,g=p.y-h,y=2*(d*g-f*m),v=d*d+f*f,_=m*m+g*g,b={x:(g*v-f*_)/y+u,y:(d*_-m*v)/y+h};Ri(n.edge,c,p,b),l.edge=Pi(c,t,null,b),n.edge=Pi(t,p,null,b),Ei(e),Ei(n)}else l.edge=Pi(e.site,l.site)}}function Ti(t,e){var n=t.site,r=n.x,i=n.y,a=i-e;if(!a)return r;var o=t.P;if(!o)return-1/0;var s=(n=o.site).x,l=n.y,c=l-e;if(!c)return s;var u=s-r,h=1/a-1/c,d=u/c;return h?(-d+Math.sqrt(d*d-2*h*(u*u/(-2*c)-l+c/2+i-a/2)))/h+r:(r+s)/2}function Si(t,e){var n=t.N;if(n)return Ti(n,e);var r=t.site;return r.y===e?r.x:1/0}function Ai(t){this.site=t,this.edges=[]}function Li(t,e){return e.angle-t.angle}function Ci(){Fi(this),this.x=this.y=this.arc=this.site=this.cy=null}function Ei(t){var e=t.P,n=t.N;if(e&&n){var r=e.site,i=t.site,a=n.site;if(r!==a){var o=i.x,s=i.y,l=r.x-o,c=r.y-s,u=a.x-o,h=2*(l*(g=a.y-s)-c*u);if(!(h>=-Tt)){var d=l*l+c*c,f=u*u+g*g,p=(g*d-c*f)/h,m=(l*f-u*d)/h,g=m+s,y=_i.pop()||new Ci;y.arc=t,y.site=i,y.x=p+o,y.y=g+Math.sqrt(p*p+m*m),y.cy=g,t.circle=y;for(var v=null,_=yi._;_;)if(y.y<_.y||y.y===_.y&&y.x<=_.x){if(!_.L){v=_.P;break}_=_.L}else{if(!_.R){v=_;break}_=_.R}yi.insert(v,y),v||(gi=y)}}}}function Oi(t){var e=t.circle;e&&(e.P||(gi=e.N),yi.remove(e),_i.push(e),Fi(e),t.circle=null)}function Di(t,e){var n=t.b;if(n)return!0;var r,i,a=t.a,o=e[0][0],s=e[1][0],l=e[0][1],c=e[1][1],u=t.l,h=t.r,d=u.x,f=u.y,p=h.x,m=h.y,g=(d+p)/2;if(m===f){if(g<o||g>=s)return;if(d>p){if(a){if(a.y>=c)return}else a={x:g,y:l};n={x:g,y:c}}else{if(a){if(a.y<l)return}else a={x:g,y:c};n={x:g,y:l}}}else if(i=(f+m)/2-(r=(d-p)/(m-f))*g,r<-1||r>1)if(d>p){if(a){if(a.y>=c)return}else a={x:(l-i)/r,y:l};n={x:(c-i)/r,y:c}}else{if(a){if(a.y<l)return}else a={x:(c-i)/r,y:c};n={x:(l-i)/r,y:l}}else if(f<m){if(a){if(a.x>=s)return}else a={x:o,y:r*o+i};n={x:s,y:r*s+i}}else{if(a){if(a.x<o)return}else a={x:s,y:r*s+i};n={x:o,y:r*o+i}}return t.a=a,t.b=n,!0}function Ii(t,e){this.l=t,this.r=e,this.a=this.b=null}function Pi(t,e,n,r){var i=new Ii(t,e);return fi.push(i),n&&Ri(i,t,e,n),r&&Ri(i,e,t,r),pi[t.i].edges.push(new zi(i,t,e)),pi[e.i].edges.push(new zi(i,e,t)),i}function Ri(t,e,n,r){t.a||t.b?t.l===n?t.b=r:t.a=r:(t.a=r,t.l=e,t.r=n)}function zi(t,e,n){var r=t.a,i=t.b;this.edge=t,this.site=e,this.angle=n?Math.atan2(n.y-e.y,n.x-e.x):t.l===e?Math.atan2(i.x-r.x,r.y-i.y):Math.atan2(r.x-i.x,i.y-r.y)}function ji(){this._=null}function Fi(t){t.U=t.C=t.L=t.R=t.P=t.N=null}function Ni(t,e){var n=e,r=e.R,i=n.U;i?i.L===n?i.L=r:i.R=r:t._=r,r.U=i,n.U=r,n.R=r.L,n.R&&(n.R.U=n),r.L=n}function Bi(t,e){var n=e,r=e.L,i=n.U;i?i.L===n?i.L=r:i.R=r:t._=r,r.U=i,n.U=r,n.L=r.R,n.L&&(n.L.U=n),r.R=n}function Yi(t){for(;t.L;)t=t.L;return t}function Hi(t,e){var n,r,i,a=t.sort(Vi).pop();for(fi=[],pi=new Array(t.length),mi=new ji,yi=new ji;;)if(i=gi,a&&(!i||a.y<i.y||a.y===i.y&&a.x<i.x))a.x===n&&a.y===r||(pi[a.i]=new Ai(a),Mi(a),n=a.x,r=a.y),a=t.pop();else{if(!i)break;ki(i.arc)}e&&(function(t){for(var e,n=fi,r=ar(t[0][0],t[0][1],t[1][0],t[1][1]),i=n.length;i--;)(!Di(e=n[i],t)||!r(e)||v(e.a.x-e.b.x)<Mt&&v(e.a.y-e.b.y)<Mt)&&(e.a=e.b=null,n.splice(i,1))}(e),function(t){for(var e,n,r,i,a,o,s,l,c,u,h=t[0][0],d=t[1][0],f=t[0][1],p=t[1][1],m=pi,g=m.length;g--;)if((a=m[g])&&a.prepare())for(l=(s=a.edges).length,o=0;o<l;)r=(u=s[o].end()).x,i=u.y,n=(c=s[++o%l].start()).y,(v(r-(e=c.x))>Mt||v(i-n)>Mt)&&(s.splice(o,0,new zi((y=a.site,_=u,b=v(r-h)<Mt&&p-i>Mt?{x:h,y:v(e-h)<Mt?n:p}:v(i-p)<Mt&&d-r>Mt?{x:v(n-p)<Mt?e:d,y:p}:v(r-d)<Mt&&i-f>Mt?{x:d,y:v(e-d)<Mt?n:f}:v(i-f)<Mt&&r-h>Mt?{x:v(n-f)<Mt?e:h,y:f}:null,x=void 0,(x=new Ii(y,null)).a=_,x.b=b,fi.push(x),x),a.site,null)),++l);var y,_,b,x}(e));var o={cells:pi,edges:fi};return mi=yi=fi=pi=null,o}function Vi(t,e){return e.y-t.y||e.x-t.x}Ai.prototype.prepare=function(){for(var t,e=this.edges,n=e.length;n--;)(t=e[n].edge).b&&t.a||e.splice(n,1);return e.sort(Li),e.length},zi.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},ji.prototype={insert:function(t,e){var n,r,i;if(t){if(e.P=t,e.N=t.N,t.N&&(t.N.P=e),t.N=e,t.R){for(t=t.R;t.L;)t=t.L;t.L=e}else t.R=e;n=t}else this._?(t=Yi(this._),e.P=null,e.N=t,t.P=t.L=e,n=t):(e.P=e.N=null,this._=e,n=null);for(e.L=e.R=null,e.U=n,e.C=!0,t=e;n&&n.C;)n===(r=n.U).L?(i=r.R)&&i.C?(n.C=i.C=!1,r.C=!0,t=r):(t===n.R&&(Ni(this,n),n=(t=n).U),n.C=!1,r.C=!0,Bi(this,r)):(i=r.L)&&i.C?(n.C=i.C=!1,r.C=!0,t=r):(t===n.L&&(Bi(this,n),n=(t=n).U),n.C=!1,r.C=!0,Ni(this,r)),n=t.U;this._.C=!1},remove:function(t){t.N&&(t.N.P=t.P),t.P&&(t.P.N=t.N),t.N=t.P=null;var e,n,r,i=t.U,a=t.L,o=t.R;if(n=a?o?Yi(o):a:o,i?i.L===t?i.L=n:i.R=n:this._=n,a&&o?(r=n.C,n.C=t.C,n.L=a,a.U=n,n!==o?(i=n.U,n.U=t.U,i.L=t=n.R,n.R=o,o.U=n):(n.U=i,i=n,t=n.R)):(r=t.C,t=n),t&&(t.U=i),!r)if(t&&t.C)t.C=!1;else{do{if(t===this._)break;if(t===i.L){if((e=i.R).C&&(e.C=!1,i.C=!0,Ni(this,i),e=i.R),e.L&&e.L.C||e.R&&e.R.C){e.R&&e.R.C||(e.L.C=!1,e.C=!0,Bi(this,e),e=i.R),e.C=i.C,i.C=e.R.C=!1,Ni(this,i),t=this._;break}}else if((e=i.L).C&&(e.C=!1,i.C=!0,Bi(this,i),e=i.L),e.L&&e.L.C||e.R&&e.R.C){e.L&&e.L.C||(e.R.C=!1,e.C=!0,Ni(this,e),e=i.L),e.C=i.C,i.C=e.L.C=!1,Bi(this,i),t=this._;break}e.C=!0,t=i,i=i.U}while(!t.C);t&&(t.C=!1)}}},t.geom.voronoi=function(t){var e=ai,n=oi,r=e,i=n,a=Ui;if(t)return o(t);function o(t){var e=new Array(t.length),n=a[0][0],r=a[0][1],i=a[1][0],o=a[1][1];return Hi(s(t),a).cells.forEach((function(a,s){var l=a.edges,c=a.site;(e[s]=l.length?l.map((function(t){var e=t.start();return[e.x,e.y]})):c.x>=n&&c.x<=i&&c.y>=r&&c.y<=o?[[n,o],[i,o],[i,r],[n,r]]:[]).point=t[s]})),e}function s(t){return t.map((function(t,e){return{x:Math.round(r(t,e)/Mt)*Mt,y:Math.round(i(t,e)/Mt)*Mt,i:e}}))}return o.links=function(t){return Hi(s(t)).edges.filter((function(t){return t.l&&t.r})).map((function(e){return{source:t[e.l.i],target:t[e.r.i]}}))},o.triangles=function(t){var e=[];return Hi(s(t)).cells.forEach((function(n,r){for(var i,a=n.site,o=n.edges.sort(Li),s=-1,l=o.length,c=o[l-1].edge,u=c.l===a?c.r:c.l;++s<l;)i=u,u=(c=o[s].edge).l===a?c.r:c.l,r<i.i&&r<u.i&&((h=a).x-(f=u).x)*((d=i).y-h.y)-(h.x-d.x)*(f.y-h.y)<0&&e.push([t[r],t[i.i],t[u.i]]);var h,d,f})),e},o.x=function(t){return arguments.length?(r=ge(e=t),o):e},o.y=function(t){return arguments.length?(i=ge(n=t),o):n},o.clipExtent=function(t){return arguments.length?(a=null==t?Ui:t,o):a===Ui?null:a},o.size=function(t){return arguments.length?o.clipExtent(t&&[[0,0],t]):a===Ui?null:a&&a[1]},o};var Ui=[[-1e6,-1e6],[1e6,1e6]];function Wi(t){return t.x}function qi(t){return t.y}function Gi(t,e,n,r,i,a){if(!t(e,n,r,i,a)){var o=.5*(n+i),s=.5*(r+a),l=e.nodes;l[0]&&Gi(t,l[0],n,r,o,s),l[1]&&Gi(t,l[1],o,r,i,s),l[2]&&Gi(t,l[2],n,s,o,a),l[3]&&Gi(t,l[3],o,s,i,a)}}function Xi(t,e,n,r,i,a,o){var s,l=1/0;return function t(c,u,h,d,f){if(!(u>a||h>o||d<r||f<i)){if(p=c.point){var p,m=e-c.x,g=n-c.y,y=m*m+g*g;if(y<l){var v=Math.sqrt(l=y);r=e-v,i=n-v,a=e+v,o=n+v,s=p}}for(var _=c.nodes,b=.5*(u+d),x=.5*(h+f),w=(n>=x)<<1|e>=b,k=w+4;w<k;++w)if(c=_[3&w])switch(3&w){case 0:t(c,u,h,b,x);break;case 1:t(c,b,h,d,x);break;case 2:t(c,u,x,b,f);break;case 3:t(c,b,x,d,f)}}}(t,r,i,a,o),s}function Zi(e,n){e=t.rgb(e),n=t.rgb(n);var r=e.r,i=e.g,a=e.b,o=n.r-r,s=n.g-i,l=n.b-a;return function(t){return\"#\"+ce(Math.round(r+o*t))+ce(Math.round(i+s*t))+ce(Math.round(a+l*t))}}function Ji(t,e){var n,r={},i={};for(n in t)n in e?r[n]=ea(t[n],e[n]):i[n]=t[n];for(n in e)n in t||(i[n]=e[n]);return function(t){for(n in r)i[n]=r[n](t);return i}}function Ki(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}function $i(t,e){var n,r,i,a=Qi.lastIndex=ta.lastIndex=0,o=-1,s=[],l=[];for(t+=\"\",e+=\"\";(n=Qi.exec(t))&&(r=ta.exec(e));)(i=r.index)>a&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(n=n[0])===(r=r[0])?s[o]?s[o]+=r:s[++o]=r:(s[++o]=null,l.push({i:o,x:Ki(n,r)})),a=ta.lastIndex;return a<e.length&&(i=e.slice(a),s[o]?s[o]+=i:s[++o]=i),s.length<2?l[0]?(e=l[0].x,function(t){return e(t)+\"\"}):function(){return e}:(e=l.length,function(t){for(var n,r=0;r<e;++r)s[(n=l[r]).i]=n.x(t);return s.join(\"\")})}t.geom.delaunay=function(e){return t.geom.voronoi().triangles(e)},t.geom.quadtree=function(t,e,n,r,i){var a,o=ai,s=oi;if(a=arguments.length)return o=Wi,s=qi,3===a&&(i=n,r=e,n=e=0),l(t);function l(t){var l,c,u,h,d,f,p,m,g,y=ge(o),_=ge(s);if(null!=e)f=e,p=n,m=r,g=i;else if(m=g=-(f=p=1/0),c=[],u=[],d=t.length,a)for(h=0;h<d;++h)(l=t[h]).x<f&&(f=l.x),l.y<p&&(p=l.y),l.x>m&&(m=l.x),l.y>g&&(g=l.y),c.push(l.x),u.push(l.y);else for(h=0;h<d;++h){var b=+y(l=t[h],h),x=+_(l,h);b<f&&(f=b),x<p&&(p=x),b>m&&(m=b),x>g&&(g=x),c.push(b),u.push(x)}var w=m-f,k=g-p;function M(t,e,n,r,i,a,o,s){if(!isNaN(n)&&!isNaN(r))if(t.leaf){var l=t.x,c=t.y;if(null!=l)if(v(l-n)+v(c-r)<.01)T(t,e,n,r,i,a,o,s);else{var u=t.point;t.x=t.y=t.point=null,T(t,u,l,c,i,a,o,s),T(t,e,n,r,i,a,o,s)}else t.x=n,t.y=r,t.point=e}else T(t,e,n,r,i,a,o,s)}function T(t,e,n,r,i,a,o,s){var l=.5*(i+o),c=.5*(a+s),u=n>=l,h=r>=c,d=h<<1|u;t.leaf=!1,u?i=l:o=l,h?a=c:s=c,M(t=t.nodes[d]||(t.nodes[d]={leaf:!0,nodes:[],point:null,x:null,y:null}),e,n,r,i,a,o,s)}w>k?g=p+w:m=f+k;var S={leaf:!0,nodes:[],point:null,x:null,y:null,add:function(t){M(S,t,+y(t,++h),+_(t,h),f,p,m,g)},visit:function(t){Gi(t,S,f,p,m,g)},find:function(t){return Xi(S,t[0],t[1],f,p,m,g)}};if(h=-1,null==e){for(;++h<d;)M(S,t[h],c[h],u[h],f,p,m,g);--h}else t.forEach(S.add);return c=u=t=l=null,S}return l.x=function(t){return arguments.length?(o=t,l):o},l.y=function(t){return arguments.length?(s=t,l):s},l.extent=function(t){return arguments.length?(null==t?e=n=r=i=null:(e=+t[0][0],n=+t[0][1],r=+t[1][0],i=+t[1][1]),l):null==e?null:[[e,n],[r,i]]},l.size=function(t){return arguments.length?(null==t?e=n=r=i=null:(e=n=0,r=+t[0],i=+t[1]),l):null==e?null:[r-e,i-n]},l},t.interpolateRgb=Zi,t.interpolateObject=Ji,t.interpolateNumber=Ki,t.interpolateString=$i;var Qi=/[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,ta=new RegExp(Qi.source,\"g\");function ea(e,n){for(var r,i=t.interpolators.length;--i>=0&&!(r=t.interpolators[i](e,n)););return r}function na(t,e){var n,r=[],i=[],a=t.length,o=e.length,s=Math.min(t.length,e.length);for(n=0;n<s;++n)r.push(ea(t[n],e[n]));for(;n<a;++n)i[n]=t[n];for(;n<o;++n)i[n]=e[n];return function(t){for(n=0;n<s;++n)i[n]=r[n](t);return i}}t.interpolate=ea,t.interpolators=[function(t,e){var n=typeof e;return(\"string\"===n?me.has(e.toLowerCase())||/^(#|rgb\\(|hsl\\()/i.test(e)?Zi:$i:e instanceof Ht?Zi:Array.isArray(e)?na:\"object\"===n&&isNaN(e)?Ji:Ki)(t,e)}],t.interpolateArray=na;var ra=function(){return E},ia=t.map({linear:ra,poly:function(t){return function(e){return Math.pow(e,t)}},quad:function(){return ca},cubic:function(){return ua},sin:function(){return da},exp:function(){return fa},circle:function(){return pa},elastic:function(t,e){var n;return arguments.length<2&&(e=.45),arguments.length?n=e/At*Math.asin(1/t):(t=1,n=e/4),function(r){return 1+t*Math.pow(2,-10*r)*Math.sin((r-n)*At/e)}},back:function(t){return t||(t=1.70158),function(e){return e*e*((t+1)*e-t)}},bounce:function(){return ma}}),aa=t.map({in:E,out:sa,\"in-out\":la,\"out-in\":function(t){return la(sa(t))}});function oa(t){return function(e){return e<=0?0:e>=1?1:t(e)}}function sa(t){return function(e){return 1-t(1-e)}}function la(t){return function(e){return.5*(e<.5?t(2*e):2-t(2-2*e))}}function ca(t){return t*t}function ua(t){return t*t*t}function ha(t){if(t<=0)return 0;if(t>=1)return 1;var e=t*t,n=e*t;return 4*(t<.5?n:3*(t-e)+n-.75)}function da(t){return 1-Math.cos(t*Ct)}function fa(t){return Math.pow(2,10*(t-1))}function pa(t){return 1-Math.sqrt(1-t*t)}function ma(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}function ga(t,e){return e-=t,function(n){return Math.round(t+e*n)}}function ya(t){var e,n,r,i=[t.a,t.b],a=[t.c,t.d],o=_a(i),s=va(i,a),l=_a(((e=a)[0]+=(r=-s)*(n=i)[0],e[1]+=r*n[1],e))||0;i[0]*a[1]<a[0]*i[1]&&(i[0]*=-1,i[1]*=-1,o*=-1,s*=-1),this.rotate=(o?Math.atan2(i[1],i[0]):Math.atan2(-a[0],a[1]))*Ot,this.translate=[t.e,t.f],this.scale=[o,l],this.skew=l?Math.atan2(s,l)*Ot:0}function va(t,e){return t[0]*e[0]+t[1]*e[1]}function _a(t){var e=Math.sqrt(va(t,t));return e&&(t[0]/=e,t[1]/=e),e}t.ease=function(t){var e=t.indexOf(\"-\"),r=e>=0?t.slice(0,e):t,i=e>=0?t.slice(e+1):\"in\";return r=ia.get(r)||ra,oa((i=aa.get(i)||E)(r.apply(null,n.call(arguments,1))))},t.interpolateHcl=function(e,n){e=t.hcl(e),n=t.hcl(n);var r=e.h,i=e.c,a=e.l,o=n.h-r,s=n.c-i,l=n.l-a;return isNaN(s)&&(s=0,i=isNaN(i)?n.c:i),isNaN(o)?(o=0,r=isNaN(r)?n.h:r):o>180?o-=360:o<-180&&(o+=360),function(t){return Xt(r+o*t,i+s*t,a+l*t)+\"\"}},t.interpolateHsl=function(e,n){e=t.hsl(e),n=t.hsl(n);var r=e.h,i=e.s,a=e.l,o=n.h-r,s=n.s-i,l=n.l-a;return isNaN(s)&&(s=0,i=isNaN(i)?n.s:i),isNaN(o)?(o=0,r=isNaN(r)?n.h:r):o>180?o-=360:o<-180&&(o+=360),function(t){return Wt(r+o*t,i+s*t,a+l*t)+\"\"}},t.interpolateLab=function(e,n){e=t.lab(e),n=t.lab(n);var r=e.l,i=e.a,a=e.b,o=n.l-r,s=n.a-i,l=n.b-a;return function(t){return te(r+o*t,i+s*t,a+l*t)+\"\"}},t.interpolateRound=ga,t.transform=function(e){var n=i.createElementNS(t.ns.prefix.svg,\"g\");return(t.transform=function(t){if(null!=t){n.setAttribute(\"transform\",t);var e=n.transform.baseVal.consolidate()}return new ya(e?e.matrix:ba)})(e)},ya.prototype.toString=function(){return\"translate(\"+this.translate+\")rotate(\"+this.rotate+\")skewX(\"+this.skew+\")scale(\"+this.scale+\")\"};var ba={a:1,b:0,c:0,d:1,e:0,f:0};function xa(t){return t.length?t.pop()+\",\":\"\"}function wa(e,n){var r=[],i=[];return e=t.transform(e),n=t.transform(n),function(t,e,n,r){if(t[0]!==e[0]||t[1]!==e[1]){var i=n.push(\"translate(\",null,\",\",null,\")\");r.push({i:i-4,x:Ki(t[0],e[0])},{i:i-2,x:Ki(t[1],e[1])})}else(e[0]||e[1])&&n.push(\"translate(\"+e+\")\")}(e.translate,n.translate,r,i),function(t,e,n,r){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),r.push({i:n.push(xa(n)+\"rotate(\",null,\")\")-2,x:Ki(t,e)})):e&&n.push(xa(n)+\"rotate(\"+e+\")\")}(e.rotate,n.rotate,r,i),function(t,e,n,r){t!==e?r.push({i:n.push(xa(n)+\"skewX(\",null,\")\")-2,x:Ki(t,e)}):e&&n.push(xa(n)+\"skewX(\"+e+\")\")}(e.skew,n.skew,r,i),function(t,e,n,r){if(t[0]!==e[0]||t[1]!==e[1]){var i=n.push(xa(n)+\"scale(\",null,\",\",null,\")\");r.push({i:i-4,x:Ki(t[0],e[0])},{i:i-2,x:Ki(t[1],e[1])})}else 1===e[0]&&1===e[1]||n.push(xa(n)+\"scale(\"+e+\")\")}(e.scale,n.scale,r,i),e=n=null,function(t){for(var e,n=-1,a=i.length;++n<a;)r[(e=i[n]).i]=e.x(t);return r.join(\"\")}}function ka(t,e){return e=(e-=t=+t)||1/e,function(n){return(n-t)/e}}function Ma(t,e){return e=(e-=t=+t)||1/e,function(n){return Math.max(0,Math.min(1,(n-t)/e))}}function Ta(t){for(var e=t.source,n=t.target,r=function(t,e){if(t===e)return t;for(var n=Sa(t),r=Sa(e),i=n.pop(),a=r.pop(),o=null;i===a;)o=i,i=n.pop(),a=r.pop();return o}(e,n),i=[e];e!==r;)i.push(e=e.parent);for(var a=i.length;n!==r;)i.splice(a,0,n),n=n.parent;return i}function Sa(t){for(var e=[],n=t.parent;null!=n;)e.push(t),t=n,n=n.parent;return e.push(t),e}function Aa(t){t.fixed|=2}function La(t){t.fixed&=-7}function Ca(t){t.fixed|=4,t.px=t.x,t.py=t.y}function Ea(t){t.fixed&=-5}t.interpolateTransform=wa,t.layout={},t.layout.bundle=function(){return function(t){for(var e=[],n=-1,r=t.length;++n<r;)e.push(Ta(t[n]));return e}},t.layout.chord=function(){var e,n,r,i,a,o,s,l={},c=0;function u(){var l,u,d,f,p,m={},g=[],y=t.range(i),v=[];for(e=[],n=[],l=0,f=-1;++f<i;){for(u=0,p=-1;++p<i;)u+=r[f][p];g.push(u),v.push(t.range(i)),l+=u}for(a&&y.sort((function(t,e){return a(g[t],g[e])})),o&&v.forEach((function(t,e){t.sort((function(t,n){return o(r[e][t],r[e][n])}))})),l=(At-c*i)/l,u=0,f=-1;++f<i;){for(d=u,p=-1;++p<i;){var _=y[f],b=v[_][p],x=r[_][b],w=u,k=u+=x*l;m[_+\"-\"+b]={index:_,subindex:b,startAngle:w,endAngle:k,value:x}}n[_]={index:_,startAngle:d,endAngle:u,value:g[_]},u+=c}for(f=-1;++f<i;)for(p=f-1;++p<i;){var M=m[f+\"-\"+p],T=m[p+\"-\"+f];(M.value||T.value)&&e.push(M.value<T.value?{source:T,target:M}:{source:M,target:T})}s&&h()}function h(){e.sort((function(t,e){return s((t.source.value+t.target.value)/2,(e.source.value+e.target.value)/2)}))}return l.matrix=function(t){return arguments.length?(i=(r=t)&&r.length,e=n=null,l):r},l.padding=function(t){return arguments.length?(c=t,e=n=null,l):c},l.sortGroups=function(t){return arguments.length?(a=t,e=n=null,l):a},l.sortSubgroups=function(t){return arguments.length?(o=t,e=null,l):o},l.sortChords=function(t){return arguments.length?(s=t,e&&h(),l):s},l.chords=function(){return e||u(),e},l.groups=function(){return n||u(),n},l},t.layout.force=function(){var e,n,r,i,a,o,s={},l=t.dispatch(\"start\",\"tick\",\"end\"),c=[1,1],u=.9,h=Oa,d=Da,f=-30,p=Ia,m=.1,g=.64,y=[],v=[];function _(t){return function(e,n,r,i){if(e.point!==t){var a,o=e.cx-t.x,s=e.cy-t.y,l=i-n,c=o*o+s*s;if(l*l/g<c)return c<p&&(t.px-=o*(a=e.charge/c),t.py-=s*a),!0;e.point&&c&&c<p&&(t.px-=o*(a=e.pointCharge/c),t.py-=s*a)}return!e.charge}}function b(e){e.px=t.event.x,e.py=t.event.y,s.resume()}return s.tick=function(){if((r*=.99)<.005)return e=null,l.end({type:\"end\",alpha:r=0}),!0;var n,s,h,d,p,g,b,x,w,k=y.length,M=v.length;for(s=0;s<M;++s)(g=(x=(p=(h=v[s]).target).x-(d=h.source).x)*x+(w=p.y-d.y)*w)&&(w*=g=r*a[s]*((g=Math.sqrt(g))-i[s])/g,p.x-=(x*=g)*(b=d.weight+p.weight?d.weight/(d.weight+p.weight):.5),p.y-=w*b,d.x+=x*(b=1-b),d.y+=w*b);if((b=r*m)&&(x=c[0]/2,w=c[1]/2,s=-1,b))for(;++s<k;)(h=y[s]).x+=(x-h.x)*b,h.y+=(w-h.y)*b;if(f)for(function t(e,n,r){var i=0,a=0;if(e.charge=0,!e.leaf)for(var o,s=e.nodes,l=s.length,c=-1;++c<l;)null!=(o=s[c])&&(t(o,n,r),e.charge+=o.charge,i+=o.charge*o.cx,a+=o.charge*o.cy);if(e.point){e.leaf||(e.point.x+=Math.random()-.5,e.point.y+=Math.random()-.5);var u=n*r[e.point.index];e.charge+=e.pointCharge=u,i+=u*e.point.x,a+=u*e.point.y}e.cx=i/e.charge,e.cy=a/e.charge}(n=t.geom.quadtree(y),r,o),s=-1;++s<k;)(h=y[s]).fixed||n.visit(_(h));for(s=-1;++s<k;)(h=y[s]).fixed?(h.x=h.px,h.y=h.py):(h.x-=(h.px-(h.px=h.x))*u,h.y-=(h.py-(h.py=h.y))*u);l.tick({type:\"tick\",alpha:r})},s.nodes=function(t){return arguments.length?(y=t,s):y},s.links=function(t){return arguments.length?(v=t,s):v},s.size=function(t){return arguments.length?(c=t,s):c},s.linkDistance=function(t){return arguments.length?(h=\"function\"==typeof t?t:+t,s):h},s.distance=s.linkDistance,s.linkStrength=function(t){return arguments.length?(d=\"function\"==typeof t?t:+t,s):d},s.friction=function(t){return arguments.length?(u=+t,s):u},s.charge=function(t){return arguments.length?(f=\"function\"==typeof t?t:+t,s):f},s.chargeDistance=function(t){return arguments.length?(p=t*t,s):Math.sqrt(p)},s.gravity=function(t){return arguments.length?(m=+t,s):m},s.theta=function(t){return arguments.length?(g=t*t,s):Math.sqrt(g)},s.alpha=function(t){return arguments.length?(t=+t,r?t>0?r=t:(e.c=null,e.t=NaN,e=null,l.end({type:\"end\",alpha:r=0})):t>0&&(l.start({type:\"start\",alpha:r=t}),e=Me(s.tick)),s):r},s.start=function(){var t,e,n,r=y.length,l=v.length,u=c[0],p=c[1];for(t=0;t<r;++t)(n=y[t]).index=t,n.weight=0;for(t=0;t<l;++t)\"number\"==typeof(n=v[t]).source&&(n.source=y[n.source]),\"number\"==typeof n.target&&(n.target=y[n.target]),++n.source.weight,++n.target.weight;for(t=0;t<r;++t)n=y[t],isNaN(n.x)&&(n.x=m(\"x\",u)),isNaN(n.y)&&(n.y=m(\"y\",p)),isNaN(n.px)&&(n.px=n.x),isNaN(n.py)&&(n.py=n.y);if(i=[],\"function\"==typeof h)for(t=0;t<l;++t)i[t]=+h.call(this,v[t],t);else for(t=0;t<l;++t)i[t]=h;if(a=[],\"function\"==typeof d)for(t=0;t<l;++t)a[t]=+d.call(this,v[t],t);else for(t=0;t<l;++t)a[t]=d;if(o=[],\"function\"==typeof f)for(t=0;t<r;++t)o[t]=+f.call(this,y[t],t);else for(t=0;t<r;++t)o[t]=f;function m(n,i){if(!e){for(e=new Array(r),c=0;c<r;++c)e[c]=[];for(c=0;c<l;++c){var a=v[c];e[a.source.index].push(a.target),e[a.target.index].push(a.source)}}for(var o,s=e[t],c=-1,u=s.length;++c<u;)if(!isNaN(o=s[c][n]))return o;return Math.random()*i}return s.resume()},s.resume=function(){return s.alpha(.1)},s.stop=function(){return s.alpha(0)},s.drag=function(){if(n||(n=t.behavior.drag().origin(E).on(\"dragstart.force\",Aa).on(\"drag.force\",b).on(\"dragend.force\",La)),!arguments.length)return n;this.on(\"mouseover.force\",Ca).on(\"mouseout.force\",Ea).call(n)},t.rebind(s,l,\"on\")};var Oa=20,Da=1,Ia=1/0;function Pa(e,n){return t.rebind(e,n,\"sort\",\"children\",\"value\"),e.nodes=e,e.links=Ba,e}function Ra(t,e){for(var n=[t];null!=(t=n.pop());)if(e(t),(i=t.children)&&(r=i.length))for(var r,i;--r>=0;)n.push(i[r])}function za(t,e){for(var n=[t],r=[];null!=(t=n.pop());)if(r.push(t),(a=t.children)&&(i=a.length))for(var i,a,o=-1;++o<i;)n.push(a[o]);for(;null!=(t=r.pop());)e(t)}function ja(t){return t.children}function Fa(t){return t.value}function Na(t,e){return e.value-t.value}function Ba(e){return t.merge(e.map((function(t){return(t.children||[]).map((function(e){return{source:t,target:e}}))})))}t.layout.hierarchy=function(){var t=Na,e=ja,n=Fa;function r(i){var a,o=[i],s=[];for(i.depth=0;null!=(a=o.pop());)if(s.push(a),(c=e.call(r,a,a.depth))&&(l=c.length)){for(var l,c,u;--l>=0;)o.push(u=c[l]),u.parent=a,u.depth=a.depth+1;n&&(a.value=0),a.children=c}else n&&(a.value=+n.call(r,a,a.depth)||0),delete a.children;return za(i,(function(e){var r,i;t&&(r=e.children)&&r.sort(t),n&&(i=e.parent)&&(i.value+=e.value)})),s}return r.sort=function(e){return arguments.length?(t=e,r):t},r.children=function(t){return arguments.length?(e=t,r):e},r.value=function(t){return arguments.length?(n=t,r):n},r.revalue=function(t){return n&&(Ra(t,(function(t){t.children&&(t.value=0)})),za(t,(function(t){var e;t.children||(t.value=+n.call(r,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)}))),t},r},t.layout.partition=function(){var e=t.layout.hierarchy(),n=[1,1];function r(t,r){var i=e.call(this,t,r);return function t(e,n,r,i){var a=e.children;if(e.x=n,e.y=e.depth*i,e.dx=r,e.dy=i,a&&(o=a.length)){var o,s,l,c=-1;for(r=e.value?r/e.value:0;++c<o;)t(s=a[c],n,l=s.value*r,i),n+=l}}(i[0],0,n[0],n[1]/function t(e){var n=e.children,r=0;if(n&&(i=n.length))for(var i,a=-1;++a<i;)r=Math.max(r,t(n[a]));return 1+r}(i[0])),i}return r.size=function(t){return arguments.length?(n=t,r):n},Pa(r,e)},t.layout.pie=function(){var e=Number,n=Ya,r=0,i=At,a=0;function o(s){var l,c=s.length,u=s.map((function(t,n){return+e.call(o,t,n)})),h=+(\"function\"==typeof r?r.apply(this,arguments):r),d=(\"function\"==typeof i?i.apply(this,arguments):i)-h,f=Math.min(Math.abs(d)/c,+(\"function\"==typeof a?a.apply(this,arguments):a)),p=f*(d<0?-1:1),m=t.sum(u),g=m?(d-c*p)/m:0,y=t.range(c),v=[];return null!=n&&y.sort(n===Ya?function(t,e){return u[e]-u[t]}:function(t,e){return n(s[t],s[e])}),y.forEach((function(t){v[t]={data:s[t],value:l=u[t],startAngle:h,endAngle:h+=l*g+p,padAngle:f}})),v}return o.value=function(t){return arguments.length?(e=t,o):e},o.sort=function(t){return arguments.length?(n=t,o):n},o.startAngle=function(t){return arguments.length?(r=t,o):r},o.endAngle=function(t){return arguments.length?(i=t,o):i},o.padAngle=function(t){return arguments.length?(a=t,o):a},o};var Ya={};function Ha(t){return t.x}function Va(t){return t.y}function Ua(t,e,n){t.y0=e,t.y=n}t.layout.stack=function(){var e=E,n=Ga,r=Xa,i=Ua,a=Ha,o=Va;function s(l,c){if(!(f=l.length))return l;var u=l.map((function(t,n){return e.call(s,t,n)})),h=u.map((function(t){return t.map((function(t,e){return[a.call(s,t,e),o.call(s,t,e)]}))})),d=n.call(s,h,c);u=t.permute(u,d),h=t.permute(h,d);var f,p,m,g,y=r.call(s,h,c),v=u[0].length;for(m=0;m<v;++m)for(i.call(s,u[0][m],g=y[m],h[0][m][1]),p=1;p<f;++p)i.call(s,u[p][m],g+=h[p-1][m][1],h[p][m][1]);return l}return s.values=function(t){return arguments.length?(e=t,s):e},s.order=function(t){return arguments.length?(n=\"function\"==typeof t?t:Wa.get(t)||Ga,s):n},s.offset=function(t){return arguments.length?(r=\"function\"==typeof t?t:qa.get(t)||Xa,s):r},s.x=function(t){return arguments.length?(a=t,s):a},s.y=function(t){return arguments.length?(o=t,s):o},s.out=function(t){return arguments.length?(i=t,s):i},s};var Wa=t.map({\"inside-out\":function(e){var n,r,i=e.length,a=e.map(Za),o=e.map(Ja),s=t.range(i).sort((function(t,e){return a[t]-a[e]})),l=0,c=0,u=[],h=[];for(n=0;n<i;++n)r=s[n],l<c?(l+=o[r],u.push(r)):(c+=o[r],h.push(r));return h.reverse().concat(u)},reverse:function(e){return t.range(e.length).reverse()},default:Ga}),qa=t.map({silhouette:function(t){var e,n,r,i=t.length,a=t[0].length,o=[],s=0,l=[];for(n=0;n<a;++n){for(e=0,r=0;e<i;e++)r+=t[e][n][1];r>s&&(s=r),o.push(r)}for(n=0;n<a;++n)l[n]=(s-o[n])/2;return l},wiggle:function(t){var e,n,r,i,a,o,s,l,c,u=t.length,h=t[0],d=h.length,f=[];for(f[0]=l=c=0,n=1;n<d;++n){for(e=0,i=0;e<u;++e)i+=t[e][n][1];for(e=0,a=0,s=h[n][0]-h[n-1][0];e<u;++e){for(r=0,o=(t[e][n][1]-t[e][n-1][1])/(2*s);r<e;++r)o+=(t[r][n][1]-t[r][n-1][1])/s;a+=o*t[e][n][1]}f[n]=l-=i?a/i*s:0,l<c&&(c=l)}for(n=0;n<d;++n)f[n]-=c;return f},expand:function(t){var e,n,r,i=t.length,a=t[0].length,o=1/i,s=[];for(n=0;n<a;++n){for(e=0,r=0;e<i;e++)r+=t[e][n][1];if(r)for(e=0;e<i;e++)t[e][n][1]/=r;else for(e=0;e<i;e++)t[e][n][1]=o}for(n=0;n<a;++n)s[n]=0;return s},zero:Xa});function Ga(e){return t.range(e.length)}function Xa(t){for(var e=-1,n=t[0].length,r=[];++e<n;)r[e]=0;return r}function Za(t){for(var e,n=1,r=0,i=t[0][1],a=t.length;n<a;++n)(e=t[n][1])>i&&(r=n,i=e);return r}function Ja(t){return t.reduce(Ka,0)}function Ka(t,e){return t+e[1]}function $a(t,e){return Qa(t,Math.ceil(Math.log(e.length)/Math.LN2+1))}function Qa(t,e){for(var n=-1,r=+t[0],i=(t[1]-r)/e,a=[];++n<=e;)a[n]=i*n+r;return a}function to(e){return[t.min(e),t.max(e)]}function eo(t,e){return t.value-e.value}function no(t,e){var n=t._pack_next;t._pack_next=e,e._pack_prev=t,e._pack_next=n,n._pack_prev=e}function ro(t,e){t._pack_next=e,e._pack_prev=t}function io(t,e){var n=e.x-t.x,r=e.y-t.y,i=t.r+e.r;return.999*i*i>n*n+r*r}function ao(t){if((e=t.children)&&(l=e.length)){var e,n,r,i,a,o,s,l,c=1/0,u=-1/0,h=1/0,d=-1/0;if(e.forEach(oo),(n=e[0]).x=-n.r,n.y=0,_(n),l>1&&((r=e[1]).x=r.r,r.y=0,_(r),l>2))for(lo(n,r,i=e[2]),_(i),no(n,i),n._pack_prev=i,no(i,r),r=n._pack_next,a=3;a<l;a++){lo(n,r,i=e[a]);var f=0,p=1,m=1;for(o=r._pack_next;o!==r;o=o._pack_next,p++)if(io(o,i)){f=1;break}if(1==f)for(s=n._pack_prev;s!==o._pack_prev&&!io(s,i);s=s._pack_prev,m++);f?(p<m||p==m&&r.r<n.r?ro(n,r=o):ro(n=s,r),a--):(no(n,i),r=i,_(i))}var g=(c+u)/2,y=(h+d)/2,v=0;for(a=0;a<l;a++)(i=e[a]).x-=g,i.y-=y,v=Math.max(v,i.r+Math.sqrt(i.x*i.x+i.y*i.y));t.r=v,e.forEach(so)}function _(t){c=Math.min(t.x-t.r,c),u=Math.max(t.x+t.r,u),h=Math.min(t.y-t.r,h),d=Math.max(t.y+t.r,d)}}function oo(t){t._pack_next=t._pack_prev=t}function so(t){delete t._pack_next,delete t._pack_prev}function lo(t,e,n){var r=t.r+n.r,i=e.x-t.x,a=e.y-t.y;if(r&&(i||a)){var o=e.r+n.r,s=i*i+a*a,l=.5+((r*=r)-(o*=o))/(2*s),c=Math.sqrt(Math.max(0,2*o*(r+s)-(r-=s)*r-o*o))/(2*s);n.x=t.x+l*i+c*a,n.y=t.y+l*a-c*i}else n.x=t.x+r,n.y=t.y}function co(t,e){return t.parent==e.parent?1:2}function uo(t){var e=t.children;return e.length?e[0]:t.t}function ho(t){var e,n=t.children;return(e=n.length)?n[e-1]:t.t}function fo(t,e,n){var r=n/(e.i-t.i);e.c-=r,e.s+=n,t.c+=r,e.z+=n,e.m+=n}function po(t,e,n){return t.a.parent===e.parent?t.a:n}function mo(t){return{x:t.x,y:t.y,dx:t.dx,dy:t.dy}}function go(t,e){var n=t.x+e[3],r=t.y+e[0],i=t.dx-e[1]-e[3],a=t.dy-e[0]-e[2];return i<0&&(n+=i/2,i=0),a<0&&(r+=a/2,a=0),{x:n,y:r,dx:i,dy:a}}function yo(t){var e=t[0],n=t[t.length-1];return e<n?[e,n]:[n,e]}function vo(t){return t.rangeExtent?t.rangeExtent():yo(t.range())}function _o(t,e,n,r){var i=n(t[0],t[1]),a=r(e[0],e[1]);return function(t){return a(i(t))}}function bo(t,e){var n,r=0,i=t.length-1,a=t[r],o=t[i];return o<a&&(n=r,r=i,i=n,n=a,a=o,o=n),t[r]=e.floor(a),t[i]=e.ceil(o),t}function xo(t){return t?{floor:function(e){return Math.floor(e/t)*t},ceil:function(e){return Math.ceil(e/t)*t}}:wo}t.layout.histogram=function(){var e=!0,n=Number,r=to,i=$a;function a(a,o){for(var s,l,c=[],u=a.map(n,this),h=r.call(this,u,o),d=i.call(this,h,u,o),f=(o=-1,u.length),p=d.length-1,m=e?1:1/f;++o<p;)(s=c[o]=[]).dx=d[o+1]-(s.x=d[o]),s.y=0;if(p>0)for(o=-1;++o<f;)(l=u[o])>=h[0]&&l<=h[1]&&((s=c[t.bisect(d,l,1,p)-1]).y+=m,s.push(a[o]));return c}return a.value=function(t){return arguments.length?(n=t,a):n},a.range=function(t){return arguments.length?(r=ge(t),a):r},a.bins=function(t){return arguments.length?(i=\"number\"==typeof t?function(e){return Qa(e,t)}:ge(t),a):i},a.frequency=function(t){return arguments.length?(e=!!t,a):e},a},t.layout.pack=function(){var e,n=t.layout.hierarchy().sort(eo),r=0,i=[1,1];function a(t,a){var o=n.call(this,t,a),s=o[0],l=i[0],c=i[1],u=null==e?Math.sqrt:\"function\"==typeof e?e:function(){return e};if(s.x=s.y=0,za(s,(function(t){t.r=+u(t.value)})),za(s,ao),r){var h=r*(e?1:Math.max(2*s.r/l,2*s.r/c))/2;za(s,(function(t){t.r+=h})),za(s,ao),za(s,(function(t){t.r-=h}))}return function t(e,n,r,i){var a=e.children;if(e.x=n+=i*e.x,e.y=r+=i*e.y,e.r*=i,a)for(var o=-1,s=a.length;++o<s;)t(a[o],n,r,i)}(s,l/2,c/2,e?1:1/Math.max(2*s.r/l,2*s.r/c)),o}return a.size=function(t){return arguments.length?(i=t,a):i},a.radius=function(t){return arguments.length?(e=null==t||\"function\"==typeof t?t:+t,a):e},a.padding=function(t){return arguments.length?(r=+t,a):r},Pa(a,n)},t.layout.tree=function(){var e=t.layout.hierarchy().sort(null).value(null),n=co,r=[1,1],i=null;function a(t,a){var c=e.call(this,t,a),u=c[0],h=function(t){for(var e,n={A:null,children:[t]},r=[n];null!=(e=r.pop());)for(var i,a=e.children,o=0,s=a.length;o<s;++o)r.push((a[o]=i={_:a[o],parent:e,children:(i=a[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return n.children[0]}(u);if(za(h,o),h.parent.m=-h.z,Ra(h,s),i)Ra(u,l);else{var d=u,f=u,p=u;Ra(u,(function(t){t.x<d.x&&(d=t),t.x>f.x&&(f=t),t.depth>p.depth&&(p=t)}));var m=n(d,f)/2-d.x,g=r[0]/(f.x+n(f,d)/2+m),y=r[1]/(p.depth||1);Ra(u,(function(t){t.x=(t.x+m)*g,t.y=t.depth*y}))}return c}function o(t){var e=t.children,r=t.parent.children,i=t.i?r[t.i-1]:null;if(e.length){!function(t){for(var e,n=0,r=0,i=t.children,a=i.length;--a>=0;)(e=i[a]).z+=n,e.m+=n,n+=e.s+(r+=e.c)}(t);var a=(e[0].z+e[e.length-1].z)/2;i?(t.z=i.z+n(t._,i._),t.m=t.z-a):t.z=a}else i&&(t.z=i.z+n(t._,i._));t.parent.A=function(t,e,r){if(e){for(var i,a=t,o=t,s=e,l=a.parent.children[0],c=a.m,u=o.m,h=s.m,d=l.m;s=ho(s),a=uo(a),s&&a;)l=uo(l),(o=ho(o)).a=t,(i=s.z+h-a.z-c+n(s._,a._))>0&&(fo(po(s,t,r),t,i),c+=i,u+=i),h+=s.m,c+=a.m,d+=l.m,u+=o.m;s&&!ho(o)&&(o.t=s,o.m+=h-u),a&&!uo(l)&&(l.t=a,l.m+=c-d,r=t)}return r}(t,i,t.parent.A||r[0])}function s(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function l(t){t.x*=r[0],t.y=t.depth*r[1]}return a.separation=function(t){return arguments.length?(n=t,a):n},a.size=function(t){return arguments.length?(i=null==(r=t)?l:null,a):i?null:r},a.nodeSize=function(t){return arguments.length?(i=null==(r=t)?null:l,a):i?r:null},Pa(a,e)},t.layout.cluster=function(){var e=t.layout.hierarchy().sort(null).value(null),n=co,r=[1,1],i=!1;function a(a,o){var s,l=e.call(this,a,o),c=l[0],u=0;za(c,(function(e){var r=e.children;r&&r.length?(e.x=function(t){return t.reduce((function(t,e){return t+e.x}),0)/t.length}(r),e.y=function(e){return 1+t.max(e,(function(t){return t.y}))}(r)):(e.x=s?u+=n(e,s):0,e.y=0,s=e)}));var h=function t(e){var n=e.children;return n&&n.length?t(n[0]):e}(c),d=function t(e){var n,r=e.children;return r&&(n=r.length)?t(r[n-1]):e}(c),f=h.x-n(h,d)/2,p=d.x+n(d,h)/2;return za(c,i?function(t){t.x=(t.x-c.x)*r[0],t.y=(c.y-t.y)*r[1]}:function(t){t.x=(t.x-f)/(p-f)*r[0],t.y=(1-(c.y?t.y/c.y:1))*r[1]}),l}return a.separation=function(t){return arguments.length?(n=t,a):n},a.size=function(t){return arguments.length?(i=null==(r=t),a):i?null:r},a.nodeSize=function(t){return arguments.length?(i=null!=(r=t),a):i?r:null},Pa(a,e)},t.layout.treemap=function(){var e,n=t.layout.hierarchy(),r=Math.round,i=[1,1],a=null,o=mo,s=!1,l=\"squarify\",c=.5*(1+Math.sqrt(5));function u(t,e){for(var n,r,i=-1,a=t.length;++i<a;)r=(n=t[i]).value*(e<0?0:e),n.area=isNaN(r)||r<=0?0:r}function h(t){var e=t.children;if(e&&e.length){var n,r,i,a=o(t),s=[],c=e.slice(),d=1/0,m=\"slice\"===l?a.dx:\"dice\"===l?a.dy:\"slice-dice\"===l?1&t.depth?a.dy:a.dx:Math.min(a.dx,a.dy);for(u(c,a.dx*a.dy/t.value),s.area=0;(i=c.length)>0;)s.push(n=c[i-1]),s.area+=n.area,\"squarify\"!==l||(r=f(s,m))<=d?(c.pop(),d=r):(s.area-=s.pop().area,p(s,m,a,!1),m=Math.min(a.dx,a.dy),s.length=s.area=0,d=1/0);s.length&&(p(s,m,a,!0),s.length=s.area=0),e.forEach(h)}}function d(t){var e=t.children;if(e&&e.length){var n,r=o(t),i=e.slice(),a=[];for(u(i,r.dx*r.dy/t.value),a.area=0;n=i.pop();)a.push(n),a.area+=n.area,null!=n.z&&(p(a,n.z?r.dx:r.dy,r,!i.length),a.length=a.area=0);e.forEach(d)}}function f(t,e){for(var n,r=t.area,i=0,a=1/0,o=-1,s=t.length;++o<s;)(n=t[o].area)&&(n<a&&(a=n),n>i&&(i=n));return e*=e,(r*=r)?Math.max(e*i*c/r,r/(e*a*c)):1/0}function p(t,e,n,i){var a,o=-1,s=t.length,l=n.x,c=n.y,u=e?r(t.area/e):0;if(e==n.dx){for((i||u>n.dy)&&(u=n.dy);++o<s;)(a=t[o]).x=l,a.y=c,a.dy=u,l+=a.dx=Math.min(n.x+n.dx-l,u?r(a.area/u):0);a.z=!0,a.dx+=n.x+n.dx-l,n.y+=u,n.dy-=u}else{for((i||u>n.dx)&&(u=n.dx);++o<s;)(a=t[o]).x=l,a.y=c,a.dx=u,c+=a.dy=Math.min(n.y+n.dy-c,u?r(a.area/u):0);a.z=!1,a.dy+=n.y+n.dy-c,n.x+=u,n.dx-=u}}function m(t){var r=e||n(t),a=r[0];return a.x=a.y=0,a.value?(a.dx=i[0],a.dy=i[1]):a.dx=a.dy=0,e&&n.revalue(a),u([a],a.dx*a.dy/a.value),(e?d:h)(a),s&&(e=r),r}return m.size=function(t){return arguments.length?(i=t,m):i},m.padding=function(t){if(!arguments.length)return a;function e(e){var n=t.call(m,e,e.depth);return null==n?mo(e):go(e,\"number\"==typeof n?[n,n,n,n]:n)}function n(e){return go(e,t)}var r;return o=null==(a=t)?mo:\"function\"==(r=typeof t)?e:\"number\"===r?(t=[t,t,t,t],n):n,m},m.round=function(t){return arguments.length?(r=t?Math.round:Number,m):r!=Number},m.sticky=function(t){return arguments.length?(s=t,e=null,m):s},m.ratio=function(t){return arguments.length?(c=t,m):c},m.mode=function(t){return arguments.length?(l=t+\"\",m):l},Pa(m,n)},t.random={normal:function(t,e){var n=arguments.length;return n<2&&(e=1),n<1&&(t=0),function(){var n,r,i;do{i=(n=2*Math.random()-1)*n+(r=2*Math.random()-1)*r}while(!i||i>1);return t+e*n*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var e=t.random.normal.apply(t,arguments);return function(){return Math.exp(e())}},bates:function(e){var n=t.random.irwinHall(e);return function(){return n()/e}},irwinHall:function(t){return function(){for(var e=0,n=0;n<t;n++)e+=Math.random();return e}}},t.scale={};var wo={floor:E,ceil:E};function ko(e,n,r,i){var a=[],o=[],s=0,l=Math.min(e.length,n.length)-1;for(e[l]<e[0]&&(e=e.slice().reverse(),n=n.slice().reverse());++s<=l;)a.push(r(e[s-1],e[s])),o.push(i(n[s-1],n[s]));return function(n){var r=t.bisect(e,n,1,l)-1;return o[r](a[r](n))}}function Mo(e,n){return t.rebind(e,n,\"range\",\"rangeRound\",\"interpolate\",\"clamp\")}function To(t,e){return bo(t,xo(So(t,e)[2])),bo(t,xo(So(t,e)[2])),t}function So(t,e){null==e&&(e=10);var n=yo(t),r=n[1]-n[0],i=Math.pow(10,Math.floor(Math.log(r/e)/Math.LN10)),a=e/r*i;return a<=.15?i*=10:a<=.35?i*=5:a<=.75&&(i*=2),n[0]=Math.ceil(n[0]/i)*i,n[1]=Math.floor(n[1]/i)*i+.5*i,n[2]=i,n}function Ao(e,n){return t.range.apply(t,So(e,n))}function Lo(e,n,r){var i=So(e,n);if(r){var a=Oe.exec(r);if(a.shift(),\"s\"===a[8]){var o=t.formatPrefix(Math.max(v(i[0]),v(i[1])));return a[7]||(a[7]=\".\"+Eo(o.scale(i[2]))),a[8]=\"f\",r=t.format(a.join(\"\")),function(t){return r(o.scale(t))+o.symbol}}a[7]||(a[7]=\".\"+function(t,e){var n=Eo(e[2]);return t in Co?Math.abs(n-Eo(Math.max(v(e[0]),v(e[1]))))+ +(\"e\"!==t):n-2*(\"%\"===t)}(a[8],i)),r=a.join(\"\")}else r=\",.\"+Eo(i[2])+\"f\";return t.format(r)}t.scale.linear=function(){return function t(e,n,r,i){var a,o;function s(){var t=Math.min(e.length,n.length)>2?ko:_o,s=i?Ma:ka;return a=t(e,n,s,r),o=t(n,e,s,ea),l}function l(t){return a(t)}return l.invert=function(t){return o(t)},l.domain=function(t){return arguments.length?(e=t.map(Number),s()):e},l.range=function(t){return arguments.length?(n=t,s()):n},l.rangeRound=function(t){return l.range(t).interpolate(ga)},l.clamp=function(t){return arguments.length?(i=t,s()):i},l.interpolate=function(t){return arguments.length?(r=t,s()):r},l.ticks=function(t){return Ao(e,t)},l.tickFormat=function(t,n){return Lo(e,t,n)},l.nice=function(t){return To(e,t),s()},l.copy=function(){return t(e,n,r,i)},s()}([0,1],[0,1],ea,!1)};var Co={s:1,g:1,p:1,r:1,e:1};function Eo(t){return-Math.floor(Math.log(t)/Math.LN10+.01)}t.scale.log=function(){return function e(n,r,i,a){function o(t){return(i?Math.log(t<0?0:t):-Math.log(t>0?0:-t))/Math.log(r)}function s(t){return i?Math.pow(r,t):-Math.pow(r,-t)}function l(t){return n(o(t))}return l.invert=function(t){return s(n.invert(t))},l.domain=function(t){return arguments.length?(i=t[0]>=0,n.domain((a=t.map(Number)).map(o)),l):a},l.base=function(t){return arguments.length?(r=+t,n.domain(a.map(o)),l):r},l.nice=function(){var t=bo(a.map(o),i?Math:Do);return n.domain(t),a=t.map(s),l},l.ticks=function(){var t=yo(a),e=[],n=t[0],l=t[1],c=Math.floor(o(n)),u=Math.ceil(o(l)),h=r%1?2:r;if(isFinite(u-c)){if(i){for(;c<u;c++)for(var d=1;d<h;d++)e.push(s(c)*d);e.push(s(c))}else for(e.push(s(c));c++<u;)for(d=h-1;d>0;d--)e.push(s(c)*d);for(c=0;e[c]<n;c++);for(u=e.length;e[u-1]>l;u--);e=e.slice(c,u)}return e},l.tickFormat=function(e,n){if(!arguments.length)return Oo;arguments.length<2?n=Oo:\"function\"!=typeof n&&(n=t.format(n));var i=Math.max(1,r*e/l.ticks().length);return function(t){var e=t/s(Math.round(o(t)));return e*r<r-.5&&(e*=r),e<=i?n(t):\"\"}},l.copy=function(){return e(n.copy(),r,i,a)},Mo(l,n)}(t.scale.linear().domain([0,1]),10,!0,[1,10])};var Oo=t.format(\".0e\"),Do={floor:function(t){return-Math.ceil(-t)},ceil:function(t){return-Math.floor(-t)}};function Io(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}t.scale.pow=function(){return function t(e,n,r){var i=Io(n),a=Io(1/n);function o(t){return e(i(t))}return o.invert=function(t){return a(e.invert(t))},o.domain=function(t){return arguments.length?(e.domain((r=t.map(Number)).map(i)),o):r},o.ticks=function(t){return Ao(r,t)},o.tickFormat=function(t,e){return Lo(r,t,e)},o.nice=function(t){return o.domain(To(r,t))},o.exponent=function(t){return arguments.length?(i=Io(n=t),a=Io(1/n),e.domain(r.map(i)),o):n},o.copy=function(){return t(e.copy(),n,r)},Mo(o,e)}(t.scale.linear(),1,[0,1])},t.scale.sqrt=function(){return t.scale.pow().exponent(.5)},t.scale.ordinal=function(){return function e(n,r){var i,a,o;function s(t){return a[((i.get(t)||(\"range\"===r.t?i.set(t,n.push(t)):NaN))-1)%a.length]}function l(e,r){return t.range(n.length).map((function(t){return e+r*t}))}return s.domain=function(t){if(!arguments.length)return n;n=[],i=new x;for(var e,a=-1,o=t.length;++a<o;)i.has(e=t[a])||i.set(e,n.push(e));return s[r.t].apply(s,r.a)},s.range=function(t){return arguments.length?(a=t,o=0,r={t:\"range\",a:arguments},s):a},s.rangePoints=function(t,e){arguments.length<2&&(e=0);var i=t[0],c=t[1],u=n.length<2?(i=(i+c)/2,0):(c-i)/(n.length-1+e);return a=l(i+u*e/2,u),o=0,r={t:\"rangePoints\",a:arguments},s},s.rangeRoundPoints=function(t,e){arguments.length<2&&(e=0);var i=t[0],c=t[1],u=n.length<2?(i=c=Math.round((i+c)/2),0):(c-i)/(n.length-1+e)|0;return a=l(i+Math.round(u*e/2+(c-i-(n.length-1+e)*u)/2),u),o=0,r={t:\"rangeRoundPoints\",a:arguments},s},s.rangeBands=function(t,e,i){arguments.length<2&&(e=0),arguments.length<3&&(i=e);var c=t[1]<t[0],u=t[c-0],h=(t[1-c]-u)/(n.length-e+2*i);return a=l(u+h*i,h),c&&a.reverse(),o=h*(1-e),r={t:\"rangeBands\",a:arguments},s},s.rangeRoundBands=function(t,e,i){arguments.length<2&&(e=0),arguments.length<3&&(i=e);var c=t[1]<t[0],u=t[c-0],h=t[1-c],d=Math.floor((h-u)/(n.length-e+2*i));return a=l(u+Math.round((h-u-(n.length-e)*d)/2),d),c&&a.reverse(),o=Math.round(d*(1-e)),r={t:\"rangeRoundBands\",a:arguments},s},s.rangeBand=function(){return o},s.rangeExtent=function(){return yo(r.a[0])},s.copy=function(){return e(n,r)},s.domain(n)}([],{t:\"range\",a:[[]]})},t.scale.category10=function(){return t.scale.ordinal().range(Po)},t.scale.category20=function(){return t.scale.ordinal().range(Ro)},t.scale.category20b=function(){return t.scale.ordinal().range(zo)},t.scale.category20c=function(){return t.scale.ordinal().range(jo)};var Po=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(se),Ro=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(se),zo=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(se),jo=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(se);function Fo(){return 0}t.scale.quantile=function(){return function e(n,r){var i;function a(){var e=0,a=r.length;for(i=[];++e<a;)i[e-1]=t.quantile(n,e/a);return o}function o(e){if(!isNaN(e=+e))return r[t.bisect(i,e)]}return o.domain=function(t){return arguments.length?(n=t.map(f).filter(p).sort(d),a()):n},o.range=function(t){return arguments.length?(r=t,a()):r},o.quantiles=function(){return i},o.invertExtent=function(t){return(t=r.indexOf(t))<0?[NaN,NaN]:[t>0?i[t-1]:n[0],t<i.length?i[t]:n[n.length-1]]},o.copy=function(){return e(n,r)},a()}([],[])},t.scale.quantize=function(){return function t(e,n,r){var i,a;function o(t){return r[Math.max(0,Math.min(a,Math.floor(i*(t-e))))]}function s(){return i=r.length/(n-e),a=r.length-1,o}return o.domain=function(t){return arguments.length?(e=+t[0],n=+t[t.length-1],s()):[e,n]},o.range=function(t){return arguments.length?(r=t,s()):r},o.invertExtent=function(t){return[t=(t=r.indexOf(t))<0?NaN:t/i+e,t+1/i]},o.copy=function(){return t(e,n,r)},s()}(0,1,[0,1])},t.scale.threshold=function(){return function e(n,r){function i(e){if(e<=e)return r[t.bisect(n,e)]}return i.domain=function(t){return arguments.length?(n=t,i):n},i.range=function(t){return arguments.length?(r=t,i):r},i.invertExtent=function(t){return t=r.indexOf(t),[n[t-1],n[t]]},i.copy=function(){return e(n,r)},i}([.5],[0,1])},t.scale.identity=function(){return function t(e){function n(t){return+t}return n.invert=n,n.domain=n.range=function(t){return arguments.length?(e=t.map(n),n):e},n.ticks=function(t){return Ao(e,t)},n.tickFormat=function(t,n){return Lo(e,t,n)},n.copy=function(){return t(e)},n}([0,1])},t.svg={},t.svg.arc=function(){var t=Bo,e=Yo,n=Fo,r=No,i=Ho,a=Vo,o=Uo;function s(){var s=Math.max(0,+t.apply(this,arguments)),c=Math.max(0,+e.apply(this,arguments)),u=i.apply(this,arguments)-Ct,h=a.apply(this,arguments)-Ct,d=Math.abs(h-u),f=u>h?0:1;if(c<s&&(p=c,c=s,s=p),d>=Lt)return l(c,f)+(s?l(s,1-f):\"\")+\"Z\";var p,m,g,y,v,_,b,x,w,k,M,T,S=0,A=0,L=[];if((y=(+o.apply(this,arguments)||0)/2)&&(g=r===No?Math.sqrt(s*s+c*c):+r.apply(this,arguments),f||(A*=-1),c&&(A=Rt(g/c*Math.sin(y))),s&&(S=Rt(g/s*Math.sin(y)))),c){v=c*Math.cos(u+A),_=c*Math.sin(u+A),b=c*Math.cos(h-A),x=c*Math.sin(h-A);var C=Math.abs(h-u-2*A)<=St?0:1;if(A&&Wo(v,_,b,x)===f^C){var E=(u+h)/2;v=c*Math.cos(E),_=c*Math.sin(E),b=x=null}}else v=_=0;if(s){w=s*Math.cos(h-S),k=s*Math.sin(h-S),M=s*Math.cos(u+S),T=s*Math.sin(u+S);var O=Math.abs(u-h+2*S)<=St?0:1;if(S&&Wo(w,k,M,T)===1-f^O){var D=(u+h)/2;w=s*Math.cos(D),k=s*Math.sin(D),M=T=null}}else w=k=0;if(d>Mt&&(p=Math.min(Math.abs(c-s)/2,+n.apply(this,arguments)))>.001){m=s<c^f?0:1;var I=p,P=p;if(d<St){var R=null==M?[w,k]:null==b?[v,_]:hi([v,_],[M,T],[b,x],[w,k]),z=v-R[0],j=_-R[1],F=b-R[0],N=x-R[1],B=1/Math.sin(Math.acos((z*F+j*N)/(Math.sqrt(z*z+j*j)*Math.sqrt(F*F+N*N)))/2),Y=Math.sqrt(R[0]*R[0]+R[1]*R[1]);P=Math.min(p,(s-Y)/(B-1)),I=Math.min(p,(c-Y)/(B+1))}if(null!=b){var H=qo(null==M?[w,k]:[M,T],[v,_],c,I,f),V=qo([b,x],[w,k],c,I,f);p===I?L.push(\"M\",H[0],\"A\",I,\",\",I,\" 0 0,\",m,\" \",H[1],\"A\",c,\",\",c,\" 0 \",1-f^Wo(H[1][0],H[1][1],V[1][0],V[1][1]),\",\",f,\" \",V[1],\"A\",I,\",\",I,\" 0 0,\",m,\" \",V[0]):L.push(\"M\",H[0],\"A\",I,\",\",I,\" 0 1,\",m,\" \",V[0])}else L.push(\"M\",v,\",\",_);if(null!=M){var U=qo([v,_],[M,T],s,-P,f),W=qo([w,k],null==b?[v,_]:[b,x],s,-P,f);p===P?L.push(\"L\",W[0],\"A\",P,\",\",P,\" 0 0,\",m,\" \",W[1],\"A\",s,\",\",s,\" 0 \",f^Wo(W[1][0],W[1][1],U[1][0],U[1][1]),\",\",1-f,\" \",U[1],\"A\",P,\",\",P,\" 0 0,\",m,\" \",U[0]):L.push(\"L\",W[0],\"A\",P,\",\",P,\" 0 0,\",m,\" \",U[0])}else L.push(\"L\",w,\",\",k)}else L.push(\"M\",v,\",\",_),null!=b&&L.push(\"A\",c,\",\",c,\" 0 \",C,\",\",f,\" \",b,\",\",x),L.push(\"L\",w,\",\",k),null!=M&&L.push(\"A\",s,\",\",s,\" 0 \",O,\",\",1-f,\" \",M,\",\",T);return L.push(\"Z\"),L.join(\"\")}function l(t,e){return\"M0,\"+t+\"A\"+t+\",\"+t+\" 0 1,\"+e+\" 0,\"+-t+\"A\"+t+\",\"+t+\" 0 1,\"+e+\" 0,\"+t}return s.innerRadius=function(e){return arguments.length?(t=ge(e),s):t},s.outerRadius=function(t){return arguments.length?(e=ge(t),s):e},s.cornerRadius=function(t){return arguments.length?(n=ge(t),s):n},s.padRadius=function(t){return arguments.length?(r=t==No?No:ge(t),s):r},s.startAngle=function(t){return arguments.length?(i=ge(t),s):i},s.endAngle=function(t){return arguments.length?(a=ge(t),s):a},s.padAngle=function(t){return arguments.length?(o=ge(t),s):o},s.centroid=function(){var n=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,r=(+i.apply(this,arguments)+ +a.apply(this,arguments))/2-Ct;return[Math.cos(r)*n,Math.sin(r)*n]},s};var No=\"auto\";function Bo(t){return t.innerRadius}function Yo(t){return t.outerRadius}function Ho(t){return t.startAngle}function Vo(t){return t.endAngle}function Uo(t){return t&&t.padAngle}function Wo(t,e,n,r){return(t-n)*e-(e-r)*t>0?0:1}function qo(t,e,n,r,i){var a=t[0]-e[0],o=t[1]-e[1],s=(i?r:-r)/Math.sqrt(a*a+o*o),l=s*o,c=-s*a,u=t[0]+l,h=t[1]+c,d=e[0]+l,f=e[1]+c,p=(u+d)/2,m=(h+f)/2,g=d-u,y=f-h,v=g*g+y*y,_=n-r,b=u*f-d*h,x=(y<0?-1:1)*Math.sqrt(Math.max(0,_*_*v-b*b)),w=(b*y-g*x)/v,k=(-b*g-y*x)/v,M=(b*y+g*x)/v,T=(-b*g+y*x)/v,S=w-p,A=k-m,L=M-p,C=T-m;return S*S+A*A>L*L+C*C&&(w=M,k=T),[[w-l,k-c],[w*n/_,k*n/_]]}function Go(t){var e=ai,n=oi,r=Zn,i=Zo,a=i.key,o=.7;function s(a){var s,l=[],c=[],u=-1,h=a.length,d=ge(e),f=ge(n);function p(){l.push(\"M\",i(t(c),o))}for(;++u<h;)r.call(this,s=a[u],u)?c.push([+d.call(this,s,u),+f.call(this,s,u)]):c.length&&(p(),c=[]);return c.length&&p(),l.length?l.join(\"\"):null}return s.x=function(t){return arguments.length?(e=t,s):e},s.y=function(t){return arguments.length?(n=t,s):n},s.defined=function(t){return arguments.length?(r=t,s):r},s.interpolate=function(t){return arguments.length?(a=\"function\"==typeof t?i=t:(i=Xo.get(t)||Zo).key,s):a},s.tension=function(t){return arguments.length?(o=t,s):o},s}t.svg.line=function(){return Go(E)};var Xo=t.map({linear:Zo,\"linear-closed\":Jo,step:function(t){for(var e=0,n=t.length,r=t[0],i=[r[0],\",\",r[1]];++e<n;)i.push(\"H\",(r[0]+(r=t[e])[0])/2,\"V\",r[1]);return n>1&&i.push(\"H\",r[0]),i.join(\"\")},\"step-before\":Ko,\"step-after\":$o,basis:es,\"basis-open\":function(t){if(t.length<4)return Zo(t);for(var e,n=[],r=-1,i=t.length,a=[0],o=[0];++r<3;)a.push((e=t[r])[0]),o.push(e[1]);for(n.push(ns(as,a)+\",\"+ns(as,o)),--r;++r<i;)e=t[r],a.shift(),a.push(e[0]),o.shift(),o.push(e[1]),os(n,a,o);return n.join(\"\")},\"basis-closed\":function(t){for(var e,n,r=-1,i=t.length,a=i+4,o=[],s=[];++r<4;)o.push((n=t[r%i])[0]),s.push(n[1]);for(e=[ns(as,o),\",\",ns(as,s)],--r;++r<a;)n=t[r%i],o.shift(),o.push(n[0]),s.shift(),s.push(n[1]),os(e,o,s);return e.join(\"\")},bundle:function(t,e){var n=t.length-1;if(n)for(var r,i,a=t[0][0],o=t[0][1],s=t[n][0]-a,l=t[n][1]-o,c=-1;++c<=n;)(r=t[c])[0]=e*r[0]+(1-e)*(a+(i=c/n)*s),r[1]=e*r[1]+(1-e)*(o+i*l);return es(t)},cardinal:function(t,e){return t.length<3?Zo(t):t[0]+Qo(t,ts(t,e))},\"cardinal-open\":function(t,e){return t.length<4?Zo(t):t[1]+Qo(t.slice(1,-1),ts(t,e))},\"cardinal-closed\":function(t,e){return t.length<3?Jo(t):t[0]+Qo((t.push(t[0]),t),ts([t[t.length-2]].concat(t,[t[1]]),e))},monotone:function(t){return t.length<3?Zo(t):t[0]+Qo(t,function(t){for(var e,n,r,i,a=[],o=function(t){for(var e=0,n=t.length-1,r=[],i=t[0],a=t[1],o=r[0]=ss(i,a);++e<n;)r[e]=(o+(o=ss(i=a,a=t[e+1])))/2;return r[e]=o,r}(t),s=-1,l=t.length-1;++s<l;)e=ss(t[s],t[s+1]),v(e)<Mt?o[s]=o[s+1]=0:(i=(n=o[s]/e)*n+(r=o[s+1]/e)*r)>9&&(i=3*e/Math.sqrt(i),o[s]=i*n,o[s+1]=i*r);for(s=-1;++s<=l;)i=(t[Math.min(l,s+1)][0]-t[Math.max(0,s-1)][0])/(6*(1+o[s]*o[s])),a.push([i||0,o[s]*i||0]);return a}(t))}});function Zo(t){return t.length>1?t.join(\"L\"):t+\"Z\"}function Jo(t){return t.join(\"L\")+\"Z\"}function Ko(t){for(var e=0,n=t.length,r=t[0],i=[r[0],\",\",r[1]];++e<n;)i.push(\"V\",(r=t[e])[1],\"H\",r[0]);return i.join(\"\")}function $o(t){for(var e=0,n=t.length,r=t[0],i=[r[0],\",\",r[1]];++e<n;)i.push(\"H\",(r=t[e])[0],\"V\",r[1]);return i.join(\"\")}function Qo(t,e){if(e.length<1||t.length!=e.length&&t.length!=e.length+2)return Zo(t);var n=t.length!=e.length,r=\"\",i=t[0],a=t[1],o=e[0],s=o,l=1;if(n&&(r+=\"Q\"+(a[0]-2*o[0]/3)+\",\"+(a[1]-2*o[1]/3)+\",\"+a[0]+\",\"+a[1],i=t[1],l=2),e.length>1){a=t[l],l++,r+=\"C\"+(i[0]+o[0])+\",\"+(i[1]+o[1])+\",\"+(a[0]-(s=e[1])[0])+\",\"+(a[1]-s[1])+\",\"+a[0]+\",\"+a[1];for(var c=2;c<e.length;c++,l++)r+=\"S\"+((a=t[l])[0]-(s=e[c])[0])+\",\"+(a[1]-s[1])+\",\"+a[0]+\",\"+a[1]}if(n){var u=t[l];r+=\"Q\"+(a[0]+2*s[0]/3)+\",\"+(a[1]+2*s[1]/3)+\",\"+u[0]+\",\"+u[1]}return r}function ts(t,e){for(var n,r=[],i=(1-e)/2,a=t[0],o=t[1],s=1,l=t.length;++s<l;)n=a,a=o,r.push([i*((o=t[s])[0]-n[0]),i*(o[1]-n[1])]);return r}function es(t){if(t.length<3)return Zo(t);var e=1,n=t.length,r=t[0],i=r[0],a=r[1],o=[i,i,i,(r=t[1])[0]],s=[a,a,a,r[1]],l=[i,\",\",a,\"L\",ns(as,o),\",\",ns(as,s)];for(t.push(t[n-1]);++e<=n;)r=t[e],o.shift(),o.push(r[0]),s.shift(),s.push(r[1]),os(l,o,s);return t.pop(),l.push(\"L\",r),l.join(\"\")}function ns(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}Xo.forEach((function(t,e){e.key=t,e.closed=/-closed$/.test(t)}));var rs=[0,2/3,1/3,0],is=[0,1/3,2/3,0],as=[0,1/6,2/3,1/6];function os(t,e,n){t.push(\"C\",ns(rs,e),\",\",ns(rs,n),\",\",ns(is,e),\",\",ns(is,n),\",\",ns(as,e),\",\",ns(as,n))}function ss(t,e){return(e[1]-t[1])/(e[0]-t[0])}function ls(t){for(var e,n,r,i=-1,a=t.length;++i<a;)r=(e=t[i])[1]-Ct,e[0]=(n=e[0])*Math.cos(r),e[1]=n*Math.sin(r);return t}function cs(t){var e=ai,n=ai,r=0,i=oi,a=Zn,o=Zo,s=o.key,l=o,c=\"L\",u=.7;function h(s){var h,d,f,p=[],m=[],g=[],y=-1,v=s.length,_=ge(e),b=ge(r),x=e===n?function(){return d}:ge(n),w=r===i?function(){return f}:ge(i);function k(){p.push(\"M\",o(t(g),u),c,l(t(m.reverse()),u),\"Z\")}for(;++y<v;)a.call(this,h=s[y],y)?(m.push([d=+_.call(this,h,y),f=+b.call(this,h,y)]),g.push([+x.call(this,h,y),+w.call(this,h,y)])):m.length&&(k(),m=[],g=[]);return m.length&&k(),p.length?p.join(\"\"):null}return h.x=function(t){return arguments.length?(e=n=t,h):n},h.x0=function(t){return arguments.length?(e=t,h):e},h.x1=function(t){return arguments.length?(n=t,h):n},h.y=function(t){return arguments.length?(r=i=t,h):i},h.y0=function(t){return arguments.length?(r=t,h):r},h.y1=function(t){return arguments.length?(i=t,h):i},h.defined=function(t){return arguments.length?(a=t,h):a},h.interpolate=function(t){return arguments.length?(s=\"function\"==typeof t?o=t:(o=Xo.get(t)||Zo).key,l=o.reverse||o,c=o.closed?\"M\":\"L\",h):s},h.tension=function(t){return arguments.length?(u=t,h):u},h}function us(t){return t.radius}function hs(t){return[t.x,t.y]}function ds(t){return function(){var e=t.apply(this,arguments),n=e[0],r=e[1]-Ct;return[n*Math.cos(r),n*Math.sin(r)]}}function fs(){return 64}function ps(){return\"circle\"}function ms(t){var e=Math.sqrt(t/St);return\"M0,\"+e+\"A\"+e+\",\"+e+\" 0 1,1 0,\"+-e+\"A\"+e+\",\"+e+\" 0 1,1 0,\"+e+\"Z\"}t.svg.line.radial=function(){var t=Go(ls);return t.radius=t.x,delete t.x,t.angle=t.y,delete t.y,t},Ko.reverse=$o,$o.reverse=Ko,t.svg.area=function(){return cs(E)},t.svg.area.radial=function(){var t=cs(ls);return t.radius=t.x,delete t.x,t.innerRadius=t.x0,delete t.x0,t.outerRadius=t.x1,delete t.x1,t.angle=t.y,delete t.y,t.startAngle=t.y0,delete t.y0,t.endAngle=t.y1,delete t.y1,t},t.svg.chord=function(){var t=Wr,e=qr,n=us,r=Ho,i=Vo;function a(n,r){var i,a,c=o(this,t,n,r),u=o(this,e,n,r);return\"M\"+c.p0+s(c.r,c.p1,c.a1-c.a0)+((i=c).a0==(a=u).a0&&i.a1==a.a1?l(0,0,0,c.p0):l(0,0,0,u.p0)+s(u.r,u.p1,u.a1-u.a0)+l(0,0,0,c.p0))+\"Z\"}function o(t,e,a,o){var s=e.call(t,a,o),l=n.call(t,s,o),c=r.call(t,s,o)-Ct,u=i.call(t,s,o)-Ct;return{r:l,a0:c,a1:u,p0:[l*Math.cos(c),l*Math.sin(c)],p1:[l*Math.cos(u),l*Math.sin(u)]}}function s(t,e,n){return\"A\"+t+\",\"+t+\" 0 \"+ +(n>St)+\",1 \"+e}function l(t,e,n,r){return\"Q 0,0 \"+r}return a.radius=function(t){return arguments.length?(n=ge(t),a):n},a.source=function(e){return arguments.length?(t=ge(e),a):t},a.target=function(t){return arguments.length?(e=ge(t),a):e},a.startAngle=function(t){return arguments.length?(r=ge(t),a):r},a.endAngle=function(t){return arguments.length?(i=ge(t),a):i},a},t.svg.diagonal=function(){var t=Wr,e=qr,n=hs;function r(r,i){var a=t.call(this,r,i),o=e.call(this,r,i),s=(a.y+o.y)/2,l=[a,{x:a.x,y:s},{x:o.x,y:s},o];return\"M\"+(l=l.map(n))[0]+\"C\"+l[1]+\" \"+l[2]+\" \"+l[3]}return r.source=function(e){return arguments.length?(t=ge(e),r):t},r.target=function(t){return arguments.length?(e=ge(t),r):e},r.projection=function(t){return arguments.length?(n=t,r):n},r},t.svg.diagonal.radial=function(){var e=t.svg.diagonal(),n=hs,r=e.projection;return e.projection=function(t){return arguments.length?r(ds(n=t)):n},e},t.svg.symbol=function(){var t=ps,e=fs;function n(n,r){return(gs.get(t.call(this,n,r))||ms)(e.call(this,n,r))}return n.type=function(e){return arguments.length?(t=ge(e),n):t},n.size=function(t){return arguments.length?(e=ge(t),n):e},n};var gs=t.map({circle:ms,cross:function(t){var e=Math.sqrt(t/5)/2;return\"M\"+-3*e+\",\"+-e+\"H\"+-e+\"V\"+-3*e+\"H\"+e+\"V\"+-e+\"H\"+3*e+\"V\"+e+\"H\"+e+\"V\"+3*e+\"H\"+-e+\"V\"+e+\"H\"+-3*e+\"Z\"},diamond:function(t){var e=Math.sqrt(t/(2*vs)),n=e*vs;return\"M0,\"+-e+\"L\"+n+\",0 0,\"+e+\" \"+-n+\",0Z\"},square:function(t){var e=Math.sqrt(t)/2;return\"M\"+-e+\",\"+-e+\"L\"+e+\",\"+-e+\" \"+e+\",\"+e+\" \"+-e+\",\"+e+\"Z\"},\"triangle-down\":function(t){var e=Math.sqrt(t/ys),n=e*ys/2;return\"M0,\"+n+\"L\"+e+\",\"+-n+\" \"+-e+\",\"+-n+\"Z\"},\"triangle-up\":function(t){var e=Math.sqrt(t/ys),n=e*ys/2;return\"M0,\"+-n+\"L\"+e+\",\"+n+\" \"+-e+\",\"+n+\"Z\"}});t.svg.symbolTypes=gs.keys();var ys=Math.sqrt(3),vs=Math.tan(30*Et);q.transition=function(t){for(var e,n,r=ws||++Ts,i=Ls(t),a=[],o=ks||{time:Date.now(),ease:ha,delay:0,duration:250},s=-1,l=this.length;++s<l;){a.push(e=[]);for(var c=this[s],u=-1,h=c.length;++u<h;)(n=c[u])&&Cs(n,u,i,r,o),e.push(n)}return xs(a,i,r)},q.interrupt=function(t){return this.each(null==t?_s:bs(Ls(t)))};var _s=bs(Ls());function bs(t){return function(){var e,n,r;(e=this[t])&&(r=e[n=e.active])&&(r.timer.c=null,r.timer.t=NaN,--e.count?delete e[n]:delete this[t],e.active+=.5,r.event&&r.event.interrupt.call(this,this.__data__,r.index))}}function xs(t,e,n){return Y(t,Ms),t.namespace=e,t.id=n,t}var ws,ks,Ms=[],Ts=0;function Ss(t,e,n,r){var i=t.id,a=t.namespace;return ut(t,\"function\"==typeof n?function(t,o,s){t[a][i].tween.set(e,r(n.call(t,t.__data__,o,s)))}:(n=r(n),function(t){t[a][i].tween.set(e,n)}))}function As(t){return null==t&&(t=\"\"),function(){this.textContent=t}}function Ls(t){return null==t?\"__transition__\":\"__transition_\"+t+\"__\"}function Cs(t,e,n,r,i){var a,o,s,l,c,u=t[n]||(t[n]={active:0,count:0}),h=u[r];function d(n){var i=u.active,d=u[i];for(var p in d&&(d.timer.c=null,d.timer.t=NaN,--u.count,delete u[i],d.event&&d.event.interrupt.call(t,t.__data__,d.index)),u)if(+p<r){var m=u[p];m.timer.c=null,m.timer.t=NaN,--u.count,delete u[p]}o.c=f,Me((function(){return o.c&&f(n||1)&&(o.c=null,o.t=NaN),1}),0,a),u.active=r,h.event&&h.event.start.call(t,t.__data__,e),c=[],h.tween.forEach((function(n,r){(r=r.call(t,t.__data__,e))&&c.push(r)})),l=h.ease,s=h.duration}function f(i){for(var a=i/s,o=l(a),d=c.length;d>0;)c[--d].call(t,o);if(a>=1)return h.event&&h.event.end.call(t,t.__data__,e),--u.count?delete u[r]:delete t[n],1}h||(o=Me((function(t){var e=h.delay;if(o.t=e+a,e<=t)return d(t-e);o.c=d}),0,a=i.time),h=u[r]={tween:new x,time:a,timer:o,delay:i.delay,duration:i.duration,ease:i.ease,index:e},i=null,++u.count)}Ms.call=q.call,Ms.empty=q.empty,Ms.node=q.node,Ms.size=q.size,t.transition=function(e,n){return e&&e.transition?ws?e.transition(n):e:t.selection().transition(e)},t.transition.prototype=Ms,Ms.select=function(t){var e,n,r,i=this.id,a=this.namespace,o=[];t=G(t);for(var s=-1,l=this.length;++s<l;){o.push(e=[]);for(var c=this[s],u=-1,h=c.length;++u<h;)(r=c[u])&&(n=t.call(r,r.__data__,u,s))?(\"__data__\"in r&&(n.__data__=r.__data__),Cs(n,u,a,i,r[a][i]),e.push(n)):e.push(null)}return xs(o,a,i)},Ms.selectAll=function(t){var e,n,r,i,a,o=this.id,s=this.namespace,l=[];t=X(t);for(var c=-1,u=this.length;++c<u;)for(var h=this[c],d=-1,f=h.length;++d<f;)if(r=h[d]){a=r[s][o],n=t.call(r,r.__data__,d,c),l.push(e=[]);for(var p=-1,m=n.length;++p<m;)(i=n[p])&&Cs(i,p,s,o,a),e.push(i)}return xs(l,s,o)},Ms.filter=function(t){var e,n,r=[];\"function\"!=typeof t&&(t=lt(t));for(var i=0,a=this.length;i<a;i++){r.push(e=[]);for(var o,s=0,l=(o=this[i]).length;s<l;s++)(n=o[s])&&t.call(n,n.__data__,s,i)&&e.push(n)}return xs(r,this.namespace,this.id)},Ms.tween=function(t,e){var n=this.id,r=this.namespace;return arguments.length<2?this.node()[r][n].tween.get(t):ut(this,null==e?function(e){e[r][n].tween.remove(t)}:function(i){i[r][n].tween.set(t,e)})},Ms.attr=function(e,n){if(arguments.length<2){for(n in e)this.attr(n,e[n]);return this}var r=\"transform\"==e?wa:ea,i=t.ns.qualify(e);function a(){this.removeAttribute(i)}function o(){this.removeAttributeNS(i.space,i.local)}function s(t){return null==t?a:(t+=\"\",function(){var e,n=this.getAttribute(i);return n!==t&&(e=r(n,t),function(t){this.setAttribute(i,e(t))})})}function l(t){return null==t?o:(t+=\"\",function(){var e,n=this.getAttributeNS(i.space,i.local);return n!==t&&(e=r(n,t),function(t){this.setAttributeNS(i.space,i.local,e(t))})})}return Ss(this,\"attr.\"+e,n,i.local?l:s)},Ms.attrTween=function(e,n){var r=t.ns.qualify(e);return this.tween(\"attr.\"+e,r.local?function(t,e){var i=n.call(this,t,e,this.getAttributeNS(r.space,r.local));return i&&function(t){this.setAttributeNS(r.space,r.local,i(t))}}:function(t,e){var i=n.call(this,t,e,this.getAttribute(r));return i&&function(t){this.setAttribute(r,i(t))}})},Ms.style=function(t,e,n){var r=arguments.length;if(r<3){if(\"string\"!=typeof t){for(n in r<2&&(e=\"\"),t)this.style(n,t[n],e);return this}n=\"\"}function i(){this.style.removeProperty(t)}function a(e){return null==e?i:(e+=\"\",function(){var r,i=o(this).getComputedStyle(this,null).getPropertyValue(t);return i!==e&&(r=ea(i,e),function(e){this.style.setProperty(t,r(e),n)})})}return Ss(this,\"style.\"+t,e,a)},Ms.styleTween=function(t,e,n){function r(r,i){var a=e.call(this,r,i,o(this).getComputedStyle(this,null).getPropertyValue(t));return a&&function(e){this.style.setProperty(t,a(e),n)}}return arguments.length<3&&(n=\"\"),this.tween(\"style.\"+t,r)},Ms.text=function(t){return Ss(this,\"text\",t,As)},Ms.remove=function(){var t=this.namespace;return this.each(\"end.transition\",(function(){var e;this[t].count<2&&(e=this.parentNode)&&e.removeChild(this)}))},Ms.ease=function(e){var n=this.id,r=this.namespace;return arguments.length<1?this.node()[r][n].ease:(\"function\"!=typeof e&&(e=t.ease.apply(t,arguments)),ut(this,(function(t){t[r][n].ease=e})))},Ms.delay=function(t){var e=this.id,n=this.namespace;return arguments.length<1?this.node()[n][e].delay:ut(this,\"function\"==typeof t?function(r,i,a){r[n][e].delay=+t.call(r,r.__data__,i,a)}:(t=+t,function(r){r[n][e].delay=t}))},Ms.duration=function(t){var e=this.id,n=this.namespace;return arguments.length<1?this.node()[n][e].duration:ut(this,\"function\"==typeof t?function(r,i,a){r[n][e].duration=Math.max(1,t.call(r,r.__data__,i,a))}:(t=Math.max(1,t),function(r){r[n][e].duration=t}))},Ms.each=function(e,n){var r=this.id,i=this.namespace;if(arguments.length<2){var a=ks,o=ws;try{ws=r,ut(this,(function(t,n,a){ks=t[i][r],e.call(t,t.__data__,n,a)}))}finally{ks=a,ws=o}}else ut(this,(function(a){var o=a[i][r];(o.event||(o.event=t.dispatch(\"start\",\"end\",\"interrupt\"))).on(e,n)}));return this},Ms.transition=function(){for(var t,e,n,r=this.id,i=++Ts,a=this.namespace,o=[],s=0,l=this.length;s<l;s++){o.push(t=[]);for(var c,u=0,h=(c=this[s]).length;u<h;u++)(e=c[u])&&Cs(e,u,a,i,{time:(n=e[a][r]).time,ease:n.ease,delay:n.delay+n.duration,duration:n.duration}),t.push(e)}return xs(o,a,i)},t.svg.axis=function(){var e,n=t.scale.linear(),i=Es,a=6,o=6,s=3,l=[10],c=null;function u(r){r.each((function(){var r,u=t.select(this),h=this.__chart__||n,d=this.__chart__=n.copy(),f=null==c?d.ticks?d.ticks.apply(d,l):d.domain():c,p=null==e?d.tickFormat?d.tickFormat.apply(d,l):E:e,m=u.selectAll(\".tick\").data(f,d),g=m.enter().insert(\"g\",\".domain\").attr(\"class\",\"tick\").style(\"opacity\",Mt),y=t.transition(m.exit()).style(\"opacity\",Mt).remove(),v=t.transition(m.order()).style(\"opacity\",1),_=Math.max(a,0)+s,b=vo(d),x=u.selectAll(\".domain\").data([0]),w=(x.enter().append(\"path\").attr(\"class\",\"domain\"),t.transition(x));g.append(\"line\"),g.append(\"text\");var k,M,T,S,A=g.select(\"line\"),L=v.select(\"line\"),C=m.select(\"text\").text(p),O=g.select(\"text\"),D=v.select(\"text\"),I=\"top\"===i||\"left\"===i?-1:1;if(\"bottom\"===i||\"top\"===i?(r=Ds,k=\"x\",T=\"y\",M=\"x2\",S=\"y2\",C.attr(\"dy\",I<0?\"0em\":\".71em\").style(\"text-anchor\",\"middle\"),w.attr(\"d\",\"M\"+b[0]+\",\"+I*o+\"V0H\"+b[1]+\"V\"+I*o)):(r=Is,k=\"y\",T=\"x\",M=\"y2\",S=\"x2\",C.attr(\"dy\",\".32em\").style(\"text-anchor\",I<0?\"end\":\"start\"),w.attr(\"d\",\"M\"+I*o+\",\"+b[0]+\"H0V\"+b[1]+\"H\"+I*o)),A.attr(S,I*a),O.attr(T,I*_),L.attr(M,0).attr(S,I*a),D.attr(k,0).attr(T,I*_),d.rangeBand){var P=d,R=P.rangeBand()/2;h=d=function(t){return P(t)+R}}else h.rangeBand?h=d:y.call(r,d,h);g.call(r,h,d),v.call(r,d,d)}))}return u.scale=function(t){return arguments.length?(n=t,u):n},u.orient=function(t){return arguments.length?(i=t in Os?t+\"\":Es,u):i},u.ticks=function(){return arguments.length?(l=r(arguments),u):l},u.tickValues=function(t){return arguments.length?(c=t,u):c},u.tickFormat=function(t){return arguments.length?(e=t,u):e},u.tickSize=function(t){var e=arguments.length;return e?(a=+t,o=+arguments[e-1],u):a},u.innerTickSize=function(t){return arguments.length?(a=+t,u):a},u.outerTickSize=function(t){return arguments.length?(o=+t,u):o},u.tickPadding=function(t){return arguments.length?(s=+t,u):s},u.tickSubdivide=function(){return arguments.length&&u},u};var Es=\"bottom\",Os={top:1,right:1,bottom:1,left:1};function Ds(t,e,n){t.attr(\"transform\",(function(t){var r=e(t);return\"translate(\"+(isFinite(r)?r:n(t))+\",0)\"}))}function Is(t,e,n){t.attr(\"transform\",(function(t){var r=e(t);return\"translate(0,\"+(isFinite(r)?r:n(t))+\")\"}))}t.svg.brush=function(){var e,n,r=N(d,\"brushstart\",\"brush\",\"brushend\"),i=null,a=null,s=[0,0],l=[0,0],c=!0,u=!0,h=Rs[0];function d(e){e.each((function(){var e=t.select(this).style(\"pointer-events\",\"all\").style(\"-webkit-tap-highlight-color\",\"rgba(0,0,0,0)\").on(\"mousedown.brush\",g).on(\"touchstart.brush\",g),n=e.selectAll(\".background\").data([0]);n.enter().append(\"rect\").attr(\"class\",\"background\").style(\"visibility\",\"hidden\").style(\"cursor\",\"crosshair\"),e.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\",\"extent\").style(\"cursor\",\"move\");var r=e.selectAll(\".resize\").data(h,E);r.exit().remove(),r.enter().append(\"g\").attr(\"class\",(function(t){return\"resize \"+t})).style(\"cursor\",(function(t){return Ps[t]})).append(\"rect\").attr(\"x\",(function(t){return/[ew]$/.test(t)?-3:null})).attr(\"y\",(function(t){return/^[ns]/.test(t)?-3:null})).attr(\"width\",6).attr(\"height\",6).style(\"visibility\",\"hidden\"),r.style(\"display\",d.empty()?\"none\":null);var o,s=t.transition(e),l=t.transition(n);i&&(o=vo(i),l.attr(\"x\",o[0]).attr(\"width\",o[1]-o[0]),p(s)),a&&(o=vo(a),l.attr(\"y\",o[0]).attr(\"height\",o[1]-o[0]),m(s)),f(s)}))}function f(t){t.selectAll(\".resize\").attr(\"transform\",(function(t){return\"translate(\"+s[+/e$/.test(t)]+\",\"+l[+/^s/.test(t)]+\")\"}))}function p(t){t.select(\".extent\").attr(\"x\",s[0]),t.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\",s[1]-s[0])}function m(t){t.select(\".extent\").attr(\"y\",l[0]),t.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\",l[1]-l[0])}function g(){var h,g,y=this,v=t.select(t.event.target),_=r.of(y,arguments),b=t.select(y),x=v.datum(),w=!/^(n|s)$/.test(x)&&i,k=!/^(e|w)$/.test(x)&&a,M=v.classed(\"extent\"),T=bt(y),S=t.mouse(y),A=t.select(o(y)).on(\"keydown.brush\",E).on(\"keyup.brush\",O);if(t.event.changedTouches?A.on(\"touchmove.brush\",D).on(\"touchend.brush\",P):A.on(\"mousemove.brush\",D).on(\"mouseup.brush\",P),b.interrupt().selectAll(\"*\").interrupt(),M)S[0]=s[0]-S[0],S[1]=l[0]-S[1];else if(x){var L=+/w$/.test(x),C=+/^n/.test(x);g=[s[1-L]-S[0],l[1-C]-S[1]],S[0]=s[L],S[1]=l[C]}else t.event.altKey&&(h=S.slice());function E(){32==t.event.keyCode&&(M||(h=null,S[0]-=s[1],S[1]-=l[1],M=2),j())}function O(){32==t.event.keyCode&&2==M&&(S[0]+=s[1],S[1]+=l[1],M=0,j())}function D(){var e=t.mouse(y),n=!1;g&&(e[0]+=g[0],e[1]+=g[1]),M||(t.event.altKey?(h||(h=[(s[0]+s[1])/2,(l[0]+l[1])/2]),S[0]=s[+(e[0]<h[0])],S[1]=l[+(e[1]<h[1])]):h=null),w&&I(e,i,0)&&(p(b),n=!0),k&&I(e,a,1)&&(m(b),n=!0),n&&(f(b),_({type:\"brush\",mode:M?\"move\":\"resize\"}))}function I(t,r,i){var a,o,d=vo(r),f=d[0],p=d[1],m=S[i],g=i?l:s,y=g[1]-g[0];if(M&&(f-=m,p-=y+m),a=(i?u:c)?Math.max(f,Math.min(p,t[i])):t[i],M?o=(a+=m)+y:(h&&(m=Math.max(f,Math.min(p,2*h[i]-a))),m<a?(o=a,a=m):o=m),g[0]!=a||g[1]!=o)return i?n=null:e=null,g[0]=a,g[1]=o,!0}function P(){D(),b.style(\"pointer-events\",\"all\").selectAll(\".resize\").style(\"display\",d.empty()?\"none\":null),t.select(\"body\").style(\"cursor\",null),A.on(\"mousemove.brush\",null).on(\"mouseup.brush\",null).on(\"touchmove.brush\",null).on(\"touchend.brush\",null).on(\"keydown.brush\",null).on(\"keyup.brush\",null),T(),_({type:\"brushend\"})}b.style(\"pointer-events\",\"none\").selectAll(\".resize\").style(\"display\",null),t.select(\"body\").style(\"cursor\",v.style(\"cursor\")),_({type:\"brushstart\"}),D()}return d.event=function(i){i.each((function(){var i=r.of(this,arguments),a={x:s,y:l,i:e,j:n},o=this.__chart__||a;this.__chart__=a,ws?t.select(this).transition().each(\"start.brush\",(function(){e=o.i,n=o.j,s=o.x,l=o.y,i({type:\"brushstart\"})})).tween(\"brush:brush\",(function(){var t=na(s,a.x),r=na(l,a.y);return e=n=null,function(e){s=a.x=t(e),l=a.y=r(e),i({type:\"brush\",mode:\"resize\"})}})).each(\"end.brush\",(function(){e=a.i,n=a.j,i({type:\"brush\",mode:\"resize\"}),i({type:\"brushend\"})})):(i({type:\"brushstart\"}),i({type:\"brush\",mode:\"resize\"}),i({type:\"brushend\"}))}))},d.x=function(t){return arguments.length?(h=Rs[!(i=t)<<1|!a],d):i},d.y=function(t){return arguments.length?(h=Rs[!i<<1|!(a=t)],d):a},d.clamp=function(t){return arguments.length?(i&&a?(c=!!t[0],u=!!t[1]):i?c=!!t:a&&(u=!!t),d):i&&a?[c,u]:i?c:a?u:null},d.extent=function(t){var r,o,c,u,h;return arguments.length?(i&&(r=t[0],o=t[1],a&&(r=r[0],o=o[0]),e=[r,o],i.invert&&(r=i(r),o=i(o)),o<r&&(h=r,r=o,o=h),r==s[0]&&o==s[1]||(s=[r,o])),a&&(c=t[0],u=t[1],i&&(c=c[1],u=u[1]),n=[c,u],a.invert&&(c=a(c),u=a(u)),u<c&&(h=c,c=u,u=h),c==l[0]&&u==l[1]||(l=[c,u])),d):(i&&(e?(r=e[0],o=e[1]):(r=s[0],o=s[1],i.invert&&(r=i.invert(r),o=i.invert(o)),o<r&&(h=r,r=o,o=h))),a&&(n?(c=n[0],u=n[1]):(c=l[0],u=l[1],a.invert&&(c=a.invert(c),u=a.invert(u)),u<c&&(h=c,c=u,u=h))),i&&a?[[r,c],[o,u]]:i?[r,o]:a&&[c,u])},d.clear=function(){return d.empty()||(s=[0,0],l=[0,0],e=n=null),d},d.empty=function(){return!!i&&s[0]==s[1]||!!a&&l[0]==l[1]},t.rebind(d,r,\"on\")};var Ps={n:\"ns-resize\",e:\"ew-resize\",s:\"ns-resize\",w:\"ew-resize\",nw:\"nwse-resize\",ne:\"nesw-resize\",se:\"nwse-resize\",sw:\"nesw-resize\"},Rs=[[\"n\",\"e\",\"s\",\"w\",\"nw\",\"ne\",\"se\",\"sw\"],[\"e\",\"w\"],[\"n\",\"s\"],[]],zs=Pe.format=un.timeFormat,js=zs.utc,Fs=js(\"%Y-%m-%dT%H:%M:%S.%LZ\");function Ns(t){return t.toISOString()}function Bs(e,n,r){function i(t){return e(t)}function a(e,r){var i=(e[1]-e[0])/r,a=t.bisect(Hs,i);return a==Hs.length?[n.year,So(e.map((function(t){return t/31536e6})),r)[2]]:a?n[i/Hs[a-1]<Hs[a]/i?a-1:a]:[Ws,So(e,r)[2]]}return i.invert=function(t){return Ys(e.invert(t))},i.domain=function(t){return arguments.length?(e.domain(t),i):e.domain().map(Ys)},i.nice=function(t,e){var n=i.domain(),r=yo(n),o=null==t?a(r,10):\"number\"==typeof t&&a(r,t);function s(n){return!isNaN(n)&&!t.range(n,Ys(+n+1),e).length}return o&&(t=o[0],e=o[1]),i.domain(bo(n,e>1?{floor:function(e){for(;s(e=t.floor(e));)e=Ys(e-1);return e},ceil:function(e){for(;s(e=t.ceil(e));)e=Ys(+e+1);return e}}:t))},i.ticks=function(t,e){var n=yo(i.domain()),r=null==t?a(n,10):\"number\"==typeof t?a(n,t):!t.range&&[{range:t},e];return r&&(t=r[0],e=r[1]),t.range(n[0],Ys(+n[1]+1),e<1?1:e)},i.tickFormat=function(){return r},i.copy=function(){return Bs(e.copy(),n,r)},Mo(i,e)}function Ys(t){return new Date(t)}zs.iso=Date.prototype.toISOString&&+new Date(\"2000-01-01T00:00:00.000Z\")?Ns:Fs,Ns.parse=function(t){var e=new Date(t);return isNaN(e)?null:e},Ns.toString=Fs.toString,Pe.second=Fe((function(t){return new Re(1e3*Math.floor(t/1e3))}),(function(t,e){t.setTime(t.getTime()+1e3*Math.floor(e))}),(function(t){return t.getSeconds()})),Pe.seconds=Pe.second.range,Pe.seconds.utc=Pe.second.utc.range,Pe.minute=Fe((function(t){return new Re(6e4*Math.floor(t/6e4))}),(function(t,e){t.setTime(t.getTime()+6e4*Math.floor(e))}),(function(t){return t.getMinutes()})),Pe.minutes=Pe.minute.range,Pe.minutes.utc=Pe.minute.utc.range,Pe.hour=Fe((function(t){var e=t.getTimezoneOffset()/60;return new Re(36e5*(Math.floor(t/36e5-e)+e))}),(function(t,e){t.setTime(t.getTime()+36e5*Math.floor(e))}),(function(t){return t.getHours()})),Pe.hours=Pe.hour.range,Pe.hours.utc=Pe.hour.utc.range,Pe.month=Fe((function(t){return(t=Pe.day(t)).setDate(1),t}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t){return t.getMonth()})),Pe.months=Pe.month.range,Pe.months.utc=Pe.month.utc.range;var Hs=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Vs=[[Pe.second,1],[Pe.second,5],[Pe.second,15],[Pe.second,30],[Pe.minute,1],[Pe.minute,5],[Pe.minute,15],[Pe.minute,30],[Pe.hour,1],[Pe.hour,3],[Pe.hour,6],[Pe.hour,12],[Pe.day,1],[Pe.day,2],[Pe.week,1],[Pe.month,1],[Pe.month,3],[Pe.year,1]],Us=zs.multi([[\".%L\",function(t){return t.getMilliseconds()}],[\":%S\",function(t){return t.getSeconds()}],[\"%I:%M\",function(t){return t.getMinutes()}],[\"%I %p\",function(t){return t.getHours()}],[\"%a %d\",function(t){return t.getDay()&&1!=t.getDate()}],[\"%b %d\",function(t){return 1!=t.getDate()}],[\"%B\",function(t){return t.getMonth()}],[\"%Y\",Zn]]),Ws={range:function(e,n,r){return t.range(Math.ceil(e/r)*r,+n,r).map(Ys)},floor:E,ceil:E};Vs.year=Pe.year,Pe.scale=function(){return Bs(t.scale.linear(),Vs,Us)};var qs=Vs.map((function(t){return[t[0].utc,t[1]]})),Gs=js.multi([[\".%L\",function(t){return t.getUTCMilliseconds()}],[\":%S\",function(t){return t.getUTCSeconds()}],[\"%I:%M\",function(t){return t.getUTCMinutes()}],[\"%I %p\",function(t){return t.getUTCHours()}],[\"%a %d\",function(t){return t.getUTCDay()&&1!=t.getUTCDate()}],[\"%b %d\",function(t){return 1!=t.getUTCDate()}],[\"%B\",function(t){return t.getUTCMonth()}],[\"%Y\",Zn]]);function Xs(t){return JSON.parse(t.responseText)}function Zs(t){var e=i.createRange();return e.selectNode(i.body),e.createContextualFragment(t.responseText)}qs.year=Pe.year.utc,Pe.scale.utc=function(){return Bs(t.scale.linear(),qs,Gs)},t.text=ye((function(t){return t.responseText})),t.json=function(t,e){return ve(t,\"application/json\",Xs,e)},t.html=function(t,e){return ve(t,\"text/html\",Zs,e)},t.xml=ye((function(t){return t.responseXML})),\"object\"==typeof e&&e.exports?e.exports=t:this.d3=t}()},{}],170:[function(t,e,n){e.exports=function(){for(var t=0;t<arguments.length;t++)if(void 0!==arguments[t])return arguments[t]}},{}],171:[function(t,e,n){\"use strict\";var r=t(\"incremental-convex-hull\"),i=t(\"uniq\");function a(t,e){this.point=t,this.index=e}function o(t,e){for(var n=t.point,r=e.point,i=n.length,a=0;a<i;++a){var o=r[a]-n[a];if(o)return o}return 0}e.exports=function(t,e){var n=t.length;if(0===n)return[];var s=t[0].length;if(s<1)return[];if(1===s)return function(t,e,n){if(1===t)return n?[[-1,0]]:[];var r=e.map((function(t,e){return[t[0],e]}));r.sort((function(t,e){return t[0]-e[0]}));for(var i=new Array(t-1),a=1;a<t;++a)i[a-1]=[r[a-1][1],r[a][1]];return n&&i.push([-1,i[0][1]],[i[t-1][1],-1]),i}(n,t,e);for(var l=new Array(n),c=1,u=0;u<n;++u){for(var h=t[u],d=new Array(s+1),f=0,p=0;p<s;++p){var m=h[p];d[p]=m,f+=m*m}d[s]=f,l[u]=new a(d,u),c=Math.max(f,c)}i(l,o),n=l.length;var g=new Array(n+s+1),y=new Array(n+s+1),v=(s+1)*(s+1)*c,_=new Array(s+1);for(u=0;u<=s;++u)_[u]=0;for(_[s]=v,g[0]=_.slice(),y[0]=-1,u=0;u<=s;++u)(d=_.slice())[u]=1,g[u+1]=d,y[u+1]=-1;for(u=0;u<n;++u)g[u+s+1]=(x=l[u]).point,y[u+s+1]=x.index;var b=r(g,!1);if(b=b.filter(e?function(t){for(var e=0,n=0;n<=s;++n){var r=y[t[n]];if(r<0&&++e>=2)return!1;t[n]=r}return!0}:function(t){for(var e=0;e<=s;++e){var n=y[t[e]];if(n<0)return!1;t[e]=n}return!0}),1&s)for(u=0;u<b.length;++u){var x;d=(x=b[u])[0],x[0]=x[1],x[1]=d}return b}},{\"incremental-convex-hull\":459,uniq:597}],172:[function(t,e,n){\"use strict\";e.exports=a;var r=(a.canvas=document.createElement(\"canvas\")).getContext(\"2d\"),i=o([32,126]);function a(t,e){Array.isArray(t)&&(t=t.join(\", \"));var n,a={},s=16,l=.05;e&&(2===e.length&&\"number\"==typeof e[0]?n=o(e):Array.isArray(e)?n=e:(e.o?n=o(e.o):e.pairs&&(n=e.pairs),e.fontSize&&(s=e.fontSize),null!=e.threshold&&(l=e.threshold))),n||(n=i),r.font=s+\"px \"+t;for(var c=0;c<n.length;c++){var u=n[c],h=r.measureText(u[0]).width+r.measureText(u[1]).width,d=r.measureText(u).width;Math.abs(h-d)>s*l&&(a[u]=(d-h)/s*1e3)}return a}function o(t){for(var e=[],n=t[0];n<=t[1];n++)for(var r=String.fromCharCode(n),i=t[0];i<t[1];i++){var a=String.fromCharCode(i);e.push(r+a)}return e}a.createPairs=o,a.ascii=i},{}],173:[function(t,e,n){(function(t){(function(){var n=!1;if(\"undefined\"!=typeof Float64Array){var r=new Float64Array(1),i=new Uint32Array(r.buffer);r[0]=1,n=!0,1072693248===i[1]?(e.exports=function(t){return r[0]=t,[i[0],i[1]]},e.exports.pack=function(t,e){return i[0]=t,i[1]=e,r[0]},e.exports.lo=function(t){return r[0]=t,i[0]},e.exports.hi=function(t){return r[0]=t,i[1]}):1072693248===i[0]?(e.exports=function(t){return r[0]=t,[i[1],i[0]]},e.exports.pack=function(t,e){return i[1]=t,i[0]=e,r[0]},e.exports.lo=function(t){return r[0]=t,i[1]},e.exports.hi=function(t){return r[0]=t,i[0]}):n=!1}if(!n){var a=new t(8);e.exports=function(t){return a.writeDoubleLE(t,0,!0),[a.readUInt32LE(0,!0),a.readUInt32LE(4,!0)]},e.exports.pack=function(t,e){return a.writeUInt32LE(t,0,!0),a.writeUInt32LE(e,4,!0),a.readDoubleLE(0,!0)},e.exports.lo=function(t){return a.writeDoubleLE(t,0,!0),a.readUInt32LE(0,!0)},e.exports.hi=function(t){return a.writeDoubleLE(t,0,!0),a.readUInt32LE(4,!0)}}e.exports.sign=function(t){return e.exports.hi(t)>>>31},e.exports.exponent=function(t){return(e.exports.hi(t)<<1>>>21)-1023},e.exports.fraction=function(t){var n=e.exports.lo(t),r=e.exports.hi(t),i=1048575&r;return 2146435072&r&&(i+=1<<20),[n,i]},e.exports.denormalized=function(t){return!(2146435072&e.exports.hi(t))}}).call(this)}).call(this,t(\"buffer\").Buffer)},{buffer:111}],174:[function(t,e,n){var r=t(\"abs-svg-path\"),i=t(\"normalize-svg-path\"),a={M:\"moveTo\",C:\"bezierCurveTo\"};e.exports=function(t,e){t.beginPath(),i(r(e)).forEach((function(e){var n=e[0],r=e.slice(1);t[a[n]].apply(t,r)})),t.closePath()}},{\"abs-svg-path\":65,\"normalize-svg-path\":497}],175:[function(t,e,n){e.exports=function(t){switch(t){case\"int8\":return Int8Array;case\"int16\":return Int16Array;case\"int32\":return Int32Array;case\"uint8\":return Uint8Array;case\"uint16\":return Uint16Array;case\"uint32\":return Uint32Array;case\"float32\":return Float32Array;case\"float64\":return Float64Array;case\"array\":return Array;case\"uint8_clamped\":return Uint8ClampedArray}}},{}],176:[function(t,e,n){\"use strict\";e.exports=function(t,e){switch(void 0===e&&(e=0),typeof t){case\"number\":if(t>0)return function(t,e){var n,r;for(n=new Array(t),r=0;r<t;++r)n[r]=e;return n}(0|t,e);break;case\"object\":if(\"number\"==typeof t.length)return function t(e,n,r){var i=0|e[r];if(i<=0)return[];var a,o=new Array(i);if(r===e.length-1)for(a=0;a<i;++a)o[a]=n;else for(a=0;a<i;++a)o[a]=t(e,n,r+1);return o}(t,e,0)}return[]}},{}],177:[function(t,e,n){\"use strict\";function r(t,e,n){n=n||2;var r,s,l,c,u,f,p,g=e&&e.length,y=g?e[0]*n:t.length,v=i(t,0,y,n,!0),_=[];if(!v||v.next===v.prev)return _;if(g&&(v=function(t,e,n,r){var o,s,l,c=[];for(o=0,s=e.length;o<s;o++)(l=i(t,e[o]*r,o<s-1?e[o+1]*r:t.length,r,!1))===l.next&&(l.steiner=!0),c.push(m(l));for(c.sort(h),o=0;o<c.length;o++)d(c[o],n),n=a(n,n.next);return n}(t,e,v,n)),t.length>80*n){r=l=t[0],s=c=t[1];for(var b=n;b<y;b+=n)(u=t[b])<r&&(r=u),(f=t[b+1])<s&&(s=f),u>l&&(l=u),f>c&&(c=f);p=0!==(p=Math.max(l-r,c-s))?1/p:0}return o(v,_,n,r,s,p),_}function i(t,e,n,r,i){var a,o;if(i===L(t,e,n,r)>0)for(a=e;a<n;a+=r)o=T(a,t[a],t[a+1],o);else for(a=n-r;a>=e;a-=r)o=T(a,t[a],t[a+1],o);return o&&_(o,o.next)&&(S(o),o=o.next),o}function a(t,e){if(!t)return t;e||(e=t);var n,r=t;do{if(n=!1,r.steiner||!_(r,r.next)&&0!==v(r.prev,r,r.next))r=r.next;else{if(S(r),(r=e=r.prev)===r.next)break;n=!0}}while(n||r!==e);return e}function o(t,e,n,r,i,h,d){if(t){!d&&h&&function(t,e,n,r){var i=t;do{null===i.z&&(i.z=p(i.x,i.y,e,n,r)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,function(t){var e,n,r,i,a,o,s,l,c=1;do{for(n=t,t=null,a=null,o=0;n;){for(o++,r=n,s=0,e=0;e<c&&(s++,r=r.nextZ);e++);for(l=c;s>0||l>0&&r;)0!==s&&(0===l||!r||n.z<=r.z)?(i=n,n=n.nextZ,s--):(i=r,r=r.nextZ,l--),a?a.nextZ=i:t=i,i.prevZ=a,a=i;n=r}a.nextZ=null,c*=2}while(o>1)}(i)}(t,r,i,h);for(var f,m,g=t;t.prev!==t.next;)if(f=t.prev,m=t.next,h?l(t,r,i,h):s(t))e.push(f.i/n),e.push(t.i/n),e.push(m.i/n),S(t),t=m.next,g=m.next;else if((t=m)===g){d?1===d?o(t=c(a(t),e,n),e,n,r,i,h,2):2===d&&u(t,e,n,r,i,h):o(a(t),e,n,r,i,h,1);break}}}function s(t){var e=t.prev,n=t,r=t.next;if(v(e,n,r)>=0)return!1;for(var i=t.next.next;i!==t.prev;){if(g(e.x,e.y,n.x,n.y,r.x,r.y,i.x,i.y)&&v(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function l(t,e,n,r){var i=t.prev,a=t,o=t.next;if(v(i,a,o)>=0)return!1;for(var s=i.x>a.x?i.x>o.x?i.x:o.x:a.x>o.x?a.x:o.x,l=i.y>a.y?i.y>o.y?i.y:o.y:a.y>o.y?a.y:o.y,c=p(i.x<a.x?i.x<o.x?i.x:o.x:a.x<o.x?a.x:o.x,i.y<a.y?i.y<o.y?i.y:o.y:a.y<o.y?a.y:o.y,e,n,r),u=p(s,l,e,n,r),h=t.prevZ,d=t.nextZ;h&&h.z>=c&&d&&d.z<=u;){if(h!==t.prev&&h!==t.next&&g(i.x,i.y,a.x,a.y,o.x,o.y,h.x,h.y)&&v(h.prev,h,h.next)>=0)return!1;if(h=h.prevZ,d!==t.prev&&d!==t.next&&g(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)&&v(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(;h&&h.z>=c;){if(h!==t.prev&&h!==t.next&&g(i.x,i.y,a.x,a.y,o.x,o.y,h.x,h.y)&&v(h.prev,h,h.next)>=0)return!1;h=h.prevZ}for(;d&&d.z<=u;){if(d!==t.prev&&d!==t.next&&g(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)&&v(d.prev,d,d.next)>=0)return!1;d=d.nextZ}return!0}function c(t,e,n){var r=t;do{var i=r.prev,o=r.next.next;!_(i,o)&&b(i,r,r.next,o)&&k(i,o)&&k(o,i)&&(e.push(i.i/n),e.push(r.i/n),e.push(o.i/n),S(r),S(r.next),r=t=o),r=r.next}while(r!==t);return a(r)}function u(t,e,n,r,i,s){var l=t;do{for(var c=l.next.next;c!==l.prev;){if(l.i!==c.i&&y(l,c)){var u=M(l,c);return l=a(l,l.next),u=a(u,u.next),o(l,e,n,r,i,s),void o(u,e,n,r,i,s)}c=c.next}l=l.next}while(l!==t)}function h(t,e){return t.x-e.x}function d(t,e){if(e=function(t,e){var n,r=e,i=t.x,a=t.y,o=-1/0;do{if(a<=r.y&&a>=r.next.y&&r.next.y!==r.y){var s=r.x+(a-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(s<=i&&s>o){if(o=s,s===i){if(a===r.y)return r;if(a===r.next.y)return r.next}n=r.x<r.next.x?r:r.next}}r=r.next}while(r!==e);if(!n)return null;if(i===o)return n;var l,c=n,u=n.x,h=n.y,d=1/0;r=n;do{i>=r.x&&r.x>=u&&i!==r.x&&g(a<h?i:o,a,u,h,a<h?o:i,a,r.x,r.y)&&(l=Math.abs(a-r.y)/(i-r.x),k(r,t)&&(l<d||l===d&&(r.x>n.x||r.x===n.x&&f(n,r)))&&(n=r,d=l)),r=r.next}while(r!==c);return n}(t,e)){var n=M(e,t);a(e,e.next),a(n,n.next)}}function f(t,e){return v(t.prev,t,e.prev)<0&&v(e.next,t,t.next)<0}function p(t,e,n,r,i){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*i)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-r)*i)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function m(t){var e=t,n=t;do{(e.x<n.x||e.x===n.x&&e.y<n.y)&&(n=e),e=e.next}while(e!==t);return n}function g(t,e,n,r,i,a,o,s){return(i-o)*(e-s)-(t-o)*(a-s)>=0&&(t-o)*(r-s)-(n-o)*(e-s)>=0&&(n-o)*(a-s)-(i-o)*(r-s)>=0}function y(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&b(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(k(t,e)&&k(e,t)&&function(t,e){var n=t,r=!1,i=(t.x+e.x)/2,a=(t.y+e.y)/2;do{n.y>a!=n.next.y>a&&n.next.y!==n.y&&i<(n.next.x-n.x)*(a-n.y)/(n.next.y-n.y)+n.x&&(r=!r),n=n.next}while(n!==t);return r}(t,e)&&(v(t.prev,t,e.prev)||v(t,e.prev,e))||_(t,e)&&v(t.prev,t,t.next)>0&&v(e.prev,e,e.next)>0)}function v(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function _(t,e){return t.x===e.x&&t.y===e.y}function b(t,e,n,r){var i=w(v(t,e,n)),a=w(v(t,e,r)),o=w(v(n,r,t)),s=w(v(n,r,e));return i!==a&&o!==s||!(0!==i||!x(t,n,e))||!(0!==a||!x(t,r,e))||!(0!==o||!x(n,t,r))||!(0!==s||!x(n,e,r))}function x(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function w(t){return t>0?1:t<0?-1:0}function k(t,e){return v(t.prev,t,t.next)<0?v(t,e,t.next)>=0&&v(t,t.prev,e)>=0:v(t,e,t.prev)<0||v(t,t.next,e)<0}function M(t,e){var n=new A(t.i,t.x,t.y),r=new A(e.i,e.x,e.y),i=t.next,a=e.prev;return t.next=e,e.prev=t,n.next=i,i.prev=n,r.next=n,n.prev=r,a.next=r,r.prev=a,r}function T(t,e,n,r){var i=new A(t,e,n);return r?(i.next=r.next,i.prev=r,r.next.prev=i,r.next=i):(i.prev=i,i.next=i),i}function S(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function A(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function L(t,e,n,r){for(var i=0,a=e,o=n-r;a<n;a+=r)i+=(t[o]-t[a])*(t[a+1]+t[o+1]),o=a;return i}e.exports=r,e.exports.default=r,r.deviation=function(t,e,n,r){var i=e&&e.length,a=Math.abs(L(t,0,i?e[0]*n:t.length,n));if(i)for(var o=0,s=e.length;o<s;o++)a-=Math.abs(L(t,e[o]*n,o<s-1?e[o+1]*n:t.length,n));var l=0;for(o=0;o<r.length;o+=3){var c=r[o]*n,u=r[o+1]*n,h=r[o+2]*n;l+=Math.abs((t[c]-t[h])*(t[u+1]-t[c+1])-(t[c]-t[u])*(t[h+1]-t[c+1]))}return 0===a&&0===l?0:Math.abs((l-a)/a)},r.flatten=function(t){for(var e=t[0][0].length,n={vertices:[],holes:[],dimensions:e},r=0,i=0;i<t.length;i++){for(var a=0;a<t[i].length;a++)for(var o=0;o<e;o++)n.vertices.push(t[i][a][o]);i>0&&n.holes.push(r+=t[i-1].length)}return n}},{}],178:[function(t,e,n){\"use strict\";e.exports=function(t,e){var n=t.length;if(\"number\"!=typeof e){e=0;for(var i=0;i<n;++i){var a=t[i];e=Math.max(e,a[0],a[1])}e=1+(0|e)}e|=0;var o=new Array(e);for(i=0;i<e;++i)o[i]=[];for(i=0;i<n;++i)o[(a=t[i])[0]].push(a[1]),o[a[1]].push(a[0]);for(var s=0;s<e;++s)r(o[s],(function(t,e){return t-e}));return o};var r=t(\"uniq\")},{uniq:597}],179:[function(t,e,n){var r=t(\"strongly-connected-components\");e.exports=function(t,e){var n,i=[],a=[],o=[],s={},l=[];function c(t){var e,r,i=!1;for(a.push(t),o[t]=!0,e=0;e<l[t].length;e++)(r=l[t][e])===n?(u(n,a),i=!0):o[r]||(i=c(r));if(i)!function t(e){o[e]=!1,s.hasOwnProperty(e)&&Object.keys(s[e]).forEach((function(n){delete s[e][n],o[n]&&t(n)}))}(t);else for(e=0;e<l[t].length;e++){var h=s[r=l[t][e]];h||(s[r]=h={}),h[r]=!0}return a.pop(),i}function u(t,n){var r=[].concat(n).concat(t);e?e(c):i.push(r)}function h(e){!function(e){for(var n=0;n<t.length;n++)n<e&&(t[n]=[]),t[n]=t[n].filter((function(t){return t>=e}))}(e);for(var n,i=r(t).components.filter((function(t){return t.length>1})),a=1/0,o=0;o<i.length;o++)for(var s=0;s<i[o].length;s++)i[o][s]<a&&(a=i[o][s],n=o);var l=i[n];return!!l&&{leastVertex:a,adjList:t.map((function(t,e){return-1===l.indexOf(e)?[]:t.filter((function(t){return-1!==l.indexOf(t)}))}))}}n=0;for(var d=t.length;n<d;){var f=h(n);if(n=f.leastVertex,l=f.adjList){for(var p=0;p<l.length;p++)for(var m=0;m<l[p].length;m++){var g=l[p][m];o[+g]=!1,s[g]={}}c(n),n+=1}else n=d}return e?void 0:i}},{\"strongly-connected-components\":569}],180:[function(t,e,n){\"use strict\";var r=t(\"../../object/valid-value\");e.exports=function(){return r(this).length=0,this}},{\"../../object/valid-value\":211}],181:[function(t,e,n){\"use strict\";e.exports=t(\"./is-implemented\")()?Array.from:t(\"./shim\")},{\"./is-implemented\":182,\"./shim\":183}],182:[function(t,e,n){\"use strict\";e.exports=function(){var t,e,n=Array.from;return\"function\"==typeof n&&(e=n(t=[\"raz\",\"dwa\"]),Boolean(e&&e!==t&&\"dwa\"===e[1]))}},{}],183:[function(t,e,n){\"use strict\";var r=t(\"es6-symbol\").iterator,i=t(\"../../function/is-arguments\"),a=t(\"../../function/is-function\"),o=t(\"../../number/to-pos-integer\"),s=t(\"../../object/valid-callable\"),l=t(\"../../object/valid-value\"),c=t(\"../../object/is-value\"),u=t(\"../../string/is-string\"),h=Array.isArray,d=Function.prototype.call,f={configurable:!0,enumerable:!0,writable:!0,value:null},p=Object.defineProperty;e.exports=function(t){var e,n,m,g,y,v,_,b,x,w,k=arguments[1],M=arguments[2];if(t=Object(l(t)),c(k)&&s(k),this&&this!==Array&&a(this))e=this;else{if(!k){if(i(t))return 1!==(y=t.length)?Array.apply(null,t):((g=new Array(1))[0]=t[0],g);if(h(t)){for(g=new Array(y=t.length),n=0;n<y;++n)g[n]=t[n];return g}}g=[]}if(!h(t))if(void 0!==(x=t[r])){for(_=s(x).call(t),e&&(g=new e),b=_.next(),n=0;!b.done;)w=k?d.call(k,M,b.value,n):b.value,e?(f.value=w,p(g,n,f)):g[n]=w,b=_.next(),++n;y=n}else if(u(t)){for(y=t.length,e&&(g=new e),n=0,m=0;n<y;++n)w=t[n],n+1<y&&(v=w.charCodeAt(0))>=55296&&v<=56319&&(w+=t[++n]),w=k?d.call(k,M,w,m):w,e?(f.value=w,p(g,m,f)):g[m]=w,++m;y=m}if(void 0===y)for(y=o(t.length),e&&(g=new e(y)),n=0;n<y;++n)w=k?d.call(k,M,t[n],n):t[n],e?(f.value=w,p(g,n,f)):g[n]=w;return e&&(f.value=null,g.length=y),g}},{\"../../function/is-arguments\":184,\"../../function/is-function\":185,\"../../number/to-pos-integer\":191,\"../../object/is-value\":200,\"../../object/valid-callable\":209,\"../../object/valid-value\":211,\"../../string/is-string\":215,\"es6-symbol\":225}],184:[function(t,e,n){\"use strict\";var r=Object.prototype.toString,i=r.call(function(){return arguments}());e.exports=function(t){return r.call(t)===i}},{}],185:[function(t,e,n){\"use strict\";var r=Object.prototype.toString,i=RegExp.prototype.test.bind(/^[object [A-Za-z0-9]*Function]$/);e.exports=function(t){return\"function\"==typeof t&&i(r.call(t))}},{}],186:[function(t,e,n){\"use strict\";e.exports=function(){}},{}],187:[function(t,e,n){\"use strict\";e.exports=t(\"./is-implemented\")()?Math.sign:t(\"./shim\")},{\"./is-implemented\":188,\"./shim\":189}],188:[function(t,e,n){\"use strict\";e.exports=function(){var t=Math.sign;return\"function\"==typeof t&&1===t(10)&&-1===t(-20)}},{}],189:[function(t,e,n){\"use strict\";e.exports=function(t){return t=Number(t),isNaN(t)||0===t?t:t>0?1:-1}},{}],190:[function(t,e,n){\"use strict\";var r=t(\"../math/sign\"),i=Math.abs,a=Math.floor;e.exports=function(t){return isNaN(t)?0:0!==(t=Number(t))&&isFinite(t)?r(t)*a(i(t)):t}},{\"../math/sign\":187}],191:[function(t,e,n){\"use strict\";var r=t(\"./to-integer\"),i=Math.max;e.exports=function(t){return i(0,r(t))}},{\"./to-integer\":190}],192:[function(t,e,n){\"use strict\";var r=t(\"./valid-callable\"),i=t(\"./valid-value\"),a=Function.prototype.bind,o=Function.prototype.call,s=Object.keys,l=Object.prototype.propertyIsEnumerable;e.exports=function(t,e){return function(n,c){var u,h=arguments[2],d=arguments[3];return n=Object(i(n)),r(c),u=s(n),d&&u.sort(\"function\"==typeof d?a.call(d,n):void 0),\"function\"!=typeof t&&(t=u[t]),o.call(t,u,(function(t,r){return l.call(n,t)?o.call(c,h,n[t],t,n,r):e}))}}},{\"./valid-callable\":209,\"./valid-value\":211}],193:[function(t,e,n){\"use strict\";e.exports=t(\"./is-implemented\")()?Object.assign:t(\"./shim\")},{\"./is-implemented\":194,\"./shim\":195}],194:[function(t,e,n){\"use strict\";e.exports=function(){var t,e=Object.assign;return\"function\"==typeof e&&(e(t={foo:\"raz\"},{bar:\"dwa\"},{trzy:\"trzy\"}),t.foo+t.bar+t.trzy===\"razdwatrzy\")}},{}],195:[function(t,e,n){\"use strict\";var r=t(\"../keys\"),i=t(\"../valid-value\"),a=Math.max;e.exports=function(t,e){var n,o,s,l=a(arguments.length,2);for(t=Object(i(t)),s=function(r){try{t[r]=e[r]}catch(i){n||(n=i)}},o=1;o<l;++o)r(e=arguments[o]).forEach(s);if(void 0!==n)throw n;return t}},{\"../keys\":201,\"../valid-value\":211}],196:[function(t,e,n){\"use strict\";var r=t(\"../array/from\"),i=t(\"./assign\"),a=t(\"./valid-value\");e.exports=function(t){var e=Object(a(t)),n=arguments[1],o=Object(arguments[2]);if(e!==t&&!n)return e;var s={};return n?r(n,(function(e){(o.ensure||e in t)&&(s[e]=t[e])})):i(s,t),s}},{\"../array/from\":181,\"./assign\":193,\"./valid-value\":211}],197:[function(t,e,n){\"use strict\";var r,i,a,o,s=Object.create;t(\"./set-prototype-of/is-implemented\")()||(r=t(\"./set-prototype-of/shim\")),e.exports=r?1!==r.level?s:(i={},a={},o={configurable:!1,enumerable:!1,writable:!0,value:void 0},Object.getOwnPropertyNames(Object.prototype).forEach((function(t){a[t]=\"__proto__\"!==t?o:{configurable:!0,enumerable:!1,writable:!0,value:void 0}})),Object.defineProperties(i,a),Object.defineProperty(r,\"nullPolyfill\",{configurable:!1,enumerable:!1,writable:!1,value:i}),function(t,e){return s(null===t?i:t,e)}):s},{\"./set-prototype-of/is-implemented\":207,\"./set-prototype-of/shim\":208}],198:[function(t,e,n){\"use strict\";e.exports=t(\"./_iterate\")(\"forEach\")},{\"./_iterate\":192}],199:[function(t,e,n){\"use strict\";var r=t(\"./is-value\"),i={function:!0,object:!0};e.exports=function(t){return r(t)&&i[typeof t]||!1}},{\"./is-value\":200}],200:[function(t,e,n){\"use strict\";var r=t(\"../function/noop\")();e.exports=function(t){return t!==r&&null!==t}},{\"../function/noop\":186}],201:[function(t,e,n){\"use strict\";e.exports=t(\"./is-implemented\")()?Object.keys:t(\"./shim\")},{\"./is-implemented\":202,\"./shim\":203}],202:[function(t,e,n){\"use strict\";e.exports=function(){try{return Object.keys(\"primitive\"),!0}catch(t){return!1}}},{}],203:[function(t,e,n){\"use strict\";var r=t(\"../is-value\"),i=Object.keys;e.exports=function(t){return i(r(t)?Object(t):t)}},{\"../is-value\":200}],204:[function(t,e,n){\"use strict\";var r=t(\"./valid-callable\"),i=t(\"./for-each\"),a=Function.prototype.call;e.exports=function(t,e){var n={},o=arguments[2];return r(e),i(t,(function(t,r,i,s){n[r]=a.call(e,o,t,r,i,s)})),n}},{\"./for-each\":198,\"./valid-callable\":209}],205:[function(t,e,n){\"use strict\";var r=t(\"./is-value\"),i=Array.prototype.forEach,a=Object.create,o=function(t,e){var n;for(n in t)e[n]=t[n]};e.exports=function(t){var e=a(null);return i.call(arguments,(function(t){r(t)&&o(Object(t),e)})),e}},{\"./is-value\":200}],206:[function(t,e,n){\"use strict\";e.exports=t(\"./is-implemented\")()?Object.setPrototypeOf:t(\"./shim\")},{\"./is-implemented\":207,\"./shim\":208}],207:[function(t,e,n){\"use strict\";var r=Object.create,i=Object.getPrototypeOf,a={};e.exports=function(){var t=Object.setPrototypeOf;return\"function\"==typeof t&&i(t((arguments[0]||r)(null),a))===a}},{}],208:[function(t,e,n){\"use strict\";var r,i,a,o,s=t(\"../is-object\"),l=t(\"../valid-value\"),c=Object.prototype.isPrototypeOf,u=Object.defineProperty,h={configurable:!0,enumerable:!1,writable:!0,value:void 0};r=function(t,e){if(l(t),null===e||s(e))return t;throw new TypeError(\"Prototype must be null or an object\")},e.exports=(i=function(){var t,e=Object.create(null),n={},r=Object.getOwnPropertyDescriptor(Object.prototype,\"__proto__\");if(r){try{(t=r.set).call(e,n)}catch(i){}if(Object.getPrototypeOf(e)===n)return{set:t,level:2}}return e.__proto__=n,Object.getPrototypeOf(e)===n?{level:2}:((e={}).__proto__=n,Object.getPrototypeOf(e)===n&&{level:1})}())?(2===i.level?i.set?(o=i.set,a=function(t,e){return o.call(r(t,e),e),t}):a=function(t,e){return r(t,e).__proto__=e,t}:a=function t(e,n){var i;return r(e,n),(i=c.call(t.nullPolyfill,e))&&delete t.nullPolyfill.__proto__,null===n&&(n=t.nullPolyfill),e.__proto__=n,i&&u(t.nullPolyfill,\"__proto__\",h),e},Object.defineProperty(a,\"level\",{configurable:!1,enumerable:!1,writable:!1,value:i.level})):null,t(\"../create\")},{\"../create\":197,\"../is-object\":199,\"../valid-value\":211}],209:[function(t,e,n){\"use strict\";e.exports=function(t){if(\"function\"!=typeof t)throw new TypeError(t+\" is not a function\");return t}},{}],210:[function(t,e,n){\"use strict\";var r=t(\"./is-object\");e.exports=function(t){if(!r(t))throw new TypeError(t+\" is not an Object\");return t}},{\"./is-object\":199}],211:[function(t,e,n){\"use strict\";var r=t(\"./is-value\");e.exports=function(t){if(!r(t))throw new TypeError(\"Cannot use null or undefined\");return t}},{\"./is-value\":200}],212:[function(t,e,n){\"use strict\";e.exports=t(\"./is-implemented\")()?String.prototype.contains:t(\"./shim\")},{\"./is-implemented\":213,\"./shim\":214}],213:[function(t,e,n){\"use strict\";var r=\"razdwatrzy\";e.exports=function(){return\"function\"==typeof r.contains&&!0===r.contains(\"dwa\")&&!1===r.contains(\"foo\")}},{}],214:[function(t,e,n){\"use strict\";var r=String.prototype.indexOf;e.exports=function(t){return r.call(this,t,arguments[1])>-1}},{}],215:[function(t,e,n){\"use strict\";var r=Object.prototype.toString,i=r.call(\"\");e.exports=function(t){return\"string\"==typeof t||t&&\"object\"==typeof t&&(t instanceof String||r.call(t)===i)||!1}},{}],216:[function(t,e,n){\"use strict\";var r=Object.create(null),i=Math.random;e.exports=function(){var t;do{t=i().toString(36).slice(2)}while(r[t]);return t}},{}],217:[function(t,e,n){\"use strict\";var r,i=t(\"es5-ext/object/set-prototype-of\"),a=t(\"es5-ext/string/#/contains\"),o=t(\"d\"),s=t(\"es6-symbol\"),l=t(\"./\"),c=Object.defineProperty;r=e.exports=function(t,e){if(!(this instanceof r))throw new TypeError(\"Constructor requires 'new'\");l.call(this,t),e=e?a.call(e,\"key+value\")?\"key+value\":a.call(e,\"key\")?\"key\":\"value\":\"value\",c(this,\"__kind__\",o(\"\",e))},i&&i(r,l),delete r.prototype.constructor,r.prototype=Object.create(l.prototype,{_resolve:o((function(t){return\"value\"===this.__kind__?this.__list__[t]:\"key+value\"===this.__kind__?[t,this.__list__[t]]:t}))}),c(r.prototype,s.toStringTag,o(\"c\",\"Array Iterator\"))},{\"./\":220,d:155,\"es5-ext/object/set-prototype-of\":206,\"es5-ext/string/#/contains\":212,\"es6-symbol\":225}],218:[function(t,e,n){\"use strict\";var r=t(\"es5-ext/function/is-arguments\"),i=t(\"es5-ext/object/valid-callable\"),a=t(\"es5-ext/string/is-string\"),o=t(\"./get\"),s=Array.isArray,l=Function.prototype.call,c=Array.prototype.some;e.exports=function(t,e){var n,u,h,d,f,p,m,g,y=arguments[2];if(s(t)||r(t)?n=\"array\":a(t)?n=\"string\":t=o(t),i(e),h=function(){d=!0},\"array\"!==n)if(\"string\"!==n)for(u=t.next();!u.done;){if(l.call(e,y,u.value,h),d)return;u=t.next()}else for(p=t.length,f=0;f<p&&(m=t[f],f+1<p&&(g=m.charCodeAt(0))>=55296&&g<=56319&&(m+=t[++f]),l.call(e,y,m,h),!d);++f);else c.call(t,(function(t){return l.call(e,y,t,h),d}))}},{\"./get\":219,\"es5-ext/function/is-arguments\":184,\"es5-ext/object/valid-callable\":209,\"es5-ext/string/is-string\":215}],219:[function(t,e,n){\"use strict\";var r=t(\"es5-ext/function/is-arguments\"),i=t(\"es5-ext/string/is-string\"),a=t(\"./array\"),o=t(\"./string\"),s=t(\"./valid-iterable\"),l=t(\"es6-symbol\").iterator;e.exports=function(t){return\"function\"==typeof s(t)[l]?t[l]():r(t)?new a(t):i(t)?new o(t):new a(t)}},{\"./array\":217,\"./string\":222,\"./valid-iterable\":223,\"es5-ext/function/is-arguments\":184,\"es5-ext/string/is-string\":215,\"es6-symbol\":225}],220:[function(t,e,n){\"use strict\";var r,i=t(\"es5-ext/array/#/clear\"),a=t(\"es5-ext/object/assign\"),o=t(\"es5-ext/object/valid-callable\"),s=t(\"es5-ext/object/valid-value\"),l=t(\"d\"),c=t(\"d/auto-bind\"),u=t(\"es6-symbol\"),h=Object.defineProperty,d=Object.defineProperties;e.exports=r=function(t,e){if(!(this instanceof r))throw new TypeError(\"Constructor requires 'new'\");d(this,{__list__:l(\"w\",s(t)),__context__:l(\"w\",e),__nextIndex__:l(\"w\",0)}),e&&(o(e.on),e.on(\"_add\",this._onAdd),e.on(\"_delete\",this._onDelete),e.on(\"_clear\",this._onClear))},delete r.prototype.constructor,d(r.prototype,a({_next:l((function(){var t;if(this.__list__)return this.__redo__&&void 0!==(t=this.__redo__.shift())?t:this.__nextIndex__<this.__list__.length?this.__nextIndex__++:void this._unBind()})),next:l((function(){return this._createResult(this._next())})),_createResult:l((function(t){return void 0===t?{done:!0,value:void 0}:{done:!1,value:this._resolve(t)}})),_resolve:l((function(t){return this.__list__[t]})),_unBind:l((function(){this.__list__=null,delete this.__redo__,this.__context__&&(this.__context__.off(\"_add\",this._onAdd),this.__context__.off(\"_delete\",this._onDelete),this.__context__.off(\"_clear\",this._onClear),this.__context__=null)})),toString:l((function(){return\"[object \"+(this[u.toStringTag]||\"Object\")+\"]\"}))},c({_onAdd:l((function(t){t>=this.__nextIndex__||(++this.__nextIndex__,this.__redo__?(this.__redo__.forEach((function(e,n){e>=t&&(this.__redo__[n]=++e)}),this),this.__redo__.push(t)):h(this,\"__redo__\",l(\"c\",[t])))})),_onDelete:l((function(t){var e;t>=this.__nextIndex__||(--this.__nextIndex__,this.__redo__&&(-1!==(e=this.__redo__.indexOf(t))&&this.__redo__.splice(e,1),this.__redo__.forEach((function(e,n){e>t&&(this.__redo__[n]=--e)}),this)))})),_onClear:l((function(){this.__redo__&&i.call(this.__redo__),this.__nextIndex__=0}))}))),h(r.prototype,u.iterator,l((function(){return this})))},{d:155,\"d/auto-bind\":154,\"es5-ext/array/#/clear\":180,\"es5-ext/object/assign\":193,\"es5-ext/object/valid-callable\":209,\"es5-ext/object/valid-value\":211,\"es6-symbol\":225}],221:[function(t,e,n){\"use strict\";var r=t(\"es5-ext/function/is-arguments\"),i=t(\"es5-ext/object/is-value\"),a=t(\"es5-ext/string/is-string\"),o=t(\"es6-symbol\").iterator,s=Array.isArray;e.exports=function(t){return!(!i(t)||!s(t)&&!a(t)&&!r(t)&&\"function\"!=typeof t[o])}},{\"es5-ext/function/is-arguments\":184,\"es5-ext/object/is-value\":200,\"es5-ext/string/is-string\":215,\"es6-symbol\":225}],222:[function(t,e,n){\"use strict\";var r,i=t(\"es5-ext/object/set-prototype-of\"),a=t(\"d\"),o=t(\"es6-symbol\"),s=t(\"./\"),l=Object.defineProperty;r=e.exports=function(t){if(!(this instanceof r))throw new TypeError(\"Constructor requires 'new'\");t=String(t),s.call(this,t),l(this,\"__length__\",a(\"\",t.length))},i&&i(r,s),delete r.prototype.constructor,r.prototype=Object.create(s.prototype,{_next:a((function(){if(this.__list__)return this.__nextIndex__<this.__length__?this.__nextIndex__++:void this._unBind()})),_resolve:a((function(t){var e,n=this.__list__[t];return this.__nextIndex__===this.__length__?n:(e=n.charCodeAt(0))>=55296&&e<=56319?n+this.__list__[this.__nextIndex__++]:n}))}),l(r.prototype,o.toStringTag,a(\"c\",\"String Iterator\"))},{\"./\":220,d:155,\"es5-ext/object/set-prototype-of\":206,\"es6-symbol\":225}],223:[function(t,e,n){\"use strict\";var r=t(\"./is-iterable\");e.exports=function(t){if(!r(t))throw new TypeError(t+\" is not iterable\");return t}},{\"./is-iterable\":221}],224:[function(t,e,n){(function(r,i){(function(){!function(t,r){\"object\"==typeof n&&void 0!==e?e.exports=r():t.ES6Promise=r()}(this,(function(){\"use strict\";function e(t){return\"function\"==typeof t}var n=Array.isArray?Array.isArray:function(t){return\"[object Array]\"===Object.prototype.toString.call(t)},a=0,o=void 0,s=void 0,l=function(t,e){m[a]=t,m[a+1]=e,2===(a+=2)&&(s?s(g):x())},c=\"undefined\"!=typeof window?window:void 0,u=c||{},h=u.MutationObserver||u.WebKitMutationObserver,d=\"undefined\"==typeof self&&void 0!==r&&\"[object process]\"==={}.toString.call(r),f=\"undefined\"!=typeof Uint8ClampedArray&&\"undefined\"!=typeof importScripts&&\"undefined\"!=typeof MessageChannel;function p(){var t=setTimeout;return function(){return t(g,1)}}var m=new Array(1e3);function g(){for(var t=0;t<a;t+=2)(0,m[t])(m[t+1]),m[t]=void 0,m[t+1]=void 0;a=0}var y,v,_,b,x=void 0;function w(t,e){var n=this,r=new this.constructor(T);void 0===r[M]&&z(r);var i=n._state;if(i){var a=arguments[i-1];l((function(){return P(i,r,a,n._result)}))}else D(n,r,t,e);return r}function k(t){if(t&&\"object\"==typeof t&&t.constructor===this)return t;var e=new this(T);return L(e,t),e}x=d?function(){return r.nextTick(g)}:h?(v=0,_=new h(g),b=document.createTextNode(\"\"),_.observe(b,{characterData:!0}),function(){b.data=v=++v%2}):f?((y=new MessageChannel).port1.onmessage=g,function(){return y.port2.postMessage(0)}):void 0===c&&\"function\"==typeof t?function(){try{var t=Function(\"return this\")().require(\"vertx\");return void 0!==(o=t.runOnLoop||t.runOnContext)?function(){o(g)}:p()}catch(e){return p()}}():p();var M=Math.random().toString(36).substring(2);function T(){}var S=void 0;function A(t,n,r){n.constructor===t.constructor&&r===w&&n.constructor.resolve===k?function(t,e){1===e._state?E(t,e._result):2===e._state?O(t,e._result):D(e,void 0,(function(e){return L(t,e)}),(function(e){return O(t,e)}))}(t,n):void 0===r?E(t,n):e(r)?function(t,e,n){l((function(t){var r=!1,i=function(n,i,a,o){try{n.call(i,(function(n){r||(r=!0,e!==n?L(t,n):E(t,n))}),(function(e){r||(r=!0,O(t,e))}))}catch(s){return s}}(n,e);!r&&i&&(r=!0,O(t,i))}),t)}(t,n,r):E(t,n)}function L(t,e){if(t===e)O(t,new TypeError(\"You cannot resolve a promise with itself\"));else if(i=typeof(r=e),null===r||\"object\"!==i&&\"function\"!==i)E(t,e);else{var n=void 0;try{n=e.then}catch(a){return void O(t,a)}A(t,e,n)}var r,i}function C(t){t._onerror&&t._onerror(t._result),I(t)}function E(t,e){t._state===S&&(t._result=e,t._state=1,0!==t._subscribers.length&&l(I,t))}function O(t,e){t._state===S&&(t._state=2,t._result=e,l(C,t))}function D(t,e,n,r){var i=t._subscribers,a=i.length;t._onerror=null,i[a]=e,i[a+1]=n,i[a+2]=r,0===a&&t._state&&l(I,t)}function I(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r=void 0,i=void 0,a=t._result,o=0;o<e.length;o+=3)i=e[o+n],(r=e[o])?P(n,r,i,a):i(a);t._subscribers.length=0}}function P(t,n,r,i){var a=e(r),o=void 0,s=void 0,l=!0;if(a){try{o=r(i)}catch(c){l=!1,s=c}if(n===o)return void O(n,new TypeError(\"A promises callback cannot return that same promise.\"))}else o=i;n._state!==S||(a&&l?L(n,o):!1===l?O(n,s):1===t?E(n,o):2===t&&O(n,o))}var R=0;function z(t){t[M]=R++,t._state=void 0,t._result=void 0,t._subscribers=[]}var j=function(){function t(t,e){this._instanceConstructor=t,this.promise=new t(T),this.promise[M]||z(this.promise),n(e)?(this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?E(this.promise,this._result):(this.length=this.length||0,this._enumerate(e),0===this._remaining&&E(this.promise,this._result))):O(this.promise,new Error(\"Array Methods must be provided an Array\"))}return t.prototype._enumerate=function(t){for(var e=0;this._state===S&&e<t.length;e++)this._eachEntry(t[e],e)},t.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===k){var i=void 0,a=void 0,o=!1;try{i=t.then}catch(l){o=!0,a=l}if(i===w&&t._state!==S)this._settledAt(t._state,e,t._result);else if(\"function\"!=typeof i)this._remaining--,this._result[e]=t;else if(n===F){var s=new n(T);o?O(s,a):A(s,t,i),this._willSettleAt(s,e)}else this._willSettleAt(new n((function(e){return e(t)})),e)}else this._willSettleAt(r(t),e)},t.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===S&&(this._remaining--,2===t?O(r,n):this._result[e]=n),0===this._remaining&&E(r,this._result)},t.prototype._willSettleAt=function(t,e){var n=this;D(t,void 0,(function(t){return n._settledAt(1,e,t)}),(function(t){return n._settledAt(2,e,t)}))},t}(),F=function(){function t(e){this[M]=R++,this._result=this._state=void 0,this._subscribers=[],T!==e&&(\"function\"!=typeof e&&function(){throw new TypeError(\"You must pass a resolver function as the first argument to the promise constructor\")}(),this instanceof t?function(t,e){try{e((function(e){L(t,e)}),(function(e){O(t,e)}))}catch(n){O(t,n)}}(this,e):function(){throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\")}())}return t.prototype.catch=function(t){return this.then(null,t)},t.prototype.finally=function(t){var n=this,r=n.constructor;return e(t)?n.then((function(e){return r.resolve(t()).then((function(){return e}))}),(function(e){return r.resolve(t()).then((function(){throw e}))})):n.then(t,t)},t}();return F.prototype.then=w,F.all=function(t){return new j(this,t).promise},F.race=function(t){var e=this;return n(t)?new e((function(n,r){for(var i=t.length,a=0;a<i;a++)e.resolve(t[a]).then(n,r)})):new e((function(t,e){return e(new TypeError(\"You must pass an array to race.\"))}))},F.resolve=k,F.reject=function(t){var e=new this(T);return O(e,t),e},F._setScheduler=function(t){s=t},F._setAsap=function(t){l=t},F._asap=l,F.polyfill=function(){var t=void 0;if(void 0!==i)t=i;else if(\"undefined\"!=typeof self)t=self;else try{t=Function(\"return this\")()}catch(r){throw new Error(\"polyfill failed because global object is unavailable in this environment\")}var e=t.Promise;if(e){var n=null;try{n=Object.prototype.toString.call(e.resolve())}catch(r){}if(\"[object Promise]\"===n&&!e.cast)return}t.Promise=F},F.Promise=F,F}))}).call(this)}).call(this,t(\"_process\"),\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{_process:526}],225:[function(t,e,n){\"use strict\";e.exports=t(\"./is-implemented\")()?t(\"ext/global-this\").Symbol:t(\"./polyfill\")},{\"./is-implemented\":226,\"./polyfill\":231,\"ext/global-this\":238}],226:[function(t,e,n){\"use strict\";var r=t(\"ext/global-this\"),i={object:!0,symbol:!0};e.exports=function(){var t,e=r.Symbol;if(\"function\"!=typeof e)return!1;t=e(\"test symbol\");try{String(t)}catch(n){return!1}return!!i[typeof e.iterator]&&!!i[typeof e.toPrimitive]&&!!i[typeof e.toStringTag]}},{\"ext/global-this\":238}],227:[function(t,e,n){\"use strict\";e.exports=function(t){return!!t&&(\"symbol\"==typeof t||!!t.constructor&&\"Symbol\"===t.constructor.name&&\"Symbol\"===t[t.constructor.toStringTag])}},{}],228:[function(t,e,n){\"use strict\";var r=t(\"d\"),i=Object.defineProperty,a=Object.prototype,o=(0,Object.create)(null);e.exports=function(t){for(var e,n,s=0;o[t+(s||\"\")];)++s;return o[t+=s||\"\"]=!0,i(a,e=\"@@\"+t,r.gs(null,(function(t){n||(n=!0,i(this,e,r(t)),n=!1)}))),e}},{d:155}],229:[function(t,e,n){\"use strict\";var r=t(\"d\"),i=t(\"ext/global-this\").Symbol;e.exports=function(t){return Object.defineProperties(t,{hasInstance:r(\"\",i&&i.hasInstance||t(\"hasInstance\")),isConcatSpreadable:r(\"\",i&&i.isConcatSpreadable||t(\"isConcatSpreadable\")),iterator:r(\"\",i&&i.iterator||t(\"iterator\")),match:r(\"\",i&&i.match||t(\"match\")),replace:r(\"\",i&&i.replace||t(\"replace\")),search:r(\"\",i&&i.search||t(\"search\")),species:r(\"\",i&&i.species||t(\"species\")),split:r(\"\",i&&i.split||t(\"split\")),toPrimitive:r(\"\",i&&i.toPrimitive||t(\"toPrimitive\")),toStringTag:r(\"\",i&&i.toStringTag||t(\"toStringTag\")),unscopables:r(\"\",i&&i.unscopables||t(\"unscopables\"))})}},{d:155,\"ext/global-this\":238}],230:[function(t,e,n){\"use strict\";var r=t(\"d\"),i=t(\"../../../validate-symbol\"),a=Object.create(null);e.exports=function(t){return Object.defineProperties(t,{for:r((function(e){return a[e]?a[e]:a[e]=t(String(e))})),keyFor:r((function(t){var e;for(e in i(t),a)if(a[e]===t)return e}))})}},{\"../../../validate-symbol\":232,d:155}],231:[function(t,e,n){\"use strict\";var r,i,a,o=t(\"d\"),s=t(\"./validate-symbol\"),l=t(\"ext/global-this\").Symbol,c=t(\"./lib/private/generate-name\"),u=t(\"./lib/private/setup/standard-symbols\"),h=t(\"./lib/private/setup/symbol-registry\"),d=Object.create,f=Object.defineProperties,p=Object.defineProperty;if(\"function\"==typeof l)try{String(l()),a=!0}catch(m){}else l=null;i=function(t){if(this instanceof i)throw new TypeError(\"Symbol is not a constructor\");return r(t)},e.exports=r=function t(e){var n;if(this instanceof t)throw new TypeError(\"Symbol is not a constructor\");return a?l(e):(n=d(i.prototype),e=void 0===e?\"\":String(e),f(n,{__description__:o(\"\",e),__name__:o(\"\",c(e))}))},u(r),h(r),f(i.prototype,{constructor:o(r),toString:o(\"\",(function(){return this.__name__}))}),f(r.prototype,{toString:o((function(){return\"Symbol (\"+s(this).__description__+\")\"})),valueOf:o((function(){return s(this)}))}),p(r.prototype,r.toPrimitive,o(\"\",(function(){var t=s(this);return\"symbol\"==typeof t?t:t.toString()}))),p(r.prototype,r.toStringTag,o(\"c\",\"Symbol\")),p(i.prototype,r.toStringTag,o(\"c\",r.prototype[r.toStringTag])),p(i.prototype,r.toPrimitive,o(\"c\",r.prototype[r.toPrimitive]))},{\"./lib/private/generate-name\":228,\"./lib/private/setup/standard-symbols\":229,\"./lib/private/setup/symbol-registry\":230,\"./validate-symbol\":232,d:155,\"ext/global-this\":238}],232:[function(t,e,n){\"use strict\";var r=t(\"./is-symbol\");e.exports=function(t){if(!r(t))throw new TypeError(t+\" is not a symbol\");return t}},{\"./is-symbol\":227}],233:[function(t,e,n){\"use strict\";e.exports=t(\"./is-implemented\")()?WeakMap:t(\"./polyfill\")},{\"./is-implemented\":234,\"./polyfill\":236}],234:[function(t,e,n){\"use strict\";e.exports=function(){var t,e;if(\"function\"!=typeof WeakMap)return!1;try{t=new WeakMap([[e={},\"one\"],[{},\"two\"],[{},\"three\"]])}catch(n){return!1}return\"[object WeakMap]\"===String(t)&&\"function\"==typeof t.set&&t.set({},1)===t&&\"function\"==typeof t.delete&&\"function\"==typeof t.has&&\"one\"===t.get(e)}},{}],235:[function(t,e,n){\"use strict\";e.exports=\"function\"==typeof WeakMap&&\"[object WeakMap]\"===Object.prototype.toString.call(new WeakMap)},{}],236:[function(t,e,n){\"use strict\";var r,i=t(\"es5-ext/object/is-value\"),a=t(\"es5-ext/object/set-prototype-of\"),o=t(\"es5-ext/object/valid-object\"),s=t(\"es5-ext/object/valid-value\"),l=t(\"es5-ext/string/random-uniq\"),c=t(\"d\"),u=t(\"es6-iterator/get\"),h=t(\"es6-iterator/for-of\"),d=t(\"es6-symbol\").toStringTag,f=t(\"./is-native-implemented\"),p=Array.isArray,m=Object.defineProperty,g=Object.prototype.hasOwnProperty,y=Object.getPrototypeOf;e.exports=r=function(){var t,e=arguments[0];if(!(this instanceof r))throw new TypeError(\"Constructor requires 'new'\");return t=f&&a&&WeakMap!==r?a(new WeakMap,y(this)):this,i(e)&&(p(e)||(e=u(e))),m(t,\"__weakMapData__\",c(\"c\",\"$weakMap$\"+l())),e?(h(e,(function(e){s(e),t.set(e[0],e[1])})),t):t},f&&(a&&a(r,WeakMap),r.prototype=Object.create(WeakMap.prototype,{constructor:c(r)})),Object.defineProperties(r.prototype,{delete:c((function(t){return!!g.call(o(t),this.__weakMapData__)&&(delete t[this.__weakMapData__],!0)})),get:c((function(t){if(g.call(o(t),this.__weakMapData__))return t[this.__weakMapData__]})),has:c((function(t){return g.call(o(t),this.__weakMapData__)})),set:c((function(t,e){return m(o(t),this.__weakMapData__,c(\"c\",e)),this})),toString:c((function(){return\"[object WeakMap]\"}))}),m(r.prototype,d,c(\"c\",\"WeakMap\"))},{\"./is-native-implemented\":235,d:155,\"es5-ext/object/is-value\":200,\"es5-ext/object/set-prototype-of\":206,\"es5-ext/object/valid-object\":210,\"es5-ext/object/valid-value\":211,\"es5-ext/string/random-uniq\":216,\"es6-iterator/for-of\":218,\"es6-iterator/get\":219,\"es6-symbol\":225}],237:[function(t,e,n){var r=function(){if(\"object\"==typeof self&&self)return self;if(\"object\"==typeof window&&window)return window;throw new Error(\"Unable to resolve global `this`\")};e.exports=function(){if(this)return this;try{Object.defineProperty(Object.prototype,\"__global__\",{get:function(){return this},configurable:!0})}catch(t){return r()}try{return __global__||r()}finally{delete Object.prototype.__global__}}()},{}],238:[function(t,e,n){\"use strict\";e.exports=t(\"./is-implemented\")()?globalThis:t(\"./implementation\")},{\"./implementation\":237,\"./is-implemented\":239}],239:[function(t,e,n){\"use strict\";e.exports=function(){return\"object\"==typeof globalThis&&!!globalThis&&globalThis.Array===Array}},{}],240:[function(t,e,n){\"use strict\";e.exports=function(t,e,n){var r=e||0,i=n||1;return[[t[12]+t[0],t[13]+t[1],t[14]+t[2],t[15]+t[3]],[t[12]-t[0],t[13]-t[1],t[14]-t[2],t[15]-t[3]],[t[12]+t[4],t[13]+t[5],t[14]+t[6],t[15]+t[7]],[t[12]-t[4],t[13]-t[5],t[14]-t[6],t[15]-t[7]],[r*t[12]+t[8],r*t[13]+t[9],r*t[14]+t[10],r*t[15]+t[11]],[i*t[12]-t[8],i*t[13]-t[9],i*t[14]-t[10],i*t[15]-t[11]]]}},{}],241:[function(t,e,n){\"use strict\";var r=t(\"is-string-blank\");e.exports=function(t){var e=typeof t;if(\"string\"===e){var n=t;if(0==(t=+t)&&r(n))return!1}else if(\"number\"!==e)return!1;return t-t<1}},{\"is-string-blank\":470}],242:[function(t,e,n){\"use strict\";e.exports=function(t,e,n){switch(arguments.length){case 0:return new o([0],[0],0);case 1:return\"number\"==typeof t?new o(r=l(t),r,0):new o(t,l(t.length),0);case 2:var r;if(\"number\"==typeof e)return new o(t,r=l(t.length),+e);n=0;case 3:if(t.length!==e.length)throw new Error(\"state and velocity lengths must match\");return new o(t,e,n)}};var r=t(\"cubic-hermite\"),i=t(\"binary-search-bounds\");function a(t,e,n){return Math.min(e,Math.max(t,n))}function o(t,e,n){this.dimension=t.length,this.bounds=[new Array(this.dimension),new Array(this.dimension)];for(var r=0;r<this.dimension;++r)this.bounds[0][r]=-1/0,this.bounds[1][r]=1/0;this._state=t.slice().reverse(),this._velocity=e.slice().reverse(),this._time=[n],this._scratch=[t.slice(),t.slice(),t.slice(),t.slice(),t.slice()]}var s=o.prototype;function l(t){for(var e=new Array(t),n=0;n<t;++n)e[n]=0;return e}s.flush=function(t){var e=i.gt(this._time,t)-1;e<=0||(this._time.splice(0,e),this._state.splice(0,e*this.dimension),this._velocity.splice(0,e*this.dimension))},s.curve=function(t){var e=this._time,n=e.length,o=i.le(e,t),s=this._scratch[0],l=this._state,c=this._velocity,u=this.dimension,h=this.bounds;if(o<0)for(var d=u-1,f=0;f<u;++f,--d)s[f]=l[d];else if(o>=n-1){d=l.length-1;var p=t-e[n-1];for(f=0;f<u;++f,--d)s[f]=l[d]+p*c[d]}else{d=u*(o+1)-1;var m=e[o],g=e[o+1]-m||1,y=this._scratch[1],v=this._scratch[2],_=this._scratch[3],b=this._scratch[4],x=!0;for(f=0;f<u;++f,--d)y[f]=l[d],_[f]=c[d]*g,v[f]=l[d+u],b[f]=c[d+u]*g,x=x&&y[f]===v[f]&&_[f]===b[f]&&0===_[f];if(x)for(f=0;f<u;++f)s[f]=y[f];else r(y,_,v,b,(t-m)/g,s)}var w=h[0],k=h[1];for(f=0;f<u;++f)s[f]=a(w[f],k[f],s[f]);return s},s.dcurve=function(t){var e=this._time,n=e.length,a=i.le(e,t),o=this._scratch[0],s=this._state,l=this._velocity,c=this.dimension;if(a>=n-1)for(var u=s.length-1,h=0;h<c;++h,--u)o[h]=l[u];else{u=c*(a+1)-1;var d=e[a],f=e[a+1]-d||1,p=this._scratch[1],m=this._scratch[2],g=this._scratch[3],y=this._scratch[4],v=!0;for(h=0;h<c;++h,--u)p[h]=s[u],g[h]=l[u]*f,m[h]=s[u+c],y[h]=l[u+c]*f,v=v&&p[h]===m[h]&&g[h]===y[h]&&0===g[h];if(v)for(h=0;h<c;++h)o[h]=0;else for(r.derivative(p,g,m,y,(t-d)/f,o),h=0;h<c;++h)o[h]/=f}return o},s.lastT=function(){var t=this._time;return t[t.length-1]},s.stable=function(){for(var t=this._velocity,e=t.length,n=this.dimension-1;n>=0;--n)if(t[--e])return!1;return!0},s.jump=function(t){var e=this.lastT(),n=this.dimension;if(!(t<e||arguments.length!==n+1)){var r=this._state,i=this._velocity,o=r.length-this.dimension,s=this.bounds,l=s[0],c=s[1];this._time.push(e,t);for(var u=0;u<2;++u)for(var h=0;h<n;++h)r.push(r[o++]),i.push(0);for(this._time.push(t),h=n;h>0;--h)r.push(a(l[h-1],c[h-1],arguments[h])),i.push(0)}},s.push=function(t){var e=this.lastT(),n=this.dimension;if(!(t<e||arguments.length!==n+1)){var r=this._state,i=this._velocity,o=r.length-this.dimension,s=t-e,l=this.bounds,c=l[0],u=l[1],h=s>1e-6?1/s:0;this._time.push(t);for(var d=n;d>0;--d){var f=a(c[d-1],u[d-1],arguments[d]);r.push(f),i.push((f-r[o++])*h)}}},s.set=function(t){var e=this.dimension;if(!(t<this.lastT()||arguments.length!==e+1)){var n=this._state,r=this._velocity,i=this.bounds,o=i[0],s=i[1];this._time.push(t);for(var l=e;l>0;--l)n.push(a(o[l-1],s[l-1],arguments[l])),r.push(0)}},s.move=function(t){var e=this.lastT(),n=this.dimension;if(!(t<=e||arguments.length!==n+1)){var r=this._state,i=this._velocity,o=r.length-this.dimension,s=this.bounds,l=s[0],c=s[1],u=t-e,h=u>1e-6?1/u:0;this._time.push(t);for(var d=n;d>0;--d){var f=arguments[d];r.push(a(l[d-1],c[d-1],r[o++]+f)),i.push(f*h)}}},s.idle=function(t){var e=this.lastT();if(!(t<e)){var n=this.dimension,r=this._state,i=this._velocity,o=r.length-n,s=this.bounds,l=s[0],c=s[1],u=t-e;this._time.push(t);for(var h=n-1;h>=0;--h)r.push(a(l[h],c[h],r[o]+u*i[o])),i.push(0),o+=1}}},{\"binary-search-bounds\":243,\"cubic-hermite\":150}],243:[function(t,e,n){\"use strict\";function r(t,e,n,r,i,a){var o=[\"function \",t,\"(a,l,h,\",r.join(\",\"),\"){\",a?\"\":\"var i=\",n?\"l-1\":\"h+1\",\";while(l<=h){var m=(l+h)>>>1,x=a\",i?\".get(m)\":\"[m]\"];return a?e.indexOf(\"c\")<0?o.push(\";if(x===y){return m}else if(x<=y){\"):o.push(\";var p=c(x,y);if(p===0){return m}else if(p<=0){\"):o.push(\";if(\",e,\"){i=m;\"),o.push(n?\"l=m+1}else{h=m-1}\":\"h=m-1}else{l=m+1}\"),o.push(\"}\"),o.push(a?\"return -1};\":\"return i};\"),o.join(\"\")}function i(t,e,n,i){return new Function([r(\"A\",\"x\"+t+\"y\",e,[\"y\"],!1,i),r(\"B\",\"x\"+t+\"y\",e,[\"y\"],!0,i),r(\"P\",\"c(x,y)\"+t+\"0\",e,[\"y\",\"c\"],!1,i),r(\"Q\",\"c(x,y)\"+t+\"0\",e,[\"y\",\"c\"],!0,i),\"function dispatchBsearch\",n,\"(a,y,c,l,h){if(a.shape){if(typeof(c)==='function'){return Q(a,(l===undefined)?0:l|0,(h===undefined)?a.shape[0]-1:h|0,y,c)}else{return B(a,(c===undefined)?0:c|0,(l===undefined)?a.shape[0]-1:l|0,y)}}else{if(typeof(c)==='function'){return P(a,(l===undefined)?0:l|0,(h===undefined)?a.length-1:h|0,y,c)}else{return A(a,(c===undefined)?0:c|0,(l===undefined)?a.length-1:l|0,y)}}}return dispatchBsearch\",n].join(\"\"))()}e.exports={ge:i(\">=\",!1,\"GE\"),gt:i(\">\",!1,\"GT\"),lt:i(\"<\",!0,\"LT\"),le:i(\"<=\",!0,\"LE\"),eq:i(\"-\",!0,\"EQ\",!0)}},{}],244:[function(t,e,n){var r=t(\"dtype\");e.exports=function(t,e,n){if(!t)throw new TypeError(\"must specify data as first parameter\");if(n=0|+(n||0),Array.isArray(t)&&t[0]&&\"number\"==typeof t[0][0]){var i,a,o,s,l=t[0].length,c=t.length*l;e&&\"string\"!=typeof e||(e=new(r(e||\"float32\"))(c+n));var u=e.length-n;if(c!==u)throw new Error(\"source length \"+c+\" (\"+l+\"x\"+t.length+\") does not match destination length \"+u);for(i=0,o=n;i<t.length;i++)for(a=0;a<l;a++)e[o++]=null===t[i][a]?NaN:t[i][a]}else if(e&&\"string\"!=typeof e)e.set(t,n);else{var h=r(e||\"float32\");if(Array.isArray(t)||\"array\"===e)for(i=0,o=n,s=(e=new h(t.length+n)).length;o<s;o++,i++)e[o]=null===t[i]?NaN:t[i];else 0===n?e=new h(t):(e=new h(t.length+n)).set(t,n)}return e}},{dtype:175}],245:[function(t,e,n){\"use strict\";var r=t(\"css-font/stringify\"),i=[32,126];e.exports=function(t){var e=(t=t||{}).shape?t.shape:t.canvas?[t.canvas.width,t.canvas.height]:[512,512],n=t.canvas||document.createElement(\"canvas\"),a=t.font,o=\"number\"==typeof t.step?[t.step,t.step]:t.step||[32,32],s=t.chars||i;if(a&&\"string\"!=typeof a&&(a=r(a)),Array.isArray(s)){if(2===s.length&&\"number\"==typeof s[0]&&\"number\"==typeof s[1]){for(var l=[],c=s[0],u=0;c<=s[1];c++)l[u++]=String.fromCharCode(c);s=l}}else s=String(s).split(\"\");e=e.slice(),n.width=e[0],n.height=e[1];var h=n.getContext(\"2d\");h.fillStyle=\"#000\",h.fillRect(0,0,n.width,n.height),h.font=a,h.textAlign=\"center\",h.textBaseline=\"middle\",h.fillStyle=\"#fff\";var d=o[0]/2,f=o[1]/2;for(c=0;c<s.length;c++)h.fillText(s[c],d,f),(d+=o[0])>e[0]-o[0]/2&&(d=o[0]/2,f+=o[1]);return n}},{\"css-font/stringify\":147}],246:[function(t,e,n){\"use strict\";function r(t,e){e||(e={}),(\"string\"==typeof t||Array.isArray(t))&&(e.family=t);var n=Array.isArray(e.family)?e.family.join(\", \"):e.family;if(!n)throw Error(\"`family` must be defined\");var s=e.size||e.fontSize||e.em||48,l=(t=[e.style||e.fontStyle||\"\",e.weight||e.fontWeight||\"\",s].join(\" \")+\"px \"+n,e.origin||\"top\");if(r.cache[n]&&s<=r.cache[n].em)return i(r.cache[n],l);var c=e.canvas||r.canvas,u=c.getContext(\"2d\"),h={upper:void 0!==e.upper?e.upper:\"H\",lower:void 0!==e.lower?e.lower:\"x\",descent:void 0!==e.descent?e.descent:\"p\",ascent:void 0!==e.ascent?e.ascent:\"h\",tittle:void 0!==e.tittle?e.tittle:\"i\",overshoot:void 0!==e.overshoot?e.overshoot:\"O\"},d=Math.ceil(1.5*s);c.height=d,c.width=.5*d,u.font=t;var f=\"H\",p={top:0};u.clearRect(0,0,d,d),u.textBaseline=\"top\",u.fillStyle=\"black\",u.fillText(f,0,0);var m=a(u.getImageData(0,0,d,d));u.clearRect(0,0,d,d),u.textBaseline=\"bottom\",u.fillText(f,0,d);var g=a(u.getImageData(0,0,d,d));p.lineHeight=p.bottom=d-g+m,u.clearRect(0,0,d,d),u.textBaseline=\"alphabetic\",u.fillText(f,0,d);var y=d-a(u.getImageData(0,0,d,d))-1+m;p.baseline=p.alphabetic=y,u.clearRect(0,0,d,d),u.textBaseline=\"middle\",u.fillText(f,0,.5*d);var v=a(u.getImageData(0,0,d,d));p.median=p.middle=d-v-1+m-.5*d,u.clearRect(0,0,d,d),u.textBaseline=\"hanging\",u.fillText(f,0,.5*d);var _=a(u.getImageData(0,0,d,d));p.hanging=d-_-1+m-.5*d,u.clearRect(0,0,d,d),u.textBaseline=\"ideographic\",u.fillText(f,0,d);var b=a(u.getImageData(0,0,d,d));if(p.ideographic=d-b-1+m,h.upper&&(u.clearRect(0,0,d,d),u.textBaseline=\"top\",u.fillText(h.upper,0,0),p.upper=a(u.getImageData(0,0,d,d)),p.capHeight=p.baseline-p.upper),h.lower&&(u.clearRect(0,0,d,d),u.textBaseline=\"top\",u.fillText(h.lower,0,0),p.lower=a(u.getImageData(0,0,d,d)),p.xHeight=p.baseline-p.lower),h.tittle&&(u.clearRect(0,0,d,d),u.textBaseline=\"top\",u.fillText(h.tittle,0,0),p.tittle=a(u.getImageData(0,0,d,d))),h.ascent&&(u.clearRect(0,0,d,d),u.textBaseline=\"top\",u.fillText(h.ascent,0,0),p.ascent=a(u.getImageData(0,0,d,d))),h.descent&&(u.clearRect(0,0,d,d),u.textBaseline=\"top\",u.fillText(h.descent,0,0),p.descent=o(u.getImageData(0,0,d,d))),h.overshoot){u.clearRect(0,0,d,d),u.textBaseline=\"top\",u.fillText(h.overshoot,0,0);var x=o(u.getImageData(0,0,d,d));p.overshoot=x-y}for(var w in p)p[w]/=s;return p.em=s,r.cache[n]=p,i(p,l)}function i(t,e){var n={};for(var r in\"string\"==typeof e&&(e=t[e]),t)\"em\"!==r&&(n[r]=t[r]-e);return n}function a(t){for(var e=t.height,n=t.data,r=3;r<n.length;r+=4)if(0!==n[r])return Math.floor(.25*(r-3)/e)}function o(t){for(var e=t.height,n=t.data,r=n.length-1;r>0;r-=4)if(0!==n[r])return Math.floor(.25*(r-3)/e)}e.exports=r,r.canvas=document.createElement(\"canvas\"),r.cache={}},{}],247:[function(t,e,n){\"use strict\";function r(t,e,n,r,i,a){this._color=t,this.key=e,this.value=n,this.left=r,this.right=i,this._count=a}function i(t){return new r(t._color,t.key,t.value,t.left,t.right,t._count)}function a(t,e){return new r(t,e.key,e.value,e.left,e.right,e._count)}function o(t){t._count=1+(t.left?t.left._count:0)+(t.right?t.right._count:0)}function s(t,e){this._compare=t,this.root=e}e.exports=function(t){return new s(t||m,null)};var l=s.prototype;function c(t,e){var n;return e.left&&(n=c(t,e.left))?n:(n=t(e.key,e.value))||(e.right?c(t,e.right):void 0)}function u(t,e,n,r){if(e(t,r.key)<=0){var i;if(r.left&&(i=u(t,e,n,r.left)))return i;if(i=n(r.key,r.value))return i}if(r.right)return u(t,e,n,r.right)}function h(t,e,n,r,i){var a,o=n(t,i.key),s=n(e,i.key);if(o<=0){if(i.left&&(a=h(t,e,n,r,i.left)))return a;if(s>0&&(a=r(i.key,i.value)))return a}if(s>0&&i.right)return h(t,e,n,r,i.right)}function d(t,e){this.tree=t,this._stack=e}Object.defineProperty(l,\"keys\",{get:function(){var t=[];return this.forEach((function(e,n){t.push(e)})),t}}),Object.defineProperty(l,\"values\",{get:function(){var t=[];return this.forEach((function(e,n){t.push(n)})),t}}),Object.defineProperty(l,\"length\",{get:function(){return this.root?this.root._count:0}}),l.insert=function(t,e){for(var n=this._compare,i=this.root,l=[],c=[];i;){var u=n(t,i.key);l.push(i),c.push(u),i=u<=0?i.left:i.right}l.push(new r(0,t,e,null,null,1));for(var h=l.length-2;h>=0;--h)i=l[h],l[h]=c[h]<=0?new r(i._color,i.key,i.value,l[h+1],i.right,i._count+1):new r(i._color,i.key,i.value,i.left,l[h+1],i._count+1);for(h=l.length-1;h>1;--h){var d=l[h-1];if(i=l[h],1===d._color||1===i._color)break;var f=l[h-2];if(f.left===d)if(d.left===i){if(!(p=f.right)||0!==p._color){f._color=0,f.left=d.right,d._color=1,d.right=f,l[h-2]=d,l[h-1]=i,o(f),o(d),h>=3&&((m=l[h-3]).left===f?m.left=d:m.right=d);break}d._color=1,f.right=a(1,p),f._color=0,h-=1}else{if(!(p=f.right)||0!==p._color){d.right=i.left,f._color=0,f.left=i.right,i._color=1,i.left=d,i.right=f,l[h-2]=i,l[h-1]=d,o(f),o(d),o(i),h>=3&&((m=l[h-3]).left===f?m.left=i:m.right=i);break}d._color=1,f.right=a(1,p),f._color=0,h-=1}else if(d.right===i){if(!(p=f.left)||0!==p._color){f._color=0,f.right=d.left,d._color=1,d.left=f,l[h-2]=d,l[h-1]=i,o(f),o(d),h>=3&&((m=l[h-3]).right===f?m.right=d:m.left=d);break}d._color=1,f.left=a(1,p),f._color=0,h-=1}else{var p;if(!(p=f.left)||0!==p._color){var m;d.left=i.right,f._color=0,f.right=i.left,i._color=1,i.right=d,i.left=f,l[h-2]=i,l[h-1]=d,o(f),o(d),o(i),h>=3&&((m=l[h-3]).right===f?m.right=i:m.left=i);break}d._color=1,f.left=a(1,p),f._color=0,h-=1}}return l[0]._color=1,new s(n,l[0])},l.forEach=function(t,e,n){if(this.root)switch(arguments.length){case 1:return c(t,this.root);case 2:return u(e,this._compare,t,this.root);case 3:if(this._compare(e,n)>=0)return;return h(e,n,this._compare,t,this.root)}},Object.defineProperty(l,\"begin\",{get:function(){for(var t=[],e=this.root;e;)t.push(e),e=e.left;return new d(this,t)}}),Object.defineProperty(l,\"end\",{get:function(){for(var t=[],e=this.root;e;)t.push(e),e=e.right;return new d(this,t)}}),l.at=function(t){if(t<0)return new d(this,[]);for(var e=this.root,n=[];;){if(n.push(e),e.left){if(t<e.left._count){e=e.left;continue}t-=e.left._count}if(!t)return new d(this,n);if(t-=1,!e.right)break;if(t>=e.right._count)break;e=e.right}return new d(this,[])},l.ge=function(t){for(var e=this._compare,n=this.root,r=[],i=0;n;){var a=e(t,n.key);r.push(n),a<=0&&(i=r.length),n=a<=0?n.left:n.right}return r.length=i,new d(this,r)},l.gt=function(t){for(var e=this._compare,n=this.root,r=[],i=0;n;){var a=e(t,n.key);r.push(n),a<0&&(i=r.length),n=a<0?n.left:n.right}return r.length=i,new d(this,r)},l.lt=function(t){for(var e=this._compare,n=this.root,r=[],i=0;n;){var a=e(t,n.key);r.push(n),a>0&&(i=r.length),n=a<=0?n.left:n.right}return r.length=i,new d(this,r)},l.le=function(t){for(var e=this._compare,n=this.root,r=[],i=0;n;){var a=e(t,n.key);r.push(n),a>=0&&(i=r.length),n=a<0?n.left:n.right}return r.length=i,new d(this,r)},l.find=function(t){for(var e=this._compare,n=this.root,r=[];n;){var i=e(t,n.key);if(r.push(n),0===i)return new d(this,r);n=i<=0?n.left:n.right}return new d(this,[])},l.remove=function(t){var e=this.find(t);return e?e.remove():this},l.get=function(t){for(var e=this._compare,n=this.root;n;){var r=e(t,n.key);if(0===r)return n.value;n=r<=0?n.left:n.right}};var f=d.prototype;function p(t,e){t.key=e.key,t.value=e.value,t.left=e.left,t.right=e.right,t._color=e._color,t._count=e._count}function m(t,e){return t<e?-1:t>e?1:0}Object.defineProperty(f,\"valid\",{get:function(){return this._stack.length>0}}),Object.defineProperty(f,\"node\",{get:function(){return this._stack.length>0?this._stack[this._stack.length-1]:null},enumerable:!0}),f.clone=function(){return new d(this.tree,this._stack.slice())},f.remove=function(){var t=this._stack;if(0===t.length)return this.tree;var e=new Array(t.length);e[e.length-1]=new r((l=t[t.length-1])._color,l.key,l.value,l.left,l.right,l._count);for(var n=t.length-2;n>=0;--n){var l;e[n]=(l=t[n]).left===t[n+1]?new r(l._color,l.key,l.value,e[n+1],l.right,l._count):new r(l._color,l.key,l.value,l.left,e[n+1],l._count)}if((l=e[e.length-1]).left&&l.right){var c=e.length;for(l=l.left;l.right;)e.push(l),l=l.right;var u=e[c-1];for(e.push(new r(l._color,u.key,u.value,l.left,l.right,l._count)),e[c-1].key=l.key,e[c-1].value=l.value,n=e.length-2;n>=c;--n)e[n]=new r((l=e[n])._color,l.key,l.value,l.left,e[n+1],l._count);e[c-1].left=e[c]}if(0===(l=e[e.length-1])._color){var h=e[e.length-2];for(h.left===l?h.left=null:h.right===l&&(h.right=null),e.pop(),n=0;n<e.length;++n)e[n]._count--;return new s(this.tree._compare,e[0])}if(l.left||l.right){for(l.left?p(l,l.left):l.right&&p(l,l.right),l._color=1,n=0;n<e.length-1;++n)e[n]._count--;return new s(this.tree._compare,e[0])}if(1===e.length)return new s(this.tree._compare,null);for(n=0;n<e.length;++n)e[n]._count--;var d=e[e.length-2];return function(t){for(var e,n,r,s,l=t.length-1;l>=0;--l){if(e=t[l],0===l)return void(e._color=1);if((n=t[l-1]).left===e){if((r=n.right).right&&0===r.right._color)return s=(r=n.right=i(r)).right=i(r.right),n.right=r.left,r.left=n,r.right=s,r._color=n._color,e._color=1,n._color=1,s._color=1,o(n),o(r),l>1&&((c=t[l-2]).left===n?c.left=r:c.right=r),void(t[l-1]=r);if(r.left&&0===r.left._color)return s=(r=n.right=i(r)).left=i(r.left),n.right=s.left,r.left=s.right,s.left=n,s.right=r,s._color=n._color,n._color=1,r._color=1,e._color=1,o(n),o(r),o(s),l>1&&((c=t[l-2]).left===n?c.left=s:c.right=s),void(t[l-1]=s);if(1===r._color){if(0===n._color)return n._color=1,void(n.right=a(0,r));n.right=a(0,r);continue}r=i(r),n.right=r.left,r.left=n,r._color=n._color,n._color=0,o(n),o(r),l>1&&((c=t[l-2]).left===n?c.left=r:c.right=r),t[l-1]=r,t[l]=n,l+1<t.length?t[l+1]=e:t.push(e),l+=2}else{if((r=n.left).left&&0===r.left._color)return s=(r=n.left=i(r)).left=i(r.left),n.left=r.right,r.right=n,r.left=s,r._color=n._color,e._color=1,n._color=1,s._color=1,o(n),o(r),l>1&&((c=t[l-2]).right===n?c.right=r:c.left=r),void(t[l-1]=r);if(r.right&&0===r.right._color)return s=(r=n.left=i(r)).right=i(r.right),n.left=s.right,r.right=s.left,s.right=n,s.left=r,s._color=n._color,n._color=1,r._color=1,e._color=1,o(n),o(r),o(s),l>1&&((c=t[l-2]).right===n?c.right=s:c.left=s),void(t[l-1]=s);if(1===r._color){if(0===n._color)return n._color=1,void(n.left=a(0,r));n.left=a(0,r);continue}var c;r=i(r),n.left=r.right,r.right=n,r._color=n._color,n._color=0,o(n),o(r),l>1&&((c=t[l-2]).right===n?c.right=r:c.left=r),t[l-1]=r,t[l]=n,l+1<t.length?t[l+1]=e:t.push(e),l+=2}}}(e),d.left===l?d.left=null:d.right=null,new s(this.tree._compare,e[0])},Object.defineProperty(f,\"key\",{get:function(){if(this._stack.length>0)return this._stack[this._stack.length-1].key},enumerable:!0}),Object.defineProperty(f,\"value\",{get:function(){if(this._stack.length>0)return this._stack[this._stack.length-1].value},enumerable:!0}),Object.defineProperty(f,\"index\",{get:function(){var t=0,e=this._stack;if(0===e.length){var n=this.tree.root;return n?n._count:0}e[e.length-1].left&&(t=e[e.length-1].left._count);for(var r=e.length-2;r>=0;--r)e[r+1]===e[r].right&&(++t,e[r].left&&(t+=e[r].left._count));return t},enumerable:!0}),f.next=function(){var t=this._stack;if(0!==t.length){var e=t[t.length-1];if(e.right)for(e=e.right;e;)t.push(e),e=e.left;else for(t.pop();t.length>0&&t[t.length-1].right===e;)e=t[t.length-1],t.pop()}},Object.defineProperty(f,\"hasNext\",{get:function(){var t=this._stack;if(0===t.length)return!1;if(t[t.length-1].right)return!0;for(var e=t.length-1;e>0;--e)if(t[e-1].left===t[e])return!0;return!1}}),f.update=function(t){var e=this._stack;if(0===e.length)throw new Error(\"Can't update empty node!\");var n=new Array(e.length),i=e[e.length-1];n[n.length-1]=new r(i._color,i.key,t,i.left,i.right,i._count);for(var a=e.length-2;a>=0;--a)n[a]=(i=e[a]).left===e[a+1]?new r(i._color,i.key,i.value,n[a+1],i.right,i._count):new r(i._color,i.key,i.value,i.left,n[a+1],i._count);return new s(this.tree._compare,n[0])},f.prev=function(){var t=this._stack;if(0!==t.length){var e=t[t.length-1];if(e.left)for(e=e.left;e;)t.push(e),e=e.right;else for(t.pop();t.length>0&&t[t.length-1].left===e;)e=t[t.length-1],t.pop()}},Object.defineProperty(f,\"hasPrev\",{get:function(){var t=this._stack;if(0===t.length)return!1;if(t[t.length-1].left)return!0;for(var e=t.length-1;e>0;--e)if(t[e-1].right===t[e])return!0;return!1}})},{}],248:[function(t,e,n){var r=[.9999999999998099,676.5203681218851,-1259.1392167224028,771.3234287776531,-176.6150291621406,12.507343278686905,-.13857109526572012,9984369578019572e-21,1.5056327351493116e-7],i=[.9999999999999971,57.15623566586292,-59.59796035547549,14.136097974741746,-.4919138160976202,3399464998481189e-20,4652362892704858e-20,-9837447530487956e-20,.0001580887032249125,-.00021026444172410488,.00021743961811521265,-.0001643181065367639,8441822398385275e-20,-26190838401581408e-21,36899182659531625e-22];function a(t){if(t<0)return Number(\"0/0\");for(var e=i[0],n=i.length-1;n>0;--n)e+=i[n]/(t+n);var r=t+4.7421875+.5;return.5*Math.log(2*Math.PI)+(t+.5)*Math.log(r)-r+Math.log(e)-Math.log(t)}e.exports=function t(e){if(e<.5)return Math.PI/(Math.sin(Math.PI*e)*t(1-e));if(e>100)return Math.exp(a(e));e-=1;for(var n=r[0],i=1;i<9;i++)n+=r[i]/(e+i);var o=e+7+.5;return Math.sqrt(2*Math.PI)*Math.pow(o,e+.5)*Math.exp(-o)*n},e.exports.log=a},{}],249:[function(t,e,n){e.exports=function(t,e){if(\"string\"!=typeof t)throw new TypeError(\"must specify type string\");if(e=e||{},\"undefined\"==typeof document&&!e.canvas)return null;var n=e.canvas||document.createElement(\"canvas\");\"number\"==typeof e.width&&(n.width=e.width),\"number\"==typeof e.height&&(n.height=e.height);var r,i=e;try{var a=[t];0===t.indexOf(\"webgl\")&&a.push(\"experimental-\"+t);for(var o=0;o<a.length;o++)if(r=n.getContext(a[o],i))return r}catch(s){r=null}return r||null}},{}],250:[function(t,e,n){\"use strict\";e.exports=function(t,e){var n=new u(t);return n.update(e),n};var r=t(\"./lib/text.js\"),i=t(\"./lib/lines.js\"),a=t(\"./lib/background.js\"),o=t(\"./lib/cube.js\"),s=t(\"./lib/ticks.js\"),l=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);function c(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function u(t){this.gl=t,this.pixelRatio=1,this.bounds=[[-10,-10,-10],[10,10,10]],this.ticks=[[],[],[]],this.autoTicks=!0,this.tickSpacing=[1,1,1],this.tickEnable=[!0,!0,!0],this.tickFont=[\"sans-serif\",\"sans-serif\",\"sans-serif\"],this.tickSize=[12,12,12],this.tickAngle=[0,0,0],this.tickAlign=[\"auto\",\"auto\",\"auto\"],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[10,10,10],this.lastCubeProps={cubeEdges:[0,0,0],axis:[0,0,0]},this.labels=[\"x\",\"y\",\"z\"],this.labelEnable=[!0,!0,!0],this.labelFont=\"sans-serif\",this.labelSize=[20,20,20],this.labelAngle=[0,0,0],this.labelAlign=[\"auto\",\"auto\",\"auto\"],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[10,10,10],this.lineEnable=[!0,!0,!0],this.lineMirror=[!1,!1,!1],this.lineWidth=[1,1,1],this.lineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.lineTickEnable=[!0,!0,!0],this.lineTickMirror=[!1,!1,!1],this.lineTickLength=[0,0,0],this.lineTickWidth=[1,1,1],this.lineTickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.gridEnable=[!0,!0,!0],this.gridWidth=[1,1,1],this.gridColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroEnable=[!0,!0,!0],this.zeroLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroLineWidth=[2,2,2],this.backgroundEnable=[!1,!1,!1],this.backgroundColor=[[.8,.8,.8,.5],[.8,.8,.8,.5],[.8,.8,.8,.5]],this._firstInit=!0,this._text=null,this._lines=null,this._background=a(t)}var h=u.prototype;function d(){this.primalOffset=[0,0,0],this.primalMinor=[0,0,0],this.mirrorOffset=[0,0,0],this.mirrorMinor=[0,0,0]}h.update=function(t){function e(e,n,r){if(r in t){var i,a=t[r],o=this[r];this[r]=i=(e?Array.isArray(a)&&Array.isArray(a[0]):Array.isArray(a))?[n(a[0]),n(a[1]),n(a[2])]:[n(a),n(a),n(a)];for(var s=0;s<3;++s)if(i[s]!==o[s])return!0}return!1}t=t||{};var n,a=e.bind(this,!1,Number),o=e.bind(this,!1,Boolean),l=e.bind(this,!1,String),c=e.bind(this,!0,(function(t){if(Array.isArray(t)){if(3===t.length)return[+t[0],+t[1],+t[2],1];if(4===t.length)return[+t[0],+t[1],+t[2],+t[3]]}return[0,0,0,1]})),u=!1,h=!1;if(\"bounds\"in t)for(var d=t.bounds,f=0;f<2;++f)for(var p=0;p<3;++p)d[f][p]!==this.bounds[f][p]&&(h=!0),this.bounds[f][p]=d[f][p];if(\"ticks\"in t)for(n=t.ticks,u=!0,this.autoTicks=!1,f=0;f<3;++f)this.tickSpacing[f]=0;else a(\"tickSpacing\")&&(this.autoTicks=!0,h=!0);if(this._firstInit&&(\"ticks\"in t||\"tickSpacing\"in t||(this.autoTicks=!0),h=!0,u=!0,this._firstInit=!1),h&&this.autoTicks&&(n=s.create(this.bounds,this.tickSpacing),u=!0),u){for(f=0;f<3;++f)n[f].sort((function(t,e){return t.x-e.x}));s.equal(n,this.ticks)?u=!1:this.ticks=n}o(\"tickEnable\"),l(\"tickFont\")&&(u=!0),a(\"tickSize\"),a(\"tickAngle\"),a(\"tickPad\"),c(\"tickColor\");var m=l(\"labels\");l(\"labelFont\")&&(m=!0),o(\"labelEnable\"),a(\"labelSize\"),a(\"labelPad\"),c(\"labelColor\"),o(\"lineEnable\"),o(\"lineMirror\"),a(\"lineWidth\"),c(\"lineColor\"),o(\"lineTickEnable\"),o(\"lineTickMirror\"),a(\"lineTickLength\"),a(\"lineTickWidth\"),c(\"lineTickColor\"),o(\"gridEnable\"),a(\"gridWidth\"),c(\"gridColor\"),o(\"zeroEnable\"),c(\"zeroLineColor\"),a(\"zeroLineWidth\"),o(\"backgroundEnable\"),c(\"backgroundColor\"),this._text?this._text&&(m||u)&&this._text.update(this.bounds,this.labels,this.labelFont,this.ticks,this.tickFont):this._text=r(this.gl,this.bounds,this.labels,this.labelFont,this.ticks,this.tickFont),this._lines&&u&&(this._lines.dispose(),this._lines=null),this._lines||(this._lines=i(this.gl,this.bounds,this.ticks))};var f=[new d,new d,new d];function p(t,e,n,r,i){for(var a=t.primalOffset,o=t.primalMinor,s=t.mirrorOffset,l=t.mirrorMinor,c=r[e],u=0;u<3;++u)if(e!==u){var h=a,d=s,f=o,p=l;c&1<<u&&(h=s,d=a,f=l,p=o),h[u]=n[0][u],d[u]=n[1][u],i[u]>0?(f[u]=-1,p[u]=0):(f[u]=0,p[u]=1)}}var m=[0,0,0],g={model:l,view:l,projection:l,_ortho:!1};h.isOpaque=function(){return!0},h.isTransparent=function(){return!1},h.drawTransparent=function(t){};var y=[0,0,0],v=[0,0,0],_=[0,0,0];h.draw=function(t){for(var e=this.gl,n=(t=t||g).model||l,r=t.view||l,i=t.projection||l,a=this.bounds,s=t._ortho||!1,u=o(n,r,i,a,s),h=u.cubeEdges,d=u.axis,b=(s?2:1)*this.pixelRatio*(i[3]*r[12]+i[7]*r[13]+i[11]*r[14]+i[15]*r[15])/e.drawingBufferHeight,x=0;x<3;++x)this.lastCubeProps.cubeEdges[x]=h[x],this.lastCubeProps.axis[x]=d[x];var w=f;for(x=0;x<3;++x)p(f[x],x,this.bounds,h,d);e=this.gl;var k,M,T,S=m;for(x=0;x<3;++x)S[x]=this.backgroundEnable[x]?d[x]:0;for(this._background.draw(n,r,i,a,S,this.backgroundColor),this._lines.bind(n,r,i,this),x=0;x<3;++x){var A=[0,0,0];A[x]=d[x]>0?a[1][x]:a[0][x];for(var L=0;L<2;++L){var C=(x+1+(1^L))%3;this.gridEnable[E=(x+1+L)%3]&&this._lines.drawGrid(E,C,this.bounds,A,this.gridColor[E],this.gridWidth[E]*this.pixelRatio)}for(L=0;L<2;++L){var E=(x+1+L)%3;this.zeroEnable[C=(x+1+(1^L))%3]&&Math.min(a[0][C],a[1][C])<=0&&Math.max(a[0][C],a[1][C])>=0&&this._lines.drawZero(E,C,this.bounds,A,this.zeroLineColor[C],this.zeroLineWidth[C]*this.pixelRatio)}}for(x=0;x<3;++x){this.lineEnable[x]&&this._lines.drawAxisLine(x,this.bounds,w[x].primalOffset,this.lineColor[x],this.lineWidth[x]*this.pixelRatio),this.lineMirror[x]&&this._lines.drawAxisLine(x,this.bounds,w[x].mirrorOffset,this.lineColor[x],this.lineWidth[x]*this.pixelRatio);var O=c(y,w[x].primalMinor),D=c(v,w[x].mirrorMinor),I=this.lineTickLength;for(L=0;L<3;++L){var P=b/n[5*L];O[L]*=I[L]*P,D[L]*=I[L]*P}this.lineTickEnable[x]&&this._lines.drawAxisTicks(x,w[x].primalOffset,O,this.lineTickColor[x],this.lineTickWidth[x]*this.pixelRatio),this.lineTickMirror[x]&&this._lines.drawAxisTicks(x,w[x].mirrorOffset,D,this.lineTickColor[x],this.lineTickWidth[x]*this.pixelRatio)}function R(t){(T=[0,0,0])[t]=1}function z(t,e,n){var r=(t+1)%3,i=(t+2)%3,a=e[r],o=e[i],s=n[r],l=n[i];a>0&&l>0||a>0&&l<0||a<0&&l>0||a<0&&l<0?R(r):(o>0&&s>0||o>0&&s<0||o<0&&s>0||o<0&&s<0)&&R(i)}for(this._lines.unbind(),this._text.bind(n,r,i,this.pixelRatio),x=0;x<3;++x){var j=w[x].primalMinor,F=w[x].mirrorMinor,N=c(_,w[x].primalOffset);for(L=0;L<3;++L)this.lineTickEnable[x]&&(N[L]+=b*j[L]*Math.max(this.lineTickLength[L],0)/n[5*L]);var B=[0,0,0];if(B[x]=1,this.tickEnable[x]){for(-3600===this.tickAngle[x]?(this.tickAngle[x]=0,this.tickAlign[x]=\"auto\"):this.tickAlign[x]=-1,(k=[this.tickAlign[x],.5,M=1])[0]=\"auto\"===k[0]?0:parseInt(\"\"+k[0]),T=[0,0,0],z(x,j,F),L=0;L<3;++L)N[L]+=b*j[L]*this.tickPad[L]/n[5*L];this._text.drawTicks(x,this.tickSize[x],this.tickAngle[x],N,this.tickColor[x],B,T,k)}if(this.labelEnable[x]){for(M=0,T=[0,0,0],this.labels[x].length>4&&(R(x),M=1),(k=[this.labelAlign[x],.5,M])[0]=\"auto\"===k[0]?0:parseInt(\"\"+k[0]),L=0;L<3;++L)N[L]+=b*j[L]*this.labelPad[L]/n[5*L];N[x]+=.5*(a[0][x]+a[1][x]),this._text.drawLabel(x,this.labelSize[x],this.labelAngle[x],N,this.labelColor[x],[0,0,0],T,k)}}this._text.unbind()},h.dispose=function(){this._text.dispose(),this._lines.dispose(),this._background.dispose(),this._lines=null,this._text=null,this._background=null,this.gl=null}},{\"./lib/background.js\":251,\"./lib/cube.js\":252,\"./lib/lines.js\":253,\"./lib/text.js\":255,\"./lib/ticks.js\":256}],251:[function(t,e,n){\"use strict\";e.exports=function(t){for(var e=[],n=[],s=0,l=0;l<3;++l)for(var c=(l+1)%3,u=(l+2)%3,h=[0,0,0],d=[0,0,0],f=-1;f<=1;f+=2){n.push(s,s+2,s+1,s+1,s+2,s+3),h[l]=f,d[l]=f;for(var p=-1;p<=1;p+=2){h[c]=p;for(var m=-1;m<=1;m+=2)h[u]=m,e.push(h[0],h[1],h[2],d[0],d[1],d[2]),s+=1}var g=c;c=u,u=g}var y=r(t,new Float32Array(e)),v=r(t,new Uint16Array(n),t.ELEMENT_ARRAY_BUFFER),_=i(t,[{buffer:y,type:t.FLOAT,size:3,offset:0,stride:24},{buffer:y,type:t.FLOAT,size:3,offset:12,stride:24}],v),b=a(t);return b.attributes.position.location=0,b.attributes.normal.location=1,new o(t,y,_,b)};var r=t(\"gl-buffer\"),i=t(\"gl-vao\"),a=t(\"./shaders\").bg;function o(t,e,n,r){this.gl=t,this.buffer=e,this.vao=n,this.shader=r}var s=o.prototype;s.draw=function(t,e,n,r,i,a){for(var o=!1,s=0;s<3;++s)o=o||i[s];if(o){var l=this.gl;l.enable(l.POLYGON_OFFSET_FILL),l.polygonOffset(1,2),this.shader.bind(),this.shader.uniforms={model:t,view:e,projection:n,bounds:r,enable:i,colors:a},this.vao.bind(),this.vao.draw(this.gl.TRIANGLES,36),this.vao.unbind(),l.disable(l.POLYGON_OFFSET_FILL)}},s.dispose=function(){this.vao.dispose(),this.buffer.dispose(),this.shader.dispose()}},{\"./shaders\":254,\"gl-buffer\":259,\"gl-vao\":358}],252:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,a,f){i(s,e,t),i(s,n,s);for(var v=0,_=0;_<2;++_){u[2]=a[_][2];for(var b=0;b<2;++b){u[1]=a[b][1];for(var x=0;x<2;++x)u[0]=a[x][0],d(l[v],u,s),v+=1}}var w=-1;for(_=0;_<8;++_){for(var k=l[_][3],M=0;M<3;++M)c[_][M]=l[_][M]/k;f&&(c[_][2]*=-1),k<0&&(w<0||c[_][2]<c[w][2])&&(w=_)}if(w<0){w=0;for(var T=0;T<3;++T){for(var S=(T+2)%3,A=(T+1)%3,L=-1,C=-1,E=0;E<2;++E)o(c[O=E<<T],c[O+(E<<S)+(1-E<<A)],c[O+(1-E<<S)+(E<<A)],h)<0||(E?L=1:C=1);if(L<0||C<0)C>L&&(w|=1<<T);else{for(E=0;E<2;++E){var O,D=p([l[O=E<<T],l[O+(E<<S)+(1-E<<A)],l[O+(1-E<<S)+(E<<A)],l[O+(1<<S)+(1<<A)]]);E?L=D:C=D}C>L&&(w|=1<<T)}}}var I=7^w,P=-1;for(_=0;_<8;++_)_!==w&&_!==I&&(P<0||c[P][1]>c[_][1])&&(P=_);var R=-1;for(_=0;_<3;++_)(j=P^1<<_)!==w&&j!==I&&(R<0&&(R=j),(A=c[j])[0]<c[R][0]&&(R=j));var z=-1;for(_=0;_<3;++_){var j;(j=P^1<<_)!==w&&j!==I&&j!==R&&(z<0&&(z=j),(A=c[j])[0]>c[z][0]&&(z=j))}var F=m;F[0]=F[1]=F[2]=0,F[r.log2(R^P)]=P&R,F[r.log2(P^z)]=P&z;var N=7^z;N===w||N===I?F[r.log2(z^(N=7^R))]=N&z:F[r.log2(R^N)]=N&R;var B=g,Y=w;for(T=0;T<3;++T)B[T]=Y&1<<T?-1:1;return y};var r=t(\"bit-twiddle\"),i=t(\"gl-mat4/multiply\"),a=t(\"split-polygon\"),o=t(\"robust-orientation\"),s=new Array(16),l=new Array(8),c=new Array(8),u=new Array(3),h=[0,0,0];function d(t,e,n){for(var r=0;r<4;++r){t[r]=n[12+r];for(var i=0;i<3;++i)t[r]+=e[i]*n[4*i+r]}}!function(){for(var t=0;t<8;++t)l[t]=[1,1,1,1],c[t]=[1,1,1]}();var f=[[0,0,1,0,0],[0,0,-1,1,0],[0,-1,0,1,0],[0,1,0,1,0],[-1,0,0,1,0],[1,0,0,1,0]];function p(t){for(var e=0;e<f.length;++e)if((t=a.positive(t,f[e])).length<3)return 0;var n=t[0],r=n[0]/n[3],i=n[1]/n[3],o=0;for(e=1;e+1<t.length;++e){var s=t[e],l=t[e+1];o+=Math.abs((s[0]/s[3]-r)*(l[1]/l[3]-i)-(s[1]/s[3]-i)*(l[0]/l[3]-r))}return o}var m=[1,1,1],g=[0,0,0],y={cubeEdges:m,axis:g}},{\"bit-twiddle\":97,\"gl-mat4/multiply\":295,\"robust-orientation\":548,\"split-polygon\":566}],253:[function(t,e,n){\"use strict\";e.exports=function(t,e,n){var o=[],s=[0,0,0],l=[0,0,0],c=[0,0,0],u=[0,0,0];o.push(0,0,1,0,1,1,0,0,-1,0,0,-1,0,1,1,0,1,-1);for(var h=0;h<3;++h){for(var d=o.length/3|0,p=0;p<n[h].length;++p)o.push(y=+n[h][p].x,0,1,y,1,1,y,0,-1,y,0,-1,y,1,1,y,1,-1);var m=o.length/3|0;s[h]=d,l[h]=m-d,d=o.length/3|0;for(var g=0;g<n[h].length;++g){var y;o.push(y=+n[h][g].x,0,1,y,1,1,y,0,-1,y,0,-1,y,1,1,y,1,-1)}m=o.length/3|0,c[h]=d,u[h]=m-d}var v=r(t,new Float32Array(o)),_=i(t,[{buffer:v,type:t.FLOAT,size:3,stride:0,offset:0}]),b=a(t);return b.attributes.position.location=0,new f(t,v,_,b,l,s,u,c)};var r=t(\"gl-buffer\"),i=t(\"gl-vao\"),a=t(\"./shaders\").line,o=[0,0,0],s=[0,0,0],l=[0,0,0],c=[0,0,0],u=[1,1];function h(t){return t[0]=t[1]=t[2]=0,t}function d(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function f(t,e,n,r,i,a,o,s){this.gl=t,this.vertBuffer=e,this.vao=n,this.shader=r,this.tickCount=i,this.tickOffset=a,this.gridCount=o,this.gridOffset=s}var p=f.prototype;p.bind=function(t,e,n){this.shader.bind(),this.shader.uniforms.model=t,this.shader.uniforms.view=e,this.shader.uniforms.projection=n,u[0]=this.gl.drawingBufferWidth,u[1]=this.gl.drawingBufferHeight,this.shader.uniforms.screenShape=u,this.vao.bind()},p.unbind=function(){this.vao.unbind()},p.drawAxisLine=function(t,e,n,r,i){var a=h(s);this.shader.uniforms.majorAxis=s,a[t]=e[1][t]-e[0][t],this.shader.uniforms.minorAxis=a;var o,u=d(c,n);u[t]+=e[0][t],this.shader.uniforms.offset=u,this.shader.uniforms.lineWidth=i,this.shader.uniforms.color=r,(o=h(l))[(t+2)%3]=1,this.shader.uniforms.screenAxis=o,this.vao.draw(this.gl.TRIANGLES,6),(o=h(l))[(t+1)%3]=1,this.shader.uniforms.screenAxis=o,this.vao.draw(this.gl.TRIANGLES,6)},p.drawAxisTicks=function(t,e,n,r,i){if(this.tickCount[t]){var a=h(o);a[t]=1,this.shader.uniforms.majorAxis=a,this.shader.uniforms.offset=e,this.shader.uniforms.minorAxis=n,this.shader.uniforms.color=r,this.shader.uniforms.lineWidth=i;var s=h(l);s[t]=1,this.shader.uniforms.screenAxis=s,this.vao.draw(this.gl.TRIANGLES,this.tickCount[t],this.tickOffset[t])}},p.drawGrid=function(t,e,n,r,i,a){if(this.gridCount[t]){var u=h(s);u[e]=n[1][e]-n[0][e],this.shader.uniforms.minorAxis=u;var f=d(c,r);f[e]+=n[0][e],this.shader.uniforms.offset=f;var p=h(o);p[t]=1,this.shader.uniforms.majorAxis=p;var m=h(l);m[t]=1,this.shader.uniforms.screenAxis=m,this.shader.uniforms.lineWidth=a,this.shader.uniforms.color=i,this.vao.draw(this.gl.TRIANGLES,this.gridCount[t],this.gridOffset[t])}},p.drawZero=function(t,e,n,r,i,a){var o=h(s);this.shader.uniforms.majorAxis=o,o[t]=n[1][t]-n[0][t],this.shader.uniforms.minorAxis=o;var u=d(c,r);u[t]+=n[0][t],this.shader.uniforms.offset=u;var f=h(l);f[e]=1,this.shader.uniforms.screenAxis=f,this.shader.uniforms.lineWidth=a,this.shader.uniforms.color=i,this.vao.draw(this.gl.TRIANGLES,6)},p.dispose=function(){this.vao.dispose(),this.vertBuffer.dispose(),this.shader.dispose()}},{\"./shaders\":254,\"gl-buffer\":259,\"gl-vao\":358}],254:[function(t,e,n){\"use strict\";var r=t(\"glslify\"),i=t(\"gl-shader\"),a=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position;\\n\\nuniform mat4 model, view, projection;\\nuniform vec3 offset, majorAxis, minorAxis, screenAxis;\\nuniform float lineWidth;\\nuniform vec2 screenShape;\\n\\nvec3 project(vec3 p) {\\n  vec4 pp = projection * view * model * vec4(p, 1.0);\\n  return pp.xyz / max(pp.w, 0.0001);\\n}\\n\\nvoid main() {\\n  vec3 major = position.x * majorAxis;\\n  vec3 minor = position.y * minorAxis;\\n\\n  vec3 vPosition = major + minor + offset;\\n  vec3 pPosition = project(vPosition);\\n  vec3 offset = project(vPosition + screenAxis * position.z);\\n\\n  vec2 screen = normalize((offset - pPosition).xy * screenShape) / screenShape;\\n\\n  gl_Position = vec4(pPosition + vec3(0.5 * screen * lineWidth, 0), 1.0);\\n}\\n\"]),o=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nuniform vec4 color;\\nvoid main() {\\n  gl_FragColor = color;\\n}\"]);n.line=function(t){return i(t,a,o,null,[{name:\"position\",type:\"vec3\"}])};var s=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position;\\n\\nuniform mat4 model, view, projection;\\nuniform vec3 offset, axis, alignDir, alignOpt;\\nuniform float scale, angle, pixelScale;\\nuniform vec2 resolution;\\n\\nvec3 project(vec3 p) {\\n  vec4 pp = projection * view * model * vec4(p, 1.0);\\n  return pp.xyz / max(pp.w, 0.0001);\\n}\\n\\nfloat computeViewAngle(vec3 a, vec3 b) {\\n  vec3 A = project(a);\\n  vec3 B = project(b);\\n\\n  return atan(\\n    (B.y - A.y) * resolution.y,\\n    (B.x - A.x) * resolution.x\\n  );\\n}\\n\\nconst float PI = 3.141592;\\nconst float TWO_PI = 2.0 * PI;\\nconst float HALF_PI = 0.5 * PI;\\nconst float ONE_AND_HALF_PI = 1.5 * PI;\\n\\nint option = int(floor(alignOpt.x + 0.001));\\nfloat hv_ratio =       alignOpt.y;\\nbool enableAlign =    (alignOpt.z != 0.0);\\n\\nfloat mod_angle(float a) {\\n  return mod(a, PI);\\n}\\n\\nfloat positive_angle(float a) {\\n  return mod_angle((a < 0.0) ?\\n    a + TWO_PI :\\n    a\\n  );\\n}\\n\\nfloat look_upwards(float a) {\\n  float b = positive_angle(a);\\n  return ((b > HALF_PI) && (b <= ONE_AND_HALF_PI)) ?\\n    b - PI :\\n    b;\\n}\\n\\nfloat look_horizontal_or_vertical(float a, float ratio) {\\n  // ratio controls the ratio between being horizontal to (vertical + horizontal)\\n  // if ratio is set to 0.5 then it is 50%, 50%.\\n  // when using a higher ratio e.g. 0.75 the result would\\n  // likely be more horizontal than vertical.\\n\\n  float b = positive_angle(a);\\n\\n  return\\n    (b < (      ratio) * HALF_PI) ? 0.0 :\\n    (b < (2.0 - ratio) * HALF_PI) ? -HALF_PI :\\n    (b < (2.0 + ratio) * HALF_PI) ? 0.0 :\\n    (b < (4.0 - ratio) * HALF_PI) ? HALF_PI :\\n                                    0.0;\\n}\\n\\nfloat roundTo(float a, float b) {\\n  return float(b * floor((a + 0.5 * b) / b));\\n}\\n\\nfloat look_round_n_directions(float a, int n) {\\n  float b = positive_angle(a);\\n  float div = TWO_PI / float(n);\\n  float c = roundTo(b, div);\\n  return look_upwards(c);\\n}\\n\\nfloat applyAlignOption(float rawAngle, float delta) {\\n  return\\n    (option >  2) ? look_round_n_directions(rawAngle + delta, option) :       // option 3-n: round to n directions\\n    (option == 2) ? look_horizontal_or_vertical(rawAngle + delta, hv_ratio) : // horizontal or vertical\\n    (option == 1) ? rawAngle + delta :       // use free angle, and flip to align with one direction of the axis\\n    (option == 0) ? look_upwards(rawAngle) : // use free angle, and stay upwards\\n    (option ==-1) ? 0.0 :                    // useful for backward compatibility, all texts remains horizontal\\n                    rawAngle;                // otherwise return back raw input angle\\n}\\n\\nbool isAxisTitle = (axis.x == 0.0) &&\\n                   (axis.y == 0.0) &&\\n                   (axis.z == 0.0);\\n\\nvoid main() {\\n  //Compute world offset\\n  float axisDistance = position.z;\\n  vec3 dataPosition = axisDistance * axis + offset;\\n\\n  float beta = angle; // i.e. user defined attributes for each tick\\n\\n  float axisAngle;\\n  float clipAngle;\\n  float flip;\\n\\n  if (enableAlign) {\\n    axisAngle = (isAxisTitle) ? HALF_PI :\\n                      computeViewAngle(dataPosition, dataPosition + axis);\\n    clipAngle = computeViewAngle(dataPosition, dataPosition + alignDir);\\n\\n    axisAngle += (sin(axisAngle) < 0.0) ? PI : 0.0;\\n    clipAngle += (sin(clipAngle) < 0.0) ? PI : 0.0;\\n\\n    flip = (dot(vec2(cos(axisAngle), sin(axisAngle)),\\n                vec2(sin(clipAngle),-cos(clipAngle))) > 0.0) ? 1.0 : 0.0;\\n\\n    beta += applyAlignOption(clipAngle, flip * PI);\\n  }\\n\\n  //Compute plane offset\\n  vec2 planeCoord = position.xy * pixelScale;\\n\\n  mat2 planeXform = scale * mat2(\\n     cos(beta), sin(beta),\\n    -sin(beta), cos(beta)\\n  );\\n\\n  vec2 viewOffset = 2.0 * planeXform * planeCoord / resolution;\\n\\n  //Compute clip position\\n  vec3 clipPosition = project(dataPosition);\\n\\n  //Apply text offset in clip coordinates\\n  clipPosition += vec3(viewOffset, 0.0);\\n\\n  //Done\\n  gl_Position = vec4(clipPosition, 1.0);\\n}\"]),l=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nuniform vec4 color;\\nvoid main() {\\n  gl_FragColor = color;\\n}\"]);n.text=function(t){return i(t,s,l,null,[{name:\"position\",type:\"vec3\"}])};var c=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position;\\nattribute vec3 normal;\\n\\nuniform mat4 model, view, projection;\\nuniform vec3 enable;\\nuniform vec3 bounds[2];\\n\\nvarying vec3 colorChannel;\\n\\nvoid main() {\\n\\n  vec3 signAxis = sign(bounds[1] - bounds[0]);\\n\\n  vec3 realNormal = signAxis * normal;\\n\\n  if(dot(realNormal, enable) > 0.0) {\\n    vec3 minRange = min(bounds[0], bounds[1]);\\n    vec3 maxRange = max(bounds[0], bounds[1]);\\n    vec3 nPosition = mix(minRange, maxRange, 0.5 * (position + 1.0));\\n    gl_Position = projection * view * model * vec4(nPosition, 1.0);\\n  } else {\\n    gl_Position = vec4(0,0,0,0);\\n  }\\n\\n  colorChannel = abs(realNormal);\\n}\"]),u=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nuniform vec4 colors[3];\\n\\nvarying vec3 colorChannel;\\n\\nvoid main() {\\n  gl_FragColor = colorChannel.x * colors[0] +\\n                 colorChannel.y * colors[1] +\\n                 colorChannel.z * colors[2];\\n}\"]);n.bg=function(t){return i(t,c,u,null,[{name:\"position\",type:\"vec3\"},{name:\"normal\",type:\"vec3\"}])}},{\"gl-shader\":335,glslify:257}],255:[function(t,e,n){(function(n){(function(){\"use strict\";e.exports=function(t,e,n,a,s,l){var u=r(t),h=i(t,[{buffer:u,size:3}]),d=o(t);d.attributes.position.location=0;var f=new c(t,d,u,h);return f.update(e,n,a,s,l),f};var r=t(\"gl-buffer\"),i=t(\"gl-vao\"),a=t(\"vectorize-text\"),o=t(\"./shaders\").text,s=window||n.global||{},l=s.__TEXT_CACHE||{};function c(t,e,n,r){this.gl=t,this.shader=e,this.buffer=n,this.vao=r,this.tickOffset=this.tickCount=this.labelOffset=this.labelCount=null}s.__TEXT_CACHE={};var u=c.prototype,h=[0,0];u.bind=function(t,e,n,r){this.vao.bind(),this.shader.bind();var i=this.shader.uniforms;i.model=t,i.view=e,i.projection=n,i.pixelScale=r,h[0]=this.gl.drawingBufferWidth,h[1]=this.gl.drawingBufferHeight,this.shader.uniforms.resolution=h},u.unbind=function(){this.vao.unbind()},u.update=function(t,e,n,r,i){var o=[];function s(t,e,n,r,i,s){var c=l[n];c||(c=l[n]={});var u=c[e];u||(u=c[e]=function(t,e){try{return a(t,e)}catch(n){return console.warn('error vectorizing text:\"'+t+'\" error:',n),{cells:[],positions:[]}}}(e,{triangles:!0,font:n,textAlign:\"center\",textBaseline:\"middle\",lineSpacing:i,styletags:s}));for(var h=(r||12)/12,d=u.positions,f=u.cells,p=0,m=f.length;p<m;++p)for(var g=f[p],y=2;y>=0;--y){var v=d[g[y]];o.push(h*v[0],-h*v[1],t)}}for(var c=[0,0,0],u=[0,0,0],h=[0,0,0],d=[0,0,0],f={breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0},p=0;p<3;++p){h[p]=o.length/3|0,s(.5*(t[0][p]+t[1][p]),e[p],n[p],12,1.25,f),d[p]=(o.length/3|0)-h[p],c[p]=o.length/3|0;for(var m=0;m<r[p].length;++m)r[p][m].text&&s(r[p][m].x,r[p][m].text,r[p][m].font||i,r[p][m].fontSize||12,1.25,f);u[p]=(o.length/3|0)-c[p]}this.buffer.update(o),this.tickOffset=c,this.tickCount=u,this.labelOffset=h,this.labelCount=d},u.drawTicks=function(t,e,n,r,i,a,o,s){this.tickCount[t]&&(this.shader.uniforms.axis=a,this.shader.uniforms.color=i,this.shader.uniforms.angle=n,this.shader.uniforms.scale=e,this.shader.uniforms.offset=r,this.shader.uniforms.alignDir=o,this.shader.uniforms.alignOpt=s,this.vao.draw(this.gl.TRIANGLES,this.tickCount[t],this.tickOffset[t]))},u.drawLabel=function(t,e,n,r,i,a,o,s){this.labelCount[t]&&(this.shader.uniforms.axis=a,this.shader.uniforms.color=i,this.shader.uniforms.angle=n,this.shader.uniforms.scale=e,this.shader.uniforms.offset=r,this.shader.uniforms.alignDir=o,this.shader.uniforms.alignOpt=s,this.vao.draw(this.gl.TRIANGLES,this.labelCount[t],this.labelOffset[t]))},u.dispose=function(){this.shader.dispose(),this.vao.dispose(),this.buffer.dispose()}}).call(this)}).call(this,t(\"_process\"))},{\"./shaders\":254,_process:526,\"gl-buffer\":259,\"gl-vao\":358,\"vectorize-text\":600}],256:[function(t,e,n){\"use strict\";function r(t,e){var n=t+\"\",r=n.indexOf(\".\"),i=0;r>=0&&(i=n.length-r-1);var a=Math.pow(10,i),o=Math.round(t*e*a),s=o+\"\";if(s.indexOf(\"e\")>=0)return s;var l=o/a,c=o%a;o<0?(l=0|-Math.ceil(l),c=0|-c):(l=0|Math.floor(l),c|=0);var u=\"\"+l;if(o<0&&(u=\"-\"+u),i){for(var h=\"\"+c;h.length<i;)h=\"0\"+h;return u+\".\"+h}return u}n.create=function(t,e){for(var n=[],i=0;i<3;++i){for(var a=[],o=0;o*e[i]<=t[1][i];++o)a.push({x:o*e[i],text:r(e[i],o)});for(o=-1;o*e[i]>=t[0][i];--o)a.push({x:o*e[i],text:r(e[i],o)});n.push(a)}return n},n.equal=function(t,e){for(var n=0;n<3;++n){if(t[n].length!==e[n].length)return!1;for(var r=0;r<t[n].length;++r){var i=t[n][r],a=e[n][r];if(i.x!==a.x||i.text!==a.text||i.font!==a.font||i.fontColor!==a.fontColor||i.fontSize!==a.fontSize||i.dx!==a.dx||i.dy!==a.dy)return!1}}return!0}},{}],257:[function(t,e,n){e.exports=function(t){\"string\"==typeof t&&(t=[t]);for(var e=[].slice.call(arguments,1),n=[],r=0;r<t.length-1;r++)n.push(t[r],e[r]||\"\");return n.push(t[r]),n.join(\"\")}},{}],258:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,l,h){var d=e.model||c,f=e.view||c,y=e.projection||c,v=e._ortho||!1,_=t.bounds,b=(h=h||a(d,f,y,_,v)).axis;o(u,f,d),o(u,y,u);for(var x=m,w=0;w<3;++w)x[w].lo=1/0,x[w].hi=-1/0,x[w].pixelsPerDataUnit=1/0;var k=r(s(u,u));s(u,u);for(var M=0;M<3;++M){var T=(M+1)%3,S=(M+2)%3,A=g;t:for(w=0;w<2;++w){var L=[];if(b[M]<0!=!!w){A[M]=_[w][M];for(var C=0;C<2;++C){A[T]=_[C^w][T];for(var E=0;E<2;++E)A[S]=_[E^C^w][S],L.push(A.slice())}var O=v?5:4;for(C=O;C===O;++C){if(0===L.length)continue t;L=i.positive(L,k[C])}for(C=0;C<L.length;++C){var D=p(g,u,S=L[C],n,l);for(E=0;E<3;++E)x[E].lo=Math.min(x[E].lo,S[E]),x[E].hi=Math.max(x[E].hi,S[E]),E!==M&&(x[E].pixelsPerDataUnit=Math.min(x[E].pixelsPerDataUnit,Math.abs(D[E])))}}}}return x};var r=t(\"extract-frustum-planes\"),i=t(\"split-polygon\"),a=t(\"./lib/cube.js\"),o=t(\"gl-mat4/multiply\"),s=t(\"gl-mat4/transpose\"),l=t(\"gl-vec4/transformMat4\"),c=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),u=new Float32Array(16);function h(t,e,n){this.lo=t,this.hi=e,this.pixelsPerDataUnit=n}var d=[0,0,0,1],f=[0,0,0,1];function p(t,e,n,r,i){for(var a=0;a<3;++a){for(var o=d,s=f,c=0;c<3;++c)s[c]=o[c]=n[c];s[3]=o[3]=1,s[a]+=1,l(s,s,e),s[3]<0&&(t[a]=1/0),o[a]-=1,l(o,o,e),o[3]<0&&(t[a]=1/0);var u=(o[0]/o[3]-s[0]/s[3])*r,h=(o[1]/o[3]-s[1]/s[3])*i;t[a]=.25*Math.sqrt(u*u+h*h)}return t}var m=[new h(1/0,-1/0,1/0),new h(1/0,-1/0,1/0),new h(1/0,-1/0,1/0)],g=[0,0,0]},{\"./lib/cube.js\":252,\"extract-frustum-planes\":240,\"gl-mat4/multiply\":295,\"gl-mat4/transpose\":306,\"gl-vec4/transformMat4\":429,\"split-polygon\":566}],259:[function(t,e,n){\"use strict\";var r=t(\"typedarray-pool\"),i=t(\"ndarray-ops\"),a=t(\"ndarray\"),o=[\"uint8\",\"uint8_clamped\",\"uint16\",\"uint32\",\"int8\",\"int16\",\"int32\",\"float32\"];function s(t,e,n,r,i){this.gl=t,this.type=e,this.handle=n,this.length=r,this.usage=i}var l=s.prototype;function c(t,e,n,r,i,a){var o=i.length*i.BYTES_PER_ELEMENT;if(a<0)return t.bufferData(e,i,r),o;if(o+a>n)throw new Error(\"gl-buffer: If resizing buffer, must not specify offset\");return t.bufferSubData(e,a,i),n}l.bind=function(){this.gl.bindBuffer(this.type,this.handle)},l.unbind=function(){this.gl.bindBuffer(this.type,null)},l.dispose=function(){this.gl.deleteBuffer(this.handle)},l.update=function(t,e){if(\"number\"!=typeof e&&(e=-1),this.bind(),\"object\"==typeof t&&void 0!==t.shape){var n=t.dtype;if(o.indexOf(n)<0&&(n=\"float32\"),this.type===this.gl.ELEMENT_ARRAY_BUFFER&&(n=gl.getExtension(\"OES_element_index_uint\")&&\"uint16\"!==n?\"uint32\":\"uint16\"),n===t.dtype&&function(t,e){for(var n=1,r=e.length-1;r>=0;--r){if(e[r]!==n)return!1;n*=t[r]}return!0}(t.shape,t.stride))this.length=c(this.gl,this.type,this.length,this.usage,0===t.offset&&t.data.length===t.shape[0]?t.data:t.data.subarray(t.offset,t.shape[0]),e);else{var s=r.malloc(t.size,n),l=a(s,t.shape);i.assign(l,t),this.length=c(this.gl,this.type,this.length,this.usage,e<0?s:s.subarray(0,t.size),e),r.free(s)}}else if(Array.isArray(t)){var u;u=function(t,e){for(var n=r.malloc(t.length,e),i=t.length,a=0;a<i;++a)n[a]=t[a];return n}(t,this.type===this.gl.ELEMENT_ARRAY_BUFFER?\"uint16\":\"float32\"),this.length=c(this.gl,this.type,this.length,this.usage,e<0?u:u.subarray(0,t.length),e),r.free(u)}else if(\"object\"==typeof t&&\"number\"==typeof t.length)this.length=c(this.gl,this.type,this.length,this.usage,t,e);else{if(\"number\"!=typeof t&&void 0!==t)throw new Error(\"gl-buffer: Invalid data type\");if(e>=0)throw new Error(\"gl-buffer: Cannot specify offset when resizing buffer\");(t|=0)<=0&&(t=1),this.gl.bufferData(this.type,0|t,this.usage),this.length=t}},e.exports=function(t,e,n,r){if(r=r||t.DYNAMIC_DRAW,(n=n||t.ARRAY_BUFFER)!==t.ARRAY_BUFFER&&n!==t.ELEMENT_ARRAY_BUFFER)throw new Error(\"gl-buffer: Invalid type for webgl buffer, must be either gl.ARRAY_BUFFER or gl.ELEMENT_ARRAY_BUFFER\");if(r!==t.DYNAMIC_DRAW&&r!==t.STATIC_DRAW&&r!==t.STREAM_DRAW)throw new Error(\"gl-buffer: Invalid usage for buffer, must be either gl.DYNAMIC_DRAW, gl.STATIC_DRAW or gl.STREAM_DRAW\");var i=t.createBuffer(),a=new s(t,n,i,0,r);return a.update(e),a}},{ndarray:495,\"ndarray-ops\":490,\"typedarray-pool\":595}],260:[function(t,e,n){\"use strict\";var r=t(\"gl-vec3\");e.exports=function(t,e){var n=t.positions,i=t.vectors,a={positions:[],vertexIntensity:[],vertexIntensityBounds:t.vertexIntensityBounds,vectors:[],cells:[],coneOffset:t.coneOffset,colormap:t.colormap};if(0===t.positions.length)return e&&(e[0]=[0,0,0],e[1]=[0,0,0]),a;for(var o=0,s=1/0,l=-1/0,c=1/0,u=-1/0,h=1/0,d=-1/0,f=null,p=null,m=[],g=1/0,y=!1,v=0;v<n.length;v++){var _=n[v];s=Math.min(_[0],s),l=Math.max(_[0],l),c=Math.min(_[1],c),u=Math.max(_[1],u),h=Math.min(_[2],h),d=Math.max(_[2],d);var b=i[v];if(r.length(b)>o&&(o=r.length(b)),v){var x=2*r.distance(f,_)/(r.length(p)+r.length(b));x?(g=Math.min(g,x),y=!1):y=!0}y||(f=_,p=b),m.push(b)}var w=[l,u,d];e&&(e[0]=[s,c,h],e[1]=w),0===o&&(o=1);var k=1/o;isFinite(g)||(g=1),a.vectorScale=g;var M=t.coneSize||.5;t.absoluteConeSize&&(M=t.absoluteConeSize*k),a.coneScale=M,v=0;for(var T=0;v<n.length;v++)for(var S=(_=n[v])[0],A=_[1],L=_[2],C=m[v],E=r.length(C)*k,O=0;O<8;O++){a.positions.push([S,A,L,T++]),a.positions.push([S,A,L,T++]),a.positions.push([S,A,L,T++]),a.positions.push([S,A,L,T++]),a.positions.push([S,A,L,T++]),a.positions.push([S,A,L,T++]),a.vectors.push(C),a.vectors.push(C),a.vectors.push(C),a.vectors.push(C),a.vectors.push(C),a.vectors.push(C),a.vertexIntensity.push(E,E,E),a.vertexIntensity.push(E,E,E);var D=a.positions.length;a.cells.push([D-6,D-5,D-4],[D-3,D-2,D-1])}return a};var i=t(\"./lib/shaders\");e.exports.createMesh=t(\"./create_mesh\"),e.exports.createConeMesh=function(t,n){return e.exports.createMesh(t,n,{shaders:i,traceType:\"cone\"})}},{\"./create_mesh\":261,\"./lib/shaders\":262,\"gl-vec3\":377}],261:[function(t,e,n){\"use strict\";var r=t(\"gl-shader\"),i=t(\"gl-buffer\"),a=t(\"gl-vao\"),o=t(\"gl-texture2d\"),s=t(\"gl-mat4/multiply\"),l=t(\"gl-mat4/invert\"),c=t(\"ndarray\"),u=t(\"colormap\"),h=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function d(t,e,n,r,i,a,o,s,l,c,u){this.gl=t,this.pixelRatio=1,this.cells=[],this.positions=[],this.intensity=[],this.texture=e,this.dirty=!0,this.triShader=n,this.pickShader=r,this.trianglePositions=i,this.triangleVectors=a,this.triangleColors=s,this.triangleUVs=l,this.triangleIds=o,this.triangleVAO=c,this.triangleCount=0,this.pickId=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lightPosition=[1e5,1e5,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.opacity=1,this.traceType=u,this.tubeScale=1,this.coneScale=2,this.vectorScale=1,this.coneOffset=.25,this._model=h,this._view=h,this._projection=h,this._resolution=[1,1]}var f=d.prototype;function p(t,e){var n=r(t,e.meshShader.vertex,e.meshShader.fragment,null,e.meshShader.attributes);return n.attributes.position.location=0,n.attributes.color.location=2,n.attributes.uv.location=3,n.attributes.vector.location=4,n}function m(t,e){var n=r(t,e.pickShader.vertex,e.pickShader.fragment,null,e.pickShader.attributes);return n.attributes.position.location=0,n.attributes.id.location=1,n.attributes.vector.location=4,n}f.isOpaque=function(){return this.opacity>=1},f.isTransparent=function(){return this.opacity<1},f.pickSlots=1,f.setPickBase=function(t){this.pickId=t},f.update=function(t){t=t||{};var e=this.gl;this.dirty=!0,\"lightPosition\"in t&&(this.lightPosition=t.lightPosition),\"opacity\"in t&&(this.opacity=t.opacity),\"ambient\"in t&&(this.ambientLight=t.ambient),\"diffuse\"in t&&(this.diffuseLight=t.diffuse),\"specular\"in t&&(this.specularLight=t.specular),\"roughness\"in t&&(this.roughness=t.roughness),\"fresnel\"in t&&(this.fresnel=t.fresnel),void 0!==t.tubeScale&&(this.tubeScale=t.tubeScale),void 0!==t.vectorScale&&(this.vectorScale=t.vectorScale),void 0!==t.coneScale&&(this.coneScale=t.coneScale),void 0!==t.coneOffset&&(this.coneOffset=t.coneOffset),t.colormap&&(this.texture.shape=[256,256],this.texture.minFilter=e.LINEAR_MIPMAP_LINEAR,this.texture.magFilter=e.LINEAR,this.texture.setPixels(function(t){for(var e=u({colormap:t,nshades:256,format:\"rgba\"}),n=new Uint8Array(1024),r=0;r<256;++r){for(var i=e[r],a=0;a<3;++a)n[4*r+a]=i[a];n[4*r+3]=255*i[3]}return c(n,[256,256,4],[4,0,1])}(t.colormap)),this.texture.generateMipmap());var n=t.cells,r=t.positions,i=t.vectors;if(r&&n&&i){var a=[],o=[],s=[],l=[],h=[];this.cells=n,this.positions=r,this.vectors=i;var d=t.meshColor||[1,1,1,1],f=t.vertexIntensity,p=1/0,m=-1/0;if(f)if(t.vertexIntensityBounds)p=+t.vertexIntensityBounds[0],m=+t.vertexIntensityBounds[1];else for(var g=0;g<f.length;++g){var y=f[g];p=Math.min(p,y),m=Math.max(m,y)}else for(g=0;g<r.length;++g)y=r[g][2],p=Math.min(p,y),m=Math.max(m,y);for(this.intensity=f||function(t){for(var e=t.length,n=new Array(e),r=0;r<e;++r)n[r]=t[r][2];return n}(r),this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],g=0;g<r.length;++g)for(var v=r[g],_=0;_<3;++_)!isNaN(v[_])&&isFinite(v[_])&&(this.bounds[0][_]=Math.min(this.bounds[0][_],v[_]),this.bounds[1][_]=Math.max(this.bounds[1][_],v[_]));var b=0;t:for(g=0;g<n.length;++g){var x=n[g];switch(x.length){case 3:for(_=0;_<3;++_){v=r[k=x[_]];for(var w=0;w<3;++w)if(isNaN(v[w])||!isFinite(v[w]))continue t}for(_=0;_<3;++_){var k;a.push((v=r[k=x[2-_]])[0],v[1],v[2],v[3]);var M,T=i[k];o.push(T[0],T[1],T[2],T[3]||0),s.push(d[0],d[1],d[2],3===d.length?1:d[3]),l.push((M=f?[(f[k]-p)/(m-p),0]:[(v[2]-p)/(m-p),0])[0],M[1]),h.push(g)}b+=1}}this.triangleCount=b,this.trianglePositions.update(a),this.triangleVectors.update(o),this.triangleColors.update(s),this.triangleUVs.update(l),this.triangleIds.update(new Uint32Array(h))}},f.drawTransparent=f.draw=function(t){for(var e=this.gl,n=(t=t||{}).model||h,r=t.view||h,i=t.projection||h,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);var c={model:n,view:r,projection:i,inverseModel:h.slice(),clipBounds:a,kambient:this.ambientLight,kdiffuse:this.diffuseLight,kspecular:this.specularLight,roughness:this.roughness,fresnel:this.fresnel,eyePosition:[0,0,0],lightPosition:[0,0,0],opacity:this.opacity,tubeScale:this.tubeScale,vectorScale:this.vectorScale,coneScale:this.coneScale,coneOffset:this.coneOffset,texture:0};c.inverseModel=l(c.inverseModel,c.model),e.disable(e.CULL_FACE),this.texture.bind(0);var u=new Array(16);for(s(u,c.view,c.model),s(u,c.projection,u),l(u,u),o=0;o<3;++o)c.eyePosition[o]=u[12+o]/u[15];var d=u[15];for(o=0;o<3;++o)d+=this.lightPosition[o]*u[4*o+3];for(o=0;o<3;++o){for(var f=u[12+o],p=0;p<3;++p)f+=u[4*p+o]*this.lightPosition[p];c.lightPosition[o]=f/d}if(this.triangleCount>0){var m=this.triShader;m.bind(),m.uniforms=c,this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()}},f.drawPick=function(t){for(var e=this.gl,n=(t=t||{}).model||h,r=t.view||h,i=t.projection||h,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);this._model=[].slice.call(n),this._view=[].slice.call(r),this._projection=[].slice.call(i),this._resolution=[e.drawingBufferWidth,e.drawingBufferHeight];var s={model:n,view:r,projection:i,clipBounds:a,tubeScale:this.tubeScale,vectorScale:this.vectorScale,coneScale:this.coneScale,coneOffset:this.coneOffset,pickId:this.pickId/255},l=this.pickShader;l.bind(),l.uniforms=s,this.triangleCount>0&&(this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind())},f.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=t.value[0]+256*t.value[1]+65536*t.value[2],n=this.cells[e],r=this.positions[n[1]].slice(0,3),i={position:r,dataCoordinate:r,index:Math.floor(n[1]/48)};return\"cone\"===this.traceType?i.index=Math.floor(n[1]/48):\"streamtube\"===this.traceType&&(i.intensity=this.intensity[n[1]],i.velocity=this.vectors[n[1]].slice(0,3),i.divergence=this.vectors[n[1]][3],i.index=e),i},f.dispose=function(){this.texture.dispose(),this.triShader.dispose(),this.pickShader.dispose(),this.triangleVAO.dispose(),this.trianglePositions.dispose(),this.triangleVectors.dispose(),this.triangleColors.dispose(),this.triangleUVs.dispose(),this.triangleIds.dispose()},e.exports=function(t,e,n){var r=n.shaders;1===arguments.length&&(t=(e=t).gl);var s=p(t,r),l=m(t,r),u=o(t,c(new Uint8Array([255,255,255,255]),[1,1,4]));u.generateMipmap(),u.minFilter=t.LINEAR_MIPMAP_LINEAR,u.magFilter=t.LINEAR;var h=i(t),f=i(t),g=i(t),y=i(t),v=i(t),_=new d(t,u,s,l,h,f,v,g,y,a(t,[{buffer:h,type:t.FLOAT,size:4},{buffer:v,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:g,type:t.FLOAT,size:4},{buffer:y,type:t.FLOAT,size:2},{buffer:f,type:t.FLOAT,size:4}]),n.traceType||\"cone\");return _.update(e),_}},{colormap:131,\"gl-buffer\":259,\"gl-mat4/invert\":293,\"gl-mat4/multiply\":295,\"gl-shader\":335,\"gl-texture2d\":353,\"gl-vao\":358,ndarray:495}],262:[function(t,e,n){var r=t(\"glslify\"),i=r([\"precision highp float;\\n\\nprecision highp float;\\n#define GLSLIFY 1\\n\\nvec3 getOrthogonalVector(vec3 v) {\\n  // Return up-vector for only-z vector.\\n  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\\n  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.\\n  // Assign z = 0, x = -b, y = a:\\n  // a*-b + b*a + c*0 = -ba + ba + 0 = 0\\n  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\\n    return normalize(vec3(-v.y, v.x, 0.0));\\n  } else {\\n    return normalize(vec3(0.0, v.z, -v.y));\\n  }\\n}\\n\\n// Calculate the cone vertex and normal at the given index.\\n//\\n// The returned vertex is for a cone with its top at origin and height of 1.0,\\n// pointing in the direction of the vector attribute.\\n//\\n// Each cone is made up of a top vertex, a center base vertex and base perimeter vertices.\\n// These vertices are used to make up the triangles of the cone by the following:\\n//   segment + 0 top vertex\\n//   segment + 1 perimeter vertex a+1\\n//   segment + 2 perimeter vertex a\\n//   segment + 3 center base vertex\\n//   segment + 4 perimeter vertex a\\n//   segment + 5 perimeter vertex a+1\\n// Where segment is the number of the radial segment * 6 and a is the angle at that radial segment.\\n// To go from index to segment, floor(index / 6)\\n// To go from segment to angle, 2*pi * (segment/segmentCount)\\n// To go from index to segment index, index - (segment*6)\\n//\\nvec3 getConePosition(vec3 d, float rawIndex, float coneOffset, out vec3 normal) {\\n\\n  const float segmentCount = 8.0;\\n\\n  float index = rawIndex - floor(rawIndex /\\n    (segmentCount * 6.0)) *\\n    (segmentCount * 6.0);\\n\\n  float segment = floor(0.001 + index/6.0);\\n  float segmentIndex = index - (segment*6.0);\\n\\n  normal = -normalize(d);\\n\\n  if (segmentIndex > 2.99 && segmentIndex < 3.01) {\\n    return mix(vec3(0.0), -d, coneOffset);\\n  }\\n\\n  float nextAngle = (\\n    (segmentIndex > 0.99 &&  segmentIndex < 1.01) ||\\n    (segmentIndex > 4.99 &&  segmentIndex < 5.01)\\n  ) ? 1.0 : 0.0;\\n  float angle = 2.0 * 3.14159 * ((segment + nextAngle) / segmentCount);\\n\\n  vec3 v1 = mix(d, vec3(0.0), coneOffset);\\n  vec3 v2 = v1 - d;\\n\\n  vec3 u = getOrthogonalVector(d);\\n  vec3 v = normalize(cross(u, d));\\n\\n  vec3 x = u * cos(angle) * length(d)*0.25;\\n  vec3 y = v * sin(angle) * length(d)*0.25;\\n  vec3 v3 = v2 + x + y;\\n  if (segmentIndex < 3.0) {\\n    vec3 tx = u * sin(angle);\\n    vec3 ty = v * -cos(angle);\\n    vec3 tangent = tx + ty;\\n    normal = normalize(cross(v3 - v1, tangent));\\n  }\\n\\n  if (segmentIndex == 0.0) {\\n    return mix(d, vec3(0.0), coneOffset);\\n  }\\n  return v3;\\n}\\n\\nattribute vec3 vector;\\nattribute vec4 color, position;\\nattribute vec2 uv;\\n\\nuniform float vectorScale, coneScale, coneOffset;\\nuniform mat4 model, view, projection, inverseModel;\\nuniform vec3 eyePosition, lightPosition;\\n\\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  // Scale the vector magnitude to stay constant with\\n  // model & view changes.\\n  vec3 normal;\\n  vec3 XYZ = getConePosition(mat3(model) * ((vectorScale * coneScale) * vector), position.w, coneOffset, normal);\\n  vec4 conePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\\n\\n  //Lighting geometry parameters\\n  vec4 cameraCoordinate = view * conePosition;\\n  cameraCoordinate.xyz /= cameraCoordinate.w;\\n  f_lightDirection = lightPosition - cameraCoordinate.xyz;\\n  f_eyeDirection   = eyePosition - cameraCoordinate.xyz;\\n  f_normal = normalize((vec4(normal, 0.0) * inverseModel).xyz);\\n\\n  // vec4 m_position  = model * vec4(conePosition, 1.0);\\n  vec4 t_position  = view * conePosition;\\n  gl_Position      = projection * t_position;\\n\\n  f_color          = color;\\n  f_data           = conePosition.xyz;\\n  f_position       = position.xyz;\\n  f_uv             = uv;\\n}\\n\"]),a=r([\"#extension GL_OES_standard_derivatives : enable\\n\\nprecision highp float;\\n#define GLSLIFY 1\\n\\nfloat beckmannDistribution(float x, float roughness) {\\n  float NdotH = max(x, 0.0001);\\n  float cos2Alpha = NdotH * NdotH;\\n  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\\n  float roughness2 = roughness * roughness;\\n  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\\n  return exp(tan2Alpha / roughness2) / denom;\\n}\\n\\nfloat cookTorranceSpecular(\\n  vec3 lightDirection,\\n  vec3 viewDirection,\\n  vec3 surfaceNormal,\\n  float roughness,\\n  float fresnel) {\\n\\n  float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\\n  float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\\n\\n  //Half angle vector\\n  vec3 H = normalize(lightDirection + viewDirection);\\n\\n  //Geometric term\\n  float NdotH = max(dot(surfaceNormal, H), 0.0);\\n  float VdotH = max(dot(viewDirection, H), 0.000001);\\n  float LdotH = max(dot(lightDirection, H), 0.000001);\\n  float G1 = (2.0 * NdotH * VdotN) / VdotH;\\n  float G2 = (2.0 * NdotH * LdotN) / LdotH;\\n  float G = min(1.0, min(G1, G2));\\n  \\n  //Distribution term\\n  float D = beckmannDistribution(NdotH, roughness);\\n\\n  //Fresnel term\\n  float F = pow(1.0 - VdotN, fresnel);\\n\\n  //Multiply terms and done\\n  return  G * F * D / max(3.14159265 * VdotN, 0.000001);\\n}\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 clipBounds[2];\\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\\nuniform sampler2D texture;\\n\\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\n  vec3 N = normalize(f_normal);\\n  vec3 L = normalize(f_lightDirection);\\n  vec3 V = normalize(f_eyeDirection);\\n\\n  if(gl_FrontFacing) {\\n    N = -N;\\n  }\\n\\n  float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\\n  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\\n\\n  vec4 surfaceColor = f_color * texture2D(texture, f_uv);\\n  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\\n\\n  gl_FragColor = litColor * opacity;\\n}\\n\"]),o=r([\"precision highp float;\\n\\nprecision highp float;\\n#define GLSLIFY 1\\n\\nvec3 getOrthogonalVector(vec3 v) {\\n  // Return up-vector for only-z vector.\\n  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\\n  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.\\n  // Assign z = 0, x = -b, y = a:\\n  // a*-b + b*a + c*0 = -ba + ba + 0 = 0\\n  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\\n    return normalize(vec3(-v.y, v.x, 0.0));\\n  } else {\\n    return normalize(vec3(0.0, v.z, -v.y));\\n  }\\n}\\n\\n// Calculate the cone vertex and normal at the given index.\\n//\\n// The returned vertex is for a cone with its top at origin and height of 1.0,\\n// pointing in the direction of the vector attribute.\\n//\\n// Each cone is made up of a top vertex, a center base vertex and base perimeter vertices.\\n// These vertices are used to make up the triangles of the cone by the following:\\n//   segment + 0 top vertex\\n//   segment + 1 perimeter vertex a+1\\n//   segment + 2 perimeter vertex a\\n//   segment + 3 center base vertex\\n//   segment + 4 perimeter vertex a\\n//   segment + 5 perimeter vertex a+1\\n// Where segment is the number of the radial segment * 6 and a is the angle at that radial segment.\\n// To go from index to segment, floor(index / 6)\\n// To go from segment to angle, 2*pi * (segment/segmentCount)\\n// To go from index to segment index, index - (segment*6)\\n//\\nvec3 getConePosition(vec3 d, float rawIndex, float coneOffset, out vec3 normal) {\\n\\n  const float segmentCount = 8.0;\\n\\n  float index = rawIndex - floor(rawIndex /\\n    (segmentCount * 6.0)) *\\n    (segmentCount * 6.0);\\n\\n  float segment = floor(0.001 + index/6.0);\\n  float segmentIndex = index - (segment*6.0);\\n\\n  normal = -normalize(d);\\n\\n  if (segmentIndex > 2.99 && segmentIndex < 3.01) {\\n    return mix(vec3(0.0), -d, coneOffset);\\n  }\\n\\n  float nextAngle = (\\n    (segmentIndex > 0.99 &&  segmentIndex < 1.01) ||\\n    (segmentIndex > 4.99 &&  segmentIndex < 5.01)\\n  ) ? 1.0 : 0.0;\\n  float angle = 2.0 * 3.14159 * ((segment + nextAngle) / segmentCount);\\n\\n  vec3 v1 = mix(d, vec3(0.0), coneOffset);\\n  vec3 v2 = v1 - d;\\n\\n  vec3 u = getOrthogonalVector(d);\\n  vec3 v = normalize(cross(u, d));\\n\\n  vec3 x = u * cos(angle) * length(d)*0.25;\\n  vec3 y = v * sin(angle) * length(d)*0.25;\\n  vec3 v3 = v2 + x + y;\\n  if (segmentIndex < 3.0) {\\n    vec3 tx = u * sin(angle);\\n    vec3 ty = v * -cos(angle);\\n    vec3 tangent = tx + ty;\\n    normal = normalize(cross(v3 - v1, tangent));\\n  }\\n\\n  if (segmentIndex == 0.0) {\\n    return mix(d, vec3(0.0), coneOffset);\\n  }\\n  return v3;\\n}\\n\\nattribute vec4 vector;\\nattribute vec4 position;\\nattribute vec4 id;\\n\\nuniform mat4 model, view, projection;\\nuniform float vectorScale, coneScale, coneOffset;\\n\\nvarying vec3 f_position;\\nvarying vec4 f_id;\\n\\nvoid main() {\\n  vec3 normal;\\n  vec3 XYZ = getConePosition(mat3(model) * ((vectorScale * coneScale) * vector.xyz), position.w, coneOffset, normal);\\n  vec4 conePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\\n  gl_Position = projection * view * conePosition;\\n  f_id        = id;\\n  f_position  = position.xyz;\\n}\\n\"]),s=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3  clipBounds[2];\\nuniform float pickId;\\n\\nvarying vec3 f_position;\\nvarying vec4 f_id;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\n\\n  gl_FragColor = vec4(pickId, f_id.xyz);\\n}\"]);n.meshShader={vertex:i,fragment:a,attributes:[{name:\"position\",type:\"vec4\"},{name:\"color\",type:\"vec4\"},{name:\"uv\",type:\"vec2\"},{name:\"vector\",type:\"vec3\"}]},n.pickShader={vertex:o,fragment:s,attributes:[{name:\"position\",type:\"vec4\"},{name:\"id\",type:\"vec4\"},{name:\"vector\",type:\"vec3\"}]}},{glslify:263}],263:[function(t,e,n){arguments[4][257][0].apply(n,arguments)},{dup:257}],264:[function(t,e,n){e.exports={0:\"NONE\",1:\"ONE\",2:\"LINE_LOOP\",3:\"LINE_STRIP\",4:\"TRIANGLES\",5:\"TRIANGLE_STRIP\",6:\"TRIANGLE_FAN\",256:\"DEPTH_BUFFER_BIT\",512:\"NEVER\",513:\"LESS\",514:\"EQUAL\",515:\"LEQUAL\",516:\"GREATER\",517:\"NOTEQUAL\",518:\"GEQUAL\",519:\"ALWAYS\",768:\"SRC_COLOR\",769:\"ONE_MINUS_SRC_COLOR\",770:\"SRC_ALPHA\",771:\"ONE_MINUS_SRC_ALPHA\",772:\"DST_ALPHA\",773:\"ONE_MINUS_DST_ALPHA\",774:\"DST_COLOR\",775:\"ONE_MINUS_DST_COLOR\",776:\"SRC_ALPHA_SATURATE\",1024:\"STENCIL_BUFFER_BIT\",1028:\"FRONT\",1029:\"BACK\",1032:\"FRONT_AND_BACK\",1280:\"INVALID_ENUM\",1281:\"INVALID_VALUE\",1282:\"INVALID_OPERATION\",1285:\"OUT_OF_MEMORY\",1286:\"INVALID_FRAMEBUFFER_OPERATION\",2304:\"CW\",2305:\"CCW\",2849:\"LINE_WIDTH\",2884:\"CULL_FACE\",2885:\"CULL_FACE_MODE\",2886:\"FRONT_FACE\",2928:\"DEPTH_RANGE\",2929:\"DEPTH_TEST\",2930:\"DEPTH_WRITEMASK\",2931:\"DEPTH_CLEAR_VALUE\",2932:\"DEPTH_FUNC\",2960:\"STENCIL_TEST\",2961:\"STENCIL_CLEAR_VALUE\",2962:\"STENCIL_FUNC\",2963:\"STENCIL_VALUE_MASK\",2964:\"STENCIL_FAIL\",2965:\"STENCIL_PASS_DEPTH_FAIL\",2966:\"STENCIL_PASS_DEPTH_PASS\",2967:\"STENCIL_REF\",2968:\"STENCIL_WRITEMASK\",2978:\"VIEWPORT\",3024:\"DITHER\",3042:\"BLEND\",3088:\"SCISSOR_BOX\",3089:\"SCISSOR_TEST\",3106:\"COLOR_CLEAR_VALUE\",3107:\"COLOR_WRITEMASK\",3317:\"UNPACK_ALIGNMENT\",3333:\"PACK_ALIGNMENT\",3379:\"MAX_TEXTURE_SIZE\",3386:\"MAX_VIEWPORT_DIMS\",3408:\"SUBPIXEL_BITS\",3410:\"RED_BITS\",3411:\"GREEN_BITS\",3412:\"BLUE_BITS\",3413:\"ALPHA_BITS\",3414:\"DEPTH_BITS\",3415:\"STENCIL_BITS\",3553:\"TEXTURE_2D\",4352:\"DONT_CARE\",4353:\"FASTEST\",4354:\"NICEST\",5120:\"BYTE\",5121:\"UNSIGNED_BYTE\",5122:\"SHORT\",5123:\"UNSIGNED_SHORT\",5124:\"INT\",5125:\"UNSIGNED_INT\",5126:\"FLOAT\",5386:\"INVERT\",5890:\"TEXTURE\",6401:\"STENCIL_INDEX\",6402:\"DEPTH_COMPONENT\",6406:\"ALPHA\",6407:\"RGB\",6408:\"RGBA\",6409:\"LUMINANCE\",6410:\"LUMINANCE_ALPHA\",7680:\"KEEP\",7681:\"REPLACE\",7682:\"INCR\",7683:\"DECR\",7936:\"VENDOR\",7937:\"RENDERER\",7938:\"VERSION\",9728:\"NEAREST\",9729:\"LINEAR\",9984:\"NEAREST_MIPMAP_NEAREST\",9985:\"LINEAR_MIPMAP_NEAREST\",9986:\"NEAREST_MIPMAP_LINEAR\",9987:\"LINEAR_MIPMAP_LINEAR\",10240:\"TEXTURE_MAG_FILTER\",10241:\"TEXTURE_MIN_FILTER\",10242:\"TEXTURE_WRAP_S\",10243:\"TEXTURE_WRAP_T\",10497:\"REPEAT\",10752:\"POLYGON_OFFSET_UNITS\",16384:\"COLOR_BUFFER_BIT\",32769:\"CONSTANT_COLOR\",32770:\"ONE_MINUS_CONSTANT_COLOR\",32771:\"CONSTANT_ALPHA\",32772:\"ONE_MINUS_CONSTANT_ALPHA\",32773:\"BLEND_COLOR\",32774:\"FUNC_ADD\",32777:\"BLEND_EQUATION_RGB\",32778:\"FUNC_SUBTRACT\",32779:\"FUNC_REVERSE_SUBTRACT\",32819:\"UNSIGNED_SHORT_4_4_4_4\",32820:\"UNSIGNED_SHORT_5_5_5_1\",32823:\"POLYGON_OFFSET_FILL\",32824:\"POLYGON_OFFSET_FACTOR\",32854:\"RGBA4\",32855:\"RGB5_A1\",32873:\"TEXTURE_BINDING_2D\",32926:\"SAMPLE_ALPHA_TO_COVERAGE\",32928:\"SAMPLE_COVERAGE\",32936:\"SAMPLE_BUFFERS\",32937:\"SAMPLES\",32938:\"SAMPLE_COVERAGE_VALUE\",32939:\"SAMPLE_COVERAGE_INVERT\",32968:\"BLEND_DST_RGB\",32969:\"BLEND_SRC_RGB\",32970:\"BLEND_DST_ALPHA\",32971:\"BLEND_SRC_ALPHA\",33071:\"CLAMP_TO_EDGE\",33170:\"GENERATE_MIPMAP_HINT\",33189:\"DEPTH_COMPONENT16\",33306:\"DEPTH_STENCIL_ATTACHMENT\",33635:\"UNSIGNED_SHORT_5_6_5\",33648:\"MIRRORED_REPEAT\",33901:\"ALIASED_POINT_SIZE_RANGE\",33902:\"ALIASED_LINE_WIDTH_RANGE\",33984:\"TEXTURE0\",33985:\"TEXTURE1\",33986:\"TEXTURE2\",33987:\"TEXTURE3\",33988:\"TEXTURE4\",33989:\"TEXTURE5\",33990:\"TEXTURE6\",33991:\"TEXTURE7\",33992:\"TEXTURE8\",33993:\"TEXTURE9\",33994:\"TEXTURE10\",33995:\"TEXTURE11\",33996:\"TEXTURE12\",33997:\"TEXTURE13\",33998:\"TEXTURE14\",33999:\"TEXTURE15\",34e3:\"TEXTURE16\",34001:\"TEXTURE17\",34002:\"TEXTURE18\",34003:\"TEXTURE19\",34004:\"TEXTURE20\",34005:\"TEXTURE21\",34006:\"TEXTURE22\",34007:\"TEXTURE23\",34008:\"TEXTURE24\",34009:\"TEXTURE25\",34010:\"TEXTURE26\",34011:\"TEXTURE27\",34012:\"TEXTURE28\",34013:\"TEXTURE29\",34014:\"TEXTURE30\",34015:\"TEXTURE31\",34016:\"ACTIVE_TEXTURE\",34024:\"MAX_RENDERBUFFER_SIZE\",34041:\"DEPTH_STENCIL\",34055:\"INCR_WRAP\",34056:\"DECR_WRAP\",34067:\"TEXTURE_CUBE_MAP\",34068:\"TEXTURE_BINDING_CUBE_MAP\",34069:\"TEXTURE_CUBE_MAP_POSITIVE_X\",34070:\"TEXTURE_CUBE_MAP_NEGATIVE_X\",34071:\"TEXTURE_CUBE_MAP_POSITIVE_Y\",34072:\"TEXTURE_CUBE_MAP_NEGATIVE_Y\",34073:\"TEXTURE_CUBE_MAP_POSITIVE_Z\",34074:\"TEXTURE_CUBE_MAP_NEGATIVE_Z\",34076:\"MAX_CUBE_MAP_TEXTURE_SIZE\",34338:\"VERTEX_ATTRIB_ARRAY_ENABLED\",34339:\"VERTEX_ATTRIB_ARRAY_SIZE\",34340:\"VERTEX_ATTRIB_ARRAY_STRIDE\",34341:\"VERTEX_ATTRIB_ARRAY_TYPE\",34342:\"CURRENT_VERTEX_ATTRIB\",34373:\"VERTEX_ATTRIB_ARRAY_POINTER\",34466:\"NUM_COMPRESSED_TEXTURE_FORMATS\",34467:\"COMPRESSED_TEXTURE_FORMATS\",34660:\"BUFFER_SIZE\",34661:\"BUFFER_USAGE\",34816:\"STENCIL_BACK_FUNC\",34817:\"STENCIL_BACK_FAIL\",34818:\"STENCIL_BACK_PASS_DEPTH_FAIL\",34819:\"STENCIL_BACK_PASS_DEPTH_PASS\",34877:\"BLEND_EQUATION_ALPHA\",34921:\"MAX_VERTEX_ATTRIBS\",34922:\"VERTEX_ATTRIB_ARRAY_NORMALIZED\",34930:\"MAX_TEXTURE_IMAGE_UNITS\",34962:\"ARRAY_BUFFER\",34963:\"ELEMENT_ARRAY_BUFFER\",34964:\"ARRAY_BUFFER_BINDING\",34965:\"ELEMENT_ARRAY_BUFFER_BINDING\",34975:\"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING\",35040:\"STREAM_DRAW\",35044:\"STATIC_DRAW\",35048:\"DYNAMIC_DRAW\",35632:\"FRAGMENT_SHADER\",35633:\"VERTEX_SHADER\",35660:\"MAX_VERTEX_TEXTURE_IMAGE_UNITS\",35661:\"MAX_COMBINED_TEXTURE_IMAGE_UNITS\",35663:\"SHADER_TYPE\",35664:\"FLOAT_VEC2\",35665:\"FLOAT_VEC3\",35666:\"FLOAT_VEC4\",35667:\"INT_VEC2\",35668:\"INT_VEC3\",35669:\"INT_VEC4\",35670:\"BOOL\",35671:\"BOOL_VEC2\",35672:\"BOOL_VEC3\",35673:\"BOOL_VEC4\",35674:\"FLOAT_MAT2\",35675:\"FLOAT_MAT3\",35676:\"FLOAT_MAT4\",35678:\"SAMPLER_2D\",35680:\"SAMPLER_CUBE\",35712:\"DELETE_STATUS\",35713:\"COMPILE_STATUS\",35714:\"LINK_STATUS\",35715:\"VALIDATE_STATUS\",35716:\"INFO_LOG_LENGTH\",35717:\"ATTACHED_SHADERS\",35718:\"ACTIVE_UNIFORMS\",35719:\"ACTIVE_UNIFORM_MAX_LENGTH\",35720:\"SHADER_SOURCE_LENGTH\",35721:\"ACTIVE_ATTRIBUTES\",35722:\"ACTIVE_ATTRIBUTE_MAX_LENGTH\",35724:\"SHADING_LANGUAGE_VERSION\",35725:\"CURRENT_PROGRAM\",36003:\"STENCIL_BACK_REF\",36004:\"STENCIL_BACK_VALUE_MASK\",36005:\"STENCIL_BACK_WRITEMASK\",36006:\"FRAMEBUFFER_BINDING\",36007:\"RENDERBUFFER_BINDING\",36048:\"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE\",36049:\"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME\",36050:\"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL\",36051:\"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE\",36053:\"FRAMEBUFFER_COMPLETE\",36054:\"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\",36055:\"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\",36057:\"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\",36061:\"FRAMEBUFFER_UNSUPPORTED\",36064:\"COLOR_ATTACHMENT0\",36096:\"DEPTH_ATTACHMENT\",36128:\"STENCIL_ATTACHMENT\",36160:\"FRAMEBUFFER\",36161:\"RENDERBUFFER\",36162:\"RENDERBUFFER_WIDTH\",36163:\"RENDERBUFFER_HEIGHT\",36164:\"RENDERBUFFER_INTERNAL_FORMAT\",36168:\"STENCIL_INDEX8\",36176:\"RENDERBUFFER_RED_SIZE\",36177:\"RENDERBUFFER_GREEN_SIZE\",36178:\"RENDERBUFFER_BLUE_SIZE\",36179:\"RENDERBUFFER_ALPHA_SIZE\",36180:\"RENDERBUFFER_DEPTH_SIZE\",36181:\"RENDERBUFFER_STENCIL_SIZE\",36194:\"RGB565\",36336:\"LOW_FLOAT\",36337:\"MEDIUM_FLOAT\",36338:\"HIGH_FLOAT\",36339:\"LOW_INT\",36340:\"MEDIUM_INT\",36341:\"HIGH_INT\",36346:\"SHADER_COMPILER\",36347:\"MAX_VERTEX_UNIFORM_VECTORS\",36348:\"MAX_VARYING_VECTORS\",36349:\"MAX_FRAGMENT_UNIFORM_VECTORS\",37440:\"UNPACK_FLIP_Y_WEBGL\",37441:\"UNPACK_PREMULTIPLY_ALPHA_WEBGL\",37442:\"CONTEXT_LOST_WEBGL\",37443:\"UNPACK_COLORSPACE_CONVERSION_WEBGL\",37444:\"BROWSER_DEFAULT_WEBGL\"}},{}],265:[function(t,e,n){var r=t(\"./1.0/numbers\");e.exports=function(t){return r[t]}},{\"./1.0/numbers\":264}],266:[function(t,e,n){\"use strict\";e.exports=function(t){var e=t.gl,n=r(e),o=i(e,[{buffer:n,type:e.FLOAT,size:3,offset:0,stride:40},{buffer:n,type:e.FLOAT,size:4,offset:12,stride:40},{buffer:n,type:e.FLOAT,size:3,offset:28,stride:40}]),l=a(e);l.attributes.position.location=0,l.attributes.color.location=1,l.attributes.offset.location=2;var c=new s(e,n,o,l);return c.update(t),c};var r=t(\"gl-buffer\"),i=t(\"gl-vao\"),a=t(\"./shaders/index\"),o=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function s(t,e,n,r){this.gl=t,this.shader=r,this.buffer=e,this.vao=n,this.pixelRatio=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lineWidth=[1,1,1],this.capSize=[10,10,10],this.lineCount=[0,0,0],this.lineOffset=[0,0,0],this.opacity=1,this.hasAlpha=!1}var l=s.prototype;function c(t,e){for(var n=0;n<3;++n)t[0][n]=Math.min(t[0][n],e[n]),t[1][n]=Math.max(t[1][n],e[n])}l.isOpaque=function(){return!this.hasAlpha},l.isTransparent=function(){return this.hasAlpha},l.drawTransparent=l.draw=function(t){var e=this.gl,n=this.shader.uniforms;this.shader.bind();var r=n.view=t.view||o,i=n.projection=t.projection||o;n.model=t.model||o,n.clipBounds=this.clipBounds,n.opacity=this.opacity;var a=(t._ortho?2:1)*this.pixelRatio*(i[3]*r[12]+i[7]*r[13]+i[11]*r[14]+i[15]*r[15])/e.drawingBufferHeight;this.vao.bind();for(var s=0;s<3;++s)e.lineWidth(this.lineWidth[s]*this.pixelRatio),n.capSize=this.capSize[s]*a,this.lineCount[s]&&e.drawArrays(e.LINES,this.lineOffset[s],this.lineCount[s]);this.vao.unbind()};var u=function(){for(var t=new Array(3),e=0;e<3;++e){for(var n=[],r=1;r<=2;++r)for(var i=-1;i<=1;i+=2){var a=[0,0,0];a[(r+e)%3]=i,n.push(a)}t[e]=n}return t}();function h(t,e,n,r){for(var i=u[r],a=0;a<i.length;++a){var o=i[a];t.push(e[0],e[1],e[2],n[0],n[1],n[2],n[3],o[0],o[1],o[2])}return i.length}l.update=function(t){\"lineWidth\"in(t=t||{})&&(this.lineWidth=t.lineWidth,Array.isArray(this.lineWidth)||(this.lineWidth=[this.lineWidth,this.lineWidth,this.lineWidth])),\"capSize\"in t&&(this.capSize=t.capSize,Array.isArray(this.capSize)||(this.capSize=[this.capSize,this.capSize,this.capSize])),this.hasAlpha=!1,\"opacity\"in t&&(this.opacity=+t.opacity,this.opacity<1&&(this.hasAlpha=!0));var e=t.color||[[0,0,0],[0,0,0],[0,0,0]],n=t.position,r=t.error;if(Array.isArray(e[0])||(e=[e,e,e]),n&&r){var i=[],a=n.length,o=0;this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.lineCount=[0,0,0];for(var s=0;s<3;++s){this.lineOffset[s]=o;t:for(var l=0;l<a;++l){for(var u=n[l],d=0;d<3;++d)if(isNaN(u[d])||!isFinite(u[d]))continue t;var f,p=r[l],m=e[s];Array.isArray(m[0])&&(m=e[l]),3===m.length?m=[m[0],m[1],m[2],1]:4===m.length&&(m=[m[0],m[1],m[2],m[3]],!this.hasAlpha&&m[3]<1&&(this.hasAlpha=!0)),isNaN(p[0][s])||isNaN(p[1][s])||(p[0][s]<0&&((f=u.slice())[s]+=p[0][s],i.push(u[0],u[1],u[2],m[0],m[1],m[2],m[3],0,0,0,f[0],f[1],f[2],m[0],m[1],m[2],m[3],0,0,0),c(this.bounds,f),o+=2+h(i,f,m,s)),p[1][s]>0&&((f=u.slice())[s]+=p[1][s],i.push(u[0],u[1],u[2],m[0],m[1],m[2],m[3],0,0,0,f[0],f[1],f[2],m[0],m[1],m[2],m[3],0,0,0),c(this.bounds,f),o+=2+h(i,f,m,s)))}this.lineCount[s]=o-this.lineOffset[s]}this.buffer.update(i)}},l.dispose=function(){this.shader.dispose(),this.buffer.dispose(),this.vao.dispose()}},{\"./shaders/index\":268,\"gl-buffer\":259,\"gl-vao\":358}],267:[function(t,e,n){arguments[4][257][0].apply(n,arguments)},{dup:257}],268:[function(t,e,n){\"use strict\";var r=t(\"glslify\"),i=t(\"gl-shader\"),a=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position, offset;\\nattribute vec4 color;\\nuniform mat4 model, view, projection;\\nuniform float capSize;\\nvarying vec4 fragColor;\\nvarying vec3 fragPosition;\\n\\nvoid main() {\\n  vec4 worldPosition  = model * vec4(position, 1.0);\\n  worldPosition       = (worldPosition / worldPosition.w) + vec4(capSize * offset, 0.0);\\n  gl_Position         = projection * view * worldPosition;\\n  fragColor           = color;\\n  fragPosition        = position;\\n}\"]),o=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 clipBounds[2];\\nuniform float opacity;\\nvarying vec3 fragPosition;\\nvarying vec4 fragColor;\\n\\nvoid main() {\\n  if (\\n    outOfRange(clipBounds[0], clipBounds[1], fragPosition) ||\\n    fragColor.a * opacity == 0.\\n  ) discard;\\n\\n  gl_FragColor = opacity * fragColor;\\n}\"]);e.exports=function(t){return i(t,a,o,null,[{name:\"position\",type:\"vec3\"},{name:\"color\",type:\"vec4\"},{name:\"offset\",type:\"vec3\"}])}},{\"gl-shader\":335,glslify:267}],269:[function(t,e,n){\"use strict\";var r=t(\"gl-texture2d\");e.exports=function(t,e,n,r){i||(i=t.FRAMEBUFFER_UNSUPPORTED,a=t.FRAMEBUFFER_INCOMPLETE_ATTACHMENT,o=t.FRAMEBUFFER_INCOMPLETE_DIMENSIONS,s=t.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT);var c=t.getExtension(\"WEBGL_draw_buffers\");if(!l&&c&&function(t,e){var n=t.getParameter(e.MAX_COLOR_ATTACHMENTS_WEBGL);l=new Array(n+1);for(var r=0;r<=n;++r){for(var i=new Array(n),a=0;a<r;++a)i[a]=t.COLOR_ATTACHMENT0+a;for(a=r;a<n;++a)i[a]=t.NONE;l[r]=i}}(t,c),Array.isArray(e)&&(r=n,n=0|e[1],e=0|e[0]),\"number\"!=typeof e)throw new Error(\"gl-fbo: Missing shape parameter\");var u=t.getParameter(t.MAX_RENDERBUFFER_SIZE);if(e<0||e>u||n<0||n>u)throw new Error(\"gl-fbo: Parameters are too large for FBO\");var h=1;if(\"color\"in(r=r||{})){if((h=Math.max(0|r.color,0))<0)throw new Error(\"gl-fbo: Must specify a nonnegative number of colors\");if(h>1){if(!c)throw new Error(\"gl-fbo: Multiple draw buffer extension not supported\");if(h>t.getParameter(c.MAX_COLOR_ATTACHMENTS_WEBGL))throw new Error(\"gl-fbo: Context does not support \"+h+\" draw buffers\")}}var d=t.UNSIGNED_BYTE,f=t.getExtension(\"OES_texture_float\");if(r.float&&h>0){if(!f)throw new Error(\"gl-fbo: Context does not support floating point textures\");d=t.FLOAT}else r.preferFloat&&h>0&&f&&(d=t.FLOAT);var m=!0;\"depth\"in r&&(m=!!r.depth);var g=!1;return\"stencil\"in r&&(g=!!r.stencil),new p(t,e,n,d,h,m,g,c)};var i,a,o,s,l=null;function c(t){return[t.getParameter(t.FRAMEBUFFER_BINDING),t.getParameter(t.RENDERBUFFER_BINDING),t.getParameter(t.TEXTURE_BINDING_2D)]}function u(t,e){t.bindFramebuffer(t.FRAMEBUFFER,e[0]),t.bindRenderbuffer(t.RENDERBUFFER,e[1]),t.bindTexture(t.TEXTURE_2D,e[2])}function h(t){switch(t){case i:throw new Error(\"gl-fbo: Framebuffer unsupported\");case a:throw new Error(\"gl-fbo: Framebuffer incomplete attachment\");case o:throw new Error(\"gl-fbo: Framebuffer incomplete dimensions\");case s:throw new Error(\"gl-fbo: Framebuffer incomplete missing attachment\");default:throw new Error(\"gl-fbo: Framebuffer failed for unspecified reason\")}}function d(t,e,n,i,a,o){if(!i)return null;var s=r(t,e,n,a,i);return s.magFilter=t.NEAREST,s.minFilter=t.NEAREST,s.mipSamples=1,s.bind(),t.framebufferTexture2D(t.FRAMEBUFFER,o,t.TEXTURE_2D,s.handle,0),s}function f(t,e,n,r,i){var a=t.createRenderbuffer();return t.bindRenderbuffer(t.RENDERBUFFER,a),t.renderbufferStorage(t.RENDERBUFFER,r,e,n),t.framebufferRenderbuffer(t.FRAMEBUFFER,i,t.RENDERBUFFER,a),a}function p(t,e,n,r,i,a,o,s){this.gl=t,this._shape=[0|e,0|n],this._destroyed=!1,this._ext=s,this.color=new Array(i);for(var p=0;p<i;++p)this.color[p]=null;this._color_rb=null,this.depth=null,this._depth_rb=null,this._colorType=r,this._useDepth=a,this._useStencil=o;var m=this,g=[0|e,0|n];Object.defineProperties(g,{0:{get:function(){return m._shape[0]},set:function(t){return m.width=t}},1:{get:function(){return m._shape[1]},set:function(t){return m.height=t}}}),this._shapeVector=g,function(t){var e=c(t.gl),n=t.gl,r=t.handle=n.createFramebuffer(),i=t._shape[0],a=t._shape[1],o=t.color.length,s=t._ext,p=t._useStencil,m=t._useDepth,g=t._colorType;n.bindFramebuffer(n.FRAMEBUFFER,r);for(var y=0;y<o;++y)t.color[y]=d(n,i,a,g,n.RGBA,n.COLOR_ATTACHMENT0+y);0===o?(t._color_rb=f(n,i,a,n.RGBA4,n.COLOR_ATTACHMENT0),s&&s.drawBuffersWEBGL(l[0])):o>1&&s.drawBuffersWEBGL(l[o]);var v=n.getExtension(\"WEBGL_depth_texture\");v?p?t.depth=d(n,i,a,v.UNSIGNED_INT_24_8_WEBGL,n.DEPTH_STENCIL,n.DEPTH_STENCIL_ATTACHMENT):m&&(t.depth=d(n,i,a,n.UNSIGNED_SHORT,n.DEPTH_COMPONENT,n.DEPTH_ATTACHMENT)):m&&p?t._depth_rb=f(n,i,a,n.DEPTH_STENCIL,n.DEPTH_STENCIL_ATTACHMENT):m?t._depth_rb=f(n,i,a,n.DEPTH_COMPONENT16,n.DEPTH_ATTACHMENT):p&&(t._depth_rb=f(n,i,a,n.STENCIL_INDEX,n.STENCIL_ATTACHMENT));var _=n.checkFramebufferStatus(n.FRAMEBUFFER);if(_!==n.FRAMEBUFFER_COMPLETE){for(t._destroyed=!0,n.bindFramebuffer(n.FRAMEBUFFER,null),n.deleteFramebuffer(t.handle),t.handle=null,t.depth&&(t.depth.dispose(),t.depth=null),t._depth_rb&&(n.deleteRenderbuffer(t._depth_rb),t._depth_rb=null),y=0;y<t.color.length;++y)t.color[y].dispose(),t.color[y]=null;t._color_rb&&(n.deleteRenderbuffer(t._color_rb),t._color_rb=null),u(n,e),h(_)}u(n,e)}(this)}var m=p.prototype;function g(t,e,n){if(t._destroyed)throw new Error(\"gl-fbo: Can't resize destroyed FBO\");if(t._shape[0]!==e||t._shape[1]!==n){var r=t.gl,i=r.getParameter(r.MAX_RENDERBUFFER_SIZE);if(e<0||e>i||n<0||n>i)throw new Error(\"gl-fbo: Can't resize FBO, invalid dimensions\");t._shape[0]=e,t._shape[1]=n;for(var a=c(r),o=0;o<t.color.length;++o)t.color[o].shape=t._shape;t._color_rb&&(r.bindRenderbuffer(r.RENDERBUFFER,t._color_rb),r.renderbufferStorage(r.RENDERBUFFER,r.RGBA4,t._shape[0],t._shape[1])),t.depth&&(t.depth.shape=t._shape),t._depth_rb&&(r.bindRenderbuffer(r.RENDERBUFFER,t._depth_rb),t._useDepth&&t._useStencil?r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t._shape[0],t._shape[1]):t._useDepth?r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_COMPONENT16,t._shape[0],t._shape[1]):t._useStencil&&r.renderbufferStorage(r.RENDERBUFFER,r.STENCIL_INDEX,t._shape[0],t._shape[1])),r.bindFramebuffer(r.FRAMEBUFFER,t.handle);var s=r.checkFramebufferStatus(r.FRAMEBUFFER);s!==r.FRAMEBUFFER_COMPLETE&&(t.dispose(),u(r,a),h(s)),u(r,a)}}Object.defineProperties(m,{shape:{get:function(){return this._destroyed?[0,0]:this._shapeVector},set:function(t){if(Array.isArray(t)||(t=[0|t,0|t]),2!==t.length)throw new Error(\"gl-fbo: Shape vector must be length 2\");var e=0|t[0],n=0|t[1];return g(this,e,n),[e,n]},enumerable:!1},width:{get:function(){return this._destroyed?0:this._shape[0]},set:function(t){return g(this,t|=0,this._shape[1]),t},enumerable:!1},height:{get:function(){return this._destroyed?0:this._shape[1]},set:function(t){return g(this,this._shape[0],t|=0),t},enumerable:!1}}),m.bind=function(){if(!this._destroyed){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.handle),t.viewport(0,0,this._shape[0],this._shape[1])}},m.dispose=function(){if(!this._destroyed){this._destroyed=!0;var t=this.gl;t.deleteFramebuffer(this.handle),this.handle=null,this.depth&&(this.depth.dispose(),this.depth=null),this._depth_rb&&(t.deleteRenderbuffer(this._depth_rb),this._depth_rb=null);for(var e=0;e<this.color.length;++e)this.color[e].dispose(),this.color[e]=null;this._color_rb&&(t.deleteRenderbuffer(this._color_rb),this._color_rb=null)}}},{\"gl-texture2d\":353}],270:[function(t,e,n){var r=t(\"sprintf-js\").sprintf,i=t(\"gl-constants/lookup\"),a=t(\"glsl-shader-name\"),o=t(\"add-line-numbers\");e.exports=function(t,e,n){\"use strict\";var s=a(e)||\"of unknown name (see npm glsl-shader-name)\",l=\"unknown type\";void 0!==n&&(l=n===i.FRAGMENT_SHADER?\"fragment\":\"vertex\");for(var c=r(\"Error compiling %s shader %s:\\n\",l,s),u=r(\"%s%s\",c,t),h=t.split(\"\\n\"),d={},f=0;f<h.length;f++){var p=h[f];if(\"\"!==p&&\"\\0\"!==p){var m=parseInt(p.split(\":\")[2]);if(isNaN(m))throw new Error(r(\"Could not parse error: %s\",p));d[m]=p}}var g=o(e).split(\"\\n\");for(f=0;f<g.length;f++)if((d[f+3]||d[f+2]||d[f+1])&&(c+=g[f]+\"\\n\",d[f+1])){var y=d[f+1];y=y.substr(y.split(\":\",3).join(\":\").length+1).trim(),c+=r(\"^^^ %s\\n\\n\",y)}return{long:c.trim(),short:u.trim()}}},{\"add-line-numbers\":66,\"gl-constants/lookup\":265,\"glsl-shader-name\":431,\"sprintf-js\":567}],271:[function(t,e,n){\"use strict\";e.exports=function(t,e){var n=t.gl,r=new c(t,o(n,l.vertex,l.fragment),o(n,l.pickVertex,l.pickFragment),s(n),s(n),s(n),s(n));return r.update(e),t.addObject(r),r};var r=t(\"binary-search-bounds\"),i=t(\"iota-array\"),a=t(\"typedarray-pool\"),o=t(\"gl-shader\"),s=t(\"gl-buffer\"),l=t(\"./lib/shaders\");function c(t,e,n,r,i,a,o){this.plot=t,this.shader=e,this.pickShader=n,this.positionBuffer=r,this.weightBuffer=i,this.colorBuffer=a,this.idBuffer=o,this.xData=[],this.yData=[],this.shape=[0,0],this.bounds=[1/0,1/0,-1/0,-1/0],this.pickOffset=0}var u,h=c.prototype,d=[0,0,1,0,0,1,1,0,1,1,0,1];h.draw=(u=[1,0,0,0,1,0,0,0,1],function(){var t=this.plot,e=this.shader,n=this.bounds,r=this.numVertices;if(!(r<=0)){var i=t.gl,a=t.dataBox,o=n[3]-n[1],s=a[2]-a[0],l=a[3]-a[1];u[0]=2*(n[2]-n[0])/s,u[4]=2*o/l,u[6]=2*(n[0]-a[0])/s-1,u[7]=2*(n[1]-a[1])/l-1,e.bind();var c=e.uniforms;c.viewTransform=u,c.shape=this.shape;var h=e.attributes;this.positionBuffer.bind(),h.position.pointer(),this.weightBuffer.bind(),h.weight.pointer(i.UNSIGNED_BYTE,!1),this.colorBuffer.bind(),h.color.pointer(i.UNSIGNED_BYTE,!0),i.drawArrays(i.TRIANGLES,0,r)}}),h.drawPick=function(){var t=[1,0,0,0,1,0,0,0,1],e=[0,0,0,0];return function(n){var r=this.plot,i=this.pickShader,a=this.bounds,o=this.numVertices;if(!(o<=0)){var s=r.gl,l=r.dataBox,c=a[3]-a[1],u=l[2]-l[0],h=l[3]-l[1];t[0]=2*(a[2]-a[0])/u,t[4]=2*c/h,t[6]=2*(a[0]-l[0])/u-1,t[7]=2*(a[1]-l[1])/h-1;for(var d=0;d<4;++d)e[d]=n>>8*d&255;this.pickOffset=n,i.bind();var f=i.uniforms;f.viewTransform=t,f.pickOffset=e,f.shape=this.shape;var p=i.attributes;return this.positionBuffer.bind(),p.position.pointer(),this.weightBuffer.bind(),p.weight.pointer(s.UNSIGNED_BYTE,!1),this.idBuffer.bind(),p.pickId.pointer(s.UNSIGNED_BYTE,!1),s.drawArrays(s.TRIANGLES,0,o),n+this.shape[0]*this.shape[1]}}}(),h.pick=function(t,e,n){var r=this.pickOffset;if(n<r||n>=r+this.shape[0]*this.shape[1])return null;var i=n-r;return{object:this,pointId:i,dataCoord:[this.xData[i%this.shape[0]],this.yData[i/this.shape[0]|0]]}},h.update=function(t){var e=(t=t||{}).shape||[0,0],n=t.x||i(e[0]),o=t.y||i(e[1]),s=t.z||new Float32Array(e[0]*e[1]),l=!1!==t.zsmooth;this.xData=n,this.yData=o;var c,u,h,f,p=t.colorLevels||[0],m=t.colorValues||[0,0,0,1],g=p.length,y=this.bounds;l?(c=y[0]=n[0],u=y[1]=o[0],h=y[2]=n[n.length-1],f=y[3]=o[o.length-1]):(c=y[0]=n[0]+(n[1]-n[0])/2,u=y[1]=o[0]+(o[1]-o[0])/2,h=y[2]=n[n.length-1]+(n[n.length-1]-n[n.length-2])/2,f=y[3]=o[o.length-1]+(o[o.length-1]-o[o.length-2])/2);var v=1/(h-c),_=1/(f-u),b=e[0],x=e[1];this.shape=[b,x];var w=(l?(b-1)*(x-1):b*x)*(d.length>>>1);this.numVertices=w;for(var k=a.mallocUint8(4*w),M=a.mallocFloat32(2*w),T=a.mallocUint8(2*w),S=a.mallocUint32(w),A=0,L=l?b-1:b,C=l?x-1:x,E=0;E<C;++E){var O,D;l?(O=_*(o[E]-u),D=_*(o[E+1]-u)):(O=E<x-1?_*(o[E]-(o[E+1]-o[E])/2-u):_*(o[E]-(o[E]-o[E-1])/2-u),D=E<x-1?_*(o[E]+(o[E+1]-o[E])/2-u):_*(o[E]+(o[E]-o[E-1])/2-u));for(var I=0;I<L;++I){var P,R;l?(P=v*(n[I]-c),R=v*(n[I+1]-c)):(P=I<b-1?v*(n[I]-(n[I+1]-n[I])/2-c):v*(n[I]-(n[I]-n[I-1])/2-c),R=I<b-1?v*(n[I]+(n[I+1]-n[I])/2-c):v*(n[I]+(n[I]-n[I-1])/2-c));for(var z=0;z<d.length;z+=2){var j,F,N,B,Y=d[z],H=d[z+1],V=s[l?(E+H)*b+(I+Y):E*b+I],U=r.le(p,V);if(U<0)j=m[0],F=m[1],N=m[2],B=m[3];else if(U===g-1)j=m[4*g-4],F=m[4*g-3],N=m[4*g-2],B=m[4*g-1];else{var W=(V-p[U])/(p[U+1]-p[U]),q=1-W,G=4*U,X=4*(U+1);j=q*m[G]+W*m[X],F=q*m[G+1]+W*m[X+1],N=q*m[G+2]+W*m[X+2],B=q*m[G+3]+W*m[X+3]}k[4*A]=255*j,k[4*A+1]=255*F,k[4*A+2]=255*N,k[4*A+3]=255*B,M[2*A]=.5*P+.5*R,M[2*A+1]=.5*O+.5*D,T[2*A]=Y,T[2*A+1]=H,S[A]=E*b+I,A+=1}}}this.positionBuffer.update(M),this.weightBuffer.update(T),this.colorBuffer.update(k),this.idBuffer.update(S),a.free(M),a.free(k),a.free(T),a.free(S)},h.dispose=function(){this.shader.dispose(),this.pickShader.dispose(),this.positionBuffer.dispose(),this.weightBuffer.dispose(),this.colorBuffer.dispose(),this.idBuffer.dispose(),this.plot.removeObject(this)}},{\"./lib/shaders\":272,\"binary-search-bounds\":96,\"gl-buffer\":259,\"gl-shader\":335,\"iota-array\":463,\"typedarray-pool\":595}],272:[function(t,e,n){\"use strict\";var r=t(\"glslify\");e.exports={fragment:r([\"precision lowp float;\\n#define GLSLIFY 1\\nvarying vec4 fragColor;\\nvoid main() {\\n  gl_FragColor = vec4(fragColor.rgb * fragColor.a, fragColor.a);\\n}\\n\"]),vertex:r([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec2 position;\\nattribute vec4 color;\\nattribute vec2 weight;\\n\\nuniform vec2 shape;\\nuniform mat3 viewTransform;\\n\\nvarying vec4 fragColor;\\n\\nvoid main() {\\n  vec3 vPosition = viewTransform * vec3( position + (weight-.5)/(shape-1.) , 1.0);\\n  fragColor = color;\\n  gl_Position = vec4(vPosition.xy, 0, vPosition.z);\\n}\\n\"]),pickFragment:r([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragId;\\nvarying vec2 vWeight;\\n\\nuniform vec2 shape;\\nuniform vec4 pickOffset;\\n\\nvoid main() {\\n  vec2 d = step(.5, vWeight);\\n  vec4 id = fragId + pickOffset;\\n  id.x += d.x + d.y*shape.x;\\n\\n  id.y += floor(id.x / 256.0);\\n  id.x -= floor(id.x / 256.0) * 256.0;\\n\\n  id.z += floor(id.y / 256.0);\\n  id.y -= floor(id.y / 256.0) * 256.0;\\n\\n  id.w += floor(id.z / 256.0);\\n  id.z -= floor(id.z / 256.0) * 256.0;\\n\\n  gl_FragColor = id/255.;\\n}\\n\"]),pickVertex:r([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec2 position;\\nattribute vec4 pickId;\\nattribute vec2 weight;\\n\\nuniform vec2 shape;\\nuniform mat3 viewTransform;\\n\\nvarying vec4 fragId;\\nvarying vec2 vWeight;\\n\\nvoid main() {\\n  vWeight = weight;\\n\\n  fragId = pickId;\\n\\n  vec3 vPosition = viewTransform * vec3( position + (weight-.5)/(shape-1.) , 1.0);\\n  gl_Position = vec4(vPosition.xy, 0, vPosition.z);\\n}\\n\"])}},{glslify:273}],273:[function(t,e,n){arguments[4][257][0].apply(n,arguments)},{dup:257}],274:[function(t,e,n){var r=t(\"glslify\"),i=t(\"gl-shader\"),a=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position, nextPosition;\\nattribute float arcLength, lineWidth;\\nattribute vec4 color;\\n\\nuniform vec2 screenShape;\\nuniform float pixelRatio;\\nuniform mat4 model, view, projection;\\n\\nvarying vec4 fragColor;\\nvarying vec3 worldPosition;\\nvarying float pixelArcLength;\\n\\nvec4 project(vec3 p) {\\n  return projection * view * model * vec4(p, 1.0);\\n}\\n\\nvoid main() {\\n  vec4 startPoint = project(position);\\n  vec4 endPoint   = project(nextPosition);\\n\\n  vec2 A = startPoint.xy / startPoint.w;\\n  vec2 B =   endPoint.xy /   endPoint.w;\\n\\n  float clipAngle = atan(\\n    (B.y - A.y) * screenShape.y,\\n    (B.x - A.x) * screenShape.x\\n  );\\n\\n  vec2 offset = 0.5 * pixelRatio * lineWidth * vec2(\\n    sin(clipAngle),\\n    -cos(clipAngle)\\n  ) / screenShape;\\n\\n  gl_Position = vec4(startPoint.xy + startPoint.w * offset, startPoint.zw);\\n\\n  worldPosition = position;\\n  pixelArcLength = arcLength;\\n  fragColor = color;\\n}\\n\"]),o=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3      clipBounds[2];\\nuniform sampler2D dashTexture;\\nuniform float     dashScale;\\nuniform float     opacity;\\n\\nvarying vec3    worldPosition;\\nvarying float   pixelArcLength;\\nvarying vec4    fragColor;\\n\\nvoid main() {\\n  if (\\n    outOfRange(clipBounds[0], clipBounds[1], worldPosition) ||\\n    fragColor.a * opacity == 0.\\n  ) discard;\\n\\n  float dashWeight = texture2D(dashTexture, vec2(dashScale * pixelArcLength, 0)).r;\\n  if(dashWeight < 0.5) {\\n    discard;\\n  }\\n  gl_FragColor = fragColor * opacity;\\n}\\n\"]),s=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\n#define FLOAT_MAX  1.70141184e38\\n#define FLOAT_MIN  1.17549435e-38\\n\\n// https://github.com/mikolalysenko/glsl-read-float/blob/master/index.glsl\\nvec4 packFloat(float v) {\\n  float av = abs(v);\\n\\n  //Handle special cases\\n  if(av < FLOAT_MIN) {\\n    return vec4(0.0, 0.0, 0.0, 0.0);\\n  } else if(v > FLOAT_MAX) {\\n    return vec4(127.0, 128.0, 0.0, 0.0) / 255.0;\\n  } else if(v < -FLOAT_MAX) {\\n    return vec4(255.0, 128.0, 0.0, 0.0) / 255.0;\\n  }\\n\\n  vec4 c = vec4(0,0,0,0);\\n\\n  //Compute exponent and mantissa\\n  float e = floor(log2(av));\\n  float m = av * pow(2.0, -e) - 1.0;\\n\\n  //Unpack mantissa\\n  c[1] = floor(128.0 * m);\\n  m -= c[1] / 128.0;\\n  c[2] = floor(32768.0 * m);\\n  m -= c[2] / 32768.0;\\n  c[3] = floor(8388608.0 * m);\\n\\n  //Unpack exponent\\n  float ebias = e + 127.0;\\n  c[0] = floor(ebias / 2.0);\\n  ebias -= c[0] * 2.0;\\n  c[1] += floor(ebias) * 128.0;\\n\\n  //Unpack sign bit\\n  c[0] += 128.0 * step(0.0, -v);\\n\\n  //Scale back to range\\n  return c / 255.0;\\n}\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform float pickId;\\nuniform vec3 clipBounds[2];\\n\\nvarying vec3 worldPosition;\\nvarying float pixelArcLength;\\nvarying vec4 fragColor;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], worldPosition)) discard;\\n\\n  gl_FragColor = vec4(pickId/255.0, packFloat(pixelArcLength).xyz);\\n}\"]),l=[{name:\"position\",type:\"vec3\"},{name:\"nextPosition\",type:\"vec3\"},{name:\"arcLength\",type:\"float\"},{name:\"lineWidth\",type:\"float\"},{name:\"color\",type:\"vec4\"}];n.createShader=function(t){return i(t,a,o,null,l)},n.createPickShader=function(t){return i(t,a,s,null,l)}},{\"gl-shader\":335,glslify:276}],275:[function(t,e,n){\"use strict\";e.exports=function(t){var e=t.gl||t.scene&&t.scene.gl,n=h(e);n.attributes.position.location=0,n.attributes.nextPosition.location=1,n.attributes.arcLength.location=2,n.attributes.lineWidth.location=3,n.attributes.color.location=4;var o=d(e);o.attributes.position.location=0,o.attributes.nextPosition.location=1,o.attributes.arcLength.location=2,o.attributes.lineWidth.location=3,o.attributes.color.location=4;for(var s=r(e),l=i(e,[{buffer:s,size:3,offset:0,stride:48},{buffer:s,size:3,offset:12,stride:48},{buffer:s,size:1,offset:24,stride:48},{buffer:s,size:1,offset:28,stride:48},{buffer:s,size:4,offset:32,stride:48}]),u=c(new Array(1024),[256,1,4]),f=0;f<1024;++f)u.data[f]=255;var p=a(e,u);p.wrap=e.REPEAT;var m=new y(e,n,o,s,l,p);return m.update(t),m};var r=t(\"gl-buffer\"),i=t(\"gl-vao\"),a=t(\"gl-texture2d\"),o=new Uint8Array(4),s=new Float32Array(o.buffer),l=t(\"binary-search-bounds\"),c=t(\"ndarray\"),u=t(\"./lib/shaders\"),h=u.createShader,d=u.createPickShader,f=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function p(t,e){for(var n=0,r=0;r<3;++r){var i=t[r]-e[r];n+=i*i}return Math.sqrt(n)}function m(t){for(var e=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],n=0;n<3;++n)e[0][n]=Math.max(t[0][n],e[0][n]),e[1][n]=Math.min(t[1][n],e[1][n]);return e}function g(t,e,n,r){this.arcLength=t,this.position=e,this.index=n,this.dataCoordinate=r}function y(t,e,n,r,i,a){this.gl=t,this.shader=e,this.pickShader=n,this.buffer=r,this.vao=i,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.points=[],this.arcLength=[],this.vertexCount=0,this.bounds=[[0,0,0],[0,0,0]],this.pickId=0,this.lineWidth=1,this.texture=a,this.dashScale=1,this.opacity=1,this.hasAlpha=!1,this.dirty=!0,this.pixelRatio=1}var v=y.prototype;v.isTransparent=function(){return this.hasAlpha},v.isOpaque=function(){return!this.hasAlpha},v.pickSlots=1,v.setPickBase=function(t){this.pickId=t},v.drawTransparent=v.draw=function(t){if(this.vertexCount){var e=this.gl,n=this.shader,r=this.vao;n.bind(),n.uniforms={model:t.model||f,view:t.view||f,projection:t.projection||f,clipBounds:m(this.clipBounds),dashTexture:this.texture.bind(),dashScale:this.dashScale/this.arcLength[this.arcLength.length-1],opacity:this.opacity,screenShape:[e.drawingBufferWidth,e.drawingBufferHeight],pixelRatio:this.pixelRatio},r.bind(),r.draw(e.TRIANGLE_STRIP,this.vertexCount),r.unbind()}},v.drawPick=function(t){if(this.vertexCount){var e=this.gl,n=this.pickShader,r=this.vao;n.bind(),n.uniforms={model:t.model||f,view:t.view||f,projection:t.projection||f,pickId:this.pickId,clipBounds:m(this.clipBounds),screenShape:[e.drawingBufferWidth,e.drawingBufferHeight],pixelRatio:this.pixelRatio},r.bind(),r.draw(e.TRIANGLE_STRIP,this.vertexCount),r.unbind()}},v.update=function(t){var e,n;this.dirty=!0;var r=!!t.connectGaps;\"dashScale\"in t&&(this.dashScale=t.dashScale),this.hasAlpha=!1,\"opacity\"in t&&(this.opacity=+t.opacity,this.opacity<1&&(this.hasAlpha=!0));var i=[],a=[],o=[],s=0,u=0,h=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],d=t.position||t.positions;if(d){var f=t.color||t.colors||[0,0,0,1],m=t.lineWidth||1,g=!1;t:for(e=1;e<d.length;++e){var y,v,_,b=d[e-1],x=d[e];for(a.push(s),o.push(b.slice()),n=0;n<3;++n){if(isNaN(b[n])||isNaN(x[n])||!isFinite(b[n])||!isFinite(x[n])){if(!r&&i.length>0){for(var w=0;w<24;++w)i.push(i[i.length-12]);u+=2,g=!0}continue t}h[0][n]=Math.min(h[0][n],b[n],x[n]),h[1][n]=Math.max(h[1][n],b[n],x[n])}Array.isArray(f[0])?(y=f.length>e-1?f[e-1]:f.length>0?f[f.length-1]:[0,0,0,1],v=f.length>e?f[e]:f.length>0?f[f.length-1]:[0,0,0,1]):y=v=f,3===y.length&&(y=[y[0],y[1],y[2],1]),3===v.length&&(v=[v[0],v[1],v[2],1]),!this.hasAlpha&&y[3]<1&&(this.hasAlpha=!0),_=Array.isArray(m)?m.length>e-1?m[e-1]:m.length>0?m[m.length-1]:[0,0,0,1]:m;var k=s;if(s+=p(b,x),g){for(n=0;n<2;++n)i.push(b[0],b[1],b[2],x[0],x[1],x[2],k,_,y[0],y[1],y[2],y[3]);u+=2,g=!1}i.push(b[0],b[1],b[2],x[0],x[1],x[2],k,_,y[0],y[1],y[2],y[3],b[0],b[1],b[2],x[0],x[1],x[2],k,-_,y[0],y[1],y[2],y[3],x[0],x[1],x[2],b[0],b[1],b[2],s,-_,v[0],v[1],v[2],v[3],x[0],x[1],x[2],b[0],b[1],b[2],s,_,v[0],v[1],v[2],v[3]),u+=4}}if(this.buffer.update(i),a.push(s),o.push(d[d.length-1].slice()),this.bounds=h,this.vertexCount=u,this.points=o,this.arcLength=a,\"dashes\"in t){var M=t.dashes.slice();for(M.unshift(0),e=1;e<M.length;++e)M[e]=M[e-1]+M[e];var T=c(new Array(1024),[256,1,4]);for(e=0;e<256;++e){for(n=0;n<4;++n)T.set(e,0,n,0);1&l.le(M,M[M.length-1]*e/255)?T.set(e,0,0,0):T.set(e,0,0,255)}this.texture.setPixels(T)}},v.dispose=function(){this.shader.dispose(),this.vao.dispose(),this.buffer.dispose()},v.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=function(t,e,n,r){return o[0]=0,o[1]=n,o[2]=e,o[3]=t,s[0]}(t.value[0],t.value[1],t.value[2]),n=l.le(this.arcLength,e);if(n<0)return null;if(n===this.arcLength.length-1)return new g(this.arcLength[this.arcLength.length-1],this.points[this.points.length-1].slice(),n);for(var r=this.points[n],i=this.points[Math.min(n+1,this.points.length-1)],a=(e-this.arcLength[n])/(this.arcLength[n+1]-this.arcLength[n]),c=1-a,u=[0,0,0],h=0;h<3;++h)u[h]=c*r[h]+a*i[h];var d=Math.min(a<.5?n:n+1,this.points.length-1);return new g(e,u,d,this.points[d])}},{\"./lib/shaders\":274,\"binary-search-bounds\":96,\"gl-buffer\":259,\"gl-texture2d\":353,\"gl-vao\":358,ndarray:495}],276:[function(t,e,n){arguments[4][257][0].apply(n,arguments)},{dup:257}],277:[function(t,e,n){e.exports=function(t,e){var n=e[0],r=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],c=e[7],u=e[8],h=e[9],d=e[10],f=e[11],p=e[12],m=e[13],g=e[14],y=e[15];return t[0]=s*(d*y-f*g)-h*(l*y-c*g)+m*(l*f-c*d),t[1]=-(r*(d*y-f*g)-h*(i*y-a*g)+m*(i*f-a*d)),t[2]=r*(l*y-c*g)-s*(i*y-a*g)+m*(i*c-a*l),t[3]=-(r*(l*f-c*d)-s*(i*f-a*d)+h*(i*c-a*l)),t[4]=-(o*(d*y-f*g)-u*(l*y-c*g)+p*(l*f-c*d)),t[5]=n*(d*y-f*g)-u*(i*y-a*g)+p*(i*f-a*d),t[6]=-(n*(l*y-c*g)-o*(i*y-a*g)+p*(i*c-a*l)),t[7]=n*(l*f-c*d)-o*(i*f-a*d)+u*(i*c-a*l),t[8]=o*(h*y-f*m)-u*(s*y-c*m)+p*(s*f-c*h),t[9]=-(n*(h*y-f*m)-u*(r*y-a*m)+p*(r*f-a*h)),t[10]=n*(s*y-c*m)-o*(r*y-a*m)+p*(r*c-a*s),t[11]=-(n*(s*f-c*h)-o*(r*f-a*h)+u*(r*c-a*s)),t[12]=-(o*(h*g-d*m)-u*(s*g-l*m)+p*(s*d-l*h)),t[13]=n*(h*g-d*m)-u*(r*g-i*m)+p*(r*d-i*h),t[14]=-(n*(s*g-l*m)-o*(r*g-i*m)+p*(r*l-i*s)),t[15]=n*(s*d-l*h)-o*(r*d-i*h)+u*(r*l-i*s),t}},{}],278:[function(t,e,n){e.exports=function(t){var e=new Float32Array(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}},{}],279:[function(t,e,n){e.exports=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}},{}],280:[function(t,e,n){e.exports=function(){var t=new Float32Array(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},{}],281:[function(t,e,n){e.exports=function(t){var e=t[0],n=t[1],r=t[2],i=t[3],a=t[4],o=t[5],s=t[6],l=t[7],c=t[8],u=t[9],h=t[10],d=t[11],f=t[12],p=t[13],m=t[14],g=t[15];return(e*o-n*a)*(h*g-d*m)-(e*s-r*a)*(u*g-d*p)+(e*l-i*a)*(u*m-h*p)+(n*s-r*o)*(c*g-d*f)-(n*l-i*o)*(c*m-h*f)+(r*l-i*s)*(c*p-u*f)}},{}],282:[function(t,e,n){e.exports=function(t,e){var n=e[0],r=e[1],i=e[2],a=e[3],o=n+n,s=r+r,l=i+i,c=n*o,u=r*o,h=r*s,d=i*o,f=i*s,p=i*l,m=a*o,g=a*s,y=a*l;return t[0]=1-h-p,t[1]=u+y,t[2]=d-g,t[3]=0,t[4]=u-y,t[5]=1-c-p,t[6]=f+m,t[7]=0,t[8]=d+g,t[9]=f-m,t[10]=1-c-h,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},{}],283:[function(t,e,n){e.exports=function(t,e,n){var r,i,a,o=n[0],s=n[1],l=n[2],c=Math.sqrt(o*o+s*s+l*l);return Math.abs(c)<1e-6?null:(o*=c=1/c,s*=c,l*=c,r=Math.sin(e),i=Math.cos(e),t[0]=o*o*(a=1-i)+i,t[1]=s*o*a+l*r,t[2]=l*o*a-s*r,t[3]=0,t[4]=o*s*a-l*r,t[5]=s*s*a+i,t[6]=l*s*a+o*r,t[7]=0,t[8]=o*l*a+s*r,t[9]=s*l*a-o*r,t[10]=l*l*a+i,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)}},{}],284:[function(t,e,n){e.exports=function(t,e,n){var r=e[0],i=e[1],a=e[2],o=e[3],s=r+r,l=i+i,c=a+a,u=r*s,h=r*l,d=r*c,f=i*l,p=i*c,m=a*c,g=o*s,y=o*l,v=o*c;return t[0]=1-(f+m),t[1]=h+v,t[2]=d-y,t[3]=0,t[4]=h-v,t[5]=1-(u+m),t[6]=p+g,t[7]=0,t[8]=d+y,t[9]=p-g,t[10]=1-(u+f),t[11]=0,t[12]=n[0],t[13]=n[1],t[14]=n[2],t[15]=1,t}},{}],285:[function(t,e,n){e.exports=function(t,e){return t[0]=e[0],t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e[1],t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e[2],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},{}],286:[function(t,e,n){e.exports=function(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t}},{}],287:[function(t,e,n){e.exports=function(t,e){var n=Math.sin(e),r=Math.cos(e);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=r,t[6]=n,t[7]=0,t[8]=0,t[9]=-n,t[10]=r,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},{}],288:[function(t,e,n){e.exports=function(t,e){var n=Math.sin(e),r=Math.cos(e);return t[0]=r,t[1]=0,t[2]=-n,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=n,t[9]=0,t[10]=r,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},{}],289:[function(t,e,n){e.exports=function(t,e){var n=Math.sin(e),r=Math.cos(e);return t[0]=r,t[1]=n,t[2]=0,t[3]=0,t[4]=-n,t[5]=r,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},{}],290:[function(t,e,n){e.exports=function(t,e,n,r,i,a,o){var s=1/(n-e),l=1/(i-r),c=1/(a-o);return t[0]=2*a*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*a*l,t[6]=0,t[7]=0,t[8]=(n+e)*s,t[9]=(i+r)*l,t[10]=(o+a)*c,t[11]=-1,t[12]=0,t[13]=0,t[14]=o*a*2*c,t[15]=0,t}},{}],291:[function(t,e,n){e.exports=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},{}],292:[function(t,e,n){e.exports={create:t(\"./create\"),clone:t(\"./clone\"),copy:t(\"./copy\"),identity:t(\"./identity\"),transpose:t(\"./transpose\"),invert:t(\"./invert\"),adjoint:t(\"./adjoint\"),determinant:t(\"./determinant\"),multiply:t(\"./multiply\"),translate:t(\"./translate\"),scale:t(\"./scale\"),rotate:t(\"./rotate\"),rotateX:t(\"./rotateX\"),rotateY:t(\"./rotateY\"),rotateZ:t(\"./rotateZ\"),fromRotation:t(\"./fromRotation\"),fromRotationTranslation:t(\"./fromRotationTranslation\"),fromScaling:t(\"./fromScaling\"),fromTranslation:t(\"./fromTranslation\"),fromXRotation:t(\"./fromXRotation\"),fromYRotation:t(\"./fromYRotation\"),fromZRotation:t(\"./fromZRotation\"),fromQuat:t(\"./fromQuat\"),frustum:t(\"./frustum\"),perspective:t(\"./perspective\"),perspectiveFromFieldOfView:t(\"./perspectiveFromFieldOfView\"),ortho:t(\"./ortho\"),lookAt:t(\"./lookAt\"),str:t(\"./str\")}},{\"./adjoint\":277,\"./clone\":278,\"./copy\":279,\"./create\":280,\"./determinant\":281,\"./fromQuat\":282,\"./fromRotation\":283,\"./fromRotationTranslation\":284,\"./fromScaling\":285,\"./fromTranslation\":286,\"./fromXRotation\":287,\"./fromYRotation\":288,\"./fromZRotation\":289,\"./frustum\":290,\"./identity\":291,\"./invert\":293,\"./lookAt\":294,\"./multiply\":295,\"./ortho\":296,\"./perspective\":297,\"./perspectiveFromFieldOfView\":298,\"./rotate\":299,\"./rotateX\":300,\"./rotateY\":301,\"./rotateZ\":302,\"./scale\":303,\"./str\":304,\"./translate\":305,\"./transpose\":306}],293:[function(t,e,n){e.exports=function(t,e){var n=e[0],r=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],c=e[7],u=e[8],h=e[9],d=e[10],f=e[11],p=e[12],m=e[13],g=e[14],y=e[15],v=n*s-r*o,_=n*l-i*o,b=n*c-a*o,x=r*l-i*s,w=r*c-a*s,k=i*c-a*l,M=u*m-h*p,T=u*g-d*p,S=u*y-f*p,A=h*g-d*m,L=h*y-f*m,C=d*y-f*g,E=v*C-_*L+b*A+x*S-w*T+k*M;return E?(t[0]=(s*C-l*L+c*A)*(E=1/E),t[1]=(i*L-r*C-a*A)*E,t[2]=(m*k-g*w+y*x)*E,t[3]=(d*w-h*k-f*x)*E,t[4]=(l*S-o*C-c*T)*E,t[5]=(n*C-i*S+a*T)*E,t[6]=(g*b-p*k-y*_)*E,t[7]=(u*k-d*b+f*_)*E,t[8]=(o*L-s*S+c*M)*E,t[9]=(r*S-n*L-a*M)*E,t[10]=(p*w-m*b+y*v)*E,t[11]=(h*b-u*w-f*v)*E,t[12]=(s*T-o*A-l*M)*E,t[13]=(n*A-r*T+i*M)*E,t[14]=(m*_-p*x-g*v)*E,t[15]=(u*x-h*_+d*v)*E,t):null}},{}],294:[function(t,e,n){var r=t(\"./identity\");e.exports=function(t,e,n,i){var a,o,s,l,c,u,h,d,f,p,m=e[0],g=e[1],y=e[2],v=i[0],_=i[1],b=i[2],x=n[0],w=n[1],k=n[2];return Math.abs(m-x)<1e-6&&Math.abs(g-w)<1e-6&&Math.abs(y-k)<1e-6?r(t):(h=m-x,d=g-w,f=y-k,a=_*(f*=p=1/Math.sqrt(h*h+d*d+f*f))-b*(d*=p),o=b*(h*=p)-v*f,s=v*d-_*h,(p=Math.sqrt(a*a+o*o+s*s))?(a*=p=1/p,o*=p,s*=p):(a=0,o=0,s=0),l=d*s-f*o,c=f*a-h*s,u=h*o-d*a,(p=Math.sqrt(l*l+c*c+u*u))?(l*=p=1/p,c*=p,u*=p):(l=0,c=0,u=0),t[0]=a,t[1]=l,t[2]=h,t[3]=0,t[4]=o,t[5]=c,t[6]=d,t[7]=0,t[8]=s,t[9]=u,t[10]=f,t[11]=0,t[12]=-(a*m+o*g+s*y),t[13]=-(l*m+c*g+u*y),t[14]=-(h*m+d*g+f*y),t[15]=1,t)}},{\"./identity\":291}],295:[function(t,e,n){e.exports=function(t,e,n){var r=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],c=e[6],u=e[7],h=e[8],d=e[9],f=e[10],p=e[11],m=e[12],g=e[13],y=e[14],v=e[15],_=n[0],b=n[1],x=n[2],w=n[3];return t[0]=_*r+b*s+x*h+w*m,t[1]=_*i+b*l+x*d+w*g,t[2]=_*a+b*c+x*f+w*y,t[3]=_*o+b*u+x*p+w*v,t[4]=(_=n[4])*r+(b=n[5])*s+(x=n[6])*h+(w=n[7])*m,t[5]=_*i+b*l+x*d+w*g,t[6]=_*a+b*c+x*f+w*y,t[7]=_*o+b*u+x*p+w*v,t[8]=(_=n[8])*r+(b=n[9])*s+(x=n[10])*h+(w=n[11])*m,t[9]=_*i+b*l+x*d+w*g,t[10]=_*a+b*c+x*f+w*y,t[11]=_*o+b*u+x*p+w*v,t[12]=(_=n[12])*r+(b=n[13])*s+(x=n[14])*h+(w=n[15])*m,t[13]=_*i+b*l+x*d+w*g,t[14]=_*a+b*c+x*f+w*y,t[15]=_*o+b*u+x*p+w*v,t}},{}],296:[function(t,e,n){e.exports=function(t,e,n,r,i,a,o){var s=1/(e-n),l=1/(r-i),c=1/(a-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*c,t[11]=0,t[12]=(e+n)*s,t[13]=(i+r)*l,t[14]=(o+a)*c,t[15]=1,t}},{}],297:[function(t,e,n){e.exports=function(t,e,n,r,i){var a=1/Math.tan(e/2),o=1/(r-i);return t[0]=a/n,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=a,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(i+r)*o,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*i*r*o,t[15]=0,t}},{}],298:[function(t,e,n){e.exports=function(t,e,n,r){var i=Math.tan(e.upDegrees*Math.PI/180),a=Math.tan(e.downDegrees*Math.PI/180),o=Math.tan(e.leftDegrees*Math.PI/180),s=Math.tan(e.rightDegrees*Math.PI/180),l=2/(o+s),c=2/(i+a);return t[0]=l,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=c,t[6]=0,t[7]=0,t[8]=-(o-s)*l*.5,t[9]=(i-a)*c*.5,t[10]=r/(n-r),t[11]=-1,t[12]=0,t[13]=0,t[14]=r*n/(n-r),t[15]=0,t}},{}],299:[function(t,e,n){e.exports=function(t,e,n,r){var i,a,o,s,l,c,u,h,d,f,p,m,g,y,v,_,b,x,w,k,M,T,S,A,L=r[0],C=r[1],E=r[2],O=Math.sqrt(L*L+C*C+E*E);return Math.abs(O)<1e-6?null:(L*=O=1/O,C*=O,E*=O,i=Math.sin(n),a=Math.cos(n),l=e[1],c=e[2],u=e[3],d=e[5],f=e[6],p=e[7],g=e[9],y=e[10],v=e[11],w=L*C*(o=1-a)-E*i,k=C*C*o+a,M=E*C*o+L*i,T=L*E*o+C*i,S=C*E*o-L*i,A=E*E*o+a,t[0]=(s=e[0])*(_=L*L*o+a)+(h=e[4])*(b=C*L*o+E*i)+(m=e[8])*(x=E*L*o-C*i),t[1]=l*_+d*b+g*x,t[2]=c*_+f*b+y*x,t[3]=u*_+p*b+v*x,t[4]=s*w+h*k+m*M,t[5]=l*w+d*k+g*M,t[6]=c*w+f*k+y*M,t[7]=u*w+p*k+v*M,t[8]=s*T+h*S+m*A,t[9]=l*T+d*S+g*A,t[10]=c*T+f*S+y*A,t[11]=u*T+p*S+v*A,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)}},{}],300:[function(t,e,n){e.exports=function(t,e,n){var r=Math.sin(n),i=Math.cos(n),a=e[4],o=e[5],s=e[6],l=e[7],c=e[8],u=e[9],h=e[10],d=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=a*i+c*r,t[5]=o*i+u*r,t[6]=s*i+h*r,t[7]=l*i+d*r,t[8]=c*i-a*r,t[9]=u*i-o*r,t[10]=h*i-s*r,t[11]=d*i-l*r,t}},{}],301:[function(t,e,n){e.exports=function(t,e,n){var r=Math.sin(n),i=Math.cos(n),a=e[0],o=e[1],s=e[2],l=e[3],c=e[8],u=e[9],h=e[10],d=e[11];return e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i-c*r,t[1]=o*i-u*r,t[2]=s*i-h*r,t[3]=l*i-d*r,t[8]=a*r+c*i,t[9]=o*r+u*i,t[10]=s*r+h*i,t[11]=l*r+d*i,t}},{}],302:[function(t,e,n){e.exports=function(t,e,n){var r=Math.sin(n),i=Math.cos(n),a=e[0],o=e[1],s=e[2],l=e[3],c=e[4],u=e[5],h=e[6],d=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i+c*r,t[1]=o*i+u*r,t[2]=s*i+h*r,t[3]=l*i+d*r,t[4]=c*i-a*r,t[5]=u*i-o*r,t[6]=h*i-s*r,t[7]=d*i-l*r,t}},{}],303:[function(t,e,n){e.exports=function(t,e,n){var r=n[0],i=n[1],a=n[2];return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*a,t[9]=e[9]*a,t[10]=e[10]*a,t[11]=e[11]*a,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}},{}],304:[function(t,e,n){e.exports=function(t){return\"mat4(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\", \"+t[4]+\", \"+t[5]+\", \"+t[6]+\", \"+t[7]+\", \"+t[8]+\", \"+t[9]+\", \"+t[10]+\", \"+t[11]+\", \"+t[12]+\", \"+t[13]+\", \"+t[14]+\", \"+t[15]+\")\"}},{}],305:[function(t,e,n){e.exports=function(t,e,n){var r,i,a,o,s,l,c,u,h,d,f,p,m=n[0],g=n[1],y=n[2];return e===t?(t[12]=e[0]*m+e[4]*g+e[8]*y+e[12],t[13]=e[1]*m+e[5]*g+e[9]*y+e[13],t[14]=e[2]*m+e[6]*g+e[10]*y+e[14],t[15]=e[3]*m+e[7]*g+e[11]*y+e[15]):(i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],c=e[6],u=e[7],h=e[8],d=e[9],f=e[10],p=e[11],t[0]=r=e[0],t[1]=i,t[2]=a,t[3]=o,t[4]=s,t[5]=l,t[6]=c,t[7]=u,t[8]=h,t[9]=d,t[10]=f,t[11]=p,t[12]=r*m+s*g+h*y+e[12],t[13]=i*m+l*g+d*y+e[13],t[14]=a*m+c*g+f*y+e[14],t[15]=o*m+u*g+p*y+e[15]),t}},{}],306:[function(t,e,n){e.exports=function(t,e){if(t===e){var n=e[1],r=e[2],i=e[3],a=e[6],o=e[7],s=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=n,t[6]=e[9],t[7]=e[13],t[8]=r,t[9]=a,t[11]=e[14],t[12]=i,t[13]=o,t[14]=s}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t}},{}],307:[function(t,e,n){\"use strict\";var r=t(\"barycentric\"),i=t(\"polytope-closest-point/lib/closest_point_2d.js\");function a(t,e){for(var n=[0,0,0,0],r=0;r<4;++r)for(var i=0;i<4;++i)n[i]+=t[4*r+i]*e[r];return n}function o(t,e,n,r,i){for(var o=a(r,a(n,a(e,[t[0],t[1],t[2],1]))),s=0;s<3;++s)o[s]/=o[3];return[.5*i[0]*(1+o[0]),.5*i[1]*(1-o[1])]}function s(t,e){for(var n=[0,0,0],r=0;r<t.length;++r)for(var i=t[r],a=e[r],o=0;o<3;++o)n[o]+=a*i[o];return n}e.exports=function(t,e,n,a,l,c){if(1===t.length)return[0,t[0].slice()];for(var u=new Array(t.length),h=0;h<t.length;++h)u[h]=o(t[h],n,a,l,c);var d=0,f=1/0;for(h=0;h<u.length;++h){for(var p=0,m=0;m<2;++m)p+=Math.pow(u[h][m]-e[m],2);p<f&&(f=p,d=h)}var g=function(t,e){if(2===t.length){for(var n=0,a=0,o=0;o<2;++o)n+=Math.pow(e[o]-t[0][o],2),a+=Math.pow(e[o]-t[1][o],2);return(n=Math.sqrt(n))+(a=Math.sqrt(a))<1e-6?[1,0]:[a/(n+a),n/(a+n)]}if(3===t.length){var s=[0,0];return i(t[0],t[1],t[2],e,s),r(t,s)}return[]}(u,e),y=0;for(h=0;h<3;++h){if(g[h]<-.001||g[h]>1.0001)return null;y+=g[h]}return Math.abs(y-1)>.001?null:[d,s(t,g),g]}},{barycentric:78,\"polytope-closest-point/lib/closest_point_2d.js\":525}],308:[function(t,e,n){var r=t(\"glslify\"),i=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position, normal;\\nattribute vec4 color;\\nattribute vec2 uv;\\n\\nuniform mat4 model\\n           , view\\n           , projection\\n           , inverseModel;\\nuniform vec3 eyePosition\\n           , lightPosition;\\n\\nvarying vec3 f_normal\\n           , f_lightDirection\\n           , f_eyeDirection\\n           , f_data;\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvec4 project(vec3 p) {\\n  return projection * view * model * vec4(p, 1.0);\\n}\\n\\nvoid main() {\\n  gl_Position      = project(position);\\n\\n  //Lighting geometry parameters\\n  vec4 cameraCoordinate = view * vec4(position , 1.0);\\n  cameraCoordinate.xyz /= cameraCoordinate.w;\\n  f_lightDirection = lightPosition - cameraCoordinate.xyz;\\n  f_eyeDirection   = eyePosition - cameraCoordinate.xyz;\\n  f_normal  = normalize((vec4(normal, 0.0) * inverseModel).xyz);\\n\\n  f_color          = color;\\n  f_data           = position;\\n  f_uv             = uv;\\n}\\n\"]),a=r([\"#extension GL_OES_standard_derivatives : enable\\n\\nprecision highp float;\\n#define GLSLIFY 1\\n\\nfloat beckmannDistribution(float x, float roughness) {\\n  float NdotH = max(x, 0.0001);\\n  float cos2Alpha = NdotH * NdotH;\\n  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\\n  float roughness2 = roughness * roughness;\\n  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\\n  return exp(tan2Alpha / roughness2) / denom;\\n}\\n\\nfloat cookTorranceSpecular(\\n  vec3 lightDirection,\\n  vec3 viewDirection,\\n  vec3 surfaceNormal,\\n  float roughness,\\n  float fresnel) {\\n\\n  float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\\n  float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\\n\\n  //Half angle vector\\n  vec3 H = normalize(lightDirection + viewDirection);\\n\\n  //Geometric term\\n  float NdotH = max(dot(surfaceNormal, H), 0.0);\\n  float VdotH = max(dot(viewDirection, H), 0.000001);\\n  float LdotH = max(dot(lightDirection, H), 0.000001);\\n  float G1 = (2.0 * NdotH * VdotN) / VdotH;\\n  float G2 = (2.0 * NdotH * LdotN) / LdotH;\\n  float G = min(1.0, min(G1, G2));\\n  \\n  //Distribution term\\n  float D = beckmannDistribution(NdotH, roughness);\\n\\n  //Fresnel term\\n  float F = pow(1.0 - VdotN, fresnel);\\n\\n  //Multiply terms and done\\n  return  G * F * D / max(3.14159265 * VdotN, 0.000001);\\n}\\n\\n//#pragma glslify: beckmann = require(glsl-specular-beckmann) // used in gl-surface3d\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 clipBounds[2];\\nuniform float roughness\\n            , fresnel\\n            , kambient\\n            , kdiffuse\\n            , kspecular;\\nuniform sampler2D texture;\\n\\nvarying vec3 f_normal\\n           , f_lightDirection\\n           , f_eyeDirection\\n           , f_data;\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  if (f_color.a == 0.0 ||\\n    outOfRange(clipBounds[0], clipBounds[1], f_data)\\n  ) discard;\\n\\n  vec3 N = normalize(f_normal);\\n  vec3 L = normalize(f_lightDirection);\\n  vec3 V = normalize(f_eyeDirection);\\n\\n  if(gl_FrontFacing) {\\n    N = -N;\\n  }\\n\\n  float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\\n  //float specular = max(0.0, beckmann(L, V, N, roughness)); // used in gl-surface3d\\n\\n  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\\n\\n  vec4 surfaceColor = vec4(f_color.rgb, 1.0) * texture2D(texture, f_uv);\\n  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\\n\\n  gl_FragColor = litColor * f_color.a;\\n}\\n\"]),o=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position;\\nattribute vec4 color;\\nattribute vec2 uv;\\n\\nuniform mat4 model, view, projection;\\n\\nvarying vec4 f_color;\\nvarying vec3 f_data;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  gl_Position = projection * view * model * vec4(position, 1.0);\\n  f_color = color;\\n  f_data  = position;\\n  f_uv    = uv;\\n}\"]),s=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 clipBounds[2];\\nuniform sampler2D texture;\\nuniform float opacity;\\n\\nvarying vec4 f_color;\\nvarying vec3 f_data;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_data)) discard;\\n\\n  gl_FragColor = f_color * texture2D(texture, f_uv) * opacity;\\n}\"]),l=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nattribute vec3 position;\\nattribute vec4 color;\\nattribute vec2 uv;\\nattribute float pointSize;\\n\\nuniform mat4 model, view, projection;\\nuniform vec3 clipBounds[2];\\n\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\n\\n    gl_Position = vec4(0.0, 0.0 ,0.0 ,0.0);\\n  } else {\\n    gl_Position = projection * view * model * vec4(position, 1.0);\\n  }\\n  gl_PointSize = pointSize;\\n  f_color = color;\\n  f_uv = uv;\\n}\"]),c=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nuniform sampler2D texture;\\nuniform float opacity;\\n\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  vec2 pointR = gl_PointCoord.xy - vec2(0.5, 0.5);\\n  if(dot(pointR, pointR) > 0.25) {\\n    discard;\\n  }\\n  gl_FragColor = f_color * texture2D(texture, f_uv) * opacity;\\n}\"]),u=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position;\\nattribute vec4 id;\\n\\nuniform mat4 model, view, projection;\\n\\nvarying vec3 f_position;\\nvarying vec4 f_id;\\n\\nvoid main() {\\n  gl_Position = projection * view * model * vec4(position, 1.0);\\n  f_id        = id;\\n  f_position  = position;\\n}\"]),h=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3  clipBounds[2];\\nuniform float pickId;\\n\\nvarying vec3 f_position;\\nvarying vec4 f_id;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\n\\n  gl_FragColor = vec4(pickId, f_id.xyz);\\n}\"]),d=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nattribute vec3  position;\\nattribute float pointSize;\\nattribute vec4  id;\\n\\nuniform mat4 model, view, projection;\\nuniform vec3 clipBounds[2];\\n\\nvarying vec3 f_position;\\nvarying vec4 f_id;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\n\\n    gl_Position = vec4(0.0, 0.0, 0.0, 0.0);\\n  } else {\\n    gl_Position  = projection * view * model * vec4(position, 1.0);\\n    gl_PointSize = pointSize;\\n  }\\n  f_id         = id;\\n  f_position   = position;\\n}\"]),f=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position;\\n\\nuniform mat4 model, view, projection;\\n\\nvoid main() {\\n  gl_Position = projection * view * model * vec4(position, 1.0);\\n}\"]),p=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nuniform vec3 contourColor;\\n\\nvoid main() {\\n  gl_FragColor = vec4(contourColor, 1.0);\\n}\\n\"]);n.meshShader={vertex:i,fragment:a,attributes:[{name:\"position\",type:\"vec3\"},{name:\"normal\",type:\"vec3\"},{name:\"color\",type:\"vec4\"},{name:\"uv\",type:\"vec2\"}]},n.wireShader={vertex:o,fragment:s,attributes:[{name:\"position\",type:\"vec3\"},{name:\"color\",type:\"vec4\"},{name:\"uv\",type:\"vec2\"}]},n.pointShader={vertex:l,fragment:c,attributes:[{name:\"position\",type:\"vec3\"},{name:\"color\",type:\"vec4\"},{name:\"uv\",type:\"vec2\"},{name:\"pointSize\",type:\"float\"}]},n.pickShader={vertex:u,fragment:h,attributes:[{name:\"position\",type:\"vec3\"},{name:\"id\",type:\"vec4\"}]},n.pointPickShader={vertex:d,fragment:h,attributes:[{name:\"position\",type:\"vec3\"},{name:\"pointSize\",type:\"float\"},{name:\"id\",type:\"vec4\"}]},n.contourShader={vertex:f,fragment:p,attributes:[{name:\"position\",type:\"vec3\"}]}},{glslify:310}],309:[function(t,e,n){\"use strict\";var r=t(\"gl-shader\"),i=t(\"gl-buffer\"),a=t(\"gl-vao\"),o=t(\"gl-texture2d\"),s=t(\"normals\"),l=t(\"gl-mat4/multiply\"),c=t(\"gl-mat4/invert\"),u=t(\"ndarray\"),h=t(\"colormap\"),d=t(\"simplicial-complex-contour\"),f=t(\"typedarray-pool\"),p=t(\"./lib/shaders\"),m=t(\"./lib/closest-point\"),g=p.meshShader,y=p.wireShader,v=p.pointShader,_=p.pickShader,b=p.pointPickShader,x=p.contourShader,w=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function k(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g,y,v,_,b,x,k,M,T,S,A){this.gl=t,this.pixelRatio=1,this.cells=[],this.positions=[],this.intensity=[],this.texture=e,this.dirty=!0,this.triShader=n,this.lineShader=r,this.pointShader=i,this.pickShader=a,this.pointPickShader=o,this.contourShader=s,this.trianglePositions=l,this.triangleColors=u,this.triangleNormals=d,this.triangleUVs=h,this.triangleIds=c,this.triangleVAO=f,this.triangleCount=0,this.lineWidth=1,this.edgePositions=p,this.edgeColors=g,this.edgeUVs=y,this.edgeIds=m,this.edgeVAO=v,this.edgeCount=0,this.pointPositions=_,this.pointColors=x,this.pointUVs=k,this.pointSizes=M,this.pointIds=b,this.pointVAO=T,this.pointCount=0,this.contourLineWidth=1,this.contourPositions=S,this.contourVAO=A,this.contourCount=0,this.contourColor=[0,0,0],this.contourEnable=!0,this.pickVertex=!0,this.pickId=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lightPosition=[1e5,1e5,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.opacity=1,this.hasAlpha=!1,this.opacityscale=!1,this._model=w,this._view=w,this._projection=w,this._resolution=[1,1]}var M=k.prototype;function T(t,e){if(!e)return 1;if(!e.length)return 1;for(var n=0;n<e.length;++n){if(e.length<2)return 1;if(e[n][0]===t)return e[n][1];if(e[n][0]>t&&n>0){var r=(e[n][0]-t)/(e[n][0]-e[n-1][0]);return e[n][1]*(1-r)+r*e[n-1][1]}}return 1}function S(t){var e=r(t,g.vertex,g.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e.attributes.normal.location=4,e}function A(t){var e=r(t,y.vertex,y.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e}function L(t){var e=r(t,v.vertex,v.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e.attributes.pointSize.location=4,e}function C(t){var e=r(t,_.vertex,_.fragment);return e.attributes.position.location=0,e.attributes.id.location=1,e}function E(t){var e=r(t,b.vertex,b.fragment);return e.attributes.position.location=0,e.attributes.id.location=1,e.attributes.pointSize.location=4,e}function O(t){var e=r(t,x.vertex,x.fragment);return e.attributes.position.location=0,e}M.isOpaque=function(){return!this.hasAlpha},M.isTransparent=function(){return this.hasAlpha},M.pickSlots=1,M.setPickBase=function(t){this.pickId=t},M.highlight=function(t){if(t&&this.contourEnable){for(var e=d(this.cells,this.intensity,t.intensity),n=e.cells,r=e.vertexIds,i=e.vertexWeights,a=n.length,o=f.mallocFloat32(6*a),s=0,l=0;l<a;++l)for(var c=n[l],u=0;u<2;++u){var h=c[0];2===c.length&&(h=c[u]);for(var p=i[h],m=1-p,g=this.positions[r[h][0]],y=this.positions[r[h][1]],v=0;v<3;++v)o[s++]=p*g[v]+m*y[v]}this.contourCount=s/3|0,this.contourPositions.update(o.subarray(0,s)),f.free(o)}else this.contourCount=0},M.update=function(t){t=t||{};var e=this.gl;this.dirty=!0,\"contourEnable\"in t&&(this.contourEnable=t.contourEnable),\"contourColor\"in t&&(this.contourColor=t.contourColor),\"lineWidth\"in t&&(this.lineWidth=t.lineWidth),\"lightPosition\"in t&&(this.lightPosition=t.lightPosition),this.hasAlpha=!1,\"opacity\"in t&&(this.opacity=t.opacity,this.opacity<1&&(this.hasAlpha=!0)),\"opacityscale\"in t&&(this.opacityscale=t.opacityscale,this.hasAlpha=!0),\"ambient\"in t&&(this.ambientLight=t.ambient),\"diffuse\"in t&&(this.diffuseLight=t.diffuse),\"specular\"in t&&(this.specularLight=t.specular),\"roughness\"in t&&(this.roughness=t.roughness),\"fresnel\"in t&&(this.fresnel=t.fresnel),t.texture?(this.texture.dispose(),this.texture=o(e,t.texture)):t.colormap&&(this.texture.shape=[256,256],this.texture.minFilter=e.LINEAR_MIPMAP_LINEAR,this.texture.magFilter=e.LINEAR,this.texture.setPixels(function(t,e){for(var n=h({colormap:t,nshades:256,format:\"rgba\"}),r=new Uint8Array(1024),i=0;i<256;++i){for(var a=n[i],o=0;o<3;++o)r[4*i+o]=a[o];r[4*i+3]=e?255*T(i/255,e):255*a[3]}return u(r,[256,256,4],[4,0,1])}(t.colormap,this.opacityscale)),this.texture.generateMipmap());var n=t.cells,r=t.positions;if(r&&n){var i=[],a=[],l=[],c=[],d=[],f=[],p=[],m=[],g=[],y=[],v=[],_=[],b=[],x=[];this.cells=n,this.positions=r;var w=t.vertexNormals,k=t.cellNormals,M=void 0===t.vertexNormalsEpsilon?1e-6:t.vertexNormalsEpsilon;t.useFacetNormals&&!k&&(k=s.faceNormals(n,r,void 0===t.faceNormalsEpsilon?1e-6:t.faceNormalsEpsilon)),k||w||(w=s.vertexNormals(n,r,M));var S=t.vertexColors,A=t.cellColors,L=t.meshColor||[1,1,1,1],C=t.vertexUVs,E=t.vertexIntensity,O=t.cellUVs,D=t.cellIntensity,I=1/0,P=-1/0;if(!C&&!O)if(E)if(t.vertexIntensityBounds)I=+t.vertexIntensityBounds[0],P=+t.vertexIntensityBounds[1];else for(var R=0;R<E.length;++R){var z=E[R];I=Math.min(I,z),P=Math.max(P,z)}else if(D)if(t.cellIntensityBounds)I=+t.cellIntensityBounds[0],P=+t.cellIntensityBounds[1];else for(R=0;R<D.length;++R)z=D[R],I=Math.min(I,z),P=Math.max(P,z);else for(R=0;R<r.length;++R)z=r[R][2],I=Math.min(I,z),P=Math.max(P,z);this.intensity=E||D||function(t){for(var e=t.length,n=new Array(e),r=0;r<e;++r)n[r]=t[r][2];return n}(r),this.pickVertex=!(D||A);var j=t.pointSizes,F=t.pointSize||1;for(this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],R=0;R<r.length;++R)for(var N=r[R],B=0;B<3;++B)!isNaN(N[B])&&isFinite(N[B])&&(this.bounds[0][B]=Math.min(this.bounds[0][B],N[B]),this.bounds[1][B]=Math.max(this.bounds[1][B],N[B]));var Y=0,H=0,V=0;t:for(R=0;R<n.length;++R){var U=n[R];switch(U.length){case 1:for(N=r[q=U[0]],B=0;B<3;++B)if(isNaN(N[B])||!isFinite(N[B]))continue t;y.push(N[0],N[1],N[2]),G=S?S[q]:A?A[R]:L,this.opacityscale&&E?a.push(G[0],G[1],G[2],this.opacity*T((E[q]-I)/(P-I),this.opacityscale)):3===G.length?v.push(G[0],G[1],G[2],this.opacity):(v.push(G[0],G[1],G[2],G[3]*this.opacity),G[3]<1&&(this.hasAlpha=!0)),_.push((X=C?C[q]:E?[(E[q]-I)/(P-I),0]:O?O[R]:D?[(D[R]-I)/(P-I),0]:[(N[2]-I)/(P-I),0])[0],X[1]),b.push(j?j[q]:F),x.push(R),V+=1;break;case 2:for(B=0;B<2;++B){N=r[q=U[B]];for(var W=0;W<3;++W)if(isNaN(N[W])||!isFinite(N[W]))continue t}for(B=0;B<2;++B)f.push((N=r[q=U[B]])[0],N[1],N[2]),G=S?S[q]:A?A[R]:L,this.opacityscale&&E?a.push(G[0],G[1],G[2],this.opacity*T((E[q]-I)/(P-I),this.opacityscale)):3===G.length?p.push(G[0],G[1],G[2],this.opacity):(p.push(G[0],G[1],G[2],G[3]*this.opacity),G[3]<1&&(this.hasAlpha=!0)),m.push((X=C?C[q]:E?[(E[q]-I)/(P-I),0]:O?O[R]:D?[(D[R]-I)/(P-I),0]:[(N[2]-I)/(P-I),0])[0],X[1]),g.push(R);H+=1;break;case 3:for(B=0;B<3;++B)for(N=r[q=U[B]],W=0;W<3;++W)if(isNaN(N[W])||!isFinite(N[W]))continue t;for(B=0;B<3;++B){var q,G,X,Z;i.push((N=r[q=U[2-B]])[0],N[1],N[2]),(G=S?S[q]:A?A[R]:L)?this.opacityscale&&E?a.push(G[0],G[1],G[2],this.opacity*T((E[q]-I)/(P-I),this.opacityscale)):3===G.length?a.push(G[0],G[1],G[2],this.opacity):(a.push(G[0],G[1],G[2],G[3]*this.opacity),G[3]<1&&(this.hasAlpha=!0)):a.push(.5,.5,.5,1),c.push((X=C?C[q]:E?[(E[q]-I)/(P-I),0]:O?O[R]:D?[(D[R]-I)/(P-I),0]:[(N[2]-I)/(P-I),0])[0],X[1]),l.push((Z=w?w[q]:k[R])[0],Z[1],Z[2]),d.push(R)}Y+=1}}this.pointCount=V,this.edgeCount=H,this.triangleCount=Y,this.pointPositions.update(y),this.pointColors.update(v),this.pointUVs.update(_),this.pointSizes.update(b),this.pointIds.update(new Uint32Array(x)),this.edgePositions.update(f),this.edgeColors.update(p),this.edgeUVs.update(m),this.edgeIds.update(new Uint32Array(g)),this.trianglePositions.update(i),this.triangleColors.update(a),this.triangleUVs.update(c),this.triangleNormals.update(l),this.triangleIds.update(new Uint32Array(d))}},M.drawTransparent=M.draw=function(t){for(var e=this.gl,n=(t=t||{}).model||w,r=t.view||w,i=t.projection||w,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);var s={model:n,view:r,projection:i,inverseModel:w.slice(),clipBounds:a,kambient:this.ambientLight,kdiffuse:this.diffuseLight,kspecular:this.specularLight,roughness:this.roughness,fresnel:this.fresnel,eyePosition:[0,0,0],lightPosition:[0,0,0],contourColor:this.contourColor,texture:0};s.inverseModel=c(s.inverseModel,s.model),e.disable(e.CULL_FACE),this.texture.bind(0);var u=new Array(16);for(l(u,s.view,s.model),l(u,s.projection,u),c(u,u),o=0;o<3;++o)s.eyePosition[o]=u[12+o]/u[15];var h,d=u[15];for(o=0;o<3;++o)d+=this.lightPosition[o]*u[4*o+3];for(o=0;o<3;++o){for(var f=u[12+o],p=0;p<3;++p)f+=u[4*p+o]*this.lightPosition[p];s.lightPosition[o]=f/d}this.triangleCount>0&&((h=this.triShader).bind(),h.uniforms=s,this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()),this.edgeCount>0&&this.lineWidth>0&&((h=this.lineShader).bind(),h.uniforms=s,this.edgeVAO.bind(),e.lineWidth(this.lineWidth*this.pixelRatio),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind()),this.pointCount>0&&((h=this.pointShader).bind(),h.uniforms=s,this.pointVAO.bind(),e.drawArrays(e.POINTS,0,this.pointCount),this.pointVAO.unbind()),this.contourEnable&&this.contourCount>0&&this.contourLineWidth>0&&((h=this.contourShader).bind(),h.uniforms=s,this.contourVAO.bind(),e.drawArrays(e.LINES,0,this.contourCount),this.contourVAO.unbind())},M.drawPick=function(t){for(var e=this.gl,n=(t=t||{}).model||w,r=t.view||w,i=t.projection||w,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);this._model=[].slice.call(n),this._view=[].slice.call(r),this._projection=[].slice.call(i),this._resolution=[e.drawingBufferWidth,e.drawingBufferHeight];var s,l={model:n,view:r,projection:i,clipBounds:a,pickId:this.pickId/255};(s=this.pickShader).bind(),s.uniforms=l,this.triangleCount>0&&(this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()),this.edgeCount>0&&(this.edgeVAO.bind(),e.lineWidth(this.lineWidth*this.pixelRatio),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind()),this.pointCount>0&&((s=this.pointPickShader).bind(),s.uniforms=l,this.pointVAO.bind(),e.drawArrays(e.POINTS,0,this.pointCount),this.pointVAO.unbind())},M.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;for(var e=t.value[0]+256*t.value[1]+65536*t.value[2],n=this.cells[e],r=this.positions,i=new Array(n.length),a=0;a<n.length;++a)i[a]=r[n[a]];var o=t.coord[0],s=t.coord[1];if(!this.pickVertex){var l=this.positions[n[0]],c=this.positions[n[1]],u=this.positions[n[2]];return{_cellCenter:!0,position:[o,s],index:e,cell:n,cellId:e,intensity:this.intensity[e],dataCoordinate:[(l[0]+c[0]+u[0])/3,(l[1]+c[1]+u[1])/3,(l[2]+c[2]+u[2])/3]}}var h=m(i,[o*this.pixelRatio,this._resolution[1]-s*this.pixelRatio],this._model,this._view,this._projection,this._resolution);if(!h)return null;var d=h[2],f=0;for(a=0;a<n.length;++a)f+=d[a]*this.intensity[n[a]];return{position:h[1],index:n[h[0]],cell:n,cellId:e,intensity:f,dataCoordinate:this.positions[n[h[0]]]}},M.dispose=function(){this.texture.dispose(),this.triShader.dispose(),this.lineShader.dispose(),this.pointShader.dispose(),this.pickShader.dispose(),this.pointPickShader.dispose(),this.triangleVAO.dispose(),this.trianglePositions.dispose(),this.triangleColors.dispose(),this.triangleUVs.dispose(),this.triangleNormals.dispose(),this.triangleIds.dispose(),this.edgeVAO.dispose(),this.edgePositions.dispose(),this.edgeColors.dispose(),this.edgeUVs.dispose(),this.edgeIds.dispose(),this.pointVAO.dispose(),this.pointPositions.dispose(),this.pointColors.dispose(),this.pointUVs.dispose(),this.pointSizes.dispose(),this.pointIds.dispose(),this.contourVAO.dispose(),this.contourPositions.dispose(),this.contourShader.dispose()},e.exports=function(t,e){if(1===arguments.length&&(t=(e=t).gl),!(t.getExtension(\"OES_standard_derivatives\")||t.getExtension(\"MOZ_OES_standard_derivatives\")||t.getExtension(\"WEBKIT_OES_standard_derivatives\")))throw new Error(\"derivatives not supported\");var n=S(t),r=A(t),s=L(t),l=C(t),c=E(t),h=O(t),d=o(t,u(new Uint8Array([255,255,255,255]),[1,1,4]));d.generateMipmap(),d.minFilter=t.LINEAR_MIPMAP_LINEAR,d.magFilter=t.LINEAR;var f=i(t),p=i(t),m=i(t),g=i(t),y=i(t),v=a(t,[{buffer:f,type:t.FLOAT,size:3},{buffer:y,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:p,type:t.FLOAT,size:4},{buffer:m,type:t.FLOAT,size:2},{buffer:g,type:t.FLOAT,size:3}]),_=i(t),b=i(t),x=i(t),w=i(t),M=a(t,[{buffer:_,type:t.FLOAT,size:3},{buffer:w,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:b,type:t.FLOAT,size:4},{buffer:x,type:t.FLOAT,size:2}]),T=i(t),D=i(t),I=i(t),P=i(t),R=i(t),z=a(t,[{buffer:T,type:t.FLOAT,size:3},{buffer:R,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:D,type:t.FLOAT,size:4},{buffer:I,type:t.FLOAT,size:2},{buffer:P,type:t.FLOAT,size:1}]),j=i(t),F=new k(t,d,n,r,s,l,c,h,f,y,p,m,g,v,_,w,b,x,M,T,R,D,I,P,z,j,a(t,[{buffer:j,type:t.FLOAT,size:3}]));return F.update(e),F}},{\"./lib/closest-point\":307,\"./lib/shaders\":308,colormap:131,\"gl-buffer\":259,\"gl-mat4/invert\":293,\"gl-mat4/multiply\":295,\"gl-shader\":335,\"gl-texture2d\":353,\"gl-vao\":358,ndarray:495,normals:498,\"simplicial-complex-contour\":556,\"typedarray-pool\":595}],310:[function(t,e,n){arguments[4][257][0].apply(n,arguments)},{dup:257}],311:[function(t,e,n){\"use strict\";e.exports=function(t){var e=t.gl;return new o(t,r(e,[0,0,0,1,1,0,1,1]),i(e,a.boxVert,a.lineFrag))};var r=t(\"gl-buffer\"),i=t(\"gl-shader\"),a=t(\"./shaders\");function o(t,e,n){this.plot=t,this.vbo=e,this.shader=n}var s,l,c=o.prototype;c.bind=function(){var t=this.shader;this.vbo.bind(),this.shader.bind(),t.attributes.coord.pointer(),t.uniforms.screenBox=this.plot.screenBox},c.drawBox=(s=[0,0],l=[0,0],function(t,e,n,r,i){var a=this.shader,o=this.plot.gl;s[0]=t,s[1]=e,l[0]=n,l[1]=r,a.uniforms.lo=s,a.uniforms.hi=l,a.uniforms.color=i,o.drawArrays(o.TRIANGLE_STRIP,0,4)}),c.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},{\"./shaders\":314,\"gl-buffer\":259,\"gl-shader\":335}],312:[function(t,e,n){\"use strict\";e.exports=function(t){var e=t.gl;return new s(t,r(e),i(e,o.gridVert,o.gridFrag),i(e,o.tickVert,o.gridFrag))};var r=t(\"gl-buffer\"),i=t(\"gl-shader\"),a=t(\"binary-search-bounds\"),o=t(\"./shaders\");function s(t,e,n,r){this.plot=t,this.vbo=e,this.shader=n,this.tickShader=r,this.ticks=[[],[]]}function l(t,e){return t-e}var c,u,h,d,f,p=s.prototype;p.draw=(c=[0,0],u=[0,0],h=[0,0],function(){for(var t=this.plot,e=this.vbo,n=this.shader,r=this.ticks,i=t.gl,a=t._tickBounds,o=t.dataBox,s=t.viewBox,l=t.gridLineWidth,d=t.gridLineColor,f=t.gridLineEnable,p=t.pixelRatio,m=0;m<2;++m){var g=a[m],y=.5*(o[m+2]+o[m]),v=o[m+2]-o[m];u[m]=2*(a[m+2]-g)/v,c[m]=2*(g-y)/v}n.bind(),e.bind(),n.attributes.dataCoord.pointer(),n.uniforms.dataShift=c,n.uniforms.dataScale=u;var _=0;for(m=0;m<2;++m){h[0]=h[1]=0,h[m]=1,n.uniforms.dataAxis=h,n.uniforms.lineWidth=l[m]/(s[m+2]-s[m])*p,n.uniforms.color=d[m];var b=6*r[m].length;f[m]&&b&&i.drawArrays(i.TRIANGLES,_,b),_+=b}}),p.drawTickMarks=function(){var t=[0,0],e=[0,0],n=[1,0],r=[0,1],i=[0,0],o=[0,0];return function(){for(var s=this.plot,c=this.vbo,u=this.tickShader,h=this.ticks,d=s.gl,f=s._tickBounds,p=s.dataBox,m=s.viewBox,g=s.pixelRatio,y=s.screenBox,v=y[2]-y[0],_=y[3]-y[1],b=m[2]-m[0],x=m[3]-m[1],w=0;w<2;++w){var k=f[w],M=.5*(p[w+2]+p[w]),T=p[w+2]-p[w];e[w]=2*(f[w+2]-k)/T,t[w]=2*(k-M)/T}e[0]*=b/v,t[0]*=b/v,e[1]*=x/_,t[1]*=x/_,u.bind(),c.bind(),u.attributes.dataCoord.pointer();var S=u.uniforms;S.dataShift=t,S.dataScale=e;var A=s.tickMarkLength,L=s.tickMarkWidth,C=s.tickMarkColor,E=6*h[0].length,O=Math.min(a.ge(h[0],(p[0]-f[0])/(f[2]-f[0]),l),h[0].length),D=Math.min(a.gt(h[0],(p[2]-f[0])/(f[2]-f[0]),l),h[0].length),I=0+6*O,P=6*Math.max(0,D-O),R=Math.min(a.ge(h[1],(p[1]-f[1])/(f[3]-f[1]),l),h[1].length),z=Math.min(a.gt(h[1],(p[3]-f[1])/(f[3]-f[1]),l),h[1].length),j=E+6*R,F=6*Math.max(0,z-R);i[0]=2*(m[0]-A[1])/v-1,i[1]=(m[3]+m[1])/_-1,o[0]=A[1]*g/v,o[1]=L[1]*g/_,F&&(S.color=C[1],S.tickScale=o,S.dataAxis=r,S.screenOffset=i,d.drawArrays(d.TRIANGLES,j,F)),i[0]=(m[2]+m[0])/v-1,i[1]=2*(m[1]-A[0])/_-1,o[0]=L[0]*g/v,o[1]=A[0]*g/_,P&&(S.color=C[0],S.tickScale=o,S.dataAxis=n,S.screenOffset=i,d.drawArrays(d.TRIANGLES,I,P)),i[0]=2*(m[2]+A[3])/v-1,i[1]=(m[3]+m[1])/_-1,o[0]=A[3]*g/v,o[1]=L[3]*g/_,F&&(S.color=C[3],S.tickScale=o,S.dataAxis=r,S.screenOffset=i,d.drawArrays(d.TRIANGLES,j,F)),i[0]=(m[2]+m[0])/v-1,i[1]=2*(m[3]+A[2])/_-1,o[0]=L[2]*g/v,o[1]=A[2]*g/_,P&&(S.color=C[2],S.tickScale=o,S.dataAxis=n,S.screenOffset=i,d.drawArrays(d.TRIANGLES,I,P))}}(),p.update=(d=[1,1,-1,-1,1,-1],f=[1,-1,1,1,-1,-1],function(t){for(var e=t.ticks,n=t.bounds,r=new Float32Array(18*(e[0].length+e[1].length)),i=0,a=[[],[]],o=0;o<2;++o)for(var s=a[o],l=e[o],c=n[o],u=n[o+2],h=0;h<l.length;++h){var p=(l[h].x-c)/(u-c);s.push(p);for(var m=0;m<6;++m)r[i++]=p,r[i++]=d[m],r[i++]=f[m]}this.ticks=a,this.vbo.update(r)}),p.dispose=function(){this.vbo.dispose(),this.shader.dispose(),this.tickShader.dispose()}},{\"./shaders\":314,\"binary-search-bounds\":96,\"gl-buffer\":259,\"gl-shader\":335}],313:[function(t,e,n){\"use strict\";e.exports=function(t){var e=t.gl;return new o(t,r(e,[-1,-1,-1,1,1,-1,1,1]),i(e,a.lineVert,a.lineFrag))};var r=t(\"gl-buffer\"),i=t(\"gl-shader\"),a=t(\"./shaders\");function o(t,e,n){this.plot=t,this.vbo=e,this.shader=n}var s,l,c=o.prototype;c.bind=function(){var t=this.shader;this.vbo.bind(),this.shader.bind(),t.attributes.coord.pointer(),t.uniforms.screenBox=this.plot.screenBox},c.drawLine=(s=[0,0],l=[0,0],function(t,e,n,r,i,a){var o=this.plot,c=this.shader,u=o.gl;s[0]=t,s[1]=e,l[0]=n,l[1]=r,c.uniforms.start=s,c.uniforms.end=l,c.uniforms.width=i*o.pixelRatio,c.uniforms.color=a,u.drawArrays(u.TRIANGLE_STRIP,0,4)}),c.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},{\"./shaders\":314,\"gl-buffer\":259,\"gl-shader\":335}],314:[function(t,e,n){\"use strict\";var r=t(\"glslify\"),i=r([\"precision lowp float;\\n#define GLSLIFY 1\\nuniform vec4 color;\\nvoid main() {\\n  gl_FragColor = vec4(color.xyz * color.w, color.w);\\n}\\n\"]);e.exports={lineVert:r([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec2 coord;\\n\\nuniform vec4 screenBox;\\nuniform vec2 start, end;\\nuniform float width;\\n\\nvec2 perp(vec2 v) {\\n  return vec2(v.y, -v.x);\\n}\\n\\nvec2 screen(vec2 v) {\\n  return 2.0 * (v - screenBox.xy) / (screenBox.zw - screenBox.xy) - 1.0;\\n}\\n\\nvoid main() {\\n  vec2 delta = normalize(perp(start - end));\\n  vec2 offset = mix(start, end, 0.5 * (coord.y+1.0));\\n  gl_Position = vec4(screen(offset + 0.5 * width * delta * coord.x), 0, 1);\\n}\\n\"]),lineFrag:i,textVert:r([\"#define GLSLIFY 1\\nattribute vec3 textCoordinate;\\n\\nuniform vec2 dataScale, dataShift, dataAxis, screenOffset, textScale;\\nuniform float angle;\\n\\nvoid main() {\\n  float dataOffset  = textCoordinate.z;\\n  vec2 glyphOffset  = textCoordinate.xy;\\n  mat2 glyphMatrix = mat2(cos(angle), sin(angle), -sin(angle), cos(angle));\\n  vec2 screenCoordinate = dataAxis * (dataScale * dataOffset + dataShift) +\\n    glyphMatrix * glyphOffset * textScale + screenOffset;\\n  gl_Position = vec4(screenCoordinate, 0, 1);\\n}\\n\"]),textFrag:i,gridVert:r([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec3 dataCoord;\\n\\nuniform vec2 dataAxis, dataShift, dataScale;\\nuniform float lineWidth;\\n\\nvoid main() {\\n  vec2 pos = dataAxis * (dataScale * dataCoord.x + dataShift);\\n  pos += 10.0 * dataCoord.y * vec2(dataAxis.y, -dataAxis.x) + dataCoord.z * lineWidth;\\n  gl_Position = vec4(pos, 0, 1);\\n}\\n\"]),gridFrag:i,boxVert:r([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec2 coord;\\n\\nuniform vec4 screenBox;\\nuniform vec2 lo, hi;\\n\\nvec2 screen(vec2 v) {\\n  return 2.0 * (v - screenBox.xy) / (screenBox.zw - screenBox.xy) - 1.0;\\n}\\n\\nvoid main() {\\n  gl_Position = vec4(screen(mix(lo, hi, coord)), 0, 1);\\n}\\n\"]),tickVert:r([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec3 dataCoord;\\n\\nuniform vec2 dataAxis, dataShift, dataScale, screenOffset, tickScale;\\n\\nvoid main() {\\n  vec2 pos = dataAxis * (dataScale * dataCoord.x + dataShift);\\n  gl_Position = vec4(pos + tickScale*dataCoord.yz + screenOffset, 0, 1);\\n}\\n\"])}},{glslify:316}],315:[function(t,e,n){\"use strict\";e.exports=function(t){var e=t.gl;return new l(t,r(e),i(e,s.textVert,s.textFrag))};var r=t(\"gl-buffer\"),i=t(\"gl-shader\"),a=t(\"text-cache\"),o=t(\"binary-search-bounds\"),s=t(\"./shaders\");function l(t,e,n){this.plot=t,this.vbo=e,this.shader=n,this.tickOffset=[[],[]],this.tickX=[[],[]],this.labelOffset=[0,0],this.labelCount=[0,0]}var c,u,h,d,f,p,m=l.prototype;m.drawTicks=(c=[0,0],u=[0,0],h=[0,0],function(t){var e=this.plot,n=this.shader,r=this.tickX[t],i=this.tickOffset[t],a=e.gl,s=e.viewBox,l=e.dataBox,d=e.screenBox,f=e.pixelRatio,p=e.tickEnable,m=e.tickPad,g=e.tickColor,y=e.tickAngle,v=e.labelEnable,_=e.labelPad,b=e.labelColor,x=e.labelAngle,w=this.labelOffset[t],k=this.labelCount[t],M=o.lt(r,l[t]),T=o.le(r,l[t+2]);c[0]=c[1]=0,c[t]=1,u[t]=(s[2+t]+s[t])/(d[2+t]-d[t])-1;var S=2/d[2+(1^t)]-d[1^t];u[1^t]=S*s[1^t]-1,p[t]&&(u[1^t]-=S*f*m[t],M<T&&i[T]>i[M]&&(n.uniforms.dataAxis=c,n.uniforms.screenOffset=u,n.uniforms.color=g[t],n.uniforms.angle=y[t],a.drawArrays(a.TRIANGLES,i[M],i[T]-i[M]))),v[t]&&k&&(u[1^t]-=S*f*_[t],n.uniforms.dataAxis=h,n.uniforms.screenOffset=u,n.uniforms.color=b[t],n.uniforms.angle=x[t],a.drawArrays(a.TRIANGLES,w,k)),u[1^t]=S*s[2+(1^t)]-1,p[t+2]&&(u[1^t]+=S*f*m[t+2],M<T&&i[T]>i[M]&&(n.uniforms.dataAxis=c,n.uniforms.screenOffset=u,n.uniforms.color=g[t+2],n.uniforms.angle=y[t+2],a.drawArrays(a.TRIANGLES,i[M],i[T]-i[M]))),v[t+2]&&k&&(u[1^t]+=S*f*_[t+2],n.uniforms.dataAxis=h,n.uniforms.screenOffset=u,n.uniforms.color=b[t+2],n.uniforms.angle=x[t+2],a.drawArrays(a.TRIANGLES,w,k))}),m.drawTitle=function(){var t=[0,0],e=[0,0];return function(){var n=this.plot,r=this.shader,i=n.gl,a=n.screenBox,o=n.titleCenter,s=n.titleAngle,l=n.titleColor,c=n.pixelRatio;if(this.titleCount){for(var u=0;u<2;++u)e[u]=2*(o[u]*c-a[u])/(a[2+u]-a[u])-1;r.bind(),r.uniforms.dataAxis=t,r.uniforms.screenOffset=e,r.uniforms.angle=s,r.uniforms.color=l,i.drawArrays(i.TRIANGLES,this.titleOffset,this.titleCount)}}}(),m.bind=(d=[0,0],f=[0,0],p=[0,0],function(){var t=this.plot,e=this.shader,n=t._tickBounds,r=t.dataBox,i=t.screenBox,a=t.viewBox;e.bind();for(var o=0;o<2;++o){var s=n[o],l=.5*(r[o+2]+r[o]),c=r[o+2]-r[o],u=a[o+2]-a[o],h=i[o+2]-i[o];f[o]=2*(n[o+2]-s)/c*u/h,d[o]=2*(s-l)/c*u/h}p[1]=2*t.pixelRatio/(i[3]-i[1]),p[0]=p[1]*(i[3]-i[1])/(i[2]-i[0]),e.uniforms.dataScale=f,e.uniforms.dataShift=d,e.uniforms.textScale=p,this.vbo.bind(),e.attributes.textCoordinate.pointer()}),m.update=function(t){var e,n,r,i,o,s=[],l=t.ticks,c=t.bounds;for(o=0;o<2;++o){var u=[Math.floor(s.length/3)],h=[-1/0],d=l[o];for(e=0;e<d.length;++e){var f=d[e],p=f.x,m=f.font||\"sans-serif\";i=f.fontSize||12;for(var g=1/(c[o+2]-c[o]),y=c[o],v=f.text.split(\"\\n\"),_=0;_<v.length;_++)for(r=a(m,v[_]).data,n=0;n<r.length;n+=2)s.push(r[n]*i,-r[n+1]*i-_*i*1.2,(p-y)*g);u.push(Math.floor(s.length/3)),h.push(p)}this.tickOffset[o]=u,this.tickX[o]=h}for(o=0;o<2;++o){for(this.labelOffset[o]=Math.floor(s.length/3),r=a(t.labelFont[o],t.labels[o],{textAlign:\"center\"}).data,i=t.labelSize[o],e=0;e<r.length;e+=2)s.push(r[e]*i,-r[e+1]*i,0);this.labelCount[o]=Math.floor(s.length/3)-this.labelOffset[o]}for(this.titleOffset=Math.floor(s.length/3),r=a(t.titleFont,t.title).data,i=t.titleSize,e=0;e<r.length;e+=2)s.push(r[e]*i,-r[e+1]*i,0);this.titleCount=Math.floor(s.length/3)-this.titleOffset,this.vbo.update(s)},m.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},{\"./shaders\":314,\"binary-search-bounds\":96,\"gl-buffer\":259,\"gl-shader\":335,\"text-cache\":575}],316:[function(t,e,n){arguments[4][257][0].apply(n,arguments)},{dup:257}],317:[function(t,e,n){\"use strict\";e.exports=function(t){var e=t.gl,n=new l(e,r(e,[e.drawingBufferWidth,e.drawingBufferHeight]));return n.grid=i(n),n.text=a(n),n.line=o(n),n.box=s(n),n.update(t),n};var r=t(\"gl-select-static\"),i=t(\"./lib/grid\"),a=t(\"./lib/text\"),o=t(\"./lib/line\"),s=t(\"./lib/box\");function l(t,e){this.gl=t,this.pickBuffer=e,this.screenBox=[0,0,t.drawingBufferWidth,t.drawingBufferHeight],this.viewBox=[0,0,0,0],this.dataBox=[-10,-10,10,10],this.gridLineEnable=[!0,!0],this.gridLineWidth=[1,1],this.gridLineColor=[[0,0,0,1],[0,0,0,1]],this.pixelRatio=1,this.tickMarkLength=[0,0,0,0],this.tickMarkWidth=[0,0,0,0],this.tickMarkColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[15,15,15,15],this.tickAngle=[0,0,0,0],this.tickEnable=[!0,!0,!0,!0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[15,15,15,15],this.labelAngle=[0,Math.PI/2,0,3*Math.PI/2],this.labelEnable=[!0,!0,!0,!0],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.titleCenter=[0,0],this.titleEnable=!0,this.titleAngle=0,this.titleColor=[0,0,0,1],this.borderColor=[0,0,0,0],this.backgroundColor=[0,0,0,0],this.zeroLineEnable=[!0,!0],this.zeroLineWidth=[4,4],this.zeroLineColor=[[0,0,0,1],[0,0,0,1]],this.borderLineEnable=[!0,!0,!0,!0],this.borderLineWidth=[2,2,2,2],this.borderLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.grid=null,this.text=null,this.line=null,this.box=null,this.objects=[],this.overlays=[],this._tickBounds=[1/0,1/0,-1/0,-1/0],this.static=!1,this.dirty=!1,this.pickDirty=!1,this.pickDelay=120,this.pickRadius=10,this._pickTimeout=null,this._drawPick=this.drawPick.bind(this),this._depthCounter=0}var c=l.prototype;function u(t){for(var e=t.slice(),n=0;n<e.length;++n)e[n]=e[n].slice();return e}function h(t,e){return t.x-e.x}c.setDirty=function(){this.dirty=this.pickDirty=!0},c.setOverlayDirty=function(){this.dirty=!0},c.nextDepthValue=function(){return this._depthCounter++/65536},c.draw=function(){var t=this.gl,e=this.screenBox,n=this.viewBox,r=this.dataBox,i=this.pixelRatio,a=this.grid,o=this.line,s=this.text,l=this.objects;if(this._depthCounter=0,this.pickDirty&&(this._pickTimeout&&clearTimeout(this._pickTimeout),this.pickDirty=!1,this._pickTimeout=setTimeout(this._drawPick,this.pickDelay)),this.dirty){if(this.dirty=!1,t.bindFramebuffer(t.FRAMEBUFFER,null),t.enable(t.SCISSOR_TEST),t.disable(t.DEPTH_TEST),t.depthFunc(t.LESS),t.depthMask(!1),t.enable(t.BLEND),t.blendEquation(t.FUNC_ADD,t.FUNC_ADD),t.blendFunc(t.ONE,t.ONE_MINUS_SRC_ALPHA),this.borderColor){t.scissor(e[0],e[1],e[2]-e[0],e[3]-e[1]);var c=this.borderColor;t.clearColor(c[0]*c[3],c[1]*c[3],c[2]*c[3],c[3]),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT)}t.scissor(n[0],n[1],n[2]-n[0],n[3]-n[1]),t.viewport(n[0],n[1],n[2]-n[0],n[3]-n[1]);var u=this.backgroundColor;t.clearColor(u[0]*u[3],u[1]*u[3],u[2]*u[3],u[3]),t.clear(t.COLOR_BUFFER_BIT),a.draw();var h=this.zeroLineEnable,d=this.zeroLineColor,f=this.zeroLineWidth;if(h[0]||h[1]){o.bind();for(var p=0;p<2;++p)if(h[p]&&r[p]<=0&&r[p+2]>=0){var m=e[p]-r[p]*(e[p+2]-e[p])/(r[p+2]-r[p]);0===p?o.drawLine(m,e[1],m,e[3],f[p],d[p]):o.drawLine(e[0],m,e[2],m,f[p],d[p])}}for(p=0;p<l.length;++p)l[p].draw();t.viewport(e[0],e[1],e[2]-e[0],e[3]-e[1]),t.scissor(e[0],e[1],e[2]-e[0],e[3]-e[1]),this.grid.drawTickMarks(),o.bind();var g=this.borderLineEnable,y=this.borderLineWidth,v=this.borderLineColor;for(g[1]&&o.drawLine(n[0],n[1]-.5*y[1]*i,n[0],n[3]+.5*y[3]*i,y[1],v[1]),g[0]&&o.drawLine(n[0]-.5*y[0]*i,n[1],n[2]+.5*y[2]*i,n[1],y[0],v[0]),g[3]&&o.drawLine(n[2],n[1]-.5*y[1]*i,n[2],n[3]+.5*y[3]*i,y[3],v[3]),g[2]&&o.drawLine(n[0]-.5*y[0]*i,n[3],n[2]+.5*y[2]*i,n[3],y[2],v[2]),s.bind(),p=0;p<2;++p)s.drawTicks(p);this.titleEnable&&s.drawTitle();var _=this.overlays;for(p=0;p<_.length;++p)_[p].draw();t.disable(t.SCISSOR_TEST),t.disable(t.BLEND),t.depthMask(!0)}},c.drawPick=function(){if(!this.static){var t=this.pickBuffer;this._pickTimeout=null,t.begin();for(var e=1,n=this.objects,r=0;r<n.length;++r)e=n[r].drawPick(e);t.end()}},c.pick=function(t,e){if(!this.static){var n=this.pixelRatio,r=this.pickPixelRatio,i=this.viewBox,a=0|Math.round((t-i[0]/n)*r),o=0|Math.round((e-i[1]/n)*r),s=this.pickBuffer.query(a,o,this.pickRadius);if(!s)return null;for(var l=s.id+(s.value[0]<<8)+(s.value[1]<<16)+(s.value[2]<<24),c=this.objects,u=0;u<c.length;++u){var h=c[u].pick(a,o,l);if(h)return h}return null}},c.setScreenBox=function(t){var e=this.screenBox,n=this.pixelRatio;e[0]=0|Math.round(t[0]*n),e[1]=0|Math.round(t[1]*n),e[2]=0|Math.round(t[2]*n),e[3]=0|Math.round(t[3]*n),this.setDirty()},c.setDataBox=function(t){var e=this.dataBox;(e[0]!==t[0]||e[1]!==t[1]||e[2]!==t[2]||e[3]!==t[3])&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],this.setDirty())},c.setViewBox=function(t){var e=this.pixelRatio,n=this.viewBox;n[0]=0|Math.round(t[0]*e),n[1]=0|Math.round(t[1]*e),n[2]=0|Math.round(t[2]*e),n[3]=0|Math.round(t[3]*e);var r=this.pickPixelRatio;this.pickBuffer.shape=[0|Math.round((t[2]-t[0])*r),0|Math.round((t[3]-t[1])*r)],this.setDirty()},c.update=function(t){var e=this.gl;this.pixelRatio=(t=t||{}).pixelRatio||1;var n=this.pixelRatio;this.pickPixelRatio=Math.max(n,1),this.setScreenBox(t.screenBox||[0,0,e.drawingBufferWidth/n,e.drawingBufferHeight/n]),this.setViewBox(t.viewBox||[.125*(this.screenBox[2]-this.screenBox[0])/n,.125*(this.screenBox[3]-this.screenBox[1])/n,.875*(this.screenBox[2]-this.screenBox[0])/n,.875*(this.screenBox[3]-this.screenBox[1])/n]);var r=this.viewBox,i=(r[2]-r[0])/(r[3]-r[1]);this.setDataBox(t.dataBox||[-10,-10/i,10,10/i]),this.borderColor=!1!==t.borderColor&&(t.borderColor||[0,0,0,0]).slice(),this.backgroundColor=(t.backgroundColor||[0,0,0,0]).slice(),this.gridLineEnable=(t.gridLineEnable||[!0,!0]).slice(),this.gridLineWidth=(t.gridLineWidth||[1,1]).slice(),this.gridLineColor=u(t.gridLineColor||[[.5,.5,.5,1],[.5,.5,.5,1]]),this.zeroLineEnable=(t.zeroLineEnable||[!0,!0]).slice(),this.zeroLineWidth=(t.zeroLineWidth||[4,4]).slice(),this.zeroLineColor=u(t.zeroLineColor||[[0,0,0,1],[0,0,0,1]]),this.tickMarkLength=(t.tickMarkLength||[0,0,0,0]).slice(),this.tickMarkWidth=(t.tickMarkWidth||[0,0,0,0]).slice(),this.tickMarkColor=u(t.tickMarkColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.titleCenter=(t.titleCenter||[.5*(r[0]+r[2])/n,(r[3]+120)/n]).slice(),this.titleEnable=!(\"titleEnable\"in t)||!!t.titleEnable,this.titleAngle=t.titleAngle||0,this.titleColor=(t.titleColor||[0,0,0,1]).slice(),this.labelPad=(t.labelPad||[15,15,15,15]).slice(),this.labelAngle=(t.labelAngle||[0,Math.PI/2,0,3*Math.PI/2]).slice(),this.labelEnable=(t.labelEnable||[!0,!0,!0,!0]).slice(),this.labelColor=u(t.labelColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.tickPad=(t.tickPad||[15,15,15,15]).slice(),this.tickAngle=(t.tickAngle||[0,0,0,0]).slice(),this.tickEnable=(t.tickEnable||[!0,!0,!0,!0]).slice(),this.tickColor=u(t.tickColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.borderLineEnable=(t.borderLineEnable||[!0,!0,!0,!0]).slice(),this.borderLineWidth=(t.borderLineWidth||[2,2,2,2]).slice(),this.borderLineColor=u(t.borderLineColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]);var a=t.ticks||[[],[]],o=this._tickBounds;o[0]=o[1]=1/0,o[2]=o[3]=-1/0;for(var s=0;s<2;++s){var l=a[s].slice(0);0!==l.length&&(l.sort(h),o[s]=Math.min(o[s],l[0].x),o[s+2]=Math.max(o[s+2],l[l.length-1].x))}this.grid.update({bounds:o,ticks:a}),this.text.update({bounds:o,ticks:a,labels:t.labels||[\"x\",\"y\"],labelSize:t.labelSize||[12,12],labelFont:t.labelFont||[\"sans-serif\",\"sans-serif\"],title:t.title||\"\",titleSize:t.titleSize||18,titleFont:t.titleFont||\"sans-serif\"}),this.static=!!t.static,this.setDirty()},c.dispose=function(){this.box.dispose(),this.grid.dispose(),this.text.dispose(),this.line.dispose();for(var t=this.objects.length-1;t>=0;--t)this.objects[t].dispose();for(this.objects.length=0,t=this.overlays.length-1;t>=0;--t)this.overlays[t].dispose();this.overlays.length=0,this.gl=null},c.addObject=function(t){this.objects.indexOf(t)<0&&(this.objects.push(t),this.setDirty())},c.removeObject=function(t){for(var e=this.objects,n=0;n<e.length;++n)if(e[n]===t){e.splice(n,1),this.setDirty();break}},c.addOverlay=function(t){this.overlays.indexOf(t)<0&&(this.overlays.push(t),this.setOverlayDirty())},c.removeOverlay=function(t){for(var e=this.overlays,n=0;n<e.length;++n)if(e[n]===t){e.splice(n,1),this.setOverlayDirty();break}}},{\"./lib/box\":311,\"./lib/grid\":312,\"./lib/line\":313,\"./lib/text\":315,\"gl-select-static\":334}],318:[function(t,e,n){\"use strict\";e.exports=function(t,e){t=t||document.body;var n=[.01,1/0];\"distanceLimits\"in(e=e||{})&&(n[0]=e.distanceLimits[0],n[1]=e.distanceLimits[1]),\"zoomMin\"in e&&(n[0]=e.zoomMin),\"zoomMax\"in e&&(n[1]=e.zoomMax);var c=i({center:e.center||[0,0,0],up:e.up||[0,1,0],eye:e.eye||[0,0,10],mode:e.mode||\"orbit\",distanceLimits:n}),u=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],h=0,d=t.clientWidth,f=t.clientHeight,p={keyBindingMode:\"rotate\",enableWheel:!0,view:c,element:t,delay:e.delay||16,rotateSpeed:e.rotateSpeed||1,zoomSpeed:e.zoomSpeed||1,translateSpeed:e.translateSpeed||1,flipX:!!e.flipX,flipY:!!e.flipY,modes:c.modes,_ortho:e._ortho||e.projection&&\"orthographic\"===e.projection.type||!1,tick:function(){var e=r(),n=this.delay,i=e-2*n;c.idle(e-n),c.recalcMatrix(i),c.flush(e-(100+2*n));for(var a=!0,o=c.computedMatrix,s=0;s<16;++s)a=a&&u[s]===o[s],u[s]=o[s];var l=t.clientWidth===d&&t.clientHeight===f;return d=t.clientWidth,f=t.clientHeight,a?!l:(h=Math.exp(c.computedRadius[0]),!0)},lookAt:function(t,e,n){c.lookAt(c.lastT(),t,e,n)},rotate:function(t,e,n){c.rotate(c.lastT(),t,e,n)},pan:function(t,e,n){c.pan(c.lastT(),t,e,n)},translate:function(t,e,n){c.translate(c.lastT(),t,e,n)}};return Object.defineProperties(p,{matrix:{get:function(){return c.computedMatrix},set:function(t){return c.setMatrix(c.lastT(),t),c.computedMatrix},enumerable:!0},mode:{get:function(){return c.getMode()},set:function(t){var e=c.computedUp.slice(),n=c.computedEye.slice(),i=c.computedCenter.slice();if(c.setMode(t),\"turntable\"===t){var a=r();c._active.lookAt(a,n,i,e),c._active.lookAt(a+500,n,i,[0,0,1]),c._active.flush(a)}return c.getMode()},enumerable:!0},center:{get:function(){return c.computedCenter},set:function(t){return c.lookAt(c.lastT(),null,t),c.computedCenter},enumerable:!0},eye:{get:function(){return c.computedEye},set:function(t){return c.lookAt(c.lastT(),t),c.computedEye},enumerable:!0},up:{get:function(){return c.computedUp},set:function(t){return c.lookAt(c.lastT(),null,null,t),c.computedUp},enumerable:!0},distance:{get:function(){return h},set:function(t){return c.setDistance(c.lastT(),t),t},enumerable:!0},distanceLimits:{get:function(){return c.getDistanceLimits(n)},set:function(t){return c.setDistanceLimits(t),t},enumerable:!0}}),t.addEventListener(\"contextmenu\",(function(t){return t.preventDefault(),!1})),p._lastX=-1,p._lastY=-1,p._lastMods={shift:!1,control:!1,alt:!1,meta:!1},p.enableMouseListeners=function(){function e(e,n,i,a){var o=p.keyBindingMode;if(!1!==o){var s=\"rotate\"===o,l=\"pan\"===o,u=\"zoom\"===o,d=!!a.control,f=!!a.alt,m=!!a.shift,g=!!(1&e),y=!!(2&e),v=!!(4&e),_=1/t.clientHeight,b=_*(n-p._lastX),x=_*(i-p._lastY),w=p.flipX?1:-1,k=p.flipY?1:-1,M=Math.PI*p.rotateSpeed,T=r();if(-1!==p._lastX&&-1!==p._lastY&&((s&&g&&!d&&!f&&!m||g&&!d&&!f&&m)&&c.rotate(T,w*M*b,-k*M*x,0),(l&&g&&!d&&!f&&!m||y||g&&d&&!f&&!m)&&c.pan(T,-p.translateSpeed*b*h,p.translateSpeed*x*h,0),u&&g&&!d&&!f&&!m||v||g&&!d&&f&&!m)){var S=-p.zoomSpeed*x/window.innerHeight*(T-c.lastT())*100;c.pan(T,0,0,h*(Math.exp(S)-1))}return p._lastX=n,p._lastY=i,p._lastMods=a,!0}}p.mouseListener=a(t,e),t.addEventListener(\"touchstart\",(function(n){var r=s(n.changedTouches[0],t);e(0,r[0],r[1],p._lastMods),e(1,r[0],r[1],p._lastMods)}),!!l&&{passive:!0}),t.addEventListener(\"touchmove\",(function(n){var r=s(n.changedTouches[0],t);e(1,r[0],r[1],p._lastMods),n.preventDefault()}),!!l&&{passive:!1}),t.addEventListener(\"touchend\",(function(t){e(0,p._lastX,p._lastY,p._lastMods)}),!!l&&{passive:!0}),p.wheelListener=o(t,(function(t,e){if(!1!==p.keyBindingMode&&p.enableWheel){var n=p.flipX?1:-1,i=p.flipY?1:-1,a=r();if(Math.abs(t)>Math.abs(e))c.rotate(a,0,0,-t*n*Math.PI*p.rotateSpeed/window.innerWidth);else if(!p._ortho){var o=-p.zoomSpeed*i*e/window.innerHeight*(a-c.lastT())/20;c.pan(a,0,0,h*(Math.exp(o)-1))}}}),!0)},p.enableMouseListeners(),p};var r=t(\"right-now\"),i=t(\"3d-view\"),a=t(\"mouse-change\"),o=t(\"mouse-wheel\"),s=t(\"mouse-event-offset\"),l=t(\"has-passive-events\")},{\"3d-view\":54,\"has-passive-events\":441,\"mouse-change\":483,\"mouse-event-offset\":484,\"mouse-wheel\":486,\"right-now\":542}],319:[function(t,e,n){var r=t(\"glslify\"),i=t(\"gl-shader\"),a=r([\"precision mediump float;\\n#define GLSLIFY 1\\nattribute vec2 position;\\nvarying vec2 uv;\\nvoid main() {\\n  uv = position;\\n  gl_Position = vec4(position, 0, 1);\\n}\"]),o=r([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nuniform sampler2D accumBuffer;\\nvarying vec2 uv;\\n\\nvoid main() {\\n  vec4 accum = texture2D(accumBuffer, 0.5 * (uv + 1.0));\\n  gl_FragColor = min(vec4(1,1,1,1), accum);\\n}\"]);e.exports=function(t){return i(t,a,o,null,[{name:\"position\",type:\"vec2\"}])}},{\"gl-shader\":335,glslify:320}],320:[function(t,e,n){arguments[4][257][0].apply(n,arguments)},{dup:257}],321:[function(t,e,n){\"use strict\";var r=t(\"./camera.js\"),i=t(\"gl-axes3d\"),a=t(\"gl-axes3d/properties\"),o=t(\"gl-spikes3d\"),s=t(\"gl-select-static\"),l=t(\"gl-fbo\"),c=t(\"a-big-triangle\"),u=t(\"mouse-change\"),h=t(\"gl-mat4/perspective\"),d=t(\"gl-mat4/ortho\"),f=t(\"./lib/shader\"),p=t(\"is-mobile\")({tablet:!0,featureDetect:!0});function m(){this.mouse=[-1,-1],this.screen=null,this.distance=1/0,this.index=null,this.dataCoordinate=null,this.dataPosition=null,this.object=null,this.data=null}function g(t){var e=Math.round(Math.log(Math.abs(t))/Math.log(10));if(e<0){var n=Math.round(Math.pow(10,-e));return Math.ceil(t*n)/n}return e>0?(n=Math.round(Math.pow(10,e)),Math.ceil(t/n)*n):Math.ceil(t)}function y(t){return\"boolean\"!=typeof t||t}e.exports={createScene:function(t){(t=t||{}).camera=t.camera||{};var e=t.canvas;e||(e=document.createElement(\"canvas\"),t.container?t.container.appendChild(e):document.body.appendChild(e));var n=t.gl;if(n||(t.glOptions&&(p=!!t.glOptions.preserveDrawingBuffer),n=function(t,e){var n=null;try{(n=t.getContext(\"webgl\",e))||(n=t.getContext(\"experimental-webgl\",e))}catch(r){return null}return n}(e,t.glOptions||{premultipliedAlpha:!0,antialias:!0,preserveDrawingBuffer:p})),!n)throw new Error(\"webgl not supported\");var v=t.bounds||[[-10,-10,-10],[10,10,10]],_=new m,b=l(n,n.drawingBufferWidth,n.drawingBufferHeight,{preferFloat:!p}),x=f(n),w=t.cameraObject&&!0===t.cameraObject._ortho||t.camera.projection&&\"orthographic\"===t.camera.projection.type||!1,k={eye:t.camera.eye||[2,0,0],center:t.camera.center||[0,0,0],up:t.camera.up||[0,1,0],zoomMin:t.camera.zoomMax||.1,zoomMax:t.camera.zoomMin||100,mode:t.camera.mode||\"turntable\",_ortho:w},M=t.axes||{},T=i(n,M);T.enable=!M.disable;var S=o(n,t.spikes||{}),A=[],L=[],C=[],E=[],O=!0,D=!0,I={view:null,projection:new Array(16),model:new Array(16),_ortho:!1},P=(D=!0,[n.drawingBufferWidth,n.drawingBufferHeight]),R=t.cameraObject||r(e,k),z={gl:n,contextLost:!1,pixelRatio:t.pixelRatio||1,canvas:e,selection:_,camera:R,axes:T,axesPixels:null,spikes:S,bounds:v,objects:A,shape:P,aspect:t.aspectRatio||[1,1,1],pickRadius:t.pickRadius||10,zNear:t.zNear||.01,zFar:t.zFar||1e3,fovy:t.fovy||Math.PI/4,clearColor:t.clearColor||[0,0,0,0],autoResize:y(t.autoResize),autoBounds:y(t.autoBounds),autoScale:!!t.autoScale,autoCenter:y(t.autoCenter),clipToBounds:y(t.clipToBounds),snapToData:!!t.snapToData,onselect:t.onselect||null,onrender:t.onrender||null,onclick:t.onclick||null,cameraParams:I,oncontextloss:null,mouseListener:null,_stopped:!1,getAspectratio:function(){return{x:this.aspect[0],y:this.aspect[1],z:this.aspect[2]}},setAspectratio:function(t){this.aspect[0]=t.x,this.aspect[1]=t.y,this.aspect[2]=t.z,D=!0},setBounds:function(t,e){this.bounds[0][t]=e.min,this.bounds[1][t]=e.max},setClearColor:function(t){this.clearColor=t},clearRGBA:function(){this.gl.clearColor(this.clearColor[0],this.clearColor[1],this.clearColor[2],this.clearColor[3]),this.gl.clear(this.gl.COLOR_BUFFER_BIT|this.gl.DEPTH_BUFFER_BIT)}},j=[n.drawingBufferWidth/z.pixelRatio|0,n.drawingBufferHeight/z.pixelRatio|0];function F(){if(!z._stopped&&z.autoResize){var t=e.parentNode,n=1,r=1;t&&t!==document.body?(n=t.clientWidth,r=t.clientHeight):(n=window.innerWidth,r=window.innerHeight);var i=0|Math.ceil(n*z.pixelRatio),a=0|Math.ceil(r*z.pixelRatio);if(i!==e.width||a!==e.height){e.width=i,e.height=a;var o=e.style;o.position=o.position||\"absolute\",o.left=\"0px\",o.top=\"0px\",o.width=n+\"px\",o.height=r+\"px\",O=!0}}}function N(){for(var t=A.length,e=E.length,r=0;r<e;++r)C[r]=0;t:for(r=0;r<t;++r){var i=A[r],a=i.pickSlots;if(a){for(var o=0;o<e;++o)if(C[o]+a<255){L[r]=o,i.setPickBase(C[o]+1),C[o]+=a;continue t}var l=s(n,P);L[r]=e,E.push(l),C.push(a),i.setPickBase(1),e+=1}else L[r]=-1}for(;e>0&&0===C[e-1];)C.pop(),E.pop().dispose()}function B(){if(z.contextLost)return!0;n.isContextLost()&&(z.contextLost=!0,z.mouseListener.enabled=!1,z.selection.object=null,z.oncontextloss&&z.oncontextloss())}z.autoResize&&F(),window.addEventListener(\"resize\",F),z.update=function(t){z._stopped||(t=t||{},O=!0,D=!0)},z.add=function(t){z._stopped||(t.axes=T,A.push(t),L.push(-1),O=!0,D=!0,N())},z.remove=function(t){if(!z._stopped){var e=A.indexOf(t);e<0||(A.splice(e,1),L.pop(),O=!0,D=!0,N())}},z.dispose=function(){if(!z._stopped&&(z._stopped=!0,window.removeEventListener(\"resize\",F),e.removeEventListener(\"webglcontextlost\",B),z.mouseListener.enabled=!1,!z.contextLost)){T.dispose(),S.dispose();for(var t=0;t<A.length;++t)A[t].dispose();for(b.dispose(),t=0;t<E.length;++t)E[t].dispose();x.dispose(),n=null,T=null,S=null,A=[]}},z._mouseRotating=!1,z._prevButtons=0,z.enableMouseListeners=function(){z.mouseListener=u(e,(function(t,e,n){if(!z._stopped){var r=E.length,i=A.length,a=_.object;_.distance=1/0,_.mouse[0]=e,_.mouse[1]=n,_.object=null,_.screen=null,_.dataCoordinate=_.dataPosition=null;var o=!1;if(t&&z._prevButtons)z._mouseRotating=!0;else{z._mouseRotating&&(D=!0),z._mouseRotating=!1;for(var s=0;s<r;++s){var l=E[s].query(e,j[1]-n-1,z.pickRadius);if(l){if(l.distance>_.distance)continue;for(var c=0;c<i;++c){var u=A[c];if(L[c]===s){var h=u.pick(l);h&&(_.buttons=t,_.screen=l.coord,_.distance=l.distance,_.object=u,_.index=h.distance,_.dataPosition=h.position,_.dataCoordinate=h.dataCoordinate,_.data=h,o=!0)}}}}}a&&a!==_.object&&(a.highlight&&a.highlight(null),O=!0),_.object&&(_.object.highlight&&_.object.highlight(_.data),O=!0),(o=o||_.object!==a)&&z.onselect&&z.onselect(_),1&t&&!(1&z._prevButtons)&&z.onclick&&z.onclick(_),z._prevButtons=t}}))},e.addEventListener(\"webglcontextlost\",B);var Y=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],H=[Y[0].slice(),Y[1].slice()];function V(){if(!B()){F();var t=z.camera.tick();I.view=z.camera.matrix,O=O||t,D=D||t,T.pixelRatio=z.pixelRatio,S.pixelRatio=z.pixelRatio;var e=A.length,r=Y[0],i=Y[1];r[0]=r[1]=r[2]=1/0,i[0]=i[1]=i[2]=-1/0;for(var o=0;o<e;++o){(R=A[o]).pixelRatio=z.pixelRatio,R.axes=z.axes,O=O||!!R.dirty,D=D||!!R.dirty;var s=R.bounds;if(s)for(var l=s[0],u=s[1],f=0;f<3;++f)r[f]=Math.min(r[f],l[f]),i[f]=Math.max(i[f],u[f])}var p=z.bounds;if(z.autoBounds)for(f=0;f<3;++f){if(i[f]<r[f])r[f]=-1,i[f]=1;else{r[f]===i[f]&&(r[f]-=1,i[f]+=1);var m=.05*(i[f]-r[f]);r[f]=r[f]-m,i[f]=i[f]+m}p[0][f]=r[f],p[1][f]=i[f]}var y=!1;for(f=0;f<3;++f)y=y||H[0][f]!==p[0][f]||H[1][f]!==p[1][f],H[0][f]=p[0][f],H[1][f]=p[1][f];if(D=D||y,O=O||y){if(y){var v=[0,0,0];for(o=0;o<3;++o)v[o]=g((p[1][o]-p[0][o])/10);T.update(T.autoTicks?{bounds:p,tickSpacing:v}:{bounds:p})}var k=n.drawingBufferWidth,M=n.drawingBufferHeight;for(P[0]=k,P[1]=M,j[0]=0|Math.max(k/z.pixelRatio,1),j[1]=0|Math.max(M/z.pixelRatio,1),function(t,e){var n=t.bounds,r=t.cameraParams,i=r.projection,a=r.model,o=t.zNear,s=t.zFar,l=t.fovy,c=t.gl.drawingBufferWidth/t.gl.drawingBufferHeight;e?(d(i,-c,c,-1,1,o,s),r._ortho=!0):(h(i,l,c,o,s),r._ortho=!1);for(var u=0;u<16;++u)a[u]=0;a[15]=1;var f=0;for(u=0;u<3;++u)f=Math.max(f,n[1][u]-n[0][u]);for(u=0;u<3;++u)a[5*u]=t.autoScale?t.aspect[u]/(n[1][u]-n[0][u]):1/f,t.autoCenter&&(a[12+u]=.5*-a[5*u]*(n[0][u]+n[1][u]))}(z,w),o=0;o<e;++o)(R=A[o]).axesBounds=p,z.clipToBounds&&(R.clipBounds=p);_.object&&(S.position=z.snapToData?_.dataCoordinate:_.dataPosition,S.bounds=p),D&&(D=!1,function(){if(!B()){n.colorMask(!0,!0,!0,!0),n.depthMask(!0),n.disable(n.BLEND),n.enable(n.DEPTH_TEST),n.depthFunc(n.LEQUAL);for(var t=A.length,e=E.length,r=0;r<e;++r){var i=E[r];i.shape=j,i.begin();for(var a=0;a<t;++a)if(L[a]===r){var o=A[a];o.drawPick&&(o.pixelRatio=1,o.drawPick(I))}i.end()}}}()),z.axesPixels=a(z.axes,I,k,M),z.onrender&&z.onrender(),n.bindFramebuffer(n.FRAMEBUFFER,null),n.viewport(0,0,k,M),z.clearRGBA(),n.depthMask(!0),n.colorMask(!0,!0,!0,!0),n.enable(n.DEPTH_TEST),n.depthFunc(n.LEQUAL),n.disable(n.BLEND),n.disable(n.CULL_FACE);var C=!1;for(T.enable&&(C=C||T.isTransparent(),T.draw(I)),S.axes=T,_.object&&S.draw(I),n.disable(n.CULL_FACE),o=0;o<e;++o)(R=A[o]).axes=T,R.pixelRatio=z.pixelRatio,R.isOpaque&&R.isOpaque()&&R.draw(I),R.isTransparent&&R.isTransparent()&&(C=!0);if(C){for(b.shape=P,b.bind(),n.clear(n.DEPTH_BUFFER_BIT),n.colorMask(!1,!1,!1,!1),n.depthMask(!0),n.depthFunc(n.LESS),T.enable&&T.isTransparent()&&T.drawTransparent(I),o=0;o<e;++o)(R=A[o]).isOpaque&&R.isOpaque()&&R.draw(I);for(n.enable(n.BLEND),n.blendEquation(n.FUNC_ADD),n.blendFunc(n.ONE,n.ONE_MINUS_SRC_ALPHA),n.colorMask(!0,!0,!0,!0),n.depthMask(!1),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),T.isTransparent()&&T.drawTransparent(I),o=0;o<e;++o){var R;(R=A[o]).isTransparent&&R.isTransparent()&&R.drawTransparent(I)}n.bindFramebuffer(n.FRAMEBUFFER,null),n.blendFunc(n.ONE,n.ONE_MINUS_SRC_ALPHA),n.disable(n.DEPTH_TEST),x.bind(),b.color[0].bind(0),x.uniforms.accumBuffer=0,c(n),n.disable(n.BLEND)}for(O=!1,o=0;o<e;++o)A[o].dirty=!1}}}return z.enableMouseListeners(),function t(){z._stopped||z.contextLost||(V(),requestAnimationFrame(t))}(),z.redraw=function(){z._stopped||(O=!0,V())},z},createCamera:r}},{\"./camera.js\":318,\"./lib/shader\":319,\"a-big-triangle\":64,\"gl-axes3d\":250,\"gl-axes3d/properties\":258,\"gl-fbo\":269,\"gl-mat4/ortho\":296,\"gl-mat4/perspective\":297,\"gl-select-static\":334,\"gl-spikes3d\":345,\"is-mobile\":467,\"mouse-change\":483}],322:[function(t,e,n){var r=t(\"glslify\");n.pointVertex=r([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec2 position;\\n\\nuniform mat3 matrix;\\nuniform float pointSize;\\nuniform float pointCloud;\\n\\nhighp float rand(vec2 co) {\\n  highp float a = 12.9898;\\n  highp float b = 78.233;\\n  highp float c = 43758.5453;\\n  highp float d = dot(co.xy, vec2(a, b));\\n  highp float e = mod(d, 3.14);\\n  return fract(sin(e) * c);\\n}\\n\\nvoid main() {\\n  vec3 hgPosition = matrix * vec3(position, 1);\\n  gl_Position  = vec4(hgPosition.xy, 0, hgPosition.z);\\n    // if we don't jitter the point size a bit, overall point cloud\\n    // saturation 'jumps' on zooming, which is disturbing and confusing\\n  gl_PointSize = pointSize * ((19.5 + rand(position)) / 20.0);\\n  if(pointCloud != 0.0) { // pointCloud is truthy\\n    // get the same square surface as circle would be\\n    gl_PointSize *= 0.886;\\n  }\\n}\"]),n.pointFragment=r([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nuniform vec4 color, borderColor;\\nuniform float centerFraction;\\nuniform float pointCloud;\\n\\nvoid main() {\\n  float radius;\\n  vec4 baseColor;\\n  if(pointCloud != 0.0) { // pointCloud is truthy\\n    if(centerFraction == 1.0) {\\n      gl_FragColor = color;\\n    } else {\\n      gl_FragColor = mix(borderColor, color, centerFraction);\\n    }\\n  } else {\\n    radius = length(2.0 * gl_PointCoord.xy - 1.0);\\n    if(radius > 1.0) {\\n      discard;\\n    }\\n    baseColor = mix(borderColor, color, step(radius, centerFraction));\\n    gl_FragColor = vec4(baseColor.rgb * baseColor.a, baseColor.a);\\n  }\\n}\\n\"]),n.pickVertex=r([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec2 position;\\nattribute vec4 pickId;\\n\\nuniform mat3 matrix;\\nuniform float pointSize;\\nuniform vec4 pickOffset;\\n\\nvarying vec4 fragId;\\n\\nvoid main() {\\n  vec3 hgPosition = matrix * vec3(position, 1);\\n  gl_Position  = vec4(hgPosition.xy, 0, hgPosition.z);\\n  gl_PointSize = pointSize;\\n\\n  vec4 id = pickId + pickOffset;\\n  id.y += floor(id.x / 256.0);\\n  id.x -= floor(id.x / 256.0) * 256.0;\\n\\n  id.z += floor(id.y / 256.0);\\n  id.y -= floor(id.y / 256.0) * 256.0;\\n\\n  id.w += floor(id.z / 256.0);\\n  id.z -= floor(id.z / 256.0) * 256.0;\\n\\n  fragId = id;\\n}\\n\"]),n.pickFragment=r([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragId;\\n\\nvoid main() {\\n  float radius = length(2.0 * gl_PointCoord.xy - 1.0);\\n  if(radius > 1.0) {\\n    discard;\\n  }\\n  gl_FragColor = fragId / 255.0;\\n}\\n\"])},{glslify:323}],323:[function(t,e,n){arguments[4][257][0].apply(n,arguments)},{dup:257}],324:[function(t,e,n){\"use strict\";var r=t(\"gl-shader\"),i=t(\"gl-buffer\"),a=t(\"typedarray-pool\"),o=t(\"./lib/shader\");function s(t,e,n,r,i){this.plot=t,this.offsetBuffer=e,this.pickBuffer=n,this.shader=r,this.pickShader=i,this.sizeMin=.5,this.sizeMinCap=2,this.sizeMax=20,this.areaRatio=1,this.pointCount=0,this.color=[1,0,0,1],this.borderColor=[0,0,0,1],this.blend=!1,this.pickOffset=0,this.points=null}e.exports=function(t,e){var n=t.gl,a=new s(t,i(n),i(n),r(n,o.pointVertex,o.pointFragment),r(n,o.pickVertex,o.pickFragment));return a.update(e),t.addObject(a),a};var l,c,u=s.prototype;u.dispose=function(){this.shader.dispose(),this.pickShader.dispose(),this.offsetBuffer.dispose(),this.pickBuffer.dispose(),this.plot.removeObject(this)},u.update=function(t){var e;function n(e,n){return e in t?t[e]:n}t=t||{},this.sizeMin=n(\"sizeMin\",.5),this.sizeMax=n(\"sizeMax\",20),this.color=n(\"color\",[1,0,0,1]).slice(),this.areaRatio=n(\"areaRatio\",1),this.borderColor=n(\"borderColor\",[0,0,0,1]).slice(),this.blend=n(\"blend\",!1);var r=t.positions.length>>>1,i=t.positions instanceof Float32Array,o=t.idToIndex instanceof Int32Array&&t.idToIndex.length>=r,s=t.positions,l=i?s:a.mallocFloat32(s.length),c=o?t.idToIndex:a.mallocInt32(r);if(i||l.set(s),!o)for(l.set(s),e=0;e<r;e++)c[e]=e;this.points=s,this.offsetBuffer.update(l),this.pickBuffer.update(c),i||a.free(l),o||a.free(c),this.pointCount=r,this.pickOffset=0},u.unifiedDraw=(l=[1,0,0,0,1,0,0,0,1],c=[0,0,0,0],function(t){var e=void 0!==t,n=e?this.pickShader:this.shader,r=this.plot.gl,i=this.plot.dataBox;if(0===this.pointCount)return t;var a=i[2]-i[0],o=i[3]-i[1],s=function(t,e){var n,r=0,i=t.length>>>1;for(n=0;n<i;n++){var a=t[2*n],o=t[2*n+1];a>=e[0]&&a<=e[2]&&o>=e[1]&&o<=e[3]&&r++}return r}(this.points,i),u=this.plot.pickPixelRatio*Math.max(Math.min(this.sizeMinCap,this.sizeMin),Math.min(this.sizeMax,this.sizeMax/Math.pow(s,.33333)));l[0]=2/a,l[4]=2/o,l[6]=-2*i[0]/a-1,l[7]=-2*i[1]/o-1,this.offsetBuffer.bind(),n.bind(),n.attributes.position.pointer(),n.uniforms.matrix=l,n.uniforms.color=this.color,n.uniforms.borderColor=this.borderColor,n.uniforms.pointCloud=u<5,n.uniforms.pointSize=u,n.uniforms.centerFraction=Math.min(1,Math.max(0,Math.sqrt(1-this.areaRatio))),e&&(c[0]=255&t,c[1]=t>>8&255,c[2]=t>>16&255,c[3]=t>>24&255,this.pickBuffer.bind(),n.attributes.pickId.pointer(r.UNSIGNED_BYTE),n.uniforms.pickOffset=c,this.pickOffset=t);var h=r.getParameter(r.BLEND),d=r.getParameter(r.DITHER);return h&&!this.blend&&r.disable(r.BLEND),d&&r.disable(r.DITHER),r.drawArrays(r.POINTS,0,this.pointCount),h&&!this.blend&&r.enable(r.BLEND),d&&r.enable(r.DITHER),t+this.pointCount}),u.draw=u.unifiedDraw,u.drawPick=u.unifiedDraw,u.pick=function(t,e,n){var r=this.pickOffset;if(n<r||n>=r+this.pointCount)return null;var i=n-r,a=this.points;return{object:this,pointId:i,dataCoord:[a[2*i],a[2*i+1]]}}},{\"./lib/shader\":322,\"gl-buffer\":259,\"gl-shader\":335,\"typedarray-pool\":595}],325:[function(t,e,n){e.exports=function(t,e,n,r){var i,a,o,s,l,c=e[0],u=e[1],h=e[2],d=e[3],f=n[0],p=n[1],m=n[2],g=n[3];return(a=c*f+u*p+h*m+d*g)<0&&(a=-a,f=-f,p=-p,m=-m,g=-g),1-a>1e-6?(i=Math.acos(a),o=Math.sin(i),s=Math.sin((1-r)*i)/o,l=Math.sin(r*i)/o):(s=1-r,l=r),t[0]=s*c+l*f,t[1]=s*u+l*p,t[2]=s*h+l*m,t[3]=s*d+l*g,t}},{}],326:[function(t,e,n){\"use strict\";e.exports=function(t){return t||0===t?t.toString():\"\"}},{}],327:[function(t,e,n){\"use strict\";var r=t(\"vectorize-text\");e.exports=function(t,e,n){var a=i[e];if(a||(a=i[e]={}),t in a)return a[t];var o={textAlign:\"center\",textBaseline:\"middle\",lineHeight:1,font:e,lineSpacing:1.25,styletags:{breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0},triangles:!0},s=r(t,o);o.triangles=!1;var l,c,u=r(t,o);if(n&&1!==n){for(l=0;l<s.positions.length;++l)for(c=0;c<s.positions[l].length;++c)s.positions[l][c]/=n;for(l=0;l<u.positions.length;++l)for(c=0;c<u.positions[l].length;++c)u.positions[l][c]/=n}var h=[[1/0,1/0],[-1/0,-1/0]],d=u.positions.length;for(l=0;l<d;++l){var f=u.positions[l];for(c=0;c<2;++c)h[0][c]=Math.min(h[0][c],f[c]),h[1][c]=Math.max(h[1][c],f[c])}return a[t]=[s,u,h]};var i={}},{\"vectorize-text\":600}],328:[function(t,e,n){var r=t(\"gl-shader\"),i=t(\"glslify\"),a=i([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nattribute vec3 position;\\nattribute vec4 color;\\nattribute vec2 glyph;\\nattribute vec4 id;\\n\\nuniform vec4 highlightId;\\nuniform float highlightScale;\\nuniform mat4 model, view, projection;\\nuniform vec3 clipBounds[2];\\n\\nvarying vec4 interpColor;\\nvarying vec4 pickId;\\nvarying vec3 dataCoordinate;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\n\\n    gl_Position = vec4(0,0,0,0);\\n  } else {\\n    float scale = 1.0;\\n    if(distance(highlightId, id) < 0.0001) {\\n      scale = highlightScale;\\n    }\\n\\n    vec4 worldPosition = model * vec4(position, 1);\\n    vec4 viewPosition = view * worldPosition;\\n    viewPosition = viewPosition / viewPosition.w;\\n    vec4 clipPosition = projection * (viewPosition + scale * vec4(glyph.x, -glyph.y, 0, 0));\\n\\n    gl_Position = clipPosition;\\n    interpColor = color;\\n    pickId = id;\\n    dataCoordinate = position;\\n  }\\n}\"]),o=i([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nattribute vec3 position;\\nattribute vec4 color;\\nattribute vec2 glyph;\\nattribute vec4 id;\\n\\nuniform mat4 model, view, projection;\\nuniform vec2 screenSize;\\nuniform vec3 clipBounds[2];\\nuniform float highlightScale, pixelRatio;\\nuniform vec4 highlightId;\\n\\nvarying vec4 interpColor;\\nvarying vec4 pickId;\\nvarying vec3 dataCoordinate;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\n\\n    gl_Position = vec4(0,0,0,0);\\n  } else {\\n    float scale = pixelRatio;\\n    if(distance(highlightId.bgr, id.bgr) < 0.001) {\\n      scale *= highlightScale;\\n    }\\n\\n    vec4 worldPosition = model * vec4(position, 1.0);\\n    vec4 viewPosition = view * worldPosition;\\n    vec4 clipPosition = projection * viewPosition;\\n    clipPosition /= clipPosition.w;\\n\\n    gl_Position = clipPosition + vec4(screenSize * scale * vec2(glyph.x, -glyph.y), 0.0, 0.0);\\n    interpColor = color;\\n    pickId = id;\\n    dataCoordinate = position;\\n  }\\n}\"]),s=i([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nattribute vec3 position;\\nattribute vec4 color;\\nattribute vec2 glyph;\\nattribute vec4 id;\\n\\nuniform float highlightScale;\\nuniform vec4 highlightId;\\nuniform vec3 axes[2];\\nuniform mat4 model, view, projection;\\nuniform vec2 screenSize;\\nuniform vec3 clipBounds[2];\\nuniform float scale, pixelRatio;\\n\\nvarying vec4 interpColor;\\nvarying vec4 pickId;\\nvarying vec3 dataCoordinate;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\n\\n    gl_Position = vec4(0,0,0,0);\\n  } else {\\n    float lscale = pixelRatio * scale;\\n    if(distance(highlightId, id) < 0.0001) {\\n      lscale *= highlightScale;\\n    }\\n\\n    vec4 clipCenter   = projection * view * model * vec4(position, 1);\\n    vec3 dataPosition = position + 0.5*lscale*(axes[0] * glyph.x + axes[1] * glyph.y) * clipCenter.w * screenSize.y;\\n    vec4 clipPosition = projection * view * model * vec4(dataPosition, 1);\\n\\n    gl_Position = clipPosition;\\n    interpColor = color;\\n    pickId = id;\\n    dataCoordinate = dataPosition;\\n  }\\n}\\n\"]),l=i([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 fragClipBounds[2];\\nuniform float opacity;\\n\\nvarying vec4 interpColor;\\nvarying vec3 dataCoordinate;\\n\\nvoid main() {\\n  if (\\n    outOfRange(fragClipBounds[0], fragClipBounds[1], dataCoordinate) ||\\n    interpColor.a * opacity == 0.\\n  ) discard;\\n  gl_FragColor = interpColor * opacity;\\n}\\n\"]),c=i([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 fragClipBounds[2];\\nuniform float pickGroup;\\n\\nvarying vec4 pickId;\\nvarying vec3 dataCoordinate;\\n\\nvoid main() {\\n  if (outOfRange(fragClipBounds[0], fragClipBounds[1], dataCoordinate)) discard;\\n\\n  gl_FragColor = vec4(pickGroup, pickId.bgr);\\n}\"]),u=[{name:\"position\",type:\"vec3\"},{name:\"color\",type:\"vec4\"},{name:\"glyph\",type:\"vec2\"},{name:\"id\",type:\"vec4\"}],h={vertex:a,fragment:l,attributes:u},d={vertex:o,fragment:l,attributes:u},f={vertex:s,fragment:l,attributes:u},p={vertex:a,fragment:c,attributes:u},m={vertex:o,fragment:c,attributes:u},g={vertex:s,fragment:c,attributes:u};function y(t,e){var n=r(t,e),i=n.attributes;return i.position.location=0,i.color.location=1,i.glyph.location=2,i.id.location=3,n}n.createPerspective=function(t){return y(t,h)},n.createOrtho=function(t){return y(t,d)},n.createProject=function(t){return y(t,f)},n.createPickPerspective=function(t){return y(t,p)},n.createPickOrtho=function(t){return y(t,m)},n.createPickProject=function(t){return y(t,g)}},{\"gl-shader\":335,glslify:329}],329:[function(t,e,n){arguments[4][257][0].apply(n,arguments)},{dup:257}],330:[function(t,e,n){\"use strict\";var r=t(\"is-string-blank\"),i=t(\"gl-buffer\"),a=t(\"gl-vao\"),o=t(\"typedarray-pool\"),s=t(\"gl-mat4/multiply\"),l=t(\"./lib/shaders\"),c=t(\"./lib/glyphs\"),u=t(\"./lib/get-simple-string\"),h=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function d(t,e){var n=t[0],r=t[1],i=t[2],a=t[3];return t[0]=e[0]*n+e[4]*r+e[8]*i+e[12]*a,t[1]=e[1]*n+e[5]*r+e[9]*i+e[13]*a,t[2]=e[2]*n+e[6]*r+e[10]*i+e[14]*a,t[3]=e[3]*n+e[7]*r+e[11]*i+e[15]*a,t}function f(t,e,n,r){return d(r,r),d(r,r),d(r,r)}function p(t,e){this.index=t,this.dataCoordinate=this.position=e}function m(t){return!0===t||t>1?1:t}function g(t,e,n,r,i,a,o,s,l,c,u,h){this.gl=t,this.pixelRatio=1,this.shader=e,this.orthoShader=n,this.projectShader=r,this.pointBuffer=i,this.colorBuffer=a,this.glyphBuffer=o,this.idBuffer=s,this.vao=l,this.vertexCount=0,this.lineVertexCount=0,this.opacity=1,this.hasAlpha=!1,this.lineWidth=0,this.projectScale=[2/3,2/3,2/3],this.projectOpacity=[1,1,1],this.projectHasAlpha=!1,this.pickId=0,this.pickPerspectiveShader=c,this.pickOrthoShader=u,this.pickProjectShader=h,this.points=[],this._selectResult=new p(0,[0,0,0]),this.useOrtho=!0,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.axesProject=[!0,!0,!0],this.axesBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.highlightId=[1,1,1,1],this.highlightScale=2,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.dirty=!0}e.exports=function(t){var e=t.gl,n=l.createPerspective(e),r=l.createOrtho(e),o=l.createProject(e),s=l.createPickPerspective(e),c=l.createPickOrtho(e),u=l.createPickProject(e),h=i(e),d=i(e),f=i(e),p=i(e),m=new g(e,n,r,o,h,d,f,p,a(e,[{buffer:h,size:3,type:e.FLOAT},{buffer:d,size:4,type:e.FLOAT},{buffer:f,size:2,type:e.FLOAT},{buffer:p,size:4,type:e.UNSIGNED_BYTE,normalized:!0}]),s,c,u);return m.update(t),m};var y=g.prototype;y.pickSlots=1,y.setPickBase=function(t){this.pickId=t},y.isTransparent=function(){if(this.hasAlpha)return!0;for(var t=0;t<3;++t)if(this.axesProject[t]&&this.projectHasAlpha)return!0;return!1},y.isOpaque=function(){if(!this.hasAlpha)return!0;for(var t=0;t<3;++t)if(this.axesProject[t]&&!this.projectHasAlpha)return!0;return!1};var v=[0,0],_=[0,0,0],b=[0,0,0],x=[0,0,0,1],w=[0,0,0,1],k=h.slice(),M=[0,0,0],T=[[0,0,0],[0,0,0]];function S(t){return t[0]=t[1]=t[2]=0,t}function A(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=1,t}function L(t,e,n,r){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[n]=r,t}var C=[[-1e8,-1e8,-1e8],[1e8,1e8,1e8]];function E(t,e,n,r,i,a,o){var l=n.gl;if((a===n.projectHasAlpha||o)&&function(t,e,n,r){var i,a=e.axesProject,o=e.gl,l=t.uniforms,c=n.model||h,u=n.view||h,d=n.projection||h,p=e.axesBounds,m=function(t){for(var e=T,n=0;n<2;++n)for(var r=0;r<3;++r)e[n][r]=Math.max(Math.min(t[n][r],1e8),-1e8);return e}(e.clipBounds);i=e.axes&&e.axes.lastCubeProps?e.axes.lastCubeProps.axis:[1,1,1],v[0]=2/o.drawingBufferWidth,v[1]=2/o.drawingBufferHeight,t.bind(),l.view=u,l.projection=d,l.screenSize=v,l.highlightId=e.highlightId,l.highlightScale=e.highlightScale,l.clipBounds=m,l.pickGroup=e.pickId/255,l.pixelRatio=r;for(var g=0;g<3;++g)if(a[g]){l.scale=e.projectScale[g],l.opacity=e.projectOpacity[g];for(var y=k,C=0;C<16;++C)y[C]=0;for(C=0;C<4;++C)y[5*C]=1;y[5*g]=0,y[12+g]=i[g]<0?p[0][g]:p[1][g],s(y,c,y),l.model=y;var E=(g+1)%3,O=(g+2)%3,D=S(_),I=S(b);D[E]=1,I[O]=1;var P=f(0,0,0,A(x,D)),R=f(0,0,0,A(w,I));if(Math.abs(P[1])>Math.abs(R[1])){var z=P;P=R,R=z,z=D,D=I,I=z;var j=E;E=O,O=j}P[0]<0&&(D[E]=-1),R[1]>0&&(I[O]=-1);var F=0,N=0;for(C=0;C<4;++C)F+=Math.pow(c[4*E+C],2),N+=Math.pow(c[4*O+C],2);D[E]/=Math.sqrt(F),I[O]/=Math.sqrt(N),l.axes[0]=D,l.axes[1]=I,l.fragClipBounds[0]=L(M,m[0],g,-1e8),l.fragClipBounds[1]=L(M,m[1],g,1e8),e.vao.bind(),e.vao.draw(o.TRIANGLES,e.vertexCount),e.lineWidth>0&&(o.lineWidth(e.lineWidth*r),e.vao.draw(o.LINES,e.lineVertexCount,e.vertexCount)),e.vao.unbind()}}(e,n,r,i),a===n.hasAlpha||o){t.bind();var c=t.uniforms;c.model=r.model||h,c.view=r.view||h,c.projection=r.projection||h,v[0]=2/l.drawingBufferWidth,v[1]=2/l.drawingBufferHeight,c.screenSize=v,c.highlightId=n.highlightId,c.highlightScale=n.highlightScale,c.fragClipBounds=C,c.clipBounds=n.axes.bounds,c.opacity=n.opacity,c.pickGroup=n.pickId/255,c.pixelRatio=i,n.vao.bind(),n.vao.draw(l.TRIANGLES,n.vertexCount),n.lineWidth>0&&(l.lineWidth(n.lineWidth*i),n.vao.draw(l.LINES,n.lineVertexCount,n.vertexCount)),n.vao.unbind()}}function O(t,e,n,i){var a;a=Array.isArray(t)?e<t.length?t[e]:void 0:t,a=u(a);var o=!0;r(a)&&(a=\"\\u25bc\",o=!1);var s=c(a,n,i);return{mesh:s[0],lines:s[1],bounds:s[2],visible:o}}y.draw=function(t){E(this.useOrtho?this.orthoShader:this.shader,this.projectShader,this,t,this.pixelRatio,!1,!1)},y.drawTransparent=function(t){E(this.useOrtho?this.orthoShader:this.shader,this.projectShader,this,t,this.pixelRatio,!0,!1)},y.drawPick=function(t){E(this.useOrtho?this.pickOrthoShader:this.pickPerspectiveShader,this.pickProjectShader,this,t,1,!0,!0)},y.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=t.value[2]+(t.value[1]<<8)+(t.value[0]<<16);if(e>=this.pointCount||e<0)return null;var n=this.points[e],r=this._selectResult;r.index=e;for(var i=0;i<3;++i)r.position[i]=r.dataCoordinate[i]=n[i];return r},y.highlight=function(t){if(t){var e=t.index;this.highlightId=[(255&e)/255,(e>>8&255)/255,(e>>16&255)/255,0]}else this.highlightId=[1,1,1,1]},y.update=function(t){if(\"perspective\"in(t=t||{})&&(this.useOrtho=!t.perspective),\"orthographic\"in t&&(this.useOrtho=!!t.orthographic),\"lineWidth\"in t&&(this.lineWidth=t.lineWidth),\"project\"in t)if(Array.isArray(t.project))this.axesProject=t.project;else{var e=!!t.project;this.axesProject=[e,e,e]}if(\"projectScale\"in t&&(this.projectScale=Array.isArray(t.projectScale)?t.projectScale.slice():[n=+t.projectScale,n,n]),this.projectHasAlpha=!1,\"projectOpacity\"in t){var n;this.projectOpacity=Array.isArray(t.projectOpacity)?t.projectOpacity.slice():[n=+t.projectOpacity,n,n];for(var r=0;r<3;++r)this.projectOpacity[r]=m(this.projectOpacity[r]),this.projectOpacity[r]<1&&(this.projectHasAlpha=!0)}this.hasAlpha=!1,\"opacity\"in t&&(this.opacity=m(t.opacity),this.opacity<1&&(this.hasAlpha=!0)),this.dirty=!0;var i,a,s=t.position,l=t.font||\"normal\",c=t.alignment||[0,0];if(2===c.length)i=c[0],a=c[1];else for(i=[],a=[],r=0;r<c.length;++r)i[r]=c[r][0],a[r]=c[r][1];var u=[1/0,1/0,1/0],h=[-1/0,-1/0,-1/0],d=t.glyph,f=t.color,p=t.size,g=t.angle,y=t.lineColor,v=-1,_=0,b=0,x=0;if(s.length){x=s.length;t:for(r=0;r<x;++r){for(var w=s[r],k=0;k<3;++k)if(isNaN(w[k])||!isFinite(w[k]))continue t;var M=(j=O(d,r,l,this.pixelRatio)).bounds;_+=3*(F=j.mesh).cells.length,b+=2*(N=j.lines).edges.length}}var T=_+b,S=o.mallocFloat(3*T),A=o.mallocFloat(4*T),L=o.mallocFloat(2*T),C=o.mallocUint32(T);if(T>0){var E=0,D=_,I=[0,0,0,1],P=[0,0,0,1],R=Array.isArray(f)&&Array.isArray(f[0]),z=Array.isArray(y)&&Array.isArray(y[0]);t:for(r=0;r<x;++r){for(v+=1,w=s[r],k=0;k<3;++k){if(isNaN(w[k])||!isFinite(w[k]))continue t;h[k]=Math.max(h[k],w[k]),u[k]=Math.min(u[k],w[k])}var j,F=(j=O(d,r,l,this.pixelRatio)).mesh,N=j.lines,B=(M=j.bounds,j.visible);if(B)if(Array.isArray(f)){if(3===(Y=R?r<f.length?f[r]:[0,0,0,0]:f).length){for(k=0;k<3;++k)I[k]=Y[k];I[3]=1}else if(4===Y.length){for(k=0;k<4;++k)I[k]=Y[k];!this.hasAlpha&&Y[3]<1&&(this.hasAlpha=!0)}}else I[0]=I[1]=I[2]=0,I[3]=1;else I=[1,1,1,0];if(B)if(Array.isArray(y)){var Y;if(3===(Y=z?r<y.length?y[r]:[0,0,0,0]:y).length){for(k=0;k<3;++k)P[k]=Y[k];P[k]=1}else if(4===Y.length){for(k=0;k<4;++k)P[k]=Y[k];!this.hasAlpha&&Y[3]<1&&(this.hasAlpha=!0)}}else P[0]=P[1]=P[2]=0,P[3]=1;else P=[1,1,1,0];var H=.5;B?Array.isArray(p)?H=r<p.length?+p[r]:12:p?H=+p:this.useOrtho&&(H=12):H=0;var V=0;Array.isArray(g)?V=r<g.length?+g[r]:0:g&&(V=+g);var U=Math.cos(V),W=Math.sin(V);for(w=s[r],k=0;k<3;++k)h[k]=Math.max(h[k],w[k]),u[k]=Math.min(u[k],w[k]);var q=i,G=a;q=0,Array.isArray(i)?q=r<i.length?i[r]:0:i&&(q=i),G=0,Array.isArray(a)?G=r<a.length?a[r]:0:a&&(G=a);var X=[q*=q>0?1-M[0][0]:q<0?1+M[1][0]:1,G*=G>0?1-M[0][1]:G<0?1+M[1][1]:1],Z=F.cells||[],J=F.positions||[];for(k=0;k<Z.length;++k)for(var K=Z[k],$=0;$<3;++$){for(var Q=0;Q<3;++Q)S[3*E+Q]=w[Q];for(Q=0;Q<4;++Q)A[4*E+Q]=I[Q];C[E]=v,L[2*E]=H*(U*(tt=J[K[$]])[0]-W*tt[1]+X[0]),L[2*E+1]=H*(W*tt[0]+U*tt[1]+X[1]),E+=1}for(Z=N.edges,J=N.positions,k=0;k<Z.length;++k)for(K=Z[k],$=0;$<2;++$){for(Q=0;Q<3;++Q)S[3*D+Q]=w[Q];for(Q=0;Q<4;++Q)A[4*D+Q]=P[Q];var tt;C[D]=v,L[2*D]=H*(U*(tt=J[K[$]])[0]-W*tt[1]+X[0]),L[2*D+1]=H*(W*tt[0]+U*tt[1]+X[1]),D+=1}}}this.bounds=[u,h],this.points=s,this.pointCount=s.length,this.vertexCount=_,this.lineVertexCount=b,this.pointBuffer.update(S),this.colorBuffer.update(A),this.glyphBuffer.update(L),this.idBuffer.update(C),o.free(S),o.free(A),o.free(L),o.free(C)},y.dispose=function(){this.shader.dispose(),this.orthoShader.dispose(),this.pickPerspectiveShader.dispose(),this.pickOrthoShader.dispose(),this.vao.dispose(),this.pointBuffer.dispose(),this.colorBuffer.dispose(),this.glyphBuffer.dispose(),this.idBuffer.dispose()}},{\"./lib/get-simple-string\":326,\"./lib/glyphs\":327,\"./lib/shaders\":328,\"gl-buffer\":259,\"gl-mat4/multiply\":295,\"gl-vao\":358,\"is-string-blank\":470,\"typedarray-pool\":595}],331:[function(t,e,n){\"use strict\";var r=t(\"glslify\");n.boxVertex=r([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec2 vertex;\\n\\nuniform vec2 cornerA, cornerB;\\n\\nvoid main() {\\n  gl_Position = vec4(mix(cornerA, cornerB, vertex), 0, 1);\\n}\\n\"]),n.boxFragment=r([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nuniform vec4 color;\\n\\nvoid main() {\\n  gl_FragColor = color;\\n}\\n\"])},{glslify:332}],332:[function(t,e,n){arguments[4][257][0].apply(n,arguments)},{dup:257}],333:[function(t,e,n){\"use strict\";var r=t(\"gl-shader\"),i=t(\"gl-buffer\"),a=t(\"./lib/shaders\");function o(t,e,n){this.plot=t,this.boxBuffer=e,this.boxShader=n,this.enabled=!0,this.selectBox=[1/0,1/0,-1/0,-1/0],this.borderColor=[0,0,0,1],this.innerFill=!1,this.innerColor=[0,0,0,.25],this.outerFill=!0,this.outerColor=[0,0,0,.5],this.borderWidth=10}e.exports=function(t,e){var n=t.gl,s=new o(t,i(n,[0,0,0,1,1,0,1,1]),r(n,a.boxVertex,a.boxFragment));return s.update(e),t.addOverlay(s),s};var s=o.prototype;s.draw=function(){if(this.enabled){var t=this.plot,e=this.selectBox,n=this.borderWidth,r=this.innerColor,i=this.outerColor,a=this.borderColor,o=t.box,s=t.screenBox,l=t.dataBox,c=t.viewBox,u=t.pixelRatio,h=(e[0]-l[0])*(c[2]-c[0])/(l[2]-l[0])+c[0],d=(e[1]-l[1])*(c[3]-c[1])/(l[3]-l[1])+c[1],f=(e[2]-l[0])*(c[2]-c[0])/(l[2]-l[0])+c[0],p=(e[3]-l[1])*(c[3]-c[1])/(l[3]-l[1])+c[1];if(h=Math.max(h,c[0]),d=Math.max(d,c[1]),f=Math.min(f,c[2]),p=Math.min(p,c[3]),!(f<h||p<d)){o.bind();var m=s[2]-s[0],g=s[3]-s[1];if(this.outerFill&&(o.drawBox(0,0,m,d,i),o.drawBox(0,d,h,p,i),o.drawBox(0,p,m,g,i),o.drawBox(f,d,m,p,i)),this.innerFill&&o.drawBox(h,d,f,p,r),n>0){var y=n*u;o.drawBox(h-y,d-y,f+y,d+y,a),o.drawBox(h-y,p-y,f+y,p+y,a),o.drawBox(h-y,d-y,h+y,p+y,a),o.drawBox(f-y,d-y,f+y,p+y,a)}}}},s.update=function(t){this.innerFill=!!(t=t||{}).innerFill,this.outerFill=!!t.outerFill,this.innerColor=(t.innerColor||[0,0,0,.5]).slice(),this.outerColor=(t.outerColor||[0,0,0,.5]).slice(),this.borderColor=(t.borderColor||[0,0,0,1]).slice(),this.borderWidth=t.borderWidth||0,this.selectBox=(t.selectBox||this.selectBox).slice()},s.dispose=function(){this.boxBuffer.dispose(),this.boxShader.dispose(),this.plot.removeOverlay(this)}},{\"./lib/shaders\":331,\"gl-buffer\":259,\"gl-shader\":335}],334:[function(t,e,n){\"use strict\";e.exports=function(t,e){var n=e[0],a=e[1];return new l(t,r(t,n,a,{}),i.mallocUint8(n*a*4))};var r=t(\"gl-fbo\"),i=t(\"typedarray-pool\"),a=t(\"ndarray\"),o=t(\"bit-twiddle\").nextPow2;function s(t,e,n,r,i){this.coord=[t,e],this.id=n,this.value=r,this.distance=i}function l(t,e,n){this.gl=t,this.fbo=e,this.buffer=n,this._readTimeout=null;var r=this;this._readCallback=function(){r.gl&&(e.bind(),t.readPixels(0,0,e.shape[0],e.shape[1],t.RGBA,t.UNSIGNED_BYTE,r.buffer),r._readTimeout=null)}}var c=l.prototype;Object.defineProperty(c,\"shape\",{get:function(){return this.gl?this.fbo.shape.slice():[0,0]},set:function(t){if(this.gl){this.fbo.shape=t;var e=this.fbo.shape[0],n=this.fbo.shape[1];if(n*e*4>this.buffer.length){i.free(this.buffer);for(var r=this.buffer=i.mallocUint8(o(n*e*4)),a=0;a<n*e*4;++a)r[a]=255}return t}}}),c.begin=function(){var t=this.gl;t&&(this.fbo.bind(),t.clearColor(1,1,1,1),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT))},c.end=function(){var t=this.gl;t&&(t.bindFramebuffer(t.FRAMEBUFFER,null),this._readTimeout||clearTimeout(this._readTimeout),this._readTimeout=setTimeout(this._readCallback,1))},c.query=function(t,e,n){if(!this.gl)return null;var r=this.fbo.shape.slice();t|=0,e|=0,\"number\"!=typeof n&&(n=1);var i=0|Math.min(Math.max(t-n,0),r[0]),o=0|Math.min(Math.max(t+n,0),r[0]),l=0|Math.min(Math.max(e-n,0),r[1]),c=0|Math.min(Math.max(e+n,0),r[1]);if(o<=i||c<=l)return null;var u=[o-i,c-l],h=a(this.buffer,[u[0],u[1],4],[4,4*r[0],1],4*(i+r[0]*l)),d=function(t,e,n){for(var r=1e8,i=-1,a=-1,o=t.shape[0],s=t.shape[1],l=0;l<o;l++)for(var c=0;c<s;c++){var u=t.get(l,c,0),h=t.get(l,c,1),d=t.get(l,c,2),f=t.get(l,c,3);if(u<255||h<255||d<255||f<255){var p=e-l,m=n-c,g=p*p+m*m;g<r&&(r=g,i=l,a=c)}}return[i,a,r]}(h.hi(u[0],u[1],1),n,n),f=d[0],p=d[1];return f<0||Math.pow(this.radius,2)<d[2]?null:new s(f+i|0,p+l|0,h.get(f,p,0),[h.get(f,p,1),h.get(f,p,2),h.get(f,p,3)],Math.sqrt(d[2]))},c.dispose=function(){this.gl&&(this.fbo.dispose(),i.free(this.buffer),this.gl=null,this._readTimeout&&clearTimeout(this._readTimeout))}},{\"bit-twiddle\":97,\"gl-fbo\":269,ndarray:495,\"typedarray-pool\":595}],335:[function(t,e,n){\"use strict\";var r=t(\"./lib/create-uniforms\"),i=t(\"./lib/create-attributes\"),a=t(\"./lib/reflect\"),o=t(\"./lib/shader-cache\"),s=t(\"./lib/runtime-reflect\"),l=t(\"./lib/GLError\");function c(t){this.gl=t,this.gl.lastAttribCount=0,this._vref=this._fref=this._relink=this.vertShader=this.fragShader=this.program=this.attributes=this.uniforms=this.types=null}var u=c.prototype;function h(t,e){return t.name<e.name?-1:1}u.bind=function(){var t;this.program||this._relink();var e=this.gl.getProgramParameter(this.program,this.gl.ACTIVE_ATTRIBUTES),n=this.gl.lastAttribCount;if(e>n)for(t=n;t<e;t++)this.gl.enableVertexAttribArray(t);else if(n>e)for(t=e;t<n;t++)this.gl.disableVertexAttribArray(t);this.gl.lastAttribCount=e,this.gl.useProgram(this.program)},u.dispose=function(){for(var t=this.gl.lastAttribCount,e=0;e<t;e++)this.gl.disableVertexAttribArray(e);this.gl.lastAttribCount=0,this._fref&&this._fref.dispose(),this._vref&&this._vref.dispose(),this.attributes=this.types=this.vertShader=this.fragShader=this.program=this._relink=this._fref=this._vref=null},u.update=function(t,e,n,c){if(!e||1===arguments.length){var u=t;t=u.vertex,e=u.fragment,n=u.uniforms,c=u.attributes}var d=this,f=d.gl,p=d._vref;d._vref=o.shader(f,f.VERTEX_SHADER,t),p&&p.dispose(),d.vertShader=d._vref.shader;var m=this._fref;if(d._fref=o.shader(f,f.FRAGMENT_SHADER,e),m&&m.dispose(),d.fragShader=d._fref.shader,!n||!c){var g=f.createProgram();if(f.attachShader(g,d.fragShader),f.attachShader(g,d.vertShader),f.linkProgram(g),!f.getProgramParameter(g,f.LINK_STATUS)){var y=f.getProgramInfoLog(g);throw new l(y,\"Error linking program:\"+y)}n=n||s.uniforms(f,g),c=c||s.attributes(f,g),f.deleteProgram(g)}(c=c.slice()).sort(h);var v,_=[],b=[],x=[];for(v=0;v<c.length;++v){var w=c[v];if(w.type.indexOf(\"mat\")>=0){for(var k=0|w.type.charAt(w.type.length-1),M=new Array(k),T=0;T<k;++T)M[T]=x.length,b.push(w.name+\"[\"+T+\"]\"),\"number\"==typeof w.location?x.push(w.location+T):Array.isArray(w.location)&&w.location.length===k&&\"number\"==typeof w.location[T]?x.push(0|w.location[T]):x.push(-1);_.push({name:w.name,type:w.type,locations:M})}else _.push({name:w.name,type:w.type,locations:[x.length]}),b.push(w.name),x.push(\"number\"==typeof w.location?0|w.location:-1)}var S=0;for(v=0;v<x.length;++v)if(x[v]<0){for(;x.indexOf(S)>=0;)S+=1;x[v]=S}var A=new Array(n.length);function L(){d.program=o.program(f,d._vref,d._fref,b,x);for(var t=0;t<n.length;++t)A[t]=f.getUniformLocation(d.program,n[t].name)}L(),d._relink=L,d.types={uniforms:a(n),attributes:a(c)},d.attributes=i(f,d,_,x),Object.defineProperty(d,\"uniforms\",r(f,d,n,A))},e.exports=function(t,e,n,r,i){var a=new c(t);return a.update(e,n,r,i),a}},{\"./lib/GLError\":336,\"./lib/create-attributes\":337,\"./lib/create-uniforms\":338,\"./lib/reflect\":339,\"./lib/runtime-reflect\":340,\"./lib/shader-cache\":341}],336:[function(t,e,n){function r(t,e,n){this.shortMessage=e||\"\",this.longMessage=n||\"\",this.rawError=t||\"\",this.message=\"gl-shader: \"+(e||t||\"\")+(n?\"\\n\"+n:\"\"),this.stack=(new Error).stack}(r.prototype=new Error).name=\"GLError\",r.prototype.constructor=r,e.exports=r},{}],337:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,i){for(var a={},l=0,c=n.length;l<c;++l){var u=n[l],h=u.name,d=u.type,f=u.locations;switch(d){case\"bool\":case\"int\":case\"float\":o(t,e,f[0],i,1,a,h);break;default:if(d.indexOf(\"vec\")>=0){if((p=d.charCodeAt(d.length-1)-48)<2||p>4)throw new r(\"\",\"Invalid data type for attribute \"+h+\": \"+d);o(t,e,f[0],i,p,a,h)}else{if(!(d.indexOf(\"mat\")>=0))throw new r(\"\",\"Unknown data type for attribute \"+h+\": \"+d);var p;if((p=d.charCodeAt(d.length-1)-48)<2||p>4)throw new r(\"\",\"Invalid data type for attribute \"+h+\": \"+d);s(t,e,f,i,p,a,h)}}}return a};var r=t(\"./GLError\");function i(t,e,n,r,i,a){this._gl=t,this._wrapper=e,this._index=n,this._locations=r,this._dimension=i,this._constFunc=a}var a=i.prototype;function o(t,e,n,r,a,o,s){for(var l=[\"gl\",\"v\"],c=[],u=0;u<a;++u)l.push(\"x\"+u),c.push(\"x\"+u);l.push(\"if(x0.length===void 0){return gl.vertexAttrib\"+a+\"f(v,\"+c.join()+\")}else{return gl.vertexAttrib\"+a+\"fv(v,x0)}\");var h=Function.apply(null,l),d=new i(t,e,n,r,a,h);Object.defineProperty(o,s,{set:function(e){return t.disableVertexAttribArray(r[n]),h(t,r[n],e),e},get:function(){return d},enumerable:!0})}function s(t,e,n,r,i,a,s){for(var l=new Array(i),c=new Array(i),u=0;u<i;++u)o(t,e,n[u],r,i,l,u),c[u]=l[u];Object.defineProperty(l,\"location\",{set:function(t){if(Array.isArray(t))for(var e=0;e<i;++e)c[e].location=t[e];else for(e=0;e<i;++e)c[e].location=t+e;return t},get:function(){for(var t=new Array(i),e=0;e<i;++e)t[e]=r[n[e]];return t},enumerable:!0}),l.pointer=function(e,a,o,s){e=e||t.FLOAT,a=!!a,o=o||i*i,s=s||0;for(var l=0;l<i;++l){var c=r[n[l]];t.vertexAttribPointer(c,i,e,a,o,s+l*i),t.enableVertexAttribArray(c)}};var h=new Array(i),d=t[\"vertexAttrib\"+i+\"fv\"];Object.defineProperty(a,s,{set:function(e){for(var a=0;a<i;++a){var o=r[n[a]];if(t.disableVertexAttribArray(o),Array.isArray(e[0]))d.call(t,o,e[a]);else{for(var s=0;s<i;++s)h[s]=e[i*a+s];d.call(t,o,h)}}return e},get:function(){return l},enumerable:!0})}a.pointer=function(t,e,n,r){var i=this,a=i._gl,o=i._locations[i._index];a.vertexAttribPointer(o,i._dimension,t||a.FLOAT,!!e,n||0,r||0),a.enableVertexAttribArray(o)},a.set=function(t,e,n,r){return this._constFunc(this._locations[this._index],t,e,n,r)},Object.defineProperty(a,\"location\",{get:function(){return this._locations[this._index]},set:function(t){return t!==this._locations[this._index]&&(this._locations[this._index]=0|t,this._wrapper.program=null),0|t}})},{\"./GLError\":336}],338:[function(t,e,n){\"use strict\";var r=t(\"./reflect\"),i=t(\"./GLError\");function a(t){return new Function(\"y\",\"return function(){return y}\")(t)}function o(t,e){for(var n=new Array(t),r=0;r<t;++r)n[r]=e;return n}e.exports=function(t,e,n,s){function l(t,e,n){switch(n){case\"bool\":case\"int\":case\"sampler2D\":case\"samplerCube\":return\"gl.uniform1i(locations[\"+e+\"],obj\"+t+\")\";case\"float\":return\"gl.uniform1f(locations[\"+e+\"],obj\"+t+\")\";default:var r=n.indexOf(\"vec\");if(!(0<=r&&r<=1&&n.length===4+r)){if(0===n.indexOf(\"mat\")&&4===n.length){var a;if((a=n.charCodeAt(n.length-1)-48)<2||a>4)throw new i(\"\",\"Invalid uniform dimension type for matrix \"+name+\": \"+n);return\"gl.uniformMatrix\"+a+\"fv(locations[\"+e+\"],false,obj\"+t+\")\"}throw new i(\"\",\"Unknown uniform data type for \"+name+\": \"+n)}if((a=n.charCodeAt(n.length-1)-48)<2||a>4)throw new i(\"\",\"Invalid data type\");switch(n.charAt(0)){case\"b\":case\"i\":return\"gl.uniform\"+a+\"iv(locations[\"+e+\"],obj\"+t+\")\";case\"v\":return\"gl.uniform\"+a+\"fv(locations[\"+e+\"],obj\"+t+\")\";default:throw new i(\"\",\"Unrecognized data type for vector \"+name+\": \"+n)}}}function c(e){for(var r=[\"return function updateProperty(obj){\"],i=function t(e,n){if(\"object\"!=typeof n)return[[e,n]];var r=[];for(var i in n){var a=n[i],o=e;parseInt(i)+\"\"===i?o+=\"[\"+i+\"]\":o+=\".\"+i,\"object\"==typeof a?r.push.apply(r,t(o,a)):r.push([o,a])}return r}(\"\",e),a=0;a<i.length;++a){var o=i[a],c=o[1];s[c]&&r.push(l(o[0],c,n[c].type))}return r.push(\"return obj}\"),new Function(\"gl\",\"locations\",r.join(\"\\n\"))(t,s)}function u(r,l,u){if(\"object\"==typeof u){var d=h(u);Object.defineProperty(r,l,{get:a(d),set:c(u),enumerable:!0,configurable:!1})}else s[u]?Object.defineProperty(r,l,{get:(f=u,new Function(\"gl\",\"wrapper\",\"locations\",\"return function(){return gl.getUniform(wrapper.program,locations[\"+f+\"])}\")(t,e,s)),set:c(u),enumerable:!0,configurable:!1}):r[l]=function(t){switch(t){case\"bool\":return!1;case\"int\":case\"sampler2D\":case\"samplerCube\":case\"float\":return 0;default:var e=t.indexOf(\"vec\");if(0<=e&&e<=1&&t.length===4+e){if((n=t.charCodeAt(t.length-1)-48)<2||n>4)throw new i(\"\",\"Invalid data type\");return\"b\"===t.charAt(0)?o(n,!1):o(n,0)}if(0===t.indexOf(\"mat\")&&4===t.length){var n;if((n=t.charCodeAt(t.length-1)-48)<2||n>4)throw new i(\"\",\"Invalid uniform dimension type for matrix \"+name+\": \"+t);return o(n*n,0)}throw new i(\"\",\"Unknown uniform data type for \"+name+\": \"+t)}}(n[u].type);var f}function h(t){var e;if(Array.isArray(t)){e=new Array(t.length);for(var n=0;n<t.length;++n)u(e,n,t[n])}else for(var r in e={},t)u(e,r,t[r]);return e}var d=r(n,!0);return{get:a(h(d)),set:c(d),enumerable:!0,configurable:!0}}},{\"./GLError\":336,\"./reflect\":339}],339:[function(t,e,n){\"use strict\";e.exports=function(t,e){for(var n={},r=0;r<t.length;++r)for(var i=t[r].name.split(\".\"),a=n,o=0;o<i.length;++o){var s=i[o].split(\"[\");if(s.length>1){s[0]in a||(a[s[0]]=[]),a=a[s[0]];for(var l=1;l<s.length;++l){var c=parseInt(s[l]);l<s.length-1||o<i.length-1?(c in a||(a[c]=l<s.length-1?[]:{}),a=a[c]):a[c]=e?r:t[r].type}}else o<i.length-1?(s[0]in a||(a[s[0]]={}),a=a[s[0]]):a[s[0]]=e?r:t[r].type}return n}},{}],340:[function(t,e,n){\"use strict\";n.uniforms=function(t,e){for(var n=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),r=[],i=0;i<n;++i){var o=t.getActiveUniform(e,i);if(o){var s=a(t,o.type);if(o.size>1)for(var l=0;l<o.size;++l)r.push({name:o.name.replace(\"[0]\",\"[\"+l+\"]\"),type:s});else r.push({name:o.name,type:s})}}return r},n.attributes=function(t,e){for(var n=t.getProgramParameter(e,t.ACTIVE_ATTRIBUTES),r=[],i=0;i<n;++i){var o=t.getActiveAttrib(e,i);o&&r.push({name:o.name,type:a(t,o.type)})}return r};var r={FLOAT:\"float\",FLOAT_VEC2:\"vec2\",FLOAT_VEC3:\"vec3\",FLOAT_VEC4:\"vec4\",INT:\"int\",INT_VEC2:\"ivec2\",INT_VEC3:\"ivec3\",INT_VEC4:\"ivec4\",BOOL:\"bool\",BOOL_VEC2:\"bvec2\",BOOL_VEC3:\"bvec3\",BOOL_VEC4:\"bvec4\",FLOAT_MAT2:\"mat2\",FLOAT_MAT3:\"mat3\",FLOAT_MAT4:\"mat4\",SAMPLER_2D:\"sampler2D\",SAMPLER_CUBE:\"samplerCube\"},i=null;function a(t,e){if(!i){var n=Object.keys(r);i={};for(var a=0;a<n.length;++a){var o=n[a];i[t[o]]=r[o]}}return i[e]}},{}],341:[function(t,e,n){\"use strict\";n.shader=function(t,e,n){return u(t).getShaderReference(e,n)},n.program=function(t,e,n,r,i){return u(t).getProgram(e,n,r,i)};var r=t(\"./GLError\"),i=t(\"gl-format-compiler-error\"),a=new(\"undefined\"==typeof WeakMap?t(\"weakmap-shim\"):WeakMap),o=0;function s(t,e,n,r,i,a,o){this.id=t,this.src=e,this.type=n,this.shader=r,this.count=a,this.programs=[],this.cache=o}function l(t){this.gl=t,this.shaders=[{},{}],this.programs={}}s.prototype.dispose=function(){if(0==--this.count){for(var t=this.cache,e=t.gl,n=this.programs,r=0,i=n.length;r<i;++r){var a=t.programs[n[r]];a&&(delete t.programs[r],e.deleteProgram(a))}e.deleteShader(this.shader),delete t.shaders[this.type===e.FRAGMENT_SHADER|0][this.src]}};var c=l.prototype;function u(t){var e=a.get(t);return e||(e=new l(t),a.set(t,e)),e}c.getShaderReference=function(t,e){var n=this.gl,a=this.shaders[t===n.FRAGMENT_SHADER|0],l=a[e];if(l&&n.isShader(l.shader))l.count+=1;else{var c=function(t,e,n){var a=t.createShader(e);if(t.shaderSource(a,n),t.compileShader(a),!t.getShaderParameter(a,t.COMPILE_STATUS)){var o=t.getShaderInfoLog(a);try{var s=i(o,n,e)}catch(l){throw console.warn(\"Failed to format compiler error: \"+l),new r(o,\"Error compiling shader:\\n\"+o)}throw new r(o,s.short,s.long)}return a}(n,t,e);l=a[e]=new s(o++,e,t,c,[],1,this)}return l},c.getProgram=function(t,e,n,i){var a=[t.id,e.id,n.join(\":\"),i.join(\":\")].join(\"@\"),o=this.programs[a];return o&&this.gl.isProgram(o)||(this.programs[a]=o=function(t,e,n,i,a){var o=t.createProgram();t.attachShader(o,e),t.attachShader(o,n);for(var s=0;s<i.length;++s)t.bindAttribLocation(o,a[s],i[s]);if(t.linkProgram(o),!t.getProgramParameter(o,t.LINK_STATUS)){var l=t.getProgramInfoLog(o);throw new r(l,\"Error linking program: \"+l)}return o}(this.gl,t.shader,e.shader,n,i),t.programs.push(a),e.programs.push(a)),o}},{\"./GLError\":336,\"gl-format-compiler-error\":270,\"weakmap-shim\":605}],342:[function(t,e,n){\"use strict\";function r(t){this.plot=t,this.enable=[!0,!0,!1,!1],this.width=[1,1,1,1],this.color=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.center=[1/0,1/0]}e.exports=function(t,e){var n=new r(t);return n.update(e),t.addOverlay(n),n};var i=r.prototype;i.update=function(t){this.enable=((t=t||{}).enable||[!0,!0,!1,!1]).slice(),this.width=(t.width||[1,1,1,1]).slice(),this.color=(t.color||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]).map((function(t){return t.slice()})),this.center=(t.center||[1/0,1/0]).slice(),this.plot.setOverlayDirty()},i.draw=function(){var t=this.enable,e=this.width,n=this.color,r=this.center,i=this.plot,a=i.line,o=i.dataBox,s=i.viewBox;if(a.bind(),o[0]<=r[0]&&r[0]<=o[2]&&o[1]<=r[1]&&r[1]<=o[3]){var l=s[0]+(r[0]-o[0])/(o[2]-o[0])*(s[2]-s[0]),c=s[1]+(r[1]-o[1])/(o[3]-o[1])*(s[3]-s[1]);t[0]&&a.drawLine(l,c,s[0],c,e[0],n[0]),t[1]&&a.drawLine(l,c,l,s[1],e[1],n[1]),t[2]&&a.drawLine(l,c,s[2],c,e[2],n[2]),t[3]&&a.drawLine(l,c,l,s[3],e[3],n[3])}},i.dispose=function(){this.plot.removeOverlay(this)}},{}],343:[function(t,e,n){arguments[4][257][0].apply(n,arguments)},{dup:257}],344:[function(t,e,n){\"use strict\";var r=t(\"glslify\"),i=t(\"gl-shader\"),a=r([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position, color;\\nattribute float weight;\\n\\nuniform mat4 model, view, projection;\\nuniform vec3 coordinates[3];\\nuniform vec4 colors[3];\\nuniform vec2 screenShape;\\nuniform float lineWidth;\\n\\nvarying vec4 fragColor;\\n\\nvoid main() {\\n  vec3 vertexPosition = mix(coordinates[0],\\n    mix(coordinates[2], coordinates[1], 0.5 * (position + 1.0)), abs(position));\\n\\n  vec4 clipPos = projection * view * model * vec4(vertexPosition, 1.0);\\n  vec2 clipOffset = (projection * view * model * vec4(color, 0.0)).xy;\\n  vec2 delta = weight * clipOffset * screenShape;\\n  vec2 lineOffset = normalize(vec2(delta.y, -delta.x)) / screenShape;\\n\\n  gl_Position   = vec4(clipPos.xy + clipPos.w * 0.5 * lineWidth * lineOffset, clipPos.z, clipPos.w);\\n  fragColor     = color.x * colors[0] + color.y * colors[1] + color.z * colors[2];\\n}\\n\"]),o=r([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragColor;\\n\\nvoid main() {\\n  gl_FragColor = fragColor;\\n}\"]);e.exports=function(t){return i(t,a,o,null,[{name:\"position\",type:\"vec3\"},{name:\"color\",type:\"vec3\"},{name:\"weight\",type:\"float\"}])}},{\"gl-shader\":335,glslify:343}],345:[function(t,e,n){\"use strict\";var r=t(\"gl-buffer\"),i=t(\"gl-vao\"),a=t(\"./shaders/index\");e.exports=function(t,e){var n=[];function o(t,e,r,i,a,o){var s=[t,e,r,0,0,0,1];s[i+3]=1,s[i]=a,n.push.apply(n,s),s[6]=-1,n.push.apply(n,s),s[i]=o,n.push.apply(n,s),n.push.apply(n,s),s[6]=1,n.push.apply(n,s),s[i]=a,n.push.apply(n,s)}o(0,0,0,0,0,1),o(0,0,0,1,0,1),o(0,0,0,2,0,1),o(1,0,0,1,-1,1),o(1,0,0,2,-1,1),o(0,1,0,0,-1,1),o(0,1,0,2,-1,1),o(0,0,1,0,-1,1),o(0,0,1,1,-1,1);var l=r(t,n),c=i(t,[{type:t.FLOAT,buffer:l,size:3,offset:0,stride:28},{type:t.FLOAT,buffer:l,size:3,offset:12,stride:28},{type:t.FLOAT,buffer:l,size:1,offset:24,stride:28}]),u=a(t);u.attributes.position.location=0,u.attributes.color.location=1,u.attributes.weight.location=2;var h=new s(t,l,c,u);return h.update(e),h};var o=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function s(t,e,n,r){this.gl=t,this.buffer=e,this.vao=n,this.shader=r,this.pixelRatio=1,this.bounds=[[-1e3,-1e3,-1e3],[1e3,1e3,1e3]],this.position=[0,0,0],this.lineWidth=[2,2,2],this.colors=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.enabled=[!0,!0,!0],this.drawSides=[!0,!0,!0],this.axes=null}var l=s.prototype,c=[0,0,0],u=[0,0,0],h=[0,0];l.isTransparent=function(){return!1},l.drawTransparent=function(t){},l.draw=function(t){var e=this.gl,n=this.vao,r=this.shader;n.bind(),r.bind();var i,a=t.model||o,s=t.view||o,l=t.projection||o;this.axes&&(i=this.axes.lastCubeProps.axis);for(var d=c,f=u,p=0;p<3;++p)i&&i[p]<0?(d[p]=this.bounds[0][p],f[p]=this.bounds[1][p]):(d[p]=this.bounds[1][p],f[p]=this.bounds[0][p]);for(h[0]=e.drawingBufferWidth,h[1]=e.drawingBufferHeight,r.uniforms.model=a,r.uniforms.view=s,r.uniforms.projection=l,r.uniforms.coordinates=[this.position,d,f],r.uniforms.colors=this.colors,r.uniforms.screenShape=h,p=0;p<3;++p)r.uniforms.lineWidth=this.lineWidth[p]*this.pixelRatio,this.enabled[p]&&(n.draw(e.TRIANGLES,6,6*p),this.drawSides[p]&&n.draw(e.TRIANGLES,12,18+12*p));n.unbind()},l.update=function(t){t&&(\"bounds\"in t&&(this.bounds=t.bounds),\"position\"in t&&(this.position=t.position),\"lineWidth\"in t&&(this.lineWidth=t.lineWidth),\"colors\"in t&&(this.colors=t.colors),\"enabled\"in t&&(this.enabled=t.enabled),\"drawSides\"in t&&(this.drawSides=t.drawSides))},l.dispose=function(){this.vao.dispose(),this.buffer.dispose(),this.shader.dispose()}},{\"./shaders/index\":344,\"gl-buffer\":259,\"gl-vao\":358}],346:[function(t,e,n){var r=t(\"glslify\"),i=r([\"precision highp float;\\n\\nprecision highp float;\\n#define GLSLIFY 1\\n\\nvec3 getOrthogonalVector(vec3 v) {\\n  // Return up-vector for only-z vector.\\n  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\\n  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.\\n  // Assign z = 0, x = -b, y = a:\\n  // a*-b + b*a + c*0 = -ba + ba + 0 = 0\\n  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\\n    return normalize(vec3(-v.y, v.x, 0.0));\\n  } else {\\n    return normalize(vec3(0.0, v.z, -v.y));\\n  }\\n}\\n\\n// Calculate the tube vertex and normal at the given index.\\n//\\n// The returned vertex is for a tube ring with its center at origin, radius of length(d), pointing in the direction of d.\\n//\\n// Each tube segment is made up of a ring of vertices.\\n// These vertices are used to make up the triangles of the tube by connecting them together in the vertex array.\\n// The indexes of tube segments run from 0 to 8.\\n//\\nvec3 getTubePosition(vec3 d, float index, out vec3 normal) {\\n  float segmentCount = 8.0;\\n\\n  float angle = 2.0 * 3.14159 * (index / segmentCount);\\n\\n  vec3 u = getOrthogonalVector(d);\\n  vec3 v = normalize(cross(u, d));\\n\\n  vec3 x = u * cos(angle) * length(d);\\n  vec3 y = v * sin(angle) * length(d);\\n  vec3 v3 = x + y;\\n\\n  normal = normalize(v3);\\n\\n  return v3;\\n}\\n\\nattribute vec4 vector;\\nattribute vec4 color, position;\\nattribute vec2 uv;\\n\\nuniform float vectorScale, tubeScale;\\nuniform mat4 model, view, projection, inverseModel;\\nuniform vec3 eyePosition, lightPosition;\\n\\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  // Scale the vector magnitude to stay constant with\\n  // model & view changes.\\n  vec3 normal;\\n  vec3 XYZ = getTubePosition(mat3(model) * (tubeScale * vector.w * normalize(vector.xyz)), position.w, normal);\\n  vec4 tubePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\\n\\n  //Lighting geometry parameters\\n  vec4 cameraCoordinate = view * tubePosition;\\n  cameraCoordinate.xyz /= cameraCoordinate.w;\\n  f_lightDirection = lightPosition - cameraCoordinate.xyz;\\n  f_eyeDirection   = eyePosition - cameraCoordinate.xyz;\\n  f_normal = normalize((vec4(normal, 0.0) * inverseModel).xyz);\\n\\n  // vec4 m_position  = model * vec4(tubePosition, 1.0);\\n  vec4 t_position  = view * tubePosition;\\n  gl_Position      = projection * t_position;\\n\\n  f_color          = color;\\n  f_data           = tubePosition.xyz;\\n  f_position       = position.xyz;\\n  f_uv             = uv;\\n}\\n\"]),a=r([\"#extension GL_OES_standard_derivatives : enable\\n\\nprecision highp float;\\n#define GLSLIFY 1\\n\\nfloat beckmannDistribution(float x, float roughness) {\\n  float NdotH = max(x, 0.0001);\\n  float cos2Alpha = NdotH * NdotH;\\n  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\\n  float roughness2 = roughness * roughness;\\n  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\\n  return exp(tan2Alpha / roughness2) / denom;\\n}\\n\\nfloat cookTorranceSpecular(\\n  vec3 lightDirection,\\n  vec3 viewDirection,\\n  vec3 surfaceNormal,\\n  float roughness,\\n  float fresnel) {\\n\\n  float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\\n  float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\\n\\n  //Half angle vector\\n  vec3 H = normalize(lightDirection + viewDirection);\\n\\n  //Geometric term\\n  float NdotH = max(dot(surfaceNormal, H), 0.0);\\n  float VdotH = max(dot(viewDirection, H), 0.000001);\\n  float LdotH = max(dot(lightDirection, H), 0.000001);\\n  float G1 = (2.0 * NdotH * VdotN) / VdotH;\\n  float G2 = (2.0 * NdotH * LdotN) / LdotH;\\n  float G = min(1.0, min(G1, G2));\\n  \\n  //Distribution term\\n  float D = beckmannDistribution(NdotH, roughness);\\n\\n  //Fresnel term\\n  float F = pow(1.0 - VdotN, fresnel);\\n\\n  //Multiply terms and done\\n  return  G * F * D / max(3.14159265 * VdotN, 0.000001);\\n}\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 clipBounds[2];\\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\\nuniform sampler2D texture;\\n\\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\n  vec3 N = normalize(f_normal);\\n  vec3 L = normalize(f_lightDirection);\\n  vec3 V = normalize(f_eyeDirection);\\n\\n  if(gl_FrontFacing) {\\n    N = -N;\\n  }\\n\\n  float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\\n  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\\n\\n  vec4 surfaceColor = f_color * texture2D(texture, f_uv);\\n  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\\n\\n  gl_FragColor = litColor * opacity;\\n}\\n\"]),o=r([\"precision highp float;\\n\\nprecision highp float;\\n#define GLSLIFY 1\\n\\nvec3 getOrthogonalVector(vec3 v) {\\n  // Return up-vector for only-z vector.\\n  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\\n  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.\\n  // Assign z = 0, x = -b, y = a:\\n  // a*-b + b*a + c*0 = -ba + ba + 0 = 0\\n  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\\n    return normalize(vec3(-v.y, v.x, 0.0));\\n  } else {\\n    return normalize(vec3(0.0, v.z, -v.y));\\n  }\\n}\\n\\n// Calculate the tube vertex and normal at the given index.\\n//\\n// The returned vertex is for a tube ring with its center at origin, radius of length(d), pointing in the direction of d.\\n//\\n// Each tube segment is made up of a ring of vertices.\\n// These vertices are used to make up the triangles of the tube by connecting them together in the vertex array.\\n// The indexes of tube segments run from 0 to 8.\\n//\\nvec3 getTubePosition(vec3 d, float index, out vec3 normal) {\\n  float segmentCount = 8.0;\\n\\n  float angle = 2.0 * 3.14159 * (index / segmentCount);\\n\\n  vec3 u = getOrthogonalVector(d);\\n  vec3 v = normalize(cross(u, d));\\n\\n  vec3 x = u * cos(angle) * length(d);\\n  vec3 y = v * sin(angle) * length(d);\\n  vec3 v3 = x + y;\\n\\n  normal = normalize(v3);\\n\\n  return v3;\\n}\\n\\nattribute vec4 vector;\\nattribute vec4 position;\\nattribute vec4 id;\\n\\nuniform mat4 model, view, projection;\\nuniform float tubeScale;\\n\\nvarying vec3 f_position;\\nvarying vec4 f_id;\\n\\nvoid main() {\\n  vec3 normal;\\n  vec3 XYZ = getTubePosition(mat3(model) * (tubeScale * vector.w * normalize(vector.xyz)), position.w, normal);\\n  vec4 tubePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\\n\\n  gl_Position = projection * view * tubePosition;\\n  f_id        = id;\\n  f_position  = position.xyz;\\n}\\n\"]),s=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3  clipBounds[2];\\nuniform float pickId;\\n\\nvarying vec3 f_position;\\nvarying vec4 f_id;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\n\\n  gl_FragColor = vec4(pickId, f_id.xyz);\\n}\"]);n.meshShader={vertex:i,fragment:a,attributes:[{name:\"position\",type:\"vec4\"},{name:\"color\",type:\"vec4\"},{name:\"uv\",type:\"vec2\"},{name:\"vector\",type:\"vec4\"}]},n.pickShader={vertex:o,fragment:s,attributes:[{name:\"position\",type:\"vec4\"},{name:\"id\",type:\"vec4\"},{name:\"vector\",type:\"vec4\"}]}},{glslify:347}],347:[function(t,e,n){arguments[4][257][0].apply(n,arguments)},{dup:257}],348:[function(t,e,n){\"use strict\";var r=t(\"gl-vec3\"),i=t(\"gl-vec4\"),a=[\"xyz\",\"xzy\",\"yxz\",\"yzx\",\"zxy\",\"zyx\"],o=function(t,e){var n,r=t.length;for(n=0;n<r;n++){var i=t[n];if(i===e)return n;if(i>e)return n-1}return n},s=function(t,e,n){return t<e?e:t>n?n:t},l=function(t){var e=1/0;t.sort((function(t,e){return t-e}));for(var n=t.length,r=1;r<n;r++){var i=Math.abs(t[r]-t[r-1]);i<e&&(e=i)}return e};e.exports=function(t,e){var n=t.startingPositions,c=t.maxLength||1e3,u=t.tubeSize||1,h=t.absoluteTubeSize,d=t.gridFill||\"+x+y+z\",f={};-1!==d.indexOf(\"-x\")&&(f.reversedX=!0),-1!==d.indexOf(\"-y\")&&(f.reversedY=!0),-1!==d.indexOf(\"-z\")&&(f.reversedZ=!0),f.filled=a.indexOf(d.replace(/-/g,\"\").replace(/\\+/g,\"\"));var p=t.getVelocity||function(e){return function(t,e,n){var i=e.vectors,a=e.meshgrid,l=t[0],c=t[1],u=t[2],h=a[0].length,d=a[1].length,f=a[2].length,p=o(a[0],l),m=o(a[1],c),g=o(a[2],u),y=p+1,v=m+1,_=g+1;if(p=s(p,0,h-1),y=s(y,0,h-1),m=s(m,0,d-1),v=s(v,0,d-1),g=s(g,0,f-1),_=s(_,0,f-1),p<0||m<0||g<0||y>h-1||v>d-1||_>f-1)return r.create();var b,x,w,k,M,T,S=a[0][p],A=a[1][m],L=a[2][g],C=(l-S)/(a[0][y]-S),E=(c-A)/(a[1][v]-A),O=(u-L)/(a[2][_]-L);switch(isFinite(C)||(C=.5),isFinite(E)||(E=.5),isFinite(O)||(O=.5),n.reversedX&&(p=h-1-p,y=h-1-y),n.reversedY&&(m=d-1-m,v=d-1-v),n.reversedZ&&(g=f-1-g,_=f-1-_),n.filled){case 5:M=g,T=_,w=m*f,k=v*f,b=p*f*d,x=y*f*d;break;case 4:M=g,T=_,b=p*f,x=y*f,w=m*f*h,k=v*f*h;break;case 3:w=m,k=v,M=g*d,T=_*d,b=p*d*f,x=y*d*f;break;case 2:w=m,k=v,b=p*d,x=y*d,M=g*d*h,T=_*d*h;break;case 1:b=p,x=y,M=g*h,T=_*h,w=m*h*f,k=v*h*f;break;default:b=p,x=y,w=m*h,k=v*h,M=g*h*d,T=_*h*d}var D=i[b+w+M],I=i[b+w+T],P=i[b+k+M],R=i[b+k+T],z=i[x+w+M],j=i[x+w+T],F=i[x+k+M],N=i[x+k+T],B=r.create(),Y=r.create(),H=r.create(),V=r.create();r.lerp(B,D,z,C),r.lerp(Y,I,j,C),r.lerp(H,P,F,C),r.lerp(V,R,N,C);var U=r.create(),W=r.create();r.lerp(U,B,H,E),r.lerp(W,Y,V,E);var q=r.create();return r.lerp(q,U,W,O),q}(e,t,f)},m=t.getDivergence||function(t,e){var n=r.create(),i=1e-4;r.add(n,t,[i,0,0]);var a=p(n);r.subtract(a,a,e),r.scale(a,a,1/i),r.add(n,t,[0,i,0]);var o=p(n);r.subtract(o,o,e),r.scale(o,o,1/i),r.add(n,t,[0,0,i]);var s=p(n);return r.subtract(s,s,e),r.scale(s,s,1/i),r.add(n,a,o),r.add(n,n,s),n},g=[],y=e[0][0],v=e[0][1],_=e[0][2],b=e[1][0],x=e[1][1],w=e[1][2],k=function(t){var e=t[0],n=t[1],r=t[2];return!(e<y||e>b||n<v||n>x||r<_||r>w)},M=10*r.distance(e[0],e[1])/c,T=M*M,S=1,A=0,L=n.length;L>1&&(S=function(t){for(var e=[],n=[],r=[],i={},a={},o={},s=t.length,c=0;c<s;c++){var u=t[c],h=u[0],d=u[1],f=u[2];i[h]||(e.push(h),i[h]=!0),a[d]||(n.push(d),a[d]=!0),o[f]||(r.push(f),o[f]=!0)}var p=l(e),m=l(n),g=l(r),y=Math.min(p,m,g);return isFinite(y)?y:1}(n));for(var C=0;C<L;C++){var E=r.create();r.copy(E,n[C]);var O=[E],D=[],I=p(E),P=E;D.push(I);var R=[],z=m(E,I),j=r.length(z);isFinite(j)&&j>A&&(A=j),R.push(j),g.push({points:O,velocities:D,divergences:R});for(var F=0;F<100*c&&O.length<c&&k(E);){F++;var N=r.clone(I),B=r.squaredLength(N);if(0===B)break;B>T&&r.scale(N,N,M/Math.sqrt(B)),r.add(N,N,E),I=p(N),r.squaredDistance(P,N)-T>-1e-4*T&&(O.push(N),P=N,D.push(I),z=m(N,I),j=r.length(z),isFinite(j)&&j>A&&(A=j),R.push(j)),E=N}}var Y=function(t,e,n,a){for(var o=0,s=0;s<t.length;s++)for(var l=t[s].velocities,c=0;c<l.length;c++)o=Math.max(o,r.length(l[c]));var u=t.map((function(t){return function(t,e,n,a){for(var o=t.points,s=t.velocities,l=t.divergences,c=[],u=[],h=[],d=[],f=[],p=[],m=0,g=0,y=i.create(),v=i.create(),_=0;_<o.length;_++){var b=o[_],x=s[_],w=l[_];0===e&&(w=.05*n),g=r.length(x)/a,y=i.create(),r.copy(y,x),y[3]=w;for(var k=0;k<8;k++)f[k]=[b[0],b[1],b[2],k];if(d.length>0)for(k=0;k<8;k++){var M=(k+1)%8;c.push(d[k],f[k],f[M],f[M],d[M],d[k]),h.push(v,y,y,y,v,v),p.push(m,g,g,g,m,m);var T=c.length;u.push([T-6,T-5,T-4],[T-3,T-2,T-1])}var S=d;d=f,f=S;var A=v;v=y,y=A;var L=m;m=g,g=L}return{positions:c,cells:u,vectors:h,vertexIntensity:p}}(t,n,a,o)})),h=[],d=[],f=[],p=[];for(s=0;s<u.length;s++){var m=u[s],g=h.length;for(h=h.concat(m.positions),f=f.concat(m.vectors),p=p.concat(m.vertexIntensity),c=0;c<m.cells.length;c++){var y=m.cells[c],v=[];d.push(v);for(var _=0;_<y.length;_++)v.push(y[_]+g)}}return{positions:h,cells:d,vectors:f,vertexIntensity:p,colormap:e}}(g,t.colormap,A,S);return h?Y.tubeScale=h:(0===A&&(A=1),Y.tubeScale=.5*u*S/A),Y};var c=t(\"./lib/shaders\"),u=t(\"gl-cone3d\").createMesh;e.exports.createTubeMesh=function(t,e){return u(t,e,{shaders:c,traceType:\"streamtube\"})}},{\"./lib/shaders\":346,\"gl-cone3d\":260,\"gl-vec3\":377,\"gl-vec4\":413}],349:[function(t,e,n){var r=t(\"gl-shader\"),i=t(\"glslify\"),a=i([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec4 uv;\\nattribute vec3 f;\\nattribute vec3 normal;\\n\\nuniform vec3 objectOffset;\\nuniform mat4 model, view, projection, inverseModel;\\nuniform vec3 lightPosition, eyePosition;\\nuniform sampler2D colormap;\\n\\nvarying float value, kill;\\nvarying vec3 worldCoordinate;\\nvarying vec2 planeCoordinate;\\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\\nvarying vec4 vColor;\\n\\nvoid main() {\\n  vec3 localCoordinate = vec3(uv.zw, f.x);\\n  worldCoordinate = objectOffset + localCoordinate;\\n  vec4 worldPosition = model * vec4(worldCoordinate, 1.0);\\n  vec4 clipPosition = projection * view * worldPosition;\\n  gl_Position = clipPosition;\\n  kill = f.y;\\n  value = f.z;\\n  planeCoordinate = uv.xy;\\n\\n  vColor = texture2D(colormap, vec2(value, value));\\n\\n  //Lighting geometry parameters\\n  vec4 cameraCoordinate = view * worldPosition;\\n  cameraCoordinate.xyz /= cameraCoordinate.w;\\n  lightDirection = lightPosition - cameraCoordinate.xyz;\\n  eyeDirection   = eyePosition - cameraCoordinate.xyz;\\n  surfaceNormal  = normalize((vec4(normal,0) * inverseModel).xyz);\\n}\\n\"]),o=i([\"precision highp float;\\n#define GLSLIFY 1\\n\\nfloat beckmannDistribution(float x, float roughness) {\\n  float NdotH = max(x, 0.0001);\\n  float cos2Alpha = NdotH * NdotH;\\n  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\\n  float roughness2 = roughness * roughness;\\n  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\\n  return exp(tan2Alpha / roughness2) / denom;\\n}\\n\\nfloat beckmannSpecular(\\n  vec3 lightDirection,\\n  vec3 viewDirection,\\n  vec3 surfaceNormal,\\n  float roughness) {\\n  return beckmannDistribution(dot(surfaceNormal, normalize(lightDirection + viewDirection)), roughness);\\n}\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 lowerBound, upperBound;\\nuniform float contourTint;\\nuniform vec4 contourColor;\\nuniform sampler2D colormap;\\nuniform vec3 clipBounds[2];\\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\\nuniform float vertexColor;\\n\\nvarying float value, kill;\\nvarying vec3 worldCoordinate;\\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\\nvarying vec4 vColor;\\n\\nvoid main() {\\n  if (\\n    kill > 0.0 ||\\n    vColor.a == 0.0 ||\\n    outOfRange(clipBounds[0], clipBounds[1], worldCoordinate)\\n  ) discard;\\n\\n  vec3 N = normalize(surfaceNormal);\\n  vec3 V = normalize(eyeDirection);\\n  vec3 L = normalize(lightDirection);\\n\\n  if(gl_FrontFacing) {\\n    N = -N;\\n  }\\n\\n  float specular = max(beckmannSpecular(L, V, N, roughness), 0.);\\n  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\\n\\n  //decide how to interpolate color \\u2014 in vertex or in fragment\\n  vec4 surfaceColor =\\n    step(vertexColor, .5) * texture2D(colormap, vec2(value, value)) +\\n    step(.5, vertexColor) * vColor;\\n\\n  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\\n\\n  gl_FragColor = mix(litColor, contourColor, contourTint) * opacity;\\n}\\n\"]),s=i([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec4 uv;\\nattribute float f;\\n\\nuniform vec3 objectOffset;\\nuniform mat3 permutation;\\nuniform mat4 model, view, projection;\\nuniform float height, zOffset;\\nuniform sampler2D colormap;\\n\\nvarying float value, kill;\\nvarying vec3 worldCoordinate;\\nvarying vec2 planeCoordinate;\\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\\nvarying vec4 vColor;\\n\\nvoid main() {\\n  vec3 dataCoordinate = permutation * vec3(uv.xy, height);\\n  worldCoordinate = objectOffset + dataCoordinate;\\n  vec4 worldPosition = model * vec4(worldCoordinate, 1.0);\\n\\n  vec4 clipPosition = projection * view * worldPosition;\\n  clipPosition.z += zOffset;\\n\\n  gl_Position = clipPosition;\\n  value = f + objectOffset.z;\\n  kill = -1.0;\\n  planeCoordinate = uv.zw;\\n\\n  vColor = texture2D(colormap, vec2(value, value));\\n\\n  //Don't do lighting for contours\\n  surfaceNormal   = vec3(1,0,0);\\n  eyeDirection    = vec3(0,1,0);\\n  lightDirection  = vec3(0,0,1);\\n}\\n\"]),l=i([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec2 shape;\\nuniform vec3 clipBounds[2];\\nuniform float pickId;\\n\\nvarying float value, kill;\\nvarying vec3 worldCoordinate;\\nvarying vec2 planeCoordinate;\\nvarying vec3 surfaceNormal;\\n\\nvec2 splitFloat(float v) {\\n  float vh = 255.0 * v;\\n  float upper = floor(vh);\\n  float lower = fract(vh);\\n  return vec2(upper / 255.0, floor(lower * 16.0) / 16.0);\\n}\\n\\nvoid main() {\\n  if ((kill > 0.0) ||\\n      (outOfRange(clipBounds[0], clipBounds[1], worldCoordinate))) discard;\\n\\n  vec2 ux = splitFloat(planeCoordinate.x / shape.x);\\n  vec2 uy = splitFloat(planeCoordinate.y / shape.y);\\n  gl_FragColor = vec4(pickId, ux.x, uy.x, ux.y + (uy.y/16.0));\\n}\\n\"]);n.createShader=function(t){var e=r(t,a,o,null,[{name:\"uv\",type:\"vec4\"},{name:\"f\",type:\"vec3\"},{name:\"normal\",type:\"vec3\"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e.attributes.normal.location=2,e},n.createPickShader=function(t){var e=r(t,a,l,null,[{name:\"uv\",type:\"vec4\"},{name:\"f\",type:\"vec3\"},{name:\"normal\",type:\"vec3\"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e.attributes.normal.location=2,e},n.createContourShader=function(t){var e=r(t,s,o,null,[{name:\"uv\",type:\"vec4\"},{name:\"f\",type:\"float\"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e},n.createPickContourShader=function(t){var e=r(t,s,l,null,[{name:\"uv\",type:\"vec4\"},{name:\"f\",type:\"float\"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e}},{\"gl-shader\":335,glslify:350}],350:[function(t,e,n){arguments[4][257][0].apply(n,arguments)},{dup:257}],351:[function(t,e,n){\"use strict\";e.exports=function(t){var e=t.gl,n=v(e),r=b(e),s=_(e),l=x(e),c=i(e),u=a(e,[{buffer:c,size:4,stride:40,offset:0},{buffer:c,size:3,stride:40,offset:16},{buffer:c,size:3,stride:40,offset:28}]),h=i(e),d=a(e,[{buffer:h,size:4,stride:20,offset:0},{buffer:h,size:1,stride:20,offset:16}]),f=i(e),p=a(e,[{buffer:f,size:2,type:e.FLOAT}]),m=o(e,1,256,e.RGBA,e.UNSIGNED_BYTE);m.minFilter=e.LINEAR,m.magFilter=e.LINEAR;var g=new S(e,[0,0],[[0,0,0],[0,0,0]],n,r,c,u,m,s,l,h,d,f,p,[0,0,0]),y={levels:[[],[],[]]};for(var w in t)y[w]=t[w];return y.colormap=y.colormap||\"jet\",g.update(y),g};var r=t(\"bit-twiddle\"),i=t(\"gl-buffer\"),a=t(\"gl-vao\"),o=t(\"gl-texture2d\"),s=t(\"typedarray-pool\"),l=t(\"colormap\"),c=t(\"ndarray-ops\"),u=t(\"ndarray-pack\"),h=t(\"ndarray\"),d=t(\"surface-nets\"),f=t(\"gl-mat4/multiply\"),p=t(\"gl-mat4/invert\"),m=t(\"binary-search-bounds\"),g=t(\"ndarray-gradient\"),y=t(\"./lib/shaders\"),v=y.createShader,_=y.createContourShader,b=y.createPickShader,x=y.createPickContourShader,w=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],k=[[0,0],[0,1],[1,0],[1,1],[1,0],[0,1]],M=[[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]];function T(t,e,n,r,i){this.position=t,this.index=e,this.uv=n,this.level=r,this.dataCoordinate=i}function S(t,e,n,r,i,a,o,l,c,u,d,f,p,m,g){this.gl=t,this.shape=e,this.bounds=n,this.objectOffset=g,this.intensityBounds=[],this._shader=r,this._pickShader=i,this._coordinateBuffer=a,this._vao=o,this._colorMap=l,this._contourShader=c,this._contourPickShader=u,this._contourBuffer=d,this._contourVAO=f,this._contourOffsets=[[],[],[]],this._contourCounts=[[],[],[]],this._vertexCount=0,this._pickResult=new T([0,0,0],[0,0],[0,0],[0,0,0],[0,0,0]),this._dynamicBuffer=p,this._dynamicVAO=m,this._dynamicOffsets=[0,0,0],this._dynamicCounts=[0,0,0],this.contourWidth=[1,1,1],this.contourLevels=[[1],[1],[1]],this.contourTint=[0,0,0],this.contourColor=[[.5,.5,.5,1],[.5,.5,.5,1],[.5,.5,.5,1]],this.showContour=!0,this.showSurface=!0,this.enableHighlight=[!0,!0,!0],this.highlightColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.highlightTint=[1,1,1],this.highlightLevel=[-1,-1,-1],this.enableDynamic=[!0,!0,!0],this.dynamicLevel=[NaN,NaN,NaN],this.dynamicColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.dynamicTint=[1,1,1],this.dynamicWidth=[1,1,1],this.axesBounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.surfaceProject=[!1,!1,!1],this.contourProject=[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],this.colorBounds=[!1,!1],this._field=[h(s.mallocFloat(1024),[0,0]),h(s.mallocFloat(1024),[0,0]),h(s.mallocFloat(1024),[0,0])],this.pickId=1,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.snapToData=!1,this.pixelRatio=1,this.opacity=1,this.lightPosition=[10,1e4,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.vertexColor=0,this.dirty=!0}!function(){for(var t=0;t<3;++t){var e=M[t],n=(t+2)%3;e[(t+1)%3+0]=1,e[n+3]=1,e[t+6]=1}}();var A=S.prototype;A.genColormap=function(t,e){var n=!1,r=u([l({colormap:t,nshades:256,format:\"rgba\"}).map((function(t,r){var i=e?function(t,e){if(!e)return 1;if(!e.length)return 1;for(var n=0;n<e.length;++n){if(e.length<2)return 1;if(e[n][0]===t)return e[n][1];if(e[n][0]>t&&n>0){var r=(e[n][0]-t)/(e[n][0]-e[n-1][0]);return e[n][1]*(1-r)+r*e[n-1][1]}}return 1}(r/255,e):t[3];return i<1&&(n=!0),[t[0],t[1],t[2],255*i]}))]);return c.divseq(r,255),this.hasAlphaScale=n,r},A.isTransparent=function(){return this.opacity<1||this.hasAlphaScale},A.isOpaque=function(){return!this.isTransparent()},A.pickSlots=1,A.setPickBase=function(t){this.pickId=t};var L=[0,0,0],C={showSurface:!1,showContour:!1,projections:[w.slice(),w.slice(),w.slice()],clipBounds:[[[0,0,0],[0,0,0]],[[0,0,0],[0,0,0]],[[0,0,0],[0,0,0]]]};function E(t,e){var n,r,i,a=e.axes&&e.axes.lastCubeProps.axis||L,o=e.showSurface,s=e.showContour;for(n=0;n<3;++n)for(o=o||e.surfaceProject[n],r=0;r<3;++r)s=s||e.contourProject[n][r];for(n=0;n<3;++n){var l=C.projections[n];for(r=0;r<16;++r)l[r]=0;for(r=0;r<4;++r)l[5*r]=1;l[5*n]=0,l[12+n]=e.axesBounds[+(a[n]>0)][n],f(l,t.model,l);var c=C.clipBounds[n];for(i=0;i<2;++i)for(r=0;r<3;++r)c[i][r]=t.clipBounds[i][r];c[0][n]=-1e8,c[1][n]=1e8}return C.showSurface=o,C.showContour=s,C}var O={model:w,view:w,projection:w,inverseModel:w.slice(),lowerBound:[0,0,0],upperBound:[0,0,0],colorMap:0,clipBounds:[[0,0,0],[0,0,0]],height:0,contourTint:0,contourColor:[0,0,0,1],permutation:[1,0,0,0,1,0,0,0,1],zOffset:-1e-4,objectOffset:[0,0,0],kambient:1,kdiffuse:1,kspecular:1,lightPosition:[1e3,1e3,1e3],eyePosition:[0,0,0],roughness:1,fresnel:1,opacity:1,vertexColor:0},D=w.slice(),I=[1,0,0,0,1,0,0,0,1];function P(t,e){t=t||{};var n=this.gl;n.disable(n.CULL_FACE),this._colorMap.bind(0);var r=O;r.model=t.model||w,r.view=t.view||w,r.projection=t.projection||w,r.lowerBound=[this.bounds[0][0],this.bounds[0][1],this.colorBounds[0]||this.bounds[0][2]],r.upperBound=[this.bounds[1][0],this.bounds[1][1],this.colorBounds[1]||this.bounds[1][2]],r.objectOffset=this.objectOffset,r.contourColor=this.contourColor[0],r.inverseModel=p(r.inverseModel,r.model);for(var i=0;i<2;++i)for(var a=r.clipBounds[i],o=0;o<3;++o)a[o]=Math.min(Math.max(this.clipBounds[i][o],-1e8),1e8);r.kambient=this.ambientLight,r.kdiffuse=this.diffuseLight,r.kspecular=this.specularLight,r.roughness=this.roughness,r.fresnel=this.fresnel,r.opacity=this.opacity,r.height=0,r.permutation=I,r.vertexColor=this.vertexColor;var s=D;for(f(s,r.view,r.model),f(s,r.projection,s),p(s,s),i=0;i<3;++i)r.eyePosition[i]=s[12+i]/s[15];var l=s[15];for(i=0;i<3;++i)l+=this.lightPosition[i]*s[4*i+3];for(i=0;i<3;++i){var c=s[12+i];for(o=0;o<3;++o)c+=s[4*o+i]*this.lightPosition[o];r.lightPosition[i]=c/l}var u=E(r,this);if(u.showSurface){for(this._shader.bind(),this._shader.uniforms=r,this._vao.bind(),this.showSurface&&this._vertexCount&&this._vao.draw(n.TRIANGLES,this._vertexCount),i=0;i<3;++i)this.surfaceProject[i]&&this.vertexCount&&(this._shader.uniforms.model=u.projections[i],this._shader.uniforms.clipBounds=u.clipBounds[i],this._vao.draw(n.TRIANGLES,this._vertexCount));this._vao.unbind()}if(u.showContour){var h=this._contourShader;r.kambient=1,r.kdiffuse=0,r.kspecular=0,r.opacity=1,h.bind(),h.uniforms=r;var d=this._contourVAO;for(d.bind(),i=0;i<3;++i)for(h.uniforms.permutation=M[i],n.lineWidth(this.contourWidth[i]*this.pixelRatio),o=0;o<this.contourLevels[i].length;++o)o===this.highlightLevel[i]?(h.uniforms.contourColor=this.highlightColor[i],h.uniforms.contourTint=this.highlightTint[i]):0!==o&&o-1!==this.highlightLevel[i]||(h.uniforms.contourColor=this.contourColor[i],h.uniforms.contourTint=this.contourTint[i]),this._contourCounts[i][o]&&(h.uniforms.height=this.contourLevels[i][o],d.draw(n.LINES,this._contourCounts[i][o],this._contourOffsets[i][o]));for(i=0;i<3;++i)for(h.uniforms.model=u.projections[i],h.uniforms.clipBounds=u.clipBounds[i],o=0;o<3;++o)if(this.contourProject[i][o]){h.uniforms.permutation=M[o],n.lineWidth(this.contourWidth[o]*this.pixelRatio);for(var m=0;m<this.contourLevels[o].length;++m)m===this.highlightLevel[o]?(h.uniforms.contourColor=this.highlightColor[o],h.uniforms.contourTint=this.highlightTint[o]):0!==m&&m-1!==this.highlightLevel[o]||(h.uniforms.contourColor=this.contourColor[o],h.uniforms.contourTint=this.contourTint[o]),this._contourCounts[o][m]&&(h.uniforms.height=this.contourLevels[o][m],d.draw(n.LINES,this._contourCounts[o][m],this._contourOffsets[o][m]))}for(d.unbind(),(d=this._dynamicVAO).bind(),i=0;i<3;++i)if(0!==this._dynamicCounts[i])for(h.uniforms.model=r.model,h.uniforms.clipBounds=r.clipBounds,h.uniforms.permutation=M[i],n.lineWidth(this.dynamicWidth[i]*this.pixelRatio),h.uniforms.contourColor=this.dynamicColor[i],h.uniforms.contourTint=this.dynamicTint[i],h.uniforms.height=this.dynamicLevel[i],d.draw(n.LINES,this._dynamicCounts[i],this._dynamicOffsets[i]),o=0;o<3;++o)this.contourProject[o][i]&&(h.uniforms.model=u.projections[o],h.uniforms.clipBounds=u.clipBounds[o],d.draw(n.LINES,this._dynamicCounts[i],this._dynamicOffsets[i]));d.unbind()}}A.draw=function(t){return P.call(this,t,!1)},A.drawTransparent=function(t){return P.call(this,t,!0)};var R={model:w,view:w,projection:w,inverseModel:w,clipBounds:[[0,0,0],[0,0,0]],height:0,shape:[0,0],pickId:0,lowerBound:[0,0,0],upperBound:[0,0,0],zOffset:0,objectOffset:[0,0,0],permutation:[1,0,0,0,1,0,0,0,1],lightPosition:[0,0,0],eyePosition:[0,0,0]};function z(t,e){return Array.isArray(t)?[e(t[0]),e(t[1]),e(t[2])]:[e(t),e(t),e(t)]}function j(t){return Array.isArray(t)?3===t.length?[t[0],t[1],t[2],1]:[t[0],t[1],t[2],t[3]]:[0,0,0,1]}function F(t){if(Array.isArray(t)){if(Array.isArray(t))return[j(t[0]),j(t[1]),j(t[2])];var e=j(t);return[e.slice(),e.slice(),e.slice()]}}A.drawPick=function(t){t=t||{};var e=this.gl;e.disable(e.CULL_FACE);var n=R;n.model=t.model||w,n.view=t.view||w,n.projection=t.projection||w,n.shape=this._field[2].shape,n.pickId=this.pickId/255,n.lowerBound=this.bounds[0],n.upperBound=this.bounds[1],n.objectOffset=this.objectOffset,n.permutation=I;for(var r=0;r<2;++r)for(var i=n.clipBounds[r],a=0;a<3;++a)i[a]=Math.min(Math.max(this.clipBounds[r][a],-1e8),1e8);var o=E(n,this);if(o.showSurface){for(this._pickShader.bind(),this._pickShader.uniforms=n,this._vao.bind(),this._vao.draw(e.TRIANGLES,this._vertexCount),r=0;r<3;++r)this.surfaceProject[r]&&(this._pickShader.uniforms.model=o.projections[r],this._pickShader.uniforms.clipBounds=o.clipBounds[r],this._vao.draw(e.TRIANGLES,this._vertexCount));this._vao.unbind()}if(o.showContour){var s=this._contourPickShader;s.bind(),s.uniforms=n;var l=this._contourVAO;for(l.bind(),a=0;a<3;++a)for(e.lineWidth(this.contourWidth[a]*this.pixelRatio),s.uniforms.permutation=M[a],r=0;r<this.contourLevels[a].length;++r)this._contourCounts[a][r]&&(s.uniforms.height=this.contourLevels[a][r],l.draw(e.LINES,this._contourCounts[a][r],this._contourOffsets[a][r]));for(r=0;r<3;++r)for(s.uniforms.model=o.projections[r],s.uniforms.clipBounds=o.clipBounds[r],a=0;a<3;++a)if(this.contourProject[r][a]){s.uniforms.permutation=M[a],e.lineWidth(this.contourWidth[a]*this.pixelRatio);for(var c=0;c<this.contourLevels[a].length;++c)this._contourCounts[a][c]&&(s.uniforms.height=this.contourLevels[a][c],l.draw(e.LINES,this._contourCounts[a][c],this._contourOffsets[a][c]))}l.unbind()}},A.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=this._field[2].shape,n=this._pickResult,r=e[0]*(t.value[0]+(t.value[2]>>4)/16)/255,i=Math.floor(r),a=r-i,o=e[1]*(t.value[1]+(15&t.value[2])/16)/255,s=Math.floor(o),l=o-s;i+=1,s+=1;var c=n.position;c[0]=c[1]=c[2]=0;for(var u=0;u<2;++u)for(var h=u?a:1-a,d=0;d<2;++d)for(var f=i+u,p=s+d,g=h*(d?l:1-l),y=0;y<3;++y)c[y]+=this._field[y].get(f,p)*g;for(var v=this._pickResult.level,_=0;_<3;++_)if(v[_]=m.le(this.contourLevels[_],c[_]),v[_]<0)this.contourLevels[_].length>0&&(v[_]=0);else if(v[_]<this.contourLevels[_].length-1){var b=this.contourLevels[_][v[_]+1];Math.abs(this.contourLevels[_][v[_]]-c[_])>Math.abs(b-c[_])&&(v[_]+=1)}for(n.index[0]=a<.5?i:i+1,n.index[1]=l<.5?s:s+1,n.uv[0]=r/e[0],n.uv[1]=o/e[1],y=0;y<3;++y)n.dataCoordinate[y]=this._field[y].get(n.index[0],n.index[1]);return n},A.padField=function(t,e){var n=e.shape.slice(),r=t.shape.slice();c.assign(t.lo(1,1).hi(n[0],n[1]),e),c.assign(t.lo(1).hi(n[0],1),e.hi(n[0],1)),c.assign(t.lo(1,r[1]-1).hi(n[0],1),e.lo(0,n[1]-1).hi(n[0],1)),c.assign(t.lo(0,1).hi(1,n[1]),e.hi(1)),c.assign(t.lo(r[0]-1,1).hi(1,n[1]),e.lo(n[0]-1)),t.set(0,0,e.get(0,0)),t.set(0,r[1]-1,e.get(0,n[1]-1)),t.set(r[0]-1,0,e.get(n[0]-1,0)),t.set(r[0]-1,r[1]-1,e.get(n[0]-1,n[1]-1))},A.update=function(t){this.objectOffset=(t=t||{}).objectOffset||this.objectOffset,this.dirty=!0,\"contourWidth\"in t&&(this.contourWidth=z(t.contourWidth,Number)),\"showContour\"in t&&(this.showContour=z(t.showContour,Boolean)),\"showSurface\"in t&&(this.showSurface=!!t.showSurface),\"contourTint\"in t&&(this.contourTint=z(t.contourTint,Boolean)),\"contourColor\"in t&&(this.contourColor=F(t.contourColor)),\"contourProject\"in t&&(this.contourProject=z(t.contourProject,(function(t){return z(t,Boolean)}))),\"surfaceProject\"in t&&(this.surfaceProject=t.surfaceProject),\"dynamicColor\"in t&&(this.dynamicColor=F(t.dynamicColor)),\"dynamicTint\"in t&&(this.dynamicTint=z(t.dynamicTint,Number)),\"dynamicWidth\"in t&&(this.dynamicWidth=z(t.dynamicWidth,Number)),\"opacity\"in t&&(this.opacity=t.opacity),\"opacityscale\"in t&&(this.opacityscale=t.opacityscale),\"colorBounds\"in t&&(this.colorBounds=t.colorBounds),\"vertexColor\"in t&&(this.vertexColor=t.vertexColor?1:0),\"colormap\"in t&&this._colorMap.setPixels(this.genColormap(t.colormap,this.opacityscale));var e=t.field||t.coords&&t.coords[2]||null,n=!1;if(e||(e=this._field[2].shape[0]||this._field[2].shape[2]?this._field[2].lo(1,1).hi(this._field[2].shape[0]-2,this._field[2].shape[1]-2):this._field[2].hi(0,0)),\"field\"in t||\"coords\"in t){var i=(e.shape[0]+2)*(e.shape[1]+2);i>this._field[2].data.length&&(s.freeFloat(this._field[2].data),this._field[2].data=s.mallocFloat(r.nextPow2(i))),this._field[2]=h(this._field[2].data,[e.shape[0]+2,e.shape[1]+2]),this.padField(this._field[2],e),this.shape=e.shape.slice();for(var a=this.shape,o=0;o<2;++o)this._field[2].size>this._field[o].data.length&&(s.freeFloat(this._field[o].data),this._field[o].data=s.mallocFloat(this._field[2].size)),this._field[o]=h(this._field[o].data,[a[0]+2,a[1]+2]);if(t.coords){var l=t.coords;if(!Array.isArray(l)||3!==l.length)throw new Error(\"gl-surface: invalid coordinates for x/y\");for(o=0;o<2;++o){var c=l[o];for(y=0;y<2;++y)if(c.shape[y]!==a[y])throw new Error(\"gl-surface: coords have incorrect shape\");this.padField(this._field[o],c)}}else if(t.ticks){var u=t.ticks;if(!Array.isArray(u)||2!==u.length)throw new Error(\"gl-surface: invalid ticks\");for(o=0;o<2;++o){var f=u[o];if((Array.isArray(f)||f.length)&&(f=h(f)),f.shape[0]!==a[o])throw new Error(\"gl-surface: invalid tick length\");var p=h(f.data,a);p.stride[o]=f.stride[0],p.stride[1^o]=0,this.padField(this._field[o],p)}}else{for(o=0;o<2;++o){var m=[0,0];m[o]=1,this._field[o]=h(this._field[o].data,[a[0]+2,a[1]+2],m,0)}this._field[0].set(0,0,0);for(var y=0;y<a[0];++y)this._field[0].set(y+1,0,y);for(this._field[0].set(a[0]+1,0,a[0]-1),this._field[1].set(0,0,0),y=0;y<a[1];++y)this._field[1].set(0,y+1,y);this._field[1].set(0,a[1]+1,a[1]-1)}var v=this._field,_=h(s.mallocFloat(3*v[2].size*2),[3,a[0]+2,a[1]+2,2]);for(o=0;o<3;++o)g(_.pick(o),v[o],\"mirror\");var b=h(s.mallocFloat(3*v[2].size),[a[0]+2,a[1]+2,3]);for(o=0;o<a[0]+2;++o)for(y=0;y<a[1]+2;++y){var x=_.get(0,o,y,0),w=_.get(0,o,y,1),M=_.get(1,o,y,0),T=_.get(1,o,y,1),S=_.get(2,o,y,0),A=_.get(2,o,y,1),L=M*A-T*S,C=S*w-A*x,E=x*T-w*M,O=Math.sqrt(L*L+C*C+E*E);O<1e-8?(O=Math.max(Math.abs(L),Math.abs(C),Math.abs(E)))<1e-8?(E=1,C=L=0,O=1):O=1/O:O=1/Math.sqrt(O),b.set(o,y,0,L*O),b.set(o,y,1,C*O),b.set(o,y,2,E*O)}s.free(_.data);var D=[1/0,1/0,1/0],I=[-1/0,-1/0,-1/0],P=1/0,R=-1/0,j=s.mallocFloat(r.nextPow2((a[0]-1)*(a[1]-1)*6*10)),N=0,B=0;for(o=0;o<a[0]-1;++o)t:for(y=0;y<a[1]-1;++y){for(var Y=0;Y<2;++Y)for(var H=0;H<2;++H)for(var V=0;V<3;++V){var U=this._field[V].get(1+o+Y,1+y+H);if(isNaN(U)||!isFinite(U))continue t}for(V=0;V<6;++V){var W=o+k[V][0],q=y+k[V][1],G=this._field[0].get(W+1,q+1),X=this._field[1].get(W+1,q+1);U=this._field[2].get(W+1,q+1),L=b.get(W+1,q+1,0),C=b.get(W+1,q+1,1),E=b.get(W+1,q+1,2),t.intensity&&(Z=t.intensity.get(W,q));var Z=t.intensity?t.intensity.get(W,q):U+this.objectOffset[2];j[N++]=W,j[N++]=q,j[N++]=G,j[N++]=X,j[N++]=U,j[N++]=0,j[N++]=Z,j[N++]=L,j[N++]=C,j[N++]=E,D[0]=Math.min(D[0],G+this.objectOffset[0]),D[1]=Math.min(D[1],X+this.objectOffset[1]),D[2]=Math.min(D[2],U+this.objectOffset[2]),P=Math.min(P,Z),I[0]=Math.max(I[0],G+this.objectOffset[0]),I[1]=Math.max(I[1],X+this.objectOffset[1]),I[2]=Math.max(I[2],U+this.objectOffset[2]),R=Math.max(R,Z),B+=1}}for(t.intensityBounds&&(P=+t.intensityBounds[0],R=+t.intensityBounds[1]),o=6;o<N;o+=10)j[o]=(j[o]-P)/(R-P);this._vertexCount=B,this._coordinateBuffer.update(j.subarray(0,N)),s.freeFloat(j),s.free(b.data),this.bounds=[D,I],this.intensity=t.intensity||this._field[2],this.intensityBounds[0]===P&&this.intensityBounds[1]===R||(n=!0),this.intensityBounds=[P,R]}if(\"levels\"in t){var J=t.levels;for(J=Array.isArray(J[0])?J.slice():[[],[],J],o=0;o<3;++o)J[o]=J[o].slice(),J[o].sort((function(t,e){return t-e}));for(o=0;o<3;++o)for(y=0;y<J[o].length;++y)J[o][y]-=this.objectOffset[o];t:for(o=0;o<3;++o){if(J[o].length!==this.contourLevels[o].length){n=!0;break}for(y=0;y<J[o].length;++y)if(J[o][y]!==this.contourLevels[o][y]){n=!0;break t}}this.contourLevels=J}if(n){v=this._field,a=this.shape;for(var K=[],$=0;$<3;++$){var Q=this.contourLevels[$],tt=[],et=[],nt=[0,0,0];for(o=0;o<Q.length;++o){var rt=d(this._field[$],Q[o]);tt.push(K.length/5|0),B=0;t:for(y=0;y<rt.cells.length;++y){var it=rt.cells[y];for(V=0;V<2;++V){var at=rt.positions[it[V]],ot=at[0],st=0|Math.floor(ot),lt=ot-st,ct=at[1],ut=0|Math.floor(ct),ht=ct-ut,dt=!1;e:for(var ft=0;ft<3;++ft){nt[ft]=0;var pt=($+ft+1)%3;for(Y=0;Y<2;++Y){var mt=Y?lt:1-lt;for(W=0|Math.min(Math.max(st+Y,0),a[0]),H=0;H<2;++H){var gt=H?ht:1-ht;if(q=0|Math.min(Math.max(ut+H,0),a[1]),U=ft<2?this._field[pt].get(W,q):(this.intensity.get(W,q)-this.intensityBounds[0])/(this.intensityBounds[1]-this.intensityBounds[0]),!isFinite(U)||isNaN(U)){dt=!0;break e}nt[ft]+=mt*gt*U}}}if(dt){if(V>0){for(var yt=0;yt<5;++yt)K.pop();B-=1}continue t}K.push(nt[0],nt[1],at[0],at[1],nt[2]),B+=1}}et.push(B)}this._contourOffsets[$]=tt,this._contourCounts[$]=et}var vt=s.mallocFloat(K.length);for(o=0;o<K.length;++o)vt[o]=K[o];this._contourBuffer.update(vt),s.freeFloat(vt)}},A.dispose=function(){this._shader.dispose(),this._vao.dispose(),this._coordinateBuffer.dispose(),this._colorMap.dispose(),this._contourBuffer.dispose(),this._contourVAO.dispose(),this._contourShader.dispose(),this._contourPickShader.dispose(),this._dynamicBuffer.dispose(),this._dynamicVAO.dispose();for(var t=0;t<3;++t)s.freeFloat(this._field[t].data)},A.highlight=function(t){var e,n;if(!t)return this._dynamicCounts=[0,0,0],this.dyanamicLevel=[NaN,NaN,NaN],void(this.highlightLevel=[-1,-1,-1]);for(e=0;e<3;++e)this.highlightLevel[e]=this.enableHighlight[e]?t.level[e]:-1;for(n=this.snapToData?t.dataCoordinate:t.position,e=0;e<3;++e)n[e]-=this.objectOffset[e];if(this.enableDynamic[0]&&n[0]!==this.dynamicLevel[0]||this.enableDynamic[1]&&n[1]!==this.dynamicLevel[1]||this.enableDynamic[2]&&n[2]!==this.dynamicLevel[2]){for(var r=0,i=this.shape,a=s.mallocFloat(12*i[0]*i[1]),o=0;o<3;++o)if(this.enableDynamic[o]){this.dynamicLevel[o]=n[o];var l=this._field[(o+1)%3],c=this._field[(o+2)%3],u=d(this._field[o],n[o]),h=u.cells,f=u.positions;for(this._dynamicOffsets[o]=r,e=0;e<h.length;++e)for(var p=h[e],m=0;m<2;++m){var g=f[p[m]],y=+g[0],v=0|y,_=0|Math.min(v+1,i[0]),b=y-v,x=1-b,w=+g[1],k=0|w,M=0|Math.min(k+1,i[1]),T=w-k,S=1-T,A=x*S,L=x*T,C=b*S,E=b*T,O=A*l.get(v,k)+L*l.get(v,M)+C*l.get(_,k)+E*l.get(_,M),D=A*c.get(v,k)+L*c.get(v,M)+C*c.get(_,k)+E*c.get(_,M);if(isNaN(O)||isNaN(D)){m&&(r-=1);break}a[2*r+0]=O,a[2*r+1]=D,r+=1}this._dynamicCounts[o]=r-this._dynamicOffsets[o]}else this.dynamicLevel[o]=NaN,this._dynamicCounts[o]=0;this._dynamicBuffer.update(a.subarray(0,2*r)),s.freeFloat(a)}}},{\"./lib/shaders\":349,\"binary-search-bounds\":96,\"bit-twiddle\":97,colormap:131,\"gl-buffer\":259,\"gl-mat4/invert\":293,\"gl-mat4/multiply\":295,\"gl-texture2d\":353,\"gl-vao\":358,ndarray:495,\"ndarray-gradient\":488,\"ndarray-ops\":490,\"ndarray-pack\":491,\"surface-nets\":570,\"typedarray-pool\":595}],352:[function(t,e,n){\"use strict\";var r=t(\"css-font\"),i=t(\"pick-by-alias\"),a=t(\"regl\"),o=t(\"gl-util/context\"),s=t(\"es6-weak-map\"),l=t(\"color-normalize\"),c=t(\"font-atlas\"),u=t(\"typedarray-pool\"),h=t(\"parse-rect\"),d=t(\"is-plain-obj\"),f=t(\"parse-unit\"),p=t(\"to-px\"),m=t(\"detect-kerning\"),g=t(\"object-assign\"),y=t(\"font-measure\"),v=t(\"flatten-vertex-data\"),_=t(\"bit-twiddle\").nextPow2,b=new s,x=!1;if(document.body){var w=document.body.appendChild(document.createElement(\"div\"));w.style.font=\"italic small-caps bold condensed 16px/2 cursive\",getComputedStyle(w).fontStretch&&(x=!0),document.body.removeChild(w)}var k=function(t){this.gl=function(t){return\"function\"==typeof t&&t._gl&&t.prop&&t.texture&&t.buffer}(t)?(t={regl:t}).regl._gl:o(t),this.shader=b.get(this.gl),this.regl=this.shader?this.shader.regl:t.regl||a({gl:this.gl}),this.charBuffer=this.regl.buffer({type:\"uint8\",usage:\"stream\"}),this.sizeBuffer=this.regl.buffer({type:\"float\",usage:\"stream\"}),this.shader||(this.shader=this.createShader(),b.set(this.gl,this.shader)),this.batch=[],this.fontSize=[],this.font=[],this.fontAtlas=[],this.draw=this.shader.draw.bind(this),this.render=function(){this.regl._refresh(),this.draw(this.batch)},this.canvas=this.gl.canvas,this.update(d(t)?t:{})};k.prototype.createShader=function(){var t=this.regl,e=t({blend:{enable:!0,color:[0,0,0,1],func:{srcRGB:\"src alpha\",dstRGB:\"one minus src alpha\",srcAlpha:\"one minus dst alpha\",dstAlpha:\"one\"}},stencil:{enable:!1},depth:{enable:!1},count:t.prop(\"count\"),offset:t.prop(\"offset\"),attributes:{charOffset:{offset:4,stride:8,buffer:t.this(\"sizeBuffer\")},width:{offset:0,stride:8,buffer:t.this(\"sizeBuffer\")},char:t.this(\"charBuffer\"),position:t.this(\"position\")},uniforms:{atlasSize:function(t,e){return[e.atlas.width,e.atlas.height]},atlasDim:function(t,e){return[e.atlas.cols,e.atlas.rows]},atlas:function(t,e){return e.atlas.texture},charStep:function(t,e){return e.atlas.step},em:function(t,e){return e.atlas.em},color:t.prop(\"color\"),opacity:t.prop(\"opacity\"),viewport:t.this(\"viewportArray\"),scale:t.this(\"scale\"),align:t.prop(\"align\"),baseline:t.prop(\"baseline\"),translate:t.this(\"translate\"),positionOffset:t.prop(\"positionOffset\")},primitive:\"points\",viewport:t.this(\"viewport\"),vert:\"\\n\\t\\t\\tprecision highp float;\\n\\t\\t\\tattribute float width, charOffset, char;\\n\\t\\t\\tattribute vec2 position;\\n\\t\\t\\tuniform float fontSize, charStep, em, align, baseline;\\n\\t\\t\\tuniform vec4 viewport;\\n\\t\\t\\tuniform vec4 color;\\n\\t\\t\\tuniform vec2 atlasSize, atlasDim, scale, translate, positionOffset;\\n\\t\\t\\tvarying vec2 charCoord, charId;\\n\\t\\t\\tvarying float charWidth;\\n\\t\\t\\tvarying vec4 fontColor;\\n\\t\\t\\tvoid main () {\\n\\t\\t\\t\\t\"+(k.normalViewport?\"\":\"vec2 positionOffset = vec2(positionOffset.x,- positionOffset.y);\")+\"\\n\\n\\t\\t\\t\\tvec2 offset = floor(em * (vec2(align + charOffset, baseline)\\n\\t\\t\\t\\t\\t+ positionOffset))\\n\\t\\t\\t\\t\\t/ (viewport.zw * scale.xy);\\n\\n\\t\\t\\t\\tvec2 position = (position + translate) * scale;\\n\\t\\t\\t\\tposition += offset * scale;\\n\\n\\t\\t\\t\\t\"+(k.normalViewport?\"position.y = 1. - position.y;\":\"\")+\"\\n\\n\\t\\t\\t\\tcharCoord = position * viewport.zw + viewport.xy;\\n\\n\\t\\t\\t\\tgl_Position = vec4(position * 2. - 1., 0, 1);\\n\\n\\t\\t\\t\\tgl_PointSize = charStep;\\n\\n\\t\\t\\t\\tcharId.x = mod(char, atlasDim.x);\\n\\t\\t\\t\\tcharId.y = floor(char / atlasDim.x);\\n\\n\\t\\t\\t\\tcharWidth = width * em;\\n\\n\\t\\t\\t\\tfontColor = color / 255.;\\n\\t\\t\\t}\",frag:\"\\n\\t\\t\\tprecision highp float;\\n\\t\\t\\tuniform sampler2D atlas;\\n\\t\\t\\tuniform float fontSize, charStep, opacity;\\n\\t\\t\\tuniform vec2 atlasSize;\\n\\t\\t\\tuniform vec4 viewport;\\n\\t\\t\\tvarying vec4 fontColor;\\n\\t\\t\\tvarying vec2 charCoord, charId;\\n\\t\\t\\tvarying float charWidth;\\n\\n\\t\\t\\tfloat lightness(vec4 color) {\\n\\t\\t\\t\\treturn color.r * 0.299 + color.g * 0.587 + color.b * 0.114;\\n\\t\\t\\t}\\n\\n\\t\\t\\tvoid main () {\\n\\t\\t\\t\\tvec2 uv = gl_FragCoord.xy - charCoord + charStep * .5;\\n\\t\\t\\t\\tfloat halfCharStep = floor(charStep * .5 + .5);\\n\\n\\t\\t\\t\\t// invert y and shift by 1px (FF expecially needs that)\\n\\t\\t\\t\\tuv.y = charStep - uv.y;\\n\\n\\t\\t\\t\\t// ignore points outside of character bounding box\\n\\t\\t\\t\\tfloat halfCharWidth = ceil(charWidth * .5);\\n\\t\\t\\t\\tif (floor(uv.x) > halfCharStep + halfCharWidth ||\\n\\t\\t\\t\\t\\tfloor(uv.x) < halfCharStep - halfCharWidth) return;\\n\\n\\t\\t\\t\\tuv += charId * charStep;\\n\\t\\t\\t\\tuv = uv / atlasSize;\\n\\n\\t\\t\\t\\tvec4 color = fontColor;\\n\\t\\t\\t\\tvec4 mask = texture2D(atlas, uv);\\n\\n\\t\\t\\t\\tfloat maskY = lightness(mask);\\n\\t\\t\\t\\t// float colorY = lightness(color);\\n\\t\\t\\t\\tcolor.a *= maskY;\\n\\t\\t\\t\\tcolor.a *= opacity;\\n\\n\\t\\t\\t\\t// color.a += .1;\\n\\n\\t\\t\\t\\t// antialiasing, see yiq color space y-channel formula\\n\\t\\t\\t\\t// color.rgb += (1. - color.rgb) * (1. - mask.rgb);\\n\\n\\t\\t\\t\\tgl_FragColor = color;\\n\\t\\t\\t}\"});return{regl:t,draw:e,atlas:{}}},k.prototype.update=function(t){var e=this;if(\"string\"==typeof t)t={text:t};else if(!t)return;null!=(t=i(t,{position:\"position positions coord coords coordinates\",font:\"font fontFace fontface typeface cssFont css-font family fontFamily\",fontSize:\"fontSize fontsize size font-size\",text:\"text texts chars characters value values symbols\",align:\"align alignment textAlign textbaseline\",baseline:\"baseline textBaseline textbaseline\",direction:\"dir direction textDirection\",color:\"color colour fill fill-color fillColor textColor textcolor\",kerning:\"kerning kern\",range:\"range dataBox\",viewport:\"vp viewport viewBox viewbox viewPort\",opacity:\"opacity alpha transparency visible visibility opaque\",offset:\"offset positionOffset padding shift indent indentation\"},!0)).opacity&&(this.opacity=Array.isArray(t.opacity)?t.opacity.map((function(t){return parseFloat(t)})):parseFloat(t.opacity)),null!=t.viewport&&(this.viewport=h(t.viewport),k.normalViewport&&(this.viewport.y=this.canvas.height-this.viewport.y-this.viewport.height),this.viewportArray=[this.viewport.x,this.viewport.y,this.viewport.width,this.viewport.height]),null==this.viewport&&(this.viewport={x:0,y:0,width:this.gl.drawingBufferWidth,height:this.gl.drawingBufferHeight},this.viewportArray=[this.viewport.x,this.viewport.y,this.viewport.width,this.viewport.height]),null!=t.kerning&&(this.kerning=t.kerning),null!=t.offset&&(\"number\"==typeof t.offset&&(t.offset=[t.offset,0]),this.positionOffset=v(t.offset)),t.direction&&(this.direction=t.direction),t.range&&(this.range=t.range,this.scale=[1/(t.range[2]-t.range[0]),1/(t.range[3]-t.range[1])],this.translate=[-t.range[0],-t.range[1]]),t.scale&&(this.scale=t.scale),t.translate&&(this.translate=t.translate),this.scale||(this.scale=[1/this.viewport.width,1/this.viewport.height]),this.translate||(this.translate=[0,0]),this.font.length||t.font||(t.font=k.baseFontSize+\"px sans-serif\");var n,a=!1,o=!1;if(t.font&&(Array.isArray(t.font)?t.font:[t.font]).forEach((function(t,n){if(\"string\"==typeof t)try{t=r.parse(t)}catch(h){t=r.parse(k.baseFontSize+\"px \"+t)}else t=r.parse(r.stringify(t));var i=r.stringify({size:k.baseFontSize,family:t.family,stretch:x?t.stretch:void 0,variant:t.variant,weight:t.weight,style:t.style}),s=f(t.size),l=Math.round(s[0]*p(s[1]));if(l!==e.fontSize[n]&&(o=!0,e.fontSize[n]=l),!(e.font[n]&&i==e.font[n].baseString||(a=!0,e.font[n]=k.fonts[i],e.font[n]))){var c=t.family.join(\", \"),u=[t.style];t.style!=t.variant&&u.push(t.variant),t.variant!=t.weight&&u.push(t.weight),x&&t.weight!=t.stretch&&u.push(t.stretch),e.font[n]={baseString:i,family:c,weight:t.weight,stretch:t.stretch,style:t.style,variant:t.variant,width:{},kerning:{},metrics:y(c,{origin:\"top\",fontSize:k.baseFontSize,fontStyle:u.join(\" \")})},k.fonts[i]=e.font[n]}})),(a||o)&&this.font.forEach((function(n,i){var a=r.stringify({size:e.fontSize[i],family:n.family,stretch:x?n.stretch:void 0,variant:n.variant,weight:n.weight,style:n.style});e.fontAtlas[i]=e.shader.atlas[a],e.fontAtlas[i]||(e.shader.atlas[a]=e.fontAtlas[i]={fontString:a,step:2*Math.ceil(e.fontSize[i]*n.metrics.bottom*.5),em:e.fontSize[i],cols:0,rows:0,height:0,width:0,chars:[],ids:{},texture:e.regl.texture()}),null==t.text&&(t.text=e.text)})),\"string\"==typeof t.text&&t.position&&t.position.length>2){for(var s=Array(.5*t.position.length),d=0;d<s.length;d++)s[d]=t.text;t.text=s}if(null!=t.text||a){if(this.textOffsets=[0],Array.isArray(t.text)){this.count=t.text[0].length,this.counts=[this.count];for(var b=1;b<t.text.length;b++)this.textOffsets[b]=this.textOffsets[b-1]+t.text[b-1].length,this.count+=t.text[b].length,this.counts.push(t.text[b].length);this.text=t.text.join(\"\")}else this.text=t.text,this.count=this.text.length,this.counts=[this.count];n=[],this.font.forEach((function(t,r){k.atlasContext.font=t.baseString;for(var i=e.fontAtlas[r],a=0;a<e.text.length;a++){var o=e.text.charAt(a);if(null==i.ids[o]&&(i.ids[o]=i.chars.length,i.chars.push(o),n.push(o)),null==t.width[o]&&(t.width[o]=k.atlasContext.measureText(o).width/k.baseFontSize,e.kerning)){var s=[];for(var l in t.width)s.push(l+o,o+l);g(t.kerning,m(t.family,{pairs:s}))}}}))}if(t.position)if(t.position.length>2){for(var w=!t.position[0].length,M=u.mallocFloat(2*this.count),T=0,S=0;T<this.counts.length;T++){var A=this.counts[T];if(w)for(var L=0;L<A;L++)M[S++]=t.position[2*T],M[S++]=t.position[2*T+1];else for(var C=0;C<A;C++)M[S++]=t.position[T][0],M[S++]=t.position[T][1]}this.position.call?this.position({type:\"float\",data:M}):this.position=this.regl.buffer({type:\"float\",data:M}),u.freeFloat(M)}else this.position.destroy&&this.position.destroy(),this.position={constant:t.position};if(t.text||a){var E=u.mallocUint8(this.count),O=u.mallocFloat(2*this.count);this.textWidth=[];for(var D=0,I=0;D<this.counts.length;D++){for(var P=this.counts[D],R=this.font[D]||this.font[0],z=this.fontAtlas[D]||this.fontAtlas[0],j=0;j<P;j++){var F=this.text.charAt(I),N=this.text.charAt(I-1);if(E[I]=z.ids[F],O[2*I]=R.width[F],j){var B=O[2*I-1]+.5*O[2*I-2]+.5*O[2*I];if(this.kerning){var Y=R.kerning[N+F];Y&&(B+=.001*Y)}O[2*I+1]=B}else O[2*I+1]=.5*O[2*I];I++}this.textWidth.push(O.length?.5*O[2*I-2]+O[2*I-1]:0)}t.align||(t.align=this.align),this.charBuffer({data:E,type:\"uint8\",usage:\"stream\"}),this.sizeBuffer({data:O,type:\"float\",usage:\"stream\"}),u.freeUint8(E),u.freeFloat(O),n.length&&this.font.forEach((function(t,n){var r=e.fontAtlas[n],i=r.step,a=Math.floor(k.maxAtlasSize/i),o=Math.min(a,r.chars.length),s=Math.ceil(r.chars.length/o),l=_(o*i),u=_(s*i);r.width=l,r.height=u,r.rows=s,r.cols=o,r.em&&r.texture({data:c({canvas:k.atlasCanvas,font:r.fontString,chars:r.chars,shape:[l,u],step:[i,i]})})}))}if(t.align&&(this.align=t.align,this.alignOffset=this.textWidth.map((function(t,n){var r=Array.isArray(e.align)?e.align.length>1?e.align[n]:e.align[0]:e.align;if(\"number\"==typeof r)return r;switch(r){case\"right\":case\"end\":return-t;case\"center\":case\"centre\":case\"middle\":return.5*-t}return 0}))),null==this.baseline&&null==t.baseline&&(t.baseline=0),null!=t.baseline&&(this.baseline=t.baseline,Array.isArray(this.baseline)||(this.baseline=[this.baseline]),this.baselineOffset=this.baseline.map((function(t,n){var r=(e.font[n]||e.font[0]).metrics,i=0;return i+=.5*r.bottom,i+=\"number\"==typeof t?t-r.baseline:-r[t],k.normalViewport||(i*=-1),i}))),null!=t.color)if(t.color||(t.color=\"transparent\"),\"string\"!=typeof t.color&&isNaN(t.color)){var H;if(\"number\"==typeof t.color[0]&&t.color.length>this.counts.length){var V=t.color.length;H=u.mallocUint8(V);for(var U=(t.color.subarray||t.color.slice).bind(t.color),W=0;W<V;W+=4)H.set(l(U(W,W+4),\"uint8\"),W)}else{var q=t.color.length;H=u.mallocUint8(4*q);for(var G=0;G<q;G++)H.set(l(t.color[G]||0,\"uint8\"),4*G)}this.color=H}else this.color=l(t.color,\"uint8\");if(t.position||t.text||t.color||t.baseline||t.align||t.font||t.offset||t.opacity)if(this.color.length>4||this.baselineOffset.length>1||this.align&&this.align.length>1||this.fontAtlas.length>1||this.positionOffset.length>2){var X=Math.max(.5*this.position.length||0,.25*this.color.length||0,this.baselineOffset.length||0,this.alignOffset.length||0,this.font.length||0,this.opacity.length||0,.5*this.positionOffset.length||0);this.batch=Array(X);for(var Z=0;Z<this.batch.length;Z++)this.batch[Z]={count:this.counts.length>1?this.counts[Z]:this.counts[0],offset:this.textOffsets.length>1?this.textOffsets[Z]:this.textOffsets[0],color:this.color?this.color.length<=4?this.color:this.color.subarray(4*Z,4*Z+4):[0,0,0,255],opacity:Array.isArray(this.opacity)?this.opacity[Z]:this.opacity,baseline:null!=this.baselineOffset[Z]?this.baselineOffset[Z]:this.baselineOffset[0],align:this.align?null!=this.alignOffset[Z]?this.alignOffset[Z]:this.alignOffset[0]:0,atlas:this.fontAtlas[Z]||this.fontAtlas[0],positionOffset:this.positionOffset.length>2?this.positionOffset.subarray(2*Z,2*Z+2):this.positionOffset}}else this.batch=this.count?[{count:this.count,offset:0,color:this.color||[0,0,0,255],opacity:Array.isArray(this.opacity)?this.opacity[0]:this.opacity,baseline:this.baselineOffset[0],align:this.alignOffset?this.alignOffset[0]:0,atlas:this.fontAtlas[0],positionOffset:this.positionOffset}]:[]},k.prototype.destroy=function(){},k.prototype.kerning=!0,k.prototype.position={constant:new Float32Array(2)},k.prototype.translate=null,k.prototype.scale=null,k.prototype.font=null,k.prototype.text=\"\",k.prototype.positionOffset=[0,0],k.prototype.opacity=1,k.prototype.color=new Uint8Array([0,0,0,255]),k.prototype.alignOffset=[0,0],k.normalViewport=!1,k.maxAtlasSize=1024,k.atlasCanvas=document.createElement(\"canvas\"),k.atlasContext=k.atlasCanvas.getContext(\"2d\",{alpha:!1}),k.baseFontSize=64,k.fonts={},e.exports=k},{\"bit-twiddle\":97,\"color-normalize\":125,\"css-font\":144,\"detect-kerning\":172,\"es6-weak-map\":233,\"flatten-vertex-data\":244,\"font-atlas\":245,\"font-measure\":246,\"gl-util/context\":354,\"is-plain-obj\":469,\"object-assign\":499,\"parse-rect\":504,\"parse-unit\":506,\"pick-by-alias\":511,regl:540,\"to-px\":578,\"typedarray-pool\":595}],353:[function(t,e,n){\"use strict\";var r=t(\"ndarray\"),i=t(\"ndarray-ops\"),a=t(\"typedarray-pool\");e.exports=function(t){if(arguments.length<=1)throw new Error(\"gl-texture2d: Missing arguments for texture2d constructor\");if(o||c(t),\"number\"==typeof arguments[1])return y(t,arguments[1],arguments[2],arguments[3]||t.RGBA,arguments[4]||t.UNSIGNED_BYTE);if(Array.isArray(arguments[1]))return y(t,0|arguments[1][0],0|arguments[1][1],arguments[2]||t.RGBA,arguments[3]||t.UNSIGNED_BYTE);if(\"object\"==typeof arguments[1]){var e=arguments[1],n=u(e)?e:e.raw;if(n)return v(t,n,0|e.width,0|e.height,arguments[2]||t.RGBA,arguments[3]||t.UNSIGNED_BYTE);if(e.shape&&e.data&&e.stride)return _(t,e)}throw new Error(\"gl-texture2d: Invalid arguments for texture2d constructor\")};var o=null,s=null,l=null;function c(t){o=[t.LINEAR,t.NEAREST_MIPMAP_LINEAR,t.LINEAR_MIPMAP_NEAREST,t.LINEAR_MIPMAP_NEAREST],s=[t.NEAREST,t.LINEAR,t.NEAREST_MIPMAP_NEAREST,t.NEAREST_MIPMAP_LINEAR,t.LINEAR_MIPMAP_NEAREST,t.LINEAR_MIPMAP_LINEAR],l=[t.REPEAT,t.CLAMP_TO_EDGE,t.MIRRORED_REPEAT]}function u(t){return\"undefined\"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||\"undefined\"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||\"undefined\"!=typeof HTMLVideoElement&&t instanceof HTMLVideoElement||\"undefined\"!=typeof ImageData&&t instanceof ImageData}var h=function(t,e){i.muls(t,e,255)};function d(t,e,n){var r=t.gl,i=r.getParameter(r.MAX_TEXTURE_SIZE);if(e<0||e>i||n<0||n>i)throw new Error(\"gl-texture2d: Invalid texture size\");return t._shape=[e,n],t.bind(),r.texImage2D(r.TEXTURE_2D,0,t.format,e,n,0,t.format,t.type,null),t._mipLevels=[0],t}function f(t,e,n,r,i,a){this.gl=t,this.handle=e,this.format=i,this.type=a,this._shape=[n,r],this._mipLevels=[0],this._magFilter=t.NEAREST,this._minFilter=t.NEAREST,this._wrapS=t.CLAMP_TO_EDGE,this._wrapT=t.CLAMP_TO_EDGE,this._anisoSamples=1;var o=this,s=[this._wrapS,this._wrapT];Object.defineProperties(s,[{get:function(){return o._wrapS},set:function(t){return o.wrapS=t}},{get:function(){return o._wrapT},set:function(t){return o.wrapT=t}}]),this._wrapVector=s;var l=[this._shape[0],this._shape[1]];Object.defineProperties(l,[{get:function(){return o._shape[0]},set:function(t){return o.width=t}},{get:function(){return o._shape[1]},set:function(t){return o.height=t}}]),this._shapeVector=l}var p=f.prototype;function m(t,e){return 3===t.length?1===e[2]&&e[1]===t[0]*t[2]&&e[0]===t[2]:1===e[0]&&e[1]===t[0]}function g(t){var e=t.createTexture();return t.bindTexture(t.TEXTURE_2D,e),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),e}function y(t,e,n,r,i){var a=t.getParameter(t.MAX_TEXTURE_SIZE);if(e<0||e>a||n<0||n>a)throw new Error(\"gl-texture2d: Invalid texture shape\");if(i===t.FLOAT&&!t.getExtension(\"OES_texture_float\"))throw new Error(\"gl-texture2d: Floating point textures not supported on this platform\");var o=g(t);return t.texImage2D(t.TEXTURE_2D,0,r,e,n,0,r,i,null),new f(t,o,e,n,r,i)}function v(t,e,n,r,i,a){var o=g(t);return t.texImage2D(t.TEXTURE_2D,0,i,i,a,e),new f(t,o,n,r,i,a)}function _(t,e){var n=e.dtype,o=e.shape.slice(),s=t.getParameter(t.MAX_TEXTURE_SIZE);if(o[0]<0||o[0]>s||o[1]<0||o[1]>s)throw new Error(\"gl-texture2d: Invalid texture size\");var l=m(o,e.stride.slice()),c=0;\"float32\"===n?c=t.FLOAT:\"float64\"===n?(c=t.FLOAT,l=!1,n=\"float32\"):\"uint8\"===n?c=t.UNSIGNED_BYTE:(c=t.UNSIGNED_BYTE,l=!1,n=\"uint8\");var u,d,p=0;if(2===o.length)p=t.LUMINANCE,e=r(e.data,o=[o[0],o[1],1],[e.stride[0],e.stride[1],1],e.offset);else{if(3!==o.length)throw new Error(\"gl-texture2d: Invalid shape for texture\");if(1===o[2])p=t.ALPHA;else if(2===o[2])p=t.LUMINANCE_ALPHA;else if(3===o[2])p=t.RGB;else{if(4!==o[2])throw new Error(\"gl-texture2d: Invalid shape for pixel coords\");p=t.RGBA}}c!==t.FLOAT||t.getExtension(\"OES_texture_float\")||(c=t.UNSIGNED_BYTE,l=!1);var y=e.size;if(l)u=0===e.offset&&e.data.length===y?e.data:e.data.subarray(e.offset,e.offset+y);else{var v=[o[2],o[2]*o[0],1];d=a.malloc(y,n);var _=r(d,o,v,0);\"float32\"!==n&&\"float64\"!==n||c!==t.UNSIGNED_BYTE?i.assign(_,e):h(_,e),u=d.subarray(0,y)}var b=g(t);return t.texImage2D(t.TEXTURE_2D,0,p,o[0],o[1],0,p,c,u),l||a.free(d),new f(t,b,o[0],o[1],p,c)}Object.defineProperties(p,{minFilter:{get:function(){return this._minFilter},set:function(t){this.bind();var e=this.gl;if(this.type===e.FLOAT&&o.indexOf(t)>=0&&(e.getExtension(\"OES_texture_float_linear\")||(t=e.NEAREST)),s.indexOf(t)<0)throw new Error(\"gl-texture2d: Unknown filter mode \"+t);return e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t),this._minFilter=t}},magFilter:{get:function(){return this._magFilter},set:function(t){this.bind();var e=this.gl;if(this.type===e.FLOAT&&o.indexOf(t)>=0&&(e.getExtension(\"OES_texture_float_linear\")||(t=e.NEAREST)),s.indexOf(t)<0)throw new Error(\"gl-texture2d: Unknown filter mode \"+t);return e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t),this._magFilter=t}},mipSamples:{get:function(){return this._anisoSamples},set:function(t){var e=this._anisoSamples;if(this._anisoSamples=0|Math.max(t,1),e!==this._anisoSamples){var n=this.gl.getExtension(\"EXT_texture_filter_anisotropic\");n&&this.gl.texParameterf(this.gl.TEXTURE_2D,n.TEXTURE_MAX_ANISOTROPY_EXT,this._anisoSamples)}return this._anisoSamples}},wrapS:{get:function(){return this._wrapS},set:function(t){if(this.bind(),l.indexOf(t)<0)throw new Error(\"gl-texture2d: Unknown wrap mode \"+t);return this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,t),this._wrapS=t}},wrapT:{get:function(){return this._wrapT},set:function(t){if(this.bind(),l.indexOf(t)<0)throw new Error(\"gl-texture2d: Unknown wrap mode \"+t);return this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,t),this._wrapT=t}},wrap:{get:function(){return this._wrapVector},set:function(t){if(Array.isArray(t)||(t=[t,t]),2!==t.length)throw new Error(\"gl-texture2d: Must specify wrap mode for rows and columns\");for(var e=0;e<2;++e)if(l.indexOf(t[e])<0)throw new Error(\"gl-texture2d: Unknown wrap mode \"+t);this._wrapS=t[0],this._wrapT=t[1];var n=this.gl;return this.bind(),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,this._wrapS),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,this._wrapT),t}},shape:{get:function(){return this._shapeVector},set:function(t){if(Array.isArray(t)){if(2!==t.length)throw new Error(\"gl-texture2d: Invalid texture shape\")}else t=[0|t,0|t];return d(this,0|t[0],0|t[1]),[0|t[0],0|t[1]]}},width:{get:function(){return this._shape[0]},set:function(t){return d(this,t|=0,this._shape[1]),t}},height:{get:function(){return this._shape[1]},set:function(t){return d(this,this._shape[0],t|=0),t}}}),p.bind=function(t){var e=this.gl;return void 0!==t&&e.activeTexture(e.TEXTURE0+(0|t)),e.bindTexture(e.TEXTURE_2D,this.handle),void 0!==t?0|t:e.getParameter(e.ACTIVE_TEXTURE)-e.TEXTURE0},p.dispose=function(){this.gl.deleteTexture(this.handle)},p.generateMipmap=function(){this.bind(),this.gl.generateMipmap(this.gl.TEXTURE_2D);for(var t=Math.min(this._shape[0],this._shape[1]),e=0;t>0;++e,t>>>=1)this._mipLevels.indexOf(e)<0&&this._mipLevels.push(e)},p.setPixels=function(t,e,n,o){var s=this.gl;this.bind(),Array.isArray(e)?(o=n,n=0|e[1],e=0|e[0]):(e=e||0,n=n||0),o=o||0;var l=u(t)?t:t.raw;if(l)this._mipLevels.indexOf(o)<0?(s.texImage2D(s.TEXTURE_2D,0,this.format,this.format,this.type,l),this._mipLevels.push(o)):s.texSubImage2D(s.TEXTURE_2D,o,e,n,this.format,this.type,l);else{if(!(t.shape&&t.stride&&t.data))throw new Error(\"gl-texture2d: Unsupported data type\");if(t.shape.length<2||e+t.shape[1]>this._shape[1]>>>o||n+t.shape[0]>this._shape[0]>>>o||e<0||n<0)throw new Error(\"gl-texture2d: Texture dimensions are out of bounds\");!function(t,e,n,o,s,l,c,u){var d=u.dtype,f=u.shape.slice();if(f.length<2||f.length>3)throw new Error(\"gl-texture2d: Invalid ndarray, must be 2d or 3d\");var p=0,g=0,y=m(f,u.stride.slice());if(\"float32\"===d?p=t.FLOAT:\"float64\"===d?(p=t.FLOAT,y=!1,d=\"float32\"):\"uint8\"===d?p=t.UNSIGNED_BYTE:(p=t.UNSIGNED_BYTE,y=!1,d=\"uint8\"),2===f.length)g=t.LUMINANCE,u=r(u.data,f=[f[0],f[1],1],[u.stride[0],u.stride[1],1],u.offset);else{if(3!==f.length)throw new Error(\"gl-texture2d: Invalid shape for texture\");if(1===f[2])g=t.ALPHA;else if(2===f[2])g=t.LUMINANCE_ALPHA;else if(3===f[2])g=t.RGB;else{if(4!==f[2])throw new Error(\"gl-texture2d: Invalid shape for pixel coords\");g=t.RGBA}}if(g!==t.LUMINANCE&&g!==t.ALPHA||s!==t.LUMINANCE&&s!==t.ALPHA||(g=s),g!==s)throw new Error(\"gl-texture2d: Incompatible texture format for setPixels\");var v=u.size,_=c.indexOf(o)<0;if(_&&c.push(o),p===l&&y)0===u.offset&&u.data.length===v?_?t.texImage2D(t.TEXTURE_2D,o,s,f[0],f[1],0,s,l,u.data):t.texSubImage2D(t.TEXTURE_2D,o,e,n,f[0],f[1],s,l,u.data):_?t.texImage2D(t.TEXTURE_2D,o,s,f[0],f[1],0,s,l,u.data.subarray(u.offset,u.offset+v)):t.texSubImage2D(t.TEXTURE_2D,o,e,n,f[0],f[1],s,l,u.data.subarray(u.offset,u.offset+v));else{var b;b=l===t.FLOAT?a.mallocFloat32(v):a.mallocUint8(v);var x=r(b,f,[f[2],f[2]*f[0],1]);p===t.FLOAT&&l===t.UNSIGNED_BYTE?h(x,u):i.assign(x,u),_?t.texImage2D(t.TEXTURE_2D,o,s,f[0],f[1],0,s,l,b.subarray(0,v)):t.texSubImage2D(t.TEXTURE_2D,o,e,n,f[0],f[1],s,l,b.subarray(0,v)),l===t.FLOAT?a.freeFloat32(b):a.freeUint8(b)}}(s,e,n,o,this.format,this.type,this._mipLevels,t)}}},{ndarray:495,\"ndarray-ops\":490,\"typedarray-pool\":595}],354:[function(t,e,n){(function(n){(function(){\"use strict\";var r=t(\"pick-by-alias\");function i(t){if(t.container)if(t.container==document.body)document.body.style.width||(t.canvas.width=t.width||t.pixelRatio*n.innerWidth),document.body.style.height||(t.canvas.height=t.height||t.pixelRatio*n.innerHeight);else{var e=t.container.getBoundingClientRect();t.canvas.width=t.width||e.right-e.left,t.canvas.height=t.height||e.bottom-e.top}}function a(t){return\"function\"==typeof t.getContext&&\"width\"in t&&\"height\"in t}function o(){var t=document.createElement(\"canvas\");return t.style.position=\"absolute\",t.style.top=0,t.style.left=0,t}e.exports=function(t){if(t?\"string\"==typeof t&&(t={container:t}):t={},(t=a(t)||(e=t,\"string\"==typeof e.nodeName&&\"function\"==typeof e.appendChild&&\"function\"==typeof e.getBoundingClientRect)?{container:t}:function(t){return\"function\"==typeof t.drawArrays||\"function\"==typeof t.drawElements}(t)?{gl:t}:r(t,{container:\"container target element el canvas holder parent parentNode wrapper use ref root node\",gl:\"gl context webgl glContext\",attrs:\"attributes attrs contextAttributes\",pixelRatio:\"pixelRatio pxRatio px ratio pxratio pixelratio\",width:\"w width\",height:\"h height\"},!0)).pixelRatio||(t.pixelRatio=n.pixelRatio||1),t.gl)return t.gl;var e;if(t.canvas&&(t.container=t.canvas.parentNode),t.container){if(\"string\"==typeof t.container){var s=document.querySelector(t.container);if(!s)throw Error(\"Element \"+t.container+\" is not found\");t.container=s}a(t.container)?(t.canvas=t.container,t.container=t.canvas.parentNode):t.canvas||(t.canvas=o(),t.container.appendChild(t.canvas),i(t))}else if(!t.canvas){if(\"undefined\"==typeof document)throw Error(\"Not DOM environment. Use headless-gl.\");t.container=document.body||document.documentElement,t.canvas=o(),t.container.appendChild(t.canvas),i(t)}if(!t.gl)try{t.gl=t.canvas.getContext(\"webgl\",t.attrs)}catch(e){try{t.gl=t.canvas.getContext(\"experimental-webgl\",t.attrs)}catch(e){t.gl=t.canvas.getContext(\"webgl-experimental\",t.attrs)}}return t.gl}}).call(this)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{\"pick-by-alias\":511}],355:[function(t,e,n){\"use strict\";e.exports=function(t,e,n){e?e.bind():t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null);var r=0|t.getParameter(t.MAX_VERTEX_ATTRIBS);if(n){if(n.length>r)throw new Error(\"gl-vao: Too many vertex attributes\");for(var i=0;i<n.length;++i){var a=n[i];if(a.buffer){var o=a.size||4,s=a.type||t.FLOAT,l=!!a.normalized,c=a.stride||0,u=a.offset||0;a.buffer.bind(),t.enableVertexAttribArray(i),t.vertexAttribPointer(i,o,s,l,c,u)}else{if(\"number\"==typeof a)t.vertexAttrib1f(i,a);else if(1===a.length)t.vertexAttrib1f(i,a[0]);else if(2===a.length)t.vertexAttrib2f(i,a[0],a[1]);else if(3===a.length)t.vertexAttrib3f(i,a[0],a[1],a[2]);else{if(4!==a.length)throw new Error(\"gl-vao: Invalid vertex attribute\");t.vertexAttrib4f(i,a[0],a[1],a[2],a[3])}t.disableVertexAttribArray(i)}}for(;i<r;++i)t.disableVertexAttribArray(i)}else for(t.bindBuffer(t.ARRAY_BUFFER,null),i=0;i<r;++i)t.disableVertexAttribArray(i)}},{}],356:[function(t,e,n){\"use strict\";var r=t(\"./do-bind.js\");function i(t){this.gl=t,this._elements=null,this._attributes=null,this._elementsType=t.UNSIGNED_SHORT}i.prototype.bind=function(){r(this.gl,this._elements,this._attributes)},i.prototype.update=function(t,e,n){this._elements=e,this._attributes=t,this._elementsType=n||this.gl.UNSIGNED_SHORT},i.prototype.dispose=function(){},i.prototype.unbind=function(){},i.prototype.draw=function(t,e,n){n=n||0;var r=this.gl;this._elements?r.drawElements(t,e,this._elementsType,n):r.drawArrays(t,n,e)},e.exports=function(t){return new i(t)}},{\"./do-bind.js\":355}],357:[function(t,e,n){\"use strict\";var r=t(\"./do-bind.js\");function i(t,e,n,r,i,a){this.location=t,this.dimension=e,this.a=n,this.b=r,this.c=i,this.d=a}function a(t,e,n){this.gl=t,this._ext=e,this.handle=n,this._attribs=[],this._useElements=!1,this._elementsType=t.UNSIGNED_SHORT}i.prototype.bind=function(t){switch(this.dimension){case 1:t.vertexAttrib1f(this.location,this.a);break;case 2:t.vertexAttrib2f(this.location,this.a,this.b);break;case 3:t.vertexAttrib3f(this.location,this.a,this.b,this.c);break;case 4:t.vertexAttrib4f(this.location,this.a,this.b,this.c,this.d)}},a.prototype.bind=function(){this._ext.bindVertexArrayOES(this.handle);for(var t=0;t<this._attribs.length;++t)this._attribs[t].bind(this.gl)},a.prototype.unbind=function(){this._ext.bindVertexArrayOES(null)},a.prototype.dispose=function(){this._ext.deleteVertexArrayOES(this.handle)},a.prototype.update=function(t,e,n){if(this.bind(),r(this.gl,e,t),this.unbind(),this._attribs.length=0,t)for(var a=0;a<t.length;++a){var o=t[a];\"number\"==typeof o?this._attribs.push(new i(a,1,o)):Array.isArray(o)&&this._attribs.push(new i(a,o.length,o[0],o[1],o[2],o[3]))}this._useElements=!!e,this._elementsType=n||this.gl.UNSIGNED_SHORT},a.prototype.draw=function(t,e,n){n=n||0;var r=this.gl;this._useElements?r.drawElements(t,e,this._elementsType,n):r.drawArrays(t,n,e)},e.exports=function(t,e){return new a(t,e,e.createVertexArrayOES())}},{\"./do-bind.js\":355}],358:[function(t,e,n){\"use strict\";var r=t(\"./lib/vao-native.js\"),i=t(\"./lib/vao-emulated.js\");function a(t){this.bindVertexArrayOES=t.bindVertexArray.bind(t),this.createVertexArrayOES=t.createVertexArray.bind(t),this.deleteVertexArrayOES=t.deleteVertexArray.bind(t)}e.exports=function(t,e,n,o){var s,l=t.createVertexArray?new a(t):t.getExtension(\"OES_vertex_array_object\");return(s=l?r(t,l):i(t)).update(e,n,o),s}},{\"./lib/vao-emulated.js\":356,\"./lib/vao-native.js\":357}],359:[function(t,e,n){e.exports=function(t,e,n){return t[0]=e[0]+n[0],t[1]=e[1]+n[1],t[2]=e[2]+n[2],t}},{}],360:[function(t,e,n){e.exports=function(t,e){var n=r(t[0],t[1],t[2]),o=r(e[0],e[1],e[2]);i(n,n),i(o,o);var s=a(n,o);return s>1?0:Math.acos(s)};var r=t(\"./fromValues\"),i=t(\"./normalize\"),a=t(\"./dot\")},{\"./dot\":370,\"./fromValues\":376,\"./normalize\":387}],361:[function(t,e,n){e.exports=function(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}},{}],362:[function(t,e,n){e.exports=function(t){var e=new Float32Array(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}},{}],363:[function(t,e,n){e.exports=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}},{}],364:[function(t,e,n){e.exports=function(){var t=new Float32Array(3);return t[0]=0,t[1]=0,t[2]=0,t}},{}],365:[function(t,e,n){e.exports=function(t,e,n){var r=e[0],i=e[1],a=e[2],o=n[0],s=n[1],l=n[2];return t[0]=i*l-a*s,t[1]=a*o-r*l,t[2]=r*s-i*o,t}},{}],366:[function(t,e,n){e.exports=t(\"./distance\")},{\"./distance\":367}],367:[function(t,e,n){e.exports=function(t,e){var n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(n*n+r*r+i*i)}},{}],368:[function(t,e,n){e.exports=t(\"./divide\")},{\"./divide\":369}],369:[function(t,e,n){e.exports=function(t,e,n){return t[0]=e[0]/n[0],t[1]=e[1]/n[1],t[2]=e[2]/n[2],t}},{}],370:[function(t,e,n){e.exports=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}},{}],371:[function(t,e,n){e.exports=1e-6},{}],372:[function(t,e,n){e.exports=function(t,e){var n=t[0],i=t[1],a=t[2],o=e[0],s=e[1],l=e[2];return Math.abs(n-o)<=r*Math.max(1,Math.abs(n),Math.abs(o))&&Math.abs(i-s)<=r*Math.max(1,Math.abs(i),Math.abs(s))&&Math.abs(a-l)<=r*Math.max(1,Math.abs(a),Math.abs(l))};var r=t(\"./epsilon\")},{\"./epsilon\":371}],373:[function(t,e,n){e.exports=function(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}},{}],374:[function(t,e,n){e.exports=function(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}},{}],375:[function(t,e,n){e.exports=function(t,e,n,i,a,o){var s,l;for(e||(e=3),n||(n=0),l=i?Math.min(i*e+n,t.length):t.length,s=n;s<l;s+=e)r[0]=t[s],r[1]=t[s+1],r[2]=t[s+2],a(r,r,o),t[s]=r[0],t[s+1]=r[1],t[s+2]=r[2];return t};var r=t(\"./create\")()},{\"./create\":364}],376:[function(t,e,n){e.exports=function(t,e,n){var r=new Float32Array(3);return r[0]=t,r[1]=e,r[2]=n,r}},{}],377:[function(t,e,n){e.exports={EPSILON:t(\"./epsilon\"),create:t(\"./create\"),clone:t(\"./clone\"),angle:t(\"./angle\"),fromValues:t(\"./fromValues\"),copy:t(\"./copy\"),set:t(\"./set\"),equals:t(\"./equals\"),exactEquals:t(\"./exactEquals\"),add:t(\"./add\"),subtract:t(\"./subtract\"),sub:t(\"./sub\"),multiply:t(\"./multiply\"),mul:t(\"./mul\"),divide:t(\"./divide\"),div:t(\"./div\"),min:t(\"./min\"),max:t(\"./max\"),floor:t(\"./floor\"),ceil:t(\"./ceil\"),round:t(\"./round\"),scale:t(\"./scale\"),scaleAndAdd:t(\"./scaleAndAdd\"),distance:t(\"./distance\"),dist:t(\"./dist\"),squaredDistance:t(\"./squaredDistance\"),sqrDist:t(\"./sqrDist\"),length:t(\"./length\"),len:t(\"./len\"),squaredLength:t(\"./squaredLength\"),sqrLen:t(\"./sqrLen\"),negate:t(\"./negate\"),inverse:t(\"./inverse\"),normalize:t(\"./normalize\"),dot:t(\"./dot\"),cross:t(\"./cross\"),lerp:t(\"./lerp\"),random:t(\"./random\"),transformMat4:t(\"./transformMat4\"),transformMat3:t(\"./transformMat3\"),transformQuat:t(\"./transformQuat\"),rotateX:t(\"./rotateX\"),rotateY:t(\"./rotateY\"),rotateZ:t(\"./rotateZ\"),forEach:t(\"./forEach\")}},{\"./add\":359,\"./angle\":360,\"./ceil\":361,\"./clone\":362,\"./copy\":363,\"./create\":364,\"./cross\":365,\"./dist\":366,\"./distance\":367,\"./div\":368,\"./divide\":369,\"./dot\":370,\"./epsilon\":371,\"./equals\":372,\"./exactEquals\":373,\"./floor\":374,\"./forEach\":375,\"./fromValues\":376,\"./inverse\":378,\"./len\":379,\"./length\":380,\"./lerp\":381,\"./max\":382,\"./min\":383,\"./mul\":384,\"./multiply\":385,\"./negate\":386,\"./normalize\":387,\"./random\":388,\"./rotateX\":389,\"./rotateY\":390,\"./rotateZ\":391,\"./round\":392,\"./scale\":393,\"./scaleAndAdd\":394,\"./set\":395,\"./sqrDist\":396,\"./sqrLen\":397,\"./squaredDistance\":398,\"./squaredLength\":399,\"./sub\":400,\"./subtract\":401,\"./transformMat3\":402,\"./transformMat4\":403,\"./transformQuat\":404}],378:[function(t,e,n){e.exports=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}},{}],379:[function(t,e,n){e.exports=t(\"./length\")},{\"./length\":380}],380:[function(t,e,n){e.exports=function(t){var e=t[0],n=t[1],r=t[2];return Math.sqrt(e*e+n*n+r*r)}},{}],381:[function(t,e,n){e.exports=function(t,e,n,r){var i=e[0],a=e[1],o=e[2];return t[0]=i+r*(n[0]-i),t[1]=a+r*(n[1]-a),t[2]=o+r*(n[2]-o),t}},{}],382:[function(t,e,n){e.exports=function(t,e,n){return t[0]=Math.max(e[0],n[0]),t[1]=Math.max(e[1],n[1]),t[2]=Math.max(e[2],n[2]),t}},{}],383:[function(t,e,n){e.exports=function(t,e,n){return t[0]=Math.min(e[0],n[0]),t[1]=Math.min(e[1],n[1]),t[2]=Math.min(e[2],n[2]),t}},{}],384:[function(t,e,n){e.exports=t(\"./multiply\")},{\"./multiply\":385}],385:[function(t,e,n){e.exports=function(t,e,n){return t[0]=e[0]*n[0],t[1]=e[1]*n[1],t[2]=e[2]*n[2],t}},{}],386:[function(t,e,n){e.exports=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}},{}],387:[function(t,e,n){e.exports=function(t,e){var n=e[0],r=e[1],i=e[2],a=n*n+r*r+i*i;return a>0&&(a=1/Math.sqrt(a),t[0]=e[0]*a,t[1]=e[1]*a,t[2]=e[2]*a),t}},{}],388:[function(t,e,n){e.exports=function(t,e){e=e||1;var n=2*Math.random()*Math.PI,r=2*Math.random()-1,i=Math.sqrt(1-r*r)*e;return t[0]=Math.cos(n)*i,t[1]=Math.sin(n)*i,t[2]=r*e,t}},{}],389:[function(t,e,n){e.exports=function(t,e,n,r){var i=n[1],a=n[2],o=e[1]-i,s=e[2]-a,l=Math.sin(r),c=Math.cos(r);return t[0]=e[0],t[1]=i+o*c-s*l,t[2]=a+o*l+s*c,t}},{}],390:[function(t,e,n){e.exports=function(t,e,n,r){var i=n[0],a=n[2],o=e[0]-i,s=e[2]-a,l=Math.sin(r),c=Math.cos(r);return t[0]=i+s*l+o*c,t[1]=e[1],t[2]=a+s*c-o*l,t}},{}],391:[function(t,e,n){e.exports=function(t,e,n,r){var i=n[0],a=n[1],o=e[0]-i,s=e[1]-a,l=Math.sin(r),c=Math.cos(r);return t[0]=i+o*c-s*l,t[1]=a+o*l+s*c,t[2]=e[2],t}},{}],392:[function(t,e,n){e.exports=function(t,e){return t[0]=Math.round(e[0]),t[1]=Math.round(e[1]),t[2]=Math.round(e[2]),t}},{}],393:[function(t,e,n){e.exports=function(t,e,n){return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t}},{}],394:[function(t,e,n){e.exports=function(t,e,n,r){return t[0]=e[0]+n[0]*r,t[1]=e[1]+n[1]*r,t[2]=e[2]+n[2]*r,t}},{}],395:[function(t,e,n){e.exports=function(t,e,n,r){return t[0]=e,t[1]=n,t[2]=r,t}},{}],396:[function(t,e,n){e.exports=t(\"./squaredDistance\")},{\"./squaredDistance\":398}],397:[function(t,e,n){e.exports=t(\"./squaredLength\")},{\"./squaredLength\":399}],398:[function(t,e,n){e.exports=function(t,e){var n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return n*n+r*r+i*i}},{}],399:[function(t,e,n){e.exports=function(t){var e=t[0],n=t[1],r=t[2];return e*e+n*n+r*r}},{}],400:[function(t,e,n){e.exports=t(\"./subtract\")},{\"./subtract\":401}],401:[function(t,e,n){e.exports=function(t,e,n){return t[0]=e[0]-n[0],t[1]=e[1]-n[1],t[2]=e[2]-n[2],t}},{}],402:[function(t,e,n){e.exports=function(t,e,n){var r=e[0],i=e[1],a=e[2];return t[0]=r*n[0]+i*n[3]+a*n[6],t[1]=r*n[1]+i*n[4]+a*n[7],t[2]=r*n[2]+i*n[5]+a*n[8],t}},{}],403:[function(t,e,n){e.exports=function(t,e,n){var r=e[0],i=e[1],a=e[2],o=n[3]*r+n[7]*i+n[11]*a+n[15];return t[0]=(n[0]*r+n[4]*i+n[8]*a+n[12])/(o=o||1),t[1]=(n[1]*r+n[5]*i+n[9]*a+n[13])/o,t[2]=(n[2]*r+n[6]*i+n[10]*a+n[14])/o,t}},{}],404:[function(t,e,n){e.exports=function(t,e,n){var r=e[0],i=e[1],a=e[2],o=n[0],s=n[1],l=n[2],c=n[3],u=c*r+s*a-l*i,h=c*i+l*r-o*a,d=c*a+o*i-s*r,f=-o*r-s*i-l*a;return t[0]=u*c+f*-o+h*-l-d*-s,t[1]=h*c+f*-s+d*-o-u*-l,t[2]=d*c+f*-l+u*-s-h*-o,t}},{}],405:[function(t,e,n){e.exports=function(t,e,n){return t[0]=e[0]+n[0],t[1]=e[1]+n[1],t[2]=e[2]+n[2],t[3]=e[3]+n[3],t}},{}],406:[function(t,e,n){e.exports=function(t){var e=new Float32Array(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}},{}],407:[function(t,e,n){e.exports=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}},{}],408:[function(t,e,n){e.exports=function(){var t=new Float32Array(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t}},{}],409:[function(t,e,n){e.exports=function(t,e){var n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2],a=e[3]-t[3];return Math.sqrt(n*n+r*r+i*i+a*a)}},{}],410:[function(t,e,n){e.exports=function(t,e,n){return t[0]=e[0]/n[0],t[1]=e[1]/n[1],t[2]=e[2]/n[2],t[3]=e[3]/n[3],t}},{}],411:[function(t,e,n){e.exports=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}},{}],412:[function(t,e,n){e.exports=function(t,e,n,r){var i=new Float32Array(4);return i[0]=t,i[1]=e,i[2]=n,i[3]=r,i}},{}],413:[function(t,e,n){e.exports={create:t(\"./create\"),clone:t(\"./clone\"),fromValues:t(\"./fromValues\"),copy:t(\"./copy\"),set:t(\"./set\"),add:t(\"./add\"),subtract:t(\"./subtract\"),multiply:t(\"./multiply\"),divide:t(\"./divide\"),min:t(\"./min\"),max:t(\"./max\"),scale:t(\"./scale\"),scaleAndAdd:t(\"./scaleAndAdd\"),distance:t(\"./distance\"),squaredDistance:t(\"./squaredDistance\"),length:t(\"./length\"),squaredLength:t(\"./squaredLength\"),negate:t(\"./negate\"),inverse:t(\"./inverse\"),normalize:t(\"./normalize\"),dot:t(\"./dot\"),lerp:t(\"./lerp\"),random:t(\"./random\"),transformMat4:t(\"./transformMat4\"),transformQuat:t(\"./transformQuat\")}},{\"./add\":405,\"./clone\":406,\"./copy\":407,\"./create\":408,\"./distance\":409,\"./divide\":410,\"./dot\":411,\"./fromValues\":412,\"./inverse\":414,\"./length\":415,\"./lerp\":416,\"./max\":417,\"./min\":418,\"./multiply\":419,\"./negate\":420,\"./normalize\":421,\"./random\":422,\"./scale\":423,\"./scaleAndAdd\":424,\"./set\":425,\"./squaredDistance\":426,\"./squaredLength\":427,\"./subtract\":428,\"./transformMat4\":429,\"./transformQuat\":430}],414:[function(t,e,n){e.exports=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t[3]=1/e[3],t}},{}],415:[function(t,e,n){e.exports=function(t){var e=t[0],n=t[1],r=t[2],i=t[3];return Math.sqrt(e*e+n*n+r*r+i*i)}},{}],416:[function(t,e,n){e.exports=function(t,e,n,r){var i=e[0],a=e[1],o=e[2],s=e[3];return t[0]=i+r*(n[0]-i),t[1]=a+r*(n[1]-a),t[2]=o+r*(n[2]-o),t[3]=s+r*(n[3]-s),t}},{}],417:[function(t,e,n){e.exports=function(t,e,n){return t[0]=Math.max(e[0],n[0]),t[1]=Math.max(e[1],n[1]),t[2]=Math.max(e[2],n[2]),t[3]=Math.max(e[3],n[3]),t}},{}],418:[function(t,e,n){e.exports=function(t,e,n){return t[0]=Math.min(e[0],n[0]),t[1]=Math.min(e[1],n[1]),t[2]=Math.min(e[2],n[2]),t[3]=Math.min(e[3],n[3]),t}},{}],419:[function(t,e,n){e.exports=function(t,e,n){return t[0]=e[0]*n[0],t[1]=e[1]*n[1],t[2]=e[2]*n[2],t[3]=e[3]*n[3],t}},{}],420:[function(t,e,n){e.exports=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t}},{}],421:[function(t,e,n){e.exports=function(t,e){var n=e[0],r=e[1],i=e[2],a=e[3],o=n*n+r*r+i*i+a*a;return o>0&&(o=1/Math.sqrt(o),t[0]=n*o,t[1]=r*o,t[2]=i*o,t[3]=a*o),t}},{}],422:[function(t,e,n){var r=t(\"./normalize\"),i=t(\"./scale\");e.exports=function(t,e){return e=e||1,t[0]=Math.random(),t[1]=Math.random(),t[2]=Math.random(),t[3]=Math.random(),r(t,t),i(t,t,e),t}},{\"./normalize\":421,\"./scale\":423}],423:[function(t,e,n){e.exports=function(t,e,n){return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t}},{}],424:[function(t,e,n){e.exports=function(t,e,n,r){return t[0]=e[0]+n[0]*r,t[1]=e[1]+n[1]*r,t[2]=e[2]+n[2]*r,t[3]=e[3]+n[3]*r,t}},{}],425:[function(t,e,n){e.exports=function(t,e,n,r,i){return t[0]=e,t[1]=n,t[2]=r,t[3]=i,t}},{}],426:[function(t,e,n){e.exports=function(t,e){var n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2],a=e[3]-t[3];return n*n+r*r+i*i+a*a}},{}],427:[function(t,e,n){e.exports=function(t){var e=t[0],n=t[1],r=t[2],i=t[3];return e*e+n*n+r*r+i*i}},{}],428:[function(t,e,n){e.exports=function(t,e,n){return t[0]=e[0]-n[0],t[1]=e[1]-n[1],t[2]=e[2]-n[2],t[3]=e[3]-n[3],t}},{}],429:[function(t,e,n){e.exports=function(t,e,n){var r=e[0],i=e[1],a=e[2],o=e[3];return t[0]=n[0]*r+n[4]*i+n[8]*a+n[12]*o,t[1]=n[1]*r+n[5]*i+n[9]*a+n[13]*o,t[2]=n[2]*r+n[6]*i+n[10]*a+n[14]*o,t[3]=n[3]*r+n[7]*i+n[11]*a+n[15]*o,t}},{}],430:[function(t,e,n){e.exports=function(t,e,n){var r=e[0],i=e[1],a=e[2],o=n[0],s=n[1],l=n[2],c=n[3],u=c*r+s*a-l*i,h=c*i+l*r-o*a,d=c*a+o*i-s*r,f=-o*r-s*i-l*a;return t[0]=u*c+f*-o+h*-l-d*-s,t[1]=h*c+f*-s+d*-o-u*-l,t[2]=d*c+f*-l+u*-s-h*-o,t[3]=e[3],t}},{}],431:[function(t,e,n){var r=t(\"glsl-tokenizer\"),i=t(\"atob-lite\");e.exports=function(t){for(var e=Array.isArray(t)?t:r(t),n=0;n<e.length;n++){var a=e[n];if(\"preprocessor\"===a.type){var o=a.data.match(/\\#define\\s+SHADER_NAME(_B64)?\\s+(.+)$/);if(o&&o[2]){var s=o[2];return(o[1]?i(s):s).trim()}}}}},{\"atob-lite\":77,\"glsl-tokenizer\":438}],432:[function(t,e,n){e.exports=function(t){var e,n,h,d=0,f=0,p=l,m=[],g=[],y=1,v=0,_=0,b=!1,x=!1,w=\"\",k=a,M=r;\"300 es\"===(t=t||{}).version&&(k=s,M=o);var T={},S={};for(d=0;d<k.length;d++)T[k[d]]=!0;for(d=0;d<M.length;d++)S[M[d]]=!0;return function(t){return g=[],null!==t?function(t){var n;for(d=0,t.toString&&(t=t.toString()),w+=t.replace(/\\r\\n/g,\"\\n\"),h=w.length;e=w[d],d<h;){switch(n=d,p){case 0:d=O();break;case 1:case 2:d=E();break;case 3:d=D();break;case 4:d=R();break;case 11:d=P();break;case 5:d=z();break;case c:d=j();break;case 9:d=C();break;case l:d=L()}if(n!==d)switch(w[n]){case\"\\n\":v=0,++y;break;default:++v}}return f+=d,w=w.slice(d),g}(t):(m.length&&A(m.join(\"\")),p=10,A(\"(eof)\"),g)};function A(t){t.length&&g.push({type:u[p],data:t,position:_,line:y,column:v})}function L(){return m=m.length?[]:m,\"/\"===n&&\"*\"===e?(_=f+d-1,p=0,n=e,d+1):\"/\"===n&&\"/\"===e?(_=f+d-1,p=1,n=e,d+1):\"#\"===e?(p=2,_=f+d,d):/\\s/.test(e)?(p=9,_=f+d,d):(b=/\\d/.test(e),x=/[^\\w_]/.test(e),_=f+d,p=b?4:x?3:c,d)}function C(){return/[^\\s]/g.test(e)?(A(m.join(\"\")),p=l,d):(m.push(e),n=e,d+1)}function E(){return\"\\r\"!==e&&\"\\n\"!==e||\"\\\\\"===n?(m.push(e),n=e,d+1):(A(m.join(\"\")),p=l,d)}function O(){return\"/\"===e&&\"*\"===n?(m.push(e),A(m.join(\"\")),p=l,d+1):(m.push(e),n=e,d+1)}function D(){if(\".\"===n&&/\\d/.test(e))return p=5,d;if(\"/\"===n&&\"*\"===e)return p=0,d;if(\"/\"===n&&\"/\"===e)return p=1,d;if(\".\"===e&&m.length){for(;I(m););return p=5,d}if(\";\"===e||\")\"===e||\"(\"===e){if(m.length)for(;I(m););return A(e),p=l,d+1}var t=2===m.length&&\"=\"!==e;if(/[\\w_\\d\\s]/.test(e)||t){for(;I(m););return p=l,d}return m.push(e),n=e,d+1}function I(t){for(var e,n,r=0;;){if(e=i.indexOf(t.slice(0,t.length+r).join(\"\")),n=i[e],-1===e){if(r--+t.length>0)continue;n=t.slice(0,1).join(\"\")}return A(n),_+=n.length,(m=m.slice(n.length)).length}}function P(){return/[^a-fA-F0-9]/.test(e)?(A(m.join(\"\")),p=l,d):(m.push(e),n=e,d+1)}function R(){return\".\"===e||/[eE]/.test(e)?(m.push(e),p=5,n=e,d+1):\"x\"===e&&1===m.length&&\"0\"===m[0]?(p=11,m.push(e),n=e,d+1):/[^\\d]/.test(e)?(A(m.join(\"\")),p=l,d):(m.push(e),n=e,d+1)}function z(){return\"f\"===e&&(m.push(e),n=e,d+=1),/[eE]/.test(e)?(m.push(e),n=e,d+1):(\"-\"!==e&&\"+\"!==e||!/[eE]/.test(n))&&/[^\\d]/.test(e)?(A(m.join(\"\")),p=l,d):(m.push(e),n=e,d+1)}function j(){if(/[^\\d\\w_]/.test(e)){var t=m.join(\"\");return p=S[t]?8:T[t]?7:6,A(m.join(\"\")),p=l,d}return m.push(e),n=e,d+1}};var r=t(\"./lib/literals\"),i=t(\"./lib/operators\"),a=t(\"./lib/builtins\"),o=t(\"./lib/literals-300es\"),s=t(\"./lib/builtins-300es\"),l=999,c=9999,u=[\"block-comment\",\"line-comment\",\"preprocessor\",\"operator\",\"integer\",\"float\",\"ident\",\"builtin\",\"keyword\",\"whitespace\",\"eof\",\"integer\"]},{\"./lib/builtins\":434,\"./lib/builtins-300es\":433,\"./lib/literals\":436,\"./lib/literals-300es\":435,\"./lib/operators\":437}],433:[function(t,e,n){var r=t(\"./builtins\");r=r.slice().filter((function(t){return!/^(gl\\_|texture)/.test(t)})),e.exports=r.concat([\"gl_VertexID\",\"gl_InstanceID\",\"gl_Position\",\"gl_PointSize\",\"gl_FragCoord\",\"gl_FrontFacing\",\"gl_FragDepth\",\"gl_PointCoord\",\"gl_MaxVertexAttribs\",\"gl_MaxVertexUniformVectors\",\"gl_MaxVertexOutputVectors\",\"gl_MaxFragmentInputVectors\",\"gl_MaxVertexTextureImageUnits\",\"gl_MaxCombinedTextureImageUnits\",\"gl_MaxTextureImageUnits\",\"gl_MaxFragmentUniformVectors\",\"gl_MaxDrawBuffers\",\"gl_MinProgramTexelOffset\",\"gl_MaxProgramTexelOffset\",\"gl_DepthRangeParameters\",\"gl_DepthRange\",\"trunc\",\"round\",\"roundEven\",\"isnan\",\"isinf\",\"floatBitsToInt\",\"floatBitsToUint\",\"intBitsToFloat\",\"uintBitsToFloat\",\"packSnorm2x16\",\"unpackSnorm2x16\",\"packUnorm2x16\",\"unpackUnorm2x16\",\"packHalf2x16\",\"unpackHalf2x16\",\"outerProduct\",\"transpose\",\"determinant\",\"inverse\",\"texture\",\"textureSize\",\"textureProj\",\"textureLod\",\"textureOffset\",\"texelFetch\",\"texelFetchOffset\",\"textureProjOffset\",\"textureLodOffset\",\"textureProjLod\",\"textureProjLodOffset\",\"textureGrad\",\"textureGradOffset\",\"textureProjGrad\",\"textureProjGradOffset\"])},{\"./builtins\":434}],434:[function(t,e,n){e.exports=[\"abs\",\"acos\",\"all\",\"any\",\"asin\",\"atan\",\"ceil\",\"clamp\",\"cos\",\"cross\",\"dFdx\",\"dFdy\",\"degrees\",\"distance\",\"dot\",\"equal\",\"exp\",\"exp2\",\"faceforward\",\"floor\",\"fract\",\"gl_BackColor\",\"gl_BackLightModelProduct\",\"gl_BackLightProduct\",\"gl_BackMaterial\",\"gl_BackSecondaryColor\",\"gl_ClipPlane\",\"gl_ClipVertex\",\"gl_Color\",\"gl_DepthRange\",\"gl_DepthRangeParameters\",\"gl_EyePlaneQ\",\"gl_EyePlaneR\",\"gl_EyePlaneS\",\"gl_EyePlaneT\",\"gl_Fog\",\"gl_FogCoord\",\"gl_FogFragCoord\",\"gl_FogParameters\",\"gl_FragColor\",\"gl_FragCoord\",\"gl_FragData\",\"gl_FragDepth\",\"gl_FragDepthEXT\",\"gl_FrontColor\",\"gl_FrontFacing\",\"gl_FrontLightModelProduct\",\"gl_FrontLightProduct\",\"gl_FrontMaterial\",\"gl_FrontSecondaryColor\",\"gl_LightModel\",\"gl_LightModelParameters\",\"gl_LightModelProducts\",\"gl_LightProducts\",\"gl_LightSource\",\"gl_LightSourceParameters\",\"gl_MaterialParameters\",\"gl_MaxClipPlanes\",\"gl_MaxCombinedTextureImageUnits\",\"gl_MaxDrawBuffers\",\"gl_MaxFragmentUniformComponents\",\"gl_MaxLights\",\"gl_MaxTextureCoords\",\"gl_MaxTextureImageUnits\",\"gl_MaxTextureUnits\",\"gl_MaxVaryingFloats\",\"gl_MaxVertexAttribs\",\"gl_MaxVertexTextureImageUnits\",\"gl_MaxVertexUniformComponents\",\"gl_ModelViewMatrix\",\"gl_ModelViewMatrixInverse\",\"gl_ModelViewMatrixInverseTranspose\",\"gl_ModelViewMatrixTranspose\",\"gl_ModelViewProjectionMatrix\",\"gl_ModelViewProjectionMatrixInverse\",\"gl_ModelViewProjectionMatrixInverseTranspose\",\"gl_ModelViewProjectionMatrixTranspose\",\"gl_MultiTexCoord0\",\"gl_MultiTexCoord1\",\"gl_MultiTexCoord2\",\"gl_MultiTexCoord3\",\"gl_MultiTexCoord4\",\"gl_MultiTexCoord5\",\"gl_MultiTexCoord6\",\"gl_MultiTexCoord7\",\"gl_Normal\",\"gl_NormalMatrix\",\"gl_NormalScale\",\"gl_ObjectPlaneQ\",\"gl_ObjectPlaneR\",\"gl_ObjectPlaneS\",\"gl_ObjectPlaneT\",\"gl_Point\",\"gl_PointCoord\",\"gl_PointParameters\",\"gl_PointSize\",\"gl_Position\",\"gl_ProjectionMatrix\",\"gl_ProjectionMatrixInverse\",\"gl_ProjectionMatrixInverseTranspose\",\"gl_ProjectionMatrixTranspose\",\"gl_SecondaryColor\",\"gl_TexCoord\",\"gl_TextureEnvColor\",\"gl_TextureMatrix\",\"gl_TextureMatrixInverse\",\"gl_TextureMatrixInverseTranspose\",\"gl_TextureMatrixTranspose\",\"gl_Vertex\",\"greaterThan\",\"greaterThanEqual\",\"inversesqrt\",\"length\",\"lessThan\",\"lessThanEqual\",\"log\",\"log2\",\"matrixCompMult\",\"max\",\"min\",\"mix\",\"mod\",\"normalize\",\"not\",\"notEqual\",\"pow\",\"radians\",\"reflect\",\"refract\",\"sign\",\"sin\",\"smoothstep\",\"sqrt\",\"step\",\"tan\",\"texture2D\",\"texture2DLod\",\"texture2DProj\",\"texture2DProjLod\",\"textureCube\",\"textureCubeLod\",\"texture2DLodEXT\",\"texture2DProjLodEXT\",\"textureCubeLodEXT\",\"texture2DGradEXT\",\"texture2DProjGradEXT\",\"textureCubeGradEXT\"]},{}],435:[function(t,e,n){var r=t(\"./literals\");e.exports=r.slice().concat([\"layout\",\"centroid\",\"smooth\",\"case\",\"mat2x2\",\"mat2x3\",\"mat2x4\",\"mat3x2\",\"mat3x3\",\"mat3x4\",\"mat4x2\",\"mat4x3\",\"mat4x4\",\"uvec2\",\"uvec3\",\"uvec4\",\"samplerCubeShadow\",\"sampler2DArray\",\"sampler2DArrayShadow\",\"isampler2D\",\"isampler3D\",\"isamplerCube\",\"isampler2DArray\",\"usampler2D\",\"usampler3D\",\"usamplerCube\",\"usampler2DArray\",\"coherent\",\"restrict\",\"readonly\",\"writeonly\",\"resource\",\"atomic_uint\",\"noperspective\",\"patch\",\"sample\",\"subroutine\",\"common\",\"partition\",\"active\",\"filter\",\"image1D\",\"image2D\",\"image3D\",\"imageCube\",\"iimage1D\",\"iimage2D\",\"iimage3D\",\"iimageCube\",\"uimage1D\",\"uimage2D\",\"uimage3D\",\"uimageCube\",\"image1DArray\",\"image2DArray\",\"iimage1DArray\",\"iimage2DArray\",\"uimage1DArray\",\"uimage2DArray\",\"image1DShadow\",\"image2DShadow\",\"image1DArrayShadow\",\"image2DArrayShadow\",\"imageBuffer\",\"iimageBuffer\",\"uimageBuffer\",\"sampler1DArray\",\"sampler1DArrayShadow\",\"isampler1D\",\"isampler1DArray\",\"usampler1D\",\"usampler1DArray\",\"isampler2DRect\",\"usampler2DRect\",\"samplerBuffer\",\"isamplerBuffer\",\"usamplerBuffer\",\"sampler2DMS\",\"isampler2DMS\",\"usampler2DMS\",\"sampler2DMSArray\",\"isampler2DMSArray\",\"usampler2DMSArray\"])},{\"./literals\":436}],436:[function(t,e,n){e.exports=[\"precision\",\"highp\",\"mediump\",\"lowp\",\"attribute\",\"const\",\"uniform\",\"varying\",\"break\",\"continue\",\"do\",\"for\",\"while\",\"if\",\"else\",\"in\",\"out\",\"inout\",\"float\",\"int\",\"uint\",\"void\",\"bool\",\"true\",\"false\",\"discard\",\"return\",\"mat2\",\"mat3\",\"mat4\",\"vec2\",\"vec3\",\"vec4\",\"ivec2\",\"ivec3\",\"ivec4\",\"bvec2\",\"bvec3\",\"bvec4\",\"sampler1D\",\"sampler2D\",\"sampler3D\",\"samplerCube\",\"sampler1DShadow\",\"sampler2DShadow\",\"struct\",\"asm\",\"class\",\"union\",\"enum\",\"typedef\",\"template\",\"this\",\"packed\",\"goto\",\"switch\",\"default\",\"inline\",\"noinline\",\"volatile\",\"public\",\"static\",\"extern\",\"external\",\"interface\",\"long\",\"short\",\"double\",\"half\",\"fixed\",\"unsigned\",\"input\",\"output\",\"hvec2\",\"hvec3\",\"hvec4\",\"dvec2\",\"dvec3\",\"dvec4\",\"fvec2\",\"fvec3\",\"fvec4\",\"sampler2DRect\",\"sampler3DRect\",\"sampler2DRectShadow\",\"sizeof\",\"cast\",\"namespace\",\"using\"]},{}],437:[function(t,e,n){e.exports=[\"<<=\",\">>=\",\"++\",\"--\",\"<<\",\">>\",\"<=\",\">=\",\"==\",\"!=\",\"&&\",\"||\",\"+=\",\"-=\",\"*=\",\"/=\",\"%=\",\"&=\",\"^^\",\"^=\",\"|=\",\"(\",\")\",\"[\",\"]\",\".\",\"!\",\"~\",\"*\",\"/\",\"%\",\"+\",\"-\",\"<\",\">\",\"&\",\"^\",\"|\",\"?\",\":\",\"=\",\",\",\";\",\"{\",\"}\"]},{}],438:[function(t,e,n){var r=t(\"./index\");e.exports=function(t,e){var n=r(e),i=[];return(i=i.concat(n(t))).concat(n(null))}},{\"./index\":432}],439:[function(t,e,n){arguments[4][257][0].apply(n,arguments)},{dup:257}],440:[function(t,e,n){(function(n){(function(){\"use strict\";var r,i=t(\"is-browser\");r=\"function\"==typeof n.matchMedia?!n.matchMedia(\"(hover: none)\").matches:i,e.exports=r}).call(this)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{\"is-browser\":464}],441:[function(t,e,n){\"use strict\";var r=t(\"is-browser\");e.exports=r&&function(){var t=!1;try{var e=Object.defineProperty({},\"passive\",{get:function(){t=!0}});window.addEventListener(\"test\",null,e),window.removeEventListener(\"test\",null,e)}catch(n){t=!1}return t}()},{\"is-browser\":464}],442:[function(t,e,n){n.read=function(t,e,n,r,i){var a,o,s=8*i-r-1,l=(1<<s)-1,c=l>>1,u=-7,h=n?i-1:0,d=n?-1:1,f=t[e+h];for(h+=d,a=f&(1<<-u)-1,f>>=-u,u+=s;u>0;a=256*a+t[e+h],h+=d,u-=8);for(o=a&(1<<-u)-1,a>>=-u,u+=r;u>0;o=256*o+t[e+h],h+=d,u-=8);if(0===a)a=1-c;else{if(a===l)return o?NaN:1/0*(f?-1:1);o+=Math.pow(2,r),a-=c}return(f?-1:1)*o*Math.pow(2,a-r)},n.write=function(t,e,n,r,i,a){var o,s,l,c=8*a-i-1,u=(1<<c)-1,h=u>>1,d=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,f=r?0:a-1,p=r?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=u):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+h>=1?d/l:d*Math.pow(2,1-h))*l>=2&&(o++,l/=2),o+h>=u?(s=0,o=u):o+h>=1?(s=(e*l-1)*Math.pow(2,i),o+=h):(s=e*Math.pow(2,h-1)*Math.pow(2,i),o=0));i>=8;t[n+f]=255&s,f+=p,s/=256,i-=8);for(o=o<<i|s,c+=i;c>0;t[n+f]=255&o,f+=p,o/=256,c-=8);t[n+f-p]|=128*m}},{}],443:[function(t,e,n){\"use strict\";var r=t(\"./types\");e.exports=function(t,e){var n;for(n in r)if(r[n].detect(t,e))return n}},{\"./types\":446}],444:[function(t,e,n){(function(n){(function(){\"use strict\";var r=t(\"fs\"),i=t(\"path\"),a=t(\"./types\"),o=t(\"./detector\"),s=524288;function l(t,e){var n=o(t,e);if(n in a){var r=a[n].calculate(t,e);if(!1!==r)return r.type=n,r}throw new TypeError(\"unsupported file type: \"+n+\" (file: \"+e+\")\")}e.exports=function(t,e){if(n.isBuffer(t))return l(t);if(\"string\"!=typeof t)throw new TypeError(\"invalid invocation\");var a=i.resolve(t);if(\"function\"!=typeof e)return l(function(t){var e=r.openSync(t,\"r\"),i=r.fstatSync(e).size,a=Math.min(i,s),o=n.alloc(a);return r.readSync(e,o,0,a,0),r.closeSync(e),o}(a),a);!function(t,e){r.open(t,\"r\",(function(i,a){if(i)return e(i);r.fstat(a,(function(i,o){if(i)return e(i);var l=o.size;if(l<=0)return e(new Error(\"File size is not greater than 0 \\u2014\\u2014 \"+t));var c=Math.min(l,s),u=n.alloc(c);r.read(a,u,0,c,0,(function(t){if(t)return e(t);r.close(a,(function(t){e(t,u)}))}))}))}))}(a,(function(t,n){if(t)return e(t);var r;try{r=l(n,a)}catch(i){t=i}e(t,r)}))},e.exports.types=Object.keys(a)}).call(this)}).call(this,t(\"buffer\").Buffer)},{\"./detector\":443,\"./types\":446,buffer:111,fs:109,path:507}],445:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,r){return t[\"readUInt\"+e+(r?\"BE\":\"LE\")].call(t,n=n||0)}},{}],446:[function(t,e,n){\"use strict\";var r={bmp:t(\"./types/bmp\"),cur:t(\"./types/cur\"),dds:t(\"./types/dds\"),gif:t(\"./types/gif\"),icns:t(\"./types/icns\"),ico:t(\"./types/ico\"),jpg:t(\"./types/jpg\"),png:t(\"./types/png\"),psd:t(\"./types/psd\"),svg:t(\"./types/svg\"),tiff:t(\"./types/tiff\"),webp:t(\"./types/webp\")};e.exports=r},{\"./types/bmp\":447,\"./types/cur\":448,\"./types/dds\":449,\"./types/gif\":450,\"./types/icns\":451,\"./types/ico\":452,\"./types/jpg\":453,\"./types/png\":454,\"./types/psd\":455,\"./types/svg\":456,\"./types/tiff\":457,\"./types/webp\":458}],447:[function(t,e,n){\"use strict\";e.exports={detect:function(t){return\"BM\"===t.toString(\"ascii\",0,2)},calculate:function(t){return{width:t.readUInt32LE(18),height:Math.abs(t.readInt32LE(22))}}}},{}],448:[function(t,e,n){\"use strict\";e.exports={detect:function(t){return 0===t.readUInt16LE(0)&&2===t.readUInt16LE(2)},calculate:t(\"./ico\").calculate}},{\"./ico\":452}],449:[function(t,e,n){\"use strict\";e.exports={detect:function(t){return 542327876===t.readUInt32LE(0)},calculate:function(t){return{height:t.readUInt32LE(12),width:t.readUInt32LE(16)}}}},{}],450:[function(t,e,n){\"use strict\";var r=/^GIF8[79]a/;e.exports={detect:function(t){var e=t.toString(\"ascii\",0,6);return r.test(e)},calculate:function(t){return{width:t.readUInt16LE(6),height:t.readUInt16LE(8)}}}},{}],451:[function(t,e,n){\"use strict\";var r={ICON:32,\"ICN#\":32,\"icm#\":16,icm4:16,icm8:16,\"ics#\":16,ics4:16,ics8:16,is32:16,s8mk:16,icp4:16,icl4:32,icl8:32,il32:32,l8mk:32,icp5:32,ic11:32,ich4:48,ich8:48,ih32:48,h8mk:48,icp6:64,ic12:32,it32:128,t8mk:128,ic07:128,ic08:256,ic13:256,ic09:512,ic14:512,ic10:1024};function i(t,e){var n=e+4;return[t.toString(\"ascii\",e,n),t.readUInt32BE(n)]}function a(t){var e=r[t];return{width:e,height:e,type:t}}e.exports={detect:function(t){return\"icns\"===t.toString(\"ascii\",0,4)},calculate:function(t){var e,n,r,o=t.length,s=8,l=t.readUInt32BE(4);if(n=a((e=i(t,s))[0]),(s+=e[1])===l)return n;for(r={width:n.width,height:n.height,images:[n]};s<l&&s<o;)n=a((e=i(t,s))[0]),s+=e[1],r.images.push(n);return r}}},{}],452:[function(t,e,n){\"use strict\";function r(t,e){var n=t.readUInt8(e);return 0===n?256:n}function i(t,e){var n=6+16*e;return{width:r(t,n),height:r(t,n+1)}}e.exports={detect:function(t){return 0===t.readUInt16LE(0)&&1===t.readUInt16LE(2)},calculate:function(t){var e,n=t.readUInt16LE(4),r=i(t,0);if(1===n)return r;for(r.images=[{width:r.width,height:r.height}],e=1;e<n;e+=1)r.images.push(i(t,e));return r}}},{}],453:[function(t,e,n){\"use strict\";var r=t(\"../readUInt\");function i(t){return\"45786966\"===t.toString(\"hex\",2,6)}function a(t,e){return{height:t.readUInt16BE(e),width:t.readUInt16BE(e+2)}}function o(t,e){var n=t.slice(2,e),i=n.toString(\"hex\",6,8),a=\"4d4d\"===i;if(a||\"4949\"===i)return function(t,e){for(var n,i=r(t,16,14,e),a=0;a<i;a++){if((n=16+12*a)>t.length)return;var o=t.slice(n,n+12);if(274===r(o,16,0,e)){if(3!==r(o,16,2,e))return;if(1!==r(o,32,4,e))return;return r(o,16,8,e)}}}(n,a)}function s(t,e){if(e>t.length)throw new TypeError(\"Corrupt JPG, exceeded buffer limits\");if(255!==t[e])throw new TypeError(\"Invalid JPG, marker table corrupted\")}e.exports={detect:function(t){return\"ffd8\"===t.toString(\"hex\",0,2)},calculate:function(t){var e,n,r;for(t=t.slice(4);t.length;){if(n=t.readUInt16BE(0),i(t)&&(e=o(t,n)),s(t,n),192===(r=t[n+1])||193===r||194===r){var l=a(t,n+5);return e?{width:l.width,height:l.height,orientation:e}:l}t=t.slice(n+2)}throw new TypeError(\"Invalid JPG, no size found\")}}},{\"../readUInt\":445}],454:[function(t,e,n){\"use strict\";var r=\"CgBI\";e.exports={detect:function(t){if(\"PNG\\r\\n\\x1a\\n\"===t.toString(\"ascii\",1,8)){var e=t.toString(\"ascii\",12,16);if(e===r&&(e=t.toString(\"ascii\",28,32)),\"IHDR\"!==e)throw new TypeError(\"invalid png\");return!0}},calculate:function(t){return t.toString(\"ascii\",12,16)===r?{width:t.readUInt32BE(32),height:t.readUInt32BE(36)}:{width:t.readUInt32BE(16),height:t.readUInt32BE(20)}}}},{}],455:[function(t,e,n){\"use strict\";e.exports={detect:function(t){return\"8BPS\"===t.toString(\"ascii\",0,4)},calculate:function(t){return{width:t.readUInt32BE(18),height:t.readUInt32BE(14)}}}},{}],456:[function(t,e,n){\"use strict\";var r=/<svg\\s([^>\"']|\"[^\"]*\"|'[^']*')*>/,i={root:r,width:/\\swidth=(['\"])([^%]+?)\\1/,height:/\\sheight=(['\"])([^%]+?)\\1/,viewbox:/\\sviewBox=(['\"])(.+?)\\1/},a={cm:96/2.54,mm:96/2.54/10,m:96/2.54*100,pt:96/72,pc:96/72/12,em:16,ex:8};function o(t){var e=/([0-9.]+)([a-z]*)/.exec(t);if(e)return Math.round(parseFloat(e[1])*(a[e[2]]||1))}function s(t){var e=t.split(\" \");return{width:o(e[2]),height:o(e[3])}}e.exports={detect:function(t){return r.test(t)},calculate:function(t){var e=t.toString(\"utf8\").match(i.root);if(e){var n=function(t){var e=t.match(i.width),n=t.match(i.height),r=t.match(i.viewbox);return{width:e&&o(e[2]),height:n&&o(n[2]),viewbox:r&&s(r[2])}}(e[0]);if(n.width&&n.height)return function(t){return{width:t.width,height:t.height}}(n);if(n.viewbox)return function(t){var e=t.viewbox.width/t.viewbox.height;return t.width?{width:t.width,height:Math.floor(t.width/e)}:t.height?{width:Math.floor(t.height*e),height:t.height}:{width:t.viewbox.width,height:t.viewbox.height}}(n)}throw new TypeError(\"invalid svg\")}}},{}],457:[function(t,e,n){(function(n){(function(){\"use strict\";var r=t(\"fs\"),i=t(\"../readUInt\");function a(t,e){var n=i(t,16,8,e);return(i(t,16,10,e)<<16)+n}function o(t){if(t.length>24)return t.slice(12)}e.exports={detect:function(t){var e=t.toString(\"hex\",0,4);return\"49492a00\"===e||\"4d4d002a\"===e},calculate:function(t,e){if(!e)throw new TypeError(\"Tiff doesn't support buffer\");var s=\"BE\"===function(t){var e=t.toString(\"ascii\",0,2);return\"II\"===e?\"LE\":\"MM\"===e?\"BE\":void 0}(t),l=function(t,e){for(var n,r,s,l={};t&&t.length&&(n=i(t,16,0,e),r=i(t,16,2,e),s=i(t,32,4,e),0!==n);)1!==s||3!==r&&4!==r||(l[n]=a(t,e)),t=o(t);return l}(function(t,e,a){var o=i(t,32,4,a),s=1024,l=r.statSync(e).size;o+s>l&&(s=l-o-10);var c=n.alloc(s),u=r.openSync(e,\"r\");return r.readSync(u,c,0,s,o),c.slice(2)}(t,e,s),s),c=l[256],u=l[257];if(!c||!u)throw new TypeError(\"Invalid Tiff, missing tags\");return{width:c,height:u}}}}).call(this)}).call(this,t(\"buffer\").Buffer)},{\"../readUInt\":445,buffer:111,fs:109}],458:[function(t,e,n){\"use strict\";e.exports={detect:function(t){var e=\"RIFF\"===t.toString(\"ascii\",0,4),n=\"WEBP\"===t.toString(\"ascii\",8,12),r=\"VP8\"===t.toString(\"ascii\",12,15);return e&&n&&r},calculate:function(t){var e=t.toString(\"ascii\",12,16);if(t=t.slice(20,30),\"VP8X\"===e){var n=t[0];return!(0!=(192&n)||0!=(1&n))&&function(t){return{width:1+t.readUIntLE(4,3),height:1+t.readUIntLE(7,3)}}(t)}if(\"VP8 \"===e&&47!==t[0])return function(t){return{width:16383&t.readInt16LE(6),height:16383&t.readInt16LE(8)}}(t);var r=t.toString(\"hex\",3,6);return\"VP8L\"===e&&\"9d012a\"!==r&&function(t){return{width:1+((63&t[2])<<8|t[1]),height:1+((15&t[4])<<10|t[3]<<2|(192&t[2])>>6)}}(t)}}},{}],459:[function(t,e,n){\"use strict\";e.exports=function(t,e){var n=t.length;if(0===n)throw new Error(\"Must have at least d+1 points\");var i=t[0].length;if(n<=i)throw new Error(\"Must input at least d+1 points\");var o=t.slice(0,i+1),s=r.apply(void 0,o);if(0===s)throw new Error(\"Input not in general position\");for(var l=new Array(i+1),u=0;u<=i;++u)l[u]=u;s<0&&(l[0]=1,l[1]=0);var h=new a(l,new Array(i+1),!1),d=h.adjacent,f=new Array(i+2);for(u=0;u<=i;++u){for(var p=l.slice(),m=0;m<=i;++m)m===u&&(p[m]=-1);var g=p[0];p[0]=p[1],p[1]=g;var y=new a(p,new Array(i+1),!0);d[u]=y,f[u]=y}for(f[i+1]=h,u=0;u<=i;++u){p=d[u].vertices;var v=d[u].adjacent;for(m=0;m<=i;++m){var _=p[m];if(_<0)v[m]=h;else for(var b=0;b<=i;++b)d[b].vertices.indexOf(_)<0&&(v[m]=d[b])}}var x=new c(i,o,f),w=!!e;for(u=i+1;u<n;++u)x.insert(t[u],w);return x.boundary()};var r=t(\"robust-orientation\"),i=t(\"simplicial-complex\").compareCells;function a(t,e,n){this.vertices=t,this.adjacent=e,this.boundary=n,this.lastVisited=-1}function o(t,e,n){this.vertices=t,this.cell=e,this.index=n}function s(t,e){return i(t.vertices,e.vertices)}a.prototype.flip=function(){var t=this.vertices[0];this.vertices[0]=this.vertices[1],this.vertices[1]=t;var e=this.adjacent[0];this.adjacent[0]=this.adjacent[1],this.adjacent[1]=e};var l=[];function c(t,e,n){this.dimension=t,this.vertices=e,this.simplices=n,this.interior=n.filter((function(t){return!t.boundary})),this.tuple=new Array(t+1);for(var i=0;i<=t;++i)this.tuple[i]=this.vertices[i];var a=l[t];a||(a=l[t]=function(t){for(var e=[\"function orient(){var tuple=this.tuple;return test(\"],n=0;n<=t;++n)n>0&&e.push(\",\"),e.push(\"tuple[\",n,\"]\");e.push(\")}return orient\");var i=new Function(\"test\",e.join(\"\")),a=r[t+1];return a||(a=r),i(a)}(t)),this.orient=a}var u=c.prototype;u.handleBoundaryDegeneracy=function(t,e){var n=this.dimension,r=this.vertices.length-1,i=this.tuple,a=this.vertices,o=[t];for(t.lastVisited=-r;o.length>0;)for(var s=(t=o.pop()).adjacent,l=0;l<=n;++l){var c=s[l];if(c.boundary&&!(c.lastVisited<=-r)){for(var u=c.vertices,h=0;h<=n;++h){var d=u[h];i[h]=d<0?e:a[d]}var f=this.orient();if(f>0)return c;c.lastVisited=-r,0===f&&o.push(c)}}return null},u.walk=function(t,e){var n=this.vertices.length-1,r=this.dimension,i=this.vertices,a=this.tuple,o=e?this.interior.length*Math.random()|0:this.interior.length-1,s=this.interior[o];t:for(;!s.boundary;){for(var l=s.vertices,c=s.adjacent,u=0;u<=r;++u)a[u]=i[l[u]];for(s.lastVisited=n,u=0;u<=r;++u){var h=c[u];if(!(h.lastVisited>=n)){var d=a[u];a[u]=t;var f=this.orient();if(a[u]=d,f<0){s=h;continue t}h.lastVisited=h.boundary?-n:n}}return}return s},u.addPeaks=function(t,e){var n=this.vertices.length-1,r=this.dimension,i=this.vertices,l=this.tuple,c=this.interior,u=this.simplices,h=[e];e.lastVisited=n,e.vertices[e.vertices.indexOf(-1)]=n,e.boundary=!1,c.push(e);for(var d=[];h.length>0;){var f=(e=h.pop()).vertices,p=e.adjacent,m=f.indexOf(n);if(!(m<0))for(var g=0;g<=r;++g)if(g!==m){var y=p[g];if(y.boundary&&!(y.lastVisited>=n)){var v=y.vertices;if(y.lastVisited!==-n){for(var _=0,b=0;b<=r;++b)v[b]<0?(_=b,l[b]=t):l[b]=i[v[b]];if(this.orient()>0){v[_]=n,y.boundary=!1,c.push(y),h.push(y),y.lastVisited=n;continue}y.lastVisited=-n}var x=y.adjacent,w=f.slice(),k=p.slice(),M=new a(w,k,!0);u.push(M);var T=x.indexOf(e);if(!(T<0))for(x[T]=M,k[m]=y,w[g]=-1,k[g]=e,p[g]=M,M.flip(),b=0;b<=r;++b){var S=w[b];if(!(S<0||S===n)){for(var A=new Array(r-1),L=0,C=0;C<=r;++C){var E=w[C];E<0||C===b||(A[L++]=E)}d.push(new o(A,M,b))}}}}}for(d.sort(s),g=0;g+1<d.length;g+=2){var O=d[g],D=d[g+1];O.index<0||D.index<0||(O.cell.adjacent[O.index]=D.cell,D.cell.adjacent[D.index]=O.cell)}},u.insert=function(t,e){var n=this.vertices;n.push(t);var r=this.walk(t,e);if(r){for(var i=this.dimension,a=this.tuple,o=0;o<=i;++o){var s=r.vertices[o];a[o]=s<0?t:n[s]}var l=this.orient(a);l<0||(0!==l||(r=this.handleBoundaryDegeneracy(r,t)))&&this.addPeaks(t,r)}},u.boundary=function(){for(var t=this.dimension,e=[],n=this.simplices,r=n.length,i=0;i<r;++i){var a=n[i];if(a.boundary){for(var o=new Array(t),s=a.vertices,l=0,c=0,u=0;u<=t;++u)s[u]>=0?o[l++]=s[u]:c=1&u;if(c===(1&t)){var h=o[0];o[0]=o[1],o[1]=h}e.push(o)}}return e}},{\"robust-orientation\":548,\"simplicial-complex\":558}],460:[function(t,e,n){\"use strict\";var r=t(\"binary-search-bounds\");function i(t,e,n,r,i){this.mid=t,this.left=e,this.right=n,this.leftPoints=r,this.rightPoints=i,this.count=(e?e.count:0)+(n?n.count:0)+r.length}e.exports=function(t){return new y(t&&0!==t.length?g(t):null)};var a=i.prototype;function o(t,e){t.mid=e.mid,t.left=e.left,t.right=e.right,t.leftPoints=e.leftPoints,t.rightPoints=e.rightPoints,t.count=e.count}function s(t,e){var n=g(e);t.mid=n.mid,t.left=n.left,t.right=n.right,t.leftPoints=n.leftPoints,t.rightPoints=n.rightPoints,t.count=n.count}function l(t,e){var n=t.intervals([]);n.push(e),s(t,n)}function c(t,e){var n=t.intervals([]),r=n.indexOf(e);return r<0?0:(n.splice(r,1),s(t,n),1)}function u(t,e,n){for(var r=0;r<t.length&&t[r][0]<=e;++r){var i=n(t[r]);if(i)return i}}function h(t,e,n){for(var r=t.length-1;r>=0&&t[r][1]>=e;--r){var i=n(t[r]);if(i)return i}}function d(t,e){for(var n=0;n<t.length;++n){var r=e(t[n]);if(r)return r}}function f(t,e){return t-e}function p(t,e){return t[0]-e[0]||t[1]-e[1]}function m(t,e){return t[1]-e[1]||t[0]-e[0]}function g(t){if(0===t.length)return null;for(var e=[],n=0;n<t.length;++n)e.push(t[n][0],t[n][1]);e.sort(f);var r=e[e.length>>1],a=[],o=[],s=[];for(n=0;n<t.length;++n){var l=t[n];l[1]<r?a.push(l):r<l[0]?o.push(l):s.push(l)}var c=s,u=s.slice();return c.sort(p),u.sort(m),new i(r,g(a),g(o),c,u)}function y(t){this.root=t}a.intervals=function(t){return t.push.apply(t,this.leftPoints),this.left&&this.left.intervals(t),this.right&&this.right.intervals(t),t},a.insert=function(t){var e=this.count-this.leftPoints.length;if(this.count+=1,t[1]<this.mid)this.left?4*(this.left.count+1)>3*(e+1)?l(this,t):this.left.insert(t):this.left=g([t]);else if(t[0]>this.mid)this.right?4*(this.right.count+1)>3*(e+1)?l(this,t):this.right.insert(t):this.right=g([t]);else{var n=r.ge(this.leftPoints,t,p),i=r.ge(this.rightPoints,t,m);this.leftPoints.splice(n,0,t),this.rightPoints.splice(i,0,t)}},a.remove=function(t){var e=this.count-this.leftPoints;if(t[1]<this.mid)return this.left?4*(this.right?this.right.count:0)>3*(e-1)?c(this,t):2===(s=this.left.remove(t))?(this.left=null,this.count-=1,1):(1===s&&(this.count-=1),s):0;if(t[0]>this.mid)return this.right?4*(this.left?this.left.count:0)>3*(e-1)?c(this,t):2===(s=this.right.remove(t))?(this.right=null,this.count-=1,1):(1===s&&(this.count-=1),s):0;if(1===this.count)return this.leftPoints[0]===t?2:0;if(1===this.leftPoints.length&&this.leftPoints[0]===t){if(this.left&&this.right){for(var n=this,i=this.left;i.right;)n=i,i=i.right;if(n===this)i.right=this.right;else{var a=this.left,s=this.right;n.count-=i.count,n.right=i.left,i.left=a,i.right=s}o(this,i),this.count=(this.left?this.left.count:0)+(this.right?this.right.count:0)+this.leftPoints.length}else o(this,this.left?this.left:this.right);return 1}for(a=r.ge(this.leftPoints,t,p);a<this.leftPoints.length&&this.leftPoints[a][0]===t[0];++a)if(this.leftPoints[a]===t)for(this.count-=1,this.leftPoints.splice(a,1),s=r.ge(this.rightPoints,t,m);s<this.rightPoints.length&&this.rightPoints[s][1]===t[1];++s)if(this.rightPoints[s]===t)return this.rightPoints.splice(s,1),1;return 0},a.queryPoint=function(t,e){return t<this.mid?this.left&&(n=this.left.queryPoint(t,e))?n:u(this.leftPoints,t,e):t>this.mid?this.right&&(n=this.right.queryPoint(t,e))?n:h(this.rightPoints,t,e):d(this.leftPoints,e);var n},a.queryInterval=function(t,e,n){var r;return t<this.mid&&this.left&&(r=this.left.queryInterval(t,e,n))||e>this.mid&&this.right&&(r=this.right.queryInterval(t,e,n))?r:e<this.mid?u(this.leftPoints,e,n):t>this.mid?h(this.rightPoints,t,n):d(this.leftPoints,n)};var v=y.prototype;v.insert=function(t){this.root?this.root.insert(t):this.root=new i(t[0],null,null,[t],[t])},v.remove=function(t){if(this.root){var e=this.root.remove(t);return 2===e&&(this.root=null),0!==e}return!1},v.queryPoint=function(t,e){if(this.root)return this.root.queryPoint(t,e)},v.queryInterval=function(t,e,n){if(t<=e&&this.root)return this.root.queryInterval(t,e,n)},Object.defineProperty(v,\"count\",{get:function(){return this.root?this.root.count:0}}),Object.defineProperty(v,\"intervals\",{get:function(){return this.root?this.root.intervals([]):[]}})},{\"binary-search-bounds\":461}],461:[function(t,e,n){arguments[4][243][0].apply(n,arguments)},{dup:243}],462:[function(t,e,n){\"use strict\";e.exports=function(t,e){e=e||new Array(t.length);for(var n=0;n<t.length;++n)e[t[n]]=n;return e}},{}],463:[function(t,e,n){\"use strict\";e.exports=function(t){for(var e=new Array(t),n=0;n<t;++n)e[n]=n;return e}},{}],464:[function(t,e,n){e.exports=!0},{}],465:[function(t,e,n){function r(t){return!!t.constructor&&\"function\"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}e.exports=function(t){return null!=t&&(r(t)||function(t){return\"function\"==typeof t.readFloatLE&&\"function\"==typeof t.slice&&r(t.slice(0,0))}(t)||!!t._isBuffer)}},{}],466:[function(t,e,n){\"use strict\";e.exports=\"undefined\"!=typeof navigator&&(/MSIE/.test(navigator.userAgent)||/Trident\\//.test(navigator.appVersion))},{}],467:[function(t,e,n){\"use strict\";e.exports=a,e.exports.isMobile=a,e.exports.default=a;var r=/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series[46]0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i,i=/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series[46]0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino|android|ipad|playbook|silk/i;function a(t){t||(t={});var e=t.ua;if(e||\"undefined\"==typeof navigator||(e=navigator.userAgent),e&&e.headers&&\"string\"==typeof e.headers[\"user-agent\"]&&(e=e.headers[\"user-agent\"]),\"string\"!=typeof e)return!1;var n=t.tablet?i.test(e):r.test(e);return!n&&t.tablet&&t.featureDetect&&navigator&&navigator.maxTouchPoints>1&&-1!==e.indexOf(\"Macintosh\")&&-1!==e.indexOf(\"Safari\")&&(n=!0),n}},{}],468:[function(t,e,n){\"use strict\";e.exports=function(t){var e=typeof t;return null!==t&&(\"object\"===e||\"function\"===e)}},{}],469:[function(t,e,n){\"use strict\";var r=Object.prototype.toString;e.exports=function(t){var e;return\"[object Object]\"===r.call(t)&&(null===(e=Object.getPrototypeOf(t))||e===Object.getPrototypeOf({}))}},{}],470:[function(t,e,n){\"use strict\";e.exports=function(t){for(var e,n=t.length,r=0;r<n;r++)if(((e=t.charCodeAt(r))<9||e>13)&&32!==e&&133!==e&&160!==e&&5760!==e&&6158!==e&&(e<8192||e>8205)&&8232!==e&&8233!==e&&8239!==e&&8287!==e&&8288!==e&&12288!==e&&65279!==e)return!1;return!0}},{}],471:[function(t,e,n){\"use strict\";e.exports=function(t){return\"string\"==typeof t&&(t=t.trim(),!!(/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(t)&&/[\\dz]$/i.test(t)&&t.length>4))}},{}],472:[function(t,e,n){e.exports=function(t,e,n){return t*(1-n)+e*n}},{}],473:[function(t,e,n){!function(t,r){\"object\"==typeof n&&void 0!==e?e.exports=r():(t=t||self).mapboxgl=r()}(this,(function(){\"use strict\";var t,e,n;function r(r,i){if(t)if(e){var a=\"var sharedChunk = {}; (\"+t+\")(sharedChunk); (\"+e+\")(sharedChunk);\",o={};t(o),(n=i(o)).workerUrl=window.URL.createObjectURL(new Blob([a],{type:\"text/javascript\"}))}else e=i;else t=i}return r(0,(function(t){function e(t,e){return t(e={exports:{}},e.exports),e.exports}var n=r;function r(t,e,n,r){this.cx=3*t,this.bx=3*(n-t)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*e,this.by=3*(r-e)-this.cy,this.ay=1-this.cy-this.by,this.p1x=t,this.p1y=r,this.p2x=n,this.p2y=r}r.prototype.sampleCurveX=function(t){return((this.ax*t+this.bx)*t+this.cx)*t},r.prototype.sampleCurveY=function(t){return((this.ay*t+this.by)*t+this.cy)*t},r.prototype.sampleCurveDerivativeX=function(t){return(3*this.ax*t+2*this.bx)*t+this.cx},r.prototype.solveCurveX=function(t,e){var n,r,i,a,o;for(void 0===e&&(e=1e-6),i=t,o=0;o<8;o++){if(a=this.sampleCurveX(i)-t,Math.abs(a)<e)return i;var s=this.sampleCurveDerivativeX(i);if(Math.abs(s)<1e-6)break;i-=a/s}if((i=t)<(n=0))return n;if(i>(r=1))return r;for(;n<r;){if(a=this.sampleCurveX(i),Math.abs(a-t)<e)return i;t>a?n=i:r=i,i=.5*(r-n)+n}return i},r.prototype.solve=function(t,e){return this.sampleCurveY(this.solveCurveX(t,e))};var i=a;function a(t,e){this.x=t,this.y=e}function o(t,e,r,i){var a=new n(t,e,r,i);return function(t){return a.solve(t)}}a.prototype={clone:function(){return new a(this.x,this.y)},add:function(t){return this.clone()._add(t)},sub:function(t){return this.clone()._sub(t)},multByPoint:function(t){return this.clone()._multByPoint(t)},divByPoint:function(t){return this.clone()._divByPoint(t)},mult:function(t){return this.clone()._mult(t)},div:function(t){return this.clone()._div(t)},rotate:function(t){return this.clone()._rotate(t)},rotateAround:function(t,e){return this.clone()._rotateAround(t,e)},matMult:function(t){return this.clone()._matMult(t)},unit:function(){return this.clone()._unit()},perp:function(){return this.clone()._perp()},round:function(){return this.clone()._round()},mag:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals:function(t){return this.x===t.x&&this.y===t.y},dist:function(t){return Math.sqrt(this.distSqr(t))},distSqr:function(t){var e=t.x-this.x,n=t.y-this.y;return e*e+n*n},angle:function(){return Math.atan2(this.y,this.x)},angleTo:function(t){return Math.atan2(this.y-t.y,this.x-t.x)},angleWith:function(t){return this.angleWithSep(t.x,t.y)},angleWithSep:function(t,e){return Math.atan2(this.x*e-this.y*t,this.x*t+this.y*e)},_matMult:function(t){var e=t[2]*this.x+t[3]*this.y;return this.x=t[0]*this.x+t[1]*this.y,this.y=e,this},_add:function(t){return this.x+=t.x,this.y+=t.y,this},_sub:function(t){return this.x-=t.x,this.y-=t.y,this},_mult:function(t){return this.x*=t,this.y*=t,this},_div:function(t){return this.x/=t,this.y/=t,this},_multByPoint:function(t){return this.x*=t.x,this.y*=t.y,this},_divByPoint:function(t){return this.x/=t.x,this.y/=t.y,this},_unit:function(){return this._div(this.mag()),this},_perp:function(){var t=this.y;return this.y=this.x,this.x=-t,this},_rotate:function(t){var e=Math.cos(t),n=Math.sin(t),r=n*this.x+e*this.y;return this.x=e*this.x-n*this.y,this.y=r,this},_rotateAround:function(t,e){var n=Math.cos(t),r=Math.sin(t),i=e.y+r*(this.x-e.x)+n*(this.y-e.y);return this.x=e.x+n*(this.x-e.x)-r*(this.y-e.y),this.y=i,this},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}},a.convert=function(t){return t instanceof a?t:Array.isArray(t)?new a(t[0],t[1]):t};var s=o(.25,.1,.25,1);function l(t,e,n){return Math.min(n,Math.max(e,t))}function c(t,e,n){var r=n-e,i=((t-e)%r+r)%r+e;return i===e?n:i}function u(t){for(var e=[],n=arguments.length-1;n-- >0;)e[n]=arguments[n+1];for(var r=0,i=e;r<i.length;r+=1){var a=i[r];for(var o in a)t[o]=a[o]}return t}var h=1;function d(){return h++}function f(){return function t(e){return e?(e^16*Math.random()>>e/4).toString(16):([1e7]+-[1e3]+-4e3+-8e3+-1e11).replace(/[018]/g,t)}()}function p(t){return!!t&&/^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(t)}function m(t,e){t.forEach((function(t){e[t]&&(e[t]=e[t].bind(e))}))}function g(t,e){return-1!==t.indexOf(e,t.length-e.length)}function y(t,e,n){var r={};for(var i in t)r[i]=e.call(n||this,t[i],i,t);return r}function v(t,e,n){var r={};for(var i in t)e.call(n||this,t[i],i,t)&&(r[i]=t[i]);return r}function _(t){return Array.isArray(t)?t.map(_):\"object\"==typeof t&&t?y(t,_):t}var b={};function x(t){b[t]||(\"undefined\"!=typeof console&&console.warn(t),b[t]=!0)}function w(t,e,n){return(n.y-t.y)*(e.x-t.x)>(e.y-t.y)*(n.x-t.x)}function k(t){for(var e=0,n=0,r=t.length,i=r-1,a=void 0,o=void 0;n<r;i=n++)e+=((o=t[i]).x-(a=t[n]).x)*(a.y+o.y);return e}function M(){return\"undefined\"!=typeof WorkerGlobalScope&&\"undefined\"!=typeof self&&self instanceof WorkerGlobalScope}function T(t){var e={};if(t.replace(/(?:^|(?:\\s*\\,\\s*))([^\\x00-\\x20\\(\\)<>@\\,;\\:\\\\\"\\/\\[\\]\\?\\=\\{\\}\\x7F]+)(?:\\=(?:([^\\x00-\\x20\\(\\)<>@\\,;\\:\\\\\"\\/\\[\\]\\?\\=\\{\\}\\x7F]+)|(?:\\\"((?:[^\"\\\\]|\\\\.)*)\\\")))?/g,(function(t,n,r,i){var a=r||i;return e[n]=!a||a.toLowerCase(),\"\"})),e[\"max-age\"]){var n=parseInt(e[\"max-age\"],10);isNaN(n)?delete e[\"max-age\"]:e[\"max-age\"]=n}return e}var S=null;function A(t){if(null==S){var e=t.navigator?t.navigator.userAgent:null;S=!!t.safari||!(!e||!(/\\b(iPad|iPhone|iPod)\\b/.test(e)||e.match(\"Safari\")&&!e.match(\"Chrome\")))}return S}function L(t){try{var e=self[t];return e.setItem(\"_mapbox_test_\",1),e.removeItem(\"_mapbox_test_\"),!0}catch(t){return!1}}var C,E,O,D,I=self.performance&&self.performance.now?self.performance.now.bind(self.performance):Date.now.bind(Date),P=self.requestAnimationFrame||self.mozRequestAnimationFrame||self.webkitRequestAnimationFrame||self.msRequestAnimationFrame,R=self.cancelAnimationFrame||self.mozCancelAnimationFrame||self.webkitCancelAnimationFrame||self.msCancelAnimationFrame,z={now:I,frame:function(t){var e=P(t);return{cancel:function(){return R(e)}}},getImageData:function(t,e){void 0===e&&(e=0);var n=self.document.createElement(\"canvas\"),r=n.getContext(\"2d\");if(!r)throw new Error(\"failed to create canvas 2d context\");return n.width=t.width,n.height=t.height,r.drawImage(t,0,0,t.width,t.height),r.getImageData(-e,-e,t.width+2*e,t.height+2*e)},resolveURL:function(t){return C||(C=self.document.createElement(\"a\")),C.href=t,C.href},hardwareConcurrency:self.navigator.hardwareConcurrency||4,get devicePixelRatio(){return self.devicePixelRatio},get prefersReducedMotion(){return!!self.matchMedia&&(null==E&&(E=self.matchMedia(\"(prefers-reduced-motion: reduce)\")),E.matches)}},j={API_URL:\"https://api.mapbox.com\",get EVENTS_URL(){return this.API_URL?0===this.API_URL.indexOf(\"https://api.mapbox.cn\")?\"https://events.mapbox.cn/events/v2\":0===this.API_URL.indexOf(\"https://api.mapbox.com\")?\"https://events.mapbox.com/events/v2\":null:null},FEEDBACK_URL:\"https://apps.mapbox.com/feedback\",REQUIRE_ACCESS_TOKEN:!0,ACCESS_TOKEN:null,MAX_PARALLEL_IMAGE_REQUESTS:16},F={supported:!1,testSupport:function(t){!N&&D&&(B?Y(t):O=t)}},N=!1,B=!1;function Y(t){var e=t.createTexture();t.bindTexture(t.TEXTURE_2D,e);try{if(t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,D),t.isContextLost())return;F.supported=!0}catch(t){}t.deleteTexture(e),N=!0}self.document&&((D=self.document.createElement(\"img\")).onload=function(){O&&Y(O),O=null,B=!0},D.onerror=function(){N=!0,O=null},D.src=\"data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAQAAAAfQ//73v/+BiOh/AAA=\");var H=\"01\",V=function(t,e){this._transformRequestFn=t,this._customAccessToken=e,this._createSkuToken()};function U(t){return 0===t.indexOf(\"mapbox:\")}V.prototype._createSkuToken=function(){var t=function(){for(var t=\"\",e=0;e<10;e++)t+=\"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\"[Math.floor(62*Math.random())];return{token:[\"1\",H,t].join(\"\"),tokenExpiresAt:Date.now()+432e5}}();this._skuToken=t.token,this._skuTokenExpiresAt=t.tokenExpiresAt},V.prototype._isSkuTokenExpired=function(){return Date.now()>this._skuTokenExpiresAt},V.prototype.transformRequest=function(t,e){return this._transformRequestFn&&this._transformRequestFn(t,e)||{url:t}},V.prototype.normalizeStyleURL=function(t,e){if(!U(t))return t;var n=X(t);return n.path=\"/styles/v1\"+n.path,this._makeAPIURL(n,this._customAccessToken||e)},V.prototype.normalizeGlyphsURL=function(t,e){if(!U(t))return t;var n=X(t);return n.path=\"/fonts/v1\"+n.path,this._makeAPIURL(n,this._customAccessToken||e)},V.prototype.normalizeSourceURL=function(t,e){if(!U(t))return t;var n=X(t);return n.path=\"/v4/\"+n.authority+\".json\",n.params.push(\"secure\"),this._makeAPIURL(n,this._customAccessToken||e)},V.prototype.normalizeSpriteURL=function(t,e,n,r){var i=X(t);return U(t)?(i.path=\"/styles/v1\"+i.path+\"/sprite\"+e+n,this._makeAPIURL(i,this._customAccessToken||r)):(i.path+=\"\"+e+n,Z(i))},V.prototype.normalizeTileURL=function(t,e){if(this._isSkuTokenExpired()&&this._createSkuToken(),t&&!U(t))return t;var n=X(t);n.path=n.path.replace(/(\\.(png|jpg)\\d*)(?=$)/,(z.devicePixelRatio>=2||512===e?\"@2x\":\"\")+(F.supported?\".webp\":\"$1\")),n.path=n.path.replace(/^.+\\/v4\\//,\"/\"),n.path=\"/v4\"+n.path;var r=this._customAccessToken||function(t){for(var e=0,n=t;e<n.length;e+=1){var r=n[e].match(/^access_token=(.*)$/);if(r)return r[1]}return null}(n.params)||j.ACCESS_TOKEN;return j.REQUIRE_ACCESS_TOKEN&&r&&this._skuToken&&n.params.push(\"sku=\"+this._skuToken),this._makeAPIURL(n,r)},V.prototype.canonicalizeTileURL=function(t,e){var n=X(t);if(!n.path.match(/(^\\/v4\\/)/)||!n.path.match(/\\.[\\w]+$/))return t;var r=\"mapbox://tiles/\";r+=n.path.replace(\"/v4/\",\"\");var i=n.params;return e&&(i=i.filter((function(t){return!t.match(/^access_token=/)}))),i.length&&(r+=\"?\"+i.join(\"&\")),r},V.prototype.canonicalizeTileset=function(t,e){for(var n=!!e&&U(e),r=[],i=0,a=t.tiles||[];i<a.length;i+=1){var o=a[i];q(o)?r.push(this.canonicalizeTileURL(o,n)):r.push(o)}return r},V.prototype._makeAPIURL=function(t,e){var n=\"See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes\",r=X(j.API_URL);if(t.protocol=r.protocol,t.authority=r.authority,\"/\"!==r.path&&(t.path=\"\"+r.path+t.path),!j.REQUIRE_ACCESS_TOKEN)return Z(t);if(!(e=e||j.ACCESS_TOKEN))throw new Error(\"An API access token is required to use Mapbox GL. \"+n);if(\"s\"===e[0])throw new Error(\"Use a public access token (pk.*) with Mapbox GL, not a secret access token (sk.*). \"+n);return t.params=t.params.filter((function(t){return-1===t.indexOf(\"access_token\")})),t.params.push(\"access_token=\"+e),Z(t)};var W=/^((https?:)?\\/\\/)?([^\\/]+\\.)?mapbox\\.c(n|om)(\\/|\\?|$)/i;function q(t){return W.test(t)}var G=/^(\\w+):\\/\\/([^/?]*)(\\/[^?]+)?\\??(.+)?/;function X(t){var e=t.match(G);if(!e)throw new Error(\"Unable to parse URL object\");return{protocol:e[1],authority:e[2],path:e[3]||\"/\",params:e[4]?e[4].split(\"&\"):[]}}function Z(t){var e=t.params.length?\"?\"+t.params.join(\"&\"):\"\";return t.protocol+\"://\"+t.authority+t.path+e}function J(t){if(!t)return null;var e=t.split(\".\");if(!e||3!==e.length)return null;try{return JSON.parse(decodeURIComponent(self.atob(e[1]).split(\"\").map((function(t){return\"%\"+(\"00\"+t.charCodeAt(0).toString(16)).slice(-2)})).join(\"\")))}catch(t){return null}}var K=function(t){this.type=t,this.anonId=null,this.eventData={},this.queue=[],this.pendingRequest=null};K.prototype.getStorageKey=function(t){var e,n=J(j.ACCESS_TOKEN);return e=n&&n.u?self.btoa(encodeURIComponent(n.u).replace(/%([0-9A-F]{2})/g,(function(t,e){return String.fromCharCode(Number(\"0x\"+e))}))):j.ACCESS_TOKEN||\"\",t?\"mapbox.eventData.\"+t+\":\"+e:\"mapbox.eventData:\"+e},K.prototype.fetchEventData=function(){var t=L(\"localStorage\"),e=this.getStorageKey(),n=this.getStorageKey(\"uuid\");if(t)try{var r=self.localStorage.getItem(e);r&&(this.eventData=JSON.parse(r));var i=self.localStorage.getItem(n);i&&(this.anonId=i)}catch(t){x(\"Unable to read from LocalStorage\")}},K.prototype.saveEventData=function(){var t=L(\"localStorage\"),e=this.getStorageKey(),n=this.getStorageKey(\"uuid\");if(t)try{self.localStorage.setItem(n,this.anonId),Object.keys(this.eventData).length>=1&&self.localStorage.setItem(e,JSON.stringify(this.eventData))}catch(t){x(\"Unable to write to LocalStorage\")}},K.prototype.processRequests=function(t){},K.prototype.postEvent=function(t,e,n,r){var i=this;if(j.EVENTS_URL){var a=X(j.EVENTS_URL);a.params.push(\"access_token=\"+(r||j.ACCESS_TOKEN||\"\"));var o={event:this.type,created:new Date(t).toISOString(),sdkIdentifier:\"mapbox-gl-js\",sdkVersion:\"1.10.1\",skuId:H,userId:this.anonId},s=e?u(o,e):o,l={url:Z(a),headers:{\"Content-Type\":\"text/plain\"},body:JSON.stringify([s])};this.pendingRequest=_t(l,(function(t){i.pendingRequest=null,n(t),i.saveEventData(),i.processRequests(r)}))}},K.prototype.queueRequest=function(t,e){this.queue.push(t),this.processRequests(e)};var $,Q,tt=function(t){function e(){t.call(this,\"map.load\"),this.success={},this.skuToken=\"\"}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.postMapLoadEvent=function(t,e,n,r){this.skuToken=n,(j.EVENTS_URL&&r||j.ACCESS_TOKEN&&Array.isArray(t)&&t.some((function(t){return U(t)||q(t)})))&&this.queueRequest({id:e,timestamp:Date.now()},r)},e.prototype.processRequests=function(t){var e=this;if(!this.pendingRequest&&0!==this.queue.length){var n=this.queue.shift(),r=n.id,i=n.timestamp;r&&this.success[r]||(this.anonId||this.fetchEventData(),p(this.anonId)||(this.anonId=f()),this.postEvent(i,{skuToken:this.skuToken},(function(t){t||r&&(e.success[r]=!0)}),t))}},e}(K),et=new(function(t){function e(e){t.call(this,\"appUserTurnstile\"),this._customAccessToken=e}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.postTurnstileEvent=function(t,e){j.EVENTS_URL&&j.ACCESS_TOKEN&&Array.isArray(t)&&t.some((function(t){return U(t)||q(t)}))&&this.queueRequest(Date.now(),e)},e.prototype.processRequests=function(t){var e=this;if(!this.pendingRequest&&0!==this.queue.length){this.anonId&&this.eventData.lastSuccess&&this.eventData.tokenU||this.fetchEventData();var n=J(j.ACCESS_TOKEN),r=n?n.u:j.ACCESS_TOKEN,i=r!==this.eventData.tokenU;p(this.anonId)||(this.anonId=f(),i=!0);var a=this.queue.shift();if(this.eventData.lastSuccess){var o=new Date(this.eventData.lastSuccess),s=new Date(a),l=(a-this.eventData.lastSuccess)/864e5;i=i||l>=1||l<-1||o.getDate()!==s.getDate()}else i=!0;if(!i)return this.processRequests();this.postEvent(a,{\"enabled.telemetry\":!1},(function(t){t||(e.eventData.lastSuccess=a,e.eventData.tokenU=r)}),t)}},e}(K)),nt=et.postTurnstileEvent.bind(et),rt=new tt,it=rt.postMapLoadEvent.bind(rt),at=500,ot=50;function st(){self.caches&&!$&&($=self.caches.open(\"mapbox-tiles\"))}function lt(t){var e=t.indexOf(\"?\");return e<0?t:t.slice(0,e)}var ct,ut=1/0;function ht(){return null==ct&&(ct=self.OffscreenCanvas&&new self.OffscreenCanvas(1,1).getContext(\"2d\")&&\"function\"==typeof self.createImageBitmap),ct}var dt={Unknown:\"Unknown\",Style:\"Style\",Source:\"Source\",Tile:\"Tile\",Glyphs:\"Glyphs\",SpriteImage:\"SpriteImage\",SpriteJSON:\"SpriteJSON\",Image:\"Image\"};\"function\"==typeof Object.freeze&&Object.freeze(dt);var ft,pt,mt=function(t){function e(e,n,r){401===n&&q(r)&&(e+=\": you may have provided an invalid Mapbox access token. See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes\"),t.call(this,e),this.status=n,this.url=r,this.name=this.constructor.name,this.message=e}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.toString=function(){return this.name+\": \"+this.message+\" (\"+this.status+\"): \"+this.url},e}(Error),gt=M()?function(){return self.worker&&self.worker.referrer}:function(){return(\"blob:\"===self.location.protocol?self.parent:self).location.href},yt=function(t,e){if(!(/^file:/.test(n=t.url)||/^file:/.test(gt())&&!/^\\w+:/.test(n))){if(self.fetch&&self.Request&&self.AbortController&&self.Request.prototype.hasOwnProperty(\"signal\"))return function(t,e){var n,r=new self.AbortController,i=new self.Request(t.url,{method:t.method||\"GET\",body:t.body,credentials:t.credentials,headers:t.headers,referrer:gt(),signal:r.signal}),a=!1,o=!1,s=(n=i.url).indexOf(\"sku=\")>0&&q(n);\"json\"===t.type&&i.headers.set(\"Accept\",\"application/json\");var l=function(n,r,a){if(!o){if(n&&\"SecurityError\"!==n.message&&x(n),r&&a)return c(r);var l=Date.now();self.fetch(i).then((function(n){if(n.ok){var r=s?n.clone():null;return c(n,r,l)}return e(new mt(n.statusText,n.status,t.url))})).catch((function(t){20!==t.code&&e(new Error(t.message))}))}},c=function(n,r,s){(\"arrayBuffer\"===t.type?n.arrayBuffer():\"json\"===t.type?n.json():n.text()).then((function(t){o||(r&&s&&function(t,e,n){if(st(),$){var r={status:e.status,statusText:e.statusText,headers:new self.Headers};e.headers.forEach((function(t,e){return r.headers.set(e,t)}));var i=T(e.headers.get(\"Cache-Control\")||\"\");i[\"no-store\"]||(i[\"max-age\"]&&r.headers.set(\"Expires\",new Date(n+1e3*i[\"max-age\"]).toUTCString()),new Date(r.headers.get(\"Expires\")).getTime()-n<42e4||function(t,e){if(void 0===Q)try{new Response(new ReadableStream),Q=!0}catch(t){Q=!1}Q?e(t.body):t.blob().then(e)}(e,(function(e){var n=new self.Response(e,r);st(),$&&$.then((function(e){return e.put(lt(t.url),n)})).catch((function(t){return x(t.message)}))})))}}(i,r,s),a=!0,e(null,t,n.headers.get(\"Cache-Control\"),n.headers.get(\"Expires\")))})).catch((function(t){o||e(new Error(t.message))}))};return s?function(t,e){if(st(),!$)return e(null);var n=lt(t.url);$.then((function(t){t.match(n).then((function(r){var i=function(t){if(!t)return!1;var e=new Date(t.headers.get(\"Expires\")||0),n=T(t.headers.get(\"Cache-Control\")||\"\");return e>Date.now()&&!n[\"no-cache\"]}(r);t.delete(n),i&&t.put(n,r.clone()),e(null,r,i)})).catch(e)})).catch(e)}(i,l):l(null,null),{cancel:function(){o=!0,a||r.abort()}}}(t,e);if(M()&&self.worker&&self.worker.actor)return self.worker.actor.send(\"getResource\",t,e,void 0,!0)}var n;return function(t,e){var n=new self.XMLHttpRequest;for(var r in n.open(t.method||\"GET\",t.url,!0),\"arrayBuffer\"===t.type&&(n.responseType=\"arraybuffer\"),t.headers)n.setRequestHeader(r,t.headers[r]);return\"json\"===t.type&&(n.responseType=\"text\",n.setRequestHeader(\"Accept\",\"application/json\")),n.withCredentials=\"include\"===t.credentials,n.onerror=function(){e(new Error(n.statusText))},n.onload=function(){if((n.status>=200&&n.status<300||0===n.status)&&null!==n.response){var r=n.response;if(\"json\"===t.type)try{r=JSON.parse(n.response)}catch(t){return e(t)}e(null,r,n.getResponseHeader(\"Cache-Control\"),n.getResponseHeader(\"Expires\"))}else e(new mt(n.statusText,n.status,t.url))},n.send(t.body),{cancel:function(){return n.abort()}}}(t,e)},vt=function(t,e){return yt(u(t,{type:\"arrayBuffer\"}),e)},_t=function(t,e){return yt(u(t,{method:\"POST\"}),e)};ft=[],pt=0;var bt=function(t,e){if(F.supported&&(t.headers||(t.headers={}),t.headers.accept=\"image/webp,*/*\"),pt>=j.MAX_PARALLEL_IMAGE_REQUESTS){var n={requestParameters:t,callback:e,cancelled:!1,cancel:function(){this.cancelled=!0}};return ft.push(n),n}pt++;var r=!1,i=function(){if(!r)for(r=!0,pt--;ft.length&&pt<j.MAX_PARALLEL_IMAGE_REQUESTS;){var t=ft.shift();t.cancelled||(t.cancel=bt(t.requestParameters,t.callback).cancel)}},a=vt(t,(function(t,n,r,a){i(),t?e(t):n&&(ht()?function(t,e){var n=new self.Blob([new Uint8Array(t)],{type:\"image/png\"});self.createImageBitmap(n).then((function(t){e(null,t)})).catch((function(t){e(new Error(\"Could not load image because of \"+t.message+\". Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported.\"))}))}(n,e):function(t,e,n,r){var i=new self.Image,a=self.URL;i.onload=function(){e(null,i),a.revokeObjectURL(i.src)},i.onerror=function(){return e(new Error(\"Could not load image. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported.\"))};var o=new self.Blob([new Uint8Array(t)],{type:\"image/png\"});i.cacheControl=n,i.expires=r,i.src=t.byteLength?a.createObjectURL(o):\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=\"}(n,e,r,a))}));return{cancel:function(){a.cancel(),i()}}};function xt(t,e,n){n[t]&&-1!==n[t].indexOf(e)||(n[t]=n[t]||[],n[t].push(e))}function wt(t,e,n){if(n&&n[t]){var r=n[t].indexOf(e);-1!==r&&n[t].splice(r,1)}}var kt=function(t,e){void 0===e&&(e={}),u(this,e),this.type=t},Mt=function(t){function e(e,n){void 0===n&&(n={}),t.call(this,\"error\",u({error:e},n))}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e}(kt),Tt=function(){};Tt.prototype.on=function(t,e){return this._listeners=this._listeners||{},xt(t,e,this._listeners),this},Tt.prototype.off=function(t,e){return wt(t,e,this._listeners),wt(t,e,this._oneTimeListeners),this},Tt.prototype.once=function(t,e){return this._oneTimeListeners=this._oneTimeListeners||{},xt(t,e,this._oneTimeListeners),this},Tt.prototype.fire=function(t,e){\"string\"==typeof t&&(t=new kt(t,e||{}));var n=t.type;if(this.listens(n)){t.target=this;for(var r=0,i=this._listeners&&this._listeners[n]?this._listeners[n].slice():[];r<i.length;r+=1)i[r].call(this,t);for(var a=0,o=this._oneTimeListeners&&this._oneTimeListeners[n]?this._oneTimeListeners[n].slice():[];a<o.length;a+=1){var s=o[a];wt(n,s,this._oneTimeListeners),s.call(this,t)}var l=this._eventedParent;l&&(u(t,\"function\"==typeof this._eventedParentData?this._eventedParentData():this._eventedParentData),l.fire(t))}else t instanceof Mt&&console.error(t.error);return this},Tt.prototype.listens=function(t){return this._listeners&&this._listeners[t]&&this._listeners[t].length>0||this._oneTimeListeners&&this._oneTimeListeners[t]&&this._oneTimeListeners[t].length>0||this._eventedParent&&this._eventedParent.listens(t)},Tt.prototype.setEventedParent=function(t,e){return this._eventedParent=t,this._eventedParentData=e,this};var St={$version:8,$root:{version:{required:!0,type:\"enum\",values:[8]},name:{type:\"string\"},metadata:{type:\"*\"},center:{type:\"array\",value:\"number\"},zoom:{type:\"number\"},bearing:{type:\"number\",default:0,period:360,units:\"degrees\"},pitch:{type:\"number\",default:0,units:\"degrees\"},light:{type:\"light\"},sources:{required:!0,type:\"sources\"},sprite:{type:\"string\"},glyphs:{type:\"string\"},transition:{type:\"transition\"},layers:{required:!0,type:\"array\",value:\"layer\"}},sources:{\"*\":{type:\"source\"}},source:[\"source_vector\",\"source_raster\",\"source_raster_dem\",\"source_geojson\",\"source_video\",\"source_image\"],source_vector:{type:{required:!0,type:\"enum\",values:{vector:{}}},url:{type:\"string\"},tiles:{type:\"array\",value:\"string\"},bounds:{type:\"array\",value:\"number\",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:\"enum\",values:{xyz:{},tms:{}},default:\"xyz\"},minzoom:{type:\"number\",default:0},maxzoom:{type:\"number\",default:22},attribution:{type:\"string\"},promoteId:{type:\"promoteId\"},\"*\":{type:\"*\"}},source_raster:{type:{required:!0,type:\"enum\",values:{raster:{}}},url:{type:\"string\"},tiles:{type:\"array\",value:\"string\"},bounds:{type:\"array\",value:\"number\",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:\"number\",default:0},maxzoom:{type:\"number\",default:22},tileSize:{type:\"number\",default:512,units:\"pixels\"},scheme:{type:\"enum\",values:{xyz:{},tms:{}},default:\"xyz\"},attribution:{type:\"string\"},\"*\":{type:\"*\"}},source_raster_dem:{type:{required:!0,type:\"enum\",values:{\"raster-dem\":{}}},url:{type:\"string\"},tiles:{type:\"array\",value:\"string\"},bounds:{type:\"array\",value:\"number\",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:\"number\",default:0},maxzoom:{type:\"number\",default:22},tileSize:{type:\"number\",default:512,units:\"pixels\"},attribution:{type:\"string\"},encoding:{type:\"enum\",values:{terrarium:{},mapbox:{}},default:\"mapbox\"},\"*\":{type:\"*\"}},source_geojson:{type:{required:!0,type:\"enum\",values:{geojson:{}}},data:{type:\"*\"},maxzoom:{type:\"number\",default:18},attribution:{type:\"string\"},buffer:{type:\"number\",default:128,maximum:512,minimum:0},tolerance:{type:\"number\",default:.375},cluster:{type:\"boolean\",default:!1},clusterRadius:{type:\"number\",default:50,minimum:0},clusterMaxZoom:{type:\"number\"},clusterProperties:{type:\"*\"},lineMetrics:{type:\"boolean\",default:!1},generateId:{type:\"boolean\",default:!1},promoteId:{type:\"promoteId\"}},source_video:{type:{required:!0,type:\"enum\",values:{video:{}}},urls:{required:!0,type:\"array\",value:\"string\"},coordinates:{required:!0,type:\"array\",length:4,value:{type:\"array\",length:2,value:\"number\"}}},source_image:{type:{required:!0,type:\"enum\",values:{image:{}}},url:{required:!0,type:\"string\"},coordinates:{required:!0,type:\"array\",length:4,value:{type:\"array\",length:2,value:\"number\"}}},layer:{id:{type:\"string\",required:!0},type:{type:\"enum\",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},\"fill-extrusion\":{},raster:{},hillshade:{},background:{}},required:!0},metadata:{type:\"*\"},source:{type:\"string\"},\"source-layer\":{type:\"string\"},minzoom:{type:\"number\",minimum:0,maximum:24},maxzoom:{type:\"number\",minimum:0,maximum:24},filter:{type:\"filter\"},layout:{type:\"layout\"},paint:{type:\"paint\"}},layout:[\"layout_fill\",\"layout_line\",\"layout_circle\",\"layout_heatmap\",\"layout_fill-extrusion\",\"layout_symbol\",\"layout_raster\",\"layout_hillshade\",\"layout_background\"],layout_background:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_fill:{\"fill-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_circle:{\"circle-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_heatmap:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},\"layout_fill-extrusion\":{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_line:{\"line-cap\":{type:\"enum\",values:{butt:{},round:{},square:{}},default:\"butt\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-join\":{type:\"enum\",values:{bevel:{},round:{},miter:{}},default:\"miter\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-miter-limit\":{type:\"number\",default:2,requires:[{\"line-join\":\"miter\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-round-limit\":{type:\"number\",default:1.05,requires:[{\"line-join\":\"round\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_symbol:{\"symbol-placement\":{type:\"enum\",values:{point:{},line:{},\"line-center\":{}},default:\"point\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-spacing\":{type:\"number\",default:250,minimum:1,units:\"pixels\",requires:[{\"symbol-placement\":\"line\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-avoid-edges\":{type:\"boolean\",default:!1,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"symbol-z-order\":{type:\"enum\",values:{auto:{},\"viewport-y\":{},source:{}},default:\"auto\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-allow-overlap\":{type:\"boolean\",default:!1,requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-ignore-placement\":{type:\"boolean\",default:!1,requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-optional\":{type:\"boolean\",default:!1,requires:[\"icon-image\",\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-rotation-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-size\":{type:\"number\",default:1,minimum:0,units:\"factor of the original icon size\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-text-fit\":{type:\"enum\",values:{none:{},width:{},height:{},both:{}},default:\"none\",requires:[\"icon-image\",\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-text-fit-padding\":{type:\"array\",value:\"number\",length:4,default:[0,0,0,0],units:\"pixels\",requires:[\"icon-image\",\"text-field\",{\"icon-text-fit\":[\"both\",\"width\",\"height\"]}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-image\":{type:\"resolvedImage\",tokens:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-rotate\":{type:\"number\",default:0,period:360,units:\"degrees\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-padding\":{type:\"number\",default:2,minimum:0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-keep-upright\":{type:\"boolean\",default:!1,requires:[\"icon-image\",{\"icon-rotation-alignment\":\"map\"},{\"symbol-placement\":[\"line\",\"line-center\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-offset\":{type:\"array\",value:\"number\",length:2,default:[0,0],requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-anchor\":{type:\"enum\",values:{center:{},left:{},right:{},top:{},bottom:{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},default:\"center\",requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-pitch-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-pitch-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-rotation-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-field\":{type:\"formatted\",default:\"\",tokens:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-font\":{type:\"array\",value:\"string\",default:[\"Open Sans Regular\",\"Arial Unicode MS Regular\"],requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-size\":{type:\"number\",default:16,minimum:0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-max-width\":{type:\"number\",default:10,minimum:0,units:\"ems\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-line-height\":{type:\"number\",default:1.2,units:\"ems\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-letter-spacing\":{type:\"number\",default:0,units:\"ems\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-justify\":{type:\"enum\",values:{auto:{},left:{},center:{},right:{}},default:\"center\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-radial-offset\":{type:\"number\",units:\"ems\",default:0,requires:[\"text-field\"],\"property-type\":\"data-driven\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]}},\"text-variable-anchor\":{type:\"array\",value:\"enum\",values:{center:{},left:{},right:{},top:{},bottom:{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},requires:[\"text-field\",{\"symbol-placement\":[\"point\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-anchor\":{type:\"enum\",values:{center:{},left:{},right:{},top:{},bottom:{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},default:\"center\",requires:[\"text-field\",{\"!\":\"text-variable-anchor\"}],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-max-angle\":{type:\"number\",default:45,units:\"degrees\",requires:[\"text-field\",{\"symbol-placement\":[\"line\",\"line-center\"]}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-writing-mode\":{type:\"array\",value:\"enum\",values:{horizontal:{},vertical:{}},requires:[\"text-field\",{\"symbol-placement\":[\"point\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-rotate\":{type:\"number\",default:0,period:360,units:\"degrees\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-padding\":{type:\"number\",default:2,minimum:0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-keep-upright\":{type:\"boolean\",default:!0,requires:[\"text-field\",{\"text-rotation-alignment\":\"map\"},{\"symbol-placement\":[\"line\",\"line-center\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-transform\":{type:\"enum\",values:{none:{},uppercase:{},lowercase:{}},default:\"none\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-offset\":{type:\"array\",value:\"number\",units:\"ems\",length:2,default:[0,0],requires:[\"text-field\",{\"!\":\"text-radial-offset\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-allow-overlap\":{type:\"boolean\",default:!1,requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-ignore-placement\":{type:\"boolean\",default:!1,requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-optional\":{type:\"boolean\",default:!1,requires:[\"text-field\",\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_raster:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_hillshade:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},filter:{type:\"array\",value:\"*\"},filter_operator:{type:\"enum\",values:{\"==\":{},\"!=\":{},\">\":{},\">=\":{},\"<\":{},\"<=\":{},in:{},\"!in\":{},all:{},any:{},none:{},has:{},\"!has\":{},within:{}}},geometry_type:{type:\"enum\",values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:\"expression\"},stops:{type:\"array\",value:\"function_stop\"},base:{type:\"number\",default:1,minimum:0},property:{type:\"string\",default:\"$zoom\"},type:{type:\"enum\",values:{identity:{},exponential:{},interval:{},categorical:{}},default:\"exponential\"},colorSpace:{type:\"enum\",values:{rgb:{},lab:{},hcl:{}},default:\"rgb\"},default:{type:\"*\",required:!1}},function_stop:{type:\"array\",minimum:0,maximum:24,value:[\"number\",\"color\"],length:2},expression:{type:\"array\",value:\"*\",minimum:1},expression_name:{type:\"enum\",values:{let:{group:\"Variable binding\"},var:{group:\"Variable binding\"},literal:{group:\"Types\"},array:{group:\"Types\"},at:{group:\"Lookup\"},in:{group:\"Lookup\"},\"index-of\":{group:\"Lookup\"},slice:{group:\"Lookup\"},case:{group:\"Decision\"},match:{group:\"Decision\"},coalesce:{group:\"Decision\"},step:{group:\"Ramps, scales, curves\"},interpolate:{group:\"Ramps, scales, curves\"},\"interpolate-hcl\":{group:\"Ramps, scales, curves\"},\"interpolate-lab\":{group:\"Ramps, scales, curves\"},ln2:{group:\"Math\"},pi:{group:\"Math\"},e:{group:\"Math\"},typeof:{group:\"Types\"},string:{group:\"Types\"},number:{group:\"Types\"},boolean:{group:\"Types\"},object:{group:\"Types\"},collator:{group:\"Types\"},format:{group:\"Types\"},image:{group:\"Types\"},\"number-format\":{group:\"Types\"},\"to-string\":{group:\"Types\"},\"to-number\":{group:\"Types\"},\"to-boolean\":{group:\"Types\"},\"to-rgba\":{group:\"Color\"},\"to-color\":{group:\"Types\"},rgb:{group:\"Color\"},rgba:{group:\"Color\"},get:{group:\"Lookup\"},has:{group:\"Lookup\"},length:{group:\"Lookup\"},properties:{group:\"Feature data\"},\"feature-state\":{group:\"Feature data\"},\"geometry-type\":{group:\"Feature data\"},id:{group:\"Feature data\"},zoom:{group:\"Zoom\"},\"heatmap-density\":{group:\"Heatmap\"},\"line-progress\":{group:\"Feature data\"},accumulated:{group:\"Feature data\"},\"+\":{group:\"Math\"},\"*\":{group:\"Math\"},\"-\":{group:\"Math\"},\"/\":{group:\"Math\"},\"%\":{group:\"Math\"},\"^\":{group:\"Math\"},sqrt:{group:\"Math\"},log10:{group:\"Math\"},ln:{group:\"Math\"},log2:{group:\"Math\"},sin:{group:\"Math\"},cos:{group:\"Math\"},tan:{group:\"Math\"},asin:{group:\"Math\"},acos:{group:\"Math\"},atan:{group:\"Math\"},min:{group:\"Math\"},max:{group:\"Math\"},round:{group:\"Math\"},abs:{group:\"Math\"},ceil:{group:\"Math\"},floor:{group:\"Math\"},distance:{group:\"Math\"},\"==\":{group:\"Decision\"},\"!=\":{group:\"Decision\"},\">\":{group:\"Decision\"},\"<\":{group:\"Decision\"},\">=\":{group:\"Decision\"},\"<=\":{group:\"Decision\"},all:{group:\"Decision\"},any:{group:\"Decision\"},\"!\":{group:\"Decision\"},within:{group:\"Decision\"},\"is-supported-script\":{group:\"String\"},upcase:{group:\"String\"},downcase:{group:\"String\"},concat:{group:\"String\"},\"resolved-locale\":{group:\"String\"}}},light:{anchor:{type:\"enum\",default:\"viewport\",values:{map:{},viewport:{}},\"property-type\":\"data-constant\",transition:!1,expression:{interpolated:!1,parameters:[\"zoom\"]}},position:{type:\"array\",default:[1.15,210,30],length:3,value:\"number\",\"property-type\":\"data-constant\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]}},color:{type:\"color\",\"property-type\":\"data-constant\",default:\"#ffffff\",expression:{interpolated:!0,parameters:[\"zoom\"]},transition:!0},intensity:{type:\"number\",\"property-type\":\"data-constant\",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:[\"zoom\"]},transition:!0}},paint:[\"paint_fill\",\"paint_line\",\"paint_circle\",\"paint_heatmap\",\"paint_fill-extrusion\",\"paint_symbol\",\"paint_raster\",\"paint_hillshade\",\"paint_background\"],paint_fill:{\"fill-antialias\":{type:\"boolean\",default:!0,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"fill-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-outline-color\":{type:\"color\",transition:!0,requires:[{\"!\":\"fill-pattern\"},{\"fill-antialias\":!0}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"fill-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"cross-faded-data-driven\"}},\"paint_fill-extrusion\":{\"fill-extrusion-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"fill-extrusion-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"fill-extrusion-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"cross-faded-data-driven\"},\"fill-extrusion-height\":{type:\"number\",default:0,minimum:0,units:\"meters\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-base\":{type:\"number\",default:0,minimum:0,units:\"meters\",transition:!0,requires:[\"fill-extrusion-height\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-vertical-gradient\":{type:\"boolean\",default:!0,transition:!1,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_line:{\"line-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"line-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"line-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-width\":{type:\"number\",default:1,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-gap-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-offset\":{type:\"number\",default:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-blur\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-dasharray\":{type:\"array\",value:\"number\",minimum:0,transition:!0,units:\"line widths\",requires:[{\"!\":\"line-pattern\"}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"cross-faded\"},\"line-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"cross-faded-data-driven\"},\"line-gradient\":{type:\"color\",transition:!1,requires:[{\"!\":\"line-dasharray\"},{\"!\":\"line-pattern\"},{source:\"geojson\",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:[\"line-progress\"]},\"property-type\":\"color-ramp\"}},paint_circle:{\"circle-radius\":{type:\"number\",default:5,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-blur\":{type:\"number\",default:0,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"circle-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-pitch-scale\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-pitch-alignment\":{type:\"enum\",values:{map:{},viewport:{}},default:\"viewport\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-stroke-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-stroke-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-stroke-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"}},paint_heatmap:{\"heatmap-radius\":{type:\"number\",default:30,minimum:1,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"heatmap-weight\":{type:\"number\",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"heatmap-intensity\":{type:\"number\",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"heatmap-color\":{type:\"color\",default:[\"interpolate\",[\"linear\"],[\"heatmap-density\"],0,\"rgba(0, 0, 255, 0)\",.1,\"royalblue\",.3,\"cyan\",.5,\"lime\",.7,\"yellow\",1,\"red\"],transition:!1,expression:{interpolated:!0,parameters:[\"heatmap-density\"]},\"property-type\":\"color-ramp\"},\"heatmap-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_symbol:{\"icon-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-color\":{type:\"color\",default:\"rgba(0, 0, 0, 0)\",transition:!0,requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-blur\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"icon-image\",\"icon-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-color\":{type:\"color\",default:\"#000000\",transition:!0,overridable:!0,requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-color\":{type:\"color\",default:\"rgba(0, 0, 0, 0)\",transition:!0,requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-blur\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"text-field\",\"text-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_raster:{\"raster-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-hue-rotate\":{type:\"number\",default:0,period:360,transition:!0,units:\"degrees\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-brightness-min\":{type:\"number\",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-brightness-max\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-saturation\":{type:\"number\",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-contrast\":{type:\"number\",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-resampling\":{type:\"enum\",values:{linear:{},nearest:{}},default:\"linear\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-fade-duration\":{type:\"number\",default:300,minimum:0,transition:!1,units:\"milliseconds\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_hillshade:{\"hillshade-illumination-direction\":{type:\"number\",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-illumination-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"viewport\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-exaggeration\":{type:\"number\",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-shadow-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-highlight-color\":{type:\"color\",default:\"#FFFFFF\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-accent-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_background:{\"background-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"background-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"background-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"cross-faded\"},\"background-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},transition:{duration:{type:\"number\",default:300,minimum:0,units:\"milliseconds\"},delay:{type:\"number\",default:0,minimum:0,units:\"milliseconds\"}},\"property-type\":{\"data-driven\":{type:\"property-type\"},\"cross-faded\":{type:\"property-type\"},\"cross-faded-data-driven\":{type:\"property-type\"},\"color-ramp\":{type:\"property-type\"},\"data-constant\":{type:\"property-type\"},constant:{type:\"property-type\"}},promoteId:{\"*\":{type:\"string\"}}},At=function(t,e,n,r){this.message=(t?t+\": \":\"\")+n,r&&(this.identifier=r),null!=e&&e.__line__&&(this.line=e.__line__)};function Lt(t){var e=t.value;return e?[new At(t.key,e,\"constants have been deprecated as of v8\")]:[]}function Ct(t){for(var e=[],n=arguments.length-1;n-- >0;)e[n]=arguments[n+1];for(var r=0,i=e;r<i.length;r+=1){var a=i[r];for(var o in a)t[o]=a[o]}return t}function Et(t){return t instanceof Number||t instanceof String||t instanceof Boolean?t.valueOf():t}function Ot(t){if(Array.isArray(t))return t.map(Ot);if(t instanceof Object&&!(t instanceof Number||t instanceof String||t instanceof Boolean)){var e={};for(var n in t)e[n]=Ot(t[n]);return e}return Et(t)}var Dt=function(t){function e(e,n){t.call(this,n),this.message=n,this.key=e}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e}(Error),It=function(t,e){void 0===e&&(e=[]),this.parent=t,this.bindings={};for(var n=0,r=e;n<r.length;n+=1){var i=r[n];this.bindings[i[0]]=i[1]}};It.prototype.concat=function(t){return new It(this,t)},It.prototype.get=function(t){if(this.bindings[t])return this.bindings[t];if(this.parent)return this.parent.get(t);throw new Error(t+\" not found in scope.\")},It.prototype.has=function(t){return!!this.bindings[t]||!!this.parent&&this.parent.has(t)};var Pt={kind:\"null\"},Rt={kind:\"number\"},zt={kind:\"string\"},jt={kind:\"boolean\"},Ft={kind:\"color\"},Nt={kind:\"object\"},Bt={kind:\"value\"},Yt={kind:\"collator\"},Ht={kind:\"formatted\"},Vt={kind:\"resolvedImage\"};function Ut(t,e){return{kind:\"array\",itemType:t,N:e}}function Wt(t){if(\"array\"===t.kind){var e=Wt(t.itemType);return\"number\"==typeof t.N?\"array<\"+e+\", \"+t.N+\">\":\"value\"===t.itemType.kind?\"array\":\"array<\"+e+\">\"}return t.kind}var qt=[Pt,Rt,zt,jt,Ft,Ht,Nt,Ut(Bt),Vt];function Gt(t,e){if(\"error\"===e.kind)return null;if(\"array\"===t.kind){if(\"array\"===e.kind&&(0===e.N&&\"value\"===e.itemType.kind||!Gt(t.itemType,e.itemType))&&(\"number\"!=typeof t.N||t.N===e.N))return null}else{if(t.kind===e.kind)return null;if(\"value\"===t.kind)for(var n=0,r=qt;n<r.length;n+=1)if(!Gt(r[n],e))return null}return\"Expected \"+Wt(t)+\" but found \"+Wt(e)+\" instead.\"}function Xt(t,e){return e.some((function(e){return e.kind===t.kind}))}function Zt(t,e){return e.some((function(e){return\"null\"===e?null===t:\"array\"===e?Array.isArray(t):\"object\"===e?t&&!Array.isArray(t)&&\"object\"==typeof t:e===typeof t}))}var Jt=e((function(t,e){var n={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],rebeccapurple:[102,51,153,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function r(t){return(t=Math.round(t))<0?0:t>255?255:t}function i(t){return r(\"%\"===t[t.length-1]?parseFloat(t)/100*255:parseInt(t))}function a(t){return(e=\"%\"===t[t.length-1]?parseFloat(t)/100:parseFloat(t))<0?0:e>1?1:e;var e}function o(t,e,n){return n<0?n+=1:n>1&&(n-=1),6*n<1?t+(e-t)*n*6:2*n<1?e:3*n<2?t+(e-t)*(2/3-n)*6:t}try{e.parseCSSColor=function(t){var e,s=t.replace(/ /g,\"\").toLowerCase();if(s in n)return n[s].slice();if(\"#\"===s[0])return 4===s.length?(e=parseInt(s.substr(1),16))>=0&&e<=4095?[(3840&e)>>4|(3840&e)>>8,240&e|(240&e)>>4,15&e|(15&e)<<4,1]:null:7===s.length&&(e=parseInt(s.substr(1),16))>=0&&e<=16777215?[(16711680&e)>>16,(65280&e)>>8,255&e,1]:null;var l=s.indexOf(\"(\"),c=s.indexOf(\")\");if(-1!==l&&c+1===s.length){var u=s.substr(0,l),h=s.substr(l+1,c-(l+1)).split(\",\"),d=1;switch(u){case\"rgba\":if(4!==h.length)return null;d=a(h.pop());case\"rgb\":return 3!==h.length?null:[i(h[0]),i(h[1]),i(h[2]),d];case\"hsla\":if(4!==h.length)return null;d=a(h.pop());case\"hsl\":if(3!==h.length)return null;var f=(parseFloat(h[0])%360+360)%360/360,p=a(h[1]),m=a(h[2]),g=m<=.5?m*(p+1):m+p-m*p,y=2*m-g;return[r(255*o(y,g,f+1/3)),r(255*o(y,g,f)),r(255*o(y,g,f-1/3)),d];default:return null}}return null}}catch(t){}})).parseCSSColor,Kt=function(t,e,n,r){void 0===r&&(r=1),this.r=t,this.g=e,this.b=n,this.a=r};Kt.parse=function(t){if(t){if(t instanceof Kt)return t;if(\"string\"==typeof t){var e=Jt(t);if(e)return new Kt(e[0]/255*e[3],e[1]/255*e[3],e[2]/255*e[3],e[3])}}},Kt.prototype.toString=function(){var t=this.toArray(),e=t[1],n=t[2],r=t[3];return\"rgba(\"+Math.round(t[0])+\",\"+Math.round(e)+\",\"+Math.round(n)+\",\"+r+\")\"},Kt.prototype.toArray=function(){var t=this.a;return 0===t?[0,0,0,0]:[255*this.r/t,255*this.g/t,255*this.b/t,t]},Kt.black=new Kt(0,0,0,1),Kt.white=new Kt(1,1,1,1),Kt.transparent=new Kt(0,0,0,0),Kt.red=new Kt(1,0,0,1);var $t=function(t,e,n){this.sensitivity=t?e?\"variant\":\"case\":e?\"accent\":\"base\",this.locale=n,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:\"search\"})};$t.prototype.compare=function(t,e){return this.collator.compare(t,e)},$t.prototype.resolvedLocale=function(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale};var Qt=function(t,e,n,r,i){this.text=t,this.image=e,this.scale=n,this.fontStack=r,this.textColor=i},te=function(t){this.sections=t};te.fromString=function(t){return new te([new Qt(t,null,null,null,null)])},te.prototype.isEmpty=function(){return 0===this.sections.length||!this.sections.some((function(t){return 0!==t.text.length||t.image&&0!==t.image.name.length}))},te.factory=function(t){return t instanceof te?t:te.fromString(t)},te.prototype.toString=function(){return 0===this.sections.length?\"\":this.sections.map((function(t){return t.text})).join(\"\")},te.prototype.serialize=function(){for(var t=[\"format\"],e=0,n=this.sections;e<n.length;e+=1){var r=n[e];if(r.image)t.push([\"image\",r.image.name]);else{t.push(r.text);var i={};r.fontStack&&(i[\"text-font\"]=[\"literal\",r.fontStack.split(\",\")]),r.scale&&(i[\"font-scale\"]=r.scale),r.textColor&&(i[\"text-color\"]=[\"rgba\"].concat(r.textColor.toArray())),t.push(i)}}return t};var ee=function(t){this.name=t.name,this.available=t.available};function ne(t,e,n,r){return\"number\"==typeof t&&t>=0&&t<=255&&\"number\"==typeof e&&e>=0&&e<=255&&\"number\"==typeof n&&n>=0&&n<=255?void 0===r||\"number\"==typeof r&&r>=0&&r<=1?null:\"Invalid rgba value [\"+[t,e,n,r].join(\", \")+\"]: 'a' must be between 0 and 1.\":\"Invalid rgba value [\"+(\"number\"==typeof r?[t,e,n,r]:[t,e,n]).join(\", \")+\"]: 'r', 'g', and 'b' must be between 0 and 255.\"}function re(t){if(null===t)return!0;if(\"string\"==typeof t)return!0;if(\"boolean\"==typeof t)return!0;if(\"number\"==typeof t)return!0;if(t instanceof Kt)return!0;if(t instanceof $t)return!0;if(t instanceof te)return!0;if(t instanceof ee)return!0;if(Array.isArray(t)){for(var e=0,n=t;e<n.length;e+=1)if(!re(n[e]))return!1;return!0}if(\"object\"==typeof t){for(var r in t)if(!re(t[r]))return!1;return!0}return!1}function ie(t){if(null===t)return Pt;if(\"string\"==typeof t)return zt;if(\"boolean\"==typeof t)return jt;if(\"number\"==typeof t)return Rt;if(t instanceof Kt)return Ft;if(t instanceof $t)return Yt;if(t instanceof te)return Ht;if(t instanceof ee)return Vt;if(Array.isArray(t)){for(var e,n=t.length,r=0,i=t;r<i.length;r+=1){var a=ie(i[r]);if(e){if(e===a)continue;e=Bt;break}e=a}return Ut(e||Bt,n)}return Nt}function ae(t){var e=typeof t;return null===t?\"\":\"string\"===e||\"number\"===e||\"boolean\"===e?String(t):t instanceof Kt||t instanceof te||t instanceof ee?t.toString():JSON.stringify(t)}ee.prototype.toString=function(){return this.name},ee.fromString=function(t){return t?new ee({name:t,available:!1}):null},ee.prototype.serialize=function(){return[\"image\",this.name]};var oe=function(t,e){this.type=t,this.value=e};oe.parse=function(t,e){if(2!==t.length)return e.error(\"'literal' expression requires exactly one argument, but found \"+(t.length-1)+\" instead.\");if(!re(t[1]))return e.error(\"invalid value\");var n=t[1],r=ie(n),i=e.expectedType;return\"array\"!==r.kind||0!==r.N||!i||\"array\"!==i.kind||\"number\"==typeof i.N&&0!==i.N||(r=i),new oe(r,n)},oe.prototype.evaluate=function(){return this.value},oe.prototype.eachChild=function(){},oe.prototype.outputDefined=function(){return!0},oe.prototype.serialize=function(){return\"array\"===this.type.kind||\"object\"===this.type.kind?[\"literal\",this.value]:this.value instanceof Kt?[\"rgba\"].concat(this.value.toArray()):this.value instanceof te?this.value.serialize():this.value};var se=function(t){this.name=\"ExpressionEvaluationError\",this.message=t};se.prototype.toJSON=function(){return this.message};var le={string:zt,number:Rt,boolean:jt,object:Nt},ce=function(t,e){this.type=t,this.args=e};ce.parse=function(t,e){if(t.length<2)return e.error(\"Expected at least one argument.\");var n,r=1,i=t[0];if(\"array\"===i){var a,o;if(t.length>2){var s=t[1];if(\"string\"!=typeof s||!(s in le)||\"object\"===s)return e.error('The item type argument of \"array\" must be one of string, number, boolean',1);a=le[s],r++}else a=Bt;if(t.length>3){if(null!==t[2]&&(\"number\"!=typeof t[2]||t[2]<0||t[2]!==Math.floor(t[2])))return e.error('The length argument to \"array\" must be a positive integer literal',2);o=t[2],r++}n=Ut(a,o)}else n=le[i];for(var l=[];r<t.length;r++){var c=e.parse(t[r],r,Bt);if(!c)return null;l.push(c)}return new ce(n,l)},ce.prototype.evaluate=function(t){for(var e=0;e<this.args.length;e++){var n=this.args[e].evaluate(t);if(!Gt(this.type,ie(n)))return n;if(e===this.args.length-1)throw new se(\"Expected value to be of type \"+Wt(this.type)+\", but found \"+Wt(ie(n))+\" instead.\")}return null},ce.prototype.eachChild=function(t){this.args.forEach(t)},ce.prototype.outputDefined=function(){return this.args.every((function(t){return t.outputDefined()}))},ce.prototype.serialize=function(){var t=this.type,e=[t.kind];if(\"array\"===t.kind){var n=t.itemType;if(\"string\"===n.kind||\"number\"===n.kind||\"boolean\"===n.kind){e.push(n.kind);var r=t.N;(\"number\"==typeof r||this.args.length>1)&&e.push(r)}}return e.concat(this.args.map((function(t){return t.serialize()})))};var ue=function(t){this.type=Ht,this.sections=t};ue.parse=function(t,e){if(t.length<2)return e.error(\"Expected at least one argument.\");var n=t[1];if(!Array.isArray(n)&&\"object\"==typeof n)return e.error(\"First argument must be an image or text section.\");for(var r=[],i=!1,a=1;a<=t.length-1;++a){var o=t[a];if(i&&\"object\"==typeof o&&!Array.isArray(o)){i=!1;var s=null;if(o[\"font-scale\"]&&!(s=e.parse(o[\"font-scale\"],1,Rt)))return null;var l=null;if(o[\"text-font\"]&&!(l=e.parse(o[\"text-font\"],1,Ut(zt))))return null;var c=null;if(o[\"text-color\"]&&!(c=e.parse(o[\"text-color\"],1,Ft)))return null;var u=r[r.length-1];u.scale=s,u.font=l,u.textColor=c}else{var h=e.parse(t[a],1,Bt);if(!h)return null;var d=h.type.kind;if(\"string\"!==d&&\"value\"!==d&&\"null\"!==d&&\"resolvedImage\"!==d)return e.error(\"Formatted text type must be 'string', 'value', 'image' or 'null'.\");i=!0,r.push({content:h,scale:null,font:null,textColor:null})}}return new ue(r)},ue.prototype.evaluate=function(t){return new te(this.sections.map((function(e){var n=e.content.evaluate(t);return ie(n)===Vt?new Qt(\"\",n,null,null,null):new Qt(ae(n),null,e.scale?e.scale.evaluate(t):null,e.font?e.font.evaluate(t).join(\",\"):null,e.textColor?e.textColor.evaluate(t):null)})))},ue.prototype.eachChild=function(t){for(var e=0,n=this.sections;e<n.length;e+=1){var r=n[e];t(r.content),r.scale&&t(r.scale),r.font&&t(r.font),r.textColor&&t(r.textColor)}},ue.prototype.outputDefined=function(){return!1},ue.prototype.serialize=function(){for(var t=[\"format\"],e=0,n=this.sections;e<n.length;e+=1){var r=n[e];t.push(r.content.serialize());var i={};r.scale&&(i[\"font-scale\"]=r.scale.serialize()),r.font&&(i[\"text-font\"]=r.font.serialize()),r.textColor&&(i[\"text-color\"]=r.textColor.serialize()),t.push(i)}return t};var he=function(t){this.type=Vt,this.input=t};he.parse=function(t,e){if(2!==t.length)return e.error(\"Expected two arguments.\");var n=e.parse(t[1],1,zt);return n?new he(n):e.error(\"No image name provided.\")},he.prototype.evaluate=function(t){var e=this.input.evaluate(t),n=ee.fromString(e);return n&&t.availableImages&&(n.available=t.availableImages.indexOf(e)>-1),n},he.prototype.eachChild=function(t){t(this.input)},he.prototype.outputDefined=function(){return!1},he.prototype.serialize=function(){return[\"image\",this.input.serialize()]};var de={\"to-boolean\":jt,\"to-color\":Ft,\"to-number\":Rt,\"to-string\":zt},fe=function(t,e){this.type=t,this.args=e};fe.parse=function(t,e){if(t.length<2)return e.error(\"Expected at least one argument.\");var n=t[0];if((\"to-boolean\"===n||\"to-string\"===n)&&2!==t.length)return e.error(\"Expected one argument.\");for(var r=de[n],i=[],a=1;a<t.length;a++){var o=e.parse(t[a],a,Bt);if(!o)return null;i.push(o)}return new fe(r,i)},fe.prototype.evaluate=function(t){if(\"boolean\"===this.type.kind)return Boolean(this.args[0].evaluate(t));if(\"color\"===this.type.kind){for(var e,n,r=0,i=this.args;r<i.length;r+=1){if(n=null,(e=i[r].evaluate(t))instanceof Kt)return e;if(\"string\"==typeof e){var a=t.parseColor(e);if(a)return a}else if(Array.isArray(e)&&!(n=e.length<3||e.length>4?\"Invalid rbga value \"+JSON.stringify(e)+\": expected an array containing either three or four numeric values.\":ne(e[0],e[1],e[2],e[3])))return new Kt(e[0]/255,e[1]/255,e[2]/255,e[3])}throw new se(n||\"Could not parse color from value '\"+(\"string\"==typeof e?e:String(JSON.stringify(e)))+\"'\")}if(\"number\"===this.type.kind){for(var o=null,s=0,l=this.args;s<l.length;s+=1){if(null===(o=l[s].evaluate(t)))return 0;var c=Number(o);if(!isNaN(c))return c}throw new se(\"Could not convert \"+JSON.stringify(o)+\" to number.\")}return\"formatted\"===this.type.kind?te.fromString(ae(this.args[0].evaluate(t))):\"resolvedImage\"===this.type.kind?ee.fromString(ae(this.args[0].evaluate(t))):ae(this.args[0].evaluate(t))},fe.prototype.eachChild=function(t){this.args.forEach(t)},fe.prototype.outputDefined=function(){return this.args.every((function(t){return t.outputDefined()}))},fe.prototype.serialize=function(){if(\"formatted\"===this.type.kind)return new ue([{content:this.args[0],scale:null,font:null,textColor:null}]).serialize();if(\"resolvedImage\"===this.type.kind)return new he(this.args[0]).serialize();var t=[\"to-\"+this.type.kind];return this.eachChild((function(e){t.push(e.serialize())})),t};var pe=[\"Unknown\",\"Point\",\"LineString\",\"Polygon\"],me=function(){this.globals=null,this.feature=null,this.featureState=null,this.formattedSection=null,this._parseColorCache={},this.availableImages=null,this.canonical=null};me.prototype.id=function(){return this.feature&&\"id\"in this.feature?this.feature.id:null},me.prototype.geometryType=function(){return this.feature?\"number\"==typeof this.feature.type?pe[this.feature.type]:this.feature.type:null},me.prototype.geometry=function(){return this.feature&&\"geometry\"in this.feature?this.feature.geometry:null},me.prototype.canonicalID=function(){return this.canonical},me.prototype.properties=function(){return this.feature&&this.feature.properties||{}},me.prototype.parseColor=function(t){var e=this._parseColorCache[t];return e||(e=this._parseColorCache[t]=Kt.parse(t)),e};var ge=function(t,e,n,r){this.name=t,this.type=e,this._evaluate=n,this.args=r};ge.prototype.evaluate=function(t){return this._evaluate(t,this.args)},ge.prototype.eachChild=function(t){this.args.forEach(t)},ge.prototype.outputDefined=function(){return!1},ge.prototype.serialize=function(){return[this.name].concat(this.args.map((function(t){return t.serialize()})))},ge.parse=function(t,e){var n,r=t[0],i=ge.definitions[r];if(!i)return e.error('Unknown expression \"'+r+'\". If you wanted a literal array, use [\"literal\", [...]].',0);for(var a=Array.isArray(i)?i[0]:i.type,o=Array.isArray(i)?[[i[1],i[2]]]:i.overloads,s=o.filter((function(e){var n=e[0];return!Array.isArray(n)||n.length===t.length-1})),l=null,c=0,u=s;c<u.length;c+=1){var h=u[c],d=h[0],f=h[1];l=new Fe(e.registry,e.path,null,e.scope);for(var p=[],m=!1,g=1;g<t.length;g++){var y=t[g],v=Array.isArray(d)?d[g-1]:d.type,_=l.parse(y,1+p.length,v);if(!_){m=!0;break}p.push(_)}if(!m)if(Array.isArray(d)&&d.length!==p.length)l.error(\"Expected \"+d.length+\" arguments, but found \"+p.length+\" instead.\");else{for(var b=0;b<p.length;b++){var x=Array.isArray(d)?d[b]:d.type,w=p[b];l.concat(b+1).checkSubtype(x,w.type)}if(0===l.errors.length)return new ge(r,a,f,p)}}if(1===s.length)(n=e.errors).push.apply(n,l.errors);else{for(var k=(s.length?s:o).map((function(t){var e;return e=t[0],Array.isArray(e)?\"(\"+e.map(Wt).join(\", \")+\")\":\"(\"+Wt(e.type)+\"...)\"})).join(\" | \"),M=[],T=1;T<t.length;T++){var S=e.parse(t[T],1+M.length);if(!S)return null;M.push(Wt(S.type))}e.error(\"Expected arguments of type \"+k+\", but found (\"+M.join(\", \")+\") instead.\")}return null},ge.register=function(t,e){for(var n in ge.definitions=e,e)t[n]=ge};var ye=function(t,e,n){this.type=Yt,this.locale=n,this.caseSensitive=t,this.diacriticSensitive=e};function ve(t,e){t[0]=Math.min(t[0],e[0]),t[1]=Math.min(t[1],e[1]),t[2]=Math.max(t[2],e[0]),t[3]=Math.max(t[3],e[1])}function _e(t,e){return!(t[0]<=e[0]||t[2]>=e[2]||t[1]<=e[1]||t[3]>=e[3])}function be(t,e){var n=(180+t[0])/360,r=(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+t[1]*Math.PI/360)))/360,i=Math.pow(2,e.z);return[Math.round(n*i*8192),Math.round(r*i*8192)]}function xe(t,e,n){return e[1]>t[1]!=n[1]>t[1]&&t[0]<(n[0]-e[0])*(t[1]-e[1])/(n[1]-e[1])+e[0]}function we(t,e){for(var n,r,i,a,o,s,l,c=!1,u=0,h=e.length;u<h;u++)for(var d=e[u],f=0,p=d.length;f<p-1;f++){if((a=(n=t)[0]-(r=d[f])[0])*(l=n[1]-(i=d[f+1])[1])-(s=n[0]-i[0])*(o=n[1]-r[1])==0&&a*s<=0&&o*l<=0)return!1;xe(t,d[f],d[f+1])&&(c=!c)}return c}function ke(t,e){for(var n=0;n<e.length;n++)if(we(t,e[n]))return!0;return!1}function Me(t,e,n,r){var i=r[0]-n[0],a=r[1]-n[1],o=(t[0]-n[0])*a-i*(t[1]-n[1]),s=(e[0]-n[0])*a-i*(e[1]-n[1]);return o>0&&s<0||o<0&&s>0}function Te(t,e,n){for(var r=0,i=n;r<i.length;r+=1)for(var a=i[r],o=0;o<a.length-1;++o)if(0!=(h=[(u=a[o+1])[0]-(c=a[o])[0],u[1]-c[1]])[0]*(d=[(l=e)[0]-(s=t)[0],l[1]-s[1]])[1]-h[1]*d[0]&&Me(s,l,c,u)&&Me(c,u,s,l))return!0;var s,l,c,u,h,d;return!1}function Se(t,e){for(var n=0;n<t.length;++n)if(!we(t[n],e))return!1;for(var r=0;r<t.length-1;++r)if(Te(t[r],t[r+1],e))return!1;return!0}function Ae(t,e){for(var n=0;n<e.length;n++)if(Se(t,e[n]))return!0;return!1}function Le(t,e,n){for(var r=[],i=0;i<t.length;i++){for(var a=[],o=0;o<t[i].length;o++){var s=be(t[i][o],n);ve(e,s),a.push(s)}r.push(a)}return r}function Ce(t,e,n){for(var r=[],i=0;i<t.length;i++){var a=Le(t[i],e,n);r.push(a)}return r}function Ee(t,e,n,r){if(t[0]<n[0]||t[0]>n[2]){var i=.5*r,a=t[0]-n[0]>i?-r:n[0]-t[0]>i?r:0;0===a&&(a=t[0]-n[2]>i?-r:n[2]-t[0]>i?r:0),t[0]+=a}ve(e,t)}function Oe(t,e,n,r){for(var i=8192*Math.pow(2,r.z),a=[8192*r.x,8192*r.y],o=[],s=0,l=t;s<l.length;s+=1)for(var c=0,u=l[s];c<u.length;c+=1){var h=u[c],d=[h.x+a[0],h.y+a[1]];Ee(d,e,n,i),o.push(d)}return o}function De(t,e,n,r){for(var i,a=8192*Math.pow(2,r.z),o=[8192*r.x,8192*r.y],s=[],l=0,c=t;l<c.length;l+=1){for(var u=[],h=0,d=c[l];h<d.length;h+=1){var f=d[h],p=[f.x+o[0],f.y+o[1]];ve(e,p),u.push(p)}s.push(u)}if(e[2]-e[0]<=a/2){(i=e)[0]=i[1]=1/0,i[2]=i[3]=-1/0;for(var m=0,g=s;m<g.length;m+=1)for(var y=0,v=g[m];y<v.length;y+=1)Ee(v[y],e,n,a)}return s}ye.parse=function(t,e){if(2!==t.length)return e.error(\"Expected one argument.\");var n=t[1];if(\"object\"!=typeof n||Array.isArray(n))return e.error(\"Collator options argument must be an object.\");var r=e.parse(void 0!==n[\"case-sensitive\"]&&n[\"case-sensitive\"],1,jt);if(!r)return null;var i=e.parse(void 0!==n[\"diacritic-sensitive\"]&&n[\"diacritic-sensitive\"],1,jt);if(!i)return null;var a=null;return n.locale&&!(a=e.parse(n.locale,1,zt))?null:new ye(r,i,a)},ye.prototype.evaluate=function(t){return new $t(this.caseSensitive.evaluate(t),this.diacriticSensitive.evaluate(t),this.locale?this.locale.evaluate(t):null)},ye.prototype.eachChild=function(t){t(this.caseSensitive),t(this.diacriticSensitive),this.locale&&t(this.locale)},ye.prototype.outputDefined=function(){return!1},ye.prototype.serialize=function(){var t={};return t[\"case-sensitive\"]=this.caseSensitive.serialize(),t[\"diacritic-sensitive\"]=this.diacriticSensitive.serialize(),this.locale&&(t.locale=this.locale.serialize()),[\"collator\",t]};var Ie=function(t,e){this.type=jt,this.geojson=t,this.geometries=e};function Pe(t){if(t instanceof ge){if(\"get\"===t.name&&1===t.args.length)return!1;if(\"feature-state\"===t.name)return!1;if(\"has\"===t.name&&1===t.args.length)return!1;if(\"properties\"===t.name||\"geometry-type\"===t.name||\"id\"===t.name)return!1;if(/^filter-/.test(t.name))return!1}if(t instanceof Ie)return!1;var e=!0;return t.eachChild((function(t){e&&!Pe(t)&&(e=!1)})),e}function Re(t){if(t instanceof ge&&\"feature-state\"===t.name)return!1;var e=!0;return t.eachChild((function(t){e&&!Re(t)&&(e=!1)})),e}function ze(t,e){if(t instanceof ge&&e.indexOf(t.name)>=0)return!1;var n=!0;return t.eachChild((function(t){n&&!ze(t,e)&&(n=!1)})),n}Ie.parse=function(t,e){if(2!==t.length)return e.error(\"'within' expression requires exactly one argument, but found \"+(t.length-1)+\" instead.\");if(re(t[1])){var n=t[1];if(\"FeatureCollection\"===n.type)for(var r=0;r<n.features.length;++r){var i=n.features[r].geometry.type;if(\"Polygon\"===i||\"MultiPolygon\"===i)return new Ie(n,n.features[r].geometry)}else if(\"Feature\"===n.type){var a=n.geometry.type;if(\"Polygon\"===a||\"MultiPolygon\"===a)return new Ie(n,n.geometry)}else if(\"Polygon\"===n.type||\"MultiPolygon\"===n.type)return new Ie(n,n)}return e.error(\"'within' expression requires valid geojson object that contains polygon geometry type.\")},Ie.prototype.evaluate=function(t){if(null!=t.geometry()&&null!=t.canonicalID()){if(\"Point\"===t.geometryType())return function(t,e){var n=[1/0,1/0,-1/0,-1/0],r=[1/0,1/0,-1/0,-1/0],i=t.canonicalID();if(\"Polygon\"===e.type){var a=Le(e.coordinates,r,i),o=Oe(t.geometry(),n,r,i);if(!_e(n,r))return!1;for(var s=0,l=o;s<l.length;s+=1)if(!we(l[s],a))return!1}if(\"MultiPolygon\"===e.type){var c=Ce(e.coordinates,r,i),u=Oe(t.geometry(),n,r,i);if(!_e(n,r))return!1;for(var h=0,d=u;h<d.length;h+=1)if(!ke(d[h],c))return!1}return!0}(t,this.geometries);if(\"LineString\"===t.geometryType())return function(t,e){var n=[1/0,1/0,-1/0,-1/0],r=[1/0,1/0,-1/0,-1/0],i=t.canonicalID();if(\"Polygon\"===e.type){var a=Le(e.coordinates,r,i),o=De(t.geometry(),n,r,i);if(!_e(n,r))return!1;for(var s=0,l=o;s<l.length;s+=1)if(!Se(l[s],a))return!1}if(\"MultiPolygon\"===e.type){var c=Ce(e.coordinates,r,i),u=De(t.geometry(),n,r,i);if(!_e(n,r))return!1;for(var h=0,d=u;h<d.length;h+=1)if(!Ae(d[h],c))return!1}return!0}(t,this.geometries)}return!1},Ie.prototype.eachChild=function(){},Ie.prototype.outputDefined=function(){return!0},Ie.prototype.serialize=function(){return[\"within\",this.geojson]};var je=function(t,e){this.type=e.type,this.name=t,this.boundExpression=e};je.parse=function(t,e){if(2!==t.length||\"string\"!=typeof t[1])return e.error(\"'var' expression requires exactly one string literal argument.\");var n=t[1];return e.scope.has(n)?new je(n,e.scope.get(n)):e.error('Unknown variable \"'+n+'\". Make sure \"'+n+'\" has been bound in an enclosing \"let\" expression before using it.',1)},je.prototype.evaluate=function(t){return this.boundExpression.evaluate(t)},je.prototype.eachChild=function(){},je.prototype.outputDefined=function(){return!1},je.prototype.serialize=function(){return[\"var\",this.name]};var Fe=function(t,e,n,r,i){void 0===e&&(e=[]),void 0===r&&(r=new It),void 0===i&&(i=[]),this.registry=t,this.path=e,this.key=e.map((function(t){return\"[\"+t+\"]\"})).join(\"\"),this.scope=r,this.errors=i,this.expectedType=n};function Ne(t,e){for(var n,r=t.length-1,i=0,a=r,o=0;i<=a;)if((n=t[o=Math.floor((i+a)/2)])<=e){if(o===r||e<t[o+1])return o;i=o+1}else{if(!(n>e))throw new se(\"Input is not a number.\");a=o-1}return 0}Fe.prototype.parse=function(t,e,n,r,i){return void 0===i&&(i={}),e?this.concat(e,n,r)._parse(t,i):this._parse(t,i)},Fe.prototype._parse=function(t,e){function n(t,e,n){return\"assert\"===n?new ce(e,[t]):\"coerce\"===n?new fe(e,[t]):t}if(null!==t&&\"string\"!=typeof t&&\"boolean\"!=typeof t&&\"number\"!=typeof t||(t=[\"literal\",t]),Array.isArray(t)){if(0===t.length)return this.error('Expected an array with at least one element. If you wanted a literal array, use [\"literal\", []].');var r=t[0];if(\"string\"!=typeof r)return this.error(\"Expression name must be a string, but found \"+typeof r+' instead. If you wanted a literal array, use [\"literal\", [...]].',0),null;var i=this.registry[r];if(i){var a=i.parse(t,this);if(!a)return null;if(this.expectedType){var o=this.expectedType,s=a.type;if(\"string\"!==o.kind&&\"number\"!==o.kind&&\"boolean\"!==o.kind&&\"object\"!==o.kind&&\"array\"!==o.kind||\"value\"!==s.kind)if(\"color\"!==o.kind&&\"formatted\"!==o.kind&&\"resolvedImage\"!==o.kind||\"value\"!==s.kind&&\"string\"!==s.kind){if(this.checkSubtype(o,s))return null}else a=n(a,o,e.typeAnnotation||\"coerce\");else a=n(a,o,e.typeAnnotation||\"assert\")}if(!(a instanceof oe)&&\"resolvedImage\"!==a.type.kind&&function t(e){if(e instanceof je)return t(e.boundExpression);if(e instanceof ge&&\"error\"===e.name)return!1;if(e instanceof ye)return!1;if(e instanceof Ie)return!1;var n=e instanceof fe||e instanceof ce,r=!0;return e.eachChild((function(e){r=n?r&&t(e):r&&e instanceof oe})),!!r&&Pe(e)&&ze(e,[\"zoom\",\"heatmap-density\",\"line-progress\",\"accumulated\",\"is-supported-script\"])}(a)){var l=new me;try{a=new oe(a.type,a.evaluate(l))}catch(t){return this.error(t.message),null}}return a}return this.error('Unknown expression \"'+r+'\". If you wanted a literal array, use [\"literal\", [...]].',0)}return this.error(void 0===t?\"'undefined' value invalid. Use null instead.\":\"object\"==typeof t?'Bare objects invalid. Use [\"literal\", {...}] instead.':\"Expected an array, but found \"+typeof t+\" instead.\")},Fe.prototype.concat=function(t,e,n){var r=\"number\"==typeof t?this.path.concat(t):this.path,i=n?this.scope.concat(n):this.scope;return new Fe(this.registry,r,e||null,i,this.errors)},Fe.prototype.error=function(t){for(var e=[],n=arguments.length-1;n-- >0;)e[n]=arguments[n+1];var r=\"\"+this.key+e.map((function(t){return\"[\"+t+\"]\"})).join(\"\");this.errors.push(new Dt(r,t))},Fe.prototype.checkSubtype=function(t,e){var n=Gt(t,e);return n&&this.error(n),n};var Be=function(t,e,n){this.type=t,this.input=e,this.labels=[],this.outputs=[];for(var r=0,i=n;r<i.length;r+=1){var a=i[r],o=a[1];this.labels.push(a[0]),this.outputs.push(o)}};function Ye(t,e,n){return t*(1-n)+e*n}Be.parse=function(t,e){if(t.length-1<4)return e.error(\"Expected at least 4 arguments, but found only \"+(t.length-1)+\".\");if((t.length-1)%2!=0)return e.error(\"Expected an even number of arguments.\");var n=e.parse(t[1],1,Rt);if(!n)return null;var r=[],i=null;e.expectedType&&\"value\"!==e.expectedType.kind&&(i=e.expectedType);for(var a=1;a<t.length;a+=2){var o=1===a?-1/0:t[a],s=t[a+1],l=a,c=a+1;if(\"number\"!=typeof o)return e.error('Input/output pairs for \"step\" expressions must be defined using literal numeric values (not computed expressions) for the input values.',l);if(r.length&&r[r.length-1][0]>=o)return e.error('Input/output pairs for \"step\" expressions must be arranged with input values in strictly ascending order.',l);var u=e.parse(s,c,i);if(!u)return null;i=i||u.type,r.push([o,u])}return new Be(i,n,r)},Be.prototype.evaluate=function(t){var e=this.labels,n=this.outputs;if(1===e.length)return n[0].evaluate(t);var r=this.input.evaluate(t);if(r<=e[0])return n[0].evaluate(t);var i=e.length;return r>=e[i-1]?n[i-1].evaluate(t):n[Ne(e,r)].evaluate(t)},Be.prototype.eachChild=function(t){t(this.input);for(var e=0,n=this.outputs;e<n.length;e+=1)t(n[e])},Be.prototype.outputDefined=function(){return this.outputs.every((function(t){return t.outputDefined()}))},Be.prototype.serialize=function(){for(var t=[\"step\",this.input.serialize()],e=0;e<this.labels.length;e++)e>0&&t.push(this.labels[e]),t.push(this.outputs[e].serialize());return t};var He=Object.freeze({__proto__:null,number:Ye,color:function(t,e,n){return new Kt(Ye(t.r,e.r,n),Ye(t.g,e.g,n),Ye(t.b,e.b,n),Ye(t.a,e.a,n))},array:function(t,e,n){return t.map((function(t,r){return Ye(t,e[r],n)}))}}),Ve=6/29*3*(6/29),Ue=Math.PI/180,We=180/Math.PI;function qe(t){return t>.008856451679035631?Math.pow(t,1/3):t/Ve+4/29}function Ge(t){return t>6/29?t*t*t:Ve*(t-4/29)}function Xe(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Ze(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Je(t){var e=Ze(t.r),n=Ze(t.g),r=Ze(t.b),i=qe((.4124564*e+.3575761*n+.1804375*r)/.95047),a=qe((.2126729*e+.7151522*n+.072175*r)/1);return{l:116*a-16,a:500*(i-a),b:200*(a-qe((.0193339*e+.119192*n+.9503041*r)/1.08883)),alpha:t.a}}function Ke(t){var e=(t.l+16)/116,n=isNaN(t.a)?e:e+t.a/500,r=isNaN(t.b)?e:e-t.b/200;return e=1*Ge(e),n=.95047*Ge(n),r=1.08883*Ge(r),new Kt(Xe(3.2404542*n-1.5371385*e-.4985314*r),Xe(-.969266*n+1.8760108*e+.041556*r),Xe(.0556434*n-.2040259*e+1.0572252*r),t.alpha)}function $e(t,e,n){var r=e-t;return t+n*(r>180||r<-180?r-360*Math.round(r/360):r)}var Qe={forward:Je,reverse:Ke,interpolate:function(t,e,n){return{l:Ye(t.l,e.l,n),a:Ye(t.a,e.a,n),b:Ye(t.b,e.b,n),alpha:Ye(t.alpha,e.alpha,n)}}},tn={forward:function(t){var e=Je(t),n=e.l,r=e.a,i=e.b,a=Math.atan2(i,r)*We;return{h:a<0?a+360:a,c:Math.sqrt(r*r+i*i),l:n,alpha:t.a}},reverse:function(t){var e=t.h*Ue,n=t.c;return Ke({l:t.l,a:Math.cos(e)*n,b:Math.sin(e)*n,alpha:t.alpha})},interpolate:function(t,e,n){return{h:$e(t.h,e.h,n),c:Ye(t.c,e.c,n),l:Ye(t.l,e.l,n),alpha:Ye(t.alpha,e.alpha,n)}}},en=Object.freeze({__proto__:null,lab:Qe,hcl:tn}),nn=function(t,e,n,r,i){this.type=t,this.operator=e,this.interpolation=n,this.input=r,this.labels=[],this.outputs=[];for(var a=0,o=i;a<o.length;a+=1){var s=o[a],l=s[1];this.labels.push(s[0]),this.outputs.push(l)}};function rn(t,e,n,r){var i=r-n,a=t-n;return 0===i?0:1===e?a/i:(Math.pow(e,a)-1)/(Math.pow(e,i)-1)}nn.interpolationFactor=function(t,e,r,i){var a=0;if(\"exponential\"===t.name)a=rn(e,t.base,r,i);else if(\"linear\"===t.name)a=rn(e,1,r,i);else if(\"cubic-bezier\"===t.name){var o=t.controlPoints;a=new n(o[0],o[1],o[2],o[3]).solve(rn(e,1,r,i))}return a},nn.parse=function(t,e){var n=t[0],r=t[1],i=t[2],a=t.slice(3);if(!Array.isArray(r)||0===r.length)return e.error(\"Expected an interpolation type expression.\",1);if(\"linear\"===r[0])r={name:\"linear\"};else if(\"exponential\"===r[0]){var o=r[1];if(\"number\"!=typeof o)return e.error(\"Exponential interpolation requires a numeric base.\",1,1);r={name:\"exponential\",base:o}}else{if(\"cubic-bezier\"!==r[0])return e.error(\"Unknown interpolation type \"+String(r[0]),1,0);var s=r.slice(1);if(4!==s.length||s.some((function(t){return\"number\"!=typeof t||t<0||t>1})))return e.error(\"Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.\",1);r={name:\"cubic-bezier\",controlPoints:s}}if(t.length-1<4)return e.error(\"Expected at least 4 arguments, but found only \"+(t.length-1)+\".\");if((t.length-1)%2!=0)return e.error(\"Expected an even number of arguments.\");if(!(i=e.parse(i,2,Rt)))return null;var l=[],c=null;\"interpolate-hcl\"===n||\"interpolate-lab\"===n?c=Ft:e.expectedType&&\"value\"!==e.expectedType.kind&&(c=e.expectedType);for(var u=0;u<a.length;u+=2){var h=a[u],d=a[u+1],f=u+3,p=u+4;if(\"number\"!=typeof h)return e.error('Input/output pairs for \"interpolate\" expressions must be defined using literal numeric values (not computed expressions) for the input values.',f);if(l.length&&l[l.length-1][0]>=h)return e.error('Input/output pairs for \"interpolate\" expressions must be arranged with input values in strictly ascending order.',f);var m=e.parse(d,p,c);if(!m)return null;c=c||m.type,l.push([h,m])}return\"number\"===c.kind||\"color\"===c.kind||\"array\"===c.kind&&\"number\"===c.itemType.kind&&\"number\"==typeof c.N?new nn(c,n,r,i,l):e.error(\"Type \"+Wt(c)+\" is not interpolatable.\")},nn.prototype.evaluate=function(t){var e=this.labels,n=this.outputs;if(1===e.length)return n[0].evaluate(t);var r=this.input.evaluate(t);if(r<=e[0])return n[0].evaluate(t);var i=e.length;if(r>=e[i-1])return n[i-1].evaluate(t);var a=Ne(e,r),o=nn.interpolationFactor(this.interpolation,r,e[a],e[a+1]),s=n[a].evaluate(t),l=n[a+1].evaluate(t);return\"interpolate\"===this.operator?He[this.type.kind.toLowerCase()](s,l,o):\"interpolate-hcl\"===this.operator?tn.reverse(tn.interpolate(tn.forward(s),tn.forward(l),o)):Qe.reverse(Qe.interpolate(Qe.forward(s),Qe.forward(l),o))},nn.prototype.eachChild=function(t){t(this.input);for(var e=0,n=this.outputs;e<n.length;e+=1)t(n[e])},nn.prototype.outputDefined=function(){return this.outputs.every((function(t){return t.outputDefined()}))},nn.prototype.serialize=function(){var t;t=\"linear\"===this.interpolation.name?[\"linear\"]:\"exponential\"===this.interpolation.name?1===this.interpolation.base?[\"linear\"]:[\"exponential\",this.interpolation.base]:[\"cubic-bezier\"].concat(this.interpolation.controlPoints);for(var e=[this.operator,t,this.input.serialize()],n=0;n<this.labels.length;n++)e.push(this.labels[n],this.outputs[n].serialize());return e};var an=function(t,e){this.type=t,this.args=e};an.parse=function(t,e){if(t.length<2)return e.error(\"Expectected at least one argument.\");var n=null,r=e.expectedType;r&&\"value\"!==r.kind&&(n=r);for(var i=[],a=0,o=t.slice(1);a<o.length;a+=1){var s=e.parse(o[a],1+i.length,n,void 0,{typeAnnotation:\"omit\"});if(!s)return null;n=n||s.type,i.push(s)}var l=r&&i.some((function(t){return Gt(r,t.type)}));return new an(l?Bt:n,i)},an.prototype.evaluate=function(t){for(var e,n=null,r=0,i=0,a=this.args;i<a.length&&(r++,(n=a[i].evaluate(t))&&n instanceof ee&&!n.available&&(e||(e=n.name),n=null,r===this.args.length&&(n=e)),null===n);i+=1);return n},an.prototype.eachChild=function(t){this.args.forEach(t)},an.prototype.outputDefined=function(){return this.args.every((function(t){return t.outputDefined()}))},an.prototype.serialize=function(){var t=[\"coalesce\"];return this.eachChild((function(e){t.push(e.serialize())})),t};var on=function(t,e){this.type=e.type,this.bindings=[].concat(t),this.result=e};on.prototype.evaluate=function(t){return this.result.evaluate(t)},on.prototype.eachChild=function(t){for(var e=0,n=this.bindings;e<n.length;e+=1)t(n[e][1]);t(this.result)},on.parse=function(t,e){if(t.length<4)return e.error(\"Expected at least 3 arguments, but found \"+(t.length-1)+\" instead.\");for(var n=[],r=1;r<t.length-1;r+=2){var i=t[r];if(\"string\"!=typeof i)return e.error(\"Expected string, but found \"+typeof i+\" instead.\",r);if(/[^a-zA-Z0-9_]/.test(i))return e.error(\"Variable names must contain only alphanumeric characters or '_'.\",r);var a=e.parse(t[r+1],r+1);if(!a)return null;n.push([i,a])}var o=e.parse(t[t.length-1],t.length-1,e.expectedType,n);return o?new on(n,o):null},on.prototype.outputDefined=function(){return this.result.outputDefined()},on.prototype.serialize=function(){for(var t=[\"let\"],e=0,n=this.bindings;e<n.length;e+=1){var r=n[e];t.push(r[0],r[1].serialize())}return t.push(this.result.serialize()),t};var sn=function(t,e,n){this.type=t,this.index=e,this.input=n};sn.parse=function(t,e){if(3!==t.length)return e.error(\"Expected 2 arguments, but found \"+(t.length-1)+\" instead.\");var n=e.parse(t[1],1,Rt),r=e.parse(t[2],2,Ut(e.expectedType||Bt));return n&&r?new sn(r.type.itemType,n,r):null},sn.prototype.evaluate=function(t){var e=this.index.evaluate(t),n=this.input.evaluate(t);if(e<0)throw new se(\"Array index out of bounds: \"+e+\" < 0.\");if(e>=n.length)throw new se(\"Array index out of bounds: \"+e+\" > \"+(n.length-1)+\".\");if(e!==Math.floor(e))throw new se(\"Array index must be an integer, but found \"+e+\" instead.\");return n[e]},sn.prototype.eachChild=function(t){t(this.index),t(this.input)},sn.prototype.outputDefined=function(){return!1},sn.prototype.serialize=function(){return[\"at\",this.index.serialize(),this.input.serialize()]};var ln=function(t,e){this.type=jt,this.needle=t,this.haystack=e};ln.parse=function(t,e){if(3!==t.length)return e.error(\"Expected 2 arguments, but found \"+(t.length-1)+\" instead.\");var n=e.parse(t[1],1,Bt),r=e.parse(t[2],2,Bt);return n&&r?Xt(n.type,[jt,zt,Rt,Pt,Bt])?new ln(n,r):e.error(\"Expected first argument to be of type boolean, string, number or null, but found \"+Wt(n.type)+\" instead\"):null},ln.prototype.evaluate=function(t){var e=this.needle.evaluate(t),n=this.haystack.evaluate(t);if(!n)return!1;if(!Zt(e,[\"boolean\",\"string\",\"number\",\"null\"]))throw new se(\"Expected first argument to be of type boolean, string, number or null, but found \"+Wt(ie(e))+\" instead.\");if(!Zt(n,[\"string\",\"array\"]))throw new se(\"Expected second argument to be of type array or string, but found \"+Wt(ie(n))+\" instead.\");return n.indexOf(e)>=0},ln.prototype.eachChild=function(t){t(this.needle),t(this.haystack)},ln.prototype.outputDefined=function(){return!0},ln.prototype.serialize=function(){return[\"in\",this.needle.serialize(),this.haystack.serialize()]};var cn=function(t,e,n){this.type=Rt,this.needle=t,this.haystack=e,this.fromIndex=n};cn.parse=function(t,e){if(t.length<=2||t.length>=5)return e.error(\"Expected 3 or 4 arguments, but found \"+(t.length-1)+\" instead.\");var n=e.parse(t[1],1,Bt),r=e.parse(t[2],2,Bt);if(!n||!r)return null;if(!Xt(n.type,[jt,zt,Rt,Pt,Bt]))return e.error(\"Expected first argument to be of type boolean, string, number or null, but found \"+Wt(n.type)+\" instead\");if(4===t.length){var i=e.parse(t[3],3,Rt);return i?new cn(n,r,i):null}return new cn(n,r)},cn.prototype.evaluate=function(t){var e=this.needle.evaluate(t),n=this.haystack.evaluate(t);if(!Zt(e,[\"boolean\",\"string\",\"number\",\"null\"]))throw new se(\"Expected first argument to be of type boolean, string, number or null, but found \"+Wt(ie(e))+\" instead.\");if(!Zt(n,[\"string\",\"array\"]))throw new se(\"Expected second argument to be of type array or string, but found \"+Wt(ie(n))+\" instead.\");if(this.fromIndex){var r=this.fromIndex.evaluate(t);return n.indexOf(e,r)}return n.indexOf(e)},cn.prototype.eachChild=function(t){t(this.needle),t(this.haystack),this.fromIndex&&t(this.fromIndex)},cn.prototype.outputDefined=function(){return!1},cn.prototype.serialize=function(){if(null!=this.fromIndex&&void 0!==this.fromIndex){var t=this.fromIndex.serialize();return[\"index-of\",this.needle.serialize(),this.haystack.serialize(),t]}return[\"index-of\",this.needle.serialize(),this.haystack.serialize()]};var un=function(t,e,n,r,i,a){this.inputType=t,this.type=e,this.input=n,this.cases=r,this.outputs=i,this.otherwise=a};un.parse=function(t,e){if(t.length<5)return e.error(\"Expected at least 4 arguments, but found only \"+(t.length-1)+\".\");if(t.length%2!=1)return e.error(\"Expected an even number of arguments.\");var n,r;e.expectedType&&\"value\"!==e.expectedType.kind&&(r=e.expectedType);for(var i={},a=[],o=2;o<t.length-1;o+=2){var s=t[o],l=t[o+1];Array.isArray(s)||(s=[s]);var c=e.concat(o);if(0===s.length)return c.error(\"Expected at least one branch label.\");for(var u=0,h=s;u<h.length;u+=1){var d=h[u];if(\"number\"!=typeof d&&\"string\"!=typeof d)return c.error(\"Branch labels must be numbers or strings.\");if(\"number\"==typeof d&&Math.abs(d)>Number.MAX_SAFE_INTEGER)return c.error(\"Branch labels must be integers no larger than \"+Number.MAX_SAFE_INTEGER+\".\");if(\"number\"==typeof d&&Math.floor(d)!==d)return c.error(\"Numeric branch labels must be integer values.\");if(n){if(c.checkSubtype(n,ie(d)))return null}else n=ie(d);if(void 0!==i[String(d)])return c.error(\"Branch labels must be unique.\");i[String(d)]=a.length}var f=e.parse(l,o,r);if(!f)return null;r=r||f.type,a.push(f)}var p=e.parse(t[1],1,Bt);if(!p)return null;var m=e.parse(t[t.length-1],t.length-1,r);return m?\"value\"!==p.type.kind&&e.concat(1).checkSubtype(n,p.type)?null:new un(n,r,p,i,a,m):null},un.prototype.evaluate=function(t){var e=this.input.evaluate(t);return(ie(e)===this.inputType&&this.outputs[this.cases[e]]||this.otherwise).evaluate(t)},un.prototype.eachChild=function(t){t(this.input),this.outputs.forEach(t),t(this.otherwise)},un.prototype.outputDefined=function(){return this.outputs.every((function(t){return t.outputDefined()}))&&this.otherwise.outputDefined()},un.prototype.serialize=function(){for(var t=this,e=[\"match\",this.input.serialize()],n=[],r={},i=0,a=Object.keys(this.cases).sort();i<a.length;i+=1){var o=a[i];void 0===(h=r[this.cases[o]])?(r[this.cases[o]]=n.length,n.push([this.cases[o],[o]])):n[h][1].push(o)}for(var s=function(e){return\"number\"===t.inputType.kind?Number(e):e},l=0,c=n;l<c.length;l+=1){var u=c[l],h=u[0],d=u[1];e.push(1===d.length?s(d[0]):d.map(s)),e.push(this.outputs[outputIndex$1].serialize())}return e.push(this.otherwise.serialize()),e};var hn=function(t,e,n){this.type=t,this.branches=e,this.otherwise=n};hn.parse=function(t,e){if(t.length<4)return e.error(\"Expected at least 3 arguments, but found only \"+(t.length-1)+\".\");if(t.length%2!=0)return e.error(\"Expected an odd number of arguments.\");var n;e.expectedType&&\"value\"!==e.expectedType.kind&&(n=e.expectedType);for(var r=[],i=1;i<t.length-1;i+=2){var a=e.parse(t[i],i,jt);if(!a)return null;var o=e.parse(t[i+1],i+1,n);if(!o)return null;r.push([a,o]),n=n||o.type}var s=e.parse(t[t.length-1],t.length-1,n);return s?new hn(n,r,s):null},hn.prototype.evaluate=function(t){for(var e=0,n=this.branches;e<n.length;e+=1){var r=n[e],i=r[1];if(r[0].evaluate(t))return i.evaluate(t)}return this.otherwise.evaluate(t)},hn.prototype.eachChild=function(t){for(var e=0,n=this.branches;e<n.length;e+=1){var r=n[e],i=r[1];t(r[0]),t(i)}t(this.otherwise)},hn.prototype.outputDefined=function(){return this.branches.every((function(t){return t[1].outputDefined()}))&&this.otherwise.outputDefined()},hn.prototype.serialize=function(){var t=[\"case\"];return this.eachChild((function(e){t.push(e.serialize())})),t};var dn=function(t,e,n,r){this.type=t,this.input=e,this.beginIndex=n,this.endIndex=r};function fn(t,e){return\"==\"===t||\"!=\"===t?\"boolean\"===e.kind||\"string\"===e.kind||\"number\"===e.kind||\"null\"===e.kind||\"value\"===e.kind:\"string\"===e.kind||\"number\"===e.kind||\"value\"===e.kind}function pn(t,e,n,r){return 0===r.compare(e,n)}function mn(t,e,n){var r=\"==\"!==t&&\"!=\"!==t;return function(){function i(t,e,n){this.type=jt,this.lhs=t,this.rhs=e,this.collator=n,this.hasUntypedArgument=\"value\"===t.type.kind||\"value\"===e.type.kind}return i.parse=function(t,e){if(3!==t.length&&4!==t.length)return e.error(\"Expected two or three arguments.\");var n=t[0],a=e.parse(t[1],1,Bt);if(!a)return null;if(!fn(n,a.type))return e.concat(1).error('\"'+n+\"\\\" comparisons are not supported for type '\"+Wt(a.type)+\"'.\");var o=e.parse(t[2],2,Bt);if(!o)return null;if(!fn(n,o.type))return e.concat(2).error('\"'+n+\"\\\" comparisons are not supported for type '\"+Wt(o.type)+\"'.\");if(a.type.kind!==o.type.kind&&\"value\"!==a.type.kind&&\"value\"!==o.type.kind)return e.error(\"Cannot compare types '\"+Wt(a.type)+\"' and '\"+Wt(o.type)+\"'.\");r&&(\"value\"===a.type.kind&&\"value\"!==o.type.kind?a=new ce(o.type,[a]):\"value\"!==a.type.kind&&\"value\"===o.type.kind&&(o=new ce(a.type,[o])));var s=null;if(4===t.length){if(\"string\"!==a.type.kind&&\"string\"!==o.type.kind&&\"value\"!==a.type.kind&&\"value\"!==o.type.kind)return e.error(\"Cannot use collator to compare non-string types.\");if(!(s=e.parse(t[3],3,Yt)))return null}return new i(a,o,s)},i.prototype.evaluate=function(i){var a=this.lhs.evaluate(i),o=this.rhs.evaluate(i);if(r&&this.hasUntypedArgument){var s=ie(a),l=ie(o);if(s.kind!==l.kind||\"string\"!==s.kind&&\"number\"!==s.kind)throw new se('Expected arguments for \"'+t+'\" to be (string, string) or (number, number), but found ('+s.kind+\", \"+l.kind+\") instead.\")}if(this.collator&&!r&&this.hasUntypedArgument){var c=ie(a),u=ie(o);if(\"string\"!==c.kind||\"string\"!==u.kind)return e(i,a,o)}return this.collator?n(i,a,o,this.collator.evaluate(i)):e(i,a,o)},i.prototype.eachChild=function(t){t(this.lhs),t(this.rhs),this.collator&&t(this.collator)},i.prototype.outputDefined=function(){return!0},i.prototype.serialize=function(){var e=[t];return this.eachChild((function(t){e.push(t.serialize())})),e},i}()}dn.parse=function(t,e){if(t.length<=2||t.length>=5)return e.error(\"Expected 3 or 4 arguments, but found \"+(t.length-1)+\" instead.\");var n=e.parse(t[1],1,Bt),r=e.parse(t[2],2,Rt);if(!n||!r)return null;if(!Xt(n.type,[Ut(Bt),zt,Bt]))return e.error(\"Expected first argument to be of type array or string, but found \"+Wt(n.type)+\" instead\");if(4===t.length){var i=e.parse(t[3],3,Rt);return i?new dn(n.type,n,r,i):null}return new dn(n.type,n,r)},dn.prototype.evaluate=function(t){var e=this.input.evaluate(t),n=this.beginIndex.evaluate(t);if(!Zt(e,[\"string\",\"array\"]))throw new se(\"Expected first argument to be of type array or string, but found \"+Wt(ie(e))+\" instead.\");if(this.endIndex){var r=this.endIndex.evaluate(t);return e.slice(n,r)}return e.slice(n)},dn.prototype.eachChild=function(t){t(this.input),t(this.beginIndex),this.endIndex&&t(this.endIndex)},dn.prototype.outputDefined=function(){return!1},dn.prototype.serialize=function(){if(null!=this.endIndex&&void 0!==this.endIndex){var t=this.endIndex.serialize();return[\"slice\",this.input.serialize(),this.beginIndex.serialize(),t]}return[\"slice\",this.input.serialize(),this.beginIndex.serialize()]};var gn=mn(\"==\",(function(t,e,n){return e===n}),pn),yn=mn(\"!=\",(function(t,e,n){return e!==n}),(function(t,e,n,r){return!pn(0,e,n,r)})),vn=mn(\"<\",(function(t,e,n){return e<n}),(function(t,e,n,r){return r.compare(e,n)<0})),_n=mn(\">\",(function(t,e,n){return e>n}),(function(t,e,n,r){return r.compare(e,n)>0})),bn=mn(\"<=\",(function(t,e,n){return e<=n}),(function(t,e,n,r){return r.compare(e,n)<=0})),xn=mn(\">=\",(function(t,e,n){return e>=n}),(function(t,e,n,r){return r.compare(e,n)>=0})),wn=function(t,e,n,r,i){this.type=zt,this.number=t,this.locale=e,this.currency=n,this.minFractionDigits=r,this.maxFractionDigits=i};wn.parse=function(t,e){if(3!==t.length)return e.error(\"Expected two arguments.\");var n=e.parse(t[1],1,Rt);if(!n)return null;var r=t[2];if(\"object\"!=typeof r||Array.isArray(r))return e.error(\"NumberFormat options argument must be an object.\");var i=null;if(r.locale&&!(i=e.parse(r.locale,1,zt)))return null;var a=null;if(r.currency&&!(a=e.parse(r.currency,1,zt)))return null;var o=null;if(r[\"min-fraction-digits\"]&&!(o=e.parse(r[\"min-fraction-digits\"],1,Rt)))return null;var s=null;return r[\"max-fraction-digits\"]&&!(s=e.parse(r[\"max-fraction-digits\"],1,Rt))?null:new wn(n,i,a,o,s)},wn.prototype.evaluate=function(t){return new Intl.NumberFormat(this.locale?this.locale.evaluate(t):[],{style:this.currency?\"currency\":\"decimal\",currency:this.currency?this.currency.evaluate(t):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(t):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(t):void 0}).format(this.number.evaluate(t))},wn.prototype.eachChild=function(t){t(this.number),this.locale&&t(this.locale),this.currency&&t(this.currency),this.minFractionDigits&&t(this.minFractionDigits),this.maxFractionDigits&&t(this.maxFractionDigits)},wn.prototype.outputDefined=function(){return!1},wn.prototype.serialize=function(){var t={};return this.locale&&(t.locale=this.locale.serialize()),this.currency&&(t.currency=this.currency.serialize()),this.minFractionDigits&&(t[\"min-fraction-digits\"]=this.minFractionDigits.serialize()),this.maxFractionDigits&&(t[\"max-fraction-digits\"]=this.maxFractionDigits.serialize()),[\"number-format\",this.number.serialize(),t]};var kn=function(t){this.type=Rt,this.input=t};kn.parse=function(t,e){if(2!==t.length)return e.error(\"Expected 1 argument, but found \"+(t.length-1)+\" instead.\");var n=e.parse(t[1],1);return n?\"array\"!==n.type.kind&&\"string\"!==n.type.kind&&\"value\"!==n.type.kind?e.error(\"Expected argument of type string or array, but found \"+Wt(n.type)+\" instead.\"):new kn(n):null},kn.prototype.evaluate=function(t){var e=this.input.evaluate(t);if(\"string\"==typeof e)return e.length;if(Array.isArray(e))return e.length;throw new se(\"Expected value to be of type string or array, but found \"+Wt(ie(e))+\" instead.\")},kn.prototype.eachChild=function(t){t(this.input)},kn.prototype.outputDefined=function(){return!1},kn.prototype.serialize=function(){var t=[\"length\"];return this.eachChild((function(e){t.push(e.serialize())})),t};var Mn={\"==\":gn,\"!=\":yn,\">\":_n,\"<\":vn,\">=\":xn,\"<=\":bn,array:ce,at:sn,boolean:ce,case:hn,coalesce:an,collator:ye,format:ue,image:he,in:ln,\"index-of\":cn,interpolate:nn,\"interpolate-hcl\":nn,\"interpolate-lab\":nn,length:kn,let:on,literal:oe,match:un,number:ce,\"number-format\":wn,object:ce,slice:dn,step:Be,string:ce,\"to-boolean\":fe,\"to-color\":fe,\"to-number\":fe,\"to-string\":fe,var:je,within:Ie};function Tn(t,e){var n=e[0],r=e[1],i=e[2],a=e[3];n=n.evaluate(t),r=r.evaluate(t),i=i.evaluate(t);var o=a?a.evaluate(t):1,s=ne(n,r,i,o);if(s)throw new se(s);return new Kt(n/255*o,r/255*o,i/255*o,o)}function Sn(t,e){return t in e}function An(t,e){var n=e[t];return void 0===n?null:n}function Ln(t){return{type:t}}function Cn(t){return{result:\"success\",value:t}}function En(t){return{result:\"error\",value:t}}function On(t){return\"data-driven\"===t[\"property-type\"]||\"cross-faded-data-driven\"===t[\"property-type\"]}function Dn(t){return!!t.expression&&t.expression.parameters.indexOf(\"zoom\")>-1}function In(t){return!!t.expression&&t.expression.interpolated}function Pn(t){return t instanceof Number?\"number\":t instanceof String?\"string\":t instanceof Boolean?\"boolean\":Array.isArray(t)?\"array\":null===t?\"null\":typeof t}function Rn(t){return\"object\"==typeof t&&null!==t&&!Array.isArray(t)}function zn(t){return t}function jn(t,e,n){return void 0!==t?t:void 0!==e?e:void 0!==n?n:void 0}function Fn(t,e,n,r,i){return jn(typeof n===i?r[n]:void 0,t.default,e.default)}function Nn(t,e,n){if(\"number\"!==Pn(n))return jn(t.default,e.default);var r=t.stops.length;if(1===r)return t.stops[0][1];if(n<=t.stops[0][0])return t.stops[0][1];if(n>=t.stops[r-1][0])return t.stops[r-1][1];var i=Ne(t.stops.map((function(t){return t[0]})),n);return t.stops[i][1]}function Bn(t,e,n){var r=void 0!==t.base?t.base:1;if(\"number\"!==Pn(n))return jn(t.default,e.default);var i=t.stops.length;if(1===i)return t.stops[0][1];if(n<=t.stops[0][0])return t.stops[0][1];if(n>=t.stops[i-1][0])return t.stops[i-1][1];var a=Ne(t.stops.map((function(t){return t[0]})),n),o=function(t,e,n,r){var i=r-n,a=t-n;return 0===i?0:1===e?a/i:(Math.pow(e,a)-1)/(Math.pow(e,i)-1)}(n,r,t.stops[a][0],t.stops[a+1][0]),s=t.stops[a][1],l=t.stops[a+1][1],c=He[e.type]||zn;if(t.colorSpace&&\"rgb\"!==t.colorSpace){var u=en[t.colorSpace];c=function(t,e){return u.reverse(u.interpolate(u.forward(t),u.forward(e),o))}}return\"function\"==typeof s.evaluate?{evaluate:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var n=s.evaluate.apply(void 0,t),r=l.evaluate.apply(void 0,t);if(void 0!==n&&void 0!==r)return c(n,r,o)}}:c(s,l,o)}function Yn(t,e,n){return\"color\"===e.type?n=Kt.parse(n):\"formatted\"===e.type?n=te.fromString(n.toString()):\"resolvedImage\"===e.type?n=ee.fromString(n.toString()):Pn(n)===e.type||\"enum\"===e.type&&e.values[n]||(n=void 0),jn(n,t.default,e.default)}ge.register(Mn,{error:[{kind:\"error\"},[zt],function(t,e){throw new se(e[0].evaluate(t))}],typeof:[zt,[Bt],function(t,e){return Wt(ie(e[0].evaluate(t)))}],\"to-rgba\":[Ut(Rt,4),[Ft],function(t,e){return e[0].evaluate(t).toArray()}],rgb:[Ft,[Rt,Rt,Rt],Tn],rgba:[Ft,[Rt,Rt,Rt,Rt],Tn],has:{type:jt,overloads:[[[zt],function(t,e){return Sn(e[0].evaluate(t),t.properties())}],[[zt,Nt],function(t,e){var n=e[1];return Sn(e[0].evaluate(t),n.evaluate(t))}]]},get:{type:Bt,overloads:[[[zt],function(t,e){return An(e[0].evaluate(t),t.properties())}],[[zt,Nt],function(t,e){var n=e[1];return An(e[0].evaluate(t),n.evaluate(t))}]]},\"feature-state\":[Bt,[zt],function(t,e){return An(e[0].evaluate(t),t.featureState||{})}],properties:[Nt,[],function(t){return t.properties()}],\"geometry-type\":[zt,[],function(t){return t.geometryType()}],id:[Bt,[],function(t){return t.id()}],zoom:[Rt,[],function(t){return t.globals.zoom}],\"heatmap-density\":[Rt,[],function(t){return t.globals.heatmapDensity||0}],\"line-progress\":[Rt,[],function(t){return t.globals.lineProgress||0}],accumulated:[Bt,[],function(t){return void 0===t.globals.accumulated?null:t.globals.accumulated}],\"+\":[Rt,Ln(Rt),function(t,e){for(var n=0,r=0,i=e;r<i.length;r+=1)n+=i[r].evaluate(t);return n}],\"*\":[Rt,Ln(Rt),function(t,e){for(var n=1,r=0,i=e;r<i.length;r+=1)n*=i[r].evaluate(t);return n}],\"-\":{type:Rt,overloads:[[[Rt,Rt],function(t,e){var n=e[1];return e[0].evaluate(t)-n.evaluate(t)}],[[Rt],function(t,e){return-e[0].evaluate(t)}]]},\"/\":[Rt,[Rt,Rt],function(t,e){var n=e[1];return e[0].evaluate(t)/n.evaluate(t)}],\"%\":[Rt,[Rt,Rt],function(t,e){var n=e[1];return e[0].evaluate(t)%n.evaluate(t)}],ln2:[Rt,[],function(){return Math.LN2}],pi:[Rt,[],function(){return Math.PI}],e:[Rt,[],function(){return Math.E}],\"^\":[Rt,[Rt,Rt],function(t,e){var n=e[1];return Math.pow(e[0].evaluate(t),n.evaluate(t))}],sqrt:[Rt,[Rt],function(t,e){return Math.sqrt(e[0].evaluate(t))}],log10:[Rt,[Rt],function(t,e){return Math.log(e[0].evaluate(t))/Math.LN10}],ln:[Rt,[Rt],function(t,e){return Math.log(e[0].evaluate(t))}],log2:[Rt,[Rt],function(t,e){return Math.log(e[0].evaluate(t))/Math.LN2}],sin:[Rt,[Rt],function(t,e){return Math.sin(e[0].evaluate(t))}],cos:[Rt,[Rt],function(t,e){return Math.cos(e[0].evaluate(t))}],tan:[Rt,[Rt],function(t,e){return Math.tan(e[0].evaluate(t))}],asin:[Rt,[Rt],function(t,e){return Math.asin(e[0].evaluate(t))}],acos:[Rt,[Rt],function(t,e){return Math.acos(e[0].evaluate(t))}],atan:[Rt,[Rt],function(t,e){return Math.atan(e[0].evaluate(t))}],min:[Rt,Ln(Rt),function(t,e){return Math.min.apply(Math,e.map((function(e){return e.evaluate(t)})))}],max:[Rt,Ln(Rt),function(t,e){return Math.max.apply(Math,e.map((function(e){return e.evaluate(t)})))}],abs:[Rt,[Rt],function(t,e){return Math.abs(e[0].evaluate(t))}],round:[Rt,[Rt],function(t,e){var n=e[0].evaluate(t);return n<0?-Math.round(-n):Math.round(n)}],floor:[Rt,[Rt],function(t,e){return Math.floor(e[0].evaluate(t))}],ceil:[Rt,[Rt],function(t,e){return Math.ceil(e[0].evaluate(t))}],\"filter-==\":[jt,[zt,Bt],function(t,e){var n=e[0],r=e[1];return t.properties()[n.value]===r.value}],\"filter-id-==\":[jt,[Bt],function(t,e){var n=e[0];return t.id()===n.value}],\"filter-type-==\":[jt,[zt],function(t,e){var n=e[0];return t.geometryType()===n.value}],\"filter-<\":[jt,[zt,Bt],function(t,e){var n=e[0],r=e[1],i=t.properties()[n.value],a=r.value;return typeof i==typeof a&&i<a}],\"filter-id-<\":[jt,[Bt],function(t,e){var n=e[0],r=t.id(),i=n.value;return typeof r==typeof i&&r<i}],\"filter->\":[jt,[zt,Bt],function(t,e){var n=e[0],r=e[1],i=t.properties()[n.value],a=r.value;return typeof i==typeof a&&i>a}],\"filter-id->\":[jt,[Bt],function(t,e){var n=e[0],r=t.id(),i=n.value;return typeof r==typeof i&&r>i}],\"filter-<=\":[jt,[zt,Bt],function(t,e){var n=e[0],r=e[1],i=t.properties()[n.value],a=r.value;return typeof i==typeof a&&i<=a}],\"filter-id-<=\":[jt,[Bt],function(t,e){var n=e[0],r=t.id(),i=n.value;return typeof r==typeof i&&r<=i}],\"filter->=\":[jt,[zt,Bt],function(t,e){var n=e[0],r=e[1],i=t.properties()[n.value],a=r.value;return typeof i==typeof a&&i>=a}],\"filter-id->=\":[jt,[Bt],function(t,e){var n=e[0],r=t.id(),i=n.value;return typeof r==typeof i&&r>=i}],\"filter-has\":[jt,[Bt],function(t,e){return e[0].value in t.properties()}],\"filter-has-id\":[jt,[],function(t){return null!==t.id()&&void 0!==t.id()}],\"filter-type-in\":[jt,[Ut(zt)],function(t,e){return e[0].value.indexOf(t.geometryType())>=0}],\"filter-id-in\":[jt,[Ut(Bt)],function(t,e){return e[0].value.indexOf(t.id())>=0}],\"filter-in-small\":[jt,[zt,Ut(Bt)],function(t,e){var n=e[0];return e[1].value.indexOf(t.properties()[n.value])>=0}],\"filter-in-large\":[jt,[zt,Ut(Bt)],function(t,e){var n=e[0],r=e[1];return function(t,e,n,r){for(;n<=r;){var i=n+r>>1;if(e[i]===t)return!0;e[i]>t?r=i-1:n=i+1}return!1}(t.properties()[n.value],r.value,0,r.value.length-1)}],all:{type:jt,overloads:[[[jt,jt],function(t,e){var n=e[1];return e[0].evaluate(t)&&n.evaluate(t)}],[Ln(jt),function(t,e){for(var n=0,r=e;n<r.length;n+=1)if(!r[n].evaluate(t))return!1;return!0}]]},any:{type:jt,overloads:[[[jt,jt],function(t,e){var n=e[1];return e[0].evaluate(t)||n.evaluate(t)}],[Ln(jt),function(t,e){for(var n=0,r=e;n<r.length;n+=1)if(r[n].evaluate(t))return!0;return!1}]]},\"!\":[jt,[jt],function(t,e){return!e[0].evaluate(t)}],\"is-supported-script\":[jt,[zt],function(t,e){var n=t.globals&&t.globals.isSupportedScript;return!n||n(e[0].evaluate(t))}],upcase:[zt,[zt],function(t,e){return e[0].evaluate(t).toUpperCase()}],downcase:[zt,[zt],function(t,e){return e[0].evaluate(t).toLowerCase()}],concat:[zt,Ln(Bt),function(t,e){return e.map((function(e){return ae(e.evaluate(t))})).join(\"\")}],\"resolved-locale\":[zt,[Yt],function(t,e){return e[0].evaluate(t).resolvedLocale()}]});var Hn=function(t,e){this.expression=t,this._warningHistory={},this._evaluator=new me,this._defaultValue=e?function(t){return\"color\"===t.type&&Rn(t.default)?new Kt(0,0,0,0):\"color\"===t.type?Kt.parse(t.default)||null:void 0===t.default?null:t.default}(e):null,this._enumValues=e&&\"enum\"===e.type?e.values:null};function Vn(t){return Array.isArray(t)&&t.length>0&&\"string\"==typeof t[0]&&t[0]in Mn}function Un(t,e){var n=new Fe(Mn,[],e?function(t){var e={color:Ft,string:zt,number:Rt,enum:zt,boolean:jt,formatted:Ht,resolvedImage:Vt};return\"array\"===t.type?Ut(e[t.value]||Bt,t.length):e[t.type]}(e):void 0),r=n.parse(t,void 0,void 0,void 0,e&&\"string\"===e.type?{typeAnnotation:\"coerce\"}:void 0);return r?Cn(new Hn(r,e)):En(n.errors)}Hn.prototype.evaluateWithoutErrorHandling=function(t,e,n,r,i,a){return this._evaluator.globals=t,this._evaluator.feature=e,this._evaluator.featureState=n,this._evaluator.canonical=r,this._evaluator.availableImages=i||null,this._evaluator.formattedSection=a,this.expression.evaluate(this._evaluator)},Hn.prototype.evaluate=function(t,e,n,r,i,a){this._evaluator.globals=t,this._evaluator.feature=e||null,this._evaluator.featureState=n||null,this._evaluator.canonical=r,this._evaluator.availableImages=i||null,this._evaluator.formattedSection=a||null;try{var o=this.expression.evaluate(this._evaluator);if(null==o||\"number\"==typeof o&&o!=o)return this._defaultValue;if(this._enumValues&&!(o in this._enumValues))throw new se(\"Expected value to be one of \"+Object.keys(this._enumValues).map((function(t){return JSON.stringify(t)})).join(\", \")+\", but found \"+JSON.stringify(o)+\" instead.\");return o}catch(t){return this._warningHistory[t.message]||(this._warningHistory[t.message]=!0,\"undefined\"!=typeof console&&console.warn(t.message)),this._defaultValue}};var Wn=function(t,e){this.kind=t,this._styleExpression=e,this.isStateDependent=\"constant\"!==t&&!Re(e.expression)};Wn.prototype.evaluateWithoutErrorHandling=function(t,e,n,r,i,a){return this._styleExpression.evaluateWithoutErrorHandling(t,e,n,r,i,a)},Wn.prototype.evaluate=function(t,e,n,r,i,a){return this._styleExpression.evaluate(t,e,n,r,i,a)};var qn=function(t,e,n,r){this.kind=t,this.zoomStops=n,this._styleExpression=e,this.isStateDependent=\"camera\"!==t&&!Re(e.expression),this.interpolationType=r};function Gn(t,e){if(\"error\"===(t=Un(t,e)).result)return t;var n=t.value.expression,r=Pe(n);if(!r&&!On(e))return En([new Dt(\"\",\"data expressions not supported\")]);var i=ze(n,[\"zoom\"]);if(!i&&!Dn(e))return En([new Dt(\"\",\"zoom expressions not supported\")]);var a=function t(e){var n=null;if(e instanceof on)n=t(e.result);else if(e instanceof an)for(var r=0,i=e.args;r<i.length&&!(n=t(i[r]));r+=1);else(e instanceof Be||e instanceof nn)&&e.input instanceof ge&&\"zoom\"===e.input.name&&(n=e);return n instanceof Dt||e.eachChild((function(e){var r=t(e);r instanceof Dt?n=r:!n&&r?n=new Dt(\"\",'\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.'):n&&r&&n!==r&&(n=new Dt(\"\",'Only one zoom-based \"step\" or \"interpolate\" subexpression may be used in an expression.'))})),n}(n);return a||i?a instanceof Dt?En([a]):a instanceof nn&&!In(e)?En([new Dt(\"\",'\"interpolate\" expressions cannot be used with this property')]):Cn(a?new qn(r?\"camera\":\"composite\",t.value,a.labels,a instanceof nn?a.interpolation:void 0):new Wn(r?\"constant\":\"source\",t.value)):En([new Dt(\"\",'\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.')])}qn.prototype.evaluateWithoutErrorHandling=function(t,e,n,r,i,a){return this._styleExpression.evaluateWithoutErrorHandling(t,e,n,r,i,a)},qn.prototype.evaluate=function(t,e,n,r,i,a){return this._styleExpression.evaluate(t,e,n,r,i,a)},qn.prototype.interpolationFactor=function(t,e,n){return this.interpolationType?nn.interpolationFactor(this.interpolationType,t,e,n):0};var Xn=function(t,e){this._parameters=t,this._specification=e,Ct(this,function t(e,n){var r,i,a,o=\"color\"===n.type,s=e.stops&&\"object\"==typeof e.stops[0][0],l=s||!(s||void 0!==e.property),c=e.type||(In(n)?\"exponential\":\"interval\");if(o&&((e=Ct({},e)).stops&&(e.stops=e.stops.map((function(t){return[t[0],Kt.parse(t[1])]}))),e.default=Kt.parse(e.default?e.default:n.default)),e.colorSpace&&\"rgb\"!==e.colorSpace&&!en[e.colorSpace])throw new Error(\"Unknown color space: \"+e.colorSpace);if(\"exponential\"===c)r=Bn;else if(\"interval\"===c)r=Nn;else if(\"categorical\"===c){r=Fn,i=Object.create(null);for(var u=0,h=e.stops;u<h.length;u+=1){var d=h[u];i[d[0]]=d[1]}a=typeof e.stops[0][0]}else{if(\"identity\"!==c)throw new Error('Unknown function type \"'+c+'\"');r=Yn}if(s){for(var f={},p=[],m=0;m<e.stops.length;m++){var g=e.stops[m],y=g[0].zoom;void 0===f[y]&&(f[y]={zoom:y,type:e.type,property:e.property,default:e.default,stops:[]},p.push(y)),f[y].stops.push([g[0].value,g[1]])}for(var v=[],_=0,b=p;_<b.length;_+=1){var x=b[_];v.push([f[x].zoom,t(f[x],n)])}var w={name:\"linear\"};return{kind:\"composite\",interpolationType:w,interpolationFactor:nn.interpolationFactor.bind(void 0,w),zoomStops:v.map((function(t){return t[0]})),evaluate:function(t,r){var i=t.zoom;return Bn({stops:v,base:e.base},n,i).evaluate(i,r)}}}if(l){var k=\"exponential\"===c?{name:\"exponential\",base:void 0!==e.base?e.base:1}:null;return{kind:\"camera\",interpolationType:k,interpolationFactor:nn.interpolationFactor.bind(void 0,k),zoomStops:e.stops.map((function(t){return t[0]})),evaluate:function(t){return r(e,n,t.zoom,i,a)}}}return{kind:\"source\",evaluate:function(t,o){var s=o&&o.properties?o.properties[e.property]:void 0;return void 0===s?jn(e.default,n.default):r(e,n,s,i,a)}}}(this._parameters,this._specification))};function Zn(t){var e=t.key,n=t.value,r=t.valueSpec||{},i=t.objectElementValidators||{},a=t.style,o=t.styleSpec,s=[],l=Pn(n);if(\"object\"!==l)return[new At(e,n,\"object expected, \"+l+\" found\")];for(var c in n){var u=c.split(\".\")[0],h=r[u]||r[\"*\"],d=void 0;if(i[u])d=i[u];else if(r[u])d=br;else if(i[\"*\"])d=i[\"*\"];else{if(!r[\"*\"]){s.push(new At(e,n[c],'unknown property \"'+c+'\"'));continue}d=br}s=s.concat(d({key:(e?e+\".\":e)+c,value:n[c],valueSpec:h,style:a,styleSpec:o,object:n,objectKey:c},n))}for(var f in r)i[f]||r[f].required&&void 0===r[f].default&&void 0===n[f]&&s.push(new At(e,n,'missing required property \"'+f+'\"'));return s}function Jn(t){var e=t.value,n=t.valueSpec,r=t.style,i=t.styleSpec,a=t.key,o=t.arrayElementValidator||br;if(\"array\"!==Pn(e))return[new At(a,e,\"array expected, \"+Pn(e)+\" found\")];if(n.length&&e.length!==n.length)return[new At(a,e,\"array length \"+n.length+\" expected, length \"+e.length+\" found\")];if(n[\"min-length\"]&&e.length<n[\"min-length\"])return[new At(a,e,\"array length at least \"+n[\"min-length\"]+\" expected, length \"+e.length+\" found\")];var s={type:n.value,values:n.values};i.$version<7&&(s.function=n.function),\"object\"===Pn(n.value)&&(s=n.value);for(var l=[],c=0;c<e.length;c++)l=l.concat(o({array:e,arrayIndex:c,value:e[c],valueSpec:s,style:r,styleSpec:i,key:a+\"[\"+c+\"]\"}));return l}function Kn(t){var e=t.key,n=t.value,r=t.valueSpec,i=Pn(n);return\"number\"===i&&n!=n&&(i=\"NaN\"),\"number\"!==i?[new At(e,n,\"number expected, \"+i+\" found\")]:\"minimum\"in r&&n<r.minimum?[new At(e,n,n+\" is less than the minimum value \"+r.minimum)]:\"maximum\"in r&&n>r.maximum?[new At(e,n,n+\" is greater than the maximum value \"+r.maximum)]:[]}function $n(t){var e,n,r,i=t.valueSpec,a=Et(t.value.type),o={},s=\"categorical\"!==a&&void 0===t.value.property,l=!s,c=\"array\"===Pn(t.value.stops)&&\"array\"===Pn(t.value.stops[0])&&\"object\"===Pn(t.value.stops[0][0]),u=Zn({key:t.key,value:t.value,valueSpec:t.styleSpec.function,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{stops:function(t){if(\"identity\"===a)return[new At(t.key,t.value,'identity function may not have a \"stops\" property')];var e=[],n=t.value;return e=e.concat(Jn({key:t.key,value:n,valueSpec:t.valueSpec,style:t.style,styleSpec:t.styleSpec,arrayElementValidator:h})),\"array\"===Pn(n)&&0===n.length&&e.push(new At(t.key,n,\"array must have at least one stop\")),e},default:function(t){return br({key:t.key,value:t.value,valueSpec:i,style:t.style,styleSpec:t.styleSpec})}}});return\"identity\"===a&&s&&u.push(new At(t.key,t.value,'missing required property \"property\"')),\"identity\"===a||t.value.stops||u.push(new At(t.key,t.value,'missing required property \"stops\"')),\"exponential\"===a&&t.valueSpec.expression&&!In(t.valueSpec)&&u.push(new At(t.key,t.value,\"exponential functions not supported\")),t.styleSpec.$version>=8&&(l&&!On(t.valueSpec)?u.push(new At(t.key,t.value,\"property functions not supported\")):s&&!Dn(t.valueSpec)&&u.push(new At(t.key,t.value,\"zoom functions not supported\"))),\"categorical\"!==a&&!c||void 0!==t.value.property||u.push(new At(t.key,t.value,'\"property\" property is required')),u;function h(t){var e=[],a=t.value,s=t.key;if(\"array\"!==Pn(a))return[new At(s,a,\"array expected, \"+Pn(a)+\" found\")];if(2!==a.length)return[new At(s,a,\"array length 2 expected, length \"+a.length+\" found\")];if(c){if(\"object\"!==Pn(a[0]))return[new At(s,a,\"object expected, \"+Pn(a[0])+\" found\")];if(void 0===a[0].zoom)return[new At(s,a,\"object stop key must have zoom\")];if(void 0===a[0].value)return[new At(s,a,\"object stop key must have value\")];if(r&&r>Et(a[0].zoom))return[new At(s,a[0].zoom,\"stop zoom values must appear in ascending order\")];Et(a[0].zoom)!==r&&(r=Et(a[0].zoom),n=void 0,o={}),e=e.concat(Zn({key:s+\"[0]\",value:a[0],valueSpec:{zoom:{}},style:t.style,styleSpec:t.styleSpec,objectElementValidators:{zoom:Kn,value:d}}))}else e=e.concat(d({key:s+\"[0]\",value:a[0],valueSpec:{},style:t.style,styleSpec:t.styleSpec},a));return Vn(Ot(a[1]))?e.concat([new At(s+\"[1]\",a[1],\"expressions are not allowed in function stops.\")]):e.concat(br({key:s+\"[1]\",value:a[1],valueSpec:i,style:t.style,styleSpec:t.styleSpec}))}function d(t,r){var s=Pn(t.value),l=Et(t.value),c=null!==t.value?t.value:r;if(e){if(s!==e)return[new At(t.key,c,s+\" stop domain type must match previous stop domain type \"+e)]}else e=s;if(\"number\"!==s&&\"string\"!==s&&\"boolean\"!==s)return[new At(t.key,c,\"stop domain value must be a number, string, or boolean\")];if(\"number\"!==s&&\"categorical\"!==a){var u=\"number expected, \"+s+\" found\";return On(i)&&void 0===a&&(u+='\\nIf you intended to use a categorical function, specify `\"type\": \"categorical\"`.'),[new At(t.key,c,u)]}return\"categorical\"!==a||\"number\"!==s||isFinite(l)&&Math.floor(l)===l?\"categorical\"!==a&&\"number\"===s&&void 0!==n&&l<n?[new At(t.key,c,\"stop domain values must appear in ascending order\")]:(n=l,\"categorical\"===a&&l in o?[new At(t.key,c,\"stop domain values must be unique\")]:(o[l]=!0,[])):[new At(t.key,c,\"integer expected, found \"+l)]}}function Qn(t){var e=(\"property\"===t.expressionContext?Gn:Un)(Ot(t.value),t.valueSpec);if(\"error\"===e.result)return e.value.map((function(e){return new At(\"\"+t.key+e.key,t.value,e.message)}));var n=e.value.expression||e.value._styleExpression.expression;if(\"property\"===t.expressionContext&&\"text-font\"===t.propertyKey&&!n.outputDefined())return[new At(t.key,t.value,'Invalid data expression for \"'+t.propertyKey+'\". Output values must be contained as literals within the expression.')];if(\"property\"===t.expressionContext&&\"layout\"===t.propertyType&&!Re(n))return[new At(t.key,t.value,'\"feature-state\" data expressions are not supported with layout properties.')];if(\"filter\"===t.expressionContext&&!Re(n))return[new At(t.key,t.value,'\"feature-state\" data expressions are not supported with filters.')];if(t.expressionContext&&0===t.expressionContext.indexOf(\"cluster\")){if(!ze(n,[\"zoom\",\"feature-state\"]))return[new At(t.key,t.value,'\"zoom\" and \"feature-state\" expressions are not supported with cluster properties.')];if(\"cluster-initial\"===t.expressionContext&&!Pe(n))return[new At(t.key,t.value,\"Feature data expressions are not supported with initial expression part of cluster properties.\")]}return[]}function tr(t){var e=t.key,n=t.value,r=t.valueSpec,i=[];return Array.isArray(r.values)?-1===r.values.indexOf(Et(n))&&i.push(new At(e,n,\"expected one of [\"+r.values.join(\", \")+\"], \"+JSON.stringify(n)+\" found\")):-1===Object.keys(r.values).indexOf(Et(n))&&i.push(new At(e,n,\"expected one of [\"+Object.keys(r.values).join(\", \")+\"], \"+JSON.stringify(n)+\" found\")),i}function er(t){if(!0===t||!1===t)return!0;if(!Array.isArray(t)||0===t.length)return!1;switch(t[0]){case\"has\":return t.length>=2&&\"$id\"!==t[1]&&\"$type\"!==t[1];case\"in\":return t.length>=3&&(\"string\"!=typeof t[1]||Array.isArray(t[2]));case\"!in\":case\"!has\":case\"none\":return!1;case\"==\":case\"!=\":case\">\":case\">=\":case\"<\":case\"<=\":return 3!==t.length||Array.isArray(t[1])||Array.isArray(t[2]);case\"any\":case\"all\":for(var e=0,n=t.slice(1);e<n.length;e+=1){var r=n[e];if(!er(r)&&\"boolean\"!=typeof r)return!1}return!0;default:return!0}}Xn.deserialize=function(t){return new Xn(t._parameters,t._specification)},Xn.serialize=function(t){return{_parameters:t._parameters,_specification:t._specification}};var nr={type:\"boolean\",default:!1,transition:!1,\"property-type\":\"data-driven\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]}};function rr(t){if(null==t)return{filter:function(){return!0},needGeometry:!1};er(t)||(t=ar(t));var e=Un(t,nr);if(\"error\"===e.result)throw new Error(e.value.map((function(t){return t.key+\": \"+t.message})).join(\", \"));return{filter:function(t,n,r){return e.value.evaluate(t,n,{},r)},needGeometry:function t(e){if(!Array.isArray(e))return!1;if(\"within\"===e[0])return!0;for(var n=1;n<e.length;n++)if(t(e[n]))return!0;return!1}(t)}}function ir(t,e){return t<e?-1:t>e?1:0}function ar(t){if(!t)return!0;var e,n=t[0];return t.length<=1?\"any\"!==n:\"==\"===n?or(t[1],t[2],\"==\"):\"!=\"===n?cr(or(t[1],t[2],\"==\")):\"<\"===n||\">\"===n||\"<=\"===n||\">=\"===n?or(t[1],t[2],n):\"any\"===n?(e=t.slice(1),[\"any\"].concat(e.map(ar))):\"all\"===n?[\"all\"].concat(t.slice(1).map(ar)):\"none\"===n?[\"all\"].concat(t.slice(1).map(ar).map(cr)):\"in\"===n?sr(t[1],t.slice(2)):\"!in\"===n?cr(sr(t[1],t.slice(2))):\"has\"===n?lr(t[1]):\"!has\"===n?cr(lr(t[1])):\"within\"!==n||t}function or(t,e,n){switch(t){case\"$type\":return[\"filter-type-\"+n,e];case\"$id\":return[\"filter-id-\"+n,e];default:return[\"filter-\"+n,t,e]}}function sr(t,e){if(0===e.length)return!1;switch(t){case\"$type\":return[\"filter-type-in\",[\"literal\",e]];case\"$id\":return[\"filter-id-in\",[\"literal\",e]];default:return e.length>200&&!e.some((function(t){return typeof t!=typeof e[0]}))?[\"filter-in-large\",t,[\"literal\",e.sort(ir)]]:[\"filter-in-small\",t,[\"literal\",e]]}}function lr(t){switch(t){case\"$type\":return!0;case\"$id\":return[\"filter-has-id\"];default:return[\"filter-has\",t]}}function cr(t){return[\"!\",t]}function ur(t){return er(Ot(t.value))?Qn(Ct({},t,{expressionContext:\"filter\",valueSpec:{value:\"boolean\"}})):function t(e){var n=e.value,r=e.key;if(\"array\"!==Pn(n))return[new At(r,n,\"array expected, \"+Pn(n)+\" found\")];var i,a=e.styleSpec,o=[];if(n.length<1)return[new At(r,n,\"filter array must have at least 1 element\")];switch(o=o.concat(tr({key:r+\"[0]\",value:n[0],valueSpec:a.filter_operator,style:e.style,styleSpec:e.styleSpec})),Et(n[0])){case\"<\":case\"<=\":case\">\":case\">=\":n.length>=2&&\"$type\"===Et(n[1])&&o.push(new At(r,n,'\"$type\" cannot be use with operator \"'+n[0]+'\"'));case\"==\":case\"!=\":3!==n.length&&o.push(new At(r,n,'filter array for operator \"'+n[0]+'\" must have 3 elements'));case\"in\":case\"!in\":n.length>=2&&\"string\"!==(i=Pn(n[1]))&&o.push(new At(r+\"[1]\",n[1],\"string expected, \"+i+\" found\"));for(var s=2;s<n.length;s++)i=Pn(n[s]),\"$type\"===Et(n[1])?o=o.concat(tr({key:r+\"[\"+s+\"]\",value:n[s],valueSpec:a.geometry_type,style:e.style,styleSpec:e.styleSpec})):\"string\"!==i&&\"number\"!==i&&\"boolean\"!==i&&o.push(new At(r+\"[\"+s+\"]\",n[s],\"string, number, or boolean expected, \"+i+\" found\"));break;case\"any\":case\"all\":case\"none\":for(var l=1;l<n.length;l++)o=o.concat(t({key:r+\"[\"+l+\"]\",value:n[l],style:e.style,styleSpec:e.styleSpec}));break;case\"has\":case\"!has\":i=Pn(n[1]),2!==n.length?o.push(new At(r,n,'filter array for \"'+n[0]+'\" operator must have 2 elements')):\"string\"!==i&&o.push(new At(r+\"[1]\",n[1],\"string expected, \"+i+\" found\"));break;case\"within\":i=Pn(n[1]),2!==n.length?o.push(new At(r,n,'filter array for \"'+n[0]+'\" operator must have 2 elements')):\"object\"!==i&&o.push(new At(r+\"[1]\",n[1],\"object expected, \"+i+\" found\"))}return o}(t)}function hr(t,e){var n=t.key,r=t.style,i=t.styleSpec,a=t.value,o=t.objectKey,s=i[e+\"_\"+t.layerType];if(!s)return[];var l=o.match(/^(.*)-transition$/);if(\"paint\"===e&&l&&s[l[1]]&&s[l[1]].transition)return br({key:n,value:a,valueSpec:i.transition,style:r,styleSpec:i});var c,u=t.valueSpec||s[o];if(!u)return[new At(n,a,'unknown property \"'+o+'\"')];if(\"string\"===Pn(a)&&On(u)&&!u.tokens&&(c=/^{([^}]+)}$/.exec(a)))return[new At(n,a,'\"'+o+'\" does not support interpolation syntax\\nUse an identity property function instead: `{ \"type\": \"identity\", \"property\": '+JSON.stringify(c[1])+\" }`.\")];var h=[];return\"symbol\"===t.layerType&&(\"text-field\"===o&&r&&!r.glyphs&&h.push(new At(n,a,'use of \"text-field\" requires a style \"glyphs\" property')),\"text-font\"===o&&Rn(Ot(a))&&\"identity\"===Et(a.type)&&h.push(new At(n,a,'\"text-font\" does not support identity functions'))),h.concat(br({key:t.key,value:a,valueSpec:u,style:r,styleSpec:i,expressionContext:\"property\",propertyType:e,propertyKey:o}))}function dr(t){return hr(t,\"paint\")}function fr(t){return hr(t,\"layout\")}function pr(t){var e=[],n=t.value,r=t.key,i=t.style,a=t.styleSpec;n.type||n.ref||e.push(new At(r,n,'either \"type\" or \"ref\" is required'));var o,s=Et(n.type),l=Et(n.ref);if(n.id)for(var c=Et(n.id),u=0;u<t.arrayIndex;u++){var h=i.layers[u];Et(h.id)===c&&e.push(new At(r,n.id,'duplicate layer id \"'+n.id+'\", previously used at line '+h.id.__line__))}if(\"ref\"in n)[\"type\",\"source\",\"source-layer\",\"filter\",\"layout\"].forEach((function(t){t in n&&e.push(new At(r,n[t],'\"'+t+'\" is prohibited for ref layers'))})),i.layers.forEach((function(t){Et(t.id)===l&&(o=t)})),o?o.ref?e.push(new At(r,n.ref,\"ref cannot reference another ref layer\")):s=Et(o.type):e.push(new At(r,n.ref,'ref layer \"'+l+'\" not found'));else if(\"background\"!==s)if(n.source){var d=i.sources&&i.sources[n.source],f=d&&Et(d.type);d?\"vector\"===f&&\"raster\"===s?e.push(new At(r,n.source,'layer \"'+n.id+'\" requires a raster source')):\"raster\"===f&&\"raster\"!==s?e.push(new At(r,n.source,'layer \"'+n.id+'\" requires a vector source')):\"vector\"!==f||n[\"source-layer\"]?\"raster-dem\"===f&&\"hillshade\"!==s?e.push(new At(r,n.source,\"raster-dem source can only be used with layer type 'hillshade'.\")):\"line\"!==s||!n.paint||!n.paint[\"line-gradient\"]||\"geojson\"===f&&d.lineMetrics||e.push(new At(r,n,'layer \"'+n.id+'\" specifies a line-gradient, which requires a GeoJSON source with `lineMetrics` enabled.')):e.push(new At(r,n,'layer \"'+n.id+'\" must specify a \"source-layer\"')):e.push(new At(r,n.source,'source \"'+n.source+'\" not found'))}else e.push(new At(r,n,'missing required property \"source\"'));return e=e.concat(Zn({key:r,value:n,valueSpec:a.layer,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{\"*\":function(){return[]},type:function(){return br({key:r+\".type\",value:n.type,valueSpec:a.layer.type,style:t.style,styleSpec:t.styleSpec,object:n,objectKey:\"type\"})},filter:ur,layout:function(t){return Zn({layer:n,key:t.key,value:t.value,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{\"*\":function(t){return fr(Ct({layerType:s},t))}}})},paint:function(t){return Zn({layer:n,key:t.key,value:t.value,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{\"*\":function(t){return dr(Ct({layerType:s},t))}}})}}}))}function mr(t){var e=t.value,n=t.key,r=Pn(e);return\"string\"!==r?[new At(n,e,\"string expected, \"+r+\" found\")]:[]}var gr={promoteId:function(t){var e=t.key,n=t.value;if(\"string\"===Pn(n))return mr({key:e,value:n});var r=[];for(var i in n)r.push.apply(r,mr({key:e+\".\"+i,value:n[i]}));return r}};function yr(t){var e=t.value,n=t.key,r=t.styleSpec,i=t.style;if(!e.type)return[new At(n,e,'\"type\" is required')];var a,o=Et(e.type);switch(o){case\"vector\":case\"raster\":case\"raster-dem\":return Zn({key:n,value:e,valueSpec:r[\"source_\"+o.replace(\"-\",\"_\")],style:t.style,styleSpec:r,objectElementValidators:gr});case\"geojson\":if(a=Zn({key:n,value:e,valueSpec:r.source_geojson,style:i,styleSpec:r,objectElementValidators:gr}),e.cluster)for(var s in e.clusterProperties){var l=e.clusterProperties[s],c=l[0],u=\"string\"==typeof c?[c,[\"accumulated\"],[\"get\",s]]:c;a.push.apply(a,Qn({key:n+\".\"+s+\".map\",value:l[1],expressionContext:\"cluster-map\"})),a.push.apply(a,Qn({key:n+\".\"+s+\".reduce\",value:u,expressionContext:\"cluster-reduce\"}))}return a;case\"video\":return Zn({key:n,value:e,valueSpec:r.source_video,style:i,styleSpec:r});case\"image\":return Zn({key:n,value:e,valueSpec:r.source_image,style:i,styleSpec:r});case\"canvas\":return[new At(n,null,\"Please use runtime APIs to add canvas sources, rather than including them in stylesheets.\",\"source.canvas\")];default:return tr({key:n+\".type\",value:e.type,valueSpec:{values:[\"vector\",\"raster\",\"raster-dem\",\"geojson\",\"video\",\"image\"]},style:i,styleSpec:r})}}function vr(t){var e=t.value,n=t.styleSpec,r=n.light,i=t.style,a=[],o=Pn(e);if(void 0===e)return a;if(\"object\"!==o)return a.concat([new At(\"light\",e,\"object expected, \"+o+\" found\")]);for(var s in e){var l=s.match(/^(.*)-transition$/);a=a.concat(l&&r[l[1]]&&r[l[1]].transition?br({key:s,value:e[s],valueSpec:n.transition,style:i,styleSpec:n}):r[s]?br({key:s,value:e[s],valueSpec:r[s],style:i,styleSpec:n}):[new At(s,e[s],'unknown property \"'+s+'\"')])}return a}var _r={\"*\":function(){return[]},array:Jn,boolean:function(t){var e=t.value,n=t.key,r=Pn(e);return\"boolean\"!==r?[new At(n,e,\"boolean expected, \"+r+\" found\")]:[]},number:Kn,color:function(t){var e=t.key,n=t.value,r=Pn(n);return\"string\"!==r?[new At(e,n,\"color expected, \"+r+\" found\")]:null===Jt(n)?[new At(e,n,'color expected, \"'+n+'\" found')]:[]},constants:Lt,enum:tr,filter:ur,function:$n,layer:pr,object:Zn,source:yr,light:vr,string:mr,formatted:function(t){return 0===mr(t).length?[]:Qn(t)},resolvedImage:function(t){return 0===mr(t).length?[]:Qn(t)}};function br(t){var e=t.value,n=t.valueSpec,r=t.styleSpec;return n.expression&&Rn(Et(e))?$n(t):n.expression&&Vn(Ot(e))?Qn(t):n.type&&_r[n.type]?_r[n.type](t):Zn(Ct({},t,{valueSpec:n.type?r[n.type]:n}))}function xr(t){var e=t.value,n=t.key,r=mr(t);return r.length||(-1===e.indexOf(\"{fontstack}\")&&r.push(new At(n,e,'\"glyphs\" url must include a \"{fontstack}\" token')),-1===e.indexOf(\"{range}\")&&r.push(new At(n,e,'\"glyphs\" url must include a \"{range}\" token'))),r}function wr(t,e){void 0===e&&(e=St);var n=[];return n=n.concat(br({key:\"\",value:t,valueSpec:e.$root,styleSpec:e,style:t,objectElementValidators:{glyphs:xr,\"*\":function(){return[]}}})),t.constants&&(n=n.concat(Lt({key:\"constants\",value:t.constants,style:t,styleSpec:e}))),kr(n)}function kr(t){return[].concat(t).sort((function(t,e){return t.line-e.line}))}function Mr(t){return function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];return kr(t.apply(this,e))}}wr.source=Mr(yr),wr.light=Mr(vr),wr.layer=Mr(pr),wr.filter=Mr(ur),wr.paintProperty=Mr(dr),wr.layoutProperty=Mr(fr);var Tr=wr,Sr=Tr.light,Ar=Tr.paintProperty,Lr=Tr.layoutProperty;function Cr(t,e){var n=!1;if(e&&e.length)for(var r=0,i=e;r<i.length;r+=1)t.fire(new Mt(new Error(i[r].message))),n=!0;return n}var Er=Or;function Or(t,e,n){var r=this.cells=[];if(t instanceof ArrayBuffer){this.arrayBuffer=t;var i=new Int32Array(this.arrayBuffer);t=i[0],this.d=(e=i[1])+2*(n=i[2]);for(var a=0;a<this.d*this.d;a++){var o=i[3+a],s=i[3+a+1];r.push(o===s?null:i.subarray(o,s))}var l=i[3+r.length+1];this.keys=i.subarray(i[3+r.length],l),this.bboxes=i.subarray(l),this.insert=this._insertReadonly}else{this.d=e+2*n;for(var c=0;c<this.d*this.d;c++)r.push([]);this.keys=[],this.bboxes=[]}this.n=e,this.extent=t,this.padding=n,this.scale=e/t,this.uid=0;var u=n/e*t;this.min=-u,this.max=t+u}Or.prototype.insert=function(t,e,n,r,i){this._forEachCell(e,n,r,i,this._insertCell,this.uid++),this.keys.push(t),this.bboxes.push(e),this.bboxes.push(n),this.bboxes.push(r),this.bboxes.push(i)},Or.prototype._insertReadonly=function(){throw\"Cannot insert into a GridIndex created from an ArrayBuffer.\"},Or.prototype._insertCell=function(t,e,n,r,i,a){this.cells[i].push(a)},Or.prototype.query=function(t,e,n,r,i){var a=this.min,o=this.max;if(t<=a&&e<=a&&o<=n&&o<=r&&!i)return Array.prototype.slice.call(this.keys);var s=[];return this._forEachCell(t,e,n,r,this._queryCell,s,{},i),s},Or.prototype._queryCell=function(t,e,n,r,i,a,o,s){var l=this.cells[i];if(null!==l)for(var c=this.keys,u=this.bboxes,h=0;h<l.length;h++){var d=l[h];if(void 0===o[d]){var f=4*d;(s?s(u[f+0],u[f+1],u[f+2],u[f+3]):t<=u[f+2]&&e<=u[f+3]&&n>=u[f+0]&&r>=u[f+1])?(o[d]=!0,a.push(c[d])):o[d]=!1}}},Or.prototype._forEachCell=function(t,e,n,r,i,a,o,s){for(var l=this._convertToCellCoord(t),c=this._convertToCellCoord(e),u=this._convertToCellCoord(n),h=this._convertToCellCoord(r),d=l;d<=u;d++)for(var f=c;f<=h;f++){var p=this.d*f+d;if((!s||s(this._convertFromCellCoord(d),this._convertFromCellCoord(f),this._convertFromCellCoord(d+1),this._convertFromCellCoord(f+1)))&&i.call(this,t,e,n,r,p,a,o,s))return}},Or.prototype._convertFromCellCoord=function(t){return(t-this.padding)/this.scale},Or.prototype._convertToCellCoord=function(t){return Math.max(0,Math.min(this.d-1,Math.floor(t*this.scale)+this.padding))},Or.prototype.toArrayBuffer=function(){if(this.arrayBuffer)return this.arrayBuffer;for(var t=this.cells,e=3+this.cells.length+1+1,n=0,r=0;r<this.cells.length;r++)n+=this.cells[r].length;var i=new Int32Array(e+n+this.keys.length+this.bboxes.length);i[0]=this.extent,i[1]=this.n,i[2]=this.padding;for(var a=e,o=0;o<t.length;o++){var s=t[o];i[3+o]=a,i.set(s,a),a+=s.length}return i[3+t.length]=a,i.set(this.keys,a),i[3+t.length+1]=a+=this.keys.length,i.set(this.bboxes,a),a+=this.bboxes.length,i.buffer};var Dr=self.ImageData,Ir=self.ImageBitmap,Pr={};function Rr(t,e,n){void 0===n&&(n={}),Object.defineProperty(e,\"_classRegistryKey\",{value:t,writeable:!1}),Pr[t]={klass:e,omit:n.omit||[],shallow:n.shallow||[]}}for(var zr in Rr(\"Object\",Object),Er.serialize=function(t,e){var n=t.toArrayBuffer();return e&&e.push(n),{buffer:n}},Er.deserialize=function(t){return new Er(t.buffer)},Rr(\"Grid\",Er),Rr(\"Color\",Kt),Rr(\"Error\",Error),Rr(\"ResolvedImage\",ee),Rr(\"StylePropertyFunction\",Xn),Rr(\"StyleExpression\",Hn,{omit:[\"_evaluator\"]}),Rr(\"ZoomDependentExpression\",qn),Rr(\"ZoomConstantExpression\",Wn),Rr(\"CompoundExpression\",ge,{omit:[\"_evaluate\"]}),Mn)Mn[zr]._classRegistryKey||Rr(\"Expression_\"+zr,Mn[zr]);function jr(t){return t&&\"undefined\"!=typeof ArrayBuffer&&(t instanceof ArrayBuffer||t.constructor&&\"ArrayBuffer\"===t.constructor.name)}function Fr(t){return Ir&&t instanceof Ir}function Nr(t,e){if(null==t||\"boolean\"==typeof t||\"number\"==typeof t||\"string\"==typeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp)return t;if(jr(t)||Fr(t))return e&&e.push(t),t;if(ArrayBuffer.isView(t)){var n=t;return e&&e.push(n.buffer),n}if(t instanceof Dr)return e&&e.push(t.data.buffer),t;if(Array.isArray(t)){for(var r=[],i=0,a=t;i<a.length;i+=1)r.push(Nr(a[i],e));return r}if(\"object\"==typeof t){var o=t.constructor,s=o._classRegistryKey;if(!s)throw new Error(\"can't serialize object of unregistered class\");var l=o.serialize?o.serialize(t,e):{};if(!o.serialize){for(var c in t)if(t.hasOwnProperty(c)&&!(Pr[s].omit.indexOf(c)>=0)){var u=t[c];l[c]=Pr[s].shallow.indexOf(c)>=0?u:Nr(u,e)}t instanceof Error&&(l.message=t.message)}if(l.$name)throw new Error(\"$name property is reserved for worker serialization logic.\");return\"Object\"!==s&&(l.$name=s),l}throw new Error(\"can't serialize object of type \"+typeof t)}function Br(t){if(null==t||\"boolean\"==typeof t||\"number\"==typeof t||\"string\"==typeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp||jr(t)||Fr(t)||ArrayBuffer.isView(t)||t instanceof Dr)return t;if(Array.isArray(t))return t.map(Br);if(\"object\"==typeof t){var e=t.$name||\"Object\",n=Pr[e].klass;if(!n)throw new Error(\"can't deserialize unregistered class \"+e);if(n.deserialize)return n.deserialize(t);for(var r=Object.create(n.prototype),i=0,a=Object.keys(t);i<a.length;i+=1){var o=a[i];if(\"$name\"!==o){var s=t[o];r[o]=Pr[e].shallow.indexOf(o)>=0?s:Br(s)}}return r}throw new Error(\"can't deserialize object of type \"+typeof t)}var Yr=function(){this.first=!0};Yr.prototype.update=function(t,e){var n=Math.floor(t);return this.first?(this.first=!1,this.lastIntegerZoom=n,this.lastIntegerZoomTime=0,this.lastZoom=t,this.lastFloorZoom=n,!0):(this.lastFloorZoom>n?(this.lastIntegerZoom=n+1,this.lastIntegerZoomTime=e):this.lastFloorZoom<n&&(this.lastIntegerZoom=n,this.lastIntegerZoomTime=e),t!==this.lastZoom&&(this.lastZoom=t,this.lastFloorZoom=n,!0))};var Hr={\"Latin-1 Supplement\":function(t){return t>=128&&t<=255},Arabic:function(t){return t>=1536&&t<=1791},\"Arabic Supplement\":function(t){return t>=1872&&t<=1919},\"Arabic Extended-A\":function(t){return t>=2208&&t<=2303},\"Hangul Jamo\":function(t){return t>=4352&&t<=4607},\"Unified Canadian Aboriginal Syllabics\":function(t){return t>=5120&&t<=5759},Khmer:function(t){return t>=6016&&t<=6143},\"Unified Canadian Aboriginal Syllabics Extended\":function(t){return t>=6320&&t<=6399},\"General Punctuation\":function(t){return t>=8192&&t<=8303},\"Letterlike Symbols\":function(t){return t>=8448&&t<=8527},\"Number Forms\":function(t){return t>=8528&&t<=8591},\"Miscellaneous Technical\":function(t){return t>=8960&&t<=9215},\"Control Pictures\":function(t){return t>=9216&&t<=9279},\"Optical Character Recognition\":function(t){return t>=9280&&t<=9311},\"Enclosed Alphanumerics\":function(t){return t>=9312&&t<=9471},\"Geometric Shapes\":function(t){return t>=9632&&t<=9727},\"Miscellaneous Symbols\":function(t){return t>=9728&&t<=9983},\"Miscellaneous Symbols and Arrows\":function(t){return t>=11008&&t<=11263},\"CJK Radicals Supplement\":function(t){return t>=11904&&t<=12031},\"Kangxi Radicals\":function(t){return t>=12032&&t<=12255},\"Ideographic Description Characters\":function(t){return t>=12272&&t<=12287},\"CJK Symbols and Punctuation\":function(t){return t>=12288&&t<=12351},Hiragana:function(t){return t>=12352&&t<=12447},Katakana:function(t){return t>=12448&&t<=12543},Bopomofo:function(t){return t>=12544&&t<=12591},\"Hangul Compatibility Jamo\":function(t){return t>=12592&&t<=12687},Kanbun:function(t){return t>=12688&&t<=12703},\"Bopomofo Extended\":function(t){return t>=12704&&t<=12735},\"CJK Strokes\":function(t){return t>=12736&&t<=12783},\"Katakana Phonetic Extensions\":function(t){return t>=12784&&t<=12799},\"Enclosed CJK Letters and Months\":function(t){return t>=12800&&t<=13055},\"CJK Compatibility\":function(t){return t>=13056&&t<=13311},\"CJK Unified Ideographs Extension A\":function(t){return t>=13312&&t<=19903},\"Yijing Hexagram Symbols\":function(t){return t>=19904&&t<=19967},\"CJK Unified Ideographs\":function(t){return t>=19968&&t<=40959},\"Yi Syllables\":function(t){return t>=40960&&t<=42127},\"Yi Radicals\":function(t){return t>=42128&&t<=42191},\"Hangul Jamo Extended-A\":function(t){return t>=43360&&t<=43391},\"Hangul Syllables\":function(t){return t>=44032&&t<=55215},\"Hangul Jamo Extended-B\":function(t){return t>=55216&&t<=55295},\"Private Use Area\":function(t){return t>=57344&&t<=63743},\"CJK Compatibility Ideographs\":function(t){return t>=63744&&t<=64255},\"Arabic Presentation Forms-A\":function(t){return t>=64336&&t<=65023},\"Vertical Forms\":function(t){return t>=65040&&t<=65055},\"CJK Compatibility Forms\":function(t){return t>=65072&&t<=65103},\"Small Form Variants\":function(t){return t>=65104&&t<=65135},\"Arabic Presentation Forms-B\":function(t){return t>=65136&&t<=65279},\"Halfwidth and Fullwidth Forms\":function(t){return t>=65280&&t<=65519}};function Vr(t){for(var e=0,n=t;e<n.length;e+=1)if(Ur(n[e].charCodeAt(0)))return!0;return!1}function Ur(t){return!(746!==t&&747!==t&&(t<4352||!(Hr[\"Bopomofo Extended\"](t)||Hr.Bopomofo(t)||Hr[\"CJK Compatibility Forms\"](t)&&!(t>=65097&&t<=65103)||Hr[\"CJK Compatibility Ideographs\"](t)||Hr[\"CJK Compatibility\"](t)||Hr[\"CJK Radicals Supplement\"](t)||Hr[\"CJK Strokes\"](t)||!(!Hr[\"CJK Symbols and Punctuation\"](t)||t>=12296&&t<=12305||t>=12308&&t<=12319||12336===t)||Hr[\"CJK Unified Ideographs Extension A\"](t)||Hr[\"CJK Unified Ideographs\"](t)||Hr[\"Enclosed CJK Letters and Months\"](t)||Hr[\"Hangul Compatibility Jamo\"](t)||Hr[\"Hangul Jamo Extended-A\"](t)||Hr[\"Hangul Jamo Extended-B\"](t)||Hr[\"Hangul Jamo\"](t)||Hr[\"Hangul Syllables\"](t)||Hr.Hiragana(t)||Hr[\"Ideographic Description Characters\"](t)||Hr.Kanbun(t)||Hr[\"Kangxi Radicals\"](t)||Hr[\"Katakana Phonetic Extensions\"](t)||Hr.Katakana(t)&&12540!==t||!(!Hr[\"Halfwidth and Fullwidth Forms\"](t)||65288===t||65289===t||65293===t||t>=65306&&t<=65310||65339===t||65341===t||65343===t||t>=65371&&t<=65503||65507===t||t>=65512&&t<=65519)||!(!Hr[\"Small Form Variants\"](t)||t>=65112&&t<=65118||t>=65123&&t<=65126)||Hr[\"Unified Canadian Aboriginal Syllabics\"](t)||Hr[\"Unified Canadian Aboriginal Syllabics Extended\"](t)||Hr[\"Vertical Forms\"](t)||Hr[\"Yijing Hexagram Symbols\"](t)||Hr[\"Yi Syllables\"](t)||Hr[\"Yi Radicals\"](t))))}function Wr(t){return!(Ur(t)||function(t){return!!(Hr[\"Latin-1 Supplement\"](t)&&(167===t||169===t||174===t||177===t||188===t||189===t||190===t||215===t||247===t)||Hr[\"General Punctuation\"](t)&&(8214===t||8224===t||8225===t||8240===t||8241===t||8251===t||8252===t||8258===t||8263===t||8264===t||8265===t||8273===t)||Hr[\"Letterlike Symbols\"](t)||Hr[\"Number Forms\"](t)||Hr[\"Miscellaneous Technical\"](t)&&(t>=8960&&t<=8967||t>=8972&&t<=8991||t>=8996&&t<=9e3||9003===t||t>=9085&&t<=9114||t>=9150&&t<=9165||9167===t||t>=9169&&t<=9179||t>=9186&&t<=9215)||Hr[\"Control Pictures\"](t)&&9251!==t||Hr[\"Optical Character Recognition\"](t)||Hr[\"Enclosed Alphanumerics\"](t)||Hr[\"Geometric Shapes\"](t)||Hr[\"Miscellaneous Symbols\"](t)&&!(t>=9754&&t<=9759)||Hr[\"Miscellaneous Symbols and Arrows\"](t)&&(t>=11026&&t<=11055||t>=11088&&t<=11097||t>=11192&&t<=11243)||Hr[\"CJK Symbols and Punctuation\"](t)||Hr.Katakana(t)||Hr[\"Private Use Area\"](t)||Hr[\"CJK Compatibility Forms\"](t)||Hr[\"Small Form Variants\"](t)||Hr[\"Halfwidth and Fullwidth Forms\"](t)||8734===t||8756===t||8757===t||t>=9984&&t<=10087||t>=10102&&t<=10131||65532===t||65533===t)}(t))}function qr(t){return t>=1424&&t<=2303||Hr[\"Arabic Presentation Forms-A\"](t)||Hr[\"Arabic Presentation Forms-B\"](t)}function Gr(t,e){return!(!e&&qr(t)||t>=2304&&t<=3583||t>=3840&&t<=4255||Hr.Khmer(t))}function Xr(t){for(var e=0,n=t;e<n.length;e+=1)if(qr(n[e].charCodeAt(0)))return!0;return!1}var Zr=null,Jr=\"unavailable\",Kr=null,$r=function(t){t&&\"string\"==typeof t&&t.indexOf(\"NetworkError\")>-1&&(Jr=\"error\"),Zr&&Zr(t)};function Qr(){ti.fire(new kt(\"pluginStateChange\",{pluginStatus:Jr,pluginURL:Kr}))}var ti=new Tt,ei=function(){return Jr},ni=function(){if(\"deferred\"!==Jr||!Kr)throw new Error(\"rtl-text-plugin cannot be downloaded unless a pluginURL is specified\");Jr=\"loading\",Qr(),Kr&&vt({url:Kr},(function(t){t?$r(t):(Jr=\"loaded\",Qr())}))},ri={applyArabicShaping:null,processBidirectionalText:null,processStyledBidirectionalText:null,isLoaded:function(){return\"loaded\"===Jr||null!=ri.applyArabicShaping},isLoading:function(){return\"loading\"===Jr},setState:function(t){Jr=t.pluginStatus,Kr=t.pluginURL},isParsed:function(){return null!=ri.applyArabicShaping&&null!=ri.processBidirectionalText&&null!=ri.processStyledBidirectionalText},getPluginURL:function(){return Kr}},ii=function(t,e){this.zoom=t,e?(this.now=e.now,this.fadeDuration=e.fadeDuration,this.zoomHistory=e.zoomHistory,this.transition=e.transition):(this.now=0,this.fadeDuration=0,this.zoomHistory=new Yr,this.transition={})};ii.prototype.isSupportedScript=function(t){return function(t,e){for(var n=0,r=t;n<r.length;n+=1)if(!Gr(r[n].charCodeAt(0),e))return!1;return!0}(t,ri.isLoaded())},ii.prototype.crossFadingFactor=function(){return 0===this.fadeDuration?1:Math.min((this.now-this.zoomHistory.lastIntegerZoomTime)/this.fadeDuration,1)},ii.prototype.getCrossfadeParameters=function(){var t=this.zoom,e=t-Math.floor(t),n=this.crossFadingFactor();return t>this.zoomHistory.lastIntegerZoom?{fromScale:2,toScale:1,t:e+(1-e)*n}:{fromScale:.5,toScale:1,t:1-(1-n)*e}};var ai=function(t,e){this.property=t,this.value=e,this.expression=function(t,e){if(Rn(t))return new Xn(t,e);if(Vn(t)){var n=Gn(t,e);if(\"error\"===n.result)throw new Error(n.value.map((function(t){return t.key+\": \"+t.message})).join(\", \"));return n.value}var r=t;return\"string\"==typeof t&&\"color\"===e.type&&(r=Kt.parse(t)),{kind:\"constant\",evaluate:function(){return r}}}(void 0===e?t.specification.default:e,t.specification)};ai.prototype.isDataDriven=function(){return\"source\"===this.expression.kind||\"composite\"===this.expression.kind},ai.prototype.possiblyEvaluate=function(t,e,n){return this.property.possiblyEvaluate(this,t,e,n)};var oi=function(t){this.property=t,this.value=new ai(t,void 0)};oi.prototype.transitioned=function(t,e){return new li(this.property,this.value,e,u({},t.transition,this.transition),t.now)},oi.prototype.untransitioned=function(){return new li(this.property,this.value,null,{},0)};var si=function(t){this._properties=t,this._values=Object.create(t.defaultTransitionablePropertyValues)};si.prototype.getValue=function(t){return _(this._values[t].value.value)},si.prototype.setValue=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new oi(this._values[t].property)),this._values[t].value=new ai(this._values[t].property,null===e?void 0:_(e))},si.prototype.getTransition=function(t){return _(this._values[t].transition)},si.prototype.setTransition=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new oi(this._values[t].property)),this._values[t].transition=_(e)||void 0},si.prototype.serialize=function(){for(var t={},e=0,n=Object.keys(this._values);e<n.length;e+=1){var r=n[e],i=this.getValue(r);void 0!==i&&(t[r]=i);var a=this.getTransition(r);void 0!==a&&(t[r+\"-transition\"]=a)}return t},si.prototype.transitioned=function(t,e){for(var n=new ci(this._properties),r=0,i=Object.keys(this._values);r<i.length;r+=1){var a=i[r];n._values[a]=this._values[a].transitioned(t,e._values[a])}return n},si.prototype.untransitioned=function(){for(var t=new ci(this._properties),e=0,n=Object.keys(this._values);e<n.length;e+=1){var r=n[e];t._values[r]=this._values[r].untransitioned()}return t};var li=function(t,e,n,r,i){this.property=t,this.value=e,this.begin=i+r.delay||0,this.end=this.begin+r.duration||0,t.specification.transition&&(r.delay||r.duration)&&(this.prior=n)};li.prototype.possiblyEvaluate=function(t,e,n){var r=t.now||0,i=this.value.possiblyEvaluate(t,e,n),a=this.prior;if(a){if(r>this.end)return this.prior=null,i;if(this.value.isDataDriven())return this.prior=null,i;if(r<this.begin)return a.possiblyEvaluate(t,e,n);var o=(r-this.begin)/(this.end-this.begin);return this.property.interpolate(a.possiblyEvaluate(t,e,n),i,function(t){if(t<=0)return 0;if(t>=1)return 1;var e=t*t,n=e*t;return 4*(t<.5?n:3*(t-e)+n-.75)}(o))}return i};var ci=function(t){this._properties=t,this._values=Object.create(t.defaultTransitioningPropertyValues)};ci.prototype.possiblyEvaluate=function(t,e,n){for(var r=new di(this._properties),i=0,a=Object.keys(this._values);i<a.length;i+=1){var o=a[i];r._values[o]=this._values[o].possiblyEvaluate(t,e,n)}return r},ci.prototype.hasTransition=function(){for(var t=0,e=Object.keys(this._values);t<e.length;t+=1)if(this._values[e[t]].prior)return!0;return!1};var ui=function(t){this._properties=t,this._values=Object.create(t.defaultPropertyValues)};ui.prototype.getValue=function(t){return _(this._values[t].value)},ui.prototype.setValue=function(t,e){this._values[t]=new ai(this._values[t].property,null===e?void 0:_(e))},ui.prototype.serialize=function(){for(var t={},e=0,n=Object.keys(this._values);e<n.length;e+=1){var r=n[e],i=this.getValue(r);void 0!==i&&(t[r]=i)}return t},ui.prototype.possiblyEvaluate=function(t,e,n){for(var r=new di(this._properties),i=0,a=Object.keys(this._values);i<a.length;i+=1){var o=a[i];r._values[o]=this._values[o].possiblyEvaluate(t,e,n)}return r};var hi=function(t,e,n){this.property=t,this.value=e,this.parameters=n};hi.prototype.isConstant=function(){return\"constant\"===this.value.kind},hi.prototype.constantOr=function(t){return\"constant\"===this.value.kind?this.value.value:t},hi.prototype.evaluate=function(t,e,n,r){return this.property.evaluate(this.value,this.parameters,t,e,n,r)};var di=function(t){this._properties=t,this._values=Object.create(t.defaultPossiblyEvaluatedValues)};di.prototype.get=function(t){return this._values[t]};var fi=function(t){this.specification=t};fi.prototype.possiblyEvaluate=function(t,e){return t.expression.evaluate(e)},fi.prototype.interpolate=function(t,e,n){var r=He[this.specification.type];return r?r(t,e,n):t};var pi=function(t,e){this.specification=t,this.overrides=e};pi.prototype.possiblyEvaluate=function(t,e,n,r){return new hi(this,\"constant\"===t.expression.kind||\"camera\"===t.expression.kind?{kind:\"constant\",value:t.expression.evaluate(e,null,{},n,r)}:t.expression,e)},pi.prototype.interpolate=function(t,e,n){if(\"constant\"!==t.value.kind||\"constant\"!==e.value.kind)return t;if(void 0===t.value.value||void 0===e.value.value)return new hi(this,{kind:\"constant\",value:void 0},t.parameters);var r=He[this.specification.type];return r?new hi(this,{kind:\"constant\",value:r(t.value.value,e.value.value,n)},t.parameters):t},pi.prototype.evaluate=function(t,e,n,r,i,a){return\"constant\"===t.kind?t.value:t.evaluate(e,n,r,i,a)};var mi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.possiblyEvaluate=function(t,e,n,r){if(void 0===t.value)return new hi(this,{kind:\"constant\",value:void 0},e);if(\"constant\"===t.expression.kind){var i=t.expression.evaluate(e,null,{},n,r),a=\"resolvedImage\"===t.property.specification.type&&\"string\"!=typeof i?i.name:i,o=this._calculate(a,a,a,e);return new hi(this,{kind:\"constant\",value:o},e)}if(\"camera\"===t.expression.kind){var s=this._calculate(t.expression.evaluate({zoom:e.zoom-1}),t.expression.evaluate({zoom:e.zoom}),t.expression.evaluate({zoom:e.zoom+1}),e);return new hi(this,{kind:\"constant\",value:s},e)}return new hi(this,t.expression,e)},e.prototype.evaluate=function(t,e,n,r,i,a){if(\"source\"===t.kind){var o=t.evaluate(e,n,r,i,a);return this._calculate(o,o,o,e)}return\"composite\"===t.kind?this._calculate(t.evaluate({zoom:Math.floor(e.zoom)-1},n,r),t.evaluate({zoom:Math.floor(e.zoom)},n,r),t.evaluate({zoom:Math.floor(e.zoom)+1},n,r),e):t.value},e.prototype._calculate=function(t,e,n,r){return r.zoom>r.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:n,to:e}},e.prototype.interpolate=function(t){return t},e}(pi),gi=function(t){this.specification=t};gi.prototype.possiblyEvaluate=function(t,e,n,r){if(void 0!==t.value){if(\"constant\"===t.expression.kind){var i=t.expression.evaluate(e,null,{},n,r);return this._calculate(i,i,i,e)}return this._calculate(t.expression.evaluate(new ii(Math.floor(e.zoom-1),e)),t.expression.evaluate(new ii(Math.floor(e.zoom),e)),t.expression.evaluate(new ii(Math.floor(e.zoom+1),e)),e)}},gi.prototype._calculate=function(t,e,n,r){return r.zoom>r.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:n,to:e}},gi.prototype.interpolate=function(t){return t};var yi=function(t){this.specification=t};yi.prototype.possiblyEvaluate=function(t,e,n,r){return!!t.expression.evaluate(e,null,{},n,r)},yi.prototype.interpolate=function(){return!1};var vi=function(t){for(var e in this.properties=t,this.defaultPropertyValues={},this.defaultTransitionablePropertyValues={},this.defaultTransitioningPropertyValues={},this.defaultPossiblyEvaluatedValues={},this.overridableProperties=[],t){var n=t[e];n.specification.overridable&&this.overridableProperties.push(e);var r=this.defaultPropertyValues[e]=new ai(n,void 0),i=this.defaultTransitionablePropertyValues[e]=new oi(n);this.defaultTransitioningPropertyValues[e]=i.untransitioned(),this.defaultPossiblyEvaluatedValues[e]=r.possiblyEvaluate({})}};Rr(\"DataDrivenProperty\",pi),Rr(\"DataConstantProperty\",fi),Rr(\"CrossFadedDataDrivenProperty\",mi),Rr(\"CrossFadedProperty\",gi),Rr(\"ColorRampProperty\",yi);var _i=function(t){function e(e,n){if(t.call(this),this.id=e.id,this.type=e.type,this._featureFilter={filter:function(){return!0},needGeometry:!1},\"custom\"!==e.type&&(this.metadata=(e=e).metadata,this.minzoom=e.minzoom,this.maxzoom=e.maxzoom,\"background\"!==e.type&&(this.source=e.source,this.sourceLayer=e[\"source-layer\"],this.filter=e.filter),n.layout&&(this._unevaluatedLayout=new ui(n.layout)),n.paint)){for(var r in this._transitionablePaint=new si(n.paint),e.paint)this.setPaintProperty(r,e.paint[r],{validate:!1});for(var i in e.layout)this.setLayoutProperty(i,e.layout[i],{validate:!1});this._transitioningPaint=this._transitionablePaint.untransitioned(),this.paint=new di(n.paint)}}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getCrossfadeParameters=function(){return this._crossfadeParameters},e.prototype.getLayoutProperty=function(t){return\"visibility\"===t?this.visibility:this._unevaluatedLayout.getValue(t)},e.prototype.setLayoutProperty=function(t,e,n){void 0===n&&(n={}),null!=e&&this._validate(Lr,\"layers.\"+this.id+\".layout.\"+t,t,e,n)||(\"visibility\"!==t?this._unevaluatedLayout.setValue(t,e):this.visibility=e)},e.prototype.getPaintProperty=function(t){return g(t,\"-transition\")?this._transitionablePaint.getTransition(t.slice(0,-\"-transition\".length)):this._transitionablePaint.getValue(t)},e.prototype.setPaintProperty=function(t,e,n){if(void 0===n&&(n={}),null!=e&&this._validate(Ar,\"layers.\"+this.id+\".paint.\"+t,t,e,n))return!1;if(g(t,\"-transition\"))return this._transitionablePaint.setTransition(t.slice(0,-\"-transition\".length),e||void 0),!1;var r=this._transitionablePaint._values[t],i=\"cross-faded-data-driven\"===r.property.specification[\"property-type\"],a=r.value.isDataDriven(),o=r.value;this._transitionablePaint.setValue(t,e),this._handleSpecialPaintPropertyUpdate(t);var s=this._transitionablePaint._values[t].value;return s.isDataDriven()||a||i||this._handleOverridablePaintPropertyUpdate(t,o,s)},e.prototype._handleSpecialPaintPropertyUpdate=function(t){},e.prototype._handleOverridablePaintPropertyUpdate=function(t,e,n){return!1},e.prototype.isHidden=function(t){return!!(this.minzoom&&t<this.minzoom)||!!(this.maxzoom&&t>=this.maxzoom)||\"none\"===this.visibility},e.prototype.updateTransitions=function(t){this._transitioningPaint=this._transitionablePaint.transitioned(t,this._transitioningPaint)},e.prototype.hasTransition=function(){return this._transitioningPaint.hasTransition()},e.prototype.recalculate=function(t,e){t.getCrossfadeParameters&&(this._crossfadeParameters=t.getCrossfadeParameters()),this._unevaluatedLayout&&(this.layout=this._unevaluatedLayout.possiblyEvaluate(t,void 0,e)),this.paint=this._transitioningPaint.possiblyEvaluate(t,void 0,e)},e.prototype.serialize=function(){var t={id:this.id,type:this.type,source:this.source,\"source-layer\":this.sourceLayer,metadata:this.metadata,minzoom:this.minzoom,maxzoom:this.maxzoom,filter:this.filter,layout:this._unevaluatedLayout&&this._unevaluatedLayout.serialize(),paint:this._transitionablePaint&&this._transitionablePaint.serialize()};return this.visibility&&(t.layout=t.layout||{},t.layout.visibility=this.visibility),v(t,(function(t,e){return!(void 0===t||\"layout\"===e&&!Object.keys(t).length||\"paint\"===e&&!Object.keys(t).length)}))},e.prototype._validate=function(t,e,n,r,i){return void 0===i&&(i={}),(!i||!1!==i.validate)&&Cr(this,t.call(Tr,{key:e,layerType:this.type,objectKey:n,value:r,styleSpec:St,style:{glyphs:!0,sprite:!0}}))},e.prototype.is3D=function(){return!1},e.prototype.isTileClipped=function(){return!1},e.prototype.hasOffscreenPass=function(){return!1},e.prototype.resize=function(){},e.prototype.isStateDependent=function(){for(var t in this.paint._values){var e=this.paint.get(t);if(e instanceof hi&&On(e.property.specification)&&(\"source\"===e.value.kind||\"composite\"===e.value.kind)&&e.value.isStateDependent)return!0}return!1},e}(Tt),bi={Int8:Int8Array,Uint8:Uint8Array,Int16:Int16Array,Uint16:Uint16Array,Int32:Int32Array,Uint32:Uint32Array,Float32:Float32Array},xi=function(t,e){this._structArray=t,this._pos1=e*this.size,this._pos2=this._pos1/2,this._pos4=this._pos1/4,this._pos8=this._pos1/8},wi=function(){this.isTransferred=!1,this.capacity=-1,this.resize(0)};function ki(t,e){void 0===e&&(e=1);var n=0,r=0;return{members:t.map((function(t){var i=bi[t.type].BYTES_PER_ELEMENT,a=n=Mi(n,Math.max(e,i)),o=t.components||1;return r=Math.max(r,i),n+=i*o,{name:t.name,type:t.type,components:o,offset:a}})),size:Mi(n,Math.max(r,e)),alignment:e}}function Mi(t,e){return Math.ceil(t/e)*e}wi.serialize=function(t,e){return t._trim(),e&&(t.isTransferred=!0,e.push(t.arrayBuffer)),{length:t.length,arrayBuffer:t.arrayBuffer}},wi.deserialize=function(t){var e=Object.create(this.prototype);return e.arrayBuffer=t.arrayBuffer,e.length=t.length,e.capacity=t.arrayBuffer.byteLength/e.bytesPerElement,e._refreshViews(),e},wi.prototype._trim=function(){this.length!==this.capacity&&(this.capacity=this.length,this.arrayBuffer=this.arrayBuffer.slice(0,this.length*this.bytesPerElement),this._refreshViews())},wi.prototype.clear=function(){this.length=0},wi.prototype.resize=function(t){this.reserve(t),this.length=t},wi.prototype.reserve=function(t){if(t>this.capacity){this.capacity=Math.max(t,Math.floor(5*this.capacity),128),this.arrayBuffer=new ArrayBuffer(this.capacity*this.bytesPerElement);var e=this.uint8;this._refreshViews(),e&&this.uint8.set(e)}},wi.prototype._refreshViews=function(){throw new Error(\"_refreshViews() must be implemented by each concrete StructArray layout\")};var Ti=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var n=this.length;return this.resize(n+1),this.emplace(n,t,e)},e.prototype.emplace=function(t,e,n){var r=2*t;return this.int16[r+0]=e,this.int16[r+1]=n,t},e}(wi);Ti.prototype.bytesPerElement=4,Rr(\"StructArrayLayout2i4\",Ti);var Si=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,n,r)},e.prototype.emplace=function(t,e,n,r,i){var a=4*t;return this.int16[a+0]=e,this.int16[a+1]=n,this.int16[a+2]=r,this.int16[a+3]=i,t},e}(wi);Si.prototype.bytesPerElement=8,Rr(\"StructArrayLayout4i8\",Si);var Ai=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,n,r,i,a)},e.prototype.emplace=function(t,e,n,r,i,a,o){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=n,this.int16[s+2]=r,this.int16[s+3]=i,this.int16[s+4]=a,this.int16[s+5]=o,t},e}(wi);Ai.prototype.bytesPerElement=12,Rr(\"StructArrayLayout2i4i12\",Ai);var Li=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,n,r,i,a)},e.prototype.emplace=function(t,e,n,r,i,a,o){var s=4*t,l=8*t;return this.int16[s+0]=e,this.int16[s+1]=n,this.uint8[l+4]=r,this.uint8[l+5]=i,this.uint8[l+6]=a,this.uint8[l+7]=o,t},e}(wi);Li.prototype.bytesPerElement=8,Rr(\"StructArrayLayout2i4ub8\",Li);var Ci=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r,i,a,o,s,l,c){var u=this.length;return this.resize(u+1),this.emplace(u,t,e,n,r,i,a,o,s,l,c)},e.prototype.emplace=function(t,e,n,r,i,a,o,s,l,c,u){var h=9*t,d=18*t;return this.uint16[h+0]=e,this.uint16[h+1]=n,this.uint16[h+2]=r,this.uint16[h+3]=i,this.uint16[h+4]=a,this.uint16[h+5]=o,this.uint16[h+6]=s,this.uint16[h+7]=l,this.uint8[d+16]=c,this.uint8[d+17]=u,t},e}(wi);Ci.prototype.bytesPerElement=18,Rr(\"StructArrayLayout8ui2ub18\",Ci);var Ei=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r,i,a,o,s,l,c,u,h){var d=this.length;return this.resize(d+1),this.emplace(d,t,e,n,r,i,a,o,s,l,c,u,h)},e.prototype.emplace=function(t,e,n,r,i,a,o,s,l,c,u,h,d){var f=12*t;return this.int16[f+0]=e,this.int16[f+1]=n,this.int16[f+2]=r,this.int16[f+3]=i,this.uint16[f+4]=a,this.uint16[f+5]=o,this.uint16[f+6]=s,this.uint16[f+7]=l,this.int16[f+8]=c,this.int16[f+9]=u,this.int16[f+10]=h,this.int16[f+11]=d,t},e}(wi);Ei.prototype.bytesPerElement=24,Rr(\"StructArrayLayout4i4ui4i24\",Ei);var Oi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n){var r=this.length;return this.resize(r+1),this.emplace(r,t,e,n)},e.prototype.emplace=function(t,e,n,r){var i=3*t;return this.float32[i+0]=e,this.float32[i+1]=n,this.float32[i+2]=r,t},e}(wi);Oi.prototype.bytesPerElement=12,Rr(\"StructArrayLayout3f12\",Oi);var Di=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){return this.uint32[1*t+0]=e,t},e}(wi);Di.prototype.bytesPerElement=4,Rr(\"StructArrayLayout1ul4\",Di);var Ii=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r,i,a,o,s,l){var c=this.length;return this.resize(c+1),this.emplace(c,t,e,n,r,i,a,o,s,l)},e.prototype.emplace=function(t,e,n,r,i,a,o,s,l,c){var u=10*t,h=5*t;return this.int16[u+0]=e,this.int16[u+1]=n,this.int16[u+2]=r,this.int16[u+3]=i,this.int16[u+4]=a,this.int16[u+5]=o,this.uint32[h+3]=s,this.uint16[u+8]=l,this.uint16[u+9]=c,t},e}(wi);Ii.prototype.bytesPerElement=20,Rr(\"StructArrayLayout6i1ul2ui20\",Ii);var Pi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,n,r,i,a)},e.prototype.emplace=function(t,e,n,r,i,a,o){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=n,this.int16[s+2]=r,this.int16[s+3]=i,this.int16[s+4]=a,this.int16[s+5]=o,t},e}(wi);Pi.prototype.bytesPerElement=12,Rr(\"StructArrayLayout2i2i2i12\",Pi);var Ri=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r,i){var a=this.length;return this.resize(a+1),this.emplace(a,t,e,n,r,i)},e.prototype.emplace=function(t,e,n,r,i,a){var o=4*t,s=8*t;return this.float32[o+0]=e,this.float32[o+1]=n,this.float32[o+2]=r,this.int16[s+6]=i,this.int16[s+7]=a,t},e}(wi);Ri.prototype.bytesPerElement=16,Rr(\"StructArrayLayout2f1f2i16\",Ri);var zi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,n,r)},e.prototype.emplace=function(t,e,n,r,i){var a=12*t,o=3*t;return this.uint8[a+0]=e,this.uint8[a+1]=n,this.float32[o+1]=r,this.float32[o+2]=i,t},e}(wi);zi.prototype.bytesPerElement=12,Rr(\"StructArrayLayout2ub2f12\",zi);var ji=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n){var r=this.length;return this.resize(r+1),this.emplace(r,t,e,n)},e.prototype.emplace=function(t,e,n,r){var i=3*t;return this.uint16[i+0]=e,this.uint16[i+1]=n,this.uint16[i+2]=r,t},e}(wi);ji.prototype.bytesPerElement=6,Rr(\"StructArrayLayout3ui6\",ji);var Fi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g){var y=this.length;return this.resize(y+1),this.emplace(y,t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g)},e.prototype.emplace=function(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g,y){var v=24*t,_=12*t,b=48*t;return this.int16[v+0]=e,this.int16[v+1]=n,this.uint16[v+2]=r,this.uint16[v+3]=i,this.uint32[_+2]=a,this.uint32[_+3]=o,this.uint32[_+4]=s,this.uint16[v+10]=l,this.uint16[v+11]=c,this.uint16[v+12]=u,this.float32[_+7]=h,this.float32[_+8]=d,this.uint8[b+36]=f,this.uint8[b+37]=p,this.uint8[b+38]=m,this.uint32[_+10]=g,this.int16[v+22]=y,t},e}(wi);Fi.prototype.bytesPerElement=48,Rr(\"StructArrayLayout2i2ui3ul3ui2f3ub1ul1i48\",Fi);var Ni=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g,y,v,_,b,x,w,k,M,T,S,A){var L=this.length;return this.resize(L+1),this.emplace(L,t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g,y,v,_,b,x,w,k,M,T,S,A)},e.prototype.emplace=function(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g,y,v,_,b,x,w,k,M,T,S,A,L){var C=34*t,E=17*t;return this.int16[C+0]=e,this.int16[C+1]=n,this.int16[C+2]=r,this.int16[C+3]=i,this.int16[C+4]=a,this.int16[C+5]=o,this.int16[C+6]=s,this.int16[C+7]=l,this.uint16[C+8]=c,this.uint16[C+9]=u,this.uint16[C+10]=h,this.uint16[C+11]=d,this.uint16[C+12]=f,this.uint16[C+13]=p,this.uint16[C+14]=m,this.uint16[C+15]=g,this.uint16[C+16]=y,this.uint16[C+17]=v,this.uint16[C+18]=_,this.uint16[C+19]=b,this.uint16[C+20]=x,this.uint16[C+21]=w,this.uint16[C+22]=k,this.uint32[E+12]=M,this.float32[E+13]=T,this.float32[E+14]=S,this.float32[E+15]=A,this.float32[E+16]=L,t},e}(wi);Ni.prototype.bytesPerElement=68,Rr(\"StructArrayLayout8i15ui1ul4f68\",Ni);var Bi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){return this.float32[1*t+0]=e,t},e}(wi);Bi.prototype.bytesPerElement=4,Rr(\"StructArrayLayout1f4\",Bi);var Yi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n){var r=this.length;return this.resize(r+1),this.emplace(r,t,e,n)},e.prototype.emplace=function(t,e,n,r){var i=3*t;return this.int16[i+0]=e,this.int16[i+1]=n,this.int16[i+2]=r,t},e}(wi);Yi.prototype.bytesPerElement=6,Rr(\"StructArrayLayout3i6\",Yi);var Hi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n){var r=this.length;return this.resize(r+1),this.emplace(r,t,e,n)},e.prototype.emplace=function(t,e,n,r){var i=4*t;return this.uint32[2*t+0]=e,this.uint16[i+2]=n,this.uint16[i+3]=r,t},e}(wi);Hi.prototype.bytesPerElement=8,Rr(\"StructArrayLayout1ul2ui8\",Hi);var Vi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var n=this.length;return this.resize(n+1),this.emplace(n,t,e)},e.prototype.emplace=function(t,e,n){var r=2*t;return this.uint16[r+0]=e,this.uint16[r+1]=n,t},e}(wi);Vi.prototype.bytesPerElement=4,Rr(\"StructArrayLayout2ui4\",Vi);var Ui=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){return this.uint16[1*t+0]=e,t},e}(wi);Ui.prototype.bytesPerElement=2,Rr(\"StructArrayLayout1ui2\",Ui);var Wi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var n=this.length;return this.resize(n+1),this.emplace(n,t,e)},e.prototype.emplace=function(t,e,n){var r=2*t;return this.float32[r+0]=e,this.float32[r+1]=n,t},e}(wi);Wi.prototype.bytesPerElement=8,Rr(\"StructArrayLayout2f8\",Wi);var qi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,n,r){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,n,r)},e.prototype.emplace=function(t,e,n,r,i){var a=4*t;return this.float32[a+0]=e,this.float32[a+1]=n,this.float32[a+2]=r,this.float32[a+3]=i,t},e}(wi);qi.prototype.bytesPerElement=16,Rr(\"StructArrayLayout4f16\",qi);var Gi=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var n={anchorPointX:{configurable:!0},anchorPointY:{configurable:!0},x1:{configurable:!0},y1:{configurable:!0},x2:{configurable:!0},y2:{configurable:!0},featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0},anchorPoint:{configurable:!0}};return n.anchorPointX.get=function(){return this._structArray.int16[this._pos2+0]},n.anchorPointY.get=function(){return this._structArray.int16[this._pos2+1]},n.x1.get=function(){return this._structArray.int16[this._pos2+2]},n.y1.get=function(){return this._structArray.int16[this._pos2+3]},n.x2.get=function(){return this._structArray.int16[this._pos2+4]},n.y2.get=function(){return this._structArray.int16[this._pos2+5]},n.featureIndex.get=function(){return this._structArray.uint32[this._pos4+3]},n.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+8]},n.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+9]},n.anchorPoint.get=function(){return new i(this.anchorPointX,this.anchorPointY)},Object.defineProperties(e.prototype,n),e}(xi);Gi.prototype.size=20;var Xi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.get=function(t){return new Gi(this,t)},e}(Ii);Rr(\"CollisionBoxArray\",Xi);var Zi=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var n={anchorX:{configurable:!0},anchorY:{configurable:!0},glyphStartIndex:{configurable:!0},numGlyphs:{configurable:!0},vertexStartIndex:{configurable:!0},lineStartIndex:{configurable:!0},lineLength:{configurable:!0},segment:{configurable:!0},lowerSize:{configurable:!0},upperSize:{configurable:!0},lineOffsetX:{configurable:!0},lineOffsetY:{configurable:!0},writingMode:{configurable:!0},placedOrientation:{configurable:!0},hidden:{configurable:!0},crossTileID:{configurable:!0},associatedIconIndex:{configurable:!0}};return n.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},n.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},n.glyphStartIndex.get=function(){return this._structArray.uint16[this._pos2+2]},n.numGlyphs.get=function(){return this._structArray.uint16[this._pos2+3]},n.vertexStartIndex.get=function(){return this._structArray.uint32[this._pos4+2]},n.lineStartIndex.get=function(){return this._structArray.uint32[this._pos4+3]},n.lineLength.get=function(){return this._structArray.uint32[this._pos4+4]},n.segment.get=function(){return this._structArray.uint16[this._pos2+10]},n.lowerSize.get=function(){return this._structArray.uint16[this._pos2+11]},n.upperSize.get=function(){return this._structArray.uint16[this._pos2+12]},n.lineOffsetX.get=function(){return this._structArray.float32[this._pos4+7]},n.lineOffsetY.get=function(){return this._structArray.float32[this._pos4+8]},n.writingMode.get=function(){return this._structArray.uint8[this._pos1+36]},n.placedOrientation.get=function(){return this._structArray.uint8[this._pos1+37]},n.placedOrientation.set=function(t){this._structArray.uint8[this._pos1+37]=t},n.hidden.get=function(){return this._structArray.uint8[this._pos1+38]},n.hidden.set=function(t){this._structArray.uint8[this._pos1+38]=t},n.crossTileID.get=function(){return this._structArray.uint32[this._pos4+10]},n.crossTileID.set=function(t){this._structArray.uint32[this._pos4+10]=t},n.associatedIconIndex.get=function(){return this._structArray.int16[this._pos2+22]},Object.defineProperties(e.prototype,n),e}(xi);Zi.prototype.size=48;var Ji=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.get=function(t){return new Zi(this,t)},e}(Fi);Rr(\"PlacedSymbolArray\",Ji);var Ki=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var n={anchorX:{configurable:!0},anchorY:{configurable:!0},rightJustifiedTextSymbolIndex:{configurable:!0},centerJustifiedTextSymbolIndex:{configurable:!0},leftJustifiedTextSymbolIndex:{configurable:!0},verticalPlacedTextSymbolIndex:{configurable:!0},placedIconSymbolIndex:{configurable:!0},verticalPlacedIconSymbolIndex:{configurable:!0},key:{configurable:!0},textBoxStartIndex:{configurable:!0},textBoxEndIndex:{configurable:!0},verticalTextBoxStartIndex:{configurable:!0},verticalTextBoxEndIndex:{configurable:!0},iconBoxStartIndex:{configurable:!0},iconBoxEndIndex:{configurable:!0},verticalIconBoxStartIndex:{configurable:!0},verticalIconBoxEndIndex:{configurable:!0},featureIndex:{configurable:!0},numHorizontalGlyphVertices:{configurable:!0},numVerticalGlyphVertices:{configurable:!0},numIconVertices:{configurable:!0},numVerticalIconVertices:{configurable:!0},useRuntimeCollisionCircles:{configurable:!0},crossTileID:{configurable:!0},textBoxScale:{configurable:!0},textOffset0:{configurable:!0},textOffset1:{configurable:!0},collisionCircleDiameter:{configurable:!0}};return n.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},n.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},n.rightJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+2]},n.centerJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+3]},n.leftJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+4]},n.verticalPlacedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+5]},n.placedIconSymbolIndex.get=function(){return this._structArray.int16[this._pos2+6]},n.verticalPlacedIconSymbolIndex.get=function(){return this._structArray.int16[this._pos2+7]},n.key.get=function(){return this._structArray.uint16[this._pos2+8]},n.textBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+9]},n.textBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+10]},n.verticalTextBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+11]},n.verticalTextBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+12]},n.iconBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+13]},n.iconBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+14]},n.verticalIconBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+15]},n.verticalIconBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+16]},n.featureIndex.get=function(){return this._structArray.uint16[this._pos2+17]},n.numHorizontalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+18]},n.numVerticalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+19]},n.numIconVertices.get=function(){return this._structArray.uint16[this._pos2+20]},n.numVerticalIconVertices.get=function(){return this._structArray.uint16[this._pos2+21]},n.useRuntimeCollisionCircles.get=function(){return this._structArray.uint16[this._pos2+22]},n.crossTileID.get=function(){return this._structArray.uint32[this._pos4+12]},n.crossTileID.set=function(t){this._structArray.uint32[this._pos4+12]=t},n.textBoxScale.get=function(){return this._structArray.float32[this._pos4+13]},n.textOffset0.get=function(){return this._structArray.float32[this._pos4+14]},n.textOffset1.get=function(){return this._structArray.float32[this._pos4+15]},n.collisionCircleDiameter.get=function(){return this._structArray.float32[this._pos4+16]},Object.defineProperties(e.prototype,n),e}(xi);Ki.prototype.size=68;var $i=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.get=function(t){return new Ki(this,t)},e}(Ni);Rr(\"SymbolInstanceArray\",$i);var Qi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getoffsetX=function(t){return this.float32[1*t+0]},e}(Bi);Rr(\"GlyphOffsetArray\",Qi);var ta=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getx=function(t){return this.int16[3*t+0]},e.prototype.gety=function(t){return this.int16[3*t+1]},e.prototype.gettileUnitDistanceFromAnchor=function(t){return this.int16[3*t+2]},e}(Yi);Rr(\"SymbolLineVertexArray\",ta);var ea=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var n={featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0}};return n.featureIndex.get=function(){return this._structArray.uint32[this._pos4+0]},n.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+2]},n.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+3]},Object.defineProperties(e.prototype,n),e}(xi);ea.prototype.size=8;var na=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.get=function(t){return new ea(this,t)},e}(Hi);Rr(\"FeatureIndexArray\",na);var ra=ki([{name:\"a_pos\",components:2,type:\"Int16\"}],4).members,ia=function(t){void 0===t&&(t=[]),this.segments=t};function aa(t,e){return 256*(t=l(Math.floor(t),0,255))+l(Math.floor(e),0,255)}ia.prototype.prepareSegment=function(t,e,n,r){var i=this.segments[this.segments.length-1];return t>ia.MAX_VERTEX_ARRAY_LENGTH&&x(\"Max vertices per segment is \"+ia.MAX_VERTEX_ARRAY_LENGTH+\": bucket requested \"+t),(!i||i.vertexLength+t>ia.MAX_VERTEX_ARRAY_LENGTH||i.sortKey!==r)&&(i={vertexOffset:e.length,primitiveOffset:n.length,vertexLength:0,primitiveLength:0},void 0!==r&&(i.sortKey=r),this.segments.push(i)),i},ia.prototype.get=function(){return this.segments},ia.prototype.destroy=function(){for(var t=0,e=this.segments;t<e.length;t+=1){var n=e[t];for(var r in n.vaos)n.vaos[r].destroy()}},ia.simpleSegment=function(t,e,n,r){return new ia([{vertexOffset:t,primitiveOffset:e,vertexLength:n,primitiveLength:r,vaos:{},sortKey:0}])},ia.MAX_VERTEX_ARRAY_LENGTH=Math.pow(2,16)-1,Rr(\"SegmentVector\",ia);var oa=ki([{name:\"a_pattern_from\",components:4,type:\"Uint16\"},{name:\"a_pattern_to\",components:4,type:\"Uint16\"},{name:\"a_pixel_ratio_from\",components:1,type:\"Uint8\"},{name:\"a_pixel_ratio_to\",components:1,type:\"Uint8\"}]),sa=e((function(t){t.exports=function(t,e){var n,r,i,a,o,s,l,c;for(r=t.length-(n=3&t.length),i=e,o=3432918353,s=461845907,c=0;c<r;)l=255&t.charCodeAt(c)|(255&t.charCodeAt(++c))<<8|(255&t.charCodeAt(++c))<<16|(255&t.charCodeAt(++c))<<24,++c,i=27492+(65535&(a=5*(65535&(i=(i^=l=(65535&(l=(l=(65535&l)*o+(((l>>>16)*o&65535)<<16)&4294967295)<<15|l>>>17))*s+(((l>>>16)*s&65535)<<16)&4294967295)<<13|i>>>19))+((5*(i>>>16)&65535)<<16)&4294967295))+((58964+(a>>>16)&65535)<<16);switch(l=0,n){case 3:l^=(255&t.charCodeAt(c+2))<<16;case 2:l^=(255&t.charCodeAt(c+1))<<8;case 1:i^=l=(65535&(l=(l=(65535&(l^=255&t.charCodeAt(c)))*o+(((l>>>16)*o&65535)<<16)&4294967295)<<15|l>>>17))*s+(((l>>>16)*s&65535)<<16)&4294967295}return i^=t.length,i=2246822507*(65535&(i^=i>>>16))+((2246822507*(i>>>16)&65535)<<16)&4294967295,i=3266489909*(65535&(i^=i>>>13))+((3266489909*(i>>>16)&65535)<<16)&4294967295,(i^=i>>>16)>>>0}})),la=e((function(t){t.exports=function(t,e){for(var n,r=t.length,i=e^r,a=0;r>=4;)n=1540483477*(65535&(n=255&t.charCodeAt(a)|(255&t.charCodeAt(++a))<<8|(255&t.charCodeAt(++a))<<16|(255&t.charCodeAt(++a))<<24))+((1540483477*(n>>>16)&65535)<<16),i=1540483477*(65535&i)+((1540483477*(i>>>16)&65535)<<16)^(n=1540483477*(65535&(n^=n>>>24))+((1540483477*(n>>>16)&65535)<<16)),r-=4,++a;switch(r){case 3:i^=(255&t.charCodeAt(a+2))<<16;case 2:i^=(255&t.charCodeAt(a+1))<<8;case 1:i=1540483477*(65535&(i^=255&t.charCodeAt(a)))+((1540483477*(i>>>16)&65535)<<16)}return i=1540483477*(65535&(i^=i>>>13))+((1540483477*(i>>>16)&65535)<<16),(i^=i>>>15)>>>0}})),ca=sa,ua=la;ca.murmur3=sa,ca.murmur2=ua;var ha=function(){this.ids=[],this.positions=[],this.indexed=!1};ha.prototype.add=function(t,e,n,r){this.ids.push(fa(t)),this.positions.push(e,n,r)},ha.prototype.getPositions=function(t){for(var e=fa(t),n=0,r=this.ids.length-1;n<r;){var i=n+r>>1;this.ids[i]>=e?r=i:n=i+1}for(var a=[];this.ids[n]===e;)a.push({index:this.positions[3*n],start:this.positions[3*n+1],end:this.positions[3*n+2]}),n++;return a},ha.serialize=function(t,e){var n=new Float64Array(t.ids),r=new Uint32Array(t.positions);return function t(e,n,r,i){for(;r<i;){for(var a=e[r+i>>1],o=r-1,s=i+1;;){do{o++}while(e[o]<a);do{s--}while(e[s]>a);if(o>=s)break;pa(e,o,s),pa(n,3*o,3*s),pa(n,3*o+1,3*s+1),pa(n,3*o+2,3*s+2)}s-r<i-s?(t(e,n,r,s),r=s+1):(t(e,n,s+1,i),i=s)}}(n,r,0,n.length-1),e&&e.push(n.buffer,r.buffer),{ids:n,positions:r}},ha.deserialize=function(t){var e=new ha;return e.ids=t.ids,e.positions=t.positions,e.indexed=!0,e};var da=Math.pow(2,53)-1;function fa(t){var e=+t;return!isNaN(e)&&e<=da?e:ca(String(t))}function pa(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}Rr(\"FeaturePositionMap\",ha);var ma=function(t,e){this.gl=t.gl,this.location=e},ga=function(t){function e(e,n){t.call(this,e,n),this.current=0}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.set=function(t){this.current!==t&&(this.current=t,this.gl.uniform1i(this.location,t))},e}(ma),ya=function(t){function e(e,n){t.call(this,e,n),this.current=0}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.set=function(t){this.current!==t&&(this.current=t,this.gl.uniform1f(this.location,t))},e}(ma),va=function(t){function e(e,n){t.call(this,e,n),this.current=[0,0]}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]||(this.current=t,this.gl.uniform2f(this.location,t[0],t[1]))},e}(ma),_a=function(t){function e(e,n){t.call(this,e,n),this.current=[0,0,0]}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]&&t[2]===this.current[2]||(this.current=t,this.gl.uniform3f(this.location,t[0],t[1],t[2]))},e}(ma),ba=function(t){function e(e,n){t.call(this,e,n),this.current=[0,0,0,0]}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]&&t[2]===this.current[2]&&t[3]===this.current[3]||(this.current=t,this.gl.uniform4f(this.location,t[0],t[1],t[2],t[3]))},e}(ma),xa=function(t){function e(e,n){t.call(this,e,n),this.current=Kt.transparent}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.set=function(t){t.r===this.current.r&&t.g===this.current.g&&t.b===this.current.b&&t.a===this.current.a||(this.current=t,this.gl.uniform4f(this.location,t.r,t.g,t.b,t.a))},e}(ma),wa=new Float32Array(16),ka=function(t){function e(e,n){t.call(this,e,n),this.current=wa}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.set=function(t){if(t[12]!==this.current[12]||t[0]!==this.current[0])return this.current=t,void this.gl.uniformMatrix4fv(this.location,!1,t);for(var e=1;e<16;e++)if(t[e]!==this.current[e]){this.current=t,this.gl.uniformMatrix4fv(this.location,!1,t);break}},e}(ma);function Ma(t){return[aa(255*t.r,255*t.g),aa(255*t.b,255*t.a)]}var Ta=function(t,e,n){this.value=t,this.uniformNames=e.map((function(t){return\"u_\"+t})),this.type=n};Ta.prototype.setUniform=function(t,e,n){t.set(n.constantOr(this.value))},Ta.prototype.getBinding=function(t,e,n){return\"color\"===this.type?new xa(t,e):new ya(t,e)};var Sa=function(t,e){this.uniformNames=e.map((function(t){return\"u_\"+t})),this.patternFrom=null,this.patternTo=null,this.pixelRatioFrom=1,this.pixelRatioTo=1};Sa.prototype.setConstantPatternPositions=function(t,e){this.pixelRatioFrom=e.pixelRatio,this.pixelRatioTo=t.pixelRatio,this.patternFrom=e.tlbr,this.patternTo=t.tlbr},Sa.prototype.setUniform=function(t,e,n,r){var i=\"u_pattern_to\"===r?this.patternTo:\"u_pattern_from\"===r?this.patternFrom:\"u_pixel_ratio_to\"===r?this.pixelRatioTo:\"u_pixel_ratio_from\"===r?this.pixelRatioFrom:null;i&&t.set(i)},Sa.prototype.getBinding=function(t,e,n){return\"u_pattern\"===n.substr(0,9)?new ba(t,e):new ya(t,e)};var Aa=function(t,e,n,r){this.expression=t,this.type=n,this.maxValue=0,this.paintVertexAttributes=e.map((function(t){return{name:\"a_\"+t,type:\"Float32\",components:\"color\"===n?2:1,offset:0}})),this.paintVertexArray=new r};Aa.prototype.populatePaintArray=function(t,e,n,r,i){var a=this.paintVertexArray.length,o=this.expression.evaluate(new ii(0),e,{},r,[],i);this.paintVertexArray.resize(t),this._setPaintValue(a,t,o)},Aa.prototype.updatePaintArray=function(t,e,n,r){var i=this.expression.evaluate({zoom:0},n,r);this._setPaintValue(t,e,i)},Aa.prototype._setPaintValue=function(t,e,n){if(\"color\"===this.type)for(var r=Ma(n),i=t;i<e;i++)this.paintVertexArray.emplace(i,r[0],r[1]);else{for(var a=t;a<e;a++)this.paintVertexArray.emplace(a,n);this.maxValue=Math.max(this.maxValue,Math.abs(n))}},Aa.prototype.upload=function(t){this.paintVertexArray&&this.paintVertexArray.arrayBuffer&&(this.paintVertexBuffer&&this.paintVertexBuffer.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=t.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))},Aa.prototype.destroy=function(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy()};var La=function(t,e,n,r,i,a){this.expression=t,this.uniformNames=e.map((function(t){return\"u_\"+t+\"_t\"})),this.type=n,this.useIntegerZoom=r,this.zoom=i,this.maxValue=0,this.paintVertexAttributes=e.map((function(t){return{name:\"a_\"+t,type:\"Float32\",components:\"color\"===n?4:2,offset:0}})),this.paintVertexArray=new a};La.prototype.populatePaintArray=function(t,e,n,r,i){var a=this.expression.evaluate(new ii(this.zoom),e,{},r,[],i),o=this.expression.evaluate(new ii(this.zoom+1),e,{},r,[],i),s=this.paintVertexArray.length;this.paintVertexArray.resize(t),this._setPaintValue(s,t,a,o)},La.prototype.updatePaintArray=function(t,e,n,r){var i=this.expression.evaluate({zoom:this.zoom},n,r),a=this.expression.evaluate({zoom:this.zoom+1},n,r);this._setPaintValue(t,e,i,a)},La.prototype._setPaintValue=function(t,e,n,r){if(\"color\"===this.type)for(var i=Ma(n),a=Ma(r),o=t;o<e;o++)this.paintVertexArray.emplace(o,i[0],i[1],a[0],a[1]);else{for(var s=t;s<e;s++)this.paintVertexArray.emplace(s,n,r);this.maxValue=Math.max(this.maxValue,Math.abs(n),Math.abs(r))}},La.prototype.upload=function(t){this.paintVertexArray&&this.paintVertexArray.arrayBuffer&&(this.paintVertexBuffer&&this.paintVertexBuffer.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=t.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))},La.prototype.destroy=function(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy()},La.prototype.setUniform=function(t,e){var n=this.useIntegerZoom?Math.floor(e.zoom):e.zoom,r=l(this.expression.interpolationFactor(n,this.zoom,this.zoom+1),0,1);t.set(r)},La.prototype.getBinding=function(t,e,n){return new ya(t,e)};var Ca=function(t,e,n,r,i,a){this.expression=t,this.type=e,this.useIntegerZoom=n,this.zoom=r,this.layerId=a,this.zoomInPaintVertexArray=new i,this.zoomOutPaintVertexArray=new i};Ca.prototype.populatePaintArray=function(t,e,n){var r=this.zoomInPaintVertexArray.length;this.zoomInPaintVertexArray.resize(t),this.zoomOutPaintVertexArray.resize(t),this._setPaintValues(r,t,e.patterns&&e.patterns[this.layerId],n)},Ca.prototype.updatePaintArray=function(t,e,n,r,i){this._setPaintValues(t,e,n.patterns&&n.patterns[this.layerId],i)},Ca.prototype._setPaintValues=function(t,e,n,r){if(r&&n){var i=r[n.min],a=r[n.mid],o=r[n.max];if(i&&a&&o)for(var s=t;s<e;s++)this.zoomInPaintVertexArray.emplace(s,a.tl[0],a.tl[1],a.br[0],a.br[1],i.tl[0],i.tl[1],i.br[0],i.br[1],a.pixelRatio,i.pixelRatio),this.zoomOutPaintVertexArray.emplace(s,a.tl[0],a.tl[1],a.br[0],a.br[1],o.tl[0],o.tl[1],o.br[0],o.br[1],a.pixelRatio,o.pixelRatio)}},Ca.prototype.upload=function(t){this.zoomInPaintVertexArray&&this.zoomInPaintVertexArray.arrayBuffer&&this.zoomOutPaintVertexArray&&this.zoomOutPaintVertexArray.arrayBuffer&&(this.zoomInPaintVertexBuffer=t.createVertexBuffer(this.zoomInPaintVertexArray,oa.members,this.expression.isStateDependent),this.zoomOutPaintVertexBuffer=t.createVertexBuffer(this.zoomOutPaintVertexArray,oa.members,this.expression.isStateDependent))},Ca.prototype.destroy=function(){this.zoomOutPaintVertexBuffer&&this.zoomOutPaintVertexBuffer.destroy(),this.zoomInPaintVertexBuffer&&this.zoomInPaintVertexBuffer.destroy()};var Ea=function(t,e,n,r){this.binders={},this.layoutAttributes=r,this._buffers=[];var i=[];for(var a in t.paint._values)if(n(a)){var o=t.paint.get(a);if(o instanceof hi&&On(o.property.specification)){var s=Da(a,t.type),l=o.value,c=o.property.specification.type,u=o.property.useIntegerZoom,h=o.property.specification[\"property-type\"],d=\"cross-faded\"===h||\"cross-faded-data-driven\"===h;if(\"constant\"===l.kind)this.binders[a]=d?new Sa(l.value,s):new Ta(l.value,s,c),i.push(\"/u_\"+a);else if(\"source\"===l.kind||d){var f=Ia(a,c,\"source\");this.binders[a]=d?new Ca(l,c,u,e,f,t.id):new Aa(l,s,c,f),i.push(\"/a_\"+a)}else{var p=Ia(a,c,\"composite\");this.binders[a]=new La(l,s,c,u,e,p),i.push(\"/z_\"+a)}}}this.cacheKey=i.sort().join(\"\")};Ea.prototype.getMaxValue=function(t){var e=this.binders[t];return e instanceof Aa||e instanceof La?e.maxValue:0},Ea.prototype.populatePaintArrays=function(t,e,n,r,i){for(var a in this.binders){var o=this.binders[a];(o instanceof Aa||o instanceof La||o instanceof Ca)&&o.populatePaintArray(t,e,n,r,i)}},Ea.prototype.setConstantPatternPositions=function(t,e){for(var n in this.binders){var r=this.binders[n];r instanceof Sa&&r.setConstantPatternPositions(t,e)}},Ea.prototype.updatePaintArrays=function(t,e,n,r,i){var a=!1;for(var o in t)for(var s=0,l=e.getPositions(o);s<l.length;s+=1){var c=l[s],u=n.feature(c.index);for(var h in this.binders){var d=this.binders[h];if((d instanceof Aa||d instanceof La||d instanceof Ca)&&!0===d.expression.isStateDependent){var f=r.paint.get(h);d.expression=f.value,d.updatePaintArray(c.start,c.end,u,t[o],i),a=!0}}}return a},Ea.prototype.defines=function(){var t=[];for(var e in this.binders){var n=this.binders[e];(n instanceof Ta||n instanceof Sa)&&t.push.apply(t,n.uniformNames.map((function(t){return\"#define HAS_UNIFORM_\"+t})))}return t},Ea.prototype.getPaintVertexBuffers=function(){return this._buffers},Ea.prototype.getUniforms=function(t,e){var n=[];for(var r in this.binders){var i=this.binders[r];if(i instanceof Ta||i instanceof Sa||i instanceof La)for(var a=0,o=i.uniformNames;a<o.length;a+=1){var s=o[a];if(e[s]){var l=i.getBinding(t,e[s],s);n.push({name:s,property:r,binding:l})}}}return n},Ea.prototype.setUniforms=function(t,e,n,r){for(var i=0,a=e;i<a.length;i+=1){var o=a[i],s=o.name,l=o.property;this.binders[l].setUniform(o.binding,r,n.get(l),s)}},Ea.prototype.updatePaintBuffers=function(t){for(var e in this._buffers=[],this.binders){var n=this.binders[e];if(t&&n instanceof Ca){var r=2===t.fromScale?n.zoomInPaintVertexBuffer:n.zoomOutPaintVertexBuffer;r&&this._buffers.push(r)}else(n instanceof Aa||n instanceof La)&&n.paintVertexBuffer&&this._buffers.push(n.paintVertexBuffer)}},Ea.prototype.upload=function(t){for(var e in this.binders){var n=this.binders[e];(n instanceof Aa||n instanceof La||n instanceof Ca)&&n.upload(t)}this.updatePaintBuffers()},Ea.prototype.destroy=function(){for(var t in this.binders){var e=this.binders[t];(e instanceof Aa||e instanceof La||e instanceof Ca)&&e.destroy()}};var Oa=function(t,e,n,r){void 0===r&&(r=function(){return!0}),this.programConfigurations={};for(var i=0,a=e;i<a.length;i+=1){var o=a[i];this.programConfigurations[o.id]=new Ea(o,n,r,t)}this.needsUpload=!1,this._featureMap=new ha,this._bufferOffset=0};function Da(t,e){return{\"text-opacity\":[\"opacity\"],\"icon-opacity\":[\"opacity\"],\"text-color\":[\"fill_color\"],\"icon-color\":[\"fill_color\"],\"text-halo-color\":[\"halo_color\"],\"icon-halo-color\":[\"halo_color\"],\"text-halo-blur\":[\"halo_blur\"],\"icon-halo-blur\":[\"halo_blur\"],\"text-halo-width\":[\"halo_width\"],\"icon-halo-width\":[\"halo_width\"],\"line-gap-width\":[\"gapwidth\"],\"line-pattern\":[\"pattern_to\",\"pattern_from\",\"pixel_ratio_to\",\"pixel_ratio_from\"],\"fill-pattern\":[\"pattern_to\",\"pattern_from\",\"pixel_ratio_to\",\"pixel_ratio_from\"],\"fill-extrusion-pattern\":[\"pattern_to\",\"pattern_from\",\"pixel_ratio_to\",\"pixel_ratio_from\"]}[t]||[t.replace(e+\"-\",\"\").replace(/-/g,\"_\")]}function Ia(t,e,n){var r={color:{source:Wi,composite:qi},number:{source:Bi,composite:Wi}},i=function(t){return{\"line-pattern\":{source:Ci,composite:Ci},\"fill-pattern\":{source:Ci,composite:Ci},\"fill-extrusion-pattern\":{source:Ci,composite:Ci}}[t]}(t);return i&&i[n]||r[e][n]}Oa.prototype.populatePaintArrays=function(t,e,n,r,i,a){for(var o in this.programConfigurations)this.programConfigurations[o].populatePaintArrays(t,e,r,i,a);void 0!==e.id&&this._featureMap.add(e.id,n,this._bufferOffset,t),this._bufferOffset=t,this.needsUpload=!0},Oa.prototype.updatePaintArrays=function(t,e,n,r){for(var i=0,a=n;i<a.length;i+=1){var o=a[i];this.needsUpload=this.programConfigurations[o.id].updatePaintArrays(t,this._featureMap,e,o,r)||this.needsUpload}},Oa.prototype.get=function(t){return this.programConfigurations[t]},Oa.prototype.upload=function(t){if(this.needsUpload){for(var e in this.programConfigurations)this.programConfigurations[e].upload(t);this.needsUpload=!1}},Oa.prototype.destroy=function(){for(var t in this.programConfigurations)this.programConfigurations[t].destroy()},Rr(\"ConstantBinder\",Ta),Rr(\"CrossFadedConstantBinder\",Sa),Rr(\"SourceExpressionBinder\",Aa),Rr(\"CrossFadedCompositeBinder\",Ca),Rr(\"CompositeExpressionBinder\",La),Rr(\"ProgramConfiguration\",Ea,{omit:[\"_buffers\"]}),Rr(\"ProgramConfigurationSet\",Oa);var Pa={min:-1*Math.pow(2,14),max:Math.pow(2,14)-1};function Ra(t){for(var e=8192/t.extent,n=t.loadGeometry(),r=0;r<n.length;r++)for(var i=n[r],a=0;a<i.length;a++){var o=i[a];o.x=Math.round(o.x*e),o.y=Math.round(o.y*e),(o.x<Pa.min||o.x>Pa.max||o.y<Pa.min||o.y>Pa.max)&&(x(\"Geometry exceeds allowed extent, reduce your vector tile buffer size\"),o.x=l(o.x,Pa.min,Pa.max),o.y=l(o.y,Pa.min,Pa.max))}return n}function za(t,e,n,r,i){t.emplaceBack(2*e+(r+1)/2,2*n+(i+1)/2)}var ja=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new Ti,this.indexArray=new ji,this.segments=new ia,this.programConfigurations=new Oa(ra,t.layers,t.zoom),this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};function Fa(t,e){for(var n=0;n<t.length;n++)if(Ga(e,t[n]))return!0;for(var r=0;r<e.length;r++)if(Ga(t,e[r]))return!0;return!!Ha(t,e)}function Na(t,e,n){return!!Ga(t,e)||!!Ua(e,t,n)}function Ba(t,e){if(1===t.length)return qa(e,t[0]);for(var n=0;n<e.length;n++)for(var r=e[n],i=0;i<r.length;i++)if(Ga(t,r[i]))return!0;for(var a=0;a<t.length;a++)if(qa(e,t[a]))return!0;for(var o=0;o<e.length;o++)if(Ha(t,e[o]))return!0;return!1}function Ya(t,e,n){if(t.length>1){if(Ha(t,e))return!0;for(var r=0;r<e.length;r++)if(Ua(e[r],t,n))return!0}for(var i=0;i<t.length;i++)if(Ua(t[i],e,n))return!0;return!1}function Ha(t,e){if(0===t.length||0===e.length)return!1;for(var n=0;n<t.length-1;n++)for(var r=t[n],i=t[n+1],a=0;a<e.length-1;a++)if(Va(r,i,e[a],e[a+1]))return!0;return!1}function Va(t,e,n,r){return w(t,n,r)!==w(e,n,r)&&w(t,e,n)!==w(t,e,r)}function Ua(t,e,n){var r=n*n;if(1===e.length)return t.distSqr(e[0])<r;for(var i=1;i<e.length;i++)if(Wa(t,e[i-1],e[i])<r)return!0;return!1}function Wa(t,e,n){var r=e.distSqr(n);if(0===r)return t.distSqr(e);var i=((t.x-e.x)*(n.x-e.x)+(t.y-e.y)*(n.y-e.y))/r;return t.distSqr(i<0?e:i>1?n:n.sub(e)._mult(i)._add(e))}function qa(t,e){for(var n,r,i,a=!1,o=0;o<t.length;o++)for(var s=0,l=(n=t[o]).length-1;s<n.length;l=s++)(r=n[s]).y>e.y!=(i=n[l]).y>e.y&&e.x<(i.x-r.x)*(e.y-r.y)/(i.y-r.y)+r.x&&(a=!a);return a}function Ga(t,e){for(var n=!1,r=0,i=t.length-1;r<t.length;i=r++){var a=t[r],o=t[i];a.y>e.y!=o.y>e.y&&e.x<(o.x-a.x)*(e.y-a.y)/(o.y-a.y)+a.x&&(n=!n)}return n}function Xa(t,e,n){var r=n[0],i=n[2];if(t.x<r.x&&e.x<r.x||t.x>i.x&&e.x>i.x||t.y<r.y&&e.y<r.y||t.y>i.y&&e.y>i.y)return!1;var a=w(t,e,n[0]);return a!==w(t,e,n[1])||a!==w(t,e,n[2])||a!==w(t,e,n[3])}function Za(t,e,n){var r=e.paint.get(t).value;return\"constant\"===r.kind?r.value:n.programConfigurations.get(e.id).getMaxValue(t)}function Ja(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function Ka(t,e,n,r,a){if(!e[0]&&!e[1])return t;var o=i.convert(e)._mult(a);\"viewport\"===n&&o._rotate(-r);for(var s=[],l=0;l<t.length;l++)s.push(t[l].sub(o));return s}ja.prototype.populate=function(t,e,n){var r=this.layers[0],i=[],a=null;\"circle\"===r.type&&(a=r.layout.get(\"circle-sort-key\"));for(var o=0,s=t;o<s.length;o+=1){var l=s[o],c=l.feature,u=l.id,h=l.index,d=l.sourceLayerIndex,f=this.layers[0]._featureFilter.needGeometry,p={type:c.type,id:u,properties:c.properties,geometry:f?Ra(c):[]};if(this.layers[0]._featureFilter.filter(new ii(this.zoom),p,n)){f||(p.geometry=Ra(c));var m=a?a.evaluate(p,{},n):void 0;i.push({id:u,properties:c.properties,type:c.type,sourceLayerIndex:d,index:h,geometry:p.geometry,patterns:{},sortKey:m})}}a&&i.sort((function(t,e){return t.sortKey-e.sortKey}));for(var g=0,y=i;g<y.length;g+=1){var v=y[g],_=v.geometry,b=v.index,x=v.sourceLayerIndex,w=t[b].feature;this.addFeature(v,_,b,n),e.featureIndex.insert(w,_,b,x,this.index)}},ja.prototype.update=function(t,e,n){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,n)},ja.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},ja.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},ja.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,ra),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},ja.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},ja.prototype.addFeature=function(t,e,n,r){for(var i=0,a=e;i<a.length;i+=1)for(var o=0,s=a[i];o<s.length;o+=1){var l=s[o],c=l.x,u=l.y;if(!(c<0||c>=8192||u<0||u>=8192)){var h=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray,t.sortKey),d=h.vertexLength;za(this.layoutVertexArray,c,u,-1,-1),za(this.layoutVertexArray,c,u,1,-1),za(this.layoutVertexArray,c,u,1,1),za(this.layoutVertexArray,c,u,-1,1),this.indexArray.emplaceBack(d,d+1,d+2),this.indexArray.emplaceBack(d,d+3,d+2),h.vertexLength+=4,h.primitiveLength+=2}}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,n,{},r)},Rr(\"CircleBucket\",ja,{omit:[\"layers\"]});var $a=new vi({\"circle-sort-key\":new pi(St.layout_circle[\"circle-sort-key\"])}),Qa={paint:new vi({\"circle-radius\":new pi(St.paint_circle[\"circle-radius\"]),\"circle-color\":new pi(St.paint_circle[\"circle-color\"]),\"circle-blur\":new pi(St.paint_circle[\"circle-blur\"]),\"circle-opacity\":new pi(St.paint_circle[\"circle-opacity\"]),\"circle-translate\":new fi(St.paint_circle[\"circle-translate\"]),\"circle-translate-anchor\":new fi(St.paint_circle[\"circle-translate-anchor\"]),\"circle-pitch-scale\":new fi(St.paint_circle[\"circle-pitch-scale\"]),\"circle-pitch-alignment\":new fi(St.paint_circle[\"circle-pitch-alignment\"]),\"circle-stroke-width\":new pi(St.paint_circle[\"circle-stroke-width\"]),\"circle-stroke-color\":new pi(St.paint_circle[\"circle-stroke-color\"]),\"circle-stroke-opacity\":new pi(St.paint_circle[\"circle-stroke-opacity\"])}),layout:$a},to=\"undefined\"!=typeof Float32Array?Float32Array:Array;function eo(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function no(t,e,n){var r=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],c=e[6],u=e[7],h=e[8],d=e[9],f=e[10],p=e[11],m=e[12],g=e[13],y=e[14],v=e[15],_=n[0],b=n[1],x=n[2],w=n[3];return t[0]=_*r+b*s+x*h+w*m,t[1]=_*i+b*l+x*d+w*g,t[2]=_*a+b*c+x*f+w*y,t[3]=_*o+b*u+x*p+w*v,t[4]=(_=n[4])*r+(b=n[5])*s+(x=n[6])*h+(w=n[7])*m,t[5]=_*i+b*l+x*d+w*g,t[6]=_*a+b*c+x*f+w*y,t[7]=_*o+b*u+x*p+w*v,t[8]=(_=n[8])*r+(b=n[9])*s+(x=n[10])*h+(w=n[11])*m,t[9]=_*i+b*l+x*d+w*g,t[10]=_*a+b*c+x*f+w*y,t[11]=_*o+b*u+x*p+w*v,t[12]=(_=n[12])*r+(b=n[13])*s+(x=n[14])*h+(w=n[15])*m,t[13]=_*i+b*l+x*d+w*g,t[14]=_*a+b*c+x*f+w*y,t[15]=_*o+b*u+x*p+w*v,t}Math.hypot||(Math.hypot=function(){for(var t=arguments,e=0,n=arguments.length;n--;)e+=t[n]*t[n];return Math.sqrt(e)});var ro,io=no;function ao(t,e,n){var r=e[0],i=e[1],a=e[2],o=e[3];return t[0]=n[0]*r+n[4]*i+n[8]*a+n[12]*o,t[1]=n[1]*r+n[5]*i+n[9]*a+n[13]*o,t[2]=n[2]*r+n[6]*i+n[10]*a+n[14]*o,t[3]=n[3]*r+n[7]*i+n[11]*a+n[15]*o,t}ro=new to(3),to!=Float32Array&&(ro[0]=0,ro[1]=0,ro[2]=0),function(){var t=new to(4);to!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0)}();var oo=(function(){var t=new to(2);to!=Float32Array&&(t[0]=0,t[1]=0)}(),function(t){function e(e){t.call(this,e,Qa)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.createBucket=function(t){return new ja(t)},e.prototype.queryRadius=function(t){var e=t;return Za(\"circle-radius\",this,e)+Za(\"circle-stroke-width\",this,e)+Ja(this.paint.get(\"circle-translate\"))},e.prototype.queryIntersectsFeature=function(t,e,n,r,i,a,o,s){for(var l=Ka(t,this.paint.get(\"circle-translate\"),this.paint.get(\"circle-translate-anchor\"),a.angle,o),c=this.paint.get(\"circle-radius\").evaluate(e,n)+this.paint.get(\"circle-stroke-width\").evaluate(e,n),u=\"map\"===this.paint.get(\"circle-pitch-alignment\"),h=u?l:function(t,e){return t.map((function(t){return so(t,e)}))}(l,s),d=u?c*o:c,f=0,p=r;f<p.length;f+=1)for(var m=0,g=p[f];m<g.length;m+=1){var y=g[m],v=u?y:so(y,s),_=d,b=ao([],[y.x,y.y,0,1],s);if(\"viewport\"===this.paint.get(\"circle-pitch-scale\")&&\"map\"===this.paint.get(\"circle-pitch-alignment\")?_*=b[3]/a.cameraToCenterDistance:\"map\"===this.paint.get(\"circle-pitch-scale\")&&\"viewport\"===this.paint.get(\"circle-pitch-alignment\")&&(_*=a.cameraToCenterDistance/b[3]),Na(h,v,_))return!0}return!1},e}(_i));function so(t,e){var n=ao([],[t.x,t.y,0,1],e);return new i(n[0]/n[3],n[1]/n[3])}var lo=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e}(ja);function co(t,e,n,r){var i=e.width,a=e.height;if(r){if(r instanceof Uint8ClampedArray)r=new Uint8Array(r.buffer);else if(r.length!==i*a*n)throw new RangeError(\"mismatched image size\")}else r=new Uint8Array(i*a*n);return t.width=i,t.height=a,t.data=r,t}function uo(t,e,n){var r=e.width,i=e.height;if(r!==t.width||i!==t.height){var a=co({},{width:r,height:i},n);ho(t,a,{x:0,y:0},{x:0,y:0},{width:Math.min(t.width,r),height:Math.min(t.height,i)},n),t.width=r,t.height=i,t.data=a.data}}function ho(t,e,n,r,i,a){if(0===i.width||0===i.height)return e;if(i.width>t.width||i.height>t.height||n.x>t.width-i.width||n.y>t.height-i.height)throw new RangeError(\"out of range source coordinates for image copy\");if(i.width>e.width||i.height>e.height||r.x>e.width-i.width||r.y>e.height-i.height)throw new RangeError(\"out of range destination coordinates for image copy\");for(var o=t.data,s=e.data,l=0;l<i.height;l++)for(var c=((n.y+l)*t.width+n.x)*a,u=((r.y+l)*e.width+r.x)*a,h=0;h<i.width*a;h++)s[u+h]=o[c+h];return e}Rr(\"HeatmapBucket\",lo,{omit:[\"layers\"]});var fo=function(t,e){co(this,t,1,e)};fo.prototype.resize=function(t){uo(this,t,1)},fo.prototype.clone=function(){return new fo({width:this.width,height:this.height},new Uint8Array(this.data))},fo.copy=function(t,e,n,r,i){ho(t,e,n,r,i,1)};var po=function(t,e){co(this,t,4,e)};po.prototype.resize=function(t){uo(this,t,4)},po.prototype.replace=function(t,e){e?this.data.set(t):this.data=t instanceof Uint8ClampedArray?new Uint8Array(t.buffer):t},po.prototype.clone=function(){return new po({width:this.width,height:this.height},new Uint8Array(this.data))},po.copy=function(t,e,n,r,i){ho(t,e,n,r,i,4)},Rr(\"AlphaImage\",fo),Rr(\"RGBAImage\",po);var mo={paint:new vi({\"heatmap-radius\":new pi(St.paint_heatmap[\"heatmap-radius\"]),\"heatmap-weight\":new pi(St.paint_heatmap[\"heatmap-weight\"]),\"heatmap-intensity\":new fi(St.paint_heatmap[\"heatmap-intensity\"]),\"heatmap-color\":new yi(St.paint_heatmap[\"heatmap-color\"]),\"heatmap-opacity\":new fi(St.paint_heatmap[\"heatmap-opacity\"])})};function go(t,e){for(var n=new Uint8Array(1024),r={},i=0,a=0;i<256;i++,a+=4){r[e]=i/255;var o=t.evaluate(r);n[a+0]=Math.floor(255*o.r/o.a),n[a+1]=Math.floor(255*o.g/o.a),n[a+2]=Math.floor(255*o.b/o.a),n[a+3]=Math.floor(255*o.a)}return new po({width:256,height:1},n)}var yo=function(t){function e(e){t.call(this,e,mo),this._updateColorRamp()}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.createBucket=function(t){return new lo(t)},e.prototype._handleSpecialPaintPropertyUpdate=function(t){\"heatmap-color\"===t&&this._updateColorRamp()},e.prototype._updateColorRamp=function(){this.colorRamp=go(this._transitionablePaint._values[\"heatmap-color\"].value.expression,\"heatmapDensity\"),this.colorRampTexture=null},e.prototype.resize=function(){this.heatmapFbo&&(this.heatmapFbo.destroy(),this.heatmapFbo=null)},e.prototype.queryRadius=function(){return 0},e.prototype.queryIntersectsFeature=function(){return!1},e.prototype.hasOffscreenPass=function(){return 0!==this.paint.get(\"heatmap-opacity\")&&\"none\"!==this.visibility},e}(_i),vo={paint:new vi({\"hillshade-illumination-direction\":new fi(St.paint_hillshade[\"hillshade-illumination-direction\"]),\"hillshade-illumination-anchor\":new fi(St.paint_hillshade[\"hillshade-illumination-anchor\"]),\"hillshade-exaggeration\":new fi(St.paint_hillshade[\"hillshade-exaggeration\"]),\"hillshade-shadow-color\":new fi(St.paint_hillshade[\"hillshade-shadow-color\"]),\"hillshade-highlight-color\":new fi(St.paint_hillshade[\"hillshade-highlight-color\"]),\"hillshade-accent-color\":new fi(St.paint_hillshade[\"hillshade-accent-color\"])})},_o=function(t){function e(e){t.call(this,e,vo)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.hasOffscreenPass=function(){return 0!==this.paint.get(\"hillshade-exaggeration\")&&\"none\"!==this.visibility},e}(_i),bo=ki([{name:\"a_pos\",components:2,type:\"Int16\"}],4).members,xo=ko,wo=ko;function ko(t,e,n){n=n||2;var r,i,a,o,s,l,c,u=e&&e.length,h=u?e[0]*n:t.length,d=Mo(t,0,h,n,!0),f=[];if(!d||d.next===d.prev)return f;if(u&&(d=function(t,e,n,r){var i,a,o,s=[];for(i=0,a=e.length;i<a;i++)(o=Mo(t,e[i]*r,i<a-1?e[i+1]*r:t.length,r,!1))===o.next&&(o.steiner=!0),s.push(Ro(o));for(s.sort(Oo),i=0;i<s.length;i++)Do(s[i],n),n=To(n,n.next);return n}(t,e,d,n)),t.length>80*n){r=a=t[0],i=o=t[1];for(var p=n;p<h;p+=n)(s=t[p])<r&&(r=s),(l=t[p+1])<i&&(i=l),s>a&&(a=s),l>o&&(o=l);c=0!==(c=Math.max(a-r,o-i))?1/c:0}return So(d,f,n,r,i,c),f}function Mo(t,e,n,r,i){var a,o;if(i===Xo(t,e,n,r)>0)for(a=e;a<n;a+=r)o=Wo(a,t[a],t[a+1],o);else for(a=n-r;a>=e;a-=r)o=Wo(a,t[a],t[a+1],o);return o&&No(o,o.next)&&(qo(o),o=o.next),o}function To(t,e){if(!t)return t;e||(e=t);var n,r=t;do{if(n=!1,r.steiner||!No(r,r.next)&&0!==Fo(r.prev,r,r.next))r=r.next;else{if(qo(r),(r=e=r.prev)===r.next)break;n=!0}}while(n||r!==e);return e}function So(t,e,n,r,i,a,o){if(t){!o&&a&&function(t,e,n,r){var i=t;do{null===i.z&&(i.z=Po(i.x,i.y,e,n,r)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,function(t){var e,n,r,i,a,o,s,l,c=1;do{for(n=t,t=null,a=null,o=0;n;){for(o++,r=n,s=0,e=0;e<c&&(s++,r=r.nextZ);e++);for(l=c;s>0||l>0&&r;)0!==s&&(0===l||!r||n.z<=r.z)?(i=n,n=n.nextZ,s--):(i=r,r=r.nextZ,l--),a?a.nextZ=i:t=i,i.prevZ=a,a=i;n=r}a.nextZ=null,c*=2}while(o>1)}(i)}(t,r,i,a);for(var s,l,c=t;t.prev!==t.next;)if(s=t.prev,l=t.next,a?Lo(t,r,i,a):Ao(t))e.push(s.i/n),e.push(t.i/n),e.push(l.i/n),qo(t),t=l.next,c=l.next;else if((t=l)===c){o?1===o?So(t=Co(To(t),e,n),e,n,r,i,a,2):2===o&&Eo(t,e,n,r,i,a):So(To(t),e,n,r,i,a,1);break}}}function Ao(t){var e=t.prev,n=t,r=t.next;if(Fo(e,n,r)>=0)return!1;for(var i=t.next.next;i!==t.prev;){if(zo(e.x,e.y,n.x,n.y,r.x,r.y,i.x,i.y)&&Fo(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function Lo(t,e,n,r){var i=t.prev,a=t,o=t.next;if(Fo(i,a,o)>=0)return!1;for(var s=i.x>a.x?i.x>o.x?i.x:o.x:a.x>o.x?a.x:o.x,l=i.y>a.y?i.y>o.y?i.y:o.y:a.y>o.y?a.y:o.y,c=Po(i.x<a.x?i.x<o.x?i.x:o.x:a.x<o.x?a.x:o.x,i.y<a.y?i.y<o.y?i.y:o.y:a.y<o.y?a.y:o.y,e,n,r),u=Po(s,l,e,n,r),h=t.prevZ,d=t.nextZ;h&&h.z>=c&&d&&d.z<=u;){if(h!==t.prev&&h!==t.next&&zo(i.x,i.y,a.x,a.y,o.x,o.y,h.x,h.y)&&Fo(h.prev,h,h.next)>=0)return!1;if(h=h.prevZ,d!==t.prev&&d!==t.next&&zo(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)&&Fo(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(;h&&h.z>=c;){if(h!==t.prev&&h!==t.next&&zo(i.x,i.y,a.x,a.y,o.x,o.y,h.x,h.y)&&Fo(h.prev,h,h.next)>=0)return!1;h=h.prevZ}for(;d&&d.z<=u;){if(d!==t.prev&&d!==t.next&&zo(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)&&Fo(d.prev,d,d.next)>=0)return!1;d=d.nextZ}return!0}function Co(t,e,n){var r=t;do{var i=r.prev,a=r.next.next;!No(i,a)&&Bo(i,r,r.next,a)&&Vo(i,a)&&Vo(a,i)&&(e.push(i.i/n),e.push(r.i/n),e.push(a.i/n),qo(r),qo(r.next),r=t=a),r=r.next}while(r!==t);return To(r)}function Eo(t,e,n,r,i,a){var o=t;do{for(var s=o.next.next;s!==o.prev;){if(o.i!==s.i&&jo(o,s)){var l=Uo(o,s);return o=To(o,o.next),l=To(l,l.next),So(o,e,n,r,i,a),void So(l,e,n,r,i,a)}s=s.next}o=o.next}while(o!==t)}function Oo(t,e){return t.x-e.x}function Do(t,e){if(e=function(t,e){var n,r=e,i=t.x,a=t.y,o=-1/0;do{if(a<=r.y&&a>=r.next.y&&r.next.y!==r.y){var s=r.x+(a-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(s<=i&&s>o){if(o=s,s===i){if(a===r.y)return r;if(a===r.next.y)return r.next}n=r.x<r.next.x?r:r.next}}r=r.next}while(r!==e);if(!n)return null;if(i===o)return n;var l,c=n,u=n.x,h=n.y,d=1/0;r=n;do{i>=r.x&&r.x>=u&&i!==r.x&&zo(a<h?i:o,a,u,h,a<h?o:i,a,r.x,r.y)&&(l=Math.abs(a-r.y)/(i-r.x),Vo(r,t)&&(l<d||l===d&&(r.x>n.x||r.x===n.x&&Io(n,r)))&&(n=r,d=l)),r=r.next}while(r!==c);return n}(t,e)){var n=Uo(e,t);To(e,e.next),To(n,n.next)}}function Io(t,e){return Fo(t.prev,t,e.prev)<0&&Fo(e.next,t,t.next)<0}function Po(t,e,n,r,i){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*i)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-r)*i)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function Ro(t){var e=t,n=t;do{(e.x<n.x||e.x===n.x&&e.y<n.y)&&(n=e),e=e.next}while(e!==t);return n}function zo(t,e,n,r,i,a,o,s){return(i-o)*(e-s)-(t-o)*(a-s)>=0&&(t-o)*(r-s)-(n-o)*(e-s)>=0&&(n-o)*(a-s)-(i-o)*(r-s)>=0}function jo(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&Bo(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(Vo(t,e)&&Vo(e,t)&&function(t,e){var n=t,r=!1,i=(t.x+e.x)/2,a=(t.y+e.y)/2;do{n.y>a!=n.next.y>a&&n.next.y!==n.y&&i<(n.next.x-n.x)*(a-n.y)/(n.next.y-n.y)+n.x&&(r=!r),n=n.next}while(n!==t);return r}(t,e)&&(Fo(t.prev,t,e.prev)||Fo(t,e.prev,e))||No(t,e)&&Fo(t.prev,t,t.next)>0&&Fo(e.prev,e,e.next)>0)}function Fo(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function No(t,e){return t.x===e.x&&t.y===e.y}function Bo(t,e,n,r){var i=Ho(Fo(t,e,n)),a=Ho(Fo(t,e,r)),o=Ho(Fo(n,r,t)),s=Ho(Fo(n,r,e));return i!==a&&o!==s||!(0!==i||!Yo(t,n,e))||!(0!==a||!Yo(t,r,e))||!(0!==o||!Yo(n,t,r))||!(0!==s||!Yo(n,e,r))}function Yo(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function Ho(t){return t>0?1:t<0?-1:0}function Vo(t,e){return Fo(t.prev,t,t.next)<0?Fo(t,e,t.next)>=0&&Fo(t,t.prev,e)>=0:Fo(t,e,t.prev)<0||Fo(t,t.next,e)<0}function Uo(t,e){var n=new Go(t.i,t.x,t.y),r=new Go(e.i,e.x,e.y),i=t.next,a=e.prev;return t.next=e,e.prev=t,n.next=i,i.prev=n,r.next=n,n.prev=r,a.next=r,r.prev=a,r}function Wo(t,e,n,r){var i=new Go(t,e,n);return r?(i.next=r.next,i.prev=r,r.next.prev=i,r.next=i):(i.prev=i,i.next=i),i}function qo(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function Go(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function Xo(t,e,n,r){for(var i=0,a=e,o=n-r;a<n;a+=r)i+=(t[o]-t[a])*(t[a+1]+t[o+1]),o=a;return i}function Zo(t,e,n,r,i){!function t(e,n,r,i,a){for(;i>r;){if(i-r>600){var o=i-r+1,s=n-r+1,l=Math.log(o),c=.5*Math.exp(2*l/3),u=.5*Math.sqrt(l*c*(o-c)/o)*(s-o/2<0?-1:1);t(e,n,Math.max(r,Math.floor(n-s*c/o+u)),Math.min(i,Math.floor(n+(o-s)*c/o+u)),a)}var h=e[n],d=r,f=i;for(Jo(e,r,n),a(e[i],h)>0&&Jo(e,r,i);d<f;){for(Jo(e,d,f),d++,f--;a(e[d],h)<0;)d++;for(;a(e[f],h)>0;)f--}0===a(e[r],h)?Jo(e,r,f):Jo(e,++f,i),f<=n&&(r=f+1),n<=f&&(i=f-1)}}(t,e,n||0,r||t.length-1,i||Ko)}function Jo(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function Ko(t,e){return t<e?-1:t>e?1:0}function $o(t,e){var n=t.length;if(n<=1)return[t];for(var r,i,a=[],o=0;o<n;o++){var s=k(t[o]);0!==s&&(t[o].area=Math.abs(s),void 0===i&&(i=s<0),i===s<0?(r&&a.push(r),r=[t[o]]):r.push(t[o]))}if(r&&a.push(r),e>1)for(var l=0;l<a.length;l++)a[l].length<=e||(Zo(a[l],e,1,a[l].length-1,Qo),a[l]=a[l].slice(0,e));return a}function Qo(t,e){return e.area-t.area}function ts(t,e,n){for(var r=n.patternDependencies,i=!1,a=0,o=e;a<o.length;a+=1){var s=o[a].paint.get(t+\"-pattern\");s.isConstant()||(i=!0);var l=s.constantOr(null);l&&(i=!0,r[l.to]=!0,r[l.from]=!0)}return i}function es(t,e,n,r,i){for(var a=i.patternDependencies,o=0,s=e;o<s.length;o+=1){var l=s[o],c=l.paint.get(t+\"-pattern\").value;if(\"constant\"!==c.kind){var u=c.evaluate({zoom:r-1},n,{},i.availableImages),h=c.evaluate({zoom:r},n,{},i.availableImages),d=c.evaluate({zoom:r+1},n,{},i.availableImages);h=h&&h.name?h.name:h,d=d&&d.name?d.name:d,a[u=u&&u.name?u.name:u]=!0,a[h]=!0,a[d]=!0,n.patterns[l.id]={min:u,mid:h,max:d}}}return n}ko.deviation=function(t,e,n,r){var i=e&&e.length,a=Math.abs(Xo(t,0,i?e[0]*n:t.length,n));if(i)for(var o=0,s=e.length;o<s;o++)a-=Math.abs(Xo(t,e[o]*n,o<s-1?e[o+1]*n:t.length,n));var l=0;for(o=0;o<r.length;o+=3){var c=r[o]*n,u=r[o+1]*n,h=r[o+2]*n;l+=Math.abs((t[c]-t[h])*(t[u+1]-t[c+1])-(t[c]-t[u])*(t[h+1]-t[c+1]))}return 0===a&&0===l?0:Math.abs((l-a)/a)},ko.flatten=function(t){for(var e=t[0][0].length,n={vertices:[],holes:[],dimensions:e},r=0,i=0;i<t.length;i++){for(var a=0;a<t[i].length;a++)for(var o=0;o<e;o++)n.vertices.push(t[i][a][o]);i>0&&n.holes.push(r+=t[i-1].length)}return n},xo.default=wo;var ns=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.patternFeatures=[],this.layoutVertexArray=new Ti,this.indexArray=new ji,this.indexArray2=new Vi,this.programConfigurations=new Oa(bo,t.layers,t.zoom),this.segments=new ia,this.segments2=new ia,this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};ns.prototype.populate=function(t,e,n){this.hasPattern=ts(\"fill\",this.layers,e);for(var r=this.layers[0].layout.get(\"fill-sort-key\"),i=[],a=0,o=t;a<o.length;a+=1){var s=o[a],l=s.feature,c=s.id,u=s.index,h=s.sourceLayerIndex,d=this.layers[0]._featureFilter.needGeometry,f={type:l.type,id:c,properties:l.properties,geometry:d?Ra(l):[]};if(this.layers[0]._featureFilter.filter(new ii(this.zoom),f,n)){d||(f.geometry=Ra(l));var p=r?r.evaluate(f,{},n,e.availableImages):void 0;i.push({id:c,properties:l.properties,type:l.type,sourceLayerIndex:h,index:u,geometry:f.geometry,patterns:{},sortKey:p})}}r&&i.sort((function(t,e){return t.sortKey-e.sortKey}));for(var m=0,g=i;m<g.length;m+=1){var y=g[m],v=y.geometry,_=y.index,b=y.sourceLayerIndex;if(this.hasPattern){var x=es(\"fill\",this.layers,y,this.zoom,e);this.patternFeatures.push(x)}else this.addFeature(y,v,_,n,{});e.featureIndex.insert(t[_].feature,v,_,b,this.index)}},ns.prototype.update=function(t,e,n){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,n)},ns.prototype.addFeatures=function(t,e,n){for(var r=0,i=this.patternFeatures;r<i.length;r+=1){var a=i[r];this.addFeature(a,a.geometry,a.index,e,n)}},ns.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},ns.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},ns.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,bo),this.indexBuffer=t.createIndexBuffer(this.indexArray),this.indexBuffer2=t.createIndexBuffer(this.indexArray2)),this.programConfigurations.upload(t),this.uploaded=!0},ns.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.indexBuffer2.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.segments2.destroy())},ns.prototype.addFeature=function(t,e,n,r,i){for(var a=0,o=$o(e,500);a<o.length;a+=1){for(var s=o[a],l=0,c=0,u=s;c<u.length;c+=1)l+=u[c].length;for(var h=this.segments.prepareSegment(l,this.layoutVertexArray,this.indexArray),d=h.vertexLength,f=[],p=[],m=0,g=s;m<g.length;m+=1){var y=g[m];if(0!==y.length){y!==s[0]&&p.push(f.length/2);var v=this.segments2.prepareSegment(y.length,this.layoutVertexArray,this.indexArray2),_=v.vertexLength;this.layoutVertexArray.emplaceBack(y[0].x,y[0].y),this.indexArray2.emplaceBack(_+y.length-1,_),f.push(y[0].x),f.push(y[0].y);for(var b=1;b<y.length;b++)this.layoutVertexArray.emplaceBack(y[b].x,y[b].y),this.indexArray2.emplaceBack(_+b-1,_+b),f.push(y[b].x),f.push(y[b].y);v.vertexLength+=y.length,v.primitiveLength+=y.length}}for(var x=xo(f,p),w=0;w<x.length;w+=3)this.indexArray.emplaceBack(d+x[w],d+x[w+1],d+x[w+2]);h.vertexLength+=l,h.primitiveLength+=x.length/3}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,n,i,r)},Rr(\"FillBucket\",ns,{omit:[\"layers\",\"patternFeatures\"]});var rs=new vi({\"fill-sort-key\":new pi(St.layout_fill[\"fill-sort-key\"])}),is={paint:new vi({\"fill-antialias\":new fi(St.paint_fill[\"fill-antialias\"]),\"fill-opacity\":new pi(St.paint_fill[\"fill-opacity\"]),\"fill-color\":new pi(St.paint_fill[\"fill-color\"]),\"fill-outline-color\":new pi(St.paint_fill[\"fill-outline-color\"]),\"fill-translate\":new fi(St.paint_fill[\"fill-translate\"]),\"fill-translate-anchor\":new fi(St.paint_fill[\"fill-translate-anchor\"]),\"fill-pattern\":new mi(St.paint_fill[\"fill-pattern\"])}),layout:rs},as=function(t){function e(e){t.call(this,e,is)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.recalculate=function(e,n){t.prototype.recalculate.call(this,e,n);var r=this.paint._values[\"fill-outline-color\"];\"constant\"===r.value.kind&&void 0===r.value.value&&(this.paint._values[\"fill-outline-color\"]=this.paint._values[\"fill-color\"])},e.prototype.createBucket=function(t){return new ns(t)},e.prototype.queryRadius=function(){return Ja(this.paint.get(\"fill-translate\"))},e.prototype.queryIntersectsFeature=function(t,e,n,r,i,a,o){return Ba(Ka(t,this.paint.get(\"fill-translate\"),this.paint.get(\"fill-translate-anchor\"),a.angle,o),r)},e.prototype.isTileClipped=function(){return!0},e}(_i),os=ki([{name:\"a_pos\",components:2,type:\"Int16\"},{name:\"a_normal_ed\",components:4,type:\"Int16\"}],4).members,ss=ls;function ls(t,e,n,r,i){this.properties={},this.extent=n,this.type=0,this._pbf=t,this._geometry=-1,this._keys=r,this._values=i,t.readFields(cs,this,e)}function cs(t,e,n){1==t?e.id=n.readVarint():2==t?function(t,e){for(var n=t.readVarint()+t.pos;t.pos<n;){var r=e._keys[t.readVarint()],i=e._values[t.readVarint()];e.properties[r]=i}}(n,e):3==t?e.type=n.readVarint():4==t&&(e._geometry=n.pos)}function us(t){for(var e,n,r=0,i=0,a=t.length,o=a-1;i<a;o=i++)r+=((n=t[o]).x-(e=t[i]).x)*(e.y+n.y);return r}ls.types=[\"Unknown\",\"Point\",\"LineString\",\"Polygon\"],ls.prototype.loadGeometry=function(){var t=this._pbf;t.pos=this._geometry;for(var e,n=t.readVarint()+t.pos,r=1,a=0,o=0,s=0,l=[];t.pos<n;){if(a<=0){var c=t.readVarint();r=7&c,a=c>>3}if(a--,1===r||2===r)o+=t.readSVarint(),s+=t.readSVarint(),1===r&&(e&&l.push(e),e=[]),e.push(new i(o,s));else{if(7!==r)throw new Error(\"unknown command \"+r);e&&e.push(e[0].clone())}}return e&&l.push(e),l},ls.prototype.bbox=function(){var t=this._pbf;t.pos=this._geometry;for(var e=t.readVarint()+t.pos,n=1,r=0,i=0,a=0,o=1/0,s=-1/0,l=1/0,c=-1/0;t.pos<e;){if(r<=0){var u=t.readVarint();n=7&u,r=u>>3}if(r--,1===n||2===n)(i+=t.readSVarint())<o&&(o=i),i>s&&(s=i),(a+=t.readSVarint())<l&&(l=a),a>c&&(c=a);else if(7!==n)throw new Error(\"unknown command \"+n)}return[o,l,s,c]},ls.prototype.toGeoJSON=function(t,e,n){var r,i,a=this.extent*Math.pow(2,n),o=this.extent*t,s=this.extent*e,l=this.loadGeometry(),c=ls.types[this.type];function u(t){for(var e=0;e<t.length;e++){var n=t[e];t[e]=[360*(n.x+o)/a-180,360/Math.PI*Math.atan(Math.exp((180-360*(n.y+s)/a)*Math.PI/180))-90]}}switch(this.type){case 1:var h=[];for(r=0;r<l.length;r++)h[r]=l[r][0];u(l=h);break;case 2:for(r=0;r<l.length;r++)u(l[r]);break;case 3:for(l=function(t){var e=t.length;if(e<=1)return[t];for(var n,r,i=[],a=0;a<e;a++){var o=us(t[a]);0!==o&&(void 0===r&&(r=o<0),r===o<0?(n&&i.push(n),n=[t[a]]):n.push(t[a]))}return n&&i.push(n),i}(l),r=0;r<l.length;r++)for(i=0;i<l[r].length;i++)u(l[r][i])}1===l.length?l=l[0]:c=\"Multi\"+c;var d={type:\"Feature\",geometry:{type:c,coordinates:l},properties:this.properties};return\"id\"in this&&(d.id=this.id),d};var hs=ds;function ds(t,e){this.version=1,this.name=null,this.extent=4096,this.length=0,this._pbf=t,this._keys=[],this._values=[],this._features=[],t.readFields(fs,this,e),this.length=this._features.length}function fs(t,e,n){15===t?e.version=n.readVarint():1===t?e.name=n.readString():5===t?e.extent=n.readVarint():2===t?e._features.push(n.pos):3===t?e._keys.push(n.readString()):4===t&&e._values.push(function(t){for(var e=null,n=t.readVarint()+t.pos;t.pos<n;){var r=t.readVarint()>>3;e=1===r?t.readString():2===r?t.readFloat():3===r?t.readDouble():4===r?t.readVarint64():5===r?t.readVarint():6===r?t.readSVarint():7===r?t.readBoolean():null}return e}(n))}function ps(t,e,n){if(3===t){var r=new hs(n,n.readVarint()+n.pos);r.length&&(e[r.name]=r)}}ds.prototype.feature=function(t){if(t<0||t>=this._features.length)throw new Error(\"feature index out of bounds\");this._pbf.pos=this._features[t];var e=this._pbf.readVarint()+this._pbf.pos;return new ss(this._pbf,e,this.extent,this._keys,this._values)};var ms={VectorTile:function(t,e){this.layers=t.readFields(ps,{},e)},VectorTileFeature:ss,VectorTileLayer:hs},gs=ms.VectorTileFeature.types,ys=Math.pow(2,13);function vs(t,e,n,r,i,a,o,s){t.emplaceBack(e,n,2*Math.floor(r*ys)+o,i*ys*2,a*ys*2,Math.round(s))}var _s=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new Ai,this.indexArray=new ji,this.programConfigurations=new Oa(os,t.layers,t.zoom),this.segments=new ia,this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};function bs(t,e){return t.x===e.x&&(t.x<0||t.x>8192)||t.y===e.y&&(t.y<0||t.y>8192)}_s.prototype.populate=function(t,e,n){this.features=[],this.hasPattern=ts(\"fill-extrusion\",this.layers,e);for(var r=0,i=t;r<i.length;r+=1){var a=i[r],o=a.feature,s=a.id,l=a.index,c=a.sourceLayerIndex,u=this.layers[0]._featureFilter.needGeometry,h={type:o.type,id:s,properties:o.properties,geometry:u?Ra(o):[]};if(this.layers[0]._featureFilter.filter(new ii(this.zoom),h,n)){var d={id:s,sourceLayerIndex:c,index:l,geometry:u?h.geometry:Ra(o),properties:o.properties,type:o.type,patterns:{}};void 0!==o.id&&(d.id=o.id),this.hasPattern?this.features.push(es(\"fill-extrusion\",this.layers,d,this.zoom,e)):this.addFeature(d,d.geometry,l,n,{}),e.featureIndex.insert(o,d.geometry,l,c,this.index,!0)}}},_s.prototype.addFeatures=function(t,e,n){for(var r=0,i=this.features;r<i.length;r+=1){var a=i[r];this.addFeature(a,a.geometry,a.index,e,n)}},_s.prototype.update=function(t,e,n){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,n)},_s.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},_s.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},_s.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,os),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},_s.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},_s.prototype.addFeature=function(t,e,n,r,i){for(var a=0,o=$o(e,500);a<o.length;a+=1){for(var s=o[a],l=0,c=0,u=s;c<u.length;c+=1)l+=u[c].length;for(var h=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray),d=0,f=s;d<f.length;d+=1){var p=f[d];if(0!==p.length&&!((D=p).every((function(t){return t.x<0}))||D.every((function(t){return t.x>8192}))||D.every((function(t){return t.y<0}))||D.every((function(t){return t.y>8192}))))for(var m=0,g=0;g<p.length;g++){var y=p[g];if(g>=1){var v=p[g-1];if(!bs(y,v)){h.vertexLength+4>ia.MAX_VERTEX_ARRAY_LENGTH&&(h=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray));var _=y.sub(v)._perp()._unit(),b=v.dist(y);m+b>32768&&(m=0),vs(this.layoutVertexArray,y.x,y.y,_.x,_.y,0,0,m),vs(this.layoutVertexArray,y.x,y.y,_.x,_.y,0,1,m),vs(this.layoutVertexArray,v.x,v.y,_.x,_.y,0,0,m+=b),vs(this.layoutVertexArray,v.x,v.y,_.x,_.y,0,1,m);var x=h.vertexLength;this.indexArray.emplaceBack(x,x+2,x+1),this.indexArray.emplaceBack(x+1,x+2,x+3),h.vertexLength+=4,h.primitiveLength+=2}}}}if(h.vertexLength+l>ia.MAX_VERTEX_ARRAY_LENGTH&&(h=this.segments.prepareSegment(l,this.layoutVertexArray,this.indexArray)),\"Polygon\"===gs[t.type]){for(var w=[],k=[],M=h.vertexLength,T=0,S=s;T<S.length;T+=1){var A=S[T];if(0!==A.length){A!==s[0]&&k.push(w.length/2);for(var L=0;L<A.length;L++){var C=A[L];vs(this.layoutVertexArray,C.x,C.y,0,0,1,1,0),w.push(C.x),w.push(C.y)}}}for(var E=xo(w,k),O=0;O<E.length;O+=3)this.indexArray.emplaceBack(M+E[O],M+E[O+2],M+E[O+1]);h.primitiveLength+=E.length/3,h.vertexLength+=l}}var D;this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,n,i,r)},Rr(\"FillExtrusionBucket\",_s,{omit:[\"layers\",\"features\"]});var xs={paint:new vi({\"fill-extrusion-opacity\":new fi(St[\"paint_fill-extrusion\"][\"fill-extrusion-opacity\"]),\"fill-extrusion-color\":new pi(St[\"paint_fill-extrusion\"][\"fill-extrusion-color\"]),\"fill-extrusion-translate\":new fi(St[\"paint_fill-extrusion\"][\"fill-extrusion-translate\"]),\"fill-extrusion-translate-anchor\":new fi(St[\"paint_fill-extrusion\"][\"fill-extrusion-translate-anchor\"]),\"fill-extrusion-pattern\":new mi(St[\"paint_fill-extrusion\"][\"fill-extrusion-pattern\"]),\"fill-extrusion-height\":new pi(St[\"paint_fill-extrusion\"][\"fill-extrusion-height\"]),\"fill-extrusion-base\":new pi(St[\"paint_fill-extrusion\"][\"fill-extrusion-base\"]),\"fill-extrusion-vertical-gradient\":new fi(St[\"paint_fill-extrusion\"][\"fill-extrusion-vertical-gradient\"])})},ws=function(t){function e(e){t.call(this,e,xs)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.createBucket=function(t){return new _s(t)},e.prototype.queryRadius=function(){return Ja(this.paint.get(\"fill-extrusion-translate\"))},e.prototype.is3D=function(){return!0},e.prototype.queryIntersectsFeature=function(t,e,n,r,a,o,s,l){var c=Ka(t,this.paint.get(\"fill-extrusion-translate\"),this.paint.get(\"fill-extrusion-translate-anchor\"),o.angle,s),u=this.paint.get(\"fill-extrusion-height\").evaluate(e,n),h=this.paint.get(\"fill-extrusion-base\").evaluate(e,n),d=function(t,e,n,r){for(var a=[],o=0,s=t;o<s.length;o+=1){var l=s[o],c=[l.x,l.y,0,1];ao(c,c,e),a.push(new i(c[0]/c[3],c[1]/c[3]))}return a}(c,l),f=function(t,e,n,r){for(var a=[],o=[],s=r[8]*e,l=r[9]*e,c=r[10]*e,u=r[11]*e,h=r[8]*n,d=r[9]*n,f=r[10]*n,p=r[11]*n,m=0,g=t;m<g.length;m+=1){for(var y=[],v=[],_=0,b=g[m];_<b.length;_+=1){var x=b[_],w=x.x,k=x.y,M=r[0]*w+r[4]*k+r[12],T=r[1]*w+r[5]*k+r[13],S=r[2]*w+r[6]*k+r[14],A=r[3]*w+r[7]*k+r[15],L=S+c,C=A+u,E=M+h,O=T+d,D=S+f,I=A+p,P=new i((M+s)/C,(T+l)/C);P.z=L/C,y.push(P);var R=new i(E/I,O/I);R.z=D/I,v.push(R)}a.push(y),o.push(v)}return[a,o]}(r,h,u,l);return function(t,e,n){var r=1/0;Ba(n,e)&&(r=Ms(n,e[0]));for(var i=0;i<e.length;i++)for(var a=e[i],o=t[i],s=0;s<a.length-1;s++){var l=a[s],c=[l,a[s+1],o[s+1],o[s],l];Fa(n,c)&&(r=Math.min(r,Ms(n,c)))}return r!==1/0&&r}(f[0],f[1],d)},e}(_i);function ks(t,e){return t.x*e.x+t.y*e.y}function Ms(t,e){if(1===t.length){for(var n,r=0,i=e[r++];!n||i.equals(n);)if(!(n=e[r++]))return 1/0;for(;r<e.length;r++){var a=e[r],o=t[0],s=n.sub(i),l=a.sub(i),c=o.sub(i),u=ks(s,s),h=ks(s,l),d=ks(l,l),f=ks(c,s),p=ks(c,l),m=u*d-h*h,g=(d*f-h*p)/m,y=(u*p-h*f)/m,v=i.z*(1-g-y)+n.z*g+a.z*y;if(isFinite(v))return v}return 1/0}for(var _=1/0,b=0,x=e;b<x.length;b+=1)_=Math.min(_,x[b].z);return _}var Ts=ki([{name:\"a_pos_normal\",components:2,type:\"Int16\"},{name:\"a_data\",components:4,type:\"Uint8\"}],4).members,Ss=ms.VectorTileFeature.types,As=Math.cos(Math.PI/180*37.5),Ls=Math.pow(2,14)/.5,Cs=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.patternFeatures=[],this.layoutVertexArray=new Li,this.indexArray=new ji,this.programConfigurations=new Oa(Ts,t.layers,t.zoom),this.segments=new ia,this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};Cs.prototype.populate=function(t,e,n){this.hasPattern=ts(\"line\",this.layers,e);for(var r=this.layers[0].layout.get(\"line-sort-key\"),i=[],a=0,o=t;a<o.length;a+=1){var s=o[a],l=s.feature,c=s.id,u=s.index,h=s.sourceLayerIndex,d=this.layers[0]._featureFilter.needGeometry,f={type:l.type,id:c,properties:l.properties,geometry:d?Ra(l):[]};if(this.layers[0]._featureFilter.filter(new ii(this.zoom),f,n)){d||(f.geometry=Ra(l));var p=r?r.evaluate(f,{},n):void 0;i.push({id:c,properties:l.properties,type:l.type,sourceLayerIndex:h,index:u,geometry:f.geometry,patterns:{},sortKey:p})}}r&&i.sort((function(t,e){return t.sortKey-e.sortKey}));for(var m=0,g=i;m<g.length;m+=1){var y=g[m],v=y.geometry,_=y.index,b=y.sourceLayerIndex;if(this.hasPattern){var x=es(\"line\",this.layers,y,this.zoom,e);this.patternFeatures.push(x)}else this.addFeature(y,v,_,n,{});e.featureIndex.insert(t[_].feature,v,_,b,this.index)}},Cs.prototype.update=function(t,e,n){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,n)},Cs.prototype.addFeatures=function(t,e,n){for(var r=0,i=this.patternFeatures;r<i.length;r+=1){var a=i[r];this.addFeature(a,a.geometry,a.index,e,n)}},Cs.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},Cs.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},Cs.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Ts),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},Cs.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},Cs.prototype.addFeature=function(t,e,n,r,i){for(var a=this.layers[0].layout,o=a.get(\"line-join\").evaluate(t,{}),s=a.get(\"line-cap\"),l=a.get(\"line-miter-limit\"),c=a.get(\"line-round-limit\"),u=0,h=e;u<h.length;u+=1)this.addLine(h[u],t,o,s,l,c);this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,n,i,r)},Cs.prototype.addLine=function(t,e,n,r,i,a){if(this.distance=0,this.scaledDistance=0,this.totalDistance=0,e.properties&&e.properties.hasOwnProperty(\"mapbox_clip_start\")&&e.properties.hasOwnProperty(\"mapbox_clip_end\")){this.clipStart=+e.properties.mapbox_clip_start,this.clipEnd=+e.properties.mapbox_clip_end;for(var o=0;o<t.length-1;o++)this.totalDistance+=t[o].dist(t[o+1]);this.updateScaledDistance()}for(var s=\"Polygon\"===Ss[e.type],l=t.length;l>=2&&t[l-1].equals(t[l-2]);)l--;for(var c=0;c<l-1&&t[c].equals(t[c+1]);)c++;if(!(l<(s?3:2))){\"bevel\"===n&&(i=1.05);var u,h=this.overscaling<=16?122880/(512*this.overscaling):0,d=this.segments.prepareSegment(10*l,this.layoutVertexArray,this.indexArray),f=void 0,p=void 0,m=void 0,g=void 0;this.e1=this.e2=-1,s&&(g=t[c].sub(u=t[l-2])._unit()._perp());for(var y=c;y<l;y++)if(!(p=y===l-1?s?t[c+1]:void 0:t[y+1])||!t[y].equals(p)){g&&(m=g),u&&(f=u),u=t[y],g=p?p.sub(u)._unit()._perp():m;var v=(m=m||g).add(g);0===v.x&&0===v.y||v._unit();var _=m.x*g.x+m.y*g.y,b=v.x*g.x+v.y*g.y,x=0!==b?1/b:1/0,w=2*Math.sqrt(2-2*b),k=b<As&&f&&p,M=m.x*g.y-m.y*g.x>0;if(k&&y>c){var T=u.dist(f);if(T>2*h){var S=u.sub(u.sub(f)._mult(h/T)._round());this.updateDistance(f,S),this.addCurrentVertex(S,m,0,0,d),f=S}}var A=f&&p,L=A?n:s?\"butt\":r;if(A&&\"round\"===L&&(x<a?L=\"miter\":x<=2&&(L=\"fakeround\")),\"miter\"===L&&x>i&&(L=\"bevel\"),\"bevel\"===L&&(x>2&&(L=\"flipbevel\"),x<i&&(L=\"miter\")),f&&this.updateDistance(f,u),\"miter\"===L)v._mult(x),this.addCurrentVertex(u,v,0,0,d);else if(\"flipbevel\"===L){if(x>100)v=g.mult(-1);else{var C=x*m.add(g).mag()/m.sub(g).mag();v._perp()._mult(C*(M?-1:1))}this.addCurrentVertex(u,v,0,0,d),this.addCurrentVertex(u,v.mult(-1),0,0,d)}else if(\"bevel\"===L||\"fakeround\"===L){var E=-Math.sqrt(x*x-1),O=M?E:0,D=M?0:E;if(f&&this.addCurrentVertex(u,m,O,D,d),\"fakeround\"===L)for(var I=Math.round(180*w/Math.PI/20),P=1;P<I;P++){var R=P/I;if(.5!==R){var z=R-.5;R+=R*z*(R-1)*((1.0904+_*(_*(3.55645-1.43519*_)-3.2452))*z*z+(.848013+_*(.215638*_-1.06021)))}var j=g.sub(m)._mult(R)._add(m)._unit()._mult(M?-1:1);this.addHalfVertex(u,j.x,j.y,!1,M,0,d)}p&&this.addCurrentVertex(u,g,-O,-D,d)}else if(\"butt\"===L)this.addCurrentVertex(u,v,0,0,d);else if(\"square\"===L){var F=f?1:-1;this.addCurrentVertex(u,v,F,F,d)}else\"round\"===L&&(f&&(this.addCurrentVertex(u,m,0,0,d),this.addCurrentVertex(u,m,1,1,d,!0)),p&&(this.addCurrentVertex(u,g,-1,-1,d,!0),this.addCurrentVertex(u,g,0,0,d)));if(k&&y<l-1){var N=u.dist(p);if(N>2*h){var B=u.add(p.sub(u)._mult(h/N)._round());this.updateDistance(u,B),this.addCurrentVertex(B,g,0,0,d),u=B}}}}},Cs.prototype.addCurrentVertex=function(t,e,n,r,i,a){void 0===a&&(a=!1);var o=e.y*r-e.x,s=-e.y-e.x*r;this.addHalfVertex(t,e.x+e.y*n,e.y-e.x*n,a,!1,n,i),this.addHalfVertex(t,o,s,a,!0,-r,i),this.distance>Ls/2&&0===this.totalDistance&&(this.distance=0,this.addCurrentVertex(t,e,n,r,i,a))},Cs.prototype.addHalfVertex=function(t,e,n,r,i,a,o){var s=.5*this.scaledDistance;this.layoutVertexArray.emplaceBack((t.x<<1)+(r?1:0),(t.y<<1)+(i?1:0),Math.round(63*e)+128,Math.round(63*n)+128,1+(0===a?0:a<0?-1:1)|(63&s)<<2,s>>6);var l=o.vertexLength++;this.e1>=0&&this.e2>=0&&(this.indexArray.emplaceBack(this.e1,this.e2,l),o.primitiveLength++),i?this.e2=l:this.e1=l},Cs.prototype.updateScaledDistance=function(){this.scaledDistance=this.totalDistance>0?(this.clipStart+(this.clipEnd-this.clipStart)*this.distance/this.totalDistance)*(Ls-1):this.distance},Cs.prototype.updateDistance=function(t,e){this.distance+=t.dist(e),this.updateScaledDistance()},Rr(\"LineBucket\",Cs,{omit:[\"layers\",\"patternFeatures\"]});var Es=new vi({\"line-cap\":new fi(St.layout_line[\"line-cap\"]),\"line-join\":new pi(St.layout_line[\"line-join\"]),\"line-miter-limit\":new fi(St.layout_line[\"line-miter-limit\"]),\"line-round-limit\":new fi(St.layout_line[\"line-round-limit\"]),\"line-sort-key\":new pi(St.layout_line[\"line-sort-key\"])}),Os={paint:new vi({\"line-opacity\":new pi(St.paint_line[\"line-opacity\"]),\"line-color\":new pi(St.paint_line[\"line-color\"]),\"line-translate\":new fi(St.paint_line[\"line-translate\"]),\"line-translate-anchor\":new fi(St.paint_line[\"line-translate-anchor\"]),\"line-width\":new pi(St.paint_line[\"line-width\"]),\"line-gap-width\":new pi(St.paint_line[\"line-gap-width\"]),\"line-offset\":new pi(St.paint_line[\"line-offset\"]),\"line-blur\":new pi(St.paint_line[\"line-blur\"]),\"line-dasharray\":new gi(St.paint_line[\"line-dasharray\"]),\"line-pattern\":new mi(St.paint_line[\"line-pattern\"]),\"line-gradient\":new yi(St.paint_line[\"line-gradient\"])}),layout:Es},Ds=new(function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.possiblyEvaluate=function(e,n){return n=new ii(Math.floor(n.zoom),{now:n.now,fadeDuration:n.fadeDuration,zoomHistory:n.zoomHistory,transition:n.transition}),t.prototype.possiblyEvaluate.call(this,e,n)},e.prototype.evaluate=function(e,n,r,i){return n=u({},n,{zoom:Math.floor(n.zoom)}),t.prototype.evaluate.call(this,e,n,r,i)},e}(pi))(Os.paint.properties[\"line-width\"].specification);Ds.useIntegerZoom=!0;var Is=function(t){function e(e){t.call(this,e,Os)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._handleSpecialPaintPropertyUpdate=function(t){\"line-gradient\"===t&&this._updateGradient()},e.prototype._updateGradient=function(){this.gradient=go(this._transitionablePaint._values[\"line-gradient\"].value.expression,\"lineProgress\"),this.gradientTexture=null},e.prototype.recalculate=function(e,n){t.prototype.recalculate.call(this,e,n),this.paint._values[\"line-floorwidth\"]=Ds.possiblyEvaluate(this._transitioningPaint._values[\"line-width\"].value,e)},e.prototype.createBucket=function(t){return new Cs(t)},e.prototype.queryRadius=function(t){var e=t,n=Ps(Za(\"line-width\",this,e),Za(\"line-gap-width\",this,e)),r=Za(\"line-offset\",this,e);return n/2+Math.abs(r)+Ja(this.paint.get(\"line-translate\"))},e.prototype.queryIntersectsFeature=function(t,e,n,r,a,o,s){var l=Ka(t,this.paint.get(\"line-translate\"),this.paint.get(\"line-translate-anchor\"),o.angle,s),c=s/2*Ps(this.paint.get(\"line-width\").evaluate(e,n),this.paint.get(\"line-gap-width\").evaluate(e,n)),u=this.paint.get(\"line-offset\").evaluate(e,n);return u&&(r=function(t,e){for(var n=[],r=new i(0,0),a=0;a<t.length;a++){for(var o=t[a],s=[],l=0;l<o.length;l++){var c=o[l],u=o[l+1],h=0===l?r:c.sub(o[l-1])._unit()._perp(),d=l===o.length-1?r:u.sub(c)._unit()._perp(),f=h._add(d)._unit();f._mult(1/(f.x*d.x+f.y*d.y)),s.push(f._mult(e)._add(c))}n.push(s)}return n}(r,u*s)),function(t,e,n){for(var r=0;r<e.length;r++){var i=e[r];if(t.length>=3)for(var a=0;a<i.length;a++)if(Ga(t,i[a]))return!0;if(Ya(t,i,n))return!0}return!1}(l,r,c)},e.prototype.isTileClipped=function(){return!0},e}(_i);function Ps(t,e){return e>0?e+2*t:t}var Rs=ki([{name:\"a_pos_offset\",components:4,type:\"Int16\"},{name:\"a_data\",components:4,type:\"Uint16\"},{name:\"a_pixeloffset\",components:4,type:\"Int16\"}],4),zs=ki([{name:\"a_projected_pos\",components:3,type:\"Float32\"}],4),js=(ki([{name:\"a_fade_opacity\",components:1,type:\"Uint32\"}],4),ki([{name:\"a_placed\",components:2,type:\"Uint8\"},{name:\"a_shift\",components:2,type:\"Float32\"}])),Fs=(ki([{type:\"Int16\",name:\"anchorPointX\"},{type:\"Int16\",name:\"anchorPointY\"},{type:\"Int16\",name:\"x1\"},{type:\"Int16\",name:\"y1\"},{type:\"Int16\",name:\"x2\"},{type:\"Int16\",name:\"y2\"},{type:\"Uint32\",name:\"featureIndex\"},{type:\"Uint16\",name:\"sourceLayerIndex\"},{type:\"Uint16\",name:\"bucketIndex\"}]),ki([{name:\"a_pos\",components:2,type:\"Int16\"},{name:\"a_anchor_pos\",components:2,type:\"Int16\"},{name:\"a_extrude\",components:2,type:\"Int16\"}],4)),Ns=ki([{name:\"a_pos\",components:2,type:\"Float32\"},{name:\"a_radius\",components:1,type:\"Float32\"},{name:\"a_flags\",components:2,type:\"Int16\"}],4);function Bs(t,e,n){return t.sections.forEach((function(t){t.text=function(t,e,n){var r=e.layout.get(\"text-transform\").evaluate(n,{});return\"uppercase\"===r?t=t.toLocaleUpperCase():\"lowercase\"===r&&(t=t.toLocaleLowerCase()),ri.applyArabicShaping&&(t=ri.applyArabicShaping(t)),t}(t.text,e,n)})),t}ki([{name:\"triangle\",components:3,type:\"Uint16\"}]),ki([{type:\"Int16\",name:\"anchorX\"},{type:\"Int16\",name:\"anchorY\"},{type:\"Uint16\",name:\"glyphStartIndex\"},{type:\"Uint16\",name:\"numGlyphs\"},{type:\"Uint32\",name:\"vertexStartIndex\"},{type:\"Uint32\",name:\"lineStartIndex\"},{type:\"Uint32\",name:\"lineLength\"},{type:\"Uint16\",name:\"segment\"},{type:\"Uint16\",name:\"lowerSize\"},{type:\"Uint16\",name:\"upperSize\"},{type:\"Float32\",name:\"lineOffsetX\"},{type:\"Float32\",name:\"lineOffsetY\"},{type:\"Uint8\",name:\"writingMode\"},{type:\"Uint8\",name:\"placedOrientation\"},{type:\"Uint8\",name:\"hidden\"},{type:\"Uint32\",name:\"crossTileID\"},{type:\"Int16\",name:\"associatedIconIndex\"}]),ki([{type:\"Int16\",name:\"anchorX\"},{type:\"Int16\",name:\"anchorY\"},{type:\"Int16\",name:\"rightJustifiedTextSymbolIndex\"},{type:\"Int16\",name:\"centerJustifiedTextSymbolIndex\"},{type:\"Int16\",name:\"leftJustifiedTextSymbolIndex\"},{type:\"Int16\",name:\"verticalPlacedTextSymbolIndex\"},{type:\"Int16\",name:\"placedIconSymbolIndex\"},{type:\"Int16\",name:\"verticalPlacedIconSymbolIndex\"},{type:\"Uint16\",name:\"key\"},{type:\"Uint16\",name:\"textBoxStartIndex\"},{type:\"Uint16\",name:\"textBoxEndIndex\"},{type:\"Uint16\",name:\"verticalTextBoxStartIndex\"},{type:\"Uint16\",name:\"verticalTextBoxEndIndex\"},{type:\"Uint16\",name:\"iconBoxStartIndex\"},{type:\"Uint16\",name:\"iconBoxEndIndex\"},{type:\"Uint16\",name:\"verticalIconBoxStartIndex\"},{type:\"Uint16\",name:\"verticalIconBoxEndIndex\"},{type:\"Uint16\",name:\"featureIndex\"},{type:\"Uint16\",name:\"numHorizontalGlyphVertices\"},{type:\"Uint16\",name:\"numVerticalGlyphVertices\"},{type:\"Uint16\",name:\"numIconVertices\"},{type:\"Uint16\",name:\"numVerticalIconVertices\"},{type:\"Uint16\",name:\"useRuntimeCollisionCircles\"},{type:\"Uint32\",name:\"crossTileID\"},{type:\"Float32\",name:\"textBoxScale\"},{type:\"Float32\",components:2,name:\"textOffset\"},{type:\"Float32\",name:\"collisionCircleDiameter\"}]),ki([{type:\"Float32\",name:\"offsetX\"}]),ki([{type:\"Int16\",name:\"x\"},{type:\"Int16\",name:\"y\"},{type:\"Int16\",name:\"tileUnitDistanceFromAnchor\"}]);var Ys={\"!\":\"\\ufe15\",\"#\":\"\\uff03\",$:\"\\uff04\",\"%\":\"\\uff05\",\"&\":\"\\uff06\",\"(\":\"\\ufe35\",\")\":\"\\ufe36\",\"*\":\"\\uff0a\",\"+\":\"\\uff0b\",\",\":\"\\ufe10\",\"-\":\"\\ufe32\",\".\":\"\\u30fb\",\"/\":\"\\uff0f\",\":\":\"\\ufe13\",\";\":\"\\ufe14\",\"<\":\"\\ufe3f\",\"=\":\"\\uff1d\",\">\":\"\\ufe40\",\"?\":\"\\ufe16\",\"@\":\"\\uff20\",\"[\":\"\\ufe47\",\"\\\\\":\"\\uff3c\",\"]\":\"\\ufe48\",\"^\":\"\\uff3e\",_:\"\\ufe33\",\"`\":\"\\uff40\",\"{\":\"\\ufe37\",\"|\":\"\\u2015\",\"}\":\"\\ufe38\",\"~\":\"\\uff5e\",\"\\xa2\":\"\\uffe0\",\"\\xa3\":\"\\uffe1\",\"\\xa5\":\"\\uffe5\",\"\\xa6\":\"\\uffe4\",\"\\xac\":\"\\uffe2\",\"\\xaf\":\"\\uffe3\",\"\\u2013\":\"\\ufe32\",\"\\u2014\":\"\\ufe31\",\"\\u2018\":\"\\ufe43\",\"\\u2019\":\"\\ufe44\",\"\\u201c\":\"\\ufe41\",\"\\u201d\":\"\\ufe42\",\"\\u2026\":\"\\ufe19\",\"\\u2027\":\"\\u30fb\",\"\\u20a9\":\"\\uffe6\",\"\\u3001\":\"\\ufe11\",\"\\u3002\":\"\\ufe12\",\"\\u3008\":\"\\ufe3f\",\"\\u3009\":\"\\ufe40\",\"\\u300a\":\"\\ufe3d\",\"\\u300b\":\"\\ufe3e\",\"\\u300c\":\"\\ufe41\",\"\\u300d\":\"\\ufe42\",\"\\u300e\":\"\\ufe43\",\"\\u300f\":\"\\ufe44\",\"\\u3010\":\"\\ufe3b\",\"\\u3011\":\"\\ufe3c\",\"\\u3014\":\"\\ufe39\",\"\\u3015\":\"\\ufe3a\",\"\\u3016\":\"\\ufe17\",\"\\u3017\":\"\\ufe18\",\"\\uff01\":\"\\ufe15\",\"\\uff08\":\"\\ufe35\",\"\\uff09\":\"\\ufe36\",\"\\uff0c\":\"\\ufe10\",\"\\uff0d\":\"\\ufe32\",\"\\uff0e\":\"\\u30fb\",\"\\uff1a\":\"\\ufe13\",\"\\uff1b\":\"\\ufe14\",\"\\uff1c\":\"\\ufe3f\",\"\\uff1e\":\"\\ufe40\",\"\\uff1f\":\"\\ufe16\",\"\\uff3b\":\"\\ufe47\",\"\\uff3d\":\"\\ufe48\",\"\\uff3f\":\"\\ufe33\",\"\\uff5b\":\"\\ufe37\",\"\\uff5c\":\"\\u2015\",\"\\uff5d\":\"\\ufe38\",\"\\uff5f\":\"\\ufe35\",\"\\uff60\":\"\\ufe36\",\"\\uff61\":\"\\ufe12\",\"\\uff62\":\"\\ufe41\",\"\\uff63\":\"\\ufe42\"},Hs=function(t,e,n,r,i){var a,o,s=8*i-r-1,l=(1<<s)-1,c=l>>1,u=-7,h=n?i-1:0,d=n?-1:1,f=t[e+h];for(h+=d,a=f&(1<<-u)-1,f>>=-u,u+=s;u>0;a=256*a+t[e+h],h+=d,u-=8);for(o=a&(1<<-u)-1,a>>=-u,u+=r;u>0;o=256*o+t[e+h],h+=d,u-=8);if(0===a)a=1-c;else{if(a===l)return o?NaN:1/0*(f?-1:1);o+=Math.pow(2,r),a-=c}return(f?-1:1)*o*Math.pow(2,a-r)},Vs=function(t,e,n,r,i,a){var o,s,l,c=8*a-i-1,u=(1<<c)-1,h=u>>1,d=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,f=r?0:a-1,p=r?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=u):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+h>=1?d/l:d*Math.pow(2,1-h))*l>=2&&(o++,l/=2),o+h>=u?(s=0,o=u):o+h>=1?(s=(e*l-1)*Math.pow(2,i),o+=h):(s=e*Math.pow(2,h-1)*Math.pow(2,i),o=0));i>=8;t[n+f]=255&s,f+=p,s/=256,i-=8);for(o=o<<i|s,c+=i;c>0;t[n+f]=255&o,f+=p,o/=256,c-=8);t[n+f-p]|=128*m},Us=Ws;function Ws(t){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.pos=0,this.type=0,this.length=this.buf.length}Ws.Varint=0,Ws.Fixed64=1,Ws.Bytes=2,Ws.Fixed32=5;var qs=\"undefined\"==typeof TextDecoder?null:new TextDecoder(\"utf8\");function Gs(t){return t.type===Ws.Bytes?t.readVarint()+t.pos:t.pos+1}function Xs(t,e,n){return n?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}function Zs(t,e,n){var r=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(7*Math.LN2));n.realloc(r);for(var i=n.pos-1;i>=t;i--)n.buf[i+r]=n.buf[i]}function Js(t,e){for(var n=0;n<t.length;n++)e.writeVarint(t[n])}function Ks(t,e){for(var n=0;n<t.length;n++)e.writeSVarint(t[n])}function $s(t,e){for(var n=0;n<t.length;n++)e.writeFloat(t[n])}function Qs(t,e){for(var n=0;n<t.length;n++)e.writeDouble(t[n])}function tl(t,e){for(var n=0;n<t.length;n++)e.writeBoolean(t[n])}function el(t,e){for(var n=0;n<t.length;n++)e.writeFixed32(t[n])}function nl(t,e){for(var n=0;n<t.length;n++)e.writeSFixed32(t[n])}function rl(t,e){for(var n=0;n<t.length;n++)e.writeFixed64(t[n])}function il(t,e){for(var n=0;n<t.length;n++)e.writeSFixed64(t[n])}function al(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+16777216*t[e+3]}function ol(t,e,n){t[n]=e,t[n+1]=e>>>8,t[n+2]=e>>>16,t[n+3]=e>>>24}function sl(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+(t[e+3]<<24)}function ll(t,e,n){1===t&&n.readMessage(cl,e)}function cl(t,e,n){if(3===t){var r=n.readMessage(ul,{}),i=r.width,a=r.height,o=r.left,s=r.top,l=r.advance;e.push({id:r.id,bitmap:new fo({width:i+6,height:a+6},r.bitmap),metrics:{width:i,height:a,left:o,top:s,advance:l}})}}function ul(t,e,n){1===t?e.id=n.readVarint():2===t?e.bitmap=n.readBytes():3===t?e.width=n.readVarint():4===t?e.height=n.readVarint():5===t?e.left=n.readSVarint():6===t?e.top=n.readSVarint():7===t&&(e.advance=n.readVarint())}function hl(t){for(var e=0,n=0,r=0,i=t;r<i.length;r+=1){var a=i[r];e+=a.w*a.h,n=Math.max(n,a.w)}t.sort((function(t,e){return e.h-t.h}));for(var o=[{x:0,y:0,w:Math.max(Math.ceil(Math.sqrt(e/.95)),n),h:1/0}],s=0,l=0,c=0,u=t;c<u.length;c+=1)for(var h=u[c],d=o.length-1;d>=0;d--){var f=o[d];if(!(h.w>f.w||h.h>f.h)){if(h.x=f.x,h.y=f.y,l=Math.max(l,h.y+h.h),s=Math.max(s,h.x+h.w),h.w===f.w&&h.h===f.h){var p=o.pop();d<o.length&&(o[d]=p)}else h.h===f.h?(f.x+=h.w,f.w-=h.w):h.w===f.w?(f.y+=h.h,f.h-=h.h):(o.push({x:f.x+h.w,y:f.y,w:f.w-h.w,h:h.h}),f.y+=h.h,f.h-=h.h);break}}return{w:s,h:l,fill:e/(s*l)||0}}Ws.prototype={destroy:function(){this.buf=null},readFields:function(t,e,n){for(n=n||this.length;this.pos<n;){var r=this.readVarint(),i=r>>3,a=this.pos;this.type=7&r,t(i,e,this),this.pos===a&&this.skip(r)}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=al(this.buf,this.pos);return this.pos+=4,t},readSFixed32:function(){var t=sl(this.buf,this.pos);return this.pos+=4,t},readFixed64:function(){var t=al(this.buf,this.pos)+4294967296*al(this.buf,this.pos+4);return this.pos+=8,t},readSFixed64:function(){var t=al(this.buf,this.pos)+4294967296*sl(this.buf,this.pos+4);return this.pos+=8,t},readFloat:function(){var t=Hs(this.buf,this.pos,!0,23,4);return this.pos+=4,t},readDouble:function(){var t=Hs(this.buf,this.pos,!0,52,8);return this.pos+=8,t},readVarint:function(t){var e,n,r=this.buf;return e=127&(n=r[this.pos++]),n<128?e:(e|=(127&(n=r[this.pos++]))<<7,n<128?e:(e|=(127&(n=r[this.pos++]))<<14,n<128?e:(e|=(127&(n=r[this.pos++]))<<21,n<128?e:function(t,e,n){var r,i,a=n.buf;if(r=(112&(i=a[n.pos++]))>>4,i<128)return Xs(t,r,e);if(r|=(127&(i=a[n.pos++]))<<3,i<128)return Xs(t,r,e);if(r|=(127&(i=a[n.pos++]))<<10,i<128)return Xs(t,r,e);if(r|=(127&(i=a[n.pos++]))<<17,i<128)return Xs(t,r,e);if(r|=(127&(i=a[n.pos++]))<<24,i<128)return Xs(t,r,e);if(r|=(1&(i=a[n.pos++]))<<31,i<128)return Xs(t,r,e);throw new Error(\"Expected varint not more than 10 bytes\")}(e|=(15&(n=r[this.pos]))<<28,t,this))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=this.pos;return this.pos=t,t-e>=12&&qs?function(t,e,n){return qs.decode(t.subarray(e,n))}(this.buf,e,t):function(t,e,n){for(var r=\"\",i=e;i<n;){var a,o,s,l=t[i],c=null,u=l>239?4:l>223?3:l>191?2:1;if(i+u>n)break;1===u?l<128&&(c=l):2===u?128==(192&(a=t[i+1]))&&(c=(31&l)<<6|63&a)<=127&&(c=null):3===u?(o=t[i+2],128==(192&(a=t[i+1]))&&128==(192&o)&&((c=(15&l)<<12|(63&a)<<6|63&o)<=2047||c>=55296&&c<=57343)&&(c=null)):4===u&&(o=t[i+2],s=t[i+3],128==(192&(a=t[i+1]))&&128==(192&o)&&128==(192&s)&&((c=(15&l)<<18|(63&a)<<12|(63&o)<<6|63&s)<=65535||c>=1114112)&&(c=null)),null===c?(c=65533,u=1):c>65535&&(c-=65536,r+=String.fromCharCode(c>>>10&1023|55296),c=56320|1023&c),r+=String.fromCharCode(c),i+=u}return r}(this.buf,e,t)},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e},readPackedVarint:function(t,e){if(this.type!==Ws.Bytes)return t.push(this.readVarint(e));var n=Gs(this);for(t=t||[];this.pos<n;)t.push(this.readVarint(e));return t},readPackedSVarint:function(t){if(this.type!==Ws.Bytes)return t.push(this.readSVarint());var e=Gs(this);for(t=t||[];this.pos<e;)t.push(this.readSVarint());return t},readPackedBoolean:function(t){if(this.type!==Ws.Bytes)return t.push(this.readBoolean());var e=Gs(this);for(t=t||[];this.pos<e;)t.push(this.readBoolean());return t},readPackedFloat:function(t){if(this.type!==Ws.Bytes)return t.push(this.readFloat());var e=Gs(this);for(t=t||[];this.pos<e;)t.push(this.readFloat());return t},readPackedDouble:function(t){if(this.type!==Ws.Bytes)return t.push(this.readDouble());var e=Gs(this);for(t=t||[];this.pos<e;)t.push(this.readDouble());return t},readPackedFixed32:function(t){if(this.type!==Ws.Bytes)return t.push(this.readFixed32());var e=Gs(this);for(t=t||[];this.pos<e;)t.push(this.readFixed32());return t},readPackedSFixed32:function(t){if(this.type!==Ws.Bytes)return t.push(this.readSFixed32());var e=Gs(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed32());return t},readPackedFixed64:function(t){if(this.type!==Ws.Bytes)return t.push(this.readFixed64());var e=Gs(this);for(t=t||[];this.pos<e;)t.push(this.readFixed64());return t},readPackedSFixed64:function(t){if(this.type!==Ws.Bytes)return t.push(this.readSFixed64());var e=Gs(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed64());return t},skip:function(t){var e=7&t;if(e===Ws.Varint)for(;this.buf[this.pos++]>127;);else if(e===Ws.Bytes)this.pos=this.readVarint()+this.pos;else if(e===Ws.Fixed32)this.pos+=4;else{if(e!==Ws.Fixed64)throw new Error(\"Unimplemented type: \"+e);this.pos+=8}},writeTag:function(t,e){this.writeVarint(t<<3|e)},realloc:function(t){for(var e=this.length||16;e<this.pos+t;)e*=2;if(e!==this.length){var n=new Uint8Array(e);n.set(this.buf),this.buf=n,this.length=e}},finish:function(){return this.length=this.pos,this.pos=0,this.buf.subarray(0,this.length)},writeFixed32:function(t){this.realloc(4),ol(this.buf,t,this.pos),this.pos+=4},writeSFixed32:function(t){this.realloc(4),ol(this.buf,t,this.pos),this.pos+=4},writeFixed64:function(t){this.realloc(8),ol(this.buf,-1&t,this.pos),ol(this.buf,Math.floor(t*(1/4294967296)),this.pos+4),this.pos+=8},writeSFixed64:function(t){this.realloc(8),ol(this.buf,-1&t,this.pos),ol(this.buf,Math.floor(t*(1/4294967296)),this.pos+4),this.pos+=8},writeVarint:function(t){(t=+t||0)>268435455||t<0?function(t,e){var n,r;if(t>=0?(n=t%4294967296|0,r=t/4294967296|0):(r=~(-t/4294967296),4294967295^(n=~(-t%4294967296))?n=n+1|0:(n=0,r=r+1|0)),t>=0x10000000000000000||t<-0x10000000000000000)throw new Error(\"Given varint doesn't fit into 10 bytes\");e.realloc(10),function(t,e,n){n.buf[n.pos++]=127&t|128,t>>>=7,n.buf[n.pos++]=127&t|128,t>>>=7,n.buf[n.pos++]=127&t|128,t>>>=7,n.buf[n.pos++]=127&t|128,n.buf[n.pos]=127&(t>>>=7)}(n,0,e),function(t,e){var n=(7&t)<<4;e.buf[e.pos++]|=n|((t>>>=3)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t)))))}(r,e)}(t,this):(this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127))))},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t)},writeBoolean:function(t){this.writeVarint(Boolean(t))},writeString:function(t){t=String(t),this.realloc(4*t.length),this.pos++;var e=this.pos;this.pos=function(t,e,n){for(var r,i,a=0;a<e.length;a++){if((r=e.charCodeAt(a))>55295&&r<57344){if(!i){r>56319||a+1===e.length?(t[n++]=239,t[n++]=191,t[n++]=189):i=r;continue}if(r<56320){t[n++]=239,t[n++]=191,t[n++]=189,i=r;continue}r=i-55296<<10|r-56320|65536,i=null}else i&&(t[n++]=239,t[n++]=191,t[n++]=189,i=null);r<128?t[n++]=r:(r<2048?t[n++]=r>>6|192:(r<65536?t[n++]=r>>12|224:(t[n++]=r>>18|240,t[n++]=r>>12&63|128),t[n++]=r>>6&63|128),t[n++]=63&r|128)}return n}(this.buf,t,this.pos);var n=this.pos-e;n>=128&&Zs(e,n,this),this.pos=e-1,this.writeVarint(n),this.pos+=n},writeFloat:function(t){this.realloc(4),Vs(this.buf,t,this.pos,!0,23,4),this.pos+=4},writeDouble:function(t){this.realloc(8),Vs(this.buf,t,this.pos,!0,52,8),this.pos+=8},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var n=0;n<e;n++)this.buf[this.pos++]=t[n]},writeRawMessage:function(t,e){this.pos++;var n=this.pos;t(e,this);var r=this.pos-n;r>=128&&Zs(n,r,this),this.pos=n-1,this.writeVarint(r),this.pos+=r},writeMessage:function(t,e,n){this.writeTag(t,Ws.Bytes),this.writeRawMessage(e,n)},writePackedVarint:function(t,e){e.length&&this.writeMessage(t,Js,e)},writePackedSVarint:function(t,e){e.length&&this.writeMessage(t,Ks,e)},writePackedBoolean:function(t,e){e.length&&this.writeMessage(t,tl,e)},writePackedFloat:function(t,e){e.length&&this.writeMessage(t,$s,e)},writePackedDouble:function(t,e){e.length&&this.writeMessage(t,Qs,e)},writePackedFixed32:function(t,e){e.length&&this.writeMessage(t,el,e)},writePackedSFixed32:function(t,e){e.length&&this.writeMessage(t,nl,e)},writePackedFixed64:function(t,e){e.length&&this.writeMessage(t,rl,e)},writePackedSFixed64:function(t,e){e.length&&this.writeMessage(t,il,e)},writeBytesField:function(t,e){this.writeTag(t,Ws.Bytes),this.writeBytes(e)},writeFixed32Field:function(t,e){this.writeTag(t,Ws.Fixed32),this.writeFixed32(e)},writeSFixed32Field:function(t,e){this.writeTag(t,Ws.Fixed32),this.writeSFixed32(e)},writeFixed64Field:function(t,e){this.writeTag(t,Ws.Fixed64),this.writeFixed64(e)},writeSFixed64Field:function(t,e){this.writeTag(t,Ws.Fixed64),this.writeSFixed64(e)},writeVarintField:function(t,e){this.writeTag(t,Ws.Varint),this.writeVarint(e)},writeSVarintField:function(t,e){this.writeTag(t,Ws.Varint),this.writeSVarint(e)},writeStringField:function(t,e){this.writeTag(t,Ws.Bytes),this.writeString(e)},writeFloatField:function(t,e){this.writeTag(t,Ws.Fixed32),this.writeFloat(e)},writeDoubleField:function(t,e){this.writeTag(t,Ws.Fixed64),this.writeDouble(e)},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e))}};var dl=function(t,e){var n=e.pixelRatio,r=e.version,i=e.stretchX,a=e.stretchY,o=e.content;this.paddedRect=t,this.pixelRatio=n,this.stretchX=i,this.stretchY=a,this.content=o,this.version=r},fl={tl:{configurable:!0},br:{configurable:!0},tlbr:{configurable:!0},displaySize:{configurable:!0}};fl.tl.get=function(){return[this.paddedRect.x+1,this.paddedRect.y+1]},fl.br.get=function(){return[this.paddedRect.x+this.paddedRect.w-1,this.paddedRect.y+this.paddedRect.h-1]},fl.tlbr.get=function(){return this.tl.concat(this.br)},fl.displaySize.get=function(){return[(this.paddedRect.w-2)/this.pixelRatio,(this.paddedRect.h-2)/this.pixelRatio]},Object.defineProperties(dl.prototype,fl);var pl=function(t,e){var n={},r={};this.haveRenderCallbacks=[];var i=[];this.addImages(t,n,i),this.addImages(e,r,i);var a=hl(i),o=new po({width:a.w||1,height:a.h||1});for(var s in t){var l=t[s],c=n[s].paddedRect;po.copy(l.data,o,{x:0,y:0},{x:c.x+1,y:c.y+1},l.data)}for(var u in e){var h=e[u],d=r[u].paddedRect,f=d.x+1,p=d.y+1,m=h.data.width,g=h.data.height;po.copy(h.data,o,{x:0,y:0},{x:f,y:p},h.data),po.copy(h.data,o,{x:0,y:g-1},{x:f,y:p-1},{width:m,height:1}),po.copy(h.data,o,{x:0,y:0},{x:f,y:p+g},{width:m,height:1}),po.copy(h.data,o,{x:m-1,y:0},{x:f-1,y:p},{width:1,height:g}),po.copy(h.data,o,{x:0,y:0},{x:f+m,y:p},{width:1,height:g})}this.image=o,this.iconPositions=n,this.patternPositions=r};pl.prototype.addImages=function(t,e,n){for(var r in t){var i=t[r],a={x:0,y:0,w:i.data.width+2,h:i.data.height+2};n.push(a),e[r]=new dl(a,i),i.hasRenderCallback&&this.haveRenderCallbacks.push(r)}},pl.prototype.patchUpdatedImages=function(t,e){for(var n in t.dispatchRenderCallbacks(this.haveRenderCallbacks),t.updatedImages)this.patchUpdatedImage(this.iconPositions[n],t.getImage(n),e),this.patchUpdatedImage(this.patternPositions[n],t.getImage(n),e)},pl.prototype.patchUpdatedImage=function(t,e,n){if(t&&e&&t.version!==e.version){t.version=e.version;var r=t.tl;n.update(e.data,void 0,{x:r[0],y:r[1]})}},Rr(\"ImagePosition\",dl),Rr(\"ImageAtlas\",pl);var ml={horizontal:1,vertical:2,horizontalOnly:3},gl=function(){this.scale=1,this.fontStack=\"\",this.imageName=null};gl.forText=function(t,e){var n=new gl;return n.scale=t||1,n.fontStack=e,n},gl.forImage=function(t){var e=new gl;return e.imageName=t,e};var yl=function(){this.text=\"\",this.sectionIndex=[],this.sections=[],this.imageSectionID=null};function vl(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m){var g,y=yl.fromFeature(t,i);h===ml.vertical&&y.verticalizePunctuation();var v=ri.processBidirectionalText,_=ri.processStyledBidirectionalText;if(v&&1===y.sections.length){g=[];for(var b=0,x=v(y.toString(),Tl(y,c,a,e,r,f,p));b<x.length;b+=1){var w=x[b],k=new yl;k.text=w,k.sections=y.sections;for(var M=0;M<w.length;M++)k.sectionIndex.push(0);g.push(k)}}else if(_){g=[];for(var T=0,S=_(y.text,y.sectionIndex,Tl(y,c,a,e,r,f,p));T<S.length;T+=1){var A=S[T],L=new yl;L.text=A[0],L.sectionIndex=A[1],L.sections=y.sections,g.push(L)}}else g=function(t,e){for(var n=[],r=t.text,i=0,a=0,o=e;a<o.length;a+=1){var s=o[a];n.push(t.substring(i,s)),i=s}return i<r.length&&n.push(t.substring(i,r.length)),n}(y,Tl(y,c,a,e,r,f,p));var C=[],E={positionedLines:C,text:y.toString(),top:u[1],bottom:u[1],left:u[0],right:u[0],writingMode:h,iconsInText:!1,verticalizable:!1};return function(t,e,n,r,i,a,o,s,l,c,u,h){for(var d=0,f=-17,p=0,m=0,g=\"right\"===s?1:\"left\"===s?0:.5,y=0,v=0,_=i;v<_.length;v+=1){var b=_[v];b.trim();var x=b.getMaxScale(),w=24*(x-1),k={positionedGlyphs:[],lineOffset:0};t.positionedLines[y]=k;var M=k.positionedGlyphs,T=0;if(b.length()){for(var S=0;S<b.length();S++){var A=b.getSection(S),L=b.getSectionIndex(S),C=b.getCharCode(S),E=0,O=null,D=null,I=null,P=24,R=!(l===ml.horizontal||!u&&!Ur(C)||u&&(_l[C]||(U=C,Hr.Arabic(U)||Hr[\"Arabic Supplement\"](U)||Hr[\"Arabic Extended-A\"](U)||Hr[\"Arabic Presentation Forms-A\"](U)||Hr[\"Arabic Presentation Forms-B\"](U))));if(A.imageName){var z=r[A.imageName];if(!z)continue;I=A.imageName,t.iconsInText=t.iconsInText||!0,D=z.paddedRect;var j=z.displaySize;A.scale=24*A.scale/h,E=w+(24-j[1]*A.scale),P=(O={width:j[0],height:j[1],left:1,top:-3,advance:R?j[1]:j[0]}).advance;var F=R?j[0]*A.scale-24*x:j[1]*A.scale-24*x;F>0&&F>T&&(T=F)}else{var N=n[A.fontStack],B=N&&N[C];if(B&&B.rect)D=B.rect,O=B.metrics;else{var Y=e[A.fontStack],H=Y&&Y[C];if(!H)continue;O=H.metrics}E=24*(x-A.scale)}R?(t.verticalizable=!0,M.push({glyph:C,imageName:I,x:d,y:f+E,vertical:R,scale:A.scale,fontStack:A.fontStack,sectionIndex:L,metrics:O,rect:D}),d+=P*A.scale+c):(M.push({glyph:C,imageName:I,x:d,y:f+E,vertical:R,scale:A.scale,fontStack:A.fontStack,sectionIndex:L,metrics:O,rect:D}),d+=O.advance*A.scale+c)}0!==M.length&&(p=Math.max(d-c,p),Al(M,0,M.length-1,g,T)),d=0;var V=a*x+T;k.lineOffset=Math.max(T,w),f+=V,m=Math.max(V,m),++y}else f+=a,++y}var U,W=f- -17,q=Sl(o),G=q.horizontalAlign,X=q.verticalAlign;(function(t,e,n,r,i,a,o,s,l){var c,u=(e-n)*i;c=a!==o?-s*r- -17:(-r*l+.5)*o;for(var h=0,d=t;h<d.length;h+=1)for(var f=0,p=d[h].positionedGlyphs;f<p.length;f+=1){var m=p[f];m.x+=u,m.y+=c}})(t.positionedLines,g,G,X,p,m,a,W,i.length),t.top+=-X*W,t.bottom=t.top+W,t.left+=-G*p,t.right=t.left+p}(E,e,n,r,g,o,s,l,h,c,d,m),!function(t){for(var e=0,n=t;e<n.length;e+=1)if(0!==n[e].positionedGlyphs.length)return!1;return!0}(C)&&E}yl.fromFeature=function(t,e){for(var n=new yl,r=0;r<t.sections.length;r++){var i=t.sections[r];i.image?n.addImageSection(i):n.addTextSection(i,e)}return n},yl.prototype.length=function(){return this.text.length},yl.prototype.getSection=function(t){return this.sections[this.sectionIndex[t]]},yl.prototype.getSectionIndex=function(t){return this.sectionIndex[t]},yl.prototype.getCharCode=function(t){return this.text.charCodeAt(t)},yl.prototype.verticalizePunctuation=function(){this.text=function(t){for(var e=\"\",n=0;n<t.length;n++){var r=t.charCodeAt(n+1)||null,i=t.charCodeAt(n-1)||null;e+=r&&Wr(r)&&!Ys[t[n+1]]||i&&Wr(i)&&!Ys[t[n-1]]||!Ys[t[n]]?t[n]:Ys[t[n]]}return e}(this.text)},yl.prototype.trim=function(){for(var t=0,e=0;e<this.text.length&&_l[this.text.charCodeAt(e)];e++)t++;for(var n=this.text.length,r=this.text.length-1;r>=0&&r>=t&&_l[this.text.charCodeAt(r)];r--)n--;this.text=this.text.substring(t,n),this.sectionIndex=this.sectionIndex.slice(t,n)},yl.prototype.substring=function(t,e){var n=new yl;return n.text=this.text.substring(t,e),n.sectionIndex=this.sectionIndex.slice(t,e),n.sections=this.sections,n},yl.prototype.toString=function(){return this.text},yl.prototype.getMaxScale=function(){var t=this;return this.sectionIndex.reduce((function(e,n){return Math.max(e,t.sections[n].scale)}),0)},yl.prototype.addTextSection=function(t,e){this.text+=t.text,this.sections.push(gl.forText(t.scale,t.fontStack||e));for(var n=this.sections.length-1,r=0;r<t.text.length;++r)this.sectionIndex.push(n)},yl.prototype.addImageSection=function(t){var e=t.image?t.image.name:\"\";if(0!==e.length){var n=this.getNextImageSectionCharCode();n?(this.text+=String.fromCharCode(n),this.sections.push(gl.forImage(e)),this.sectionIndex.push(this.sections.length-1)):x(\"Reached maximum number of images 6401\")}else x(\"Can't add FormattedSection with an empty image.\")},yl.prototype.getNextImageSectionCharCode=function(){return this.imageSectionID?this.imageSectionID>=63743?null:++this.imageSectionID:(this.imageSectionID=57344,this.imageSectionID)};var _l={9:!0,10:!0,11:!0,12:!0,13:!0,32:!0},bl={};function xl(t,e,n,r,i,a){if(e.imageName){var o=r[e.imageName];return o?o.displaySize[0]*e.scale*24/a+i:0}var s=n[e.fontStack],l=s&&s[t];return l?l.metrics.advance*e.scale+i:0}function wl(t,e,n,r){var i=Math.pow(t-e,2);return r?t<e?i/2:2*i:i+Math.abs(n)*n}function kl(t,e,n){var r=0;return 10===t&&(r-=1e4),n&&(r+=150),40!==t&&65288!==t||(r+=50),41!==e&&65289!==e||(r+=50),r}function Ml(t,e,n,r,i,a){for(var o=null,s=wl(e,n,i,a),l=0,c=r;l<c.length;l+=1){var u=c[l],h=wl(e-u.x,n,i,a)+u.badness;h<=s&&(o=u,s=h)}return{index:t,x:e,priorBreak:o,badness:s}}function Tl(t,e,n,r,i,a,o){if(\"point\"!==a)return[];if(!t)return[];for(var s,l=[],c=function(t,e,n,r,i,a){for(var o=0,s=0;s<t.length();s++){var l=t.getSection(s);o+=xl(t.getCharCode(s),l,r,i,e,a)}return o/Math.max(1,Math.ceil(o/n))}(t,e,n,r,i,o),u=t.text.indexOf(\"\\u200b\")>=0,h=0,d=0;d<t.length();d++){var f=t.getSection(d),p=t.getCharCode(d);if(_l[p]||(h+=xl(p,f,r,i,e,o)),d<t.length()-1){var m=!((s=p)<11904||!(Hr[\"Bopomofo Extended\"](s)||Hr.Bopomofo(s)||Hr[\"CJK Compatibility Forms\"](s)||Hr[\"CJK Compatibility Ideographs\"](s)||Hr[\"CJK Compatibility\"](s)||Hr[\"CJK Radicals Supplement\"](s)||Hr[\"CJK Strokes\"](s)||Hr[\"CJK Symbols and Punctuation\"](s)||Hr[\"CJK Unified Ideographs Extension A\"](s)||Hr[\"CJK Unified Ideographs\"](s)||Hr[\"Enclosed CJK Letters and Months\"](s)||Hr[\"Halfwidth and Fullwidth Forms\"](s)||Hr.Hiragana(s)||Hr[\"Ideographic Description Characters\"](s)||Hr[\"Kangxi Radicals\"](s)||Hr[\"Katakana Phonetic Extensions\"](s)||Hr.Katakana(s)||Hr[\"Vertical Forms\"](s)||Hr[\"Yi Radicals\"](s)||Hr[\"Yi Syllables\"](s)));(bl[p]||m||f.imageName)&&l.push(Ml(d+1,h,c,l,kl(p,t.getCharCode(d+1),m&&u),!1))}}return function t(e){return e?t(e.priorBreak).concat(e.index):[]}(Ml(t.length(),h,c,l,0,!0))}function Sl(t){var e=.5,n=.5;switch(t){case\"right\":case\"top-right\":case\"bottom-right\":e=1;break;case\"left\":case\"top-left\":case\"bottom-left\":e=0}switch(t){case\"bottom\":case\"bottom-right\":case\"bottom-left\":n=1;break;case\"top\":case\"top-right\":case\"top-left\":n=0}return{horizontalAlign:e,verticalAlign:n}}function Al(t,e,n,r,i){if(r||i)for(var a=t[n],o=(t[n].x+a.metrics.advance*a.scale)*r,s=e;s<=n;s++)t[s].x-=o,t[s].y+=i}function Ll(t,e,n,r,i,a){var o,s=t.image;if(s.content){var l=s.content,c=s.pixelRatio||1;o=[l[0]/c,l[1]/c,s.displaySize[0]-l[2]/c,s.displaySize[1]-l[3]/c]}var u,h,d,f,p=e.left*a,m=e.right*a;\"width\"===n||\"both\"===n?(f=i[0]+p-r[3],h=i[0]+m+r[1]):h=(f=i[0]+(p+m-s.displaySize[0])/2)+s.displaySize[0];var g=e.top*a,y=e.bottom*a;return\"height\"===n||\"both\"===n?(u=i[1]+g-r[0],d=i[1]+y+r[2]):d=(u=i[1]+(g+y-s.displaySize[1])/2)+s.displaySize[1],{image:s,top:u,right:h,bottom:d,left:f,collisionPadding:o}}bl[10]=!0,bl[32]=!0,bl[38]=!0,bl[40]=!0,bl[41]=!0,bl[43]=!0,bl[45]=!0,bl[47]=!0,bl[173]=!0,bl[183]=!0,bl[8203]=!0,bl[8208]=!0,bl[8211]=!0,bl[8231]=!0;var Cl=function(t){function e(e,n,r,i){t.call(this,e,n),this.angle=r,void 0!==i&&(this.segment=i)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.clone=function(){return new e(this.x,this.y,this.angle,this.segment)},e}(i);function El(t,e){var n=e.expression;if(\"constant\"===n.kind)return{kind:\"constant\",layoutSize:n.evaluate(new ii(t+1))};if(\"source\"===n.kind)return{kind:\"source\"};for(var r=n.zoomStops,i=n.interpolationType,a=0;a<r.length&&r[a]<=t;)a++;for(var o=a=Math.max(0,a-1);o<r.length&&r[o]<t+1;)o++;o=Math.min(r.length-1,o);var s=r[a],l=r[o];return\"composite\"===n.kind?{kind:\"composite\",minZoom:s,maxZoom:l,interpolationType:i}:{kind:\"camera\",minZoom:s,maxZoom:l,minSize:n.evaluate(new ii(s)),maxSize:n.evaluate(new ii(l)),interpolationType:i}}function Ol(t,e,n){var r=e.uSize,i=n.lowerSize;return\"source\"===t.kind?i/128:\"composite\"===t.kind?Ye(i/128,n.upperSize/128,e.uSizeT):r}function Dl(t,e){var n=0,r=0;if(\"constant\"===t.kind)r=t.layoutSize;else if(\"source\"!==t.kind){var i=t.interpolationType,a=i?l(nn.interpolationFactor(i,e,t.minZoom,t.maxZoom),0,1):0;\"camera\"===t.kind?r=Ye(t.minSize,t.maxSize,a):n=a}return{uSizeT:n,uSize:r}}Rr(\"Anchor\",Cl);var Il=Object.freeze({__proto__:null,getSizeData:El,evaluateSizeForFeature:Ol,evaluateSizeForZoom:Dl,SIZE_PACK_FACTOR:128});function Pl(t,e,n,r,i){if(void 0===e.segment)return!0;for(var a=e,o=e.segment+1,s=0;s>-n/2;){if(--o<0)return!1;s-=t[o].dist(a),a=t[o]}s+=t[o].dist(t[o+1]),o++;for(var l=[],c=0;s<n/2;){var u=t[o],h=t[o+1];if(!h)return!1;var d=t[o-1].angleTo(u)-u.angleTo(h);for(d=Math.abs((d+3*Math.PI)%(2*Math.PI)-Math.PI),l.push({distance:s,angleDelta:d}),c+=d;s-l[0].distance>r;)c-=l.shift().angleDelta;if(c>i)return!1;o++,s+=u.dist(h)}return!0}function Rl(t){for(var e=0,n=0;n<t.length-1;n++)e+=t[n].dist(t[n+1]);return e}function zl(t,e,n){return t?.6*e*n:0}function jl(t,e){return Math.max(t?t.right-t.left:0,e?e.right-e.left:0)}function Fl(t,e,n,r,i,a){for(var o=zl(n,i,a),s=jl(n,r)*a,l=0,c=Rl(t)/2,u=0;u<t.length-1;u++){var h=t[u],d=t[u+1],f=h.dist(d);if(l+f>c){var p=(c-l)/f,m=Ye(h.x,d.x,p),g=Ye(h.y,d.y,p),y=new Cl(m,g,d.angleTo(h),u);return y._round(),!o||Pl(t,y,s,o,e)?y:void 0}l+=f}}function Nl(t,e,n,r,i,a,o,s,l){var c=zl(r,a,o),u=jl(r,i),h=u*o,d=0===t[0].x||t[0].x===l||0===t[0].y||t[0].y===l;return e-h<e/4&&(e=h+e/4),function t(e,n,r,i,a,o,s,l,c){for(var u=o/2,h=Rl(e),d=0,f=n-r,p=[],m=0;m<e.length-1;m++){for(var g=e[m],y=e[m+1],v=g.dist(y),_=y.angleTo(g);f+r<d+v;){var b=((f+=r)-d)/v,x=Ye(g.x,y.x,b),w=Ye(g.y,y.y,b);if(x>=0&&x<c&&w>=0&&w<c&&f-u>=0&&f+u<=h){var k=new Cl(x,w,_,m);k._round(),i&&!Pl(e,k,o,i,a)||p.push(k)}}d+=v}return l||p.length||s||(p=t(e,d/2,r,i,a,o,s,!0,c)),p}(t,d?e/2*s%e:(u/2+2*a)*o*s%e,e,c,n,h,d,!1,l)}function Bl(t,e,n,r,a){for(var o=[],s=0;s<t.length;s++)for(var l=t[s],c=void 0,u=0;u<l.length-1;u++){var h=l[u],d=l[u+1];h.x<e&&d.x<e||(h.x<e?h=new i(e,h.y+(e-h.x)/(d.x-h.x)*(d.y-h.y))._round():d.x<e&&(d=new i(e,h.y+(e-h.x)/(d.x-h.x)*(d.y-h.y))._round()),h.y<n&&d.y<n||(h.y<n?h=new i(h.x+(n-h.y)/(d.y-h.y)*(d.x-h.x),n)._round():d.y<n&&(d=new i(h.x+(n-h.y)/(d.y-h.y)*(d.x-h.x),n)._round()),h.x>=r&&d.x>=r||(h.x>=r?h=new i(r,h.y+(r-h.x)/(d.x-h.x)*(d.y-h.y))._round():d.x>=r&&(d=new i(r,h.y+(r-h.x)/(d.x-h.x)*(d.y-h.y))._round()),h.y>=a&&d.y>=a||(h.y>=a?h=new i(h.x+(a-h.y)/(d.y-h.y)*(d.x-h.x),a)._round():d.y>=a&&(d=new i(h.x+(a-h.y)/(d.y-h.y)*(d.x-h.x),a)._round()),c&&h.equals(c[c.length-1])||o.push(c=[h]),c.push(d)))))}return o}function Yl(t,e,n,r){var a=[],o=t.image,s=o.pixelRatio,l=o.paddedRect.w-2,c=o.paddedRect.h-2,u=t.right-t.left,h=t.bottom-t.top,d=o.stretchX||[[0,l]],f=o.stretchY||[[0,c]],p=function(t,e){return t+e[1]-e[0]},m=d.reduce(p,0),g=f.reduce(p,0),y=l-m,v=c-g,_=0,b=m,x=0,w=g,k=0,M=y,T=0,S=v;if(o.content&&r){var A=o.content;_=Hl(d,0,A[0]),x=Hl(f,0,A[1]),b=Hl(d,A[0],A[2]),w=Hl(f,A[1],A[3]),k=A[0]-_,T=A[1]-x,M=A[2]-A[0]-b,S=A[3]-A[1]-w}var L=function(r,a,l,c){var d=Ul(r.stretch-_,b,u,t.left),f=Wl(r.fixed-k,M,r.stretch,m),p=Ul(a.stretch-x,w,h,t.top),y=Wl(a.fixed-T,S,a.stretch,g),v=Ul(l.stretch-_,b,u,t.left),A=Wl(l.fixed-k,M,l.stretch,m),L=Ul(c.stretch-x,w,h,t.top),C=Wl(c.fixed-T,S,c.stretch,g),E=new i(d,p),O=new i(v,p),D=new i(v,L),I=new i(d,L),P=new i(f/s,y/s),R=new i(A/s,C/s),z=e*Math.PI/180;if(z){var j=Math.sin(z),F=Math.cos(z),N=[F,-j,j,F];E._matMult(N),O._matMult(N),I._matMult(N),D._matMult(N)}var B=r.stretch+r.fixed,Y=a.stretch+a.fixed;return{tl:E,tr:O,bl:I,br:D,tex:{x:o.paddedRect.x+1+B,y:o.paddedRect.y+1+Y,w:l.stretch+l.fixed-B,h:c.stretch+c.fixed-Y},writingMode:void 0,glyphOffset:[0,0],sectionIndex:0,pixelOffsetTL:P,pixelOffsetBR:R,minFontScaleX:M/s/u,minFontScaleY:S/s/h,isSDF:n}};if(r&&(o.stretchX||o.stretchY))for(var C=Vl(d,y,m),E=Vl(f,v,g),O=0;O<C.length-1;O++)for(var D=C[O],I=C[O+1],P=0;P<E.length-1;P++)a.push(L(D,E[P],I,E[P+1]));else a.push(L({fixed:0,stretch:-1},{fixed:0,stretch:-1},{fixed:0,stretch:l+1},{fixed:0,stretch:c+1}));return a}function Hl(t,e,n){for(var r=0,i=0,a=t;i<a.length;i+=1){var o=a[i];r+=Math.max(e,Math.min(n,o[1]))-Math.max(e,Math.min(n,o[0]))}return r}function Vl(t,e,n){for(var r=[{fixed:-1,stretch:0}],i=0,a=t;i<a.length;i+=1){var o=a[i],s=o[0],l=o[1],c=r[r.length-1];r.push({fixed:s-c.stretch,stretch:c.stretch}),r.push({fixed:s-c.stretch,stretch:c.stretch+(l-s)})}return r.push({fixed:e+1,stretch:n}),r}function Ul(t,e,n,r){return t/e*n+r}function Wl(t,e,n,r){return t-e*n/r}var ql=function(t,e,n,r,a,o,s,l,c,u){if(this.boxStartIndex=t.length,c){var h=o.top,d=o.bottom,f=o.collisionPadding;f&&(h-=f[1],d+=f[3]);var p=d-h;p>0&&(p=Math.max(10,p),this.circleDiameter=p)}else{var m=o.top*s-l,g=o.bottom*s+l,y=o.left*s-l,v=o.right*s+l,_=o.collisionPadding;if(_&&(y-=_[0]*s,m-=_[1]*s,v+=_[2]*s,g+=_[3]*s),u){var b=new i(y,m),x=new i(v,m),w=new i(y,g),k=new i(v,g),M=u*Math.PI/180;b._rotate(M),x._rotate(M),w._rotate(M),k._rotate(M),y=Math.min(b.x,x.x,w.x,k.x),v=Math.max(b.x,x.x,w.x,k.x),m=Math.min(b.y,x.y,w.y,k.y),g=Math.max(b.y,x.y,w.y,k.y)}t.emplaceBack(e.x,e.y,y,m,v,g,n,r,a)}this.boxEndIndex=t.length},Gl=function(t,e){if(void 0===t&&(t=[]),void 0===e&&(e=Xl),this.data=t,this.length=this.data.length,this.compare=e,this.length>0)for(var n=(this.length>>1)-1;n>=0;n--)this._down(n)};function Xl(t,e){return t<e?-1:t>e?1:0}function Zl(t,e,n){void 0===e&&(e=1),void 0===n&&(n=!1);for(var r=1/0,a=1/0,o=-1/0,s=-1/0,l=t[0],c=0;c<l.length;c++){var u=l[c];(!c||u.x<r)&&(r=u.x),(!c||u.y<a)&&(a=u.y),(!c||u.x>o)&&(o=u.x),(!c||u.y>s)&&(s=u.y)}var h=Math.min(o-r,s-a),d=h/2,f=new Gl([],Jl);if(0===h)return new i(r,a);for(var p=r;p<o;p+=h)for(var m=a;m<s;m+=h)f.push(new Kl(p+d,m+d,d,t));for(var g=function(t){for(var e=0,n=0,r=0,i=t[0],a=0,o=i.length,s=o-1;a<o;s=a++){var l=i[a],c=i[s],u=l.x*c.y-c.x*l.y;n+=(l.x+c.x)*u,r+=(l.y+c.y)*u,e+=3*u}return new Kl(n/e,r/e,0,t)}(t),y=f.length;f.length;){var v=f.pop();(v.d>g.d||!g.d)&&(g=v,n&&console.log(\"found best %d after %d probes\",Math.round(1e4*v.d)/1e4,y)),v.max-g.d<=e||(f.push(new Kl(v.p.x-(d=v.h/2),v.p.y-d,d,t)),f.push(new Kl(v.p.x+d,v.p.y-d,d,t)),f.push(new Kl(v.p.x-d,v.p.y+d,d,t)),f.push(new Kl(v.p.x+d,v.p.y+d,d,t)),y+=4)}return n&&(console.log(\"num probes: \"+y),console.log(\"best distance: \"+g.d)),g.p}function Jl(t,e){return e.max-t.max}function Kl(t,e,n,r){this.p=new i(t,e),this.h=n,this.d=function(t,e){for(var n=!1,r=1/0,i=0;i<e.length;i++)for(var a=e[i],o=0,s=a.length,l=s-1;o<s;l=o++){var c=a[o],u=a[l];c.y>t.y!=u.y>t.y&&t.x<(u.x-c.x)*(t.y-c.y)/(u.y-c.y)+c.x&&(n=!n),r=Math.min(r,Wa(t,c,u))}return(n?1:-1)*Math.sqrt(r)}(this.p,r),this.max=this.d+this.h*Math.SQRT2}Gl.prototype.push=function(t){this.data.push(t),this.length++,this._up(this.length-1)},Gl.prototype.pop=function(){if(0!==this.length){var t=this.data[0],e=this.data.pop();return this.length--,this.length>0&&(this.data[0]=e,this._down(0)),t}},Gl.prototype.peek=function(){return this.data[0]},Gl.prototype._up=function(t){for(var e=this.data,n=this.compare,r=e[t];t>0;){var i=t-1>>1,a=e[i];if(n(r,a)>=0)break;e[t]=a,t=i}e[t]=r},Gl.prototype._down=function(t){for(var e=this.data,n=this.compare,r=this.length>>1,i=e[t];t<r;){var a=1+(t<<1),o=e[a],s=a+1;if(s<this.length&&n(e[s],o)<0&&(a=s,o=e[s]),n(o,i)>=0)break;e[t]=o,t=a}e[t]=i};var $l=Number.POSITIVE_INFINITY;function Ql(t,e){return e[1]!==$l?function(t,e,n){var r=0,i=0;switch(e=Math.abs(e),n=Math.abs(n),t){case\"top-right\":case\"top-left\":case\"top\":i=n-7;break;case\"bottom-right\":case\"bottom-left\":case\"bottom\":i=7-n}switch(t){case\"top-right\":case\"bottom-right\":case\"right\":r=-e;break;case\"top-left\":case\"bottom-left\":case\"left\":r=e}return[r,i]}(t,e[0],e[1]):function(t,e){var n=0,r=0;e<0&&(e=0);var i=e/Math.sqrt(2);switch(t){case\"top-right\":case\"top-left\":r=i-7;break;case\"bottom-right\":case\"bottom-left\":r=7-i;break;case\"bottom\":r=7-e;break;case\"top\":r=e-7}switch(t){case\"top-right\":case\"bottom-right\":n=-i;break;case\"top-left\":case\"bottom-left\":n=i;break;case\"left\":n=e;break;case\"right\":n=-e}return[n,r]}(t,e[0])}function tc(t){switch(t){case\"right\":case\"top-right\":case\"bottom-right\":return\"right\";case\"left\":case\"top-left\":case\"bottom-left\":return\"left\"}return\"center\"}function ec(t,e,n,r,a,o,s,l,c,u,h,d,f,p,m){var g=function(t,e,n,r,a,o,s,l){for(var c=r.layout.get(\"text-rotate\").evaluate(o,{})*Math.PI/180,u=[],h=0,d=e.positionedLines;h<d.length;h+=1)for(var f=d[h],p=0,m=f.positionedGlyphs;p<m.length;p+=1){var g=m[p];if(g.rect){var y=g.rect||{},v=4,_=!0,b=1,x=0,w=(a||l)&&g.vertical,k=g.metrics.advance*g.scale/2;if(l&&e.verticalizable&&(x=f.lineOffset/2-(g.imageName?-(24-g.metrics.width*g.scale)/2:24*(g.scale-1))),g.imageName){var M=s[g.imageName];_=M.sdf,v=1/(b=M.pixelRatio)}var T=a?[g.x+k,g.y]:[0,0],S=a?[0,0]:[g.x+k+n[0],g.y+n[1]-x],A=[0,0];w&&(A=S,S=[0,0]);var L=(g.metrics.left-v)*g.scale-k+S[0],C=(-g.metrics.top-v)*g.scale+S[1],E=L+y.w*g.scale/b,O=C+y.h*g.scale/b,D=new i(L,C),I=new i(E,C),P=new i(L,O),R=new i(E,O);if(w){var z=new i(-k,k- -17),j=-Math.PI/2,F=12-k,N=new i(22-F,-(g.imageName?F:0)),B=new(Function.prototype.bind.apply(i,[null].concat(A)));D._rotateAround(j,z)._add(N)._add(B),I._rotateAround(j,z)._add(N)._add(B),P._rotateAround(j,z)._add(N)._add(B),R._rotateAround(j,z)._add(N)._add(B)}if(c){var Y=Math.sin(c),H=Math.cos(c),V=[H,-Y,Y,H];D._matMult(V),I._matMult(V),P._matMult(V),R._matMult(V)}var U=new i(0,0),W=new i(0,0);u.push({tl:D,tr:I,bl:P,br:R,tex:y,writingMode:e.writingMode,glyphOffset:T,sectionIndex:g.sectionIndex,isSDF:_,pixelOffsetTL:U,pixelOffsetBR:W,minFontScaleX:0,minFontScaleY:0})}}return u}(0,n,l,a,o,s,r,t.allowVerticalPlacement),y=t.textSizeData,v=null;\"source\"===y.kind?(v=[128*a.layout.get(\"text-size\").evaluate(s,{})])[0]>32640&&x(t.layerIds[0]+': Value for \"text-size\" is >= 255. Reduce your \"text-size\".'):\"composite\"===y.kind&&((v=[128*p.compositeTextSizes[0].evaluate(s,{},m),128*p.compositeTextSizes[1].evaluate(s,{},m)])[0]>32640||v[1]>32640)&&x(t.layerIds[0]+': Value for \"text-size\" is >= 255. Reduce your \"text-size\".'),t.addSymbols(t.text,g,v,l,o,s,u,e,c.lineStartIndex,c.lineLength,f,m);for(var _=0,b=h;_<b.length;_+=1)d[b[_]]=t.text.placedSymbolArray.length-1;return 4*g.length}function nc(t){for(var e in t)return t[e];return null}function rc(t,e,n,r){var i=t.compareText;if(e in i){for(var a=i[e],o=a.length-1;o>=0;o--)if(r.dist(a[o])<n)return!0}else i[e]=[];return i[e].push(r),!1}var ic=ms.VectorTileFeature.types,ac=[{name:\"a_fade_opacity\",components:1,type:\"Uint8\",offset:0}];function oc(t,e,n,r,i,a,o,s,l,c,u,h,d){var f=s?Math.min(32640,Math.round(s[0])):0,p=s?Math.min(32640,Math.round(s[1])):0;t.emplaceBack(e,n,Math.round(32*r),Math.round(32*i),a,o,(f<<1)+(l?1:0),p,16*c,16*u,256*h,256*d)}function sc(t,e,n){t.emplaceBack(e.x,e.y,n),t.emplaceBack(e.x,e.y,n),t.emplaceBack(e.x,e.y,n),t.emplaceBack(e.x,e.y,n)}function lc(t){for(var e=0,n=t.sections;e<n.length;e+=1)if(Xr(n[e].text))return!0;return!1}var cc=function(t){this.layoutVertexArray=new Ei,this.indexArray=new ji,this.programConfigurations=t,this.segments=new ia,this.dynamicLayoutVertexArray=new Oi,this.opacityVertexArray=new Di,this.placedSymbolArray=new Ji};cc.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length&&0===this.indexArray.length&&0===this.dynamicLayoutVertexArray.length&&0===this.opacityVertexArray.length},cc.prototype.upload=function(t,e,n,r){this.isEmpty()||(n&&(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Rs.members),this.indexBuffer=t.createIndexBuffer(this.indexArray,e),this.dynamicLayoutVertexBuffer=t.createVertexBuffer(this.dynamicLayoutVertexArray,zs.members,!0),this.opacityVertexBuffer=t.createVertexBuffer(this.opacityVertexArray,ac,!0),this.opacityVertexBuffer.itemSize=1),(n||r)&&this.programConfigurations.upload(t))},cc.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.dynamicLayoutVertexBuffer.destroy(),this.opacityVertexBuffer.destroy())},Rr(\"SymbolBuffers\",cc);var uc=function(t,e,n){this.layoutVertexArray=new t,this.layoutAttributes=e,this.indexArray=new n,this.segments=new ia,this.collisionVertexArray=new zi};uc.prototype.upload=function(t){this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,this.layoutAttributes),this.indexBuffer=t.createIndexBuffer(this.indexArray),this.collisionVertexBuffer=t.createVertexBuffer(this.collisionVertexArray,js.members,!0)},uc.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.segments.destroy(),this.collisionVertexBuffer.destroy())},Rr(\"CollisionBuffers\",uc);var hc=function(t){this.collisionBoxArray=t.collisionBoxArray,this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.pixelRatio=t.pixelRatio,this.sourceLayerIndex=t.sourceLayerIndex,this.hasPattern=!1,this.hasRTLText=!1,this.sortKeyRanges=[],this.collisionCircleArray=[],this.placementInvProjMatrix=eo([]),this.placementViewportMatrix=eo([]);var e=this.layers[0]._unevaluatedLayout._values;this.textSizeData=El(this.zoom,e[\"text-size\"]),this.iconSizeData=El(this.zoom,e[\"icon-size\"]);var n=this.layers[0].layout,r=n.get(\"symbol-sort-key\"),i=n.get(\"symbol-z-order\");this.sortFeaturesByKey=\"viewport-y\"!==i&&void 0!==r.constantOr(1),this.sortFeaturesByY=(\"viewport-y\"===i||\"auto\"===i&&!this.sortFeaturesByKey)&&(n.get(\"text-allow-overlap\")||n.get(\"icon-allow-overlap\")||n.get(\"text-ignore-placement\")||n.get(\"icon-ignore-placement\")),\"point\"===n.get(\"symbol-placement\")&&(this.writingModes=n.get(\"text-writing-mode\").map((function(t){return ml[t]}))),this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id})),this.sourceID=t.sourceID};hc.prototype.createArrays=function(){this.text=new cc(new Oa(Rs.members,this.layers,this.zoom,(function(t){return/^text/.test(t)}))),this.icon=new cc(new Oa(Rs.members,this.layers,this.zoom,(function(t){return/^icon/.test(t)}))),this.glyphOffsetArray=new Qi,this.lineVertexArray=new ta,this.symbolInstances=new $i},hc.prototype.calculateGlyphDependencies=function(t,e,n,r,i){for(var a=0;a<t.length;a++)if(e[t.charCodeAt(a)]=!0,(n||r)&&i){var o=Ys[t.charAt(a)];o&&(e[o.charCodeAt(0)]=!0)}},hc.prototype.populate=function(t,e,n){var r=this.layers[0],i=r.layout,a=i.get(\"text-font\"),o=i.get(\"text-field\"),s=i.get(\"icon-image\"),l=(\"constant\"!==o.value.kind||o.value.value instanceof te&&!o.value.value.isEmpty()||o.value.value.toString().length>0)&&(\"constant\"!==a.value.kind||a.value.value.length>0),c=\"constant\"!==s.value.kind||!!s.value.value||Object.keys(s.parameters).length>0,u=i.get(\"symbol-sort-key\");if(this.features=[],l||c){for(var h=e.iconDependencies,d=e.glyphDependencies,f=e.availableImages,p=new ii(this.zoom),m=0,g=t;m<g.length;m+=1){var y=g[m],v=y.feature,_=y.id,b=y.index,x=y.sourceLayerIndex,w=r._featureFilter.needGeometry,k={type:v.type,id:_,properties:v.properties,geometry:w?Ra(v):[]};if(r._featureFilter.filter(p,k,n)){w||(k.geometry=Ra(v));var M=void 0;if(l){var T=r.getValueAndResolveTokens(\"text-field\",k,n,f),S=te.factory(T);lc(S)&&(this.hasRTLText=!0),(!this.hasRTLText||\"unavailable\"===ei()||this.hasRTLText&&ri.isParsed())&&(M=Bs(S,r,k))}var A=void 0;if(c){var L=r.getValueAndResolveTokens(\"icon-image\",k,n,f);A=L instanceof ee?L:ee.fromString(L)}if(M||A){var C=this.sortFeaturesByKey?u.evaluate(k,{},n):void 0,E={id:_,text:M,icon:A,index:b,sourceLayerIndex:x,geometry:Ra(v),properties:v.properties,type:ic[v.type],sortKey:C};if(this.features.push(E),A&&(h[A.name]=!0),M){var O=a.evaluate(k,{},n).join(\",\"),D=\"map\"===i.get(\"text-rotation-alignment\")&&\"point\"!==i.get(\"symbol-placement\");this.allowVerticalPlacement=this.writingModes&&this.writingModes.indexOf(ml.vertical)>=0;for(var I=0,P=M.sections;I<P.length;I+=1){var R=P[I];if(R.image)h[R.image.name]=!0;else{var z=Vr(M.toString()),j=R.fontStack||O,F=d[j]=d[j]||{};this.calculateGlyphDependencies(R.text,F,D,this.allowVerticalPlacement,z)}}}}}}\"line\"===i.get(\"symbol-placement\")&&(this.features=function(t){var e={},n={},r=[],i=0;function a(e){r.push(t[e]),i++}function o(t,e,i){var a=n[t];return delete n[t],n[e]=a,r[a].geometry[0].pop(),r[a].geometry[0]=r[a].geometry[0].concat(i[0]),a}function s(t,n,i){var a=e[n];return delete e[n],e[t]=a,r[a].geometry[0].shift(),r[a].geometry[0]=i[0].concat(r[a].geometry[0]),a}function l(t,e,n){var r=n?e[0][e[0].length-1]:e[0][0];return t+\":\"+r.x+\":\"+r.y}for(var c=0;c<t.length;c++){var u=t[c],h=u.geometry,d=u.text?u.text.toString():null;if(d){var f=l(d,h),p=l(d,h,!0);if(f in n&&p in e&&n[f]!==e[p]){var m=s(f,p,h),g=o(f,p,r[m].geometry);delete e[f],delete n[p],n[l(d,r[g].geometry,!0)]=g,r[m].geometry=null}else f in n?o(f,p,h):p in e?s(f,p,h):(a(c),e[f]=i-1,n[p]=i-1)}else a(c)}return r.filter((function(t){return t.geometry}))}(this.features)),this.sortFeaturesByKey&&this.features.sort((function(t,e){return t.sortKey-e.sortKey}))}},hc.prototype.update=function(t,e,n){this.stateDependentLayers.length&&(this.text.programConfigurations.updatePaintArrays(t,e,this.layers,n),this.icon.programConfigurations.updatePaintArrays(t,e,this.layers,n))},hc.prototype.isEmpty=function(){return 0===this.symbolInstances.length&&!this.hasRTLText},hc.prototype.uploadPending=function(){return!this.uploaded||this.text.programConfigurations.needsUpload||this.icon.programConfigurations.needsUpload},hc.prototype.upload=function(t){!this.uploaded&&this.hasDebugData()&&(this.textCollisionBox.upload(t),this.iconCollisionBox.upload(t)),this.text.upload(t,this.sortFeaturesByY,!this.uploaded,this.text.programConfigurations.needsUpload),this.icon.upload(t,this.sortFeaturesByY,!this.uploaded,this.icon.programConfigurations.needsUpload),this.uploaded=!0},hc.prototype.destroyDebugData=function(){this.textCollisionBox.destroy(),this.iconCollisionBox.destroy()},hc.prototype.destroy=function(){this.text.destroy(),this.icon.destroy(),this.hasDebugData()&&this.destroyDebugData()},hc.prototype.addToLineVertexArray=function(t,e){var n=this.lineVertexArray.length;if(void 0!==t.segment){for(var r=t.dist(e[t.segment+1]),i=t.dist(e[t.segment]),a={},o=t.segment+1;o<e.length;o++)a[o]={x:e[o].x,y:e[o].y,tileUnitDistanceFromAnchor:r},o<e.length-1&&(r+=e[o+1].dist(e[o]));for(var s=t.segment||0;s>=0;s--)a[s]={x:e[s].x,y:e[s].y,tileUnitDistanceFromAnchor:i},s>0&&(i+=e[s-1].dist(e[s]));for(var l=0;l<e.length;l++){var c=a[l];this.lineVertexArray.emplaceBack(c.x,c.y,c.tileUnitDistanceFromAnchor)}}return{lineStartIndex:n,lineLength:this.lineVertexArray.length-n}},hc.prototype.addSymbols=function(t,e,n,r,i,a,o,s,l,c,u,h){for(var d=t.indexArray,f=t.layoutVertexArray,p=t.segments.prepareSegment(4*e.length,f,d,a.sortKey),m=this.glyphOffsetArray.length,g=p.vertexLength,y=this.allowVerticalPlacement&&o===ml.vertical?Math.PI/2:0,v=a.text&&a.text.sections,_=0;_<e.length;_++){var b=e[_],x=b.tl,w=b.tr,k=b.bl,M=b.br,T=b.tex,S=b.pixelOffsetTL,A=b.pixelOffsetBR,L=b.minFontScaleX,C=b.minFontScaleY,E=b.glyphOffset,O=b.isSDF,D=b.sectionIndex,I=p.vertexLength,P=E[1];oc(f,s.x,s.y,x.x,P+x.y,T.x,T.y,n,O,S.x,S.y,L,C),oc(f,s.x,s.y,w.x,P+w.y,T.x+T.w,T.y,n,O,A.x,S.y,L,C),oc(f,s.x,s.y,k.x,P+k.y,T.x,T.y+T.h,n,O,S.x,A.y,L,C),oc(f,s.x,s.y,M.x,P+M.y,T.x+T.w,T.y+T.h,n,O,A.x,A.y,L,C),sc(t.dynamicLayoutVertexArray,s,y),d.emplaceBack(I,I+1,I+2),d.emplaceBack(I+1,I+2,I+3),p.vertexLength+=4,p.primitiveLength+=2,this.glyphOffsetArray.emplaceBack(E[0]),_!==e.length-1&&D===e[_+1].sectionIndex||t.programConfigurations.populatePaintArrays(f.length,a,a.index,{},h,v&&v[D])}t.placedSymbolArray.emplaceBack(s.x,s.y,m,this.glyphOffsetArray.length-m,g,l,c,s.segment,n?n[0]:0,n?n[1]:0,r[0],r[1],o,0,!1,0,u)},hc.prototype._addCollisionDebugVertex=function(t,e,n,r,i,a){return e.emplaceBack(0,0),t.emplaceBack(n.x,n.y,r,i,Math.round(a.x),Math.round(a.y))},hc.prototype.addCollisionDebugVertices=function(t,e,n,r,a,o,s){var l=a.segments.prepareSegment(4,a.layoutVertexArray,a.indexArray),c=l.vertexLength,u=a.layoutVertexArray,h=a.collisionVertexArray,d=s.anchorX,f=s.anchorY;this._addCollisionDebugVertex(u,h,o,d,f,new i(t,e)),this._addCollisionDebugVertex(u,h,o,d,f,new i(n,e)),this._addCollisionDebugVertex(u,h,o,d,f,new i(n,r)),this._addCollisionDebugVertex(u,h,o,d,f,new i(t,r)),l.vertexLength+=4;var p=a.indexArray;p.emplaceBack(c,c+1),p.emplaceBack(c+1,c+2),p.emplaceBack(c+2,c+3),p.emplaceBack(c+3,c),l.primitiveLength+=4},hc.prototype.addDebugCollisionBoxes=function(t,e,n,r){for(var i=t;i<e;i++){var a=this.collisionBoxArray.get(i);this.addCollisionDebugVertices(a.x1,a.y1,a.x2,a.y2,r?this.textCollisionBox:this.iconCollisionBox,a.anchorPoint,n)}},hc.prototype.generateCollisionDebugBuffers=function(){this.hasDebugData()&&this.destroyDebugData(),this.textCollisionBox=new uc(Pi,Fs.members,Vi),this.iconCollisionBox=new uc(Pi,Fs.members,Vi);for(var t=0;t<this.symbolInstances.length;t++){var e=this.symbolInstances.get(t);this.addDebugCollisionBoxes(e.textBoxStartIndex,e.textBoxEndIndex,e,!0),this.addDebugCollisionBoxes(e.verticalTextBoxStartIndex,e.verticalTextBoxEndIndex,e,!0),this.addDebugCollisionBoxes(e.iconBoxStartIndex,e.iconBoxEndIndex,e,!1),this.addDebugCollisionBoxes(e.verticalIconBoxStartIndex,e.verticalIconBoxEndIndex,e,!1)}},hc.prototype._deserializeCollisionBoxesForSymbol=function(t,e,n,r,i,a,o,s,l){for(var c={},u=e;u<n;u++){var h=t.get(u);c.textBox={x1:h.x1,y1:h.y1,x2:h.x2,y2:h.y2,anchorPointX:h.anchorPointX,anchorPointY:h.anchorPointY},c.textFeatureIndex=h.featureIndex;break}for(var d=r;d<i;d++){var f=t.get(d);c.verticalTextBox={x1:f.x1,y1:f.y1,x2:f.x2,y2:f.y2,anchorPointX:f.anchorPointX,anchorPointY:f.anchorPointY},c.verticalTextFeatureIndex=f.featureIndex;break}for(var p=a;p<o;p++){var m=t.get(p);c.iconBox={x1:m.x1,y1:m.y1,x2:m.x2,y2:m.y2,anchorPointX:m.anchorPointX,anchorPointY:m.anchorPointY},c.iconFeatureIndex=m.featureIndex;break}for(var g=s;g<l;g++){var y=t.get(g);c.verticalIconBox={x1:y.x1,y1:y.y1,x2:y.x2,y2:y.y2,anchorPointX:y.anchorPointX,anchorPointY:y.anchorPointY},c.verticalIconFeatureIndex=y.featureIndex;break}return c},hc.prototype.deserializeCollisionBoxes=function(t){this.collisionArrays=[];for(var e=0;e<this.symbolInstances.length;e++){var n=this.symbolInstances.get(e);this.collisionArrays.push(this._deserializeCollisionBoxesForSymbol(t,n.textBoxStartIndex,n.textBoxEndIndex,n.verticalTextBoxStartIndex,n.verticalTextBoxEndIndex,n.iconBoxStartIndex,n.iconBoxEndIndex,n.verticalIconBoxStartIndex,n.verticalIconBoxEndIndex))}},hc.prototype.hasTextData=function(){return this.text.segments.get().length>0},hc.prototype.hasIconData=function(){return this.icon.segments.get().length>0},hc.prototype.hasDebugData=function(){return this.textCollisionBox&&this.iconCollisionBox},hc.prototype.hasTextCollisionBoxData=function(){return this.hasDebugData()&&this.textCollisionBox.segments.get().length>0},hc.prototype.hasIconCollisionBoxData=function(){return this.hasDebugData()&&this.iconCollisionBox.segments.get().length>0},hc.prototype.addIndicesForPlacedSymbol=function(t,e){for(var n=t.placedSymbolArray.get(e),r=n.vertexStartIndex+4*n.numGlyphs,i=n.vertexStartIndex;i<r;i+=4)t.indexArray.emplaceBack(i,i+1,i+2),t.indexArray.emplaceBack(i+1,i+2,i+3)},hc.prototype.getSortedSymbolIndexes=function(t){if(this.sortedAngle===t&&void 0!==this.symbolInstanceIndexes)return this.symbolInstanceIndexes;for(var e=Math.sin(t),n=Math.cos(t),r=[],i=[],a=[],o=0;o<this.symbolInstances.length;++o){a.push(o);var s=this.symbolInstances.get(o);r.push(0|Math.round(e*s.anchorX+n*s.anchorY)),i.push(s.featureIndex)}return a.sort((function(t,e){return r[t]-r[e]||i[e]-i[t]})),a},hc.prototype.addToSortKeyRanges=function(t,e){var n=this.sortKeyRanges[this.sortKeyRanges.length-1];n&&n.sortKey===e?n.symbolInstanceEnd=t+1:this.sortKeyRanges.push({sortKey:e,symbolInstanceStart:t,symbolInstanceEnd:t+1})},hc.prototype.sortFeatures=function(t){var e=this;if(this.sortFeaturesByY&&this.sortedAngle!==t&&!(this.text.segments.get().length>1||this.icon.segments.get().length>1)){this.symbolInstanceIndexes=this.getSortedSymbolIndexes(t),this.sortedAngle=t,this.text.indexArray.clear(),this.icon.indexArray.clear(),this.featureSortOrder=[];for(var n=0,r=this.symbolInstanceIndexes;n<r.length;n+=1){var i=this.symbolInstances.get(r[n]);this.featureSortOrder.push(i.featureIndex),[i.rightJustifiedTextSymbolIndex,i.centerJustifiedTextSymbolIndex,i.leftJustifiedTextSymbolIndex].forEach((function(t,n,r){t>=0&&r.indexOf(t)===n&&e.addIndicesForPlacedSymbol(e.text,t)})),i.verticalPlacedTextSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.text,i.verticalPlacedTextSymbolIndex),i.placedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,i.placedIconSymbolIndex),i.verticalPlacedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,i.verticalPlacedIconSymbolIndex)}this.text.indexBuffer&&this.text.indexBuffer.updateData(this.text.indexArray),this.icon.indexBuffer&&this.icon.indexBuffer.updateData(this.icon.indexArray)}},Rr(\"SymbolBucket\",hc,{omit:[\"layers\",\"collisionBoxArray\",\"features\",\"compareText\"]}),hc.MAX_GLYPHS=65535,hc.addDynamicAttributes=sc;var dc=new vi({\"symbol-placement\":new fi(St.layout_symbol[\"symbol-placement\"]),\"symbol-spacing\":new fi(St.layout_symbol[\"symbol-spacing\"]),\"symbol-avoid-edges\":new fi(St.layout_symbol[\"symbol-avoid-edges\"]),\"symbol-sort-key\":new pi(St.layout_symbol[\"symbol-sort-key\"]),\"symbol-z-order\":new fi(St.layout_symbol[\"symbol-z-order\"]),\"icon-allow-overlap\":new fi(St.layout_symbol[\"icon-allow-overlap\"]),\"icon-ignore-placement\":new fi(St.layout_symbol[\"icon-ignore-placement\"]),\"icon-optional\":new fi(St.layout_symbol[\"icon-optional\"]),\"icon-rotation-alignment\":new fi(St.layout_symbol[\"icon-rotation-alignment\"]),\"icon-size\":new pi(St.layout_symbol[\"icon-size\"]),\"icon-text-fit\":new fi(St.layout_symbol[\"icon-text-fit\"]),\"icon-text-fit-padding\":new fi(St.layout_symbol[\"icon-text-fit-padding\"]),\"icon-image\":new pi(St.layout_symbol[\"icon-image\"]),\"icon-rotate\":new pi(St.layout_symbol[\"icon-rotate\"]),\"icon-padding\":new fi(St.layout_symbol[\"icon-padding\"]),\"icon-keep-upright\":new fi(St.layout_symbol[\"icon-keep-upright\"]),\"icon-offset\":new pi(St.layout_symbol[\"icon-offset\"]),\"icon-anchor\":new pi(St.layout_symbol[\"icon-anchor\"]),\"icon-pitch-alignment\":new fi(St.layout_symbol[\"icon-pitch-alignment\"]),\"text-pitch-alignment\":new fi(St.layout_symbol[\"text-pitch-alignment\"]),\"text-rotation-alignment\":new fi(St.layout_symbol[\"text-rotation-alignment\"]),\"text-field\":new pi(St.layout_symbol[\"text-field\"]),\"text-font\":new pi(St.layout_symbol[\"text-font\"]),\"text-size\":new pi(St.layout_symbol[\"text-size\"]),\"text-max-width\":new pi(St.layout_symbol[\"text-max-width\"]),\"text-line-height\":new fi(St.layout_symbol[\"text-line-height\"]),\"text-letter-spacing\":new pi(St.layout_symbol[\"text-letter-spacing\"]),\"text-justify\":new pi(St.layout_symbol[\"text-justify\"]),\"text-radial-offset\":new pi(St.layout_symbol[\"text-radial-offset\"]),\"text-variable-anchor\":new fi(St.layout_symbol[\"text-variable-anchor\"]),\"text-anchor\":new pi(St.layout_symbol[\"text-anchor\"]),\"text-max-angle\":new fi(St.layout_symbol[\"text-max-angle\"]),\"text-writing-mode\":new fi(St.layout_symbol[\"text-writing-mode\"]),\"text-rotate\":new pi(St.layout_symbol[\"text-rotate\"]),\"text-padding\":new fi(St.layout_symbol[\"text-padding\"]),\"text-keep-upright\":new fi(St.layout_symbol[\"text-keep-upright\"]),\"text-transform\":new pi(St.layout_symbol[\"text-transform\"]),\"text-offset\":new pi(St.layout_symbol[\"text-offset\"]),\"text-allow-overlap\":new fi(St.layout_symbol[\"text-allow-overlap\"]),\"text-ignore-placement\":new fi(St.layout_symbol[\"text-ignore-placement\"]),\"text-optional\":new fi(St.layout_symbol[\"text-optional\"])}),fc={paint:new vi({\"icon-opacity\":new pi(St.paint_symbol[\"icon-opacity\"]),\"icon-color\":new pi(St.paint_symbol[\"icon-color\"]),\"icon-halo-color\":new pi(St.paint_symbol[\"icon-halo-color\"]),\"icon-halo-width\":new pi(St.paint_symbol[\"icon-halo-width\"]),\"icon-halo-blur\":new pi(St.paint_symbol[\"icon-halo-blur\"]),\"icon-translate\":new fi(St.paint_symbol[\"icon-translate\"]),\"icon-translate-anchor\":new fi(St.paint_symbol[\"icon-translate-anchor\"]),\"text-opacity\":new pi(St.paint_symbol[\"text-opacity\"]),\"text-color\":new pi(St.paint_symbol[\"text-color\"],{runtimeType:Ft,getOverride:function(t){return t.textColor},hasOverride:function(t){return!!t.textColor}}),\"text-halo-color\":new pi(St.paint_symbol[\"text-halo-color\"]),\"text-halo-width\":new pi(St.paint_symbol[\"text-halo-width\"]),\"text-halo-blur\":new pi(St.paint_symbol[\"text-halo-blur\"]),\"text-translate\":new fi(St.paint_symbol[\"text-translate\"]),\"text-translate-anchor\":new fi(St.paint_symbol[\"text-translate-anchor\"])}),layout:dc},pc=function(t){this.type=t.property.overrides?t.property.overrides.runtimeType:Pt,this.defaultValue=t};pc.prototype.evaluate=function(t){if(t.formattedSection){var e=this.defaultValue.property.overrides;if(e&&e.hasOverride(t.formattedSection))return e.getOverride(t.formattedSection)}return t.feature&&t.featureState?this.defaultValue.evaluate(t.feature,t.featureState):this.defaultValue.property.specification.default},pc.prototype.eachChild=function(t){this.defaultValue.isConstant()||t(this.defaultValue.value._styleExpression.expression)},pc.prototype.outputDefined=function(){return!1},pc.prototype.serialize=function(){return null},Rr(\"FormatSectionOverride\",pc,{omit:[\"defaultValue\"]});var mc=function(t){function e(e){t.call(this,e,fc)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.recalculate=function(e,n){if(t.prototype.recalculate.call(this,e,n),\"auto\"===this.layout.get(\"icon-rotation-alignment\")&&(this.layout._values[\"icon-rotation-alignment\"]=\"point\"!==this.layout.get(\"symbol-placement\")?\"map\":\"viewport\"),\"auto\"===this.layout.get(\"text-rotation-alignment\")&&(this.layout._values[\"text-rotation-alignment\"]=\"point\"!==this.layout.get(\"symbol-placement\")?\"map\":\"viewport\"),\"auto\"===this.layout.get(\"text-pitch-alignment\")&&(this.layout._values[\"text-pitch-alignment\"]=this.layout.get(\"text-rotation-alignment\")),\"auto\"===this.layout.get(\"icon-pitch-alignment\")&&(this.layout._values[\"icon-pitch-alignment\"]=this.layout.get(\"icon-rotation-alignment\")),\"point\"===this.layout.get(\"symbol-placement\")){var r=this.layout.get(\"text-writing-mode\");if(r){for(var i=[],a=0,o=r;a<o.length;a+=1){var s=o[a];i.indexOf(s)<0&&i.push(s)}this.layout._values[\"text-writing-mode\"]=i}else this.layout._values[\"text-writing-mode\"]=[\"horizontal\"]}this._setPaintOverrides()},e.prototype.getValueAndResolveTokens=function(t,e,n,r){var i=this.layout.get(t).evaluate(e,{},n,r),a=this._unevaluatedLayout._values[t];return a.isDataDriven()||Vn(a.value)||!i?i:function(t,e){return e.replace(/{([^{}]+)}/g,(function(e,n){return n in t?String(t[n]):\"\"}))}(e.properties,i)},e.prototype.createBucket=function(t){return new hc(t)},e.prototype.queryRadius=function(){return 0},e.prototype.queryIntersectsFeature=function(){return!1},e.prototype._setPaintOverrides=function(){for(var t=0,n=fc.paint.overridableProperties;t<n.length;t+=1){var r=n[t];if(e.hasPaintOverride(this.layout,r)){var i,a=this.paint.get(r),o=new pc(a),s=new Hn(o,a.property.specification);i=\"constant\"===a.value.kind||\"source\"===a.value.kind?new Wn(\"source\",s):new qn(\"composite\",s,a.value.zoomStops,a.value._interpolationType),this.paint._values[r]=new hi(a.property,i,a.parameters)}}},e.prototype._handleOverridablePaintPropertyUpdate=function(t,n,r){return!(!this.layout||n.isDataDriven()||r.isDataDriven())&&e.hasPaintOverride(this.layout,t)},e.hasPaintOverride=function(t,e){var n=t.get(\"text-field\"),r=fc.paint.properties[e],i=!1,a=function(t){for(var e=0,n=t;e<n.length;e+=1)if(r.overrides&&r.overrides.hasOverride(n[e]))return void(i=!0)};if(\"constant\"===n.value.kind&&n.value.value instanceof te)a(n.value.value.sections);else if(\"source\"===n.value.kind){var o=function(t){i||(t instanceof oe&&ie(t.value)===Ht?a(t.value.sections):t instanceof ue?a(t.sections):t.eachChild(o))},s=n.value;s._styleExpression&&o(s._styleExpression.expression)}return i},e}(_i),gc={paint:new vi({\"background-color\":new fi(St.paint_background[\"background-color\"]),\"background-pattern\":new gi(St.paint_background[\"background-pattern\"]),\"background-opacity\":new fi(St.paint_background[\"background-opacity\"])})},yc=function(t){function e(e){t.call(this,e,gc)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e}(_i),vc={paint:new vi({\"raster-opacity\":new fi(St.paint_raster[\"raster-opacity\"]),\"raster-hue-rotate\":new fi(St.paint_raster[\"raster-hue-rotate\"]),\"raster-brightness-min\":new fi(St.paint_raster[\"raster-brightness-min\"]),\"raster-brightness-max\":new fi(St.paint_raster[\"raster-brightness-max\"]),\"raster-saturation\":new fi(St.paint_raster[\"raster-saturation\"]),\"raster-contrast\":new fi(St.paint_raster[\"raster-contrast\"]),\"raster-resampling\":new fi(St.paint_raster[\"raster-resampling\"]),\"raster-fade-duration\":new fi(St.paint_raster[\"raster-fade-duration\"])})},_c=function(t){function e(e){t.call(this,e,vc)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e}(_i),bc=function(t){function e(e){t.call(this,e,{}),this.implementation=e}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.is3D=function(){return\"3d\"===this.implementation.renderingMode},e.prototype.hasOffscreenPass=function(){return void 0!==this.implementation.prerender},e.prototype.recalculate=function(){},e.prototype.updateTransitions=function(){},e.prototype.hasTransition=function(){},e.prototype.serialize=function(){},e.prototype.onAdd=function(t){this.implementation.onAdd&&this.implementation.onAdd(t,t.painter.context.gl)},e.prototype.onRemove=function(t){this.implementation.onRemove&&this.implementation.onRemove(t,t.painter.context.gl)},e}(_i),xc={circle:oo,heatmap:yo,hillshade:_o,fill:as,\"fill-extrusion\":ws,line:Is,symbol:mc,background:yc,raster:_c},wc=self.HTMLImageElement,kc=self.HTMLCanvasElement,Mc=self.HTMLVideoElement,Tc=self.ImageData,Sc=self.ImageBitmap,Ac=function(t,e,n,r){this.context=t,this.format=n,this.texture=t.gl.createTexture(),this.update(e,r)};Ac.prototype.update=function(t,e,n){var r=t.width,i=t.height,a=!(this.size&&this.size[0]===r&&this.size[1]===i||n),o=this.context,s=o.gl;if(this.useMipmap=Boolean(e&&e.useMipmap),s.bindTexture(s.TEXTURE_2D,this.texture),o.pixelStoreUnpackFlipY.set(!1),o.pixelStoreUnpack.set(1),o.pixelStoreUnpackPremultiplyAlpha.set(this.format===s.RGBA&&(!e||!1!==e.premultiply)),a)this.size=[r,i],t instanceof wc||t instanceof kc||t instanceof Mc||t instanceof Tc||Sc&&t instanceof Sc?s.texImage2D(s.TEXTURE_2D,0,this.format,this.format,s.UNSIGNED_BYTE,t):s.texImage2D(s.TEXTURE_2D,0,this.format,r,i,0,this.format,s.UNSIGNED_BYTE,t.data);else{var l=n||{x:0,y:0},c=l.x,u=l.y;t instanceof wc||t instanceof kc||t instanceof Mc||t instanceof Tc||Sc&&t instanceof Sc?s.texSubImage2D(s.TEXTURE_2D,0,c,u,s.RGBA,s.UNSIGNED_BYTE,t):s.texSubImage2D(s.TEXTURE_2D,0,c,u,r,i,s.RGBA,s.UNSIGNED_BYTE,t.data)}this.useMipmap&&this.isSizePowerOfTwo()&&s.generateMipmap(s.TEXTURE_2D)},Ac.prototype.bind=function(t,e,n){var r=this.context.gl;r.bindTexture(r.TEXTURE_2D,this.texture),n!==r.LINEAR_MIPMAP_NEAREST||this.isSizePowerOfTwo()||(n=r.LINEAR),t!==this.filter&&(r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,t),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,n||t),this.filter=t),e!==this.wrap&&(r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,e),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,e),this.wrap=e)},Ac.prototype.isSizePowerOfTwo=function(){return this.size[0]===this.size[1]&&Math.log(this.size[0])/Math.LN2%1==0},Ac.prototype.destroy=function(){this.context.gl.deleteTexture(this.texture),this.texture=null};var Lc=function(t){var e=this;this._callback=t,this._triggered=!1,\"undefined\"!=typeof MessageChannel&&(this._channel=new MessageChannel,this._channel.port2.onmessage=function(){e._triggered=!1,e._callback()})};Lc.prototype.trigger=function(){var t=this;this._triggered||(this._triggered=!0,this._channel?this._channel.port1.postMessage(!0):setTimeout((function(){t._triggered=!1,t._callback()}),0))},Lc.prototype.remove=function(){delete this._channel,this._callback=function(){}};var Cc=function(t,e,n){this.target=t,this.parent=e,this.mapId=n,this.callbacks={},this.tasks={},this.taskQueue=[],this.cancelCallbacks={},m([\"receive\",\"process\"],this),this.invoker=new Lc(this.process),this.target.addEventListener(\"message\",this.receive,!1),this.globalScope=M()?t:self};function Ec(t,e,n){var r=2*Math.PI*6378137/256/Math.pow(2,n);return[t*r-2*Math.PI*6378137/2,e*r-2*Math.PI*6378137/2]}Cc.prototype.send=function(t,e,n,r,i){var a=this;void 0===i&&(i=!1);var o=Math.round(1e18*Math.random()).toString(36).substring(0,10);n&&(this.callbacks[o]=n);var s=A(this.globalScope)?void 0:[];return this.target.postMessage({id:o,type:t,hasCallback:!!n,targetMapId:r,mustQueue:i,sourceMapId:this.mapId,data:Nr(e,s)},s),{cancel:function(){n&&delete a.callbacks[o],a.target.postMessage({id:o,type:\"<cancel>\",targetMapId:r,sourceMapId:a.mapId})}}},Cc.prototype.receive=function(t){var e=t.data,n=e.id;if(n&&(!e.targetMapId||this.mapId===e.targetMapId))if(\"<cancel>\"===e.type){delete this.tasks[n];var r=this.cancelCallbacks[n];delete this.cancelCallbacks[n],r&&r()}else M()||e.mustQueue?(this.tasks[n]=e,this.taskQueue.push(n),this.invoker.trigger()):this.processTask(n,e)},Cc.prototype.process=function(){if(this.taskQueue.length){var t=this.taskQueue.shift(),e=this.tasks[t];delete this.tasks[t],this.taskQueue.length&&this.invoker.trigger(),e&&this.processTask(t,e)}},Cc.prototype.processTask=function(t,e){var n=this;if(\"<response>\"===e.type){var r=this.callbacks[t];delete this.callbacks[t],r&&(e.error?r(Br(e.error)):r(null,Br(e.data)))}else{var i=!1,a=A(this.globalScope)?void 0:[],o=e.hasCallback?function(e,r){i=!0,delete n.cancelCallbacks[t],n.target.postMessage({id:t,type:\"<response>\",sourceMapId:n.mapId,error:e?Nr(e):null,data:Nr(r,a)},a)}:function(t){i=!0},s=null,l=Br(e.data);if(this.parent[e.type])s=this.parent[e.type](e.sourceMapId,l,o);else if(this.parent.getWorkerSource){var c=e.type.split(\".\");s=this.parent.getWorkerSource(e.sourceMapId,c[0],l.source)[c[1]](l,o)}else o(new Error(\"Could not find function \"+e.type));!i&&s&&s.cancel&&(this.cancelCallbacks[t]=s.cancel)}},Cc.prototype.remove=function(){this.invoker.remove(),this.target.removeEventListener(\"message\",this.receive,!1)};var Oc=function(t,e){t&&(e?this.setSouthWest(t).setNorthEast(e):4===t.length?this.setSouthWest([t[0],t[1]]).setNorthEast([t[2],t[3]]):this.setSouthWest(t[0]).setNorthEast(t[1]))};Oc.prototype.setNorthEast=function(t){return this._ne=t instanceof Dc?new Dc(t.lng,t.lat):Dc.convert(t),this},Oc.prototype.setSouthWest=function(t){return this._sw=t instanceof Dc?new Dc(t.lng,t.lat):Dc.convert(t),this},Oc.prototype.extend=function(t){var e,n,r=this._sw,i=this._ne;if(t instanceof Dc)e=t,n=t;else{if(!(t instanceof Oc))return Array.isArray(t)?4===t.length||t.every(Array.isArray)?this.extend(Oc.convert(t)):this.extend(Dc.convert(t)):this;if(n=t._ne,!(e=t._sw)||!n)return this}return r||i?(r.lng=Math.min(e.lng,r.lng),r.lat=Math.min(e.lat,r.lat),i.lng=Math.max(n.lng,i.lng),i.lat=Math.max(n.lat,i.lat)):(this._sw=new Dc(e.lng,e.lat),this._ne=new Dc(n.lng,n.lat)),this},Oc.prototype.getCenter=function(){return new Dc((this._sw.lng+this._ne.lng)/2,(this._sw.lat+this._ne.lat)/2)},Oc.prototype.getSouthWest=function(){return this._sw},Oc.prototype.getNorthEast=function(){return this._ne},Oc.prototype.getNorthWest=function(){return new Dc(this.getWest(),this.getNorth())},Oc.prototype.getSouthEast=function(){return new Dc(this.getEast(),this.getSouth())},Oc.prototype.getWest=function(){return this._sw.lng},Oc.prototype.getSouth=function(){return this._sw.lat},Oc.prototype.getEast=function(){return this._ne.lng},Oc.prototype.getNorth=function(){return this._ne.lat},Oc.prototype.toArray=function(){return[this._sw.toArray(),this._ne.toArray()]},Oc.prototype.toString=function(){return\"LngLatBounds(\"+this._sw.toString()+\", \"+this._ne.toString()+\")\"},Oc.prototype.isEmpty=function(){return!(this._sw&&this._ne)},Oc.prototype.contains=function(t){var e=Dc.convert(t),n=e.lng,r=e.lat,i=this._sw.lng<=n&&n<=this._ne.lng;return this._sw.lng>this._ne.lng&&(i=this._sw.lng>=n&&n>=this._ne.lng),this._sw.lat<=r&&r<=this._ne.lat&&i},Oc.convert=function(t){return!t||t instanceof Oc?t:new Oc(t)};var Dc=function(t,e){if(isNaN(t)||isNaN(e))throw new Error(\"Invalid LngLat object: (\"+t+\", \"+e+\")\");if(this.lng=+t,this.lat=+e,this.lat>90||this.lat<-90)throw new Error(\"Invalid LngLat latitude value: must be between -90 and 90\")};Dc.prototype.wrap=function(){return new Dc(c(this.lng,-180,180),this.lat)},Dc.prototype.toArray=function(){return[this.lng,this.lat]},Dc.prototype.toString=function(){return\"LngLat(\"+this.lng+\", \"+this.lat+\")\"},Dc.prototype.distanceTo=function(t){var e=Math.PI/180,n=this.lat*e,r=t.lat*e,i=Math.sin(n)*Math.sin(r)+Math.cos(n)*Math.cos(r)*Math.cos((t.lng-this.lng)*e);return 6371008.8*Math.acos(Math.min(i,1))},Dc.prototype.toBounds=function(t){void 0===t&&(t=0);var e=360*t/40075017,n=e/Math.cos(Math.PI/180*this.lat);return new Oc(new Dc(this.lng-n,this.lat-e),new Dc(this.lng+n,this.lat+e))},Dc.convert=function(t){if(t instanceof Dc)return t;if(Array.isArray(t)&&(2===t.length||3===t.length))return new Dc(Number(t[0]),Number(t[1]));if(!Array.isArray(t)&&\"object\"==typeof t&&null!==t)return new Dc(Number(\"lng\"in t?t.lng:t.lon),Number(t.lat));throw new Error(\"`LngLatLike` argument must be specified as a LngLat instance, an object {lng: <lng>, lat: <lat>}, an object {lon: <lng>, lat: <lat>}, or an array of [<lng>, <lat>]\")};var Ic=2*Math.PI*6371008.8;function Pc(t){return Ic*Math.cos(t*Math.PI/180)}function Rc(t){return(180+t)/360}function zc(t){return(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+t*Math.PI/360)))/360}function jc(t,e){return t/Pc(e)}function Fc(t){return 360/Math.PI*Math.atan(Math.exp((180-360*t)*Math.PI/180))-90}var Nc=function(t,e,n){void 0===n&&(n=0),this.x=+t,this.y=+e,this.z=+n};Nc.fromLngLat=function(t,e){void 0===e&&(e=0);var n=Dc.convert(t);return new Nc(Rc(n.lng),zc(n.lat),jc(e,n.lat))},Nc.prototype.toLngLat=function(){return new Dc(360*this.x-180,Fc(this.y))},Nc.prototype.toAltitude=function(){return this.z*Pc(Fc(this.y))},Nc.prototype.meterInMercatorCoordinateUnits=function(){return 1/Ic*(t=Fc(this.y),1/Math.cos(t*Math.PI/180));var t};var Bc=function(t,e,n){this.z=t,this.x=e,this.y=n,this.key=Vc(0,t,t,e,n)};Bc.prototype.equals=function(t){return this.z===t.z&&this.x===t.x&&this.y===t.y},Bc.prototype.url=function(t,e){var n,r,i,a,o,s=(r=this.y,i=this.z,a=Ec(256*(n=this.x),256*(r=Math.pow(2,i)-r-1),i),o=Ec(256*(n+1),256*(r+1),i),a[0]+\",\"+a[1]+\",\"+o[0]+\",\"+o[1]),l=function(t,e,n){for(var r,i=\"\",a=t;a>0;a--)i+=(e&(r=1<<a-1)?1:0)+(n&r?2:0);return i}(this.z,this.x,this.y);return t[(this.x+this.y)%t.length].replace(\"{prefix}\",(this.x%16).toString(16)+(this.y%16).toString(16)).replace(\"{z}\",String(this.z)).replace(\"{x}\",String(this.x)).replace(\"{y}\",String(\"tms\"===e?Math.pow(2,this.z)-this.y-1:this.y)).replace(\"{quadkey}\",l).replace(\"{bbox-epsg-3857}\",s)},Bc.prototype.getTilePoint=function(t){var e=Math.pow(2,this.z);return new i(8192*(t.x*e-this.x),8192*(t.y*e-this.y))},Bc.prototype.toString=function(){return this.z+\"/\"+this.x+\"/\"+this.y};var Yc=function(t,e){this.wrap=t,this.canonical=e,this.key=Vc(t,e.z,e.z,e.x,e.y)},Hc=function(t,e,n,r,i){this.overscaledZ=t,this.wrap=e,this.canonical=new Bc(n,+r,+i),this.key=Vc(e,t,n,r,i)};function Vc(t,e,n,r,i){(t*=2)<0&&(t=-1*t-1);var a=1<<n;return(a*a*t+a*i+r).toString(36)+n.toString(36)+e.toString(36)}Hc.prototype.equals=function(t){return this.overscaledZ===t.overscaledZ&&this.wrap===t.wrap&&this.canonical.equals(t.canonical)},Hc.prototype.scaledTo=function(t){var e=this.canonical.z-t;return t>this.canonical.z?new Hc(t,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y):new Hc(t,this.wrap,t,this.canonical.x>>e,this.canonical.y>>e)},Hc.prototype.calculateScaledKey=function(t,e){var n=this.canonical.z-t;return t>this.canonical.z?Vc(this.wrap*+e,t,this.canonical.z,this.canonical.x,this.canonical.y):Vc(this.wrap*+e,t,t,this.canonical.x>>n,this.canonical.y>>n)},Hc.prototype.isChildOf=function(t){if(t.wrap!==this.wrap)return!1;var e=this.canonical.z-t.canonical.z;return 0===t.overscaledZ||t.overscaledZ<this.overscaledZ&&t.canonical.x===this.canonical.x>>e&&t.canonical.y===this.canonical.y>>e},Hc.prototype.children=function(t){if(this.overscaledZ>=t)return[new Hc(this.overscaledZ+1,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y)];var e=this.canonical.z+1,n=2*this.canonical.x,r=2*this.canonical.y;return[new Hc(e,this.wrap,e,n,r),new Hc(e,this.wrap,e,n+1,r),new Hc(e,this.wrap,e,n,r+1),new Hc(e,this.wrap,e,n+1,r+1)]},Hc.prototype.isLessThan=function(t){return this.wrap<t.wrap||!(this.wrap>t.wrap)&&(this.overscaledZ<t.overscaledZ||!(this.overscaledZ>t.overscaledZ)&&(this.canonical.x<t.canonical.x||!(this.canonical.x>t.canonical.x)&&this.canonical.y<t.canonical.y))},Hc.prototype.wrapped=function(){return new Hc(this.overscaledZ,0,this.canonical.z,this.canonical.x,this.canonical.y)},Hc.prototype.unwrapTo=function(t){return new Hc(this.overscaledZ,t,this.canonical.z,this.canonical.x,this.canonical.y)},Hc.prototype.overscaleFactor=function(){return Math.pow(2,this.overscaledZ-this.canonical.z)},Hc.prototype.toUnwrapped=function(){return new Yc(this.wrap,this.canonical)},Hc.prototype.toString=function(){return this.overscaledZ+\"/\"+this.canonical.x+\"/\"+this.canonical.y},Hc.prototype.getTilePoint=function(t){return this.canonical.getTilePoint(new Nc(t.x-this.wrap,t.y))},Rr(\"CanonicalTileID\",Bc),Rr(\"OverscaledTileID\",Hc,{omit:[\"posMatrix\"]});var Uc=function(t,e,n){if(this.uid=t,e.height!==e.width)throw new RangeError(\"DEM tiles must be square\");if(n&&\"mapbox\"!==n&&\"terrarium\"!==n)return x('\"'+n+'\" is not a valid encoding type. Valid types include \"mapbox\" and \"terrarium\".');this.stride=e.height;var r=this.dim=e.height-2;this.data=new Uint32Array(e.data.buffer),this.encoding=n||\"mapbox\";for(var i=0;i<r;i++)this.data[this._idx(-1,i)]=this.data[this._idx(0,i)],this.data[this._idx(r,i)]=this.data[this._idx(r-1,i)],this.data[this._idx(i,-1)]=this.data[this._idx(i,0)],this.data[this._idx(i,r)]=this.data[this._idx(i,r-1)];this.data[this._idx(-1,-1)]=this.data[this._idx(0,0)],this.data[this._idx(r,-1)]=this.data[this._idx(r-1,0)],this.data[this._idx(-1,r)]=this.data[this._idx(0,r-1)],this.data[this._idx(r,r)]=this.data[this._idx(r-1,r-1)]};Uc.prototype.get=function(t,e){var n=new Uint8Array(this.data.buffer),r=4*this._idx(t,e);return(\"terrarium\"===this.encoding?this._unpackTerrarium:this._unpackMapbox)(n[r],n[r+1],n[r+2])},Uc.prototype.getUnpackVector=function(){return\"terrarium\"===this.encoding?[256,1,1/256,32768]:[6553.6,25.6,.1,1e4]},Uc.prototype._idx=function(t,e){if(t<-1||t>=this.dim+1||e<-1||e>=this.dim+1)throw new RangeError(\"out of range source coordinates for DEM data\");return(e+1)*this.stride+(t+1)},Uc.prototype._unpackMapbox=function(t,e,n){return(256*t*256+256*e+n)/10-1e4},Uc.prototype._unpackTerrarium=function(t,e,n){return 256*t+e+n/256-32768},Uc.prototype.getPixels=function(){return new po({width:this.stride,height:this.stride},new Uint8Array(this.data.buffer))},Uc.prototype.backfillBorder=function(t,e,n){if(this.dim!==t.dim)throw new Error(\"dem dimension mismatch\");var r=e*this.dim,i=e*this.dim+this.dim,a=n*this.dim,o=n*this.dim+this.dim;switch(e){case-1:r=i-1;break;case 1:i=r+1}switch(n){case-1:a=o-1;break;case 1:o=a+1}for(var s=-e*this.dim,l=-n*this.dim,c=a;c<o;c++)for(var u=r;u<i;u++)this.data[this._idx(u,c)]=t.data[this._idx(u+s,c+l)]},Rr(\"DEMData\",Uc);var Wc=function(t){this._stringToNumber={},this._numberToString=[];for(var e=0;e<t.length;e++){var n=t[e];this._stringToNumber[n]=e,this._numberToString[e]=n}};Wc.prototype.encode=function(t){return this._stringToNumber[t]},Wc.prototype.decode=function(t){return this._numberToString[t]};var qc=function(t,e,n,r,i){this.type=\"Feature\",this._vectorTileFeature=t,t._z=e,t._x=n,t._y=r,this.properties=t.properties,this.id=i},Gc={geometry:{configurable:!0}};Gc.geometry.get=function(){return void 0===this._geometry&&(this._geometry=this._vectorTileFeature.toGeoJSON(this._vectorTileFeature._x,this._vectorTileFeature._y,this._vectorTileFeature._z).geometry),this._geometry},Gc.geometry.set=function(t){this._geometry=t},qc.prototype.toJSON=function(){var t={geometry:this.geometry};for(var e in this)\"_geometry\"!==e&&\"_vectorTileFeature\"!==e&&(t[e]=this[e]);return t},Object.defineProperties(qc.prototype,Gc);var Xc=function(){this.state={},this.stateChanges={},this.deletedStates={}};Xc.prototype.updateState=function(t,e,n){var r=String(e);if(this.stateChanges[t]=this.stateChanges[t]||{},this.stateChanges[t][r]=this.stateChanges[t][r]||{},u(this.stateChanges[t][r],n),null===this.deletedStates[t])for(var i in this.deletedStates[t]={},this.state[t])i!==r&&(this.deletedStates[t][i]=null);else if(this.deletedStates[t]&&null===this.deletedStates[t][r])for(var a in this.deletedStates[t][r]={},this.state[t][r])n[a]||(this.deletedStates[t][r][a]=null);else for(var o in n)this.deletedStates[t]&&this.deletedStates[t][r]&&null===this.deletedStates[t][r][o]&&delete this.deletedStates[t][r][o]},Xc.prototype.removeFeatureState=function(t,e,n){if(null!==this.deletedStates[t]){var r=String(e);if(this.deletedStates[t]=this.deletedStates[t]||{},n&&void 0!==e)null!==this.deletedStates[t][r]&&(this.deletedStates[t][r]=this.deletedStates[t][r]||{},this.deletedStates[t][r][n]=null);else if(void 0!==e)if(this.stateChanges[t]&&this.stateChanges[t][r])for(n in this.deletedStates[t][r]={},this.stateChanges[t][r])this.deletedStates[t][r][n]=null;else this.deletedStates[t][r]=null;else this.deletedStates[t]=null}},Xc.prototype.getState=function(t,e){var n=String(e),r=u({},(this.state[t]||{})[n],(this.stateChanges[t]||{})[n]);if(null===this.deletedStates[t])return{};if(this.deletedStates[t]){var i=this.deletedStates[t][e];if(null===i)return{};for(var a in i)delete r[a]}return r},Xc.prototype.initializeTileState=function(t,e){t.setFeatureState(this.state,e)},Xc.prototype.coalesceChanges=function(t,e){var n={};for(var r in this.stateChanges){this.state[r]=this.state[r]||{};var i={};for(var a in this.stateChanges[r])this.state[r][a]||(this.state[r][a]={}),u(this.state[r][a],this.stateChanges[r][a]),i[a]=this.state[r][a];n[r]=i}for(var o in this.deletedStates){this.state[o]=this.state[o]||{};var s={};if(null===this.deletedStates[o])for(var l in this.state[o])s[l]={},this.state[o][l]={};else for(var c in this.deletedStates[o]){if(null===this.deletedStates[o][c])this.state[o][c]={};else for(var h=0,d=Object.keys(this.deletedStates[o][c]);h<d.length;h+=1)delete this.state[o][c][d[h]];s[c]=this.state[o][c]}n[o]=n[o]||{},u(n[o],s)}if(this.stateChanges={},this.deletedStates={},0!==Object.keys(n).length)for(var f in t)t[f].setFeatureState(n,e)};var Zc=function(t,e){this.tileID=t,this.x=t.canonical.x,this.y=t.canonical.y,this.z=t.canonical.z,this.grid=new Er(8192,16,0),this.grid3D=new Er(8192,16,0),this.featureIndexArray=new na,this.promoteId=e};function Jc(t,e,n,r,i){return y(t,(function(t,a){var o=e instanceof di?e.get(a):null;return o&&o.evaluate?o.evaluate(n,r,i):o}))}function Kc(t){for(var e=1/0,n=1/0,r=-1/0,i=-1/0,a=0,o=t;a<o.length;a+=1){var s=o[a];e=Math.min(e,s.x),n=Math.min(n,s.y),r=Math.max(r,s.x),i=Math.max(i,s.y)}return{minX:e,minY:n,maxX:r,maxY:i}}function $c(t,e){return e-t}Zc.prototype.insert=function(t,e,n,r,i,a){var o=this.featureIndexArray.length;this.featureIndexArray.emplaceBack(n,r,i);for(var s=a?this.grid3D:this.grid,l=0;l<e.length;l++){for(var c=e[l],u=[1/0,1/0,-1/0,-1/0],h=0;h<c.length;h++){var d=c[h];u[0]=Math.min(u[0],d.x),u[1]=Math.min(u[1],d.y),u[2]=Math.max(u[2],d.x),u[3]=Math.max(u[3],d.y)}u[0]<8192&&u[1]<8192&&u[2]>=0&&u[3]>=0&&s.insert(o,u[0],u[1],u[2],u[3])}},Zc.prototype.loadVTLayers=function(){return this.vtLayers||(this.vtLayers=new ms.VectorTile(new Us(this.rawTileData)).layers,this.sourceLayerCoder=new Wc(this.vtLayers?Object.keys(this.vtLayers).sort():[\"_geojsonTileLayer\"])),this.vtLayers},Zc.prototype.query=function(t,e,n,r){var a=this;this.loadVTLayers();for(var o=t.params||{},s=8192/t.tileSize/t.scale,l=rr(o.filter),c=t.queryGeometry,u=t.queryPadding*s,h=Kc(c),d=this.grid.query(h.minX-u,h.minY-u,h.maxX+u,h.maxY+u),f=Kc(t.cameraQueryGeometry),p=0,m=this.grid3D.query(f.minX-u,f.minY-u,f.maxX+u,f.maxY+u,(function(e,n,r,a){return function(t,e,n,r,a){for(var o=0,s=t;o<s.length;o+=1){var l=s[o];if(e<=l.x&&n<=l.y&&r>=l.x&&a>=l.y)return!0}var c=[new i(e,n),new i(e,a),new i(r,a),new i(r,n)];if(t.length>2)for(var u=0,h=c;u<h.length;u+=1)if(Ga(t,h[u]))return!0;for(var d=0;d<t.length-1;d++)if(Xa(t[d],t[d+1],c))return!0;return!1}(t.cameraQueryGeometry,e-u,n-u,r+u,a+u)}));p<m.length;p+=1)d.push(m[p]);d.sort($c);for(var g,y={},v=function(i){var u=d[i];if(u!==g){g=u;var h=a.featureIndexArray.get(u),f=null;a.loadMatchingFeature(y,h.bucketIndex,h.sourceLayerIndex,h.featureIndex,l,o.layers,o.availableImages,e,n,r,(function(e,n,r){return f||(f=Ra(e)),n.queryIntersectsFeature(c,e,r,f,a.z,t.transform,s,t.pixelPosMatrix)}))}},_=0;_<d.length;_++)v(_);return y},Zc.prototype.loadMatchingFeature=function(t,e,n,r,i,a,o,s,l,c,u){var h=this.bucketLayerIDs[e];if(!a||function(t,e){for(var n=0;n<t.length;n++)if(e.indexOf(t[n])>=0)return!0;return!1}(a,h)){var d=this.sourceLayerCoder.decode(n),f=this.vtLayers[d].feature(r);if(i.filter(new ii(this.tileID.overscaledZ),f))for(var p=this.getId(f,d),m=0;m<h.length;m++){var g=h[m];if(!(a&&a.indexOf(g)<0)){var y=s[g];if(y){var v={};void 0!==p&&c&&(v=c.getState(y.sourceLayer||\"_geojsonTileLayer\",p));var _=l[g];_.paint=Jc(_.paint,y.paint,f,v,o),_.layout=Jc(_.layout,y.layout,f,v,o);var b=!u||u(f,y,v);if(b){var x=new qc(f,this.z,this.x,this.y,p);x.layer=_;var w=t[g];void 0===w&&(w=t[g]=[]),w.push({featureIndex:r,feature:x,intersectionZ:b})}}}}}},Zc.prototype.lookupSymbolFeatures=function(t,e,n,r,i,a,o,s){var l={};this.loadVTLayers();for(var c=rr(i),u=0,h=t;u<h.length;u+=1)this.loadMatchingFeature(l,n,r,h[u],c,a,o,s,e);return l},Zc.prototype.hasLayer=function(t){for(var e=0,n=this.bucketLayerIDs;e<n.length;e+=1)for(var r=0,i=n[e];r<i.length;r+=1)if(t===i[r])return!0;return!1},Zc.prototype.getId=function(t,e){var n=t.id;return this.promoteId&&\"boolean\"==typeof(n=t.properties[\"string\"==typeof this.promoteId?this.promoteId:this.promoteId[e]])&&(n=Number(n)),n},Rr(\"FeatureIndex\",Zc,{omit:[\"rawTileData\",\"sourceLayerCoder\"]});var Qc=function(t,e){this.tileID=t,this.uid=d(),this.uses=0,this.tileSize=e,this.buckets={},this.expirationTime=null,this.queryPadding=0,this.hasSymbolBuckets=!1,this.hasRTLText=!1,this.dependencies={},this.expiredRequestCount=0,this.state=\"loading\"};Qc.prototype.registerFadeDuration=function(t){var e=t+this.timeAdded;e<z.now()||this.fadeEndTime&&e<this.fadeEndTime||(this.fadeEndTime=e)},Qc.prototype.wasRequested=function(){return\"errored\"===this.state||\"loaded\"===this.state||\"reloading\"===this.state},Qc.prototype.loadVectorData=function(t,e,n){if(this.hasData()&&this.unloadVectorData(),this.state=\"loaded\",t){for(var r in t.featureIndex&&(this.latestFeatureIndex=t.featureIndex,t.rawTileData?(this.latestRawTileData=t.rawTileData,this.latestFeatureIndex.rawTileData=t.rawTileData):this.latestRawTileData&&(this.latestFeatureIndex.rawTileData=this.latestRawTileData)),this.collisionBoxArray=t.collisionBoxArray,this.buckets=function(t,e){var n={};if(!e)return n;for(var r=function(){var t=a[i],r=t.layerIds.map((function(t){return e.getLayer(t)})).filter(Boolean);if(0!==r.length){t.layers=r,t.stateDependentLayerIds&&(t.stateDependentLayers=t.stateDependentLayerIds.map((function(t){return r.filter((function(e){return e.id===t}))[0]})));for(var o=0,s=r;o<s.length;o+=1)n[s[o].id]=t}},i=0,a=t;i<a.length;i+=1)r();return n}(t.buckets,e.style),this.hasSymbolBuckets=!1,this.buckets){var i=this.buckets[r];if(i instanceof hc){if(this.hasSymbolBuckets=!0,!n)break;i.justReloaded=!0}}if(this.hasRTLText=!1,this.hasSymbolBuckets)for(var a in this.buckets){var o=this.buckets[a];if(o instanceof hc&&o.hasRTLText){this.hasRTLText=!0,ri.isLoading()||ri.isLoaded()||\"deferred\"!==ei()||ni();break}}for(var s in this.queryPadding=0,this.buckets){var l=this.buckets[s];this.queryPadding=Math.max(this.queryPadding,e.style.getLayer(s).queryRadius(l))}t.imageAtlas&&(this.imageAtlas=t.imageAtlas),t.glyphAtlasImage&&(this.glyphAtlasImage=t.glyphAtlasImage)}else this.collisionBoxArray=new Xi},Qc.prototype.unloadVectorData=function(){for(var t in this.buckets)this.buckets[t].destroy();this.buckets={},this.imageAtlasTexture&&this.imageAtlasTexture.destroy(),this.imageAtlas&&(this.imageAtlas=null),this.glyphAtlasTexture&&this.glyphAtlasTexture.destroy(),this.latestFeatureIndex=null,this.state=\"unloaded\"},Qc.prototype.getBucket=function(t){return this.buckets[t.id]},Qc.prototype.upload=function(t){for(var e in this.buckets){var n=this.buckets[e];n.uploadPending()&&n.upload(t)}var r=t.gl;this.imageAtlas&&!this.imageAtlas.uploaded&&(this.imageAtlasTexture=new Ac(t,this.imageAtlas.image,r.RGBA),this.imageAtlas.uploaded=!0),this.glyphAtlasImage&&(this.glyphAtlasTexture=new Ac(t,this.glyphAtlasImage,r.ALPHA),this.glyphAtlasImage=null)},Qc.prototype.prepare=function(t){this.imageAtlas&&this.imageAtlas.patchUpdatedImages(t,this.imageAtlasTexture)},Qc.prototype.queryRenderedFeatures=function(t,e,n,r,i,a,o,s,l,c){return this.latestFeatureIndex&&this.latestFeatureIndex.rawTileData?this.latestFeatureIndex.query({queryGeometry:r,cameraQueryGeometry:i,scale:a,tileSize:this.tileSize,pixelPosMatrix:c,transform:s,params:o,queryPadding:this.queryPadding*l},t,e,n):{}},Qc.prototype.querySourceFeatures=function(t,e){var n=this.latestFeatureIndex;if(n&&n.rawTileData){var r=n.loadVTLayers(),i=e?e.sourceLayer:\"\",a=r._geojsonTileLayer||r[i];if(a)for(var o=rr(e&&e.filter),s=this.tileID.canonical,l=s.z,c=s.x,u=s.y,h={z:l,x:c,y:u},d=0;d<a.length;d++){var f=a.feature(d);if(o.filter(new ii(this.tileID.overscaledZ),f)){var p=n.getId(f,i),m=new qc(f,l,c,u,p);m.tile=h,t.push(m)}}}},Qc.prototype.hasData=function(){return\"loaded\"===this.state||\"reloading\"===this.state||\"expired\"===this.state},Qc.prototype.patternsLoaded=function(){return this.imageAtlas&&!!Object.keys(this.imageAtlas.patternPositions).length},Qc.prototype.setExpiryData=function(t){var e=this.expirationTime;if(t.cacheControl){var n=T(t.cacheControl);n[\"max-age\"]&&(this.expirationTime=Date.now()+1e3*n[\"max-age\"])}else t.expires&&(this.expirationTime=new Date(t.expires).getTime());if(this.expirationTime){var r=Date.now(),i=!1;if(this.expirationTime>r)i=!1;else if(e)if(this.expirationTime<e)i=!0;else{var a=this.expirationTime-e;a?this.expirationTime=r+Math.max(a,3e4):i=!0}else i=!0;i?(this.expiredRequestCount++,this.state=\"expired\"):this.expiredRequestCount=0}},Qc.prototype.getExpiryTimeout=function(){if(this.expirationTime)return this.expiredRequestCount?1e3*(1<<Math.min(this.expiredRequestCount-1,31)):Math.min(this.expirationTime-(new Date).getTime(),Math.pow(2,31)-1)},Qc.prototype.setFeatureState=function(t,e){if(this.latestFeatureIndex&&this.latestFeatureIndex.rawTileData&&0!==Object.keys(t).length){var n=this.latestFeatureIndex.loadVTLayers();for(var r in this.buckets)if(e.style.hasLayer(r)){var i=this.buckets[r],a=i.layers[0].sourceLayer||\"_geojsonTileLayer\",o=n[a],s=t[a];if(o&&s&&0!==Object.keys(s).length){i.update(s,o,this.imageAtlas&&this.imageAtlas.patternPositions||{});var l=e&&e.style&&e.style.getLayer(r);l&&(this.queryPadding=Math.max(this.queryPadding,l.queryRadius(i)))}}}},Qc.prototype.holdingForFade=function(){return void 0!==this.symbolFadeHoldUntil},Qc.prototype.symbolFadeFinished=function(){return!this.symbolFadeHoldUntil||this.symbolFadeHoldUntil<z.now()},Qc.prototype.clearFadeHold=function(){this.symbolFadeHoldUntil=void 0},Qc.prototype.setHoldDuration=function(t){this.symbolFadeHoldUntil=z.now()+t},Qc.prototype.setDependencies=function(t,e){for(var n={},r=0,i=e;r<i.length;r+=1)n[i[r]]=!0;this.dependencies[t]=n},Qc.prototype.hasDependency=function(t,e){for(var n=0,r=t;n<r.length;n+=1){var i=this.dependencies[r[n]];if(i)for(var a=0,o=e;a<o.length;a+=1)if(i[o[a]])return!0}return!1};var tu=self.performance,eu=function(t){this._marks={start:[t.url,\"start\"].join(\"#\"),end:[t.url,\"end\"].join(\"#\"),measure:t.url.toString()},tu.mark(this._marks.start)};eu.prototype.finish=function(){tu.mark(this._marks.end);var t=tu.getEntriesByName(this._marks.measure);return 0===t.length&&(tu.measure(this._marks.measure,this._marks.start,this._marks.end),t=tu.getEntriesByName(this._marks.measure),tu.clearMarks(this._marks.start),tu.clearMarks(this._marks.end),tu.clearMeasures(this._marks.measure)),t},t.Actor=Cc,t.AlphaImage=fo,t.CanonicalTileID=Bc,t.CollisionBoxArray=Xi,t.Color=Kt,t.DEMData=Uc,t.DataConstantProperty=fi,t.DictionaryCoder=Wc,t.EXTENT=8192,t.ErrorEvent=Mt,t.EvaluationParameters=ii,t.Event=kt,t.Evented=Tt,t.FeatureIndex=Zc,t.FillBucket=ns,t.FillExtrusionBucket=_s,t.ImageAtlas=pl,t.ImagePosition=dl,t.LineBucket=Cs,t.LngLat=Dc,t.LngLatBounds=Oc,t.MercatorCoordinate=Nc,t.ONE_EM=24,t.OverscaledTileID=Hc,t.Point=i,t.Point$1=i,t.Properties=vi,t.Protobuf=Us,t.RGBAImage=po,t.RequestManager=V,t.RequestPerformance=eu,t.ResourceType=dt,t.SegmentVector=ia,t.SourceFeatureState=Xc,t.StructArrayLayout1ui2=Ui,t.StructArrayLayout2f1f2i16=Ri,t.StructArrayLayout2i4=Ti,t.StructArrayLayout3ui6=ji,t.StructArrayLayout4i8=Si,t.SymbolBucket=hc,t.Texture=Ac,t.Tile=Qc,t.Transitionable=si,t.Uniform1f=ya,t.Uniform1i=ga,t.Uniform2f=va,t.Uniform3f=_a,t.Uniform4f=ba,t.UniformColor=xa,t.UniformMatrix4f=ka,t.UnwrappedTileID=Yc,t.ValidationError=At,t.WritingMode=ml,t.ZoomHistory=Yr,t.add=function(t,e,n){return t[0]=e[0]+n[0],t[1]=e[1]+n[1],t[2]=e[2]+n[2],t},t.addDynamicAttributes=sc,t.asyncAll=function(t,e,n){if(!t.length)return n(null,[]);var r=t.length,i=new Array(t.length),a=null;t.forEach((function(t,o){e(t,(function(t,e){t&&(a=t),i[o]=e,0==--r&&n(a,i)}))}))},t.bezier=o,t.bindAll=m,t.browser=z,t.cacheEntryPossiblyAdded=function(t){++ut>ot&&(t.getActor().send(\"enforceCacheSizeLimit\",at),ut=0)},t.clamp=l,t.clearTileCache=function(t){var e=self.caches.delete(\"mapbox-tiles\");t&&e.catch(t).then((function(){return t()}))},t.clipLine=Bl,t.clone=function(t){var e=new to(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e},t.clone$1=_,t.clone$2=function(t){var e=new to(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e},t.collisionCircleLayout=Ns,t.config=j,t.create=function(){var t=new to(16);return to!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t},t.create$1=function(){var t=new to(9);return to!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t},t.create$2=function(){var t=new to(4);return to!=Float32Array&&(t[1]=0,t[2]=0),t[0]=1,t[3]=1,t},t.createCommonjsModule=e,t.createExpression=Un,t.createLayout=ki,t.createStyleLayer=function(t){return\"custom\"===t.type?new bc(t):new xc[t.type](t)},t.cross=function(t,e,n){var r=e[0],i=e[1],a=e[2],o=n[0],s=n[1],l=n[2];return t[0]=i*l-a*s,t[1]=a*o-r*l,t[2]=r*s-i*o,t},t.deepEqual=function t(e,n){if(Array.isArray(e)){if(!Array.isArray(n)||e.length!==n.length)return!1;for(var r=0;r<e.length;r++)if(!t(e[r],n[r]))return!1;return!0}if(\"object\"==typeof e&&null!==e&&null!==n){if(\"object\"!=typeof n)return!1;if(Object.keys(e).length!==Object.keys(n).length)return!1;for(var i in e)if(!t(e[i],n[i]))return!1;return!0}return e===n},t.dot=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]},t.dot$1=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]},t.ease=s,t.emitValidationErrors=Cr,t.endsWith=g,t.enforceCacheSizeLimit=function(t){st(),$&&$.then((function(e){e.keys().then((function(n){for(var r=0;r<n.length-t;r++)e.delete(n[r])}))}))},t.evaluateSizeForFeature=Ol,t.evaluateSizeForZoom=Dl,t.evaluateVariableOffset=Ql,t.evented=ti,t.extend=u,t.featureFilter=rr,t.filterObject=v,t.fromRotation=function(t,e){var n=Math.sin(e),r=Math.cos(e);return t[0]=r,t[1]=n,t[2]=0,t[3]=-n,t[4]=r,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},t.getAnchorAlignment=Sl,t.getAnchorJustification=tc,t.getArrayBuffer=vt,t.getImage=bt,t.getJSON=function(t,e){return yt(u(t,{type:\"json\"}),e)},t.getRTLTextPluginStatus=ei,t.getReferrer=gt,t.getVideo=function(t,e){var n,r,i=self.document.createElement(\"video\");i.muted=!0,i.onloadstart=function(){e(null,i)};for(var a=0;a<t.length;a++){var o=self.document.createElement(\"source\");n=t[a],r=void 0,(r=self.document.createElement(\"a\")).href=n,(r.protocol!==self.document.location.protocol||r.host!==self.document.location.host)&&(i.crossOrigin=\"Anonymous\"),o.src=t[a],i.appendChild(o)}return{cancel:function(){}}},t.identity=eo,t.invert=function(t,e){var n=e[0],r=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],c=e[7],u=e[8],h=e[9],d=e[10],f=e[11],p=e[12],m=e[13],g=e[14],y=e[15],v=n*s-r*o,_=n*l-i*o,b=n*c-a*o,x=r*l-i*s,w=r*c-a*s,k=i*c-a*l,M=u*m-h*p,T=u*g-d*p,S=u*y-f*p,A=h*g-d*m,L=h*y-f*m,C=d*y-f*g,E=v*C-_*L+b*A+x*S-w*T+k*M;return E?(t[0]=(s*C-l*L+c*A)*(E=1/E),t[1]=(i*L-r*C-a*A)*E,t[2]=(m*k-g*w+y*x)*E,t[3]=(d*w-h*k-f*x)*E,t[4]=(l*S-o*C-c*T)*E,t[5]=(n*C-i*S+a*T)*E,t[6]=(g*b-p*k-y*_)*E,t[7]=(u*k-d*b+f*_)*E,t[8]=(o*L-s*S+c*M)*E,t[9]=(r*S-n*L-a*M)*E,t[10]=(p*w-m*b+y*v)*E,t[11]=(h*b-u*w-f*v)*E,t[12]=(s*T-o*A-l*M)*E,t[13]=(n*A-r*T+i*M)*E,t[14]=(m*_-p*x-g*v)*E,t[15]=(u*x-h*_+d*v)*E,t):null},t.isChar=Hr,t.isMapboxURL=U,t.keysDifference=function(t,e){var n=[];for(var r in t)r in e||n.push(r);return n},t.makeRequest=yt,t.mapObject=y,t.mercatorXfromLng=Rc,t.mercatorYfromLat=zc,t.mercatorZfromAltitude=jc,t.mul=io,t.multiply=no,t.mvt=ms,t.normalize=function(t,e){var n=e[0],r=e[1],i=e[2],a=n*n+r*r+i*i;return a>0&&(a=1/Math.sqrt(a)),t[0]=e[0]*a,t[1]=e[1]*a,t[2]=e[2]*a,t},t.number=Ye,t.offscreenCanvasSupported=ht,t.ortho=function(t,e,n,r,i,a,o){var s=1/(e-n),l=1/(r-i),c=1/(a-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*c,t[11]=0,t[12]=(e+n)*s,t[13]=(i+r)*l,t[14]=(o+a)*c,t[15]=1,t},t.parseGlyphPBF=function(t){return new Us(t).readFields(ll,[])},t.pbf=Us,t.performSymbolLayout=function(t,e,n,r,i,a,o){t.createArrays(),t.tilePixelRatio=8192/(512*t.overscaling),t.compareText={},t.iconsNeedLinear=!1;var s=t.layers[0].layout,l=t.layers[0]._unevaluatedLayout._values,c={};if(\"composite\"===t.textSizeData.kind){var u=t.textSizeData,h=u.maxZoom;c.compositeTextSizes=[l[\"text-size\"].possiblyEvaluate(new ii(u.minZoom),o),l[\"text-size\"].possiblyEvaluate(new ii(h),o)]}if(\"composite\"===t.iconSizeData.kind){var d=t.iconSizeData,f=d.maxZoom;c.compositeIconSizes=[l[\"icon-size\"].possiblyEvaluate(new ii(d.minZoom),o),l[\"icon-size\"].possiblyEvaluate(new ii(f),o)]}c.layoutTextSize=l[\"text-size\"].possiblyEvaluate(new ii(t.zoom+1),o),c.layoutIconSize=l[\"icon-size\"].possiblyEvaluate(new ii(t.zoom+1),o),c.textMaxSize=l[\"text-size\"].possiblyEvaluate(new ii(18));for(var p=24*s.get(\"text-line-height\"),m=\"map\"===s.get(\"text-rotation-alignment\")&&\"point\"!==s.get(\"symbol-placement\"),g=s.get(\"text-keep-upright\"),y=s.get(\"text-size\"),v=function(){var a=b[_],l=s.get(\"text-font\").evaluate(a,{},o).join(\",\"),u=y.evaluate(a,{},o),h=c.layoutTextSize.evaluate(a,{},o),d=c.layoutIconSize.evaluate(a,{},o),f={horizontal:{},vertical:void 0},v=a.text,w=[0,0];if(v){var k=v.toString(),M=24*s.get(\"text-letter-spacing\").evaluate(a,{},o),T=function(t){for(var e=0,n=t;e<n.length;e+=1)if(r=n[e].charCodeAt(0),Hr.Arabic(r)||Hr[\"Arabic Supplement\"](r)||Hr[\"Arabic Extended-A\"](r)||Hr[\"Arabic Presentation Forms-A\"](r)||Hr[\"Arabic Presentation Forms-B\"](r))return!1;var r;return!0}(k)?M:0,S=s.get(\"text-anchor\").evaluate(a,{},o),A=s.get(\"text-variable-anchor\");if(!A){var L=s.get(\"text-radial-offset\").evaluate(a,{},o);w=L?Ql(S,[24*L,$l]):s.get(\"text-offset\").evaluate(a,{},o).map((function(t){return 24*t}))}var C=m?\"center\":s.get(\"text-justify\").evaluate(a,{},o),E=s.get(\"symbol-placement\"),O=\"point\"===E?24*s.get(\"text-max-width\").evaluate(a,{},o):0,D=function(){t.allowVerticalPlacement&&Vr(k)&&(f.vertical=vl(v,e,n,i,l,O,p,S,\"left\",T,w,ml.vertical,!0,E,h,u))};if(!m&&A){for(var I=\"auto\"===C?A.map((function(t){return tc(t)})):[C],P=!1,R=0;R<I.length;R++){var z=I[R];if(!f.horizontal[z])if(P)f.horizontal[z]=f.horizontal[0];else{var j=vl(v,e,n,i,l,O,p,\"center\",z,T,w,ml.horizontal,!1,E,h,u);j&&(f.horizontal[z]=j,P=1===j.positionedLines.length)}}D()}else{\"auto\"===C&&(C=tc(S));var F=vl(v,e,n,i,l,O,p,S,C,T,w,ml.horizontal,!1,E,h,u);F&&(f.horizontal[C]=F),D(),Vr(k)&&m&&g&&(f.vertical=vl(v,e,n,i,l,O,p,S,C,T,w,ml.vertical,!1,E,h,u))}}var N=void 0,B=!1;if(a.icon&&a.icon.name){var Y=r[a.icon.name];Y&&(N=function(t,e,n){var r=Sl(n),i=e[0]-t.displaySize[0]*r.horizontalAlign,a=e[1]-t.displaySize[1]*r.verticalAlign;return{image:t,top:a,bottom:a+t.displaySize[1],left:i,right:i+t.displaySize[0]}}(i[a.icon.name],s.get(\"icon-offset\").evaluate(a,{},o),s.get(\"icon-anchor\").evaluate(a,{},o)),B=Y.sdf,void 0===t.sdfIcons?t.sdfIcons=Y.sdf:t.sdfIcons!==Y.sdf&&x(\"Style sheet warning: Cannot mix SDF and non-SDF icons in one buffer\"),(Y.pixelRatio!==t.pixelRatio||0!==s.get(\"icon-rotate\").constantOr(1))&&(t.iconsNeedLinear=!0))}var H=nc(f.horizontal)||f.vertical;t.iconsInText=!!H&&H.iconsInText,(H||N)&&function(t,e,n,r,i,a,o,s,l,c,u){var h=a.textMaxSize.evaluate(e,{});void 0===h&&(h=o);var d,f=t.layers[0].layout,p=f.get(\"icon-offset\").evaluate(e,{},u),m=nc(n.horizontal),g=o/24,y=t.tilePixelRatio*g,v=t.tilePixelRatio*h/24,_=t.tilePixelRatio*s,b=t.tilePixelRatio*f.get(\"symbol-spacing\"),w=f.get(\"text-padding\")*t.tilePixelRatio,k=f.get(\"icon-padding\")*t.tilePixelRatio,M=f.get(\"text-max-angle\")/180*Math.PI,T=\"map\"===f.get(\"text-rotation-alignment\")&&\"point\"!==f.get(\"symbol-placement\"),S=\"map\"===f.get(\"icon-rotation-alignment\")&&\"point\"!==f.get(\"symbol-placement\"),A=f.get(\"symbol-placement\"),L=b/2,C=f.get(\"icon-text-fit\");r&&\"none\"!==C&&(t.allowVerticalPlacement&&n.vertical&&(d=Ll(r,n.vertical,C,f.get(\"icon-text-fit-padding\"),p,g)),m&&(r=Ll(r,m,C,f.get(\"icon-text-fit-padding\"),p,g)));var E=function(s,h){h.x<0||h.x>=8192||h.y<0||h.y>=8192||function(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g,y,v,_,b,w,k,M,T){var S,A,L,C,E,O=t.addToLineVertexArray(e,n),D=0,I=0,P=0,R=0,z=-1,j=-1,F={},N=ca(\"\"),B=0,Y=0;if(void 0===s._unevaluatedLayout.getValue(\"text-radial-offset\")?(B=(S=s.layout.get(\"text-offset\").evaluate(b,{},M).map((function(t){return 24*t})))[0],Y=S[1]):(B=24*s.layout.get(\"text-radial-offset\").evaluate(b,{},M),Y=$l),t.allowVerticalPlacement&&r.vertical){var H=s.layout.get(\"text-rotate\").evaluate(b,{},M)+90;C=new ql(l,e,c,u,h,r.vertical,d,f,p,H),o&&(E=new ql(l,e,c,u,h,o,g,y,p,H))}if(i){var V=s.layout.get(\"icon-rotate\").evaluate(b,{}),U=\"none\"!==s.layout.get(\"icon-text-fit\"),W=Yl(i,V,k,U),q=o?Yl(o,V,k,U):void 0;L=new ql(l,e,c,u,h,i,g,y,!1,V),D=4*W.length;var G=t.iconSizeData,X=null;\"source\"===G.kind?(X=[128*s.layout.get(\"icon-size\").evaluate(b,{})])[0]>32640&&x(t.layerIds[0]+': Value for \"icon-size\" is >= 255. Reduce your \"icon-size\".'):\"composite\"===G.kind&&((X=[128*w.compositeIconSizes[0].evaluate(b,{},M),128*w.compositeIconSizes[1].evaluate(b,{},M)])[0]>32640||X[1]>32640)&&x(t.layerIds[0]+': Value for \"icon-size\" is >= 255. Reduce your \"icon-size\".'),t.addSymbols(t.icon,W,X,_,v,b,!1,e,O.lineStartIndex,O.lineLength,-1,M),z=t.icon.placedSymbolArray.length-1,q&&(I=4*q.length,t.addSymbols(t.icon,q,X,_,v,b,ml.vertical,e,O.lineStartIndex,O.lineLength,-1,M),j=t.icon.placedSymbolArray.length-1)}for(var Z in r.horizontal){var J=r.horizontal[Z];if(!A){N=ca(J.text);var K=s.layout.get(\"text-rotate\").evaluate(b,{},M);A=new ql(l,e,c,u,h,J,d,f,p,K)}var $=1===J.positionedLines.length;if(P+=ec(t,e,J,a,s,p,b,m,O,r.vertical?ml.horizontal:ml.horizontalOnly,$?Object.keys(r.horizontal):[Z],F,z,w,M),$)break}r.vertical&&(R+=ec(t,e,r.vertical,a,s,p,b,m,O,ml.vertical,[\"vertical\"],F,j,w,M));var Q=A?A.boxStartIndex:t.collisionBoxArray.length,tt=A?A.boxEndIndex:t.collisionBoxArray.length,et=C?C.boxStartIndex:t.collisionBoxArray.length,nt=C?C.boxEndIndex:t.collisionBoxArray.length,rt=L?L.boxStartIndex:t.collisionBoxArray.length,it=L?L.boxEndIndex:t.collisionBoxArray.length,at=E?E.boxStartIndex:t.collisionBoxArray.length,ot=E?E.boxEndIndex:t.collisionBoxArray.length,st=-1,lt=function(t,e){return t&&t.circleDiameter?Math.max(t.circleDiameter,e):e};st=lt(A,st),st=lt(C,st),st=lt(L,st);var ct=(st=lt(E,st))>-1?1:0;ct&&(st*=T/24),t.glyphOffsetArray.length>=hc.MAX_GLYPHS&&x(\"Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907\"),void 0!==b.sortKey&&t.addToSortKeyRanges(t.symbolInstances.length,b.sortKey),t.symbolInstances.emplaceBack(e.x,e.y,F.right>=0?F.right:-1,F.center>=0?F.center:-1,F.left>=0?F.left:-1,F.vertical||-1,z,j,N,Q,tt,et,nt,rt,it,at,ot,c,P,R,D,I,ct,0,d,B,Y,st)}(t,h,s,n,r,i,d,t.layers[0],t.collisionBoxArray,e.index,e.sourceLayerIndex,t.index,y,w,T,l,_,k,S,p,e,a,c,u,o)};if(\"line\"===A)for(var O=0,D=Bl(e.geometry,0,0,8192,8192);O<D.length;O+=1)for(var I=D[O],P=0,R=Nl(I,b,M,n.vertical||m,r,24,v,t.overscaling,8192);P<R.length;P+=1){var z=R[P];m&&rc(t,m.text,L,z)||E(I,z)}else if(\"line-center\"===A)for(var j=0,F=e.geometry;j<F.length;j+=1){var N=F[j];if(N.length>1){var B=Fl(N,M,n.vertical||m,r,24,v);B&&E(N,B)}}else if(\"Polygon\"===e.type)for(var Y=0,H=$o(e.geometry,0);Y<H.length;Y+=1){var V=H[Y],U=Zl(V,16);E(V[0],new Cl(U.x,U.y,0))}else if(\"LineString\"===e.type)for(var W=0,q=e.geometry;W<q.length;W+=1){var G=q[W];E(G,new Cl(G[0].x,G[0].y,0))}else if(\"Point\"===e.type)for(var X=0,Z=e.geometry;X<Z.length;X+=1)for(var J=0,K=Z[X];J<K.length;J+=1){var $=K[J];E([$],new Cl($.x,$.y,0))}}(t,a,f,N,r,c,h,d,w,B,o)},_=0,b=t.features;_<b.length;_+=1)v();a&&t.generateCollisionDebugBuffers()},t.perspective=function(t,e,n,r,i){var a,o=1/Math.tan(e/2);return t[0]=o/n,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=o,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,null!=i&&i!==1/0?(t[10]=(i+r)*(a=1/(r-i)),t[14]=2*i*r*a):(t[10]=-1,t[14]=-2*r),t},t.pick=function(t,e){for(var n={},r=0;r<e.length;r++){var i=e[r];i in t&&(n[i]=t[i])}return n},t.plugin=ri,t.polygonIntersectsPolygon=Fa,t.postMapLoadEvent=it,t.postTurnstileEvent=nt,t.potpack=hl,t.refProperties=[\"type\",\"source\",\"source-layer\",\"minzoom\",\"maxzoom\",\"filter\",\"layout\"],t.register=Rr,t.registerForPluginStateChange=function(t){return t({pluginStatus:Jr,pluginURL:Kr}),ti.on(\"pluginStateChange\",t),t},t.rotate=function(t,e,n){var r=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(n),l=Math.cos(n);return t[0]=r*l+a*s,t[1]=i*l+o*s,t[2]=r*-s+a*l,t[3]=i*-s+o*l,t},t.rotateX=function(t,e,n){var r=Math.sin(n),i=Math.cos(n),a=e[4],o=e[5],s=e[6],l=e[7],c=e[8],u=e[9],h=e[10],d=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=a*i+c*r,t[5]=o*i+u*r,t[6]=s*i+h*r,t[7]=l*i+d*r,t[8]=c*i-a*r,t[9]=u*i-o*r,t[10]=h*i-s*r,t[11]=d*i-l*r,t},t.rotateZ=function(t,e,n){var r=Math.sin(n),i=Math.cos(n),a=e[0],o=e[1],s=e[2],l=e[3],c=e[4],u=e[5],h=e[6],d=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i+c*r,t[1]=o*i+u*r,t[2]=s*i+h*r,t[3]=l*i+d*r,t[4]=c*i-a*r,t[5]=u*i-o*r,t[6]=h*i-s*r,t[7]=d*i-l*r,t},t.scale=function(t,e,n){var r=n[0],i=n[1],a=n[2];return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*a,t[9]=e[9]*a,t[10]=e[10]*a,t[11]=e[11]*a,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t},t.scale$1=function(t,e,n){return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t},t.scale$2=function(t,e,n){return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t},t.setCacheLimits=function(t,e){at=t,ot=e},t.setRTLTextPlugin=function(t,e,n){if(void 0===n&&(n=!1),\"deferred\"===Jr||\"loading\"===Jr||\"loaded\"===Jr)throw new Error(\"setRTLTextPlugin cannot be called multiple times.\");Kr=z.resolveURL(t),Jr=\"deferred\",Zr=e,Qr(),n||ni()},t.sphericalToCartesian=function(t){var e=t[0],n=t[1],r=t[2];return n+=90,n*=Math.PI/180,r*=Math.PI/180,{x:e*Math.cos(n)*Math.sin(r),y:e*Math.sin(n)*Math.sin(r),z:e*Math.cos(r)}},t.sqrLen=function(t){var e=t[0],n=t[1];return e*e+n*n},t.styleSpec=St,t.sub=function(t,e,n){return t[0]=e[0]-n[0],t[1]=e[1]-n[1],t[2]=e[2]-n[2],t},t.symbolSize=Il,t.transformMat3=function(t,e,n){var r=e[0],i=e[1],a=e[2];return t[0]=r*n[0]+i*n[3]+a*n[6],t[1]=r*n[1]+i*n[4]+a*n[7],t[2]=r*n[2]+i*n[5]+a*n[8],t},t.transformMat4=ao,t.translate=function(t,e,n){var r,i,a,o,s,l,c,u,h,d,f,p,m=n[0],g=n[1],y=n[2];return e===t?(t[12]=e[0]*m+e[4]*g+e[8]*y+e[12],t[13]=e[1]*m+e[5]*g+e[9]*y+e[13],t[14]=e[2]*m+e[6]*g+e[10]*y+e[14],t[15]=e[3]*m+e[7]*g+e[11]*y+e[15]):(i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],c=e[6],u=e[7],h=e[8],d=e[9],f=e[10],p=e[11],t[0]=r=e[0],t[1]=i,t[2]=a,t[3]=o,t[4]=s,t[5]=l,t[6]=c,t[7]=u,t[8]=h,t[9]=d,t[10]=f,t[11]=p,t[12]=r*m+s*g+h*y+e[12],t[13]=i*m+l*g+d*y+e[13],t[14]=a*m+c*g+f*y+e[14],t[15]=o*m+u*g+p*y+e[15]),t},t.triggerPluginCompletionEvent=$r,t.uniqueId=d,t.validateCustomStyleLayer=function(t){var e=[],n=t.id;return void 0===n&&e.push({message:\"layers.\"+n+': missing required property \"id\"'}),void 0===t.render&&e.push({message:\"layers.\"+n+': missing required method \"render\"'}),t.renderingMode&&\"2d\"!==t.renderingMode&&\"3d\"!==t.renderingMode&&e.push({message:\"layers.\"+n+': property \"renderingMode\" must be either \"2d\" or \"3d\"'}),e},t.validateLight=Sr,t.validateStyle=Tr,t.values=function(t){var e=[];for(var n in t)e.push(t[n]);return e},t.vectorTile=ms,t.version=\"1.10.1\",t.warnOnce=x,t.webpSupported=F,t.window=self,t.wrap=c})),r(0,(function(t){function e(t){var n=typeof t;if(\"number\"===n||\"boolean\"===n||\"string\"===n||null==t)return JSON.stringify(t);if(Array.isArray(t)){for(var r=\"[\",i=0,a=t;i<a.length;i+=1)r+=e(a[i])+\",\";return r+\"]\"}for(var o=Object.keys(t).sort(),s=\"{\",l=0;l<o.length;l++)s+=JSON.stringify(o[l])+\":\"+e(t[o[l]])+\",\";return s+\"}\"}function n(n){for(var r=\"\",i=0,a=t.refProperties;i<a.length;i+=1)r+=\"/\"+e(n[a[i]]);return r}var r=function(t){this.keyCache={},t&&this.replace(t)};r.prototype.replace=function(t){this._layerConfigs={},this._layers={},this.update(t,[])},r.prototype.update=function(e,r){for(var i=this,a=0,o=e;a<o.length;a+=1){var s=o[a];this._layerConfigs[s.id]=s;var l=this._layers[s.id]=t.createStyleLayer(s);l._featureFilter=t.featureFilter(l.filter),this.keyCache[s.id]&&delete this.keyCache[s.id]}for(var c=0,u=r;c<u.length;c+=1){var h=u[c];delete this.keyCache[h],delete this._layerConfigs[h],delete this._layers[h]}this.familiesBySource={};for(var d=0,f=function(t,e){for(var r={},i=0;i<t.length;i++){var a=e&&e[t[i].id]||n(t[i]);e&&(e[t[i].id]=a);var o=r[a];o||(o=r[a]=[]),o.push(t[i])}var s=[];for(var l in r)s.push(r[l]);return s}(t.values(this._layerConfigs),this.keyCache);d<f.length;d+=1){var p=f[d].map((function(t){return i._layers[t.id]})),m=p[0];if(\"none\"!==m.visibility){var g=m.source||\"\",y=this.familiesBySource[g];y||(y=this.familiesBySource[g]={});var v=m.sourceLayer||\"_geojsonTileLayer\",_=y[v];_||(_=y[v]=[]),_.push(p)}}};var i=function(e){var n={},r=[];for(var i in e){var a=e[i],o=n[i]={};for(var s in a){var l=a[+s];if(l&&0!==l.bitmap.width&&0!==l.bitmap.height){var c={x:0,y:0,w:l.bitmap.width+2,h:l.bitmap.height+2};r.push(c),o[s]={rect:c,metrics:l.metrics}}}}var u=t.potpack(r),h=new t.AlphaImage({width:u.w||1,height:u.h||1});for(var d in e){var f=e[d];for(var p in f){var m=f[+p];if(m&&0!==m.bitmap.width&&0!==m.bitmap.height){var g=n[d][p].rect;t.AlphaImage.copy(m.bitmap,h,{x:0,y:0},{x:g.x+1,y:g.y+1},m.bitmap)}}}this.image=h,this.positions=n};t.register(\"GlyphAtlas\",i);var a=function(e){this.tileID=new t.OverscaledTileID(e.tileID.overscaledZ,e.tileID.wrap,e.tileID.canonical.z,e.tileID.canonical.x,e.tileID.canonical.y),this.uid=e.uid,this.zoom=e.zoom,this.pixelRatio=e.pixelRatio,this.tileSize=e.tileSize,this.source=e.source,this.overscaling=this.tileID.overscaleFactor(),this.showCollisionBoxes=e.showCollisionBoxes,this.collectResourceTiming=!!e.collectResourceTiming,this.returnDependencies=!!e.returnDependencies,this.promoteId=e.promoteId};function o(e,n,r){for(var i=new t.EvaluationParameters(n),a=0,o=e;a<o.length;a+=1)o[a].recalculate(i,r)}function s(e,n){var r=t.getArrayBuffer(e.request,(function(e,r,i,a){e?n(e):r&&n(null,{vectorTile:new t.vectorTile.VectorTile(new t.pbf(r)),rawData:r,cacheControl:i,expires:a})}));return function(){r.cancel(),n()}}a.prototype.parse=function(e,n,r,a,s){var l=this;this.status=\"parsing\",this.data=e,this.collisionBoxArray=new t.CollisionBoxArray;var c=new t.DictionaryCoder(Object.keys(e.layers).sort()),u=new t.FeatureIndex(this.tileID,this.promoteId);u.bucketLayerIDs=[];var h,d,f,p,m={},g={featureIndex:u,iconDependencies:{},patternDependencies:{},glyphDependencies:{},availableImages:r},y=n.familiesBySource[this.source];for(var v in y){var _=e.layers[v];if(_){1===_.version&&t.warnOnce('Vector tile source \"'+this.source+'\" layer \"'+v+'\" does not use vector tile spec v2 and therefore may have some rendering errors.');for(var b=c.encode(v),x=[],w=0;w<_.length;w++){var k=_.feature(w),M=u.getId(k,v);x.push({feature:k,id:M,index:w,sourceLayerIndex:b})}for(var T=0,S=y[v];T<S.length;T+=1){var A=S[T],L=A[0];L.minzoom&&this.zoom<Math.floor(L.minzoom)||L.maxzoom&&this.zoom>=L.maxzoom||\"none\"!==L.visibility&&(o(A,this.zoom,r),(m[L.id]=L.createBucket({index:u.bucketLayerIDs.length,layers:A,zoom:this.zoom,pixelRatio:this.pixelRatio,overscaling:this.overscaling,collisionBoxArray:this.collisionBoxArray,sourceLayerIndex:b,sourceID:this.source})).populate(x,g,this.tileID.canonical),u.bucketLayerIDs.push(A.map((function(t){return t.id}))))}}}var C=t.mapObject(g.glyphDependencies,(function(t){return Object.keys(t).map(Number)}));Object.keys(C).length?a.send(\"getGlyphs\",{uid:this.uid,stacks:C},(function(t,e){h||(h=t,d=e,D.call(l))})):d={};var E=Object.keys(g.iconDependencies);E.length?a.send(\"getImages\",{icons:E,source:this.source,tileID:this.tileID,type:\"icons\"},(function(t,e){h||(h=t,f=e,D.call(l))})):f={};var O=Object.keys(g.patternDependencies);function D(){if(h)return s(h);if(d&&f&&p){var e=new i(d),n=new t.ImageAtlas(f,p);for(var a in m){var l=m[a];l instanceof t.SymbolBucket?(o(l.layers,this.zoom,r),t.performSymbolLayout(l,d,e.positions,f,n.iconPositions,this.showCollisionBoxes,this.tileID.canonical)):l.hasPattern&&(l instanceof t.LineBucket||l instanceof t.FillBucket||l instanceof t.FillExtrusionBucket)&&(o(l.layers,this.zoom,r),l.addFeatures(g,this.tileID.canonical,n.patternPositions))}this.status=\"done\",s(null,{buckets:t.values(m).filter((function(t){return!t.isEmpty()})),featureIndex:u,collisionBoxArray:this.collisionBoxArray,glyphAtlasImage:e.image,imageAtlas:n,glyphMap:this.returnDependencies?d:null,iconMap:this.returnDependencies?f:null,glyphPositions:this.returnDependencies?e.positions:null})}}O.length?a.send(\"getImages\",{icons:O,source:this.source,tileID:this.tileID,type:\"patterns\"},(function(t,e){h||(h=t,p=e,D.call(l))})):p={},D.call(this)};var l=function(t,e,n,r){this.actor=t,this.layerIndex=e,this.availableImages=n,this.loadVectorData=r||s,this.loading={},this.loaded={}};l.prototype.loadTile=function(e,n){var r=this,i=e.uid;this.loading||(this.loading={});var o=!!(e&&e.request&&e.request.collectResourceTiming)&&new t.RequestPerformance(e.request),s=this.loading[i]=new a(e);s.abort=this.loadVectorData(e,(function(e,a){if(delete r.loading[i],e||!a)return s.status=\"done\",r.loaded[i]=s,n(e);var l=a.rawData,c={};a.expires&&(c.expires=a.expires),a.cacheControl&&(c.cacheControl=a.cacheControl);var u={};if(o){var h=o.finish();h&&(u.resourceTiming=JSON.parse(JSON.stringify(h)))}s.vectorTile=a.vectorTile,s.parse(a.vectorTile,r.layerIndex,r.availableImages,r.actor,(function(e,r){if(e||!r)return n(e);n(null,t.extend({rawTileData:l.slice(0)},r,c,u))})),r.loaded=r.loaded||{},r.loaded[i]=s}))},l.prototype.reloadTile=function(t,e){var n=this,r=this.loaded,i=t.uid,a=this;if(r&&r[i]){var o=r[i];o.showCollisionBoxes=t.showCollisionBoxes;var s=function(t,r){var i=o.reloadCallback;i&&(delete o.reloadCallback,o.parse(o.vectorTile,a.layerIndex,n.availableImages,a.actor,i)),e(t,r)};\"parsing\"===o.status?o.reloadCallback=s:\"done\"===o.status&&(o.vectorTile?o.parse(o.vectorTile,this.layerIndex,this.availableImages,this.actor,s):s())}},l.prototype.abortTile=function(t,e){var n=this.loading,r=t.uid;n&&n[r]&&n[r].abort&&(n[r].abort(),delete n[r]),e()},l.prototype.removeTile=function(t,e){var n=this.loaded,r=t.uid;n&&n[r]&&delete n[r],e()};var c=t.window.ImageBitmap,u=function(){this.loaded={}};function h(t,e){if(0!==t.length){d(t[0],e);for(var n=1;n<t.length;n++)d(t[n],!e)}}function d(t,e){for(var n=0,r=0,i=t.length,a=i-1;r<i;a=r++)n+=(t[r][0]-t[a][0])*(t[a][1]+t[r][1]);n>=0!=!!e&&t.reverse()}u.prototype.loadTile=function(e,n){var r=e.uid,i=e.encoding,a=e.rawImageData,o=c&&a instanceof c?this.getImageData(a):a,s=new t.DEMData(r,o,i);this.loaded=this.loaded||{},this.loaded[r]=s,n(null,s)},u.prototype.getImageData=function(e){this.offscreenCanvas&&this.offscreenCanvasContext||(this.offscreenCanvas=new OffscreenCanvas(e.width,e.height),this.offscreenCanvasContext=this.offscreenCanvas.getContext(\"2d\")),this.offscreenCanvas.width=e.width,this.offscreenCanvas.height=e.height,this.offscreenCanvasContext.drawImage(e,0,0,e.width,e.height);var n=this.offscreenCanvasContext.getImageData(-1,-1,e.width+2,e.height+2);return this.offscreenCanvasContext.clearRect(0,0,this.offscreenCanvas.width,this.offscreenCanvas.height),new t.RGBAImage({width:n.width,height:n.height},n.data)},u.prototype.removeTile=function(t){var e=this.loaded,n=t.uid;e&&e[n]&&delete e[n]};var f=t.vectorTile.VectorTileFeature.prototype.toGeoJSON,p=function(e){this._feature=e,this.extent=t.EXTENT,this.type=e.type,this.properties=e.tags,\"id\"in e&&!isNaN(e.id)&&(this.id=parseInt(e.id,10))};p.prototype.loadGeometry=function(){if(1===this._feature.type){for(var e=[],n=0,r=this._feature.geometry;n<r.length;n+=1){var i=r[n];e.push([new t.Point$1(i[0],i[1])])}return e}for(var a=[],o=0,s=this._feature.geometry;o<s.length;o+=1){for(var l=[],c=0,u=s[o];c<u.length;c+=1){var h=u[c];l.push(new t.Point$1(h[0],h[1]))}a.push(l)}return a},p.prototype.toGeoJSON=function(t,e,n){return f.call(this,t,e,n)};var m=function(e){this.layers={_geojsonTileLayer:this},this.name=\"_geojsonTileLayer\",this.extent=t.EXTENT,this.length=e.length,this._features=e};m.prototype.feature=function(t){return new p(this._features[t])};var g=t.vectorTile.VectorTileFeature,y=v;function v(t,e){this.options=e||{},this.features=t,this.length=t.length}function _(t,e){this.id=\"number\"==typeof t.id?t.id:void 0,this.type=t.type,this.rawGeometry=1===t.type?[t.geometry]:t.geometry,this.properties=t.tags,this.extent=e||4096}v.prototype.feature=function(t){return new _(this.features[t],this.options.extent)},_.prototype.loadGeometry=function(){var e=this.rawGeometry;this.geometry=[];for(var n=0;n<e.length;n++){for(var r=e[n],i=[],a=0;a<r.length;a++)i.push(new t.Point$1(r[a][0],r[a][1]));this.geometry.push(i)}return this.geometry},_.prototype.bbox=function(){this.geometry||this.loadGeometry();for(var t=this.geometry,e=1/0,n=-1/0,r=1/0,i=-1/0,a=0;a<t.length;a++)for(var o=t[a],s=0;s<o.length;s++){var l=o[s];e=Math.min(e,l.x),n=Math.max(n,l.x),r=Math.min(r,l.y),i=Math.max(i,l.y)}return[e,r,n,i]},_.prototype.toGeoJSON=g.prototype.toGeoJSON;var b=w,x=y;function w(e){var n=new t.pbf;return function(t,e){for(var n in t.layers)e.writeMessage(3,k,t.layers[n])}(e,n),n.finish()}function k(t,e){var n;e.writeVarintField(15,t.version||1),e.writeStringField(1,t.name||\"\"),e.writeVarintField(5,t.extent||4096);var r={keys:[],values:[],keycache:{},valuecache:{}};for(n=0;n<t.length;n++)r.feature=t.feature(n),e.writeMessage(2,M,r);var i=r.keys;for(n=0;n<i.length;n++)e.writeStringField(3,i[n]);var a=r.values;for(n=0;n<a.length;n++)e.writeMessage(4,C,a[n])}function M(t,e){var n=t.feature;void 0!==n.id&&e.writeVarintField(1,n.id),e.writeMessage(2,T,t),e.writeVarintField(3,n.type),e.writeMessage(4,L,n)}function T(t,e){var n=t.feature,r=t.keys,i=t.values,a=t.keycache,o=t.valuecache;for(var s in n.properties){var l=a[s];void 0===l&&(r.push(s),a[s]=l=r.length-1),e.writeVarint(l);var c=n.properties[s],u=typeof c;\"string\"!==u&&\"boolean\"!==u&&\"number\"!==u&&(c=JSON.stringify(c));var h=u+\":\"+c,d=o[h];void 0===d&&(i.push(c),o[h]=d=i.length-1),e.writeVarint(d)}}function S(t,e){return(e<<3)+(7&t)}function A(t){return t<<1^t>>31}function L(t,e){for(var n=t.loadGeometry(),r=t.type,i=0,a=0,o=n.length,s=0;s<o;s++){var l=n[s],c=1;1===r&&(c=l.length),e.writeVarint(S(1,c));for(var u=3===r?l.length-1:l.length,h=0;h<u;h++){1===h&&1!==r&&e.writeVarint(S(2,u-1));var d=l[h].x-i,f=l[h].y-a;e.writeVarint(A(d)),e.writeVarint(A(f)),i+=d,a+=f}3===r&&e.writeVarint(S(7,1))}}function C(t,e){var n=typeof t;\"string\"===n?e.writeStringField(1,t):\"boolean\"===n?e.writeBooleanField(7,t):\"number\"===n&&(t%1!=0?e.writeDoubleField(3,t):t<0?e.writeSVarintField(6,t):e.writeVarintField(5,t))}function E(t,e,n,r){O(t,n,r),O(e,2*n,2*r),O(e,2*n+1,2*r+1)}function O(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function D(t,e,n,r){var i=t-n,a=e-r;return i*i+a*a}b.fromVectorTileJs=w,b.fromGeojsonVt=function(t,e){e=e||{};var n={};for(var r in t)n[r]=new y(t[r].features,e),n[r].name=r,n[r].version=e.version,n[r].extent=e.extent;return w({layers:n})},b.GeoJSONWrapper=x;var I=function(t){return t[0]},P=function(t){return t[1]},R=function(t,e,n,r,i){void 0===e&&(e=I),void 0===n&&(n=P),void 0===r&&(r=64),void 0===i&&(i=Float64Array),this.nodeSize=r,this.points=t;for(var a=t.length<65536?Uint16Array:Uint32Array,o=this.ids=new a(t.length),s=this.coords=new i(2*t.length),l=0;l<t.length;l++)o[l]=l,s[2*l]=e(t[l]),s[2*l+1]=n(t[l]);!function t(e,n,r,i,a,o){if(!(a-i<=r)){var s=i+a>>1;!function t(e,n,r,i,a,o){for(;a>i;){if(a-i>600){var s=a-i+1,l=r-i+1,c=Math.log(s),u=.5*Math.exp(2*c/3),h=.5*Math.sqrt(c*u*(s-u)/s)*(l-s/2<0?-1:1);t(e,n,r,Math.max(i,Math.floor(r-l*u/s+h)),Math.min(a,Math.floor(r+(s-l)*u/s+h)),o)}var d=n[2*r+o],f=i,p=a;for(E(e,n,i,r),n[2*a+o]>d&&E(e,n,i,a);f<p;){for(E(e,n,f,p),f++,p--;n[2*f+o]<d;)f++;for(;n[2*p+o]>d;)p--}n[2*i+o]===d?E(e,n,i,p):E(e,n,++p,a),p<=r&&(i=p+1),r<=p&&(a=p-1)}}(e,n,s,i,a,o%2),t(e,n,r,i,s-1,o+1),t(e,n,r,s+1,a,o+1)}}(o,s,r,0,o.length-1,0)};R.prototype.range=function(t,e,n,r){return function(t,e,n,r,i,a,o){for(var s,l,c=[0,t.length-1,0],u=[];c.length;){var h=c.pop(),d=c.pop(),f=c.pop();if(d-f<=o)for(var p=f;p<=d;p++)l=e[2*p+1],(s=e[2*p])>=n&&s<=i&&l>=r&&l<=a&&u.push(t[p]);else{var m=Math.floor((f+d)/2);l=e[2*m+1],(s=e[2*m])>=n&&s<=i&&l>=r&&l<=a&&u.push(t[m]);var g=(h+1)%2;(0===h?n<=s:r<=l)&&(c.push(f),c.push(m-1),c.push(g)),(0===h?i>=s:a>=l)&&(c.push(m+1),c.push(d),c.push(g))}}return u}(this.ids,this.coords,t,e,n,r,this.nodeSize)},R.prototype.within=function(t,e,n){return function(t,e,n,r,i,a){for(var o=[0,t.length-1,0],s=[],l=i*i;o.length;){var c=o.pop(),u=o.pop(),h=o.pop();if(u-h<=a)for(var d=h;d<=u;d++)D(e[2*d],e[2*d+1],n,r)<=l&&s.push(t[d]);else{var f=Math.floor((h+u)/2),p=e[2*f],m=e[2*f+1];D(p,m,n,r)<=l&&s.push(t[f]);var g=(c+1)%2;(0===c?n-i<=p:r-i<=m)&&(o.push(h),o.push(f-1),o.push(g)),(0===c?n+i>=p:r+i>=m)&&(o.push(f+1),o.push(u),o.push(g))}}return s}(this.ids,this.coords,t,e,n,this.nodeSize)};var z={minZoom:0,maxZoom:16,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:function(t){return t}},j=function(t){this.options=U(Object.create(z),t),this.trees=new Array(this.options.maxZoom+1)};function F(t,e,n,r,i){return{x:t,y:e,zoom:1/0,id:n,parentId:-1,numPoints:r,properties:i}}function N(t,e){var n=t.geometry.coordinates,r=n[1];return{x:H(n[0]),y:V(r),zoom:1/0,index:e,parentId:-1}}function B(t){return{type:\"Feature\",id:t.id,properties:Y(t),geometry:{type:\"Point\",coordinates:[(r=t.x,360*(r-.5)),(e=t.y,n=(180-360*e)*Math.PI/180,360*Math.atan(Math.exp(n))/Math.PI-90)]}};var e,n,r}function Y(t){var e=t.numPoints,n=e>=1e4?Math.round(e/1e3)+\"k\":e>=1e3?Math.round(e/100)/10+\"k\":e;return U(U({},t.properties),{cluster:!0,cluster_id:t.id,point_count:e,point_count_abbreviated:n})}function H(t){return t/360+.5}function V(t){var e=Math.sin(t*Math.PI/180),n=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return n<0?0:n>1?1:n}function U(t,e){for(var n in e)t[n]=e[n];return t}function W(t){return t.x}function q(t){return t.y}function G(t,e,n,r,i,a){var o=i-n,s=a-r;if(0!==o||0!==s){var l=((t-n)*o+(e-r)*s)/(o*o+s*s);l>1?(n=i,r=a):l>0&&(n+=o*l,r+=s*l)}return(o=t-n)*o+(s=e-r)*s}function X(t,e,n,r){var i={id:void 0===t?null:t,type:e,geometry:n,tags:r,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};return function(t){var e=t.geometry,n=t.type;if(\"Point\"===n||\"MultiPoint\"===n||\"LineString\"===n)Z(t,e);else if(\"Polygon\"===n||\"MultiLineString\"===n)for(var r=0;r<e.length;r++)Z(t,e[r]);else if(\"MultiPolygon\"===n)for(r=0;r<e.length;r++)for(var i=0;i<e[r].length;i++)Z(t,e[r][i])}(i),i}function Z(t,e){for(var n=0;n<e.length;n+=3)t.minX=Math.min(t.minX,e[n]),t.minY=Math.min(t.minY,e[n+1]),t.maxX=Math.max(t.maxX,e[n]),t.maxY=Math.max(t.maxY,e[n+1])}function J(t,e,n,r){if(e.geometry){var i=e.geometry.coordinates,a=e.geometry.type,o=Math.pow(n.tolerance/((1<<n.maxZoom)*n.extent),2),s=[],l=e.id;if(n.promoteId?l=e.properties[n.promoteId]:n.generateId&&(l=r||0),\"Point\"===a)K(i,s);else if(\"MultiPoint\"===a)for(var c=0;c<i.length;c++)K(i[c],s);else if(\"LineString\"===a)$(i,s,o,!1);else if(\"MultiLineString\"===a){if(n.lineMetrics){for(c=0;c<i.length;c++)$(i[c],s=[],o,!1),t.push(X(l,\"LineString\",s,e.properties));return}Q(i,s,o,!1)}else if(\"Polygon\"===a)Q(i,s,o,!0);else{if(\"MultiPolygon\"!==a){if(\"GeometryCollection\"===a){for(c=0;c<e.geometry.geometries.length;c++)J(t,{id:l,geometry:e.geometry.geometries[c],properties:e.properties},n,r);return}throw new Error(\"Input data is not a valid GeoJSON object.\")}for(c=0;c<i.length;c++){var u=[];Q(i[c],u,o,!0),s.push(u)}}t.push(X(l,a,s,e.properties))}}function K(t,e){e.push(tt(t[0])),e.push(et(t[1])),e.push(0)}function $(t,e,n,r){for(var i,a,o=0,s=0;s<t.length;s++){var l=tt(t[s][0]),c=et(t[s][1]);e.push(l),e.push(c),e.push(0),s>0&&(o+=r?(i*c-l*a)/2:Math.sqrt(Math.pow(l-i,2)+Math.pow(c-a,2))),i=l,a=c}var u=e.length-3;e[2]=1,function t(e,n,r,i){for(var a,o=i,s=r-n>>1,l=r-n,c=e[n],u=e[n+1],h=e[r],d=e[r+1],f=n+3;f<r;f+=3){var p=G(e[f],e[f+1],c,u,h,d);if(p>o)a=f,o=p;else if(p===o){var m=Math.abs(f-s);m<l&&(a=f,l=m)}}o>i&&(a-n>3&&t(e,n,a,i),e[a+2]=o,r-a>3&&t(e,a,r,i))}(e,0,u,n),e[u+2]=1,e.size=Math.abs(o),e.start=0,e.end=e.size}function Q(t,e,n,r){for(var i=0;i<t.length;i++){var a=[];$(t[i],a,n,r),e.push(a)}}function tt(t){return t/360+.5}function et(t){var e=Math.sin(t*Math.PI/180),n=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return n<0?0:n>1?1:n}function nt(t,e,n,r,i,a,o,s){if(r/=e,a>=(n/=e)&&o<r)return t;if(o<n||a>=r)return null;for(var l=[],c=0;c<t.length;c++){var u=t[c],h=u.geometry,d=u.type,f=0===i?u.minX:u.minY,p=0===i?u.maxX:u.maxY;if(f>=n&&p<r)l.push(u);else if(!(p<n||f>=r)){var m=[];if(\"Point\"===d||\"MultiPoint\"===d)rt(h,m,n,r,i);else if(\"LineString\"===d)it(h,m,n,r,i,!1,s.lineMetrics);else if(\"MultiLineString\"===d)ot(h,m,n,r,i,!1);else if(\"Polygon\"===d)ot(h,m,n,r,i,!0);else if(\"MultiPolygon\"===d)for(var g=0;g<h.length;g++){var y=[];ot(h[g],y,n,r,i,!0),y.length&&m.push(y)}if(m.length){if(s.lineMetrics&&\"LineString\"===d){for(g=0;g<m.length;g++)l.push(X(u.id,d,m[g],u.tags));continue}\"LineString\"!==d&&\"MultiLineString\"!==d||(1===m.length?(d=\"LineString\",m=m[0]):d=\"MultiLineString\"),\"Point\"!==d&&\"MultiPoint\"!==d||(d=3===m.length?\"Point\":\"MultiPoint\"),l.push(X(u.id,d,m,u.tags))}}}return l.length?l:null}function rt(t,e,n,r,i){for(var a=0;a<t.length;a+=3){var o=t[a+i];o>=n&&o<=r&&(e.push(t[a]),e.push(t[a+1]),e.push(t[a+2]))}}function it(t,e,n,r,i,a,o){for(var s,l,c=at(t),u=0===i?lt:ct,h=t.start,d=0;d<t.length-3;d+=3){var f=t[d],p=t[d+1],m=t[d+2],g=t[d+3],y=t[d+4],v=0===i?f:p,_=0===i?g:y,b=!1;o&&(s=Math.sqrt(Math.pow(f-g,2)+Math.pow(p-y,2))),v<n?_>n&&(l=u(c,f,p,g,y,n),o&&(c.start=h+s*l)):v>r?_<r&&(l=u(c,f,p,g,y,r),o&&(c.start=h+s*l)):st(c,f,p,m),_<n&&v>=n&&(l=u(c,f,p,g,y,n),b=!0),_>r&&v<=r&&(l=u(c,f,p,g,y,r),b=!0),!a&&b&&(o&&(c.end=h+s*l),e.push(c),c=at(t)),o&&(h+=s)}var x=t.length-3;f=t[x],p=t[x+1],m=t[x+2],(v=0===i?f:p)>=n&&v<=r&&st(c,f,p,m),x=c.length-3,a&&x>=3&&(c[x]!==c[0]||c[x+1]!==c[1])&&st(c,c[0],c[1],c[2]),c.length&&e.push(c)}function at(t){var e=[];return e.size=t.size,e.start=t.start,e.end=t.end,e}function ot(t,e,n,r,i,a){for(var o=0;o<t.length;o++)it(t[o],e,n,r,i,a,!1)}function st(t,e,n,r){t.push(e),t.push(n),t.push(r)}function lt(t,e,n,r,i,a){var o=(a-e)/(r-e);return t.push(a),t.push(n+(i-n)*o),t.push(1),o}function ct(t,e,n,r,i,a){var o=(a-n)/(i-n);return t.push(e+(r-e)*o),t.push(a),t.push(1),o}function ut(t,e){for(var n=[],r=0;r<t.length;r++){var i,a=t[r],o=a.type;if(\"Point\"===o||\"MultiPoint\"===o||\"LineString\"===o)i=ht(a.geometry,e);else if(\"MultiLineString\"===o||\"Polygon\"===o){i=[];for(var s=0;s<a.geometry.length;s++)i.push(ht(a.geometry[s],e))}else if(\"MultiPolygon\"===o)for(i=[],s=0;s<a.geometry.length;s++){for(var l=[],c=0;c<a.geometry[s].length;c++)l.push(ht(a.geometry[s][c],e));i.push(l)}n.push(X(a.id,o,i,a.tags))}return n}function ht(t,e){var n=[];n.size=t.size,void 0!==t.start&&(n.start=t.start,n.end=t.end);for(var r=0;r<t.length;r+=3)n.push(t[r]+e,t[r+1],t[r+2]);return n}function dt(t,e){if(t.transformed)return t;var n,r,i,a=1<<t.z,o=t.x,s=t.y;for(n=0;n<t.features.length;n++){var l=t.features[n],c=l.geometry,u=l.type;if(l.geometry=[],1===u)for(r=0;r<c.length;r+=2)l.geometry.push(ft(c[r],c[r+1],e,a,o,s));else for(r=0;r<c.length;r++){var h=[];for(i=0;i<c[r].length;i+=2)h.push(ft(c[r][i],c[r][i+1],e,a,o,s));l.geometry.push(h)}}return t.transformed=!0,t}function ft(t,e,n,r,i,a){return[Math.round(n*(t*r-i)),Math.round(n*(e*r-a))]}function pt(t,e,n,r,i){for(var a=e===i.maxZoom?0:i.tolerance/((1<<e)*i.extent),o={features:[],numPoints:0,numSimplified:0,numFeatures:0,source:null,x:n,y:r,z:e,transformed:!1,minX:2,minY:1,maxX:-1,maxY:0},s=0;s<t.length;s++){o.numFeatures++,mt(o,t[s],a,i);var l=t[s].minX,c=t[s].minY,u=t[s].maxX,h=t[s].maxY;l<o.minX&&(o.minX=l),c<o.minY&&(o.minY=c),u>o.maxX&&(o.maxX=u),h>o.maxY&&(o.maxY=h)}return o}function mt(t,e,n,r){var i=e.geometry,a=e.type,o=[];if(\"Point\"===a||\"MultiPoint\"===a)for(var s=0;s<i.length;s+=3)o.push(i[s]),o.push(i[s+1]),t.numPoints++,t.numSimplified++;else if(\"LineString\"===a)gt(o,i,t,n,!1,!1);else if(\"MultiLineString\"===a||\"Polygon\"===a)for(s=0;s<i.length;s++)gt(o,i[s],t,n,\"Polygon\"===a,0===s);else if(\"MultiPolygon\"===a)for(var l=0;l<i.length;l++){var c=i[l];for(s=0;s<c.length;s++)gt(o,c[s],t,n,!0,0===s)}if(o.length){var u=e.tags||null;if(\"LineString\"===a&&r.lineMetrics){for(var h in u={},e.tags)u[h]=e.tags[h];u.mapbox_clip_start=i.start/i.size,u.mapbox_clip_end=i.end/i.size}var d={geometry:o,type:\"Polygon\"===a||\"MultiPolygon\"===a?3:\"LineString\"===a||\"MultiLineString\"===a?2:1,tags:u};null!==e.id&&(d.id=e.id),t.features.push(d)}}function gt(t,e,n,r,i,a){var o=r*r;if(r>0&&e.size<(i?o:r))n.numPoints+=e.length/3;else{for(var s=[],l=0;l<e.length;l+=3)(0===r||e[l+2]>o)&&(n.numSimplified++,s.push(e[l]),s.push(e[l+1])),n.numPoints++;i&&function(t,e){for(var n=0,r=0,i=t.length,a=i-2;r<i;a=r,r+=2)n+=(t[r]-t[a])*(t[r+1]+t[a+1]);if(n>0===e)for(r=0,i=t.length;r<i/2;r+=2){var o=t[r],s=t[r+1];t[r]=t[i-2-r],t[r+1]=t[i-1-r],t[i-2-r]=o,t[i-1-r]=s}}(s,a),t.push(s)}}function yt(t,e){var n=(e=this.options=function(t,e){for(var n in e)t[n]=e[n];return t}(Object.create(this.options),e)).debug;if(n&&console.time(\"preprocess data\"),e.maxZoom<0||e.maxZoom>24)throw new Error(\"maxZoom should be in the 0-24 range\");if(e.promoteId&&e.generateId)throw new Error(\"promoteId and generateId cannot be used together.\");var r=function(t,e){var n=[];if(\"FeatureCollection\"===t.type)for(var r=0;r<t.features.length;r++)J(n,t.features[r],e,r);else J(n,\"Feature\"===t.type?t:{geometry:t},e);return n}(t,e);this.tiles={},this.tileCoords=[],n&&(console.timeEnd(\"preprocess data\"),console.log(\"index: maxZoom: %d, maxPoints: %d\",e.indexMaxZoom,e.indexMaxPoints),console.time(\"generate tiles\"),this.stats={},this.total=0),(r=function(t,e){var n=e.buffer/e.extent,r=t,i=nt(t,1,-1-n,n,0,-1,2,e),a=nt(t,1,1-n,2+n,0,-1,2,e);return(i||a)&&(r=nt(t,1,-n,1+n,0,-1,2,e)||[],i&&(r=ut(i,1).concat(r)),a&&(r=r.concat(ut(a,-1)))),r}(r,e)).length&&this.splitTile(r,0,0,0),n&&(r.length&&console.log(\"features: %d, points: %d\",this.tiles[0].numFeatures,this.tiles[0].numPoints),console.timeEnd(\"generate tiles\"),console.log(\"tiles generated:\",this.total,JSON.stringify(this.stats)))}function vt(t,e,n){return 32*((1<<t)*n+e)+t}function _t(t,e){var n=t.tileID.canonical;if(!this._geoJSONIndex)return e(null,null);var r=this._geoJSONIndex.getTile(n.z,n.x,n.y);if(!r)return e(null,null);var i=new m(r.features),a=b(i);0===a.byteOffset&&a.byteLength===a.buffer.byteLength||(a=new Uint8Array(a)),e(null,{vectorTile:i,rawData:a.buffer})}j.prototype.load=function(t){var e=this.options,n=e.log,r=e.minZoom,i=e.maxZoom,a=e.nodeSize;n&&console.time(\"total time\");var o=\"prepare \"+t.length+\" points\";n&&console.time(o),this.points=t;for(var s=[],l=0;l<t.length;l++)t[l].geometry&&s.push(N(t[l],l));this.trees[i+1]=new R(s,W,q,a,Float32Array),n&&console.timeEnd(o);for(var c=i;c>=r;c--){var u=+Date.now();s=this._cluster(s,c),this.trees[c]=new R(s,W,q,a,Float32Array),n&&console.log(\"z%d: %d clusters in %dms\",c,s.length,+Date.now()-u)}return n&&console.timeEnd(\"total time\"),this},j.prototype.getClusters=function(t,e){var n=((t[0]+180)%360+360)%360-180,r=Math.max(-90,Math.min(90,t[1])),i=180===t[2]?180:((t[2]+180)%360+360)%360-180,a=Math.max(-90,Math.min(90,t[3]));if(t[2]-t[0]>=360)n=-180,i=180;else if(n>i){var o=this.getClusters([n,r,180,a],e),s=this.getClusters([-180,r,i,a],e);return o.concat(s)}for(var l=this.trees[this._limitZoom(e)],c=[],u=0,h=l.range(H(n),V(a),H(i),V(r));u<h.length;u+=1){var d=l.points[h[u]];c.push(d.numPoints?B(d):this.points[d.index])}return c},j.prototype.getChildren=function(t){var e=this._getOriginId(t),n=this._getOriginZoom(t),r=\"No cluster with the specified id.\",i=this.trees[n];if(!i)throw new Error(r);var a=i.points[e];if(!a)throw new Error(r);for(var o=this.options.radius/(this.options.extent*Math.pow(2,n-1)),s=[],l=0,c=i.within(a.x,a.y,o);l<c.length;l+=1){var u=i.points[c[l]];u.parentId===t&&s.push(u.numPoints?B(u):this.points[u.index])}if(0===s.length)throw new Error(r);return s},j.prototype.getLeaves=function(t,e,n){var r=[];return this._appendLeaves(r,t,e=e||10,n=n||0,0),r},j.prototype.getTile=function(t,e,n){var r=this.trees[this._limitZoom(t)],i=Math.pow(2,t),a=this.options,o=a.radius/a.extent,s=(n-o)/i,l=(n+1+o)/i,c={features:[]};return this._addTileFeatures(r.range((e-o)/i,s,(e+1+o)/i,l),r.points,e,n,i,c),0===e&&this._addTileFeatures(r.range(1-o/i,s,1,l),r.points,i,n,i,c),e===i-1&&this._addTileFeatures(r.range(0,s,o/i,l),r.points,-1,n,i,c),c.features.length?c:null},j.prototype.getClusterExpansionZoom=function(t){for(var e=this._getOriginZoom(t)-1;e<=this.options.maxZoom;){var n=this.getChildren(t);if(e++,1!==n.length)break;t=n[0].properties.cluster_id}return e},j.prototype._appendLeaves=function(t,e,n,r,i){for(var a=0,o=this.getChildren(e);a<o.length;a+=1){var s=o[a],l=s.properties;if(l&&l.cluster?i+l.point_count<=r?i+=l.point_count:i=this._appendLeaves(t,l.cluster_id,n,r,i):i<r?i++:t.push(s),t.length===n)break}return i},j.prototype._addTileFeatures=function(t,e,n,r,i,a){for(var o=0,s=t;o<s.length;o+=1){var l=e[s[o]],c=l.numPoints,u={type:1,geometry:[[Math.round(this.options.extent*(l.x*i-n)),Math.round(this.options.extent*(l.y*i-r))]],tags:c?Y(l):this.points[l.index].properties},h=void 0;c?h=l.id:this.options.generateId?h=l.index:this.points[l.index].id&&(h=this.points[l.index].id),void 0!==h&&(u.id=h),a.features.push(u)}},j.prototype._limitZoom=function(t){return Math.max(this.options.minZoom,Math.min(t,this.options.maxZoom+1))},j.prototype._cluster=function(t,e){for(var n=[],r=this.options,i=r.reduce,a=r.radius/(r.extent*Math.pow(2,e)),o=0;o<t.length;o++){var s=t[o];if(!(s.zoom<=e)){s.zoom=e;for(var l=this.trees[e+1],c=l.within(s.x,s.y,a),u=s.numPoints||1,h=s.x*u,d=s.y*u,f=i&&u>1?this._map(s,!0):null,p=(o<<5)+(e+1)+this.points.length,m=0,g=c;m<g.length;m+=1){var y=l.points[g[m]];if(!(y.zoom<=e)){y.zoom=e;var v=y.numPoints||1;h+=y.x*v,d+=y.y*v,u+=v,y.parentId=p,i&&(f||(f=this._map(s,!0)),i(f,this._map(y)))}}1===u?n.push(s):(s.parentId=p,n.push(F(h/u,d/u,p,u,f)))}}return n},j.prototype._getOriginId=function(t){return t-this.points.length>>5},j.prototype._getOriginZoom=function(t){return(t-this.points.length)%32},j.prototype._map=function(t,e){if(t.numPoints)return e?U({},t.properties):t.properties;var n=this.points[t.index].properties,r=this.options.map(n);return e&&r===n?U({},r):r},yt.prototype.options={maxZoom:14,indexMaxZoom:5,indexMaxPoints:1e5,tolerance:3,extent:4096,buffer:64,lineMetrics:!1,promoteId:null,generateId:!1,debug:0},yt.prototype.splitTile=function(t,e,n,r,i,a,o){for(var s=[t,e,n,r],l=this.options,c=l.debug;s.length;){r=s.pop(),n=s.pop(),e=s.pop(),t=s.pop();var u=1<<e,h=vt(e,n,r),d=this.tiles[h];if(!d&&(c>1&&console.time(\"creation\"),d=this.tiles[h]=pt(t,e,n,r,l),this.tileCoords.push({z:e,x:n,y:r}),c)){c>1&&(console.log(\"tile z%d-%d-%d (features: %d, points: %d, simplified: %d)\",e,n,r,d.numFeatures,d.numPoints,d.numSimplified),console.timeEnd(\"creation\"));var f=\"z\"+e;this.stats[f]=(this.stats[f]||0)+1,this.total++}if(d.source=t,i){if(e===l.maxZoom||e===i)continue;var p=1<<i-e;if(n!==Math.floor(a/p)||r!==Math.floor(o/p))continue}else if(e===l.indexMaxZoom||d.numPoints<=l.indexMaxPoints)continue;if(d.source=null,0!==t.length){c>1&&console.time(\"clipping\");var m,g,y,v,_,b,x=.5*l.buffer/l.extent,w=.5-x,k=.5+x,M=1+x;m=g=y=v=null,_=nt(t,u,n-x,n+k,0,d.minX,d.maxX,l),b=nt(t,u,n+w,n+M,0,d.minX,d.maxX,l),t=null,_&&(m=nt(_,u,r-x,r+k,1,d.minY,d.maxY,l),g=nt(_,u,r+w,r+M,1,d.minY,d.maxY,l),_=null),b&&(y=nt(b,u,r-x,r+k,1,d.minY,d.maxY,l),v=nt(b,u,r+w,r+M,1,d.minY,d.maxY,l),b=null),c>1&&console.timeEnd(\"clipping\"),s.push(m||[],e+1,2*n,2*r),s.push(g||[],e+1,2*n,2*r+1),s.push(y||[],e+1,2*n+1,2*r),s.push(v||[],e+1,2*n+1,2*r+1)}}},yt.prototype.getTile=function(t,e,n){var r=this.options,i=r.extent,a=r.debug;if(t<0||t>24)return null;var o=1<<t,s=vt(t,e=(e%o+o)%o,n);if(this.tiles[s])return dt(this.tiles[s],i);a>1&&console.log(\"drilling down to z%d-%d-%d\",t,e,n);for(var l,c=t,u=e,h=n;!l&&c>0;)c--,u=Math.floor(u/2),h=Math.floor(h/2),l=this.tiles[vt(c,u,h)];return l&&l.source?(a>1&&console.log(\"found parent tile z%d-%d-%d\",c,u,h),a>1&&console.time(\"drilling down\"),this.splitTile(l.source,c,u,h,t,e,n),a>1&&console.timeEnd(\"drilling down\"),this.tiles[s]?dt(this.tiles[s],i):null):null};var bt=function(e){function n(t,n,r,i){e.call(this,t,n,r,_t),i&&(this.loadGeoJSON=i)}return e&&(n.__proto__=e),(n.prototype=Object.create(e&&e.prototype)).constructor=n,n.prototype.loadData=function(t,e){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),this._pendingCallback=e,this._pendingLoadDataParams=t,this._state&&\"Idle\"!==this._state?this._state=\"NeedsLoadData\":(this._state=\"Coalescing\",this._loadData())},n.prototype._loadData=function(){var e=this;if(this._pendingCallback&&this._pendingLoadDataParams){var n=this._pendingCallback,r=this._pendingLoadDataParams;delete this._pendingCallback,delete this._pendingLoadDataParams;var i=!!(r&&r.request&&r.request.collectResourceTiming)&&new t.RequestPerformance(r.request);this.loadGeoJSON(r,(function(a,o){if(a||!o)return n(a);if(\"object\"!=typeof o)return n(new Error(\"Input data given to '\"+r.source+\"' is not a valid GeoJSON object.\"));!function t(e,n){var r,i=e&&e.type;if(\"FeatureCollection\"===i)for(r=0;r<e.features.length;r++)t(e.features[r],n);else if(\"GeometryCollection\"===i)for(r=0;r<e.geometries.length;r++)t(e.geometries[r],n);else if(\"Feature\"===i)t(e.geometry,n);else if(\"Polygon\"===i)h(e.coordinates,n);else if(\"MultiPolygon\"===i)for(r=0;r<e.coordinates.length;r++)h(e.coordinates[r],n);return e}(o,!0);try{e._geoJSONIndex=r.cluster?new j(function(e){var n=e.superclusterOptions,r=e.clusterProperties;if(!r||!n)return n;for(var i={},a={},o={accumulated:null,zoom:0},s={properties:null},l=Object.keys(r),c=0,u=l;c<u.length;c+=1){var h=u[c],d=r[h],f=d[0],p=t.createExpression(d[1]),m=t.createExpression(\"string\"==typeof f?[f,[\"accumulated\"],[\"get\",h]]:f);i[h]=p.value,a[h]=m.value}return n.map=function(t){s.properties=t;for(var e={},n=0,r=l;n<r.length;n+=1){var a=r[n];e[a]=i[a].evaluate(o,s)}return e},n.reduce=function(t,e){s.properties=e;for(var n=0,r=l;n<r.length;n+=1){var i=r[n];o.accumulated=t[i],t[i]=a[i].evaluate(o,s)}},n}(r)).load(o.features):function(t,e){return new yt(t,e)}(o,r.geojsonVtOptions)}catch(a){return n(a)}e.loaded={};var s={};if(i){var l=i.finish();l&&(s.resourceTiming={},s.resourceTiming[r.source]=JSON.parse(JSON.stringify(l)))}n(null,s)}))}},n.prototype.coalesce=function(){\"Coalescing\"===this._state?this._state=\"Idle\":\"NeedsLoadData\"===this._state&&(this._state=\"Coalescing\",this._loadData())},n.prototype.reloadTile=function(t,n){var r=this.loaded;return r&&r[t.uid]?e.prototype.reloadTile.call(this,t,n):this.loadTile(t,n)},n.prototype.loadGeoJSON=function(e,n){if(e.request)t.getJSON(e.request,n);else{if(\"string\"!=typeof e.data)return n(new Error(\"Input data given to '\"+e.source+\"' is not a valid GeoJSON object.\"));try{return n(null,JSON.parse(e.data))}catch(t){return n(new Error(\"Input data given to '\"+e.source+\"' is not a valid GeoJSON object.\"))}}},n.prototype.removeSource=function(t,e){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),e()},n.prototype.getClusterExpansionZoom=function(t,e){try{e(null,this._geoJSONIndex.getClusterExpansionZoom(t.clusterId))}catch(t){e(t)}},n.prototype.getClusterChildren=function(t,e){try{e(null,this._geoJSONIndex.getChildren(t.clusterId))}catch(t){e(t)}},n.prototype.getClusterLeaves=function(t,e){try{e(null,this._geoJSONIndex.getLeaves(t.clusterId,t.limit,t.offset))}catch(t){e(t)}},n}(l),xt=function(e){var n=this;this.self=e,this.actor=new t.Actor(e,this),this.layerIndexes={},this.availableImages={},this.workerSourceTypes={vector:l,geojson:bt},this.workerSources={},this.demWorkerSources={},this.self.registerWorkerSource=function(t,e){if(n.workerSourceTypes[t])throw new Error('Worker source with name \"'+t+'\" already registered.');n.workerSourceTypes[t]=e},this.self.registerRTLTextPlugin=function(e){if(t.plugin.isParsed())throw new Error(\"RTL text plugin already registered.\");t.plugin.applyArabicShaping=e.applyArabicShaping,t.plugin.processBidirectionalText=e.processBidirectionalText,t.plugin.processStyledBidirectionalText=e.processStyledBidirectionalText}};return xt.prototype.setReferrer=function(t,e){this.referrer=e},xt.prototype.setImages=function(t,e,n){for(var r in this.availableImages[t]=e,this.workerSources[t]){var i=this.workerSources[t][r];for(var a in i)i[a].availableImages=e}n()},xt.prototype.setLayers=function(t,e,n){this.getLayerIndex(t).replace(e),n()},xt.prototype.updateLayers=function(t,e,n){this.getLayerIndex(t).update(e.layers,e.removedIds),n()},xt.prototype.loadTile=function(t,e,n){this.getWorkerSource(t,e.type,e.source).loadTile(e,n)},xt.prototype.loadDEMTile=function(t,e,n){this.getDEMWorkerSource(t,e.source).loadTile(e,n)},xt.prototype.reloadTile=function(t,e,n){this.getWorkerSource(t,e.type,e.source).reloadTile(e,n)},xt.prototype.abortTile=function(t,e,n){this.getWorkerSource(t,e.type,e.source).abortTile(e,n)},xt.prototype.removeTile=function(t,e,n){this.getWorkerSource(t,e.type,e.source).removeTile(e,n)},xt.prototype.removeDEMTile=function(t,e){this.getDEMWorkerSource(t,e.source).removeTile(e)},xt.prototype.removeSource=function(t,e,n){if(this.workerSources[t]&&this.workerSources[t][e.type]&&this.workerSources[t][e.type][e.source]){var r=this.workerSources[t][e.type][e.source];delete this.workerSources[t][e.type][e.source],void 0!==r.removeSource?r.removeSource(e,n):n()}},xt.prototype.loadWorkerSource=function(t,e,n){try{this.self.importScripts(e.url),n()}catch(t){n(t.toString())}},xt.prototype.syncRTLPluginState=function(e,n,r){try{t.plugin.setState(n);var i=t.plugin.getPluginURL();if(t.plugin.isLoaded()&&!t.plugin.isParsed()&&null!=i){this.self.importScripts(i);var a=t.plugin.isParsed();r(a?void 0:new Error(\"RTL Text Plugin failed to import scripts from \"+i),a)}}catch(t){r(t.toString())}},xt.prototype.getAvailableImages=function(t){var e=this.availableImages[t];return e||(e=[]),e},xt.prototype.getLayerIndex=function(t){var e=this.layerIndexes[t];return e||(e=this.layerIndexes[t]=new r),e},xt.prototype.getWorkerSource=function(t,e,n){var r=this;return this.workerSources[t]||(this.workerSources[t]={}),this.workerSources[t][e]||(this.workerSources[t][e]={}),this.workerSources[t][e][n]||(this.workerSources[t][e][n]=new this.workerSourceTypes[e]({send:function(e,n,i){r.actor.send(e,n,i,t)}},this.getLayerIndex(t),this.getAvailableImages(t))),this.workerSources[t][e][n]},xt.prototype.getDEMWorkerSource=function(t,e){return this.demWorkerSources[t]||(this.demWorkerSources[t]={}),this.demWorkerSources[t][e]||(this.demWorkerSources[t][e]=new u),this.demWorkerSources[t][e]},xt.prototype.enforceCacheSizeLimit=function(e,n){t.enforceCacheSizeLimit(n)},\"undefined\"!=typeof WorkerGlobalScope&&void 0!==t.window&&t.window instanceof WorkerGlobalScope&&(t.window.worker=new xt(t.window)),xt})),r(0,(function(t){var e=t.createCommonjsModule((function(t){function e(t){return!n(t)}function n(t){return\"undefined\"==typeof window||\"undefined\"==typeof document?\"not a browser\":Array.prototype&&Array.prototype.every&&Array.prototype.filter&&Array.prototype.forEach&&Array.prototype.indexOf&&Array.prototype.lastIndexOf&&Array.prototype.map&&Array.prototype.some&&Array.prototype.reduce&&Array.prototype.reduceRight&&Array.isArray?Function.prototype&&Function.prototype.bind?Object.keys&&Object.create&&Object.getPrototypeOf&&Object.getOwnPropertyNames&&Object.isSealed&&Object.isFrozen&&Object.isExtensible&&Object.getOwnPropertyDescriptor&&Object.defineProperty&&Object.defineProperties&&Object.seal&&Object.freeze&&Object.preventExtensions?\"JSON\"in window&&\"parse\"in JSON&&\"stringify\"in JSON?function(){if(!(\"Worker\"in window&&\"Blob\"in window&&\"URL\"in window))return!1;var t,e,n=new Blob([\"\"],{type:\"text/javascript\"}),r=URL.createObjectURL(n);try{e=new Worker(r),t=!0}catch(e){t=!1}return e&&e.terminate(),URL.revokeObjectURL(r),t}()?\"Uint8ClampedArray\"in window?ArrayBuffer.isView?function(){var t=document.createElement(\"canvas\");t.width=t.height=1;var e=t.getContext(\"2d\");if(!e)return!1;var n=e.getImageData(0,0,1,1);return n&&n.width===t.width}()?(void 0===r[n=t&&t.failIfMajorPerformanceCaveat]&&(r[n]=function(t){var n=function(t){var n=document.createElement(\"canvas\"),r=Object.create(e.webGLContextAttributes);return r.failIfMajorPerformanceCaveat=t,n.probablySupportsContext?n.probablySupportsContext(\"webgl\",r)||n.probablySupportsContext(\"experimental-webgl\",r):n.supportsContext?n.supportsContext(\"webgl\",r)||n.supportsContext(\"experimental-webgl\",r):n.getContext(\"webgl\",r)||n.getContext(\"experimental-webgl\",r)}(t);if(!n)return!1;var r=n.createShader(n.VERTEX_SHADER);return!(!r||n.isContextLost())&&(n.shaderSource(r,\"void main() {}\"),n.compileShader(r),!0===n.getShaderParameter(r,n.COMPILE_STATUS))}(n)),r[n]?void 0:\"insufficient WebGL support\"):\"insufficient Canvas/getImageData support\":\"insufficient ArrayBuffer support\":\"insufficient Uint8ClampedArray support\":\"insufficient worker support\":\"insufficient JSON support\":\"insufficient Object support\":\"insufficient Function support\":\"insufficent Array support\";var n}t.exports?t.exports=e:window&&(window.mapboxgl=window.mapboxgl||{},window.mapboxgl.supported=e,window.mapboxgl.notSupportedReason=n);var r={};e.webGLContextAttributes={antialias:!1,alpha:!0,stencil:!0,depth:!0}})),n={create:function(e,n,r){var i=t.window.document.createElement(e);return void 0!==n&&(i.className=n),r&&r.appendChild(i),i},createNS:function(e,n){return t.window.document.createElementNS(e,n)}},r=t.window.document.documentElement.style;function i(t){if(!r)return t[0];for(var e=0;e<t.length;e++)if(t[e]in r)return t[e];return t[0]}var a,o=i([\"userSelect\",\"MozUserSelect\",\"WebkitUserSelect\",\"msUserSelect\"]);n.disableDrag=function(){r&&o&&(a=r[o],r[o]=\"none\")},n.enableDrag=function(){r&&o&&(r[o]=a)};var s=i([\"transform\",\"WebkitTransform\"]);n.setTransform=function(t,e){t.style[s]=e};var l=!1;try{var c=Object.defineProperty({},\"passive\",{get:function(){l=!0}});t.window.addEventListener(\"test\",c,c),t.window.removeEventListener(\"test\",c,c)}catch(t){l=!1}n.addEventListener=function(t,e,n,r){void 0===r&&(r={}),t.addEventListener(e,n,\"passive\"in r&&l?r:r.capture)},n.removeEventListener=function(t,e,n,r){void 0===r&&(r={}),t.removeEventListener(e,n,\"passive\"in r&&l?r:r.capture)};var u=function(e){e.preventDefault(),e.stopPropagation(),t.window.removeEventListener(\"click\",u,!0)};function h(t){var e=t.userImage;return!!(e&&e.render&&e.render())&&(t.data.replace(new Uint8Array(e.data.buffer)),!0)}n.suppressClick=function(){t.window.addEventListener(\"click\",u,!0),t.window.setTimeout((function(){t.window.removeEventListener(\"click\",u,!0)}),0)},n.mousePos=function(e,n){var r=e.getBoundingClientRect();return new t.Point(n.clientX-r.left-e.clientLeft,n.clientY-r.top-e.clientTop)},n.touchPos=function(e,n){for(var r=e.getBoundingClientRect(),i=[],a=0;a<n.length;a++)i.push(new t.Point(n[a].clientX-r.left-e.clientLeft,n[a].clientY-r.top-e.clientTop));return i},n.mouseButton=function(e){return void 0!==t.window.InstallTrigger&&2===e.button&&e.ctrlKey&&t.window.navigator.platform.toUpperCase().indexOf(\"MAC\")>=0?0:e.button},n.remove=function(t){t.parentNode&&t.parentNode.removeChild(t)};var d=function(e){function n(){e.call(this),this.images={},this.updatedImages={},this.callbackDispatchedThisFrame={},this.loaded=!1,this.requestors=[],this.patterns={},this.atlasImage=new t.RGBAImage({width:1,height:1}),this.dirty=!0}return e&&(n.__proto__=e),(n.prototype=Object.create(e&&e.prototype)).constructor=n,n.prototype.isLoaded=function(){return this.loaded},n.prototype.setLoaded=function(t){if(this.loaded!==t&&(this.loaded=t,t)){for(var e=0,n=this.requestors;e<n.length;e+=1){var r=n[e];this._notify(r.ids,r.callback)}this.requestors=[]}},n.prototype.getImage=function(t){return this.images[t]},n.prototype.addImage=function(t,e){this._validate(t,e)&&(this.images[t]=e)},n.prototype._validate=function(e,n){var r=!0;return this._validateStretch(n.stretchX,n.data&&n.data.width)||(this.fire(new t.ErrorEvent(new Error('Image \"'+e+'\" has invalid \"stretchX\" value'))),r=!1),this._validateStretch(n.stretchY,n.data&&n.data.height)||(this.fire(new t.ErrorEvent(new Error('Image \"'+e+'\" has invalid \"stretchY\" value'))),r=!1),this._validateContent(n.content,n)||(this.fire(new t.ErrorEvent(new Error('Image \"'+e+'\" has invalid \"content\" value'))),r=!1),r},n.prototype._validateStretch=function(t,e){if(!t)return!0;for(var n=0,r=0,i=t;r<i.length;r+=1){var a=i[r];if(a[0]<n||a[1]<a[0]||e<a[1])return!1;n=a[1]}return!0},n.prototype._validateContent=function(t,e){return!(t&&(4!==t.length||t[0]<0||e.data.width<t[0]||t[1]<0||e.data.height<t[1]||t[2]<0||e.data.width<t[2]||t[3]<0||e.data.height<t[3]||t[2]<t[0]||t[3]<t[1]))},n.prototype.updateImage=function(t,e){e.version=this.images[t].version+1,this.images[t]=e,this.updatedImages[t]=!0},n.prototype.removeImage=function(t){var e=this.images[t];delete this.images[t],delete this.patterns[t],e.userImage&&e.userImage.onRemove&&e.userImage.onRemove()},n.prototype.listImages=function(){return Object.keys(this.images)},n.prototype.getImages=function(t,e){var n=!0;if(!this.isLoaded())for(var r=0,i=t;r<i.length;r+=1)this.images[i[r]]||(n=!1);this.isLoaded()||n?this._notify(t,e):this.requestors.push({ids:t,callback:e})},n.prototype._notify=function(e,n){for(var r={},i=0,a=e;i<a.length;i+=1){var o=a[i];this.images[o]||this.fire(new t.Event(\"styleimagemissing\",{id:o}));var s=this.images[o];s?r[o]={data:s.data.clone(),pixelRatio:s.pixelRatio,sdf:s.sdf,version:s.version,stretchX:s.stretchX,stretchY:s.stretchY,content:s.content,hasRenderCallback:Boolean(s.userImage&&s.userImage.render)}:t.warnOnce('Image \"'+o+'\" could not be loaded. Please make sure you have added the image with map.addImage() or a \"sprite\" property in your style. You can provide missing images by listening for the \"styleimagemissing\" map event.')}n(null,r)},n.prototype.getPixelSize=function(){var t=this.atlasImage;return{width:t.width,height:t.height}},n.prototype.getPattern=function(e){var n=this.patterns[e],r=this.getImage(e);if(!r)return null;if(n&&n.position.version===r.version)return n.position;if(n)n.position.version=r.version;else{var i={w:r.data.width+2,h:r.data.height+2,x:0,y:0},a=new t.ImagePosition(i,r);this.patterns[e]={bin:i,position:a}}return this._updatePatternAtlas(),this.patterns[e].position},n.prototype.bind=function(e){var n=e.gl;this.atlasTexture?this.dirty&&(this.atlasTexture.update(this.atlasImage),this.dirty=!1):this.atlasTexture=new t.Texture(e,this.atlasImage,n.RGBA),this.atlasTexture.bind(n.LINEAR,n.CLAMP_TO_EDGE)},n.prototype._updatePatternAtlas=function(){var e=[];for(var n in this.patterns)e.push(this.patterns[n].bin);var r=t.potpack(e),i=r.w,a=r.h,o=this.atlasImage;for(var s in o.resize({width:i||1,height:a||1}),this.patterns){var l=this.patterns[s].bin,c=l.x+1,u=l.y+1,h=this.images[s].data,d=h.width,f=h.height;t.RGBAImage.copy(h,o,{x:0,y:0},{x:c,y:u},{width:d,height:f}),t.RGBAImage.copy(h,o,{x:0,y:f-1},{x:c,y:u-1},{width:d,height:1}),t.RGBAImage.copy(h,o,{x:0,y:0},{x:c,y:u+f},{width:d,height:1}),t.RGBAImage.copy(h,o,{x:d-1,y:0},{x:c-1,y:u},{width:1,height:f}),t.RGBAImage.copy(h,o,{x:0,y:0},{x:c+d,y:u},{width:1,height:f})}this.dirty=!0},n.prototype.beginFrame=function(){this.callbackDispatchedThisFrame={}},n.prototype.dispatchRenderCallbacks=function(t){for(var e=0,n=t;e<n.length;e+=1){var r=n[e];if(!this.callbackDispatchedThisFrame[r]){this.callbackDispatchedThisFrame[r]=!0;var i=this.images[r];h(i)&&this.updateImage(r,i)}}},n}(t.Evented),f=g,p=g,m=1e20;function g(t,e,n,r,i,a){this.fontSize=t||24,this.buffer=void 0===e?3:e,this.cutoff=r||.25,this.fontFamily=i||\"sans-serif\",this.fontWeight=a||\"normal\",this.radius=n||8;var o=this.size=this.fontSize+2*this.buffer;this.canvas=document.createElement(\"canvas\"),this.canvas.width=this.canvas.height=o,this.ctx=this.canvas.getContext(\"2d\"),this.ctx.font=this.fontWeight+\" \"+this.fontSize+\"px \"+this.fontFamily,this.ctx.textBaseline=\"middle\",this.ctx.fillStyle=\"black\",this.gridOuter=new Float64Array(o*o),this.gridInner=new Float64Array(o*o),this.f=new Float64Array(o),this.d=new Float64Array(o),this.z=new Float64Array(o+1),this.v=new Int16Array(o),this.middle=Math.round(o/2*(navigator.userAgent.indexOf(\"Gecko/\")>=0?1.2:1))}function y(t,e,n,r,i,a,o){for(var s=0;s<e;s++){for(var l=0;l<n;l++)r[l]=t[l*e+s];for(v(r,i,a,o,n),l=0;l<n;l++)t[l*e+s]=i[l]}for(l=0;l<n;l++){for(s=0;s<e;s++)r[s]=t[l*e+s];for(v(r,i,a,o,e),s=0;s<e;s++)t[l*e+s]=Math.sqrt(i[s])}}function v(t,e,n,r,i){n[0]=0,r[0]=-m,r[1]=+m;for(var a=1,o=0;a<i;a++){for(var s=(t[a]+a*a-(t[n[o]]+n[o]*n[o]))/(2*a-2*n[o]);s<=r[o];)o--,s=(t[a]+a*a-(t[n[o]]+n[o]*n[o]))/(2*a-2*n[o]);n[++o]=a,r[o]=s,r[o+1]=+m}for(a=0,o=0;a<i;a++){for(;r[o+1]<a;)o++;e[a]=(a-n[o])*(a-n[o])+t[n[o]]}}g.prototype.draw=function(t){this.ctx.clearRect(0,0,this.size,this.size),this.ctx.fillText(t,this.buffer,this.middle);for(var e=this.ctx.getImageData(0,0,this.size,this.size),n=new Uint8ClampedArray(this.size*this.size),r=0;r<this.size*this.size;r++){var i=e.data[4*r+3]/255;this.gridOuter[r]=1===i?0:0===i?m:Math.pow(Math.max(0,.5-i),2),this.gridInner[r]=1===i?m:0===i?0:Math.pow(Math.max(0,i-.5),2)}for(y(this.gridOuter,this.size,this.size,this.f,this.d,this.v,this.z),y(this.gridInner,this.size,this.size,this.f,this.d,this.v,this.z),r=0;r<this.size*this.size;r++)n[r]=Math.max(0,Math.min(255,Math.round(255-255*((this.gridOuter[r]-this.gridInner[r])/this.radius+this.cutoff))));return n},f.default=p;var _=function(t,e){this.requestManager=t,this.localIdeographFontFamily=e,this.entries={}};_.prototype.setURL=function(t){this.url=t},_.prototype.getGlyphs=function(e,n){var r=this,i=[];for(var a in e)for(var o=0,s=e[a];o<s.length;o+=1)i.push({stack:a,id:s[o]});t.asyncAll(i,(function(t,e){var n=t.stack,i=t.id,a=r.entries[n];a||(a=r.entries[n]={glyphs:{},requests:{},ranges:{}});var o=a.glyphs[i];if(void 0===o){if(o=r._tinySDF(a,n,i))return a.glyphs[i]=o,void e(null,{stack:n,id:i,glyph:o});var s=Math.floor(i/256);if(256*s>65535)e(new Error(\"glyphs > 65535 not supported\"));else if(a.ranges[s])e(null,{stack:n,id:i,glyph:o});else{var l=a.requests[s];l||(l=a.requests[s]=[],_.loadGlyphRange(n,s,r.url,r.requestManager,(function(t,e){if(e){for(var n in e)r._doesCharSupportLocalGlyph(+n)||(a.glyphs[+n]=e[+n]);a.ranges[s]=!0}for(var i=0,o=l;i<o.length;i+=1)(0,o[i])(t,e);delete a.requests[s]}))),l.push((function(t,r){t?e(t):r&&e(null,{stack:n,id:i,glyph:r[i]||null})}))}}else e(null,{stack:n,id:i,glyph:o})}),(function(t,e){if(t)n(t);else if(e){for(var r={},i=0,a=e;i<a.length;i+=1){var o=a[i],s=o.stack,l=o.id,c=o.glyph;(r[s]||(r[s]={}))[l]=c&&{id:c.id,bitmap:c.bitmap.clone(),metrics:c.metrics}}n(null,r)}}))},_.prototype._doesCharSupportLocalGlyph=function(e){return!!this.localIdeographFontFamily&&(t.isChar[\"CJK Unified Ideographs\"](e)||t.isChar[\"Hangul Syllables\"](e)||t.isChar.Hiragana(e)||t.isChar.Katakana(e))},_.prototype._tinySDF=function(e,n,r){var i=this.localIdeographFontFamily;if(i&&this._doesCharSupportLocalGlyph(r)){var a=e.tinySDF;if(!a){var o=\"400\";/bold/i.test(n)?o=\"900\":/medium/i.test(n)?o=\"500\":/light/i.test(n)&&(o=\"200\"),a=e.tinySDF=new _.TinySDF(24,3,8,.25,i,o)}return{id:r,bitmap:new t.AlphaImage({width:30,height:30},a.draw(String.fromCharCode(r))),metrics:{width:24,height:24,left:0,top:-8,advance:24}}}},_.loadGlyphRange=function(e,n,r,i,a){var o=256*n,s=o+255,l=i.transformRequest(i.normalizeGlyphsURL(r).replace(\"{fontstack}\",e).replace(\"{range}\",o+\"-\"+s),t.ResourceType.Glyphs);t.getArrayBuffer(l,(function(e,n){if(e)a(e);else if(n){for(var r={},i=0,o=t.parseGlyphPBF(n);i<o.length;i+=1){var s=o[i];r[s.id]=s}a(null,r)}}))},_.TinySDF=f;var b=function(){this.specification=t.styleSpec.light.position};b.prototype.possiblyEvaluate=function(e,n){return t.sphericalToCartesian(e.expression.evaluate(n))},b.prototype.interpolate=function(e,n,r){return{x:t.number(e.x,n.x,r),y:t.number(e.y,n.y,r),z:t.number(e.z,n.z,r)}};var x=new t.Properties({anchor:new t.DataConstantProperty(t.styleSpec.light.anchor),position:new b,color:new t.DataConstantProperty(t.styleSpec.light.color),intensity:new t.DataConstantProperty(t.styleSpec.light.intensity)}),w=function(e){function n(n){e.call(this),this._transitionable=new t.Transitionable(x),this.setLight(n),this._transitioning=this._transitionable.untransitioned()}return e&&(n.__proto__=e),(n.prototype=Object.create(e&&e.prototype)).constructor=n,n.prototype.getLight=function(){return this._transitionable.serialize()},n.prototype.setLight=function(e,n){if(void 0===n&&(n={}),!this._validate(t.validateLight,e,n))for(var r in e){var i=e[r];t.endsWith(r,\"-transition\")?this._transitionable.setTransition(r.slice(0,-\"-transition\".length),i):this._transitionable.setValue(r,i)}},n.prototype.updateTransitions=function(t){this._transitioning=this._transitionable.transitioned(t,this._transitioning)},n.prototype.hasTransition=function(){return this._transitioning.hasTransition()},n.prototype.recalculate=function(t){this.properties=this._transitioning.possiblyEvaluate(t)},n.prototype._validate=function(e,n,r){return(!r||!1!==r.validate)&&t.emitValidationErrors(this,e.call(t.validateStyle,t.extend({value:n,style:{glyphs:!0,sprite:!0},styleSpec:t.styleSpec})))},n}(t.Evented),k=function(t,e){this.width=t,this.height=e,this.nextRow=0,this.data=new Uint8Array(this.width*this.height),this.dashEntry={}};k.prototype.getDash=function(t,e){var n=t.join(\",\")+String(e);return this.dashEntry[n]||(this.dashEntry[n]=this.addDash(t,e)),this.dashEntry[n]},k.prototype.getDashRanges=function(t,e,n){var r=[],i=t.length%2==1?-t[t.length-1]*n:0,a=t[0]*n,o=!0;r.push({left:i,right:a,isDash:o,zeroLength:0===t[0]});for(var s=t[0],l=1;l<t.length;l++){var c=t[l];r.push({left:i=s*n,right:a=(s+=c)*n,isDash:o=!o,zeroLength:0===c})}return r},k.prototype.addRoundDash=function(t,e,n){for(var r=e/2,i=-n;i<=n;i++)for(var a=this.width*(this.nextRow+n+i),o=0,s=t[o],l=0;l<this.width;l++){l/s.right>1&&(s=t[++o]);var c=Math.abs(l-s.left),u=Math.abs(l-s.right),h=Math.min(c,u),d=void 0,f=i/n*(r+1);if(s.isDash){var p=r-Math.abs(f);d=Math.sqrt(h*h+p*p)}else d=r-Math.sqrt(h*h+f*f);this.data[a+l]=Math.max(0,Math.min(255,d+128))}},k.prototype.addRegularDash=function(t){for(var e=t.length-1;e>=0;--e){var n=t[e],r=t[e+1];n.zeroLength?t.splice(e,1):r&&r.isDash===n.isDash&&(r.left=n.left,t.splice(e,1))}var i=t[0],a=t[t.length-1];i.isDash===a.isDash&&(i.left=a.left-this.width,a.right=i.right+this.width);for(var o=this.width*this.nextRow,s=0,l=t[s],c=0;c<this.width;c++){c/l.right>1&&(l=t[++s]);var u=Math.abs(c-l.left),h=Math.abs(c-l.right),d=Math.min(u,h);this.data[o+c]=Math.max(0,Math.min(255,(l.isDash?d:-d)+128))}},k.prototype.addDash=function(e,n){var r=n?7:0,i=2*r+1;if(this.nextRow+i>this.height)return t.warnOnce(\"LineAtlas out of space\"),null;for(var a=0,o=0;o<e.length;o++)a+=e[o];if(0!==a){var s=this.width/a,l=this.getDashRanges(e,this.width,s);n?this.addRoundDash(l,s,r):this.addRegularDash(l)}var c={y:(this.nextRow+r+.5)/this.height,height:2*r/this.height,width:a};return this.nextRow+=i,this.dirty=!0,c},k.prototype.bind=function(t){var e=t.gl;this.texture?(e.bindTexture(e.TEXTURE_2D,this.texture),this.dirty&&(this.dirty=!1,e.texSubImage2D(e.TEXTURE_2D,0,0,0,this.width,this.height,e.ALPHA,e.UNSIGNED_BYTE,this.data))):(this.texture=e.createTexture(),e.bindTexture(e.TEXTURE_2D,this.texture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texImage2D(e.TEXTURE_2D,0,e.ALPHA,this.width,this.height,0,e.ALPHA,e.UNSIGNED_BYTE,this.data))};var M=function e(n,r){this.workerPool=n,this.actors=[],this.currentActor=0,this.id=t.uniqueId();for(var i=this.workerPool.acquire(this.id),a=0;a<i.length;a++){var o=new e.Actor(i[a],r,this.id);o.name=\"Worker \"+a,this.actors.push(o)}};function T(e,n,r){var i=function(i,a){if(i)return r(i);if(a){var o=t.pick(t.extend(a,e),[\"tiles\",\"minzoom\",\"maxzoom\",\"attribution\",\"mapbox_logo\",\"bounds\",\"scheme\",\"tileSize\",\"encoding\"]);a.vector_layers&&(o.vectorLayers=a.vector_layers,o.vectorLayerIds=o.vectorLayers.map((function(t){return t.id}))),o.tiles=n.canonicalizeTileset(o,e.url),r(null,o)}};return e.url?t.getJSON(n.transformRequest(n.normalizeSourceURL(e.url),t.ResourceType.Source),i):t.browser.frame((function(){return i(null,e)}))}M.prototype.broadcast=function(e,n,r){t.asyncAll(this.actors,(function(t,r){t.send(e,n,r)}),r=r||function(){})},M.prototype.getActor=function(){return this.currentActor=(this.currentActor+1)%this.actors.length,this.actors[this.currentActor]},M.prototype.remove=function(){this.actors.forEach((function(t){t.remove()})),this.actors=[],this.workerPool.release(this.id)},M.Actor=t.Actor;var S=function(e,n,r){this.bounds=t.LngLatBounds.convert(this.validateBounds(e)),this.minzoom=n||0,this.maxzoom=r||24};S.prototype.validateBounds=function(t){return Array.isArray(t)&&4===t.length?[Math.max(-180,t[0]),Math.max(-90,t[1]),Math.min(180,t[2]),Math.min(90,t[3])]:[-180,-90,180,90]},S.prototype.contains=function(e){var n=Math.pow(2,e.z),r=Math.floor(t.mercatorXfromLng(this.bounds.getWest())*n),i=Math.floor(t.mercatorYfromLat(this.bounds.getNorth())*n),a=Math.ceil(t.mercatorXfromLng(this.bounds.getEast())*n),o=Math.ceil(t.mercatorYfromLat(this.bounds.getSouth())*n);return e.x>=r&&e.x<a&&e.y>=i&&e.y<o};var A=function(e){function n(n,r,i,a){if(e.call(this),this.id=n,this.dispatcher=i,this.type=\"vector\",this.minzoom=0,this.maxzoom=22,this.scheme=\"xyz\",this.tileSize=512,this.reparseOverscaled=!0,this.isTileClipped=!0,this._loaded=!1,t.extend(this,t.pick(r,[\"url\",\"scheme\",\"tileSize\",\"promoteId\"])),this._options=t.extend({type:\"vector\"},r),this._collectResourceTiming=r.collectResourceTiming,512!==this.tileSize)throw new Error(\"vector tile sources must have a tileSize of 512\");this.setEventedParent(a)}return e&&(n.__proto__=e),(n.prototype=Object.create(e&&e.prototype)).constructor=n,n.prototype.load=function(){var e=this;this._loaded=!1,this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this._tileJSONRequest=T(this._options,this.map._requestManager,(function(n,r){e._tileJSONRequest=null,e._loaded=!0,n?e.fire(new t.ErrorEvent(n)):r&&(t.extend(e,r),r.bounds&&(e.tileBounds=new S(r.bounds,e.minzoom,e.maxzoom)),t.postTurnstileEvent(r.tiles,e.map._requestManager._customAccessToken),t.postMapLoadEvent(r.tiles,e.map._getMapId(),e.map._requestManager._skuToken,e.map._requestManager._customAccessToken),e.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"metadata\"})),e.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"content\"})))}))},n.prototype.loaded=function(){return this._loaded},n.prototype.hasTile=function(t){return!this.tileBounds||this.tileBounds.contains(t.canonical)},n.prototype.onAdd=function(t){this.map=t,this.load()},n.prototype.onRemove=function(){this._tileJSONRequest&&(this._tileJSONRequest.cancel(),this._tileJSONRequest=null)},n.prototype.serialize=function(){return t.extend({},this._options)},n.prototype.loadTile=function(e,n){var r=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme)),i={request:this.map._requestManager.transformRequest(r,t.ResourceType.Tile),uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,tileSize:this.tileSize*e.tileID.overscaleFactor(),type:this.type,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes,promoteId:this.promoteId};function a(r,i){return delete e.request,e.aborted?n(null):r&&404!==r.status?n(r):(i&&i.resourceTiming&&(e.resourceTiming=i.resourceTiming),this.map._refreshExpiredTiles&&i&&e.setExpiryData(i),e.loadVectorData(i,this.map.painter),t.cacheEntryPossiblyAdded(this.dispatcher),n(null),void(e.reloadCallback&&(this.loadTile(e,e.reloadCallback),e.reloadCallback=null)))}i.request.collectResourceTiming=this._collectResourceTiming,e.actor&&\"expired\"!==e.state?\"loading\"===e.state?e.reloadCallback=n:e.request=e.actor.send(\"reloadTile\",i,a.bind(this)):(e.actor=this.dispatcher.getActor(),e.request=e.actor.send(\"loadTile\",i,a.bind(this)))},n.prototype.abortTile=function(t){t.request&&(t.request.cancel(),delete t.request),t.actor&&t.actor.send(\"abortTile\",{uid:t.uid,type:this.type,source:this.id},void 0)},n.prototype.unloadTile=function(t){t.unloadVectorData(),t.actor&&t.actor.send(\"removeTile\",{uid:t.uid,type:this.type,source:this.id},void 0)},n.prototype.hasTransition=function(){return!1},n}(t.Evented),L=function(e){function n(n,r,i,a){e.call(this),this.id=n,this.dispatcher=i,this.setEventedParent(a),this.type=\"raster\",this.minzoom=0,this.maxzoom=22,this.roundZoom=!0,this.scheme=\"xyz\",this.tileSize=512,this._loaded=!1,this._options=t.extend({type:\"raster\"},r),t.extend(this,t.pick(r,[\"url\",\"scheme\",\"tileSize\"]))}return e&&(n.__proto__=e),(n.prototype=Object.create(e&&e.prototype)).constructor=n,n.prototype.load=function(){var e=this;this._loaded=!1,this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this._tileJSONRequest=T(this._options,this.map._requestManager,(function(n,r){e._tileJSONRequest=null,e._loaded=!0,n?e.fire(new t.ErrorEvent(n)):r&&(t.extend(e,r),r.bounds&&(e.tileBounds=new S(r.bounds,e.minzoom,e.maxzoom)),t.postTurnstileEvent(r.tiles),t.postMapLoadEvent(r.tiles,e.map._getMapId(),e.map._requestManager._skuToken),e.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"metadata\"})),e.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"content\"})))}))},n.prototype.loaded=function(){return this._loaded},n.prototype.onAdd=function(t){this.map=t,this.load()},n.prototype.onRemove=function(){this._tileJSONRequest&&(this._tileJSONRequest.cancel(),this._tileJSONRequest=null)},n.prototype.serialize=function(){return t.extend({},this._options)},n.prototype.hasTile=function(t){return!this.tileBounds||this.tileBounds.contains(t.canonical)},n.prototype.loadTile=function(e,n){var r=this,i=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.tileSize);e.request=t.getImage(this.map._requestManager.transformRequest(i,t.ResourceType.Tile),(function(i,a){if(delete e.request,e.aborted)e.state=\"unloaded\",n(null);else if(i)e.state=\"errored\",n(i);else if(a){r.map._refreshExpiredTiles&&e.setExpiryData(a),delete a.cacheControl,delete a.expires;var o=r.map.painter.context,s=o.gl;e.texture=r.map.painter.getTileTexture(a.width),e.texture?e.texture.update(a,{useMipmap:!0}):(e.texture=new t.Texture(o,a,s.RGBA,{useMipmap:!0}),e.texture.bind(s.LINEAR,s.CLAMP_TO_EDGE,s.LINEAR_MIPMAP_NEAREST),o.extTextureFilterAnisotropic&&s.texParameterf(s.TEXTURE_2D,o.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,o.extTextureFilterAnisotropicMax)),e.state=\"loaded\",t.cacheEntryPossiblyAdded(r.dispatcher),n(null)}}))},n.prototype.abortTile=function(t,e){t.request&&(t.request.cancel(),delete t.request),e()},n.prototype.unloadTile=function(t,e){t.texture&&this.map.painter.saveTileTexture(t.texture),e()},n.prototype.hasTransition=function(){return!1},n}(t.Evented),C=function(e){function n(n,r,i,a){e.call(this,n,r,i,a),this.type=\"raster-dem\",this.maxzoom=22,this._options=t.extend({type:\"raster-dem\"},r),this.encoding=r.encoding||\"mapbox\"}return e&&(n.__proto__=e),(n.prototype=Object.create(e&&e.prototype)).constructor=n,n.prototype.serialize=function(){return{type:\"raster-dem\",url:this.url,tileSize:this.tileSize,tiles:this.tiles,bounds:this.bounds,encoding:this.encoding}},n.prototype.loadTile=function(e,n){var r=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.tileSize);function i(t,r){t&&(e.state=\"errored\",n(t)),r&&(e.dem=r,e.needsHillshadePrepare=!0,e.state=\"loaded\",n(null))}e.request=t.getImage(this.map._requestManager.transformRequest(r,t.ResourceType.Tile),(function(r,a){if(delete e.request,e.aborted)e.state=\"unloaded\",n(null);else if(r)e.state=\"errored\",n(r);else if(a){this.map._refreshExpiredTiles&&e.setExpiryData(a),delete a.cacheControl,delete a.expires;var o=t.window.ImageBitmap&&a instanceof t.window.ImageBitmap&&t.offscreenCanvasSupported()?a:t.browser.getImageData(a,1),s={uid:e.uid,coord:e.tileID,source:this.id,rawImageData:o,encoding:this.encoding};e.actor&&\"expired\"!==e.state||(e.actor=this.dispatcher.getActor(),e.actor.send(\"loadDEMTile\",s,i.bind(this)))}}).bind(this)),e.neighboringTiles=this._getNeighboringTiles(e.tileID)},n.prototype._getNeighboringTiles=function(e){var n=e.canonical,r=Math.pow(2,n.z),i=(n.x-1+r)%r,a=0===n.x?e.wrap-1:e.wrap,o=(n.x+1+r)%r,s=n.x+1===r?e.wrap+1:e.wrap,l={};return l[new t.OverscaledTileID(e.overscaledZ,a,n.z,i,n.y).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,n.z,o,n.y).key]={backfilled:!1},n.y>0&&(l[new t.OverscaledTileID(e.overscaledZ,a,n.z,i,n.y-1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,e.wrap,n.z,n.x,n.y-1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,n.z,o,n.y-1).key]={backfilled:!1}),n.y+1<r&&(l[new t.OverscaledTileID(e.overscaledZ,a,n.z,i,n.y+1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,e.wrap,n.z,n.x,n.y+1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,n.z,o,n.y+1).key]={backfilled:!1}),l},n.prototype.unloadTile=function(t){t.demTexture&&this.map.painter.saveTileTexture(t.demTexture),t.fbo&&(t.fbo.destroy(),delete t.fbo),t.dem&&delete t.dem,delete t.neighboringTiles,t.state=\"unloaded\",t.actor&&t.actor.send(\"removeDEMTile\",{uid:t.uid,source:this.id})},n}(L),E=function(e){function n(n,r,i,a){e.call(this),this.id=n,this.type=\"geojson\",this.minzoom=0,this.maxzoom=18,this.tileSize=512,this.isTileClipped=!0,this.reparseOverscaled=!0,this._removed=!1,this._loaded=!1,this.actor=i.getActor(),this.setEventedParent(a),this._data=r.data,this._options=t.extend({},r),this._collectResourceTiming=r.collectResourceTiming,this._resourceTiming=[],void 0!==r.maxzoom&&(this.maxzoom=r.maxzoom),r.type&&(this.type=r.type),r.attribution&&(this.attribution=r.attribution),this.promoteId=r.promoteId;var o=t.EXTENT/this.tileSize;this.workerOptions=t.extend({source:this.id,cluster:r.cluster||!1,geojsonVtOptions:{buffer:(void 0!==r.buffer?r.buffer:128)*o,tolerance:(void 0!==r.tolerance?r.tolerance:.375)*o,extent:t.EXTENT,maxZoom:this.maxzoom,lineMetrics:r.lineMetrics||!1,generateId:r.generateId||!1},superclusterOptions:{maxZoom:void 0!==r.clusterMaxZoom?Math.min(r.clusterMaxZoom,this.maxzoom-1):this.maxzoom-1,extent:t.EXTENT,radius:(r.clusterRadius||50)*o,log:!1,generateId:r.generateId||!1},clusterProperties:r.clusterProperties},r.workerOptions)}return e&&(n.__proto__=e),(n.prototype=Object.create(e&&e.prototype)).constructor=n,n.prototype.load=function(){var e=this;this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this._updateWorkerData((function(n){if(n)e.fire(new t.ErrorEvent(n));else{var r={dataType:\"source\",sourceDataType:\"metadata\"};e._collectResourceTiming&&e._resourceTiming&&e._resourceTiming.length>0&&(r.resourceTiming=e._resourceTiming,e._resourceTiming=[]),e.fire(new t.Event(\"data\",r))}}))},n.prototype.onAdd=function(t){this.map=t,this.load()},n.prototype.setData=function(e){var n=this;return this._data=e,this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this._updateWorkerData((function(e){if(e)n.fire(new t.ErrorEvent(e));else{var r={dataType:\"source\",sourceDataType:\"content\"};n._collectResourceTiming&&n._resourceTiming&&n._resourceTiming.length>0&&(r.resourceTiming=n._resourceTiming,n._resourceTiming=[]),n.fire(new t.Event(\"data\",r))}})),this},n.prototype.getClusterExpansionZoom=function(t,e){return this.actor.send(\"geojson.getClusterExpansionZoom\",{clusterId:t,source:this.id},e),this},n.prototype.getClusterChildren=function(t,e){return this.actor.send(\"geojson.getClusterChildren\",{clusterId:t,source:this.id},e),this},n.prototype.getClusterLeaves=function(t,e,n,r){return this.actor.send(\"geojson.getClusterLeaves\",{source:this.id,clusterId:t,limit:e,offset:n},r),this},n.prototype._updateWorkerData=function(e){var n=this;this._loaded=!1;var r=t.extend({},this.workerOptions),i=this._data;\"string\"==typeof i?(r.request=this.map._requestManager.transformRequest(t.browser.resolveURL(i),t.ResourceType.Source),r.request.collectResourceTiming=this._collectResourceTiming):r.data=JSON.stringify(i),this.actor.send(this.type+\".loadData\",r,(function(t,i){n._removed||i&&i.abandoned||(n._loaded=!0,i&&i.resourceTiming&&i.resourceTiming[n.id]&&(n._resourceTiming=i.resourceTiming[n.id].slice(0)),n.actor.send(n.type+\".coalesce\",{source:r.source},null),e(t))}))},n.prototype.loaded=function(){return this._loaded},n.prototype.loadTile=function(e,n){var r=this,i=e.actor?\"reloadTile\":\"loadTile\";e.actor=this.actor,e.request=this.actor.send(i,{type:this.type,uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,maxZoom:this.maxzoom,tileSize:this.tileSize,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes,promoteId:this.promoteId},(function(t,a){return delete e.request,e.unloadVectorData(),e.aborted?n(null):t?n(t):(e.loadVectorData(a,r.map.painter,\"reloadTile\"===i),n(null))}))},n.prototype.abortTile=function(t){t.request&&(t.request.cancel(),delete t.request),t.aborted=!0},n.prototype.unloadTile=function(t){t.unloadVectorData(),this.actor.send(\"removeTile\",{uid:t.uid,type:this.type,source:this.id})},n.prototype.onRemove=function(){this._removed=!0,this.actor.send(\"removeSource\",{type:this.type,source:this.id})},n.prototype.serialize=function(){return t.extend({},this._options,{type:this.type,data:this._data})},n.prototype.hasTransition=function(){return!1},n}(t.Evented),O=t.createLayout([{name:\"a_pos\",type:\"Int16\",components:2},{name:\"a_texture_pos\",type:\"Int16\",components:2}]),D=function(e){function n(t,n,r,i){e.call(this),this.id=t,this.dispatcher=r,this.coordinates=n.coordinates,this.type=\"image\",this.minzoom=0,this.maxzoom=22,this.tileSize=512,this.tiles={},this._loaded=!1,this.setEventedParent(i),this.options=n}return e&&(n.__proto__=e),(n.prototype=Object.create(e&&e.prototype)).constructor=n,n.prototype.load=function(e,n){var r=this;this._loaded=!1,this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this.url=this.options.url,t.getImage(this.map._requestManager.transformRequest(this.url,t.ResourceType.Image),(function(i,a){r._loaded=!0,i?r.fire(new t.ErrorEvent(i)):a&&(r.image=a,e&&(r.coordinates=e),n&&n(),r._finishLoading())}))},n.prototype.loaded=function(){return this._loaded},n.prototype.updateImage=function(t){var e=this;return this.image&&t.url?(this.options.url=t.url,this.load(t.coordinates,(function(){e.texture=null})),this):this},n.prototype._finishLoading=function(){this.map&&(this.setCoordinates(this.coordinates),this.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"metadata\"})))},n.prototype.onAdd=function(t){this.map=t,this.load()},n.prototype.setCoordinates=function(e){var n=this;this.coordinates=e;var r=e.map(t.MercatorCoordinate.fromLngLat);this.tileID=function(e){for(var n=1/0,r=1/0,i=-1/0,a=-1/0,o=0,s=e;o<s.length;o+=1){var l=s[o];n=Math.min(n,l.x),r=Math.min(r,l.y),i=Math.max(i,l.x),a=Math.max(a,l.y)}var c=Math.max(i-n,a-r),u=Math.max(0,Math.floor(-Math.log(c)/Math.LN2)),h=Math.pow(2,u);return new t.CanonicalTileID(u,Math.floor((n+i)/2*h),Math.floor((r+a)/2*h))}(r),this.minzoom=this.maxzoom=this.tileID.z;var i=r.map((function(t){return n.tileID.getTilePoint(t)._round()}));return this._boundsArray=new t.StructArrayLayout4i8,this._boundsArray.emplaceBack(i[0].x,i[0].y,0,0),this._boundsArray.emplaceBack(i[1].x,i[1].y,t.EXTENT,0),this._boundsArray.emplaceBack(i[3].x,i[3].y,0,t.EXTENT),this._boundsArray.emplaceBack(i[2].x,i[2].y,t.EXTENT,t.EXTENT),this.boundsBuffer&&(this.boundsBuffer.destroy(),delete this.boundsBuffer),this.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"content\"})),this},n.prototype.prepare=function(){if(0!==Object.keys(this.tiles).length&&this.image){var e=this.map.painter.context,n=e.gl;for(var r in this.boundsBuffer||(this.boundsBuffer=e.createVertexBuffer(this._boundsArray,O.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture||(this.texture=new t.Texture(e,this.image,n.RGBA),this.texture.bind(n.LINEAR,n.CLAMP_TO_EDGE)),this.tiles){var i=this.tiles[r];\"loaded\"!==i.state&&(i.state=\"loaded\",i.texture=this.texture)}}},n.prototype.loadTile=function(t,e){this.tileID&&this.tileID.equals(t.tileID.canonical)?(this.tiles[String(t.tileID.wrap)]=t,t.buckets={},e(null)):(t.state=\"errored\",e(null))},n.prototype.serialize=function(){return{type:\"image\",url:this.options.url,coordinates:this.coordinates}},n.prototype.hasTransition=function(){return!1},n}(t.Evented),I=function(e){function n(t,n,r,i){e.call(this,t,n,r,i),this.roundZoom=!0,this.type=\"video\",this.options=n}return e&&(n.__proto__=e),(n.prototype=Object.create(e&&e.prototype)).constructor=n,n.prototype.load=function(){var e=this;this._loaded=!1;var n=this.options;this.urls=[];for(var r=0,i=n.urls;r<i.length;r+=1)this.urls.push(this.map._requestManager.transformRequest(i[r],t.ResourceType.Source).url);t.getVideo(this.urls,(function(n,r){e._loaded=!0,n?e.fire(new t.ErrorEvent(n)):r&&(e.video=r,e.video.loop=!0,e.video.addEventListener(\"playing\",(function(){e.map.triggerRepaint()})),e.map&&e.video.play(),e._finishLoading())}))},n.prototype.pause=function(){this.video&&this.video.pause()},n.prototype.play=function(){this.video&&this.video.play()},n.prototype.seek=function(e){if(this.video){var n=this.video.seekable;e<n.start(0)||e>n.end(0)?this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+this.id,null,\"Playback for this video can be set only between the \"+n.start(0)+\" and \"+n.end(0)+\"-second mark.\"))):this.video.currentTime=e}},n.prototype.getVideo=function(){return this.video},n.prototype.onAdd=function(t){this.map||(this.map=t,this.load(),this.video&&(this.video.play(),this.setCoordinates(this.coordinates)))},n.prototype.prepare=function(){if(!(0===Object.keys(this.tiles).length||this.video.readyState<2)){var e=this.map.painter.context,n=e.gl;for(var r in this.boundsBuffer||(this.boundsBuffer=e.createVertexBuffer(this._boundsArray,O.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?this.video.paused||(this.texture.bind(n.LINEAR,n.CLAMP_TO_EDGE),n.texSubImage2D(n.TEXTURE_2D,0,0,0,n.RGBA,n.UNSIGNED_BYTE,this.video)):(this.texture=new t.Texture(e,this.video,n.RGBA),this.texture.bind(n.LINEAR,n.CLAMP_TO_EDGE)),this.tiles){var i=this.tiles[r];\"loaded\"!==i.state&&(i.state=\"loaded\",i.texture=this.texture)}}},n.prototype.serialize=function(){return{type:\"video\",urls:this.urls,coordinates:this.coordinates}},n.prototype.hasTransition=function(){return this.video&&!this.video.paused},n}(D),P=function(e){function n(n,r,i,a){e.call(this,n,r,i,a),r.coordinates?Array.isArray(r.coordinates)&&4===r.coordinates.length&&!r.coordinates.some((function(t){return!Array.isArray(t)||2!==t.length||t.some((function(t){return\"number\"!=typeof t}))}))||this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+n,null,'\"coordinates\" property must be an array of 4 longitude/latitude array pairs'))):this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+n,null,'missing required property \"coordinates\"'))),r.animate&&\"boolean\"!=typeof r.animate&&this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+n,null,'optional \"animate\" property must be a boolean value'))),r.canvas?\"string\"==typeof r.canvas||r.canvas instanceof t.window.HTMLCanvasElement||this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+n,null,'\"canvas\" must be either a string representing the ID of the canvas element from which to read, or an HTMLCanvasElement instance'))):this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+n,null,'missing required property \"canvas\"'))),this.options=r,this.animate=void 0===r.animate||r.animate}return e&&(n.__proto__=e),(n.prototype=Object.create(e&&e.prototype)).constructor=n,n.prototype.load=function(){this._loaded=!0,this.canvas||(this.canvas=this.options.canvas instanceof t.window.HTMLCanvasElement?this.options.canvas:t.window.document.getElementById(this.options.canvas)),this.width=this.canvas.width,this.height=this.canvas.height,this._hasInvalidDimensions()?this.fire(new t.ErrorEvent(new Error(\"Canvas dimensions cannot be less than or equal to zero.\"))):(this.play=function(){this._playing=!0,this.map.triggerRepaint()},this.pause=function(){this._playing&&(this.prepare(),this._playing=!1)},this._finishLoading())},n.prototype.getCanvas=function(){return this.canvas},n.prototype.onAdd=function(t){this.map=t,this.load(),this.canvas&&this.animate&&this.play()},n.prototype.onRemove=function(){this.pause()},n.prototype.prepare=function(){var e=!1;if(this.canvas.width!==this.width&&(this.width=this.canvas.width,e=!0),this.canvas.height!==this.height&&(this.height=this.canvas.height,e=!0),!this._hasInvalidDimensions()&&0!==Object.keys(this.tiles).length){var n=this.map.painter.context,r=n.gl;for(var i in this.boundsBuffer||(this.boundsBuffer=n.createVertexBuffer(this._boundsArray,O.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?(e||this._playing)&&this.texture.update(this.canvas,{premultiply:!0}):this.texture=new t.Texture(n,this.canvas,r.RGBA,{premultiply:!0}),this.tiles){var a=this.tiles[i];\"loaded\"!==a.state&&(a.state=\"loaded\",a.texture=this.texture)}}},n.prototype.serialize=function(){return{type:\"canvas\",coordinates:this.coordinates}},n.prototype.hasTransition=function(){return this._playing},n.prototype._hasInvalidDimensions=function(){for(var t=0,e=[this.canvas.width,this.canvas.height];t<e.length;t+=1){var n=e[t];if(isNaN(n)||n<=0)return!0}return!1},n}(D),R={vector:A,raster:L,\"raster-dem\":C,geojson:E,video:I,image:D,canvas:P};function z(e,n){var r=t.identity([]);return t.translate(r,r,[1,1,0]),t.scale(r,r,[.5*e.width,.5*e.height,1]),t.multiply(r,r,e.calculatePosMatrix(n.toUnwrapped()))}function j(t,e,n,r,i,a){var o=function(t,e,n){if(t)for(var r=0,i=t;r<i.length;r+=1){var a=e[i[r]];if(a&&a.source===n&&\"fill-extrusion\"===a.type)return!0}else for(var o in e){var s=e[o];if(s.source===n&&\"fill-extrusion\"===s.type)return!0}return!1}(i&&i.layers,e,t.id),s=a.maxPitchScaleFactor(),l=t.tilesIn(r,s,o);l.sort(F);for(var c=[],u=0,h=l;u<h.length;u+=1){var d=h[u];c.push({wrappedTileID:d.tileID.wrapped().key,queryResults:d.tile.queryRenderedFeatures(e,n,t._state,d.queryGeometry,d.cameraQueryGeometry,d.scale,i,a,s,z(t.transform,d.tileID))})}var f=function(t){for(var e={},n={},r=0,i=t;r<i.length;r+=1){var a=i[r],o=a.queryResults,s=a.wrappedTileID,l=n[s]=n[s]||{};for(var c in o)for(var u=o[c],h=l[c]=l[c]||{},d=e[c]=e[c]||[],f=0,p=u;f<p.length;f+=1){var m=p[f];h[m.featureIndex]||(h[m.featureIndex]=!0,d.push(m))}}return e}(c);for(var p in f)f[p].forEach((function(e){var n=e.feature,r=t.getFeatureState(n.layer[\"source-layer\"],n.id);n.source=n.layer.source,n.layer[\"source-layer\"]&&(n.sourceLayer=n.layer[\"source-layer\"]),n.state=r}));return f}function F(t,e){var n=t.tileID,r=e.tileID;return n.overscaledZ-r.overscaledZ||n.canonical.y-r.canonical.y||n.wrap-r.wrap||n.canonical.x-r.canonical.x}var N=function(t,e){this.max=t,this.onRemove=e,this.reset()};N.prototype.reset=function(){for(var t in this.data)for(var e=0,n=this.data[t];e<n.length;e+=1){var r=n[e];r.timeout&&clearTimeout(r.timeout),this.onRemove(r.value)}return this.data={},this.order=[],this},N.prototype.add=function(t,e,n){var r=this,i=t.wrapped().key;void 0===this.data[i]&&(this.data[i]=[]);var a={value:e,timeout:void 0};if(void 0!==n&&(a.timeout=setTimeout((function(){r.remove(t,a)}),n)),this.data[i].push(a),this.order.push(i),this.order.length>this.max){var o=this._getAndRemoveByKey(this.order[0]);o&&this.onRemove(o)}return this},N.prototype.has=function(t){return t.wrapped().key in this.data},N.prototype.getAndRemove=function(t){return this.has(t)?this._getAndRemoveByKey(t.wrapped().key):null},N.prototype._getAndRemoveByKey=function(t){var e=this.data[t].shift();return e.timeout&&clearTimeout(e.timeout),0===this.data[t].length&&delete this.data[t],this.order.splice(this.order.indexOf(t),1),e.value},N.prototype.getByKey=function(t){var e=this.data[t];return e?e[0].value:null},N.prototype.get=function(t){return this.has(t)?this.data[t.wrapped().key][0].value:null},N.prototype.remove=function(t,e){if(!this.has(t))return this;var n=t.wrapped().key,r=void 0===e?0:this.data[n].indexOf(e),i=this.data[n][r];return this.data[n].splice(r,1),i.timeout&&clearTimeout(i.timeout),0===this.data[n].length&&delete this.data[n],this.onRemove(i.value),this.order.splice(this.order.indexOf(n),1),this},N.prototype.setMaxSize=function(t){for(this.max=t;this.order.length>this.max;){var e=this._getAndRemoveByKey(this.order[0]);e&&this.onRemove(e)}return this},N.prototype.filter=function(t){var e=[];for(var n in this.data)for(var r=0,i=this.data[n];r<i.length;r+=1){var a=i[r];t(a.value)||e.push(a)}for(var o=0,s=e;o<s.length;o+=1){var l=s[o];this.remove(l.value.tileID,l)}};var B=function(t,e,n){this.context=t;var r=t.gl;this.buffer=r.createBuffer(),this.dynamicDraw=Boolean(n),this.context.unbindVAO(),t.bindElementBuffer.set(this.buffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,e.arrayBuffer,this.dynamicDraw?r.DYNAMIC_DRAW:r.STATIC_DRAW),this.dynamicDraw||delete e.arrayBuffer};B.prototype.bind=function(){this.context.bindElementBuffer.set(this.buffer)},B.prototype.updateData=function(t){var e=this.context.gl;this.context.unbindVAO(),this.bind(),e.bufferSubData(e.ELEMENT_ARRAY_BUFFER,0,t.arrayBuffer)},B.prototype.destroy=function(){this.buffer&&(this.context.gl.deleteBuffer(this.buffer),delete this.buffer)};var Y={Int8:\"BYTE\",Uint8:\"UNSIGNED_BYTE\",Int16:\"SHORT\",Uint16:\"UNSIGNED_SHORT\",Int32:\"INT\",Uint32:\"UNSIGNED_INT\",Float32:\"FLOAT\"},H=function(t,e,n,r){this.length=e.length,this.attributes=n,this.itemSize=e.bytesPerElement,this.dynamicDraw=r,this.context=t;var i=t.gl;this.buffer=i.createBuffer(),t.bindVertexBuffer.set(this.buffer),i.bufferData(i.ARRAY_BUFFER,e.arrayBuffer,this.dynamicDraw?i.DYNAMIC_DRAW:i.STATIC_DRAW),this.dynamicDraw||delete e.arrayBuffer};H.prototype.bind=function(){this.context.bindVertexBuffer.set(this.buffer)},H.prototype.updateData=function(t){var e=this.context.gl;this.bind(),e.bufferSubData(e.ARRAY_BUFFER,0,t.arrayBuffer)},H.prototype.enableAttributes=function(t,e){for(var n=0;n<this.attributes.length;n++){var r=e.attributes[this.attributes[n].name];void 0!==r&&t.enableVertexAttribArray(r)}},H.prototype.setVertexAttribPointers=function(t,e,n){for(var r=0;r<this.attributes.length;r++){var i=this.attributes[r],a=e.attributes[i.name];void 0!==a&&t.vertexAttribPointer(a,i.components,t[Y[i.type]],!1,this.itemSize,i.offset+this.itemSize*(n||0))}},H.prototype.destroy=function(){this.buffer&&(this.context.gl.deleteBuffer(this.buffer),delete this.buffer)};var V=function(t){this.gl=t.gl,this.default=this.getDefault(),this.current=this.default,this.dirty=!1};V.prototype.get=function(){return this.current},V.prototype.set=function(t){},V.prototype.getDefault=function(){return this.default},V.prototype.setDefault=function(){this.set(this.default)};var U=function(e){function n(){e.apply(this,arguments)}return e&&(n.__proto__=e),(n.prototype=Object.create(e&&e.prototype)).constructor=n,n.prototype.getDefault=function(){return t.Color.transparent},n.prototype.set=function(t){var e=this.current;(t.r!==e.r||t.g!==e.g||t.b!==e.b||t.a!==e.a||this.dirty)&&(this.gl.clearColor(t.r,t.g,t.b,t.a),this.current=t,this.dirty=!1)},n}(V),W=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return 1},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.clearDepth(t),this.current=t,this.dirty=!1)},e}(V),q=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return 0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.clearStencil(t),this.current=t,this.dirty=!1)},e}(V),G=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return[!0,!0,!0,!0]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||t[3]!==e[3]||this.dirty)&&(this.gl.colorMask(t[0],t[1],t[2],t[3]),this.current=t,this.dirty=!1)},e}(V),X=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return!0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.depthMask(t),this.current=t,this.dirty=!1)},e}(V),Z=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return 255},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.stencilMask(t),this.current=t,this.dirty=!1)},e}(V),J=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return{func:this.gl.ALWAYS,ref:0,mask:255}},e.prototype.set=function(t){var e=this.current;(t.func!==e.func||t.ref!==e.ref||t.mask!==e.mask||this.dirty)&&(this.gl.stencilFunc(t.func,t.ref,t.mask),this.current=t,this.dirty=!1)},e}(V),K=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[t.KEEP,t.KEEP,t.KEEP]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||this.dirty)&&(this.gl.stencilOp(t[0],t[1],t[2]),this.current=t,this.dirty=!1)},e}(V),$=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.STENCIL_TEST):e.disable(e.STENCIL_TEST),this.current=t,this.dirty=!1}},e}(V),Q=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return[0,1]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||this.dirty)&&(this.gl.depthRange(t[0],t[1]),this.current=t,this.dirty=!1)},e}(V),tt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.DEPTH_TEST):e.disable(e.DEPTH_TEST),this.current=t,this.dirty=!1}},e}(V),et=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return this.gl.LESS},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.depthFunc(t),this.current=t,this.dirty=!1)},e}(V),nt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.BLEND):e.disable(e.BLEND),this.current=t,this.dirty=!1}},e}(V),rt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[t.ONE,t.ZERO]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||this.dirty)&&(this.gl.blendFunc(t[0],t[1]),this.current=t,this.dirty=!1)},e}(V),it=function(e){function n(){e.apply(this,arguments)}return e&&(n.__proto__=e),(n.prototype=Object.create(e&&e.prototype)).constructor=n,n.prototype.getDefault=function(){return t.Color.transparent},n.prototype.set=function(t){var e=this.current;(t.r!==e.r||t.g!==e.g||t.b!==e.b||t.a!==e.a||this.dirty)&&(this.gl.blendColor(t.r,t.g,t.b,t.a),this.current=t,this.dirty=!1)},n}(V),at=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return this.gl.FUNC_ADD},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.blendEquation(t),this.current=t,this.dirty=!1)},e}(V),ot=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.CULL_FACE):e.disable(e.CULL_FACE),this.current=t,this.dirty=!1}},e}(V),st=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return this.gl.BACK},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.cullFace(t),this.current=t,this.dirty=!1)},e}(V),lt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return this.gl.CCW},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.frontFace(t),this.current=t,this.dirty=!1)},e}(V),ct=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.useProgram(t),this.current=t,this.dirty=!1)},e}(V),ut=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return this.gl.TEXTURE0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.activeTexture(t),this.current=t,this.dirty=!1)},e}(V),ht=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[0,0,t.drawingBufferWidth,t.drawingBufferHeight]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||t[3]!==e[3]||this.dirty)&&(this.gl.viewport(t[0],t[1],t[2],t[3]),this.current=t,this.dirty=!1)},e}(V),dt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindFramebuffer(e.FRAMEBUFFER,t),this.current=t,this.dirty=!1}},e}(V),ft=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindRenderbuffer(e.RENDERBUFFER,t),this.current=t,this.dirty=!1}},e}(V),pt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindTexture(e.TEXTURE_2D,t),this.current=t,this.dirty=!1}},e}(V),mt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindBuffer(e.ARRAY_BUFFER,t),this.current=t,this.dirty=!1}},e}(V),gt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){var e=this.gl;e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t),this.current=t,this.dirty=!1},e}(V),yt=function(t){function e(e){t.call(this,e),this.vao=e.extVertexArrayObject}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){this.vao&&(t!==this.current||this.dirty)&&(this.vao.bindVertexArrayOES(t),this.current=t,this.dirty=!1)},e}(V),vt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return 4},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_ALIGNMENT,t),this.current=t,this.dirty=!1}},e}(V),_t=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t),this.current=t,this.dirty=!1}},e}(V),bt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,t),this.current=t,this.dirty=!1}},e}(V),xt=function(t){function e(e,n){t.call(this,e),this.context=e,this.parent=n}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getDefault=function(){return null},e}(V),wt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.setDirty=function(){this.dirty=!0},e.prototype.set=function(t){if(t!==this.current||this.dirty){this.context.bindFramebuffer.set(this.parent);var e=this.gl;e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0),this.current=t,this.dirty=!1}},e}(xt),kt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.set=function(t){if(t!==this.current||this.dirty){this.context.bindFramebuffer.set(this.parent);var e=this.gl;e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,t),this.current=t,this.dirty=!1}},e}(xt),Mt=function(t,e,n,r){this.context=t,this.width=e,this.height=n;var i=this.framebuffer=t.gl.createFramebuffer();this.colorAttachment=new wt(t,i),r&&(this.depthAttachment=new kt(t,i))};Mt.prototype.destroy=function(){var t=this.context.gl,e=this.colorAttachment.get();if(e&&t.deleteTexture(e),this.depthAttachment){var n=this.depthAttachment.get();n&&t.deleteRenderbuffer(n)}t.deleteFramebuffer(this.framebuffer)};var Tt=function(t,e,n){this.func=t,this.mask=e,this.range=n};Tt.ReadOnly=!1,Tt.ReadWrite=!0,Tt.disabled=new Tt(519,Tt.ReadOnly,[0,1]);var St=function(t,e,n,r,i,a){this.test=t,this.ref=e,this.mask=n,this.fail=r,this.depthFail=i,this.pass=a};St.disabled=new St({func:519,mask:0},0,0,7680,7680,7680);var At=function(t,e,n){this.blendFunction=t,this.blendColor=e,this.mask=n};At.disabled=new At(At.Replace=[1,0],t.Color.transparent,[!1,!1,!1,!1]),At.unblended=new At(At.Replace,t.Color.transparent,[!0,!0,!0,!0]),At.alphaBlended=new At([1,771],t.Color.transparent,[!0,!0,!0,!0]);var Lt=function(t,e,n){this.enable=t,this.mode=e,this.frontFace=n};Lt.disabled=new Lt(!1,1029,2305),Lt.backCCW=new Lt(!0,1029,2305);var Ct=function(t){this.gl=t,this.extVertexArrayObject=this.gl.getExtension(\"OES_vertex_array_object\"),this.clearColor=new U(this),this.clearDepth=new W(this),this.clearStencil=new q(this),this.colorMask=new G(this),this.depthMask=new X(this),this.stencilMask=new Z(this),this.stencilFunc=new J(this),this.stencilOp=new K(this),this.stencilTest=new $(this),this.depthRange=new Q(this),this.depthTest=new tt(this),this.depthFunc=new et(this),this.blend=new nt(this),this.blendFunc=new rt(this),this.blendColor=new it(this),this.blendEquation=new at(this),this.cullFace=new ot(this),this.cullFaceSide=new st(this),this.frontFace=new lt(this),this.program=new ct(this),this.activeTexture=new ut(this),this.viewport=new ht(this),this.bindFramebuffer=new dt(this),this.bindRenderbuffer=new ft(this),this.bindTexture=new pt(this),this.bindVertexBuffer=new mt(this),this.bindElementBuffer=new gt(this),this.bindVertexArrayOES=this.extVertexArrayObject&&new yt(this),this.pixelStoreUnpack=new vt(this),this.pixelStoreUnpackPremultiplyAlpha=new _t(this),this.pixelStoreUnpackFlipY=new bt(this),this.extTextureFilterAnisotropic=t.getExtension(\"EXT_texture_filter_anisotropic\")||t.getExtension(\"MOZ_EXT_texture_filter_anisotropic\")||t.getExtension(\"WEBKIT_EXT_texture_filter_anisotropic\"),this.extTextureFilterAnisotropic&&(this.extTextureFilterAnisotropicMax=t.getParameter(this.extTextureFilterAnisotropic.MAX_TEXTURE_MAX_ANISOTROPY_EXT)),this.extTextureHalfFloat=t.getExtension(\"OES_texture_half_float\"),this.extTextureHalfFloat&&(t.getExtension(\"OES_texture_half_float_linear\"),this.extRenderToTextureHalfFloat=t.getExtension(\"EXT_color_buffer_half_float\")),this.extTimerQuery=t.getExtension(\"EXT_disjoint_timer_query\")};Ct.prototype.setDefault=function(){this.unbindVAO(),this.clearColor.setDefault(),this.clearDepth.setDefault(),this.clearStencil.setDefault(),this.colorMask.setDefault(),this.depthMask.setDefault(),this.stencilMask.setDefault(),this.stencilFunc.setDefault(),this.stencilOp.setDefault(),this.stencilTest.setDefault(),this.depthRange.setDefault(),this.depthTest.setDefault(),this.depthFunc.setDefault(),this.blend.setDefault(),this.blendFunc.setDefault(),this.blendColor.setDefault(),this.blendEquation.setDefault(),this.cullFace.setDefault(),this.cullFaceSide.setDefault(),this.frontFace.setDefault(),this.program.setDefault(),this.activeTexture.setDefault(),this.bindFramebuffer.setDefault(),this.pixelStoreUnpack.setDefault(),this.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.pixelStoreUnpackFlipY.setDefault()},Ct.prototype.setDirty=function(){this.clearColor.dirty=!0,this.clearDepth.dirty=!0,this.clearStencil.dirty=!0,this.colorMask.dirty=!0,this.depthMask.dirty=!0,this.stencilMask.dirty=!0,this.stencilFunc.dirty=!0,this.stencilOp.dirty=!0,this.stencilTest.dirty=!0,this.depthRange.dirty=!0,this.depthTest.dirty=!0,this.depthFunc.dirty=!0,this.blend.dirty=!0,this.blendFunc.dirty=!0,this.blendColor.dirty=!0,this.blendEquation.dirty=!0,this.cullFace.dirty=!0,this.cullFaceSide.dirty=!0,this.frontFace.dirty=!0,this.program.dirty=!0,this.activeTexture.dirty=!0,this.viewport.dirty=!0,this.bindFramebuffer.dirty=!0,this.bindRenderbuffer.dirty=!0,this.bindTexture.dirty=!0,this.bindVertexBuffer.dirty=!0,this.bindElementBuffer.dirty=!0,this.extVertexArrayObject&&(this.bindVertexArrayOES.dirty=!0),this.pixelStoreUnpack.dirty=!0,this.pixelStoreUnpackPremultiplyAlpha.dirty=!0,this.pixelStoreUnpackFlipY.dirty=!0},Ct.prototype.createIndexBuffer=function(t,e){return new B(this,t,e)},Ct.prototype.createVertexBuffer=function(t,e,n){return new H(this,t,e,n)},Ct.prototype.createRenderbuffer=function(t,e,n){var r=this.gl,i=r.createRenderbuffer();return this.bindRenderbuffer.set(i),r.renderbufferStorage(r.RENDERBUFFER,t,e,n),this.bindRenderbuffer.set(null),i},Ct.prototype.createFramebuffer=function(t,e,n){return new Mt(this,t,e,n)},Ct.prototype.clear=function(t){var e=t.color,n=t.depth,r=this.gl,i=0;e&&(i|=r.COLOR_BUFFER_BIT,this.clearColor.set(e),this.colorMask.set([!0,!0,!0,!0])),void 0!==n&&(i|=r.DEPTH_BUFFER_BIT,this.depthRange.set([0,1]),this.clearDepth.set(n),this.depthMask.set(!0)),r.clear(i)},Ct.prototype.setCullFace=function(t){!1===t.enable?this.cullFace.set(!1):(this.cullFace.set(!0),this.cullFaceSide.set(t.mode),this.frontFace.set(t.frontFace))},Ct.prototype.setDepthMode=function(t){t.func!==this.gl.ALWAYS||t.mask?(this.depthTest.set(!0),this.depthFunc.set(t.func),this.depthMask.set(t.mask),this.depthRange.set(t.range)):this.depthTest.set(!1)},Ct.prototype.setStencilMode=function(t){t.test.func!==this.gl.ALWAYS||t.mask?(this.stencilTest.set(!0),this.stencilMask.set(t.mask),this.stencilOp.set([t.fail,t.depthFail,t.pass]),this.stencilFunc.set({func:t.test.func,ref:t.ref,mask:t.test.mask})):this.stencilTest.set(!1)},Ct.prototype.setColorMode=function(e){t.deepEqual(e.blendFunction,At.Replace)?this.blend.set(!1):(this.blend.set(!0),this.blendFunc.set(e.blendFunction),this.blendColor.set(e.blendColor)),this.colorMask.set(e.mask)},Ct.prototype.unbindVAO=function(){this.extVertexArrayObject&&this.bindVertexArrayOES.set(null)};var Et=function(e){function n(n,r,i){var a=this;e.call(this),this.id=n,this.dispatcher=i,this.on(\"data\",(function(t){\"source\"===t.dataType&&\"metadata\"===t.sourceDataType&&(a._sourceLoaded=!0),a._sourceLoaded&&!a._paused&&\"source\"===t.dataType&&\"content\"===t.sourceDataType&&(a.reload(),a.transform&&a.update(a.transform))})),this.on(\"error\",(function(){a._sourceErrored=!0})),this._source=function(e,n,r,i){var a=new R[n.type](e,n,r,i);if(a.id!==e)throw new Error(\"Expected Source id to be \"+e+\" instead of \"+a.id);return t.bindAll([\"load\",\"abort\",\"unload\",\"serialize\",\"prepare\"],a),a}(n,r,i,this),this._tiles={},this._cache=new N(0,this._unloadTile.bind(this)),this._timers={},this._cacheTimers={},this._maxTileCacheSize=null,this._loadedParentTiles={},this._coveredTiles={},this._state=new t.SourceFeatureState}return e&&(n.__proto__=e),(n.prototype=Object.create(e&&e.prototype)).constructor=n,n.prototype.onAdd=function(t){this.map=t,this._maxTileCacheSize=t?t._maxTileCacheSize:null,this._source&&this._source.onAdd&&this._source.onAdd(t)},n.prototype.onRemove=function(t){this._source&&this._source.onRemove&&this._source.onRemove(t)},n.prototype.loaded=function(){if(this._sourceErrored)return!0;if(!this._sourceLoaded)return!1;if(!this._source.loaded())return!1;for(var t in this._tiles){var e=this._tiles[t];if(\"loaded\"!==e.state&&\"errored\"!==e.state)return!1}return!0},n.prototype.getSource=function(){return this._source},n.prototype.pause=function(){this._paused=!0},n.prototype.resume=function(){if(this._paused){var t=this._shouldReloadOnResume;this._paused=!1,this._shouldReloadOnResume=!1,t&&this.reload(),this.transform&&this.update(this.transform)}},n.prototype._loadTile=function(t,e){return this._source.loadTile(t,e)},n.prototype._unloadTile=function(t){if(this._source.unloadTile)return this._source.unloadTile(t,(function(){}))},n.prototype._abortTile=function(t){if(this._source.abortTile)return this._source.abortTile(t,(function(){}))},n.prototype.serialize=function(){return this._source.serialize()},n.prototype.prepare=function(t){for(var e in this._source.prepare&&this._source.prepare(),this._state.coalesceChanges(this._tiles,this.map?this.map.painter:null),this._tiles){var n=this._tiles[e];n.upload(t),n.prepare(this.map.style.imageManager)}},n.prototype.getIds=function(){return t.values(this._tiles).map((function(t){return t.tileID})).sort(Ot).map((function(t){return t.key}))},n.prototype.getRenderableIds=function(e){var n=this,r=[];for(var i in this._tiles)this._isIdRenderable(i,e)&&r.push(this._tiles[i]);return e?r.sort((function(e,r){var i=e.tileID,a=r.tileID,o=new t.Point(i.canonical.x,i.canonical.y)._rotate(n.transform.angle),s=new t.Point(a.canonical.x,a.canonical.y)._rotate(n.transform.angle);return i.overscaledZ-a.overscaledZ||s.y-o.y||s.x-o.x})).map((function(t){return t.tileID.key})):r.map((function(t){return t.tileID})).sort(Ot).map((function(t){return t.key}))},n.prototype.hasRenderableParent=function(t){var e=this.findLoadedParent(t,0);return!!e&&this._isIdRenderable(e.tileID.key)},n.prototype._isIdRenderable=function(t,e){return this._tiles[t]&&this._tiles[t].hasData()&&!this._coveredTiles[t]&&(e||!this._tiles[t].holdingForFade())},n.prototype.reload=function(){if(this._paused)this._shouldReloadOnResume=!0;else for(var t in this._cache.reset(),this._tiles)\"errored\"!==this._tiles[t].state&&this._reloadTile(t,\"reloading\")},n.prototype._reloadTile=function(t,e){var n=this._tiles[t];n&&(\"loading\"!==n.state&&(n.state=e),this._loadTile(n,this._tileLoaded.bind(this,n,t,e)))},n.prototype._tileLoaded=function(e,n,r,i){if(i)return e.state=\"errored\",void(404!==i.status?this._source.fire(new t.ErrorEvent(i,{tile:e})):this.update(this.transform));e.timeAdded=t.browser.now(),\"expired\"===r&&(e.refreshedUponExpiration=!0),this._setTileReloadTimer(n,e),\"raster-dem\"===this.getSource().type&&e.dem&&this._backfillDEM(e),this._state.initializeTileState(e,this.map?this.map.painter:null),this._source.fire(new t.Event(\"data\",{dataType:\"source\",tile:e,coord:e.tileID}))},n.prototype._backfillDEM=function(t){for(var e=this.getRenderableIds(),n=0;n<e.length;n++){var r=e[n];if(t.neighboringTiles&&t.neighboringTiles[r]){var i=this.getTileByID(r);a(t,i),a(i,t)}}function a(t,e){t.needsHillshadePrepare=!0;var n=e.tileID.canonical.x-t.tileID.canonical.x,r=e.tileID.canonical.y-t.tileID.canonical.y,i=Math.pow(2,t.tileID.canonical.z),a=e.tileID.key;0===n&&0===r||Math.abs(r)>1||(Math.abs(n)>1&&(1===Math.abs(n+i)?n+=i:1===Math.abs(n-i)&&(n-=i)),e.dem&&t.dem&&(t.dem.backfillBorder(e.dem,n,r),t.neighboringTiles&&t.neighboringTiles[a]&&(t.neighboringTiles[a].backfilled=!0)))}},n.prototype.getTile=function(t){return this.getTileByID(t.key)},n.prototype.getTileByID=function(t){return this._tiles[t]},n.prototype._retainLoadedChildren=function(t,e,n,r){for(var i in this._tiles){var a=this._tiles[i];if(!(r[i]||!a.hasData()||a.tileID.overscaledZ<=e||a.tileID.overscaledZ>n)){for(var o=a.tileID;a&&a.tileID.overscaledZ>e+1;){var s=a.tileID.scaledTo(a.tileID.overscaledZ-1);(a=this._tiles[s.key])&&a.hasData()&&(o=s)}for(var l=o;l.overscaledZ>e;)if(t[(l=l.scaledTo(l.overscaledZ-1)).key]){r[o.key]=o;break}}}},n.prototype.findLoadedParent=function(t,e){if(t.key in this._loadedParentTiles){var n=this._loadedParentTiles[t.key];return n&&n.tileID.overscaledZ>=e?n:null}for(var r=t.overscaledZ-1;r>=e;r--){var i=t.scaledTo(r),a=this._getLoadedTile(i);if(a)return a}},n.prototype._getLoadedTile=function(t){var e=this._tiles[t.key];return e&&e.hasData()?e:this._cache.getByKey(t.wrapped().key)},n.prototype.updateCacheSize=function(t){var e=Math.ceil(t.width/this._source.tileSize)+1,n=Math.ceil(t.height/this._source.tileSize)+1,r=Math.floor(e*n*5),i=\"number\"==typeof this._maxTileCacheSize?Math.min(this._maxTileCacheSize,r):r;this._cache.setMaxSize(i)},n.prototype.handleWrapJump=function(t){var e=Math.round((t-(void 0===this._prevLng?t:this._prevLng))/360);if(this._prevLng=t,e){var n={};for(var r in this._tiles){var i=this._tiles[r];i.tileID=i.tileID.unwrapTo(i.tileID.wrap+e),n[i.tileID.key]=i}for(var a in this._tiles=n,this._timers)clearTimeout(this._timers[a]),delete this._timers[a];for(var o in this._tiles)this._setTileReloadTimer(o,this._tiles[o])}},n.prototype.update=function(e){var r=this;if(this.transform=e,this._sourceLoaded&&!this._paused){var i;this.updateCacheSize(e),this.handleWrapJump(this.transform.center.lng),this._coveredTiles={},this.used?this._source.tileID?i=e.getVisibleUnwrappedCoordinates(this._source.tileID).map((function(e){return new t.OverscaledTileID(e.canonical.z,e.wrap,e.canonical.z,e.canonical.x,e.canonical.y)})):(i=e.coveringTiles({tileSize:this._source.tileSize,minzoom:this._source.minzoom,maxzoom:this._source.maxzoom,roundZoom:this._source.roundZoom,reparseOverscaled:this._source.reparseOverscaled}),this._source.hasTile&&(i=i.filter((function(t){return r._source.hasTile(t)})))):i=[];var a=e.coveringZoomLevel(this._source),o=Math.max(a-n.maxOverzooming,this._source.minzoom),s=Math.max(a+n.maxUnderzooming,this._source.minzoom),l=this._updateRetainedTiles(i,a);if(Dt(this._source.type)){for(var c={},u={},h=0,d=Object.keys(l);h<d.length;h+=1){var f=d[h],p=l[f],m=this._tiles[f];if(m&&!(m.fadeEndTime&&m.fadeEndTime<=t.browser.now())){var g=this.findLoadedParent(p,o);g&&(this._addTile(g.tileID),c[g.tileID.key]=g.tileID),u[f]=p}}for(var y in this._retainLoadedChildren(u,a,s,l),c)l[y]||(this._coveredTiles[y]=!0,l[y]=c[y])}for(var v in l)this._tiles[v].clearFadeHold();for(var _=0,b=t.keysDifference(this._tiles,l);_<b.length;_+=1){var x=b[_],w=this._tiles[x];w.hasSymbolBuckets&&!w.holdingForFade()?w.setHoldDuration(this.map._fadeDuration):w.hasSymbolBuckets&&!w.symbolFadeFinished()||this._removeTile(x)}this._updateLoadedParentTileCache()}},n.prototype.releaseSymbolFadeTiles=function(){for(var t in this._tiles)this._tiles[t].holdingForFade()&&this._removeTile(t)},n.prototype._updateRetainedTiles=function(t,e){for(var r={},i={},a=Math.max(e-n.maxOverzooming,this._source.minzoom),o=Math.max(e+n.maxUnderzooming,this._source.minzoom),s={},l=0,c=t;l<c.length;l+=1){var u=c[l],h=this._addTile(u);r[u.key]=u,h.hasData()||e<this._source.maxzoom&&(s[u.key]=u)}this._retainLoadedChildren(s,e,o,r);for(var d=0,f=t;d<f.length;d+=1){var p=f[d],m=this._tiles[p.key];if(!m.hasData()){if(e+1>this._source.maxzoom){var g=p.children(this._source.maxzoom)[0],y=this.getTile(g);if(y&&y.hasData()){r[g.key]=g;continue}}else{var v=p.children(this._source.maxzoom);if(r[v[0].key]&&r[v[1].key]&&r[v[2].key]&&r[v[3].key])continue}for(var _=m.wasRequested(),b=p.overscaledZ-1;b>=a;--b){var x=p.scaledTo(b);if(i[x.key])break;if(i[x.key]=!0,!(m=this.getTile(x))&&_&&(m=this._addTile(x)),m&&(r[x.key]=x,_=m.wasRequested(),m.hasData()))break}}}return r},n.prototype._updateLoadedParentTileCache=function(){for(var t in this._loadedParentTiles={},this._tiles){for(var e=[],n=void 0,r=this._tiles[t].tileID;r.overscaledZ>0;){if(r.key in this._loadedParentTiles){n=this._loadedParentTiles[r.key];break}e.push(r.key);var i=r.scaledTo(r.overscaledZ-1);if(n=this._getLoadedTile(i))break;r=i}for(var a=0,o=e;a<o.length;a+=1)this._loadedParentTiles[o[a]]=n}},n.prototype._addTile=function(e){var n=this._tiles[e.key];if(n)return n;(n=this._cache.getAndRemove(e))&&(this._setTileReloadTimer(e.key,n),n.tileID=e,this._state.initializeTileState(n,this.map?this.map.painter:null),this._cacheTimers[e.key]&&(clearTimeout(this._cacheTimers[e.key]),delete this._cacheTimers[e.key],this._setTileReloadTimer(e.key,n)));var r=Boolean(n);return r||(n=new t.Tile(e,this._source.tileSize*e.overscaleFactor()),this._loadTile(n,this._tileLoaded.bind(this,n,e.key,n.state))),n?(n.uses++,this._tiles[e.key]=n,r||this._source.fire(new t.Event(\"dataloading\",{tile:n,coord:n.tileID,dataType:\"source\"})),n):null},n.prototype._setTileReloadTimer=function(t,e){var n=this;t in this._timers&&(clearTimeout(this._timers[t]),delete this._timers[t]);var r=e.getExpiryTimeout();r&&(this._timers[t]=setTimeout((function(){n._reloadTile(t,\"expired\"),delete n._timers[t]}),r))},n.prototype._removeTile=function(t){var e=this._tiles[t];e&&(e.uses--,delete this._tiles[t],this._timers[t]&&(clearTimeout(this._timers[t]),delete this._timers[t]),e.uses>0||(e.hasData()&&\"reloading\"!==e.state?this._cache.add(e.tileID,e,e.getExpiryTimeout()):(e.aborted=!0,this._abortTile(e),this._unloadTile(e))))},n.prototype.clearTiles=function(){for(var t in this._shouldReloadOnResume=!1,this._paused=!1,this._tiles)this._removeTile(t);this._cache.reset()},n.prototype.tilesIn=function(e,n,r){var i=this,a=[],o=this.transform;if(!o)return a;for(var s=r?o.getCameraQueryGeometry(e):e,l=e.map((function(t){return o.pointCoordinate(t)})),c=s.map((function(t){return o.pointCoordinate(t)})),u=this.getIds(),h=1/0,d=1/0,f=-1/0,p=-1/0,m=0,g=c;m<g.length;m+=1){var y=g[m];h=Math.min(h,y.x),d=Math.min(d,y.y),f=Math.max(f,y.x),p=Math.max(p,y.y)}for(var v=function(e){var r=i._tiles[u[e]];if(!r.holdingForFade()){var s=r.tileID,m=Math.pow(2,o.zoom-r.tileID.overscaledZ),g=n*r.queryPadding*t.EXTENT/r.tileSize/m,y=[s.getTilePoint(new t.MercatorCoordinate(h,d)),s.getTilePoint(new t.MercatorCoordinate(f,p))];if(y[0].x-g<t.EXTENT&&y[0].y-g<t.EXTENT&&y[1].x+g>=0&&y[1].y+g>=0){var v=l.map((function(t){return s.getTilePoint(t)})),_=c.map((function(t){return s.getTilePoint(t)}));a.push({tile:r,tileID:s,queryGeometry:v,cameraQueryGeometry:_,scale:m})}}},_=0;_<u.length;_++)v(_);return a},n.prototype.getVisibleCoordinates=function(t){for(var e=this,n=this.getRenderableIds(t).map((function(t){return e._tiles[t].tileID})),r=0,i=n;r<i.length;r+=1){var a=i[r];a.posMatrix=this.transform.calculatePosMatrix(a.toUnwrapped())}return n},n.prototype.hasTransition=function(){if(this._source.hasTransition())return!0;if(Dt(this._source.type))for(var e in this._tiles){var n=this._tiles[e];if(void 0!==n.fadeEndTime&&n.fadeEndTime>=t.browser.now())return!0}return!1},n.prototype.setFeatureState=function(t,e,n){this._state.updateState(t=t||\"_geojsonTileLayer\",e,n)},n.prototype.removeFeatureState=function(t,e,n){this._state.removeFeatureState(t=t||\"_geojsonTileLayer\",e,n)},n.prototype.getFeatureState=function(t,e){return this._state.getState(t=t||\"_geojsonTileLayer\",e)},n.prototype.setDependencies=function(t,e,n){var r=this._tiles[t];r&&r.setDependencies(e,n)},n.prototype.reloadTilesForDependencies=function(t,e){for(var n in this._tiles)this._tiles[n].hasDependency(t,e)&&this._reloadTile(n,\"reloading\");this._cache.filter((function(n){return!n.hasDependency(t,e)}))},n}(t.Evented);function Ot(t,e){var n=Math.abs(2*t.wrap)-+(t.wrap<0),r=Math.abs(2*e.wrap)-+(e.wrap<0);return t.overscaledZ-e.overscaledZ||r-n||e.canonical.y-t.canonical.y||e.canonical.x-t.canonical.x}function Dt(t){return\"raster\"===t||\"image\"===t||\"video\"===t}function It(){return new t.window.Worker(qi.workerUrl)}Et.maxOverzooming=10,Et.maxUnderzooming=3;var Pt=\"mapboxgl_preloaded_worker_pool\",Rt=function(){this.active={}};Rt.prototype.acquire=function(t){if(!this.workers)for(this.workers=[];this.workers.length<Rt.workerCount;)this.workers.push(new It);return this.active[t]=!0,this.workers.slice()},Rt.prototype.release=function(t){delete this.active[t],0===this.numActive()&&(this.workers.forEach((function(t){t.terminate()})),this.workers=null)},Rt.prototype.isPreloaded=function(){return!!this.active[Pt]},Rt.prototype.numActive=function(){return Object.keys(this.active).length};var zt,jt=Math.floor(t.browser.hardwareConcurrency/2);function Ft(){return zt||(zt=new Rt),zt}function Nt(e,n){var r={};for(var i in e)\"ref\"!==i&&(r[i]=e[i]);return t.refProperties.forEach((function(t){t in n&&(r[t]=n[t])})),r}function Bt(t){t=t.slice();for(var e=Object.create(null),n=0;n<t.length;n++)e[t[n].id]=t[n];for(var r=0;r<t.length;r++)\"ref\"in t[r]&&(t[r]=Nt(t[r],e[t[r].ref]));return t}Rt.workerCount=Math.max(Math.min(jt,6),1);var Yt={setStyle:\"setStyle\",addLayer:\"addLayer\",removeLayer:\"removeLayer\",setPaintProperty:\"setPaintProperty\",setLayoutProperty:\"setLayoutProperty\",setFilter:\"setFilter\",addSource:\"addSource\",removeSource:\"removeSource\",setGeoJSONSourceData:\"setGeoJSONSourceData\",setLayerZoomRange:\"setLayerZoomRange\",setLayerProperty:\"setLayerProperty\",setCenter:\"setCenter\",setZoom:\"setZoom\",setBearing:\"setBearing\",setPitch:\"setPitch\",setSprite:\"setSprite\",setGlyphs:\"setGlyphs\",setTransition:\"setTransition\",setLight:\"setLight\"};function Ht(t,e,n){n.push({command:Yt.addSource,args:[t,e[t]]})}function Vt(t,e,n){e.push({command:Yt.removeSource,args:[t]}),n[t]=!0}function Ut(t,e,n,r){Vt(t,n,r),Ht(t,e,n)}function Wt(e,n,r){var i;for(i in e[r])if(e[r].hasOwnProperty(i)&&\"data\"!==i&&!t.deepEqual(e[r][i],n[r][i]))return!1;for(i in n[r])if(n[r].hasOwnProperty(i)&&\"data\"!==i&&!t.deepEqual(e[r][i],n[r][i]))return!1;return!0}function qt(e,n,r,i,a,o){var s;for(s in n=n||{},e=e||{})e.hasOwnProperty(s)&&(t.deepEqual(e[s],n[s])||r.push({command:o,args:[i,s,n[s],a]}));for(s in n)n.hasOwnProperty(s)&&!e.hasOwnProperty(s)&&(t.deepEqual(e[s],n[s])||r.push({command:o,args:[i,s,n[s],a]}))}function Gt(t){return t.id}function Xt(t,e){return t[e.id]=e,t}var Zt=function(t,e){this.reset(t,e)};Zt.prototype.reset=function(t,e){this.points=t||[],this._distances=[0];for(var n=1;n<this.points.length;n++)this._distances[n]=this._distances[n-1]+this.points[n].dist(this.points[n-1]);this.length=this._distances[this._distances.length-1],this.padding=Math.min(e||0,.5*this.length),this.paddedLength=this.length-2*this.padding},Zt.prototype.lerp=function(e){if(1===this.points.length)return this.points[0];e=t.clamp(e,0,1);for(var n=1,r=this._distances[n],i=e*this.paddedLength+this.padding;r<i&&n<this._distances.length;)r=this._distances[++n];var a=n-1,o=this._distances[a],s=r-o,l=s>0?(i-o)/s:0;return this.points[a].mult(1-l).add(this.points[n].mult(l))};var Jt=function(t,e,n){var r=this.boxCells=[],i=this.circleCells=[];this.xCellCount=Math.ceil(t/n),this.yCellCount=Math.ceil(e/n);for(var a=0;a<this.xCellCount*this.yCellCount;a++)r.push([]),i.push([]);this.circleKeys=[],this.boxKeys=[],this.bboxes=[],this.circles=[],this.width=t,this.height=e,this.xScale=this.xCellCount/t,this.yScale=this.yCellCount/e,this.boxUid=0,this.circleUid=0};function Kt(e,n,r,i,a){var o=t.create();return n?(t.scale(o,o,[1/a,1/a,1]),r||t.rotateZ(o,o,i.angle)):t.multiply(o,i.labelPlaneMatrix,e),o}function $t(e,n,r,i,a){if(n){var o=t.clone(e);return t.scale(o,o,[a,a,1]),r||t.rotateZ(o,o,-i.angle),o}return i.glCoordMatrix}function Qt(e,n){var r=[e.x,e.y,0,1];ue(r,r,n);var i=r[3];return{point:new t.Point(r[0]/i,r[1]/i),signedDistanceFromCamera:i}}function te(t,e){return.5+t/e*.5}function ee(t,e){var n=t[0]/t[3],r=t[1]/t[3];return n>=-e[0]&&n<=e[0]&&r>=-e[1]&&r<=e[1]}function ne(e,n,r,i,a,o,s,l){var c=i?e.textSizeData:e.iconSizeData,u=t.evaluateSizeForZoom(c,r.transform.zoom),h=[256/r.width*2+1,256/r.height*2+1],d=i?e.text.dynamicLayoutVertexArray:e.icon.dynamicLayoutVertexArray;d.clear();for(var f=e.lineVertexArray,p=i?e.text.placedSymbolArray:e.icon.placedSymbolArray,m=r.transform.width/r.transform.height,g=!1,y=0;y<p.length;y++){var v=p.get(y);if(v.hidden||v.writingMode===t.WritingMode.vertical&&!g)ce(v.numGlyphs,d);else{g=!1;var _=[v.anchorX,v.anchorY,0,1];if(t.transformMat4(_,_,n),ee(_,h)){var b=te(r.transform.cameraToCenterDistance,_[3]),x=t.evaluateSizeForFeature(c,u,v),w=s?x/b:x*b,k=new t.Point(v.anchorX,v.anchorY),M=Qt(k,a).point,T={},S=ae(v,w,!1,l,n,a,o,e.glyphOffsetArray,f,d,M,k,T,m);g=S.useVertical,(S.notEnoughRoom||g||S.needsFlipping&&ae(v,w,!0,l,n,a,o,e.glyphOffsetArray,f,d,M,k,T,m).notEnoughRoom)&&ce(v.numGlyphs,d)}else ce(v.numGlyphs,d)}}i?e.text.dynamicLayoutVertexBuffer.updateData(d):e.icon.dynamicLayoutVertexBuffer.updateData(d)}function re(t,e,n,r,i,a,o,s,l,c,u){var h=s.glyphStartIndex+s.numGlyphs,d=s.lineStartIndex,f=s.lineStartIndex+s.lineLength,p=e.getoffsetX(s.glyphStartIndex),m=e.getoffsetX(h-1),g=se(t*p,n,r,i,a,o,s.segment,d,f,l,c,u);if(!g)return null;var y=se(t*m,n,r,i,a,o,s.segment,d,f,l,c,u);return y?{first:g,last:y}:null}function ie(e,n,r,i){return e===t.WritingMode.horizontal&&Math.abs(r.y-n.y)>Math.abs(r.x-n.x)*i?{useVertical:!0}:(e===t.WritingMode.vertical?n.y<r.y:n.x>r.x)?{needsFlipping:!0}:null}function ae(e,n,r,i,a,o,s,l,c,u,h,d,f,p){var m,g=n/24,y=e.lineOffsetX*g,v=e.lineOffsetY*g;if(e.numGlyphs>1){var _=e.glyphStartIndex+e.numGlyphs,b=e.lineStartIndex,x=e.lineStartIndex+e.lineLength,w=re(g,l,y,v,r,h,d,e,c,o,f);if(!w)return{notEnoughRoom:!0};var k=Qt(w.first.point,s).point,M=Qt(w.last.point,s).point;if(i&&!r){var T=ie(e.writingMode,k,M,p);if(T)return T}m=[w.first];for(var S=e.glyphStartIndex+1;S<_-1;S++)m.push(se(g*l.getoffsetX(S),y,v,r,h,d,e.segment,b,x,c,o,f));m.push(w.last)}else{if(i&&!r){var A=Qt(d,a).point,L=e.lineStartIndex+e.segment+1,C=new t.Point(c.getx(L),c.gety(L)),E=Qt(C,a),O=E.signedDistanceFromCamera>0?E.point:oe(d,C,A,1,a),D=ie(e.writingMode,A,O,p);if(D)return D}var I=se(g*l.getoffsetX(e.glyphStartIndex),y,v,r,h,d,e.segment,e.lineStartIndex,e.lineStartIndex+e.lineLength,c,o,f);if(!I)return{notEnoughRoom:!0};m=[I]}for(var P=0,R=m;P<R.length;P+=1){var z=R[P];t.addDynamicAttributes(u,z.point,z.angle)}return{}}function oe(t,e,n,r,i){var a=Qt(t.add(t.sub(e)._unit()),i).point,o=n.sub(a);return n.add(o._mult(r/o.mag()))}function se(e,n,r,i,a,o,s,l,c,u,h,d){var f=i?e-n:e+n,p=f>0?1:-1,m=0;i&&(p*=-1,m=Math.PI),p<0&&(m+=Math.PI);for(var g=p>0?l+s:l+s+1,y=a,v=a,_=0,b=0,x=Math.abs(f),w=[];_+b<=x;){if((g+=p)<l||g>=c)return null;if(v=y,w.push(y),void 0===(y=d[g])){var k=new t.Point(u.getx(g),u.gety(g)),M=Qt(k,h);if(M.signedDistanceFromCamera>0)y=d[g]=M.point;else{var T=g-p;y=oe(0===_?o:new t.Point(u.getx(T),u.gety(T)),k,v,x-_+1,h)}}_+=b,b=v.dist(y)}var S=(x-_)/b,A=y.sub(v),L=A.mult(S)._add(v);L._add(A._unit()._perp()._mult(r*p));var C=m+Math.atan2(y.y-v.y,y.x-v.x);return w.push(L),{point:L,angle:C,path:w}}Jt.prototype.keysLength=function(){return this.boxKeys.length+this.circleKeys.length},Jt.prototype.insert=function(t,e,n,r,i){this._forEachCell(e,n,r,i,this._insertBoxCell,this.boxUid++),this.boxKeys.push(t),this.bboxes.push(e),this.bboxes.push(n),this.bboxes.push(r),this.bboxes.push(i)},Jt.prototype.insertCircle=function(t,e,n,r){this._forEachCell(e-r,n-r,e+r,n+r,this._insertCircleCell,this.circleUid++),this.circleKeys.push(t),this.circles.push(e),this.circles.push(n),this.circles.push(r)},Jt.prototype._insertBoxCell=function(t,e,n,r,i,a){this.boxCells[i].push(a)},Jt.prototype._insertCircleCell=function(t,e,n,r,i,a){this.circleCells[i].push(a)},Jt.prototype._query=function(t,e,n,r,i,a){if(n<0||t>this.width||r<0||e>this.height)return!i&&[];var o=[];if(t<=0&&e<=0&&this.width<=n&&this.height<=r){if(i)return!0;for(var s=0;s<this.boxKeys.length;s++)o.push({key:this.boxKeys[s],x1:this.bboxes[4*s],y1:this.bboxes[4*s+1],x2:this.bboxes[4*s+2],y2:this.bboxes[4*s+3]});for(var l=0;l<this.circleKeys.length;l++){var c=this.circles[3*l],u=this.circles[3*l+1],h=this.circles[3*l+2];o.push({key:this.circleKeys[l],x1:c-h,y1:u-h,x2:c+h,y2:u+h})}return a?o.filter(a):o}return this._forEachCell(t,e,n,r,this._queryCell,o,{hitTest:i,seenUids:{box:{},circle:{}}},a),i?o.length>0:o},Jt.prototype._queryCircle=function(t,e,n,r,i){var a=t-n,o=t+n,s=e-n,l=e+n;if(o<0||a>this.width||l<0||s>this.height)return!r&&[];var c=[];return this._forEachCell(a,s,o,l,this._queryCellCircle,c,{hitTest:r,circle:{x:t,y:e,radius:n},seenUids:{box:{},circle:{}}},i),r?c.length>0:c},Jt.prototype.query=function(t,e,n,r,i){return this._query(t,e,n,r,!1,i)},Jt.prototype.hitTest=function(t,e,n,r,i){return this._query(t,e,n,r,!0,i)},Jt.prototype.hitTestCircle=function(t,e,n,r){return this._queryCircle(t,e,n,!0,r)},Jt.prototype._queryCell=function(t,e,n,r,i,a,o,s){var l=o.seenUids,c=this.boxCells[i];if(null!==c)for(var u=this.bboxes,h=0,d=c;h<d.length;h+=1){var f=d[h];if(!l.box[f]){l.box[f]=!0;var p=4*f;if(t<=u[p+2]&&e<=u[p+3]&&n>=u[p+0]&&r>=u[p+1]&&(!s||s(this.boxKeys[f]))){if(o.hitTest)return a.push(!0),!0;a.push({key:this.boxKeys[f],x1:u[p],y1:u[p+1],x2:u[p+2],y2:u[p+3]})}}}var m=this.circleCells[i];if(null!==m)for(var g=this.circles,y=0,v=m;y<v.length;y+=1){var _=v[y];if(!l.circle[_]){l.circle[_]=!0;var b=3*_;if(this._circleAndRectCollide(g[b],g[b+1],g[b+2],t,e,n,r)&&(!s||s(this.circleKeys[_]))){if(o.hitTest)return a.push(!0),!0;var x=g[b],w=g[b+1],k=g[b+2];a.push({key:this.circleKeys[_],x1:x-k,y1:w-k,x2:x+k,y2:w+k})}}}},Jt.prototype._queryCellCircle=function(t,e,n,r,i,a,o,s){var l=o.circle,c=o.seenUids,u=this.boxCells[i];if(null!==u)for(var h=this.bboxes,d=0,f=u;d<f.length;d+=1){var p=f[d];if(!c.box[p]){c.box[p]=!0;var m=4*p;if(this._circleAndRectCollide(l.x,l.y,l.radius,h[m+0],h[m+1],h[m+2],h[m+3])&&(!s||s(this.boxKeys[p])))return a.push(!0),!0}}var g=this.circleCells[i];if(null!==g)for(var y=this.circles,v=0,_=g;v<_.length;v+=1){var b=_[v];if(!c.circle[b]){c.circle[b]=!0;var x=3*b;if(this._circlesCollide(y[x],y[x+1],y[x+2],l.x,l.y,l.radius)&&(!s||s(this.circleKeys[b])))return a.push(!0),!0}}},Jt.prototype._forEachCell=function(t,e,n,r,i,a,o,s){for(var l=this._convertToXCellCoord(t),c=this._convertToYCellCoord(e),u=this._convertToXCellCoord(n),h=this._convertToYCellCoord(r),d=l;d<=u;d++)for(var f=c;f<=h;f++)if(i.call(this,t,e,n,r,this.xCellCount*f+d,a,o,s))return},Jt.prototype._convertToXCellCoord=function(t){return Math.max(0,Math.min(this.xCellCount-1,Math.floor(t*this.xScale)))},Jt.prototype._convertToYCellCoord=function(t){return Math.max(0,Math.min(this.yCellCount-1,Math.floor(t*this.yScale)))},Jt.prototype._circlesCollide=function(t,e,n,r,i,a){var o=r-t,s=i-e,l=n+a;return l*l>o*o+s*s},Jt.prototype._circleAndRectCollide=function(t,e,n,r,i,a,o){var s=(a-r)/2,l=Math.abs(t-(r+s));if(l>s+n)return!1;var c=(o-i)/2,u=Math.abs(e-(i+c));if(u>c+n)return!1;if(l<=s||u<=c)return!0;var h=l-s,d=u-c;return h*h+d*d<=n*n};var le=new Float32Array([-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0]);function ce(t,e){for(var n=0;n<t;n++){var r=e.length;e.resize(r+4),e.float32.set(le,3*r)}}function ue(t,e,n){var r=e[0],i=e[1];return t[0]=n[0]*r+n[4]*i+n[12],t[1]=n[1]*r+n[5]*i+n[13],t[3]=n[3]*r+n[7]*i+n[15],t}var he=function(t,e,n){void 0===e&&(e=new Jt(t.width+200,t.height+200,25)),void 0===n&&(n=new Jt(t.width+200,t.height+200,25)),this.transform=t,this.grid=e,this.ignoredGrid=n,this.pitchfactor=Math.cos(t._pitch)*t.cameraToCenterDistance,this.screenRightBoundary=t.width+100,this.screenBottomBoundary=t.height+100,this.gridRightBoundary=t.width+200,this.gridBottomBoundary=t.height+200};function de(e,n,r){return n*(t.EXTENT/(e.tileSize*Math.pow(2,r-e.tileID.overscaledZ)))}he.prototype.placeCollisionBox=function(t,e,n,r,i){var a=this.projectAndGetPerspectiveRatio(r,t.anchorPointX,t.anchorPointY),o=n*a.perspectiveRatio,s=t.x1*o+a.point.x,l=t.y1*o+a.point.y,c=t.x2*o+a.point.x,u=t.y2*o+a.point.y;return!this.isInsideGrid(s,l,c,u)||!e&&this.grid.hitTest(s,l,c,u,i)?{box:[],offscreen:!1}:{box:[s,l,c,u],offscreen:this.isOffscreen(s,l,c,u)}},he.prototype.placeCollisionCircles=function(e,n,r,i,a,o,s,l,c,u,h,d,f){var p=[],m=new t.Point(n.anchorX,n.anchorY),g=Qt(m,o),y=te(this.transform.cameraToCenterDistance,g.signedDistanceFromCamera),v=(u?a/y:a*y)/t.ONE_EM,_=Qt(m,s).point,b=re(v,i,n.lineOffsetX*v,n.lineOffsetY*v,!1,_,m,n,r,s,{}),x=!1,w=!1,k=!0;if(b){for(var M=.5*d*y+f,T=new t.Point(-100,-100),S=new t.Point(this.screenRightBoundary,this.screenBottomBoundary),A=new Zt,L=b.first,C=b.last,E=[],O=L.path.length-1;O>=1;O--)E.push(L.path[O]);for(var D=1;D<C.path.length;D++)E.push(C.path[D]);var I=2.5*M;if(l){var P=E.map((function(t){return Qt(t,l)}));E=P.some((function(t){return t.signedDistanceFromCamera<=0}))?[]:P.map((function(t){return t.point}))}var R=[];if(E.length>0){for(var z=E[0].clone(),j=E[0].clone(),F=1;F<E.length;F++)z.x=Math.min(z.x,E[F].x),z.y=Math.min(z.y,E[F].y),j.x=Math.max(j.x,E[F].x),j.y=Math.max(j.y,E[F].y);R=z.x>=T.x&&j.x<=S.x&&z.y>=T.y&&j.y<=S.y?[E]:j.x<T.x||z.x>S.x||j.y<T.y||z.y>S.y?[]:t.clipLine([E],T.x,T.y,S.x,S.y)}for(var N=0,B=R;N<B.length;N+=1){var Y;A.reset(B[N],.25*M),Y=A.length<=.5*M?1:Math.ceil(A.paddedLength/I)+1;for(var H=0;H<Y;H++){var V=H/Math.max(Y-1,1),U=A.lerp(V),W=U.x+100,q=U.y+100;p.push(W,q,M,0);var G=W-M,X=q-M,Z=W+M,J=q+M;if(k=k&&this.isOffscreen(G,X,Z,J),w=w||this.isInsideGrid(G,X,Z,J),!e&&this.grid.hitTestCircle(W,q,M,h)&&(x=!0,!c))return{circles:[],offscreen:!1,collisionDetected:x}}}}return{circles:!c&&x||!w?[]:p,offscreen:k,collisionDetected:x}},he.prototype.queryRenderedSymbols=function(e){if(0===e.length||0===this.grid.keysLength()&&0===this.ignoredGrid.keysLength())return{};for(var n=[],r=1/0,i=1/0,a=-1/0,o=-1/0,s=0,l=e;s<l.length;s+=1){var c=l[s],u=new t.Point(c.x+100,c.y+100);r=Math.min(r,u.x),i=Math.min(i,u.y),a=Math.max(a,u.x),o=Math.max(o,u.y),n.push(u)}for(var h={},d={},f=0,p=this.grid.query(r,i,a,o).concat(this.ignoredGrid.query(r,i,a,o));f<p.length;f+=1){var m=p[f],g=m.key;if(void 0===h[g.bucketInstanceId]&&(h[g.bucketInstanceId]={}),!h[g.bucketInstanceId][g.featureIndex]){var y=[new t.Point(m.x1,m.y1),new t.Point(m.x2,m.y1),new t.Point(m.x2,m.y2),new t.Point(m.x1,m.y2)];t.polygonIntersectsPolygon(n,y)&&(h[g.bucketInstanceId][g.featureIndex]=!0,void 0===d[g.bucketInstanceId]&&(d[g.bucketInstanceId]=[]),d[g.bucketInstanceId].push(g.featureIndex))}}return d},he.prototype.insertCollisionBox=function(t,e,n,r,i){(e?this.ignoredGrid:this.grid).insert({bucketInstanceId:n,featureIndex:r,collisionGroupID:i},t[0],t[1],t[2],t[3])},he.prototype.insertCollisionCircles=function(t,e,n,r,i){for(var a=e?this.ignoredGrid:this.grid,o={bucketInstanceId:n,featureIndex:r,collisionGroupID:i},s=0;s<t.length;s+=4)a.insertCircle(o,t[s],t[s+1],t[s+2])},he.prototype.projectAndGetPerspectiveRatio=function(e,n,r){var i=[n,r,0,1];return ue(i,i,e),{point:new t.Point((i[0]/i[3]+1)/2*this.transform.width+100,(-i[1]/i[3]+1)/2*this.transform.height+100),perspectiveRatio:.5+this.transform.cameraToCenterDistance/i[3]*.5}},he.prototype.isOffscreen=function(t,e,n,r){return n<100||t>=this.screenRightBoundary||r<100||e>this.screenBottomBoundary},he.prototype.isInsideGrid=function(t,e,n,r){return n>=0&&t<this.gridRightBoundary&&r>=0&&e<this.gridBottomBoundary},he.prototype.getViewportMatrix=function(){var e=t.identity([]);return t.translate(e,e,[-100,-100,0]),e};var fe=function(t,e,n,r){this.opacity=t?Math.max(0,Math.min(1,t.opacity+(t.placed?e:-e))):r&&n?1:0,this.placed=n};fe.prototype.isHidden=function(){return 0===this.opacity&&!this.placed};var pe=function(t,e,n,r,i){this.text=new fe(t?t.text:null,e,n,i),this.icon=new fe(t?t.icon:null,e,r,i)};pe.prototype.isHidden=function(){return this.text.isHidden()&&this.icon.isHidden()};var me=function(t,e,n){this.text=t,this.icon=e,this.skipFade=n},ge=function(){this.invProjMatrix=t.create(),this.viewportMatrix=t.create(),this.circles=[]},ye=function(t,e,n,r,i){this.bucketInstanceId=t,this.featureIndex=e,this.sourceLayerIndex=n,this.bucketIndex=r,this.tileID=i},ve=function(t){this.crossSourceCollisions=t,this.maxGroupID=0,this.collisionGroups={}};function _e(e,n,r,i,a){var o=t.getAnchorAlignment(e),s=-(o.horizontalAlign-.5)*n,l=-(o.verticalAlign-.5)*r,c=t.evaluateVariableOffset(e,i);return new t.Point(s+c[0]*a,l+c[1]*a)}function be(e,n,r,i,a,o){var s=e.x1,l=e.x2,c=e.y1,u=e.y2,h=e.anchorPointX,d=e.anchorPointY,f=new t.Point(n,r);return i&&f._rotate(a?o:-o),{x1:s+f.x,y1:c+f.y,x2:l+f.x,y2:u+f.y,anchorPointX:h,anchorPointY:d}}ve.prototype.get=function(t){if(this.crossSourceCollisions)return{ID:0,predicate:null};if(!this.collisionGroups[t]){var e=++this.maxGroupID;this.collisionGroups[t]={ID:e,predicate:function(t){return t.collisionGroupID===e}}}return this.collisionGroups[t]};var xe=function(t,e,n,r){this.transform=t.clone(),this.collisionIndex=new he(this.transform),this.placements={},this.opacities={},this.variableOffsets={},this.stale=!1,this.commitTime=0,this.fadeDuration=e,this.retainedQueryData={},this.collisionGroups=new ve(n),this.collisionCircleArrays={},this.prevPlacement=r,r&&(r.prevPlacement=void 0),this.placedOrientations={}};function we(t,e,n,r,i){t.emplaceBack(e?1:0,n?1:0,r||0,i||0),t.emplaceBack(e?1:0,n?1:0,r||0,i||0),t.emplaceBack(e?1:0,n?1:0,r||0,i||0),t.emplaceBack(e?1:0,n?1:0,r||0,i||0)}xe.prototype.getBucketParts=function(e,n,r,i){var a=r.getBucket(n),o=r.latestFeatureIndex;if(a&&o&&n.id===a.layerIds[0]){var s=r.collisionBoxArray,l=a.layers[0].layout,c=Math.pow(2,this.transform.zoom-r.tileID.overscaledZ),u=r.tileSize/t.EXTENT,h=this.transform.calculatePosMatrix(r.tileID.toUnwrapped()),d=\"map\"===l.get(\"text-pitch-alignment\"),f=\"map\"===l.get(\"text-rotation-alignment\"),p=de(r,1,this.transform.zoom),m=Kt(h,d,f,this.transform,p),g=null;if(d){var y=$t(h,d,f,this.transform,p);g=t.multiply([],this.transform.labelPlaneMatrix,y)}this.retainedQueryData[a.bucketInstanceId]=new ye(a.bucketInstanceId,o,a.sourceLayerIndex,a.index,r.tileID);var v={bucket:a,layout:l,posMatrix:h,textLabelPlaneMatrix:m,labelToScreenMatrix:g,scale:c,textPixelRatio:u,holdingForFade:r.holdingForFade(),collisionBoxArray:s,partiallyEvaluatedTextSize:t.evaluateSizeForZoom(a.textSizeData,this.transform.zoom),collisionGroup:this.collisionGroups.get(a.sourceID)};if(i)for(var _=0,b=a.sortKeyRanges;_<b.length;_+=1){var x=b[_];e.push({sortKey:x.sortKey,symbolInstanceStart:x.symbolInstanceStart,symbolInstanceEnd:x.symbolInstanceEnd,parameters:v})}else e.push({symbolInstanceStart:0,symbolInstanceEnd:a.symbolInstances.length,parameters:v})}},xe.prototype.attemptAnchorPlacement=function(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p){var m,g=[h.textOffset0,h.textOffset1],y=_e(t,n,r,g,i),v=this.collisionIndex.placeCollisionBox(be(e,y.x,y.y,a,o,this.transform.angle),u,s,l,c.predicate);if(!p||0!==this.collisionIndex.placeCollisionBox(be(p,y.x,y.y,a,o,this.transform.angle),u,s,l,c.predicate).box.length)return v.box.length>0?(this.prevPlacement&&this.prevPlacement.variableOffsets[h.crossTileID]&&this.prevPlacement.placements[h.crossTileID]&&this.prevPlacement.placements[h.crossTileID].text&&(m=this.prevPlacement.variableOffsets[h.crossTileID].anchor),this.variableOffsets[h.crossTileID]={textOffset:g,width:n,height:r,anchor:t,textBoxScale:i,prevAnchor:m},this.markUsedJustification(d,t,h,f),d.allowVerticalPlacement&&(this.markUsedOrientation(d,f,h),this.placedOrientations[h.crossTileID]=f),{shift:y,placedGlyphBoxes:v}):void 0},xe.prototype.placeLayerBucketPart=function(e,n,r){var i=this,a=e.parameters,o=a.bucket,s=a.layout,l=a.posMatrix,c=a.textLabelPlaneMatrix,u=a.labelToScreenMatrix,h=a.textPixelRatio,d=a.holdingForFade,f=a.collisionBoxArray,p=a.partiallyEvaluatedTextSize,m=a.collisionGroup,g=s.get(\"text-optional\"),y=s.get(\"icon-optional\"),v=s.get(\"text-allow-overlap\"),_=s.get(\"icon-allow-overlap\"),b=\"map\"===s.get(\"text-rotation-alignment\"),x=\"map\"===s.get(\"text-pitch-alignment\"),w=\"none\"!==s.get(\"icon-text-fit\"),k=\"viewport-y\"===s.get(\"symbol-z-order\"),M=v&&(_||!o.hasIconData()||y),T=_&&(v||!o.hasTextData()||g);!o.collisionArrays&&f&&o.deserializeCollisionBoxes(f);var S=function(e,a){if(!n[e.crossTileID])if(d)i.placements[e.crossTileID]=new me(!1,!1,!1);else{var f,k=!1,S=!1,A=!0,L=null,C={box:null,offscreen:null},E={box:null,offscreen:null},O=null,D=null,I=0,P=0,R=0;a.textFeatureIndex?I=a.textFeatureIndex:e.useRuntimeCollisionCircles&&(I=e.featureIndex),a.verticalTextFeatureIndex&&(P=a.verticalTextFeatureIndex);var z=a.textBox;if(z){var j=function(n){var r=t.WritingMode.horizontal;if(o.allowVerticalPlacement&&!n&&i.prevPlacement){var a=i.prevPlacement.placedOrientations[e.crossTileID];a&&(i.placedOrientations[e.crossTileID]=a,i.markUsedOrientation(o,r=a,e))}return r},F=function(n,r){if(o.allowVerticalPlacement&&e.numVerticalGlyphVertices>0&&a.verticalTextBox)for(var i=0,s=o.writingModes;i<s.length&&(s[i]===t.WritingMode.vertical?(C=r(),E=C):C=n(),!(C&&C.box&&C.box.length));i+=1);else C=n()};if(s.get(\"text-variable-anchor\")){var N=s.get(\"text-variable-anchor\");if(i.prevPlacement&&i.prevPlacement.variableOffsets[e.crossTileID]){var B=i.prevPlacement.variableOffsets[e.crossTileID];N.indexOf(B.anchor)>0&&(N=N.filter((function(t){return t!==B.anchor}))).unshift(B.anchor)}var Y=function(t,n,r){for(var a=t.x2-t.x1,s=t.y2-t.y1,c=e.textBoxScale,u=w&&!_?n:null,d={box:[],offscreen:!1},f=v?2*N.length:N.length,p=0;p<f;++p){var g=i.attemptAnchorPlacement(N[p%N.length],t,a,s,c,b,x,h,l,m,p>=N.length,e,o,r,u);if(g&&(d=g.placedGlyphBoxes)&&d.box&&d.box.length){k=!0,L=g.shift;break}}return d};F((function(){return Y(z,a.iconBox,t.WritingMode.horizontal)}),(function(){var n=a.verticalTextBox;return o.allowVerticalPlacement&&!(C&&C.box&&C.box.length)&&e.numVerticalGlyphVertices>0&&n?Y(n,a.verticalIconBox,t.WritingMode.vertical):{box:null,offscreen:null}})),C&&(k=C.box,A=C.offscreen);var H=j(C&&C.box);if(!k&&i.prevPlacement){var V=i.prevPlacement.variableOffsets[e.crossTileID];V&&(i.variableOffsets[e.crossTileID]=V,i.markUsedJustification(o,V.anchor,e,H))}}else{var U=function(t,n){var r=i.collisionIndex.placeCollisionBox(t,v,h,l,m.predicate);return r&&r.box&&r.box.length&&(i.markUsedOrientation(o,n,e),i.placedOrientations[e.crossTileID]=n),r};F((function(){return U(z,t.WritingMode.horizontal)}),(function(){var n=a.verticalTextBox;return o.allowVerticalPlacement&&e.numVerticalGlyphVertices>0&&n?U(n,t.WritingMode.vertical):{box:null,offscreen:null}})),j(C&&C.box&&C.box.length)}}if(k=(f=C)&&f.box&&f.box.length>0,A=f&&f.offscreen,e.useRuntimeCollisionCircles){var W=o.text.placedSymbolArray.get(e.centerJustifiedTextSymbolIndex),q=t.evaluateSizeForFeature(o.textSizeData,p,W),G=s.get(\"text-padding\");O=i.collisionIndex.placeCollisionCircles(v,W,o.lineVertexArray,o.glyphOffsetArray,q,l,c,u,r,x,m.predicate,e.collisionCircleDiameter,G),k=v||O.circles.length>0&&!O.collisionDetected,A=A&&O.offscreen}if(a.iconFeatureIndex&&(R=a.iconFeatureIndex),a.iconBox){var X=function(t){var e=w&&L?be(t,L.x,L.y,b,x,i.transform.angle):t;return i.collisionIndex.placeCollisionBox(e,_,h,l,m.predicate)};S=E&&E.box&&E.box.length&&a.verticalIconBox?(D=X(a.verticalIconBox)).box.length>0:(D=X(a.iconBox)).box.length>0,A=A&&D.offscreen}var Z=g||0===e.numHorizontalGlyphVertices&&0===e.numVerticalGlyphVertices,J=y||0===e.numIconVertices;if(Z||J?J?Z||(S=S&&k):k=S&&k:S=k=S&&k,k&&f&&f.box&&i.collisionIndex.insertCollisionBox(f.box,s.get(\"text-ignore-placement\"),o.bucketInstanceId,E&&E.box&&P?P:I,m.ID),S&&D&&i.collisionIndex.insertCollisionBox(D.box,s.get(\"icon-ignore-placement\"),o.bucketInstanceId,R,m.ID),O&&(k&&i.collisionIndex.insertCollisionCircles(O.circles,s.get(\"text-ignore-placement\"),o.bucketInstanceId,I,m.ID),r)){var K=o.bucketInstanceId,$=i.collisionCircleArrays[K];void 0===$&&($=i.collisionCircleArrays[K]=new ge);for(var Q=0;Q<O.circles.length;Q+=4)$.circles.push(O.circles[Q+0]),$.circles.push(O.circles[Q+1]),$.circles.push(O.circles[Q+2]),$.circles.push(O.collisionDetected?1:0)}i.placements[e.crossTileID]=new me(k||M,S||T,A||o.justReloaded),n[e.crossTileID]=!0}};if(k)for(var A=o.getSortedSymbolIndexes(this.transform.angle),L=A.length-1;L>=0;--L){var C=A[L];S(o.symbolInstances.get(C),o.collisionArrays[C])}else for(var E=e.symbolInstanceStart;E<e.symbolInstanceEnd;E++)S(o.symbolInstances.get(E),o.collisionArrays[E]);if(r&&o.bucketInstanceId in this.collisionCircleArrays){var O=this.collisionCircleArrays[o.bucketInstanceId];t.invert(O.invProjMatrix,l),O.viewportMatrix=this.collisionIndex.getViewportMatrix()}o.justReloaded=!1},xe.prototype.markUsedJustification=function(e,n,r,i){var a;a=i===t.WritingMode.vertical?r.verticalPlacedTextSymbolIndex:{left:r.leftJustifiedTextSymbolIndex,center:r.centerJustifiedTextSymbolIndex,right:r.rightJustifiedTextSymbolIndex}[t.getAnchorJustification(n)];for(var o=0,s=[r.leftJustifiedTextSymbolIndex,r.centerJustifiedTextSymbolIndex,r.rightJustifiedTextSymbolIndex,r.verticalPlacedTextSymbolIndex];o<s.length;o+=1){var l=s[o];l>=0&&(e.text.placedSymbolArray.get(l).crossTileID=a>=0&&l!==a?0:r.crossTileID)}},xe.prototype.markUsedOrientation=function(e,n,r){for(var i=n===t.WritingMode.horizontal||n===t.WritingMode.horizontalOnly?n:0,a=n===t.WritingMode.vertical?n:0,o=0,s=[r.leftJustifiedTextSymbolIndex,r.centerJustifiedTextSymbolIndex,r.rightJustifiedTextSymbolIndex];o<s.length;o+=1)e.text.placedSymbolArray.get(s[o]).placedOrientation=i;r.verticalPlacedTextSymbolIndex&&(e.text.placedSymbolArray.get(r.verticalPlacedTextSymbolIndex).placedOrientation=a)},xe.prototype.commit=function(t){this.commitTime=t,this.zoomAtLastRecencyCheck=this.transform.zoom;var e=this.prevPlacement,n=!1;this.prevZoomAdjustment=e?e.zoomAdjustment(this.transform.zoom):0;var r=e?e.symbolFadeChange(t):1,i=e?e.opacities:{},a=e?e.variableOffsets:{},o=e?e.placedOrientations:{};for(var s in this.placements){var l=this.placements[s],c=i[s];c?(this.opacities[s]=new pe(c,r,l.text,l.icon),n=n||l.text!==c.text.placed||l.icon!==c.icon.placed):(this.opacities[s]=new pe(null,r,l.text,l.icon,l.skipFade),n=n||l.text||l.icon)}for(var u in i){var h=i[u];if(!this.opacities[u]){var d=new pe(h,r,!1,!1);d.isHidden()||(this.opacities[u]=d,n=n||h.text.placed||h.icon.placed)}}for(var f in a)this.variableOffsets[f]||!this.opacities[f]||this.opacities[f].isHidden()||(this.variableOffsets[f]=a[f]);for(var p in o)this.placedOrientations[p]||!this.opacities[p]||this.opacities[p].isHidden()||(this.placedOrientations[p]=o[p]);n?this.lastPlacementChangeTime=t:\"number\"!=typeof this.lastPlacementChangeTime&&(this.lastPlacementChangeTime=e?e.lastPlacementChangeTime:t)},xe.prototype.updateLayerOpacities=function(t,e){for(var n={},r=0,i=e;r<i.length;r+=1){var a=i[r],o=a.getBucket(t);o&&a.latestFeatureIndex&&t.id===o.layerIds[0]&&this.updateBucketOpacities(o,n,a.collisionBoxArray)}},xe.prototype.updateBucketOpacities=function(e,n,r){var i=this;e.hasTextData()&&e.text.opacityVertexArray.clear(),e.hasIconData()&&e.icon.opacityVertexArray.clear(),e.hasIconCollisionBoxData()&&e.iconCollisionBox.collisionVertexArray.clear(),e.hasTextCollisionBoxData()&&e.textCollisionBox.collisionVertexArray.clear();var a=e.layers[0].layout,o=new pe(null,0,!1,!1,!0),s=a.get(\"text-allow-overlap\"),l=a.get(\"icon-allow-overlap\"),c=a.get(\"text-variable-anchor\"),u=\"map\"===a.get(\"text-rotation-alignment\"),h=\"map\"===a.get(\"text-pitch-alignment\"),d=\"none\"!==a.get(\"icon-text-fit\"),f=new pe(null,0,s&&(l||!e.hasIconData()||a.get(\"icon-optional\")),l&&(s||!e.hasTextData()||a.get(\"text-optional\")),!0);!e.collisionArrays&&r&&(e.hasIconCollisionBoxData()||e.hasTextCollisionBoxData())&&e.deserializeCollisionBoxes(r);for(var p=function(t,e,n){for(var r=0;r<e/4;r++)t.opacityVertexArray.emplaceBack(n)},m=function(r){var a=e.symbolInstances.get(r),s=a.numHorizontalGlyphVertices,l=a.numVerticalGlyphVertices,m=a.crossTileID,g=i.opacities[m];n[m]?g=o:g||(i.opacities[m]=g=f),n[m]=!0;var y=a.numIconVertices>0,v=i.placedOrientations[a.crossTileID],_=v===t.WritingMode.vertical,b=v===t.WritingMode.horizontal||v===t.WritingMode.horizontalOnly;if(s>0||l>0){var x=Ee(g.text);p(e.text,s,_?Oe:x),p(e.text,l,b?Oe:x);var w=g.text.isHidden();[a.rightJustifiedTextSymbolIndex,a.centerJustifiedTextSymbolIndex,a.leftJustifiedTextSymbolIndex].forEach((function(t){t>=0&&(e.text.placedSymbolArray.get(t).hidden=w||_?1:0)})),a.verticalPlacedTextSymbolIndex>=0&&(e.text.placedSymbolArray.get(a.verticalPlacedTextSymbolIndex).hidden=w||b?1:0);var k=i.variableOffsets[a.crossTileID];k&&i.markUsedJustification(e,k.anchor,a,v);var M=i.placedOrientations[a.crossTileID];M&&(i.markUsedJustification(e,\"left\",a,M),i.markUsedOrientation(e,M,a))}if(y){var T=Ee(g.icon),S=!(d&&a.verticalPlacedIconSymbolIndex&&_);a.placedIconSymbolIndex>=0&&(p(e.icon,a.numIconVertices,S?T:Oe),e.icon.placedSymbolArray.get(a.placedIconSymbolIndex).hidden=g.icon.isHidden()),a.verticalPlacedIconSymbolIndex>=0&&(p(e.icon,a.numVerticalIconVertices,S?Oe:T),e.icon.placedSymbolArray.get(a.verticalPlacedIconSymbolIndex).hidden=g.icon.isHidden())}if(e.hasIconCollisionBoxData()||e.hasTextCollisionBoxData()){var A=e.collisionArrays[r];if(A){var L=new t.Point(0,0);if(A.textBox||A.verticalTextBox){var C=!0;if(c){var E=i.variableOffsets[m];E?(L=_e(E.anchor,E.width,E.height,E.textOffset,E.textBoxScale),u&&L._rotate(h?i.transform.angle:-i.transform.angle)):C=!1}A.textBox&&we(e.textCollisionBox.collisionVertexArray,g.text.placed,!C||_,L.x,L.y),A.verticalTextBox&&we(e.textCollisionBox.collisionVertexArray,g.text.placed,!C||b,L.x,L.y)}var O=Boolean(!b&&A.verticalIconBox);A.iconBox&&we(e.iconCollisionBox.collisionVertexArray,g.icon.placed,O,d?L.x:0,d?L.y:0),A.verticalIconBox&&we(e.iconCollisionBox.collisionVertexArray,g.icon.placed,!O,d?L.x:0,d?L.y:0)}}},g=0;g<e.symbolInstances.length;g++)m(g);if(e.sortFeatures(this.transform.angle),this.retainedQueryData[e.bucketInstanceId]&&(this.retainedQueryData[e.bucketInstanceId].featureSortOrder=e.featureSortOrder),e.hasTextData()&&e.text.opacityVertexBuffer&&e.text.opacityVertexBuffer.updateData(e.text.opacityVertexArray),e.hasIconData()&&e.icon.opacityVertexBuffer&&e.icon.opacityVertexBuffer.updateData(e.icon.opacityVertexArray),e.hasIconCollisionBoxData()&&e.iconCollisionBox.collisionVertexBuffer&&e.iconCollisionBox.collisionVertexBuffer.updateData(e.iconCollisionBox.collisionVertexArray),e.hasTextCollisionBoxData()&&e.textCollisionBox.collisionVertexBuffer&&e.textCollisionBox.collisionVertexBuffer.updateData(e.textCollisionBox.collisionVertexArray),e.bucketInstanceId in this.collisionCircleArrays){var y=this.collisionCircleArrays[e.bucketInstanceId];e.placementInvProjMatrix=y.invProjMatrix,e.placementViewportMatrix=y.viewportMatrix,e.collisionCircleArray=y.circles,delete this.collisionCircleArrays[e.bucketInstanceId]}},xe.prototype.symbolFadeChange=function(t){return 0===this.fadeDuration?1:(t-this.commitTime)/this.fadeDuration+this.prevZoomAdjustment},xe.prototype.zoomAdjustment=function(t){return Math.max(0,(this.transform.zoom-t)/1.5)},xe.prototype.hasTransitions=function(t){return this.stale||t-this.lastPlacementChangeTime<this.fadeDuration},xe.prototype.stillRecent=function(t,e){var n=this.zoomAtLastRecencyCheck===e?1-this.zoomAdjustment(e):1;return this.zoomAtLastRecencyCheck=e,this.commitTime+this.fadeDuration*n>t},xe.prototype.setStale=function(){this.stale=!0};var ke=Math.pow(2,25),Me=Math.pow(2,24),Te=Math.pow(2,17),Se=Math.pow(2,16),Ae=Math.pow(2,9),Le=Math.pow(2,8),Ce=Math.pow(2,1);function Ee(t){if(0===t.opacity&&!t.placed)return 0;if(1===t.opacity&&t.placed)return 4294967295;var e=t.placed?1:0,n=Math.floor(127*t.opacity);return n*ke+e*Me+n*Te+e*Se+n*Ae+e*Le+n*Ce+e}var Oe=0,De=function(t){this._sortAcrossTiles=\"viewport-y\"!==t.layout.get(\"symbol-z-order\")&&void 0!==t.layout.get(\"symbol-sort-key\").constantOr(1),this._currentTileIndex=0,this._currentPartIndex=0,this._seenCrossTileIDs={},this._bucketParts=[]};De.prototype.continuePlacement=function(t,e,n,r,i){for(var a=this._bucketParts;this._currentTileIndex<t.length;)if(e.getBucketParts(a,r,t[this._currentTileIndex],this._sortAcrossTiles),this._currentTileIndex++,i())return!0;for(this._sortAcrossTiles&&(this._sortAcrossTiles=!1,a.sort((function(t,e){return t.sortKey-e.sortKey})));this._currentPartIndex<a.length;)if(e.placeLayerBucketPart(a[this._currentPartIndex],this._seenCrossTileIDs,n),this._currentPartIndex++,i())return!0;return!1};var Ie=function(t,e,n,r,i,a,o){this.placement=new xe(t,i,a,o),this._currentPlacementIndex=e.length-1,this._forceFullPlacement=n,this._showCollisionBoxes=r,this._done=!1};Ie.prototype.isDone=function(){return this._done},Ie.prototype.continuePlacement=function(e,n,r){for(var i=this,a=t.browser.now(),o=function(){var e=t.browser.now()-a;return!i._forceFullPlacement&&e>2};this._currentPlacementIndex>=0;){var s=n[e[this._currentPlacementIndex]],l=this.placement.collisionIndex.transform.zoom;if(\"symbol\"===s.type&&(!s.minzoom||s.minzoom<=l)&&(!s.maxzoom||s.maxzoom>l)){if(this._inProgressLayer||(this._inProgressLayer=new De(s)),this._inProgressLayer.continuePlacement(r[s.source],this.placement,this._showCollisionBoxes,s,o))return;delete this._inProgressLayer}this._currentPlacementIndex--}this._done=!0},Ie.prototype.commit=function(t){return this.placement.commit(t),this.placement};var Pe=512/t.EXTENT/2,Re=function(t,e,n){this.tileID=t,this.indexedSymbolInstances={},this.bucketInstanceId=n;for(var r=0;r<e.length;r++){var i=e.get(r),a=i.key;this.indexedSymbolInstances[a]||(this.indexedSymbolInstances[a]=[]),this.indexedSymbolInstances[a].push({crossTileID:i.crossTileID,coord:this.getScaledCoordinates(i,t)})}};Re.prototype.getScaledCoordinates=function(e,n){var r=Pe/Math.pow(2,n.canonical.z-this.tileID.canonical.z);return{x:Math.floor((n.canonical.x*t.EXTENT+e.anchorX)*r),y:Math.floor((n.canonical.y*t.EXTENT+e.anchorY)*r)}},Re.prototype.findMatches=function(t,e,n){for(var r=this.tileID.canonical.z<e.canonical.z?1:Math.pow(2,this.tileID.canonical.z-e.canonical.z),i=0;i<t.length;i++){var a=t.get(i);if(!a.crossTileID){var o=this.indexedSymbolInstances[a.key];if(o)for(var s=this.getScaledCoordinates(a,e),l=0,c=o;l<c.length;l+=1){var u=c[l];if(Math.abs(u.coord.x-s.x)<=r&&Math.abs(u.coord.y-s.y)<=r&&!n[u.crossTileID]){n[u.crossTileID]=!0,a.crossTileID=u.crossTileID;break}}}}};var ze=function(){this.maxCrossTileID=0};ze.prototype.generate=function(){return++this.maxCrossTileID};var je=function(){this.indexes={},this.usedCrossTileIDs={},this.lng=0};je.prototype.handleWrapJump=function(t){var e=Math.round((t-this.lng)/360);if(0!==e)for(var n in this.indexes){var r=this.indexes[n],i={};for(var a in r){var o=r[a];o.tileID=o.tileID.unwrapTo(o.tileID.wrap+e),i[o.tileID.key]=o}this.indexes[n]=i}this.lng=t},je.prototype.addBucket=function(t,e,n){if(this.indexes[t.overscaledZ]&&this.indexes[t.overscaledZ][t.key]){if(this.indexes[t.overscaledZ][t.key].bucketInstanceId===e.bucketInstanceId)return!1;this.removeBucketCrossTileIDs(t.overscaledZ,this.indexes[t.overscaledZ][t.key])}for(var r=0;r<e.symbolInstances.length;r++)e.symbolInstances.get(r).crossTileID=0;this.usedCrossTileIDs[t.overscaledZ]||(this.usedCrossTileIDs[t.overscaledZ]={});var i=this.usedCrossTileIDs[t.overscaledZ];for(var a in this.indexes){var o=this.indexes[a];if(Number(a)>t.overscaledZ)for(var s in o){var l=o[s];l.tileID.isChildOf(t)&&l.findMatches(e.symbolInstances,t,i)}else{var c=o[t.scaledTo(Number(a)).key];c&&c.findMatches(e.symbolInstances,t,i)}}for(var u=0;u<e.symbolInstances.length;u++){var h=e.symbolInstances.get(u);h.crossTileID||(h.crossTileID=n.generate(),i[h.crossTileID]=!0)}return void 0===this.indexes[t.overscaledZ]&&(this.indexes[t.overscaledZ]={}),this.indexes[t.overscaledZ][t.key]=new Re(t,e.symbolInstances,e.bucketInstanceId),!0},je.prototype.removeBucketCrossTileIDs=function(t,e){for(var n in e.indexedSymbolInstances)for(var r=0,i=e.indexedSymbolInstances[n];r<i.length;r+=1)delete this.usedCrossTileIDs[t][i[r].crossTileID]},je.prototype.removeStaleBuckets=function(t){var e=!1;for(var n in this.indexes){var r=this.indexes[n];for(var i in r)t[r[i].bucketInstanceId]||(this.removeBucketCrossTileIDs(n,r[i]),delete r[i],e=!0)}return e};var Fe=function(){this.layerIndexes={},this.crossTileIDs=new ze,this.maxBucketInstanceId=0,this.bucketsInCurrentPlacement={}};Fe.prototype.addLayer=function(t,e,n){var r=this.layerIndexes[t.id];void 0===r&&(r=this.layerIndexes[t.id]=new je);var i=!1,a={};r.handleWrapJump(n);for(var o=0,s=e;o<s.length;o+=1){var l=s[o],c=l.getBucket(t);c&&t.id===c.layerIds[0]&&(c.bucketInstanceId||(c.bucketInstanceId=++this.maxBucketInstanceId),r.addBucket(l.tileID,c,this.crossTileIDs)&&(i=!0),a[c.bucketInstanceId]=!0)}return r.removeStaleBuckets(a)&&(i=!0),i},Fe.prototype.pruneUnusedLayers=function(t){var e={};for(var n in t.forEach((function(t){e[t]=!0})),this.layerIndexes)e[n]||delete this.layerIndexes[n]};var Ne=function(e,n){return t.emitValidationErrors(e,n&&n.filter((function(t){return\"source.canvas\"!==t.identifier})))},Be=t.pick(Yt,[\"addLayer\",\"removeLayer\",\"setPaintProperty\",\"setLayoutProperty\",\"setFilter\",\"addSource\",\"removeSource\",\"setLayerZoomRange\",\"setLight\",\"setTransition\",\"setGeoJSONSourceData\"]),Ye=t.pick(Yt,[\"setCenter\",\"setZoom\",\"setBearing\",\"setPitch\"]),He=function(){var e={},n=t.styleSpec.$version;for(var r in t.styleSpec.$root){var i,a=t.styleSpec.$root[r];a.required&&null!=(i=\"version\"===r?n:\"array\"===a.type?[]:{})&&(e[r]=i)}return e}(),Ve=function(e){function n(r,i){var a=this;void 0===i&&(i={}),e.call(this),this.map=r,this.dispatcher=new M(Ft(),this),this.imageManager=new d,this.imageManager.setEventedParent(this),this.glyphManager=new _(r._requestManager,i.localIdeographFontFamily),this.lineAtlas=new k(256,512),this.crossTileSymbolIndex=new Fe,this._layers={},this._serializedLayers={},this._order=[],this.sourceCaches={},this.zoomHistory=new t.ZoomHistory,this._loaded=!1,this._availableImages=[],this._resetUpdates(),this.dispatcher.broadcast(\"setReferrer\",t.getReferrer());var o=this;this._rtlTextPluginCallback=n.registerForPluginStateChange((function(e){o.dispatcher.broadcast(\"syncRTLPluginState\",{pluginStatus:e.pluginStatus,pluginURL:e.pluginURL},(function(e,n){if(t.triggerPluginCompletionEvent(e),n&&n.every((function(t){return t})))for(var r in o.sourceCaches)o.sourceCaches[r].reload()}))})),this.on(\"data\",(function(t){if(\"source\"===t.dataType&&\"metadata\"===t.sourceDataType){var e=a.sourceCaches[t.sourceId];if(e){var n=e.getSource();if(n&&n.vectorLayerIds)for(var r in a._layers){var i=a._layers[r];i.source===n.id&&a._validateLayer(i)}}}}))}return e&&(n.__proto__=e),(n.prototype=Object.create(e&&e.prototype)).constructor=n,n.prototype.loadURL=function(e,n){var r=this;void 0===n&&(n={}),this.fire(new t.Event(\"dataloading\",{dataType:\"style\"}));var i=\"boolean\"==typeof n.validate?n.validate:!t.isMapboxURL(e);e=this.map._requestManager.normalizeStyleURL(e,n.accessToken);var a=this.map._requestManager.transformRequest(e,t.ResourceType.Style);this._request=t.getJSON(a,(function(e,n){r._request=null,e?r.fire(new t.ErrorEvent(e)):n&&r._load(n,i)}))},n.prototype.loadJSON=function(e,n){var r=this;void 0===n&&(n={}),this.fire(new t.Event(\"dataloading\",{dataType:\"style\"})),this._request=t.browser.frame((function(){r._request=null,r._load(e,!1!==n.validate)}))},n.prototype.loadEmpty=function(){this.fire(new t.Event(\"dataloading\",{dataType:\"style\"})),this._load(He,!1)},n.prototype._load=function(e,n){if(!n||!Ne(this,t.validateStyle(e))){for(var r in this._loaded=!0,this.stylesheet=e,e.sources)this.addSource(r,e.sources[r],{validate:!1});e.sprite?this._loadSprite(e.sprite):this.imageManager.setLoaded(!0),this.glyphManager.setURL(e.glyphs);var i=Bt(this.stylesheet.layers);this._order=i.map((function(t){return t.id})),this._layers={},this._serializedLayers={};for(var a=0,o=i;a<o.length;a+=1){var s=o[a];(s=t.createStyleLayer(s)).setEventedParent(this,{layer:{id:s.id}}),this._layers[s.id]=s,this._serializedLayers[s.id]=s.serialize()}this.dispatcher.broadcast(\"setLayers\",this._serializeLayers(this._order)),this.light=new w(this.stylesheet.light),this.fire(new t.Event(\"data\",{dataType:\"style\"})),this.fire(new t.Event(\"style.load\"))}},n.prototype._loadSprite=function(e){var n=this;this._spriteRequest=function(e,n,r){var i,a,o,s=t.browser.devicePixelRatio>1?\"@2x\":\"\",l=t.getJSON(n.transformRequest(n.normalizeSpriteURL(e,s,\".json\"),t.ResourceType.SpriteJSON),(function(t,e){l=null,o||(o=t,i=e,u())})),c=t.getImage(n.transformRequest(n.normalizeSpriteURL(e,s,\".png\"),t.ResourceType.SpriteImage),(function(t,e){c=null,o||(o=t,a=e,u())}));function u(){if(o)r(o);else if(i&&a){var e=t.browser.getImageData(a),n={};for(var s in i){var l=i[s],c=l.width,u=l.height,h=l.x,d=l.y,f=l.sdf,p=l.pixelRatio,m=l.stretchX,g=l.stretchY,y=l.content,v=new t.RGBAImage({width:c,height:u});t.RGBAImage.copy(e,v,{x:h,y:d},{x:0,y:0},{width:c,height:u}),n[s]={data:v,pixelRatio:p,sdf:f,stretchX:m,stretchY:g,content:y}}r(null,n)}}return{cancel:function(){l&&(l.cancel(),l=null),c&&(c.cancel(),c=null)}}}(e,this.map._requestManager,(function(e,r){if(n._spriteRequest=null,e)n.fire(new t.ErrorEvent(e));else if(r)for(var i in r)n.imageManager.addImage(i,r[i]);n.imageManager.setLoaded(!0),n._availableImages=n.imageManager.listImages(),n.dispatcher.broadcast(\"setImages\",n._availableImages),n.fire(new t.Event(\"data\",{dataType:\"style\"}))}))},n.prototype._validateLayer=function(e){var n=this.sourceCaches[e.source];if(n){var r=e.sourceLayer;if(r){var i=n.getSource();(\"geojson\"===i.type||i.vectorLayerIds&&-1===i.vectorLayerIds.indexOf(r))&&this.fire(new t.ErrorEvent(new Error('Source layer \"'+r+'\" does not exist on source \"'+i.id+'\" as specified by style layer \"'+e.id+'\"')))}}},n.prototype.loaded=function(){if(!this._loaded)return!1;if(Object.keys(this._updatedSources).length)return!1;for(var t in this.sourceCaches)if(!this.sourceCaches[t].loaded())return!1;return!!this.imageManager.isLoaded()},n.prototype._serializeLayers=function(t){for(var e=[],n=0,r=t;n<r.length;n+=1){var i=this._layers[r[n]];\"custom\"!==i.type&&e.push(i.serialize())}return e},n.prototype.hasTransitions=function(){if(this.light&&this.light.hasTransition())return!0;for(var t in this.sourceCaches)if(this.sourceCaches[t].hasTransition())return!0;for(var e in this._layers)if(this._layers[e].hasTransition())return!0;return!1},n.prototype._checkLoaded=function(){if(!this._loaded)throw new Error(\"Style is not done loading\")},n.prototype.update=function(e){if(this._loaded){var n=this._changed;if(this._changed){var r=Object.keys(this._updatedLayers),i=Object.keys(this._removedLayers);for(var a in(r.length||i.length)&&this._updateWorkerLayers(r,i),this._updatedSources){var o=this._updatedSources[a];\"reload\"===o?this._reloadSource(a):\"clear\"===o&&this._clearSource(a)}for(var s in this._updateTilesForChangedImages(),this._updatedPaintProps)this._layers[s].updateTransitions(e);this.light.updateTransitions(e),this._resetUpdates()}for(var l in this.sourceCaches)this.sourceCaches[l].used=!1;for(var c=0,u=this._order;c<u.length;c+=1){var h=this._layers[u[c]];h.recalculate(e,this._availableImages),!h.isHidden(e.zoom)&&h.source&&(this.sourceCaches[h.source].used=!0)}this.light.recalculate(e),this.z=e.zoom,n&&this.fire(new t.Event(\"data\",{dataType:\"style\"}))}},n.prototype._updateTilesForChangedImages=function(){var t=Object.keys(this._changedImages);if(t.length){for(var e in this.sourceCaches)this.sourceCaches[e].reloadTilesForDependencies([\"icons\",\"patterns\"],t);this._changedImages={}}},n.prototype._updateWorkerLayers=function(t,e){this.dispatcher.broadcast(\"updateLayers\",{layers:this._serializeLayers(t),removedIds:e})},n.prototype._resetUpdates=function(){this._changed=!1,this._updatedLayers={},this._removedLayers={},this._updatedSources={},this._updatedPaintProps={},this._changedImages={}},n.prototype.setState=function(e){var n=this;if(this._checkLoaded(),Ne(this,t.validateStyle(e)))return!1;(e=t.clone$1(e)).layers=Bt(e.layers);var r=function(e,n){if(!e)return[{command:Yt.setStyle,args:[n]}];var r=[];try{if(!t.deepEqual(e.version,n.version))return[{command:Yt.setStyle,args:[n]}];t.deepEqual(e.center,n.center)||r.push({command:Yt.setCenter,args:[n.center]}),t.deepEqual(e.zoom,n.zoom)||r.push({command:Yt.setZoom,args:[n.zoom]}),t.deepEqual(e.bearing,n.bearing)||r.push({command:Yt.setBearing,args:[n.bearing]}),t.deepEqual(e.pitch,n.pitch)||r.push({command:Yt.setPitch,args:[n.pitch]}),t.deepEqual(e.sprite,n.sprite)||r.push({command:Yt.setSprite,args:[n.sprite]}),t.deepEqual(e.glyphs,n.glyphs)||r.push({command:Yt.setGlyphs,args:[n.glyphs]}),t.deepEqual(e.transition,n.transition)||r.push({command:Yt.setTransition,args:[n.transition]}),t.deepEqual(e.light,n.light)||r.push({command:Yt.setLight,args:[n.light]});var i={},a=[];!function(e,n,r,i){var a;for(a in n=n||{},e=e||{})e.hasOwnProperty(a)&&(n.hasOwnProperty(a)||Vt(a,r,i));for(a in n)n.hasOwnProperty(a)&&(e.hasOwnProperty(a)?t.deepEqual(e[a],n[a])||(\"geojson\"===e[a].type&&\"geojson\"===n[a].type&&Wt(e,n,a)?r.push({command:Yt.setGeoJSONSourceData,args:[a,n[a].data]}):Ut(a,n,r,i)):Ht(a,n,r))}(e.sources,n.sources,a,i);var o=[];e.layers&&e.layers.forEach((function(t){i[t.source]?r.push({command:Yt.removeLayer,args:[t.id]}):o.push(t)})),r=r.concat(a),function(e,n,r){n=n||[];var i,a,o,s,l,c,u,h=(e=e||[]).map(Gt),d=n.map(Gt),f=e.reduce(Xt,{}),p=n.reduce(Xt,{}),m=h.slice(),g=Object.create(null);for(i=0,a=0;i<h.length;i++)p.hasOwnProperty(o=h[i])?a++:(r.push({command:Yt.removeLayer,args:[o]}),m.splice(m.indexOf(o,a),1));for(i=0,a=0;i<d.length;i++)m[m.length-1-i]!==(o=d[d.length-1-i])&&(f.hasOwnProperty(o)?(r.push({command:Yt.removeLayer,args:[o]}),m.splice(m.lastIndexOf(o,m.length-a),1)):a++,r.push({command:Yt.addLayer,args:[p[o],c=m[m.length-i]]}),m.splice(m.length-i,0,o),g[o]=!0);for(i=0;i<d.length;i++)if(s=f[o=d[i]],l=p[o],!g[o]&&!t.deepEqual(s,l))if(t.deepEqual(s.source,l.source)&&t.deepEqual(s[\"source-layer\"],l[\"source-layer\"])&&t.deepEqual(s.type,l.type)){for(u in qt(s.layout,l.layout,r,o,null,Yt.setLayoutProperty),qt(s.paint,l.paint,r,o,null,Yt.setPaintProperty),t.deepEqual(s.filter,l.filter)||r.push({command:Yt.setFilter,args:[o,l.filter]}),t.deepEqual(s.minzoom,l.minzoom)&&t.deepEqual(s.maxzoom,l.maxzoom)||r.push({command:Yt.setLayerZoomRange,args:[o,l.minzoom,l.maxzoom]}),s)s.hasOwnProperty(u)&&\"layout\"!==u&&\"paint\"!==u&&\"filter\"!==u&&\"metadata\"!==u&&\"minzoom\"!==u&&\"maxzoom\"!==u&&(0===u.indexOf(\"paint.\")?qt(s[u],l[u],r,o,u.slice(6),Yt.setPaintProperty):t.deepEqual(s[u],l[u])||r.push({command:Yt.setLayerProperty,args:[o,u,l[u]]}));for(u in l)l.hasOwnProperty(u)&&!s.hasOwnProperty(u)&&\"layout\"!==u&&\"paint\"!==u&&\"filter\"!==u&&\"metadata\"!==u&&\"minzoom\"!==u&&\"maxzoom\"!==u&&(0===u.indexOf(\"paint.\")?qt(s[u],l[u],r,o,u.slice(6),Yt.setPaintProperty):t.deepEqual(s[u],l[u])||r.push({command:Yt.setLayerProperty,args:[o,u,l[u]]}))}else r.push({command:Yt.removeLayer,args:[o]}),c=m[m.lastIndexOf(o)+1],r.push({command:Yt.addLayer,args:[l,c]})}(o,n.layers,r)}catch(t){console.warn(\"Unable to compute style diff:\",t),r=[{command:Yt.setStyle,args:[n]}]}return r}(this.serialize(),e).filter((function(t){return!(t.command in Ye)}));if(0===r.length)return!1;var i=r.filter((function(t){return!(t.command in Be)}));if(i.length>0)throw new Error(\"Unimplemented: \"+i.map((function(t){return t.command})).join(\", \")+\".\");return r.forEach((function(t){\"setTransition\"!==t.command&&n[t.command].apply(n,t.args)})),this.stylesheet=e,!0},n.prototype.addImage=function(e,n){if(this.getImage(e))return this.fire(new t.ErrorEvent(new Error(\"An image with this name already exists.\")));this.imageManager.addImage(e,n),this._availableImages=this.imageManager.listImages(),this._changedImages[e]=!0,this._changed=!0,this.fire(new t.Event(\"data\",{dataType:\"style\"}))},n.prototype.updateImage=function(t,e){this.imageManager.updateImage(t,e)},n.prototype.getImage=function(t){return this.imageManager.getImage(t)},n.prototype.removeImage=function(e){if(!this.getImage(e))return this.fire(new t.ErrorEvent(new Error(\"No image with this name exists.\")));this.imageManager.removeImage(e),this._availableImages=this.imageManager.listImages(),this._changedImages[e]=!0,this._changed=!0,this.fire(new t.Event(\"data\",{dataType:\"style\"}))},n.prototype.listImages=function(){return this._checkLoaded(),this.imageManager.listImages()},n.prototype.addSource=function(e,n,r){var i=this;if(void 0===r&&(r={}),this._checkLoaded(),void 0!==this.sourceCaches[e])throw new Error(\"There is already a source with this ID\");if(!n.type)throw new Error(\"The type property must be defined, but the only the following properties were given: \"+Object.keys(n).join(\", \")+\".\");if(!([\"vector\",\"raster\",\"geojson\",\"video\",\"image\"].indexOf(n.type)>=0&&this._validate(t.validateStyle.source,\"sources.\"+e,n,null,r))){this.map&&this.map._collectResourceTiming&&(n.collectResourceTiming=!0);var a=this.sourceCaches[e]=new Et(e,n,this.dispatcher);a.style=this,a.setEventedParent(this,(function(){return{isSourceLoaded:i.loaded(),source:a.serialize(),sourceId:e}})),a.onAdd(this.map),this._changed=!0}},n.prototype.removeSource=function(e){if(this._checkLoaded(),void 0===this.sourceCaches[e])throw new Error(\"There is no source with this ID\");for(var n in this._layers)if(this._layers[n].source===e)return this.fire(new t.ErrorEvent(new Error('Source \"'+e+'\" cannot be removed while layer \"'+n+'\" is using it.')));var r=this.sourceCaches[e];delete this.sourceCaches[e],delete this._updatedSources[e],r.fire(new t.Event(\"data\",{sourceDataType:\"metadata\",dataType:\"source\",sourceId:e})),r.setEventedParent(null),r.clearTiles(),r.onRemove&&r.onRemove(this.map),this._changed=!0},n.prototype.setGeoJSONSourceData=function(t,e){this._checkLoaded(),this.sourceCaches[t].getSource().setData(e),this._changed=!0},n.prototype.getSource=function(t){return this.sourceCaches[t]&&this.sourceCaches[t].getSource()},n.prototype.addLayer=function(e,n,r){void 0===r&&(r={}),this._checkLoaded();var i=e.id;if(this.getLayer(i))this.fire(new t.ErrorEvent(new Error('Layer with id \"'+i+'\" already exists on this map')));else{var a;if(\"custom\"===e.type){if(Ne(this,t.validateCustomStyleLayer(e)))return;a=t.createStyleLayer(e)}else{if(\"object\"==typeof e.source&&(this.addSource(i,e.source),e=t.clone$1(e),e=t.extend(e,{source:i})),this._validate(t.validateStyle.layer,\"layers.\"+i,e,{arrayIndex:-1},r))return;a=t.createStyleLayer(e),this._validateLayer(a),a.setEventedParent(this,{layer:{id:i}}),this._serializedLayers[a.id]=a.serialize()}var o=n?this._order.indexOf(n):this._order.length;if(n&&-1===o)this.fire(new t.ErrorEvent(new Error('Layer with id \"'+n+'\" does not exist on this map.')));else{if(this._order.splice(o,0,i),this._layerOrderChanged=!0,this._layers[i]=a,this._removedLayers[i]&&a.source&&\"custom\"!==a.type){var s=this._removedLayers[i];delete this._removedLayers[i],s.type!==a.type?this._updatedSources[a.source]=\"clear\":(this._updatedSources[a.source]=\"reload\",this.sourceCaches[a.source].pause())}this._updateLayer(a),a.onAdd&&a.onAdd(this.map)}}},n.prototype.moveLayer=function(e,n){if(this._checkLoaded(),this._changed=!0,this._layers[e]){if(e!==n){var r=this._order.indexOf(e);this._order.splice(r,1);var i=n?this._order.indexOf(n):this._order.length;n&&-1===i?this.fire(new t.ErrorEvent(new Error('Layer with id \"'+n+'\" does not exist on this map.'))):(this._order.splice(i,0,e),this._layerOrderChanged=!0)}}else this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be moved.\")))},n.prototype.removeLayer=function(e){this._checkLoaded();var n=this._layers[e];if(n){n.setEventedParent(null);var r=this._order.indexOf(e);this._order.splice(r,1),this._layerOrderChanged=!0,this._changed=!0,this._removedLayers[e]=n,delete this._layers[e],delete this._serializedLayers[e],delete this._updatedLayers[e],delete this._updatedPaintProps[e],n.onRemove&&n.onRemove(this.map)}else this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be removed.\")))},n.prototype.getLayer=function(t){return this._layers[t]},n.prototype.hasLayer=function(t){return t in this._layers},n.prototype.setLayerZoomRange=function(e,n,r){this._checkLoaded();var i=this.getLayer(e);i?i.minzoom===n&&i.maxzoom===r||(null!=n&&(i.minzoom=n),null!=r&&(i.maxzoom=r),this._updateLayer(i)):this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot have zoom extent.\")))},n.prototype.setFilter=function(e,n,r){void 0===r&&(r={}),this._checkLoaded();var i=this.getLayer(e);if(i){if(!t.deepEqual(i.filter,n))return null==n?(i.filter=void 0,void this._updateLayer(i)):void(this._validate(t.validateStyle.filter,\"layers.\"+i.id+\".filter\",n,null,r)||(i.filter=t.clone$1(n),this._updateLayer(i)))}else this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be filtered.\")))},n.prototype.getFilter=function(e){return t.clone$1(this.getLayer(e).filter)},n.prototype.setLayoutProperty=function(e,n,r,i){void 0===i&&(i={}),this._checkLoaded();var a=this.getLayer(e);a?t.deepEqual(a.getLayoutProperty(n),r)||(a.setLayoutProperty(n,r,i),this._updateLayer(a)):this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be styled.\")))},n.prototype.getLayoutProperty=function(e,n){var r=this.getLayer(e);if(r)return r.getLayoutProperty(n);this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style.\")))},n.prototype.setPaintProperty=function(e,n,r,i){void 0===i&&(i={}),this._checkLoaded();var a=this.getLayer(e);a?t.deepEqual(a.getPaintProperty(n),r)||(a.setPaintProperty(n,r,i)&&this._updateLayer(a),this._changed=!0,this._updatedPaintProps[e]=!0):this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be styled.\")))},n.prototype.getPaintProperty=function(t,e){return this.getLayer(t).getPaintProperty(e)},n.prototype.setFeatureState=function(e,n){this._checkLoaded();var r=e.source,i=e.sourceLayer,a=this.sourceCaches[r];if(void 0!==a){var o=a.getSource().type;\"geojson\"===o&&i?this.fire(new t.ErrorEvent(new Error(\"GeoJSON sources cannot have a sourceLayer parameter.\"))):\"vector\"!==o||i?(void 0===e.id&&this.fire(new t.ErrorEvent(new Error(\"The feature id parameter must be provided.\"))),a.setFeatureState(i,e.id,n)):this.fire(new t.ErrorEvent(new Error(\"The sourceLayer parameter must be provided for vector source types.\")))}else this.fire(new t.ErrorEvent(new Error(\"The source '\"+r+\"' does not exist in the map's style.\")))},n.prototype.removeFeatureState=function(e,n){this._checkLoaded();var r=e.source,i=this.sourceCaches[r];if(void 0!==i){var a=i.getSource().type,o=\"vector\"===a?e.sourceLayer:void 0;\"vector\"!==a||o?n&&\"string\"!=typeof e.id&&\"number\"!=typeof e.id?this.fire(new t.ErrorEvent(new Error(\"A feature id is requred to remove its specific state property.\"))):i.removeFeatureState(o,e.id,n):this.fire(new t.ErrorEvent(new Error(\"The sourceLayer parameter must be provided for vector source types.\")))}else this.fire(new t.ErrorEvent(new Error(\"The source '\"+r+\"' does not exist in the map's style.\")))},n.prototype.getFeatureState=function(e){this._checkLoaded();var n=e.source,r=e.sourceLayer,i=this.sourceCaches[n];if(void 0!==i){if(\"vector\"!==i.getSource().type||r)return void 0===e.id&&this.fire(new t.ErrorEvent(new Error(\"The feature id parameter must be provided.\"))),i.getFeatureState(r,e.id);this.fire(new t.ErrorEvent(new Error(\"The sourceLayer parameter must be provided for vector source types.\")))}else this.fire(new t.ErrorEvent(new Error(\"The source '\"+n+\"' does not exist in the map's style.\")))},n.prototype.getTransition=function(){return t.extend({duration:300,delay:0},this.stylesheet&&this.stylesheet.transition)},n.prototype.serialize=function(){return t.filterObject({version:this.stylesheet.version,name:this.stylesheet.name,metadata:this.stylesheet.metadata,light:this.stylesheet.light,center:this.stylesheet.center,zoom:this.stylesheet.zoom,bearing:this.stylesheet.bearing,pitch:this.stylesheet.pitch,sprite:this.stylesheet.sprite,glyphs:this.stylesheet.glyphs,transition:this.stylesheet.transition,sources:t.mapObject(this.sourceCaches,(function(t){return t.serialize()})),layers:this._serializeLayers(this._order)},(function(t){return void 0!==t}))},n.prototype._updateLayer=function(t){this._updatedLayers[t.id]=!0,t.source&&!this._updatedSources[t.source]&&\"raster\"!==this.sourceCaches[t.source].getSource().type&&(this._updatedSources[t.source]=\"reload\",this.sourceCaches[t.source].pause()),this._changed=!0},n.prototype._flattenAndSortRenderedFeatures=function(t){for(var e=this,n=function(t){return\"fill-extrusion\"===e._layers[t].type},r={},i=[],a=this._order.length-1;a>=0;a--){var o=this._order[a];if(n(o)){r[o]=a;for(var s=0,l=t;s<l.length;s+=1){var c=l[s][o];if(c)for(var u=0,h=c;u<h.length;u+=1)i.push(h[u])}}}i.sort((function(t,e){return e.intersectionZ-t.intersectionZ}));for(var d=[],f=this._order.length-1;f>=0;f--){var p=this._order[f];if(n(p))for(var m=i.length-1;m>=0;m--){var g=i[m].feature;if(r[g.layer.id]<f)break;d.push(g),i.pop()}else for(var y=0,v=t;y<v.length;y+=1){var _=v[y][p];if(_)for(var b=0,x=_;b<x.length;b+=1)d.push(x[b].feature)}}return d},n.prototype.queryRenderedFeatures=function(e,n,r){n&&n.filter&&this._validate(t.validateStyle.filter,\"queryRenderedFeatures.filter\",n.filter,null,n);var i={};if(n&&n.layers){if(!Array.isArray(n.layers))return this.fire(new t.ErrorEvent(new Error(\"parameters.layers must be an Array.\"))),[];for(var a=0,o=n.layers;a<o.length;a+=1){var s=o[a],l=this._layers[s];if(!l)return this.fire(new t.ErrorEvent(new Error(\"The layer '\"+s+\"' does not exist in the map's style and cannot be queried for features.\"))),[];i[l.source]=!0}}var c=[];for(var u in n.availableImages=this._availableImages,this.sourceCaches)n.layers&&!i[u]||c.push(j(this.sourceCaches[u],this._layers,this._serializedLayers,e,n,r));return this.placement&&c.push(function(t,e,n,r,i,a,o){for(var s={},l=a.queryRenderedSymbols(r),c=[],u=0,h=Object.keys(l).map(Number);u<h.length;u+=1)c.push(o[h[u]]);c.sort(F);for(var d=function(){var n=p[f],r=n.featureIndex.lookupSymbolFeatures(l[n.bucketInstanceId],e,n.bucketIndex,n.sourceLayerIndex,i.filter,i.layers,i.availableImages,t);for(var a in r){var o=s[a]=s[a]||[],c=r[a];c.sort((function(t,e){var r=n.featureSortOrder;if(r){var i=r.indexOf(t.featureIndex);return r.indexOf(e.featureIndex)-i}return e.featureIndex-t.featureIndex}));for(var u=0,h=c;u<h.length;u+=1)o.push(h[u])}},f=0,p=c;f<p.length;f+=1)d();var m=function(e){s[e].forEach((function(r){var i=r.feature,a=n[t[e].source].getFeatureState(i.layer[\"source-layer\"],i.id);i.source=i.layer.source,i.layer[\"source-layer\"]&&(i.sourceLayer=i.layer[\"source-layer\"]),i.state=a}))};for(var g in s)m(g);return s}(this._layers,this._serializedLayers,this.sourceCaches,e,n,this.placement.collisionIndex,this.placement.retainedQueryData)),this._flattenAndSortRenderedFeatures(c)},n.prototype.querySourceFeatures=function(e,n){n&&n.filter&&this._validate(t.validateStyle.filter,\"querySourceFeatures.filter\",n.filter,null,n);var r=this.sourceCaches[e];return r?function(t,e){for(var n=t.getRenderableIds().map((function(e){return t.getTileByID(e)})),r=[],i={},a=0;a<n.length;a++){var o=n[a],s=o.tileID.canonical.key;i[s]||(i[s]=!0,o.querySourceFeatures(r,e))}return r}(r,n):[]},n.prototype.addSourceType=function(t,e,r){return n.getSourceType(t)?r(new Error('A source type called \"'+t+'\" already exists.')):(n.setSourceType(t,e),e.workerSourceURL?void this.dispatcher.broadcast(\"loadWorkerSource\",{name:t,url:e.workerSourceURL},r):r(null,null))},n.prototype.getLight=function(){return this.light.getLight()},n.prototype.setLight=function(e,n){void 0===n&&(n={}),this._checkLoaded();var r=this.light.getLight(),i=!1;for(var a in e)if(!t.deepEqual(e[a],r[a])){i=!0;break}if(i){var o={now:t.browser.now(),transition:t.extend({duration:300,delay:0},this.stylesheet.transition)};this.light.setLight(e,n),this.light.updateTransitions(o)}},n.prototype._validate=function(e,n,r,i,a){return void 0===a&&(a={}),(!a||!1!==a.validate)&&Ne(this,e.call(t.validateStyle,t.extend({key:n,style:this.serialize(),value:r,styleSpec:t.styleSpec},i)))},n.prototype._remove=function(){for(var e in this._request&&(this._request.cancel(),this._request=null),this._spriteRequest&&(this._spriteRequest.cancel(),this._spriteRequest=null),t.evented.off(\"pluginStateChange\",this._rtlTextPluginCallback),this._layers)this._layers[e].setEventedParent(null);for(var n in this.sourceCaches)this.sourceCaches[n].clearTiles(),this.sourceCaches[n].setEventedParent(null);this.imageManager.setEventedParent(null),this.setEventedParent(null),this.dispatcher.remove()},n.prototype._clearSource=function(t){this.sourceCaches[t].clearTiles()},n.prototype._reloadSource=function(t){this.sourceCaches[t].resume(),this.sourceCaches[t].reload()},n.prototype._updateSources=function(t){for(var e in this.sourceCaches)this.sourceCaches[e].update(t)},n.prototype._generateCollisionBoxes=function(){for(var t in this.sourceCaches)this._reloadSource(t)},n.prototype._updatePlacement=function(e,n,r,i,a){void 0===a&&(a=!1);for(var o=!1,s=!1,l={},c=0,u=this._order;c<u.length;c+=1){var h=this._layers[u[c]];if(\"symbol\"===h.type){if(!l[h.source]){var d=this.sourceCaches[h.source];l[h.source]=d.getRenderableIds(!0).map((function(t){return d.getTileByID(t)})).sort((function(t,e){return e.tileID.overscaledZ-t.tileID.overscaledZ||(t.tileID.isLessThan(e.tileID)?-1:1)}))}var f=this.crossTileSymbolIndex.addLayer(h,l[h.source],e.center.lng);o=o||f}}if(this.crossTileSymbolIndex.pruneUnusedLayers(this._order),((a=a||this._layerOrderChanged||0===r)||!this.pauseablePlacement||this.pauseablePlacement.isDone()&&!this.placement.stillRecent(t.browser.now(),e.zoom))&&(this.pauseablePlacement=new Ie(e,this._order,a,n,r,i,this.placement),this._layerOrderChanged=!1),this.pauseablePlacement.isDone()?this.placement.setStale():(this.pauseablePlacement.continuePlacement(this._order,this._layers,l),this.pauseablePlacement.isDone()&&(this.placement=this.pauseablePlacement.commit(t.browser.now()),s=!0),o&&this.pauseablePlacement.placement.setStale()),s||o)for(var p=0,m=this._order;p<m.length;p+=1){var g=this._layers[m[p]];\"symbol\"===g.type&&this.placement.updateLayerOpacities(g,l[g.source])}return!this.pauseablePlacement.isDone()||this.placement.hasTransitions(t.browser.now())},n.prototype._releaseSymbolFadeTiles=function(){for(var t in this.sourceCaches)this.sourceCaches[t].releaseSymbolFadeTiles()},n.prototype.getImages=function(t,e,n){this.imageManager.getImages(e.icons,n),this._updateTilesForChangedImages();var r=this.sourceCaches[e.source];r&&r.setDependencies(e.tileID.key,e.type,e.icons)},n.prototype.getGlyphs=function(t,e,n){this.glyphManager.getGlyphs(e.stacks,n)},n.prototype.getResource=function(e,n,r){return t.makeRequest(n,r)},n}(t.Evented);Ve.getSourceType=function(t){return R[t]},Ve.setSourceType=function(t,e){R[t]=e},Ve.registerForPluginStateChange=t.registerForPluginStateChange;var Ue=t.createLayout([{name:\"a_pos\",type:\"Int16\",components:2}]),We=vn(\"#ifdef GL_ES\\nprecision mediump float;\\n#else\\n#if !defined(lowp)\\n#define lowp\\n#endif\\n#if !defined(mediump)\\n#define mediump\\n#endif\\n#if !defined(highp)\\n#define highp\\n#endif\\n#endif\",\"#ifdef GL_ES\\nprecision highp float;\\n#else\\n#if !defined(lowp)\\n#define lowp\\n#endif\\n#if !defined(mediump)\\n#define mediump\\n#endif\\n#if !defined(highp)\\n#define highp\\n#endif\\n#endif\\nvec2 unpack_float(const float packedValue) {int packedIntValue=int(packedValue);int v0=packedIntValue/256;return vec2(v0,packedIntValue-v0*256);}vec2 unpack_opacity(const float packedOpacity) {int intOpacity=int(packedOpacity)/2;return vec2(float(intOpacity)/127.0,mod(packedOpacity,2.0));}vec4 decode_color(const vec2 encodedColor) {return vec4(unpack_float(encodedColor[0])/255.0,unpack_float(encodedColor[1])/255.0\\n);}float unpack_mix_vec2(const vec2 packedValue,const float t) {return mix(packedValue[0],packedValue[1],t);}vec4 unpack_mix_color(const vec4 packedColors,const float t) {vec4 minColor=decode_color(vec2(packedColors[0],packedColors[1]));vec4 maxColor=decode_color(vec2(packedColors[2],packedColors[3]));return mix(minColor,maxColor,t);}vec2 get_pattern_pos(const vec2 pixel_coord_upper,const vec2 pixel_coord_lower,const vec2 pattern_size,const float tile_units_to_pixels,const vec2 pos) {vec2 offset=mod(mod(mod(pixel_coord_upper,pattern_size)*256.0,pattern_size)*256.0+pixel_coord_lower,pattern_size);return (tile_units_to_pixels*pos+offset)/pattern_size;}\"),qe=vn(\"uniform vec4 u_color;uniform float u_opacity;void main() {gl_FragColor=u_color*u_opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}\"),Ge=vn(\"uniform vec2 u_pattern_tl_a;uniform vec2 u_pattern_br_a;uniform vec2 u_pattern_tl_b;uniform vec2 u_pattern_br_b;uniform vec2 u_texsize;uniform float u_mix;uniform float u_opacity;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;void main() {vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(u_pattern_tl_a/u_texsize,u_pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(u_pattern_tl_b/u_texsize,u_pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);gl_FragColor=mix(color1,color2,u_mix)*u_opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_pattern_size_a;uniform vec2 u_pattern_size_b;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_scale_a;uniform float u_scale_b;uniform float u_tile_units_to_pixels;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_a*u_pattern_size_a,u_tile_units_to_pixels,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_b*u_pattern_size_b,u_tile_units_to_pixels,a_pos);}\"),Xe=vn(\"varying vec3 v_data;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define mediump float radius\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define highp vec4 stroke_color\\n#pragma mapbox: define mediump float stroke_width\\n#pragma mapbox: define lowp float stroke_opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize mediump float radius\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize highp vec4 stroke_color\\n#pragma mapbox: initialize mediump float stroke_width\\n#pragma mapbox: initialize lowp float stroke_opacity\\nvec2 extrude=v_data.xy;float extrude_length=length(extrude);lowp float antialiasblur=v_data.z;float antialiased_blur=-max(blur,antialiasblur);float opacity_t=smoothstep(0.0,antialiased_blur,extrude_length-1.0);float color_t=stroke_width < 0.01 ? 0.0 : smoothstep(antialiased_blur,0.0,extrude_length-radius/(radius+stroke_width));gl_FragColor=opacity_t*mix(color*opacity,stroke_color*stroke_opacity,color_t);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform bool u_scale_with_map;uniform bool u_pitch_with_map;uniform vec2 u_extrude_scale;uniform lowp float u_device_pixel_ratio;uniform highp float u_camera_to_center_distance;attribute vec2 a_pos;varying vec3 v_data;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define mediump float radius\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define highp vec4 stroke_color\\n#pragma mapbox: define mediump float stroke_width\\n#pragma mapbox: define lowp float stroke_opacity\\nvoid main(void) {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize mediump float radius\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize highp vec4 stroke_color\\n#pragma mapbox: initialize mediump float stroke_width\\n#pragma mapbox: initialize lowp float stroke_opacity\\nvec2 extrude=vec2(mod(a_pos,2.0)*2.0-1.0);vec2 circle_center=floor(a_pos*0.5);if (u_pitch_with_map) {vec2 corner_position=circle_center;if (u_scale_with_map) {corner_position+=extrude*(radius+stroke_width)*u_extrude_scale;} else {vec4 projected_center=u_matrix*vec4(circle_center,0,1);corner_position+=extrude*(radius+stroke_width)*u_extrude_scale*(projected_center.w/u_camera_to_center_distance);}gl_Position=u_matrix*vec4(corner_position,0,1);} else {gl_Position=u_matrix*vec4(circle_center,0,1);if (u_scale_with_map) {gl_Position.xy+=extrude*(radius+stroke_width)*u_extrude_scale*u_camera_to_center_distance;} else {gl_Position.xy+=extrude*(radius+stroke_width)*u_extrude_scale*gl_Position.w;}}lowp float antialiasblur=1.0/u_device_pixel_ratio/(radius+stroke_width);v_data=vec3(extrude.x,extrude.y,antialiasblur);}\"),Ze=vn(\"void main() {gl_FragColor=vec4(1.0);}\",\"attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}\"),Je=vn(\"uniform highp float u_intensity;varying vec2 v_extrude;\\n#pragma mapbox: define highp float weight\\n#define GAUSS_COEF 0.3989422804014327\\nvoid main() {\\n#pragma mapbox: initialize highp float weight\\nfloat d=-0.5*3.0*3.0*dot(v_extrude,v_extrude);float val=weight*u_intensity*GAUSS_COEF*exp(d);gl_FragColor=vec4(val,1.0,1.0,1.0);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform float u_extrude_scale;uniform float u_opacity;uniform float u_intensity;attribute vec2 a_pos;varying vec2 v_extrude;\\n#pragma mapbox: define highp float weight\\n#pragma mapbox: define mediump float radius\\nconst highp float ZERO=1.0/255.0/16.0;\\n#define GAUSS_COEF 0.3989422804014327\\nvoid main(void) {\\n#pragma mapbox: initialize highp float weight\\n#pragma mapbox: initialize mediump float radius\\nvec2 unscaled_extrude=vec2(mod(a_pos,2.0)*2.0-1.0);float S=sqrt(-2.0*log(ZERO/weight/u_intensity/GAUSS_COEF))/3.0;v_extrude=S*unscaled_extrude;vec2 extrude=v_extrude*radius*u_extrude_scale;vec4 pos=vec4(floor(a_pos*0.5)+extrude,0,1);gl_Position=u_matrix*pos;}\"),Ke=vn(\"uniform sampler2D u_image;uniform sampler2D u_color_ramp;uniform float u_opacity;varying vec2 v_pos;void main() {float t=texture2D(u_image,v_pos).r;vec4 color=texture2D(u_color_ramp,vec2(t,0.5));gl_FragColor=color*u_opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(0.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_world;attribute vec2 a_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos*u_world,0,1);v_pos.x=a_pos.x;v_pos.y=1.0-a_pos.y;}\"),$e=vn(\"varying float v_placed;varying float v_notUsed;void main() {float alpha=0.5;gl_FragColor=vec4(1.0,0.0,0.0,1.0)*alpha;if (v_placed > 0.5) {gl_FragColor=vec4(0.0,0.0,1.0,0.5)*alpha;}if (v_notUsed > 0.5) {gl_FragColor*=.1;}}\",\"attribute vec2 a_pos;attribute vec2 a_anchor_pos;attribute vec2 a_extrude;attribute vec2 a_placed;attribute vec2 a_shift;uniform mat4 u_matrix;uniform vec2 u_extrude_scale;uniform float u_camera_to_center_distance;varying float v_placed;varying float v_notUsed;void main() {vec4 projectedPoint=u_matrix*vec4(a_anchor_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);gl_Position=u_matrix*vec4(a_pos,0.0,1.0);gl_Position.xy+=(a_extrude+a_shift)*u_extrude_scale*gl_Position.w*collision_perspective_ratio;v_placed=a_placed.x;v_notUsed=a_placed.y;}\"),Qe=vn(\"varying float v_radius;varying vec2 v_extrude;varying float v_perspective_ratio;varying float v_collision;void main() {float alpha=0.5*min(v_perspective_ratio,1.0);float stroke_radius=0.9*max(v_perspective_ratio,1.0);float distance_to_center=length(v_extrude);float distance_to_edge=abs(distance_to_center-v_radius);float opacity_t=smoothstep(-stroke_radius,0.0,-distance_to_edge);vec4 color=mix(vec4(0.0,0.0,1.0,0.5),vec4(1.0,0.0,0.0,1.0),v_collision);gl_FragColor=color*alpha*opacity_t;}\",\"attribute vec2 a_pos;attribute float a_radius;attribute vec2 a_flags;uniform mat4 u_matrix;uniform mat4 u_inv_matrix;uniform vec2 u_viewport_size;uniform float u_camera_to_center_distance;varying float v_radius;varying vec2 v_extrude;varying float v_perspective_ratio;varying float v_collision;vec3 toTilePosition(vec2 screenPos) {vec4 rayStart=u_inv_matrix*vec4(screenPos,-1.0,1.0);vec4 rayEnd  =u_inv_matrix*vec4(screenPos, 1.0,1.0);rayStart.xyz/=rayStart.w;rayEnd.xyz  /=rayEnd.w;highp float t=(0.0-rayStart.z)/(rayEnd.z-rayStart.z);return mix(rayStart.xyz,rayEnd.xyz,t);}void main() {vec2 quadCenterPos=a_pos;float radius=a_radius;float collision=a_flags.x;float vertexIdx=a_flags.y;vec2 quadVertexOffset=vec2(mix(-1.0,1.0,float(vertexIdx >=2.0)),mix(-1.0,1.0,float(vertexIdx >=1.0 && vertexIdx <=2.0)));vec2 quadVertexExtent=quadVertexOffset*radius;vec3 tilePos=toTilePosition(quadCenterPos);vec4 clipPos=u_matrix*vec4(tilePos,1.0);highp float camera_to_anchor_distance=clipPos.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);float padding_factor=1.2;v_radius=radius;v_extrude=quadVertexExtent*padding_factor;v_perspective_ratio=collision_perspective_ratio;v_collision=collision;gl_Position=vec4(clipPos.xyz/clipPos.w,1.0)+vec4(quadVertexExtent*padding_factor/u_viewport_size*2.0,0.0,0.0);}\"),tn=vn(\"uniform highp vec4 u_color;uniform sampler2D u_overlay;varying vec2 v_uv;void main() {vec4 overlay_color=texture2D(u_overlay,v_uv);gl_FragColor=mix(u_color,overlay_color,overlay_color.a);}\",\"attribute vec2 a_pos;varying vec2 v_uv;uniform mat4 u_matrix;uniform float u_overlay_scale;void main() {v_uv=a_pos/8192.0;gl_Position=u_matrix*vec4(a_pos*u_overlay_scale,0,1);}\"),en=vn(\"#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float opacity\\ngl_FragColor=color*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"attribute vec2 a_pos;uniform mat4 u_matrix;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float opacity\\ngl_Position=u_matrix*vec4(a_pos,0,1);}\"),nn=vn(\"varying vec2 v_pos;\\n#pragma mapbox: define highp vec4 outline_color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 outline_color\\n#pragma mapbox: initialize lowp float opacity\\nfloat dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=outline_color*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"attribute vec2 a_pos;uniform mat4 u_matrix;uniform vec2 u_world;varying vec2 v_pos;\\n#pragma mapbox: define highp vec4 outline_color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 outline_color\\n#pragma mapbox: initialize lowp float opacity\\ngl_Position=u_matrix*vec4(a_pos,0,1);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}\"),rn=vn(\"uniform vec2 u_texsize;uniform sampler2D u_image;uniform float u_fade;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);float dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=mix(color1,color2,u_fade)*alpha*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_world;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec3 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;gl_Position=u_matrix*vec4(a_pos,0,1);vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,a_pos);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}\"),an=vn(\"uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);gl_FragColor=mix(color1,color2,u_fade)*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec3 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileZoomRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;gl_Position=u_matrix*vec4(a_pos,0,1);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileZoomRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileZoomRatio,a_pos);}\"),on=vn(\"varying vec4 v_color;void main() {gl_FragColor=v_color;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;uniform float u_vertical_gradient;uniform lowp float u_opacity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec4 v_color;\\n#pragma mapbox: define highp float base\\n#pragma mapbox: define highp float height\\n#pragma mapbox: define highp vec4 color\\nvoid main() {\\n#pragma mapbox: initialize highp float base\\n#pragma mapbox: initialize highp float height\\n#pragma mapbox: initialize highp vec4 color\\nvec3 normal=a_normal_ed.xyz;base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);gl_Position=u_matrix*vec4(a_pos,t > 0.0 ? height : base,1);float colorvalue=color.r*0.2126+color.g*0.7152+color.b*0.0722;v_color=vec4(0.0,0.0,0.0,1.0);vec4 ambientlight=vec4(0.03,0.03,0.03,1.0);color+=ambientlight;float directional=clamp(dot(normal/16384.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((1.0-colorvalue+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_color.r+=clamp(color.r*directional*u_lightcolor.r,mix(0.0,0.3,1.0-u_lightcolor.r),1.0);v_color.g+=clamp(color.g*directional*u_lightcolor.g,mix(0.0,0.3,1.0-u_lightcolor.g),1.0);v_color.b+=clamp(color.b*directional*u_lightcolor.b,mix(0.0,0.3,1.0-u_lightcolor.b),1.0);v_color*=u_opacity;}\"),sn=vn(\"uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\\n#pragma mapbox: define lowp float base\\n#pragma mapbox: define lowp float height\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float base\\n#pragma mapbox: initialize lowp float height\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);vec4 mixedColor=mix(color1,color2,u_fade);gl_FragColor=mixedColor*v_lighting;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_height_factor;uniform vec3 u_scale;uniform float u_vertical_gradient;uniform lowp float u_opacity;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\\n#pragma mapbox: define lowp float base\\n#pragma mapbox: define lowp float height\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float base\\n#pragma mapbox: initialize lowp float height\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec3 normal=a_normal_ed.xyz;float edgedistance=a_normal_ed.w;vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);float z=t > 0.0 ? height : base;gl_Position=u_matrix*vec4(a_pos,z,1);vec2 pos=normal.x==1.0 && normal.y==0.0 && normal.z==16384.0\\n? a_pos\\n: vec2(edgedistance,z*u_height_factor);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,pos);v_lighting=vec4(0.0,0.0,0.0,1.0);float directional=clamp(dot(normal/16383.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((0.5+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_lighting.rgb+=clamp(directional*u_lightcolor,mix(vec3(0.0),vec3(0.3),1.0-u_lightcolor),vec3(1.0));v_lighting*=u_opacity;}\"),ln=vn(\"#ifdef GL_ES\\nprecision highp float;\\n#endif\\nuniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_dimension;uniform float u_zoom;uniform float u_maxzoom;uniform vec4 u_unpack;float getElevation(vec2 coord,float bias) {vec4 data=texture2D(u_image,coord)*255.0;data.a=-1.0;return dot(data,u_unpack)/4.0;}void main() {vec2 epsilon=1.0/u_dimension;float a=getElevation(v_pos+vec2(-epsilon.x,-epsilon.y),0.0);float b=getElevation(v_pos+vec2(0,-epsilon.y),0.0);float c=getElevation(v_pos+vec2(epsilon.x,-epsilon.y),0.0);float d=getElevation(v_pos+vec2(-epsilon.x,0),0.0);float e=getElevation(v_pos,0.0);float f=getElevation(v_pos+vec2(epsilon.x,0),0.0);float g=getElevation(v_pos+vec2(-epsilon.x,epsilon.y),0.0);float h=getElevation(v_pos+vec2(0,epsilon.y),0.0);float i=getElevation(v_pos+vec2(epsilon.x,epsilon.y),0.0);float exaggeration=u_zoom < 2.0 ? 0.4 : u_zoom < 4.5 ? 0.35 : 0.3;vec2 deriv=vec2((c+f+f+i)-(a+d+d+g),(g+h+h+i)-(a+b+b+c))/ pow(2.0,(u_zoom-u_maxzoom)*exaggeration+19.2562-u_zoom);gl_FragColor=clamp(vec4(deriv.x/2.0+0.5,deriv.y/2.0+0.5,1.0,1.0),0.0,1.0);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_dimension;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);highp vec2 epsilon=1.0/u_dimension;float scale=(u_dimension.x-2.0)/u_dimension.x;v_pos=(a_texture_pos/8192.0)*scale+epsilon;}\"),cn=vn(\"uniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_latrange;uniform vec2 u_light;uniform vec4 u_shadow;uniform vec4 u_highlight;uniform vec4 u_accent;\\n#define PI 3.141592653589793\\nvoid main() {vec4 pixel=texture2D(u_image,v_pos);vec2 deriv=((pixel.rg*2.0)-1.0);float scaleFactor=cos(radians((u_latrange[0]-u_latrange[1])*(1.0-v_pos.y)+u_latrange[1]));float slope=atan(1.25*length(deriv)/scaleFactor);float aspect=deriv.x !=0.0 ? atan(deriv.y,-deriv.x) : PI/2.0*(deriv.y > 0.0 ? 1.0 :-1.0);float intensity=u_light.x;float azimuth=u_light.y+PI;float base=1.875-intensity*1.75;float maxValue=0.5*PI;float scaledSlope=intensity !=0.5 ? ((pow(base,slope)-1.0)/(pow(base,maxValue)-1.0))*maxValue : slope;float accent=cos(scaledSlope);vec4 accent_color=(1.0-accent)*u_accent*clamp(intensity*2.0,0.0,1.0);float shade=abs(mod((aspect+azimuth)/PI+0.5,2.0)-1.0);vec4 shade_color=mix(u_shadow,u_highlight,shade)*sin(scaledSlope)*clamp(intensity*2.0,0.0,1.0);gl_FragColor=accent_color*(1.0-shade_color.a)+shade_color;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos=a_texture_pos/8192.0;}\"),un=vn(\"uniform lowp float u_device_pixel_ratio;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);gl_FragColor=color*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"\\n#define scale 0.015873016\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform vec2 u_units_to_pixels;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_linesofar;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float width\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float width\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;v_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*2.0;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}\"),hn=vn(\"uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;varying highp float v_lineprogress;\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);vec4 color=texture2D(u_image,vec2(v_lineprogress,0.5));gl_FragColor=color*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"\\n#define MAX_LINE_DISTANCE 32767.0\\n#define scale 0.015873016\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_lineprogress;\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float width\\nvoid main() {\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float width\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;v_lineprogress=(floor(a_data.z/4.0)+a_data.w*64.0)*2.0/MAX_LINE_DISTANCE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}\"),dn=vn(\"uniform lowp float u_device_pixel_ratio;uniform vec2 u_texsize;uniform float u_fade;uniform mediump vec3 u_scale;uniform sampler2D u_image;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;varying float v_width;\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileZoomRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;vec2 pattern_size_a=vec2(display_size_a.x*fromScale/tileZoomRatio,display_size_a.y);vec2 pattern_size_b=vec2(display_size_b.x*toScale/tileZoomRatio,display_size_b.y);float aspect_a=display_size_a.y/v_width;float aspect_b=display_size_b.y/v_width;float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float x_a=mod(v_linesofar/pattern_size_a.x*aspect_a,1.0);float x_b=mod(v_linesofar/pattern_size_b.x*aspect_b,1.0);float y=0.5*v_normal.y+0.5;vec2 texel_size=1.0/u_texsize;vec2 pos_a=mix(pattern_tl_a*texel_size-texel_size,pattern_br_a*texel_size+texel_size,vec2(x_a,y));vec2 pos_b=mix(pattern_tl_b*texel_size-texel_size,pattern_br_b*texel_size+texel_size,vec2(x_b,y));vec4 color=mix(texture2D(u_image,pos_a),texture2D(u_image,pos_b),u_fade);gl_FragColor=color*alpha*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"\\n#define scale 0.015873016\\n#define LINE_DISTANCE_SCALE 2.0\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform vec2 u_units_to_pixels;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;varying float v_width;\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define mediump float width\\n#pragma mapbox: define lowp float floorwidth\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize mediump float width\\n#pragma mapbox: initialize lowp float floorwidth\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_linesofar=a_linesofar;v_width2=vec2(outset,inset);v_width=floorwidth;}\"),fn=vn(\"uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;uniform float u_sdfgamma;uniform float u_mix;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float width\\n#pragma mapbox: define lowp float floorwidth\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float width\\n#pragma mapbox: initialize lowp float floorwidth\\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float sdfdist_a=texture2D(u_image,v_tex_a).a;float sdfdist_b=texture2D(u_image,v_tex_b).a;float sdfdist=mix(sdfdist_a,sdfdist_b,u_mix);alpha*=smoothstep(0.5-u_sdfgamma/floorwidth,0.5+u_sdfgamma/floorwidth,sdfdist);gl_FragColor=color*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"\\n#define scale 0.015873016\\n#define LINE_DISTANCE_SCALE 2.0\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_patternscale_a;uniform float u_tex_y_a;uniform vec2 u_patternscale_b;uniform float u_tex_y_b;uniform vec2 u_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float width\\n#pragma mapbox: define lowp float floorwidth\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float width\\n#pragma mapbox: initialize lowp float floorwidth\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_tex_a=vec2(a_linesofar*u_patternscale_a.x/floorwidth,normal.y*u_patternscale_a.y+u_tex_y_a);v_tex_b=vec2(a_linesofar*u_patternscale_b.x/floorwidth,normal.y*u_patternscale_b.y+u_tex_y_b);v_width2=vec2(outset,inset);}\"),pn=vn(\"uniform float u_fade_t;uniform float u_opacity;uniform sampler2D u_image0;uniform sampler2D u_image1;varying vec2 v_pos0;varying vec2 v_pos1;uniform float u_brightness_low;uniform float u_brightness_high;uniform float u_saturation_factor;uniform float u_contrast_factor;uniform vec3 u_spin_weights;void main() {vec4 color0=texture2D(u_image0,v_pos0);vec4 color1=texture2D(u_image1,v_pos1);if (color0.a > 0.0) {color0.rgb=color0.rgb/color0.a;}if (color1.a > 0.0) {color1.rgb=color1.rgb/color1.a;}vec4 color=mix(color0,color1,u_fade_t);color.a*=u_opacity;vec3 rgb=color.rgb;rgb=vec3(dot(rgb,u_spin_weights.xyz),dot(rgb,u_spin_weights.zxy),dot(rgb,u_spin_weights.yzx));float average=(color.r+color.g+color.b)/3.0;rgb+=(average-rgb)*u_saturation_factor;rgb=(rgb-0.5)*u_contrast_factor+0.5;vec3 u_high_vec=vec3(u_brightness_low,u_brightness_low,u_brightness_low);vec3 u_low_vec=vec3(u_brightness_high,u_brightness_high,u_brightness_high);gl_FragColor=vec4(mix(u_high_vec,u_low_vec,rgb)*color.a,color.a);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_tl_parent;uniform float u_scale_parent;uniform float u_buffer_scale;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos0;varying vec2 v_pos1;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos0=(((a_texture_pos/8192.0)-0.5)/u_buffer_scale )+0.5;v_pos1=(v_pos0*u_scale_parent)+u_tl_parent;}\"),mn=vn(\"uniform sampler2D u_texture;varying vec2 v_tex;varying float v_fade_opacity;\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\nlowp float alpha=opacity*v_fade_opacity;gl_FragColor=texture2D(u_texture,v_tex)*alpha;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec4 a_pixeloffset;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform highp float u_camera_to_center_distance;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform float u_fade_change;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform vec2 u_texsize;varying vec2 v_tex;varying float v_fade_opacity;\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);vec2 a_pxoffset=a_pixeloffset.xy;vec2 a_minFontScale=a_pixeloffset.zw/256.0;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*max(a_minFontScale,fontScale)+a_pxoffset/16.0),0.0,1.0);v_tex=a_tex/u_texsize;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;v_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));}\"),gn=vn(\"#define SDF_PX 8.0\\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;uniform bool u_is_text;varying vec2 v_data0;varying vec3 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nfloat EDGE_GAMMA=0.105/u_device_pixel_ratio;vec2 tex=v_data0.xy;float gamma_scale=v_data1.x;float size=v_data1.y;float fade_opacity=v_data1[2];float fontScale=u_is_text ? size/24.0 : size;lowp vec4 color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;if (u_is_halo) {color=halo_color;gamma=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist=texture2D(u_texture,tex).a;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor=color*(alpha*opacity*fade_opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec4 a_pixeloffset;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;varying vec2 v_data0;varying vec3 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);vec2 a_pxoffset=a_pixeloffset.xy;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale+a_pxoffset),0.0,1.0);float gamma_scale=gl_Position.w;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));v_data0=a_tex/u_texsize;v_data1=vec3(gamma_scale,size,interpolated_fade_opacity);}\"),yn=vn(\"#define SDF_PX 8.0\\n#define SDF 1.0\\n#define ICON 0.0\\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform sampler2D u_texture_icon;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;varying vec4 v_data0;varying vec4 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nfloat fade_opacity=v_data1[2];if (v_data1.w==ICON) {vec2 tex_icon=v_data0.zw;lowp float alpha=opacity*fade_opacity;gl_FragColor=texture2D(u_texture_icon,tex_icon)*alpha;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\nreturn;}vec2 tex=v_data0.xy;float EDGE_GAMMA=0.105/u_device_pixel_ratio;float gamma_scale=v_data1.x;float size=v_data1.y;float fontScale=size/24.0;lowp vec4 color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;if (u_is_halo) {color=halo_color;gamma=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist=texture2D(u_texture,tex).a;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor=color*(alpha*opacity*fade_opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;uniform vec2 u_texsize_icon;varying vec4 v_data0;varying vec4 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);float is_sdf=a_size[0]-2.0*a_size_min;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=size/24.0;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale),0.0,1.0);float gamma_scale=gl_Position.w;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));v_data0.xy=a_tex/u_texsize;v_data0.zw=a_tex/u_texsize_icon;v_data1=vec4(gamma_scale,size,interpolated_fade_opacity,is_sdf);}\");function vn(t,e){var n=/#pragma mapbox: ([\\w]+) ([\\w]+) ([\\w]+) ([\\w]+)/g,r={};return{fragmentSource:t=t.replace(n,(function(t,e,n,i,a){return r[a]=!0,\"define\"===e?\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\nvarying \"+n+\" \"+i+\" \"+a+\";\\n#else\\nuniform \"+n+\" \"+i+\" u_\"+a+\";\\n#endif\\n\":\"\\n#ifdef HAS_UNIFORM_u_\"+a+\"\\n    \"+n+\" \"+i+\" \"+a+\" = u_\"+a+\";\\n#endif\\n\"})),vertexSource:e=e.replace(n,(function(t,e,n,i,a){var o=\"float\"===i?\"vec2\":\"vec4\",s=a.match(/color/)?\"color\":o;return r[a]?\"define\"===e?\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\nuniform lowp float u_\"+a+\"_t;\\nattribute \"+n+\" \"+o+\" a_\"+a+\";\\nvarying \"+n+\" \"+i+\" \"+a+\";\\n#else\\nuniform \"+n+\" \"+i+\" u_\"+a+\";\\n#endif\\n\":\"vec4\"===s?\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\n    \"+a+\" = a_\"+a+\";\\n#else\\n    \"+n+\" \"+i+\" \"+a+\" = u_\"+a+\";\\n#endif\\n\":\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\n    \"+a+\" = unpack_mix_\"+s+\"(a_\"+a+\", u_\"+a+\"_t);\\n#else\\n    \"+n+\" \"+i+\" \"+a+\" = u_\"+a+\";\\n#endif\\n\":\"define\"===e?\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\nuniform lowp float u_\"+a+\"_t;\\nattribute \"+n+\" \"+o+\" a_\"+a+\";\\n#else\\nuniform \"+n+\" \"+i+\" u_\"+a+\";\\n#endif\\n\":\"vec4\"===s?\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\n    \"+n+\" \"+i+\" \"+a+\" = a_\"+a+\";\\n#else\\n    \"+n+\" \"+i+\" \"+a+\" = u_\"+a+\";\\n#endif\\n\":\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\n    \"+n+\" \"+i+\" \"+a+\" = unpack_mix_\"+s+\"(a_\"+a+\", u_\"+a+\"_t);\\n#else\\n    \"+n+\" \"+i+\" \"+a+\" = u_\"+a+\";\\n#endif\\n\"}))}}var _n=Object.freeze({__proto__:null,prelude:We,background:qe,backgroundPattern:Ge,circle:Xe,clippingMask:Ze,heatmap:Je,heatmapTexture:Ke,collisionBox:$e,collisionCircle:Qe,debug:tn,fill:en,fillOutline:nn,fillOutlinePattern:rn,fillPattern:an,fillExtrusion:on,fillExtrusionPattern:sn,hillshadePrepare:ln,hillshade:cn,line:un,lineGradient:hn,linePattern:dn,lineSDF:fn,raster:pn,symbolIcon:mn,symbolSDF:gn,symbolTextAndIcon:yn}),bn=function(){this.boundProgram=null,this.boundLayoutVertexBuffer=null,this.boundPaintVertexBuffers=[],this.boundIndexBuffer=null,this.boundVertexOffset=null,this.boundDynamicVertexBuffer=null,this.vao=null};bn.prototype.bind=function(t,e,n,r,i,a,o,s){this.context=t;for(var l=this.boundPaintVertexBuffers.length!==r.length,c=0;!l&&c<r.length;c++)this.boundPaintVertexBuffers[c]!==r[c]&&(l=!0);t.extVertexArrayObject&&this.vao&&this.boundProgram===e&&this.boundLayoutVertexBuffer===n&&!l&&this.boundIndexBuffer===i&&this.boundVertexOffset===a&&this.boundDynamicVertexBuffer===o&&this.boundDynamicVertexBuffer2===s?(t.bindVertexArrayOES.set(this.vao),o&&o.bind(),i&&i.dynamicDraw&&i.bind(),s&&s.bind()):this.freshBind(e,n,r,i,a,o,s)},bn.prototype.freshBind=function(t,e,n,r,i,a,o){var s,l=t.numAttributes,c=this.context,u=c.gl;if(c.extVertexArrayObject)this.vao&&this.destroy(),this.vao=c.extVertexArrayObject.createVertexArrayOES(),c.bindVertexArrayOES.set(this.vao),s=0,this.boundProgram=t,this.boundLayoutVertexBuffer=e,this.boundPaintVertexBuffers=n,this.boundIndexBuffer=r,this.boundVertexOffset=i,this.boundDynamicVertexBuffer=a,this.boundDynamicVertexBuffer2=o;else{s=c.currentNumAttributes||0;for(var h=l;h<s;h++)u.disableVertexAttribArray(h)}e.enableAttributes(u,t);for(var d=0,f=n;d<f.length;d+=1)f[d].enableAttributes(u,t);a&&a.enableAttributes(u,t),o&&o.enableAttributes(u,t),e.bind(),e.setVertexAttribPointers(u,t,i);for(var p=0,m=n;p<m.length;p+=1){var g=m[p];g.bind(),g.setVertexAttribPointers(u,t,i)}a&&(a.bind(),a.setVertexAttribPointers(u,t,i)),r&&r.bind(),o&&(o.bind(),o.setVertexAttribPointers(u,t,i)),c.currentNumAttributes=l},bn.prototype.destroy=function(){this.vao&&(this.context.extVertexArrayObject.deleteVertexArrayOES(this.vao),this.vao=null)};var xn=function(t,e,n,r,i){var a=t.gl;this.program=a.createProgram();var o=n?n.defines():[];i&&o.push(\"#define OVERDRAW_INSPECTOR;\");var s=o.concat(We.fragmentSource,e.fragmentSource).join(\"\\n\"),l=o.concat(We.vertexSource,e.vertexSource).join(\"\\n\"),c=a.createShader(a.FRAGMENT_SHADER);if(a.isContextLost())this.failedToCreate=!0;else{a.shaderSource(c,s),a.compileShader(c),a.attachShader(this.program,c);var u=a.createShader(a.VERTEX_SHADER);if(a.isContextLost())this.failedToCreate=!0;else{a.shaderSource(u,l),a.compileShader(u),a.attachShader(this.program,u);for(var h=n?n.layoutAttributes:[],d=0;d<h.length;d++)a.bindAttribLocation(this.program,d,h[d].name);a.linkProgram(this.program),a.deleteShader(u),a.deleteShader(c),this.numAttributes=a.getProgramParameter(this.program,a.ACTIVE_ATTRIBUTES),this.attributes={};for(var f={},p=0;p<this.numAttributes;p++){var m=a.getActiveAttrib(this.program,p);m&&(this.attributes[m.name]=a.getAttribLocation(this.program,m.name))}for(var g=a.getProgramParameter(this.program,a.ACTIVE_UNIFORMS),y=0;y<g;y++){var v=a.getActiveUniform(this.program,y);v&&(f[v.name]=a.getUniformLocation(this.program,v.name))}this.fixedUniforms=r(t,f),this.binderUniforms=n?n.getUniforms(t,f):[]}}};function wn(t,e,n){var r=1/de(n,1,e.transform.tileZoom),i=Math.pow(2,n.tileID.overscaledZ),a=n.tileSize*Math.pow(2,e.transform.tileZoom)/i,o=a*(n.tileID.canonical.x+n.tileID.wrap*i),s=a*n.tileID.canonical.y;return{u_image:0,u_texsize:n.imageAtlasTexture.size,u_scale:[r,t.fromScale,t.toScale],u_fade:t.t,u_pixel_coord_upper:[o>>16,s>>16],u_pixel_coord_lower:[65535&o,65535&s]}}xn.prototype.draw=function(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m){var g,y=t.gl;if(!this.failedToCreate){for(var v in t.program.set(this.program),t.setDepthMode(n),t.setStencilMode(r),t.setColorMode(i),t.setCullFace(a),this.fixedUniforms)this.fixedUniforms[v].set(o[v]);f&&f.setUniforms(t,this.binderUniforms,h,{zoom:d});for(var _=(g={},g[y.LINES]=2,g[y.TRIANGLES]=3,g[y.LINE_STRIP]=1,g)[e],b=0,x=u.get();b<x.length;b+=1){var w=x[b],k=w.vaos||(w.vaos={});(k[s]||(k[s]=new bn)).bind(t,this,l,f?f.getPaintVertexBuffers():[],c,w.vertexOffset,p,m),y.drawElements(e,w.primitiveLength*_,y.UNSIGNED_SHORT,w.primitiveOffset*_*2)}}};var kn=function(e,n,r,i){var a=n.style.light,o=a.properties.get(\"position\"),s=[o.x,o.y,o.z],l=t.create$1();\"viewport\"===a.properties.get(\"anchor\")&&t.fromRotation(l,-n.transform.angle),t.transformMat3(s,s,l);var c=a.properties.get(\"color\");return{u_matrix:e,u_lightpos:s,u_lightintensity:a.properties.get(\"intensity\"),u_lightcolor:[c.r,c.g,c.b],u_vertical_gradient:+r,u_opacity:i}},Mn=function(e,n,r,i,a,o,s){return t.extend(kn(e,n,r,i),wn(o,n,s),{u_height_factor:-Math.pow(2,a.overscaledZ)/s.tileSize/8})},Tn=function(t){return{u_matrix:t}},Sn=function(e,n,r,i){return t.extend(Tn(e),wn(r,n,i))},An=function(t,e){return{u_matrix:t,u_world:e}},Ln=function(e,n,r,i,a){return t.extend(Sn(e,n,r,i),{u_world:a})},Cn=function(e,n,r,i){var a,o,s=e.transform;if(\"map\"===i.paint.get(\"circle-pitch-alignment\")){var l=de(r,1,s.zoom);a=!0,o=[l,l]}else a=!1,o=s.pixelsToGLUnits;return{u_camera_to_center_distance:s.cameraToCenterDistance,u_scale_with_map:+(\"map\"===i.paint.get(\"circle-pitch-scale\")),u_matrix:e.translatePosMatrix(n.posMatrix,r,i.paint.get(\"circle-translate\"),i.paint.get(\"circle-translate-anchor\")),u_pitch_with_map:+a,u_device_pixel_ratio:t.browser.devicePixelRatio,u_extrude_scale:o}},En=function(t,e,n){var r=de(n,1,e.zoom),i=Math.pow(2,e.zoom-n.tileID.overscaledZ),a=n.tileID.overscaleFactor();return{u_matrix:t,u_camera_to_center_distance:e.cameraToCenterDistance,u_pixels_to_tile_units:r,u_extrude_scale:[e.pixelsToGLUnits[0]/(r*i),e.pixelsToGLUnits[1]/(r*i)],u_overscale_factor:a}},On=function(t,e,n){return{u_matrix:t,u_inv_matrix:e,u_camera_to_center_distance:n.cameraToCenterDistance,u_viewport_size:[n.width,n.height]}},Dn=function(t,e,n){return void 0===n&&(n=1),{u_matrix:t,u_color:e,u_overlay:0,u_overlay_scale:n}},In=function(t){return{u_matrix:t}},Pn=function(t,e,n,r){return{u_matrix:t,u_extrude_scale:de(e,1,n),u_intensity:r}},Rn=function(e,n,r){var i=e.transform;return{u_matrix:Bn(e,n,r),u_ratio:1/de(n,1,i.zoom),u_device_pixel_ratio:t.browser.devicePixelRatio,u_units_to_pixels:[1/i.pixelsToGLUnits[0],1/i.pixelsToGLUnits[1]]}},zn=function(e,n,r){return t.extend(Rn(e,n,r),{u_image:0})},jn=function(e,n,r,i){var a=e.transform,o=Nn(n,a);return{u_matrix:Bn(e,n,r),u_texsize:n.imageAtlasTexture.size,u_ratio:1/de(n,1,a.zoom),u_device_pixel_ratio:t.browser.devicePixelRatio,u_image:0,u_scale:[o,i.fromScale,i.toScale],u_fade:i.t,u_units_to_pixels:[1/a.pixelsToGLUnits[0],1/a.pixelsToGLUnits[1]]}},Fn=function(e,n,r,i,a){var o=e.lineAtlas,s=Nn(n,e.transform),l=\"round\"===r.layout.get(\"line-cap\"),c=o.getDash(i.from,l),u=o.getDash(i.to,l),h=c.width*a.fromScale,d=u.width*a.toScale;return t.extend(Rn(e,n,r),{u_patternscale_a:[s/h,-c.height/2],u_patternscale_b:[s/d,-u.height/2],u_sdfgamma:o.width/(256*Math.min(h,d)*t.browser.devicePixelRatio)/2,u_image:0,u_tex_y_a:c.y,u_tex_y_b:u.y,u_mix:a.t})};function Nn(t,e){return 1/de(t,1,e.tileZoom)}function Bn(t,e,n){return t.translatePosMatrix(e.tileID.posMatrix,e,n.paint.get(\"line-translate\"),n.paint.get(\"line-translate-anchor\"))}var Yn=function(t,e,n,r,i){return{u_matrix:t,u_tl_parent:e,u_scale_parent:n,u_buffer_scale:1,u_fade_t:r.mix,u_opacity:r.opacity*i.paint.get(\"raster-opacity\"),u_image0:0,u_image1:1,u_brightness_low:i.paint.get(\"raster-brightness-min\"),u_brightness_high:i.paint.get(\"raster-brightness-max\"),u_saturation_factor:(o=i.paint.get(\"raster-saturation\"),o>0?1-1/(1.001-o):-o),u_contrast_factor:(a=i.paint.get(\"raster-contrast\"),a>0?1/(1-a):1+a),u_spin_weights:Hn(i.paint.get(\"raster-hue-rotate\"))};var a,o};function Hn(t){t*=Math.PI/180;var e=Math.sin(t),n=Math.cos(t);return[(2*n+1)/3,(-Math.sqrt(3)*e-n+1)/3,(Math.sqrt(3)*e-n+1)/3]}var Vn,Un=function(t,e,n,r,i,a,o,s,l,c){var u=i.transform;return{u_is_size_zoom_constant:+(\"constant\"===t||\"source\"===t),u_is_size_feature_constant:+(\"constant\"===t||\"camera\"===t),u_size_t:e?e.uSizeT:0,u_size:e?e.uSize:0,u_camera_to_center_distance:u.cameraToCenterDistance,u_pitch:u.pitch/360*2*Math.PI,u_rotate_symbol:+n,u_aspect_ratio:u.width/u.height,u_fade_change:i.options.fadeDuration?i.symbolFadeChange:1,u_matrix:a,u_label_plane_matrix:o,u_coord_matrix:s,u_is_text:+l,u_pitch_with_map:+r,u_texsize:c,u_texture:0}},Wn=function(e,n,r,i,a,o,s,l,c,u,h){var d=a.transform;return t.extend(Un(e,n,r,i,a,o,s,l,c,u),{u_gamma_scale:i?Math.cos(d._pitch)*d.cameraToCenterDistance:1,u_device_pixel_ratio:t.browser.devicePixelRatio,u_is_halo:+h})},qn=function(e,n,r,i,a,o,s,l,c,u){return t.extend(Wn(e,n,r,i,a,o,s,l,!0,c,!0),{u_texsize_icon:u,u_texture_icon:1})},Gn=function(t,e,n){return{u_matrix:t,u_opacity:e,u_color:n}},Xn=function(e,n,r,i,a,o){return t.extend(function(t,e,n,r){var i=n.imageManager.getPattern(t.from.toString()),a=n.imageManager.getPattern(t.to.toString()),o=n.imageManager.getPixelSize(),s=o.width,l=o.height,c=Math.pow(2,r.tileID.overscaledZ),u=r.tileSize*Math.pow(2,n.transform.tileZoom)/c,h=u*(r.tileID.canonical.x+r.tileID.wrap*c),d=u*r.tileID.canonical.y;return{u_image:0,u_pattern_tl_a:i.tl,u_pattern_br_a:i.br,u_pattern_tl_b:a.tl,u_pattern_br_b:a.br,u_texsize:[s,l],u_mix:e.t,u_pattern_size_a:i.displaySize,u_pattern_size_b:a.displaySize,u_scale_a:e.fromScale,u_scale_b:e.toScale,u_tile_units_to_pixels:1/de(r,1,n.transform.tileZoom),u_pixel_coord_upper:[h>>16,d>>16],u_pixel_coord_lower:[65535&h,65535&d]}}(i,o,r,a),{u_matrix:e,u_opacity:n})},Zn={fillExtrusion:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_lightpos:new t.Uniform3f(e,n.u_lightpos),u_lightintensity:new t.Uniform1f(e,n.u_lightintensity),u_lightcolor:new t.Uniform3f(e,n.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,n.u_vertical_gradient),u_opacity:new t.Uniform1f(e,n.u_opacity)}},fillExtrusionPattern:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_lightpos:new t.Uniform3f(e,n.u_lightpos),u_lightintensity:new t.Uniform1f(e,n.u_lightintensity),u_lightcolor:new t.Uniform3f(e,n.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,n.u_vertical_gradient),u_height_factor:new t.Uniform1f(e,n.u_height_factor),u_image:new t.Uniform1i(e,n.u_image),u_texsize:new t.Uniform2f(e,n.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,n.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,n.u_pixel_coord_lower),u_scale:new t.Uniform3f(e,n.u_scale),u_fade:new t.Uniform1f(e,n.u_fade),u_opacity:new t.Uniform1f(e,n.u_opacity)}},fill:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix)}},fillPattern:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_image:new t.Uniform1i(e,n.u_image),u_texsize:new t.Uniform2f(e,n.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,n.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,n.u_pixel_coord_lower),u_scale:new t.Uniform3f(e,n.u_scale),u_fade:new t.Uniform1f(e,n.u_fade)}},fillOutline:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_world:new t.Uniform2f(e,n.u_world)}},fillOutlinePattern:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_world:new t.Uniform2f(e,n.u_world),u_image:new t.Uniform1i(e,n.u_image),u_texsize:new t.Uniform2f(e,n.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,n.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,n.u_pixel_coord_lower),u_scale:new t.Uniform3f(e,n.u_scale),u_fade:new t.Uniform1f(e,n.u_fade)}},circle:function(e,n){return{u_camera_to_center_distance:new t.Uniform1f(e,n.u_camera_to_center_distance),u_scale_with_map:new t.Uniform1i(e,n.u_scale_with_map),u_pitch_with_map:new t.Uniform1i(e,n.u_pitch_with_map),u_extrude_scale:new t.Uniform2f(e,n.u_extrude_scale),u_device_pixel_ratio:new t.Uniform1f(e,n.u_device_pixel_ratio),u_matrix:new t.UniformMatrix4f(e,n.u_matrix)}},collisionBox:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_camera_to_center_distance:new t.Uniform1f(e,n.u_camera_to_center_distance),u_pixels_to_tile_units:new t.Uniform1f(e,n.u_pixels_to_tile_units),u_extrude_scale:new t.Uniform2f(e,n.u_extrude_scale),u_overscale_factor:new t.Uniform1f(e,n.u_overscale_factor)}},collisionCircle:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_inv_matrix:new t.UniformMatrix4f(e,n.u_inv_matrix),u_camera_to_center_distance:new t.Uniform1f(e,n.u_camera_to_center_distance),u_viewport_size:new t.Uniform2f(e,n.u_viewport_size)}},debug:function(e,n){return{u_color:new t.UniformColor(e,n.u_color),u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_overlay:new t.Uniform1i(e,n.u_overlay),u_overlay_scale:new t.Uniform1f(e,n.u_overlay_scale)}},clippingMask:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix)}},heatmap:function(e,n){return{u_extrude_scale:new t.Uniform1f(e,n.u_extrude_scale),u_intensity:new t.Uniform1f(e,n.u_intensity),u_matrix:new t.UniformMatrix4f(e,n.u_matrix)}},heatmapTexture:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_world:new t.Uniform2f(e,n.u_world),u_image:new t.Uniform1i(e,n.u_image),u_color_ramp:new t.Uniform1i(e,n.u_color_ramp),u_opacity:new t.Uniform1f(e,n.u_opacity)}},hillshade:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_image:new t.Uniform1i(e,n.u_image),u_latrange:new t.Uniform2f(e,n.u_latrange),u_light:new t.Uniform2f(e,n.u_light),u_shadow:new t.UniformColor(e,n.u_shadow),u_highlight:new t.UniformColor(e,n.u_highlight),u_accent:new t.UniformColor(e,n.u_accent)}},hillshadePrepare:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_image:new t.Uniform1i(e,n.u_image),u_dimension:new t.Uniform2f(e,n.u_dimension),u_zoom:new t.Uniform1f(e,n.u_zoom),u_maxzoom:new t.Uniform1f(e,n.u_maxzoom),u_unpack:new t.Uniform4f(e,n.u_unpack)}},line:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_ratio:new t.Uniform1f(e,n.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,n.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,n.u_units_to_pixels)}},lineGradient:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_ratio:new t.Uniform1f(e,n.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,n.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,n.u_units_to_pixels),u_image:new t.Uniform1i(e,n.u_image)}},linePattern:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_texsize:new t.Uniform2f(e,n.u_texsize),u_ratio:new t.Uniform1f(e,n.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,n.u_device_pixel_ratio),u_image:new t.Uniform1i(e,n.u_image),u_units_to_pixels:new t.Uniform2f(e,n.u_units_to_pixels),u_scale:new t.Uniform3f(e,n.u_scale),u_fade:new t.Uniform1f(e,n.u_fade)}},lineSDF:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_ratio:new t.Uniform1f(e,n.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,n.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,n.u_units_to_pixels),u_patternscale_a:new t.Uniform2f(e,n.u_patternscale_a),u_patternscale_b:new t.Uniform2f(e,n.u_patternscale_b),u_sdfgamma:new t.Uniform1f(e,n.u_sdfgamma),u_image:new t.Uniform1i(e,n.u_image),u_tex_y_a:new t.Uniform1f(e,n.u_tex_y_a),u_tex_y_b:new t.Uniform1f(e,n.u_tex_y_b),u_mix:new t.Uniform1f(e,n.u_mix)}},raster:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_tl_parent:new t.Uniform2f(e,n.u_tl_parent),u_scale_parent:new t.Uniform1f(e,n.u_scale_parent),u_buffer_scale:new t.Uniform1f(e,n.u_buffer_scale),u_fade_t:new t.Uniform1f(e,n.u_fade_t),u_opacity:new t.Uniform1f(e,n.u_opacity),u_image0:new t.Uniform1i(e,n.u_image0),u_image1:new t.Uniform1i(e,n.u_image1),u_brightness_low:new t.Uniform1f(e,n.u_brightness_low),u_brightness_high:new t.Uniform1f(e,n.u_brightness_high),u_saturation_factor:new t.Uniform1f(e,n.u_saturation_factor),u_contrast_factor:new t.Uniform1f(e,n.u_contrast_factor),u_spin_weights:new t.Uniform3f(e,n.u_spin_weights)}},symbolIcon:function(e,n){return{u_is_size_zoom_constant:new t.Uniform1i(e,n.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,n.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,n.u_size_t),u_size:new t.Uniform1f(e,n.u_size),u_camera_to_center_distance:new t.Uniform1f(e,n.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,n.u_pitch),u_rotate_symbol:new t.Uniform1i(e,n.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,n.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,n.u_fade_change),u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,n.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,n.u_coord_matrix),u_is_text:new t.Uniform1i(e,n.u_is_text),u_pitch_with_map:new t.Uniform1i(e,n.u_pitch_with_map),u_texsize:new t.Uniform2f(e,n.u_texsize),u_texture:new t.Uniform1i(e,n.u_texture)}},symbolSDF:function(e,n){return{u_is_size_zoom_constant:new t.Uniform1i(e,n.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,n.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,n.u_size_t),u_size:new t.Uniform1f(e,n.u_size),u_camera_to_center_distance:new t.Uniform1f(e,n.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,n.u_pitch),u_rotate_symbol:new t.Uniform1i(e,n.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,n.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,n.u_fade_change),u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,n.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,n.u_coord_matrix),u_is_text:new t.Uniform1i(e,n.u_is_text),u_pitch_with_map:new t.Uniform1i(e,n.u_pitch_with_map),u_texsize:new t.Uniform2f(e,n.u_texsize),u_texture:new t.Uniform1i(e,n.u_texture),u_gamma_scale:new t.Uniform1f(e,n.u_gamma_scale),u_device_pixel_ratio:new t.Uniform1f(e,n.u_device_pixel_ratio),u_is_halo:new t.Uniform1i(e,n.u_is_halo)}},symbolTextAndIcon:function(e,n){return{u_is_size_zoom_constant:new t.Uniform1i(e,n.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,n.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,n.u_size_t),u_size:new t.Uniform1f(e,n.u_size),u_camera_to_center_distance:new t.Uniform1f(e,n.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,n.u_pitch),u_rotate_symbol:new t.Uniform1i(e,n.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,n.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,n.u_fade_change),u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,n.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,n.u_coord_matrix),u_is_text:new t.Uniform1i(e,n.u_is_text),u_pitch_with_map:new t.Uniform1i(e,n.u_pitch_with_map),u_texsize:new t.Uniform2f(e,n.u_texsize),u_texsize_icon:new t.Uniform2f(e,n.u_texsize_icon),u_texture:new t.Uniform1i(e,n.u_texture),u_texture_icon:new t.Uniform1i(e,n.u_texture_icon),u_gamma_scale:new t.Uniform1f(e,n.u_gamma_scale),u_device_pixel_ratio:new t.Uniform1f(e,n.u_device_pixel_ratio),u_is_halo:new t.Uniform1i(e,n.u_is_halo)}},background:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_opacity:new t.Uniform1f(e,n.u_opacity),u_color:new t.UniformColor(e,n.u_color)}},backgroundPattern:function(e,n){return{u_matrix:new t.UniformMatrix4f(e,n.u_matrix),u_opacity:new t.Uniform1f(e,n.u_opacity),u_image:new t.Uniform1i(e,n.u_image),u_pattern_tl_a:new t.Uniform2f(e,n.u_pattern_tl_a),u_pattern_br_a:new t.Uniform2f(e,n.u_pattern_br_a),u_pattern_tl_b:new t.Uniform2f(e,n.u_pattern_tl_b),u_pattern_br_b:new t.Uniform2f(e,n.u_pattern_br_b),u_texsize:new t.Uniform2f(e,n.u_texsize),u_mix:new t.Uniform1f(e,n.u_mix),u_pattern_size_a:new t.Uniform2f(e,n.u_pattern_size_a),u_pattern_size_b:new t.Uniform2f(e,n.u_pattern_size_b),u_scale_a:new t.Uniform1f(e,n.u_scale_a),u_scale_b:new t.Uniform1f(e,n.u_scale_b),u_pixel_coord_upper:new t.Uniform2f(e,n.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,n.u_pixel_coord_lower),u_tile_units_to_pixels:new t.Uniform1f(e,n.u_tile_units_to_pixels)}}};function Jn(e,n,r,i,a,o,s){for(var l=e.context,c=l.gl,u=e.useProgram(\"collisionBox\"),h=[],d=0,f=0,p=0;p<i.length;p++){var m=i[p],g=n.getTile(m),y=g.getBucket(r);if(y){var v=m.posMatrix;0===a[0]&&0===a[1]||(v=e.translatePosMatrix(m.posMatrix,g,a,o));var _=s?y.textCollisionBox:y.iconCollisionBox,b=y.collisionCircleArray;if(b.length>0){var x=t.create(),w=v;t.mul(x,y.placementInvProjMatrix,e.transform.glCoordMatrix),t.mul(x,x,y.placementViewportMatrix),h.push({circleArray:b,circleOffset:f,transform:w,invTransform:x}),f=d+=b.length/4}_&&u.draw(l,c.LINES,Tt.disabled,St.disabled,e.colorModeForRenderPass(),Lt.disabled,En(v,e.transform,g),r.id,_.layoutVertexBuffer,_.indexBuffer,_.segments,null,e.transform.zoom,null,null,_.collisionVertexBuffer)}}if(s&&h.length){var k=e.useProgram(\"collisionCircle\"),M=new t.StructArrayLayout2f1f2i16;M.resize(4*d),M._trim();for(var T=0,S=0,A=h;S<A.length;S+=1)for(var L=A[S],C=0;C<L.circleArray.length/4;C++){var E=4*C,O=L.circleArray[E+0],D=L.circleArray[E+1],I=L.circleArray[E+2],P=L.circleArray[E+3];M.emplace(T++,O,D,I,P,0),M.emplace(T++,O,D,I,P,1),M.emplace(T++,O,D,I,P,2),M.emplace(T++,O,D,I,P,3)}(!Vn||Vn.length<2*d)&&(Vn=function(e){var n=2*e,r=new t.StructArrayLayout3ui6;r.resize(n),r._trim();for(var i=0;i<n;i++){var a=6*i;r.uint16[a+0]=4*i+0,r.uint16[a+1]=4*i+1,r.uint16[a+2]=4*i+2,r.uint16[a+3]=4*i+2,r.uint16[a+4]=4*i+3,r.uint16[a+5]=4*i+0}return r}(d));for(var R=l.createIndexBuffer(Vn,!0),z=l.createVertexBuffer(M,t.collisionCircleLayout.members,!0),j=0,F=h;j<F.length;j+=1){var N=F[j],B=On(N.transform,N.invTransform,e.transform);k.draw(l,c.TRIANGLES,Tt.disabled,St.disabled,e.colorModeForRenderPass(),Lt.disabled,B,r.id,z,R,t.SegmentVector.simpleSegment(0,2*N.circleOffset,N.circleArray.length,N.circleArray.length/2),null,e.transform.zoom,null,null,null)}z.destroy(),R.destroy()}}var Kn=t.identity(new Float32Array(16));function $n(e,n,r,i,a,o){var s=t.getAnchorAlignment(e),l=-(s.horizontalAlign-.5)*n,c=-(s.verticalAlign-.5)*r,u=t.evaluateVariableOffset(e,i);return new t.Point((l/a+u[0])*o,(c/a+u[1])*o)}function Qn(e,n,r,i,a,o,s,l,c,u,h){var d=e.text.placedSymbolArray,f=e.text.dynamicLayoutVertexArray,p=e.icon.dynamicLayoutVertexArray,m={};f.clear();for(var g=0;g<d.length;g++){var y=d.get(g),v=y.hidden||!y.crossTileID||e.allowVerticalPlacement&&!y.placedOrientation?null:i[y.crossTileID];if(v){var _=new t.Point(y.anchorX,y.anchorY),b=Qt(_,r?l:s),x=te(o.cameraToCenterDistance,b.signedDistanceFromCamera),w=a.evaluateSizeForFeature(e.textSizeData,u,y)*x/t.ONE_EM;r&&(w*=e.tilePixelRatio/c);for(var k=$n(v.anchor,v.width,v.height,v.textOffset,v.textBoxScale,w),M=r?Qt(_.add(k),s).point:b.point.add(n?k.rotate(-o.angle):k),T=e.allowVerticalPlacement&&y.placedOrientation===t.WritingMode.vertical?Math.PI/2:0,S=0;S<y.numGlyphs;S++)t.addDynamicAttributes(f,M,T);h&&y.associatedIconIndex>=0&&(m[y.associatedIconIndex]={shiftedAnchor:M,angle:T})}else ce(y.numGlyphs,f)}if(h){p.clear();for(var A=e.icon.placedSymbolArray,L=0;L<A.length;L++){var C=A.get(L);if(C.hidden)ce(C.numGlyphs,p);else{var E=m[L];if(E)for(var O=0;O<C.numGlyphs;O++)t.addDynamicAttributes(p,E.shiftedAnchor,E.angle);else ce(C.numGlyphs,p)}}e.icon.dynamicLayoutVertexBuffer.updateData(p)}e.text.dynamicLayoutVertexBuffer.updateData(f)}function tr(t,e,n){return n.iconsInText&&e?\"symbolTextAndIcon\":t?\"symbolSDF\":\"symbolIcon\"}function er(e,n,r,i,a,o,s,l,c,u,h,d){for(var f=e.context,p=f.gl,m=e.transform,g=\"map\"===l,y=\"map\"===c,v=g&&\"point\"!==r.layout.get(\"symbol-placement\"),_=g&&!y&&!v,b=void 0!==r.layout.get(\"symbol-sort-key\").constantOr(1),x=e.depthModeForSublayer(0,Tt.ReadOnly),w=r.layout.get(\"text-variable-anchor\"),k=[],M=0,T=i;M<T.length;M+=1){var S=T[M],A=n.getTile(S),L=A.getBucket(r);if(L){var C=a?L.text:L.icon;if(C&&C.segments.get().length){var E=C.programConfigurations.get(r.id),O=a||L.sdfIcons,D=a?L.textSizeData:L.iconSizeData,I=y||0!==m.pitch,P=e.useProgram(tr(O,a,L),E),R=t.evaluateSizeForZoom(D,m.zoom),z=void 0,j=[0,0],F=void 0,N=void 0,B=null,Y=void 0;if(a)F=A.glyphAtlasTexture,N=p.LINEAR,z=A.glyphAtlasTexture.size,L.iconsInText&&(j=A.imageAtlasTexture.size,B=A.imageAtlasTexture,Y=I||e.options.rotating||e.options.zooming||\"composite\"===D.kind||\"camera\"===D.kind?p.LINEAR:p.NEAREST);else{var H=1!==r.layout.get(\"icon-size\").constantOr(0)||L.iconsNeedLinear;F=A.imageAtlasTexture,N=O||e.options.rotating||e.options.zooming||H||I?p.LINEAR:p.NEAREST,z=A.imageAtlasTexture.size}var V=de(A,1,e.transform.zoom),U=Kt(S.posMatrix,y,g,e.transform,V),W=$t(S.posMatrix,y,g,e.transform,V),q=w&&L.hasTextData(),G=\"none\"!==r.layout.get(\"icon-text-fit\")&&q&&L.hasIconData();v&&ne(L,S.posMatrix,e,a,U,W,y,u);var X=e.translatePosMatrix(S.posMatrix,A,o,s),Z=v||a&&w||G?Kn:U,J=e.translatePosMatrix(W,A,o,s,!0),K=O&&0!==r.paint.get(a?\"text-halo-width\":\"icon-halo-width\").constantOr(1),$={program:P,buffers:C,uniformValues:O?L.iconsInText?qn(D.kind,R,_,y,e,X,Z,J,z,j):Wn(D.kind,R,_,y,e,X,Z,J,a,z,!0):Un(D.kind,R,_,y,e,X,Z,J,a,z),atlasTexture:F,atlasTextureIcon:B,atlasInterpolation:N,atlasInterpolationIcon:Y,isSDF:O,hasHalo:K};if(b)for(var Q=0,tt=C.segments.get();Q<tt.length;Q+=1){var et=tt[Q];k.push({segments:new t.SegmentVector([et]),sortKey:et.sortKey,state:$})}else k.push({segments:C.segments,sortKey:0,state:$})}}}b&&k.sort((function(t,e){return t.sortKey-e.sortKey}));for(var nt=0,rt=k;nt<rt.length;nt+=1){var it=rt[nt],at=it.state;if(f.activeTexture.set(p.TEXTURE0),at.atlasTexture.bind(at.atlasInterpolation,p.CLAMP_TO_EDGE),at.atlasTextureIcon&&(f.activeTexture.set(p.TEXTURE1),at.atlasTextureIcon&&at.atlasTextureIcon.bind(at.atlasInterpolationIcon,p.CLAMP_TO_EDGE)),at.isSDF){var ot=at.uniformValues;at.hasHalo&&(ot.u_is_halo=1,nr(at.buffers,it.segments,r,e,at.program,x,h,d,ot)),ot.u_is_halo=0}nr(at.buffers,it.segments,r,e,at.program,x,h,d,at.uniformValues)}}function nr(t,e,n,r,i,a,o,s,l){var c=r.context;i.draw(c,c.gl.TRIANGLES,a,o,s,Lt.disabled,l,n.id,t.layoutVertexBuffer,t.indexBuffer,e,n.paint,r.transform.zoom,t.programConfigurations.get(n.id),t.dynamicLayoutVertexBuffer,t.opacityVertexBuffer)}function rr(t,e,n,r,i,a,o){var s,l,c,u,h,d=t.context.gl,f=n.paint.get(\"fill-pattern\"),p=f&&f.constantOr(1),m=n.getCrossfadeParameters();o?(l=p&&!n.getPaintProperty(\"fill-outline-color\")?\"fillOutlinePattern\":\"fillOutline\",s=d.LINES):(l=p?\"fillPattern\":\"fill\",s=d.TRIANGLES);for(var g=0,y=r;g<y.length;g+=1){var v=y[g],_=e.getTile(v);if(!p||_.patternsLoaded()){var b=_.getBucket(n);if(b){var x=b.programConfigurations.get(n.id),w=t.useProgram(l,x);p&&(t.context.activeTexture.set(d.TEXTURE0),_.imageAtlasTexture.bind(d.LINEAR,d.CLAMP_TO_EDGE),x.updatePaintBuffers(m));var k=f.constantOr(null);if(k&&_.imageAtlas){var M=_.imageAtlas,T=M.patternPositions[k.to.toString()],S=M.patternPositions[k.from.toString()];T&&S&&x.setConstantPatternPositions(T,S)}var A=t.translatePosMatrix(v.posMatrix,_,n.paint.get(\"fill-translate\"),n.paint.get(\"fill-translate-anchor\"));if(o){u=b.indexBuffer2,h=b.segments2;var L=[d.drawingBufferWidth,d.drawingBufferHeight];c=\"fillOutlinePattern\"===l&&p?Ln(A,t,m,_,L):An(A,L)}else u=b.indexBuffer,h=b.segments,c=p?Sn(A,t,m,_):Tn(A);w.draw(t.context,s,i,t.stencilModeForClipping(v),a,Lt.disabled,c,n.id,b.layoutVertexBuffer,u,h,n.paint,t.transform.zoom,x)}}}}function ir(t,e,n,r,i,a,o){for(var s=t.context,l=s.gl,c=n.paint.get(\"fill-extrusion-pattern\"),u=c.constantOr(1),h=n.getCrossfadeParameters(),d=n.paint.get(\"fill-extrusion-opacity\"),f=0,p=r;f<p.length;f+=1){var m=p[f],g=e.getTile(m),y=g.getBucket(n);if(y){var v=y.programConfigurations.get(n.id),_=t.useProgram(u?\"fillExtrusionPattern\":\"fillExtrusion\",v);u&&(t.context.activeTexture.set(l.TEXTURE0),g.imageAtlasTexture.bind(l.LINEAR,l.CLAMP_TO_EDGE),v.updatePaintBuffers(h));var b=c.constantOr(null);if(b&&g.imageAtlas){var x=g.imageAtlas,w=x.patternPositions[b.to.toString()],k=x.patternPositions[b.from.toString()];w&&k&&v.setConstantPatternPositions(w,k)}var M=t.translatePosMatrix(m.posMatrix,g,n.paint.get(\"fill-extrusion-translate\"),n.paint.get(\"fill-extrusion-translate-anchor\")),T=n.paint.get(\"fill-extrusion-vertical-gradient\"),S=u?Mn(M,t,T,d,m,h,g):kn(M,t,T,d);_.draw(s,s.gl.TRIANGLES,i,a,o,Lt.backCCW,S,n.id,y.layoutVertexBuffer,y.indexBuffer,y.segments,n.paint,t.transform.zoom,v)}}}function ar(e,n,r,i,a,o){var s=e.context,l=s.gl,c=n.fbo;if(c){var u=e.useProgram(\"hillshade\");s.activeTexture.set(l.TEXTURE0),l.bindTexture(l.TEXTURE_2D,c.colorAttachment.get());var h=function(e,n,r){var i=r.paint.get(\"hillshade-shadow-color\"),a=r.paint.get(\"hillshade-highlight-color\"),o=r.paint.get(\"hillshade-accent-color\"),s=r.paint.get(\"hillshade-illumination-direction\")*(Math.PI/180);\"viewport\"===r.paint.get(\"hillshade-illumination-anchor\")&&(s-=e.transform.angle);var l,c,u,h=!e.options.moving;return{u_matrix:e.transform.calculatePosMatrix(n.tileID.toUnwrapped(),h),u_image:0,u_latrange:(l=n.tileID,c=Math.pow(2,l.canonical.z),u=l.canonical.y,[new t.MercatorCoordinate(0,u/c).toLngLat().lat,new t.MercatorCoordinate(0,(u+1)/c).toLngLat().lat]),u_light:[r.paint.get(\"hillshade-exaggeration\"),s],u_shadow:i,u_highlight:a,u_accent:o}}(e,n,r);u.draw(s,l.TRIANGLES,i,a,o,Lt.disabled,h,r.id,e.rasterBoundsBuffer,e.quadTriangleIndexBuffer,e.rasterBoundsSegments)}}function or(e,n,r,i,a,o,s){var l=e.context,c=l.gl,u=n.dem;if(u&&u.data){var h=u.dim,d=u.stride,f=u.getPixels();if(l.activeTexture.set(c.TEXTURE1),l.pixelStoreUnpackPremultiplyAlpha.set(!1),n.demTexture=n.demTexture||e.getTileTexture(d),n.demTexture){var p=n.demTexture;p.update(f,{premultiply:!1}),p.bind(c.NEAREST,c.CLAMP_TO_EDGE)}else n.demTexture=new t.Texture(l,f,c.RGBA,{premultiply:!1}),n.demTexture.bind(c.NEAREST,c.CLAMP_TO_EDGE);l.activeTexture.set(c.TEXTURE0);var m=n.fbo;if(!m){var g=new t.Texture(l,{width:h,height:h,data:null},c.RGBA);g.bind(c.LINEAR,c.CLAMP_TO_EDGE),(m=n.fbo=l.createFramebuffer(h,h,!0)).colorAttachment.set(g.texture)}l.bindFramebuffer.set(m.framebuffer),l.viewport.set([0,0,h,h]),e.useProgram(\"hillshadePrepare\").draw(l,c.TRIANGLES,a,o,s,Lt.disabled,function(e,n,r){var i=n.stride,a=t.create();return t.ortho(a,0,t.EXTENT,-t.EXTENT,0,0,1),t.translate(a,a,[0,-t.EXTENT,0]),{u_matrix:a,u_image:1,u_dimension:[i,i],u_zoom:e.overscaledZ,u_maxzoom:r,u_unpack:n.getUnpackVector()}}(n.tileID,u,i),r.id,e.rasterBoundsBuffer,e.quadTriangleIndexBuffer,e.rasterBoundsSegments),n.needsHillshadePrepare=!1}}function sr(e,n,r,i,a){var o=i.paint.get(\"raster-fade-duration\");if(o>0){var s=t.browser.now(),l=(s-e.timeAdded)/o,c=n?(s-n.timeAdded)/o:-1,u=r.getSource(),h=a.coveringZoomLevel({tileSize:u.tileSize,roundZoom:u.roundZoom}),d=!n||Math.abs(n.tileID.overscaledZ-h)>Math.abs(e.tileID.overscaledZ-h),f=d&&e.refreshedUponExpiration?1:t.clamp(d?l:1-c,0,1);return e.refreshedUponExpiration&&l>=1&&(e.refreshedUponExpiration=!1),n?{opacity:1,mix:1-f}:{opacity:f,mix:0}}return{opacity:1,mix:0}}var lr=new t.Color(1,0,0,1),cr=new t.Color(0,1,0,1),ur=new t.Color(0,0,1,1),hr=new t.Color(1,0,1,1),dr=new t.Color(0,1,1,1);function fr(t,e,n,r){mr(t,0,e+n/2,t.transform.width,n,r)}function pr(t,e,n,r){mr(t,e-n/2,0,n,t.transform.height,r)}function mr(e,n,r,i,a,o){var s=e.context,l=s.gl;l.enable(l.SCISSOR_TEST),l.scissor(n*t.browser.devicePixelRatio,r*t.browser.devicePixelRatio,i*t.browser.devicePixelRatio,a*t.browser.devicePixelRatio),s.clear({color:o}),l.disable(l.SCISSOR_TEST)}function gr(e,n,r){var i=e.context,a=i.gl,o=r.posMatrix,s=e.useProgram(\"debug\"),l=Tt.disabled,c=St.disabled,u=e.colorModeForRenderPass();i.activeTexture.set(a.TEXTURE0),e.emptyTexture.bind(a.LINEAR,a.CLAMP_TO_EDGE),s.draw(i,a.LINE_STRIP,l,c,u,Lt.disabled,Dn(o,t.Color.red),\"$debug\",e.debugBuffer,e.tileBorderIndexBuffer,e.debugSegments);var h=n.getTileByID(r.key).latestRawTileData,d=Math.floor((h&&h.byteLength||0)/1024),f=n.getTile(r).tileSize,p=512/Math.min(f,512)*(r.overscaledZ/e.transform.zoom)*.5,m=r.canonical.toString();r.overscaledZ!==r.canonical.z&&(m+=\" => \"+r.overscaledZ),function(t,e){t.initDebugOverlayCanvas();var n=t.debugOverlayCanvas,r=t.context.gl,i=t.debugOverlayCanvas.getContext(\"2d\");i.clearRect(0,0,n.width,n.height),i.shadowColor=\"white\",i.shadowBlur=2,i.lineWidth=1.5,i.strokeStyle=\"white\",i.textBaseline=\"top\",i.font=\"bold 36px Open Sans, sans-serif\",i.fillText(e,5,5),i.strokeText(e,5,5),t.debugOverlayTexture.update(n),t.debugOverlayTexture.bind(r.LINEAR,r.CLAMP_TO_EDGE)}(e,m+\" \"+d+\"kb\"),s.draw(i,a.TRIANGLES,l,c,At.alphaBlended,Lt.disabled,Dn(o,t.Color.transparent,p),\"$debug\",e.debugBuffer,e.quadTriangleIndexBuffer,e.debugSegments)}var yr={symbol:function(e,n,r,i,a){if(\"translucent\"===e.renderPass){var o=St.disabled,s=e.colorModeForRenderPass();r.layout.get(\"text-variable-anchor\")&&function(e,n,r,i,a,o,s){for(var l=n.transform,c=\"map\"===a,u=\"map\"===o,h=0,d=e;h<d.length;h+=1){var f=d[h],p=i.getTile(f),m=p.getBucket(r);if(m&&m.text&&m.text.segments.get().length){var g=t.evaluateSizeForZoom(m.textSizeData,l.zoom),y=de(p,1,n.transform.zoom),v=Kt(f.posMatrix,u,c,n.transform,y),_=\"none\"!==r.layout.get(\"icon-text-fit\")&&m.hasIconData();if(g){var b=Math.pow(2,l.zoom-p.tileID.overscaledZ);Qn(m,c,u,s,t.symbolSize,l,v,f.posMatrix,b,g,_)}}}}(i,e,r,n,r.layout.get(\"text-rotation-alignment\"),r.layout.get(\"text-pitch-alignment\"),a),0!==r.paint.get(\"icon-opacity\").constantOr(1)&&er(e,n,r,i,!1,r.paint.get(\"icon-translate\"),r.paint.get(\"icon-translate-anchor\"),r.layout.get(\"icon-rotation-alignment\"),r.layout.get(\"icon-pitch-alignment\"),r.layout.get(\"icon-keep-upright\"),o,s),0!==r.paint.get(\"text-opacity\").constantOr(1)&&er(e,n,r,i,!0,r.paint.get(\"text-translate\"),r.paint.get(\"text-translate-anchor\"),r.layout.get(\"text-rotation-alignment\"),r.layout.get(\"text-pitch-alignment\"),r.layout.get(\"text-keep-upright\"),o,s),n.map.showCollisionBoxes&&(Jn(e,n,r,i,r.paint.get(\"text-translate\"),r.paint.get(\"text-translate-anchor\"),!0),Jn(e,n,r,i,r.paint.get(\"icon-translate\"),r.paint.get(\"icon-translate-anchor\"),!1))}},circle:function(e,n,r,i){if(\"translucent\"===e.renderPass){var a=r.paint.get(\"circle-opacity\"),o=r.paint.get(\"circle-stroke-width\"),s=r.paint.get(\"circle-stroke-opacity\"),l=void 0!==r.layout.get(\"circle-sort-key\").constantOr(1);if(0!==a.constantOr(1)||0!==o.constantOr(1)&&0!==s.constantOr(1)){for(var c=e.context,u=c.gl,h=e.depthModeForSublayer(0,Tt.ReadOnly),d=St.disabled,f=e.colorModeForRenderPass(),p=[],m=0;m<i.length;m++){var g=i[m],y=n.getTile(g),v=y.getBucket(r);if(v){var _=v.programConfigurations.get(r.id),b={programConfiguration:_,program:e.useProgram(\"circle\",_),layoutVertexBuffer:v.layoutVertexBuffer,indexBuffer:v.indexBuffer,uniformValues:Cn(e,g,y,r)};if(l)for(var x=0,w=v.segments.get();x<w.length;x+=1){var k=w[x];p.push({segments:new t.SegmentVector([k]),sortKey:k.sortKey,state:b})}else p.push({segments:v.segments,sortKey:0,state:b})}}l&&p.sort((function(t,e){return t.sortKey-e.sortKey}));for(var M=0,T=p;M<T.length;M+=1){var S=T[M],A=S.state;A.program.draw(c,u.TRIANGLES,h,d,f,Lt.disabled,A.uniformValues,r.id,A.layoutVertexBuffer,A.indexBuffer,S.segments,r.paint,e.transform.zoom,A.programConfiguration)}}}},heatmap:function(e,n,r,i){if(0!==r.paint.get(\"heatmap-opacity\"))if(\"offscreen\"===e.renderPass){var a=e.context,o=a.gl,s=St.disabled,l=new At([o.ONE,o.ONE],t.Color.transparent,[!0,!0,!0,!0]);!function(t,e,n){var r=t.gl;t.activeTexture.set(r.TEXTURE1),t.viewport.set([0,0,e.width/4,e.height/4]);var i=n.heatmapFbo;if(i)r.bindTexture(r.TEXTURE_2D,i.colorAttachment.get()),t.bindFramebuffer.set(i.framebuffer);else{var a=r.createTexture();r.bindTexture(r.TEXTURE_2D,a),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.LINEAR),i=n.heatmapFbo=t.createFramebuffer(e.width/4,e.height/4,!1),function(t,e,n,r){var i=t.gl;i.texImage2D(i.TEXTURE_2D,0,i.RGBA,e.width/4,e.height/4,0,i.RGBA,t.extRenderToTextureHalfFloat?t.extTextureHalfFloat.HALF_FLOAT_OES:i.UNSIGNED_BYTE,null),r.colorAttachment.set(n)}(t,e,a,i)}}(a,e,r),a.clear({color:t.Color.transparent});for(var c=0;c<i.length;c++){var u=i[c];if(!n.hasRenderableParent(u)){var h=n.getTile(u),d=h.getBucket(r);if(d){var f=d.programConfigurations.get(r.id);e.useProgram(\"heatmap\",f).draw(a,o.TRIANGLES,Tt.disabled,s,l,Lt.disabled,Pn(u.posMatrix,h,e.transform.zoom,r.paint.get(\"heatmap-intensity\")),r.id,d.layoutVertexBuffer,d.indexBuffer,d.segments,r.paint,e.transform.zoom,f)}}}a.viewport.set([0,0,e.width,e.height])}else\"translucent\"===e.renderPass&&(e.context.setColorMode(e.colorModeForRenderPass()),function(e,n){var r=e.context,i=r.gl,a=n.heatmapFbo;if(a){r.activeTexture.set(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,a.colorAttachment.get()),r.activeTexture.set(i.TEXTURE1);var o=n.colorRampTexture;o||(o=n.colorRampTexture=new t.Texture(r,n.colorRamp,i.RGBA)),o.bind(i.LINEAR,i.CLAMP_TO_EDGE),e.useProgram(\"heatmapTexture\").draw(r,i.TRIANGLES,Tt.disabled,St.disabled,e.colorModeForRenderPass(),Lt.disabled,function(e,n,r,i){var a=t.create();t.ortho(a,0,e.width,e.height,0,0,1);var o=e.context.gl;return{u_matrix:a,u_world:[o.drawingBufferWidth,o.drawingBufferHeight],u_image:0,u_color_ramp:1,u_opacity:n.paint.get(\"heatmap-opacity\")}}(e,n),n.id,e.viewportBuffer,e.quadTriangleIndexBuffer,e.viewportSegments,n.paint,e.transform.zoom)}}(e,r))},line:function(e,n,r,i){if(\"translucent\"===e.renderPass){var a=r.paint.get(\"line-opacity\"),o=r.paint.get(\"line-width\");if(0!==a.constantOr(1)&&0!==o.constantOr(1)){var s=e.depthModeForSublayer(0,Tt.ReadOnly),l=e.colorModeForRenderPass(),c=r.paint.get(\"line-dasharray\"),u=r.paint.get(\"line-pattern\"),h=u.constantOr(1),d=r.paint.get(\"line-gradient\"),f=r.getCrossfadeParameters(),p=h?\"linePattern\":c?\"lineSDF\":d?\"lineGradient\":\"line\",m=e.context,g=m.gl,y=!0;if(d){m.activeTexture.set(g.TEXTURE0);var v=r.gradientTexture;if(!r.gradient)return;v||(v=r.gradientTexture=new t.Texture(m,r.gradient,g.RGBA)),v.bind(g.LINEAR,g.CLAMP_TO_EDGE)}for(var _=0,b=i;_<b.length;_+=1){var x=b[_],w=n.getTile(x);if(!h||w.patternsLoaded()){var k=w.getBucket(r);if(k){var M=k.programConfigurations.get(r.id),T=e.context.program.get(),S=e.useProgram(p,M),A=y||S.program!==T,L=u.constantOr(null);if(L&&w.imageAtlas){var C=w.imageAtlas,E=C.patternPositions[L.to.toString()],O=C.patternPositions[L.from.toString()];E&&O&&M.setConstantPatternPositions(E,O)}var D=h?jn(e,w,r,f):c?Fn(e,w,r,c,f):d?zn(e,w,r):Rn(e,w,r);h?(m.activeTexture.set(g.TEXTURE0),w.imageAtlasTexture.bind(g.LINEAR,g.CLAMP_TO_EDGE),M.updatePaintBuffers(f)):c&&(A||e.lineAtlas.dirty)&&(m.activeTexture.set(g.TEXTURE0),e.lineAtlas.bind(m)),S.draw(m,g.TRIANGLES,s,e.stencilModeForClipping(x),l,Lt.disabled,D,r.id,k.layoutVertexBuffer,k.indexBuffer,k.segments,r.paint,e.transform.zoom,M),y=!1}}}}}},fill:function(e,n,r,i){var a=r.paint.get(\"fill-color\"),o=r.paint.get(\"fill-opacity\");if(0!==o.constantOr(1)){var s=e.colorModeForRenderPass(),l=r.paint.get(\"fill-pattern\"),c=e.opaquePassEnabledForLayer()&&!l.constantOr(1)&&1===a.constantOr(t.Color.transparent).a&&1===o.constantOr(0)?\"opaque\":\"translucent\";if(e.renderPass===c){var u=e.depthModeForSublayer(1,\"opaque\"===e.renderPass?Tt.ReadWrite:Tt.ReadOnly);rr(e,n,r,i,u,s,!1)}if(\"translucent\"===e.renderPass&&r.paint.get(\"fill-antialias\")){var h=e.depthModeForSublayer(r.getPaintProperty(\"fill-outline-color\")?2:0,Tt.ReadOnly);rr(e,n,r,i,h,s,!0)}}},\"fill-extrusion\":function(t,e,n,r){var i=n.paint.get(\"fill-extrusion-opacity\");if(0!==i&&\"translucent\"===t.renderPass){var a=new Tt(t.context.gl.LEQUAL,Tt.ReadWrite,t.depthRangeFor3D);if(1!==i||n.paint.get(\"fill-extrusion-pattern\").constantOr(1))ir(t,e,n,r,a,St.disabled,At.disabled),ir(t,e,n,r,a,t.stencilModeFor3D(),t.colorModeForRenderPass());else{var o=t.colorModeForRenderPass();ir(t,e,n,r,a,St.disabled,o)}}},hillshade:function(t,e,n,r){if(\"offscreen\"===t.renderPass||\"translucent\"===t.renderPass){for(var i=t.context,a=e.getSource().maxzoom,o=t.depthModeForSublayer(0,Tt.ReadOnly),s=t.colorModeForRenderPass(),l=\"translucent\"===t.renderPass?t.stencilConfigForOverlap(r):[{},r],c=l[0],u=0,h=l[1];u<h.length;u+=1){var d=h[u],f=e.getTile(d);f.needsHillshadePrepare&&\"offscreen\"===t.renderPass?or(t,f,n,a,o,St.disabled,s):\"translucent\"===t.renderPass&&ar(t,f,n,o,c[d.overscaledZ],s)}i.viewport.set([0,0,t.width,t.height])}},raster:function(t,e,n,r){if(\"translucent\"===t.renderPass&&0!==n.paint.get(\"raster-opacity\")&&r.length)for(var i=t.context,a=i.gl,o=e.getSource(),s=t.useProgram(\"raster\"),l=t.colorModeForRenderPass(),c=o instanceof D?[{},r]:t.stencilConfigForOverlap(r),u=c[0],h=c[1],d=h[h.length-1].overscaledZ,f=!t.options.moving,p=0,m=h;p<m.length;p+=1){var g=m[p],y=t.depthModeForSublayer(g.overscaledZ-d,1===n.paint.get(\"raster-opacity\")?Tt.ReadWrite:Tt.ReadOnly,a.LESS),v=e.getTile(g),_=t.transform.calculatePosMatrix(g.toUnwrapped(),f);v.registerFadeDuration(n.paint.get(\"raster-fade-duration\"));var b=e.findLoadedParent(g,0),x=sr(v,b,e,n,t.transform),w=void 0,k=void 0,M=\"nearest\"===n.paint.get(\"raster-resampling\")?a.NEAREST:a.LINEAR;i.activeTexture.set(a.TEXTURE0),v.texture.bind(M,a.CLAMP_TO_EDGE,a.LINEAR_MIPMAP_NEAREST),i.activeTexture.set(a.TEXTURE1),b?(b.texture.bind(M,a.CLAMP_TO_EDGE,a.LINEAR_MIPMAP_NEAREST),w=Math.pow(2,b.tileID.overscaledZ-v.tileID.overscaledZ),k=[v.tileID.canonical.x*w%1,v.tileID.canonical.y*w%1]):v.texture.bind(M,a.CLAMP_TO_EDGE,a.LINEAR_MIPMAP_NEAREST);var T=Yn(_,k||[0,0],w||1,x,n);o instanceof D?s.draw(i,a.TRIANGLES,y,St.disabled,l,Lt.disabled,T,n.id,o.boundsBuffer,t.quadTriangleIndexBuffer,o.boundsSegments):s.draw(i,a.TRIANGLES,y,u[g.overscaledZ],l,Lt.disabled,T,n.id,t.rasterBoundsBuffer,t.quadTriangleIndexBuffer,t.rasterBoundsSegments)}},background:function(t,e,n){var r=n.paint.get(\"background-color\"),i=n.paint.get(\"background-opacity\");if(0!==i){var a=t.context,o=a.gl,s=t.transform,l=s.tileSize,c=n.paint.get(\"background-pattern\");if(!t.isPatternMissing(c)){var u=!c&&1===r.a&&1===i&&t.opaquePassEnabledForLayer()?\"opaque\":\"translucent\";if(t.renderPass===u){var h=St.disabled,d=t.depthModeForSublayer(0,\"opaque\"===u?Tt.ReadWrite:Tt.ReadOnly),f=t.colorModeForRenderPass(),p=t.useProgram(c?\"backgroundPattern\":\"background\"),m=s.coveringTiles({tileSize:l});c&&(a.activeTexture.set(o.TEXTURE0),t.imageManager.bind(t.context));for(var g=n.getCrossfadeParameters(),y=0,v=m;y<v.length;y+=1){var _=v[y],b=t.transform.calculatePosMatrix(_.toUnwrapped()),x=c?Xn(b,i,t,c,{tileID:_,tileSize:l},g):Gn(b,i,r);p.draw(a,o.TRIANGLES,d,h,f,Lt.disabled,x,n.id,t.tileExtentBuffer,t.quadTriangleIndexBuffer,t.tileExtentSegments)}}}}},debug:function(t,e,n){for(var r=0;r<n.length;r++)gr(t,e,n[r])},custom:function(t,e,n){var r=t.context,i=n.implementation;if(\"offscreen\"===t.renderPass){var a=i.prerender;a&&(t.setCustomLayerDefaults(),r.setColorMode(t.colorModeForRenderPass()),a.call(i,r.gl,t.transform.customLayerMatrix()),r.setDirty(),t.setBaseState())}else if(\"translucent\"===t.renderPass){t.setCustomLayerDefaults(),r.setColorMode(t.colorModeForRenderPass()),r.setStencilMode(St.disabled);var o=\"3d\"===i.renderingMode?new Tt(t.context.gl.LEQUAL,Tt.ReadWrite,t.depthRangeFor3D):t.depthModeForSublayer(0,Tt.ReadOnly);r.setDepthMode(o),i.render(r.gl,t.transform.customLayerMatrix()),r.setDirty(),t.setBaseState(),r.bindFramebuffer.set(null)}}},vr=function(t,e){this.context=new Ct(t),this.transform=e,this._tileTextures={},this.setup(),this.numSublayers=Et.maxUnderzooming+Et.maxOverzooming+1,this.depthEpsilon=1/Math.pow(2,16),this.crossTileSymbolIndex=new Fe,this.gpuTimers={}};vr.prototype.resize=function(e,n){if(this.width=e*t.browser.devicePixelRatio,this.height=n*t.browser.devicePixelRatio,this.context.viewport.set([0,0,this.width,this.height]),this.style)for(var r=0,i=this.style._order;r<i.length;r+=1)this.style._layers[i[r]].resize()},vr.prototype.setup=function(){var e=this.context,n=new t.StructArrayLayout2i4;n.emplaceBack(0,0),n.emplaceBack(t.EXTENT,0),n.emplaceBack(0,t.EXTENT),n.emplaceBack(t.EXTENT,t.EXTENT),this.tileExtentBuffer=e.createVertexBuffer(n,Ue.members),this.tileExtentSegments=t.SegmentVector.simpleSegment(0,0,4,2);var r=new t.StructArrayLayout2i4;r.emplaceBack(0,0),r.emplaceBack(t.EXTENT,0),r.emplaceBack(0,t.EXTENT),r.emplaceBack(t.EXTENT,t.EXTENT),this.debugBuffer=e.createVertexBuffer(r,Ue.members),this.debugSegments=t.SegmentVector.simpleSegment(0,0,4,5);var i=new t.StructArrayLayout4i8;i.emplaceBack(0,0,0,0),i.emplaceBack(t.EXTENT,0,t.EXTENT,0),i.emplaceBack(0,t.EXTENT,0,t.EXTENT),i.emplaceBack(t.EXTENT,t.EXTENT,t.EXTENT,t.EXTENT),this.rasterBoundsBuffer=e.createVertexBuffer(i,O.members),this.rasterBoundsSegments=t.SegmentVector.simpleSegment(0,0,4,2);var a=new t.StructArrayLayout2i4;a.emplaceBack(0,0),a.emplaceBack(1,0),a.emplaceBack(0,1),a.emplaceBack(1,1),this.viewportBuffer=e.createVertexBuffer(a,Ue.members),this.viewportSegments=t.SegmentVector.simpleSegment(0,0,4,2);var o=new t.StructArrayLayout1ui2;o.emplaceBack(0),o.emplaceBack(1),o.emplaceBack(3),o.emplaceBack(2),o.emplaceBack(0),this.tileBorderIndexBuffer=e.createIndexBuffer(o);var s=new t.StructArrayLayout3ui6;s.emplaceBack(0,1,2),s.emplaceBack(2,1,3),this.quadTriangleIndexBuffer=e.createIndexBuffer(s),this.emptyTexture=new t.Texture(e,{width:1,height:1,data:new Uint8Array([0,0,0,0])},e.gl.RGBA);var l=this.context.gl;this.stencilClearMode=new St({func:l.ALWAYS,mask:0},0,255,l.ZERO,l.ZERO,l.ZERO)},vr.prototype.clearStencil=function(){var e=this.context,n=e.gl;this.nextStencilID=1,this.currentStencilSource=void 0;var r=t.create();t.ortho(r,0,this.width,this.height,0,0,1),t.scale(r,r,[n.drawingBufferWidth,n.drawingBufferHeight,0]),this.useProgram(\"clippingMask\").draw(e,n.TRIANGLES,Tt.disabled,this.stencilClearMode,At.disabled,Lt.disabled,In(r),\"$clipping\",this.viewportBuffer,this.quadTriangleIndexBuffer,this.viewportSegments)},vr.prototype._renderTileClippingMasks=function(t,e){if(this.currentStencilSource!==t.source&&t.isTileClipped()&&e&&e.length){this.currentStencilSource=t.source;var n=this.context,r=n.gl;this.nextStencilID+e.length>256&&this.clearStencil(),n.setColorMode(At.disabled),n.setDepthMode(Tt.disabled);var i=this.useProgram(\"clippingMask\");this._tileClippingMaskIDs={};for(var a=0,o=e;a<o.length;a+=1){var s=o[a],l=this._tileClippingMaskIDs[s.key]=this.nextStencilID++;i.draw(n,r.TRIANGLES,Tt.disabled,new St({func:r.ALWAYS,mask:0},l,255,r.KEEP,r.KEEP,r.REPLACE),At.disabled,Lt.disabled,In(s.posMatrix),\"$clipping\",this.tileExtentBuffer,this.quadTriangleIndexBuffer,this.tileExtentSegments)}}},vr.prototype.stencilModeFor3D=function(){this.currentStencilSource=void 0,this.nextStencilID+1>256&&this.clearStencil();var t=this.nextStencilID++,e=this.context.gl;return new St({func:e.NOTEQUAL,mask:255},t,255,e.KEEP,e.KEEP,e.REPLACE)},vr.prototype.stencilModeForClipping=function(t){var e=this.context.gl;return new St({func:e.EQUAL,mask:255},this._tileClippingMaskIDs[t.key],0,e.KEEP,e.KEEP,e.REPLACE)},vr.prototype.stencilConfigForOverlap=function(t){var e,n=this.context.gl,r=t.sort((function(t,e){return e.overscaledZ-t.overscaledZ})),i=r[r.length-1].overscaledZ,a=r[0].overscaledZ-i+1;if(a>1){this.currentStencilSource=void 0,this.nextStencilID+a>256&&this.clearStencil();for(var o={},s=0;s<a;s++)o[s+i]=new St({func:n.GEQUAL,mask:255},s+this.nextStencilID,255,n.KEEP,n.KEEP,n.REPLACE);return this.nextStencilID+=a,[o,r]}return[(e={},e[i]=St.disabled,e),r]},vr.prototype.colorModeForRenderPass=function(){var e=this.context.gl;return this._showOverdrawInspector?new At([e.CONSTANT_COLOR,e.ONE],new t.Color(1/8,1/8,1/8,0),[!0,!0,!0,!0]):\"opaque\"===this.renderPass?At.unblended:At.alphaBlended},vr.prototype.depthModeForSublayer=function(t,e,n){if(!this.opaquePassEnabledForLayer())return Tt.disabled;var r=1-((1+this.currentLayer)*this.numSublayers+t)*this.depthEpsilon;return new Tt(n||this.context.gl.LEQUAL,e,[r,r])},vr.prototype.opaquePassEnabledForLayer=function(){return this.currentLayer<this.opaquePassCutoff},vr.prototype.render=function(e,n){var r=this;this.style=e,this.options=n,this.lineAtlas=e.lineAtlas,this.imageManager=e.imageManager,this.glyphManager=e.glyphManager,this.symbolFadeChange=e.placement.symbolFadeChange(t.browser.now()),this.imageManager.beginFrame();var i=this.style._order,a=this.style.sourceCaches;for(var o in a){var s=a[o];s.used&&s.prepare(this.context)}var l,c,u={},h={},d={};for(var f in a){var p=a[f];u[f]=p.getVisibleCoordinates(),h[f]=u[f].slice().reverse(),d[f]=p.getVisibleCoordinates(!0).reverse()}this.opaquePassCutoff=1/0;for(var m=0;m<i.length;m++)if(this.style._layers[i[m]].is3D()){this.opaquePassCutoff=m;break}this.renderPass=\"offscreen\";for(var g=0,y=i;g<y.length;g+=1){var v=this.style._layers[y[g]];if(v.hasOffscreenPass()&&!v.isHidden(this.transform.zoom)){var _=h[v.source];(\"custom\"===v.type||_.length)&&this.renderLayer(this,a[v.source],v,_)}}for(this.context.bindFramebuffer.set(null),this.context.clear({color:n.showOverdrawInspector?t.Color.black:t.Color.transparent,depth:1}),this.clearStencil(),this._showOverdrawInspector=n.showOverdrawInspector,this.depthRangeFor3D=[0,1-(e._order.length+2)*this.numSublayers*this.depthEpsilon],this.renderPass=\"opaque\",this.currentLayer=i.length-1;this.currentLayer>=0;this.currentLayer--){var b=this.style._layers[i[this.currentLayer]],x=a[b.source],w=u[b.source];this._renderTileClippingMasks(b,w),this.renderLayer(this,x,b,w)}for(this.renderPass=\"translucent\",this.currentLayer=0;this.currentLayer<i.length;this.currentLayer++){var k=this.style._layers[i[this.currentLayer]],M=a[k.source],T=(\"symbol\"===k.type?d:h)[k.source];this._renderTileClippingMasks(k,u[k.source]),this.renderLayer(this,M,k,T)}this.options.showTileBoundaries&&(t.values(this.style._layers).forEach((function(t){t.source&&!t.isHidden(r.transform.zoom)&&(t.source!==(c&&c.id)&&(c=r.style.sourceCaches[t.source]),(!l||l.getSource().maxzoom<c.getSource().maxzoom)&&(l=c))})),l&&yr.debug(this,l,l.getVisibleCoordinates())),this.options.showPadding&&function(t){var e=t.transform.padding;fr(t,t.transform.height-(e.top||0),3,lr),fr(t,e.bottom||0,3,cr),pr(t,e.left||0,3,ur),pr(t,t.transform.width-(e.right||0),3,hr);var n=t.transform.centerPoint;!function(t,e,n,r){mr(t,e-1,n-10,2,20,r),mr(t,e-10,n-1,20,2,r)}(t,n.x,t.transform.height-n.y,dr)}(this),this.context.setDefault()},vr.prototype.renderLayer=function(t,e,n,r){n.isHidden(this.transform.zoom)||(\"background\"===n.type||\"custom\"===n.type||r.length)&&(this.id=n.id,this.gpuTimingStart(n),yr[n.type](t,e,n,r,this.style.placement.variableOffsets),this.gpuTimingEnd())},vr.prototype.gpuTimingStart=function(t){if(this.options.gpuTiming){var e=this.context.extTimerQuery,n=this.gpuTimers[t.id];n||(n=this.gpuTimers[t.id]={calls:0,cpuTime:0,query:e.createQueryEXT()}),n.calls++,e.beginQueryEXT(e.TIME_ELAPSED_EXT,n.query)}},vr.prototype.gpuTimingEnd=function(){if(this.options.gpuTiming){var t=this.context.extTimerQuery;t.endQueryEXT(t.TIME_ELAPSED_EXT)}},vr.prototype.collectGpuTimers=function(){var t=this.gpuTimers;return this.gpuTimers={},t},vr.prototype.queryGpuTimers=function(t){var e={};for(var n in t){var r=t[n],i=this.context.extTimerQuery,a=i.getQueryObjectEXT(r.query,i.QUERY_RESULT_EXT)/1e6;i.deleteQueryEXT(r.query),e[n]=a}return e},vr.prototype.translatePosMatrix=function(e,n,r,i,a){if(!r[0]&&!r[1])return e;var o=a?\"map\"===i?this.transform.angle:0:\"viewport\"===i?-this.transform.angle:0;if(o){var s=Math.sin(o),l=Math.cos(o);r=[r[0]*l-r[1]*s,r[0]*s+r[1]*l]}var c=[a?r[0]:de(n,r[0],this.transform.zoom),a?r[1]:de(n,r[1],this.transform.zoom),0],u=new Float32Array(16);return t.translate(u,e,c),u},vr.prototype.saveTileTexture=function(t){var e=this._tileTextures[t.size[0]];e?e.push(t):this._tileTextures[t.size[0]]=[t]},vr.prototype.getTileTexture=function(t){var e=this._tileTextures[t];return e&&e.length>0?e.pop():null},vr.prototype.isPatternMissing=function(t){if(!t)return!1;if(!t.from||!t.to)return!0;var e=this.imageManager.getPattern(t.from.toString()),n=this.imageManager.getPattern(t.to.toString());return!e||!n},vr.prototype.useProgram=function(t,e){this.cache=this.cache||{};var n=\"\"+t+(e?e.cacheKey:\"\")+(this._showOverdrawInspector?\"/overdraw\":\"\");return this.cache[n]||(this.cache[n]=new xn(this.context,_n[t],e,Zn[t],this._showOverdrawInspector)),this.cache[n]},vr.prototype.setCustomLayerDefaults=function(){this.context.unbindVAO(),this.context.cullFace.setDefault(),this.context.activeTexture.setDefault(),this.context.pixelStoreUnpack.setDefault(),this.context.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.context.pixelStoreUnpackFlipY.setDefault()},vr.prototype.setBaseState=function(){var t=this.context.gl;this.context.cullFace.set(!1),this.context.viewport.set([0,0,this.width,this.height]),this.context.blendEquation.set(t.FUNC_ADD)},vr.prototype.initDebugOverlayCanvas=function(){null==this.debugOverlayCanvas&&(this.debugOverlayCanvas=t.window.document.createElement(\"canvas\"),this.debugOverlayCanvas.width=512,this.debugOverlayCanvas.height=512,this.debugOverlayTexture=new t.Texture(this.context,this.debugOverlayCanvas,this.context.gl.RGBA))},vr.prototype.destroy=function(){this.emptyTexture.destroy(),this.debugOverlayTexture&&this.debugOverlayTexture.destroy()};var _r=function(t,e){this.points=t,this.planes=e};_r.fromInvProjectionMatrix=function(e,n,r){var i=Math.pow(2,r),a=[[-1,1,-1,1],[1,1,-1,1],[1,-1,-1,1],[-1,-1,-1,1],[-1,1,1,1],[1,1,1,1],[1,-1,1,1],[-1,-1,1,1]].map((function(n){return t.transformMat4([],n,e)})).map((function(e){return t.scale$1([],e,1/e[3]/n*i)})),o=[[0,1,2],[6,5,4],[0,3,7],[2,1,5],[3,2,6],[0,4,5]].map((function(e){var n=t.sub([],a[e[0]],a[e[1]]),r=t.sub([],a[e[2]],a[e[1]]),i=t.normalize([],t.cross([],n,r)),o=-t.dot(i,a[e[1]]);return i.concat(o)}));return new _r(a,o)};var br=function(e,n){this.min=e,this.max=n,this.center=t.scale$2([],t.add([],this.min,this.max),.5)};br.prototype.quadrant=function(e){for(var n=[e%2==0,e<2],r=t.clone$2(this.min),i=t.clone$2(this.max),a=0;a<n.length;a++)r[a]=n[a]?this.min[a]:this.center[a],i[a]=n[a]?this.center[a]:this.max[a];return i[2]=this.max[2],new br(r,i)},br.prototype.distanceX=function(t){return Math.max(Math.min(this.max[0],t[0]),this.min[0])-t[0]},br.prototype.distanceY=function(t){return Math.max(Math.min(this.max[1],t[1]),this.min[1])-t[1]},br.prototype.intersects=function(e){for(var n=[[this.min[0],this.min[1],0,1],[this.max[0],this.min[1],0,1],[this.max[0],this.max[1],0,1],[this.min[0],this.max[1],0,1]],r=!0,i=0;i<e.planes.length;i++){for(var a=e.planes[i],o=0,s=0;s<n.length;s++)o+=t.dot$1(a,n[s])>=0;if(0===o)return 0;o!==n.length&&(r=!1)}if(r)return 2;for(var l=0;l<3;l++){for(var c=Number.MAX_VALUE,u=-Number.MAX_VALUE,h=0;h<e.points.length;h++){var d=e.points[h][l]-this.min[l];c=Math.min(c,d),u=Math.max(u,d)}if(u<0||c>this.max[l]-this.min[l])return 0}return 1};var xr=function(t,e,n,r){if(void 0===t&&(t=0),void 0===e&&(e=0),void 0===n&&(n=0),void 0===r&&(r=0),isNaN(t)||t<0||isNaN(e)||e<0||isNaN(n)||n<0||isNaN(r)||r<0)throw new Error(\"Invalid value for edge-insets, top, bottom, left and right must all be numbers\");this.top=t,this.bottom=e,this.left=n,this.right=r};xr.prototype.interpolate=function(e,n,r){return null!=n.top&&null!=e.top&&(this.top=t.number(e.top,n.top,r)),null!=n.bottom&&null!=e.bottom&&(this.bottom=t.number(e.bottom,n.bottom,r)),null!=n.left&&null!=e.left&&(this.left=t.number(e.left,n.left,r)),null!=n.right&&null!=e.right&&(this.right=t.number(e.right,n.right,r)),this},xr.prototype.getCenter=function(e,n){var r=t.clamp((this.left+e-this.right)/2,0,e),i=t.clamp((this.top+n-this.bottom)/2,0,n);return new t.Point(r,i)},xr.prototype.equals=function(t){return this.top===t.top&&this.bottom===t.bottom&&this.left===t.left&&this.right===t.right},xr.prototype.clone=function(){return new xr(this.top,this.bottom,this.left,this.right)},xr.prototype.toJSON=function(){return{top:this.top,bottom:this.bottom,left:this.left,right:this.right}};var wr=function(e,n,r,i,a){this.tileSize=512,this.maxValidLatitude=85.051129,this._renderWorldCopies=void 0===a||a,this._minZoom=e||0,this._maxZoom=n||22,this._minPitch=null==r?0:r,this._maxPitch=null==i?60:i,this.setMaxBounds(),this.width=0,this.height=0,this._center=new t.LngLat(0,0),this.zoom=0,this.angle=0,this._fov=.6435011087932844,this._pitch=0,this._unmodified=!0,this._edgeInsets=new xr,this._posMatrixCache={},this._alignedPosMatrixCache={}},kr={minZoom:{configurable:!0},maxZoom:{configurable:!0},minPitch:{configurable:!0},maxPitch:{configurable:!0},renderWorldCopies:{configurable:!0},worldSize:{configurable:!0},centerOffset:{configurable:!0},size:{configurable:!0},bearing:{configurable:!0},pitch:{configurable:!0},fov:{configurable:!0},zoom:{configurable:!0},center:{configurable:!0},padding:{configurable:!0},centerPoint:{configurable:!0},unmodified:{configurable:!0},point:{configurable:!0}};wr.prototype.clone=function(){var t=new wr(this._minZoom,this._maxZoom,this._minPitch,this.maxPitch,this._renderWorldCopies);return t.tileSize=this.tileSize,t.latRange=this.latRange,t.width=this.width,t.height=this.height,t._center=this._center,t.zoom=this.zoom,t.angle=this.angle,t._fov=this._fov,t._pitch=this._pitch,t._unmodified=this._unmodified,t._edgeInsets=this._edgeInsets.clone(),t._calcMatrices(),t},kr.minZoom.get=function(){return this._minZoom},kr.minZoom.set=function(t){this._minZoom!==t&&(this._minZoom=t,this.zoom=Math.max(this.zoom,t))},kr.maxZoom.get=function(){return this._maxZoom},kr.maxZoom.set=function(t){this._maxZoom!==t&&(this._maxZoom=t,this.zoom=Math.min(this.zoom,t))},kr.minPitch.get=function(){return this._minPitch},kr.minPitch.set=function(t){this._minPitch!==t&&(this._minPitch=t,this.pitch=Math.max(this.pitch,t))},kr.maxPitch.get=function(){return this._maxPitch},kr.maxPitch.set=function(t){this._maxPitch!==t&&(this._maxPitch=t,this.pitch=Math.min(this.pitch,t))},kr.renderWorldCopies.get=function(){return this._renderWorldCopies},kr.renderWorldCopies.set=function(t){void 0===t?t=!0:null===t&&(t=!1),this._renderWorldCopies=t},kr.worldSize.get=function(){return this.tileSize*this.scale},kr.centerOffset.get=function(){return this.centerPoint._sub(this.size._div(2))},kr.size.get=function(){return new t.Point(this.width,this.height)},kr.bearing.get=function(){return-this.angle/Math.PI*180},kr.bearing.set=function(e){var n=-t.wrap(e,-180,180)*Math.PI/180;this.angle!==n&&(this._unmodified=!1,this.angle=n,this._calcMatrices(),this.rotationMatrix=t.create$2(),t.rotate(this.rotationMatrix,this.rotationMatrix,this.angle))},kr.pitch.get=function(){return this._pitch/Math.PI*180},kr.pitch.set=function(e){var n=t.clamp(e,this.minPitch,this.maxPitch)/180*Math.PI;this._pitch!==n&&(this._unmodified=!1,this._pitch=n,this._calcMatrices())},kr.fov.get=function(){return this._fov/Math.PI*180},kr.fov.set=function(t){t=Math.max(.01,Math.min(60,t)),this._fov!==t&&(this._unmodified=!1,this._fov=t/180*Math.PI,this._calcMatrices())},kr.zoom.get=function(){return this._zoom},kr.zoom.set=function(t){var e=Math.min(Math.max(t,this.minZoom),this.maxZoom);this._zoom!==e&&(this._unmodified=!1,this._zoom=e,this.scale=this.zoomScale(e),this.tileZoom=Math.floor(e),this.zoomFraction=e-this.tileZoom,this._constrain(),this._calcMatrices())},kr.center.get=function(){return this._center},kr.center.set=function(t){t.lat===this._center.lat&&t.lng===this._center.lng||(this._unmodified=!1,this._center=t,this._constrain(),this._calcMatrices())},kr.padding.get=function(){return this._edgeInsets.toJSON()},kr.padding.set=function(t){this._edgeInsets.equals(t)||(this._unmodified=!1,this._edgeInsets.interpolate(this._edgeInsets,t,1),this._calcMatrices())},kr.centerPoint.get=function(){return this._edgeInsets.getCenter(this.width,this.height)},wr.prototype.isPaddingEqual=function(t){return this._edgeInsets.equals(t)},wr.prototype.interpolatePadding=function(t,e,n){this._unmodified=!1,this._edgeInsets.interpolate(t,e,n),this._constrain(),this._calcMatrices()},wr.prototype.coveringZoomLevel=function(t){var e=(t.roundZoom?Math.round:Math.floor)(this.zoom+this.scaleZoom(this.tileSize/t.tileSize));return Math.max(0,e)},wr.prototype.getVisibleUnwrappedCoordinates=function(e){var n=[new t.UnwrappedTileID(0,e)];if(this._renderWorldCopies)for(var r=this.pointCoordinate(new t.Point(0,0)),i=this.pointCoordinate(new t.Point(this.width,0)),a=this.pointCoordinate(new t.Point(this.width,this.height)),o=this.pointCoordinate(new t.Point(0,this.height)),s=Math.floor(Math.min(r.x,i.x,a.x,o.x)),l=Math.floor(Math.max(r.x,i.x,a.x,o.x)),c=s-1;c<=l+1;c++)0!==c&&n.push(new t.UnwrappedTileID(c,e));return n},wr.prototype.coveringTiles=function(e){var n=this.coveringZoomLevel(e),r=n;if(void 0!==e.minzoom&&n<e.minzoom)return[];void 0!==e.maxzoom&&n>e.maxzoom&&(n=e.maxzoom);var i=t.MercatorCoordinate.fromLngLat(this.center),a=Math.pow(2,n),o=[a*i.x,a*i.y,0],s=_r.fromInvProjectionMatrix(this.invProjMatrix,this.worldSize,n),l=e.minzoom||0;this.pitch<=60&&this._edgeInsets.top<.1&&(l=n);var c=function(t){return{aabb:new br([t*a,0,0],[(t+1)*a,a,0]),zoom:0,x:0,y:0,wrap:t,fullyVisible:!1}},u=[],h=[],d=n,f=e.reparseOverscaled?r:n;if(this._renderWorldCopies)for(var p=1;p<=3;p++)u.push(c(-p)),u.push(c(p));for(u.push(c(0));u.length>0;){var m=u.pop(),g=m.x,y=m.y,v=m.fullyVisible;if(!v){var _=m.aabb.intersects(s);if(0===_)continue;v=2===_}var b=m.aabb.distanceX(o),x=m.aabb.distanceY(o),w=Math.max(Math.abs(b),Math.abs(x));if(m.zoom===d||w>3+(1<<d-m.zoom)-2&&m.zoom>=l)h.push({tileID:new t.OverscaledTileID(m.zoom===d?f:m.zoom,m.wrap,m.zoom,g,y),distanceSq:t.sqrLen([o[0]-.5-g,o[1]-.5-y])});else for(var k=0;k<4;k++){var M=(g<<1)+k%2,T=(y<<1)+(k>>1);u.push({aabb:m.aabb.quadrant(k),zoom:m.zoom+1,x:M,y:T,wrap:m.wrap,fullyVisible:v})}}return h.sort((function(t,e){return t.distanceSq-e.distanceSq})).map((function(t){return t.tileID}))},wr.prototype.resize=function(t,e){this.width=t,this.height=e,this.pixelsToGLUnits=[2/t,-2/e],this._constrain(),this._calcMatrices()},kr.unmodified.get=function(){return this._unmodified},wr.prototype.zoomScale=function(t){return Math.pow(2,t)},wr.prototype.scaleZoom=function(t){return Math.log(t)/Math.LN2},wr.prototype.project=function(e){var n=t.clamp(e.lat,-this.maxValidLatitude,this.maxValidLatitude);return new t.Point(t.mercatorXfromLng(e.lng)*this.worldSize,t.mercatorYfromLat(n)*this.worldSize)},wr.prototype.unproject=function(e){return new t.MercatorCoordinate(e.x/this.worldSize,e.y/this.worldSize).toLngLat()},kr.point.get=function(){return this.project(this.center)},wr.prototype.setLocationAtPoint=function(e,n){var r=this.pointCoordinate(n),i=this.pointCoordinate(this.centerPoint),a=this.locationCoordinate(e),o=new t.MercatorCoordinate(a.x-(r.x-i.x),a.y-(r.y-i.y));this.center=this.coordinateLocation(o),this._renderWorldCopies&&(this.center=this.center.wrap())},wr.prototype.locationPoint=function(t){return this.coordinatePoint(this.locationCoordinate(t))},wr.prototype.pointLocation=function(t){return this.coordinateLocation(this.pointCoordinate(t))},wr.prototype.locationCoordinate=function(e){return t.MercatorCoordinate.fromLngLat(e)},wr.prototype.coordinateLocation=function(t){return t.toLngLat()},wr.prototype.pointCoordinate=function(e){var n=[e.x,e.y,0,1],r=[e.x,e.y,1,1];t.transformMat4(n,n,this.pixelMatrixInverse),t.transformMat4(r,r,this.pixelMatrixInverse);var i=n[3],a=r[3],o=n[1]/i,s=r[1]/a,l=n[2]/i,c=r[2]/a,u=l===c?0:(0-l)/(c-l);return new t.MercatorCoordinate(t.number(n[0]/i,r[0]/a,u)/this.worldSize,t.number(o,s,u)/this.worldSize)},wr.prototype.coordinatePoint=function(e){var n=[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(n,n,this.pixelMatrix),new t.Point(n[0]/n[3],n[1]/n[3])},wr.prototype.getBounds=function(){return(new t.LngLatBounds).extend(this.pointLocation(new t.Point(0,0))).extend(this.pointLocation(new t.Point(this.width,0))).extend(this.pointLocation(new t.Point(this.width,this.height))).extend(this.pointLocation(new t.Point(0,this.height)))},wr.prototype.getMaxBounds=function(){return this.latRange&&2===this.latRange.length&&this.lngRange&&2===this.lngRange.length?new t.LngLatBounds([this.lngRange[0],this.latRange[0]],[this.lngRange[1],this.latRange[1]]):null},wr.prototype.setMaxBounds=function(t){t?(this.lngRange=[t.getWest(),t.getEast()],this.latRange=[t.getSouth(),t.getNorth()],this._constrain()):(this.lngRange=null,this.latRange=[-this.maxValidLatitude,this.maxValidLatitude])},wr.prototype.calculatePosMatrix=function(e,n){void 0===n&&(n=!1);var r=e.key,i=n?this._alignedPosMatrixCache:this._posMatrixCache;if(i[r])return i[r];var a=e.canonical,o=this.worldSize/this.zoomScale(a.z),s=a.x+Math.pow(2,a.z)*e.wrap,l=t.identity(new Float64Array(16));return t.translate(l,l,[s*o,a.y*o,0]),t.scale(l,l,[o/t.EXTENT,o/t.EXTENT,1]),t.multiply(l,n?this.alignedProjMatrix:this.projMatrix,l),i[r]=new Float32Array(l),i[r]},wr.prototype.customLayerMatrix=function(){return this.mercatorMatrix.slice()},wr.prototype._constrain=function(){if(this.center&&this.width&&this.height&&!this._constraining){this._constraining=!0;var e,n,r,i,a=-90,o=90,s=-180,l=180,c=this.size,u=this._unmodified;if(this.latRange){var h=this.latRange;a=t.mercatorYfromLat(h[1])*this.worldSize,e=(o=t.mercatorYfromLat(h[0])*this.worldSize)-a<c.y?c.y/(o-a):0}if(this.lngRange){var d=this.lngRange;s=t.mercatorXfromLng(d[0])*this.worldSize,n=(l=t.mercatorXfromLng(d[1])*this.worldSize)-s<c.x?c.x/(l-s):0}var f=this.point,p=Math.max(n||0,e||0);if(p)return this.center=this.unproject(new t.Point(n?(l+s)/2:f.x,e?(o+a)/2:f.y)),this.zoom+=this.scaleZoom(p),this._unmodified=u,void(this._constraining=!1);if(this.latRange){var m=f.y,g=c.y/2;m-g<a&&(i=a+g),m+g>o&&(i=o-g)}if(this.lngRange){var y=f.x,v=c.x/2;y-v<s&&(r=s+v),y+v>l&&(r=l-v)}void 0===r&&void 0===i||(this.center=this.unproject(new t.Point(void 0!==r?r:f.x,void 0!==i?i:f.y))),this._unmodified=u,this._constraining=!1}},wr.prototype._calcMatrices=function(){if(this.height){var e=this.centerOffset;this.cameraToCenterDistance=.5/Math.tan(this._fov/2)*this.height;var n=Math.PI/2+this._pitch,r=this._fov*(.5+e.y/this.height),i=Math.sin(r)*this.cameraToCenterDistance/Math.sin(t.clamp(Math.PI-n-r,.01,Math.PI-.01)),a=this.point,o=a.x,s=a.y,l=1.01*(Math.cos(Math.PI/2-this._pitch)*i+this.cameraToCenterDistance),c=this.height/50,u=new Float64Array(16);t.perspective(u,this._fov,this.width/this.height,c,l),u[8]=2*-e.x/this.width,u[9]=2*e.y/this.height,t.scale(u,u,[1,-1,1]),t.translate(u,u,[0,0,-this.cameraToCenterDistance]),t.rotateX(u,u,this._pitch),t.rotateZ(u,u,this.angle),t.translate(u,u,[-o,-s,0]),this.mercatorMatrix=t.scale([],u,[this.worldSize,this.worldSize,this.worldSize]),t.scale(u,u,[1,1,t.mercatorZfromAltitude(1,this.center.lat)*this.worldSize,1]),this.projMatrix=u,this.invProjMatrix=t.invert([],this.projMatrix);var h=this.width%2/2,d=this.height%2/2,f=Math.cos(this.angle),p=Math.sin(this.angle),m=o-Math.round(o)+f*h+p*d,g=s-Math.round(s)+f*d+p*h,y=new Float64Array(u);if(t.translate(y,y,[m>.5?m-1:m,g>.5?g-1:g,0]),this.alignedProjMatrix=y,u=t.create(),t.scale(u,u,[this.width/2,-this.height/2,1]),t.translate(u,u,[1,-1,0]),this.labelPlaneMatrix=u,u=t.create(),t.scale(u,u,[1,-1,1]),t.translate(u,u,[-1,-1,0]),t.scale(u,u,[2/this.width,2/this.height,1]),this.glCoordMatrix=u,this.pixelMatrix=t.multiply(new Float64Array(16),this.labelPlaneMatrix,this.projMatrix),!(u=t.invert(new Float64Array(16),this.pixelMatrix)))throw new Error(\"failed to invert matrix\");this.pixelMatrixInverse=u,this._posMatrixCache={},this._alignedPosMatrixCache={}}},wr.prototype.maxPitchScaleFactor=function(){if(!this.pixelMatrixInverse)return 1;var e=this.pointCoordinate(new t.Point(0,0)),n=[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(n,n,this.pixelMatrix)[3]/this.cameraToCenterDistance},wr.prototype.getCameraPoint=function(){var e=Math.tan(this._pitch)*(this.cameraToCenterDistance||1);return this.centerPoint.add(new t.Point(0,e))},wr.prototype.getCameraQueryGeometry=function(e){var n=this.getCameraPoint();if(1===e.length)return[e[0],n];for(var r=n.x,i=n.y,a=n.x,o=n.y,s=0,l=e;s<l.length;s+=1){var c=l[s];r=Math.min(r,c.x),i=Math.min(i,c.y),a=Math.max(a,c.x),o=Math.max(o,c.y)}return[new t.Point(r,i),new t.Point(a,i),new t.Point(a,o),new t.Point(r,o),new t.Point(r,i)]},Object.defineProperties(wr.prototype,kr);var Mr=function(e){var n,r,i,a;this._hashName=e&&encodeURIComponent(e),t.bindAll([\"_getCurrentHash\",\"_onHashChange\",\"_updateHash\"],this),this._updateHash=(n=this._updateHashUnthrottled.bind(this),r=!1,i=null,a=function(){i=null,r&&(n(),i=setTimeout(a,300),r=!1)},function(){return r=!0,i||a(),i})};Mr.prototype.addTo=function(e){return this._map=e,t.window.addEventListener(\"hashchange\",this._onHashChange,!1),this._map.on(\"moveend\",this._updateHash),this},Mr.prototype.remove=function(){return t.window.removeEventListener(\"hashchange\",this._onHashChange,!1),this._map.off(\"moveend\",this._updateHash),clearTimeout(this._updateHash()),delete this._map,this},Mr.prototype.getHashString=function(e){var n=this._map.getCenter(),r=Math.round(100*this._map.getZoom())/100,i=Math.ceil((r*Math.LN2+Math.log(512/360/.5))/Math.LN10),a=Math.pow(10,i),o=Math.round(n.lng*a)/a,s=Math.round(n.lat*a)/a,l=this._map.getBearing(),c=this._map.getPitch(),u=\"\";if(u+=e?\"/\"+o+\"/\"+s+\"/\"+r:r+\"/\"+s+\"/\"+o,(l||c)&&(u+=\"/\"+Math.round(10*l)/10),c&&(u+=\"/\"+Math.round(c)),this._hashName){var h=this._hashName,d=!1,f=t.window.location.hash.slice(1).split(\"&\").map((function(t){var e=t.split(\"=\")[0];return e===h?(d=!0,e+\"=\"+u):t})).filter((function(t){return t}));return d||f.push(h+\"=\"+u),\"#\"+f.join(\"&\")}return\"#\"+u},Mr.prototype._getCurrentHash=function(){var e,n=this,r=t.window.location.hash.replace(\"#\",\"\");return this._hashName?(r.split(\"&\").map((function(t){return t.split(\"=\")})).forEach((function(t){t[0]===n._hashName&&(e=t)})),(e&&e[1]||\"\").split(\"/\")):r.split(\"/\")},Mr.prototype._onHashChange=function(){var t=this._getCurrentHash();if(t.length>=3&&!t.some((function(t){return isNaN(t)}))){var e=this._map.dragRotate.isEnabled()&&this._map.touchZoomRotate.isEnabled()?+(t[3]||0):this._map.getBearing();return this._map.jumpTo({center:[+t[2],+t[1]],zoom:+t[0],bearing:e,pitch:+(t[4]||0)}),!0}return!1},Mr.prototype._updateHashUnthrottled=function(){var e=this.getHashString();try{t.window.history.replaceState(t.window.history.state,\"\",e)}catch(t){}};var Tr={linearity:.3,easing:t.bezier(0,0,.3,1)},Sr=t.extend({deceleration:2500,maxSpeed:1400},Tr),Ar=t.extend({deceleration:20,maxSpeed:1400},Tr),Lr=t.extend({deceleration:1e3,maxSpeed:360},Tr),Cr=t.extend({deceleration:1e3,maxSpeed:90},Tr),Er=function(t){this._map=t,this.clear()};function Or(t,e){(!t.duration||t.duration<e.duration)&&(t.duration=e.duration,t.easing=e.easing)}function Dr(e,n,r){var i=r.maxSpeed,a=r.linearity,o=r.deceleration,s=t.clamp(e*a/(n/1e3),-i,i),l=Math.abs(s)/(o*a);return{easing:r.easing,duration:1e3*l,amount:s*(l/2)}}Er.prototype.clear=function(){this._inertiaBuffer=[]},Er.prototype.record=function(e){this._drainInertiaBuffer(),this._inertiaBuffer.push({time:t.browser.now(),settings:e})},Er.prototype._drainInertiaBuffer=function(){for(var e=this._inertiaBuffer,n=t.browser.now();e.length>0&&n-e[0].time>160;)e.shift()},Er.prototype._onMoveEnd=function(e){if(this._drainInertiaBuffer(),!(this._inertiaBuffer.length<2)){for(var n={zoom:0,bearing:0,pitch:0,pan:new t.Point(0,0),pinchAround:void 0,around:void 0},r=0,i=this._inertiaBuffer;r<i.length;r+=1){var a=i[r].settings;n.zoom+=a.zoomDelta||0,n.bearing+=a.bearingDelta||0,n.pitch+=a.pitchDelta||0,a.panDelta&&n.pan._add(a.panDelta),a.around&&(n.around=a.around),a.pinchAround&&(n.pinchAround=a.pinchAround)}var o=this._inertiaBuffer[this._inertiaBuffer.length-1].time-this._inertiaBuffer[0].time,s={};if(n.pan.mag()){var l=Dr(n.pan.mag(),o,t.extend({},Sr,e||{}));s.offset=n.pan.mult(l.amount/n.pan.mag()),s.center=this._map.transform.center,Or(s,l)}if(n.zoom){var c=Dr(n.zoom,o,Ar);s.zoom=this._map.transform.zoom+c.amount,Or(s,c)}if(n.bearing){var u=Dr(n.bearing,o,Lr);s.bearing=this._map.transform.bearing+t.clamp(u.amount,-179,179),Or(s,u)}if(n.pitch){var h=Dr(n.pitch,o,Cr);s.pitch=this._map.transform.pitch+h.amount,Or(s,h)}if(s.zoom||s.bearing){var d=void 0===n.pinchAround?n.around:n.pinchAround;s.around=d?this._map.unproject(d):this._map.getCenter()}return this.clear(),t.extend(s,{noMoveStart:!0})}};var Ir=function(e){function r(r,i,a,o){void 0===o&&(o={});var s=n.mousePos(i.getCanvasContainer(),a),l=i.unproject(s);e.call(this,r,t.extend({point:s,lngLat:l,originalEvent:a},o)),this._defaultPrevented=!1,this.target=i}e&&(r.__proto__=e),(r.prototype=Object.create(e&&e.prototype)).constructor=r;var i={defaultPrevented:{configurable:!0}};return r.prototype.preventDefault=function(){this._defaultPrevented=!0},i.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(r.prototype,i),r}(t.Event),Pr=function(e){function r(r,i,a){var o=\"touchend\"===r?a.changedTouches:a.touches,s=n.touchPos(i.getCanvasContainer(),o),l=s.map((function(t){return i.unproject(t)})),c=s.reduce((function(t,e,n,r){return t.add(e.div(r.length))}),new t.Point(0,0)),u=i.unproject(c);e.call(this,r,{points:s,point:c,lngLats:l,lngLat:u,originalEvent:a}),this._defaultPrevented=!1}e&&(r.__proto__=e),(r.prototype=Object.create(e&&e.prototype)).constructor=r;var i={defaultPrevented:{configurable:!0}};return r.prototype.preventDefault=function(){this._defaultPrevented=!0},i.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(r.prototype,i),r}(t.Event),Rr=function(t){function e(e,n,r){t.call(this,e,{originalEvent:r}),this._defaultPrevented=!1}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var n={defaultPrevented:{configurable:!0}};return e.prototype.preventDefault=function(){this._defaultPrevented=!0},n.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(e.prototype,n),e}(t.Event),zr=function(t,e){this._map=t,this._clickTolerance=e.clickTolerance};zr.prototype.reset=function(){delete this._mousedownPos},zr.prototype.wheel=function(t){return this._firePreventable(new Rr(t.type,this._map,t))},zr.prototype.mousedown=function(t,e){return this._mousedownPos=e,this._firePreventable(new Ir(t.type,this._map,t))},zr.prototype.mouseup=function(t){this._map.fire(new Ir(t.type,this._map,t))},zr.prototype.click=function(t,e){this._mousedownPos&&this._mousedownPos.dist(e)>=this._clickTolerance||this._map.fire(new Ir(t.type,this._map,t))},zr.prototype.dblclick=function(t){return this._firePreventable(new Ir(t.type,this._map,t))},zr.prototype.mouseover=function(t){this._map.fire(new Ir(t.type,this._map,t))},zr.prototype.mouseout=function(t){this._map.fire(new Ir(t.type,this._map,t))},zr.prototype.touchstart=function(t){return this._firePreventable(new Pr(t.type,this._map,t))},zr.prototype.touchmove=function(t){this._map.fire(new Pr(t.type,this._map,t))},zr.prototype.touchend=function(t){this._map.fire(new Pr(t.type,this._map,t))},zr.prototype.touchcancel=function(t){this._map.fire(new Pr(t.type,this._map,t))},zr.prototype._firePreventable=function(t){if(this._map.fire(t),t.defaultPrevented)return{}},zr.prototype.isEnabled=function(){return!0},zr.prototype.isActive=function(){return!1},zr.prototype.enable=function(){},zr.prototype.disable=function(){};var jr=function(t){this._map=t};jr.prototype.reset=function(){this._delayContextMenu=!1,delete this._contextMenuEvent},jr.prototype.mousemove=function(t){this._map.fire(new Ir(t.type,this._map,t))},jr.prototype.mousedown=function(){this._delayContextMenu=!0},jr.prototype.mouseup=function(){this._delayContextMenu=!1,this._contextMenuEvent&&(this._map.fire(new Ir(\"contextmenu\",this._map,this._contextMenuEvent)),delete this._contextMenuEvent)},jr.prototype.contextmenu=function(t){this._delayContextMenu?this._contextMenuEvent=t:this._map.fire(new Ir(t.type,this._map,t)),this._map.listens(\"contextmenu\")&&t.preventDefault()},jr.prototype.isEnabled=function(){return!0},jr.prototype.isActive=function(){return!1},jr.prototype.enable=function(){},jr.prototype.disable=function(){};var Fr=function(t,e){this._map=t,this._el=t.getCanvasContainer(),this._container=t.getContainer(),this._clickTolerance=e.clickTolerance||1};function Nr(t,e){for(var n={},r=0;r<t.length;r++)n[t[r].identifier]=e[r];return n}Fr.prototype.isEnabled=function(){return!!this._enabled},Fr.prototype.isActive=function(){return!!this._active},Fr.prototype.enable=function(){this.isEnabled()||(this._enabled=!0)},Fr.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},Fr.prototype.mousedown=function(t,e){this.isEnabled()&&t.shiftKey&&0===t.button&&(n.disableDrag(),this._startPos=this._lastPos=e,this._active=!0)},Fr.prototype.mousemoveWindow=function(t,e){if(this._active){var r=e;if(!(this._lastPos.equals(r)||!this._box&&r.dist(this._startPos)<this._clickTolerance)){var i=this._startPos;this._lastPos=r,this._box||(this._box=n.create(\"div\",\"mapboxgl-boxzoom\",this._container),this._container.classList.add(\"mapboxgl-crosshair\"),this._fireEvent(\"boxzoomstart\",t));var a=Math.min(i.x,r.x),o=Math.max(i.x,r.x),s=Math.min(i.y,r.y),l=Math.max(i.y,r.y);n.setTransform(this._box,\"translate(\"+a+\"px,\"+s+\"px)\"),this._box.style.width=o-a+\"px\",this._box.style.height=l-s+\"px\"}}},Fr.prototype.mouseupWindow=function(e,r){var i=this;if(this._active&&0===e.button){var a=this._startPos,o=r;if(this.reset(),n.suppressClick(),a.x!==o.x||a.y!==o.y)return this._map.fire(new t.Event(\"boxzoomend\",{originalEvent:e})),{cameraAnimation:function(t){return t.fitScreenCoordinates(a,o,i._map.getBearing(),{linear:!0})}};this._fireEvent(\"boxzoomcancel\",e)}},Fr.prototype.keydown=function(t){this._active&&27===t.keyCode&&(this.reset(),this._fireEvent(\"boxzoomcancel\",t))},Fr.prototype.reset=function(){this._active=!1,this._container.classList.remove(\"mapboxgl-crosshair\"),this._box&&(n.remove(this._box),this._box=null),n.enableDrag(),delete this._startPos,delete this._lastPos},Fr.prototype._fireEvent=function(e,n){return this._map.fire(new t.Event(e,{originalEvent:n}))};var Br=function(t){this.reset(),this.numTouches=t.numTouches};Br.prototype.reset=function(){delete this.centroid,delete this.startTime,delete this.touches,this.aborted=!1},Br.prototype.touchstart=function(e,n,r){(this.centroid||r.length>this.numTouches)&&(this.aborted=!0),this.aborted||(void 0===this.startTime&&(this.startTime=e.timeStamp),r.length===this.numTouches&&(this.centroid=function(e){for(var n=new t.Point(0,0),r=0,i=e;r<i.length;r+=1)n._add(i[r]);return n.div(e.length)}(n),this.touches=Nr(r,n)))},Br.prototype.touchmove=function(t,e,n){if(!this.aborted&&this.centroid){var r=Nr(n,e);for(var i in this.touches){var a=r[i];(!a||a.dist(this.touches[i])>30)&&(this.aborted=!0)}}},Br.prototype.touchend=function(t,e,n){if((!this.centroid||t.timeStamp-this.startTime>500)&&(this.aborted=!0),0===n.length){var r=!this.aborted&&this.centroid;if(this.reset(),r)return r}};var Yr=function(t){this.singleTap=new Br(t),this.numTaps=t.numTaps,this.reset()};Yr.prototype.reset=function(){this.lastTime=1/0,delete this.lastTap,this.count=0,this.singleTap.reset()},Yr.prototype.touchstart=function(t,e,n){this.singleTap.touchstart(t,e,n)},Yr.prototype.touchmove=function(t,e,n){this.singleTap.touchmove(t,e,n)},Yr.prototype.touchend=function(t,e,n){var r=this.singleTap.touchend(t,e,n);if(r){var i=t.timeStamp-this.lastTime<500,a=!this.lastTap||this.lastTap.dist(r)<30;if(i&&a||this.reset(),this.count++,this.lastTime=t.timeStamp,this.lastTap=r,this.count===this.numTaps)return this.reset(),r}};var Hr=function(){this._zoomIn=new Yr({numTouches:1,numTaps:2}),this._zoomOut=new Yr({numTouches:2,numTaps:1}),this.reset()};Hr.prototype.reset=function(){this._active=!1,this._zoomIn.reset(),this._zoomOut.reset()},Hr.prototype.touchstart=function(t,e,n){this._zoomIn.touchstart(t,e,n),this._zoomOut.touchstart(t,e,n)},Hr.prototype.touchmove=function(t,e,n){this._zoomIn.touchmove(t,e,n),this._zoomOut.touchmove(t,e,n)},Hr.prototype.touchend=function(t,e,n){var r=this,i=this._zoomIn.touchend(t,e,n),a=this._zoomOut.touchend(t,e,n);return i?(this._active=!0,t.preventDefault(),setTimeout((function(){return r.reset()}),0),{cameraAnimation:function(e){return e.easeTo({duration:300,zoom:e.getZoom()+1,around:e.unproject(i)},{originalEvent:t})}}):a?(this._active=!0,t.preventDefault(),setTimeout((function(){return r.reset()}),0),{cameraAnimation:function(e){return e.easeTo({duration:300,zoom:e.getZoom()-1,around:e.unproject(a)},{originalEvent:t})}}):void 0},Hr.prototype.touchcancel=function(){this.reset()},Hr.prototype.enable=function(){this._enabled=!0},Hr.prototype.disable=function(){this._enabled=!1,this.reset()},Hr.prototype.isEnabled=function(){return this._enabled},Hr.prototype.isActive=function(){return this._active};var Vr=function(t){this.reset(),this._clickTolerance=t.clickTolerance||1};Vr.prototype.reset=function(){this._active=!1,this._moved=!1,delete this._lastPoint,delete this._eventButton},Vr.prototype._correctButton=function(t,e){return!1},Vr.prototype._move=function(t,e){return{}},Vr.prototype.mousedown=function(t,e){if(!this._lastPoint){var r=n.mouseButton(t);this._correctButton(t,r)&&(this._lastPoint=e,this._eventButton=r)}},Vr.prototype.mousemoveWindow=function(t,e){var n=this._lastPoint;if(n&&(t.preventDefault(),this._moved||!(e.dist(n)<this._clickTolerance)))return this._moved=!0,this._lastPoint=e,this._move(n,e)},Vr.prototype.mouseupWindow=function(t){n.mouseButton(t)===this._eventButton&&(this._moved&&n.suppressClick(),this.reset())},Vr.prototype.enable=function(){this._enabled=!0},Vr.prototype.disable=function(){this._enabled=!1,this.reset()},Vr.prototype.isEnabled=function(){return this._enabled},Vr.prototype.isActive=function(){return this._active};var Ur=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.mousedown=function(e,n){t.prototype.mousedown.call(this,e,n),this._lastPoint&&(this._active=!0)},e.prototype._correctButton=function(t,e){return 0===e&&!t.ctrlKey},e.prototype._move=function(t,e){return{around:e,panDelta:e.sub(t)}},e}(Vr),Wr=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._correctButton=function(t,e){return 0===e&&t.ctrlKey||2===e},e.prototype._move=function(t,e){var n=.8*(e.x-t.x);if(n)return this._active=!0,{bearingDelta:n}},e.prototype.contextmenu=function(t){t.preventDefault()},e}(Vr),qr=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._correctButton=function(t,e){return 0===e&&t.ctrlKey||2===e},e.prototype._move=function(t,e){var n=-.5*(e.y-t.y);if(n)return this._active=!0,{pitchDelta:n}},e.prototype.contextmenu=function(t){t.preventDefault()},e}(Vr),Gr=function(t){this._minTouches=1,this._clickTolerance=t.clickTolerance||1,this.reset()};Gr.prototype.reset=function(){this._active=!1,this._touches={},this._sum=new t.Point(0,0)},Gr.prototype.touchstart=function(t,e,n){return this._calculateTransform(t,e,n)},Gr.prototype.touchmove=function(t,e,n){if(this._active)return t.preventDefault(),this._calculateTransform(t,e,n)},Gr.prototype.touchend=function(t,e,n){this._calculateTransform(t,e,n),this._active&&n.length<this._minTouches&&this.reset()},Gr.prototype.touchcancel=function(){this.reset()},Gr.prototype._calculateTransform=function(e,n,r){r.length>0&&(this._active=!0);var i=Nr(r,n),a=new t.Point(0,0),o=new t.Point(0,0),s=0;for(var l in i){var c=i[l],u=this._touches[l];u&&(a._add(c),o._add(c.sub(u)),s++,i[l]=c)}if(this._touches=i,!(s<this._minTouches)&&o.mag()){var h=o.div(s);if(this._sum._add(h),!(this._sum.mag()<this._clickTolerance))return{around:a.div(s),panDelta:h}}},Gr.prototype.enable=function(){this._enabled=!0},Gr.prototype.disable=function(){this._enabled=!1,this.reset()},Gr.prototype.isEnabled=function(){return this._enabled},Gr.prototype.isActive=function(){return this._active};var Xr=function(){this.reset()};function Zr(t,e,n){for(var r=0;r<t.length;r++)if(t[r].identifier===n)return e[r]}function Jr(t,e){return Math.log(t/e)/Math.LN2}Xr.prototype.reset=function(){this._active=!1,delete this._firstTwoTouches},Xr.prototype._start=function(t){},Xr.prototype._move=function(t,e,n){return{}},Xr.prototype.touchstart=function(t,e,n){this._firstTwoTouches||n.length<2||(this._firstTwoTouches=[n[0].identifier,n[1].identifier],this._start([e[0],e[1]]))},Xr.prototype.touchmove=function(t,e,n){if(this._firstTwoTouches){t.preventDefault();var r=this._firstTwoTouches,i=r[1],a=Zr(n,e,r[0]),o=Zr(n,e,i);if(a&&o){var s=this._aroundCenter?null:a.add(o).div(2);return this._move([a,o],s,t)}}},Xr.prototype.touchend=function(t,e,r){if(this._firstTwoTouches){var i=this._firstTwoTouches,a=i[1],o=Zr(r,e,i[0]),s=Zr(r,e,a);o&&s||(this._active&&n.suppressClick(),this.reset())}},Xr.prototype.touchcancel=function(){this.reset()},Xr.prototype.enable=function(t){this._enabled=!0,this._aroundCenter=!!t&&\"center\"===t.around},Xr.prototype.disable=function(){this._enabled=!1,this.reset()},Xr.prototype.isEnabled=function(){return this._enabled},Xr.prototype.isActive=function(){return this._active};var Kr=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.reset=function(){t.prototype.reset.call(this),delete this._distance,delete this._startDistance},e.prototype._start=function(t){this._startDistance=this._distance=t[0].dist(t[1])},e.prototype._move=function(t,e){var n=this._distance;if(this._distance=t[0].dist(t[1]),this._active||!(Math.abs(Jr(this._distance,this._startDistance))<.1))return this._active=!0,{zoomDelta:Jr(this._distance,n),pinchAround:e}},e}(Xr);function $r(t,e){return 180*t.angleWith(e)/Math.PI}var Qr=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.reset=function(){t.prototype.reset.call(this),delete this._minDiameter,delete this._startVector,delete this._vector},e.prototype._start=function(t){this._startVector=this._vector=t[0].sub(t[1]),this._minDiameter=t[0].dist(t[1])},e.prototype._move=function(t,e){var n=this._vector;if(this._vector=t[0].sub(t[1]),this._active||!this._isBelowThreshold(this._vector))return this._active=!0,{bearingDelta:$r(this._vector,n),pinchAround:e}},e.prototype._isBelowThreshold=function(t){this._minDiameter=Math.min(this._minDiameter,t.mag());var e=25/(Math.PI*this._minDiameter)*360,n=$r(t,this._startVector);return Math.abs(n)<e},e}(Xr);function ti(t){return Math.abs(t.y)>Math.abs(t.x)}var ei=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.reset=function(){t.prototype.reset.call(this),this._valid=void 0,delete this._firstMove,delete this._lastPoints},e.prototype._start=function(t){this._lastPoints=t,ti(t[0].sub(t[1]))&&(this._valid=!1)},e.prototype._move=function(t,e,n){var r=t[0].sub(this._lastPoints[0]),i=t[1].sub(this._lastPoints[1]);if(this._valid=this.gestureBeginsVertically(r,i,n.timeStamp),this._valid)return this._lastPoints=t,this._active=!0,{pitchDelta:(r.y+i.y)/2*-.5}},e.prototype.gestureBeginsVertically=function(t,e,n){if(void 0!==this._valid)return this._valid;var r=t.mag()>=2,i=e.mag()>=2;if(r||i){if(!r||!i)return void 0===this._firstMove&&(this._firstMove=n),n-this._firstMove<100&&void 0;var a=t.y>0==e.y>0;return ti(t)&&ti(e)&&a}},e}(Xr),ni={panStep:100,bearingStep:15,pitchStep:10},ri=function(){var t=ni;this._panStep=t.panStep,this._bearingStep=t.bearingStep,this._pitchStep=t.pitchStep};function ii(t){return t*(2-t)}ri.prototype.reset=function(){this._active=!1},ri.prototype.keydown=function(t){var e=this;if(!(t.altKey||t.ctrlKey||t.metaKey)){var n=0,r=0,i=0,a=0,o=0;switch(t.keyCode){case 61:case 107:case 171:case 187:n=1;break;case 189:case 109:case 173:n=-1;break;case 37:t.shiftKey?r=-1:(t.preventDefault(),a=-1);break;case 39:t.shiftKey?r=1:(t.preventDefault(),a=1);break;case 38:t.shiftKey?i=1:(t.preventDefault(),o=-1);break;case 40:t.shiftKey?i=-1:(t.preventDefault(),o=1);break;default:return}return{cameraAnimation:function(s){var l=s.getZoom();s.easeTo({duration:300,easeId:\"keyboardHandler\",easing:ii,zoom:n?Math.round(l)+n*(t.shiftKey?2:1):l,bearing:s.getBearing()+r*e._bearingStep,pitch:s.getPitch()+i*e._pitchStep,offset:[-a*e._panStep,-o*e._panStep],center:s.getCenter()},{originalEvent:t})}}}},ri.prototype.enable=function(){this._enabled=!0},ri.prototype.disable=function(){this._enabled=!1,this.reset()},ri.prototype.isEnabled=function(){return this._enabled},ri.prototype.isActive=function(){return this._active};var ai=function(e,n){this._map=e,this._el=e.getCanvasContainer(),this._handler=n,this._delta=0,this._defaultZoomRate=.01,this._wheelZoomRate=1/450,t.bindAll([\"_onWheel\",\"_onTimeout\",\"_onScrollFrame\",\"_onScrollFinished\"],this)};ai.prototype.setZoomRate=function(t){this._defaultZoomRate=t},ai.prototype.setWheelZoomRate=function(t){this._wheelZoomRate=t},ai.prototype.isEnabled=function(){return!!this._enabled},ai.prototype.isActive=function(){return!!this._active||void 0!==this._finishTimeout},ai.prototype.isZooming=function(){return!!this._zooming},ai.prototype.enable=function(t){this.isEnabled()||(this._enabled=!0,this._aroundCenter=t&&\"center\"===t.around)},ai.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},ai.prototype.wheel=function(e){if(this.isEnabled()){var n=e.deltaMode===t.window.WheelEvent.DOM_DELTA_LINE?40*e.deltaY:e.deltaY,r=t.browser.now(),i=r-(this._lastWheelEventTime||0);this._lastWheelEventTime=r,0!==n&&n%4.000244140625==0?this._type=\"wheel\":0!==n&&Math.abs(n)<4?this._type=\"trackpad\":i>400?(this._type=null,this._lastValue=n,this._timeout=setTimeout(this._onTimeout,40,e)):this._type||(this._type=Math.abs(i*n)<200?\"trackpad\":\"wheel\",this._timeout&&(clearTimeout(this._timeout),this._timeout=null,n+=this._lastValue)),e.shiftKey&&n&&(n/=4),this._type&&(this._lastWheelEvent=e,this._delta-=n,this._active||this._start(e)),e.preventDefault()}},ai.prototype._onTimeout=function(t){this._type=\"wheel\",this._delta-=this._lastValue,this._active||this._start(t)},ai.prototype._start=function(e){if(this._delta){this._frameId&&(this._frameId=null),this._active=!0,this.isZooming()||(this._zooming=!0),this._finishTimeout&&(clearTimeout(this._finishTimeout),delete this._finishTimeout);var r=n.mousePos(this._el,e);this._around=t.LngLat.convert(this._aroundCenter?this._map.getCenter():this._map.unproject(r)),this._aroundPoint=this._map.transform.locationPoint(this._around),this._frameId||(this._frameId=!0,this._handler._triggerRenderFrame())}},ai.prototype.renderFrame=function(){return this._onScrollFrame()},ai.prototype._onScrollFrame=function(){var e=this;if(this._frameId&&(this._frameId=null,this.isActive())){var n=this._map.transform;if(0!==this._delta){var r=\"wheel\"===this._type&&Math.abs(this._delta)>4.000244140625?this._wheelZoomRate:this._defaultZoomRate,i=2/(1+Math.exp(-Math.abs(this._delta*r)));this._delta<0&&0!==i&&(i=1/i);var a=\"number\"==typeof this._targetZoom?n.zoomScale(this._targetZoom):n.scale;this._targetZoom=Math.min(n.maxZoom,Math.max(n.minZoom,n.scaleZoom(a*i))),\"wheel\"===this._type&&(this._startZoom=n.zoom,this._easing=this._smoothOutEasing(200)),this._delta=0}var o,s=\"number\"==typeof this._targetZoom?this._targetZoom:n.zoom,l=this._startZoom,c=this._easing,u=!1;if(\"wheel\"===this._type&&l&&c){var h=Math.min((t.browser.now()-this._lastWheelEventTime)/200,1),d=c(h);o=t.number(l,s,d),h<1?this._frameId||(this._frameId=!0):u=!0}else o=s,u=!0;return this._active=!0,u&&(this._active=!1,this._finishTimeout=setTimeout((function(){e._zooming=!1,e._handler._triggerRenderFrame(),delete e._targetZoom,delete e._finishTimeout}),200)),{noInertia:!0,needsRenderFrame:!u,zoomDelta:o-n.zoom,around:this._aroundPoint,originalEvent:this._lastWheelEvent}}},ai.prototype._smoothOutEasing=function(e){var n=t.ease;if(this._prevEase){var r=this._prevEase,i=(t.browser.now()-r.start)/r.duration,a=r.easing(i+.01)-r.easing(i),o=.27/Math.sqrt(a*a+1e-4)*.01,s=Math.sqrt(.0729-o*o);n=t.bezier(o,s,.25,1)}return this._prevEase={start:t.browser.now(),duration:e,easing:n},n},ai.prototype.reset=function(){this._active=!1};var oi=function(t,e){this._clickZoom=t,this._tapZoom=e};oi.prototype.enable=function(){this._clickZoom.enable(),this._tapZoom.enable()},oi.prototype.disable=function(){this._clickZoom.disable(),this._tapZoom.disable()},oi.prototype.isEnabled=function(){return this._clickZoom.isEnabled()&&this._tapZoom.isEnabled()},oi.prototype.isActive=function(){return this._clickZoom.isActive()||this._tapZoom.isActive()};var si=function(){this.reset()};si.prototype.reset=function(){this._active=!1},si.prototype.dblclick=function(t,e){return t.preventDefault(),{cameraAnimation:function(n){n.easeTo({duration:300,zoom:n.getZoom()+(t.shiftKey?-1:1),around:n.unproject(e)},{originalEvent:t})}}},si.prototype.enable=function(){this._enabled=!0},si.prototype.disable=function(){this._enabled=!1,this.reset()},si.prototype.isEnabled=function(){return this._enabled},si.prototype.isActive=function(){return this._active};var li=function(){this._tap=new Yr({numTouches:1,numTaps:1}),this.reset()};li.prototype.reset=function(){this._active=!1,delete this._swipePoint,delete this._swipeTouch,delete this._tapTime,this._tap.reset()},li.prototype.touchstart=function(t,e,n){this._swipePoint||(this._tapTime&&t.timeStamp-this._tapTime>500&&this.reset(),this._tapTime?n.length>0&&(this._swipePoint=e[0],this._swipeTouch=n[0].identifier):this._tap.touchstart(t,e,n))},li.prototype.touchmove=function(t,e,n){if(this._tapTime){if(this._swipePoint){if(n[0].identifier!==this._swipeTouch)return;var r=e[0],i=r.y-this._swipePoint.y;return this._swipePoint=r,t.preventDefault(),this._active=!0,{zoomDelta:i/128}}}else this._tap.touchmove(t,e,n)},li.prototype.touchend=function(t,e,n){this._tapTime?this._swipePoint&&0===n.length&&this.reset():this._tap.touchend(t,e,n)&&(this._tapTime=t.timeStamp)},li.prototype.touchcancel=function(){this.reset()},li.prototype.enable=function(){this._enabled=!0},li.prototype.disable=function(){this._enabled=!1,this.reset()},li.prototype.isEnabled=function(){return this._enabled},li.prototype.isActive=function(){return this._active};var ci=function(t,e,n){this._el=t,this._mousePan=e,this._touchPan=n};ci.prototype.enable=function(t){this._inertiaOptions=t||{},this._mousePan.enable(),this._touchPan.enable(),this._el.classList.add(\"mapboxgl-touch-drag-pan\")},ci.prototype.disable=function(){this._mousePan.disable(),this._touchPan.disable(),this._el.classList.remove(\"mapboxgl-touch-drag-pan\")},ci.prototype.isEnabled=function(){return this._mousePan.isEnabled()&&this._touchPan.isEnabled()},ci.prototype.isActive=function(){return this._mousePan.isActive()||this._touchPan.isActive()};var ui=function(t,e,n){this._pitchWithRotate=t.pitchWithRotate,this._mouseRotate=e,this._mousePitch=n};ui.prototype.enable=function(){this._mouseRotate.enable(),this._pitchWithRotate&&this._mousePitch.enable()},ui.prototype.disable=function(){this._mouseRotate.disable(),this._mousePitch.disable()},ui.prototype.isEnabled=function(){return this._mouseRotate.isEnabled()&&(!this._pitchWithRotate||this._mousePitch.isEnabled())},ui.prototype.isActive=function(){return this._mouseRotate.isActive()||this._mousePitch.isActive()};var hi=function(t,e,n,r){this._el=t,this._touchZoom=e,this._touchRotate=n,this._tapDragZoom=r,this._rotationDisabled=!1,this._enabled=!0};hi.prototype.enable=function(t){this._touchZoom.enable(t),this._rotationDisabled||this._touchRotate.enable(t),this._tapDragZoom.enable(),this._el.classList.add(\"mapboxgl-touch-zoom-rotate\")},hi.prototype.disable=function(){this._touchZoom.disable(),this._touchRotate.disable(),this._tapDragZoom.disable(),this._el.classList.remove(\"mapboxgl-touch-zoom-rotate\")},hi.prototype.isEnabled=function(){return this._touchZoom.isEnabled()&&(this._rotationDisabled||this._touchRotate.isEnabled())&&this._tapDragZoom.isEnabled()},hi.prototype.isActive=function(){return this._touchZoom.isActive()||this._touchRotate.isActive()||this._tapDragZoom.isActive()},hi.prototype.disableRotation=function(){this._rotationDisabled=!0,this._touchRotate.disable()},hi.prototype.enableRotation=function(){this._rotationDisabled=!1,this._touchZoom.isEnabled()&&this._touchRotate.enable()};var di=function(t){return t.zoom||t.drag||t.pitch||t.rotate},fi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e}(t.Event);function pi(t){return t.panDelta&&t.panDelta.mag()||t.zoomDelta||t.bearingDelta||t.pitchDelta}var mi=function(e,r){this._map=e,this._el=this._map.getCanvasContainer(),this._handlers=[],this._handlersById={},this._changes=[],this._inertia=new Er(e),this._bearingSnap=r.bearingSnap,this._previousActiveHandlers={},this._eventsInProgress={},this._addDefaultHandlers(r),t.bindAll([\"handleEvent\",\"handleWindowEvent\"],this);var i=this._el;this._listeners=[[i,\"touchstart\",{passive:!1}],[i,\"touchmove\",{passive:!1}],[i,\"touchend\",void 0],[i,\"touchcancel\",void 0],[i,\"mousedown\",void 0],[i,\"mousemove\",void 0],[i,\"mouseup\",void 0],[t.window.document,\"mousemove\",{capture:!0}],[t.window.document,\"mouseup\",void 0],[i,\"mouseover\",void 0],[i,\"mouseout\",void 0],[i,\"dblclick\",void 0],[i,\"click\",void 0],[i,\"keydown\",{capture:!1}],[i,\"keyup\",void 0],[i,\"wheel\",{passive:!1}],[i,\"contextmenu\",void 0],[t.window,\"blur\",void 0]];for(var a=0,o=this._listeners;a<o.length;a+=1){var s=o[a],l=s[0];n.addEventListener(l,s[1],l===t.window.document?this.handleWindowEvent:this.handleEvent,s[2])}};mi.prototype.destroy=function(){for(var e=0,r=this._listeners;e<r.length;e+=1){var i=r[e],a=i[0];n.removeEventListener(a,i[1],a===t.window.document?this.handleWindowEvent:this.handleEvent,i[2])}},mi.prototype._addDefaultHandlers=function(t){var e=this._map,n=e.getCanvasContainer();this._add(\"mapEvent\",new zr(e,t));var r=e.boxZoom=new Fr(e,t);this._add(\"boxZoom\",r);var i=new Hr,a=new si;e.doubleClickZoom=new oi(a,i),this._add(\"tapZoom\",i),this._add(\"clickZoom\",a);var o=new li;this._add(\"tapDragZoom\",o);var s=e.touchPitch=new ei;this._add(\"touchPitch\",s);var l=new Wr(t),c=new qr(t);e.dragRotate=new ui(t,l,c),this._add(\"mouseRotate\",l,[\"mousePitch\"]),this._add(\"mousePitch\",c,[\"mouseRotate\"]);var u=new Ur(t),h=new Gr(t);e.dragPan=new ci(n,u,h),this._add(\"mousePan\",u),this._add(\"touchPan\",h,[\"touchZoom\",\"touchRotate\"]);var d=new Qr,f=new Kr;e.touchZoomRotate=new hi(n,f,d,o),this._add(\"touchRotate\",d,[\"touchPan\",\"touchZoom\"]),this._add(\"touchZoom\",f,[\"touchPan\",\"touchRotate\"]);var p=e.scrollZoom=new ai(e,this);this._add(\"scrollZoom\",p,[\"mousePan\"]);var m=e.keyboard=new ri;this._add(\"keyboard\",m),this._add(\"blockableMapEvent\",new jr(e));for(var g=0,y=[\"boxZoom\",\"doubleClickZoom\",\"tapDragZoom\",\"touchPitch\",\"dragRotate\",\"dragPan\",\"touchZoomRotate\",\"scrollZoom\",\"keyboard\"];g<y.length;g+=1){var v=y[g];t.interactive&&t[v]&&e[v].enable(t[v])}},mi.prototype._add=function(t,e,n){this._handlers.push({handlerName:t,handler:e,allowed:n}),this._handlersById[t]=e},mi.prototype.stop=function(){if(!this._updatingCamera){for(var t=0,e=this._handlers;t<e.length;t+=1)e[t].handler.reset();this._inertia.clear(),this._fireEvents({},{}),this._changes=[]}},mi.prototype.isActive=function(){for(var t=0,e=this._handlers;t<e.length;t+=1)if(e[t].handler.isActive())return!0;return!1},mi.prototype.isZooming=function(){return!!this._eventsInProgress.zoom||this._map.scrollZoom.isZooming()},mi.prototype.isRotating=function(){return!!this._eventsInProgress.rotate},mi.prototype.isMoving=function(){return Boolean(di(this._eventsInProgress))||this.isZooming()},mi.prototype._blockedByActive=function(t,e,n){for(var r in t)if(r!==n&&(!e||e.indexOf(r)<0))return!0;return!1},mi.prototype.handleWindowEvent=function(t){this.handleEvent(t,t.type+\"Window\")},mi.prototype._getMapTouches=function(t){for(var e=[],n=0,r=t;n<r.length;n+=1){var i=r[n];this._el.contains(i.target)&&e.push(i)}return e},mi.prototype.handleEvent=function(t,e){if(\"blur\"!==t.type){this._updatingCamera=!0;for(var r=\"renderFrame\"===t.type?void 0:t,i={needsRenderFrame:!1},a={},o={},s=t.touches?this._getMapTouches(t.touches):void 0,l=s?n.touchPos(this._el,s):n.mousePos(this._el,t),c=0,u=this._handlers;c<u.length;c+=1){var h=u[c],d=h.handlerName,f=h.handler,p=h.allowed;if(f.isEnabled()){var m=void 0;this._blockedByActive(o,p,d)?f.reset():f[e||t.type]&&(m=f[e||t.type](t,l,s),this.mergeHandlerResult(i,a,m,d,r),m&&m.needsRenderFrame&&this._triggerRenderFrame()),(m||f.isActive())&&(o[d]=f)}}var g={};for(var y in this._previousActiveHandlers)o[y]||(g[y]=r);this._previousActiveHandlers=o,(Object.keys(g).length||pi(i))&&(this._changes.push([i,a,g]),this._triggerRenderFrame()),(Object.keys(o).length||pi(i))&&this._map._stop(!0),this._updatingCamera=!1;var v=i.cameraAnimation;v&&(this._inertia.clear(),this._fireEvents({},{}),this._changes=[],v(this._map))}else this.stop()},mi.prototype.mergeHandlerResult=function(e,n,r,i,a){if(r){t.extend(e,r);var o={handlerName:i,originalEvent:r.originalEvent||a};void 0!==r.zoomDelta&&(n.zoom=o),void 0!==r.panDelta&&(n.drag=o),void 0!==r.pitchDelta&&(n.pitch=o),void 0!==r.bearingDelta&&(n.rotate=o)}},mi.prototype._applyChanges=function(){for(var e={},n={},r={},i=0,a=this._changes;i<a.length;i+=1){var o=a[i],s=o[0],l=o[1],c=o[2];s.panDelta&&(e.panDelta=(e.panDelta||new t.Point(0,0))._add(s.panDelta)),s.zoomDelta&&(e.zoomDelta=(e.zoomDelta||0)+s.zoomDelta),s.bearingDelta&&(e.bearingDelta=(e.bearingDelta||0)+s.bearingDelta),s.pitchDelta&&(e.pitchDelta=(e.pitchDelta||0)+s.pitchDelta),void 0!==s.around&&(e.around=s.around),void 0!==s.pinchAround&&(e.pinchAround=s.pinchAround),s.noInertia&&(e.noInertia=s.noInertia),t.extend(n,l),t.extend(r,c)}this._updateMapTransform(e,n,r),this._changes=[]},mi.prototype._updateMapTransform=function(t,e,n){var r=this._map,i=r.transform;if(!pi(t))return this._fireEvents(e,n);var a=t.panDelta,o=t.zoomDelta,s=t.bearingDelta,l=t.pitchDelta,c=t.around,u=t.pinchAround;void 0!==u&&(c=u),r._stop(!0),c=c||r.transform.centerPoint;var h=i.pointLocation(a?c.sub(a):c);s&&(i.bearing+=s),l&&(i.pitch+=l),o&&(i.zoom+=o),i.setLocationAtPoint(h,c),this._map._update(),t.noInertia||this._inertia.record(t),this._fireEvents(e,n)},mi.prototype._fireEvents=function(e,n){var r=this,i=di(this._eventsInProgress),a=di(e),o={};for(var s in e)this._eventsInProgress[s]||(o[s+\"start\"]=e[s].originalEvent),this._eventsInProgress[s]=e[s];for(var l in!i&&a&&this._fireEvent(\"movestart\",a.originalEvent),o)this._fireEvent(l,o[l]);for(var c in e.rotate&&(this._bearingChanged=!0),a&&this._fireEvent(\"move\",a.originalEvent),e)this._fireEvent(c,e[c].originalEvent);var u,h={};for(var d in this._eventsInProgress){var f=this._eventsInProgress[d],p=f.handlerName,m=f.originalEvent;this._handlersById[p].isActive()||(delete this._eventsInProgress[d],h[d+\"end\"]=u=n[p]||m)}for(var g in h)this._fireEvent(g,h[g]);var y=di(this._eventsInProgress);if((i||a)&&!y){this._updatingCamera=!0;var v=this._inertia._onMoveEnd(this._map.dragPan._inertiaOptions),_=function(t){return 0!==t&&-r._bearingSnap<t&&t<r._bearingSnap};v?(_(v.bearing||this._map.getBearing())&&(v.bearing=0),this._map.easeTo(v,{originalEvent:u})):(this._map.fire(new t.Event(\"moveend\",{originalEvent:u})),_(this._map.getBearing())&&this._map.resetNorth()),this._bearingChanged=!1,this._updatingCamera=!1}},mi.prototype._fireEvent=function(e,n){this._map.fire(new t.Event(e,n?{originalEvent:n}:{}))},mi.prototype._triggerRenderFrame=function(){var t=this;void 0===this._frameId&&(this._frameId=this._map._requestRenderFrame((function(e){delete t._frameId,t.handleEvent(new fi(\"renderFrame\",{timeStamp:e})),t._applyChanges()})))};var gi=function(e){function n(n,r){e.call(this),this._moving=!1,this._zooming=!1,this.transform=n,this._bearingSnap=r.bearingSnap,t.bindAll([\"_renderFrameCallback\"],this)}return e&&(n.__proto__=e),(n.prototype=Object.create(e&&e.prototype)).constructor=n,n.prototype.getCenter=function(){return new t.LngLat(this.transform.center.lng,this.transform.center.lat)},n.prototype.setCenter=function(t,e){return this.jumpTo({center:t},e)},n.prototype.panBy=function(e,n,r){return e=t.Point.convert(e).mult(-1),this.panTo(this.transform.center,t.extend({offset:e},n),r)},n.prototype.panTo=function(e,n,r){return this.easeTo(t.extend({center:e},n),r)},n.prototype.getZoom=function(){return this.transform.zoom},n.prototype.setZoom=function(t,e){return this.jumpTo({zoom:t},e),this},n.prototype.zoomTo=function(e,n,r){return this.easeTo(t.extend({zoom:e},n),r)},n.prototype.zoomIn=function(t,e){return this.zoomTo(this.getZoom()+1,t,e),this},n.prototype.zoomOut=function(t,e){return this.zoomTo(this.getZoom()-1,t,e),this},n.prototype.getBearing=function(){return this.transform.bearing},n.prototype.setBearing=function(t,e){return this.jumpTo({bearing:t},e),this},n.prototype.getPadding=function(){return this.transform.padding},n.prototype.setPadding=function(t,e){return this.jumpTo({padding:t},e),this},n.prototype.rotateTo=function(e,n,r){return this.easeTo(t.extend({bearing:e},n),r)},n.prototype.resetNorth=function(e,n){return this.rotateTo(0,t.extend({duration:1e3},e),n),this},n.prototype.resetNorthPitch=function(e,n){return this.easeTo(t.extend({bearing:0,pitch:0,duration:1e3},e),n),this},n.prototype.snapToNorth=function(t,e){return Math.abs(this.getBearing())<this._bearingSnap?this.resetNorth(t,e):this},n.prototype.getPitch=function(){return this.transform.pitch},n.prototype.setPitch=function(t,e){return this.jumpTo({pitch:t},e),this},n.prototype.cameraForBounds=function(e,n){return e=t.LngLatBounds.convert(e),this._cameraForBoxAndBearing(e.getNorthWest(),e.getSouthEast(),0,n)},n.prototype._cameraForBoxAndBearing=function(e,n,r,i){var a={top:0,bottom:0,right:0,left:0};if(\"number\"==typeof(i=t.extend({padding:a,offset:[0,0],maxZoom:this.transform.maxZoom},i)).padding){var o=i.padding;i.padding={top:o,bottom:o,right:o,left:o}}i.padding=t.extend(a,i.padding);var s=this.transform,l=s.padding,c=s.project(t.LngLat.convert(e)),u=s.project(t.LngLat.convert(n)),h=c.rotate(-r*Math.PI/180),d=u.rotate(-r*Math.PI/180),f=new t.Point(Math.max(h.x,d.x),Math.max(h.y,d.y)),p=new t.Point(Math.min(h.x,d.x),Math.min(h.y,d.y)),m=f.sub(p),g=(s.width-(l.left+l.right+i.padding.left+i.padding.right))/m.x,y=(s.height-(l.top+l.bottom+i.padding.top+i.padding.bottom))/m.y;if(!(y<0||g<0)){var v=Math.min(s.scaleZoom(s.scale*Math.min(g,y)),i.maxZoom),_=t.Point.convert(i.offset),b=new t.Point(_.x+(i.padding.left-i.padding.right)/2,_.y+(i.padding.top-i.padding.bottom)/2).mult(s.scale/s.zoomScale(v));return{center:s.unproject(c.add(u).div(2).sub(b)),zoom:v,bearing:r}}t.warnOnce(\"Map cannot fit within canvas with the given bounds, padding, and/or offset.\")},n.prototype.fitBounds=function(t,e,n){return this._fitInternal(this.cameraForBounds(t,e),e,n)},n.prototype.fitScreenCoordinates=function(e,n,r,i,a){return this._fitInternal(this._cameraForBoxAndBearing(this.transform.pointLocation(t.Point.convert(e)),this.transform.pointLocation(t.Point.convert(n)),r,i),i,a)},n.prototype._fitInternal=function(e,n,r){return e?(delete(n=t.extend(e,n)).padding,n.linear?this.easeTo(n,r):this.flyTo(n,r)):this},n.prototype.jumpTo=function(e,n){this.stop();var r=this.transform,i=!1,a=!1,o=!1;return\"zoom\"in e&&r.zoom!==+e.zoom&&(i=!0,r.zoom=+e.zoom),void 0!==e.center&&(r.center=t.LngLat.convert(e.center)),\"bearing\"in e&&r.bearing!==+e.bearing&&(a=!0,r.bearing=+e.bearing),\"pitch\"in e&&r.pitch!==+e.pitch&&(o=!0,r.pitch=+e.pitch),null==e.padding||r.isPaddingEqual(e.padding)||(r.padding=e.padding),this.fire(new t.Event(\"movestart\",n)).fire(new t.Event(\"move\",n)),i&&this.fire(new t.Event(\"zoomstart\",n)).fire(new t.Event(\"zoom\",n)).fire(new t.Event(\"zoomend\",n)),a&&this.fire(new t.Event(\"rotatestart\",n)).fire(new t.Event(\"rotate\",n)).fire(new t.Event(\"rotateend\",n)),o&&this.fire(new t.Event(\"pitchstart\",n)).fire(new t.Event(\"pitch\",n)).fire(new t.Event(\"pitchend\",n)),this.fire(new t.Event(\"moveend\",n))},n.prototype.easeTo=function(e,n){var r=this;this._stop(!1,e.easeId),(!1===(e=t.extend({offset:[0,0],duration:500,easing:t.ease},e)).animate||!e.essential&&t.browser.prefersReducedMotion)&&(e.duration=0);var i=this.transform,a=this.getZoom(),o=this.getBearing(),s=this.getPitch(),l=this.getPadding(),c=\"zoom\"in e?+e.zoom:a,u=\"bearing\"in e?this._normalizeBearing(e.bearing,o):o,h=\"pitch\"in e?+e.pitch:s,d=\"padding\"in e?e.padding:i.padding,f=t.Point.convert(e.offset),p=i.centerPoint.add(f),m=i.pointLocation(p),g=t.LngLat.convert(e.center||m);this._normalizeCenter(g);var y,v,_=i.project(m),b=i.project(g).sub(_),x=i.zoomScale(c-a);e.around&&(y=t.LngLat.convert(e.around),v=i.locationPoint(y));var w={moving:this._moving,zooming:this._zooming,rotating:this._rotating,pitching:this._pitching};return this._zooming=this._zooming||c!==a,this._rotating=this._rotating||o!==u,this._pitching=this._pitching||h!==s,this._padding=!i.isPaddingEqual(d),this._easeId=e.easeId,this._prepareEase(n,e.noMoveStart,w),clearTimeout(this._easeEndTimeoutID),this._ease((function(e){if(r._zooming&&(i.zoom=t.number(a,c,e)),r._rotating&&(i.bearing=t.number(o,u,e)),r._pitching&&(i.pitch=t.number(s,h,e)),r._padding&&(i.interpolatePadding(l,d,e),p=i.centerPoint.add(f)),y)i.setLocationAtPoint(y,v);else{var m=i.zoomScale(i.zoom-a),g=c>a?Math.min(2,x):Math.max(.5,x),w=Math.pow(g,1-e),k=i.unproject(_.add(b.mult(e*w)).mult(m));i.setLocationAtPoint(i.renderWorldCopies?k.wrap():k,p)}r._fireMoveEvents(n)}),(function(t){r._afterEase(n,t)}),e),this},n.prototype._prepareEase=function(e,n,r){void 0===r&&(r={}),this._moving=!0,n||r.moving||this.fire(new t.Event(\"movestart\",e)),this._zooming&&!r.zooming&&this.fire(new t.Event(\"zoomstart\",e)),this._rotating&&!r.rotating&&this.fire(new t.Event(\"rotatestart\",e)),this._pitching&&!r.pitching&&this.fire(new t.Event(\"pitchstart\",e))},n.prototype._fireMoveEvents=function(e){this.fire(new t.Event(\"move\",e)),this._zooming&&this.fire(new t.Event(\"zoom\",e)),this._rotating&&this.fire(new t.Event(\"rotate\",e)),this._pitching&&this.fire(new t.Event(\"pitch\",e))},n.prototype._afterEase=function(e,n){if(!this._easeId||!n||this._easeId!==n){delete this._easeId;var r=this._zooming,i=this._rotating,a=this._pitching;this._moving=!1,this._zooming=!1,this._rotating=!1,this._pitching=!1,this._padding=!1,r&&this.fire(new t.Event(\"zoomend\",e)),i&&this.fire(new t.Event(\"rotateend\",e)),a&&this.fire(new t.Event(\"pitchend\",e)),this.fire(new t.Event(\"moveend\",e))}},n.prototype.flyTo=function(e,n){var r=this;if(!e.essential&&t.browser.prefersReducedMotion){var i=t.pick(e,[\"center\",\"zoom\",\"bearing\",\"pitch\",\"around\"]);return this.jumpTo(i,n)}this.stop(),e=t.extend({offset:[0,0],speed:1.2,curve:1.42,easing:t.ease},e);var a=this.transform,o=this.getZoom(),s=this.getBearing(),l=this.getPitch(),c=this.getPadding(),u=\"zoom\"in e?t.clamp(+e.zoom,a.minZoom,a.maxZoom):o,h=\"bearing\"in e?this._normalizeBearing(e.bearing,s):s,d=\"pitch\"in e?+e.pitch:l,f=\"padding\"in e?e.padding:a.padding,p=a.zoomScale(u-o),m=t.Point.convert(e.offset),g=a.centerPoint.add(m),y=a.pointLocation(g),v=t.LngLat.convert(e.center||y);this._normalizeCenter(v);var _=a.project(y),b=a.project(v).sub(_),x=e.curve,w=Math.max(a.width,a.height),k=w/p,M=b.mag();if(\"minZoom\"in e){var T=t.clamp(Math.min(e.minZoom,o,u),a.minZoom,a.maxZoom),S=w/a.zoomScale(T-o);x=Math.sqrt(S/M*2)}var A=x*x;function L(t){var e=(k*k-w*w+(t?-1:1)*A*A*M*M)/(2*(t?k:w)*A*M);return Math.log(Math.sqrt(e*e+1)-e)}function C(t){return(Math.exp(t)-Math.exp(-t))/2}function E(t){return(Math.exp(t)+Math.exp(-t))/2}var O=L(0),D=function(t){return E(O)/E(O+x*t)},I=function(t){return w*((E(O)*(C(e=O+x*t)/E(e))-C(O))/A)/M;var e},P=(L(1)-O)/x;if(Math.abs(M)<1e-6||!isFinite(P)){if(Math.abs(w-k)<1e-6)return this.easeTo(e,n);var R=k<w?-1:1;P=Math.abs(Math.log(k/w))/x,I=function(){return 0},D=function(t){return Math.exp(R*x*t)}}return e.duration=\"duration\"in e?+e.duration:1e3*P/(\"screenSpeed\"in e?+e.screenSpeed/x:+e.speed),e.maxDuration&&e.duration>e.maxDuration&&(e.duration=0),this._zooming=!0,this._rotating=s!==h,this._pitching=d!==l,this._padding=!a.isPaddingEqual(f),this._prepareEase(n,!1),this._ease((function(e){var i=e*P,p=1/D(i);a.zoom=1===e?u:o+a.scaleZoom(p),r._rotating&&(a.bearing=t.number(s,h,e)),r._pitching&&(a.pitch=t.number(l,d,e)),r._padding&&(a.interpolatePadding(c,f,e),g=a.centerPoint.add(m));var y=1===e?v:a.unproject(_.add(b.mult(I(i))).mult(p));a.setLocationAtPoint(a.renderWorldCopies?y.wrap():y,g),r._fireMoveEvents(n)}),(function(){return r._afterEase(n)}),e),this},n.prototype.isEasing=function(){return!!this._easeFrameId},n.prototype.stop=function(){return this._stop()},n.prototype._stop=function(t,e){if(this._easeFrameId&&(this._cancelRenderFrame(this._easeFrameId),delete this._easeFrameId,delete this._onEaseFrame),this._onEaseEnd){var n=this._onEaseEnd;delete this._onEaseEnd,n.call(this,e)}if(!t){var r=this.handlers;r&&r.stop()}return this},n.prototype._ease=function(e,n,r){!1===r.animate||0===r.duration?(e(1),n()):(this._easeStart=t.browser.now(),this._easeOptions=r,this._onEaseFrame=e,this._onEaseEnd=n,this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback))},n.prototype._renderFrameCallback=function(){var e=Math.min((t.browser.now()-this._easeStart)/this._easeOptions.duration,1);this._onEaseFrame(this._easeOptions.easing(e)),e<1?this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback):this.stop()},n.prototype._normalizeBearing=function(e,n){e=t.wrap(e,-180,180);var r=Math.abs(e-n);return Math.abs(e-360-n)<r&&(e-=360),Math.abs(e+360-n)<r&&(e+=360),e},n.prototype._normalizeCenter=function(t){var e=this.transform;if(e.renderWorldCopies&&!e.lngRange){var n=t.lng-e.center.lng;t.lng+=n>180?-360:n<-180?360:0}},n}(t.Evented),yi=function(e){void 0===e&&(e={}),this.options=e,t.bindAll([\"_updateEditLink\",\"_updateData\",\"_updateCompact\"],this)};yi.prototype.getDefaultPosition=function(){return\"bottom-right\"},yi.prototype.onAdd=function(t){var e=this.options&&this.options.compact;return this._map=t,this._container=n.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-attrib\"),this._innerContainer=n.create(\"div\",\"mapboxgl-ctrl-attrib-inner\",this._container),e&&this._container.classList.add(\"mapboxgl-compact\"),this._updateAttributions(),this._updateEditLink(),this._map.on(\"styledata\",this._updateData),this._map.on(\"sourcedata\",this._updateData),this._map.on(\"moveend\",this._updateEditLink),void 0===e&&(this._map.on(\"resize\",this._updateCompact),this._updateCompact()),this._container},yi.prototype.onRemove=function(){n.remove(this._container),this._map.off(\"styledata\",this._updateData),this._map.off(\"sourcedata\",this._updateData),this._map.off(\"moveend\",this._updateEditLink),this._map.off(\"resize\",this._updateCompact),this._map=void 0,this._attribHTML=void 0},yi.prototype._updateEditLink=function(){var e=this._editLink;e||(e=this._editLink=this._container.querySelector(\".mapbox-improve-map\"));var n=[{key:\"owner\",value:this.styleOwner},{key:\"id\",value:this.styleId},{key:\"access_token\",value:this._map._requestManager._customAccessToken||t.config.ACCESS_TOKEN}];if(e){var r=n.reduce((function(t,e,r){return e.value&&(t+=e.key+\"=\"+e.value+(r<n.length-1?\"&\":\"\")),t}),\"?\");e.href=t.config.FEEDBACK_URL+\"/\"+r+(this._map._hash?this._map._hash.getHashString(!0):\"\"),e.rel=\"noopener nofollow\"}},yi.prototype._updateData=function(t){!t||\"metadata\"!==t.sourceDataType&&\"style\"!==t.dataType||(this._updateAttributions(),this._updateEditLink())},yi.prototype._updateAttributions=function(){if(this._map.style){var t=[];if(this.options.customAttribution&&(Array.isArray(this.options.customAttribution)?t=t.concat(this.options.customAttribution.map((function(t){return\"string\"!=typeof t?\"\":t}))):\"string\"==typeof this.options.customAttribution&&t.push(this.options.customAttribution)),this._map.style.stylesheet){var e=this._map.style.stylesheet;this.styleOwner=e.owner,this.styleId=e.id}var n=this._map.style.sourceCaches;for(var r in n){var i=n[r];if(i.used){var a=i.getSource();a.attribution&&t.indexOf(a.attribution)<0&&t.push(a.attribution)}}t.sort((function(t,e){return t.length-e.length}));var o=(t=t.filter((function(e,n){for(var r=n+1;r<t.length;r++)if(t[r].indexOf(e)>=0)return!1;return!0}))).join(\" | \");o!==this._attribHTML&&(this._attribHTML=o,t.length?(this._innerContainer.innerHTML=o,this._container.classList.remove(\"mapboxgl-attrib-empty\")):this._container.classList.add(\"mapboxgl-attrib-empty\"),this._editLink=null)}},yi.prototype._updateCompact=function(){this._map.getCanvasContainer().offsetWidth<=640?this._container.classList.add(\"mapboxgl-compact\"):this._container.classList.remove(\"mapboxgl-compact\")};var vi=function(){t.bindAll([\"_updateLogo\"],this),t.bindAll([\"_updateCompact\"],this)};vi.prototype.onAdd=function(t){this._map=t,this._container=n.create(\"div\",\"mapboxgl-ctrl\");var e=n.create(\"a\",\"mapboxgl-ctrl-logo\");return e.target=\"_blank\",e.rel=\"noopener nofollow\",e.href=\"https://www.mapbox.com/\",e.setAttribute(\"aria-label\",this._map._getUIString(\"LogoControl.Title\")),e.setAttribute(\"rel\",\"noopener nofollow\"),this._container.appendChild(e),this._container.style.display=\"none\",this._map.on(\"sourcedata\",this._updateLogo),this._updateLogo(),this._map.on(\"resize\",this._updateCompact),this._updateCompact(),this._container},vi.prototype.onRemove=function(){n.remove(this._container),this._map.off(\"sourcedata\",this._updateLogo),this._map.off(\"resize\",this._updateCompact)},vi.prototype.getDefaultPosition=function(){return\"bottom-left\"},vi.prototype._updateLogo=function(t){t&&\"metadata\"!==t.sourceDataType||(this._container.style.display=this._logoRequired()?\"block\":\"none\")},vi.prototype._logoRequired=function(){if(this._map.style){var t=this._map.style.sourceCaches;for(var e in t)if(t[e].getSource().mapbox_logo)return!0;return!1}},vi.prototype._updateCompact=function(){var t=this._container.children;if(t.length){var e=t[0];this._map.getCanvasContainer().offsetWidth<250?e.classList.add(\"mapboxgl-compact\"):e.classList.remove(\"mapboxgl-compact\")}};var _i=function(){this._queue=[],this._id=0,this._cleared=!1,this._currentlyRunning=!1};_i.prototype.add=function(t){var e=++this._id;return this._queue.push({callback:t,id:e,cancelled:!1}),e},_i.prototype.remove=function(t){for(var e=this._currentlyRunning,n=0,r=e?this._queue.concat(e):this._queue;n<r.length;n+=1){var i=r[n];if(i.id===t)return void(i.cancelled=!0)}},_i.prototype.run=function(t){void 0===t&&(t=0);var e=this._currentlyRunning=this._queue;this._queue=[];for(var n=0,r=e;n<r.length;n+=1){var i=r[n];if(!i.cancelled&&(i.callback(t),this._cleared))break}this._cleared=!1,this._currentlyRunning=!1},_i.prototype.clear=function(){this._currentlyRunning&&(this._cleared=!0),this._queue=[]};var bi={\"FullscreenControl.Enter\":\"Enter fullscreen\",\"FullscreenControl.Exit\":\"Exit fullscreen\",\"GeolocateControl.FindMyLocation\":\"Find my location\",\"GeolocateControl.LocationNotAvailable\":\"Location not available\",\"LogoControl.Title\":\"Mapbox logo\",\"NavigationControl.ResetBearing\":\"Reset bearing to north\",\"NavigationControl.ZoomIn\":\"Zoom in\",\"NavigationControl.ZoomOut\":\"Zoom out\",\"ScaleControl.Feet\":\"ft\",\"ScaleControl.Meters\":\"m\",\"ScaleControl.Kilometers\":\"km\",\"ScaleControl.Miles\":\"mi\",\"ScaleControl.NauticalMiles\":\"nm\"},xi=t.window.HTMLImageElement,wi=t.window.HTMLElement,ki=t.window.ImageBitmap,Mi={center:[0,0],zoom:0,bearing:0,pitch:0,minZoom:-2,maxZoom:22,minPitch:0,maxPitch:60,interactive:!0,scrollZoom:!0,boxZoom:!0,dragRotate:!0,dragPan:!0,keyboard:!0,doubleClickZoom:!0,touchZoomRotate:!0,touchPitch:!0,bearingSnap:7,clickTolerance:3,pitchWithRotate:!0,hash:!1,attributionControl:!0,failIfMajorPerformanceCaveat:!1,preserveDrawingBuffer:!1,trackResize:!0,renderWorldCopies:!0,refreshExpiredTiles:!0,maxTileCacheSize:null,localIdeographFontFamily:\"sans-serif\",transformRequest:null,accessToken:null,fadeDuration:300,crossSourceCollisions:!0},Ti=function(r){function i(e){var n=this;if(null!=(e=t.extend({},Mi,e)).minZoom&&null!=e.maxZoom&&e.minZoom>e.maxZoom)throw new Error(\"maxZoom must be greater than or equal to minZoom\");if(null!=e.minPitch&&null!=e.maxPitch&&e.minPitch>e.maxPitch)throw new Error(\"maxPitch must be greater than or equal to minPitch\");if(null!=e.minPitch&&e.minPitch<0)throw new Error(\"minPitch must be greater than or equal to 0\");if(null!=e.maxPitch&&e.maxPitch>60)throw new Error(\"maxPitch must be less than or equal to 60\");var i=new wr(e.minZoom,e.maxZoom,e.minPitch,e.maxPitch,e.renderWorldCopies);if(r.call(this,i,e),this._interactive=e.interactive,this._maxTileCacheSize=e.maxTileCacheSize,this._failIfMajorPerformanceCaveat=e.failIfMajorPerformanceCaveat,this._preserveDrawingBuffer=e.preserveDrawingBuffer,this._antialias=e.antialias,this._trackResize=e.trackResize,this._bearingSnap=e.bearingSnap,this._refreshExpiredTiles=e.refreshExpiredTiles,this._fadeDuration=e.fadeDuration,this._crossSourceCollisions=e.crossSourceCollisions,this._crossFadingFactor=1,this._collectResourceTiming=e.collectResourceTiming,this._renderTaskQueue=new _i,this._controls=[],this._mapId=t.uniqueId(),this._locale=t.extend({},bi,e.locale),this._requestManager=new t.RequestManager(e.transformRequest,e.accessToken),\"string\"==typeof e.container){if(this._container=t.window.document.getElementById(e.container),!this._container)throw new Error(\"Container '\"+e.container+\"' not found.\")}else{if(!(e.container instanceof wi))throw new Error(\"Invalid type: 'container' must be a String or HTMLElement.\");this._container=e.container}if(e.maxBounds&&this.setMaxBounds(e.maxBounds),t.bindAll([\"_onWindowOnline\",\"_onWindowResize\",\"_contextLost\",\"_contextRestored\"],this),this._setupContainer(),this._setupPainter(),void 0===this.painter)throw new Error(\"Failed to initialize WebGL.\");this.on(\"move\",(function(){return n._update(!1)})),this.on(\"moveend\",(function(){return n._update(!1)})),this.on(\"zoom\",(function(){return n._update(!0)})),void 0!==t.window&&(t.window.addEventListener(\"online\",this._onWindowOnline,!1),t.window.addEventListener(\"resize\",this._onWindowResize,!1)),this.handlers=new mi(this,e),this._hash=e.hash&&new Mr(\"string\"==typeof e.hash&&e.hash||void 0).addTo(this),this._hash&&this._hash._onHashChange()||(this.jumpTo({center:e.center,zoom:e.zoom,bearing:e.bearing,pitch:e.pitch}),e.bounds&&(this.resize(),this.fitBounds(e.bounds,t.extend({},e.fitBoundsOptions,{duration:0})))),this.resize(),this._localIdeographFontFamily=e.localIdeographFontFamily,e.style&&this.setStyle(e.style,{localIdeographFontFamily:e.localIdeographFontFamily}),e.attributionControl&&this.addControl(new yi({customAttribution:e.customAttribution})),this.addControl(new vi,e.logoPosition),this.on(\"style.load\",(function(){n.transform.unmodified&&n.jumpTo(n.style.stylesheet)})),this.on(\"data\",(function(e){n._update(\"style\"===e.dataType),n.fire(new t.Event(e.dataType+\"data\",e))})),this.on(\"dataloading\",(function(e){n.fire(new t.Event(e.dataType+\"dataloading\",e))}))}r&&(i.__proto__=r),(i.prototype=Object.create(r&&r.prototype)).constructor=i;var a={showTileBoundaries:{configurable:!0},showPadding:{configurable:!0},showCollisionBoxes:{configurable:!0},showOverdrawInspector:{configurable:!0},repaint:{configurable:!0},vertices:{configurable:!0},version:{configurable:!0}};return i.prototype._getMapId=function(){return this._mapId},i.prototype.addControl=function(e,n){if(void 0===n&&e.getDefaultPosition&&(n=e.getDefaultPosition()),void 0===n&&(n=\"top-right\"),!e||!e.onAdd)return this.fire(new t.ErrorEvent(new Error(\"Invalid argument to map.addControl(). Argument must be a control with onAdd and onRemove methods.\")));var r=e.onAdd(this);this._controls.push(e);var i=this._controlPositions[n];return-1!==n.indexOf(\"bottom\")?i.insertBefore(r,i.firstChild):i.appendChild(r),this},i.prototype.removeControl=function(e){if(!e||!e.onRemove)return this.fire(new t.ErrorEvent(new Error(\"Invalid argument to map.removeControl(). Argument must be a control with onAdd and onRemove methods.\")));var n=this._controls.indexOf(e);return n>-1&&this._controls.splice(n,1),e.onRemove(this),this},i.prototype.resize=function(e){var n=this._containerDimensions(),r=n[0],i=n[1];this._resizeCanvas(r,i),this.transform.resize(r,i),this.painter.resize(r,i);var a=!this._moving;return a&&(this.stop(),this.fire(new t.Event(\"movestart\",e)).fire(new t.Event(\"move\",e))),this.fire(new t.Event(\"resize\",e)),a&&this.fire(new t.Event(\"moveend\",e)),this},i.prototype.getBounds=function(){return this.transform.getBounds()},i.prototype.getMaxBounds=function(){return this.transform.getMaxBounds()},i.prototype.setMaxBounds=function(e){return this.transform.setMaxBounds(t.LngLatBounds.convert(e)),this._update()},i.prototype.setMinZoom=function(t){if((t=null==t?-2:t)>=-2&&t<=this.transform.maxZoom)return this.transform.minZoom=t,this._update(),this.getZoom()<t&&this.setZoom(t),this;throw new Error(\"minZoom must be between -2 and the current maxZoom, inclusive\")},i.prototype.getMinZoom=function(){return this.transform.minZoom},i.prototype.setMaxZoom=function(t){if((t=null==t?22:t)>=this.transform.minZoom)return this.transform.maxZoom=t,this._update(),this.getZoom()>t&&this.setZoom(t),this;throw new Error(\"maxZoom must be greater than the current minZoom\")},i.prototype.getMaxZoom=function(){return this.transform.maxZoom},i.prototype.setMinPitch=function(t){if((t=null==t?0:t)<0)throw new Error(\"minPitch must be greater than or equal to 0\");if(t>=0&&t<=this.transform.maxPitch)return this.transform.minPitch=t,this._update(),this.getPitch()<t&&this.setPitch(t),this;throw new Error(\"minPitch must be between 0 and the current maxPitch, inclusive\")},i.prototype.getMinPitch=function(){return this.transform.minPitch},i.prototype.setMaxPitch=function(t){if((t=null==t?60:t)>60)throw new Error(\"maxPitch must be less than or equal to 60\");if(t>=this.transform.minPitch)return this.transform.maxPitch=t,this._update(),this.getPitch()>t&&this.setPitch(t),this;throw new Error(\"maxPitch must be greater than the current minPitch\")},i.prototype.getMaxPitch=function(){return this.transform.maxPitch},i.prototype.getRenderWorldCopies=function(){return this.transform.renderWorldCopies},i.prototype.setRenderWorldCopies=function(t){return this.transform.renderWorldCopies=t,this._update()},i.prototype.project=function(e){return this.transform.locationPoint(t.LngLat.convert(e))},i.prototype.unproject=function(e){return this.transform.pointLocation(t.Point.convert(e))},i.prototype.isMoving=function(){return this._moving||this.handlers.isMoving()},i.prototype.isZooming=function(){return this._zooming||this.handlers.isZooming()},i.prototype.isRotating=function(){return this._rotating||this.handlers.isRotating()},i.prototype._createDelegatedListener=function(t,e,n){var r,i=this;if(\"mouseenter\"===t||\"mouseover\"===t){var a=!1;return{layer:e,listener:n,delegates:{mousemove:function(r){var o=i.getLayer(e)?i.queryRenderedFeatures(r.point,{layers:[e]}):[];o.length?a||(a=!0,n.call(i,new Ir(t,i,r.originalEvent,{features:o}))):a=!1},mouseout:function(){a=!1}}}}if(\"mouseleave\"===t||\"mouseout\"===t){var o=!1;return{layer:e,listener:n,delegates:{mousemove:function(r){(i.getLayer(e)?i.queryRenderedFeatures(r.point,{layers:[e]}):[]).length?o=!0:o&&(o=!1,n.call(i,new Ir(t,i,r.originalEvent)))},mouseout:function(e){o&&(o=!1,n.call(i,new Ir(t,i,e.originalEvent)))}}}}return{layer:e,listener:n,delegates:(r={},r[t]=function(t){var r=i.getLayer(e)?i.queryRenderedFeatures(t.point,{layers:[e]}):[];r.length&&(t.features=r,n.call(i,t),delete t.features)},r)}},i.prototype.on=function(t,e,n){if(void 0===n)return r.prototype.on.call(this,t,e);var i=this._createDelegatedListener(t,e,n);for(var a in this._delegatedListeners=this._delegatedListeners||{},this._delegatedListeners[t]=this._delegatedListeners[t]||[],this._delegatedListeners[t].push(i),i.delegates)this.on(a,i.delegates[a]);return this},i.prototype.once=function(t,e,n){if(void 0===n)return r.prototype.once.call(this,t,e);var i=this._createDelegatedListener(t,e,n);for(var a in i.delegates)this.once(a,i.delegates[a]);return this},i.prototype.off=function(t,e,n){var i=this;return void 0===n?r.prototype.off.call(this,t,e):(this._delegatedListeners&&this._delegatedListeners[t]&&function(r){for(var a=r[t],o=0;o<a.length;o++){var s=a[o];if(s.layer===e&&s.listener===n){for(var l in s.delegates)i.off(l,s.delegates[l]);return a.splice(o,1),i}}}(this._delegatedListeners),this)},i.prototype.queryRenderedFeatures=function(e,n){if(!this.style)return[];var r;if(void 0!==n||void 0===e||e instanceof t.Point||Array.isArray(e)||(n=e,e=void 0),n=n||{},(e=e||[[0,0],[this.transform.width,this.transform.height]])instanceof t.Point||\"number\"==typeof e[0])r=[t.Point.convert(e)];else{var i=t.Point.convert(e[0]),a=t.Point.convert(e[1]);r=[i,new t.Point(a.x,i.y),a,new t.Point(i.x,a.y),i]}return this.style.queryRenderedFeatures(r,n,this.transform)},i.prototype.querySourceFeatures=function(t,e){return this.style.querySourceFeatures(t,e)},i.prototype.setStyle=function(e,n){return!1!==(n=t.extend({},{localIdeographFontFamily:this._localIdeographFontFamily},n)).diff&&n.localIdeographFontFamily===this._localIdeographFontFamily&&this.style&&e?(this._diffStyle(e,n),this):(this._localIdeographFontFamily=n.localIdeographFontFamily,this._updateStyle(e,n))},i.prototype._getUIString=function(t){var e=this._locale[t];if(null==e)throw new Error(\"Missing UI string '\"+t+\"'\");return e},i.prototype._updateStyle=function(t,e){return this.style&&(this.style.setEventedParent(null),this.style._remove()),t?(this.style=new Ve(this,e||{}),this.style.setEventedParent(this,{style:this.style}),\"string\"==typeof t?this.style.loadURL(t):this.style.loadJSON(t),this):(delete this.style,this)},i.prototype._lazyInitEmptyStyle=function(){this.style||(this.style=new Ve(this,{}),this.style.setEventedParent(this,{style:this.style}),this.style.loadEmpty())},i.prototype._diffStyle=function(e,n){var r=this;if(\"string\"==typeof e){var i=this._requestManager.normalizeStyleURL(e),a=this._requestManager.transformRequest(i,t.ResourceType.Style);t.getJSON(a,(function(e,i){e?r.fire(new t.ErrorEvent(e)):i&&r._updateDiff(i,n)}))}else\"object\"==typeof e&&this._updateDiff(e,n)},i.prototype._updateDiff=function(e,n){try{this.style.setState(e)&&this._update(!0)}catch(r){t.warnOnce(\"Unable to perform style diff: \"+(r.message||r.error||r)+\".  Rebuilding the style from scratch.\"),this._updateStyle(e,n)}},i.prototype.getStyle=function(){if(this.style)return this.style.serialize()},i.prototype.isStyleLoaded=function(){return this.style?this.style.loaded():t.warnOnce(\"There is no style added to the map.\")},i.prototype.addSource=function(t,e){return this._lazyInitEmptyStyle(),this.style.addSource(t,e),this._update(!0)},i.prototype.isSourceLoaded=function(e){var n=this.style&&this.style.sourceCaches[e];if(void 0!==n)return n.loaded();this.fire(new t.ErrorEvent(new Error(\"There is no source with ID '\"+e+\"'\")))},i.prototype.areTilesLoaded=function(){var t=this.style&&this.style.sourceCaches;for(var e in t){var n=t[e]._tiles;for(var r in n){var i=n[r];if(\"loaded\"!==i.state&&\"errored\"!==i.state)return!1}}return!0},i.prototype.addSourceType=function(t,e,n){return this._lazyInitEmptyStyle(),this.style.addSourceType(t,e,n)},i.prototype.removeSource=function(t){return this.style.removeSource(t),this._update(!0)},i.prototype.getSource=function(t){return this.style.getSource(t)},i.prototype.addImage=function(e,n,r){void 0===r&&(r={});var i=r.pixelRatio;void 0===i&&(i=1);var a=r.sdf;void 0===a&&(a=!1);var o=r.stretchX,s=r.stretchY,l=r.content;if(this._lazyInitEmptyStyle(),n instanceof xi||ki&&n instanceof ki){var c=t.browser.getImageData(n);this.style.addImage(e,{data:new t.RGBAImage({width:c.width,height:c.height},c.data),pixelRatio:i,stretchX:o,stretchY:s,content:l,sdf:a,version:0})}else{if(void 0===n.width||void 0===n.height)return this.fire(new t.ErrorEvent(new Error(\"Invalid arguments to map.addImage(). The second argument must be an `HTMLImageElement`, `ImageData`, `ImageBitmap`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`\")));var u=n;this.style.addImage(e,{data:new t.RGBAImage({width:n.width,height:n.height},new Uint8Array(n.data)),pixelRatio:i,stretchX:o,stretchY:s,content:l,sdf:a,version:0,userImage:u}),u.onAdd&&u.onAdd(this,e)}},i.prototype.updateImage=function(e,n){var r=this.style.getImage(e);if(!r)return this.fire(new t.ErrorEvent(new Error(\"The map has no image with that id. If you are adding a new image use `map.addImage(...)` instead.\")));var i=n instanceof xi||ki&&n instanceof ki?t.browser.getImageData(n):n,a=i.width,o=i.height,s=i.data;return void 0===a||void 0===o?this.fire(new t.ErrorEvent(new Error(\"Invalid arguments to map.updateImage(). The second argument must be an `HTMLImageElement`, `ImageData`, `ImageBitmap`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`\"))):a!==r.data.width||o!==r.data.height?this.fire(new t.ErrorEvent(new Error(\"The width and height of the updated image must be that same as the previous version of the image\"))):(r.data.replace(s,!(n instanceof xi||ki&&n instanceof ki)),void this.style.updateImage(e,r))},i.prototype.hasImage=function(e){return e?!!this.style.getImage(e):(this.fire(new t.ErrorEvent(new Error(\"Missing required image id\"))),!1)},i.prototype.removeImage=function(t){this.style.removeImage(t)},i.prototype.loadImage=function(e,n){t.getImage(this._requestManager.transformRequest(e,t.ResourceType.Image),n)},i.prototype.listImages=function(){return this.style.listImages()},i.prototype.addLayer=function(t,e){return this._lazyInitEmptyStyle(),this.style.addLayer(t,e),this._update(!0)},i.prototype.moveLayer=function(t,e){return this.style.moveLayer(t,e),this._update(!0)},i.prototype.removeLayer=function(t){return this.style.removeLayer(t),this._update(!0)},i.prototype.getLayer=function(t){return this.style.getLayer(t)},i.prototype.setLayerZoomRange=function(t,e,n){return this.style.setLayerZoomRange(t,e,n),this._update(!0)},i.prototype.setFilter=function(t,e,n){return void 0===n&&(n={}),this.style.setFilter(t,e,n),this._update(!0)},i.prototype.getFilter=function(t){return this.style.getFilter(t)},i.prototype.setPaintProperty=function(t,e,n,r){return void 0===r&&(r={}),this.style.setPaintProperty(t,e,n,r),this._update(!0)},i.prototype.getPaintProperty=function(t,e){return this.style.getPaintProperty(t,e)},i.prototype.setLayoutProperty=function(t,e,n,r){return void 0===r&&(r={}),this.style.setLayoutProperty(t,e,n,r),this._update(!0)},i.prototype.getLayoutProperty=function(t,e){return this.style.getLayoutProperty(t,e)},i.prototype.setLight=function(t,e){return void 0===e&&(e={}),this._lazyInitEmptyStyle(),this.style.setLight(t,e),this._update(!0)},i.prototype.getLight=function(){return this.style.getLight()},i.prototype.setFeatureState=function(t,e){return this.style.setFeatureState(t,e),this._update()},i.prototype.removeFeatureState=function(t,e){return this.style.removeFeatureState(t,e),this._update()},i.prototype.getFeatureState=function(t){return this.style.getFeatureState(t)},i.prototype.getContainer=function(){return this._container},i.prototype.getCanvasContainer=function(){return this._canvasContainer},i.prototype.getCanvas=function(){return this._canvas},i.prototype._containerDimensions=function(){var t=0,e=0;return this._container&&(t=this._container.clientWidth||400,e=this._container.clientHeight||300),[t,e]},i.prototype._detectMissingCSS=function(){\"rgb(250, 128, 114)\"!==t.window.getComputedStyle(this._missingCSSCanary).getPropertyValue(\"background-color\")&&t.warnOnce(\"This page appears to be missing CSS declarations for Mapbox GL JS, which may cause the map to display incorrectly. Please ensure your page includes mapbox-gl.css, as described in https://www.mapbox.com/mapbox-gl-js/api/.\")},i.prototype._setupContainer=function(){var t=this._container;t.classList.add(\"mapboxgl-map\"),(this._missingCSSCanary=n.create(\"div\",\"mapboxgl-canary\",t)).style.visibility=\"hidden\",this._detectMissingCSS();var e=this._canvasContainer=n.create(\"div\",\"mapboxgl-canvas-container\",t);this._interactive&&e.classList.add(\"mapboxgl-interactive\"),this._canvas=n.create(\"canvas\",\"mapboxgl-canvas\",e),this._canvas.addEventListener(\"webglcontextlost\",this._contextLost,!1),this._canvas.addEventListener(\"webglcontextrestored\",this._contextRestored,!1),this._canvas.setAttribute(\"tabindex\",\"0\"),this._canvas.setAttribute(\"aria-label\",\"Map\");var r=this._containerDimensions();this._resizeCanvas(r[0],r[1]);var i=this._controlContainer=n.create(\"div\",\"mapboxgl-control-container\",t),a=this._controlPositions={};[\"top-left\",\"top-right\",\"bottom-left\",\"bottom-right\"].forEach((function(t){a[t]=n.create(\"div\",\"mapboxgl-ctrl-\"+t,i)}))},i.prototype._resizeCanvas=function(e,n){var r=t.browser.devicePixelRatio||1;this._canvas.width=r*e,this._canvas.height=r*n,this._canvas.style.width=e+\"px\",this._canvas.style.height=n+\"px\"},i.prototype._setupPainter=function(){var n=t.extend({},e.webGLContextAttributes,{failIfMajorPerformanceCaveat:this._failIfMajorPerformanceCaveat,preserveDrawingBuffer:this._preserveDrawingBuffer,antialias:this._antialias||!1}),r=this._canvas.getContext(\"webgl\",n)||this._canvas.getContext(\"experimental-webgl\",n);r?(this.painter=new vr(r,this.transform),t.webpSupported.testSupport(r)):this.fire(new t.ErrorEvent(new Error(\"Failed to initialize WebGL\")))},i.prototype._contextLost=function(e){e.preventDefault(),this._frame&&(this._frame.cancel(),this._frame=null),this.fire(new t.Event(\"webglcontextlost\",{originalEvent:e}))},i.prototype._contextRestored=function(e){this._setupPainter(),this.resize(),this._update(),this.fire(new t.Event(\"webglcontextrestored\",{originalEvent:e}))},i.prototype.loaded=function(){return!this._styleDirty&&!this._sourcesDirty&&!!this.style&&this.style.loaded()},i.prototype._update=function(t){return this.style?(this._styleDirty=this._styleDirty||t,this._sourcesDirty=!0,this.triggerRepaint(),this):this},i.prototype._requestRenderFrame=function(t){return this._update(),this._renderTaskQueue.add(t)},i.prototype._cancelRenderFrame=function(t){this._renderTaskQueue.remove(t)},i.prototype._render=function(e){var n,r=this,i=0,a=this.painter.context.extTimerQuery;if(this.listens(\"gpu-timing-frame\")&&(n=a.createQueryEXT(),a.beginQueryEXT(a.TIME_ELAPSED_EXT,n),i=t.browser.now()),this.painter.context.setDirty(),this.painter.setBaseState(),this._renderTaskQueue.run(e),!this._removed){var o=!1;if(this.style&&this._styleDirty){this._styleDirty=!1;var s=this.transform.zoom,l=t.browser.now();this.style.zoomHistory.update(s,l);var c=new t.EvaluationParameters(s,{now:l,fadeDuration:this._fadeDuration,zoomHistory:this.style.zoomHistory,transition:this.style.getTransition()}),u=c.crossFadingFactor();1===u&&u===this._crossFadingFactor||(o=!0,this._crossFadingFactor=u),this.style.update(c)}if(this.style&&this._sourcesDirty&&(this._sourcesDirty=!1,this.style._updateSources(this.transform)),this._placementDirty=this.style&&this.style._updatePlacement(this.painter.transform,this.showCollisionBoxes,this._fadeDuration,this._crossSourceCollisions),this.painter.render(this.style,{showTileBoundaries:this.showTileBoundaries,showOverdrawInspector:this._showOverdrawInspector,rotating:this.isRotating(),zooming:this.isZooming(),moving:this.isMoving(),fadeDuration:this._fadeDuration,showPadding:this.showPadding,gpuTiming:!!this.listens(\"gpu-timing-layer\")}),this.fire(new t.Event(\"render\")),this.loaded()&&!this._loaded&&(this._loaded=!0,this.fire(new t.Event(\"load\"))),this.style&&(this.style.hasTransitions()||o)&&(this._styleDirty=!0),this.style&&!this._placementDirty&&this.style._releaseSymbolFadeTiles(),this.listens(\"gpu-timing-frame\")){var h=t.browser.now()-i;a.endQueryEXT(a.TIME_ELAPSED_EXT,n),setTimeout((function(){var e=a.getQueryObjectEXT(n,a.QUERY_RESULT_EXT)/1e6;a.deleteQueryEXT(n),r.fire(new t.Event(\"gpu-timing-frame\",{cpuTime:h,gpuTime:e}))}),50)}if(this.listens(\"gpu-timing-layer\")){var d=this.painter.collectGpuTimers();setTimeout((function(){var e=r.painter.queryGpuTimers(d);r.fire(new t.Event(\"gpu-timing-layer\",{layerTimes:e}))}),50)}return this._sourcesDirty||this._styleDirty||this._placementDirty||this._repaint?this.triggerRepaint():!this.isMoving()&&this.loaded()&&(this._fullyLoaded||(this._fullyLoaded=!0),this.fire(new t.Event(\"idle\"))),this}},i.prototype.remove=function(){this._hash&&this._hash.remove();for(var e=0,n=this._controls;e<n.length;e+=1)n[e].onRemove(this);this._controls=[],this._frame&&(this._frame.cancel(),this._frame=null),this._renderTaskQueue.clear(),this.painter.destroy(),this.handlers.destroy(),delete this.handlers,this.setStyle(null),void 0!==t.window&&(t.window.removeEventListener(\"resize\",this._onWindowResize,!1),t.window.removeEventListener(\"online\",this._onWindowOnline,!1));var r=this.painter.context.gl.getExtension(\"WEBGL_lose_context\");r&&r.loseContext(),Si(this._canvasContainer),Si(this._controlContainer),Si(this._missingCSSCanary),this._container.classList.remove(\"mapboxgl-map\"),this._removed=!0,this.fire(new t.Event(\"remove\"))},i.prototype.triggerRepaint=function(){var e=this;this.style&&!this._frame&&(this._frame=t.browser.frame((function(t){e._frame=null,e._render(t)})))},i.prototype._onWindowOnline=function(){this._update()},i.prototype._onWindowResize=function(t){this._trackResize&&this.resize({originalEvent:t})._update()},a.showTileBoundaries.get=function(){return!!this._showTileBoundaries},a.showTileBoundaries.set=function(t){this._showTileBoundaries!==t&&(this._showTileBoundaries=t,this._update())},a.showPadding.get=function(){return!!this._showPadding},a.showPadding.set=function(t){this._showPadding!==t&&(this._showPadding=t,this._update())},a.showCollisionBoxes.get=function(){return!!this._showCollisionBoxes},a.showCollisionBoxes.set=function(t){this._showCollisionBoxes!==t&&(this._showCollisionBoxes=t,t?this.style._generateCollisionBoxes():this._update())},a.showOverdrawInspector.get=function(){return!!this._showOverdrawInspector},a.showOverdrawInspector.set=function(t){this._showOverdrawInspector!==t&&(this._showOverdrawInspector=t,this._update())},a.repaint.get=function(){return!!this._repaint},a.repaint.set=function(t){this._repaint!==t&&(this._repaint=t,this.triggerRepaint())},a.vertices.get=function(){return!!this._vertices},a.vertices.set=function(t){this._vertices=t,this._update()},i.prototype._setCacheLimits=function(e,n){t.setCacheLimits(e,n)},a.version.get=function(){return t.version},Object.defineProperties(i.prototype,a),i}(gi);function Si(t){t.parentNode&&t.parentNode.removeChild(t)}var Ai={showCompass:!0,showZoom:!0,visualizePitch:!1},Li=function(e){var r=this;this.options=t.extend({},Ai,e),this._container=n.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-group\"),this._container.addEventListener(\"contextmenu\",(function(t){return t.preventDefault()})),this.options.showZoom&&(t.bindAll([\"_setButtonTitle\",\"_updateZoomButtons\"],this),this._zoomInButton=this._createButton(\"mapboxgl-ctrl-zoom-in\",(function(t){return r._map.zoomIn({},{originalEvent:t})})),n.create(\"span\",\"mapboxgl-ctrl-icon\",this._zoomInButton).setAttribute(\"aria-hidden\",!0),this._zoomOutButton=this._createButton(\"mapboxgl-ctrl-zoom-out\",(function(t){return r._map.zoomOut({},{originalEvent:t})})),n.create(\"span\",\"mapboxgl-ctrl-icon\",this._zoomOutButton).setAttribute(\"aria-hidden\",!0)),this.options.showCompass&&(t.bindAll([\"_rotateCompassArrow\"],this),this._compass=this._createButton(\"mapboxgl-ctrl-compass\",(function(t){r.options.visualizePitch?r._map.resetNorthPitch({},{originalEvent:t}):r._map.resetNorth({},{originalEvent:t})})),this._compassIcon=n.create(\"span\",\"mapboxgl-ctrl-icon\",this._compass),this._compassIcon.setAttribute(\"aria-hidden\",!0))};Li.prototype._updateZoomButtons=function(){var t=this._map.getZoom();this._zoomInButton.disabled=t===this._map.getMaxZoom(),this._zoomOutButton.disabled=t===this._map.getMinZoom()},Li.prototype._rotateCompassArrow=function(){var t=this.options.visualizePitch?\"scale(\"+1/Math.pow(Math.cos(this._map.transform.pitch*(Math.PI/180)),.5)+\") rotateX(\"+this._map.transform.pitch+\"deg) rotateZ(\"+this._map.transform.angle*(180/Math.PI)+\"deg)\":\"rotate(\"+this._map.transform.angle*(180/Math.PI)+\"deg)\";this._compassIcon.style.transform=t},Li.prototype.onAdd=function(t){return this._map=t,this.options.showZoom&&(this._setButtonTitle(this._zoomInButton,\"ZoomIn\"),this._setButtonTitle(this._zoomOutButton,\"ZoomOut\"),this._map.on(\"zoom\",this._updateZoomButtons),this._updateZoomButtons()),this.options.showCompass&&(this._setButtonTitle(this._compass,\"ResetBearing\"),this.options.visualizePitch&&this._map.on(\"pitch\",this._rotateCompassArrow),this._map.on(\"rotate\",this._rotateCompassArrow),this._rotateCompassArrow(),this._handler=new Ci(this._map,this._compass,this.options.visualizePitch)),this._container},Li.prototype.onRemove=function(){n.remove(this._container),this.options.showZoom&&this._map.off(\"zoom\",this._updateZoomButtons),this.options.showCompass&&(this.options.visualizePitch&&this._map.off(\"pitch\",this._rotateCompassArrow),this._map.off(\"rotate\",this._rotateCompassArrow),this._handler.off(),delete this._handler),delete this._map},Li.prototype._createButton=function(t,e){var r=n.create(\"button\",t,this._container);return r.type=\"button\",r.addEventListener(\"click\",e),r},Li.prototype._setButtonTitle=function(t,e){var n=this._map._getUIString(\"NavigationControl.\"+e);t.title=n,t.setAttribute(\"aria-label\",n)};var Ci=function(e,r,i){void 0===i&&(i=!1),this._clickTolerance=10,this.element=r,this.mouseRotate=new Wr({clickTolerance:e.dragRotate._mouseRotate._clickTolerance}),this.map=e,i&&(this.mousePitch=new qr({clickTolerance:e.dragRotate._mousePitch._clickTolerance})),t.bindAll([\"mousedown\",\"mousemove\",\"mouseup\",\"touchstart\",\"touchmove\",\"touchend\",\"reset\"],this),n.addEventListener(r,\"mousedown\",this.mousedown),n.addEventListener(r,\"touchstart\",this.touchstart,{passive:!1}),n.addEventListener(r,\"touchmove\",this.touchmove),n.addEventListener(r,\"touchend\",this.touchend),n.addEventListener(r,\"touchcancel\",this.reset)};function Ei(e,n,r){if(e=new t.LngLat(e.lng,e.lat),n){var i=new t.LngLat(e.lng-360,e.lat),a=new t.LngLat(e.lng+360,e.lat),o=r.locationPoint(e).distSqr(n);r.locationPoint(i).distSqr(n)<o?e=i:r.locationPoint(a).distSqr(n)<o&&(e=a)}for(;Math.abs(e.lng-r.center.lng)>180;){var s=r.locationPoint(e);if(s.x>=0&&s.y>=0&&s.x<=r.width&&s.y<=r.height)break;e.lng>r.center.lng?e.lng-=360:e.lng+=360}return e}Ci.prototype.down=function(t,e){this.mouseRotate.mousedown(t,e),this.mousePitch&&this.mousePitch.mousedown(t,e),n.disableDrag()},Ci.prototype.move=function(t,e){var n=this.map,r=this.mouseRotate.mousemoveWindow(t,e);if(r&&r.bearingDelta&&n.setBearing(n.getBearing()+r.bearingDelta),this.mousePitch){var i=this.mousePitch.mousemoveWindow(t,e);i&&i.pitchDelta&&n.setPitch(n.getPitch()+i.pitchDelta)}},Ci.prototype.off=function(){var t=this.element;n.removeEventListener(t,\"mousedown\",this.mousedown),n.removeEventListener(t,\"touchstart\",this.touchstart,{passive:!1}),n.removeEventListener(t,\"touchmove\",this.touchmove),n.removeEventListener(t,\"touchend\",this.touchend),n.removeEventListener(t,\"touchcancel\",this.reset),this.offTemp()},Ci.prototype.offTemp=function(){n.enableDrag(),n.removeEventListener(t.window,\"mousemove\",this.mousemove),n.removeEventListener(t.window,\"mouseup\",this.mouseup)},Ci.prototype.mousedown=function(e){this.down(t.extend({},e,{ctrlKey:!0,preventDefault:function(){return e.preventDefault()}}),n.mousePos(this.element,e)),n.addEventListener(t.window,\"mousemove\",this.mousemove),n.addEventListener(t.window,\"mouseup\",this.mouseup)},Ci.prototype.mousemove=function(t){this.move(t,n.mousePos(this.element,t))},Ci.prototype.mouseup=function(t){this.mouseRotate.mouseupWindow(t),this.mousePitch&&this.mousePitch.mouseupWindow(t),this.offTemp()},Ci.prototype.touchstart=function(t){1!==t.targetTouches.length?this.reset():(this._startPos=this._lastPos=n.touchPos(this.element,t.targetTouches)[0],this.down({type:\"mousedown\",button:0,ctrlKey:!0,preventDefault:function(){return t.preventDefault()}},this._startPos))},Ci.prototype.touchmove=function(t){1!==t.targetTouches.length?this.reset():(this._lastPos=n.touchPos(this.element,t.targetTouches)[0],this.move({preventDefault:function(){return t.preventDefault()}},this._lastPos))},Ci.prototype.touchend=function(t){0===t.targetTouches.length&&this._startPos&&this._lastPos&&this._startPos.dist(this._lastPos)<this._clickTolerance&&this.element.click(),this.reset()},Ci.prototype.reset=function(){this.mouseRotate.reset(),this.mousePitch&&this.mousePitch.reset(),delete this._startPos,delete this._lastPos,this.offTemp()};var Oi={center:\"translate(-50%,-50%)\",top:\"translate(-50%,0)\",\"top-left\":\"translate(0,0)\",\"top-right\":\"translate(-100%,0)\",bottom:\"translate(-50%,-100%)\",\"bottom-left\":\"translate(0,-100%)\",\"bottom-right\":\"translate(-100%,-100%)\",left:\"translate(0,-50%)\",right:\"translate(-100%,-50%)\"};function Di(t,e,n){var r=t.classList;for(var i in Oi)r.remove(\"mapboxgl-\"+n+\"-anchor-\"+i);r.add(\"mapboxgl-\"+n+\"-anchor-\"+e)}var Ii,Pi=function(e){function r(r,i){var a=this;if(e.call(this),(r instanceof t.window.HTMLElement||i)&&(r=t.extend({element:r},i)),t.bindAll([\"_update\",\"_onMove\",\"_onUp\",\"_addDragHandler\",\"_onMapClick\",\"_onKeyPress\"],this),this._anchor=r&&r.anchor||\"center\",this._color=r&&r.color||\"#3FB1CE\",this._draggable=r&&r.draggable||!1,this._state=\"inactive\",this._rotation=r&&r.rotation||0,this._rotationAlignment=r&&r.rotationAlignment||\"auto\",this._pitchAlignment=r&&r.pitchAlignment&&\"auto\"!==r.pitchAlignment?r.pitchAlignment:this._rotationAlignment,r&&r.element)this._element=r.element,this._offset=t.Point.convert(r&&r.offset||[0,0]);else{this._defaultMarker=!0,this._element=n.create(\"div\"),this._element.setAttribute(\"aria-label\",\"Map marker\");var o=n.createNS(\"http://www.w3.org/2000/svg\",\"svg\");o.setAttributeNS(null,\"display\",\"block\"),o.setAttributeNS(null,\"height\",\"41px\"),o.setAttributeNS(null,\"width\",\"27px\"),o.setAttributeNS(null,\"viewBox\",\"0 0 27 41\");var s=n.createNS(\"http://www.w3.org/2000/svg\",\"g\");s.setAttributeNS(null,\"stroke\",\"none\"),s.setAttributeNS(null,\"stroke-width\",\"1\"),s.setAttributeNS(null,\"fill\",\"none\"),s.setAttributeNS(null,\"fill-rule\",\"evenodd\");var l=n.createNS(\"http://www.w3.org/2000/svg\",\"g\");l.setAttributeNS(null,\"fill-rule\",\"nonzero\");var c=n.createNS(\"http://www.w3.org/2000/svg\",\"g\");c.setAttributeNS(null,\"transform\",\"translate(3.0, 29.0)\"),c.setAttributeNS(null,\"fill\",\"#000000\");for(var u=0,h=[{rx:\"10.5\",ry:\"5.25002273\"},{rx:\"10.5\",ry:\"5.25002273\"},{rx:\"9.5\",ry:\"4.77275007\"},{rx:\"8.5\",ry:\"4.29549936\"},{rx:\"7.5\",ry:\"3.81822308\"},{rx:\"6.5\",ry:\"3.34094679\"},{rx:\"5.5\",ry:\"2.86367051\"},{rx:\"4.5\",ry:\"2.38636864\"}];u<h.length;u+=1){var d=h[u],f=n.createNS(\"http://www.w3.org/2000/svg\",\"ellipse\");f.setAttributeNS(null,\"opacity\",\"0.04\"),f.setAttributeNS(null,\"cx\",\"10.5\"),f.setAttributeNS(null,\"cy\",\"5.80029008\"),f.setAttributeNS(null,\"rx\",d.rx),f.setAttributeNS(null,\"ry\",d.ry),c.appendChild(f)}var p=n.createNS(\"http://www.w3.org/2000/svg\",\"g\");p.setAttributeNS(null,\"fill\",this._color);var m=n.createNS(\"http://www.w3.org/2000/svg\",\"path\");m.setAttributeNS(null,\"d\",\"M27,13.5 C27,19.074644 20.250001,27.000002 14.75,34.500002 C14.016665,35.500004 12.983335,35.500004 12.25,34.500002 C6.7499993,27.000002 0,19.222562 0,13.5 C0,6.0441559 6.0441559,0 13.5,0 C20.955844,0 27,6.0441559 27,13.5 Z\"),p.appendChild(m);var g=n.createNS(\"http://www.w3.org/2000/svg\",\"g\");g.setAttributeNS(null,\"opacity\",\"0.25\"),g.setAttributeNS(null,\"fill\",\"#000000\");var y=n.createNS(\"http://www.w3.org/2000/svg\",\"path\");y.setAttributeNS(null,\"d\",\"M13.5,0 C6.0441559,0 0,6.0441559 0,13.5 C0,19.222562 6.7499993,27 12.25,34.5 C13,35.522727 14.016664,35.500004 14.75,34.5 C20.250001,27 27,19.074644 27,13.5 C27,6.0441559 20.955844,0 13.5,0 Z M13.5,1 C20.415404,1 26,6.584596 26,13.5 C26,15.898657 24.495584,19.181431 22.220703,22.738281 C19.945823,26.295132 16.705119,30.142167 13.943359,33.908203 C13.743445,34.180814 13.612715,34.322738 13.5,34.441406 C13.387285,34.322738 13.256555,34.180814 13.056641,33.908203 C10.284481,30.127985 7.4148684,26.314159 5.015625,22.773438 C2.6163816,19.232715 1,15.953538 1,13.5 C1,6.584596 6.584596,1 13.5,1 Z\"),g.appendChild(y);var v=n.createNS(\"http://www.w3.org/2000/svg\",\"g\");v.setAttributeNS(null,\"transform\",\"translate(6.0, 7.0)\"),v.setAttributeNS(null,\"fill\",\"#FFFFFF\");var _=n.createNS(\"http://www.w3.org/2000/svg\",\"g\");_.setAttributeNS(null,\"transform\",\"translate(8.0, 8.0)\");var b=n.createNS(\"http://www.w3.org/2000/svg\",\"circle\");b.setAttributeNS(null,\"fill\",\"#000000\"),b.setAttributeNS(null,\"opacity\",\"0.25\"),b.setAttributeNS(null,\"cx\",\"5.5\"),b.setAttributeNS(null,\"cy\",\"5.5\"),b.setAttributeNS(null,\"r\",\"5.4999962\");var x=n.createNS(\"http://www.w3.org/2000/svg\",\"circle\");x.setAttributeNS(null,\"fill\",\"#FFFFFF\"),x.setAttributeNS(null,\"cx\",\"5.5\"),x.setAttributeNS(null,\"cy\",\"5.5\"),x.setAttributeNS(null,\"r\",\"5.4999962\"),_.appendChild(b),_.appendChild(x),l.appendChild(c),l.appendChild(p),l.appendChild(g),l.appendChild(v),l.appendChild(_),o.appendChild(l),this._element.appendChild(o),this._offset=t.Point.convert(r&&r.offset||[0,-14])}this._element.classList.add(\"mapboxgl-marker\"),this._element.addEventListener(\"dragstart\",(function(t){t.preventDefault()})),this._element.addEventListener(\"mousedown\",(function(t){t.preventDefault()})),this._element.addEventListener(\"focus\",(function(){var t=a._map.getContainer();t.scrollTop=0,t.scrollLeft=0})),Di(this._element,this._anchor,\"marker\"),this._popup=null}return e&&(r.__proto__=e),(r.prototype=Object.create(e&&e.prototype)).constructor=r,r.prototype.addTo=function(t){return this.remove(),this._map=t,t.getCanvasContainer().appendChild(this._element),t.on(\"move\",this._update),t.on(\"moveend\",this._update),this.setDraggable(this._draggable),this._update(),this._map.on(\"click\",this._onMapClick),this},r.prototype.remove=function(){return this._map&&(this._map.off(\"click\",this._onMapClick),this._map.off(\"move\",this._update),this._map.off(\"moveend\",this._update),this._map.off(\"mousedown\",this._addDragHandler),this._map.off(\"touchstart\",this._addDragHandler),this._map.off(\"mouseup\",this._onUp),this._map.off(\"touchend\",this._onUp),this._map.off(\"mousemove\",this._onMove),this._map.off(\"touchmove\",this._onMove),delete this._map),n.remove(this._element),this._popup&&this._popup.remove(),this},r.prototype.getLngLat=function(){return this._lngLat},r.prototype.setLngLat=function(e){return this._lngLat=t.LngLat.convert(e),this._pos=null,this._popup&&this._popup.setLngLat(this._lngLat),this._update(),this},r.prototype.getElement=function(){return this._element},r.prototype.setPopup=function(t){if(this._popup&&(this._popup.remove(),this._popup=null,this._element.removeEventListener(\"keypress\",this._onKeyPress),this._originalTabIndex||this._element.removeAttribute(\"tabindex\")),t){if(!(\"offset\"in t.options)){var e=Math.sqrt(Math.pow(13.5,2)/2);t.options.offset=this._defaultMarker?{top:[0,0],\"top-left\":[0,0],\"top-right\":[0,0],bottom:[0,-38.1],\"bottom-left\":[e,-1*(24.6+e)],\"bottom-right\":[-e,-1*(24.6+e)],left:[13.5,-24.6],right:[-13.5,-24.6]}:this._offset}this._popup=t,this._lngLat&&this._popup.setLngLat(this._lngLat),this._originalTabIndex=this._element.getAttribute(\"tabindex\"),this._originalTabIndex||this._element.setAttribute(\"tabindex\",\"0\"),this._element.addEventListener(\"keypress\",this._onKeyPress)}return this},r.prototype._onKeyPress=function(t){var e=t.code,n=t.charCode||t.keyCode;\"Space\"!==e&&\"Enter\"!==e&&32!==n&&13!==n||this.togglePopup()},r.prototype._onMapClick=function(t){var e=t.originalEvent.target,n=this._element;this._popup&&(e===n||n.contains(e))&&this.togglePopup()},r.prototype.getPopup=function(){return this._popup},r.prototype.togglePopup=function(){var t=this._popup;return t?(t.isOpen()?t.remove():t.addTo(this._map),this):this},r.prototype._update=function(t){if(this._map){this._map.transform.renderWorldCopies&&(this._lngLat=Ei(this._lngLat,this._pos,this._map.transform)),this._pos=this._map.project(this._lngLat)._add(this._offset);var e=\"\";\"viewport\"===this._rotationAlignment||\"auto\"===this._rotationAlignment?e=\"rotateZ(\"+this._rotation+\"deg)\":\"map\"===this._rotationAlignment&&(e=\"rotateZ(\"+(this._rotation-this._map.getBearing())+\"deg)\");var r=\"\";\"viewport\"===this._pitchAlignment||\"auto\"===this._pitchAlignment?r=\"rotateX(0deg)\":\"map\"===this._pitchAlignment&&(r=\"rotateX(\"+this._map.getPitch()+\"deg)\"),t&&\"moveend\"!==t.type||(this._pos=this._pos.round()),n.setTransform(this._element,Oi[this._anchor]+\" translate(\"+this._pos.x+\"px, \"+this._pos.y+\"px) \"+r+\" \"+e)}},r.prototype.getOffset=function(){return this._offset},r.prototype.setOffset=function(e){return this._offset=t.Point.convert(e),this._update(),this},r.prototype._onMove=function(e){this._pos=e.point.sub(this._positionDelta),this._lngLat=this._map.unproject(this._pos),this.setLngLat(this._lngLat),this._element.style.pointerEvents=\"none\",\"pending\"===this._state&&(this._state=\"active\",this.fire(new t.Event(\"dragstart\"))),this.fire(new t.Event(\"drag\"))},r.prototype._onUp=function(){this._element.style.pointerEvents=\"auto\",this._positionDelta=null,this._map.off(\"mousemove\",this._onMove),this._map.off(\"touchmove\",this._onMove),\"active\"===this._state&&this.fire(new t.Event(\"dragend\")),this._state=\"inactive\"},r.prototype._addDragHandler=function(t){this._element.contains(t.originalEvent.target)&&(t.preventDefault(),this._positionDelta=t.point.sub(this._pos).add(this._offset),this._state=\"pending\",this._map.on(\"mousemove\",this._onMove),this._map.on(\"touchmove\",this._onMove),this._map.once(\"mouseup\",this._onUp),this._map.once(\"touchend\",this._onUp))},r.prototype.setDraggable=function(t){return this._draggable=!!t,this._map&&(t?(this._map.on(\"mousedown\",this._addDragHandler),this._map.on(\"touchstart\",this._addDragHandler)):(this._map.off(\"mousedown\",this._addDragHandler),this._map.off(\"touchstart\",this._addDragHandler))),this},r.prototype.isDraggable=function(){return this._draggable},r.prototype.setRotation=function(t){return this._rotation=t||0,this._update(),this},r.prototype.getRotation=function(){return this._rotation},r.prototype.setRotationAlignment=function(t){return this._rotationAlignment=t||\"auto\",this._update(),this},r.prototype.getRotationAlignment=function(){return this._rotationAlignment},r.prototype.setPitchAlignment=function(t){return this._pitchAlignment=t&&\"auto\"!==t?t:this._rotationAlignment,this._update(),this},r.prototype.getPitchAlignment=function(){return this._pitchAlignment},r}(t.Evented),Ri={positionOptions:{enableHighAccuracy:!1,maximumAge:0,timeout:6e3},fitBoundsOptions:{maxZoom:15},trackUserLocation:!1,showAccuracyCircle:!0,showUserLocation:!0},zi=0,ji=!1,Fi=function(e){function r(n){e.call(this),this.options=t.extend({},Ri,n),t.bindAll([\"_onSuccess\",\"_onError\",\"_onZoom\",\"_finish\",\"_setupUI\",\"_updateCamera\",\"_updateMarker\"],this)}return e&&(r.__proto__=e),(r.prototype=Object.create(e&&e.prototype)).constructor=r,r.prototype.onAdd=function(e){var r;return this._map=e,this._container=n.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-group\"),r=this._setupUI,void 0!==Ii?r(Ii):void 0!==t.window.navigator.permissions?t.window.navigator.permissions.query({name:\"geolocation\"}).then((function(t){r(Ii=\"denied\"!==t.state)})):r(Ii=!!t.window.navigator.geolocation),this._container},r.prototype.onRemove=function(){void 0!==this._geolocationWatchID&&(t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0),this.options.showUserLocation&&this._userLocationDotMarker&&this._userLocationDotMarker.remove(),this.options.showAccuracyCircle&&this._accuracyCircleMarker&&this._accuracyCircleMarker.remove(),n.remove(this._container),this._map.off(\"zoom\",this._onZoom),this._map=void 0,zi=0,ji=!1},r.prototype._isOutOfMapMaxBounds=function(t){var e=this._map.getMaxBounds(),n=t.coords;return e&&(n.longitude<e.getWest()||n.longitude>e.getEast()||n.latitude<e.getSouth()||n.latitude>e.getNorth())},r.prototype._setErrorState=function(){switch(this._watchState){case\"WAITING_ACTIVE\":this._watchState=\"ACTIVE_ERROR\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active-error\");break;case\"ACTIVE_LOCK\":this._watchState=\"ACTIVE_ERROR\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\");break;case\"BACKGROUND\":this._watchState=\"BACKGROUND_ERROR\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\")}},r.prototype._onSuccess=function(e){if(this._map){if(this._isOutOfMapMaxBounds(e))return this._setErrorState(),this.fire(new t.Event(\"outofmaxbounds\",e)),this._updateMarker(),void this._finish();if(this.options.trackUserLocation)switch(this._lastKnownPosition=e,this._watchState){case\"WAITING_ACTIVE\":case\"ACTIVE_LOCK\":case\"ACTIVE_ERROR\":this._watchState=\"ACTIVE_LOCK\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active\");break;case\"BACKGROUND\":case\"BACKGROUND_ERROR\":this._watchState=\"BACKGROUND\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background\")}this.options.showUserLocation&&\"OFF\"!==this._watchState&&this._updateMarker(e),this.options.trackUserLocation&&\"ACTIVE_LOCK\"!==this._watchState||this._updateCamera(e),this.options.showUserLocation&&this._dotElement.classList.remove(\"mapboxgl-user-location-dot-stale\"),this.fire(new t.Event(\"geolocate\",e)),this._finish()}},r.prototype._updateCamera=function(e){var n=new t.LngLat(e.coords.longitude,e.coords.latitude),r=e.coords.accuracy,i=this._map.getBearing(),a=t.extend({bearing:i},this.options.fitBoundsOptions);this._map.fitBounds(n.toBounds(r),a,{geolocateSource:!0})},r.prototype._updateMarker=function(e){if(e){var n=new t.LngLat(e.coords.longitude,e.coords.latitude);this._accuracyCircleMarker.setLngLat(n).addTo(this._map),this._userLocationDotMarker.setLngLat(n).addTo(this._map),this._accuracy=e.coords.accuracy,this.options.showUserLocation&&this.options.showAccuracyCircle&&this._updateCircleRadius()}else this._userLocationDotMarker.remove(),this._accuracyCircleMarker.remove()},r.prototype._updateCircleRadius=function(){var t=this._map._container.clientHeight/2,e=this._map.unproject([0,t]),n=this._map.unproject([1,t]),r=e.distanceTo(n),i=Math.ceil(2*this._accuracy/r);this._circleElement.style.width=i+\"px\",this._circleElement.style.height=i+\"px\"},r.prototype._onZoom=function(){this.options.showUserLocation&&this.options.showAccuracyCircle&&this._updateCircleRadius()},r.prototype._onError=function(e){if(this._map){if(this.options.trackUserLocation)if(1===e.code){this._watchState=\"OFF\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background-error\"),this._geolocateButton.disabled=!0;var n=this._map._getUIString(\"GeolocateControl.LocationNotAvailable\");this._geolocateButton.title=n,this._geolocateButton.setAttribute(\"aria-label\",n),void 0!==this._geolocationWatchID&&this._clearWatch()}else{if(3===e.code&&ji)return;this._setErrorState()}\"OFF\"!==this._watchState&&this.options.showUserLocation&&this._dotElement.classList.add(\"mapboxgl-user-location-dot-stale\"),this.fire(new t.Event(\"error\",e)),this._finish()}},r.prototype._finish=function(){this._timeoutId&&clearTimeout(this._timeoutId),this._timeoutId=void 0},r.prototype._setupUI=function(e){var r=this;if(this._container.addEventListener(\"contextmenu\",(function(t){return t.preventDefault()})),this._geolocateButton=n.create(\"button\",\"mapboxgl-ctrl-geolocate\",this._container),n.create(\"span\",\"mapboxgl-ctrl-icon\",this._geolocateButton).setAttribute(\"aria-hidden\",!0),this._geolocateButton.type=\"button\",!1===e){t.warnOnce(\"Geolocation support is not available so the GeolocateControl will be disabled.\");var i=this._map._getUIString(\"GeolocateControl.LocationNotAvailable\");this._geolocateButton.disabled=!0,this._geolocateButton.title=i,this._geolocateButton.setAttribute(\"aria-label\",i)}else{var a=this._map._getUIString(\"GeolocateControl.FindMyLocation\");this._geolocateButton.title=a,this._geolocateButton.setAttribute(\"aria-label\",a)}this.options.trackUserLocation&&(this._geolocateButton.setAttribute(\"aria-pressed\",\"false\"),this._watchState=\"OFF\"),this.options.showUserLocation&&(this._dotElement=n.create(\"div\",\"mapboxgl-user-location-dot\"),this._userLocationDotMarker=new Pi(this._dotElement),this._circleElement=n.create(\"div\",\"mapboxgl-user-location-accuracy-circle\"),this._accuracyCircleMarker=new Pi({element:this._circleElement,pitchAlignment:\"map\"}),this.options.trackUserLocation&&(this._watchState=\"OFF\"),this._map.on(\"zoom\",this._onZoom)),this._geolocateButton.addEventListener(\"click\",this.trigger.bind(this)),this._setup=!0,this.options.trackUserLocation&&this._map.on(\"movestart\",(function(e){e.geolocateSource||\"ACTIVE_LOCK\"!==r._watchState||e.originalEvent&&\"resize\"===e.originalEvent.type||(r._watchState=\"BACKGROUND\",r._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background\"),r._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),r.fire(new t.Event(\"trackuserlocationend\")))}))},r.prototype.trigger=function(){if(!this._setup)return t.warnOnce(\"Geolocate control triggered before added to a map\"),!1;if(this.options.trackUserLocation){switch(this._watchState){case\"OFF\":this._watchState=\"WAITING_ACTIVE\",this.fire(new t.Event(\"trackuserlocationstart\"));break;case\"WAITING_ACTIVE\":case\"ACTIVE_LOCK\":case\"ACTIVE_ERROR\":case\"BACKGROUND_ERROR\":zi--,ji=!1,this._watchState=\"OFF\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background-error\"),this.fire(new t.Event(\"trackuserlocationend\"));break;case\"BACKGROUND\":this._watchState=\"ACTIVE_LOCK\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._lastKnownPosition&&this._updateCamera(this._lastKnownPosition),this.fire(new t.Event(\"trackuserlocationstart\"))}switch(this._watchState){case\"WAITING_ACTIVE\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active\");break;case\"ACTIVE_LOCK\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active\");break;case\"ACTIVE_ERROR\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active-error\");break;case\"BACKGROUND\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background\");break;case\"BACKGROUND_ERROR\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background-error\")}if(\"OFF\"===this._watchState&&void 0!==this._geolocationWatchID)this._clearWatch();else if(void 0===this._geolocationWatchID){var e;this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.setAttribute(\"aria-pressed\",\"true\"),++zi>1?(e={maximumAge:6e5,timeout:0},ji=!0):(e=this.options.positionOptions,ji=!1),this._geolocationWatchID=t.window.navigator.geolocation.watchPosition(this._onSuccess,this._onError,e)}}else t.window.navigator.geolocation.getCurrentPosition(this._onSuccess,this._onError,this.options.positionOptions),this._timeoutId=setTimeout(this._finish,1e4);return!0},r.prototype._clearWatch=function(){t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0,this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.setAttribute(\"aria-pressed\",\"false\"),this.options.showUserLocation&&this._updateMarker(null)},r}(t.Evented),Ni={maxWidth:100,unit:\"metric\"},Bi=function(e){this.options=t.extend({},Ni,e),t.bindAll([\"_onMove\",\"setUnit\"],this)};function Yi(t,e,n){var r=n&&n.maxWidth||100,i=t._container.clientHeight/2,a=t.unproject([0,i]),o=t.unproject([r,i]),s=a.distanceTo(o);if(n&&\"imperial\"===n.unit){var l=3.2808*s;l>5280?Hi(e,r,l/5280,t._getUIString(\"ScaleControl.Miles\")):Hi(e,r,l,t._getUIString(\"ScaleControl.Feet\"))}else n&&\"nautical\"===n.unit?Hi(e,r,s/1852,t._getUIString(\"ScaleControl.NauticalMiles\")):s>=1e3?Hi(e,r,s/1e3,t._getUIString(\"ScaleControl.Kilometers\")):Hi(e,r,s,t._getUIString(\"ScaleControl.Meters\"))}function Hi(t,e,n,r){var i,a,o,s=(i=n,(a=Math.pow(10,(\"\"+Math.floor(i)).length-1))*(o=(o=i/a)>=10?10:o>=5?5:o>=3?3:o>=2?2:o>=1?1:function(t){var e=Math.pow(10,Math.ceil(-Math.log(t)/Math.LN10));return Math.round(t*e)/e}(o)));t.style.width=e*(s/n)+\"px\",t.innerHTML=s+\"&nbsp;\"+r}Bi.prototype.getDefaultPosition=function(){return\"bottom-left\"},Bi.prototype._onMove=function(){Yi(this._map,this._container,this.options)},Bi.prototype.onAdd=function(t){return this._map=t,this._container=n.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-scale\",t.getContainer()),this._map.on(\"move\",this._onMove),this._onMove(),this._container},Bi.prototype.onRemove=function(){n.remove(this._container),this._map.off(\"move\",this._onMove),this._map=void 0},Bi.prototype.setUnit=function(t){this.options.unit=t,Yi(this._map,this._container,this.options)};var Vi=function(e){this._fullscreen=!1,e&&e.container&&(e.container instanceof t.window.HTMLElement?this._container=e.container:t.warnOnce(\"Full screen control 'container' must be a DOM element.\")),t.bindAll([\"_onClickFullscreen\",\"_changeIcon\"],this),\"onfullscreenchange\"in t.window.document?this._fullscreenchange=\"fullscreenchange\":\"onmozfullscreenchange\"in t.window.document?this._fullscreenchange=\"mozfullscreenchange\":\"onwebkitfullscreenchange\"in t.window.document?this._fullscreenchange=\"webkitfullscreenchange\":\"onmsfullscreenchange\"in t.window.document&&(this._fullscreenchange=\"MSFullscreenChange\")};Vi.prototype.onAdd=function(e){return this._map=e,this._container||(this._container=this._map.getContainer()),this._controlContainer=n.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-group\"),this._checkFullscreenSupport()?this._setupUI():(this._controlContainer.style.display=\"none\",t.warnOnce(\"This device does not support fullscreen mode.\")),this._controlContainer},Vi.prototype.onRemove=function(){n.remove(this._controlContainer),this._map=null,t.window.document.removeEventListener(this._fullscreenchange,this._changeIcon)},Vi.prototype._checkFullscreenSupport=function(){return!!(t.window.document.fullscreenEnabled||t.window.document.mozFullScreenEnabled||t.window.document.msFullscreenEnabled||t.window.document.webkitFullscreenEnabled)},Vi.prototype._setupUI=function(){var e=this._fullscreenButton=n.create(\"button\",\"mapboxgl-ctrl-fullscreen\",this._controlContainer);n.create(\"span\",\"mapboxgl-ctrl-icon\",e).setAttribute(\"aria-hidden\",!0),e.type=\"button\",this._updateTitle(),this._fullscreenButton.addEventListener(\"click\",this._onClickFullscreen),t.window.document.addEventListener(this._fullscreenchange,this._changeIcon)},Vi.prototype._updateTitle=function(){var t=this._getTitle();this._fullscreenButton.setAttribute(\"aria-label\",t),this._fullscreenButton.title=t},Vi.prototype._getTitle=function(){return this._map._getUIString(this._isFullscreen()?\"FullscreenControl.Exit\":\"FullscreenControl.Enter\")},Vi.prototype._isFullscreen=function(){return this._fullscreen},Vi.prototype._changeIcon=function(){(t.window.document.fullscreenElement||t.window.document.mozFullScreenElement||t.window.document.webkitFullscreenElement||t.window.document.msFullscreenElement)===this._container!==this._fullscreen&&(this._fullscreen=!this._fullscreen,this._fullscreenButton.classList.toggle(\"mapboxgl-ctrl-shrink\"),this._fullscreenButton.classList.toggle(\"mapboxgl-ctrl-fullscreen\"),this._updateTitle())},Vi.prototype._onClickFullscreen=function(){this._isFullscreen()?t.window.document.exitFullscreen?t.window.document.exitFullscreen():t.window.document.mozCancelFullScreen?t.window.document.mozCancelFullScreen():t.window.document.msExitFullscreen?t.window.document.msExitFullscreen():t.window.document.webkitCancelFullScreen&&t.window.document.webkitCancelFullScreen():this._container.requestFullscreen?this._container.requestFullscreen():this._container.mozRequestFullScreen?this._container.mozRequestFullScreen():this._container.msRequestFullscreen?this._container.msRequestFullscreen():this._container.webkitRequestFullscreen&&this._container.webkitRequestFullscreen()};var Ui={closeButton:!0,closeOnClick:!0,className:\"\",maxWidth:\"240px\"},Wi=function(e){function r(n){e.call(this),this.options=t.extend(Object.create(Ui),n),t.bindAll([\"_update\",\"_onClose\",\"remove\",\"_onMouseMove\",\"_onMouseUp\",\"_onDrag\"],this)}return e&&(r.__proto__=e),(r.prototype=Object.create(e&&e.prototype)).constructor=r,r.prototype.addTo=function(e){return this._map&&this.remove(),this._map=e,this.options.closeOnClick&&this._map.on(\"click\",this._onClose),this.options.closeOnMove&&this._map.on(\"move\",this._onClose),this._map.on(\"remove\",this.remove),this._update(),this._trackPointer?(this._map.on(\"mousemove\",this._onMouseMove),this._map.on(\"mouseup\",this._onMouseUp),this._container&&this._container.classList.add(\"mapboxgl-popup-track-pointer\"),this._map._canvasContainer.classList.add(\"mapboxgl-track-pointer\")):this._map.on(\"move\",this._update),this.fire(new t.Event(\"open\")),this},r.prototype.isOpen=function(){return!!this._map},r.prototype.remove=function(){return this._content&&n.remove(this._content),this._container&&(n.remove(this._container),delete this._container),this._map&&(this._map.off(\"move\",this._update),this._map.off(\"move\",this._onClose),this._map.off(\"click\",this._onClose),this._map.off(\"remove\",this.remove),this._map.off(\"mousemove\",this._onMouseMove),this._map.off(\"mouseup\",this._onMouseUp),this._map.off(\"drag\",this._onDrag),delete this._map),this.fire(new t.Event(\"close\")),this},r.prototype.getLngLat=function(){return this._lngLat},r.prototype.setLngLat=function(e){return this._lngLat=t.LngLat.convert(e),this._pos=null,this._trackPointer=!1,this._update(),this._map&&(this._map.on(\"move\",this._update),this._map.off(\"mousemove\",this._onMouseMove),this._container&&this._container.classList.remove(\"mapboxgl-popup-track-pointer\"),this._map._canvasContainer.classList.remove(\"mapboxgl-track-pointer\")),this},r.prototype.trackPointer=function(){return this._trackPointer=!0,this._pos=null,this._update(),this._map&&(this._map.off(\"move\",this._update),this._map.on(\"mousemove\",this._onMouseMove),this._map.on(\"drag\",this._onDrag),this._container&&this._container.classList.add(\"mapboxgl-popup-track-pointer\"),this._map._canvasContainer.classList.add(\"mapboxgl-track-pointer\")),this},r.prototype.getElement=function(){return this._container},r.prototype.setText=function(e){return this.setDOMContent(t.window.document.createTextNode(e))},r.prototype.setHTML=function(e){var n,r=t.window.document.createDocumentFragment(),i=t.window.document.createElement(\"body\");for(i.innerHTML=e;n=i.firstChild;)r.appendChild(n);return this.setDOMContent(r)},r.prototype.getMaxWidth=function(){return this._container&&this._container.style.maxWidth},r.prototype.setMaxWidth=function(t){return this.options.maxWidth=t,this._update(),this},r.prototype.setDOMContent=function(t){return this._createContent(),this._content.appendChild(t),this._update(),this},r.prototype.addClassName=function(t){this._container&&this._container.classList.add(t)},r.prototype.removeClassName=function(t){this._container&&this._container.classList.remove(t)},r.prototype.toggleClassName=function(t){if(this._container)return this._container.classList.toggle(t)},r.prototype._createContent=function(){this._content&&n.remove(this._content),this._content=n.create(\"div\",\"mapboxgl-popup-content\",this._container),this.options.closeButton&&(this._closeButton=n.create(\"button\",\"mapboxgl-popup-close-button\",this._content),this._closeButton.type=\"button\",this._closeButton.setAttribute(\"aria-label\",\"Close popup\"),this._closeButton.innerHTML=\"&#215;\",this._closeButton.addEventListener(\"click\",this._onClose))},r.prototype._onMouseUp=function(t){this._update(t.point)},r.prototype._onMouseMove=function(t){this._update(t.point)},r.prototype._onDrag=function(t){this._update(t.point)},r.prototype._update=function(e){var r=this;if(this._map&&(this._lngLat||this._trackPointer)&&this._content&&(this._container||(this._container=n.create(\"div\",\"mapboxgl-popup\",this._map.getContainer()),this._tip=n.create(\"div\",\"mapboxgl-popup-tip\",this._container),this._container.appendChild(this._content),this.options.className&&this.options.className.split(\" \").forEach((function(t){return r._container.classList.add(t)})),this._trackPointer&&this._container.classList.add(\"mapboxgl-popup-track-pointer\")),this.options.maxWidth&&this._container.style.maxWidth!==this.options.maxWidth&&(this._container.style.maxWidth=this.options.maxWidth),this._map.transform.renderWorldCopies&&!this._trackPointer&&(this._lngLat=Ei(this._lngLat,this._pos,this._map.transform)),!this._trackPointer||e)){var i=this._pos=this._trackPointer&&e?e:this._map.project(this._lngLat),a=this.options.anchor,o=function e(n){if(n){if(\"number\"==typeof n){var r=Math.round(Math.sqrt(.5*Math.pow(n,2)));return{center:new t.Point(0,0),top:new t.Point(0,n),\"top-left\":new t.Point(r,r),\"top-right\":new t.Point(-r,r),bottom:new t.Point(0,-n),\"bottom-left\":new t.Point(r,-r),\"bottom-right\":new t.Point(-r,-r),left:new t.Point(n,0),right:new t.Point(-n,0)}}if(n instanceof t.Point||Array.isArray(n)){var i=t.Point.convert(n);return{center:i,top:i,\"top-left\":i,\"top-right\":i,bottom:i,\"bottom-left\":i,\"bottom-right\":i,left:i,right:i}}return{center:t.Point.convert(n.center||[0,0]),top:t.Point.convert(n.top||[0,0]),\"top-left\":t.Point.convert(n[\"top-left\"]||[0,0]),\"top-right\":t.Point.convert(n[\"top-right\"]||[0,0]),bottom:t.Point.convert(n.bottom||[0,0]),\"bottom-left\":t.Point.convert(n[\"bottom-left\"]||[0,0]),\"bottom-right\":t.Point.convert(n[\"bottom-right\"]||[0,0]),left:t.Point.convert(n.left||[0,0]),right:t.Point.convert(n.right||[0,0])}}return e(new t.Point(0,0))}(this.options.offset);if(!a){var s,l=this._container.offsetWidth,c=this._container.offsetHeight;s=i.y+o.bottom.y<c?[\"top\"]:i.y>this._map.transform.height-c?[\"bottom\"]:[],i.x<l/2?s.push(\"left\"):i.x>this._map.transform.width-l/2&&s.push(\"right\"),a=0===s.length?\"bottom\":s.join(\"-\")}var u=i.add(o[a]).round();n.setTransform(this._container,Oi[a]+\" translate(\"+u.x+\"px,\"+u.y+\"px)\"),Di(this._container,a,\"popup\")}},r.prototype._onClose=function(){this.remove()},r}(t.Evented),qi={version:t.version,supported:e,setRTLTextPlugin:t.setRTLTextPlugin,getRTLTextPluginStatus:t.getRTLTextPluginStatus,Map:Ti,NavigationControl:Li,GeolocateControl:Fi,AttributionControl:yi,ScaleControl:Bi,FullscreenControl:Vi,Popup:Wi,Marker:Pi,Style:Ve,LngLat:t.LngLat,LngLatBounds:t.LngLatBounds,Point:t.Point,MercatorCoordinate:t.MercatorCoordinate,Evented:t.Evented,config:t.config,prewarm:function(){Ft().acquire(Pt)},clearPrewarmedResources:function(){var t=zt;t&&(t.isPreloaded()&&1===t.numActive()?(t.release(Pt),zt=null):console.warn(\"Could not clear WebWorkers since there are active Map instances that still reference it. The pre-warmed WebWorker pool can only be cleared when all map instances have been removed with map.remove()\"))},get accessToken(){return t.config.ACCESS_TOKEN},set accessToken(e){t.config.ACCESS_TOKEN=e},get baseApiUrl(){return t.config.API_URL},set baseApiUrl(e){t.config.API_URL=e},get workerCount(){return Rt.workerCount},set workerCount(t){Rt.workerCount=t},get maxParallelImageRequests(){return t.config.MAX_PARALLEL_IMAGE_REQUESTS},set maxParallelImageRequests(e){t.config.MAX_PARALLEL_IMAGE_REQUESTS=e},clearStorage:function(e){t.clearTileCache(e)},workerUrl:\"\"};return qi})),n}))},{}],474:[function(t,e,n){\"use strict\";e.exports=function(t){for(var e=1<<t+1,n=new Array(e),r=0;r<e;++r)n[r]=a(t,r);return n};var r=t(\"convex-hull\");function i(t,e,n){for(var r=new Array(t),i=0;i<t;++i)r[i]=0,i===e&&(r[i]+=.5),i===n&&(r[i]+=.5);return r}function a(t,e){if(0===e||e===(1<<t+1)-1)return[];for(var n=[],a=[],o=0;o<=t;++o)if(e&1<<o){n.push(i(t,o-1,o-1)),a.push(null);for(var s=0;s<=t;++s)~e&1<<s&&(n.push(i(t,o-1,s-1)),a.push([o,s]))}var l=r(n),c=[];t:for(o=0;o<l.length;++o){var u=l[o],h=[];for(s=0;s<u.length;++s){if(!a[u[s]])continue t;h.push(a[u[s]].slice())}c.push(h)}return c}},{\"convex-hull\":135}],475:[function(t,e,n){var r=t(\"./normalize\"),i=t(\"gl-mat4/create\"),a=t(\"gl-mat4/clone\"),o=t(\"gl-mat4/determinant\"),s=t(\"gl-mat4/invert\"),l=t(\"gl-mat4/transpose\"),c={length:t(\"gl-vec3/length\"),normalize:t(\"gl-vec3/normalize\"),dot:t(\"gl-vec3/dot\"),cross:t(\"gl-vec3/cross\")},u=i(),h=i(),d=[0,0,0,0],f=[[0,0,0],[0,0,0],[0,0,0]],p=[0,0,0];function m(t,e,n,r,i){t[0]=e[0]*r+n[0]*i,t[1]=e[1]*r+n[1]*i,t[2]=e[2]*r+n[2]*i}e.exports=function(t,e,n,i,g,y){if(e||(e=[0,0,0]),n||(n=[0,0,0]),i||(i=[0,0,0]),g||(g=[0,0,0,1]),y||(y=[0,0,0,1]),!r(u,t))return!1;if(a(h,u),h[3]=0,h[7]=0,h[11]=0,h[15]=1,Math.abs(o(h)<1e-8))return!1;var v,_,b,x,w,k,M,T=u[3],S=u[7],A=u[11],L=u[12],C=u[13],E=u[14],O=u[15];if(0!==T||0!==S||0!==A){if(d[0]=T,d[1]=S,d[2]=A,d[3]=O,!s(h,h))return!1;l(h,h),(v=g)[0]=(b=h)[0]*(x=(_=d)[0])+b[4]*(w=_[1])+b[8]*(k=_[2])+b[12]*(M=_[3]),v[1]=b[1]*x+b[5]*w+b[9]*k+b[13]*M,v[2]=b[2]*x+b[6]*w+b[10]*k+b[14]*M,v[3]=b[3]*x+b[7]*w+b[11]*k+b[15]*M}else g[0]=g[1]=g[2]=0,g[3]=1;if(e[0]=L,e[1]=C,e[2]=E,function(t,e){t[0][0]=e[0],t[0][1]=e[1],t[0][2]=e[2],t[1][0]=e[4],t[1][1]=e[5],t[1][2]=e[6],t[2][0]=e[8],t[2][1]=e[9],t[2][2]=e[10]}(f,u),n[0]=c.length(f[0]),c.normalize(f[0],f[0]),i[0]=c.dot(f[0],f[1]),m(f[1],f[1],f[0],1,-i[0]),n[1]=c.length(f[1]),c.normalize(f[1],f[1]),i[0]/=n[1],i[1]=c.dot(f[0],f[2]),m(f[2],f[2],f[0],1,-i[1]),i[2]=c.dot(f[1],f[2]),m(f[2],f[2],f[1],1,-i[2]),n[2]=c.length(f[2]),c.normalize(f[2],f[2]),i[1]/=n[2],i[2]/=n[2],c.cross(p,f[1],f[2]),c.dot(f[0],p)<0)for(var D=0;D<3;D++)n[D]*=-1,f[D][0]*=-1,f[D][1]*=-1,f[D][2]*=-1;return y[0]=.5*Math.sqrt(Math.max(1+f[0][0]-f[1][1]-f[2][2],0)),y[1]=.5*Math.sqrt(Math.max(1-f[0][0]+f[1][1]-f[2][2],0)),y[2]=.5*Math.sqrt(Math.max(1-f[0][0]-f[1][1]+f[2][2],0)),y[3]=.5*Math.sqrt(Math.max(1+f[0][0]+f[1][1]+f[2][2],0)),f[2][1]>f[1][2]&&(y[0]=-y[0]),f[0][2]>f[2][0]&&(y[1]=-y[1]),f[1][0]>f[0][1]&&(y[2]=-y[2]),!0}},{\"./normalize\":476,\"gl-mat4/clone\":278,\"gl-mat4/create\":280,\"gl-mat4/determinant\":281,\"gl-mat4/invert\":293,\"gl-mat4/transpose\":306,\"gl-vec3/cross\":365,\"gl-vec3/dot\":370,\"gl-vec3/length\":380,\"gl-vec3/normalize\":387}],476:[function(t,e,n){e.exports=function(t,e){var n=e[15];if(0===n)return!1;for(var r=1/n,i=0;i<16;i++)t[i]=e[i]*r;return!0}},{}],477:[function(t,e,n){var r=t(\"gl-vec3/lerp\"),i=t(\"mat4-recompose\"),a=t(\"mat4-decompose\"),o=t(\"gl-mat4/determinant\"),s=t(\"quat-slerp\"),l=h(),c=h(),u=h();function h(){return{translate:d(),scale:d(1),skew:d(),perspective:[0,0,0,1],quaternion:[0,0,0,1]}}function d(t){return[t||0,t||0,t||0]}e.exports=function(t,e,n,h){if(0===o(e)||0===o(n))return!1;var d=a(e,l.translate,l.scale,l.skew,l.perspective,l.quaternion),f=a(n,c.translate,c.scale,c.skew,c.perspective,c.quaternion);return!(!d||!f||(r(u.translate,l.translate,c.translate,h),r(u.skew,l.skew,c.skew,h),r(u.scale,l.scale,c.scale,h),r(u.perspective,l.perspective,c.perspective,h),s(u.quaternion,l.quaternion,c.quaternion,h),i(t,u.translate,u.scale,u.skew,u.perspective,u.quaternion),0))}},{\"gl-mat4/determinant\":281,\"gl-vec3/lerp\":381,\"mat4-decompose\":475,\"mat4-recompose\":478,\"quat-slerp\":527}],478:[function(t,e,n){var r={identity:t(\"gl-mat4/identity\"),translate:t(\"gl-mat4/translate\"),multiply:t(\"gl-mat4/multiply\"),create:t(\"gl-mat4/create\"),scale:t(\"gl-mat4/scale\"),fromRotationTranslation:t(\"gl-mat4/fromRotationTranslation\")},i=(r.create(),r.create());e.exports=function(t,e,n,a,o,s){return r.identity(t),r.fromRotationTranslation(t,s,e),t[3]=o[0],t[7]=o[1],t[11]=o[2],t[15]=o[3],r.identity(i),0!==a[2]&&(i[9]=a[2],r.multiply(t,t,i)),0!==a[1]&&(i[9]=0,i[8]=a[1],r.multiply(t,t,i)),0!==a[0]&&(i[8]=0,i[4]=a[0],r.multiply(t,t,i)),r.scale(t,t,n),t}},{\"gl-mat4/create\":280,\"gl-mat4/fromRotationTranslation\":284,\"gl-mat4/identity\":291,\"gl-mat4/multiply\":295,\"gl-mat4/scale\":303,\"gl-mat4/translate\":305}],479:[function(t,e,n){\"use strict\";e.exports=Math.log2||function(t){return Math.log(t)*Math.LOG2E}},{}],480:[function(t,e,n){\"use strict\";var r=t(\"binary-search-bounds\"),i=t(\"mat4-interpolate\"),a=t(\"gl-mat4/invert\"),o=t(\"gl-mat4/rotateX\"),s=t(\"gl-mat4/rotateY\"),l=t(\"gl-mat4/rotateZ\"),c=t(\"gl-mat4/lookAt\"),u=t(\"gl-mat4/translate\"),h=(t(\"gl-mat4/scale\"),t(\"gl-vec3/normalize\")),d=[0,0,0];function f(t){this._components=t.slice(),this._time=[0],this.prevMatrix=t.slice(),this.nextMatrix=t.slice(),this.computedMatrix=t.slice(),this.computedInverse=t.slice(),this.computedEye=[0,0,0],this.computedUp=[0,0,0],this.computedCenter=[0,0,0],this.computedRadius=[0],this._limits=[-1/0,1/0]}e.exports=function(t){return new f((t=t||{}).matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])};var p=f.prototype;p.recalcMatrix=function(t){var e=this._time,n=r.le(e,t),o=this.computedMatrix;if(!(n<0)){var s=this._components;if(n===e.length-1)for(var l=16*n,c=0;c<16;++c)o[c]=s[l++];else{var u=e[n+1]-e[n],d=(l=16*n,this.prevMatrix),f=!0;for(c=0;c<16;++c)d[c]=s[l++];var p=this.nextMatrix;for(c=0;c<16;++c)p[c]=s[l++],f=f&&d[c]===p[c];if(u<1e-6||f)for(c=0;c<16;++c)o[c]=d[c];else i(o,d,p,(t-e[n])/u)}var m=this.computedUp;m[0]=o[1],m[1]=o[5],m[2]=o[9],h(m,m);var g=this.computedInverse;a(g,o);var y=this.computedEye,v=g[15];y[0]=g[12]/v,y[1]=g[13]/v,y[2]=g[14]/v;var _=this.computedCenter,b=Math.exp(this.computedRadius[0]);for(c=0;c<3;++c)_[c]=y[c]-o[2+4*c]*b}},p.idle=function(t){if(!(t<this.lastT())){for(var e=this._components,n=e.length-16,r=0;r<16;++r)e.push(e[n++]);this._time.push(t)}},p.flush=function(t){var e=r.gt(this._time,t)-2;e<0||(this._time.splice(0,e),this._components.splice(0,16*e))},p.lastT=function(){return this._time[this._time.length-1]},p.lookAt=function(t,e,n,r){this.recalcMatrix(t),this.setMatrix(t,c(this.computedMatrix,e=e||this.computedEye,n=n||d,r=r||this.computedUp));for(var i=0,a=0;a<3;++a)i+=Math.pow(n[a]-e[a],2);i=Math.log(Math.sqrt(i)),this.computedRadius[0]=i},p.rotate=function(t,e,n,r){this.recalcMatrix(t);var i=this.computedInverse;e&&s(i,i,e),n&&o(i,i,n),r&&l(i,i,r),this.setMatrix(t,a(this.computedMatrix,i))};var m=[0,0,0];p.pan=function(t,e,n,r){m[0]=-(e||0),m[1]=-(n||0),m[2]=-(r||0),this.recalcMatrix(t);var i=this.computedInverse;u(i,i,m),this.setMatrix(t,a(i,i))},p.translate=function(t,e,n,r){m[0]=e||0,m[1]=n||0,m[2]=r||0,this.recalcMatrix(t);var i=this.computedMatrix;u(i,i,m),this.setMatrix(t,i)},p.setMatrix=function(t,e){if(!(t<this.lastT())){this._time.push(t);for(var n=0;n<16;++n)this._components.push(e[n])}},p.setDistance=function(t,e){this.computedRadius[0]=e},p.setDistanceLimits=function(t,e){var n=this._limits;n[0]=t,n[1]=e},p.getDistanceLimits=function(t){var e=this._limits;return t?(t[0]=e[0],t[1]=e[1],t):e}},{\"binary-search-bounds\":481,\"gl-mat4/invert\":293,\"gl-mat4/lookAt\":294,\"gl-mat4/rotateX\":300,\"gl-mat4/rotateY\":301,\"gl-mat4/rotateZ\":302,\"gl-mat4/scale\":303,\"gl-mat4/translate\":305,\"gl-vec3/normalize\":387,\"mat4-interpolate\":477}],481:[function(t,e,n){arguments[4][243][0].apply(n,arguments)},{dup:243}],482:[function(t,e,n){\"use strict\";e.exports=function(t){var e=t.length;if(e<3){for(var n=new Array(e),i=0;i<e;++i)n[i]=i;return 2===e&&t[0][0]===t[1][0]&&t[0][1]===t[1][1]?[0]:n}var a=new Array(e);for(i=0;i<e;++i)a[i]=i;a.sort((function(e,n){return t[e][0]-t[n][0]||t[e][1]-t[n][1]}));var o=[a[0],a[1]],s=[a[0],a[1]];for(i=2;i<e;++i){for(var l=a[i],c=t[l],u=o.length;u>1&&r(t[o[u-2]],t[o[u-1]],c)<=0;)u-=1,o.pop();for(o.push(l),u=s.length;u>1&&r(t[s[u-2]],t[s[u-1]],c)>=0;)u-=1,s.pop();s.push(l)}n=new Array(s.length+o.length-2);for(var h=0,d=(i=0,o.length);i<d;++i)n[h++]=o[i];for(var f=s.length-2;f>0;--f)n[h++]=s[f];return n};var r=t(\"robust-orientation\")[3]},{\"robust-orientation\":548}],483:[function(t,e,n){\"use strict\";e.exports=function(t,e){e||(e=t,t=window);var n=0,i=0,a=0,o={shift:!1,alt:!1,control:!1,meta:!1},s=!1;function l(t){var e=!1;return\"altKey\"in t&&(e=e||t.altKey!==o.alt,o.alt=!!t.altKey),\"shiftKey\"in t&&(e=e||t.shiftKey!==o.shift,o.shift=!!t.shiftKey),\"ctrlKey\"in t&&(e=e||t.ctrlKey!==o.control,o.control=!!t.ctrlKey),\"metaKey\"in t&&(e=e||t.metaKey!==o.meta,o.meta=!!t.metaKey),e}function c(t,s){var c=r.x(s),u=r.y(s);\"buttons\"in s&&(t=0|s.buttons),(t!==n||c!==i||u!==a||l(s))&&(n=0|t,i=c||0,a=u||0,e&&e(n,i,a,o))}function u(t){c(0,t)}function h(){(n||i||a||o.shift||o.alt||o.meta||o.control)&&(i=a=0,n=0,o.shift=o.alt=o.control=o.meta=!1,e&&e(0,0,0,o))}function d(t){l(t)&&e&&e(n,i,a,o)}function f(t){0===r.buttons(t)?c(0,t):c(n,t)}function p(t){c(n|r.buttons(t),t)}function m(t){c(n&~r.buttons(t),t)}function g(){s||(s=!0,t.addEventListener(\"mousemove\",f),t.addEventListener(\"mousedown\",p),t.addEventListener(\"mouseup\",m),t.addEventListener(\"mouseleave\",u),t.addEventListener(\"mouseenter\",u),t.addEventListener(\"mouseout\",u),t.addEventListener(\"mouseover\",u),t.addEventListener(\"blur\",h),t.addEventListener(\"keyup\",d),t.addEventListener(\"keydown\",d),t.addEventListener(\"keypress\",d),t!==window&&(window.addEventListener(\"blur\",h),window.addEventListener(\"keyup\",d),window.addEventListener(\"keydown\",d),window.addEventListener(\"keypress\",d)))}g();var y={element:t};return Object.defineProperties(y,{enabled:{get:function(){return s},set:function(e){e?g():s&&(s=!1,t.removeEventListener(\"mousemove\",f),t.removeEventListener(\"mousedown\",p),t.removeEventListener(\"mouseup\",m),t.removeEventListener(\"mouseleave\",u),t.removeEventListener(\"mouseenter\",u),t.removeEventListener(\"mouseout\",u),t.removeEventListener(\"mouseover\",u),t.removeEventListener(\"blur\",h),t.removeEventListener(\"keyup\",d),t.removeEventListener(\"keydown\",d),t.removeEventListener(\"keypress\",d),t!==window&&(window.removeEventListener(\"blur\",h),window.removeEventListener(\"keyup\",d),window.removeEventListener(\"keydown\",d),window.removeEventListener(\"keypress\",d)))},enumerable:!0},buttons:{get:function(){return n},enumerable:!0},x:{get:function(){return i},enumerable:!0},y:{get:function(){return a},enumerable:!0},mods:{get:function(){return o},enumerable:!0}}),y};var r=t(\"mouse-event\")},{\"mouse-event\":485}],484:[function(t,e,n){var r={left:0,top:0};e.exports=function(t,e,n){e=e||t.currentTarget||t.srcElement,Array.isArray(n)||(n=[0,0]);var i,a=t.clientX||0,o=t.clientY||0,s=(i=e)===window||i===document||i===document.body?r:i.getBoundingClientRect();return n[0]=a-s.left,n[1]=o-s.top,n}},{}],485:[function(t,e,n){\"use strict\";function r(t){return t.target||t.srcElement||window}n.buttons=function(t){if(\"object\"==typeof t){if(\"buttons\"in t)return t.buttons;if(\"which\"in t){if(2===(e=t.which))return 4;if(3===e)return 2;if(e>0)return 1<<e-1}else if(\"button\"in t){var e;if(1===(e=t.button))return 4;if(2===e)return 2;if(e>=0)return 1<<e}}return 0},n.element=r,n.x=function(t){if(\"object\"==typeof t){if(\"offsetX\"in t)return t.offsetX;var e=r(t).getBoundingClientRect();return t.clientX-e.left}return 0},n.y=function(t){if(\"object\"==typeof t){if(\"offsetY\"in t)return t.offsetY;var e=r(t).getBoundingClientRect();return t.clientY-e.top}return 0}},{}],486:[function(t,e,n){\"use strict\";var r=t(\"to-px\");e.exports=function(t,e,n){\"function\"==typeof t&&(n=!!e,e=t,t=window);var i=r(\"ex\",t),a=function(t){n&&t.preventDefault();var r=t.deltaX||0,a=t.deltaY||0,o=t.deltaZ||0,s=1;switch(t.deltaMode){case 1:s=i;break;case 2:s=window.innerHeight}if(a*=s,o*=s,(r*=s)||a||o)return e(r,a,o,t)};return t.addEventListener(\"wheel\",a),a}},{\"to-px\":578}],487:[function(t,e,n){\"use strict\";var r=t(\"typedarray-pool\");function i(t){return\"a\"+t}function a(t){return\"d\"+t}function o(t,e){return\"c\"+t+\"_\"+e}function s(t){return\"s\"+t}function l(t,e){return\"t\"+t+\"_\"+e}function c(t){return\"o\"+t}function u(t){return\"x\"+t}function h(t){return\"p\"+t}function d(t,e){return\"d\"+t+\"_\"+e}function f(t){return\"i\"+t}function p(t,e){return\"u\"+t+\"_\"+e}function m(t){return\"b\"+t}function g(t){return\"y\"+t}function y(t){return\"e\"+t}function v(t){return\"v\"+t}e.exports=function(t){function e(t){throw new Error(\"ndarray-extract-contour: \"+t)}\"object\"!=typeof t&&e(\"Must specify arguments\");var n=t.order;Array.isArray(n)||e(\"Must specify order\");var T=t.arrayArguments||1;T<1&&e(\"Must have at least one array argument\");var S=t.scalarArguments||0;S<0&&e(\"Scalar arg count must be > 0\"),\"function\"!=typeof t.vertex&&e(\"Must specify vertex creation function\"),\"function\"!=typeof t.cell&&e(\"Must specify cell creation function\"),\"function\"!=typeof t.phase&&e(\"Must specify phase function\");for(var A=t.getters||[],L=new Array(T),C=0;C<T;++C)L[C]=A.indexOf(C)>=0;return function(t,e,n,T,S,A){var L=A.length,C=S.length;if(C<2)throw new Error(\"ndarray-extract-contour: Dimension must be at least 2\");for(var E=\"extractContour\"+S.join(\"_\"),O=[],D=[],I=[],P=0;P<L;++P)I.push(i(P));for(P=0;P<T;++P)I.push(u(P));for(P=0;P<C;++P)D.push(s(P)+\"=\"+i(0)+\".shape[\"+P+\"]|0\");for(P=0;P<L;++P){D.push(a(P)+\"=\"+i(P)+\".data\",c(P)+\"=\"+i(P)+\".offset|0\");for(var R=0;R<C;++R)D.push(l(P,R)+\"=\"+i(P)+\".stride[\"+R+\"]|0\")}for(P=0;P<L;++P)for(D.push(h(P)+\"=\"+c(P)),D.push(o(P,0)),R=1;R<1<<C;++R){for(var z=[],j=0;j<C;++j)R&1<<j&&z.push(\"-\"+l(P,j));D.push(d(P,R)+\"=(\"+z.join(\"\")+\")|0\"),D.push(o(P,R)+\"=0\")}for(P=0;P<L;++P)for(R=0;R<C;++R){var F=[l(P,S[R])];R>0&&F.push(l(P,S[R-1])+\"*\"+s(S[R-1])),D.push(p(P,S[R])+\"=(\"+F.join(\"-\")+\")|0\")}for(P=0;P<C;++P)D.push(f(P)+\"=0\");D.push(\"N=0\");var N=[\"2\"];for(P=C-2;P>=0;--P)N.push(s(S[P]));for(D.push(\"Q=(\"+N.join(\"*\")+\")|0\",\"P=mallocUint32(Q)\",\"V=mallocUint32(Q)\",\"X=0\"),D.push(m(0)+\"=0\"),R=1;R<1<<C;++R){var B=[],Y=[];for(j=0;j<C;++j)R&1<<j&&(0===Y.length?B.push(\"1\"):B.unshift(Y.join(\"*\"))),Y.push(s(S[j]));var H=\"\";B[0].indexOf(s(S[C-2]))<0&&(H=\"-\");var V=M(C,R,S);D.push(y(V)+\"=(-\"+B.join(\"-\")+\")|0\",g(V)+\"=(\"+H+B.join(\"-\")+\")|0\",m(V)+\"=0\")}function U(t,e){O.push(\"for(\",f(S[t]),\"=\",e,\";\",f(S[t]),\"<\",s(S[t]),\";\",\"++\",f(S[t]),\"){\")}function W(t){for(var e=0;e<L;++e)O.push(h(e),\"+=\",p(e,S[t]),\";\");O.push(\"}\")}function q(){for(var t=1;t<1<<C;++t)O.push(k,\"=\",y(t),\";\",y(t),\"=\",g(t),\";\",g(t),\"=\",k,\";\")}D.push(v(0)+\"=0\",\"T=0\"),function t(e,n){if(e<0)!function(t){for(var e=0;e<L;++e)A[e]?O.push(o(e,0),\"=\",a(e),\".get(\",h(e),\");\"):O.push(o(e,0),\"=\",a(e),\"[\",h(e),\"];\");var n=[];for(e=0;e<L;++e)n.push(o(e,0));for(e=0;e<T;++e)n.push(u(e));O.push(m(0),\"=\",b,\"[\",w,\"]=phase(\",n.join(),\");\");for(var r=1;r<1<<C;++r)O.push(m(r),\"=\",b,\"[\",w,\"+\",y(r),\"];\");var i=[];for(r=1;r<1<<C;++r)i.push(\"(\"+m(0)+\"!==\"+m(r)+\")\");O.push(\"if(\",i.join(\"||\"),\"){\");var s=[];for(e=0;e<C;++e)s.push(f(e));for(e=0;e<L;++e)for(s.push(o(e,0)),r=1;r<1<<C;++r)A[e]?O.push(o(e,r),\"=\",a(e),\".get(\",h(e),\"+\",d(e,r),\");\"):O.push(o(e,r),\"=\",a(e),\"[\",h(e),\"+\",d(e,r),\"];\"),s.push(o(e,r));for(e=0;e<1<<C;++e)s.push(m(e));for(e=0;e<T;++e)s.push(u(e));O.push(\"vertex(\",s.join(),\");\",v(0),\"=\",_,\"[\",w,\"]=\",x,\"++;\");var l=(1<<C)-1,c=m(l);for(r=0;r<C;++r)if(0==(t&~(1<<r))){for(var p=l^1<<r,g=m(p),k=[],M=p;M>0;M=M-1&p)k.push(\"V[X+\"+y(M)+\"]\");for(k.push(v(0)),M=0;M<L;++M)1&r?k.push(o(M,l),o(M,p)):k.push(o(M,p),o(M,l));for(1&r?k.push(c,g):k.push(g,c),M=0;M<T;++M)k.push(u(M));O.push(\"if(\",c,\"!==\",g,\"){\",\"face(\",k.join(),\")}\")}O.push(\"}\",w,\"+=1;\")}(n);else{(function(t){for(var e=t-1;e>=0;--e)U(e,0);var n=[];for(e=0;e<L;++e)n.push(A[e]?a(e)+\".get(\"+h(e)+\")\":a(e)+\"[\"+h(e)+\"]\");for(e=0;e<T;++e)n.push(u(e));for(O.push(b,\"[\",w,\"++]=phase(\",n.join(),\");\"),e=0;e<t;++e)W(e);for(var r=0;r<L;++r)O.push(h(r),\"+=\",p(r,S[t]),\";\")})(e),O.push(\"if(\",s(S[e]),\">0){\",f(S[e]),\"=1;\"),t(e-1,n|1<<S[e]);for(var r=0;r<L;++r)O.push(h(r),\"+=\",p(r,S[e]),\";\");e===C-1&&(O.push(w,\"=0;\"),q()),U(e,2),t(e-1,n),e===C-1&&(O.push(\"if(\",f(S[C-1]),\"&1){\",w,\"=0;}\"),q()),W(e),O.push(\"}\")}}(C-1,0),O.push(\"freeUint32(\",_,\");freeUint32(\",b,\");\");var G=[\"'use strict';\",\"function \",E,\"(\",I.join(),\"){\",\"var \",D.join(),\";\",O.join(\"\"),\"}\",\"return \",E].join(\"\");return new Function(\"vertex\",\"face\",\"phase\",\"mallocUint32\",\"freeUint32\",G)(t,e,n,r.mallocUint32,r.freeUint32)}(t.vertex,t.cell,t.phase,S,n,L)};var _=\"V\",b=\"P\",x=\"N\",w=\"X\",k=\"T\";function M(t,e,n){for(var r=0,i=0;i<t;++i)e&1<<i&&(r|=1<<n[i]);return r}},{\"typedarray-pool\":595}],488:[function(t,e,n){\"use strict\";e.exports=function(t,e,n){if(Array.isArray(n)){if(n.length!==e.dimension)throw new Error(\"ndarray-gradient: invalid boundary conditions\")}else n=r(e.dimension,\"string\"==typeof n?n:\"clamp\");if(t.dimension!==e.dimension+1)throw new Error(\"ndarray-gradient: output dimension must be +1 input dimension\");if(t.shape[e.dimension]!==e.dimension)throw new Error(\"ndarray-gradient: output shape must match input shape\");for(var i=0;i<e.dimension;++i)if(t.shape[i]!==e.shape[i])throw new Error(\"ndarray-gradient: shape mismatch\");return 0===e.size?t:e.dimension<=0?(t.set(0),t):function(t){var e=t.join();if(y=o[e])return y;var n=t.length,r=[\"function gradient(dst,src){var s=src.shape.slice();\"];function i(e){for(var i=n-e.length,a=[],o=[],s=[],l=0;l<n;++l)e.indexOf(l+1)>=0?s.push(\"0\"):e.indexOf(-(l+1))>=0?s.push(\"s[\"+l+\"]-1\"):(s.push(\"-1\"),a.push(\"1\"),o.push(\"s[\"+l+\"]-2\"));var c=\".lo(\"+a.join()+\").hi(\"+o.join()+\")\";if(0===a.length&&(c=\"\"),i>0){for(r.push(\"if(1\"),l=0;l<n;++l)e.indexOf(l+1)>=0||e.indexOf(-(l+1))>=0||r.push(\"&&s[\",l,\"]>2\");for(r.push(\"){grad\",i,\"(src.pick(\",s.join(),\")\",c),l=0;l<n;++l)e.indexOf(l+1)>=0||e.indexOf(-(l+1))>=0||r.push(\",dst.pick(\",s.join(),\",\",l,\")\",c);r.push(\");\")}for(l=0;l<e.length;++l){var u=Math.abs(e[l])-1,h=\"dst.pick(\"+s.join()+\",\"+u+\")\"+c;switch(t[u]){case\"clamp\":var d=s.slice(),f=s.slice();e[l]<0?d[u]=\"s[\"+u+\"]-2\":f[u]=\"1\",0===i?r.push(\"if(s[\",u,\"]>1){dst.set(\",s.join(),\",\",u,\",0.5*(src.get(\",d.join(),\")-src.get(\",f.join(),\")))}else{dst.set(\",s.join(),\",\",u,\",0)};\"):r.push(\"if(s[\",u,\"]>1){diff(\",h,\",src.pick(\",d.join(),\")\",c,\",src.pick(\",f.join(),\")\",c,\");}else{zero(\",h,\");};\");break;case\"mirror\":0===i?r.push(\"dst.set(\",s.join(),\",\",u,\",0);\"):r.push(\"zero(\",h,\");\");break;case\"wrap\":var p=s.slice(),m=s.slice();e[l]<0?(p[u]=\"s[\"+u+\"]-2\",m[u]=\"0\"):(p[u]=\"s[\"+u+\"]-1\",m[u]=\"1\"),0===i?r.push(\"if(s[\",u,\"]>2){dst.set(\",s.join(),\",\",u,\",0.5*(src.get(\",p.join(),\")-src.get(\",m.join(),\")))}else{dst.set(\",s.join(),\",\",u,\",0)};\"):r.push(\"if(s[\",u,\"]>2){diff(\",h,\",src.pick(\",p.join(),\")\",c,\",src.pick(\",m.join(),\")\",c,\");}else{zero(\",h,\");};\");break;default:throw new Error(\"ndarray-gradient: Invalid boundary condition\")}}i>0&&r.push(\"};\")}for(var s=0;s<1<<n;++s){for(var h=[],d=0;d<n;++d)s&1<<d&&h.push(d+1);for(var f=0;f<1<<h.length;++f){var p=h.slice();for(d=0;d<h.length;++d)f&1<<d&&(p[d]=-p[d]);i(p)}}r.push(\"return dst;};return gradient\");var m=[\"diff\",\"zero\"],g=[l,c];for(s=1;s<=n;++s)m.push(\"grad\"+s),g.push(u(s));m.push(r.join(\"\"));var y=Function.apply(void 0,m).apply(void 0,g);return a[e]=y,y}(n)(t,e)};var r=t(\"dup\"),i=t(\"cwise-compiler\"),a={},o={},s={body:\"\",args:[],thisVars:[],localVars:[]},l=i({args:[\"array\",\"array\",\"array\"],pre:s,post:s,body:{args:[{name:\"out\",lvalue:!0,rvalue:!1,count:1},{name:\"left\",lvalue:!1,rvalue:!0,count:1},{name:\"right\",lvalue:!1,rvalue:!0,count:1}],body:\"out=0.5*(left-right)\",thisVars:[],localVars:[]},funcName:\"cdiff\"}),c=i({args:[\"array\"],pre:s,post:s,body:{args:[{name:\"out\",lvalue:!0,rvalue:!1,count:1}],body:\"out=0\",thisVars:[],localVars:[]},funcName:\"zero\"});function u(t){if(t in a)return a[t];for(var e=[],n=0;n<t;++n)e.push(\"out\",n,\"s=0.5*(inp\",n,\"l-inp\",n,\"r);\");var o=[\"array\"],l=[\"junk\"];for(n=0;n<t;++n){o.push(\"array\"),l.push(\"out\"+n+\"s\");var c=r(t);c[n]=-1,o.push({array:0,offset:c.slice()}),c[n]=1,o.push({array:0,offset:c.slice()}),l.push(\"inp\"+n+\"l\",\"inp\"+n+\"r\")}return a[t]=i({args:o,pre:s,post:s,body:{body:e.join(\"\"),args:l.map((function(t){return{name:t,lvalue:0===t.indexOf(\"out\"),rvalue:0===t.indexOf(\"inp\"),count:\"junk\"!==t|0}})),thisVars:[],localVars:[]},funcName:\"fdTemplate\"+t})}},{\"cwise-compiler\":151,dup:176}],489:[function(t,e,n){\"use strict\";function r(t,e){var n=Math.floor(e),r=e-n,i=0<=n+1&&n+1<t.shape[0];return(1-r)*(0<=n&&n<t.shape[0]?+t.get(n):0)+r*(i?+t.get(n+1):0)}function i(t,e,n){var r=Math.floor(e),i=e-r,a=0<=r&&r<t.shape[0],o=0<=r+1&&r+1<t.shape[0],s=Math.floor(n),l=n-s,c=0<=s&&s<t.shape[1],u=0<=s+1&&s+1<t.shape[1],h=a&&c?t.get(r,s):0,d=a&&u?t.get(r,s+1):0;return(1-l)*((1-i)*h+i*(o&&c?t.get(r+1,s):0))+l*((1-i)*d+i*(o&&u?t.get(r+1,s+1):0))}function a(t,e,n,r){var i=Math.floor(e),a=e-i,o=0<=i&&i<t.shape[0],s=0<=i+1&&i+1<t.shape[0],l=Math.floor(n),c=n-l,u=0<=l&&l<t.shape[1],h=0<=l+1&&l+1<t.shape[1],d=Math.floor(r),f=r-d,p=0<=d&&d<t.shape[2],m=0<=d+1&&d+1<t.shape[2],g=o&&u&&p?t.get(i,l,d):0,y=o&&h&&p?t.get(i,l+1,d):0,v=s&&u&&p?t.get(i+1,l,d):0,_=s&&h&&p?t.get(i+1,l+1,d):0,b=o&&u&&m?t.get(i,l,d+1):0,x=o&&h&&m?t.get(i,l+1,d+1):0;return(1-f)*((1-c)*((1-a)*g+a*v)+c*((1-a)*y+a*_))+f*((1-c)*((1-a)*b+a*(s&&u&&m?t.get(i+1,l,d+1):0))+c*((1-a)*x+a*(s&&h&&m?t.get(i+1,l+1,d+1):0)))}function o(t){var e,n,r=0|t.shape.length,i=new Array(r),a=new Array(r),o=new Array(r),s=new Array(r);for(e=0;e<r;++e)n=+arguments[e+1],i[e]=Math.floor(n),a[e]=n-i[e],o[e]=0<=i[e]&&i[e]<t.shape[e],s[e]=0<=i[e]+1&&i[e]+1<t.shape[e];var l,c,u,h=0;t:for(e=0;e<1<<r;++e){for(c=1,u=t.offset,l=0;l<r;++l)if(e&1<<l){if(!s[l])continue t;c*=a[l],u+=t.stride[l]*(i[l]+1)}else{if(!o[l])continue t;c*=1-a[l],u+=t.stride[l]*i[l]}h+=c*t.data[u]}return h}e.exports=function(t,e,n,s){switch(t.shape.length){case 0:return 0;case 1:return r(t,e);case 2:return i(t,e,n);case 3:return a(t,e,n,s);default:return o.apply(void 0,arguments)}},e.exports.d1=r,e.exports.d2=i,e.exports.d3=a},{}],490:[function(t,e,n){\"use strict\";var r=t(\"cwise-compiler\"),i={body:\"\",args:[],thisVars:[],localVars:[]};function a(t){if(!t)return i;for(var e=0;e<t.args.length;++e){var n=t.args[e];t.args[e]=0===e?{name:n,lvalue:!0,rvalue:!!t.rvalue,count:t.count||1}:{name:n,lvalue:!1,rvalue:!0,count:1}}return t.thisVars||(t.thisVars=[]),t.localVars||(t.localVars=[]),t}function o(t){for(var e=[],n=0;n<t.args.length;++n)e.push(\"a\"+n);return new Function(\"P\",[\"return function \",t.funcName,\"_ndarrayops(\",e.join(\",\"),\") {P(\",e.join(\",\"),\");return a0}\"].join(\"\"))(function(t){return r({args:t.args,pre:a(t.pre),body:a(t.body),post:a(t.proc),funcName:t.funcName})}(t))}var s={add:\"+\",sub:\"-\",mul:\"*\",div:\"/\",mod:\"%\",band:\"&\",bor:\"|\",bxor:\"^\",lshift:\"<<\",rshift:\">>\",rrshift:\">>>\"};!function(){for(var t in s){var e=s[t];n[t]=o({args:[\"array\",\"array\",\"array\"],body:{args:[\"a\",\"b\",\"c\"],body:\"a=b\"+e+\"c\"},funcName:t}),n[t+\"eq\"]=o({args:[\"array\",\"array\"],body:{args:[\"a\",\"b\"],body:\"a\"+e+\"=b\"},rvalue:!0,funcName:t+\"eq\"}),n[t+\"s\"]=o({args:[\"array\",\"array\",\"scalar\"],body:{args:[\"a\",\"b\",\"s\"],body:\"a=b\"+e+\"s\"},funcName:t+\"s\"}),n[t+\"seq\"]=o({args:[\"array\",\"scalar\"],body:{args:[\"a\",\"s\"],body:\"a\"+e+\"=s\"},rvalue:!0,funcName:t+\"seq\"})}}();var l={not:\"!\",bnot:\"~\",neg:\"-\",recip:\"1.0/\"};!function(){for(var t in l){var e=l[t];n[t]=o({args:[\"array\",\"array\"],body:{args:[\"a\",\"b\"],body:\"a=\"+e+\"b\"},funcName:t}),n[t+\"eq\"]=o({args:[\"array\"],body:{args:[\"a\"],body:\"a=\"+e+\"a\"},rvalue:!0,count:2,funcName:t+\"eq\"})}}();var c={and:\"&&\",or:\"||\",eq:\"===\",neq:\"!==\",lt:\"<\",gt:\">\",leq:\"<=\",geq:\">=\"};!function(){for(var t in c){var e=c[t];n[t]=o({args:[\"array\",\"array\",\"array\"],body:{args:[\"a\",\"b\",\"c\"],body:\"a=b\"+e+\"c\"},funcName:t}),n[t+\"s\"]=o({args:[\"array\",\"array\",\"scalar\"],body:{args:[\"a\",\"b\",\"s\"],body:\"a=b\"+e+\"s\"},funcName:t+\"s\"}),n[t+\"eq\"]=o({args:[\"array\",\"array\"],body:{args:[\"a\",\"b\"],body:\"a=a\"+e+\"b\"},rvalue:!0,count:2,funcName:t+\"eq\"}),n[t+\"seq\"]=o({args:[\"array\",\"scalar\"],body:{args:[\"a\",\"s\"],body:\"a=a\"+e+\"s\"},rvalue:!0,count:2,funcName:t+\"seq\"})}}();var u=[\"abs\",\"acos\",\"asin\",\"atan\",\"ceil\",\"cos\",\"exp\",\"floor\",\"log\",\"round\",\"sin\",\"sqrt\",\"tan\"];!function(){for(var t=0;t<u.length;++t){var e=u[t];n[e]=o({args:[\"array\",\"array\"],pre:{args:[],body:\"this_f=Math.\"+e,thisVars:[\"this_f\"]},body:{args:[\"a\",\"b\"],body:\"a=this_f(b)\",thisVars:[\"this_f\"]},funcName:e}),n[e+\"eq\"]=o({args:[\"array\"],pre:{args:[],body:\"this_f=Math.\"+e,thisVars:[\"this_f\"]},body:{args:[\"a\"],body:\"a=this_f(a)\",thisVars:[\"this_f\"]},rvalue:!0,count:2,funcName:e+\"eq\"})}}();var h=[\"max\",\"min\",\"atan2\",\"pow\"];!function(){for(var t=0;t<h.length;++t){var e=h[t];n[e]=o({args:[\"array\",\"array\",\"array\"],pre:{args:[],body:\"this_f=Math.\"+e,thisVars:[\"this_f\"]},body:{args:[\"a\",\"b\",\"c\"],body:\"a=this_f(b,c)\",thisVars:[\"this_f\"]},funcName:e}),n[e+\"s\"]=o({args:[\"array\",\"array\",\"scalar\"],pre:{args:[],body:\"this_f=Math.\"+e,thisVars:[\"this_f\"]},body:{args:[\"a\",\"b\",\"c\"],body:\"a=this_f(b,c)\",thisVars:[\"this_f\"]},funcName:e+\"s\"}),n[e+\"eq\"]=o({args:[\"array\",\"array\"],pre:{args:[],body:\"this_f=Math.\"+e,thisVars:[\"this_f\"]},body:{args:[\"a\",\"b\"],body:\"a=this_f(a,b)\",thisVars:[\"this_f\"]},rvalue:!0,count:2,funcName:e+\"eq\"}),n[e+\"seq\"]=o({args:[\"array\",\"scalar\"],pre:{args:[],body:\"this_f=Math.\"+e,thisVars:[\"this_f\"]},body:{args:[\"a\",\"b\"],body:\"a=this_f(a,b)\",thisVars:[\"this_f\"]},rvalue:!0,count:2,funcName:e+\"seq\"})}}();var d=[\"atan2\",\"pow\"];!function(){for(var t=0;t<d.length;++t){var e=d[t];n[e+\"op\"]=o({args:[\"array\",\"array\",\"array\"],pre:{args:[],body:\"this_f=Math.\"+e,thisVars:[\"this_f\"]},body:{args:[\"a\",\"b\",\"c\"],body:\"a=this_f(c,b)\",thisVars:[\"this_f\"]},funcName:e+\"op\"}),n[e+\"ops\"]=o({args:[\"array\",\"array\",\"scalar\"],pre:{args:[],body:\"this_f=Math.\"+e,thisVars:[\"this_f\"]},body:{args:[\"a\",\"b\",\"c\"],body:\"a=this_f(c,b)\",thisVars:[\"this_f\"]},funcName:e+\"ops\"}),n[e+\"opeq\"]=o({args:[\"array\",\"array\"],pre:{args:[],body:\"this_f=Math.\"+e,thisVars:[\"this_f\"]},body:{args:[\"a\",\"b\"],body:\"a=this_f(b,a)\",thisVars:[\"this_f\"]},rvalue:!0,count:2,funcName:e+\"opeq\"}),n[e+\"opseq\"]=o({args:[\"array\",\"scalar\"],pre:{args:[],body:\"this_f=Math.\"+e,thisVars:[\"this_f\"]},body:{args:[\"a\",\"b\"],body:\"a=this_f(b,a)\",thisVars:[\"this_f\"]},rvalue:!0,count:2,funcName:e+\"opseq\"})}}(),n.any=r({args:[\"array\"],pre:i,body:{args:[{name:\"a\",lvalue:!1,rvalue:!0,count:1}],body:\"if(a){return true}\",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:\"return false\"},funcName:\"any\"}),n.all=r({args:[\"array\"],pre:i,body:{args:[{name:\"x\",lvalue:!1,rvalue:!0,count:1}],body:\"if(!x){return false}\",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:\"return true\"},funcName:\"all\"}),n.sum=r({args:[\"array\"],pre:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"this_s=0\"},body:{args:[{name:\"a\",lvalue:!1,rvalue:!0,count:1}],body:\"this_s+=a\",localVars:[],thisVars:[\"this_s\"]},post:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"return this_s\"},funcName:\"sum\"}),n.prod=r({args:[\"array\"],pre:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"this_s=1\"},body:{args:[{name:\"a\",lvalue:!1,rvalue:!0,count:1}],body:\"this_s*=a\",localVars:[],thisVars:[\"this_s\"]},post:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"return this_s\"},funcName:\"prod\"}),n.norm2squared=r({args:[\"array\"],pre:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"this_s=0\"},body:{args:[{name:\"a\",lvalue:!1,rvalue:!0,count:2}],body:\"this_s+=a*a\",localVars:[],thisVars:[\"this_s\"]},post:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"return this_s\"},funcName:\"norm2squared\"}),n.norm2=r({args:[\"array\"],pre:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"this_s=0\"},body:{args:[{name:\"a\",lvalue:!1,rvalue:!0,count:2}],body:\"this_s+=a*a\",localVars:[],thisVars:[\"this_s\"]},post:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"return Math.sqrt(this_s)\"},funcName:\"norm2\"}),n.norminf=r({args:[\"array\"],pre:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"this_s=0\"},body:{args:[{name:\"a\",lvalue:!1,rvalue:!0,count:4}],body:\"if(-a>this_s){this_s=-a}else if(a>this_s){this_s=a}\",localVars:[],thisVars:[\"this_s\"]},post:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"return this_s\"},funcName:\"norminf\"}),n.norm1=r({args:[\"array\"],pre:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"this_s=0\"},body:{args:[{name:\"a\",lvalue:!1,rvalue:!0,count:3}],body:\"this_s+=a<0?-a:a\",localVars:[],thisVars:[\"this_s\"]},post:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"return this_s\"},funcName:\"norm1\"}),n.sup=r({args:[\"array\"],pre:{body:\"this_h=-Infinity\",args:[],thisVars:[\"this_h\"],localVars:[]},body:{body:\"if(_inline_1_arg0_>this_h)this_h=_inline_1_arg0_\",args:[{name:\"_inline_1_arg0_\",lvalue:!1,rvalue:!0,count:2}],thisVars:[\"this_h\"],localVars:[]},post:{body:\"return this_h\",args:[],thisVars:[\"this_h\"],localVars:[]}}),n.inf=r({args:[\"array\"],pre:{body:\"this_h=Infinity\",args:[],thisVars:[\"this_h\"],localVars:[]},body:{body:\"if(_inline_1_arg0_<this_h)this_h=_inline_1_arg0_\",args:[{name:\"_inline_1_arg0_\",lvalue:!1,rvalue:!0,count:2}],thisVars:[\"this_h\"],localVars:[]},post:{body:\"return this_h\",args:[],thisVars:[\"this_h\"],localVars:[]}}),n.argmin=r({args:[\"index\",\"array\",\"shape\"],pre:{body:\"{this_v=Infinity;this_i=_inline_0_arg2_.slice(0)}\",args:[{name:\"_inline_0_arg0_\",lvalue:!1,rvalue:!1,count:0},{name:\"_inline_0_arg1_\",lvalue:!1,rvalue:!1,count:0},{name:\"_inline_0_arg2_\",lvalue:!1,rvalue:!0,count:1}],thisVars:[\"this_i\",\"this_v\"],localVars:[]},body:{body:\"{if(_inline_1_arg1_<this_v){this_v=_inline_1_arg1_;for(var _inline_1_k=0;_inline_1_k<_inline_1_arg0_.length;++_inline_1_k){this_i[_inline_1_k]=_inline_1_arg0_[_inline_1_k]}}}\",args:[{name:\"_inline_1_arg0_\",lvalue:!1,rvalue:!0,count:2},{name:\"_inline_1_arg1_\",lvalue:!1,rvalue:!0,count:2}],thisVars:[\"this_i\",\"this_v\"],localVars:[\"_inline_1_k\"]},post:{body:\"{return this_i}\",args:[],thisVars:[\"this_i\"],localVars:[]}}),n.argmax=r({args:[\"index\",\"array\",\"shape\"],pre:{body:\"{this_v=-Infinity;this_i=_inline_0_arg2_.slice(0)}\",args:[{name:\"_inline_0_arg0_\",lvalue:!1,rvalue:!1,count:0},{name:\"_inline_0_arg1_\",lvalue:!1,rvalue:!1,count:0},{name:\"_inline_0_arg2_\",lvalue:!1,rvalue:!0,count:1}],thisVars:[\"this_i\",\"this_v\"],localVars:[]},body:{body:\"{if(_inline_1_arg1_>this_v){this_v=_inline_1_arg1_;for(var _inline_1_k=0;_inline_1_k<_inline_1_arg0_.length;++_inline_1_k){this_i[_inline_1_k]=_inline_1_arg0_[_inline_1_k]}}}\",args:[{name:\"_inline_1_arg0_\",lvalue:!1,rvalue:!0,count:2},{name:\"_inline_1_arg1_\",lvalue:!1,rvalue:!0,count:2}],thisVars:[\"this_i\",\"this_v\"],localVars:[\"_inline_1_k\"]},post:{body:\"{return this_i}\",args:[],thisVars:[\"this_i\"],localVars:[]}}),n.random=o({args:[\"array\"],pre:{args:[],body:\"this_f=Math.random\",thisVars:[\"this_f\"]},body:{args:[\"a\"],body:\"a=this_f()\",thisVars:[\"this_f\"]},funcName:\"random\"}),n.assign=o({args:[\"array\",\"array\"],body:{args:[\"a\",\"b\"],body:\"a=b\"},funcName:\"assign\"}),n.assigns=o({args:[\"array\",\"scalar\"],body:{args:[\"a\",\"b\"],body:\"a=b\"},funcName:\"assigns\"}),n.equals=r({args:[\"array\",\"array\"],pre:i,body:{args:[{name:\"x\",lvalue:!1,rvalue:!0,count:1},{name:\"y\",lvalue:!1,rvalue:!0,count:1}],body:\"if(x!==y){return false}\",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:\"return true\"},funcName:\"equals\"})},{\"cwise-compiler\":151}],491:[function(t,e,n){\"use strict\";var r=t(\"ndarray\"),i=t(\"./doConvert.js\");e.exports=function(t,e){for(var n=[],a=t,o=1;Array.isArray(a);)n.push(a.length),o*=a.length,a=a[0];return 0===n.length?r():(e||(e=r(new Float64Array(o),n)),i(e,t),e)}},{\"./doConvert.js\":492,ndarray:495}],492:[function(t,e,n){e.exports=t(\"cwise-compiler\")({args:[\"array\",\"scalar\",\"index\"],pre:{body:\"{}\",args:[],thisVars:[],localVars:[]},body:{body:\"{\\nvar _inline_1_v=_inline_1_arg1_,_inline_1_i\\nfor(_inline_1_i=0;_inline_1_i<_inline_1_arg2_.length-1;++_inline_1_i) {\\n_inline_1_v=_inline_1_v[_inline_1_arg2_[_inline_1_i]]\\n}\\n_inline_1_arg0_=_inline_1_v[_inline_1_arg2_[_inline_1_arg2_.length-1]]\\n}\",args:[{name:\"_inline_1_arg0_\",lvalue:!0,rvalue:!1,count:1},{name:\"_inline_1_arg1_\",lvalue:!1,rvalue:!0,count:1},{name:\"_inline_1_arg2_\",lvalue:!1,rvalue:!0,count:4}],thisVars:[],localVars:[\"_inline_1_i\",\"_inline_1_v\"]},post:{body:\"{}\",args:[],thisVars:[],localVars:[]},funcName:\"convert\",blockSize:64})},{\"cwise-compiler\":151}],493:[function(t,e,n){\"use strict\";var r=t(\"typedarray-pool\"),i=32;function a(t){switch(t){case\"uint8\":return[r.mallocUint8,r.freeUint8];case\"uint16\":return[r.mallocUint16,r.freeUint16];case\"uint32\":return[r.mallocUint32,r.freeUint32];case\"int8\":return[r.mallocInt8,r.freeInt8];case\"int16\":return[r.mallocInt16,r.freeInt16];case\"int32\":return[r.mallocInt32,r.freeInt32];case\"float32\":return[r.mallocFloat,r.freeFloat];case\"float64\":return[r.mallocDouble,r.freeDouble];default:return null}}function o(t){for(var e=[],n=0;n<t;++n)e.push(\"s\"+n);for(n=0;n<t;++n)e.push(\"n\"+n);for(n=1;n<t;++n)e.push(\"d\"+n);for(n=1;n<t;++n)e.push(\"e\"+n);for(n=1;n<t;++n)e.push(\"f\"+n);return e}e.exports=function(t,e){var n=[\"'use strict'\"],r=[\"ndarraySortWrapper\",t.join(\"d\"),e].join(\"\");n.push([\"function \",r,\"(\",[\"array\"].join(\",\"),\"){\"].join(\"\"));for(var s=[\"data=array.data,offset=array.offset|0,shape=array.shape,stride=array.stride\"],l=0;l<t.length;++l)s.push([\"s\",l,\"=stride[\",l,\"]|0,n\",l,\"=shape[\",l,\"]|0\"].join(\"\"));var c=new Array(t.length),u=[];for(l=0;l<t.length;++l)0!==(f=t[l])&&(c[f]=0===u.length?\"1\":u.join(\"*\"),u.push(\"n\"+f));var h=-1,d=-1;for(l=0;l<t.length;++l){var f,p=t[l];0!==p&&(s.push(h>0?[\"d\",p,\"=s\",p,\"-d\",h,\"*n\",h].join(\"\"):[\"d\",p,\"=s\",p].join(\"\")),h=p),0!=(f=t.length-1-l)&&(s.push(d>0?[\"e\",f,\"=s\",f,\"-e\",d,\"*n\",d,\",f\",f,\"=\",c[f],\"-f\",d,\"*n\",d].join(\"\"):[\"e\",f,\"=s\",f,\",f\",f,\"=\",c[f]].join(\"\")),d=f)}n.push(\"var \"+s.join(\",\"));var m=[\"0\",\"n0-1\",\"data\",\"offset\"].concat(o(t.length));n.push([\"if(n0<=\",i,\"){\",\"insertionSort(\",m.join(\",\"),\")}else{\",\"quickSort(\",m.join(\",\"),\")}\"].join(\"\")),n.push(\"}return \"+r);var g=new Function(\"insertionSort\",\"quickSort\",n.join(\"\\n\")),y=function(t,e){var n=[\"'use strict'\"],r=[\"ndarrayInsertionSort\",t.join(\"d\"),e].join(\"\"),i=[\"left\",\"right\",\"data\",\"offset\"].concat(o(t.length)),s=a(e),l=[\"i,j,cptr,ptr=left*s0+offset\"];if(t.length>1){for(var c=[],u=1;u<t.length;++u)l.push(\"i\"+u),c.push(\"n\"+u);l.push(s?\"scratch=malloc(\"+c.join(\"*\")+\")\":\"scratch=new Array(\"+c.join(\"*\")+\")\"),l.push(\"dptr\",\"sptr\",\"a\",\"b\")}else l.push(\"scratch\");function h(t){return\"generic\"===e?[\"data.get(\",t,\")\"].join(\"\"):[\"data[\",t,\"]\"].join(\"\")}function d(t,n){return\"generic\"===e?[\"data.set(\",t,\",\",n,\")\"].join(\"\"):[\"data[\",t,\"]=\",n].join(\"\")}if(n.push([\"function \",r,\"(\",i.join(\",\"),\"){var \",l.join(\",\")].join(\"\"),\"for(i=left+1;i<=right;++i){\",\"j=i;ptr+=s0\",\"cptr=ptr\"),t.length>1){for(n.push(\"dptr=0;sptr=ptr\"),u=t.length-1;u>=0;--u)0!==(f=t[u])&&n.push([\"for(i\",f,\"=0;i\",f,\"<n\",f,\";++i\",f,\"){\"].join(\"\"));for(n.push(\"scratch[dptr++]=\",h(\"sptr\")),u=0;u<t.length;++u)0!==(f=t[u])&&n.push(\"sptr+=d\"+f,\"}\");for(n.push(\"__g:while(j--\\x3eleft){\",\"dptr=0\",\"sptr=cptr-s0\"),u=1;u<t.length;++u)1===u&&n.push(\"__l:\"),n.push([\"for(i\",u,\"=0;i\",u,\"<n\",u,\";++i\",u,\"){\"].join(\"\"));for(n.push([\"a=\",h(\"sptr\"),\"\\nb=scratch[dptr]\\nif(a<b){break __g}\\nif(a>b){break __l}\"].join(\"\")),u=t.length-1;u>=1;--u)n.push(\"sptr+=e\"+u,\"dptr+=f\"+u,\"}\");for(n.push(\"dptr=cptr;sptr=cptr-s0\"),u=t.length-1;u>=0;--u)0!==(f=t[u])&&n.push([\"for(i\",f,\"=0;i\",f,\"<n\",f,\";++i\",f,\"){\"].join(\"\"));for(n.push(d(\"dptr\",h(\"sptr\"))),u=0;u<t.length;++u)0!==(f=t[u])&&n.push([\"dptr+=d\",f,\";sptr+=d\",f].join(\"\"),\"}\");for(n.push(\"cptr-=s0\\n}\"),n.push(\"dptr=cptr;sptr=0\"),u=t.length-1;u>=0;--u)0!==(f=t[u])&&n.push([\"for(i\",f,\"=0;i\",f,\"<n\",f,\";++i\",f,\"){\"].join(\"\"));for(n.push(d(\"dptr\",\"scratch[sptr++]\")),u=0;u<t.length;++u){var f;0!==(f=t[u])&&n.push(\"dptr+=d\"+f,\"}\")}}else n.push(\"scratch=\"+h(\"ptr\"),\"while((j--\\x3eleft)&&(\"+h(\"cptr-s0\")+\">scratch)){\",d(\"cptr\",h(\"cptr-s0\")),\"cptr-=s0\",\"}\",d(\"cptr\",\"scratch\"));return n.push(\"}\"),t.length>1&&s&&n.push(\"free(scratch)\"),n.push(\"} return \"+r),s?new Function(\"malloc\",\"free\",n.join(\"\\n\"))(s[0],s[1]):new Function(n.join(\"\\n\"))()}(t,e);return g(y,function(t,e,n){var r=[\"'use strict'\"],s=[\"ndarrayQuickSort\",t.join(\"d\"),e].join(\"\"),l=[\"left\",\"right\",\"data\",\"offset\"].concat(o(t.length)),c=a(e),u=0;r.push([\"function \",s,\"(\",l.join(\",\"),\"){\"].join(\"\"));var h=[\"sixth=((right-left+1)/6)|0\",\"index1=left+sixth\",\"index5=right-sixth\",\"index3=(left+right)>>1\",\"index2=index3-sixth\",\"index4=index3+sixth\",\"el1=index1\",\"el2=index2\",\"el3=index3\",\"el4=index4\",\"el5=index5\",\"less=left+1\",\"great=right-1\",\"pivots_are_equal=true\",\"tmp\",\"tmp0\",\"x\",\"y\",\"z\",\"k\",\"ptr0\",\"ptr1\",\"ptr2\",\"comp_pivot1=0\",\"comp_pivot2=0\",\"comp=0\"];if(t.length>1){for(var d=[],f=1;f<t.length;++f)d.push(\"n\"+f),h.push(\"i\"+f);for(f=0;f<8;++f)h.push(\"b_ptr\"+f);h.push(\"ptr3\",\"ptr4\",\"ptr5\",\"ptr6\",\"ptr7\",\"pivot_ptr\",\"ptr_shift\",\"elementSize=\"+d.join(\"*\")),c?h.push(\"pivot1=malloc(elementSize)\",\"pivot2=malloc(elementSize)\"):h.push(\"pivot1=new Array(elementSize),pivot2=new Array(elementSize)\")}else h.push(\"pivot1\",\"pivot2\");function p(t){return[\"(offset+\",t,\"*s0)\"].join(\"\")}function m(t){return\"generic\"===e?[\"data.get(\",t,\")\"].join(\"\"):[\"data[\",t,\"]\"].join(\"\")}function g(t,n){return\"generic\"===e?[\"data.set(\",t,\",\",n,\")\"].join(\"\"):[\"data[\",t,\"]=\",n].join(\"\")}function y(e,n,i){if(1===e.length)r.push(\"ptr0=\"+p(e[0]));else for(var a=0;a<e.length;++a)r.push([\"b_ptr\",a,\"=s0*\",e[a]].join(\"\"));for(n&&r.push(\"pivot_ptr=0\"),r.push(\"ptr_shift=offset\"),a=t.length-1;a>=0;--a)0!==(o=t[a])&&r.push([\"for(i\",o,\"=0;i\",o,\"<n\",o,\";++i\",o,\"){\"].join(\"\"));if(e.length>1)for(a=0;a<e.length;++a)r.push([\"ptr\",a,\"=b_ptr\",a,\"+ptr_shift\"].join(\"\"));for(r.push(i),n&&r.push(\"++pivot_ptr\"),a=0;a<t.length;++a){var o;0!==(o=t[a])&&(r.push(e.length>1?\"ptr_shift+=d\"+o:\"ptr0+=d\"+o),r.push(\"}\"))}}function v(e,n,i,a){if(1===n.length)r.push(\"ptr0=\"+p(n[0]));else{for(var o=0;o<n.length;++o)r.push([\"b_ptr\",o,\"=s0*\",n[o]].join(\"\"));r.push(\"ptr_shift=offset\")}for(i&&r.push(\"pivot_ptr=0\"),e&&r.push(e+\":\"),o=1;o<t.length;++o)r.push([\"for(i\",o,\"=0;i\",o,\"<n\",o,\";++i\",o,\"){\"].join(\"\"));if(n.length>1)for(o=0;o<n.length;++o)r.push([\"ptr\",o,\"=b_ptr\",o,\"+ptr_shift\"].join(\"\"));for(r.push(a),o=t.length-1;o>=1;--o)i&&r.push(\"pivot_ptr+=f\"+o),r.push(n.length>1?\"ptr_shift+=e\"+o:\"ptr0+=e\"+o),r.push(\"}\")}function _(){t.length>1&&c&&r.push(\"free(pivot1)\",\"free(pivot2)\")}function b(e,n){var i=\"el\"+e,a=\"el\"+n;if(t.length>1){var o=\"__l\"+ ++u;v(o,[i,a],!1,[\"comp=\",m(\"ptr0\"),\"-\",m(\"ptr1\"),\"\\n\",\"if(comp>0){tmp0=\",i,\";\",i,\"=\",a,\";\",a,\"=tmp0;break \",o,\"}\\n\",\"if(comp<0){break \",o,\"}\"].join(\"\"))}else r.push([\"if(\",m(p(i)),\">\",m(p(a)),\"){tmp0=\",i,\";\",i,\"=\",a,\";\",a,\"=tmp0}\"].join(\"\"))}function x(e,n){t.length>1?y([e,n],!1,g(\"ptr0\",m(\"ptr1\"))):r.push(g(p(e),m(p(n))))}function w(e,n,i){if(t.length>1){var a=\"__l\"+ ++u;v(a,[n],!0,[e,\"=\",m(\"ptr0\"),\"-pivot\",i,\"[pivot_ptr]\\n\",\"if(\",e,\"!==0){break \",a,\"}\"].join(\"\"))}else r.push([e,\"=\",m(p(n)),\"-pivot\",i].join(\"\"))}function k(e,n){t.length>1?y([e,n],!1,[\"tmp=\",m(\"ptr0\"),\"\\n\",g(\"ptr0\",m(\"ptr1\")),\"\\n\",g(\"ptr1\",\"tmp\")].join(\"\")):r.push([\"ptr0=\",p(e),\"\\n\",\"ptr1=\",p(n),\"\\n\",\"tmp=\",m(\"ptr0\"),\"\\n\",g(\"ptr0\",m(\"ptr1\")),\"\\n\",g(\"ptr1\",\"tmp\")].join(\"\"))}function M(e,n,i){t.length>1?(y([e,n,i],!1,[\"tmp=\",m(\"ptr0\"),\"\\n\",g(\"ptr0\",m(\"ptr1\")),\"\\n\",g(\"ptr1\",m(\"ptr2\")),\"\\n\",g(\"ptr2\",\"tmp\")].join(\"\")),r.push(\"++\"+n,\"--\"+i)):r.push([\"ptr0=\",p(e),\"\\n\",\"ptr1=\",p(n),\"\\n\",\"ptr2=\",p(i),\"\\n\",\"++\",n,\"\\n\",\"--\",i,\"\\n\",\"tmp=\",m(\"ptr0\"),\"\\n\",g(\"ptr0\",m(\"ptr1\")),\"\\n\",g(\"ptr1\",m(\"ptr2\")),\"\\n\",g(\"ptr2\",\"tmp\")].join(\"\"))}function T(t,e){k(t,e),r.push(\"--\"+e)}function S(e,n,i){t.length>1?y([e,n],!0,[g(\"ptr0\",m(\"ptr1\")),\"\\n\",g(\"ptr1\",[\"pivot\",i,\"[pivot_ptr]\"].join(\"\"))].join(\"\")):r.push(g(p(e),m(p(n))),g(p(n),\"pivot\"+i))}function A(e,n){r.push([\"if((\",n,\"-\",e,\")<=\",i,\"){\\n\",\"insertionSort(\",e,\",\",n,\",data,offset,\",o(t.length).join(\",\"),\")\\n\",\"}else{\\n\",s,\"(\",e,\",\",n,\",data,offset,\",o(t.length).join(\",\"),\")\\n\",\"}\"].join(\"\"))}function L(e,n,i){t.length>1?(r.push([\"__l\",++u,\":while(true){\"].join(\"\")),y([e],!0,[\"if(\",m(\"ptr0\"),\"!==pivot\",n,\"[pivot_ptr]){break __l\",u,\"}\"].join(\"\")),r.push(i,\"}\")):r.push([\"while(\",m(p(e)),\"===pivot\",n,\"){\",i,\"}\"].join(\"\"))}return r.push(\"var \"+h.join(\",\")),b(1,2),b(4,5),b(1,3),b(2,3),b(1,4),b(3,4),b(2,5),b(2,3),b(4,5),t.length>1?y([\"el1\",\"el2\",\"el3\",\"el4\",\"el5\",\"index1\",\"index3\",\"index5\"],!0,[\"pivot1[pivot_ptr]=\",m(\"ptr1\"),\"\\n\",\"pivot2[pivot_ptr]=\",m(\"ptr3\"),\"\\n\",\"pivots_are_equal=pivots_are_equal&&(pivot1[pivot_ptr]===pivot2[pivot_ptr])\\n\",\"x=\",m(\"ptr0\"),\"\\n\",\"y=\",m(\"ptr2\"),\"\\n\",\"z=\",m(\"ptr4\"),\"\\n\",g(\"ptr5\",\"x\"),\"\\n\",g(\"ptr6\",\"y\"),\"\\n\",g(\"ptr7\",\"z\")].join(\"\")):r.push([\"pivot1=\",m(p(\"el2\")),\"\\n\",\"pivot2=\",m(p(\"el4\")),\"\\n\",\"pivots_are_equal=pivot1===pivot2\\n\",\"x=\",m(p(\"el1\")),\"\\n\",\"y=\",m(p(\"el3\")),\"\\n\",\"z=\",m(p(\"el5\")),\"\\n\",g(p(\"index1\"),\"x\"),\"\\n\",g(p(\"index3\"),\"y\"),\"\\n\",g(p(\"index5\"),\"z\")].join(\"\")),x(\"index2\",\"left\"),x(\"index4\",\"right\"),r.push(\"if(pivots_are_equal){\"),r.push(\"for(k=less;k<=great;++k){\"),w(\"comp\",\"k\",1),r.push(\"if(comp===0){continue}\"),r.push(\"if(comp<0){\"),r.push(\"if(k!==less){\"),k(\"k\",\"less\"),r.push(\"}\"),r.push(\"++less\"),r.push(\"}else{\"),r.push(\"while(true){\"),w(\"comp\",\"great\",1),r.push(\"if(comp>0){\"),r.push(\"great--\"),r.push(\"}else if(comp<0){\"),M(\"k\",\"less\",\"great\"),r.push(\"break\"),r.push(\"}else{\"),T(\"k\",\"great\"),r.push(\"break\"),r.push(\"}\"),r.push(\"}\"),r.push(\"}\"),r.push(\"}\"),r.push(\"}else{\"),r.push(\"for(k=less;k<=great;++k){\"),w(\"comp_pivot1\",\"k\",1),r.push(\"if(comp_pivot1<0){\"),r.push(\"if(k!==less){\"),k(\"k\",\"less\"),r.push(\"}\"),r.push(\"++less\"),r.push(\"}else{\"),w(\"comp_pivot2\",\"k\",2),r.push(\"if(comp_pivot2>0){\"),r.push(\"while(true){\"),w(\"comp\",\"great\",2),r.push(\"if(comp>0){\"),r.push(\"if(--great<k){break}\"),r.push(\"continue\"),r.push(\"}else{\"),w(\"comp\",\"great\",1),r.push(\"if(comp<0){\"),M(\"k\",\"less\",\"great\"),r.push(\"}else{\"),T(\"k\",\"great\"),r.push(\"}\"),r.push(\"break\"),r.push(\"}\"),r.push(\"}\"),r.push(\"}\"),r.push(\"}\"),r.push(\"}\"),r.push(\"}\"),S(\"left\",\"(less-1)\",1),S(\"right\",\"(great+1)\",2),A(\"left\",\"(less-2)\"),A(\"(great+2)\",\"right\"),r.push(\"if(pivots_are_equal){\"),_(),r.push(\"return\"),r.push(\"}\"),r.push(\"if(less<index1&&great>index5){\"),L(\"less\",1,\"++less\"),L(\"great\",2,\"--great\"),r.push(\"for(k=less;k<=great;++k){\"),w(\"comp_pivot1\",\"k\",1),r.push(\"if(comp_pivot1===0){\"),r.push(\"if(k!==less){\"),k(\"k\",\"less\"),r.push(\"}\"),r.push(\"++less\"),r.push(\"}else{\"),w(\"comp_pivot2\",\"k\",2),r.push(\"if(comp_pivot2===0){\"),r.push(\"while(true){\"),w(\"comp\",\"great\",2),r.push(\"if(comp===0){\"),r.push(\"if(--great<k){break}\"),r.push(\"continue\"),r.push(\"}else{\"),w(\"comp\",\"great\",1),r.push(\"if(comp<0){\"),M(\"k\",\"less\",\"great\"),r.push(\"}else{\"),T(\"k\",\"great\"),r.push(\"}\"),r.push(\"break\"),r.push(\"}\"),r.push(\"}\"),r.push(\"}\"),r.push(\"}\"),r.push(\"}\"),r.push(\"}\"),_(),A(\"less\",\"great\"),r.push(\"}return \"+s),t.length>1&&c?new Function(\"insertionSort\",\"malloc\",\"free\",r.join(\"\\n\"))(n,c[0],c[1]):new Function(\"insertionSort\",r.join(\"\\n\"))(n)}(t,e,y))}},{\"typedarray-pool\":595}],494:[function(t,e,n){\"use strict\";var r=t(\"./lib/compile_sort.js\"),i={};e.exports=function(t){var e=t.order,n=t.dtype,a=[e,n].join(\":\"),o=i[a];return o||(i[a]=o=r(e,n)),o(t),t}},{\"./lib/compile_sort.js\":493}],495:[function(t,e,n){var r=t(\"iota-array\"),i=t(\"is-buffer\"),a=\"undefined\"!=typeof Float64Array;function o(t,e){return t[0]-e[0]}function s(){var t,e=this.stride,n=new Array(e.length);for(t=0;t<n.length;++t)n[t]=[Math.abs(e[t]),t];n.sort(o);var r=new Array(n.length);for(t=0;t<r.length;++t)r[t]=n[t][1];return r}function l(t,e){var n=[\"View\",e,\"d\",t].join(\"\");e<0&&(n=\"View_Nil\"+t);var i=\"generic\"===t;if(-1===e){var a=\"function \"+n+\"(a){this.data=a;};var proto=\"+n+\".prototype;proto.dtype='\"+t+\"';proto.index=function(){return -1};proto.size=0;proto.dimension=-1;proto.shape=proto.stride=proto.order=[];proto.lo=proto.hi=proto.transpose=proto.step=function(){return new \"+n+\"(this.data);};proto.get=proto.set=function(){};proto.pick=function(){return null};return function construct_\"+n+\"(a){return new \"+n+\"(a);}\";return new Function(a)()}if(0===e)return a=\"function \"+n+\"(a,d) {this.data = a;this.offset = d};var proto=\"+n+\".prototype;proto.dtype='\"+t+\"';proto.index=function(){return this.offset};proto.dimension=0;proto.size=1;proto.shape=proto.stride=proto.order=[];proto.lo=proto.hi=proto.transpose=proto.step=function \"+n+\"_copy() {return new \"+n+\"(this.data,this.offset)};proto.pick=function \"+n+\"_pick(){return TrivialArray(this.data);};proto.valueOf=proto.get=function \"+n+\"_get(){return \"+(i?\"this.data.get(this.offset)\":\"this.data[this.offset]\")+\"};proto.set=function \"+n+\"_set(v){return \"+(i?\"this.data.set(this.offset,v)\":\"this.data[this.offset]=v\")+\"};return function construct_\"+n+\"(a,b,c,d){return new \"+n+\"(a,d)}\",new Function(\"TrivialArray\",a)(c[t][0]);a=[\"'use strict'\"];var o=r(e),l=o.map((function(t){return\"i\"+t})),u=\"this.offset+\"+o.map((function(t){return\"this.stride[\"+t+\"]*i\"+t})).join(\"+\"),h=o.map((function(t){return\"b\"+t})).join(\",\"),d=o.map((function(t){return\"c\"+t})).join(\",\");a.push(\"function \"+n+\"(a,\"+h+\",\"+d+\",d){this.data=a\",\"this.shape=[\"+h+\"]\",\"this.stride=[\"+d+\"]\",\"this.offset=d|0}\",\"var proto=\"+n+\".prototype\",\"proto.dtype='\"+t+\"'\",\"proto.dimension=\"+e),a.push(\"Object.defineProperty(proto,'size',{get:function \"+n+\"_size(){return \"+o.map((function(t){return\"this.shape[\"+t+\"]\"})).join(\"*\"),\"}})\"),1===e?a.push(\"proto.order=[0]\"):(a.push(\"Object.defineProperty(proto,'order',{get:\"),e<4?(a.push(\"function \"+n+\"_order(){\"),2===e?a.push(\"return (Math.abs(this.stride[0])>Math.abs(this.stride[1]))?[1,0]:[0,1]}})\"):3===e&&a.push(\"var s0=Math.abs(this.stride[0]),s1=Math.abs(this.stride[1]),s2=Math.abs(this.stride[2]);if(s0>s1){if(s1>s2){return [2,1,0];}else if(s0>s2){return [1,2,0];}else{return [1,0,2];}}else if(s0>s2){return [2,0,1];}else if(s2>s1){return [0,1,2];}else{return [0,2,1];}}})\")):a.push(\"ORDER})\")),a.push(\"proto.set=function \"+n+\"_set(\"+l.join(\",\")+\",v){\"),a.push(i?\"return this.data.set(\"+u+\",v)}\":\"return this.data[\"+u+\"]=v}\"),a.push(\"proto.get=function \"+n+\"_get(\"+l.join(\",\")+\"){\"),a.push(i?\"return this.data.get(\"+u+\")}\":\"return this.data[\"+u+\"]}\"),a.push(\"proto.index=function \"+n+\"_index(\",l.join(),\"){return \"+u+\"}\"),a.push(\"proto.hi=function \"+n+\"_hi(\"+l.join(\",\")+\"){return new \"+n+\"(this.data,\"+o.map((function(t){return[\"(typeof i\",t,\"!=='number'||i\",t,\"<0)?this.shape[\",t,\"]:i\",t,\"|0\"].join(\"\")})).join(\",\")+\",\"+o.map((function(t){return\"this.stride[\"+t+\"]\"})).join(\",\")+\",this.offset)}\");var f=o.map((function(t){return\"a\"+t+\"=this.shape[\"+t+\"]\"})),p=o.map((function(t){return\"c\"+t+\"=this.stride[\"+t+\"]\"}));a.push(\"proto.lo=function \"+n+\"_lo(\"+l.join(\",\")+\"){var b=this.offset,d=0,\"+f.join(\",\")+\",\"+p.join(\",\"));for(var m=0;m<e;++m)a.push(\"if(typeof i\"+m+\"==='number'&&i\"+m+\">=0){d=i\"+m+\"|0;b+=c\"+m+\"*d;a\"+m+\"-=d}\");for(a.push(\"return new \"+n+\"(this.data,\"+o.map((function(t){return\"a\"+t})).join(\",\")+\",\"+o.map((function(t){return\"c\"+t})).join(\",\")+\",b)}\"),a.push(\"proto.step=function \"+n+\"_step(\"+l.join(\",\")+\"){var \"+o.map((function(t){return\"a\"+t+\"=this.shape[\"+t+\"]\"})).join(\",\")+\",\"+o.map((function(t){return\"b\"+t+\"=this.stride[\"+t+\"]\"})).join(\",\")+\",c=this.offset,d=0,ceil=Math.ceil\"),m=0;m<e;++m)a.push(\"if(typeof i\"+m+\"==='number'){d=i\"+m+\"|0;if(d<0){c+=b\"+m+\"*(a\"+m+\"-1);a\"+m+\"=ceil(-a\"+m+\"/d)}else{a\"+m+\"=ceil(a\"+m+\"/d)}b\"+m+\"*=d}\");a.push(\"return new \"+n+\"(this.data,\"+o.map((function(t){return\"a\"+t})).join(\",\")+\",\"+o.map((function(t){return\"b\"+t})).join(\",\")+\",c)}\");var g=new Array(e),y=new Array(e);for(m=0;m<e;++m)g[m]=\"a[i\"+m+\"]\",y[m]=\"b[i\"+m+\"]\";for(a.push(\"proto.transpose=function \"+n+\"_transpose(\"+l+\"){\"+l.map((function(t,e){return t+\"=(\"+t+\"===undefined?\"+e+\":\"+t+\"|0)\"})).join(\";\"),\"var a=this.shape,b=this.stride;return new \"+n+\"(this.data,\"+g.join(\",\")+\",\"+y.join(\",\")+\",this.offset)}\"),a.push(\"proto.pick=function \"+n+\"_pick(\"+l+\"){var a=[],b=[],c=this.offset\"),m=0;m<e;++m)a.push(\"if(typeof i\"+m+\"==='number'&&i\"+m+\">=0){c=(c+this.stride[\"+m+\"]*i\"+m+\")|0}else{a.push(this.shape[\"+m+\"]);b.push(this.stride[\"+m+\"])}\");return a.push(\"var ctor=CTOR_LIST[a.length+1];return ctor(this.data,a,b,c)}\"),a.push(\"return function construct_\"+n+\"(data,shape,stride,offset){return new \"+n+\"(data,\"+o.map((function(t){return\"shape[\"+t+\"]\"})).join(\",\")+\",\"+o.map((function(t){return\"stride[\"+t+\"]\"})).join(\",\")+\",offset)}\"),new Function(\"CTOR_LIST\",\"ORDER\",a.join(\"\\n\"))(c[t],s)}var c={float32:[],float64:[],int8:[],int16:[],int32:[],uint8:[],uint16:[],uint32:[],array:[],uint8_clamped:[],bigint64:[],biguint64:[],buffer:[],generic:[]};e.exports=function(t,e,n,r){if(void 0===t)return(0,c.array[0])([]);\"number\"==typeof t&&(t=[t]),void 0===e&&(e=[t.length]);var o=e.length;if(void 0===n){n=new Array(o);for(var s=o-1,u=1;s>=0;--s)n[s]=u,u*=e[s]}if(void 0===r)for(r=0,s=0;s<o;++s)n[s]<0&&(r-=(e[s]-1)*n[s]);for(var h=function(t){if(i(t))return\"buffer\";if(a)switch(Object.prototype.toString.call(t)){case\"[object Float64Array]\":return\"float64\";case\"[object Float32Array]\":return\"float32\";case\"[object Int8Array]\":return\"int8\";case\"[object Int16Array]\":return\"int16\";case\"[object Int32Array]\":return\"int32\";case\"[object Uint8Array]\":return\"uint8\";case\"[object Uint16Array]\":return\"uint16\";case\"[object Uint32Array]\":return\"uint32\";case\"[object Uint8ClampedArray]\":return\"uint8_clamped\";case\"[object BigInt64Array]\":return\"bigint64\";case\"[object BigUint64Array]\":return\"biguint64\"}return Array.isArray(t)?\"array\":\"generic\"}(t),d=c[h];d.length<=o+1;)d.push(l(h,d.length-1));return(0,d[o+1])(t,e,n,r)}},{\"iota-array\":463,\"is-buffer\":465}],496:[function(t,e,n){\"use strict\";var r=t(\"double-bits\"),i=Math.pow(2,-1074),a=-1>>>0;e.exports=function(t,e){if(isNaN(t)||isNaN(e))return NaN;if(t===e)return t;if(0===t)return e<0?-i:i;var n=r.hi(t),o=r.lo(t);return e>t==t>0?o===a?(n+=1,o=0):o+=1:0===o?(o=a,n-=1):o-=1,r.pack(o,n)}},{\"double-bits\":173}],497:[function(t,e,n){var r=Math.PI,i=c(120);function a(t,e,n,r){return[\"C\",t,e,n,r,n,r]}function o(t,e,n,r,i,a){return[\"C\",t/3+2/3*n,e/3+2/3*r,i/3+2/3*n,a/3+2/3*r,i,a]}function s(t,e,n,a,o,c,u,h,d,f){if(f)k=f[0],M=f[1],x=f[2],w=f[3];else{var p=l(t,e,-o);e=p.y;var m=((t=p.x)-(h=(p=l(h,d,-o)).x))/2,g=(e-(d=p.y))/2,y=m*m/(n*n)+g*g/(a*a);y>1&&(n*=y=Math.sqrt(y),a*=y);var v=n*n,_=a*a,b=(c==u?-1:1)*Math.sqrt(Math.abs((v*_-v*g*g-_*m*m)/(v*g*g+_*m*m)));b==1/0&&(b=1);var x=b*n*g/a+(t+h)/2,w=b*-a*m/n+(e+d)/2,k=Math.asin(((e-w)/a).toFixed(9)),M=Math.asin(((d-w)/a).toFixed(9));(k=t<x?r-k:k)<0&&(k=2*r+k),(M=h<x?r-M:M)<0&&(M=2*r+M),u&&k>M&&(k-=2*r),!u&&M>k&&(M-=2*r)}if(Math.abs(M-k)>i){var T=M,S=h,A=d;M=k+i*(u&&M>k?1:-1);var L=s(h=x+n*Math.cos(M),d=w+a*Math.sin(M),n,a,o,0,u,S,A,[M,T,x,w])}var C=Math.tan((M-k)/4),E=4/3*n*C,O=4/3*a*C,D=[2*t-(t+E*Math.sin(k)),2*e-(e-O*Math.cos(k)),h+E*Math.sin(M),d-O*Math.cos(M),h,d];if(f)return D;L&&(D=D.concat(L));for(var I=0;I<D.length;){var P=l(D[I],D[I+1],o);D[I++]=P.x,D[I++]=P.y}return D}function l(t,e,n){return{x:t*Math.cos(n)-e*Math.sin(n),y:t*Math.sin(n)+e*Math.cos(n)}}function c(t){return t*(r/180)}e.exports=function(t){for(var e,n=[],r=0,i=0,l=0,u=0,h=null,d=null,f=0,p=0,m=0,g=t.length;m<g;m++){var y=t[m],v=y[0];switch(v){case\"M\":l=y[1],u=y[2];break;case\"A\":(y=s(f,p,y[1],y[2],c(y[3]),y[4],y[5],y[6],y[7])).unshift(\"C\"),y.length>7&&(n.push(y.splice(0,7)),y.unshift(\"C\"));break;case\"S\":var _=f,b=p;\"C\"!=e&&\"S\"!=e||(_+=_-r,b+=b-i),y=[\"C\",_,b,y[1],y[2],y[3],y[4]];break;case\"T\":\"Q\"==e||\"T\"==e?(h=2*f-h,d=2*p-d):(h=f,d=p),y=o(f,p,h,d,y[1],y[2]);break;case\"Q\":h=y[1],d=y[2],y=o(f,p,y[1],y[2],y[3],y[4]);break;case\"L\":y=a(f,p,y[1],y[2]);break;case\"H\":y=a(f,p,y[1],p);break;case\"V\":y=a(f,p,f,y[1]);break;case\"Z\":y=a(f,p,l,u)}e=v,f=y[y.length-2],p=y[y.length-1],y.length>4?(r=y[y.length-4],i=y[y.length-3]):(r=f,i=p),n.push(y)}return n}},{}],498:[function(t,e,n){n.vertexNormals=function(t,e,n){for(var r=e.length,i=new Array(r),a=void 0===n?1e-6:n,o=0;o<r;++o)i[o]=[0,0,0];for(o=0;o<t.length;++o)for(var s=t[o],l=s[s.length-1],c=s[0],u=0;u<s.length;++u){for(var h=e[l],d=e[l=c],f=e[c=s[(u+1)%s.length]],p=new Array(3),m=0,g=new Array(3),y=0,v=0;v<3;++v)p[v]=h[v]-d[v],m+=p[v]*p[v],g[v]=f[v]-d[v],y+=g[v]*g[v];if(m*y>a){var _=i[l],b=1/Math.sqrt(m*y);for(v=0;v<3;++v){var x=(v+1)%3,w=(v+2)%3;_[v]+=b*(g[x]*p[w]-g[w]*p[x])}}}for(o=0;o<r;++o){_=i[o];var k=0;for(v=0;v<3;++v)k+=_[v]*_[v];if(k>a)for(b=1/Math.sqrt(k),v=0;v<3;++v)_[v]*=b;else for(v=0;v<3;++v)_[v]=0}return i},n.faceNormals=function(t,e,n){for(var r=t.length,i=new Array(r),a=void 0===n?1e-6:n,o=0;o<r;++o){for(var s=t[o],l=new Array(3),c=0;c<3;++c)l[c]=e[s[c]];var u=new Array(3),h=new Array(3);for(c=0;c<3;++c)u[c]=l[1][c]-l[0][c],h[c]=l[2][c]-l[0][c];var d=new Array(3),f=0;for(c=0;c<3;++c){var p=(c+1)%3,m=(c+2)%3;d[c]=u[p]*h[m]-u[m]*h[p],f+=d[c]*d[c]}for(f=f>a?1/Math.sqrt(f):0,c=0;c<3;++c)d[c]*=f;i[o]=d}return i}},{}],499:[function(t,e,n){\"use strict\";var r=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;function o(t){if(null==t)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(t)}e.exports=function(){try{if(!Object.assign)return!1;var t=new String(\"abc\");if(t[5]=\"de\",\"5\"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},n=0;n<10;n++)e[\"_\"+String.fromCharCode(n)]=n;if(\"0123456789\"!==Object.getOwnPropertyNames(e).map((function(t){return e[t]})).join(\"\"))return!1;var r={};return\"abcdefghijklmnopqrst\".split(\"\").forEach((function(t){r[t]=t})),\"abcdefghijklmnopqrst\"===Object.keys(Object.assign({},r)).join(\"\")}catch(i){return!1}}()?Object.assign:function(t,e){for(var n,s,l=o(t),c=1;c<arguments.length;c++){for(var u in n=Object(arguments[c]))i.call(n,u)&&(l[u]=n[u]);if(r){s=r(n);for(var h=0;h<s.length;h++)a.call(n,s[h])&&(l[s[h]]=n[s[h]])}}return l}},{}],500:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,r,i,a,o,s,l,c){var u=e+a+c;if(h>0){var h=Math.sqrt(u+1);t[0]=.5*(o-l)/h,t[1]=.5*(s-r)/h,t[2]=.5*(n-a)/h,t[3]=.5*h}else{var d=Math.max(e,a,c);h=Math.sqrt(2*d-u+1),e>=d?(t[0]=.5*h,t[1]=.5*(i+n)/h,t[2]=.5*(s+r)/h,t[3]=.5*(o-l)/h):a>=d?(t[0]=.5*(n+i)/h,t[1]=.5*h,t[2]=.5*(l+o)/h,t[3]=.5*(s-r)/h):(t[0]=.5*(r+s)/h,t[1]=.5*(o+l)/h,t[2]=.5*h,t[3]=.5*(n-i)/h)}return t}},{}],501:[function(t,e,n){\"use strict\";e.exports=function(t){var e=(t=t||{}).center||[0,0,0],n=t.rotation||[0,0,0,1],r=t.radius||1;e=[].slice.call(e,0,3),u(n=[].slice.call(n,0,4),n);var i=new h(n,e,Math.log(r));return i.setDistanceLimits(t.zoomMin,t.zoomMax),(\"eye\"in t||\"up\"in t)&&i.lookAt(0,t.eye,t.center,t.up),i};var r=t(\"filtered-vector\"),i=t(\"gl-mat4/lookAt\"),a=t(\"gl-mat4/fromQuat\"),o=t(\"gl-mat4/invert\"),s=t(\"./lib/quatFromFrame\");function l(t,e,n){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(n,2))}function c(t,e,n,r){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(n,2)+Math.pow(r,2))}function u(t,e){var n=e[0],r=e[1],i=e[2],a=e[3],o=c(n,r,i,a);o>1e-6?(t[0]=n/o,t[1]=r/o,t[2]=i/o,t[3]=a/o):(t[0]=t[1]=t[2]=0,t[3]=1)}function h(t,e,n){this.radius=r([n]),this.center=r(e),this.rotation=r(t),this.computedRadius=this.radius.curve(0),this.computedCenter=this.center.curve(0),this.computedRotation=this.rotation.curve(0),this.computedUp=[.1,0,0],this.computedEye=[.1,0,0],this.computedMatrix=[.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this.recalcMatrix(0)}var d=h.prototype;d.lastT=function(){return Math.max(this.radius.lastT(),this.center.lastT(),this.rotation.lastT())},d.recalcMatrix=function(t){this.radius.curve(t),this.center.curve(t),this.rotation.curve(t);var e=this.computedRotation;u(e,e);var n=this.computedMatrix;a(n,e);var r=this.computedCenter,i=this.computedEye,o=this.computedUp,s=Math.exp(this.computedRadius[0]);i[0]=r[0]+s*n[2],i[1]=r[1]+s*n[6],i[2]=r[2]+s*n[10],o[0]=n[1],o[1]=n[5],o[2]=n[9];for(var l=0;l<3;++l){for(var c=0,h=0;h<3;++h)c+=n[l+4*h]*i[h];n[12+l]=-c}},d.getMatrix=function(t,e){this.recalcMatrix(t);var n=this.computedMatrix;if(e){for(var r=0;r<16;++r)e[r]=n[r];return e}return n},d.idle=function(t){this.center.idle(t),this.radius.idle(t),this.rotation.idle(t)},d.flush=function(t){this.center.flush(t),this.radius.flush(t),this.rotation.flush(t)},d.pan=function(t,e,n,r){e=e||0,n=n||0,r=r||0,this.recalcMatrix(t);var i=this.computedMatrix,a=i[1],o=i[5],s=i[9],c=l(a,o,s),u=i[0],h=i[4],d=i[8],f=u*(a/=c)+h*(o/=c)+d*(s/=c),p=l(u-=a*f,h-=o*f,d-=s*f),m=i[2],g=i[6],y=i[10],v=m*a+g*o+y*s,_=m*(u/=p)+g*(h/=p)+y*(d/=p),b=l(m-=v*a+_*u,g-=v*o+_*h,y-=v*s+_*d);m/=b,g/=b,y/=b,this.center.move(t,u*e+a*n,h*e+o*n,d*e+s*n);var x=Math.exp(this.computedRadius[0]);x=Math.max(1e-4,x+r),this.radius.set(t,Math.log(x))},d.rotate=function(t,e,n,r){this.recalcMatrix(t);var i=this.computedMatrix,a=i[2],o=i[6],s=i[10],u=(e=e||0)*i[0]+(n=n||0)*i[1],h=e*i[4]+n*i[5],d=e*i[8]+n*i[9],f=-(o*d-s*h),p=-(s*u-a*d),m=-(a*h-o*u),g=Math.sqrt(Math.max(0,1-Math.pow(f,2)-Math.pow(p,2)-Math.pow(m,2))),y=c(f,p,m,g);y>1e-6?(f/=y,p/=y,m/=y,g/=y):(f=p=m=0,g=1);var v=this.computedRotation,_=v[0],b=v[1],x=v[2],w=v[3],k=_*g+w*f+b*m-x*p,M=b*g+w*p+x*f-_*m,T=x*g+w*m+_*p-b*f,S=w*g-_*f-b*p-x*m;if(r){f=a,p=o,m=s;var A=Math.sin(r)/l(f,p,m);f*=A,p*=A,m*=A,S=S*(g=Math.cos(e))-(k=k*g+S*f+M*m-T*p)*f-(M=M*g+S*p+T*f-k*m)*p-(T=T*g+S*m+k*p-M*f)*m}var L=c(k,M,T,S);L>1e-6?(k/=L,M/=L,T/=L,S/=L):(k=M=T=0,S=1),this.rotation.set(t,k,M,T,S)},d.lookAt=function(t,e,n,r){this.recalcMatrix(t);var a=this.computedMatrix;i(a,e=e||this.computedEye,n=n||this.computedCenter,r=r||this.computedUp);var o=this.computedRotation;s(o,a[0],a[1],a[2],a[4],a[5],a[6],a[8],a[9],a[10]),u(o,o),this.rotation.set(t,o[0],o[1],o[2],o[3]);for(var l=0,c=0;c<3;++c)l+=Math.pow(n[c]-e[c],2);this.radius.set(t,.5*Math.log(Math.max(l,1e-6))),this.center.set(t,n[0],n[1],n[2])},d.translate=function(t,e,n,r){this.center.move(t,e||0,n||0,r||0)},d.setMatrix=function(t,e){var n=this.computedRotation;s(n,e[0],e[1],e[2],e[4],e[5],e[6],e[8],e[9],e[10]),u(n,n),this.rotation.set(t,n[0],n[1],n[2],n[3]);var r=this.computedMatrix;o(r,e);var i=r[15];if(Math.abs(i)>1e-6){var a=r[12]/i,l=r[13]/i,c=r[14]/i;this.recalcMatrix(t);var h=Math.exp(this.computedRadius[0]);this.center.set(t,a-r[2]*h,l-r[6]*h,c-r[10]*h),this.radius.idle(t)}else this.center.idle(t),this.radius.idle(t)},d.setDistance=function(t,e){e>0&&this.radius.set(t,Math.log(e))},d.setDistanceLimits=function(t,e){t=t>0?Math.log(t):-1/0,e=e>0?Math.log(e):1/0,e=Math.max(e,t),this.radius.bounds[0][0]=t,this.radius.bounds[1][0]=e},d.getDistanceLimits=function(t){var e=this.radius.bounds;return t?(t[0]=Math.exp(e[0][0]),t[1]=Math.exp(e[1][0]),t):[Math.exp(e[0][0]),Math.exp(e[1][0])]},d.toJSON=function(){return this.recalcMatrix(this.lastT()),{center:this.computedCenter.slice(),rotation:this.computedRotation.slice(),distance:Math.log(this.computedRadius[0]),zoomMin:this.radius.bounds[0][0],zoomMax:this.radius.bounds[1][0]}},d.fromJSON=function(t){var e=this.lastT(),n=t.center;n&&this.center.set(e,n[0],n[1],n[2]);var r=t.rotation;r&&this.rotation.set(e,r[0],r[1],r[2],r[3]);var i=t.distance;i&&i>0&&this.radius.set(e,Math.log(i)),this.setDistanceLimits(t.zoomMin,t.zoomMax)}},{\"./lib/quatFromFrame\":500,\"filtered-vector\":242,\"gl-mat4/fromQuat\":282,\"gl-mat4/invert\":293,\"gl-mat4/lookAt\":294}],502:[function(t,e,n){\"use strict\";var r=t(\"repeat-string\");e.exports=function(t,e,n){return r(n=void 0!==n?n+\"\":\" \",e)+t}},{\"repeat-string\":541}],503:[function(t,e,n){\"use strict\";function r(t,e){if(\"string\"!=typeof t)return[t];var n=[t];\"string\"==typeof e||Array.isArray(e)?e={brackets:e}:e||(e={});var r=e.brackets?Array.isArray(e.brackets)?e.brackets:[e.brackets]:[\"{}\",\"[]\",\"()\"],i=e.escape||\"___\",a=!!e.flat;r.forEach((function(t){var e=new RegExp([\"\\\\\",t[0],\"[^\\\\\",t[0],\"\\\\\",t[1],\"]*\\\\\",t[1]].join(\"\")),r=[];function a(e,a,o){var s=n.push(e.slice(t[0].length,-t[1].length))-1;return r.push(s),i+s+i}n.forEach((function(t,r){for(var i,o=0;t!=i;)if(i=t,t=t.replace(e,a),o++>1e4)throw Error(\"References have circular dependency. Please, check them.\");n[r]=t})),r=r.reverse(),n=n.map((function(e){return r.forEach((function(n){e=e.replace(new RegExp(\"(\\\\\"+i+n+\"\\\\\"+i+\")\",\"g\"),t[0]+\"$1\"+t[1])})),e}))}));var o=new RegExp(\"\\\\\"+i+\"([0-9]+)\\\\\"+i);return a?n:function t(e,n,r){for(var i,a=[],s=0;i=o.exec(e);){if(s++>1e4)throw Error(\"Circular references in parenthesis\");a.push(e.slice(0,i.index)),a.push(t(n[i[1]],n)),e=e.slice(i.index+i[0].length)}return a.push(e),a}(n[0],n)}function i(t,e){if(e&&e.flat){var n,r=e&&e.escape||\"___\",i=t[0];if(!i)return\"\";for(var a=new RegExp(\"\\\\\"+r+\"([0-9]+)\\\\\"+r),o=0;i!=n;){if(o++>1e4)throw Error(\"Circular references in \"+t);n=i,i=i.replace(a,s)}return i}return t.reduce((function t(e,n){return Array.isArray(n)&&(n=n.reduce(t,\"\")),e+n}),\"\");function s(e,n){if(null==t[n])throw Error(\"Reference \"+n+\"is undefined\");return t[n]}}function a(t,e){return Array.isArray(t)?i(t,e):r(t,e)}a.parse=r,a.stringify=i,e.exports=a},{}],504:[function(t,e,n){\"use strict\";var r=t(\"pick-by-alias\");e.exports=function(t){var e;return arguments.length>1&&(t=arguments),\"string\"==typeof t?t=t.split(/\\s/).map(parseFloat):\"number\"==typeof t&&(t=[t]),t.length&&\"number\"==typeof t[0]?e=1===t.length?{width:t[0],height:t[0],x:0,y:0}:2===t.length?{width:t[0],height:t[1],x:0,y:0}:{x:t[0],y:t[1],width:t[2]-t[0]||0,height:t[3]-t[1]||0}:t&&((e={x:(t=r(t,{left:\"x l left Left\",top:\"y t top Top\",width:\"w width W Width\",height:\"h height W Width\",bottom:\"b bottom Bottom\",right:\"r right Right\"})).left||0,y:t.top||0}).width=null==t.width?t.right?t.right-e.x:0:t.width,e.height=null==t.height?t.bottom?t.bottom-e.y:0:t.height),e}},{\"pick-by-alias\":511}],505:[function(t,e,n){e.exports=function(t){var e=[];return t.replace(i,(function(t,n,i){var o=n.toLowerCase();for(i=function(t){var e=t.match(a);return e?e.map(Number):[]}(i),\"m\"==o&&i.length>2&&(e.push([n].concat(i.splice(0,2))),o=\"l\",n=\"m\"==n?\"l\":\"L\");;){if(i.length==r[o])return i.unshift(n),e.push(i);if(i.length<r[o])throw new Error(\"malformed path data\");e.push([n].concat(i.splice(0,r[o])))}})),e};var r={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},i=/([astvzqmhlc])([^astvzqmhlc]*)/gi,a=/-?[0-9]*\\.?[0-9]+(?:e[-+]?\\d+)?/gi},{}],506:[function(t,e,n){e.exports=function(t,e){e||(e=[0,\"\"]),t=String(t);var n=parseFloat(t,10);return e[0]=n,e[1]=t.match(/[\\d.\\-\\+]*\\s*(.*)/)[1]||\"\",e}},{}],507:[function(t,e,n){(function(t){(function(){\"use strict\";function n(t){if(\"string\"!=typeof t)throw new TypeError(\"Path must be a string. Received \"+JSON.stringify(t))}function r(t,e){for(var n,r=\"\",i=0,a=-1,o=0,s=0;s<=t.length;++s){if(s<t.length)n=t.charCodeAt(s);else{if(47===n)break;n=47}if(47===n){if(a===s-1||1===o);else if(a!==s-1&&2===o){if(r.length<2||2!==i||46!==r.charCodeAt(r.length-1)||46!==r.charCodeAt(r.length-2))if(r.length>2){var l=r.lastIndexOf(\"/\");if(l!==r.length-1){-1===l?(r=\"\",i=0):i=(r=r.slice(0,l)).length-1-r.lastIndexOf(\"/\"),a=s,o=0;continue}}else if(2===r.length||1===r.length){r=\"\",i=0,a=s,o=0;continue}e&&(r.length>0?r+=\"/..\":r=\"..\",i=2)}else r.length>0?r+=\"/\"+t.slice(a+1,s):r=t.slice(a+1,s),i=s-a-1;a=s,o=0}else 46===n&&-1!==o?++o:o=-1}return r}var i={resolve:function(){for(var e,i=\"\",a=!1,o=arguments.length-1;o>=-1&&!a;o--){var s;o>=0?s=arguments[o]:(void 0===e&&(e=t.cwd()),s=e),n(s),0!==s.length&&(i=s+\"/\"+i,a=47===s.charCodeAt(0))}return i=r(i,!a),a?i.length>0?\"/\"+i:\"/\":i.length>0?i:\".\"},normalize:function(t){if(n(t),0===t.length)return\".\";var e=47===t.charCodeAt(0),i=47===t.charCodeAt(t.length-1);return 0!==(t=r(t,!e)).length||e||(t=\".\"),t.length>0&&i&&(t+=\"/\"),e?\"/\"+t:t},isAbsolute:function(t){return n(t),t.length>0&&47===t.charCodeAt(0)},join:function(){if(0===arguments.length)return\".\";for(var t,e=0;e<arguments.length;++e){var r=arguments[e];n(r),r.length>0&&(void 0===t?t=r:t+=\"/\"+r)}return void 0===t?\".\":i.normalize(t)},relative:function(t,e){if(n(t),n(e),t===e)return\"\";if((t=i.resolve(t))===(e=i.resolve(e)))return\"\";for(var r=1;r<t.length&&47===t.charCodeAt(r);++r);for(var a=t.length,o=a-r,s=1;s<e.length&&47===e.charCodeAt(s);++s);for(var l=e.length-s,c=o<l?o:l,u=-1,h=0;h<=c;++h){if(h===c){if(l>c){if(47===e.charCodeAt(s+h))return e.slice(s+h+1);if(0===h)return e.slice(s+h)}else o>c&&(47===t.charCodeAt(r+h)?u=h:0===h&&(u=0));break}var d=t.charCodeAt(r+h);if(d!==e.charCodeAt(s+h))break;47===d&&(u=h)}var f=\"\";for(h=r+u+1;h<=a;++h)h!==a&&47!==t.charCodeAt(h)||(f+=0===f.length?\"..\":\"/..\");return f.length>0?f+e.slice(s+u):(47===e.charCodeAt(s+=u)&&++s,e.slice(s))},_makeLong:function(t){return t},dirname:function(t){if(n(t),0===t.length)return\".\";for(var e=t.charCodeAt(0),r=47===e,i=-1,a=!0,o=t.length-1;o>=1;--o)if(47===(e=t.charCodeAt(o))){if(!a){i=o;break}}else a=!1;return-1===i?r?\"/\":\".\":r&&1===i?\"//\":t.slice(0,i)},basename:function(t,e){if(void 0!==e&&\"string\"!=typeof e)throw new TypeError('\"ext\" argument must be a string');n(t);var r,i=0,a=-1,o=!0;if(void 0!==e&&e.length>0&&e.length<=t.length){if(e.length===t.length&&e===t)return\"\";var s=e.length-1,l=-1;for(r=t.length-1;r>=0;--r){var c=t.charCodeAt(r);if(47===c){if(!o){i=r+1;break}}else-1===l&&(o=!1,l=r+1),s>=0&&(c===e.charCodeAt(s)?-1==--s&&(a=r):(s=-1,a=l))}return i===a?a=l:-1===a&&(a=t.length),t.slice(i,a)}for(r=t.length-1;r>=0;--r)if(47===t.charCodeAt(r)){if(!o){i=r+1;break}}else-1===a&&(o=!1,a=r+1);return-1===a?\"\":t.slice(i,a)},extname:function(t){n(t);for(var e=-1,r=0,i=-1,a=!0,o=0,s=t.length-1;s>=0;--s){var l=t.charCodeAt(s);if(47!==l)-1===i&&(a=!1,i=s+1),46===l?-1===e?e=s:1!==o&&(o=1):-1!==e&&(o=-1);else if(!a){r=s+1;break}}return-1===e||-1===i||0===o||1===o&&e===i-1&&e===r+1?\"\":t.slice(e,i)},format:function(t){if(null===t||\"object\"!=typeof t)throw new TypeError('The \"pathObject\" argument must be of type Object. Received type '+typeof t);return function(t,e){var n=e.dir||e.root,r=e.base||(e.name||\"\")+(e.ext||\"\");return n?n===e.root?n+r:n+\"/\"+r:r}(0,t)},parse:function(t){n(t);var e={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(0===t.length)return e;var r,i=t.charCodeAt(0),a=47===i;a?(e.root=\"/\",r=1):r=0;for(var o=-1,s=0,l=-1,c=!0,u=t.length-1,h=0;u>=r;--u)if(47!==(i=t.charCodeAt(u)))-1===l&&(c=!1,l=u+1),46===i?-1===o?o=u:1!==h&&(h=1):-1!==o&&(h=-1);else if(!c){s=u+1;break}return-1===o||-1===l||0===h||1===h&&o===l-1&&o===s+1?-1!==l&&(e.base=e.name=t.slice(0===s&&a?1:s,l)):(0===s&&a?(e.name=t.slice(1,o),e.base=t.slice(1,l)):(e.name=t.slice(s,o),e.base=t.slice(s,l)),e.ext=t.slice(o,l)),s>0?e.dir=t.slice(0,s-1):a&&(e.dir=\"/\"),e},sep:\"/\",delimiter:\":\",win32:null,posix:null};i.posix=i,e.exports=i}).call(this)}).call(this,t(\"_process\"))},{_process:526}],508:[function(t,e,n){(function(t){(function(){(function(){var n,r,i,a,o,s;\"undefined\"!=typeof performance&&null!==performance&&performance.now?e.exports=function(){return performance.now()}:null!=t&&t.hrtime?(e.exports=function(){return(n()-o)/1e6},r=t.hrtime,a=(n=function(){var t;return 1e9*(t=r())[0]+t[1]})(),s=1e9*t.uptime(),o=a-s):Date.now?(e.exports=function(){return Date.now()-i},i=Date.now()):(e.exports=function(){return(new Date).getTime()-i},i=(new Date).getTime())}).call(this)}).call(this)}).call(this,t(\"_process\"))},{_process:526}],509:[function(t,e,n){\"use strict\";e.exports=function(t){var e=t.length;if(e<32){for(var n=1,i=0;i<e;++i)for(var a=0;a<i;++a)if(t[i]<t[a])n=-n;else if(t[i]===t[a])return 0;return n}var o=r.mallocUint8(e);for(i=0;i<e;++i)o[i]=0;for(n=1,i=0;i<e;++i)if(!o[i]){var s=1;for(o[i]=1,a=t[i];a!==i;a=t[a]){if(o[a])return r.freeUint8(o),0;s+=1,o[a]=1}1&s||(n=-n)}return r.freeUint8(o),n};var r=t(\"typedarray-pool\")},{\"typedarray-pool\":595}],510:[function(t,e,n){\"use strict\";var r=t(\"typedarray-pool\"),i=t(\"invert-permutation\");n.rank=function(t){var e=t.length;switch(e){case 0:case 1:return 0;case 2:return t[1]}var n,a,o,s=r.mallocUint32(e),l=r.mallocUint32(e),c=0;for(i(t,l),o=0;o<e;++o)s[o]=t[o];for(o=e-1;o>0;--o)n=s[o],s[o]=s[a=l[o]],s[a]=n,l[o]=l[n],l[n]=a,c=(c+n)*o;return r.freeUint32(l),r.freeUint32(s),c},n.unrank=function(t,e,n){switch(t){case 0:return n||[];case 1:return n?(n[0]=0,n):[0];case 2:return n?(e?(n[0]=0,n[1]=1):(n[0]=1,n[1]=0),n):e?[0,1]:[1,0]}var r,i,a,o=1;for((n=n||new Array(t))[0]=0,a=1;a<t;++a)n[a]=a,o=o*a|0;for(a=t-1;a>0;--a)e=e-(r=e/o|0)*o|0,o=o/a|0,i=0|n[a],n[a]=0|n[r],n[r]=0|i;return n}},{\"invert-permutation\":462,\"typedarray-pool\":595}],511:[function(t,e,n){\"use strict\";e.exports=function(t,e,n){var r,a,o={};if(\"string\"==typeof e&&(e=i(e)),Array.isArray(e)){var s={};for(a=0;a<e.length;a++)s[e[a]]=!0;e=s}for(r in e)e[r]=i(e[r]);var l={};for(r in e){var c=e[r];if(Array.isArray(c))for(a=0;a<c.length;a++){var u=c[a];if(n&&(l[u]=!0),u in t){if(o[r]=t[u],n)for(var h=a;h<c.length;h++)l[c[h]]=!0;break}}else r in t&&(e[r]&&(o[r]=t[r]),n&&(l[r]=!0))}if(n)for(r in t)l[r]||(o[r]=t[r]);return o};var r={};function i(t){return r[t]?r[t]:(\"string\"==typeof t&&(t=r[t]=t.split(/\\s*,\\s*|\\s+/)),t)}},{}],512:[function(t,e,n){\"use strict\";e.exports=function(t,e){for(var n=0|e.length,i=t.length,a=[new Array(n),new Array(n)],o=0;o<n;++o)a[0][o]=[],a[1][o]=[];for(o=0;o<i;++o){var s=t[o];a[0][s[0]].push(s),a[1][s[1]].push(s)}var l=[];for(o=0;o<n;++o)a[0][o].length+a[1][o].length===0&&l.push([o]);function c(t,e){var n=a[e][t[e]];n.splice(n.indexOf(t),1)}function u(t,n,i){for(var o,s,l,u=0;u<2;++u)if(a[u][n].length>0){o=a[u][n][0],l=u;break}s=o[1^l];for(var h=0;h<2;++h)for(var d=a[h][n],f=0;f<d.length;++f){var p=d[f],m=p[1^h];r(e[t],e[n],e[s],e[m])>0&&(o=p,s=m,l=h)}return i||o&&c(o,l),s}function h(t,n){var i=a[n][t][0],o=[t];c(i,n);for(var s=i[1^n];;){for(;s!==t;)o.push(s),s=u(o[o.length-2],s,!1);if(a[0][t].length+a[1][t].length===0)break;var l=o[o.length-1],h=t,d=o[1],f=u(l,h,!0);if(r(e[l],e[h],e[d],e[f])<0)break;o.push(t),s=u(l,h)}return o}function d(t,e){return e[1]===e[e.length-1]}for(o=0;o<n;++o)for(var f=0;f<2;++f){for(var p=[];a[f][o].length>0;){var m=h(o,f);d(0,m)?p.push.apply(p,m):(p.length>0&&l.push(p),p=m)}p.length>0&&l.push(p)}return l};var r=t(\"compare-angle\")},{\"compare-angle\":132}],513:[function(t,e,n){\"use strict\";e.exports=function(t,e){for(var n=r(t,e.length),i=new Array(e.length),a=new Array(e.length),o=[],s=0;s<e.length;++s){var l=n[s].length;a[s]=l,i[s]=!0,l<=1&&o.push(s)}for(;o.length>0;){i[f=o.pop()]=!1;var c=n[f];for(s=0;s<c.length;++s){var u=c[s];0==--a[u]&&o.push(u)}}var h=new Array(e.length),d=[];for(s=0;s<e.length;++s){var f;i[s]?(h[s]=f=d.length,d.push(e[s])):h[s]=-1}var p=[];for(s=0;s<t.length;++s){var m=t[s];i[m[0]]&&i[m[1]]&&p.push([h[m[0]],h[m[1]]])}return[p,d]};var r=t(\"edges-to-adjacency-list\")},{\"edges-to-adjacency-list\":178}],514:[function(t,e,n){\"use strict\";e.exports=function(t,e){t=(j=c(t,e))[0];for(var n=(e=j[1]).length,h=r(t,e.length),d=0;d<n;++d)if(h[d].length%2==1)throw new Error(\"planar-graph-to-polyline: graph must be manifold\");var f=i(t,e),p=(f=f.filter((function(t){for(var n=t.length,r=[0],i=0;i<n;++i){var a=e[t[i]],l=e[t[(i+1)%n]],c=o(-a[0],a[1]),u=o(-a[0],l[1]),h=o(l[0],a[1]),d=o(l[0],l[1]);r=s(r,s(s(c,u),s(h,d)))}return r[r.length-1]>0}))).length,m=new Array(p),g=new Array(p);for(d=0;d<p;++d){m[d]=d;var y=new Array(p),v=f[d].map((function(t){return e[t]})),_=a([v]),b=0;t:for(var x=0;x<p;++x)if(y[x]=0,d!==x){for(var w=(V=f[x]).length,k=0;k<w;++k){var M=_(e[V[k]]);if(0!==M){M<0&&(y[x]=1,b+=1);continue t}}y[x]=1,b+=1}g[d]=[b,d,y]}for(g.sort((function(t,e){return e[0]-t[0]})),d=0;d<p;++d){var T=(y=g[d])[1],S=y[2];for(x=0;x<p;++x)S[x]&&(m[x]=T)}var A=function(t){for(var e=new Array(t),n=0;n<t;++n)e[n]=[];return e}(p);for(d=0;d<p;++d)A[d].push(m[d]),A[m[d]].push(d);var L={},C=u(n,!1);for(d=0;d<p;++d)for(w=(V=f[d]).length,x=0;x<w;++x){var E=V[x],O=V[(x+1)%w],D=Math.min(E,O)+\":\"+Math.max(E,O);if(D in L){var I=L[D];A[I].push(d),A[d].push(I),C[E]=C[O]=!0}else L[D]=d}function P(t){for(var e=t.length,n=0;n<e;++n)if(!C[t[n]])return!1;return!0}var R=[],z=u(p,-1);for(d=0;d<p;++d)m[d]!==d||P(f[d])?z[d]=-1:(R.push(d),z[d]=0);for(var j=[];R.length>0;){var F=R.pop(),N=A[F];l(N,(function(t,e){return t-e}));var B,Y=N.length,H=z[F];for(0===H&&(B=[V=f[F]]),d=0;d<Y;++d){var V,U=N[d];z[U]>=0||(z[U]=1^H,R.push(U),0===H&&(P(V=f[U])||(V.reverse(),B.push(V))))}0===H&&j.push(B)}return j};var r=t(\"edges-to-adjacency-list\"),i=t(\"planar-dual\"),a=t(\"point-in-big-polygon\"),o=t(\"two-product\"),s=t(\"robust-sum\"),l=t(\"uniq\"),c=t(\"./lib/trim-leaves\");function u(t,e){for(var n=new Array(t),r=0;r<t;++r)n[r]=e;return n}},{\"./lib/trim-leaves\":513,\"edges-to-adjacency-list\":178,\"planar-dual\":512,\"point-in-big-polygon\":516,\"robust-sum\":553,\"two-product\":582,uniq:597}],515:[function(t,e,n){arguments[4][243][0].apply(n,arguments)},{dup:243}],516:[function(t,e,n){e.exports=function(t){for(var e=t.length,n=[],a=[],s=0;s<e;++s)for(var u=t[s],h=u.length,d=h-1,f=0;f<h;d=f++){var p=u[d],m=u[f];p[0]===m[0]?a.push([p,m]):n.push([p,m])}if(0===n.length)return 0===a.length?c:(g=l(a),function(t){return g(t[0],t[1])?0:1});var g,y=i(n),v=function(t,e){return function(n){var i=o.le(e,n[0]);if(i<0)return 1;var a=t[i];if(!a){if(!(i>0&&e[i]===n[0]))return 1;a=t[i-1]}for(var s=1;a;){var l=a.key,c=r(n,l[0],l[1]);if(l[0][0]<l[1][0])if(c<0)a=a.left;else{if(!(c>0))return 0;s=-1,a=a.right}else if(c>0)a=a.left;else{if(!(c<0))return 0;s=1,a=a.right}}return s}}(y.slabs,y.coordinates);return 0===a.length?v:function(t,e){return function(n){return t(n[0],n[1])?0:e(n)}}(l(a),v)};var r=t(\"robust-orientation\")[3],i=t(\"slab-decomposition\"),a=t(\"interval-tree-1d\"),o=t(\"binary-search-bounds\");function s(){return!0}function l(t){for(var e={},n=0;n<t.length;++n){var r=t[n],i=r[0][0],o=r[0][1],l=r[1][1],c=[Math.min(o,l),Math.max(o,l)];i in e?e[i].push(c):e[i]=[c]}var u={},h=Object.keys(e);for(n=0;n<h.length;++n)u[h[n]]=a(e[h[n]]);return function(t){return function(e,n){var r=t[e];return!!r&&!!r.queryPoint(n,s)}}(u)}function c(t){return 1}},{\"binary-search-bounds\":515,\"interval-tree-1d\":460,\"robust-orientation\":548,\"slab-decomposition\":565}],517:[function(t,e,n){var r,i=t(\"./lib/build-log\"),a=t(\"./lib/epsilon\"),o=t(\"./lib/intersecter\"),s=t(\"./lib/segment-chainer\"),l=t(\"./lib/segment-selector\"),c=t(\"./lib/geojson\"),u=!1,h=a();function d(t,e,n){var i=r.segments(t),a=r.segments(e),o=n(r.combine(i,a));return r.polygon(o)}r={buildLog:function(t){return!0===t?u=i():!1===t&&(u=!1),!1!==u&&u.list},epsilon:function(t){return h.epsilon(t)},segments:function(t){var e=o(!0,h,u);return t.regions.forEach(e.addRegion),{segments:e.calculate(t.inverted),inverted:t.inverted}},combine:function(t,e){return{combined:o(!1,h,u).calculate(t.segments,t.inverted,e.segments,e.inverted),inverted1:t.inverted,inverted2:e.inverted}},selectUnion:function(t){return{segments:l.union(t.combined,u),inverted:t.inverted1||t.inverted2}},selectIntersect:function(t){return{segments:l.intersect(t.combined,u),inverted:t.inverted1&&t.inverted2}},selectDifference:function(t){return{segments:l.difference(t.combined,u),inverted:t.inverted1&&!t.inverted2}},selectDifferenceRev:function(t){return{segments:l.differenceRev(t.combined,u),inverted:!t.inverted1&&t.inverted2}},selectXor:function(t){return{segments:l.xor(t.combined,u),inverted:t.inverted1!==t.inverted2}},polygon:function(t){return{regions:s(t.segments,h,u),inverted:t.inverted}},polygonFromGeoJSON:function(t){return c.toPolygon(r,t)},polygonToGeoJSON:function(t){return c.fromPolygon(r,h,t)},union:function(t,e){return d(t,e,r.selectUnion)},intersect:function(t,e){return d(t,e,r.selectIntersect)},difference:function(t,e){return d(t,e,r.selectDifference)},differenceRev:function(t,e){return d(t,e,r.selectDifferenceRev)},xor:function(t,e){return d(t,e,r.selectXor)}},\"object\"==typeof window&&(window.PolyBool=r),e.exports=r},{\"./lib/build-log\":518,\"./lib/epsilon\":519,\"./lib/geojson\":520,\"./lib/intersecter\":521,\"./lib/segment-chainer\":523,\"./lib/segment-selector\":524}],518:[function(t,e,n){e.exports=function(){var t,e=0,n=!1;function r(e,n){return t.list.push({type:e,data:n?JSON.parse(JSON.stringify(n)):void 0}),t}return t={list:[],segmentId:function(){return e++},checkIntersection:function(t,e){return r(\"check\",{seg1:t,seg2:e})},segmentChop:function(t,e){return r(\"div_seg\",{seg:t,pt:e}),r(\"chop\",{seg:t,pt:e})},statusRemove:function(t){return r(\"pop_seg\",{seg:t})},segmentUpdate:function(t){return r(\"seg_update\",{seg:t})},segmentNew:function(t,e){return r(\"new_seg\",{seg:t,primary:e})},segmentRemove:function(t){return r(\"rem_seg\",{seg:t})},tempStatus:function(t,e,n){return r(\"temp_status\",{seg:t,above:e,below:n})},rewind:function(t){return r(\"rewind\",{seg:t})},status:function(t,e,n){return r(\"status\",{seg:t,above:e,below:n})},vert:function(e){return e===n?t:(n=e,r(\"vert\",{x:e}))},log:function(t){return\"string\"!=typeof t&&(t=JSON.stringify(t,!1,\"  \")),r(\"log\",{txt:t})},reset:function(){return r(\"reset\")},selected:function(t){return r(\"selected\",{segs:t})},chainStart:function(t){return r(\"chain_start\",{seg:t})},chainRemoveHead:function(t,e){return r(\"chain_rem_head\",{index:t,pt:e})},chainRemoveTail:function(t,e){return r(\"chain_rem_tail\",{index:t,pt:e})},chainNew:function(t,e){return r(\"chain_new\",{pt1:t,pt2:e})},chainMatch:function(t){return r(\"chain_match\",{index:t})},chainClose:function(t){return r(\"chain_close\",{index:t})},chainAddHead:function(t,e){return r(\"chain_add_head\",{index:t,pt:e})},chainAddTail:function(t,e){return r(\"chain_add_tail\",{index:t,pt:e})},chainConnect:function(t,e){return r(\"chain_con\",{index1:t,index2:e})},chainReverse:function(t){return r(\"chain_rev\",{index:t})},chainJoin:function(t,e){return r(\"chain_join\",{index1:t,index2:e})},done:function(){return r(\"done\")}}}},{}],519:[function(t,e,n){e.exports=function(t){\"number\"!=typeof t&&(t=1e-10);var e={epsilon:function(e){return\"number\"==typeof e&&(t=e),t},pointAboveOrOnLine:function(e,n,r){var i=n[0],a=n[1];return(r[0]-i)*(e[1]-a)-(r[1]-a)*(e[0]-i)>=-t},pointBetween:function(e,n,r){var i=r[0]-n[0],a=r[1]-n[1],o=(e[0]-n[0])*i+(e[1]-n[1])*a;return!(o<t||o-(i*i+a*a)>-t)},pointsSameX:function(e,n){return Math.abs(e[0]-n[0])<t},pointsSameY:function(e,n){return Math.abs(e[1]-n[1])<t},pointsSame:function(t,n){return e.pointsSameX(t,n)&&e.pointsSameY(t,n)},pointsCompare:function(t,n){return e.pointsSameX(t,n)?e.pointsSameY(t,n)?0:t[1]<n[1]?-1:1:t[0]<n[0]?-1:1},pointsCollinear:function(e,n,r){return Math.abs((e[0]-n[0])*(n[1]-r[1])-(n[0]-r[0])*(e[1]-n[1]))<t},linesIntersect:function(e,n,r,i){var a=n[0]-e[0],o=n[1]-e[1],s=i[0]-r[0],l=i[1]-r[1],c=a*l-o*s;if(Math.abs(c)<t)return!1;var u=e[0]-r[0],h=e[1]-r[1],d=(s*h-l*u)/c,f=(a*h-o*u)/c,p={alongA:0,alongB:0,pt:[e[0]+d*a,e[1]+d*o]};return p.alongA=d<=-t?-2:d<t?-1:d-1<=-t?0:d-1<t?1:2,p.alongB=f<=-t?-2:f<t?-1:f-1<=-t?0:f-1<t?1:2,p},pointInsideRegion:function(e,n){for(var r=e[0],i=e[1],a=n[n.length-1][0],o=n[n.length-1][1],s=!1,l=0;l<n.length;l++){var c=n[l][0],u=n[l][1];u-i>t!=o-i>t&&(a-c)*(i-u)/(o-u)+c-r>t&&(s=!s),a=c,o=u}return s}};return e}},{}],520:[function(t,e,n){e.exports={toPolygon:function(t,e){function n(e){if(e.length<=0)return t.segments({inverted:!1,regions:[]});function n(e){var n=e.slice(0,e.length-1);return t.segments({inverted:!1,regions:[n]})}for(var r=n(e[0]),i=1;i<e.length;i++)r=t.selectDifference(t.combine(r,n(e[i])));return r}if(\"Polygon\"===e.type)return t.polygon(n(e.coordinates));if(\"MultiPolygon\"===e.type){for(var r=t.segments({inverted:!1,regions:[]}),i=0;i<e.coordinates.length;i++)r=t.selectUnion(t.combine(r,n(e.coordinates[i])));return t.polygon(r)}throw new Error(\"PolyBool: Cannot convert GeoJSON object to PolyBool polygon\")},fromPolygon:function(t,e,n){function r(t,n){return e.pointInsideRegion([.5*(t[0][0]+t[1][0]),.5*(t[0][1]+t[1][1])],n)}function i(t){return{region:t,children:[]}}n=t.polygon(t.segments(n));var a=i(null);function o(t,e){for(var n=0;n<t.children.length;n++)if(r(e,(s=t.children[n]).region))return void o(s,e);var a=i(e);for(n=0;n<t.children.length;n++){var s;r((s=t.children[n]).region,e)&&(a.children.push(s),t.children.splice(n,1),n--)}t.children.push(a)}for(var s=0;s<n.regions.length;s++){var l=n.regions[s];l.length<3||o(a,l)}function c(t,e){for(var n=0,r=t[t.length-1][0],i=t[t.length-1][1],a=[],o=0;o<t.length;o++){var s=t[o][0],l=t[o][1];a.push([s,l]),n+=l*r-s*i,r=s,i=l}return n<0!==e&&a.reverse(),a.push([a[0][0],a[0][1]]),a}var u=[];function h(t){var e=[c(t.region,!1)];u.push(e);for(var n=0;n<t.children.length;n++)e.push(d(t.children[n]))}function d(t){for(var e=0;e<t.children.length;e++)h(t.children[e]);return c(t.region,!0)}for(s=0;s<a.children.length;s++)h(a.children[s]);return u.length<=0?{type:\"Polygon\",coordinates:[]}:1==u.length?{type:\"Polygon\",coordinates:u[0]}:{type:\"MultiPolygon\",coordinates:u}}}},{}],521:[function(t,e,n){var r=t(\"./linked-list\");e.exports=function(t,e,n){function i(t,e,r){return{id:n?n.segmentId():-1,start:t,end:e,myFill:{above:r.myFill.above,below:r.myFill.below},otherFill:null}}var a=r.create();function o(t,n){a.insertBefore(t,(function(r){return i=t.isStart,a=n,o=r.isStart,l=r.other.pt,(0!==(c=e.pointsCompare(t.pt,s=r.pt))?c:e.pointsSame(a,l)?0:i!==o?i?1:-1:e.pointAboveOrOnLine(a,o?s:l,o?l:s)?1:-1)<0;var i,a,o,s,l,c}))}function s(t,e){var n=function(t,e){var n=r.node({isStart:!0,pt:t.start,seg:t,primary:e,other:null,status:null});return o(n,t.end),n}(t,e);return function(t,e,n){var i=r.node({isStart:!1,pt:e.end,seg:e,primary:n,other:t,status:null});t.other=i,o(i,t.pt)}(n,t,e),n}function l(t,e){var r=i(e,t.seg.end,t.seg);return function(t,e){n&&n.segmentChop(t.seg,e),t.other.remove(),t.seg.end=e,t.other.pt=e,o(t.other,t.pt)}(t,e),s(r,t.primary)}function c(i,o){var s=r.create();function c(t){return s.findTransition((function(n){return o=(r=t).seg.end,(e.pointsCollinear(a=r.seg.start,s=(i=n.ev).seg.start,l=i.seg.end)?e.pointsCollinear(o,s,l)||e.pointAboveOrOnLine(o,s,l)?1:-1:e.pointAboveOrOnLine(a,s,l)?1:-1)>0;var r,i,a,o,s,l}))}function u(t,r){var i=t.seg,a=r.seg,o=i.start,s=i.end,c=a.start,u=a.end;n&&n.checkIntersection(i,a);var h=e.linesIntersect(o,s,c,u);if(!1===h){if(!e.pointsCollinear(o,s,c))return!1;if(e.pointsSame(o,u)||e.pointsSame(s,c))return!1;var d=e.pointsSame(o,c),f=e.pointsSame(s,u);if(d&&f)return r;var p=!d&&e.pointBetween(o,c,u),m=!f&&e.pointBetween(s,c,u);if(d)return m?l(r,s):l(t,u),r;p&&(f||(m?l(r,s):l(t,u)),l(r,o))}else 0===h.alongA&&(-1===h.alongB?l(t,c):0===h.alongB?l(t,h.pt):1===h.alongB&&l(t,u)),0===h.alongB&&(-1===h.alongA?l(r,o):0===h.alongA?l(r,h.pt):1===h.alongA&&l(r,s));return!1}for(var h=[];!a.isEmpty();){var d=a.getHead();if(n&&n.vert(d.pt[0]),d.isStart){n&&n.segmentNew(d.seg,d.primary);var f=c(d),p=f.before?f.before.ev:null,m=f.after?f.after.ev:null;function g(){if(p){var t=u(d,p);if(t)return t}return!!m&&u(d,m)}n&&n.tempStatus(d.seg,!!p&&p.seg,!!m&&m.seg);var y,v,_=g();if(_&&(t?(v=null===d.seg.myFill.below||d.seg.myFill.above!==d.seg.myFill.below)&&(_.seg.myFill.above=!_.seg.myFill.above):_.seg.otherFill=d.seg.myFill,n&&n.segmentUpdate(_.seg),d.other.remove(),d.remove()),a.getHead()!==d){n&&n.rewind(d.seg);continue}t?(v=null===d.seg.myFill.below||d.seg.myFill.above!==d.seg.myFill.below,d.seg.myFill.below=m?m.seg.myFill.above:i,d.seg.myFill.above=v?!d.seg.myFill.below:d.seg.myFill.below):null===d.seg.otherFill&&(d.seg.otherFill={above:y=m?d.primary===m.primary?m.seg.otherFill.above:m.seg.myFill.above:d.primary?o:i,below:y}),n&&n.status(d.seg,!!p&&p.seg,!!m&&m.seg),d.other.status=f.insert(r.node({ev:d}))}else{var b=d.status;if(null===b)throw new Error(\"PolyBool: Zero-length segment detected; your epsilon is probably too small or too large\");if(s.exists(b.prev)&&s.exists(b.next)&&u(b.prev.ev,b.next.ev),n&&n.statusRemove(b.ev.seg),b.remove(),!d.primary){var x=d.seg.myFill;d.seg.myFill=d.seg.otherFill,d.seg.otherFill=x}h.push(d.seg)}a.getHead().remove()}return n&&n.done(),h}return t?{addRegion:function(t){for(var r,i=t[t.length-1],a=0;a<t.length;a++){var o=e.pointsCompare(r=i,i=t[a]);0!==o&&s((l=o<0?r:i,c=o<0?i:r,{id:n?n.segmentId():-1,start:l,end:c,myFill:{above:null,below:null},otherFill:null}),!0)}var l,c},calculate:function(t){return c(t,!1)}}:{calculate:function(t,e,n,r){return t.forEach((function(t){s(i(t.start,t.end,t),!0)})),n.forEach((function(t){s(i(t.start,t.end,t),!1)})),c(e,r)}}}},{\"./linked-list\":522}],522:[function(t,e,n){e.exports={create:function(){var t={root:{root:!0,next:null},exists:function(e){return null!==e&&e!==t.root},isEmpty:function(){return null===t.root.next},getHead:function(){return t.root.next},insertBefore:function(e,n){for(var r=t.root,i=t.root.next;null!==i;){if(n(i))return e.prev=i.prev,e.next=i,i.prev.next=e,void(i.prev=e);r=i,i=i.next}r.next=e,e.prev=r,e.next=null},findTransition:function(e){for(var n=t.root,r=t.root.next;null!==r&&!e(r);)n=r,r=r.next;return{before:n===t.root?null:n,after:r,insert:function(t){return t.prev=n,t.next=r,n.next=t,null!==r&&(r.prev=t),t}}}};return t},node:function(t){return t.prev=null,t.next=null,t.remove=function(){t.prev.next=t.next,t.next&&(t.next.prev=t.prev),t.prev=null,t.next=null},t}}},{}],523:[function(t,e,n){e.exports=function(t,e,n){var r=[],i=[];return t.forEach((function(t){var a=t.start,o=t.end;if(e.pointsSame(a,o))console.warn(\"PolyBool: Warning: Zero-length segment detected; your epsilon is probably too small or too large\");else{n&&n.chainStart(t);for(var s={index:0,matches_head:!1,matches_pt1:!1},l={index:0,matches_head:!1,matches_pt1:!1},c=s,u=0;u<r.length;u++){var h=(g=r[u])[0],d=g[g.length-1];if(e.pointsSame(h,a)){if(M(u,!0,!0))break}else if(e.pointsSame(h,o)){if(M(u,!0,!1))break}else if(e.pointsSame(d,a)){if(M(u,!1,!0))break}else if(e.pointsSame(d,o)&&M(u,!1,!1))break}if(c===s)return r.push([a,o]),void(n&&n.chainNew(a,o));if(c===l){n&&n.chainMatch(s.index);var f=s.index,p=s.matches_pt1?o:a,m=s.matches_head,g=r[f],y=m?g[0]:g[g.length-1],v=m?g[1]:g[g.length-2],_=m?g[g.length-1]:g[0],b=m?g[g.length-2]:g[1];return e.pointsCollinear(v,y,p)&&(m?(n&&n.chainRemoveHead(s.index,p),g.shift()):(n&&n.chainRemoveTail(s.index,p),g.pop()),y=v),e.pointsSame(_,p)?(r.splice(f,1),e.pointsCollinear(b,_,y)&&(m?(n&&n.chainRemoveTail(s.index,y),g.pop()):(n&&n.chainRemoveHead(s.index,y),g.shift())),n&&n.chainClose(s.index),void i.push(g)):void(m?(n&&n.chainAddHead(s.index,p),g.unshift(p)):(n&&n.chainAddTail(s.index,p),g.push(p)))}var x=s.index,w=l.index;n&&n.chainConnect(x,w);var k=r[x].length<r[w].length;s.matches_head?l.matches_head?k?(T(x),S(x,w)):(T(w),S(w,x)):S(w,x):l.matches_head?S(x,w):k?(T(x),S(w,x)):(T(w),S(x,w))}function M(t,e,n){return c.index=t,c.matches_head=e,c.matches_pt1=n,c===s?(c=l,!1):(c=null,!0)}function T(t){n&&n.chainReverse(t),r[t].reverse()}function S(t,i){var a=r[t],o=r[i],s=a[a.length-1],l=a[a.length-2],c=o[0],u=o[1];e.pointsCollinear(l,s,c)&&(n&&n.chainRemoveTail(t,s),a.pop(),s=l),e.pointsCollinear(s,c,u)&&(n&&n.chainRemoveHead(i,c),o.shift()),n&&n.chainJoin(t,i),r[t]=a.concat(o),r.splice(i,1)}})),i}},{}],524:[function(t,e,n){function r(t,e,n){var r=[];return t.forEach((function(t){var i=(t.myFill.above?8:0)+(t.myFill.below?4:0)+(t.otherFill&&t.otherFill.above?2:0)+(t.otherFill&&t.otherFill.below?1:0);0!==e[i]&&r.push({id:n?n.segmentId():-1,start:t.start,end:t.end,myFill:{above:1===e[i],below:2===e[i]},otherFill:null})})),n&&n.selected(r),r}e.exports={union:function(t,e){return r(t,[0,2,1,0,2,2,0,0,1,0,1,0,0,0,0,0],e)},intersect:function(t,e){return r(t,[0,0,0,0,0,2,0,2,0,0,1,1,0,2,1,0],e)},difference:function(t,e){return r(t,[0,0,0,0,2,0,2,0,1,1,0,0,0,1,2,0],e)},differenceRev:function(t,e){return r(t,[0,2,1,0,0,0,1,1,0,2,0,2,0,0,0,0],e)},xor:function(t,e){return r(t,[0,2,1,0,2,0,0,1,1,0,0,2,0,1,2,0],e)}}},{}],525:[function(t,e,n){\"use strict\";var r=new Float64Array(4),i=new Float64Array(4),a=new Float64Array(4);e.exports=function(t,e,n,o,s){r.length<o.length&&(r=new Float64Array(o.length),i=new Float64Array(o.length),a=new Float64Array(o.length));for(var l=0;l<o.length;++l)r[l]=t[l]-o[l],i[l]=e[l]-t[l],a[l]=n[l]-t[l];var c=0,u=0,h=0,d=0,f=0,p=0;for(l=0;l<o.length;++l){var m=i[l],g=a[l],y=r[l];c+=m*m,u+=m*g,h+=g*g,d+=y*m,f+=y*g,p+=y*y}var v,_,b,x,w,k=Math.abs(c*h-u*u),M=u*f-h*d,T=u*d-c*f;if(M+T<=k)if(M<0)T<0&&d<0?(T=0,-d>=c?(M=1,v=c+2*d+p):v=d*(M=-d/c)+p):(M=0,f>=0?(T=0,v=p):-f>=h?(T=1,v=h+2*f+p):v=f*(T=-f/h)+p);else if(T<0)T=0,d>=0?(M=0,v=p):-d>=c?(M=1,v=c+2*d+p):v=d*(M=-d/c)+p;else{var S=1/k;v=(M*=S)*(c*M+u*(T*=S)+2*d)+T*(u*M+h*T+2*f)+p}else M<0?(b=h+f)>(_=u+d)?(x=b-_)>=(w=c-2*u+h)?(M=1,T=0,v=c+2*d+p):v=(M=x/w)*(c*M+u*(T=1-M)+2*d)+T*(u*M+h*T+2*f)+p:(M=0,b<=0?(T=1,v=h+2*f+p):f>=0?(T=0,v=p):v=f*(T=-f/h)+p):T<0?(b=c+d)>(_=u+f)?(x=b-_)>=(w=c-2*u+h)?(T=1,M=0,v=h+2*f+p):v=(M=1-(T=x/w))*(c*M+u*T+2*d)+T*(u*M+h*T+2*f)+p:(T=0,b<=0?(M=1,v=c+2*d+p):d>=0?(M=0,v=p):v=d*(M=-d/c)+p):(x=h+f-u-d)<=0?(M=0,T=1,v=h+2*f+p):x>=(w=c-2*u+h)?(M=1,T=0,v=c+2*d+p):v=(M=x/w)*(c*M+u*(T=1-M)+2*d)+T*(u*M+h*T+2*f)+p;var A=1-M-T;for(l=0;l<o.length;++l)s[l]=A*t[l]+M*e[l]+T*n[l];return v<0?0:v}},{}],526:[function(t,e,n){var r,i,a=e.exports={};function o(){throw new Error(\"setTimeout has not been defined\")}function s(){throw new Error(\"clearTimeout has not been defined\")}function l(t){if(r===setTimeout)return setTimeout(t,0);if((r===o||!r)&&setTimeout)return r=setTimeout,setTimeout(t,0);try{return r(t,0)}catch(e){try{return r.call(null,t,0)}catch(e){return r.call(this,t,0)}}}!function(){try{r=\"function\"==typeof setTimeout?setTimeout:o}catch(t){r=o}try{i=\"function\"==typeof clearTimeout?clearTimeout:s}catch(t){i=s}}();var c,u=[],h=!1,d=-1;function f(){h&&c&&(h=!1,c.length?u=c.concat(u):d=-1,u.length&&p())}function p(){if(!h){var t=l(f);h=!0;for(var e=u.length;e;){for(c=u,u=[];++d<e;)c&&c[d].run();d=-1,e=u.length}c=null,h=!1,function(t){if(i===clearTimeout)return clearTimeout(t);if((i===s||!i)&&clearTimeout)return i=clearTimeout,clearTimeout(t);try{i(t)}catch(e){try{return i.call(null,t)}catch(e){return i.call(this,t)}}}(t)}}function m(t,e){this.fun=t,this.array=e}function g(){}a.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];u.push(new m(t,e)),1!==u.length||h||l(p)},m.prototype.run=function(){this.fun.apply(null,this.array)},a.title=\"browser\",a.browser=!0,a.env={},a.argv=[],a.version=\"\",a.versions={},a.on=g,a.addListener=g,a.once=g,a.off=g,a.removeListener=g,a.removeAllListeners=g,a.emit=g,a.prependListener=g,a.prependOnceListener=g,a.listeners=function(t){return[]},a.binding=function(t){throw new Error(\"process.binding is not supported\")},a.cwd=function(){return\"/\"},a.chdir=function(t){throw new Error(\"process.chdir is not supported\")},a.umask=function(){return 0}},{}],527:[function(t,e,n){e.exports=t(\"gl-quat/slerp\")},{\"gl-quat/slerp\":325}],528:[function(t,e,n){(function(n){(function(){for(var r=t(\"performance-now\"),i=\"undefined\"==typeof window?n:window,a=[\"moz\",\"webkit\"],o=\"AnimationFrame\",s=i[\"request\"+o],l=i[\"cancel\"+o]||i[\"cancelRequest\"+o],c=0;!s&&c<a.length;c++)s=i[a[c]+\"Request\"+o],l=i[a[c]+\"Cancel\"+o]||i[a[c]+\"CancelRequest\"+o];if(!s||!l){var u=0,h=0,d=[];s=function(t){if(0===d.length){var e=r(),n=Math.max(0,16.666666666666668-(e-u));u=n+e,setTimeout((function(){var t=d.slice(0);d.length=0;for(var e=0;e<t.length;e++)if(!t[e].cancelled)try{t[e].callback(u)}catch(n){setTimeout((function(){throw n}),0)}}),Math.round(n))}return d.push({handle:++h,callback:t,cancelled:!1}),h},l=function(t){for(var e=0;e<d.length;e++)d[e].handle===t&&(d[e].cancelled=!0)}}e.exports=function(t){return s.call(i,t)},e.exports.cancel=function(){l.apply(i,arguments)},e.exports.polyfill=function(t){t||(t=i),t.requestAnimationFrame=s,t.cancelAnimationFrame=l}}).call(this)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{\"performance-now\":508}],529:[function(t,e,n){\"use strict\";var r=t(\"big-rat/add\");e.exports=function(t,e){for(var n=t.length,i=new Array(n),a=0;a<n;++a)i[a]=r(t[a],e[a]);return i}},{\"big-rat/add\":80}],530:[function(t,e,n){\"use strict\";e.exports=function(t){for(var e=new Array(t.length),n=0;n<t.length;++n)e[n]=r(t[n]);return e};var r=t(\"big-rat\")},{\"big-rat\":83}],531:[function(t,e,n){\"use strict\";var r=t(\"big-rat\"),i=t(\"big-rat/mul\");e.exports=function(t,e){for(var n=r(e),a=t.length,o=new Array(a),s=0;s<a;++s)o[s]=i(t[s],n);return o}},{\"big-rat\":83,\"big-rat/mul\":92}],532:[function(t,e,n){\"use strict\";var r=t(\"big-rat/sub\");e.exports=function(t,e){for(var n=t.length,i=new Array(n),a=0;a<n;++a)i[a]=r(t[a],e[a]);return i}},{\"big-rat/sub\":94}],533:[function(t,e,n){\"use strict\";var r=t(\"compare-cell\"),i=t(\"compare-oriented-cell\"),a=t(\"cell-orientation\");e.exports=function(t){t.sort(i);for(var e=t.length,n=0,o=0;o<e;++o){var s=t[o],l=a(s);if(0!==l){if(n>0){var c=t[n-1];if(0===r(s,c)&&a(c)!==l){n-=1;continue}}t[n++]=s}}return t.length=n,t}},{\"cell-orientation\":117,\"compare-cell\":133,\"compare-oriented-cell\":134}],534:[function(t,e,n){\"use strict\";var r=t(\"array-bounds\"),i=t(\"color-normalize\"),a=t(\"update-diff\"),o=t(\"pick-by-alias\"),s=t(\"object-assign\"),l=t(\"flatten-vertex-data\"),c=t(\"to-float32\"),u=c.float32,h=c.fract32;e.exports=function(t,e){if(\"function\"==typeof t?(e||(e={}),e.regl=t):e=t,e.length&&(e.positions=e),!(t=e.regl).hasExtension(\"ANGLE_instanced_arrays\"))throw Error(\"regl-error2d: `ANGLE_instanced_arrays` extension should be enabled\");var n,c,f,p,m,g,y=t._gl,v={color:\"black\",capSize:5,lineWidth:1,opacity:1,viewport:null,range:null,offset:0,count:0,bounds:null,positions:[],errors:[]},_=[];return p=t.buffer({usage:\"dynamic\",type:\"uint8\",data:new Uint8Array(0)}),c=t.buffer({usage:\"dynamic\",type:\"float\",data:new Uint8Array(0)}),f=t.buffer({usage:\"dynamic\",type:\"float\",data:new Uint8Array(0)}),m=t.buffer({usage:\"dynamic\",type:\"float\",data:new Uint8Array(0)}),g=t.buffer({usage:\"static\",type:\"float\",data:d}),k(e),n=t({vert:\"\\n\\t\\tprecision highp float;\\n\\n\\t\\tattribute vec2 position, positionFract;\\n\\t\\tattribute vec4 error;\\n\\t\\tattribute vec4 color;\\n\\n\\t\\tattribute vec2 direction, lineOffset, capOffset;\\n\\n\\t\\tuniform vec4 viewport;\\n\\t\\tuniform float lineWidth, capSize;\\n\\t\\tuniform vec2 scale, scaleFract, translate, translateFract;\\n\\n\\t\\tvarying vec4 fragColor;\\n\\n\\t\\tvoid main() {\\n\\t\\t\\tfragColor = color / 255.;\\n\\n\\t\\t\\tvec2 pixelOffset = lineWidth * lineOffset + (capSize + lineWidth) * capOffset;\\n\\n\\t\\t\\tvec2 dxy = -step(.5, direction.xy) * error.xz + step(direction.xy, vec2(-.5)) * error.yw;\\n\\n\\t\\t\\tvec2 position = position + dxy;\\n\\n\\t\\t\\tvec2 pos = (position + translate) * scale\\n\\t\\t\\t\\t+ (positionFract + translateFract) * scale\\n\\t\\t\\t\\t+ (position + translate) * scaleFract\\n\\t\\t\\t\\t+ (positionFract + translateFract) * scaleFract;\\n\\n\\t\\t\\tpos += pixelOffset / viewport.zw;\\n\\n\\t\\t\\tgl_Position = vec4(pos * 2. - 1., 0, 1);\\n\\t\\t}\\n\\t\\t\",frag:\"\\n\\t\\tprecision highp float;\\n\\n\\t\\tvarying vec4 fragColor;\\n\\n\\t\\tuniform float opacity;\\n\\n\\t\\tvoid main() {\\n\\t\\t\\tgl_FragColor = fragColor;\\n\\t\\t\\tgl_FragColor.a *= opacity;\\n\\t\\t}\\n\\t\\t\",uniforms:{range:t.prop(\"range\"),lineWidth:t.prop(\"lineWidth\"),capSize:t.prop(\"capSize\"),opacity:t.prop(\"opacity\"),scale:t.prop(\"scale\"),translate:t.prop(\"translate\"),scaleFract:t.prop(\"scaleFract\"),translateFract:t.prop(\"translateFract\"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]}},attributes:{color:{buffer:p,offset:function(t,e){return 4*e.offset},divisor:1},position:{buffer:c,offset:function(t,e){return 8*e.offset},divisor:1},positionFract:{buffer:f,offset:function(t,e){return 8*e.offset},divisor:1},error:{buffer:m,offset:function(t,e){return 16*e.offset},divisor:1},direction:{buffer:g,stride:24,offset:0},lineOffset:{buffer:g,stride:24,offset:8},capOffset:{buffer:g,stride:24,offset:16}},primitive:\"triangles\",blend:{enable:!0,color:[0,0,0,0],equation:{rgb:\"add\",alpha:\"add\"},func:{srcRGB:\"src alpha\",dstRGB:\"one minus src alpha\",srcAlpha:\"one minus dst alpha\",dstAlpha:\"one\"}},depth:{enable:!1},scissor:{enable:!0,box:t.prop(\"viewport\")},viewport:t.prop(\"viewport\"),stencil:!1,instances:t.prop(\"count\"),count:d.length}),s(b,{update:k,draw:x,destroy:M,regl:t,gl:y,canvas:y.canvas,groups:_}),b;function b(t){t?k(t):null===t&&M(),x()}function x(e){if(\"number\"==typeof e)return w(e);e&&!Array.isArray(e)&&(e=[e]),t._refresh(),_.forEach((function(t,n){t&&(e&&(t.draw=!!e[n]),t.draw?w(n):t.draw=!0)}))}function w(t){\"number\"==typeof t&&(t=_[t]),null!=t&&t&&t.count&&t.color&&t.opacity&&t.positions&&t.positions.length>1&&(t.scaleRatio=[t.scale[0]*t.viewport.width,t.scale[1]*t.viewport.height],n(t),t.after&&t.after(t))}function k(t){if(t){null!=t.length?\"number\"==typeof t[0]&&(t=[{positions:t}]):Array.isArray(t)||(t=[t]);var e=0,n=0;if(b.groups=_=t.map((function(t,c){var u=_[c];return t?(\"function\"==typeof t?t={after:t}:\"number\"==typeof t[0]&&(t={positions:t}),t=o(t,{color:\"color colors fill\",capSize:\"capSize cap capsize cap-size\",lineWidth:\"lineWidth line-width width line thickness\",opacity:\"opacity alpha\",range:\"range dataBox\",viewport:\"viewport viewBox\",errors:\"errors error\",positions:\"positions position data points\"}),u||(_[c]=u={id:c,scale:null,translate:null,scaleFract:null,translateFract:null,draw:!0},t=s({},v,t)),a(u,t,[{lineWidth:function(t){return.5*+t},capSize:function(t){return.5*+t},opacity:parseFloat,errors:function(t){return t=l(t),n+=t.length,t},positions:function(t,n){return t=l(t,\"float64\"),n.count=Math.floor(t.length/2),n.bounds=r(t,2),n.offset=e,e+=n.count,t}},{color:function(t,e){var n=e.count;if(t||(t=\"transparent\"),!Array.isArray(t)||\"number\"==typeof t[0]){var r=t;t=Array(n);for(var a=0;a<n;a++)t[a]=r}if(t.length<n)throw Error(\"Not enough colors\");for(var o=new Uint8Array(4*n),s=0;s<n;s++){var l=i(t[s],\"uint8\");o.set(l,4*s)}return o},range:function(t,e,n){return t||(t=e.bounds),e.scale=[1/(t[2]-t[0]),1/(t[3]-t[1])],e.translate=[-t[0],-t[1]],e.scaleFract=h(e.scale),e.translateFract=h(e.translate),t},viewport:function(t){var e;return Array.isArray(t)?e={x:t[0],y:t[1],width:t[2]-t[0],height:t[3]-t[1]}:t?((e={x:t.x||t.left||0,y:t.y||t.top||0}).width=t.right?t.right-e.x:t.w||t.width||0,e.height=t.bottom?t.bottom-e.y:t.h||t.height||0):e={x:0,y:0,width:y.drawingBufferWidth,height:y.drawingBufferHeight},e}}]),u):u})),e||n){var d=_.reduce((function(t,e,n){return t+(e?e.count:0)}),0),g=new Float64Array(2*d),x=new Uint8Array(4*d),w=new Float32Array(4*d);_.forEach((function(t,e){if(t){var n=t.positions,r=t.offset,i=t.errors;t.count&&(x.set(t.color,4*r),w.set(i,4*r),g.set(n,2*r))}})),c(u(g)),f(h(g)),p(x),m(w)}}}function M(){c.destroy(),f.destroy(),p.destroy(),m.destroy(),g.destroy()}};var d=[[1,0,0,1,0,0],[1,0,0,-1,0,0],[-1,0,0,-1,0,0],[-1,0,0,-1,0,0],[-1,0,0,1,0,0],[1,0,0,1,0,0],[1,0,-1,0,0,1],[1,0,-1,0,0,-1],[1,0,1,0,0,-1],[1,0,1,0,0,-1],[1,0,1,0,0,1],[1,0,-1,0,0,1],[-1,0,-1,0,0,1],[-1,0,-1,0,0,-1],[-1,0,1,0,0,-1],[-1,0,1,0,0,-1],[-1,0,1,0,0,1],[-1,0,-1,0,0,1],[0,1,1,0,0,0],[0,1,-1,0,0,0],[0,-1,-1,0,0,0],[0,-1,-1,0,0,0],[0,1,1,0,0,0],[0,-1,1,0,0,0],[0,1,0,-1,1,0],[0,1,0,-1,-1,0],[0,1,0,1,-1,0],[0,1,0,1,1,0],[0,1,0,-1,1,0],[0,1,0,1,-1,0],[0,-1,0,-1,1,0],[0,-1,0,-1,-1,0],[0,-1,0,1,-1,0],[0,-1,0,1,1,0],[0,-1,0,-1,1,0],[0,-1,0,1,-1,0]]},{\"array-bounds\":70,\"color-normalize\":125,\"flatten-vertex-data\":244,\"object-assign\":499,\"pick-by-alias\":511,\"to-float32\":577,\"update-diff\":599}],535:[function(t,e,n){\"use strict\";var r=t(\"color-normalize\"),i=t(\"array-bounds\"),a=t(\"object-assign\"),o=t(\"glslify\"),s=t(\"pick-by-alias\"),l=t(\"flatten-vertex-data\"),c=t(\"earcut\"),u=t(\"array-normalize\"),h=t(\"to-float32\"),d=h.float32,f=h.fract32,p=t(\"es6-weak-map\"),m=t(\"parse-rect\");function g(t,e){if(!(this instanceof g))return new g(t,e);if(\"function\"==typeof t?(e||(e={}),e.regl=t):e=t,e.length&&(e.positions=e),!(t=e.regl).hasExtension(\"ANGLE_instanced_arrays\"))throw Error(\"regl-error2d: `ANGLE_instanced_arrays` extension should be enabled\");this.gl=t._gl,this.regl=t,this.passes=[],this.shaders=g.shaders.has(t)?g.shaders.get(t):g.shaders.set(t,g.createShaders(t)).get(t),this.update(e)}e.exports=g,g.dashMult=2,g.maxPatternLength=256,g.precisionThreshold=3e6,g.maxPoints=1e4,g.maxLines=2048,g.shaders=new p,g.createShaders=function(t){var e,n=t.buffer({usage:\"static\",type:\"float\",data:[0,1,0,0,1,1,1,0]}),r={primitive:\"triangle strip\",instances:t.prop(\"count\"),count:4,offset:0,uniforms:{miterMode:function(t,e){return\"round\"===e.join?2:1},miterLimit:t.prop(\"miterLimit\"),scale:t.prop(\"scale\"),scaleFract:t.prop(\"scaleFract\"),translateFract:t.prop(\"translateFract\"),translate:t.prop(\"translate\"),thickness:t.prop(\"thickness\"),dashPattern:t.prop(\"dashTexture\"),opacity:t.prop(\"opacity\"),pixelRatio:t.context(\"pixelRatio\"),id:t.prop(\"id\"),dashSize:t.prop(\"dashLength\"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]},depth:t.prop(\"depth\")},blend:{enable:!0,color:[0,0,0,0],equation:{rgb:\"add\",alpha:\"add\"},func:{srcRGB:\"src alpha\",dstRGB:\"one minus src alpha\",srcAlpha:\"one minus dst alpha\",dstAlpha:\"one\"}},depth:{enable:function(t,e){return!e.overlay}},stencil:{enable:!1},scissor:{enable:!0,box:t.prop(\"viewport\")},viewport:t.prop(\"viewport\")},i=t(a({vert:o([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec2 aCoord, bCoord, aCoordFract, bCoordFract;\\nattribute vec4 color;\\nattribute float lineEnd, lineTop;\\n\\nuniform vec2 scale, scaleFract, translate, translateFract;\\nuniform float thickness, pixelRatio, id, depth;\\nuniform vec4 viewport;\\n\\nvarying vec4 fragColor;\\nvarying vec2 tangent;\\n\\nvec2 project(vec2 position, vec2 positionFract, vec2 scale, vec2 scaleFract, vec2 translate, vec2 translateFract) {\\n\\t// the order is important\\n\\treturn position * scale + translate\\n       + positionFract * scale + translateFract\\n       + position * scaleFract\\n       + positionFract * scaleFract;\\n}\\n\\nvoid main() {\\n\\tfloat lineStart = 1. - lineEnd;\\n\\tfloat lineOffset = lineTop * 2. - 1.;\\n\\n\\tvec2 diff = (bCoord + bCoordFract - aCoord - aCoordFract);\\n\\ttangent = normalize(diff * scale * viewport.zw);\\n\\tvec2 normal = vec2(-tangent.y, tangent.x);\\n\\n\\tvec2 position = project(aCoord, aCoordFract, scale, scaleFract, translate, translateFract) * lineStart\\n\\t\\t+ project(bCoord, bCoordFract, scale, scaleFract, translate, translateFract) * lineEnd\\n\\n\\t\\t+ thickness * normal * .5 * lineOffset / viewport.zw;\\n\\n\\tgl_Position = vec4(position * 2.0 - 1.0, depth, 1);\\n\\n\\tfragColor = color / 255.;\\n}\\n\"]),frag:o([\"precision highp float;\\n#define GLSLIFY 1\\n\\nuniform sampler2D dashPattern;\\n\\nuniform float dashSize, pixelRatio, thickness, opacity, id;\\n\\nvarying vec4 fragColor;\\nvarying vec2 tangent;\\n\\nvoid main() {\\n\\tfloat alpha = 1.;\\n\\n\\tfloat t = fract(dot(tangent, gl_FragCoord.xy) / dashSize) * .5 + .25;\\n\\tfloat dash = texture2D(dashPattern, vec2(t, .5)).r;\\n\\n\\tgl_FragColor = fragColor;\\n\\tgl_FragColor.a *= alpha * opacity * dash;\\n}\\n\"]),attributes:{lineEnd:{buffer:n,divisor:0,stride:8,offset:0},lineTop:{buffer:n,divisor:0,stride:8,offset:4},aCoord:{buffer:t.prop(\"positionBuffer\"),stride:8,offset:8,divisor:1},bCoord:{buffer:t.prop(\"positionBuffer\"),stride:8,offset:16,divisor:1},aCoordFract:{buffer:t.prop(\"positionFractBuffer\"),stride:8,offset:8,divisor:1},bCoordFract:{buffer:t.prop(\"positionFractBuffer\"),stride:8,offset:16,divisor:1},color:{buffer:t.prop(\"colorBuffer\"),stride:4,offset:0,divisor:1}}},r));try{e=t(a({cull:{enable:!0,face:\"back\"},vert:o([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec2 aCoord, bCoord, nextCoord, prevCoord;\\nattribute vec4 aColor, bColor;\\nattribute float lineEnd, lineTop;\\n\\nuniform vec2 scale, translate;\\nuniform float thickness, pixelRatio, id, depth;\\nuniform vec4 viewport;\\nuniform float miterLimit, miterMode;\\n\\nvarying vec4 fragColor;\\nvarying vec4 startCutoff, endCutoff;\\nvarying vec2 tangent;\\nvarying vec2 startCoord, endCoord;\\nvarying float enableStartMiter, enableEndMiter;\\n\\nconst float REVERSE_THRESHOLD = -.875;\\nconst float MIN_DIFF = 1e-6;\\n\\n// TODO: possible optimizations: avoid overcalculating all for vertices and calc just one instead\\n// TODO: precalculate dot products, normalize things beforehead etc.\\n// TODO: refactor to rectangular algorithm\\n\\nfloat distToLine(vec2 p, vec2 a, vec2 b) {\\n\\tvec2 diff = b - a;\\n\\tvec2 perp = normalize(vec2(-diff.y, diff.x));\\n\\treturn dot(p - a, perp);\\n}\\n\\nbool isNaN( float val ){\\n  return ( val < 0.0 || 0.0 < val || val == 0.0 ) ? false : true;\\n}\\n\\nvoid main() {\\n\\tvec2 aCoord = aCoord, bCoord = bCoord, prevCoord = prevCoord, nextCoord = nextCoord;\\n\\n  vec2 adjustedScale;\\n  adjustedScale.x = (abs(scale.x) < MIN_DIFF) ? MIN_DIFF : scale.x;\\n  adjustedScale.y = (abs(scale.y) < MIN_DIFF) ? MIN_DIFF : scale.y;\\n\\n  vec2 scaleRatio = adjustedScale * viewport.zw;\\n\\tvec2 normalWidth = thickness / scaleRatio;\\n\\n\\tfloat lineStart = 1. - lineEnd;\\n\\tfloat lineBot = 1. - lineTop;\\n\\n\\tfragColor = (lineStart * aColor + lineEnd * bColor) / 255.;\\n\\n\\tif (isNaN(aCoord.x) || isNaN(aCoord.y) || isNaN(bCoord.x) || isNaN(bCoord.y)) return;\\n\\n\\tif (aCoord == prevCoord) prevCoord = aCoord + normalize(bCoord - aCoord);\\n\\tif (bCoord == nextCoord) nextCoord = bCoord - normalize(bCoord - aCoord);\\n\\n\\tvec2 prevDiff = aCoord - prevCoord;\\n\\tvec2 currDiff = bCoord - aCoord;\\n\\tvec2 nextDiff = nextCoord - bCoord;\\n\\n\\tvec2 prevTangent = normalize(prevDiff * scaleRatio);\\n\\tvec2 currTangent = normalize(currDiff * scaleRatio);\\n\\tvec2 nextTangent = normalize(nextDiff * scaleRatio);\\n\\n\\tvec2 prevNormal = vec2(-prevTangent.y, prevTangent.x);\\n\\tvec2 currNormal = vec2(-currTangent.y, currTangent.x);\\n\\tvec2 nextNormal = vec2(-nextTangent.y, nextTangent.x);\\n\\n\\tvec2 startJoinDirection = normalize(prevTangent - currTangent);\\n\\tvec2 endJoinDirection = normalize(currTangent - nextTangent);\\n\\n\\t// collapsed/unidirectional segment cases\\n\\t// FIXME: there should be more elegant solution\\n\\tvec2 prevTanDiff = abs(prevTangent - currTangent);\\n\\tvec2 nextTanDiff = abs(nextTangent - currTangent);\\n\\tif (max(prevTanDiff.x, prevTanDiff.y) < MIN_DIFF) {\\n\\t\\tstartJoinDirection = currNormal;\\n\\t}\\n\\tif (max(nextTanDiff.x, nextTanDiff.y) < MIN_DIFF) {\\n\\t\\tendJoinDirection = currNormal;\\n\\t}\\n\\tif (aCoord == bCoord) {\\n\\t\\tendJoinDirection = startJoinDirection;\\n\\t\\tcurrNormal = prevNormal;\\n\\t\\tcurrTangent = prevTangent;\\n\\t}\\n\\n\\ttangent = currTangent;\\n\\n\\t//calculate join shifts relative to normals\\n\\tfloat startJoinShift = dot(currNormal, startJoinDirection);\\n\\tfloat endJoinShift = dot(currNormal, endJoinDirection);\\n\\n\\tfloat startMiterRatio = abs(1. / startJoinShift);\\n\\tfloat endMiterRatio = abs(1. / endJoinShift);\\n\\n\\tvec2 startJoin = startJoinDirection * startMiterRatio;\\n\\tvec2 endJoin = endJoinDirection * endMiterRatio;\\n\\n\\tvec2 startTopJoin, startBotJoin, endTopJoin, endBotJoin;\\n\\tstartTopJoin = sign(startJoinShift) * startJoin * .5;\\n\\tstartBotJoin = -startTopJoin;\\n\\n\\tendTopJoin = sign(endJoinShift) * endJoin * .5;\\n\\tendBotJoin = -endTopJoin;\\n\\n\\tvec2 aTopCoord = aCoord + normalWidth * startTopJoin;\\n\\tvec2 bTopCoord = bCoord + normalWidth * endTopJoin;\\n\\tvec2 aBotCoord = aCoord + normalWidth * startBotJoin;\\n\\tvec2 bBotCoord = bCoord + normalWidth * endBotJoin;\\n\\n\\t//miter anti-clipping\\n\\tfloat baClipping = distToLine(bCoord, aCoord, aBotCoord) / dot(normalize(normalWidth * endBotJoin), normalize(normalWidth.yx * vec2(-startBotJoin.y, startBotJoin.x)));\\n\\tfloat abClipping = distToLine(aCoord, bCoord, bTopCoord) / dot(normalize(normalWidth * startBotJoin), normalize(normalWidth.yx * vec2(-endBotJoin.y, endBotJoin.x)));\\n\\n\\t//prevent close to reverse direction switch\\n\\tbool prevReverse = dot(currTangent, prevTangent) <= REVERSE_THRESHOLD && abs(dot(currTangent, prevNormal)) * min(length(prevDiff), length(currDiff)) <  length(normalWidth * currNormal);\\n\\tbool nextReverse = dot(currTangent, nextTangent) <= REVERSE_THRESHOLD && abs(dot(currTangent, nextNormal)) * min(length(nextDiff), length(currDiff)) <  length(normalWidth * currNormal);\\n\\n\\tif (prevReverse) {\\n\\t\\t//make join rectangular\\n\\t\\tvec2 miterShift = normalWidth * startJoinDirection * miterLimit * .5;\\n\\t\\tfloat normalAdjust = 1. - min(miterLimit / startMiterRatio, 1.);\\n\\t\\taBotCoord = aCoord + miterShift - normalAdjust * normalWidth * currNormal * .5;\\n\\t\\taTopCoord = aCoord + miterShift + normalAdjust * normalWidth * currNormal * .5;\\n\\t}\\n\\telse if (!nextReverse && baClipping > 0. && baClipping < length(normalWidth * endBotJoin)) {\\n\\t\\t//handle miter clipping\\n\\t\\tbTopCoord -= normalWidth * endTopJoin;\\n\\t\\tbTopCoord += normalize(endTopJoin * normalWidth) * baClipping;\\n\\t}\\n\\n\\tif (nextReverse) {\\n\\t\\t//make join rectangular\\n\\t\\tvec2 miterShift = normalWidth * endJoinDirection * miterLimit * .5;\\n\\t\\tfloat normalAdjust = 1. - min(miterLimit / endMiterRatio, 1.);\\n\\t\\tbBotCoord = bCoord + miterShift - normalAdjust * normalWidth * currNormal * .5;\\n\\t\\tbTopCoord = bCoord + miterShift + normalAdjust * normalWidth * currNormal * .5;\\n\\t}\\n\\telse if (!prevReverse && abClipping > 0. && abClipping < length(normalWidth * startBotJoin)) {\\n\\t\\t//handle miter clipping\\n\\t\\taBotCoord -= normalWidth * startBotJoin;\\n\\t\\taBotCoord += normalize(startBotJoin * normalWidth) * abClipping;\\n\\t}\\n\\n\\tvec2 aTopPosition = (aTopCoord) * adjustedScale + translate;\\n\\tvec2 aBotPosition = (aBotCoord) * adjustedScale + translate;\\n\\n\\tvec2 bTopPosition = (bTopCoord) * adjustedScale + translate;\\n\\tvec2 bBotPosition = (bBotCoord) * adjustedScale + translate;\\n\\n\\t//position is normalized 0..1 coord on the screen\\n\\tvec2 position = (aTopPosition * lineTop + aBotPosition * lineBot) * lineStart + (bTopPosition * lineTop + bBotPosition * lineBot) * lineEnd;\\n\\n\\tstartCoord = aCoord * scaleRatio + translate * viewport.zw + viewport.xy;\\n\\tendCoord = bCoord * scaleRatio + translate * viewport.zw + viewport.xy;\\n\\n\\tgl_Position = vec4(position  * 2.0 - 1.0, depth, 1);\\n\\n\\tenableStartMiter = step(dot(currTangent, prevTangent), .5);\\n\\tenableEndMiter = step(dot(currTangent, nextTangent), .5);\\n\\n\\t//bevel miter cutoffs\\n\\tif (miterMode == 1.) {\\n\\t\\tif (enableStartMiter == 1.) {\\n\\t\\t\\tvec2 startMiterWidth = vec2(startJoinDirection) * thickness * miterLimit * .5;\\n\\t\\t\\tstartCutoff = vec4(aCoord, aCoord);\\n\\t\\t\\tstartCutoff.zw += vec2(-startJoinDirection.y, startJoinDirection.x) / scaleRatio;\\n\\t\\t\\tstartCutoff = startCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\\n\\t\\t\\tstartCutoff += viewport.xyxy;\\n\\t\\t\\tstartCutoff += startMiterWidth.xyxy;\\n\\t\\t}\\n\\n\\t\\tif (enableEndMiter == 1.) {\\n\\t\\t\\tvec2 endMiterWidth = vec2(endJoinDirection) * thickness * miterLimit * .5;\\n\\t\\t\\tendCutoff = vec4(bCoord, bCoord);\\n\\t\\t\\tendCutoff.zw += vec2(-endJoinDirection.y, endJoinDirection.x)  / scaleRatio;\\n\\t\\t\\tendCutoff = endCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\\n\\t\\t\\tendCutoff += viewport.xyxy;\\n\\t\\t\\tendCutoff += endMiterWidth.xyxy;\\n\\t\\t}\\n\\t}\\n\\n\\t//round miter cutoffs\\n\\telse if (miterMode == 2.) {\\n\\t\\tif (enableStartMiter == 1.) {\\n\\t\\t\\tvec2 startMiterWidth = vec2(startJoinDirection) * thickness * abs(dot(startJoinDirection, currNormal)) * .5;\\n\\t\\t\\tstartCutoff = vec4(aCoord, aCoord);\\n\\t\\t\\tstartCutoff.zw += vec2(-startJoinDirection.y, startJoinDirection.x) / scaleRatio;\\n\\t\\t\\tstartCutoff = startCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\\n\\t\\t\\tstartCutoff += viewport.xyxy;\\n\\t\\t\\tstartCutoff += startMiterWidth.xyxy;\\n\\t\\t}\\n\\n\\t\\tif (enableEndMiter == 1.) {\\n\\t\\t\\tvec2 endMiterWidth = vec2(endJoinDirection) * thickness * abs(dot(endJoinDirection, currNormal)) * .5;\\n\\t\\t\\tendCutoff = vec4(bCoord, bCoord);\\n\\t\\t\\tendCutoff.zw += vec2(-endJoinDirection.y, endJoinDirection.x)  / scaleRatio;\\n\\t\\t\\tendCutoff = endCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\\n\\t\\t\\tendCutoff += viewport.xyxy;\\n\\t\\t\\tendCutoff += endMiterWidth.xyxy;\\n\\t\\t}\\n\\t}\\n}\\n\"]),frag:o([\"precision highp float;\\n#define GLSLIFY 1\\n\\nuniform sampler2D dashPattern;\\nuniform float dashSize, pixelRatio, thickness, opacity, id, miterMode;\\n\\nvarying vec4 fragColor;\\nvarying vec2 tangent;\\nvarying vec4 startCutoff, endCutoff;\\nvarying vec2 startCoord, endCoord;\\nvarying float enableStartMiter, enableEndMiter;\\n\\nfloat distToLine(vec2 p, vec2 a, vec2 b) {\\n\\tvec2 diff = b - a;\\n\\tvec2 perp = normalize(vec2(-diff.y, diff.x));\\n\\treturn dot(p - a, perp);\\n}\\n\\nvoid main() {\\n\\tfloat alpha = 1., distToStart, distToEnd;\\n\\tfloat cutoff = thickness * .5;\\n\\n\\t//bevel miter\\n\\tif (miterMode == 1.) {\\n\\t\\tif (enableStartMiter == 1.) {\\n\\t\\t\\tdistToStart = distToLine(gl_FragCoord.xy, startCutoff.xy, startCutoff.zw);\\n\\t\\t\\tif (distToStart < -1.) {\\n\\t\\t\\t\\tdiscard;\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t\\talpha *= min(max(distToStart + 1., 0.), 1.);\\n\\t\\t}\\n\\n\\t\\tif (enableEndMiter == 1.) {\\n\\t\\t\\tdistToEnd = distToLine(gl_FragCoord.xy, endCutoff.xy, endCutoff.zw);\\n\\t\\t\\tif (distToEnd < -1.) {\\n\\t\\t\\t\\tdiscard;\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t\\talpha *= min(max(distToEnd + 1., 0.), 1.);\\n\\t\\t}\\n\\t}\\n\\n\\t// round miter\\n\\telse if (miterMode == 2.) {\\n\\t\\tif (enableStartMiter == 1.) {\\n\\t\\t\\tdistToStart = distToLine(gl_FragCoord.xy, startCutoff.xy, startCutoff.zw);\\n\\t\\t\\tif (distToStart < 0.) {\\n\\t\\t\\t\\tfloat radius = length(gl_FragCoord.xy - startCoord);\\n\\n\\t\\t\\t\\tif(radius > cutoff + .5) {\\n\\t\\t\\t\\t\\tdiscard;\\n\\t\\t\\t\\t\\treturn;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\talpha -= smoothstep(cutoff - .5, cutoff + .5, radius);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tif (enableEndMiter == 1.) {\\n\\t\\t\\tdistToEnd = distToLine(gl_FragCoord.xy, endCutoff.xy, endCutoff.zw);\\n\\t\\t\\tif (distToEnd < 0.) {\\n\\t\\t\\t\\tfloat radius = length(gl_FragCoord.xy - endCoord);\\n\\n\\t\\t\\t\\tif(radius > cutoff + .5) {\\n\\t\\t\\t\\t\\tdiscard;\\n\\t\\t\\t\\t\\treturn;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\talpha -= smoothstep(cutoff - .5, cutoff + .5, radius);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\tfloat t = fract(dot(tangent, gl_FragCoord.xy) / dashSize) * .5 + .25;\\n\\tfloat dash = texture2D(dashPattern, vec2(t, .5)).r;\\n\\n\\tgl_FragColor = fragColor;\\n\\tgl_FragColor.a *= alpha * opacity * dash;\\n}\\n\"]),attributes:{lineEnd:{buffer:n,divisor:0,stride:8,offset:0},lineTop:{buffer:n,divisor:0,stride:8,offset:4},aColor:{buffer:t.prop(\"colorBuffer\"),stride:4,offset:0,divisor:1},bColor:{buffer:t.prop(\"colorBuffer\"),stride:4,offset:4,divisor:1},prevCoord:{buffer:t.prop(\"positionBuffer\"),stride:8,offset:0,divisor:1},aCoord:{buffer:t.prop(\"positionBuffer\"),stride:8,offset:8,divisor:1},bCoord:{buffer:t.prop(\"positionBuffer\"),stride:8,offset:16,divisor:1},nextCoord:{buffer:t.prop(\"positionBuffer\"),stride:8,offset:24,divisor:1}}},r))}catch(s){e=i}return{fill:t({primitive:\"triangle\",elements:function(t,e){return e.triangles},offset:0,vert:o([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec2 position, positionFract;\\n\\nuniform vec4 color;\\nuniform vec2 scale, scaleFract, translate, translateFract;\\nuniform float pixelRatio, id;\\nuniform vec4 viewport;\\nuniform float opacity;\\n\\nvarying vec4 fragColor;\\n\\nconst float MAX_LINES = 256.;\\n\\nvoid main() {\\n\\tfloat depth = (MAX_LINES - 4. - id) / (MAX_LINES);\\n\\n\\tvec2 position = position * scale + translate\\n       + positionFract * scale + translateFract\\n       + position * scaleFract\\n       + positionFract * scaleFract;\\n\\n\\tgl_Position = vec4(position * 2.0 - 1.0, depth, 1);\\n\\n\\tfragColor = color / 255.;\\n\\tfragColor.a *= opacity;\\n}\\n\"]),frag:o([\"precision highp float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragColor;\\n\\nvoid main() {\\n\\tgl_FragColor = fragColor;\\n}\\n\"]),uniforms:{scale:t.prop(\"scale\"),color:t.prop(\"fill\"),scaleFract:t.prop(\"scaleFract\"),translateFract:t.prop(\"translateFract\"),translate:t.prop(\"translate\"),opacity:t.prop(\"opacity\"),pixelRatio:t.context(\"pixelRatio\"),id:t.prop(\"id\"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]}},attributes:{position:{buffer:t.prop(\"positionBuffer\"),stride:8,offset:8},positionFract:{buffer:t.prop(\"positionFractBuffer\"),stride:8,offset:8}},blend:r.blend,depth:{enable:!1},scissor:r.scissor,stencil:r.stencil,viewport:r.viewport}),rect:i,miter:e}},g.defaults={dashes:null,join:\"miter\",miterLimit:1,thickness:10,cap:\"square\",color:\"black\",opacity:1,overlay:!1,viewport:null,range:null,close:!1,fill:null},g.prototype.render=function(){for(var t,e=[],n=arguments.length;n--;)e[n]=arguments[n];e.length&&(t=this).update.apply(t,e),this.draw()},g.prototype.draw=function(){for(var t=this,e=[],n=arguments.length;n--;)e[n]=arguments[n];return(e.length?e:this.passes).forEach((function(e,n){var r;if(e&&Array.isArray(e))return(r=t).draw.apply(r,e);\"number\"==typeof e&&(e=t.passes[e]),e&&e.count>1&&e.opacity&&(t.regl._refresh(),e.fill&&e.triangles&&e.triangles.length>2&&t.shaders.fill(e),e.thickness&&(e.scale[0]*e.viewport.width>g.precisionThreshold||e.scale[1]*e.viewport.height>g.precisionThreshold||\"rect\"===e.join||!e.join&&(e.thickness<=2||e.count>=g.maxPoints)?t.shaders.rect(e):t.shaders.miter(e)))})),this},g.prototype.update=function(t){var e=this;if(t){null!=t.length?\"number\"==typeof t[0]&&(t=[{positions:t}]):Array.isArray(t)||(t=[t]);var n=this.regl,o=this.gl;if(t.forEach((function(t,h){var p=e.passes[h];if(void 0!==t)if(null!==t){if(\"number\"==typeof t[0]&&(t={positions:t}),t=s(t,{positions:\"positions points data coords\",thickness:\"thickness lineWidth lineWidths line-width linewidth width stroke-width strokewidth strokeWidth\",join:\"lineJoin linejoin join type mode\",miterLimit:\"miterlimit miterLimit\",dashes:\"dash dashes dasharray dash-array dashArray\",color:\"color colour stroke colors colours stroke-color strokeColor\",fill:\"fill fill-color fillColor\",opacity:\"alpha opacity\",overlay:\"overlay crease overlap intersect\",close:\"closed close closed-path closePath\",range:\"range dataBox\",viewport:\"viewport viewBox\",hole:\"holes hole hollow\"}),p||(e.passes[h]=p={id:h,scale:null,scaleFract:null,translate:null,translateFract:null,count:0,hole:[],depth:0,dashLength:1,dashTexture:n.texture({channels:1,data:new Uint8Array([255]),width:1,height:1,mag:\"linear\",min:\"linear\"}),colorBuffer:n.buffer({usage:\"dynamic\",type:\"uint8\",data:new Uint8Array}),positionBuffer:n.buffer({usage:\"dynamic\",type:\"float\",data:new Uint8Array}),positionFractBuffer:n.buffer({usage:\"dynamic\",type:\"float\",data:new Uint8Array})},t=a({},g.defaults,t)),null!=t.thickness&&(p.thickness=parseFloat(t.thickness)),null!=t.opacity&&(p.opacity=parseFloat(t.opacity)),null!=t.miterLimit&&(p.miterLimit=parseFloat(t.miterLimit)),null!=t.overlay&&(p.overlay=!!t.overlay,h<g.maxLines&&(p.depth=2*(g.maxLines-1-h%g.maxLines)/g.maxLines-1)),null!=t.join&&(p.join=t.join),null!=t.hole&&(p.hole=t.hole),null!=t.fill&&(p.fill=t.fill?r(t.fill,\"uint8\"):null),null!=t.viewport&&(p.viewport=m(t.viewport)),p.viewport||(p.viewport=m([o.drawingBufferWidth,o.drawingBufferHeight])),null!=t.close&&(p.close=t.close),null===t.positions&&(t.positions=[]),t.positions){var y,v;if(t.positions.x&&t.positions.y){var _=t.positions.x,b=t.positions.y;v=p.count=Math.max(_.length,b.length),y=new Float64Array(2*v);for(var x=0;x<v;x++)y[2*x]=_[x],y[2*x+1]=b[x]}else y=l(t.positions,\"float64\"),v=p.count=Math.floor(y.length/2);var w=p.bounds=i(y,2);if(p.fill){for(var k=[],M={},T=0,S=0,A=0,L=p.count;S<L;S++){var C=y[2*S],E=y[2*S+1];isNaN(C)||isNaN(E)||null==C||null==E?(C=y[2*T],E=y[2*T+1],M[S]=T):T=S,k[A++]=C,k[A++]=E}for(var O=c(k,p.hole||[]),D=0,I=O.length;D<I;D++)null!=M[O[D]]&&(O[D]=M[O[D]]);p.triangles=O}var P=new Float64Array(y);u(P,2,w);var R=new Float64Array(2*v+6);p.close?y[0]===y[2*v-2]&&y[1]===y[2*v-1]?(R[0]=P[2*v-4],R[1]=P[2*v-3]):(R[0]=P[2*v-2],R[1]=P[2*v-1]):(R[0]=P[0],R[1]=P[1]),R.set(P,2),p.close?y[0]===y[2*v-2]&&y[1]===y[2*v-1]?(R[2*v+2]=P[2],R[2*v+3]=P[3],p.count-=1):(R[2*v+2]=P[0],R[2*v+3]=P[1],R[2*v+4]=P[2],R[2*v+5]=P[3]):(R[2*v+2]=P[2*v-2],R[2*v+3]=P[2*v-1],R[2*v+4]=P[2*v-2],R[2*v+5]=P[2*v-1]),p.positionBuffer(d(R)),p.positionFractBuffer(f(R))}if(t.range?p.range=t.range:p.range||(p.range=p.bounds),(t.range||t.positions)&&p.count){var z=p.bounds,j=p.range[2]-p.range[0],F=p.range[3]-p.range[1];p.scale=[(z[2]-z[0])/j,(z[3]-z[1])/F],p.translate=[-p.range[0]/j+z[0]/j||0,-p.range[1]/F+z[1]/F||0],p.scaleFract=f(p.scale),p.translateFract=f(p.translate)}if(t.dashes){var N,B=0;if(!t.dashes||t.dashes.length<2)B=1,N=new Uint8Array([255,255,255,255,255,255,255,255]);else{B=0;for(var Y=0;Y<t.dashes.length;++Y)B+=t.dashes[Y];N=new Uint8Array(B*g.dashMult);for(var H=0,V=255,U=0;U<2;U++)for(var W=0;W<t.dashes.length;++W){for(var q=0,G=t.dashes[W]*g.dashMult*.5;q<G;++q)N[H++]=V;V^=255}}p.dashLength=B,p.dashTexture({channels:1,data:N,width:N.length,height:1,mag:\"linear\",min:\"linear\"},0,0)}if(t.color){var X=p.count,Z=t.color;Z||(Z=\"transparent\");var J=new Uint8Array(4*X+4);if(Array.isArray(Z)&&\"number\"!=typeof Z[0]){for(var K=0;K<X;K++){var $=r(Z[K],\"uint8\");J.set($,4*K)}J.set(r(Z[0],\"uint8\"),4*X)}else for(var Q=r(Z,\"uint8\"),tt=0;tt<X+1;tt++)J.set(Q,4*tt);p.colorBuffer({usage:\"dynamic\",type:\"uint8\",data:J})}}else e.passes[h]=null})),t.length<this.passes.length){for(var h=t.length;h<this.passes.length;h++){var p=this.passes[h];p&&(p.colorBuffer.destroy(),p.positionBuffer.destroy(),p.dashTexture.destroy())}this.passes.length=t.length}for(var y=[],v=0;v<this.passes.length;v++)null!==this.passes[v]&&y.push(this.passes[v]);return this.passes=y,this}},g.prototype.destroy=function(){return this.passes.forEach((function(t){t.colorBuffer.destroy(),t.positionBuffer.destroy(),t.dashTexture.destroy()})),this.passes.length=0,this}},{\"array-bounds\":70,\"array-normalize\":71,\"color-normalize\":125,earcut:177,\"es6-weak-map\":233,\"flatten-vertex-data\":244,glslify:536,\"object-assign\":499,\"parse-rect\":504,\"pick-by-alias\":511,\"to-float32\":577}],536:[function(t,e,n){arguments[4][257][0].apply(n,arguments)},{dup:257}],537:[function(t,e,n){\"use strict\";function r(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(t)){var n=[],r=!0,i=!1,a=void 0;try{for(var o,s=t[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);r=!0);}catch(l){i=!0,a=l}finally{try{r||null==s.return||s.return()}finally{if(i)throw a}}return n}}(t,e)||i(t,e)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function i(t,e){if(t){if(\"string\"==typeof t)return a(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===n&&t.constructor&&(n=t.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(t):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(t,e):void 0}}function a(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var o=t(\"color-normalize\"),s=t(\"array-bounds\"),l=t(\"color-id\"),c=t(\"@plotly/point-cluster\"),u=t(\"object-assign\"),h=t(\"glslify\"),d=t(\"pick-by-alias\"),f=t(\"update-diff\"),p=t(\"flatten-vertex-data\"),m=t(\"is-iexplorer\"),g=t(\"to-float32\"),y=t(\"parse-rect\"),v=_;function _(t,e){var n=this;if(!(this instanceof _))return new _(t,e);\"function\"==typeof t?(e||(e={}),e.regl=t):(e=t,t=null),e&&e.length&&(e.positions=e);var r,i=(t=e.regl)._gl,a=[];this.tooManyColors=m,r=t.texture({data:new Uint8Array(1020),width:255,height:1,type:\"uint8\",format:\"rgba\",wrapS:\"clamp\",wrapT:\"clamp\",mag:\"nearest\",min:\"nearest\"}),u(this,{regl:t,gl:i,groups:[],markerCache:[null],markerTextures:[null],palette:a,paletteIds:{},paletteTexture:r,maxColors:255,maxSize:100,canvas:i.canvas}),this.update(e);var o={uniforms:{constPointSize:!!e.constPointSize,pixelRatio:t.context(\"pixelRatio\"),palette:r,paletteSize:function(t,e){return[n.tooManyColors?0:255,r.height]},scale:t.prop(\"scale\"),scaleFract:t.prop(\"scaleFract\"),translate:t.prop(\"translate\"),translateFract:t.prop(\"translateFract\"),opacity:t.prop(\"opacity\"),marker:t.prop(\"markerTexture\")},attributes:{x:function(t,e){return e.xAttr||{buffer:e.positionBuffer,stride:8,offset:0}},y:function(t,e){return e.yAttr||{buffer:e.positionBuffer,stride:8,offset:4}},xFract:function(t,e){return e.xAttr?{constant:[0,0]}:{buffer:e.positionFractBuffer,stride:8,offset:0}},yFract:function(t,e){return e.yAttr?{constant:[0,0]}:{buffer:e.positionFractBuffer,stride:8,offset:4}},size:function(t,e){return e.size.length?{buffer:e.sizeBuffer,stride:2,offset:0}:{constant:[Math.round(255*e.size/n.maxSize)]}},borderSize:function(t,e){return e.borderSize.length?{buffer:e.sizeBuffer,stride:2,offset:1}:{constant:[Math.round(255*e.borderSize/n.maxSize)]}},colorId:function(t,e){return e.color.length?{buffer:e.colorBuffer,stride:n.tooManyColors?8:4,offset:0}:{constant:n.tooManyColors?a.slice(4*e.color,4*e.color+4):[e.color]}},borderColorId:function(t,e){return e.borderColor.length?{buffer:e.colorBuffer,stride:n.tooManyColors?8:4,offset:n.tooManyColors?4:2}:{constant:n.tooManyColors?a.slice(4*e.borderColor,4*e.borderColor+4):[e.borderColor]}},isActive:function(t,e){return!0===e.activation?{constant:[1]}:e.activation?e.activation:{constant:[0]}}},blend:{enable:!0,color:[0,0,0,1],func:{srcRGB:\"src alpha\",dstRGB:\"one minus src alpha\",srcAlpha:\"one minus dst alpha\",dstAlpha:\"one\"}},scissor:{enable:!0,box:t.prop(\"viewport\")},viewport:t.prop(\"viewport\"),stencil:{enable:!1},depth:{enable:!1},elements:t.prop(\"elements\"),count:t.prop(\"count\"),offset:t.prop(\"offset\"),primitive:\"points\"},s=u({},o);s.frag=h([\"precision highp float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragColor, fragBorderColor;\\nvarying float fragWidth, fragBorderColorLevel, fragColorLevel;\\n\\nuniform sampler2D marker;\\nuniform float opacity;\\n\\nfloat smoothStep(float x, float y) {\\n  return 1.0 / (1.0 + exp(50.0*(x - y)));\\n}\\n\\nvoid main() {\\n  float dist = texture2D(marker, gl_PointCoord).r, delta = fragWidth;\\n\\n  // max-distance alpha\\n  if (dist < 0.003) discard;\\n\\n  // null-border case\\n  if (fragBorderColorLevel == fragColorLevel || fragBorderColor.a == 0.) {\\n    float colorAmt = smoothstep(.5 - delta, .5 + delta, dist);\\n    gl_FragColor = vec4(fragColor.rgb, colorAmt * fragColor.a * opacity);\\n  }\\n  else {\\n    float borderColorAmt = smoothstep(fragBorderColorLevel - delta, fragBorderColorLevel + delta, dist);\\n    float colorAmt = smoothstep(fragColorLevel - delta, fragColorLevel + delta, dist);\\n\\n    vec4 color = fragBorderColor;\\n    color.a *= borderColorAmt;\\n    color = mix(color, fragColor, colorAmt);\\n    color.a *= opacity;\\n\\n    gl_FragColor = color;\\n  }\\n\\n}\\n\"]),s.vert=h([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute float x, y, xFract, yFract;\\nattribute float size, borderSize;\\nattribute vec4 colorId, borderColorId;\\nattribute float isActive;\\n\\nuniform vec2 scale, scaleFract, translate, translateFract, paletteSize;\\nuniform float pixelRatio;\\nuniform bool constPointSize;\\nuniform sampler2D palette;\\n\\nconst float maxSize = 100.;\\nconst float borderLevel = .5;\\n\\nvarying vec4 fragColor, fragBorderColor;\\nvarying float fragPointSize, fragBorderRadius, fragWidth, fragBorderColorLevel, fragColorLevel;\\n\\nfloat pointSizeScale = (constPointSize) ? 2. : pixelRatio;\\n\\nbool isDirect = (paletteSize.x < 1.);\\n\\nvec4 getColor(vec4 id) {\\n  return isDirect ? id / 255. : texture2D(palette,\\n    vec2(\\n      (id.x + .5) / paletteSize.x,\\n      (id.y + .5) / paletteSize.y\\n    )\\n  );\\n}\\n\\nvoid main() {\\n  // ignore inactive points\\n  if (isActive == 0.) return;\\n\\n  vec2 position = vec2(x, y);\\n  vec2 positionFract = vec2(xFract, yFract);\\n\\n  vec4 color = getColor(colorId);\\n  vec4 borderColor = getColor(borderColorId);\\n\\n  float size = size * maxSize / 255.;\\n  float borderSize = borderSize * maxSize / 255.;\\n\\n  gl_PointSize = 2. * size * pointSizeScale;\\n  fragPointSize = size * pixelRatio;\\n\\n  vec2 pos = (position + translate) * scale\\n      + (positionFract + translateFract) * scale\\n      + (position + translate) * scaleFract\\n      + (positionFract + translateFract) * scaleFract;\\n\\n  gl_Position = vec4(pos * 2. - 1., 0., 1.);\\n\\n  fragColor = color;\\n  fragBorderColor = borderColor;\\n  fragWidth = 1. / gl_PointSize;\\n\\n  fragBorderColorLevel = clamp(borderLevel - borderLevel * borderSize / size, 0., 1.);\\n  fragColorLevel = clamp(borderLevel + (1. - borderLevel) * borderSize / size, 0., 1.);\\n}\"]),this.drawMarker=t(s);var l=u({},o);l.frag=h([\"precision highp float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragColor, fragBorderColor;\\n\\nuniform float opacity;\\nvarying float fragBorderRadius, fragWidth;\\n\\nfloat smoothStep(float edge0, float edge1, float x) {\\n\\tfloat t;\\n\\tt = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\\n\\treturn t * t * (3.0 - 2.0 * t);\\n}\\n\\nvoid main() {\\n\\tfloat radius, alpha = 1.0, delta = fragWidth;\\n\\n\\tradius = length(2.0 * gl_PointCoord.xy - 1.0);\\n\\n\\tif (radius > 1.0 + delta) {\\n\\t\\tdiscard;\\n\\t}\\n\\n\\talpha -= smoothstep(1.0 - delta, 1.0 + delta, radius);\\n\\n\\tfloat borderRadius = fragBorderRadius;\\n\\tfloat ratio = smoothstep(borderRadius - delta, borderRadius + delta, radius);\\n\\tvec4 color = mix(fragColor, fragBorderColor, ratio);\\n\\tcolor.a *= alpha * opacity;\\n\\tgl_FragColor = color;\\n}\\n\"]),l.vert=h([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute float x, y, xFract, yFract;\\nattribute float size, borderSize;\\nattribute vec4 colorId, borderColorId;\\nattribute float isActive;\\n\\nuniform vec2 scale, scaleFract, translate, translateFract;\\nuniform float pixelRatio;\\nuniform bool constPointSize;\\nuniform sampler2D palette;\\nuniform vec2 paletteSize;\\n\\nconst float maxSize = 100.;\\n\\nvarying vec4 fragColor, fragBorderColor;\\nvarying float fragBorderRadius, fragWidth;\\n\\nfloat pointSizeScale = (constPointSize) ? 2. : pixelRatio;\\n\\nbool isDirect = (paletteSize.x < 1.);\\n\\nvec4 getColor(vec4 id) {\\n  return isDirect ? id / 255. : texture2D(palette,\\n    vec2(\\n      (id.x + .5) / paletteSize.x,\\n      (id.y + .5) / paletteSize.y\\n    )\\n  );\\n}\\n\\nvoid main() {\\n  // ignore inactive points\\n  if (isActive == 0.) return;\\n\\n  vec2 position = vec2(x, y);\\n  vec2 positionFract = vec2(xFract, yFract);\\n\\n  vec4 color = getColor(colorId);\\n  vec4 borderColor = getColor(borderColorId);\\n\\n  float size = size * maxSize / 255.;\\n  float borderSize = borderSize * maxSize / 255.;\\n\\n  gl_PointSize = (size + borderSize) * pointSizeScale;\\n\\n  vec2 pos = (position + translate) * scale\\n      + (positionFract + translateFract) * scale\\n      + (position + translate) * scaleFract\\n      + (positionFract + translateFract) * scaleFract;\\n\\n  gl_Position = vec4(pos * 2. - 1., 0., 1.);\\n\\n  fragBorderRadius = 1. - 2. * borderSize / (size + borderSize);\\n  fragColor = color;\\n  fragBorderColor = borderColor.a == 0. || borderSize == 0. ? vec4(color.rgb, 0.) : borderColor;\\n  fragWidth = 1. / gl_PointSize;\\n}\\n\"]),m&&(l.frag=l.frag.replace(\"smoothstep\",\"smoothStep\"),s.frag=s.frag.replace(\"smoothstep\",\"smoothStep\")),this.drawCircle=t(l)}_.defaults={color:\"black\",borderColor:\"transparent\",borderSize:0,size:12,opacity:1,marker:void 0,viewport:null,range:null,pixelSize:null,count:0,offset:0,bounds:null,positions:[],snap:1e4},_.prototype.render=function(){return arguments.length&&this.update.apply(this,arguments),this.draw(),this},_.prototype.draw=function(){for(var t=this,e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var i=this.groups;if(1===n.length&&Array.isArray(n[0])&&(null===n[0][0]||Array.isArray(n[0][0]))&&(n=n[0]),this.regl._refresh(),n.length)for(var a=0;a<n.length;a++)this.drawItem(a,n[a]);else i.forEach((function(e,n){t.drawItem(n)}));return this},_.prototype.drawItem=function(t,e){var n,r=this.groups,o=r[t];if(\"number\"==typeof e&&(t=e,o=r[e],e=null),o&&o.count&&o.opacity){o.activation[0]&&this.drawCircle(this.getMarkerDrawOptions(0,o,e));for(var s=[],l=1;l<o.activation.length;l++)o.activation[l]&&(!0===o.activation[l]||o.activation[l].data.length)&&s.push.apply(s,function(t){if(Array.isArray(t))return a(t)}(n=this.getMarkerDrawOptions(l,o,e))||function(t){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(n)||i(n)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}());s.length&&this.drawMarker(s)}},_.prototype.getMarkerDrawOptions=function(t,e,n){var i=e.range,a=e.tree,o=e.viewport,s=e.activation,l=e.selectionBuffer,c=e.count;if(!a)return n?[u({},e,{markerTexture:this.markerTextures[t],activation:s[t],count:n.length,elements:n,offset:0})]:[u({},e,{markerTexture:this.markerTextures[t],activation:s[t],offset:0})];var h=[],d=a.range(i,{lod:!0,px:[(i[2]-i[0])/o.width,(i[3]-i[1])/o.height]});if(n){for(var f=s[t].data,p=new Uint8Array(c),m=0;m<n.length;m++){var g=n[m];p[g]=f?f[g]:1}l.subdata(p)}for(var y=d.length;y--;){var v=r(d[y],2),_=v[0];h.push(u({},e,{markerTexture:this.markerTextures[t],activation:n?l:s[t],offset:_,count:v[1]-_}))}return h},_.prototype.update=function(){for(var t=this,e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];if(n.length){1===n.length&&Array.isArray(n[0])&&(n=n[0]);var i=this.groups,a=this.gl,o=this.regl,l=this.maxSize,h=this.maxColors,m=this.palette;this.groups=i=n.map((function(e,n){var r=i[n];if(void 0===e)return r;null===e?e={positions:null}:\"function\"==typeof e?e={ondraw:e}:\"number\"==typeof e[0]&&(e={positions:e}),null===(e=d(e,{positions:\"positions data points\",snap:\"snap cluster lod tree\",size:\"sizes size radius\",borderSize:\"borderSizes borderSize border-size bordersize borderWidth borderWidths border-width borderwidth stroke-width strokeWidth strokewidth outline\",color:\"colors color fill fill-color fillColor\",borderColor:\"borderColors borderColor stroke stroke-color strokeColor\",marker:\"markers marker shape\",range:\"range dataBox databox\",viewport:\"viewport viewPort viewBox viewbox\",opacity:\"opacity alpha transparency\",bounds:\"bound bounds boundaries limits\",tooManyColors:\"tooManyColors palette paletteMode optimizePalette enablePalette\"})).positions&&(e.positions=[]),null!=e.tooManyColors&&(t.tooManyColors=e.tooManyColors),r||(i[n]=r={id:n,scale:null,translate:null,scaleFract:null,translateFract:null,activation:[],selectionBuffer:o.buffer({data:new Uint8Array(0),usage:\"stream\",type:\"uint8\"}),sizeBuffer:o.buffer({data:new Uint8Array(0),usage:\"dynamic\",type:\"uint8\"}),colorBuffer:o.buffer({data:new Uint8Array(0),usage:\"dynamic\",type:\"uint8\"}),positionBuffer:o.buffer({data:new Uint8Array(0),usage:\"dynamic\",type:\"float\"}),positionFractBuffer:o.buffer({data:new Uint8Array(0),usage:\"dynamic\",type:\"float\"})},e=u({},_.defaults,e)),e.positions&&!(\"marker\"in e)&&(e.marker=r.marker,delete r.marker),e.marker&&!(\"positions\"in e)&&(e.positions=r.positions,delete r.positions);var v=0,b=0;if(f(r,e,[{snap:!0,size:function(t,e){return null==t&&(t=_.defaults.size),v+=t&&t.length?1:0,t},borderSize:function(t,e){return null==t&&(t=_.defaults.borderSize),v+=t&&t.length?1:0,t},opacity:parseFloat,color:function(e,n){return null==e&&(e=_.defaults.color),e=t.updateColor(e),b++,e},borderColor:function(e,n){return null==e&&(e=_.defaults.borderColor),e=t.updateColor(e),b++,e},bounds:function(t,e,n){return\"range\"in n||(n.range=null),t},positions:function(t,e,n){var r=e.snap,i=e.positionBuffer,a=e.positionFractBuffer,l=e.selectionBuffer;if(t.x||t.y)return e.xAttr=t.x.length?{buffer:o.buffer(t.x),offset:0,stride:4,count:t.x.length}:{buffer:t.x.buffer,offset:4*t.x.offset||0,stride:4*(t.x.stride||1),count:t.x.count},e.yAttr=t.y.length?{buffer:o.buffer(t.y),offset:0,stride:4,count:t.y.length}:{buffer:t.y.buffer,offset:4*t.y.offset||0,stride:4*(t.y.stride||1),count:t.y.count},e.count=Math.max(e.xAttr.count,e.yAttr.count),t;t=p(t,\"float64\");var u=e.count=Math.floor(t.length/2),h=e.bounds=u?s(t,2):null;if(n.range||e.range||(delete e.range,n.range=h),n.marker||e.marker||(delete e.marker,n.marker=null),r&&(!0===r||u>r)?e.tree=c(t,{bounds:h}):r&&r.length&&(e.tree=r),e.tree){var d={primitive:\"points\",usage:\"static\",data:e.tree,type:\"uint32\"};e.elements?e.elements(d):e.elements=o.elements(d)}return i({data:g.float(t),usage:\"dynamic\"}),a({data:g.fract(t),usage:\"dynamic\"}),l({data:new Uint8Array(u),type:\"uint8\",usage:\"stream\"}),t}},{marker:function(e,n,r){var i=n.activation;if(i.forEach((function(t){return t&&t.destroy&&t.destroy()})),i.length=0,e&&\"number\"!=typeof e[0]){for(var a=[],s=0,l=Math.min(e.length,n.count);s<l;s++){var c=t.addMarker(e[s]);a[c]||(a[c]=new Uint8Array(n.count)),a[c][s]=1}for(var u=0;u<a.length;u++)if(a[u]){var h={data:a[u],type:\"uint8\",usage:\"static\"};i[u]?i[u](h):i[u]=o.buffer(h),i[u].data=a[u]}}else i[t.addMarker(e)]=!0;return e},range:function(t,e,n){var r=e.bounds;if(r)return t||(t=r),e.scale=[1/(t[2]-t[0]),1/(t[3]-t[1])],e.translate=[-t[0],-t[1]],e.scaleFract=g.fract(e.scale),e.translateFract=g.fract(e.translate),t},viewport:function(t){return y(t||[a.drawingBufferWidth,a.drawingBufferHeight])}}]),v){var x=r.count,w=r.size,k=r.borderSize,M=r.sizeBuffer,T=new Uint8Array(2*x);if(w.length||k.length)for(var S=0;S<x;S++)T[2*S]=Math.round(255*(null==w[S]?w:w[S])/l),T[2*S+1]=Math.round(255*(null==k[S]?k:k[S])/l);M({data:T,usage:\"dynamic\"})}if(b){var A,L=r.count,C=r.color,E=r.borderColor,O=r.colorBuffer;if(t.tooManyColors){if(C.length||E.length){A=new Uint8Array(8*L);for(var D=0;D<L;D++){var I=C[D];A[8*D]=m[4*I],A[8*D+1]=m[4*I+1],A[8*D+2]=m[4*I+2],A[8*D+3]=m[4*I+3];var P=E[D];A[8*D+4]=m[4*P],A[8*D+5]=m[4*P+1],A[8*D+6]=m[4*P+2],A[8*D+7]=m[4*P+3]}}}else if(C.length||E.length){A=new Uint8Array(4*L+2);for(var R=0;R<L;R++)null!=C[R]&&(A[4*R]=C[R]%h,A[4*R+1]=Math.floor(C[R]/h)),null!=E[R]&&(A[4*R+2]=E[R]%h,A[4*R+3]=Math.floor(E[R]/h))}O({data:A||new Uint8Array(0),type:\"uint8\",usage:\"dynamic\"})}return r}))}},_.prototype.addMarker=function(t){var e,n=this.markerTextures,r=this.regl,i=this.markerCache,a=null==t?0:i.indexOf(t);if(a>=0)return a;if(t instanceof Uint8Array||t instanceof Uint8ClampedArray)e=t;else{e=new Uint8Array(t.length);for(var o=0,s=t.length;o<s;o++)e[o]=255*t[o]}var l=Math.floor(Math.sqrt(e.length));return a=n.length,i.push(t),n.push(r.texture({channels:1,data:e,radius:l,mag:\"linear\",min:\"linear\"})),a},_.prototype.updateColor=function(t){var e=this.paletteIds,n=this.palette,r=this.maxColors;Array.isArray(t)||(t=[t]);var i=[];if(\"number\"==typeof t[0]){var a=[];if(Array.isArray(t))for(var s=0;s<t.length;s+=4)a.push(t.slice(s,s+4));else for(var c=0;c<t.length;c+=4)a.push(t.subarray(c,c+4));t=a}for(var u=0;u<t.length;u++){var h=t[u];h=o(h,\"uint8\");var d=l(h,!1);if(null==e[d]){var f=n.length;e[d]=Math.floor(f/4),n[f]=h[0],n[f+1]=h[1],n[f+2]=h[2],n[f+3]=h[3]}i[u]=e[d]}return!this.tooManyColors&&n.length>4*r&&(this.tooManyColors=!0),this.updatePalette(n),1===i.length?i[0]:i},_.prototype.updatePalette=function(t){if(!this.tooManyColors){var e=this.maxColors,n=this.paletteTexture,r=Math.ceil(.25*t.length/e);if(r>1)for(var i=.25*(t=t.slice()).length%e;i<r*e;i++)t.push(0,0,0,0);n.height<r&&n.resize(e,r),n.subimage({width:Math.min(.25*t.length,e),height:r,data:t},0,0)}},_.prototype.destroy=function(){return this.groups.forEach((function(t){t.sizeBuffer.destroy(),t.positionBuffer.destroy(),t.positionFractBuffer.destroy(),t.colorBuffer.destroy(),t.activation.forEach((function(t){return t&&t.destroy&&t.destroy()})),t.selectionBuffer.destroy(),t.elements&&t.elements.destroy()})),this.groups.length=0,this.paletteTexture.destroy(),this.markerTextures.forEach((function(t){return t&&t.destroy&&t.destroy()})),this};var b=t(\"object-assign\");e.exports=function(t,e){var n=new v(t,e),r=n.render.bind(n);return b(r,{render:r,update:n.update.bind(n),draw:n.draw.bind(n),destroy:n.destroy.bind(n),regl:n.regl,gl:n.gl,canvas:n.gl.canvas,groups:n.groups,markers:n.markerCache,palette:n.palette}),r}},{\"@plotly/point-cluster\":57,\"array-bounds\":70,\"color-id\":123,\"color-normalize\":125,\"flatten-vertex-data\":244,glslify:538,\"is-iexplorer\":466,\"object-assign\":499,\"parse-rect\":504,\"pick-by-alias\":511,\"to-float32\":577,\"update-diff\":599}],538:[function(t,e,n){arguments[4][257][0].apply(n,arguments)},{dup:257}],539:[function(t,e,n){\"use strict\";var r=t(\"regl-scatter2d\"),i=t(\"pick-by-alias\"),a=t(\"array-bounds\"),o=t(\"raf\"),s=t(\"array-range\"),l=t(\"parse-rect\"),c=t(\"flatten-vertex-data\");function u(t,e){if(!(this instanceof u))return new u(t,e);this.traces=[],this.passes={},this.regl=t,this.scatter=r(t),this.canvas=this.scatter.canvas}function h(t,e,n){return(null!=t.id?t.id:t)<<16|(255&e)<<8|255&n}function d(t,e,n){var r,i,a,o,s=t[e],l=t[n];return s.length>2?(r=s[1],i=s[3]):s.length?(r=s[0],i=s[1]):(r=s.y,i=s.y+s.height),l.length>2?(a=l[0],o=l[2]):l.length?(a=l[0],o=l[1]):(a=l.x,o=l.x+l.width),[a,r,o,i]}function f(t){if(\"number\"==typeof t)return[t,t,t,t];if(2===t.length)return[t[0],t[1],t[0],t[1]];var e=l(t);return[e.x,e.y,e.x+e.width,e.y+e.height]}e.exports=u,u.prototype.render=function(){for(var t,e=this,n=[],r=arguments.length;r--;)n[r]=arguments[r];return n.length&&(t=this).update.apply(t,n),this.regl.attributes.preserveDrawingBuffer?this.draw():(this.dirty?null==this.planned&&(this.planned=o((function(){e.draw(),e.dirty=!0,e.planned=null}))):(this.draw(),this.dirty=!0,o((function(){e.dirty=!1}))),this)},u.prototype.update=function(){for(var t,e=[],n=arguments.length;n--;)e[n]=arguments[n];if(e.length){for(var r=0;r<e.length;r++)this.updateItem(r,e[r]);this.traces=this.traces.filter(Boolean);for(var i=[],a=0,o=0;o<this.traces.length;o++){for(var s=this.traces[o],l=this.traces[o].passes,c=0;c<l.length;c++)i.push(this.passes[l[c]]);s.passOffset=a,a+=s.passes.length}return(t=this.scatter).update.apply(t,i),this}},u.prototype.updateItem=function(t,e){var n=this.regl;if(null===e)return this.traces[t]=null,this;if(!e)return this;var r,o=i(e,{data:\"data items columns rows values dimensions samples x\",snap:\"snap cluster\",size:\"sizes size radius\",color:\"colors color fill fill-color fillColor\",opacity:\"opacity alpha transparency opaque\",borderSize:\"borderSizes borderSize border-size bordersize borderWidth borderWidths border-width borderwidth stroke-width strokeWidth strokewidth outline\",borderColor:\"borderColors borderColor bordercolor stroke stroke-color strokeColor\",marker:\"markers marker shape\",range:\"range ranges databox dataBox\",viewport:\"viewport viewBox viewbox\",domain:\"domain domains area areas\",padding:\"pad padding paddings pads margin margins\",transpose:\"transpose transposed\",diagonal:\"diagonal diag showDiagonal\",upper:\"upper up top upperhalf upperHalf showupperhalf showUpper showUpperHalf\",lower:\"lower low bottom lowerhalf lowerHalf showlowerhalf showLowerHalf showLower\"}),s=this.traces[t]||(this.traces[t]={id:t,buffer:n.buffer({usage:\"dynamic\",type:\"float\",data:new Uint8Array}),color:\"black\",marker:null,size:12,borderColor:\"transparent\",borderSize:1,viewport:l([n._gl.drawingBufferWidth,n._gl.drawingBufferHeight]),padding:[0,0,0,0],opacity:1,diagonal:!0,upper:!0,lower:!0});if(null!=o.color&&(s.color=o.color),null!=o.size&&(s.size=o.size),null!=o.marker&&(s.marker=o.marker),null!=o.borderColor&&(s.borderColor=o.borderColor),null!=o.borderSize&&(s.borderSize=o.borderSize),null!=o.opacity&&(s.opacity=o.opacity),o.viewport&&(s.viewport=l(o.viewport)),null!=o.diagonal&&(s.diagonal=o.diagonal),null!=o.upper&&(s.upper=o.upper),null!=o.lower&&(s.lower=o.lower),o.data){s.buffer(c(o.data)),s.columns=o.data.length,s.count=o.data[0].length,s.bounds=[];for(var u=0;u<s.columns;u++)s.bounds[u]=a(o.data[u],1)}o.range&&(s.range=o.range,r=s.range&&\"number\"!=typeof s.range[0]),o.domain&&(s.domain=o.domain);var p=!1;null!=o.padding&&(Array.isArray(o.padding)&&o.padding.length===s.columns&&\"number\"==typeof o.padding[o.padding.length-1]?(s.padding=o.padding.map(f),p=!0):s.padding=f(o.padding));var m=s.columns,g=s.count,y=s.viewport.width,v=s.viewport.height,_=s.viewport.x,b=s.viewport.y,x=y/m,w=v/m;s.passes=[];for(var k=0;k<m;k++)for(var M=0;M<m;M++)if((s.diagonal||M!==k)&&(s.upper||!(k>M))&&(s.lower||!(k<M))){var T=h(s.id,k,M),S=this.passes[T]||(this.passes[T]={});if(o.data&&(S.positions=o.transpose?{x:{buffer:s.buffer,offset:M,count:g,stride:m},y:{buffer:s.buffer,offset:k,count:g,stride:m}}:{x:{buffer:s.buffer,offset:M*g,count:g},y:{buffer:s.buffer,offset:k*g,count:g}},S.bounds=d(s.bounds,k,M)),o.domain||o.viewport||o.data){var A=p?d(s.padding,k,M):s.padding;if(s.domain){var L=d(s.domain,k,M);S.viewport=[_+L[0]*y+A[0],b+L[1]*v+A[1],_+L[2]*y-A[2],b+L[3]*v-A[3]]}else S.viewport=[_+M*x+x*A[0],b+k*w+w*A[1],_+(M+1)*x-x*A[2],b+(k+1)*w-w*A[3]]}o.color&&(S.color=s.color),o.size&&(S.size=s.size),o.marker&&(S.marker=s.marker),o.borderSize&&(S.borderSize=s.borderSize),o.borderColor&&(S.borderColor=s.borderColor),o.opacity&&(S.opacity=s.opacity),o.range&&(S.range=r?d(s.range,k,M):s.range||S.bounds),s.passes.push(T)}return this},u.prototype.draw=function(){for(var t,e=[],n=arguments.length;n--;)e[n]=arguments[n];if(e.length){for(var r=[],i=0;i<e.length;i++)if(\"number\"==typeof e[i]){var a=this.traces[e[i]],o=a.passOffset;r.push.apply(r,s(o,o+a.passes.length))}else if(e[i].length){var l=e[i],c=this.traces[i],u=c.passes,h=c.passOffset;u=u.map((function(t,e){r[h+e]=l}))}(t=this.scatter).draw.apply(t,r)}else this.scatter.draw();return this},u.prototype.destroy=function(){return this.traces.forEach((function(t){t.buffer&&t.buffer.destroy&&t.buffer.destroy()})),this.traces=null,this.passes=null,this.scatter.destroy(),this}},{\"array-bounds\":70,\"array-range\":72,\"flatten-vertex-data\":244,\"parse-rect\":504,\"pick-by-alias\":511,raf:528,\"regl-scatter2d\":537}],540:[function(t,e,n){var r;r=function(){function t(t,e){this.id=Y++,this.type=t,this.data=e}function e(t){return\"[\"+function t(e){if(0===e.length)return[];var n=e.charAt(0),r=e.charAt(e.length-1);if(1<e.length&&n===r&&('\"'===n||\"'\"===n))return['\"'+e.substr(1,e.length-2).replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"')+'\"'];if(n=/\\[(false|true|null|\\d+|'[^']*'|\"[^\"]*\")\\]/.exec(e))return t(e.substr(0,n.index)).concat(t(n[1])).concat(t(e.substr(n.index+n[0].length)));if(1===(n=e.split(\".\")).length)return['\"'+e.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"')+'\"'];for(e=[],r=0;r<n.length;++r)e=e.concat(t(n[r]));return e}(t).join(\"][\")+\"]\"}function n(t){return\"string\"==typeof t?t.split():t}function r(t){return\"string\"==typeof t?document.querySelector(t):t}function i(t,e){for(var n=Array(t),r=0;r<t;++r)n[r]=e(r);return n}function a(t){var e,n;return e=(65535<t)<<4,e|=n=(255<(t>>>=e))<<3,(e|=n=(15<(t>>>=n))<<2)|(n=(3<(t>>>=n))<<1)|t>>>n>>1}function o(){function t(t){t:{for(var e=16;268435456>=e;e*=16)if(t<=e){t=e;break t}t=0}return 0<(e=n[a(t)>>2]).length?e.pop():new ArrayBuffer(t)}function e(t){n[a(t.byteLength)>>2].push(t)}var n=i(8,(function(){return[]}));return{alloc:t,free:e,allocType:function(e,n){var r=null;switch(e){case 5120:r=new Int8Array(t(n),0,n);break;case 5121:r=new Uint8Array(t(n),0,n);break;case 5122:r=new Int16Array(t(2*n),0,n);break;case 5123:r=new Uint16Array(t(2*n),0,n);break;case 5124:r=new Int32Array(t(4*n),0,n);break;case 5125:r=new Uint32Array(t(4*n),0,n);break;case 5126:r=new Float32Array(t(4*n),0,n);break;default:return null}return r.length!==n?r.subarray(0,n):r},freeType:function(t){e(t.buffer)}}}function s(t){return!!t&&\"object\"==typeof t&&Array.isArray(t.shape)&&Array.isArray(t.stride)&&\"number\"==typeof t.offset&&t.shape.length===t.stride.length&&(Array.isArray(t.data)||G(t.data))}function l(t,e,n,r,i,a){for(var o=0;o<e;++o)for(var s=t[o],l=0;l<n;++l)for(var c=s[l],u=0;u<r;++u)i[a++]=c[u]}function c(t){return 0|J[Object.prototype.toString.call(t)]}function u(t,e){for(var n=0;n<e.length;++n)t[n]=e[n]}function h(t,e,n,r,i,a,o){for(var s=0,l=0;l<n;++l)for(var c=0;c<r;++c)t[s++]=e[i*l+a*c+o]}function d(t,e,n,r){function i(e){this.id=d++,this.buffer=t.createBuffer(),this.type=e,this.usage=35044,this.byteLength=0,this.dimension=1,this.dtype=5121,this.persistentData=null,n.profile&&(this.stats={size:0})}function a(e,n,r){e.byteLength=n.byteLength,t.bufferData(e.type,n,r)}function o(t,e,n,r,i,o){if(t.usage=n,Array.isArray(e)){if(t.dtype=r||5126,0<e.length)if(Array.isArray(e[0])){i=tt(e);for(var l=r=1;l<i.length;++l)r*=i[l];t.dimension=r,a(t,e=Q(e,i,t.dtype),n),o?t.persistentData=e:W.freeType(e)}else\"number\"==typeof e[0]?(t.dimension=i,u(i=W.allocType(t.dtype,e.length),e),a(t,i,n),o?t.persistentData=i:W.freeType(i)):G(e[0])&&(t.dimension=e[0].length,t.dtype=r||c(e[0])||5126,a(t,e=Q(e,[e.length,e[0].length],t.dtype),n),o?t.persistentData=e:W.freeType(e))}else if(G(e))t.dtype=r||c(e),t.dimension=i,a(t,e,n),o&&(t.persistentData=new Uint8Array(new Uint8Array(e.buffer)));else if(s(e)){var d=e.stride,f=(l=e.offset,0),p=0,m=0,g=0;1===(i=e.shape).length?(f=i[0],p=1,m=d[0],g=0):2===i.length&&(f=i[0],p=i[1],m=d[0],g=d[1]),t.dtype=r||c(e.data)||5126,t.dimension=p,h(i=W.allocType(t.dtype,f*p),e.data,f,p,m,g,l),a(t,i,n),o?t.persistentData=i:W.freeType(i)}else e instanceof ArrayBuffer&&(t.dtype=5121,t.dimension=i,a(t,e,n),o&&(t.persistentData=new Uint8Array(new Uint8Array(e))))}function l(n){e.bufferCount--,r(n),t.deleteBuffer(n.buffer),n.buffer=null,delete f[n.id]}var d=0,f={};i.prototype.bind=function(){t.bindBuffer(this.type,this.buffer)},i.prototype.destroy=function(){l(this)};var p=[];return n.profile&&(e.getTotalBufferSize=function(){var t=0;return Object.keys(f).forEach((function(e){t+=f[e].stats.size})),t}),{create:function(r,a,d,p){function m(e){var r=35044,i=null,a=0,l=0,c=1;return Array.isArray(e)||G(e)||s(e)||e instanceof ArrayBuffer?i=e:\"number\"==typeof e?a=0|e:e&&(\"data\"in e&&(i=e.data),\"usage\"in e&&(r=$[e.usage]),\"type\"in e&&(l=K[e.type]),\"dimension\"in e&&(c=0|e.dimension),\"length\"in e&&(a=0|e.length)),g.bind(),i?o(g,i,r,l,c,p):(a&&t.bufferData(g.type,a,r),g.dtype=l||5121,g.usage=r,g.dimension=c,g.byteLength=a),n.profile&&(g.stats.size=g.byteLength*et[g.dtype]),m}e.bufferCount++;var g=new i(a);return f[g.id]=g,d||m(r),m._reglType=\"buffer\",m._buffer=g,m.subdata=function(e,n){var r,i=0|(n||0);if(g.bind(),G(e)||e instanceof ArrayBuffer)t.bufferSubData(g.type,i,e);else if(Array.isArray(e)){if(0<e.length)if(\"number\"==typeof e[0]){var a=W.allocType(g.dtype,e.length);u(a,e),t.bufferSubData(g.type,i,a),W.freeType(a)}else(Array.isArray(e[0])||G(e[0]))&&(r=tt(e),a=Q(e,r,g.dtype),t.bufferSubData(g.type,i,a),W.freeType(a))}else if(s(e)){var o=e.stride,l=a=0,d=0,f=0;1===(r=e.shape).length?(a=r[0],l=1,d=o[0],f=0):2===r.length&&(a=r[0],l=r[1],d=o[0],f=o[1]),r=Array.isArray(e.data)?g.dtype:c(e.data),h(r=W.allocType(r,a*l),e.data,a,l,d,f,e.offset),t.bufferSubData(g.type,i,r),W.freeType(r)}return m},n.profile&&(m.stats=g.stats),m.destroy=function(){l(g)},m},createStream:function(t,e){var n=p.pop();return n||(n=new i(t)),n.bind(),o(n,e,35040,0,1,!1),n},destroyStream:function(t){p.push(t)},clear:function(){X(f).forEach(l),p.forEach(l)},getBuffer:function(t){return t&&t._buffer instanceof i?t._buffer:null},restore:function(){X(f).forEach((function(e){e.buffer=t.createBuffer(),t.bindBuffer(e.type,e.buffer),t.bufferData(e.type,e.persistentData||e.byteLength,e.usage)}))},_initBuffer:o}}function f(t,e,n,r){function i(t){this.id=c++,l[this.id]=this,this.buffer=t,this.primType=4,this.type=this.vertCount=0}function a(r,i,a,o,l,c,u){var h;if(r.buffer.bind(),i?((h=u)||G(i)&&(!s(i)||G(i.data))||(h=e.oes_element_index_uint?5125:5123),n._initBuffer(r.buffer,i,a,h,3)):(t.bufferData(34963,c,a),r.buffer.dtype=h||5121,r.buffer.usage=a,r.buffer.dimension=3,r.buffer.byteLength=c),h=u,!u){switch(r.buffer.dtype){case 5121:case 5120:h=5121;break;case 5123:case 5122:h=5123;break;case 5125:case 5124:h=5125}r.buffer.dtype=h}r.type=h,0>(i=l)&&(i=r.buffer.byteLength,5123===h?i>>=1:5125===h&&(i>>=2)),r.vertCount=i,i=o,0>o&&(i=4,1===(o=r.buffer.dimension)&&(i=0),2===o&&(i=1),3===o&&(i=4)),r.primType=i}function o(t){r.elementsCount--,delete l[t.id],t.buffer.destroy(),t.buffer=null}var l={},c=0,u={uint8:5121,uint16:5123};e.oes_element_index_uint&&(u.uint32=5125),i.prototype.bind=function(){this.buffer.bind()};var h=[];return{create:function(t,e){function l(t){if(t)if(\"number\"==typeof t)c(t),h.primType=4,h.vertCount=0|t,h.type=5121;else{var e=null,n=35044,r=-1,i=-1,o=0,d=0;Array.isArray(t)||G(t)||s(t)?e=t:(\"data\"in t&&(e=t.data),\"usage\"in t&&(n=$[t.usage]),\"primitive\"in t&&(r=nt[t.primitive]),\"count\"in t&&(i=0|t.count),\"type\"in t&&(d=u[t.type]),\"length\"in t?o=0|t.length:(o=i,5123===d||5122===d?o*=2:5125!==d&&5124!==d||(o*=4))),a(h,e,n,r,i,o,d)}else c(),h.primType=4,h.vertCount=0,h.type=5121;return l}var c=n.create(null,34963,!0),h=new i(c._buffer);return r.elementsCount++,l(t),l._reglType=\"elements\",l._elements=h,l.subdata=function(t,e){return c.subdata(t,e),l},l.destroy=function(){o(h)},l},createStream:function(t){var e=h.pop();return e||(e=new i(n.create(null,34963,!0,!1)._buffer)),a(e,t,35040,-1,-1,0,0),e},destroyStream:function(t){h.push(t)},getElements:function(t){return\"function\"==typeof t&&t._elements instanceof i?t._elements:null},clear:function(){X(l).forEach(o)}}}function p(t){for(var e=W.allocType(5123,t.length),n=0;n<t.length;++n)if(isNaN(t[n]))e[n]=65535;else if(1/0===t[n])e[n]=31744;else if(-1/0===t[n])e[n]=64512;else{rt[0]=t[n];var r=(a=it[0])>>>31<<15,i=(a<<1>>>24)-127,a=a>>13&1023;e[n]=-24>i?r:-14>i?r+(a+1024>>-14-i):15<i?r+31744:r+(i+15<<10)+a}return e}function m(t){return Array.isArray(t)||G(t)}function g(t){return\"[object \"+t+\"]\"}function y(t){return Array.isArray(t)&&(0===t.length||\"number\"==typeof t[0])}function v(t){return!(!Array.isArray(t)||0===t.length||!m(t[0]))}function _(t){return Object.prototype.toString.call(t)}function b(t){if(!t)return!1;var e=_(t);return 0<=pt.indexOf(e)||y(t)||v(t)||s(t)}function x(t,e){36193===t.type?(t.data=p(e),W.freeType(e)):t.data=e}function w(t,e,n,r,i,a){if(t=void 0!==gt[t]?gt[t]:st[t]*mt[e],a&&(t*=6),i){for(r=0;1<=n;)r+=t*n*n,n/=2;return r}return t*n*r}function k(t,e,n,r,i,a,o){function l(){this.format=this.internalformat=6408,this.type=5121,this.flipY=this.premultiplyAlpha=this.compressed=!1,this.unpackAlignment=1,this.colorSpace=37444,this.channels=this.height=this.width=0}function c(t,e){t.internalformat=e.internalformat,t.format=e.format,t.type=e.type,t.compressed=e.compressed,t.premultiplyAlpha=e.premultiplyAlpha,t.flipY=e.flipY,t.unpackAlignment=e.unpackAlignment,t.colorSpace=e.colorSpace,t.width=e.width,t.height=e.height,t.channels=e.channels}function u(t,e){if(\"object\"==typeof e&&e){\"premultiplyAlpha\"in e&&(t.premultiplyAlpha=e.premultiplyAlpha),\"flipY\"in e&&(t.flipY=e.flipY),\"alignment\"in e&&(t.unpackAlignment=e.alignment),\"colorSpace\"in e&&(t.colorSpace=V[e.colorSpace]),\"type\"in e&&(t.type=U[e.type]);var n=t.width,r=t.height,i=t.channels,a=!1;\"shape\"in e?(n=e.shape[0],r=e.shape[1],3===e.shape.length&&(i=e.shape[2],a=!0)):(\"radius\"in e&&(n=r=e.radius),\"width\"in e&&(n=e.width),\"height\"in e&&(r=e.height),\"channels\"in e&&(i=e.channels,a=!0)),t.width=0|n,t.height=0|r,t.channels=0|i,n=!1,\"format\"in e&&(r=t.internalformat=q[n=e.format],t.format=pt[r],n in U&&!(\"type\"in e)&&(t.type=U[n]),n in K&&(t.compressed=!0),n=!0),!a&&n?t.channels=st[t.format]:a&&!n&&t.channels!==ot[t.format]&&(t.format=t.internalformat=ot[t.channels])}}function h(e){t.pixelStorei(37440,e.flipY),t.pixelStorei(37441,e.premultiplyAlpha),t.pixelStorei(37443,e.colorSpace),t.pixelStorei(3317,e.unpackAlignment)}function d(){l.call(this),this.yOffset=this.xOffset=0,this.data=null,this.needsFree=!1,this.element=null,this.needsCopy=!1}function f(t,e){var n=null;if(b(e)?n=e:e&&(u(t,e),\"x\"in e&&(t.xOffset=0|e.x),\"y\"in e&&(t.yOffset=0|e.y),b(e.data)&&(n=e.data)),e.copy){var r=i.viewportWidth,a=i.viewportHeight;t.width=t.width||r-t.xOffset,t.height=t.height||a-t.yOffset,t.needsCopy=!0}else if(n){if(G(n))t.channels=t.channels||4,t.data=n,\"type\"in e||5121!==t.type||(t.type=0|J[Object.prototype.toString.call(n)]);else if(y(n)){switch(t.channels=t.channels||4,a=(r=n).length,t.type){case 5121:case 5123:case 5125:case 5126:(a=W.allocType(t.type,a)).set(r),t.data=a;break;case 36193:t.data=p(r)}t.alignment=1,t.needsFree=!0}else if(s(n)){r=n.data,Array.isArray(r)||5121!==t.type||(t.type=0|J[Object.prototype.toString.call(r)]);var o,l,c,h,d=n.stride;3===(a=n.shape).length?(c=a[2],h=d[2]):h=c=1,o=a[0],l=a[1],a=d[0],d=d[1],t.alignment=1,t.width=o,t.height=l,t.channels=c,t.format=t.internalformat=ot[c],t.needsFree=!0,o=h,n=n.offset;for(var f=W.allocType(36193===t.type?5126:t.type,(c=t.width)*(h=t.height)*(l=t.channels)),g=0,w=0;w<h;++w)for(var k=0;k<c;++k)for(var M=0;M<l;++M)f[g++]=r[a*k+d*w+o*M+n];x(t,f)}else if(_(n)===lt||_(n)===ct||_(n)===ut)t.element=_(n)===lt||_(n)===ct?n:n.canvas,t.width=t.element.width,t.height=t.element.height,t.channels=4;else if(_(n)===ht)t.element=n,t.width=n.width,t.height=n.height,t.channels=4;else if(_(n)===dt)t.element=n,t.width=n.naturalWidth,t.height=n.naturalHeight,t.channels=4;else if(_(n)===ft)t.element=n,t.width=n.videoWidth,t.height=n.videoHeight,t.channels=4;else if(v(n)){for(r=t.width||n[0].length,a=t.height||n.length,d=t.channels,d=m(n[0][0])?d||n[0][0].length:d||1,o=Z.shape(n),c=1,h=0;h<o.length;++h)c*=o[h];c=W.allocType(36193===t.type?5126:t.type,c),Z.flatten(n,o,\"\",c),x(t,c),t.alignment=1,t.width=r,t.height=a,t.channels=d,t.format=t.internalformat=ot[d],t.needsFree=!0}}else t.width=t.width||1,t.height=t.height||1,t.channels=t.channels||4}function g(e,n,i,a,o){var s=e.element,l=e.data,c=e.internalformat,u=e.format,d=e.type,f=e.width,p=e.height;h(e),s?t.texSubImage2D(n,o,i,a,u,d,s):e.compressed?t.compressedTexSubImage2D(n,o,i,a,c,f,p,l):e.needsCopy?(r(),t.copyTexSubImage2D(n,o,i,a,e.xOffset,e.yOffset,f,p)):t.texSubImage2D(n,o,i,a,f,p,u,d,l)}function k(){return mt.pop()||new d}function M(t){t.needsFree&&W.freeType(t.data),d.call(t),mt.push(t)}function T(){l.call(this),this.genMipmaps=!1,this.mipmapHint=4352,this.mipmask=0,this.images=Array(16)}function S(t,e,n){var r=t.images[0]=k();t.mipmask=1,r.width=t.width=e,r.height=t.height=n,r.channels=t.channels=4}function A(t,e){var n=null;if(b(e))c(n=t.images[0]=k(),t),f(n,e),t.mipmask=1;else if(u(t,e),Array.isArray(e.mipmap))for(var r=e.mipmap,i=0;i<r.length;++i)c(n=t.images[i]=k(),t),n.width>>=i,n.height>>=i,f(n,r[i]),t.mipmask|=1<<i;else c(n=t.images[0]=k(),t),f(n,e),t.mipmask=1;c(t,t.images[0])}function L(e,n){for(var i=e.images,a=0;a<i.length&&i[a];++a){var o=i[a],s=n,l=a,c=o.element,u=o.data,d=o.internalformat,f=o.format,p=o.type,m=o.width,g=o.height;h(o),c?t.texImage2D(s,l,f,f,p,c):o.compressed?t.compressedTexImage2D(s,l,d,m,g,0,u):o.needsCopy?(r(),t.copyTexImage2D(s,l,f,o.xOffset,o.yOffset,m,g,0)):t.texImage2D(s,l,f,m,g,0,f,p,u||null)}}function C(){var t=gt.pop()||new T;l.call(t);for(var e=t.mipmask=0;16>e;++e)t.images[e]=null;return t}function E(t){for(var e=t.images,n=0;n<e.length;++n)e[n]&&M(e[n]),e[n]=null;gt.push(t)}function O(){this.magFilter=this.minFilter=9728,this.wrapT=this.wrapS=33071,this.anisotropic=1,this.genMipmaps=!1,this.mipmapHint=4352}function D(t,e){\"min\"in e&&(t.minFilter=H[e.min],0<=at.indexOf(t.minFilter)&&!(\"faces\"in e)&&(t.genMipmaps=!0)),\"mag\"in e&&(t.magFilter=Y[e.mag]);var n=t.wrapS,r=t.wrapT;if(\"wrap\"in e){var i=e.wrap;\"string\"==typeof i?n=r=N[i]:Array.isArray(i)&&(n=N[i[0]],r=N[i[1]])}else\"wrapS\"in e&&(n=N[e.wrapS]),\"wrapT\"in e&&(r=N[e.wrapT]);if(t.wrapS=n,t.wrapT=r,\"anisotropic\"in e&&(t.anisotropic=e.anisotropic),\"mipmap\"in e){switch(n=!1,typeof e.mipmap){case\"string\":t.mipmapHint=F[e.mipmap],n=t.genMipmaps=!0;break;case\"boolean\":n=t.genMipmaps=e.mipmap;break;case\"object\":t.genMipmaps=!1,n=!0}!n||\"min\"in e||(t.minFilter=9984)}}function I(n,r){t.texParameteri(r,10241,n.minFilter),t.texParameteri(r,10240,n.magFilter),t.texParameteri(r,10242,n.wrapS),t.texParameteri(r,10243,n.wrapT),e.ext_texture_filter_anisotropic&&t.texParameteri(r,34046,n.anisotropic),n.genMipmaps&&(t.hint(33170,n.mipmapHint),t.generateMipmap(r))}function P(e){l.call(this),this.mipmask=0,this.internalformat=6408,this.id=yt++,this.refCount=1,this.target=e,this.texture=t.createTexture(),this.unit=-1,this.bindCount=0,this.texInfo=new O,o.profile&&(this.stats={size:0})}function R(e){t.activeTexture(33984),t.bindTexture(e.target,e.texture)}function z(){var e=bt[0];e?t.bindTexture(e.target,e.texture):t.bindTexture(3553,null)}function j(e){var n=e.texture,r=e.unit,i=e.target;0<=r&&(t.activeTexture(33984+r),t.bindTexture(i,null),bt[r]=null),t.deleteTexture(n),e.texture=null,e.params=null,e.pixels=null,e.refCount=0,delete vt[e.id],a.textureCount--}var F={\"don't care\":4352,\"dont care\":4352,nice:4354,fast:4353},N={repeat:10497,clamp:33071,mirror:33648},Y={nearest:9728,linear:9729},H=B({mipmap:9987,\"nearest mipmap nearest\":9984,\"linear mipmap nearest\":9985,\"nearest mipmap linear\":9986,\"linear mipmap linear\":9987},Y),V={none:0,browser:37444},U={uint8:5121,rgba4:32819,rgb565:33635,\"rgb5 a1\":32820},q={alpha:6406,luminance:6409,\"luminance alpha\":6410,rgb:6407,rgba:6408,rgba4:32854,\"rgb5 a1\":32855,rgb565:36194},K={};e.ext_srgb&&(q.srgb=35904,q.srgba=35906),e.oes_texture_float&&(U.float32=U.float=5126),e.oes_texture_half_float&&(U.float16=U[\"half float\"]=36193),e.webgl_depth_texture&&(B(q,{depth:6402,\"depth stencil\":34041}),B(U,{uint16:5123,uint32:5125,\"depth stencil\":34042})),e.webgl_compressed_texture_s3tc&&B(K,{\"rgb s3tc dxt1\":33776,\"rgba s3tc dxt1\":33777,\"rgba s3tc dxt3\":33778,\"rgba s3tc dxt5\":33779}),e.webgl_compressed_texture_atc&&B(K,{\"rgb atc\":35986,\"rgba atc explicit alpha\":35987,\"rgba atc interpolated alpha\":34798}),e.webgl_compressed_texture_pvrtc&&B(K,{\"rgb pvrtc 4bppv1\":35840,\"rgb pvrtc 2bppv1\":35841,\"rgba pvrtc 4bppv1\":35842,\"rgba pvrtc 2bppv1\":35843}),e.webgl_compressed_texture_etc1&&(K[\"rgb etc1\"]=36196);var $=Array.prototype.slice.call(t.getParameter(34467));Object.keys(K).forEach((function(t){var e=K[t];0<=$.indexOf(e)&&(q[t]=e)}));var Q=Object.keys(q);n.textureFormats=Q;var tt=[];Object.keys(q).forEach((function(t){tt[q[t]]=t}));var et=[];Object.keys(U).forEach((function(t){et[U[t]]=t}));var nt=[];Object.keys(Y).forEach((function(t){nt[Y[t]]=t}));var rt=[];Object.keys(H).forEach((function(t){rt[H[t]]=t}));var it=[];Object.keys(N).forEach((function(t){it[N[t]]=t}));var pt=Q.reduce((function(t,n){var r=q[n];return t[r]=6409===r||6406===r||6409===r||6410===r||6402===r||34041===r||e.ext_srgb&&(35904===r||35906===r)?r:32855===r||0<=n.indexOf(\"rgba\")?6408:6407,t}),{}),mt=[],gt=[],yt=0,vt={},_t=n.maxTextureUnits,bt=Array(_t).map((function(){return null}));return B(P.prototype,{bind:function(){this.bindCount+=1;var e=this.unit;if(0>e){for(var n=0;n<_t;++n){var r=bt[n];if(r){if(0<r.bindCount)continue;r.unit=-1}bt[n]=this,e=n;break}o.profile&&a.maxTextureUnits<e+1&&(a.maxTextureUnits=e+1),this.unit=e,t.activeTexture(33984+e),t.bindTexture(this.target,this.texture)}return e},unbind:function(){--this.bindCount},decRef:function(){0>=--this.refCount&&j(this)}}),o.profile&&(a.getTotalTextureSize=function(){var t=0;return Object.keys(vt).forEach((function(e){t+=vt[e].stats.size})),t}),{create2D:function(e,n){function r(t,e){var n=i.texInfo;O.call(n);var a=C();return\"number\"==typeof t?S(a,0|t,\"number\"==typeof e?0|e:0|t):t?(D(n,t),A(a,t)):S(a,1,1),n.genMipmaps&&(a.mipmask=(a.width<<1)-1),i.mipmask=a.mipmask,c(i,a),i.internalformat=a.internalformat,r.width=a.width,r.height=a.height,R(i),L(a,3553),I(n,3553),z(),E(a),o.profile&&(i.stats.size=w(i.internalformat,i.type,a.width,a.height,n.genMipmaps,!1)),r.format=tt[i.internalformat],r.type=et[i.type],r.mag=nt[n.magFilter],r.min=rt[n.minFilter],r.wrapS=it[n.wrapS],r.wrapT=it[n.wrapT],r}var i=new P(3553);return vt[i.id]=i,a.textureCount++,r(e,n),r.subimage=function(t,e,n,a){e|=0,n|=0,a|=0;var o=k();return c(o,i),o.width=0,o.height=0,f(o,t),o.width=o.width||(i.width>>a)-e,o.height=o.height||(i.height>>a)-n,R(i),g(o,3553,e,n,a),z(),M(o),r},r.resize=function(e,n){var a=0|e,s=0|n||a;if(a===i.width&&s===i.height)return r;r.width=i.width=a,r.height=i.height=s,R(i);for(var l=0;i.mipmask>>l;++l){var c=a>>l,u=s>>l;if(!c||!u)break;t.texImage2D(3553,l,i.format,c,u,0,i.format,i.type,null)}return z(),o.profile&&(i.stats.size=w(i.internalformat,i.type,a,s,!1,!1)),r},r._reglType=\"texture2d\",r._texture=i,o.profile&&(r.stats=i.stats),r.destroy=function(){i.decRef()},r},createCube:function(e,n,r,i,s,l){function h(t,e,n,r,i,a){var s,l=d.texInfo;for(O.call(l),s=0;6>s;++s)p[s]=C();if(\"number\"!=typeof t&&t){if(\"object\"==typeof t)if(e)A(p[0],t),A(p[1],e),A(p[2],n),A(p[3],r),A(p[4],i),A(p[5],a);else if(D(l,t),u(d,t),\"faces\"in t)for(t=t.faces,s=0;6>s;++s)c(p[s],d),A(p[s],t[s]);else for(s=0;6>s;++s)A(p[s],t)}else for(t=0|t||1,s=0;6>s;++s)S(p[s],t,t);for(c(d,p[0]),d.mipmask=l.genMipmaps?(p[0].width<<1)-1:p[0].mipmask,d.internalformat=p[0].internalformat,h.width=p[0].width,h.height=p[0].height,R(d),s=0;6>s;++s)L(p[s],34069+s);for(I(l,34067),z(),o.profile&&(d.stats.size=w(d.internalformat,d.type,h.width,h.height,l.genMipmaps,!0)),h.format=tt[d.internalformat],h.type=et[d.type],h.mag=nt[l.magFilter],h.min=rt[l.minFilter],h.wrapS=it[l.wrapS],h.wrapT=it[l.wrapT],s=0;6>s;++s)E(p[s]);return h}var d=new P(34067);vt[d.id]=d,a.cubeCount++;var p=Array(6);return h(e,n,r,i,s,l),h.subimage=function(t,e,n,r,i){n|=0,r|=0,i|=0;var a=k();return c(a,d),a.width=0,a.height=0,f(a,e),a.width=a.width||(d.width>>i)-n,a.height=a.height||(d.height>>i)-r,R(d),g(a,34069+t,n,r,i),z(),M(a),h},h.resize=function(e){if((e|=0)!==d.width){h.width=d.width=e,h.height=d.height=e,R(d);for(var n=0;6>n;++n)for(var r=0;d.mipmask>>r;++r)t.texImage2D(34069+n,r,d.format,e>>r,e>>r,0,d.format,d.type,null);return z(),o.profile&&(d.stats.size=w(d.internalformat,d.type,h.width,h.height,!1,!0)),h}},h._reglType=\"textureCube\",h._texture=d,o.profile&&(h.stats=d.stats),h.destroy=function(){d.decRef()},h},clear:function(){for(var e=0;e<_t;++e)t.activeTexture(33984+e),t.bindTexture(3553,null),bt[e]=null;X(vt).forEach(j),a.cubeCount=0,a.textureCount=0},getTexture:function(t){return null},restore:function(){for(var e=0;e<_t;++e){var n=bt[e];n&&(n.bindCount=0,n.unit=-1,bt[e]=null)}X(vt).forEach((function(e){e.texture=t.createTexture(),t.bindTexture(e.target,e.texture);for(var n=0;32>n;++n)if(0!=(e.mipmask&1<<n))if(3553===e.target)t.texImage2D(3553,n,e.internalformat,e.width>>n,e.height>>n,0,e.internalformat,e.type,null);else for(var r=0;6>r;++r)t.texImage2D(34069+r,n,e.internalformat,e.width>>n,e.height>>n,0,e.internalformat,e.type,null);I(e.texInfo,e.target)}))}}}function M(t,e,n,r,i,a){function o(t,e,n){this.target=t,this.texture=e,this.renderbuffer=n;var r=t=0;e?(t=e.width,r=e.height):n&&(t=n.width,r=n.height),this.width=t,this.height=r}function s(t){t&&(t.texture&&t.texture._texture.decRef(),t.renderbuffer&&t.renderbuffer._renderbuffer.decRef())}function l(t,e,n){t&&(t.texture?t.texture._texture.refCount+=1:t.renderbuffer._renderbuffer.refCount+=1)}function c(e,n){n&&(n.texture?t.framebufferTexture2D(36160,e,n.target,n.texture._texture.texture,0):t.framebufferRenderbuffer(36160,e,36161,n.renderbuffer._renderbuffer.renderbuffer))}function u(t){var e=3553,n=null,r=null,i=t;return\"object\"==typeof t&&(i=t.data,\"target\"in t&&(e=0|t.target)),\"texture2d\"===(t=i._reglType)||\"textureCube\"===t?n=i:\"renderbuffer\"===t&&(r=i,e=36161),new o(e,n,r)}function h(t,e,n,a,s){return n?((t=r.create2D({width:t,height:e,format:a,type:s}))._texture.refCount=0,new o(3553,t,null)):((t=i.create({width:t,height:e,format:a}))._renderbuffer.refCount=0,new o(36161,null,t))}function d(t){return t&&(t.texture||t.renderbuffer)}function f(t,e,n){t&&(t.texture?t.texture.resize(e,n):t.renderbuffer&&t.renderbuffer.resize(e,n),t.width=e,t.height=n)}function p(){this.id=k++,M[this.id]=this,this.framebuffer=t.createFramebuffer(),this.height=this.width=0,this.colorAttachments=[],this.depthStencilAttachment=this.stencilAttachment=this.depthAttachment=null}function m(t){t.colorAttachments.forEach(s),s(t.depthAttachment),s(t.stencilAttachment),s(t.depthStencilAttachment)}function g(e){t.deleteFramebuffer(e.framebuffer),e.framebuffer=null,a.framebufferCount--,delete M[e.id]}function y(e){var r;t.bindFramebuffer(36160,e.framebuffer);var i=e.colorAttachments;for(r=0;r<i.length;++r)c(36064+r,i[r]);for(r=i.length;r<n.maxColorAttachments;++r)t.framebufferTexture2D(36160,36064+r,3553,null,0);t.framebufferTexture2D(36160,33306,3553,null,0),t.framebufferTexture2D(36160,36096,3553,null,0),t.framebufferTexture2D(36160,36128,3553,null,0),c(36096,e.depthAttachment),c(36128,e.stencilAttachment),c(33306,e.depthStencilAttachment),t.checkFramebufferStatus(36160),t.isContextLost(),t.bindFramebuffer(36160,_.next?_.next.framebuffer:null),_.cur=_.next,t.getError()}function v(t,e){function n(t,e){var i,a=0,o=0,s=!0,c=!0;i=null;var f=!0,p=\"rgba\",g=\"uint8\",v=1,_=null,w=null,k=null,M=!1;\"number\"==typeof t?(a=0|t,o=0|e||a):t?(\"shape\"in t?(a=(o=t.shape)[0],o=o[1]):(\"radius\"in t&&(a=o=t.radius),\"width\"in t&&(a=t.width),\"height\"in t&&(o=t.height)),(\"color\"in t||\"colors\"in t)&&(i=t.color||t.colors,Array.isArray(i)),i||(\"colorCount\"in t&&(v=0|t.colorCount),\"colorTexture\"in t&&(f=!!t.colorTexture,p=\"rgba4\"),\"colorType\"in t&&(g=t.colorType,!f)&&(\"half float\"===g||\"float16\"===g?p=\"rgba16f\":\"float\"!==g&&\"float32\"!==g||(p=\"rgba32f\")),\"colorFormat\"in t&&(0<=b.indexOf(p=t.colorFormat)?f=!0:0<=x.indexOf(p)&&(f=!1))),(\"depthTexture\"in t||\"depthStencilTexture\"in t)&&(M=!(!t.depthTexture&&!t.depthStencilTexture)),\"depth\"in t&&(\"boolean\"==typeof t.depth?s=t.depth:(_=t.depth,c=!1)),\"stencil\"in t&&(\"boolean\"==typeof t.stencil?c=t.stencil:(w=t.stencil,s=!1)),\"depthStencil\"in t&&(\"boolean\"==typeof t.depthStencil?s=c=t.depthStencil:(k=t.depthStencil,c=s=!1))):a=o=1;var T=null,S=null,A=null,L=null;if(Array.isArray(i))T=i.map(u);else if(i)T=[u(i)];else for(T=Array(v),i=0;i<v;++i)T[i]=h(a,o,f,p,g);for(a=a||T[0].width,o=o||T[0].height,_?S=u(_):s&&!c&&(S=h(a,o,M,\"depth\",\"uint32\")),w?A=u(w):c&&!s&&(A=h(a,o,!1,\"stencil\",\"uint8\")),k?L=u(k):!_&&!w&&c&&s&&(L=h(a,o,M,\"depth stencil\",\"depth stencil\")),s=null,i=0;i<T.length;++i)l(T[i]),T[i]&&T[i].texture&&(c=_t[T[i].texture._texture.format]*bt[T[i].texture._texture.type],null===s&&(s=c));return l(S),l(A),l(L),m(r),r.width=a,r.height=o,r.colorAttachments=T,r.depthAttachment=S,r.stencilAttachment=A,r.depthStencilAttachment=L,n.color=T.map(d),n.depth=d(S),n.stencil=d(A),n.depthStencil=d(L),n.width=r.width,n.height=r.height,y(r),n}var r=new p;return a.framebufferCount++,n(t,e),B(n,{resize:function(t,e){var i=Math.max(0|t,1),a=Math.max(0|e||i,1);if(i===r.width&&a===r.height)return n;for(var o=r.colorAttachments,s=0;s<o.length;++s)f(o[s],i,a);return f(r.depthAttachment,i,a),f(r.stencilAttachment,i,a),f(r.depthStencilAttachment,i,a),r.width=n.width=i,r.height=n.height=a,y(r),n},_reglType:\"framebuffer\",_framebuffer:r,destroy:function(){g(r),m(r)},use:function(t){_.setFBO({framebuffer:n},t)}})}var _={cur:null,next:null,dirty:!1,setFBO:null},b=[\"rgba\"],x=[\"rgba4\",\"rgb565\",\"rgb5 a1\"];e.ext_srgb&&x.push(\"srgba\"),e.ext_color_buffer_half_float&&x.push(\"rgba16f\",\"rgb16f\"),e.webgl_color_buffer_float&&x.push(\"rgba32f\");var w=[\"uint8\"];e.oes_texture_half_float&&w.push(\"half float\",\"float16\"),e.oes_texture_float&&w.push(\"float\",\"float32\");var k=0,M={};return B(_,{getFramebuffer:function(t){return\"function\"==typeof t&&\"framebuffer\"===t._reglType&&(t=t._framebuffer)instanceof p?t:null},create:v,createCube:function(t){function e(t){var i,a={color:null},o=0,s=null;i=\"rgba\";var l=\"uint8\",c=1;if(\"number\"==typeof t?o=0|t:t?(\"shape\"in t?o=t.shape[0]:(\"radius\"in t&&(o=0|t.radius),\"width\"in t?o=0|t.width:\"height\"in t&&(o=0|t.height)),(\"color\"in t||\"colors\"in t)&&(s=t.color||t.colors,Array.isArray(s)),s||(\"colorCount\"in t&&(c=0|t.colorCount),\"colorType\"in t&&(l=t.colorType),\"colorFormat\"in t&&(i=t.colorFormat)),\"depth\"in t&&(a.depth=t.depth),\"stencil\"in t&&(a.stencil=t.stencil),\"depthStencil\"in t&&(a.depthStencil=t.depthStencil)):o=1,s)if(Array.isArray(s))for(t=[],i=0;i<s.length;++i)t[i]=s[i];else t=[s];else for(t=Array(c),s={radius:o,format:i,type:l},i=0;i<c;++i)t[i]=r.createCube(s);for(a.color=Array(t.length),i=0;i<t.length;++i)c=t[i],o=o||c.width,a.color[i]={target:34069,data:t[i]};for(i=0;6>i;++i){for(c=0;c<t.length;++c)a.color[c].target=34069+i;0<i&&(a.depth=n[0].depth,a.stencil=n[0].stencil,a.depthStencil=n[0].depthStencil),n[i]?n[i](a):n[i]=v(a)}return B(e,{width:o,height:o,color:t})}var n=Array(6);return e(t),B(e,{faces:n,resize:function(t){var r=0|t;if(r===e.width)return e;var i=e.color;for(t=0;t<i.length;++t)i[t].resize(r);for(t=0;6>t;++t)n[t].resize(r);return e.width=e.height=r,e},_reglType:\"framebufferCube\",destroy:function(){n.forEach((function(t){t.destroy()}))}})},clear:function(){X(M).forEach(g)},restore:function(){_.cur=null,_.next=null,_.dirty=!0,X(M).forEach((function(e){e.framebuffer=t.createFramebuffer(),y(e)}))}})}function T(){this.w=this.z=this.y=this.x=this.state=0,this.buffer=null,this.size=0,this.normalized=!1,this.type=5126,this.divisor=this.stride=this.offset=0}function S(t,e,n,r,i){function a(){this.id=++c,this.attributes=[];var t=e.oes_vertex_array_object;this.vao=t?t.createVertexArrayOES():null,u[this.id]=this,this.buffers=[]}var o=n.maxAttributes,l=Array(o);for(n=0;n<o;++n)l[n]=new T;var c=0,u={},h={Record:T,scope:{},state:l,currentVAO:null,targetVAO:null,restore:e.oes_vertex_array_object?function(){e.oes_vertex_array_object&&X(u).forEach((function(t){t.refresh()}))}:function(){},createVAO:function(t){function e(t){for(var r=0;r<n.buffers.length;++r)n.buffers[r].destroy();n.buffers.length=0,(r=n.attributes).length=t.length;for(var a=0;a<t.length;++a){var o=t[a],l=r[a]=new T;Array.isArray(o)||G(o)||s(o)?(o=i.create(o,34962,!1,!0),l.buffer=i.getBuffer(o),l.size=0|l.buffer.dimension,l.normalized=!1,l.type=l.buffer.dtype,l.offset=0,l.stride=0,l.divisor=0,l.state=1,n.buffers.push(o)):i.getBuffer(o)?(l.buffer=i.getBuffer(o),l.size=0|l.buffer.dimension,l.normalized=!1,l.type=l.buffer.dtype,l.offset=0,l.stride=0,l.divisor=0,l.state=1):i.getBuffer(o.buffer)?(l.buffer=i.getBuffer(o.buffer),l.size=0|(+o.size||l.buffer.dimension),l.normalized=!!o.normalized||!1,l.type=\"type\"in o?K[o.type]:l.buffer.dtype,l.offset=0|(o.offset||0),l.stride=0|(o.stride||0),l.divisor=0|(o.divisor||0),l.state=1):\"x\"in o&&(l.x=+o.x||0,l.y=+o.y||0,l.z=+o.z||0,l.w=+o.w||0,l.state=2)}return n.refresh(),e}var n=new a;return r.vaoCount+=1,e.destroy=function(){n.destroy()},e._vao=n,e._reglType=\"vao\",e(t)},getVAO:function(t){return\"function\"==typeof t&&t._vao?t._vao:null},destroyBuffer:function(e){for(var n=0;n<l.length;++n){var r=l[n];r.buffer===e&&(t.disableVertexAttribArray(n),r.buffer=null)}},setVAO:e.oes_vertex_array_object?function(t){t!==h.currentVAO&&(e.oes_vertex_array_object.bindVertexArrayOES(t?t.vao:null),h.currentVAO=t)}:function(n){if(n!==h.currentVAO){if(n)n.bindAttrs();else for(var r=e.angle_instanced_arrays,i=0;i<l.length;++i){var a=l[i];a.buffer?(t.enableVertexAttribArray(i),t.vertexAttribPointer(i,a.size,a.type,a.normalized,a.stride,a.offfset),r&&r.vertexAttribDivisorANGLE(i,a.divisor)):(t.disableVertexAttribArray(i),t.vertexAttrib4f(i,a.x,a.y,a.z,a.w))}h.currentVAO=n}},clear:e.oes_vertex_array_object?function(){X(u).forEach((function(t){t.destroy()}))}:function(){}};return a.prototype.bindAttrs=function(){for(var n=e.angle_instanced_arrays,r=this.attributes,i=0;i<r.length;++i){var a=r[i];a.buffer?(t.enableVertexAttribArray(i),t.bindBuffer(34962,a.buffer.buffer),t.vertexAttribPointer(i,a.size,a.type,a.normalized,a.stride,a.offset),n&&n.vertexAttribDivisorANGLE(i,a.divisor)):(t.disableVertexAttribArray(i),t.vertexAttrib4f(i,a.x,a.y,a.z,a.w))}for(n=r.length;n<o;++n)t.disableVertexAttribArray(n)},a.prototype.refresh=function(){var t=e.oes_vertex_array_object;t&&(t.bindVertexArrayOES(this.vao),this.bindAttrs(),h.currentVAO=this)},a.prototype.destroy=function(){if(this.vao){var t=e.oes_vertex_array_object;this===h.currentVAO&&(h.currentVAO=null,t.bindVertexArrayOES(null)),t.deleteVertexArrayOES(this.vao),this.vao=null}u[this.id]&&(delete u[this.id],--r.vaoCount)},h}function A(t,e,n,r){function i(t,e,n,r){this.name=t,this.id=e,this.location=n,this.info=r}function a(t,e){for(var n=0;n<t.length;++n)if(t[n].id===e.id)return void(t[n].location=e.location);t.push(e)}function o(n,r,i){if(!(o=(i=35632===n?c:u)[r])){var a=e.str(r),o=t.createShader(n);t.shaderSource(o,a),t.compileShader(o),i[r]=o}return o}function s(t,e){this.id=f++,this.fragId=t,this.vertId=e,this.program=null,this.uniforms=[],this.attributes=[],r.profile&&(this.stats={uniformsCount:0,attributesCount:0})}function l(n,s,l){var c;c=o(35632,n.fragId);var u=o(35633,n.vertId);if(s=n.program=t.createProgram(),t.attachShader(s,c),t.attachShader(s,u),l)for(c=0;c<l.length;++c)t.bindAttribLocation(s,(u=l[c])[0],u[1]);t.linkProgram(s),u=t.getProgramParameter(s,35718),r.profile&&(n.stats.uniformsCount=u);var h=n.uniforms;for(c=0;c<u;++c)if(l=t.getActiveUniform(s,c))if(1<l.size)for(var d=0;d<l.size;++d){var f=l.name.replace(\"[0]\",\"[\"+d+\"]\");a(h,new i(f,e.id(f),t.getUniformLocation(s,f),l))}else a(h,new i(l.name,e.id(l.name),t.getUniformLocation(s,l.name),l));for(u=t.getProgramParameter(s,35721),r.profile&&(n.stats.attributesCount=u),n=n.attributes,c=0;c<u;++c)(l=t.getActiveAttrib(s,c))&&a(n,new i(l.name,e.id(l.name),t.getAttribLocation(s,l.name),l))}var c={},u={},h={},d=[],f=0;return r.profile&&(n.getMaxUniformsCount=function(){var t=0;return d.forEach((function(e){e.stats.uniformsCount>t&&(t=e.stats.uniformsCount)})),t},n.getMaxAttributesCount=function(){var t=0;return d.forEach((function(e){e.stats.attributesCount>t&&(t=e.stats.attributesCount)})),t}),{clear:function(){var e=t.deleteShader.bind(t);X(c).forEach(e),c={},X(u).forEach(e),u={},d.forEach((function(e){t.deleteProgram(e.program)})),d.length=0,h={},n.shaderCount=0},program:function(t,e,r,i){var a=h[e];a||(a=h[e]={});var o=a[t];return o&&!i?o:(e=new s(e,t),n.shaderCount++,l(e,r,i),o||(a[t]=e),d.push(e),e)},restore:function(){c={},u={};for(var t=0;t<d.length;++t)l(d[t],null,d[t].attributes.map((function(t){return[t.location,t.name]})))},shader:o,frag:-1,vert:-1}}function L(t,e,n,r,i,a,o){function s(i){var a;a=null===e.next?5121:e.next.colorAttachments[0].texture._texture.type;var o=0,s=0,l=r.framebufferWidth,c=r.framebufferHeight,u=null;return G(i)?u=i:i&&(o=0|i.x,s=0|i.y,l=0|(i.width||r.framebufferWidth-o),c=0|(i.height||r.framebufferHeight-s),u=i.data||null),n(),i=l*c*4,u||(5121===a?u=new Uint8Array(i):5126===a&&(u=u||new Float32Array(i))),t.pixelStorei(3333,4),t.readPixels(o,s,l,c,6408,a,u),u}return function(t){return t&&\"framebuffer\"in t?function(t){var n;return e.setFBO({framebuffer:t.framebuffer},(function(){n=s(t)})),n}(t):s(t)}}function C(t){return Array.prototype.slice.call(t)}function E(t){return C(t).join(\"\")}function O(){function t(){var t=[],e=[];return B((function(){t.push.apply(t,C(arguments))}),{def:function(){var r=\"v\"+n++;return e.push(r),0<arguments.length&&(t.push(r,\"=\"),t.push.apply(t,C(arguments)),t.push(\";\")),r},toString:function(){return E([0<e.length?\"var \"+e.join(\",\")+\";\":\"\",E(t)])}})}function e(){function e(t,e){r(t,e,\"=\",n.def(t,e),\";\")}var n=t(),r=t(),i=n.toString,a=r.toString;return B((function(){n.apply(n,C(arguments))}),{def:n.def,entry:n,exit:r,save:e,set:function(t,r,i){e(t,r),n(t,r,\"=\",i,\";\")},toString:function(){return i()+a()}})}var n=0,r=[],i=[],a=t(),o={};return{global:a,link:function(t){for(var e=0;e<i.length;++e)if(i[e]===t)return r[e];return e=\"g\"+n++,r.push(e),i.push(t),e},block:t,proc:function(t,n){function r(){var t=\"a\"+i.length;return i.push(t),t}var i=[];n=n||0;for(var a=0;a<n;++a)r();var s=(a=e()).toString;return o[t]=B(a,{arg:r,toString:function(){return E([\"function(\",i.join(),\"){\",s(),\"}\"])}})},scope:e,cond:function(){var t=E(arguments),n=e(),r=e(),i=n.toString,a=r.toString;return B(n,{then:function(){return n.apply(n,C(arguments)),this},else:function(){return r.apply(r,C(arguments)),this},toString:function(){var e=a();return e&&(e=\"else{\"+e+\"}\"),E([\"if(\",t,\"){\",i(),\"}\",e])}})},compile:function(){var t=['\"use strict\";',a,\"return {\"];Object.keys(o).forEach((function(e){t.push('\"',e,'\":',o[e].toString(),\",\")})),t.push(\"}\");var e=E(t).replace(/;/g,\";\\n\").replace(/}/g,\"}\\n\").replace(/{/g,\"{\\n\");return Function.apply(null,r.concat(e)).apply(null,i)}}}function D(t){return Array.isArray(t)||G(t)||s(t)}function I(t){return t.sort((function(t,e){return\"viewport\"===t?-1:\"viewport\"===e?1:t<e?-1:1}))}function P(t,e,n,r){this.thisDep=t,this.contextDep=e,this.propDep=n,this.append=r}function R(t){return t&&!(t.thisDep||t.contextDep||t.propDep)}function z(t){return new P(!1,!1,!1,t)}function j(t,e){var n=t.type;return 0===n?new P(!0,1<=(n=t.data.length),2<=n,e):4===n?new P((n=t.data).thisDep,n.contextDep,n.propDep,e):new P(3===n,2===n,1===n,e)}function F(t,e,n,r,a,o,s,l,c,u,h,d,f,p,g){function y(t){return t.replace(\".\",\"_\")}function v(t,e,n){var r=y(t);rt.push(t),et[r]=tt[r]=!!n,it[r]=e}function _(t,e,n){var r=y(t);rt.push(t),Array.isArray(n)?(tt[r]=n.slice(),et[r]=n.slice()):tt[r]=et[r]=n,at[r]=e}function b(){var t=O(),n=t.link,r=t.global;t.id=lt++,t.batchId=\"0\";var i=n(ot),a=t.shared={props:\"a0\"};Object.keys(ot).forEach((function(t){a[t]=r.def(i,\".\",t)}));var o=t.next={},s=t.current={};Object.keys(at).forEach((function(t){Array.isArray(tt[t])&&(o[t]=r.def(a.next,\".\",t),s[t]=r.def(a.current,\".\",t))}));var l=t.constants={};Object.keys(st).forEach((function(t){l[t]=r.def(JSON.stringify(st[t]))})),t.invoke=function(e,r){switch(r.type){case 0:var i=[\"this\",a.context,a.props,t.batchId];return e.def(n(r.data),\".call(\",i.slice(0,Math.max(r.data.length+1,4)),\")\");case 1:return e.def(a.props,r.data);case 2:return e.def(a.context,r.data);case 3:return e.def(\"this\",r.data);case 4:return r.data.append(t,e),r.data.ref}},t.attribCache={};var c={};return t.scopeAttrib=function(t){if((t=e.id(t))in c)return c[t];var r=u.scope[t];return r||(r=u.scope[t]=new Z),c[t]=n(r)},t}function x(t,e){var n=t.static,r=t.dynamic;if(\"framebuffer\"in n){var i=n.framebuffer;return i?(i=l.getFramebuffer(i),z((function(t,e){var n=t.link(i),r=t.shared;return e.set(r.framebuffer,\".next\",n),e.set(r=r.context,\".framebufferWidth\",n+\".width\"),e.set(r,\".framebufferHeight\",n+\".height\"),n}))):z((function(t,e){var n=t.shared;return e.set(n.framebuffer,\".next\",\"null\"),e.set(n=n.context,\".framebufferWidth\",n+\".drawingBufferWidth\"),e.set(n,\".framebufferHeight\",n+\".drawingBufferHeight\"),\"null\"}))}if(\"framebuffer\"in r){var a=r.framebuffer;return j(a,(function(t,e){var n=t.invoke(e,a),r=t.shared,i=r.framebuffer;return n=e.def(i,\".getFramebuffer(\",n,\")\"),e.set(i,\".next\",n),e.set(r=r.context,\".framebufferWidth\",n+\"?\"+n+\".width:\"+r+\".drawingBufferWidth\"),e.set(r,\".framebufferHeight\",n+\"?\"+n+\".height:\"+r+\".drawingBufferHeight\"),n}))}return null}function w(t,n,r){function i(t){if(t in a){var n=e.id(a[t]);return(t=z((function(){return n}))).id=n,t}if(t in o){var r=o[t];return j(r,(function(t,e){var n=t.invoke(e,r);return e.def(t.shared.strings,\".id(\",n,\")\")}))}return null}var a=t.static,o=t.dynamic,s=i(\"frag\"),l=i(\"vert\"),c=null;return R(s)&&R(l)?(c=h.program(l.id,s.id,null,r),t=z((function(t,e){return t.link(c)}))):t=new P(s&&s.thisDep||l&&l.thisDep,s&&s.contextDep||l&&l.contextDep,s&&s.propDep||l&&l.propDep,(function(t,e){var n,r,i=t.shared.shader;return n=s?s.append(t,e):e.def(i,\".\",\"frag\"),r=l?l.append(t,e):e.def(i,\".\",\"vert\"),e.def(i+\".program(\"+r+\",\"+n+\")\")})),{frag:s,vert:l,progVar:t,program:c}}function k(t,e){function n(t,e){if(t in r){var n=0|r[t];return z((function(t,r){return e&&(t.OFFSET=n),n}))}if(t in i){var o=i[t];return j(o,(function(t,n){var r=t.invoke(n,o);return e&&(t.OFFSET=r),r}))}return e&&a?z((function(t,e){return t.OFFSET=\"0\",0})):null}var r=t.static,i=t.dynamic,a=function(){if(\"elements\"in r){var t=r.elements;D(t)?t=o.getElements(o.create(t,!0)):t&&(t=o.getElements(t));var e=z((function(e,n){if(t){var r=e.link(t);return e.ELEMENTS=r}return e.ELEMENTS=null}));return e.value=t,e}if(\"elements\"in i){var n=i.elements;return j(n,(function(t,e){var r=(i=t.shared).isBufferArgs,i=i.elements,a=t.invoke(e,n),o=e.def(\"null\");return r=e.def(r,\"(\",a,\")\"),a=t.cond(r).then(o,\"=\",i,\".createStream(\",a,\");\").else(o,\"=\",i,\".getElements(\",a,\");\"),e.entry(a),e.exit(t.cond(r).then(i,\".destroyStream(\",o,\");\")),t.ELEMENTS=o}))}return null}(),s=n(\"offset\",!0);return{elements:a,primitive:function(){if(\"primitive\"in r){var t=r.primitive;return z((function(e,n){return nt[t]}))}if(\"primitive\"in i){var e=i.primitive;return j(e,(function(t,n){var r=t.constants.primTypes,i=t.invoke(n,e);return n.def(r,\"[\",i,\"]\")}))}return a?R(a)?z(a.value?function(t,e){return e.def(t.ELEMENTS,\".primType\")}:function(){return 4}):new P(a.thisDep,a.contextDep,a.propDep,(function(t,e){var n=t.ELEMENTS;return e.def(n,\"?\",n,\".primType:\",4)})):null}(),count:function(){if(\"count\"in r){var t=0|r.count;return z((function(){return t}))}if(\"count\"in i){var e=i.count;return j(e,(function(t,n){return t.invoke(n,e)}))}return a?R(a)?a?s?new P(s.thisDep,s.contextDep,s.propDep,(function(t,e){return e.def(t.ELEMENTS,\".vertCount-\",t.OFFSET)})):z((function(t,e){return e.def(t.ELEMENTS,\".vertCount\")})):z((function(){return-1})):new P(a.thisDep||s.thisDep,a.contextDep||s.contextDep,a.propDep||s.propDep,(function(t,e){var n=t.ELEMENTS;return t.OFFSET?e.def(n,\"?\",n,\".vertCount-\",t.OFFSET,\":-1\"):e.def(n,\"?\",n,\".vertCount:-1\")})):null}(),instances:n(\"instances\",!1),offset:s}}function M(t,n){var r=t.static,i=t.dynamic,o={};return Object.keys(r).forEach((function(t){var n=r[t],i=e.id(t),s=new Z;if(D(n))s.state=1,s.buffer=a.getBuffer(a.create(n,34962,!1,!0)),s.type=0;else if(c=a.getBuffer(n))s.state=1,s.buffer=c,s.type=0;else if(\"constant\"in n){var l=n.constant;s.buffer=\"null\",s.state=2,\"number\"==typeof l?s.x=l:xt.forEach((function(t,e){e<l.length&&(s[t]=l[e])}))}else{var c=D(n.buffer)?a.getBuffer(a.create(n.buffer,34962,!1,!0)):a.getBuffer(n.buffer),u=0|n.offset,h=0|n.stride,d=0|n.size,f=!!n.normalized,p=0;\"type\"in n&&(p=K[n.type]),n=0|n.divisor,s.buffer=c,s.state=1,s.size=d,s.normalized=f,s.type=p||c.dtype,s.offset=u,s.stride=h,s.divisor=n}o[t]=z((function(t,e){var n=t.attribCache;if(i in n)return n[i];var r={isStream:!1};return Object.keys(s).forEach((function(t){r[t]=s[t]})),s.buffer&&(r.buffer=t.link(s.buffer),r.type=r.type||r.buffer+\".dtype\"),n[i]=r}))})),Object.keys(i).forEach((function(t){var e=i[t];o[t]=j(e,(function(t,n){function r(t){n(l[t],\"=\",i,\".\",t,\"|0;\")}var i=t.invoke(n,e),a=t.constants,o=(s=t.shared).isBufferArgs,s=s.buffer,l={isStream:n.def(!1)},c=new Z;c.state=1,Object.keys(c).forEach((function(t){l[t]=n.def(\"\"+c[t])}));var u=l.buffer,h=l.type;return n(\"if(\",o,\"(\",i,\")){\",l.isStream,\"=true;\",u,\"=\",s,\".createStream(\",34962,\",\",i,\");\",h,\"=\",u,\".dtype;\",\"}else{\",u,\"=\",s,\".getBuffer(\",i,\");\",\"if(\",u,\"){\",h,\"=\",u,\".dtype;\",'}else if(\"constant\" in ',i,\"){\",l.state,\"=\",2,\";\",\"if(typeof \"+i+'.constant === \"number\"){',l[xt[0]],\"=\",i,\".constant;\",xt.slice(1).map((function(t){return l[t]})).join(\"=\"),\"=0;\",\"}else{\",xt.map((function(t,e){return l[t]+\"=\"+i+\".constant.length>\"+e+\"?\"+i+\".constant[\"+e+\"]:0;\"})).join(\"\"),\"}}else{\",\"if(\",o,\"(\",i,\".buffer)){\",u,\"=\",s,\".createStream(\",34962,\",\",i,\".buffer);\",\"}else{\",u,\"=\",s,\".getBuffer(\",i,\".buffer);\",\"}\",h,'=\"type\" in ',i,\"?\",a.glTypes,\"[\",i,\".type]:\",u,\".dtype;\",l.normalized,\"=!!\",i,\".normalized;\"),r(\"size\"),r(\"offset\"),r(\"stride\"),r(\"divisor\"),n(\"}}\"),n.exit(\"if(\",l.isStream,\"){\",s,\".destroyStream(\",u,\");\",\"}\"),l}))})),o}function T(t,e,r,a,o){function s(t){var e=c[t];e&&(d[t]=e)}var l=function(t,e){if(\"string\"==typeof(n=t.static).frag&&\"string\"==typeof n.vert){if(0<Object.keys(e.dynamic).length)return null;var n=e.static,r=Object.keys(n);if(0<r.length&&\"number\"==typeof n[r[0]]){for(var i=[],a=0;a<r.length;++a)i.push([0|n[r[a]],r[a]]);return i}}return null}(t,e),c=function(t,e,n){function r(t){if(t in i){var n=i[t];t=!0;var r,o,s=0|n.x,l=0|n.y;return\"width\"in n?r=0|n.width:t=!1,\"height\"in n?o=0|n.height:t=!1,new P(!t&&e&&e.thisDep,!t&&e&&e.contextDep,!t&&e&&e.propDep,(function(t,e){var i=t.shared.context,a=r;\"width\"in n||(a=e.def(i,\".\",\"framebufferWidth\",\"-\",s));var c=o;return\"height\"in n||(c=e.def(i,\".\",\"framebufferHeight\",\"-\",l)),[s,l,a,c]}))}if(t in a){var c=a[t];return t=j(c,(function(t,e){var n=t.invoke(e,c),r=t.shared.context,i=e.def(n,\".x|0\"),a=e.def(n,\".y|0\");return[i,a,e.def('\"width\" in ',n,\"?\",n,\".width|0:\",\"(\",r,\".\",\"framebufferWidth\",\"-\",i,\")\"),n=e.def('\"height\" in ',n,\"?\",n,\".height|0:\",\"(\",r,\".\",\"framebufferHeight\",\"-\",a,\")\")]})),e&&(t.thisDep=t.thisDep||e.thisDep,t.contextDep=t.contextDep||e.contextDep,t.propDep=t.propDep||e.propDep),t}return e?new P(e.thisDep,e.contextDep,e.propDep,(function(t,e){var n=t.shared.context;return[0,0,e.def(n,\".\",\"framebufferWidth\"),e.def(n,\".\",\"framebufferHeight\")]})):null}var i=t.static,a=t.dynamic;if(t=r(\"viewport\")){var o=t;t=new P(t.thisDep,t.contextDep,t.propDep,(function(t,e){var n=o.append(t,e),r=t.shared.context;return e.set(r,\".viewportWidth\",n[2]),e.set(r,\".viewportHeight\",n[3]),n}))}return{viewport:t,scissor_box:r(\"scissor.box\")}}(t,p=x(t)),h=k(t),d=function(t,e){var n=t.static,r=t.dynamic,a={};return rt.forEach((function(t){function e(e,i){if(t in n){var s=e(n[t]);a[o]=z((function(){return s}))}else if(t in r){var l=r[t];a[o]=j(l,(function(t,e){return i(t,e,t.invoke(e,l))}))}}var o=y(t);switch(t){case\"cull.enable\":case\"blend.enable\":case\"dither\":case\"stencil.enable\":case\"depth.enable\":case\"scissor.enable\":case\"polygonOffset.enable\":case\"sample.alpha\":case\"sample.enable\":case\"depth.mask\":return e((function(t){return t}),(function(t,e,n){return n}));case\"depth.func\":return e((function(t){return Mt[t]}),(function(t,e,n){return e.def(t.constants.compareFuncs,\"[\",n,\"]\")}));case\"depth.range\":return e((function(t){return t}),(function(t,e,n){return[e.def(\"+\",n,\"[0]\"),e=e.def(\"+\",n,\"[1]\")]}));case\"blend.func\":return e((function(t){return[kt[\"srcRGB\"in t?t.srcRGB:t.src],kt[\"dstRGB\"in t?t.dstRGB:t.dst],kt[\"srcAlpha\"in t?t.srcAlpha:t.src],kt[\"dstAlpha\"in t?t.dstAlpha:t.dst]]}),(function(t,e,n){function r(t,r){return e.def('\"',t,r,'\" in ',n,\"?\",n,\".\",t,r,\":\",n,\".\",t)}t=t.constants.blendFuncs;var i=r(\"src\",\"RGB\"),a=r(\"dst\",\"RGB\"),o=(i=e.def(t,\"[\",i,\"]\"),e.def(t,\"[\",r(\"src\",\"Alpha\"),\"]\"));return[i,a=e.def(t,\"[\",a,\"]\"),o,t=e.def(t,\"[\",r(\"dst\",\"Alpha\"),\"]\")]}));case\"blend.equation\":return e((function(t){return\"string\"==typeof t?[J[t],J[t]]:\"object\"==typeof t?[J[t.rgb],J[t.alpha]]:void 0}),(function(t,e,n){var r=t.constants.blendEquations,i=e.def(),a=e.def();return(t=t.cond(\"typeof \",n,'===\"string\"')).then(i,\"=\",a,\"=\",r,\"[\",n,\"];\"),t.else(i,\"=\",r,\"[\",n,\".rgb];\",a,\"=\",r,\"[\",n,\".alpha];\"),e(t),[i,a]}));case\"blend.color\":return e((function(t){return i(4,(function(e){return+t[e]}))}),(function(t,e,n){return i(4,(function(t){return e.def(\"+\",n,\"[\",t,\"]\")}))}));case\"stencil.mask\":return e((function(t){return 0|t}),(function(t,e,n){return e.def(n,\"|0\")}));case\"stencil.func\":return e((function(t){return[Mt[t.cmp||\"keep\"],t.ref||0,\"mask\"in t?t.mask:-1]}),(function(t,e,n){return[t=e.def('\"cmp\" in ',n,\"?\",t.constants.compareFuncs,\"[\",n,\".cmp]\",\":\",7680),e.def(n,\".ref|0\"),e=e.def('\"mask\" in ',n,\"?\",n,\".mask|0:-1\")]}));case\"stencil.opFront\":case\"stencil.opBack\":return e((function(e){return[\"stencil.opBack\"===t?1029:1028,Tt[e.fail||\"keep\"],Tt[e.zfail||\"keep\"],Tt[e.zpass||\"keep\"]]}),(function(e,n,r){function i(t){return n.def('\"',t,'\" in ',r,\"?\",a,\"[\",r,\".\",t,\"]:\",7680)}var a=e.constants.stencilOps;return[\"stencil.opBack\"===t?1029:1028,i(\"fail\"),i(\"zfail\"),i(\"zpass\")]}));case\"polygonOffset.offset\":return e((function(t){return[0|t.factor,0|t.units]}),(function(t,e,n){return[e.def(n,\".factor|0\"),e=e.def(n,\".units|0\")]}));case\"cull.face\":return e((function(t){var e=0;return\"front\"===t?e=1028:\"back\"===t&&(e=1029),e}),(function(t,e,n){return e.def(n,'===\"front\"?',1028,\":\",1029)}));case\"lineWidth\":return e((function(t){return t}),(function(t,e,n){return n}));case\"frontFace\":return e((function(t){return St[t]}),(function(t,e,n){return e.def(n+'===\"cw\"?2304:2305')}));case\"colorMask\":return e((function(t){return t.map((function(t){return!!t}))}),(function(t,e,n){return i(4,(function(t){return\"!!\"+n+\"[\"+t+\"]\"}))}));case\"sample.coverage\":return e((function(t){return[\"value\"in t?t.value:1,!!t.invert]}),(function(t,e,n){return[e.def('\"value\" in ',n,\"?+\",n,\".value:1\"),e=e.def(\"!!\",n,\".invert\")]}))}})),a}(t),f=w(t,0,l);s(\"viewport\"),s(y(\"scissor.box\"));var p,g=0<Object.keys(d).length;if((p={framebuffer:p,draw:h,shader:f,state:d,dirty:g,scopeVAO:null,drawVAO:null,useVAO:!1,attributes:{}}).profile=function(t){var e,n=t.static;if(t=t.dynamic,\"profile\"in n){var r=!!n.profile;(e=z((function(t,e){return r}))).enable=r}else if(\"profile\"in t){var i=t.profile;e=j(i,(function(t,e){return t.invoke(e,i)}))}return e}(t),p.uniforms=function(t,e){var n=t.static,r=t.dynamic,a={};return Object.keys(n).forEach((function(t){var e,r=n[t];if(\"number\"==typeof r||\"boolean\"==typeof r)e=z((function(){return r}));else if(\"function\"==typeof r){var o=r._reglType;\"texture2d\"===o||\"textureCube\"===o?e=z((function(t){return t.link(r)})):\"framebuffer\"!==o&&\"framebufferCube\"!==o||(e=z((function(t){return t.link(r.color[0])})))}else m(r)&&(e=z((function(t){return t.global.def(\"[\",i(r.length,(function(t){return r[t]})),\"]\")})));e.value=r,a[t]=e})),Object.keys(r).forEach((function(t){var e=r[t];a[t]=j(e,(function(t,n){return t.invoke(n,e)}))})),a}(r),p.drawVAO=p.scopeVAO=function(t,e){var n=t.static,r=t.dynamic;if(\"vao\"in n){var i=n.vao;return null!==i&&null===u.getVAO(i)&&(i=u.createVAO(i)),z((function(t){return t.link(u.getVAO(i))}))}if(\"vao\"in r){var a=r.vao;return j(a,(function(t,e){var n=t.invoke(e,a);return e.def(t.shared.vao+\".getVAO(\"+n+\")\")}))}return null}(t),!p.drawVAO&&f.program&&!l&&n.angle_instanced_arrays){var v=!0;if(t=f.program.attributes.map((function(t){return t=e.static[t],v=v&&!!t,t})),v&&0<t.length){var _=u.getVAO(u.createVAO(t));p.drawVAO=new P(null,null,null,(function(t,e){return t.link(_)})),p.useVAO=!0}}return l?p.useVAO=!0:p.attributes=M(e),p.context=function(t){var e=t.static,n=t.dynamic,r={};return Object.keys(e).forEach((function(t){var n=e[t];r[t]=z((function(t,e){return\"number\"==typeof n||\"boolean\"==typeof n?\"\"+n:t.link(n)}))})),Object.keys(n).forEach((function(t){var e=n[t];r[t]=j(e,(function(t,n){return t.invoke(n,e)}))})),r}(a),p}function S(t,e,n){var r=t.shared.context,i=t.scope();Object.keys(n).forEach((function(a){e.save(r,\".\"+a),i(r,\".\",a,\"=\",n[a].append(t,e),\";\")})),e(i)}function A(t,e,n,r){var i,a=(s=t.shared).gl,o=s.framebuffer;Q&&(i=e.def(s.extensions,\".webgl_draw_buffers\"));var s=(l=t.constants).drawBuffer,l=l.backBuffer;t=n?n.append(t,e):e.def(o,\".next\"),r||e(\"if(\",t,\"!==\",o,\".cur){\"),e(\"if(\",t,\"){\",a,\".bindFramebuffer(\",36160,\",\",t,\".framebuffer);\"),Q&&e(i,\".drawBuffersWEBGL(\",s,\"[\",t,\".colorAttachments.length]);\"),e(\"}else{\",a,\".bindFramebuffer(\",36160,\",null);\"),Q&&e(i,\".drawBuffersWEBGL(\",l,\");\"),e(\"}\",o,\".cur=\",t,\";\"),r||e(\"}\")}function L(t,e,n){var r=t.shared,a=r.gl,o=t.current,s=t.next,l=r.current,c=r.next,u=t.cond(l,\".dirty\");rt.forEach((function(e){var r,h;if(!((e=y(e))in n.state))if(e in s){r=s[e],h=o[e];var d=i(tt[e].length,(function(t){return u.def(r,\"[\",t,\"]\")}));u(t.cond(d.map((function(t,e){return t+\"!==\"+h+\"[\"+e+\"]\"})).join(\"||\")).then(a,\".\",at[e],\"(\",d,\");\",d.map((function(t,e){return h+\"[\"+e+\"]=\"+t})).join(\";\"),\";\"))}else r=u.def(c,\".\",e),d=t.cond(r,\"!==\",l,\".\",e),u(d),e in it?d(t.cond(r).then(a,\".enable(\",it[e],\");\").else(a,\".disable(\",it[e],\");\"),l,\".\",e,\"=\",r,\";\"):d(a,\".\",at[e],\"(\",r,\");\",l,\".\",e,\"=\",r,\";\")})),0===Object.keys(n.state).length&&u(l,\".dirty=false;\"),e(u)}function C(t,e,n,r){var i=t.shared,a=t.current,o=i.current,s=i.gl;I(Object.keys(n)).forEach((function(i){var l=n[i];if(!r||r(l)){var c=l.append(t,e);if(it[i]){var u=it[i];R(l)?e(s,c?\".enable(\":\".disable(\",u,\");\"):e(t.cond(c).then(s,\".enable(\",u,\");\").else(s,\".disable(\",u,\");\")),e(o,\".\",i,\"=\",c,\";\")}else if(m(c)){var h=a[i];e(s,\".\",at[i],\"(\",c,\");\",c.map((function(t,e){return h+\"[\"+e+\"]=\"+t})).join(\";\"),\";\")}else e(s,\".\",at[i],\"(\",c,\");\",o,\".\",i,\"=\",c,\";\")}}))}function E(t,e){$&&(t.instancing=e.def(t.shared.extensions,\".angle_instanced_arrays\"))}function F(t,e,n,r,i){function a(){return\"undefined\"==typeof performance?\"Date.now()\":\"performance.now()\"}function o(t){t(c=e.def(),\"=\",a(),\";\"),\"string\"==typeof i?t(d,\".count+=\",i,\";\"):t(d,\".count++;\"),p&&(r?t(u=e.def(),\"=\",m,\".getNumPendingQueries();\"):t(m,\".beginQuery(\",d,\");\"))}function s(t){t(d,\".cpuTime+=\",a(),\"-\",c,\";\"),p&&(r?t(m,\".pushScopeStats(\",u,\",\",m,\".getNumPendingQueries(),\",d,\");\"):t(m,\".endQuery();\"))}function l(t){var n=e.def(f,\".profile\");e(f,\".profile=\",t,\";\"),e.exit(f,\".profile=\",n,\";\")}var c,u,h=t.shared,d=t.stats,f=h.current,m=h.timer;if(n=n.profile){if(R(n))return void(n.enable?(o(e),s(e.exit),l(\"true\")):l(\"false\"));l(n=n.append(t,e))}else n=e.def(f,\".profile\");o(h=t.block()),e(\"if(\",n,\"){\",h,\"}\"),s(t=t.block()),e.exit(\"if(\",n,\"){\",t,\"}\")}function N(t,e,n,r,i){function a(n,r,i){function a(){e(\"if(!\",u,\".buffer){\",l,\".enableVertexAttribArray(\",c,\");}\");var n,a=i.type;n=i.size?e.def(i.size,\"||\",r):r,e(\"if(\",u,\".type!==\",a,\"||\",u,\".size!==\",n,\"||\",f.map((function(t){return u+\".\"+t+\"!==\"+i[t]})).join(\"||\"),\"){\",l,\".bindBuffer(\",34962,\",\",h,\".buffer);\",l,\".vertexAttribPointer(\",[c,n,a,i.normalized,i.stride,i.offset],\");\",u,\".type=\",a,\";\",u,\".size=\",n,\";\",f.map((function(t){return u+\".\"+t+\"=\"+i[t]+\";\"})).join(\"\"),\"}\"),$&&e(\"if(\",u,\".divisor!==\",a=i.divisor,\"){\",t.instancing,\".vertexAttribDivisorANGLE(\",[c,a],\");\",u,\".divisor=\",a,\";}\")}function s(){e(\"if(\",u,\".buffer){\",l,\".disableVertexAttribArray(\",c,\");\",u,\".buffer=null;\",\"}if(\",xt.map((function(t,e){return u+\".\"+t+\"!==\"+d[e]})).join(\"||\"),\"){\",l,\".vertexAttrib4f(\",c,\",\",d,\");\",xt.map((function(t,e){return u+\".\"+t+\"=\"+d[e]+\";\"})).join(\"\"),\"}\")}var l=o.gl,c=e.def(n,\".location\"),u=e.def(o.attributes,\"[\",c,\"]\"),h=i.buffer,d=[i.x,i.y,i.z,i.w],f=[\"buffer\",\"normalized\",\"offset\",\"stride\"];1===(n=i.state)?a():2===n?s():(e(\"if(\",n,\"===\",1,\"){\"),a(),e(\"}else{\"),s(),e(\"}\"))}var o=t.shared;r.forEach((function(r){var o,s=r.name,l=n.attributes[s];if(l){if(!i(l))return;o=l.append(t,e)}else{if(!i(At))return;var c=t.scopeAttrib(s);o={},Object.keys(new Z).forEach((function(t){o[t]=e.def(c,\".\",t)}))}a(t.link(r),function(t){switch(t){case 35664:case 35667:case 35671:return 2;case 35665:case 35668:case 35672:return 3;case 35666:case 35669:case 35673:return 4;default:return 1}}(r.info.type),o)}))}function B(t,n,r,a,o){for(var s,l=t.shared,c=l.gl,u=0;u<a.length;++u){var h,d=(g=a[u]).name,f=g.info.type,p=r.uniforms[d],g=t.link(g)+\".location\";if(p){if(!o(p))continue;if(R(p)){if(d=p.value,35678===f||35680===f)n(c,\".uniform1i(\",g,\",\",(f=t.link(d._texture||d.color[0]._texture))+\".bind());\"),n.exit(f,\".unbind();\");else if(35674===f||35675===f||35676===f)p=2,35675===f?p=3:35676===f&&(p=4),n(c,\".uniformMatrix\",p,\"fv(\",g,\",false,\",d=t.global.def(\"new Float32Array([\"+Array.prototype.slice.call(d)+\"])\"),\");\");else{switch(f){case 5126:s=\"1f\";break;case 35664:s=\"2f\";break;case 35665:s=\"3f\";break;case 35666:s=\"4f\";break;case 35670:case 5124:s=\"1i\";break;case 35671:case 35667:s=\"2i\";break;case 35672:case 35668:s=\"3i\";break;case 35673:s=\"4i\";break;case 35669:s=\"4i\"}n(c,\".uniform\",s,\"(\",g,\",\",m(d)?Array.prototype.slice.call(d):d,\");\")}continue}h=p.append(t,n)}else{if(!o(At))continue;h=n.def(l.uniforms,\"[\",e.id(d),\"]\")}switch(35678===f?n(\"if(\",h,\"&&\",h,'._reglType===\"framebuffer\"){',h,\"=\",h,\".color[0];\",\"}\"):35680===f&&n(\"if(\",h,\"&&\",h,'._reglType===\"framebufferCube\"){',h,\"=\",h,\".color[0];\",\"}\"),d=1,f){case 35678:case 35680:f=n.def(h,\"._texture\"),n(c,\".uniform1i(\",g,\",\",f,\".bind());\"),n.exit(f,\".unbind();\");continue;case 5124:case 35670:s=\"1i\";break;case 35667:case 35671:s=\"2i\",d=2;break;case 35668:case 35672:s=\"3i\",d=3;break;case 35669:case 35673:s=\"4i\",d=4;break;case 5126:s=\"1f\";break;case 35664:s=\"2f\",d=2;break;case 35665:s=\"3f\",d=3;break;case 35666:s=\"4f\",d=4;break;case 35674:s=\"Matrix2fv\";break;case 35675:s=\"Matrix3fv\";break;case 35676:s=\"Matrix4fv\"}if(n(c,\".uniform\",s,\"(\",g,\",\"),\"M\"===s.charAt(0)){g=Math.pow(f-35674+2,2);var y=t.global.def(\"new Float32Array(\",g,\")\");n(\"false,(Array.isArray(\",h,\")||\",h,\" instanceof Float32Array)?\",h,\":(\",i(g,(function(t){return y+\"[\"+t+\"]=\"+h+\"[\"+t+\"]\"})),\",\",y,\")\")}else n(1<d?i(d,(function(t){return h+\"[\"+t+\"]\"})):h);n(\");\")}}function Y(t,e,n,r){function i(i){var a=d[i];return a?a.append(t,a.contextDep&&r.contextDynamic||a.propDep?n:e):e.def(h,\".\",i)}function a(){function t(){n(l,\".drawElementsInstancedANGLE(\",[p,g,y,m+\"<<((\"+y+\"-5121)>>1)\",s],\");\")}function e(){n(l,\".drawArraysInstancedANGLE(\",[p,m,g,s],\");\")}f?v?t():(n(\"if(\",f,\"){\"),t(),n(\"}else{\"),e(),n(\"}\")):e()}function o(){function t(){n(u+\".drawElements(\"+[p,g,y,m+\"<<((\"+y+\"-5121)>>1)\"]+\");\")}function e(){n(u+\".drawArrays(\"+[p,m,g]+\");\")}f?v?t():(n(\"if(\",f,\"){\"),t(),n(\"}else{\"),e(),n(\"}\")):e()}var s,l,c=t.shared,u=c.gl,h=c.draw,d=r.draw,f=function(){var i=d.elements,a=e;return i?((i.contextDep&&r.contextDynamic||i.propDep)&&(a=n),i=i.append(t,a)):i=a.def(h,\".\",\"elements\"),i&&a(\"if(\"+i+\")\"+u+\".bindBuffer(34963,\"+i+\".buffer.buffer);\"),i}(),p=i(\"primitive\"),m=i(\"offset\"),g=function(){var i=d.count,a=e;return i?((i.contextDep&&r.contextDynamic||i.propDep)&&(a=n),i=i.append(t,a)):i=a.def(h,\".\",\"count\"),i}();if(\"number\"==typeof g){if(0===g)return}else n(\"if(\",g,\"){\"),n.exit(\"}\");$&&(s=i(\"instances\"),l=t.instancing);var y=f+\".type\",v=d.elements&&R(d.elements);$&&(\"number\"!=typeof s||0<=s)?\"string\"==typeof s?(n(\"if(\",s,\">0){\"),a(),n(\"}else if(\",s,\"<0){\"),o(),n(\"}\")):a():o()}function V(t,e,n,r,i){return i=(e=b()).proc(\"body\",i),$&&(e.instancing=i.def(e.shared.extensions,\".angle_instanced_arrays\")),t(e,i,n,r),e.compile().body}function U(t,e,n,r){E(t,e),n.useVAO?n.drawVAO?e(t.shared.vao,\".setVAO(\",n.drawVAO.append(t,e),\");\"):e(t.shared.vao,\".setVAO(\",t.shared.vao,\".targetVAO);\"):(e(t.shared.vao,\".setVAO(null);\"),N(t,e,n,r.attributes,(function(){return!0}))),B(t,e,n,r.uniforms,(function(){return!0})),Y(t,e,e,n)}function W(t,e,n,r){function i(){return!0}t.batchId=\"a1\",E(t,e),N(t,e,n,r.attributes,i),B(t,e,n,r.uniforms,i),Y(t,e,e,n)}function q(t,e,n,r){function i(t){return t.contextDep&&o||t.propDep}function a(t){return!i(t)}E(t,e);var o=n.contextDep,s=e.def(),l=e.def();t.shared.props=l,t.batchId=s;var c=t.scope(),u=t.scope();e(c.entry,\"for(\",s,\"=0;\",s,\"<\",\"a1\",\";++\",s,\"){\",l,\"=\",\"a0\",\"[\",s,\"];\",u,\"}\",c.exit),n.needsContext&&S(t,u,n.context),n.needsFramebuffer&&A(t,u,n.framebuffer),C(t,u,n.state,i),n.profile&&i(n.profile)&&F(t,u,n,!1,!0),r?(n.useVAO?n.drawVAO?i(n.drawVAO)?u(t.shared.vao,\".setVAO(\",n.drawVAO.append(t,u),\");\"):c(t.shared.vao,\".setVAO(\",n.drawVAO.append(t,c),\");\"):c(t.shared.vao,\".setVAO(\",t.shared.vao,\".targetVAO);\"):(c(t.shared.vao,\".setVAO(null);\"),N(t,c,n,r.attributes,a),N(t,u,n,r.attributes,i)),B(t,c,n,r.uniforms,a),B(t,u,n,r.uniforms,i),Y(t,c,u,n)):(e=t.global.def(\"{}\"),r=n.shader.progVar.append(t,u),l=u.def(r,\".id\"),c=u.def(e,\"[\",l,\"]\"),u(t.shared.gl,\".useProgram(\",r,\".program);\",\"if(!\",c,\"){\",c,\"=\",e,\"[\",l,\"]=\",t.link((function(e){return V(W,t,n,e,2)})),\"(\",r,\");}\",c,\".call(this,a0[\",s,\"],\",s,\");\"))}function G(t,n){function r(e){var r=n.shader[e];r&&i.set(a.shader,\".\"+e,r.append(t,i))}var i=t.proc(\"scope\",3);t.batchId=\"a2\";var a=t.shared,o=a.current;S(t,i,n.context),n.framebuffer&&n.framebuffer.append(t,i),I(Object.keys(n.state)).forEach((function(e){var r=n.state[e].append(t,i);m(r)?r.forEach((function(n,r){i.set(t.next[e],\"[\"+r+\"]\",n)})):i.set(a.next,\".\"+e,r)})),F(t,i,n,!0,!0),[\"elements\",\"offset\",\"count\",\"instances\",\"primitive\"].forEach((function(e){var r=n.draw[e];r&&i.set(a.draw,\".\"+e,\"\"+r.append(t,i))})),Object.keys(n.uniforms).forEach((function(r){i.set(a.uniforms,\"[\"+e.id(r)+\"]\",n.uniforms[r].append(t,i))})),Object.keys(n.attributes).forEach((function(e){var r=n.attributes[e].append(t,i),a=t.scopeAttrib(e);Object.keys(new Z).forEach((function(t){i.set(a,\".\"+t,r[t])}))})),n.scopeVAO&&i.set(a.vao,\".targetVAO\",n.scopeVAO.append(t,i)),r(\"vert\"),r(\"frag\"),0<Object.keys(n.state).length&&(i(o,\".dirty=true;\"),i.exit(o,\".dirty=true;\")),i(\"a1(\",t.shared.context,\",a0,\",t.batchId,\");\")}function X(t,e,n){var r=e.static[n];if(r&&function(t){if(\"object\"==typeof t&&!m(t)){for(var e=Object.keys(t),n=0;n<e.length;++n)if(H.isDynamic(t[e[n]]))return!0;return!1}}(r)){var i=t.global,a=Object.keys(r),o=!1,s=!1,l=!1,c=t.global.def(\"{}\");a.forEach((function(e){var n=r[e];if(H.isDynamic(n))\"function\"==typeof n&&(n=r[e]=H.unbox(n)),e=j(n,null),o=o||e.thisDep,l=l||e.propDep,s=s||e.contextDep;else{switch(i(c,\".\",e,\"=\"),typeof n){case\"number\":i(n);break;case\"string\":i('\"',n,'\"');break;case\"object\":Array.isArray(n)&&i(\"[\",n.join(),\"]\");break;default:i(t.link(n))}i(\";\")}})),e.dynamic[n]=new H.DynamicVariable(4,{thisDep:o,contextDep:s,propDep:l,ref:c,append:function(t,e){a.forEach((function(n){var i=r[n];H.isDynamic(i)&&(i=t.invoke(e,i),e(c,\".\",n,\"=\",i,\";\"))}))}}),delete e.static[n]}}var Z=u.Record,J={add:32774,subtract:32778,\"reverse subtract\":32779};n.ext_blend_minmax&&(J.min=32775,J.max=32776);var $=n.angle_instanced_arrays,Q=n.webgl_draw_buffers,tt={dirty:!0,profile:g.profile},et={},rt=[],it={},at={};v(\"dither\",3024),v(\"blend.enable\",3042),_(\"blend.color\",\"blendColor\",[0,0,0,0]),_(\"blend.equation\",\"blendEquationSeparate\",[32774,32774]),_(\"blend.func\",\"blendFuncSeparate\",[1,0,1,0]),v(\"depth.enable\",2929,!0),_(\"depth.func\",\"depthFunc\",513),_(\"depth.range\",\"depthRange\",[0,1]),_(\"depth.mask\",\"depthMask\",!0),_(\"colorMask\",\"colorMask\",[!0,!0,!0,!0]),v(\"cull.enable\",2884),_(\"cull.face\",\"cullFace\",1029),_(\"frontFace\",\"frontFace\",2305),_(\"lineWidth\",\"lineWidth\",1),v(\"polygonOffset.enable\",32823),_(\"polygonOffset.offset\",\"polygonOffset\",[0,0]),v(\"sample.alpha\",32926),v(\"sample.enable\",32928),_(\"sample.coverage\",\"sampleCoverage\",[1,!1]),v(\"stencil.enable\",2960),_(\"stencil.mask\",\"stencilMask\",-1),_(\"stencil.func\",\"stencilFunc\",[519,0,-1]),_(\"stencil.opFront\",\"stencilOpSeparate\",[1028,7680,7680,7680]),_(\"stencil.opBack\",\"stencilOpSeparate\",[1029,7680,7680,7680]),v(\"scissor.enable\",3089),_(\"scissor.box\",\"scissor\",[0,0,t.drawingBufferWidth,t.drawingBufferHeight]),_(\"viewport\",\"viewport\",[0,0,t.drawingBufferWidth,t.drawingBufferHeight]);var ot={gl:t,context:f,strings:e,next:et,current:tt,draw:d,elements:o,buffer:a,shader:h,attributes:u.state,vao:u,uniforms:c,framebuffer:l,extensions:n,timer:p,isBufferArgs:D},st={primTypes:nt,compareFuncs:Mt,blendFuncs:kt,blendEquations:J,stencilOps:Tt,glTypes:K,orientationType:St};Q&&(st.backBuffer=[1029],st.drawBuffer=i(r.maxDrawbuffers,(function(t){return 0===t?[0]:i(t,(function(t){return 36064+t}))})));var lt=0;return{next:et,current:tt,procs:function(){var t=b(),e=t.proc(\"poll\"),a=t.proc(\"refresh\"),o=t.block();e(o),a(o);var s,l=t.shared,c=l.gl,u=l.next,h=l.current;o(h,\".dirty=false;\"),A(t,e),A(t,a,null,!0),$&&(s=t.link($)),n.oes_vertex_array_object&&a(t.link(n.oes_vertex_array_object),\".bindVertexArrayOES(null);\");for(var d=0;d<r.maxAttributes;++d){var f=a.def(l.attributes,\"[\",d,\"]\"),p=t.cond(f,\".buffer\");p.then(c,\".enableVertexAttribArray(\",d,\");\",c,\".bindBuffer(\",34962,\",\",f,\".buffer.buffer);\",c,\".vertexAttribPointer(\",d,\",\",f,\".size,\",f,\".type,\",f,\".normalized,\",f,\".stride,\",f,\".offset);\").else(c,\".disableVertexAttribArray(\",d,\");\",c,\".vertexAttrib4f(\",d,\",\",f,\".x,\",f,\".y,\",f,\".z,\",f,\".w);\",f,\".buffer=null;\"),a(p),$&&a(s,\".vertexAttribDivisorANGLE(\",d,\",\",f,\".divisor);\")}return a(t.shared.vao,\".currentVAO=null;\",t.shared.vao,\".setVAO(\",t.shared.vao,\".targetVAO);\"),Object.keys(it).forEach((function(n){var r=it[n],i=o.def(u,\".\",n),s=t.block();s(\"if(\",i,\"){\",c,\".enable(\",r,\")}else{\",c,\".disable(\",r,\")}\",h,\".\",n,\"=\",i,\";\"),a(s),e(\"if(\",i,\"!==\",h,\".\",n,\"){\",s,\"}\")})),Object.keys(at).forEach((function(n){var r,s,l=at[n],d=tt[n],f=t.block();f(c,\".\",l,\"(\"),m(d)?(l=d.length,r=t.global.def(u,\".\",n),s=t.global.def(h,\".\",n),f(i(l,(function(t){return r+\"[\"+t+\"]\"})),\");\",i(l,(function(t){return s+\"[\"+t+\"]=\"+r+\"[\"+t+\"];\"})).join(\"\")),e(\"if(\",i(l,(function(t){return r+\"[\"+t+\"]!==\"+s+\"[\"+t+\"]\"})).join(\"||\"),\"){\",f,\"}\")):(r=o.def(u,\".\",n),s=o.def(h,\".\",n),f(r,\");\",h,\".\",n,\"=\",r,\";\"),e(\"if(\",r,\"!==\",s,\"){\",f,\"}\")),a(f)})),t.compile()}(),compile:function(t,e,n,r,i){var a=b();return a.stats=a.link(i),Object.keys(e.static).forEach((function(t){X(a,e,t)})),wt.forEach((function(e){X(a,t,e)})),n=T(t,e,n,r),function(t,e){var n=t.proc(\"draw\",1);E(t,n),S(t,n,e.context),A(t,n,e.framebuffer),L(t,n,e),C(t,n,e.state),F(t,n,e,!1,!0);var r=e.shader.progVar.append(t,n);if(n(t.shared.gl,\".useProgram(\",r,\".program);\"),e.shader.program)U(t,n,e,e.shader.program);else{n(t.shared.vao,\".setVAO(null);\");var i=t.global.def(\"{}\"),a=n.def(r,\".id\"),o=n.def(i,\"[\",a,\"]\");n(t.cond(o).then(o,\".call(this,a0);\").else(o,\"=\",i,\"[\",a,\"]=\",t.link((function(n){return V(U,t,e,n,1)})),\"(\",r,\");\",o,\".call(this,a0);\"))}0<Object.keys(e.state).length&&n(t.shared.current,\".dirty=true;\")}(a,n),G(a,n),function(t,e){function n(t){return t.contextDep&&i||t.propDep}var r=t.proc(\"batch\",2);t.batchId=\"0\",E(t,r);var i=!1,a=!0;Object.keys(e.context).forEach((function(t){i=i||e.context[t].propDep})),i||(S(t,r,e.context),a=!1);var o=!1;if((s=e.framebuffer)?(s.propDep?i=o=!0:s.contextDep&&i&&(o=!0),o||A(t,r,s)):A(t,r,null),e.state.viewport&&e.state.viewport.propDep&&(i=!0),L(t,r,e),C(t,r,e.state,(function(t){return!n(t)})),e.profile&&n(e.profile)||F(t,r,e,!1,\"a1\"),e.contextDep=i,e.needsContext=a,e.needsFramebuffer=o,(a=e.shader.progVar).contextDep&&i||a.propDep)q(t,r,e,null);else if(a=a.append(t,r),r(t.shared.gl,\".useProgram(\",a,\".program);\"),e.shader.program)q(t,r,e,e.shader.program);else{r(t.shared.vao,\".setVAO(null);\");var s=t.global.def(\"{}\"),l=(o=r.def(a,\".id\"),r.def(s,\"[\",o,\"]\"));r(t.cond(l).then(l,\".call(this,a0,a1);\").else(l,\"=\",s,\"[\",o,\"]=\",t.link((function(n){return V(q,t,e,n,2)})),\"(\",a,\");\",l,\".call(this,a0,a1);\"))}0<Object.keys(e.state).length&&r(t.shared.current,\".dirty=true;\")}(a,n),a.compile()}}}function N(t,e){for(var n=0;n<t.length;++n)if(t[n]===e)return n;return-1}var B=function(t,e){for(var n=Object.keys(e),r=0;r<n.length;++r)t[n[r]]=e[n[r]];return t},Y=0,H={DynamicVariable:t,define:function(n,r){return new t(n,e(r+\"\"))},isDynamic:function(e){return\"function\"==typeof e&&!e._reglType||e instanceof t},unbox:function(e,n){return\"function\"==typeof e?new t(0,e):e},accessor:e},V={next:\"function\"==typeof requestAnimationFrame?function(t){return requestAnimationFrame(t)}:function(t){return setTimeout(t,16)},cancel:\"function\"==typeof cancelAnimationFrame?function(t){return cancelAnimationFrame(t)}:clearTimeout},U=\"undefined\"!=typeof performance&&performance.now?function(){return performance.now()}:function(){return+new Date},W=o();W.zero=o();var q=function(t,e){var n=1;e.ext_texture_filter_anisotropic&&(n=t.getParameter(34047));var r=1,i=1;e.webgl_draw_buffers&&(r=t.getParameter(34852),i=t.getParameter(36063));var a=!!e.oes_texture_float;if(a){a=t.createTexture(),t.bindTexture(3553,a),t.texImage2D(3553,0,6408,1,1,0,6408,5126,null);var o=t.createFramebuffer();if(t.bindFramebuffer(36160,o),t.framebufferTexture2D(36160,36064,3553,a,0),t.bindTexture(3553,null),36053!==t.checkFramebufferStatus(36160))a=!1;else{t.viewport(0,0,1,1),t.clearColor(1,0,0,1),t.clear(16384);var s=W.allocType(5126,4);t.readPixels(0,0,1,1,6408,5126,s),t.getError()?a=!1:(t.deleteFramebuffer(o),t.deleteTexture(a),a=1===s[0]),W.freeType(s)}}return s=!0,\"undefined\"!=typeof navigator&&(/MSIE/.test(navigator.userAgent)||/Trident\\//.test(navigator.appVersion)||/Edge/.test(navigator.userAgent))||(s=t.createTexture(),o=W.allocType(5121,36),t.activeTexture(33984),t.bindTexture(34067,s),t.texImage2D(34069,0,6408,3,3,0,6408,5121,o),W.freeType(o),t.bindTexture(34067,null),t.deleteTexture(s),s=!t.getError()),{colorBits:[t.getParameter(3410),t.getParameter(3411),t.getParameter(3412),t.getParameter(3413)],depthBits:t.getParameter(3414),stencilBits:t.getParameter(3415),subpixelBits:t.getParameter(3408),extensions:Object.keys(e).filter((function(t){return!!e[t]})),maxAnisotropic:n,maxDrawbuffers:r,maxColorAttachments:i,pointSizeDims:t.getParameter(33901),lineWidthDims:t.getParameter(33902),maxViewportDims:t.getParameter(3386),maxCombinedTextureUnits:t.getParameter(35661),maxCubeMapSize:t.getParameter(34076),maxRenderbufferSize:t.getParameter(34024),maxTextureUnits:t.getParameter(34930),maxTextureSize:t.getParameter(3379),maxAttributes:t.getParameter(34921),maxVertexUniforms:t.getParameter(36347),maxVertexTextureUnits:t.getParameter(35660),maxVaryingVectors:t.getParameter(36348),maxFragmentUniforms:t.getParameter(36349),glsl:t.getParameter(35724),renderer:t.getParameter(7937),vendor:t.getParameter(7936),version:t.getParameter(7938),readFloat:a,npotTextureCube:s}},G=function(t){return t instanceof Uint8Array||t instanceof Uint16Array||t instanceof Uint32Array||t instanceof Int8Array||t instanceof Int16Array||t instanceof Int32Array||t instanceof Float32Array||t instanceof Float64Array||t instanceof Uint8ClampedArray},X=function(t){return Object.keys(t).map((function(e){return t[e]}))},Z={shape:function(t){for(var e=[];t.length;t=t[0])e.push(t.length);return e},flatten:function(t,e,n,r){var i=1;if(e.length)for(var a=0;a<e.length;++a)i*=e[a];else i=0;switch(n=r||W.allocType(n,i),e.length){case 0:break;case 1:for(r=e[0],e=0;e<r;++e)n[e]=t[e];break;case 2:for(r=e[0],e=e[1],a=i=0;a<r;++a)for(var o=t[a],s=0;s<e;++s)n[i++]=o[s];break;case 3:l(t,e[0],e[1],e[2],n,0);break;default:!function t(e,n,r,i,a){for(var o=1,s=r+1;s<n.length;++s)o*=n[s];var c=n[r];if(4==n.length-r){var u=n[r+1],h=n[r+2];for(n=n[r+3],s=0;s<c;++s)l(e[s],u,h,n,i,a),a+=o}else for(s=0;s<c;++s)t(e[s],n,r+1,i,a),a+=o}(t,e,0,n,0)}return n}},J={\"[object Int8Array]\":5120,\"[object Int16Array]\":5122,\"[object Int32Array]\":5124,\"[object Uint8Array]\":5121,\"[object Uint8ClampedArray]\":5121,\"[object Uint16Array]\":5123,\"[object Uint32Array]\":5125,\"[object Float32Array]\":5126,\"[object Float64Array]\":5121,\"[object ArrayBuffer]\":5121},K={int8:5120,int16:5122,int32:5124,uint8:5121,uint16:5123,uint32:5125,float:5126,float32:5126},$={dynamic:35048,stream:35040,static:35044},Q=Z.flatten,tt=Z.shape,et=[];et[5120]=1,et[5122]=2,et[5124]=4,et[5121]=1,et[5123]=2,et[5125]=4,et[5126]=4;var nt={points:0,point:0,lines:1,line:1,triangles:4,triangle:4,\"line loop\":2,\"line strip\":3,\"triangle strip\":5,\"triangle fan\":6},rt=new Float32Array(1),it=new Uint32Array(rt.buffer),at=[9984,9986,9985,9987],ot=[0,6409,6410,6407,6408],st={};st[6409]=st[6406]=st[6402]=1,st[34041]=st[6410]=2,st[6407]=st[35904]=3,st[6408]=st[35906]=4;var lt=g(\"HTMLCanvasElement\"),ct=g(\"OffscreenCanvas\"),ut=g(\"CanvasRenderingContext2D\"),ht=g(\"ImageBitmap\"),dt=g(\"HTMLImageElement\"),ft=g(\"HTMLVideoElement\"),pt=Object.keys(J).concat([lt,ct,ut,ht,dt,ft]),mt=[];mt[5121]=1,mt[5126]=4,mt[36193]=2,mt[5123]=2,mt[5125]=4;var gt=[];gt[32854]=2,gt[32855]=2,gt[36194]=2,gt[34041]=4,gt[33776]=.5,gt[33777]=.5,gt[33778]=1,gt[33779]=1,gt[35986]=.5,gt[35987]=1,gt[34798]=1,gt[35840]=.5,gt[35841]=.25,gt[35842]=.5,gt[35843]=.25,gt[36196]=.5;var yt=[];yt[32854]=2,yt[32855]=2,yt[36194]=2,yt[33189]=2,yt[36168]=1,yt[34041]=4,yt[35907]=4,yt[34836]=16,yt[34842]=8,yt[34843]=6;var vt=function(t,e,n,r,i){function a(t){this.id=c++,this.refCount=1,this.renderbuffer=t,this.format=32854,this.height=this.width=0,i.profile&&(this.stats={size:0})}function o(e){var n=e.renderbuffer;t.bindRenderbuffer(36161,null),t.deleteRenderbuffer(n),e.renderbuffer=null,e.refCount=0,delete u[e.id],r.renderbufferCount--}var s={rgba4:32854,rgb565:36194,\"rgb5 a1\":32855,depth:33189,stencil:36168,\"depth stencil\":34041};e.ext_srgb&&(s.srgba=35907),e.ext_color_buffer_half_float&&(s.rgba16f=34842,s.rgb16f=34843),e.webgl_color_buffer_float&&(s.rgba32f=34836);var l=[];Object.keys(s).forEach((function(t){l[s[t]]=t}));var c=0,u={};return a.prototype.decRef=function(){0>=--this.refCount&&o(this)},i.profile&&(r.getTotalRenderbufferSize=function(){var t=0;return Object.keys(u).forEach((function(e){t+=u[e].stats.size})),t}),{create:function(e,n){function o(e,n){var r=0,a=0,u=32854;if(\"object\"==typeof e&&e?(\"shape\"in e?(r=0|(a=e.shape)[0],a=0|a[1]):(\"radius\"in e&&(r=a=0|e.radius),\"width\"in e&&(r=0|e.width),\"height\"in e&&(a=0|e.height)),\"format\"in e&&(u=s[e.format])):\"number\"==typeof e?(r=0|e,a=\"number\"==typeof n?0|n:r):e||(r=a=1),r!==c.width||a!==c.height||u!==c.format)return o.width=c.width=r,o.height=c.height=a,c.format=u,t.bindRenderbuffer(36161,c.renderbuffer),t.renderbufferStorage(36161,u,r,a),i.profile&&(c.stats.size=yt[c.format]*c.width*c.height),o.format=l[c.format],o}var c=new a(t.createRenderbuffer());return u[c.id]=c,r.renderbufferCount++,o(e,n),o.resize=function(e,n){var r=0|e,a=0|n||r;return r===c.width&&a===c.height||(o.width=c.width=r,o.height=c.height=a,t.bindRenderbuffer(36161,c.renderbuffer),t.renderbufferStorage(36161,c.format,r,a),i.profile&&(c.stats.size=yt[c.format]*c.width*c.height)),o},o._reglType=\"renderbuffer\",o._renderbuffer=c,i.profile&&(o.stats=c.stats),o.destroy=function(){c.decRef()},o},clear:function(){X(u).forEach(o)},restore:function(){X(u).forEach((function(e){e.renderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,e.renderbuffer),t.renderbufferStorage(36161,e.format,e.width,e.height)})),t.bindRenderbuffer(36161,null)}}},_t=[];_t[6408]=4,_t[6407]=3;var bt=[];bt[5121]=1,bt[5126]=4,bt[36193]=2;var xt=[\"x\",\"y\",\"z\",\"w\"],wt=\"blend.func blend.equation stencil.func stencil.opFront stencil.opBack sample.coverage viewport scissor.box polygonOffset.offset\".split(\" \"),kt={0:0,1:1,zero:0,one:1,\"src color\":768,\"one minus src color\":769,\"src alpha\":770,\"one minus src alpha\":771,\"dst color\":774,\"one minus dst color\":775,\"dst alpha\":772,\"one minus dst alpha\":773,\"constant color\":32769,\"one minus constant color\":32770,\"constant alpha\":32771,\"one minus constant alpha\":32772,\"src alpha saturate\":776},Mt={never:512,less:513,\"<\":513,equal:514,\"=\":514,\"==\":514,\"===\":514,lequal:515,\"<=\":515,greater:516,\">\":516,notequal:517,\"!=\":517,\"!==\":517,gequal:518,\">=\":518,always:519},Tt={0:0,zero:0,keep:7680,replace:7681,increment:7682,decrement:7683,\"increment wrap\":34055,\"decrement wrap\":34056,invert:5386},St={cw:2304,ccw:2305},At=new P(!1,!1,!1,(function(){}));return function(t){function e(){if(0===K.length)T&&T.update(),et=null;else{et=V.next(e),p();for(var t=K.length-1;0<=t;--t){var n=K[t];n&&n(D,null,0)}y.flush(),T&&T.update()}}function i(){!et&&0<K.length&&(et=V.next(e))}function a(){et&&(V.cancel(e),et=null)}function o(t){t.preventDefault(),a(),$.forEach((function(t){t()}))}function s(t){y.getError(),_.restore(),j.restore(),P.restore(),Y.restore(),W.restore(),G.restore(),R.restore(),T&&T.restore(),X.procs.refresh(),i(),Q.forEach((function(t){t()}))}function l(t){function e(t){var e={},n={};return Object.keys(t).forEach((function(r){var i=t[r];H.isDynamic(i)?n[r]=H.unbox(i,r):e[r]=i})),{dynamic:n,static:e}}var n=e(t.context||{}),r=e(t.uniforms||{}),i=e(t.attributes||{}),a=e(function(t){function e(t){if(t in n){var e=n[t];delete n[t],Object.keys(e).forEach((function(r){n[t+\".\"+r]=e[r]}))}}var n=B({},t);return delete n.uniforms,delete n.attributes,delete n.context,delete n.vao,\"stencil\"in n&&n.stencil.op&&(n.stencil.opBack=n.stencil.opFront=n.stencil.op,delete n.stencil.op),e(\"blend\"),e(\"depth\"),e(\"cull\"),e(\"stencil\"),e(\"polygonOffset\"),e(\"scissor\"),e(\"sample\"),\"vao\"in t&&(n.vao=t.vao),n}(t)),o=(n=X.compile(a,i,r,n,t={gpuTime:0,cpuTime:0,count:0})).draw,s=n.batch,l=n.scope,c=[];return B((function(t,e){var n;if(\"function\"==typeof t)return l.call(this,null,t,0);if(\"function\"==typeof e)if(\"number\"==typeof t)for(n=0;n<t;++n)l.call(this,null,e,n);else{if(!Array.isArray(t))return l.call(this,t,e,0);for(n=0;n<t.length;++n)l.call(this,t[n],e,n)}else if(\"number\"==typeof t){if(0<t)return s.call(this,function(t){for(;c.length<t;)c.push(null);return c}(0|t),0|t)}else{if(!Array.isArray(t))return o.call(this,t);if(t.length)return s.call(this,t,t.length)}}),{stats:t})}function c(t,e){var n=0;X.procs.poll();var r=e.color;r&&(y.clearColor(+r[0]||0,+r[1]||0,+r[2]||0,+r[3]||0),n|=16384),\"depth\"in e&&(y.clearDepth(+e.depth),n|=256),\"stencil\"in e&&(y.clearStencil(0|e.stencil),n|=1024),y.clear(n)}function u(t){return K.push(t),i(),{cancel:function(){var e=N(K,t);K[e]=function t(){var e=N(K,t);K[e]=K[K.length-1],--K.length,0>=K.length&&a()}}}}function h(){var t=Z.viewport,e=Z.scissor_box;t[0]=t[1]=e[0]=e[1]=0,D.viewportWidth=D.framebufferWidth=D.drawingBufferWidth=t[2]=e[2]=y.drawingBufferWidth,D.viewportHeight=D.framebufferHeight=D.drawingBufferHeight=t[3]=e[3]=y.drawingBufferHeight}function p(){D.tick+=1,D.time=g(),h(),X.procs.poll()}function m(){h(),X.procs.refresh(),T&&T.update()}function g(){return(U()-C)/1e3}if(!(t=function(t){var e,i,a,o,s=t||{};t={};var l=[],c=[],u=\"undefined\"==typeof window?1:window.devicePixelRatio,h=!1,d=function(t){},f=function(){};if(\"string\"==typeof s?e=document.querySelector(s):\"object\"==typeof s&&(\"string\"==typeof s.nodeName&&\"function\"==typeof s.appendChild&&\"function\"==typeof s.getBoundingClientRect?e=s:\"function\"==typeof s.drawArrays||\"function\"==typeof s.drawElements?a=(o=s).canvas:(\"gl\"in s?o=s.gl:\"canvas\"in s?a=r(s.canvas):\"container\"in s&&(i=r(s.container)),\"attributes\"in s&&(t=s.attributes),\"extensions\"in s&&(l=n(s.extensions)),\"optionalExtensions\"in s&&(c=n(s.optionalExtensions)),\"onDone\"in s&&(d=s.onDone),\"profile\"in s&&(h=!!s.profile),\"pixelRatio\"in s&&(u=+s.pixelRatio))),e&&(\"canvas\"===e.nodeName.toLowerCase()?a=e:i=e),!o){if(!a){if(!(e=function(t,e,n){function r(){var e=window.innerWidth,r=window.innerHeight;t!==document.body&&(e=(r=t.getBoundingClientRect()).right-r.left,r=r.bottom-r.top),a.width=n*e,a.height=n*r,B(a.style,{width:e+\"px\",height:r+\"px\"})}var i,a=document.createElement(\"canvas\");return B(a.style,{border:0,margin:0,padding:0,top:0,left:0}),t.appendChild(a),t===document.body&&(a.style.position=\"absolute\",B(t.style,{margin:0,padding:0})),t!==document.body&&\"function\"==typeof ResizeObserver?(i=new ResizeObserver((function(){setTimeout(r)}))).observe(t):window.addEventListener(\"resize\",r,!1),r(),{canvas:a,onDestroy:function(){i?i.disconnect():window.removeEventListener(\"resize\",r),t.removeChild(a)}}}(i||document.body,0,u)))return null;a=e.canvas,f=e.onDestroy}void 0===t.premultipliedAlpha&&(t.premultipliedAlpha=!0),o=function(t,e){function n(n){try{return t.getContext(n,e)}catch(a){return null}}return n(\"webgl\")||n(\"experimental-webgl\")||n(\"webgl-experimental\")}(a,t)}return o?{gl:o,canvas:a,container:i,extensions:l,optionalExtensions:c,pixelRatio:u,profile:h,onDone:d,onDestroy:f}:(f(),d(\"webgl not supported, try upgrading your browser or graphics drivers http://get.webgl.org\"),null)}(t)))return null;var y=t.gl,v=y.getContextAttributes();y.isContextLost();var _=function(t,e){function n(e){var n;e=e.toLowerCase();try{n=r[e]=t.getExtension(e)}catch(i){}return!!n}for(var r={},i=0;i<e.extensions.length;++i){var a=e.extensions[i];if(!n(a))return e.onDestroy(),e.onDone('\"'+a+'\" extension is not supported by the current WebGL context, try upgrading your system or a different browser'),null}return e.optionalExtensions.forEach(n),{extensions:r,restore:function(){Object.keys(r).forEach((function(t){if(r[t]&&!n(t))throw Error(\"(regl): error restoring extension \"+t)}))}}}(y,t);if(!_)return null;var b=function(){var t={\"\":0},e=[\"\"];return{id:function(n){var r=t[n];return r||(r=t[n]=e.length,e.push(n),r)},str:function(t){return e[t]}}}(),x={vaoCount:0,bufferCount:0,elementsCount:0,framebufferCount:0,shaderCount:0,textureCount:0,cubeCount:0,renderbufferCount:0,maxTextureUnits:0},w=_.extensions,T=function(t,e){function n(){this.endQueryIndex=this.startQueryIndex=-1,this.sum=0,this.stats=null}function r(t,e,r){var i=o.pop()||new n;i.startQueryIndex=t,i.endQueryIndex=e,i.sum=0,i.stats=r,s.push(i)}if(!e.ext_disjoint_timer_query)return null;var i=[],a=[],o=[],s=[],l=[],c=[];return{beginQuery:function(t){var n=i.pop()||e.ext_disjoint_timer_query.createQueryEXT();e.ext_disjoint_timer_query.beginQueryEXT(35007,n),a.push(n),r(a.length-1,a.length,t)},endQuery:function(){e.ext_disjoint_timer_query.endQueryEXT(35007)},pushScopeStats:r,update:function(){var t,n;if(0!==(t=a.length)){c.length=Math.max(c.length,t+1),l.length=Math.max(l.length,t+1),l[0]=0;var r=c[0]=0;for(n=t=0;n<a.length;++n)e.ext_disjoint_timer_query.getQueryObjectEXT(u=a[n],34919)?(r+=e.ext_disjoint_timer_query.getQueryObjectEXT(u,34918),i.push(u)):a[t++]=u,l[n+1]=r,c[n+1]=t;for(a.length=t,n=t=0;n<s.length;++n){var u,h=(r=s[n]).startQueryIndex;r.sum+=l[u=r.endQueryIndex]-l[h],(u=c[u])===(h=c[h])?(r.stats.gpuTime+=r.sum/1e6,o.push(r)):(r.startQueryIndex=h,r.endQueryIndex=u,s[t++]=r)}s.length=t}},getNumPendingQueries:function(){return a.length},clear:function(){i.push.apply(i,a);for(var t=0;t<i.length;t++)e.ext_disjoint_timer_query.deleteQueryEXT(i[t]);a.length=0,i.length=0},restore:function(){a.length=0,i.length=0}}}(0,w),C=U(),E=y.drawingBufferWidth,O=y.drawingBufferHeight,D={tick:0,time:0,viewportWidth:E,viewportHeight:O,framebufferWidth:E,framebufferHeight:O,drawingBufferWidth:E,drawingBufferHeight:O,pixelRatio:t.pixelRatio},I=q(y,w),P=d(y,x,t,(function(t){return R.destroyBuffer(t)})),R=S(y,w,I,x,P),z=f(y,w,P,x),j=A(y,b,x,t),Y=k(y,w,I,(function(){X.procs.poll()}),D,x,t),W=vt(y,w,0,x,t),G=M(y,w,I,Y,W,x),X=F(y,b,w,I,P,z,0,G,{},R,j,{elements:null,primitive:4,count:-1,offset:0,instances:-1},D,T,t),Z=(b=L(y,G,X.procs.poll,D),X.next),J=y.canvas,K=[],$=[],Q=[],tt=[t.onDestroy],et=null;J&&(J.addEventListener(\"webglcontextlost\",o,!1),J.addEventListener(\"webglcontextrestored\",s,!1));var nt=G.setFBO=l({framebuffer:H.define.call(null,1,\"framebuffer\")});return m(),v=B(l,{clear:function(t){if(\"framebuffer\"in t)if(t.framebuffer&&\"framebufferCube\"===t.framebuffer_reglType)for(var e=0;6>e;++e)nt(B({framebuffer:t.framebuffer.faces[e]},t),c);else nt(t,c);else c(0,t)},prop:H.define.bind(null,1),context:H.define.bind(null,2),this:H.define.bind(null,3),draw:l({}),buffer:function(t){return P.create(t,34962,!1,!1)},elements:function(t){return z.create(t,!1)},texture:Y.create2D,cube:Y.createCube,renderbuffer:W.create,framebuffer:G.create,framebufferCube:G.createCube,vao:R.createVAO,attributes:v,frame:u,on:function(t,e){var n;switch(t){case\"frame\":return u(e);case\"lost\":n=$;break;case\"restore\":n=Q;break;case\"destroy\":n=tt}return n.push(e),{cancel:function(){for(var t=0;t<n.length;++t)if(n[t]===e){n[t]=n[n.length-1],n.pop();break}}}},limits:I,hasExtension:function(t){return 0<=I.extensions.indexOf(t.toLowerCase())},read:b,destroy:function(){K.length=0,a(),J&&(J.removeEventListener(\"webglcontextlost\",o),J.removeEventListener(\"webglcontextrestored\",s)),j.clear(),G.clear(),W.clear(),Y.clear(),z.clear(),P.clear(),R.clear(),T&&T.clear(),tt.forEach((function(t){t()}))},_gl:y,_refresh:m,poll:function(){p(),T&&T.update()},now:g,stats:x}),t.onDone(null,v),v}},\"object\"==typeof n&&void 0!==e?e.exports=r():this.createREGL=r()},{}],541:[function(t,e,n){\"use strict\";var r,i=\"\";e.exports=function(t,e){if(\"string\"!=typeof t)throw new TypeError(\"expected a string\");if(1===e)return t;if(2===e)return t+t;var n=t.length*e;if(r!==t||void 0===r)r=t,i=\"\";else if(i.length>=n)return i.substr(0,n);for(;n>i.length&&e>1;)1&e&&(i+=t),e>>=1,t+=t;return i=(i+=t).substr(0,n)}},{}],542:[function(t,e,n){(function(t){(function(){e.exports=t.performance&&t.performance.now?function(){return performance.now()}:Date.now||function(){return+new Date}}).call(this)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],543:[function(t,e,n){\"use strict\";e.exports=function(t){for(var e=t.length,n=t[t.length-1],r=e,i=e-2;i>=0;--i)(l=(s=t[i])-((n=(o=n)+s)-o))&&(t[--r]=n,n=l);var a=0;for(i=r;i<e;++i){var o,s,l;(l=(s=n)-((n=(o=t[i])+s)-o))&&(t[a++]=l)}return t[a++]=n,t.length=a,t}},{}],544:[function(t,e,n){\"use strict\";var r=t(\"two-product\"),i=t(\"robust-sum\"),a=t(\"robust-scale\"),o=t(\"robust-compress\");function s(t,e){for(var n=new Array(t.length-1),r=1;r<t.length;++r)for(var i=n[r-1]=new Array(t.length-1),a=0,o=0;a<t.length;++a)a!==e&&(i[o++]=t[r][a]);return n}function l(t){for(var e=new Array(t),n=0;n<t;++n){e[n]=new Array(t);for(var r=0;r<t;++r)e[n][r]=[\"m[\",n,\"][\",r,\"]\"].join(\"\")}return e}function c(t){if(2===t.length)return[\"sum(prod(\",t[0][0],\",\",t[1][1],\"),prod(-\",t[0][1],\",\",t[1][0],\"))\"].join(\"\");for(var e=[],n=0;n<t.length;++n)e.push([\"scale(\",c(s(t,n)),\",\",(r=n,1&r?\"-\":\"\"),t[0][n],\")\"].join(\"\"));var r;return function t(e){if(1===e.length)return e[0];if(2===e.length)return[\"sum(\",e[0],\",\",e[1],\")\"].join(\"\");var n=e.length>>1;return[\"sum(\",t(e.slice(0,n)),\",\",t(e.slice(n)),\")\"].join(\"\")}(e)}function u(t){return new Function(\"sum\",\"scale\",\"prod\",\"compress\",[\"function robustDeterminant\",t,\"(m){return compress(\",c(l(t)),\")};return robustDeterminant\",t].join(\"\"))(i,a,r,o)}var h=[function(){return[0]},function(t){return[t[0][0]]}];!function(){for(;h.length<6;)h.push(u(h.length));for(var t=[],n=[\"function robustDeterminant(m){switch(m.length){\"],r=0;r<6;++r)t.push(\"det\"+r),n.push(\"case \",r,\":return det\",r,\"(m);\");n.push(\"}var det=CACHE[m.length];if(!det)det=CACHE[m.length]=gen(m.length);return det(m);}return robustDeterminant\"),t.push(\"CACHE\",\"gen\",n.join(\"\"));var i=Function.apply(void 0,t);for(e.exports=i.apply(void 0,h.concat([h,u])),r=0;r<h.length;++r)e.exports[r]=h[r]}()},{\"robust-compress\":543,\"robust-scale\":550,\"robust-sum\":553,\"two-product\":582}],545:[function(t,e,n){\"use strict\";var r=t(\"two-product\"),i=t(\"robust-sum\");e.exports=function(t,e){for(var n=r(t[0],e[0]),a=1;a<t.length;++a)n=i(n,r(t[a],e[a]));return n}},{\"robust-sum\":553,\"two-product\":582}],546:[function(t,e,n){\"use strict\";var r=t(\"two-product\"),i=t(\"robust-sum\"),a=t(\"robust-subtract\"),o=t(\"robust-scale\");function s(t,e){for(var n=new Array(t.length-1),r=1;r<t.length;++r)for(var i=n[r-1]=new Array(t.length-1),a=0,o=0;a<t.length;++a)a!==e&&(i[o++]=t[r][a]);return n}function l(t){if(1===t.length)return t[0];if(2===t.length)return[\"sum(\",t[0],\",\",t[1],\")\"].join(\"\");var e=t.length>>1;return[\"sum(\",l(t.slice(0,e)),\",\",l(t.slice(e)),\")\"].join(\"\")}function c(t,e){if(\"m\"===t.charAt(0)){if(\"w\"===e.charAt(0)){var n=t.split(\"[\");return[\"w\",e.substr(1),\"m\",n[0].substr(1)].join(\"\")}return[\"prod(\",t,\",\",e,\")\"].join(\"\")}return c(e,t)}function u(t){if(2===t.length)return[[\"diff(\",c(t[0][0],t[1][1]),\",\",c(t[1][0],t[0][1]),\")\"].join(\"\")];for(var e=[],n=0;n<t.length;++n)e.push([\"scale(\",l(u(s(t,n))),\",\",(r=n,!0&r?\"-\":\"\"),t[0][n],\")\"].join(\"\"));var r;return e}function h(t,e){for(var n=[],r=0;r<e-2;++r)n.push([\"prod(m\",t,\"[\",r,\"],m\",t,\"[\",r,\"])\"].join(\"\"));return l(n)}function d(t){for(var e=[],n=[],c=function(t){for(var e=new Array(t),n=0;n<t;++n){e[n]=new Array(t);for(var r=0;r<t;++r)e[n][r]=[\"m\",r,\"[\",t-n-2,\"]\"].join(\"\")}return e}(t),d=0;d<t;++d)c[0][d]=\"1\",c[t-1][d]=\"w\"+d;for(d=0;d<t;++d)0==(1&d)?e.push.apply(e,u(s(c,d))):n.push.apply(n,u(s(c,d)));var f=l(e),p=l(n),m=\"exactInSphere\"+t,g=[];for(d=0;d<t;++d)g.push(\"m\"+d);var y=[\"function \",m,\"(\",g.join(),\"){\"];for(d=0;d<t;++d){y.push(\"var w\",d,\"=\",h(d,t),\";\");for(var v=0;v<t;++v)v!==d&&y.push(\"var w\",d,\"m\",v,\"=scale(w\",d,\",m\",v,\"[0]);\")}return y.push(\"var p=\",f,\",n=\",p,\",d=diff(p,n);return d[d.length-1];}return \",m),new Function(\"sum\",\"diff\",\"prod\",\"scale\",y.join(\"\"))(i,a,r,o)}var f=[function(){return 0},function(){return 0},function(){return 0}];function p(t){var e=f[t.length];return e||(e=f[t.length]=d(t.length)),e.apply(void 0,t)}!function(){for(;f.length<=6;)f.push(d(f.length));for(var t=[],n=[\"slow\"],r=0;r<=6;++r)t.push(\"a\"+r),n.push(\"o\"+r);var i=[\"function testInSphere(\",t.join(),\"){switch(arguments.length){case 0:case 1:return 0;\"];for(r=2;r<=6;++r)i.push(\"case \",r,\":return o\",r,\"(\",t.slice(0,r).join(),\");\");i.push(\"}var s=new Array(arguments.length);for(var i=0;i<arguments.length;++i){s[i]=arguments[i]};return slow(s);}return testInSphere\"),n.push(i.join(\"\"));var a=Function.apply(void 0,n);for(e.exports=a.apply(void 0,[p].concat(f)),r=0;r<=6;++r)e.exports[r]=f[r]}()},{\"robust-scale\":550,\"robust-subtract\":552,\"robust-sum\":553,\"two-product\":582}],547:[function(t,e,n){\"use strict\";var r=t(\"robust-determinant\");function i(t){for(var e=\"robustLinearSolve\"+t+\"d\",n=[\"function \",e,\"(A,b){return [\"],i=0;i<t;++i){n.push(\"det([\");for(var a=0;a<t;++a){a>0&&n.push(\",\"),n.push(\"[\");for(var o=0;o<t;++o)o>0&&n.push(\",\"),o===i?n.push(\"+b[\",a,\"]\"):n.push(\"+A[\",a,\"][\",o,\"]\");n.push(\"]\")}n.push(\"]),\")}return n.push(\"det(A)]}return \",e),new Function(\"det\",n.join(\"\"))(t<6?r[t]:r)}var a=[function(){return[0]},function(t,e){return[[e[0]],[t[0][0]]]}];!function(){for(;a.length<6;)a.push(i(a.length));for(var t=[],n=[\"function dispatchLinearSolve(A,b){switch(A.length){\"],r=0;r<6;++r)t.push(\"s\"+r),n.push(\"case \",r,\":return s\",r,\"(A,b);\");n.push(\"}var s=CACHE[A.length];if(!s)s=CACHE[A.length]=g(A.length);return s(A,b)}return dispatchLinearSolve\"),t.push(\"CACHE\",\"g\",n.join(\"\"));var o=Function.apply(void 0,t);for(e.exports=o.apply(void 0,a.concat([a,i])),r=0;r<6;++r)e.exports[r]=a[r]}()},{\"robust-determinant\":544}],548:[function(t,e,n){\"use strict\";var r=t(\"two-product\"),i=t(\"robust-sum\"),a=t(\"robust-scale\"),o=t(\"robust-subtract\");function s(t,e){for(var n=new Array(t.length-1),r=1;r<t.length;++r)for(var i=n[r-1]=new Array(t.length-1),a=0,o=0;a<t.length;++a)a!==e&&(i[o++]=t[r][a]);return n}function l(t){if(1===t.length)return t[0];if(2===t.length)return[\"sum(\",t[0],\",\",t[1],\")\"].join(\"\");var e=t.length>>1;return[\"sum(\",l(t.slice(0,e)),\",\",l(t.slice(e)),\")\"].join(\"\")}function c(t){if(2===t.length)return[[\"sum(prod(\",t[0][0],\",\",t[1][1],\"),prod(-\",t[0][1],\",\",t[1][0],\"))\"].join(\"\")];for(var e=[],n=0;n<t.length;++n)e.push([\"scale(\",l(c(s(t,n))),\",\",(r=n,1&r?\"-\":\"\"),t[0][n],\")\"].join(\"\"));var r;return e}function u(t){for(var e=[],n=[],u=function(t){for(var e=new Array(t),n=0;n<t;++n){e[n]=new Array(t);for(var r=0;r<t;++r)e[n][r]=[\"m\",r,\"[\",t-n-1,\"]\"].join(\"\")}return e}(t),h=[],d=0;d<t;++d)0==(1&d)?e.push.apply(e,c(s(u,d))):n.push.apply(n,c(s(u,d))),h.push(\"m\"+d);var f=l(e),p=l(n),m=\"orientation\"+t+\"Exact\",g=[\"function \",m,\"(\",h.join(),\"){var p=\",f,\",n=\",p,\",d=sub(p,n);return d[d.length-1];};return \",m].join(\"\");return new Function(\"sum\",\"prod\",\"scale\",\"sub\",g)(i,r,a,o)}var h=u(3),d=u(4),f=[function(){return 0},function(){return 0},function(t,e){return e[0]-t[0]},function(t,e,n){var r,i=(t[1]-n[1])*(e[0]-n[0]),a=(t[0]-n[0])*(e[1]-n[1]),o=i-a;if(i>0){if(a<=0)return o;r=i+a}else{if(!(i<0))return o;if(a>=0)return o;r=-(i+a)}var s=33306690738754716e-32*r;return o>=s||o<=-s?o:h(t,e,n)},function(t,e,n,r){var i=t[0]-r[0],a=e[0]-r[0],o=n[0]-r[0],s=t[1]-r[1],l=e[1]-r[1],c=n[1]-r[1],u=t[2]-r[2],h=e[2]-r[2],f=n[2]-r[2],p=a*c,m=o*l,g=o*s,y=i*c,v=i*l,_=a*s,b=u*(p-m)+h*(g-y)+f*(v-_),x=7771561172376103e-31*((Math.abs(p)+Math.abs(m))*Math.abs(u)+(Math.abs(g)+Math.abs(y))*Math.abs(h)+(Math.abs(v)+Math.abs(_))*Math.abs(f));return b>x||-b>x?b:d(t,e,n,r)}];function p(t){var e=f[t.length];return e||(e=f[t.length]=u(t.length)),e.apply(void 0,t)}!function(){for(;f.length<=5;)f.push(u(f.length));for(var t=[],n=[\"slow\"],r=0;r<=5;++r)t.push(\"a\"+r),n.push(\"o\"+r);var i=[\"function getOrientation(\",t.join(),\"){switch(arguments.length){case 0:case 1:return 0;\"];for(r=2;r<=5;++r)i.push(\"case \",r,\":return o\",r,\"(\",t.slice(0,r).join(),\");\");i.push(\"}var s=new Array(arguments.length);for(var i=0;i<arguments.length;++i){s[i]=arguments[i]};return slow(s);}return getOrientation\"),n.push(i.join(\"\"));var a=Function.apply(void 0,n);for(e.exports=a.apply(void 0,[p].concat(f)),r=0;r<=5;++r)e.exports[r]=f[r]}()},{\"robust-scale\":550,\"robust-subtract\":552,\"robust-sum\":553,\"two-product\":582}],549:[function(t,e,n){\"use strict\";var r=t(\"robust-sum\"),i=t(\"robust-scale\");e.exports=function(t,e){if(1===t.length)return i(e,t[0]);if(1===e.length)return i(t,e[0]);if(0===t.length||0===e.length)return[0];var n=[0];if(t.length<e.length)for(var a=0;a<t.length;++a)n=r(n,i(e,t[a]));else for(a=0;a<e.length;++a)n=r(n,i(t,e[a]));return n}},{\"robust-scale\":550,\"robust-sum\":553}],550:[function(t,e,n){\"use strict\";var r=t(\"two-product\"),i=t(\"two-sum\");e.exports=function(t,e){var n=t.length;if(1===n){var a=r(t[0],e);return a[0]?a:[a[1]]}var o=new Array(2*n),s=[.1,.1],l=[.1,.1],c=0;r(t[0],e,s),s[0]&&(o[c++]=s[0]);for(var u=1;u<n;++u){r(t[u],e,l),i(s[1],l[0],s),s[0]&&(o[c++]=s[0]);var h=l[1],d=s[1],f=h+d,p=d-(f-h);s[1]=f,p&&(o[c++]=p)}return s[1]&&(o[c++]=s[1]),0===c&&(o[c++]=0),o.length=c,o}},{\"two-product\":582,\"two-sum\":583}],551:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,i){var a=r(t,n,i),o=r(e,n,i);if(a>0&&o>0||a<0&&o<0)return!1;var s=r(n,t,e),l=r(i,t,e);return!(s>0&&l>0||s<0&&l<0)&&(0!==a||0!==o||0!==s||0!==l||function(t,e,n,r){for(var i=0;i<2;++i){var a=t[i],o=e[i],s=Math.min(a,o),l=Math.max(a,o),c=n[i],u=r[i],h=Math.min(c,u);if(Math.max(c,u)<s||l<h)return!1}return!0}(t,e,n,i))};var r=t(\"robust-orientation\")[3]},{\"robust-orientation\":548}],552:[function(t,e,n){\"use strict\";e.exports=function(t,e){var n=0|t.length,r=0|e.length;if(1===n&&1===r)return function(t,e){var n=t+e,r=n-t,i=t-(n-r)+(e-r);return i?[i,n]:[n]}(t[0],-e[0]);var i,a,o=new Array(n+r),s=0,l=0,c=0,u=Math.abs,h=t[l],d=u(h),f=-e[c],p=u(f);d<p?(a=h,(l+=1)<n&&(d=u(h=t[l]))):(a=f,(c+=1)<r&&(p=u(f=-e[c]))),l<n&&d<p||c>=r?(i=h,(l+=1)<n&&(d=u(h=t[l]))):(i=f,(c+=1)<r&&(p=u(f=-e[c])));for(var m,g,y=i+a,v=y-i,_=a-v,b=_,x=y;l<n&&c<r;)d<p?(i=h,(l+=1)<n&&(d=u(h=t[l]))):(i=f,(c+=1)<r&&(p=u(f=-e[c]))),(_=(a=b)-(v=(y=i+a)-i))&&(o[s++]=_),b=x-((m=x+y)-(g=m-x))+(y-g),x=m;for(;l<n;)(_=(a=b)-(v=(y=(i=h)+a)-i))&&(o[s++]=_),b=x-((m=x+y)-(g=m-x))+(y-g),x=m,(l+=1)<n&&(h=t[l]);for(;c<r;)(_=(a=b)-(v=(y=(i=f)+a)-i))&&(o[s++]=_),b=x-((m=x+y)-(g=m-x))+(y-g),x=m,(c+=1)<r&&(f=-e[c]);return b&&(o[s++]=b),x&&(o[s++]=x),s||(o[s++]=0),o.length=s,o}},{}],553:[function(t,e,n){\"use strict\";e.exports=function(t,e){var n=0|t.length,r=0|e.length;if(1===n&&1===r)return function(t,e){var n=t+e,r=n-t,i=t-(n-r)+(e-r);return i?[i,n]:[n]}(t[0],e[0]);var i,a,o=new Array(n+r),s=0,l=0,c=0,u=Math.abs,h=t[l],d=u(h),f=e[c],p=u(f);d<p?(a=h,(l+=1)<n&&(d=u(h=t[l]))):(a=f,(c+=1)<r&&(p=u(f=e[c]))),l<n&&d<p||c>=r?(i=h,(l+=1)<n&&(d=u(h=t[l]))):(i=f,(c+=1)<r&&(p=u(f=e[c])));for(var m,g,y=i+a,v=y-i,_=a-v,b=_,x=y;l<n&&c<r;)d<p?(i=h,(l+=1)<n&&(d=u(h=t[l]))):(i=f,(c+=1)<r&&(p=u(f=e[c]))),(_=(a=b)-(v=(y=i+a)-i))&&(o[s++]=_),b=x-((m=x+y)-(g=m-x))+(y-g),x=m;for(;l<n;)(_=(a=b)-(v=(y=(i=h)+a)-i))&&(o[s++]=_),b=x-((m=x+y)-(g=m-x))+(y-g),x=m,(l+=1)<n&&(h=t[l]);for(;c<r;)(_=(a=b)-(v=(y=(i=f)+a)-i))&&(o[s++]=_),b=x-((m=x+y)-(g=m-x))+(y-g),x=m,(c+=1)<r&&(f=e[c]);return b&&(o[s++]=b),x&&(o[s++]=x),s||(o[s++]=0),o.length=s,o}},{}],554:[function(t,e,n){\"use strict\";e.exports=function(t){return t<0?-1:t>0?1:0}},{}],555:[function(t,e,n){\"use strict\";e.exports=function(t){return i(r(t))};var r=t(\"boundary-cells\"),i=t(\"reduce-simplicial-complex\")},{\"boundary-cells\":100,\"reduce-simplicial-complex\":533}],556:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,s){if(n=n||0,void 0===s&&(s=function(t){for(var e=t.length,n=0,r=0;r<e;++r)n=0|Math.max(n,t[r].length);return n-1}(t)),0===t.length||s<1)return{cells:[],vertexIds:[],vertexWeights:[]};var l=function(t,e){for(var n=t.length,r=i.mallocUint8(n),a=0;a<n;++a)r[a]=t[a]<e|0;return r}(e,+n),c=function(t,e){for(var n=t.length,o=i.mallocUint32(2*(e*(e+1)/2*n|0)),s=0,l=0;l<n;++l)for(var c=t[l],u=(e=c.length,0);u<e;++u)for(var h=0;h<u;++h){var d=c[h],f=c[u];o[s++]=0|Math.min(d,f),o[s++]=0|Math.max(d,f)}a(r(o,[s/2|0,2]));var p=2;for(l=2;l<s;l+=2)o[l-2]===o[l]&&o[l-1]===o[l+1]||(o[p++]=o[l],o[p++]=o[l+1]);return r(o,[p/2|0,2])}(t,s),u=function(t,e,n,a){for(var o=t.data,s=t.shape[0],l=i.mallocDouble(s),c=0,u=0;u<s;++u){var h=o[2*u],d=o[2*u+1];if(n[h]!==n[d]){var f=e[h],p=e[d];o[2*c]=h,o[2*c+1]=d,l[c++]=(p-a)/(p-f)}}return t.shape[0]=c,r(l,[c])}(c,e,l,+n),h=function(t,e){var n=i.mallocInt32(2*e),r=t.shape[0],a=t.data;n[0]=0;for(var o=0,s=0;s<r;++s){var l=a[2*s];if(l!==o){for(n[2*o+1]=s;++o<l;)n[2*o]=s,n[2*o+1]=s;n[2*o]=s}}for(n[2*o+1]=r;++o<e;)n[2*o]=n[2*o+1]=r;return n}(c,0|e.length),d=o(s)(t,c.data,h,l),f=function(t){for(var e=0|t.shape[0],n=t.data,r=new Array(e),i=0;i<e;++i)r[i]=[n[2*i],n[2*i+1]];return r}(c),p=[].slice.call(u.data,0,u.shape[0]);return i.free(l),i.free(c.data),i.free(u.data),i.free(h),{cells:d,vertexIds:f,vertexWeights:p}};var r=t(\"ndarray\"),i=t(\"typedarray-pool\"),a=t(\"ndarray-sort\"),o=t(\"./lib/codegen\")},{\"./lib/codegen\":557,ndarray:495,\"ndarray-sort\":494,\"typedarray-pool\":595}],557:[function(t,e,n){\"use strict\";e.exports=function(t){var e=a[t];return e||(e=a[t]=function(t){var e=0,n=new Array(t+1);n[0]=[[]];for(var a=1;a<=t;++a)for(var o=n[a]=i(a),s=0;s<o.length;++s)e=Math.max(e,o[a].length);var l=[\"function B(C,E,i,j){\",\"var a=Math.min(i,j)|0,b=Math.max(i,j)|0,l=C[2*a],h=C[2*a+1];\",\"while(l<h){\",\"var m=(l+h)>>1,v=E[2*m+1];\",\"if(v===b){return m}\",\"if(b<v){h=m}else{l=m+1}\",\"}\",\"return l;\",\"};\",\"function getContour\",t,\"d(F,E,C,S){\",\"var n=F.length,R=[];\",\"for(var i=0;i<n;++i){var c=F[i],l=c.length;\"];function c(t){if(!(t.length<=0)){l.push(\"R.push(\");for(var e=0;e<t.length;++e){var n=t[e];e>0&&l.push(\",\"),l.push(\"[\");for(var r=0;r<n.length;++r){var i=n[r];r>0&&l.push(\",\"),l.push(\"B(C,E,c[\",i[0],\"],c[\",i[1],\"])\")}l.push(\"]\")}l.push(\");\")}}for(a=t+1;a>1;--a){a<t+1&&l.push(\"else \"),l.push(\"if(l===\",a,\"){\");var u=[];for(s=0;s<a;++s)u.push(\"(S[c[\"+s+\"]]<<\"+s+\")\");for(l.push(\"var M=\",u.join(\"+\"),\";if(M===0||M===\",(1<<a)-1,\"){continue}switch(M){\"),o=n[a-1],s=0;s<o.length;++s)l.push(\"case \",s,\":\"),c(o[s]),l.push(\"break;\");l.push(\"}}\")}return l.push(\"}return R;};return getContour\",t,\"d\"),new Function(\"pool\",l.join(\"\"))(r)}(t)),e};var r=t(\"typedarray-pool\"),i=t(\"marching-simplex-table\"),a={}},{\"marching-simplex-table\":474,\"typedarray-pool\":595}],558:[function(t,e,n){\"use strict\";var r=t(\"bit-twiddle\"),i=t(\"union-find\");function a(t,e){var n=t.length,r=t.length-e.length,i=Math.min;if(r)return r;switch(n){case 0:return 0;case 1:return t[0]-e[0];case 2:return(s=t[0]+t[1]-e[0]-e[1])||i(t[0],t[1])-i(e[0],e[1]);case 3:var a=t[0]+t[1],o=e[0]+e[1];if(s=a+t[2]-(o+e[2]))return s;var s,l=i(t[0],t[1]),c=i(e[0],e[1]);return(s=i(l,t[2])-i(c,e[2]))||i(l+t[2],a)-i(c+e[2],o);default:var u=t.slice(0);u.sort();var h=e.slice(0);h.sort();for(var d=0;d<n;++d)if(r=u[d]-h[d])return r;return 0}}function o(t,e){return a(t[0],e[0])}function s(t,e){if(e){for(var n=t.length,r=new Array(n),i=0;i<n;++i)r[i]=[t[i],e[i]];for(r.sort(o),i=0;i<n;++i)t[i]=r[i][0],e[i]=r[i][1];return t}return t.sort(a),t}function l(t){if(0===t.length)return[];for(var e=1,n=t.length,r=1;r<n;++r){var i=t[r];if(a(i,t[r-1])){if(r===e){e++;continue}t[e++]=i}}return t.length=e,t}function c(t,e){for(var n=0,r=t.length-1,i=-1;n<=r;){var o=n+r>>1,s=a(t[o],e);s<=0?(0===s&&(i=o),n=o+1):s>0&&(r=o-1)}return i}function u(t,e){for(var n=new Array(t.length),i=0,o=n.length;i<o;++i)n[i]=[];for(var s=[],l=(i=0,e.length);i<l;++i)for(var u=e[i],h=u.length,d=1,f=1<<h;d<f;++d){s.length=r.popCount(d);for(var p=0,m=0;m<h;++m)d&1<<m&&(s[p++]=u[m]);var g=c(t,s);if(!(g<0))for(;n[g++].push(i),!(g>=t.length||0!==a(t[g],s)););}return n}function h(t,e){if(e<0)return[];for(var n=[],i=(1<<e+1)-1,a=0;a<t.length;++a)for(var o=t[a],l=i;l<1<<o.length;l=r.nextCombination(l)){for(var c=new Array(e+1),u=0,h=0;h<o.length;++h)l&1<<h&&(c[u++]=o[h]);n.push(c)}return s(n)}n.dimension=function(t){for(var e=0,n=Math.max,r=0,i=t.length;r<i;++r)e=n(e,t[r].length);return e-1},n.countVertices=function(t){for(var e=-1,n=Math.max,r=0,i=t.length;r<i;++r)for(var a=t[r],o=0,s=a.length;o<s;++o)e=n(e,a[o]);return e+1},n.cloneCells=function(t){for(var e=new Array(t.length),n=0,r=t.length;n<r;++n)e[n]=t[n].slice(0);return e},n.compareCells=a,n.normalize=s,n.unique=l,n.findCell=c,n.incidence=u,n.dual=function(t,e){if(!e)return u(l(h(t,0)),t);for(var n=new Array(e),r=0;r<e;++r)n[r]=[];r=0;for(var i=t.length;r<i;++r)for(var a=t[r],o=0,s=a.length;o<s;++o)n[a[o]].push(r);return n},n.explode=function(t){for(var e=[],n=0,r=t.length;n<r;++n)for(var i=t[n],a=0|i.length,o=1,l=1<<a;o<l;++o){for(var c=[],u=0;u<a;++u)o>>>u&1&&c.push(i[u]);e.push(c)}return s(e)},n.skeleton=h,n.boundary=function(t){for(var e=[],n=0,r=t.length;n<r;++n)for(var i=t[n],a=0,o=i.length;a<o;++a){for(var l=new Array(i.length-1),c=0,u=0;c<o;++c)c!==a&&(l[u++]=i[c]);e.push(l)}return s(e)},n.connectedComponents=function(t,e){return e?function(t,e){for(var n=new i(e),r=0;r<t.length;++r)for(var a=t[r],o=0;o<a.length;++o)for(var s=o+1;s<a.length;++s)n.link(a[o],a[s]);var l=[],c=n.ranks;for(r=0;r<c.length;++r)c[r]=-1;for(r=0;r<t.length;++r){var u=n.find(t[r][0]);c[u]<0?(c[u]=l.length,l.push([t[r].slice(0)])):l[c[u]].push(t[r].slice(0))}return l}(t,e):function(t){for(var e=l(s(h(t,0))),n=new i(e.length),r=0;r<t.length;++r)for(var a=t[r],o=0;o<a.length;++o)for(var u=c(e,[a[o]]),d=o+1;d<a.length;++d)n.link(u,c(e,[a[d]]));var f=[],p=n.ranks;for(r=0;r<p.length;++r)p[r]=-1;for(r=0;r<t.length;++r){var m=n.find(c(e,[t[r][0]]));p[m]<0?(p[m]=f.length,f.push([t[r].slice(0)])):f[p[m]].push(t[r].slice(0))}return f}(t)}},{\"bit-twiddle\":97,\"union-find\":596}],559:[function(t,e,n){arguments[4][97][0].apply(n,arguments)},{dup:97}],560:[function(t,e,n){arguments[4][558][0].apply(n,arguments)},{\"bit-twiddle\":559,dup:558,\"union-find\":561}],561:[function(t,e,n){\"use strict\";function r(t){this.roots=new Array(t),this.ranks=new Array(t);for(var e=0;e<t;++e)this.roots[e]=e,this.ranks[e]=0}e.exports=r,r.prototype.length=function(){return this.roots.length},r.prototype.makeSet=function(){var t=this.roots.length;return this.roots.push(t),this.ranks.push(0),t},r.prototype.find=function(t){for(var e=this.roots;e[t]!==t;){var n=e[t];e[t]=e[n],t=n}return t},r.prototype.link=function(t,e){var n=this.find(t),r=this.find(e);if(n!==r){var i=this.ranks,a=this.roots,o=i[n],s=i[r];o<s?a[n]=r:s<o?a[r]=n:(a[r]=n,++i[n])}}},{}],562:[function(t,e,n){\"use strict\";e.exports=function(t,e,n){for(var a=e.length,o=t.length,s=new Array(a),l=new Array(a),c=new Array(a),u=new Array(a),h=0;h<a;++h)s[h]=l[h]=-1,c[h]=1/0,u[h]=!1;for(h=0;h<o;++h){var d=t[h];if(2!==d.length)throw new Error(\"Input must be a graph\");var f=d[1],p=d[0];l[p]=-1!==l[p]?-2:f,s[f]=-1!==s[f]?-2:p}function m(t){if(u[t])return 1/0;var n,i,a=s[t],o=l[t];return a<0||o<0?1/0:(n=e[a],i=e[o],Math.abs(r(e[t],n,i))/Math.sqrt(Math.pow(n[0]-i[0],2)+Math.pow(n[1]-i[1],2)))}function g(t,e){var n=M[t],r=M[e];M[t]=r,M[e]=n,T[n]=e,T[r]=t}function y(t){return c[M[t]]}function v(t){return 1&t?t-1>>1:(t>>1)-1}function _(t){for(var e=y(t);;){var n=e,r=2*t+1,i=2*(t+1),a=t;if(r<S){var o=y(r);o<n&&(a=r,n=o)}if(i<S&&y(i)<n&&(a=i),a===t)return t;g(t,a),t=a}}function b(t){for(var e=y(t);t>0;){var n=v(t);if(!(n>=0&&e<y(n)))return t;g(t,n),t=n}}function x(){if(S>0){var t=M[0];return g(0,S-1),S-=1,_(0),t}return-1}function w(t,e){var n=M[t];return c[n]===e?t:(c[n]=-1/0,b(t),x(),c[n]=e,b((S+=1)-1))}function k(t){if(!u[t]){u[t]=!0;var e=s[t],n=l[t];s[n]>=0&&(s[n]=e),l[e]>=0&&(l[e]=n),T[e]>=0&&w(T[e],m(e)),T[n]>=0&&w(T[n],m(n))}}var M=[],T=new Array(a);for(h=0;h<a;++h)(c[h]=m(h))<1/0?(T[h]=M.length,M.push(h)):T[h]=-1;var S=M.length;for(h=S>>1;h>=0;--h)_(h);for(;;){var A=x();if(A<0||c[A]>n)break;k(A)}var L=[];for(h=0;h<a;++h)u[h]||(T[h]=L.length,L.push(e[h].slice()));function C(t,e){if(t[e]<0)return e;var n=e,r=e;do{var i=t[r];if(!u[r]||i<0||i===r)break;if(i=t[r=i],!u[r]||i<0||i===r)break;r=i,n=t[n]}while(n!==r);for(var a=e;a!==r;a=t[a])t[a]=r;return r}var E=[];return t.forEach((function(t){var e=C(s,t[0]),n=C(l,t[1]);if(e>=0&&n>=0&&e!==n){var r=T[e],i=T[n];r!==i&&E.push([r,i])}})),i.unique(i.normalize(E)),{positions:L,edges:E}};var r=t(\"robust-orientation\"),i=t(\"simplicial-complex\")},{\"robust-orientation\":548,\"simplicial-complex\":560}],563:[function(t,e,n){\"use strict\";e.exports=function(t,e){var n,a,o,s;if(e[0][0]<e[1][0])n=e[0],a=e[1];else{if(!(e[0][0]>e[1][0]))return i(e,t);n=e[1],a=e[0]}if(t[0][0]<t[1][0])o=t[0],s=t[1];else{if(!(t[0][0]>t[1][0]))return-i(t,e);o=t[1],s=t[0]}var l=r(n,a,s),c=r(n,a,o);if(l<0){if(c<=0)return l}else if(l>0){if(c>=0)return l}else if(c)return c;if(l=r(s,o,a),c=r(s,o,n),l<0){if(c<=0)return l}else if(l>0){if(c>=0)return l}else if(c)return c;return a[0]-s[0]};var r=t(\"robust-orientation\");function i(t,e){var n,i,a,o;if(e[0][0]<e[1][0])n=e[0],i=e[1];else{if(!(e[0][0]>e[1][0])){var s=Math.min(t[0][1],t[1][1]),l=Math.max(t[0][1],t[1][1]),c=Math.min(e[0][1],e[1][1]),u=Math.max(e[0][1],e[1][1]);return l<c?l-c:s>u?s-u:l-u}n=e[1],i=e[0]}t[0][1]<t[1][1]?(a=t[0],o=t[1]):(a=t[1],o=t[0]);var h=r(i,n,a);return h||(h=r(i,n,o))||o-i}},{\"robust-orientation\":548}],564:[function(t,e,n){arguments[4][243][0].apply(n,arguments)},{dup:243}],565:[function(t,e,n){\"use strict\";e.exports=function(t){for(var e=t.length,n=2*e,r=new Array(n),a=0;a<e;++a){var l=t[a],c=l[0][0]<l[1][0];r[2*a]=new h(l[0][0],l,c,a),r[2*a+1]=new h(l[1][0],l,!c,a)}r.sort((function(t,e){var n=t.x-e.x;return n||(n=t.create-e.create)||Math.min(t.segment[0][1],t.segment[1][1])-Math.min(e.segment[0][1],e.segment[1][1])}));var d=i(o),f=[],p=[],m=[];for(a=0;a<n;){for(var g=r[a].x,y=[];a<n;){var v=r[a];if(v.x!==g)break;a+=1,v.segment[0][0]===v.x&&v.segment[1][0]===v.x?v.create&&(v.segment[0][1]<v.segment[1][1]?(y.push(new u(v.segment[0][1],v.index,!0,!0)),y.push(new u(v.segment[1][1],v.index,!1,!1))):(y.push(new u(v.segment[1][1],v.index,!0,!1)),y.push(new u(v.segment[0][1],v.index,!1,!0)))):d=v.create?d.insert(v.segment,v.index):d.remove(v.segment)}f.push(d.root),p.push(g),m.push(y)}return new s(f,p,m)};var r=t(\"binary-search-bounds\"),i=t(\"functional-red-black-tree\"),a=t(\"robust-orientation\"),o=t(\"./lib/order-segments\");function s(t,e,n){this.slabs=t,this.coordinates=e,this.horizontal=n}function l(t,e){return t.y-e}function c(t,e){for(var n=null;t;){var r,i,o=t.key;o[0][0]<o[1][0]?(r=o[0],i=o[1]):(r=o[1],i=o[0]);var s=a(r,i,e);if(s<0)t=t.left;else if(s>0)if(e[0]!==o[1][0])n=t,t=t.right;else{if(l=c(t.right,e))return l;t=t.left}else{if(e[0]!==o[1][0])return t;var l;if(l=c(t.right,e))return l;t=t.left}}return n}function u(t,e,n,r){this.y=t,this.index=e,this.start=n,this.closed=r}function h(t,e,n,r){this.x=t,this.segment=e,this.create=n,this.index=r}s.prototype.castUp=function(t){var e=r.le(this.coordinates,t[0]);if(e<0)return-1;var n=c(this.slabs[e],t),i=-1;if(n&&(i=n.value),this.coordinates[e]===t[0]){var s=null;if(n&&(s=n.key),e>0){var u=c(this.slabs[e-1],t);u&&(s?o(u.key,s)>0&&(s=u.key,i=u.value):(i=u.value,s=u.key))}var h=this.horizontal[e];if(h.length>0){var d=r.ge(h,t[1],l);if(d<h.length){var f=h[d];if(t[1]===f.y){if(f.closed)return f.index;for(;d<h.length-1&&h[d+1].y===t[1];)if((f=h[d+=1]).closed)return f.index;if(f.y===t[1]&&!f.start){if((d+=1)>=h.length)return i;f=h[d]}}if(f.start)if(s){var p=a(s[0],s[1],[t[0],f.y]);s[0][0]>s[1][0]&&(p=-p),p>0&&(i=f.index)}else i=f.index;else f.y!==t[1]&&(i=f.index)}}}return i}},{\"./lib/order-segments\":563,\"binary-search-bounds\":564,\"functional-red-black-tree\":247,\"robust-orientation\":548}],566:[function(t,e,n){\"use strict\";var r=t(\"robust-dot-product\"),i=t(\"robust-sum\");function a(t,e){var n=i(r(t,e),[e[e.length-1]]);return n[n.length-1]}function o(t,e,n,r){var i=-e/(r-e);i<0?i=0:i>1&&(i=1);for(var a=1-i,o=t.length,s=new Array(o),l=0;l<o;++l)s[l]=i*t[l]+a*n[l];return s}e.exports=function(t,e){for(var n=[],r=[],i=a(t[t.length-1],e),s=t[t.length-1],l=t[0],c=0;c<t.length;++c,s=l){var u=a(l=t[c],e);if(i<0&&u>0||i>0&&u<0){var h=o(s,u,l,i);n.push(h),r.push(h.slice())}u<0?r.push(l.slice()):u>0?n.push(l.slice()):(n.push(l.slice()),r.push(l.slice())),i=u}return{positive:n,negative:r}},e.exports.positive=function(t,e){for(var n=[],r=a(t[t.length-1],e),i=t[t.length-1],s=t[0],l=0;l<t.length;++l,i=s){var c=a(s=t[l],e);(r<0&&c>0||r>0&&c<0)&&n.push(o(i,c,s,r)),c>=0&&n.push(s.slice()),r=c}return n},e.exports.negative=function(t,e){for(var n=[],r=a(t[t.length-1],e),i=t[t.length-1],s=t[0],l=0;l<t.length;++l,i=s){var c=a(s=t[l],e);(r<0&&c>0||r>0&&c<0)&&n.push(o(i,c,s,r)),c<=0&&n.push(s.slice()),r=c}return n}},{\"robust-dot-product\":545,\"robust-sum\":553}],567:[function(t,e,n){!function(){\"use strict\";var t={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\\x25]+/,modulo:/^\\x25{2}/,placeholder:/^\\x25(?:([1-9]\\d*)\\$|\\(([^)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\\d]*)/i,key_access:/^\\.([a-z_][a-z_\\d]*)/i,index_access:/^\\[(\\d+)\\]/,sign:/^[+-]/};function e(t){return i(o(t),arguments)}function r(t,n){return e.apply(null,[t].concat(n||[]))}function i(n,r){var i,a,o,s,l,c,u,h,d,f=1,p=n.length,m=\"\";for(a=0;a<p;a++)if(\"string\"==typeof n[a])m+=n[a];else if(\"object\"==typeof n[a]){if((s=n[a]).keys)for(i=r[f],o=0;o<s.keys.length;o++){if(null==i)throw new Error(e('[sprintf] Cannot access property \"%s\" of undefined value \"%s\"',s.keys[o],s.keys[o-1]));i=i[s.keys[o]]}else i=s.param_no?r[s.param_no]:r[f++];if(t.not_type.test(s.type)&&t.not_primitive.test(s.type)&&i instanceof Function&&(i=i()),t.numeric_arg.test(s.type)&&\"number\"!=typeof i&&isNaN(i))throw new TypeError(e(\"[sprintf] expecting number but found %T\",i));switch(t.number.test(s.type)&&(h=i>=0),s.type){case\"b\":i=parseInt(i,10).toString(2);break;case\"c\":i=String.fromCharCode(parseInt(i,10));break;case\"d\":case\"i\":i=parseInt(i,10);break;case\"j\":i=JSON.stringify(i,null,s.width?parseInt(s.width):0);break;case\"e\":i=s.precision?parseFloat(i).toExponential(s.precision):parseFloat(i).toExponential();break;case\"f\":i=s.precision?parseFloat(i).toFixed(s.precision):parseFloat(i);break;case\"g\":i=s.precision?String(Number(i.toPrecision(s.precision))):parseFloat(i);break;case\"o\":i=(parseInt(i,10)>>>0).toString(8);break;case\"s\":i=String(i),i=s.precision?i.substring(0,s.precision):i;break;case\"t\":i=String(!!i),i=s.precision?i.substring(0,s.precision):i;break;case\"T\":i=Object.prototype.toString.call(i).slice(8,-1).toLowerCase(),i=s.precision?i.substring(0,s.precision):i;break;case\"u\":i=parseInt(i,10)>>>0;break;case\"v\":i=i.valueOf(),i=s.precision?i.substring(0,s.precision):i;break;case\"x\":i=(parseInt(i,10)>>>0).toString(16);break;case\"X\":i=(parseInt(i,10)>>>0).toString(16).toUpperCase()}t.json.test(s.type)?m+=i:(!t.number.test(s.type)||h&&!s.sign?d=\"\":(d=h?\"+\":\"-\",i=i.toString().replace(t.sign,\"\")),c=s.pad_char?\"0\"===s.pad_char?\"0\":s.pad_char.charAt(1):\" \",u=s.width-(d+i).length,l=s.width&&u>0?c.repeat(u):\"\",m+=s.align?d+i+l:\"0\"===c?d+l+i:l+d+i)}return m}var a=Object.create(null);function o(e){if(a[e])return a[e];for(var n,r=e,i=[],o=0;r;){if(null!==(n=t.text.exec(r)))i.push(n[0]);else if(null!==(n=t.modulo.exec(r)))i.push(\"%\");else{if(null===(n=t.placeholder.exec(r)))throw new SyntaxError(\"[sprintf] unexpected placeholder\");if(n[2]){o|=1;var s=[],l=n[2],c=[];if(null===(c=t.key.exec(l)))throw new SyntaxError(\"[sprintf] failed to parse named argument key\");for(s.push(c[1]);\"\"!==(l=l.substring(c[0].length));)if(null!==(c=t.key_access.exec(l)))s.push(c[1]);else{if(null===(c=t.index_access.exec(l)))throw new SyntaxError(\"[sprintf] failed to parse named argument key\");s.push(c[1])}n[2]=s}else o|=2;if(3===o)throw new Error(\"[sprintf] mixing positional and named placeholders is not (yet) supported\");i.push({placeholder:n[0],param_no:n[1],keys:n[2],sign:n[3],pad_char:n[4],align:n[5],width:n[6],precision:n[7],type:n[8]})}r=r.substring(n[0].length)}return a[e]=i}void 0!==n&&(n.sprintf=e,n.vsprintf=r),\"undefined\"!=typeof window&&(window.sprintf=e,window.vsprintf=r)}()},{}],568:[function(t,e,n){\"use strict\";var r=t(\"parenthesis\");e.exports=function(t,e,n){if(null==t)throw Error(\"First argument should be a string\");if(null==e)throw Error(\"Separator should be a string or a RegExp\");n?(\"string\"==typeof n||Array.isArray(n))&&(n={ignore:n}):n={},null==n.escape&&(n.escape=!0),null==n.ignore?n.ignore=[\"[]\",\"()\",\"{}\",\"<>\",'\"\"',\"''\",\"``\",\"\\u201c\\u201d\",\"\\xab\\xbb\"]:(\"string\"==typeof n.ignore&&(n.ignore=[n.ignore]),n.ignore=n.ignore.map((function(t){return 1===t.length&&(t+=t),t})));var i=r.parse(t,{flat:!0,brackets:n.ignore}),a=i[0].split(e);if(n.escape){for(var o=[],s=0;s<a.length;s++){var l=a[s];\"\\\\\"===l[l.length-1]&&\"\\\\\"!==l[l.length-2]?(o.push(l+e+a[s+1]),s++):o.push(l)}a=o}for(s=0;s<a.length;s++)i[0]=a[s],a[s]=r.stringify(i,{flat:!0});return a}},{parenthesis:503}],569:[function(t,e,n){\"use strict\";e.exports=function(t){for(var e=t.length,n=new Array(e),r=new Array(e),i=new Array(e),a=new Array(e),o=new Array(e),s=new Array(e),l=0;l<e;++l)n[l]=-1,r[l]=0,i[l]=!1,a[l]=0,o[l]=-1,s[l]=[];var c,u=0,h=[],d=[];function f(e){var l=[e],c=[e];for(n[e]=r[e]=u,i[e]=!0,u+=1;c.length>0;){var f=t[e=c[c.length-1]];if(a[e]<f.length){for(var p=a[e];p<f.length;++p){var m=f[p];if(n[m]<0){n[m]=r[m]=u,i[m]=!0,u+=1,l.push(m),c.push(m);break}i[m]&&(r[e]=0|Math.min(r[e],r[m])),o[m]>=0&&s[e].push(o[m])}a[e]=p}else{if(r[e]===n[e]){var g=[],y=[],v=0;for(p=l.length-1;p>=0;--p){var _=l[p];if(i[_]=!1,g.push(_),y.push(s[_]),v+=s[_].length,o[_]=h.length,_===e){l.length=p;break}}h.push(g);var b=new Array(v);for(p=0;p<y.length;p++)for(var x=0;x<y[p].length;x++)b[--v]=y[p][x];d.push(b)}c.pop()}}}for(l=0;l<e;++l)n[l]<0&&f(l);for(l=0;l<d.length;l++){var p=d[l];if(0!==p.length){p.sort((function(t,e){return t-e})),c=[p[0]];for(var m=1;m<p.length;m++)p[m]!==p[m-1]&&c.push(p[m]);d[l]=c}}return{components:h,adjacencyList:d}}},{}],570:[function(t,e,n){\"use strict\";e.exports=function(t,e){if(t.dimension<=0)return{positions:[],cells:[]};if(1===t.dimension)return function(t,e){for(var n=a(t,e),r=n.length,i=new Array(r),o=new Array(r),s=0;s<r;++s)i[s]=[n[s]],o[s]=[s];return{positions:i,cells:o}}(t,e);var n=t.order.join()+\"-\"+t.dtype,s=o[n];return e=+e||0,s||(s=o[n]=function(t,e){var n=t.length,a=[\"'use strict';\"],o=\"surfaceNets\"+t.join(\"_\")+\"d\"+e;a.push(\"var contour=genContour({\",\"order:[\",t.join(),\"],\",\"scalarArguments: 3,\",\"phase:function phaseFunc(p,a,b,c) { return (p > c)|0 },\"),\"generic\"===e&&a.push(\"getters:[0],\");for(var s=[],l=[],c=0;c<n;++c)s.push(\"d\"+c),l.push(\"d\"+c);for(c=0;c<1<<n;++c)s.push(\"v\"+c),l.push(\"v\"+c);for(c=0;c<1<<n;++c)s.push(\"p\"+c),l.push(\"p\"+c);s.push(\"a\",\"b\",\"c\"),l.push(\"a\",\"c\"),a.push(\"vertex:function vertexFunc(\",s.join(),\"){\");var u=[];for(c=0;c<1<<n;++c)u.push(\"(p\"+c+\"<<\"+c+\")\");a.push(\"var m=(\",u.join(\"+\"),\")|0;if(m===0||m===\",(1<<(1<<n))-1,\"){return}\");var h=[],d=[];for(1<<(1<<n)<=128?(a.push(\"switch(m){\"),d=a):a.push(\"switch(m>>>7){\"),c=0;c<1<<(1<<n);++c){if(1<<(1<<n)>128&&c%128==0){h.length>0&&d.push(\"}}\");var f=\"vExtra\"+h.length;a.push(\"case \",c>>>7,\":\",f,\"(m&0x7f,\",l.join(),\");break;\"),d=[\"function \",f,\"(m,\",l.join(),\"){switch(m){\"],h.push(d)}d.push(\"case \",127&c,\":\");for(var p=new Array(n),m=new Array(n),g=new Array(n),y=new Array(n),v=0,_=0;_<n;++_)p[_]=[],m[_]=[],g[_]=0,y[_]=0;for(_=0;_<1<<n;++_)for(var b=0;b<n;++b){var x=_^1<<b;if(!(x>_)&&!(c&1<<x)!=!(c&1<<_)){var w=1;c&1<<x?m[b].push(\"v\"+x+\"-v\"+_):(m[b].push(\"v\"+_+\"-v\"+x),w=-w),w<0?(p[b].push(\"-v\"+_+\"-v\"+x),g[b]+=2):(p[b].push(\"v\"+_+\"+v\"+x),g[b]-=2),v+=1;for(var k=0;k<n;++k)k!==b&&(x&1<<k?y[k]+=1:y[k]-=1)}}var M=[];for(b=0;b<n;++b)if(0===p[b].length)M.push(\"d\"+b+\"-0.5\");else{var T=\"\";g[b]<0?T=g[b]+\"*c\":g[b]>0&&(T=\"+\"+g[b]+\"*c\"),M.push(\"d\"+b+\"-\"+(.5+y[b]/v*.5)+\"-\"+p[b].length/v*.5+\"*(\"+p[b].join(\"+\")+T+\")/(\"+m[b].join(\"+\")+\")\")}d.push(\"a.push([\",M.join(),\"]);\",\"break;\")}a.push(\"}},\"),h.length>0&&d.push(\"}}\");var S=[];for(c=0;c<1<<n-1;++c)S.push(\"v\"+c);S.push(\"c0\",\"c1\",\"p0\",\"p1\",\"a\",\"b\",\"c\"),a.push(\"cell:function cellFunc(\",S.join(),\"){\");var A=i(n-1);for(a.push(\"if(p0){b.push(\",A.map((function(t){return\"[\"+t.map((function(t){return\"v\"+t}))+\"]\"})).join(),\")}else{b.push(\",A.map((function(t){var e=t.slice();return e.reverse(),\"[\"+e.map((function(t){return\"v\"+t}))+\"]\"})).join(),\")}}});function \",o,\"(array,level){var verts=[],cells=[];contour(array,verts,cells,level);return {positions:verts,cells:cells};} return \",o,\";\"),c=0;c<h.length;++c)a.push(h[c].join(\"\"));return new Function(\"genContour\",a.join(\"\"))(r)}(t.order,t.dtype)),s(t,e)};var r=t(\"ndarray-extract-contour\"),i=t(\"triangulate-hypercube\"),a=t(\"zero-crossings\"),o={}},{\"ndarray-extract-contour\":487,\"triangulate-hypercube\":580,\"zero-crossings\":624}],571:[function(t,e,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var r=2*Math.PI,i=function(t,e,n,r,i,a,o){var s=t.x,l=t.y;return{x:r*(s*=e)-i*(l*=n)+a,y:i*s+r*l+o}},a=function(t,e){var n=1.5707963267948966===e?.551915024494:-1.5707963267948966===e?-.551915024494:4/3*Math.tan(e/4),r=Math.cos(t),i=Math.sin(t),a=Math.cos(t+e),o=Math.sin(t+e);return[{x:r-i*n,y:i+r*n},{x:a+o*n,y:o-a*n},{x:a,y:o}]},o=function(t,e,n,r){var i=t*n+e*r;return i>1&&(i=1),i<-1&&(i=-1),(t*r-e*n<0?-1:1)*Math.acos(i)};n.default=function(t){var e=t.px,n=t.py,s=t.cx,l=t.cy,c=t.rx,u=t.ry,h=t.xAxisRotation,d=void 0===h?0:h,f=t.largeArcFlag,p=void 0===f?0:f,m=t.sweepFlag,g=void 0===m?0:m,y=[];if(0===c||0===u)return[];var v=Math.sin(d*r/360),_=Math.cos(d*r/360),b=_*(e-s)/2+v*(n-l)/2,x=-v*(e-s)/2+_*(n-l)/2;if(0===b&&0===x)return[];c=Math.abs(c),u=Math.abs(u);var w=Math.pow(b,2)/Math.pow(c,2)+Math.pow(x,2)/Math.pow(u,2);w>1&&(c*=Math.sqrt(w),u*=Math.sqrt(w));var k=function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var n=[],r=!0,i=!1,a=void 0;try{for(var o,s=t[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);r=!0);}catch(l){i=!0,a=l}finally{try{!r&&s.return&&s.return()}finally{if(i)throw a}}return n}(t,e);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}(function(t,e,n,i,a,s,l,c,u,h,d,f){var p=Math.pow(a,2),m=Math.pow(s,2),g=Math.pow(d,2),y=Math.pow(f,2),v=p*m-p*y-m*g;v<0&&(v=0),v/=p*y+m*g;var _=(v=Math.sqrt(v)*(l===c?-1:1))*a/s*f,b=v*-s/a*d,x=h*_-u*b+(t+n)/2,w=u*_+h*b+(e+i)/2,k=(d-_)/a,M=(f-b)/s,T=(-d-_)/a,S=(-f-b)/s,A=o(1,0,k,M),L=o(k,M,T,S);return 0===c&&L>0&&(L-=r),1===c&&L<0&&(L+=r),[x,w,A,L]}(e,n,s,l,c,u,p,g,v,_,b,x),4),M=k[0],T=k[1],S=k[2],A=k[3],L=Math.abs(A)/(r/4);Math.abs(1-L)<1e-7&&(L=1);var C=Math.max(Math.ceil(L),1);A/=C;for(var E=0;E<C;E++)y.push(a(S,A)),S+=A;return y.map((function(t){var e=i(t[0],c,u,_,v,M,T),n=e.x,r=e.y,a=i(t[1],c,u,_,v,M,T),o=a.x,s=a.y,l=i(t[2],c,u,_,v,M,T);return{x1:n,y1:r,x2:o,y2:s,x:l.x,y:l.y}}))},e.exports=n.default},{}],572:[function(t,e,n){\"use strict\";var r=t(\"parse-svg-path\"),i=t(\"abs-svg-path\"),a=t(\"normalize-svg-path\"),o=t(\"is-svg-path\"),s=t(\"assert\");e.exports=function(t){if(Array.isArray(t)&&1===t.length&&\"string\"==typeof t[0]&&(t=t[0]),\"string\"==typeof t&&(s(o(t),\"String is not an SVG path.\"),t=r(t)),s(Array.isArray(t),\"Argument should be a string or an array of path segments.\"),t=i(t),!(t=a(t)).length)return[0,0,0,0];for(var e=[1/0,1/0,-1/0,-1/0],n=0,l=t.length;n<l;n++)for(var c=t[n].slice(1),u=0;u<c.length;u+=2)c[u+0]<e[0]&&(e[0]=c[u+0]),c[u+1]<e[1]&&(e[1]=c[u+1]),c[u+0]>e[2]&&(e[2]=c[u+0]),c[u+1]>e[3]&&(e[3]=c[u+1]);return e}},{\"abs-svg-path\":65,assert:73,\"is-svg-path\":471,\"normalize-svg-path\":573,\"parse-svg-path\":505}],573:[function(t,e,n){\"use strict\";e.exports=function(t){for(var e,n=[],o=0,s=0,l=0,c=0,u=null,h=null,d=0,f=0,p=0,m=t.length;p<m;p++){var g=t[p],y=g[0];switch(y){case\"M\":l=g[1],c=g[2];break;case\"A\":var v=r({px:d,py:f,cx:g[6],cy:g[7],rx:g[1],ry:g[2],xAxisRotation:g[3],largeArcFlag:g[4],sweepFlag:g[5]});if(!v.length)continue;for(var _,b=0;b<v.length;b++)g=[\"C\",(_=v[b]).x1,_.y1,_.x2,_.y2,_.x,_.y],b<v.length-1&&n.push(g);break;case\"S\":var x=d,w=f;\"C\"!=e&&\"S\"!=e||(x+=x-o,w+=w-s),g=[\"C\",x,w,g[1],g[2],g[3],g[4]];break;case\"T\":\"Q\"==e||\"T\"==e?(u=2*d-u,h=2*f-h):(u=d,h=f),g=a(d,f,u,h,g[1],g[2]);break;case\"Q\":u=g[1],h=g[2],g=a(d,f,g[1],g[2],g[3],g[4]);break;case\"L\":g=i(d,f,g[1],g[2]);break;case\"H\":g=i(d,f,g[1],f);break;case\"V\":g=i(d,f,d,g[1]);break;case\"Z\":g=i(d,f,l,c)}e=y,d=g[g.length-2],f=g[g.length-1],g.length>4?(o=g[g.length-4],s=g[g.length-3]):(o=d,s=f),n.push(g)}return n};var r=t(\"svg-arc-to-cubic-bezier\");function i(t,e,n,r){return[\"C\",t,e,n,r,n,r]}function a(t,e,n,r,i,a){return[\"C\",t/3+2/3*n,e/3+2/3*r,i/3+2/3*n,a/3+2/3*r,i,a]}},{\"svg-arc-to-cubic-bezier\":571}],574:[function(t,e,n){\"use strict\";var r,i=t(\"svg-path-bounds\"),a=t(\"parse-svg-path\"),o=t(\"draw-svg-path\"),s=t(\"is-svg-path\"),l=t(\"bitmap-sdf\"),c=document.createElement(\"canvas\"),u=c.getContext(\"2d\");e.exports=function(t,e){if(!s(t))throw Error(\"Argument should be valid svg path string\");var n,h;e||(e={}),e.shape?(n=e.shape[0],h=e.shape[1]):(n=c.width=e.w||e.width||200,h=c.height=e.h||e.height||200);var d=Math.min(n,h),f=e.stroke||0,p=e.viewbox||e.viewBox||i(t),m=[n/(p[2]-p[0]),h/(p[3]-p[1])],g=Math.min(m[0]||0,m[1]||0)/2;if(u.fillStyle=\"black\",u.fillRect(0,0,n,h),u.fillStyle=\"white\",f&&(\"number\"!=typeof f&&(f=1),u.strokeStyle=f>0?\"white\":\"black\",u.lineWidth=Math.abs(f)),u.translate(.5*n,.5*h),u.scale(g,g),function(){if(null!=r)return r;var t=document.createElement(\"canvas\").getContext(\"2d\");if(t.canvas.width=t.canvas.height=1,!window.Path2D)return r=!1;var e=new Path2D(\"M0,0h1v1h-1v-1Z\");t.fillStyle=\"black\",t.fill(e);var n=t.getImageData(0,0,1,1);return r=n&&n.data&&255===n.data[3]}()){var y=new Path2D(t);u.fill(y),f&&u.stroke(y)}else{var v=a(t);o(u,v),u.fill(),f&&u.stroke()}return u.setTransform(1,0,0,1,0,0),l(u,{cutoff:null!=e.cutoff?e.cutoff:.5,radius:null!=e.radius?e.radius:.5*d})}},{\"bitmap-sdf\":98,\"draw-svg-path\":174,\"is-svg-path\":471,\"parse-svg-path\":505,\"svg-path-bounds\":572}],575:[function(t,e,n){(function(n){(function(){\"use strict\";e.exports=function t(e,n,i){i=i||{};var o=a[e];o||(o=a[e]={\" \":{data:new Float32Array(0),shape:.2}});var s=o[n];if(!s)if(n.length<=1||!/\\d/.test(n))s=o[n]=function(t){for(var e=t.cells,n=t.positions,r=new Float32Array(6*e.length),i=0,a=0,o=0;o<e.length;++o)for(var s=e[o],l=0;l<3;++l){var c=n[s[l]];r[i++]=c[0],r[i++]=c[1]+1.4,a=Math.max(c[0],a)}return{data:r,shape:a}}(r(n,{triangles:!0,font:e,textAlign:i.textAlign||\"left\",textBaseline:\"alphabetic\",styletags:{breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0}}));else{for(var l=n.split(/(\\d|\\s)/),c=new Array(l.length),u=0,h=0,d=0;d<l.length;++d)c[d]=t(e,l[d]),u+=c[d].data.length,h+=c[d].shape,d>0&&(h+=.02);var f=new Float32Array(u),p=0,m=-.5*h;for(d=0;d<c.length;++d){for(var g=c[d].data,y=0;y<g.length;y+=2)f[p++]=g[y]+m,f[p++]=g[y+1];m+=c[d].shape+.02}s=o[n]={data:f,shape:h}}return s};var r=t(\"vectorize-text\"),i=window||n.global||{},a=i.__TEXT_CACHE||{};i.__TEXT_CACHE={}}).call(this)}).call(this,t(\"_process\"))},{_process:526,\"vectorize-text\":600}],576:[function(t,e,n){!function(t){var n=/^\\s+/,r=/\\s+$/,i=0,a=t.round,o=t.min,s=t.max,l=t.random;function c(e,l){if(l=l||{},(e=e||\"\")instanceof c)return e;if(!(this instanceof c))return new c(e,l);var u=function(e){var i,a,l={r:0,g:0,b:0},c=1,u=null,h=null,d=null,f=!1,p=!1;return\"string\"==typeof e&&(e=function(t){t=t.replace(n,\"\").replace(r,\"\").toLowerCase();var e,i=!1;if(A[t])t=A[t],i=!0;else if(\"transparent\"==t)return{r:0,g:0,b:0,a:0,format:\"name\"};return(e=B.rgb.exec(t))?{r:e[1],g:e[2],b:e[3]}:(e=B.rgba.exec(t))?{r:e[1],g:e[2],b:e[3],a:e[4]}:(e=B.hsl.exec(t))?{h:e[1],s:e[2],l:e[3]}:(e=B.hsla.exec(t))?{h:e[1],s:e[2],l:e[3],a:e[4]}:(e=B.hsv.exec(t))?{h:e[1],s:e[2],v:e[3]}:(e=B.hsva.exec(t))?{h:e[1],s:e[2],v:e[3],a:e[4]}:(e=B.hex8.exec(t))?{r:D(e[1]),g:D(e[2]),b:D(e[3]),a:z(e[4]),format:i?\"name\":\"hex8\"}:(e=B.hex6.exec(t))?{r:D(e[1]),g:D(e[2]),b:D(e[3]),format:i?\"name\":\"hex\"}:(e=B.hex4.exec(t))?{r:D(e[1]+\"\"+e[1]),g:D(e[2]+\"\"+e[2]),b:D(e[3]+\"\"+e[3]),a:z(e[4]+\"\"+e[4]),format:i?\"name\":\"hex8\"}:!!(e=B.hex3.exec(t))&&{r:D(e[1]+\"\"+e[1]),g:D(e[2]+\"\"+e[2]),b:D(e[3]+\"\"+e[3]),format:i?\"name\":\"hex\"}}(e)),\"object\"==typeof e&&(Y(e.r)&&Y(e.g)&&Y(e.b)?(i=e.g,a=e.b,l={r:255*E(e.r,255),g:255*E(i,255),b:255*E(a,255)},f=!0,p=\"%\"===String(e.r).substr(-1)?\"prgb\":\"rgb\"):Y(e.h)&&Y(e.s)&&Y(e.v)?(u=P(e.s),h=P(e.v),l=function(e,n,r){e=6*E(e,360),n=E(n,100),r=E(r,100);var i=t.floor(e),a=e-i,o=r*(1-n),s=r*(1-a*n),l=r*(1-(1-a)*n),c=i%6;return{r:255*[r,s,o,o,l,r][c],g:255*[l,r,r,s,o,o][c],b:255*[o,o,l,r,r,s][c]}}(e.h,u,h),f=!0,p=\"hsv\"):Y(e.h)&&Y(e.s)&&Y(e.l)&&(u=P(e.s),d=P(e.l),l=function(t,e,n){var r,i,a;function o(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t}if(t=E(t,360),e=E(e,100),n=E(n,100),0===e)r=i=a=n;else{var s=n<.5?n*(1+e):n+e-n*e,l=2*n-s;r=o(l,s,t+1/3),i=o(l,s,t),a=o(l,s,t-1/3)}return{r:255*r,g:255*i,b:255*a}}(e.h,u,d),f=!0,p=\"hsl\"),e.hasOwnProperty(\"a\")&&(c=e.a)),c=C(c),{ok:f,format:e.format||p,r:o(255,s(l.r,0)),g:o(255,s(l.g,0)),b:o(255,s(l.b,0)),a:c}}(e);this._originalInput=e,this._r=u.r,this._g=u.g,this._b=u.b,this._a=u.a,this._roundA=a(100*this._a)/100,this._format=l.format||u.format,this._gradientType=l.gradientType,this._r<1&&(this._r=a(this._r)),this._g<1&&(this._g=a(this._g)),this._b<1&&(this._b=a(this._b)),this._ok=u.ok,this._tc_id=i++}function u(t,e,n){t=E(t,255),e=E(e,255),n=E(n,255);var r,i,a=s(t,e,n),l=o(t,e,n),c=(a+l)/2;if(a==l)r=i=0;else{var u=a-l;switch(i=c>.5?u/(2-a-l):u/(a+l),a){case t:r=(e-n)/u+(e<n?6:0);break;case e:r=(n-t)/u+2;break;case n:r=(t-e)/u+4}r/=6}return{h:r,s:i,l:c}}function h(t,e,n){t=E(t,255),e=E(e,255),n=E(n,255);var r,i,a=s(t,e,n),l=o(t,e,n),c=a,u=a-l;if(i=0===a?0:u/a,a==l)r=0;else{switch(a){case t:r=(e-n)/u+(e<n?6:0);break;case e:r=(n-t)/u+2;break;case n:r=(t-e)/u+4}r/=6}return{h:r,s:i,v:c}}function d(t,e,n,r){var i=[I(a(t).toString(16)),I(a(e).toString(16)),I(a(n).toString(16))];return r&&i[0].charAt(0)==i[0].charAt(1)&&i[1].charAt(0)==i[1].charAt(1)&&i[2].charAt(0)==i[2].charAt(1)?i[0].charAt(0)+i[1].charAt(0)+i[2].charAt(0):i.join(\"\")}function f(t,e,n,r){return[I(R(r)),I(a(t).toString(16)),I(a(e).toString(16)),I(a(n).toString(16))].join(\"\")}function p(t,e){e=0===e?0:e||10;var n=c(t).toHsl();return n.s-=e/100,n.s=O(n.s),c(n)}function m(t,e){e=0===e?0:e||10;var n=c(t).toHsl();return n.s+=e/100,n.s=O(n.s),c(n)}function g(t){return c(t).desaturate(100)}function y(t,e){e=0===e?0:e||10;var n=c(t).toHsl();return n.l+=e/100,n.l=O(n.l),c(n)}function v(t,e){e=0===e?0:e||10;var n=c(t).toRgb();return n.r=s(0,o(255,n.r-a(-e/100*255))),n.g=s(0,o(255,n.g-a(-e/100*255))),n.b=s(0,o(255,n.b-a(-e/100*255))),c(n)}function _(t,e){e=0===e?0:e||10;var n=c(t).toHsl();return n.l-=e/100,n.l=O(n.l),c(n)}function b(t,e){var n=c(t).toHsl(),r=(n.h+e)%360;return n.h=r<0?360+r:r,c(n)}function x(t){var e=c(t).toHsl();return e.h=(e.h+180)%360,c(e)}function w(t){var e=c(t).toHsl(),n=e.h;return[c(t),c({h:(n+120)%360,s:e.s,l:e.l}),c({h:(n+240)%360,s:e.s,l:e.l})]}function k(t){var e=c(t).toHsl(),n=e.h;return[c(t),c({h:(n+90)%360,s:e.s,l:e.l}),c({h:(n+180)%360,s:e.s,l:e.l}),c({h:(n+270)%360,s:e.s,l:e.l})]}function M(t){var e=c(t).toHsl(),n=e.h;return[c(t),c({h:(n+72)%360,s:e.s,l:e.l}),c({h:(n+216)%360,s:e.s,l:e.l})]}function T(t,e,n){e=e||6,n=n||30;var r=c(t).toHsl(),i=360/n,a=[c(t)];for(r.h=(r.h-(i*e>>1)+720)%360;--e;)r.h=(r.h+i)%360,a.push(c(r));return a}function S(t,e){e=e||6;for(var n=c(t).toHsv(),r=n.h,i=n.s,a=n.v,o=[],s=1/e;e--;)o.push(c({h:r,s:i,v:a})),a=(a+s)%1;return o}c.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},getLuminance:function(){var e,n,r,i=this.toRgb();return n=i.g/255,r=i.b/255,.2126*((e=i.r/255)<=.03928?e/12.92:t.pow((e+.055)/1.055,2.4))+.7152*(n<=.03928?n/12.92:t.pow((n+.055)/1.055,2.4))+.0722*(r<=.03928?r/12.92:t.pow((r+.055)/1.055,2.4))},setAlpha:function(t){return this._a=C(t),this._roundA=a(100*this._a)/100,this},toHsv:function(){var t=h(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=h(this._r,this._g,this._b),e=a(360*t.h),n=a(100*t.s),r=a(100*t.v);return 1==this._a?\"hsv(\"+e+\", \"+n+\"%, \"+r+\"%)\":\"hsva(\"+e+\", \"+n+\"%, \"+r+\"%, \"+this._roundA+\")\"},toHsl:function(){var t=u(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=u(this._r,this._g,this._b),e=a(360*t.h),n=a(100*t.s),r=a(100*t.l);return 1==this._a?\"hsl(\"+e+\", \"+n+\"%, \"+r+\"%)\":\"hsla(\"+e+\", \"+n+\"%, \"+r+\"%, \"+this._roundA+\")\"},toHex:function(t){return d(this._r,this._g,this._b,t)},toHexString:function(t){return\"#\"+this.toHex(t)},toHex8:function(t){return function(t,e,n,r,i){var o=[I(a(t).toString(16)),I(a(e).toString(16)),I(a(n).toString(16)),I(R(r))];return i&&o[0].charAt(0)==o[0].charAt(1)&&o[1].charAt(0)==o[1].charAt(1)&&o[2].charAt(0)==o[2].charAt(1)&&o[3].charAt(0)==o[3].charAt(1)?o[0].charAt(0)+o[1].charAt(0)+o[2].charAt(0)+o[3].charAt(0):o.join(\"\")}(this._r,this._g,this._b,this._a,t)},toHex8String:function(t){return\"#\"+this.toHex8(t)},toRgb:function(){return{r:a(this._r),g:a(this._g),b:a(this._b),a:this._a}},toRgbString:function(){return 1==this._a?\"rgb(\"+a(this._r)+\", \"+a(this._g)+\", \"+a(this._b)+\")\":\"rgba(\"+a(this._r)+\", \"+a(this._g)+\", \"+a(this._b)+\", \"+this._roundA+\")\"},toPercentageRgb:function(){return{r:a(100*E(this._r,255))+\"%\",g:a(100*E(this._g,255))+\"%\",b:a(100*E(this._b,255))+\"%\",a:this._a}},toPercentageRgbString:function(){return 1==this._a?\"rgb(\"+a(100*E(this._r,255))+\"%, \"+a(100*E(this._g,255))+\"%, \"+a(100*E(this._b,255))+\"%)\":\"rgba(\"+a(100*E(this._r,255))+\"%, \"+a(100*E(this._g,255))+\"%, \"+a(100*E(this._b,255))+\"%, \"+this._roundA+\")\"},toName:function(){return 0===this._a?\"transparent\":!(this._a<1)&&(L[d(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e=\"#\"+f(this._r,this._g,this._b,this._a),n=e,r=this._gradientType?\"GradientType = 1, \":\"\";if(t){var i=c(t);n=\"#\"+f(i._r,i._g,i._b,i._a)}return\"progid:DXImageTransform.Microsoft.gradient(\"+r+\"startColorstr=\"+e+\",endColorstr=\"+n+\")\"},toString:function(t){var e=!!t;t=t||this._format;var n=!1;return e||!(this._a<1&&this._a>=0)||\"hex\"!==t&&\"hex6\"!==t&&\"hex3\"!==t&&\"hex4\"!==t&&\"hex8\"!==t&&\"name\"!==t?(\"rgb\"===t&&(n=this.toRgbString()),\"prgb\"===t&&(n=this.toPercentageRgbString()),\"hex\"!==t&&\"hex6\"!==t||(n=this.toHexString()),\"hex3\"===t&&(n=this.toHexString(!0)),\"hex4\"===t&&(n=this.toHex8String(!0)),\"hex8\"===t&&(n=this.toHex8String()),\"name\"===t&&(n=this.toName()),\"hsl\"===t&&(n=this.toHslString()),\"hsv\"===t&&(n=this.toHsvString()),n||this.toHexString()):\"name\"===t&&0===this._a?this.toName():this.toRgbString()},clone:function(){return c(this.toString())},_applyModification:function(t,e){var n=t.apply(null,[this].concat([].slice.call(e)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(y,arguments)},brighten:function(){return this._applyModification(v,arguments)},darken:function(){return this._applyModification(_,arguments)},desaturate:function(){return this._applyModification(p,arguments)},saturate:function(){return this._applyModification(m,arguments)},greyscale:function(){return this._applyModification(g,arguments)},spin:function(){return this._applyModification(b,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(T,arguments)},complement:function(){return this._applyCombination(x,arguments)},monochromatic:function(){return this._applyCombination(S,arguments)},splitcomplement:function(){return this._applyCombination(M,arguments)},triad:function(){return this._applyCombination(w,arguments)},tetrad:function(){return this._applyCombination(k,arguments)}},c.fromRatio=function(t,e){if(\"object\"==typeof t){var n={};for(var r in t)t.hasOwnProperty(r)&&(n[r]=\"a\"===r?t[r]:P(t[r]));t=n}return c(t,e)},c.equals=function(t,e){return!(!t||!e)&&c(t).toRgbString()==c(e).toRgbString()},c.random=function(){return c.fromRatio({r:l(),g:l(),b:l()})},c.mix=function(t,e,n){n=0===n?0:n||50;var r=c(t).toRgb(),i=c(e).toRgb(),a=n/100;return c({r:(i.r-r.r)*a+r.r,g:(i.g-r.g)*a+r.g,b:(i.b-r.b)*a+r.b,a:(i.a-r.a)*a+r.a})},c.readability=function(e,n){var r=c(e),i=c(n);return(t.max(r.getLuminance(),i.getLuminance())+.05)/(t.min(r.getLuminance(),i.getLuminance())+.05)},c.isReadable=function(t,e,n){var r,i,a,o,s,l=c.readability(t,e);switch(i=!1,(a=n,\"AA\"!==(o=((a=a||{level:\"AA\",size:\"small\"}).level||\"AA\").toUpperCase())&&\"AAA\"!==o&&(o=\"AA\"),\"small\"!==(s=(a.size||\"small\").toLowerCase())&&\"large\"!==s&&(s=\"small\"),r={level:o,size:s}).level+r.size){case\"AAsmall\":case\"AAAlarge\":i=l>=4.5;break;case\"AAlarge\":i=l>=3;break;case\"AAAsmall\":i=l>=7}return i},c.mostReadable=function(t,e,n){var r,i,a,o,s=null,l=0;i=(n=n||{}).includeFallbackColors,a=n.level,o=n.size;for(var u=0;u<e.length;u++)(r=c.readability(t,e[u]))>l&&(l=r,s=c(e[u]));return c.isReadable(t,s,{level:a,size:o})||!i?s:(n.includeFallbackColors=!1,c.mostReadable(t,[\"#fff\",\"#000\"],n))};var A=c.names={aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"0ff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000\",blanchedalmond:\"ffebcd\",blue:\"00f\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",burntsienna:\"ea7e5d\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"0ff\",darkblue:\"00008b\",darkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgreen:\"006400\",darkgrey:\"a9a9a9\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkslategrey:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dimgrey:\"696969\",dodgerblue:\"1e90ff\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"f0f\",gainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",green:\"008000\",greenyellow:\"adff2f\",grey:\"808080\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgray:\"d3d3d3\",lightgreen:\"90ee90\",lightgrey:\"d3d3d3\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",lightslategray:\"789\",lightslategrey:\"789\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"0f0\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"f0f\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370db\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",oldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"db7093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",rebeccapurple:\"663399\",red:\"f00\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",slategray:\"708090\",slategrey:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",wheat:\"f5deb3\",white:\"fff\",whitesmoke:\"f5f5f5\",yellow:\"ff0\",yellowgreen:\"9acd32\"},L=c.hexNames=function(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[t[n]]=n);return e}(A);function C(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function E(e,n){(function(t){return\"string\"==typeof t&&-1!=t.indexOf(\".\")&&1===parseFloat(t)})(e)&&(e=\"100%\");var r=function(t){return\"string\"==typeof t&&-1!=t.indexOf(\"%\")}(e);return e=o(n,s(0,parseFloat(e))),r&&(e=parseInt(e*n,10)/100),t.abs(e-n)<1e-6?1:e%n/parseFloat(n)}function O(t){return o(1,s(0,t))}function D(t){return parseInt(t,16)}function I(t){return 1==t.length?\"0\"+t:\"\"+t}function P(t){return t<=1&&(t=100*t+\"%\"),t}function R(e){return t.round(255*parseFloat(e)).toString(16)}function z(t){return D(t)/255}var j,F,N,B=(F=\"[\\\\s|\\\\(]+(\"+(j=\"(?:[-\\\\+]?\\\\d*\\\\.\\\\d+%?)|(?:[-\\\\+]?\\\\d+%?)\")+\")[,|\\\\s]+(\"+j+\")[,|\\\\s]+(\"+j+\")\\\\s*\\\\)?\",N=\"[\\\\s|\\\\(]+(\"+j+\")[,|\\\\s]+(\"+j+\")[,|\\\\s]+(\"+j+\")[,|\\\\s]+(\"+j+\")\\\\s*\\\\)?\",{CSS_UNIT:new RegExp(j),rgb:new RegExp(\"rgb\"+F),rgba:new RegExp(\"rgba\"+N),hsl:new RegExp(\"hsl\"+F),hsla:new RegExp(\"hsla\"+N),hsv:new RegExp(\"hsv\"+F),hsva:new RegExp(\"hsva\"+N),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function Y(t){return!!B.CSS_UNIT.exec(t)}void 0!==e&&e.exports?e.exports=c:window.tinycolor=c}(Math)},{}],577:[function(t,e,n){\"use strict\";e.exports=i,e.exports.float32=e.exports.float=i,e.exports.fract32=e.exports.fract=function(t){if(t.length){for(var e=i(t),n=0,r=e.length;n<r;n++)e[n]=t[n]-e[n];return e}return i(t-i(t))};var r=new Float32Array(1);function i(t){if(t.length){if(t instanceof Float32Array)return t;var e=new Float32Array(t);return e.set(t),e}return r[0]=t,r[0]}},{}],578:[function(t,e,n){\"use strict\";var r=t(\"parse-unit\");function i(t,e){var n=r(getComputedStyle(t).getPropertyValue(e));return n[0]*a(n[1],t)}function a(t,e){switch(e=e||document.body,t=(t||\"px\").trim().toLowerCase(),e!==window&&e!==document||(e=document.body),t){case\"%\":return e.clientHeight/100;case\"ch\":case\"ex\":return function(t,e){var n=document.createElement(\"div\");n.style[\"font-size\"]=\"128\"+t,e.appendChild(n);var r=i(n,\"font-size\")/128;return e.removeChild(n),r}(t,e);case\"em\":return i(e,\"font-size\");case\"rem\":return i(document.body,\"font-size\");case\"vw\":return window.innerWidth/100;case\"vh\":return window.innerHeight/100;case\"vmin\":return Math.min(window.innerWidth,window.innerHeight)/100;case\"vmax\":return Math.max(window.innerWidth,window.innerHeight)/100;case\"in\":return 96;case\"cm\":return 96/2.54;case\"mm\":return 96/25.4;case\"pt\":return 96/72;case\"pc\":return 16}return 1}e.exports=a},{\"parse-unit\":506}],579:[function(t,e,n){!function(t,r){!function(t){\"use strict\";function e(t){return t}function n(t){if(null==t)return e;var n,r,i=t.scale[0],a=t.scale[1],o=t.translate[0],s=t.translate[1];return function(t,e){e||(n=r=0);var l=2,c=t.length,u=new Array(c);for(u[0]=(n+=t[0])*i+o,u[1]=(r+=t[1])*a+s;l<c;)u[l]=t[l],++l;return u}}function r(t){var e,r=n(t.transform),i=1/0,a=i,o=-i,s=-i;function l(t){(t=r(t))[0]<i&&(i=t[0]),t[0]>o&&(o=t[0]),t[1]<a&&(a=t[1]),t[1]>s&&(s=t[1])}function c(t){switch(t.type){case\"GeometryCollection\":t.geometries.forEach(c);break;case\"Point\":l(t.coordinates);break;case\"MultiPoint\":t.coordinates.forEach(l)}}for(e in t.arcs.forEach((function(t){for(var e,n=-1,l=t.length;++n<l;)(e=r(t[n],n))[0]<i&&(i=e[0]),e[0]>o&&(o=e[0]),e[1]<a&&(a=e[1]),e[1]>s&&(s=e[1])})),t.objects)c(t.objects[e]);return[i,a,o,s]}function i(t,e){var n=e.id,r=e.bbox,i=null==e.properties?{}:e.properties,o=a(t,e);return null==n&&null==r?{type:\"Feature\",properties:i,geometry:o}:null==r?{type:\"Feature\",id:n,properties:i,geometry:o}:{type:\"Feature\",id:n,bbox:r,properties:i,geometry:o}}function a(t,e){var r=n(t.transform),i=t.arcs;function a(t,e){e.length&&e.pop();for(var n=i[t<0?~t:t],a=0,o=n.length;a<o;++a)e.push(r(n[a],a));t<0&&function(t,e){for(var n,r=t.length,i=r-e;i<--r;)n=t[i],t[i++]=t[r],t[r]=n}(e,o)}function o(t){return r(t)}function s(t){for(var e=[],n=0,r=t.length;n<r;++n)a(t[n],e);return e.length<2&&e.push(e[0]),e}function l(t){for(var e=s(t);e.length<4;)e.push(e[0]);return e}function c(t){return t.map(l)}return function t(e){var n,r=e.type;switch(r){case\"GeometryCollection\":return{type:r,geometries:e.geometries.map(t)};case\"Point\":n=o(e.coordinates);break;case\"MultiPoint\":n=e.coordinates.map(o);break;case\"LineString\":n=s(e.arcs);break;case\"MultiLineString\":n=e.arcs.map(s);break;case\"Polygon\":n=c(e.arcs);break;case\"MultiPolygon\":n=e.arcs.map(c);break;default:return null}return{type:r,coordinates:n}}(e)}function o(t,e){var n={},r={},i={},a=[],o=-1;function s(t,e){for(var r in t){var i=t[r];delete e[i.start],delete i.start,delete i.end,i.forEach((function(t){n[t<0?~t:t]=1})),a.push(i)}}return e.forEach((function(n,r){var i,a=t.arcs[n<0?~n:n];a.length<3&&!a[1][0]&&!a[1][1]&&(i=e[++o],e[o]=n,e[r]=i)})),e.forEach((function(e){var n,a,o=function(e){var n,r=t.arcs[e<0?~e:e],i=r[0];return t.transform?(n=[0,0],r.forEach((function(t){n[0]+=t[0],n[1]+=t[1]}))):n=r[r.length-1],e<0?[n,i]:[i,n]}(e),s=o[0],l=o[1];if(n=i[s])if(delete i[n.end],n.push(e),n.end=l,a=r[l]){delete r[a.start];var c=a===n?n:n.concat(a);r[c.start=n.start]=i[c.end=a.end]=c}else r[n.start]=i[n.end]=n;else if(n=r[l])if(delete r[n.start],n.unshift(e),n.start=s,a=i[s]){delete i[a.end];var u=a===n?n:a.concat(n);r[u.start=a.start]=i[u.end=n.end]=u}else r[n.start]=i[n.end]=n;else r[(n=[e]).start=s]=i[n.end=l]=n})),s(i,r),s(r,i),e.forEach((function(t){n[t<0?~t:t]||a.push([t])})),a}function s(t,e,n){var r,i,a;if(arguments.length>1)r=l(0,e,n);else for(i=0,r=new Array(a=t.arcs.length);i<a;++i)r[i]=i;return{type:\"MultiLineString\",arcs:o(t,r)}}function l(t,e,n){var r,i=[],a=[];function o(t){var e=t<0?~t:t;(a[e]||(a[e]=[])).push({i:t,g:r})}function s(t){t.forEach(o)}function l(t){t.forEach(s)}return function t(e){switch(r=e,e.type){case\"GeometryCollection\":e.geometries.forEach(t);break;case\"LineString\":s(e.arcs);break;case\"MultiLineString\":case\"Polygon\":l(e.arcs);break;case\"MultiPolygon\":!function(t){t.forEach(l)}(e.arcs)}}(e),a.forEach(null==n?function(t){i.push(t[0].i)}:function(t){n(t[0].g,t[t.length-1].g)&&i.push(t[0].i)}),i}function c(t,e){var n={},r=[],i=[];function s(t){t.forEach((function(e){e.forEach((function(e){(n[e=e<0?~e:e]||(n[e]=[])).push(t)}))})),r.push(t)}function l(e){return function(t){for(var e,n=-1,r=t.length,i=t[r-1],a=0;++n<r;)a+=(e=i)[0]*(i=t[n])[1]-e[1]*i[0];return Math.abs(a)}(a(t,{type:\"Polygon\",arcs:[e]}).coordinates[0])}return e.forEach((function t(e){switch(e.type){case\"GeometryCollection\":e.geometries.forEach(t);break;case\"Polygon\":s(e.arcs);break;case\"MultiPolygon\":e.arcs.forEach(s)}})),r.forEach((function(t){if(!t._){var e=[],r=[t];for(t._=1,i.push(e);t=r.pop();)e.push(t),t.forEach((function(t){t.forEach((function(t){n[t<0?~t:t].forEach((function(t){t._||(t._=1,r.push(t))}))}))}))}})),r.forEach((function(t){delete t._})),{type:\"MultiPolygon\",arcs:i.map((function(e){var r,i=[];if(e.forEach((function(t){t.forEach((function(t){t.forEach((function(t){n[t<0?~t:t].length<2&&i.push(t)}))}))})),(r=(i=o(t,i)).length)>1)for(var a,s,c=1,u=l(i[0]);c<r;++c)(a=l(i[c]))>u&&(s=i[0],i[0]=i[c],i[c]=s,u=a);return i})).filter((function(t){return t.length>0}))}}function u(t,e){for(var n=0,r=t.length;n<r;){var i=n+r>>>1;t[i]<e?n=i+1:r=i}return n}function h(t){if(null==t)return e;var n,r,i=t.scale[0],a=t.scale[1],o=t.translate[0],s=t.translate[1];return function(t,e){e||(n=r=0);var l=2,c=t.length,u=new Array(c),h=Math.round((t[0]-o)/i),d=Math.round((t[1]-s)/a);for(u[0]=h-n,n=h,u[1]=d-r,r=d;l<c;)u[l]=t[l],++l;return u}}t.bbox=r,t.feature=function(t,e){return\"string\"==typeof e&&(e=t.objects[e]),\"GeometryCollection\"===e.type?{type:\"FeatureCollection\",features:e.geometries.map((function(e){return i(t,e)}))}:i(t,e)},t.merge=function(t){return a(t,c.apply(this,arguments))},t.mergeArcs=c,t.mesh=function(t){return a(t,s.apply(this,arguments))},t.meshArcs=s,t.neighbors=function(t){var e={},n=t.map((function(){return[]}));function r(t,n){t.forEach((function(t){t<0&&(t=~t);var r=e[t];r?r.push(n):e[t]=[n]}))}function i(t,e){t.forEach((function(t){r(t,e)}))}var a={LineString:r,MultiLineString:i,Polygon:i,MultiPolygon:function(t,e){t.forEach((function(t){i(t,e)}))}};for(var o in t.forEach((function t(e,n){\"GeometryCollection\"===e.type?e.geometries.forEach((function(e){t(e,n)})):e.type in a&&a[e.type](e.arcs,n)})),e)for(var s=e[o],l=s.length,c=0;c<l;++c)for(var h=c+1;h<l;++h){var d,f=s[c],p=s[h];(d=n[f])[o=u(d,p)]!==p&&d.splice(o,0,p),(d=n[p])[o=u(d,f)]!==f&&d.splice(o,0,f)}return n},t.quantize=function(t,e){if(t.transform)throw new Error(\"already quantized\");if(e&&e.scale)l=t.bbox;else{if(!((n=Math.floor(e))>=2))throw new Error(\"n must be \\u22652\");var n,i=(l=t.bbox||r(t))[0],a=l[1],o=l[2],s=l[3];e={scale:[o-i?(o-i)/(n-1):1,s-a?(s-a)/(n-1):1],translate:[i,a]}}var l,c,u=h(e),d=t.objects,f={};function p(t){return u(t)}function m(t){var e;switch(t.type){case\"GeometryCollection\":e={type:\"GeometryCollection\",geometries:t.geometries.map(m)};break;case\"Point\":e={type:\"Point\",coordinates:p(t.coordinates)};break;case\"MultiPoint\":e={type:\"MultiPoint\",coordinates:t.coordinates.map(p)};break;default:return t}return null!=t.id&&(e.id=t.id),null!=t.bbox&&(e.bbox=t.bbox),null!=t.properties&&(e.properties=t.properties),e}for(c in d)f[c]=m(d[c]);return{type:\"Topology\",bbox:l,transform:e,objects:f,arcs:t.arcs.map((function(t){var e,n=0,r=1,i=t.length,a=new Array(i);for(a[0]=u(t[0],0);++n<i;)((e=u(t[n],n))[0]||e[1])&&(a[r++]=e);return 1===r&&(a[r++]=[0,0]),a.length=r,a}))}},t.transform=n,t.untransform=h,Object.defineProperty(t,\"__esModule\",{value:!0})}(\"object\"==typeof n&&void 0!==e?n:(t=t||self).topojson=t.topojson||{})}(this)},{}],580:[function(t,e,n){\"use strict\";e.exports=function(t){if(t<0)return[];if(0===t)return[[0]];for(var e=0|Math.round(a(t+1)),n=[],o=0;o<e;++o){for(var s=r.unrank(t,o),l=[0],c=0,u=0;u<s.length;++u)l.push(c+=1<<s[u]);i(s)<1&&(l[0]=c,l[t]=0),n.push(l)}return n};var r=t(\"permutation-rank\"),i=t(\"permutation-parity\"),a=t(\"gamma\")},{gamma:248,\"permutation-parity\":509,\"permutation-rank\":510}],581:[function(t,e,n){\"use strict\";e.exports=function(t){var e=(t=t||{}).center||[0,0,0],n=t.up||[0,1,0],r=t.right||h(n),i=t.radius||1,a=t.theta||0,u=t.phi||0;if(e=[].slice.call(e,0,3),n=[].slice.call(n,0,3),s(n,n),r=[].slice.call(r,0,3),s(r,r),\"eye\"in t){var f=t.eye,p=[f[0]-e[0],f[1]-e[1],f[2]-e[2]];o(r,p,n),c(r[0],r[1],r[2])<1e-6?r=h(n):s(r,r),i=c(p[0],p[1],p[2]);var m=l(n,p)/i,g=l(r,p)/i;u=Math.acos(m),a=Math.acos(g)}return i=Math.log(i),new d(t.zoomMin,t.zoomMax,e,n,r,i,a,u)};var r=t(\"filtered-vector\"),i=t(\"gl-mat4/invert\"),a=t(\"gl-mat4/rotate\"),o=t(\"gl-vec3/cross\"),s=t(\"gl-vec3/normalize\"),l=t(\"gl-vec3/dot\");function c(t,e,n){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(n,2))}function u(t){return Math.min(1,Math.max(-1,t))}function h(t){var e=Math.abs(t[0]),n=Math.abs(t[1]),r=Math.abs(t[2]),i=[0,0,0];e>Math.max(n,r)?i[2]=1:n>Math.max(e,r)?i[0]=1:i[1]=1;for(var a=0,o=0,l=0;l<3;++l)a+=t[l]*t[l],o+=i[l]*t[l];for(l=0;l<3;++l)i[l]-=o/a*t[l];return s(i,i),i}function d(t,e,n,i,a,o,s,l){this.center=r(n),this.up=r(i),this.right=r(a),this.radius=r([o]),this.angle=r([s,l]),this.angle.bounds=[[-1/0,-Math.PI/2],[1/0,Math.PI/2]],this.setDistanceLimits(t,e),this.computedCenter=this.center.curve(0),this.computedUp=this.up.curve(0),this.computedRight=this.right.curve(0),this.computedRadius=this.radius.curve(0),this.computedAngle=this.angle.curve(0),this.computedToward=[0,0,0],this.computedEye=[0,0,0],this.computedMatrix=new Array(16);for(var c=0;c<16;++c)this.computedMatrix[c]=.5;this.recalcMatrix(0)}var f=d.prototype;f.setDistanceLimits=function(t,e){t=t>0?Math.log(t):-1/0,e=e>0?Math.log(e):1/0,e=Math.max(e,t),this.radius.bounds[0][0]=t,this.radius.bounds[1][0]=e},f.getDistanceLimits=function(t){var e=this.radius.bounds[0];return t?(t[0]=Math.exp(e[0][0]),t[1]=Math.exp(e[1][0]),t):[Math.exp(e[0][0]),Math.exp(e[1][0])]},f.recalcMatrix=function(t){this.center.curve(t),this.up.curve(t),this.right.curve(t),this.radius.curve(t),this.angle.curve(t);for(var e=this.computedUp,n=this.computedRight,r=0,i=0,a=0;a<3;++a)i+=e[a]*n[a],r+=e[a]*e[a];var l=Math.sqrt(r),u=0;for(a=0;a<3;++a)n[a]-=e[a]*i/r,u+=n[a]*n[a],e[a]/=l;var h=Math.sqrt(u);for(a=0;a<3;++a)n[a]/=h;var d=this.computedToward;o(d,e,n),s(d,d);var f=Math.exp(this.computedRadius[0]),p=this.computedAngle[0],m=this.computedAngle[1],g=Math.cos(p),y=Math.sin(p),v=Math.cos(m),_=Math.sin(m),b=this.computedCenter,x=g*v,w=y*v,k=_,M=-g*_,T=-y*_,S=v,A=this.computedEye,L=this.computedMatrix;for(a=0;a<3;++a){var C=x*n[a]+w*d[a]+k*e[a];L[4*a+1]=M*n[a]+T*d[a]+S*e[a],L[4*a+2]=C,L[4*a+3]=0}var E=L[1],O=L[5],D=L[9],I=L[2],P=L[6],R=L[10],z=O*R-D*P,j=D*I-E*R,F=E*P-O*I,N=c(z,j,F);for(j/=N,F/=N,L[0]=z/=N,L[4]=j,L[8]=F,a=0;a<3;++a)A[a]=b[a]+L[2+4*a]*f;for(a=0;a<3;++a){u=0;for(var B=0;B<3;++B)u+=L[a+4*B]*A[B];L[12+a]=-u}L[15]=1},f.getMatrix=function(t,e){this.recalcMatrix(t);var n=this.computedMatrix;if(e){for(var r=0;r<16;++r)e[r]=n[r];return e}return n};var p=[0,0,0];f.rotate=function(t,e,n,r){if(this.angle.move(t,e,n),r){this.recalcMatrix(t);var i=this.computedMatrix;p[0]=i[2],p[1]=i[6],p[2]=i[10];for(var o=this.computedUp,s=this.computedRight,l=this.computedToward,c=0;c<3;++c)i[4*c]=o[c],i[4*c+1]=s[c],i[4*c+2]=l[c];for(a(i,i,r,p),c=0;c<3;++c)o[c]=i[4*c],s[c]=i[4*c+1];this.up.set(t,o[0],o[1],o[2]),this.right.set(t,s[0],s[1],s[2])}},f.pan=function(t,e,n,r){e=e||0,n=n||0,r=r||0,this.recalcMatrix(t);var i=this.computedMatrix,a=(Math.exp(this.computedRadius[0]),i[1]),o=i[5],s=i[9],l=c(a,o,s),u=i[0],h=i[4],d=i[8],f=u*(a/=l)+h*(o/=l)+d*(s/=l),p=c(u-=a*f,h-=o*f,d-=s*f);this.center.move(t,(u/=p)*e+a*n,(h/=p)*e+o*n,(d/=p)*e+s*n);var m=Math.exp(this.computedRadius[0]);m=Math.max(1e-4,m+r),this.radius.set(t,Math.log(m))},f.translate=function(t,e,n,r){this.center.move(t,e||0,n||0,r||0)},f.setMatrix=function(t,e,n,r){var a=1;\"number\"==typeof n&&(a=0|n),(a<0||a>3)&&(a=1);var o=(a+2)%3;e||(this.recalcMatrix(t),e=this.computedMatrix);var s=e[a],l=e[a+4],h=e[a+8];if(r){var d=Math.abs(s),f=Math.abs(l),p=Math.abs(h),m=Math.max(d,f,p);d===m?(s=s<0?-1:1,l=h=0):p===m?(h=h<0?-1:1,s=l=0):(l=l<0?-1:1,s=h=0)}else{var g=c(s,l,h);s/=g,l/=g,h/=g}var y,v,_=e[o],b=e[o+4],x=e[o+8],w=_*s+b*l+x*h,k=c(_-=s*w,b-=l*w,x-=h*w),M=l*(x/=k)-h*(b/=k),T=h*(_/=k)-s*x,S=s*b-l*_,A=c(M,T,S);if(M/=A,T/=A,S/=A,this.center.jump(t,H,V,U),this.radius.idle(t),this.up.jump(t,s,l,h),this.right.jump(t,_,b,x),2===a){var L=e[1],C=e[5],E=e[9];y=P<0?-Math.PI/2:Math.PI/2,v=Math.atan2(L*M+C*T+E*S,L*_+C*b+E*x)}else{var O=e[2],D=e[6],I=e[10],P=O*s+D*l+I*h,R=O*_+D*b+I*x,z=O*M+D*T+I*S;y=Math.asin(u(P)),v=Math.atan2(z,R)}this.angle.jump(t,v,y),this.recalcMatrix(t);var j=e[2],F=e[6],N=e[10],B=this.computedMatrix;i(B,e);var Y=B[15],H=B[12]/Y,V=B[13]/Y,U=B[14]/Y,W=Math.exp(this.computedRadius[0]);this.center.jump(t,H-j*W,V-F*W,U-N*W)},f.lastT=function(){return Math.max(this.center.lastT(),this.up.lastT(),this.right.lastT(),this.radius.lastT(),this.angle.lastT())},f.idle=function(t){this.center.idle(t),this.up.idle(t),this.right.idle(t),this.radius.idle(t),this.angle.idle(t)},f.flush=function(t){this.center.flush(t),this.up.flush(t),this.right.flush(t),this.radius.flush(t),this.angle.flush(t)},f.setDistance=function(t,e){e>0&&this.radius.set(t,Math.log(e))},f.lookAt=function(t,e,n,r){this.recalcMatrix(t),e=e||this.computedEye,n=n||this.computedCenter;var i=(r=r||this.computedUp)[0],a=r[1],o=r[2],s=c(i,a,o);if(!(s<1e-6)){i/=s,a/=s,o/=s;var l=e[0]-n[0],h=e[1]-n[1],d=e[2]-n[2],f=c(l,h,d);if(!(f<1e-6)){l/=f,h/=f,d/=f;var p=this.computedRight,m=p[0],g=p[1],y=p[2],v=i*m+a*g+o*y,_=c(m-=v*i,g-=v*a,y-=v*o);if(!(_<.01&&(_=c(m=a*d-o*h,g=o*l-i*d,y=i*h-a*l))<1e-6)){m/=_,g/=_,y/=_,this.up.set(t,i,a,o),this.right.set(t,m,g,y),this.center.set(t,n[0],n[1],n[2]),this.radius.set(t,Math.log(f));var b=a*y-o*g,x=o*m-i*y,w=i*g-a*m,k=c(b,x,w),M=m*l+g*h+y*d,T=(b/=k)*l+(x/=k)*h+(w/=k)*d,S=Math.asin(u(i*l+a*h+o*d)),A=Math.atan2(T,M),L=this.angle._state,C=L[L.length-1],E=L[L.length-2];C%=2*Math.PI;var O=Math.abs(C+2*Math.PI-A),D=Math.abs(C-A),I=Math.abs(C-2*Math.PI-A);O<D&&(C+=2*Math.PI),I<D&&(C-=2*Math.PI),this.angle.jump(this.angle.lastT(),C,E),this.angle.set(t,A,S)}}}}},{\"filtered-vector\":242,\"gl-mat4/invert\":293,\"gl-mat4/rotate\":299,\"gl-vec3/cross\":365,\"gl-vec3/dot\":370,\"gl-vec3/normalize\":387}],582:[function(t,e,n){\"use strict\";e.exports=function(t,e,n){var i=t*e,a=r*t,o=a-(a-t),s=t-o,l=r*e,c=l-(l-e),u=e-c,h=s*u-(i-o*c-s*c-o*u);return n?(n[0]=h,n[1]=i,n):[h,i]};var r=+(Math.pow(2,27)+1)},{}],583:[function(t,e,n){\"use strict\";e.exports=function(t,e,n){var r=t+e,i=r-t,a=e-i,o=t-(r-i);return n?(n[0]=o+a,n[1]=r,n):[o+a,r]}},{}],584:[function(t,e,n){\"use strict\";var r=t(\"../prototype/is\");e.exports=function(t){if(\"function\"!=typeof t)return!1;if(!hasOwnProperty.call(t,\"length\"))return!1;try{if(\"number\"!=typeof t.length)return!1;if(\"function\"!=typeof t.call)return!1;if(\"function\"!=typeof t.apply)return!1}catch(e){return!1}return!r(t)}},{\"../prototype/is\":591}],585:[function(t,e,n){\"use strict\";var r=t(\"../value/is\"),i=t(\"../object/is\"),a=t(\"../string/coerce\"),o=t(\"./to-short-string\"),s=function(t,e){return t.replace(\"%v\",o(e))};e.exports=function(t,e,n){if(!i(n))throw new TypeError(s(e,t));if(!r(t)){if(\"default\"in n)return n.default;if(n.isOptional)return null}var o=a(n.errorMessage);throw r(o)||(o=e),new TypeError(s(o,t))}},{\"../object/is\":588,\"../string/coerce\":592,\"../value/is\":594,\"./to-short-string\":587}],586:[function(t,e,n){\"use strict\";e.exports=function(t){try{return t.toString()}catch(e){try{return String(t)}catch(n){return null}}}},{}],587:[function(t,e,n){\"use strict\";var r=t(\"./safe-to-string\"),i=/[\\n\\r\\u2028\\u2029]/g;e.exports=function(t){var e=r(t);return null===e?\"<Non-coercible to string value>\":(e.length>100&&(e=e.slice(0,99)+\"\\u2026\"),e=e.replace(i,(function(t){switch(t){case\"\\n\":return\"\\\\n\";case\"\\r\":return\"\\\\r\";case\"\\u2028\":return\"\\\\u2028\";case\"\\u2029\":return\"\\\\u2029\";default:throw new Error(\"Unexpected character\")}})))}},{\"./safe-to-string\":586}],588:[function(t,e,n){\"use strict\";var r=t(\"../value/is\"),i={object:!0,function:!0,undefined:!0};e.exports=function(t){return!!r(t)&&hasOwnProperty.call(i,typeof t)}},{\"../value/is\":594}],589:[function(t,e,n){\"use strict\";var r=t(\"../lib/resolve-exception\"),i=t(\"./is\");e.exports=function(t){return i(t)?t:r(t,\"%v is not a plain function\",arguments[1])}},{\"../lib/resolve-exception\":585,\"./is\":590}],590:[function(t,e,n){\"use strict\";var r=t(\"../function/is\"),i=/^\\s*class[\\s{/}]/,a=Function.prototype.toString;e.exports=function(t){return!!r(t)&&!i.test(a.call(t))}},{\"../function/is\":584}],591:[function(t,e,n){\"use strict\";var r=t(\"../object/is\");e.exports=function(t){if(!r(t))return!1;try{return!!t.constructor&&t.constructor.prototype===t}catch(e){return!1}}},{\"../object/is\":588}],592:[function(t,e,n){\"use strict\";var r=t(\"../value/is\"),i=t(\"../object/is\"),a=Object.prototype.toString;e.exports=function(t){if(!r(t))return null;if(i(t)){var e=t.toString;if(\"function\"!=typeof e)return null;if(e===a)return null}try{return\"\"+t}catch(n){return null}}},{\"../object/is\":588,\"../value/is\":594}],593:[function(t,e,n){\"use strict\";var r=t(\"../lib/resolve-exception\"),i=t(\"./is\");e.exports=function(t){return i(t)?t:r(t,\"Cannot use %v\",arguments[1])}},{\"../lib/resolve-exception\":585,\"./is\":594}],594:[function(t,e,n){\"use strict\";e.exports=function(t){return null!=t}},{}],595:[function(t,e,n){(function(e){(function(){\"use strict\";var r=t(\"bit-twiddle\"),i=t(\"dup\"),a=t(\"buffer\").Buffer;e.__TYPEDARRAY_POOL||(e.__TYPEDARRAY_POOL={UINT8:i([32,0]),UINT16:i([32,0]),UINT32:i([32,0]),BIGUINT64:i([32,0]),INT8:i([32,0]),INT16:i([32,0]),INT32:i([32,0]),BIGINT64:i([32,0]),FLOAT:i([32,0]),DOUBLE:i([32,0]),DATA:i([32,0]),UINT8C:i([32,0]),BUFFER:i([32,0])});var o=\"undefined\"!=typeof Uint8ClampedArray,s=\"undefined\"!=typeof BigUint64Array,l=\"undefined\"!=typeof BigInt64Array,c=e.__TYPEDARRAY_POOL;c.UINT8C||(c.UINT8C=i([32,0])),c.BIGUINT64||(c.BIGUINT64=i([32,0])),c.BIGINT64||(c.BIGINT64=i([32,0])),c.BUFFER||(c.BUFFER=i([32,0]));var u=c.DATA,h=c.BUFFER;function d(t){if(t){var e=r.log2(t.length||t.byteLength);u[e].push(t)}}function f(t){t=r.nextPow2(t);var e=r.log2(t),n=u[e];return n.length>0?n.pop():new ArrayBuffer(t)}function p(t){return new Uint8Array(f(t),0,t)}function m(t){return new Uint16Array(f(2*t),0,t)}function g(t){return new Uint32Array(f(4*t),0,t)}function y(t){return new Int8Array(f(t),0,t)}function v(t){return new Int16Array(f(2*t),0,t)}function _(t){return new Int32Array(f(4*t),0,t)}function b(t){return new Float32Array(f(4*t),0,t)}function x(t){return new Float64Array(f(8*t),0,t)}function w(t){return o?new Uint8ClampedArray(f(t),0,t):p(t)}function k(t){return s?new BigUint64Array(f(8*t),0,t):null}function M(t){return l?new BigInt64Array(f(8*t),0,t):null}function T(t){return new DataView(f(t),0,t)}function S(t){t=r.nextPow2(t);var e=r.log2(t),n=h[e];return n.length>0?n.pop():new a(t)}n.free=function(t){if(a.isBuffer(t))h[r.log2(t.length)].push(t);else{if(\"[object ArrayBuffer]\"!==Object.prototype.toString.call(t)&&(t=t.buffer),!t)return;var e=0|r.log2(t.length||t.byteLength);u[e].push(t)}},n.freeUint8=n.freeUint16=n.freeUint32=n.freeBigUint64=n.freeInt8=n.freeInt16=n.freeInt32=n.freeBigInt64=n.freeFloat32=n.freeFloat=n.freeFloat64=n.freeDouble=n.freeUint8Clamped=n.freeDataView=function(t){d(t.buffer)},n.freeArrayBuffer=d,n.freeBuffer=function(t){h[r.log2(t.length)].push(t)},n.malloc=function(t,e){if(void 0===e||\"arraybuffer\"===e)return f(t);switch(e){case\"uint8\":return p(t);case\"uint16\":return m(t);case\"uint32\":return g(t);case\"int8\":return y(t);case\"int16\":return v(t);case\"int32\":return _(t);case\"float\":case\"float32\":return b(t);case\"double\":case\"float64\":return x(t);case\"uint8_clamped\":return w(t);case\"bigint64\":return M(t);case\"biguint64\":return k(t);case\"buffer\":return S(t);case\"data\":case\"dataview\":return T(t);default:return null}return null},n.mallocArrayBuffer=f,n.mallocUint8=p,n.mallocUint16=m,n.mallocUint32=g,n.mallocInt8=y,n.mallocInt16=v,n.mallocInt32=_,n.mallocFloat32=n.mallocFloat=b,n.mallocFloat64=n.mallocDouble=x,n.mallocUint8Clamped=w,n.mallocBigUint64=k,n.mallocBigInt64=M,n.mallocDataView=T,n.mallocBuffer=S,n.clearCache=function(){for(var t=0;t<32;++t)c.UINT8[t].length=0,c.UINT16[t].length=0,c.UINT32[t].length=0,c.INT8[t].length=0,c.INT16[t].length=0,c.INT32[t].length=0,c.FLOAT[t].length=0,c.DOUBLE[t].length=0,c.BIGUINT64[t].length=0,c.BIGINT64[t].length=0,c.UINT8C[t].length=0,u[t].length=0,h[t].length=0}}).call(this)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{\"bit-twiddle\":97,buffer:111,dup:176}],596:[function(t,e,n){\"use strict\";function r(t){this.roots=new Array(t),this.ranks=new Array(t);for(var e=0;e<t;++e)this.roots[e]=e,this.ranks[e]=0}e.exports=r;var i=r.prototype;Object.defineProperty(i,\"length\",{get:function(){return this.roots.length}}),i.makeSet=function(){var t=this.roots.length;return this.roots.push(t),this.ranks.push(0),t},i.find=function(t){for(var e=t,n=this.roots;n[t]!==t;)t=n[t];for(;n[e]!==t;){var r=n[e];n[e]=t,e=r}return t},i.link=function(t,e){var n=this.find(t),r=this.find(e);if(n!==r){var i=this.ranks,a=this.roots,o=i[n],s=i[r];o<s?a[n]=r:s<o?a[r]=n:(a[r]=n,++i[n])}}},{}],597:[function(t,e,n){\"use strict\";e.exports=function(t,e,n){return 0===t.length?t:e?(n||t.sort(e),function(t,e){for(var n=1,r=t.length,i=t[0],a=t[0],o=1;o<r;++o)if(a=i,e(i=t[o],a)){if(o===n){n++;continue}t[n++]=i}return t.length=n,t}(t,e)):(n||t.sort(),function(t){for(var e=1,n=t.length,r=t[0],i=t[0],a=1;a<n;++a,i=r)if(i=r,(r=t[a])!==i){if(a===e){e++;continue}t[e++]=r}return t.length=e,t}(t))}},{}],598:[function(t,e,n){var r=/[\\'\\\"]/;e.exports=function(t){return t?(r.test(t.charAt(0))&&(t=t.substr(1)),r.test(t.charAt(t.length-1))&&(t=t.substr(0,t.length-1)),t):\"\"}},{}],599:[function(t,e,n){\"use strict\";e.exports=function(t,e,n){Array.isArray(n)||(n=[].slice.call(arguments,2));for(var r=0,i=n.length;r<i;r++){var a=n[r];for(var o in a)if((void 0===e[o]||Array.isArray(e[o])||t[o]!==e[o])&&o in e){var s;if(!0===a[o])s=e[o];else{if(!1===a[o])continue;if(\"function\"==typeof a[o]&&void 0===(s=a[o](e[o],t,e)))continue}t[o]=s}}return t}},{}],600:[function(t,e,n){\"use strict\";e.exports=function(t,e){return\"object\"==typeof e&&null!==e||(e={}),r(t,e.canvas||i,e.context||a,e)};var r=t(\"./lib/vtext\"),i=null,a=null;\"undefined\"!=typeof document&&((i=document.createElement(\"canvas\")).width=8192,i.height=1024,a=i.getContext(\"2d\"))},{\"./lib/vtext\":601}],601:[function(t,e,n){e.exports=function(t,e,n,r){var a=64,o=1.25,s={breaklines:!1,bolds:!1,italics:!1,subscripts:!1,superscripts:!1};return r&&(r.size&&r.size>0&&(a=r.size),r.lineSpacing&&r.lineSpacing>0&&(o=r.lineSpacing),r.styletags&&r.styletags.breaklines&&(s.breaklines=!!r.styletags.breaklines),r.styletags&&r.styletags.bolds&&(s.bolds=!!r.styletags.bolds),r.styletags&&r.styletags.italics&&(s.italics=!!r.styletags.italics),r.styletags&&r.styletags.subscripts&&(s.subscripts=!!r.styletags.subscripts),r.styletags&&r.styletags.superscripts&&(s.superscripts=!!r.styletags.superscripts)),n.font=[r.fontStyle,r.fontVariant,r.fontWeight,a+\"px\",r.font].filter((function(t){return t})).join(\" \"),n.textAlign=\"start\",n.textBaseline=\"alphabetic\",n.direction=\"ltr\",g(function(t,e,n,r,a,o){n=(n=n.replace(/\\n/g,\"\")).replace(/\\<br\\>/g,!0===o.breaklines?\"\\n\":\" \");var s=\"\",l=[];for(y=0;y<n.length;++y)l[y]=s;!0===o.bolds&&(l=f(\"b\",c,n,l)),!0===o.italics&&(l=f(\"i\",u,n,l)),!0===o.superscripts&&(l=f(\"sup\",\"+1\",n,l)),!0===o.subscripts&&(l=f(\"sub\",\"-1\",n,l));var p=[],m=\"\";for(y=0;y<n.length;++y)null!==l[y]&&(m+=n[y],p.push(l[y]));var g,y,v,_,b,x=m.split(\"\\n\"),w=x.length,k=Math.round(a*r),M=r,T=2*r,S=0,A=w*k+T;t.height<A&&(t.height=A),e.fillStyle=\"#000\",e.fillRect(0,0,t.width,t.height),e.fillStyle=\"#fff\";var L=0,C=\"\";function E(){if(\"\"!==C){var t=e.measureText(C).width;e.fillText(C,M+v,T+_),v+=t}}function O(){return Math.round(b)+\"px \"}function D(t,n){var r=\"\"+e.font;if(!0===o.subscripts){var i=t.indexOf(d),a=n.indexOf(d),s=i>-1?parseInt(t[1+i]):0,l=a>-1?parseInt(n[1+a]):0;s!==l&&(r=r.replace(O(),\"?px \"),b*=Math.pow(.75,l-s),r=r.replace(\"?px \",O())),_+=.25*k*(l-s)}if(!0===o.superscripts){var f=t.indexOf(h),p=n.indexOf(h),m=f>-1?parseInt(t[1+f]):0,g=p>-1?parseInt(n[1+p]):0;m!==g&&(r=r.replace(O(),\"?px \"),b*=Math.pow(.75,g-m),r=r.replace(\"?px \",O())),_-=.25*k*(g-m)}if(!0===o.bolds){var y=t.indexOf(c)>-1,v=n.indexOf(c)>-1;!y&&v&&(r=x?r.replace(\"italic \",\"italic bold \"):\"bold \"+r),y&&!v&&(r=r.replace(\"bold \",\"\"))}if(!0===o.italics){var x=t.indexOf(u)>-1,w=n.indexOf(u)>-1;!x&&w&&(r=\"italic \"+r),x&&!w&&(r=r.replace(\"italic \",\"\"))}e.font=r}for(g=0;g<w;++g){var I=x[g]+\"\\n\";for(v=0,_=g*k,b=r,C=\"\",y=0;y<I.length;++y){var P=y+L<p.length?p[y+L]:p[p.length-1];s===P?C+=I[y]:(E(),C=I[y],void 0!==P&&(D(s,P),s=P))}E(),L+=I.length;var R=0|Math.round(v+2*M);S<R&&(S=R)}var z=S,j=T+k*w;return i(e.getImageData(0,0,z,j).data,[j,z,4]).pick(-1,-1,0).transpose(1,0)}(e,n,t,a,o,s),r,a)},e.exports.processPixels=g;var r=t(\"surface-nets\"),i=t(\"ndarray\"),a=t(\"simplify-planar-graph\"),o=t(\"clean-pslg\"),s=t(\"cdt2d\"),l=t(\"planar-graph-to-polyline\"),c=\"b|\",u=\"i|\",h=\"+\",d=\"-\";function f(t,e,n,r){for(var i=\"<\"+t+\">\",a=\"</\"+t+\">\",o=i.length,s=a.length,l=e[0]===h||e[0]===d,c=0,u=-s;c>-1&&-1!==(c=n.indexOf(i,c))&&-1!==(u=n.indexOf(a,c+o))&&!(u<=c);){for(var f=c;f<u+s;++f)if(f<c+o||f>=u)r[f]=null,n=n.substr(0,f)+\" \"+n.substr(f+1);else if(null!==r[f]){var p=r[f].indexOf(e[0]);-1===p?r[f]+=e:l&&(r[f]=r[f].substr(0,p+1)+(1+parseInt(r[f][p+1]))+r[f].substr(p+2))}var m=c+o,g=n.substr(m,u-m).indexOf(i);c=-1!==g?g:u+s}return r}function p(t,e){var n=r(t,128);return e?a(n.cells,n.positions,.25):{edges:n.cells,positions:n.positions}}function m(t,e,n,r){var i=p(t,r),a=function(t,e,n){for(var r=e.textAlign||\"start\",i=e.textBaseline||\"alphabetic\",a=[1<<30,1<<30],o=[0,0],s=t.length,l=0;l<s;++l)for(var c=t[l],u=0;u<2;++u)a[u]=0|Math.min(a[u],c[u]),o[u]=0|Math.max(o[u],c[u]);var h=0;switch(r){case\"center\":h=-.5*(a[0]+o[0]);break;case\"right\":case\"end\":h=-o[0];break;case\"left\":case\"start\":h=-a[0];break;default:throw new Error(\"vectorize-text: Unrecognized textAlign: '\"+r+\"'\")}var d=0;switch(i){case\"hanging\":case\"top\":d=-a[1];break;case\"middle\":d=-.5*(a[1]+o[1]);break;case\"alphabetic\":case\"ideographic\":d=-3*n;break;case\"bottom\":d=-o[1];break;default:throw new Error(\"vectorize-text: Unrecoginized textBaseline: '\"+i+\"'\")}var f=1/n;return\"lineHeight\"in e?f*=+e.lineHeight:\"width\"in e?f=e.width/(o[0]-a[0]):\"height\"in e&&(f=e.height/(o[1]-a[1])),t.map((function(t){return[f*(t[0]+h),f*(t[1]+d)]}))}(i.positions,e,n),c=i.edges,u=\"ccw\"===e.orientation;if(o(a,c),e.polygons||e.polygon||e.polyline){for(var h=l(c,a),d=new Array(h.length),f=0;f<h.length;++f){for(var m=h[f],g=new Array(m.length),y=0;y<m.length;++y){for(var v=m[y],_=new Array(v.length),b=0;b<v.length;++b)_[b]=a[v[b]].slice();u&&_.reverse(),g[y]=_}d[f]=g}return d}return e.triangles||e.triangulate||e.triangle?{cells:s(a,c,{delaunay:!1,exterior:!1,interior:!0}),positions:a}:{edges:c,positions:a}}function g(t,e,n){try{return m(t,e,n,!0)}catch(r){}try{return m(t,e,n,!1)}catch(r){}return e.polygons||e.polyline||e.polygon?[]:e.triangles||e.triangulate||e.triangle?{cells:[],positions:[]}:{edges:[],positions:[]}}},{cdt2d:112,\"clean-pslg\":121,ndarray:495,\"planar-graph-to-polyline\":514,\"simplify-planar-graph\":562,\"surface-nets\":570}],602:[function(t,e,n){!function(){\"use strict\";if(\"undefined\"==typeof ses||!ses.ok||ses.ok()){\"undefined\"!=typeof ses&&(ses.weakMapPermitHostObjects=g);var t=!1;if(\"function\"==typeof WeakMap){var n=WeakMap;if(\"undefined\"!=typeof navigator&&/Firefox/.test(navigator.userAgent));else{var r=new n,i=Object.freeze({});if(r.set(i,1),1===r.get(i))return void(e.exports=WeakMap);t=!0}}var a=Object.getOwnPropertyNames,o=Object.defineProperty,s=Object.isExtensible,l=\"weakmap:\",c=l+\"ident:\"+Math.random()+\"___\";if(\"undefined\"!=typeof crypto&&\"function\"==typeof crypto.getRandomValues&&\"function\"==typeof ArrayBuffer&&\"function\"==typeof Uint8Array){var u=new ArrayBuffer(25),h=new Uint8Array(u);crypto.getRandomValues(h),c=l+\"rand:\"+Array.prototype.map.call(h,(function(t){return(t%36).toString(36)})).join(\"\")+\"___\"}if(o(Object,\"getOwnPropertyNames\",{value:function(t){return a(t).filter(y)}}),\"getPropertyNames\"in Object){var d=Object.getPropertyNames;o(Object,\"getPropertyNames\",{value:function(t){return d(t).filter(y)}})}!function(){var t=Object.freeze;o(Object,\"freeze\",{value:function(e){return v(e),t(e)}});var e=Object.seal;o(Object,\"seal\",{value:function(t){return v(t),e(t)}});var n=Object.preventExtensions;o(Object,\"preventExtensions\",{value:function(t){return v(t),n(t)}})}();var f=!1,p=0,m=function(){this instanceof m||b();var t=[],e=[],n=p++;return Object.create(m.prototype,{get___:{value:_((function(r,i){var a,o=v(r);return o?n in o?o[n]:i:(a=t.indexOf(r))>=0?e[a]:i}))},has___:{value:_((function(e){var r=v(e);return r?n in r:t.indexOf(e)>=0}))},set___:{value:_((function(r,i){var a,o=v(r);return o?o[n]=i:(a=t.indexOf(r))>=0?e[a]=i:(e[a=t.length]=i,t[a]=r),this}))},delete___:{value:_((function(r){var i,a,o=v(r);return o?n in o&&delete o[n]:!((i=t.indexOf(r))<0||(a=t.length-1,t[i]=void 0,e[i]=e[a],t[i]=t[a],t.length=a,e.length=a,0))}))}})};m.prototype=Object.create(Object.prototype,{get:{value:function(t,e){return this.get___(t,e)},writable:!0,configurable:!0},has:{value:function(t){return this.has___(t)},writable:!0,configurable:!0},set:{value:function(t,e){return this.set___(t,e)},writable:!0,configurable:!0},delete:{value:function(t){return this.delete___(t)},writable:!0,configurable:!0}}),\"function\"==typeof n?function(){function r(){this instanceof m||b();var e,r=new n,i=void 0,a=!1;return e=t?function(t,e){return r.set(t,e),r.has(t)||(i||(i=new m),i.set(t,e)),this}:function(t,e){if(a)try{r.set(t,e)}catch(n){i||(i=new m),i.set___(t,e)}else r.set(t,e);return this},Object.create(m.prototype,{get___:{value:_((function(t,e){return i?r.has(t)?r.get(t):i.get___(t,e):r.get(t,e)}))},has___:{value:_((function(t){return r.has(t)||!!i&&i.has___(t)}))},set___:{value:_(e)},delete___:{value:_((function(t){var e=!!r.delete(t);return i&&i.delete___(t)||e}))},permitHostObjects___:{value:_((function(t){if(t!==g)throw new Error(\"bogus call to permitHostObjects___\");a=!0}))}})}t&&\"undefined\"!=typeof Proxy&&(Proxy=void 0),r.prototype=m.prototype,e.exports=r,Object.defineProperty(WeakMap.prototype,\"constructor\",{value:WeakMap,enumerable:!1,configurable:!0,writable:!0})}():(\"undefined\"!=typeof Proxy&&(Proxy=void 0),e.exports=m)}function g(t){t.permitHostObjects___&&t.permitHostObjects___(g)}function y(t){return!(t.substr(0,l.length)==l&&\"___\"===t.substr(t.length-3))}function v(t){if(t!==Object(t))throw new TypeError(\"Not an object: \"+t);var e=t[c];if(e&&e.key===t)return e;if(s(t)){e={key:t};try{return o(t,c,{value:e,writable:!1,enumerable:!1,configurable:!1}),e}catch(n){return}}}function _(t){return t.prototype=null,Object.freeze(t)}function b(){f||\"undefined\"==typeof console||(f=!0,console.warn(\"WeakMap should be invoked as new WeakMap(), not WeakMap(). This will be an error in the future.\"))}}()},{}],603:[function(t,e,n){var r=t(\"./hidden-store.js\");e.exports=function(){var t={};return function(e){if((\"object\"!=typeof e||null===e)&&\"function\"!=typeof e)throw new Error(\"Weakmap-shim: Key must be object\");var n=e.valueOf(t);return n&&n.identity===t?n:r(e,t)}}},{\"./hidden-store.js\":604}],604:[function(t,e,n){e.exports=function(t,e){var n={identity:e},r=t.valueOf;return Object.defineProperty(t,\"valueOf\",{value:function(t){return t!==e?r.apply(this,arguments):n},writable:!0}),n}},{}],605:[function(t,e,n){var r=t(\"./create-store.js\");e.exports=function(){var t=r();return{get:function(e,n){var r=t(e);return r.hasOwnProperty(\"value\")?r.value:n},set:function(e,n){return t(e).value=n,this},has:function(e){return\"value\"in t(e)},delete:function(e){return delete t(e).value}}}},{\"./create-store.js\":603}],606:[function(t,e,n){var r=t(\"get-canvas-context\");e.exports=function(t){return r(\"webgl\",t)}},{\"get-canvas-context\":249}],607:[function(t,e,n){var r=t(\"../main\"),i=t(\"object-assign\"),a=r.instance();function o(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}i(o.prototype=new r.baseCalendar,{name:\"Chinese\",jdEpoch:1721425.5,hasYearZero:!1,minMonth:0,firstMonth:0,minDay:1,regionalOptions:{\"\":{name:\"Chinese\",epochs:[\"BEC\",\"EC\"],monthNumbers:function(t,e){if(\"string\"==typeof t){var n=t.match(l);return n?n[0]:\"\"}var r=this._validateYear(t),i=t.month(),a=\"\"+this.toChineseMonth(r,i);return e&&a.length<2&&(a=\"0\"+a),this.isIntercalaryMonth(r,i)&&(a+=\"i\"),a},monthNames:function(t){if(\"string\"==typeof t){var e=t.match(c);return e?e[0]:\"\"}var n=this._validateYear(t),r=t.month(),i=[\"\\u4e00\\u6708\",\"\\u4e8c\\u6708\",\"\\u4e09\\u6708\",\"\\u56db\\u6708\",\"\\u4e94\\u6708\",\"\\u516d\\u6708\",\"\\u4e03\\u6708\",\"\\u516b\\u6708\",\"\\u4e5d\\u6708\",\"\\u5341\\u6708\",\"\\u5341\\u4e00\\u6708\",\"\\u5341\\u4e8c\\u6708\"][this.toChineseMonth(n,r)-1];return this.isIntercalaryMonth(n,r)&&(i=\"\\u95f0\"+i),i},monthNamesShort:function(t){if(\"string\"==typeof t){var e=t.match(u);return e?e[0]:\"\"}var n=this._validateYear(t),r=t.month(),i=[\"\\u4e00\",\"\\u4e8c\",\"\\u4e09\",\"\\u56db\",\"\\u4e94\",\"\\u516d\",\"\\u4e03\",\"\\u516b\",\"\\u4e5d\",\"\\u5341\",\"\\u5341\\u4e00\",\"\\u5341\\u4e8c\"][this.toChineseMonth(n,r)-1];return this.isIntercalaryMonth(n,r)&&(i=\"\\u95f0\"+i),i},parseMonth:function(t,e){t=this._validateYear(t);var n,r=parseInt(e);if(isNaN(r))\"\\u95f0\"===e[0]&&(n=!0,e=e.substring(1)),\"\\u6708\"===e[e.length-1]&&(e=e.substring(0,e.length-1)),r=1+[\"\\u4e00\",\"\\u4e8c\",\"\\u4e09\",\"\\u56db\",\"\\u4e94\",\"\\u516d\",\"\\u4e03\",\"\\u516b\",\"\\u4e5d\",\"\\u5341\",\"\\u5341\\u4e00\",\"\\u5341\\u4e8c\"].indexOf(e);else{var i=e[e.length-1];n=\"i\"===i||\"I\"===i}return this.toMonthIndex(t,r,n)},dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:1,isRTL:!1}},_validateYear:function(t,e){if(t.year&&(t=t.year()),\"number\"!=typeof t||t<1888||t>2111)throw e.replace(/\\{0\\}/,this.local.name);return t},toMonthIndex:function(t,e,n){var i=this.intercalaryMonth(t);if(n&&e!==i||e<1||e>12)throw r.local.invalidMonth.replace(/\\{0\\}/,this.local.name);return i?!n&&e<=i?e-1:e:e-1},toChineseMonth:function(t,e){t.year&&(e=(t=t.year()).month());var n=this.intercalaryMonth(t);if(e<0||e>(n?12:11))throw r.local.invalidMonth.replace(/\\{0\\}/,this.local.name);return n?e<n?e+1:e:e+1},intercalaryMonth:function(t){return t=this._validateYear(t),h[t-h[0]]>>13},isIntercalaryMonth:function(t,e){t.year&&(e=(t=t.year()).month());var n=this.intercalaryMonth(t);return!!n&&n===e},leapYear:function(t){return 0!==this.intercalaryMonth(t)},weekOfYear:function(t,e,n){var i,o=this._validateYear(t,r.local.invalidyear),s=d[o-d[0]];(i=a.newDate(s>>9&4095,s>>5&15,31&s)).add(4-(i.dayOfWeek()||7),\"d\");var l=this.toJD(t,e,n)-i.toJD();return 1+Math.floor(l/7)},monthsInYear:function(t){return this.leapYear(t)?13:12},daysInMonth:function(t,e){t.year&&(e=t.month(),t=t.year()),t=this._validateYear(t);var n=h[t-h[0]];if(e>(n>>13?12:11))throw r.local.invalidMonth.replace(/\\{0\\}/,this.local.name);return n&1<<12-e?30:29},weekDay:function(t,e,n){return(this.dayOfWeek(t,e,n)||7)<6},toJD:function(t,e,n){var i=this._validate(t,s,n,r.local.invalidDate);t=this._validateYear(i.year()),e=i.month(),n=i.day();var o=this.isIntercalaryMonth(t,e),s=this.toChineseMonth(t,e),l=function(t,e,n,r,i){var a,o,s;if(\"object\"==typeof t)o=t,a=e||{};else{var l;if(!(\"number\"==typeof t&&t>=1888&&t<=2111))throw new Error(\"Lunar year outside range 1888-2111\");if(!(\"number\"==typeof e&&e>=1&&e<=12))throw new Error(\"Lunar month outside range 1 - 12\");if(!(\"number\"==typeof n&&n>=1&&n<=30))throw new Error(\"Lunar day outside range 1 - 30\");\"object\"==typeof r?(l=!1,a=r):(l=!!r,a={}),o={year:t,month:e,day:n,isIntercalary:l}}s=o.day-1;var c,u=h[o.year-h[0]],f=u>>13;c=f&&(o.month>f||o.isIntercalary)?o.month:o.month-1;for(var p=0;p<c;p++)s+=u&1<<12-p?30:29;var m=d[o.year-d[0]],g=new Date(m>>9&4095,(m>>5&15)-1,(31&m)+s);return a.year=g.getFullYear(),a.month=1+g.getMonth(),a.day=g.getDate(),a}(t,s,n,o);return a.toJD(l.year,l.month,l.day)},fromJD:function(t){var e=a.fromJD(t),n=function(t,e,n,r){var i,a;if(\"object\"==typeof t)i=t,a=e||{};else{if(!(\"number\"==typeof t&&t>=1888&&t<=2111))throw new Error(\"Solar year outside range 1888-2111\");if(!(\"number\"==typeof e&&e>=1&&e<=12))throw new Error(\"Solar month outside range 1 - 12\");if(!(\"number\"==typeof n&&n>=1&&n<=31))throw new Error(\"Solar day outside range 1 - 31\");i={year:t,month:e,day:n},a={}}var o=d[i.year-d[0]];a.year=(i.year<<9|i.month<<5|i.day)>=o?i.year:i.year-1,o=d[a.year-d[0]];var s,l=new Date(o>>9&4095,(o>>5&15)-1,31&o),c=new Date(i.year,i.month-1,i.day);s=Math.round((c-l)/864e5);var u,f=h[a.year-h[0]];for(u=0;u<13;u++){var p=f&1<<12-u?30:29;if(s<p)break;s-=p}var m=f>>13;return!m||u<m?(a.isIntercalary=!1,a.month=1+u):u===m?(a.isIntercalary=!0,a.month=u):(a.isIntercalary=!1,a.month=u),a.day=1+s,a}(e.year(),e.month(),e.day()),r=this.toMonthIndex(n.year,n.month,n.isIntercalary);return this.newDate(n.year,r,n.day)},fromString:function(t){var e=t.match(s),n=this._validateYear(+e[1]),r=this.toMonthIndex(n,+e[2],!!e[3]);return this.newDate(n,r,+e[4])},add:function(t,e,n){var r=t.year(),i=t.month(),a=this.isIntercalaryMonth(r,i),s=this.toChineseMonth(r,i),l=Object.getPrototypeOf(o.prototype).add.call(this,t,e,n);if(\"y\"===n){var c=l.year(),u=l.month(),h=this.isIntercalaryMonth(c,s),d=this.toMonthIndex(c,s,!(!a||!h));d!==u&&l.month(d)}return l}});var s=/^\\s*(-?\\d\\d\\d\\d|\\d\\d)[-/](\\d?\\d)([iI]?)[-/](\\d?\\d)/m,l=/^\\d?\\d[iI]?/m,c=/^\\u95f0?\\u5341?[\\u4e00\\u4e8c\\u4e09\\u56db\\u4e94\\u516d\\u4e03\\u516b\\u4e5d]?\\u6708/m,u=/^\\u95f0?\\u5341?[\\u4e00\\u4e8c\\u4e09\\u56db\\u4e94\\u516d\\u4e03\\u516b\\u4e5d]?/m;r.calendars.chinese=o;var h=[1887,5780,5802,19157,2742,50359,1198,2646,46378,7466,3412,30122,5482,67949,2396,5294,43597,6732,6954,36181,2772,4954,18781,2396,54427,5274,6730,47781,5800,6868,21210,4790,59703,2350,5270,46667,3402,3496,38325,1388,4782,18735,2350,52374,6804,7498,44457,2906,1388,29294,4700,63789,6442,6804,56138,5802,2772,38235,1210,4698,22827,5418,63125,3476,5802,43701,2484,5302,27223,2646,70954,7466,3412,54698,5482,2412,38062,5294,2636,32038,6954,60245,2772,4826,43357,2394,5274,39501,6730,72357,5800,5844,53978,4790,2358,38039,5270,87627,3402,3496,54708,5484,4782,43311,2350,3222,27978,7498,68965,2904,5484,45677,4700,6444,39573,6804,6986,19285,2772,62811,1210,4698,47403,5418,5780,38570,5546,76469,2420,5302,51799,2646,5414,36501,3412,5546,18869,2412,54446,5276,6732,48422,6822,2900,28010,4826,92509,2394,5274,55883,6730,6820,47956,5812,2778,18779,2358,62615,5270,5450,46757,3492,5556,27318,4718,67887,2350,3222,52554,7498,3428,38252,5468,4700,31022,6444,64149,6804,6986,43861,2772,5338,35421,2650,70955,5418,5780,54954,5546,2740,38074,5302,2646,29991,3366,61011,3412,5546,43445,2412,5294,35406,6732,72998,6820,6996,52586,2778,2396,38045,5274,6698,23333,6820,64338,5812,2746,43355,2358,5270,39499,5450,79525,3492,5548],d=[1887,966732,967231,967733,968265,968766,969297,969798,970298,970829,971330,971830,972362,972863,973395,973896,974397,974928,975428,975929,976461,976962,977462,977994,978494,979026,979526,980026,980558,981059,981559,982091,982593,983124,983624,984124,984656,985157,985656,986189,986690,987191,987722,988222,988753,989254,989754,990286,990788,991288,991819,992319,992851,993352,993851,994383,994885,995385,995917,996418,996918,997450,997949,998481,998982,999483,1000014,1000515,1001016,1001548,1002047,1002578,1003080,1003580,1004111,1004613,1005113,1005645,1006146,1006645,1007177,1007678,1008209,1008710,1009211,1009743,1010243,1010743,1011275,1011775,1012306,1012807,1013308,1013840,1014341,1014841,1015373,1015874,1016404,1016905,1017405,1017937,1018438,1018939,1019471,1019972,1020471,1021002,1021503,1022035,1022535,1023036,1023568,1024069,1024568,1025100,1025601,1026102,1026633,1027133,1027666,1028167,1028666,1029198,1029699,1030199,1030730,1031231,1031763,1032264,1032764,1033296,1033797,1034297,1034828,1035329,1035830,1036362,1036861,1037393,1037894,1038394,1038925,1039427,1039927,1040459,1040959,1041491,1041992,1042492,1043023,1043524,1044024,1044556,1045057,1045558,1046090,1046590,1047121,1047622,1048122,1048654,1049154,1049655,1050187,1050689,1051219,1051720,1052220,1052751,1053252,1053752,1054284,1054786,1055285,1055817,1056317,1056849,1057349,1057850,1058382,1058883,1059383,1059915,1060415,1060947,1061447,1061947,1062479,1062981,1063480,1064012,1064514,1065014,1065545,1066045,1066577,1067078,1067578,1068110,1068611,1069112,1069642,1070142,1070674,1071175,1071675,1072207,1072709,1073209,1073740,1074241,1074741,1075273,1075773,1076305,1076807,1077308,1077839,1078340,1078840,1079372,1079871,1080403,1080904]},{\"../main\":621,\"object-assign\":499}],608:[function(t,e,n){var r=t(\"../main\");function i(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}t(\"object-assign\")(i.prototype=new r.baseCalendar,{name:\"Coptic\",jdEpoch:1825029.5,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Coptic\",epochs:[\"BAM\",\"AM\"],monthNames:[\"Thout\",\"Paopi\",\"Hathor\",\"Koiak\",\"Tobi\",\"Meshir\",\"Paremhat\",\"Paremoude\",\"Pashons\",\"Paoni\",\"Epip\",\"Mesori\",\"Pi Kogi Enavot\"],monthNamesShort:[\"Tho\",\"Pao\",\"Hath\",\"Koi\",\"Tob\",\"Mesh\",\"Pat\",\"Pad\",\"Pash\",\"Pao\",\"Epi\",\"Meso\",\"PiK\"],dayNames:[\"Tkyriaka\",\"Pesnau\",\"Pshoment\",\"Peftoou\",\"Ptiou\",\"Psoou\",\"Psabbaton\"],dayNamesShort:[\"Tky\",\"Pes\",\"Psh\",\"Pef\",\"Pti\",\"Pso\",\"Psa\"],dayNamesMin:[\"Tk\",\"Pes\",\"Psh\",\"Pef\",\"Pt\",\"Pso\",\"Psa\"],digits:null,dateFormat:\"dd/mm/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,r.local.invalidYear);return(t=e.year()+(e.year()<0?1:0))%4==3||t%4==-1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,r.local.invalidYear||r.regionalOptions[\"\"].invalidYear),13},weekOfYear:function(t,e,n){var r=this.newDate(t,e,n);return r.add(-r.dayOfWeek(),\"d\"),Math.floor((r.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var n=this._validate(t,e,this.minDay,r.local.invalidMonth);return this.daysPerMonth[n.month()-1]+(13===n.month()&&this.leapYear(n.year())?1:0)},weekDay:function(t,e,n){return(this.dayOfWeek(t,e,n)||7)<6},toJD:function(t,e,n){var i=this._validate(t,e,n,r.local.invalidDate);return(t=i.year())<0&&t++,i.day()+30*(i.month()-1)+365*(t-1)+Math.floor(t/4)+this.jdEpoch-1},fromJD:function(t){var e=Math.floor(t)+.5-this.jdEpoch,n=Math.floor((e-Math.floor((e+366)/1461))/365)+1;n<=0&&n--,e=Math.floor(t)+.5-this.newDate(n,1,1).toJD();var r=Math.floor(e/30)+1;return this.newDate(n,r,e-30*(r-1)+1)}}),r.calendars.coptic=i},{\"../main\":621,\"object-assign\":499}],609:[function(t,e,n){var r=t(\"../main\");function i(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}t(\"object-assign\")(i.prototype=new r.baseCalendar,{name:\"Discworld\",jdEpoch:1721425.5,daysPerMonth:[16,32,32,32,32,32,32,32,32,32,32,32,32],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Discworld\",epochs:[\"BUC\",\"UC\"],monthNames:[\"Ick\",\"Offle\",\"February\",\"March\",\"April\",\"May\",\"June\",\"Grune\",\"August\",\"Spune\",\"Sektober\",\"Ember\",\"December\"],monthNamesShort:[\"Ick\",\"Off\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Gru\",\"Aug\",\"Spu\",\"Sek\",\"Emb\",\"Dec\"],dayNames:[\"Sunday\",\"Octeday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Oct\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Oc\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:2,isRTL:!1}},leapYear:function(t){return this._validate(t,this.minMonth,this.minDay,r.local.invalidYear),!1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,r.local.invalidYear),13},daysInYear:function(t){return this._validate(t,this.minMonth,this.minDay,r.local.invalidYear),400},weekOfYear:function(t,e,n){var r=this.newDate(t,e,n);return r.add(-r.dayOfWeek(),\"d\"),Math.floor((r.dayOfYear()-1)/8)+1},daysInMonth:function(t,e){var n=this._validate(t,e,this.minDay,r.local.invalidMonth);return this.daysPerMonth[n.month()-1]},daysInWeek:function(){return 8},dayOfWeek:function(t,e,n){return(this._validate(t,e,n,r.local.invalidDate).day()+1)%8},weekDay:function(t,e,n){var r=this.dayOfWeek(t,e,n);return r>=2&&r<=6},extraInfo:function(t,e,n){var i=this._validate(t,e,n,r.local.invalidDate);return{century:a[Math.floor((i.year()-1)/100)+1]||\"\"}},toJD:function(t,e,n){var i=this._validate(t,e,n,r.local.invalidDate);return t=i.year()+(i.year()<0?1:0),e=i.month(),(n=i.day())+(e>1?16:0)+(e>2?32*(e-2):0)+400*(t-1)+this.jdEpoch-1},fromJD:function(t){t=Math.floor(t+.5)-Math.floor(this.jdEpoch)-1;var e=Math.floor(t/400)+1;t-=400*(e-1),t+=t>15?16:0;var n=Math.floor(t/32)+1;return this.newDate(e<=0?e-1:e,n,t-32*(n-1)+1)}});var a={20:\"Fruitbat\",21:\"Anchovy\"};r.calendars.discworld=i},{\"../main\":621,\"object-assign\":499}],610:[function(t,e,n){var r=t(\"../main\");function i(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}t(\"object-assign\")(i.prototype=new r.baseCalendar,{name:\"Ethiopian\",jdEpoch:1724220.5,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Ethiopian\",epochs:[\"BEE\",\"EE\"],monthNames:[\"Meskerem\",\"Tikemet\",\"Hidar\",\"Tahesas\",\"Tir\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehase\",\"Pagume\"],monthNamesShort:[\"Mes\",\"Tik\",\"Hid\",\"Tah\",\"Tir\",\"Yek\",\"Meg\",\"Mia\",\"Gen\",\"Sen\",\"Ham\",\"Neh\",\"Pag\"],dayNames:[\"Ehud\",\"Segno\",\"Maksegno\",\"Irob\",\"Hamus\",\"Arb\",\"Kidame\"],dayNamesShort:[\"Ehu\",\"Seg\",\"Mak\",\"Iro\",\"Ham\",\"Arb\",\"Kid\"],dayNamesMin:[\"Eh\",\"Se\",\"Ma\",\"Ir\",\"Ha\",\"Ar\",\"Ki\"],digits:null,dateFormat:\"dd/mm/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,r.local.invalidYear);return(t=e.year()+(e.year()<0?1:0))%4==3||t%4==-1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,r.local.invalidYear||r.regionalOptions[\"\"].invalidYear),13},weekOfYear:function(t,e,n){var r=this.newDate(t,e,n);return r.add(-r.dayOfWeek(),\"d\"),Math.floor((r.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var n=this._validate(t,e,this.minDay,r.local.invalidMonth);return this.daysPerMonth[n.month()-1]+(13===n.month()&&this.leapYear(n.year())?1:0)},weekDay:function(t,e,n){return(this.dayOfWeek(t,e,n)||7)<6},toJD:function(t,e,n){var i=this._validate(t,e,n,r.local.invalidDate);return(t=i.year())<0&&t++,i.day()+30*(i.month()-1)+365*(t-1)+Math.floor(t/4)+this.jdEpoch-1},fromJD:function(t){var e=Math.floor(t)+.5-this.jdEpoch,n=Math.floor((e-Math.floor((e+366)/1461))/365)+1;n<=0&&n--,e=Math.floor(t)+.5-this.newDate(n,1,1).toJD();var r=Math.floor(e/30)+1;return this.newDate(n,r,e-30*(r-1)+1)}}),r.calendars.ethiopian=i},{\"../main\":621,\"object-assign\":499}],611:[function(t,e,n){var r=t(\"../main\");function i(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}function a(t,e){return t-e*Math.floor(t/e)}t(\"object-assign\")(i.prototype=new r.baseCalendar,{name:\"Hebrew\",jdEpoch:347995.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29,29],hasYearZero:!1,minMonth:1,firstMonth:7,minDay:1,regionalOptions:{\"\":{name:\"Hebrew\",epochs:[\"BAM\",\"AM\"],monthNames:[\"Nisan\",\"Iyar\",\"Sivan\",\"Tammuz\",\"Av\",\"Elul\",\"Tishrei\",\"Cheshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar\",\"Adar II\"],monthNamesShort:[\"Nis\",\"Iya\",\"Siv\",\"Tam\",\"Av\",\"Elu\",\"Tis\",\"Che\",\"Kis\",\"Tev\",\"She\",\"Ada\",\"Ad2\"],dayNames:[\"Yom Rishon\",\"Yom Sheni\",\"Yom Shlishi\",\"Yom Revi'i\",\"Yom Chamishi\",\"Yom Shishi\",\"Yom Shabbat\"],dayNamesShort:[\"Ris\",\"She\",\"Shl\",\"Rev\",\"Cha\",\"Shi\",\"Sha\"],dayNamesMin:[\"Ri\",\"She\",\"Shl\",\"Re\",\"Ch\",\"Shi\",\"Sha\"],digits:null,dateFormat:\"dd/mm/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,r.local.invalidYear);return this._leapYear(e.year())},_leapYear:function(t){return a(7*(t=t<0?t+1:t)+1,19)<7},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,r.local.invalidYear),this._leapYear(t.year?t.year():t)?13:12},weekOfYear:function(t,e,n){var r=this.newDate(t,e,n);return r.add(-r.dayOfWeek(),\"d\"),Math.floor((r.dayOfYear()-1)/7)+1},daysInYear:function(t){return t=this._validate(t,this.minMonth,this.minDay,r.local.invalidYear).year(),this.toJD(-1===t?1:t+1,7,1)-this.toJD(t,7,1)},daysInMonth:function(t,e){return t.year&&(e=t.month(),t=t.year()),this._validate(t,e,this.minDay,r.local.invalidMonth),12===e&&this.leapYear(t)||8===e&&5===a(this.daysInYear(t),10)?30:9===e&&3===a(this.daysInYear(t),10)?29:this.daysPerMonth[e-1]},weekDay:function(t,e,n){return 6!==this.dayOfWeek(t,e,n)},extraInfo:function(t,e,n){var i=this._validate(t,e,n,r.local.invalidDate);return{yearType:(this.leapYear(i)?\"embolismic\":\"common\")+\" \"+[\"deficient\",\"regular\",\"complete\"][this.daysInYear(i)%10-3]}},toJD:function(t,e,n){var i=this._validate(t,e,n,r.local.invalidDate);t=i.year(),e=i.month(),n=i.day();var a=t<=0?t+1:t,o=this.jdEpoch+this._delay1(a)+this._delay2(a)+n+1;if(e<7){for(var s=7;s<=this.monthsInYear(t);s++)o+=this.daysInMonth(t,s);for(s=1;s<e;s++)o+=this.daysInMonth(t,s)}else for(s=7;s<e;s++)o+=this.daysInMonth(t,s);return o},_delay1:function(t){var e=Math.floor((235*t-234)/19),n=29*e+Math.floor((12084+13753*e)/25920);return a(3*(n+1),7)<3&&n++,n},_delay2:function(t){var e=this._delay1(t-1),n=this._delay1(t);return this._delay1(t+1)-n==356?2:n-e==382?1:0},fromJD:function(t){t=Math.floor(t)+.5;for(var e=Math.floor(98496*(t-this.jdEpoch)/35975351)-1;t>=this.toJD(-1===e?1:e+1,7,1);)e++;for(var n=t<this.toJD(e,1,1)?7:1;t>this.toJD(e,n,this.daysInMonth(e,n));)n++;var r=t-this.toJD(e,n,1)+1;return this.newDate(e,n,r)}}),r.calendars.hebrew=i},{\"../main\":621,\"object-assign\":499}],612:[function(t,e,n){var r=t(\"../main\");function i(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}t(\"object-assign\")(i.prototype=new r.baseCalendar,{name:\"Islamic\",jdEpoch:1948439.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Islamic\",epochs:[\"BH\",\"AH\"],monthNames:[\"Muharram\",\"Safar\",\"Rabi' al-awwal\",\"Rabi' al-thani\",\"Jumada al-awwal\",\"Jumada al-thani\",\"Rajab\",\"Sha'aban\",\"Ramadan\",\"Shawwal\",\"Dhu al-Qi'dah\",\"Dhu al-Hijjah\"],monthNamesShort:[\"Muh\",\"Saf\",\"Rab1\",\"Rab2\",\"Jum1\",\"Jum2\",\"Raj\",\"Sha'\",\"Ram\",\"Shaw\",\"DhuQ\",\"DhuH\"],dayNames:[\"Yawm al-ahad\",\"Yawm al-ithnayn\",\"Yawm ath-thulaathaa'\",\"Yawm al-arbi'aa'\",\"Yawm al-kham\\u012bs\",\"Yawm al-jum'a\",\"Yawm as-sabt\"],dayNamesShort:[\"Aha\",\"Ith\",\"Thu\",\"Arb\",\"Kha\",\"Jum\",\"Sab\"],dayNamesMin:[\"Ah\",\"It\",\"Th\",\"Ar\",\"Kh\",\"Ju\",\"Sa\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:6,isRTL:!1}},leapYear:function(t){return(11*this._validate(t,this.minMonth,this.minDay,r.local.invalidYear).year()+14)%30<11},weekOfYear:function(t,e,n){var r=this.newDate(t,e,n);return r.add(-r.dayOfWeek(),\"d\"),Math.floor((r.dayOfYear()-1)/7)+1},daysInYear:function(t){return this.leapYear(t)?355:354},daysInMonth:function(t,e){var n=this._validate(t,e,this.minDay,r.local.invalidMonth);return this.daysPerMonth[n.month()-1]+(12===n.month()&&this.leapYear(n.year())?1:0)},weekDay:function(t,e,n){return 5!==this.dayOfWeek(t,e,n)},toJD:function(t,e,n){var i=this._validate(t,e,n,r.local.invalidDate);return t=i.year(),e=i.month(),t=t<=0?t+1:t,(n=i.day())+Math.ceil(29.5*(e-1))+354*(t-1)+Math.floor((3+11*t)/30)+this.jdEpoch-1},fromJD:function(t){t=Math.floor(t)+.5;var e=Math.floor((30*(t-this.jdEpoch)+10646)/10631);e=e<=0?e-1:e;var n=Math.min(12,Math.ceil((t-29-this.toJD(e,1,1))/29.5)+1),r=t-this.toJD(e,n,1)+1;return this.newDate(e,n,r)}}),r.calendars.islamic=i},{\"../main\":621,\"object-assign\":499}],613:[function(t,e,n){var r=t(\"../main\");function i(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}t(\"object-assign\")(i.prototype=new r.baseCalendar,{name:\"Julian\",jdEpoch:1721423.5,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Julian\",epochs:[\"BC\",\"AD\"],monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"mm/dd/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,r.local.invalidYear);return(t=e.year()<0?e.year()+1:e.year())%4==0},weekOfYear:function(t,e,n){var r=this.newDate(t,e,n);return r.add(4-(r.dayOfWeek()||7),\"d\"),Math.floor((r.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var n=this._validate(t,e,this.minDay,r.local.invalidMonth);return this.daysPerMonth[n.month()-1]+(2===n.month()&&this.leapYear(n.year())?1:0)},weekDay:function(t,e,n){return(this.dayOfWeek(t,e,n)||7)<6},toJD:function(t,e,n){var i=this._validate(t,e,n,r.local.invalidDate);return t=i.year(),e=i.month(),n=i.day(),t<0&&t++,e<=2&&(t--,e+=12),Math.floor(365.25*(t+4716))+Math.floor(30.6001*(e+1))+n-1524.5},fromJD:function(t){var e=Math.floor(t+.5)+1524,n=Math.floor((e-122.1)/365.25),r=Math.floor(365.25*n),i=Math.floor((e-r)/30.6001),a=i-Math.floor(i<14?1:13),o=n-Math.floor(a>2?4716:4715),s=e-r-Math.floor(30.6001*i);return o<=0&&o--,this.newDate(o,a,s)}}),r.calendars.julian=i},{\"../main\":621,\"object-assign\":499}],614:[function(t,e,n){var r=t(\"../main\");function i(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}function a(t,e){return t-e*Math.floor(t/e)}function o(t,e){return a(t-1,e)+1}t(\"object-assign\")(i.prototype=new r.baseCalendar,{name:\"Mayan\",jdEpoch:584282.5,hasYearZero:!0,minMonth:0,firstMonth:0,minDay:0,regionalOptions:{\"\":{name:\"Mayan\",epochs:[\"\",\"\"],monthNames:[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\"],monthNamesShort:[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\"],dayNames:[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\",\"18\",\"19\"],dayNamesShort:[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\",\"18\",\"19\"],dayNamesMin:[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\",\"18\",\"19\"],digits:null,dateFormat:\"YYYY.m.d\",firstDay:0,isRTL:!1,haabMonths:[\"Pop\",\"Uo\",\"Zip\",\"Zotz\",\"Tzec\",\"Xul\",\"Yaxkin\",\"Mol\",\"Chen\",\"Yax\",\"Zac\",\"Ceh\",\"Mac\",\"Kankin\",\"Muan\",\"Pax\",\"Kayab\",\"Cumku\",\"Uayeb\"],tzolkinMonths:[\"Imix\",\"Ik\",\"Akbal\",\"Kan\",\"Chicchan\",\"Cimi\",\"Manik\",\"Lamat\",\"Muluc\",\"Oc\",\"Chuen\",\"Eb\",\"Ben\",\"Ix\",\"Men\",\"Cib\",\"Caban\",\"Etznab\",\"Cauac\",\"Ahau\"]}},leapYear:function(t){return this._validate(t,this.minMonth,this.minDay,r.local.invalidYear),!1},formatYear:function(t){t=this._validate(t,this.minMonth,this.minDay,r.local.invalidYear).year();var e=Math.floor(t/400);return t%=400,t+=t<0?400:0,e+\".\"+Math.floor(t/20)+\".\"+t%20},forYear:function(t){if((t=t.split(\".\")).length<3)throw\"Invalid Mayan year\";for(var e=0,n=0;n<t.length;n++){var r=parseInt(t[n],10);if(Math.abs(r)>19||n>0&&r<0)throw\"Invalid Mayan year\";e=20*e+r}return e},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,r.local.invalidYear),18},weekOfYear:function(t,e,n){return this._validate(t,e,n,r.local.invalidDate),0},daysInYear:function(t){return this._validate(t,this.minMonth,this.minDay,r.local.invalidYear),360},daysInMonth:function(t,e){return this._validate(t,e,this.minDay,r.local.invalidMonth),20},daysInWeek:function(){return 5},dayOfWeek:function(t,e,n){return this._validate(t,e,n,r.local.invalidDate).day()},weekDay:function(t,e,n){return this._validate(t,e,n,r.local.invalidDate),!0},extraInfo:function(t,e,n){var i=this._validate(t,e,n,r.local.invalidDate).toJD(),a=this._toHaab(i),o=this._toTzolkin(i);return{haabMonthName:this.local.haabMonths[a[0]-1],haabMonth:a[0],haabDay:a[1],tzolkinDayName:this.local.tzolkinMonths[o[0]-1],tzolkinDay:o[0],tzolkinTrecena:o[1]}},_toHaab:function(t){var e=a(8+(t-=this.jdEpoch)+340,365);return[Math.floor(e/20)+1,a(e,20)]},_toTzolkin:function(t){return[o(20+(t-=this.jdEpoch),20),o(t+4,13)]},toJD:function(t,e,n){var i=this._validate(t,e,n,r.local.invalidDate);return i.day()+20*i.month()+360*i.year()+this.jdEpoch},fromJD:function(t){t=Math.floor(t)+.5-this.jdEpoch;var e=Math.floor(t/360);t%=360,t+=t<0?360:0;var n=Math.floor(t/20);return this.newDate(e,n,t%20)}}),r.calendars.mayan=i},{\"../main\":621,\"object-assign\":499}],615:[function(t,e,n){var r=t(\"../main\"),i=t(\"object-assign\");function a(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}a.prototype=new r.baseCalendar;var o=r.instance(\"gregorian\");i(a.prototype,{name:\"Nanakshahi\",jdEpoch:2257673.5,daysPerMonth:[31,31,31,31,31,30,30,30,30,30,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Nanakshahi\",epochs:[\"BN\",\"AN\"],monthNames:[\"Chet\",\"Vaisakh\",\"Jeth\",\"Harh\",\"Sawan\",\"Bhadon\",\"Assu\",\"Katak\",\"Maghar\",\"Poh\",\"Magh\",\"Phagun\"],monthNamesShort:[\"Che\",\"Vai\",\"Jet\",\"Har\",\"Saw\",\"Bha\",\"Ass\",\"Kat\",\"Mgr\",\"Poh\",\"Mgh\",\"Pha\"],dayNames:[\"Somvaar\",\"Mangalvar\",\"Budhvaar\",\"Veervaar\",\"Shukarvaar\",\"Sanicharvaar\",\"Etvaar\"],dayNamesShort:[\"Som\",\"Mangal\",\"Budh\",\"Veer\",\"Shukar\",\"Sanichar\",\"Et\"],dayNamesMin:[\"So\",\"Ma\",\"Bu\",\"Ve\",\"Sh\",\"Sa\",\"Et\"],digits:null,dateFormat:\"dd-mm-yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,r.local.invalidYear||r.regionalOptions[\"\"].invalidYear);return o.leapYear(e.year()+(e.year()<1?1:0)+1469)},weekOfYear:function(t,e,n){var r=this.newDate(t,e,n);return r.add(1-(r.dayOfWeek()||7),\"d\"),Math.floor((r.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var n=this._validate(t,e,this.minDay,r.local.invalidMonth);return this.daysPerMonth[n.month()-1]+(12===n.month()&&this.leapYear(n.year())?1:0)},weekDay:function(t,e,n){return(this.dayOfWeek(t,e,n)||7)<6},toJD:function(t,e,n){var i=this._validate(t,e,n,r.local.invalidMonth);(t=i.year())<0&&t++;for(var a=i.day(),s=1;s<i.month();s++)a+=this.daysPerMonth[s-1];return a+o.toJD(t+1468,3,13)},fromJD:function(t){t=Math.floor(t+.5);for(var e=Math.floor((t-(this.jdEpoch-1))/366);t>=this.toJD(e+1,1,1);)e++;for(var n=t-Math.floor(this.toJD(e,1,1)+.5)+1,r=1;n>this.daysInMonth(e,r);)n-=this.daysInMonth(e,r),r++;return this.newDate(e,r,n)}}),r.calendars.nanakshahi=a},{\"../main\":621,\"object-assign\":499}],616:[function(t,e,n){var r=t(\"../main\");function i(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}t(\"object-assign\")(i.prototype=new r.baseCalendar,{name:\"Nepali\",jdEpoch:1700709.5,daysPerMonth:[31,31,32,32,31,30,30,29,30,29,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,daysPerYear:365,regionalOptions:{\"\":{name:\"Nepali\",epochs:[\"BBS\",\"ABS\"],monthNames:[\"Baisakh\",\"Jestha\",\"Ashadh\",\"Shrawan\",\"Bhadra\",\"Ashwin\",\"Kartik\",\"Mangsir\",\"Paush\",\"Mangh\",\"Falgun\",\"Chaitra\"],monthNamesShort:[\"Bai\",\"Je\",\"As\",\"Shra\",\"Bha\",\"Ash\",\"Kar\",\"Mang\",\"Pau\",\"Ma\",\"Fal\",\"Chai\"],dayNames:[\"Aaitabaar\",\"Sombaar\",\"Manglbaar\",\"Budhabaar\",\"Bihibaar\",\"Shukrabaar\",\"Shanibaar\"],dayNamesShort:[\"Aaita\",\"Som\",\"Mangl\",\"Budha\",\"Bihi\",\"Shukra\",\"Shani\"],dayNamesMin:[\"Aai\",\"So\",\"Man\",\"Bu\",\"Bi\",\"Shu\",\"Sha\"],digits:null,dateFormat:\"dd/mm/yyyy\",firstDay:1,isRTL:!1}},leapYear:function(t){return this.daysInYear(t)!==this.daysPerYear},weekOfYear:function(t,e,n){var r=this.newDate(t,e,n);return r.add(-r.dayOfWeek(),\"d\"),Math.floor((r.dayOfYear()-1)/7)+1},daysInYear:function(t){if(t=this._validate(t,this.minMonth,this.minDay,r.local.invalidYear).year(),void 0===this.NEPALI_CALENDAR_DATA[t])return this.daysPerYear;for(var e=0,n=this.minMonth;n<=12;n++)e+=this.NEPALI_CALENDAR_DATA[t][n];return e},daysInMonth:function(t,e){return t.year&&(e=t.month(),t=t.year()),this._validate(t,e,this.minDay,r.local.invalidMonth),void 0===this.NEPALI_CALENDAR_DATA[t]?this.daysPerMonth[e-1]:this.NEPALI_CALENDAR_DATA[t][e]},weekDay:function(t,e,n){return 6!==this.dayOfWeek(t,e,n)},toJD:function(t,e,n){var i=this._validate(t,e,n,r.local.invalidDate);t=i.year(),e=i.month(),n=i.day();var a=r.instance(),o=0,s=e,l=t;this._createMissingCalendarData(t);var c=t-(s>9||9===s&&n>=this.NEPALI_CALENDAR_DATA[l][0]?56:57);for(9!==e&&(o=n,s--);9!==s;)s<=0&&(s=12,l--),o+=this.NEPALI_CALENDAR_DATA[l][s],s--;return 9===e?(o+=n-this.NEPALI_CALENDAR_DATA[l][0])<0&&(o+=a.daysInYear(c)):o+=this.NEPALI_CALENDAR_DATA[l][9]-this.NEPALI_CALENDAR_DATA[l][0],a.newDate(c,1,1).add(o,\"d\").toJD()},fromJD:function(t){var e=r.instance().fromJD(t),n=e.year(),i=e.dayOfYear(),a=n+56;this._createMissingCalendarData(a);for(var o=9,s=this.NEPALI_CALENDAR_DATA[a][o]-this.NEPALI_CALENDAR_DATA[a][0]+1;i>s;)++o>12&&(o=1,a++),s+=this.NEPALI_CALENDAR_DATA[a][o];return this.newDate(a,o,this.NEPALI_CALENDAR_DATA[a][o]-(s-i))},_createMissingCalendarData:function(t){var e=this.daysPerMonth.slice(0);e.unshift(17);for(var n=t-1;n<t+2;n++)void 0===this.NEPALI_CALENDAR_DATA[n]&&(this.NEPALI_CALENDAR_DATA[n]=e)},NEPALI_CALENDAR_DATA:{1970:[18,31,31,32,31,31,31,30,29,30,29,30,30],1971:[18,31,31,32,31,32,30,30,29,30,29,30,30],1972:[17,31,32,31,32,31,30,30,30,29,29,30,30],1973:[19,30,32,31,32,31,30,30,30,29,30,29,31],1974:[19,31,31,32,30,31,31,30,29,30,29,30,30],1975:[18,31,31,32,32,30,31,30,29,30,29,30,30],1976:[17,31,32,31,32,31,30,30,30,29,29,30,31],1977:[18,31,32,31,32,31,31,29,30,29,30,29,31],1978:[18,31,31,32,31,31,31,30,29,30,29,30,30],1979:[18,31,31,32,32,31,30,30,29,30,29,30,30],1980:[17,31,32,31,32,31,30,30,30,29,29,30,31],1981:[18,31,31,31,32,31,31,29,30,30,29,30,30],1982:[18,31,31,32,31,31,31,30,29,30,29,30,30],1983:[18,31,31,32,32,31,30,30,29,30,29,30,30],1984:[17,31,32,31,32,31,30,30,30,29,29,30,31],1985:[18,31,31,31,32,31,31,29,30,30,29,30,30],1986:[18,31,31,32,31,31,31,30,29,30,29,30,30],1987:[18,31,32,31,32,31,30,30,29,30,29,30,30],1988:[17,31,32,31,32,31,30,30,30,29,29,30,31],1989:[18,31,31,31,32,31,31,30,29,30,29,30,30],1990:[18,31,31,32,31,31,31,30,29,30,29,30,30],1991:[18,31,32,31,32,31,30,30,29,30,29,30,30],1992:[17,31,32,31,32,31,30,30,30,29,30,29,31],1993:[18,31,31,31,32,31,31,30,29,30,29,30,30],1994:[18,31,31,32,31,31,31,30,29,30,29,30,30],1995:[17,31,32,31,32,31,30,30,30,29,29,30,30],1996:[17,31,32,31,32,31,30,30,30,29,30,29,31],1997:[18,31,31,32,31,31,31,30,29,30,29,30,30],1998:[18,31,31,32,31,31,31,30,29,30,29,30,30],1999:[17,31,32,31,32,31,30,30,30,29,29,30,31],2e3:[17,30,32,31,32,31,30,30,30,29,30,29,31],2001:[18,31,31,32,31,31,31,30,29,30,29,30,30],2002:[18,31,31,32,32,31,30,30,29,30,29,30,30],2003:[17,31,32,31,32,31,30,30,30,29,29,30,31],2004:[17,30,32,31,32,31,30,30,30,29,30,29,31],2005:[18,31,31,32,31,31,31,30,29,30,29,30,30],2006:[18,31,31,32,32,31,30,30,29,30,29,30,30],2007:[17,31,32,31,32,31,30,30,30,29,29,30,31],2008:[17,31,31,31,32,31,31,29,30,30,29,29,31],2009:[18,31,31,32,31,31,31,30,29,30,29,30,30],2010:[18,31,31,32,32,31,30,30,29,30,29,30,30],2011:[17,31,32,31,32,31,30,30,30,29,29,30,31],2012:[17,31,31,31,32,31,31,29,30,30,29,30,30],2013:[18,31,31,32,31,31,31,30,29,30,29,30,30],2014:[18,31,31,32,32,31,30,30,29,30,29,30,30],2015:[17,31,32,31,32,31,30,30,30,29,29,30,31],2016:[17,31,31,31,32,31,31,29,30,30,29,30,30],2017:[18,31,31,32,31,31,31,30,29,30,29,30,30],2018:[18,31,32,31,32,31,30,30,29,30,29,30,30],2019:[17,31,32,31,32,31,30,30,30,29,30,29,31],2020:[17,31,31,31,32,31,31,30,29,30,29,30,30],2021:[18,31,31,32,31,31,31,30,29,30,29,30,30],2022:[17,31,32,31,32,31,30,30,30,29,29,30,30],2023:[17,31,32,31,32,31,30,30,30,29,30,29,31],2024:[17,31,31,31,32,31,31,30,29,30,29,30,30],2025:[18,31,31,32,31,31,31,30,29,30,29,30,30],2026:[17,31,32,31,32,31,30,30,30,29,29,30,31],2027:[17,30,32,31,32,31,30,30,30,29,30,29,31],2028:[17,31,31,32,31,31,31,30,29,30,29,30,30],2029:[18,31,31,32,31,32,30,30,29,30,29,30,30],2030:[17,31,32,31,32,31,30,30,30,30,30,30,31],2031:[17,31,32,31,32,31,31,31,31,31,31,31,31],2032:[17,32,32,32,32,32,32,32,32,32,32,32,32],2033:[18,31,31,32,32,31,30,30,29,30,29,30,30],2034:[17,31,32,31,32,31,30,30,30,29,29,30,31],2035:[17,30,32,31,32,31,31,29,30,30,29,29,31],2036:[17,31,31,32,31,31,31,30,29,30,29,30,30],2037:[18,31,31,32,32,31,30,30,29,30,29,30,30],2038:[17,31,32,31,32,31,30,30,30,29,29,30,31],2039:[17,31,31,31,32,31,31,29,30,30,29,30,30],2040:[17,31,31,32,31,31,31,30,29,30,29,30,30],2041:[18,31,31,32,32,31,30,30,29,30,29,30,30],2042:[17,31,32,31,32,31,30,30,30,29,29,30,31],2043:[17,31,31,31,32,31,31,29,30,30,29,30,30],2044:[17,31,31,32,31,31,31,30,29,30,29,30,30],2045:[18,31,32,31,32,31,30,30,29,30,29,30,30],2046:[17,31,32,31,32,31,30,30,30,29,29,30,31],2047:[17,31,31,31,32,31,31,30,29,30,29,30,30],2048:[17,31,31,32,31,31,31,30,29,30,29,30,30],2049:[17,31,32,31,32,31,30,30,30,29,29,30,30],2050:[17,31,32,31,32,31,30,30,30,29,30,29,31],2051:[17,31,31,31,32,31,31,30,29,30,29,30,30],2052:[17,31,31,32,31,31,31,30,29,30,29,30,30],2053:[17,31,32,31,32,31,30,30,30,29,29,30,30],2054:[17,31,32,31,32,31,30,30,30,29,30,29,31],2055:[17,31,31,32,31,31,31,30,29,30,30,29,30],2056:[17,31,31,32,31,32,30,30,29,30,29,30,30],2057:[17,31,32,31,32,31,30,30,30,29,29,30,31],2058:[17,30,32,31,32,31,30,30,30,29,30,29,31],2059:[17,31,31,32,31,31,31,30,29,30,29,30,30],2060:[17,31,31,32,32,31,30,30,29,30,29,30,30],2061:[17,31,32,31,32,31,30,30,30,29,29,30,31],2062:[17,30,32,31,32,31,31,29,30,29,30,29,31],2063:[17,31,31,32,31,31,31,30,29,30,29,30,30],2064:[17,31,31,32,32,31,30,30,29,30,29,30,30],2065:[17,31,32,31,32,31,30,30,30,29,29,30,31],2066:[17,31,31,31,32,31,31,29,30,30,29,29,31],2067:[17,31,31,32,31,31,31,30,29,30,29,30,30],2068:[17,31,31,32,32,31,30,30,29,30,29,30,30],2069:[17,31,32,31,32,31,30,30,30,29,29,30,31],2070:[17,31,31,31,32,31,31,29,30,30,29,30,30],2071:[17,31,31,32,31,31,31,30,29,30,29,30,30],2072:[17,31,32,31,32,31,30,30,29,30,29,30,30],2073:[17,31,32,31,32,31,30,30,30,29,29,30,31],2074:[17,31,31,31,32,31,31,30,29,30,29,30,30],2075:[17,31,31,32,31,31,31,30,29,30,29,30,30],2076:[16,31,32,31,32,31,30,30,30,29,29,30,30],2077:[17,31,32,31,32,31,30,30,30,29,30,29,31],2078:[17,31,31,31,32,31,31,30,29,30,29,30,30],2079:[17,31,31,32,31,31,31,30,29,30,29,30,30],2080:[16,31,32,31,32,31,30,30,30,29,29,30,30],2081:[17,31,31,32,32,31,30,30,30,29,30,30,30],2082:[17,31,32,31,32,31,30,30,30,29,30,30,30],2083:[17,31,31,32,31,31,30,30,30,29,30,30,30],2084:[17,31,31,32,31,31,30,30,30,29,30,30,30],2085:[17,31,32,31,32,31,31,30,30,29,30,30,30],2086:[17,31,32,31,32,31,30,30,30,29,30,30,30],2087:[16,31,31,32,31,31,31,30,30,29,30,30,30],2088:[16,30,31,32,32,30,31,30,30,29,30,30,30],2089:[17,31,32,31,32,31,30,30,30,29,30,30,30],2090:[17,31,32,31,32,31,30,30,30,29,30,30,30],2091:[16,31,31,32,31,31,31,30,30,29,30,30,30],2092:[16,31,31,32,32,31,30,30,30,29,30,30,30],2093:[17,31,32,31,32,31,30,30,30,29,30,30,30],2094:[17,31,31,32,31,31,30,30,30,29,30,30,30],2095:[17,31,31,32,31,31,31,30,29,30,30,30,30],2096:[17,30,31,32,32,31,30,30,29,30,29,30,30],2097:[17,31,32,31,32,31,30,30,30,29,30,30,30],2098:[17,31,31,32,31,31,31,29,30,29,30,30,31],2099:[17,31,31,32,31,31,31,30,29,29,30,30,30],2100:[17,31,32,31,32,30,31,30,29,30,29,30,30]}}),r.calendars.nepali=i},{\"../main\":621,\"object-assign\":499}],617:[function(t,e,n){var r=t(\"../main\");function i(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}function a(t,e){return t-e*Math.floor(t/e)}t(\"object-assign\")(i.prototype=new r.baseCalendar,{name:\"Persian\",jdEpoch:1948320.5,daysPerMonth:[31,31,31,31,31,31,30,30,30,30,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Persian\",epochs:[\"BP\",\"AP\"],monthNames:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Day\",\"Bahman\",\"Esfand\"],monthNamesShort:[\"Far\",\"Ord\",\"Kho\",\"Tir\",\"Mor\",\"Sha\",\"Meh\",\"Aba\",\"Aza\",\"Day\",\"Bah\",\"Esf\"],dayNames:[\"Yekshambe\",\"Doshambe\",\"Seshambe\",\"Ch\\xe6harshambe\",\"Panjshambe\",\"Jom'e\",\"Shambe\"],dayNamesShort:[\"Yek\",\"Do\",\"Se\",\"Ch\\xe6\",\"Panj\",\"Jom\",\"Sha\"],dayNamesMin:[\"Ye\",\"Do\",\"Se\",\"Ch\",\"Pa\",\"Jo\",\"Sh\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:6,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,r.local.invalidYear);return 682*((e.year()-(e.year()>0?474:473))%2820+474+38)%2816<682},weekOfYear:function(t,e,n){var r=this.newDate(t,e,n);return r.add(-(r.dayOfWeek()+1)%7,\"d\"),Math.floor((r.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var n=this._validate(t,e,this.minDay,r.local.invalidMonth);return this.daysPerMonth[n.month()-1]+(12===n.month()&&this.leapYear(n.year())?1:0)},weekDay:function(t,e,n){return 5!==this.dayOfWeek(t,e,n)},toJD:function(t,e,n){var i=this._validate(t,e,n,r.local.invalidDate);t=i.year(),e=i.month(),n=i.day();var o=t-(t>=0?474:473),s=474+a(o,2820);return n+(e<=7?31*(e-1):30*(e-1)+6)+Math.floor((682*s-110)/2816)+365*(s-1)+1029983*Math.floor(o/2820)+this.jdEpoch-1},fromJD:function(t){var e=(t=Math.floor(t)+.5)-this.toJD(475,1,1),n=Math.floor(e/1029983),r=a(e,1029983),i=2820;if(1029982!==r){var o=Math.floor(r/366),s=a(r,366);i=Math.floor((2134*o+2816*s+2815)/1028522)+o+1}var l=i+2820*n+474,c=t-this.toJD(l=l<=0?l-1:l,1,1)+1,u=c<=186?Math.ceil(c/31):Math.ceil((c-6)/30),h=t-this.toJD(l,u,1)+1;return this.newDate(l,u,h)}}),r.calendars.persian=i,r.calendars.jalali=i},{\"../main\":621,\"object-assign\":499}],618:[function(t,e,n){var r=t(\"../main\"),i=t(\"object-assign\"),a=r.instance();function o(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}i(o.prototype=new r.baseCalendar,{name:\"Taiwan\",jdEpoch:2419402.5,yearsOffset:1911,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Taiwan\",epochs:[\"BROC\",\"ROC\"],monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:1,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,r.local.invalidYear);return t=this._t2gYear(e.year()),a.leapYear(t)},weekOfYear:function(t,e,n){var i=this._validate(t,this.minMonth,this.minDay,r.local.invalidYear);return t=this._t2gYear(i.year()),a.weekOfYear(t,i.month(),i.day())},daysInMonth:function(t,e){var n=this._validate(t,e,this.minDay,r.local.invalidMonth);return this.daysPerMonth[n.month()-1]+(2===n.month()&&this.leapYear(n.year())?1:0)},weekDay:function(t,e,n){return(this.dayOfWeek(t,e,n)||7)<6},toJD:function(t,e,n){var i=this._validate(t,e,n,r.local.invalidDate);return t=this._t2gYear(i.year()),a.toJD(t,i.month(),i.day())},fromJD:function(t){var e=a.fromJD(t),n=this._g2tYear(e.year());return this.newDate(n,e.month(),e.day())},_t2gYear:function(t){return t+this.yearsOffset+(t>=-this.yearsOffset&&t<=-1?1:0)},_g2tYear:function(t){return t-this.yearsOffset-(t>=1&&t<=this.yearsOffset?1:0)}}),r.calendars.taiwan=o},{\"../main\":621,\"object-assign\":499}],619:[function(t,e,n){var r=t(\"../main\"),i=t(\"object-assign\"),a=r.instance();function o(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}i(o.prototype=new r.baseCalendar,{name:\"Thai\",jdEpoch:1523098.5,yearsOffset:543,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Thai\",epochs:[\"BBE\",\"BE\"],monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"dd/mm/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,r.local.invalidYear);return t=this._t2gYear(e.year()),a.leapYear(t)},weekOfYear:function(t,e,n){var i=this._validate(t,this.minMonth,this.minDay,r.local.invalidYear);return t=this._t2gYear(i.year()),a.weekOfYear(t,i.month(),i.day())},daysInMonth:function(t,e){var n=this._validate(t,e,this.minDay,r.local.invalidMonth);return this.daysPerMonth[n.month()-1]+(2===n.month()&&this.leapYear(n.year())?1:0)},weekDay:function(t,e,n){return(this.dayOfWeek(t,e,n)||7)<6},toJD:function(t,e,n){var i=this._validate(t,e,n,r.local.invalidDate);return t=this._t2gYear(i.year()),a.toJD(t,i.month(),i.day())},fromJD:function(t){var e=a.fromJD(t),n=this._g2tYear(e.year());return this.newDate(n,e.month(),e.day())},_t2gYear:function(t){return t-this.yearsOffset-(t>=1&&t<=this.yearsOffset?1:0)},_g2tYear:function(t){return t+this.yearsOffset+(t>=-this.yearsOffset&&t<=-1?1:0)}}),r.calendars.thai=o},{\"../main\":621,\"object-assign\":499}],620:[function(t,e,n){var r=t(\"../main\");function i(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}t(\"object-assign\")(i.prototype=new r.baseCalendar,{name:\"UmmAlQura\",hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Umm al-Qura\",epochs:[\"BH\",\"AH\"],monthNames:[\"Al-Muharram\",\"Safar\",\"Rabi' al-awwal\",\"Rabi' Al-Thani\",\"Jumada Al-Awwal\",\"Jumada Al-Thani\",\"Rajab\",\"Sha'aban\",\"Ramadan\",\"Shawwal\",\"Dhu al-Qi'dah\",\"Dhu al-Hijjah\"],monthNamesShort:[\"Muh\",\"Saf\",\"Rab1\",\"Rab2\",\"Jum1\",\"Jum2\",\"Raj\",\"Sha'\",\"Ram\",\"Shaw\",\"DhuQ\",\"DhuH\"],dayNames:[\"Yawm al-Ahad\",\"Yawm al-Ithnain\",\"Yawm al-Thal\\u0101th\\u0101\\u2019\",\"Yawm al-Arba\\u2018\\u0101\\u2019\",\"Yawm al-Kham\\u012bs\",\"Yawm al-Jum\\u2018a\",\"Yawm al-Sabt\"],dayNamesMin:[\"Ah\",\"Ith\",\"Th\",\"Ar\",\"Kh\",\"Ju\",\"Sa\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:6,isRTL:!0}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,r.local.invalidYear);return 355===this.daysInYear(e.year())},weekOfYear:function(t,e,n){var r=this.newDate(t,e,n);return r.add(-r.dayOfWeek(),\"d\"),Math.floor((r.dayOfYear()-1)/7)+1},daysInYear:function(t){for(var e=0,n=1;n<=12;n++)e+=this.daysInMonth(t,n);return e},daysInMonth:function(t,e){for(var n=this._validate(t,e,this.minDay,r.local.invalidMonth).toJD()-24e5+.5,i=0,o=0;o<a.length;o++){if(a[o]>n)return a[i]-a[i-1];i++}return 30},weekDay:function(t,e,n){return 5!==this.dayOfWeek(t,e,n)},toJD:function(t,e,n){var i=this._validate(t,e,n,r.local.invalidDate),o=12*(i.year()-1)+i.month()-15292;return i.day()+a[o-1]-1+24e5-.5},fromJD:function(t){for(var e=t-24e5+.5,n=0,r=0;r<a.length&&!(a[r]>e);r++)n++;var i=n+15292,o=Math.floor((i-1)/12);return this.newDate(o+1,i-12*o,e-a[n-1]+1)},isValid:function(t,e,n){var i=r.baseCalendar.prototype.isValid.apply(this,arguments);return i&&(i=(t=null!=t.year?t.year:t)>=1276&&t<=1500),i},_validate:function(t,e,n,i){var a=r.baseCalendar.prototype._validate.apply(this,arguments);if(a.year<1276||a.year>1500)throw i.replace(/\\{0\\}/,this.local.name);return a}}),r.calendars.ummalqura=i;var a=[20,50,79,109,138,168,197,227,256,286,315,345,374,404,433,463,492,522,551,581,611,641,670,700,729,759,788,818,847,877,906,936,965,995,1024,1054,1083,1113,1142,1172,1201,1231,1260,1290,1320,1350,1379,1409,1438,1468,1497,1527,1556,1586,1615,1645,1674,1704,1733,1763,1792,1822,1851,1881,1910,1940,1969,1999,2028,2058,2087,2117,2146,2176,2205,2235,2264,2294,2323,2353,2383,2413,2442,2472,2501,2531,2560,2590,2619,2649,2678,2708,2737,2767,2796,2826,2855,2885,2914,2944,2973,3003,3032,3062,3091,3121,3150,3180,3209,3239,3268,3298,3327,3357,3386,3416,3446,3476,3505,3535,3564,3594,3623,3653,3682,3712,3741,3771,3800,3830,3859,3889,3918,3948,3977,4007,4036,4066,4095,4125,4155,4185,4214,4244,4273,4303,4332,4362,4391,4421,4450,4480,4509,4539,4568,4598,4627,4657,4686,4716,4745,4775,4804,4834,4863,4893,4922,4952,4981,5011,5040,5070,5099,5129,5158,5188,5218,5248,5277,5307,5336,5366,5395,5425,5454,5484,5513,5543,5572,5602,5631,5661,5690,5720,5749,5779,5808,5838,5867,5897,5926,5956,5985,6015,6044,6074,6103,6133,6162,6192,6221,6251,6281,6311,6340,6370,6399,6429,6458,6488,6517,6547,6576,6606,6635,6665,6694,6724,6753,6783,6812,6842,6871,6901,6930,6960,6989,7019,7048,7078,7107,7137,7166,7196,7225,7255,7284,7314,7344,7374,7403,7433,7462,7492,7521,7551,7580,7610,7639,7669,7698,7728,7757,7787,7816,7846,7875,7905,7934,7964,7993,8023,8053,8083,8112,8142,8171,8201,8230,8260,8289,8319,8348,8378,8407,8437,8466,8496,8525,8555,8584,8614,8643,8673,8702,8732,8761,8791,8821,8850,8880,8909,8938,8968,8997,9027,9056,9086,9115,9145,9175,9205,9234,9264,9293,9322,9352,9381,9410,9440,9470,9499,9529,9559,9589,9618,9648,9677,9706,9736,9765,9794,9824,9853,9883,9913,9943,9972,10002,10032,10061,10090,10120,10149,10178,10208,10237,10267,10297,10326,10356,10386,10415,10445,10474,10504,10533,10562,10592,10621,10651,10680,10710,10740,10770,10799,10829,10858,10888,10917,10947,10976,11005,11035,11064,11094,11124,11153,11183,11213,11242,11272,11301,11331,11360,11389,11419,11448,11478,11507,11537,11567,11596,11626,11655,11685,11715,11744,11774,11803,11832,11862,11891,11921,11950,11980,12010,12039,12069,12099,12128,12158,12187,12216,12246,12275,12304,12334,12364,12393,12423,12453,12483,12512,12542,12571,12600,12630,12659,12688,12718,12747,12777,12807,12837,12866,12896,12926,12955,12984,13014,13043,13072,13102,13131,13161,13191,13220,13250,13280,13310,13339,13368,13398,13427,13456,13486,13515,13545,13574,13604,13634,13664,13693,13723,13752,13782,13811,13840,13870,13899,13929,13958,13988,14018,14047,14077,14107,14136,14166,14195,14224,14254,14283,14313,14342,14372,14401,14431,14461,14490,14520,14550,14579,14609,14638,14667,14697,14726,14756,14785,14815,14844,14874,14904,14933,14963,14993,15021,15051,15081,15110,15140,15169,15199,15228,15258,15287,15317,15347,15377,15406,15436,15465,15494,15524,15553,15582,15612,15641,15671,15701,15731,15760,15790,15820,15849,15878,15908,15937,15966,15996,16025,16055,16085,16114,16144,16174,16204,16233,16262,16292,16321,16350,16380,16409,16439,16468,16498,16528,16558,16587,16617,16646,16676,16705,16734,16764,16793,16823,16852,16882,16912,16941,16971,17001,17030,17060,17089,17118,17148,17177,17207,17236,17266,17295,17325,17355,17384,17414,17444,17473,17502,17532,17561,17591,17620,17650,17679,17709,17738,17768,17798,17827,17857,17886,17916,17945,17975,18004,18034,18063,18093,18122,18152,18181,18211,18241,18270,18300,18330,18359,18388,18418,18447,18476,18506,18535,18565,18595,18625,18654,18684,18714,18743,18772,18802,18831,18860,18890,18919,18949,18979,19008,19038,19068,19098,19127,19156,19186,19215,19244,19274,19303,19333,19362,19392,19422,19452,19481,19511,19540,19570,19599,19628,19658,19687,19717,19746,19776,19806,19836,19865,19895,19924,19954,19983,20012,20042,20071,20101,20130,20160,20190,20219,20249,20279,20308,20338,20367,20396,20426,20455,20485,20514,20544,20573,20603,20633,20662,20692,20721,20751,20780,20810,20839,20869,20898,20928,20957,20987,21016,21046,21076,21105,21135,21164,21194,21223,21253,21282,21312,21341,21371,21400,21430,21459,21489,21519,21548,21578,21607,21637,21666,21696,21725,21754,21784,21813,21843,21873,21902,21932,21962,21991,22021,22050,22080,22109,22138,22168,22197,22227,22256,22286,22316,22346,22375,22405,22434,22464,22493,22522,22552,22581,22611,22640,22670,22700,22730,22759,22789,22818,22848,22877,22906,22936,22965,22994,23024,23054,23083,23113,23143,23173,23202,23232,23261,23290,23320,23349,23379,23408,23438,23467,23497,23527,23556,23586,23616,23645,23674,23704,23733,23763,23792,23822,23851,23881,23910,23940,23970,23999,24029,24058,24088,24117,24147,24176,24206,24235,24265,24294,24324,24353,24383,24413,24442,24472,24501,24531,24560,24590,24619,24648,24678,24707,24737,24767,24796,24826,24856,24885,24915,24944,24974,25003,25032,25062,25091,25121,25150,25180,25210,25240,25269,25299,25328,25358,25387,25416,25446,25475,25505,25534,25564,25594,25624,25653,25683,25712,25742,25771,25800,25830,25859,25888,25918,25948,25977,26007,26037,26067,26096,26126,26155,26184,26214,26243,26272,26302,26332,26361,26391,26421,26451,26480,26510,26539,26568,26598,26627,26656,26686,26715,26745,26775,26805,26834,26864,26893,26923,26952,26982,27011,27041,27070,27099,27129,27159,27188,27218,27248,27277,27307,27336,27366,27395,27425,27454,27484,27513,27542,27572,27602,27631,27661,27691,27720,27750,27779,27809,27838,27868,27897,27926,27956,27985,28015,28045,28074,28104,28134,28163,28193,28222,28252,28281,28310,28340,28369,28399,28428,28458,28488,28517,28547,28577,28607,28636,28665,28695,28724,28754,28783,28813,28843,28872,28901,28931,28960,28990,29019,29049,29078,29108,29137,29167,29196,29226,29255,29285,29315,29345,29375,29404,29434,29463,29492,29522,29551,29580,29610,29640,29669,29699,29729,29759,29788,29818,29847,29876,29906,29935,29964,29994,30023,30053,30082,30112,30141,30171,30200,30230,30259,30289,30318,30348,30378,30408,30437,30467,30496,30526,30555,30585,30614,30644,30673,30703,30732,30762,30791,30821,30850,30880,30909,30939,30968,30998,31027,31057,31086,31116,31145,31175,31204,31234,31263,31293,31322,31352,31381,31411,31441,31471,31500,31530,31559,31589,31618,31648,31676,31706,31736,31766,31795,31825,31854,31884,31913,31943,31972,32002,32031,32061,32090,32120,32150,32180,32209,32239,32268,32298,32327,32357,32386,32416,32445,32475,32504,32534,32563,32593,32622,32652,32681,32711,32740,32770,32799,32829,32858,32888,32917,32947,32976,33006,33035,33065,33094,33124,33153,33183,33213,33243,33272,33302,33331,33361,33390,33420,33450,33479,33509,33539,33568,33598,33627,33657,33686,33716,33745,33775,33804,33834,33863,33893,33922,33952,33981,34011,34040,34069,34099,34128,34158,34187,34217,34247,34277,34306,34336,34365,34395,34424,34454,34483,34512,34542,34571,34601,34631,34660,34690,34719,34749,34778,34808,34837,34867,34896,34926,34955,34985,35015,35044,35074,35103,35133,35162,35192,35222,35251,35280,35310,35340,35370,35399,35429,35458,35488,35517,35547,35576,35605,35635,35665,35694,35723,35753,35782,35811,35841,35871,35901,35930,35960,35989,36019,36048,36078,36107,36136,36166,36195,36225,36254,36284,36314,36343,36373,36403,36433,36462,36492,36521,36551,36580,36610,36639,36669,36698,36728,36757,36786,36816,36845,36875,36904,36934,36963,36993,37022,37052,37081,37111,37141,37170,37200,37229,37259,37288,37318,37347,37377,37406,37436,37465,37495,37524,37554,37584,37613,37643,37672,37701,37731,37760,37790,37819,37849,37878,37908,37938,37967,37997,38027,38056,38085,38115,38144,38174,38203,38233,38262,38292,38322,38351,38381,38410,38440,38469,38499,38528,38558,38587,38617,38646,38676,38705,38735,38764,38794,38823,38853,38882,38912,38941,38971,39001,39030,39059,39089,39118,39148,39178,39208,39237,39267,39297,39326,39355,39385,39414,39444,39473,39503,39532,39562,39592,39621,39650,39680,39709,39739,39768,39798,39827,39857,39886,39916,39946,39975,40005,40035,40064,40094,40123,40153,40182,40212,40241,40271,40300,40330,40359,40389,40418,40448,40477,40507,40536,40566,40595,40625,40655,40685,40714,40744,40773,40803,40832,40862,40892,40921,40951,40980,41009,41039,41068,41098,41127,41157,41186,41216,41245,41275,41304,41334,41364,41393,41422,41452,41481,41511,41540,41570,41599,41629,41658,41688,41718,41748,41777,41807,41836,41865,41894,41924,41953,41983,42012,42042,42072,42102,42131,42161,42190,42220,42249,42279,42308,42337,42367,42397,42426,42456,42485,42515,42545,42574,42604,42633,42662,42692,42721,42751,42780,42810,42839,42869,42899,42929,42958,42988,43017,43046,43076,43105,43135,43164,43194,43223,43253,43283,43312,43342,43371,43401,43430,43460,43489,43519,43548,43578,43607,43637,43666,43696,43726,43755,43785,43814,43844,43873,43903,43932,43962,43991,44021,44050,44080,44109,44139,44169,44198,44228,44258,44287,44317,44346,44375,44405,44434,44464,44493,44523,44553,44582,44612,44641,44671,44700,44730,44759,44788,44818,44847,44877,44906,44936,44966,44996,45025,45055,45084,45114,45143,45172,45202,45231,45261,45290,45320,45350,45380,45409,45439,45468,45498,45527,45556,45586,45615,45644,45674,45704,45733,45763,45793,45823,45852,45882,45911,45940,45970,45999,46028,46058,46088,46117,46147,46177,46206,46236,46265,46295,46324,46354,46383,46413,46442,46472,46501,46531,46560,46590,46620,46649,46679,46708,46738,46767,46797,46826,46856,46885,46915,46944,46974,47003,47033,47063,47092,47122,47151,47181,47210,47240,47269,47298,47328,47357,47387,47417,47446,47476,47506,47535,47565,47594,47624,47653,47682,47712,47741,47771,47800,47830,47860,47890,47919,47949,47978,48008,48037,48066,48096,48125,48155,48184,48214,48244,48273,48303,48333,48362,48392,48421,48450,48480,48509,48538,48568,48598,48627,48657,48687,48717,48746,48776,48805,48834,48864,48893,48922,48952,48982,49011,49041,49071,49100,49130,49160,49189,49218,49248,49277,49306,49336,49365,49395,49425,49455,49484,49514,49543,49573,49602,49632,49661,49690,49720,49749,49779,49809,49838,49868,49898,49927,49957,49986,50016,50045,50075,50104,50133,50163,50192,50222,50252,50281,50311,50340,50370,50400,50429,50459,50488,50518,50547,50576,50606,50635,50665,50694,50724,50754,50784,50813,50843,50872,50902,50931,50960,50990,51019,51049,51078,51108,51138,51167,51197,51227,51256,51286,51315,51345,51374,51403,51433,51462,51492,51522,51552,51582,51611,51641,51670,51699,51729,51758,51787,51816,51846,51876,51906,51936,51965,51995,52025,52054,52083,52113,52142,52171,52200,52230,52260,52290,52319,52349,52379,52408,52438,52467,52497,52526,52555,52585,52614,52644,52673,52703,52733,52762,52792,52822,52851,52881,52910,52939,52969,52998,53028,53057,53087,53116,53146,53176,53205,53235,53264,53294,53324,53353,53383,53412,53441,53471,53500,53530,53559,53589,53619,53648,53678,53708,53737,53767,53796,53825,53855,53884,53913,53943,53973,54003,54032,54062,54092,54121,54151,54180,54209,54239,54268,54297,54327,54357,54387,54416,54446,54476,54505,54535,54564,54593,54623,54652,54681,54711,54741,54770,54800,54830,54859,54889,54919,54948,54977,55007,55036,55066,55095,55125,55154,55184,55213,55243,55273,55302,55332,55361,55391,55420,55450,55479,55508,55538,55567,55597,55627,55657,55686,55716,55745,55775,55804,55834,55863,55892,55922,55951,55981,56011,56040,56070,56100,56129,56159,56188,56218,56247,56276,56306,56335,56365,56394,56424,56454,56483,56513,56543,56572,56601,56631,56660,56690,56719,56749,56778,56808,56837,56867,56897,56926,56956,56985,57015,57044,57074,57103,57133,57162,57192,57221,57251,57280,57310,57340,57369,57399,57429,57458,57487,57517,57546,57576,57605,57634,57664,57694,57723,57753,57783,57813,57842,57871,57901,57930,57959,57989,58018,58048,58077,58107,58137,58167,58196,58226,58255,58285,58314,58343,58373,58402,58432,58461,58491,58521,58551,58580,58610,58639,58669,58698,58727,58757,58786,58816,58845,58875,58905,58934,58964,58994,59023,59053,59082,59111,59141,59170,59200,59229,59259,59288,59318,59348,59377,59407,59436,59466,59495,59525,59554,59584,59613,59643,59672,59702,59731,59761,59791,59820,59850,59879,59909,59939,59968,59997,60027,60056,60086,60115,60145,60174,60204,60234,60264,60293,60323,60352,60381,60411,60440,60469,60499,60528,60558,60588,60618,60648,60677,60707,60736,60765,60795,60824,60853,60883,60912,60942,60972,61002,61031,61061,61090,61120,61149,61179,61208,61237,61267,61296,61326,61356,61385,61415,61445,61474,61504,61533,61563,61592,61621,61651,61680,61710,61739,61769,61799,61828,61858,61888,61917,61947,61976,62006,62035,62064,62094,62123,62153,62182,62212,62242,62271,62301,62331,62360,62390,62419,62448,62478,62507,62537,62566,62596,62625,62655,62685,62715,62744,62774,62803,62832,62862,62891,62921,62950,62980,63009,63039,63069,63099,63128,63157,63187,63216,63246,63275,63305,63334,63363,63393,63423,63453,63482,63512,63541,63571,63600,63630,63659,63689,63718,63747,63777,63807,63836,63866,63895,63925,63955,63984,64014,64043,64073,64102,64131,64161,64190,64220,64249,64279,64309,64339,64368,64398,64427,64457,64486,64515,64545,64574,64603,64633,64663,64692,64722,64752,64782,64811,64841,64870,64899,64929,64958,64987,65017,65047,65076,65106,65136,65166,65195,65225,65254,65283,65313,65342,65371,65401,65431,65460,65490,65520,65549,65579,65608,65638,65667,65697,65726,65755,65785,65815,65844,65874,65903,65933,65963,65992,66022,66051,66081,66110,66140,66169,66199,66228,66258,66287,66317,66346,66376,66405,66435,66465,66494,66524,66553,66583,66612,66641,66671,66700,66730,66760,66789,66819,66849,66878,66908,66937,66967,66996,67025,67055,67084,67114,67143,67173,67203,67233,67262,67292,67321,67351,67380,67409,67439,67468,67497,67527,67557,67587,67617,67646,67676,67705,67735,67764,67793,67823,67852,67882,67911,67941,67971,68e3,68030,68060,68089,68119,68148,68177,68207,68236,68266,68295,68325,68354,68384,68414,68443,68473,68502,68532,68561,68591,68620,68650,68679,68708,68738,68768,68797,68827,68857,68886,68916,68946,68975,69004,69034,69063,69092,69122,69152,69181,69211,69240,69270,69300,69330,69359,69388,69418,69447,69476,69506,69535,69565,69595,69624,69654,69684,69713,69743,69772,69802,69831,69861,69890,69919,69949,69978,70008,70038,70067,70097,70126,70156,70186,70215,70245,70274,70303,70333,70362,70392,70421,70451,70481,70510,70540,70570,70599,70629,70658,70687,70717,70746,70776,70805,70835,70864,70894,70924,70954,70983,71013,71042,71071,71101,71130,71159,71189,71218,71248,71278,71308,71337,71367,71397,71426,71455,71485,71514,71543,71573,71602,71632,71662,71691,71721,71751,71781,71810,71839,71869,71898,71927,71957,71986,72016,72046,72075,72105,72135,72164,72194,72223,72253,72282,72311,72341,72370,72400,72429,72459,72489,72518,72548,72577,72607,72637,72666,72695,72725,72754,72784,72813,72843,72872,72902,72931,72961,72991,73020,73050,73080,73109,73139,73168,73197,73227,73256,73286,73315,73345,73375,73404,73434,73464,73493,73523,73552,73581,73611,73640,73669,73699,73729,73758,73788,73818,73848,73877,73907,73936,73965,73995,74024,74053,74083,74113,74142,74172,74202,74231,74261,74291,74320,74349,74379,74408,74437,74467,74497,74526,74556,74586,74615,74645,74675,74704,74733,74763,74792,74822,74851,74881,74910,74940,74969,74999,75029,75058,75088,75117,75147,75176,75206,75235,75264,75294,75323,75353,75383,75412,75442,75472,75501,75531,75560,75590,75619,75648,75678,75707,75737,75766,75796,75826,75856,75885,75915,75944,75974,76003,76032,76062,76091,76121,76150,76180,76210,76239,76269,76299,76328,76358,76387,76416,76446,76475,76505,76534,76564,76593,76623,76653,76682,76712,76741,76771,76801,76830,76859,76889,76918,76948,76977,77007,77036,77066,77096,77125,77155,77185,77214,77243,77273,77302,77332,77361,77390,77420,77450,77479,77509,77539,77569,77598,77627,77657,77686,77715,77745,77774,77804,77833,77863,77893,77923,77952,77982,78011,78041,78070,78099,78129,78158,78188,78217,78247,78277,78307,78336,78366,78395,78425,78454,78483,78513,78542,78572,78601,78631,78661,78690,78720,78750,78779,78808,78838,78867,78897,78926,78956,78985,79015,79044,79074,79104,79133,79163,79192,79222,79251,79281,79310,79340,79369,79399,79428,79458,79487,79517,79546,79576,79606,79635,79665,79695,79724,79753,79783,79812,79841,79871,79900,79930,79960,79990]},{\"../main\":621,\"object-assign\":499}],621:[function(t,e,n){var r=t(\"object-assign\");function i(){this.regionalOptions=[],this.regionalOptions[\"\"]={invalidCalendar:\"Calendar {0} not found\",invalidDate:\"Invalid {0} date\",invalidMonth:\"Invalid {0} month\",invalidYear:\"Invalid {0} year\",differentCalendars:\"Cannot mix {0} and {1} dates\"},this.local=this.regionalOptions[\"\"],this.calendars={},this._localCals={}}function a(t,e,n,r){if(this._calendar=t,this._year=e,this._month=n,this._day=r,0===this._calendar._validateLevel&&!this._calendar.isValid(this._year,this._month,this._day))throw(c.local.invalidDate||c.regionalOptions[\"\"].invalidDate).replace(/\\{0\\}/,this._calendar.local.name)}function o(t,e){return\"000000\".substring(0,e-(t=\"\"+t).length)+t}function s(){this.shortYearCutoff=\"+10\"}function l(t){this.local=this.regionalOptions[t]||this.regionalOptions[\"\"]}r(i.prototype,{instance:function(t,e){t=(t||\"gregorian\").toLowerCase();var n=this._localCals[t+\"-\"+(e=e||\"\")];if(!n&&this.calendars[t]&&(n=new this.calendars[t](e),this._localCals[t+\"-\"+e]=n),!n)throw(this.local.invalidCalendar||this.regionalOptions[\"\"].invalidCalendar).replace(/\\{0\\}/,t);return n},newDate:function(t,e,n,r,i){return(r=(null!=t&&t.year?t.calendar():\"string\"==typeof r?this.instance(r,i):r)||this.instance()).newDate(t,e,n)},substituteDigits:function(t){return function(e){return(e+\"\").replace(/[0-9]/g,(function(e){return t[e]}))}},substituteChineseDigits:function(t,e){return function(n){for(var r=\"\",i=0;n>0;){var a=n%10;r=(0===a?\"\":t[a]+e[i])+r,i++,n=Math.floor(n/10)}return 0===r.indexOf(t[1]+e[1])&&(r=r.substr(1)),r||t[0]}}}),r(a.prototype,{newDate:function(t,e,n){return this._calendar.newDate(null==t?this:t,e,n)},year:function(t){return 0===arguments.length?this._year:this.set(t,\"y\")},month:function(t){return 0===arguments.length?this._month:this.set(t,\"m\")},day:function(t){return 0===arguments.length?this._day:this.set(t,\"d\")},date:function(t,e,n){if(!this._calendar.isValid(t,e,n))throw(c.local.invalidDate||c.regionalOptions[\"\"].invalidDate).replace(/\\{0\\}/,this._calendar.local.name);return this._year=t,this._month=e,this._day=n,this},leapYear:function(){return this._calendar.leapYear(this)},epoch:function(){return this._calendar.epoch(this)},formatYear:function(){return this._calendar.formatYear(this)},monthOfYear:function(){return this._calendar.monthOfYear(this)},weekOfYear:function(){return this._calendar.weekOfYear(this)},daysInYear:function(){return this._calendar.daysInYear(this)},dayOfYear:function(){return this._calendar.dayOfYear(this)},daysInMonth:function(){return this._calendar.daysInMonth(this)},dayOfWeek:function(){return this._calendar.dayOfWeek(this)},weekDay:function(){return this._calendar.weekDay(this)},extraInfo:function(){return this._calendar.extraInfo(this)},add:function(t,e){return this._calendar.add(this,t,e)},set:function(t,e){return this._calendar.set(this,t,e)},compareTo:function(t){if(this._calendar.name!==t._calendar.name)throw(c.local.differentCalendars||c.regionalOptions[\"\"].differentCalendars).replace(/\\{0\\}/,this._calendar.local.name).replace(/\\{1\\}/,t._calendar.local.name);var e=this._year!==t._year?this._year-t._year:this._month!==t._month?this.monthOfYear()-t.monthOfYear():this._day-t._day;return 0===e?0:e<0?-1:1},calendar:function(){return this._calendar},toJD:function(){return this._calendar.toJD(this)},fromJD:function(t){return this._calendar.fromJD(t)},toJSDate:function(){return this._calendar.toJSDate(this)},fromJSDate:function(t){return this._calendar.fromJSDate(t)},toString:function(){return(this.year()<0?\"-\":\"\")+o(Math.abs(this.year()),4)+\"-\"+o(this.month(),2)+\"-\"+o(this.day(),2)}}),r(s.prototype,{_validateLevel:0,newDate:function(t,e,n){return null==t?this.today():(t.year&&(this._validate(t,e,n,c.local.invalidDate||c.regionalOptions[\"\"].invalidDate),n=t.day(),e=t.month(),t=t.year()),new a(this,t,e,n))},today:function(){return this.fromJSDate(new Date)},epoch:function(t){return this._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[\"\"].invalidYear).year()<0?this.local.epochs[0]:this.local.epochs[1]},formatYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[\"\"].invalidYear);return(e.year()<0?\"-\":\"\")+o(Math.abs(e.year()),4)},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[\"\"].invalidYear),12},monthOfYear:function(t,e){var n=this._validate(t,e,this.minDay,c.local.invalidMonth||c.regionalOptions[\"\"].invalidMonth);return(n.month()+this.monthsInYear(n)-this.firstMonth)%this.monthsInYear(n)+this.minMonth},fromMonthOfYear:function(t,e){var n=(e+this.firstMonth-2*this.minMonth)%this.monthsInYear(t)+this.minMonth;return this._validate(t,n,this.minDay,c.local.invalidMonth||c.regionalOptions[\"\"].invalidMonth),n},daysInYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[\"\"].invalidYear);return this.leapYear(e)?366:365},dayOfYear:function(t,e,n){var r=this._validate(t,e,n,c.local.invalidDate||c.regionalOptions[\"\"].invalidDate);return r.toJD()-this.newDate(r.year(),this.fromMonthOfYear(r.year(),this.minMonth),this.minDay).toJD()+1},daysInWeek:function(){return 7},dayOfWeek:function(t,e,n){var r=this._validate(t,e,n,c.local.invalidDate||c.regionalOptions[\"\"].invalidDate);return(Math.floor(this.toJD(r))+2)%this.daysInWeek()},extraInfo:function(t,e,n){return this._validate(t,e,n,c.local.invalidDate||c.regionalOptions[\"\"].invalidDate),{}},add:function(t,e,n){return this._validate(t,this.minMonth,this.minDay,c.local.invalidDate||c.regionalOptions[\"\"].invalidDate),this._correctAdd(t,this._add(t,e,n),e,n)},_add:function(t,e,n){if(this._validateLevel++,\"d\"===n||\"w\"===n){var r=t.toJD()+e*(\"w\"===n?this.daysInWeek():1),i=t.calendar().fromJD(r);return this._validateLevel--,[i.year(),i.month(),i.day()]}try{var a=t.year()+(\"y\"===n?e:0),o=t.monthOfYear()+(\"m\"===n?e:0),s=(i=t.day(),function(t){for(;o<t.minMonth;)a--,o+=t.monthsInYear(a);for(var e=t.monthsInYear(a);o>e-1+t.minMonth;)a++,o-=e,e=t.monthsInYear(a)});\"y\"===n?(t.month()!==this.fromMonthOfYear(a,o)&&(o=this.newDate(a,t.month(),this.minDay).monthOfYear()),o=Math.min(o,this.monthsInYear(a)),i=Math.min(i,this.daysInMonth(a,this.fromMonthOfYear(a,o)))):\"m\"===n&&(s(this),i=Math.min(i,this.daysInMonth(a,this.fromMonthOfYear(a,o))));var l=[a,this.fromMonthOfYear(a,o),i];return this._validateLevel--,l}catch(c){throw this._validateLevel--,c}},_correctAdd:function(t,e,n,r){if(!(this.hasYearZero||\"y\"!==r&&\"m\"!==r||0!==e[0]&&t.year()>0==e[0]>0)){var i={y:[1,1,\"y\"],m:[1,this.monthsInYear(-1),\"m\"],w:[this.daysInWeek(),this.daysInYear(-1),\"d\"],d:[1,this.daysInYear(-1),\"d\"]}[r];e=this._add(t,n*i[0]+(n<0?-1:1)*i[1],i[2])}return t.date(e[0],e[1],e[2])},set:function(t,e,n){this._validate(t,this.minMonth,this.minDay,c.local.invalidDate||c.regionalOptions[\"\"].invalidDate);var r=\"y\"===n?e:t.year(),i=\"m\"===n?e:t.month(),a=\"d\"===n?e:t.day();return\"y\"!==n&&\"m\"!==n||(a=Math.min(a,this.daysInMonth(r,i))),t.date(r,i,a)},isValid:function(t,e,n){this._validateLevel++;var r=this.hasYearZero||0!==t;if(r){var i=this.newDate(t,e,this.minDay);r=e>=this.minMonth&&e-this.minMonth<this.monthsInYear(i)&&n>=this.minDay&&n-this.minDay<this.daysInMonth(i)}return this._validateLevel--,r},toJSDate:function(t,e,n){var r=this._validate(t,e,n,c.local.invalidDate||c.regionalOptions[\"\"].invalidDate);return c.instance().fromJD(this.toJD(r)).toJSDate()},fromJSDate:function(t){return this.fromJD(c.instance().fromJSDate(t).toJD())},_validate:function(t,e,n,r){if(t.year){if(0===this._validateLevel&&this.name!==t.calendar().name)throw(c.local.differentCalendars||c.regionalOptions[\"\"].differentCalendars).replace(/\\{0\\}/,this.local.name).replace(/\\{1\\}/,t.calendar().local.name);return t}try{if(this._validateLevel++,1===this._validateLevel&&!this.isValid(t,e,n))throw r.replace(/\\{0\\}/,this.local.name);var i=this.newDate(t,e,n);return this._validateLevel--,i}catch(a){throw this._validateLevel--,a}}}),r(l.prototype=new s,{name:\"Gregorian\",jdEpoch:1721425.5,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Gregorian\",epochs:[\"BCE\",\"CE\"],monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"mm/dd/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[\"\"].invalidYear);return(t=e.year()+(e.year()<0?1:0))%4==0&&(t%100!=0||t%400==0)},weekOfYear:function(t,e,n){var r=this.newDate(t,e,n);return r.add(4-(r.dayOfWeek()||7),\"d\"),Math.floor((r.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var n=this._validate(t,e,this.minDay,c.local.invalidMonth||c.regionalOptions[\"\"].invalidMonth);return this.daysPerMonth[n.month()-1]+(2===n.month()&&this.leapYear(n.year())?1:0)},weekDay:function(t,e,n){return(this.dayOfWeek(t,e,n)||7)<6},toJD:function(t,e,n){var r=this._validate(t,e,n,c.local.invalidDate||c.regionalOptions[\"\"].invalidDate);t=r.year(),e=r.month(),n=r.day(),t<0&&t++,e<3&&(e+=12,t--);var i=Math.floor(t/100),a=2-i+Math.floor(i/4);return Math.floor(365.25*(t+4716))+Math.floor(30.6001*(e+1))+n+a-1524.5},fromJD:function(t){var e=Math.floor(t+.5),n=Math.floor((e-1867216.25)/36524.25),r=1524+(n=e+1+n-Math.floor(n/4)),i=Math.floor((r-122.1)/365.25),a=Math.floor(365.25*i),o=Math.floor((r-a)/30.6001),s=r-a-Math.floor(30.6001*o),l=o-(o>13.5?13:1),c=i-(l>2.5?4716:4715);return c<=0&&c--,this.newDate(c,l,s)},toJSDate:function(t,e,n){var r=this._validate(t,e,n,c.local.invalidDate||c.regionalOptions[\"\"].invalidDate),i=new Date(r.year(),r.month()-1,r.day());return i.setHours(0),i.setMinutes(0),i.setSeconds(0),i.setMilliseconds(0),i.setHours(i.getHours()>12?i.getHours()+2:0),i},fromJSDate:function(t){return this.newDate(t.getFullYear(),t.getMonth()+1,t.getDate())}});var c=e.exports=new i;c.cdate=a,c.baseCalendar=s,c.calendars.gregorian=l},{\"object-assign\":499}],622:[function(t,e,n){var r=t(\"object-assign\"),i=t(\"./main\");r(i.regionalOptions[\"\"],{invalidArguments:\"Invalid arguments\",invalidFormat:\"Cannot format a date from another calendar\",missingNumberAt:\"Missing number at position {0}\",unknownNameAt:\"Unknown name at position {0}\",unexpectedLiteralAt:\"Unexpected literal at position {0}\",unexpectedText:\"Additional text found at end\"}),i.local=i.regionalOptions[\"\"],r(i.cdate.prototype,{formatDate:function(t,e){return\"string\"!=typeof t&&(e=t,t=\"\"),this._calendar.formatDate(t||\"\",this,e)}}),r(i.baseCalendar.prototype,{UNIX_EPOCH:i.instance().newDate(1970,1,1).toJD(),SECS_PER_DAY:86400,TICKS_EPOCH:i.instance().jdEpoch,TICKS_PER_DAY:864e9,ATOM:\"yyyy-mm-dd\",COOKIE:\"D, dd M yyyy\",FULL:\"DD, MM d, yyyy\",ISO_8601:\"yyyy-mm-dd\",JULIAN:\"J\",RFC_822:\"D, d M yy\",RFC_850:\"DD, dd-M-yy\",RFC_1036:\"D, d M yy\",RFC_1123:\"D, d M yyyy\",RFC_2822:\"D, d M yyyy\",RSS:\"D, d M yy\",TICKS:\"!\",TIMESTAMP:\"@\",W3C:\"yyyy-mm-dd\",formatDate:function(t,e,n){if(\"string\"!=typeof t&&(n=e,e=t,t=\"\"),!e)return\"\";if(e.calendar()!==this)throw i.local.invalidFormat||i.regionalOptions[\"\"].invalidFormat;t=t||this.local.dateFormat;for(var r=(n=n||{}).dayNamesShort||this.local.dayNamesShort,a=n.dayNames||this.local.dayNames,o=n.monthNumbers||this.local.monthNumbers,s=n.monthNamesShort||this.local.monthNamesShort,l=n.monthNames||this.local.monthNames,c=function(e,n){for(var r=1;v+r<t.length&&t.charAt(v+r)===e;)r++;return v+=r-1,Math.floor(r/(n||1))>1},u=function(t,e,n,r){var i=\"\"+e;if(c(t,r))for(;i.length<n;)i=\"0\"+i;return i},h=this,d=function(t){return\"function\"==typeof o?o.call(h,t,c(\"m\")):m(u(\"m\",t.month(),2))},f=function(t,e){return e?\"function\"==typeof l?l.call(h,t):l[t.month()-h.minMonth]:\"function\"==typeof s?s.call(h,t):s[t.month()-h.minMonth]},p=this.local.digits,m=function(t){return n.localNumbers&&p?p(t):t},g=\"\",y=!1,v=0;v<t.length;v++)if(y)\"'\"!==t.charAt(v)||c(\"'\")?g+=t.charAt(v):y=!1;else switch(t.charAt(v)){case\"d\":g+=m(u(\"d\",e.day(),2));break;case\"D\":g+=(\"D\",_=e.dayOfWeek(),b=r,x=a,c(\"D\")?x[_]:b[_]);break;case\"o\":g+=u(\"o\",e.dayOfYear(),3);break;case\"w\":g+=u(\"w\",e.weekOfYear(),2);break;case\"m\":g+=d(e);break;case\"M\":g+=f(e,c(\"M\"));break;case\"y\":g+=c(\"y\",2)?e.year():(e.year()%100<10?\"0\":\"\")+e.year()%100;break;case\"Y\":c(\"Y\",2),g+=e.formatYear();break;case\"J\":g+=e.toJD();break;case\"@\":g+=(e.toJD()-this.UNIX_EPOCH)*this.SECS_PER_DAY;break;case\"!\":g+=(e.toJD()-this.TICKS_EPOCH)*this.TICKS_PER_DAY;break;case\"'\":c(\"'\")?g+=\"'\":y=!0;break;default:g+=t.charAt(v)}var _,b,x;return g},parseDate:function(t,e,n){if(null==e)throw i.local.invalidArguments||i.regionalOptions[\"\"].invalidArguments;if(\"\"===(e=\"object\"==typeof e?e.toString():e+\"\"))return null;t=t||this.local.dateFormat;var r=(n=n||{}).shortYearCutoff||this.shortYearCutoff;r=\"string\"!=typeof r?r:this.today().year()%100+parseInt(r,10);for(var a=n.dayNamesShort||this.local.dayNamesShort,o=n.dayNames||this.local.dayNames,s=n.parseMonth||this.local.parseMonth,l=n.monthNumbers||this.local.monthNumbers,c=n.monthNamesShort||this.local.monthNamesShort,u=n.monthNames||this.local.monthNames,h=-1,d=-1,f=-1,p=-1,m=-1,g=!1,y=!1,v=function(e,n){for(var r=1;S+r<t.length&&t.charAt(S+r)===e;)r++;return S+=r-1,Math.floor(r/(n||1))>1},_=function(t,n){var r=v(t,n),a=[2,3,r?4:2,r?4:2,10,11,20][\"oyYJ@!\".indexOf(t)+1],o=new RegExp(\"^-?\\\\d{1,\"+a+\"}\"),s=e.substring(T).match(o);if(!s)throw(i.local.missingNumberAt||i.regionalOptions[\"\"].missingNumberAt).replace(/\\{0\\}/,T);return T+=s[0].length,parseInt(s[0],10)},b=this,x=function(){if(\"function\"==typeof l){v(\"m\");var t=l.call(b,e.substring(T));return T+=t.length,t}return _(\"m\")},w=function(t,n,r,a){for(var o=v(t,a)?r:n,s=0;s<o.length;s++)if(e.substr(T,o[s].length).toLowerCase()===o[s].toLowerCase())return T+=o[s].length,s+b.minMonth;throw(i.local.unknownNameAt||i.regionalOptions[\"\"].unknownNameAt).replace(/\\{0\\}/,T)},k=function(){if(\"function\"==typeof u){var t=v(\"M\")?u.call(b,e.substring(T)):c.call(b,e.substring(T));return T+=t.length,t}return w(\"M\",c,u)},M=function(){if(e.charAt(T)!==t.charAt(S))throw(i.local.unexpectedLiteralAt||i.regionalOptions[\"\"].unexpectedLiteralAt).replace(/\\{0\\}/,T);T++},T=0,S=0;S<t.length;S++)if(y)\"'\"!==t.charAt(S)||v(\"'\")?M():y=!1;else switch(t.charAt(S)){case\"d\":p=_(\"d\");break;case\"D\":w(\"D\",a,o);break;case\"o\":m=_(\"o\");break;case\"w\":_(\"w\");break;case\"m\":f=x();break;case\"M\":f=k();break;case\"y\":var A=S;g=!v(\"y\",2),S=A,d=_(\"y\",2);break;case\"Y\":d=_(\"Y\",2);break;case\"J\":h=_(\"J\")+.5,\".\"===e.charAt(T)&&(T++,_(\"J\"));break;case\"@\":h=_(\"@\")/this.SECS_PER_DAY+this.UNIX_EPOCH;break;case\"!\":h=_(\"!\")/this.TICKS_PER_DAY+this.TICKS_EPOCH;break;case\"*\":T=e.length;break;case\"'\":v(\"'\")?M():y=!0;break;default:M()}if(T<e.length)throw i.local.unexpectedText||i.regionalOptions[\"\"].unexpectedText;if(-1===d?d=this.today().year():d<100&&g&&(d+=-1===r?1900:this.today().year()-this.today().year()%100-(d<=r?0:100)),\"string\"==typeof f&&(f=s.call(this,d,f)),m>-1){p=m;for(var L=this.daysInMonth(d,f=1);p>L;L=this.daysInMonth(d,f))f++,p-=L}return h>-1?this.fromJD(h):this.newDate(d,f,p)},determineDate:function(t,e,n,r,i){n&&\"object\"!=typeof n&&(i=r,r=n,n=null),\"string\"!=typeof r&&(i=r,r=\"\");var a=this;return e=e?e.newDate():null,null==t?e:\"string\"==typeof t?function(t){try{return a.parseDate(r,t,i)}catch(l){}for(var e=((t=t.toLowerCase()).match(/^c/)&&n?n.newDate():null)||a.today(),o=/([+-]?[0-9]+)\\s*(d|w|m|y)?/g,s=o.exec(t);s;)e.add(parseInt(s[1],10),s[2]||\"d\"),s=o.exec(t);return e}(t):\"number\"==typeof t?isNaN(t)||t===1/0||t===-1/0?e:a.today().add(t,\"d\"):a.newDate(t)}})},{\"./main\":621,\"object-assign\":499}],623:[function(t,e,n){e.exports=t(\"cwise-compiler\")({args:[\"array\",{offset:[1],array:0},\"scalar\",\"scalar\",\"index\"],pre:{body:\"{}\",args:[],thisVars:[],localVars:[]},post:{body:\"{}\",args:[],thisVars:[],localVars:[]},body:{body:\"{\\n        var _inline_1_da = _inline_1_arg0_ - _inline_1_arg3_\\n        var _inline_1_db = _inline_1_arg1_ - _inline_1_arg3_\\n        if((_inline_1_da >= 0) !== (_inline_1_db >= 0)) {\\n          _inline_1_arg2_.push(_inline_1_arg4_[0] + 0.5 + 0.5 * (_inline_1_da + _inline_1_db) / (_inline_1_da - _inline_1_db))\\n        }\\n      }\",args:[{name:\"_inline_1_arg0_\",lvalue:!1,rvalue:!0,count:1},{name:\"_inline_1_arg1_\",lvalue:!1,rvalue:!0,count:1},{name:\"_inline_1_arg2_\",lvalue:!1,rvalue:!0,count:1},{name:\"_inline_1_arg3_\",lvalue:!1,rvalue:!0,count:2},{name:\"_inline_1_arg4_\",lvalue:!1,rvalue:!0,count:1}],thisVars:[],localVars:[\"_inline_1_da\",\"_inline_1_db\"]},funcName:\"zeroCrossings\"})},{\"cwise-compiler\":151}],624:[function(t,e,n){\"use strict\";e.exports=function(t,e){var n=[];return e=+e||0,r(t.hi(t.shape[0]-1),n,e),n};var r=t(\"./lib/zc-core\")},{\"./lib/zc-core\":623}],625:[function(t,e,n){\"use strict\";e.exports=[{path:\"\",backoff:0},{path:\"M-2.4,-3V3L0.6,0Z\",backoff:.6},{path:\"M-3.7,-2.5V2.5L1.3,0Z\",backoff:1.3},{path:\"M-4.45,-3L-1.65,-0.2V0.2L-4.45,3L1.55,0Z\",backoff:1.55},{path:\"M-2.2,-2.2L-0.2,-0.2V0.2L-2.2,2.2L-1.4,3L1.6,0L-1.4,-3Z\",backoff:1.6},{path:\"M-4.4,-2.1L-0.6,-0.2V0.2L-4.4,2.1L-4,3L2,0L-4,-3Z\",backoff:2},{path:\"M2,0A2,2 0 1,1 0,-2A2,2 0 0,1 2,0Z\",backoff:0,noRotate:!0},{path:\"M2,2V-2H-2V2Z\",backoff:0,noRotate:!0}]},{}],626:[function(t,e,n){\"use strict\";var r=t(\"./arrow_paths\"),i=t(\"../../plots/font_attributes\"),a=t(\"../../plots/cartesian/constants\"),o=t(\"../../plot_api/plot_template\").templatedArray;t(\"../../constants/axis_placeable_objects\"),e.exports=o(\"annotation\",{visible:{valType:\"boolean\",dflt:!0,editType:\"calc+arraydraw\"},text:{valType:\"string\",editType:\"calc+arraydraw\"},textangle:{valType:\"angle\",dflt:0,editType:\"calc+arraydraw\"},font:i({editType:\"calc+arraydraw\",colorEditType:\"arraydraw\"}),width:{valType:\"number\",min:1,dflt:null,editType:\"calc+arraydraw\"},height:{valType:\"number\",min:1,dflt:null,editType:\"calc+arraydraw\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,editType:\"arraydraw\"},align:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"],dflt:\"center\",editType:\"arraydraw\"},valign:{valType:\"enumerated\",values:[\"top\",\"middle\",\"bottom\"],dflt:\"middle\",editType:\"arraydraw\"},bgcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"arraydraw\"},bordercolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"arraydraw\"},borderpad:{valType:\"number\",min:0,dflt:1,editType:\"calc+arraydraw\"},borderwidth:{valType:\"number\",min:0,dflt:1,editType:\"calc+arraydraw\"},showarrow:{valType:\"boolean\",dflt:!0,editType:\"calc+arraydraw\"},arrowcolor:{valType:\"color\",editType:\"arraydraw\"},arrowhead:{valType:\"integer\",min:0,max:r.length,dflt:1,editType:\"arraydraw\"},startarrowhead:{valType:\"integer\",min:0,max:r.length,dflt:1,editType:\"arraydraw\"},arrowside:{valType:\"flaglist\",flags:[\"end\",\"start\"],extras:[\"none\"],dflt:\"end\",editType:\"arraydraw\"},arrowsize:{valType:\"number\",min:.3,dflt:1,editType:\"calc+arraydraw\"},startarrowsize:{valType:\"number\",min:.3,dflt:1,editType:\"calc+arraydraw\"},arrowwidth:{valType:\"number\",min:.1,editType:\"calc+arraydraw\"},standoff:{valType:\"number\",min:0,dflt:0,editType:\"calc+arraydraw\"},startstandoff:{valType:\"number\",min:0,dflt:0,editType:\"calc+arraydraw\"},ax:{valType:\"any\",editType:\"calc+arraydraw\"},ay:{valType:\"any\",editType:\"calc+arraydraw\"},axref:{valType:\"enumerated\",dflt:\"pixel\",values:[\"pixel\",a.idRegex.x.toString()],editType:\"calc\"},ayref:{valType:\"enumerated\",dflt:\"pixel\",values:[\"pixel\",a.idRegex.y.toString()],editType:\"calc\"},xref:{valType:\"enumerated\",values:[\"paper\",a.idRegex.x.toString()],editType:\"calc\"},x:{valType:\"any\",editType:\"calc+arraydraw\"},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"auto\",editType:\"calc+arraydraw\"},xshift:{valType:\"number\",dflt:0,editType:\"calc+arraydraw\"},yref:{valType:\"enumerated\",values:[\"paper\",a.idRegex.y.toString()],editType:\"calc\"},y:{valType:\"any\",editType:\"calc+arraydraw\"},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],dflt:\"auto\",editType:\"calc+arraydraw\"},yshift:{valType:\"number\",dflt:0,editType:\"calc+arraydraw\"},clicktoshow:{valType:\"enumerated\",values:[!1,\"onoff\",\"onout\"],dflt:!1,editType:\"arraydraw\"},xclick:{valType:\"any\",editType:\"arraydraw\"},yclick:{valType:\"any\",editType:\"arraydraw\"},hovertext:{valType:\"string\",editType:\"arraydraw\"},hoverlabel:{bgcolor:{valType:\"color\",editType:\"arraydraw\"},bordercolor:{valType:\"color\",editType:\"arraydraw\"},font:i({editType:\"arraydraw\"}),editType:\"arraydraw\"},captureevents:{valType:\"boolean\",editType:\"arraydraw\"},editType:\"calc\",_deprecated:{ref:{valType:\"string\",editType:\"calc\"}}})},{\"../../constants/axis_placeable_objects\":746,\"../../plot_api/plot_template\":817,\"../../plots/cartesian/constants\":834,\"../../plots/font_attributes\":856,\"./arrow_paths\":625}],627:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../plots/cartesian/axes\"),a=t(\"./draw\").draw;function o(t){r.filterVisible(t._fullLayout.annotations).forEach((function(e){var n=i.getFromId(t,e.xref),r=i.getFromId(t,e.yref),a=i.getRefType(e.xref),o=i.getRefType(e.yref);e._extremes={},\"range\"===a&&s(e,n),\"range\"===o&&s(e,r)}))}function s(t,e){var n,r=e._id,a=r.charAt(0),o=t[a],s=t[\"a\"+a],l=t[\"_\"+a+\"padplus\"],c=t[\"_\"+a+\"padminus\"],u={x:1,y:-1}[a]*t[a+\"shift\"],h=3*t.arrowsize*t.arrowwidth||0,d=h+u,f=h-u,p=3*t.startarrowsize*t.arrowwidth||0,m=p+u,g=p-u;if(t[\"a\"+a+\"ref\"]===t[a+\"ref\"]){var y=i.findExtremes(e,[e.r2c(o)],{ppadplus:d,ppadminus:f}),v=i.findExtremes(e,[e.r2c(s)],{ppadplus:Math.max(l,m),ppadminus:Math.max(c,g)});n={min:[y.min[0],v.min[0]],max:[y.max[0],v.max[0]]}}else m=s?m+s:m,g=s?g-s:g,n=i.findExtremes(e,[e.r2c(o)],{ppadplus:Math.max(l,d,m),ppadminus:Math.max(c,f,g)});t._extremes[r]=n}e.exports=function(t){if(r.filterVisible(t._fullLayout.annotations).length&&t._fullData.length)return r.syncOrAsync([a,o],t)}},{\"../../lib\":778,\"../../plots/cartesian/axes\":828,\"./draw\":632}],628:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../registry\"),a=t(\"../../plot_api/plot_template\").arrayEditor;function o(t,e){var n,r,i,a,o,l,c,u=t._fullLayout.annotations,h=[],d=[],f=[],p=(e||[]).length;for(n=0;n<u.length;n++)if(a=(i=u[n]).clicktoshow){for(r=0;r<p;r++)if(c=(o=e[r]).yaxis,(l=o.xaxis)._id===i.xref&&c._id===i.yref&&l.d2r(o.x)===s(i._xclick,l)&&c.d2r(o.y)===s(i._yclick,c)){(i.visible?\"onout\"===a?d:f:h).push(n);break}r===p&&i.visible&&\"onout\"===a&&d.push(n)}return{on:h,off:d,explicitOff:f}}function s(t,e){return\"log\"===e.type?e.l2r(t):e.d2r(t)}e.exports={hasClickToShow:function(t,e){var n=o(t,e);return n.on.length>0||n.explicitOff.length>0},onClick:function(t,e){var n,s,l=o(t,e),c=l.on,u=l.off.concat(l.explicitOff),h={},d=t._fullLayout.annotations;if(c.length||u.length){for(n=0;n<c.length;n++)(s=a(t.layout,\"annotations\",d[c[n]])).modifyItem(\"visible\",!0),r.extendFlat(h,s.getUpdateObj());for(n=0;n<u.length;n++)(s=a(t.layout,\"annotations\",d[u[n]])).modifyItem(\"visible\",!1),r.extendFlat(h,s.getUpdateObj());return i.call(\"update\",t,{},h)}}}},{\"../../lib\":778,\"../../plot_api/plot_template\":817,\"../../registry\":911}],629:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../color\");e.exports=function(t,e,n,a){a(\"opacity\");var o=a(\"bgcolor\"),s=a(\"bordercolor\"),l=i.opacity(s);a(\"borderpad\");var c=a(\"borderwidth\"),u=a(\"showarrow\");if(a(\"text\",u?\" \":n._dfltTitle.annotation),a(\"textangle\"),r.coerceFont(a,\"font\",n.font),a(\"width\"),a(\"align\"),a(\"height\")&&a(\"valign\"),u){var h,d,f=a(\"arrowside\");-1!==f.indexOf(\"end\")&&(h=a(\"arrowhead\"),d=a(\"arrowsize\")),-1!==f.indexOf(\"start\")&&(a(\"startarrowhead\",h),a(\"startarrowsize\",d)),a(\"arrowcolor\",l?e.bordercolor:i.defaultLine),a(\"arrowwidth\",2*(l&&c||1)),a(\"standoff\"),a(\"startstandoff\")}var p=a(\"hovertext\"),m=n.hoverlabel||{};if(p){var g=a(\"hoverlabel.bgcolor\",m.bgcolor||(i.opacity(o)?i.rgb(o):i.defaultLine)),y=a(\"hoverlabel.bordercolor\",m.bordercolor||i.contrast(g));r.coerceFont(a,\"hoverlabel.font\",{family:m.font.family,size:m.font.size,color:m.font.color||y})}a(\"captureevents\",!!p)}},{\"../../lib\":778,\"../color\":643}],630:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../lib/to_log_range\");e.exports=function(t,e,n,a){e=e||{};var o=\"log\"===n&&\"linear\"===e.type;if(o||\"linear\"===n&&\"log\"===e.type)for(var s,l,c=t._fullLayout.annotations,u=e._id.charAt(0),h=0;h<c.length;h++)l=\"annotations[\"+h+\"].\",(s=c[h])[u+\"ref\"]===e._id&&d(u),s[\"a\"+u+\"ref\"]===e._id&&d(\"a\"+u);function d(t){var n=s[t],c=null;c=o?i(n,e.range):Math.pow(10,n),r(c)||(c=null),a(l+t,c)}}},{\"../../lib/to_log_range\":805,\"fast-isnumeric\":241}],631:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../plots/cartesian/axes\"),a=t(\"../../plots/array_container_defaults\"),o=t(\"./common_defaults\"),s=t(\"./attributes\");function l(t,e,n){function a(n,i){return r.coerce(t,e,s,n,i)}var l=a(\"visible\"),c=a(\"clicktoshow\");if(l||c){o(t,e,n,a);for(var u=e.showarrow,h=[\"x\",\"y\"],d=[-10,-30],f={_fullLayout:n},p=0;p<2;p++){var m=h[p],g=i.coerceRef(t,e,f,m,\"\",\"paper\");if(\"paper\"!==g&&i.getFromId(f,g)._annIndices.push(e._index),i.coercePosition(e,f,a,g,m,.5),u){var y=\"a\"+m,v=i.coerceRef(t,e,f,y,\"pixel\",[\"pixel\",\"paper\"]);\"pixel\"!==v&&v!==g&&(v=e[y]=\"pixel\"),i.coercePosition(e,f,a,v,y,\"pixel\"===v?d[p]:.4)}a(m+\"anchor\"),a(m+\"shift\")}if(r.noneOrAll(t,e,[\"x\",\"y\"]),u&&r.noneOrAll(t,e,[\"ax\",\"ay\"]),c){var _=a(\"xclick\"),b=a(\"yclick\");e._xclick=void 0===_?e.x:i.cleanPosition(_,f,e.xref),e._yclick=void 0===b?e.y:i.cleanPosition(b,f,e.yref)}}}e.exports=function(t,e){a(t,e,{name:\"annotations\",handleItemDefaults:l})}},{\"../../lib\":778,\"../../plots/array_container_defaults\":823,\"../../plots/cartesian/axes\":828,\"./attributes\":626,\"./common_defaults\":629}],632:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../registry\"),a=t(\"../../plots/plots\"),o=t(\"../../lib\"),s=o.strTranslate,l=t(\"../../plots/cartesian/axes\"),c=t(\"../color\"),u=t(\"../drawing\"),h=t(\"../fx\"),d=t(\"../../lib/svg_text_utils\"),f=t(\"../../lib/setcursor\"),p=t(\"../dragelement\"),m=t(\"../../plot_api/plot_template\").arrayEditor,g=t(\"./draw_arrow_head\");function y(t,e){var n=t._fullLayout.annotations[e]||{},r=l.getFromId(t,n.xref),i=l.getFromId(t,n.yref);r&&r.setScale(),i&&i.setScale(),_(t,n,e,!1,r,i)}function v(t,e,n,r,i){var a=i[n],o=i[n+\"ref\"],s=-1!==n.indexOf(\"y\"),c=\"domain\"===l.getRefType(o),u=s?r.h:r.w;return t?c?a+(s?-e:e)/t._length:t.p2r(t.r2p(a)+e):a+(s?-e:e)/u}function _(t,e,n,a,y,_){var b,x,w=t._fullLayout,k=t._fullLayout._size,M=t._context.edits;a?(b=\"annotation-\"+a,x=a+\".annotations\"):(b=\"annotation\",x=\"annotations\");var T=m(t.layout,x,e),S=T.modifyBase,A=T.modifyItem,L=T.getUpdateObj;w._infolayer.selectAll(\".\"+b+'[data-index=\"'+n+'\"]').remove();var C=\"clip\"+w._uid+\"_ann\"+n;if(e._input&&!1!==e.visible){var E={x:{},y:{}},O=+e.textangle||0,D=w._infolayer.append(\"g\").classed(b,!0).attr(\"data-index\",String(n)).style(\"opacity\",e.opacity),I=D.append(\"g\").classed(\"annotation-text-g\",!0),P=M[e.showarrow?\"annotationTail\":\"annotationPosition\"],R=e.captureevents||M.annotationText||P,z=I.append(\"g\").style(\"pointer-events\",R?\"all\":null).call(f,\"pointer\").on(\"click\",(function(){t._dragging=!1,t.emit(\"plotly_clickannotation\",W(r.event))}));e.hovertext&&z.on(\"mouseover\",(function(){var n=e.hoverlabel,r=n.font,i=this.getBoundingClientRect(),a=t.getBoundingClientRect();h.loneHover({x0:i.left-a.left,x1:i.right-a.left,y:(i.top+i.bottom)/2-a.top,text:e.hovertext,color:n.bgcolor,borderColor:n.bordercolor,fontFamily:r.family,fontSize:r.size,fontColor:r.color},{container:w._hoverlayer.node(),outerContainer:w._paper.node(),gd:t})})).on(\"mouseout\",(function(){h.loneUnhover(w._hoverlayer.node())}));var j=e.borderwidth,F=j+e.borderpad,N=z.append(\"rect\").attr(\"class\",\"bg\").style(\"stroke-width\",j+\"px\").call(c.stroke,e.bordercolor).call(c.fill,e.bgcolor),B=e.width||e.height,Y=w._topclips.selectAll(\"#\"+C).data(B?[0]:[]);Y.enter().append(\"clipPath\").classed(\"annclip\",!0).attr(\"id\",C).append(\"rect\"),Y.exit().remove();var H=e.font,V=w._meta?o.templateString(e.text,w._meta):e.text,U=z.append(\"text\").classed(\"annotation-text\",!0).text(V);M.annotationText?U.call(d.makeEditable,{delegate:z,gd:t}).call(q).on(\"edit\",(function(n){e.text=n,this.call(q),A(\"text\",n),y&&y.autorange&&S(y._name+\".autorange\",!0),_&&_.autorange&&S(_._name+\".autorange\",!0),i.call(\"_guiRelayout\",t,L())})):U.call(q)}else r.selectAll(\"#\"+C).remove();function W(t){var r={index:n,annotation:e._input,fullAnnotation:e,event:t};return a&&(r.subplotId=a),r}function q(n){return n.call(u.font,H).attr({\"text-anchor\":{left:\"start\",right:\"end\"}[e.align]||\"middle\"}),d.convertToTspans(n,t,G),n}function G(){var n=U.selectAll(\"a\");1===n.size()&&n.text()===U.text()&&z.insert(\"a\",\":first-child\").attr({\"xlink:xlink:href\":n.attr(\"xlink:href\"),\"xlink:xlink:show\":n.attr(\"xlink:show\")}).style({cursor:\"pointer\"}).node().appendChild(N.node());var r=z.select(\".annotation-text-math-group\"),h=!r.empty(),m=u.bBox((h?r:U).node()),b=m.width,x=m.height,T=e.width||b,R=e.height||x,H=Math.round(T+2*F),V=Math.round(R+2*F);function q(t,e){return\"auto\"===e&&(e=t<1/3?\"left\":t>2/3?\"right\":\"center\"),{center:0,middle:0,left:.5,bottom:-.5,right:-.5,top:.5}[e]}for(var G=!1,X=[\"x\",\"y\"],Z=0;Z<X.length;Z++){var J,K,$,Q,tt,et=X[Z],nt=e[et+\"ref\"]||et,rt=e[\"a\"+et+\"ref\"],it={x:y,y:_}[et],at=(O+(\"x\"===et?0:-90))*Math.PI/180,ot=H*Math.cos(at),st=V*Math.sin(at),lt=Math.abs(ot)+Math.abs(st),ct=e[et+\"anchor\"],ut=e[et+\"shift\"]*(\"x\"===et?1:-1),ht=E[et],dt=l.getRefType(nt);if(it&&\"domain\"!==dt){var ft=it.r2fraction(e[et]);(ft<0||ft>1)&&(rt===nt?((ft=it.r2fraction(e[\"a\"+et]))<0||ft>1)&&(G=!0):G=!0),J=it._offset+it.r2p(e[et]),Q=.5}else{var pt=\"domain\"===dt;\"x\"===et?($=e[et],J=pt?it._offset+it._length*$:J=k.l+k.w*$):($=1-e[et],J=pt?it._offset+it._length*$:J=k.t+k.h*$),Q=e.showarrow?.5:$}if(e.showarrow){ht.head=J;var mt=e[\"a\"+et];if(tt=ot*q(.5,e.xanchor)-st*q(.5,e.yanchor),rt===nt){var gt=l.getRefType(rt);\"domain\"===gt?(\"y\"===et&&(mt=1-mt),ht.tail=it._offset+it._length*mt):ht.tail=\"paper\"===gt?\"y\"===et?k.t+k.h*(mt=1-mt):k.l+k.w*mt:it._offset+it.r2p(mt),K=tt}else ht.tail=J+mt,K=tt+mt;ht.text=ht.tail+tt;var yt=w[\"x\"===et?\"width\":\"height\"];if(\"paper\"===nt&&(ht.head=o.constrain(ht.head,1,yt-1)),\"pixel\"===rt){var vt=-Math.max(ht.tail-3,ht.text),_t=Math.min(ht.tail+3,ht.text)-yt;vt>0?(ht.tail+=vt,ht.text+=vt):_t>0&&(ht.tail-=_t,ht.text-=_t)}ht.tail+=ut,ht.head+=ut}else K=tt=lt*q(Q,ct),ht.text=J+tt;ht.text+=ut,tt+=ut,e[\"_\"+et+\"padplus\"]=lt/2+(K+=ut),e[\"_\"+et+\"padminus\"]=lt/2-K,e[\"_\"+et+\"size\"]=lt,e[\"_\"+et+\"shift\"]=tt}if(G)z.remove();else{var bt=0,xt=0;\"left\"!==e.align&&(bt=(T-b)*(\"center\"===e.align?.5:1)),\"top\"!==e.valign&&(xt=(R-x)*(\"middle\"===e.valign?.5:1)),h?r.select(\"svg\").attr({x:F+bt-1,y:F+xt}).call(u.setClipUrl,B?C:null,t):U.call(d.positionText,F+bt-m.left,F+xt-m.top).call(u.setClipUrl,B?C:null,t),Y.select(\"rect\").call(u.setRect,F,F,T,R),N.call(u.setRect,j/2,j/2,H-j,V-j),z.call(u.setTranslate,Math.round(E.x.text-H/2),Math.round(E.y.text-V/2)),I.attr({transform:\"rotate(\"+O+\",\"+E.x.text+\",\"+E.y.text+\")\"});var wt,kt=function(n,r){D.selectAll(\".annotation-arrow-g\").remove();var l=E.x.head,h=E.y.head,d=E.x.tail+n,f=E.y.tail+r,m=E.x.text+n,b=E.y.text+r,x=o.rotationXYMatrix(O,m,b),w=o.apply2DTransform(x),T=o.apply2DTransform2(x),C=+N.attr(\"width\"),P=+N.attr(\"height\"),R=m-.5*C,j=R+C,F=b-.5*P,B=F+P,Y=[[R,F,R,B],[R,B,j,B],[j,B,j,F],[j,F,R,F]].map(T);if(!Y.reduce((function(t,e){return t^!!o.segmentsIntersect(l,h,l+1e6,h+1e6,e[0],e[1],e[2],e[3])}),!1)){Y.forEach((function(t){var e=o.segmentsIntersect(d,f,l,h,t[0],t[1],t[2],t[3]);e&&(d=e.x,f=e.y)}));var H=e.arrowwidth,V=e.arrowcolor,U=e.arrowside,W=D.append(\"g\").style({opacity:c.opacity(V)}).classed(\"annotation-arrow-g\",!0),q=W.append(\"path\").attr(\"d\",\"M\"+d+\",\"+f+\"L\"+l+\",\"+h).style(\"stroke-width\",H+\"px\").call(c.stroke,c.rgb(V));if(g(q,U,e),M.annotationPosition&&q.node().parentNode&&!a){var G=l,X=h;if(e.standoff){var Z=Math.sqrt(Math.pow(l-d,2)+Math.pow(h-f,2));G+=e.standoff*(d-l)/Z,X+=e.standoff*(f-h)/Z}var J,K,$=W.append(\"path\").classed(\"annotation-arrow\",!0).classed(\"anndrag\",!0).classed(\"cursor-move\",!0).attr({d:\"M3,3H-3V-3H3ZM0,0L\"+(d-G)+\",\"+(f-X),transform:s(G,X)}).style(\"stroke-width\",H+6+\"px\").call(c.stroke,\"rgba(0,0,0,0)\").call(c.fill,\"rgba(0,0,0,0)\");p.init({element:$.node(),gd:t,prepFn:function(){var t=u.getTranslate(z);J=t.x,K=t.y,y&&y.autorange&&S(y._name+\".autorange\",!0),_&&_.autorange&&S(_._name+\".autorange\",!0)},moveFn:function(t,n){var r=w(J,K),i=r[0]+t,a=r[1]+n;z.call(u.setTranslate,i,a),A(\"x\",v(y,t,\"x\",k,e)),A(\"y\",v(_,n,\"y\",k,e)),e.axref===e.xref&&A(\"ax\",v(y,t,\"ax\",k,e)),e.ayref===e.yref&&A(\"ay\",v(_,n,\"ay\",k,e)),W.attr(\"transform\",s(t,n)),I.attr({transform:\"rotate(\"+O+\",\"+i+\",\"+a+\")\"})},doneFn:function(){i.call(\"_guiRelayout\",t,L());var e=document.querySelector(\".js-notes-box-panel\");e&&e.redraw(e.selectedObj)}})}}};e.showarrow&&kt(0,0),P&&p.init({element:z.node(),gd:t,prepFn:function(){wt=I.attr(\"transform\")},moveFn:function(t,n){var r=\"pointer\";if(e.showarrow)A(\"ax\",e.axref===e.xref?v(y,t,\"ax\",k,e):e.ax+t),A(\"ay\",e.ayref===e.yref?v(_,n,\"ay\",k.w,e):e.ay+n),kt(t,n);else{if(a)return;var i,o;if(y)i=v(y,t,\"x\",k,e);else{var l=e._xsize/k.w;i=p.align(e.x+(e._xshift-e.xshift)/k.w-l/2+t/k.w,l,0,1,e.xanchor)}if(_)o=v(_,n,\"y\",k,e);else{var c=e._ysize/k.h;o=p.align(e.y-(e._yshift+e.yshift)/k.h-c/2-n/k.h,c,0,1,e.yanchor)}A(\"x\",i),A(\"y\",o),y&&_||(r=p.getCursor(y?.5:i,_?.5:o,e.xanchor,e.yanchor))}I.attr({transform:s(t,n)+wt}),f(z,r)},clickFn:function(n,r){e.captureevents&&t.emit(\"plotly_clickannotation\",W(r))},doneFn:function(){f(z),i.call(\"_guiRelayout\",t,L());var e=document.querySelector(\".js-notes-box-panel\");e&&e.redraw(e.selectedObj)}})}}}e.exports={draw:function(t){var e=t._fullLayout;e._infolayer.selectAll(\".annotation\").remove();for(var n=0;n<e.annotations.length;n++)e.annotations[n].visible&&y(t,n);return a.previousPromises(t)},drawOne:y,drawRaw:_}},{\"../../lib\":778,\"../../lib/setcursor\":799,\"../../lib/svg_text_utils\":803,\"../../plot_api/plot_template\":817,\"../../plots/cartesian/axes\":828,\"../../plots/plots\":891,\"../../registry\":911,\"../color\":643,\"../dragelement\":662,\"../drawing\":665,\"../fx\":683,\"./draw_arrow_head\":633,d3:169}],633:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../color\"),a=t(\"./arrow_paths\"),o=t(\"../../lib\"),s=o.strScale,l=o.strRotate,c=o.strTranslate;e.exports=function(t,e,n){var o,u,h,d,f=t.node(),p=a[n.arrowhead||0],m=a[n.startarrowhead||0],g=(n.arrowwidth||1)*(n.arrowsize||1),y=(n.arrowwidth||1)*(n.startarrowsize||1),v=e.indexOf(\"start\")>=0,_=e.indexOf(\"end\")>=0,b=p.backoff*g+n.standoff,x=m.backoff*y+n.startstandoff;if(\"line\"===f.nodeName){o={x:+t.attr(\"x1\"),y:+t.attr(\"y1\")},u={x:+t.attr(\"x2\"),y:+t.attr(\"y2\")};var w=o.x-u.x,k=o.y-u.y;if(d=(h=Math.atan2(k,w))+Math.PI,b&&x&&b+x>Math.sqrt(w*w+k*k))return void P();if(b){if(b*b>w*w+k*k)return void P();var M=b*Math.cos(h),T=b*Math.sin(h);u.x+=M,u.y+=T,t.attr({x2:u.x,y2:u.y})}if(x){if(x*x>w*w+k*k)return void P();var S=x*Math.cos(h),A=x*Math.sin(h);o.x-=S,o.y-=A,t.attr({x1:o.x,y1:o.y})}}else if(\"path\"===f.nodeName){var L=f.getTotalLength(),C=\"\";if(L<b+x)return void P();var E=f.getPointAtLength(0),O=f.getPointAtLength(.1);h=Math.atan2(E.y-O.y,E.x-O.x),o=f.getPointAtLength(Math.min(x,L)),C=\"0px,\"+x+\"px,\";var D=f.getPointAtLength(L),I=f.getPointAtLength(L-.1);d=Math.atan2(D.y-I.y,D.x-I.x),u=f.getPointAtLength(Math.max(0,L-b)),t.style(\"stroke-dasharray\",C+=L-(C?x+b:b)+\"px,\"+L+\"px\")}function P(){t.style(\"stroke-dasharray\",\"0px,100px\")}function R(e,a,o,u){e.path&&(e.noRotate&&(o=0),r.select(f.parentNode).append(\"path\").attr({class:t.attr(\"class\"),d:e.path,transform:c(a.x,a.y)+l(180*o/Math.PI)+s(u)}).style({fill:i.rgb(n.arrowcolor),\"stroke-width\":0}))}v&&R(m,o,h,y),_&&R(p,u,d,g)}},{\"../../lib\":778,\"../color\":643,\"./arrow_paths\":625,d3:169}],634:[function(t,e,n){\"use strict\";var r=t(\"./draw\"),i=t(\"./click\");e.exports={moduleType:\"component\",name:\"annotations\",layoutAttributes:t(\"./attributes\"),supplyLayoutDefaults:t(\"./defaults\"),includeBasePlot:t(\"../../plots/cartesian/include_components\")(\"annotations\"),calcAutorange:t(\"./calc_autorange\"),draw:r.draw,drawOne:r.drawOne,drawRaw:r.drawRaw,hasClickToShow:i.hasClickToShow,onClick:i.onClick,convertCoords:t(\"./convert_coords\")}},{\"../../plots/cartesian/include_components\":840,\"./attributes\":626,\"./calc_autorange\":627,\"./click\":628,\"./convert_coords\":630,\"./defaults\":631,\"./draw\":632}],635:[function(t,e,n){\"use strict\";var r=t(\"../annotations/attributes\"),i=t(\"../../plot_api/edit_types\").overrideAll,a=t(\"../../plot_api/plot_template\").templatedArray;e.exports=i(a(\"annotation\",{visible:r.visible,x:{valType:\"any\"},y:{valType:\"any\"},z:{valType:\"any\"},ax:{valType:\"number\"},ay:{valType:\"number\"},xanchor:r.xanchor,xshift:r.xshift,yanchor:r.yanchor,yshift:r.yshift,text:r.text,textangle:r.textangle,font:r.font,width:r.width,height:r.height,opacity:r.opacity,align:r.align,valign:r.valign,bgcolor:r.bgcolor,bordercolor:r.bordercolor,borderpad:r.borderpad,borderwidth:r.borderwidth,showarrow:r.showarrow,arrowcolor:r.arrowcolor,arrowhead:r.arrowhead,startarrowhead:r.startarrowhead,arrowside:r.arrowside,arrowsize:r.arrowsize,startarrowsize:r.startarrowsize,arrowwidth:r.arrowwidth,standoff:r.standoff,startstandoff:r.startstandoff,hovertext:r.hovertext,hoverlabel:r.hoverlabel,captureevents:r.captureevents}),\"calc\",\"from-root\")},{\"../../plot_api/edit_types\":810,\"../../plot_api/plot_template\":817,\"../annotations/attributes\":626}],636:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../plots/cartesian/axes\");function a(t,e){var n=e.fullSceneLayout.domain,a=e.fullLayout._size,o={pdata:null,type:\"linear\",autorange:!1,range:[-1/0,1/0]};t._xa={},r.extendFlat(t._xa,o),i.setConvert(t._xa),t._xa._offset=a.l+n.x[0]*a.w,t._xa.l2p=function(){return.5*(1+t._pdata[0]/t._pdata[3])*a.w*(n.x[1]-n.x[0])},t._ya={},r.extendFlat(t._ya,o),i.setConvert(t._ya),t._ya._offset=a.t+(1-n.y[1])*a.h,t._ya.l2p=function(){return.5*(1-t._pdata[1]/t._pdata[3])*a.h*(n.y[1]-n.y[0])}}e.exports=function(t){for(var e=t.fullSceneLayout.annotations,n=0;n<e.length;n++)a(e[n],t);t.fullLayout._infolayer.selectAll(\".annotation-\"+t.id).remove()}},{\"../../lib\":778,\"../../plots/cartesian/axes\":828}],637:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../plots/cartesian/axes\"),a=t(\"../../plots/array_container_defaults\"),o=t(\"../annotations/common_defaults\"),s=t(\"./attributes\");function l(t,e,n,a){function l(n,i){return r.coerce(t,e,s,n,i)}function c(t){var r=t+\"axis\",a={_fullLayout:{}};return a._fullLayout[r]=n[r],i.coercePosition(e,a,l,t,t,.5)}l(\"visible\")&&(o(t,e,a.fullLayout,l),c(\"x\"),c(\"y\"),c(\"z\"),r.noneOrAll(t,e,[\"x\",\"y\",\"z\"]),e.xref=\"x\",e.yref=\"y\",e.zref=\"z\",l(\"xanchor\"),l(\"yanchor\"),l(\"xshift\"),l(\"yshift\"),e.showarrow&&(e.axref=\"pixel\",e.ayref=\"pixel\",l(\"ax\",-10),l(\"ay\",-30),r.noneOrAll(t,e,[\"ax\",\"ay\"])))}e.exports=function(t,e,n){a(t,e,{name:\"annotations\",handleItemDefaults:l,fullLayout:n.fullLayout})}},{\"../../lib\":778,\"../../plots/array_container_defaults\":823,\"../../plots/cartesian/axes\":828,\"../annotations/common_defaults\":629,\"./attributes\":635}],638:[function(t,e,n){\"use strict\";var r=t(\"../annotations/draw\").drawRaw,i=t(\"../../plots/gl3d/project\"),a=[\"x\",\"y\",\"z\"];e.exports=function(t){for(var e=t.fullSceneLayout,n=t.dataScale,o=e.annotations,s=0;s<o.length;s++){for(var l=o[s],c=!1,u=0;u<3;u++){var h=a[u],d=e[h+\"axis\"].r2fraction(l[h]);if(d<0||d>1){c=!0;break}}c?t.fullLayout._infolayer.select(\".annotation-\"+t.id+'[data-index=\"'+s+'\"]').remove():(l._pdata=i(t.glplot.cameraParams,[e.xaxis.r2l(l.x)*n[0],e.yaxis.r2l(l.y)*n[1],e.zaxis.r2l(l.z)*n[2]]),r(t.graphDiv,l,s,t.id,l._xa,l._ya))}}},{\"../../plots/gl3d/project\":879,\"../annotations/draw\":632}],639:[function(t,e,n){\"use strict\";var r=t(\"../../registry\"),i=t(\"../../lib\");e.exports={moduleType:\"component\",name:\"annotations3d\",schema:{subplots:{scene:{annotations:t(\"./attributes\")}}},layoutAttributes:t(\"./attributes\"),handleDefaults:t(\"./defaults\"),includeBasePlot:function(t,e){var n=r.subplotsRegistry.gl3d;if(n)for(var a=n.attrRegex,o=Object.keys(t),s=0;s<o.length;s++){var l=o[s];a.test(l)&&(t[l].annotations||[]).length&&(i.pushUnique(e._basePlotModules,n),i.pushUnique(e._subplots.gl3d,l))}},convert:t(\"./convert\"),draw:t(\"./draw\")}},{\"../../lib\":778,\"../../registry\":911,\"./attributes\":635,\"./convert\":636,\"./defaults\":637,\"./draw\":638}],640:[function(t,e,n){\"use strict\";e.exports=t(\"world-calendars/dist/main\"),t(\"world-calendars/dist/plus\"),t(\"world-calendars/dist/calendars/chinese\"),t(\"world-calendars/dist/calendars/coptic\"),t(\"world-calendars/dist/calendars/discworld\"),t(\"world-calendars/dist/calendars/ethiopian\"),t(\"world-calendars/dist/calendars/hebrew\"),t(\"world-calendars/dist/calendars/islamic\"),t(\"world-calendars/dist/calendars/julian\"),t(\"world-calendars/dist/calendars/mayan\"),t(\"world-calendars/dist/calendars/nanakshahi\"),t(\"world-calendars/dist/calendars/nepali\"),t(\"world-calendars/dist/calendars/persian\"),t(\"world-calendars/dist/calendars/taiwan\"),t(\"world-calendars/dist/calendars/thai\"),t(\"world-calendars/dist/calendars/ummalqura\")},{\"world-calendars/dist/calendars/chinese\":607,\"world-calendars/dist/calendars/coptic\":608,\"world-calendars/dist/calendars/discworld\":609,\"world-calendars/dist/calendars/ethiopian\":610,\"world-calendars/dist/calendars/hebrew\":611,\"world-calendars/dist/calendars/islamic\":612,\"world-calendars/dist/calendars/julian\":613,\"world-calendars/dist/calendars/mayan\":614,\"world-calendars/dist/calendars/nanakshahi\":615,\"world-calendars/dist/calendars/nepali\":616,\"world-calendars/dist/calendars/persian\":617,\"world-calendars/dist/calendars/taiwan\":618,\"world-calendars/dist/calendars/thai\":619,\"world-calendars/dist/calendars/ummalqura\":620,\"world-calendars/dist/main\":621,\"world-calendars/dist/plus\":622}],641:[function(t,e,n){\"use strict\";var r=t(\"./calendars\"),i=t(\"../../lib\"),a=t(\"../../constants/numerical\"),o=a.EPOCHJD,s=a.ONEDAY,l={valType:\"enumerated\",values:Object.keys(r.calendars),editType:\"calc\",dflt:\"gregorian\"},c=function(t,e,n,r){var a={};return a[n]=l,i.coerce(t,e,a,n,r)},u=\"##\",h={d:{0:\"dd\",\"-\":\"d\"},e:{0:\"d\",\"-\":\"d\"},a:{0:\"D\",\"-\":\"D\"},A:{0:\"DD\",\"-\":\"DD\"},j:{0:\"oo\",\"-\":\"o\"},W:{0:\"ww\",\"-\":\"w\"},m:{0:\"mm\",\"-\":\"m\"},b:{0:\"M\",\"-\":\"M\"},B:{0:\"MM\",\"-\":\"MM\"},y:{0:\"yy\",\"-\":\"yy\"},Y:{0:\"yyyy\",\"-\":\"yyyy\"},U:u,w:u,c:{0:\"D M d %X yyyy\",\"-\":\"D M d %X yyyy\"},x:{0:\"mm/dd/yyyy\",\"-\":\"mm/dd/yyyy\"}},d={};function f(t){return d[t]||(d[t]=r.instance(t))}function p(t){return i.extendFlat({},l,{description:t})}function m(t){return\"Sets the calendar system to use with `\"+t+\"` date data.\"}var g={xcalendar:p(m(\"x\"))},y=i.extendFlat({},g,{ycalendar:p(m(\"y\"))}),v=i.extendFlat({},y,{zcalendar:p(m(\"z\"))}),_=p([\"Sets the calendar system to use for `range` and `tick0`\",\"if this is a date axis. This does not set the calendar for\",\"interpreting data on this axis, that's specified in the trace\",\"or via the global `layout.calendar`\"].join(\" \"));e.exports={moduleType:\"component\",name:\"calendars\",schema:{traces:{scatter:y,bar:y,box:y,heatmap:y,contour:y,histogram:y,histogram2d:y,histogram2dcontour:y,scatter3d:v,surface:v,mesh3d:v,scattergl:y,ohlc:g,candlestick:g},layout:{calendar:p([\"Sets the default calendar system to use for interpreting and\",\"displaying dates throughout the plot.\"].join(\" \"))},subplots:{xaxis:{calendar:_},yaxis:{calendar:_},scene:{xaxis:{calendar:_},yaxis:{calendar:_},zaxis:{calendar:_}},polar:{radialaxis:{calendar:_}}},transforms:{filter:{valuecalendar:p([\"Sets the calendar system to use for `value`, if it is a date.\"].join(\" \")),targetcalendar:p([\"Sets the calendar system to use for `target`, if it is an\",\"array of dates. If `target` is a string (eg *x*) we use the\",\"corresponding trace attribute (eg `xcalendar`) if it exists,\",\"even if `targetcalendar` is provided.\"].join(\" \"))}}},layoutAttributes:l,handleDefaults:c,handleTraceDefaults:function(t,e,n,r){for(var i=0;i<n.length;i++)c(t,e,n[i]+\"calendar\",r.calendar)},CANONICAL_SUNDAY:{chinese:\"2000-01-02\",coptic:\"2000-01-03\",discworld:\"2000-01-03\",ethiopian:\"2000-01-05\",hebrew:\"5000-01-01\",islamic:\"1000-01-02\",julian:\"2000-01-03\",mayan:\"5000-01-01\",nanakshahi:\"1000-01-05\",nepali:\"2000-01-05\",persian:\"1000-01-01\",jalali:\"1000-01-01\",taiwan:\"1000-01-04\",thai:\"2000-01-04\",ummalqura:\"1400-01-06\"},CANONICAL_TICK:{chinese:\"2000-01-01\",coptic:\"2000-01-01\",discworld:\"2000-01-01\",ethiopian:\"2000-01-01\",hebrew:\"5000-01-01\",islamic:\"1000-01-01\",julian:\"2000-01-01\",mayan:\"5000-01-01\",nanakshahi:\"1000-01-01\",nepali:\"2000-01-01\",persian:\"1000-01-01\",jalali:\"1000-01-01\",taiwan:\"1000-01-01\",thai:\"2000-01-01\",ummalqura:\"1400-01-01\"},DFLTRANGE:{chinese:[\"2000-01-01\",\"2001-01-01\"],coptic:[\"1700-01-01\",\"1701-01-01\"],discworld:[\"1800-01-01\",\"1801-01-01\"],ethiopian:[\"2000-01-01\",\"2001-01-01\"],hebrew:[\"5700-01-01\",\"5701-01-01\"],islamic:[\"1400-01-01\",\"1401-01-01\"],julian:[\"2000-01-01\",\"2001-01-01\"],mayan:[\"5200-01-01\",\"5201-01-01\"],nanakshahi:[\"0500-01-01\",\"0501-01-01\"],nepali:[\"2000-01-01\",\"2001-01-01\"],persian:[\"1400-01-01\",\"1401-01-01\"],jalali:[\"1400-01-01\",\"1401-01-01\"],taiwan:[\"0100-01-01\",\"0101-01-01\"],thai:[\"2500-01-01\",\"2501-01-01\"],ummalqura:[\"1400-01-01\",\"1401-01-01\"]},getCal:f,worldCalFmt:function(t,e,n){for(var r,i,a,l,c,d=Math.floor((e+.05)/s)+o,p=f(n).fromJD(d),m=0;-1!==(m=t.indexOf(\"%\",m));)\"0\"===(r=t.charAt(m+1))||\"-\"===r||\"_\"===r?(a=3,i=t.charAt(m+2),\"_\"===r&&(r=\"-\")):(i=r,r=\"0\",a=2),(l=h[i])?(c=l===u?u:p.formatDate(l[r]),t=t.substr(0,m)+c+t.substr(m+a),m+=c.length):m+=a;return t}}},{\"../../constants/numerical\":753,\"../../lib\":778,\"./calendars\":640}],642:[function(t,e,n){\"use strict\";n.defaults=[\"#1f77b4\",\"#ff7f0e\",\"#2ca02c\",\"#d62728\",\"#9467bd\",\"#8c564b\",\"#e377c2\",\"#7f7f7f\",\"#bcbd22\",\"#17becf\"],n.defaultLine=\"#444\",n.lightLine=\"#eee\",n.background=\"#fff\",n.borderLine=\"#BEC8D9\",n.lightFraction=1e3/11},{}],643:[function(t,e,n){\"use strict\";var r=t(\"tinycolor2\"),i=t(\"fast-isnumeric\"),a=e.exports={},o=t(\"./attributes\");a.defaults=o.defaults;var s=a.defaultLine=o.defaultLine;a.lightLine=o.lightLine;var l=a.background=o.background;function c(t){if(i(t)||\"string\"!=typeof t)return t;var e=t.trim();if(\"rgb\"!==e.substr(0,3))return t;var n=e.match(/^rgba?\\s*\\(([^()]*)\\)$/);if(!n)return t;var r=n[1].trim().split(/\\s*[\\s,]\\s*/),a=\"a\"===e.charAt(3)&&4===r.length;if(!a&&3!==r.length)return t;for(var o=0;o<r.length;o++){if(!r[o].length)return t;if(r[o]=Number(r[o]),!(r[o]>=0))return t;if(3===o)r[o]>1&&(r[o]=1);else if(r[o]>=1)return t}var s=Math.round(255*r[0])+\", \"+Math.round(255*r[1])+\", \"+Math.round(255*r[2]);return a?\"rgba(\"+s+\", \"+r[3]+\")\":\"rgb(\"+s+\")\"}a.tinyRGB=function(t){var e=t.toRgb();return\"rgb(\"+Math.round(e.r)+\", \"+Math.round(e.g)+\", \"+Math.round(e.b)+\")\"},a.rgb=function(t){return a.tinyRGB(r(t))},a.opacity=function(t){return t?r(t).getAlpha():0},a.addOpacity=function(t,e){var n=r(t).toRgb();return\"rgba(\"+Math.round(n.r)+\", \"+Math.round(n.g)+\", \"+Math.round(n.b)+\", \"+e+\")\"},a.combine=function(t,e){var n=r(t).toRgb();if(1===n.a)return r(t).toRgbString();var i=r(e||l).toRgb(),a=1===i.a?i:{r:255*(1-i.a)+i.r*i.a,g:255*(1-i.a)+i.g*i.a,b:255*(1-i.a)+i.b*i.a};return r({r:a.r*(1-n.a)+n.r*n.a,g:a.g*(1-n.a)+n.g*n.a,b:a.b*(1-n.a)+n.b*n.a}).toRgbString()},a.contrast=function(t,e,n){var i=r(t);return 1!==i.getAlpha()&&(i=r(a.combine(t,l))),(i.isDark()?e?i.lighten(e):l:n?i.darken(n):s).toString()},a.stroke=function(t,e){var n=r(e);t.style({stroke:a.tinyRGB(n),\"stroke-opacity\":n.getAlpha()})},a.fill=function(t,e){var n=r(e);t.style({fill:a.tinyRGB(n),\"fill-opacity\":n.getAlpha()})},a.clean=function(t){if(t&&\"object\"==typeof t){var e,n,r,i,o=Object.keys(t);for(e=0;e<o.length;e++)if(i=t[r=o[e]],\"color\"===r.substr(r.length-5))if(Array.isArray(i))for(n=0;n<i.length;n++)i[n]=c(i[n]);else t[r]=c(i);else if(\"colorscale\"===r.substr(r.length-10)&&Array.isArray(i))for(n=0;n<i.length;n++)Array.isArray(i[n])&&(i[n][1]=c(i[n][1]));else if(Array.isArray(i)){var s=i[0];if(!Array.isArray(s)&&s&&\"object\"==typeof s)for(n=0;n<i.length;n++)a.clean(i[n])}else i&&\"object\"==typeof i&&a.clean(i)}}},{\"./attributes\":642,\"fast-isnumeric\":241,tinycolor2:576}],644:[function(t,e,n){\"use strict\";var r=t(\"../../plots/cartesian/layout_attributes\"),i=t(\"../../plots/font_attributes\"),a=t(\"../../lib/extend\").extendFlat,o=t(\"../../plot_api/edit_types\").overrideAll;e.exports=o({thicknessmode:{valType:\"enumerated\",values:[\"fraction\",\"pixels\"],dflt:\"pixels\"},thickness:{valType:\"number\",min:0,dflt:30},lenmode:{valType:\"enumerated\",values:[\"fraction\",\"pixels\"],dflt:\"fraction\"},len:{valType:\"number\",min:0,dflt:1},x:{valType:\"number\",dflt:1.02,min:-2,max:3},xanchor:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"],dflt:\"left\"},xpad:{valType:\"number\",min:0,dflt:10},y:{valType:\"number\",dflt:.5,min:-2,max:3},yanchor:{valType:\"enumerated\",values:[\"top\",\"middle\",\"bottom\"],dflt:\"middle\"},ypad:{valType:\"number\",min:0,dflt:10},outlinecolor:r.linecolor,outlinewidth:r.linewidth,bordercolor:r.linecolor,borderwidth:{valType:\"number\",min:0,dflt:0},bgcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\"},tickmode:r.tickmode,nticks:r.nticks,tick0:r.tick0,dtick:r.dtick,tickvals:r.tickvals,ticktext:r.ticktext,ticks:a({},r.ticks,{dflt:\"\"}),ticklabelposition:{valType:\"enumerated\",values:[\"outside\",\"inside\",\"outside top\",\"inside top\",\"outside bottom\",\"inside bottom\"],dflt:\"outside\"},ticklen:r.ticklen,tickwidth:r.tickwidth,tickcolor:r.tickcolor,showticklabels:r.showticklabels,tickfont:i({}),tickangle:r.tickangle,tickformat:r.tickformat,tickformatstops:r.tickformatstops,tickprefix:r.tickprefix,showtickprefix:r.showtickprefix,ticksuffix:r.ticksuffix,showticksuffix:r.showticksuffix,separatethousands:r.separatethousands,exponentformat:r.exponentformat,minexponent:r.minexponent,showexponent:r.showexponent,title:{text:{valType:\"string\"},font:i({}),side:{valType:\"enumerated\",values:[\"right\",\"top\",\"bottom\"],dflt:\"top\"}},_deprecated:{title:{valType:\"string\"},titlefont:i({}),titleside:{valType:\"enumerated\",values:[\"right\",\"top\",\"bottom\"],dflt:\"top\"}}},\"colorbars\",\"from-root\")},{\"../../lib/extend\":768,\"../../plot_api/edit_types\":810,\"../../plots/cartesian/layout_attributes\":842,\"../../plots/font_attributes\":856}],645:[function(t,e,n){\"use strict\";e.exports={cn:{colorbar:\"colorbar\",cbbg:\"cbbg\",cbfill:\"cbfill\",cbfills:\"cbfills\",cbline:\"cbline\",cblines:\"cblines\",cbaxis:\"cbaxis\",cbtitleunshift:\"cbtitleunshift\",cbtitle:\"cbtitle\",cboutline:\"cboutline\",crisp:\"crisp\",jsPlaceholder:\"js-placeholder\"}}},{}],646:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../plot_api/plot_template\"),a=t(\"../../plots/cartesian/tick_value_defaults\"),o=t(\"../../plots/cartesian/tick_mark_defaults\"),s=t(\"../../plots/cartesian/tick_label_defaults\"),l=t(\"./attributes\");e.exports=function(t,e,n){var c=i.newContainer(e,\"colorbar\"),u=t.colorbar||{};function h(t,e){return r.coerce(u,c,l,t,e)}var d=h(\"thicknessmode\");h(\"thickness\",\"fraction\"===d?30/(n.width-n.margin.l-n.margin.r):30);var f=h(\"lenmode\");h(\"len\",\"fraction\"===f?1:n.height-n.margin.t-n.margin.b),h(\"x\"),h(\"xanchor\"),h(\"xpad\"),h(\"y\"),h(\"yanchor\"),h(\"ypad\"),r.noneOrAll(u,c,[\"x\",\"y\"]),h(\"outlinecolor\"),h(\"outlinewidth\"),h(\"bordercolor\"),h(\"borderwidth\"),h(\"bgcolor\");var p=h(\"ticklabelposition\");a(u,c,h,\"linear\");var m={outerTicks:!1,font:n.font};-1!==p.indexOf(\"inside\")&&(m.bgColor=\"black\"),s(u,c,h,\"linear\",m),o(u,c,h,\"linear\",m),h(\"title.text\",n._dfltTitle.colorbar),r.coerceFont(h,\"title.font\",n.font),h(\"title.side\")}},{\"../../lib\":778,\"../../plot_api/plot_template\":817,\"../../plots/cartesian/tick_label_defaults\":849,\"../../plots/cartesian/tick_mark_defaults\":850,\"../../plots/cartesian/tick_value_defaults\":851,\"./attributes\":644}],647:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"tinycolor2\"),a=t(\"../../plots/plots\"),o=t(\"../../registry\"),s=t(\"../../plots/cartesian/axes\"),l=t(\"../dragelement\"),c=t(\"../../lib\"),u=c.strTranslate,h=t(\"../../lib/extend\").extendFlat,d=t(\"../../lib/setcursor\"),f=t(\"../drawing\"),p=t(\"../color\"),m=t(\"../titles\"),g=t(\"../../lib/svg_text_utils\"),y=t(\"../colorscale/helpers\").flipScale,v=t(\"../../plots/cartesian/axis_defaults\"),_=t(\"../../plots/cartesian/position_defaults\"),b=t(\"../../plots/cartesian/layout_attributes\"),x=t(\"../../constants/alignment\"),w=x.LINE_SPACING,k=x.FROM_TL,M=x.FROM_BR,T=t(\"./constants\").cn;e.exports={draw:function(t){var e=t._fullLayout._infolayer.selectAll(\"g.\"+T.colorbar).data(function(t){var e,n,r,i,a=t._fullLayout,o=t.calcdata,s=[];function l(t){return h(t,{_fillcolor:null,_line:{color:null,width:null,dash:null},_levels:{start:null,end:null,size:null},_filllevels:null,_fillgradient:null,_zrange:null})}function c(){\"function\"==typeof i.calc?i.calc(t,r,e):(e._fillgradient=n.reversescale?y(n.colorscale):n.colorscale,e._zrange=[n[i.min],n[i.max]])}for(var u=0;u<o.length;u++){var d=(r=o[u][0].trace)._module.colorbar;if(!0===r.visible&&d)for(var f=Array.isArray(d),p=f?d:[d],m=0;m<p.length;m++){var g=(i=p[m]).container;(n=g?r[g]:r)&&n.showscale&&((e=l(n.colorbar))._id=\"cb\"+r.uid+(f&&g?\"-\"+g:\"\"),e._traceIndex=r.index,e._propPrefix=(g?g+\".\":\"\")+\"colorbar.\",e._meta=r._meta,c(),s.push(e))}}for(var v in a._colorAxes)if((n=a[v]).showscale){var _=a._colorAxes[v];(e=l(n.colorbar))._id=\"cb\"+v,e._propPrefix=v+\".colorbar.\",e._meta=a._meta,i={min:\"cmin\",max:\"cmax\"},\"heatmap\"!==_[0]&&(i.calc=(r=_[1])._module.colorbar.calc),c(),s.push(e)}return s}(t),(function(t){return t._id}));e.enter().append(\"g\").attr(\"class\",(function(t){return t._id})).classed(T.colorbar,!0),e.each((function(e){var n=r.select(this);c.ensureSingle(n,\"rect\",T.cbbg),c.ensureSingle(n,\"g\",T.cbfills),c.ensureSingle(n,\"g\",T.cblines),c.ensureSingle(n,\"g\",T.cbaxis,(function(t){t.classed(T.crisp,!0)})),c.ensureSingle(n,\"g\",T.cbtitleunshift,(function(t){t.append(\"g\").classed(T.cbtitle,!0)})),c.ensureSingle(n,\"rect\",T.cboutline);var y=function(t,e,n){var o=n._fullLayout,l=o._size,d=e._fillcolor,y=e._line,x=e.title,S=x.side,A=e._zrange||r.extent((\"function\"==typeof d?d:y.color).domain()),L=\"function\"==typeof y.color?y.color:function(){return y.color},C=\"function\"==typeof d?d:function(){return d},E=e._levels,O=function(t,e,n){var r,i,a=e._levels,o=[],s=[],l=a.end+a.size/100,c=a.size,u=1.001*n[0]-.001*n[1],h=1.001*n[1]-.001*n[0];for(i=0;i<1e5&&(r=a.start+i*c,!(c>0?r>=l:r<=l));i++)r>u&&r<h&&o.push(r);if(e._fillgradient)s=[0];else if(\"function\"==typeof e._fillcolor){var d=e._filllevels;if(d)for(l=d.end+d.size/100,c=d.size,i=0;i<1e5&&(r=d.start+i*c,!(c>0?r>=l:r<=l));i++)r>n[0]&&r<n[1]&&s.push(r);else(s=o.map((function(t){return t-a.size/2}))).push(s[s.length-1]+a.size)}else e._fillcolor&&\"string\"==typeof e._fillcolor&&(s=[0]);return a.size<0&&(o.reverse(),s.reverse()),{line:o,fill:s}}(0,e,A),D=O.fill,I=O.line,P=Math.round(e.thickness*(\"fraction\"===e.thicknessmode?l.w:1)),R=P/l.w,z=Math.round(e.len*(\"fraction\"===e.lenmode?l.h:1)),j=z/l.h,F=e.xpad/l.w,N=(e.borderwidth+e.outlinewidth)/2,B=e.ypad/l.h,Y=Math.round(e.x*l.w+e.xpad),H=e.x-R*({middle:.5,right:1}[e.xanchor]||0),V=e.y+j*(({top:-.5,bottom:.5}[e.yanchor]||0)-.5),U=Math.round(l.h*(1-V)),W=U-z;e._lenFrac=j,e._thickFrac=R,e._xLeftFrac=H,e._yBottomFrac=V;var q=e._axis=function(t,e,n){var r=t._fullLayout,i={type:\"linear\",range:n,tickmode:e.tickmode,nticks:e.nticks,tick0:e.tick0,dtick:e.dtick,tickvals:e.tickvals,ticktext:e.ticktext,ticks:e.ticks,ticklen:e.ticklen,tickwidth:e.tickwidth,tickcolor:e.tickcolor,showticklabels:e.showticklabels,ticklabelposition:e.ticklabelposition,tickfont:e.tickfont,tickangle:e.tickangle,tickformat:e.tickformat,exponentformat:e.exponentformat,minexponent:e.minexponent,separatethousands:e.separatethousands,showexponent:e.showexponent,showtickprefix:e.showtickprefix,tickprefix:e.tickprefix,showticksuffix:e.showticksuffix,ticksuffix:e.ticksuffix,title:e.title,showline:!0,anchor:\"free\",side:\"right\",position:1},a={type:\"linear\",_id:\"y\"+e._id},o={letter:\"y\",font:r.font,noHover:!0,noTickson:!0,noTicklabelmode:!0,calendar:r.calendar};function s(t,e){return c.coerce(i,a,b,t,e)}return v(i,a,s,o,r),_(i,a,s,o),a}(n,e,A);if(q.position=e.x+F+R,-1!==[\"top\",\"bottom\"].indexOf(S)&&(q.title.side=S,q.titlex=e.x+F,q.titley=V+(\"top\"===x.side?j-B:B)),y.color&&\"auto\"===e.tickmode){q.tickmode=\"linear\",q.tick0=E.start;var G=E.size,X=c.constrain((U-W)/50,4,15)+1,Z=(A[1]-A[0])/((e.nticks||X)*G);if(Z>1){var J=Math.pow(10,Math.floor(Math.log(Z)/Math.LN10));G*=J*c.roundUp(Z/J,[2,5,10]),(Math.abs(E.start)/E.size+1e-6)%1<2e-6&&(q.tick0=0)}q.dtick=G}q.domain=[V+B,V+j-B],q.setScale(),t.attr(\"transform\",u(Math.round(l.l),Math.round(l.t)));var K,$=t.select(\".\"+T.cbtitleunshift).attr(\"transform\",u(-Math.round(l.l),-Math.round(l.t))),Q=t.select(\".\"+T.cbaxis),tt=0;function et(r,i){var a={propContainer:q,propName:e._propPrefix+\"title\",traceIndex:e._traceIndex,_meta:e._meta,placeholder:o._dfltTitle.colorbar,containerGroup:t.select(\".\"+T.cbtitle)},s=\"h\"===r.charAt(0)?r.substr(1):\"h\"+r;t.selectAll(\".\"+s+\",.\"+s+\"-math-group\").remove(),m.draw(n,r,h(a,i||{}))}return c.syncOrAsync([a.previousPromises,function(){if(-1!==[\"top\",\"bottom\"].indexOf(S)){var t=q.title.font.size;et(q._id+\"title\",{attributes:{x:l.l+(e.x+F)*l.w,y:\"top\"===S?(1-(V+j-B))*l.h+l.t+3+.75*t:(1-(V+B))*l.h+l.t-3-.25*t,\"text-anchor\":\"start\"}})}},function(){if(-1!==[\"top\",\"bottom\"].indexOf(S)){var a=t.select(\".\"+T.cbtitle),o=a.select(\"text\"),h=[-e.outlinewidth/2,e.outlinewidth/2],d=a.select(\".h\"+q._id+\"title-math-group\").node(),p=15.6;if(o.node()&&(p=parseInt(o.node().style.fontSize,10)*w),d?(tt=f.bBox(d).height)>p&&(h[1]-=(tt-p)/2):o.node()&&!o.classed(T.jsPlaceholder)&&(tt=f.bBox(o.node()).height),tt){if(tt+=5,\"top\"===S)q.domain[1]-=tt/l.h,h[1]*=-1;else{q.domain[0]+=tt/l.h;var m=g.lineCount(o);h[1]+=(1-m)*p}a.attr(\"transform\",u(h[0],h[1])),q.setScale()}}t.selectAll(\".\"+T.cbfills+\",.\"+T.cblines).attr(\"transform\",u(0,Math.round(l.h*(1-q.domain[1])))),Q.attr(\"transform\",u(0,Math.round(-l.t)));var v=t.select(\".\"+T.cbfills).selectAll(\"rect.\"+T.cbfill).attr(\"style\",\"\").data(D);v.enter().append(\"rect\").classed(T.cbfill,!0).style(\"stroke\",\"none\"),v.exit().remove();var _=A.map(q.c2p).map(Math.round).sort((function(t,e){return t-e}));v.each((function(t,a){var o=[0===a?A[0]:(D[a]+D[a-1])/2,a===D.length-1?A[1]:(D[a]+D[a+1])/2].map(q.c2p).map(Math.round);o[1]=c.constrain(o[1]+(o[1]>o[0])?1:-1,_[0],_[1]);var s=r.select(this).attr({x:Y,width:Math.max(P,2),y:r.min(o),height:Math.max(r.max(o)-r.min(o),2)});if(e._fillgradient)f.gradient(s,n,e._id,\"vertical\",e._fillgradient,\"fill\");else{var l=C(t).replace(\"e-\",\"\");s.attr(\"fill\",i(l).toHexString())}}));var b=t.select(\".\"+T.cblines).selectAll(\"path.\"+T.cbline).data(y.color&&y.width?I:[]);b.enter().append(\"path\").classed(T.cbline,!0),b.exit().remove(),b.each((function(t){r.select(this).attr(\"d\",\"M\"+Y+\",\"+(Math.round(q.c2p(t))+y.width/2%1)+\"h\"+P).call(f.lineGroupStyle,y.width,L(t),y.dash)})),Q.selectAll(\"g.\"+q._id+\"tick,path\").remove();var x=Y+P+(e.outlinewidth||0)/2-(\"outside\"===e.ticks?1:0),k=s.calcTicks(q),M=s.getTickSigns(q)[2];return s.drawTicks(n,q,{vals:\"inside\"===q.ticks?s.clipEnds(q,k):k,layer:Q,path:s.makeTickPath(q,x,M),transFn:s.makeTransTickFn(q)}),s.drawLabels(n,q,{vals:k,layer:Q,transFn:s.makeTransTickLabelFn(q),labelFns:s.makeLabelFns(q,x)})},function(){if(-1===[\"top\",\"bottom\"].indexOf(S)){var t=q.title.font.size,e=q._offset+q._length/2,i=l.l+(q.position||0)*l.w+(\"right\"===q.side?10+t*(q.showticklabels?1:.5):-10-t*(q.showticklabels?.5:0));et(\"h\"+q._id+\"title\",{avoid:{selection:r.select(n).selectAll(\"g.\"+q._id+\"tick\"),side:S,offsetLeft:l.l,offsetTop:0,maxShift:o.width},attributes:{x:i,y:e,\"text-anchor\":\"middle\"},transform:{rotate:\"-90\",offset:0}})}},a.previousPromises,function(){var r=P+e.outlinewidth/2;if(-1===q.ticklabelposition.indexOf(\"inside\")&&(r+=f.bBox(Q.node()).width),(K=$.select(\"text\")).node()&&!K.classed(T.jsPlaceholder)){var i,o=$.select(\".h\"+q._id+\"title-math-group\").node();i=o&&-1!==[\"top\",\"bottom\"].indexOf(S)?f.bBox(o).width:f.bBox($.node()).right-Y-l.l,r=Math.max(r,i)}var s=2*e.xpad+r+e.borderwidth+e.outlinewidth/2,c=U-W;t.select(\".\"+T.cbbg).attr({x:Y-e.xpad-(e.borderwidth+e.outlinewidth)/2,y:W-N,width:Math.max(s,2),height:Math.max(c+2*N,2)}).call(p.fill,e.bgcolor).call(p.stroke,e.bordercolor).style(\"stroke-width\",e.borderwidth),t.selectAll(\".\"+T.cboutline).attr({x:Y,y:W+e.ypad+(\"top\"===S?tt:0),width:Math.max(P,2),height:Math.max(c-2*e.ypad-tt,2)}).call(p.stroke,e.outlinecolor).style({fill:\"none\",\"stroke-width\":e.outlinewidth}),t.attr(\"transform\",u(l.l-({center:.5,right:1}[e.xanchor]||0)*s,l.t));var h={},d=k[e.yanchor],m=M[e.yanchor];\"pixels\"===e.lenmode?(h.y=e.y,h.t=c*d,h.b=c*m):(h.t=h.b=0,h.yt=e.y+e.len*d,h.yb=e.y-e.len*m);var g=k[e.xanchor],y=M[e.xanchor];if(\"pixels\"===e.thicknessmode)h.x=e.x,h.l=s*g,h.r=s*y;else{var v=s-P;h.l=v*g,h.r=v*y,h.xl=e.x-e.thickness*g,h.xr=e.x+e.thickness*y}a.autoMargin(n,e._id,h)}],n)}(n,e,t);y&&y.then&&(t._promises||[]).push(y),t._context.edits.colorbarPosition&&function(t,e,n){var r,i,a,s=n._fullLayout._size;l.init({element:t.node(),gd:n,prepFn:function(){r=t.attr(\"transform\"),d(t)},moveFn:function(n,o){t.attr(\"transform\",r+u(n,o)),i=l.align(e._xLeftFrac+n/s.w,e._thickFrac,0,1,e.xanchor),a=l.align(e._yBottomFrac-o/s.h,e._lenFrac,0,1,e.yanchor);var c=l.getCursor(i,a,e.xanchor,e.yanchor);d(t,c)},doneFn:function(){if(d(t),void 0!==i&&void 0!==a){var r={};r[e._propPrefix+\"x\"]=i,r[e._propPrefix+\"y\"]=a,void 0!==e._traceIndex?o.call(\"_guiRestyle\",n,r,e._traceIndex):o.call(\"_guiRelayout\",n,r)}}})}(n,e,t)})),e.exit().each((function(e){a.autoMargin(t,e._id)})).remove(),e.order()}}},{\"../../constants/alignment\":745,\"../../lib\":778,\"../../lib/extend\":768,\"../../lib/setcursor\":799,\"../../lib/svg_text_utils\":803,\"../../plots/cartesian/axes\":828,\"../../plots/cartesian/axis_defaults\":830,\"../../plots/cartesian/layout_attributes\":842,\"../../plots/cartesian/position_defaults\":845,\"../../plots/plots\":891,\"../../registry\":911,\"../color\":643,\"../colorscale/helpers\":654,\"../dragelement\":662,\"../drawing\":665,\"../titles\":738,\"./constants\":645,d3:169,tinycolor2:576}],648:[function(t,e,n){\"use strict\";var r=t(\"../../lib\");e.exports=function(t){return r.isPlainObject(t.colorbar)}},{\"../../lib\":778}],649:[function(t,e,n){\"use strict\";e.exports={moduleType:\"component\",name:\"colorbar\",attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),draw:t(\"./draw\").draw,hasColorbar:t(\"./has_colorbar\")}},{\"./attributes\":644,\"./defaults\":646,\"./draw\":647,\"./has_colorbar\":648}],650:[function(t,e,n){\"use strict\";var r=t(\"../colorbar/attributes\"),i=t(\"../../lib/regex\").counter,a=t(\"./scales.js\").scales;function o(t){return\"`\"+t+\"`\"}Object.keys(a),e.exports=function(t,e){t=t||\"\";var n,s=(e=e||{}).cLetter||\"c\",l=(\"onlyIfNumerical\"in e||Boolean(t),\"noScale\"in e?e.noScale:\"marker.line\"===t),c=\"showScaleDflt\"in e?e.showScaleDflt:\"z\"===s,u=\"string\"==typeof e.colorscaleDflt?a[e.colorscaleDflt]:null,h=e.editTypeOverride||\"\",d=t?t+\".\":\"\";\"colorAttr\"in e?n=e.colorAttr:o(d+(n={z:\"z\",c:\"color\"}[s]));var f=s+\"auto\",p=s+\"min\",m=s+\"max\",g=s+\"mid\",y=(o(d+f),o(d+p),o(d+m),{});y[p]=y[m]=void 0;var v={};v[f]=!1;var _={};return\"color\"===n&&(_.color={valType:\"color\",arrayOk:!0,editType:h||\"style\"},e.anim&&(_.color.anim=!0)),_[f]={valType:\"boolean\",dflt:!0,editType:\"calc\",impliedEdits:y},_[p]={valType:\"number\",dflt:null,editType:h||\"plot\",impliedEdits:v},_[m]={valType:\"number\",dflt:null,editType:h||\"plot\",impliedEdits:v},_[g]={valType:\"number\",dflt:null,editType:\"calc\",impliedEdits:y},_.colorscale={valType:\"colorscale\",editType:\"calc\",dflt:u,impliedEdits:{autocolorscale:!1}},_.autocolorscale={valType:\"boolean\",dflt:!1!==e.autoColorDflt,editType:\"calc\",impliedEdits:{colorscale:void 0}},_.reversescale={valType:\"boolean\",dflt:!1,editType:\"plot\"},l||(_.showscale={valType:\"boolean\",dflt:c,editType:\"calc\"},_.colorbar=r),e.noColorAxis||(_.coloraxis={valType:\"subplotid\",regex:i(\"coloraxis\"),dflt:null,editType:\"calc\"}),_}},{\"../../lib/regex\":795,\"../colorbar/attributes\":644,\"./scales.js\":658}],651:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../lib\"),a=t(\"./helpers\").extractOpts;e.exports=function(t,e,n){var o=t._fullLayout,s=n.vals,l=n.containerStr,c=l?i.nestedProperty(e,l).get():e,u=a(c),h=!1!==u.auto,d=u.min,f=u.max,p=u.mid,m=function(){return i.aggNums(Math.min,null,s)},g=function(){return i.aggNums(Math.max,null,s)};void 0===d?d=m():h&&(d=c._colorAx&&r(d)?Math.min(d,m()):m()),void 0===f?f=g():h&&(f=c._colorAx&&r(f)?Math.max(f,g()):g()),h&&void 0!==p&&(f-p>p-d?d=p-(f-p):f-p<p-d&&(f=p+(p-d))),d===f&&(d-=.5,f+=.5),u._sync(\"min\",d),u._sync(\"max\",f),u.autocolorscale&&u._sync(\"colorscale\",d*f<0?o.colorscale.diverging:d>=0?o.colorscale.sequential:o.colorscale.sequentialminus)}},{\"../../lib\":778,\"./helpers\":654,\"fast-isnumeric\":241}],652:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./helpers\").hasColorscale,a=t(\"./helpers\").extractOpts;e.exports=function(t,e){function n(t,e){var n=t[\"_\"+e];void 0!==n&&(t[e]=n)}function o(t,i){var o=i.container?r.nestedProperty(t,i.container).get():t;if(o)if(o.coloraxis)o._colorAx=e[o.coloraxis];else{var s=a(o),l=s.auto;(l||void 0===s.min)&&n(o,i.min),(l||void 0===s.max)&&n(o,i.max),s.autocolorscale&&n(o,\"colorscale\")}}for(var s=0;s<t.length;s++){var l=t[s],c=l._module.colorbar;if(c)if(Array.isArray(c))for(var u=0;u<c.length;u++)o(l,c[u]);else o(l,c);i(l,\"marker.line\")&&o(l,{container:\"marker.line\",min:\"cmin\",max:\"cmax\"})}for(var h in e._colorAxes)o(e[h],{min:\"cmin\",max:\"cmax\"})}},{\"../../lib\":778,\"./helpers\":654}],653:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../lib\"),a=t(\"../colorbar/has_colorbar\"),o=t(\"../colorbar/defaults\"),s=t(\"./scales\").isValid,l=t(\"../../registry\").traceIs;function c(t,e){var n=e.slice(0,e.length-1);return e?i.nestedProperty(t,n).get()||{}:t}e.exports=function t(e,n,u,h,d){var f=d.prefix,p=d.cLetter,m=\"_module\"in n,g=c(e,f),y=c(n,f),v=c(n._template||{},f)||{},_=function(){return delete e.coloraxis,delete n.coloraxis,t(e,n,u,h,d)};if(m){var b=u._colorAxes||{},x=h(f+\"coloraxis\");if(x){var w=l(n,\"contour\")&&i.nestedProperty(n,\"contours.coloring\").get()||\"heatmap\",k=b[x];return void(k?(k[2].push(_),k[0]!==w&&(k[0]=!1,i.warn([\"Ignoring coloraxis:\",x,\"setting\",\"as it is linked to incompatible colorscales.\"].join(\" \")))):b[x]=[w,n,[_]])}}var M=g[p+\"min\"],T=g[p+\"max\"],S=r(M)&&r(T)&&M<T;h(f+p+\"auto\",!S)?h(f+p+\"mid\"):(h(f+p+\"min\"),h(f+p+\"max\"));var A,L,C=g.colorscale,E=v.colorscale;void 0!==C&&(A=!s(C)),void 0!==E&&(A=!s(E)),h(f+\"autocolorscale\",A),h(f+\"colorscale\"),h(f+\"reversescale\"),\"marker.line.\"!==f&&(f&&m&&(L=a(g)),h(f+\"showscale\",L)&&(f&&v&&(y._template=v),o(g,y,u)))}},{\"../../lib\":778,\"../../registry\":911,\"../colorbar/defaults\":646,\"../colorbar/has_colorbar\":648,\"./scales\":658,\"fast-isnumeric\":241}],654:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"tinycolor2\"),a=t(\"fast-isnumeric\"),o=t(\"../../lib\"),s=t(\"../color\"),l=t(\"./scales\").isValid,c=[\"showscale\",\"autocolorscale\",\"colorscale\",\"reversescale\",\"colorbar\"],u=[\"min\",\"max\",\"mid\",\"auto\"];function h(t){var e,n,r,i=t._colorAx,a=i||t,o={};for(n=0;n<c.length;n++)o[r=c[n]]=a[r];if(i)for(e=\"c\",n=0;n<u.length;n++)o[r=u[n]]=a[\"c\"+r];else{var s;for(n=0;n<u.length;n++)((s=\"c\"+(r=u[n]))in a||(s=\"z\"+r)in a)&&(o[r]=a[s]);e=s.charAt(0)}return o._sync=function(t,n){var r=-1!==u.indexOf(t)?e+t:t;a[r]=a[\"_\"+r]=n},o}function d(t){for(var e=h(t),n=e.min,r=e.max,i=e.reversescale?f(e.colorscale):e.colorscale,a=i.length,o=new Array(a),s=new Array(a),l=0;l<a;l++){var c=i[l];o[l]=n+c[0]*(r-n),s[l]=c[1]}return{domain:o,range:s}}function f(t){for(var e=t.length,n=new Array(e),r=e-1,i=0;r>=0;r--,i++){var a=t[r];n[i]=[1-a[0],a[1]]}return n}function p(t,e){e=e||{};for(var n=t.domain,o=t.range,l=o.length,c=new Array(l),u=0;u<l;u++){var h=i(o[u]).toRgb();c[u]=[h.r,h.g,h.b,h.a]}var d,f=r.scale.linear().domain(n).range(c).clamp(!0),p=e.noNumericCheck,g=e.returnArray;return(d=p&&g?f:p?function(t){return m(f(t))}:g?function(t){return a(t)?f(t):i(t).isValid()?t:s.defaultLine}:function(t){return a(t)?m(f(t)):i(t).isValid()?t:s.defaultLine}).domain=f.domain,d.range=function(){return o},d}function m(t){return i({r:t[0],g:t[1],b:t[2],a:t[3]}).toRgbString()}e.exports={hasColorscale:function(t,e,n){var r=e?o.nestedProperty(t,e).get()||{}:t,i=r[n||\"color\"],s=!1;if(o.isArrayOrTypedArray(i))for(var c=0;c<i.length;c++)if(a(i[c])){s=!0;break}return o.isPlainObject(r)&&(s||!0===r.showscale||a(r.cmin)&&a(r.cmax)||l(r.colorscale)||o.isPlainObject(r.colorbar))},extractOpts:h,extractScale:d,flipScale:f,makeColorScaleFunc:p,makeColorScaleFuncFromTrace:function(t,e){return p(d(t),e)}}},{\"../../lib\":778,\"../color\":643,\"./scales\":658,d3:169,\"fast-isnumeric\":241,tinycolor2:576}],655:[function(t,e,n){\"use strict\";var r=t(\"./scales\"),i=t(\"./helpers\");e.exports={moduleType:\"component\",name:\"colorscale\",attributes:t(\"./attributes\"),layoutAttributes:t(\"./layout_attributes\"),supplyLayoutDefaults:t(\"./layout_defaults\"),handleDefaults:t(\"./defaults\"),crossTraceDefaults:t(\"./cross_trace_defaults\"),calc:t(\"./calc\"),scales:r.scales,defaultScale:r.defaultScale,getScale:r.get,isValidScale:r.isValid,hasColorscale:i.hasColorscale,extractOpts:i.extractOpts,extractScale:i.extractScale,flipScale:i.flipScale,makeColorScaleFunc:i.makeColorScaleFunc,makeColorScaleFuncFromTrace:i.makeColorScaleFuncFromTrace}},{\"./attributes\":650,\"./calc\":651,\"./cross_trace_defaults\":652,\"./defaults\":653,\"./helpers\":654,\"./layout_attributes\":656,\"./layout_defaults\":657,\"./scales\":658}],656:[function(t,e,n){\"use strict\";var r=t(\"../../lib/extend\").extendFlat,i=t(\"./attributes\"),a=t(\"./scales\").scales;e.exports={editType:\"calc\",colorscale:{editType:\"calc\",sequential:{valType:\"colorscale\",dflt:a.Reds,editType:\"calc\"},sequentialminus:{valType:\"colorscale\",dflt:a.Blues,editType:\"calc\"},diverging:{valType:\"colorscale\",dflt:a.RdBu,editType:\"calc\"}},coloraxis:r({_isSubplotObj:!0,editType:\"calc\"},i(\"\",{colorAttr:\"corresponding trace color array(s)\",noColorAxis:!0,showScaleDflt:!0}))}},{\"../../lib/extend\":768,\"./attributes\":650,\"./scales\":658}],657:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../plot_api/plot_template\"),a=t(\"./layout_attributes\"),o=t(\"./defaults\");e.exports=function(t,e){function n(n,i){return r.coerce(t,e,a,n,i)}n(\"colorscale.sequential\"),n(\"colorscale.sequentialminus\"),n(\"colorscale.diverging\");var s,l,c=e._colorAxes;function u(t,e){return r.coerce(s,l,a.coloraxis,t,e)}for(var h in c){var d=c[h];if(d[0])s=t[h]||{},(l=i.newContainer(e,h,\"coloraxis\"))._name=h,o(s,l,e,u,{prefix:\"\",cLetter:\"c\"});else{for(var f=0;f<d[2].length;f++)d[2][f]();delete e._colorAxes[h]}}}},{\"../../lib\":778,\"../../plot_api/plot_template\":817,\"./defaults\":653,\"./layout_attributes\":656}],658:[function(t,e,n){\"use strict\";var r=t(\"tinycolor2\"),i={Greys:[[0,\"rgb(0,0,0)\"],[1,\"rgb(255,255,255)\"]],YlGnBu:[[0,\"rgb(8,29,88)\"],[.125,\"rgb(37,52,148)\"],[.25,\"rgb(34,94,168)\"],[.375,\"rgb(29,145,192)\"],[.5,\"rgb(65,182,196)\"],[.625,\"rgb(127,205,187)\"],[.75,\"rgb(199,233,180)\"],[.875,\"rgb(237,248,217)\"],[1,\"rgb(255,255,217)\"]],Greens:[[0,\"rgb(0,68,27)\"],[.125,\"rgb(0,109,44)\"],[.25,\"rgb(35,139,69)\"],[.375,\"rgb(65,171,93)\"],[.5,\"rgb(116,196,118)\"],[.625,\"rgb(161,217,155)\"],[.75,\"rgb(199,233,192)\"],[.875,\"rgb(229,245,224)\"],[1,\"rgb(247,252,245)\"]],YlOrRd:[[0,\"rgb(128,0,38)\"],[.125,\"rgb(189,0,38)\"],[.25,\"rgb(227,26,28)\"],[.375,\"rgb(252,78,42)\"],[.5,\"rgb(253,141,60)\"],[.625,\"rgb(254,178,76)\"],[.75,\"rgb(254,217,118)\"],[.875,\"rgb(255,237,160)\"],[1,\"rgb(255,255,204)\"]],Bluered:[[0,\"rgb(0,0,255)\"],[1,\"rgb(255,0,0)\"]],RdBu:[[0,\"rgb(5,10,172)\"],[.35,\"rgb(106,137,247)\"],[.5,\"rgb(190,190,190)\"],[.6,\"rgb(220,170,132)\"],[.7,\"rgb(230,145,90)\"],[1,\"rgb(178,10,28)\"]],Reds:[[0,\"rgb(220,220,220)\"],[.2,\"rgb(245,195,157)\"],[.4,\"rgb(245,160,105)\"],[1,\"rgb(178,10,28)\"]],Blues:[[0,\"rgb(5,10,172)\"],[.35,\"rgb(40,60,190)\"],[.5,\"rgb(70,100,245)\"],[.6,\"rgb(90,120,245)\"],[.7,\"rgb(106,137,247)\"],[1,\"rgb(220,220,220)\"]],Picnic:[[0,\"rgb(0,0,255)\"],[.1,\"rgb(51,153,255)\"],[.2,\"rgb(102,204,255)\"],[.3,\"rgb(153,204,255)\"],[.4,\"rgb(204,204,255)\"],[.5,\"rgb(255,255,255)\"],[.6,\"rgb(255,204,255)\"],[.7,\"rgb(255,153,255)\"],[.8,\"rgb(255,102,204)\"],[.9,\"rgb(255,102,102)\"],[1,\"rgb(255,0,0)\"]],Rainbow:[[0,\"rgb(150,0,90)\"],[.125,\"rgb(0,0,200)\"],[.25,\"rgb(0,25,255)\"],[.375,\"rgb(0,152,255)\"],[.5,\"rgb(44,255,150)\"],[.625,\"rgb(151,255,0)\"],[.75,\"rgb(255,234,0)\"],[.875,\"rgb(255,111,0)\"],[1,\"rgb(255,0,0)\"]],Portland:[[0,\"rgb(12,51,131)\"],[.25,\"rgb(10,136,186)\"],[.5,\"rgb(242,211,56)\"],[.75,\"rgb(242,143,56)\"],[1,\"rgb(217,30,30)\"]],Jet:[[0,\"rgb(0,0,131)\"],[.125,\"rgb(0,60,170)\"],[.375,\"rgb(5,255,255)\"],[.625,\"rgb(255,255,0)\"],[.875,\"rgb(250,0,0)\"],[1,\"rgb(128,0,0)\"]],Hot:[[0,\"rgb(0,0,0)\"],[.3,\"rgb(230,0,0)\"],[.6,\"rgb(255,210,0)\"],[1,\"rgb(255,255,255)\"]],Blackbody:[[0,\"rgb(0,0,0)\"],[.2,\"rgb(230,0,0)\"],[.4,\"rgb(230,210,0)\"],[.7,\"rgb(255,255,255)\"],[1,\"rgb(160,200,255)\"]],Earth:[[0,\"rgb(0,0,130)\"],[.1,\"rgb(0,180,180)\"],[.2,\"rgb(40,210,40)\"],[.4,\"rgb(230,230,50)\"],[.6,\"rgb(120,70,20)\"],[1,\"rgb(255,255,255)\"]],Electric:[[0,\"rgb(0,0,0)\"],[.15,\"rgb(30,0,100)\"],[.4,\"rgb(120,0,100)\"],[.6,\"rgb(160,90,0)\"],[.8,\"rgb(230,200,0)\"],[1,\"rgb(255,250,220)\"]],Viridis:[[0,\"#440154\"],[.06274509803921569,\"#48186a\"],[.12549019607843137,\"#472d7b\"],[.18823529411764706,\"#424086\"],[.25098039215686274,\"#3b528b\"],[.3137254901960784,\"#33638d\"],[.3764705882352941,\"#2c728e\"],[.4392156862745098,\"#26828e\"],[.5019607843137255,\"#21918c\"],[.5647058823529412,\"#1fa088\"],[.6274509803921569,\"#28ae80\"],[.6901960784313725,\"#3fbc73\"],[.7529411764705882,\"#5ec962\"],[.8156862745098039,\"#84d44b\"],[.8784313725490196,\"#addc30\"],[.9411764705882353,\"#d8e219\"],[1,\"#fde725\"]],Cividis:[[0,\"rgb(0,32,76)\"],[.058824,\"rgb(0,42,102)\"],[.117647,\"rgb(0,52,110)\"],[.176471,\"rgb(39,63,108)\"],[.235294,\"rgb(60,74,107)\"],[.294118,\"rgb(76,85,107)\"],[.352941,\"rgb(91,95,109)\"],[.411765,\"rgb(104,106,112)\"],[.470588,\"rgb(117,117,117)\"],[.529412,\"rgb(131,129,120)\"],[.588235,\"rgb(146,140,120)\"],[.647059,\"rgb(161,152,118)\"],[.705882,\"rgb(176,165,114)\"],[.764706,\"rgb(192,177,109)\"],[.823529,\"rgb(209,191,102)\"],[.882353,\"rgb(225,204,92)\"],[.941176,\"rgb(243,219,79)\"],[1,\"rgb(255,233,69)\"]]},a=i.RdBu;function o(t){var e=0;if(!Array.isArray(t)||t.length<2)return!1;if(!t[0]||!t[t.length-1])return!1;if(0!=+t[0][0]||1!=+t[t.length-1][0])return!1;for(var n=0;n<t.length;n++){var i=t[n];if(2!==i.length||+i[0]<e||!r(i[1]).isValid())return!1;e=+i[0]}return!0}e.exports={scales:i,defaultScale:a,get:function(t,e){if(e||(e=a),!t)return e;function n(){try{t=i[t]||JSON.parse(t)}catch(n){t=e}}return\"string\"==typeof t&&(n(),\"string\"==typeof t&&n()),o(t)?t:e},isValid:function(t){return void 0!==i[t]||o(t)}}},{tinycolor2:576}],659:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,r,i){var a=(t-n)/(r-n),o=a+e/(r-n),s=(a+o)/2;return\"left\"===i||\"bottom\"===i?a:\"center\"===i||\"middle\"===i?s:\"right\"===i||\"top\"===i?o:a<2/3-s?a:o>4/3-s?o:s}},{}],660:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=[[\"sw-resize\",\"s-resize\",\"se-resize\"],[\"w-resize\",\"move\",\"e-resize\"],[\"nw-resize\",\"n-resize\",\"ne-resize\"]];e.exports=function(t,e,n,a){return t=\"left\"===n?0:\"center\"===n?1:\"right\"===n?2:r.constrain(Math.floor(3*t),0,2),e=\"bottom\"===a?0:\"middle\"===a?1:\"top\"===a?2:r.constrain(Math.floor(3*e),0,2),i[e][t]}},{\"../../lib\":778}],661:[function(t,e,n){\"use strict\";n.selectMode=function(t){return\"lasso\"===t||\"select\"===t},n.drawMode=function(t){return\"drawclosedpath\"===t||\"drawopenpath\"===t||\"drawline\"===t||\"drawrect\"===t||\"drawcircle\"===t},n.openMode=function(t){return\"drawline\"===t||\"drawopenpath\"===t},n.rectMode=function(t){return\"select\"===t||\"drawline\"===t||\"drawrect\"===t||\"drawcircle\"===t},n.freeMode=function(t){return\"lasso\"===t||\"drawclosedpath\"===t||\"drawopenpath\"===t},n.selectingOrDrawing=function(t){return n.freeMode(t)||n.rectMode(t)}},{}],662:[function(t,e,n){\"use strict\";var r=t(\"mouse-event-offset\"),i=t(\"has-hover\"),a=t(\"has-passive-events\"),o=t(\"../../lib\").removeElement,s=t(\"../../plots/cartesian/constants\"),l=e.exports={};l.align=t(\"./align\"),l.getCursor=t(\"./cursor\");var c=t(\"./unhover\");function u(){var t=document.createElement(\"div\");t.className=\"dragcover\";var e=t.style;return e.position=\"fixed\",e.left=0,e.right=0,e.top=0,e.bottom=0,e.zIndex=999999999,e.background=\"none\",document.body.appendChild(t),t}function h(t){return r(t.changedTouches?t.changedTouches[0]:t,document.body)}l.unhover=c.wrapped,l.unhoverRaw=c.raw,l.init=function(t){var e,n,r,c,d,f,p,m,g=t.gd,y=1,v=g._context.doubleClickDelay,_=t.element;g._mouseDownTime||(g._mouseDownTime=0),_.style.pointerEvents=\"all\",_.onmousedown=x,a?(_._ontouchstart&&_.removeEventListener(\"touchstart\",_._ontouchstart),_._ontouchstart=x,_.addEventListener(\"touchstart\",x,{passive:!1})):_.ontouchstart=x;var b=t.clampFn||function(t,e,n){return Math.abs(t)<n&&(t=0),Math.abs(e)<n&&(e=0),[t,e]};function x(a){g._dragged=!1,g._dragging=!0;var o=h(a);e=o[0],n=o[1],p=a.target,f=a,m=2===a.buttons||a.ctrlKey,void 0===a.clientX&&void 0===a.clientY&&(a.clientX=e,a.clientY=n),(r=(new Date).getTime())-g._mouseDownTime<v?y+=1:(y=1,g._mouseDownTime=r),t.prepFn&&t.prepFn(a,e,n),i&&!m?(d=u()).style.cursor=window.getComputedStyle(_).cursor:i||(d=document,c=window.getComputedStyle(document.documentElement).cursor,document.documentElement.style.cursor=window.getComputedStyle(_).cursor),document.addEventListener(\"mouseup\",k),document.addEventListener(\"touchend\",k),!1!==t.dragmode&&(a.preventDefault(),document.addEventListener(\"mousemove\",w),document.addEventListener(\"touchmove\",w,{passive:!1}))}function w(r){r.preventDefault();var i=h(r),a=b(i[0]-e,i[1]-n,t.minDrag||s.MINDRAG),o=a[0],c=a[1];(o||c)&&(g._dragged=!0,l.unhover(g)),g._dragged&&t.moveFn&&!m&&(g._dragdata={element:_,dx:o,dy:c},t.moveFn(o,c))}function k(e){if(delete g._dragdata,!1!==t.dragmode&&(e.preventDefault(),document.removeEventListener(\"mousemove\",w),document.removeEventListener(\"touchmove\",w)),document.removeEventListener(\"mouseup\",k),document.removeEventListener(\"touchend\",k),i?o(d):c&&(d.documentElement.style.cursor=c,c=null),g._dragging){if(g._dragging=!1,(new Date).getTime()-g._mouseDownTime>v&&(y=Math.max(y-1,1)),g._dragged)t.doneFn&&t.doneFn();else if(t.clickFn&&t.clickFn(y,f),!m){var n;try{n=new MouseEvent(\"click\",e)}catch(a){var r=h(e);(n=document.createEvent(\"MouseEvents\")).initMouseEvent(\"click\",e.bubbles,e.cancelable,e.view,e.detail,e.screenX,e.screenY,r[0],r[1],e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,e.relatedTarget)}p.dispatchEvent(n)}g._dragging=!1,g._dragged=!1}else g._dragged=!1}},l.coverSlip=u},{\"../../lib\":778,\"../../plots/cartesian/constants\":834,\"./align\":659,\"./cursor\":660,\"./unhover\":663,\"has-hover\":440,\"has-passive-events\":441,\"mouse-event-offset\":484}],663:[function(t,e,n){\"use strict\";var r=t(\"../../lib/events\"),i=t(\"../../lib/throttle\"),a=t(\"../../lib/dom\").getGraphDiv,o=t(\"../fx/constants\"),s=e.exports={};s.wrapped=function(t,e,n){(t=a(t))._fullLayout&&i.clear(t._fullLayout._uid+o.HOVERID),s.raw(t,e,n)},s.raw=function(t,e){var n=t._fullLayout,i=t._hoverdata;e||(e={}),e.target&&!1===r.triggerHandler(t,\"plotly_beforehover\",e)||(n._hoverlayer.selectAll(\"g\").remove(),n._hoverlayer.selectAll(\"line\").remove(),n._hoverlayer.selectAll(\"circle\").remove(),t._hoverdata=void 0,e.target&&i&&t.emit(\"plotly_unhover\",{event:e,points:i}))}},{\"../../lib/dom\":766,\"../../lib/events\":767,\"../../lib/throttle\":804,\"../fx/constants\":677}],664:[function(t,e,n){\"use strict\";n.dash={valType:\"string\",values:[\"solid\",\"dot\",\"dash\",\"longdash\",\"dashdot\",\"longdashdot\"],dflt:\"solid\",editType:\"style\"}},{}],665:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"fast-isnumeric\"),a=t(\"tinycolor2\"),o=t(\"../../registry\"),s=t(\"../color\"),l=t(\"../colorscale\"),c=t(\"../../lib\"),u=c.strTranslate,h=t(\"../../lib/svg_text_utils\"),d=t(\"../../constants/xmlns_namespaces\"),f=t(\"../../constants/alignment\").LINE_SPACING,p=t(\"../../constants/interactions\").DESELECTDIM,m=t(\"../../traces/scatter/subtypes\"),g=t(\"../../traces/scatter/make_bubble_size_func\"),y=t(\"../../components/fx/helpers\").appendArrayPointValue,v=e.exports={};v.font=function(t,e,n,r){c.isPlainObject(e)&&(r=e.color,n=e.size,e=e.family),e&&t.style(\"font-family\",e),n+1&&t.style(\"font-size\",n+\"px\"),r&&t.call(s.fill,r)},v.setPosition=function(t,e,n){t.attr(\"x\",e).attr(\"y\",n)},v.setSize=function(t,e,n){t.attr(\"width\",e).attr(\"height\",n)},v.setRect=function(t,e,n,r,i){t.call(v.setPosition,e,n).call(v.setSize,r,i)},v.translatePoint=function(t,e,n,r){var a=n.c2p(t.x),o=r.c2p(t.y);return!!(i(a)&&i(o)&&e.node())&&(\"text\"===e.node().nodeName?e.attr(\"x\",a).attr(\"y\",o):e.attr(\"transform\",u(a,o)),!0)},v.translatePoints=function(t,e,n){t.each((function(t){var i=r.select(this);v.translatePoint(t,i,e,n)}))},v.hideOutsideRangePoint=function(t,e,n,r,i,a){e.attr(\"display\",n.isPtWithinRange(t,i)&&r.isPtWithinRange(t,a)?null:\"none\")},v.hideOutsideRangePoints=function(t,e){if(e._hasClipOnAxisFalse){var n=e.xaxis,i=e.yaxis;t.each((function(e){var a=e[0].trace,s=a.xcalendar,l=a.ycalendar,c=o.traceIs(a,\"bar-like\")?\".bartext\":\".point,.textpoint\";t.selectAll(c).each((function(t){v.hideOutsideRangePoint(t,r.select(this),n,i,s,l)}))}))}},v.crispRound=function(t,e,n){return e&&i(e)?t._context.staticPlot?e:e<1?1:Math.round(e):n||0},v.singleLineStyle=function(t,e,n,r,i){e.style(\"fill\",\"none\");var a=(((t||[])[0]||{}).trace||{}).line||{},o=n||a.width||0,l=i||a.dash||\"\";s.stroke(e,r||a.color),v.dashLine(e,l,o)},v.lineGroupStyle=function(t,e,n,i){t.style(\"fill\",\"none\").each((function(t){var a=(((t||[])[0]||{}).trace||{}).line||{},o=e||a.width||0,l=i||a.dash||\"\";r.select(this).call(s.stroke,n||a.color).call(v.dashLine,l,o)}))},v.dashLine=function(t,e,n){e=v.dashStyle(e,n=+n||0),t.style({\"stroke-dasharray\":e,\"stroke-width\":n+\"px\"})},v.dashStyle=function(t,e){e=+e||1;var n=Math.max(e,3);return\"solid\"===t?t=\"\":\"dot\"===t?t=n+\"px,\"+n+\"px\":\"dash\"===t?t=3*n+\"px,\"+3*n+\"px\":\"longdash\"===t?t=5*n+\"px,\"+5*n+\"px\":\"dashdot\"===t?t=3*n+\"px,\"+n+\"px,\"+n+\"px,\"+n+\"px\":\"longdashdot\"===t&&(t=5*n+\"px,\"+2*n+\"px,\"+n+\"px,\"+2*n+\"px\"),t},v.singleFillStyle=function(t){var e=(((r.select(t.node()).data()[0]||[])[0]||{}).trace||{}).fillcolor;e&&t.call(s.fill,e)},v.fillGroupStyle=function(t){t.style(\"stroke-width\",0).each((function(t){var e=r.select(this);t[0].trace&&e.call(s.fill,t[0].trace.fillcolor)}))};var _=t(\"./symbol_defs\");v.symbolNames=[],v.symbolFuncs=[],v.symbolNeedLines={},v.symbolNoDot={},v.symbolNoFill={},v.symbolList=[],Object.keys(_).forEach((function(t){var e=_[t],n=e.n;v.symbolList.push(n,String(n),t,n+100,String(n+100),t+\"-open\"),v.symbolNames[n]=t,v.symbolFuncs[n]=e.f,e.needLine&&(v.symbolNeedLines[n]=!0),e.noDot?v.symbolNoDot[n]=!0:v.symbolList.push(n+200,String(n+200),t+\"-dot\",n+300,String(n+300),t+\"-open-dot\"),e.noFill&&(v.symbolNoFill[n]=!0)}));var b=v.symbolNames.length;function x(t,e){return v.symbolFuncs[t%100](e)+(t>=200?\"M0,0.5L0.5,0L0,-0.5L-0.5,0Z\":\"\")}v.symbolNumber=function(t){if(i(t))t=+t;else if(\"string\"==typeof t){var e=0;t.indexOf(\"-open\")>0&&(e=100,t=t.replace(\"-open\",\"\")),t.indexOf(\"-dot\")>0&&(e+=200,t=t.replace(\"-dot\",\"\")),(t=v.symbolNames.indexOf(t))>=0&&(t+=e)}return t%100>=b||t>=400?0:Math.floor(Math.max(t,0))};var w={x1:1,x2:0,y1:0,y2:0},k={x1:0,x2:0,y1:1,y2:0},M=r.format(\"~.1f\"),T={radial:{node:\"radialGradient\"},radialreversed:{node:\"radialGradient\",reversed:!0},horizontal:{node:\"linearGradient\",attrs:w},horizontalreversed:{node:\"linearGradient\",attrs:w,reversed:!0},vertical:{node:\"linearGradient\",attrs:k},verticalreversed:{node:\"linearGradient\",attrs:k,reversed:!0}};v.gradient=function(t,e,n,i,o,l){for(var u=o.length,h=T[i],d=new Array(u),f=0;f<u;f++)h.reversed?d[u-1-f]=[M(100*(1-o[f][0])),o[f][1]]:d[f]=[M(100*o[f][0]),o[f][1]];var p=e._fullLayout,m=\"g\"+p._uid+\"-\"+n,g=p._defs.select(\".gradients\").selectAll(\"#\"+m).data([i+d.join(\";\")],c.identity);g.exit().remove(),g.enter().append(h.node).each((function(){var t=r.select(this);h.attrs&&t.attr(h.attrs),t.attr(\"id\",m);var e=t.selectAll(\"stop\").data(d);e.exit().remove(),e.enter().append(\"stop\"),e.each((function(t){var e=a(t[1]);r.select(this).attr({offset:t[0]+\"%\",\"stop-color\":s.tinyRGB(e),\"stop-opacity\":e.getAlpha()})}))})),t.style(l,P(m,e)).style(l+\"-opacity\",null);var y=function(t){return\".\"+t.attr(\"class\").replace(/\\s/g,\".\")},v=y(r.select(t.node().parentNode))+\">\"+y(t);p._gradientUrlQueryParts[v]=1},v.initGradients=function(t){var e=t._fullLayout;c.ensureSingle(e._defs,\"g\",\"gradients\").selectAll(\"linearGradient,radialGradient\").remove(),e._gradientUrlQueryParts={}},v.pointStyle=function(t,e,n){if(t.size()){var i=v.makePointStyleFns(e);t.each((function(t){v.singlePointStyle(t,r.select(this),e,i,n)}))}},v.singlePointStyle=function(t,e,n,r,i){var a=n.marker,o=a.line;if(e.style(\"opacity\",r.selectedOpacityFn?r.selectedOpacityFn(t):void 0===t.mo?a.opacity:t.mo),r.ms2mrc){var l;l=\"various\"===t.ms||\"various\"===a.size?3:r.ms2mrc(t.ms),t.mrc=l,r.selectedSizeFn&&(l=t.mrc=r.selectedSizeFn(t));var u=v.symbolNumber(t.mx||a.symbol)||0;t.om=u%200>=100,e.attr(\"d\",x(u,l))}var h,d,f,p=!1;if(t.so?(f=o.outlierwidth,d=o.outliercolor,h=a.outliercolor):(f=(t.mlw+1||(o||{}).width+1||(t.trace?(t.trace.marker.line||{}).width:0)+1)-1||0,d=\"mlc\"in t?t.mlcc=r.lineScale(t.mlc):c.isArrayOrTypedArray(o.color)?s.defaultLine:o.color,c.isArrayOrTypedArray(a.color)&&(h=s.defaultLine,p=!0),h=\"mc\"in t?t.mcc=r.markerScale(t.mc):a.color||\"rgba(0,0,0,0)\",r.selectedColorFn&&(h=r.selectedColorFn(t))),t.om)e.call(s.stroke,h).style({\"stroke-width\":(f||1)+\"px\",fill:\"none\"});else{e.style(\"stroke-width\",(t.isBlank?0:f)+\"px\");var m=a.gradient,g=t.mgt;if(g?p=!0:g=m&&m.type,Array.isArray(g)&&(T[g=g[0]]||(g=0)),g&&\"none\"!==g){var y=t.mgc;y?p=!0:y=m.color;var _=n.uid;p&&(_+=\"-\"+t.i),v.gradient(e,i,_,g,[[0,y],[1,h]],\"fill\")}else s.fill(e,h);f&&s.stroke(e,d)}},v.makePointStyleFns=function(t){var e={},n=t.marker;return e.markerScale=v.tryColorscale(n,\"\"),e.lineScale=v.tryColorscale(n,\"line\"),o.traceIs(t,\"symbols\")&&(e.ms2mrc=m.isBubble(t)?g(t):function(){return(n.size||6)/2}),t.selectedpoints&&c.extendFlat(e,v.makeSelectedPointStyleFns(t)),e},v.makeSelectedPointStyleFns=function(t){var e={},n=t.marker||{},r=(t.selected||{}).marker||{},i=(t.unselected||{}).marker||{},a=r.opacity,s=i.opacity,l=void 0!==a,u=void 0!==s;(c.isArrayOrTypedArray(n.opacity)||l||u)&&(e.selectedOpacityFn=function(t){var e=void 0===t.mo?n.opacity:t.mo;return t.selected?l?a:e:u?s:p*e});var h=n.color,d=r.color,f=i.color;(d||f)&&(e.selectedColorFn=function(t){var e=t.mcc||h;return t.selected?d||e:f||e});var m=n.size,g=r.size,y=i.size,v=void 0!==g,_=void 0!==y;return o.traceIs(t,\"symbols\")&&(v||_)&&(e.selectedSizeFn=function(t){var e=t.mrc||m/2;return t.selected?v?g/2:e:_?y/2:e}),e},v.makeSelectedTextStyleFns=function(t){var e={},n=(t.textfont||{}).color,r=((t.selected||{}).textfont||{}).color,i=((t.unselected||{}).textfont||{}).color;return e.selectedTextColorFn=function(t){var e=t.tc||n;return t.selected?r||e:i||(r?e:s.addOpacity(e,p))},e},v.selectedPointStyle=function(t,e){if(t.size()&&e.selectedpoints){var n=v.makeSelectedPointStyleFns(e),i=e.marker||{},a=[];n.selectedOpacityFn&&a.push((function(t,e){t.style(\"opacity\",n.selectedOpacityFn(e))})),n.selectedColorFn&&a.push((function(t,e){s.fill(t,n.selectedColorFn(e))})),n.selectedSizeFn&&a.push((function(t,e){var r=e.mx||i.symbol||0,a=n.selectedSizeFn(e);t.attr(\"d\",x(v.symbolNumber(r),a)),e.mrc2=a})),a.length&&t.each((function(t){for(var e=r.select(this),n=0;n<a.length;n++)a[n](e,t)}))}},v.tryColorscale=function(t,e){var n=e?c.nestedProperty(t,e).get():t;return n&&(n.colorscale||n._colorAx)&&c.isArrayOrTypedArray(n.color)?l.makeColorScaleFuncFromTrace(n):c.identity};var S={start:1,end:-1,middle:0,bottom:1,top:-1};function A(t,e,n,i){var a=r.select(t.node().parentNode),o=-1!==e.indexOf(\"top\")?\"top\":-1!==e.indexOf(\"bottom\")?\"bottom\":\"middle\",s=-1!==e.indexOf(\"left\")?\"end\":-1!==e.indexOf(\"right\")?\"start\":\"middle\",l=i?i/.8+1:0,c=(h.lineCount(t)-1)*f+1,d=S[s]*l,p=.75*n+S[o]*l+(S[o]-1)*c*n/2;t.attr(\"text-anchor\",s),a.attr(\"transform\",u(d,p))}function L(t,e){var n=t.ts||e.textfont.size;return i(n)&&n>0?n:0}function C(t,e,n,i){var a=t[0]-e[0],o=t[1]-e[1],s=n[0]-e[0],l=n[1]-e[1],c=Math.pow(a*a+o*o,.25),u=Math.pow(s*s+l*l,.25),h=(u*u*a-c*c*s)*i,d=(u*u*o-c*c*l)*i,f=3*u*(c+u),p=3*c*(c+u);return[[r.round(e[0]+(f&&h/f),2),r.round(e[1]+(f&&d/f),2)],[r.round(e[0]-(p&&h/p),2),r.round(e[1]-(p&&d/p),2)]]}v.textPointStyle=function(t,e,n){if(t.size()){var i;if(e.selectedpoints){var a=v.makeSelectedTextStyleFns(e);i=a.selectedTextColorFn}var o=e.texttemplate,s=n._fullLayout;t.each((function(t){var a=r.select(this),l=o?c.extractOption(t,e,\"txt\",\"texttemplate\"):c.extractOption(t,e,\"tx\",\"text\");if(l||0===l){if(o){var u=e._module.formatLabels?e._module.formatLabels(t,e,s):{},d={};y(d,e,t.i),l=c.texttemplateString(l,u,s._d3locale,d,t,e._meta||{})}var f=t.tp||e.textposition,p=L(t,e),m=i?i(t):t.tc||e.textfont.color;a.call(v.font,t.tf||e.textfont.family,p,m).text(l).call(h.convertToTspans,n).call(A,f,p,t.mrc)}else a.remove()}))}},v.selectedTextStyle=function(t,e){if(t.size()&&e.selectedpoints){var n=v.makeSelectedTextStyleFns(e);t.each((function(t){var i=r.select(this),a=n.selectedTextColorFn(t),o=t.tp||e.textposition,l=L(t,e);s.fill(i,a),A(i,o,l,t.mrc2||t.mrc)}))}},v.smoothopen=function(t,e){if(t.length<3)return\"M\"+t.join(\"L\");var n,r=\"M\"+t[0],i=[];for(n=1;n<t.length-1;n++)i.push(C(t[n-1],t[n],t[n+1],e));for(r+=\"Q\"+i[0][0]+\" \"+t[1],n=2;n<t.length-1;n++)r+=\"C\"+i[n-2][1]+\" \"+i[n-1][0]+\" \"+t[n];return r+\"Q\"+i[t.length-3][1]+\" \"+t[t.length-1]},v.smoothclosed=function(t,e){if(t.length<3)return\"M\"+t.join(\"L\")+\"Z\";var n,r=\"M\"+t[0],i=t.length-1,a=[C(t[i],t[0],t[1],e)];for(n=1;n<i;n++)a.push(C(t[n-1],t[n],t[n+1],e));for(a.push(C(t[i-1],t[i],t[0],e)),n=1;n<=i;n++)r+=\"C\"+a[n-1][1]+\" \"+a[n][0]+\" \"+t[n];return r+\"C\"+a[i][1]+\" \"+a[0][0]+\" \"+t[0]+\"Z\"};var E={hv:function(t,e){return\"H\"+r.round(e[0],2)+\"V\"+r.round(e[1],2)},vh:function(t,e){return\"V\"+r.round(e[1],2)+\"H\"+r.round(e[0],2)},hvh:function(t,e){return\"H\"+r.round((t[0]+e[0])/2,2)+\"V\"+r.round(e[1],2)+\"H\"+r.round(e[0],2)},vhv:function(t,e){return\"V\"+r.round((t[1]+e[1])/2,2)+\"H\"+r.round(e[0],2)+\"V\"+r.round(e[1],2)}},O=function(t,e){return\"L\"+r.round(e[0],2)+\",\"+r.round(e[1],2)};v.steps=function(t){var e=E[t]||O;return function(t){for(var n=\"M\"+r.round(t[0][0],2)+\",\"+r.round(t[0][1],2),i=1;i<t.length;i++)n+=e(t[i-1],t[i]);return n}},v.makeTester=function(){var t=c.ensureSingleById(r.select(\"body\"),\"svg\",\"js-plotly-tester\",(function(t){t.attr(d.svgAttrs).style({position:\"absolute\",left:\"-10000px\",top:\"-10000px\",width:\"9000px\",height:\"9000px\",\"z-index\":\"1\"})})),e=c.ensureSingle(t,\"path\",\"js-reference-point\",(function(t){t.attr(\"d\",\"M0,0H1V1H0Z\").style({\"stroke-width\":0,fill:\"black\"})}));v.tester=t,v.testref=e},v.savedBBoxes={};var D=0;function I(t){var e=t.getAttribute(\"data-unformatted\");if(null!==e)return e+t.getAttribute(\"data-math\")+t.getAttribute(\"text-anchor\")+t.getAttribute(\"style\")}function P(t,e){if(!t)return null;var n=e._context;return\"url('\"+(n._exportedPlot?\"\":n._baseUrl||\"\")+\"#\"+t+\"')\"}v.bBox=function(t,e,n){var i,a,o;if(n||(n=I(t)),n){if(i=v.savedBBoxes[n])return c.extendFlat({},i)}else if(1===t.childNodes.length){var s=t.childNodes[0];if(n=I(s)){var l=+s.getAttribute(\"x\")||0,u=+s.getAttribute(\"y\")||0,d=s.getAttribute(\"transform\");if(!d){var f=v.bBox(s,!1,n);return l&&(f.left+=l,f.right+=l),u&&(f.top+=u,f.bottom+=u),f}if(i=v.savedBBoxes[n+=\"~\"+l+\"~\"+u+\"~\"+d])return c.extendFlat({},i)}}e?a=t:(o=v.tester.node(),a=t.cloneNode(!0),o.appendChild(a)),r.select(a).attr(\"transform\",null).call(h.positionText,0,0);var p=a.getBoundingClientRect(),m=v.testref.node().getBoundingClientRect();e||o.removeChild(a);var g={height:p.height,width:p.width,left:p.left-m.left,top:p.top-m.top,right:p.right-m.left,bottom:p.bottom-m.top};return D>=1e4&&(v.savedBBoxes={},D=0),n&&(v.savedBBoxes[n]=g),D++,c.extendFlat({},g)},v.setClipUrl=function(t,e,n){t.attr(\"clip-path\",P(e,n))},v.getTranslate=function(t){var e=(t[t.attr?\"attr\":\"getAttribute\"](\"transform\")||\"\").replace(/.*\\btranslate\\((-?\\d*\\.?\\d*)[^-\\d]*(-?\\d*\\.?\\d*)[^\\d].*/,(function(t,e,n){return[e,n].join(\" \")})).split(\" \");return{x:+e[0]||0,y:+e[1]||0}},v.setTranslate=function(t,e,n){var r=t.attr?\"attr\":\"setAttribute\",i=t[t.attr?\"attr\":\"getAttribute\"](\"transform\")||\"\";return e=e||0,n=n||0,i=i.replace(/(\\btranslate\\(.*?\\);?)/,\"\").trim(),i=(i+=u(e,n)).trim(),t[r](\"transform\",i),i},v.getScale=function(t){var e=(t[t.attr?\"attr\":\"getAttribute\"](\"transform\")||\"\").replace(/.*\\bscale\\((\\d*\\.?\\d*)[^\\d]*(\\d*\\.?\\d*)[^\\d].*/,(function(t,e,n){return[e,n].join(\" \")})).split(\" \");return{x:+e[0]||1,y:+e[1]||1}},v.setScale=function(t,e,n){var r=t.attr?\"attr\":\"setAttribute\",i=t[t.attr?\"attr\":\"getAttribute\"](\"transform\")||\"\";return e=e||1,n=n||1,i=i.replace(/(\\bscale\\(.*?\\);?)/,\"\").trim(),i=(i+=\"scale(\"+e+\",\"+n+\")\").trim(),t[r](\"transform\",i),i};var R=/\\s*sc.*/;v.setPointGroupScale=function(t,e,n){if(e=e||1,n=n||1,t){var r=1===e&&1===n?\"\":\"scale(\"+e+\",\"+n+\")\";t.each((function(){var t=(this.getAttribute(\"transform\")||\"\").replace(R,\"\");t=(t+=r).trim(),this.setAttribute(\"transform\",t)}))}};var z=/translate\\([^)]*\\)\\s*$/;v.setTextPointsScale=function(t,e,n){t&&t.each((function(){var t,i=r.select(this),a=i.select(\"text\");if(a.node()){var o=parseFloat(a.attr(\"x\")||0),s=parseFloat(a.attr(\"y\")||0),l=(i.attr(\"transform\")||\"\").match(z);t=1===e&&1===n?[]:[u(o,s),\"scale(\"+e+\",\"+n+\")\",u(-o,-s)],l&&t.push(l),i.attr(\"transform\",t.join(\"\"))}}))}},{\"../../components/fx/helpers\":679,\"../../constants/alignment\":745,\"../../constants/interactions\":752,\"../../constants/xmlns_namespaces\":754,\"../../lib\":778,\"../../lib/svg_text_utils\":803,\"../../registry\":911,\"../../traces/scatter/make_bubble_size_func\":1204,\"../../traces/scatter/subtypes\":1212,\"../color\":643,\"../colorscale\":655,\"./symbol_defs\":666,d3:169,\"fast-isnumeric\":241,tinycolor2:576}],666:[function(t,e,n){\"use strict\";var r=t(\"d3\");e.exports={circle:{n:0,f:function(t){var e=r.round(t,2);return\"M\"+e+\",0A\"+e+\",\"+e+\" 0 1,1 0,-\"+e+\"A\"+e+\",\"+e+\" 0 0,1 \"+e+\",0Z\"}},square:{n:1,f:function(t){var e=r.round(t,2);return\"M\"+e+\",\"+e+\"H-\"+e+\"V-\"+e+\"H\"+e+\"Z\"}},diamond:{n:2,f:function(t){var e=r.round(1.3*t,2);return\"M\"+e+\",0L0,\"+e+\"L-\"+e+\",0L0,-\"+e+\"Z\"}},cross:{n:3,f:function(t){var e=r.round(.4*t,2),n=r.round(1.2*t,2);return\"M\"+n+\",\"+e+\"H\"+e+\"V\"+n+\"H-\"+e+\"V\"+e+\"H-\"+n+\"V-\"+e+\"H-\"+e+\"V-\"+n+\"H\"+e+\"V-\"+e+\"H\"+n+\"Z\"}},x:{n:4,f:function(t){var e=r.round(.8*t/Math.sqrt(2),2),n=\"l\"+e+\",\"+e,i=\"l\"+e+\",-\"+e,a=\"l-\"+e+\",-\"+e,o=\"l-\"+e+\",\"+e;return\"M0,\"+e+n+i+a+i+a+o+a+o+n+o+n+\"Z\"}},\"triangle-up\":{n:5,f:function(t){var e=r.round(2*t/Math.sqrt(3),2);return\"M-\"+e+\",\"+r.round(t/2,2)+\"H\"+e+\"L0,-\"+r.round(t,2)+\"Z\"}},\"triangle-down\":{n:6,f:function(t){var e=r.round(2*t/Math.sqrt(3),2);return\"M-\"+e+\",-\"+r.round(t/2,2)+\"H\"+e+\"L0,\"+r.round(t,2)+\"Z\"}},\"triangle-left\":{n:7,f:function(t){var e=r.round(2*t/Math.sqrt(3),2);return\"M\"+r.round(t/2,2)+\",-\"+e+\"V\"+e+\"L-\"+r.round(t,2)+\",0Z\"}},\"triangle-right\":{n:8,f:function(t){var e=r.round(2*t/Math.sqrt(3),2);return\"M-\"+r.round(t/2,2)+\",-\"+e+\"V\"+e+\"L\"+r.round(t,2)+\",0Z\"}},\"triangle-ne\":{n:9,f:function(t){var e=r.round(.6*t,2),n=r.round(1.2*t,2);return\"M-\"+n+\",-\"+e+\"H\"+e+\"V\"+n+\"Z\"}},\"triangle-se\":{n:10,f:function(t){var e=r.round(.6*t,2),n=r.round(1.2*t,2);return\"M\"+e+\",-\"+n+\"V\"+e+\"H-\"+n+\"Z\"}},\"triangle-sw\":{n:11,f:function(t){var e=r.round(.6*t,2),n=r.round(1.2*t,2);return\"M\"+n+\",\"+e+\"H-\"+e+\"V-\"+n+\"Z\"}},\"triangle-nw\":{n:12,f:function(t){var e=r.round(.6*t,2),n=r.round(1.2*t,2);return\"M-\"+e+\",\"+n+\"V-\"+e+\"H\"+n+\"Z\"}},pentagon:{n:13,f:function(t){var e=r.round(.951*t,2),n=r.round(.588*t,2),i=r.round(-t,2),a=r.round(-.309*t,2);return\"M\"+e+\",\"+a+\"L\"+n+\",\"+r.round(.809*t,2)+\"H-\"+n+\"L-\"+e+\",\"+a+\"L0,\"+i+\"Z\"}},hexagon:{n:14,f:function(t){var e=r.round(t,2),n=r.round(t/2,2),i=r.round(t*Math.sqrt(3)/2,2);return\"M\"+i+\",-\"+n+\"V\"+n+\"L0,\"+e+\"L-\"+i+\",\"+n+\"V-\"+n+\"L0,-\"+e+\"Z\"}},hexagon2:{n:15,f:function(t){var e=r.round(t,2),n=r.round(t/2,2),i=r.round(t*Math.sqrt(3)/2,2);return\"M-\"+n+\",\"+i+\"H\"+n+\"L\"+e+\",0L\"+n+\",-\"+i+\"H-\"+n+\"L-\"+e+\",0Z\"}},octagon:{n:16,f:function(t){var e=r.round(.924*t,2),n=r.round(.383*t,2);return\"M-\"+n+\",-\"+e+\"H\"+n+\"L\"+e+\",-\"+n+\"V\"+n+\"L\"+n+\",\"+e+\"H-\"+n+\"L-\"+e+\",\"+n+\"V-\"+n+\"Z\"}},star:{n:17,f:function(t){var e=1.4*t,n=r.round(.225*e,2),i=r.round(.951*e,2),a=r.round(.363*e,2),o=r.round(.588*e,2),s=r.round(-e,2),l=r.round(-.309*e,2),c=r.round(.118*e,2),u=r.round(.809*e,2);return\"M\"+n+\",\"+l+\"H\"+i+\"L\"+a+\",\"+c+\"L\"+o+\",\"+u+\"L0,\"+r.round(.382*e,2)+\"L-\"+o+\",\"+u+\"L-\"+a+\",\"+c+\"L-\"+i+\",\"+l+\"H-\"+n+\"L0,\"+s+\"Z\"}},hexagram:{n:18,f:function(t){var e=r.round(.66*t,2),n=r.round(.38*t,2),i=r.round(.76*t,2);return\"M-\"+i+\",0l-\"+n+\",-\"+e+\"h\"+i+\"l\"+n+\",-\"+e+\"l\"+n+\",\"+e+\"h\"+i+\"l-\"+n+\",\"+e+\"l\"+n+\",\"+e+\"h-\"+i+\"l-\"+n+\",\"+e+\"l-\"+n+\",-\"+e+\"h-\"+i+\"Z\"}},\"star-triangle-up\":{n:19,f:function(t){var e=r.round(t*Math.sqrt(3)*.8,2),n=r.round(.8*t,2),i=r.round(1.6*t,2),a=r.round(4*t,2),o=\"A \"+a+\",\"+a+\" 0 0 1 \";return\"M-\"+e+\",\"+n+o+e+\",\"+n+o+\"0,-\"+i+o+\"-\"+e+\",\"+n+\"Z\"}},\"star-triangle-down\":{n:20,f:function(t){var e=r.round(t*Math.sqrt(3)*.8,2),n=r.round(.8*t,2),i=r.round(1.6*t,2),a=r.round(4*t,2),o=\"A \"+a+\",\"+a+\" 0 0 1 \";return\"M\"+e+\",-\"+n+o+\"-\"+e+\",-\"+n+o+\"0,\"+i+o+e+\",-\"+n+\"Z\"}},\"star-square\":{n:21,f:function(t){var e=r.round(1.1*t,2),n=r.round(2*t,2),i=\"A \"+n+\",\"+n+\" 0 0 1 \";return\"M-\"+e+\",-\"+e+i+\"-\"+e+\",\"+e+i+e+\",\"+e+i+e+\",-\"+e+i+\"-\"+e+\",-\"+e+\"Z\"}},\"star-diamond\":{n:22,f:function(t){var e=r.round(1.4*t,2),n=r.round(1.9*t,2),i=\"A \"+n+\",\"+n+\" 0 0 1 \";return\"M-\"+e+\",0\"+i+\"0,\"+e+i+e+\",0\"+i+\"0,-\"+e+i+\"-\"+e+\",0Z\"}},\"diamond-tall\":{n:23,f:function(t){var e=r.round(.7*t,2),n=r.round(1.4*t,2);return\"M0,\"+n+\"L\"+e+\",0L0,-\"+n+\"L-\"+e+\",0Z\"}},\"diamond-wide\":{n:24,f:function(t){var e=r.round(1.4*t,2),n=r.round(.7*t,2);return\"M0,\"+n+\"L\"+e+\",0L0,-\"+n+\"L-\"+e+\",0Z\"}},hourglass:{n:25,f:function(t){var e=r.round(t,2);return\"M\"+e+\",\"+e+\"H-\"+e+\"L\"+e+\",-\"+e+\"H-\"+e+\"Z\"},noDot:!0},bowtie:{n:26,f:function(t){var e=r.round(t,2);return\"M\"+e+\",\"+e+\"V-\"+e+\"L-\"+e+\",\"+e+\"V-\"+e+\"Z\"},noDot:!0},\"circle-cross\":{n:27,f:function(t){var e=r.round(t,2);return\"M0,\"+e+\"V-\"+e+\"M\"+e+\",0H-\"+e+\"M\"+e+\",0A\"+e+\",\"+e+\" 0 1,1 0,-\"+e+\"A\"+e+\",\"+e+\" 0 0,1 \"+e+\",0Z\"},needLine:!0,noDot:!0},\"circle-x\":{n:28,f:function(t){var e=r.round(t,2),n=r.round(t/Math.sqrt(2),2);return\"M\"+n+\",\"+n+\"L-\"+n+\",-\"+n+\"M\"+n+\",-\"+n+\"L-\"+n+\",\"+n+\"M\"+e+\",0A\"+e+\",\"+e+\" 0 1,1 0,-\"+e+\"A\"+e+\",\"+e+\" 0 0,1 \"+e+\",0Z\"},needLine:!0,noDot:!0},\"square-cross\":{n:29,f:function(t){var e=r.round(t,2);return\"M0,\"+e+\"V-\"+e+\"M\"+e+\",0H-\"+e+\"M\"+e+\",\"+e+\"H-\"+e+\"V-\"+e+\"H\"+e+\"Z\"},needLine:!0,noDot:!0},\"square-x\":{n:30,f:function(t){var e=r.round(t,2);return\"M\"+e+\",\"+e+\"L-\"+e+\",-\"+e+\"M\"+e+\",-\"+e+\"L-\"+e+\",\"+e+\"M\"+e+\",\"+e+\"H-\"+e+\"V-\"+e+\"H\"+e+\"Z\"},needLine:!0,noDot:!0},\"diamond-cross\":{n:31,f:function(t){var e=r.round(1.3*t,2);return\"M\"+e+\",0L0,\"+e+\"L-\"+e+\",0L0,-\"+e+\"ZM0,-\"+e+\"V\"+e+\"M-\"+e+\",0H\"+e},needLine:!0,noDot:!0},\"diamond-x\":{n:32,f:function(t){var e=r.round(1.3*t,2),n=r.round(.65*t,2);return\"M\"+e+\",0L0,\"+e+\"L-\"+e+\",0L0,-\"+e+\"ZM-\"+n+\",-\"+n+\"L\"+n+\",\"+n+\"M-\"+n+\",\"+n+\"L\"+n+\",-\"+n},needLine:!0,noDot:!0},\"cross-thin\":{n:33,f:function(t){var e=r.round(1.4*t,2);return\"M0,\"+e+\"V-\"+e+\"M\"+e+\",0H-\"+e},needLine:!0,noDot:!0,noFill:!0},\"x-thin\":{n:34,f:function(t){var e=r.round(t,2);return\"M\"+e+\",\"+e+\"L-\"+e+\",-\"+e+\"M\"+e+\",-\"+e+\"L-\"+e+\",\"+e},needLine:!0,noDot:!0,noFill:!0},asterisk:{n:35,f:function(t){var e=r.round(1.2*t,2),n=r.round(.85*t,2);return\"M0,\"+e+\"V-\"+e+\"M\"+e+\",0H-\"+e+\"M\"+n+\",\"+n+\"L-\"+n+\",-\"+n+\"M\"+n+\",-\"+n+\"L-\"+n+\",\"+n},needLine:!0,noDot:!0,noFill:!0},hash:{n:36,f:function(t){var e=r.round(t/2,2),n=r.round(t,2);return\"M\"+e+\",\"+n+\"V-\"+n+\"m-\"+n+\",0V\"+n+\"M\"+n+\",\"+e+\"H-\"+n+\"m0,-\"+n+\"H\"+n},needLine:!0,noFill:!0},\"y-up\":{n:37,f:function(t){var e=r.round(1.2*t,2),n=r.round(1.6*t,2),i=r.round(.8*t,2);return\"M-\"+e+\",\"+i+\"L0,0M\"+e+\",\"+i+\"L0,0M0,-\"+n+\"L0,0\"},needLine:!0,noDot:!0,noFill:!0},\"y-down\":{n:38,f:function(t){var e=r.round(1.2*t,2),n=r.round(1.6*t,2),i=r.round(.8*t,2);return\"M-\"+e+\",-\"+i+\"L0,0M\"+e+\",-\"+i+\"L0,0M0,\"+n+\"L0,0\"},needLine:!0,noDot:!0,noFill:!0},\"y-left\":{n:39,f:function(t){var e=r.round(1.2*t,2),n=r.round(1.6*t,2),i=r.round(.8*t,2);return\"M\"+i+\",\"+e+\"L0,0M\"+i+\",-\"+e+\"L0,0M-\"+n+\",0L0,0\"},needLine:!0,noDot:!0,noFill:!0},\"y-right\":{n:40,f:function(t){var e=r.round(1.2*t,2),n=r.round(1.6*t,2),i=r.round(.8*t,2);return\"M-\"+i+\",\"+e+\"L0,0M-\"+i+\",-\"+e+\"L0,0M\"+n+\",0L0,0\"},needLine:!0,noDot:!0,noFill:!0},\"line-ew\":{n:41,f:function(t){var e=r.round(1.4*t,2);return\"M\"+e+\",0H-\"+e},needLine:!0,noDot:!0,noFill:!0},\"line-ns\":{n:42,f:function(t){var e=r.round(1.4*t,2);return\"M0,\"+e+\"V-\"+e},needLine:!0,noDot:!0,noFill:!0},\"line-ne\":{n:43,f:function(t){var e=r.round(t,2);return\"M\"+e+\",-\"+e+\"L-\"+e+\",\"+e},needLine:!0,noDot:!0,noFill:!0},\"line-nw\":{n:44,f:function(t){var e=r.round(t,2);return\"M\"+e+\",\"+e+\"L-\"+e+\",-\"+e},needLine:!0,noDot:!0,noFill:!0},\"arrow-up\":{n:45,f:function(t){var e=r.round(t,2);return\"M0,0L-\"+e+\",\"+r.round(2*t,2)+\"H\"+e+\"Z\"},noDot:!0},\"arrow-down\":{n:46,f:function(t){var e=r.round(t,2);return\"M0,0L-\"+e+\",-\"+r.round(2*t,2)+\"H\"+e+\"Z\"},noDot:!0},\"arrow-left\":{n:47,f:function(t){var e=r.round(2*t,2),n=r.round(t,2);return\"M0,0L\"+e+\",-\"+n+\"V\"+n+\"Z\"},noDot:!0},\"arrow-right\":{n:48,f:function(t){var e=r.round(2*t,2),n=r.round(t,2);return\"M0,0L-\"+e+\",-\"+n+\"V\"+n+\"Z\"},noDot:!0},\"arrow-bar-up\":{n:49,f:function(t){var e=r.round(t,2);return\"M-\"+e+\",0H\"+e+\"M0,0L-\"+e+\",\"+r.round(2*t,2)+\"H\"+e+\"Z\"},needLine:!0,noDot:!0},\"arrow-bar-down\":{n:50,f:function(t){var e=r.round(t,2);return\"M-\"+e+\",0H\"+e+\"M0,0L-\"+e+\",-\"+r.round(2*t,2)+\"H\"+e+\"Z\"},needLine:!0,noDot:!0},\"arrow-bar-left\":{n:51,f:function(t){var e=r.round(2*t,2),n=r.round(t,2);return\"M0,-\"+n+\"V\"+n+\"M0,0L\"+e+\",-\"+n+\"V\"+n+\"Z\"},needLine:!0,noDot:!0},\"arrow-bar-right\":{n:52,f:function(t){var e=r.round(2*t,2),n=r.round(t,2);return\"M0,-\"+n+\"V\"+n+\"M0,0L-\"+e+\",-\"+n+\"V\"+n+\"Z\"},needLine:!0,noDot:!0}}},{d3:169}],667:[function(t,e,n){\"use strict\";e.exports={visible:{valType:\"boolean\",editType:\"calc\"},type:{valType:\"enumerated\",values:[\"percent\",\"constant\",\"sqrt\",\"data\"],editType:\"calc\"},symmetric:{valType:\"boolean\",editType:\"calc\"},array:{valType:\"data_array\",editType:\"calc\"},arrayminus:{valType:\"data_array\",editType:\"calc\"},value:{valType:\"number\",min:0,dflt:10,editType:\"calc\"},valueminus:{valType:\"number\",min:0,dflt:10,editType:\"calc\"},traceref:{valType:\"integer\",min:0,dflt:0,editType:\"style\"},tracerefminus:{valType:\"integer\",min:0,dflt:0,editType:\"style\"},copy_ystyle:{valType:\"boolean\",editType:\"plot\"},copy_zstyle:{valType:\"boolean\",editType:\"style\"},color:{valType:\"color\",editType:\"style\"},thickness:{valType:\"number\",min:0,dflt:2,editType:\"style\"},width:{valType:\"number\",min:0,editType:\"plot\"},editType:\"calc\",_deprecated:{opacity:{valType:\"number\",editType:\"style\"}}}},{}],668:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../registry\"),a=t(\"../../plots/cartesian/axes\"),o=t(\"../../lib\"),s=t(\"./compute_error\");function l(t,e,n,i){var l=e[\"error_\"+i]||{},c=[];if(l.visible&&-1!==[\"linear\",\"log\"].indexOf(n.type)){for(var u=s(l),h=0;h<t.length;h++){var d=t[h],f=d.i;if(void 0===f)f=h;else if(null===f)continue;var p=d[i];if(r(n.c2l(p))){var m=u(p,f);if(r(m[0])&&r(m[1])){var g=d[i+\"s\"]=p-m[0],y=d[i+\"h\"]=p+m[1];c.push(g,y)}}}var v=e._extremes[n._id],_=a.findExtremes(n,c,o.extendFlat({tozero:v.opts.tozero},{padded:!0}));v.min=v.min.concat(_.min),v.max=v.max.concat(_.max)}}e.exports=function(t){for(var e=t.calcdata,n=0;n<e.length;n++){var r=e[n],o=r[0].trace;if(!0===o.visible&&i.traceIs(o,\"errorBarsOK\")){var s=a.getFromId(t,o.xaxis),c=a.getFromId(t,o.yaxis);l(r,o,s,\"x\"),l(r,o,c,\"y\")}}}},{\"../../lib\":778,\"../../plots/cartesian/axes\":828,\"../../registry\":911,\"./compute_error\":669,\"fast-isnumeric\":241}],669:[function(t,e,n){\"use strict\";function r(t,e){return\"percent\"===t?function(t){return Math.abs(t*e/100)}:\"constant\"===t?function(){return Math.abs(e)}:\"sqrt\"===t?function(t){return Math.sqrt(Math.abs(t))}:void 0}e.exports=function(t){var e=t.type,n=t.symmetric;if(\"data\"===e){var i=t.array||[];if(n)return function(t,e){var n=+i[e];return[n,n]};var a=t.arrayminus||[];return function(t,e){var n=+i[e],r=+a[e];return isNaN(n)&&isNaN(r)?[NaN,NaN]:[r||0,n||0]}}var o=r(e,t.value),s=r(e,t.valueminus);return n||void 0===t.valueminus?function(t){var e=o(t);return[e,e]}:function(t){return[s(t),o(t)]}}},{}],670:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../registry\"),a=t(\"../../lib\"),o=t(\"../../plot_api/plot_template\"),s=t(\"./attributes\");e.exports=function(t,e,n,l){var c=\"error_\"+l.axis,u=o.newContainer(e,c),h=t[c]||{};function d(t,e){return a.coerce(h,u,s,t,e)}if(!1!==d(\"visible\",void 0!==h.array||void 0!==h.value||\"sqrt\"===h.type)){var f=d(\"type\",\"array\"in h?\"data\":\"percent\"),p=!0;\"sqrt\"!==f&&(p=d(\"symmetric\",!((\"data\"===f?\"arrayminus\":\"valueminus\")in h))),\"data\"===f?(d(\"array\"),d(\"traceref\"),p||(d(\"arrayminus\"),d(\"tracerefminus\"))):\"percent\"!==f&&\"constant\"!==f||(d(\"value\"),p||d(\"valueminus\"));var m=\"copy_\"+l.inherit+\"style\";l.inherit&&(e[\"error_\"+l.inherit]||{}).visible&&d(m,!(h.color||r(h.thickness)||r(h.width))),l.inherit&&u[m]||(d(\"color\",n),d(\"thickness\"),d(\"width\",i.traceIs(e,\"gl3d\")?0:4))}}},{\"../../lib\":778,\"../../plot_api/plot_template\":817,\"../../registry\":911,\"./attributes\":667,\"fast-isnumeric\":241}],671:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../plot_api/edit_types\").overrideAll,a=t(\"./attributes\"),o={error_x:r.extendFlat({},a),error_y:r.extendFlat({},a)};delete o.error_x.copy_zstyle,delete o.error_y.copy_zstyle,delete o.error_y.copy_ystyle;var s={error_x:r.extendFlat({},a),error_y:r.extendFlat({},a),error_z:r.extendFlat({},a)};delete s.error_x.copy_ystyle,delete s.error_y.copy_ystyle,delete s.error_z.copy_ystyle,delete s.error_z.copy_zstyle,e.exports={moduleType:\"component\",name:\"errorbars\",schema:{traces:{scatter:o,bar:o,histogram:o,scatter3d:i(s,\"calc\",\"nested\"),scattergl:i(o,\"calc\",\"nested\")}},supplyDefaults:t(\"./defaults\"),calc:t(\"./calc\"),makeComputeError:t(\"./compute_error\"),plot:t(\"./plot\"),style:t(\"./style\"),hoverInfo:function(t,e,n){(e.error_y||{}).visible&&(n.yerr=t.yh-t.y,e.error_y.symmetric||(n.yerrneg=t.y-t.ys)),(e.error_x||{}).visible&&(n.xerr=t.xh-t.x,e.error_x.symmetric||(n.xerrneg=t.x-t.xs))}}},{\"../../lib\":778,\"../../plot_api/edit_types\":810,\"./attributes\":667,\"./calc\":668,\"./compute_error\":669,\"./defaults\":670,\"./plot\":672,\"./style\":673}],672:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"fast-isnumeric\"),a=t(\"../drawing\"),o=t(\"../../traces/scatter/subtypes\");e.exports=function(t,e,n,s){var l=n.xaxis,c=n.yaxis,u=s&&s.duration>0;e.each((function(e){var h,d=e[0].trace,f=d.error_x||{},p=d.error_y||{};d.ids&&(h=function(t){return t.id});var m=o.hasMarkers(d)&&d.marker.maxdisplayed>0;p.visible||f.visible||(e=[]);var g=r.select(this).selectAll(\"g.errorbar\").data(e,h);if(g.exit().remove(),e.length){f.visible||g.selectAll(\"path.xerror\").remove(),p.visible||g.selectAll(\"path.yerror\").remove(),g.style(\"opacity\",1);var y=g.enter().append(\"g\").classed(\"errorbar\",!0);u&&y.style(\"opacity\",0).transition().duration(s.duration).style(\"opacity\",1),a.setClipUrl(g,n.layerClipId,t),g.each((function(t){var e=r.select(this),n=function(t,e,n){var r={x:e.c2p(t.x),y:n.c2p(t.y)};return void 0!==t.yh&&(r.yh=n.c2p(t.yh),r.ys=n.c2p(t.ys),i(r.ys)||(r.noYS=!0,r.ys=n.c2p(t.ys,!0))),void 0!==t.xh&&(r.xh=e.c2p(t.xh),r.xs=e.c2p(t.xs),i(r.xs)||(r.noXS=!0,r.xs=e.c2p(t.xs,!0))),r}(t,l,c);if(!m||t.vis){var a,o=e.select(\"path.yerror\");if(p.visible&&i(n.x)&&i(n.yh)&&i(n.ys)){var h=p.width;a=\"M\"+(n.x-h)+\",\"+n.yh+\"h\"+2*h+\"m-\"+h+\",0V\"+n.ys,n.noYS||(a+=\"m-\"+h+\",0h\"+2*h),o.size()?u&&(o=o.transition().duration(s.duration).ease(s.easing)):o=e.append(\"path\").style(\"vector-effect\",\"non-scaling-stroke\").classed(\"yerror\",!0),o.attr(\"d\",a)}else o.remove();var d=e.select(\"path.xerror\");if(f.visible&&i(n.y)&&i(n.xh)&&i(n.xs)){var g=(f.copy_ystyle?p:f).width;a=\"M\"+n.xh+\",\"+(n.y-g)+\"v\"+2*g+\"m0,-\"+g+\"H\"+n.xs,n.noXS||(a+=\"m0,-\"+g+\"v\"+2*g),d.size()?u&&(d=d.transition().duration(s.duration).ease(s.easing)):d=e.append(\"path\").style(\"vector-effect\",\"non-scaling-stroke\").classed(\"xerror\",!0),d.attr(\"d\",a)}else d.remove()}}))}}))}},{\"../../traces/scatter/subtypes\":1212,\"../drawing\":665,d3:169,\"fast-isnumeric\":241}],673:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../color\");e.exports=function(t){t.each((function(t){var e=t[0].trace,n=e.error_y||{},a=e.error_x||{},o=r.select(this);o.selectAll(\"path.yerror\").style(\"stroke-width\",n.thickness+\"px\").call(i.stroke,n.color),a.copy_ystyle&&(a=n),o.selectAll(\"path.xerror\").style(\"stroke-width\",a.thickness+\"px\").call(i.stroke,a.color)}))}},{\"../color\":643,d3:169}],674:[function(t,e,n){\"use strict\";var r=t(\"../../plots/font_attributes\"),i=t(\"./layout_attributes\").hoverlabel,a=t(\"../../lib/extend\").extendFlat;e.exports={hoverlabel:{bgcolor:a({},i.bgcolor,{arrayOk:!0}),bordercolor:a({},i.bordercolor,{arrayOk:!0}),font:r({arrayOk:!0,editType:\"none\"}),align:a({},i.align,{arrayOk:!0}),namelength:a({},i.namelength,{arrayOk:!0}),editType:\"none\"}}},{\"../../lib/extend\":768,\"../../plots/font_attributes\":856,\"./layout_attributes\":684}],675:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../registry\");function a(t,e,n,i){i=i||r.identity,Array.isArray(t)&&(e[0][n]=i(t))}e.exports=function(t){var e=t.calcdata,n=t._fullLayout;function o(t){return function(e){return r.coerceHoverinfo({hoverinfo:e},{_module:t._module},n)}}for(var s=0;s<e.length;s++){var l=e[s],c=l[0].trace;if(!i.traceIs(c,\"pie-like\")){var u=i.traceIs(c,\"2dMap\")?a:r.fillArray;u(c.hoverinfo,l,\"hi\",o(c)),c.hovertemplate&&u(c.hovertemplate,l,\"ht\"),c.hoverlabel&&(u(c.hoverlabel.bgcolor,l,\"hbg\"),u(c.hoverlabel.bordercolor,l,\"hbc\"),u(c.hoverlabel.font.size,l,\"hts\"),u(c.hoverlabel.font.color,l,\"htc\"),u(c.hoverlabel.font.family,l,\"htf\"),u(c.hoverlabel.namelength,l,\"hnl\"),u(c.hoverlabel.align,l,\"hta\"))}}}},{\"../../lib\":778,\"../../registry\":911}],676:[function(t,e,n){\"use strict\";var r=t(\"../../registry\"),i=t(\"./hover\").hover;e.exports=function(t,e,n){var a=r.getComponentMethod(\"annotations\",\"onClick\")(t,t._hoverdata);function o(){t.emit(\"plotly_click\",{points:t._hoverdata,event:e})}void 0!==n&&i(t,e,n,!0),t._hoverdata&&e&&e.target&&(a&&a.then?a.then(o):o(),e.stopImmediatePropagation&&e.stopImmediatePropagation())}},{\"../../registry\":911,\"./hover\":680}],677:[function(t,e,n){\"use strict\";e.exports={YANGLE:60,HOVERARROWSIZE:6,HOVERTEXTPAD:3,HOVERFONTSIZE:13,HOVERFONT:\"Arial, sans-serif\",HOVERMINTIME:50,HOVERID:\"-hover\"}},{}],678:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./attributes\"),a=t(\"./hoverlabel_defaults\");e.exports=function(t,e,n,o){var s=r.extendFlat({},o.hoverlabel);e.hovertemplate&&(s.namelength=-1),a(t,e,(function(n,a){return r.coerce(t,e,i,n,a)}),s)}},{\"../../lib\":778,\"./attributes\":674,\"./hoverlabel_defaults\":681}],679:[function(t,e,n){\"use strict\";var r=t(\"../../lib\");n.getSubplot=function(t){return t.subplot||t.xaxis+t.yaxis||t.geo},n.isTraceInSubplots=function(t,e){if(\"splom\"===t.type){for(var r=t.xaxes||[],i=t.yaxes||[],a=0;a<r.length;a++)for(var o=0;o<i.length;o++)if(-1!==e.indexOf(r[a]+i[o]))return!0;return!1}return-1!==e.indexOf(n.getSubplot(t))},n.flat=function(t,e){for(var n=new Array(t.length),r=0;r<t.length;r++)n[r]=e;return n},n.p2c=function(t,e){for(var n=new Array(t.length),r=0;r<t.length;r++)n[r]=t[r].p2c(e);return n},n.getDistanceFunction=function(t,e,r,i){return\"closest\"===t?i||n.quadrature(e,r):\"x\"===t.charAt(0)?e:r},n.getClosest=function(t,e,n){if(!1!==n.index)n.index>=0&&n.index<t.length?n.distance=0:n.index=!1;else for(var r=0;r<t.length;r++){var i=e(t[r]);i<=n.distance&&(n.index=r,n.distance=i)}return n},n.inbox=function(t,e,n){return t*e<0||0===t?n:1/0},n.quadrature=function(t,e){return function(n){var r=t(n),i=e(n);return Math.sqrt(r*r+i*i)}},n.makeEventData=function(t,e,r){var i=\"index\"in t?t.index:t.pointNumber,a={data:e._input,fullData:e,curveNumber:e.index,pointNumber:i};if(e._indexToPoints){var o=e._indexToPoints[i];1===o.length?a.pointIndex=o[0]:a.pointIndices=o}else a.pointIndex=i;return e._module.eventData?a=e._module.eventData(a,t,e,r,i):(\"xVal\"in t?a.x=t.xVal:\"x\"in t&&(a.x=t.x),\"yVal\"in t?a.y=t.yVal:\"y\"in t&&(a.y=t.y),t.xa&&(a.xaxis=t.xa),t.ya&&(a.yaxis=t.ya),void 0!==t.zLabelVal&&(a.z=t.zLabelVal)),n.appendArrayPointValue(a,e,i),a},n.appendArrayPointValue=function(t,e,n){var i=e._arrayAttrs;if(i)for(var s=0;s<i.length;s++){var l=i[s],c=a(l);if(void 0===t[c]){var u=o(r.nestedProperty(e,l).get(),n);void 0!==u&&(t[c]=u)}}},n.appendArrayMultiPointValues=function(t,e,n){var i=e._arrayAttrs;if(i)for(var s=0;s<i.length;s++){var l=i[s],c=a(l);if(void 0===t[c]){for(var u=r.nestedProperty(e,l).get(),h=new Array(n.length),d=0;d<n.length;d++)h[d]=o(u,n[d]);t[c]=h}}};var i={ids:\"id\",locations:\"location\",labels:\"label\",values:\"value\",\"marker.colors\":\"color\",parents:\"parent\"};function a(t){return i[t]||t}function o(t,e){return Array.isArray(e)?Array.isArray(t)&&Array.isArray(t[e[0]])?t[e[0]][e[1]]:void 0:t[e]}var s={x:!0,y:!0},l={\"x unified\":!0,\"y unified\":!0};n.isUnifiedHover=function(t){return\"string\"==typeof t&&!!l[t]},n.isXYhover=function(t){return\"string\"==typeof t&&!!s[t]}},{\"../../lib\":778}],680:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"fast-isnumeric\"),a=t(\"tinycolor2\"),o=t(\"../../lib\"),s=o.strTranslate,l=o.strRotate,c=t(\"../../lib/events\"),u=t(\"../../lib/svg_text_utils\"),h=t(\"../../lib/override_cursor\"),d=t(\"../drawing\"),f=t(\"../color\"),p=t(\"../dragelement\"),m=t(\"../../plots/cartesian/axes\"),g=t(\"../../registry\"),y=t(\"./helpers\"),v=t(\"./constants\"),_=t(\"../legend/defaults\"),b=t(\"../legend/draw\"),x=v.YANGLE,w=Math.PI*x/180,k=1/Math.sin(w),M=Math.cos(w),T=Math.sin(w),S=v.HOVERARROWSIZE,A=v.HOVERTEXTPAD;function L(t){return[t.trace.index,t.index,t.x0,t.y0,t.name,t.attr,t.xa,t.ya||\"\"].join(\",\")}n.hover=function(t,e,n,a){t=o.getGraphDiv(t),o.throttle(t._fullLayout._uid+v.HOVERID,v.HOVERMINTIME,(function(){!function(t,e,n,a){n||(n=\"xy\");var s=Array.isArray(n)?n:[n],l=t._fullLayout,u=l._plots||[],d=u[n],m=l._has(\"cartesian\");if(d){var v=d.overlays.map((function(t){return t.id}));s=s.concat(v)}for(var _=s.length,b=new Array(_),x=new Array(_),w=!1,M=0;M<_;M++){var T=s[M];if(u[T])w=!0,b[M]=u[T].xaxis,x[M]=u[T].yaxis;else{if(!l[T]||!l[T]._subplot)return void o.warn(\"Unrecognized subplot: \"+T);var S=l[T]._subplot;b[M]=S.xaxis,x[M]=S.yaxis}}var A=e.hovermode||l.hovermode;if(A&&!w&&(A=\"closest\"),-1===[\"x\",\"y\",\"closest\",\"x unified\",\"y unified\"].indexOf(A)||!t.calcdata||t.querySelector(\".zoombox\")||t._dragging)return p.unhoverRaw(t,e);var C,O,z,j,F,N,B,Y,H,V,U,W,q,G=-1===l.hoverdistance?1/0:l.hoverdistance,X=-1===l.spikedistance?1/0:l.spikedistance,Z=[],J=[],K={hLinePoint:null,vLinePoint:null},$=!1;if(Array.isArray(e))for(A=\"array\",z=0;z<e.length;z++)(F=t.calcdata[e[z].curveNumber||0])&&(N=F[0].trace,\"skip\"!==F[0].trace.hoverinfo&&(J.push(F),\"h\"===N.orientation&&($=!0)));else{for(j=0;j<t.calcdata.length;j++)\"skip\"!==(N=(F=t.calcdata[j])[0].trace).hoverinfo&&y.isTraceInSubplots(N,s)&&(J.push(F),\"h\"===N.orientation&&($=!0));var Q,tt;if(e.target){if(!1===c.triggerHandler(t,\"plotly_beforehover\",e))return;var et=e.target.getBoundingClientRect();Q=e.clientX-et.left,tt=e.clientY-et.top,l._calcInverseTransform(t);var nt=o.apply3DTransform(l._invTransform)(Q,tt);if(tt=nt[1],(Q=nt[0])<0||Q>b[0]._length||tt<0||tt>x[0]._length)return p.unhoverRaw(t,e)}else Q=\"xpx\"in e?e.xpx:b[0]._length/2,tt=\"ypx\"in e?e.ypx:x[0]._length/2;if(e.pointerX=Q+b[0]._offset,e.pointerY=tt+x[0]._offset,C=\"xval\"in e?y.flat(s,e.xval):y.p2c(b,Q),O=\"yval\"in e?y.flat(s,e.yval):y.p2c(x,tt),!i(C[0])||!i(O[0]))return o.warn(\"Fx.hover failed\",e,t),p.unhoverRaw(t,e)}var rt=1/0;function it(t,n){for(j=0;j<J.length;j++)if((F=J[j])&&F[0]&&F[0].trace&&!0===(N=F[0].trace).visible&&0!==N._length&&-1===[\"carpet\",\"contourcarpet\"].indexOf(N._module.name)){if(\"splom\"===N.type?B=s[Y=0]:(B=y.getSubplot(N),Y=s.indexOf(B)),y.isUnifiedHover(H=A)&&(H=H.charAt(0)),W={cd:F,trace:N,xa:b[Y],ya:x[Y],maxHoverDistance:G,maxSpikeDistance:X,index:!1,distance:Math.min(rt,G),spikeDistance:1/0,xSpike:void 0,ySpike:void 0,color:f.defaultLine,name:N.name,x0:void 0,x1:void 0,y0:void 0,y1:void 0,xLabelVal:void 0,yLabelVal:void 0,zLabelVal:void 0,text:void 0},l[B]&&(W.subplot=l[B]._subplot),l._splomScenes&&l._splomScenes[N.uid]&&(W.scene=l._splomScenes[N.uid]),q=Z.length,\"array\"===H){var r=e[j];\"pointNumber\"in r?(W.index=r.pointNumber,H=\"closest\"):(H=\"\",\"xval\"in r&&(V=r.xval,H=\"x\"),\"yval\"in r&&(U=r.yval,H=H?\"closest\":\"y\"))}else void 0!==t&&void 0!==n?(V=t,U=n):(V=C[Y],U=O[Y]);if(0!==G)if(N._module&&N._module.hoverPoints){var a=N._module.hoverPoints(W,V,U,H,l._hoverlayer);if(a)for(var c,u=0;u<a.length;u++)i((c=a[u]).x0)&&i(c.y0)&&Z.push(I(c,A))}else o.log(\"Unrecognized trace type in hover:\",N);if(\"closest\"===A&&Z.length>q&&(Z.splice(0,q),rt=Z[0].distance),m&&0!==X&&0===Z.length){W.distance=X,W.index=!1;var h=N._module.hoverPoints(W,V,U,\"closest\",l._hoverlayer);if(h&&(h=h.filter((function(t){return t.spikeDistance<=X}))),h&&h.length){var d,p=h.filter((function(t){return t.xa.showspikes&&\"hovered data\"!==t.xa.spikesnap}));if(p.length){var g=p[0];i(g.x0)&&i(g.y0)&&(d=ot(g),(!K.vLinePoint||K.vLinePoint.spikeDistance>d.spikeDistance)&&(K.vLinePoint=d))}var v=h.filter((function(t){return t.ya.showspikes&&\"hovered data\"!==t.ya.spikesnap}));if(v.length){var _=v[0];i(_.x0)&&i(_.y0)&&(d=ot(_),(!K.hLinePoint||K.hLinePoint.spikeDistance>d.spikeDistance)&&(K.hLinePoint=d))}}}}}function at(t,e){for(var n,r=null,i=1/0,a=0;a<t.length;a++)(n=t[a].spikeDistance)<=i&&n<=e&&(r=t[a],i=n);return r}function ot(t){return t?{xa:t.xa,ya:t.ya,x:void 0!==t.xSpike?t.xSpike:(t.x0+t.x1)/2,y:void 0!==t.ySpike?t.ySpike:(t.y0+t.y1)/2,distance:t.distance,spikeDistance:t.spikeDistance,curveNumber:t.trace.index,color:t.color,pointNumber:t.index}:null}it();var st={fullLayout:l,container:l._hoverlayer,outerContainer:l._paperdiv,event:e},lt=t._spikepoints;if(t._spikepoints={vLinePoint:K.vLinePoint,hLinePoint:K.hLinePoint},m&&0!==X&&0!==Z.length){var ct=at(Z.filter((function(t){return t.ya.showspikes})),X);K.hLinePoint=ot(ct);var ut=at(Z.filter((function(t){return t.xa.showspikes})),X);K.vLinePoint=ot(ut)}if(0===Z.length){var ht=p.unhoverRaw(t,e);return!m||null===K.hLinePoint&&null===K.vLinePoint||R(lt)&&P(t,K,st),ht}if(m&&R(lt)&&P(t,K,st),Z.sort((function(t,e){return t.distance-e.distance})),y.isXYhover(H)&&0!==Z[0].length&&\"splom\"!==Z[0].trace.type){var dt=Z[0],ft=dt.cd[dt.index],pt=\"group\"===l.boxmode||\"group\"===l.violinmode,mt=dt.xVal,gt=dt.xa;\"category\"===gt.type&&(mt=gt._categoriesMap[mt]),\"date\"===gt.type&&(mt=gt.d2c(mt)),ft&&ft.t&&ft.t.posLetter===gt._id&&pt&&(mt+=ft.t.dPos);var yt=dt.yVal;\"category\"===(gt=dt.ya).type&&(yt=gt._categoriesMap[yt]),\"date\"===gt.type&&(yt=gt.d2c(yt)),ft&&ft.t&&ft.t.posLetter===gt._id&&pt&&(yt+=ft.t.dPos),it(mt,yt);var vt={};Z=Z.filter((function(t){var e=L(t);if(!vt[e])return vt[e]=!0,vt[e]}))}var _t=t._hoverdata,bt=[];for(z=0;z<Z.length;z++){var xt=Z[z],wt=y.makeEventData(xt,xt.trace,xt.cd);if(!1!==xt.hovertemplate){var kt=!1;xt.cd[xt.index]&&xt.cd[xt.index].ht&&(kt=xt.cd[xt.index].ht),xt.hovertemplate=kt||xt.trace.hovertemplate||!1}xt.eventData=[wt],bt.push(wt)}t._hoverdata=bt;var Mt=\"y\"===A&&(J.length>1||Z.length>1)||\"closest\"===A&&$&&Z.length>1,Tt=f.combine(l.plot_bgcolor||f.background,l.paper_bgcolor),St=E(Z,{hovermode:A,rotateLabels:Mt,bgColor:Tt,container:l._hoverlayer,outerContainer:l._paperdiv,commonLabelOpts:l.hoverlabel,hoverdistance:l.hoverdistance},t);if(y.isUnifiedHover(A)||(function(t,e,n){var r,i,a,o,s,l,c,u=0,h=1,d=t.size(),f=new Array(d),p=0;function m(t){var e=t[0],n=t[t.length-1];if(a=n.pos+n.dp+n.size-e.pmax,(i=e.pmin-e.pos-e.dp+e.size)>.01){for(s=t.length-1;s>=0;s--)t[s].dp+=i;r=!1}if(!(a<.01)){if(i<-.01){for(s=t.length-1;s>=0;s--)t[s].dp-=a;r=!1}if(r){var c=0;for(o=0;o<t.length;o++)(l=t[o]).pos+l.dp+l.size>e.pmax&&c++;for(o=t.length-1;o>=0&&!(c<=0);o--)(l=t[o]).pos>e.pmax-1&&(l.del=!0,c--);for(o=0;o<t.length&&!(c<=0);o++)if((l=t[o]).pos<e.pmin+1)for(l.del=!0,c--,a=2*l.size,s=t.length-1;s>=0;s--)t[s].dp-=a;for(o=t.length-1;o>=0&&!(c<=0);o--)(l=t[o]).pos+l.dp+l.size>e.pmax&&(l.del=!0,c--)}}}for(t.each((function(t){var r=t[e],i=\"x\"===r._id.charAt(0),a=r.range;0===p&&a&&a[0]>a[1]!==i&&(h=-1),f[p++]=[{datum:t,traceIndex:t.trace.index,dp:0,pos:t.pos,posref:t.posref,size:t.by*(i?k:1)/2,pmin:0,pmax:i?n.width:n.height}]})),f.sort((function(t,e){return t[0].posref-e[0].posref||h*(e[0].traceIndex-t[0].traceIndex)}));!r&&u<=d;){for(u++,r=!0,o=0;o<f.length-1;){var g=f[o],y=f[o+1],v=g[g.length-1],_=y[0];if((i=v.pos+v.dp+v.size-_.pos-_.dp+_.size)>.01&&v.pmin===_.pmin&&v.pmax===_.pmax){for(s=y.length-1;s>=0;s--)y[s].dp+=i;for(g.push.apply(g,y),f.splice(o+1,1),c=0,s=g.length-1;s>=0;s--)c+=g[s].dp;for(a=c/g.length,s=g.length-1;s>=0;s--)g[s].dp-=a;r=!1}else o++}f.forEach(m)}for(o=f.length-1;o>=0;o--){var b=f[o];for(s=b.length-1;s>=0;s--){var x=b[s],w=x.datum;w.offset=x.dp,w.del=x.del}}}(St,Mt?\"xa\":\"ya\",l),D(St,Mt,l._invScaleX,l._invScaleY)),e.target&&e.target.tagName){var At=g.getComponentMethod(\"annotations\",\"hasClickToShow\")(t,bt);h(r.select(e.target),At?\"pointer\":\"\")}e.target&&!a&&function(t,e,n){if(!n||n.length!==t._hoverdata.length)return!0;for(var r=n.length-1;r>=0;r--){var i=n[r],a=t._hoverdata[r];if(i.curveNumber!==a.curveNumber||String(i.pointNumber)!==String(a.pointNumber)||String(i.pointNumbers)!==String(a.pointNumbers))return!0}return!1}(t,0,_t)&&(_t&&t.emit(\"plotly_unhover\",{event:e,points:_t}),t.emit(\"plotly_hover\",{event:e,points:t._hoverdata,xaxes:b,yaxes:x,xvals:C,yvals:O}))}(t,e,n,a)}))},n.loneHover=function(t,e){var n=!0;Array.isArray(t)||(n=!1,t=[t]);var i=t.map((function(t){return{color:t.color||f.defaultLine,x0:t.x0||t.x||0,x1:t.x1||t.x||0,y0:t.y0||t.y||0,y1:t.y1||t.y||0,xLabel:t.xLabel,yLabel:t.yLabel,zLabel:t.zLabel,text:t.text,name:t.name,idealAlign:t.idealAlign,borderColor:t.borderColor,fontFamily:t.fontFamily,fontSize:t.fontSize,fontColor:t.fontColor,nameLength:t.nameLength,textAlign:t.textAlign,trace:t.trace||{index:0,hoverinfo:\"\"},xa:{_offset:0},ya:{_offset:0},index:0,hovertemplate:t.hovertemplate||!1,eventData:t.eventData||!1,hovertemplateLabels:t.hovertemplateLabels||!1}})),a=r.select(e.container),o=e.outerContainer?r.select(e.outerContainer):a,s={hovermode:\"closest\",rotateLabels:!1,bgColor:e.bgColor||f.background,container:a,outerContainer:o},l=E(i,s,e.gd),c=0,u=0;return l.sort((function(t,e){return t.y0-e.y0})).each((function(t,n){var r=t.y0-t.by/2;t.offset=r-5<c?c-r+5:0,c=r+t.by+t.offset,n===e.anchorIndex&&(u=t.offset)})).each((function(t){t.offset-=u})),D(l,s.rotateLabels,e.gd._fullLayout._invScaleX,e.gd._fullLayout._invScaleY),n?l:l.node()};var C=/<extra>([\\s\\S]*)<\\/extra>/;function E(t,e,n){var i=n._fullLayout,a=e.hovermode,c=e.rotateLabels,h=e.bgColor,p=e.container,m=e.outerContainer,g=e.commonLabelOpts||{},w=e.fontFamily||v.HOVERFONT,k=e.fontSize||v.HOVERFONTSIZE,M=t[0],T=M.xa,C=M.ya,E=\"y\"===a.charAt(0)?\"yLabel\":\"xLabel\",D=M[E],I=(String(D)||\"\").split(\" \")[0],P=m.node().getBoundingClientRect(),R=P.top,z=P.width,j=P.height,F=void 0!==D&&M.distance<=e.hoverdistance&&(\"x\"===a||\"y\"===a);if(F){var N,B,Y=!0;for(N=0;N<t.length;N++)if(Y&&void 0===t[N].zLabel&&(Y=!1),B=t[N].hoverinfo||t[N].trace.hoverinfo){var H=Array.isArray(B)?B:B.split(\"+\");if(-1===H.indexOf(\"all\")&&-1===H.indexOf(a)){F=!1;break}}Y&&(F=!1)}var V=p.selectAll(\"g.axistext\").data(F?[0]:[]);function U(t){return t.filter((function(t){return void 0!==t.zLabelVal||(t[E]||\"\").split(\" \")[0]===I}))}if(V.enter().append(\"g\").classed(\"axistext\",!0),V.exit().remove(),V.each((function(){var e=r.select(this),l=o.ensureSingle(e,\"path\",\"\",(function(t){t.style({\"stroke-width\":\"1px\"})})),c=o.ensureSingle(e,\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),h=g.bgcolor||f.defaultLine,p=g.bordercolor||f.contrast(h),m=f.contrast(h),y={family:g.font.family||w,size:g.font.size||k,color:g.font.color||m};l.style({fill:h,stroke:p}),c.text(D).call(d.font,y).call(u.positionText,0,0).call(u.convertToTspans,n),e.attr(\"transform\",\"\");var v,_,b=c.node().getBoundingClientRect();if(\"x\"===a){var x=\"top\"===T.side?\"-\":\"\";c.attr(\"text-anchor\",\"middle\").call(u.positionText,0,\"top\"===T.side?R-b.bottom-S-A:R-b.top+S+A),_=C._offset+(\"top\"===T.side?0:C._length);var L=b.width/2+A;(v=T._offset+(M.x0+M.x1)/2)<L?(v=L,l.attr(\"d\",\"M-\"+(L-S)+\",0L-\"+(L-2*S)+\",\"+x+S+\"H\"+(A+b.width/2)+\"v\"+x+(2*A+b.height)+\"H-\"+L+\"V\"+x+S+\"Z\")):v>i.width-L?(v=i.width-L,l.attr(\"d\",\"M\"+(L-S)+\",0L\"+L+\",\"+x+S+\"v\"+x+(2*A+b.height)+\"H-\"+L+\"V\"+x+S+\"H\"+(L-2*S)+\"Z\")):l.attr(\"d\",\"M0,0L\"+S+\",\"+x+S+\"H\"+(A+b.width/2)+\"v\"+x+(2*A+b.height)+\"H-\"+(A+b.width/2)+\"V\"+x+S+\"H-\"+S+\"Z\")}else{var E,O,I;\"right\"===C.side?(E=\"start\",O=1,I=\"\",v=T._offset+T._length):(E=\"end\",O=-1,I=\"-\",v=T._offset),_=C._offset+(M.y0+M.y1)/2,c.attr(\"text-anchor\",E),l.attr(\"d\",\"M0,0L\"+I+S+\",\"+S+\"V\"+(A+b.height/2)+\"h\"+I+(2*A+b.width)+\"V-\"+(A+b.height/2)+\"H\"+I+S+\"V-\"+S+\"Z\");var P,z=b.height/2,j=R-b.top-z,F=\"clip\"+i._uid+\"commonlabel\"+C._id;if(v<b.width+2*A+S){P=\"M-\"+(S+A)+\"-\"+z+\"h-\"+(b.width-A)+\"V\"+z+\"h\"+(b.width-A)+\"Z\";var N=b.width-v+A;u.positionText(c,N,j),\"end\"===E&&c.selectAll(\"tspan\").each((function(){var t=r.select(this),e=d.tester.append(\"text\").text(t.text()).call(d.font,y),n=e.node().getBoundingClientRect();Math.round(n.width)<Math.round(b.width)&&t.attr(\"x\",N-n.width),e.remove()}))}else u.positionText(c,O*(A+S),j),P=null;var B=i._topclips.selectAll(\"#\"+F).data(P?[0]:[]);B.enter().append(\"clipPath\").attr(\"id\",F).append(\"path\"),B.exit().remove(),B.select(\"path\").attr(\"d\",P),d.setClipUrl(c,P?F:null,n)}e.attr(\"transform\",s(v,_)),t=U(t)})),y.isUnifiedHover(a)){if(p.selectAll(\"g.hovertext\").remove(),void 0!==D&&M.distance<=e.hoverdistance&&(t=U(t)),0===t.length)return;var W={};_({showlegend:!0,legend:{title:{text:D,font:i.hoverlabel.font},font:i.hoverlabel.font,bgcolor:i.hoverlabel.bgcolor,bordercolor:i.hoverlabel.bordercolor,borderwidth:1,tracegroupgap:7,traceorder:i.legend?i.legend.traceorder:void 0,orientation:\"v\"}},W,n._fullData);var q=W.legend;q.entries=[];for(var G=0;G<t.length;G++){var X=O(t[G],!0,a,i,D),Z=X[0],J=X[1],K=t[G];K.name=J,K.text=\"\"!==J?J+\" : \"+Z:Z;var $=K.cd[K.index];$&&($.mc&&(K.mc=$.mc),$.mcc&&(K.mc=$.mcc),$.mlc&&(K.mlc=$.mlc),$.mlcc&&(K.mlc=$.mlcc),$.mlw&&(K.mlw=$.mlw),$.mrc&&(K.mrc=$.mrc),$.dir&&(K.dir=$.dir)),K._distinct=!0,q.entries.push([K])}q.entries.sort((function(t,e){return t[0].trace.index-e[0].trace.index})),q.layer=p,b(n,q);var Q=o.mean(t.map((function(t){return(t.y0+t.y1)/2}))),tt=o.mean(t.map((function(t){return(t.x0+t.x1)/2}))),et=p.select(\"g.legend\"),nt=et.node().getBoundingClientRect(),rt=nt.width+2*A;!((tt+=T._offset)+rt<=z)&&tt-rt>=0?tt-=rt:tt+=2*A;var it=nt.height+2*A,at=(Q+=C._offset-nt.height/2)+it>=j;return it<=j&&(Q<=R?Q=C._offset+2*A:at&&(Q=j-it)),et.attr(\"transform\",s(tt,Q)),et}var ot=p.selectAll(\"g.hovertext\").data(t,(function(t){return L(t)}));return ot.enter().append(\"g\").classed(\"hovertext\",!0).each((function(){var t=r.select(this);t.append(\"rect\").call(f.fill,f.addOpacity(h,.8)),t.append(\"text\").classed(\"name\",!0),t.append(\"path\").style(\"stroke-width\",\"1px\"),t.append(\"text\").classed(\"nums\",!0).call(d.font,w,k)})),ot.exit().remove(),ot.each((function(t){var e=r.select(this).attr(\"transform\",\"\"),o=t.color;Array.isArray(o)&&(o=o[t.eventData[0].pointNumber]);var p=t.bgcolor||o,m=f.combine(f.opacity(p)?p:f.defaultLine,h),g=f.combine(f.opacity(o)?o:f.defaultLine,h),y=t.borderColor||f.contrast(m),v=O(t,F,a,i,D,e),_=v[0],b=v[1],M=e.select(\"text.nums\").call(d.font,t.fontFamily||w,t.fontSize||k,t.fontColor||y).text(_).attr(\"data-notex\",1).call(u.positionText,0,0).call(u.convertToTspans,n),T=e.select(\"text.name\"),L=0,C=0;if(b&&b!==_){T.call(d.font,t.fontFamily||w,t.fontSize||k,g).text(b).attr(\"data-notex\",1).call(u.positionText,0,0).call(u.convertToTspans,n);var E=T.node().getBoundingClientRect();L=E.width+2*A,C=E.height+2*A}else T.remove(),e.select(\"rect\").remove();e.select(\"path\").style({fill:m,stroke:y});var I,P,N=M.node().getBoundingClientRect(),B=t.xa._offset+(t.x0+t.x1)/2,Y=t.ya._offset+(t.y0+t.y1)/2,H=Math.abs(t.x1-t.x0),V=Math.abs(t.y1-t.y0),U=N.width+S+A+L;if(t.ty0=R-N.top,t.bx=N.width+2*A,t.by=Math.max(N.height+2*A,C),t.anchor=\"start\",t.txwidth=N.width,t.tx2width=L,t.offset=0,c)t.pos=B,I=Y+V/2+U<=j,P=Y-V/2-U>=0,\"top\"!==t.idealAlign&&I||!P?I?(Y+=V/2,t.anchor=\"start\"):t.anchor=\"middle\":(Y-=V/2,t.anchor=\"end\");else if(t.pos=Y,I=B+H/2+U<=z,P=B-H/2-U>=0,\"left\"!==t.idealAlign&&I||!P)if(I)B+=H/2,t.anchor=\"start\";else{t.anchor=\"middle\";var W=U/2,q=B+W-z,G=B-W;q>0&&(B-=q),G<0&&(B+=-G)}else B-=H/2,t.anchor=\"end\";M.attr(\"text-anchor\",t.anchor),L&&T.attr(\"text-anchor\",t.anchor),e.attr(\"transform\",s(B,Y)+(c?l(x):\"\"))})),ot}function O(t,e,n,r,i,a){var s=\"\",l=\"\";void 0!==t.nameOverride&&(t.name=t.nameOverride),t.name&&(t.trace._meta&&(t.name=o.templateString(t.name,t.trace._meta)),s=z(t.name,t.nameLength)),void 0!==t.zLabel?(void 0!==t.xLabel&&(l+=\"x: \"+t.xLabel+\"<br>\"),void 0!==t.yLabel&&(l+=\"y: \"+t.yLabel+\"<br>\"),\"choropleth\"!==t.trace.type&&\"choroplethmapbox\"!==t.trace.type&&(l+=(l?\"z: \":\"\")+t.zLabel)):e&&t[n.charAt(0)+\"Label\"]===i?l=t[(\"x\"===n.charAt(0)?\"y\":\"x\")+\"Label\"]||\"\":void 0===t.xLabel?void 0!==t.yLabel&&\"scattercarpet\"!==t.trace.type&&(l=t.yLabel):l=void 0===t.yLabel?t.xLabel:\"(\"+t.xLabel+\", \"+t.yLabel+\")\",!t.text&&0!==t.text||Array.isArray(t.text)||(l+=(l?\"<br>\":\"\")+t.text),void 0!==t.extraText&&(l+=(l?\"<br>\":\"\")+t.extraText),a&&\"\"===l&&!t.hovertemplate&&(\"\"===s&&a.remove(),l=s);var c=t.hovertemplate||!1;return c&&(l=(l=o.hovertemplateString(c,t.hovertemplateLabels||t,r._d3locale,t.eventData[0]||{},t.trace._meta)).replace(C,(function(e,n){return s=z(n,t.nameLength),\"\"}))),[l,s]}function D(t,e,n,i){var a=function(t){return t*n},o=function(t){return t*i};t.each((function(t){var n=r.select(this);if(t.del)return n.remove();var i=n.select(\"text.nums\"),s=t.anchor,l=\"end\"===s?-1:1,c={start:1,end:-1,middle:0}[s],h=c*(S+A),f=h+c*(t.txwidth+A),p=0,m=t.offset,g=\"middle\"===s;g&&(h-=t.tx2width/2,f+=t.txwidth/2+A),e&&(m*=-T,p=t.offset*M),n.select(\"path\").attr(\"d\",g?\"M-\"+a(t.bx/2+t.tx2width/2)+\",\"+o(m-t.by/2)+\"h\"+a(t.bx)+\"v\"+o(t.by)+\"h-\"+a(t.bx)+\"Z\":\"M0,0L\"+a(l*S+p)+\",\"+o(S+m)+\"v\"+o(t.by/2-S)+\"h\"+a(l*t.bx)+\"v-\"+o(t.by)+\"H\"+a(l*S+p)+\"V\"+o(m-S)+\"Z\");var y=p+h,v=m+t.ty0-t.by/2+A,_=t.textAlign||\"auto\";\"auto\"!==_&&(\"left\"===_&&\"start\"!==s?(i.attr(\"text-anchor\",\"start\"),y=g?-t.bx/2-t.tx2width/2+A:-t.bx-A):\"right\"===_&&\"end\"!==s&&(i.attr(\"text-anchor\",\"end\"),y=g?t.bx/2-t.tx2width/2-A:t.bx+A)),i.call(u.positionText,a(y),o(v)),t.tx2width&&(n.select(\"text.name\").call(u.positionText,a(f+c*A+p),o(m+t.ty0-t.by/2+A)),n.select(\"rect\").call(d.setRect,a(f+(c-1)*t.tx2width/2+p),o(m-t.by/2-1),a(t.tx2width),o(t.by+2)))}))}function I(t,e){var n=t.index,r=t.trace||{},a=t.cd[0],s=t.cd[n]||{};function l(t){return t||i(t)&&0===t}var c=Array.isArray(n)?function(t,e){var i=o.castOption(a,n,t);return l(i)?i:o.extractOption({},r,\"\",e)}:function(t,e){return o.extractOption(s,r,t,e)};function u(e,n,r){var i=c(n,r);l(i)&&(t[e]=i)}if(u(\"hoverinfo\",\"hi\",\"hoverinfo\"),u(\"bgcolor\",\"hbg\",\"hoverlabel.bgcolor\"),u(\"borderColor\",\"hbc\",\"hoverlabel.bordercolor\"),u(\"fontFamily\",\"htf\",\"hoverlabel.font.family\"),u(\"fontSize\",\"hts\",\"hoverlabel.font.size\"),u(\"fontColor\",\"htc\",\"hoverlabel.font.color\"),u(\"nameLength\",\"hnl\",\"hoverlabel.namelength\"),u(\"textAlign\",\"hta\",\"hoverlabel.align\"),t.posref=\"y\"===e||\"closest\"===e&&\"h\"===r.orientation?t.xa._offset+(t.x0+t.x1)/2:t.ya._offset+(t.y0+t.y1)/2,t.x0=o.constrain(t.x0,0,t.xa._length),t.x1=o.constrain(t.x1,0,t.xa._length),t.y0=o.constrain(t.y0,0,t.ya._length),t.y1=o.constrain(t.y1,0,t.ya._length),void 0!==t.xLabelVal&&(t.xLabel=\"xLabel\"in t?t.xLabel:m.hoverLabelText(t.xa,t.xLabelVal),t.xVal=t.xa.c2d(t.xLabelVal)),void 0!==t.yLabelVal&&(t.yLabel=\"yLabel\"in t?t.yLabel:m.hoverLabelText(t.ya,t.yLabelVal),t.yVal=t.ya.c2d(t.yLabelVal)),void 0!==t.zLabelVal&&void 0===t.zLabel&&(t.zLabel=String(t.zLabelVal)),!(isNaN(t.xerr)||\"log\"===t.xa.type&&t.xerr<=0)){var h=m.tickText(t.xa,t.xa.c2l(t.xerr),\"hover\").text;t.xLabel+=void 0!==t.xerrneg?\" +\"+h+\" / -\"+m.tickText(t.xa,t.xa.c2l(t.xerrneg),\"hover\").text:\" \\xb1 \"+h,\"x\"===e&&(t.distance+=1)}if(!(isNaN(t.yerr)||\"log\"===t.ya.type&&t.yerr<=0)){var d=m.tickText(t.ya,t.ya.c2l(t.yerr),\"hover\").text;t.yLabel+=void 0!==t.yerrneg?\" +\"+d+\" / -\"+m.tickText(t.ya,t.ya.c2l(t.yerrneg),\"hover\").text:\" \\xb1 \"+d,\"y\"===e&&(t.distance+=1)}var f=t.hoverinfo||t.trace.hoverinfo;return f&&\"all\"!==f&&(-1===(f=Array.isArray(f)?f:f.split(\"+\")).indexOf(\"x\")&&(t.xLabel=void 0),-1===f.indexOf(\"y\")&&(t.yLabel=void 0),-1===f.indexOf(\"z\")&&(t.zLabel=void 0),-1===f.indexOf(\"text\")&&(t.text=void 0),-1===f.indexOf(\"name\")&&(t.name=void 0)),t}function P(t,e,n){var r,i,o=n.container,s=n.fullLayout,l=s._size,c=n.event,u=!!e.hLinePoint,h=!!e.vLinePoint;if(o.selectAll(\".spikeline\").remove(),h||u){var p=f.combine(s.plot_bgcolor,s.paper_bgcolor);if(u){var g,y,v=e.hLinePoint;r=v&&v.xa,\"cursor\"===(i=v&&v.ya).spikesnap?(g=c.pointerX,y=c.pointerY):(g=r._offset+v.x,y=i._offset+v.y);var _,b,x=a.readability(v.color,p)<1.5?f.contrast(p):v.color,w=i.spikemode,k=i.spikethickness,M=i.spikecolor||x,T=m.getPxPosition(t,i);if(-1!==w.indexOf(\"toaxis\")||-1!==w.indexOf(\"across\")){if(-1!==w.indexOf(\"toaxis\")&&(_=T,b=g),-1!==w.indexOf(\"across\")){var S=i._counterDomainMin,A=i._counterDomainMax;\"free\"===i.anchor&&(S=Math.min(S,i.position),A=Math.max(A,i.position)),_=l.l+S*l.w,b=l.l+A*l.w}o.insert(\"line\",\":first-child\").attr({x1:_,x2:b,y1:y,y2:y,\"stroke-width\":k,stroke:M,\"stroke-dasharray\":d.dashStyle(i.spikedash,k)}).classed(\"spikeline\",!0).classed(\"crisp\",!0),o.insert(\"line\",\":first-child\").attr({x1:_,x2:b,y1:y,y2:y,\"stroke-width\":k+2,stroke:p}).classed(\"spikeline\",!0).classed(\"crisp\",!0)}-1!==w.indexOf(\"marker\")&&o.insert(\"circle\",\":first-child\").attr({cx:T+(\"right\"!==i.side?k:-k),cy:y,r:k,fill:M}).classed(\"spikeline\",!0)}if(h){var L,C,E=e.vLinePoint;i=E&&E.ya,\"cursor\"===(r=E&&E.xa).spikesnap?(L=c.pointerX,C=c.pointerY):(L=r._offset+E.x,C=i._offset+E.y);var O,D,I=a.readability(E.color,p)<1.5?f.contrast(p):E.color,P=r.spikemode,R=r.spikethickness,z=r.spikecolor||I,j=m.getPxPosition(t,r);if(-1!==P.indexOf(\"toaxis\")||-1!==P.indexOf(\"across\")){if(-1!==P.indexOf(\"toaxis\")&&(O=j,D=C),-1!==P.indexOf(\"across\")){var F=r._counterDomainMin,N=r._counterDomainMax;\"free\"===r.anchor&&(F=Math.min(F,r.position),N=Math.max(N,r.position)),O=l.t+(1-N)*l.h,D=l.t+(1-F)*l.h}o.insert(\"line\",\":first-child\").attr({x1:L,x2:L,y1:O,y2:D,\"stroke-width\":R,stroke:z,\"stroke-dasharray\":d.dashStyle(r.spikedash,R)}).classed(\"spikeline\",!0).classed(\"crisp\",!0),o.insert(\"line\",\":first-child\").attr({x1:L,x2:L,y1:O,y2:D,\"stroke-width\":R+2,stroke:p}).classed(\"spikeline\",!0).classed(\"crisp\",!0)}-1!==P.indexOf(\"marker\")&&o.insert(\"circle\",\":first-child\").attr({cx:L,cy:j-(\"top\"!==r.side?R:-R),r:R,fill:z}).classed(\"spikeline\",!0)}}}function R(t,e){return!e||e.vLinePoint!==t._spikepoints.vLinePoint||e.hLinePoint!==t._spikepoints.hLinePoint}function z(t,e){return u.plainText(t||\"\",{len:e,allowedTags:[\"br\",\"sub\",\"sup\",\"b\",\"i\",\"em\"]})}},{\"../../lib\":778,\"../../lib/events\":767,\"../../lib/override_cursor\":789,\"../../lib/svg_text_utils\":803,\"../../plots/cartesian/axes\":828,\"../../registry\":911,\"../color\":643,\"../dragelement\":662,\"../drawing\":665,\"../legend/defaults\":695,\"../legend/draw\":696,\"./constants\":677,\"./helpers\":679,d3:169,\"fast-isnumeric\":241,tinycolor2:576}],681:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../color\"),a=t(\"./helpers\").isUnifiedHover;e.exports=function(t,e,n,o){function s(t){o.font[t]||(o.font[t]=e.legend?e.legend.font[t]:e.font[t])}o=o||{},e&&a(e.hovermode)&&(o.font||(o.font={}),s(\"size\"),s(\"family\"),s(\"color\"),e.legend?(o.bgcolor||(o.bgcolor=i.combine(e.legend.bgcolor,e.paper_bgcolor)),o.bordercolor||(o.bordercolor=e.legend.bordercolor)):o.bgcolor||(o.bgcolor=e.paper_bgcolor)),n(\"hoverlabel.bgcolor\",o.bgcolor),n(\"hoverlabel.bordercolor\",o.bordercolor),n(\"hoverlabel.namelength\",o.namelength),r.coerceFont(n,\"hoverlabel.font\",o.font),n(\"hoverlabel.align\",o.align)}},{\"../../lib\":778,\"../color\":643,\"./helpers\":679}],682:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./layout_attributes\");e.exports=function(t,e,n){function a(n,a){return void 0!==e[n]?e[n]:r.coerce(t,e,i,n,a)}var o,s=a(\"clickmode\");return e._has(\"cartesian\")?s.indexOf(\"select\")>-1?o=\"closest\":(e._isHoriz=function(t,e){for(var n=e._scatterStackOpts||{},r=0;r<t.length;r++){var i=t[r];if(\"h\"!==i.orientation&&\"h\"!==((n[i.xaxis+i.yaxis]||{})[i.stackgroup]||{}).orientation)return!1}return!0}(n,e),o=e._isHoriz?\"y\":\"x\"):o=\"closest\",a(\"hovermode\",o)}},{\"../../lib\":778,\"./layout_attributes\":684}],683:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../lib\"),a=t(\"../dragelement\"),o=t(\"./helpers\"),s=t(\"./layout_attributes\"),l=t(\"./hover\");e.exports={moduleType:\"component\",name:\"fx\",constants:t(\"./constants\"),schema:{layout:s},attributes:t(\"./attributes\"),layoutAttributes:s,supplyLayoutGlobalDefaults:t(\"./layout_global_defaults\"),supplyDefaults:t(\"./defaults\"),supplyLayoutDefaults:t(\"./layout_defaults\"),calc:t(\"./calc\"),getDistanceFunction:o.getDistanceFunction,getClosest:o.getClosest,inbox:o.inbox,quadrature:o.quadrature,appendArrayPointValue:o.appendArrayPointValue,castHoverOption:function(t,e,n){return i.castOption(t,e,\"hoverlabel.\"+n)},castHoverinfo:function(t,e,n){return i.castOption(t,n,\"hoverinfo\",(function(n){return i.coerceHoverinfo({hoverinfo:n},{_module:t._module},e)}))},hover:l.hover,unhover:a.unhover,loneHover:l.loneHover,loneUnhover:function(t){var e=i.isD3Selection(t)?t:r.select(t);e.selectAll(\"g.hovertext\").remove(),e.selectAll(\".spikeline\").remove()},click:t(\"./click\")}},{\"../../lib\":778,\"../dragelement\":662,\"./attributes\":674,\"./calc\":675,\"./click\":676,\"./constants\":677,\"./defaults\":678,\"./helpers\":679,\"./hover\":680,\"./layout_attributes\":684,\"./layout_defaults\":685,\"./layout_global_defaults\":686,d3:169}],684:[function(t,e,n){\"use strict\";var r=t(\"./constants\"),i=t(\"../../plots/font_attributes\")({editType:\"none\"});i.family.dflt=r.HOVERFONT,i.size.dflt=r.HOVERFONTSIZE,e.exports={clickmode:{valType:\"flaglist\",flags:[\"event\",\"select\"],dflt:\"event\",editType:\"plot\",extras:[\"none\"]},dragmode:{valType:\"enumerated\",values:[\"zoom\",\"pan\",\"select\",\"lasso\",\"drawclosedpath\",\"drawopenpath\",\"drawline\",\"drawrect\",\"drawcircle\",\"orbit\",\"turntable\",!1],dflt:\"zoom\",editType:\"modebar\"},hovermode:{valType:\"enumerated\",values:[\"x\",\"y\",\"closest\",!1,\"x unified\",\"y unified\"],editType:\"modebar\"},hoverdistance:{valType:\"integer\",min:-1,dflt:20,editType:\"none\"},spikedistance:{valType:\"integer\",min:-1,dflt:20,editType:\"none\"},hoverlabel:{bgcolor:{valType:\"color\",editType:\"none\"},bordercolor:{valType:\"color\",editType:\"none\"},font:i,align:{valType:\"enumerated\",values:[\"left\",\"right\",\"auto\"],dflt:\"auto\",editType:\"none\"},namelength:{valType:\"integer\",min:-1,dflt:15,editType:\"none\"},editType:\"none\"},selectdirection:{valType:\"enumerated\",values:[\"h\",\"v\",\"d\",\"any\"],dflt:\"any\",editType:\"none\"}}},{\"../../plots/font_attributes\":856,\"./constants\":677}],685:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./helpers\").isUnifiedHover,a=t(\"./layout_attributes\"),o=t(\"./hovermode_defaults\"),s=t(\"./hoverlabel_defaults\");e.exports=function(t,e,n){function l(n,i){return r.coerce(t,e,a,n,i)}var c=o(t,e,n);c&&(l(\"hoverdistance\"),l(\"spikedistance\",i(c)?-1:void 0)),\"select\"===l(\"dragmode\")&&l(\"selectdirection\");var u=e._has(\"mapbox\"),h=e._has(\"geo\"),d=e._basePlotModules.length;\"zoom\"===e.dragmode&&((u||h)&&1===d||u&&h&&2===d)&&(e.dragmode=\"pan\"),s(t,e,l)}},{\"../../lib\":778,\"./helpers\":679,\"./hoverlabel_defaults\":681,\"./hovermode_defaults\":682,\"./layout_attributes\":684}],686:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./hoverlabel_defaults\"),a=t(\"./layout_attributes\");e.exports=function(t,e){i(t,e,(function(n,i){return r.coerce(t,e,a,n,i)}))}},{\"../../lib\":778,\"./hoverlabel_defaults\":681,\"./layout_attributes\":684}],687:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../lib/regex\").counter,a=t(\"../../plots/domain\").attributes,o=t(\"../../plots/cartesian/constants\").idRegex,s=t(\"../../plot_api/plot_template\"),l={rows:{valType:\"integer\",min:1,editType:\"plot\"},roworder:{valType:\"enumerated\",values:[\"top to bottom\",\"bottom to top\"],dflt:\"top to bottom\",editType:\"plot\"},columns:{valType:\"integer\",min:1,editType:\"plot\"},subplots:{valType:\"info_array\",freeLength:!0,dimensions:2,items:{valType:\"enumerated\",values:[i(\"xy\").toString(),\"\"],editType:\"plot\"},editType:\"plot\"},xaxes:{valType:\"info_array\",freeLength:!0,items:{valType:\"enumerated\",values:[o.x.toString(),\"\"],editType:\"plot\"},editType:\"plot\"},yaxes:{valType:\"info_array\",freeLength:!0,items:{valType:\"enumerated\",values:[o.y.toString(),\"\"],editType:\"plot\"},editType:\"plot\"},pattern:{valType:\"enumerated\",values:[\"independent\",\"coupled\"],dflt:\"coupled\",editType:\"plot\"},xgap:{valType:\"number\",min:0,max:1,editType:\"plot\"},ygap:{valType:\"number\",min:0,max:1,editType:\"plot\"},domain:a({name:\"grid\",editType:\"plot\",noGridCell:!0},{}),xside:{valType:\"enumerated\",values:[\"bottom\",\"bottom plot\",\"top plot\",\"top\"],dflt:\"bottom plot\",editType:\"plot\"},yside:{valType:\"enumerated\",values:[\"left\",\"left plot\",\"right plot\",\"right\"],dflt:\"left plot\",editType:\"plot\"},editType:\"plot\"};function c(t,e,n){var r=e[n+\"axes\"],i=Object.keys((t._splomAxes||{})[n]||{});return Array.isArray(r)?r:i.length?i:void 0}function u(t,e,n,r,i,a){var o=e(t+\"gap\",n),s=e(\"domain.\"+t);e(t+\"side\",r);for(var l=new Array(i),c=s[0],u=(s[1]-c)/(i-o),h=u*(1-o),d=0;d<i;d++){var f=c+u*d;l[a?i-1-d:d]=[f,f+h]}return l}function h(t,e,n,r,i){var a,o=new Array(n);function s(t,n){-1!==e.indexOf(n)&&void 0===r[n]?(o[t]=n,r[n]=t):o[t]=\"\"}if(Array.isArray(t))for(a=0;a<n;a++)s(a,t[a]);else for(s(0,i),a=1;a<n;a++)s(a,i+(a+1));return o}e.exports={moduleType:\"component\",name:\"grid\",schema:{layout:{grid:l}},layoutAttributes:l,sizeDefaults:function(t,e){var n=t.grid||{},i=c(e,n,\"x\"),a=c(e,n,\"y\");if(t.grid||i||a){var o,h,d=Array.isArray(n.subplots)&&Array.isArray(n.subplots[0]),f=Array.isArray(i),p=Array.isArray(a),m=f&&i!==n.xaxes&&p&&a!==n.yaxes;d?(o=n.subplots.length,h=n.subplots[0].length):(p&&(o=a.length),f&&(h=i.length));var g=s.newContainer(e,\"grid\"),y=k(\"rows\",o),v=k(\"columns\",h);if(y*v>1){d||f||p||\"independent\"===k(\"pattern\")&&(d=!0),g._hasSubplotGrid=d;var _,b,x=\"top to bottom\"===k(\"roworder\"),w=d?.3:.1;m&&e._splomGridDflt&&(_=e._splomGridDflt.xside,b=e._splomGridDflt.yside),g._domains={x:u(\"x\",k,d?.2:.1,_,v),y:u(\"y\",k,w,b,y,x)}}else delete e.grid}function k(t,e){return r.coerce(n,g,l,t,e)}},contentDefaults:function(t,e){var n=e.grid;if(n&&n._domains){var r,i,a,o,s,l,u,d=t.grid||{},f=e._subplots,p=n._hasSubplotGrid,m=n.rows,g=n.columns,y=\"independent\"===n.pattern,v=n._axisMap={};if(p){var _=d.subplots||[];l=n.subplots=new Array(m);var b=1;for(r=0;r<m;r++){var x=l[r]=new Array(g),w=_[r]||[];for(i=0;i<g;i++)if(y?(s=1===b?\"xy\":\"x\"+b+\"y\"+b,b++):s=w[i],x[i]=\"\",-1!==f.cartesian.indexOf(s)){if(u=s.indexOf(\"y\"),a=s.slice(0,u),o=s.slice(u),void 0!==v[a]&&v[a]!==i||void 0!==v[o]&&v[o]!==r)continue;x[i]=s,v[a]=i,v[o]=r}}}else{var k=c(e,d,\"x\"),M=c(e,d,\"y\");n.xaxes=h(k,f.xaxis,g,v,\"x\"),n.yaxes=h(M,f.yaxis,m,v,\"y\")}var T=n._anchors={},S=\"top to bottom\"===n.roworder;for(var A in v){var L,C,E,O=A.charAt(0),D=n[O+\"side\"];if(D.length<8)T[A]=\"free\";else if(\"x\"===O){if(\"t\"===D.charAt(0)===S?(L=0,C=1,E=m):(L=m-1,C=-1,E=-1),p){var I=v[A];for(r=L;r!==E;r+=C)if((s=l[r][I])&&(u=s.indexOf(\"y\"),s.slice(0,u)===A)){T[A]=s.slice(u);break}}else for(r=L;r!==E;r+=C)if(-1!==f.cartesian.indexOf(A+(o=n.yaxes[r]))){T[A]=o;break}}else if(\"l\"===D.charAt(0)?(L=0,C=1,E=g):(L=g-1,C=-1,E=-1),p){var P=v[A];for(r=L;r!==E;r+=C)if((s=l[P][r])&&(u=s.indexOf(\"y\"),s.slice(u)===A)){T[A]=s.slice(0,u);break}}else for(r=L;r!==E;r+=C)if(-1!==f.cartesian.indexOf((a=n.xaxes[r])+A)){T[A]=a;break}}}}}},{\"../../lib\":778,\"../../lib/regex\":795,\"../../plot_api/plot_template\":817,\"../../plots/cartesian/constants\":834,\"../../plots/domain\":855}],688:[function(t,e,n){\"use strict\";var r=t(\"../../plots/cartesian/constants\"),i=t(\"../../plot_api/plot_template\").templatedArray;t(\"../../constants/axis_placeable_objects\"),e.exports=i(\"image\",{visible:{valType:\"boolean\",dflt:!0,editType:\"arraydraw\"},source:{valType:\"string\",editType:\"arraydraw\"},layer:{valType:\"enumerated\",values:[\"below\",\"above\"],dflt:\"above\",editType:\"arraydraw\"},sizex:{valType:\"number\",dflt:0,editType:\"arraydraw\"},sizey:{valType:\"number\",dflt:0,editType:\"arraydraw\"},sizing:{valType:\"enumerated\",values:[\"fill\",\"contain\",\"stretch\"],dflt:\"contain\",editType:\"arraydraw\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,editType:\"arraydraw\"},x:{valType:\"any\",dflt:0,editType:\"arraydraw\"},y:{valType:\"any\",dflt:0,editType:\"arraydraw\"},xanchor:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"],dflt:\"left\",editType:\"arraydraw\"},yanchor:{valType:\"enumerated\",values:[\"top\",\"middle\",\"bottom\"],dflt:\"top\",editType:\"arraydraw\"},xref:{valType:\"enumerated\",values:[\"paper\",r.idRegex.x.toString()],dflt:\"paper\",editType:\"arraydraw\"},yref:{valType:\"enumerated\",values:[\"paper\",r.idRegex.y.toString()],dflt:\"paper\",editType:\"arraydraw\"},editType:\"arraydraw\"})},{\"../../constants/axis_placeable_objects\":746,\"../../plot_api/plot_template\":817,\"../../plots/cartesian/constants\":834}],689:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../lib/to_log_range\");e.exports=function(t,e,n,a){e=e||{};var o=\"log\"===n&&\"linear\"===e.type;if(o||\"linear\"===n&&\"log\"===e.type)for(var s,l,c=t._fullLayout.images,u=e._id.charAt(0),h=0;h<c.length;h++)if(l=\"images[\"+h+\"].\",(s=c[h])[u+\"ref\"]===e._id){var d=s[u],f=s[\"size\"+u],p=null,m=null;if(o){p=i(d,e.range);var g=f/Math.pow(10,p)/2;m=2*Math.log(g+Math.sqrt(1+g*g))/Math.LN10}else m=(p=Math.pow(10,d))*(Math.pow(10,f/2)-Math.pow(10,-f/2));r(p)?r(m)||(m=null):(p=null,m=null),a(l+u,p),a(l+\"size\"+u,m)}}},{\"../../lib/to_log_range\":805,\"fast-isnumeric\":241}],690:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../plots/cartesian/axes\"),a=t(\"../../plots/array_container_defaults\"),o=t(\"./attributes\");function s(t,e,n){function a(n,i){return r.coerce(t,e,o,n,i)}var s=a(\"source\");if(!a(\"visible\",!!s))return e;a(\"layer\"),a(\"xanchor\"),a(\"yanchor\"),a(\"sizex\"),a(\"sizey\"),a(\"sizing\"),a(\"opacity\");for(var l={_fullLayout:n},c=[\"x\",\"y\"],u=0;u<2;u++){var h=c[u],d=i.coerceRef(t,e,l,h,\"paper\",void 0);\"paper\"!==d&&i.getFromId(l,d)._imgIndices.push(e._index),i.coercePosition(e,l,a,d,h,0)}return e}e.exports=function(t,e){a(t,e,{name:\"images\",handleItemDefaults:s})}},{\"../../lib\":778,\"../../plots/array_container_defaults\":823,\"../../plots/cartesian/axes\":828,\"./attributes\":688}],691:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../drawing\"),a=t(\"../../plots/cartesian/axes\"),o=t(\"../../plots/cartesian/axis_ids\"),s=t(\"../../constants/xmlns_namespaces\");e.exports=function(t){var e,n,l=t._fullLayout,c=[],u={},h=[];for(n=0;n<l.images.length;n++){var d=l.images[n];if(d.visible)if(\"below\"===d.layer&&\"paper\"!==d.xref&&\"paper\"!==d.yref){e=o.ref2id(d.xref)+o.ref2id(d.yref);var f=l._plots[e];if(!f){h.push(d);continue}f.mainplot&&(e=f.mainplot.id),u[e]||(u[e]=[]),u[e].push(d)}else\"above\"===d.layer?c.push(d):h.push(d)}var p={left:{sizing:\"xMin\",offset:0},center:{sizing:\"xMid\",offset:-.5},right:{sizing:\"xMax\",offset:-1}},m={top:{sizing:\"YMin\",offset:0},middle:{sizing:\"YMid\",offset:-.5},bottom:{sizing:\"YMax\",offset:-1}};function g(e){var n=r.select(this);if(this._imgSrc!==e.source)if(n.attr(\"xmlns\",s.svg),e.source&&\"data:\"===e.source.slice(0,5))n.attr(\"xlink:href\",e.source),this._imgSrc=e.source;else{var i=new Promise((function(t){var r=new Image;function i(){n.remove(),t()}this.img=r,r.setAttribute(\"crossOrigin\",\"anonymous\"),r.onerror=i,r.onload=function(){var e=document.createElement(\"canvas\");e.width=this.width,e.height=this.height,e.getContext(\"2d\").drawImage(this,0,0);var r=e.toDataURL(\"image/png\");n.attr(\"xlink:href\",r),t()},n.on(\"error\",i),r.src=e.source,this._imgSrc=e.source}).bind(this));t._promises.push(i)}}function y(e){var n,o,s=r.select(this),c=a.getFromId(t,e.xref),u=a.getFromId(t,e.yref),h=\"domain\"===a.getRefType(e.xref),d=\"domain\"===a.getRefType(e.yref),f=l._size;n=void 0!==c?\"string\"==typeof e.xref&&h?c._length*e.sizex:Math.abs(c.l2p(e.sizex)-c.l2p(0)):e.sizex*f.w,o=void 0!==u?\"string\"==typeof e.yref&&d?u._length*e.sizey:Math.abs(u.l2p(e.sizey)-u.l2p(0)):e.sizey*f.h;var g,y,v=n*p[e.xanchor].offset,_=o*m[e.yanchor].offset,b=p[e.xanchor].sizing+m[e.yanchor].sizing;switch(g=void 0!==c?\"string\"==typeof e.xref&&h?c._length*e.x+c._offset:c.r2p(e.x)+c._offset:e.x*f.w+f.l,g+=v,y=void 0!==u?\"string\"==typeof e.yref&&d?u._length*(1-e.y)+u._offset:u.r2p(e.y)+u._offset:f.h-e.y*f.h+f.t,y+=_,e.sizing){case\"fill\":b+=\" slice\";break;case\"stretch\":b=\"none\"}s.attr({x:g,y:y,width:n,height:o,preserveAspectRatio:b,opacity:e.opacity});var x=(c&&\"domain\"!==a.getRefType(e.xref)?c._id:\"\")+(u&&\"domain\"!==a.getRefType(e.yref)?u._id:\"\");i.setClipUrl(s,x?\"clip\"+l._uid+x:null,t)}var v=l._imageLowerLayer.selectAll(\"image\").data(h),_=l._imageUpperLayer.selectAll(\"image\").data(c);v.enter().append(\"image\"),_.enter().append(\"image\"),v.exit().remove(),_.exit().remove(),v.each((function(t){g.bind(this)(t),y.bind(this)(t)})),_.each((function(t){g.bind(this)(t),y.bind(this)(t)}));var b=Object.keys(l._plots);for(n=0;n<b.length;n++){var x=l._plots[e=b[n]];if(x.imagelayer){var w=x.imagelayer.selectAll(\"image\").data(u[e]||[]);w.enter().append(\"image\"),w.exit().remove(),w.each((function(t){g.bind(this)(t),y.bind(this)(t)}))}}}},{\"../../constants/xmlns_namespaces\":754,\"../../plots/cartesian/axes\":828,\"../../plots/cartesian/axis_ids\":831,\"../drawing\":665,d3:169}],692:[function(t,e,n){\"use strict\";e.exports={moduleType:\"component\",name:\"images\",layoutAttributes:t(\"./attributes\"),supplyLayoutDefaults:t(\"./defaults\"),includeBasePlot:t(\"../../plots/cartesian/include_components\")(\"images\"),draw:t(\"./draw\"),convertCoords:t(\"./convert_coords\")}},{\"../../plots/cartesian/include_components\":840,\"./attributes\":688,\"./convert_coords\":689,\"./defaults\":690,\"./draw\":691}],693:[function(t,e,n){\"use strict\";var r=t(\"../../plots/font_attributes\"),i=t(\"../color/attributes\");e.exports={bgcolor:{valType:\"color\",editType:\"legend\"},bordercolor:{valType:\"color\",dflt:i.defaultLine,editType:\"legend\"},borderwidth:{valType:\"number\",min:0,dflt:0,editType:\"legend\"},font:r({editType:\"legend\"}),orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],dflt:\"v\",editType:\"legend\"},traceorder:{valType:\"flaglist\",flags:[\"reversed\",\"grouped\"],extras:[\"normal\"],editType:\"legend\"},tracegroupgap:{valType:\"number\",min:0,dflt:10,editType:\"legend\"},itemsizing:{valType:\"enumerated\",values:[\"trace\",\"constant\"],dflt:\"trace\",editType:\"legend\"},itemwidth:{valType:\"number\",min:30,dflt:30,editType:\"legend\"},itemclick:{valType:\"enumerated\",values:[\"toggle\",\"toggleothers\",!1],dflt:\"toggle\",editType:\"legend\"},itemdoubleclick:{valType:\"enumerated\",values:[\"toggle\",\"toggleothers\",!1],dflt:\"toggleothers\",editType:\"legend\"},x:{valType:\"number\",min:-2,max:3,editType:\"legend\"},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"left\",editType:\"legend\"},y:{valType:\"number\",min:-2,max:3,editType:\"legend\"},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],editType:\"legend\"},uirevision:{valType:\"any\",editType:\"none\"},valign:{valType:\"enumerated\",values:[\"top\",\"middle\",\"bottom\"],dflt:\"middle\",editType:\"legend\"},title:{text:{valType:\"string\",dflt:\"\",editType:\"legend\"},font:r({editType:\"legend\"}),side:{valType:\"enumerated\",values:[\"top\",\"left\",\"top left\"],editType:\"legend\"},editType:\"legend\"},editType:\"legend\"}},{\"../../plots/font_attributes\":856,\"../color/attributes\":642}],694:[function(t,e,n){\"use strict\";e.exports={scrollBarWidth:6,scrollBarMinHeight:20,scrollBarColor:\"#808BA4\",scrollBarMargin:4,scrollBarEnterAttrs:{rx:20,ry:3,width:0,height:0},titlePad:2,itemGap:5}},{}],695:[function(t,e,n){\"use strict\";var r=t(\"../../registry\"),i=t(\"../../lib\"),a=t(\"../../plot_api/plot_template\"),o=t(\"./attributes\"),s=t(\"../../plots/layout_attributes\"),l=t(\"./helpers\");e.exports=function(t,e,n){for(var c=t.legend||{},u=0,h=!1,d=\"normal\",f=0;f<n.length;f++){var p=n[f];p.visible&&((p.showlegend||p._dfltShowLegend&&!(p._module&&p._module.attributes&&p._module.attributes.showlegend&&!1===p._module.attributes.showlegend.dflt))&&(u++,p.showlegend&&(h=!0,(r.traceIs(p,\"pie-like\")||!0===p._input.showlegend)&&u++)),(r.traceIs(p,\"bar\")&&\"stack\"===e.barmode||-1!==[\"tonextx\",\"tonexty\"].indexOf(p.fill))&&(d=l.isGrouped({traceorder:d})?\"grouped+reversed\":\"reversed\"),void 0!==p.legendgroup&&\"\"!==p.legendgroup&&(d=l.isReversed({traceorder:d})?\"reversed+grouped\":\"grouped\"))}var m=i.coerce(t,e,s,\"showlegend\",h&&u>1);if(!1!==m||c.uirevision){var g=a.newContainer(e,\"legend\");if(x(\"uirevision\",e.uirevision),!1!==m){x(\"bgcolor\",e.paper_bgcolor),x(\"bordercolor\"),x(\"borderwidth\"),i.coerceFont(x,\"font\",e.font);var y,v,_,b=x(\"orientation\");\"h\"===b?(y=0,r.getComponentMethod(\"rangeslider\",\"isVisible\")(t.xaxis)?(v=1.1,_=\"bottom\"):(v=-.1,_=\"top\")):(y=1.02,v=1,_=\"auto\"),x(\"traceorder\",d),l.isGrouped(e.legend)&&x(\"tracegroupgap\"),x(\"itemsizing\"),x(\"itemwidth\"),x(\"itemclick\"),x(\"itemdoubleclick\"),x(\"x\",y),x(\"xanchor\"),x(\"y\",v),x(\"yanchor\",_),x(\"valign\"),i.noneOrAll(c,g,[\"x\",\"y\"]),x(\"title.text\")&&(x(\"title.side\",\"h\"===b?\"left\":\"top\"),i.coerceFont(x,\"title.font\",e.font))}}function x(t,e){return i.coerce(c,g,o,t,e)}}},{\"../../lib\":778,\"../../plot_api/plot_template\":817,\"../../plots/layout_attributes\":882,\"../../registry\":911,\"./attributes\":693,\"./helpers\":699}],696:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../lib\"),a=t(\"../../plots/plots\"),o=t(\"../../registry\"),s=t(\"../../lib/events\"),l=t(\"../dragelement\"),c=t(\"../drawing\"),u=t(\"../color\"),h=t(\"../../lib/svg_text_utils\"),d=t(\"./handle_click\"),f=t(\"./constants\"),p=t(\"../../constants/alignment\"),m=p.LINE_SPACING,g=p.FROM_TL,y=p.FROM_BR,v=t(\"./get_legend_data\"),_=t(\"./style\"),b=t(\"./helpers\");function x(t,e,n,r,i){var a=n.data()[0][0].trace,l={event:i,node:n.node(),curveNumber:a.index,expandedIndex:a._expandedIndex,data:t.data,layout:t.layout,frames:t._transitionData._frames,config:t._context,fullData:t._fullData,fullLayout:t._fullLayout};a._group&&(l.group=a._group),o.traceIs(a,\"pie-like\")&&(l.label=n.datum()[0].label),!1!==s.triggerHandler(t,\"plotly_legendclick\",l)&&(1===r?e._clickTimeout=setTimeout((function(){d(n,t,r)}),t._context.doubleClickDelay):2===r&&(e._clickTimeout&&clearTimeout(e._clickTimeout),t._legendMouseDownTime=0,!1!==s.triggerHandler(t,\"plotly_legenddoubleclick\",l)&&d(n,t,r)))}function w(t,e,n){var r,a=t.data()[0][0],s=a.trace,l=o.traceIs(s,\"pie-like\"),u=s.index,d=n._main&&e._context.edits.legendText&&!l,p=n._maxNameLength;n.entries?r=a.text:(r=l?a.label:s.name,s._meta&&(r=i.templateString(r,s._meta)));var m=i.ensureSingle(t,\"text\",\"legendtext\");m.attr(\"text-anchor\",\"start\").call(c.font,n.font).text(d?k(r,p):r),h.positionText(m,n.itemwidth+2*f.itemGap,0),d?m.call(h.makeEditable,{gd:e,text:r}).call(T,t,e,n).on(\"edit\",(function(r){this.text(k(r,p)).call(T,t,e,n);var s=a.trace._fullInput||{},l={};if(o.hasTransform(s,\"groupby\")){var c=o.getTransformIndices(s,\"groupby\"),h=i.keyedContainer(s,\"transforms[\"+c[c.length-1]+\"].styles\",\"target\",\"value.name\");h.set(a.trace._group,r),l=h.constructUpdate()}else l.name=r;return o.call(\"_guiRestyle\",e,l,u)})):T(m,t,e,n)}function k(t,e){var n=Math.max(4,e);if(t&&t.trim().length>=n/2)return t;for(var r=n-(t=t||\"\").length;r>0;r--)t+=\" \";return t}function M(t,e){var n,a=e._context.doubleClickDelay,o=1,s=i.ensureSingle(t,\"rect\",\"legendtoggle\",(function(t){e._context.staticPlot||t.style(\"cursor\",\"pointer\").attr(\"pointer-events\",\"all\"),t.call(u.fill,\"rgba(0,0,0,0)\")}));e._context.staticPlot||(s.on(\"mousedown\",(function(){(n=(new Date).getTime())-e._legendMouseDownTime<a?o+=1:(o=1,e._legendMouseDownTime=n)})),s.on(\"mouseup\",(function(){if(!e._dragged&&!e._editing){var n=e._fullLayout.legend;(new Date).getTime()-e._legendMouseDownTime>a&&(o=Math.max(o-1,1)),x(e,n,t,o,r.event)}})))}function T(t,e,n,r){r._main||t.attr(\"data-notex\",!0),h.convertToTspans(t,n,(function(){!function(t,e,n){var r=t.data()[0][0];if(n._main&&r&&!r.trace.showlegend)t.remove();else{var i=t.select(\"g[class*=math-group]\"),a=i.node();n||(n=e._fullLayout.legend);var o,s,l=n.borderwidth,u=(r?n:n.title).font.size*m;if(a){var d=c.bBox(a);o=d.height,s=d.width,r?c.setTranslate(i,0,.25*o):c.setTranslate(i,l,.75*o+l)}else{var p=t.select(r?\".legendtext\":\".legendtitletext\"),g=h.lineCount(p),y=p.node();o=u*g,s=y?c.bBox(y).width:0,r?h.positionText(p,n.itemwidth+2*f.itemGap,-u*((g-1)/2-.3)):h.positionText(p,f.titlePad+l,u+l)}r?(r.lineHeight=u,r.height=Math.max(o,16)+3,r.width=s):(n._titleWidth=s,n._titleHeight=o)}}(e,n,r)}))}function S(t){return i.isRightAnchor(t)?\"right\":i.isCenterAnchor(t)?\"center\":\"left\"}function A(t){return i.isBottomAnchor(t)?\"bottom\":i.isMiddleAnchor(t)?\"middle\":\"top\"}e.exports=function(t,e){var n,s=t._fullLayout,h=\"legend\"+s._uid;if(e?(n=e.layer,h+=\"-hover\"):((e=s.legend||{})._main=!0,n=s._infolayer),n){var d;if(t._legendMouseDownTime||(t._legendMouseDownTime=0),e._main){if(!t.calcdata)return;d=s.showlegend&&v(t.calcdata,e)}else{if(!e.entries)return;d=v(e.entries,e)}var p=s.hiddenlabels||[];if(e._main&&(!s.showlegend||!d.length))return n.selectAll(\".legend\").remove(),s._topdefs.select(\"#\"+h).remove(),a.autoMargin(t,\"legend\");var m=i.ensureSingle(n,\"g\",\"legend\",(function(t){e._main&&t.attr(\"pointer-events\",\"all\")})),k=i.ensureSingleById(s._topdefs,\"clipPath\",h,(function(t){t.append(\"rect\")})),L=i.ensureSingle(m,\"rect\",\"bg\",(function(t){t.attr(\"shape-rendering\",\"crispEdges\")}));L.call(u.stroke,e.bordercolor).call(u.fill,e.bgcolor).style(\"stroke-width\",e.borderwidth+\"px\");var C=i.ensureSingle(m,\"g\",\"scrollbox\"),E=e.title;if(e._titleWidth=0,e._titleHeight=0,E.text){var O=i.ensureSingle(C,\"text\",\"legendtitletext\");O.attr(\"text-anchor\",\"start\").call(c.font,E.font).text(E.text),T(O,C,t,e)}else C.selectAll(\".legendtitletext\").remove();var D=i.ensureSingle(m,\"rect\",\"scrollbar\",(function(t){t.attr(f.scrollBarEnterAttrs).call(u.fill,f.scrollBarColor)})),I=C.selectAll(\"g.groups\").data(d);I.enter().append(\"g\").attr(\"class\",\"groups\"),I.exit().remove();var P=I.selectAll(\"g.traces\").data(i.identity);P.enter().append(\"g\").attr(\"class\",\"traces\"),P.exit().remove(),P.style(\"opacity\",(function(t){var e=t[0].trace;return o.traceIs(e,\"pie-like\")?-1!==p.indexOf(t[0].label)?.5:1:\"legendonly\"===e.visible?.5:1})).each((function(){r.select(this).call(w,t,e)})).call(_,t,e).each((function(){e._main&&r.select(this).call(M,t)})),i.syncOrAsync([a.previousPromises,function(){return function(t,e,n,i){var a=t._fullLayout;i||(i=a.legend);var o=a._size,s=b.isVertical(i),l=b.isGrouped(i),u=i.borderwidth,h=2*u,d=f.itemGap,p=i.itemwidth+2*d,m=2*(u+d),g=A(i),y=i.y<0||0===i.y&&\"top\"===g,v=i.y>1||1===i.y&&\"bottom\"===g;i._maxHeight=Math.max(y||v?a.height/2:o.h,30);var _=0;i._width=0,i._height=0;var x=function(t){var e=0,n=0,r=t.title.side;return r&&(-1!==r.indexOf(\"left\")&&(e=t._titleWidth),-1!==r.indexOf(\"top\")&&(n=t._titleHeight)),[e,n]}(i);if(s)n.each((function(t){var e=t[0].height;c.setTranslate(this,u+x[0],u+x[1]+i._height+e/2+d),i._height+=e,i._width=Math.max(i._width,t[0].width)})),_=p+i._width,i._width+=d+p+h,i._height+=m,l&&(e.each((function(t,e){c.setTranslate(this,0,e*i.tracegroupgap)})),i._height+=(i._lgroupsLength-1)*i.tracegroupgap);else{var w=S(i),k=v||y,M=a.width/2;i._maxWidth=Math.max(i.x<0||0===i.x&&\"right\"===w?k&&\"left\"===w?o.l+o.w:M:i.x>1||1===i.x&&\"left\"===w?k&&\"right\"===w?o.r+o.w:M:o.w,2*p);var T=0,L=0;n.each((function(t){var e=t[0].width+p;T=Math.max(T,e),L+=e})),_=null;var C=0;if(l){var E=0,O=0,D=0;e.each((function(){var t=0,e=0;r.select(this).selectAll(\"g.traces\").each((function(n){var r=n[0].height;c.setTranslate(this,x[0],x[1]+u+d+r/2+e),e+=r,t=Math.max(t,p+n[0].width)})),E=Math.max(E,e);var n=t+d;n+u+O>i._maxWidth&&(C=Math.max(C,O),O=0,D+=E+i.tracegroupgap,E=e),c.setTranslate(this,O,D),O+=n})),i._width=Math.max(C,O)+u,i._height=D+E+m}else{var I=n.size(),P=L+h+(I-1)*d<i._maxWidth,R=0,z=0,j=0,F=0;n.each((function(t){var e=t[0].height,n=p+t[0].width,r=(P?n:T)+d;r+u+z-d>=i._maxWidth&&(C=Math.max(C,F),z=0,j+=R,i._height+=R,R=0),c.setTranslate(this,x[0]+u+z,x[1]+u+j+e/2+d),F=z+n+d,z+=r,R=Math.max(R,e)})),P?(i._width=z+h,i._height=R+m):(i._width=Math.max(C,F)+h,i._height+=R+m)}}i._width=Math.ceil(Math.max(i._width+x[0],i._titleWidth+2*(u+f.titlePad))),i._height=Math.ceil(Math.max(i._height+x[1],i._titleHeight+2*(u+f.itemGap))),i._effHeight=Math.min(i._height,i._maxHeight);var N=t._context.edits,B=N.legendText||N.legendPosition;n.each((function(t){var e=r.select(this).select(\".legendtoggle\"),n=t[0].height,i=B?p:_||p+t[0].width;s||(i+=d/2),c.setRect(e,0,-n/2,i,n)}))}(t,I,P,e)},function(){if(!e._main||!function(t){var e=t._fullLayout.legend,n=S(e),r=A(e);return a.autoMargin(t,\"legend\",{x:e.x,y:e.y,l:e._width*g[n],r:e._width*y[n],b:e._effHeight*y[r],t:e._effHeight*g[r]})}(t)){var u,d,p,v,_=s._size,b=e.borderwidth,w=_.l+_.w*e.x-g[S(e)]*e._width,M=_.t+_.h*(1-e.y)-g[A(e)]*e._effHeight;if(e._main&&s.margin.autoexpand){var T=w,E=M;w=i.constrain(w,0,s.width-e._width),M=i.constrain(M,0,s.height-e._effHeight),w!==T&&i.log(\"Constrain legend.x to make legend fit inside graph\"),M!==E&&i.log(\"Constrain legend.y to make legend fit inside graph\")}if(e._main&&c.setTranslate(m,w,M),D.on(\".drag\",null),m.on(\"wheel\",null),!e._main||e._height<=e._maxHeight||t._context.staticPlot){var O=e._effHeight;e._main||(O=e._height),L.attr({width:e._width-b,height:O-b,x:b/2,y:b/2}),c.setTranslate(C,0,0),k.select(\"rect\").attr({width:e._width-2*b,height:O-2*b,x:b,y:b}),c.setClipUrl(C,h,t),c.setRect(D,0,0,0,0),delete e._scrollY}else{var I,P,R=Math.max(f.scrollBarMinHeight,e._effHeight*e._effHeight/e._height),z=e._effHeight-R-2*f.scrollBarMargin,j=e._height-e._effHeight,F=z/j,N=Math.min(e._scrollY||0,j);L.attr({width:e._width-2*b+f.scrollBarWidth+f.scrollBarMargin,height:e._effHeight-b,x:b/2,y:b/2}),k.select(\"rect\").attr({width:e._width-2*b+f.scrollBarWidth+f.scrollBarMargin,height:e._effHeight-2*b,x:b,y:b+N}),c.setClipUrl(C,h,t),H(N,R,F),m.on(\"wheel\",(function(){H(N=i.constrain(e._scrollY+r.event.deltaY/z*j,0,j),R,F),0!==N&&N!==j&&r.event.preventDefault()}));var B=r.behavior.drag().on(\"dragstart\",(function(){var t=r.event.sourceEvent;I=\"touchstart\"===t.type?t.changedTouches[0].clientY:t.clientY,P=N})).on(\"drag\",(function(){var t=r.event.sourceEvent;2===t.buttons||t.ctrlKey||H(N=function(t,e,n){return i.constrain((n-e)/F+t,0,j)}(P,I,\"touchmove\"===t.type?t.changedTouches[0].clientY:t.clientY),R,F)}));D.call(B);var Y=r.behavior.drag().on(\"dragstart\",(function(){var t=r.event.sourceEvent;\"touchstart\"===t.type&&(I=t.changedTouches[0].clientY,P=N)})).on(\"drag\",(function(){var t=r.event.sourceEvent;\"touchmove\"===t.type&&H(N=function(t,e,n){return i.constrain((e-n)/F+t,0,j)}(P,I,t.changedTouches[0].clientY),R,F)}));C.call(Y)}t._context.edits.legendPosition&&(m.classed(\"cursor-move\",!0),l.init({element:m.node(),gd:t,prepFn:function(){var t=c.getTranslate(m);p=t.x,v=t.y},moveFn:function(t,n){var r=p+t,i=v+n;c.setTranslate(m,r,i),u=l.align(r,0,_.l,_.l+_.w,e.xanchor),d=l.align(i,0,_.t+_.h,_.t,e.yanchor)},doneFn:function(){void 0!==u&&void 0!==d&&o.call(\"_guiRelayout\",t,{\"legend.x\":u,\"legend.y\":d})},clickFn:function(e,r){var i=n.selectAll(\"g.traces\").filter((function(){var t=this.getBoundingClientRect();return r.clientX>=t.left&&r.clientX<=t.right&&r.clientY>=t.top&&r.clientY<=t.bottom}));i.size()>0&&x(t,m,i,e,r)}}))}function H(n,r,i){e._scrollY=t._fullLayout.legend._scrollY=n,c.setTranslate(C,0,-n),c.setRect(D,e._width,f.scrollBarMargin+n*i,f.scrollBarWidth,r),k.select(\"rect\").attr(\"y\",b+n)}}],t)}}},{\"../../constants/alignment\":745,\"../../lib\":778,\"../../lib/events\":767,\"../../lib/svg_text_utils\":803,\"../../plots/plots\":891,\"../../registry\":911,\"../color\":643,\"../dragelement\":662,\"../drawing\":665,\"./constants\":694,\"./get_legend_data\":697,\"./handle_click\":698,\"./helpers\":699,\"./style\":701,d3:169}],697:[function(t,e,n){\"use strict\";var r=t(\"../../registry\"),i=t(\"./helpers\");e.exports=function(t,e){var n,a,o={},s=[],l=!1,c={},u=0,h=0,d=e._main;function f(t,n){if(\"\"!==t&&i.isGrouped(e))-1===s.indexOf(t)?(s.push(t),l=!0,o[t]=[[n]]):o[t].push([n]);else{var r=\"~~i\"+u;s.push(r),o[r]=[[n]],u++}}for(n=0;n<t.length;n++){var p=t[n],m=p[0],g=m.trace,y=g.legendgroup;if(!d||g.visible&&g.showlegend)if(r.traceIs(g,\"pie-like\"))for(c[y]||(c[y]={}),a=0;a<p.length;a++){var v=p[a].label;c[y][v]||(f(y,{label:v,color:p[a].color,i:p[a].i,trace:g,pts:p[a].pts}),c[y][v]=!0,h=Math.max(h,(v||\"\").length))}else f(y,m),h=Math.max(h,(g.name||\"\").length)}if(!s.length)return[];var _,b,x=s.length;if(l&&i.isGrouped(e))for(b=new Array(x),n=0;n<x;n++)_=o[s[n]],b[n]=i.isReversed(e)?_.reverse():_;else{for(b=[new Array(x)],n=0;n<x;n++)_=o[s[n]][0],b[0][i.isReversed(e)?x-n-1:n]=_;x=1}return e._lgroupsLength=x,e._maxNameLength=h,b}},{\"../../registry\":911,\"./helpers\":699}],698:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../registry\"),a=!0;e.exports=function(t,e,n){var o=e._fullLayout;if(!e._dragged&&!e._editing){var s,l=o.legend.itemclick,c=o.legend.itemdoubleclick;if(1===n&&\"toggle\"===l&&\"toggleothers\"===c&&a&&e.data&&e._context.showTips?(r.notifier(r._(e,\"Double-click on legend to isolate one trace\"),\"long\"),a=!1):a=!1,1===n?s=l:2===n&&(s=c),s){var u,h,d,f,p,m=o.hiddenlabels?o.hiddenlabels.slice():[],g=t.data()[0][0],y=e._fullData,v=g.trace,_=v.legendgroup,b={},x=[],w=[],k=[];if(i.traceIs(v,\"pie-like\")){var M=g.label,T=m.indexOf(M);\"toggle\"===s?-1===T?m.push(M):m.splice(T,1):\"toggleothers\"===s&&(m=[],e.calcdata[0].forEach((function(t){M!==t.label&&m.push(t.label)})),e._fullLayout.hiddenlabels&&e._fullLayout.hiddenlabels.length===m.length&&-1===T&&(m=[])),i.call(\"_guiRelayout\",e,\"hiddenlabels\",m)}else{var S,A=_&&_.length,L=[];if(A)for(u=0;u<y.length;u++)(S=y[u]).visible&&S.legendgroup===_&&L.push(u);if(\"toggle\"===s){var C;switch(v.visible){case!0:C=\"legendonly\";break;case!1:C=!1;break;case\"legendonly\":C=!0}if(A)for(u=0;u<y.length;u++)!1!==y[u].visible&&y[u].legendgroup===_&&R(y[u],C);else R(v,C)}else if(\"toggleothers\"===s){var E,O=!0;for(u=0;u<y.length;u++)if(E=!0!==y[u].showlegend,!(y[u]===v||E||A&&y[u].legendgroup===_||!0!==y[u].visible||i.traceIs(y[u],\"notLegendIsolatable\"))){O=!1;break}for(u=0;u<y.length;u++)if(!1!==y[u].visible&&!i.traceIs(y[u],\"notLegendIsolatable\"))switch(v.visible){case\"legendonly\":R(y[u],!0);break;case!0:E=!0!==y[u].showlegend&&!y[u].legendgroup,R(y[u],!!(y[u]===v||A&&y[u].legendgroup===_||E)||!!O||\"legendonly\")}}for(u=0;u<w.length;u++)if(d=w[u]){var D=d.constructUpdate(),I=Object.keys(D);for(h=0;h<I.length;h++)(b[f=I[h]]=b[f]||[])[k[u]]=D[f]}for(p=Object.keys(b),u=0;u<p.length;u++)for(f=p[u],h=0;h<x.length;h++)b[f].hasOwnProperty(h)||(b[f][h]=void 0);i.call(\"_guiRestyle\",e,b,x)}}}function P(t,e,n){var r=x.indexOf(t),i=b[e];return i||(i=b[e]=[]),-1===x.indexOf(t)&&(x.push(t),r=x.length-1),i[r]=n,r}function R(t,e){var n=t._fullInput;if(i.hasTransform(n,\"groupby\")){var a=w[n.index];if(!a){var o=i.getTransformIndices(n,\"groupby\");a=r.keyedContainer(n,\"transforms[\"+o[o.length-1]+\"].styles\",\"target\",\"value.visible\"),w[n.index]=a}var s=a.get(t._group);void 0===s&&(s=!0),!1!==s&&a.set(t._group,e),k[n.index]=P(n.index,\"visible\",!1!==n.visible)}else P(n.index,\"visible\",!1!==n.visible&&e)}}},{\"../../lib\":778,\"../../registry\":911}],699:[function(t,e,n){\"use strict\";n.isGrouped=function(t){return-1!==(t.traceorder||\"\").indexOf(\"grouped\")},n.isVertical=function(t){return\"h\"!==t.orientation},n.isReversed=function(t){return-1!==(t.traceorder||\"\").indexOf(\"reversed\")}},{}],700:[function(t,e,n){\"use strict\";e.exports={moduleType:\"component\",name:\"legend\",layoutAttributes:t(\"./attributes\"),supplyLayoutDefaults:t(\"./defaults\"),draw:t(\"./draw\"),style:t(\"./style\")}},{\"./attributes\":693,\"./defaults\":695,\"./draw\":696,\"./style\":701}],701:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../registry\"),a=t(\"../../lib\"),o=a.strTranslate,s=t(\"../drawing\"),l=t(\"../color\"),c=t(\"../colorscale/helpers\").extractOpts,u=t(\"../../traces/scatter/subtypes\"),h=t(\"../../traces/pie/style_one\"),d=t(\"../../traces/pie/helpers\").castOption,f=t(\"./constants\");function p(t,e){return(e?\"radial\":\"horizontal\")+(t?\"\":\"reversed\")}e.exports=function(t,e,n){n||(n=e._fullLayout.legend);var m=\"constant\"===n.itemsizing,g=n.itemwidth,y=o((g+2*f.itemGap)/2,0),v=function(t,e,n,r){var i;if(t+1)i=t;else{if(!(e&&e.width>0))return 0;i=e.width}return m?r:Math.min(i,n)};function _(t,e,n){var a=t[0].trace,o=a.marker||{},s=o.line||{},c=n?a.visible&&a.type===n:i.traceIs(a,\"bar\"),u=r.select(e).select(\"g.legendpoints\").selectAll(\"path.legend\"+n).data(c?[t]:[]);u.enter().append(\"path\").classed(\"legend\"+n,!0).attr(\"d\",\"M6,6H-6V-6H6Z\").attr(\"transform\",y),u.exit().remove(),u.each((function(t){var e=r.select(this),n=t[0],i=v(n.mlw,o.line,5,2);e.style(\"stroke-width\",i+\"px\").call(l.fill,n.mc||o.color),i&&l.stroke(e,n.mlc||s.color)}))}function b(t,e,n){var o=t[0],s=o.trace,l=n?s.visible&&s.type===n:i.traceIs(s,n),c=r.select(e).select(\"g.legendpoints\").selectAll(\"path.legend\"+n).data(l?[t]:[]);if(c.enter().append(\"path\").classed(\"legend\"+n,!0).attr(\"d\",\"M6,6H-6V-6H6Z\").attr(\"transform\",y),c.exit().remove(),c.size()){var u=(s.marker||{}).line,f=v(d(u.width,o.pts),u,5,2),p=a.minExtend(s,{marker:{line:{width:f}}});p.marker.line.color=u.color;var m=a.minExtend(o,{trace:p});h(c,m,p)}}t.each((function(t){var e=r.select(this),i=a.ensureSingle(e,\"g\",\"layers\");i.style(\"opacity\",t[0].trace.opacity);var s=n.valign,l=t[0].lineHeight,c=t[0].height;i.attr(\"transform\",\"middle\"!==s&&l&&c?o(0,{top:1,bottom:-1}[s]*(.5*(l-c+3))):null),i.selectAll(\"g.legendfill\").data([t]).enter().append(\"g\").classed(\"legendfill\",!0),i.selectAll(\"g.legendlines\").data([t]).enter().append(\"g\").classed(\"legendlines\",!0);var u=i.selectAll(\"g.legendsymbols\").data([t]);u.enter().append(\"g\").classed(\"legendsymbols\",!0),u.selectAll(\"g.legendpoints\").data([t]).enter().append(\"g\").classed(\"legendpoints\",!0)})).each((function(t){var n,i=t[0].trace,o=[];if(i.visible)switch(i.type){case\"histogram2d\":case\"heatmap\":o=[[\"M-15,-2V4H15V-2Z\"]],n=!0;break;case\"choropleth\":case\"choroplethmapbox\":o=[[\"M-6,-6V6H6V-6Z\"]],n=!0;break;case\"densitymapbox\":o=[[\"M-6,0 a6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0\"]],n=\"radial\";break;case\"cone\":o=[[\"M-6,2 A2,2 0 0,0 -6,6 V6L6,4Z\"],[\"M-6,-6 A2,2 0 0,0 -6,-2 L6,-4Z\"],[\"M-6,-2 A2,2 0 0,0 -6,2 L6,0Z\"]],n=!1;break;case\"streamtube\":o=[[\"M-6,2 A2,2 0 0,0 -6,6 H6 A2,2 0 0,1 6,2 Z\"],[\"M-6,-6 A2,2 0 0,0 -6,-2 H6 A2,2 0 0,1 6,-6 Z\"],[\"M-6,-2 A2,2 0 0,0 -6,2 H6 A2,2 0 0,1 6,-2 Z\"]],n=!1;break;case\"surface\":o=[[\"M-6,-6 A2,3 0 0,0 -6,0 H6 A2,3 0 0,1 6,-6 Z\"],[\"M-6,1 A2,3 0 0,1 -6,6 H6 A2,3 0 0,0 6,0 Z\"]],n=!0;break;case\"mesh3d\":o=[[\"M-6,6H0L-6,-6Z\"],[\"M6,6H0L6,-6Z\"],[\"M-6,-6H6L0,6Z\"]],n=!1;break;case\"volume\":o=[[\"M-6,6H0L-6,-6Z\"],[\"M6,6H0L6,-6Z\"],[\"M-6,-6H6L0,6Z\"]],n=!0;break;case\"isosurface\":o=[[\"M-6,6H0L-6,-6Z\"],[\"M6,6H0L6,-6Z\"],[\"M-6,-6 A12,24 0 0,0 6,-6 L0,6Z\"]],n=!1}var u=r.select(this).select(\"g.legendpoints\").selectAll(\"path.legend3dandfriends\").data(o);u.enter().append(\"path\").classed(\"legend3dandfriends\",!0).attr(\"transform\",y).style(\"stroke-miterlimit\",1),u.exit().remove(),u.each((function(t,o){var u,h=r.select(this),d=c(i),f=d.colorscale,m=d.reversescale;if(f){if(!n){var g=f.length;u=0===o?f[m?g-1:0][1]:1===o?f[m?0:g-1][1]:f[Math.floor((g-1)/2)][1]}}else{var y=i.vertexcolor||i.facecolor||i.color;u=a.isArrayOrTypedArray(y)?y[o]||y[0]:y}h.attr(\"d\",t[0]),u?h.call(l.fill,u):h.call((function(t){t.size()&&s.gradient(t,e,\"legendfill-\"+i.uid,p(m,\"radial\"===n),f,\"fill\")}))}))})).each((function(t){var e=t[0].trace,n=\"waterfall\"===e.type;if(t[0]._distinct&&n){var i=t[0].trace[t[0].dir].marker;return t[0].mc=i.color,t[0].mlw=i.line.width,t[0].mlc=i.line.color,_(t,this,\"waterfall\")}var a=[];e.visible&&n&&(a=t[0].hasTotals?[[\"increasing\",\"M-6,-6V6H0Z\"],[\"totals\",\"M6,6H0L-6,-6H-0Z\"],[\"decreasing\",\"M6,6V-6H0Z\"]]:[[\"increasing\",\"M-6,-6V6H6Z\"],[\"decreasing\",\"M6,6V-6H-6Z\"]]);var o=r.select(this).select(\"g.legendpoints\").selectAll(\"path.legendwaterfall\").data(a);o.enter().append(\"path\").classed(\"legendwaterfall\",!0).attr(\"transform\",y).style(\"stroke-miterlimit\",1),o.exit().remove(),o.each((function(t){var n=r.select(this),i=e[t[0]].marker,a=v(void 0,i.line,5,2);n.attr(\"d\",t[1]).style(\"stroke-width\",a+\"px\").call(l.fill,i.color),a&&n.call(l.stroke,i.line.color)}))})).each((function(t){_(t,this,\"funnel\")})).each((function(t){_(t,this)})).each((function(t){var n=t[0].trace,o=r.select(this).select(\"g.legendpoints\").selectAll(\"path.legendbox\").data(n.visible&&i.traceIs(n,\"box-violin\")?[t]:[]);o.enter().append(\"path\").classed(\"legendbox\",!0).attr(\"d\",\"M6,6H-6V-6H6Z\").attr(\"transform\",y),o.exit().remove(),o.each((function(){var t=r.select(this);if(\"all\"!==n.boxpoints&&\"all\"!==n.points||0!==l.opacity(n.fillcolor)||0!==l.opacity((n.line||{}).color)){var i=v(void 0,n.line,5,2);t.style(\"stroke-width\",i+\"px\").call(l.fill,n.fillcolor),i&&l.stroke(t,n.line.color)}else{var c=a.minExtend(n,{marker:{size:m?12:a.constrain(n.marker.size,2,16),sizeref:1,sizemin:1,sizemode:\"diameter\"}});o.call(s.pointStyle,c,e)}}))})).each((function(t){b(t,this,\"funnelarea\")})).each((function(t){b(t,this,\"pie\")})).each((function(t){var n,i,o=t[0],l=o.trace,h=l.visible&&l.fill&&\"none\"!==l.fill,d=u.hasLines(l),f=l.contours,m=!1,y=!1,_=c(l),b=_.colorscale,x=_.reversescale;if(f){var w=f.coloring;\"lines\"===w?m=!0:d=\"none\"===w||\"heatmap\"===w||f.showlines,\"constraint\"===f.type?h=\"=\"!==f._operation:\"fill\"!==w&&\"heatmap\"!==w||(y=!0)}var k=u.hasMarkers(l)||u.hasText(l)||!h&&!y?\"M5,0\":d||m?\"M5,-2\":\"M5,-3\",M=r.select(this),T=M.select(\".legendfill\").selectAll(\"path\").data(h||y?[t]:[]);if(T.enter().append(\"path\").classed(\"js-fill\",!0),T.exit().remove(),T.attr(\"d\",k+\"h\"+g+\"v6h-\"+g+\"z\").call(h?s.fillGroupStyle:function(t){t.size()&&s.gradient(t,e,\"legendfill-\"+l.uid,p(x),b,\"fill\")}),d||m){var S=v(void 0,l.line,10,5);i=a.minExtend(l,{line:{width:S}}),n=[a.minExtend(o,{trace:i})]}var A=M.select(\".legendlines\").selectAll(\"path\").data(d||m?[n]:[]);A.enter().append(\"path\").classed(\"js-line\",!0),A.exit().remove(),A.attr(\"d\",k+(m?\"l\"+g+\",0.0001\":\"h\"+g)).call(d?s.lineGroupStyle:function(t){if(t.size()){var n=\"legendline-\"+l.uid;s.lineGroupStyle(t),s.gradient(t,e,n,p(x),b,\"stroke\")}})})).each((function(t){var n,i,o=t[0],l=o.trace,c=u.hasMarkers(l),h=u.hasText(l),d=u.hasLines(l);function f(t,e,n,r){var i=a.nestedProperty(l,t).get(),o=a.isArrayOrTypedArray(i)&&e?e(i):i;if(m&&o&&void 0!==r&&(o=r),n){if(o<n[0])return n[0];if(o>n[1])return n[1]}return o}function p(t){return o._distinct&&o.index&&t[o.index]?t[o.index]:t[0]}if(c||h||d){var g={},v={};if(c){g.mc=f(\"marker.color\",p),g.mx=f(\"marker.symbol\",p),g.mo=f(\"marker.opacity\",a.mean,[.2,1]),g.mlc=f(\"marker.line.color\",p),g.mlw=f(\"marker.line.width\",a.mean,[0,5],2),v.marker={sizeref:1,sizemin:1,sizemode:\"diameter\"};var _=f(\"marker.size\",a.mean,[2,16],12);g.ms=_,v.marker.size=_}d&&(v.line={width:f(\"line.width\",p,[0,10],5)}),h&&(g.tx=\"Aa\",g.tp=f(\"textposition\",p),g.ts=10,g.tc=f(\"textfont.color\",p),g.tf=f(\"textfont.family\",p)),n=[a.minExtend(o,g)],(i=a.minExtend(l,v)).selectedpoints=null,i.texttemplate=null}var b=r.select(this).select(\"g.legendpoints\"),x=b.selectAll(\"path.scatterpts\").data(c?n:[]);x.enter().insert(\"path\",\":first-child\").classed(\"scatterpts\",!0).attr(\"transform\",y),x.exit().remove(),x.call(s.pointStyle,i,e),c&&(n[0].mrc=3);var w=b.selectAll(\"g.pointtext\").data(h?n:[]);w.enter().append(\"g\").classed(\"pointtext\",!0).append(\"text\").attr(\"transform\",y),w.exit().remove(),w.selectAll(\"text\").call(s.textPointStyle,i,e)})).each((function(t){var e=t[0].trace,n=r.select(this).select(\"g.legendpoints\").selectAll(\"path.legendcandle\").data(e.visible&&\"candlestick\"===e.type?[t,t]:[]);n.enter().append(\"path\").classed(\"legendcandle\",!0).attr(\"d\",(function(t,e){return e?\"M-15,0H-8M-8,6V-6H8Z\":\"M15,0H8M8,-6V6H-8Z\"})).attr(\"transform\",y).style(\"stroke-miterlimit\",1),n.exit().remove(),n.each((function(t,n){var i=r.select(this),a=e[n?\"increasing\":\"decreasing\"],o=v(void 0,a.line,5,2);i.style(\"stroke-width\",o+\"px\").call(l.fill,a.fillcolor),o&&l.stroke(i,a.line.color)}))})).each((function(t){var e=t[0].trace,n=r.select(this).select(\"g.legendpoints\").selectAll(\"path.legendohlc\").data(e.visible&&\"ohlc\"===e.type?[t,t]:[]);n.enter().append(\"path\").classed(\"legendohlc\",!0).attr(\"d\",(function(t,e){return e?\"M-15,0H0M-8,-6V0\":\"M15,0H0M8,6V0\"})).attr(\"transform\",y).style(\"stroke-miterlimit\",1),n.exit().remove(),n.each((function(t,n){var i=r.select(this),a=e[n?\"increasing\":\"decreasing\"],o=v(void 0,a.line,5,2);i.style(\"fill\",\"none\").call(s.dashLine,a.line.dash,o),o&&l.stroke(i,a.line.color)}))}))}},{\"../../lib\":778,\"../../registry\":911,\"../../traces/pie/helpers\":1166,\"../../traces/pie/style_one\":1172,\"../../traces/scatter/subtypes\":1212,\"../color\":643,\"../colorscale/helpers\":654,\"../drawing\":665,\"./constants\":694,d3:169}],702:[function(t,e,n){\"use strict\";var r=t(\"../../registry\"),i=t(\"../../plots/plots\"),a=t(\"../../plots/cartesian/axis_ids\"),o=t(\"../../fonts/ploticon\"),s=t(\"../shapes/draw\").eraseActiveShape,l=t(\"../../lib\"),c=l._,u=e.exports={};function h(t,e){var n,i,o=e.currentTarget,s=o.getAttribute(\"data-attr\"),l=o.getAttribute(\"data-val\")||!0,c=t._fullLayout,u={},h=a.list(t,null,!0),d=c._cartesianSpikesEnabled;if(\"zoom\"===s){var f,p=\"in\"===l?.5:2,m=(1+p)/2,g=(1-p)/2;for(i=0;i<h.length;i++)if(!(n=h[i]).fixedrange)if(f=n._name,\"auto\"===l)u[f+\".autorange\"]=!0;else if(\"reset\"===l){if(void 0===n._rangeInitial)u[f+\".autorange\"]=!0;else{var y=n._rangeInitial.slice();u[f+\".range[0]\"]=y[0],u[f+\".range[1]\"]=y[1]}void 0!==n._showSpikeInitial&&(u[f+\".showspikes\"]=n._showSpikeInitial,\"on\"!==d||n._showSpikeInitial||(d=\"off\"))}else{var v=[n.r2l(n.range[0]),n.r2l(n.range[1])],_=[m*v[0]+g*v[1],m*v[1]+g*v[0]];u[f+\".range[0]\"]=n.l2r(_[0]),u[f+\".range[1]\"]=n.l2r(_[1])}}else\"hovermode\"!==s||\"x\"!==l&&\"y\"!==l||o.setAttribute(\"data-val\",l=c._isHoriz?\"y\":\"x\"),u[s]=l;c._cartesianSpikesEnabled=d,r.call(\"_guiRelayout\",t,u)}function d(t,e){for(var n=e.currentTarget,i=n.getAttribute(\"data-attr\"),a=n.getAttribute(\"data-val\")||!0,o=t._fullLayout._subplots.gl3d||[],s={},l=i.split(\".\"),c=0;c<o.length;c++)s[o[c]+\".\"+l[1]]=a;s.dragmode=\"pan\"===a?a:\"zoom\",r.call(\"_guiRelayout\",t,s)}function f(t,e){for(var n=e.currentTarget.getAttribute(\"data-attr\"),i=\"resetLastSave\"===n,a=\"resetDefault\"===n,o=t._fullLayout,s=o._subplots.gl3d||[],l={},c=0;c<s.length;c++){var u,h=s[c],d=h+\".camera\",f=h+\".aspectratio\",p=h+\".aspectmode\",m=o[h]._scene;i?(l[d+\".up\"]=m.viewInitial.up,l[d+\".eye\"]=m.viewInitial.eye,l[d+\".center\"]=m.viewInitial.center,u=!0):a&&(l[d+\".up\"]=null,l[d+\".eye\"]=null,l[d+\".center\"]=null,u=!0),u&&(l[f+\".x\"]=m.viewInitial.aspectratio.x,l[f+\".y\"]=m.viewInitial.aspectratio.y,l[f+\".z\"]=m.viewInitial.aspectratio.z,l[p]=m.viewInitial.aspectmode)}r.call(\"_guiRelayout\",t,l)}function p(t,e){var n=e.currentTarget,r=n._previousVal,i=t._fullLayout,a=i._subplots.gl3d||[],o=[\"xaxis\",\"yaxis\",\"zaxis\"],s={},l={};if(r)l=r,n._previousVal=null;else{for(var c=0;c<a.length;c++){var u=a[c],h=i[u],d=u+\".hovermode\";s[d]=h.hovermode,l[d]=!1;for(var f=0;f<3;f++){var p=o[f],m=u+\".\"+p+\".showspikes\";l[m]=!1,s[m]=h[p].showspikes}}n._previousVal=s}return l}function m(t,e){for(var n=e.currentTarget,i=n.getAttribute(\"data-attr\"),a=n.getAttribute(\"data-val\")||!0,o=t._fullLayout,s=o._subplots.geo||[],l=0;l<s.length;l++){var c=s[l];if(\"zoom\"===i){var u=o[c].projection.scale;r.call(\"_guiRelayout\",t,c+\".projection.scale\",\"in\"===a?2*u:.5*u)}}\"reset\"===i&&_(t,\"geo\")}function g(t){var e=t._fullLayout;return!e.hovermode&&(e._has(\"cartesian\")?e._isHoriz?\"y\":\"x\":\"closest\")}function y(t){var e=g(t);r.call(\"_guiRelayout\",t,\"hovermode\",e)}function v(t,e){for(var n=e.currentTarget.getAttribute(\"data-val\"),i=t._fullLayout,a=i._subplots.mapbox||[],o={},s=0;s<a.length;s++){var l=a[s],c=i[l].zoom;o[l+\".zoom\"]=\"in\"===n?1.05*c:c/1.05}r.call(\"_guiRelayout\",t,o)}function _(t,e){for(var n=t._fullLayout,i=n._subplots[e]||[],a={},o=0;o<i.length;o++)for(var s=i[o],l=n[s]._subplot.viewInitial,c=Object.keys(l),u=0;u<c.length;u++){var h=c[u];a[s+\".\"+h]=l[h]}r.call(\"_guiRelayout\",t,a)}u.toImage={name:\"toImage\",title:function(t){return c(t,\"png\"===((t._context.toImageButtonOptions||{}).format||\"png\")?\"Download plot as a png\":\"Download plot\")},icon:o.camera,click:function(t){var e=t._context.toImageButtonOptions,n={format:e.format||\"png\"};l.notifier(c(t,\"Taking snapshot - this may take a few seconds\"),\"long\"),\"svg\"!==n.format&&l.isIE()&&(l.notifier(c(t,\"IE only supports svg.  Changing format to svg.\"),\"long\"),n.format=\"svg\"),[\"filename\",\"width\",\"height\",\"scale\"].forEach((function(t){t in e&&(n[t]=e[t])})),r.call(\"downloadImage\",t,n).then((function(e){l.notifier(c(t,\"Snapshot succeeded\")+\" - \"+e,\"long\")})).catch((function(){l.notifier(c(t,\"Sorry, there was a problem downloading your snapshot!\"),\"long\")}))}},u.sendDataToCloud={name:\"sendDataToCloud\",title:function(t){return c(t,\"Edit in Chart Studio\")},icon:o.disk,click:function(t){i.sendDataToCloud(t)}},u.editInChartStudio={name:\"editInChartStudio\",title:function(t){return c(t,\"Edit in Chart Studio\")},icon:o.pencil,click:function(t){i.sendDataToCloud(t)}},u.zoom2d={name:\"zoom2d\",title:function(t){return c(t,\"Zoom\")},attr:\"dragmode\",val:\"zoom\",icon:o.zoombox,click:h},u.pan2d={name:\"pan2d\",title:function(t){return c(t,\"Pan\")},attr:\"dragmode\",val:\"pan\",icon:o.pan,click:h},u.select2d={name:\"select2d\",title:function(t){return c(t,\"Box Select\")},attr:\"dragmode\",val:\"select\",icon:o.selectbox,click:h},u.lasso2d={name:\"lasso2d\",title:function(t){return c(t,\"Lasso Select\")},attr:\"dragmode\",val:\"lasso\",icon:o.lasso,click:h},u.drawclosedpath={name:\"drawclosedpath\",title:function(t){return c(t,\"Draw closed freeform\")},attr:\"dragmode\",val:\"drawclosedpath\",icon:o.drawclosedpath,click:h},u.drawopenpath={name:\"drawopenpath\",title:function(t){return c(t,\"Draw open freeform\")},attr:\"dragmode\",val:\"drawopenpath\",icon:o.drawopenpath,click:h},u.drawline={name:\"drawline\",title:function(t){return c(t,\"Draw line\")},attr:\"dragmode\",val:\"drawline\",icon:o.drawline,click:h},u.drawrect={name:\"drawrect\",title:function(t){return c(t,\"Draw rectangle\")},attr:\"dragmode\",val:\"drawrect\",icon:o.drawrect,click:h},u.drawcircle={name:\"drawcircle\",title:function(t){return c(t,\"Draw circle\")},attr:\"dragmode\",val:\"drawcircle\",icon:o.drawcircle,click:h},u.eraseshape={name:\"eraseshape\",title:function(t){return c(t,\"Erase active shape\")},icon:o.eraseshape,click:s},u.zoomIn2d={name:\"zoomIn2d\",title:function(t){return c(t,\"Zoom in\")},attr:\"zoom\",val:\"in\",icon:o.zoom_plus,click:h},u.zoomOut2d={name:\"zoomOut2d\",title:function(t){return c(t,\"Zoom out\")},attr:\"zoom\",val:\"out\",icon:o.zoom_minus,click:h},u.autoScale2d={name:\"autoScale2d\",title:function(t){return c(t,\"Autoscale\")},attr:\"zoom\",val:\"auto\",icon:o.autoscale,click:h},u.resetScale2d={name:\"resetScale2d\",title:function(t){return c(t,\"Reset axes\")},attr:\"zoom\",val:\"reset\",icon:o.home,click:h},u.hoverClosestCartesian={name:\"hoverClosestCartesian\",title:function(t){return c(t,\"Show closest data on hover\")},attr:\"hovermode\",val:\"closest\",icon:o.tooltip_basic,gravity:\"ne\",click:h},u.hoverCompareCartesian={name:\"hoverCompareCartesian\",title:function(t){return c(t,\"Compare data on hover\")},attr:\"hovermode\",val:function(t){return t._fullLayout._isHoriz?\"y\":\"x\"},icon:o.tooltip_compare,gravity:\"ne\",click:h},u.zoom3d={name:\"zoom3d\",title:function(t){return c(t,\"Zoom\")},attr:\"scene.dragmode\",val:\"zoom\",icon:o.zoombox,click:d},u.pan3d={name:\"pan3d\",title:function(t){return c(t,\"Pan\")},attr:\"scene.dragmode\",val:\"pan\",icon:o.pan,click:d},u.orbitRotation={name:\"orbitRotation\",title:function(t){return c(t,\"Orbital rotation\")},attr:\"scene.dragmode\",val:\"orbit\",icon:o[\"3d_rotate\"],click:d},u.tableRotation={name:\"tableRotation\",title:function(t){return c(t,\"Turntable rotation\")},attr:\"scene.dragmode\",val:\"turntable\",icon:o[\"z-axis\"],click:d},u.resetCameraDefault3d={name:\"resetCameraDefault3d\",title:function(t){return c(t,\"Reset camera to default\")},attr:\"resetDefault\",icon:o.home,click:f},u.resetCameraLastSave3d={name:\"resetCameraLastSave3d\",title:function(t){return c(t,\"Reset camera to last save\")},attr:\"resetLastSave\",icon:o.movie,click:f},u.hoverClosest3d={name:\"hoverClosest3d\",title:function(t){return c(t,\"Toggle show closest data on hover\")},attr:\"hovermode\",val:null,toggle:!0,icon:o.tooltip_basic,gravity:\"ne\",click:function(t,e){var n=p(t,e);r.call(\"_guiRelayout\",t,n)}},u.zoomInGeo={name:\"zoomInGeo\",title:function(t){return c(t,\"Zoom in\")},attr:\"zoom\",val:\"in\",icon:o.zoom_plus,click:m},u.zoomOutGeo={name:\"zoomOutGeo\",title:function(t){return c(t,\"Zoom out\")},attr:\"zoom\",val:\"out\",icon:o.zoom_minus,click:m},u.resetGeo={name:\"resetGeo\",title:function(t){return c(t,\"Reset\")},attr:\"reset\",val:null,icon:o.autoscale,click:m},u.hoverClosestGeo={name:\"hoverClosestGeo\",title:function(t){return c(t,\"Toggle show closest data on hover\")},attr:\"hovermode\",val:null,toggle:!0,icon:o.tooltip_basic,gravity:\"ne\",click:y},u.hoverClosestGl2d={name:\"hoverClosestGl2d\",title:function(t){return c(t,\"Toggle show closest data on hover\")},attr:\"hovermode\",val:null,toggle:!0,icon:o.tooltip_basic,gravity:\"ne\",click:y},u.hoverClosestPie={name:\"hoverClosestPie\",title:function(t){return c(t,\"Toggle show closest data on hover\")},attr:\"hovermode\",val:\"closest\",icon:o.tooltip_basic,gravity:\"ne\",click:y},u.resetViewSankey={name:\"resetSankeyGroup\",title:function(t){return c(t,\"Reset view\")},icon:o.home,click:function(t){for(var e={\"node.groups\":[],\"node.x\":[],\"node.y\":[]},n=0;n<t._fullData.length;n++){var i=t._fullData[n]._viewInitial;e[\"node.groups\"].push(i.node.groups.slice()),e[\"node.x\"].push(i.node.x.slice()),e[\"node.y\"].push(i.node.y.slice())}r.call(\"restyle\",t,e)}},u.toggleHover={name:\"toggleHover\",title:function(t){return c(t,\"Toggle show closest data on hover\")},attr:\"hovermode\",val:null,toggle:!0,icon:o.tooltip_basic,gravity:\"ne\",click:function(t,e){var n=p(t,e);n.hovermode=g(t),r.call(\"_guiRelayout\",t,n)}},u.resetViews={name:\"resetViews\",title:function(t){return c(t,\"Reset views\")},icon:o.home,click:function(t,e){var n=e.currentTarget;n.setAttribute(\"data-attr\",\"zoom\"),n.setAttribute(\"data-val\",\"reset\"),h(t,e),n.setAttribute(\"data-attr\",\"resetLastSave\"),f(t,e),_(t,\"geo\"),_(t,\"mapbox\")}},u.toggleSpikelines={name:\"toggleSpikelines\",title:function(t){return c(t,\"Toggle Spike Lines\")},icon:o.spikeline,attr:\"_cartesianSpikesEnabled\",val:\"on\",click:function(t){var e=t._fullLayout;e._cartesianSpikesEnabled=\"on\"===e._cartesianSpikesEnabled?\"off\":\"on\",r.call(\"_guiRelayout\",t,function(t){for(var e=\"on\"===t._fullLayout._cartesianSpikesEnabled,n=a.list(t,null,!0),r={},i=0;i<n.length;i++){var o=n[i];r[o._name+\".showspikes\"]=!!e||o._showSpikeInitial}return r}(t))}},u.resetViewMapbox={name:\"resetViewMapbox\",title:function(t){return c(t,\"Reset view\")},attr:\"reset\",icon:o.home,click:function(t){_(t,\"mapbox\")}},u.zoomInMapbox={name:\"zoomInMapbox\",title:function(t){return c(t,\"Zoom in\")},attr:\"zoom\",val:\"in\",icon:o.zoom_plus,click:v},u.zoomOutMapbox={name:\"zoomOutMapbox\",title:function(t){return c(t,\"Zoom out\")},attr:\"zoom\",val:\"out\",icon:o.zoom_minus,click:v}},{\"../../fonts/ploticon\":757,\"../../lib\":778,\"../../plots/cartesian/axis_ids\":831,\"../../plots/plots\":891,\"../../registry\":911,\"../shapes/draw\":724}],703:[function(t,e,n){\"use strict\";n.manage=t(\"./manage\")},{\"./manage\":704}],704:[function(t,e,n){\"use strict\";var r=t(\"../../plots/cartesian/axis_ids\"),i=t(\"../../traces/scatter/subtypes\"),a=t(\"../../registry\"),o=t(\"../fx/helpers\").isUnifiedHover,s=t(\"./modebar\"),l=t(\"./buttons\");e.exports=function(t){var e=t._fullLayout,n=t._context,u=e._modeBar;if(n.displayModeBar||n.watermark){if(!Array.isArray(n.modeBarButtonsToRemove))throw new Error([\"*modeBarButtonsToRemove* configuration options\",\"must be an array.\"].join(\" \"));if(!Array.isArray(n.modeBarButtonsToAdd))throw new Error([\"*modeBarButtonsToAdd* configuration options\",\"must be an array.\"].join(\" \"));var h,d=n.modeBarButtons;h=Array.isArray(d)&&d.length?function(t){for(var e=0;e<t.length;e++)for(var n=t[e],r=0;r<n.length;r++){var i=n[r];if(\"string\"==typeof i){if(void 0===l[i])throw new Error([\"*modeBarButtons* configuration options\",\"invalid button name\"].join(\" \"));t[e][r]=l[i]}}return t}(d):!n.displayModeBar&&n.watermark?[]:function(t){var e=t._fullLayout,n=t._fullData,s=t._context,u=s.modeBarButtonsToRemove,h=s.modeBarButtonsToAdd,d=e._has(\"cartesian\"),f=e._has(\"gl3d\"),p=e._has(\"geo\"),m=e._has(\"pie\"),g=e._has(\"funnelarea\"),y=e._has(\"gl2d\"),v=e._has(\"ternary\"),_=e._has(\"mapbox\"),b=e._has(\"polar\"),x=e._has(\"sankey\"),w=function(t){for(var e=r.list({_fullLayout:t},null,!0),n=0;n<e.length;n++)if(!e[n].fixedrange)return!1;return!0}(e),k=o(e.hovermode),M=[];function T(t){if(t.length){for(var e=[],n=0;n<t.length;n++){var r=t[n];-1===u.indexOf(r)&&e.push(l[r])}M.push(e)}}var S=[\"toImage\"];s.showEditInChartStudio?S.push(\"editInChartStudio\"):s.showSendToCloud&&S.push(\"sendDataToCloud\"),T(S);var A=[],L=[],C=[],E=[];if((d||y||m||g||v)+p+f+_+b>1?(L=[\"toggleHover\"],C=[\"resetViews\"]):p?(A=[\"zoomInGeo\",\"zoomOutGeo\"],L=[\"hoverClosestGeo\"],C=[\"resetGeo\"]):f?(L=[\"hoverClosest3d\"],C=[\"resetCameraDefault3d\",\"resetCameraLastSave3d\"]):_?(A=[\"zoomInMapbox\",\"zoomOutMapbox\"],L=[\"toggleHover\"],C=[\"resetViewMapbox\"]):y?L=[\"hoverClosestGl2d\"]:m?L=[\"hoverClosestPie\"]:x?(L=[\"hoverClosestCartesian\",\"hoverCompareCartesian\"],C=[\"resetViewSankey\"]):L=[\"toggleHover\"],d&&(L=[\"toggleSpikelines\",\"hoverClosestCartesian\",\"hoverCompareCartesian\"]),(function(t){for(var e=0;e<t.length;e++)if(!a.traceIs(t[e],\"noHover\"))return!1;return!0}(n)||k)&&(L=[]),!d&&!y||w||(A=[\"zoomIn2d\",\"zoomOut2d\",\"autoScale2d\"],\"resetViews\"!==C[0]&&(C=[\"resetScale2d\"])),f?E=[\"zoom3d\",\"pan3d\",\"orbitRotation\",\"tableRotation\"]:(d||y)&&!w||v?E=[\"zoom2d\",\"pan2d\"]:_||p?E=[\"pan2d\"]:b&&(E=[\"zoom2d\"]),function(t){for(var e=!1,n=0;n<t.length&&!e;n++){var r=t[n];r._module&&r._module.selectPoints&&(a.traceIs(r,\"scatter-like\")?(i.hasMarkers(r)||i.hasText(r))&&(e=!0):a.traceIs(r,\"box-violin\")&&\"all\"!==r.boxpoints&&\"all\"!==r.points||(e=!0))}return e}(n)&&E.push(\"select2d\",\"lasso2d\"),Array.isArray(h)){for(var O=[],D=0;D<h.length;D++){var I=h[D];\"string\"==typeof I?-1!==c.indexOf(I)&&(e._has(\"mapbox\")||e._has(\"cartesian\"))&&E.push(I):O.push(I)}h=O}return T(E),T(A.concat(C)),T(L),function(t,e){if(e.length)if(Array.isArray(e[0]))for(var n=0;n<e.length;n++)t.push(e[n]);else t.push(e);return t}(M,h)}(t),u?u.update(t,h):e._modeBar=s(t,h)}else u&&(u.destroy(),delete e._modeBar)};var c=[\"drawline\",\"drawopenpath\",\"drawclosedpath\",\"drawcircle\",\"drawrect\",\"eraseshape\"]},{\"../../plots/cartesian/axis_ids\":831,\"../../registry\":911,\"../../traces/scatter/subtypes\":1212,\"../fx/helpers\":679,\"./buttons\":702,\"./modebar\":705}],705:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"fast-isnumeric\"),a=t(\"../../lib\"),o=t(\"../../fonts/ploticon\"),s=new DOMParser;function l(t){this.container=t.container,this.element=document.createElement(\"div\"),this.update(t.graphInfo,t.buttons),this.container.appendChild(this.element)}var c=l.prototype;c.update=function(t,e){this.graphInfo=t;var n=this.graphInfo._context,r=this.graphInfo._fullLayout,i=\"modebar-\"+r._uid;this.element.setAttribute(\"id\",i),this._uid=i,this.element.className=\"modebar\",\"hover\"===n.displayModeBar&&(this.element.className+=\" modebar--hover ease-bg\"),\"v\"===r.modebar.orientation&&(this.element.className+=\" vertical\",e=e.reverse());var o=r.modebar,s=\"hover\"===n.displayModeBar?\".js-plotly-plot .plotly:hover \":\"\";a.deleteRelatedStyleRule(i),a.addRelatedStyleRule(i,s+\"#\"+i+\" .modebar-group\",\"background-color: \"+o.bgcolor),a.addRelatedStyleRule(i,\"#\"+i+\" .modebar-btn .icon path\",\"fill: \"+o.color),a.addRelatedStyleRule(i,\"#\"+i+\" .modebar-btn:hover .icon path\",\"fill: \"+o.activecolor),a.addRelatedStyleRule(i,\"#\"+i+\" .modebar-btn.active .icon path\",\"fill: \"+o.activecolor);var l=!this.hasButtons(e),c=this.hasLogo!==n.displaylogo,u=this.locale!==n.locale;if(this.locale=n.locale,(l||c||u)&&(this.removeAllButtons(),this.updateButtons(e),n.watermark||n.displaylogo)){var h=this.getLogo();n.watermark&&(h.className=h.className+\" watermark\"),\"v\"===r.modebar.orientation?this.element.insertBefore(h,this.element.childNodes[0]):this.element.appendChild(h),this.hasLogo=!0}this.updateActiveButton()},c.updateButtons=function(t){var e=this;this.buttons=t,this.buttonElements=[],this.buttonsNames=[],this.buttons.forEach((function(t){var n=e.createGroup();t.forEach((function(t){var r=t.name;if(!r)throw new Error(\"must provide button 'name' in button config\");if(-1!==e.buttonsNames.indexOf(r))throw new Error(\"button name '\"+r+\"' is taken\");e.buttonsNames.push(r);var i=e.createButton(t);e.buttonElements.push(i),n.appendChild(i)})),e.element.appendChild(n)}))},c.createGroup=function(){var t=document.createElement(\"div\");return t.className=\"modebar-group\",t},c.createButton=function(t){var e=this,n=document.createElement(\"a\");n.setAttribute(\"rel\",\"tooltip\"),n.className=\"modebar-btn\";var i=t.title;void 0===i?i=t.name:\"function\"==typeof i&&(i=i(this.graphInfo)),(i||0===i)&&n.setAttribute(\"data-title\",i),void 0!==t.attr&&n.setAttribute(\"data-attr\",t.attr);var a=t.val;if(void 0!==a&&(\"function\"==typeof a&&(a=a(this.graphInfo)),n.setAttribute(\"data-val\",a)),\"function\"!=typeof t.click)throw new Error(\"must provide button 'click' function in button config\");n.addEventListener(\"click\",(function(n){t.click(e.graphInfo,n),e.updateActiveButton(n.currentTarget)})),n.setAttribute(\"data-toggle\",t.toggle||!1),t.toggle&&r.select(n).classed(\"active\",!0);var s=t.icon;return n.appendChild(\"function\"==typeof s?s():this.createIcon(s||o.question)),n.setAttribute(\"data-gravity\",t.gravity||\"n\"),n},c.createIcon=function(t){var e,n=i(t.height)?Number(t.height):t.ascent-t.descent,r=\"http://www.w3.org/2000/svg\";if(t.path){(e=document.createElementNS(r,\"svg\")).setAttribute(\"viewBox\",[0,0,t.width,n].join(\" \")),e.setAttribute(\"class\",\"icon\");var a=document.createElementNS(r,\"path\");a.setAttribute(\"d\",t.path),t.transform?a.setAttribute(\"transform\",t.transform):void 0!==t.ascent&&a.setAttribute(\"transform\",\"matrix(1 0 0 -1 0 \"+t.ascent+\")\"),e.appendChild(a)}return t.svg&&(e=s.parseFromString(t.svg,\"application/xml\").childNodes[0]),e.setAttribute(\"height\",\"1em\"),e.setAttribute(\"width\",\"1em\"),e},c.updateActiveButton=function(t){var e=this.graphInfo._fullLayout,n=void 0!==t?t.getAttribute(\"data-attr\"):null;this.buttonElements.forEach((function(t){var i=t.getAttribute(\"data-val\")||!0,o=t.getAttribute(\"data-attr\"),s=\"true\"===t.getAttribute(\"data-toggle\"),l=r.select(t);if(s)o===n&&l.classed(\"active\",!l.classed(\"active\"));else{var c=null===o?o:a.nestedProperty(e,o).get();l.classed(\"active\",c===i)}}))},c.hasButtons=function(t){var e=this.buttons;if(!e)return!1;if(t.length!==e.length)return!1;for(var n=0;n<t.length;++n){if(t[n].length!==e[n].length)return!1;for(var r=0;r<t[n].length;r++)if(t[n][r].name!==e[n][r].name)return!1}return!0},c.getLogo=function(){var t=this.createGroup(),e=document.createElement(\"a\");return e.href=\"https://plotly.com/\",e.target=\"_blank\",e.setAttribute(\"data-title\",a._(this.graphInfo,\"Produced with Plotly\")),e.className=\"modebar-btn plotlyjsicon modebar-btn--logo\",e.appendChild(this.createIcon(o.newplotlylogo)),t.appendChild(e),t},c.removeAllButtons=function(){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.hasLogo=!1},c.destroy=function(){a.removeElement(this.container.querySelector(\".modebar\")),a.deleteRelatedStyleRule(this._uid)},e.exports=function(t,e){var n=t._fullLayout,i=new l({graphInfo:t,container:n._modebardiv.node(),buttons:e});return n._privateplot&&r.select(i.element).append(\"span\").classed(\"badge-private float--left\",!0).text(\"PRIVATE\"),i}},{\"../../fonts/ploticon\":757,\"../../lib\":778,d3:169,\"fast-isnumeric\":241}],706:[function(t,e,n){\"use strict\";var r=t(\"../../plots/font_attributes\"),i=t(\"../color/attributes\"),a=(0,t(\"../../plot_api/plot_template\").templatedArray)(\"button\",{visible:{valType:\"boolean\",dflt:!0,editType:\"plot\"},step:{valType:\"enumerated\",values:[\"month\",\"year\",\"day\",\"hour\",\"minute\",\"second\",\"all\"],dflt:\"month\",editType:\"plot\"},stepmode:{valType:\"enumerated\",values:[\"backward\",\"todate\"],dflt:\"backward\",editType:\"plot\"},count:{valType:\"number\",min:0,dflt:1,editType:\"plot\"},label:{valType:\"string\",editType:\"plot\"},editType:\"plot\"});e.exports={visible:{valType:\"boolean\",editType:\"plot\"},buttons:a,x:{valType:\"number\",min:-2,max:3,editType:\"plot\"},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"left\",editType:\"plot\"},y:{valType:\"number\",min:-2,max:3,editType:\"plot\"},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],dflt:\"bottom\",editType:\"plot\"},font:r({editType:\"plot\"}),bgcolor:{valType:\"color\",dflt:i.lightLine,editType:\"plot\"},activecolor:{valType:\"color\",editType:\"plot\"},bordercolor:{valType:\"color\",dflt:i.defaultLine,editType:\"plot\"},borderwidth:{valType:\"number\",min:0,dflt:0,editType:\"plot\"},editType:\"plot\"}},{\"../../plot_api/plot_template\":817,\"../../plots/font_attributes\":856,\"../color/attributes\":642}],707:[function(t,e,n){\"use strict\";e.exports={yPad:.02,minButtonWidth:30,rx:3,ry:3,lightAmount:25,darkAmount:10}},{}],708:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../color\"),a=t(\"../../plot_api/plot_template\"),o=t(\"../../plots/array_container_defaults\"),s=t(\"./attributes\"),l=t(\"./constants\");function c(t,e,n,i){var a=i.calendar;function o(n,i){return r.coerce(t,e,s.buttons,n,i)}if(o(\"visible\")){var l=o(\"step\");\"all\"!==l&&(!a||\"gregorian\"===a||\"month\"!==l&&\"year\"!==l?o(\"stepmode\"):e.stepmode=\"backward\",o(\"count\")),o(\"label\")}}e.exports=function(t,e,n,u,h){var d=t.rangeselector||{},f=a.newContainer(e,\"rangeselector\");function p(t,e){return r.coerce(d,f,s,t,e)}if(p(\"visible\",o(d,f,{name:\"buttons\",handleItemDefaults:c,calendar:h}).length>0)){var m=function(t,e,n){for(var r=n.filter((function(n){return e[n].anchor===t._id})),i=0,a=0;a<r.length;a++){var o=e[r[a]].domain;o&&(i=Math.max(o[1],i))}return[t.domain[0],i+l.yPad]}(e,n,u);p(\"x\",m[0]),p(\"y\",m[1]),r.noneOrAll(t,e,[\"x\",\"y\"]),p(\"xanchor\"),p(\"yanchor\"),r.coerceFont(p,\"font\",n.font);var g=p(\"bgcolor\");p(\"activecolor\",i.contrast(g,l.lightAmount,l.darkAmount)),p(\"bordercolor\"),p(\"borderwidth\")}}},{\"../../lib\":778,\"../../plot_api/plot_template\":817,\"../../plots/array_container_defaults\":823,\"../color\":643,\"./attributes\":706,\"./constants\":707}],709:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../registry\"),a=t(\"../../plots/plots\"),o=t(\"../color\"),s=t(\"../drawing\"),l=t(\"../../lib\"),c=l.strTranslate,u=t(\"../../lib/svg_text_utils\"),h=t(\"../../plots/cartesian/axis_ids\"),d=t(\"../../constants/alignment\"),f=d.LINE_SPACING,p=d.FROM_TL,m=d.FROM_BR,g=t(\"./constants\"),y=t(\"./get_update_object\");function v(t){return t._id}function _(t,e,n){var r=l.ensureSingle(t,\"rect\",\"selector-rect\",(function(t){t.attr(\"shape-rendering\",\"crispEdges\")}));r.attr({rx:g.rx,ry:g.ry}),r.call(o.stroke,e.bordercolor).call(o.fill,function(t,e){return e._isActive||e._isHovered?t.activecolor:t.bgcolor}(e,n)).style(\"stroke-width\",e.borderwidth+\"px\")}function b(t,e,n,r){var i,a;l.ensureSingle(t,\"text\",\"selector-text\",(function(t){t.attr(\"text-anchor\",\"middle\")})).call(s.font,e.font).text((i=n,a=r._fullLayout._meta,i.label?a?l.templateString(i.label,a):i.label:\"all\"===i.step?\"all\":i.count+i.step.charAt(0))).call((function(t){u.convertToTspans(t,r)}))}e.exports=function(t){var e=t._fullLayout._infolayer.selectAll(\".rangeselector\").data(function(t){for(var e=h.list(t,\"x\",!0),n=[],r=0;r<e.length;r++){var i=e[r];i.rangeselector&&i.rangeselector.visible&&n.push(i)}return n}(t),v);e.enter().append(\"g\").classed(\"rangeselector\",!0),e.exit().remove(),e.style({cursor:\"pointer\",\"pointer-events\":\"all\"}),e.each((function(e){var n=r.select(this),o=e,h=o.rangeselector,d=n.selectAll(\"g.button\").data(l.filterVisible(h.buttons));d.enter().append(\"g\").classed(\"button\",!0),d.exit().remove(),d.each((function(e){var n=r.select(this),a=y(o,e);e._isActive=function(t,e,n){if(\"all\"===e.step)return!0===t.autorange;var r=Object.keys(n);return t.range[0]===n[r[0]]&&t.range[1]===n[r[1]]}(o,e,a),n.call(_,h,e),n.call(b,h,e,t),n.on(\"click\",(function(){t._dragged||i.call(\"_guiRelayout\",t,a)})),n.on(\"mouseover\",(function(){e._isHovered=!0,n.call(_,h,e)})),n.on(\"mouseout\",(function(){e._isHovered=!1,n.call(_,h,e)}))})),function(t,e,n,i,o){var h=0,d=0,y=n.borderwidth;e.each((function(){var t=r.select(this).select(\".selector-text\"),e=Math.max(n.font.size*f*u.lineCount(t),16)+3;d=Math.max(d,e)})),e.each((function(){var t=r.select(this),e=t.select(\".selector-rect\"),i=t.select(\".selector-text\"),a=i.node()&&s.bBox(i.node()).width,o=n.font.size*f,l=u.lineCount(i),p=Math.max(a+10,g.minButtonWidth);t.attr(\"transform\",c(y+h,y)),e.attr({x:0,y:0,width:p,height:d}),u.positionText(i,p/2,d/2-(l-1)*o/2+3),h+=p+5}));var v=t._fullLayout._size,_=v.l+v.w*n.x,b=v.t+v.h*(1-n.y),x=\"left\";l.isRightAnchor(n)&&(_-=h,x=\"right\"),l.isCenterAnchor(n)&&(_-=h/2,x=\"center\");var w=\"top\";l.isBottomAnchor(n)&&(b-=d,w=\"bottom\"),l.isMiddleAnchor(n)&&(b-=d/2,w=\"middle\"),h=Math.ceil(h),d=Math.ceil(d),_=Math.round(_),b=Math.round(b),a.autoMargin(t,i+\"-range-selector\",{x:n.x,y:n.y,l:h*p[x],r:h*m[x],b:d*m[w],t:d*p[w]}),o.attr(\"transform\",c(_,b))}(t,d,h,o._name,n)}))}},{\"../../constants/alignment\":745,\"../../lib\":778,\"../../lib/svg_text_utils\":803,\"../../plots/cartesian/axis_ids\":831,\"../../plots/plots\":891,\"../../registry\":911,\"../color\":643,\"../drawing\":665,\"./constants\":707,\"./get_update_object\":710,d3:169}],710:[function(t,e,n){\"use strict\";var r=t(\"d3\");e.exports=function(t,e){var n=t._name,i={};if(\"all\"===e.step)i[n+\".autorange\"]=!0;else{var a=function(t,e){var n,i=t.range,a=new Date(t.r2l(i[1])),o=e.step,s=e.count;switch(e.stepmode){case\"backward\":n=t.l2r(+r.time[o].utc.offset(a,-s));break;case\"todate\":var l=r.time[o].utc.offset(a,-s);n=t.l2r(+r.time[o].utc.ceil(l))}return[n,i[1]]}(t,e);i[n+\".range[0]\"]=a[0],i[n+\".range[1]\"]=a[1]}return i}},{d3:169}],711:[function(t,e,n){\"use strict\";e.exports={moduleType:\"component\",name:\"rangeselector\",schema:{subplots:{xaxis:{rangeselector:t(\"./attributes\")}}},layoutAttributes:t(\"./attributes\"),handleDefaults:t(\"./defaults\"),draw:t(\"./draw\")}},{\"./attributes\":706,\"./defaults\":708,\"./draw\":709}],712:[function(t,e,n){\"use strict\";var r=t(\"../color/attributes\");e.exports={bgcolor:{valType:\"color\",dflt:r.background,editType:\"plot\"},bordercolor:{valType:\"color\",dflt:r.defaultLine,editType:\"plot\"},borderwidth:{valType:\"integer\",dflt:0,min:0,editType:\"plot\"},autorange:{valType:\"boolean\",dflt:!0,editType:\"calc\",impliedEdits:{\"range[0]\":void 0,\"range[1]\":void 0}},range:{valType:\"info_array\",items:[{valType:\"any\",editType:\"calc\",impliedEdits:{\"^autorange\":!1}},{valType:\"any\",editType:\"calc\",impliedEdits:{\"^autorange\":!1}}],editType:\"calc\",impliedEdits:{autorange:!1}},thickness:{valType:\"number\",dflt:.15,min:0,max:1,editType:\"plot\"},visible:{valType:\"boolean\",dflt:!0,editType:\"calc\"},editType:\"calc\"}},{\"../color/attributes\":642}],713:[function(t,e,n){\"use strict\";var r=t(\"../../plots/cartesian/axis_ids\").list,i=t(\"../../plots/cartesian/autorange\").getAutoRange,a=t(\"./constants\");e.exports=function(t){for(var e=r(t,\"x\",!0),n=0;n<e.length;n++){var o=e[n],s=o[a.name];s&&s.visible&&s.autorange&&(s._input.autorange=!0,s._input.range=s.range=i(t,o))}}},{\"../../plots/cartesian/autorange\":827,\"../../plots/cartesian/axis_ids\":831,\"./constants\":714}],714:[function(t,e,n){\"use strict\";e.exports={name:\"rangeslider\",containerClassName:\"rangeslider-container\",bgClassName:\"rangeslider-bg\",rangePlotClassName:\"rangeslider-rangeplot\",maskMinClassName:\"rangeslider-mask-min\",maskMaxClassName:\"rangeslider-mask-max\",slideBoxClassName:\"rangeslider-slidebox\",grabberMinClassName:\"rangeslider-grabber-min\",grabAreaMinClassName:\"rangeslider-grabarea-min\",handleMinClassName:\"rangeslider-handle-min\",grabberMaxClassName:\"rangeslider-grabber-max\",grabAreaMaxClassName:\"rangeslider-grabarea-max\",handleMaxClassName:\"rangeslider-handle-max\",maskMinOppAxisClassName:\"rangeslider-mask-min-opp-axis\",maskMaxOppAxisClassName:\"rangeslider-mask-max-opp-axis\",maskColor:\"rgba(0,0,0,0.4)\",maskOppAxisColor:\"rgba(0,0,0,0.2)\",slideBoxFill:\"transparent\",slideBoxCursor:\"ew-resize\",grabAreaFill:\"transparent\",grabAreaCursor:\"col-resize\",grabAreaWidth:10,handleWidth:4,handleRadius:1,handleStrokeWidth:1,extraPad:15}},{}],715:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../plot_api/plot_template\"),a=t(\"../../plots/cartesian/axis_ids\"),o=t(\"./attributes\"),s=t(\"./oppaxis_attributes\");e.exports=function(t,e,n){var l=t[n],c=e[n];if(l.rangeslider||e._requestRangeslider[c._id]){r.isPlainObject(l.rangeslider)||(l.rangeslider={});var u,h,d=l.rangeslider,f=i.newContainer(c,\"rangeslider\");if(x(\"visible\")){x(\"bgcolor\",e.plot_bgcolor),x(\"bordercolor\"),x(\"borderwidth\"),x(\"thickness\"),x(\"autorange\",!c.isValidRange(d.range)),x(\"range\");var p=e._subplots;if(p)for(var m=p.cartesian.filter((function(t){return t.substr(0,t.indexOf(\"y\"))===a.name2id(n)})).map((function(t){return t.substr(t.indexOf(\"y\"),t.length)})),g=r.simpleMap(m,a.id2name),y=0;y<g.length;y++){var v=g[y];u=d[v]||{},h=i.newContainer(f,v,\"yaxis\");var _,b=e[v];u.range&&b.isValidRange(u.range)&&(_=\"fixed\"),\"match\"!==w(\"rangemode\",_)&&w(\"range\",b.range.slice())}f._input=d}}function x(t,e){return r.coerce(d,f,o,t,e)}function w(t,e){return r.coerce(u,h,s,t,e)}}},{\"../../lib\":778,\"../../plot_api/plot_template\":817,\"../../plots/cartesian/axis_ids\":831,\"./attributes\":712,\"./oppaxis_attributes\":719}],716:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../registry\"),a=t(\"../../plots/plots\"),o=t(\"../../lib\"),s=o.strTranslate,l=t(\"../drawing\"),c=t(\"../color\"),u=t(\"../titles\"),h=t(\"../../plots/cartesian\"),d=t(\"../../plots/cartesian/axis_ids\"),f=t(\"../dragelement\"),p=t(\"../../lib/setcursor\"),m=t(\"./constants\");function g(t,e,n,r){var i=o.ensureSingle(t,\"rect\",m.bgClassName,(function(t){t.attr({x:0,y:0,\"shape-rendering\":\"crispEdges\"})})),a=r.borderwidth%2==0?r.borderwidth:r.borderwidth-1,c=-r._offsetShift,u=l.crispRound(e,r.borderwidth);i.attr({width:r._width+a,height:r._height+a,transform:s(c,c),fill:r.bgcolor,stroke:r.bordercolor,\"stroke-width\":u})}function y(t,e,n,r){o.ensureSingleById(e._fullLayout._topdefs,\"clipPath\",r._clipId,(function(t){t.append(\"rect\").attr({x:0,y:0})})).select(\"rect\").attr({width:r._width,height:r._height})}function v(t,e,n,i){var s,c=e.calcdata,u=t.selectAll(\"g.\"+m.rangePlotClassName).data(n._subplotsWith,o.identity);u.enter().append(\"g\").attr(\"class\",(function(t){return m.rangePlotClassName+\" \"+t})).call(l.setClipUrl,i._clipId,e),u.order(),u.exit().remove(),u.each((function(t,o){var l=r.select(this),u=0===o,f=d.getFromId(e,t,\"y\"),p=f._name,m=i[p],g={data:[],layout:{xaxis:{type:n.type,domain:[0,1],range:i.range.slice(),calendar:n.calendar},width:i._width,height:i._height,margin:{t:0,b:0,l:0,r:0}},_context:e._context};n.rangebreaks&&(g.layout.xaxis.rangebreaks=n.rangebreaks),g.layout[p]={type:f.type,domain:[0,1],range:\"match\"!==m.rangemode?m.range.slice():f.range.slice(),calendar:f.calendar},f.rangebreaks&&(g.layout[p].rangebreaks=f.rangebreaks),a.supplyDefaults(g);var y=g._fullLayout.xaxis,v=g._fullLayout[p];y.clearCalc(),y.setScale(),v.clearCalc(),v.setScale();var _={id:t,plotgroup:l,xaxis:y,yaxis:v,isRangePlot:!0};u?s=_:(_.mainplot=\"xy\",_.mainplotinfo=s),h.rangePlot(e,_,function(t,e){for(var n=[],r=0;r<t.length;r++){var i=t[r],a=i[0].trace;a.xaxis+a.yaxis===e&&n.push(i)}return n}(c,t))}))}function _(t,e,n,r,i){o.ensureSingle(t,\"rect\",m.maskMinClassName,(function(t){t.attr({x:0,y:0,\"shape-rendering\":\"crispEdges\"})})).attr(\"height\",r._height).call(c.fill,m.maskColor),o.ensureSingle(t,\"rect\",m.maskMaxClassName,(function(t){t.attr({y:0,\"shape-rendering\":\"crispEdges\"})})).attr(\"height\",r._height).call(c.fill,m.maskColor),\"match\"!==i.rangemode&&(o.ensureSingle(t,\"rect\",m.maskMinOppAxisClassName,(function(t){t.attr({y:0,\"shape-rendering\":\"crispEdges\"})})).attr(\"width\",r._width).call(c.fill,m.maskOppAxisColor),o.ensureSingle(t,\"rect\",m.maskMaxOppAxisClassName,(function(t){t.attr({y:0,\"shape-rendering\":\"crispEdges\"})})).attr(\"width\",r._width).style(\"border-top\",m.maskOppBorder).call(c.fill,m.maskOppAxisColor))}function b(t,e,n,r){e._context.staticPlot||o.ensureSingle(t,\"rect\",m.slideBoxClassName,(function(t){t.attr({y:0,cursor:m.slideBoxCursor,\"shape-rendering\":\"crispEdges\"})})).attr({height:r._height,fill:m.slideBoxFill})}function x(t,e,n,r){var i=o.ensureSingle(t,\"g\",m.grabberMinClassName),a=o.ensureSingle(t,\"g\",m.grabberMaxClassName),s={x:0,width:m.handleWidth,rx:m.handleRadius,fill:c.background,stroke:c.defaultLine,\"stroke-width\":m.handleStrokeWidth,\"shape-rendering\":\"crispEdges\"},l={y:Math.round(r._height/4),height:Math.round(r._height/2)};o.ensureSingle(i,\"rect\",m.handleMinClassName,(function(t){t.attr(s)})).attr(l),o.ensureSingle(a,\"rect\",m.handleMaxClassName,(function(t){t.attr(s)})).attr(l);var u={width:m.grabAreaWidth,x:0,y:0,fill:m.grabAreaFill,cursor:e._context.staticPlot?void 0:m.grabAreaCursor};o.ensureSingle(i,\"rect\",m.grabAreaMinClassName,(function(t){t.attr(u)})).attr(\"height\",r._height),o.ensureSingle(a,\"rect\",m.grabAreaMaxClassName,(function(t){t.attr(u)})).attr(\"height\",r._height)}e.exports=function(t){for(var e=t._fullLayout,n=e._rangeSliderData,a=0;a<n.length;a++){var l=n[a][m.name];l._clipId=l._id+\"-\"+e._uid}var c=e._infolayer.selectAll(\"g.\"+m.containerClassName).data(n,(function(t){return t._name}));c.exit().each((function(t){e._topdefs.select(\"#\"+t[m.name]._clipId).remove()})).remove(),0!==n.length&&(c.enter().append(\"g\").classed(m.containerClassName,!0).attr(\"pointer-events\",\"all\"),c.each((function(n){var a=r.select(this),l=n[m.name],c=e[d.id2name(n.anchor)],h=l[d.id2name(n.anchor)];if(l.range){var w,k=o.simpleMap(l.range,n.r2l),M=o.simpleMap(n.range,n.r2l);w=M[0]<M[1]?[Math.min(k[0],M[0]),Math.max(k[1],M[1])]:[Math.max(k[0],M[0]),Math.min(k[1],M[1])],l.range=l._input.range=o.simpleMap(w,n.l2r)}n.cleanRange(\"rangeslider.range\");var T=e._size,S=n.domain;l._width=T.w*(S[1]-S[0]);var A=Math.round(T.l+T.w*S[0]),L=Math.round(T.t+T.h*(1-n._counterDomainMin)+(\"bottom\"===n.side?n._depth:0)+l._offsetShift+m.extraPad);a.attr(\"transform\",s(A,L)),l._rl=o.simpleMap(l.range,n.r2l);var C=l._rl[0],E=l._rl[1],O=E-C;if(l.p2d=function(t){return t/l._width*O+C},l.d2p=function(t){return(t-C)/O*l._width},n.rangebreaks){var D=n.locateBreaks(C,E);if(D.length){var I,P,R=0;for(I=0;I<D.length;I++)R+=(P=D[I]).max-P.min;var z=l._width/(E-C-R),j=[-z*C];for(I=0;I<D.length;I++)j.push(j[j.length-1]-z*((P=D[I]).max-P.min));for(l.d2p=function(t){for(var e=j[0],n=0;n<D.length;n++){var r=D[n];if(t>=r.max)e=j[n+1];else if(t<r.min)break}return e+z*t},I=0;I<D.length;I++)(P=D[I]).pmin=l.d2p(P.min),P.pmax=l.d2p(P.max);l.p2d=function(t){for(var e=j[0],n=0;n<D.length;n++){var r=D[n];if(t>=r.pmax)e=j[n+1];else if(t<r.pmin)break}return(t-e)/z}}}if(\"match\"!==h.rangemode){var F=c.r2l(h.range[0]),N=c.r2l(h.range[1])-F;l.d2pOppAxis=function(t){return(t-F)/N*l._height}}a.call(g,t,n,l).call(y,t,n,l).call(v,t,n,l).call(_,t,n,l,h).call(b,t,n,l).call(x,t,n,l),function(t,e,n,a){if(!e._context.staticPlot){var s=t.select(\"rect.\"+m.slideBoxClassName).node(),l=t.select(\"rect.\"+m.grabAreaMinClassName).node(),c=t.select(\"rect.\"+m.grabAreaMaxClassName).node();t.on(\"mousedown\",u),t.on(\"touchstart\",u)}function u(){var u=r.event,h=u.target,d=u.clientX||u.touches[0].clientX,m=d-t.node().getBoundingClientRect().left,g=a.d2p(n._rl[0]),y=a.d2p(n._rl[1]),v=f.coverSlip();function _(t){var u,f,_,b=+(t.clientX||t.touches[0].clientX)-d;switch(h){case s:_=\"ew-resize\",u=g+b,f=y+b;break;case l:_=\"col-resize\",u=g+b,f=y;break;case c:_=\"col-resize\",u=g,f=y+b;break;default:_=\"ew-resize\",u=m,f=m+b}if(f<u){var x=f;f=u,u=x}a._pixelMin=u,a._pixelMax=f,p(r.select(v),_),function(t,e,n,r){function a(t){return n.l2r(o.constrain(t,r._rl[0],r._rl[1]))}var s=a(r.p2d(r._pixelMin)),l=a(r.p2d(r._pixelMax));window.requestAnimationFrame((function(){i.call(\"_guiRelayout\",e,n._name+\".range\",[s,l])}))}(0,e,n,a)}function b(){v.removeEventListener(\"mousemove\",_),v.removeEventListener(\"mouseup\",b),this.removeEventListener(\"touchmove\",_),this.removeEventListener(\"touchend\",b),o.removeElement(v)}this.addEventListener(\"touchmove\",_),this.addEventListener(\"touchend\",b),v.addEventListener(\"mousemove\",_),v.addEventListener(\"mouseup\",b)}}(a,t,n,l),function(t,e,n,r,i,a){var l=m.handleWidth/2;function c(t){return o.constrain(t,0,r._width)}function u(t){return o.constrain(t,0,r._height)}function h(t){return o.constrain(t,-l,r._width+l)}var d=c(r.d2p(n._rl[0])),f=c(r.d2p(n._rl[1]));if(t.select(\"rect.\"+m.slideBoxClassName).attr(\"x\",d).attr(\"width\",f-d),t.select(\"rect.\"+m.maskMinClassName).attr(\"width\",d),t.select(\"rect.\"+m.maskMaxClassName).attr(\"x\",f).attr(\"width\",r._width-f),\"match\"!==a.rangemode){var p=r._height-u(r.d2pOppAxis(i._rl[1])),g=r._height-u(r.d2pOppAxis(i._rl[0]));t.select(\"rect.\"+m.maskMinOppAxisClassName).attr(\"x\",d).attr(\"height\",p).attr(\"width\",f-d),t.select(\"rect.\"+m.maskMaxOppAxisClassName).attr(\"x\",d).attr(\"y\",g).attr(\"height\",r._height-g).attr(\"width\",f-d),t.select(\"rect.\"+m.slideBoxClassName).attr(\"y\",p).attr(\"height\",g-p)}var y=.5,v=Math.round(h(d-l))-y,_=Math.round(h(f-l))+y;t.select(\"g.\"+m.grabberMinClassName).attr(\"transform\",s(v,y)),t.select(\"g.\"+m.grabberMaxClassName).attr(\"transform\",s(_,y))}(a,0,n,l,c,h),\"bottom\"===n.side&&u.draw(t,n._id+\"title\",{propContainer:n,propName:n._name+\".title\",placeholder:e._dfltTitle.x,attributes:{x:n._offset+n._length/2,y:L+l._height+l._offsetShift+10+1.5*n.title.font.size,\"text-anchor\":\"middle\"}})})))}},{\"../../lib\":778,\"../../lib/setcursor\":799,\"../../plots/cartesian\":841,\"../../plots/cartesian/axis_ids\":831,\"../../plots/plots\":891,\"../../registry\":911,\"../color\":643,\"../dragelement\":662,\"../drawing\":665,\"../titles\":738,\"./constants\":714,d3:169}],717:[function(t,e,n){\"use strict\";var r=t(\"../../plots/cartesian/axis_ids\"),i=t(\"../../lib/svg_text_utils\"),a=t(\"./constants\"),o=t(\"../../constants/alignment\").LINE_SPACING,s=a.name;function l(t){var e=t&&t[s];return e&&e.visible}n.isVisible=l,n.makeData=function(t){var e=r.list({_fullLayout:t},\"x\",!0),n=t.margin,i=[];if(!t._has(\"gl2d\"))for(var a=0;a<e.length;a++){var o=e[a];if(l(o)){i.push(o);var c=o[s];c._id=s+o._id,c._height=(t.height-n.b-n.t)*c.thickness,c._offsetShift=Math.floor(c.borderwidth/2)}}t._rangeSliderData=i},n.autoMarginOpts=function(t,e){var n=t._fullLayout,r=e[s],l=e._id.charAt(0),c=0,u=0;return\"bottom\"===e.side&&(c=e._depth,e.title.text!==n._dfltTitle[l]&&(u=1.5*e.title.font.size+10+r._offsetShift,u+=(e.title.text.match(i.BR_TAG_ALL)||[]).length*e.title.font.size*o)),{x:0,y:e._counterDomainMin,l:0,r:0,t:0,b:r._height+c+Math.max(n.margin.b,u),pad:a.extraPad+2*r._offsetShift}}},{\"../../constants/alignment\":745,\"../../lib/svg_text_utils\":803,\"../../plots/cartesian/axis_ids\":831,\"./constants\":714}],718:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./attributes\"),a=t(\"./oppaxis_attributes\"),o=t(\"./helpers\");e.exports={moduleType:\"component\",name:\"rangeslider\",schema:{subplots:{xaxis:{rangeslider:r.extendFlat({},i,{yaxis:a})}}},layoutAttributes:t(\"./attributes\"),handleDefaults:t(\"./defaults\"),calcAutorange:t(\"./calc_autorange\"),draw:t(\"./draw\"),isVisible:o.isVisible,makeData:o.makeData,autoMarginOpts:o.autoMarginOpts}},{\"../../lib\":778,\"./attributes\":712,\"./calc_autorange\":713,\"./defaults\":715,\"./draw\":716,\"./helpers\":717,\"./oppaxis_attributes\":719}],719:[function(t,e,n){\"use strict\";e.exports={_isSubplotObj:!0,rangemode:{valType:\"enumerated\",values:[\"auto\",\"fixed\",\"match\"],dflt:\"match\",editType:\"calc\"},range:{valType:\"info_array\",items:[{valType:\"any\",editType:\"plot\"},{valType:\"any\",editType:\"plot\"}],editType:\"plot\"},editType:\"calc\"}},{}],720:[function(t,e,n){\"use strict\";var r=t(\"../annotations/attributes\"),i=t(\"../../traces/scatter/attributes\").line,a=t(\"../drawing/attributes\").dash,o=t(\"../../lib/extend\").extendFlat,s=t(\"../../plot_api/plot_template\").templatedArray;t(\"../../constants/axis_placeable_objects\"),e.exports=s(\"shape\",{visible:{valType:\"boolean\",dflt:!0,editType:\"calc+arraydraw\"},type:{valType:\"enumerated\",values:[\"circle\",\"rect\",\"path\",\"line\"],editType:\"calc+arraydraw\"},layer:{valType:\"enumerated\",values:[\"below\",\"above\"],dflt:\"above\",editType:\"arraydraw\"},xref:o({},r.xref,{}),xsizemode:{valType:\"enumerated\",values:[\"scaled\",\"pixel\"],dflt:\"scaled\",editType:\"calc+arraydraw\"},xanchor:{valType:\"any\",editType:\"calc+arraydraw\"},x0:{valType:\"any\",editType:\"calc+arraydraw\"},x1:{valType:\"any\",editType:\"calc+arraydraw\"},yref:o({},r.yref,{}),ysizemode:{valType:\"enumerated\",values:[\"scaled\",\"pixel\"],dflt:\"scaled\",editType:\"calc+arraydraw\"},yanchor:{valType:\"any\",editType:\"calc+arraydraw\"},y0:{valType:\"any\",editType:\"calc+arraydraw\"},y1:{valType:\"any\",editType:\"calc+arraydraw\"},path:{valType:\"string\",editType:\"calc+arraydraw\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,editType:\"arraydraw\"},line:{color:o({},i.color,{editType:\"arraydraw\"}),width:o({},i.width,{editType:\"calc+arraydraw\"}),dash:o({},a,{editType:\"arraydraw\"}),editType:\"calc+arraydraw\"},fillcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"arraydraw\"},fillrule:{valType:\"enumerated\",values:[\"evenodd\",\"nonzero\"],dflt:\"evenodd\",editType:\"arraydraw\"},editable:{valType:\"boolean\",dflt:!1,editType:\"calc+arraydraw\"},editType:\"arraydraw\"})},{\"../../constants/axis_placeable_objects\":746,\"../../lib/extend\":768,\"../../plot_api/plot_template\":817,\"../../traces/scatter/attributes\":1187,\"../annotations/attributes\":626,\"../drawing/attributes\":664}],721:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../plots/cartesian/axes\"),a=t(\"./constants\"),o=t(\"./helpers\");function s(t){return c(t.line.width,t.xsizemode,t.x0,t.x1,t.path,!1)}function l(t){return c(t.line.width,t.ysizemode,t.y0,t.y1,t.path,!0)}function c(t,e,n,i,s,l){var c=t/2,u=l;if(\"pixel\"===e){var h=s?o.extractPathCoords(s,l?a.paramIsY:a.paramIsX):[n,i],d=r.aggNums(Math.max,null,h),f=r.aggNums(Math.min,null,h),p=f<0?Math.abs(f)+c:c,m=d>0?d+c:c;return{ppad:c,ppadplus:u?p:m,ppadminus:u?m:p}}return{ppad:c}}function u(t,e,n,r,i){var s=\"category\"===t.type||\"multicategory\"===t.type?t.r2c:t.d2c;if(void 0!==e)return[s(e),s(n)];if(r){var l,c,u,h,d=1/0,f=-1/0,p=r.match(a.segmentRE);for(\"date\"===t.type&&(s=o.decodeDate(s)),l=0;l<p.length;l++)void 0!==(c=i[p[l].charAt(0)].drawn)&&(!(u=p[l].substr(1).match(a.paramRE))||u.length<c||((h=s(u[c]))<d&&(d=h),h>f&&(f=h)));return f>=d?[d,f]:void 0}}e.exports=function(t){var e=r.filterVisible(t._fullLayout.shapes);if(e.length&&t._fullData.length)for(var n=0;n<e.length;n++){var o,c,h=e[n];h._extremes={};var d=i.getRefType(h.xref),f=i.getRefType(h.yref);if(\"paper\"!==h.xref&&\"domain\"!==d){var p=\"pixel\"===h.xsizemode?h.xanchor:h.x0,m=\"pixel\"===h.xsizemode?h.xanchor:h.x1;(c=u(o=i.getFromId(t,h.xref),p,m,h.path,a.paramIsX))&&(h._extremes[o._id]=i.findExtremes(o,c,s(h)))}if(\"paper\"!==h.yref&&\"domain\"!==f){var g=\"pixel\"===h.ysizemode?h.yanchor:h.y0,y=\"pixel\"===h.ysizemode?h.yanchor:h.y1;(c=u(o=i.getFromId(t,h.yref),g,y,h.path,a.paramIsY))&&(h._extremes[o._id]=i.findExtremes(o,c,l(h)))}}}},{\"../../lib\":778,\"../../plots/cartesian/axes\":828,\"./constants\":722,\"./helpers\":731}],722:[function(t,e,n){\"use strict\";e.exports={segmentRE:/[MLHVQCTSZ][^MLHVQCTSZ]*/g,paramRE:/[^\\s,]+/g,paramIsX:{M:{0:!0,drawn:0},L:{0:!0,drawn:0},H:{0:!0,drawn:0},V:{},Q:{0:!0,2:!0,drawn:2},C:{0:!0,2:!0,4:!0,drawn:4},T:{0:!0,drawn:0},S:{0:!0,2:!0,drawn:2},Z:{}},paramIsY:{M:{1:!0,drawn:1},L:{1:!0,drawn:1},H:{},V:{0:!0,drawn:0},Q:{1:!0,3:!0,drawn:3},C:{1:!0,3:!0,5:!0,drawn:5},T:{1:!0,drawn:1},S:{1:!0,3:!0,drawn:5},Z:{}},numParams:{M:2,L:2,H:1,V:1,Q:4,C:6,T:2,S:4,Z:0}}},{}],723:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../plots/cartesian/axes\"),a=t(\"../../plots/array_container_defaults\"),o=t(\"./attributes\"),s=t(\"./helpers\");function l(t,e,n){function a(n,i){return r.coerce(t,e,o,n,i)}if(a(\"visible\")){var l=a(\"path\"),c=a(\"type\",l?\"path\":\"rect\");\"path\"!==e.type&&delete e.path,a(\"editable\"),a(\"layer\"),a(\"opacity\"),a(\"fillcolor\"),a(\"fillrule\"),a(\"line.width\")&&(a(\"line.color\"),a(\"line.dash\"));for(var u=a(\"xsizemode\"),h=a(\"ysizemode\"),d=[\"x\",\"y\"],f=0;f<2;f++){var p,m,g,y=d[f],v=y+\"anchor\",_=\"x\"===y?u:h,b={_fullLayout:n},x=i.coerceRef(t,e,b,y,void 0,\"paper\");if(\"range\"===i.getRefType(x)?((p=i.getFromId(b,x))._shapeIndices.push(e._index),g=s.rangeToShapePosition(p),m=s.shapePositionToRange(p)):m=g=r.identity,\"path\"!==c){var w=y+\"0\",k=y+\"1\",M=t[w],T=t[k];t[w]=m(t[w],!0),t[k]=m(t[k],!0),\"pixel\"===_?(a(w,0),a(k,10)):(i.coercePosition(e,b,a,x,w,.25),i.coercePosition(e,b,a,x,k,.75)),e[w]=g(e[w]),e[k]=g(e[k]),t[w]=M,t[k]=T}if(\"pixel\"===_){var S=t[v];t[v]=m(t[v],!0),i.coercePosition(e,b,a,x,v,.25),e[v]=g(e[v]),t[v]=S}}\"path\"===c?a(\"path\"):r.noneOrAll(t,e,[\"x0\",\"x1\",\"y0\",\"y1\"])}}e.exports=function(t,e){a(t,e,{name:\"shapes\",handleItemDefaults:l})}},{\"../../lib\":778,\"../../plots/array_container_defaults\":823,\"../../plots/cartesian/axes\":828,\"./attributes\":720,\"./helpers\":731}],724:[function(t,e,n){\"use strict\";var r=t(\"../../registry\"),i=t(\"../../lib\"),a=t(\"../../plots/cartesian/axes\"),o=t(\"./draw_newshape/helpers\").readPaths,s=t(\"./draw_newshape/display_outlines\"),l=t(\"../../plots/cartesian/handle_outline\").clearOutlineControllers,c=t(\"../color\"),u=t(\"../drawing\"),h=t(\"../../plot_api/plot_template\").arrayEditor,d=t(\"../dragelement\"),f=t(\"../../lib/setcursor\"),p=t(\"./constants\"),m=t(\"./helpers\");function g(t){var e=t._fullLayout;for(var n in e._shapeUpperLayer.selectAll(\"path\").remove(),e._shapeLowerLayer.selectAll(\"path\").remove(),e._plots){var r=e._plots[n].shapelayer;r&&r.selectAll(\"path\").remove()}for(var i=0;i<e.shapes.length;i++)e.shapes[i].visible&&_(t,i)}function y(t){return!!t._fullLayout._drawing}function v(t){return!t._context.edits.shapePosition}function _(t,e){t._fullLayout._paperdiv.selectAll('.shapelayer [data-index=\"'+e+'\"]').remove();var n=m.makeOptionsAndPlotinfo(t,e),l=n.options,_=n.plotinfo;l._input&&!1!==l.visible&&function(n){var M=x(t,l),T={\"data-index\":e,\"fill-rule\":l.fillrule,d:M},S=l.opacity,A=l.fillcolor,L=l.line.width?l.line.color:\"rgba(0,0,0,0)\",C=l.line.width,E=l.line.dash;C||!0!==l.editable||(C=5,E=\"solid\");var O=\"Z\"!==M[M.length-1],D=v(t)&&l.editable&&t._fullLayout._activeShapeIndex===e;D&&(A=O?\"rgba(0,0,0,0)\":t._fullLayout.activeshape.fillcolor,S=t._fullLayout.activeshape.opacity);var I,P=n.append(\"path\").attr(T).style(\"opacity\",S).call(c.stroke,L).call(c.fill,A).call(u.dashLine,E,C);if(b(P,t,l),(D||t._context.edits.shapePosition)&&(I=h(t.layout,\"shapes\",l)),D){P.style({cursor:\"move\"});var R={element:P.node(),plotinfo:_,gd:t,editHelpers:I,isActiveShape:!0},z=o(M,t);s(z,P,R)}else t._context.edits.shapePosition?function(t,e,n,o,s,l){var c,h,g,v,_,k,M,T,S,A,L,C,E,O,D,I,P=\"pixel\"===n.xsizemode,R=\"pixel\"===n.ysizemode,z=\"line\"===n.type,j=\"path\"===n.type,F=l.modifyItem,N=a.getFromId(t,n.xref),B=a.getRefType(n.xref),Y=a.getFromId(t,n.yref),H=a.getRefType(n.yref),V=m.getDataToPixel(t,N,!1,B),U=m.getDataToPixel(t,Y,!0,H),W=m.getPixelToData(t,N,!1,B),q=m.getPixelToData(t,Y,!0,H),G=z?function(){var t=10,r=Math.max(n.line.width,t),i=s.append(\"g\").attr(\"data-index\",o);i.append(\"path\").attr(\"d\",e.attr(\"d\")).style({cursor:\"move\",\"stroke-width\":r,\"stroke-opacity\":\"0\"});var a={\"fill-opacity\":\"0\"},l=Math.max(r/2,t);return i.append(\"circle\").attr({\"data-line-point\":\"start-point\",cx:P?V(n.xanchor)+n.x0:V(n.x0),cy:R?U(n.yanchor)-n.y0:U(n.y0),r:l}).style(a).classed(\"cursor-grab\",!0),i.append(\"circle\").attr({\"data-line-point\":\"end-point\",cx:P?V(n.xanchor)+n.x1:V(n.x1),cy:R?U(n.yanchor)-n.y1:U(n.y1),r:l}).style(a).classed(\"cursor-grab\",!0),i}():e,X={element:G.node(),gd:t,prepFn:function(r){y(t)||(P&&(_=V(n.xanchor)),R&&(k=U(n.yanchor)),\"path\"===n.type?D=n.path:(c=P?n.x0:V(n.x0),h=R?n.y0:U(n.y0),g=P?n.x1:V(n.x1),v=R?n.y1:U(n.y1)),c<g?(S=c,E=\"x0\",A=g,O=\"x1\"):(S=g,E=\"x1\",A=c,O=\"x0\"),!R&&h<v||R&&h>v?(M=h,L=\"y0\",T=v,C=\"y1\"):(M=v,L=\"y1\",T=h,C=\"y0\"),Z(r),$(s,n),function(t,e,n){var r=e.xref,i=e.yref,o=a.getFromId(n,r),s=a.getFromId(n,i),l=\"\";\"paper\"===r||o.autorange||(l+=r),\"paper\"===i||s.autorange||(l+=i),u.setClipUrl(t,l?\"clip\"+n._fullLayout._uid+l:null,n)}(e,n,t),X.moveFn=\"move\"===I?J:K,X.altKey=r.altKey)},doneFn:function(){y(t)||(f(e),Q(s),b(e,t,n),r.call(\"_guiRelayout\",t,l.getUpdateObj()))},clickFn:function(){y(t)||Q(s)}};function Z(n){if(y(t))I=null;else if(z)I=\"path\"===n.target.tagName?\"move\":\"start-point\"===n.target.attributes[\"data-line-point\"].value?\"resize-over-start-point\":\"resize-over-end-point\";else{var r=X.element.getBoundingClientRect(),i=r.right-r.left,a=r.bottom-r.top,o=!j&&i>10&&a>10&&!n.shiftKey?d.getCursor((n.clientX-r.left)/i,1-(n.clientY-r.top)/a):\"move\";f(e,o),I=o.split(\"-\")[0]}}function J(r,i){if(\"path\"===n.type){var a=function(t){return t},o=a,l=a;P?F(\"xanchor\",n.xanchor=W(_+r)):(o=function(t){return W(V(t)+r)},N&&\"date\"===N.type&&(o=m.encodeDate(o))),R?F(\"yanchor\",n.yanchor=q(k+i)):(l=function(t){return q(U(t)+i)},Y&&\"date\"===Y.type&&(l=m.encodeDate(l))),F(\"path\",n.path=w(D,o,l))}else P?F(\"xanchor\",n.xanchor=W(_+r)):(F(\"x0\",n.x0=W(c+r)),F(\"x1\",n.x1=W(g+r))),R?F(\"yanchor\",n.yanchor=q(k+i)):(F(\"y0\",n.y0=q(h+i)),F(\"y1\",n.y1=q(v+i)));e.attr(\"d\",x(t,n)),$(s,n)}function K(r,i){if(j){var a=function(t){return t},o=a,l=a;P?F(\"xanchor\",n.xanchor=W(_+r)):(o=function(t){return W(V(t)+r)},N&&\"date\"===N.type&&(o=m.encodeDate(o))),R?F(\"yanchor\",n.yanchor=q(k+i)):(l=function(t){return q(U(t)+i)},Y&&\"date\"===Y.type&&(l=m.encodeDate(l))),F(\"path\",n.path=w(D,o,l))}else if(z){if(\"resize-over-start-point\"===I){var u=c+r,d=R?h-i:h+i;F(\"x0\",n.x0=P?u:W(u)),F(\"y0\",n.y0=R?d:q(d))}else if(\"resize-over-end-point\"===I){var f=g+r,p=R?v-i:v+i;F(\"x1\",n.x1=P?f:W(f)),F(\"y1\",n.y1=R?p:q(p))}}else{var y=function(t){return-1!==I.indexOf(t)},b=y(\"n\"),B=y(\"s\"),H=y(\"w\"),G=y(\"e\"),X=b?M+i:M,Z=B?T+i:T,J=H?S+r:S,K=G?A+r:A;R&&(b&&(X=M-i),B&&(Z=T-i)),(!R&&Z-X>10||R&&X-Z>10)&&(F(L,n[L]=R?X:q(X)),F(C,n[C]=R?Z:q(Z))),K-J>10&&(F(E,n[E]=P?J:W(J)),F(O,n[O]=P?K:W(K)))}e.attr(\"d\",x(t,n)),$(s,n)}function $(t,e){(P||R)&&function(){var n=\"path\"!==e.type,r=t.selectAll(\".visual-cue\").data([0]);r.enter().append(\"path\").attr({fill:\"#fff\",\"fill-rule\":\"evenodd\",stroke:\"#000\",\"stroke-width\":1}).classed(\"visual-cue\",!0);var a=V(P?e.xanchor:i.midRange(n?[e.x0,e.x1]:m.extractPathCoords(e.path,p.paramIsX))),o=U(R?e.yanchor:i.midRange(n?[e.y0,e.y1]:m.extractPathCoords(e.path,p.paramIsY)));a=m.roundPositionForSharpStrokeRendering(a,1),o=m.roundPositionForSharpStrokeRendering(o,1),r.attr(\"d\",P&&R?\"M\"+(a-1-1)+\",\"+(o-1-1)+\"h-8v2h8 v8h2v-8 h8v-2h-8 v-8h-2 Z\":P?\"M\"+(a-1-1)+\",\"+(o-9-1)+\"v18 h2 v-18 Z\":\"M\"+(a-9-1)+\",\"+(o-1-1)+\"h18 v2 h-18 Z\")}()}function Q(t){t.selectAll(\".visual-cue\").remove()}d.init(X),G.node().onmousemove=Z}(t,P,l,e,n,I):!0===l.editable&&P.style(\"pointer-events\",O||c.opacity(A)*S<=.5?\"stroke\":\"all\");P.node().addEventListener(\"click\",(function(){return function(t,e){if(v(t)){var n=+e.node().getAttribute(\"data-index\");if(n>=0){if(n===t._fullLayout._activeShapeIndex)return void k(t);t._fullLayout._activeShapeIndex=n,t._fullLayout._deactivateShape=k,g(t)}}}(t,P)}))}(\"below\"!==l.layer?t._fullLayout._shapeUpperLayer:\"paper\"===l.xref||\"paper\"===l.yref?t._fullLayout._shapeLowerLayer:_._hadPlotinfo?(_.mainplotinfo||_).shapelayer:t._fullLayout._shapeLowerLayer)}function b(t,e,n){var r=(n.xref+n.yref).replace(/paper/g,\"\").replace(/[xyz][1-9]* *domain/g,\"\");u.setClipUrl(t,r?\"clip\"+e._fullLayout._uid+r:null,e)}function x(t,e){var n,r,o,s,l,c,u,h,d=e.type,f=a.getRefType(e.xref),g=a.getRefType(e.yref),y=a.getFromId(t,e.xref),v=a.getFromId(t,e.yref),_=t._fullLayout._size;if(y?\"domain\"===f?r=function(t){return y._offset+y._length*t}:(n=m.shapePositionToRange(y),r=function(t){return y._offset+y.r2p(n(t,!0))}):r=function(t){return _.l+_.w*t},v?\"domain\"===g?s=function(t){return v._offset+v._length*(1-t)}:(o=m.shapePositionToRange(v),s=function(t){return v._offset+v.r2p(o(t,!0))}):s=function(t){return _.t+_.h*(1-t)},\"path\"===d)return y&&\"date\"===y.type&&(r=m.decodeDate(r)),v&&\"date\"===v.type&&(s=m.decodeDate(s)),function(t,e,n){var r=t.xsizemode,a=t.ysizemode,o=t.xanchor,s=t.yanchor;return t.path.replace(p.segmentRE,(function(t){var l=0,c=t.charAt(0),u=p.paramIsX[c],h=p.paramIsY[c],d=p.numParams[c],f=t.substr(1).replace(p.paramRE,(function(t){return u[l]?t=\"pixel\"===r?e(o)+Number(t):e(t):h[l]&&(t=\"pixel\"===a?n(s)-Number(t):n(t)),++l>d&&(t=\"X\"),t}));return l>d&&(f=f.replace(/[\\s,]*X.*/,\"\"),i.log(\"Ignoring extra params in segment \"+t)),c+f}))}(e,r,s);if(\"pixel\"===e.xsizemode){var b=r(e.xanchor);l=b+e.x0,c=b+e.x1}else l=r(e.x0),c=r(e.x1);if(\"pixel\"===e.ysizemode){var x=s(e.yanchor);u=x-e.y0,h=x-e.y1}else u=s(e.y0),h=s(e.y1);if(\"line\"===d)return\"M\"+l+\",\"+u+\"L\"+c+\",\"+h;if(\"rect\"===d)return\"M\"+l+\",\"+u+\"H\"+c+\"V\"+h+\"H\"+l+\"Z\";var w=(l+c)/2,k=(u+h)/2,M=Math.abs(w-l),T=Math.abs(k-u),S=\"A\"+M+\",\"+T,A=w+M+\",\"+k;return\"M\"+A+S+\" 0 1,1 \"+w+\",\"+(k-T)+S+\" 0 0,1 \"+A+\"Z\"}function w(t,e,n){return t.replace(p.segmentRE,(function(t){var r=0,i=t.charAt(0),a=p.paramIsX[i],o=p.paramIsY[i],s=p.numParams[i];return i+t.substr(1).replace(p.paramRE,(function(t){return r>=s||(a[r]?t=e(t):o[r]&&(t=n(t)),r++),t}))}))}function k(t){v(t)&&t._fullLayout._activeShapeIndex>=0&&(l(t),delete t._fullLayout._activeShapeIndex,g(t))}e.exports={draw:g,drawOne:_,eraseActiveShape:function(t){if(v(t)){l(t);var e=t._fullLayout._activeShapeIndex,n=(t.layout||{}).shapes||[];if(e<n.length){for(var i=[],a=0;a<n.length;a++)a!==e&&i.push(n[a]);delete t._fullLayout._activeShapeIndex,r.call(\"_guiRelayout\",t,{shapes:i})}}}}},{\"../../lib\":778,\"../../lib/setcursor\":799,\"../../plot_api/plot_template\":817,\"../../plots/cartesian/axes\":828,\"../../plots/cartesian/handle_outline\":838,\"../../registry\":911,\"../color\":643,\"../dragelement\":662,\"../drawing\":665,\"./constants\":722,\"./draw_newshape/display_outlines\":728,\"./draw_newshape/helpers\":729,\"./helpers\":731}],725:[function(t,e,n){\"use strict\";var r=t(\"../../drawing/attributes\").dash,i=t(\"../../../lib/extend\").extendFlat;e.exports={newshape:{line:{color:{valType:\"color\",editType:\"none\"},width:{valType:\"number\",min:0,dflt:4,editType:\"none\"},dash:i({},r,{dflt:\"solid\",editType:\"none\"}),editType:\"none\"},fillcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"none\"},fillrule:{valType:\"enumerated\",values:[\"evenodd\",\"nonzero\"],dflt:\"evenodd\",editType:\"none\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,editType:\"none\"},layer:{valType:\"enumerated\",values:[\"below\",\"above\"],dflt:\"above\",editType:\"none\"},drawdirection:{valType:\"enumerated\",values:[\"ortho\",\"horizontal\",\"vertical\",\"diagonal\"],dflt:\"diagonal\",editType:\"none\"},editType:\"none\"},activeshape:{fillcolor:{valType:\"color\",dflt:\"rgb(255,0,255)\",editType:\"none\"},opacity:{valType:\"number\",min:0,max:1,dflt:.5,editType:\"none\"},editType:\"none\"}}},{\"../../../lib/extend\":768,\"../../drawing/attributes\":664}],726:[function(t,e,n){\"use strict\";e.exports={CIRCLE_SIDES:32,i000:0,i090:8,i180:16,i270:24,cos45:Math.cos(Math.PI/4),sin45:Math.sin(Math.PI/4),SQRT2:Math.sqrt(2)}},{}],727:[function(t,e,n){\"use strict\";var r=t(\"../../color\");e.exports=function(t,e,n){n(\"newshape.drawdirection\"),n(\"newshape.layer\"),n(\"newshape.fillcolor\"),n(\"newshape.fillrule\"),n(\"newshape.opacity\"),n(\"newshape.line.width\")&&(n(\"newshape.line.color\",r.contrast((t||{}).plot_bgcolor||\"#FFF\")),n(\"newshape.line.dash\")),n(\"activeshape.fillcolor\"),n(\"activeshape.opacity\")}},{\"../../color\":643}],728:[function(t,e,n){\"use strict\";var r=t(\"../../dragelement\"),i=t(\"../../dragelement/helpers\").drawMode,a=t(\"../../../registry\"),o=t(\"./constants\"),s=o.i000,l=o.i090,c=o.i180,u=o.i270,h=t(\"../../../plots/cartesian/handle_outline\").clearOutlineControllers,d=t(\"./helpers\"),f=d.pointsShapeRectangle,p=d.pointsShapeEllipse,m=d.writePaths,g=t(\"./newshapes\");e.exports=function t(e,n,o,d){d||(d=0);var y=o.gd;function v(){t(e,n,o,d++),p(e[0])&&_({redrawing:!0})}function _(t){o.isActiveShape=!1;var e=g(n,o);Object.keys(e).length&&a.call((t||{}).redrawing?\"relayout\":\"_guiRelayout\",y,e)}var b,x,w,k,M,T=o.isActiveShape,S=y._fullLayout._zoomlayer;function A(t){w=+t.srcElement.getAttribute(\"data-i\"),k=+t.srcElement.getAttribute(\"data-j\"),b[w][k].moveFn=L}function L(t,n){if(e.length){var r=M[w][k][1],i=M[w][k][2],a=e[w],o=a.length;if(f(a)){for(var s=0;s<o;s++)if(s!==k){var l=a[s];l[1]===a[k][1]&&(l[1]=r+t),l[2]===a[k][2]&&(l[2]=i+n)}if(a[k][1]=r+t,a[k][2]=i+n,!f(a))for(var c=0;c<o;c++)for(var u=0;u<a[c].length;u++)a[c][u]=M[w][c][u]}else a[k][1]=r+t,a[k][2]=i+n;v()}}function C(){_()}function E(t,n){if(2===t){w=+n.srcElement.getAttribute(\"data-i\"),k=+n.srcElement.getAttribute(\"data-j\");var r=e[w];f(r)||p(r)||function(){if(e.length&&e[w]&&e[w].length){for(var t=[],n=0;n<e[w].length;n++)n!==k&&t.push(e[w][n]);t.length>1&&(2!==t.length||\"Z\"!==t[1][0])&&(0===k&&(t[0][0]=\"M\"),e[w]=t,v(),_())}}()}}function O(t,n){(function(t,n){if(e.length)for(var r=0;r<e.length;r++)for(var i=0;i<e[r].length;i++)for(var a=0;a+2<e[r][i].length;a+=2)e[r][i][a+1]=M[r][i][a+1]+t,e[r][i][a+2]=M[r][i][a+2]+n})(t,n),v()}function D(t){(w=+t.srcElement.getAttribute(\"data-i\"))||(w=0),x[w].moveFn=O}function I(){_()}i(o.dragmode)?y._fullLayout._drawing=!0:y._fullLayout._activeShapeIndex>=0&&h(y),n.attr(\"d\",m(e)),T&&!d&&(M=function(t,e){for(var n=0;n<e.length;n++){var r=e[n];t[n]=[];for(var i=0;i<r.length;i++){t[n][i]=[];for(var a=0;a<r[i].length;a++)t[n][i][a]=r[i][a]}}return t}([],e),function(t){b=[];for(var n=0;n<e.length;n++){var i=e[n],a=!f(i)&&p(i);b[n]=[];for(var o=0;o<i.length;o++)if(\"Z\"!==i[o][0]&&(!a||o===s||o===l||o===c||o===u)){var h=i[o][1],d=i[o][2],m=t.append(\"circle\").classed(\"cursor-grab\",!0).attr(\"data-i\",n).attr(\"data-j\",o).attr(\"cx\",h).attr(\"cy\",d).attr(\"r\",4).style({\"mix-blend-mode\":\"luminosity\",fill:\"black\",stroke:\"white\",\"stroke-width\":1});b[n][o]={element:m.node(),gd:y,prepFn:A,doneFn:C,clickFn:E},r.init(b[n][o])}}}(S.append(\"g\").attr(\"class\",\"outline-controllers\")),x=[],e.length&&(x[0]={element:n[0][0],gd:y,prepFn:D,doneFn:I},r.init(x[0])))}},{\"../../../plots/cartesian/handle_outline\":838,\"../../../registry\":911,\"../../dragelement\":662,\"../../dragelement/helpers\":661,\"./constants\":726,\"./helpers\":729,\"./newshapes\":730}],729:[function(t,e,n){\"use strict\";var r=t(\"parse-svg-path\"),i=t(\"./constants\"),a=i.CIRCLE_SIDES,o=i.SQRT2,s=t(\"../../../plots/cartesian/helpers\"),l=s.p2r,c=s.r2p,u=[0,3,4,5,6,1,2],h=[0,3,4,1,2];function d(t,e){return Math.abs(t-e)<=1e-6}function f(t,e){var n=e[1]-t[1],r=e[2]-t[2];return Math.sqrt(n*n+r*r)}n.writePaths=function(t){var e=t.length;if(!e)return\"M0,0Z\";for(var n=\"\",r=0;r<e;r++)for(var i=t[r].length,a=0;a<i;a++){var o=t[r][a][0];if(\"Z\"===o)n+=\"Z\";else for(var s=t[r][a].length,l=0;l<s;l++){var c=l;\"Q\"===o||\"S\"===o?c=h[l]:\"C\"===o&&(c=u[l]),n+=t[r][a][c],l>0&&l<s-1&&(n+=\",\")}}return n},n.readPaths=function(t,e,n,i){var o,s,u,h=r(t),d=[],f=-1,p=0,m=0,g=function(){s=p,u=m};g();for(var y=0;y<h.length;y++){var v=[],_=h[y][0],b=_;switch(_){case\"M\":d[++f]=[],v.push([b,p=+h[y][1],m=+h[y][2]]),g();break;case\"Q\":case\"S\":v.push([b,p=+h[y][3],m=+h[y][4],+h[y][1],+h[y][2]]);break;case\"C\":v.push([b,p=+h[y][5],m=+h[y][6],+h[y][1],+h[y][2],+h[y][3],+h[y][4]]);break;case\"T\":case\"L\":v.push([b,p=+h[y][1],m=+h[y][2]]);break;case\"H\":v.push([b=\"L\",p=+h[y][1],m]);break;case\"V\":v.push([b=\"L\",p,m=+h[y][1]]);break;case\"A\":b=\"L\";var x=+h[y][1],w=+h[y][2];+h[y][4]||(x=-x,w=-w);var k=p-x,M=m;for(o=1;o<=a/2;o++){var T=2*Math.PI*o/a;v.push([b,k+x*Math.cos(T),M+w*Math.sin(T)])}break;case\"Z\":p===s&&m===u||v.push([b,p=s,m=u])}for(var S=(n||{}).domain,A=e._fullLayout._size,L=n&&\"pixel\"===n.xsizemode,C=n&&\"pixel\"===n.ysizemode,E=!1===i,O=0;O<v.length;O++){for(o=0;o+2<7;o+=2){var D=v[O][o+1],I=v[O][o+2];void 0!==D&&void 0!==I&&(p=D,m=I,n&&(n.xaxis&&n.xaxis.p2r?(E&&(D-=n.xaxis._offset),D=L?c(n.xaxis,n.xanchor)+D:l(n.xaxis,D)):(E&&(D-=A.l),S?D=S.x[0]+D/A.w:D/=A.w),n.yaxis&&n.yaxis.p2r?(E&&(I-=n.yaxis._offset),I=C?c(n.yaxis,n.yanchor)-I:l(n.yaxis,I)):(E&&(I-=A.t),I=S?S.y[1]-I/A.h:1-I/A.h)),v[O][o+1]=D,v[O][o+2]=I)}d[f].push(v[O].slice())}}return d},n.pointsShapeRectangle=function(t){if(5!==t.length)return!1;for(var e=1;e<3;e++){if(!d(t[0][e]-t[1][e],t[3][e]-t[2][e]))return!1;if(!d(t[0][e]-t[3][e],t[1][e]-t[2][e]))return!1}return!(!d(t[0][1],t[1][1])&&!d(t[0][1],t[3][1])||!(f(t[0],t[1])*f(t[0],t[3])))},n.pointsShapeEllipse=function(t){var e=t.length;if(e!==a+1)return!1;e=a;for(var n=0;n<e;n++){var r=(2*e-n)%e,i=(e/2+r)%e;if(!d(f(t[n],t[(e/2+n)%e]),f(t[r],t[i])))return!1}return!0},n.handleEllipse=function(t,e,r){if(!t)return[e,r];var i=n.ellipseOver({x0:e[0],y0:e[1],x1:r[0],y1:r[1]}),s=(i.x1+i.x0)/2,l=(i.y1+i.y0)/2,c=(i.x1-i.x0)/2,u=(i.y1-i.y0)/2;c||(c=u/=o),u||(u=c/=o);for(var h=[],d=0;d<a;d++){var f=2*d*Math.PI/a;h.push([s+c*Math.cos(f),l+u*Math.sin(f)])}return h},n.ellipseOver=function(t){var e=t.x0,n=t.y0,r=t.x1,i=t.y1,a=r-e,s=i-n,l=((e-=a)+r)/2,c=((n-=s)+i)/2;return{x0:l-(a*=o),y0:c-(s*=o),x1:l+a,y1:c+s}}},{\"../../../plots/cartesian/helpers\":839,\"./constants\":726,\"parse-svg-path\":505}],730:[function(t,e,n){\"use strict\";var r=t(\"../../dragelement/helpers\"),i=r.drawMode,a=r.openMode,o=t(\"./constants\"),s=o.i000,l=o.i090,c=o.i180,u=o.i270,h=o.cos45,d=o.sin45,f=t(\"../../../plots/cartesian/helpers\"),p=f.p2r,m=f.r2p,g=t(\"../../../plots/cartesian/handle_outline\").clearSelect,y=t(\"./helpers\"),v=y.readPaths,_=y.writePaths,b=y.ellipseOver;e.exports=function(t,e){if(t.length){var n=t[0][0];if(n){var r=n.getAttribute(\"d\"),o=e.gd,f=o._fullLayout.newshape,y=e.plotinfo,x=y.xaxis,w=y.yaxis,k=!!y.domain||!y.xaxis,M=!!y.domain||!y.yaxis,T=e.isActiveShape,S=e.dragmode,A=(o.layout||{}).shapes||[];if(!i(S)&&void 0!==T){var L=o._fullLayout._activeShapeIndex;if(L<A.length)switch(o._fullLayout.shapes[L].type){case\"rect\":S=\"drawrect\";break;case\"circle\":S=\"drawcircle\";break;case\"line\":S=\"drawline\";break;case\"path\":var C=A[L].path||\"\";S=\"Z\"===C[C.length-1]?\"drawclosedpath\":\"drawopenpath\"}}var E,O=a(S),D=v(r,o,y,T),I={editable:!0,xref:k?\"paper\":x._id,yref:M?\"paper\":w._id,layer:f.layer,opacity:f.opacity,line:{color:f.line.color,width:f.line.width,dash:f.line.dash}};if(O||(I.fillcolor=f.fillcolor,I.fillrule=f.fillrule),1===D.length&&(E=D[0]),E&&\"drawrect\"===S)I.type=\"rect\",I.x0=E[0][1],I.y0=E[0][2],I.x1=E[2][1],I.y1=E[2][2];else if(E&&\"drawline\"===S)I.type=\"line\",I.x0=E[0][1],I.y0=E[0][2],I.x1=E[1][1],I.y1=E[1][2];else if(E&&\"drawcircle\"===S){I.type=\"circle\";var P=E[s][1],R=E[l][1],z=E[c][1],j=E[u][1],F=E[s][2],N=E[l][2],B=E[c][2],Y=E[u][2],H=y.xaxis&&(\"date\"===y.xaxis.type||\"log\"===y.xaxis.type),V=y.yaxis&&(\"date\"===y.yaxis.type||\"log\"===y.yaxis.type);H&&(P=m(y.xaxis,P),R=m(y.xaxis,R),z=m(y.xaxis,z),j=m(y.xaxis,j)),V&&(F=m(y.yaxis,F),N=m(y.yaxis,N),B=m(y.yaxis,B),Y=m(y.yaxis,Y));var U=(R+j)/2,W=(F+B)/2,q=b({x0:U,y0:W,x1:U+(j-R+z-P)/2*h,y1:W+(Y-N+B-F)/2*d});H&&(q.x0=p(y.xaxis,q.x0),q.x1=p(y.xaxis,q.x1)),V&&(q.y0=p(y.yaxis,q.y0),q.y1=p(y.yaxis,q.y1)),I.x0=q.x0,I.y0=q.y0,I.x1=q.x1,I.y1=q.y1}else I.type=\"path\",x&&w&&function(t,e,n){var r=\"date\"===e.type,i=\"date\"===n.type;if(!r&&!i)return t;for(var a=0;a<t.length;a++)for(var o=0;o<t[a].length;o++)for(var s=0;s+2<t[a][o].length;s+=2)r&&(t[a][o][s+1]=t[a][o][s+1].replace(\" \",\"_\")),i&&(t[a][o][s+2]=t[a][o][s+2].replace(\" \",\"_\"))}(D,x,w),I.path=_(D),E=null;g(o);for(var G=e.editHelpers,X=(G||{}).modifyItem,Z=[],J=0;J<A.length;J++){var K=o._fullLayout.shapes[J];if(Z[J]=K._input,void 0!==T&&J===o._fullLayout._activeShapeIndex){var $=I;switch(K.type){case\"line\":case\"rect\":case\"circle\":X(\"x0\",$.x0),X(\"x1\",$.x1),X(\"y0\",$.y0),X(\"y1\",$.y1);break;case\"path\":X(\"path\",$.path)}}}return void 0===T?(Z.push(I),Z):G?G.getUpdateObj():{}}}}},{\"../../../plots/cartesian/handle_outline\":838,\"../../../plots/cartesian/helpers\":839,\"../../dragelement/helpers\":661,\"./constants\":726,\"./helpers\":729}],731:[function(t,e,n){\"use strict\";var r=t(\"./constants\"),i=t(\"../../lib\");n.rangeToShapePosition=function(t){return\"log\"===t.type?t.r2d:function(t){return t}},n.shapePositionToRange=function(t){return\"log\"===t.type?t.d2r:function(t){return t}},n.decodeDate=function(t){return function(e){return e.replace&&(e=e.replace(\"_\",\" \")),t(e)}},n.encodeDate=function(t){return function(e){return t(e).replace(\" \",\"_\")}},n.extractPathCoords=function(t,e){var n=[];return t.match(r.segmentRE).forEach((function(t){var a=e[t.charAt(0)].drawn;if(void 0!==a){var o=t.substr(1).match(r.paramRE);!o||o.length<a||n.push(i.cleanNumber(o[a]))}})),n},n.getDataToPixel=function(t,e,r,i){var a,o=t._fullLayout._size;if(e)if(\"domain\"===i)a=function(t){return e._length*(r?1-t:t)+e._offset};else{var s=n.shapePositionToRange(e);a=function(t){return e._offset+e.r2p(s(t,!0))},\"date\"===e.type&&(a=n.decodeDate(a))}else a=r?function(t){return o.t+o.h*(1-t)}:function(t){return o.l+o.w*t};return a},n.getPixelToData=function(t,e,r,i){var a,o=t._fullLayout._size;if(e)if(\"domain\"===i)a=function(t){var n=(t-e._offset)/e._length;return r?1-n:n};else{var s=n.rangeToShapePosition(e);a=function(t){return s(e.p2r(t-e._offset))}}else a=r?function(t){return 1-(t-o.t)/o.h}:function(t){return(t-o.l)/o.w};return a},n.roundPositionForSharpStrokeRendering=function(t,e){var n=1===Math.round(e%2),r=Math.round(t);return n?r+.5:r},n.makeOptionsAndPlotinfo=function(t,e){var n=t._fullLayout.shapes[e]||{},r=t._fullLayout._plots[n.xref+n.yref];return r?r._hadPlotinfo=!0:(r={},n.xref&&\"paper\"!==n.xref&&(r.xaxis=t._fullLayout[n.xref+\"axis\"]),n.yref&&\"paper\"!==n.yref&&(r.yaxis=t._fullLayout[n.yref+\"axis\"])),r.xsizemode=n.xsizemode,r.ysizemode=n.ysizemode,r.xanchor=n.xanchor,r.yanchor=n.yanchor,{options:n,plotinfo:r}}},{\"../../lib\":778,\"./constants\":722}],732:[function(t,e,n){\"use strict\";var r=t(\"./draw\");e.exports={moduleType:\"component\",name:\"shapes\",layoutAttributes:t(\"./attributes\"),supplyLayoutDefaults:t(\"./defaults\"),supplyDrawNewShapeDefaults:t(\"./draw_newshape/defaults\"),includeBasePlot:t(\"../../plots/cartesian/include_components\")(\"shapes\"),calcAutorange:t(\"./calc_autorange\"),draw:r.draw,drawOne:r.drawOne}},{\"../../plots/cartesian/include_components\":840,\"./attributes\":720,\"./calc_autorange\":721,\"./defaults\":723,\"./draw\":724,\"./draw_newshape/defaults\":727}],733:[function(t,e,n){\"use strict\";var r=t(\"../../plots/font_attributes\"),i=t(\"../../plots/pad_attributes\"),a=t(\"../../lib/extend\").extendDeepAll,o=t(\"../../plot_api/edit_types\").overrideAll,s=t(\"../../plots/animation_attributes\"),l=t(\"../../plot_api/plot_template\").templatedArray,c=t(\"./constants\"),u=l(\"step\",{visible:{valType:\"boolean\",dflt:!0},method:{valType:\"enumerated\",values:[\"restyle\",\"relayout\",\"animate\",\"update\",\"skip\"],dflt:\"restyle\"},args:{valType:\"info_array\",freeLength:!0,items:[{valType:\"any\"},{valType:\"any\"},{valType:\"any\"}]},label:{valType:\"string\"},value:{valType:\"string\"},execute:{valType:\"boolean\",dflt:!0}});e.exports=o(l(\"slider\",{visible:{valType:\"boolean\",dflt:!0},active:{valType:\"number\",min:0,dflt:0},steps:u,lenmode:{valType:\"enumerated\",values:[\"fraction\",\"pixels\"],dflt:\"fraction\"},len:{valType:\"number\",min:0,dflt:1},x:{valType:\"number\",min:-2,max:3,dflt:0},pad:a(i({editType:\"arraydraw\"}),{},{t:{dflt:20}}),xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"left\"},y:{valType:\"number\",min:-2,max:3,dflt:0},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],dflt:\"top\"},transition:{duration:{valType:\"number\",min:0,dflt:150},easing:{valType:\"enumerated\",values:s.transition.easing.values,dflt:\"cubic-in-out\"}},currentvalue:{visible:{valType:\"boolean\",dflt:!0},xanchor:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"],dflt:\"left\"},offset:{valType:\"number\",dflt:10},prefix:{valType:\"string\"},suffix:{valType:\"string\"},font:r({})},font:r({}),activebgcolor:{valType:\"color\",dflt:c.gripBgActiveColor},bgcolor:{valType:\"color\",dflt:c.railBgColor},bordercolor:{valType:\"color\",dflt:c.railBorderColor},borderwidth:{valType:\"number\",min:0,dflt:c.railBorderWidth},ticklen:{valType:\"number\",min:0,dflt:c.tickLength},tickcolor:{valType:\"color\",dflt:c.tickColor},tickwidth:{valType:\"number\",min:0,dflt:1},minorticklen:{valType:\"number\",min:0,dflt:c.minorTickLength}}),\"arraydraw\",\"from-root\")},{\"../../lib/extend\":768,\"../../plot_api/edit_types\":810,\"../../plot_api/plot_template\":817,\"../../plots/animation_attributes\":822,\"../../plots/font_attributes\":856,\"../../plots/pad_attributes\":890,\"./constants\":734}],734:[function(t,e,n){\"use strict\";e.exports={name:\"sliders\",containerClassName:\"slider-container\",groupClassName:\"slider-group\",inputAreaClass:\"slider-input-area\",railRectClass:\"slider-rail-rect\",railTouchRectClass:\"slider-rail-touch-rect\",gripRectClass:\"slider-grip-rect\",tickRectClass:\"slider-tick-rect\",inputProxyClass:\"slider-input-proxy\",labelsClass:\"slider-labels\",labelGroupClass:\"slider-label-group\",labelClass:\"slider-label\",currentValueClass:\"slider-current-value\",railHeight:5,menuIndexAttrName:\"slider-active-index\",autoMarginIdRoot:\"slider-\",minWidth:30,minHeight:30,textPadX:40,arrowOffsetX:4,railRadius:2,railWidth:5,railBorder:4,railBorderWidth:1,railBorderColor:\"#bec8d9\",railBgColor:\"#f8fafc\",railInset:8,stepInset:10,gripRadius:10,gripWidth:20,gripHeight:20,gripBorder:20,gripBorderWidth:1,gripBorderColor:\"#bec8d9\",gripBgColor:\"#f6f8fa\",gripBgActiveColor:\"#dbdde0\",labelPadding:8,labelOffset:0,tickWidth:1,tickColor:\"#333\",tickOffset:25,tickLength:7,minorTickOffset:25,minorTickColor:\"#333\",minorTickLength:4,currentValuePadding:8,currentValueInset:0}},{}],735:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../plots/array_container_defaults\"),a=t(\"./attributes\"),o=t(\"./constants\").name,s=a.steps;function l(t,e,n){function o(n,i){return r.coerce(t,e,a,n,i)}for(var s=i(t,e,{name:\"steps\",handleItemDefaults:c}),l=0,u=0;u<s.length;u++)s[u].visible&&l++;if(l<2?e.visible=!1:o(\"visible\")){e._stepCount=l;var h=e._visibleSteps=r.filterVisible(s);(s[o(\"active\")]||{}).visible||(e.active=h[0]._index),o(\"x\"),o(\"y\"),r.noneOrAll(t,e,[\"x\",\"y\"]),o(\"xanchor\"),o(\"yanchor\"),o(\"len\"),o(\"lenmode\"),o(\"pad.t\"),o(\"pad.r\"),o(\"pad.b\"),o(\"pad.l\"),r.coerceFont(o,\"font\",n.font),o(\"currentvalue.visible\")&&(o(\"currentvalue.xanchor\"),o(\"currentvalue.prefix\"),o(\"currentvalue.suffix\"),o(\"currentvalue.offset\"),r.coerceFont(o,\"currentvalue.font\",e.font)),o(\"transition.duration\"),o(\"transition.easing\"),o(\"bgcolor\"),o(\"activebgcolor\"),o(\"bordercolor\"),o(\"borderwidth\"),o(\"ticklen\"),o(\"tickwidth\"),o(\"tickcolor\"),o(\"minorticklen\")}}function c(t,e){function n(n,i){return r.coerce(t,e,s,n,i)}if(\"skip\"===t.method||Array.isArray(t.args)?n(\"visible\"):e.visible=!1){n(\"method\"),n(\"args\");var i=n(\"label\",\"step-\"+e._index);n(\"value\",i),n(\"execute\")}}e.exports=function(t,e){i(t,e,{name:o,handleItemDefaults:l})}},{\"../../lib\":778,\"../../plots/array_container_defaults\":823,\"./attributes\":733,\"./constants\":734}],736:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../plots/plots\"),a=t(\"../color\"),o=t(\"../drawing\"),s=t(\"../../lib\"),l=s.strTranslate,c=t(\"../../lib/svg_text_utils\"),u=t(\"../../plot_api/plot_template\").arrayEditor,h=t(\"./constants\"),d=t(\"../../constants/alignment\"),f=d.LINE_SPACING,p=d.FROM_TL,m=d.FROM_BR;function g(t){return h.autoMarginIdRoot+t._index}function y(t){return t._index}function v(t,e){var n=o.tester.selectAll(\"g.\"+h.labelGroupClass).data(e._visibleSteps);n.enter().append(\"g\").classed(h.labelGroupClass,!0);var a=0,l=0;n.each((function(t){var n=x(r.select(this),{step:t},e).node();if(n){var i=o.bBox(n);l=Math.max(l,i.height),a=Math.max(a,i.width)}})),n.remove();var u=e._dims={};u.inputAreaWidth=Math.max(h.railWidth,h.gripHeight);var d=t._fullLayout._size;if(u.lx=d.l+d.w*e.x,u.ly=d.t+d.h*(1-e.y),u.outerLength=\"fraction\"===e.lenmode?Math.round(d.w*e.len):e.len,u.inputAreaStart=0,u.inputAreaLength=Math.round(u.outerLength-e.pad.l-e.pad.r),u.labelStride=Math.max(1,Math.ceil((a+h.labelPadding)/((u.inputAreaLength-2*h.stepInset)/(e._stepCount-1)))),u.labelHeight=l,u.currentValueMaxWidth=0,u.currentValueHeight=0,u.currentValueTotalHeight=0,u.currentValueMaxLines=1,e.currentvalue.visible){var f=o.tester.append(\"g\");n.each((function(t){var n=_(f,e,t.label),r=n.node()&&o.bBox(n.node())||{width:0,height:0},i=c.lineCount(n);u.currentValueMaxWidth=Math.max(u.currentValueMaxWidth,Math.ceil(r.width)),u.currentValueHeight=Math.max(u.currentValueHeight,Math.ceil(r.height)),u.currentValueMaxLines=Math.max(u.currentValueMaxLines,i)})),u.currentValueTotalHeight=u.currentValueHeight+e.currentvalue.offset,f.remove()}u.height=u.currentValueTotalHeight+h.tickOffset+e.ticklen+h.labelOffset+u.labelHeight+e.pad.t+e.pad.b;var y=\"left\";s.isRightAnchor(e)&&(u.lx-=u.outerLength,y=\"right\"),s.isCenterAnchor(e)&&(u.lx-=u.outerLength/2,y=\"center\");var v=\"top\";s.isBottomAnchor(e)&&(u.ly-=u.height,v=\"bottom\"),s.isMiddleAnchor(e)&&(u.ly-=u.height/2,v=\"middle\"),u.outerLength=Math.ceil(u.outerLength),u.height=Math.ceil(u.height),u.lx=Math.round(u.lx),u.ly=Math.round(u.ly);var b={y:e.y,b:u.height*m[v],t:u.height*p[v]};\"fraction\"===e.lenmode?(b.l=0,b.xl=e.x-e.len*p[y],b.r=0,b.xr=e.x+e.len*m[y]):(b.x=e.x,b.l=u.outerLength*p[y],b.r=u.outerLength*m[y]),i.autoMargin(t,g(e),b)}function _(t,e,n){if(e.currentvalue.visible){var r,i,a=e._dims;switch(e.currentvalue.xanchor){case\"right\":r=a.inputAreaLength-h.currentValueInset-a.currentValueMaxWidth,i=\"left\";break;case\"center\":r=.5*a.inputAreaLength,i=\"middle\";break;default:r=h.currentValueInset,i=\"left\"}var l=s.ensureSingle(t,\"text\",h.labelClass,(function(t){t.attr({\"text-anchor\":i,\"data-notex\":1})})),u=e.currentvalue.prefix?e.currentvalue.prefix:\"\";if(\"string\"==typeof n)u+=n;else{var d=e.steps[e.active].label,p=e._gd._fullLayout._meta;p&&(d=s.templateString(d,p)),u+=d}e.currentvalue.suffix&&(u+=e.currentvalue.suffix),l.call(o.font,e.currentvalue.font).text(u).call(c.convertToTspans,e._gd);var m=c.lineCount(l);return c.positionText(l,r,(a.currentValueMaxLines+1-m)*e.currentvalue.font.size*f),l}}function b(t,e,n){s.ensureSingle(t,\"rect\",h.gripRectClass,(function(r){r.call(T,e,t,n).style(\"pointer-events\",\"all\")})).attr({width:h.gripWidth,height:h.gripHeight,rx:h.gripRadius,ry:h.gripRadius}).call(a.stroke,n.bordercolor).call(a.fill,n.bgcolor).style(\"stroke-width\",n.borderwidth+\"px\")}function x(t,e,n){var r=s.ensureSingle(t,\"text\",h.labelClass,(function(t){t.attr({\"text-anchor\":\"middle\",\"data-notex\":1})})),i=e.step.label,a=n._gd._fullLayout._meta;return a&&(i=s.templateString(i,a)),r.call(o.font,n.font).text(i).call(c.convertToTspans,n._gd),r}function w(t,e){var n=s.ensureSingle(t,\"g\",h.labelsClass),i=e._dims,a=n.selectAll(\"g.\"+h.labelGroupClass).data(i.labelSteps);a.enter().append(\"g\").classed(h.labelGroupClass,!0),a.exit().remove(),a.each((function(t){var n=r.select(this);n.call(x,t,e),o.setTranslate(n,L(e,t.fraction),h.tickOffset+e.ticklen+e.font.size*f+h.labelOffset+i.currentValueTotalHeight)}))}function k(t,e,n,r,i){var a=Math.round(r*(n._stepCount-1)),o=n._visibleSteps[a]._index;o!==n.active&&M(t,e,n,o,!0,i)}function M(t,e,n,r,a,o){var s=n.active;n.active=r,u(t.layout,h.name,n).applyUpdate(\"active\",r);var l=n.steps[n.active];e.call(A,n,o),e.call(_,n),t.emit(\"plotly_sliderchange\",{slider:n,step:n.steps[n.active],interaction:a,previousActive:s}),l&&l.method&&a&&(e._nextMethod?(e._nextMethod.step=l,e._nextMethod.doCallback=a,e._nextMethod.doTransition=o):(e._nextMethod={step:l,doCallback:a,doTransition:o},e._nextMethodRaf=window.requestAnimationFrame((function(){var n=e._nextMethod.step;n.method&&(n.execute&&i.executeAPICommand(t,n.method,n.args),e._nextMethod=null,e._nextMethodRaf=null)}))))}function T(t,e,n){var i=n.node(),o=r.select(e);function s(){return n.data()[0]}t.on(\"mousedown\",(function(){var t=s();e.emit(\"plotly_sliderstart\",{slider:t});var l=n.select(\".\"+h.gripRectClass);r.event.stopPropagation(),r.event.preventDefault(),l.call(a.fill,t.activebgcolor);var c=C(t,r.mouse(i)[0]);k(e,n,t,c,!0),t._dragging=!0,o.on(\"mousemove\",(function(){var t=s(),a=C(t,r.mouse(i)[0]);k(e,n,t,a,!1)})),o.on(\"mouseup\",(function(){var t=s();t._dragging=!1,l.call(a.fill,t.bgcolor),o.on(\"mouseup\",null),o.on(\"mousemove\",null),e.emit(\"plotly_sliderend\",{slider:t,step:t.steps[t.active]})}))}))}function S(t,e){var n=t.selectAll(\"rect.\"+h.tickRectClass).data(e._visibleSteps),i=e._dims;n.enter().append(\"rect\").classed(h.tickRectClass,!0),n.exit().remove(),n.attr({width:e.tickwidth+\"px\",\"shape-rendering\":\"crispEdges\"}),n.each((function(t,n){var s=n%i.labelStride==0,l=r.select(this);l.attr({height:s?e.ticklen:e.minorticklen}).call(a.fill,e.tickcolor),o.setTranslate(l,L(e,n/(e._stepCount-1))-.5*e.tickwidth,(s?h.tickOffset:h.minorTickOffset)+i.currentValueTotalHeight)}))}function A(t,e,n){for(var r=t.select(\"rect.\"+h.gripRectClass),i=0,a=0;a<e._stepCount;a++)if(e._visibleSteps[a]._index===e.active){i=a;break}var o=L(e,i/(e._stepCount-1));if(!e._invokingCommand){var s=r;n&&e.transition.duration>0&&(s=s.transition().duration(e.transition.duration).ease(e.transition.easing)),s.attr(\"transform\",l(o-.5*h.gripWidth,e._dims.currentValueTotalHeight))}}function L(t,e){var n=t._dims;return n.inputAreaStart+h.stepInset+(n.inputAreaLength-2*h.stepInset)*Math.min(1,Math.max(0,e))}function C(t,e){var n=t._dims;return Math.min(1,Math.max(0,(e-h.stepInset-n.inputAreaStart)/(n.inputAreaLength-2*h.stepInset-2*n.inputAreaStart)))}function E(t,e,n){var r=n._dims,i=s.ensureSingle(t,\"rect\",h.railTouchRectClass,(function(r){r.call(T,e,t,n).style(\"pointer-events\",\"all\")}));i.attr({width:r.inputAreaLength,height:Math.max(r.inputAreaWidth,h.tickOffset+n.ticklen+r.labelHeight)}).call(a.fill,n.bgcolor).attr(\"opacity\",0),o.setTranslate(i,0,r.currentValueTotalHeight)}function O(t,e){var n=e._dims,r=n.inputAreaLength-2*h.railInset,i=s.ensureSingle(t,\"rect\",h.railRectClass);i.attr({width:r,height:h.railWidth,rx:h.railRadius,ry:h.railRadius,\"shape-rendering\":\"crispEdges\"}).call(a.stroke,e.bordercolor).call(a.fill,e.bgcolor).style(\"stroke-width\",e.borderwidth+\"px\"),o.setTranslate(i,h.railInset,.5*(n.inputAreaWidth-h.railWidth)+n.currentValueTotalHeight)}e.exports=function(t){var e=t._fullLayout,n=function(t,e){for(var n=t[h.name],r=[],i=0;i<n.length;i++){var a=n[i];a.visible&&(a._gd=e,r.push(a))}return r}(e,t),a=e._infolayer.selectAll(\"g.\"+h.containerClassName).data(n.length>0?[0]:[]);function s(e){e._commandObserver&&(e._commandObserver.remove(),delete e._commandObserver),i.autoMargin(t,g(e))}if(a.enter().append(\"g\").classed(h.containerClassName,!0).style(\"cursor\",\"ew-resize\"),a.exit().each((function(){r.select(this).selectAll(\"g.\"+h.groupClassName).each(s)})).remove(),0!==n.length){var l=a.selectAll(\"g.\"+h.groupClassName).data(n,y);l.enter().append(\"g\").classed(h.groupClassName,!0),l.exit().each(s).remove();for(var c=0;c<n.length;c++)v(t,n[c]);l.each((function(e){var n=r.select(this);(function(t){var e=t._dims;e.labelSteps=[];for(var n=t._stepCount,r=0;r<n;r+=e.labelStride)e.labelSteps.push({fraction:r/(n-1),step:t._visibleSteps[r]})})(e),i.manageCommandObserver(t,e,e._visibleSteps,(function(e){var r=n.data()[0];r.active!==e.index&&(r._dragging||M(t,n,r,e.index,!1,!0))})),function(t,e,n){(n.steps[n.active]||{}).visible||(n.active=n._visibleSteps[0]._index),e.call(_,n).call(O,n).call(w,n).call(S,n).call(E,t,n).call(b,t,n);var r=n._dims;o.setTranslate(e,r.lx+n.pad.l,r.ly+n.pad.t),e.call(A,n,!1),e.call(_,n)}(t,r.select(this),e)}))}}},{\"../../constants/alignment\":745,\"../../lib\":778,\"../../lib/svg_text_utils\":803,\"../../plot_api/plot_template\":817,\"../../plots/plots\":891,\"../color\":643,\"../drawing\":665,\"./constants\":734,d3:169}],737:[function(t,e,n){\"use strict\";var r=t(\"./constants\");e.exports={moduleType:\"component\",name:r.name,layoutAttributes:t(\"./attributes\"),supplyLayoutDefaults:t(\"./defaults\"),draw:t(\"./draw\")}},{\"./attributes\":733,\"./constants\":734,\"./defaults\":735,\"./draw\":736}],738:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"fast-isnumeric\"),a=t(\"../../plots/plots\"),o=t(\"../../registry\"),s=t(\"../../lib\"),l=s.strTranslate,c=t(\"../drawing\"),u=t(\"../color\"),h=t(\"../../lib/svg_text_utils\"),d=t(\"../../constants/interactions\"),f=t(\"../../constants/alignment\").OPPOSITE_SIDE,p=/ [XY][0-9]* /;e.exports={draw:function(t,e,n){var m,g=n.propName,y=n.placeholder,v=n.traceIndex,_=n.avoid||{},b=n.attributes,x=n.transform,w=n.containerGroup,k=t._fullLayout,M=1,T=!1,S=n.propContainer.title,A=(S&&S.text?S.text:\"\").trim(),L=S&&S.font?S.font:{},C=L.family,E=L.size,O=L.color;\"title.text\"===g?m=\"titleText\":-1!==g.indexOf(\"axis\")?m=\"axisTitleText\":g.indexOf(!0)&&(m=\"colorbarTitleText\");var D=t._context.edits[m];\"\"===A?M=0:A.replace(p,\" % \")===y.replace(p,\" % \")&&(M=.2,T=!0,D||(A=\"\")),n._meta?A=s.templateString(A,n._meta):k._meta&&(A=s.templateString(A,k._meta));var I=A||D;w||(w=s.ensureSingle(k._infolayer,\"g\",\"g-\"+e));var P=w.selectAll(\"text\").data(I?[0]:[]);if(P.enter().append(\"text\"),P.text(A).attr(\"class\",e),P.exit().remove(),!I)return w;function R(t){s.syncOrAsync([z,j],t)}function z(e){var n;return x?(n=\"\",x.rotate&&(n+=\"rotate(\"+[x.rotate,b.x,b.y]+\")\"),x.offset&&(n+=l(0,x.offset))):n=null,e.attr(\"transform\",n),e.style({\"font-family\":C,\"font-size\":r.round(E,2)+\"px\",fill:u.rgb(O),opacity:M*u.opacity(O),\"font-weight\":a.fontWeight}).attr(b).call(h.convertToTspans,t),a.previousPromises(t)}function j(t){var e=r.select(t.node().parentNode);if(_&&_.selection&&_.side&&A){e.attr(\"transform\",null);var n=f[_.side],a=\"left\"===_.side||\"top\"===_.side?-1:1,o=i(_.pad)?_.pad:2,u=c.bBox(e.node()),h=_.maxShift||a*({left:0,top:0,right:k.width,bottom:k.height}[_.side]-u[_.side]),d=0;if(h<0)d=h;else{var p=_.offsetLeft||0,m=_.offsetTop||0;u.left-=p,u.right-=p,u.top-=m,u.bottom-=m,_.selection.each((function(){var t=c.bBox(this);s.bBoxIntersect(u,t,o)&&(d=Math.max(d,a*(t[_.side]-u[n])+o))})),d=Math.min(h,d)}if(d>0||h<0){var g={left:[-d,0],right:[d,0],top:[0,-d],bottom:[0,d]}[_.side];e.attr(\"transform\",l(g[0],g[1]))}}}return P.call(R),D&&(A?P.on(\".opacity\",null):(M=0,T=!0,P.text(y).on(\"mouseover.opacity\",(function(){r.select(this).transition().duration(d.SHOW_PLACEHOLDER).style(\"opacity\",1)})).on(\"mouseout.opacity\",(function(){r.select(this).transition().duration(d.HIDE_PLACEHOLDER).style(\"opacity\",0)}))),P.call(h.makeEditable,{gd:t}).on(\"edit\",(function(e){void 0!==v?o.call(\"_guiRestyle\",t,g,e,v):o.call(\"_guiRelayout\",t,g,e)})).on(\"cancel\",(function(){this.text(this.attr(\"data-unformatted\")).call(R)})).on(\"input\",(function(t){this.text(t||\" \").call(h.positionText,b.x,b.y)}))),P.classed(\"js-placeholder\",T),w}}},{\"../../constants/alignment\":745,\"../../constants/interactions\":752,\"../../lib\":778,\"../../lib/svg_text_utils\":803,\"../../plots/plots\":891,\"../../registry\":911,\"../color\":643,\"../drawing\":665,d3:169,\"fast-isnumeric\":241}],739:[function(t,e,n){\"use strict\";var r=t(\"../../plots/font_attributes\"),i=t(\"../color/attributes\"),a=t(\"../../lib/extend\").extendFlat,o=t(\"../../plot_api/edit_types\").overrideAll,s=t(\"../../plots/pad_attributes\"),l=t(\"../../plot_api/plot_template\").templatedArray,c=l(\"button\",{visible:{valType:\"boolean\"},method:{valType:\"enumerated\",values:[\"restyle\",\"relayout\",\"animate\",\"update\",\"skip\"],dflt:\"restyle\"},args:{valType:\"info_array\",freeLength:!0,items:[{valType:\"any\"},{valType:\"any\"},{valType:\"any\"}]},args2:{valType:\"info_array\",freeLength:!0,items:[{valType:\"any\"},{valType:\"any\"},{valType:\"any\"}]},label:{valType:\"string\",dflt:\"\"},execute:{valType:\"boolean\",dflt:!0}});e.exports=o(l(\"updatemenu\",{_arrayAttrRegexps:[/^updatemenus\\[(0|[1-9][0-9]+)\\]\\.buttons/],visible:{valType:\"boolean\"},type:{valType:\"enumerated\",values:[\"dropdown\",\"buttons\"],dflt:\"dropdown\"},direction:{valType:\"enumerated\",values:[\"left\",\"right\",\"up\",\"down\"],dflt:\"down\"},active:{valType:\"integer\",min:-1,dflt:0},showactive:{valType:\"boolean\",dflt:!0},buttons:c,x:{valType:\"number\",min:-2,max:3,dflt:-.05},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"right\"},y:{valType:\"number\",min:-2,max:3,dflt:1},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],dflt:\"top\"},pad:a(s({editType:\"arraydraw\"}),{}),font:r({}),bgcolor:{valType:\"color\"},bordercolor:{valType:\"color\",dflt:i.borderLine},borderwidth:{valType:\"number\",min:0,dflt:1,editType:\"arraydraw\"}}),\"arraydraw\",\"from-root\")},{\"../../lib/extend\":768,\"../../plot_api/edit_types\":810,\"../../plot_api/plot_template\":817,\"../../plots/font_attributes\":856,\"../../plots/pad_attributes\":890,\"../color/attributes\":642}],740:[function(t,e,n){\"use strict\";e.exports={name:\"updatemenus\",containerClassName:\"updatemenu-container\",headerGroupClassName:\"updatemenu-header-group\",headerClassName:\"updatemenu-header\",headerArrowClassName:\"updatemenu-header-arrow\",dropdownButtonGroupClassName:\"updatemenu-dropdown-button-group\",dropdownButtonClassName:\"updatemenu-dropdown-button\",buttonClassName:\"updatemenu-button\",itemRectClassName:\"updatemenu-item-rect\",itemTextClassName:\"updatemenu-item-text\",menuIndexAttrName:\"updatemenu-active-index\",autoMarginIdRoot:\"updatemenu-\",blankHeaderOpts:{label:\"  \"},minWidth:30,minHeight:30,textPadX:24,arrowPadX:16,rx:2,ry:2,textOffsetX:12,textOffsetY:3,arrowOffsetX:4,gapButtonHeader:5,gapButton:2,activeColor:\"#F4FAFF\",hoverColor:\"#F4FAFF\",arrowSymbol:{left:\"\\u25c4\",right:\"\\u25ba\",up:\"\\u25b2\",down:\"\\u25bc\"}}},{}],741:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../plots/array_container_defaults\"),a=t(\"./attributes\"),o=t(\"./constants\").name,s=a.buttons;function l(t,e,n){function o(n,i){return r.coerce(t,e,a,n,i)}o(\"visible\",i(t,e,{name:\"buttons\",handleItemDefaults:c}).length>0)&&(o(\"active\"),o(\"direction\"),o(\"type\"),o(\"showactive\"),o(\"x\"),o(\"y\"),r.noneOrAll(t,e,[\"x\",\"y\"]),o(\"xanchor\"),o(\"yanchor\"),o(\"pad.t\"),o(\"pad.r\"),o(\"pad.b\"),o(\"pad.l\"),r.coerceFont(o,\"font\",n.font),o(\"bgcolor\",n.paper_bgcolor),o(\"bordercolor\"),o(\"borderwidth\"))}function c(t,e){function n(n,i){return r.coerce(t,e,s,n,i)}n(\"visible\",\"skip\"===t.method||Array.isArray(t.args))&&(n(\"method\"),n(\"args\"),n(\"args2\"),n(\"label\"),n(\"execute\"))}e.exports=function(t,e){i(t,e,{name:o,handleItemDefaults:l})}},{\"../../lib\":778,\"../../plots/array_container_defaults\":823,\"./attributes\":739,\"./constants\":740}],742:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../plots/plots\"),a=t(\"../color\"),o=t(\"../drawing\"),s=t(\"../../lib\"),l=t(\"../../lib/svg_text_utils\"),c=t(\"../../plot_api/plot_template\").arrayEditor,u=t(\"../../constants/alignment\").LINE_SPACING,h=t(\"./constants\"),d=t(\"./scrollbox\");function f(t){return t._index}function p(t,e){return+t.attr(h.menuIndexAttrName)===e._index}function m(t,e,n,r,i,a,o,s){e.active=o,c(t.layout,h.name,e).applyUpdate(\"active\",o),\"buttons\"===e.type?y(t,r,null,null,e):\"dropdown\"===e.type&&(i.attr(h.menuIndexAttrName,\"-1\"),g(t,r,i,a,e),s||y(t,r,i,a,e))}function g(t,e,n,r,i){var a=s.ensureSingle(e,\"g\",h.headerClassName,(function(t){t.style(\"pointer-events\",\"all\")})),l=i._dims,c={y:i.pad.t,yPad:0,x:i.pad.l,xPad:0,index:0},u={width:l.headerWidth,height:l.headerHeight};a.call(v,i,i.buttons[i.active]||h.blankHeaderOpts,t).call(S,i,c,u),s.ensureSingle(e,\"text\",h.headerArrowClassName,(function(t){t.attr(\"text-anchor\",\"end\").call(o.font,i.font).text(h.arrowSymbol[i.direction])})).attr({x:l.headerWidth-h.arrowOffsetX+i.pad.l,y:l.headerHeight/2+h.textOffsetY+i.pad.t}),a.on(\"click\",(function(){n.call(A,String(p(n,i)?-1:i._index)),y(t,e,n,r,i)})),a.on(\"mouseover\",(function(){a.call(w)})),a.on(\"mouseout\",(function(){a.call(k,i)})),o.setTranslate(e,l.lx,l.ly)}function y(t,e,n,a,o){n||(n=e).attr(\"pointer-events\",\"all\");var l=function(t){return-1==+t.attr(h.menuIndexAttrName)}(n)&&\"buttons\"!==o.type?[]:o.buttons,c=\"dropdown\"===o.type?h.dropdownButtonClassName:h.buttonClassName,u=n.selectAll(\"g.\"+c).data(s.filterVisible(l)),d=u.enter().append(\"g\").classed(c,!0),f=u.exit();\"dropdown\"===o.type?(d.attr(\"opacity\",\"0\").transition().attr(\"opacity\",\"1\"),f.transition().attr(\"opacity\",\"0\").remove()):f.remove();var p=0,g=0,y=o._dims,_=-1!==[\"up\",\"down\"].indexOf(o.direction);\"dropdown\"===o.type&&(_?g=y.headerHeight+h.gapButtonHeader:p=y.headerWidth+h.gapButtonHeader),\"dropdown\"===o.type&&\"up\"===o.direction&&(g=-h.gapButtonHeader+h.gapButton-y.openHeight),\"dropdown\"===o.type&&\"left\"===o.direction&&(p=-h.gapButtonHeader+h.gapButton-y.openWidth);var b={x:y.lx+p+o.pad.l,y:y.ly+g+o.pad.t,yPad:h.gapButton,xPad:h.gapButton,index:0},M={l:b.x+o.borderwidth,t:b.y+o.borderwidth};u.each((function(s,l){var c=r.select(this);c.call(v,o,s,t).call(S,o,b),c.on(\"click\",(function(){r.event.defaultPrevented||(s.execute&&(s.args2&&o.active===l?(m(t,o,0,e,n,a,-1),i.executeAPICommand(t,s.method,s.args2)):(m(t,o,0,e,n,a,l),i.executeAPICommand(t,s.method,s.args))),t.emit(\"plotly_buttonclicked\",{menu:o,button:s,active:o.active}))})),c.on(\"mouseover\",(function(){c.call(w)})),c.on(\"mouseout\",(function(){c.call(k,o),u.call(x,o)}))})),u.call(x,o),_?(M.w=Math.max(y.openWidth,y.headerWidth),M.h=b.y-M.t):(M.w=b.x-M.l,M.h=Math.max(y.openHeight,y.headerHeight)),M.direction=o.direction,a&&(u.size()?function(t,e,n,r,i,a){var o,s,l,c=i.direction,u=i._dims,d=i.active;if(\"up\"===c||\"down\"===c)for(s=0,l=0;l<d;l++)s+=u.heights[l]+h.gapButton;else for(o=0,l=0;l<d;l++)o+=u.widths[l]+h.gapButton;r.enable(a,o,s),r.hbar&&r.hbar.attr(\"opacity\",\"0\").transition().attr(\"opacity\",\"1\"),r.vbar&&r.vbar.attr(\"opacity\",\"0\").transition().attr(\"opacity\",\"1\")}(0,0,0,a,o,M):function(t){var e=!!t.hbar,n=!!t.vbar;e&&t.hbar.transition().attr(\"opacity\",\"0\").each(\"end\",(function(){e=!1,n||t.disable()})),n&&t.vbar.transition().attr(\"opacity\",\"0\").each(\"end\",(function(){n=!1,e||t.disable()}))}(a))}function v(t,e,n,r){t.call(_,e).call(b,e,n,r)}function _(t,e){s.ensureSingle(t,\"rect\",h.itemRectClassName,(function(t){t.attr({rx:h.rx,ry:h.ry,\"shape-rendering\":\"crispEdges\"})})).call(a.stroke,e.bordercolor).call(a.fill,e.bgcolor).style(\"stroke-width\",e.borderwidth+\"px\")}function b(t,e,n,r){var i=s.ensureSingle(t,\"text\",h.itemTextClassName,(function(t){t.attr({\"text-anchor\":\"start\",\"data-notex\":1})})),a=n.label,c=r._fullLayout._meta;c&&(a=s.templateString(a,c)),i.call(o.font,e.font).text(a).call(l.convertToTspans,r)}function x(t,e){var n=e.active;t.each((function(t,i){var o=r.select(this);i===n&&e.showactive&&o.select(\"rect.\"+h.itemRectClassName).call(a.fill,h.activeColor)}))}function w(t){t.select(\"rect.\"+h.itemRectClassName).call(a.fill,h.hoverColor)}function k(t,e){t.select(\"rect.\"+h.itemRectClassName).call(a.fill,e.bgcolor)}function M(t,e){var n=e._dims={width1:0,height1:0,heights:[],widths:[],totalWidth:0,totalHeight:0,openWidth:0,openHeight:0,lx:0,ly:0},a=o.tester.selectAll(\"g.\"+h.dropdownButtonClassName).data(s.filterVisible(e.buttons));a.enter().append(\"g\").classed(h.dropdownButtonClassName,!0);var c=-1!==[\"up\",\"down\"].indexOf(e.direction);a.each((function(i,a){var s=r.select(this);s.call(v,e,i,t);var d=s.select(\".\"+h.itemTextClassName),f=d.node()&&o.bBox(d.node()).width,p=Math.max(f+h.textPadX,h.minWidth),m=e.font.size*u,g=l.lineCount(d),y=Math.max(m*g,h.minHeight)+h.textOffsetY;y=Math.ceil(y),p=Math.ceil(p),n.widths[a]=p,n.heights[a]=y,n.height1=Math.max(n.height1,y),n.width1=Math.max(n.width1,p),c?(n.totalWidth=Math.max(n.totalWidth,p),n.openWidth=n.totalWidth,n.totalHeight+=y+h.gapButton,n.openHeight+=y+h.gapButton):(n.totalWidth+=p+h.gapButton,n.openWidth+=p+h.gapButton,n.totalHeight=Math.max(n.totalHeight,y),n.openHeight=n.totalHeight)})),c?n.totalHeight-=h.gapButton:n.totalWidth-=h.gapButton,n.headerWidth=n.width1+h.arrowPadX,n.headerHeight=n.height1,\"dropdown\"===e.type&&(c?(n.width1+=h.arrowPadX,n.totalHeight=n.height1):n.totalWidth=n.width1,n.totalWidth+=h.arrowPadX),a.remove();var d=n.totalWidth+e.pad.l+e.pad.r,f=n.totalHeight+e.pad.t+e.pad.b,p=t._fullLayout._size;n.lx=p.l+p.w*e.x,n.ly=p.t+p.h*(1-e.y);var m=\"left\";s.isRightAnchor(e)&&(n.lx-=d,m=\"right\"),s.isCenterAnchor(e)&&(n.lx-=d/2,m=\"center\");var g=\"top\";s.isBottomAnchor(e)&&(n.ly-=f,g=\"bottom\"),s.isMiddleAnchor(e)&&(n.ly-=f/2,g=\"middle\"),n.totalWidth=Math.ceil(n.totalWidth),n.totalHeight=Math.ceil(n.totalHeight),n.lx=Math.round(n.lx),n.ly=Math.round(n.ly),i.autoMargin(t,T(e),{x:e.x,y:e.y,l:d*({right:1,center:.5}[m]||0),r:d*({left:1,center:.5}[m]||0),b:f*({top:1,middle:.5}[g]||0),t:f*({bottom:1,middle:.5}[g]||0)})}function T(t){return h.autoMarginIdRoot+t._index}function S(t,e,n,r){r=r||{};var i=t.select(\".\"+h.itemRectClassName),a=t.select(\".\"+h.itemTextClassName),s=e.borderwidth,c=n.index,d=e._dims;o.setTranslate(t,s+n.x,s+n.y);var f=-1!==[\"up\",\"down\"].indexOf(e.direction),p=r.height||(f?d.heights[c]:d.height1);i.attr({x:0,y:0,width:r.width||(f?d.width1:d.widths[c]),height:p});var m=e.font.size*u,g=l.lineCount(a);l.positionText(a,h.textOffsetX,p/2-(g-1)*m/2+h.textOffsetY),f?n.y+=d.heights[c]+n.yPad:n.x+=d.widths[c]+n.xPad,n.index++}function A(t,e){t.attr(h.menuIndexAttrName,e||\"-1\").selectAll(\"g.\"+h.dropdownButtonClassName).remove()}e.exports=function(t){var e=t._fullLayout,n=s.filterVisible(e[h.name]);function a(e){i.autoMargin(t,T(e))}var o=e._menulayer.selectAll(\"g.\"+h.containerClassName).data(n.length>0?[0]:[]);if(o.enter().append(\"g\").classed(h.containerClassName,!0).style(\"cursor\",\"pointer\"),o.exit().each((function(){r.select(this).selectAll(\"g.\"+h.headerGroupClassName).each(a)})).remove(),0!==n.length){var l=o.selectAll(\"g.\"+h.headerGroupClassName).data(n,f);l.enter().append(\"g\").classed(h.headerGroupClassName,!0);for(var c=s.ensureSingle(o,\"g\",h.dropdownButtonGroupClassName,(function(t){t.style(\"pointer-events\",\"all\")})),u=0;u<n.length;u++)M(t,n[u]);var v=new d(t,c,\"updatemenus\"+e._uid);l.enter().size()&&(c.node().parentNode.appendChild(c.node()),c.call(A)),l.exit().each((function(t){c.call(A),a(t)})).remove(),l.each((function(e){var n=r.select(this),a=\"dropdown\"===e.type?c:null;i.manageCommandObserver(t,e,e.buttons,(function(r){m(t,e,0,n,a,v,r.index,!0)})),\"dropdown\"===e.type?(g(t,n,c,v,e),p(c,e)&&y(t,n,c,v,e)):y(t,n,null,null,e)}))}}},{\"../../constants/alignment\":745,\"../../lib\":778,\"../../lib/svg_text_utils\":803,\"../../plot_api/plot_template\":817,\"../../plots/plots\":891,\"../color\":643,\"../drawing\":665,\"./constants\":740,\"./scrollbox\":744,d3:169}],743:[function(t,e,n){arguments[4][737][0].apply(n,arguments)},{\"./attributes\":739,\"./constants\":740,\"./defaults\":741,\"./draw\":742,dup:737}],744:[function(t,e,n){\"use strict\";e.exports=s;var r=t(\"d3\"),i=t(\"../color\"),a=t(\"../drawing\"),o=t(\"../../lib\");function s(t,e,n){this.gd=t,this.container=e,this.id=n,this.position=null,this.translateX=null,this.translateY=null,this.hbar=null,this.vbar=null,this.bg=this.container.selectAll(\"rect.scrollbox-bg\").data([0]),this.bg.exit().on(\".drag\",null).on(\"wheel\",null).remove(),this.bg.enter().append(\"rect\").classed(\"scrollbox-bg\",!0).style(\"pointer-events\",\"all\").attr({opacity:0,x:0,y:0,width:0,height:0})}s.barWidth=2,s.barLength=20,s.barRadius=2,s.barPad=1,s.barColor=\"#808BA4\",s.prototype.enable=function(t,e,n){var o=this.gd._fullLayout,l=o.width,c=o.height;this.position=t;var u,h,d,f,p=this.position.l,m=this.position.w,g=this.position.t,y=this.position.h,v=this.position.direction,_=\"down\"===v,b=\"left\"===v,x=\"up\"===v,w=m,k=y;_||b||\"right\"===v||x||(this.position.direction=\"down\",_=!0),_||x?(h=(u=p)+w,_?(d=g,k=(f=Math.min(d+k,c))-d):k=(f=g+k)-(d=Math.max(f-k,0))):(f=(d=g)+k,b?w=(h=p+w)-(u=Math.max(h-w,0)):(u=p,w=(h=Math.min(u+w,l))-u)),this._box={l:u,t:d,w:w,h:k};var M=m>w,T=s.barLength+2*s.barPad,S=s.barWidth+2*s.barPad,A=p,L=g+y;L+S>c&&(L=c-S);var C=this.container.selectAll(\"rect.scrollbar-horizontal\").data(M?[0]:[]);C.exit().on(\".drag\",null).remove(),C.enter().append(\"rect\").classed(\"scrollbar-horizontal\",!0).call(i.fill,s.barColor),M?(this.hbar=C.attr({rx:s.barRadius,ry:s.barRadius,x:A,y:L,width:T,height:S}),this._hbarXMin=A+T/2,this._hbarTranslateMax=w-T):(delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax);var E=y>k,O=s.barWidth+2*s.barPad,D=s.barLength+2*s.barPad,I=p+m,P=g;I+O>l&&(I=l-O);var R=this.container.selectAll(\"rect.scrollbar-vertical\").data(E?[0]:[]);R.exit().on(\".drag\",null).remove(),R.enter().append(\"rect\").classed(\"scrollbar-vertical\",!0).call(i.fill,s.barColor),E?(this.vbar=R.attr({rx:s.barRadius,ry:s.barRadius,x:I,y:P,width:O,height:D}),this._vbarYMin=P+D/2,this._vbarTranslateMax=k-D):(delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax);var z=this.id,j=u-.5,F=E?h+O+.5:h+.5,N=d-.5,B=M?f+S+.5:f+.5,Y=o._topdefs.selectAll(\"#\"+z).data(M||E?[0]:[]);if(Y.exit().remove(),Y.enter().append(\"clipPath\").attr(\"id\",z).append(\"rect\"),M||E?(this._clipRect=Y.select(\"rect\").attr({x:Math.floor(j),y:Math.floor(N),width:Math.ceil(F)-Math.floor(j),height:Math.ceil(B)-Math.floor(N)}),this.container.call(a.setClipUrl,z,this.gd),this.bg.attr({x:p,y:g,width:m,height:y})):(this.bg.attr({width:0,height:0}),this.container.on(\"wheel\",null).on(\".drag\",null).call(a.setClipUrl,null),delete this._clipRect),M||E){var H=r.behavior.drag().on(\"dragstart\",(function(){r.event.sourceEvent.preventDefault()})).on(\"drag\",this._onBoxDrag.bind(this));this.container.on(\"wheel\",null).on(\"wheel\",this._onBoxWheel.bind(this)).on(\".drag\",null).call(H);var V=r.behavior.drag().on(\"dragstart\",(function(){r.event.sourceEvent.preventDefault(),r.event.sourceEvent.stopPropagation()})).on(\"drag\",this._onBarDrag.bind(this));M&&this.hbar.on(\".drag\",null).call(V),E&&this.vbar.on(\".drag\",null).call(V)}this.setTranslate(e,n)},s.prototype.disable=function(){(this.hbar||this.vbar)&&(this.bg.attr({width:0,height:0}),this.container.on(\"wheel\",null).on(\".drag\",null).call(a.setClipUrl,null),delete this._clipRect),this.hbar&&(this.hbar.on(\".drag\",null),this.hbar.remove(),delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax),this.vbar&&(this.vbar.on(\".drag\",null),this.vbar.remove(),delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax)},s.prototype._onBoxDrag=function(){var t=this.translateX,e=this.translateY;this.hbar&&(t-=r.event.dx),this.vbar&&(e-=r.event.dy),this.setTranslate(t,e)},s.prototype._onBoxWheel=function(){var t=this.translateX,e=this.translateY;this.hbar&&(t+=r.event.deltaY),this.vbar&&(e+=r.event.deltaY),this.setTranslate(t,e)},s.prototype._onBarDrag=function(){var t=this.translateX,e=this.translateY;if(this.hbar){var n=t+this._hbarXMin,i=n+this._hbarTranslateMax;t=(o.constrain(r.event.x,n,i)-n)/(i-n)*(this.position.w-this._box.w)}if(this.vbar){var a=e+this._vbarYMin,s=a+this._vbarTranslateMax;e=(o.constrain(r.event.y,a,s)-a)/(s-a)*(this.position.h-this._box.h)}this.setTranslate(t,e)},s.prototype.setTranslate=function(t,e){var n=this.position.w-this._box.w,r=this.position.h-this._box.h;t=o.constrain(t||0,0,n),e=o.constrain(e||0,0,r),this.translateX=t,this.translateY=e,this.container.call(a.setTranslate,this._box.l-this.position.l-t,this._box.t-this.position.t-e),this._clipRect&&this._clipRect.attr({x:Math.floor(this.position.l+t-.5),y:Math.floor(this.position.t+e-.5)}),this.hbar&&this.hbar.call(a.setTranslate,t+t/n*this._hbarTranslateMax,e),this.vbar&&this.vbar.call(a.setTranslate,t,e+e/r*this._vbarTranslateMax)}},{\"../../lib\":778,\"../color\":643,\"../drawing\":665,d3:169}],745:[function(t,e,n){\"use strict\";e.exports={FROM_BL:{left:0,center:.5,right:1,bottom:0,middle:.5,top:1},FROM_TL:{left:0,center:.5,right:1,bottom:1,middle:.5,top:0},FROM_BR:{left:1,center:.5,right:0,bottom:0,middle:.5,top:1},LINE_SPACING:1.3,CAP_SHIFT:.7,MID_SHIFT:.35,OPPOSITE_SIDE:{left:\"right\",right:\"left\",top:\"bottom\",bottom:\"top\"}}},{}],746:[function(t,e,n){\"use strict\";e.exports={axisRefDescription:function(t,e,n){return[\"If set to a\",t,\"axis id (e.g. *\"+t+\"* or\",\"*\"+t+\"2*), the `\"+t+\"` position refers to a\",t,\"coordinate. If set to *paper*, the `\"+t+\"`\",\"position refers to the distance from the\",e,\"of the plotting\",\"area in normalized coordinates where *0* (*1*) corresponds to the\",e,\"(\"+n+\"). If set to a\",t,\"axis ID followed by\",\"*domain* (separated by a space), the position behaves like for\",\"*paper*, but refers to the distance in fractions of the domain\",\"length from the\",e,\"of the domain of that axis: e.g.,\",\"*\"+t+\"2 domain* refers to the domain of the second\",t,\" axis and a\",t,\"position of 0.5 refers to the\",\"point between the\",e,\"and the\",n,\"of the domain of the\",\"second\",t,\"axis.\"].join(\" \")}}},{}],747:[function(t,e,n){\"use strict\";e.exports={INCREASING:{COLOR:\"#3D9970\",SYMBOL:\"\\u25b2\"},DECREASING:{COLOR:\"#FF4136\",SYMBOL:\"\\u25bc\"}}},{}],748:[function(t,e,n){\"use strict\";e.exports={FORMAT_LINK:\"https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md#d3_format\",DATE_FORMAT_LINK:\"https://github.com/d3/d3-time-format#locale_format\"}},{}],749:[function(t,e,n){\"use strict\";e.exports={COMPARISON_OPS:[\"=\",\"!=\",\"<\",\">=\",\">\",\"<=\"],COMPARISON_OPS2:[\"=\",\"<\",\">=\",\">\",\"<=\"],INTERVAL_OPS:[\"[]\",\"()\",\"[)\",\"(]\",\"][\",\")(\",\"](\",\")[\"],SET_OPS:[\"{}\",\"}{\"],CONSTRAINT_REDUCTION:{\"=\":\"=\",\"<\":\"<\",\"<=\":\"<\",\">\":\">\",\">=\":\">\",\"[]\":\"[]\",\"()\":\"[]\",\"[)\":\"[]\",\"(]\":\"[]\",\"][\":\"][\",\")(\":\"][\",\"](\":\"][\",\")[\":\"][\"}}},{}],750:[function(t,e,n){\"use strict\";e.exports={solid:[[],0],dot:[[.5,1],200],dash:[[.5,1],50],longdash:[[.5,1],10],dashdot:[[.5,.625,.875,1],50],longdashdot:[[.5,.7,.8,1],10]}},{}],751:[function(t,e,n){\"use strict\";e.exports={circle:\"\\u25cf\",\"circle-open\":\"\\u25cb\",square:\"\\u25a0\",\"square-open\":\"\\u25a1\",diamond:\"\\u25c6\",\"diamond-open\":\"\\u25c7\",cross:\"+\",x:\"\\u274c\"}},{}],752:[function(t,e,n){\"use strict\";e.exports={SHOW_PLACEHOLDER:100,HIDE_PLACEHOLDER:1e3,DESELECTDIM:.2}},{}],753:[function(t,e,n){\"use strict\";e.exports={BADNUM:void 0,FP_SAFE:Number.MAX_VALUE/1e4,ONEMAXYEAR:316224e5,ONEAVGYEAR:315576e5,ONEMINYEAR:31536e6,ONEMAXQUARTER:79488e5,ONEAVGQUARTER:78894e5,ONEMINQUARTER:76896e5,ONEMAXMONTH:26784e5,ONEAVGMONTH:26298e5,ONEMINMONTH:24192e5,ONEWEEK:6048e5,ONEDAY:864e5,ONEHOUR:36e5,ONEMIN:6e4,ONESEC:1e3,EPOCHJD:2440587.5,ALMOST_EQUAL:.999999,LOG_CLIP:10,MINUS_SIGN:\"\\u2212\"}},{}],754:[function(t,e,n){\"use strict\";n.xmlns=\"http://www.w3.org/2000/xmlns/\",n.svg=\"http://www.w3.org/2000/svg\",n.xlink=\"http://www.w3.org/1999/xlink\",n.svgAttrs={xmlns:n.svg,\"xmlns:xlink\":n.xlink}},{}],755:[function(t,e,n){\"use strict\";n.version=t(\"./version\").version,t(\"es6-promise\").polyfill(),t(\"../build/plotcss\"),t(\"./fonts/mathjax_config\")();for(var r=t(\"./registry\"),i=n.register=r.register,a=t(\"./plot_api\"),o=Object.keys(a),s=0;s<o.length;s++){var l=o[s];\"_\"!==l.charAt(0)&&(n[l]=a[l]),i({moduleType:\"apiMethod\",name:l,fn:a[l]})}i(t(\"./traces/scatter\")),i([t(\"./components/legend\"),t(\"./components/fx\"),t(\"./components/annotations\"),t(\"./components/annotations3d\"),t(\"./components/shapes\"),t(\"./components/images\"),t(\"./components/updatemenus\"),t(\"./components/sliders\"),t(\"./components/rangeslider\"),t(\"./components/rangeselector\"),t(\"./components/grid\"),t(\"./components/errorbars\"),t(\"./components/colorscale\"),t(\"./components/colorbar\")]),i([t(\"./locale-en\"),t(\"./locale-en-us\")]),window.PlotlyLocales&&Array.isArray(window.PlotlyLocales)&&(i(window.PlotlyLocales),delete window.PlotlyLocales),n.Icons=t(\"./fonts/ploticon\"),n.Plots=t(\"./plots/plots\"),n.Fx=t(\"./components/fx\"),n.Snapshot=t(\"./snapshot\"),n.PlotSchema=t(\"./plot_api/plot_schema\"),n.Queue=t(\"./lib/queue\"),n.d3=t(\"d3\")},{\"../build/plotcss\":1,\"./components/annotations\":634,\"./components/annotations3d\":639,\"./components/colorbar\":649,\"./components/colorscale\":655,\"./components/errorbars\":671,\"./components/fx\":683,\"./components/grid\":687,\"./components/images\":692,\"./components/legend\":700,\"./components/rangeselector\":711,\"./components/rangeslider\":718,\"./components/shapes\":732,\"./components/sliders\":737,\"./components/updatemenus\":743,\"./fonts/mathjax_config\":756,\"./fonts/ploticon\":757,\"./lib/queue\":794,\"./locale-en\":808,\"./locale-en-us\":807,\"./plot_api\":812,\"./plot_api/plot_schema\":816,\"./plots/plots\":891,\"./registry\":911,\"./snapshot\":916,\"./traces/scatter\":1199,\"./version\":1370,d3:169,\"es6-promise\":224}],756:[function(t,e,n){\"use strict\";e.exports=function(){\"undefined\"!=typeof MathJax&&\"local\"!==(window.PlotlyConfig||{}).MathJaxConfig&&(MathJax.Hub.Config({messageStyle:\"none\",skipStartupTypeset:!0,displayAlign:\"left\",tex2jax:{inlineMath:[[\"$\",\"$\"],[\"\\\\(\",\"\\\\)\"]]}}),MathJax.Hub.Configured())}},{}],757:[function(t,e,n){\"use strict\";e.exports={undo:{width:857.1,height:1e3,path:\"m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z\",transform:\"matrix(1 0 0 -1 0 850)\"},home:{width:928.6,height:1e3,path:\"m786 296v-267q0-15-11-26t-25-10h-214v214h-143v-214h-214q-15 0-25 10t-11 26v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-4-7 2-12 7l-35 41q-4 5-3 13t6 12l401 334q18 15 42 15t43-15l136-114v109q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q5-5 6-12t-4-13z\",transform:\"matrix(1 0 0 -1 0 850)\"},\"camera-retro\":{width:1e3,height:1e3,path:\"m518 386q0 8-5 13t-13 5q-37 0-63-27t-26-63q0-8 5-13t13-5 12 5 5 13q0 23 16 38t38 16q8 0 13 5t5 13z m125-73q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m-572-320h858v71h-858v-71z m643 320q0 89-62 152t-152 62-151-62-63-152 63-151 151-63 152 63 62 151z m-571 358h214v72h-214v-72z m-72-107h858v143h-462l-36-71h-360v-72z m929 143v-714q0-30-21-51t-50-21h-858q-29 0-50 21t-21 51v714q0 30 21 51t50 21h858q29 0 50-21t21-51z\",transform:\"matrix(1 0 0 -1 0 850)\"},zoombox:{width:1e3,height:1e3,path:\"m1000-25l-250 251c40 63 63 138 63 218 0 224-182 406-407 406-224 0-406-182-406-406s183-406 407-406c80 0 155 22 218 62l250-250 125 125z m-812 250l0 438 437 0 0-438-437 0z m62 375l313 0 0-312-313 0 0 312z\",transform:\"matrix(1 0 0 -1 0 850)\"},pan:{width:1e3,height:1e3,path:\"m1000 350l-187 188 0-125-250 0 0 250 125 0-188 187-187-187 125 0 0-250-250 0 0 125-188-188 186-187 0 125 252 0 0-250-125 0 187-188 188 188-125 0 0 250 250 0 0-126 187 188z\",transform:\"matrix(1 0 0 -1 0 850)\"},zoom_plus:{width:875,height:1e3,path:\"m1 787l0-875 875 0 0 875-875 0z m687-500l-187 0 0-187-125 0 0 187-188 0 0 125 188 0 0 187 125 0 0-187 187 0 0-125z\",transform:\"matrix(1 0 0 -1 0 850)\"},zoom_minus:{width:875,height:1e3,path:\"m0 788l0-876 875 0 0 876-875 0z m688-500l-500 0 0 125 500 0 0-125z\",transform:\"matrix(1 0 0 -1 0 850)\"},autoscale:{width:1e3,height:1e3,path:\"m250 850l-187 0-63 0 0-62 0-188 63 0 0 188 187 0 0 62z m688 0l-188 0 0-62 188 0 0-188 62 0 0 188 0 62-62 0z m-875-938l0 188-63 0 0-188 0-62 63 0 187 0 0 62-187 0z m875 188l0-188-188 0 0-62 188 0 62 0 0 62 0 188-62 0z m-125 188l-1 0-93-94-156 156 156 156 92-93 2 0 0 250-250 0 0-2 93-92-156-156-156 156 94 92 0 2-250 0 0-250 0 0 93 93 157-156-157-156-93 94 0 0 0-250 250 0 0 0-94 93 156 157 156-157-93-93 0 0 250 0 0 250z\",transform:\"matrix(1 0 0 -1 0 850)\"},tooltip_basic:{width:1500,height:1e3,path:\"m375 725l0 0-375-375 375-374 0-1 1125 0 0 750-1125 0z\",transform:\"matrix(1 0 0 -1 0 850)\"},tooltip_compare:{width:1125,height:1e3,path:\"m187 786l0 2-187-188 188-187 0 0 937 0 0 373-938 0z m0-499l0 1-187-188 188-188 0 0 937 0 0 376-938-1z\",transform:\"matrix(1 0 0 -1 0 850)\"},plotlylogo:{width:1542,height:1e3,path:\"m0-10h182v-140h-182v140z m228 146h183v-286h-183v286z m225 714h182v-1000h-182v1000z m225-285h182v-715h-182v715z m225 142h183v-857h-183v857z m231-428h182v-429h-182v429z m225-291h183v-138h-183v138z\",transform:\"matrix(1 0 0 -1 0 850)\"},\"z-axis\":{width:1e3,height:1e3,path:\"m833 5l-17 108v41l-130-65 130-66c0 0 0 38 0 39 0-1 36-14 39-25 4-15-6-22-16-30-15-12-39-16-56-20-90-22-187-23-279-23-261 0-341 34-353 59 3 60 228 110 228 110-140-8-351-35-351-116 0-120 293-142 474-142 155 0 477 22 477 142 0 50-74 79-163 96z m-374 94c-58-5-99-21-99-40 0-24 65-43 144-43 79 0 143 19 143 43 0 19-42 34-98 40v216h87l-132 135-133-135h88v-216z m167 515h-136v1c16 16 31 34 46 52l84 109v54h-230v-71h124v-1c-16-17-28-32-44-51l-89-114v-51h245v72z\",transform:\"matrix(1 0 0 -1 0 850)\"},\"3d_rotate\":{width:1e3,height:1e3,path:\"m922 660c-5 4-9 7-14 11-359 263-580-31-580-31l-102 28 58-400c0 1 1 1 2 2 118 108 351 249 351 249s-62 27-100 42c88 83 222 183 347 122 16-8 30-17 44-27-2 1-4 2-6 4z m36-329c0 0 64 229-88 296-62 27-124 14-175-11 157-78 225-208 249-266 8-19 11-31 11-31 2 5 6 15 11 32-5-13-8-20-8-20z m-775-239c70-31 117-50 198-32-121 80-199 346-199 346l-96-15-58-12c0 0 55-226 155-287z m603 133l-317-139c0 0 4-4 19-14 7-5 24-15 24-15s-177-147-389 4c235-287 536-112 536-112l31-22 100 299-4-1z m-298-153c6-4 14-9 24-15 0 0-17 10-24 15z\",transform:\"matrix(1 0 0 -1 0 850)\"},camera:{width:1e3,height:1e3,path:\"m500 450c-83 0-150-67-150-150 0-83 67-150 150-150 83 0 150 67 150 150 0 83-67 150-150 150z m400 150h-120c-16 0-34 13-39 29l-31 93c-6 15-23 28-40 28h-340c-16 0-34-13-39-28l-31-94c-6-15-23-28-40-28h-120c-55 0-100-45-100-100v-450c0-55 45-100 100-100h800c55 0 100 45 100 100v450c0 55-45 100-100 100z m-400-550c-138 0-250 112-250 250 0 138 112 250 250 250 138 0 250-112 250-250 0-138-112-250-250-250z m365 380c-19 0-35 16-35 35 0 19 16 35 35 35 19 0 35-16 35-35 0-19-16-35-35-35z\",transform:\"matrix(1 0 0 -1 0 850)\"},movie:{width:1e3,height:1e3,path:\"m938 413l-188-125c0 37-17 71-44 94 64 38 107 107 107 187 0 121-98 219-219 219-121 0-219-98-219-219 0-61 25-117 66-156h-115c30 33 49 76 49 125 0 103-84 187-187 187s-188-84-188-187c0-57 26-107 65-141-38-22-65-62-65-109v-250c0-70 56-126 125-126h500c69 0 125 56 125 126l188-126c34 0 62 28 62 63v375c0 35-28 63-62 63z m-750 0c-69 0-125 56-125 125s56 125 125 125 125-56 125-125-56-125-125-125z m406-1c-87 0-157 70-157 157 0 86 70 156 157 156s156-70 156-156-70-157-156-157z\",transform:\"matrix(1 0 0 -1 0 850)\"},question:{width:857.1,height:1e3,path:\"m500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z\",transform:\"matrix(1 0 0 -1 0 850)\"},disk:{width:857.1,height:1e3,path:\"m214-7h429v214h-429v-214z m500 0h72v500q0 8-6 21t-11 20l-157 156q-5 6-19 12t-22 5v-232q0-22-15-38t-38-16h-322q-22 0-37 16t-16 38v232h-72v-714h72v232q0 22 16 38t37 16h465q22 0 38-16t15-38v-232z m-214 518v178q0 8-5 13t-13 5h-107q-7 0-13-5t-5-13v-178q0-8 5-13t13-5h107q7 0 13 5t5 13z m357-18v-518q0-22-15-38t-38-16h-750q-23 0-38 16t-16 38v750q0 22 16 38t38 16h517q23 0 50-12t42-26l156-157q16-15 27-42t11-49z\",transform:\"matrix(1 0 0 -1 0 850)\"},drawopenpath:{width:70,height:70,path:\"M33.21,85.65a7.31,7.31,0,0,1-2.59-.48c-8.16-3.11-9.27-19.8-9.88-41.3-.1-3.58-.19-6.68-.35-9-.15-2.1-.67-3.48-1.43-3.79-2.13-.88-7.91,2.32-12,5.86L3,32.38c1.87-1.64,11.55-9.66,18.27-6.9,2.13.87,4.75,3.14,5.17,9,.17,2.43.26,5.59.36,9.25a224.17,224.17,0,0,0,1.5,23.4c1.54,10.76,4,12.22,4.48,12.4.84.32,2.79-.46,5.76-3.59L43,80.07C41.53,81.57,37.68,85.64,33.21,85.65ZM74.81,69a11.34,11.34,0,0,0,6.09-6.72L87.26,44.5,74.72,32,56.9,38.35c-2.37.86-5.57,3.42-6.61,6L38.65,72.14l8.42,8.43ZM55,46.27a7.91,7.91,0,0,1,3.64-3.17l14.8-5.3,8,8L76.11,60.6l-.06.19a6.37,6.37,0,0,1-3,3.43L48.25,74.59,44.62,71Zm16.57,7.82A6.9,6.9,0,1,0,64.64,61,6.91,6.91,0,0,0,71.54,54.09Zm-4.05,0a2.85,2.85,0,1,1-2.85-2.85A2.86,2.86,0,0,1,67.49,54.09Zm-4.13,5.22L60.5,56.45,44.26,72.7l2.86,2.86ZM97.83,35.67,84.14,22l-8.57,8.57L89.26,44.24Zm-13.69-8,8,8-2.85,2.85-8-8Z\",transform:\"matrix(1 0 0 1 -15 -15)\"},drawclosedpath:{width:90,height:90,path:\"M88.41,21.12a26.56,26.56,0,0,0-36.18,0l-2.07,2-2.07-2a26.57,26.57,0,0,0-36.18,0,23.74,23.74,0,0,0,0,34.8L48,90.12a3.22,3.22,0,0,0,4.42,0l36-34.21a23.73,23.73,0,0,0,0-34.79ZM84,51.24,50.16,83.35,16.35,51.25a17.28,17.28,0,0,1,0-25.47,20,20,0,0,1,27.3,0l4.29,4.07a3.23,3.23,0,0,0,4.44,0l4.29-4.07a20,20,0,0,1,27.3,0,17.27,17.27,0,0,1,0,25.46ZM66.76,47.68h-33v6.91h33ZM53.35,35H46.44V68h6.91Z\",transform:\"matrix(1 0 0 1 -5 -5)\"},lasso:{width:1031,height:1e3,path:\"m1018 538c-36 207-290 336-568 286-277-48-473-256-436-463 10-57 36-108 76-151-13-66 11-137 68-183 34-28 75-41 114-42l-55-70 0 0c-2-1-3-2-4-3-10-14-8-34 5-45 14-11 34-8 45 4 1 1 2 3 2 5l0 0 113 140c16 11 31 24 45 40 4 3 6 7 8 11 48-3 100 0 151 9 278 48 473 255 436 462z m-624-379c-80 14-149 48-197 96 42 42 109 47 156 9 33-26 47-66 41-105z m-187-74c-19 16-33 37-39 60 50-32 109-55 174-68-42-25-95-24-135 8z m360 75c-34-7-69-9-102-8 8 62-16 128-68 170-73 59-175 54-244-5-9 20-16 40-20 61-28 159 121 317 333 354s407-60 434-217c28-159-121-318-333-355z\",transform:\"matrix(1 0 0 -1 0 850)\"},selectbox:{width:1e3,height:1e3,path:\"m0 850l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-285l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z\",transform:\"matrix(1 0 0 -1 0 850)\"},drawline:{width:70,height:70,path:\"M60.64,62.3a11.29,11.29,0,0,0,6.09-6.72l6.35-17.72L60.54,25.31l-17.82,6.4c-2.36.86-5.57,3.41-6.6,6L24.48,65.5l8.42,8.42ZM40.79,39.63a7.89,7.89,0,0,1,3.65-3.17l14.79-5.31,8,8L61.94,54l-.06.19a6.44,6.44,0,0,1-3,3.43L34.07,68l-3.62-3.63Zm16.57,7.81a6.9,6.9,0,1,0-6.89,6.9A6.9,6.9,0,0,0,57.36,47.44Zm-4,0a2.86,2.86,0,1,1-2.85-2.85A2.86,2.86,0,0,1,53.32,47.44Zm-4.13,5.22L46.33,49.8,30.08,66.05l2.86,2.86ZM83.65,29,70,15.34,61.4,23.9,75.09,37.59ZM70,21.06l8,8-2.84,2.85-8-8ZM87,80.49H10.67V87H87Z\",transform:\"matrix(1 0 0 1 -15 -15)\"},drawrect:{width:80,height:80,path:\"M78,22V79H21V22H78m9-9H12V88H87V13ZM68,46.22H31V54H68ZM53,32H45.22V69H53Z\",transform:\"matrix(1 0 0 1 -10 -10)\"},drawcircle:{width:80,height:80,path:\"M50,84.72C26.84,84.72,8,69.28,8,50.3S26.84,15.87,50,15.87,92,31.31,92,50.3,73.16,84.72,50,84.72Zm0-60.59c-18.6,0-33.74,11.74-33.74,26.17S31.4,76.46,50,76.46,83.74,64.72,83.74,50.3,68.6,24.13,50,24.13Zm17.15,22h-34v7.11h34Zm-13.8-13H46.24v34h7.11Z\",transform:\"matrix(1 0 0 1 -10 -10)\"},eraseshape:{width:80,height:80,path:\"M82.77,78H31.85L6,49.57,31.85,21.14H82.77a8.72,8.72,0,0,1,8.65,8.77V69.24A8.72,8.72,0,0,1,82.77,78ZM35.46,69.84H82.77a.57.57,0,0,0,.49-.6V29.91a.57.57,0,0,0-.49-.61H35.46L17,49.57Zm32.68-34.7-24,24,5,5,24-24Zm-19,.53-5,5,24,24,5-5Z\",transform:\"matrix(1 0 0 1 -10 -10)\"},spikeline:{width:1e3,height:1e3,path:\"M512 409c0-57-46-104-103-104-57 0-104 47-104 104 0 57 47 103 104 103 57 0 103-46 103-103z m-327-39l92 0 0 92-92 0z m-185 0l92 0 0 92-92 0z m370-186l92 0 0 93-92 0z m0-184l92 0 0 92-92 0z\",transform:\"matrix(1.5 0 0 -1.5 0 850)\"},pencil:{width:1792,height:1792,path:\"M491 1536l91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192l416 416-832 832h-416v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z\",transform:\"matrix(1 0 0 1 0 1)\"},newplotlylogo:{name:\"newplotlylogo\",svg:\"<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 132 132'><defs><style>.cls-1 {fill: #3f4f75;} .cls-2 {fill: #80cfbe;} .cls-3 {fill: #fff;}</style></defs><title>plotly-logomark</title><g id='symbol'><rect class='cls-1' width='132' height='132' rx='6' ry='6'/><circle class='cls-2' cx='78' cy='54' r='6'/><circle class='cls-2' cx='102' cy='30' r='6'/><circle class='cls-2' cx='78' cy='30' r='6'/><circle class='cls-2' cx='54' cy='30' r='6'/><circle class='cls-2' cx='30' cy='30' r='6'/><circle class='cls-2' cx='30' cy='54' r='6'/><path class='cls-3' d='M30,72a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V78A6,6,0,0,0,30,72Z'/><path class='cls-3' d='M78,72a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V78A6,6,0,0,0,78,72Z'/><path class='cls-3' d='M54,48a6,6,0,0,0-6,6v48a6,6,0,0,0,12,0V54A6,6,0,0,0,54,48Z'/><path class='cls-3' d='M102,48a6,6,0,0,0-6,6v48a6,6,0,0,0,12,0V54A6,6,0,0,0,102,48Z'/></g></svg>\"}}},{}],758:[function(t,e,n){\"use strict\";n.isLeftAnchor=function(t){return\"left\"===t.xanchor||\"auto\"===t.xanchor&&t.x<=1/3},n.isCenterAnchor=function(t){return\"center\"===t.xanchor||\"auto\"===t.xanchor&&t.x>1/3&&t.x<2/3},n.isRightAnchor=function(t){return\"right\"===t.xanchor||\"auto\"===t.xanchor&&t.x>=2/3},n.isTopAnchor=function(t){return\"top\"===t.yanchor||\"auto\"===t.yanchor&&t.y>=2/3},n.isMiddleAnchor=function(t){return\"middle\"===t.yanchor||\"auto\"===t.yanchor&&t.y>1/3&&t.y<2/3},n.isBottomAnchor=function(t){return\"bottom\"===t.yanchor||\"auto\"===t.yanchor&&t.y<=1/3}},{}],759:[function(t,e,n){\"use strict\";var r=t(\"./mod\"),i=r.mod,a=r.modHalf,o=Math.PI,s=2*o;function l(t){return Math.abs(t[1]-t[0])>s-1e-14}function c(t,e){return a(e-t,s)}function u(t,e){if(l(e))return!0;var n,r;e[0]<e[1]?(n=e[0],r=e[1]):(n=e[1],r=e[0]),(n=i(n,s))>(r=i(r,s))&&(r+=s);var a=i(t,s),o=a+s;return a>=n&&a<=r||o>=n&&o<=r}function h(t,e,n,r,i,a,c){i=i||0,a=a||0;var u,h,d,f,p,m=l([n,r]);function g(t,e){return[t*Math.cos(e)+i,a-t*Math.sin(e)]}m?(u=0,h=o,d=s):n<r?(u=n,d=r):(u=r,d=n),t<e?(f=t,p=e):(f=e,p=t);var y,v=Math.abs(d-u)<=o?0:1;function _(t,e,n){return\"A\"+[t,t]+\" \"+[0,v,n]+\" \"+g(t,e)}return m?y=null===f?\"M\"+g(p,u)+_(p,h,0)+_(p,d,0)+\"Z\":\"M\"+g(f,u)+_(f,h,0)+_(f,d,0)+\"ZM\"+g(p,u)+_(p,h,1)+_(p,d,1)+\"Z\":null===f?(y=\"M\"+g(p,u)+_(p,d,0),c&&(y+=\"L0,0Z\")):y=\"M\"+g(f,u)+\"L\"+g(p,u)+_(p,d,0)+\"L\"+g(f,d)+_(f,u,1)+\"Z\",y}e.exports={deg2rad:function(t){return t/180*o},rad2deg:function(t){return t/o*180},angleDelta:c,angleDist:function(t,e){return Math.abs(c(t,e))},isFullCircle:l,isAngleInsideSector:u,isPtInsideSector:function(t,e,n,r){return!!u(e,r)&&(n[0]<n[1]?(i=n[0],a=n[1]):(i=n[1],a=n[0]),t>=i&&t<=a);var i,a},pathArc:function(t,e,n,r,i){return h(null,t,e,n,r,i,0)},pathSector:function(t,e,n,r,i){return h(null,t,e,n,r,i,1)},pathAnnulus:function(t,e,n,r,i,a){return h(t,e,n,r,i,a,1)}}},{\"./mod\":785}],760:[function(t,e,n){\"use strict\";var r=Array.isArray,i=\"undefined\"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer:{isView:function(){return!1}},a=\"undefined\"==typeof DataView?function(){}:DataView;function o(t){return i.isView(t)&&!(t instanceof a)}function s(t){return r(t)||o(t)}function l(t,e,n){if(s(t)){if(s(t[0])){for(var r=n,i=0;i<t.length;i++)r=e(r,t[i].length);return r}return t.length}return 0}n.isTypedArray=o,n.isArrayOrTypedArray=s,n.isArray1D=function(t){return!s(t[0])},n.ensureArray=function(t,e){return r(t)||(t=[]),t.length=e,t},n.concat=function(){var t,e,n,i,a,o,s,l,c=[],u=!0,h=0;for(n=0;n<arguments.length;n++)(o=(i=arguments[n]).length)&&(e?c.push(i):(e=i,a=o),r(i)?t=!1:(u=!1,h?t!==i.constructor&&(t=!1):t=i.constructor),h+=o);if(!h)return[];if(!c.length)return e;if(u)return e.concat.apply(e,c);if(t){for((s=new t(h)).set(e),n=0;n<c.length;n++)s.set(i=c[n],a),a+=i.length;return s}for(s=new Array(h),l=0;l<e.length;l++)s[l]=e[l];for(n=0;n<c.length;n++){for(i=c[n],l=0;l<i.length;l++)s[a+l]=i[l];a+=l}return s},n.maxRowLength=function(t){return l(t,Math.max,0)},n.minRowLength=function(t){return l(t,Math.min,1/0)}},{}],761:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../constants/numerical\").BADNUM,a=/^['\"%,$#\\s']+|[, ]|['\"%,$#\\s']+$/g;e.exports=function(t){return\"string\"==typeof t&&(t=t.replace(a,\"\")),r(t)?Number(t):i}},{\"../constants/numerical\":753,\"fast-isnumeric\":241}],762:[function(t,e,n){\"use strict\";e.exports=function(t){var e=t._fullLayout;e._glcanvas&&e._glcanvas.size()&&e._glcanvas.each((function(t){t.regl&&t.regl.clear({color:!0,depth:!0})}))}},{}],763:[function(t,e,n){\"use strict\";e.exports=function(t){t._responsiveChartHandler&&(window.removeEventListener(\"resize\",t._responsiveChartHandler),delete t._responsiveChartHandler)}},{}],764:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"tinycolor2\"),a=t(\"../plots/attributes\"),o=t(\"../components/colorscale/scales\"),s=t(\"../constants/interactions\").DESELECTDIM,l=t(\"./nested_property\"),c=t(\"./regex\").counter,u=t(\"./mod\").modHalf,h=t(\"./array\").isArrayOrTypedArray;function d(t,e){var r=n.valObjectMeta[e.valType];if(e.arrayOk&&h(t))return!0;if(r.validateFunction)return r.validateFunction(t,e);var i={},a=i;return r.coerceFunction(t,{set:function(t){a=t}},i,e),a!==i}n.valObjectMeta={data_array:{coerceFunction:function(t,e,n){h(t)?e.set(t):void 0!==n&&e.set(n)}},enumerated:{coerceFunction:function(t,e,n,r){r.coerceNumber&&(t=+t),-1===r.values.indexOf(t)?e.set(n):e.set(t)},validateFunction:function(t,e){e.coerceNumber&&(t=+t);for(var n=e.values,r=0;r<n.length;r++){var i=String(n[r]);if(\"/\"===i.charAt(0)&&\"/\"===i.charAt(i.length-1)){if(new RegExp(i.substr(1,i.length-2)).test(t))return!0}else if(t===n[r])return!0}return!1}},boolean:{coerceFunction:function(t,e,n){e.set(!0===t||!1===t?t:n)}},number:{coerceFunction:function(t,e,n,i){!r(t)||void 0!==i.min&&t<i.min||void 0!==i.max&&t>i.max?e.set(n):e.set(+t)}},integer:{coerceFunction:function(t,e,n,i){t%1||!r(t)||void 0!==i.min&&t<i.min||void 0!==i.max&&t>i.max?e.set(n):e.set(+t)}},string:{coerceFunction:function(t,e,n,r){e.set(\"string\"!=typeof t?!0!==r.strict&&\"number\"==typeof t?String(t):n:r.noBlank&&!t?n:t)}},color:{coerceFunction:function(t,e,n){i(t).isValid()?e.set(t):e.set(n)}},colorlist:{coerceFunction:function(t,e,n){Array.isArray(t)&&t.length&&t.every((function(t){return i(t).isValid()}))?e.set(t):e.set(n)}},colorscale:{coerceFunction:function(t,e,n){e.set(o.get(t,n))}},angle:{coerceFunction:function(t,e,n){\"auto\"===t?e.set(\"auto\"):r(t)?e.set(u(+t,360)):e.set(n)}},subplotid:{coerceFunction:function(t,e,n,r){var i=r.regex||c(n);\"string\"==typeof t&&i.test(t)?e.set(t):e.set(n)},validateFunction:function(t,e){var n=e.dflt;return t===n||\"string\"==typeof t&&!!c(n).test(t)}},flaglist:{coerceFunction:function(t,e,n,r){if(\"string\"==typeof t)if(-1===(r.extras||[]).indexOf(t)){for(var i=t.split(\"+\"),a=0;a<i.length;){var o=i[a];-1===r.flags.indexOf(o)||i.indexOf(o)<a?i.splice(a,1):a++}e.set(i.length?i.join(\"+\"):n)}else e.set(t);else e.set(n)}},any:{coerceFunction:function(t,e,n){e.set(void 0===t?n:t)}},info_array:{coerceFunction:function(t,e,r,i){function a(t,e,r){var i;return void 0===r&&(r=e.dflt),n.valObjectMeta[e.valType].coerceFunction(t,{set:function(t){i=t}},r,e),i}var o=2===i.dimensions||\"1-2\"===i.dimensions&&Array.isArray(t)&&Array.isArray(t[0]);if(Array.isArray(t)){var s,l,c,u,h,d=i.items,f=[],p=Array.isArray(d),m=p&&o&&Array.isArray(d[0]),g=o&&p&&!m,y=p&&!g?d.length:t.length;if(r=Array.isArray(r)?r:[],o)for(s=0;s<y;s++)for(f[s]=[],c=Array.isArray(t[s])?t[s]:[],u=g?d.length:p?d[s].length:c.length,l=0;l<u;l++)void 0!==(h=a(c[l],g?d[l]:p?d[s][l]:d,(r[s]||[])[l]))&&(f[s][l]=h);else for(s=0;s<y;s++)void 0!==(h=a(t[s],p?d[s]:d,r[s]))&&(f[s]=h);e.set(f)}else e.set(r)},validateFunction:function(t,e){if(!Array.isArray(t))return!1;var n=e.items,r=Array.isArray(n),i=2===e.dimensions;if(!e.freeLength&&t.length!==n.length)return!1;for(var a=0;a<t.length;a++)if(i){if(!Array.isArray(t[a])||!e.freeLength&&t[a].length!==n[a].length)return!1;for(var o=0;o<t[a].length;o++)if(!d(t[a][o],r?n[a][o]:n))return!1}else if(!d(t[a],r?n[a]:n))return!1;return!0}}},n.coerce=function(t,e,r,i,a){var o=l(r,i).get(),s=l(t,i),c=l(e,i),u=s.get(),f=e._template;if(void 0===u&&f&&(u=l(f,i).get(),f=0),void 0===a&&(a=o.dflt),o.arrayOk&&h(u))return c.set(u),u;var p=n.valObjectMeta[o.valType].coerceFunction;p(u,c,a,o);var m=c.get();return f&&m===a&&!d(u,o)&&(p(u=l(f,i).get(),c,a,o),m=c.get()),m},n.coerce2=function(t,e,r,i,a){var o=l(t,i),s=n.coerce(t,e,r,i,a);return null!=o.get()&&s},n.coerceFont=function(t,e,n){var r={};return r.family=t(e+\".family\",(n=n||{}).family),r.size=t(e+\".size\",n.size),r.color=t(e+\".color\",n.color),r},n.coerceHoverinfo=function(t,e,r){var i,o=e._module.attributes,s=o.hoverinfo?o:a,l=s.hoverinfo;if(1===r._dataLength){var c=\"all\"===l.dflt?l.flags.slice():l.dflt.split(\"+\");c.splice(c.indexOf(\"name\"),1),i=c.join(\"+\")}return n.coerce(t,e,s,\"hoverinfo\",i)},n.coerceSelectionMarkerOpacity=function(t,e){if(t.marker){var n,r,i=t.marker.opacity;void 0!==i&&(h(i)||t.selected||t.unselected||(n=i,r=s*i),e(\"selected.marker.opacity\",n),e(\"unselected.marker.opacity\",r))}},n.validate=d},{\"../components/colorscale/scales\":658,\"../constants/interactions\":752,\"../plots/attributes\":824,\"./array\":760,\"./mod\":785,\"./nested_property\":786,\"./regex\":795,\"fast-isnumeric\":241,tinycolor2:576}],765:[function(t,e,n){\"use strict\";var r,i,a=t(\"d3-time-format\").timeFormat,o=t(\"fast-isnumeric\"),s=t(\"./loggers\"),l=t(\"./mod\").mod,c=t(\"../constants/numerical\"),u=c.BADNUM,h=c.ONEDAY,d=c.ONEHOUR,f=c.ONEMIN,p=c.ONESEC,m=c.EPOCHJD,g=t(\"../registry\"),y=t(\"d3-time-format\").utcFormat,v=/^\\s*(-?\\d\\d\\d\\d|\\d\\d)(-(\\d?\\d)(-(\\d?\\d)([ Tt]([01]?\\d|2[0-3])(:([0-5]\\d)(:([0-5]\\d(\\.\\d+)?))?(Z|z|[+\\-]\\d\\d(:?\\d\\d)?)?)?)?)?)?\\s*$/m,_=/^\\s*(-?\\d\\d\\d\\d|\\d\\d)(-(\\d?\\di?)(-(\\d?\\d)([ Tt]([01]?\\d|2[0-3])(:([0-5]\\d)(:([0-5]\\d(\\.\\d+)?))?(Z|z|[+\\-]\\d\\d(:?\\d\\d)?)?)?)?)?)?\\s*$/m,b=(new Date).getFullYear()-70;function x(t){return t&&g.componentsRegistry.calendars&&\"string\"==typeof t&&\"gregorian\"!==t}function w(t,e){return String(t+Math.pow(10,e)).substr(1)}n.dateTick0=function(t,e){var r=function(t,e){return x(t)?e?g.getComponentMethod(\"calendars\",\"CANONICAL_SUNDAY\")[t]:g.getComponentMethod(\"calendars\",\"CANONICAL_TICK\")[t]:e?\"2000-01-02\":\"2000-01-01\"}(t,!!e);if(e<2)return r;var i=n.dateTime2ms(r,t);return n.ms2DateTime(i+=h*(e-1),0,t)},n.dfltRange=function(t){return x(t)?g.getComponentMethod(\"calendars\",\"DFLTRANGE\")[t]:[\"2000-01-01\",\"2001-01-01\"]},n.isJSDate=function(t){return\"object\"==typeof t&&null!==t&&\"function\"==typeof t.getTime},n.dateTime2ms=function(t,e){if(n.isJSDate(t)){var a=t.getTimezoneOffset()*f,o=(t.getUTCMinutes()-t.getMinutes())*f+(t.getUTCSeconds()-t.getSeconds())*p+(t.getUTCMilliseconds()-t.getMilliseconds());if(o){var s=3*f;a=a-s/2+l(o-a+s/2,s)}return(t=Number(t)-a)>=r&&t<=i?t:u}if(\"string\"!=typeof t&&\"number\"!=typeof t)return u;t=String(t);var c=x(e),y=t.charAt(0);!c||\"G\"!==y&&\"g\"!==y||(t=t.substr(1),e=\"\");var w=c&&\"chinese\"===e.substr(0,7),k=t.match(w?_:v);if(!k)return u;var M=k[1],T=k[3]||\"1\",S=Number(k[5]||1),A=Number(k[7]||0),L=Number(k[9]||0),C=Number(k[11]||0);if(c){if(2===M.length)return u;var E;M=Number(M);try{var O=g.getComponentMethod(\"calendars\",\"getCal\")(e);if(w){var D=\"i\"===T.charAt(T.length-1);T=parseInt(T,10),E=O.newDate(M,O.toMonthIndex(M,T,D),S)}else E=O.newDate(M,Number(T),S)}catch(P){return u}return E?(E.toJD()-m)*h+A*d+L*f+C*p:u}M=2===M.length?(Number(M)+2e3-b)%100+b:Number(M),T-=1;var I=new Date(Date.UTC(2e3,T,S,A,L));return I.setUTCFullYear(M),I.getUTCMonth()!==T||I.getUTCDate()!==S?u:I.getTime()+C*p},r=n.MIN_MS=n.dateTime2ms(\"-9999\"),i=n.MAX_MS=n.dateTime2ms(\"9999-12-31 23:59:59.9999\"),n.isDateTime=function(t,e){return n.dateTime2ms(t,e)!==u};var k=90*h,M=3*d,T=5*f;function S(t,e,n,r,i){if((e||n||r||i)&&(t+=\" \"+w(e,2)+\":\"+w(n,2),(r||i)&&(t+=\":\"+w(r,2),i))){for(var a=4;i%10==0;)a-=1,i/=10;t+=\".\"+w(i,a)}return t}n.ms2DateTime=function(t,e,n){if(\"number\"!=typeof t||!(t>=r&&t<=i))return u;e||(e=0);var a,o,s,c,v,_,b=Math.floor(10*l(t+.05,1)),w=Math.round(t-b/10);if(x(n)){var A=Math.floor(w/h)+m,L=Math.floor(l(t,h));try{a=g.getComponentMethod(\"calendars\",\"getCal\")(n).fromJD(A).formatDate(\"yyyy-mm-dd\")}catch(C){a=y(\"G%Y-%m-%d\")(new Date(w))}if(\"-\"===a.charAt(0))for(;a.length<11;)a=\"-0\"+a.substr(1);else for(;a.length<10;)a=\"0\"+a;o=e<k?Math.floor(L/d):0,s=e<k?Math.floor(L%d/f):0,c=e<M?Math.floor(L%f/p):0,v=e<T?L%p*10+b:0}else _=new Date(w),a=y(\"%Y-%m-%d\")(_),o=e<k?_.getUTCHours():0,s=e<k?_.getUTCMinutes():0,c=e<M?_.getUTCSeconds():0,v=e<T?10*_.getUTCMilliseconds()+b:0;return S(a,o,s,c,v)},n.ms2DateTimeLocal=function(t){if(!(t>=r+h&&t<=i-h))return u;var e=Math.floor(10*l(t+.05,1)),n=new Date(Math.round(t-e/10));return S(a(\"%Y-%m-%d\")(n),n.getHours(),n.getMinutes(),n.getSeconds(),10*n.getUTCMilliseconds()+e)},n.cleanDate=function(t,e,r){if(t===u)return e;if(n.isJSDate(t)||\"number\"==typeof t&&isFinite(t)){if(x(r))return s.error(\"JS Dates and milliseconds are incompatible with world calendars\",t),e;if(!(t=n.ms2DateTimeLocal(+t))&&void 0!==e)return e}else if(!n.isDateTime(t,r))return s.error(\"unrecognized date\",t),e;return t};var A=/%\\d?f/g;function L(t,e,n,r){t=t.replace(A,(function(t){var n=Math.min(+t.charAt(1)||6,6);return(e/1e3%1+2).toFixed(n).substr(2).replace(/0+$/,\"\")||\"0\"}));var i=new Date(Math.floor(e+.05));if(x(r))try{t=g.getComponentMethod(\"calendars\",\"worldCalFmt\")(t,e,r)}catch(a){return\"Invalid\"}return n(t)(i)}var C=[59,59.9,59.99,59.999,59.9999];n.formatDate=function(t,e,n,r,i,a){if(i=x(i)&&i,!e)if(\"y\"===n)e=a.year;else if(\"m\"===n)e=a.month;else{if(\"d\"!==n)return function(t,e){var n=l(t+.05,h),r=w(Math.floor(n/d),2)+\":\"+w(l(Math.floor(n/f),60),2);if(\"M\"!==e){o(e)||(e=0);var i=(100+Math.min(l(t/p,60),C[e])).toFixed(e).substr(1);e>0&&(i=i.replace(/0+$/,\"\").replace(/[\\.]$/,\"\")),r+=\":\"+i}return r}(t,n)+\"\\n\"+L(a.dayMonthYear,t,r,i);e=a.dayMonth+\"\\n\"+a.year}return L(e,t,r,i)};var E=3*h;n.incrementMonth=function(t,e,n){n=x(n)&&n;var r=l(t,h);if(t=Math.round(t-r),n)try{var i=Math.round(t/h)+m,a=g.getComponentMethod(\"calendars\",\"getCal\")(n),o=a.fromJD(i);return e%12?a.add(o,e,\"m\"):a.add(o,e/12,\"y\"),(o.toJD()-m)*h+r}catch(u){s.error(\"invalid ms \"+t+\" in calendar \"+n)}var c=new Date(t+E);return c.setUTCMonth(c.getUTCMonth()+e)+r-E},n.findExactDates=function(t,e){for(var n,r,i=0,a=0,s=0,l=0,c=x(e)&&g.getComponentMethod(\"calendars\",\"getCal\")(e),u=0;u<t.length;u++)if(o(r=t[u])){if(!(r%h))if(c)try{1===(n=c.fromJD(r/h+m)).day()?1===n.month()?i++:a++:s++}catch(f){}else 1===(n=new Date(r)).getUTCDate()?0===n.getUTCMonth()?i++:a++:s++}else l++;var d=t.length-l;return{exactYears:i/d,exactMonths:(a+=i)/d,exactDays:(s+=a)/d}}},{\"../constants/numerical\":753,\"../registry\":911,\"./loggers\":782,\"./mod\":785,\"d3-time-format\":166,\"fast-isnumeric\":241}],766:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"./loggers\"),a=t(\"./matrix\"),o=t(\"gl-mat4\");function s(t){var e=t&&t.parentNode;e&&e.removeChild(t)}function l(t,e,n){var r=\"plotly.js-style-\"+t,a=document.getElementById(r);a||((a=document.createElement(\"style\")).setAttribute(\"id\",r),a.appendChild(document.createTextNode(\"\")),document.head.appendChild(a));var o=a.sheet;o.insertRule?o.insertRule(e+\"{\"+n+\"}\",0):o.addRule?o.addRule(e,n,0):i.warn(\"addStyleRule failed\")}function c(t){var e=window.getComputedStyle(t,null),n=e.getPropertyValue(\"-webkit-transform\")||e.getPropertyValue(\"-moz-transform\")||e.getPropertyValue(\"-ms-transform\")||e.getPropertyValue(\"-o-transform\")||e.getPropertyValue(\"transform\");return\"none\"===n?null:n.replace(\"matrix\",\"\").replace(\"3d\",\"\").slice(1,-1).split(\",\").map((function(t){return+t}))}function u(t){for(var e=[];h(t);)e.push(t),t=t.parentNode;return e}function h(t){return t&&(t instanceof Element||t instanceof HTMLElement)}e.exports={getGraphDiv:function(t){var e;if(\"string\"==typeof t){if(null===(e=document.getElementById(t)))throw new Error(\"No DOM element with id '\"+t+\"' exists on the page.\");return e}if(null==t)throw new Error(\"DOM element provided is null or undefined\");return t},isPlotDiv:function(t){var e=r.select(t);return e.node()instanceof HTMLElement&&e.size()&&e.classed(\"js-plotly-plot\")},removeElement:s,addStyleRule:function(t,e){l(\"global\",t,e)},addRelatedStyleRule:l,deleteRelatedStyleRule:function(t){var e=document.getElementById(\"plotly.js-style-\"+t);e&&s(e)},getFullTransformMatrix:function(t){var e=u(t),n=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];return e.forEach((function(t){var e=c(t);if(e){var r=a.convertCssMatrix(e);n=o.multiply(n,n,r)}})),n},getElementTransformMatrix:c,getElementAndAncestors:u,equalDomRects:function(t,e){return t&&e&&t.x===e.x&&t.y===e.y&&t.top===e.top&&t.left===e.left&&t.right===e.right&&t.bottom===e.bottom}}},{\"./loggers\":782,\"./matrix\":784,d3:169,\"gl-mat4\":292}],767:[function(t,e,n){\"use strict\";var r=t(\"events\").EventEmitter;e.exports={init:function(t){if(t._ev instanceof r)return t;var e=new r,n=new r;return t._ev=e,t._internalEv=n,t.on=e.on.bind(e),t.once=e.once.bind(e),t.removeListener=e.removeListener.bind(e),t.removeAllListeners=e.removeAllListeners.bind(e),t._internalOn=n.on.bind(n),t._internalOnce=n.once.bind(n),t._removeInternalListener=n.removeListener.bind(n),t._removeAllInternalListeners=n.removeAllListeners.bind(n),t.emit=function(r,i){\"undefined\"!=typeof jQuery&&jQuery(t).trigger(r,i),e.emit(r,i),n.emit(r,i)},t},triggerHandler:function(t,e,n){var r,i;\"undefined\"!=typeof jQuery&&(r=jQuery(t).triggerHandler(e,n));var a=t._ev;if(!a)return r;var o,s=a._events[e];if(!s)return r;function l(t){return t.listener?(a.removeListener(e,t.listener),t.fired?void 0:(t.fired=!0,t.listener.apply(a,[n]))):t.apply(a,[n])}for(s=Array.isArray(s)?s:[s],o=0;o<s.length-1;o++)l(s[o]);return i=l(s[o]),void 0!==r?r:i},purge:function(t){return delete t._ev,delete t.on,delete t.once,delete t.removeListener,delete t.removeAllListeners,delete t.emit,delete t._ev,delete t._internalEv,delete t._internalOn,delete t._internalOnce,delete t._removeInternalListener,delete t._removeAllInternalListeners,t}}},{events:110}],768:[function(t,e,n){\"use strict\";var r=t(\"./is_plain_object.js\"),i=Array.isArray;function a(t,e,n,o){var s,l,c,u,h,d,f=t[0],p=t.length;if(2===p&&i(f)&&i(t[1])&&0===f.length){if(function(t,e){var n,r;for(n=0;n<t.length;n++){if(null!==(r=t[n])&&\"object\"==typeof r)return!1;void 0!==r&&(e[n]=r)}return!0}(t[1],f))return f;f.splice(0,f.length)}for(var m=1;m<p;m++)for(l in s=t[m])c=f[l],u=s[l],o&&i(u)?f[l]=u:e&&u&&(r(u)||(h=i(u)))?(h?(h=!1,d=c&&i(c)?c:[]):d=c&&r(c)?c:{},f[l]=a([d,u],e,n,o)):(void 0!==u||n)&&(f[l]=u);return f}n.extendFlat=function(){return a(arguments,!1,!1,!1)},n.extendDeep=function(){return a(arguments,!0,!1,!1)},n.extendDeepAll=function(){return a(arguments,!0,!0,!1)},n.extendDeepNoArrays=function(){return a(arguments,!0,!1,!0)}},{\"./is_plain_object.js\":779}],769:[function(t,e,n){\"use strict\";e.exports=function(t){for(var e={},n=[],r=0,i=0;i<t.length;i++){var a=t[i];1!==e[a]&&(e[a]=1,n[r++]=a)}return n}},{}],770:[function(t,e,n){\"use strict\";function r(t){return!0===t.visible}function i(t){var e=t[0].trace;return!0===e.visible&&0!==e._length}e.exports=function(t){for(var e=(s=t,Array.isArray(s)&&Array.isArray(s[0])&&s[0][0]&&s[0][0].trace?i:r),n=[],a=0;a<t.length;a++){var o=t[a];e(o)&&n.push(o)}var s;return n}},{}],771:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"country-regex\"),a=t(\"@turf/area\"),o=t(\"@turf/centroid\"),s=t(\"@turf/bbox\"),l=t(\"./identity\"),c=t(\"./loggers\"),u=t(\"./is_plain_object\"),h=t(\"./nested_property\"),d=t(\"./polygon\"),f=Object.keys(i),p={\"ISO-3\":l,\"USA-states\":l,\"country names\":function(t){for(var e=0;e<f.length;e++){var n=f[e];if(new RegExp(i[n]).test(t.trim().toLowerCase()))return n}return c.log(\"Unrecognized country name: \"+t+\".\"),!1}};function m(t){var e=t.geojson,n=window.PlotlyGeoAssets||{},r=\"string\"==typeof e?n[e]:e;return u(r)?r:(c.error(\"Oops ... something went wrong when fetching \"+e),!1)}e.exports={locationToFeature:function(t,e,n){if(!e||\"string\"!=typeof e)return!1;var r,i,a,o=p[t](e);if(o){if(\"USA-states\"===t)for(r=[],a=0;a<n.length;a++)(i=n[a]).properties&&i.properties.gu&&\"USA\"===i.properties.gu&&r.push(i);else r=n;for(a=0;a<r.length;a++)if((i=r[a]).id===o)return i;c.log([\"Location with id\",o,\"does not have a matching topojson feature at this resolution.\"].join(\" \"))}return!1},feature2polygons:function(t){var e,n,r,i,a=t.geometry,o=a.coordinates,s=t.id,l=[];function c(t){for(var e=0;e<t.length-1;e++)if(t[e][0]>0&&t[e+1][0]<0)return e;return null}switch(e=\"RUS\"===s||\"FJI\"===s?function(t){var e;if(null===c(t))e=t;else for(e=new Array(t.length),i=0;i<t.length;i++)e[i]=[t[i][0]<0?t[i][0]+360:t[i][0],t[i][1]];l.push(d.tester(e))}:\"ATA\"===s?function(t){var e=c(t);if(null===e)return l.push(d.tester(t));var n=new Array(t.length+1),r=0;for(i=0;i<t.length;i++)i>e?n[r++]=[t[i][0]+360,t[i][1]]:i===e?(n[r++]=t[i],n[r++]=[t[i][0],-90]):n[r++]=t[i];var a=d.tester(n);a.pts.pop(),l.push(a)}:function(t){l.push(d.tester(t))},a.type){case\"MultiPolygon\":for(n=0;n<o.length;n++)for(r=0;r<o[n].length;r++)e(o[n][r]);break;case\"Polygon\":for(n=0;n<o.length;n++)e(o[n])}return l},getTraceGeojson:m,extractTraceFeature:function(t){var e=t[0].trace,n=m(e);if(!n)return!1;var r,i={},s=[];for(r=0;r<e._length;r++){var l=t[r];(l.loc||0===l.loc)&&(i[l.loc]=l)}function u(t){var n=h(t,e.featureidkey||\"id\").get(),r=i[n];if(r){var l=t.geometry;if(\"Polygon\"===l.type||\"MultiPolygon\"===l.type){var u={type:\"Feature\",id:n,geometry:l,properties:{}};u.properties.ct=function(t){var e,n=t.geometry;if(\"MultiPolygon\"===n.type)for(var r=n.coordinates,i=0,s=0;s<r.length;s++){var l={type:\"Polygon\",coordinates:r[s]},c=a.default(l);c>i&&(i=c,e=l)}else e=n;return o.default(e).geometry.coordinates}(u),r.fIn=t,r.fOut=u,s.push(u)}else c.log([\"Location\",r.loc,\"does not have a valid GeoJSON geometry.\",\"Traces with locationmode *geojson-id* only support\",\"*Polygon* and *MultiPolygon* geometries.\"].join(\" \"))}delete i[n]}switch(n.type){case\"FeatureCollection\":var d=n.features;for(r=0;r<d.length;r++)u(d[r]);break;case\"Feature\":u(n);break;default:return c.warn([\"Invalid GeoJSON type\",(n.type||\"none\")+\".\",\"Traces with locationmode *geojson-id* only support\",\"*FeatureCollection* and *Feature* types.\"].join(\" \")),!1}for(var f in i)c.log([\"Location *\"+f+\"*\",\"does not have a matching feature with id-key\",\"*\"+e.featureidkey+\"*.\"].join(\" \"));return s},fetchTraceGeoData:function(t){var e=window.PlotlyGeoAssets||{},n=[];function i(t){return new Promise((function(n,i){r.json(t,(function(r,a){return r?(delete e[t],i(new Error(404===r.status?'GeoJSON at URL \"'+t+'\" does not exist.':\"Unexpected error while fetching from \"+t))):(e[t]=a,n(a))}))}))}function a(t){return new Promise((function(n,r){var i=0,a=setInterval((function(){return e[t]&&\"pending\"!==e[t]?(clearInterval(a),n(e[t])):i>100?(clearInterval(a),r(\"Unexpected error while fetching from \"+t)):void i++}),50)}))}for(var o=0;o<t.length;o++){var s=t[o][0].trace.geojson;\"string\"==typeof s&&(e[s]?\"pending\"===e[s]&&n.push(a(s)):(e[s]=\"pending\",n.push(i(s))))}return n},computeBbox:function(t){return s.default(t)}}},{\"./identity\":776,\"./is_plain_object\":779,\"./loggers\":782,\"./nested_property\":786,\"./polygon\":790,\"@turf/area\":59,\"@turf/bbox\":60,\"@turf/centroid\":61,\"country-regex\":139,d3:169}],772:[function(t,e,n){\"use strict\";var r=t(\"../constants/numerical\").BADNUM;n.calcTraceToLineCoords=function(t){for(var e=t[0].trace.connectgaps,n=[],i=[],a=0;a<t.length;a++){var o=t[a].lonlat;o[0]!==r?i.push(o):!e&&i.length>0&&(n.push(i),i=[])}return i.length>0&&n.push(i),n},n.makeLine=function(t){return 1===t.length?{type:\"LineString\",coordinates:t[0]}:{type:\"MultiLineString\",coordinates:t}},n.makePolygon=function(t){if(1===t.length)return{type:\"Polygon\",coordinates:t};for(var e=new Array(t.length),n=0;n<t.length;n++)e[n]=[t[n]];return{type:\"MultiPolygon\",coordinates:e}},n.makeBlank=function(){return{type:\"Point\",coordinates:[]}}},{\"../constants/numerical\":753}],773:[function(t,e,n){\"use strict\";var r,i,a,o=t(\"./mod\").mod;function s(t,e,n,r,i,a,o,s){var l=n-t,c=i-t,u=o-i,h=r-e,d=a-e,f=s-a,p=l*f-u*h;if(0===p)return null;var m=(c*f-u*d)/p,g=(c*h-l*d)/p;return g<0||g>1||m<0||m>1?null:{x:t+l*m,y:e+h*m}}function l(t,e,n,r,i){var a=r*t+i*e;if(a<0)return r*r+i*i;if(a>n){var o=r-t,s=i-e;return o*o+s*s}var l=r*e-i*t;return l*l/n}n.segmentsIntersect=s,n.segmentDistance=function(t,e,n,r,i,a,o,c){if(s(t,e,n,r,i,a,o,c))return 0;var u=n-t,h=r-e,d=o-i,f=c-a,p=u*u+h*h,m=d*d+f*f,g=Math.min(l(u,h,p,i-t,a-e),l(u,h,p,o-t,c-e),l(d,f,m,t-i,e-a),l(d,f,m,n-i,r-a));return Math.sqrt(g)},n.getTextLocation=function(t,e,n,s){if(t===i&&s===a||(r={},i=t,a=s),r[n])return r[n];var l=t.getPointAtLength(o(n-s/2,e)),c=t.getPointAtLength(o(n+s/2,e)),u=Math.atan((c.y-l.y)/(c.x-l.x)),h=t.getPointAtLength(o(n,e)),d={x:(4*h.x+l.x+c.x)/6,y:(4*h.y+l.y+c.y)/6,theta:u};return r[n]=d,d},n.clearLocationCache=function(){i=null},n.getVisibleSegment=function(t,e,n){var r,i,a=e.left,o=e.right,s=e.top,l=e.bottom,c=0,u=t.getTotalLength(),h=u;function d(e){var n=t.getPointAtLength(e);0===e?r=n:e===u&&(i=n);var c=n.x<a?a-n.x:n.x>o?n.x-o:0,h=n.y<s?s-n.y:n.y>l?n.y-l:0;return Math.sqrt(c*c+h*h)}for(var f=d(c);f;){if((c+=f+n)>h)return;f=d(c)}for(f=d(h);f;){if(c>(h-=f+n))return;f=d(h)}return{min:c,max:h,len:h-c,total:u,isClosed:0===c&&h===u&&Math.abs(r.x-i.x)<.1&&Math.abs(r.y-i.y)<.1}},n.findPointOnPath=function(t,e,n,r){for(var i,a,o,s=(r=r||{}).pathLength||t.getTotalLength(),l=r.tolerance||.001,c=r.iterationLimit||30,u=t.getPointAtLength(0)[n]>t.getPointAtLength(s)[n]?-1:1,h=0,d=0,f=s;h<c;){if(o=(a=t.getPointAtLength(i=(d+f)/2))[n]-e,Math.abs(o)<l)return a;u*o>0?f=i:d=i,h++}return a}},{\"./mod\":785}],774:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"tinycolor2\"),a=t(\"color-normalize\"),o=t(\"../components/colorscale\"),s=t(\"../components/color/attributes\").defaultLine,l=t(\"./array\").isArrayOrTypedArray,c=a(s);function u(t,e){var n=t;return n[3]*=e,n}function h(t){if(r(t))return c;var e=a(t);return e.length?e:c}function d(t){return r(t)?t:1}e.exports={formatColor:function(t,e,n){var r,i,s,f,p,m=t.color,g=l(m),y=l(e),v=o.extractOpts(t),_=[];if(r=void 0!==v.colorscale?o.makeColorScaleFuncFromTrace(t):h,i=g?function(t,e){return void 0===t[e]?c:a(r(t[e]))}:h,s=y?function(t,e){return void 0===t[e]?1:d(t[e])}:d,g||y)for(var b=0;b<n;b++)f=i(m,b),p=s(e,b),_[b]=u(f,p);else _=u(a(m),e);return _},parseColorScale:function(t){var e=o.extractOpts(t),n=e.colorscale;return e.reversescale&&(n=o.flipScale(e.colorscale)),n.map((function(t){var e=t[0],n=i(t[1]).toRgb();return{index:e,rgb:[n.r,n.g,n.b,n.a]}}))}}},{\"../components/color/attributes\":642,\"../components/colorscale\":655,\"./array\":760,\"color-normalize\":125,\"fast-isnumeric\":241,tinycolor2:576}],775:[function(t,e,n){\"use strict\";var r=t(\"./identity\");function i(t){return[t]}e.exports={keyFun:function(t){return t.key},repeat:i,descend:r,wrap:i,unwrap:function(t){return t[0]}}},{\"./identity\":776}],776:[function(t,e,n){\"use strict\";e.exports=function(t){return t}},{}],777:[function(t,e,n){\"use strict\";e.exports=function(t,e){if(!e)return t;var n=1/Math.abs(e),r=n>1?(n*t+n*e)/n:t+e,i=String(r).length;if(i>16){var a=String(e).length;if(i>=String(t).length+a){var o=parseFloat(r).toPrecision(12);-1===o.indexOf(\"e+\")&&(r=+o)}}return r}},{}],778:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"d3-time-format\").utcFormat,a=t(\"fast-isnumeric\"),o=t(\"../constants/numerical\"),s=o.FP_SAFE,l=o.BADNUM,c=e.exports={};c.nestedProperty=t(\"./nested_property\"),c.keyedContainer=t(\"./keyed_container\"),c.relativeAttr=t(\"./relative_attr\"),c.isPlainObject=t(\"./is_plain_object\"),c.toLogRange=t(\"./to_log_range\"),c.relinkPrivateKeys=t(\"./relink_private\");var u=t(\"./array\");c.isTypedArray=u.isTypedArray,c.isArrayOrTypedArray=u.isArrayOrTypedArray,c.isArray1D=u.isArray1D,c.ensureArray=u.ensureArray,c.concat=u.concat,c.maxRowLength=u.maxRowLength,c.minRowLength=u.minRowLength;var h=t(\"./mod\");c.mod=h.mod,c.modHalf=h.modHalf;var d=t(\"./coerce\");c.valObjectMeta=d.valObjectMeta,c.coerce=d.coerce,c.coerce2=d.coerce2,c.coerceFont=d.coerceFont,c.coerceHoverinfo=d.coerceHoverinfo,c.coerceSelectionMarkerOpacity=d.coerceSelectionMarkerOpacity,c.validate=d.validate;var f=t(\"./dates\");c.dateTime2ms=f.dateTime2ms,c.isDateTime=f.isDateTime,c.ms2DateTime=f.ms2DateTime,c.ms2DateTimeLocal=f.ms2DateTimeLocal,c.cleanDate=f.cleanDate,c.isJSDate=f.isJSDate,c.formatDate=f.formatDate,c.incrementMonth=f.incrementMonth,c.dateTick0=f.dateTick0,c.dfltRange=f.dfltRange,c.findExactDates=f.findExactDates,c.MIN_MS=f.MIN_MS,c.MAX_MS=f.MAX_MS;var p=t(\"./search\");c.findBin=p.findBin,c.sorterAsc=p.sorterAsc,c.sorterDes=p.sorterDes,c.distinctVals=p.distinctVals,c.roundUp=p.roundUp,c.sort=p.sort,c.findIndexOfMin=p.findIndexOfMin;var m=t(\"./stats\");c.aggNums=m.aggNums,c.len=m.len,c.mean=m.mean,c.median=m.median,c.midRange=m.midRange,c.variance=m.variance,c.stdev=m.stdev,c.interp=m.interp;var g=t(\"./matrix\");c.init2dArray=g.init2dArray,c.transposeRagged=g.transposeRagged,c.dot=g.dot,c.translationMatrix=g.translationMatrix,c.rotationMatrix=g.rotationMatrix,c.rotationXYMatrix=g.rotationXYMatrix,c.apply3DTransform=g.apply3DTransform,c.apply2DTransform=g.apply2DTransform,c.apply2DTransform2=g.apply2DTransform2,c.convertCssMatrix=g.convertCssMatrix,c.inverseTransformMatrix=g.inverseTransformMatrix;var y=t(\"./angles\");c.deg2rad=y.deg2rad,c.rad2deg=y.rad2deg,c.angleDelta=y.angleDelta,c.angleDist=y.angleDist,c.isFullCircle=y.isFullCircle,c.isAngleInsideSector=y.isAngleInsideSector,c.isPtInsideSector=y.isPtInsideSector,c.pathArc=y.pathArc,c.pathSector=y.pathSector,c.pathAnnulus=y.pathAnnulus;var v=t(\"./anchor_utils\");c.isLeftAnchor=v.isLeftAnchor,c.isCenterAnchor=v.isCenterAnchor,c.isRightAnchor=v.isRightAnchor,c.isTopAnchor=v.isTopAnchor,c.isMiddleAnchor=v.isMiddleAnchor,c.isBottomAnchor=v.isBottomAnchor;var _=t(\"./geometry2d\");c.segmentsIntersect=_.segmentsIntersect,c.segmentDistance=_.segmentDistance,c.getTextLocation=_.getTextLocation,c.clearLocationCache=_.clearLocationCache,c.getVisibleSegment=_.getVisibleSegment,c.findPointOnPath=_.findPointOnPath;var b=t(\"./extend\");c.extendFlat=b.extendFlat,c.extendDeep=b.extendDeep,c.extendDeepAll=b.extendDeepAll,c.extendDeepNoArrays=b.extendDeepNoArrays;var x=t(\"./loggers\");c.log=x.log,c.warn=x.warn,c.error=x.error;var w=t(\"./regex\");c.counterRegex=w.counter;var k=t(\"./throttle\");c.throttle=k.throttle,c.throttleDone=k.done,c.clearThrottle=k.clear;var M=t(\"./dom\");function T(t){var e={};for(var n in t)for(var r=t[n],i=0;i<r.length;i++)e[r[i]]=+n;return e}c.getGraphDiv=M.getGraphDiv,c.isPlotDiv=M.isPlotDiv,c.removeElement=M.removeElement,c.addStyleRule=M.addStyleRule,c.addRelatedStyleRule=M.addRelatedStyleRule,c.deleteRelatedStyleRule=M.deleteRelatedStyleRule,c.getFullTransformMatrix=M.getFullTransformMatrix,c.getElementTransformMatrix=M.getElementTransformMatrix,c.getElementAndAncestors=M.getElementAndAncestors,c.equalDomRects=M.equalDomRects,c.clearResponsive=t(\"./clear_responsive\"),c.preserveDrawingBuffer=t(\"./preserve_drawing_buffer\"),c.makeTraceGroups=t(\"./make_trace_groups\"),c._=t(\"./localize\"),c.notifier=t(\"./notifier\"),c.filterUnique=t(\"./filter_unique\"),c.filterVisible=t(\"./filter_visible\"),c.pushUnique=t(\"./push_unique\"),c.increment=t(\"./increment\"),c.cleanNumber=t(\"./clean_number\"),c.ensureNumber=function(t){return a(t)?(t=Number(t))<-s||t>s?l:a(t)?Number(t):l:l},c.isIndex=function(t,e){return!(void 0!==e&&t>=e)&&a(t)&&t>=0&&t%1==0},c.noop=t(\"./noop\"),c.identity=t(\"./identity\"),c.repeat=function(t,e){for(var n=new Array(e),r=0;r<e;r++)n[r]=t;return n},c.swapAttrs=function(t,e,n,r){n||(n=\"x\"),r||(r=\"y\");for(var i=0;i<e.length;i++){var a=e[i],o=c.nestedProperty(t,a.replace(\"?\",n)),s=c.nestedProperty(t,a.replace(\"?\",r)),l=o.get();o.set(s.get()),s.set(l)}},c.raiseToTop=function(t){t.parentNode.appendChild(t)},c.cancelTransition=function(t){return t.transition().duration(0)},c.constrain=function(t,e,n){return e>n?Math.max(n,Math.min(e,t)):Math.max(e,Math.min(n,t))},c.bBoxIntersect=function(t,e,n){return t.left<=e.right+(n=n||0)&&e.left<=t.right+n&&t.top<=e.bottom+n&&e.top<=t.bottom+n},c.simpleMap=function(t,e,n,r,i){for(var a=t.length,o=new Array(a),s=0;s<a;s++)o[s]=e(t[s],n,r,i);return o},c.randstr=function t(e,n,r,i){if(r||(r=16),void 0===n&&(n=24),n<=0)return\"0\";var a,o,s=Math.log(Math.pow(2,n))/Math.log(r),l=\"\";for(a=2;s===1/0;a*=2)s=Math.log(Math.pow(2,n/a))/Math.log(r)*a;var u=s-Math.floor(s);for(a=0;a<Math.floor(s);a++)l=Math.floor(Math.random()*r).toString(r)+l;u&&(o=Math.pow(r,u),l=Math.floor(Math.random()*o).toString(r)+l);var h=parseInt(l,r);return e&&e[l]||h!==1/0&&h>=Math.pow(2,n)?i>10?(c.warn(\"randstr failed uniqueness\"),l):t(e,n,r,(i||0)+1):l},c.OptionControl=function(t,e){t||(t={}),e||(e=\"opt\");var n={optionList:[],_newoption:function(r){r[e]=t,n[r.name]=r,n.optionList.push(r)}};return n[\"_\"+e]=t,n},c.smooth=function(t,e){if((e=Math.round(e)||0)<2)return t;var n,r,i,a,o=t.length,s=2*o,l=2*e-1,c=new Array(l),u=new Array(o);for(n=0;n<l;n++)c[n]=(1-Math.cos(Math.PI*(n+1)/e))/(2*e);for(n=0;n<o;n++){for(a=0,r=0;r<l;r++)(i=n+r+1-e)<-o?i-=s*Math.round(i/s):i>=s&&(i-=s*Math.floor(i/s)),i<0?i=-1-i:i>=o&&(i=s-1-i),a+=t[i]*c[r];u[n]=a}return u},c.syncOrAsync=function(t,e,n){var r;function i(){return c.syncOrAsync(t,e,n)}for(;t.length;)if((r=(0,t.splice(0,1)[0])(e))&&r.then)return r.then(i).then(void 0,c.promiseError);return n&&n(e)},c.stripTrailingSlash=function(t){return\"/\"===t.substr(-1)?t.substr(0,t.length-1):t},c.noneOrAll=function(t,e,n){if(t){var r,i=!1,a=!0;for(r=0;r<n.length;r++)null!=t[n[r]]?i=!0:a=!1;if(i&&!a)for(r=0;r<n.length;r++)t[n[r]]=e[n[r]]}},c.mergeArray=function(t,e,n,r){var i=\"function\"==typeof r;if(c.isArrayOrTypedArray(t))for(var a=Math.min(t.length,e.length),o=0;o<a;o++){var s=t[o];e[o][n]=i?r(s):s}},c.mergeArrayCastPositive=function(t,e,n){return c.mergeArray(t,e,n,(function(t){var e=+t;return isFinite(e)&&e>0?e:0}))},c.fillArray=function(t,e,n,r){if(r=r||c.identity,c.isArrayOrTypedArray(t))for(var i=0;i<e.length;i++)e[i][n]=r(t[i])},c.castOption=function(t,e,n,r){r=r||c.identity;var i=c.nestedProperty(t,n).get();return c.isArrayOrTypedArray(i)?Array.isArray(e)&&c.isArrayOrTypedArray(i[e[0]])?r(i[e[0]][e[1]]):r(i[e]):i},c.extractOption=function(t,e,n,r){if(n in t)return t[n];var i=c.nestedProperty(e,r).get();return Array.isArray(i)?void 0:i},c.tagSelected=function(t,e,n){var r,i,a=e.selectedpoints,o=e._indexToPoints;o&&(r=T(o));for(var s=0;s<a.length;s++){var l=a[s];if(c.isIndex(l)||c.isArrayOrTypedArray(l)&&c.isIndex(l[0])&&c.isIndex(l[1])){var u=r?r[l]:l,h=n?n[u]:u;void 0!==(i=h)&&i<t.length&&(t[h].selected=1)}}},c.selIndices2selPoints=function(t){var e=t.selectedpoints,n=t._indexToPoints;if(n){for(var r=T(n),i=[],a=0;a<e.length;a++){var o=e[a];if(c.isIndex(o)){var s=r[o];c.isIndex(s)&&i.push(s)}}return i}return e},c.getTargetArray=function(t,e){var n=e.target;if(\"string\"==typeof n&&n){var r=c.nestedProperty(t,n).get();return!!Array.isArray(r)&&r}return!!Array.isArray(n)&&n},c.minExtend=function(t,e){var n={};\"object\"!=typeof e&&(e={});var r,i,a,o=Object.keys(t);for(r=0;r<o.length;r++)a=t[i=o[r]],\"_\"!==i.charAt(0)&&\"function\"!=typeof a&&(n[i]=\"module\"===i?a:Array.isArray(a)?\"colorscale\"===i?a.slice():a.slice(0,3):c.isTypedArray(a)?a.subarray(0,3):a&&\"object\"==typeof a?c.minExtend(t[i],e[i]):a);for(o=Object.keys(e),r=0;r<o.length;r++)\"object\"==typeof(a=e[i=o[r]])&&i in n&&\"object\"==typeof n[i]||(n[i]=a);return n},c.titleCase=function(t){return t.charAt(0).toUpperCase()+t.substr(1)},c.containsAny=function(t,e){for(var n=0;n<e.length;n++)if(-1!==t.indexOf(e[n]))return!0;return!1},c.isIE=function(){return void 0!==window.navigator.msSaveBlob};var S=/MSIE [1-9]\\./;c.isIE9orBelow=function(){return c.isIE()&&S.test(window.navigator.userAgent)};var A=/Version\\/[\\d\\.]+.*Safari/;c.isSafari=function(){return A.test(window.navigator.userAgent)};var L=/iPad|iPhone|iPod/;c.isIOS=function(){return L.test(window.navigator.userAgent)},c.isD3Selection=function(t){return t&&\"function\"==typeof t.classed},c.ensureSingle=function(t,e,n,r){var i=t.select(e+(n?\".\"+n:\"\"));if(i.size())return i;var a=t.append(e);return n&&a.classed(n,!0),r&&a.call(r),a},c.ensureSingleById=function(t,e,n,r){var i=t.select(e+\"#\"+n);if(i.size())return i;var a=t.append(e).attr(\"id\",n);return r&&a.call(r),a},c.objectFromPath=function(t,e){for(var n,r=t.split(\".\"),i=n={},a=0;a<r.length;a++){var o=r[a],s=null,l=r[a].match(/(.*)\\[([0-9]+)\\]/);l?(s=l[2],(n=n[o=l[1]]=[])[s]=a===r.length-1?e:{},n=n[s]):(n[o]=a===r.length-1?e:{},n=n[o])}return i};var C=/^([^\\[\\.]+)\\.(.+)?/,E=/^([^\\.]+)\\[([0-9]+)\\](\\.)?(.+)?/;c.expandObjectPaths=function(t){var e,n,r,i,a,o,s;if(\"object\"==typeof t&&!Array.isArray(t))for(n in t)t.hasOwnProperty(n)&&((e=n.match(C))?(i=t[n],r=e[1],delete t[n],t[r]=c.extendDeepNoArrays(t[r]||{},c.objectFromPath(n,c.expandObjectPaths(i))[r])):(e=n.match(E))?(i=t[n],r=e[1],a=parseInt(e[2]),delete t[n],t[r]=t[r]||[],\".\"===e[3]?(s=e[4],o=t[r][a]=t[r][a]||{},c.extendDeepNoArrays(o,c.objectFromPath(s,c.expandObjectPaths(i)))):t[r][a]=c.expandObjectPaths(i)):t[n]=c.expandObjectPaths(t[n]));return t},c.numSeparate=function(t,e,n){if(n||(n=!1),\"string\"!=typeof e||0===e.length)throw new Error(\"Separator string required for formatting!\");\"number\"==typeof t&&(t=String(t));var r=/(\\d+)(\\d{3})/,i=e.charAt(0),a=e.charAt(1),o=t.split(\".\"),s=o[0],l=o.length>1?i+o[1]:\"\";if(a&&(o.length>1||s.length>4||n))for(;r.test(s);)s=s.replace(r,\"$1\"+a+\"$2\");return s+l},c.TEMPLATE_STRING_REGEX=/%{([^\\s%{}:]*)([:|\\|][^}]*)?}/g;var O=/^\\w*$/;c.templateString=function(t,e){var n={};return t.replace(c.TEMPLATE_STRING_REGEX,(function(t,r){var i;return O.test(r)?i=e[r]:(n[r]=n[r]||c.nestedProperty(e,r).get,i=n[r]()),c.isValidTextValue(i)?i:\"\"}))};var D={max:10,count:0,name:\"hovertemplate\"};c.hovertemplateString=function(){return R.apply(D,arguments)};var I={max:10,count:0,name:\"texttemplate\"};c.texttemplateString=function(){return R.apply(I,arguments)};var P=/^[:|\\|]/;function R(t,e,n){var a=this,o=arguments;e||(e={});var s={};return t.replace(c.TEMPLATE_STRING_REGEX,(function(t,l,u){var h,d,f,p;for(f=3;f<o.length;f++)if(h=o[f]){if(h.hasOwnProperty(l)){d=h[l];break}if(O.test(l)||(d=s[l]||c.nestedProperty(h,l).get())&&(s[l]=d),void 0!==d)break}if(void 0===d&&a)return a.count<a.max&&(c.warn(\"Variable '\"+l+\"' in \"+a.name+\" could not be found!\"),d=t),a.count===a.max&&c.warn(\"Too many \"+a.name+\" warnings - additional warnings will be suppressed\"),a.count++,t;if(u){if(\":\"===u[0]&&(d=(p=n?n.numberFormat:r.format)(u.replace(P,\"\"))(d)),\"|\"===u[0]){p=n?n.timeFormat:i;var m=c.dateTime2ms(d);d=c.formatDate(m,u.replace(P,\"\"),!1,p)}}else e.hasOwnProperty(l+\"Label\")&&(d=e[l+\"Label\"]);return d}))}c.subplotSort=function(t,e){for(var n=Math.min(t.length,e.length)+1,r=0,i=0,a=0;a<n;a++){var o=t.charCodeAt(a)||0,s=e.charCodeAt(a)||0,l=o>=48&&o<=57,c=s>=48&&s<=57;if(l&&(r=10*r+o-48),c&&(i=10*i+s-48),!l||!c){if(r!==i)return r-i;if(o!==s)return o-s}}return i-r};var z=2e9;c.seedPseudoRandom=function(){z=2e9},c.pseudoRandom=function(){var t=z;return z=(69069*z+1)%4294967296,Math.abs(z-t)<429496729?c.pseudoRandom():z/4294967296},c.fillText=function(t,e,n){var r=Array.isArray(n)?function(t){n.push(t)}:function(t){n.text=t},i=c.extractOption(t,e,\"htx\",\"hovertext\");if(c.isValidTextValue(i))return r(i);var a=c.extractOption(t,e,\"tx\",\"text\");return c.isValidTextValue(a)?r(a):void 0},c.isValidTextValue=function(t){return t||0===t},c.formatPercent=function(t,e){e=e||0;for(var n=(Math.round(100*t*Math.pow(10,e))*Math.pow(.1,e)).toFixed(e)+\"%\",r=0;r<e;r++)-1!==n.indexOf(\".\")&&(n=(n=n.replace(\"0%\",\"%\")).replace(\".%\",\"%\"));return n},c.isHidden=function(t){var e=window.getComputedStyle(t).display;return!e||\"none\"===e},c.strTranslate=function(t,e){return t||e?\"translate(\"+t+\",\"+e+\")\":\"\"},c.strRotate=function(t){return t?\"rotate(\"+t+\")\":\"\"},c.strScale=function(t){return 1!==t?\"scale(\"+t+\")\":\"\"},c.getTextTransform=function(t){var e=t.noCenter,n=t.textX,r=t.textY,i=t.rotate,a=t.scale;return a?a>1&&(a=1):a=0,c.strTranslate(t.targetX-a*(n+(t.anchorX||0)),t.targetY-a*(r+(t.anchorY||0)))+c.strScale(a)+(i?\"rotate(\"+i+(e?\"\":\" \"+n+\" \"+r)+\")\":\"\")},c.ensureUniformFontSize=function(t,e){var n=c.extendFlat({},e);return n.size=Math.max(e.size,t._fullLayout.uniformtext.minsize||0),n},c.join2=function(t,e,n){var r=t.length;return r>1?t.slice(0,-1).join(e)+n+t[r-1]:t.join(e)}},{\"../constants/numerical\":753,\"./anchor_utils\":758,\"./angles\":759,\"./array\":760,\"./clean_number\":761,\"./clear_responsive\":763,\"./coerce\":764,\"./dates\":765,\"./dom\":766,\"./extend\":768,\"./filter_unique\":769,\"./filter_visible\":770,\"./geometry2d\":773,\"./identity\":776,\"./increment\":777,\"./is_plain_object\":779,\"./keyed_container\":780,\"./localize\":781,\"./loggers\":782,\"./make_trace_groups\":783,\"./matrix\":784,\"./mod\":785,\"./nested_property\":786,\"./noop\":787,\"./notifier\":788,\"./preserve_drawing_buffer\":792,\"./push_unique\":793,\"./regex\":795,\"./relative_attr\":796,\"./relink_private\":797,\"./search\":798,\"./stats\":801,\"./throttle\":804,\"./to_log_range\":805,d3:169,\"d3-time-format\":166,\"fast-isnumeric\":241}],779:[function(t,e,n){\"use strict\";e.exports=function(t){return window&&window.process&&window.process.versions?\"[object Object]\"===Object.prototype.toString.call(t):\"[object Object]\"===Object.prototype.toString.call(t)&&Object.getPrototypeOf(t)===Object.prototype}},{}],780:[function(t,e,n){\"use strict\";var r=t(\"./nested_property\"),i=/^\\w*$/;e.exports=function(t,e,n,a){var o,s,l;n=n||\"name\",a=a||\"value\";var c={};e&&e.length?(l=r(t,e),s=l.get()):s=t,e=e||\"\";var u={};if(s)for(o=0;o<s.length;o++)u[s[o][n]]=o;var h=i.test(a),d={set:function(t,e){var i=null===e?4:0;if(!s){if(!l||4===i)return;l.set(s=[])}var o=u[t];if(void 0===o){if(4===i)return;i|=3,u[t]=o=s.length}else e!==(h?s[o][a]:r(s[o],a).get())&&(i|=2);var f=s[o]=s[o]||{};return f[n]=t,h?f[a]=e:r(f,a).set(e),null!==e&&(i&=-5),c[o]=c[o]|i,d},get:function(t){if(s){var e=u[t];return void 0===e?void 0:h?s[e][a]:r(s[e],a).get()}},rename:function(t,e){var r=u[t];return void 0===r||(c[r]=1|c[r],u[e]=r,delete u[t],s[r][n]=e),d},remove:function(t){var e=u[t];if(void 0===e)return d;var i=s[e];if(Object.keys(i).length>2)return c[e]=2|c[e],d.set(t,null);if(h){for(o=e;o<s.length;o++)c[o]=3|c[o];for(o=e;o<s.length;o++)u[s[o][n]]--;s.splice(e,1),delete u[t]}else r(i,a).set(null),c[e]=6|c[e];return d},constructUpdate:function(){for(var t,i,o={},l=Object.keys(c),u=0;u<l.length;u++)t=e+\"[\"+(i=l[u])+\"]\",s[i]?(1&c[i]&&(o[t+\".\"+n]=s[i][n]),2&c[i]&&(o[t+\".\"+a]=h?4&c[i]?null:s[i][a]:4&c[i]?null:r(s[i],a).get())):o[t]=null;return o}};return d}},{\"./nested_property\":786}],781:[function(t,e,n){\"use strict\";var r=t(\"../registry\");e.exports=function(t,e){for(var n=t._context.locale,i=0;i<2;i++){for(var a=t._context.locales,o=0;o<2;o++){var s=(a[n]||{}).dictionary;if(s){var l=s[e];if(l)return l}a=r.localeRegistry}var c=n.split(\"-\")[0];if(c===n)break;n=c}return e}},{\"../registry\":911}],782:[function(t,e,n){\"use strict\";var r=t(\"../plot_api/plot_config\").dfltConfig,i=t(\"./notifier\"),a=e.exports={};function o(t,e){if(t&&t.apply)try{return void t.apply(console,e)}catch(r){}for(var n=0;n<e.length;n++)try{t(e[n])}catch(r){console.log(e[n])}}a.log=function(){var t;if(r.logging>1){var e=[\"LOG:\"];for(t=0;t<arguments.length;t++)e.push(arguments[t]);o(console.trace||console.log,e)}if(r.notifyOnLogging>1){var n=[];for(t=0;t<arguments.length;t++)n.push(arguments[t]);i(n.join(\"<br>\"),\"long\")}},a.warn=function(){var t;if(r.logging>0){var e=[\"WARN:\"];for(t=0;t<arguments.length;t++)e.push(arguments[t]);o(console.trace||console.log,e)}if(r.notifyOnLogging>0){var n=[];for(t=0;t<arguments.length;t++)n.push(arguments[t]);i(n.join(\"<br>\"),\"stick\")}},a.error=function(){var t;if(r.logging>0){var e=[\"ERROR:\"];for(t=0;t<arguments.length;t++)e.push(arguments[t]);o(console.error,e)}if(r.notifyOnLogging>0){var n=[];for(t=0;t<arguments.length;t++)n.push(arguments[t]);i(n.join(\"<br>\"),\"stick\")}}},{\"../plot_api/plot_config\":815,\"./notifier\":788}],783:[function(t,e,n){\"use strict\";var r=t(\"d3\");e.exports=function(t,e,n){var i=t.selectAll(\"g.\"+n.replace(/\\s/g,\".\")).data(e,(function(t){return t[0].trace.uid}));i.exit().remove(),i.enter().append(\"g\").attr(\"class\",n),i.order();var a=t.classed(\"rangeplot\")?\"nodeRangePlot3\":\"node3\";return i.each((function(t){t[0][a]=r.select(this)})),i}},{d3:169}],784:[function(t,e,n){\"use strict\";var r=t(\"gl-mat4\");n.init2dArray=function(t,e){for(var n=new Array(t),r=0;r<t;r++)n[r]=new Array(e);return n},n.transposeRagged=function(t){var e,n,r=0,i=t.length;for(e=0;e<i;e++)r=Math.max(r,t[e].length);var a=new Array(r);for(e=0;e<r;e++)for(a[e]=new Array(i),n=0;n<i;n++)a[e][n]=t[n][e];return a},n.dot=function(t,e){if(!t.length||!e.length||t.length!==e.length)return null;var r,i,a=t.length;if(t[0].length)for(r=new Array(a),i=0;i<a;i++)r[i]=n.dot(t[i],e);else if(e[0].length){var o=n.transposeRagged(e);for(r=new Array(o.length),i=0;i<o.length;i++)r[i]=n.dot(t,o[i])}else for(r=0,i=0;i<a;i++)r+=t[i]*e[i];return r},n.translationMatrix=function(t,e){return[[1,0,t],[0,1,e],[0,0,1]]},n.rotationMatrix=function(t){var e=t*Math.PI/180;return[[Math.cos(e),-Math.sin(e),0],[Math.sin(e),Math.cos(e),0],[0,0,1]]},n.rotationXYMatrix=function(t,e,r){return n.dot(n.dot(n.translationMatrix(e,r),n.rotationMatrix(t)),n.translationMatrix(-e,-r))},n.apply3DTransform=function(t){return function(){var e=arguments,r=1===arguments.length?e[0]:[e[0],e[1],e[2]||0];return n.dot(t,[r[0],r[1],r[2],1]).slice(0,3)}},n.apply2DTransform=function(t){return function(){var e=arguments;3===e.length&&(e=e[0]);var r=1===arguments.length?e[0]:[e[0],e[1]];return n.dot(t,[r[0],r[1],1]).slice(0,2)}},n.apply2DTransform2=function(t){var e=n.apply2DTransform(t);return function(t){return e(t.slice(0,2)).concat(e(t.slice(2,4)))}},n.convertCssMatrix=function(t){if(t){var e=t.length;if(16===e)return t;if(6===e)return[t[0],t[1],0,0,t[2],t[3],0,0,0,0,1,0,t[4],t[5],0,1]}return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]},n.inverseTransformMatrix=function(t){var e=[];return r.invert(e,t),[[e[0],e[1],e[2],e[3]],[e[4],e[5],e[6],e[7]],[e[8],e[9],e[10],e[11]],[e[12],e[13],e[14],e[15]]]}},{\"gl-mat4\":292}],785:[function(t,e,n){\"use strict\";e.exports={mod:function(t,e){var n=t%e;return n<0?n+e:n},modHalf:function(t,e){return Math.abs(t)>e/2?t-Math.round(t/e)*e:t}}},{}],786:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"./array\").isArrayOrTypedArray;function a(t,e){return function(){var n,r,o,s,l,c=t;for(s=0;s<e.length-1;s++){if(-1===(n=e[s])){for(r=!0,o=[],l=0;l<c.length;l++)o[l]=a(c[l],e.slice(s+1))(),o[l]!==o[0]&&(r=!1);return r?o[0]:o}if(\"number\"==typeof n&&!i(c))return;if(\"object\"!=typeof(c=c[n])||null===c)return}if(\"object\"==typeof c&&null!==c&&null!==(o=c[e[s]]))return o}}e.exports=function(t,e){if(r(e))e=String(e);else if(\"string\"!=typeof e||\"[-1]\"===e.substr(e.length-4))throw\"bad property string\";for(var n,i,o,s=0,c=e.split(\".\");s<c.length;){if(n=String(c[s]).match(/^([^\\[\\]]*)((\\[\\-?[0-9]*\\])+)$/)){if(n[1])c[s]=n[1];else{if(0!==s)throw\"bad property string\";c.splice(0,1)}for(i=n[2].substr(1,n[2].length-2).split(\"][\"),o=0;o<i.length;o++)s++,c.splice(s,0,Number(i[o]))}s++}return\"object\"!=typeof t?function(t,e,n){return{set:function(){throw\"bad container\"},get:function(){},astr:e,parts:n,obj:t}}(t,e,c):{set:l(t,c,e),get:a(t,c),astr:e,parts:c,obj:t}};var o=/(^|\\.)args\\[/;function s(t,e){return void 0===t||null===t&&!e.match(o)}function l(t,e,n){return function(r){var a,o,l=t,d=\"\",f=[[t,d]],p=s(r,n);for(o=0;o<e.length-1;o++){if(\"number\"==typeof(a=e[o])&&!i(l))throw\"array index but container is not an array\";if(-1===a){if(p=!u(l,e.slice(o+1),r,n))break;return}if(!h(l,a,e[o+1],p))break;if(\"object\"!=typeof(l=l[a])||null===l)throw\"container is not an object\";d=c(d,a),f.push([l,d])}if(p){if(o===e.length-1&&(delete l[e[o]],Array.isArray(l)&&+e[o]==l.length-1))for(;l.length&&void 0===l[l.length-1];)l.pop()}else l[e[o]]=r}}function c(t,e){var n=e;return r(e)?n=\"[\"+e+\"]\":t&&(n=\".\"+e),t+n}function u(t,e,n,r){var a,o=i(n),c=!0,u=n,d=r.replace(\"-1\",0),f=!o&&s(n,d),p=e[0];for(a=0;a<t.length;a++)d=r.replace(\"-1\",a),o&&(f=s(u=n[a%n.length],d)),f&&(c=!1),h(t,a,p,f)&&l(t[a],e,r.replace(\"-1\",a))(u);return c}function h(t,e,n,r){if(void 0===t[e]){if(r)return!1;t[e]=\"number\"==typeof n?[]:{}}return!0}},{\"./array\":760,\"fast-isnumeric\":241}],787:[function(t,e,n){\"use strict\";e.exports=function(){}},{}],788:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"fast-isnumeric\"),a=[];e.exports=function(t,e){if(-1===a.indexOf(t)){a.push(t);var n=1e3;i(e)?n=e:\"long\"===e&&(n=3e3);var o=r.select(\"body\").selectAll(\".plotly-notifier\").data([0]);o.enter().append(\"div\").classed(\"plotly-notifier\",!0),o.selectAll(\".notifier-note\").data(a).enter().append(\"div\").classed(\"notifier-note\",!0).style(\"opacity\",0).each((function(t){var i=r.select(this);i.append(\"button\").classed(\"notifier-close\",!0).html(\"&times;\").on(\"click\",(function(){i.transition().call(s)}));for(var a=i.append(\"p\"),o=t.split(/<br\\s*\\/?>/g),l=0;l<o.length;l++)l&&a.append(\"br\"),a.append(\"span\").text(o[l]);\"stick\"===e?i.transition().duration(350).style(\"opacity\",1):i.transition().duration(700).style(\"opacity\",1).transition().delay(n).call(s)}))}function s(t){t.duration(700).style(\"opacity\",0).each(\"end\",(function(t){var e=a.indexOf(t);-1!==e&&a.splice(e,1),r.select(this).remove()}))}}},{d3:169,\"fast-isnumeric\":241}],789:[function(t,e,n){\"use strict\";var r=t(\"./setcursor\"),i=\"data-savedcursor\";e.exports=function(t,e){var n=t.attr(i);if(e){if(!n){for(var a=(t.attr(\"class\")||\"\").split(\" \"),o=0;o<a.length;o++){var s=a[o];0===s.indexOf(\"cursor-\")&&t.attr(i,s.substr(7)).classed(s,!1)}t.attr(i)||t.attr(i,\"!!\")}r(t,e)}else n&&(t.attr(i,null),\"!!\"===n?r(t):r(t,n))}},{\"./setcursor\":799}],790:[function(t,e,n){\"use strict\";var r=t(\"./matrix\").dot,i=t(\"../constants/numerical\").BADNUM,a=e.exports={};a.tester=function(t){var e,n=t.slice(),r=n[0][0],a=r,o=n[0][1],s=o;for(n.push(n[0]),e=1;e<n.length;e++)r=Math.min(r,n[e][0]),a=Math.max(a,n[e][0]),o=Math.min(o,n[e][1]),s=Math.max(s,n[e][1]);var l,c=!1;5===n.length&&(n[0][0]===n[1][0]?n[2][0]===n[3][0]&&n[0][1]===n[3][1]&&n[1][1]===n[2][1]&&(c=!0,l=function(t){return t[0]===n[0][0]}):n[0][1]===n[1][1]&&n[2][1]===n[3][1]&&n[0][0]===n[3][0]&&n[1][0]===n[2][0]&&(c=!0,l=function(t){return t[1]===n[0][1]}));var u=!0,h=n[0];for(e=1;e<n.length;e++)if(h[0]!==n[e][0]||h[1]!==n[e][1]){u=!1;break}return{xmin:r,xmax:a,ymin:o,ymax:s,pts:n,contains:c?function(t,e){var n=t[0],c=t[1];return!(n===i||n<r||n>a||c===i||c<o||c>s||e&&l(t))}:function(t,e){var l=t[0],c=t[1];if(l===i||l<r||l>a||c===i||c<o||c>s)return!1;var u,h,d,f,p,m=n.length,g=n[0][0],y=n[0][1],v=0;for(u=1;u<m;u++)if(h=g,d=y,g=n[u][0],y=n[u][1],!(l<(f=Math.min(h,g))||l>Math.max(h,g)||c>Math.max(d,y)))if(c<Math.min(d,y))l!==f&&v++;else{if(c===(p=g===h?c:d+(l-h)*(y-d)/(g-h)))return 1!==u||!e;c<=p&&l!==f&&v++}return v%2==1},isRect:c,degenerate:u}},a.isSegmentBent=function(t,e,n,i){var a,o,s,l=t[e],c=[t[n][0]-l[0],t[n][1]-l[1]],u=r(c,c),h=Math.sqrt(u),d=[-c[1]/h,c[0]/h];for(a=e+1;a<n;a++)if((s=r(o=[t[a][0]-l[0],t[a][1]-l[1]],c))<0||s>u||Math.abs(r(o,d))>i)return!0;return!1},a.filter=function(t,e){var n=[t[0]],r=0,i=0;function o(o){t.push(o);var s=n.length,l=r;n.splice(i+1);for(var c=l+1;c<t.length;c++)(c===t.length-1||a.isSegmentBent(t,l,c+1,e))&&(n.push(t[c]),n.length<s-2&&(r=c,i=n.length-1),l=c)}return t.length>1&&o(t.pop()),{addPt:o,raw:t,filtered:n}}},{\"../constants/numerical\":753,\"./matrix\":784}],791:[function(t,e,n){(function(n){(function(){\"use strict\";var r=t(\"./show_no_webgl_msg\"),i=t(\"regl\");e.exports=function(t,e){var a=t._fullLayout,o=!0;return a._glcanvas.each((function(r){if(!r.regl&&(!r.pick||a._has(\"parcoords\"))){try{r.regl=i({canvas:this,attributes:{antialias:!r.pick,preserveDrawingBuffer:!0},pixelRatio:t._context.plotGlPixelRatio||n.devicePixelRatio,extensions:e||[]})}catch(s){o=!1}r.regl||(o=!1),o&&this.addEventListener(\"webglcontextlost\",(function(e){t&&t.emit&&t.emit(\"plotly_webglcontextlost\",{event:e,layer:r.key})}),!1)}})),o||r({container:a._glcontainer.node()}),o}}).call(this)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{\"./show_no_webgl_msg\":800,regl:540}],792:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"is-mobile\");e.exports=function(t){var e;if(\"string\"!=typeof(e=t&&t.hasOwnProperty(\"userAgent\")?t.userAgent:function(){var t;return\"undefined\"!=typeof navigator&&(t=navigator.userAgent),t&&t.headers&&\"string\"==typeof t.headers[\"user-agent\"]&&(t=t.headers[\"user-agent\"]),t}()))return!0;var n=i({ua:{headers:{\"user-agent\":e}},tablet:!0,featureDetect:!1});if(!n)for(var a=e.split(\" \"),o=1;o<a.length;o++)if(-1!==a[o].indexOf(\"Safari\"))for(var s=o-1;s>-1;s--){var l=a[s];if(\"Version/\"===l.substr(0,8)){var c=l.substr(8).split(\".\")[0];if(r(c)&&(c=+c),c>=13)return!0}}return n}},{\"fast-isnumeric\":241,\"is-mobile\":467}],793:[function(t,e,n){\"use strict\";e.exports=function(t,e){if(e instanceof RegExp){for(var n=e.toString(),r=0;r<t.length;r++)if(t[r]instanceof RegExp&&t[r].toString()===n)return t;t.push(e)}else!e&&0!==e||-1!==t.indexOf(e)||t.push(e);return t}},{}],794:[function(t,e,n){\"use strict\";var r=t(\"../lib\"),i=t(\"../plot_api/plot_config\").dfltConfig,a={add:function(t,e,n,r,a){var o,s;t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},s=t.undoQueue.index,t.autoplay?t.undoQueue.inSequence||(t.autoplay=!1):(!t.undoQueue.sequence||t.undoQueue.beginSequence?(t.undoQueue.queue.splice(s,t.undoQueue.queue.length-s,o={undo:{calls:[],args:[]},redo:{calls:[],args:[]}}),t.undoQueue.index+=1):o=t.undoQueue.queue[s-1],t.undoQueue.beginSequence=!1,o&&(o.undo.calls.unshift(e),o.undo.args.unshift(n),o.redo.calls.push(r),o.redo.args.push(a)),t.undoQueue.queue.length>i.queueLength&&(t.undoQueue.queue.shift(),t.undoQueue.index--))},startSequence:function(t){t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},t.undoQueue.sequence=!0,t.undoQueue.beginSequence=!0},stopSequence:function(t){t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},t.undoQueue.sequence=!1,t.undoQueue.beginSequence=!1},undo:function(t){var e,n;if(t.framework&&t.framework.isPolar)t.framework.undo();else if(!(void 0===t.undoQueue||isNaN(t.undoQueue.index)||t.undoQueue.index<=0)){for(t.undoQueue.index--,e=t.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence=!0,n=0;n<e.undo.calls.length;n++)a.plotDo(t,e.undo.calls[n],e.undo.args[n]);t.undoQueue.inSequence=!1,t.autoplay=!1}},redo:function(t){var e,n;if(t.framework&&t.framework.isPolar)t.framework.redo();else if(!(void 0===t.undoQueue||isNaN(t.undoQueue.index)||t.undoQueue.index>=t.undoQueue.queue.length)){for(e=t.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence=!0,n=0;n<e.redo.calls.length;n++)a.plotDo(t,e.redo.calls[n],e.redo.args[n]);t.undoQueue.inSequence=!1,t.autoplay=!1,t.undoQueue.index++}},plotDo:function(t,e,n){t.autoplay=!0,n=function(t,e){for(var n,i=[],a=0;a<e.length;a++)i[a]=(n=e[a])===t?n:\"object\"==typeof n?Array.isArray(n)?r.extendDeep([],n):r.extendDeepAll({},n):n;return i}(t,n),e.apply(null,n)}};e.exports=a},{\"../lib\":778,\"../plot_api/plot_config\":815}],795:[function(t,e,n){\"use strict\";n.counter=function(t,e,n,r){var i=(e||\"\")+(n?\"\":\"$\"),a=!1===r?\"\":\"^\";return\"xy\"===t?new RegExp(a+\"x([2-9]|[1-9][0-9]+)?y([2-9]|[1-9][0-9]+)?\"+i):new RegExp(a+t+\"([2-9]|[1-9][0-9]+)?\"+i)}},{}],796:[function(t,e,n){\"use strict\";var r=/^(.*)(\\.[^\\.\\[\\]]+|\\[\\d\\])$/,i=/^[^\\.\\[\\]]+$/;e.exports=function(t,e){for(;e;){var n=t.match(r);if(n)t=n[1];else{if(!t.match(i))throw new Error(\"bad relativeAttr call:\"+[t,e]);t=\"\"}if(\"^\"!==e.charAt(0))break;e=e.slice(1)}return t&&\"[\"!==e.charAt(0)?t+\".\"+e:t+e}},{}],797:[function(t,e,n){\"use strict\";var r=t(\"./array\").isArrayOrTypedArray,i=t(\"./is_plain_object\");e.exports=function t(e,n){for(var a in n){var o=n[a],s=e[a];if(s!==o)if(\"_\"===a.charAt(0)||\"function\"==typeof o){if(a in e)continue;e[a]=o}else if(r(o)&&r(s)&&i(o[0])){if(\"customdata\"===a||\"ids\"===a)continue;for(var l=Math.min(o.length,s.length),c=0;c<l;c++)s[c]!==o[c]&&i(o[c])&&i(s[c])&&t(s[c],o[c])}else i(o)&&i(s)&&(t(s,o),Object.keys(s).length||delete e[a])}}},{\"./array\":760,\"./is_plain_object\":779}],798:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"./loggers\"),a=t(\"./identity\"),o=t(\"../constants/numerical\").BADNUM,s=1e-9;function l(t,e){return t<e}function c(t,e){return t<=e}function u(t,e){return t>e}function h(t,e){return t>=e}n.findBin=function(t,e,n){if(r(e.start))return n?Math.ceil((t-e.start)/e.size-s)-1:Math.floor((t-e.start)/e.size+s);var a,o,d=0,f=e.length,p=0,m=f>1?(e[f-1]-e[0])/(f-1):1;for(o=m>=0?n?l:c:n?h:u,t+=m*s*(n?-1:1)*(m>=0?1:-1);d<f&&p++<100;)o(e[a=Math.floor((d+f)/2)],t)?d=a+1:f=a;return p>90&&i.log(\"Long binary search...\"),d-1},n.sorterAsc=function(t,e){return t-e},n.sorterDes=function(t,e){return e-t},n.distinctVals=function(t,e){var r,i=(e||{}).unitMinDiff,a=t.slice();for(a.sort(n.sorterAsc),r=a.length-1;r>-1&&a[r]===o;r--);var s=1;i||(s=a[r]-a[0]||1);for(var l,c=s/(r||1)/1e4,u=[],h=0;h<=r;h++){var d=a[h],f=d-l;void 0===l?(u.push(d),l=d):f>c&&(s=Math.min(s,f),u.push(d),l=d)}return{vals:u,minDiff:s}},n.roundUp=function(t,e,n){for(var r,i=0,a=e.length-1,o=0,s=n?0:1,l=n?1:0,c=n?Math.ceil:Math.floor;i<a&&o++<100;)e[r=c((i+a)/2)]<=t?i=r+s:a=r-l;return e[i]},n.sort=function(t,e){for(var n=0,r=0,i=1;i<t.length;i++){var a=e(t[i],t[i-1]);if(a<0?n=1:a>0&&(r=1),n&&r)return t.sort(e)}return r?t:t.reverse()},n.findIndexOfMin=function(t,e){e=e||a;for(var n,r=1/0,i=0;i<t.length;i++){var o=e(t[i]);o<r&&(r=o,n=i)}return n}},{\"../constants/numerical\":753,\"./identity\":776,\"./loggers\":782,\"fast-isnumeric\":241}],799:[function(t,e,n){\"use strict\";e.exports=function(t,e){(t.attr(\"class\")||\"\").split(\" \").forEach((function(e){0===e.indexOf(\"cursor-\")&&t.classed(e,!1)})),e&&t.classed(\"cursor-\"+e,!0)}},{}],800:[function(t,e,n){\"use strict\";var r=t(\"../components/color\"),i=function(){};e.exports=function(t){for(var e in t)\"function\"==typeof t[e]&&(t[e]=i);t.destroy=function(){t.container.parentNode.removeChild(t.container)};var n=document.createElement(\"div\");n.className=\"no-webgl\",n.style.cursor=\"pointer\",n.style.fontSize=\"24px\",n.style.color=r.defaults[0],n.style.position=\"absolute\",n.style.left=n.style.top=\"0px\",n.style.width=n.style.height=\"100%\",n.style[\"background-color\"]=r.lightLine,n.style[\"z-index\"]=30;var a=document.createElement(\"p\");return a.textContent=\"WebGL is not supported by your browser - visit https://get.webgl.org for more info\",a.style.position=\"relative\",a.style.top=\"50%\",a.style.left=\"50%\",a.style.height=\"30%\",a.style.width=\"50%\",a.style.margin=\"-15% 0 0 -25%\",n.appendChild(a),t.container.appendChild(n),t.container.style.background=\"#FFFFFF\",t.container.onclick=function(){window.open(\"https://get.webgl.org\")},!1}},{\"../components/color\":643}],801:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"./array\").isArrayOrTypedArray;n.aggNums=function(t,e,a,o){var s,l;if((!o||o>a.length)&&(o=a.length),r(e)||(e=!1),i(a[0])){for(l=new Array(o),s=0;s<o;s++)l[s]=n.aggNums(t,e,a[s]);a=l}for(s=0;s<o;s++)r(e)?r(a[s])&&(e=t(+e,+a[s])):e=a[s];return e},n.len=function(t){return n.aggNums((function(t){return t+1}),0,t)},n.mean=function(t,e){return e||(e=n.len(t)),n.aggNums((function(t,e){return t+e}),0,t)/e},n.midRange=function(t){if(void 0!==t&&0!==t.length)return(n.aggNums(Math.max,null,t)+n.aggNums(Math.min,null,t))/2},n.variance=function(t,e,i){return e||(e=n.len(t)),r(i)||(i=n.mean(t,e)),n.aggNums((function(t,e){return t+Math.pow(e-i,2)}),0,t)/e},n.stdev=function(t,e,r){return Math.sqrt(n.variance(t,e,r))},n.median=function(t){var e=t.slice().sort();return n.interp(e,.5)},n.interp=function(t,e){if(!r(e))throw\"n should be a finite number\";if((e=e*t.length-.5)<0)return t[0];if(e>t.length-1)return t[t.length-1];var n=e%1;return n*t[Math.ceil(e)]+(1-n)*t[Math.floor(e)]}},{\"./array\":760,\"fast-isnumeric\":241}],802:[function(t,e,n){\"use strict\";var r=t(\"color-normalize\");e.exports=function(t){return t?r(t):[0,0,0,1]}},{\"color-normalize\":125}],803:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../lib\"),a=i.strTranslate,o=t(\"../constants/xmlns_namespaces\"),s=t(\"../constants/alignment\").LINE_SPACING;function l(t,e){return t.node().getBoundingClientRect()[e]}var c=/([^$]*)([$]+[^$]*[$]+)([^$]*)/;n.convertToTspans=function(t,e,A){var L=t.text(),E=!t.attr(\"data-notex\")&&\"undefined\"!=typeof MathJax&&L.match(c),O=r.select(t.node().parentNode);if(!O.empty()){var D=t.attr(\"class\")?t.attr(\"class\").split(\" \")[0]:\"text\";return O.selectAll(\"svg.\"+(D+=\"-math\")).remove(),O.selectAll(\"g.\"+D+\"-group\").remove(),t.style(\"display\",null).attr({\"data-unformatted\":L,\"data-math\":\"N\"}),E?(e&&e._promises||[]).push(new Promise((function(e){t.style(\"display\",\"none\");var n=parseInt(t.node().style.fontSize,10);!function(t,e,n){var a,o,s,l;MathJax.Hub.Queue((function(){return o=i.extendDeepAll({},MathJax.Hub.config),s=MathJax.Hub.processSectionDelay,void 0!==MathJax.Hub.processSectionDelay&&(MathJax.Hub.processSectionDelay=0),MathJax.Hub.Config({messageStyle:\"none\",tex2jax:{inlineMath:[[\"$\",\"$\"],[\"\\\\(\",\"\\\\)\"]]},displayAlign:\"left\"})}),(function(){if(\"SVG\"!==(a=MathJax.Hub.config.menuSettings.renderer))return MathJax.Hub.setRenderer(\"SVG\")}),(function(){var n=\"math-output-\"+i.randstr({},64);return l=r.select(\"body\").append(\"div\").attr({id:n}).style({visibility:\"hidden\",position:\"absolute\"}).style({\"font-size\":e.fontSize+\"px\"}).text(t.replace(u,\"\\\\lt \").replace(h,\"\\\\gt \")),MathJax.Hub.Typeset(l.node())}),(function(){var e=r.select(\"body\").select(\"#MathJax_SVG_glyphs\");if(l.select(\".MathJax_SVG\").empty()||!l.select(\"svg\").node())i.log(\"There was an error in the tex syntax.\",t),n();else{var o=l.select(\"svg\").node().getBoundingClientRect();n(l.select(\".MathJax_SVG\"),e,o)}if(l.remove(),\"SVG\"!==a)return MathJax.Hub.setRenderer(a)}),(function(){return void 0!==s&&(MathJax.Hub.processSectionDelay=s),MathJax.Hub.Config(o)}))}(E[2],{fontSize:n},(function(r,i,o){O.selectAll(\"svg.\"+D).remove(),O.selectAll(\"g.\"+D+\"-group\").remove();var s=r&&r.select(\"svg\");if(!s||!s.node())return I(),void e();var c=O.append(\"g\").classed(D+\"-group\",!0).attr({\"pointer-events\":\"none\",\"data-unformatted\":L,\"data-math\":\"Y\"});c.node().appendChild(s.node()),i&&i.node()&&s.node().insertBefore(i.node().cloneNode(!0),s.node().firstChild),s.attr({class:D,height:o.height,preserveAspectRatio:\"xMinYMin meet\"}).style({overflow:\"visible\",\"pointer-events\":\"none\"});var u=t.node().style.fill||\"black\",h=s.select(\"g\");h.attr({fill:u,stroke:u});var d=l(h,\"width\"),f=l(h,\"height\"),p=+t.attr(\"x\")-d*{start:0,middle:.5,end:1}[t.attr(\"text-anchor\")||\"start\"],m=-(n||l(t,\"height\"))/4;\"y\"===D[0]?(c.attr({transform:\"rotate(\"+[-90,+t.attr(\"x\"),+t.attr(\"y\")]+\")\"+a(-d/2,m-f/2)}),s.attr({x:+t.attr(\"x\"),y:+t.attr(\"y\")})):\"l\"===D[0]?s.attr({x:t.attr(\"x\"),y:m-f/2}):\"a\"===D[0]&&0!==D.indexOf(\"atitle\")?s.attr({x:0,y:m}):s.attr({x:p,y:+t.attr(\"y\")+m-f/2}),A&&A.call(t,c),e(c)}))}))):I(),t}function I(){O.empty()||(D=t.attr(\"class\")+\"-math\",O.select(\"svg.\"+D).remove()),t.text(\"\").style(\"white-space\",\"pre\"),function(t,e){e=e.replace(y,\" \");var n,a=!1,l=[],c=-1;function u(){c++;var e=document.createElementNS(o.svg,\"tspan\");r.select(e).attr({class:\"line\",dy:c*s+\"em\"}),t.appendChild(e),n=e;var i=l;if(l=[{node:e}],i.length>1)for(var a=1;a<i.length;a++)h(i[a])}function h(t){var e,i=t.type,a={};if(\"a\"===i){e=\"a\";var s=t.target,c=t.href,u=t.popup;c&&(a={\"xlink:xlink:show\":\"_blank\"===s||\"_\"!==s.charAt(0)?\"new\":\"replace\",target:s,\"xlink:xlink:href\":c},u&&(a.onclick='window.open(this.href.baseVal,this.target.baseVal,\"'+u+'\");return false;'))}else e=\"tspan\";t.style&&(a.style=t.style);var h=document.createElementNS(o.svg,e);if(\"sup\"===i||\"sub\"===i){A(n,m),n.appendChild(h);var d=document.createElementNS(o.svg,\"tspan\");A(d,m),r.select(d).attr(\"dy\",p[i]),a.dy=f[i],n.appendChild(h),n.appendChild(d)}else n.appendChild(h);r.select(h).attr(a),n=t.node=h,l.push(t)}function A(t,e){t.appendChild(document.createTextNode(e))}function L(t){if(1!==l.length){var r=l.pop();t!==r.type&&i.log(\"Start tag <\"+r.type+\"> doesnt match end tag <\"+t+\">. Pretending it did match.\",e),n=l[l.length-1].node}else i.log(\"Ignoring unexpected end tag </\"+t+\">.\",e)}b.test(e)?u():(n=t,l=[{node:t}]);for(var E=e.split(v),O=0;O<E.length;O++){var D=E[O],I=D.match(_),P=I&&I[2].toLowerCase(),R=d[P];if(\"br\"===P)u();else if(void 0===R)A(n,C(D));else if(I[1])L(P);else{var z=I[4],j={type:P},F=T(z,x);if(F?(F=F.replace(S,\"$1 fill:\"),R&&(F+=\";\"+R)):R&&(F=R),F&&(j.style=F),\"a\"===P){a=!0;var N=T(z,w);if(N){var B=document.createElement(\"a\");B.href=N,-1!==g.indexOf(B.protocol)&&(j.href=encodeURI(decodeURI(N)),j.target=T(z,k)||\"_blank\",j.popup=T(z,M))}}h(j)}}return a}(t.node(),L)&&t.style(\"pointer-events\",\"all\"),n.positionText(t),A&&A.call(t)}};var u=/(<|&lt;|&#60;)/g,h=/(>|&gt;|&#62;)/g,d={sup:\"font-size:70%\",sub:\"font-size:70%\",b:\"font-weight:bold\",i:\"font-style:italic\",a:\"cursor:pointer\",span:\"\",em:\"font-style:italic;font-weight:bold\"},f={sub:\"0.3em\",sup:\"-0.6em\"},p={sub:\"-0.21em\",sup:\"0.42em\"},m=\"\\u200b\",g=[\"http:\",\"https:\",\"mailto:\",\"\",void 0,\":\"],y=n.NEWLINES=/(\\r\\n?|\\n)/g,v=/(<[^<>]*>)/,_=/<(\\/?)([^ >]*)(\\s+(.*))?>/i,b=/<br(\\s+.*)?>/i;n.BR_TAG_ALL=/<br(\\s+.*)?>/gi;var x=/(^|[\\s\"'])style\\s*=\\s*(\"([^\"]*);?\"|'([^']*);?')/i,w=/(^|[\\s\"'])href\\s*=\\s*(\"([^\"]*)\"|'([^']*)')/i,k=/(^|[\\s\"'])target\\s*=\\s*(\"([^\"\\s]*)\"|'([^'\\s]*)')/i,M=/(^|[\\s\"'])popup\\s*=\\s*(\"([\\w=,]*)\"|'([\\w=,]*)')/i;function T(t,e){if(!t)return null;var n=t.match(e),r=n&&(n[3]||n[4]);return r&&C(r)}var S=/(^|;)\\s*color:/;n.plainText=function(t,e){for(var n=void 0!==(e=e||{}).len&&-1!==e.len?e.len:1/0,r=void 0!==e.allowedTags?e.allowedTags:[\"br\"],i=\"...\".length,a=t.split(v),o=[],s=\"\",l=0,c=0;c<a.length;c++){var u=a[c],h=u.match(_),d=h&&h[2].toLowerCase();if(d)-1!==r.indexOf(d)&&(o.push(u),s=d);else{var f=u.length;if(l+f<n)o.push(u),l+=f;else if(l<n){var p=n-l;s&&(\"br\"!==s||p<=i||f<=i)&&o.pop(),o.push(n>i?u.substr(0,p-i)+\"...\":u.substr(0,p));break}s=\"\"}}return o.join(\"\")};var A={mu:\"\\u03bc\",amp:\"&\",lt:\"<\",gt:\">\",nbsp:\"\\xa0\",times:\"\\xd7\",plusmn:\"\\xb1\",deg:\"\\xb0\"},L=/&(#\\d+|#x[\\da-fA-F]+|[a-z]+);/g;function C(t){return t.replace(L,(function(t,e){return(\"#\"===e.charAt(0)?function(t){if(!(t>1114111)){var e=String.fromCodePoint;if(e)return e(t);var n=String.fromCharCode;return t<=65535?n(t):n(55232+(t>>10),t%1024+56320)}}(\"x\"===e.charAt(1)?parseInt(e.substr(2),16):parseInt(e.substr(1),10)):A[e])||t}))}function E(t,e,n){var r,a,o,s=n.horizontalAlign,l=n.verticalAlign||\"top\",c=t.node().getBoundingClientRect(),u=e.node().getBoundingClientRect();return a=\"bottom\"===l?function(){return c.bottom-r.height}:\"middle\"===l?function(){return c.top+(c.height-r.height)/2}:function(){return c.top},o=\"right\"===s?function(){return c.right-r.width}:\"center\"===s?function(){return c.left+(c.width-r.width)/2}:function(){return c.left},function(){r=this.node().getBoundingClientRect();var t=o()-u.left,e=a()-u.top,s=n.gd||{};if(n.gd){s._fullLayout._calcInverseTransform(s);var l=i.apply3DTransform(s._fullLayout._invTransform)(t,e);t=l[0],e=l[1]}return this.style({top:e+\"px\",left:t+\"px\",\"z-index\":1e3}),this}}n.convertEntities=C,n.sanitizeHTML=function(t){t=t.replace(y,\" \");for(var e=document.createElement(\"p\"),n=e,i=[],a=t.split(v),o=0;o<a.length;o++){var s=a[o],l=s.match(_),c=l&&l[2].toLowerCase();if(c in d)if(l[1])i.length&&(n=i.pop());else{var u=l[4],h=T(u,x),f=h?{style:h}:{};if(\"a\"===c){var p=T(u,w);if(p){var m=document.createElement(\"a\");if(m.href=p,-1!==g.indexOf(m.protocol)){f.href=encodeURI(decodeURI(p));var b=T(u,k);b&&(f.target=b)}}}var M=document.createElement(c);n.appendChild(M),r.select(M).attr(f),n=M,i.push(M)}else n.appendChild(document.createTextNode(C(s)))}return e.innerHTML},n.lineCount=function(t){return t.selectAll(\"tspan.line\").size()||1},n.positionText=function(t,e,n){return t.each((function(){var t=r.select(this);function i(e,n){return void 0===n?null===(n=t.attr(e))&&(t.attr(e,0),n=0):t.attr(e,n),n}var a=i(\"x\",e),o=i(\"y\",n);\"text\"===this.nodeName&&t.selectAll(\"tspan.line\").attr({x:a,y:o})}))},n.makeEditable=function(t,e){var n=e.gd,i=e.delegate,a=r.dispatch(\"edit\",\"input\",\"cancel\"),o=i||t;if(t.style({\"pointer-events\":i?\"none\":\"all\"}),1!==t.size())throw new Error(\"boo\");function s(){var i,s,c,u,h;i=r.select(n).select(\".svg-container\"),s=i.append(\"div\"),c=t.node().style,u=parseFloat(c.fontSize||12),void 0===(h=e.text)&&(h=t.attr(\"data-unformatted\")),s.classed(\"plugin-editable editable\",!0).style({position:\"absolute\",\"font-family\":c.fontFamily||\"Arial\",\"font-size\":u,color:e.fill||c.fill||\"black\",opacity:1,\"background-color\":e.background||\"transparent\",outline:\"#ffffff33 1px solid\",margin:[-u/8+1,0,0,-1].join(\"px \")+\"px\",padding:\"0\",\"box-sizing\":\"border-box\"}).attr({contenteditable:!0}).text(h).call(E(t,i,e)).on(\"blur\",(function(){n._editing=!1,t.text(this.textContent).style({opacity:1});var e,i=r.select(this).attr(\"class\");(e=i?\".\"+i.split(\" \")[0]+\"-math-group\":\"[class*=-math-group]\")&&r.select(t.node().parentNode).select(e).style({opacity:0});var o=this.textContent;r.select(this).transition().duration(0).remove(),r.select(document).on(\"mouseup\",null),a.edit.call(t,o)})).on(\"focus\",(function(){var t=this;n._editing=!0,r.select(document).on(\"mouseup\",(function(){if(r.event.target===t)return!1;document.activeElement===s.node()&&s.node().blur()}))})).on(\"keyup\",(function(){27===r.event.which?(n._editing=!1,t.style({opacity:1}),r.select(this).style({opacity:0}).on(\"blur\",(function(){return!1})).transition().remove(),a.cancel.call(t,this.textContent)):(a.input.call(t,this.textContent),r.select(this).call(E(t,i,e)))})).on(\"keydown\",(function(){13===r.event.which&&this.blur()})).call(l),t.style({opacity:0});var d,f=o.attr(\"class\");(d=f?\".\"+f.split(\" \")[0]+\"-math-group\":\"[class*=-math-group]\")&&r.select(t.node().parentNode).select(d).style({opacity:0})}function l(t){var e=t.node(),n=document.createRange();n.selectNodeContents(e);var r=window.getSelection();r.removeAllRanges(),r.addRange(n),e.focus()}return e.immediate?s():o.on(\"click\",s),r.rebind(t,a,\"on\")}},{\"../constants/alignment\":745,\"../constants/xmlns_namespaces\":754,\"../lib\":778,d3:169}],804:[function(t,e,n){\"use strict\";var r={};function i(t){t&&null!==t.timer&&(clearTimeout(t.timer),t.timer=null)}n.throttle=function(t,e,n){var a=r[t],o=Date.now();if(!a){for(var s in r)r[s].ts<o-6e4&&delete r[s];a=r[t]={ts:0,timer:null}}function l(){n(),a.ts=Date.now(),a.onDone&&(a.onDone(),a.onDone=null)}i(a),o>a.ts+e?l():a.timer=setTimeout((function(){l(),a.timer=null}),e)},n.done=function(t){var e=r[t];return e&&e.timer?new Promise((function(t){var n=e.onDone;e.onDone=function(){n&&n(),t(),e.onDone=null}})):Promise.resolve()},n.clear=function(t){if(t)i(r[t]),delete r[t];else for(var e in r)n.clear(e)}},{}],805:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\");e.exports=function(t,e){if(t>0)return Math.log(t)/Math.LN10;var n=Math.log(Math.min(e[0],e[1]))/Math.LN10;return r(n)||(n=Math.log(Math.max(e[0],e[1]))/Math.LN10-6),n}},{\"fast-isnumeric\":241}],806:[function(t,e,n){\"use strict\";var r=e.exports={},i=t(\"../plots/geo/constants\").locationmodeToLayer,a=t(\"topojson-client\").feature;r.getTopojsonName=function(t){return[t.scope.replace(/ /g,\"-\"),\"_\",t.resolution.toString(),\"m\"].join(\"\")},r.getTopojsonPath=function(t,e){return t+e+\".json\"},r.getTopojsonFeatures=function(t,e){return a(e,e.objects[i[t.locationmode]]).features}},{\"../plots/geo/constants\":858,\"topojson-client\":579}],807:[function(t,e,n){\"use strict\";e.exports={moduleType:\"locale\",name:\"en-US\",dictionary:{\"Click to enter Colorscale title\":\"Click to enter Colorscale title\"},format:{date:\"%m/%d/%Y\"}}},{}],808:[function(t,e,n){\"use strict\";e.exports={moduleType:\"locale\",name:\"en\",dictionary:{\"Click to enter Colorscale title\":\"Click to enter Colourscale title\"},format:{days:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],shortDays:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],shortMonths:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],periods:[\"AM\",\"PM\"],dateTime:\"%a %b %e %X %Y\",date:\"%d/%m/%Y\",time:\"%H:%M:%S\",decimal:\".\",thousands:\",\",grouping:[3],currency:[\"$\",\"\"],year:\"%Y\",month:\"%b %Y\",dayMonth:\"%b %-d\",dayMonthYear:\"%b %-d, %Y\"}}},{}],809:[function(t,e,n){\"use strict\";var r=t(\"../registry\");e.exports=function(t){for(var e,n,i=r.layoutArrayContainers,a=r.layoutArrayRegexes,o=t.split(\"[\")[0],s=0;s<a.length;s++)if((n=t.match(a[s]))&&0===n.index){e=n[0];break}if(e||(e=i[i.indexOf(o)]),!e)return!1;var l=t.substr(e.length);return l?!!(n=l.match(/^\\[(0|[1-9][0-9]*)\\](\\.(.+))?$/))&&{array:e,index:Number(n[1]),property:n[3]||\"\"}:{array:e,index:\"\",property:\"\"}}},{\"../registry\":911}],810:[function(t,e,n){\"use strict\";var r=t(\"../lib\"),i=r.extendFlat,a=r.isPlainObject,o={valType:\"flaglist\",extras:[\"none\"],flags:[\"calc\",\"clearAxisTypes\",\"plot\",\"style\",\"markerSize\",\"colorbars\"]},s={valType:\"flaglist\",extras:[\"none\"],flags:[\"calc\",\"plot\",\"legend\",\"ticks\",\"axrange\",\"layoutstyle\",\"modebar\",\"camera\",\"arraydraw\",\"colorbars\"]},l=o.flags.slice().concat([\"fullReplot\"]),c=s.flags.slice().concat(\"layoutReplot\");function u(t){for(var e={},n=0;n<t.length;n++)e[t[n]]=!1;return e}function h(t,e,n){var r=i({},t);for(var o in r){var s=r[o];a(s)&&(r[o]=d(s,e,0,o))}return\"from-root\"===n&&(r.editType=e),r}function d(t,e,n,r){if(t.valType){var a=i({},t);if(a.editType=e,Array.isArray(t.items)){a.items=new Array(t.items.length);for(var o=0;o<t.items.length;o++)a.items[o]=d(t.items[o],e)}return a}return h(t,e,\"_\"===r.charAt(0)?\"nested\":\"from-root\")}e.exports={traces:o,layout:s,traceFlags:function(){return u(l)},layoutFlags:function(){return u(c)},update:function(t,e){var n=e.editType;if(n&&\"none\"!==n)for(var r=n.split(\"+\"),i=0;i<r.length;i++)t[r[i]]=!0},overrideAll:h}},{\"../lib\":778}],811:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"gl-mat4/fromQuat\"),a=t(\"../registry\"),o=t(\"../lib\"),s=t(\"../plots/plots\"),l=t(\"../plots/cartesian/axis_ids\"),c=t(\"../components/color\"),u=l.cleanId,h=l.getFromTrace,d=a.traceIs;function f(t,e){var n=t[e],r=e.charAt(0);n&&\"paper\"!==n&&(t[e]=u(n,r,!0))}function p(t){function e(e,n){t[e]&&(!t.title||!t.title[n])&&(t.title||(t.title={}),t.title[n]=t[e],delete t[e])}t&&(\"string\"!=typeof t.title&&\"number\"!=typeof t.title||(t.title={text:t.title}),e(\"titlefont\",\"font\"),e(\"titleposition\",\"position\"),e(\"titleside\",\"side\"),e(\"titleoffset\",\"offset\"))}function m(t){if(!o.isPlainObject(t))return!1;var e=t.name;return delete t.name,delete t.showlegend,(\"string\"==typeof e||\"number\"==typeof e)&&String(e)}function g(t,e,n,r){if(n&&!r)return t;if(r&&!n)return e;if(!t.trim())return e;if(!e.trim())return t;var i,a=Math.min(t.length,e.length);for(i=0;i<a&&t.charAt(i)===e.charAt(i);i++);return t.substr(0,i).trim()}function y(t){var e=\"middle\",n=\"center\";return\"string\"==typeof t&&(-1!==t.indexOf(\"top\")?e=\"top\":-1!==t.indexOf(\"bottom\")&&(e=\"bottom\"),-1!==t.indexOf(\"left\")?n=\"left\":-1!==t.indexOf(\"right\")&&(n=\"right\")),e+\" \"+n}function v(t,e){return e in t&&\"object\"==typeof t[e]&&0===Object.keys(t[e]).length}n.clearPromiseQueue=function(t){Array.isArray(t._promises)&&t._promises.length>0&&o.log(\"Clearing previous rejected promises from queue.\"),t._promises=[]},n.cleanLayout=function(t){var e,r;t||(t={}),t.xaxis1&&(t.xaxis||(t.xaxis=t.xaxis1),delete t.xaxis1),t.yaxis1&&(t.yaxis||(t.yaxis=t.yaxis1),delete t.yaxis1),t.scene1&&(t.scene||(t.scene=t.scene1),delete t.scene1);var a=(s.subplotsRegistry.cartesian||{}).attrRegex,l=(s.subplotsRegistry.polar||{}).attrRegex,h=(s.subplotsRegistry.ternary||{}).attrRegex,d=(s.subplotsRegistry.gl3d||{}).attrRegex,m=Object.keys(t);for(e=0;e<m.length;e++){var g=m[e];if(a&&a.test(g)){var y=t[g];y.anchor&&\"free\"!==y.anchor&&(y.anchor=u(y.anchor)),y.overlaying&&(y.overlaying=u(y.overlaying)),y.type||(y.isdate?y.type=\"date\":y.islog?y.type=\"log\":!1===y.isdate&&!1===y.islog&&(y.type=\"linear\")),\"withzero\"!==y.autorange&&\"tozero\"!==y.autorange||(y.autorange=!0,y.rangemode=\"tozero\"),delete y.islog,delete y.isdate,delete y.categories,v(y,\"domain\")&&delete y.domain,void 0!==y.autotick&&(void 0===y.tickmode&&(y.tickmode=y.autotick?\"auto\":\"linear\"),delete y.autotick),p(y)}else if(l&&l.test(g))p(t[g].radialaxis);else if(h&&h.test(g)){var _=t[g];p(_.aaxis),p(_.baxis),p(_.caxis)}else if(d&&d.test(g)){var b=t[g],x=b.cameraposition;if(Array.isArray(x)&&4===x[0].length){var w=x[1],k=x[2],M=i([],x[0]),T=[];for(r=0;r<3;++r)T[r]=w[r]+k*M[2+4*r];b.camera={eye:{x:T[0],y:T[1],z:T[2]},center:{x:w[0],y:w[1],z:w[2]},up:{x:0,y:0,z:1}},delete b.cameraposition}p(b.xaxis),p(b.yaxis),p(b.zaxis)}}var S=Array.isArray(t.annotations)?t.annotations.length:0;for(e=0;e<S;e++){var A=t.annotations[e];o.isPlainObject(A)&&(A.ref&&(\"paper\"===A.ref?(A.xref=\"paper\",A.yref=\"paper\"):\"data\"===A.ref&&(A.xref=\"x\",A.yref=\"y\"),delete A.ref),f(A,\"xref\"),f(A,\"yref\"))}var L=Array.isArray(t.shapes)?t.shapes.length:0;for(e=0;e<L;e++){var C=t.shapes[e];o.isPlainObject(C)&&(f(C,\"xref\"),f(C,\"yref\"))}var E=Array.isArray(t.images)?t.images.length:0;for(e=0;e<E;e++){var O=t.images[e];o.isPlainObject(O)&&(f(O,\"xref\"),f(O,\"yref\"))}var D=t.legend;return D&&(D.x>3?(D.x=1.02,D.xanchor=\"left\"):D.x<-2&&(D.x=-.02,D.xanchor=\"right\"),D.y>3?(D.y=1.02,D.yanchor=\"bottom\"):D.y<-2&&(D.y=-.02,D.yanchor=\"top\")),p(t),\"rotate\"===t.dragmode&&(t.dragmode=\"orbit\"),c.clean(t),t.template&&t.template.layout&&n.cleanLayout(t.template.layout),t},n.cleanData=function(t){for(var e=0;e<t.length;e++){var r,i=t[e];if(\"histogramy\"===i.type&&\"xbins\"in i&&!(\"ybins\"in i)&&(i.ybins=i.xbins,delete i.xbins),i.error_y&&\"opacity\"in i.error_y){var l=c.defaults,h=i.error_y.color||(d(i,\"bar\")?c.defaultLine:l[e%l.length]);i.error_y.color=c.addOpacity(c.rgb(h),c.opacity(h)*i.error_y.opacity),delete i.error_y.opacity}if(\"bardir\"in i&&(\"h\"!==i.bardir||!d(i,\"bar\")&&\"histogram\"!==i.type.substr(0,9)||(i.orientation=\"h\",n.swapXYData(i)),delete i.bardir),\"histogramy\"===i.type&&n.swapXYData(i),\"histogramx\"!==i.type&&\"histogramy\"!==i.type||(i.type=\"histogram\"),\"scl\"in i&&!(\"colorscale\"in i)&&(i.colorscale=i.scl,delete i.scl),\"reversescl\"in i&&!(\"reversescale\"in i)&&(i.reversescale=i.reversescl,delete i.reversescl),i.xaxis&&(i.xaxis=u(i.xaxis,\"x\")),i.yaxis&&(i.yaxis=u(i.yaxis,\"y\")),d(i,\"gl3d\")&&i.scene&&(i.scene=s.subplotsRegistry.gl3d.cleanId(i.scene)),!d(i,\"pie-like\")&&!d(i,\"bar-like\"))if(Array.isArray(i.textposition))for(r=0;r<i.textposition.length;r++)i.textposition[r]=y(i.textposition[r]);else i.textposition&&(i.textposition=y(i.textposition));var f=a.getModule(i);if(f&&f.colorbar){var _=f.colorbar.container,b=_?i[_]:i;b&&b.colorscale&&(\"YIGnBu\"===b.colorscale&&(b.colorscale=\"YlGnBu\"),\"YIOrRd\"===b.colorscale&&(b.colorscale=\"YlOrRd\"))}if(\"surface\"===i.type&&o.isPlainObject(i.contours)){var x=[\"x\",\"y\",\"z\"];for(r=0;r<x.length;r++){var w=i.contours[x[r]];o.isPlainObject(w)&&(w.highlightColor&&(w.highlightcolor=w.highlightColor,delete w.highlightColor),w.highlightWidth&&(w.highlightwidth=w.highlightWidth,delete w.highlightWidth))}}if(\"candlestick\"===i.type||\"ohlc\"===i.type){var k=!1!==(i.increasing||{}).showlegend,M=!1!==(i.decreasing||{}).showlegend,T=m(i.increasing),S=m(i.decreasing);if(!1!==T&&!1!==S){var A=g(T,S,k,M);A&&(i.name=A)}else!T&&!S||i.name||(i.name=T||S)}if(Array.isArray(i.transforms)){var L=i.transforms;for(r=0;r<L.length;r++){var C=L[r];if(o.isPlainObject(C))switch(C.type){case\"filter\":C.filtersrc&&(C.target=C.filtersrc,delete C.filtersrc),C.calendar&&(C.valuecalendar||(C.valuecalendar=C.calendar),delete C.calendar);break;case\"groupby\":if(C.styles=C.styles||C.style,C.styles&&!Array.isArray(C.styles)){var E=C.styles,O=Object.keys(E);C.styles=[];for(var D=0;D<O.length;D++)C.styles.push({target:O[D],value:E[O[D]]})}}}}v(i,\"line\")&&delete i.line,\"marker\"in i&&(v(i.marker,\"line\")&&delete i.marker.line,v(i,\"marker\")&&delete i.marker),c.clean(i),i.autobinx&&(delete i.autobinx,delete i.xbins),i.autobiny&&(delete i.autobiny,delete i.ybins),p(i),i.colorbar&&p(i.colorbar),i.marker&&i.marker.colorbar&&p(i.marker.colorbar),i.line&&i.line.colorbar&&p(i.line.colorbar),i.aaxis&&p(i.aaxis),i.baxis&&p(i.baxis)}},n.swapXYData=function(t){var e;if(o.swapAttrs(t,[\"?\",\"?0\",\"d?\",\"?bins\",\"nbins?\",\"autobin?\",\"?src\",\"error_?\"]),Array.isArray(t.z)&&Array.isArray(t.z[0])&&(t.transpose?delete t.transpose:t.transpose=!0),t.error_x&&t.error_y){var n=t.error_y,r=\"copy_ystyle\"in n?n.copy_ystyle:!(n.color||n.thickness||n.width);o.swapAttrs(t,[\"error_?.copy_ystyle\"]),r&&o.swapAttrs(t,[\"error_?.color\",\"error_?.thickness\",\"error_?.width\"])}if(\"string\"==typeof t.hoverinfo){var i=t.hoverinfo.split(\"+\");for(e=0;e<i.length;e++)\"x\"===i[e]?i[e]=\"y\":\"y\"===i[e]&&(i[e]=\"x\");t.hoverinfo=i.join(\"+\")}},n.coerceTraceIndices=function(t,e){if(r(e))return[e];if(!Array.isArray(e)||!e.length)return t.data.map((function(t,e){return e}));if(Array.isArray(e)){for(var n=[],i=0;i<e.length;i++)o.isIndex(e[i],t.data.length)?n.push(e[i]):o.warn(\"trace index (\",e[i],\") is not a number or is out of bounds\");return n}return e},n.manageArrayContainers=function(t,e,n){var i=t.obj,a=t.parts,s=a.length,l=a[s-1],c=r(l);if(c&&null===e){var u=a.slice(0,s-1).join(\".\");o.nestedProperty(i,u).get().splice(l,1)}else c&&void 0===t.get()?(void 0===t.get()&&(n[t.astr]=null),t.set(e)):t.set(e)};var _=/(\\.[^\\[\\]\\.]+|\\[[^\\[\\]\\.]+\\])$/;function b(t){var e=t.search(_);if(e>0)return t.substr(0,e)}n.hasParent=function(t,e){for(var n=b(e);n;){if(n in t)return!0;n=b(n)}return!1};var x=[\"x\",\"y\",\"z\"];n.clearAxisTypes=function(t,e,n){for(var r=0;r<e.length;r++)for(var i=t._fullData[r],a=0;a<3;a++){var s=h(t,i,x[a]);if(s&&\"log\"!==s.type){var l=s._name,c=s._id.substr(1);if(\"scene\"===c.substr(0,5)){if(void 0!==n[c])continue;l=c+\".\"+l}var u=l+\".type\";void 0===n[l]&&void 0===n[u]&&o.nestedProperty(t.layout,u).set(null)}}}},{\"../components/color\":643,\"../lib\":778,\"../plots/cartesian/axis_ids\":831,\"../plots/plots\":891,\"../registry\":911,\"fast-isnumeric\":241,\"gl-mat4/fromQuat\":282}],812:[function(t,e,n){\"use strict\";var r=t(\"./plot_api\");n.plot=r.plot,n.newPlot=r.newPlot,n.restyle=r.restyle,n.relayout=r.relayout,n.redraw=r.redraw,n.update=r.update,n._guiRestyle=r._guiRestyle,n._guiRelayout=r._guiRelayout,n._guiUpdate=r._guiUpdate,n._storeDirectGUIEdit=r._storeDirectGUIEdit,n.react=r.react,n.extendTraces=r.extendTraces,n.prependTraces=r.prependTraces,n.addTraces=r.addTraces,n.deleteTraces=r.deleteTraces,n.moveTraces=r.moveTraces,n.purge=r.purge,n.addFrames=r.addFrames,n.deleteFrames=r.deleteFrames,n.animate=r.animate,n.setPlotConfig=r.setPlotConfig,n.toImage=t(\"./to_image\"),n.validate=t(\"./validate\"),n.downloadImage=t(\"../snapshot/download\");var i=t(\"./template_api\");n.makeTemplate=i.makeTemplate,n.validateTemplate=i.validateTemplate},{\"../snapshot/download\":913,\"./plot_api\":814,\"./template_api\":819,\"./to_image\":820,\"./validate\":821}],813:[function(t,e,n){\"use strict\";var r=t(\"../lib/is_plain_object\"),i=t(\"../lib/noop\"),a=t(\"../lib/loggers\"),o=t(\"../lib/search\").sorterAsc,s=t(\"../registry\");n.containerArrayMatch=t(\"./container_array_match\");var l=n.isAddVal=function(t){return\"add\"===t||r(t)},c=n.isRemoveVal=function(t){return null===t||\"remove\"===t};n.applyContainerArrayChanges=function(t,e,n,r,u){var h=e.astr,d=s.getComponentMethod(h,\"supplyLayoutDefaults\"),f=s.getComponentMethod(h,\"draw\"),p=s.getComponentMethod(h,\"drawOne\"),m=r.replot||r.recalc||d===i||f===i,g=t.layout,y=t._fullLayout;if(n[\"\"]){Object.keys(n).length>1&&a.warn(\"Full array edits are incompatible with other edits\",h);var v=n[\"\"][\"\"];if(c(v))e.set(null);else{if(!Array.isArray(v))return a.warn(\"Unrecognized full array edit value\",h,v),!0;e.set(v)}return!m&&(d(g,y),f(t),!0)}var _,b,x,w,k,M,T,S=Object.keys(n).map(Number).sort(o),A=e.get(),L=A||[],C=u(y,h).get(),E=[],O=-1,D=L.length;for(_=0;_<S.length;_++)if(w=n[x=S[_]],k=Object.keys(w),T=l(M=w[\"\"]),x<0||x>L.length-(T?0:1))a.warn(\"index out of range\",h,x);else if(void 0!==M)k.length>1&&a.warn(\"Insertion & removal are incompatible with edits to the same index.\",h,x),c(M)?E.push(x):T?(\"add\"===M&&(M={}),L.splice(x,0,M),C&&C.splice(x,0,{})):a.warn(\"Unrecognized full object edit value\",h,x,M),-1===O&&(O=x);else for(b=0;b<k.length;b++)u(L[x],k[b],h+\"[\"+x+\"].\").set(w[k[b]]);for(_=E.length-1;_>=0;_--)L.splice(E[_],1),C&&C.splice(E[_],1);if(L.length?A||e.set(L):e.set(null),m)return!1;if(d(g,y),p!==i){var I;if(-1===O)I=S;else{for(D=Math.max(L.length,D),I=[],_=0;_<S.length&&!((x=S[_])>=O);_++)I.push(x);for(_=O;_<D;_++)I.push(_)}for(_=0;_<I.length;_++)p(t,I[_])}else f(t);return!0}},{\"../lib/is_plain_object\":779,\"../lib/loggers\":782,\"../lib/noop\":787,\"../lib/search\":798,\"../registry\":911,\"./container_array_match\":809}],814:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"fast-isnumeric\"),a=t(\"has-hover\"),o=t(\"../lib\"),s=o.nestedProperty,l=t(\"../lib/events\"),c=t(\"../lib/queue\"),u=t(\"../registry\"),h=t(\"./plot_schema\"),d=t(\"../plots/plots\"),f=t(\"../plots/polar/legacy\"),p=t(\"../plots/cartesian/axes\"),m=t(\"../components/drawing\"),g=t(\"../components/color\"),y=t(\"../plots/cartesian/graph_interact\").initInteractions,v=t(\"../constants/xmlns_namespaces\"),_=t(\"../lib/svg_text_utils\"),b=t(\"../plots/cartesian/select\").clearSelect,x=t(\"./plot_config\").dfltConfig,w=t(\"./manage_arrays\"),k=t(\"./helpers\"),M=t(\"./subroutines\"),T=t(\"./edit_types\"),S=t(\"../plots/cartesian/constants\").AX_NAME_PATTERN,A=0;function L(t){var e=t._fullLayout;e._redrawFromAutoMarginCount?e._redrawFromAutoMarginCount--:t.emit(\"plotly_afterplot\")}function C(t,e){try{t._fullLayout._paper.style(\"background\",e)}catch(n){o.error(n)}}function E(t,e){C(t,g.combine(e,\"white\"))}function O(t,e){if(!t._context){t._context=o.extendDeep({},x);var n=r.select(\"base\");t._context._baseUrl=n.size()&&n.attr(\"href\")?window.location.href.split(\"#\")[0]:\"\"}var i,s,l,c=t._context;if(e){for(s=Object.keys(e),i=0;i<s.length;i++)\"editable\"!==(l=s[i])&&\"edits\"!==l&&l in c&&(c[l]=\"setBackground\"===l&&\"opaque\"===e[l]?E:e[l]);e.plot3dPixelRatio&&!c.plotGlPixelRatio&&(c.plotGlPixelRatio=c.plot3dPixelRatio);var u=e.editable;if(void 0!==u)for(c.editable=u,s=Object.keys(c.edits),i=0;i<s.length;i++)c.edits[s[i]]=u;if(e.edits)for(s=Object.keys(e.edits),i=0;i<s.length;i++)(l=s[i])in c.edits&&(c.edits[l]=e.edits[l]);c._exportedPlot=e._exportedPlot}c.staticPlot&&(c.editable=!1,c.edits={},c.autosizable=!1,c.scrollZoom=!1,c.doubleClick=!1,c.showTips=!1,c.showLink=!1,c.displayModeBar=!1),\"hover\"!==c.displayModeBar||a||(c.displayModeBar=!0),\"transparent\"!==c.setBackground&&\"function\"==typeof c.setBackground||(c.setBackground=C),c._hasZeroHeight=c._hasZeroHeight||0===t.clientHeight,c._hasZeroWidth=c._hasZeroWidth||0===t.clientWidth;var h=c.scrollZoom,d=c._scrollZoom={};if(!0===h)d.cartesian=1,d.gl3d=1,d.geo=1,d.mapbox=1;else if(\"string\"==typeof h){var f=h.split(\"+\");for(i=0;i<f.length;i++)d[f[i]]=1}else!1!==h&&(d.gl3d=1,d.geo=1,d.mapbox=1)}function D(t,e){var n,r,i=e+1,a=[];for(n=0;n<t.length;n++)a.push((r=t[n])<0?i+r:r);return a}function I(t,e,n){var r,i;for(r=0;r<e.length;r++){if((i=e[r])!==parseInt(i,10))throw new Error(\"all values in \"+n+\" must be integers\");if(i>=t.data.length||i<-t.data.length)throw new Error(n+\" must be valid indices for gd.data.\");if(e.indexOf(i,r+1)>-1||i>=0&&e.indexOf(-t.data.length+i)>-1||i<0&&e.indexOf(t.data.length+i)>-1)throw new Error(\"each index in \"+n+\" must be unique.\")}}function P(t,e,n){if(!Array.isArray(t.data))throw new Error(\"gd.data must be an array.\");if(void 0===e)throw new Error(\"currentIndices is a required argument.\");if(Array.isArray(e)||(e=[e]),I(t,e,\"currentIndices\"),void 0===n||Array.isArray(n)||(n=[n]),void 0!==n&&I(t,n,\"newIndices\"),void 0!==n&&e.length!==n.length)throw new Error(\"current and new indices must be of equal length.\")}function R(t,e,n,r,a){!function(t,e,n,r){var i=o.isPlainObject(r);if(!Array.isArray(t.data))throw new Error(\"gd.data must be an array\");if(!o.isPlainObject(e))throw new Error(\"update must be a key:value object\");if(void 0===n)throw new Error(\"indices must be an integer or array of integers\");for(var a in I(t,n,\"indices\"),e){if(!Array.isArray(e[a])||e[a].length!==n.length)throw new Error(\"attribute \"+a+\" must be an array of length equal to indices array length\");if(i&&(!(a in r)||!Array.isArray(r[a])||r[a].length!==e[a].length))throw new Error(\"when maxPoints is set as a key:value object it must contain a 1:1 corrispondence with the keys and number of traces in the update object\")}}(t,e,n,r);for(var l=function(t,e,n,r){var a,l,c,u,h=o.isPlainObject(r),d=[];for(var f in Array.isArray(n)||(n=[n]),n=D(n,t.data.length-1),e)for(var p=0;p<n.length;p++){if(a=(l=s(t.data[n[p]],f)).get(),!o.isArrayOrTypedArray(c=e[f][p]))throw new Error(\"attribute: \"+f+\" index: \"+p+\" must be an array\");if(!o.isArrayOrTypedArray(a))throw new Error(\"cannot extend missing or non-array attribute: \"+f);if(a.constructor!==c.constructor)throw new Error(\"cannot extend array with an array of a different type: \"+f);i(u=h?r[f][p]:r)||(u=-1),d.push({prop:l,target:a,insert:c,maxp:Math.floor(u)})}return d}(t,e,n,r),c={},u={},h=0;h<l.length;h++){var d=l[h].prop,f=a(l[h].target,l[h].insert,l[h].maxp);d.set(f[0]),Array.isArray(c[d.astr])||(c[d.astr]=[]),c[d.astr].push(f[1]),Array.isArray(u[d.astr])||(u[d.astr]=[]),u[d.astr].push(l[h].target.length)}return{update:c,maxPoints:u}}function z(t,e){var n=new t.constructor(t.length+e.length);return n.set(t),n.set(e,t.length),n}function j(t,e,r,i){t=o.getGraphDiv(t),k.clearPromiseQueue(t);var a={};if(\"string\"==typeof e)a[e]=r;else{if(!o.isPlainObject(e))return o.warn(\"Restyle fail.\",e,r,i),Promise.reject();a=o.extendFlat({},e),void 0===i&&(i=r)}Object.keys(a).length&&(t.changed=!0);var s=k.coerceTraceIndices(t,i),l=Y(t,a,s),u=l.flags;u.calc&&(t.calcdata=void 0),u.clearAxisTypes&&k.clearAxisTypes(t,s,{});var h=[];u.fullReplot?h.push(n.plot):(h.push(d.previousPromises),d.supplyDefaults(t),u.markerSize&&(d.doCalcdata(t),W(h)),u.style&&h.push(M.doTraceStyle),u.colorbars&&h.push(M.doColorBars),h.push(L)),h.push(d.rehover,d.redrag),c.add(t,j,[t,l.undoit,l.traces],j,[t,l.redoit,l.traces]);var f=o.syncOrAsync(h,t);return f&&f.then||(f=Promise.resolve()),f.then((function(){return t.emit(\"plotly_restyle\",l.eventData),t}))}function F(t){return void 0===t?null:t}function N(t,e){return e?function(e,n,r){var i=s(e,n),a=i.set;return i.set=function(e){B((r||\"\")+n,i.get(),e,t),a(e)},i}:s}function B(t,e,n,r){if(Array.isArray(e)||Array.isArray(n))for(var i=Array.isArray(e)?e:[],a=Array.isArray(n)?n:[],s=Math.max(i.length,a.length),l=0;l<s;l++)B(t+\"[\"+l+\"]\",i[l],a[l],r);else if(o.isPlainObject(e)||o.isPlainObject(n)){var c=o.isPlainObject(e)?e:{},u=o.isPlainObject(n)?n:{},h=o.extendFlat({},c,u);for(var d in h)B(t+\".\"+d,c[d],u[d],r)}else void 0===r[t]&&(r[t]=F(e))}function Y(t,e,n){var r,i=t._fullLayout,a=t._fullData,l=t.data,c=i._guiEditing,f=N(i._preGUI,c),m=o.extendDeepAll({},e);H(e);var g,y=T.traceFlags(),v={},_={};function b(){return n.map((function(){}))}function x(t){var e=p.id2name(t);-1===g.indexOf(e)&&g.push(e)}function w(t){return\"LAYOUT\"+t+\".autorange\"}function M(t){return\"LAYOUT\"+t+\".range\"}function S(t){for(var e=t;e<a.length;e++)if(a[e]._input===l[t])return a[e]}function A(r,a,o){if(Array.isArray(r))r.forEach((function(t){A(t,a,o)}));else if(!(r in e)&&!k.hasParent(e,r)){var s;if(\"LAYOUT\"===r.substr(0,6))s=f(t.layout,r.replace(\"LAYOUT\",\"\"));else{var u=n[o];s=N(i._tracePreGUI[S(u)._fullInput.uid],c)(l[u],r)}r in _||(_[r]=b()),void 0===_[r][o]&&(_[r][o]=F(s.get())),void 0!==a&&s.set(a)}}function L(t){return function(e){return a[e][t]}}function C(t){return function(e,r){return!1===e?a[n[r]][t]:null}}for(var E in e){if(k.hasParent(e,E))throw new Error(\"cannot set \"+E+\" and a parent attribute simultaneously\");var O,D,I,P,R,z,j=e[E];if(\"autobinx\"!==E&&\"autobiny\"!==E||(E=E.charAt(E.length-1)+\"bins\",j=Array.isArray(j)?j.map(C(E)):!1===j?n.map(L(E)):null),v[E]=j,\"LAYOUT\"!==E.substr(0,6)){for(_[E]=b(),r=0;r<n.length;r++)if(O=l[n[r]],D=S(n[r]),P=(I=N(i._tracePreGUI[D._fullInput.uid],c)(O,E)).get(),void 0!==(R=Array.isArray(j)?j[r%j.length]:j)){var B=I.parts[I.parts.length-1],Y=E.substr(0,E.length-B.length-1),V=Y?Y+\".\":\"\",U=Y?s(D,Y).get():D;if((z=h.getTraceValObject(D,I.parts))&&z.impliedEdits&&null!==R)for(var W in z.impliedEdits)A(o.relativeAttr(E,W),z.impliedEdits[W],r);else if(\"thicknessmode\"!==B&&\"lenmode\"!==B||P===R||\"fraction\"!==R&&\"pixels\"!==R||!U){if(\"type\"===E&&(\"pie\"===R!=(\"pie\"===P)||\"funnelarea\"===R!=(\"funnelarea\"===P))){var q=\"x\",G=\"y\";\"bar\"!==R&&\"bar\"!==P||\"h\"!==O.orientation||(q=\"y\",G=\"x\"),o.swapAttrs(O,[\"?\",\"?src\"],\"labels\",q),o.swapAttrs(O,[\"d?\",\"?0\"],\"label\",q),o.swapAttrs(O,[\"?\",\"?src\"],\"values\",G),\"pie\"===P||\"funnelarea\"===P?(s(O,\"marker.color\").set(s(O,\"marker.colors\").get()),i._pielayer.selectAll(\"g.trace\").remove()):u.traceIs(O,\"cartesian\")&&s(O,\"marker.colors\").set(s(O,\"marker.color\").get())}}else{var X=i._size,Z=U.orient,J=\"top\"===Z||\"bottom\"===Z;if(\"thicknessmode\"===B){var K=J?X.h:X.w;A(V+\"thickness\",U.thickness*(\"fraction\"===R?1/K:K),r)}else{var $=J?X.w:X.h;A(V+\"len\",U.len*(\"fraction\"===R?1/$:$),r)}}if(_[E][r]=F(P),-1!==[\"swapxy\",\"swapxyaxes\",\"orientation\",\"orientationaxes\"].indexOf(E)){if(\"orientation\"===E){I.set(R);var Q=O.x&&!O.y?\"h\":\"v\";if((I.get()||Q)===D.orientation)continue}else\"orientationaxes\"===E&&(O.orientation={v:\"h\",h:\"v\"}[D.orientation]);k.swapXYData(O),y.calc=y.clearAxisTypes=!0}else-1!==d.dataArrayContainers.indexOf(I.parts[0])?(k.manageArrayContainers(I,R,_),y.calc=!0):(z?z.arrayOk&&!u.traceIs(D,\"regl\")&&(o.isArrayOrTypedArray(R)||o.isArrayOrTypedArray(P))?y.calc=!0:T.update(y,z):y.calc=!0,I.set(R))}if(-1!==[\"swapxyaxes\",\"orientationaxes\"].indexOf(E)&&p.swap(t,n),\"orientationaxes\"===E){var tt=s(t.layout,\"hovermode\"),et=tt.get();\"x\"===et?tt.set(\"y\"):\"y\"===et?tt.set(\"x\"):\"x unified\"===et?tt.set(\"y unified\"):\"y unified\"===et&&tt.set(\"x unified\")}if(-1!==[\"orientation\",\"type\"].indexOf(E)){for(g=[],r=0;r<n.length;r++){var nt=l[n[r]];u.traceIs(nt,\"cartesian\")&&(x(nt.xaxis||\"x\"),x(nt.yaxis||\"y\"))}A(g.map(w),!0,0),A(g.map(M),[0,1],0)}}else I=f(t.layout,E.replace(\"LAYOUT\",\"\")),_[E]=[F(I.get())],I.set(Array.isArray(j)?j[0]:j),y.calc=!0}return(y.calc||y.plot)&&(y.fullReplot=!0),{flags:y,undoit:_,redoit:v,traces:n,eventData:o.extendDeepNoArrays([],[m,n])}}function H(t){var e,n,r,i=o.counterRegex(\"axis\",\".title\",!1,!1),a=/colorbar\\.title$/,s=Object.keys(t);for(e=0;e<s.length;e++)r=t[n=s[e]],\"title\"!==n&&!i.test(n)&&!a.test(n)||\"string\"!=typeof r&&\"number\"!=typeof r?n.indexOf(\"titlefont\")>-1?l(n,n.replace(\"titlefont\",\"title.font\")):n.indexOf(\"titleposition\")>-1?l(n,n.replace(\"titleposition\",\"title.position\")):n.indexOf(\"titleside\")>-1?l(n,n.replace(\"titleside\",\"title.side\")):n.indexOf(\"titleoffset\")>-1&&l(n,n.replace(\"titleoffset\",\"title.offset\")):l(n,n.replace(\"title\",\"title.text\"));function l(e,n){t[n]=t[e],delete t[e]}}function V(t,e,n){if(t=o.getGraphDiv(t),k.clearPromiseQueue(t),t.framework&&t.framework.isPolar)return Promise.resolve(t);var r={};if(\"string\"==typeof e)r[e]=n;else{if(!o.isPlainObject(e))return o.warn(\"Relayout fail.\",e,n),Promise.reject();r=o.extendFlat({},e)}Object.keys(r).length&&(t.changed=!0);var i=Z(t,r),a=i.flags;a.calc&&(t.calcdata=void 0);var s=[d.previousPromises];a.layoutReplot?s.push(M.layoutReplot):Object.keys(r).length&&(U(t,a,i)||d.supplyDefaults(t),a.legend&&s.push(M.doLegend),a.layoutstyle&&s.push(M.layoutStyles),a.axrange&&W(s,i.rangesAltered),a.ticks&&s.push(M.doTicksRelayout),a.modebar&&s.push(M.doModeBar),a.camera&&s.push(M.doCamera),a.colorbars&&s.push(M.doColorBars),s.push(L)),s.push(d.rehover,d.redrag),c.add(t,V,[t,i.undoit],V,[t,i.redoit]);var l=o.syncOrAsync(s,t);return l&&l.then||(l=Promise.resolve(t)),l.then((function(){return t.emit(\"plotly_relayout\",i.eventData),t}))}function U(t,e,n){var r=t._fullLayout;if(!e.axrange)return!1;for(var i in e)if(\"axrange\"!==i&&e[i])return!1;for(var a in n.rangesAltered){var o=p.id2name(a),s=t.layout[o],l=r[o];if(l.autorange=s.autorange,s.range&&(l.range=s.range.slice()),l.cleanRange(),l._matchGroup)for(var c in l._matchGroup)if(c!==a){var u=r[p.id2name(c)];u.autorange=l.autorange,u.range=l.range.slice(),u._input.range=l.range.slice()}}return!0}function W(t,e){t.push(b,M.doAutoRangeAndConstraints,e?function(t){var n=[],r=!0;for(var i in e){var a=p.getFromId(t,i);if(n.push(i),-1!==(a.ticklabelposition||\"\").indexOf(\"inside\")&&a._anchorAxis&&n.push(a._anchorAxis._id),a._matchGroup)for(var o in a._matchGroup)e[o]||n.push(o);a.automargin&&(r=!1)}return p.draw(t,n,{skipTitle:r})}:function(t){return p.draw(t,\"redraw\")},M.drawData,M.finalDraw)}var q=/^[xyz]axis[0-9]*\\.range(\\[[0|1]\\])?$/,G=/^[xyz]axis[0-9]*\\.autorange$/,X=/^[xyz]axis[0-9]*\\.domain(\\[[0|1]\\])?$/;function Z(t,e){var n,r,i,a=t.layout,l=t._fullLayout,c=N(l._preGUI,l._guiEditing),d=Object.keys(e),f=p.list(t),m=o.extendDeepAll({},e),g={};for(H(e),d=Object.keys(e),r=0;r<d.length;r++)if(0===d[r].indexOf(\"allaxes\")){for(i=0;i<f.length;i++){var y=f[i]._id.substr(1),v=-1!==y.indexOf(\"scene\")?y+\".\":\"\",_=d[r].replace(\"allaxes\",v+f[i]._name);e[_]||(e[_]=e[d[r]])}delete e[d[r]]}var b=T.layoutFlags(),x={},M={};function A(t,n){if(Array.isArray(t))t.forEach((function(t){A(t,n)}));else if(!(t in e)&&!k.hasParent(e,t)){var r=c(a,t);t in M||(M[t]=F(r.get())),void 0!==n&&r.set(n)}}var L,C={};function E(t){var e=p.name2id(t.split(\".\")[0]);return C[e]=1,e}for(var O in e){if(k.hasParent(e,O))throw new Error(\"cannot set \"+O+\" and a parent attribute simultaneously\");for(var D=c(a,O),I=e[O],P=D.parts.length-1;P>0&&\"string\"!=typeof D.parts[P];)P--;var R=D.parts[P],z=D.parts[P-1]+\".\"+R,j=D.parts.slice(0,P).join(\".\"),B=s(t.layout,j).get(),Y=s(l,j).get(),V=D.get();if(void 0!==I){x[O]=I,M[O]=\"reverse\"===R?I:F(V);var U=h.getLayoutValObject(l,D.parts);if(U&&U.impliedEdits&&null!==I)for(var W in U.impliedEdits)A(o.relativeAttr(O,W),U.impliedEdits[W]);if(-1!==[\"width\",\"height\"].indexOf(O))if(I){A(\"autosize\",null);var Z=\"height\"===O?\"width\":\"height\";A(Z,l[Z])}else l[O]=t._initialAutoSize[O];else if(\"autosize\"===O)A(\"width\",I?null:l.width),A(\"height\",I?null:l.height);else if(z.match(q))E(z),s(l,j+\"._inputRange\").set(null);else if(z.match(G)){E(z),s(l,j+\"._inputRange\").set(null);var K=s(l,j).get();K._inputDomain&&(K._input.domain=K._inputDomain.slice())}else z.match(X)&&s(l,j+\"._inputDomain\").set(null);if(\"type\"===R){L=B;var $=\"linear\"===Y.type&&\"log\"===I;if($||\"log\"===Y.type&&\"linear\"===I){if(L&&L.range)if(Y.autorange)$&&(L.range=L.range[1]>L.range[0]?[1,2]:[2,1]);else{var Q=L.range[0],tt=L.range[1];$?(Q<=0&&tt<=0&&A(j+\".autorange\",!0),Q<=0?Q=tt/1e6:tt<=0&&(tt=Q/1e6),A(j+\".range[0]\",Math.log(Q)/Math.LN10),A(j+\".range[1]\",Math.log(tt)/Math.LN10)):(A(j+\".range[0]\",Math.pow(10,Q)),A(j+\".range[1]\",Math.pow(10,tt)))}else A(j+\".autorange\",!0);Array.isArray(l._subplots.polar)&&l._subplots.polar.length&&l[D.parts[0]]&&\"radialaxis\"===D.parts[1]&&delete l[D.parts[0]]._subplot.viewInitial[\"radialaxis.range\"],u.getComponentMethod(\"annotations\",\"convertCoords\")(t,Y,I,A),u.getComponentMethod(\"images\",\"convertCoords\")(t,Y,I,A)}else A(j+\".autorange\",!0),A(j+\".range\",null);s(l,j+\"._inputRange\").set(null)}else if(R.match(S)){var et=s(l,O).get(),nt=(I||{}).type;nt&&\"-\"!==nt||(nt=\"linear\"),u.getComponentMethod(\"annotations\",\"convertCoords\")(t,et,nt,A),u.getComponentMethod(\"images\",\"convertCoords\")(t,et,nt,A)}var rt=w.containerArrayMatch(O);if(rt){n=rt.array;var it=rt.property,at=U||{editType:\"calc\"};\"\"!==(r=rt.index)&&\"\"===it&&(w.isAddVal(I)?M[O]=null:w.isRemoveVal(I)?M[O]=(s(a,n).get()||[])[r]:o.warn(\"unrecognized full object value\",e)),T.update(b,at),g[n]||(g[n]={});var ot=g[n][r];ot||(ot=g[n][r]={}),ot[it]=I,delete e[O]}else\"reverse\"===R?(B.range?B.range.reverse():(A(j+\".autorange\",!0),B.range=[1,0]),Y.autorange?b.calc=!0:b.plot=!0):(l._has(\"scatter-like\")&&l._has(\"regl\")&&\"dragmode\"===O&&(\"lasso\"===I||\"select\"===I)&&\"lasso\"!==V&&\"select\"!==V||l._has(\"gl2d\")?b.plot=!0:U?T.update(b,U):b.calc=!0,D.set(I))}}for(n in g)w.applyContainerArrayChanges(t,c(a,n),g[n],b,c)||(b.plot=!0);for(var st in C){var lt=(L=p.getFromId(t,st))&&L._constraintGroup;if(lt)for(var ct in b.calc=!0,lt)C[ct]||(p.getFromId(t,ct)._constraintShrinkable=!0)}return(J(t)||e.height||e.width)&&(b.plot=!0),(b.plot||b.calc)&&(b.layoutReplot=!0),{flags:b,rangesAltered:C,undoit:M,redoit:x,eventData:m}}function J(t){var e=t._fullLayout,n=e.width,r=e.height;return t.layout.autosize&&d.plotAutoSize(t,t.layout,e),e.width!==n||e.height!==r}function K(t,e,r,i){if(t=o.getGraphDiv(t),k.clearPromiseQueue(t),t.framework&&t.framework.isPolar)return Promise.resolve(t);o.isPlainObject(e)||(e={}),o.isPlainObject(r)||(r={}),Object.keys(e).length&&(t.changed=!0),Object.keys(r).length&&(t.changed=!0);var a=k.coerceTraceIndices(t,i),s=Y(t,o.extendFlat({},e),a),l=s.flags,u=Z(t,o.extendFlat({},r)),h=u.flags;(l.calc||h.calc)&&(t.calcdata=void 0),l.clearAxisTypes&&k.clearAxisTypes(t,a,r);var f=[];h.layoutReplot?f.push(M.layoutReplot):l.fullReplot?f.push(n.plot):(f.push(d.previousPromises),U(t,h,u)||d.supplyDefaults(t),l.style&&f.push(M.doTraceStyle),(l.colorbars||h.colorbars)&&f.push(M.doColorBars),h.legend&&f.push(M.doLegend),h.layoutstyle&&f.push(M.layoutStyles),h.axrange&&W(f,u.rangesAltered),h.ticks&&f.push(M.doTicksRelayout),h.modebar&&f.push(M.doModeBar),h.camera&&f.push(M.doCamera),f.push(L)),f.push(d.rehover,d.redrag),c.add(t,K,[t,s.undoit,u.undoit,s.traces],K,[t,s.redoit,u.redoit,s.traces]);var p=o.syncOrAsync(f,t);return p&&p.then||(p=Promise.resolve(t)),p.then((function(){return t.emit(\"plotly_update\",{data:s.eventData,layout:u.eventData}),t}))}function $(t){return function(e){e._fullLayout._guiEditing=!0;var n=t.apply(null,arguments);return e._fullLayout._guiEditing=!1,n}}var Q=[{pattern:/^hiddenlabels/,attr:\"legend.uirevision\"},{pattern:/^((x|y)axis\\d*)\\.((auto)?range|title\\.text)/},{pattern:/axis\\d*\\.showspikes$/,attr:\"modebar.uirevision\"},{pattern:/(hover|drag)mode$/,attr:\"modebar.uirevision\"},{pattern:/^(scene\\d*)\\.camera/},{pattern:/^(geo\\d*)\\.(projection|center|fitbounds)/},{pattern:/^(ternary\\d*\\.[abc]axis)\\.(min|title\\.text)$/},{pattern:/^(polar\\d*\\.radialaxis)\\.((auto)?range|angle|title\\.text)/},{pattern:/^(polar\\d*\\.angularaxis)\\.rotation/},{pattern:/^(mapbox\\d*)\\.(center|zoom|bearing|pitch)/},{pattern:/^legend\\.(x|y)$/,attr:\"editrevision\"},{pattern:/^(shapes|annotations)/,attr:\"editrevision\"},{pattern:/^title\\.text$/,attr:\"editrevision\"}],tt=[{pattern:/^selectedpoints$/,attr:\"selectionrevision\"},{pattern:/(^|value\\.)visible$/,attr:\"legend.uirevision\"},{pattern:/^dimensions\\[\\d+\\]\\.constraintrange/},{pattern:/^node\\.(x|y|groups)/},{pattern:/^level$/},{pattern:/(^|value\\.)name$/},{pattern:/colorbar\\.title\\.text$/},{pattern:/colorbar\\.(x|y)$/,attr:\"editrevision\"}];function et(t,e){for(var n=0;n<e.length;n++){var r=e[n],i=t.match(r.pattern);if(i)return{head:i[1],attr:r.attr}}}function nt(t,e){var n=s(e,t).get();if(void 0!==n)return n;var r=t.split(\".\");for(r.pop();r.length>1;)if(r.pop(),void 0!==(n=s(e,r.join(\".\")+\".uirevision\").get()))return n;return e.uirevision}function rt(t,e){for(var n=0;n<e.length;n++)if(e[n]._fullInput.uid===t)return n;return-1}function it(t,e,n){for(var r=0;r<e.length;r++)if(e[r].uid===t)return r;return!e[n]||e[n].uid?-1:n}function at(t,e){var n=o.isPlainObject(t),r=Array.isArray(t);return n||r?(n&&o.isPlainObject(e)||r&&Array.isArray(e))&&JSON.stringify(t)===JSON.stringify(e):t===e}function ot(t,e,n,r){var i,a,l,c=r.getValObject,u=r.flags,h=r.immutable,d=r.inArray,f=r.arrayIndex;function p(){var t=i.editType;d&&-1!==t.indexOf(\"arraydraw\")?o.pushUnique(u.arrays[d],f):(T.update(u,i),\"none\"!==t&&u.nChanges++,r.transition&&i.anim&&u.nChangesAnim++,(q.test(l)||G.test(l))&&(u.rangesAltered[n[0]]=1),X.test(l)&&s(e,\"_inputDomain\").set(null),\"datarevision\"===a&&(u.newDataRevision=1))}function m(t){return\"data_array\"===t.valType||t.arrayOk}for(a in t){if(u.calc&&!r.transition)return;var g=t[a],y=e[a],v=n.concat(a);if(l=v.join(\".\"),\"_\"!==a.charAt(0)&&\"function\"!=typeof g&&g!==y){if((\"tick0\"===a||\"dtick\"===a)&&\"geo\"!==n[0]){var _=e.tickmode;if(\"auto\"===_||\"array\"===_||!_)continue}if((\"range\"!==a||!e.autorange)&&(\"zmin\"!==a&&\"zmax\"!==a||\"contourcarpet\"!==e.type)&&(i=c(v))&&(!i._compareAsJSON||JSON.stringify(g)!==JSON.stringify(y))){var b,x=i.valType,w=m(i),k=Array.isArray(g),M=Array.isArray(y);if(k&&M){var S=\"_input_\"+a,A=t[S],L=e[S];if(Array.isArray(A)&&A===L)continue}if(void 0===y)w&&k?u.calc=!0:p();else if(i._isLinkedToArray){var C=[],E=!1;d||(u.arrays[a]=C);var O=Math.min(g.length,y.length),D=Math.max(g.length,y.length);if(O!==D){if(\"arraydraw\"!==i.editType){p();continue}E=!0}for(b=0;b<O;b++)ot(g[b],y[b],v.concat(b),o.extendFlat({inArray:a,arrayIndex:b},r));if(E)for(b=O;b<D;b++)C.push(b)}else!x&&o.isPlainObject(g)?ot(g,y,v,r):w?k&&M?(h&&(u.calc=!0),(h||r.newDataRevision)&&p()):k!==M?u.calc=!0:p():k&&M&&g.length===y.length&&String(g)===String(y)||p()}}}for(a in e)if(!(a in t)&&\"_\"!==a.charAt(0)&&\"function\"!=typeof e[a]){if(m(i=c(n.concat(a)))&&Array.isArray(e[a]))return void(u.calc=!0);p()}}function st(t){var e=t._fullLayout,n=t.getBoundingClientRect();if(!o.equalDomRects(n,e._lastBBox)){var r=e._invTransform=o.inverseTransformMatrix(o.getFullTransformMatrix(t));e._invScaleX=Math.sqrt(r[0][0]*r[0][0]+r[0][1]*r[0][1]+r[0][2]*r[0][2]),e._invScaleY=Math.sqrt(r[1][0]*r[1][0]+r[1][1]*r[1][1]+r[1][2]*r[1][2]),e._lastBBox=n}}function lt(t){var e=r.select(t),n=t._fullLayout;if(n._calcInverseTransform=st,n._calcInverseTransform(t),n._container=e.selectAll(\".plot-container\").data([0]),n._container.enter().insert(\"div\",\":first-child\").classed(\"plot-container\",!0).classed(\"plotly\",!0),n._paperdiv=n._container.selectAll(\".svg-container\").data([0]),n._paperdiv.enter().append(\"div\").classed(\"user-select-none\",!0).classed(\"svg-container\",!0).style(\"position\",\"relative\"),n._glcontainer=n._paperdiv.selectAll(\".gl-container\").data([{}]),n._glcontainer.enter().append(\"div\").classed(\"gl-container\",!0),n._paperdiv.selectAll(\".main-svg\").remove(),n._paperdiv.select(\".modebar-container\").remove(),n._paper=n._paperdiv.insert(\"svg\",\":first-child\").classed(\"main-svg\",!0),n._toppaper=n._paperdiv.append(\"svg\").classed(\"main-svg\",!0),n._modebardiv=n._paperdiv.append(\"div\"),delete n._modeBar,n._hoverpaper=n._paperdiv.append(\"svg\").classed(\"main-svg\",!0),!n._uid){var i={};r.selectAll(\"defs\").each((function(){this.id&&(i[this.id.split(\"-\")[1]]=1)})),n._uid=o.randstr(i)}n._paperdiv.selectAll(\".main-svg\").attr(v.svgAttrs),n._defs=n._paper.append(\"defs\").attr(\"id\",\"defs-\"+n._uid),n._clips=n._defs.append(\"g\").classed(\"clips\",!0),n._topdefs=n._toppaper.append(\"defs\").attr(\"id\",\"topdefs-\"+n._uid),n._topclips=n._topdefs.append(\"g\").classed(\"clips\",!0),n._bgLayer=n._paper.append(\"g\").classed(\"bglayer\",!0),n._draggers=n._paper.append(\"g\").classed(\"draglayer\",!0);var a=n._paper.append(\"g\").classed(\"layer-below\",!0);n._imageLowerLayer=a.append(\"g\").classed(\"imagelayer\",!0),n._shapeLowerLayer=a.append(\"g\").classed(\"shapelayer\",!0),n._cartesianlayer=n._paper.append(\"g\").classed(\"cartesianlayer\",!0),n._polarlayer=n._paper.append(\"g\").classed(\"polarlayer\",!0),n._ternarylayer=n._paper.append(\"g\").classed(\"ternarylayer\",!0),n._geolayer=n._paper.append(\"g\").classed(\"geolayer\",!0),n._funnelarealayer=n._paper.append(\"g\").classed(\"funnelarealayer\",!0),n._pielayer=n._paper.append(\"g\").classed(\"pielayer\",!0),n._treemaplayer=n._paper.append(\"g\").classed(\"treemaplayer\",!0),n._sunburstlayer=n._paper.append(\"g\").classed(\"sunburstlayer\",!0),n._indicatorlayer=n._toppaper.append(\"g\").classed(\"indicatorlayer\",!0),n._glimages=n._paper.append(\"g\").classed(\"glimages\",!0);var s=n._toppaper.append(\"g\").classed(\"layer-above\",!0);n._imageUpperLayer=s.append(\"g\").classed(\"imagelayer\",!0),n._shapeUpperLayer=s.append(\"g\").classed(\"shapelayer\",!0),n._infolayer=n._toppaper.append(\"g\").classed(\"infolayer\",!0),n._menulayer=n._toppaper.append(\"g\").classed(\"menulayer\",!0),n._zoomlayer=n._toppaper.append(\"g\").classed(\"zoomlayer\",!0),n._hoverlayer=n._hoverpaper.append(\"g\").classed(\"hoverlayer\",!0),n._modebardiv.classed(\"modebar-container\",!0).style(\"position\",\"absolute\").style(\"top\",\"0px\").style(\"right\",\"0px\"),t.emit(\"plotly_framework\")}n.animate=function(t,e,n){if(t=o.getGraphDiv(t),!o.isPlotDiv(t))throw new Error(\"This element is not a Plotly plot: \"+t+\". It's likely that you've failed to create a plot before animating it. For more details, see https://plotly.com/javascript/animations/\");var r=t._transitionData;r._frameQueue||(r._frameQueue=[]);var i=(n=d.supplyAnimationDefaults(n)).transition,a=n.frame;function s(t){return Array.isArray(i)?t>=i.length?i[0]:i[t]:i}function l(t){return Array.isArray(a)?t>=a.length?a[0]:a[t]:a}function c(t,e){var n=0;return function(){if(t&&++n===e)return t()}}return void 0===r._frameWaitingCnt&&(r._frameWaitingCnt=0),new Promise((function(a,u){function h(){t.emit(\"plotly_animating\"),r._lastFrameAt=-1/0,r._timeToNext=0,r._runningTransitions=0,r._currentFrame=null;var e=function(){r._animationRaf=window.requestAnimationFrame(e),Date.now()-r._lastFrameAt>r._timeToNext&&function(){r._currentFrame&&r._currentFrame.onComplete&&r._currentFrame.onComplete();var e=r._currentFrame=r._frameQueue.shift();if(e){var n=e.name?e.name.toString():null;t._fullLayout._currentFrame=n,r._lastFrameAt=Date.now(),r._timeToNext=e.frameOpts.duration,d.transition(t,e.frame.data,e.frame.layout,k.coerceTraceIndices(t,e.frame.traces),e.frameOpts,e.transitionOpts).then((function(){e.onComplete&&e.onComplete()})),t.emit(\"plotly_animatingframe\",{name:n,frame:e.frame,animation:{frame:e.frameOpts,transition:e.transitionOpts}})}else t.emit(\"plotly_animated\"),window.cancelAnimationFrame(r._animationRaf),r._animationRaf=null}()};e()}var f,p,m=0;function g(t){return t.transitionOpts=Array.isArray(i)?m>=i.length?i[m]:i[0]:i,m++,t}var y=[],v=null==e,_=Array.isArray(e);if(v||_||!o.isPlainObject(e)){if(v||-1!==[\"string\",\"number\"].indexOf(typeof e))for(f=0;f<r._frames.length;f++)(p=r._frames[f])&&(v||String(p.group)===String(e))&&y.push({type:\"byname\",name:String(p.name),data:g({name:p.name})});else if(_)for(f=0;f<e.length;f++){var b=e[f];-1!==[\"number\",\"string\"].indexOf(typeof b)?(b=String(b),y.push({type:\"byname\",name:b,data:g({name:b})})):o.isPlainObject(b)&&y.push({type:\"object\",data:g(o.extendFlat({},b))})}}else y.push({type:\"object\",data:g(o.extendFlat({},e))});for(f=0;f<y.length;f++)if(\"byname\"===(p=y[f]).type&&!r._frameHash[p.data.name])return o.warn('animate failure: frame not found: \"'+p.data.name+'\"'),void u();-1!==[\"next\",\"immediate\"].indexOf(n.mode)&&function(){if(0!==r._frameQueue.length){for(;r._frameQueue.length;){var e=r._frameQueue.pop();e.onInterrupt&&e.onInterrupt()}t.emit(\"plotly_animationinterrupted\",[])}}(),\"reverse\"===n.direction&&y.reverse();var x=t._fullLayout._currentFrame;if(x&&n.fromcurrent){var w=-1;for(f=0;f<y.length;f++)if(\"byname\"===(p=y[f]).type&&p.name===x){w=f;break}if(w>0&&w<y.length-1){var M=[];for(f=0;f<y.length;f++)p=y[f],(\"byname\"!==y[f].type||f>w)&&M.push(p);y=M}}y.length>0?function(e){if(0!==e.length){for(var i=0;i<e.length;i++){var o;o=\"byname\"===e[i].type?d.computeFrame(t,e[i].name):e[i].data;var f=l(i),p=s(i);p.duration=Math.min(p.duration,f.duration);var m={frame:o,name:e[i].name,frameOpts:f,transitionOpts:p};i===e.length-1&&(m.onComplete=c(a,2),m.onInterrupt=u),r._frameQueue.push(m)}\"immediate\"===n.mode&&(r._lastFrameAt=-1/0),r._animationRaf||h()}}(y):(t.emit(\"plotly_animated\"),a())}))},n.addFrames=function(t,e,n){if(t=o.getGraphDiv(t),null==e)return Promise.resolve();if(!o.isPlotDiv(t))throw new Error(\"This element is not a Plotly plot: \"+t+\". It's likely that you've failed to create a plot before adding frames. For more details, see https://plotly.com/javascript/animations/\");var r,i,a,s,l=t._transitionData._frames,u=t._transitionData._frameHash;if(!Array.isArray(e))throw new Error(\"addFrames failure: frameList must be an Array of frame definitions\"+e);var h=l.length+2*e.length,f=[],p={};for(r=e.length-1;r>=0;r--)if(o.isPlainObject(e[r])){var m=e[r].name,g=(u[m]||p[m]||{}).name,y=e[r].name;g&&y&&\"number\"==typeof y&&(u[g]||p[g])&&A<5&&(A++,o.warn('addFrames: overwriting frame \"'+(u[g]||p[g]).name+'\" with a frame whose name of type \"number\" also equates to \"'+g+'\". This is valid but may potentially lead to unexpected behavior since all plotly.js frame names are stored internally as strings.'),5===A&&o.warn(\"addFrames: This API call has yielded too many of these warnings. For the rest of this call, further warnings about numeric frame names will be suppressed.\")),p[m]={name:m},f.push({frame:d.supplyFrameDefaults(e[r]),index:n&&null!=n[r]?n[r]:h+r})}f.sort((function(t,e){return t.index>e.index?-1:t.index<e.index?1:0}));var v=[],_=[],b=l.length;for(r=f.length-1;r>=0;r--){if(\"number\"==typeof(i=f[r].frame).name&&o.warn(\"Warning: addFrames accepts frames with numeric names, but the numbers areimplicitly cast to strings\"),!i.name)for(;u[i.name=\"frame \"+t._transitionData._counter++];);if(u[i.name]){for(a=0;a<l.length&&(l[a]||{}).name!==i.name;a++);v.push({type:\"replace\",index:a,value:i}),_.unshift({type:\"replace\",index:a,value:l[a]})}else s=Math.max(0,Math.min(f[r].index,b)),v.push({type:\"insert\",index:s,value:i}),_.unshift({type:\"delete\",index:s}),b++}return c&&c.add(t,d.modifyFrames,[t,_],d.modifyFrames,[t,v]),d.modifyFrames(t,v)},n.deleteFrames=function(t,e){if(t=o.getGraphDiv(t),!o.isPlotDiv(t))throw new Error(\"This element is not a Plotly plot: \"+t);var n,r,i=t._transitionData._frames,a=[],s=[];if(!e)for(e=[],n=0;n<i.length;n++)e.push(n);for((e=e.slice()).sort(),n=e.length-1;n>=0;n--)a.push({type:\"delete\",index:r=e[n]}),s.unshift({type:\"insert\",index:r,value:i[r]});return c&&c.add(t,d.modifyFrames,[t,s],d.modifyFrames,[t,a]),d.modifyFrames(t,a)},n.addTraces=function t(e,r,i){e=o.getGraphDiv(e);var a,s,l=[],u=n.deleteTraces,h=t,d=[e,l],f=[e,r];for(function(t,e,n){var r,i;if(!Array.isArray(t.data))throw new Error(\"gd.data must be an array.\");if(void 0===e)throw new Error(\"traces must be defined.\");for(Array.isArray(e)||(e=[e]),r=0;r<e.length;r++)if(\"object\"!=typeof(i=e[r])||Array.isArray(i)||null===i)throw new Error(\"all values in traces array must be non-array objects\");if(void 0===n||Array.isArray(n)||(n=[n]),void 0!==n&&n.length!==e.length)throw new Error(\"if indices is specified, traces.length must equal indices.length\")}(e,r,i),Array.isArray(r)||(r=[r]),r=r.map((function(t){return o.extendFlat({},t)})),k.cleanData(r),a=0;a<r.length;a++)e.data.push(r[a]);for(a=0;a<r.length;a++)l.push(-r.length+a);if(void 0===i)return s=n.redraw(e),c.add(e,u,d,h,f),s;Array.isArray(i)||(i=[i]);try{P(e,l,i)}catch(p){throw e.data.splice(e.data.length-r.length,r.length),p}return c.startSequence(e),c.add(e,u,d,h,f),s=n.moveTraces(e,l,i),c.stopSequence(e),s},n.deleteTraces=function t(e,r){e=o.getGraphDiv(e);var i,a,s=[],l=n.addTraces,u=t,h=[e,s,r],d=[e,r];if(void 0===r)throw new Error(\"indices must be an integer or array of integers.\");for(Array.isArray(r)||(r=[r]),I(e,r,\"indices\"),(r=D(r,e.data.length-1)).sort(o.sorterDes),i=0;i<r.length;i+=1)a=e.data.splice(r[i],1)[0],s.push(a);var f=n.redraw(e);return c.add(e,l,h,u,d),f},n.extendTraces=function t(e,r,i,a){function s(t,e,n){var r,i;if(o.isTypedArray(t))if(n<0){var a=new t.constructor(0),s=z(t,e);n<0?(r=s,i=a):(r=a,i=s)}else if(r=new t.constructor(n),i=new t.constructor(t.length+e.length-n),n===e.length)r.set(e),i.set(t);else if(n<e.length){var l=e.length-n;r.set(e.subarray(l)),i.set(t),i.set(e.subarray(0,l),t.length)}else{var c=n-e.length,u=t.length-c;r.set(t.subarray(u)),r.set(e,c),i.set(t.subarray(0,u))}else r=t.concat(e),i=n>=0&&n<r.length?r.splice(0,r.length-n):[];return[r,i]}var l=R(e=o.getGraphDiv(e),r,i,a,s),u=n.redraw(e);return c.add(e,n.prependTraces,[e,l.update,i,l.maxPoints],t,arguments),u},n.moveTraces=function t(e,r,i){var a,s=[],l=[],u=t,h=t,d=[e=o.getGraphDiv(e),i,r],f=[e,r,i];if(P(e,r,i),r=Array.isArray(r)?r:[r],void 0===i)for(i=[],a=0;a<r.length;a++)i.push(-r.length+a);for(i=Array.isArray(i)?i:[i],r=D(r,e.data.length-1),i=D(i,e.data.length-1),a=0;a<e.data.length;a++)-1===r.indexOf(a)&&s.push(e.data[a]);for(a=0;a<r.length;a++)l.push({newIndex:i[a],trace:e.data[r[a]]});for(l.sort((function(t,e){return t.newIndex-e.newIndex})),a=0;a<l.length;a+=1)s.splice(l[a].newIndex,0,l[a].trace);e.data=s;var p=n.redraw(e);return c.add(e,u,d,h,f),p},n.prependTraces=function t(e,r,i,a){function s(t,e,n){var r,i;if(o.isTypedArray(t))if(n<=0){var a=new t.constructor(0),s=z(e,t);n<0?(r=s,i=a):(r=a,i=s)}else if(r=new t.constructor(n),i=new t.constructor(t.length+e.length-n),n===e.length)r.set(e),i.set(t);else if(n<e.length){var l=e.length-n;r.set(e.subarray(0,l)),i.set(e.subarray(l)),i.set(t,l)}else{var c=n-e.length;r.set(e),r.set(t.subarray(0,c),e.length),i.set(t.subarray(c))}else r=e.concat(t),i=n>=0&&n<r.length?r.splice(n,r.length):[];return[r,i]}var l=R(e=o.getGraphDiv(e),r,i,a,s),u=n.redraw(e);return c.add(e,n.extendTraces,[e,l.update,i,l.maxPoints],t,arguments),u},n.newPlot=function(t,e,r,i){return t=o.getGraphDiv(t),d.cleanPlot([],{},t._fullData||[],t._fullLayout||{}),d.purge(t),n.plot(t,e,r,i)},n.plot=function(t,e,i,a){var s;if(t=o.getGraphDiv(t),l.init(t),o.isPlainObject(e)){var c=e;e=c.data,i=c.layout,a=c.config,s=c.frames}if(!1===l.triggerHandler(t,\"plotly_beforeplot\",[e,i,a]))return Promise.reject();e||i||o.isPlotDiv(t)||o.warn(\"Calling Plotly.plot as if redrawing but this container doesn't yet have a plot.\",t),O(t,a),i||(i={}),r.select(t).classed(\"js-plotly-plot\",!0),m.makeTester(),Array.isArray(t._promises)||(t._promises=[]);var h=0===(t.data||[]).length&&Array.isArray(e);Array.isArray(e)&&(k.cleanData(e),h?t.data=e:t.data.push.apply(t.data,e),t.empty=!1),t.layout&&!h||(t.layout=k.cleanLayout(i)),d.supplyDefaults(t);var g=t._fullLayout,v=g._has(\"cartesian\");if(!g._has(\"polar\")&&e&&e[0]&&e[0].r)return o.log(\"Legacy polar charts are deprecated!\"),function(t,e,n){var i=r.select(t).selectAll(\".plot-container\").data([0]);i.enter().insert(\"div\",\":first-child\").classed(\"plot-container plotly\",!0);var a=i.selectAll(\".svg-container\").data([0]);a.enter().append(\"div\").classed(\"svg-container\",!0).style(\"position\",\"relative\"),a.html(\"\"),e&&(t.data=e),n&&(t.layout=n),f.manager.fillLayout(t),a.style({width:t._fullLayout.width+\"px\",height:t._fullLayout.height+\"px\"}),t.framework=f.manager.framework(t),t.framework({data:t.data,layout:t.layout},a.node()),t.framework.setUndoPoint();var s=t.framework.svg(),l=1,c=t._fullLayout.title?t._fullLayout.title.text:\"\";\"\"!==c&&c||(l=0);var u=function(){this.call(_.convertToTspans,t)},h=s.select(\".title-group text\").call(u);if(t._context.edits.titleText){var p=o._(t,\"Click to enter Plot title\");c&&c!==p||(l=.2,h.attr({\"data-unformatted\":p}).text(p).style({opacity:l}).on(\"mouseover.opacity\",(function(){r.select(this).transition().duration(100).style(\"opacity\",1)})).on(\"mouseout.opacity\",(function(){r.select(this).transition().duration(1e3).style(\"opacity\",0)})));var m=function(){this.call(_.makeEditable,{gd:t}).on(\"edit\",(function(e){t.framework({layout:{title:{text:e}}}),this.text(e).call(u),this.call(m)})).on(\"cancel\",(function(){var t=this.attr(\"data-unformatted\");this.text(t).call(u)}))};h.call(m)}return t._context.setBackground(t,t._fullLayout.paper_bgcolor),d.addLinks(t),Promise.resolve()}(t,e,i);g._replotting=!0,(h||g._shouldCreateBgLayer)&&(lt(t),g._shouldCreateBgLayer&&delete g._shouldCreateBgLayer),t.framework!==lt&&(t.framework=lt,lt(t)),m.initGradients(t),h&&p.saveShowSpikeInitial(t);var b=!t.calcdata||t.calcdata.length!==(t._fullData||[]).length;b&&d.doCalcdata(t);for(var x=0;x<t.calcdata.length;x++)t.calcdata[x][0].trace=t._fullData[x];t._context.responsive?t._responsiveChartHandler||(t._responsiveChartHandler=function(){o.isHidden(t)||d.resize(t)},window.addEventListener(\"resize\",t._responsiveChartHandler)):o.clearResponsive(t);var w=o.extendFlat({},g._size),T=0;function S(){if(d.clearAutoMarginIds(t),M.drawMarginPushers(t),p.allowAutoMargin(t),g._has(\"pie\"))for(var e=t._fullData,n=0;n<e.length;n++){var r=e[n];\"pie\"===r.type&&r.automargin&&d.allowAutoMargin(t,\"pie.\"+r.uid+\".automargin\")}return d.doAutoMargin(t),d.previousPromises(t)}function A(){t._transitioning||(M.doAutoRangeAndConstraints(t),h&&p.saveRangeInitial(t),u.getComponentMethod(\"rangeslider\",\"calcAutorange\")(t))}var C=[d.previousPromises,function(){if(s)return n.addFrames(t,s)},function e(){for(var n=g._basePlotModules,r=0;r<n.length;r++)n[r].drawFramework&&n[r].drawFramework(t);if(!g._glcanvas&&g._has(\"gl\")&&(g._glcanvas=g._glcontainer.selectAll(\".gl-canvas\").data([{key:\"contextLayer\",context:!0,pick:!1},{key:\"focusLayer\",context:!1,pick:!1},{key:\"pickLayer\",context:!1,pick:!0}],(function(t){return t.key})),g._glcanvas.enter().append(\"canvas\").attr(\"class\",(function(t){return\"gl-canvas gl-canvas-\"+t.key.replace(\"Layer\",\"\")})).style({position:\"absolute\",top:0,left:0,overflow:\"visible\",\"pointer-events\":\"none\"})),g._glcanvas){g._glcanvas.attr(\"width\",g.width).attr(\"height\",g.height);var i=g._glcanvas.data()[0].regl;if(i&&(Math.floor(g.width)!==i._gl.drawingBufferWidth||Math.floor(g.height)!==i._gl.drawingBufferHeight)){var a=\"WebGL context buffer and canvas dimensions do not match due to browser/WebGL bug.\";if(!T)return o.log(a+\" Clearing graph and plotting again.\"),d.cleanPlot([],{},t._fullData,g),d.supplyDefaults(t),g=t._fullLayout,d.doCalcdata(t),T++,e();o.error(a)}}return\"h\"===g.modebar.orientation?g._modebardiv.style(\"height\",null).style(\"width\",\"100%\"):g._modebardiv.style(\"width\",null).style(\"height\",g.height+\"px\"),d.previousPromises(t)},S,function(){if(d.didMarginChange(w,g._size))return o.syncOrAsync([S,M.layoutStyles],t)}];v&&C.push((function(){if(b)return o.syncOrAsync([u.getComponentMethod(\"shapes\",\"calcAutorange\"),u.getComponentMethod(\"annotations\",\"calcAutorange\"),A],t);A()})),C.push(M.layoutStyles),v&&C.push((function(){return p.draw(t,h?\"\":\"redraw\")}),(function(t){t._fullLayout._insideTickLabelsAutorange&&V(t,t._fullLayout._insideTickLabelsAutorange).then((function(){t._fullLayout._insideTickLabelsAutorange=void 0}))})),C.push(M.drawData,M.finalDraw,y,d.addLinks,d.rehover,d.redrag,d.doAutoMargin,(function(t){t._fullLayout._insideTickLabelsAutorange&&h&&p.saveRangeInitial(t,!0)}),d.previousPromises);var E=o.syncOrAsync(C,t);return E&&E.then||(E=Promise.resolve()),E.then((function(){return L(t),t}))},n.purge=function(t){var e=(t=o.getGraphDiv(t))._fullLayout||{};return d.cleanPlot([],{},t._fullData||[],e),d.purge(t),l.purge(t),e._container&&e._container.remove(),delete t._context,t},n.react=function(t,e,r,i){var a,l;t=o.getGraphDiv(t),k.clearPromiseQueue(t);var c=t._fullData,f=t._fullLayout;if(o.isPlotDiv(t)&&c&&f){if(o.isPlainObject(e)){var p=e;e=p.data,r=p.layout,i=p.config,a=p.frames}var m=!1;if(i){var g=o.extendDeep({},t._context);t._context=void 0,O(t,i),m=function t(e,n){var r;for(r in e)if(\"_\"!==r.charAt(0)){var i=e[r],a=n[r];if(i!==a)if(o.isPlainObject(i)&&o.isPlainObject(a)){if(t(i,a))return!0}else{if(!Array.isArray(i)||!Array.isArray(a))return!0;if(i.length!==a.length)return!0;for(var s=0;s<i.length;s++)if(i[s]!==a[s]){if(!o.isPlainObject(i[s])||!o.isPlainObject(a[s]))return!0;if(t(i[s],a[s]))return!0}}}}(g,t._context)}t.data=e||[],k.cleanData(t.data),t.layout=r||{},k.cleanLayout(t.layout),function(t,e,n,r){var i,a,l,c,u,h,d,f,p=r._preGUI,m=[],g={};for(i in p){if(u=et(i,Q)){if((c=(l=s(r,a=u.attr||u.head+\".uirevision\").get())&&nt(a,e))&&c===l&&(null===(h=p[i])&&(h=void 0),at(f=(d=s(e,i)).get(),h))){void 0===f&&\"autorange\"===i.substr(i.length-9)&&m.push(i.substr(0,i.length-10)),d.set(F(s(r,i).get()));continue}}else o.warn(\"unrecognized GUI edit: \"+i);delete p[i],\"range[\"===i.substr(i.length-8,6)&&(g[i.substr(0,i.length-9)]=1)}for(var y=0;y<m.length;y++){var v=m[y];if(g[v]){var _=s(e,v).get();_&&delete _.autorange}}var b=r._tracePreGUI;for(var x in b){var w,k=b[x],M=null;for(i in k){if(!M){var T=rt(x,n);if(T<0){delete b[x];break}var S=it(x,t,(w=n[T]._fullInput).index);if(S<0){delete b[x];break}M=t[S]}if(u=et(i,tt)){if(u.attr?c=(l=s(r,u.attr).get())&&nt(u.attr,e):(l=w.uirevision,void 0===(c=M.uirevision)&&(c=e.uirevision)),c&&c===l&&(null===(h=k[i])&&(h=void 0),at(f=(d=s(M,i)).get(),h))){d.set(F(s(w,i).get()));continue}}else o.warn(\"unrecognized GUI edit: \"+i+\" in trace uid \"+x);delete k[i]}}}(t.data,t.layout,c,f),d.supplyDefaults(t,{skipUpdateCalc:!0});var y=t._fullData,v=t._fullLayout,_=void 0===v.datarevision,b=v.transition,x=function(t,e,n,r,i){var a=T.layoutFlags();return a.arrays={},a.rangesAltered={},a.nChanges=0,a.nChangesAnim=0,ot(e,n,[],{getValObject:function(t){return h.getLayoutValObject(n,t)},flags:a,immutable:r,transition:i,gd:t}),(a.plot||a.calc)&&(a.layoutReplot=!0),i&&a.nChanges&&a.nChangesAnim&&(a.anim=a.nChanges===a.nChangesAnim?\"all\":\"some\"),a}(t,f,v,_,b),w=function(t,e,n,r,i,a){var o=e.length===n.length;if(!i&&!o)return{fullReplot:!0,calc:!0};var s,l,c=T.traceFlags();c.arrays={},c.nChanges=0,c.nChangesAnim=0;var u={getValObject:function(t){var e=h.getTraceValObject(l,t);return!l._module.animatable&&e.anim&&(e.anim=!1),e},flags:c,immutable:r,transition:i,newDataRevision:a,gd:t},f={};for(s=0;s<e.length;s++)if(n[s]){if(d.hasMakesDataTransform(l=n[s]._fullInput)&&(l=n[s]),f[l.uid])continue;f[l.uid]=1,ot(e[s]._fullInput,l,[],u)}return(c.calc||c.plot)&&(c.fullReplot=!0),i&&c.nChanges&&c.nChangesAnim&&(c.anim=c.nChanges===c.nChangesAnim&&o?\"all\":\"some\"),c}(t,c,y,_,b,x.newDataRevision);if(J(t)&&(x.layoutReplot=!0),w.calc||x.calc){t.calcdata=void 0;for(var S=Object.getOwnPropertyNames(v),A=0;A<S.length;A++){var C=S[A],E=C.substring(0,5);if(\"xaxis\"===E||\"yaxis\"===E){var D=v[C]._emptyCategories;D&&D()}}}else d.supplyDefaultsUpdateCalc(t.calcdata,y);var I=[];if(a&&(t._transitionData={},d.createTransitionData(t),I.push((function(){return n.addFrames(t,a)}))),v.transition&&!m&&(w.anim||x.anim))x.ticks&&I.push(M.doTicksRelayout),d.doCalcdata(t),M.doAutoRangeAndConstraints(t),I.push((function(){return d.transitionFromReact(t,w,x,f)}));else if(w.fullReplot||x.layoutReplot||m)t._fullLayout._skipDefaults=!0,I.push(n.plot);else{for(var P in x.arrays){var R=x.arrays[P];if(R.length){var z=u.getComponentMethod(P,\"drawOne\");if(z!==o.noop)for(var j=0;j<R.length;j++)z(t,R[j]);else{var N=u.getComponentMethod(P,\"draw\");if(N===o.noop)throw new Error(\"cannot draw components: \"+P);N(t)}}}I.push(d.previousPromises),w.style&&I.push(M.doTraceStyle),(w.colorbars||x.colorbars)&&I.push(M.doColorBars),x.legend&&I.push(M.doLegend),x.layoutstyle&&I.push(M.layoutStyles),x.axrange&&W(I),x.ticks&&I.push(M.doTicksRelayout),x.modebar&&I.push(M.doModeBar),x.camera&&I.push(M.doCamera),I.push(L)}I.push(d.rehover,d.redrag),(l=o.syncOrAsync(I,t))&&l.then||(l=Promise.resolve(t))}else l=n.newPlot(t,e,r,i);return l.then((function(){return t.emit(\"plotly_react\",{data:e,layout:r}),t}))},n.redraw=function(t){if(t=o.getGraphDiv(t),!o.isPlotDiv(t))throw new Error(\"This element is not a Plotly plot: \"+t);return k.cleanData(t.data),k.cleanLayout(t.layout),t.calcdata=void 0,n.plot(t).then((function(){return t.emit(\"plotly_redraw\"),t}))},n.relayout=V,n.restyle=j,n.setPlotConfig=function(t){return o.extendFlat(x,t)},n.update=K,n._guiRelayout=$(V),n._guiRestyle=$(j),n._guiUpdate=$(K),n._storeDirectGUIEdit=function(t,e,n){for(var r in n)B(r,s(t,r).get(),n[r],e)}},{\"../components/color\":643,\"../components/drawing\":665,\"../constants/xmlns_namespaces\":754,\"../lib\":778,\"../lib/events\":767,\"../lib/queue\":794,\"../lib/svg_text_utils\":803,\"../plots/cartesian/axes\":828,\"../plots/cartesian/constants\":834,\"../plots/cartesian/graph_interact\":837,\"../plots/cartesian/select\":847,\"../plots/plots\":891,\"../plots/polar/legacy\":899,\"../registry\":911,\"./edit_types\":810,\"./helpers\":811,\"./manage_arrays\":813,\"./plot_config\":815,\"./plot_schema\":816,\"./subroutines\":818,d3:169,\"fast-isnumeric\":241,\"has-hover\":440}],815:[function(t,e,n){\"use strict\";var r={staticPlot:{valType:\"boolean\",dflt:!1},plotlyServerURL:{valType:\"string\",dflt:\"\"},editable:{valType:\"boolean\",dflt:!1},edits:{annotationPosition:{valType:\"boolean\",dflt:!1},annotationTail:{valType:\"boolean\",dflt:!1},annotationText:{valType:\"boolean\",dflt:!1},axisTitleText:{valType:\"boolean\",dflt:!1},colorbarPosition:{valType:\"boolean\",dflt:!1},colorbarTitleText:{valType:\"boolean\",dflt:!1},legendPosition:{valType:\"boolean\",dflt:!1},legendText:{valType:\"boolean\",dflt:!1},shapePosition:{valType:\"boolean\",dflt:!1},titleText:{valType:\"boolean\",dflt:!1}},autosizable:{valType:\"boolean\",dflt:!1},responsive:{valType:\"boolean\",dflt:!1},fillFrame:{valType:\"boolean\",dflt:!1},frameMargins:{valType:\"number\",dflt:0,min:0,max:.5},scrollZoom:{valType:\"flaglist\",flags:[\"cartesian\",\"gl3d\",\"geo\",\"mapbox\"],extras:[!0,!1],dflt:\"gl3d+geo+mapbox\"},doubleClick:{valType:\"enumerated\",values:[!1,\"reset\",\"autosize\",\"reset+autosize\"],dflt:\"reset+autosize\"},doubleClickDelay:{valType:\"number\",dflt:300,min:0},showAxisDragHandles:{valType:\"boolean\",dflt:!0},showAxisRangeEntryBoxes:{valType:\"boolean\",dflt:!0},showTips:{valType:\"boolean\",dflt:!0},showLink:{valType:\"boolean\",dflt:!1},linkText:{valType:\"string\",dflt:\"Edit chart\",noBlank:!0},sendData:{valType:\"boolean\",dflt:!0},showSources:{valType:\"any\",dflt:!1},displayModeBar:{valType:\"enumerated\",values:[\"hover\",!0,!1],dflt:\"hover\"},showSendToCloud:{valType:\"boolean\",dflt:!1},showEditInChartStudio:{valType:\"boolean\",dflt:!1},modeBarButtonsToRemove:{valType:\"any\",dflt:[]},modeBarButtonsToAdd:{valType:\"any\",dflt:[]},modeBarButtons:{valType:\"any\",dflt:!1},toImageButtonOptions:{valType:\"any\",dflt:{}},displaylogo:{valType:\"boolean\",dflt:!0},watermark:{valType:\"boolean\",dflt:!1},plotGlPixelRatio:{valType:\"number\",dflt:2,min:1,max:4},setBackground:{valType:\"any\",dflt:\"transparent\"},topojsonURL:{valType:\"string\",noBlank:!0,dflt:\"https://cdn.plot.ly/\"},mapboxAccessToken:{valType:\"string\",dflt:null},logging:{valType:\"integer\",min:0,max:2,dflt:1},notifyOnLogging:{valType:\"integer\",min:0,max:2,dflt:0},queueLength:{valType:\"integer\",min:0,dflt:0},globalTransforms:{valType:\"any\",dflt:[]},locale:{valType:\"string\",dflt:\"en-US\"},locales:{valType:\"any\",dflt:{}}},i={};(function t(e,n){for(var r in e){var i=e[r];i.valType?n[r]=i.dflt:(n[r]||(n[r]={}),t(i,n[r]))}})(r,i),e.exports={configAttributes:r,dfltConfig:i}},{}],816:[function(t,e,n){\"use strict\";var r=t(\"../registry\"),i=t(\"../lib\"),a=t(\"../plots/attributes\"),o=t(\"../plots/layout_attributes\"),s=t(\"../plots/frame_attributes\"),l=t(\"../plots/animation_attributes\"),c=t(\"./plot_config\").configAttributes,u=t(\"../plots/polar/legacy/area_attributes\"),h=t(\"../plots/polar/legacy/axis_attributes\"),d=t(\"./edit_types\"),f=i.extendFlat,p=i.extendDeepAll,m=i.isPlainObject,g=i.isArrayOrTypedArray,y=i.nestedProperty,v=i.valObjectMeta,_=\"_isSubplotObj\",b=\"_isLinkedToArray\",x=\"_deprecated\",w=[_,b,\"_arrayAttrRegexps\",x];function k(t,e,n){if(!t)return!1;if(t._isLinkedToArray)if(M(e[n]))n++;else if(n<e.length)return!1;for(;n<e.length;n++){var r=t[e[n]];if(!m(r))break;if(t=r,n===e.length-1)break;if(t._isLinkedToArray){if(!M(e[++n]))return!1}else if(\"info_array\"===t.valType){var i=e[++n];if(!M(i))return!1;var a=t.items;if(Array.isArray(a)){if(i>=a.length)return!1;if(2===t.dimensions){if(n++,e.length===n)return t;var o=e[n];if(!M(o))return!1;t=a[i][o]}else t=a[i]}else t=a}}return t}function M(t){return t===Math.round(t)&&t>=0}function T(){var t,e,n={};for(t in p(n,o),r.subplotsRegistry)if((e=r.subplotsRegistry[t]).layoutAttributes)if(Array.isArray(e.attr))for(var i=0;i<e.attr.length;i++)A(n,e,e.attr[i]);else A(n,e,\"subplot\"===e.attr?e.name:e.attr);for(t in n=function(t){return f(t,{radialaxis:h.radialaxis,angularaxis:h.angularaxis}),f(t,h.layout),t}(n),r.componentsRegistry){var a=(e=r.componentsRegistry[t]).schema;if(a&&(a.subplots||a.layout)){var s=a.subplots;if(s&&s.xaxis&&!s.yaxis)for(var l in s.xaxis)delete n.yaxis[l]}else\"colorscale\"===e.name?p(n,e.layoutAttributes):e.layoutAttributes&&L(n,e.layoutAttributes,e.name)}return{layoutAttributes:S(n)}}function S(t){return function(t){n.crawl(t,(function(t,e,r){n.isValObject(t)?\"data_array\"===t.valType?(t.role=\"data\",r[e+\"src\"]={valType:\"string\",editType:\"none\"}):!0===t.arrayOk&&(r[e+\"src\"]={valType:\"string\",editType:\"none\"}):m(t)&&(t.role=\"object\")}))}(t),function(t){n.crawl(t,(function(t,e,n){if(t){var r=t._isLinkedToArray;r&&(delete t._isLinkedToArray,n[e]={items:{}},n[e].items[r]=t,n[e].role=\"object\")}}))}(t),function(t){!function t(e){for(var n in e)if(m(e[n]))t(e[n]);else if(Array.isArray(e[n]))for(var r=0;r<e[n].length;r++)t(e[n][r]);else e[n]instanceof RegExp&&(e[n]=e[n].toString())}(t)}(t),t}function A(t,e,n){var r=y(t,n),i=p({},e.layoutAttributes);i._isSubplotObj=!0,r.set(i)}function L(t,e,n){var r=y(t,n);r.set(p(r.get()||{},e))}n.IS_SUBPLOT_OBJ=_,n.IS_LINKED_TO_ARRAY=b,n.DEPRECATED=x,n.UNDERSCORE_ATTRS=w,n.get=function(){var t={};r.allTypes.concat(\"area\").forEach((function(e){t[e]=function(t){var e,i;\"area\"===t?(e={attributes:u},i={}):i=(e=r.modules[t]._module).basePlotModule;var o={type:null},s=p({},a),l=p({},e.attributes);n.crawl(l,(function(t,e,n,r,i){y(s,i).set(void 0),void 0===t&&y(l,i).set(void 0)})),p(o,s),r.traceIs(t,\"noOpacity\")&&delete o.opacity,r.traceIs(t,\"showLegend\")||(delete o.showlegend,delete o.legendgroup),r.traceIs(t,\"noHover\")&&(delete o.hoverinfo,delete o.hoverlabel),e.selectPoints||delete o.selectedpoints,p(o,l),i.attributes&&p(o,i.attributes),o.type=t;var c={meta:e.meta||{},categories:e.categories||{},animatable:Boolean(e.animatable),type:t,attributes:S(o)};if(e.layoutAttributes){var h={};p(h,e.layoutAttributes),c.layoutAttributes=S(h)}return e.animatable||n.crawl(c,(function(t){n.isValObject(t)&&\"anim\"in t&&delete t.anim})),c}(e)}));var e,i={};return Object.keys(r.transformsRegistry).forEach((function(t){i[t]=function(t){var e=p({},r.transformsRegistry[t].attributes);return Object.keys(r.componentsRegistry).forEach((function(n){var i=r.componentsRegistry[n];i.schema&&i.schema.transforms&&i.schema.transforms[t]&&Object.keys(i.schema.transforms[t]).forEach((function(n){L(e,i.schema.transforms[t][n],n)}))})),{attributes:S(e)}}(t)})),{defs:{valObjects:v,metaKeys:w.concat([\"description\",\"role\",\"editType\",\"impliedEdits\"]),editType:{traces:d.traces,layout:d.layout},impliedEdits:{}},traces:t,layout:T(),transforms:i,frames:(e={frames:p({},s)},S(e),e.frames),animation:S(l),config:S(c)}},n.crawl=function(t,e,r,i){var a=r||0;i=i||\"\",Object.keys(t).forEach((function(r){var o=t[r];if(-1===w.indexOf(r)){var s=(i?i+\".\":\"\")+r;e(o,r,t,a,s),n.isValObject(o)||m(o)&&\"impliedEdits\"!==r&&n.crawl(o,e,a+1,s)}}))},n.isValObject=function(t){return t&&void 0!==t.valType},n.findArrayAttributes=function(t){var e,r,i=[],o=[],s=[];function l(t,n,a,l){o=o.slice(0,l).concat([n]),s=s.slice(0,l).concat([t&&t._isLinkedToArray]),t&&(\"data_array\"===t.valType||!0===t.arrayOk)&&(\"colorbar\"!==o[l-1]||\"ticktext\"!==n&&\"tickvals\"!==n)&&function t(e,n,a){var l=e[o[n]],c=a+o[n];if(n===o.length-1)g(l)&&i.push(r+c);else if(s[n]){if(Array.isArray(l))for(var u=0;u<l.length;u++)m(l[u])&&t(l[u],n+1,c+\"[\"+u+\"].\")}else m(l)&&t(l,n+1,c+\".\")}(e,0,\"\")}e=t,r=\"\",n.crawl(a,l),t._module&&t._module.attributes&&n.crawl(t._module.attributes,l);var c=t.transforms;if(c)for(var u=0;u<c.length;u++){var h=c[u],d=h._module;d&&(r=\"transforms[\"+u+\"].\",e=h,n.crawl(d.attributes,l))}return i},n.getTraceValObject=function(t,e){var n,i,o=e[0],s=1;if(\"transforms\"===o){if(1===e.length)return a.transforms;var l=t.transforms;if(!Array.isArray(l)||!l.length)return!1;var c=e[1];if(!M(c)||c>=l.length)return!1;i=(n=(r.transformsRegistry[l[c].type]||{}).attributes)&&n[e[2]],s=3}else if(\"area\"===t.type)i=u[o];else{var h=t._module;if(h||(h=(r.modules[t.type||a.type.dflt]||{})._module),!h)return!1;if(!(i=(n=h.attributes)&&n[o])){var d=h.basePlotModule;d&&d.attributes&&(i=d.attributes[o])}i||(i=a[o])}return k(i,e,s)},n.getLayoutValObject=function(t,e){return k(function(t,e){var n,i,a,s,l=t._basePlotModules;if(l){var c;for(n=0;n<l.length;n++){if((a=l[n]).attrRegex&&a.attrRegex.test(e)){if(a.layoutAttrOverrides)return a.layoutAttrOverrides;!c&&a.layoutAttributes&&(c=a.layoutAttributes)}var u=a.baseLayoutAttrOverrides;if(u&&e in u)return u[e]}if(c)return c}var d=t._modules;if(d)for(n=0;n<d.length;n++)if((s=d[n].layoutAttributes)&&e in s)return s[e];for(i in r.componentsRegistry){if(\"colorscale\"===(a=r.componentsRegistry[i]).name&&0===e.indexOf(\"coloraxis\"))return a.layoutAttributes[e];if(!a.schema&&e===a.name)return a.layoutAttributes}return e in o?o[e]:\"radialaxis\"===e||\"angularaxis\"===e?h[e]:h.layout[e]||!1}(t,e[0]),e,1)}},{\"../lib\":778,\"../plots/animation_attributes\":822,\"../plots/attributes\":824,\"../plots/frame_attributes\":857,\"../plots/layout_attributes\":882,\"../plots/polar/legacy/area_attributes\":897,\"../plots/polar/legacy/axis_attributes\":898,\"../registry\":911,\"./edit_types\":810,\"./plot_config\":815}],817:[function(t,e,n){\"use strict\";var r=t(\"../lib\"),i=t(\"../plots/attributes\"),a={name:{valType:\"string\",editType:\"none\"}};function o(t){return t&&\"string\"==typeof t}function s(t){return\"s\"!==t.charAt(t.length-1)&&r.warn(\"bad argument to arrayDefaultKey: \"+t),t.substr(0,t.length-1)+\"defaults\"}a.templateitemname={valType:\"string\",editType:\"calc\"},n.templatedArray=function(t,e){return e._isLinkedToArray=t,e.name=a.name,e.templateitemname=a.templateitemname,e},n.traceTemplater=function(t){var e,n,a={};for(e in t)n=t[e],Array.isArray(n)&&n.length&&(a[e]=0);return{newTrace:function(o){var s={type:e=r.coerce(o,{},i,\"type\"),_template:null};if(e in a){var l=a[e]%(n=t[e]).length;a[e]++,s._template=n[l]}return s}}},n.newContainer=function(t,e,n){var i=t._template,a=i&&(i[e]||n&&i[n]);return r.isPlainObject(a)||(a=null),t[e]={_template:a}},n.arrayTemplater=function(t,e,n){var r=t._template,i=r&&r[s(e)],a=r&&r[e];Array.isArray(a)&&a.length||(a=[]);var l={};return{newItem:function(t){var e={name:t.name,_input:t},r=e.templateitemname=t.templateitemname;if(!o(r))return e._template=i,e;for(var s=0;s<a.length;s++){var c=a[s];if(c.name===r)return l[r]=1,e._template=c,e}return e[n]=t[n]||!1,e._template=!1,e},defaultItems:function(){for(var t=[],e=0;e<a.length;e++){var n=a[e],r=n.name;if(o(r)&&!l[r]){var i={_template:n,name:r,_input:{_templateitemname:r}};i.templateitemname=n.templateitemname,t.push(i),l[r]=1}}return t}}},n.arrayDefaultKey=s,n.arrayEditor=function(t,e,n){var i=(r.nestedProperty(t,e).get()||[]).length,a=n._index,o=a>=i&&(n._input||{})._templateitemname;o&&(a=i);var s,l=e+\"[\"+a+\"]\";function c(){s={},o&&(s[l]={},s[l].templateitemname=o)}function u(t,e){o?r.nestedProperty(s[l],t).set(e):s[l+\".\"+t]=e}function h(){var t=s;return c(),t}return c(),{modifyBase:function(t,e){s[t]=e},modifyItem:u,getUpdateObj:h,applyUpdate:function(e,n){e&&u(e,n);var i=h();for(var a in i)r.nestedProperty(t,a).set(i[a])}}}},{\"../lib\":778,\"../plots/attributes\":824}],818:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../registry\"),a=t(\"../plots/plots\"),o=t(\"../lib\"),s=t(\"../lib/clear_gl_canvases\"),l=t(\"../components/color\"),c=t(\"../components/drawing\"),u=t(\"../components/titles\"),h=t(\"../components/modebar\"),d=t(\"../plots/cartesian/axes\"),f=t(\"../constants/alignment\"),p=t(\"../plots/cartesian/constraints\"),m=p.enforce,g=p.clean,y=t(\"../plots/cartesian/autorange\").doAutoRange,v=\"start\";function _(t,e,n){for(var r=0;r<n.length;r++){var i=n[r][0],a=n[r][1];if(!(i[0]>=t[1]||i[1]<=t[0])&&a[0]<e[1]&&a[1]>e[0])return!0}return!1}function b(t){var e,i,s,u,p,m,g=t._fullLayout,y=g._size,v=y.p,b=d.list(t,\"\",!0);if(g._paperdiv.style({width:t._context.responsive&&g.autosize&&!t._context._hasZeroWidth&&!t.layout.width?\"100%\":g.width+\"px\",height:t._context.responsive&&g.autosize&&!t._context._hasZeroHeight&&!t.layout.height?\"100%\":g.height+\"px\"}).selectAll(\".main-svg\").call(c.setSize,g.width,g.height),t._context.setBackground(t,g.paper_bgcolor),n.drawMainTitle(t),h.manage(t),!g._has(\"cartesian\"))return a.previousPromises(t);function w(t,e,n){var r=t._lw/2;return\"x\"===t._id.charAt(0)?e?\"top\"===n?e._offset-v-r:e._offset+e._length+v+r:y.t+y.h*(1-(t.position||0))+r%1:e?\"right\"===n?e._offset+e._length+v+r:e._offset-v-r:y.l+y.w*(t.position||0)+r%1}for(e=0;e<b.length;e++){var M=(u=b[e])._anchorAxis;u._linepositions={},u._lw=c.crispRound(t,u.linewidth,1),u._mainLinePosition=w(u,M,u.side),u._mainMirrorPosition=u.mirror&&M?w(u,M,f.OPPOSITE_SIDE[u.side]):null}var T=[],S=[],A=[],L=1===l.opacity(g.paper_bgcolor)&&1===l.opacity(g.plot_bgcolor)&&g.paper_bgcolor===g.plot_bgcolor;for(i in g._plots)if((s=g._plots[i]).mainplot)s.bg&&s.bg.remove(),s.bg=void 0;else{var C=s.xaxis.domain,E=s.yaxis.domain,O=s.plotgroup;if(_(C,E,A)){var D=O.node(),I=s.bg=o.ensureSingle(O,\"rect\",\"bg\");D.insertBefore(I.node(),D.childNodes[0]),S.push(i)}else O.select(\"rect.bg\").remove(),A.push([C,E]),L||(T.push(i),S.push(i))}var P,R,z,j,F,N,B,Y,H,V,U,W,q,G=g._bgLayer.selectAll(\".bg\").data(T);for(G.enter().append(\"rect\").classed(\"bg\",!0),G.exit().remove(),G.each((function(t){g._plots[t].bg=r.select(this)})),e=0;e<S.length;e++)p=(s=g._plots[S[e]]).xaxis,m=s.yaxis,s.bg&&void 0!==p._offset&&void 0!==m._offset&&s.bg.call(c.setRect,p._offset-v,m._offset-v,p._length+2*v,m._length+2*v).call(l.fill,g.plot_bgcolor).style(\"stroke-width\",0);if(!g._hasOnlyLargeSploms)for(i in g._plots){p=(s=g._plots[i]).xaxis,m=s.yaxis;var X,Z,J=s.clipId=\"clip\"+g._uid+i+\"plot\",K=o.ensureSingleById(g._clips,\"clipPath\",J,(function(t){t.classed(\"plotclip\",!0).append(\"rect\")}));s.clipRect=K.select(\"rect\").attr({width:p._length,height:m._length}),c.setTranslate(s.plot,p._offset,m._offset),s._hasClipOnAxisFalse?(X=null,Z=J):(X=J,Z=null),c.setClipUrl(s.plot,X,t),s.layerClipId=Z}function $(t){return\"M\"+P+\",\"+t+\"H\"+R}function Q(t){return\"M\"+p._offset+\",\"+t+\"h\"+p._length}function tt(t){return\"M\"+t+\",\"+Y+\"V\"+B}function et(t){return\"M\"+t+\",\"+m._offset+\"v\"+m._length}function nt(t,e,n){if(!t.showline||i!==t._mainSubplot)return\"\";if(!t._anchorAxis)return n(t._mainLinePosition);var r=e(t._mainLinePosition);return t.mirror&&(r+=e(t._mainMirrorPosition)),r}for(i in g._plots){m=(s=g._plots[i]).yaxis;var rt=\"M0,0\";x(p=s.xaxis,i)&&(F=k(p,\"left\",m,b),P=p._offset-(F?v+F:0),N=k(p,\"right\",m,b),R=p._offset+p._length+(N?v+N:0),z=w(p,m,\"bottom\"),j=w(p,m,\"top\"),!(q=!p._anchorAxis||i!==p._mainSubplot)||\"allticks\"!==p.mirror&&\"all\"!==p.mirror||(p._linepositions[i]=[z,j]),rt=nt(p,$,Q),q&&p.showline&&(\"all\"===p.mirror||\"allticks\"===p.mirror)&&(rt+=$(z)+$(j)),s.xlines.style(\"stroke-width\",p._lw+\"px\").call(l.stroke,p.showline?p.linecolor:\"rgba(0,0,0,0)\")),s.xlines.attr(\"d\",rt);var it=\"M0,0\";x(m,i)&&(U=k(m,\"bottom\",p,b),B=m._offset+m._length+(U?v:0),W=k(m,\"top\",p,b),Y=m._offset-(W?v:0),H=w(m,p,\"left\"),V=w(m,p,\"right\"),!(q=!m._anchorAxis||i!==m._mainSubplot)||\"allticks\"!==m.mirror&&\"all\"!==m.mirror||(m._linepositions[i]=[H,V]),it=nt(m,tt,et),q&&m.showline&&(\"all\"===m.mirror||\"allticks\"===m.mirror)&&(it+=tt(H)+tt(V)),s.ylines.style(\"stroke-width\",m._lw+\"px\").call(l.stroke,m.showline?m.linecolor:\"rgba(0,0,0,0)\")),s.ylines.attr(\"d\",it)}return d.makeClipPaths(t),a.previousPromises(t)}function x(t,e){return(t.ticks||t.showline)&&(e===t._mainSubplot||\"all\"===t.mirror||\"allticks\"===t.mirror)}function w(t,e,n){if(!n.showline||!n._lw)return!1;if(\"all\"===n.mirror||\"allticks\"===n.mirror)return!0;var r=n._anchorAxis;if(!r)return!1;var i=f.FROM_BL[e];return n.side===e?r.domain[i]===t.domain[i]:n.mirror&&r.domain[1-i]===t.domain[1-i]}function k(t,e,n,r){if(w(t,e,n))return n._lw;for(var i=0;i<r.length;i++){var a=r[i];if(a._mainAxis===n._mainAxis&&w(t,e,a))return a._lw}return 0}function M(t,e){var n=t.title,r=t._size,i=0;switch(e===v?i=n.pad.l:\"end\"===e&&(i=-n.pad.r),n.xref){case\"paper\":return r.l+r.w*n.x+i;case\"container\":default:return t.width*n.x+i}}function T(t,e){var n=t.title,r=t._size,i=0;if(\"0em\"!==e&&e?e===f.CAP_SHIFT+\"em\"&&(i=n.pad.t):i=-n.pad.b,\"auto\"===n.y)return r.t/2;switch(n.yref){case\"paper\":return r.t+r.h-r.h*n.y+i;case\"container\":default:return t.height-t.height*n.y+i}}n.layoutStyles=function(t){return o.syncOrAsync([a.doAutoMargin,b],t)},n.drawMainTitle=function(t){var e=t._fullLayout,n=function(t){var e=t.title,n=\"middle\";return o.isRightAnchor(e)?n=\"end\":o.isLeftAnchor(e)&&(n=v),n}(e),r=function(t){var e=t.title,n=\"0em\";return o.isTopAnchor(e)?n=f.CAP_SHIFT+\"em\":o.isMiddleAnchor(e)&&(n=f.MID_SHIFT+\"em\"),n}(e);u.draw(t,\"gtitle\",{propContainer:e,propName:\"title.text\",placeholder:e._dfltTitle.plot,attributes:{x:M(e,n),y:T(e,r),\"text-anchor\":n,dy:r}})},n.doTraceStyle=function(t){var e,r=t.calcdata,o=[];for(e=0;e<r.length;e++){var l=r[e],c=l[0]||{},u=c.trace||{},h=u._module||{},d=h.arraysToCalcdata;d&&d(l,u);var f=h.editStyle;f&&o.push({fn:f,cd0:c})}if(o.length){for(e=0;e<o.length;e++){var p=o[e];p.fn(t,p.cd0)}s(t),n.redrawReglTraces(t)}return a.style(t),i.getComponentMethod(\"legend\",\"draw\")(t),a.previousPromises(t)},n.doColorBars=function(t){return i.getComponentMethod(\"colorbar\",\"draw\")(t),a.previousPromises(t)},n.layoutReplot=function(t){var e=t.layout;return t.layout=void 0,i.call(\"plot\",t,\"\",e)},n.doLegend=function(t){return i.getComponentMethod(\"legend\",\"draw\")(t),a.previousPromises(t)},n.doTicksRelayout=function(t){return d.draw(t,\"redraw\"),t._fullLayout._hasOnlyLargeSploms&&(i.subplotsRegistry.splom.updateGrid(t),s(t),n.redrawReglTraces(t)),n.drawMainTitle(t),a.previousPromises(t)},n.doModeBar=function(t){var e=t._fullLayout;h.manage(t);for(var n=0;n<e._basePlotModules.length;n++){var r=e._basePlotModules[n].updateFx;r&&r(t)}return a.previousPromises(t)},n.doCamera=function(t){for(var e=t._fullLayout,n=e._subplots.gl3d,r=0;r<n.length;r++){var i=e[n[r]];i._scene.setViewport(i)}},n.drawData=function(t){var e=t._fullLayout;s(t);for(var r=e._basePlotModules,o=0;o<r.length;o++)r[o].plot(t);return n.redrawReglTraces(t),a.style(t),i.getComponentMethod(\"shapes\",\"draw\")(t),i.getComponentMethod(\"annotations\",\"draw\")(t),i.getComponentMethod(\"images\",\"draw\")(t),e._replotting=!1,a.previousPromises(t)},n.redrawReglTraces=function(t){var e=t._fullLayout;if(e._has(\"regl\")){var n,r,i=t._fullData,a=[],s=[];for(e._hasOnlyLargeSploms&&e._splomGrid.draw(),n=0;n<i.length;n++){var l=i[n];!0===l.visible&&0!==l._length&&(\"splom\"===l.type?e._splomScenes[l.uid].draw():\"scattergl\"===l.type?o.pushUnique(a,l.xaxis+l.yaxis):\"scatterpolargl\"===l.type&&o.pushUnique(s,l.subplot))}for(n=0;n<a.length;n++)(r=e._plots[a[n]])._scene&&r._scene.draw();for(n=0;n<s.length;n++)(r=e[s[n]]._subplot)._scene&&r._scene.draw()}},n.doAutoRangeAndConstraints=function(t){for(var e,n=d.list(t,\"\",!0),r={},i=0;i<n.length;i++)if(!r[(e=n[i])._id]){r[e._id]=1,g(t,e),y(t,e);var a=e._matchGroup;if(a)for(var o in a){var s=d.getFromId(t,o);y(t,s,e.range),r[o]=1}}m(t)},n.finalDraw=function(t){i.getComponentMethod(\"rangeslider\",\"draw\")(t),i.getComponentMethod(\"rangeselector\",\"draw\")(t)},n.drawMarginPushers=function(t){i.getComponentMethod(\"legend\",\"draw\")(t),i.getComponentMethod(\"rangeselector\",\"draw\")(t),i.getComponentMethod(\"sliders\",\"draw\")(t),i.getComponentMethod(\"updatemenus\",\"draw\")(t),i.getComponentMethod(\"colorbar\",\"draw\")(t)}},{\"../components/color\":643,\"../components/drawing\":665,\"../components/modebar\":703,\"../components/titles\":738,\"../constants/alignment\":745,\"../lib\":778,\"../lib/clear_gl_canvases\":762,\"../plots/cartesian/autorange\":827,\"../plots/cartesian/axes\":828,\"../plots/cartesian/constraints\":835,\"../plots/plots\":891,\"../registry\":911,d3:169}],819:[function(t,e,n){\"use strict\";var r=t(\"../lib\"),i=r.isPlainObject,a=t(\"./plot_schema\"),o=t(\"../plots/plots\"),s=t(\"../plots/attributes\"),l=t(\"./plot_template\"),c=t(\"./plot_config\").dfltConfig;function u(t,e){t=r.extendDeep({},t);var n,a,o=Object.keys(t).sort();function s(e,n,r){if(i(n)&&i(e))u(e,n);else if(Array.isArray(n)&&Array.isArray(e)){var o=l.arrayTemplater({_template:t},r);for(a=0;a<n.length;a++){var s=n[a],c=o.newItem(s)._template;c&&u(c,s)}var h=o.defaultItems();for(a=0;a<h.length;a++)n.push(h[a]._template);for(a=0;a<n.length;a++)delete n[a].templateitemname}}for(n=0;n<o.length;n++){var c=o[n],d=t[c];if(c in e?s(d,e[c],c):e[c]=d,h(c)===c)for(var f in e){var p=h(f);f===p||p!==c||f in t||s(d,e[f],c)}}}function h(t){return t.replace(/[0-9]+$/,\"\")}function d(t,e,n,a,o){var s=o&&n(o);for(var c in t){var u=t[c],f=m(t,c,a),p=m(t,c,o),g=n(p);if(!g){var y=h(c);y!==c&&(g=n(p=m(t,y,o)))}if(!(s&&s===g||!g||g._noTemplating||\"data_array\"===g.valType||g.arrayOk&&Array.isArray(u)))if(!g.valType&&i(u))d(u,e,n,f,p);else if(g._isLinkedToArray&&Array.isArray(u))for(var v=!1,_=0,b={},x=0;x<u.length;x++){var w=u[x];if(i(w)){var k=w.name;if(k)b[k]||(d(w,e,n,m(u,_,f),m(u,_,p)),_++,b[k]=1);else if(!v){var M=m(t,l.arrayDefaultKey(c),a),T=m(u,_,f);d(w,e,n,T,m(u,_,p));var S=r.nestedProperty(e,T);r.nestedProperty(e,M).set(S.get()),S.set(null),v=!0}}}else r.nestedProperty(e,f).set(u)}}function f(t,e){return a.getLayoutValObject(t,r.nestedProperty({},e).parts)}function p(t,e){return a.getTraceValObject(t,r.nestedProperty({},e).parts)}function m(t,e,n){return n?Array.isArray(t)?n+\"[\"+e+\"]\":n+\".\"+e:e}function g(t){for(var e=0;e<t.length;e++)if(i(t[e]))return!0}function y(t){var e;switch(t.code){case\"data\":e=\"The template has no key data.\";break;case\"layout\":e=\"The template has no key layout.\";break;case\"missing\":e=t.path?\"There are no templates for item \"+t.path+\" with name \"+t.templateitemname:\"There are no templates for trace \"+t.index+\", of type \"+t.traceType+\".\";break;case\"unused\":e=t.path?\"The template item at \"+t.path+\" was not used in constructing the plot.\":t.dataCount?\"Some of the templates of type \"+t.traceType+\" were not used. The template has \"+t.templateCount+\" traces, the data only has \"+t.dataCount+\" of this type.\":\"The template has \"+t.templateCount+\" traces of type \"+t.traceType+\" but there are none in the data.\";break;case\"reused\":e=\"Some of the templates of type \"+t.traceType+\" were used more than once. The template has \"+t.templateCount+\" traces, the data has \"+t.dataCount+\" of this type.\"}return t.msg=e,t}n.makeTemplate=function(t){t=r.isPlainObject(t)?t:r.getGraphDiv(t),t=r.extendDeep({_context:c},{data:t.data,layout:t.layout}),o.supplyDefaults(t);var e=t.data||[],n=t.layout||{};n._basePlotModules=t._fullLayout._basePlotModules,n._modules=t._fullLayout._modules;var a={data:{},layout:{}};e.forEach((function(t){var e={};d(t,e,p.bind(null,t));var n=r.coerce(t,{},s,\"type\"),i=a.data[n];i||(i=a.data[n]=[]),i.push(e)})),d(n,a.layout,f.bind(null,n)),delete a.layout.template;var l=n.template;if(i(l)){var h,m,g,y,v,_,b=l.layout;i(b)&&u(b,a.layout);var x=l.data;if(i(x)){for(m in a.data)if(g=x[m],Array.isArray(g)){for(_=(v=a.data[m]).length,y=g.length,h=0;h<_;h++)u(g[h%y],v[h]);for(h=_;h<y;h++)v.push(r.extendDeep({},g[h]))}for(m in x)m in a.data||(a.data[m]=r.extendDeep([],x[m]))}}return a},n.validateTemplate=function(t,e){var n=r.extendDeep({},{_context:c,data:t.data,layout:t.layout}),a=n.layout||{};i(e)||(e=a.template||{});var s=e.layout,l=e.data,u=[];n.layout=a,n.layout.template=e,o.supplyDefaults(n);var d=n._fullLayout,f=n._fullData,p={};if(i(s)?(function t(e,n){for(var r in e)if(\"_\"!==r.charAt(0)&&i(e[r])){var a,o=h(r),s=[];for(a=0;a<n.length;a++)s.push(m(e,r,n[a])),o!==r&&s.push(m(e,o,n[a]));for(a=0;a<s.length;a++)p[s[a]]=1;t(e[r],s)}}(d,[\"layout\"]),function t(e,n){for(var r in e)if(-1===r.indexOf(\"defaults\")&&i(e[r])){var a=m(e,r,n);p[a]?t(e[r],a):u.push({code:\"unused\",path:a})}}(s,\"layout\")):u.push({code:\"layout\"}),i(l)){for(var v,_={},b=0;b<f.length;b++){var x=f[b];_[v=x.type]=(_[v]||0)+1,x._fullInput._template||u.push({code:\"missing\",index:x._fullInput.index,traceType:v})}for(v in l){var w=l[v].length,k=_[v]||0;w>k?u.push({code:\"unused\",traceType:v,templateCount:w,dataCount:k}):k>w&&u.push({code:\"reused\",traceType:v,templateCount:w,dataCount:k})}}else u.push({code:\"data\"});if(function t(e,n){for(var r in e)if(\"_\"!==r.charAt(0)){var a=e[r],o=m(e,r,n);i(a)?(Array.isArray(e)&&!1===a._template&&a.templateitemname&&u.push({code:\"missing\",path:o,templateitemname:a.templateitemname}),t(a,o)):Array.isArray(a)&&g(a)&&t(a,o)}}({data:f,layout:d},\"\"),u.length)return u.map(y)}},{\"../lib\":778,\"../plots/attributes\":824,\"../plots/plots\":891,\"./plot_config\":815,\"./plot_schema\":816,\"./plot_template\":817}],820:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"./plot_api\"),a=t(\"../plots/plots\"),o=t(\"../lib\"),s=t(\"../snapshot/helpers\"),l=t(\"../snapshot/tosvg\"),c=t(\"../snapshot/svgtoimg\"),u=t(\"../version\").version,h={format:{valType:\"enumerated\",values:[\"png\",\"jpeg\",\"webp\",\"svg\",\"full-json\"],dflt:\"png\"},width:{valType:\"number\",min:1},height:{valType:\"number\",min:1},scale:{valType:\"number\",min:0,dflt:1},setBackground:{valType:\"any\",dflt:!1},imageDataOnly:{valType:\"boolean\",dflt:!1}};e.exports=function(t,e){var n,d,f,p;function m(t){return!(t in e)||o.validate(e[t],h[t])}if(e=e||{},o.isPlainObject(t)?(n=t.data||[],d=t.layout||{},f=t.config||{},p={}):(t=o.getGraphDiv(t),n=o.extendDeep([],t.data),d=o.extendDeep({},t.layout),f=t._context,p=t._fullLayout||{}),!m(\"width\")&&null!==e.width||!m(\"height\")&&null!==e.height)throw new Error(\"Height and width should be pixel values.\");if(!m(\"format\"))throw new Error(\"Export format is not \"+o.join2(h.format.values,\", \",\" or \")+\".\");var g={};function y(t,n){return o.coerce(e,g,h,t,n)}var v=y(\"format\"),_=y(\"width\"),b=y(\"height\"),x=y(\"scale\"),w=y(\"setBackground\"),k=y(\"imageDataOnly\"),M=document.createElement(\"div\");M.style.position=\"absolute\",M.style.left=\"-5000px\",document.body.appendChild(M);var T=o.extendFlat({},d);_?T.width=_:null===e.width&&r(p.width)&&(T.width=p.width),b?T.height=b:null===e.height&&r(p.height)&&(T.height=p.height);var S=o.extendFlat({},f,{_exportedPlot:!0,staticPlot:!0,setBackground:w}),A=s.getRedrawFunc(M);function L(){return new Promise((function(t){setTimeout(t,s.getDelay(M._fullLayout))}))}function C(){return new Promise((function(t,e){var n=l(M,v,x),r=M._fullLayout.width,h=M._fullLayout.height;function d(){i.purge(M),document.body.removeChild(M)}if(\"full-json\"===v){var f=a.graphJson(M,!1,\"keepdata\",\"object\",!0,!0);return f.version=u,f=JSON.stringify(f),d(),t(k?f:s.encodeJSON(f))}if(d(),\"svg\"===v)return t(k?n:s.encodeSVG(n));var p=document.createElement(\"canvas\");p.id=o.randstr(),c({format:v,width:r,height:h,scale:x,canvas:p,svg:n,promise:!0}).then(t).catch(e)}))}return new Promise((function(t,e){i.plot(M,n,T,S).then(A).then(L).then(C).then((function(e){t(function(t){return k?t.replace(s.IMAGE_URL_PREFIX,\"\"):t}(e))})).catch((function(t){e(t)}))}))}},{\"../lib\":778,\"../plots/plots\":891,\"../snapshot/helpers\":915,\"../snapshot/svgtoimg\":917,\"../snapshot/tosvg\":919,\"../version\":1370,\"./plot_api\":814,\"fast-isnumeric\":241}],821:[function(t,e,n){\"use strict\";var r=t(\"../lib\"),i=t(\"../plots/plots\"),a=t(\"./plot_schema\"),o=t(\"./plot_config\").dfltConfig,s=r.isPlainObject,l=Array.isArray,c=r.isArrayOrTypedArray;function u(t,e,n,i,a,o){o=o||[];for(var h=Object.keys(t),d=0;d<h.length;d++){var f=h[d];if(\"transforms\"!==f){var y=o.slice();y.push(f);var v=t[f],_=e[f],b=g(n,f),x=(b||{}).valType,w=\"info_array\"===x,k=\"colorscale\"===x,M=(b||{}).items;if(m(n,f))if(s(v)&&s(_)&&\"any\"!==x)u(v,_,b,i,a,y);else if(w&&l(v)){v.length>_.length&&i.push(p(\"unused\",a,y.concat(_.length)));var T,S,A,L,C=_.length,E=Array.isArray(M);if(E&&(C=Math.min(C,M.length)),2===b.dimensions)for(S=0;S<C;S++)if(l(v[S])){v[S].length>_[S].length&&i.push(p(\"unused\",a,y.concat(S,_[S].length)));var O=_[S].length;for(T=0;T<(E?Math.min(O,M[S].length):O);T++)L=_[S][T],r.validate(A=v[S][T],E?M[S][T]:M)?L!==A&&L!==+A&&i.push(p(\"dynamic\",a,y.concat(S,T),A,L)):i.push(p(\"value\",a,y.concat(S,T),A))}else i.push(p(\"array\",a,y.concat(S),v[S]));else for(S=0;S<C;S++)L=_[S],r.validate(A=v[S],E?M[S]:M)?L!==A&&L!==+A&&i.push(p(\"dynamic\",a,y.concat(S),A,L)):i.push(p(\"value\",a,y.concat(S),A))}else if(b.items&&!w&&l(v)){var D,I,P=M[Object.keys(M)[0]],R=[];for(D=0;D<_.length;D++){var z=_[D]._index||D;if((I=y.slice()).push(z),s(v[z])&&s(_[D])){R.push(z);var j=v[z],F=_[D];s(j)&&!1!==j.visible&&!1===F.visible?i.push(p(\"invisible\",a,I)):u(j,F,P,i,a,I)}}for(D=0;D<v.length;D++)(I=y.slice()).push(D),s(v[D])?-1===R.indexOf(D)&&i.push(p(\"unused\",a,I)):i.push(p(\"object\",a,I,v[D]))}else!s(v)&&s(_)?i.push(p(\"object\",a,y,v)):c(v)||!c(_)||w||k?f in e?r.validate(v,b)?\"enumerated\"===b.valType&&(b.coerceNumber&&v!==+_||v!==_)&&i.push(p(\"dynamic\",a,y,v,_)):i.push(p(\"value\",a,y,v)):i.push(p(\"unused\",a,y,v)):i.push(p(\"array\",a,y,v));else i.push(p(\"schema\",a,y))}}return i}function h(t,e){for(var n=t.layout.layoutAttributes,i=0;i<e.length;i++){var a=e[i],o=t.traces[a.type],s=o.layoutAttributes;s&&r.extendFlat(a.subplot?n[o.attributes.subplot.dflt]:n,s)}return n}e.exports=function(t,e){void 0===t&&(t=[]),void 0===e&&(e={});var n,c,d=a.get(),f=[],m={_context:r.extendFlat({},o)};l(t)?(m.data=r.extendDeep([],t),n=t):(m.data=[],n=[],f.push(p(\"array\",\"data\"))),s(e)?(m.layout=r.extendDeep({},e),c=e):(m.layout={},c={},arguments.length>1&&f.push(p(\"object\",\"layout\"))),i.supplyDefaults(m);for(var g=m._fullData,y=n.length,v=0;v<y;v++){var _=n[v],b=[\"data\",v];if(s(_)){var x=g[v],w=x.type,k=d.traces[w].attributes;k.type={valType:\"enumerated\",values:[w]},!1===x.visible&&!1!==_.visible&&f.push(p(\"invisible\",b)),u(_,x,k,f,b);var M=_.transforms,T=x.transforms;if(M){l(M)||f.push(p(\"array\",b,[\"transforms\"])),b.push(\"transforms\");for(var S=0;S<M.length;S++){var A=[\"transforms\",S],L=M[S].type;if(s(M[S])){var C=d.transforms[L]?d.transforms[L].attributes:{};C.type={valType:\"enumerated\",values:Object.keys(d.transforms)},u(M[S],T[S],C,f,b,A)}else f.push(p(\"object\",b,A))}}}else f.push(p(\"object\",b))}return u(c,m._fullLayout,h(d,g),f,\"layout\"),0===f.length?void 0:f};var d={object:function(t,e){return(\"layout\"===t&&\"\"===e?\"The layout argument\":\"data\"===t[0]&&\"\"===e?\"Trace \"+t[1]+\" in the data argument\":f(t)+\"key \"+e)+\" must be linked to an object container\"},array:function(t,e){return(\"data\"===t?\"The data argument\":f(t)+\"key \"+e)+\" must be linked to an array container\"},schema:function(t,e){return f(t)+\"key \"+e+\" is not part of the schema\"},unused:function(t,e,n){var r=s(n)?\"container\":\"key\";return f(t)+r+\" \"+e+\" did not get coerced\"},dynamic:function(t,e,n,r){return[f(t)+\"key\",e,\"(set to '\"+n+\"')\",\"got reset to\",\"'\"+r+\"'\",\"during defaults.\"].join(\" \")},invisible:function(t,e){return(e?f(t)+\"item \"+e:\"Trace \"+t[1])+\" got defaulted to be not visible\"},value:function(t,e,n){return[f(t)+\"key \"+e,\"is set to an invalid value (\"+n+\")\"].join(\" \")}};function f(t){return l(t)?\"In data trace \"+t[1]+\", \":\"In \"+t+\", \"}function p(t,e,n,i,a){var o,s;n=n||\"\",l(e)?(o=e[0],s=e[1]):(o=e,s=null);var c=function(t){if(!l(t))return String(t);for(var e=\"\",n=0;n<t.length;n++){var r=t[n];\"number\"==typeof r?e=e.substr(0,e.length-1)+\"[\"+r+\"]\":e+=r,n<t.length-1&&(e+=\".\")}return e}(n),u=d[t](e,c,i,a);return r.log(u),{code:t,container:o,trace:s,path:n,astr:c,msg:u}}function m(t,e){var n=v(e),r=n.keyMinusId;return!!(r in t&&t[r]._isSubplotObj&&n.id)||e in t}function g(t,e){return e in t?t[e]:t[v(e).keyMinusId]}var y=r.counterRegex(\"([a-z]+)\");function v(t){var e=t.match(y);return{keyMinusId:e&&e[1],id:e&&e[2]}}},{\"../lib\":778,\"../plots/plots\":891,\"./plot_config\":815,\"./plot_schema\":816}],822:[function(t,e,n){\"use strict\";e.exports={mode:{valType:\"enumerated\",dflt:\"afterall\",values:[\"immediate\",\"next\",\"afterall\"]},direction:{valType:\"enumerated\",values:[\"forward\",\"reverse\"],dflt:\"forward\"},fromcurrent:{valType:\"boolean\",dflt:!1},frame:{duration:{valType:\"number\",min:0,dflt:500},redraw:{valType:\"boolean\",dflt:!0}},transition:{duration:{valType:\"number\",min:0,dflt:500,editType:\"none\"},easing:{valType:\"enumerated\",dflt:\"cubic-in-out\",values:[\"linear\",\"quad\",\"cubic\",\"sin\",\"exp\",\"circle\",\"elastic\",\"back\",\"bounce\",\"linear-in\",\"quad-in\",\"cubic-in\",\"sin-in\",\"exp-in\",\"circle-in\",\"elastic-in\",\"back-in\",\"bounce-in\",\"linear-out\",\"quad-out\",\"cubic-out\",\"sin-out\",\"exp-out\",\"circle-out\",\"elastic-out\",\"back-out\",\"bounce-out\",\"linear-in-out\",\"quad-in-out\",\"cubic-in-out\",\"sin-in-out\",\"exp-in-out\",\"circle-in-out\",\"elastic-in-out\",\"back-in-out\",\"bounce-in-out\"],editType:\"none\"},ordering:{valType:\"enumerated\",values:[\"layout first\",\"traces first\"],dflt:\"layout first\",editType:\"none\"}}}},{}],823:[function(t,e,n){\"use strict\";var r=t(\"../lib\"),i=t(\"../plot_api/plot_template\");e.exports=function(t,e,n){var a,o,s=n.name,l=n.inclusionAttr||\"visible\",c=e[s],u=r.isArrayOrTypedArray(t[s])?t[s]:[],h=e[s]=[],d=i.arrayTemplater(e,s,l);for(a=0;a<u.length;a++){var f=u[a];r.isPlainObject(f)?o=d.newItem(f):(o=d.newItem({}))[l]=!1,o._index=a,!1!==o[l]&&n.handleItemDefaults(f,o,e,n),h.push(o)}var p=d.defaultItems();for(a=0;a<p.length;a++)(o=p[a])._index=h.length,n.handleItemDefaults({},o,e,n,{}),h.push(o);if(r.isArrayOrTypedArray(c)){var m=Math.min(c.length,h.length);for(a=0;a<m;a++)r.relinkPrivateKeys(h[a],c[a])}return h}},{\"../lib\":778,\"../plot_api/plot_template\":817}],824:[function(t,e,n){\"use strict\";var r=t(\"../components/fx/attributes\");e.exports={type:{valType:\"enumerated\",values:[],dflt:\"scatter\",editType:\"calc+clearAxisTypes\",_noTemplating:!0},visible:{valType:\"enumerated\",values:[!0,!1,\"legendonly\"],dflt:!0,editType:\"calc\"},showlegend:{valType:\"boolean\",dflt:!0,editType:\"style\"},legendgroup:{valType:\"string\",dflt:\"\",editType:\"style\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,editType:\"style\"},name:{valType:\"string\",editType:\"style\"},uid:{valType:\"string\",editType:\"plot\",anim:!0},ids:{valType:\"data_array\",editType:\"calc\",anim:!0},customdata:{valType:\"data_array\",editType:\"calc\"},meta:{valType:\"any\",arrayOk:!0,editType:\"plot\"},selectedpoints:{valType:\"any\",editType:\"calc\"},hoverinfo:{valType:\"flaglist\",flags:[\"x\",\"y\",\"z\",\"text\",\"name\"],extras:[\"all\",\"none\",\"skip\"],arrayOk:!0,dflt:\"all\",editType:\"none\"},hoverlabel:r.hoverlabel,stream:{token:{valType:\"string\",noBlank:!0,strict:!0,editType:\"calc\"},maxpoints:{valType:\"number\",min:0,max:1e4,dflt:500,editType:\"calc\"},editType:\"calc\"},transforms:{_isLinkedToArray:\"transform\",editType:\"calc\"},uirevision:{valType:\"any\",editType:\"none\"}}},{\"../components/fx/attributes\":674}],825:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../lib\"),a=i.dateTime2ms,o=i.incrementMonth,s=t(\"../../constants/numerical\").ONEAVGMONTH;e.exports=function(t,e,n,i){if(\"date\"!==e.type)return i;var l=t[n+\"periodalignment\"];if(!l)return i;var c,u=t[n+\"period\"];if(r(u)){if((u=+u)<=0)return i}else if(\"string\"==typeof u&&\"M\"===u.charAt(0)){var h=+u.substring(1);if(!(h>0&&Math.round(h)===h))return i;c=h}for(var d=e.calendar,f=\"start\"===l,p=\"end\"===l,m=a(t[n+\"period0\"],d)||0,g=[],y=i.length,v=0;v<y;v++){var _,b,x,w=i[v];if(c){for(_=Math.round((w-m)/(c*s)),x=o(m,c*_,d);x>w;)x=o(x,-c,d);for(;x<=w;)x=o(x,c,d);b=o(x,-c,d)}else{for(x=m+(_=Math.round((w-m)/u))*u;x>w;)x-=u;for(;x<=w;)x+=u;b=x-u}g[v]=f?b:p?x:(b+x)/2}return g}},{\"../../constants/numerical\":753,\"../../lib\":778,\"fast-isnumeric\":241}],826:[function(t,e,n){\"use strict\";e.exports={xaxis:{valType:\"subplotid\",dflt:\"x\",editType:\"calc+clearAxisTypes\"},yaxis:{valType:\"subplotid\",dflt:\"y\",editType:\"calc+clearAxisTypes\"}}},{}],827:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../lib\"),a=t(\"../../constants/numerical\").FP_SAFE,o=t(\"../../registry\"),s=t(\"./axis_ids\"),l=s.getFromId,c=s.isLinked;function u(t,e){var n,r,a=[],o=t._fullLayout,s=d(o,e,0),l=d(o,e,1),c=f(t,e),u=c.min,p=c.max;if(0===u.length||0===p.length)return i.simpleMap(e.range,e.r2l);var m=u[0].val,g=p[0].val;for(n=1;n<u.length&&m===g;n++)m=Math.min(m,u[n].val);for(n=1;n<p.length&&m===g;n++)g=Math.max(g,p[n].val);var y=!1;if(e.range){var v=i.simpleMap(e.range,e.r2l);y=v[1]<v[0]}\"reversed\"===e.autorange&&(y=!0,e.autorange=!0);var _,b,x,w,k,M,T=e.rangemode,S=\"tozero\"===T,A=\"nonnegative\"===T,L=e._length,C=L/10,E=0;for(n=0;n<u.length;n++)for(_=u[n],r=0;r<p.length;r++)(M=(b=p[r]).val-_.val-h(e,_.val,b.val))>0&&((k=L-s(_)-l(b))>C?M/k>E&&(x=_,w=b,E=M/k):M/L>E&&(x={val:_.val,nopad:1},w={val:b.val,nopad:1},E=M/L));if(m===g){var O=m-1,D=m+1;if(S)if(0===m)a=[0,1];else{var I=(m>0?p:u).reduce((function(t,e){return Math.max(t,l(e))}),0),P=m/(1-Math.min(.5,I/L));a=m>0?[0,P]:[P,0]}else a=A?[Math.max(0,O),Math.max(1,D)]:[O,D]}else S?(x.val>=0&&(x={val:0,nopad:1}),w.val<=0&&(w={val:0,nopad:1})):A&&(x.val-E*s(x)<0&&(x={val:0,nopad:1}),w.val<=0&&(w={val:1,nopad:1})),E=(w.val-x.val-h(e,_.val,b.val))/(L-s(x)-l(w)),a=[x.val-E*s(x),w.val+E*l(w)];return y&&a.reverse(),i.simpleMap(a,e.l2r||Number)}function h(t,e,n){var r=0;if(t.rangebreaks)for(var i=t.locateBreaks(e,n),a=0;a<i.length;a++){var o=i[a];r+=o.max-o.min}return r}function d(t,e,n){var r=.05*e._length,a=e._anchorAxis||{};if(-1!==(e.ticklabelposition||\"\").indexOf(\"inside\")||-1!==(a.ticklabelposition||\"\").indexOf(\"inside\")){var o=\"reversed\"===e.autorange;if(!o){var s=i.simpleMap(e.range,e.r2l);o=s[1]<s[0]}o&&(n=!n)}var l=0;return c(t,e._id)||(l=function(t,e){var n=0,r=t._anchorAxis||{};if(-1!==(r.ticklabelposition||\"\").indexOf(\"inside\")&&(!e&&(\"left\"===r.side||\"bottom\"===r.side)||e&&(\"top\"===r.side||\"right\"===r.side))){var a=\"x\"===t._id.charAt(0);if(r._vals){var o=i.deg2rad(r._tickAngles[r._id+\"tick\"]||0),s=Math.abs(Math.cos(o)),l=Math.abs(Math.sin(o));r._vals.forEach((function(t){if(t.bb){var e=6+t.bb.width,r=6+t.bb.height;n=Math.max(n,a?Math.max(e*s,r*l):Math.max(r*s,e*l))}}))}\"inside\"===r.ticks&&\"inside\"===r.ticklabelposition&&(n+=r.ticklen||0)}return n}(e,n)),r=Math.max(l,r),\"domain\"===e.constrain&&e._inputDomain&&(r*=(e._inputDomain[1]-e._inputDomain[0])/(e.domain[1]-e.domain[0])),function(t){return t.nopad?0:t.pad+(t.extrapad?r:l)}}function f(t,e,n){var r,i,a,o=e._id,s=t._fullLayout,c=[],u=[];function h(t,e){for(r=0;r<e.length;r++){var n=t[e[r]],s=(n._extremes||{})[o];if(!0===n.visible&&s){for(i=0;i<s.min.length;i++)p(c,(a=s.min[i]).val,a.pad,{extrapad:a.extrapad});for(i=0;i<s.max.length;i++)m(u,(a=s.max[i]).val,a.pad,{extrapad:a.extrapad})}}}if(h(t._fullData,e._traceIndices),h(s.annotations||[],e._annIndices||[]),h(s.shapes||[],e._shapeIndices||[]),e._matchGroup&&!n)for(var d in e._matchGroup)if(d!==e._id){var g=l(t,d),y=f(t,g,!0),v=e._length/g._length;for(i=0;i<y.min.length;i++)p(c,(a=y.min[i]).val,a.pad*v,{extrapad:a.extrapad});for(i=0;i<y.max.length;i++)m(u,(a=y.max[i]).val,a.pad*v,{extrapad:a.extrapad})}return{min:c,max:u}}function p(t,e,n,r){g(t,e,n,r,v)}function m(t,e,n,r){g(t,e,n,r,_)}function g(t,e,n,r,i){for(var a=r.tozero,o=r.extrapad,s=!0,l=0;l<t.length&&s;l++){var c=t[l];if(i(c.val,e)&&c.pad>=n&&(c.extrapad||!o)){s=!1;break}i(e,c.val)&&c.pad<=n&&(o||!c.extrapad)&&(t.splice(l,1),l--)}if(s){var u=a&&0===e;t.push({val:e,pad:u?0:n,extrapad:!u&&o})}}function y(t){return r(t)&&Math.abs(t)<a}function v(t,e){return t<=e}function _(t,e){return t>=e}e.exports={getAutoRange:u,makePadFn:d,doAutoRange:function(t,e,n){if(e.setScale(),e.autorange){e.range=n?n.slice():u(t,e),e._r=e.range.slice(),e._rl=i.simpleMap(e._r,e.r2l);var r=e._input,a={};a[e._attr+\".range\"]=e.range,a[e._attr+\".autorange\"]=e.autorange,o.call(\"_storeDirectGUIEdit\",t.layout,t._fullLayout._preGUI,a),r.range=e.range.slice(),r.autorange=e.autorange}var s=e._anchorAxis;if(s&&s.rangeslider){var l=s.rangeslider[e._name];l&&\"auto\"===l.rangemode&&(l.range=u(t,e)),s._input.rangeslider[e._name]=i.extendFlat({},l)}},findExtremes:function(t,e,n){n||(n={}),t._m||t.setScale();var i,o,s,l,c,u,h,d,f,g=[],v=[],_=e.length,b=n.padded||!1,x=n.tozero&&(\"linear\"===t.type||\"-\"===t.type),w=\"log\"===t.type,k=!1,M=n.vpadLinearized||!1;function T(t){if(Array.isArray(t))return k=!0,function(e){return Math.max(Number(t[e]||0),0)};var e=Math.max(Number(t||0),0);return function(){return e}}var S=T((t._m>0?n.ppadplus:n.ppadminus)||n.ppad||0),A=T((t._m>0?n.ppadminus:n.ppadplus)||n.ppad||0),L=T(n.vpadplus||n.vpad),C=T(n.vpadminus||n.vpad);if(!k){if(d=1/0,f=-1/0,w)for(i=0;i<_;i++)(o=e[i])<d&&o>0&&(d=o),o>f&&o<a&&(f=o);else for(i=0;i<_;i++)(o=e[i])<d&&o>-a&&(d=o),o>f&&o<a&&(f=o);e=[d,f],_=2}var E={tozero:x,extrapad:b};function O(n){r(s=e[n])&&(u=S(n),h=A(n),M?(l=t.c2l(s)-C(n),c=t.c2l(s)+L(n)):(d=s-C(n),f=s+L(n),w&&d<f/10&&(d=f/10),l=t.c2l(d),c=t.c2l(f)),x&&(l=Math.min(0,l),c=Math.max(0,c)),y(l)&&p(g,l,h,E),y(c)&&m(v,c,u,E))}var D=Math.min(6,_);for(i=0;i<D;i++)O(i);for(i=_-1;i>=D;i--)O(i);return{min:g,max:v,opts:n}},concatExtremes:f}},{\"../../constants/numerical\":753,\"../../lib\":778,\"../../registry\":911,\"./axis_ids\":831,\"fast-isnumeric\":241}],828:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"fast-isnumeric\"),a=t(\"../../plots/plots\"),o=t(\"../../registry\"),s=t(\"../../lib\"),l=s.strTranslate,c=t(\"../../lib/svg_text_utils\"),u=t(\"../../components/titles\"),h=t(\"../../components/color\"),d=t(\"../../components/drawing\"),f=t(\"./layout_attributes\"),p=t(\"./clean_ticks\"),m=t(\"../../constants/numerical\"),g=m.ONEMAXYEAR,y=m.ONEAVGYEAR,v=m.ONEMINYEAR,_=m.ONEMAXQUARTER,b=m.ONEAVGQUARTER,x=m.ONEMINQUARTER,w=m.ONEMAXMONTH,k=m.ONEAVGMONTH,M=m.ONEMINMONTH,T=m.ONEWEEK,S=m.ONEDAY,A=S/2,L=m.ONEHOUR,C=m.ONEMIN,E=m.ONESEC,O=m.MINUS_SIGN,D=m.BADNUM,I=t(\"../../constants/alignment\"),P=I.MID_SHIFT,R=I.CAP_SHIFT,z=I.LINE_SPACING,j=I.OPPOSITE_SIDE,F=e.exports={};F.setConvert=t(\"./set_convert\");var N=t(\"./axis_autotype\"),B=t(\"./axis_ids\"),Y=B.idSort,H=B.isLinked;F.id2name=B.id2name,F.name2id=B.name2id,F.cleanId=B.cleanId,F.list=B.list,F.listIds=B.listIds,F.getFromId=B.getFromId,F.getFromTrace=B.getFromTrace;var V=t(\"./autorange\");function U(t){var e=1e-4*(t[1]-t[0]);return[t[0]-e,t[1]+e]}F.getAutoRange=V.getAutoRange,F.findExtremes=V.findExtremes,F.coerceRef=function(t,e,n,r,i,a){var o=r.charAt(r.length-1),l=n._fullLayout._subplots[o+\"axis\"],c=r+\"ref\",u={};return i||(i=l[0]||(\"string\"==typeof a?a:a[0])),a||(a=i),l=l.concat(l.map((function(t){return t+\" domain\"}))),u[c]={valType:\"enumerated\",values:l.concat(a?\"string\"==typeof a?[a]:a:[]),dflt:i},s.coerce(t,e,u,c)},F.getRefType=function(t){return void 0===t?t:\"paper\"===t?\"paper\":\"pixel\"===t?\"pixel\":/( domain)$/.test(t)?\"domain\":\"range\"},F.coercePosition=function(t,e,n,r,i,a){var o,l;if(\"range\"!==F.getRefType(r))o=s.ensureNumber,l=n(i,a);else{var c=F.getFromId(e,r);l=n(i,a=c.fraction2r(a)),o=c.cleanPos}t[i]=o(l)},F.cleanPosition=function(t,e,n){return(\"paper\"===n||\"pixel\"===n?s.ensureNumber:F.getFromId(e,n).cleanPos)(t)},F.redrawComponents=function(t,e){e=e||F.listIds(t);var n=t._fullLayout;function r(r,i,a,s){for(var l=o.getComponentMethod(r,i),c={},u=0;u<e.length;u++)for(var h=n[F.id2name(e[u])][a],d=0;d<h.length;d++){var f=h[d];if(!c[f]&&(l(t,f),c[f]=1,s))return}}r(\"annotations\",\"drawOne\",\"_annIndices\"),r(\"shapes\",\"drawOne\",\"_shapeIndices\"),r(\"images\",\"draw\",\"_imgIndices\",!0)};var W=F.getDataConversions=function(t,e,n,r){var i,a=\"x\"===n||\"y\"===n||\"z\"===n?n:r;if(Array.isArray(a)){if(i={type:N(r,void 0,{autotypenumbers:t._fullLayout.autotypenumbers}),_categories:[]},F.setConvert(i),\"category\"===i.type)for(var o=0;o<r.length;o++)i.d2c(r[o])}else i=F.getFromTrace(t,e,a);return i?{d2c:i.d2c,c2d:i.c2d}:\"ids\"===a?{d2c:G,c2d:G}:{d2c:q,c2d:q}};function q(t){return+t}function G(t){return String(t)}function X(t){return+t.substring(1)}F.getDataToCoordFunc=function(t,e,n,r){return W(t,e,n,r).d2c},F.counterLetter=function(t){var e=t.charAt(0);return\"x\"===e?\"y\":\"y\"===e?\"x\":void 0},F.minDtick=function(t,e,n,r){-1===[\"log\",\"category\",\"multicategory\"].indexOf(t.type)&&r?void 0===t._minDtick?(t._minDtick=e,t._forceTick0=n):t._minDtick&&((t._minDtick/e+1e-6)%1<2e-6&&((n-t._forceTick0)/e%1+1.000001)%1<2e-6?(t._minDtick=e,t._forceTick0=n):((e/t._minDtick+1e-6)%1>2e-6||((n-t._forceTick0)/t._minDtick%1+1.000001)%1>2e-6)&&(t._minDtick=0)):t._minDtick=0},F.saveRangeInitial=function(t,e){for(var n=F.list(t,\"\",!0),r=!1,i=0;i<n.length;i++){var a=n[i],o=void 0===a._rangeInitial;(o&&!1===a.autorange||e&&(o||a.range[0]!==a._rangeInitial[0]||a.range[1]!==a._rangeInitial[1]))&&(a._rangeInitial=a.range.slice(),r=!0)}return r},F.saveShowSpikeInitial=function(t,e){for(var n=F.list(t,\"\",!0),r=!1,i=\"on\",a=0;a<n.length;a++){var o=n[a],s=void 0===o._showSpikeInitial;(s||e&&(s||!(o.showspikes===o._showspikes)))&&(o._showSpikeInitial=o.showspikes,r=!0),\"on\"!==i||o.showspikes||(i=\"off\")}return t._fullLayout._cartesianSpikesEnabled=i,r},F.autoBin=function(t,e,n,r,a,o){var l,c=s.aggNums(Math.min,null,t),u=s.aggNums(Math.max,null,t);if(\"category\"===e.type||\"multicategory\"===e.type)return{start:c-.5,end:u+.5,size:Math.max(1,Math.round(o)||1),_dataSpan:u-c};if(a||(a=e.calendar),l=\"log\"===e.type?{type:\"linear\",range:[c,u]}:{type:e.type,range:s.simpleMap([c,u],e.c2r,0,a),calendar:a},F.setConvert(l),o=o&&p.dtick(o,l.type))l.dtick=o,l.tick0=p.tick0(void 0,l.type,a);else{var h;if(n)h=(u-c)/n;else{var d=s.distinctVals(t),f=Math.pow(10,Math.floor(Math.log(d.minDiff)/Math.LN10)),m=f*s.roundUp(d.minDiff/f,[.9,1.9,4.9,9.9],!0);h=Math.max(m,2*s.stdev(t)/Math.pow(t.length,r?.25:.4)),i(h)||(h=1)}F.autoTicks(l,h)}var g,y=l.dtick,v=F.tickIncrement(F.tickFirst(l),y,\"reverse\",a);if(\"number\"==typeof y)g=(v=function(t,e,n,r,a){var o=0,s=0,l=0,c=0;function u(e){return(1+100*(e-t)/n.dtick)%100<2}for(var h=0;h<e.length;h++)e[h]%1==0?l++:i(e[h])||c++,u(e[h])&&o++,u(e[h]+n.dtick/2)&&s++;var d=e.length-c;if(l===d&&\"date\"!==n.type)n.dtick<1?t=r-.5*n.dtick:(t-=.5)+n.dtick<r&&(t+=n.dtick);else if(s<.1*d&&(o>.3*d||u(r)||u(a))){var f=n.dtick/2;t+=t+f<r?f:-f}return t}(v,t,l,c,u))+(1+Math.floor((u-v)/y))*y;else for(\"M\"===l.dtick.charAt(0)&&(v=function(t,e,n,r,i){var a=s.findExactDates(e,i);if(a.exactDays>.8){var o=Number(n.substr(1));a.exactYears>.8&&o%12==0?t=F.tickIncrement(t,\"M6\",\"reverse\")+1.5*S:a.exactMonths>.8?t=F.tickIncrement(t,\"M1\",\"reverse\")+15.5*S:t-=A;var l=F.tickIncrement(t,n);if(l<=r)return l}return t}(v,t,y,c,a)),g=v;g<=u;)g=F.tickIncrement(g,y,!1,a);return{start:e.c2r(v,0,a),end:e.c2r(g,0,a),size:y,_dataSpan:u-c}},F.prepTicks=function(t,e){var n=s.simpleMap(t.range,t.r2l,void 0,void 0,e);if(t._dtickInit=t.dtick,t._tick0Init=t.tick0,\"auto\"===t.tickmode||!t.dtick){var r,a=t.nticks;a||(\"category\"===t.type||\"multicategory\"===t.type?a=t._length/(r=t.tickfont?1.2*(t.tickfont.size||12):15):(r=\"y\"===t._id.charAt(0)?40:80,a=s.constrain(t._length/r,4,9)+1),\"radialaxis\"===t._name&&(a*=2)),\"array\"===t.tickmode&&(a*=100),t._roughDTick=Math.abs(n[1]-n[0])/a,F.autoTicks(t,t._roughDTick),t._minDtick>0&&t.dtick<2*t._minDtick&&(t.dtick=t._minDtick,t.tick0=t.l2r(t._forceTick0))}\"period\"===t.ticklabelmode&&function(t){var e;function n(){return!(i(t.dtick)||\"M\"!==t.dtick.charAt(0))}var r=n(),a=F.getTickFormat(t);if(a){var o=t._dtickInit!==t.dtick;/%[fLQsSMX]/.test(a)||(/%[HI]/.test(a)?(e=L,o&&!r&&t.dtick<L&&(t.dtick=L)):/%p/.test(a)?(e=A,o&&!r&&t.dtick<A&&(t.dtick=A)):/%[Aadejuwx]/.test(a)?(e=S,o&&!r&&t.dtick<S&&(t.dtick=S)):/%[UVW]/.test(a)?(e=T,o&&!r&&t.dtick<T&&(t.dtick=T)):/%[Bbm]/.test(a)?(e=k,o&&(r?X(t.dtick)<1:t.dtick<M)&&(t.dtick=\"M1\")):/%[q]/.test(a)?(e=b,o&&(r?X(t.dtick)<3:t.dtick<x)&&(t.dtick=\"M3\")):/%[Yy]/.test(a)&&(e=y,o&&(r?X(t.dtick)<12:t.dtick<v)&&(t.dtick=\"M12\")))}(r=n())&&t.tick0===t._dowTick0&&(t.tick0=t._rawTick0),t._definedDelta=e}(t),t.tick0||(t.tick0=\"date\"===t.type?\"2000-01-01\":0),\"date\"===t.type&&t.dtick<.1&&(t.dtick=.1),rt(t)},F.calcTicks=function(t,e){F.prepTicks(t,e);var n=s.simpleMap(t.range,t.r2l,void 0,void 0,e);if(\"array\"===t.tickmode)return function(t){var e=t.tickvals,n=t.ticktext,r=new Array(e.length),i=U(s.simpleMap(t.range,t.r2l)),a=Math.min(i[0],i[1]),o=Math.max(i[0],i[1]),l=0;Array.isArray(n)||(n=[]);var c=\"category\"===t.type?t.d2l_noadd:t.d2l;\"log\"===t.type&&\"L\"!==String(t.dtick).charAt(0)&&(t.dtick=\"L\"+Math.pow(10,Math.floor(Math.min(t.range[0],t.range[1]))-1));for(var u=0;u<e.length;u++){var h=c(e[u]);h>a&&h<o&&(r[l]=void 0===n[u]?F.tickText(t,h):it(t,h,String(n[u])),l++)}return l<e.length&&r.splice(l,e.length-l),t.rangebreaks&&(r=r.filter((function(e){return t.maskBreaks(e.x)!==D}))),r}(t);var r=U(n),a=r[0],o=r[1],l=n[1]<n[0],c=Math.min(n[0],n[1]),u=Math.max(n[0],n[1]),h=\"log\"===t.type&&!(i(t.dtick)||\"L\"===t.dtick.charAt(0)),d=\"period\"===t.ticklabelmode;if(t._tmin=F.tickFirst(t,e),t._tmin<a!==l)return[];\"category\"!==t.type&&\"multicategory\"!==t.type||(o=l?Math.max(-.5,o):Math.min(t._categories.length-.5,o));var f=t._tmin;t.rangebreaks&&t._tick0Init!==t.tick0&&(f=wt(f,t),l||(f=F.tickIncrement(f,t.dtick,!l,t.calendar))),d&&(f=F.tickIncrement(f,t.dtick,!l,t.calendar));for(var p,m=Math.max(1e3,t._length||0),C=[],E=null;l?f>=o:f<=o;f=F.tickIncrement(f,t.dtick,l,t.calendar)){if(t.rangebreaks&&!l){if(f<a)continue;if(t.maskBreaks(f)===D&&wt(f,t)>=u)break}if(C.length>m||f===E)break;E=f;var O=!1;h&&f!==(0|f)&&(O=!0),C.push({minor:O,value:f})}if(d&&function(t,e,n){for(var r=0;r<t.length;r++){var i=t[r].value,a=r,o=r+1;r<t.length-1?(a=r,o=r+1):r>0?(a=r-1,o=r):(a=r,o=r);var s,l=Math.abs(t[o].value-t[a].value),c=n||l,u=0;c>=v?u=l>=v&&l<=g?l:y:n===b&&c>=x?u=l>=x&&l<=_?l:b:c>=M?u=l>=M&&l<=w?l:k:n===T&&c>=T?u=T:c>=S?u=S:n===A&&c>=A?u=A:n===L&&c>=L&&(u=L),u>=l&&(u=l,s=!0);var h=i+u;if(e.rangebreaks&&u>0){for(var d=0,f=0;f<84;f++){var p=(f+.5)/84;e.maskBreaks(i*(1-p)+p*h)!==D&&d++}(u*=d/84)||(t[r].drop=!0),s&&l>T&&(u=l)}(u>0||0===r)&&(t[r].periodX=i+u/2)}}(C,t,t._definedDelta),t.rangebreaks){var I=\"y\"===t._id.charAt(0),P=1;\"auto\"===t.tickmode&&(P=t.tickfont?t.tickfont.size:12);var R=NaN;for(p=C.length-1;p>-1;p--)if(C[p].drop)C.splice(p,1);else{C[p].value=wt(C[p].value,t);var z=t.c2p(C[p].value);(I?R>z-P:R<z+P)?C.splice(l?p+1:p,1):R=z}}xt(t)&&360===Math.abs(n[1]-n[0])&&C.pop(),t._tmax=(C[C.length-1]||{}).value,t._prevDateHead=\"\",t._inCalcTicks=!0;var j,N,B=[];for(p=0;p<C.length;p++)j=F.tickText(t,C[p].value,!1,C[p].minor),void 0!==(N=C[p].periodX)&&(j.periodX=N,(N>u||N<c)&&(N>u&&(j.periodX=u),N<c&&(j.periodX=c),j.text=\" \",t._prevDateHead=\"\")),B.push(j);return t._inCalcTicks=!1,B};var Z=[2,5,10],J=[1,2,3,6,12],K=[1,2,5,10,15,30],$=[1,2,3,7,14],Q=[-.046,0,.301,.477,.602,.699,.778,.845,.903,.954,1],tt=[-.301,0,.301,.699,1],et=[15,30,45,90,180];function nt(t,e,n){return e*s.roundUp(t/e,n)}function rt(t){var e=t.dtick;if(t._tickexponent=0,i(e)||\"string\"==typeof e||(e=1),\"category\"!==t.type&&\"multicategory\"!==t.type||(t._tickround=null),\"date\"===t.type){var n=t.r2l(t.tick0),r=t.l2r(n).replace(/(^-|i)/g,\"\"),a=r.length;if(\"M\"===String(e).charAt(0))t._tickround=a>10||\"01-01\"!==r.substr(5)?\"d\":+e.substr(1)%12==0?\"y\":\"m\";else if(e>=S&&a<=10||e>=15*S)t._tickround=\"d\";else if(e>=C&&a<=16||e>=L)t._tickround=\"M\";else if(e>=E&&a<=19||e>=C)t._tickround=\"S\";else{var o=t.l2r(n+e).replace(/^-/,\"\").length;t._tickround=Math.max(a,o)-20,t._tickround<0&&(t._tickround=4)}}else if(i(e)||\"L\"===e.charAt(0)){var s=t.range.map(t.r2d||Number);i(e)||(e=Number(e.substr(1))),t._tickround=2-Math.floor(Math.log(e)/Math.LN10+.01);var l=Math.max(Math.abs(s[0]),Math.abs(s[1])),c=Math.floor(Math.log(l)/Math.LN10+.01),u=void 0===t.minexponent?3:t.minexponent;Math.abs(c)>u&&(t._tickexponent=ot(t.exponentformat)&&!st(c)?3*Math.round((c-1)/3):c)}else t._tickround=null}function it(t,e,n){var r=t.tickfont||{};return{x:e,dx:0,dy:0,text:n||\"\",fontSize:r.size,font:r.family,fontColor:r.color}}F.autoTicks=function(t,e){var n;function r(t){return Math.pow(t,Math.floor(Math.log(e)/Math.LN10))}if(\"date\"===t.type){t.tick0=s.dateTick0(t.calendar,0);var a=2*e;if(a>y)e/=y,n=r(10),t.dtick=\"M\"+12*nt(e,n,Z);else if(a>k)t.dtick=\"M\"+nt(e/=k,1,J);else if(a>S){t.dtick=nt(e,S,t._hasDayOfWeekBreaks?[1,2,7,14]:$);var o=F.getTickFormat(t),l=\"period\"===t.ticklabelmode;l&&(t._rawTick0=t.tick0),t.tick0=/%[uVW]/.test(o)?s.dateTick0(t.calendar,2):s.dateTick0(t.calendar,1),l&&(t._dowTick0=t.tick0)}else a>L?t.dtick=nt(e,L,J):a>C?t.dtick=nt(e,C,K):a>E?t.dtick=nt(e,E,K):(n=r(10),t.dtick=nt(e,n,Z))}else if(\"log\"===t.type){t.tick0=0;var c=s.simpleMap(t.range,t.r2l);if(e>.7)t.dtick=Math.ceil(e);else if(Math.abs(c[1]-c[0])<1){var u=1.5*Math.abs((c[1]-c[0])/e);e=Math.abs(Math.pow(10,c[1])-Math.pow(10,c[0]))/u,n=r(10),t.dtick=\"L\"+nt(e,n,Z)}else t.dtick=e>.3?\"D2\":\"D1\"}else\"category\"===t.type||\"multicategory\"===t.type?(t.tick0=0,t.dtick=Math.ceil(Math.max(e,1))):xt(t)?(t.tick0=0,t.dtick=nt(e,n=1,et)):(t.tick0=0,n=r(10),t.dtick=nt(e,n,Z));if(0===t.dtick&&(t.dtick=1),!i(t.dtick)&&\"string\"!=typeof t.dtick){var h=t.dtick;throw t.dtick=1,\"ax.dtick error: \"+String(h)}},F.tickIncrement=function(t,e,n,a){var o=n?-1:1;if(i(e))return s.increment(t,o*e);var l=e.charAt(0),c=o*Number(e.substr(1));if(\"M\"===l)return s.incrementMonth(t,c,a);if(\"L\"===l)return Math.log(Math.pow(10,t)+c)/Math.LN10;if(\"D\"===l){var u=\"D2\"===e?tt:Q,h=t+.01*o,d=s.roundUp(s.mod(h,1),u,n);return Math.floor(h)+Math.log(r.round(Math.pow(10,d),1))/Math.LN10}throw\"unrecognized dtick \"+String(e)},F.tickFirst=function(t,e){var n=t.r2l||Number,a=s.simpleMap(t.range,n,void 0,void 0,e),o=a[1]<a[0],l=o?Math.floor:Math.ceil,c=U(a)[0],u=t.dtick,h=n(t.tick0);if(i(u)){var d=l((c-h)/u)*u+h;return\"category\"!==t.type&&\"multicategory\"!==t.type||(d=s.constrain(d,0,t._categories.length-1)),d}var f=u.charAt(0),p=Number(u.substr(1));if(\"M\"===f){for(var m,g,y,v=0,_=h;v<10;){if(((m=F.tickIncrement(_,u,o,t.calendar))-c)*(_-c)<=0)return o?Math.min(_,m):Math.max(_,m);g=(c-(_+m)/2)/(m-_),y=f+(Math.abs(Math.round(g))||1)*p,_=F.tickIncrement(_,y,g<0?!o:o,t.calendar),v++}return s.error(\"tickFirst did not converge\",t),_}if(\"L\"===f)return Math.log(l((Math.pow(10,c)-h)/p)*p+h)/Math.LN10;if(\"D\"===f){var b=\"D2\"===u?tt:Q,x=s.roundUp(s.mod(c,1),b,o);return Math.floor(c)+Math.log(r.round(Math.pow(10,x),1))/Math.LN10}throw\"unrecognized dtick \"+String(u)},F.tickText=function(t,e,n,r){var a,o=it(t,e),l=\"array\"===t.tickmode,c=n||l,u=t.type,h=\"category\"===u?t.d2l_noadd:t.d2l;if(l&&Array.isArray(t.ticktext)){var d=s.simpleMap(t.range,t.r2l),f=(Math.abs(d[1]-d[0])-(t._lBreaks||0))/1e4;for(a=0;a<t.ticktext.length&&!(Math.abs(e-h(t.tickvals[a]))<f);a++);if(a<t.ticktext.length)return o.text=String(t.ticktext[a]),o}function p(r){return void 0===r||(n?\"none\"===r:\"all\"!==r&&e!=={first:t._tmin,last:t._tmax}[r])}var m=n?\"never\":\"none\"!==t.exponentformat&&p(t.showexponent)?\"hide\":\"\";if(\"date\"===u?function(t,e,n,r){var a=t._tickround,o=n&&t.hoverformat||F.getTickFormat(t);r&&(a=i(a)?4:{y:\"m\",m:\"d\",d:\"M\",M:\"S\",S:4}[a]);var l,c=s.formatDate(e.x,o,a,t._dateFormat,t.calendar,t._extraFormat),u=c.indexOf(\"\\n\");if(-1!==u&&(l=c.substr(u+1),c=c.substr(0,u)),r&&(\"00:00:00\"===c||\"00:00\"===c?(c=l,l=\"\"):8===c.length&&(c=c.replace(/:00$/,\"\"))),l)if(n)\"d\"===a?c+=\", \"+l:c=l+(c?\", \"+c:\"\");else if(t._inCalcTicks&&t._prevDateHead===l){var h=-1!==(t.ticklabelposition||\"\").indexOf(\"inside\"),d=t._realSide||t.side;(!h&&\"top\"===d||h&&\"bottom\"===d)&&(c+=\"<br> \")}else t._prevDateHead=l,c+=\"<br>\"+l;e.text=c}(t,o,n,c):\"log\"===u?function(t,e,n,r,a){var o=t.dtick,l=e.x,c=t.tickformat,u=\"string\"==typeof o&&o.charAt(0);if(\"never\"===a&&(a=\"\"),r&&\"L\"!==u&&(o=\"L3\",u=\"L\"),c||\"L\"===u)e.text=lt(Math.pow(10,l),t,a,r);else if(i(o)||\"D\"===u&&s.mod(l+.01,1)<.1){var h=Math.round(l),d=Math.abs(h),f=t.exponentformat;\"power\"===f||ot(f)&&st(h)?(e.text=0===h?1:1===h?\"10\":\"10<sup>\"+(h>1?\"\":O)+d+\"</sup>\",e.fontSize*=1.25):(\"e\"===f||\"E\"===f)&&d>2?e.text=\"1\"+f+(h>0?\"+\":O)+d:(e.text=lt(Math.pow(10,l),t,\"\",\"fakehover\"),\"D1\"===o&&\"y\"===t._id.charAt(0)&&(e.dy-=e.fontSize/6))}else{if(\"D\"!==u)throw\"unrecognized dtick \"+String(o);e.text=String(Math.round(Math.pow(10,s.mod(l,1)))),e.fontSize*=.75}if(\"D1\"===t.dtick){var p=String(e.text).charAt(0);\"0\"!==p&&\"1\"!==p||(\"y\"===t._id.charAt(0)?e.dx-=e.fontSize/4:(e.dy+=e.fontSize/2,e.dx+=(t.range[1]>t.range[0]?1:-1)*e.fontSize*(l<0?.5:.25)))}}(t,o,0,c,m):\"category\"===u?function(t,e){var n=t._categories[Math.round(e.x)];void 0===n&&(n=\"\"),e.text=String(n)}(t,o):\"multicategory\"===u?function(t,e,n){var r=Math.round(e.x),i=t._categories[r]||[],a=void 0===i[1]?\"\":String(i[1]),o=void 0===i[0]?\"\":String(i[0]);n?e.text=o+\" - \"+a:(e.text=a,e.text2=o)}(t,o,n):xt(t)?function(t,e,n,r,i){if(\"radians\"!==t.thetaunit||n)e.text=lt(e.x,t,i,r);else{var a=e.x/180;if(0===a)e.text=\"0\";else{var o=function(t){function e(t,e){return Math.abs(t-e)<=1e-6}var n=function(t){for(var n=1;!e(Math.round(t*n)/n,t);)n*=10;return n}(t),r=t*n,i=Math.abs(function t(n,r){return e(r,0)?n:t(r,n%r)}(r,n));return[Math.round(r/i),Math.round(n/i)]}(a);if(o[1]>=100)e.text=lt(s.deg2rad(e.x),t,i,r);else{var l=e.x<0;e.text=1===o[1]?1===o[0]?\"\\u03c0\":o[0]+\"\\u03c0\":[\"<sup>\",o[0],\"</sup>\",\"\\u2044\",\"<sub>\",o[1],\"</sub>\",\"\\u03c0\"].join(\"\"),l&&(e.text=O+e.text)}}}}(t,o,n,c,m):function(t,e,n,r,i){\"never\"===i?i=\"\":\"all\"===t.showexponent&&Math.abs(e.x/t.dtick)<1e-6&&(i=\"hide\"),e.text=lt(e.x,t,i,r)}(t,o,0,c,m),r||(t.tickprefix&&!p(t.showtickprefix)&&(o.text=t.tickprefix+o.text),t.ticksuffix&&!p(t.showticksuffix)&&(o.text+=t.ticksuffix)),\"boundaries\"===t.tickson||t.showdividers){var g=function(e){var n=t.l2p(e);return n>=0&&n<=t._length?e:null};o.xbnd=[g(o.x-.5),g(o.x+t.dtick-.5)]}return o},F.hoverLabelText=function(t,e,n){if(n!==D&&n!==e)return F.hoverLabelText(t,e)+\" - \"+F.hoverLabelText(t,n);var r=\"log\"===t.type&&e<=0,i=F.tickText(t,t.c2l(r?-e:e),\"hover\").text;return r?0===e?\"0\":O+i:i};var at=[\"f\",\"p\",\"n\",\"\\u03bc\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\"];function ot(t){return\"SI\"===t||\"B\"===t}function st(t){return t>14||t<-15}function lt(t,e,n,r){var a=t<0,o=e._tickround,l=n||e.exponentformat||\"B\",c=e._tickexponent,u=F.getTickFormat(e),h=e.separatethousands;if(r){var d={exponentformat:l,minexponent:e.minexponent,dtick:\"none\"===e.showexponent?e.dtick:i(t)&&Math.abs(t)||1,range:\"none\"===e.showexponent?e.range.map(e.r2d):[0,t||1]};rt(d),o=(Number(d._tickround)||0)+4,c=d._tickexponent,e.hoverformat&&(u=e.hoverformat)}if(u)return e._numFormat(u)(t).replace(/-/g,O);var f,p=Math.pow(10,-o)/2;if(\"none\"===l&&(c=0),(t=Math.abs(t))<p)t=\"0\",a=!1;else{if(t+=p,c&&(t*=Math.pow(10,-c),o+=c),0===o)t=String(Math.floor(t));else if(o<0){t=(t=String(Math.round(t))).substr(0,t.length+o);for(var m=o;m<0;m++)t+=\"0\"}else{var g=(t=String(t)).indexOf(\".\")+1;g&&(t=t.substr(0,g+o).replace(/\\.?0+$/,\"\"))}t=s.numSeparate(t,e._separators,h)}return c&&\"hide\"!==l&&(ot(l)&&st(c)&&(l=\"power\"),f=c<0?O+-c:\"power\"!==l?\"+\"+c:String(c),\"e\"===l||\"E\"===l?t+=l+f:\"power\"===l?t+=\"\\xd710<sup>\"+f+\"</sup>\":\"B\"===l&&9===c?t+=\"B\":ot(l)&&(t+=at[c/3+5])),a?O+t:t}function ct(t,e){for(var n=[],r={},i=0;i<e.length;i++){var a=e[i];r[a.text2]?r[a.text2].push(a.x):r[a.text2]=[a.x]}for(var o in r)n.push(it(t,s.interp(r[o],.5),o));return n}function ut(t){return void 0!==t.periodX?t.periodX:t.x}function ht(t){return[t.text,t.x,t.axInfo,t.font,t.fontSize,t.fontColor].join(\"_\")}function dt(t){var e=t.title.font.size,n=(t.title.text.match(c.BR_TAG_ALL)||[]).length;return t.title.hasOwnProperty(\"standoff\")?n?e*(R+n*z):e*R:n?e*(n+1)*z:e}function ft(t,e){var n=t.l2p(e);return n>1&&n<t._length-1}function pt(t){var e=r.select(t),n=e.select(\".text-math-group\");return n.empty()?e.select(\"text\"):n}function mt(t){return t._id+\".automargin\"}function gt(t){return mt(t)+\".mirror\"}function yt(t){return t._id+\".rangeslider\"}function vt(t,e){for(var n=0;n<e.length;n++)-1===t.indexOf(e[n])&&t.push(e[n])}function _t(t,e,n){var r,i,a=[],o=[],l=t.layout;for(r=0;r<e.length;r++)a.push(F.getFromId(t,e[r]));for(r=0;r<n.length;r++)o.push(F.getFromId(t,n[r]));var c=Object.keys(f),u=[\"anchor\",\"domain\",\"overlaying\",\"position\",\"side\",\"tickangle\",\"editType\"],h=[\"linear\",\"log\"];for(r=0;r<c.length;r++){var d=c[r],p=a[0][d],m=o[0][d],g=!0,y=!1,v=!1;if(\"_\"!==d.charAt(0)&&\"function\"!=typeof p&&-1===u.indexOf(d)){for(i=1;i<a.length&&g;i++){var _=a[i][d];\"type\"===d&&-1!==h.indexOf(p)&&-1!==h.indexOf(_)&&p!==_?y=!0:_!==p&&(g=!1)}for(i=1;i<o.length&&g;i++){var b=o[i][d];\"type\"===d&&-1!==h.indexOf(m)&&-1!==h.indexOf(b)&&m!==b?v=!0:o[i][d]!==m&&(g=!1)}g&&(y&&(l[a[0]._name].type=\"linear\"),v&&(l[o[0]._name].type=\"linear\"),bt(l,d,a,o,t._fullLayout._dfltTitle))}}for(r=0;r<t._fullLayout.annotations.length;r++){var x=t._fullLayout.annotations[r];-1!==e.indexOf(x.xref)&&-1!==n.indexOf(x.yref)&&s.swapAttrs(l.annotations[r],[\"?\"])}}function bt(t,e,n,r,i){var a,o=s.nestedProperty,l=o(t[n[0]._name],e).get(),c=o(t[r[0]._name],e).get();for(\"title\"===e&&(l&&l.text===i.x&&(l.text=i.y),c&&c.text===i.y&&(c.text=i.x)),a=0;a<n.length;a++)o(t,n[a]._name+\".\"+e).set(c);for(a=0;a<r.length;a++)o(t,r[a]._name+\".\"+e).set(l)}function xt(t){return\"angularaxis\"===t._id}function wt(t,e){for(var n=e._rangebreaks.length,r=0;r<n;r++){var i=e._rangebreaks[r];if(t>=i.min&&t<i.max)return i.max}return t}F.getTickFormat=function(t){var e,n,r,i,a,o,s,l;function c(t){return\"string\"!=typeof t?t:Number(t.replace(\"M\",\"\"))*k}function u(t,e){var n=[\"L\",\"D\"];if(typeof t==typeof e){if(\"number\"==typeof t)return t-e;var r=n.indexOf(t.charAt(0)),i=n.indexOf(e.charAt(0));return r===i?Number(t.replace(/(L|D)/g,\"\"))-Number(e.replace(/(L|D)/g,\"\")):r-i}return\"number\"==typeof t?1:-1}function h(t,e){var n=null===e[0],r=null===e[1],i=u(t,e[0])>=0,a=u(t,e[1])<=0;return(n||i)&&(r||a)}if(t.tickformatstops&&t.tickformatstops.length>0)switch(t.type){case\"date\":case\"linear\":for(e=0;e<t.tickformatstops.length;e++)if((r=t.tickformatstops[e]).enabled&&(i=t.dtick,o=void 0,void 0,void 0,o=c||function(t){return t},l=(a=r.dtickrange)[1],(!(s=a[0])&&\"number\"!=typeof s||o(s)<=o(i))&&(!l&&\"number\"!=typeof l||o(l)>=o(i)))){n=r;break}break;case\"log\":for(e=0;e<t.tickformatstops.length;e++)if((r=t.tickformatstops[e]).enabled&&h(t.dtick,r.dtickrange)){n=r;break}}return n?n.value:t.tickformat},F.getSubplots=function(t,e){var n=t._fullLayout._subplots,r=n.cartesian.concat(n.gl2d||[]),i=e?F.findSubplotsWithAxis(r,e):r;return i.sort((function(t,e){var n=t.substr(1).split(\"y\"),r=e.substr(1).split(\"y\");return n[0]===r[0]?+n[1]-+r[1]:+n[0]-+r[0]})),i},F.findSubplotsWithAxis=function(t,e){for(var n=new RegExp(\"x\"===e._id.charAt(0)?\"^\"+e._id+\"y\":e._id+\"$\"),r=[],i=0;i<t.length;i++){var a=t[i];n.test(a)&&r.push(a)}return r},F.makeClipPaths=function(t){var e=t._fullLayout;if(!e._hasOnlyLargeSploms){var n,i,a={_offset:0,_length:e.width,_id:\"\"},o={_offset:0,_length:e.height,_id:\"\"},s=F.list(t,\"x\",!0),l=F.list(t,\"y\",!0),c=[];for(n=0;n<s.length;n++)for(c.push({x:s[n],y:o}),i=0;i<l.length;i++)0===n&&c.push({x:a,y:l[i]}),c.push({x:s[n],y:l[i]});var u=e._clips.selectAll(\".axesclip\").data(c,(function(t){return t.x._id+t.y._id}));u.enter().append(\"clipPath\").classed(\"axesclip\",!0).attr(\"id\",(function(t){return\"clip\"+e._uid+t.x._id+t.y._id})).append(\"rect\"),u.exit().remove(),u.each((function(t){r.select(this).select(\"rect\").attr({x:t.x._offset||0,y:t.y._offset||0,width:t.x._length||1,height:t.y._length||1})}))}},F.draw=function(t,e,n){var r=t._fullLayout;\"redraw\"===e&&r._paper.selectAll(\"g.subplot\").each((function(t){var e=r._plots[t[0]];if(e){var n=e.xaxis,i=e.yaxis;e.xaxislayer.selectAll(\".\"+n._id+\"tick\").remove(),e.yaxislayer.selectAll(\".\"+i._id+\"tick\").remove(),e.xaxislayer.selectAll(\".\"+n._id+\"tick2\").remove(),e.yaxislayer.selectAll(\".\"+i._id+\"tick2\").remove(),e.xaxislayer.selectAll(\".\"+n._id+\"divider\").remove(),e.yaxislayer.selectAll(\".\"+i._id+\"divider\").remove(),e.gridlayer&&e.gridlayer.selectAll(\"path\").remove(),e.zerolinelayer&&e.zerolinelayer.selectAll(\"path\").remove(),r._infolayer.select(\".g-\"+n._id+\"title\").remove(),r._infolayer.select(\".g-\"+i._id+\"title\").remove()}}));var i=e&&\"redraw\"!==e?e:F.listIds(t);return s.syncOrAsync(i.map((function(e){return function(){if(e){var r=F.getFromId(t,e),i=F.drawOne(t,r,n);return r._r=r.range.slice(),r._rl=s.simpleMap(r._r,r.r2l),i}}})))},F.drawOne=function(t,e,n){var r,i,l;n=n||{},e.setScale();var c=t._fullLayout,f=e._id,p=f.charAt(0),m=F.counterLetter(f),g=c._plots[e._mainSubplot];if(g){var y=g[p+\"axislayer\"],v=e._mainLinePosition,_=e._mainMirrorPosition,b=e._vals=F.calcTicks(e),x=[e.mirror,v,_].join(\"_\");for(r=0;r<b.length;r++)b[r].axInfo=x;e._selections={},e._tickAngles&&(e._prevTickAngles=e._tickAngles),e._tickAngles={},e._depth=null;var w={};if(e.visible){var k,M,T=F.makeTransTickFn(e),S=F.makeTransTickLabelFn(e),A=\"inside\"===e.ticks,L=\"outside\"===e.ticks;if(\"boundaries\"===e.tickson){var C=function(t,e){var n,r=[],i=function(t,e){var n=t.xbnd[e];null!==n&&r.push(s.extendFlat({},t,{x:n}))};if(e.length){for(n=0;n<e.length;n++)i(e[n],0);i(e[n-1],1)}return r}(0,b);M=F.clipEnds(e,C),k=A?M:C}else M=F.clipEnds(e,b),k=A&&\"period\"!==e.ticklabelmode?M:b;var E=e._gridVals=M,O=function(t,e){var n,r,i=[],a=e.length&&e[e.length-1].x<e[0].x,o=function(t,e){var n=t.xbnd[e];null!==n&&i.push(s.extendFlat({},t,{x:n}))};if(t.showdividers&&e.length){for(n=0;n<e.length;n++){var l=e[n];l.text2!==r&&o(l,a?1:0),r=l.text2}o(e[n-1],a?0:1)}return i}(e,b);if(!c._hasOnlyLargeSploms){var D=e._subplotsWith,I={};for(r=0;r<D.length;r++){var P=(l=c._plots[i=D[r]])[m+\"axis\"],R=P._mainAxis._id;if(!I[R]){I[R]=1;var N=\"x\"===p?\"M0,\"+P._offset+\"v\"+P._length:\"M\"+P._offset+\",0h\"+P._length;F.drawGrid(t,e,{vals:E,counterAxis:P,layer:l.gridlayer.select(\".\"+f),path:N,transFn:T}),F.drawZeroLine(t,e,{counterAxis:P,layer:l.zerolinelayer,path:N,transFn:T})}}}var B=F.getTickSigns(e),Y=[];if(e.ticks){var H,V,U,W=F.makeTickPath(e,v,B[2]);if(e._anchorAxis&&e.mirror&&!0!==e.mirror?(H=F.makeTickPath(e,_,B[3]),V=W+H):(H=\"\",V=W),e.showdividers&&L&&\"boundaries\"===e.tickson){var q={};for(r=0;r<O.length;r++)q[O[r].x]=1;U=function(t){return q[t.x]?H:V}}else U=V;F.drawTicks(t,e,{vals:k,layer:y,path:U,transFn:T}),\"allticks\"===e.mirror&&(Y=Object.keys(e._linepositions||{}))}for(r=0;r<Y.length;r++){l=c._plots[i=Y[r]];var G=e._linepositions[i]||[],X=F.makeTickPath(e,G[0],B[0])+F.makeTickPath(e,G[1],B[1]);F.drawTicks(t,e,{vals:k,layer:l[p+\"axislayer\"],path:X,transFn:T})}var Z=[];if(Z.push((function(){return F.drawLabels(t,e,{vals:b,layer:y,transFn:S,labelFns:F.makeLabelFns(e,v)})})),\"multicategory\"===e.type){var J={x:2,y:10}[p];Z.push((function(){var n={x:\"height\",y:\"width\"}[p],r=$()[n]+J+(e._tickAngles[f+\"tick\"]?e.tickfont.size*z:0);return F.drawLabels(t,e,{vals:ct(e,b),layer:y,cls:f+\"tick2\",repositionOnUpdate:!0,secondary:!0,transFn:T,labelFns:F.makeLabelFns(e,v+r*B[4])})})),Z.push((function(){return e._depth=B[4]*($(\"tick2\")[e.side]-v),function(t,e,n){var r=e._id+\"divider\",i=n.vals,a=n.layer.selectAll(\"path.\"+r).data(i,ht);a.exit().remove(),a.enter().insert(\"path\",\":first-child\").classed(r,1).classed(\"crisp\",1).call(h.stroke,e.dividercolor).style(\"stroke-width\",d.crispRound(t,e.dividerwidth,1)+\"px\"),a.attr(\"transform\",n.transFn).attr(\"d\",n.path)}(t,e,{vals:O,layer:y,path:F.makeTickPath(e,v,B[4],e._depth),transFn:T})}))}else e.title.hasOwnProperty(\"standoff\")&&Z.push((function(){e._depth=B[4]*($()[e.side]-v)}));var K=o.getComponentMethod(\"rangeslider\",\"isVisible\")(e);return Z.push((function(){var n,r,i,s,l=e.side.charAt(0),u=j[e.side].charAt(0),h=F.getPxPosition(t,e),d=L?e.ticklen:0;if((e.automargin||K)&&(\"multicategory\"===e.type?n=$(\"tick2\"):(n=$(),\"x\"===p&&\"b\"===l&&(e._depth=Math.max(n.width>0?n.bottom-h:0,d)))),e.automargin){r={x:0,y:0,r:0,l:0,t:0,b:0};var f=[0,1];if(\"x\"===p){if(\"b\"===l?r[l]=e._depth:(r[l]=e._depth=Math.max(n.width>0?h-n.top:0,d),f.reverse()),n.width>0){var g=n.right-(e._offset+e._length);g>0&&(r.xr=1,r.r=g);var y=e._offset-n.left;y>0&&(r.xl=0,r.l=y)}}else if(\"l\"===l?r[l]=e._depth=Math.max(n.height>0?h-n.left:0,d):(r[l]=e._depth=Math.max(n.height>0?n.right-h:0,d),f.reverse()),n.height>0){var v=n.bottom-(e._offset+e._length);v>0&&(r.yb=0,r.b=v);var _=e._offset-n.top;_>0&&(r.yt=1,r.t=_)}r[m]=\"free\"===e.anchor?e.position:e._anchorAxis.domain[f[0]],e.title.text!==c._dfltTitle[p]&&(r[l]+=dt(e)+(e.title.standoff||0)),e.mirror&&\"free\"!==e.anchor&&((i={x:0,y:0,r:0,l:0,t:0,b:0})[u]=e.linewidth,e.mirror&&!0!==e.mirror&&(i[u]+=d),!0===e.mirror||\"ticks\"===e.mirror?i[m]=e._anchorAxis.domain[f[1]]:\"all\"!==e.mirror&&\"allticks\"!==e.mirror||(i[m]=[e._counterDomainMin,e._counterDomainMax][f[1]]))}K&&(s=o.getComponentMethod(\"rangeslider\",\"autoMarginOpts\")(t,e)),a.autoMargin(t,mt(e),r),a.autoMargin(t,gt(e),i),a.autoMargin(t,yt(e),s)})),n.skipTitle||K&&\"bottom\"===e.side||Z.push((function(){return function(t,e){var n,r=t._fullLayout,i=e._id,a=i.charAt(0),o=e.title.font.size;if(e.title.hasOwnProperty(\"standoff\"))n=e._depth+e.title.standoff+dt(e);else{var s=-1!==(e.ticklabelposition||\"\").indexOf(\"inside\");if(\"multicategory\"===e.type)n=e._depth;else{var l=1.5*o;s&&(l=.5*o,\"outside\"===e.ticks&&(l+=e.ticklen)),n=10+l+(e.linewidth?e.linewidth-1:0)}s||(n+=\"x\"===a?\"top\"===e.side?o*(e.showticklabels?1:0):o*(e.showticklabels?1.5:.5):\"right\"===e.side?o*(e.showticklabels?1:.5):o*(e.showticklabels?.5:0))}var c,h,f,p,m=F.getPxPosition(t,e);if(\"x\"===a?(h=e._offset+e._length/2,f=\"top\"===e.side?m-n:m+n):(f=e._offset+e._length/2,h=\"right\"===e.side?m+n:m-n,c={rotate:\"-90\",offset:0}),\"multicategory\"!==e.type){var g=e._selections[e._id+\"tick\"];if(p={selection:g,side:e.side},g&&g.node()&&g.node().parentNode){var y=d.getTranslate(g.node().parentNode);p.offsetLeft=y.x,p.offsetTop=y.y}e.title.hasOwnProperty(\"standoff\")&&(p.pad=0)}return u.draw(t,i+\"title\",{propContainer:e,propName:e._name+\".title.text\",placeholder:r._dfltTitle[a],avoid:p,transform:c,attributes:{x:h,y:f,\"text-anchor\":\"middle\"}})}(t,e)})),s.syncOrAsync(Z)}}function $(t){var n=f+(t||\"tick\");return w[n]||(w[n]=function(t,e){var n,r,i,a;return t._selections[e].size()?(n=1/0,r=-1/0,i=1/0,a=-1/0,t._selections[e].each((function(){var t=pt(this),e=d.bBox(t.node().parentNode);n=Math.min(n,e.top),r=Math.max(r,e.bottom),i=Math.min(i,e.left),a=Math.max(a,e.right)}))):(n=0,r=0,i=0,a=0),{top:n,bottom:r,left:i,right:a,height:r-n,width:a-i}}(e,n)),w[n]}},F.getTickSigns=function(t){var e=t._id.charAt(0),n=t.side==={x:\"top\",y:\"right\"}[e]?1:-1,r=[-1,1,n,-n];return\"inside\"!==t.ticks==(\"x\"===e)&&(r=r.map((function(t){return-t}))),t.side&&r.push({l:-1,t:-1,r:1,b:1}[t.side.charAt(0)]),r},F.makeTransTickFn=function(t){return\"x\"===t._id.charAt(0)?function(e){return l(t._offset+t.l2p(e.x),0)}:function(e){return l(0,t._offset+t.l2p(e.x))}},F.makeTransTickLabelFn=function(t){var e=function(t){var e=t.ticklabelposition||\"\",n=function(t){return-1!==e.indexOf(t)},r=n(\"top\"),i=n(\"left\"),a=n(\"right\"),o=n(\"bottom\"),s=n(\"inside\"),l=o||i||r||a;if(!l&&!s)return[0,0];var c=t.side,u=l?(t.tickwidth||0)/2:0,h=3,d=t.tickfont?t.tickfont.size:12;return(o||r)&&(u+=d*R,h+=(t.linewidth||0)/2),(i||a)&&(u+=(t.linewidth||0)/2,h+=3),s&&\"top\"===c&&(h-=d*(1-R)),(i||r)&&(u=-u),\"bottom\"!==c&&\"right\"!==c||(h=-h),[l?u:0,s?h:0]}(t),n=e[0],r=e[1];return\"x\"===t._id.charAt(0)?function(e){return l(n+t._offset+t.l2p(ut(e)),r)}:function(e){return l(r,n+t._offset+t.l2p(ut(e)))}},F.makeTickPath=function(t,e,n,r){r=void 0!==r?r:t.ticklen;var i=t._id.charAt(0),a=(t.linewidth||1)/2;return\"x\"===i?\"M0,\"+(e+a*n)+\"v\"+r*n:\"M\"+(e+a*n)+\",0h\"+r*n},F.makeLabelFns=function(t,e,n){var r=t.ticklabelposition||\"\",a=function(t){return-1!==r.indexOf(t)},o=a(\"top\"),l=a(\"left\"),c=a(\"right\"),u=a(\"bottom\")||l||o||c,h=a(\"inside\"),d=\"inside\"===r&&\"inside\"===t.ticks||!h&&\"outside\"===t.ticks&&\"boundaries\"!==t.tickson,f=0,p=0,m=d?t.ticklen:0;if(h?m*=-1:u&&(m=0),d&&(f+=m,n)){var g=s.deg2rad(n);f=m*Math.cos(g)+1,p=m*Math.sin(g)}t.showticklabels&&(d||t.showline)&&(f+=.2*t.tickfont.size);var y,v,_,b,x,w={labelStandoff:f+=(t.linewidth||1)/2*(h?-1:1),labelShift:p},k=0,M=t.side,T=t._id.charAt(0),S=t.tickangle;if(\"x\"===T)b=(x=!h&&\"bottom\"===M||h&&\"top\"===M)?1:-1,h&&(b*=-1),y=p*b,v=e+f*b,_=x?1:-.2,90===Math.abs(S)&&(h?_+=P:_=-90===S&&\"bottom\"===M?R:90===S&&\"top\"===M?P:.5,k=P/2*(S/90)),w.xFn=function(t){return t.dx+y+k*t.fontSize},w.yFn=function(t){return t.dy+v+t.fontSize*_},w.anchorFn=function(t,e){if(u){if(l)return\"end\";if(c)return\"start\"}return i(e)&&0!==e&&180!==e?e*b<0!==h?\"end\":\"start\":\"middle\"},w.heightFn=function(e,n,r){return n<-60||n>60?-.5*r:\"top\"===t.side!==h?-r:0};else if(\"y\"===T){if(b=(x=!h&&\"left\"===M||h&&\"right\"===M)?1:-1,h&&(b*=-1),y=f,v=p*b,_=0,h||90!==Math.abs(S)||(_=-90===S&&\"left\"===M||90===S&&\"right\"===M?R:.5),h){var A=i(S)?+S:0;if(0!==A){var L=s.deg2rad(A);k=Math.abs(Math.sin(L))*R*b,_=0}}w.xFn=function(t){return t.dx+e-(y+t.fontSize*_)*b+k*t.fontSize},w.yFn=function(t){return t.dy+v+t.fontSize*P},w.anchorFn=function(t,e){return i(e)&&90===Math.abs(e)?\"middle\":x?\"end\":\"start\"},w.heightFn=function(e,n,r){return\"right\"===t.side&&(n*=-1),n<-30?-r:n<30?-.5*r:0}}return w},F.drawTicks=function(t,e,n){var r=e._id+\"tick\",i=(n=n||{}).vals;\"period\"===e.ticklabelmode&&(i=i.slice()).shift();var a=n.layer.selectAll(\"path.\"+r).data(e.ticks?i:[],ht);a.exit().remove(),a.enter().append(\"path\").classed(r,1).classed(\"ticks\",1).classed(\"crisp\",!1!==n.crisp).call(h.stroke,e.tickcolor).style(\"stroke-width\",d.crispRound(t,e.tickwidth,1)+\"px\").attr(\"d\",n.path),a.attr(\"transform\",n.transFn)},F.drawGrid=function(t,e,n){var r=e._id+\"grid\",i=(n=n||{}).vals,a=n.counterAxis;if(!1===e.showgrid)i=[];else if(a&&F.shouldShowZeroLine(t,e,a))for(var o=\"array\"===e.tickmode,s=0;s<i.length;s++){var l=i[s].x;if(o?!l:Math.abs(l)<e.dtick/100){if(i=i.slice(0,s).concat(i.slice(s+1)),!o)break;s--}}var c=n.layer.selectAll(\"path.\"+r).data(i,ht);c.exit().remove(),c.enter().append(\"path\").classed(r,1).classed(\"crisp\",!1!==n.crisp),e._gw=d.crispRound(t,e.gridwidth,1),c.attr(\"transform\",n.transFn).attr(\"d\",n.path).call(h.stroke,e.gridcolor||\"#ddd\").style(\"stroke-width\",e._gw+\"px\"),\"function\"==typeof n.path&&c.attr(\"d\",n.path)},F.drawZeroLine=function(t,e,n){var r=e._id+\"zl\",i=F.shouldShowZeroLine(t,e,(n=n||n).counterAxis),a=n.layer.selectAll(\"path.\"+r).data(i?[{x:0,id:e._id}]:[]);a.exit().remove(),a.enter().append(\"path\").classed(r,1).classed(\"zl\",1).classed(\"crisp\",!1!==n.crisp).each((function(){n.layer.selectAll(\"path\").sort((function(t,e){return Y(t.id,e.id)}))})),a.attr(\"transform\",n.transFn).attr(\"d\",n.path).call(h.stroke,e.zerolinecolor||h.defaultLine).style(\"stroke-width\",d.crispRound(t,e.zerolinewidth,e._gw||1)+\"px\")},F.drawLabels=function(t,e,n){n=n||{};var a=t._fullLayout,o=e._id,u=o.charAt(0),h=n.cls||o+\"tick\",f=n.vals,p=n.labelFns,m=n.secondary?0:e.tickangle,g=(e._prevTickAngles||{})[h],y=n.layer.selectAll(\"g.\"+h).data(e.showticklabels?f:[],ht),v=[];function _(t,a){var o=-1!==(e.ticklabelposition||\"\").indexOf(\"inside\");t.each((function(t){var s=r.select(this),u=s.select(\".text-math-group\"),h=p.anchorFn(t,a),f=n.transFn.call(s.node(),t)+(i(a)&&0!=+a?\" rotate(\"+a+\",\"+p.xFn(t)+\",\"+(p.yFn(t)-t.fontSize/2)+\")\":\"\"),m=c.lineCount(s),g=z*t.fontSize,y=p.heightFn(t,i(a)?+a:0,(m-1)*g);if(y&&(f+=l(0,y)),u.empty()){var v=s.select(\"text\");v.attr({transform:f,\"text-anchor\":h}),o&&(v.style({opacity:100}),e._hideOutOfRangeInsideTickLabels&&e._hideOutOfRangeInsideTickLabels())}else{var _=d.bBox(u.node()).width;u.attr(\"transform\",f+l(_*{end:-.5,start:.5}[h],0))}}))}y.enter().append(\"g\").classed(h,1).append(\"text\").attr(\"text-anchor\",\"middle\").each((function(e){var n=r.select(this),i=t._promises.length;n.call(c.positionText,p.xFn(e),p.yFn(e)).call(d.font,e.font,e.fontSize,e.fontColor).text(e.text).call(c.convertToTspans,t),t._promises[i]?v.push(t._promises.pop().then((function(){_(n,m)}))):_(n,m)})),y.exit().remove(),n.repositionOnUpdate&&y.each((function(t){r.select(this).select(\"text\").call(c.positionText,p.xFn(t),p.yFn(t))})),e._hideOutOfRangeInsideTickLabels=void 0,-1!==(e.ticklabelposition||\"\").indexOf(\"inside\")&&(e._hideOutOfRangeInsideTickLabels=function(){var t=s.simpleMap(e.range,e.r2l),n=e.l2p(t[0]),i=e.l2p(t[1]),a=Math.min(n,i)+e._offset,o=Math.max(n,i)+e._offset,l=\"x\"===e._id.charAt(0);y.each((function(t){var n=r.select(this);if(n.select(\".text-math-group\").empty()){var i=d.bBox(n.node()),s=!1;l?(i.right>o||i.left<a)&&(s=!0):(i.bottom>o||i.top+(e.tickangle?0:t.fontSize/4)<a)&&(s=!0),s&&n.select(\"text\").style({opacity:0})}}))}),_(y,g+1?g:m);var b=null;e._selections&&(e._selections[h]=y);var x=[function(){return v.length&&Promise.all(v)}];e.automargin&&a._redrawFromAutoMarginCount&&90===g?(b=90,x.push((function(){_(y,g)}))):x.push((function(){if(_(y,m),f.length&&\"x\"===u&&!i(m)&&(\"log\"!==e.type||\"D\"!==String(e.dtick).charAt(0))){b=0;var t,r=0,a=[];if(y.each((function(t){r=Math.max(r,t.fontSize);var n=e.l2p(t.x),i=pt(this),o=d.bBox(i.node());a.push({top:0,bottom:10,height:10,left:n-o.width/2,right:n+o.width/2+2,width:o.width+2})})),\"boundaries\"!==e.tickson&&!e.showdividers||n.secondary){var o=f.length,l=Math.abs((f[o-1].x-f[0].x)*e._m)/(o-1),c=e.ticklabelposition||\"\",h=function(t){return-1!==c.indexOf(t)},p=h(\"top\"),g=h(\"left\"),v=h(\"right\"),x=h(\"bottom\")||g||p||v?(e.tickwidth||0)+6:0,w=l<2.5*r||\"multicategory\"===e.type;for(t=0;t<a.length-1;t++)if(s.bBoxIntersect(a[t],a[t+1],x)){b=w?90:30;break}}else{var k=2;for(e.ticks&&(k+=e.tickwidth/2),t=0;t<a.length;t++){var M=f[t].xbnd,T=a[t];if(null!==M[0]&&T.left-e.l2p(M[0])<k||null!==M[1]&&e.l2p(M[1])-T.right<k){b=90;break}}}b&&_(y,b)}})),e._tickAngles&&x.push((function(){e._tickAngles[h]=null===b?i(m)?m:0:b}));var w=e._anchorAxis;w&&w.autorange&&-1!==(e.ticklabelposition||\"\").indexOf(\"inside\")&&!H(a,e._id)&&(a._insideTickLabelsAutorange||(a._insideTickLabelsAutorange={}),a._insideTickLabelsAutorange[w._name+\".autorange\"]=w.autorange,x.push((function(){y.each((function(t,n){var r=pt(this);e._vals[n].bb=d.bBox(r.node())}))})));var k=s.syncOrAsync(x);return k&&k.then&&t._promises.push(k),k},F.getPxPosition=function(t,e){var n,r=t._fullLayout._size,i=e._id.charAt(0),a=e.side;return\"free\"!==e.anchor?n=e._anchorAxis:\"x\"===i?n={_offset:r.t+(1-(e.position||0))*r.h,_length:0}:\"y\"===i&&(n={_offset:r.l+(e.position||0)*r.w,_length:0}),\"top\"===a||\"left\"===a?n._offset:\"bottom\"===a||\"right\"===a?n._offset+n._length:void 0},F.shouldShowZeroLine=function(t,e,n){var r=s.simpleMap(e.range,e.r2l);return r[0]*r[1]<=0&&e.zeroline&&(\"linear\"===e.type||\"-\"===e.type)&&!(e.rangebreaks&&e.maskBreaks(0)===D)&&(ft(e,0)||!function(t,e,n,r){var i=n._mainAxis;if(i){var a=t._fullLayout,o=e._id.charAt(0),s=F.counterLetter(e._id),l=e._offset+(Math.abs(r[0])<Math.abs(r[1])==(\"x\"===o)?0:e._length),c=a._plots[n._mainSubplot];if(!(c.mainplotinfo||c).overlays.length)return f(n);for(var u=F.list(t,s),h=0;h<u.length;h++){var d=u[h];if(d._mainAxis===i&&f(d))return!0}}function f(t){if(!t.showline||!t.linewidth)return!1;var n=Math.max((t.linewidth+e.zerolinewidth)/2,1);function r(t){return\"number\"==typeof t&&Math.abs(t-l)<n}if(r(t._mainLinePosition)||r(t._mainMirrorPosition))return!0;var i=t._linepositions||{};for(var a in i)if(r(i[a][0])||r(i[a][1]))return!0}}(t,e,n,r)||function(t,e){for(var n=t._fullData,r=e._mainSubplot,i=e._id.charAt(0),a=0;a<n.length;a++){var s=n[a];if(!0===s.visible&&s.xaxis+s.yaxis===r){if(o.traceIs(s,\"bar-like\")&&s.orientation==={x:\"h\",y:\"v\"}[i])return!0;if(s.fill&&s.fill.charAt(s.fill.length-1)===i)return!0}}return!1}(t,e))},F.clipEnds=function(t,e){return e.filter((function(e){return ft(t,e.x)}))},F.allowAutoMargin=function(t){for(var e=F.list(t,\"\",!0),n=0;n<e.length;n++){var r=e[n];r.automargin&&(a.allowAutoMargin(t,mt(r)),r.mirror&&a.allowAutoMargin(t,gt(r))),o.getComponentMethod(\"rangeslider\",\"isVisible\")(r)&&a.allowAutoMargin(t,yt(r))}},F.swap=function(t,e){for(var n=function(t,e){var n,r,i=[];for(n=0;n<e.length;n++){var a=[],o=t._fullData[e[n]].xaxis,s=t._fullData[e[n]].yaxis;if(o&&s){for(r=0;r<i.length;r++)-1===i[r].x.indexOf(o)&&-1===i[r].y.indexOf(s)||a.push(r);if(a.length){var l,c=i[a[0]];if(a.length>1)for(r=1;r<a.length;r++)vt(c.x,(l=i[a[r]]).x),vt(c.y,l.y);vt(c.x,[o]),vt(c.y,[s])}else i.push({x:[o],y:[s]})}}return i}(t,e),r=0;r<n.length;r++)_t(t,n[r].x,n[r].y)}},{\"../../components/color\":643,\"../../components/drawing\":665,\"../../components/titles\":738,\"../../constants/alignment\":745,\"../../constants/numerical\":753,\"../../lib\":778,\"../../lib/svg_text_utils\":803,\"../../plots/plots\":891,\"../../registry\":911,\"./autorange\":827,\"./axis_autotype\":829,\"./axis_ids\":831,\"./clean_ticks\":833,\"./layout_attributes\":842,\"./set_convert\":848,d3:169,\"fast-isnumeric\":241}],829:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../lib\"),a=t(\"../../constants/numerical\").BADNUM,o=i.isArrayOrTypedArray,s=i.isDateTime,l=i.cleanNumber,c=Math.round;function u(t,e){return e?r(t):\"number\"==typeof t}function h(t){return Math.max(1,(t-1)/1e3)}e.exports=function(t,e,n){var i=t,d=n.noMultiCategory;if(o(i)&&!i.length)return\"-\";if(!d&&function(t){return o(t[0])&&o(t[1])}(i))return\"multicategory\";if(d&&Array.isArray(i[0])){for(var f=[],p=0;p<i.length;p++)if(o(i[p]))for(var m=0;m<i[p].length;m++)f.push(i[p][m]);i=f}if(function(t,e){for(var n=t.length,i=h(n),a=0,o=0,l={},u=0;u<n;u+=i){var d=t[c(u)],f=String(d);l[f]||(l[f]=1,s(d,e)&&a++,r(d)&&o++)}return a>2*o}(i,e))return\"date\";var g=\"strict\"!==n.autotypenumbers;return function(t,e){for(var n=t.length,r=h(n),i=0,o=0,s={},u=0;u<n;u+=r){var d=t[c(u)],f=String(d);if(!s[f]){s[f]=1;var p=typeof d;\"boolean\"===p?o++:(e?l(d)!==a:\"number\"===p)?i++:\"string\"===p&&o++}}return o>2*i}(i,g)?\"category\":function(t,e){for(var n=t.length,r=0;r<n;r++)if(u(t[r],e))return!0;return!1}(i,g)?\"linear\":\"-\"}},{\"../../constants/numerical\":753,\"../../lib\":778,\"fast-isnumeric\":241}],830:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../registry\"),a=t(\"../../lib\"),o=t(\"../array_container_defaults\"),s=t(\"./layout_attributes\"),l=t(\"./tick_value_defaults\"),c=t(\"./tick_mark_defaults\"),u=t(\"./tick_label_defaults\"),h=t(\"./category_order_defaults\"),d=t(\"./line_grid_defaults\"),f=t(\"./set_convert\"),p=t(\"./constants\").WEEKDAY_PATTERN,m=t(\"./constants\").HOUR_PATTERN;function g(t,e,n){function i(n,r){return a.coerce(t,e,s.rangebreaks,n,r)}if(i(\"enabled\")){var o=i(\"bounds\");if(o&&o.length>=2){var l,c,u=\"\";if(2===o.length)for(l=0;l<2;l++)if(c=v(o[l])){u=p;break}var h=i(\"pattern\",u);if(h===p)for(l=0;l<2;l++)(c=v(o[l]))&&(e.bounds[l]=o[l]=c-1);if(h)for(l=0;l<2;l++)switch(c=o[l],h){case p:if(!r(c))return void(e.enabled=!1);if((c=+c)!==Math.floor(c)||c<0||c>=7)return void(e.enabled=!1);e.bounds[l]=o[l]=c;break;case m:if(!r(c))return void(e.enabled=!1);if((c=+c)<0||c>24)return void(e.enabled=!1);e.bounds[l]=o[l]=c}if(!1===n.autorange){var d=n.range;if(d[0]<d[1]){if(o[0]<d[0]&&o[1]>d[1])return void(e.enabled=!1)}else if(o[0]>d[0]&&o[1]<d[1])return void(e.enabled=!1)}}else{var f=i(\"values\");if(!f||!f.length)return void(e.enabled=!1);i(\"dvalue\")}}}e.exports=function(t,e,n,r,m){var y,v=r.letter,_=r.font||{},b=r.splomStash||{},x=n(\"visible\",!r.visibleDflt),w=e.type||(e._template||{}).type||\"-\";\"date\"===w&&(i.getComponentMethod(\"calendars\",\"handleDefaults\")(t,e,\"calendar\",r.calendar),r.noTicklabelmode||(y=n(\"ticklabelmode\"))),r.noTicklabelposition&&\"multicategory\"!==w||a.coerce(t,e,{ticklabelposition:{valType:\"enumerated\",dflt:\"outside\",values:\"period\"===y?[\"outside\",\"inside\"]:\"x\"===v?[\"outside\",\"inside\",\"outside left\",\"inside left\",\"outside right\",\"inside right\"]:[\"outside\",\"inside\",\"outside top\",\"inside top\",\"outside bottom\",\"inside bottom\"]}},\"ticklabelposition\"),f(e,m);var k=!e.isValidRange(t.range);k&&r.reverseDflt&&(k=\"reversed\"),!n(\"autorange\",k)||\"linear\"!==w&&\"-\"!==w||n(\"rangemode\"),n(\"range\"),e.cleanRange(),h(t,e,n,r),\"category\"===w||r.noHover||n(\"hoverformat\");var M=n(\"color\"),T=M!==s.color.dflt?M:_.color,S=b.label||m._dfltTitle[v];if(u(t,e,n,w,r,{pass:1}),!x)return e;n(\"title.text\",S),a.coerceFont(n,\"title.font\",{family:_.family,size:Math.round(1.2*_.size),color:T}),l(t,e,n,w),u(t,e,n,w,r,{pass:2}),c(t,e,n,r),d(t,e,n,{dfltColor:M,bgColor:r.bgColor,showGrid:r.showGrid,attributes:s}),(e.showline||e.ticks)&&n(\"mirror\"),r.automargin&&n(\"automargin\");var A,L=\"multicategory\"===w;if(r.noTickson||\"category\"!==w&&!L||!e.ticks&&!e.showgrid||(L&&(A=\"boundaries\"),\"boundaries\"===n(\"tickson\",A)&&delete e.ticklabelposition),L&&n(\"showdividers\")&&(n(\"dividercolor\"),n(\"dividerwidth\")),\"date\"===w)if(o(t,e,{name:\"rangebreaks\",inclusionAttr:\"enabled\",handleItemDefaults:g}),e.rangebreaks.length){for(var C=0;C<e.rangebreaks.length;C++)if(e.rangebreaks[C].pattern===p){e._hasDayOfWeekBreaks=!0;break}if(f(e,m),m._has(\"scattergl\")||m._has(\"splom\"))for(var E=0;E<r.data.length;E++){var O=r.data[E];\"scattergl\"!==O.type&&\"splom\"!==O.type||(O.visible=!1,a.warn(O.type+\" traces do not work on axes with rangebreaks. Setting trace \"+O.index+\" to `visible: false`.\"))}}else delete e.rangebreaks;return e};var y={sun:1,mon:2,tue:3,wed:4,thu:5,fri:6,sat:7};function v(t){if(\"string\"==typeof t)return y[t.substr(0,3).toLowerCase()]}},{\"../../lib\":778,\"../../registry\":911,\"../array_container_defaults\":823,\"./category_order_defaults\":832,\"./constants\":834,\"./layout_attributes\":842,\"./line_grid_defaults\":844,\"./set_convert\":848,\"./tick_label_defaults\":849,\"./tick_mark_defaults\":850,\"./tick_value_defaults\":851,\"fast-isnumeric\":241}],831:[function(t,e,n){\"use strict\";var r=t(\"../../registry\"),i=t(\"./constants\");function a(t,e){if(e&&e.length)for(var n=0;n<e.length;n++)if(e[n][t])return!0;return!1}n.id2name=function(t){if(\"string\"==typeof t&&t.match(i.AX_ID_PATTERN)){var e=t.split(\" \")[0].substr(1);return\"1\"===e&&(e=\"\"),t.charAt(0)+\"axis\"+e}},n.name2id=function(t){if(t.match(i.AX_NAME_PATTERN)){var e=t.substr(5);return\"1\"===e&&(e=\"\"),t.charAt(0)+e}},n.cleanId=function(t,e,n){var r=/( domain)$/.test(t);if(\"string\"==typeof t&&t.match(i.AX_ID_PATTERN)&&(!e||t.charAt(0)===e)&&(!r||n)){var a=t.split(\" \")[0].substr(1).replace(/^0+/,\"\");return\"1\"===a&&(a=\"\"),t.charAt(0)+a+(r&&n?\" domain\":\"\")}},n.list=function(t,e,r){var i=t._fullLayout;if(!i)return[];var a,o=n.listIds(t,e),s=new Array(o.length);for(a=0;a<o.length;a++){var l=o[a];s[a]=i[l.charAt(0)+\"axis\"+l.substr(1)]}if(!r){var c=i._subplots.gl3d||[];for(a=0;a<c.length;a++){var u=i[c[a]];e?s.push(u[e+\"axis\"]):s.push(u.xaxis,u.yaxis,u.zaxis)}}return s},n.listIds=function(t,e){var n=t._fullLayout;if(!n)return[];var r=n._subplots;return e?r[e+\"axis\"]:r.xaxis.concat(r.yaxis)},n.getFromId=function(t,e,r){var i=t._fullLayout;return e=void 0===e||\"string\"!=typeof e?e:e.replace(\" domain\",\"\"),\"x\"===r?e=e.replace(/y[0-9]*/,\"\"):\"y\"===r&&(e=e.replace(/x[0-9]*/,\"\")),i[n.id2name(e)]},n.getFromTrace=function(t,e,i){var a=t._fullLayout,o=null;if(r.traceIs(e,\"gl3d\")){var s=e.scene;\"scene\"===s.substr(0,5)&&(o=a[s][i+\"axis\"])}else o=n.getFromId(t,e[i+\"axis\"]||i);return o},n.idSort=function(t,e){var n=t.charAt(0),r=e.charAt(0);return n!==r?n>r?1:-1:+(t.substr(1)||1)-+(e.substr(1)||1)},n.ref2id=function(t){return!!/^[xyz]/.test(t)&&t.split(\" \")[0]},n.isLinked=function(t,e){return a(e,t._axisMatchGroups)||a(e,t._axisConstraintGroups)}},{\"../../registry\":911,\"./constants\":834}],832:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,r){if(\"category\"===e.type){var i,a=t.categoryarray,o=Array.isArray(a)&&a.length>0;o&&(i=\"array\");var s,l=n(\"categoryorder\",i);\"array\"===l&&(s=n(\"categoryarray\")),o||\"array\"!==l||(l=e.categoryorder=\"trace\"),\"trace\"===l?e._initialCategories=[]:\"array\"===l?e._initialCategories=s.slice():(s=function(t,e){var n,r,i,a=e.dataAttr||t._id.charAt(0),o={};if(e.axData)n=e.axData;else for(n=[],r=0;r<e.data.length;r++){var s=e.data[r];s[a+\"axis\"]===t._id&&n.push(s)}for(r=0;r<n.length;r++){var l=n[r][a];for(i=0;i<l.length;i++){var c=l[i];null!=c&&(o[c]=1)}}return Object.keys(o)}(e,r).sort(),\"category ascending\"===l?e._initialCategories=s:\"category descending\"===l&&(e._initialCategories=s.reverse()))}}},{}],833:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../lib\"),a=t(\"../../constants/numerical\"),o=a.ONEDAY,s=a.ONEWEEK;n.dtick=function(t,e){var n=\"log\"===e,i=\"date\"===e,a=\"category\"===e,s=i?o:1;if(!t)return s;if(r(t))return(t=Number(t))<=0?s:a?Math.max(1,Math.round(t)):i?Math.max(.1,t):t;if(\"string\"!=typeof t||!i&&!n)return s;var l=t.charAt(0),c=t.substr(1);return(c=r(c)?Number(c):0)<=0||!(i&&\"M\"===l&&c===Math.round(c)||n&&\"L\"===l||n&&\"D\"===l&&(1===c||2===c))?s:t},n.tick0=function(t,e,n,a){return\"date\"===e?i.cleanDate(t,i.dateTick0(n,a%s==0?1:0)):\"D1\"!==a&&\"D2\"!==a?r(t)?Number(t):0:void 0}},{\"../../constants/numerical\":753,\"../../lib\":778,\"fast-isnumeric\":241}],834:[function(t,e,n){\"use strict\";var r=t(\"../../lib/regex\").counter;e.exports={idRegex:{x:r(\"x\",\"( domain)?\"),y:r(\"y\",\"( domain)?\")},attrRegex:r(\"[xy]axis\"),xAxisMatch:r(\"xaxis\"),yAxisMatch:r(\"yaxis\"),AX_ID_PATTERN:/^[xyz][0-9]*( domain)?$/,AX_NAME_PATTERN:/^[xyz]axis[0-9]*$/,SUBPLOT_PATTERN:/^x([0-9]*)y([0-9]*)$/,HOUR_PATTERN:\"hour\",WEEKDAY_PATTERN:\"day of week\",MINDRAG:8,MINSELECT:12,MINZOOM:20,DRAGGERSIZE:20,BENDPX:1.5,REDRAWDELAY:50,SELECTDELAY:100,SELECTID:\"-select\",DFLTRANGEX:[-1,6],DFLTRANGEY:[-1,4],traceLayerClasses:[\"imagelayer\",\"heatmaplayer\",\"contourcarpetlayer\",\"contourlayer\",\"funnellayer\",\"waterfalllayer\",\"barlayer\",\"carpetlayer\",\"violinlayer\",\"boxlayer\",\"ohlclayer\",\"scattercarpetlayer\",\"scatterlayer\"],clipOnAxisFalseQuery:[\".scatterlayer\",\".barlayer\",\".funnellayer\",\".waterfalllayer\"],layerValue2layerClass:{\"above traces\":\"above\",\"below traces\":\"below\"}}},{\"../../lib/regex\":795}],835:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./autorange\"),a=t(\"./axis_ids\").id2name,o=t(\"./layout_attributes\"),s=t(\"./scale_zoom\"),l=t(\"./set_convert\"),c=t(\"../../constants/numerical\").ALMOST_EQUAL,u=t(\"../../constants/alignment\").FROM_BL;function h(t,e,n){var i=n.axIds,s=n.layoutOut,l=n.hasImage,c=s._axisConstraintGroups,u=s._axisMatchGroups,h=e._id,m=h.charAt(0),g=((s._splomAxes||{})[m]||{})[h]||{},y=e._id,v=\"x\"===y.charAt(0);function _(n,i){return r.coerce(t,e,o,n,i)}e._matchGroup=null,e._constraintGroup=null,_(\"constrain\",l?\"domain\":\"range\"),r.coerce(t,e,{constraintoward:{valType:\"enumerated\",values:v?[\"left\",\"center\",\"right\"]:[\"bottom\",\"middle\",\"top\"],dflt:v?\"center\":\"middle\"}},\"constraintoward\");var b,x,w=e.type,k=[];for(b=0;b<i.length;b++)(x=i[b])!==y&&s[a(x)].type===w&&k.push(x);var M=f(c,y);if(M){var T=[];for(b=0;b<k.length;b++)M[x=k[b]]||T.push(x);k=T}var S,A,L=k.length;L&&(t.matches||g.matches)&&(S=r.coerce(t,e,{matches:{valType:\"enumerated\",values:k,dflt:-1!==k.indexOf(g.matches)?g.matches:void 0}},\"matches\"));var C=l&&!v?e.anchor:void 0;if(L&&!S&&(t.scaleanchor||C)&&(A=r.coerce(t,e,{scaleanchor:{valType:\"enumerated\",values:k}},\"scaleanchor\",C)),S){e._matchGroup=p(u,y,S,1);var E=s[a(S)],O=d(s,e)/d(s,E);v!==(\"x\"===S.charAt(0))&&(O=(v?\"x\":\"y\")+O),p(c,y,S,O)}else t.matches&&-1!==i.indexOf(t.matches)&&r.warn(\"ignored \"+e._name+'.matches: \"'+t.matches+'\" to avoid an infinite loop');if(A){var D=_(\"scaleratio\");D||(D=e.scaleratio=1),p(c,y,A,D)}else t.scaleanchor&&-1!==i.indexOf(t.scaleanchor)&&r.warn(\"ignored \"+e._name+'.scaleanchor: \"'+t.scaleanchor+'\" to avoid either an infinite loop and possibly inconsistent scaleratios, or because this axis declares a *matches* constraint.')}function d(t,e){var n=e.domain;return n||(n=t[a(e.overlaying)].domain),n[1]-n[0]}function f(t,e){for(var n=0;n<t.length;n++)if(t[n][e])return t[n];return null}function p(t,e,n,r){var i,a,o,s,l,c=f(t,e);null===c?((c={})[e]=1,l=t.length,t.push(c)):l=t.indexOf(c);var u=Object.keys(c);for(i=0;i<t.length;i++)if(o=t[i],i!==l&&o[n]){var h=o[n];for(a=0;a<u.length;a++)o[s=u[a]]=m(h,m(r,c[s]));return void t.splice(l,1)}if(1!==r)for(a=0;a<u.length;a++){var d=u[a];c[d]=m(r,c[d])}c[n]=1}function m(t,e){var n,r,i=\"\",a=\"\";\"string\"==typeof t&&(i=t.match(/^[xy]*/)[0],t=+t.substr(n=i.length)),\"string\"==typeof e&&(a=e.match(/^[xy]*/)[0],e=+e.substr(r=a.length));var o=t*e;return n||r?n&&r&&i.charAt(0)!==a.charAt(0)?n===r?o:(n>r?i.substr(r):a.substr(n))+o:i+a+t*e:o}function g(t,e){for(var n=e._size,r=n.h/n.w,i={},a=Object.keys(t),o=0;o<a.length;o++){var s=a[o],l=t[s];if(\"string\"==typeof l){var c=l.match(/^[xy]*/)[0],u=c.length;l=+l.substr(u);for(var h=\"y\"===c.charAt(0)?r:1/r,d=0;d<u;d++)l*=h}i[s]=l}return i}function y(t,e){var n=t._inputDomain,r=n[0]+(n[1]-n[0])*u[t.constraintoward];t.domain=t._input.domain=[r+(n[0]-r)/e,r+(n[1]-r)/e],t.setScale()}n.handleDefaults=function(t,e,n){var i,o,s,c,u,d,f,p,m=n.axIds,g=n.axHasImage,y=e._axisConstraintGroups=[],v=e._axisMatchGroups=[];for(i=0;i<m.length;i++)h(u=t[c=a(m[i])],d=e[c],{axIds:m,layoutOut:e,hasImage:g[c]});function _(t,n){for(i=0;i<t.length;i++)for(s in o=t[i])e[a(s)][n]=o}for(_(v,\"_matchGroup\"),i=0;i<y.length;i++)for(s in o=y[i])if((d=e[a(s)]).fixedrange){for(var b in o){var x=a(b);!1===(t[x]||{}).fixedrange&&r.warn(\"fixedrange was specified as false for axis \"+x+\" but was overridden because another axis in its constraint group has fixedrange true\"),e[x].fixedrange=!0}break}for(i=0;i<y.length;){for(s in o=y[i]){(d=e[a(s)])._matchGroup&&Object.keys(d._matchGroup).length===Object.keys(o).length&&(y.splice(i,1),i--);break}i++}_(y,\"_constraintGroup\");var w=[\"constrain\",\"range\",\"autorange\",\"rangemode\",\"rangebreaks\",\"categoryorder\",\"categoryarray\"],k=!1,M=!1;function T(){p=d[f],\"rangebreaks\"===f&&(M=d._hasDayOfWeekBreaks)}for(i=0;i<v.length;i++){o=v[i];for(var S=0;S<w.length;S++){var A;for(s in f=w[S],p=null,o)if(u=t[c=a(s)],f in(d=e[c])){if(!d.matches&&(A=d,f in u)){T();break}null===p&&f in u&&T()}if(\"range\"===f&&p&&(k=!0),\"autorange\"===f&&null===p&&k&&(p=!1),null===p&&f in A&&(p=A[f]),null!==p)for(s in o)(d=e[a(s)])[f]=\"range\"===f?p.slice():p,\"rangebreaks\"===f&&(d._hasDayOfWeekBreaks=M,l(d,e))}}},n.enforce=function(t){var e,n,r,o,l,u,h,d,f=t._fullLayout,p=f._axisConstraintGroups||[];for(e=0;e<p.length;e++){r=g(p[e],f);var m=Object.keys(r),v=1/0,_=0,b=1/0,x={},w={},k=!1;for(n=0;n<m.length;n++)w[o=m[n]]=l=f[a(o)],l._inputDomain?l.domain=l._inputDomain.slice():l._inputDomain=l.domain.slice(),l._inputRange||(l._inputRange=l.range.slice()),l.setScale(),x[o]=u=Math.abs(l._m)/r[o],v=Math.min(v,u),\"domain\"!==l.constrain&&l._constraintShrinkable||(b=Math.min(b,u)),delete l._constraintShrinkable,_=Math.max(_,u),\"domain\"===l.constrain&&(k=!0);if(!(v>c*_)||k)for(n=0;n<m.length;n++)if(h=(l=w[o=m[n]]).constrain,(u=x[o])!==b||\"domain\"===h)if(d=u/b,\"range\"===h)s(l,d);else{var M=l._inputDomain,T=(l.domain[1]-l.domain[0])/(M[1]-M[0]),S=(l.r2l(l.range[1])-l.r2l(l.range[0]))/(l.r2l(l._inputRange[1])-l.r2l(l._inputRange[0]));if((d/=T)*S<1){l.domain=l._input.domain=M.slice(),s(l,d);continue}if(S<1&&(l.range=l._input.range=l._inputRange.slice(),d*=S),l.autorange){var A=l.r2l(l.range[0]),L=l.r2l(l.range[1]),C=(A+L)/2,E=C,O=C,D=Math.abs(L-C),I=C-D*d*1.0001,P=C+D*d*1.0001,R=i.makePadFn(f,l,0),z=i.makePadFn(f,l,1);y(l,d);var j,F,N=Math.abs(l._m),B=i.concatExtremes(t,l),Y=B.min,H=B.max;for(F=0;F<Y.length;F++)(j=Y[F].val-R(Y[F])/N)>I&&j<E&&(E=j);for(F=0;F<H.length;F++)(j=H[F].val+z(H[F])/N)<P&&j>O&&(O=j);d/=(O-E)/(2*D),E=l.l2r(E),O=l.l2r(O),l.range=l._input.range=A<L?[E,O]:[O,E]}y(l,d)}}},n.getAxisGroup=function(t,e){for(var n=t._axisMatchGroups,r=0;r<n.length;r++)if(n[r][e])return\"g\"+r;return e},n.clean=function(t,e){if(e._inputDomain){for(var n=!1,r=e._id,i=t._fullLayout._axisConstraintGroups,a=0;a<i.length;a++)if(i[a][r]){n=!0;break}n&&\"domain\"===e.constrain||(e._input.domain=e.domain=e._inputDomain,delete e._inputDomain)}}},{\"../../constants/alignment\":745,\"../../constants/numerical\":753,\"../../lib\":778,\"./autorange\":827,\"./axis_ids\":831,\"./layout_attributes\":842,\"./scale_zoom\":846,\"./set_convert\":848}],836:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"tinycolor2\"),a=t(\"has-passive-events\"),o=t(\"../../registry\"),s=t(\"../../lib\"),l=s.strTranslate,c=t(\"../../lib/svg_text_utils\"),u=t(\"../../components/color\"),h=t(\"../../components/drawing\"),d=t(\"../../components/fx\"),f=t(\"./axes\"),p=t(\"../../lib/setcursor\"),m=t(\"../../components/dragelement\"),g=t(\"../../components/dragelement/helpers\"),y=g.selectingOrDrawing,v=g.freeMode,_=t(\"../../constants/alignment\").FROM_TL,b=t(\"../../lib/clear_gl_canvases\"),x=t(\"../../plot_api/subroutines\").redrawReglTraces,w=t(\"../plots\"),k=t(\"./axis_ids\").getFromId,M=t(\"./select\").prepSelect,T=t(\"./select\").clearSelect,S=t(\"./select\").selectOnClick,A=t(\"./scale_zoom\"),L=t(\"./constants\"),C=L.MINDRAG,E=L.MINZOOM,O=!0;function D(t,e,n,r){var i=s.ensureSingle(t.draglayer,e,n,(function(e){e.classed(\"drag\",!0).style({fill:\"transparent\",\"stroke-width\":0}).attr(\"data-subplot\",t.id)}));return i.call(p,r),i.node()}function I(t,e,n,i,a,o,s){var l=D(t,\"rect\",e,n);return r.select(l).call(h.setRect,i,a,o,s),l}function P(t,e){for(var n=0;n<t.length;n++)if(!t[n].fixedrange)return e;return\"\"}function R(t,e,n,r,i){for(var a=0;a<t.length;a++){var o=t[a];if(!o.fixedrange)if(o.rangebreaks){var s=\"y\"===o._id.charAt(0),l=s?1-n:n;r[o._name+\".range[0]\"]=o.l2r(o.p2l((s?1-e:e)*o._length)),r[o._name+\".range[1]\"]=o.l2r(o.p2l(l*o._length))}else{var c=o._rl[0],u=o._rl[1]-c;r[o._name+\".range[0]\"]=o.l2r(c+u*e),r[o._name+\".range[1]\"]=o.l2r(c+u*n)}}if(i&&i.length){var h=(e+(1-n))/2;R(i,h,1-h,r,[])}}function z(t,e){for(var n=0;n<t.length;n++){var r=t[n];if(!r.fixedrange)if(r.rangebreaks){var i=r._length,a=(r.p2l(0+e)-r.p2l(0)+(r.p2l(i+e)-r.p2l(i)))/2;r.range=[r.l2r(r._rl[0]-a),r.l2r(r._rl[1]-a)]}else r.range=[r.l2r(r._rl[0]-e/r._m),r.l2r(r._rl[1]-e/r._m)]}}function j(t){return 1-(t>=0?Math.min(t,.9):1/(1/Math.max(t,-.3)+3.222))}function F(t,e,n,r,i){return t.append(\"path\").attr(\"class\",\"zoombox\").style({fill:e>.2?\"rgba(0,0,0,0)\":\"rgba(255,255,255,0)\",\"stroke-width\":0}).attr(\"transform\",l(n,r)).attr(\"d\",i+\"Z\")}function N(t,e,n){return t.append(\"path\").attr(\"class\",\"zoombox-corners\").style({fill:u.background,stroke:u.defaultLine,\"stroke-width\":1,opacity:0}).attr(\"transform\",l(e,n)).attr(\"d\",\"M0,0Z\")}function B(t,e,n,r,i,a){t.attr(\"d\",r+\"M\"+n.l+\",\"+n.t+\"v\"+n.h+\"h\"+n.w+\"v-\"+n.h+\"h-\"+n.w+\"Z\"),Y(t,e,i,a)}function Y(t,e,n,r){n||(t.transition().style(\"fill\",r>.2?\"rgba(0,0,0,0.4)\":\"rgba(255,255,255,0.3)\").duration(200),e.transition().style(\"opacity\",1).duration(200))}function H(t){r.select(t).selectAll(\".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners\").remove()}function V(t){O&&t.data&&t._context.showTips&&(s.notifier(s._(t,\"Double-click to zoom back out\"),\"long\"),O=!1)}function U(t){var e=Math.floor(Math.min(t.b-t.t,t.r-t.l,E)/2);return\"M\"+(t.l-3.5)+\",\"+(t.t-.5+e)+\"h3v\"+-e+\"h\"+e+\"v-3h-\"+(e+3)+\"ZM\"+(t.r+3.5)+\",\"+(t.t-.5+e)+\"h-3v\"+-e+\"h\"+-e+\"v-3h\"+(e+3)+\"ZM\"+(t.r+3.5)+\",\"+(t.b+.5-e)+\"h-3v\"+e+\"h\"+-e+\"v3h\"+(e+3)+\"ZM\"+(t.l-3.5)+\",\"+(t.b+.5-e)+\"h3v\"+e+\"h\"+e+\"v3h-\"+(e+3)+\"Z\"}function W(t,e,n,r,i){for(var a,o,l,c,u=!1,h={},d={},f=(i||{}).xaHash,p=(i||{}).yaHash,m=0;m<e.length;m++){var g=e[m];for(a in n)if(g[a]){for(l in g)i&&(f[l]||p[l])||(\"x\"===l.charAt(0)?n:r)[l]||(h[l]=a);for(o in r)i&&(f[o]||p[o])||!g[o]||(u=!0)}for(o in r)if(g[o])for(c in g)i&&(f[c]||p[c])||(\"x\"===c.charAt(0)?n:r)[c]||(d[c]=o)}u&&(s.extendFlat(h,d),d={});var y={},v=[];for(l in h){var _=k(t,l);v.push(_),y[_._id]=_}var b={},x=[];for(c in d){var w=k(t,c);x.push(w),b[w._id]=w}return{xaHash:y,yaHash:b,xaxes:v,yaxes:x,xLinks:h,yLinks:d,isSubplotConstrained:u}}function q(t,e){if(a){var n=void 0!==t.onwheel?\"wheel\":\"mousewheel\";t._onwheel&&t.removeEventListener(n,t._onwheel),t._onwheel=e,t.addEventListener(n,e,{passive:!1})}else void 0!==t.onwheel?t.onwheel=e:void 0!==t.onmousewheel?t.onmousewheel=e:t.isAddedWheelEvent||(t.isAddedWheelEvent=!0,t.addEventListener(\"wheel\",e,{passive:!1}))}function G(t){var e=[];for(var n in t)e.push(t[n]);return e}e.exports={makeDragBox:function(t,e,n,a,l,u,p,g){var O,D,Y,X,Z,J,K,$,Q,tt,et,nt,rt,it,at,ot,st,lt,ct,ut,ht,dt,ft,pt=t._fullLayout._zoomlayer,mt=p+g===\"nsew\",gt=1===(p+g).length;function yt(){if(Q=(O=e.xaxis)._length,tt=(D=e.yaxis)._length,K=O._offset,$=D._offset,(Y={})[O._id]=O,(X={})[D._id]=D,p&&g)for(var n=e.overlays,r=0;r<n.length;r++){var i=n[r].xaxis;Y[i._id]=i;var a=n[r].yaxis;X[a._id]=a}Z=G(Y),J=G(X),rt=P(Z,g),it=P(J,p),at=!it&&!rt,nt=W(t,t._fullLayout._axisMatchGroups,Y,X);var o=(et=W(t,t._fullLayout._axisConstraintGroups,Y,X,nt)).isSubplotConstrained||nt.isSubplotConstrained;ot=g||o,st=p||o;var s=t._fullLayout;lt=s._has(\"scattergl\"),ct=s._has(\"splom\"),ut=s._has(\"svg\")}yt();var vt=function(t,e,n){return t?\"nsew\"===t?n?\"\":\"pan\"===e?\"move\":\"crosshair\":t.toLowerCase()+\"-resize\":\"pointer\"}(it+rt,t._fullLayout.dragmode,mt),_t=I(e,p+g+\"drag\",vt,n,a,l,u);if(at&&!mt)return _t.onmousedown=null,_t.style.pointerEvents=\"none\",_t;var bt,xt,wt,kt,Mt,Tt,St,At,Lt,Ct,Et={element:_t,gd:t,plotinfo:e};function Ot(){Et.plotinfo.selection=!1,T(t)}function Dt(t,n){var i=Et.gd;if(i._fullLayout._activeShapeIndex>=0)i._fullLayout._deactivateShape(i);else{var a=i._fullLayout.clickmode;if(H(i),2!==t||gt||Vt(),mt)a.indexOf(\"select\")>-1&&S(n,i,Z,J,e.id,Et),a.indexOf(\"event\")>-1&&d.click(i,n,e.id);else if(1===t&&gt){var s=p?D:O,l=\"s\"===p||\"w\"===g?0:1,u=s._name+\".range[\"+l+\"]\",h=function(t,e){var n,i=t.range[e],a=Math.abs(i-t.range[1-e]);return\"date\"===t.type?i:\"log\"===t.type?(n=Math.ceil(Math.max(0,-Math.log(a)/Math.LN10))+3,r.format(\".\"+n+\"g\")(Math.pow(10,i))):(n=Math.floor(Math.log(Math.abs(i))/Math.LN10)-Math.floor(Math.log(a)/Math.LN10)+4,r.format(\".\"+String(n)+\"g\")(i))}(s,l),f=\"left\",m=\"middle\";if(s.fixedrange)return;p?(m=\"n\"===p?\"top\":\"bottom\",\"right\"===s.side&&(f=\"right\")):\"e\"===g&&(f=\"right\"),i._context.showAxisRangeEntryBoxes&&r.select(_t).call(c.makeEditable,{gd:i,immediate:!0,background:i._fullLayout.paper_bgcolor,text:String(h),fill:s.tickfont?s.tickfont.color:\"#444\",horizontalAlign:f,verticalAlign:m}).on(\"edit\",(function(t){var e=s.d2r(t);void 0!==e&&o.call(\"_guiRelayout\",i,u,e)}))}}}function It(e,n){if(t._transitioningWithDuration)return!1;var r=Math.max(0,Math.min(Q,dt*e+bt)),i=Math.max(0,Math.min(tt,ft*n+xt)),a=Math.abs(r-bt),o=Math.abs(i-xt);function s(){St=\"\",wt.r=wt.l,wt.t=wt.b,Lt.attr(\"d\",\"M0,0Z\")}if(wt.l=Math.min(bt,r),wt.r=Math.max(bt,r),wt.t=Math.min(xt,i),wt.b=Math.max(xt,i),et.isSubplotConstrained)a>E||o>E?(St=\"xy\",a/Q>o/tt?(o=a*tt/Q,xt>i?wt.t=xt-o:wt.b=xt+o):(a=o*Q/tt,bt>r?wt.l=bt-a:wt.r=bt+a),Lt.attr(\"d\",U(wt))):s();else if(nt.isSubplotConstrained)if(a>E||o>E){St=\"xy\";var l=Math.min(wt.l/Q,(tt-wt.b)/tt),c=Math.max(wt.r/Q,(tt-wt.t)/tt);wt.l=l*Q,wt.r=c*Q,wt.b=(1-l)*tt,wt.t=(1-c)*tt,Lt.attr(\"d\",U(wt))}else s();else!it||o<Math.min(Math.max(.6*a,C),E)?a<C||!rt?s():(wt.t=0,wt.b=tt,St=\"x\",Lt.attr(\"d\",function(t,e){return\"M\"+(t.l-.5)+\",\"+(e-E-.5)+\"h-3v\"+(2*E+1)+\"h3ZM\"+(t.r+.5)+\",\"+(e-E-.5)+\"h3v\"+(2*E+1)+\"h-3Z\"}(wt,xt))):!rt||a<Math.min(.6*o,E)?(wt.l=0,wt.r=Q,St=\"y\",Lt.attr(\"d\",function(t,e){return\"M\"+(e-E-.5)+\",\"+(t.t-.5)+\"v-3h\"+(2*E+1)+\"v3ZM\"+(e-E-.5)+\",\"+(t.b+.5)+\"v3h\"+(2*E+1)+\"v-3Z\"}(wt,bt))):(St=\"xy\",Lt.attr(\"d\",U(wt)));wt.w=wt.r-wt.l,wt.h=wt.b-wt.t,St&&(Ct=!0),t._dragged=Ct,B(At,Lt,wt,Mt,Tt,kt),Pt(),t.emit(\"plotly_relayouting\",ht),Tt=!0}function Pt(){ht={},\"xy\"!==St&&\"x\"!==St||(R(Z,wt.l/Q,wt.r/Q,ht,et.xaxes),Yt(\"x\",ht)),\"xy\"!==St&&\"y\"!==St||(R(J,(tt-wt.b)/tt,(tt-wt.t)/tt,ht,et.yaxes),Yt(\"y\",ht))}function Rt(){Pt(),H(t),Ut(),V(t)}Et.prepFn=function(e,n,r){var a=Et.dragmode,o=t._fullLayout.dragmode;o!==a&&(Et.dragmode=o),yt(),dt=t._fullLayout._invScaleX,ft=t._fullLayout._invScaleY,at||(mt?e.shiftKey?\"pan\"===o?o=\"zoom\":y(o)||(o=\"pan\"):e.ctrlKey&&(o=\"pan\"):o=\"pan\"),Et.minDrag=v(o)?1:void 0,y(o)?(Et.xaxes=Z,Et.yaxes=J,M(e,n,r,Et,o)):(Et.clickFn=Dt,y(a)&&Ot(),at||(\"zoom\"===o?(Et.moveFn=It,Et.doneFn=Rt,Et.minDrag=1,function(e,n,r){var a=_t.getBoundingClientRect();bt=n-a.left,xt=r-a.top,t._fullLayout._calcInverseTransform(t);var o=s.apply3DTransform(t._fullLayout._invTransform)(bt,xt);wt={l:bt=o[0],r:bt,w:0,t:xt=o[1],b:xt,h:0},kt=t._hmpixcount?t._hmlumcount/t._hmpixcount:i(t._fullLayout.plot_bgcolor).getLuminance(),Tt=!1,St=\"xy\",Ct=!1,At=F(pt,kt,K,$,Mt=\"M0,0H\"+Q+\"V\"+tt+\"H0V0\"),Lt=N(pt,K,$)}(0,n,r)):\"pan\"===o&&(Et.moveFn=Bt,Et.doneFn=Ut))),t._fullLayout._redrag=function(){var e=t._dragdata;e&&e.element===_t&&(y(t._fullLayout.dragmode)||(yt(),Wt([0,0,Q,tt]),Et.moveFn(e.dx,e.dy)))}},m.init(Et);var zt=[0,0,Q,tt],jt=null,Ft=L.REDRAWDELAY,Nt=e.mainplot?t._fullLayout._plots[e.mainplot]:e;function Bt(e,n){if(e*=dt,n*=ft,!t._transitioningWithDuration){if(t._fullLayout._replotting=!0,\"ew\"===rt||\"ns\"===it){var r=rt?-e:0,i=it?-n:0;if(nt.isSubplotConstrained){if(rt&&it){var a=(e/Q-n/tt)/2;r=-(e=a*Q),i=-(n=-a*tt)}it?r=-i*Q/tt:i=-r*tt/Q}return rt&&(z(Z,e),Yt(\"x\")),it&&(z(J,n),Yt(\"y\")),Wt([r,i,Q,tt]),Ht(),void t.emit(\"plotly_relayouting\",ht)}var o,s,l=\"w\"===rt==(\"n\"===it)?1:-1;if(rt&&it&&(et.isSubplotConstrained||nt.isSubplotConstrained)){var c=(e/Q+l*n/tt)/2;e=c*Q,n=l*c*tt}if(\"w\"===rt?e=f(Z,0,e):\"e\"===rt?e=f(Z,1,-e):rt||(e=0),\"n\"===it?n=f(J,1,n):\"s\"===it?n=f(J,0,-n):it||(n=0),o=\"w\"===rt?e:0,s=\"n\"===it?n:0,et.isSubplotConstrained&&!nt.isSubplotConstrained||nt.isSubplotConstrained&&rt&&it&&l>0){var u;if(nt.isSubplotConstrained||!rt&&1===it.length){for(u=0;u<Z.length;u++)Z[u].range=Z[u]._r.slice(),A(Z[u],1-n/tt);o=(e=n*Q/tt)/2}if(nt.isSubplotConstrained||!it&&1===rt.length){for(u=0;u<J.length;u++)J[u].range=J[u]._r.slice(),A(J[u],1-e/Q);s=(n=e*tt/Q)/2}}nt.isSubplotConstrained&&it||Yt(\"x\"),nt.isSubplotConstrained&&rt||Yt(\"y\");var h=Q-e,d=tt-n;!nt.isSubplotConstrained||rt&&it||(rt?(s=o?0:e*tt/Q,d=h*tt/Q):(o=s?0:n*Q/tt,h=d*Q/tt)),Wt([o,s,h,d]),Ht(),t.emit(\"plotly_relayouting\",ht)}function f(t,e,n){for(var r,i,a=1-e,o=0;o<t.length;o++){var s=t[o];if(!s.fixedrange){r=s,i=s._rl[a]+(s._rl[e]-s._rl[a])/j(n/s._length);var l=s.l2r(i);!1!==l&&void 0!==l&&(s.range[e]=l)}}return r._length*(r._rl[e]-i)/(r._rl[e]-r._rl[a])}}function Yt(t,e){for(var n=nt.isSubplotConstrained?{x:J,y:Z}[t]:nt[t+\"axes\"],r=nt.isSubplotConstrained?{x:Z,y:J}[t]:[],i=0;i<n.length;i++){var a=n[i],o=a._id,s=nt.xLinks[o]||nt.yLinks[o],l=r[0]||Y[s]||X[s];l&&(e?(e[a._name+\".range[0]\"]=e[l._name+\".range[0]\"],e[a._name+\".range[1]\"]=e[l._name+\".range[1]\"]):a.range=l.range.slice())}}function Ht(){var e,n=[];function r(t){for(e=0;e<t.length;e++)t[e].fixedrange||n.push(t[e]._id)}for(ot&&(r(Z),r(et.xaxes),r(nt.xaxes)),st&&(r(J),r(et.yaxes),r(nt.yaxes)),ht={},e=0;e<n.length;e++){var i=k(t,n[e]);f.drawOne(t,i,{skipTitle:!0}),ht[i._name+\".range[0]\"]=i.range[0],ht[i._name+\".range[1]\"]=i.range[1]}f.redrawComponents(t,n)}function Vt(){if(!t._transitioningWithDuration){var e=t._context.doubleClick,n=[];rt&&(n=n.concat(Z)),it&&(n=n.concat(J)),nt.xaxes&&(n=n.concat(nt.xaxes)),nt.yaxes&&(n=n.concat(nt.yaxes));var r,i,a,s={};if(\"reset+autosize\"===e)for(e=\"autosize\",i=0;i<n.length;i++)if((r=n[i])._rangeInitial&&(r.range[0]!==r._rangeInitial[0]||r.range[1]!==r._rangeInitial[1])||!r._rangeInitial&&!r.autorange){e=\"reset\";break}if(\"autosize\"===e)for(i=0;i<n.length;i++)(r=n[i]).fixedrange||(s[r._name+\".autorange\"]=!0);else if(\"reset\"===e)for((rt||et.isSubplotConstrained)&&(n=n.concat(et.xaxes)),it&&!et.isSubplotConstrained&&(n=n.concat(et.yaxes)),et.isSubplotConstrained&&(rt?it||(n=n.concat(J)):n=n.concat(Z)),i=0;i<n.length;i++)(r=n[i]).fixedrange||(r._rangeInitial?(s[r._name+\".range[0]\"]=(a=r._rangeInitial)[0],s[r._name+\".range[1]\"]=a[1]):s[r._name+\".autorange\"]=!0);t.emit(\"plotly_doubleclick\",null),o.call(\"_guiRelayout\",t,s)}}function Ut(){Wt([0,0,Q,tt]),s.syncOrAsync([w.previousPromises,function(){t._fullLayout._replotting=!1,o.call(\"_guiRelayout\",t,ht)}],t)}function Wt(e){var n,r,i,a,l=t._fullLayout,c=l._plots,u=l._subplots.cartesian;if(ct&&o.subplotsRegistry.splom.drag(t),lt)for(n=0;n<u.length;n++)if(i=(r=c[u[n]]).xaxis,a=r.yaxis,r._scene){var d=s.simpleMap(i.range,i.r2l),f=s.simpleMap(a.range,a.r2l);r._scene.update({range:[d[0],f[0],d[1],f[1]]})}if((ct||lt)&&(b(t),x(t)),ut){var m=e[2]/O._length,y=e[3]/D._length;for(n=0;n<u.length;n++){i=(r=c[u[n]]).xaxis,a=r.yaxis;var v,_,w,k,M=(st||nt.isSubplotConstrained)&&!a.fixedrange&&X[a._id];if((ot||nt.isSubplotConstrained)&&!i.fixedrange&&Y[i._id]?(v=m,w=g||nt.isSubplotConstrained?e[0]:Xt(i,v)):nt.xaHash[i._id]?(v=m,w=e[0]*i._length/O._length):nt.yaHash[i._id]?(v=y,w=\"ns\"===it?-e[1]*i._length/D._length:Xt(i,v,{n:\"top\",s:\"bottom\"}[it])):w=Gt(i,v=qt(i,m,y)),M?(_=y,k=p||nt.isSubplotConstrained?e[1]:Xt(a,_)):nt.yaHash[a._id]?(_=y,k=e[1]*a._length/D._length):nt.xaHash[a._id]?(_=m,k=\"ew\"===rt?-e[0]*a._length/O._length:Xt(a,_,{e:\"right\",w:\"left\"}[rt])):k=Gt(a,_=qt(a,m,y)),v||_){v||(v=1),_||(_=1);var T=i._offset-w/v,S=a._offset-k/_;r.clipRect.call(h.setTranslate,w,k).call(h.setScale,v,_),r.plot.call(h.setTranslate,T,S).call(h.setScale,1/v,1/_),v===r.xScaleFactor&&_===r.yScaleFactor||(h.setPointGroupScale(r.zoomScalePts,v,_),h.setTextPointsScale(r.zoomScaleTxt,v,_)),h.hideOutsideRangePoints(r.clipOnAxisFalseTraces,r),r.xScaleFactor=v,r.yScaleFactor=_}}}}function qt(t,e,n){return t.fixedrange?0:ot&&et.xaHash[t._id]?e:st&&(et.isSubplotConstrained?et.xaHash:et.yaHash)[t._id]?n:0}function Gt(t,e){return e?(t.range=t._r.slice(),A(t,e),Xt(t,e)):0}function Xt(t,e,n){return t._length*(1-e)*_[n||t.constraintoward||\"middle\"]}return p.length*g.length!=1&&q(_t,(function(e){if(t._context._scrollZoom.cartesian||t._fullLayout._enablescrollzoom){if(Ot(),t._transitioningWithDuration)return e.preventDefault(),void e.stopPropagation();yt(),clearTimeout(jt);var n=-e.deltaY;if(isFinite(n)||(n=e.wheelDelta/10),isFinite(n)){var r,i=Math.exp(-Math.min(Math.max(n,-20),20)/200),a=Nt.draglayer.select(\".nsewdrag\").node().getBoundingClientRect(),o=(e.clientX-a.left)/a.width,l=(a.bottom-e.clientY)/a.height;if(ot){for(g||(o=.5),r=0;r<Z.length;r++)c(Z[r],o,i);Yt(\"x\"),zt[2]*=i,zt[0]+=zt[2]*o*(1/i-1)}if(st){for(p||(l=.5),r=0;r<J.length;r++)c(J[r],l,i);Yt(\"y\"),zt[3]*=i,zt[1]+=zt[3]*(1-l)*(1/i-1)}Wt(zt),Ht(),t.emit(\"plotly_relayouting\",ht),jt=setTimeout((function(){zt=[0,0,Q,tt],Ut()}),Ft),e.preventDefault()}else s.log(\"Did not find wheel motion attributes: \",e)}function c(t,e,n){if(!t.fixedrange){var r=s.simpleMap(t.range,t.r2l),i=r[0]+(r[1]-r[0])*e;t.range=r.map((function(e){return t.l2r(i+(e-i)*n)}))}}})),_t},makeDragger:D,makeRectDragger:I,makeZoombox:F,makeCorners:N,updateZoombox:B,xyCorners:U,transitionZoombox:Y,removeZoombox:H,showDoubleClickNotifier:V,attachWheelEventHandler:q}},{\"../../components/color\":643,\"../../components/dragelement\":662,\"../../components/dragelement/helpers\":661,\"../../components/drawing\":665,\"../../components/fx\":683,\"../../constants/alignment\":745,\"../../lib\":778,\"../../lib/clear_gl_canvases\":762,\"../../lib/setcursor\":799,\"../../lib/svg_text_utils\":803,\"../../plot_api/subroutines\":818,\"../../registry\":911,\"../plots\":891,\"./axes\":828,\"./axis_ids\":831,\"./constants\":834,\"./scale_zoom\":846,\"./select\":847,d3:169,\"has-passive-events\":441,tinycolor2:576}],837:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../components/fx\"),a=t(\"../../components/dragelement\"),o=t(\"../../lib/setcursor\"),s=t(\"./dragbox\").makeDragBox,l=t(\"./constants\").DRAGGERSIZE;n.initInteractions=function(t){var e=t._fullLayout;if(t._context.staticPlot)r.select(t).selectAll(\".drag\").remove();else if(e._has(\"cartesian\")||e._has(\"splom\")){Object.keys(e._plots||{}).sort((function(t,n){if((e._plots[t].mainplot&&!0)===(e._plots[n].mainplot&&!0)){var r=t.split(\"y\"),i=n.split(\"y\");return r[0]===i[0]?Number(r[1]||1)-Number(i[1]||1):Number(r[0]||1)-Number(i[0]||1)}return e._plots[t].mainplot?1:-1})).forEach((function(n){var r=e._plots[n],o=r.xaxis,c=r.yaxis;if(!r.mainplot){var u=s(t,r,o._offset,c._offset,o._length,c._length,\"ns\",\"ew\");u.onmousemove=function(e){t._fullLayout._rehover=function(){t._fullLayout._hoversubplot===n&&t._fullLayout._plots[n]&&i.hover(t,e,n)},i.hover(t,e,n),t._fullLayout._lasthover=u,t._fullLayout._hoversubplot=n},u.onmouseout=function(e){t._dragging||(t._fullLayout._hoversubplot=null,a.unhover(t,e))},t._context.showAxisDragHandles&&(s(t,r,o._offset-l,c._offset-l,l,l,\"n\",\"w\"),s(t,r,o._offset+o._length,c._offset-l,l,l,\"n\",\"e\"),s(t,r,o._offset-l,c._offset+c._length,l,l,\"s\",\"w\"),s(t,r,o._offset+o._length,c._offset+c._length,l,l,\"s\",\"e\"))}if(t._context.showAxisDragHandles){if(n===o._mainSubplot){var h=o._mainLinePosition;\"top\"===o.side&&(h-=l),s(t,r,o._offset+.1*o._length,h,.8*o._length,l,\"\",\"ew\"),s(t,r,o._offset,h,.1*o._length,l,\"\",\"w\"),s(t,r,o._offset+.9*o._length,h,.1*o._length,l,\"\",\"e\")}if(n===c._mainSubplot){var d=c._mainLinePosition;\"right\"!==c.side&&(d-=l),s(t,r,d,c._offset+.1*c._length,l,.8*c._length,\"ns\",\"\"),s(t,r,d,c._offset+.9*c._length,l,.1*c._length,\"s\",\"\"),s(t,r,d,c._offset,l,.1*c._length,\"n\",\"\")}}}));var o=e._hoverlayer.node();o.onmousemove=function(n){n.target=t._fullLayout._lasthover,i.hover(t,n,e._hoversubplot)},o.onclick=function(e){e.target=t._fullLayout._lasthover,i.click(t,e)},o.onmousedown=function(e){t._fullLayout._lasthover.onmousedown(e)},n.updateFx(t)}},n.updateFx=function(t){var e=t._fullLayout;o(e._draggers,\"pan\"===e.dragmode?\"move\":\"crosshair\")}},{\"../../components/dragelement\":662,\"../../components/fx\":683,\"../../lib/setcursor\":799,\"./constants\":834,\"./dragbox\":836,d3:169}],838:[function(t,e,n){\"use strict\";e.exports={clearOutlineControllers:function(t){var e=t._fullLayout._zoomlayer;e&&e.selectAll(\".outline-controllers\").remove()},clearSelect:function(t){var e=t._fullLayout._zoomlayer;e&&e.selectAll(\".select-outline\").remove(),t._fullLayout._drawing=!1}}},{}],839:[function(t,e,n){\"use strict\";var r=t(\"../../lib\").strTranslate;function i(t,e){switch(t.type){case\"log\":return t.p2d(e);case\"date\":return t.p2r(e,0,t.calendar);default:return t.p2r(e)}}e.exports={p2r:i,r2p:function(t,e){switch(t.type){case\"log\":return t.d2p(e);case\"date\":return t.r2p(e,0,t.calendar);default:return t.r2p(e)}},axValue:function(t){var e=\"y\"===t._id.charAt(0)?1:0;return function(n){return i(t,n[e])}},getTransform:function(t){return r(t.xaxis._offset,t.yaxis._offset)}}},{\"../../lib\":778}],840:[function(t,e,n){\"use strict\";var r=t(\"../../registry\"),i=t(\"../../lib\"),a=t(\"./axis_ids\");e.exports=function(t){return function(e,n){var o=e[t];if(Array.isArray(o))for(var s=r.subplotsRegistry.cartesian,l=s.idRegex,c=n._subplots,u=c.xaxis,h=c.yaxis,d=c.cartesian,f=n._has(\"cartesian\")||n._has(\"gl2d\"),p=0;p<o.length;p++){var m=o[p];if(i.isPlainObject(m)){var g=a.cleanId(m.xref,\"x\",!1),y=a.cleanId(m.yref,\"y\",!1),v=l.x.test(g),_=l.y.test(y);if(v||_){f||i.pushUnique(n._basePlotModules,s);var b=!1;v&&-1===u.indexOf(g)&&(u.push(g),b=!0),_&&-1===h.indexOf(y)&&(h.push(y),b=!0),b&&v&&_&&d.push(g+y)}}}}}},{\"../../lib\":778,\"../../registry\":911,\"./axis_ids\":831}],841:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../registry\"),a=t(\"../../lib\"),o=t(\"../plots\"),s=t(\"../../components/drawing\"),l=t(\"../get_data\").getModuleCalcData,c=t(\"./axis_ids\"),u=t(\"./constants\"),h=t(\"../../constants/xmlns_namespaces\"),d=a.ensureSingle;function f(t,e,n){return a.ensureSingle(t,e,n,(function(t){t.datum(n)}))}function p(t,e,n,a,o){for(var c,h,d,f=u.traceLayerClasses,p=t._fullLayout,m=p._modules,g=[],y=[],v=0;v<m.length;v++){var _=(c=m[v]).name,b=i.modules[_].categories;if(b.svg){var x=c.layerName||_+\"layer\",w=c.plot;n=(h=l(n,w))[1],(d=h[0]).length&&g.push({i:f.indexOf(x),className:x,plotMethod:w,cdModule:d}),b.zoomScale&&y.push(\".\"+x)}}g.sort((function(t,e){return t.i-e.i}));var k=e.plot.selectAll(\"g.mlayer\").data(g,(function(t){return t.className}));if(k.enter().append(\"g\").attr(\"class\",(function(t){return t.className})).classed(\"mlayer\",!0).classed(\"rangeplot\",e.isRangePlot),k.exit().remove(),k.order(),k.each((function(n){var i=r.select(this),l=n.className;n.plotMethod(t,e,n.cdModule,i,a,o),-1===u.clipOnAxisFalseQuery.indexOf(\".\"+l)&&s.setClipUrl(i,e.layerClipId,t)})),p._has(\"scattergl\")&&(c=i.getModule(\"scattergl\"),d=l(n,c)[0],c.plot(t,e,d)),!t._context.staticPlot&&(e._hasClipOnAxisFalse&&(e.clipOnAxisFalseTraces=e.plot.selectAll(u.clipOnAxisFalseQuery.join(\",\")).selectAll(\".trace\")),y.length)){var M=e.plot.selectAll(y.join(\",\")).selectAll(\".trace\");e.zoomScalePts=M.selectAll(\"path.point\"),e.zoomScaleTxt=M.selectAll(\".textpoint\")}}function m(t,e){var n=e.plotgroup,r=e.id,i=u.layerValue2layerClass[e.xaxis.layer],a=u.layerValue2layerClass[e.yaxis.layer],o=t._fullLayout._hasOnlyLargeSploms;if(e.mainplot){var s=e.mainplotinfo,l=s.plotgroup,h=r+\"-x\",p=r+\"-y\";e.gridlayer=s.gridlayer,e.zerolinelayer=s.zerolinelayer,d(s.overlinesBelow,\"path\",h),d(s.overlinesBelow,\"path\",p),d(s.overaxesBelow,\"g\",h),d(s.overaxesBelow,\"g\",p),e.plot=d(s.overplot,\"g\",r),d(s.overlinesAbove,\"path\",h),d(s.overlinesAbove,\"path\",p),d(s.overaxesAbove,\"g\",h),d(s.overaxesAbove,\"g\",p),e.xlines=l.select(\".overlines-\"+i).select(\".\"+h),e.ylines=l.select(\".overlines-\"+a).select(\".\"+p),e.xaxislayer=l.select(\".overaxes-\"+i).select(\".\"+h),e.yaxislayer=l.select(\".overaxes-\"+a).select(\".\"+p)}else if(o)e.xlines=d(n,\"path\",\"xlines-above\"),e.ylines=d(n,\"path\",\"ylines-above\"),e.xaxislayer=d(n,\"g\",\"xaxislayer-above\"),e.yaxislayer=d(n,\"g\",\"yaxislayer-above\");else{var m=d(n,\"g\",\"layer-subplot\");e.shapelayer=d(m,\"g\",\"shapelayer\"),e.imagelayer=d(m,\"g\",\"imagelayer\"),e.gridlayer=d(n,\"g\",\"gridlayer\"),e.zerolinelayer=d(n,\"g\",\"zerolinelayer\"),d(n,\"path\",\"xlines-below\"),d(n,\"path\",\"ylines-below\"),e.overlinesBelow=d(n,\"g\",\"overlines-below\"),d(n,\"g\",\"xaxislayer-below\"),d(n,\"g\",\"yaxislayer-below\"),e.overaxesBelow=d(n,\"g\",\"overaxes-below\"),e.plot=d(n,\"g\",\"plot\"),e.overplot=d(n,\"g\",\"overplot\"),e.xlines=d(n,\"path\",\"xlines-above\"),e.ylines=d(n,\"path\",\"ylines-above\"),e.overlinesAbove=d(n,\"g\",\"overlines-above\"),d(n,\"g\",\"xaxislayer-above\"),d(n,\"g\",\"yaxislayer-above\"),e.overaxesAbove=d(n,\"g\",\"overaxes-above\"),e.xlines=n.select(\".xlines-\"+i),e.ylines=n.select(\".ylines-\"+a),e.xaxislayer=n.select(\".xaxislayer-\"+i),e.yaxislayer=n.select(\".yaxislayer-\"+a)}o||(f(e.gridlayer,\"g\",e.xaxis._id),f(e.gridlayer,\"g\",e.yaxis._id),e.gridlayer.selectAll(\"g\").map((function(t){return t[0]})).sort(c.idSort)),e.xlines.style(\"fill\",\"none\").classed(\"crisp\",!0),e.ylines.style(\"fill\",\"none\").classed(\"crisp\",!0)}function g(t,e){if(t){var n={};for(var i in t.each((function(t){var i=t[0];r.select(this).remove(),y(i,e),n[i]=!0})),e._plots)for(var a=e._plots[i].overlays||[],o=0;o<a.length;o++){var s=a[o];n[s.id]&&s.plot.selectAll(\".trace\").remove()}}}function y(t,e){e._draggers.selectAll(\"g.\"+t).remove(),e._defs.select(\"#clip\"+e._uid+t+\"plot\").remove()}n.name=\"cartesian\",n.attr=[\"xaxis\",\"yaxis\"],n.idRoot=[\"x\",\"y\"],n.idRegex=u.idRegex,n.attrRegex=u.attrRegex,n.attributes=t(\"./attributes\"),n.layoutAttributes=t(\"./layout_attributes\"),n.supplyLayoutDefaults=t(\"./layout_defaults\"),n.transitionAxes=t(\"./transition_axes\"),n.finalizeSubplots=function(t,e){var n,r,i,o=e._subplots,s=o.xaxis,l=o.yaxis,h=o.cartesian,d=h.concat(o.gl2d||[]),f={},p={};for(n=0;n<d.length;n++){var m=d[n].split(\"y\");f[m[0]]=1,p[\"y\"+m[1]]=1}for(n=0;n<s.length;n++)f[r=s[n]]||(i=(t[c.id2name(r)]||{}).anchor,u.idRegex.y.test(i)||(i=\"y\"),h.push(r+i),d.push(r+i),p[i]||(p[i]=1,a.pushUnique(l,i)));for(n=0;n<l.length;n++)p[i=l[n]]||(r=(t[c.id2name(i)]||{}).anchor,u.idRegex.x.test(r)||(r=\"x\"),h.push(r+i),d.push(r+i),f[r]||(f[r]=1,a.pushUnique(s,r)));if(!d.length){for(var g in r=\"\",i=\"\",t)u.attrRegex.test(g)&&(\"x\"===g.charAt(0)?(!r||+g.substr(5)<+r.substr(5))&&(r=g):(!i||+g.substr(5)<+i.substr(5))&&(i=g));r=r?c.name2id(r):\"x\",i=i?c.name2id(i):\"y\",s.push(r),l.push(i),h.push(r+i)}},n.plot=function(t,e,n,r){var i,a=t._fullLayout,o=a._subplots.cartesian,s=t.calcdata;if(!Array.isArray(e))for(e=[],i=0;i<s.length;i++)e.push(i);for(i=0;i<o.length;i++){for(var l,c=o[i],u=a._plots[c],h=[],d=0;d<s.length;d++){var f=s[d],m=f[0].trace;m.xaxis+m.yaxis===c&&((-1!==e.indexOf(m.index)||m.carpet)&&(l&&l[0].trace.xaxis+l[0].trace.yaxis===c&&-1!==[\"tonextx\",\"tonexty\",\"tonext\"].indexOf(m.fill)&&-1===h.indexOf(l)&&h.push(l),h.push(f)),l=f)}p(t,u,h,n,r)}},n.clean=function(t,e,n,r){var i,a,o,s=r._plots||{},l=e._plots||{},u=r._subplots||{};if(r._hasOnlyLargeSploms&&!e._hasOnlyLargeSploms)for(o in s)(i=s[o]).plotgroup&&i.plotgroup.remove();var h=r._has&&r._has(\"gl\"),d=e._has&&e._has(\"gl\");if(h&&!d)for(o in s)(i=s[o])._scene&&i._scene.destroy();if(u.xaxis&&u.yaxis){var f=c.listIds({_fullLayout:r});for(a=0;a<f.length;a++){var p=f[a];e[c.id2name(p)]||r._infolayer.selectAll(\".g-\"+p+\"title\").remove()}}var m=r._has&&r._has(\"cartesian\"),v=e._has&&e._has(\"cartesian\");if(m&&!v)g(r._cartesianlayer.selectAll(\".subplot\"),r),r._defs.selectAll(\".axesclip\").remove(),delete r._axisConstraintGroups,delete r._axisMatchGroups;else if(u.cartesian)for(a=0;a<u.cartesian.length;a++){var _=u.cartesian[a];l[_]||(r._cartesianlayer.selectAll(\".\"+_+\",.\"+_+\"-x,.\"+_+\"-y\").remove(),y(_,r))}},n.drawFramework=function(t){var e=t._fullLayout,n=function(t){var e,n,r,i,a,o,s=t._fullLayout,l=s._subplots.cartesian,c=l.length,u=[],h=[];for(e=0;e<c;e++){var d=(a=(i=s._plots[r=l[e]]).xaxis)._mainAxis._id+(o=i.yaxis)._mainAxis._id,f=s._plots[d];i.overlays=[],d!==r&&f?(i.mainplot=d,i.mainplotinfo=f,h.push(r)):(i.mainplot=void 0,i.mainplotinfo=void 0,u.push(r))}for(e=0;e<h.length;e++)(i=s._plots[r=h[e]]).mainplotinfo.overlays.push(i);var p=u.concat(h),m=new Array(c);for(e=0;e<c;e++){var g=[r=p[e],(a=(i=s._plots[r]).xaxis).layer,(o=i.yaxis).layer,a.overlaying||\"\",o.overlaying||\"\"];for(n=0;n<i.overlays.length;n++)g.push(i.overlays[n].id);m[e]=g}return m}(t),i=e._cartesianlayer.selectAll(\".subplot\").data(n,String);i.enter().append(\"g\").attr(\"class\",(function(t){return\"subplot \"+t[0]})),i.order(),i.exit().call(g,e),i.each((function(n){var i=n[0],a=e._plots[i];a.plotgroup=r.select(this),m(t,a),a.draglayer=d(e._draggers,\"g\",i)}))},n.rangePlot=function(t,e,n){m(t,e),p(t,e,n),o.style(t)},n.toSVG=function(t){var e=t._fullLayout._glimages,n=r.select(t).selectAll(\".svg-container\");n.filter((function(t,e){return e===n.size()-1})).selectAll(\".gl-canvas-context, .gl-canvas-focus\").each((function(){var t=this,n=t.toDataURL(\"image/png\");e.append(\"svg:image\").attr({xmlns:h.svg,\"xlink:href\":n,preserveAspectRatio:\"none\",x:0,y:0,width:t.width,height:t.height})}))},n.updateFx=t(\"./graph_interact\").updateFx},{\"../../components/drawing\":665,\"../../constants/xmlns_namespaces\":754,\"../../lib\":778,\"../../registry\":911,\"../get_data\":865,\"../plots\":891,\"./attributes\":826,\"./axis_ids\":831,\"./constants\":834,\"./graph_interact\":837,\"./layout_attributes\":842,\"./layout_defaults\":843,\"./transition_axes\":852,d3:169}],842:[function(t,e,n){\"use strict\";var r=t(\"../font_attributes\"),i=t(\"../../components/color/attributes\"),a=t(\"../../components/drawing/attributes\").dash,o=t(\"../../lib/extend\").extendFlat,s=t(\"../../plot_api/plot_template\").templatedArray,l=(t(\"../../constants/docs\"),t(\"../../constants/docs\"),t(\"../../constants/numerical\").ONEDAY),c=t(\"./constants\"),u=c.HOUR_PATTERN,h=c.WEEKDAY_PATTERN;e.exports={visible:{valType:\"boolean\",editType:\"plot\"},color:{valType:\"color\",dflt:i.defaultLine,editType:\"ticks\"},title:{text:{valType:\"string\",editType:\"ticks\"},font:r({editType:\"ticks\"}),standoff:{valType:\"number\",min:0,editType:\"ticks\"},editType:\"ticks\"},type:{valType:\"enumerated\",values:[\"-\",\"linear\",\"log\",\"date\",\"category\",\"multicategory\"],dflt:\"-\",editType:\"calc\",_noTemplating:!0},autotypenumbers:{valType:\"enumerated\",values:[\"convert types\",\"strict\"],dflt:\"convert types\",editType:\"calc\"},autorange:{valType:\"enumerated\",values:[!0,!1,\"reversed\"],dflt:!0,editType:\"axrange\",impliedEdits:{\"range[0]\":void 0,\"range[1]\":void 0}},rangemode:{valType:\"enumerated\",values:[\"normal\",\"tozero\",\"nonnegative\"],dflt:\"normal\",editType:\"plot\"},range:{valType:\"info_array\",items:[{valType:\"any\",editType:\"axrange\",impliedEdits:{\"^autorange\":!1},anim:!0},{valType:\"any\",editType:\"axrange\",impliedEdits:{\"^autorange\":!1},anim:!0}],editType:\"axrange\",impliedEdits:{autorange:!1},anim:!0},fixedrange:{valType:\"boolean\",dflt:!1,editType:\"calc\"},scaleanchor:{valType:\"enumerated\",values:[c.idRegex.x.toString(),c.idRegex.y.toString()],editType:\"plot\"},scaleratio:{valType:\"number\",min:0,dflt:1,editType:\"plot\"},constrain:{valType:\"enumerated\",values:[\"range\",\"domain\"],editType:\"plot\"},constraintoward:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\",\"top\",\"middle\",\"bottom\"],editType:\"plot\"},matches:{valType:\"enumerated\",values:[c.idRegex.x.toString(),c.idRegex.y.toString()],editType:\"calc\"},rangebreaks:s(\"rangebreak\",{enabled:{valType:\"boolean\",dflt:!0,editType:\"calc\"},bounds:{valType:\"info_array\",items:[{valType:\"any\",editType:\"calc\"},{valType:\"any\",editType:\"calc\"}],editType:\"calc\"},pattern:{valType:\"enumerated\",values:[h,u,\"\"],editType:\"calc\"},values:{valType:\"info_array\",freeLength:!0,editType:\"calc\",items:{valType:\"any\",editType:\"calc\"}},dvalue:{valType:\"number\",editType:\"calc\",min:0,dflt:l},editType:\"calc\"}),tickmode:{valType:\"enumerated\",values:[\"auto\",\"linear\",\"array\"],editType:\"ticks\",impliedEdits:{tick0:void 0,dtick:void 0}},nticks:{valType:\"integer\",min:0,dflt:0,editType:\"ticks\"},tick0:{valType:\"any\",editType:\"ticks\",impliedEdits:{tickmode:\"linear\"}},dtick:{valType:\"any\",editType:\"ticks\",impliedEdits:{tickmode:\"linear\"}},tickvals:{valType:\"data_array\",editType:\"ticks\"},ticktext:{valType:\"data_array\",editType:\"ticks\"},ticks:{valType:\"enumerated\",values:[\"outside\",\"inside\",\"\"],editType:\"ticks\"},tickson:{valType:\"enumerated\",values:[\"labels\",\"boundaries\"],dflt:\"labels\",editType:\"ticks\"},ticklabelmode:{valType:\"enumerated\",values:[\"instant\",\"period\"],dflt:\"instant\",editType:\"ticks\"},ticklabelposition:{valType:\"enumerated\",values:[\"outside\",\"inside\",\"outside top\",\"inside top\",\"outside left\",\"inside left\",\"outside right\",\"inside right\",\"outside bottom\",\"inside bottom\"],dflt:\"outside\",editType:\"calc\"},mirror:{valType:\"enumerated\",values:[!0,\"ticks\",!1,\"all\",\"allticks\"],dflt:!1,editType:\"ticks+layoutstyle\"},ticklen:{valType:\"number\",min:0,dflt:5,editType:\"ticks\"},tickwidth:{valType:\"number\",min:0,dflt:1,editType:\"ticks\"},tickcolor:{valType:\"color\",dflt:i.defaultLine,editType:\"ticks\"},showticklabels:{valType:\"boolean\",dflt:!0,editType:\"ticks\"},automargin:{valType:\"boolean\",dflt:!1,editType:\"ticks\"},showspikes:{valType:\"boolean\",dflt:!1,editType:\"modebar\"},spikecolor:{valType:\"color\",dflt:null,editType:\"none\"},spikethickness:{valType:\"number\",dflt:3,editType:\"none\"},spikedash:o({},a,{dflt:\"dash\",editType:\"none\"}),spikemode:{valType:\"flaglist\",flags:[\"toaxis\",\"across\",\"marker\"],dflt:\"toaxis\",editType:\"none\"},spikesnap:{valType:\"enumerated\",values:[\"data\",\"cursor\",\"hovered data\"],dflt:\"data\",editType:\"none\"},tickfont:r({editType:\"ticks\"}),tickangle:{valType:\"angle\",dflt:\"auto\",editType:\"ticks\"},tickprefix:{valType:\"string\",dflt:\"\",editType:\"ticks\"},showtickprefix:{valType:\"enumerated\",values:[\"all\",\"first\",\"last\",\"none\"],dflt:\"all\",editType:\"ticks\"},ticksuffix:{valType:\"string\",dflt:\"\",editType:\"ticks\"},showticksuffix:{valType:\"enumerated\",values:[\"all\",\"first\",\"last\",\"none\"],dflt:\"all\",editType:\"ticks\"},showexponent:{valType:\"enumerated\",values:[\"all\",\"first\",\"last\",\"none\"],dflt:\"all\",editType:\"ticks\"},exponentformat:{valType:\"enumerated\",values:[\"none\",\"e\",\"E\",\"power\",\"SI\",\"B\"],dflt:\"B\",editType:\"ticks\"},minexponent:{valType:\"number\",dflt:3,min:0,editType:\"ticks\"},separatethousands:{valType:\"boolean\",dflt:!1,editType:\"ticks\"},tickformat:{valType:\"string\",dflt:\"\",editType:\"ticks\"},tickformatstops:s(\"tickformatstop\",{enabled:{valType:\"boolean\",dflt:!0,editType:\"ticks\"},dtickrange:{valType:\"info_array\",items:[{valType:\"any\",editType:\"ticks\"},{valType:\"any\",editType:\"ticks\"}],editType:\"ticks\"},value:{valType:\"string\",dflt:\"\",editType:\"ticks\"},editType:\"ticks\"}),hoverformat:{valType:\"string\",dflt:\"\",editType:\"none\"},showline:{valType:\"boolean\",dflt:!1,editType:\"ticks+layoutstyle\"},linecolor:{valType:\"color\",dflt:i.defaultLine,editType:\"layoutstyle\"},linewidth:{valType:\"number\",min:0,dflt:1,editType:\"ticks+layoutstyle\"},showgrid:{valType:\"boolean\",editType:\"ticks\"},gridcolor:{valType:\"color\",dflt:i.lightLine,editType:\"ticks\"},gridwidth:{valType:\"number\",min:0,dflt:1,editType:\"ticks\"},zeroline:{valType:\"boolean\",editType:\"ticks\"},zerolinecolor:{valType:\"color\",dflt:i.defaultLine,editType:\"ticks\"},zerolinewidth:{valType:\"number\",dflt:1,editType:\"ticks\"},showdividers:{valType:\"boolean\",dflt:!0,editType:\"ticks\"},dividercolor:{valType:\"color\",dflt:i.defaultLine,editType:\"ticks\"},dividerwidth:{valType:\"number\",dflt:1,editType:\"ticks\"},anchor:{valType:\"enumerated\",values:[\"free\",c.idRegex.x.toString(),c.idRegex.y.toString()],editType:\"plot\"},side:{valType:\"enumerated\",values:[\"top\",\"bottom\",\"left\",\"right\"],editType:\"plot\"},overlaying:{valType:\"enumerated\",values:[\"free\",c.idRegex.x.toString(),c.idRegex.y.toString()],editType:\"plot\"},layer:{valType:\"enumerated\",values:[\"above traces\",\"below traces\"],dflt:\"above traces\",editType:\"plot\"},domain:{valType:\"info_array\",items:[{valType:\"number\",min:0,max:1,editType:\"plot\"},{valType:\"number\",min:0,max:1,editType:\"plot\"}],dflt:[0,1],editType:\"plot\"},position:{valType:\"number\",min:0,max:1,dflt:0,editType:\"plot\"},categoryorder:{valType:\"enumerated\",values:[\"trace\",\"category ascending\",\"category descending\",\"array\",\"total ascending\",\"total descending\",\"min ascending\",\"min descending\",\"max ascending\",\"max descending\",\"sum ascending\",\"sum descending\",\"mean ascending\",\"mean descending\",\"median ascending\",\"median descending\"],dflt:\"trace\",editType:\"calc\"},categoryarray:{valType:\"data_array\",editType:\"calc\"},uirevision:{valType:\"any\",editType:\"none\"},editType:\"calc\",_deprecated:{autotick:{valType:\"boolean\",editType:\"ticks\"},title:{valType:\"string\",editType:\"ticks\"},titlefont:r({editType:\"ticks\"})}}},{\"../../components/color/attributes\":642,\"../../components/drawing/attributes\":664,\"../../constants/docs\":748,\"../../constants/numerical\":753,\"../../lib/extend\":768,\"../../plot_api/plot_template\":817,\"../font_attributes\":856,\"./constants\":834}],843:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../components/color\"),a=t(\"../../components/fx/helpers\").isUnifiedHover,o=t(\"../../components/fx/hovermode_defaults\"),s=t(\"../../plot_api/plot_template\"),l=t(\"../layout_attributes\"),c=t(\"./layout_attributes\"),u=t(\"./type_defaults\"),h=t(\"./axis_defaults\"),d=t(\"./constraints\"),f=t(\"./position_defaults\"),p=t(\"./axis_ids\"),m=p.id2name,g=p.name2id,y=t(\"./constants\").AX_ID_PATTERN,v=t(\"../../registry\"),_=v.traceIs,b=v.getComponentMethod;function x(t,e,n){Array.isArray(t[e])?t[e].push(n):t[e]=[n]}e.exports=function(t,e,n){var v,w,k=e.autotypenumbers,M={},T={},S={},A={},L={},C={},E={},O={},D={},I={};for(v=0;v<n.length;v++){var P=n[v];if(_(P,\"cartesian\")||_(P,\"gl2d\")){var R,z;if(P.xaxis)R=m(P.xaxis),x(M,R,P);else if(P.xaxes)for(w=0;w<P.xaxes.length;w++)x(M,m(P.xaxes[w]),P);if(P.yaxis)z=m(P.yaxis),x(M,z,P);else if(P.yaxes)for(w=0;w<P.yaxes.length;w++)x(M,m(P.yaxes[w]),P);\"funnel\"===P.type?\"h\"===P.orientation?(R&&(T[R]=!0),z&&(E[z]=!0)):z&&(S[z]=!0):\"image\"===P.type?(z&&(O[z]=!0),R&&(O[R]=!0)):(z&&(L[z]=!0,C[z]=!0),_(P,\"carpet\")&&(\"carpet\"!==P.type||P._cheater)||R&&(A[R]=!0)),\"carpet\"===P.type&&P._cheater&&R&&(T[R]=!0),_(P,\"2dMap\")&&(D[R]=!0,D[z]=!0),_(P,\"oriented\")&&(I[\"h\"===P.orientation?z:R]=!0)}}var j=e._subplots,F=j.xaxis,N=j.yaxis,B=r.simpleMap(F,m),Y=r.simpleMap(N,m),H=B.concat(Y),V=i.background;F.length&&N.length&&(V=r.coerce(t,e,l,\"plot_bgcolor\"));var U,W,q,G,X,Z=i.combine(V,e.paper_bgcolor);function J(){X._traceIndices=(M[U]||[]).map((function(t){return t._expandedIndex})),X._annIndices=[],X._shapeIndices=[],X._imgIndices=[],X._subplotsWith=[],X._counterAxes=[],X._name=X._attr=U,X._id=W}function K(t,e){return r.coerce(G,X,c,t,e)}function $(t,e){return r.coerce2(G,X,c,t,e)}function Q(t){return\"x\"===t?N:F}function tt(e,n){for(var r=\"x\"===e?B:Y,i=[],a=0;a<r.length;a++){var o=r[a];o===n||(t[o]||{}).overlaying||i.push(g(o))}return i}var et={x:Q(\"x\"),y:Q(\"y\")},nt=et.x.concat(et.y),rt={},it=[];function at(){var t=G.matches;y.test(t)&&-1===nt.indexOf(t)&&(rt[t]=G.type,it=Object.keys(rt))}var ot=o(t,e,n),st=a(ot);for(v=0;v<H.length;v++){W=g(U=H[v]),q=U.charAt(0),r.isPlainObject(t[U])||(t[U]={}),G=t[U],X=s.newContainer(e,U,q+\"axis\"),J();var lt={letter:q,font:e.font,outerTicks:D[U],showGrid:!I[U],data:M[U]||[],bgColor:Z,calendar:e.calendar,automargin:!0,visibleDflt:\"x\"===q&&!A[U]&&T[U]||\"y\"===q&&!L[U]&&S[U],reverseDflt:\"y\"===q&&(!C[U]&&E[U]||O[U]),autotypenumbersDflt:k,splomStash:((e._splomAxes||{})[q]||{})[W]};K(\"uirevision\",e.uirevision),u(G,X,K,lt),h(G,X,K,lt,e);var ct=st&&q===ot.charAt(0),ut=$(\"spikecolor\",st?X.color:void 0),ht=$(\"spikethickness\",st?1.5:void 0),dt=$(\"spikedash\",st?\"dot\":void 0),ft=$(\"spikemode\",st?\"across\":void 0),pt=$(\"spikesnap\",st?\"hovered data\":void 0);K(\"showspikes\",!!(ct||ut||ht||dt||ft||pt))||(delete X.spikecolor,delete X.spikethickness,delete X.spikedash,delete X.spikemode,delete X.spikesnap),f(G,X,K,{letter:q,counterAxes:et[q],overlayableAxes:tt(q,U),grid:e.grid}),K(\"title.standoff\"),at(),X._input=G}for(v=0;v<it.length;){W=it[v++],q=(U=m(W)).charAt(0),r.isPlainObject(t[U])||(t[U]={}),G=t[U],X=s.newContainer(e,U,q+\"axis\"),J();var mt={letter:q,font:e.font,outerTicks:D[U],showGrid:!I[U],data:[],bgColor:Z,calendar:e.calendar,automargin:!0,visibleDflt:!1,reverseDflt:!1,autotypenumbersDflt:k,splomStash:((e._splomAxes||{})[q]||{})[W]};K(\"uirevision\",e.uirevision),X.type=rt[W]||\"linear\",h(G,X,K,mt,e),f(G,X,K,{letter:q,counterAxes:et[q],overlayableAxes:tt(q,U),grid:e.grid}),K(\"fixedrange\"),at(),X._input=G}var gt=b(\"rangeslider\",\"handleDefaults\"),yt=b(\"rangeselector\",\"handleDefaults\");for(v=0;v<B.length;v++)G=t[U=B[v]],X=e[U],gt(t,e,U),\"date\"===X.type&&yt(G,X,e,Y,X.calendar),K(\"fixedrange\");for(v=0;v<Y.length;v++){G=t[U=Y[v]];var vt=e[m((X=e[U]).anchor)];K(\"fixedrange\",b(\"rangeslider\",\"isVisible\")(vt))}d.handleDefaults(t,e,{axIds:nt.concat(it).sort(p.idSort),axHasImage:O})}},{\"../../components/color\":643,\"../../components/fx/helpers\":679,\"../../components/fx/hovermode_defaults\":682,\"../../lib\":778,\"../../plot_api/plot_template\":817,\"../../registry\":911,\"../layout_attributes\":882,\"./axis_defaults\":830,\"./axis_ids\":831,\"./constants\":834,\"./constraints\":835,\"./layout_attributes\":842,\"./position_defaults\":845,\"./type_defaults\":853}],844:[function(t,e,n){\"use strict\";var r=t(\"tinycolor2\").mix,i=t(\"../../components/color/attributes\").lightFraction,a=t(\"../../lib\");e.exports=function(t,e,n,o){var s=(o=o||{}).dfltColor;function l(n,r){return a.coerce2(t,e,o.attributes,n,r)}var c=l(\"linecolor\",s),u=l(\"linewidth\");n(\"showline\",o.showLine||!!c||!!u)||(delete e.linecolor,delete e.linewidth);var h=l(\"gridcolor\",r(s,o.bgColor,o.blend||i).toRgbString()),d=l(\"gridwidth\");if(n(\"showgrid\",o.showGrid||!!h||!!d)||(delete e.gridcolor,delete e.gridwidth),!o.noZeroLine){var f=l(\"zerolinecolor\",s),p=l(\"zerolinewidth\");n(\"zeroline\",o.showGrid||!!f||!!p)||(delete e.zerolinecolor,delete e.zerolinewidth)}}},{\"../../components/color/attributes\":642,\"../../lib\":778,tinycolor2:576}],845:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../lib\");e.exports=function(t,e,n,a){var o,s,l,c,u=a.counterAxes||[],h=a.overlayableAxes||[],d=a.letter,f=a.grid;f&&(o=f._anchors[e._id],(s=f._domains[d][f._axisMap[e._id]])&&(l=f[d+\"side\"].split(\" \")[0],c=f.domain[d][\"right\"===l||\"top\"===l?1:0])),s=s||[0,1],o=o||(r(t.position)?\"free\":u[0]||\"free\"),l=l||(\"x\"===d?\"bottom\":\"left\"),c=c||0,\"free\"===i.coerce(t,e,{anchor:{valType:\"enumerated\",values:[\"free\"].concat(u),dflt:o}},\"anchor\")&&n(\"position\",c),i.coerce(t,e,{side:{valType:\"enumerated\",values:\"x\"===d?[\"bottom\",\"top\"]:[\"left\",\"right\"],dflt:l}},\"side\");var p=!1;if(h.length&&(p=i.coerce(t,e,{overlaying:{valType:\"enumerated\",values:[!1].concat(h),dflt:!1}},\"overlaying\")),!p){var m=n(\"domain\",s);m[0]>m[1]-1/4096&&(e.domain=s),i.noneOrAll(t.domain,e.domain,s)}return n(\"layer\"),e}},{\"../../lib\":778,\"fast-isnumeric\":241}],846:[function(t,e,n){\"use strict\";var r=t(\"../../constants/alignment\").FROM_BL;e.exports=function(t,e,n){void 0===n&&(n=r[t.constraintoward||\"center\"]);var i=[t.r2l(t.range[0]),t.r2l(t.range[1])],a=i[0]+(i[1]-i[0])*n;t.range=t._input.range=[t.l2r(a+(i[0]-a)*e),t.l2r(a+(i[1]-a)*e)],t.setScale()}},{\"../../constants/alignment\":745}],847:[function(t,e,n){\"use strict\";var r=t(\"polybooljs\"),i=t(\"../../registry\"),a=t(\"../../components/drawing\").dashStyle,o=t(\"../../components/color\"),s=t(\"../../components/fx\"),l=t(\"../../components/fx/helpers\").makeEventData,c=t(\"../../components/dragelement/helpers\"),u=c.freeMode,h=c.rectMode,d=c.drawMode,f=c.openMode,p=c.selectMode,m=t(\"../../components/shapes/draw_newshape/display_outlines\"),g=t(\"../../components/shapes/draw_newshape/helpers\").handleEllipse,y=t(\"../../components/shapes/draw_newshape/newshapes\"),v=t(\"../../lib\"),_=t(\"../../lib/polygon\"),b=t(\"../../lib/throttle\"),x=t(\"./axis_ids\").getFromId,w=t(\"../../lib/clear_gl_canvases\"),k=t(\"../../plot_api/subroutines\").redrawReglTraces,M=t(\"./constants\"),T=M.MINSELECT,S=_.filter,A=_.tester,L=t(\"./handle_outline\").clearSelect,C=t(\"./helpers\"),E=C.p2r,O=C.axValue,D=C.getTransform;function I(t,e,n,r,i,a,o){var s,l,c,u,h,d,p,g,y,v=e._hoverdata,_=e._fullLayout.clickmode.indexOf(\"event\")>-1,b=[];if(function(t){return t&&Array.isArray(t)&&!0!==t[0].hoverOnBox}(v)){j(t,e,a);var x=function(t,e){var n,r,i=t[0],a=-1,o=[];for(r=0;r<e.length;r++)if(i.fullData._expandedIndex===(n=e[r]).cd[0].trace._expandedIndex){if(!0===i.hoverOnBox)break;void 0!==i.pointNumber?a=i.pointNumber:void 0!==i.binNumber&&(a=i.binNumber,o=i.pointNumbers);break}return{pointNumber:a,pointNumbers:o,searchInfo:n}}(v,s=N(e,n,r,i));if(x.pointNumbers.length>0?function(t,e){var n,r,i,a=[];for(i=0;i<t.length;i++)(n=t[i]).cd[0].trace.selectedpoints&&n.cd[0].trace.selectedpoints.length>0&&a.push(n);if(1===a.length&&a[0]===e.searchInfo&&(r=e.searchInfo.cd[0].trace).selectedpoints.length===e.pointNumbers.length){for(i=0;i<e.pointNumbers.length;i++)if(r.selectedpoints.indexOf(e.pointNumbers[i])<0)return!1;return!0}return!1}(s,x):function(t){var e,n,r=0;for(n=0;n<t.length;n++)if((e=t[n].cd[0].trace).selectedpoints){if(e.selectedpoints.length>1)return!1;if((r+=e.selectedpoints.length)>1)return!1}return 1===r}(s)&&(d=B(x))){for(o&&o.remove(),y=0;y<s.length;y++)(l=s[y])._module.selectPoints(l,!1);Y(e,s),F(a),_&&e.emit(\"plotly_deselect\",null)}else{for(p=t.shiftKey&&(void 0!==d?d:B(x)),c=function(t,e,n){return{pointNumber:t,searchInfo:e,subtract:n}}(x.pointNumber,x.searchInfo,p),u=z(a.selectionDefs.concat([c])),y=0;y<s.length;y++)if(h=H(s[y]._module.selectPoints(s[y],u),s[y]),b.length)for(var w=0;w<h.length;w++)b.push(h[w]);else b=h;if(Y(e,s,g={points:b}),c&&a&&a.selectionDefs.push(c),o){var k=a.mergedPolygons,M=f(a.dragmode);m(V(k,M),o,a)}_&&e.emit(\"plotly_selected\",g)}}}function P(t){return\"pointNumber\"in t&&\"searchInfo\"in t}function R(t){return{xmin:0,xmax:0,ymin:0,ymax:0,pts:[],contains:function(e,n,r,i){return i.cd[0].trace._expandedIndex===t.searchInfo.cd[0].trace._expandedIndex&&r===t.pointNumber},isRect:!1,degenerate:!1,subtract:t.subtract}}function z(t){for(var e=[],n=P(t[0])?0:t[0][0][0],r=n,i=P(t[0])?0:t[0][0][1],a=i,o=0;o<t.length;o++)if(P(t[o]))e.push(R(t[o]));else{var s=_.tester(t[o]);s.subtract=t[o].subtract,e.push(s),n=Math.min(n,s.xmin),r=Math.max(r,s.xmax),i=Math.min(i,s.ymin),a=Math.max(a,s.ymax)}return{xmin:n,xmax:r,ymin:i,ymax:a,pts:[],contains:function(t,n,r,i){for(var a=!1,o=0;o<e.length;o++)e[o].contains(t,n,r,i)&&(a=!1===e[o].subtract);return a},isRect:!1,degenerate:!1}}function j(t,e,n){e._fullLayout._drawing=!1;var r=e._fullLayout,i=n.plotinfo,a=n.dragmode,o=r._lastSelectedSubplot&&r._lastSelectedSubplot===i.id,s=(t.shiftKey||t.altKey)&&!(d(a)&&f(a));o&&s&&i.selection&&i.selection.selectionDefs&&!n.selectionDefs?(n.selectionDefs=i.selection.selectionDefs,n.mergedPolygons=i.selection.mergedPolygons):s&&i.selection||F(n),o||(L(e),r._lastSelectedSubplot=i.id)}function F(t){var e=t.dragmode,n=t.plotinfo,r=t.gd;if(r._fullLayout._activeShapeIndex>=0&&r._fullLayout._deactivateShape(r),d(e)){var a=r._fullLayout._zoomlayer.selectAll(\".select-outline-\"+n.id);if(a&&r._fullLayout._drawing){var o=y(a,t);o&&i.call(\"_guiRelayout\",r,{shapes:o}),r._fullLayout._drawing=!1}}n.selection={},n.selection.selectionDefs=t.selectionDefs=[],n.selection.mergedPolygons=t.mergedPolygons=[]}function N(t,e,n,r){var i,a,o,s=[],l=e.map((function(t){return t._id})),c=n.map((function(t){return t._id}));for(o=0;o<t.calcdata.length;o++)if(!0===(a=(i=t.calcdata[o])[0].trace).visible&&a._module&&a._module.selectPoints)if(!r||a.subplot!==r&&a.geo!==r)if(\"splom\"===a.type&&a._xaxes[l[0]]&&a._yaxes[c[0]]){var u=d(a._module,i,e[0],n[0]);u.scene=t._fullLayout._splomScenes[a.uid],s.push(u)}else if(\"sankey\"===a.type){var h=d(a._module,i,e[0],n[0]);s.push(h)}else{if(-1===l.indexOf(a.xaxis))continue;if(-1===c.indexOf(a.yaxis))continue;s.push(d(a._module,i,x(t,a.xaxis),x(t,a.yaxis)))}else s.push(d(a._module,i,e[0],n[0]));return s;function d(t,e,n,r){return{_module:t,cd:e,xaxis:n,yaxis:r}}}function B(t){var e=t.searchInfo.cd[0].trace,n=t.pointNumbers;return!!e.selectedpoints&&e.selectedpoints.indexOf(n.length>0?n[0]:t.pointNumber)>-1}function Y(t,e,n){var r,a,o,s;for(r=0;r<e.length;r++){var l=e[r].cd[0].trace._fullInput,c=t._fullLayout._tracePreGUI[l.uid]||{};void 0===c.selectedpoints&&(c.selectedpoints=l._input.selectedpoints||null)}if(n){var u=n.points||[];for(r=0;r<e.length;r++)(s=e[r].cd[0].trace)._input.selectedpoints=s._fullInput.selectedpoints=[],s._fullInput!==s&&(s.selectedpoints=[]);for(r=0;r<u.length;r++){var h=u[r],d=h.data,f=h.fullData;h.pointIndices?([].push.apply(d.selectedpoints,h.pointIndices),s._fullInput!==s&&[].push.apply(f.selectedpoints,h.pointIndices)):(d.selectedpoints.push(h.pointIndex),s._fullInput!==s&&f.selectedpoints.push(h.pointIndex))}}else for(r=0;r<e.length;r++)delete(s=e[r].cd[0].trace).selectedpoints,delete s._input.selectedpoints,s._fullInput!==s&&delete s._fullInput.selectedpoints;var p=!1;for(r=0;r<e.length;r++){i.traceIs(s=(o=(a=e[r]).cd)[0].trace,\"regl\")&&(p=!0);var m=a._module,g=m.styleOnSelect||m.style;g&&(g(t,o,o[0].node3),o[0].nodeRangePlot3&&g(t,o,o[0].nodeRangePlot3))}p&&(w(t),k(t))}function H(t,e){if(Array.isArray(t))for(var n=e.cd,r=e.cd[0].trace,i=0;i<t.length;i++)t[i]=l(t[i],r,n);return t}function V(t,e){for(var n=[],r=0;r<t.length;r++){n[r]=[];for(var i=0;i<t[r].length;i++){n[r][i]=[],n[r][i][0]=i?\"L\":\"M\";for(var a=0;a<t[r][i].length;a++)n[r][i].push(t[r][i][a])}e||n[r].push([\"Z\",n[r][0][1],n[r][0][2]])}return n}e.exports={prepSelect:function(t,e,n,i,l){var c=u(l),y=h(l),_=f(l),x=d(l),w=p(l),k=\"drawcircle\"===l,L=\"drawline\"===l||k,C=i.gd,P=C._fullLayout,R=P._zoomlayer,B=i.element.getBoundingClientRect(),U=i.plotinfo,W=D(U),q=e-B.left,G=n-B.top;P._calcInverseTransform(C);var X,Z,J,K,$,Q,tt,et=v.apply3DTransform(P._invTransform)(q,G),nt=P._invScaleX,rt=P._invScaleY,it=q=et[0],at=G=et[1],ot=\"M\"+q+\",\"+G,st=i.xaxes[0]._length,lt=i.yaxes[0]._length,ct=i.xaxes.concat(i.yaxes),ut=t.altKey&&!(d(l)&&_);j(t,C,i),c&&(X=S([[q,G]],M.BENDPX));var ht=R.selectAll(\"path.select-outline-\"+U.id).data(x?[0]:[1,2]),dt=P.newshape;ht.enter().append(\"path\").attr(\"class\",(function(t){return\"select-outline select-outline-\"+t+\" select-outline-\"+U.id})).style(x?{opacity:dt.opacity/2,fill:_?void 0:dt.fillcolor,stroke:dt.line.color,\"stroke-dasharray\":a(dt.line.dash,dt.line.width),\"stroke-width\":dt.line.width+\"px\"}:{}).attr(\"fill-rule\",dt.fillrule).classed(\"cursor-move\",!!x).attr(\"transform\",W).attr(\"d\",ot+\"Z\");var ft,pt=R.append(\"path\").attr(\"class\",\"zoombox-corners\").style({fill:o.background,stroke:o.defaultLine,\"stroke-width\":1}).attr(\"transform\",W).attr(\"d\",\"M0,0Z\"),mt=P._uid+M.SELECTID,gt=[],yt=N(C,i.xaxes,i.yaxes,i.subplot);function vt(t,e){return t-e}ft=U.fillRangeItems?U.fillRangeItems:y?function(t,e){var n=t.range={};for($=0;$<ct.length;$++){var r=ct[$],i=r._id.charAt(0);n[r._id]=[E(r,e[i+\"min\"]),E(r,e[i+\"max\"])].sort(vt)}}:function(t,e,n){var r=t.lassoPoints={};for($=0;$<ct.length;$++){var i=ct[$];r[i._id]=n.filtered.map(O(i))}},i.moveFn=function(t,e){it=Math.max(0,Math.min(st,nt*t+q)),at=Math.max(0,Math.min(lt,rt*e+G));var n=Math.abs(it-q),a=Math.abs(at-G);if(y){var o,s,l;if(w){var u=P.selectdirection;switch(o=\"any\"===u?a<Math.min(.6*n,T)?\"h\":n<Math.min(.6*a,T)?\"v\":\"d\":u){case\"h\":s=k?lt/2:0,l=lt;break;case\"v\":s=k?st/2:0,l=st}}if(x)switch(P.newshape.drawdirection){case\"vertical\":o=\"h\",s=k?lt/2:0,l=lt;break;case\"horizontal\":o=\"v\",s=k?st/2:0,l=st;break;case\"ortho\":n<a?(o=\"h\",s=G,l=at):(o=\"v\",s=q,l=it);break;default:o=\"d\"}\"h\"===o?((K=L?g(k,[it,s],[it,l]):[[q,s],[q,l],[it,l],[it,s]]).xmin=L?it:Math.min(q,it),K.xmax=L?it:Math.max(q,it),K.ymin=Math.min(s,l),K.ymax=Math.max(s,l),pt.attr(\"d\",\"M\"+K.xmin+\",\"+(G-T)+\"h-4v\"+2*T+\"h4ZM\"+(K.xmax-1)+\",\"+(G-T)+\"h4v\"+2*T+\"h-4Z\")):\"v\"===o?((K=L?g(k,[s,at],[l,at]):[[s,G],[s,at],[l,at],[l,G]]).xmin=Math.min(s,l),K.xmax=Math.max(s,l),K.ymin=L?at:Math.min(G,at),K.ymax=L?at:Math.max(G,at),pt.attr(\"d\",\"M\"+(q-T)+\",\"+K.ymin+\"v-4h\"+2*T+\"v4ZM\"+(q-T)+\",\"+(K.ymax-1)+\"v4h\"+2*T+\"v-4Z\")):\"d\"===o&&((K=L?g(k,[q,G],[it,at]):[[q,G],[q,at],[it,at],[it,G]]).xmin=Math.min(q,it),K.xmax=Math.max(q,it),K.ymin=Math.min(G,at),K.ymax=Math.max(G,at),pt.attr(\"d\",\"M0,0Z\"))}else c&&(X.addPt([it,at]),K=X.filtered);i.selectionDefs&&i.selectionDefs.length?(J=function(t,e,n){return n?r.difference({regions:t,inverted:!1},{regions:[e],inverted:!1}).regions:r.union({regions:t,inverted:!1},{regions:[e],inverted:!1}).regions}(i.mergedPolygons,K,ut),K.subtract=ut,Z=z(i.selectionDefs.concat([K]))):(J=[K],Z=A(K)),m(V(J,_),ht,i),w&&b.throttle(mt,M.SELECTDELAY,(function(){var t;gt=[];var e,n=[];for($=0;$<yt.length;$++)if(e=(Q=yt[$])._module.selectPoints(Q,Z),n.push(e),t=H(e,Q),gt.length)for(var r=0;r<t.length;r++)gt.push(t[r]);else gt=t;Y(C,yt,tt={points:gt}),ft(tt,K,X),i.gd.emit(\"plotly_selecting\",tt)}))},i.clickFn=function(t,e){if(pt.remove(),C._fullLayout._activeShapeIndex>=0)C._fullLayout._deactivateShape(C);else if(!x){var n=P.clickmode;b.done(mt).then((function(){if(b.clear(mt),2===t){for(ht.remove(),$=0;$<yt.length;$++)(Q=yt[$])._module.selectPoints(Q,!1);Y(C,yt),F(i),C.emit(\"plotly_deselect\",null)}else n.indexOf(\"select\")>-1&&I(e,C,i.xaxes,i.yaxes,i.subplot,i,ht),\"event\"===n&&C.emit(\"plotly_selected\",void 0);s.click(C,e)})).catch(v.error)}},i.doneFn=function(){pt.remove(),b.done(mt).then((function(){b.clear(mt),i.gd.emit(\"plotly_selected\",tt),K&&i.selectionDefs&&(K.subtract=ut,i.selectionDefs.push(K),i.mergedPolygons.length=0,[].push.apply(i.mergedPolygons,J)),i.doneFnCompleted&&i.doneFnCompleted(gt)})).catch(v.error),x&&F(i)}},clearSelect:L,clearSelectionsCache:F,selectOnClick:I}},{\"../../components/color\":643,\"../../components/dragelement/helpers\":661,\"../../components/drawing\":665,\"../../components/fx\":683,\"../../components/fx/helpers\":679,\"../../components/shapes/draw_newshape/display_outlines\":728,\"../../components/shapes/draw_newshape/helpers\":729,\"../../components/shapes/draw_newshape/newshapes\":730,\"../../lib\":778,\"../../lib/clear_gl_canvases\":762,\"../../lib/polygon\":790,\"../../lib/throttle\":804,\"../../plot_api/subroutines\":818,\"../../registry\":911,\"./axis_ids\":831,\"./constants\":834,\"./handle_outline\":838,\"./helpers\":839,polybooljs:517}],848:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"d3-time-format\").utcFormat,a=t(\"fast-isnumeric\"),o=t(\"../../lib\"),s=o.cleanNumber,l=o.ms2DateTime,c=o.dateTime2ms,u=o.ensureNumber,h=o.isArrayOrTypedArray,d=t(\"../../constants/numerical\"),f=d.FP_SAFE,p=d.BADNUM,m=d.LOG_CLIP,g=d.ONEWEEK,y=d.ONEDAY,v=d.ONEHOUR,_=d.ONEMIN,b=d.ONESEC,x=t(\"./axis_ids\"),w=t(\"./constants\"),k=w.HOUR_PATTERN,M=w.WEEKDAY_PATTERN;function T(t){return Math.pow(10,t)}function S(t){return null!=t}e.exports=function(t,e){e=e||{};var n=t._id||\"x\",d=n.charAt(0);function A(e,n){if(e>0)return Math.log(e)/Math.LN10;if(e<=0&&n&&t.range&&2===t.range.length){var r=t.range[0],i=t.range[1];return.5*(r+i-2*m*Math.abs(r-i))}return p}function L(e,n,r,i){if((i||{}).msUTC&&a(e))return+e;var s=c(e,r||t.calendar);if(s===p){if(!a(e))return p;e=+e;var l=Math.floor(10*o.mod(e+.05,1)),u=Math.round(e-l/10);s=c(new Date(u))+l/10}return s}function C(e,n,r){return l(e,n,r||t.calendar)}function E(e){return t._categories[Math.round(e)]}function O(e){if(S(e)){if(void 0===t._categoriesMap&&(t._categoriesMap={}),void 0!==t._categoriesMap[e])return t._categoriesMap[e];t._categories.push(\"number\"==typeof e?String(e):e);var n=t._categories.length-1;return t._categoriesMap[e]=n,n}return p}function D(e){if(t._categoriesMap)return t._categoriesMap[e]}function I(t){var e=D(t);return void 0!==e?e:a(t)?+t:void 0}function P(t){return a(t)?+t:D(t)}function R(t,e,n){return r.round(n+e*t,2)}function z(t,e,n){return(t-n)/e}var j=function(e){return a(e)?R(e,t._m,t._b):p},F=function(e){return z(e,t._m,t._b)};if(t.rangebreaks){var N=\"y\"===d;j=function(e){if(!a(e))return p;var n=t._rangebreaks.length;if(!n)return R(e,t._m,t._b);var r=N;t.range[0]>t.range[1]&&(r=!r);for(var i=r?-1:1,o=i*e,s=0,l=0;l<n;l++){var c=i*t._rangebreaks[l].min,u=i*t._rangebreaks[l].max;if(o<c)break;if(!(o>u)){s=o<(c+u)/2?l:l+1;break}s=l+1}var h=t._B[s]||0;return isFinite(h)?R(e,t._m2,h):0},F=function(e){var n=t._rangebreaks.length;if(!n)return z(e,t._m,t._b);for(var r=0,i=0;i<n&&!(e<t._rangebreaks[i].pmin);i++)e>t._rangebreaks[i].pmax&&(r=i+1);return z(e,t._m2,t._B[r])}}t.c2l=\"log\"===t.type?A:u,t.l2c=\"log\"===t.type?T:u,t.l2p=j,t.p2l=F,t.c2p=\"log\"===t.type?function(t,e){return j(A(t,e))}:j,t.p2c=\"log\"===t.type?function(t){return T(F(t))}:F,-1!==[\"linear\",\"-\"].indexOf(t.type)?(t.d2r=t.r2d=t.d2c=t.r2c=t.d2l=t.r2l=s,t.c2d=t.c2r=t.l2d=t.l2r=u,t.d2p=t.r2p=function(e){return t.l2p(s(e))},t.p2d=t.p2r=F,t.cleanPos=u):\"log\"===t.type?(t.d2r=t.d2l=function(t,e){return A(s(t),e)},t.r2d=t.r2c=function(t){return T(s(t))},t.d2c=t.r2l=s,t.c2d=t.l2r=u,t.c2r=A,t.l2d=T,t.d2p=function(e,n){return t.l2p(t.d2r(e,n))},t.p2d=function(t){return T(F(t))},t.r2p=function(e){return t.l2p(s(e))},t.p2r=F,t.cleanPos=u):\"date\"===t.type?(t.d2r=t.r2d=o.identity,t.d2c=t.r2c=t.d2l=t.r2l=L,t.c2d=t.c2r=t.l2d=t.l2r=C,t.d2p=t.r2p=function(e,n,r){return t.l2p(L(e,0,r))},t.p2d=t.p2r=function(t,e,n){return C(F(t),e,n)},t.cleanPos=function(e){return o.cleanDate(e,p,t.calendar)}):\"category\"===t.type?(t.d2c=t.d2l=O,t.r2d=t.c2d=t.l2d=E,t.d2r=t.d2l_noadd=I,t.r2c=function(e){var n=P(e);return void 0!==n?n:t.fraction2r(.5)},t.l2r=t.c2r=u,t.r2l=P,t.d2p=function(e){return t.l2p(t.r2c(e))},t.p2d=function(t){return E(F(t))},t.r2p=t.d2p,t.p2r=F,t.cleanPos=function(t){return\"string\"==typeof t&&\"\"!==t?t:u(t)}):\"multicategory\"===t.type&&(t.r2d=t.c2d=t.l2d=E,t.d2r=t.d2l_noadd=I,t.r2c=function(e){var n=I(e);return void 0!==n?n:t.fraction2r(.5)},t.r2c_just_indices=D,t.l2r=t.c2r=u,t.r2l=I,t.d2p=function(e){return t.l2p(t.r2c(e))},t.p2d=function(t){return E(F(t))},t.r2p=t.d2p,t.p2r=F,t.cleanPos=function(t){return Array.isArray(t)||\"string\"==typeof t&&\"\"!==t?t:u(t)},t.setupMultiCategory=function(r){var i,a,s=t._traceIndices,l=t._matchGroup;if(l&&0===t._categories.length)for(var c in l)if(c!==n){var u=e[x.id2name(c)];s=s.concat(u._traceIndices)}var f=[[0,{}],[0,{}]],p=[];for(i=0;i<s.length;i++){var m=r[s[i]];if(d in m){var g=m[d],y=m._length||o.minRowLength(g);if(h(g[0])&&h(g[1]))for(a=0;a<y;a++){var v=g[0][a],_=g[1][a];S(v)&&S(_)&&(p.push([v,_]),v in f[0][1]||(f[0][1][v]=f[0][0]++),_ in f[1][1]||(f[1][1][_]=f[1][0]++))}}}for(p.sort((function(t,e){var n=f[0][1],r=n[t[0]]-n[e[0]];if(r)return r;var i=f[1][1];return i[t[1]]-i[e[1]]})),i=0;i<p.length;i++)O(p[i])}),t.fraction2r=function(e){var n=t.r2l(t.range[0]),r=t.r2l(t.range[1]);return t.l2r(n+e*(r-n))},t.r2fraction=function(e){var n=t.r2l(t.range[0]),r=t.r2l(t.range[1]);return(t.r2l(e)-n)/(r-n)},t.cleanRange=function(e,n){n||(n={}),e||(e=\"range\");var r,i,s=o.nestedProperty(t,e).get();if(i=(i=\"date\"===t.type?o.dfltRange(t.calendar):\"y\"===d?w.DFLTRANGEY:n.dfltRange||w.DFLTRANGEX).slice(),\"tozero\"!==t.rangemode&&\"nonnegative\"!==t.rangemode||(i[0]=0),s&&2===s.length)for(\"date\"!==t.type||t.autorange||(s[0]=o.cleanDate(s[0],p,t.calendar),s[1]=o.cleanDate(s[1],p,t.calendar)),r=0;r<2;r++)if(\"date\"===t.type){if(!o.isDateTime(s[r],t.calendar)){t[e]=i;break}if(t.r2l(s[0])===t.r2l(s[1])){var l=o.constrain(t.r2l(s[0]),o.MIN_MS+1e3,o.MAX_MS-1e3);s[0]=t.l2r(l-1e3),s[1]=t.l2r(l+1e3);break}}else{if(!a(s[r])){if(!a(s[1-r])){t[e]=i;break}s[r]=s[1-r]*(r?10:.1)}if(s[r]<-f?s[r]=-f:s[r]>f&&(s[r]=f),s[0]===s[1]){var c=Math.max(1,Math.abs(1e-6*s[0]));s[0]-=c,s[1]+=c}}else o.nestedProperty(t,e).set(i)},t.setScale=function(n){var r=e._size;if(t.overlaying){var i=x.getFromId({_fullLayout:e},t.overlaying);t.domain=i.domain}var a=n&&t._r?\"_r\":\"range\",o=t.calendar;t.cleanRange(a);var s,l,c=t.r2l(t[a][0],o),u=t.r2l(t[a][1],o),h=\"y\"===d;if(h?(t._offset=r.t+(1-t.domain[1])*r.h,t._length=r.h*(t.domain[1]-t.domain[0]),t._m=t._length/(c-u),t._b=-t._m*u):(t._offset=r.l+t.domain[0]*r.w,t._length=r.w*(t.domain[1]-t.domain[0]),t._m=t._length/(u-c),t._b=-t._m*c),t._rangebreaks=[],t._lBreaks=0,t._m2=0,t._B=[],t.rangebreaks&&(t._rangebreaks=t.locateBreaks(Math.min(c,u),Math.max(c,u)),t._rangebreaks.length)){for(s=0;s<t._rangebreaks.length;s++)l=t._rangebreaks[s],t._lBreaks+=Math.abs(l.max-l.min);var f=h;c>u&&(f=!f),f&&t._rangebreaks.reverse();var p=f?-1:1;for(t._m2=p*t._length/(Math.abs(u-c)-t._lBreaks),t._B.push(-t._m2*(h?u:c)),s=0;s<t._rangebreaks.length;s++)t._B.push(t._B[t._B.length-1]-p*t._m2*((l=t._rangebreaks[s]).max-l.min));for(s=0;s<t._rangebreaks.length;s++)(l=t._rangebreaks[s]).pmin=j(l.min),l.pmax=j(l.max)}if(!isFinite(t._m)||!isFinite(t._b)||t._length<0)throw e._replotting=!1,new Error(\"Something went wrong with axis scaling\")},t.maskBreaks=function(e){for(var n,r,i,a,l,c=t.rangebreaks||[],u=0;u<c.length;u++){var h=c[u];if(h.enabled)if(h.bounds){var d=h.pattern;switch(r=(n=o.simpleMap(h.bounds,d?s:t.d2c))[0],i=n[1],d){case M:a=(l=new Date(e)).getUTCDay(),r>i&&(i+=7,a<r&&(a+=7));break;case k:a=(l=new Date(e)).getUTCHours()+(l.getUTCMinutes()/60+l.getUTCSeconds()/3600+l.getUTCMilliseconds()/36e5),r>i&&(i+=24,a<r&&(a+=24));break;case\"\":a=e}if(a>=r&&a<i)return p}else for(var f=o.simpleMap(h.values,t.d2c).sort(o.sorterAsc),m=0;m<f.length;m++)if(i=(r=f[m])+h.dvalue,e>=r&&e<i)return p}return e},t.locateBreaks=function(e,n){var r,i,a,l,c=[];if(!t.rangebreaks)return c;var u=t.rangebreaks.slice().sort((function(t,e){return t.pattern===M&&e.pattern===k?-1:e.pattern===M&&t.pattern===k?1:0})),h=function(t,r){if((t=o.constrain(t,e,n))!==(r=o.constrain(r,e,n))){for(var i=!0,a=0;a<c.length;a++){var s=c[a];t<s.max&&r>=s.min&&(t<s.min&&(s.min=t),r>s.max&&(s.max=r),i=!1)}i&&c.push({min:t,max:r})}};for(r=0;r<u.length;r++){var d=u[r];if(d.enabled)if(d.bounds){var f=e,p=n;d.pattern&&(f=Math.floor(f)),a=(i=o.simpleMap(d.bounds,d.pattern?s:t.r2l))[0],l=i[1];var m,x,w=new Date(f);switch(d.pattern){case M:x=g,m=(l-a+(l<a?7:0))*y,f+=a*y-(w.getUTCDay()*y+w.getUTCHours()*v+w.getUTCMinutes()*_+w.getUTCSeconds()*b+w.getUTCMilliseconds());break;case k:x=y,m=(l-a+(l<a?24:0))*v,f+=a*v-(w.getUTCHours()*v+w.getUTCMinutes()*_+w.getUTCSeconds()*b+w.getUTCMilliseconds());break;default:f=Math.min(i[0],i[1]),m=x=(p=Math.max(i[0],i[1]))-f}for(var T=f;T<p;T+=x)h(T,T+m)}else for(var S=o.simpleMap(d.values,t.d2c),A=0;A<S.length;A++)h(a=S[A],l=a+d.dvalue)}return c.sort((function(t,e){return t.min-e.min})),c},t.makeCalcdata=function(e,n,r){var i,a,s,l,c=t.type,u=\"date\"===c&&e[n+\"calendar\"];if(n in e){if(i=e[n],l=e._length||o.minRowLength(i),o.isTypedArray(i)&&(\"linear\"===c||\"log\"===c)){if(l===i.length)return i;if(i.subarray)return i.subarray(0,l)}if(\"multicategory\"===c)return function(t,e){for(var n=new Array(e),r=0;r<e;r++)n[r]=D([(t[0]||[])[r],(t[1]||[])[r]]);return n}(i,l);for(a=new Array(l),s=0;s<l;s++)a[s]=t.d2c(i[s],0,u,r)}else{var h=n+\"0\"in e?t.d2c(e[n+\"0\"],0,u):0,d=e[\"d\"+n]?Number(e[\"d\"+n]):1;for(i=e[{x:\"y\",y:\"x\"}[n]],l=e._length||i.length,a=new Array(l),s=0;s<l;s++)a[s]=h+s*d}if(t.rangebreaks)for(s=0;s<l;s++)a[s]=t.maskBreaks(a[s]);return a},t.isValidRange=function(e){return Array.isArray(e)&&2===e.length&&a(t.r2l(e[0]))&&a(t.r2l(e[1]))},t.isPtWithinRange=function(e,n){var r=t.c2l(e[d],null,n),i=t.r2l(t.range[0]),a=t.r2l(t.range[1]);return i<a?i<=r&&r<=a:a<=r&&r<=i},t._emptyCategories=function(){t._categories=[],t._categoriesMap={}},t.clearCalc=function(){var n=t._matchGroup;if(n){var r=null,i=null;for(var a in n){var o=e[x.id2name(a)];if(o._categories){r=o._categories,i=o._categoriesMap;break}}r&&i?(t._categories=r,t._categoriesMap=i):t._emptyCategories()}else t._emptyCategories();if(t._initialCategories)for(var s=0;s<t._initialCategories.length;s++)O(t._initialCategories[s])},t.sortByInitialCategories=function(){var r=[];if(t._emptyCategories(),t._initialCategories)for(var i=0;i<t._initialCategories.length;i++)O(t._initialCategories[i]);r=r.concat(t._traceIndices);var a=t._matchGroup;for(var o in a)if(n!==o){var s=e[x.id2name(o)];s._categories=t._categories,s._categoriesMap=t._categoriesMap,r=r.concat(s._traceIndices)}return r};var B=e._d3locale;\"date\"===t.type&&(t._dateFormat=B?B.timeFormat:i,t._extraFormat=e._extraFormat),t._separators=e.separators,t._numFormat=B?B.numberFormat:r.format,delete t._minDtick,delete t._forceTick0}},{\"../../constants/numerical\":753,\"../../lib\":778,\"./axis_ids\":831,\"./constants\":834,d3:169,\"d3-time-format\":166,\"fast-isnumeric\":241}],849:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../components/color\").contrast,a=t(\"./layout_attributes\"),o=t(\"../array_container_defaults\");function s(t){var e=[\"showexponent\",\"showtickprefix\",\"showticksuffix\"].filter((function(e){return void 0!==t[e]}));if(e.every((function(n){return t[n]===t[e[0]]}))||1===e.length)return t[e[0]]}function l(t,e){function n(n,i){return r.coerce(t,e,a.tickformatstops,n,i)}n(\"enabled\")&&(n(\"dtickrange\"),n(\"value\"))}e.exports=function(t,e,n,c,u,h){h&&1!==h.pass||function(t,e,n,r,i){var a=s(t);n(\"tickprefix\")&&n(\"showtickprefix\",a),n(\"ticksuffix\",i.tickSuffixDflt)&&n(\"showticksuffix\",a)}(t,0,n,0,u),h&&2!==h.pass||function(t,e,n,c,u){var h=s(t);if(n(\"tickprefix\")&&n(\"showtickprefix\",h),n(\"ticksuffix\",u.tickSuffixDflt)&&n(\"showticksuffix\",h),n(\"showticklabels\")){var d=u.font||{},f=e.color,p=-1!==(e.ticklabelposition||\"\").indexOf(\"inside\")?i(u.bgColor):f&&f!==a.color.dflt?f:d.color;if(r.coerceFont(n,\"tickfont\",{family:d.family,size:d.size,color:p}),n(\"tickangle\"),\"category\"!==c){var m=n(\"tickformat\");o(t,e,{name:\"tickformatstops\",inclusionAttr:\"enabled\",handleItemDefaults:l}),e.tickformatstops.length||delete e.tickformatstops,m||\"date\"===c||(n(\"showexponent\",h),n(\"exponentformat\"),n(\"minexponent\"),n(\"separatethousands\"))}}}(t,e,n,c,u)}},{\"../../components/color\":643,\"../../lib\":778,\"../array_container_defaults\":823,\"./layout_attributes\":842}],850:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./layout_attributes\");e.exports=function(t,e,n,a){var o=r.coerce2(t,e,i,\"ticklen\"),s=r.coerce2(t,e,i,\"tickwidth\"),l=r.coerce2(t,e,i,\"tickcolor\",e.color);n(\"ticks\",a.outerTicks||o||s||l?\"outside\":\"\")||(delete e.ticklen,delete e.tickwidth,delete e.tickcolor)}},{\"../../lib\":778,\"./layout_attributes\":842}],851:[function(t,e,n){\"use strict\";var r=t(\"./clean_ticks\"),i=t(\"../../lib\").isArrayOrTypedArray;e.exports=function(t,e,n,a){function o(n){var r=t[n];return void 0!==r?r:(e._template||{})[n]}var s=o(\"tick0\"),l=o(\"dtick\"),c=o(\"tickvals\"),u=n(\"tickmode\",i(c)?\"array\":l?\"linear\":\"auto\");if(\"auto\"===u)n(\"nticks\");else if(\"linear\"===u){var h=e.dtick=r.dtick(l,a);e.tick0=r.tick0(s,a,e.calendar,h)}else\"multicategory\"!==a&&(void 0===n(\"tickvals\")?e.tickmode=\"auto\":n(\"ticktext\"))}},{\"../../lib\":778,\"./clean_ticks\":833}],852:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../registry\"),a=t(\"../../lib\"),o=t(\"../../components/drawing\"),s=t(\"./axes\");e.exports=function(t,e,n,l){var c=t._fullLayout;if(0!==e.length){var u,h,d,f;l&&(u=l());var p=r.ease(n.easing);return t._transitionData._interruptCallbacks.push((function(){return window.cancelAnimationFrame(f),f=null,function(){for(var n={},r=0;r<e.length;r++){var a=e[r],o=a.plotinfo.yaxis;a.xr0&&(n[a.plotinfo.xaxis._name+\".range\"]=a.xr0.slice()),a.yr0&&(n[o._name+\".range\"]=a.yr0.slice())}return i.call(\"relayout\",t,n).then((function(){for(var t=0;t<e.length;t++)m(e[t].plotinfo)}))}()})),h=Date.now(),f=window.requestAnimationFrame((function r(){d=Date.now();for(var a=Math.min(1,(d-h)/n.duration),o=p(a),s=0;s<e.length;s++)g(e[s],o);d-h>n.duration?(function(){for(var n={},r=0;r<e.length;r++){var a=e[r],o=a.plotinfo.yaxis;a.xr1&&(n[a.plotinfo.xaxis._name+\".range\"]=a.xr1.slice()),a.yr1&&(n[o._name+\".range\"]=a.yr1.slice())}u&&u(),i.call(\"relayout\",t,n).then((function(){for(var t=0;t<e.length;t++)m(e[t].plotinfo)}))}(),f=window.cancelAnimationFrame(r)):f=window.requestAnimationFrame(r)})),Promise.resolve()}function m(t){var e=t.xaxis,n=t.yaxis;c._defs.select(\"#\"+t.clipId+\"> rect\").call(o.setTranslate,0,0).call(o.setScale,1,1),t.plot.call(o.setTranslate,e._offset,n._offset).call(o.setScale,1,1);var r=t.plot.selectAll(\".scatterlayer .trace\");r.selectAll(\".point\").call(o.setPointGroupScale,1,1),r.selectAll(\".textpoint\").call(o.setTextPointsScale,1,1),r.call(o.hideOutsideRangePoints,t)}function g(e,n){var r=e.plotinfo,i=r.xaxis,l=r.yaxis,c=i._length,u=l._length,h=!!e.xr1,d=!!e.yr1,f=[];if(h){var p=a.simpleMap(e.xr0,i.r2l),m=a.simpleMap(e.xr1,i.r2l),g=p[1]-p[0],y=m[1]-m[0];f[0]=(p[0]*(1-n)+n*m[0]-p[0])/(p[1]-p[0])*c,f[2]=c*(1-n+n*y/g),i.range[0]=i.l2r(p[0]*(1-n)+n*m[0]),i.range[1]=i.l2r(p[1]*(1-n)+n*m[1])}else f[0]=0,f[2]=c;if(d){var v=a.simpleMap(e.yr0,l.r2l),_=a.simpleMap(e.yr1,l.r2l),b=v[1]-v[0],x=_[1]-_[0];f[1]=(v[1]*(1-n)+n*_[1]-v[1])/(v[0]-v[1])*u,f[3]=u*(1-n+n*x/b),l.range[0]=i.l2r(v[0]*(1-n)+n*_[0]),l.range[1]=l.l2r(v[1]*(1-n)+n*_[1])}else f[1]=0,f[3]=u;s.drawOne(t,i,{skipTitle:!0}),s.drawOne(t,l,{skipTitle:!0}),s.redrawComponents(t,[i._id,l._id]);var w=h?c/f[2]:1,k=d?u/f[3]:1,M=i._offset-(h?f[0]/f[2]*c:0),T=l._offset-(d?f[1]/f[3]*u:0);r.clipRect.call(o.setTranslate,h?f[0]:0,d?f[1]:0).call(o.setScale,1/w,1/k),r.plot.call(o.setTranslate,M,T).call(o.setScale,w,k),o.setPointGroupScale(r.zoomScalePts,1/w,1/k),o.setTextPointsScale(r.zoomScaleTxt,1/w,1/k)}s.redrawComponents(t)}},{\"../../components/drawing\":665,\"../../lib\":778,\"../../registry\":911,\"./axes\":828,d3:169}],853:[function(t,e,n){\"use strict\";var r=t(\"../../registry\").traceIs,i=t(\"./axis_autotype\");function a(t){return{v:\"x\",h:\"y\"}[t.orientation||\"v\"]}function o(t,e){var n=a(t),i=r(t,\"box-violin\"),o=r(t._fullInput||{},\"candlestick\");return i&&!o&&e===n&&void 0===t[n]&&void 0===t[n+\"0\"]}e.exports=function(t,e,n,s){n(\"autotypenumbers\",s.autotypenumbersDflt),\"-\"===n(\"type\",(s.splomStash||{}).type)&&(function(t,e){if(\"-\"===t.type){var n,s=t._id,l=s.charAt(0);-1!==s.indexOf(\"scene\")&&(s=l);var c=function(t,e,n){for(var r=0;r<t.length;r++){var i=t[r];if(\"splom\"===i.type&&i._length>0&&(i[\"_\"+n+\"axes\"]||{})[e])return i;if((i[n+\"axis\"]||n)===e){if(o(i,n))return i;if((i[n]||[]).length||i[n+\"0\"])return i}}}(e,s,l);if(c)if(\"histogram\"!==c.type||l!=={v:\"y\",h:\"x\"}[c.orientation||\"v\"]){var u=l+\"calendar\",h=c[u],d={noMultiCategory:!r(c,\"cartesian\")||r(c,\"noMultiCategory\")};if(\"box\"===c.type&&c._hasPreCompStats&&l==={h:\"x\",v:\"y\"}[c.orientation||\"v\"]&&(d.noMultiCategory=!0),d.autotypenumbers=t.autotypenumbers,o(c,l)){var f=a(c),p=[];for(n=0;n<e.length;n++){var m=e[n];r(m,\"box-violin\")&&(m[l+\"axis\"]||l)===s&&(p.push(void 0!==m[f]?m[f][0]:void 0!==m.name?m.name:\"text\"),m[u]!==h&&(h=void 0))}t.type=i(p,h,d)}else if(\"splom\"===c.type){var g=c.dimensions[c._axesDim[s]];g.visible&&(t.type=i(g.values,h,d))}else t.type=i(c[l]||[c[l+\"0\"]],h,d)}else t.type=\"linear\"}}(e,s.data),\"-\"===e.type?e.type=\"linear\":t.type=e.type)}},{\"../../registry\":911,\"./axis_autotype\":829}],854:[function(t,e,n){\"use strict\";var r=t(\"../registry\"),i=t(\"../lib\");function a(t,e,n){var r,a,o,s=!1;if(\"data\"===e.type)r=t._fullData[null!==e.traces?e.traces[0]:0];else{if(\"layout\"!==e.type)return!1;r=t._fullLayout}return a=i.nestedProperty(r,e.prop).get(),(o=n[e.type]=n[e.type]||{}).hasOwnProperty(e.prop)&&o[e.prop]!==a&&(s=!0),o[e.prop]=a,{changed:s,value:a}}function o(t,e){var n=[],r=e[0],a={};if(\"string\"==typeof r)a[r]=e[1];else{if(!i.isPlainObject(r))return n;a=r}return l(a,(function(t,e,r){n.push({type:\"layout\",prop:t,value:r})}),\"\",0),n}function s(t,e){var n,r,a,o,s=[];if(a=e[1],n=e[2],o={},\"string\"==typeof(r=e[0]))o[r]=a;else{if(!i.isPlainObject(r))return s;o=r,void 0===n&&(n=a)}return void 0===n&&(n=null),l(o,(function(e,r,i){var a,o;if(Array.isArray(i)){o=i.slice();var l=Math.min(o.length,t.data.length);n&&(l=Math.min(l,n.length)),a=[];for(var c=0;c<l;c++)a[c]=n?n[c]:c}else o=i,a=n?n.slice():null;if(null===a)Array.isArray(o)&&(o=o[0]);else if(Array.isArray(a)){if(!Array.isArray(o)){var u=o;o=[];for(var h=0;h<a.length;h++)o[h]=u}o.length=Math.min(a.length,o.length)}s.push({type:\"data\",prop:e,traces:a,value:o})}),\"\",0),s}function l(t,e,n,r){Object.keys(t).forEach((function(a){var o=t[a];if(\"_\"!==a[0]){var s=n+(r>0?\".\":\"\")+a;i.isPlainObject(o)?l(o,e,s,r+1):e(s,a,o)}}))}n.manageCommandObserver=function(t,e,r,o){var s={},l=!0;e&&e._commandObserver&&(s=e._commandObserver),s.cache||(s.cache={}),s.lookupTable={};var c=n.hasSimpleAPICommandBindings(t,r,s.lookupTable);if(e&&e._commandObserver){if(c)return s;if(e._commandObserver.remove)return e._commandObserver.remove(),e._commandObserver=null,s}if(c){a(t,c,s.cache),s.check=function(){if(l){var e=a(t,c,s.cache);return e.changed&&o&&void 0!==s.lookupTable[e.value]&&(s.disable(),Promise.resolve(o({value:e.value,type:c.type,prop:c.prop,traces:c.traces,index:s.lookupTable[e.value]})).then(s.enable,s.enable)),e.changed}};for(var u=[\"plotly_relayout\",\"plotly_redraw\",\"plotly_restyle\",\"plotly_update\",\"plotly_animatingframe\",\"plotly_afterplot\"],h=0;h<u.length;h++)t._internalOn(u[h],s.check);s.remove=function(){for(var e=0;e<u.length;e++)t._removeInternalListener(u[e],s.check)}}else i.log(\"Unable to automatically bind plot updates to API command\"),s.lookupTable={},s.remove=function(){};return s.disable=function(){l=!1},s.enable=function(){l=!0},e&&(e._commandObserver=s),s},n.hasSimpleAPICommandBindings=function(t,e,r){var i,a,o=e.length;for(i=0;i<o;i++){var s,l=e[i],c=l.method,u=l.args;if(Array.isArray(u)||(u=[]),!c)return!1;var h=n.computeAPICommandBindings(t,c,u);if(1!==h.length)return!1;if(a){if((s=h[0]).type!==a.type)return!1;if(s.prop!==a.prop)return!1;if(Array.isArray(a.traces)){if(!Array.isArray(s.traces))return!1;s.traces.sort();for(var d=0;d<a.traces.length;d++)if(a.traces[d]!==s.traces[d])return!1}else if(s.prop!==a.prop)return!1}else a=h[0],Array.isArray(a.traces)&&a.traces.sort();var f=(s=h[0]).value;if(Array.isArray(f)){if(1!==f.length)return!1;f=f[0]}r&&(r[f]=i)}return a},n.executeAPICommand=function(t,e,n){if(\"skip\"===e)return Promise.resolve();var a=r.apiMethodRegistry[e],o=[t];Array.isArray(n)||(n=[]);for(var s=0;s<n.length;s++)o.push(n[s]);return a.apply(null,o).catch((function(t){return i.warn(\"API call to Plotly.\"+e+\" rejected.\",t),Promise.reject(t)}))},n.computeAPICommandBindings=function(t,e,n){var r;switch(Array.isArray(n)||(n=[]),e){case\"restyle\":r=s(t,n);break;case\"relayout\":r=o(0,n);break;case\"update\":r=s(t,[n[0],n[2]]).concat(o(0,[n[1]]));break;case\"animate\":r=function(t,e){return Array.isArray(e[0])&&1===e[0].length&&-1!==[\"string\",\"number\"].indexOf(typeof e[0][0])?[{type:\"layout\",prop:\"_currentFrame\",value:e[0][0].toString()}]:[]}(0,n);break;default:r=[]}return r}},{\"../lib\":778,\"../registry\":911}],855:[function(t,e,n){\"use strict\";var r=t(\"../lib/extend\").extendFlat;n.attributes=function(t,e){var n={valType:\"info_array\",editType:(t=t||{}).editType,items:[{valType:\"number\",min:0,max:1,editType:t.editType},{valType:\"number\",min:0,max:1,editType:t.editType}],dflt:[0,1]},i=(e=e||{},{x:r({},n,{}),y:r({},n,{}),editType:t.editType});return t.noGridCell||(i.row={valType:\"integer\",min:0,dflt:0,editType:t.editType},i.column={valType:\"integer\",min:0,dflt:0,editType:t.editType}),i},n.defaults=function(t,e,n,r){var i=r&&r.x||[0,1],a=r&&r.y||[0,1],o=e.grid;if(o){var s=n(\"domain.column\");void 0!==s&&(s<o.columns?i=o._domains.x[s]:delete t.domain.column);var l=n(\"domain.row\");void 0!==l&&(l<o.rows?a=o._domains.y[l]:delete t.domain.row)}var c=n(\"domain.x\",i),u=n(\"domain.y\",a);c[0]<c[1]||(t.domain.x=i.slice()),u[0]<u[1]||(t.domain.y=a.slice())}},{\"../lib/extend\":768}],856:[function(t,e,n){\"use strict\";e.exports=function(t){var e=t.editType,n=t.colorEditType;void 0===n&&(n=e);var r={family:{valType:\"string\",noBlank:!0,strict:!0,editType:e},size:{valType:\"number\",min:1,editType:e},color:{valType:\"color\",editType:n},editType:e};return t.arrayOk&&(r.family.arrayOk=!0,r.size.arrayOk=!0,r.color.arrayOk=!0),r}},{}],857:[function(t,e,n){\"use strict\";e.exports={_isLinkedToArray:\"frames_entry\",group:{valType:\"string\"},name:{valType:\"string\"},traces:{valType:\"any\"},baseframe:{valType:\"string\"},data:{valType:\"any\"},layout:{valType:\"any\"}}},{}],858:[function(t,e,n){\"use strict\";n.projNames={equirectangular:\"equirectangular\",mercator:\"mercator\",orthographic:\"orthographic\",\"natural earth\":\"naturalEarth\",kavrayskiy7:\"kavrayskiy7\",miller:\"miller\",robinson:\"robinson\",eckert4:\"eckert4\",\"azimuthal equal area\":\"azimuthalEqualArea\",\"azimuthal equidistant\":\"azimuthalEquidistant\",\"conic equal area\":\"conicEqualArea\",\"conic conformal\":\"conicConformal\",\"conic equidistant\":\"conicEquidistant\",gnomonic:\"gnomonic\",stereographic:\"stereographic\",mollweide:\"mollweide\",hammer:\"hammer\",\"transverse mercator\":\"transverseMercator\",\"albers usa\":\"albersUsa\",\"winkel tripel\":\"winkel3\",aitoff:\"aitoff\",sinusoidal:\"sinusoidal\"},n.axesNames=[\"lonaxis\",\"lataxis\"],n.lonaxisSpan={orthographic:180,\"azimuthal equal area\":360,\"azimuthal equidistant\":360,\"conic conformal\":180,gnomonic:160,stereographic:180,\"transverse mercator\":180,\"*\":360},n.lataxisSpan={\"conic conformal\":150,stereographic:179.5,\"*\":180},n.scopeDefaults={world:{lonaxisRange:[-180,180],lataxisRange:[-90,90],projType:\"equirectangular\",projRotate:[0,0,0]},usa:{lonaxisRange:[-180,-50],lataxisRange:[15,80],projType:\"albers usa\"},europe:{lonaxisRange:[-30,60],lataxisRange:[30,85],projType:\"conic conformal\",projRotate:[15,0,0],projParallels:[0,60]},asia:{lonaxisRange:[22,160],lataxisRange:[-15,55],projType:\"mercator\",projRotate:[0,0,0]},africa:{lonaxisRange:[-30,60],lataxisRange:[-40,40],projType:\"mercator\",projRotate:[0,0,0]},\"north america\":{lonaxisRange:[-180,-45],lataxisRange:[5,85],projType:\"conic conformal\",projRotate:[-100,0,0],projParallels:[29.5,45.5]},\"south america\":{lonaxisRange:[-100,-30],lataxisRange:[-60,15],projType:\"mercator\",projRotate:[0,0,0]}},n.clipPad=.001,n.precision=.1,n.landColor=\"#F0DC82\",n.waterColor=\"#3399FF\",n.locationmodeToLayer={\"ISO-3\":\"countries\",\"USA-states\":\"subunits\",\"country names\":\"countries\"},n.sphereSVG={type:\"Sphere\"},n.fillLayers={ocean:1,land:1,lakes:1},n.lineLayers={subunits:1,countries:1,coastlines:1,rivers:1,frame:1},n.layers=[\"bg\",\"ocean\",\"land\",\"lakes\",\"subunits\",\"countries\",\"coastlines\",\"rivers\",\"lataxis\",\"lonaxis\",\"frame\",\"backplot\",\"frontplot\"],n.layersForChoropleth=[\"bg\",\"ocean\",\"land\",\"subunits\",\"countries\",\"coastlines\",\"lataxis\",\"lonaxis\",\"frame\",\"backplot\",\"rivers\",\"lakes\",\"frontplot\"],n.layerNameToAdjective={ocean:\"ocean\",land:\"land\",lakes:\"lake\",subunits:\"subunit\",countries:\"country\",coastlines:\"coastline\",rivers:\"river\",frame:\"frame\"}},{}],859:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../registry\"),a=t(\"../../lib\"),o=a.strTranslate,s=t(\"../../components/color\"),l=t(\"../../components/drawing\"),c=t(\"../../components/fx\"),u=t(\"../plots\"),h=t(\"../cartesian/axes\"),d=t(\"../cartesian/autorange\").getAutoRange,f=t(\"../../components/dragelement\"),p=t(\"../cartesian/select\").prepSelect,m=t(\"../cartesian/select\").clearSelect,g=t(\"../cartesian/select\").selectOnClick,y=t(\"./zoom\"),v=t(\"./constants\"),_=t(\"../../lib/geo_location_utils\"),b=t(\"../../lib/topojson_utils\"),x=t(\"topojson-client\").feature;function w(t){this.id=t.id,this.graphDiv=t.graphDiv,this.container=t.container,this.topojsonURL=t.topojsonURL,this.isStatic=t.staticPlot,this.topojsonName=null,this.topojson=null,this.projection=null,this.scope=null,this.viewInitial=null,this.fitScale=null,this.bounds=null,this.midPt=null,this.hasChoropleth=!1,this.traceHash={},this.layers={},this.basePaths={},this.dataPaths={},this.dataPoints={},this.clipDef=null,this.clipRect=null,this.bgRect=null,this.makeFramework()}t(\"./projections\")(r);var k=w.prototype;function M(t,e){var n=v.clipPad,r=t[0]+n,i=t[1]-n,a=e[0]+n,o=e[1]-n;r>0&&i<0&&(i+=360);var s=(i-r)/4;return{type:\"Polygon\",coordinates:[[[r,a],[r,o],[r+s,o],[r+2*s,o],[r+3*s,o],[i,o],[i,a],[i-s,a],[i-2*s,a],[i-3*s,a],[r,a]]]}}e.exports=function(t){return new w(t)},k.plot=function(t,e,n){var r=this,i=e[this.id],a=[],o=!1;for(var s in v.layerNameToAdjective)if(\"frame\"!==s&&i[\"show\"+s]){o=!0;break}for(var l=0;l<t.length;l++)if(t[0][0].trace.locationmode){o=!0;break}if(o){var c=b.getTopojsonName(i);null!==r.topojson&&c===r.topojsonName||(r.topojsonName=c,void 0===PlotlyGeoAssets.topojson[r.topojsonName]&&a.push(r.fetchTopojson()))}a=a.concat(_.fetchTraceGeoData(t)),n.push(new Promise((function(n,i){Promise.all(a).then((function(){r.topojson=PlotlyGeoAssets.topojson[r.topojsonName],r.update(t,e),n()})).catch(i)})))},k.fetchTopojson=function(){var t=this,e=b.getTopojsonPath(t.topojsonURL,t.topojsonName);return new Promise((function(n,i){r.json(e,(function(r,a){if(r)return i(404===r.status?new Error([\"plotly.js could not find topojson file at\",e,\".\",\"Make sure the *topojsonURL* plot config option\",\"is set properly.\"].join(\" \")):new Error([\"unexpected error while fetching topojson file at\",e].join(\" \")));PlotlyGeoAssets.topojson[t.topojsonName]=a,n()}))}))},k.update=function(t,e){var n=e[this.id];this.hasChoropleth=!1;for(var r=0;r<t.length;r++){var i=t[r],a=i[0].trace;\"choropleth\"===a.type&&(this.hasChoropleth=!0),!0===a.visible&&a._length>0&&a._module.calcGeoJSON(i,e)}if(!this.updateProjection(t,e)){this.viewInitial&&this.scope===n.scope||this.saveViewInitial(n),this.scope=n.scope,this.updateBaseLayers(e,n),this.updateDims(e,n),this.updateFx(e,n),u.generalUpdatePerTraceModule(this.graphDiv,this,t,n);var o=this.layers.frontplot.select(\".scatterlayer\");this.dataPoints.point=o.selectAll(\".point\"),this.dataPoints.text=o.selectAll(\"text\"),this.dataPaths.line=o.selectAll(\".js-line\");var s=this.layers.backplot.select(\".choroplethlayer\");this.dataPaths.choropleth=s.selectAll(\"path\"),this.render()}},k.updateProjection=function(t,e){var n=this.graphDiv,o=e[this.id],s=e._size,l=o.domain,c=o.projection,u=o.lonaxis,h=o.lataxis,f=u._ax,p=h._ax,m=this.projection=function(t){for(var e=t.projection.type,n=r.geo[v.projNames[e]](),i=t._isClipped?v.lonaxisSpan[e]/2:null,a=[\"center\",\"rotate\",\"parallels\",\"clipExtent\"],o=function(t){return t?n:[]},s=0;s<a.length;s++){var l=a[s];\"function\"!=typeof n[l]&&(n[l]=o)}return n.isLonLatOverEdges=function(t){if(null===n(t))return!0;if(i){var e=n.rotate();return r.geo.distance(t,[-e[0],-e[1]])>i*Math.PI/180}return!1},n.getPath=function(){return r.geo.path().projection(n)},n.getBounds=function(t){return n.getPath().bounds(t)},n.fitExtent=function(t,e){var r=t[1][0]-t[0][0],i=t[1][1]-t[0][1],a=n.clipExtent&&n.clipExtent();n.scale(150).translate([0,0]),a&&n.clipExtent(null);var o=n.getBounds(e),s=Math.min(r/(o[1][0]-o[0][0]),i/(o[1][1]-o[0][1])),l=+t[0][0]+(r-s*(o[1][0]+o[0][0]))/2,c=+t[0][1]+(i-s*(o[1][1]+o[0][1]))/2;return a&&n.clipExtent(a),n.scale(150*s).translate([l,c])},n.precision(v.precision),i&&n.clipAngle(i-v.clipPad),n}(o),g=[[s.l+s.w*l.x[0],s.t+s.h*(1-l.y[1])],[s.l+s.w*l.x[1],s.t+s.h*(1-l.y[0])]],y=o.center||{},_=c.rotation||{},b=u.range||[],x=h.range||[];if(o.fitbounds){f._length=g[1][0]-g[0][0],p._length=g[1][1]-g[0][1],f.range=d(n,f),p.range=d(n,p);var w=(f.range[0]+f.range[1])/2,k=(p.range[0]+p.range[1])/2;if(o._isScoped)y={lon:w,lat:k};else if(o._isClipped){y={lon:w,lat:k},_={lon:w,lat:k,roll:_.roll};var T=c.type,S=v.lonaxisSpan[T]/2||180,A=v.lataxisSpan[T]/2||90;b=[w-S,w+S],x=[k-A,k+A]}else y={lon:w,lat:k},_={lon:w,lat:_.lat,roll:_.roll}}m.center([y.lon-_.lon,y.lat-_.lat]).rotate([-_.lon,-_.lat,_.roll]).parallels(c.parallels);var L=M(b,x);m.fitExtent(g,L);var C=this.bounds=m.getBounds(L),E=this.fitScale=m.scale(),O=m.translate();if(!isFinite(C[0][0])||!isFinite(C[0][1])||!isFinite(C[1][0])||!isFinite(C[1][1])||isNaN(O[0])||isNaN(O[0])){for(var D=[\"fitbounds\",\"projection.rotation\",\"center\",\"lonaxis.range\",\"lataxis.range\"],I=\"Invalid geo settings, relayout'ing to default view.\",P={},R=0;R<D.length;R++)P[this.id+\".\"+D[R]]=null;return this.viewInitial=null,a.warn(I),n._promises.push(i.call(\"relayout\",n,P)),I}if(o.fitbounds){var z=m.getBounds(M(f.range,p.range)),j=Math.min((C[1][0]-C[0][0])/(z[1][0]-z[0][0]),(C[1][1]-C[0][1])/(z[1][1]-z[0][1]));isFinite(j)?m.scale(j*E):a.warn(\"Something went wrong during\"+this.id+\"fitbounds computations.\")}else m.scale(c.scale*E);var F=this.midPt=[(C[0][0]+C[1][0])/2,(C[0][1]+C[1][1])/2];if(m.translate([O[0]+(F[0]-O[0]),O[1]+(F[1]-O[1])]).clipExtent(C),o._isAlbersUsa){var N=m([y.lon,y.lat]),B=m.translate();m.translate([B[0]-(N[0]-B[0]),B[1]-(N[1]-B[1])])}},k.updateBaseLayers=function(t,e){var n=this,i=n.topojson,a=n.layers,o=n.basePaths;function c(t){return\"lonaxis\"===t||\"lataxis\"===t}function u(t){return Boolean(v.lineLayers[t])}function d(t){return Boolean(v.fillLayers[t])}var f=(this.hasChoropleth?v.layersForChoropleth:v.layers).filter((function(t){return u(t)||d(t)?e[\"show\"+t]:!c(t)||e[t].showgrid})),p=n.framework.selectAll(\".layer\").data(f,String);p.exit().each((function(t){delete a[t],delete o[t],r.select(this).remove()})),p.enter().append(\"g\").attr(\"class\",(function(t){return\"layer \"+t})).each((function(t){var e=a[t]=r.select(this);\"bg\"===t?n.bgRect=e.append(\"rect\").style(\"pointer-events\",\"all\"):c(t)?o[t]=e.append(\"path\").style(\"fill\",\"none\"):\"backplot\"===t?e.append(\"g\").classed(\"choroplethlayer\",!0):\"frontplot\"===t?e.append(\"g\").classed(\"scatterlayer\",!0):u(t)?o[t]=e.append(\"path\").style(\"fill\",\"none\").style(\"stroke-miterlimit\",2):d(t)&&(o[t]=e.append(\"path\").style(\"stroke\",\"none\"))})),p.order(),p.each((function(n){var r=o[n],a=v.layerNameToAdjective[n];\"frame\"===n?r.datum(v.sphereSVG):u(n)||d(n)?r.datum(x(i,i.objects[n])):c(n)&&r.datum(function(t,e,n){var r,i,a,o=e[t],s=v.scopeDefaults[e.scope];\"lonaxis\"===t?(r=s.lonaxisRange,i=s.lataxisRange,a=function(t,e){return[t,e]}):\"lataxis\"===t&&(r=s.lataxisRange,i=s.lonaxisRange,a=function(t,e){return[e,t]});var l={type:\"linear\",range:[r[0],r[1]-1e-6],tick0:o.tick0,dtick:o.dtick};h.setConvert(l,n);var c=h.calcTicks(l);e.isScoped||\"lonaxis\"!==t||c.pop();for(var u=c.length,d=new Array(u),f=0;f<u;f++)for(var p=c[f].x,m=d[f]=[],g=i[0];g<i[1]+2.5;g+=2.5)m.push(a(p,g));return{type:\"MultiLineString\",coordinates:d}}(n,e,t)).call(s.stroke,e[n].gridcolor).call(l.dashLine,\"\",e[n].gridwidth),u(n)?r.call(s.stroke,e[a+\"color\"]).call(l.dashLine,\"\",e[a+\"width\"]):d(n)&&r.call(s.fill,e[a+\"color\"])}))},k.updateDims=function(t,e){var n=this.bounds,r=(e.framewidth||0)/2,i=n[0][0]-r,a=n[0][1]-r,o=n[1][0]-i+r,c=n[1][1]-a+r;l.setRect(this.clipRect,i,a,o,c),this.bgRect.call(l.setRect,i,a,o,c).call(s.fill,e.bgcolor),this.xaxis._offset=i,this.xaxis._length=o,this.yaxis._offset=a,this.yaxis._length=c},k.updateFx=function(t,e){var n=this,a=n.graphDiv,o=n.bgRect,s=t.dragmode,l=t.clickmode;if(!n.isStatic){var u;\"select\"===s?u=function(t,e){(t.range={})[n.id]=[d([e.xmin,e.ymin]),d([e.xmax,e.ymax])]}:\"lasso\"===s&&(u=function(t,e,r){(t.lassoPoints={})[n.id]=r.filtered.map(d)});var h={element:n.bgRect.node(),gd:a,plotinfo:{id:n.id,xaxis:n.xaxis,yaxis:n.yaxis,fillRangeItems:u},xaxes:[n.xaxis],yaxes:[n.yaxis],subplot:n.id,clickFn:function(t){2===t&&m(a)}};\"pan\"===s?(o.node().onmousedown=null,o.call(y(n,e)),o.on(\"dblclick.zoom\",(function(){var t=n.viewInitial,e={};for(var r in t)e[n.id+\".\"+r]=t[r];i.call(\"_guiRelayout\",a,e),a.emit(\"plotly_doubleclick\",null)})),a._context._scrollZoom.geo||o.on(\"wheel.zoom\",null)):\"select\"!==s&&\"lasso\"!==s||(o.on(\".zoom\",null),h.prepFn=function(t,e,n){p(t,e,n,h,s)},f.init(h)),o.on(\"mousemove\",(function(){var t=n.projection.invert(r.mouse(this));if(!t||isNaN(t[0])||isNaN(t[1]))return f.unhover(a,r.event);n.xaxis.p2c=function(){return t[0]},n.yaxis.p2c=function(){return t[1]},c.hover(a,r.event,n.id)})),o.on(\"mouseout\",(function(){a._dragging||f.unhover(a,r.event)})),o.on(\"click\",(function(){\"select\"!==s&&\"lasso\"!==s&&(l.indexOf(\"select\")>-1&&g(r.event,a,[n.xaxis],[n.yaxis],n.id,h),l.indexOf(\"event\")>-1&&c.click(a,r.event))}))}function d(t){return n.projection.invert([t[0]+n.xaxis._offset,t[1]+n.yaxis._offset])}},k.makeFramework=function(){var t=this,e=t.graphDiv,n=e._fullLayout,i=\"clip\"+n._uid+t.id;t.clipDef=n._clips.append(\"clipPath\").attr(\"id\",i),t.clipRect=t.clipDef.append(\"rect\"),t.framework=r.select(t.container).append(\"g\").attr(\"class\",\"geo \"+t.id).call(l.setClipUrl,i,e),t.project=function(e){var n=t.projection(e);return n?[n[0]-t.xaxis._offset,n[1]-t.yaxis._offset]:[null,null]},t.xaxis={_id:\"x\",c2p:function(e){return t.project(e)[0]}},t.yaxis={_id:\"y\",c2p:function(e){return t.project(e)[1]}},t.mockAxis={type:\"linear\",showexponent:\"all\",exponentformat:\"B\"},h.setConvert(t.mockAxis,n)},k.saveViewInitial=function(t){var e=t.center||{},n=t.projection,r=n.rotation||{};this.viewInitial={fitbounds:t.fitbounds,\"projection.scale\":n.scale},a.extendFlat(this.viewInitial,t._isScoped?{\"center.lon\":e.lon,\"center.lat\":e.lat}:t._isClipped?{\"projection.rotation.lon\":r.lon,\"projection.rotation.lat\":r.lat}:{\"center.lon\":e.lon,\"center.lat\":e.lat,\"projection.rotation.lon\":r.lon})},k.render=function(){var t,e=this.projection,n=e.getPath();function r(t){var n=e(t.lonlat);return n?o(n[0],n[1]):null}function i(t){return e.isLonLatOverEdges(t.lonlat)?\"none\":null}for(t in this.basePaths)this.basePaths[t].attr(\"d\",n);for(t in this.dataPaths)this.dataPaths[t].attr(\"d\",(function(t){return n(t.geojson)}));for(t in this.dataPoints)this.dataPoints[t].attr(\"display\",i).attr(\"transform\",r)}},{\"../../components/color\":643,\"../../components/dragelement\":662,\"../../components/drawing\":665,\"../../components/fx\":683,\"../../lib\":778,\"../../lib/geo_location_utils\":771,\"../../lib/topojson_utils\":806,\"../../registry\":911,\"../cartesian/autorange\":827,\"../cartesian/axes\":828,\"../cartesian/select\":847,\"../plots\":891,\"./constants\":858,\"./projections\":863,\"./zoom\":864,d3:169,\"topojson-client\":579}],860:[function(t,e,n){\"use strict\";var r=t(\"../../plots/get_data\").getSubplotCalcData,i=t(\"../../lib\").counterRegex,a=t(\"./geo\"),o=\"geo\",s=i(o),l={};l.geo={valType:\"subplotid\",dflt:o,editType:\"calc\"},e.exports={attr:o,name:o,idRoot:o,idRegex:s,attrRegex:s,attributes:l,layoutAttributes:t(\"./layout_attributes\"),supplyLayoutDefaults:t(\"./layout_defaults\"),plot:function(t){for(var e=t._fullLayout,n=t.calcdata,i=e._subplots.geo,s=0;s<i.length;s++){var l=i[s],c=r(n,o,l),u=e[l]._subplot;u||(u=a({id:l,graphDiv:t,container:e._geolayer.node(),topojsonURL:t._context.topojsonURL,staticPlot:t._context.staticPlot}),e[l]._subplot=u),u.plot(c,e,t._promises)}},updateFx:function(t){for(var e=t._fullLayout,n=e._subplots.geo,r=0;r<n.length;r++){var i=e[n[r]];i._subplot.updateFx(e,i)}},clean:function(t,e,n,r){for(var i=r._subplots.geo||[],a=0;a<i.length;a++){var o=i[a],s=r[o]._subplot;!e[o]&&s&&(s.framework.remove(),s.clipDef.remove())}}}},{\"../../lib\":778,\"../../plots/get_data\":865,\"./geo\":859,\"./layout_attributes\":861,\"./layout_defaults\":862}],861:[function(t,e,n){\"use strict\";var r=t(\"../../components/color/attributes\"),i=t(\"../domain\").attributes,a=t(\"./constants\"),o=t(\"../../plot_api/edit_types\").overrideAll,s={range:{valType:\"info_array\",items:[{valType:\"number\"},{valType:\"number\"}]},showgrid:{valType:\"boolean\",dflt:!1},tick0:{valType:\"number\",dflt:0},dtick:{valType:\"number\"},gridcolor:{valType:\"color\",dflt:r.lightLine},gridwidth:{valType:\"number\",min:0,dflt:1}};(e.exports=o({domain:i({name:\"geo\"},{}),fitbounds:{valType:\"enumerated\",values:[!1,\"locations\",\"geojson\"],dflt:!1,editType:\"plot\"},resolution:{valType:\"enumerated\",values:[110,50],dflt:110,coerceNumber:!0},scope:{valType:\"enumerated\",values:Object.keys(a.scopeDefaults),dflt:\"world\"},projection:{type:{valType:\"enumerated\",values:Object.keys(a.projNames)},rotation:{lon:{valType:\"number\"},lat:{valType:\"number\"},roll:{valType:\"number\"}},parallels:{valType:\"info_array\",items:[{valType:\"number\"},{valType:\"number\"}]},scale:{valType:\"number\",min:0,dflt:1}},center:{lon:{valType:\"number\"},lat:{valType:\"number\"}},visible:{valType:\"boolean\",dflt:!0},showcoastlines:{valType:\"boolean\"},coastlinecolor:{valType:\"color\",dflt:r.defaultLine},coastlinewidth:{valType:\"number\",min:0,dflt:1},showland:{valType:\"boolean\",dflt:!1},landcolor:{valType:\"color\",dflt:a.landColor},showocean:{valType:\"boolean\",dflt:!1},oceancolor:{valType:\"color\",dflt:a.waterColor},showlakes:{valType:\"boolean\",dflt:!1},lakecolor:{valType:\"color\",dflt:a.waterColor},showrivers:{valType:\"boolean\",dflt:!1},rivercolor:{valType:\"color\",dflt:a.waterColor},riverwidth:{valType:\"number\",min:0,dflt:1},showcountries:{valType:\"boolean\"},countrycolor:{valType:\"color\",dflt:r.defaultLine},countrywidth:{valType:\"number\",min:0,dflt:1},showsubunits:{valType:\"boolean\"},subunitcolor:{valType:\"color\",dflt:r.defaultLine},subunitwidth:{valType:\"number\",min:0,dflt:1},showframe:{valType:\"boolean\"},framecolor:{valType:\"color\",dflt:r.defaultLine},framewidth:{valType:\"number\",min:0,dflt:1},bgcolor:{valType:\"color\",dflt:r.background},lonaxis:s,lataxis:s},\"plot\",\"from-root\")).uirevision={valType:\"any\",editType:\"none\"}},{\"../../components/color/attributes\":642,\"../../plot_api/edit_types\":810,\"../domain\":855,\"./constants\":858}],862:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../subplot_defaults\"),a=t(\"../get_data\").getSubplotData,o=t(\"./constants\"),s=t(\"./layout_attributes\"),l=o.axesNames;function c(t,e,n,i){var s=a(i.fullData,\"geo\",i.id).map((function(t){return t._expandedIndex})),c=n(\"resolution\"),u=n(\"scope\"),h=o.scopeDefaults[u],d=n(\"projection.type\",h.projType),f=e._isAlbersUsa=\"albers usa\"===d;f&&(u=e.scope=\"usa\");var p=e._isScoped=\"world\"!==u,m=e._isConic=-1!==d.indexOf(\"conic\"),g=e._isClipped=!!o.lonaxisSpan[d];if(!1===t.visible){var y=r.extendDeep({},e._template);y.showcoastlines=!1,y.showcountries=!1,y.showframe=!1,y.showlakes=!1,y.showland=!1,y.showocean=!1,y.showrivers=!1,y.showsubunits=!1,y.lonaxis&&(y.lonaxis.showgrid=!1),y.lataxis&&(y.lataxis.showgrid=!1),e._template=y}for(var v=n(\"visible\"),_=0;_<l.length;_++){var b,x=l[_],w=[30,10][_];if(p)b=h[x+\"Range\"];else{var k=o[x+\"Span\"],M=(k[d]||k[\"*\"])/2,T=n(\"projection.rotation.\"+x.substr(0,3),h.projRotate[_]);b=[T-M,T+M]}var S=n(x+\".range\",b);n(x+\".tick0\"),n(x+\".dtick\",w),n(x+\".showgrid\",!!v&&void 0)&&(n(x+\".gridcolor\"),n(x+\".gridwidth\")),e[x]._ax={type:\"linear\",_id:x.slice(0,3),_traceIndices:s,setScale:r.identity,c2l:r.identity,r2l:r.identity,autorange:!0,range:S.slice(),_m:1,_input:{}}}var A=e.lonaxis.range,L=e.lataxis.range,C=A[0],E=A[1];C>0&&E<0&&(E+=360);var O,D,I,P=(C+E)/2;if(!f){var R=p?h.projRotate:[P,0,0];O=n(\"projection.rotation.lon\",R[0]),n(\"projection.rotation.lat\",R[1]),n(\"projection.rotation.roll\",R[2]),n(\"showcoastlines\",!p&&v)&&(n(\"coastlinecolor\"),n(\"coastlinewidth\")),n(\"showocean\",!!v&&void 0)&&n(\"oceancolor\")}f?(D=-96.6,I=38.7):(D=p?P:O,I=(L[0]+L[1])/2),n(\"center.lon\",D),n(\"center.lat\",I),m&&n(\"projection.parallels\",h.projParallels||[0,60]),n(\"projection.scale\"),n(\"showland\",!!v&&void 0)&&n(\"landcolor\"),n(\"showlakes\",!!v&&void 0)&&n(\"lakecolor\"),n(\"showrivers\",!!v&&void 0)&&(n(\"rivercolor\"),n(\"riverwidth\")),n(\"showcountries\",p&&\"usa\"!==u&&v)&&(n(\"countrycolor\"),n(\"countrywidth\")),(\"usa\"===u||\"north america\"===u&&50===c)&&(n(\"showsubunits\",v),n(\"subunitcolor\"),n(\"subunitwidth\")),p||n(\"showframe\",v)&&(n(\"framecolor\"),n(\"framewidth\")),n(\"bgcolor\"),n(\"fitbounds\")&&(delete e.projection.scale,p?(delete e.center.lon,delete e.center.lat):g?(delete e.center.lon,delete e.center.lat,delete e.projection.rotation.lon,delete e.projection.rotation.lat,delete e.lonaxis.range,delete e.lataxis.range):(delete e.center.lon,delete e.center.lat,delete e.projection.rotation.lon))}e.exports=function(t,e,n){i(t,e,n,{type:\"geo\",attributes:s,handleDefaults:c,fullData:n,partition:\"y\"})}},{\"../../lib\":778,\"../get_data\":865,\"../subplot_defaults\":905,\"./constants\":858,\"./layout_attributes\":861}],863:[function(t,e,n){\"use strict\";e.exports=function(t){function e(t,e){return{type:\"Feature\",id:t.id,properties:t.properties,geometry:n(t.geometry,e)}}function n(e,r){if(!e)return null;if(\"GeometryCollection\"===e.type)return{type:\"GeometryCollection\",geometries:object.geometries.map((function(t){return n(t,r)}))};if(!c.hasOwnProperty(e.type))return null;var i=c[e.type];return t.geo.stream(e,r(i)),i.result()}t.geo.project=function(t,e){var i=e.stream;if(!i)throw new Error(\"not yet supported\");return(t&&r.hasOwnProperty(t.type)?r[t.type]:n)(t,i)};var r={Feature:e,FeatureCollection:function(t,n){return{type:\"FeatureCollection\",features:t.features.map((function(t){return e(t,n)}))}}},i=[],a=[],o={point:function(t,e){i.push([t,e])},result:function(){var t=i.length?i.length<2?{type:\"Point\",coordinates:i[0]}:{type:\"MultiPoint\",coordinates:i}:null;return i=[],t}},s={lineStart:u,point:function(t,e){i.push([t,e])},lineEnd:function(){i.length&&(a.push(i),i=[])},result:function(){var t=a.length?a.length<2?{type:\"LineString\",coordinates:a[0]}:{type:\"MultiLineString\",coordinates:a}:null;return a=[],t}},l={polygonStart:u,lineStart:u,point:function(t,e){i.push([t,e])},lineEnd:function(){var t=i.length;if(t){do{i.push(i[0].slice())}while(++t<4);a.push(i),i=[]}},polygonEnd:u,result:function(){if(!a.length)return null;var t=[],e=[];return a.forEach((function(n){!function(t){if((e=t.length)<4)return!1;for(var e,n=0,r=t[e-1][1]*t[0][0]-t[e-1][0]*t[0][1];++n<e;)r+=t[n-1][1]*t[n][0]-t[n-1][0]*t[n][1];return r<=0}(n)?e.push(n):t.push([n])})),e.forEach((function(e){var n=e[0];t.some((function(t){if(function(t,e){for(var n=e[0],r=e[1],i=!1,a=0,o=t.length,s=o-1;a<o;s=a++){var l=t[a],c=l[0],u=l[1],h=t[s],d=h[1];u>r^d>r&&n<(h[0]-c)*(r-u)/(d-u)+c&&(i=!i)}return i}(t[0],n))return t.push(e),!0}))||t.push([e])})),a=[],t.length?t.length>1?{type:\"MultiPolygon\",coordinates:t}:{type:\"Polygon\",coordinates:t[0]}:null}},c={Point:o,MultiPoint:o,LineString:s,MultiLineString:s,Polygon:l,MultiPolygon:l,Sphere:l};function u(){}var h=1e-6,d=Math.PI,f=d/2,p=(Math.sqrt(d),d/180),m=180/d;function g(t){return t>1?f:t<-1?-f:Math.asin(t)}function y(t){return t>1?0:t<-1?d:Math.acos(t)}var v=t.geo.projection,_=t.geo.projectionMutator;function b(t,e){var n=(2+f)*Math.sin(e);e/=2;for(var r=0,i=1/0;r<10&&Math.abs(i)>h;r++){var a=Math.cos(e);e-=i=(e+Math.sin(e)*(a+2)-n)/(2*a*(1+a))}return[2/Math.sqrt(d*(4+d))*t*(1+Math.cos(e)),2*Math.sqrt(d/(4+d))*Math.sin(e)]}t.geo.interrupt=function(e){var n,r=[[[[-d,0],[0,f],[d,0]]],[[[-d,0],[0,-f],[d,0]]]];function i(t,n){for(var i=n<0?-1:1,a=r[+(n<0)],o=0,s=a.length-1;o<s&&t>a[o][2][0];++o);var l=e(t-a[o][1][0],n);return l[0]+=e(a[o][1][0],i*n>i*a[o][0][1]?a[o][0][1]:n)[0],l}function a(){n=r.map((function(t){return t.map((function(t){var n,r=e(t[0][0],t[0][1])[0],i=e(t[2][0],t[2][1])[0],a=e(t[1][0],t[0][1])[1],o=e(t[1][0],t[1][1])[1];return a>o&&(n=a,a=o,o=n),[[r,a],[i,o]]}))}))}e.invert&&(i.invert=function(t,a){for(var o=n[+(a<0)],s=r[+(a<0)],l=0,u=o.length;l<u;++l){var h=o[l];if(h[0][0]<=t&&t<h[1][0]&&h[0][1]<=a&&a<h[1][1]){var d=e.invert(t-e(s[l][1][0],0)[0],a);return d[0]+=s[l][1][0],c(i(d[0],d[1]),[t,a])?d:null}}});var o=t.geo.projection(i),s=o.stream;function l(t,e){for(var n,r,i,a=-1,o=t.length,s=t[0],l=[];++a<o;){r=((n=t[a])[0]-s[0])/e,i=(n[1]-s[1])/e;for(var c=0;c<e;++c)l.push([s[0]+c*r,s[1]+c*i]);s=n}return l.push(n),l}function c(t,e){return Math.abs(t[0]-e[0])<h&&Math.abs(t[1]-e[1])<h}return o.stream=function(e){var n=o.rotate(),i=s(e),a=(o.rotate([0,0]),s(e));return o.rotate(n),i.sphere=function(){t.geo.stream(function(){for(var e=1e-6,n=[],i=0,a=r[0].length;i<a;++i)n.push(l([[(s=180*(o=r[0][i])[0][0]/d)+e,180*o[0][1]/d+e],[s+e,(c=180*o[1][1]/d)-e],[(u=180*o[2][0]/d)-e,c-e],[u-e,180*o[2][1]/d+e]],30));for(i=r[1].length-1;i>=0;--i){var o,s,c,u;n.push(l([[(u=180*(o=r[1][i])[2][0]/d)-e,180*o[2][1]/d-e],[u-e,(c=180*o[1][1]/d)+e],[(s=180*o[0][0]/d)+e,c+e],[s+e,180*o[0][1]/d-e]],30))}return{type:\"Polygon\",coordinates:[t.merge(n)]}}(),a)},i},o.lobes=function(t){return arguments.length?(r=t.map((function(t){return t.map((function(t){return[[t[0][0]*d/180,t[0][1]*d/180],[t[1][0]*d/180,t[1][1]*d/180],[t[2][0]*d/180,t[2][1]*d/180]]}))})),a(),o):r.map((function(t){return t.map((function(t){return[[180*t[0][0]/d,180*t[0][1]/d],[180*t[1][0]/d,180*t[1][1]/d],[180*t[2][0]/d,180*t[2][1]/d]]}))}))},o},b.invert=function(t,e){var n=.5*e*Math.sqrt((4+d)/d),r=g(n),i=Math.cos(r);return[t/(2/Math.sqrt(d*(4+d))*(1+i)),g((r+n*(i+2))/(2+f))]},(t.geo.eckert4=function(){return v(b)}).raw=b;var x=t.geo.azimuthalEqualArea.raw;function w(t,e){if(arguments.length<2&&(e=t),1===e)return x;if(e===1/0)return k;function n(n,r){var i=x(n/e,r);return i[0]*=t,i}return n.invert=function(n,r){var i=x.invert(n/t,r);return i[0]*=e,i},n}function k(t,e){return[t*Math.cos(e)/Math.cos(e/=2),2*Math.sin(e)]}function M(t,e){return[3*t/(2*d)*Math.sqrt(d*d/3-e*e),e]}function T(t,e){return[t,1.25*Math.log(Math.tan(d/4+.4*e))]}function S(t){return function(e){var n,r=t*Math.sin(e),i=30;do{e-=n=(e+Math.sin(e)-r)/(1+Math.cos(e))}while(Math.abs(n)>h&&--i>0);return e/2}}k.invert=function(t,e){var n=2*g(e/2);return[t*Math.cos(n/2)/Math.cos(n),n]},(t.geo.hammer=function(){var t=2,e=_(w),n=e(t);return n.coefficient=function(n){return arguments.length?e(t=+n):t},n}).raw=w,M.invert=function(t,e){return[2/3*d*t/Math.sqrt(d*d/3-e*e),e]},(t.geo.kavrayskiy7=function(){return v(M)}).raw=M,T.invert=function(t,e){return[t,2.5*Math.atan(Math.exp(.8*e))-.625*d]},(t.geo.miller=function(){return v(T)}).raw=T,S(d);var A=function(t,e,n){var r=S(n);function i(n,i){return[t*n*Math.cos(i=r(i)),e*Math.sin(i)]}return i.invert=function(r,i){var a=g(i/e);return[r/(t*Math.cos(a)),g((2*a+Math.sin(2*a))/n)]},i}(Math.SQRT2/f,Math.SQRT2,d);function L(t,e){var n=e*e,r=n*n;return[t*(.8707-.131979*n+r*(r*(.003971*n-.001529*r)-.013791)),e*(1.007226+n*(.015085+r*(.028874*n-.044475-.005916*r)))]}(t.geo.mollweide=function(){return v(A)}).raw=A,L.invert=function(t,e){var n,r=e,i=25;do{var a=r*r,o=a*a;r-=n=(r*(1.007226+a*(.015085+o*(.028874*a-.044475-.005916*o)))-e)/(1.007226+a*(.045255+o*(.259866*a-.311325-.005916*11*o)))}while(Math.abs(n)>h&&--i>0);return[t/(.8707+(a=r*r)*(a*(a*a*a*(.003971-.001529*a)-.013791)-.131979)),r]},(t.geo.naturalEarth=function(){return v(L)}).raw=L;var C=[[.9986,-.062],[1,0],[.9986,.062],[.9954,.124],[.99,.186],[.9822,.248],[.973,.31],[.96,.372],[.9427,.434],[.9216,.4958],[.8962,.5571],[.8679,.6176],[.835,.6769],[.7986,.7346],[.7597,.7903],[.7186,.8435],[.6732,.8936],[.6213,.9394],[.5722,.9761],[.5322,1]];function E(t,e){var n,r=Math.min(18,36*Math.abs(e)/d),i=Math.floor(r),a=r-i,o=(n=C[i])[0],s=n[1],l=(n=C[++i])[0],c=n[1],u=(n=C[Math.min(19,++i)])[0],h=n[1];return[t*(l+a*(u-o)/2+a*a*(u-2*l+o)/2),(e>0?f:-f)*(c+a*(h-s)/2+a*a*(h-2*c+s)/2)]}function O(t,e){return[t*Math.cos(e),e]}function D(t,e){var n,r=Math.cos(e),i=(n=y(r*Math.cos(t/=2)))?n/Math.sin(n):1;return[2*r*Math.sin(t)*i,Math.sin(e)*i]}function I(t,e){var n=D(t,e);return[(n[0]+t/f)/2,(n[1]+e)/2]}C.forEach((function(t){t[1]*=1.0144})),E.invert=function(t,e){var n=e/f,r=90*n,i=Math.min(18,Math.abs(r/5)),a=Math.max(0,Math.floor(i));do{var o=C[a][1],s=C[a+1][1],l=C[Math.min(19,a+2)][1],c=l-o,u=l-2*s+o,h=2*(Math.abs(n)-s)/c,d=u/c,g=h*(1-d*h*(1-2*d*h));if(g>=0||1===a){r=(e>=0?5:-5)*(g+i);var y,v=50;do{g=(i=Math.min(18,Math.abs(r)/5))-(a=Math.floor(i)),o=C[a][1],s=C[a+1][1],l=C[Math.min(19,a+2)][1],r-=(y=(e>=0?f:-f)*(s+g*(l-o)/2+g*g*(l-2*s+o)/2)-e)*m}while(Math.abs(y)>1e-12&&--v>0);break}}while(--a>=0);var _=C[a][0],b=C[a+1][0],x=C[Math.min(19,a+2)][0];return[t/(b+g*(x-_)/2+g*g*(x-2*b+_)/2),r*p]},(t.geo.robinson=function(){return v(E)}).raw=E,O.invert=function(t,e){return[t/Math.cos(e),e]},(t.geo.sinusoidal=function(){return v(O)}).raw=O,D.invert=function(t,e){if(!(t*t+4*e*e>d*d+h)){var n=t,r=e,i=25;do{var a,o=Math.sin(n),s=Math.sin(n/2),l=Math.cos(n/2),c=Math.sin(r),u=Math.cos(r),f=Math.sin(2*r),p=c*c,m=u*u,g=s*s,v=1-m*l*l,_=v?y(u*l)*Math.sqrt(a=1/v):a=0,b=2*_*u*s-t,x=_*c-e,w=a*(m*g+_*u*l*p),k=a*(.5*o*f-2*_*c*s),M=.25*a*(f*s-_*c*m*o),T=a*(p*l+_*g*u),S=k*M-T*w;if(!S)break;var A=(x*k-b*T)/S,L=(b*M-x*w)/S;n-=A,r-=L}while((Math.abs(A)>h||Math.abs(L)>h)&&--i>0);return[n,r]}},(t.geo.aitoff=function(){return v(D)}).raw=D,I.invert=function(t,e){var n=t,r=e,i=25;do{var a,o=Math.cos(r),s=Math.sin(r),l=Math.sin(2*r),c=s*s,u=o*o,d=Math.sin(n),p=Math.cos(n/2),m=Math.sin(n/2),g=m*m,v=1-u*p*p,_=v?y(o*p)*Math.sqrt(a=1/v):a=0,b=.5*(2*_*o*m+n/f)-t,x=.5*(_*s+r)-e,w=.5*a*(u*g+_*o*p*c)+.5/f,k=a*(d*l/4-_*s*m),M=.125*a*(l*m-_*s*u*d),T=.5*a*(c*p+_*g*o)+.5,S=k*M-T*w,A=(x*k-b*T)/S,L=(b*M-x*w)/S;n-=A,r-=L}while((Math.abs(A)>h||Math.abs(L)>h)&&--i>0);return[n,r]},(t.geo.winkel3=function(){return v(I)}).raw=I}},{}],864:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../lib\"),a=t(\"../../registry\"),o=Math.PI/180,s=180/Math.PI,l={cursor:\"pointer\"},c={cursor:\"auto\"};function u(t,e){return r.behavior.zoom().translate(e.translate()).scale(e.scale())}function h(t,e,n){var r=t.id,o=t.graphDiv,s=o.layout,l=s[r],c=o._fullLayout,u=c[r],h={},d={};function f(t,e){h[r+\".\"+t]=i.nestedProperty(l,t).get(),a.call(\"_storeDirectGUIEdit\",s,c._preGUI,h);var n=i.nestedProperty(u,t);n.get()!==e&&(n.set(e),i.nestedProperty(l,t).set(e),d[r+\".\"+t]=e)}n(f),f(\"projection.scale\",e.scale()/t.fitScale),f(\"fitbounds\",!1),o.emit(\"plotly_relayout\",d)}function d(t,e){var n=u(0,e);function i(n){var r=e.invert(t.midPt);n(\"center.lon\",r[0]),n(\"center.lat\",r[1])}return n.on(\"zoomstart\",(function(){r.select(this).style(l)})).on(\"zoom\",(function(){e.scale(r.event.scale).translate(r.event.translate),t.render();var n=e.invert(t.midPt);t.graphDiv.emit(\"plotly_relayouting\",{\"geo.projection.scale\":e.scale()/t.fitScale,\"geo.center.lon\":n[0],\"geo.center.lat\":n[1]})})).on(\"zoomend\",(function(){r.select(this).style(c),h(t,e,i)})),n}function f(t,e){var n,i,a,o,s,d,f,p,m,g=u(0,e);function y(t){return e.invert(t)}function v(n){var r=e.rotate(),i=e.invert(t.midPt);n(\"projection.rotation.lon\",-r[0]),n(\"center.lon\",i[0]),n(\"center.lat\",i[1])}return g.on(\"zoomstart\",(function(){r.select(this).style(l),n=r.mouse(this),i=e.rotate(),a=e.translate(),o=i,s=y(n)})).on(\"zoom\",(function(){if(d=r.mouse(this),function(t){var n=y(t);if(!n)return!0;var r=e(n);return Math.abs(r[0]-t[0])>2||Math.abs(r[1]-t[1])>2}(n))return g.scale(e.scale()),void g.translate(e.translate());e.scale(r.event.scale),e.translate([a[0],r.event.translate[1]]),s?y(d)&&(p=y(d),e.rotate(f=[o[0]+(p[0]-s[0]),i[1],i[2]]),o=f):s=y(n=d),m=!0,t.render();var l=e.rotate(),c=e.invert(t.midPt);t.graphDiv.emit(\"plotly_relayouting\",{\"geo.projection.scale\":e.scale()/t.fitScale,\"geo.center.lon\":c[0],\"geo.center.lat\":c[1],\"geo.projection.rotation.lon\":-l[0]})})).on(\"zoomend\",(function(){r.select(this).style(c),m&&h(t,e,v)})),g}function p(t,e){var n,i={r:e.rotate(),k:e.scale()},a=u(0,e),o=function(t){for(var e=0,n=arguments.length,i=[];++e<n;)i.push(arguments[e]);var a=r.dispatch.apply(null,i);return a.of=function(e,n){return function(i){var o;try{o=i.sourceEvent=r.event,i.target=t,r.event=i,a[i.type].apply(e,n)}finally{r.event=o}}},a}(a,\"zoomstart\",\"zoom\",\"zoomend\"),s=0,d=a.on;function f(t){s++||t({type:\"zoomstart\"})}function p(t){t({type:\"zoom\"})}function b(t){--s||t({type:\"zoomend\"})}function x(t){var n=e.rotate();t(\"projection.rotation.lon\",-n[0]),t(\"projection.rotation.lat\",-n[1])}return a.on(\"zoomstart\",(function(){r.select(this).style(l);var t=r.mouse(this),s=e.rotate(),c=s,u=e.translate(),h=g(s);n=m(e,t),d.call(a,\"zoom\",(function(){var a=r.mouse(this);if(e.scale(i.k=r.event.scale),n){if(m(e,a)){e.rotate(s).translate(u);var l=m(e,a),d=v(n,l),f=k(y(h,d)),g=i.r=_(f,n,c);isFinite(g[0])&&isFinite(g[1])&&isFinite(g[2])||(g=c),e.rotate(g),c=g}}else n=m(e,t=a);p(o.of(this,arguments))})),f(o.of(this,arguments))})).on(\"zoomend\",(function(){r.select(this).style(c),d.call(a,\"zoom\",null),b(o.of(this,arguments)),h(t,e,x)})).on(\"zoom.redraw\",(function(){t.render();var n=e.rotate();t.graphDiv.emit(\"plotly_relayouting\",{\"geo.projection.scale\":e.scale()/t.fitScale,\"geo.projection.rotation.lon\":-n[0],\"geo.projection.rotation.lat\":-n[1]})})),r.rebind(a,o,\"on\")}function m(t,e){var n=t.invert(e);return n&&isFinite(n[0])&&isFinite(n[1])&&function(t){var e=t[0]*o,n=t[1]*o,r=Math.cos(n);return[r*Math.cos(e),r*Math.sin(e),Math.sin(n)]}(n)}function g(t){var e=.5*t[0]*o,n=.5*t[1]*o,r=.5*t[2]*o,i=Math.sin(e),a=Math.cos(e),s=Math.sin(n),l=Math.cos(n),c=Math.sin(r),u=Math.cos(r);return[a*l*u+i*s*c,i*l*u-a*s*c,a*s*u+i*l*c,a*l*c-i*s*u]}function y(t,e){var n=t[0],r=t[1],i=t[2],a=t[3],o=e[0],s=e[1],l=e[2],c=e[3];return[n*o-r*s-i*l-a*c,n*s+r*o+i*c-a*l,n*l-r*c+i*o+a*s,n*c+r*l-i*s+a*o]}function v(t,e){if(t&&e){var n=function(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}(t,e),r=Math.sqrt(M(n,n)),i=.5*Math.acos(Math.max(-1,Math.min(1,M(t,e)))),a=Math.sin(i)/r;return r&&[Math.cos(i),n[2]*a,-n[1]*a,n[0]*a]}}function _(t,e,n){var r=w(e,2,t[0]);r=w(r,1,t[1]),r=w(r,0,t[2]-n[2]);var i,a,o=e[0],l=e[1],c=e[2],u=r[0],h=r[1],d=r[2],f=Math.atan2(l,o)*s,p=Math.sqrt(o*o+l*l);Math.abs(h)>p?(a=(h>0?90:-90)-f,i=0):(a=Math.asin(h/p)*s-f,i=Math.sqrt(p*p-h*h));var m=180-a-2*f,g=(Math.atan2(d,u)-Math.atan2(c,i))*s,y=(Math.atan2(d,u)-Math.atan2(c,-i))*s;return b(n[0],n[1],a,g)<=b(n[0],n[1],m,y)?[a,g,n[2]]:[m,y,n[2]]}function b(t,e,n,r){var i=x(n-t),a=x(r-e);return Math.sqrt(i*i+a*a)}function x(t){return(t%360+540)%360-180}function w(t,e,n){var r=n*o,i=t.slice(),a=0===e?1:0,s=2===e?1:2,l=Math.cos(r),c=Math.sin(r);return i[a]=t[a]*l-t[s]*c,i[s]=t[s]*l+t[a]*c,i}function k(t){return[Math.atan2(2*(t[0]*t[1]+t[2]*t[3]),1-2*(t[1]*t[1]+t[2]*t[2]))*s,Math.asin(Math.max(-1,Math.min(1,2*(t[0]*t[2]-t[3]*t[1]))))*s,Math.atan2(2*(t[0]*t[3]+t[1]*t[2]),1-2*(t[2]*t[2]+t[3]*t[3]))*s]}function M(t,e){for(var n=0,r=0,i=t.length;r<i;++r)n+=t[r]*e[r];return n}e.exports=function(t,e){return(e._isScoped?d:e._isClipped?p:f)(t,t.projection)}},{\"../../lib\":778,\"../../registry\":911,d3:169}],865:[function(t,e,n){\"use strict\";var r=t(\"../registry\"),i=t(\"./cartesian/constants\").SUBPLOT_PATTERN;n.getSubplotCalcData=function(t,e,n){var i=r.subplotsRegistry[e];if(!i)return[];for(var a=i.attr,o=[],s=0;s<t.length;s++){var l=t[s];l[0].trace[a]===n&&o.push(l)}return o},n.getModuleCalcData=function(t,e){var n,i=[],a=[];if(!(n=\"string\"==typeof e?r.getModule(e).plot:\"function\"==typeof e?e:e.plot))return[i,t];for(var o=0;o<t.length;o++){var s=t[o],l=s[0].trace;!0===l.visible&&0!==l._length&&(l._module.plot===n?i.push(s):a.push(s))}return[i,a]},n.getSubplotData=function(t,e,n){if(!r.subplotsRegistry[e])return[];var a,o,s,l=r.subplotsRegistry[e].attr,c=[];if(\"gl2d\"===e){var u=n.match(i);o=\"x\"+u[1],s=\"y\"+u[2]}for(var h=0;h<t.length;h++)a=t[h],\"gl2d\"===e&&r.traceIs(a,\"gl2d\")?a[l[0]]===o&&a[l[1]]===s&&c.push(a):a[l]===n&&c.push(a);return c}},{\"../registry\":911,\"./cartesian/constants\":834}],866:[function(t,e,n){\"use strict\";var r=t(\"mouse-change\"),i=t(\"mouse-wheel\"),a=t(\"mouse-event-offset\"),o=t(\"../cartesian/constants\"),s=t(\"has-passive-events\");function l(t,e){this.element=t,this.plot=e,this.mouseListener=null,this.wheelListener=null,this.lastInputTime=Date.now(),this.lastPos=[0,0],this.boxEnabled=!1,this.boxInited=!1,this.boxStart=[0,0],this.boxEnd=[0,0],this.dragStart=[0,0]}e.exports=function(t){var e=t.mouseContainer,n=t.glplot,c=new l(e,n);function u(){t.xaxis.autorange=!1,t.yaxis.autorange=!1}function h(e,r,i){var a,s,l=t.calcDataBox(),h=n.viewBox,d=c.lastPos[0],f=c.lastPos[1],p=o.MINDRAG*n.pixelRatio,m=o.MINZOOM*n.pixelRatio;function g(e,n,r){var i=Math.min(n,r),a=Math.max(n,r);i!==a?(l[e]=i,l[e+2]=a,c.dataBox=l,t.setRanges(l)):(t.selectBox.selectBox=[0,0,1,1],t.glplot.setDirty())}switch(r*=n.pixelRatio,i=h[3]-h[1]-(i*=n.pixelRatio),t.fullLayout.dragmode){case\"zoom\":if(e){var y=r/(h[2]-h[0])*(l[2]-l[0])+l[0],v=i/(h[3]-h[1])*(l[3]-l[1])+l[1];c.boxInited||(c.boxStart[0]=y,c.boxStart[1]=v,c.dragStart[0]=r,c.dragStart[1]=i),c.boxEnd[0]=y,c.boxEnd[1]=v,c.boxInited=!0,c.boxEnabled||c.boxStart[0]===c.boxEnd[0]&&c.boxStart[1]===c.boxEnd[1]||(c.boxEnabled=!0);var _=Math.abs(c.dragStart[0]-r)<m,b=Math.abs(c.dragStart[1]-i)<m;if(!function(){for(var e=t.graphDiv._fullLayout._axisConstraintGroups,n=t.xaxis._id,r=t.yaxis._id,i=0;i<e.length;i++)if(-1!==e[i][n]){if(-1!==e[i][r])return!0;break}return!1}()||_&&b)_&&(c.boxEnd[0]=c.boxStart[0]),b&&(c.boxEnd[1]=c.boxStart[1]);else{a=c.boxEnd[0]-c.boxStart[0],s=c.boxEnd[1]-c.boxStart[1];var x=(l[3]-l[1])/(l[2]-l[0]);Math.abs(a*x)>Math.abs(s)?(c.boxEnd[1]=c.boxStart[1]+Math.abs(a)*x*(s>=0?1:-1),c.boxEnd[1]<l[1]?(c.boxEnd[1]=l[1],c.boxEnd[0]=c.boxStart[0]+(l[1]-c.boxStart[1])/Math.abs(x)):c.boxEnd[1]>l[3]&&(c.boxEnd[1]=l[3],c.boxEnd[0]=c.boxStart[0]+(l[3]-c.boxStart[1])/Math.abs(x))):(c.boxEnd[0]=c.boxStart[0]+Math.abs(s)/x*(a>=0?1:-1),c.boxEnd[0]<l[0]?(c.boxEnd[0]=l[0],c.boxEnd[1]=c.boxStart[1]+(l[0]-c.boxStart[0])*Math.abs(x)):c.boxEnd[0]>l[2]&&(c.boxEnd[0]=l[2],c.boxEnd[1]=c.boxStart[1]+(l[2]-c.boxStart[0])*Math.abs(x)))}}else c.boxEnabled?(s=c.boxStart[1]!==c.boxEnd[1],(a=c.boxStart[0]!==c.boxEnd[0])||s?(a&&(g(0,c.boxStart[0],c.boxEnd[0]),t.xaxis.autorange=!1),s&&(g(1,c.boxStart[1],c.boxEnd[1]),t.yaxis.autorange=!1),t.relayoutCallback()):t.glplot.setDirty(),c.boxEnabled=!1,c.boxInited=!1):c.boxInited&&(c.boxInited=!1);break;case\"pan\":c.boxEnabled=!1,c.boxInited=!1,e?(c.panning||(c.dragStart[0]=r,c.dragStart[1]=i),Math.abs(c.dragStart[0]-r)<p&&(r=c.dragStart[0]),Math.abs(c.dragStart[1]-i)<p&&(i=c.dragStart[1]),s=(f-i)*(l[3]-l[1])/(n.viewBox[3]-n.viewBox[1]),l[0]+=a=(d-r)*(l[2]-l[0])/(n.viewBox[2]-n.viewBox[0]),l[2]+=a,l[1]+=s,l[3]+=s,t.setRanges(l),c.panning=!0,c.lastInputTime=Date.now(),u(),t.cameraChanged(),t.handleAnnotations()):c.panning&&(c.panning=!1,t.relayoutCallback())}c.lastPos[0]=r,c.lastPos[1]=i}return c.mouseListener=r(e,h),e.addEventListener(\"touchstart\",(function(t){var n=a(t.changedTouches[0],e);h(0,n[0],n[1]),h(1,n[0],n[1]),t.preventDefault()}),!!s&&{passive:!1}),e.addEventListener(\"touchmove\",(function(t){t.preventDefault();var n=a(t.changedTouches[0],e);h(1,n[0],n[1]),t.preventDefault()}),!!s&&{passive:!1}),e.addEventListener(\"touchend\",(function(t){h(0,c.lastPos[0],c.lastPos[1]),t.preventDefault()}),!!s&&{passive:!1}),c.wheelListener=i(e,(function(e,r){if(!t.scrollZoom)return!1;var i=t.calcDataBox(),a=n.viewBox,o=c.lastPos[0],s=c.lastPos[1],l=Math.exp(5*r/(a[3]-a[1])),h=o/(a[2]-a[0])*(i[2]-i[0])+i[0],d=s/(a[3]-a[1])*(i[3]-i[1])+i[1];return i[0]=(i[0]-h)*l+h,i[2]=(i[2]-h)*l+h,i[1]=(i[1]-d)*l+d,i[3]=(i[3]-d)*l+d,t.setRanges(i),c.lastInputTime=Date.now(),u(),t.cameraChanged(),t.handleAnnotations(),t.relayoutCallback(),!0}),!0),c}},{\"../cartesian/constants\":834,\"has-passive-events\":441,\"mouse-change\":483,\"mouse-event-offset\":484,\"mouse-wheel\":486}],867:[function(t,e,n){\"use strict\";var r=t(\"../cartesian/axes\"),i=t(\"../../lib/str2rgbarray\");function a(t){this.scene=t,this.gl=t.gl,this.pixelRatio=t.pixelRatio,this.screenBox=[0,0,1,1],this.viewBox=[0,0,1,1],this.dataBox=[-1,-1,1,1],this.borderLineEnable=[!1,!1,!1,!1],this.borderLineWidth=[1,1,1,1],this.borderLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.ticks=[[],[]],this.tickEnable=[!0,!0,!1,!1],this.tickPad=[15,15,15,15],this.tickAngle=[0,0,0,0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickMarkLength=[0,0,0,0],this.tickMarkWidth=[0,0,0,0],this.tickMarkColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labels=[\"x\",\"y\"],this.labelEnable=[!0,!0,!1,!1],this.labelAngle=[0,Math.PI/2,0,3*Math.PI/2],this.labelPad=[15,15,15,15],this.labelSize=[12,12],this.labelFont=[\"sans-serif\",\"sans-serif\"],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.title=\"\",this.titleEnable=!0,this.titleCenter=[0,0,0,0],this.titleAngle=0,this.titleColor=[0,0,0,1],this.titleFont=\"sans-serif\",this.titleSize=18,this.gridLineEnable=[!0,!0],this.gridLineColor=[[0,0,0,.5],[0,0,0,.5]],this.gridLineWidth=[1,1],this.zeroLineEnable=[!0,!0],this.zeroLineWidth=[1,1],this.zeroLineColor=[[0,0,0,1],[0,0,0,1]],this.borderColor=[0,0,0,0],this.backgroundColor=[0,0,0,0],this.static=this.scene.staticPlot}var o=a.prototype,s=[\"xaxis\",\"yaxis\"];o.merge=function(t){var e,n,r,a,o,l,c,u,h,d,f;for(this.titleEnable=!1,this.backgroundColor=i(t.plot_bgcolor),d=0;d<2;++d){var p=(e=s[d]).charAt(0);for(r=(n=t[this.scene[e]._name]).title.text===this.scene.fullLayout._dfltTitle[p]?\"\":n.title.text,f=0;f<=2;f+=2)this.labelEnable[d+f]=!1,this.labels[d+f]=r,this.labelColor[d+f]=i(n.title.font.color),this.labelFont[d+f]=n.title.font.family,this.labelSize[d+f]=n.title.font.size,this.labelPad[d+f]=this.getLabelPad(e,n),this.tickEnable[d+f]=!1,this.tickColor[d+f]=i((n.tickfont||{}).color),this.tickAngle[d+f]=\"auto\"===n.tickangle?0:Math.PI*-n.tickangle/180,this.tickPad[d+f]=this.getTickPad(n),this.tickMarkLength[d+f]=0,this.tickMarkWidth[d+f]=n.tickwidth||0,this.tickMarkColor[d+f]=i(n.tickcolor),this.borderLineEnable[d+f]=!1,this.borderLineColor[d+f]=i(n.linecolor),this.borderLineWidth[d+f]=n.linewidth||0;c=this.hasSharedAxis(n),o=this.hasAxisInDfltPos(e,n)&&!c,l=this.hasAxisInAltrPos(e,n)&&!c,a=n.mirror||!1,u=c?-1!==String(a).indexOf(\"all\"):!!a,h=c?\"allticks\"===a:-1!==String(a).indexOf(\"ticks\"),o?this.labelEnable[d]=!0:l&&(this.labelEnable[d+2]=!0),o?this.tickEnable[d]=n.showticklabels:l&&(this.tickEnable[d+2]=n.showticklabels),(o||u)&&(this.borderLineEnable[d]=n.showline),(l||u)&&(this.borderLineEnable[d+2]=n.showline),(o||h)&&(this.tickMarkLength[d]=this.getTickMarkLength(n)),(l||h)&&(this.tickMarkLength[d+2]=this.getTickMarkLength(n)),this.gridLineEnable[d]=n.showgrid,this.gridLineColor[d]=i(n.gridcolor),this.gridLineWidth[d]=n.gridwidth,this.zeroLineEnable[d]=n.zeroline,this.zeroLineColor[d]=i(n.zerolinecolor),this.zeroLineWidth[d]=n.zerolinewidth}},o.hasSharedAxis=function(t){var e=this.scene;return 0!==r.findSubplotsWithAxis(e.fullLayout._subplots.gl2d,t).indexOf(e.id)},o.hasAxisInDfltPos=function(t,e){var n=e.side;return\"xaxis\"===t?\"bottom\"===n:\"yaxis\"===t?\"left\"===n:void 0},o.hasAxisInAltrPos=function(t,e){var n=e.side;return\"xaxis\"===t?\"top\"===n:\"yaxis\"===t?\"right\"===n:void 0},o.getLabelPad=function(t,e){var n=1.5,r=e.title.font.size,i=e.showticklabels;return\"xaxis\"===t?\"top\"===e.side?r*(n+(i?1:0))-10:r*(n+(i?.5:0))-10:\"yaxis\"===t?\"right\"===e.side?10+r*(n+(i?1:.5)):10+r*(n+(i?.5:0)):void 0},o.getTickPad=function(t){return\"outside\"===t.ticks?10+t.ticklen:15},o.getTickMarkLength=function(t){if(!t.ticks)return 0;var e=t.ticklen;return\"inside\"===t.ticks?-e:e},e.exports=function(t){return new a(t)}},{\"../../lib/str2rgbarray\":802,\"../cartesian/axes\":828}],868:[function(t,e,n){\"use strict\";var r=t(\"../../plot_api/edit_types\").overrideAll,i=t(\"./scene2d\"),a=t(\"../layout_attributes\"),o=t(\"../../constants/xmlns_namespaces\"),s=t(\"../cartesian/constants\"),l=t(\"../cartesian\"),c=t(\"../../components/fx/layout_attributes\"),u=t(\"../get_data\").getSubplotData;n.name=\"gl2d\",n.attr=[\"xaxis\",\"yaxis\"],n.idRoot=[\"x\",\"y\"],n.idRegex=s.idRegex,n.attrRegex=s.attrRegex,n.attributes=t(\"../cartesian/attributes\"),n.supplyLayoutDefaults=function(t,e,n){e._has(\"cartesian\")||l.supplyLayoutDefaults(t,e,n)},n.layoutAttrOverrides=r(l.layoutAttributes,\"plot\",\"from-root\"),n.baseLayoutAttrOverrides=r({plot_bgcolor:a.plot_bgcolor,hoverlabel:c.hoverlabel},\"plot\",\"nested\"),n.plot=function(t){for(var e=t._fullLayout,n=t._fullData,r=e._subplots.gl2d,a=0;a<r.length;a++){var o=r[a],s=e._plots[o],l=u(n,\"gl2d\",o),c=s._scene2d;void 0===c&&(c=new i({id:o,graphDiv:t,container:t.querySelector(\".gl-container\"),staticPlot:t._context.staticPlot,plotGlPixelRatio:t._context.plotGlPixelRatio},e),s._scene2d=c),c.plot(l,t.calcdata,e,t.layout)}},n.clean=function(t,e,n,r){for(var i=r._subplots.gl2d||[],a=0;a<i.length;a++){var o=i[a],s=r._plots[o];s._scene2d&&0===u(t,\"gl2d\",o).length&&(s._scene2d.destroy(),delete r._plots[o])}l.clean.apply(this,arguments)},n.drawFramework=function(t){t._context.staticPlot||l.drawFramework(t)},n.toSVG=function(t){for(var e=t._fullLayout,n=e._subplots.gl2d,r=0;r<n.length;r++){var i=e._plots[n[r]]._scene2d,a=i.toImage(\"png\");e._glimages.append(\"svg:image\").attr({xmlns:o.svg,\"xlink:href\":a,x:0,y:0,width:\"100%\",height:\"100%\",preserveAspectRatio:\"none\"}),i.destroy()}},n.updateFx=function(t){for(var e=t._fullLayout,n=e._subplots.gl2d,r=0;r<n.length;r++)e._plots[n[r]]._scene2d.updateFx(e.dragmode)}},{\"../../components/fx/layout_attributes\":684,\"../../constants/xmlns_namespaces\":754,\"../../plot_api/edit_types\":810,\"../cartesian\":841,\"../cartesian/attributes\":826,\"../cartesian/constants\":834,\"../get_data\":865,\"../layout_attributes\":882,\"./scene2d\":869}],869:[function(t,e,n){\"use strict\";var r,i,a=t(\"../../registry\"),o=t(\"../../plots/cartesian/axes\"),s=t(\"../../components/fx\"),l=t(\"gl-plot2d\"),c=t(\"gl-spikes2d\"),u=t(\"gl-select-box\"),h=t(\"webgl-context\"),d=t(\"./convert\"),f=t(\"./camera\"),p=t(\"../../lib/show_no_webgl_msg\"),m=t(\"../cartesian/constraints\"),g=m.enforce,y=m.clean,v=t(\"../cartesian/autorange\").doAutoRange,_=t(\"../../components/dragelement/helpers\"),b=_.drawMode,x=_.selectMode,w=[\"xaxis\",\"yaxis\"],k=t(\"../cartesian/constants\").SUBPLOT_PATTERN;function M(t,e){this.container=t.container,this.graphDiv=t.graphDiv,this.pixelRatio=t.plotGlPixelRatio||window.devicePixelRatio,this.id=t.id,this.staticPlot=!!t.staticPlot,this.scrollZoom=this.graphDiv._context._scrollZoom.cartesian,this.fullData=null,this.updateRefs(e),this.makeFramework(),this.stopped||(this.glplotOptions=d(this),this.glplotOptions.merge(e),this.glplot=l(this.glplotOptions),this.camera=f(this),this.traces={},this.spikes=c(this.glplot),this.selectBox=u(this.glplot,{innerFill:!1,outerFill:!0}),this.lastButtonState=0,this.pickResult=null,this.isMouseOver=!0,this.stopped=!1,this.redraw=this.draw.bind(this),this.redraw())}e.exports=M;var T=M.prototype;T.makeFramework=function(){if(this.staticPlot){if(!(i||(r=document.createElement(\"canvas\"),i=h({canvas:r,preserveDrawingBuffer:!1,premultipliedAlpha:!0,antialias:!0}))))throw new Error(\"Error creating static canvas/context for image server\");this.canvas=r,this.gl=i}else{var t=this.container.querySelector(\".gl-canvas-focus\"),e=h({canvas:t,preserveDrawingBuffer:!0,premultipliedAlpha:!0});if(!e)return p(this),void(this.stopped=!0);this.canvas=t,this.gl=e}var n=this.canvas;n.style.width=\"100%\",n.style.height=\"100%\",n.style.position=\"absolute\",n.style.top=\"0px\",n.style.left=\"0px\",n.style[\"pointer-events\"]=\"none\",this.updateSize(n);var a=this.svgContainer=document.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");a.style.position=\"absolute\",a.style.top=a.style.left=\"0px\",a.style.width=a.style.height=\"100%\",a.style[\"z-index\"]=20,a.style[\"pointer-events\"]=\"none\";var o=this.mouseContainer=document.createElement(\"div\");o.style.position=\"absolute\",o.style[\"pointer-events\"]=\"auto\",this.pickCanvas=this.container.querySelector(\".gl-canvas-pick\");var s=this.container;s.appendChild(a),s.appendChild(o);var l=this;o.addEventListener(\"mouseout\",(function(){l.isMouseOver=!1,l.unhover()})),o.addEventListener(\"mouseover\",(function(){l.isMouseOver=!0}))},T.toImage=function(t){t||(t=\"png\"),this.stopped=!0,this.staticPlot&&this.container.appendChild(r),this.updateSize(this.canvas);var e=this.glplot.gl,n=e.drawingBufferWidth,i=e.drawingBufferHeight;e.clearColor(1,1,1,0),e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT),this.glplot.setDirty(),this.glplot.draw(),e.bindFramebuffer(e.FRAMEBUFFER,null);var a=new Uint8Array(n*i*4);e.readPixels(0,0,n,i,e.RGBA,e.UNSIGNED_BYTE,a);for(var o=0,s=i-1;o<s;++o,--s)for(var l=0;l<n;++l)for(var c=0;c<4;++c){var u=a[4*(n*o+l)+c];a[4*(n*o+l)+c]=a[4*(n*s+l)+c],a[4*(n*s+l)+c]=u}var h=document.createElement(\"canvas\");h.width=n,h.height=i;var d,f=h.getContext(\"2d\"),p=f.createImageData(n,i);switch(p.data.set(a),f.putImageData(p,0,0),t){case\"jpeg\":d=h.toDataURL(\"image/jpeg\");break;case\"webp\":d=h.toDataURL(\"image/webp\");break;default:d=h.toDataURL(\"image/png\")}return this.staticPlot&&this.container.removeChild(r),d},T.updateSize=function(t){t||(t=this.canvas);var e=this.pixelRatio,n=this.fullLayout,r=n.height,i=0|Math.ceil(e*n.width),a=0|Math.ceil(e*r);return t.width===i&&t.height===a||(t.width=i,t.height=a),t},T.computeTickMarks=function(){this.xaxis.setScale(),this.yaxis.setScale();for(var t=[o.calcTicks(this.xaxis),o.calcTicks(this.yaxis)],e=0;e<2;++e)for(var n=0;n<t[e].length;++n)t[e][n].text=t[e][n].text+\"\";return t},T.updateRefs=function(t){this.fullLayout=t;var e=this.id.match(k),n=\"yaxis\"+e[2];this.xaxis=this.fullLayout[\"xaxis\"+e[1]],this.yaxis=this.fullLayout[n]},T.relayoutCallback=function(){var t=this.graphDiv,e=this.xaxis,n=this.yaxis,r=t.layout,i={},o=i[e._name+\".range\"]=e.range.slice(),s=i[n._name+\".range\"]=n.range.slice();i[e._name+\".autorange\"]=e.autorange,i[n._name+\".autorange\"]=n.autorange,a.call(\"_storeDirectGUIEdit\",t.layout,t._fullLayout._preGUI,i);var l=r[e._name];l.range=o,l.autorange=e.autorange;var c=r[n._name];c.range=s,c.autorange=n.autorange,i.lastInputTime=this.camera.lastInputTime,t.emit(\"plotly_relayout\",i)},T.cameraChanged=function(){var t=this.camera;this.glplot.setDataBox(this.calcDataBox());var e=this.computeTickMarks();(function(t,e){for(var n=0;n<2;++n){var r=t[n],i=e[n];if(r.length!==i.length)return!0;for(var a=0;a<r.length;++a)if(r[a].x!==i[a].x)return!0}return!1})(e,this.glplotOptions.ticks)&&(this.glplotOptions.ticks=e,this.glplotOptions.dataBox=t.dataBox,this.glplot.update(this.glplotOptions),this.handleAnnotations())},T.handleAnnotations=function(){for(var t=this.graphDiv,e=this.fullLayout.annotations,n=0;n<e.length;n++){var r=e[n];r.xref===this.xaxis._id&&r.yref===this.yaxis._id&&a.getComponentMethod(\"annotations\",\"drawOne\")(t,n)}},T.destroy=function(){if(this.glplot){var t=this.traces;t&&Object.keys(t).map((function(e){t[e].dispose(),delete t[e]})),this.glplot.dispose(),this.container.removeChild(this.svgContainer),this.container.removeChild(this.mouseContainer),this.fullData=null,this.glplot=null,this.stopped=!0,this.camera.mouseListener.enabled=!1,this.mouseContainer.removeEventListener(\"wheel\",this.camera.wheelListener),this.camera=null}},T.plot=function(t,e,n){var r=this.glplot;this.updateRefs(n),this.xaxis.clearCalc(),this.yaxis.clearCalc(),this.updateTraces(t,e),this.updateFx(n.dragmode);var i=n.width,a=n.height;this.updateSize(this.canvas);var o=this.glplotOptions;o.merge(n),o.screenBox=[0,0,i,a];var s={_fullLayout:{_axisConstraintGroups:this.graphDiv._fullLayout._axisConstraintGroups,xaxis:this.xaxis,yaxis:this.yaxis}};y(s,this.xaxis),y(s,this.yaxis);var l,c,u=n._size,h=this.xaxis.domain,d=this.yaxis.domain;for(o.viewBox=[u.l+h[0]*u.w,u.b+d[0]*u.h,i-u.r-(1-h[1])*u.w,a-u.t-(1-d[1])*u.h],this.mouseContainer.style.width=u.w*(h[1]-h[0])+\"px\",this.mouseContainer.style.height=u.h*(d[1]-d[0])+\"px\",this.mouseContainer.height=u.h*(d[1]-d[0]),this.mouseContainer.style.left=u.l+h[0]*u.w+\"px\",this.mouseContainer.style.top=u.t+(1-d[1])*u.h+\"px\",c=0;c<2;++c)(l=this[w[c]])._length=o.viewBox[c+2]-o.viewBox[c],v(this.graphDiv,l),l.setScale();g(s),o.ticks=this.computeTickMarks(),o.dataBox=this.calcDataBox(),o.merge(n),r.update(o),this.glplot.draw()},T.calcDataBox=function(){var t=this.xaxis,e=this.yaxis,n=t.range,r=e.range,i=t.r2l,a=e.r2l;return[i(n[0]),a(r[0]),i(n[1]),a(r[1])]},T.setRanges=function(t){var e=this.xaxis,n=this.yaxis,r=e.l2r,i=n.l2r;e.range=[r(t[0]),r(t[2])],n.range=[i(t[1]),i(t[3])]},T.updateTraces=function(t,e){var n,r,i,a=Object.keys(this.traces);this.fullData=t;t:for(n=0;n<a.length;n++){var o=a[n],s=this.traces[o];for(r=0;r<t.length;r++)if((i=t[r]).uid===o&&i.type===s.type)continue t;s.dispose(),delete this.traces[o]}for(n=0;n<t.length;n++){var l=e[n],c=this.traces[(i=t[n]).uid];c?c.update(i,l):(c=i._module.plot(this,i,l),this.traces[i.uid]=c)}this.glplot.objects.sort((function(t,e){return t._trace.index-e._trace.index}))},T.updateFx=function(t){x(t)||b(t)?(this.pickCanvas.style[\"pointer-events\"]=\"none\",this.mouseContainer.style[\"pointer-events\"]=\"none\"):(this.pickCanvas.style[\"pointer-events\"]=\"auto\",this.mouseContainer.style[\"pointer-events\"]=\"auto\"),this.mouseContainer.style.cursor=\"pan\"===t?\"move\":\"zoom\"===t?\"crosshair\":null},T.emitPointAction=function(t,e){for(var n,r=t.trace.uid,i=t.pointIndex,a=0;a<this.fullData.length;a++)this.fullData[a].uid===r&&(n=this.fullData[a]);var o={x:t.traceCoord[0],y:t.traceCoord[1],curveNumber:n.index,pointNumber:i,data:n._input,fullData:this.fullData,xaxis:this.xaxis,yaxis:this.yaxis};s.appendArrayPointValue(o,n,i),this.graphDiv.emit(e,{points:[o]})},T.draw=function(){if(!this.stopped){requestAnimationFrame(this.redraw);var t=this.glplot,e=this.camera,n=e.mouseListener,r=1===this.lastButtonState&&0===n.buttons,i=this.fullLayout;this.lastButtonState=n.buttons,this.cameraChanged();var a,o=n.x*t.pixelRatio,l=this.canvas.height-t.pixelRatio*n.y;if(e.boxEnabled&&\"zoom\"===i.dragmode){this.selectBox.enabled=!0;for(var c=this.selectBox.selectBox=[Math.min(e.boxStart[0],e.boxEnd[0]),Math.min(e.boxStart[1],e.boxEnd[1]),Math.max(e.boxStart[0],e.boxEnd[0]),Math.max(e.boxStart[1],e.boxEnd[1])],u=0;u<2;u++)e.boxStart[u]===e.boxEnd[u]&&(c[u]=t.dataBox[u],c[u+2]=t.dataBox[u+2]);t.setDirty()}else if(!e.panning&&this.isMouseOver){this.selectBox.enabled=!1;var h=i._size,d=(a=t.pick(o/t.pixelRatio+h.l+this.xaxis.domain[0]*h.w,l/t.pixelRatio-(h.t+(1-this.yaxis.domain[1])*h.h)))&&a.object._trace.handlePick(a);if(d&&r&&this.emitPointAction(d,\"plotly_click\"),a&&\"skip\"!==a.object._trace.hoverinfo&&i.hovermode&&d&&(!this.lastPickResult||this.lastPickResult.traceUid!==d.trace.uid||this.lastPickResult.dataCoord[0]!==d.dataCoord[0]||this.lastPickResult.dataCoord[1]!==d.dataCoord[1])){var f=d;this.lastPickResult={traceUid:d.trace?d.trace.uid:null,dataCoord:d.dataCoord.slice()},this.spikes.update({center:a.dataCoord}),f.screenCoord=[((t.viewBox[2]-t.viewBox[0])*(a.dataCoord[0]-t.dataBox[0])/(t.dataBox[2]-t.dataBox[0])+t.viewBox[0])/t.pixelRatio,(this.canvas.height-(t.viewBox[3]-t.viewBox[1])*(a.dataCoord[1]-t.dataBox[1])/(t.dataBox[3]-t.dataBox[1])-t.viewBox[1])/t.pixelRatio],this.emitPointAction(d,\"plotly_hover\");var p=this.fullData[f.trace.index]||{},m=f.pointIndex,g=s.castHoverinfo(p,i,m);if(g&&\"all\"!==g){var y=g.split(\"+\");-1===y.indexOf(\"x\")&&(f.traceCoord[0]=void 0),-1===y.indexOf(\"y\")&&(f.traceCoord[1]=void 0),-1===y.indexOf(\"z\")&&(f.traceCoord[2]=void 0),-1===y.indexOf(\"text\")&&(f.textLabel=void 0),-1===y.indexOf(\"name\")&&(f.name=void 0)}s.loneHover({x:f.screenCoord[0],y:f.screenCoord[1],xLabel:this.hoverFormatter(\"xaxis\",f.traceCoord[0]),yLabel:this.hoverFormatter(\"yaxis\",f.traceCoord[1]),zLabel:f.traceCoord[2],text:f.textLabel,name:f.name,color:s.castHoverOption(p,m,\"bgcolor\")||f.color,borderColor:s.castHoverOption(p,m,\"bordercolor\"),fontFamily:s.castHoverOption(p,m,\"font.family\"),fontSize:s.castHoverOption(p,m,\"font.size\"),fontColor:s.castHoverOption(p,m,\"font.color\"),nameLength:s.castHoverOption(p,m,\"namelength\"),textAlign:s.castHoverOption(p,m,\"align\")},{container:this.svgContainer,gd:this.graphDiv})}}a||this.unhover(),t.draw()}},T.unhover=function(){this.lastPickResult&&(this.spikes.update({}),this.lastPickResult=null,this.graphDiv.emit(\"plotly_unhover\"),s.loneUnhover(this.svgContainer))},T.hoverFormatter=function(t,e){if(void 0!==e){var n=this[t];return o.tickText(n,n.c2l(e),\"hover\").text}}},{\"../../components/dragelement/helpers\":661,\"../../components/fx\":683,\"../../lib/show_no_webgl_msg\":800,\"../../plots/cartesian/axes\":828,\"../../registry\":911,\"../cartesian/autorange\":827,\"../cartesian/constants\":834,\"../cartesian/constraints\":835,\"./camera\":866,\"./convert\":867,\"gl-plot2d\":317,\"gl-select-box\":333,\"gl-spikes2d\":342,\"webgl-context\":606}],870:[function(t,e,n){\"use strict\";var r=t(\"../../plot_api/edit_types\").overrideAll,i=t(\"../../components/fx/layout_attributes\"),a=t(\"./scene\"),o=t(\"../get_data\").getSubplotData,s=t(\"../../lib\"),l=t(\"../../constants/xmlns_namespaces\"),c=\"gl3d\",u=\"scene\";n.name=c,n.attr=u,n.idRoot=u,n.idRegex=n.attrRegex=s.counterRegex(\"scene\"),n.attributes=t(\"./layout/attributes\"),n.layoutAttributes=t(\"./layout/layout_attributes\"),n.baseLayoutAttrOverrides=r({hoverlabel:i.hoverlabel},\"plot\",\"nested\"),n.supplyLayoutDefaults=t(\"./layout/defaults\"),n.plot=function(t){for(var e=t._fullLayout,n=t._fullData,r=e._subplots.gl3d,i=0;i<r.length;i++){var s=r[i],l=o(n,c,s),u=e[s],h=u.camera,d=u._scene;d||(d=new a({id:s,graphDiv:t,container:t.querySelector(\".gl-container\"),staticPlot:t._context.staticPlot,plotGlPixelRatio:t._context.plotGlPixelRatio,camera:h},e),u._scene=d),d.viewInitial||(d.viewInitial={up:{x:h.up.x,y:h.up.y,z:h.up.z},eye:{x:h.eye.x,y:h.eye.y,z:h.eye.z},center:{x:h.center.x,y:h.center.y,z:h.center.z}}),d.plot(l,e,t.layout)}},n.clean=function(t,e,n,r){for(var i=r._subplots.gl3d||[],a=0;a<i.length;a++){var o=i[a];!e[o]&&r[o]._scene&&(r[o]._scene.destroy(),r._infolayer&&r._infolayer.selectAll(\".annotation-\"+o).remove())}},n.toSVG=function(t){for(var e=t._fullLayout,n=e._subplots.gl3d,r=e._size,i=0;i<n.length;i++){var a=e[n[i]],o=a.domain,s=a._scene,c=s.toImage(\"png\");e._glimages.append(\"svg:image\").attr({xmlns:l.svg,\"xlink:href\":c,x:r.l+r.w*o.x[0],y:r.t+r.h*(1-o.y[1]),width:r.w*(o.x[1]-o.x[0]),height:r.h*(o.y[1]-o.y[0]),preserveAspectRatio:\"none\"}),s.destroy()}},n.cleanId=function(t){if(t.match(/^scene[0-9]*$/)){var e=t.substr(5);return\"1\"===e&&(e=\"\"),u+e}},n.updateFx=function(t){for(var e=t._fullLayout,n=e._subplots.gl3d,r=0;r<n.length;r++)e[n[r]]._scene.updateFx(e.dragmode,e.hovermode)}},{\"../../components/fx/layout_attributes\":684,\"../../constants/xmlns_namespaces\":754,\"../../lib\":778,\"../../plot_api/edit_types\":810,\"../get_data\":865,\"./layout/attributes\":871,\"./layout/defaults\":875,\"./layout/layout_attributes\":876,\"./scene\":880}],871:[function(t,e,n){\"use strict\";e.exports={scene:{valType:\"subplotid\",dflt:\"scene\",editType:\"calc+clearAxisTypes\"}}},{}],872:[function(t,e,n){\"use strict\";var r=t(\"../../../components/color\"),i=t(\"../../cartesian/layout_attributes\"),a=t(\"../../../lib/extend\").extendFlat,o=t(\"../../../plot_api/edit_types\").overrideAll;e.exports=o({visible:i.visible,showspikes:{valType:\"boolean\",dflt:!0},spikesides:{valType:\"boolean\",dflt:!0},spikethickness:{valType:\"number\",min:0,dflt:2},spikecolor:{valType:\"color\",dflt:r.defaultLine},showbackground:{valType:\"boolean\",dflt:!1},backgroundcolor:{valType:\"color\",dflt:\"rgba(204, 204, 204, 0.5)\"},showaxeslabels:{valType:\"boolean\",dflt:!0},color:i.color,categoryorder:i.categoryorder,categoryarray:i.categoryarray,title:{text:i.title.text,font:i.title.font},type:a({},i.type,{values:[\"-\",\"linear\",\"log\",\"date\",\"category\"]}),autotypenumbers:i.autotypenumbers,autorange:i.autorange,rangemode:i.rangemode,range:a({},i.range,{items:[{valType:\"any\",editType:\"plot\",impliedEdits:{\"^autorange\":!1}},{valType:\"any\",editType:\"plot\",impliedEdits:{\"^autorange\":!1}}],anim:!1}),tickmode:i.tickmode,nticks:i.nticks,tick0:i.tick0,dtick:i.dtick,tickvals:i.tickvals,ticktext:i.ticktext,ticks:i.ticks,mirror:i.mirror,ticklen:i.ticklen,tickwidth:i.tickwidth,tickcolor:i.tickcolor,showticklabels:i.showticklabels,tickfont:i.tickfont,tickangle:i.tickangle,tickprefix:i.tickprefix,showtickprefix:i.showtickprefix,ticksuffix:i.ticksuffix,showticksuffix:i.showticksuffix,showexponent:i.showexponent,exponentformat:i.exponentformat,minexponent:i.minexponent,separatethousands:i.separatethousands,tickformat:i.tickformat,tickformatstops:i.tickformatstops,hoverformat:i.hoverformat,showline:i.showline,linecolor:i.linecolor,linewidth:i.linewidth,showgrid:i.showgrid,gridcolor:a({},i.gridcolor,{dflt:\"rgb(204, 204, 204)\"}),gridwidth:i.gridwidth,zeroline:i.zeroline,zerolinecolor:i.zerolinecolor,zerolinewidth:i.zerolinewidth,_deprecated:{title:i._deprecated.title,titlefont:i._deprecated.titlefont}},\"plot\",\"from-root\")},{\"../../../components/color\":643,\"../../../lib/extend\":768,\"../../../plot_api/edit_types\":810,\"../../cartesian/layout_attributes\":842}],873:[function(t,e,n){\"use strict\";var r=t(\"tinycolor2\").mix,i=t(\"../../../lib\"),a=t(\"../../../plot_api/plot_template\"),o=t(\"./axis_attributes\"),s=t(\"../../cartesian/type_defaults\"),l=t(\"../../cartesian/axis_defaults\"),c=[\"xaxis\",\"yaxis\",\"zaxis\"];e.exports=function(t,e,n){var u,h;function d(t,e){return i.coerce(u,h,o,t,e)}for(var f=0;f<c.length;f++){var p=c[f];u=t[p]||{},(h=a.newContainer(e,p))._id=p[0]+n.scene,h._name=p,s(u,h,d,n),l(u,h,d,{font:n.font,letter:p[0],data:n.data,showGrid:!0,noTickson:!0,noTicklabelmode:!0,noTicklabelposition:!0,bgColor:n.bgColor,calendar:n.calendar},n.fullLayout),d(\"gridcolor\",r(h.color,n.bgColor,72.72727272727273).toRgbString()),d(\"title.text\",p[0]),h.setScale=i.noop,d(\"showspikes\")&&(d(\"spikesides\"),d(\"spikethickness\"),d(\"spikecolor\",h.color)),d(\"showaxeslabels\"),d(\"showbackground\")&&d(\"backgroundcolor\")}}},{\"../../../lib\":778,\"../../../plot_api/plot_template\":817,\"../../cartesian/axis_defaults\":830,\"../../cartesian/type_defaults\":853,\"./axis_attributes\":872,tinycolor2:576}],874:[function(t,e,n){\"use strict\";var r=t(\"../../../lib/str2rgbarray\"),i=t(\"../../../lib\"),a=[\"xaxis\",\"yaxis\",\"zaxis\"];function o(){this.bounds=[[-10,-10,-10],[10,10,10]],this.ticks=[[],[],[]],this.tickEnable=[!0,!0,!0],this.tickFont=[\"sans-serif\",\"sans-serif\",\"sans-serif\"],this.tickSize=[12,12,12],this.tickAngle=[0,0,0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[18,18,18],this.labels=[\"x\",\"y\",\"z\"],this.labelEnable=[!0,!0,!0],this.labelFont=[\"Open Sans\",\"Open Sans\",\"Open Sans\"],this.labelSize=[20,20,20],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[30,30,30],this.lineEnable=[!0,!0,!0],this.lineMirror=[!1,!1,!1],this.lineWidth=[1,1,1],this.lineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.lineTickEnable=[!0,!0,!0],this.lineTickMirror=[!1,!1,!1],this.lineTickLength=[10,10,10],this.lineTickWidth=[1,1,1],this.lineTickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.gridEnable=[!0,!0,!0],this.gridWidth=[1,1,1],this.gridColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroEnable=[!0,!0,!0],this.zeroLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroLineWidth=[2,2,2],this.backgroundEnable=[!0,!0,!0],this.backgroundColor=[[.8,.8,.8,.5],[.8,.8,.8,.5],[.8,.8,.8,.5]],this._defaultTickPad=this.tickPad.slice(),this._defaultLabelPad=this.labelPad.slice(),this._defaultLineTickLength=this.lineTickLength.slice()}o.prototype.merge=function(t,e){for(var n=this,o=0;o<3;++o){var s=e[a[o]];s.visible?(n.labels[o]=t._meta?i.templateString(s.title.text,t._meta):s.title.text,\"font\"in s.title&&(s.title.font.color&&(n.labelColor[o]=r(s.title.font.color)),s.title.font.family&&(n.labelFont[o]=s.title.font.family),s.title.font.size&&(n.labelSize[o]=s.title.font.size)),\"showline\"in s&&(n.lineEnable[o]=s.showline),\"linecolor\"in s&&(n.lineColor[o]=r(s.linecolor)),\"linewidth\"in s&&(n.lineWidth[o]=s.linewidth),\"showgrid\"in s&&(n.gridEnable[o]=s.showgrid),\"gridcolor\"in s&&(n.gridColor[o]=r(s.gridcolor)),\"gridwidth\"in s&&(n.gridWidth[o]=s.gridwidth),\"log\"===s.type?n.zeroEnable[o]=!1:\"zeroline\"in s&&(n.zeroEnable[o]=s.zeroline),\"zerolinecolor\"in s&&(n.zeroLineColor[o]=r(s.zerolinecolor)),\"zerolinewidth\"in s&&(n.zeroLineWidth[o]=s.zerolinewidth),n.lineTickEnable[o]=!(!(\"ticks\"in s)||!s.ticks),\"ticklen\"in s&&(n.lineTickLength[o]=n._defaultLineTickLength[o]=s.ticklen),\"tickcolor\"in s&&(n.lineTickColor[o]=r(s.tickcolor)),\"tickwidth\"in s&&(n.lineTickWidth[o]=s.tickwidth),\"tickangle\"in s&&(n.tickAngle[o]=\"auto\"===s.tickangle?-3600:Math.PI*-s.tickangle/180),\"showticklabels\"in s&&(n.tickEnable[o]=s.showticklabels),\"tickfont\"in s&&(s.tickfont.color&&(n.tickColor[o]=r(s.tickfont.color)),s.tickfont.family&&(n.tickFont[o]=s.tickfont.family),s.tickfont.size&&(n.tickSize[o]=s.tickfont.size)),\"mirror\"in s?-1!==[\"ticks\",\"all\",\"allticks\"].indexOf(s.mirror)?(n.lineTickMirror[o]=!0,n.lineMirror[o]=!0):!0===s.mirror?(n.lineTickMirror[o]=!1,n.lineMirror[o]=!0):(n.lineTickMirror[o]=!1,n.lineMirror[o]=!1):n.lineMirror[o]=!1,\"showbackground\"in s&&!1!==s.showbackground?(n.backgroundEnable[o]=!0,n.backgroundColor[o]=r(s.backgroundcolor)):n.backgroundEnable[o]=!1):(n.tickEnable[o]=!1,n.labelEnable[o]=!1,n.lineEnable[o]=!1,n.lineTickEnable[o]=!1,n.gridEnable[o]=!1,n.zeroEnable[o]=!1,n.backgroundEnable[o]=!1)}},e.exports=function(t,e){var n=new o;return n.merge(t,e),n}},{\"../../../lib\":778,\"../../../lib/str2rgbarray\":802}],875:[function(t,e,n){\"use strict\";var r=t(\"../../../lib\"),i=t(\"../../../components/color\"),a=t(\"../../../registry\"),o=t(\"../../subplot_defaults\"),s=t(\"./axis_defaults\"),l=t(\"./layout_attributes\"),c=t(\"../../get_data\").getSubplotData,u=\"gl3d\";function h(t,e,n,r){for(var o=n(\"bgcolor\"),l=i.combine(o,r.paper_bgcolor),h=[\"up\",\"center\",\"eye\"],d=0;d<h.length;d++)n(\"camera.\"+h[d]+\".x\"),n(\"camera.\"+h[d]+\".y\"),n(\"camera.\"+h[d]+\".z\");n(\"camera.projection.type\");var f=!!n(\"aspectratio.x\")&&!!n(\"aspectratio.y\")&&!!n(\"aspectratio.z\"),p=n(\"aspectmode\",f?\"manual\":\"auto\");f||(t.aspectratio=e.aspectratio={x:1,y:1,z:1},\"manual\"===p&&(e.aspectmode=\"auto\"),t.aspectmode=e.aspectmode);var m=c(r.fullData,u,r.id);s(t,e,{font:r.font,scene:r.id,data:m,bgColor:l,calendar:r.calendar,autotypenumbersDflt:r.autotypenumbersDflt,fullLayout:r.fullLayout}),a.getComponentMethod(\"annotations3d\",\"handleDefaults\")(t,e,r);var g=r.getDfltFromLayout(\"dragmode\");if(!1!==g&&!g)if(g=\"orbit\",t.camera&&t.camera.up){var y=t.camera.up.x,v=t.camera.up.y,_=t.camera.up.z;0!==_&&(y&&v&&_?_/Math.sqrt(y*y+v*v+_*_)>.999&&(g=\"turntable\"):g=\"turntable\")}else g=\"turntable\";n(\"dragmode\",g),n(\"hovermode\",r.getDfltFromLayout(\"hovermode\"))}e.exports=function(t,e,n){var i=e._basePlotModules.length>1;o(t,e,n,{type:u,attributes:l,handleDefaults:h,fullLayout:e,font:e.font,fullData:n,getDfltFromLayout:function(e){if(!i)return r.validate(t[e],l[e])?t[e]:void 0},autotypenumbersDflt:e.autotypenumbers,paper_bgcolor:e.paper_bgcolor,calendar:e.calendar})}},{\"../../../components/color\":643,\"../../../lib\":778,\"../../../registry\":911,\"../../get_data\":865,\"../../subplot_defaults\":905,\"./axis_defaults\":873,\"./layout_attributes\":876}],876:[function(t,e,n){\"use strict\";var r=t(\"./axis_attributes\"),i=t(\"../../domain\").attributes,a=t(\"../../../lib/extend\").extendFlat,o=t(\"../../../lib\").counterRegex;function s(t,e,n){return{x:{valType:\"number\",dflt:t,editType:\"camera\"},y:{valType:\"number\",dflt:e,editType:\"camera\"},z:{valType:\"number\",dflt:n,editType:\"camera\"},editType:\"camera\"}}e.exports={_arrayAttrRegexps:[o(\"scene\",\".annotations\",!0)],bgcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"plot\"},camera:{up:a(s(0,0,1),{}),center:a(s(0,0,0),{}),eye:a(s(1.25,1.25,1.25),{}),projection:{type:{valType:\"enumerated\",values:[\"perspective\",\"orthographic\"],dflt:\"perspective\",editType:\"calc\"},editType:\"calc\"},editType:\"camera\"},domain:i({name:\"scene\",editType:\"plot\"}),aspectmode:{valType:\"enumerated\",values:[\"auto\",\"cube\",\"data\",\"manual\"],dflt:\"auto\",editType:\"plot\",impliedEdits:{\"aspectratio.x\":void 0,\"aspectratio.y\":void 0,\"aspectratio.z\":void 0}},aspectratio:{x:{valType:\"number\",min:0,editType:\"plot\",impliedEdits:{\"^aspectmode\":\"manual\"}},y:{valType:\"number\",min:0,editType:\"plot\",impliedEdits:{\"^aspectmode\":\"manual\"}},z:{valType:\"number\",min:0,editType:\"plot\",impliedEdits:{\"^aspectmode\":\"manual\"}},editType:\"plot\",impliedEdits:{aspectmode:\"manual\"}},xaxis:r,yaxis:r,zaxis:r,dragmode:{valType:\"enumerated\",values:[\"orbit\",\"turntable\",\"zoom\",\"pan\",!1],editType:\"plot\"},hovermode:{valType:\"enumerated\",values:[\"closest\",!1],dflt:\"closest\",editType:\"modebar\"},uirevision:{valType:\"any\",editType:\"none\"},editType:\"plot\",_deprecated:{cameraposition:{valType:\"info_array\",editType:\"camera\"}}}},{\"../../../lib\":778,\"../../../lib/extend\":768,\"../../domain\":855,\"./axis_attributes\":872}],877:[function(t,e,n){\"use strict\";var r=t(\"../../../lib/str2rgbarray\"),i=[\"xaxis\",\"yaxis\",\"zaxis\"];function a(){this.enabled=[!0,!0,!0],this.colors=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.drawSides=[!0,!0,!0],this.lineWidth=[1,1,1]}a.prototype.merge=function(t){for(var e=0;e<3;++e){var n=t[i[e]];n.visible?(this.enabled[e]=n.showspikes,this.colors[e]=r(n.spikecolor),this.drawSides[e]=n.spikesides,this.lineWidth[e]=n.spikethickness):(this.enabled[e]=!1,this.drawSides[e]=!1)}},e.exports=function(t){var e=new a;return e.merge(t),e}},{\"../../../lib/str2rgbarray\":802}],878:[function(t,e,n){\"use strict\";e.exports=function(t){for(var e=t.axesOptions,n=t.glplot.axesPixels,s=t.fullSceneLayout,l=[[],[],[]],c=0;c<3;++c){var u=s[a[c]];if(u._length=(n[c].hi-n[c].lo)*n[c].pixelsPerDataUnit/t.dataScale[c],Math.abs(u._length)===1/0||isNaN(u._length))l[c]=[];else{u._input_range=u.range.slice(),u.range[0]=n[c].lo/t.dataScale[c],u.range[1]=n[c].hi/t.dataScale[c],u._m=1/(t.dataScale[c]*n[c].pixelsPerDataUnit),u.range[0]===u.range[1]&&(u.range[0]-=1,u.range[1]+=1);var h=u.tickmode;if(\"auto\"===u.tickmode){u.tickmode=\"linear\";var d=u.nticks||i.constrain(u._length/40,4,9);r.autoTicks(u,Math.abs(u.range[1]-u.range[0])/d)}for(var f=r.calcTicks(u,{msUTC:!0}),p=0;p<f.length;++p)f[p].x=f[p].x*t.dataScale[c],\"date\"===u.type&&(f[p].text=f[p].text.replace(/\\<br\\>/g,\" \"));l[c]=f,u.tickmode=h}}for(e.ticks=l,c=0;c<3;++c)for(o[c]=.5*(t.glplot.bounds[0][c]+t.glplot.bounds[1][c]),p=0;p<2;++p)e.bounds[p][c]=t.glplot.bounds[p][c];t.contourLevels=function(t){for(var e=new Array(3),n=0;n<3;++n){for(var r=t[n],i=new Array(r.length),a=0;a<r.length;++a)i[a]=r[a].x;e[n]=i}return e}(l)};var r=t(\"../../cartesian/axes\"),i=t(\"../../../lib\"),a=[\"xaxis\",\"yaxis\",\"zaxis\"],o=[0,0,0]},{\"../../../lib\":778,\"../../cartesian/axes\":828}],879:[function(t,e,n){\"use strict\";function r(t,e){var n,r,i=[0,0,0,0];for(n=0;n<4;++n)for(r=0;r<4;++r)i[r]+=t[4*n+r]*e[n];return i}e.exports=function(t,e){return r(t.projection,r(t.view,r(t.model,[e[0],e[1],e[2],1])))}},{}],880:[function(t,e,n){\"use strict\";var r,i,a=t(\"gl-plot3d\"),o=a.createCamera,s=a.createScene,l=t(\"webgl-context\"),c=t(\"has-passive-events\"),u=t(\"../../registry\"),h=t(\"../../lib\"),d=h.preserveDrawingBuffer(),f=t(\"../../plots/cartesian/axes\"),p=t(\"../../components/fx\"),m=t(\"../../lib/str2rgbarray\"),g=t(\"../../lib/show_no_webgl_msg\"),y=t(\"./project\"),v=t(\"./layout/convert\"),_=t(\"./layout/spikes\"),b=t(\"./layout/tick_marks\");function x(t,e){var n=document.createElement(\"div\"),r=t.container;this.graphDiv=t.graphDiv;var i=document.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");i.style.position=\"absolute\",i.style.top=i.style.left=\"0px\",i.style.width=i.style.height=\"100%\",i.style[\"z-index\"]=20,i.style[\"pointer-events\"]=\"none\",n.appendChild(i),this.svgContainer=i,n.id=t.id,n.style.position=\"absolute\",n.style.top=n.style.left=\"0px\",n.style.width=n.style.height=\"100%\",r.appendChild(n),this.fullLayout=e,this.id=t.id||\"scene\",this.fullSceneLayout=e[this.id],this.plotArgs=[[],{},{}],this.axesOptions=v(e,e[this.id]),this.spikeOptions=_(e[this.id]),this.container=n,this.staticMode=!!t.staticPlot,this.pixelRatio=this.pixelRatio||t.plotGlPixelRatio||2,this.dataScale=[1,1,1],this.contourLevels=[[],[],[]],this.convertAnnotations=u.getComponentMethod(\"annotations3d\",\"convert\"),this.drawAnnotations=u.getComponentMethod(\"annotations3d\",\"draw\"),this.initializeGLPlot()}var w=x.prototype;w.prepareOptions=function(){var t=this,e={canvas:t.canvas,gl:t.gl,glOptions:{preserveDrawingBuffer:d,premultipliedAlpha:!0,antialias:!0},container:t.container,axes:t.axesOptions,spikes:t.spikeOptions,pickRadius:10,snapToData:!0,autoScale:!0,autoBounds:!1,cameraObject:t.camera,pixelRatio:t.pixelRatio};if(t.staticMode){if(!(i||(r=document.createElement(\"canvas\"),i=l({canvas:r,preserveDrawingBuffer:!0,premultipliedAlpha:!0,antialias:!0}))))throw new Error(\"error creating static canvas/context for image server\");e.gl=i,e.canvas=r}return e};var k=!0;w.tryCreatePlot=function(){var t=this,e=t.prepareOptions(),n=!0;try{t.glplot=s(e)}catch(r){if(t.staticMode||!k||d)n=!1;else{h.warn([\"webgl setup failed possibly due to\",\"false preserveDrawingBuffer config.\",\"The mobile/tablet device may not be detected by is-mobile module.\",\"Enabling preserveDrawingBuffer in second attempt to create webgl scene...\"].join(\" \"));try{d=e.glOptions.preserveDrawingBuffer=!0,t.glplot=s(e)}catch(r){d=e.glOptions.preserveDrawingBuffer=!1,n=!1}}}return k=!1,n},w.initializeGLCamera=function(){var t=this,e=t.fullSceneLayout.camera;t.camera=o(t.container,{center:[e.center.x,e.center.y,e.center.z],eye:[e.eye.x,e.eye.y,e.eye.z],up:[e.up.x,e.up.y,e.up.z],_ortho:\"orthographic\"===e.projection.type,zoomMin:.01,zoomMax:100,mode:\"orbit\"})},w.initializeGLPlot=function(){var t=this;if(t.initializeGLCamera(),!t.tryCreatePlot())return g(t);t.traces={},t.make4thDimension();var e=t.graphDiv,n=e.layout,r=function(){var e={};return t.isCameraChanged(n)&&(e[t.id+\".camera\"]=t.getCamera()),t.isAspectChanged(n)&&(e[t.id+\".aspectratio\"]=t.glplot.getAspectratio(),\"manual\"!==n[t.id].aspectmode&&(t.fullSceneLayout.aspectmode=n[t.id].aspectmode=e[t.id+\".aspectmode\"]=\"manual\")),e},i=function(t){if(!1!==t.fullSceneLayout.dragmode){var e=r();t.saveLayout(n),t.graphDiv.emit(\"plotly_relayout\",e)}};return t.glplot.canvas&&(t.glplot.canvas.addEventListener(\"mouseup\",(function(){i(t)})),t.glplot.canvas.addEventListener(\"wheel\",(function(n){if(e._context._scrollZoom.gl3d){if(t.camera._ortho){var r=n.deltaX>n.deltaY?1.1:1/1.1,a=t.glplot.getAspectratio();t.glplot.setAspectratio({x:r*a.x,y:r*a.y,z:r*a.z})}i(t)}}),!!c&&{passive:!1}),t.glplot.canvas.addEventListener(\"mousemove\",(function(){if(!1!==t.fullSceneLayout.dragmode&&0!==t.camera.mouseListener.buttons){var e=r();t.graphDiv.emit(\"plotly_relayouting\",e)}})),t.staticMode||t.glplot.canvas.addEventListener(\"webglcontextlost\",(function(n){e&&e.emit&&e.emit(\"plotly_webglcontextlost\",{event:n,layer:t.id})}),!1)),t.glplot.oncontextloss=function(){t.recoverContext()},t.glplot.onrender=function(){t.render()},!0},w.render=function(){var t,e=this,n=e.graphDiv,r=e.svgContainer,i=e.container.getBoundingClientRect();n._fullLayout._calcInverseTransform(n);var a=i.width*n._fullLayout._invScaleX,o=i.height*n._fullLayout._invScaleY;r.setAttributeNS(null,\"viewBox\",\"0 0 \"+a+\" \"+o),r.setAttributeNS(null,\"width\",a),r.setAttributeNS(null,\"height\",o),b(e),e.glplot.axes.update(e.axesOptions);for(var s,l=Object.keys(e.traces),c=null,u=e.glplot.selection,d=0;d<l.length;++d)\"skip\"!==(t=e.traces[l[d]]).data.hoverinfo&&t.handlePick(u)&&(c=t),t.setContourLevels&&t.setContourLevels();function m(t,n){var r=e.fullSceneLayout[t];return f.tickText(r,r.d2l(n),\"hover\").text}if(null!==c){var g,v=y(e.glplot.cameraParams,u.dataCoordinate),_=n._fullData[(t=c.data).index],x=u.index,w={xLabel:m(\"xaxis\",u.traceCoordinate[0]),yLabel:m(\"yaxis\",u.traceCoordinate[1]),zLabel:m(\"zaxis\",u.traceCoordinate[2])},k=p.castHoverinfo(_,e.fullLayout,x),M=(k||\"\").split(\"+\"),T=k&&\"all\"===k;_.hovertemplate||T||(-1===M.indexOf(\"x\")&&(w.xLabel=void 0),-1===M.indexOf(\"y\")&&(w.yLabel=void 0),-1===M.indexOf(\"z\")&&(w.zLabel=void 0),-1===M.indexOf(\"text\")&&(u.textLabel=void 0),-1===M.indexOf(\"name\")&&(c.name=void 0));var S=[];\"cone\"===t.type||\"streamtube\"===t.type?(w.uLabel=m(\"xaxis\",u.traceCoordinate[3]),(T||-1!==M.indexOf(\"u\"))&&S.push(\"u: \"+w.uLabel),w.vLabel=m(\"yaxis\",u.traceCoordinate[4]),(T||-1!==M.indexOf(\"v\"))&&S.push(\"v: \"+w.vLabel),w.wLabel=m(\"zaxis\",u.traceCoordinate[5]),(T||-1!==M.indexOf(\"w\"))&&S.push(\"w: \"+w.wLabel),w.normLabel=u.traceCoordinate[6].toPrecision(3),(T||-1!==M.indexOf(\"norm\"))&&S.push(\"norm: \"+w.normLabel),\"streamtube\"===t.type&&(w.divergenceLabel=u.traceCoordinate[7].toPrecision(3),(T||-1!==M.indexOf(\"divergence\"))&&S.push(\"divergence: \"+w.divergenceLabel)),u.textLabel&&S.push(u.textLabel),g=S.join(\"<br>\")):\"isosurface\"===t.type||\"volume\"===t.type?(w.valueLabel=f.tickText(e._mockAxis,e._mockAxis.d2l(u.traceCoordinate[3]),\"hover\").text,S.push(\"value: \"+w.valueLabel),u.textLabel&&S.push(u.textLabel),g=S.join(\"<br>\")):g=u.textLabel;var A={x:u.traceCoordinate[0],y:u.traceCoordinate[1],z:u.traceCoordinate[2],data:_._input,fullData:_,curveNumber:_.index,pointNumber:x};p.appendArrayPointValue(A,_,x),t._module.eventData&&(A=_._module.eventData(A,u,_,{},x));var L={points:[A]};e.fullSceneLayout.hovermode&&p.loneHover({trace:_,x:(.5+.5*v[0]/v[3])*a,y:(.5-.5*v[1]/v[3])*o,xLabel:w.xLabel,yLabel:w.yLabel,zLabel:w.zLabel,text:g,name:c.name,color:p.castHoverOption(_,x,\"bgcolor\")||c.color,borderColor:p.castHoverOption(_,x,\"bordercolor\"),fontFamily:p.castHoverOption(_,x,\"font.family\"),fontSize:p.castHoverOption(_,x,\"font.size\"),fontColor:p.castHoverOption(_,x,\"font.color\"),nameLength:p.castHoverOption(_,x,\"namelength\"),textAlign:p.castHoverOption(_,x,\"align\"),hovertemplate:h.castOption(_,x,\"hovertemplate\"),hovertemplateLabels:h.extendFlat({},A,w),eventData:[A]},{container:r,gd:n}),n.emit(u.buttons&&u.distance<5?\"plotly_click\":\"plotly_hover\",L),s=L}else p.loneUnhover(r),n.emit(\"plotly_unhover\",s);e.drawAnnotations(e)},w.recoverContext=function(){var t=this;t.glplot.dispose();var e=function(){t.glplot.gl.isContextLost()?requestAnimationFrame(e):t.initializeGLPlot()?t.plot.apply(t,t.plotArgs):h.error(\"Catastrophic and unrecoverable WebGL error. Context lost.\")};requestAnimationFrame(e)};var M=[\"xaxis\",\"yaxis\",\"zaxis\"];function T(t,e,n){for(var r=t.fullSceneLayout,i=0;i<3;i++){var a=M[i],o=a.charAt(0),s=r[a],l=e[o],c=e[o+\"calendar\"],u=e[\"_\"+o+\"length\"];if(h.isArrayOrTypedArray(l))for(var d,f=0;f<(u||l.length);f++)if(h.isArrayOrTypedArray(l[f]))for(var p=0;p<l[f].length;++p)d=s.d2l(l[f][p],0,c),!isNaN(d)&&isFinite(d)&&(n[0][i]=Math.min(n[0][i],d),n[1][i]=Math.max(n[1][i],d));else d=s.d2l(l[f],0,c),!isNaN(d)&&isFinite(d)&&(n[0][i]=Math.min(n[0][i],d),n[1][i]=Math.max(n[1][i],d));else n[0][i]=Math.min(n[0][i],0),n[1][i]=Math.max(n[1][i],u-1)}}w.plot=function(t,e,n){var r=this;if(r.plotArgs=[t,e,n],!r.glplot.contextLost){var i,a,o,s,l,c,u=e[r.id],h=n[r.id];r.fullLayout=e,r.fullSceneLayout=u,r.axesOptions.merge(e,u),r.spikeOptions.merge(u),r.setViewport(u),r.updateFx(u.dragmode,u.hovermode),r.camera.enableWheel=r.graphDiv._context._scrollZoom.gl3d,r.glplot.setClearColor(m(u.bgcolor)),r.setConvert(l),t?Array.isArray(t)||(t=[t]):t=[];var d=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];for(o=0;o<t.length;++o)!0===(i=t[o]).visible&&0!==i._length&&T(this,i,d);!function(t,e){for(var n=t.fullSceneLayout,r=n.annotations||[],i=0;i<3;i++)for(var a=M[i],o=a.charAt(0),s=n[a],l=0;l<r.length;l++){var c=r[l];if(c.visible){var u=s.r2l(c[o]);!isNaN(u)&&isFinite(u)&&(e[0][i]=Math.min(e[0][i],u),e[1][i]=Math.max(e[1][i],u))}}}(this,d);var f=[1,1,1];for(s=0;s<3;++s)f[s]=d[1][s]===d[0][s]?1:1/(d[1][s]-d[0][s]);for(r.dataScale=f,r.convertAnnotations(this),o=0;o<t.length;++o)!0===(i=t[o]).visible&&0!==i._length&&((a=r.traces[i.uid])?a.data.type===i.type?a.update(i):(a.dispose(),a=i._module.plot(this,i),r.traces[i.uid]=a):(a=i._module.plot(this,i),r.traces[i.uid]=a),a.name=i.name);var p=Object.keys(r.traces);t:for(o=0;o<p.length;++o){for(s=0;s<t.length;++s)if(t[s].uid===p[o]&&!0===t[s].visible&&0!==t[s]._length)continue t;(a=r.traces[p[o]]).dispose(),delete r.traces[p[o]]}r.glplot.objects.sort((function(t,e){return t._trace.data.index-e._trace.data.index}));var g,y=[[0,0,0],[0,0,0]],v=[],_={};for(o=0;o<3;++o){if((c=(l=u[M[o]]).type)in _?(_[c].acc*=f[o],_[c].count+=1):_[c]={acc:f[o],count:1},l.autorange){y[0][o]=1/0,y[1][o]=-1/0;var b=r.glplot.objects,x=r.fullSceneLayout.annotations||[],w=l._name.charAt(0);for(s=0;s<b.length;s++){var k=b[s],S=k.bounds,A=k._trace.data._pad||0;y[0][o]=\"ErrorBars\"===k.constructor.name&&l._lowerLogErrorBound?Math.min(y[0][o],l._lowerLogErrorBound):Math.min(y[0][o],S[0][o]/f[o]-A),y[1][o]=Math.max(y[1][o],S[1][o]/f[o]+A)}for(s=0;s<x.length;s++){var L=x[s];if(L.visible){var C=l.r2l(L[w]);y[0][o]=Math.min(y[0][o],C),y[1][o]=Math.max(y[1][o],C)}}if(\"rangemode\"in l&&\"tozero\"===l.rangemode&&(y[0][o]=Math.min(y[0][o],0),y[1][o]=Math.max(y[1][o],0)),y[0][o]>y[1][o])y[0][o]=-1,y[1][o]=1;else{var E=y[1][o]-y[0][o];y[0][o]-=E/32,y[1][o]+=E/32}if(\"reversed\"===l.autorange){var O=y[0][o];y[0][o]=y[1][o],y[1][o]=O}}else{var D=l.range;y[0][o]=l.r2l(D[0]),y[1][o]=l.r2l(D[1])}y[0][o]===y[1][o]&&(y[0][o]-=1,y[1][o]+=1),v[o]=y[1][o]-y[0][o],r.glplot.setBounds(o,{min:y[0][o]*f[o],max:y[1][o]*f[o]})}var I=u.aspectmode;if(\"cube\"===I)g=[1,1,1];else if(\"manual\"===I){var P=u.aspectratio;g=[P.x,P.y,P.z]}else{if(\"auto\"!==I&&\"data\"!==I)throw new Error(\"scene.js aspectRatio was not one of the enumerated types\");var R=[1,1,1];for(o=0;o<3;++o){var z=_[c=(l=u[M[o]]).type];R[o]=Math.pow(z.acc,1/z.count)/f[o]}g=\"data\"===I||Math.max.apply(null,R)/Math.min.apply(null,R)<=4?R:[1,1,1]}u.aspectratio.x=h.aspectratio.x=g[0],u.aspectratio.y=h.aspectratio.y=g[1],u.aspectratio.z=h.aspectratio.z=g[2],r.glplot.setAspectratio(u.aspectratio),r.viewInitial.aspectratio||(r.viewInitial.aspectratio={x:u.aspectratio.x,y:u.aspectratio.y,z:u.aspectratio.z}),r.viewInitial.aspectmode||(r.viewInitial.aspectmode=u.aspectmode);var j=u.domain||null,F=e._size||null;if(j&&F){var N=r.container.style;N.position=\"absolute\",N.left=F.l+j.x[0]*F.w+\"px\",N.top=F.t+(1-j.y[1])*F.h+\"px\",N.width=F.w*(j.x[1]-j.x[0])+\"px\",N.height=F.h*(j.y[1]-j.y[0])+\"px\"}r.glplot.redraw()}},w.destroy=function(){var t=this;t.glplot&&(t.camera.mouseListener.enabled=!1,t.container.removeEventListener(\"wheel\",t.camera.wheelListener),t.camera=null,t.glplot.dispose(),t.container.parentNode.removeChild(t.container),t.glplot=null)},w.getCamera=function(){var t,e=this;return e.camera.view.recalcMatrix(e.camera.view.lastT()),{up:{x:(t=e.camera).up[0],y:t.up[1],z:t.up[2]},center:{x:t.center[0],y:t.center[1],z:t.center[2]},eye:{x:t.eye[0],y:t.eye[1],z:t.eye[2]},projection:{type:!0===t._ortho?\"orthographic\":\"perspective\"}}},w.setViewport=function(t){var e,n=this,r=t.camera;n.camera.lookAt.apply(this,[[(e=r).eye.x,e.eye.y,e.eye.z],[e.center.x,e.center.y,e.center.z],[e.up.x,e.up.y,e.up.z]]),n.glplot.setAspectratio(t.aspectratio),\"orthographic\"===r.projection.type!==n.camera._ortho&&(n.glplot.redraw(),n.glplot.clearRGBA(),n.glplot.dispose(),n.initializeGLPlot())},w.isCameraChanged=function(t){var e=this.getCamera(),n=h.nestedProperty(t,this.id+\".camera\").get();function r(t,e,n,r){var i=[\"up\",\"center\",\"eye\"],a=[\"x\",\"y\",\"z\"];return e[i[n]]&&t[i[n]][a[r]]===e[i[n]][a[r]]}var i=!1;if(void 0===n)i=!0;else{for(var a=0;a<3;a++)for(var o=0;o<3;o++)if(!r(e,n,a,o)){i=!0;break}(!n.projection||e.projection&&e.projection.type!==n.projection.type)&&(i=!0)}return i},w.isAspectChanged=function(t){var e=this.glplot.getAspectratio(),n=h.nestedProperty(t,this.id+\".aspectratio\").get();return void 0===n||n.x!==e.x||n.y!==e.y||n.z!==e.z},w.saveLayout=function(t){var e,n,r,i,a,o,s=this,l=s.fullLayout,c=s.isCameraChanged(t),d=s.isAspectChanged(t),f=c||d;if(f){var p={};c&&(e=s.getCamera(),r=(n=h.nestedProperty(t,s.id+\".camera\")).get(),p[s.id+\".camera\"]=r),d&&(i=s.glplot.getAspectratio(),o=(a=h.nestedProperty(t,s.id+\".aspectratio\")).get(),p[s.id+\".aspectratio\"]=o),u.call(\"_storeDirectGUIEdit\",t,l._preGUI,p),c&&(n.set(e),h.nestedProperty(l,s.id+\".camera\").set(e)),d&&(a.set(i),h.nestedProperty(l,s.id+\".aspectratio\").set(i),s.glplot.redraw())}return f},w.updateFx=function(t,e){var n=this,r=n.camera;if(r)if(\"orbit\"===t)r.mode=\"orbit\",r.keyBindingMode=\"rotate\";else if(\"turntable\"===t){r.up=[0,0,1],r.mode=\"turntable\",r.keyBindingMode=\"rotate\";var i=n.graphDiv,a=i._fullLayout,o=n.fullSceneLayout.camera,s=o.up.x,l=o.up.y,c=o.up.z;if(c/Math.sqrt(s*s+l*l+c*c)<.999){var d=n.id+\".camera.up\",f={x:0,y:0,z:1},p={};p[d]=f;var m=i.layout;u.call(\"_storeDirectGUIEdit\",m,a._preGUI,p),o.up=f,h.nestedProperty(m,d).set(f)}}else r.keyBindingMode=t;n.fullSceneLayout.hovermode=e},w.toImage=function(t){var e=this;t||(t=\"png\"),e.staticMode&&e.container.appendChild(r),e.glplot.redraw();var n=e.glplot.gl,i=n.drawingBufferWidth,a=n.drawingBufferHeight;n.bindFramebuffer(n.FRAMEBUFFER,null);var o=new Uint8Array(i*a*4);n.readPixels(0,0,i,a,n.RGBA,n.UNSIGNED_BYTE,o),function(t,e,n){for(var r=0,i=n-1;r<i;++r,--i)for(var a=0;a<e;++a)for(var o=0;o<4;++o){var s=4*(e*r+a)+o,l=4*(e*i+a)+o,c=t[s];t[s]=t[l],t[l]=c}}(o,i,a),function(t,e,n){for(var r=0;r<n;++r)for(var i=0;i<e;++i){var a=4*(e*r+i),o=t[a+3];if(o>0)for(var s=255/o,l=0;l<3;++l)t[a+l]=Math.min(s*t[a+l],255)}}(o,i,a);var s=document.createElement(\"canvas\");s.width=i,s.height=a;var l,c=s.getContext(\"2d\"),u=c.createImageData(i,a);switch(u.data.set(o),c.putImageData(u,0,0),t){case\"jpeg\":l=s.toDataURL(\"image/jpeg\");break;case\"webp\":l=s.toDataURL(\"image/webp\");break;default:l=s.toDataURL(\"image/png\")}return e.staticMode&&e.container.removeChild(r),l},w.setConvert=function(){for(var t=0;t<3;t++){var e=this.fullSceneLayout[M[t]];f.setConvert(e,this.fullLayout),e.setScale=h.noop}},w.make4thDimension=function(){var t=this,e=t.graphDiv._fullLayout;t._mockAxis={type:\"linear\",showexponent:\"all\",exponentformat:\"B\"},f.setConvert(t._mockAxis,e)},e.exports=x},{\"../../components/fx\":683,\"../../lib\":778,\"../../lib/show_no_webgl_msg\":800,\"../../lib/str2rgbarray\":802,\"../../plots/cartesian/axes\":828,\"../../registry\":911,\"./layout/convert\":874,\"./layout/spikes\":877,\"./layout/tick_marks\":878,\"./project\":879,\"gl-plot3d\":321,\"has-passive-events\":441,\"webgl-context\":606}],881:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,r){r=r||t.length;for(var i=new Array(r),a=0;a<r;a++)i[a]=[t[a],e[a],n[a]];return i}},{}],882:[function(t,e,n){\"use strict\";var r=t(\"./font_attributes\"),i=t(\"./animation_attributes\"),a=t(\"../components/color/attributes\"),o=t(\"../components/shapes/draw_newshape/attributes\"),s=t(\"./pad_attributes\"),l=t(\"../lib/extend\").extendFlat,c=r({editType:\"calc\"});c.family.dflt='\"Open Sans\", verdana, arial, sans-serif',c.size.dflt=12,c.color.dflt=a.defaultLine,e.exports={font:c,title:{text:{valType:\"string\",editType:\"layoutstyle\"},font:r({editType:\"layoutstyle\"}),xref:{valType:\"enumerated\",dflt:\"container\",values:[\"container\",\"paper\"],editType:\"layoutstyle\"},yref:{valType:\"enumerated\",dflt:\"container\",values:[\"container\",\"paper\"],editType:\"layoutstyle\"},x:{valType:\"number\",min:0,max:1,dflt:.5,editType:\"layoutstyle\"},y:{valType:\"number\",min:0,max:1,dflt:\"auto\",editType:\"layoutstyle\"},xanchor:{valType:\"enumerated\",dflt:\"auto\",values:[\"auto\",\"left\",\"center\",\"right\"],editType:\"layoutstyle\"},yanchor:{valType:\"enumerated\",dflt:\"auto\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],editType:\"layoutstyle\"},pad:l(s({editType:\"layoutstyle\"}),{}),editType:\"layoutstyle\"},uniformtext:{mode:{valType:\"enumerated\",values:[!1,\"hide\",\"show\"],dflt:!1,editType:\"plot\"},minsize:{valType:\"number\",min:0,dflt:0,editType:\"plot\"},editType:\"plot\"},autosize:{valType:\"boolean\",dflt:!1,editType:\"none\"},width:{valType:\"number\",min:10,dflt:700,editType:\"plot\"},height:{valType:\"number\",min:10,dflt:450,editType:\"plot\"},margin:{l:{valType:\"number\",min:0,dflt:80,editType:\"plot\"},r:{valType:\"number\",min:0,dflt:80,editType:\"plot\"},t:{valType:\"number\",min:0,dflt:100,editType:\"plot\"},b:{valType:\"number\",min:0,dflt:80,editType:\"plot\"},pad:{valType:\"number\",min:0,dflt:0,editType:\"plot\"},autoexpand:{valType:\"boolean\",dflt:!0,editType:\"plot\"},editType:\"plot\"},computed:{valType:\"any\",editType:\"none\"},paper_bgcolor:{valType:\"color\",dflt:a.background,editType:\"plot\"},plot_bgcolor:{valType:\"color\",dflt:a.background,editType:\"layoutstyle\"},autotypenumbers:{valType:\"enumerated\",values:[\"convert types\",\"strict\"],dflt:\"convert types\",editType:\"calc\"},separators:{valType:\"string\",editType:\"plot\"},hidesources:{valType:\"boolean\",dflt:!1,editType:\"plot\"},showlegend:{valType:\"boolean\",editType:\"legend\"},colorway:{valType:\"colorlist\",dflt:a.defaults,editType:\"calc\"},datarevision:{valType:\"any\",editType:\"calc\"},uirevision:{valType:\"any\",editType:\"none\"},editrevision:{valType:\"any\",editType:\"none\"},selectionrevision:{valType:\"any\",editType:\"none\"},template:{valType:\"any\",editType:\"calc\"},modebar:{orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],dflt:\"h\",editType:\"modebar\"},bgcolor:{valType:\"color\",editType:\"modebar\"},color:{valType:\"color\",editType:\"modebar\"},activecolor:{valType:\"color\",editType:\"modebar\"},uirevision:{valType:\"any\",editType:\"none\"},editType:\"modebar\"},newshape:o.newshape,activeshape:o.activeshape,meta:{valType:\"any\",arrayOk:!0,editType:\"plot\"},transition:l({},i.transition,{editType:\"none\"}),_deprecated:{title:{valType:\"string\",editType:\"layoutstyle\"},titlefont:r({editType:\"layoutstyle\"})}}},{\"../components/color/attributes\":642,\"../components/shapes/draw_newshape/attributes\":725,\"../lib/extend\":768,\"./animation_attributes\":822,\"./font_attributes\":856,\"./pad_attributes\":890}],883:[function(t,e,n){\"use strict\";var r={\"open-street-map\":{id:\"osm\",version:8,sources:{\"plotly-osm-tiles\":{type:\"raster\",attribution:'<a href=\"http://www.openstreetmap.org/about/\" target=\"_blank\">\\xa9 OpenStreetMap</a>',tiles:[\"https://a.tile.openstreetmap.org/{z}/{x}/{y}.png\",\"https://b.tile.openstreetmap.org/{z}/{x}/{y}.png\"],tileSize:256}},layers:[{id:\"plotly-osm-tiles\",type:\"raster\",source:\"plotly-osm-tiles\",minzoom:0,maxzoom:22}]},\"white-bg\":{id:\"white-bg\",version:8,sources:{},layers:[{id:\"white-bg\",type:\"background\",paint:{\"background-color\":\"#FFFFFF\"},minzoom:0,maxzoom:22}]},\"carto-positron\":{id:\"carto-positron\",version:8,sources:{\"plotly-carto-positron\":{type:\"raster\",attribution:'<a href=\"https://carto.com/\" target=\"_blank\">\\xa9 CARTO</a>',tiles:[\"https://cartodb-basemaps-c.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png\"],tileSize:256}},layers:[{id:\"plotly-carto-positron\",type:\"raster\",source:\"plotly-carto-positron\",minzoom:0,maxzoom:22}]},\"carto-darkmatter\":{id:\"carto-darkmatter\",version:8,sources:{\"plotly-carto-darkmatter\":{type:\"raster\",attribution:'<a href=\"https://carto.com/\" target=\"_blank\">\\xa9 CARTO</a>',tiles:[\"https://cartodb-basemaps-c.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png\"],tileSize:256}},layers:[{id:\"plotly-carto-darkmatter\",type:\"raster\",source:\"plotly-carto-darkmatter\",minzoom:0,maxzoom:22}]},\"stamen-terrain\":{id:\"stamen-terrain\",version:8,sources:{\"plotly-stamen-terrain\":{type:\"raster\",attribution:'Map tiles by <a href=\"http://stamen.com\">Stamen Design</a>, under <a href=\"http://creativecommons.org/licenses/by/3.0\">CC BY 3.0</a> | Data by <a href=\"http://openstreetmap.org\">OpenStreetMap</a>, under <a href=\"http://www.openstreetmap.org/copyright\">ODbL</a>.',tiles:[\"https://stamen-tiles.a.ssl.fastly.net/terrain/{z}/{x}/{y}.png\"],tileSize:256}},layers:[{id:\"plotly-stamen-terrain\",type:\"raster\",source:\"plotly-stamen-terrain\",minzoom:0,maxzoom:22}]},\"stamen-toner\":{id:\"stamen-toner\",version:8,sources:{\"plotly-stamen-toner\":{type:\"raster\",attribution:'Map tiles by <a href=\"http://stamen.com\">Stamen Design</a>, under <a href=\"http://creativecommons.org/licenses/by/3.0\">CC BY 3.0</a> | Data by <a href=\"http://openstreetmap.org\">OpenStreetMap</a>, under <a href=\"http://www.openstreetmap.org/copyright\">ODbL</a>.',tiles:[\"https://stamen-tiles.a.ssl.fastly.net/toner/{z}/{x}/{y}.png\"],tileSize:256}},layers:[{id:\"plotly-stamen-toner\",type:\"raster\",source:\"plotly-stamen-toner\",minzoom:0,maxzoom:22}]},\"stamen-watercolor\":{id:\"stamen-watercolor\",version:8,sources:{\"plotly-stamen-watercolor\":{type:\"raster\",attribution:'Map tiles by <a href=\"http://stamen.com\">Stamen Design</a>, under <a href=\"http://creativecommons.org/licenses/by/3.0\">CC BY 3.0</a> | Data by <a href=\"http://openstreetmap.org\">OpenStreetMap</a>, under <a href=\"http://creativecommons.org/licenses/by-sa/3.0\">CC BY SA</a>.',tiles:[\"https://stamen-tiles.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.png\"],tileSize:256}},layers:[{id:\"plotly-stamen-watercolor\",type:\"raster\",source:\"plotly-stamen-watercolor\",minzoom:0,maxzoom:22}]}},i=Object.keys(r);e.exports={requiredVersion:\"1.10.1\",styleUrlPrefix:\"mapbox://styles/mapbox/\",styleUrlSuffix:\"v9\",styleValuesMapbox:[\"basic\",\"streets\",\"outdoors\",\"light\",\"dark\",\"satellite\",\"satellite-streets\"],styleValueDflt:\"basic\",stylesNonMapbox:r,styleValuesNonMapbox:i,traceLayerPrefix:\"plotly-trace-layer-\",layoutLayerPrefix:\"plotly-layout-layer-\",wrongVersionErrorMsg:[\"Your custom plotly.js bundle is not using the correct mapbox-gl version\",\"Please install mapbox-gl@1.10.1.\"].join(\"\\n\"),noAccessTokenErrorMsg:[\"Missing Mapbox access token.\",\"Mapbox trace type require a Mapbox access token to be registered.\",\"For example:\",\"  Plotly.plot(gd, data, layout, { mapboxAccessToken: 'my-access-token' });\",\"More info here: https://www.mapbox.com/help/define-access-token/\"].join(\"\\n\"),missingStyleErrorMsg:[\"No valid mapbox style found, please set `mapbox.style` to one of:\",i.join(\", \"),\"or register a Mapbox access token to use a Mapbox-served style.\"].join(\"\\n\"),multipleTokensErrorMsg:[\"Set multiple mapbox access token across different mapbox subplot,\",\"using first token found as mapbox-gl does not allow multipleaccess tokens on the same page.\"].join(\"\\n\"),mapOnErrorMsg:\"Mapbox error.\",mapboxLogo:{path0:\"m 10.5,1.24 c -5.11,0 -9.25,4.15 -9.25,9.25 0,5.1 4.15,9.25 9.25,9.25 5.1,0 9.25,-4.15 9.25,-9.25 0,-5.11 -4.14,-9.25 -9.25,-9.25 z m 4.39,11.53 c -1.93,1.93 -4.78,2.31 -6.7,2.31 -0.7,0 -1.41,-0.05 -2.1,-0.16 0,0 -1.02,-5.64 2.14,-8.81 0.83,-0.83 1.95,-1.28 3.13,-1.28 1.27,0 2.49,0.51 3.39,1.42 1.84,1.84 1.89,4.75 0.14,6.52 z\",path1:\"M 10.5,-0.01 C 4.7,-0.01 0,4.7 0,10.49 c 0,5.79 4.7,10.5 10.5,10.5 5.8,0 10.5,-4.7 10.5,-10.5 C 20.99,4.7 16.3,-0.01 10.5,-0.01 Z m 0,19.75 c -5.11,0 -9.25,-4.15 -9.25,-9.25 0,-5.1 4.14,-9.26 9.25,-9.26 5.11,0 9.25,4.15 9.25,9.25 0,5.13 -4.14,9.26 -9.25,9.26 z\",path2:\"M 14.74,6.25 C 12.9,4.41 9.98,4.35 8.23,6.1 5.07,9.27 6.09,14.91 6.09,14.91 c 0,0 5.64,1.02 8.81,-2.14 C 16.64,11 16.59,8.09 14.74,6.25 Z m -2.27,4.09 -0.91,1.87 -0.9,-1.87 -1.86,-0.91 1.86,-0.9 0.9,-1.87 0.91,1.87 1.86,0.9 z\",polygon:\"11.56,12.21 10.66,10.34 8.8,9.43 10.66,8.53 11.56,6.66 12.47,8.53 14.33,9.43 12.47,10.34\"},styleRules:{map:\"overflow:hidden;position:relative;\",\"missing-css\":\"display:none;\",canary:\"background-color:salmon;\",\"ctrl-bottom-left\":\"position: absolute; pointer-events: none; z-index: 2; bottom: 0; left: 0;\",\"ctrl-bottom-right\":\"position: absolute; pointer-events: none; z-index: 2; right: 0; bottom: 0;\",ctrl:\"clear: both; pointer-events: auto; transform: translate(0, 0);\",\"ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner\":\"display: none;\",\"ctrl-attrib.mapboxgl-compact:hover .mapboxgl-ctrl-attrib-inner\":\"display: block; margin-top:2px\",\"ctrl-attrib.mapboxgl-compact:hover\":\"padding: 2px 24px 2px 4px; visibility: visible; margin-top: 6px;\",\"ctrl-attrib.mapboxgl-compact::after\":'content: \"\"; cursor: pointer; position: absolute; background-image: url(\\'data:image/svg+xml;charset=utf-8,%3Csvg viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"%3E %3Cpath fill=\"%23333333\" fill-rule=\"evenodd\" d=\"M4,10a6,6 0 1,0 12,0a6,6 0 1,0 -12,0 M9,7a1,1 0 1,0 2,0a1,1 0 1,0 -2,0 M9,10a1,1 0 1,1 2,0l0,3a1,1 0 1,1 -2,0\"/%3E %3C/svg%3E\\'); background-color: rgba(255, 255, 255, 0.5); width: 24px; height: 24px; box-sizing: border-box; border-radius: 12px;',\"ctrl-attrib.mapboxgl-compact\":\"min-height: 20px; padding: 0; margin: 10px; position: relative; background-color: #fff; border-radius: 3px 12px 12px 3px;\",\"ctrl-bottom-right > .mapboxgl-ctrl-attrib.mapboxgl-compact::after\":\"bottom: 0; right: 0\",\"ctrl-bottom-left > .mapboxgl-ctrl-attrib.mapboxgl-compact::after\":\"bottom: 0; left: 0\",\"ctrl-bottom-left .mapboxgl-ctrl\":\"margin: 0 0 10px 10px; float: left;\",\"ctrl-bottom-right .mapboxgl-ctrl\":\"margin: 0 10px 10px 0; float: right;\",\"ctrl-attrib\":\"color: rgba(0, 0, 0, 0.75); text-decoration: none; font-size: 12px\",\"ctrl-attrib a\":\"color: rgba(0, 0, 0, 0.75); text-decoration: none; font-size: 12px\",\"ctrl-attrib a:hover\":\"color: inherit; text-decoration: underline;\",\"ctrl-attrib .mapbox-improve-map\":\"font-weight: bold; margin-left: 2px;\",\"attrib-empty\":\"display: none;\",\"ctrl-logo\":'display:block; width: 21px; height: 21px; background-image: url(\\'data:image/svg+xml;charset=utf-8,%3C?xml version=\"1.0\" encoding=\"utf-8\"?%3E %3Csvg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 21 21\" style=\"enable-background:new 0 0 21 21;\" xml:space=\"preserve\"%3E%3Cg transform=\"translate(0,0.01)\"%3E%3Cpath d=\"m 10.5,1.24 c -5.11,0 -9.25,4.15 -9.25,9.25 0,5.1 4.15,9.25 9.25,9.25 5.1,0 9.25,-4.15 9.25,-9.25 0,-5.11 -4.14,-9.25 -9.25,-9.25 z m 4.39,11.53 c -1.93,1.93 -4.78,2.31 -6.7,2.31 -0.7,0 -1.41,-0.05 -2.1,-0.16 0,0 -1.02,-5.64 2.14,-8.81 0.83,-0.83 1.95,-1.28 3.13,-1.28 1.27,0 2.49,0.51 3.39,1.42 1.84,1.84 1.89,4.75 0.14,6.52 z\" style=\"opacity:0.9;fill:%23ffffff;enable-background:new\" class=\"st0\"/%3E%3Cpath d=\"M 10.5,-0.01 C 4.7,-0.01 0,4.7 0,10.49 c 0,5.79 4.7,10.5 10.5,10.5 5.8,0 10.5,-4.7 10.5,-10.5 C 20.99,4.7 16.3,-0.01 10.5,-0.01 Z m 0,19.75 c -5.11,0 -9.25,-4.15 -9.25,-9.25 0,-5.1 4.14,-9.26 9.25,-9.26 5.11,0 9.25,4.15 9.25,9.25 0,5.13 -4.14,9.26 -9.25,9.26 z\" style=\"opacity:0.35;enable-background:new\" class=\"st1\"/%3E%3Cpath d=\"M 14.74,6.25 C 12.9,4.41 9.98,4.35 8.23,6.1 5.07,9.27 6.09,14.91 6.09,14.91 c 0,0 5.64,1.02 8.81,-2.14 C 16.64,11 16.59,8.09 14.74,6.25 Z m -2.27,4.09 -0.91,1.87 -0.9,-1.87 -1.86,-0.91 1.86,-0.9 0.9,-1.87 0.91,1.87 1.86,0.9 z\" style=\"opacity:0.35;enable-background:new\" class=\"st1\"/%3E%3Cpolygon points=\"11.56,12.21 10.66,10.34 8.8,9.43 10.66,8.53 11.56,6.66 12.47,8.53 14.33,9.43 12.47,10.34 \" style=\"opacity:0.9;fill:%23ffffff;enable-background:new\" class=\"st0\"/%3E%3C/g%3E%3C/svg%3E\\')'}}},{}],884:[function(t,e,n){\"use strict\";var r=t(\"../../lib\");e.exports=function(t,e){var n=t.split(\" \"),i=n[0],a=n[1],o=r.isArrayOrTypedArray(e)?r.mean(e):e,s=.5+o/100,l=1.5+o/100,c=[\"\",\"\"],u=[0,0];switch(i){case\"top\":c[0]=\"top\",u[1]=-l;break;case\"bottom\":c[0]=\"bottom\",u[1]=l}switch(a){case\"left\":c[1]=\"right\",u[0]=-s;break;case\"right\":c[1]=\"left\",u[0]=s}return{anchor:c[0]&&c[1]?c.join(\"-\"):c[0]?c[0]:c[1]?c[1]:\"center\",offset:u}}},{\"../../lib\":778}],885:[function(t,e,n){\"use strict\";var r=t(\"mapbox-gl\"),i=t(\"../../lib\"),a=i.strTranslate,o=i.strScale,s=t(\"../../plots/get_data\").getSubplotCalcData,l=t(\"../../constants/xmlns_namespaces\"),c=t(\"d3\"),u=t(\"../../components/drawing\"),h=t(\"../../lib/svg_text_utils\"),d=t(\"./mapbox\"),f=\"mapbox\",p=n.constants=t(\"./constants\");function m(t){return\"string\"==typeof t&&(-1!==p.styleValuesMapbox.indexOf(t)||0===t.indexOf(\"mapbox://\"))}n.name=f,n.attr=\"subplot\",n.idRoot=f,n.idRegex=n.attrRegex=i.counterRegex(f),n.attributes={subplot:{valType:\"subplotid\",dflt:\"mapbox\",editType:\"calc\"}},n.layoutAttributes=t(\"./layout_attributes\"),n.supplyLayoutDefaults=t(\"./layout_defaults\"),n.plot=function(t){var e=t._fullLayout,n=t.calcdata,a=e._subplots.mapbox;if(r.version!==p.requiredVersion)throw new Error(p.wrongVersionErrorMsg);var o=function(t,e){var n=t._fullLayout;if(\"\"===t._context.mapboxAccessToken)return\"\";for(var r=[],a=[],o=!1,s=!1,l=0;l<e.length;l++){var c=n[e[l]],u=c.accesstoken;m(c.style)&&(u?i.pushUnique(r,u):(m(c._input.style)&&(i.error(\"Uses Mapbox map style, but did not set an access token.\"),o=!0),s=!0)),u&&i.pushUnique(a,u)}if(s){var h=o?p.noAccessTokenErrorMsg:p.missingStyleErrorMsg;throw i.error(h),new Error(h)}return r.length?(r.length>1&&i.warn(p.multipleTokensErrorMsg),r[0]):(a.length&&i.log([\"Listed mapbox access token(s)\",a.join(\",\"),\"but did not use a Mapbox map style, ignoring token(s).\"].join(\" \")),\"\")}(t,a);r.accessToken=o;for(var l=0;l<a.length;l++){var c=a[l],u=s(n,f,c),h=e[c],g=h._subplot;g||(g=new d(t,c),e[c]._subplot=g),g.viewInitial||(g.viewInitial={center:i.extendFlat({},h.center),zoom:h.zoom,bearing:h.bearing,pitch:h.pitch}),g.plot(u,e,t._promises)}},n.clean=function(t,e,n,r){for(var i=r._subplots.mapbox||[],a=0;a<i.length;a++){var o=i[a];!e[o]&&r[o]._subplot&&r[o]._subplot.destroy()}},n.toSVG=function(t){for(var e=t._fullLayout,n=e._subplots.mapbox,r=e._size,i=0;i<n.length;i++){var s=e[n[i]],d=s.domain,f=s._subplot.toImage(\"png\");e._glimages.append(\"svg:image\").attr({xmlns:l.svg,\"xlink:href\":f,x:r.l+r.w*d.x[0],y:r.t+r.h*(1-d.y[1]),width:r.w*(d.x[1]-d.x[0]),height:r.h*(d.y[1]-d.y[0]),preserveAspectRatio:\"none\"});var m=c.select(s._subplot.div);if(null!==m.select(\".mapboxgl-ctrl-logo\").node().offsetParent){var g=e._glimages.append(\"g\");g.attr(\"transform\",a(r.l+r.w*d.x[0]+10,r.t+r.h*(1-d.y[0])-31)),g.append(\"path\").attr(\"d\",p.mapboxLogo.path0).style({opacity:.9,fill:\"#ffffff\",\"enable-background\":\"new\"}),g.append(\"path\").attr(\"d\",p.mapboxLogo.path1).style(\"opacity\",.35).style(\"enable-background\",\"new\"),g.append(\"path\").attr(\"d\",p.mapboxLogo.path2).style(\"opacity\",.35).style(\"enable-background\",\"new\"),g.append(\"polygon\").attr(\"points\",p.mapboxLogo.polygon).style({opacity:.9,fill:\"#ffffff\",\"enable-background\":\"new\"})}var y=m.select(\".mapboxgl-ctrl-attrib\").text().replace(\"Improve this map\",\"\"),v=e._glimages.append(\"g\"),_=v.append(\"text\");_.text(y).classed(\"static-attribution\",!0).attr({\"font-size\":12,\"font-family\":\"Arial\",color:\"rgba(0, 0, 0, 0.75)\",\"text-anchor\":\"end\",\"data-unformatted\":y});var b=u.bBox(_.node()),x=r.w*(d.x[1]-d.x[0]);if(b.width>x/2){var w=y.split(\"|\").join(\"<br>\");_.text(w).attr(\"data-unformatted\",w).call(h.convertToTspans,t),b=u.bBox(_.node())}_.attr(\"transform\",a(-3,8-b.height)),v.insert(\"rect\",\".static-attribution\").attr({x:-b.width-6,y:-b.height-3,width:b.width+6,height:b.height+3,fill:\"rgba(255, 255, 255, 0.75)\"});var k=1;b.width+6>x&&(k=x/(b.width+6));var M=[r.l+r.w*d.x[1],r.t+r.h*(1-d.y[0])];v.attr(\"transform\",a(M[0],M[1])+o(k))}},n.updateFx=function(t){for(var e=t._fullLayout,n=e._subplots.mapbox,r=0;r<n.length;r++)e[n[r]]._subplot.updateFx(e)}},{\"../../components/drawing\":665,\"../../constants/xmlns_namespaces\":754,\"../../lib\":778,\"../../lib/svg_text_utils\":803,\"../../plots/get_data\":865,\"./constants\":883,\"./layout_attributes\":887,\"./layout_defaults\":888,\"./mapbox\":889,d3:169,\"mapbox-gl\":473}],886:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../lib/svg_text_utils\").sanitizeHTML,a=t(\"./convert_text_opts\"),o=t(\"./constants\");function s(t,e){this.subplot=t,this.uid=t.uid+\"-\"+e,this.index=e,this.idSource=\"source-\"+this.uid,this.idLayer=o.layoutLayerPrefix+this.uid,this.sourceType=null,this.source=null,this.layerType=null,this.below=null,this.visible=!1}var l=s.prototype;function c(t){if(!t.visible)return!1;var e=t.source;if(Array.isArray(e)&&e.length>0){for(var n=0;n<e.length;n++)if(\"string\"!=typeof e[n]||0===e[n].length)return!1;return!0}return r.isPlainObject(e)||\"string\"==typeof e&&e.length>0}function u(t){var e={},n={};switch(t.type){case\"circle\":r.extendFlat(n,{\"circle-radius\":t.circle.radius,\"circle-color\":t.color,\"circle-opacity\":t.opacity});break;case\"line\":r.extendFlat(n,{\"line-width\":t.line.width,\"line-color\":t.color,\"line-opacity\":t.opacity,\"line-dasharray\":t.line.dash});break;case\"fill\":r.extendFlat(n,{\"fill-color\":t.color,\"fill-outline-color\":t.fill.outlinecolor,\"fill-opacity\":t.opacity});break;case\"symbol\":var i=t.symbol,o=a(i.textposition,i.iconsize);r.extendFlat(e,{\"icon-image\":i.icon+\"-15\",\"icon-size\":i.iconsize/10,\"text-field\":i.text,\"text-size\":i.textfont.size,\"text-anchor\":o.anchor,\"text-offset\":o.offset,\"symbol-placement\":i.placement}),r.extendFlat(n,{\"icon-color\":t.color,\"text-color\":i.textfont.color,\"text-opacity\":t.opacity});break;case\"raster\":r.extendFlat(n,{\"raster-fade-duration\":0,\"raster-opacity\":t.opacity})}return{layout:e,paint:n}}l.update=function(t){this.visible?this.needsNewImage(t)?this.updateImage(t):this.needsNewSource(t)?(this.removeLayer(),this.updateSource(t),this.updateLayer(t)):this.needsNewLayer(t)?this.updateLayer(t):this.updateStyle(t):(this.updateSource(t),this.updateLayer(t)),this.visible=c(t)},l.needsNewImage=function(t){return this.subplot.map.getSource(this.idSource)&&\"image\"===this.sourceType&&\"image\"===t.sourcetype&&(this.source!==t.source||JSON.stringify(this.coordinates)!==JSON.stringify(t.coordinates))},l.needsNewSource=function(t){return this.sourceType!==t.sourcetype||JSON.stringify(this.source)!==JSON.stringify(t.source)||this.layerType!==t.type},l.needsNewLayer=function(t){return this.layerType!==t.type||this.below!==this.subplot.belowLookup[\"layout-\"+this.index]},l.lookupBelow=function(){return this.subplot.belowLookup[\"layout-\"+this.index]},l.updateImage=function(t){this.subplot.map.getSource(this.idSource).updateImage({url:t.source,coordinates:t.coordinates});var e=this.findFollowingMapboxLayerId(this.lookupBelow());null!==e&&this.subplot.map.moveLayer(this.idLayer,e)},l.updateSource=function(t){var e=this.subplot.map;if(e.getSource(this.idSource)&&e.removeSource(this.idSource),this.sourceType=t.sourcetype,this.source=t.source,c(t)){var n=function(t){var e,n=t.sourcetype,r=t.source,a={type:n};return\"geojson\"===n?e=\"data\":\"vector\"===n?e=\"string\"==typeof r?\"url\":\"tiles\":\"raster\"===n?(e=\"tiles\",a.tileSize=256):\"image\"===n&&(e=\"url\",a.coordinates=t.coordinates),a[e]=r,t.sourceattribution&&(a.attribution=i(t.sourceattribution)),a}(t);e.addSource(this.idSource,n)}},l.findFollowingMapboxLayerId=function(t){if(\"traces\"===t)for(var e=this.subplot.getMapLayers(),n=0;n<e.length;n++){var r=e[n].id;if(\"string\"==typeof r&&0===r.indexOf(o.traceLayerPrefix)){t=r;break}}return t},l.updateLayer=function(t){var e=this.subplot,n=u(t),r=this.lookupBelow(),i=this.findFollowingMapboxLayerId(r);this.removeLayer(),c(t)&&e.addLayer({id:this.idLayer,source:this.idSource,\"source-layer\":t.sourcelayer||\"\",type:t.type,minzoom:t.minzoom,maxzoom:t.maxzoom,layout:n.layout,paint:n.paint},i),this.layerType=t.type,this.below=r},l.updateStyle=function(t){if(c(t)){var e=u(t);this.subplot.setOptions(this.idLayer,\"setLayoutProperty\",e.layout),this.subplot.setOptions(this.idLayer,\"setPaintProperty\",e.paint)}},l.removeLayer=function(){var t=this.subplot.map;t.getLayer(this.idLayer)&&t.removeLayer(this.idLayer)},l.dispose=function(){var t=this.subplot.map;t.getLayer(this.idLayer)&&t.removeLayer(this.idLayer),t.getSource(this.idSource)&&t.removeSource(this.idSource)},e.exports=function(t,e,n){var r=new s(t,e);return r.update(n),r}},{\"../../lib\":778,\"../../lib/svg_text_utils\":803,\"./constants\":883,\"./convert_text_opts\":884}],887:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../components/color\").defaultLine,a=t(\"../domain\").attributes,o=t(\"../font_attributes\"),s=t(\"../../traces/scatter/attributes\").textposition,l=t(\"../../plot_api/edit_types\").overrideAll,c=t(\"../../plot_api/plot_template\").templatedArray,u=t(\"./constants\"),h=o({});h.family.dflt=\"Open Sans Regular, Arial Unicode MS Regular\",(e.exports=l({_arrayAttrRegexps:[r.counterRegex(\"mapbox\",\".layers\",!0)],domain:a({name:\"mapbox\"}),accesstoken:{valType:\"string\",noBlank:!0,strict:!0},style:{valType:\"any\",values:u.styleValuesMapbox.concat(u.styleValuesNonMapbox),dflt:u.styleValueDflt},center:{lon:{valType:\"number\",dflt:0},lat:{valType:\"number\",dflt:0}},zoom:{valType:\"number\",dflt:1},bearing:{valType:\"number\",dflt:0},pitch:{valType:\"number\",dflt:0},layers:c(\"layer\",{visible:{valType:\"boolean\",dflt:!0},sourcetype:{valType:\"enumerated\",values:[\"geojson\",\"vector\",\"raster\",\"image\"],dflt:\"geojson\"},source:{valType:\"any\"},sourcelayer:{valType:\"string\",dflt:\"\"},sourceattribution:{valType:\"string\"},type:{valType:\"enumerated\",values:[\"circle\",\"line\",\"fill\",\"symbol\",\"raster\"],dflt:\"circle\"},coordinates:{valType:\"any\"},below:{valType:\"string\"},color:{valType:\"color\",dflt:i},opacity:{valType:\"number\",min:0,max:1,dflt:1},minzoom:{valType:\"number\",min:0,max:24,dflt:0},maxzoom:{valType:\"number\",min:0,max:24,dflt:24},circle:{radius:{valType:\"number\",dflt:15}},line:{width:{valType:\"number\",dflt:2},dash:{valType:\"data_array\"}},fill:{outlinecolor:{valType:\"color\",dflt:i}},symbol:{icon:{valType:\"string\",dflt:\"marker\"},iconsize:{valType:\"number\",dflt:10},text:{valType:\"string\",dflt:\"\"},placement:{valType:\"enumerated\",values:[\"point\",\"line\",\"line-center\"],dflt:\"point\"},textfont:h,textposition:r.extendFlat({},s,{arrayOk:!1})}})},\"plot\",\"from-root\")).uirevision={valType:\"any\",editType:\"none\"}},{\"../../components/color\":643,\"../../lib\":778,\"../../plot_api/edit_types\":810,\"../../plot_api/plot_template\":817,\"../../traces/scatter/attributes\":1187,\"../domain\":855,\"../font_attributes\":856,\"./constants\":883}],888:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../subplot_defaults\"),a=t(\"../array_container_defaults\"),o=t(\"./layout_attributes\");function s(t,e,n,r){n(\"accesstoken\",r.accessToken),n(\"style\"),n(\"center.lon\"),n(\"center.lat\"),n(\"zoom\"),n(\"bearing\"),n(\"pitch\"),a(t,e,{name:\"layers\",handleItemDefaults:l}),e._input=t}function l(t,e){function n(n,i){return r.coerce(t,e,o.layers,n,i)}if(n(\"visible\")){var i,a=n(\"sourcetype\"),s=\"raster\"===a||\"image\"===a;n(\"source\"),n(\"sourceattribution\"),\"vector\"===a&&n(\"sourcelayer\"),\"image\"===a&&n(\"coordinates\"),s&&(i=\"raster\");var l=n(\"type\",i);s&&\"raster\"!==l&&(l=e.type=\"raster\",r.log(\"Source types *raster* and *image* must drawn *raster* layer type.\")),n(\"below\"),n(\"color\"),n(\"opacity\"),n(\"minzoom\"),n(\"maxzoom\"),\"circle\"===l&&n(\"circle.radius\"),\"line\"===l&&(n(\"line.width\"),n(\"line.dash\")),\"fill\"===l&&n(\"fill.outlinecolor\"),\"symbol\"===l&&(n(\"symbol.icon\"),n(\"symbol.iconsize\"),n(\"symbol.text\"),r.coerceFont(n,\"symbol.textfont\"),n(\"symbol.textposition\"),n(\"symbol.placement\"))}}e.exports=function(t,e,n){i(t,e,n,{type:\"mapbox\",attributes:o,handleDefaults:s,partition:\"y\",accessToken:e._mapboxAccessToken})}},{\"../../lib\":778,\"../array_container_defaults\":823,\"../subplot_defaults\":905,\"./layout_attributes\":887}],889:[function(t,e,n){\"use strict\";var r=t(\"mapbox-gl\"),i=t(\"../../lib\"),a=t(\"../../lib/geo_location_utils\"),o=t(\"../../registry\"),s=t(\"../cartesian/axes\"),l=t(\"../../components/dragelement\"),c=t(\"../../components/fx\"),u=t(\"../../components/dragelement/helpers\"),h=u.rectMode,d=u.drawMode,f=u.selectMode,p=t(\"../cartesian/select\").prepSelect,m=t(\"../cartesian/select\").clearSelect,g=t(\"../cartesian/select\").clearSelectionsCache,y=t(\"../cartesian/select\").selectOnClick,v=t(\"./constants\"),_=t(\"./layers\");function b(t,e){this.id=e,this.gd=t;var n=t._fullLayout,r=t._context;this.container=n._glcontainer.node(),this.isStatic=r.staticPlot,this.uid=n._uid+\"-\"+this.id,this.div=null,this.xaxis=null,this.yaxis=null,this.createFramework(n),this.map=null,this.accessToken=null,this.styleObj=null,this.traceHash={},this.layerList=[],this.belowLookup={},this.dragging=!1,this.wheeling=!1}var x=b.prototype;x.plot=function(t,e,n){var r,i=this;i.map&&e[i.id].accesstoken!==i.accessToken&&(i.map.remove(),i.map=null,i.styleObj=null,i.traceHash={},i.layerList=[]),r=new Promise(i.map?function(n,r){i.updateMap(t,e,n,r)}:function(n,r){i.createMap(t,e,n,r)}),n.push(r)},x.createMap=function(t,e,n,i){var o=this,s=e[o.id],l=o.styleObj=k(s.style);o.accessToken=s.accesstoken;var c=o.map=new r.Map({container:o.div,style:l.style,center:T(s.center),zoom:s.zoom,bearing:s.bearing,pitch:s.pitch,interactive:!o.isStatic,preserveDrawingBuffer:o.isStatic,doubleClickZoom:!1,boxZoom:!1,attributionControl:!1}).addControl(new r.AttributionControl({compact:!0}));c._canvas.style.left=\"0px\",c._canvas.style.top=\"0px\",o.rejectOnError(i),o.isStatic||o.initFx(t,e);var u=[];u.push(new Promise((function(t){c.once(\"load\",t)}))),u=u.concat(a.fetchTraceGeoData(t)),Promise.all(u).then((function(){o.fillBelowLookup(t,e),o.updateData(t),o.updateLayout(e),o.resolveOnRender(n)})).catch(i)},x.updateMap=function(t,e,n,r){var i=this,o=i.map,s=e[this.id];i.rejectOnError(r);var l=[],c=k(s.style);JSON.stringify(i.styleObj)!==JSON.stringify(c)&&(i.styleObj=c,o.setStyle(c.style),i.traceHash={},l.push(new Promise((function(t){o.once(\"styledata\",t)})))),l=l.concat(a.fetchTraceGeoData(t)),Promise.all(l).then((function(){i.fillBelowLookup(t,e),i.updateData(t),i.updateLayout(e),i.resolveOnRender(n)})).catch(r)},x.fillBelowLookup=function(t,e){var n,r,i=e[this.id].layers,a=this.belowLookup={},o=!1;for(n=0;n<t.length;n++){var s=t[n][0].trace,l=s._module;\"string\"==typeof s.below?r=s.below:l.getBelow&&(r=l.getBelow(s,this)),\"\"===r&&(o=!0),a[\"trace-\"+s.uid]=r||\"\"}for(n=0;n<i.length;n++){var c=i[n];a[\"layout-\"+n]=r=\"string\"==typeof c.below?c.below:o?\"traces\":\"\"}var u,h,d={};for(u in a)d[r=a[u]]?d[r].push(u):d[r]=[u];for(r in d){var f=d[r];if(f.length>1)for(n=0;n<f.length;n++)0===(u=f[n]).indexOf(\"trace-\")?(h=u.split(\"trace-\")[1],this.traceHash[h]&&(this.traceHash[h].below=null)):0===u.indexOf(\"layout-\")&&(h=u.split(\"layout-\")[1],this.layerList[h]&&(this.layerList[h].below=null))}};var w={choroplethmapbox:0,densitymapbox:1,scattermapbox:2};function k(t){var e={};return i.isPlainObject(t)?(e.id=t.id,e.style=t):\"string\"==typeof t?(e.id=t,e.style=-1!==v.styleValuesMapbox.indexOf(t)?M(t):v.stylesNonMapbox[t]?v.stylesNonMapbox[t]:t):(e.id=v.styleValueDflt,e.style=M(v.styleValueDflt)),e.transition={duration:0,delay:0},e}function M(t){return v.styleUrlPrefix+t+\"-\"+v.styleUrlSuffix}function T(t){return[t.lon,t.lat]}x.updateData=function(t){var e,n,r,i,a=this.traceHash,o=t.slice().sort((function(t,e){return w[t[0].trace.type]-w[e[0].trace.type]}));for(r=0;r<o.length;r++){var s=o[r],l=!1;(e=a[(n=s[0].trace).uid])&&(e.type===n.type?(e.update(s),l=!0):e.dispose()),!l&&n._module&&(a[n.uid]=n._module.plot(this,s))}var c=Object.keys(a);t:for(r=0;r<c.length;r++){var u=c[r];for(i=0;i<t.length;i++)if(u===(n=t[i][0].trace).uid)continue t;(e=a[u]).dispose(),delete a[u]}},x.updateLayout=function(t){var e=this.map,n=t[this.id];this.dragging||this.wheeling||(e.setCenter(T(n.center)),e.setZoom(n.zoom),e.setBearing(n.bearing),e.setPitch(n.pitch)),this.updateLayers(t),this.updateFramework(t),this.updateFx(t),this.map.resize(),this.gd._context._scrollZoom.mapbox?e.scrollZoom.enable():e.scrollZoom.disable()},x.resolveOnRender=function(t){var e=this.map;e.on(\"render\",(function n(){e.loaded()&&(e.off(\"render\",n),setTimeout(t,10))}))},x.rejectOnError=function(t){var e=this.map;function n(){t(new Error(v.mapOnErrorMsg))}e.once(\"error\",n),e.once(\"style.error\",n),e.once(\"source.error\",n),e.once(\"tile.error\",n),e.once(\"layer.error\",n)},x.createFramework=function(t){var e=this,n=e.div=document.createElement(\"div\");n.id=e.uid,n.style.position=\"absolute\",e.container.appendChild(n),e.xaxis={_id:\"x\",c2p:function(t){return e.project(t).x}},e.yaxis={_id:\"y\",c2p:function(t){return e.project(t).y}},e.updateFramework(t),e.mockAxis={type:\"linear\",showexponent:\"all\",exponentformat:\"B\"},s.setConvert(e.mockAxis,t)},x.initFx=function(t,e){var n=this,r=n.gd,i=n.map;function a(){c.loneUnhover(e._hoverlayer)}function s(){var t=n.getView();r.emit(\"plotly_relayouting\",n.getViewEditsWithDerived(t))}i.on(\"moveend\",(function(t){if(n.map){var e=r._fullLayout;if(t.originalEvent||n.wheeling){var i=e[n.id];o.call(\"_storeDirectGUIEdit\",r.layout,e._preGUI,n.getViewEdits(i));var a=n.getView();i._input.center=i.center=a.center,i._input.zoom=i.zoom=a.zoom,i._input.bearing=i.bearing=a.bearing,i._input.pitch=i.pitch=a.pitch,r.emit(\"plotly_relayout\",n.getViewEditsWithDerived(a))}t.originalEvent&&\"mouseup\"===t.originalEvent.type?n.dragging=!1:n.wheeling&&(n.wheeling=!1),e._rehover&&e._rehover()}})),i.on(\"wheel\",(function(){n.wheeling=!0})),i.on(\"mousemove\",(function(t){var e=n.div.getBoundingClientRect(),a=[t.originalEvent.offsetX,t.originalEvent.offsetY];t.target.getBoundingClientRect=function(){return e},n.xaxis.p2c=function(){return i.unproject(a).lng},n.yaxis.p2c=function(){return i.unproject(a).lat},r._fullLayout._rehover=function(){r._fullLayout._hoversubplot===n.id&&r._fullLayout[n.id]&&c.hover(r,t,n.id)},c.hover(r,t,n.id),r._fullLayout._hoversubplot=n.id})),i.on(\"dragstart\",(function(){n.dragging=!0,a()})),i.on(\"zoomstart\",a),i.on(\"mouseout\",(function(){r._fullLayout._hoversubplot=null})),i.on(\"drag\",s),i.on(\"zoom\",s),i.on(\"dblclick\",(function(){var t=r._fullLayout[n.id];o.call(\"_storeDirectGUIEdit\",r.layout,r._fullLayout._preGUI,n.getViewEdits(t));var e=n.viewInitial;i.setCenter(T(e.center)),i.setZoom(e.zoom),i.setBearing(e.bearing),i.setPitch(e.pitch);var a=n.getView();t._input.center=t.center=a.center,t._input.zoom=t.zoom=a.zoom,t._input.bearing=t.bearing=a.bearing,t._input.pitch=t.pitch=a.pitch,r.emit(\"plotly_doubleclick\",null),r.emit(\"plotly_relayout\",n.getViewEditsWithDerived(a))})),n.clearSelect=function(){g(n.dragOptions),m(n.dragOptions.gd)},n.onClickInPanFn=function(t){return function(e){var i=r._fullLayout.clickmode;i.indexOf(\"select\")>-1&&y(e.originalEvent,r,[n.xaxis],[n.yaxis],n.id,t),i.indexOf(\"event\")>-1&&c.click(r,e.originalEvent)}}},x.updateFx=function(t){var e=this,n=e.map,r=e.gd;if(!e.isStatic){var a,o=t.dragmode;a=h(o)?function(t,n){(t.range={})[e.id]=[s([n.xmin,n.ymin]),s([n.xmax,n.ymax])]}:function(t,n,r){(t.lassoPoints={})[e.id]=r.filtered.map(s)},e.dragOptions=i.extendDeep(e.dragOptions||{},{dragmode:t.dragmode,element:e.div,gd:r,plotinfo:{id:e.id,domain:t[e.id].domain,xaxis:e.xaxis,yaxis:e.yaxis,fillRangeItems:a},xaxes:[e.xaxis],yaxes:[e.yaxis],subplot:e.id}),n.off(\"click\",e.onClickInPanHandler),f(o)||d(o)?(n.dragPan.disable(),n.on(\"zoomstart\",e.clearSelect),e.dragOptions.prepFn=function(t,n,r){p(t,n,r,e.dragOptions,o)},l.init(e.dragOptions)):(n.dragPan.enable(),n.off(\"zoomstart\",e.clearSelect),e.div.onmousedown=null,e.onClickInPanHandler=e.onClickInPanFn(e.dragOptions),n.on(\"click\",e.onClickInPanHandler))}function s(t){var n=e.map.unproject(t);return[n.lng,n.lat]}},x.updateFramework=function(t){var e=t[this.id].domain,n=t._size,r=this.div.style;r.width=n.w*(e.x[1]-e.x[0])+\"px\",r.height=n.h*(e.y[1]-e.y[0])+\"px\",r.left=n.l+e.x[0]*n.w+\"px\",r.top=n.t+(1-e.y[1])*n.h+\"px\",this.xaxis._offset=n.l+e.x[0]*n.w,this.xaxis._length=n.w*(e.x[1]-e.x[0]),this.yaxis._offset=n.t+(1-e.y[1])*n.h,this.yaxis._length=n.h*(e.y[1]-e.y[0])},x.updateLayers=function(t){var e,n=t[this.id].layers,r=this.layerList;if(n.length!==r.length){for(e=0;e<r.length;e++)r[e].dispose();for(r=this.layerList=[],e=0;e<n.length;e++)r.push(_(this,e,n[e]))}else for(e=0;e<n.length;e++)r[e].update(n[e])},x.destroy=function(){this.map&&(this.map.remove(),this.map=null,this.container.removeChild(this.div))},x.toImage=function(){return this.map.stop(),this.map.getCanvas().toDataURL()},x.setOptions=function(t,e,n){for(var r in n)this.map[e](t,r,n[r])},x.getMapLayers=function(){return this.map.getStyle().layers},x.addLayer=function(t,e){var n=this.map;if(\"string\"==typeof e){if(\"\"===e)return void n.addLayer(t,e);for(var r=this.getMapLayers(),a=0;a<r.length;a++)if(e===r[a].id)return void n.addLayer(t,e);i.warn([\"Trying to add layer with *below* value\",e,\"referencing a layer that does not exist\",\"or that does not yet exist.\"].join(\" \"))}n.addLayer(t)},x.project=function(t){return this.map.project(new r.LngLat(t[0],t[1]))},x.getView=function(){var t=this.map,e=t.getCenter(),n={lon:e.lng,lat:e.lat},r=t.getCanvas(),i=r.width,a=r.height;return{center:n,zoom:t.getZoom(),bearing:t.getBearing(),pitch:t.getPitch(),_derived:{coordinates:[t.unproject([0,0]).toArray(),t.unproject([i,0]).toArray(),t.unproject([i,a]).toArray(),t.unproject([0,a]).toArray()]}}},x.getViewEdits=function(t){for(var e=this.id,n=[\"center\",\"zoom\",\"bearing\",\"pitch\"],r={},i=0;i<n.length;i++){var a=n[i];r[e+\".\"+a]=t[a]}return r},x.getViewEditsWithDerived=function(t){var e=this.id,n=this.getViewEdits(t);return n[e+\"._derived\"]=t._derived,n},e.exports=b},{\"../../components/dragelement\":662,\"../../components/dragelement/helpers\":661,\"../../components/fx\":683,\"../../lib\":778,\"../../lib/geo_location_utils\":771,\"../../registry\":911,\"../cartesian/axes\":828,\"../cartesian/select\":847,\"./constants\":883,\"./layers\":886,\"mapbox-gl\":473}],890:[function(t,e,n){\"use strict\";e.exports=function(t){var e=t.editType;return{t:{valType:\"number\",dflt:0,editType:e},r:{valType:\"number\",dflt:0,editType:e},b:{valType:\"number\",dflt:0,editType:e},l:{valType:\"number\",dflt:0,editType:e},editType:e}}},{}],891:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"d3-time-format\").timeFormatLocale,a=t(\"fast-isnumeric\"),o=t(\"../registry\"),s=t(\"../plot_api/plot_schema\"),l=t(\"../plot_api/plot_template\"),c=t(\"../lib\"),u=t(\"../components/color\"),h=t(\"../constants/numerical\").BADNUM,d=t(\"./cartesian/axis_ids\"),f=t(\"./cartesian/handle_outline\").clearSelect,p=t(\"./animation_attributes\"),m=t(\"./frame_attributes\"),g=t(\"../plots/get_data\").getModuleCalcData,y=c.relinkPrivateKeys,v=c._,_=e.exports={};c.extendFlat(_,o),_.attributes=t(\"./attributes\"),_.attributes.type.values=_.allTypes,_.fontAttrs=t(\"./font_attributes\"),_.layoutAttributes=t(\"./layout_attributes\"),_.fontWeight=\"normal\";var b=_.transformsRegistry,x=t(\"./command\");_.executeAPICommand=x.executeAPICommand,_.computeAPICommandBindings=x.computeAPICommandBindings,_.manageCommandObserver=x.manageCommandObserver,_.hasSimpleAPICommandBindings=x.hasSimpleAPICommandBindings,_.redrawText=function(t){var e=(t=c.getGraphDiv(t))._fullLayout||{};if(e._has&&e._has(\"polar\")||!t.data||!t.data[0]||!t.data[0].r)return new Promise((function(e){setTimeout((function(){o.getComponentMethod(\"annotations\",\"draw\")(t),o.getComponentMethod(\"legend\",\"draw\")(t),o.getComponentMethod(\"colorbar\",\"draw\")(t),e(_.previousPromises(t))}),300)}))},_.resize=function(t){var e;t=c.getGraphDiv(t);var n=new Promise((function(n,r){t&&!c.isHidden(t)||r(new Error(\"Resize must be passed a displayed plot div element.\")),t._redrawTimer&&clearTimeout(t._redrawTimer),t._resolveResize&&(e=t._resolveResize),t._resolveResize=n,t._redrawTimer=setTimeout((function(){if(!t.layout||t.layout.width&&t.layout.height||c.isHidden(t))n(t);else{delete t.layout.width,delete t.layout.height;var e=t.changed;t.autoplay=!0,o.call(\"relayout\",t,{autosize:!0}).then((function(){t.changed=e,t._resolveResize===n&&(delete t._resolveResize,n(t))}))}}),100)}));return e&&e(n),n},_.previousPromises=function(t){if((t._promises||[]).length)return Promise.all(t._promises).then((function(){t._promises=[]}))},_.addLinks=function(t){if(t._context.showLink||t._context.showSources){var e=t._fullLayout,n=c.ensureSingle(e._paper,\"text\",\"js-plot-link-container\",(function(t){t.style({\"font-family\":'\"Open Sans\", Arial, sans-serif',\"font-size\":\"12px\",fill:u.defaultLine,\"pointer-events\":\"all\"}).each((function(){var t=r.select(this);t.append(\"tspan\").classed(\"js-link-to-tool\",!0),t.append(\"tspan\").classed(\"js-link-spacer\",!0),t.append(\"tspan\").classed(\"js-sourcelinks\",!0)}))})),i=n.node(),a={y:e._paper.attr(\"height\")-9};document.body.contains(i)&&i.getComputedTextLength()>=e.width-20?(a[\"text-anchor\"]=\"start\",a.x=5):(a[\"text-anchor\"]=\"end\",a.x=e._paper.attr(\"width\")-7),n.attr(a);var o=n.select(\".js-link-to-tool\"),s=n.select(\".js-link-spacer\"),l=n.select(\".js-sourcelinks\");t._context.showSources&&t._context.showSources(t),t._context.showLink&&function(t,e){e.text(\"\");var n=e.append(\"a\").attr({\"xlink:xlink:href\":\"#\",class:\"link--impt link--embedview\",\"font-weight\":\"bold\"}).text(t._context.linkText+\" \"+String.fromCharCode(187));if(t._context.sendData)n.on(\"click\",(function(){_.sendDataToCloud(t)}));else{var r=window.location.pathname.split(\"/\"),i=window.location.search;n.attr({\"xlink:xlink:show\":\"new\",\"xlink:xlink:href\":\"/\"+r[2].split(\".\")[0]+\"/\"+r[1]+i})}}(t,o),s.text(o.text()&&l.text()?\" - \":\"\")}},_.sendDataToCloud=function(t){var e=(window.PLOTLYENV||{}).BASE_URL||t._context.plotlyServerURL;if(e){t.emit(\"plotly_beforeexport\");var n=r.select(t).append(\"div\").attr(\"id\",\"hiddenform\").style(\"display\",\"none\"),i=n.append(\"form\").attr({action:e+\"/external\",method:\"post\",target:\"_blank\"});return i.append(\"input\").attr({type:\"text\",name:\"data\"}).node().value=_.graphJson(t,!1,\"keepdata\"),i.node().submit(),n.remove(),t.emit(\"plotly_afterexport\"),!1}};var w=[\"days\",\"shortDays\",\"months\",\"shortMonths\",\"periods\",\"dateTime\",\"date\",\"time\",\"decimal\",\"thousands\",\"grouping\",\"currency\"],k=[\"year\",\"month\",\"dayMonth\",\"dayMonthYear\"];function M(t,e){var n=t._context.locale;n||(n=\"en-US\");var r=!1,i={};function a(t){for(var n=!0,a=0;a<e.length;a++){var o=e[a];i[o]||(t[o]?i[o]=t[o]:n=!1)}n&&(r=!0)}for(var s=0;s<2;s++){for(var l=t._context.locales,c=0;c<2;c++){var u=(l[n]||{}).format;if(u&&(a(u),r))break;l=o.localeRegistry}var h=n.split(\"-\")[0];if(r||h===n)break;n=h}return r||a(o.localeRegistry.en.format),i}function T(t,e){var n={_fullLayout:e},r=\"x\"===t._id.charAt(0),i=t._mainAxis._anchorAxis,a=\"\",o=\"\",s=\"\";if(i&&(s=i._mainAxis._id,a=r?t._id+s:s+t._id),!a||!e._plots[a]){a=\"\";for(var l=t._counterAxes,c=0;c<l.length;c++){var u=l[c],h=r?t._id+u:u+t._id;o||(o=h);var f=d.getFromId(n,u);if(s&&f.overlaying===s){a=h;break}}}return a||o}function S(t){var e=t.transforms;if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n++){var r=e[n],i=r._module||b[r.type];if(i&&i.makesData)return!0}return!1}function A(t,e,n,r){for(var i=t.transforms,a=[t],o=0;o<i.length;o++){var s=i[o],l=b[s.type];l&&l.transform&&(a=l.transform(a,{transform:s,fullTrace:t,fullData:e,layout:n,fullLayout:r,transformIndex:o}))}return a}function L(t){return\"string\"==typeof t&&\"px\"===t.substr(t.length-2)&&parseFloat(t)}function C(t){var e=t.margin;if(!t._size){var n=t._size={l:Math.round(e.l),r:Math.round(e.r),t:Math.round(e.t),b:Math.round(e.b),p:Math.round(e.pad)};n.w=Math.round(t.width)-n.l-n.r,n.h=Math.round(t.height)-n.t-n.b}t._pushmargin||(t._pushmargin={}),t._pushmarginIds||(t._pushmarginIds={})}_.supplyDefaults=function(t,e){var n=e&&e.skipUpdateCalc,a=t._fullLayout||{};if(a._skipDefaults)delete a._skipDefaults;else{var s,l=t._fullLayout={},u=t.layout||{},h=t._fullData||[],d=t._fullData=[],p=t.data||[],m=t.calcdata||[],g=t._context||{};t._transitionData||_.createTransitionData(t),l._dfltTitle={plot:v(t,\"Click to enter Plot title\"),x:v(t,\"Click to enter X axis title\"),y:v(t,\"Click to enter Y axis title\"),colorbar:v(t,\"Click to enter Colorscale title\"),annotation:v(t,\"new text\")},l._traceWord=v(t,\"trace\");var b=M(t,w);if(l._mapboxAccessToken=g.mapboxAccessToken,a._initialAutoSizeIsDone){var x=a.width,T=a.height;_.supplyLayoutGlobalDefaults(u,l,b),u.width||(l.width=x),u.height||(l.height=T),_.sanitizeMargins(l)}else{_.supplyLayoutGlobalDefaults(u,l,b);var S=!u.width||!u.height,A=l.autosize;S&&(A||g.autosizable)?_.plotAutoSize(t,u,l):S&&_.sanitizeMargins(l),!A&&S&&(u.width=l.width,u.height=l.height)}l._d3locale=function(t,e){return t.decimal=e.charAt(0),t.thousands=e.charAt(1),{numberFormat:r.locale(t).numberFormat,timeFormat:i(t).utcFormat}}(b,l.separators),l._extraFormat=M(t,k),l._initialAutoSizeIsDone=!0,l._dataLength=p.length,l._modules=[],l._visibleModules=[],l._basePlotModules=[];var L=l._subplots=function(){var t,e,n=o.collectableSubplotTypes,r={};if(!n){n=[];var i=o.subplotsRegistry;for(var a in i){var s=i[a].attr;if(s&&(n.push(a),Array.isArray(s)))for(e=0;e<s.length;e++)c.pushUnique(n,s[e])}}for(t=0;t<n.length;t++)r[n[t]]=[];return r}(),E=l._splomAxes={x:{},y:{}},O=l._splomSubplots={};l._splomGridDflt={},l._scatterStackOpts={},l._firstScatter={},l._alignmentOpts={},l._colorAxes={},l._requestRangeslider={},l._traceUids=function(t,e){var n,r,i=e.length,a=[];for(n=0;n<t.length;n++){var o=t[n]._fullInput;o!==r&&a.push(o),r=o}var s=a.length,l=new Array(i),u={};function h(t,e){l[e]=t,u[t]=1}function d(t,e){if(t&&\"string\"==typeof t&&!u[t])return h(t,e),!0}for(n=0;n<i;n++){var f=e[n].uid;\"number\"==typeof f&&(f=String(f)),d(f,n)||n<s&&d(a[n].uid,n)||h(c.randstr(u),n)}return l}(h,p),l._globalTransforms=(t._context||{}).globalTransforms,_.supplyDataDefaults(p,d,u,l);var D=Object.keys(E.x),I=Object.keys(E.y);if(D.length>1&&I.length>1){for(o.getComponentMethod(\"grid\",\"sizeDefaults\")(u,l),s=0;s<D.length;s++)c.pushUnique(L.xaxis,D[s]);for(s=0;s<I.length;s++)c.pushUnique(L.yaxis,I[s]);for(var P in O)c.pushUnique(L.cartesian,P)}if(l._has=_._hasPlotType.bind(l),h.length===d.length)for(s=0;s<d.length;s++)y(d[s],h[s]);_.supplyLayoutModuleDefaults(u,l,d,t._transitionData);var R=l._visibleModules,z=[];for(s=0;s<R.length;s++){var j=R[s].crossTraceDefaults;j&&c.pushUnique(z,j)}for(s=0;s<z.length;s++)z[s](d,l);l._hasOnlyLargeSploms=1===l._basePlotModules.length&&\"splom\"===l._basePlotModules[0].name&&D.length>15&&I.length>15&&0===l.shapes.length&&0===l.images.length,l._hasCartesian=l._has(\"cartesian\"),l._hasGeo=l._has(\"geo\"),l._hasGL3D=l._has(\"gl3d\"),l._hasGL2D=l._has(\"gl2d\"),l._hasTernary=l._has(\"ternary\"),l._hasPie=l._has(\"pie\"),_.linkSubplots(d,l,h,a),_.cleanPlot(d,l,h,a);var F=!(!a._has||!a._has(\"gl2d\")),N=!(!l._has||!l._has(\"gl2d\")),B=!(!a._has||!a._has(\"cartesian\"))||F,Y=!(!l._has||!l._has(\"cartesian\"))||N;B&&!Y?a._bgLayer.remove():Y&&!B&&(l._shouldCreateBgLayer=!0),a._zoomlayer&&!t._dragging&&f({_fullLayout:a}),function(t,e){var n,r=[];e.meta&&(n=e._meta={meta:e.meta,layout:{meta:e.meta}});for(var i=0;i<t.length;i++){var a=t[i];a.meta?r[a.index]=a._meta={meta:a.meta}:e.meta&&(a._meta={meta:e.meta}),e.meta&&(a._meta.layout={meta:e.meta})}r.length&&(n||(n=e._meta={}),n.data=r)}(d,l),y(l,a),o.getComponentMethod(\"colorscale\",\"crossTraceDefaults\")(d,l),l._preGUI||(l._preGUI={}),l._tracePreGUI||(l._tracePreGUI={});var H,V=l._tracePreGUI,U={};for(H in V)U[H]=\"old\";for(s=0;s<d.length;s++)U[H=d[s]._fullInput.uid]||(V[H]={}),U[H]=\"new\";for(H in U)\"old\"===U[H]&&delete V[H];C(l),o.getComponentMethod(\"rangeslider\",\"makeData\")(l),n||m.length!==d.length||_.supplyDefaultsUpdateCalc(m,d)}},_.supplyDefaultsUpdateCalc=function(t,e){for(var n=0;n<e.length;n++){var r=e[n],i=(t[n]||[])[0];if(i&&i.trace){var a=i.trace;if(a._hasCalcTransform){var o,s,l,u=a._arrayAttrs;for(o=0;o<u.length;o++)l=c.nestedProperty(a,s=u[o]).get().slice(),c.nestedProperty(r,s).set(l)}i.trace=r}}},_.createTransitionData=function(t){t._transitionData||(t._transitionData={}),t._transitionData._frames||(t._transitionData._frames=[]),t._transitionData._frameHash||(t._transitionData._frameHash={}),t._transitionData._counter||(t._transitionData._counter=0),t._transitionData._interruptCallbacks||(t._transitionData._interruptCallbacks=[])},_._hasPlotType=function(t){var e,n=this._basePlotModules||[];for(e=0;e<n.length;e++)if(n[e].name===t)return!0;var r=this._modules||[];for(e=0;e<r.length;e++){var i=r[e].name;if(i===t)return!0;var a=o.modules[i];if(a&&a.categories[t])return!0}return!1},_.cleanPlot=function(t,e,n,r){var i,a,o=r._basePlotModules||[];for(i=0;i<o.length;i++){var s=o[i];s.clean&&s.clean(t,e,n,r)}var l=r._has&&r._has(\"gl\"),c=e._has&&e._has(\"gl\");l&&!c&&void 0!==r._glcontainer&&(r._glcontainer.selectAll(\".gl-canvas\").remove(),r._glcontainer.selectAll(\".no-webgl\").remove(),r._glcanvas=null);var u=!!r._infolayer;t:for(i=0;i<n.length;i++){var h=n[i].uid;for(a=0;a<t.length;a++)if(h===t[a].uid)continue t;u&&r._infolayer.select(\".cb\"+h).remove()}},_.linkSubplots=function(t,e,n,r){var i,a,s=r._plots||{},l=e._plots={},u=e._subplots,h={_fullData:t,_fullLayout:e},f=u.cartesian.concat(u.gl2d||[]);for(i=0;i<f.length;i++){var p,m=f[i],g=s[m],y=d.getFromId(h,m,\"x\"),v=d.getFromId(h,m,\"y\");for(g?p=l[m]=g:(p=l[m]={}).id=m,y._counterAxes.push(v._id),v._counterAxes.push(y._id),y._subplotsWith.push(m),v._subplotsWith.push(m),p.xaxis=y,p.yaxis=v,p._hasClipOnAxisFalse=!1,a=0;a<t.length;a++){var _=t[a];if(_.xaxis===p.xaxis._id&&_.yaxis===p.yaxis._id&&!1===_.cliponaxis){p._hasClipOnAxisFalse=!0;break}}}var b,x=d.list(h,null,!0);for(i=0;i<x.length;i++){var w=null;(b=x[i]).overlaying&&(w=d.getFromId(h,b.overlaying))&&w.overlaying&&(b.overlaying=!1,w=null),b._mainAxis=w||b,w&&(b.domain=w.domain.slice()),b._anchorAxis=\"free\"===b.anchor?null:d.getFromId(h,b.anchor)}for(i=0;i<x.length;i++)if((b=x[i])._counterAxes.sort(d.idSort),b._subplotsWith.sort(c.subplotSort),b._mainSubplot=T(b,e),b._counterAxes.length&&(b.spikemode&&-1!==b.spikemode.indexOf(\"across\")||b.automargin&&b.mirror&&\"free\"!==b.anchor||o.getComponentMethod(\"rangeslider\",\"isVisible\")(b))){var k=1,M=0;for(a=0;a<b._counterAxes.length;a++){var S=d.getFromId(h,b._counterAxes[a]);k=Math.min(k,S.domain[0]),M=Math.max(M,S.domain[1])}k<M&&(b._counterDomainMin=k,b._counterDomainMax=M)}},_.clearExpandedTraceDefaultColors=function(t){var e,n,r;for(n=[],(e=t._module._colorAttrs)||(t._module._colorAttrs=e=[],s.crawl(t._module.attributes,(function(t,r,i,a){n[a]=r,n.length=a+1,\"color\"===t.valType&&void 0===t.dflt&&e.push(n.join(\".\"))}))),r=0;r<e.length;r++)c.nestedProperty(t,\"_input.\"+e[r]).get()||c.nestedProperty(t,e[r]).set(null)},_.supplyDataDefaults=function(t,e,n,r){var i,a,s,u=r._modules,h=r._visibleModules,d=r._basePlotModules,f=0,p=0;function m(t){e.push(t);var n=t._module;n&&(c.pushUnique(u,n),!0===t.visible&&c.pushUnique(h,n),c.pushUnique(d,t._module.basePlotModule),f++,!1!==t._input.visible&&p++)}r._transformModules=[];var g={},v=[],b=l.traceTemplater((n.template||{}).data||{});for(i=0;i<t.length;i++){if((a=b.newTrace(s=t[i])).uid=r._traceUids[i],_.supplyTraceDefaults(s,a,p,r,i),a.index=i,a._input=s,a._expandedIndex=f,a.transforms&&a.transforms.length)for(var x=!1!==s.visible&&!1===a.visible,w=A(a,e,n,r),k=0;k<w.length;k++){var M=w[k],T={_template:a._template,type:a.type,uid:a.uid+k};x&&!1===M.visible&&delete M.visible,_.supplyTraceDefaults(M,T,f,r,i),y(T,M),T.index=i,T._input=s,T._fullInput=a,T._expandedIndex=f,T._expandedInput=M,m(T)}else a._fullInput=a,a._expandedInput=a,m(a);o.traceIs(a,\"carpetAxis\")&&(g[a.carpet]=a),o.traceIs(a,\"carpetDependent\")&&v.push(i)}for(i=0;i<v.length;i++)if((a=e[v[i]]).visible){var S=g[a.carpet];a._carpet=S,S&&S.visible?(a.xaxis=S.xaxis,a.yaxis=S.yaxis):a.visible=!1}},_.supplyAnimationDefaults=function(t){var e;t=t||{};var n={};function r(e,r){return c.coerce(t||{},n,p,e,r)}if(r(\"mode\"),r(\"direction\"),r(\"fromcurrent\"),Array.isArray(t.frame))for(n.frame=[],e=0;e<t.frame.length;e++)n.frame[e]=_.supplyAnimationFrameDefaults(t.frame[e]||{});else n.frame=_.supplyAnimationFrameDefaults(t.frame||{});if(Array.isArray(t.transition))for(n.transition=[],e=0;e<t.transition.length;e++)n.transition[e]=_.supplyAnimationTransitionDefaults(t.transition[e]||{});else n.transition=_.supplyAnimationTransitionDefaults(t.transition||{});return n},_.supplyAnimationFrameDefaults=function(t){var e={};function n(n,r){return c.coerce(t||{},e,p.frame,n,r)}return n(\"duration\"),n(\"redraw\"),e},_.supplyAnimationTransitionDefaults=function(t){var e={};function n(n,r){return c.coerce(t||{},e,p.transition,n,r)}return n(\"duration\"),n(\"easing\"),e},_.supplyFrameDefaults=function(t){var e={};function n(n,r){return c.coerce(t,e,m,n,r)}return n(\"group\"),n(\"name\"),n(\"traces\"),n(\"baseframe\"),n(\"data\"),n(\"layout\"),e},_.supplyTraceDefaults=function(t,e,n,r,i){var a,s=r.colorway||u.defaults,l=s[n%s.length];function h(n,r){return c.coerce(t,e,_.attributes,n,r)}var d=h(\"visible\");h(\"type\"),h(\"name\",r._traceWord+\" \"+i),h(\"uirevision\",r.uirevision);var f=_.getModule(e);if(e._module=f,f){var p=f.basePlotModule,m=p.attr,g=p.attributes;if(m&&g){var y=r._subplots,v=\"\";if(d||\"gl2d\"!==p.name){if(Array.isArray(m))for(a=0;a<m.length;a++){var b=m[a],x=c.coerce(t,e,g,b);y[b]&&c.pushUnique(y[b],x),v+=x}else v=c.coerce(t,e,g,m);y[p.name]&&c.pushUnique(y[p.name],v)}}}return d&&(h(\"customdata\"),h(\"ids\"),h(\"meta\"),o.traceIs(e,\"showLegend\")?(c.coerce(t,e,f.attributes.showlegend?f.attributes:_.attributes,\"showlegend\"),h(\"legendgroup\"),e._dfltShowLegend=!0):e._dfltShowLegend=!1,f&&f.supplyDefaults(t,e,l,r),o.traceIs(e,\"noOpacity\")||h(\"opacity\"),o.traceIs(e,\"notLegendIsolatable\")&&(e.visible=!!e.visible),o.traceIs(e,\"noHover\")||(e.hovertemplate||c.coerceHoverinfo(t,e,r),\"parcats\"!==e.type&&o.getComponentMethod(\"fx\",\"supplyDefaults\")(t,e,l,r)),f&&f.selectPoints&&h(\"selectedpoints\"),_.supplyTransformDefaults(t,e,r)),e},_.hasMakesDataTransform=S,_.supplyTransformDefaults=function(t,e,n){if(e._length||S(t)){var r=n._globalTransforms||[],i=n._transformModules||[];if(Array.isArray(t.transforms)||0!==r.length)for(var a=r.concat(t.transforms||[]),o=e.transforms=[],s=0;s<a.length;s++){var l,u=a[s],h=u.type,d=b[h],f=!(u._module&&u._module===d),p=d&&\"function\"==typeof d.transform;d||c.warn(\"Unrecognized transform type \"+h+\".\"),d&&d.supplyDefaults&&(f||p)?((l=d.supplyDefaults(u,e,n,t)).type=h,l._module=d,c.pushUnique(i,d)):l=c.extendFlat({},u),o.push(l)}}},_.supplyLayoutGlobalDefaults=function(t,e,n){function r(n,r){return c.coerce(t,e,_.layoutAttributes,n,r)}var i=t.template;c.isPlainObject(i)&&(e.template=i,e._template=i.layout,e._dataTemplate=i.data),r(\"autotypenumbers\");var a=c.coerceFont(r,\"font\");r(\"title.text\",e._dfltTitle.plot),c.coerceFont(r,\"title.font\",{family:a.family,size:Math.round(1.4*a.size),color:a.color}),r(\"title.xref\"),r(\"title.yref\"),r(\"title.x\"),r(\"title.y\"),r(\"title.xanchor\"),r(\"title.yanchor\"),r(\"title.pad.t\"),r(\"title.pad.r\"),r(\"title.pad.b\"),r(\"title.pad.l\"),r(\"uniformtext.mode\")&&r(\"uniformtext.minsize\"),r(\"autosize\",!(t.width&&t.height)),r(\"width\"),r(\"height\"),r(\"margin.l\"),r(\"margin.r\"),r(\"margin.t\"),r(\"margin.b\"),r(\"margin.pad\"),r(\"margin.autoexpand\"),t.width&&t.height&&_.sanitizeMargins(e),o.getComponentMethod(\"grid\",\"sizeDefaults\")(t,e),r(\"paper_bgcolor\"),r(\"separators\",n.decimal+n.thousands),r(\"hidesources\"),r(\"colorway\"),r(\"datarevision\");var s=r(\"uirevision\");r(\"editrevision\",s),r(\"selectionrevision\",s),r(\"modebar.orientation\"),r(\"modebar.bgcolor\",u.addOpacity(e.paper_bgcolor,.5));var l=u.contrast(u.rgb(e.modebar.bgcolor));r(\"modebar.color\",u.addOpacity(l,.3)),r(\"modebar.activecolor\",u.addOpacity(l,.7)),r(\"modebar.uirevision\",s),o.getComponentMethod(\"shapes\",\"supplyDrawNewShapeDefaults\")(t,e,r),r(\"meta\"),c.isPlainObject(t.transition)&&(r(\"transition.duration\"),r(\"transition.easing\"),r(\"transition.ordering\")),o.getComponentMethod(\"calendars\",\"handleDefaults\")(t,e,\"calendar\"),o.getComponentMethod(\"fx\",\"supplyLayoutGlobalDefaults\")(t,e,r)},_.plotAutoSize=function(t,e,n){var r,i,o=t._context||{},s=o.frameMargins,l=c.isPlotDiv(t);if(l&&t.emit(\"plotly_autosize\"),o.fillFrame)r=window.innerWidth,i=window.innerHeight,document.body.style.overflow=\"hidden\";else{var u=l?window.getComputedStyle(t):{};if(r=L(u.width)||L(u.maxWidth)||n.width,i=L(u.height)||L(u.maxHeight)||n.height,a(s)&&s>0){var h=1-2*s;r=Math.round(h*r),i=Math.round(h*i)}}var d=_.layoutAttributes.width.min,f=_.layoutAttributes.height.min;r<d&&(r=d),i<f&&(i=f);var p=!e.width&&Math.abs(n.width-r)>1,m=!e.height&&Math.abs(n.height-i)>1;(m||p)&&(p&&(n.width=r),m&&(n.height=i)),t._initialAutoSize||(t._initialAutoSize={width:r,height:i}),_.sanitizeMargins(n)},_.supplyLayoutModuleDefaults=function(t,e,n,r){var i,a,s,l=o.componentsRegistry,u=e._basePlotModules,h=o.subplotsRegistry.cartesian;for(i in l)(s=l[i]).includeBasePlot&&s.includeBasePlot(t,e);for(var d in u.length||u.push(h),e._has(\"cartesian\")&&(o.getComponentMethod(\"grid\",\"contentDefaults\")(t,e),h.finalizeSubplots(t,e)),e._subplots)e._subplots[d].sort(c.subplotSort);for(a=0;a<u.length;a++)(s=u[a]).supplyLayoutDefaults&&s.supplyLayoutDefaults(t,e,n);var f=e._modules;for(a=0;a<f.length;a++)(s=f[a]).supplyLayoutDefaults&&s.supplyLayoutDefaults(t,e,n);var p=e._transformModules;for(a=0;a<p.length;a++)(s=p[a]).supplyLayoutDefaults&&s.supplyLayoutDefaults(t,e,n,r);for(i in l)(s=l[i]).supplyLayoutDefaults&&s.supplyLayoutDefaults(t,e,n)},_.purge=function(t){var e=t._fullLayout||{};void 0!==e._glcontainer&&(e._glcontainer.selectAll(\".gl-canvas\").remove(),e._glcontainer.remove(),e._glcanvas=null),e._modeBar&&e._modeBar.destroy(),t._transitionData&&(t._transitionData._interruptCallbacks&&(t._transitionData._interruptCallbacks.length=0),t._transitionData._animationRaf&&window.cancelAnimationFrame(t._transitionData._animationRaf)),c.clearThrottle(),c.clearResponsive(t),delete t.data,delete t.layout,delete t._fullData,delete t._fullLayout,delete t.calcdata,delete t.framework,delete t.empty,delete t.fid,delete t.undoqueue,delete t.undonum,delete t.autoplay,delete t.changed,delete t._promises,delete t._redrawTimer,delete t._hmlumcount,delete t._hmpixcount,delete t._transitionData,delete t._transitioning,delete t._initialAutoSize,delete t._transitioningWithDuration,delete t._dragging,delete t._dragged,delete t._dragdata,delete t._hoverdata,delete t._snapshotInProgress,delete t._editing,delete t._mouseDownTime,delete t._legendMouseDownTime,t.removeAllListeners&&t.removeAllListeners()},_.style=function(t){var e,n=t._fullLayout._visibleModules,r=[];for(e=0;e<n.length;e++){var i=n[e];i.style&&c.pushUnique(r,i.style)}for(e=0;e<r.length;e++)r[e](t)},_.sanitizeMargins=function(t){if(t&&t.margin){var e,n=t.width,r=t.height,i=t.margin,a=r-(i.t+i.b);n-(i.l+i.r)<0&&(e=(n-1)/(i.l+i.r),i.l=Math.floor(e*i.l),i.r=Math.floor(e*i.r)),a<0&&(e=(r-1)/(i.t+i.b),i.t=Math.floor(e*i.t),i.b=Math.floor(e*i.b))}},_.clearAutoMarginIds=function(t){t._fullLayout._pushmarginIds={}},_.allowAutoMargin=function(t,e){t._fullLayout._pushmarginIds[e]=1},_.autoMargin=function(t,e,n){var r=t._fullLayout,i=r.width,a=r.height,o=r.margin,s=c.constrain(i-o.l-o.r,2,64),l=c.constrain(a-o.t-o.b,2,64),u=Math.max(0,i-s),h=Math.max(0,a-l),d=r._pushmargin,f=r._pushmarginIds;if(!1!==o.autoexpand){if(n){var p=n.pad;if(void 0===p&&(p=Math.min(12,o.l,o.r,o.t,o.b)),u){var m=(n.l+n.r)/u;m>1&&(n.l/=m,n.r/=m)}if(h){var g=(n.t+n.b)/h;g>1&&(n.t/=g,n.b/=g)}d[e]={l:{val:void 0!==n.xl?n.xl:n.x,size:n.l+p},r:{val:void 0!==n.xr?n.xr:n.x,size:n.r+p},b:{val:void 0!==n.yb?n.yb:n.y,size:n.b+p},t:{val:void 0!==n.yt?n.yt:n.y,size:n.t+p}},f[e]=1}else delete d[e],delete f[e];if(!r._replotting)return _.doAutoMargin(t)}},_.doAutoMargin=function(t){var e=t._fullLayout,n=e.width,r=e.height;e._size||(e._size={}),C(e);var i=e._size,s=e.margin,l=c.extendFlat({},i),u=s.l,h=s.r,f=s.t,p=s.b,m=e._pushmargin,g=e._pushmarginIds;if(!1!==e.margin.autoexpand){for(var y in m)g[y]||delete m[y];for(var v in m.base={l:{val:0,size:u},r:{val:1,size:h},t:{val:1,size:f},b:{val:0,size:p}},m){var b=m[v].l||{},x=m[v].b||{},w=b.val,k=b.size,M=x.val,T=x.size;for(var S in m){if(a(k)&&m[S].r){var A=m[S].r.val,L=m[S].r.size;if(A>w){var E=(k*A+(L-n)*w)/(A-w),O=(L*(1-w)+(k-n)*(1-A))/(A-w);E+O>u+h&&(u=E,h=O)}}if(a(T)&&m[S].t){var D=m[S].t.val,I=m[S].t.size;if(D>M){var P=(T*D+(I-r)*M)/(D-M),R=(I*(1-M)+(T-r)*(1-D))/(D-M);P+R>p+f&&(p=P,f=R)}}}}}var z=c.constrain(n-s.l-s.r,2,64),j=c.constrain(r-s.t-s.b,2,64),F=Math.max(0,n-z),N=Math.max(0,r-j);if(F){var B=(u+h)/F;B>1&&(u/=B,h/=B)}if(N){var Y=(p+f)/N;Y>1&&(p/=Y,f/=Y)}if(i.l=Math.round(u),i.r=Math.round(h),i.t=Math.round(f),i.b=Math.round(p),i.p=Math.round(s.pad),i.w=Math.round(n)-i.l-i.r,i.h=Math.round(r)-i.t-i.b,!e._replotting&&_.didMarginChange(l,i)){\"_redrawFromAutoMarginCount\"in e?e._redrawFromAutoMarginCount++:e._redrawFromAutoMarginCount=1;var H=3*(1+Object.keys(g).length);if(e._redrawFromAutoMarginCount<H)return o.call(\"plot\",t);e._size=l,c.warn(\"Too many auto-margin redraws.\")}!function(t){for(var e=d.list(t,\"\",!0),n=0;n<e.length;n++){var r=e[n]._hideOutOfRangeInsideTickLabels;r&&r()}}(t)};var E=[\"l\",\"r\",\"t\",\"b\",\"p\",\"w\",\"h\"];function O(t,e,n){var r=!1,i=c.syncOrAsync([_.previousPromises,function(){if(t._transitionData)return t._transitioning=!1,function(t){var e=Promise.resolve();if(!t)return e;for(;t.length;)e=e.then(t.shift());return e}(t._transitionData._interruptCallbacks)},n.prepareFn,_.rehover,function(){return t.emit(\"plotly_transitioning\",[]),new Promise((function(i){t._transitioning=!0,e.duration>0&&(t._transitioningWithDuration=!0),t._transitionData._interruptCallbacks.push((function(){r=!0})),n.redraw&&t._transitionData._interruptCallbacks.push((function(){return o.call(\"redraw\",t)})),t._transitionData._interruptCallbacks.push((function(){t.emit(\"plotly_transitioninterrupted\",[])}));var a=0,s=0;function l(){return a++,function(){var e;s++,r||s!==a||(e=i,t._transitionData&&(function(t){if(t)for(;t.length;)t.shift()}(t._transitionData._interruptCallbacks),Promise.resolve().then((function(){if(n.redraw)return o.call(\"redraw\",t)})).then((function(){t._transitioning=!1,t._transitioningWithDuration=!1,t.emit(\"plotly_transitioned\",[])})).then(e)))}}n.runFn(l),setTimeout(l())}))}],t);return i&&i.then||(i=Promise.resolve()),i.then((function(){return t}))}_.didMarginChange=function(t,e){for(var n=0;n<E.length;n++){var r=E[n],i=t[r],o=e[r];if(!a(i)||Math.abs(o-i)>1)return!0}return!1},_.graphJson=function(t,e,n,r,i,a){(i&&e&&!t._fullData||i&&!e&&!t._fullLayout)&&_.supplyDefaults(t);var o=i?t._fullLayout:t.layout,s=(t._transitionData||{})._frames;function l(t,e){if(\"function\"==typeof t)return e?\"_function_\":null;if(c.isPlainObject(t)){var r,i={};return Object.keys(t).sort().forEach((function(a){if(-1===[\"_\",\"[\"].indexOf(a.charAt(0)))if(\"function\"!=typeof t[a]){if(\"keepdata\"===n){if(\"src\"===a.substr(a.length-3))return}else if(\"keepstream\"===n){if(\"string\"==typeof(r=t[a+\"src\"])&&r.indexOf(\":\")>0&&!c.isPlainObject(t.stream))return}else if(\"keepall\"!==n&&\"string\"==typeof(r=t[a+\"src\"])&&r.indexOf(\":\")>0)return;i[a]=l(t[a],e)}else e&&(i[a]=\"_function\")})),i}return Array.isArray(t)?t.map((function(t){return l(t,e)})):c.isTypedArray(t)?c.simpleMap(t,c.identity):c.isJSDate(t)?c.ms2DateTimeLocal(+t):t}var u={data:((i?t._fullData:t.data)||[]).map((function(t){var n=l(t);return e&&delete n.fit,n}))};if(!e&&(u.layout=l(o),i)){var h=o._size;u.layout.computed={margin:{b:h.b,l:h.l,r:h.r,t:h.t}}}return t.framework&&t.framework.isPolar&&(u=t.framework.getConfig()),s&&(u.frames=l(s)),a&&(u.config=l(t._context,!0)),\"object\"===r?u:JSON.stringify(u)},_.modifyFrames=function(t,e){var n,r,i,a=t._transitionData._frames,o=t._transitionData._frameHash;for(n=0;n<e.length;n++)switch((r=e[n]).type){case\"replace\":var s=(a[r.index]||{}).name,l=(i=r.value).name;a[r.index]=o[l]=i,l!==s&&(delete o[s],o[l]=i);break;case\"insert\":o[(i=r.value).name]=i,a.splice(r.index,0,i);break;case\"delete\":delete o[(i=a[r.index]).name],a.splice(r.index,1)}return Promise.resolve()},_.computeFrame=function(t,e){var n,r,i,a,o=t._transitionData._frameHash;if(!e)throw new Error(\"computeFrame must be given a string frame name\");var s=o[e.toString()];if(!s)return!1;for(var l=[s],c=[s.name];s.baseframe&&(s=o[s.baseframe.toString()])&&-1===c.indexOf(s.name);)l.push(s),c.push(s.name);for(var u={};s=l.pop();)if(s.layout&&(u.layout=_.extendLayout(u.layout,s.layout)),s.data){if(u.data||(u.data=[]),!(r=s.traces))for(r=[],n=0;n<s.data.length;n++)r[n]=n;for(u.traces||(u.traces=[]),n=0;n<s.data.length;n++)null!=(i=r[n])&&(-1===(a=u.traces.indexOf(i))&&(u.traces[a=u.data.length]=i),u.data[a]=_.extendTrace(u.data[a],s.data[n]))}return u},_.recomputeFrameHash=function(t){for(var e=t._transitionData._frameHash={},n=t._transitionData._frames,r=0;r<n.length;r++){var i=n[r];i&&i.name&&(e[i.name]=i)}},_.extendObjectWithContainers=function(t,e,n){var r,i,a,o,s,l,u,h=c.extendDeepNoArrays({},e||{}),d=c.expandObjectPaths(h),f={};if(n&&n.length)for(a=0;a<n.length;a++)void 0===(i=(r=c.nestedProperty(d,n[a])).get())?c.nestedProperty(f,n[a]).set(null):(r.set(null),c.nestedProperty(f,n[a]).set(i));if(t=c.extendDeepNoArrays(t||{},d),n&&n.length)for(a=0;a<n.length;a++)if(l=c.nestedProperty(f,n[a]).get()){for(u=(s=c.nestedProperty(t,n[a])).get(),Array.isArray(u)||s.set(u=[]),o=0;o<l.length;o++){var p=l[o];u[o]=null===p?null:_.extendObjectWithContainers(u[o],p)}s.set(u)}return t},_.dataArrayContainers=[\"transforms\",\"dimensions\"],_.layoutArrayContainers=o.layoutArrayContainers,_.extendTrace=function(t,e){return _.extendObjectWithContainers(t,e,_.dataArrayContainers)},_.extendLayout=function(t,e){return _.extendObjectWithContainers(t,e,_.layoutArrayContainers)},_.transition=function(t,e,n,r,i,a){var o={redraw:i.redraw},s={},l=[];return o.prepareFn=function(){for(var i=Array.isArray(e)?e.length:0,a=r.slice(0,i),o=0;o<a.length;o++){var u=a[o],h=t._fullData[u]._module;if(h){if(h.animatable){var d=h.basePlotModule.name;s[d]||(s[d]=[]),s[d].push(u)}t.data[a[o]]=_.extendTrace(t.data[a[o]],e[o])}}var f=c.expandObjectPaths(c.extendDeepNoArrays({},n)),p=/^[xy]axis[0-9]*$/;for(var m in f)p.test(m)&&delete f[m].range;_.extendLayout(t.layout,f),delete t.calcdata,_.supplyDefaults(t),_.doCalcdata(t);var g=c.expandObjectPaths(n);if(g){var y=t._fullLayout._plots;for(var v in y){var b=y[v],x=b.xaxis,w=b.yaxis,k=x.range.slice(),M=w.range.slice(),T=null,S=null,A=null,L=null;Array.isArray(g[x._name+\".range\"])?T=g[x._name+\".range\"].slice():Array.isArray((g[x._name]||{}).range)&&(T=g[x._name].range.slice()),Array.isArray(g[w._name+\".range\"])?S=g[w._name+\".range\"].slice():Array.isArray((g[w._name]||{}).range)&&(S=g[w._name].range.slice()),k&&T&&(x.r2l(k[0])!==x.r2l(T[0])||x.r2l(k[1])!==x.r2l(T[1]))&&(A={xr0:k,xr1:T}),M&&S&&(w.r2l(M[0])!==w.r2l(S[0])||w.r2l(M[1])!==w.r2l(S[1]))&&(L={yr0:M,yr1:S}),(A||L)&&l.push(c.extendFlat({plotinfo:b},A,L))}}return Promise.resolve()},o.runFn=function(e){var r,i,o=t._fullLayout._basePlotModules,u=l.length;if(n)for(i=0;i<o.length;i++)o[i].transitionAxes&&o[i].transitionAxes(t,l,a,e);for(var h in u?((r=c.extendFlat({},a)).duration=0,delete s.cartesian):r=a,s){var d=s[h];t._fullData[d[0]]._module.basePlotModule.plot(t,d,r,e)}},O(t,a,o)},_.transitionFromReact=function(t,e,n,r){var i=t._fullLayout,a=i.transition,o={},s=[];return o.prepareFn=function(){var t=i._plots;for(var a in o.redraw=!1,\"some\"===e.anim&&(o.redraw=!0),\"some\"===n.anim&&(o.redraw=!0),t){var l=t[a],u=l.xaxis,h=l.yaxis,d=r[u._name].range.slice(),f=r[h._name].range.slice(),p=u.range.slice(),m=h.range.slice();u.setScale(),h.setScale();var g=null,y=null;u.r2l(d[0])===u.r2l(p[0])&&u.r2l(d[1])===u.r2l(p[1])||(g={xr0:d,xr1:p}),h.r2l(f[0])===h.r2l(m[0])&&h.r2l(f[1])===h.r2l(m[1])||(y={yr0:f,yr1:m}),(g||y)&&s.push(c.extendFlat({plotinfo:l},g,y))}return Promise.resolve()},o.runFn=function(n){for(var r,i,o,l=t._fullData,u=t._fullLayout._basePlotModules,h=[],d=0;d<l.length;d++)h.push(d);function f(){for(var e=0;e<u.length;e++)u[e].transitionAxes&&u[e].transitionAxes(t,s,r,n)}function p(){for(var e=0;e<u.length;e++)u[e].plot(t,o,i,n)}s.length&&e.anim?\"traces first\"===a.ordering?(r=c.extendFlat({},a,{duration:0}),o=h,i=a,setTimeout(f,a.duration),p()):(r=a,o=null,i=c.extendFlat({},a,{duration:0}),setTimeout(p,r.duration),f()):s.length?(r=a,f()):e.anim&&(o=h,i=a,p())},O(t,a,o)},_.doCalcdata=function(t,e){var n,r,i,a,l=d.list(t),u=t._fullData,f=t._fullLayout,p=new Array(u.length),m=(t.calcdata||[]).slice();for(t.calcdata=p,f._numBoxes=0,f._numViolins=0,f._violinScaleGroupStats={},t._hmpixcount=0,t._hmlumcount=0,f._piecolormap={},f._sunburstcolormap={},f._treemapcolormap={},f._funnelareacolormap={},i=0;i<u.length;i++)Array.isArray(e)&&-1===e.indexOf(i)&&(p[i]=m[i]);for(i=0;i<u.length;i++)(n=u[i])._arrayAttrs=s.findArrayAttributes(n),n._extremes={};var g=f._subplots.polar||[];for(i=0;i<g.length;i++)l.push(f[g[i]].radialaxis,f[g[i]].angularaxis);for(var y in f._colorAxes){var v=f[y];!1!==v.cauto&&(delete v.cmin,delete v.cmax)}var _=!1;function x(e){if(r=(n=u[e])._module,!0===n.visible&&n.transforms){if(r&&r.calc){var i=r.calc(t,n);i[0]&&i[0].t&&i[0].t._scene&&delete i[0].t._scene.dirty}for(a=0;a<n.transforms.length;a++){var o=n.transforms[a];(r=b[o.type])&&r.calcTransform&&(n._hasCalcTransform=!0,_=!0,r.calcTransform(t,n,o))}}}function w(e,i){if(!!(r=(n=u[e])._module).isContainer===i){var o=[];if(!0===n.visible&&0!==n._length){delete n._indexToPoints;var s=n.transforms||[];for(a=s.length-1;a>=0;a--)if(s[a].enabled){n._indexToPoints=s[a]._indexToPoints;break}r&&r.calc&&(o=r.calc(t,n))}Array.isArray(o)&&o[0]||(o=[{x:h,y:h}]),o[0].t||(o[0].t={}),o[0].trace=n,p[e]=o}}for(I(l,u,f),i=0;i<u.length;i++)w(i,!0);for(i=0;i<u.length;i++)x(i);for(_&&I(l,u,f),i=0;i<u.length;i++)w(i,!0);for(i=0;i<u.length;i++)w(i,!1);P(t);var k=function(t,e){var n,r,i,a,s,l=[];function u(t,n,r){var i=n._id.charAt(0);if(\"histogram2dcontour\"===t){var a=n._counterAxes[0],o=d.getFromId(e,a),s=\"x\"===i||\"x\"===a&&\"category\"===o.type,l=\"y\"===i||\"y\"===a&&\"category\"===o.type;return function(t,e){return 0===t||0===e||s&&t===r[e].length-1||l&&e===r.length-1?-1:(\"y\"===i?e:t)-1}}return function(t,e){return\"y\"===i?e:t}}var h={min:function(t){return c.aggNums(Math.min,null,t)},max:function(t){return c.aggNums(Math.max,null,t)},sum:function(t){return c.aggNums((function(t,e){return t+e}),null,t)},total:function(t){return c.aggNums((function(t,e){return t+e}),null,t)},mean:function(t){return c.mean(t)},median:function(t){return c.median(t)}};for(n=0;n<t.length;n++){var f=t[n];if(\"category\"===f.type){var p=f.categoryorder.match(D);if(p){var m=p[1],g=p[2],y=f._id.charAt(0),v=\"x\"===y,_=[];for(r=0;r<f._categories.length;r++)_.push([f._categories[r],[]]);for(r=0;r<f._traceIndices.length;r++){var b=f._traceIndices[r],x=e._fullData[b];if(!0===x.visible){var w=x.type;o.traceIs(x,\"histogram\")&&(delete x._xautoBinFinished,delete x._yautoBinFinished);var k=\"splom\"===w,M=\"scattergl\"===w,T=e.calcdata[b];for(i=0;i<T.length;i++){var S,A,L=T[i];if(k){var C=x._axesDim[f._id];if(!v){var E=x._diag[C][0];E&&(f=e._fullLayout[d.id2name(E)])}var O=L.trace.dimensions[C].values;for(a=0;a<O.length;a++)for(S=f._categoriesMap[O[a]],s=0;s<L.trace.dimensions.length;s++)s!==C&&_[S][1].push(L.trace.dimensions[s].values[a])}else if(M){for(a=0;a<L.t.x.length;a++)v?(S=L.t.x[a],A=L.t.y[a]):(S=L.t.y[a],A=L.t.x[a]),_[S][1].push(A);L.t&&L.t._scene&&delete L.t._scene.dirty}else if(L.hasOwnProperty(\"z\")){var I=u(x.type,f,A=L.z);for(a=0;a<A.length;a++)for(s=0;s<A[a].length;s++)(S=I(s,a))+1&&_[S][1].push(A[a][s])}else for(void 0===(S=L.p)&&(S=L[y]),void 0===(A=L.s)&&(A=L.v),void 0===A&&(A=v?L.y:L.x),Array.isArray(A)||(A=void 0===A?[]:[A]),a=0;a<A.length;a++)_[S][1].push(A[a])}}}f._categoriesValue=_;var P=[];for(r=0;r<_.length;r++)P.push([_[r][0],h[m](_[r][1])]);P.sort((function(t,e){return t[1]-e[1]})),f._categoriesAggregatedValue=P,f._initialCategories=P.map((function(t){return t[0]})),\"descending\"===g&&f._initialCategories.reverse(),l=l.concat(f.sortByInitialCategories())}}}return l}(l,t);if(k.length){for(f._numBoxes=0,f._numViolins=0,i=0;i<k.length;i++)w(k[i],!0);for(i=0;i<k.length;i++)w(k[i],!1);P(t)}o.getComponentMethod(\"fx\",\"calc\")(t),o.getComponentMethod(\"errorbars\",\"calc\")(t)};var D=/(total|sum|min|max|mean|median) (ascending|descending)/;function I(t,e,n){var r={};function i(t){t.clearCalc(),\"multicategory\"===t.type&&t.setupMultiCategory(e),r[t._id]=1}c.simpleMap(t,i);for(var a=n._axisMatchGroups||[],o=0;o<a.length;o++)for(var s in a[o])r[s]||i(n[d.id2name(s)])}function P(t){var e,n,r,i=t._fullLayout,a=i._visibleModules,o={};for(n=0;n<a.length;n++){var s=a[n],l=s.crossTraceCalc;if(l){var u=s.basePlotModule.name;o[u]?c.pushUnique(o[u],l):o[u]=[l]}}for(r in o){var h=o[r],d=i._subplots[r];if(Array.isArray(d))for(e=0;e<d.length;e++){var f=d[e],p=\"cartesian\"===r?i._plots[f]:i[f];for(n=0;n<h.length;n++)h[n](t,p,f)}else for(n=0;n<h.length;n++)h[n](t)}}_.rehover=function(t){t._fullLayout._rehover&&t._fullLayout._rehover()},_.redrag=function(t){t._fullLayout._redrag&&t._fullLayout._redrag()},_.generalUpdatePerTraceModule=function(t,e,n,r){var i,a=e.traceHash,o={};for(i=0;i<n.length;i++){var s=n[i],l=s[0].trace;l.visible&&(o[l.type]=o[l.type]||[],o[l.type].push(s))}for(var u in a)if(!o[u]){var h=a[u][0];h[0].trace.visible=!1,o[u]=[h]}for(var d in o){var f=o[d];f[0][0].trace._module.plot(t,e,c.filterVisible(f),r)}e.traceHash=o},_.plotBasePlot=function(t,e,n,r,i){var a=o.getModule(t),s=g(e.calcdata,a)[0];a.plot(e,s,r,i)},_.cleanBasePlot=function(t,e,n,r,i){var a=i._has&&i._has(t),o=n._has&&n._has(t);a&&!o&&i[\"_\"+t+\"layer\"].selectAll(\"g.trace\").remove()}},{\"../components/color\":643,\"../constants/numerical\":753,\"../lib\":778,\"../plot_api/plot_schema\":816,\"../plot_api/plot_template\":817,\"../plots/get_data\":865,\"../registry\":911,\"./animation_attributes\":822,\"./attributes\":824,\"./cartesian/axis_ids\":831,\"./cartesian/handle_outline\":838,\"./command\":854,\"./font_attributes\":856,\"./frame_attributes\":857,\"./layout_attributes\":882,d3:169,\"d3-time-format\":166,\"fast-isnumeric\":241}],892:[function(t,e,n){\"use strict\";e.exports={attr:\"subplot\",name:\"polar\",axisNames:[\"angularaxis\",\"radialaxis\"],axisName2dataArray:{angularaxis:\"theta\",radialaxis:\"r\"},layerNames:[\"draglayer\",\"plotbg\",\"backplot\",\"angular-grid\",\"radial-grid\",\"frontplot\",\"angular-line\",\"radial-line\",\"angular-axis\",\"radial-axis\"],radialDragBoxSize:50,angularDragBoxSize:30,cornerLen:25,cornerHalfWidth:2,MINDRAG:8,MINZOOM:20,OFFEDGE:20}},{}],893:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../lib/polygon\").tester,a=r.findIndexOfMin,o=r.isAngleInsideSector,s=r.angleDelta,l=r.angleDist;function c(t,e,n,r){var i,a,o=r[0],s=r[1],l=h(Math.sin(e)-Math.sin(t)),c=h(Math.cos(e)-Math.cos(t)),u=Math.tan(n),d=h(1/u),f=l/c,p=s-f*o;return d?l&&c?a=u*(i=p/(u-f)):c?(i=s*d,a=s):(i=o,a=o*u):l&&c?(i=0,a=p):c?(i=0,a=s):i=a=NaN,[i,a]}function u(t,e,n,i){return r.isFullCircle([e,n])?function(t,e){var n,r=e.length,i=new Array(r+1);for(n=0;n<r;n++){var a=e[n];i[n]=[t*Math.cos(a),t*Math.sin(a)]}return i[n]=i[0].slice(),i}(t,i):function(t,e,n,i){var s,u,h=i.length,d=[];function f(e){return[t*Math.cos(e),t*Math.sin(e)]}function p(t,e,n){return c(t,e,n,f(t))}function m(t){return r.mod(t,h)}function g(t){return o(t,[e,n])}var y=a(i,(function(t){return g(t)?l(t,e):1/0})),v=p(i[y],i[m(y-1)],e);for(d.push(v),s=y,u=0;u<h;s++,u++){var _=i[m(s)];if(!g(_))break;d.push(f(_))}var b=a(i,(function(t){return g(t)?l(t,n):1/0})),x=p(i[b],i[m(b+1)],n);return d.push(x),d.push([0,0]),d.push(d[0].slice()),d}(t,e,n,i)}function h(t){return Math.abs(t)>1e-10?t:0}function d(t,e,n){e=e||0,n=n||0;for(var r=t.length,i=new Array(r),a=0;a<r;a++){var o=t[a];i[a]=[e+o[0],n-o[1]]}return i}e.exports={isPtInsidePolygon:function(t,e,n,r,a){if(!o(e,r))return!1;var s,l;n[0]<n[1]?(s=n[0],l=n[1]):(s=n[1],l=n[0]);var c=i(u(s,r[0],r[1],a)),h=i(u(l,r[0],r[1],a)),d=[t*Math.cos(e),t*Math.sin(e)];return h.contains(d)&&!c.contains(d)},findPolygonOffset:function(t,e,n,r){for(var i=1/0,a=1/0,o=u(t,e,n,r),s=0;s<o.length;s++){var l=o[s];i=Math.min(i,l[0]),a=Math.min(a,-l[1])}return[i,a]},findEnclosingVertexAngles:function(t,e){var n=a(e,(function(e){var n=s(e,t);return n>0?n:1/0})),i=r.mod(n+1,e.length);return[e[n],e[i]]},findIntersectionXY:c,findXYatLength:function(t,e,n,r){var i=-e*n,a=e*e+1,o=2*(e*i-n),s=Math.sqrt(o*o-4*a*(i*i+n*n-t*t)),l=(-o+s)/(2*a),c=(-o-s)/(2*a);return[[l,e*l+i+r],[c,e*c+i+r]]},clampTiny:h,pathPolygon:function(t,e,n,r,i,a){return\"M\"+d(u(t,e,n,r),i,a).join(\"L\")},pathPolygonAnnulus:function(t,e,n,r,i,a,o){var s,l;t<e?(s=t,l=e):(s=e,l=t);var c=d(u(s,n,r,i),a,o);return\"M\"+d(u(l,n,r,i),a,o).reverse().join(\"L\")+\"M\"+c.join(\"L\")}}},{\"../../lib\":778,\"../../lib/polygon\":790}],894:[function(t,e,n){\"use strict\";var r=t(\"../get_data\").getSubplotCalcData,i=t(\"../../lib\").counterRegex,a=t(\"./polar\"),o=t(\"./constants\"),s=o.attr,l=o.name,c=i(l),u={};u[s]={valType:\"subplotid\",dflt:l,editType:\"calc\"},e.exports={attr:s,name:l,idRoot:l,idRegex:c,attrRegex:c,attributes:u,layoutAttributes:t(\"./layout_attributes\"),supplyLayoutDefaults:t(\"./layout_defaults\"),plot:function(t){for(var e=t._fullLayout,n=t.calcdata,i=e._subplots[l],o=0;o<i.length;o++){var s=i[o],c=r(n,l,s),u=e[s]._subplot;u||(u=a(t,s),e[s]._subplot=u),u.plot(c,e,t._promises)}},clean:function(t,e,n,r){for(var i=r._subplots[l]||[],a=r._has&&r._has(\"gl\"),o=e._has&&e._has(\"gl\"),s=a&&!o,c=0;c<i.length;c++){var u=i[c],h=r[u]._subplot;if(!e[u]&&h)for(var d in h.framework.remove(),h.layers[\"radial-axis-title\"].remove(),h.clipPaths)h.clipPaths[d].remove();s&&h._scene&&(h._scene.destroy(),h._scene=null)}},toSVG:t(\"../cartesian\").toSVG}},{\"../../lib\":778,\"../cartesian\":841,\"../get_data\":865,\"./constants\":892,\"./layout_attributes\":895,\"./layout_defaults\":896,\"./polar\":903}],895:[function(t,e,n){\"use strict\";var r=t(\"../../components/color/attributes\"),i=t(\"../cartesian/layout_attributes\"),a=t(\"../domain\").attributes,o=t(\"../../lib\").extendFlat,s=t(\"../../plot_api/edit_types\").overrideAll,l=s({color:i.color,showline:o({},i.showline,{dflt:!0}),linecolor:i.linecolor,linewidth:i.linewidth,showgrid:o({},i.showgrid,{dflt:!0}),gridcolor:i.gridcolor,gridwidth:i.gridwidth},\"plot\",\"from-root\"),c=s({tickmode:i.tickmode,nticks:i.nticks,tick0:i.tick0,dtick:i.dtick,tickvals:i.tickvals,ticktext:i.ticktext,ticks:i.ticks,ticklen:i.ticklen,tickwidth:i.tickwidth,tickcolor:i.tickcolor,showticklabels:i.showticklabels,showtickprefix:i.showtickprefix,tickprefix:i.tickprefix,showticksuffix:i.showticksuffix,ticksuffix:i.ticksuffix,showexponent:i.showexponent,exponentformat:i.exponentformat,minexponent:i.minexponent,separatethousands:i.separatethousands,tickfont:i.tickfont,tickangle:i.tickangle,tickformat:i.tickformat,tickformatstops:i.tickformatstops,layer:i.layer},\"plot\",\"from-root\"),u={visible:o({},i.visible,{dflt:!0}),type:o({},i.type,{values:[\"-\",\"linear\",\"log\",\"date\",\"category\"]}),autotypenumbers:i.autotypenumbers,autorange:o({},i.autorange,{editType:\"plot\"}),rangemode:{valType:\"enumerated\",values:[\"tozero\",\"nonnegative\",\"normal\"],dflt:\"tozero\",editType:\"calc\"},range:o({},i.range,{items:[{valType:\"any\",editType:\"plot\",impliedEdits:{\"^autorange\":!1}},{valType:\"any\",editType:\"plot\",impliedEdits:{\"^autorange\":!1}}],editType:\"plot\"}),categoryorder:i.categoryorder,categoryarray:i.categoryarray,angle:{valType:\"angle\",editType:\"plot\"},side:{valType:\"enumerated\",values:[\"clockwise\",\"counterclockwise\"],dflt:\"clockwise\",editType:\"plot\"},title:{text:o({},i.title.text,{editType:\"plot\",dflt:\"\"}),font:o({},i.title.font,{editType:\"plot\"}),editType:\"plot\"},hoverformat:i.hoverformat,uirevision:{valType:\"any\",editType:\"none\"},editType:\"calc\",_deprecated:{title:i._deprecated.title,titlefont:i._deprecated.titlefont}};o(u,l,c);var h={visible:o({},i.visible,{dflt:!0}),type:{valType:\"enumerated\",values:[\"-\",\"linear\",\"category\"],dflt:\"-\",editType:\"calc\",_noTemplating:!0},autotypenumbers:i.autotypenumbers,categoryorder:i.categoryorder,categoryarray:i.categoryarray,thetaunit:{valType:\"enumerated\",values:[\"radians\",\"degrees\"],dflt:\"degrees\",editType:\"calc\"},period:{valType:\"number\",editType:\"calc\",min:0},direction:{valType:\"enumerated\",values:[\"counterclockwise\",\"clockwise\"],dflt:\"counterclockwise\",editType:\"calc\"},rotation:{valType:\"angle\",editType:\"calc\"},hoverformat:i.hoverformat,uirevision:{valType:\"any\",editType:\"none\"},editType:\"calc\"};o(h,l,c),e.exports={domain:a({name:\"polar\",editType:\"plot\"}),sector:{valType:\"info_array\",items:[{valType:\"number\",editType:\"plot\"},{valType:\"number\",editType:\"plot\"}],dflt:[0,360],editType:\"plot\"},hole:{valType:\"number\",min:0,max:1,dflt:0,editType:\"plot\"},bgcolor:{valType:\"color\",editType:\"plot\",dflt:r.background},radialaxis:u,angularaxis:h,gridshape:{valType:\"enumerated\",values:[\"circular\",\"linear\"],dflt:\"circular\",editType:\"plot\"},uirevision:{valType:\"any\",editType:\"none\"},editType:\"calc\"}},{\"../../components/color/attributes\":642,\"../../lib\":778,\"../../plot_api/edit_types\":810,\"../cartesian/layout_attributes\":842,\"../domain\":855}],896:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../components/color\"),a=t(\"../../plot_api/plot_template\"),o=t(\"../subplot_defaults\"),s=t(\"../get_data\").getSubplotData,l=t(\"../cartesian/tick_value_defaults\"),c=t(\"../cartesian/tick_mark_defaults\"),u=t(\"../cartesian/tick_label_defaults\"),h=t(\"../cartesian/category_order_defaults\"),d=t(\"../cartesian/line_grid_defaults\"),f=t(\"../cartesian/axis_autotype\"),p=t(\"./layout_attributes\"),m=t(\"./set_convert\"),g=t(\"./constants\"),y=g.axisNames;function v(t,e,n,o){var f=n(\"bgcolor\");o.bgColor=i.combine(f,o.paper_bgcolor);var v=n(\"sector\");n(\"hole\");var b,x=s(o.fullData,g.name,o.id),w=o.layoutOut;function k(t,e){return n(b+\".\"+t,e)}for(var M=0;M<y.length;M++){r.isPlainObject(t[b=y[M]])||(t[b]={});var T=t[b],S=a.newContainer(e,b);S._id=S._name=b,S._attr=o.id+\".\"+b,S._traceIndices=x.map((function(t){return t._expandedIndex}));var A=g.axisName2dataArray[b],L=_(T,S,k,x,A,o);h(T,S,k,{axData:x,dataAttr:A});var C,E,O=k(\"visible\");switch(m(S,e,w),k(\"uirevision\",e.uirevision),O&&(E=(C=k(\"color\"))===T.color?C:o.font.color),S._m=1,b){case\"radialaxis\":var D=k(\"autorange\",!S.isValidRange(T.range));T.autorange=D,!D||\"linear\"!==L&&\"-\"!==L||k(\"rangemode\"),\"reversed\"===D&&(S._m=-1),k(\"range\"),S.cleanRange(\"range\",{dfltRange:[0,1]}),O&&(k(\"side\"),k(\"angle\",v[0]),k(\"title.text\"),r.coerceFont(k,\"title.font\",{family:o.font.family,size:Math.round(1.2*o.font.size),color:E}));break;case\"angularaxis\":if(\"date\"===L){r.log(\"Polar plots do not support date angular axes yet.\");for(var I=0;I<x.length;I++)x[I].visible=!1;L=T.type=S.type=\"linear\"}k(\"linear\"===L?\"thetaunit\":\"period\");var P=k(\"direction\");k(\"rotation\",{counterclockwise:0,clockwise:90}[P])}O&&(l(T,S,k,S.type),u(T,S,k,S.type,{tickSuffixDflt:\"degrees\"===S.thetaunit?\"\\xb0\":void 0}),c(T,S,k,{outerTicks:!0}),k(\"showticklabels\")&&(r.coerceFont(k,\"tickfont\",{family:o.font.family,size:o.font.size,color:E}),k(\"tickangle\"),k(\"tickformat\")),d(T,S,k,{dfltColor:C,bgColor:o.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:p[b]}),k(\"layer\")),\"category\"!==L&&k(\"hoverformat\"),S._input=T}\"category\"===e.angularaxis.type&&n(\"gridshape\")}function _(t,e,n,r,i,a){var o=n(\"autotypenumbers\",a.autotypenumbersDflt);if(\"-\"===n(\"type\")){for(var s,l=0;l<r.length;l++)if(r[l].visible){s=r[l];break}s&&s[i]&&(e.type=f(s[i],\"gregorian\",{noMultiCategory:!0,autotypenumbers:o})),\"-\"===e.type?e.type=\"linear\":t.type=e.type}return e.type}e.exports=function(t,e,n){o(t,e,n,{type:g.name,attributes:p,handleDefaults:v,font:e.font,autotypenumbersDflt:e.autotypenumbers,paper_bgcolor:e.paper_bgcolor,fullData:n,layoutOut:e})}},{\"../../components/color\":643,\"../../lib\":778,\"../../plot_api/plot_template\":817,\"../cartesian/axis_autotype\":829,\"../cartesian/category_order_defaults\":832,\"../cartesian/line_grid_defaults\":844,\"../cartesian/tick_label_defaults\":849,\"../cartesian/tick_mark_defaults\":850,\"../cartesian/tick_value_defaults\":851,\"../get_data\":865,\"../subplot_defaults\":905,\"./constants\":892,\"./layout_attributes\":895,\"./set_convert\":904}],897:[function(t,e,n){\"use strict\";var r=t(\"../../../traces/scatter/attributes\"),i=r.marker,a=t(\"../../../lib/extend\").extendFlat;[\"Area traces are deprecated!\",\"Please switch to the *barpolar* trace type.\"].join(\" \"),e.exports={r:a({},r.r,{}),t:a({},r.t,{}),marker:{color:a({},i.color,{}),size:a({},i.size,{}),symbol:a({},i.symbol,{}),opacity:a({},i.opacity,{}),editType:\"calc\"}}},{\"../../../lib/extend\":768,\"../../../traces/scatter/attributes\":1187}],898:[function(t,e,n){\"use strict\";var r=t(\"../../cartesian/layout_attributes\"),i=t(\"../../../lib/extend\").extendFlat,a=t(\"../../../plot_api/edit_types\").overrideAll,o=[\"Legacy polar charts are deprecated!\",\"Please switch to *polar* subplots.\"].join(\" \"),s=i({},r.domain,{});function l(t,e){return i({},e,{showline:{valType:\"boolean\"},showticklabels:{valType:\"boolean\"},tickorientation:{valType:\"enumerated\",values:[\"horizontal\",\"vertical\"]},ticklen:{valType:\"number\",min:0},tickcolor:{valType:\"color\"},ticksuffix:{valType:\"string\"},endpadding:{valType:\"number\",description:o},visible:{valType:\"boolean\"}})}e.exports=a({radialaxis:l(0,{range:{valType:\"info_array\",items:[{valType:\"number\"},{valType:\"number\"}]},domain:s,orientation:{valType:\"number\"}}),angularaxis:l(0,{range:{valType:\"info_array\",items:[{valType:\"number\",dflt:0},{valType:\"number\",dflt:360}]},domain:s}),layout:{direction:{valType:\"enumerated\",values:[\"clockwise\",\"counterclockwise\"]},orientation:{valType:\"angle\"}}},\"plot\",\"nested\")},{\"../../../lib/extend\":768,\"../../../plot_api/edit_types\":810,\"../../cartesian/layout_attributes\":842}],899:[function(t,e,n){\"use strict\";(e.exports=t(\"./micropolar\")).manager=t(\"./micropolar_manager\")},{\"./micropolar\":900,\"./micropolar_manager\":901}],900:[function(t,e,n){var r=t(\"d3\"),i=t(\"../../../lib\").extendDeepAll,a=t(\"../../../constants/alignment\").MID_SHIFT,o=e.exports={version:\"0.2.2\"};o.Axis=function(){var t,e,n,s,l={data:[],layout:{}},c={},u={},h=r.dispatch(\"hover\"),d={render:function(c){return function(c){var h=l.data,d=l.layout;(\"string\"==typeof(e=c||e)||e.nodeName)&&(e=r.select(e)),e.datum(h).each((function(e,l){var c=e.slice();u={data:o.util.cloneJson(c),layout:o.util.cloneJson(d)};var h=0;c.forEach((function(t,e){t.color||(t.color=d.defaultColorRange[h],h=(h+1)%d.defaultColorRange.length),t.strokeColor||(t.strokeColor=\"LinePlot\"===t.geometry?t.color:r.rgb(t.color).darker().toString()),u.data[e].color=t.color,u.data[e].strokeColor=t.strokeColor,u.data[e].strokeDash=t.strokeDash,u.data[e].strokeSize=t.strokeSize}));var f=c.filter((function(t,e){var n=t.visible;return void 0===n||!0===n})),p=!1,m=f.map((function(t,e){return p=p||void 0!==t.groupId,t}));if(p){var g=r.nest().key((function(t,e){return void 0!==t.groupId?t.groupId:\"unstacked\"})).entries(m),y=[],v=g.map((function(t,e){if(\"unstacked\"===t.key)return t.values;var n=t.values[0].r.map((function(t,e){return 0}));return t.values.forEach((function(t,e,r){t.yStack=[n],y.push(n),n=o.util.sumArrays(t.r,n)})),t.values}));f=r.merge(v)}f.forEach((function(t,e){t.t=Array.isArray(t.t[0])?t.t:[t.t],t.r=Array.isArray(t.r[0])?t.r:[t.r]}));var _=Math.min(d.width-d.margin.left-d.margin.right,d.height-d.margin.top-d.margin.bottom)/2;_=Math.max(10,_);var b,x=[d.margin.left+_,d.margin.top+_];b=p?[0,r.max(o.util.sumArrays(o.util.arrayLast(f).r[0],o.util.arrayLast(y)))]:r.extent(o.util.flattenArray(f.map((function(t,e){return t.r})))),d.radialAxis.domain!=o.DATAEXTENT&&(b[0]=0),n=r.scale.linear().domain(d.radialAxis.domain!=o.DATAEXTENT&&d.radialAxis.domain?d.radialAxis.domain:b).range([0,_]),u.layout.radialAxis.domain=n.domain();var w,k=o.util.flattenArray(f.map((function(t,e){return t.t}))),M=\"string\"==typeof k[0];M&&(k=o.util.deduplicate(k),w=k.slice(),k=r.range(k.length),f=f.map((function(t,e){var n=t;return t.t=[k],p&&(n.yStack=t.yStack),n})));var T=f.filter((function(t,e){return\"LinePlot\"===t.geometry||\"DotPlot\"===t.geometry})).length===f.length,S=null===d.needsEndSpacing?M||!T:d.needsEndSpacing,A=d.angularAxis.domain&&d.angularAxis.domain!=o.DATAEXTENT&&!M&&d.angularAxis.domain[0]>=0?d.angularAxis.domain:r.extent(k),L=Math.abs(k[1]-k[0]);T&&!M&&(L=0);var C=A.slice();S&&M&&(C[1]+=L);var E=d.angularAxis.ticksCount||4;E>8&&(E=E/(E/8)+E%8),d.angularAxis.ticksStep&&(E=(C[1]-C[0])/E);var O=d.angularAxis.ticksStep||(C[1]-C[0])/(E*(d.minorTicks+1));w&&(O=Math.max(Math.round(O),1)),C[2]||(C[2]=O);var D=r.range.apply(this,C);if(D=D.map((function(t,e){return parseFloat(t.toPrecision(12))})),s=r.scale.linear().domain(C.slice(0,2)).range(\"clockwise\"===d.direction?[0,360]:[360,0]),u.layout.angularAxis.domain=s.domain(),u.layout.angularAxis.endPadding=S?L:0,void 0===(t=r.select(this).select(\"svg.chart-root\"))||t.empty()){var I=(new DOMParser).parseFromString(\"<svg xmlns='http://www.w3.org/2000/svg' class='chart-root'>' + '<g class='outer-group'>' + '<g class='chart-group'>' + '<circle class='background-circle'></circle>' + '<g class='geometry-group'></g>' + '<g class='radial axis-group'>' + '<circle class='outside-circle'></circle>' + '</g>' + '<g class='angular axis-group'></g>' + '<g class='guides-group'><line></line><circle r='0'></circle></g>' + '</g>' + '<g class='legend-group'></g>' + '<g class='tooltips-group'></g>' + '<g class='title-group'><text></text></g>' + '</g>' + '</svg>\",\"application/xml\"),P=this.appendChild(this.ownerDocument.importNode(I.documentElement,!0));t=r.select(P)}t.select(\".guides-group\").style({\"pointer-events\":\"none\"}),t.select(\".angular.axis-group\").style({\"pointer-events\":\"none\"}),t.select(\".radial.axis-group\").style({\"pointer-events\":\"none\"});var R,z=t.select(\".chart-group\"),j={fill:\"none\",stroke:d.tickColor},F={\"font-size\":d.font.size,\"font-family\":d.font.family,fill:d.font.color,\"text-shadow\":[\"-1px 0px\",\"1px -1px\",\"-1px 1px\",\"1px 1px\"].map((function(t,e){return\" \"+t+\" 0 \"+d.font.outlineColor})).join(\",\")};if(d.showLegend){R=t.select(\".legend-group\").attr({transform:\"translate(\"+[_,d.margin.top]+\")\"}).style({display:\"block\"});var N=f.map((function(t,e){var n=o.util.cloneJson(t);return n.symbol=\"DotPlot\"===t.geometry?t.dotType||\"circle\":\"LinePlot\"!=t.geometry?\"square\":\"line\",n.visibleInLegend=void 0===t.visibleInLegend||t.visibleInLegend,n.color=\"LinePlot\"===t.geometry?t.strokeColor:t.color,n}));o.Legend().config({data:f.map((function(t,e){return t.name||\"Element\"+e})),legendConfig:i({},o.Legend.defaultConfig().legendConfig,{container:R,elements:N,reverseOrder:d.legend.reverseOrder})})();var B=R.node().getBBox();_=Math.min(d.width-B.width-d.margin.left-d.margin.right,d.height-d.margin.top-d.margin.bottom)/2,_=Math.max(10,_),x=[d.margin.left+_,d.margin.top+_],n.range([0,_]),u.layout.radialAxis.domain=n.domain(),R.attr(\"transform\",\"translate(\"+[x[0]+_,x[1]-_]+\")\")}else R=t.select(\".legend-group\").style({display:\"none\"});t.attr({width:d.width,height:d.height}).style({opacity:d.opacity}),z.attr(\"transform\",\"translate(\"+x+\")\").style({cursor:\"crosshair\"});var Y=[(d.width-(d.margin.left+d.margin.right+2*_+(B?B.width:0)))/2,(d.height-(d.margin.top+d.margin.bottom+2*_))/2];if(Y[0]=Math.max(0,Y[0]),Y[1]=Math.max(0,Y[1]),t.select(\".outer-group\").attr(\"transform\",\"translate(\"+Y+\")\"),d.title&&d.title.text){var H=t.select(\"g.title-group text\").style(F).text(d.title.text),V=H.node().getBBox();H.attr({x:x[0]-V.width/2,y:x[1]-_-20})}var U=t.select(\".radial.axis-group\");if(d.radialAxis.gridLinesVisible){var W=U.selectAll(\"circle.grid-circle\").data(n.ticks(5));W.enter().append(\"circle\").attr({class:\"grid-circle\"}).style(j),W.attr(\"r\",n),W.exit().remove()}U.select(\"circle.outside-circle\").attr({r:_}).style(j);var q=t.select(\"circle.background-circle\").attr({r:_}).style({fill:d.backgroundColor,stroke:d.stroke});function G(t,e){return s(t)%360+d.orientation}if(d.radialAxis.visible){var X=r.svg.axis().scale(n).ticks(5).tickSize(5);U.call(X).attr({transform:\"rotate(\"+d.radialAxis.orientation+\")\"}),U.selectAll(\".domain\").style(j),U.selectAll(\"g>text\").text((function(t,e){return this.textContent+d.radialAxis.ticksSuffix})).style(F).style({\"text-anchor\":\"start\"}).attr({x:0,y:0,dx:0,dy:0,transform:function(t,e){return\"horizontal\"===d.radialAxis.tickOrientation?\"rotate(\"+-d.radialAxis.orientation+\") translate(\"+[0,F[\"font-size\"]]+\")\":\"translate(\"+[0,F[\"font-size\"]]+\")\"}}),U.selectAll(\"g>line\").style({stroke:\"black\"})}var Z=t.select(\".angular.axis-group\").selectAll(\"g.angular-tick\").data(D),J=Z.enter().append(\"g\").classed(\"angular-tick\",!0);Z.attr({transform:function(t,e){return\"rotate(\"+G(t)+\")\"}}).style({display:d.angularAxis.visible?\"block\":\"none\"}),Z.exit().remove(),J.append(\"line\").classed(\"grid-line\",!0).classed(\"major\",(function(t,e){return e%(d.minorTicks+1)==0})).classed(\"minor\",(function(t,e){return!(e%(d.minorTicks+1)==0)})).style(j),J.selectAll(\".minor\").style({stroke:d.minorTickColor}),Z.select(\"line.grid-line\").attr({x1:d.tickLength?_-d.tickLength:0,x2:_}).style({display:d.angularAxis.gridLinesVisible?\"block\":\"none\"}),J.append(\"text\").classed(\"axis-text\",!0).style(F);var K=Z.select(\"text.axis-text\").attr({x:_+d.labelOffset,dy:a+\"em\",transform:function(t,e){var n=G(t),r=_+d.labelOffset,i=d.angularAxis.tickOrientation;return\"horizontal\"==i?\"rotate(\"+-n+\" \"+r+\" 0)\":\"radial\"==i?n<270&&n>90?\"rotate(180 \"+r+\" 0)\":null:\"rotate(\"+(n<=180&&n>0?-90:90)+\" \"+r+\" 0)\"}}).style({\"text-anchor\":\"middle\",display:d.angularAxis.labelsVisible?\"block\":\"none\"}).text((function(t,e){return e%(d.minorTicks+1)!=0?\"\":w?w[t]+d.angularAxis.ticksSuffix:t+d.angularAxis.ticksSuffix})).style(F);d.angularAxis.rewriteTicks&&K.text((function(t,e){return e%(d.minorTicks+1)!=0?\"\":d.angularAxis.rewriteTicks(this.textContent,e)}));var $=r.max(z.selectAll(\".angular-tick text\")[0].map((function(t,e){return t.getCTM().e+t.getBBox().width})));R.attr({transform:\"translate(\"+[_+$,d.margin.top]+\")\"});var Q=t.select(\"g.geometry-group\").selectAll(\"g\").size()>0,tt=t.select(\"g.geometry-group\").selectAll(\"g.geometry\").data(f);if(tt.enter().append(\"g\").attr({class:function(t,e){return\"geometry geometry\"+e}}),tt.exit().remove(),f[0]||Q){var et=[];f.forEach((function(t,e){var r={};r.radialScale=n,r.angularScale=s,r.container=tt.filter((function(t,n){return n==e})),r.geometry=t.geometry,r.orientation=d.orientation,r.direction=d.direction,r.index=e,et.push({data:t,geometryConfig:r})}));var nt=r.nest().key((function(t,e){return void 0!==t.data.groupId||\"unstacked\"})).entries(et),rt=[];nt.forEach((function(t,e){\"unstacked\"===t.key?rt=rt.concat(t.values.map((function(t,e){return[t]}))):rt.push(t.values)})),rt.forEach((function(t,e){var n;n=Array.isArray(t)?t[0].geometryConfig.geometry:t.geometryConfig.geometry;var r=t.map((function(t,e){return i(o[n].defaultConfig(),t)}));o[n]().config(r)()}))}var it,at,ot=t.select(\".guides-group\"),st=t.select(\".tooltips-group\"),lt=o.tooltipPanel().config({container:st,fontSize:8})(),ct=o.tooltipPanel().config({container:st,fontSize:8})(),ut=o.tooltipPanel().config({container:st,hasTick:!0})();if(!M){var ht=ot.select(\"line\").attr({x1:0,y1:0,y2:0}).style({stroke:\"grey\",\"pointer-events\":\"none\"});z.on(\"mousemove.angular-guide\",(function(t,e){var n=o.util.getMousePos(q).angle;ht.attr({x2:-_,transform:\"rotate(\"+n+\")\"}).style({opacity:.5}),it=s.invert((n+180+360-d.orientation)%360);var r=o.util.convertToCartesian(_+12,n+180);lt.text(o.util.round(it)).move([r[0]+x[0],r[1]+x[1]])})).on(\"mouseout.angular-guide\",(function(t,e){ot.select(\"line\").style({opacity:0})}))}var dt=ot.select(\"circle\").style({stroke:\"grey\",fill:\"none\"});z.on(\"mousemove.radial-guide\",(function(t,e){var r=o.util.getMousePos(q).radius;dt.attr({r:r}).style({opacity:.5}),at=n.invert(o.util.getMousePos(q).radius);var i=o.util.convertToCartesian(r,d.radialAxis.orientation);ct.text(o.util.round(at)).move([i[0]+x[0],i[1]+x[1]])})).on(\"mouseout.radial-guide\",(function(t,e){dt.style({opacity:0}),ut.hide(),lt.hide(),ct.hide()})),t.selectAll(\".geometry-group .mark\").on(\"mouseover.tooltip\",(function(e,n){var i=r.select(this),a=this.style.fill,s=\"black\";if(i.attr({\"data-opacity\":this.style.opacity||1}),a&&\"none\"!==a){i.attr({\"data-fill\":a}),s=r.hsl(a).darker().toString(),i.style({fill:s,opacity:1});var l={t:o.util.round(e[0]),r:o.util.round(e[1])};M&&(l.t=w[e[0]]);var c=\"t: \"+l.t+\", r: \"+l.r,u=this.getBoundingClientRect(),h=t.node().getBoundingClientRect(),d=[u.left+u.width/2-Y[0]-h.left,u.top+u.height/2-Y[1]-h.top];ut.config({color:s}).text(c),ut.move(d)}else i.attr({\"data-stroke\":a=this.style.stroke||\"black\"}),s=r.hsl(a).darker().toString(),i.style({stroke:s,opacity:1})})).on(\"mousemove.tooltip\",(function(t,e){if(0!=r.event.which)return!1;r.select(this).attr(\"data-fill\")&&ut.show()})).on(\"mouseout.tooltip\",(function(t,e){ut.hide();var n=r.select(this),i=n.attr(\"data-fill\");n.style(i?{fill:i,opacity:n.attr(\"data-opacity\")}:{stroke:n.attr(\"data-stroke\"),opacity:n.attr(\"data-opacity\")})}))}))}(c),this},config:function(t){if(!arguments.length)return l;var e=o.util.cloneJson(t);return e.data.forEach((function(t,e){l.data[e]||(l.data[e]={}),i(l.data[e],o.Axis.defaultConfig().data[0]),i(l.data[e],t)})),i(l.layout,o.Axis.defaultConfig().layout),i(l.layout,e.layout),this},getLiveConfig:function(){return u},getinputConfig:function(){return c},radialScale:function(t){return n},angularScale:function(t){return s},svg:function(){return t}};return r.rebind(d,h,\"on\"),d},o.Axis.defaultConfig=function(t,e){return{data:[{t:[1,2,3,4],r:[10,11,12,13],name:\"Line1\",geometry:\"LinePlot\",color:null,strokeDash:\"solid\",strokeColor:null,strokeSize:\"1\",visibleInLegend:!0,opacity:1}],layout:{defaultColorRange:r.scale.category10().range(),title:null,height:450,width:500,margin:{top:40,right:40,bottom:40,left:40},font:{size:12,color:\"gray\",outlineColor:\"white\",family:\"Tahoma, sans-serif\"},direction:\"clockwise\",orientation:0,labelOffset:10,radialAxis:{domain:null,orientation:-45,ticksSuffix:\"\",visible:!0,gridLinesVisible:!0,tickOrientation:\"horizontal\",rewriteTicks:null},angularAxis:{domain:[0,360],ticksSuffix:\"\",visible:!0,gridLinesVisible:!0,labelsVisible:!0,tickOrientation:\"horizontal\",rewriteTicks:null,ticksCount:null,ticksStep:null},minorTicks:0,tickLength:null,tickColor:\"silver\",minorTickColor:\"#eee\",backgroundColor:\"none\",needsEndSpacing:null,showLegend:!0,legend:{reverseOrder:!1},opacity:1}}},o.util={},o.DATAEXTENT=\"dataExtent\",o.AREA=\"AreaChart\",o.LINE=\"LinePlot\",o.DOT=\"DotPlot\",o.BAR=\"BarChart\",o.util._override=function(t,e){for(var n in t)n in e&&(e[n]=t[n])},o.util._extend=function(t,e){for(var n in t)e[n]=t[n]},o.util._rndSnd=function(){return 2*Math.random()-1+(2*Math.random()-1)+(2*Math.random()-1)},o.util.dataFromEquation2=function(t,e){var n=e||6;return r.range(0,360+n,n).map((function(e,n){var r=e*Math.PI/180;return[e,t(r)]}))},o.util.dataFromEquation=function(t,e,n){var i=e||6,a=[],o=[];r.range(0,360+i,i).forEach((function(e,n){var r=e*Math.PI/180,i=t(r);a.push(e),o.push(i)}));var s={t:a,r:o};return n&&(s.name=n),s},o.util.ensureArray=function(t,e){if(void 0===t)return null;var n=[].concat(t);return r.range(e).map((function(t,e){return n[e]||n[0]}))},o.util.fillArrays=function(t,e,n){return e.forEach((function(e,r){t[e]=o.util.ensureArray(t[e],n)})),t},o.util.cloneJson=function(t){return JSON.parse(JSON.stringify(t))},o.util.validateKeys=function(t,e){\"string\"==typeof e&&(e=e.split(\".\"));var n=e.shift();return t[n]&&(!e.length||objHasKeys(t[n],e))},o.util.sumArrays=function(t,e){return r.zip(t,e).map((function(t,e){return r.sum(t)}))},o.util.arrayLast=function(t){return t[t.length-1]},o.util.arrayEqual=function(t,e){for(var n=Math.max(t.length,e.length,1);n-- >=0&&t[n]===e[n];);return-2===n},o.util.flattenArray=function(t){for(var e=[];!o.util.arrayEqual(e,t);)e=t,t=[].concat.apply([],t);return t},o.util.deduplicate=function(t){return t.filter((function(t,e,n){return n.indexOf(t)==e}))},o.util.convertToCartesian=function(t,e){var n=e*Math.PI/180;return[t*Math.cos(n),t*Math.sin(n)]},o.util.round=function(t,e){var n=Math.pow(10,e||2);return Math.round(t*n)/n},o.util.getMousePos=function(t){var e=r.mouse(t.node()),n=e[0],i=e[1],a={};return a.x=n,a.y=i,a.pos=e,a.angle=180*(Math.atan2(i,n)+Math.PI)/Math.PI,a.radius=Math.sqrt(n*n+i*i),a},o.util.duplicatesCount=function(t){for(var e,n={},r={},i=0,a=t.length;i<a;i++)(e=t[i])in n?(n[e]++,r[e]=n[e]):n[e]=1;return r},o.util.duplicates=function(t){return Object.keys(o.util.duplicatesCount(t))},o.util.translator=function(t,e,n,r){if(r){var i=n.slice();n=e,e=i}var a=e.reduce((function(t,e){if(void 0!==t)return t[e]}),t);void 0!==a&&(e.reduce((function(t,n,r){if(void 0!==t)return r===e.length-1&&delete t[n],t[n]}),t),n.reduce((function(t,e,r){return void 0===t[e]&&(t[e]={}),r===n.length-1&&(t[e]=a),t[e]}),t))},o.PolyChart=function(){var t=[o.PolyChart.defaultConfig()],e=r.dispatch(\"hover\"),n={solid:\"none\",dash:[5,2],dot:[2,5]};function a(){var e=t[0].geometryConfig,i=e.container;\"string\"==typeof i&&(i=r.select(i)),i.datum(t).each((function(t,i){var a=!!t[0].data.yStack,o=t.map((function(t,e){return a?r.zip(t.data.t[0],t.data.r[0],t.data.yStack[0]):r.zip(t.data.t[0],t.data.r[0])})),s=e.angularScale,l=e.radialScale.domain()[0],c={bar:function(n,i,a){var o=t[a].data,l=e.radialScale(n[1])-e.radialScale(0),c=e.radialScale(n[2]||0),u=o.barWidth;r.select(this).attr({class:\"mark bar\",d:\"M\"+[[l+c,-u/2],[l+c,u/2],[c,u/2],[c,-u/2]].join(\"L\")+\"Z\",transform:function(t,n){return\"rotate(\"+(e.orientation+s(t[0]))+\")\"}})},dot:function(n,i,a){var o=n[2]?[n[0],n[1]+n[2]]:n,s=r.svg.symbol().size(t[a].data.dotSize).type(t[a].data.dotType)(n,i);r.select(this).attr({class:\"mark dot\",d:s,transform:function(t,n){var r;return\"translate(\"+[(r=function(t,n){return{r:e.radialScale(t[1]),t:(e.angularScale(t[0])+e.orientation)*Math.PI/180}}(o)).r*Math.cos(r.t),r.r*Math.sin(r.t)]+\")\"}})}},u=r.svg.line.radial().interpolate(t[0].data.lineInterpolation).radius((function(t){return e.radialScale(t[1])})).angle((function(t){return e.angularScale(t[0])*Math.PI/180}));c.line=function(n,i,a){var s=n[2]?o[a].map((function(t,e){return[t[0],t[1]+t[2]]})):o[a];if(r.select(this).each(c.dot).style({opacity:function(e,n){return+t[a].data.dotVisible},fill:p.stroke(n,i,a)}).attr({class:\"mark dot\"}),!(i>0)){var l=r.select(this.parentNode).selectAll(\"path.line\").data([0]);l.enter().insert(\"path\"),l.attr({class:\"line\",d:u(s),transform:function(t,n){return\"rotate(\"+(e.orientation+90)+\")\"},\"pointer-events\":\"none\"}).style({fill:function(t,e){return p.fill(n,i,a)},\"fill-opacity\":0,stroke:function(t,e){return p.stroke(n,i,a)},\"stroke-width\":function(t,e){return p[\"stroke-width\"](n,i,a)},\"stroke-dasharray\":function(t,e){return p[\"stroke-dasharray\"](n,i,a)},opacity:function(t,e){return p.opacity(n,i,a)},display:function(t,e){return p.display(n,i,a)}})}};var h=e.angularScale.range(),d=Math.abs(h[1]-h[0])/o[0].length*Math.PI/180,f=r.svg.arc().startAngle((function(t){return-d/2})).endAngle((function(t){return d/2})).innerRadius((function(t){return e.radialScale(l+(t[2]||0))})).outerRadius((function(t){return e.radialScale(l+(t[2]||0))+e.radialScale(t[1])}));c.arc=function(t,n,i){r.select(this).attr({class:\"mark arc\",d:f,transform:function(t,n){return\"rotate(\"+(e.orientation+s(t[0])+90)+\")\"}})};var p={fill:function(e,n,r){return t[r].data.color},stroke:function(e,n,r){return t[r].data.strokeColor},\"stroke-width\":function(e,n,r){return t[r].data.strokeSize+\"px\"},\"stroke-dasharray\":function(e,r,i){return n[t[i].data.strokeDash]},opacity:function(e,n,r){return t[r].data.opacity},display:function(e,n,r){return void 0===t[r].data.visible||t[r].data.visible?\"block\":\"none\"}},m=r.select(this).selectAll(\"g.layer\").data(o);m.enter().append(\"g\").attr({class:\"layer\"});var g=m.selectAll(\"path.mark\").data((function(t,e){return t}));g.enter().append(\"path\").attr({class:\"mark\"}),g.style(p).each(c[e.geometryType]),g.exit().remove(),m.exit().remove()}))}return a.config=function(e){return arguments.length?(e.forEach((function(e,n){t[n]||(t[n]={}),i(t[n],o.PolyChart.defaultConfig()),i(t[n],e)})),this):t},a.getColorScale=function(){},r.rebind(a,e,\"on\"),a},o.PolyChart.defaultConfig=function(){return{data:{name:\"geom1\",t:[[1,2,3,4]],r:[[1,2,3,4]],dotType:\"circle\",dotSize:64,dotVisible:!1,barWidth:20,color:\"#ffa500\",strokeSize:1,strokeColor:\"silver\",strokeDash:\"solid\",opacity:1,index:0,visible:!0,visibleInLegend:!0},geometryConfig:{geometry:\"LinePlot\",geometryType:\"arc\",direction:\"clockwise\",orientation:0,container:\"body\",radialScale:null,angularScale:null,colorScale:r.scale.category20()}}},o.BarChart=function(){return o.PolyChart()},o.BarChart.defaultConfig=function(){return{geometryConfig:{geometryType:\"bar\"}}},o.AreaChart=function(){return o.PolyChart()},o.AreaChart.defaultConfig=function(){return{geometryConfig:{geometryType:\"arc\"}}},o.DotPlot=function(){return o.PolyChart()},o.DotPlot.defaultConfig=function(){return{geometryConfig:{geometryType:\"dot\",dotType:\"circle\"}}},o.LinePlot=function(){return o.PolyChart()},o.LinePlot.defaultConfig=function(){return{geometryConfig:{geometryType:\"line\"}}},o.Legend=function(){var t=o.Legend.defaultConfig(),e=r.dispatch(\"hover\");function n(){var e=t.legendConfig,a=t.data.map((function(t,n){return[].concat(t).map((function(t,r){var a=i({},e.elements[n]);return a.name=t,a.color=[].concat(e.elements[n].color)[r],a}))})),o=r.merge(a);o=o.filter((function(t,n){return e.elements[n]&&(e.elements[n].visibleInLegend||void 0===e.elements[n].visibleInLegend)})),e.reverseOrder&&(o=o.reverse());var s=e.container;(\"string\"==typeof s||s.nodeName)&&(s=r.select(s));var l=o.map((function(t,e){return t.color})),c=e.fontSize,u=null==e.isContinuous?\"number\"==typeof o[0]:e.isContinuous,h=u?e.height:c*o.length,d=s.classed(\"legend-group\",!0).selectAll(\"svg\").data([0]),f=d.enter().append(\"svg\").attr({width:300,height:h+c,xmlns:\"http://www.w3.org/2000/svg\",\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\",version:\"1.1\"});f.append(\"g\").classed(\"legend-axis\",!0),f.append(\"g\").classed(\"legend-marks\",!0);var p=r.range(o.length),m=r.scale[u?\"linear\":\"ordinal\"]().domain(p).range(l),g=r.scale[u?\"linear\":\"ordinal\"]().domain(p)[u?\"range\":\"rangePoints\"]([0,h]);if(u){var y=d.select(\".legend-marks\").append(\"defs\").append(\"linearGradient\").attr({id:\"grad1\",x1:\"0%\",y1:\"0%\",x2:\"0%\",y2:\"100%\"}).selectAll(\"stop\").data(l);y.enter().append(\"stop\"),y.attr({offset:function(t,e){return e/(l.length-1)*100+\"%\"}}).style({\"stop-color\":function(t,e){return t}}),d.append(\"rect\").classed(\"legend-mark\",!0).attr({height:e.height,width:e.colorBandWidth,fill:\"url(#grad1)\"})}else{var v=d.select(\".legend-marks\").selectAll(\"path.legend-mark\").data(o);v.enter().append(\"path\").classed(\"legend-mark\",!0),v.attr({transform:function(t,e){return\"translate(\"+[c/2,g(e)+c/2]+\")\"},d:function(t,e){return a=3*(i=c),\"line\"===(n=t.symbol)?\"M\"+[[-i/2,-i/12],[i/2,-i/12],[i/2,i/12],[-i/2,i/12]]+\"Z\":-1!=r.svg.symbolTypes.indexOf(n)?r.svg.symbol().type(n).size(a)():r.svg.symbol().type(\"square\").size(a)();var n,i,a},fill:function(t,e){return m(e)}}),v.exit().remove()}var _=r.svg.axis().scale(g).orient(\"right\"),b=d.select(\"g.legend-axis\").attr({transform:\"translate(\"+[u?e.colorBandWidth:c,c/2]+\")\"}).call(_);return b.selectAll(\".domain\").style({fill:\"none\",stroke:\"none\"}),b.selectAll(\"line\").style({fill:\"none\",stroke:u?e.textColor:\"none\"}),b.selectAll(\"text\").style({fill:e.textColor,\"font-size\":e.fontSize}).text((function(t,e){return o[e].name})),n}return n.config=function(e){return arguments.length?(i(t,e),this):t},r.rebind(n,e,\"on\"),n},o.Legend.defaultConfig=function(t,e){return{data:[\"a\",\"b\",\"c\"],legendConfig:{elements:[{symbol:\"line\",color:\"red\"},{symbol:\"square\",color:\"yellow\"},{symbol:\"diamond\",color:\"limegreen\"}],height:150,colorBandWidth:30,fontSize:12,container:\"body\",isContinuous:null,textColor:\"grey\",reverseOrder:!1}}},o.tooltipPanel=function(){var t,e,n,a={container:null,hasTick:!1,fontSize:12,color:\"white\",padding:5},s=\"tooltip-\"+o.tooltipPanel.uid++,l=10,c=function(){var r=(t=a.container.selectAll(\"g.\"+s).data([0])).enter().append(\"g\").classed(s,!0).style({\"pointer-events\":\"none\",display:\"none\"});return n=r.append(\"path\").style({fill:\"white\",\"fill-opacity\":.9}).attr({d:\"M0 0\"}),e=r.append(\"text\").attr({dx:a.padding+l,dy:.3*+a.fontSize}),c};return c.text=function(i){var o=r.hsl(a.color).l,s=o>=.5?\"#aaa\":\"white\",u=i||\"\";e.style({fill:o>=.5?\"black\":\"white\",\"font-size\":a.fontSize+\"px\"}).text(u);var h=a.padding,d=e.node().getBBox(),f={fill:a.color,stroke:s,\"stroke-width\":\"2px\"},p=d.width+2*h+l,m=d.height+2*h;return n.attr({d:\"M\"+[[l,-m/2],[l,-m/4],[a.hasTick?0:l,0],[l,m/4],[l,m/2],[p,m/2],[p,-m/2]].join(\"L\")+\"Z\"}).style(f),t.attr({transform:\"translate(\"+[l,-m/2+2*h]+\")\"}),t.style({display:\"block\"}),c},c.move=function(e){if(t)return t.attr({transform:\"translate(\"+[e[0],e[1]]+\")\"}).style({display:\"block\"}),c},c.hide=function(){if(t)return t.style({display:\"none\"}),c},c.show=function(){if(t)return t.style({display:\"block\"}),c},c.config=function(t){return i(a,t),c},c},o.tooltipPanel.uid=1,o.adapter={},o.adapter.plotly=function(){return{convert:function(t,e){var n={};if(t.data&&(n.data=t.data.map((function(t,n){var r=i({},t);return[[r,[\"marker\",\"color\"],[\"color\"]],[r,[\"marker\",\"opacity\"],[\"opacity\"]],[r,[\"marker\",\"line\",\"color\"],[\"strokeColor\"]],[r,[\"marker\",\"line\",\"dash\"],[\"strokeDash\"]],[r,[\"marker\",\"line\",\"width\"],[\"strokeSize\"]],[r,[\"marker\",\"symbol\"],[\"dotType\"]],[r,[\"marker\",\"size\"],[\"dotSize\"]],[r,[\"marker\",\"barWidth\"],[\"barWidth\"]],[r,[\"line\",\"interpolation\"],[\"lineInterpolation\"]],[r,[\"showlegend\"],[\"visibleInLegend\"]]].forEach((function(t,n){o.util.translator.apply(null,t.concat(e))})),e||delete r.marker,e&&delete r.groupId,e?(\"LinePlot\"===r.geometry?(r.type=\"scatter\",!0===r.dotVisible?(delete r.dotVisible,r.mode=\"lines+markers\"):r.mode=\"lines\"):\"DotPlot\"===r.geometry?(r.type=\"scatter\",r.mode=\"markers\"):\"AreaChart\"===r.geometry?r.type=\"area\":\"BarChart\"===r.geometry&&(r.type=\"bar\"),delete r.geometry):(\"scatter\"===r.type?\"lines\"===r.mode?r.geometry=\"LinePlot\":\"markers\"===r.mode?r.geometry=\"DotPlot\":\"lines+markers\"===r.mode&&(r.geometry=\"LinePlot\",r.dotVisible=!0):\"area\"===r.type?r.geometry=\"AreaChart\":\"bar\"===r.type&&(r.geometry=\"BarChart\"),delete r.mode,delete r.type),r})),!e&&t.layout&&\"stack\"===t.layout.barmode)){var a=o.util.duplicates(n.data.map((function(t,e){return t.geometry})));n.data.forEach((function(t,e){var r=a.indexOf(t.geometry);-1!=r&&(n.data[e].groupId=r)}))}if(t.layout){var s=i({},t.layout);if([[s,[\"plot_bgcolor\"],[\"backgroundColor\"]],[s,[\"showlegend\"],[\"showLegend\"]],[s,[\"radialaxis\"],[\"radialAxis\"]],[s,[\"angularaxis\"],[\"angularAxis\"]],[s.angularaxis,[\"showline\"],[\"gridLinesVisible\"]],[s.angularaxis,[\"showticklabels\"],[\"labelsVisible\"]],[s.angularaxis,[\"nticks\"],[\"ticksCount\"]],[s.angularaxis,[\"tickorientation\"],[\"tickOrientation\"]],[s.angularaxis,[\"ticksuffix\"],[\"ticksSuffix\"]],[s.angularaxis,[\"range\"],[\"domain\"]],[s.angularaxis,[\"endpadding\"],[\"endPadding\"]],[s.radialaxis,[\"showline\"],[\"gridLinesVisible\"]],[s.radialaxis,[\"tickorientation\"],[\"tickOrientation\"]],[s.radialaxis,[\"ticksuffix\"],[\"ticksSuffix\"]],[s.radialaxis,[\"range\"],[\"domain\"]],[s.angularAxis,[\"showline\"],[\"gridLinesVisible\"]],[s.angularAxis,[\"showticklabels\"],[\"labelsVisible\"]],[s.angularAxis,[\"nticks\"],[\"ticksCount\"]],[s.angularAxis,[\"tickorientation\"],[\"tickOrientation\"]],[s.angularAxis,[\"ticksuffix\"],[\"ticksSuffix\"]],[s.angularAxis,[\"range\"],[\"domain\"]],[s.angularAxis,[\"endpadding\"],[\"endPadding\"]],[s.radialAxis,[\"showline\"],[\"gridLinesVisible\"]],[s.radialAxis,[\"tickorientation\"],[\"tickOrientation\"]],[s.radialAxis,[\"ticksuffix\"],[\"ticksSuffix\"]],[s.radialAxis,[\"range\"],[\"domain\"]],[s.font,[\"outlinecolor\"],[\"outlineColor\"]],[s.legend,[\"traceorder\"],[\"reverseOrder\"]],[s,[\"labeloffset\"],[\"labelOffset\"]],[s,[\"defaultcolorrange\"],[\"defaultColorRange\"]]].forEach((function(t,n){o.util.translator.apply(null,t.concat(e))})),e?(void 0!==s.tickLength&&(s.angularaxis.ticklen=s.tickLength,delete s.tickLength),s.tickColor&&(s.angularaxis.tickcolor=s.tickColor,delete s.tickColor)):(s.angularAxis&&void 0!==s.angularAxis.ticklen&&(s.tickLength=s.angularAxis.ticklen),s.angularAxis&&void 0!==s.angularAxis.tickcolor&&(s.tickColor=s.angularAxis.tickcolor)),s.legend&&\"boolean\"!=typeof s.legend.reverseOrder&&(s.legend.reverseOrder=\"normal\"!=s.legend.reverseOrder),s.legend&&\"boolean\"==typeof s.legend.traceorder&&(s.legend.traceorder=s.legend.traceorder?\"reversed\":\"normal\",delete s.legend.reverseOrder),s.margin&&void 0!==s.margin.t){var l=[\"t\",\"r\",\"b\",\"l\",\"pad\"],c=[\"top\",\"right\",\"bottom\",\"left\",\"pad\"],u={};r.entries(s.margin).forEach((function(t,e){u[c[l.indexOf(t.key)]]=t.value})),s.margin=u}e&&(delete s.needsEndSpacing,delete s.minorTickColor,delete s.minorTicks,delete s.angularaxis.ticksCount,delete s.angularaxis.ticksCount,delete s.angularaxis.ticksStep,delete s.angularaxis.rewriteTicks,delete s.angularaxis.nticks,delete s.radialaxis.ticksCount,delete s.radialaxis.ticksCount,delete s.radialaxis.ticksStep,delete s.radialaxis.rewriteTicks,delete s.radialaxis.nticks),n.layout=s}return n}}}},{\"../../../constants/alignment\":745,\"../../../lib\":778,d3:169}],901:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../../lib\"),a=t(\"../../../components/color\"),o=t(\"./micropolar\"),s=t(\"./undo_manager\"),l=i.extendDeepAll,c=e.exports={};c.framework=function(t){var e,n,i,a,u,h=new s;function d(n,s){return s&&(u=s),r.select(r.select(u).node().parentNode).selectAll(\".svg-container>*:not(.chart-root)\").remove(),e=e?l(e,n):n,i||(i=o.Axis()),a=o.adapter.plotly().convert(e),i.config(a).render(u),t.data=e.data,t.layout=e.layout,c.fillLayout(t),e}return d.isPolar=!0,d.svg=function(){return i.svg()},d.getConfig=function(){return e},d.getLiveConfig=function(){return o.adapter.plotly().convert(i.getLiveConfig(),!0)},d.getLiveScales=function(){return{t:i.angularScale(),r:i.radialScale()}},d.setUndoPoint=function(){var t,r,i=this,a=o.util.cloneJson(e);t=a,r=n,h.add({undo:function(){r&&i(r)},redo:function(){i(t)}}),n=o.util.cloneJson(a)},d.undo=function(){h.undo()},d.redo=function(){h.redo()},d},c.fillLayout=function(t){var e=r.select(t).selectAll(\".plot-container\"),n=e.selectAll(\".svg-container\"),i=t.framework&&t.framework.svg&&t.framework.svg();t._fullLayout=l({width:800,height:600,paper_bgcolor:a.background,_container:e,_paperdiv:n,_paper:i},t.layout)}},{\"../../../components/color\":643,\"../../../lib\":778,\"./micropolar\":900,\"./undo_manager\":902,d3:169}],902:[function(t,e,n){\"use strict\";e.exports=function(){var t,e=[],n=-1,r=!1;function i(t,e){return t?(r=!0,t[e](),r=!1,this):this}return{add:function(t){return r||(e.splice(n+1,e.length-n),e.push(t),n=e.length-1),this},setCallback:function(e){t=e},undo:function(){var r=e[n];return r?(i(r,\"undo\"),n-=1,t&&t(r.undo),this):this},redo:function(){var r=e[n+1];return r?(i(r,\"redo\"),n+=1,t&&t(r.redo),this):this},clear:function(){e=[],n=-1},hasUndo:function(){return-1!==n},hasRedo:function(){return n<e.length-1},getCommands:function(){return e},getPreviousCommand:function(){return e[n-1]},getIndex:function(){return n}}}},{}],903:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"tinycolor2\"),a=t(\"../../registry\"),o=t(\"../../lib\"),s=o.strRotate,l=o.strTranslate,c=t(\"../../components/color\"),u=t(\"../../components/drawing\"),h=t(\"../plots\"),d=t(\"../../plots/cartesian/axes\"),f=t(\"../cartesian/set_convert\"),p=t(\"./set_convert\"),m=t(\"../cartesian/autorange\").doAutoRange,g=t(\"../cartesian/dragbox\"),y=t(\"../../components/dragelement\"),v=t(\"../../components/fx\"),_=t(\"../../components/titles\"),b=t(\"../cartesian/select\").prepSelect,x=t(\"../cartesian/select\").selectOnClick,w=t(\"../cartesian/select\").clearSelect,k=t(\"../../lib/setcursor\"),M=t(\"../../lib/clear_gl_canvases\"),T=t(\"../../plot_api/subroutines\").redrawReglTraces,S=t(\"../../constants/alignment\").MID_SHIFT,A=t(\"./constants\"),L=t(\"./helpers\"),C=o._,E=o.mod,O=o.deg2rad,D=o.rad2deg;function I(t,e){this.id=e,this.gd=t,this._hasClipOnAxisFalse=null,this.vangles=null,this.radialAxisAngle=null,this.traceHash={},this.layers={},this.clipPaths={},this.clipIds={},this.viewInitial={};var n=t._fullLayout;this.clipIds.forTraces=\"clip\"+n._uid+e+\"-for-traces\",this.clipPaths.forTraces=n._clips.append(\"clipPath\").attr(\"id\",this.clipIds.forTraces),this.clipPaths.forTraces.append(\"path\"),this.framework=n._polarlayer.append(\"g\").attr(\"class\",e),this.radialTickLayout=null,this.angularTickLayout=null}var P=I.prototype;function R(t){var e=t.ticks+String(t.ticklen)+String(t.showticklabels);return\"side\"in t&&(e+=t.side),e}function z(t,e){return e[o.findIndexOfMin(e,(function(e){return o.angleDist(t,e)}))]}function j(t,e,n){return e?(t.attr(\"display\",null),t.attr(n)):t&&t.attr(\"display\",\"none\"),t}e.exports=function(t,e){return new I(t,e)},P.plot=function(t,e){var n=this,r=e[n.id];n._hasClipOnAxisFalse=!1;for(var i=0;i<t.length;i++)if(!1===t[i][0].trace.cliponaxis){n._hasClipOnAxisFalse=!0;break}n.updateLayers(e,r),n.updateLayout(e,r),h.generalUpdatePerTraceModule(n.gd,n,t,r),n.updateFx(e,r)},P.updateLayers=function(t,e){var n=this.layers,i=e.radialaxis,a=e.angularaxis,o=A.layerNames,s=o.indexOf(\"frontplot\"),l=o.slice(0,s),c=\"below traces\"===a.layer,u=\"below traces\"===i.layer;c&&l.push(\"angular-line\"),u&&l.push(\"radial-line\"),c&&l.push(\"angular-axis\"),u&&l.push(\"radial-axis\"),l.push(\"frontplot\"),c||l.push(\"angular-line\"),u||l.push(\"radial-line\"),c||l.push(\"angular-axis\"),u||l.push(\"radial-axis\");var h=this.framework.selectAll(\".polarsublayer\").data(l,String);h.enter().append(\"g\").attr(\"class\",(function(t){return\"polarsublayer \"+t})).each((function(t){var e=n[t]=r.select(this);switch(t){case\"frontplot\":e.append(\"g\").classed(\"barlayer\",!0),e.append(\"g\").classed(\"scatterlayer\",!0);break;case\"backplot\":e.append(\"g\").classed(\"maplayer\",!0);break;case\"plotbg\":n.bg=e.append(\"path\");break;case\"radial-grid\":case\"angular-grid\":e.style(\"fill\",\"none\");break;case\"radial-line\":e.append(\"line\").style(\"fill\",\"none\");break;case\"angular-line\":e.append(\"path\").style(\"fill\",\"none\")}})),h.order()},P.updateLayout=function(t,e){var n=this,r=n.layers,i=t._size,a=e.radialaxis,o=e.angularaxis,s=e.domain.x,h=e.domain.y;n.xOffset=i.l+i.w*s[0],n.yOffset=i.t+i.h*(1-h[1]);var d=n.xLength=i.w*(s[1]-s[0]),f=n.yLength=i.h*(h[1]-h[0]),p=e.sector;n.sectorInRad=p.map(O);var m,g,y,v,_,b=n.sectorBBox=function(t){var e,n=t[0],r=t[1]-n,i=E(n,360),a=i+r,o=Math.cos(O(i)),s=Math.sin(O(i)),l=Math.cos(O(a)),c=Math.sin(O(a));return e=i<=90&&a>=90||i>90&&a>=450?1:s<=0&&c<=0?0:Math.max(s,c),[i<=180&&a>=180||i>180&&a>=540?-1:o>=0&&l>=0?0:Math.min(o,l),i<=270&&a>=270||i>270&&a>=630?-1:s>=0&&c>=0?0:Math.min(s,c),a>=360?1:o<=0&&l<=0?0:Math.max(o,l),e]}(p),x=b[2]-b[0],w=f/d,k=Math.abs((b[3]-b[1])/x);w>k?(m=d,y=[s[0],s[1]],v=[h[0]+(_=(f-(g=d*k))/i.h/2),h[1]-_]):(g=f,y=[s[0]+(_=(d-(m=f/k))/i.w/2),s[1]-_],v=[h[0],h[1]]),n.xLength2=m,n.yLength2=g,n.xDomain2=y,n.yDomain2=v;var M=n.xOffset2=i.l+i.w*y[0],T=n.yOffset2=i.t+i.h*(1-v[1]),S=n.radius=m/x,A=n.innerRadius=e.hole*S,L=n.cx=M-S*b[0],C=n.cy=T+S*b[3],D=n.cxx=L-M,I=n.cyy=C-T;n.radialAxis=n.mockAxis(t,e,a,{_id:\"x\",side:{counterclockwise:\"top\",clockwise:\"bottom\"}[a.side],_realSide:a.side,domain:[A/i.w,S/i.w]}),n.angularAxis=n.mockAxis(t,e,o,{side:\"right\",domain:[0,Math.PI],autorange:!1}),n.doAutoRange(t,e),n.updateAngularAxis(t,e),n.updateRadialAxis(t,e),n.updateRadialAxisTitle(t,e),n.xaxis=n.mockCartesianAxis(t,e,{_id:\"x\",domain:y}),n.yaxis=n.mockCartesianAxis(t,e,{_id:\"y\",domain:v});var P=n.pathSubplot();n.clipPaths.forTraces.select(\"path\").attr(\"d\",P).attr(\"transform\",l(D,I)),r.frontplot.attr(\"transform\",l(M,T)).call(u.setClipUrl,n._hasClipOnAxisFalse?null:n.clipIds.forTraces,n.gd),r.bg.attr(\"d\",P).attr(\"transform\",l(L,C)).call(c.fill,e.bgcolor)},P.mockAxis=function(t,e,n,r){var i=o.extendFlat({},n,r);return p(i,e,t),i},P.mockCartesianAxis=function(t,e,n){var r=this,i=n._id,a=o.extendFlat({type:\"linear\"},n);f(a,t);var s={x:[0,2],y:[1,3]};return a.setRange=function(){var t=r.sectorBBox,n=s[i],o=r.radialAxis._rl,l=(o[1]-o[0])/(1-e.hole);a.range=[t[n[0]]*l,t[n[1]]*l]},a.isPtWithinRange=\"x\"===i?function(t){return r.isPtInside(t)}:function(){return!0},a.setRange(),a.setScale(),a},P.doAutoRange=function(t,e){var n=this.gd,r=this.radialAxis,i=e.radialaxis;r.setScale(),m(n,r);var a=r.range;i.range=a.slice(),i._input.range=a.slice(),r._rl=[r.r2l(a[0],null,\"gregorian\"),r.r2l(a[1],null,\"gregorian\")]},P.updateRadialAxis=function(t,e){var n=this,r=n.gd,i=n.layers,a=n.radius,u=n.innerRadius,h=n.cx,f=n.cy,p=e.radialaxis,m=E(e.sector[0],360),g=n.radialAxis,y=u<a;n.fillViewInitialKey(\"radialaxis.angle\",p.angle),n.fillViewInitialKey(\"radialaxis.range\",g.range.slice()),g.setGeometry(),\"auto\"===g.tickangle&&m>90&&m<=270&&(g.tickangle=180);var v=function(t){return l(g.l2p(t.x)+u,0)},_=R(p);if(n.radialTickLayout!==_&&(i[\"radial-axis\"].selectAll(\".xtick\").remove(),n.radialTickLayout=_),y){g.setScale();var b=d.calcTicks(g),x=d.clipEnds(g,b),w=d.getTickSigns(g)[2];d.drawTicks(r,g,{vals:b,layer:i[\"radial-axis\"],path:d.makeTickPath(g,0,w),transFn:v,crisp:!1}),d.drawGrid(r,g,{vals:x,layer:i[\"radial-grid\"],path:function(t){return n.pathArc(g.r2p(t.x)+u)},transFn:o.noop,crisp:!1}),d.drawLabels(r,g,{vals:b,layer:i[\"radial-axis\"],transFn:v,labelFns:d.makeLabelFns(g,0)})}var k=n.radialAxisAngle=n.vangles?D(z(O(p.angle),n.vangles)):p.angle,M=l(h,f),T=M+s(-k);j(i[\"radial-axis\"],y&&(p.showticklabels||p.ticks),{transform:T}),j(i[\"radial-grid\"],y&&p.showgrid,{transform:M}),j(i[\"radial-line\"].select(\"line\"),y&&p.showline,{x1:u,y1:0,x2:a,y2:0,transform:T}).attr(\"stroke-width\",p.linewidth).call(c.stroke,p.linecolor)},P.updateRadialAxisTitle=function(t,e,n){var r=this,i=r.gd,a=r.radius,o=r.cx,s=r.cy,l=e.radialaxis,c=r.id+\"title\",h=void 0!==n?n:r.radialAxisAngle,d=O(h),f=Math.cos(d),p=Math.sin(d),m=0;if(l.title){var g=u.bBox(r.layers[\"radial-axis\"].node()).height,y=l.title.font.size;m=\"counterclockwise\"===l.side?-g-.4*y:g+.8*y}r.layers[\"radial-axis-title\"]=_.draw(i,c,{propContainer:l,propName:r.id+\".radialaxis.title\",placeholder:C(i,\"Click to enter radial axis title\"),attributes:{x:o+a/2*f+m*p,y:s-a/2*p+m*f,\"text-anchor\":\"middle\"},transform:{rotate:-h}})},P.updateAngularAxis=function(t,e){var n=this,r=n.gd,i=n.layers,a=n.radius,u=n.innerRadius,h=n.cx,f=n.cy,p=e.angularaxis,m=n.angularAxis;n.fillViewInitialKey(\"angularaxis.rotation\",p.rotation),m.setGeometry(),m.setScale();var g=function(t){return m.t2g(t.x)};\"linear\"===m.type&&\"radians\"===m.thetaunit&&(m.tick0=D(m.tick0),m.dtick=D(m.dtick));var y=function(t){return l(h+a*Math.cos(t),f-a*Math.sin(t))},v=d.makeLabelFns(m,0).labelStandoff,_={xFn:function(t){var e=g(t);return Math.cos(e)*v},yFn:function(t){var e=g(t),n=Math.sin(e)>0?.2:1;return-Math.sin(e)*(v+t.fontSize*n)+Math.abs(Math.cos(e))*(t.fontSize*S)},anchorFn:function(t){var e=g(t),n=Math.cos(e);return Math.abs(n)<.1?\"middle\":n>0?\"start\":\"end\"},heightFn:function(t,e,n){var r=g(t);return-.5*(1+Math.sin(r))*n}},b=R(p);n.angularTickLayout!==b&&(i[\"angular-axis\"].selectAll(\".\"+m._id+\"tick\").remove(),n.angularTickLayout=b);var x,w=d.calcTicks(m);if(\"linear\"===e.gridshape?(x=w.map(g),o.angleDelta(x[0],x[1])<0&&(x=x.slice().reverse())):x=null,n.vangles=x,\"category\"===m.type&&(w=w.filter((function(t){return o.isAngleInsideSector(g(t),n.sectorInRad)}))),m.visible){var k=\"inside\"===m.ticks?-1:1;d.drawTicks(r,m,{vals:w,layer:i[\"angular-axis\"],path:\"M\"+k*((m.linewidth||1)/2)+\",0h\"+k*m.ticklen,transFn:function(t){var e=g(t);return y(e)+s(-D(e))},crisp:!1}),d.drawGrid(r,m,{vals:w,layer:i[\"angular-grid\"],path:function(t){var e=g(t),n=Math.cos(e),r=Math.sin(e);return\"M\"+[h+u*n,f-u*r]+\"L\"+[h+a*n,f-a*r]},transFn:o.noop,crisp:!1}),d.drawLabels(r,m,{vals:w,layer:i[\"angular-axis\"],repositionOnUpdate:!0,transFn:function(t){return y(g(t))},labelFns:_})}j(i[\"angular-line\"].select(\"path\"),p.showline,{d:n.pathSubplot(),transform:l(h,f)}).attr(\"stroke-width\",p.linewidth).call(c.stroke,p.linecolor)},P.updateFx=function(t,e){this.gd._context.staticPlot||(this.updateAngularDrag(t),this.updateRadialDrag(t,e,0),this.updateRadialDrag(t,e,1),this.updateMainDrag(t))},P.updateMainDrag=function(t){var e,n,s=this,c=s.gd,u=t._zoomlayer,h=A.MINZOOM,d=A.OFFEDGE,f=s.radius,p=s.innerRadius,m=s.cx,_=s.cy,k=s.cxx,M=s.cyy,T=s.sectorInRad,S=s.vangles,C=s.radialAxis,E=L.clampTiny,O=L.findXYatLength,D=L.findEnclosingVertexAngles,I=A.cornerHalfWidth,P=A.cornerLen/2,R=g.makeDragger(s.layers,\"path\",\"maindrag\",\"crosshair\");r.select(R).attr(\"d\",s.pathSubplot()).attr(\"transform\",l(m,_));var z,j,F,N,B,Y,H,V,U,W={element:R,gd:c,subplot:s.id,plotinfo:{id:s.id,xaxis:s.xaxis,yaxis:s.yaxis},xaxes:[s.xaxis],yaxes:[s.yaxis]};function q(t,e){return Math.sqrt(t*t+e*e)}function G(t,e){return q(t-k,e-M)}function X(t,e){return Math.atan2(M-e,t-k)}function Z(t,e){return[t*Math.cos(e),t*Math.sin(-e)]}function J(t,e){if(0===t)return s.pathSector(2*I);var n=P/t,r=e-n,i=e+n,a=Math.max(0,Math.min(t,f)),o=a-I,l=a+I;return\"M\"+Z(o,r)+\"A\"+[o,o]+\" 0,0,0 \"+Z(o,i)+\"L\"+Z(l,i)+\"A\"+[l,l]+\" 0,0,1 \"+Z(l,r)+\"Z\"}function K(t,e,n){if(0===t)return s.pathSector(2*I);var r,i,a=Z(t,e),o=Z(t,n),l=E((a[0]+o[0])/2),c=E((a[1]+o[1])/2);if(l&&c){var u=c/l,h=-1/u,d=O(I,u,l,c);r=O(P,h,d[0][0],d[0][1]),i=O(P,h,d[1][0],d[1][1])}else{var f,p;c?(f=P,p=I):(f=I,p=P),r=[[l-f,c-p],[l+f,c-p]],i=[[l-f,c+p],[l+f,c+p]]}return\"M\"+r.join(\"L\")+\"L\"+i.reverse().join(\"L\")+\"Z\"}function $(t,e){return e=Math.max(Math.min(e,f),p),t<d?t=0:f-t<d?t=f:e<d?e=0:f-e<d&&(e=f),Math.abs(e-t)>h?(t<e?(F=t,N=e):(F=e,N=t),!0):(F=null,N=null,!1)}function Q(t,e){e=e||\"M0,0Z\",V.attr(\"d\",t=t||B),U.attr(\"d\",e),g.transitionZoombox(V,U,Y,H),Y=!0;var n={};it(n),c.emit(\"plotly_relayouting\",n)}function tt(t,r){var i,a,o=z+(t*=e),l=j+(r*=n),c=G(z,j),u=Math.min(G(o,l),f),h=X(z,j);$(c,u)&&(i=B+s.pathSector(N),F&&(i+=s.pathSector(F)),a=J(F,h)+J(N,h)),Q(i,a)}function et(t,e,n,r){var i=L.findIntersectionXY(n,r,n,[t-k,M-e]);return q(i[0],i[1])}function nt(t,e){var n,r,i=z+t,a=j+e,o=X(z,j),l=X(i,a),c=D(o,S),u=D(l,S);$(et(z,j,c[0],c[1]),Math.min(et(i,a,u[0],u[1]),f))&&(n=B+s.pathSector(N),F&&(n+=s.pathSector(F)),r=[K(F,c[0],c[1]),K(N,c[0],c[1])].join(\" \")),Q(n,r)}function rt(){if(g.removeZoombox(c),null!==F&&null!==N){var t={};it(t),g.showDoubleClickNotifier(c),a.call(\"_guiRelayout\",c,t)}}function it(t){var e=C._rl,n=(e[1]-e[0])/(1-p/f)/f;t[s.id+\".radialaxis.range\"]=[e[0]+(F-p)*n,e[0]+(N-p)*n]}function at(t,e){var n=c._fullLayout.clickmode;if(g.removeZoombox(c),2===t){var r={};for(var i in s.viewInitial)r[s.id+\".\"+i]=s.viewInitial[i];c.emit(\"plotly_doubleclick\",null),a.call(\"_guiRelayout\",c,r)}n.indexOf(\"select\")>-1&&1===t&&x(e,c,[s.xaxis],[s.yaxis],s.id,W),n.indexOf(\"event\")>-1&&v.click(c,e,s.id)}W.prepFn=function(t,r,a){var l=c._fullLayout.dragmode,h=R.getBoundingClientRect();c._fullLayout._calcInverseTransform(c),e=c._fullLayout._invScaleX,n=c._fullLayout._invScaleY;var d=o.apply3DTransform(c._fullLayout._invTransform)(r-h.left,a-h.top);if(z=d[0],j=d[1],S){var p=L.findPolygonOffset(f,T[0],T[1],S);z+=k+p[0],j+=M+p[1]}switch(l){case\"zoom\":W.moveFn=S?nt:tt,W.clickFn=at,W.doneFn=rt,F=null,N=null,B=s.pathSubplot(),Y=!1,H=i(c._fullLayout[s.id].bgcolor).getLuminance(),(V=g.makeZoombox(u,H,m,_,B)).attr(\"fill-rule\",\"evenodd\"),U=g.makeCorners(u,m,_),w(c);break;case\"select\":case\"lasso\":b(t,r,a,W,l)}},R.onmousemove=function(t){v.hover(c,t,s.id),c._fullLayout._lasthover=R,c._fullLayout._hoversubplot=s.id},R.onmouseout=function(t){c._dragging||y.unhover(c,t)},y.init(W)},P.updateRadialDrag=function(t,e,n){var i=this,c=i.gd,u=i.layers,h=i.radius,d=i.innerRadius,f=i.cx,p=i.cy,m=i.radialAxis,v=A.radialDragBoxSize,_=v/2;if(m.visible){var b,x,k,S=O(i.radialAxisAngle),L=m._rl,C=L[0],E=L[1],I=L[n],P=.75*(L[1]-L[0])/(1-e.hole)/h;n?(b=f+(h+_)*Math.cos(S),x=p-(h+_)*Math.sin(S),k=\"radialdrag\"):(b=f+(d-_)*Math.cos(S),x=p-(d-_)*Math.sin(S),k=\"radialdrag-inner\");var R,F,N,B=g.makeRectDragger(u,k,\"crosshair\",-_,-_,v,v),Y={element:B,gd:c};j(r.select(B),m.visible&&d<h,{transform:l(b,x)}),Y.prepFn=function(){R=null,F=null,N=null,Y.moveFn=H,Y.doneFn=V,w(c)},Y.clampFn=function(t,e){return Math.sqrt(t*t+e*e)<A.MINDRAG&&(t=0,e=0),[t,e]},y.init(Y)}function H(t,e){if(R)R(t,e);else{var r=[t,-e],a=[Math.cos(S),Math.sin(S)],s=Math.abs(o.dot(r,a)/Math.sqrt(o.dot(r,r)));isNaN(s)||(R=s<.5?U:W)}var l={};(function(t){null!==F?t[i.id+\".radialaxis.angle\"]=F:null!==N&&(t[i.id+\".radialaxis.range[\"+n+\"]\"]=N)})(l),c.emit(\"plotly_relayouting\",l)}function V(){null!==F?a.call(\"_guiRelayout\",c,i.id+\".radialaxis.angle\",F):null!==N&&a.call(\"_guiRelayout\",c,i.id+\".radialaxis.range[\"+n+\"]\",N)}function U(t,e){if(0!==n){F=Math.atan2(p-(x+e),b+t-f),i.vangles&&(F=z(F,i.vangles)),F=D(F);var r=l(f,p)+s(-F);u[\"radial-axis\"].attr(\"transform\",r),u[\"radial-line\"].select(\"line\").attr(\"transform\",r);var a=i.gd._fullLayout;i.updateRadialAxisTitle(a,a[i.id],F)}}function W(t,e){var r=o.dot([t,-e],[Math.cos(S),Math.sin(S)]);if(N=I-P*r,P>0==(n?N>C:N<E)){var s=c._fullLayout,l=s[i.id];m.range[n]=N,m._rl[n]=N,i.updateRadialAxis(s,l),i.xaxis.setRange(),i.xaxis.setScale(),i.yaxis.setRange(),i.yaxis.setScale();var u=!1;for(var h in i.traceHash){var d=i.traceHash[h],f=o.filterVisible(d);d[0][0].trace._module.plot(c,i,f,l),a.traceIs(h,\"gl\")&&f.length&&(u=!0)}u&&(M(c),T(c))}else N=null}},P.updateAngularDrag=function(t){var e=this,n=e.gd,i=e.layers,c=e.radius,h=e.angularAxis,d=e.cx,f=e.cy,p=e.cxx,m=e.cyy,v=A.angularDragBoxSize,_=g.makeDragger(i,\"path\",\"angulardrag\",\"move\"),b={element:_,gd:n};function x(t,e){return Math.atan2(m+v-e,t-p-v)}r.select(_).attr(\"d\",e.pathAnnulus(c,c+v)).attr(\"transform\",l(d,f)).call(k,\"move\");var S,L,C,E,O,I,P=i.frontplot.select(\".scatterlayer\").selectAll(\".trace\"),R=P.selectAll(\".point\"),z=P.selectAll(\".textpoint\");function j(c,g){var y=e.gd._fullLayout,v=y[e.id],_=x(S+c*t._invScaleX,L+g*t._invScaleY),b=D(_-I);if(E=C+b,i.frontplot.attr(\"transform\",l(e.xOffset2,e.yOffset2)+s([-b,p,m])),e.vangles){O=e.radialAxisAngle+b;var w=l(d,f)+s(-b),k=l(d,f)+s(-O);i.bg.attr(\"transform\",w),i[\"radial-grid\"].attr(\"transform\",w),i[\"radial-axis\"].attr(\"transform\",k),i[\"radial-line\"].select(\"line\").attr(\"transform\",k),e.updateRadialAxisTitle(y,v,O)}else e.clipPaths.forTraces.select(\"path\").attr(\"transform\",l(p,m)+s(b));R.each((function(){var t=r.select(this),e=u.getTranslate(t);t.attr(\"transform\",l(e.x,e.y)+s([b]))})),z.each((function(){var t=r.select(this),e=t.select(\"text\"),n=u.getTranslate(t);t.attr(\"transform\",s([b,e.attr(\"x\"),e.attr(\"y\")])+l(n.x,n.y))})),h.rotation=o.modHalf(E,360),e.updateAngularAxis(y,v),e._hasClipOnAxisFalse&&!o.isFullCircle(e.sectorInRad)&&P.call(u.hideOutsideRangePoints,e);var A=!1;for(var j in e.traceHash)if(a.traceIs(j,\"gl\")){var N=e.traceHash[j],B=o.filterVisible(N);N[0][0].trace._module.plot(n,e,B,v),B.length&&(A=!0)}A&&(M(n),T(n));var Y={};F(Y),n.emit(\"plotly_relayouting\",Y)}function F(t){t[e.id+\".angularaxis.rotation\"]=E,e.vangles&&(t[e.id+\".radialaxis.angle\"]=O)}function N(){z.select(\"text\").attr(\"transform\",null);var t={};F(t),a.call(\"_guiRelayout\",n,t)}b.prepFn=function(r,i,a){C=t[e.id].angularaxis.rotation;var s=_.getBoundingClientRect();S=i-s.left,L=a-s.top,n._fullLayout._calcInverseTransform(n);var l=o.apply3DTransform(t._invTransform)(S,L);I=x(S=l[0],L=l[1]),b.moveFn=j,b.doneFn=N,w(n)},e.vangles&&!o.isFullCircle(e.sectorInRad)&&(b.prepFn=o.noop,k(r.select(_),null)),y.init(b)},P.isPtInside=function(t){var e=this.sectorInRad,n=this.vangles,r=this.angularAxis.c2g(t.theta),i=this.radialAxis,a=i.c2l(t.r);return(n?L.isPtInsidePolygon:o.isPtInsideSector)(a,r,i._rl,e,n)},P.pathArc=function(t){var e=this.sectorInRad,n=this.vangles;return(n?L.pathPolygon:o.pathArc)(t,e[0],e[1],n)},P.pathSector=function(t){var e=this.sectorInRad,n=this.vangles;return(n?L.pathPolygon:o.pathSector)(t,e[0],e[1],n)},P.pathAnnulus=function(t,e){var n=this.sectorInRad,r=this.vangles;return(r?L.pathPolygonAnnulus:o.pathAnnulus)(t,e,n[0],n[1],r)},P.pathSubplot=function(){var t=this.innerRadius,e=this.radius;return t?this.pathAnnulus(t,e):this.pathSector(e)},P.fillViewInitialKey=function(t,e){t in this.viewInitial||(this.viewInitial[t]=e)}},{\"../../components/color\":643,\"../../components/dragelement\":662,\"../../components/drawing\":665,\"../../components/fx\":683,\"../../components/titles\":738,\"../../constants/alignment\":745,\"../../lib\":778,\"../../lib/clear_gl_canvases\":762,\"../../lib/setcursor\":799,\"../../plot_api/subroutines\":818,\"../../plots/cartesian/axes\":828,\"../../registry\":911,\"../cartesian/autorange\":827,\"../cartesian/dragbox\":836,\"../cartesian/select\":847,\"../cartesian/set_convert\":848,\"../plots\":891,\"./constants\":892,\"./helpers\":893,\"./set_convert\":904,d3:169,tinycolor2:576}],904:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../cartesian/set_convert\"),a=r.deg2rad,o=r.rad2deg;e.exports=function(t,e,n){switch(i(t,n),t._id){case\"x\":case\"radialaxis\":!function(t,e){var n=e._subplot;t.setGeometry=function(){var e=t._rl[0],r=t._rl[1],i=n.innerRadius,a=(n.radius-i)/(r-e),o=i/a,s=e>r?function(t){return t<=0}:function(t){return t>=0};t.c2g=function(n){var r=t.c2l(n)-e;return(s(r)?r:0)+o},t.g2c=function(n){return t.l2c(n+e-o)},t.g2p=function(t){return t*a},t.c2p=function(e){return t.g2p(t.c2g(e))}}}(t,e);break;case\"angularaxis\":!function(t,e){var n=t.type;if(\"linear\"===n){var i=t.d2c,s=t.c2d;t.d2c=function(t,e){return function(t,e){return\"degrees\"===e?a(t):t}(i(t),e)},t.c2d=function(t,e){return s(function(t,e){return\"degrees\"===e?o(t):t}(t,e))}}t.makeCalcdata=function(e,i){var a,o,s=e[i],l=e._length,c=function(n){return t.d2c(n,e.thetaunit)};if(s){if(r.isTypedArray(s)&&\"linear\"===n){if(l===s.length)return s;if(s.subarray)return s.subarray(0,l)}for(a=new Array(l),o=0;o<l;o++)a[o]=c(s[o])}else{var u=i+\"0\",h=\"d\"+i,d=u in e?c(e[u]):0,f=e[h]?c(e[h]):(t.period||2*Math.PI)/l;for(a=new Array(l),o=0;o<l;o++)a[o]=d+o*f}return a},t.setGeometry=function(){var i,s,l,c,u=e.sector,h=u.map(a),d={clockwise:-1,counterclockwise:1}[t.direction],f=a(t.rotation),p=function(t){return d*t+f},m=function(t){return(t-f)/d};switch(n){case\"linear\":s=i=r.identity,c=a,l=o,t.range=r.isFullCircle(h)?[u[0],u[0]+360]:h.map(m).map(o);break;case\"category\":var g=t._categories.length,y=t.period?Math.max(t.period,g):g;0===y&&(y=1),s=c=function(t){return 2*t*Math.PI/y},i=l=function(t){return t*y/Math.PI/2},t.range=[0,y]}t.c2g=function(t){return p(s(t))},t.g2c=function(t){return i(m(t))},t.t2g=function(t){return p(c(t))},t.g2t=function(t){return l(m(t))}}}(t,e)}}},{\"../../lib\":778,\"../cartesian/set_convert\":848}],905:[function(t,e,n){\"use strict\";var r=t(\"../lib\"),i=t(\"../plot_api/plot_template\"),a=t(\"./domain\").defaults;e.exports=function(t,e,n,o){var s,l,c=o.attributes,u=o.handleDefaults,h=o.partition||\"x\",d=e._subplots[o.type],f=d.length,p=f&&d[0].replace(/\\d+$/,\"\");function m(t,e){return r.coerce(s,l,c,t,e)}for(var g=0;g<f;g++){var y=d[g];s=t[y]?t[y]:t[y]={},l=i.newContainer(e,y,p),m(\"uirevision\",e.uirevision);var v={};v[h]=[g/f,(g+1)/f],a(l,e,m,v),o.id=y,u(s,l,m,o)}}},{\"../lib\":778,\"../plot_api/plot_template\":817,\"./domain\":855}],906:[function(t,e,n){\"use strict\";function r(t){var e=t.description?\" \"+t.description:\"\",n=t.keys||[];if(n.length>0){for(var r=[],i=0;i<n.length;i++)r[i]=\"`\"+n[i]+\"`\";e+=\"Finally, the template string has access to \",e=1===n.length?\"variable \"+r[0]:\"variables \"+r.slice(0,-1).join(\", \")+\" and \"+r.slice(-1)+\".\"}return e}['Variables are inserted using %{variable}, for example \"y: %{y}\".','Numbers are formatted using d3-format\\'s syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\".',t(\"../constants/docs\").FORMAT_LINK,\"for details on the formatting syntax.\",'Dates are formatted using d3-time-format\\'s syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\".',t(\"../constants/docs\").DATE_FORMAT_LINK,\"for details on the date formatting syntax.\"].join(\" \"),n.hovertemplateAttrs=function(t,e){t=t||{},r(e=e||{});var n={valType:\"string\",dflt:\"\",editType:t.editType||\"none\"};return!1!==t.arrayOk&&(n.arrayOk=!0),n},n.texttemplateAttrs=function(t,e){t=t||{},r(e=e||{});var n={valType:\"string\",dflt:\"\",editType:t.editType||\"calc\"};return!1!==t.arrayOk&&(n.arrayOk=!0),n}},{\"../constants/docs\":748}],907:[function(t,e,n){\"use strict\";var r=t(\"./ternary\"),i=t(\"../../plots/get_data\").getSubplotCalcData,a=t(\"../../lib\").counterRegex,o=\"ternary\";n.name=o;var s=n.attr=\"subplot\";n.idRoot=o,n.idRegex=n.attrRegex=a(o),(n.attributes={})[s]={valType:\"subplotid\",dflt:\"ternary\",editType:\"calc\"},n.layoutAttributes=t(\"./layout_attributes\"),n.supplyLayoutDefaults=t(\"./layout_defaults\"),n.plot=function(t){for(var e=t._fullLayout,n=t.calcdata,a=e._subplots.ternary,s=0;s<a.length;s++){var l=a[s],c=i(n,o,l),u=e[l]._subplot;u||(u=new r({id:l,graphDiv:t,container:e._ternarylayer.node()},e),e[l]._subplot=u),u.plot(c,e,t._promises)}},n.clean=function(t,e,n,r){for(var i=r._subplots.ternary||[],a=0;a<i.length;a++){var o=i[a],s=r[o]._subplot;!e[o]&&s&&(s.plotContainer.remove(),s.clipDef.remove(),s.clipDefRelative.remove(),s.layers[\"a-title\"].remove(),s.layers[\"b-title\"].remove(),s.layers[\"c-title\"].remove())}}},{\"../../lib\":778,\"../../plots/get_data\":865,\"./layout_attributes\":908,\"./layout_defaults\":909,\"./ternary\":910}],908:[function(t,e,n){\"use strict\";var r=t(\"../../components/color/attributes\"),i=t(\"../domain\").attributes,a=t(\"../cartesian/layout_attributes\"),o=t(\"../../plot_api/edit_types\").overrideAll,s=t(\"../../lib/extend\").extendFlat,l={title:{text:a.title.text,font:a.title.font},color:a.color,tickmode:a.tickmode,nticks:s({},a.nticks,{dflt:6,min:1}),tick0:a.tick0,dtick:a.dtick,tickvals:a.tickvals,ticktext:a.ticktext,ticks:a.ticks,ticklen:a.ticklen,tickwidth:a.tickwidth,tickcolor:a.tickcolor,showticklabels:a.showticklabels,showtickprefix:a.showtickprefix,tickprefix:a.tickprefix,showticksuffix:a.showticksuffix,ticksuffix:a.ticksuffix,showexponent:a.showexponent,exponentformat:a.exponentformat,minexponent:a.minexponent,separatethousands:a.separatethousands,tickfont:a.tickfont,tickangle:a.tickangle,tickformat:a.tickformat,tickformatstops:a.tickformatstops,hoverformat:a.hoverformat,showline:s({},a.showline,{dflt:!0}),linecolor:a.linecolor,linewidth:a.linewidth,showgrid:s({},a.showgrid,{dflt:!0}),gridcolor:a.gridcolor,gridwidth:a.gridwidth,layer:a.layer,min:{valType:\"number\",dflt:0,min:0},_deprecated:{title:a._deprecated.title,titlefont:a._deprecated.titlefont}},c=e.exports=o({domain:i({name:\"ternary\"}),bgcolor:{valType:\"color\",dflt:r.background},sum:{valType:\"number\",dflt:1,min:0},aaxis:l,baxis:l,caxis:l},\"plot\",\"from-root\");c.uirevision={valType:\"any\",editType:\"none\"},c.aaxis.uirevision=c.baxis.uirevision=c.caxis.uirevision={valType:\"any\",editType:\"none\"}},{\"../../components/color/attributes\":642,\"../../lib/extend\":768,\"../../plot_api/edit_types\":810,\"../cartesian/layout_attributes\":842,\"../domain\":855}],909:[function(t,e,n){\"use strict\";var r=t(\"../../components/color\"),i=t(\"../../plot_api/plot_template\"),a=t(\"../../lib\"),o=t(\"../subplot_defaults\"),s=t(\"../cartesian/tick_label_defaults\"),l=t(\"../cartesian/tick_mark_defaults\"),c=t(\"../cartesian/tick_value_defaults\"),u=t(\"../cartesian/line_grid_defaults\"),h=t(\"./layout_attributes\"),d=[\"aaxis\",\"baxis\",\"caxis\"];function f(t,e,n,a){var o,s,l,c=n(\"bgcolor\"),u=n(\"sum\");a.bgColor=r.combine(c,a.paper_bgcolor);for(var h=0;h<d.length;h++)s=t[o=d[h]]||{},(l=i.newContainer(e,o))._name=o,p(s,l,a,e);var f=e.aaxis,m=e.baxis,g=e.caxis;f.min+m.min+g.min>=u&&(f.min=0,m.min=0,g.min=0,t.aaxis&&delete t.aaxis.min,t.baxis&&delete t.baxis.min,t.caxis&&delete t.caxis.min)}function p(t,e,n,r){var i=h[e._name];function o(n,r){return a.coerce(t,e,i,n,r)}o(\"uirevision\",r.uirevision),e.type=\"linear\";var d=o(\"color\"),f=d!==i.color.dflt?d:n.font.color,p=e._name.charAt(0).toUpperCase(),m=\"Component \"+p,g=o(\"title.text\",m);e._hovertitle=g===m?g:p,a.coerceFont(o,\"title.font\",{family:n.font.family,size:Math.round(1.2*n.font.size),color:f}),o(\"min\"),c(t,e,o,\"linear\"),s(t,e,o,\"linear\",{}),l(t,e,o,{outerTicks:!0}),o(\"showticklabels\")&&(a.coerceFont(o,\"tickfont\",{family:n.font.family,size:n.font.size,color:f}),o(\"tickangle\"),o(\"tickformat\")),u(t,e,o,{dfltColor:d,bgColor:n.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:i}),o(\"hoverformat\"),o(\"layer\")}e.exports=function(t,e,n){o(t,e,n,{type:\"ternary\",attributes:h,handleDefaults:f,font:e.font,paper_bgcolor:e.paper_bgcolor})}},{\"../../components/color\":643,\"../../lib\":778,\"../../plot_api/plot_template\":817,\"../cartesian/line_grid_defaults\":844,\"../cartesian/tick_label_defaults\":849,\"../cartesian/tick_mark_defaults\":850,\"../cartesian/tick_value_defaults\":851,\"../subplot_defaults\":905,\"./layout_attributes\":908}],910:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"tinycolor2\"),a=t(\"../../registry\"),o=t(\"../../lib\"),s=o.strTranslate,l=o._,c=t(\"../../components/color\"),u=t(\"../../components/drawing\"),h=t(\"../cartesian/set_convert\"),d=t(\"../../lib/extend\").extendFlat,f=t(\"../plots\"),p=t(\"../cartesian/axes\"),m=t(\"../../components/dragelement\"),g=t(\"../../components/fx\"),y=t(\"../../components/dragelement/helpers\"),v=y.freeMode,_=y.rectMode,b=t(\"../../components/titles\"),x=t(\"../cartesian/select\").prepSelect,w=t(\"../cartesian/select\").selectOnClick,k=t(\"../cartesian/select\").clearSelect,M=t(\"../cartesian/select\").clearSelectionsCache,T=t(\"../cartesian/constants\");function S(t,e){this.id=t.id,this.graphDiv=t.graphDiv,this.init(e),this.makeFramework(e),this.aTickLayout=null,this.bTickLayout=null,this.cTickLayout=null}e.exports=S;var A=S.prototype;A.init=function(t){this.container=t._ternarylayer,this.defs=t._defs,this.layoutId=t._uid,this.traceHash={},this.layers={}},A.plot=function(t,e){var n=this,r=e[n.id],i=e._size;n._hasClipOnAxisFalse=!1;for(var a=0;a<t.length;a++)if(!1===t[a][0].trace.cliponaxis){n._hasClipOnAxisFalse=!0;break}n.updateLayers(r),n.adjustLayout(r,i),f.generalUpdatePerTraceModule(n.graphDiv,n,t,r),n.layers.plotbg.select(\"path\").call(c.fill,r.bgcolor)},A.makeFramework=function(t){var e=this,n=e.graphDiv,r=t[e.id],i=e.clipId=\"clip\"+e.layoutId+e.id,a=e.clipIdRelative=\"clip-relative\"+e.layoutId+e.id;e.clipDef=o.ensureSingleById(t._clips,\"clipPath\",i,(function(t){t.append(\"path\").attr(\"d\",\"M0,0Z\")})),e.clipDefRelative=o.ensureSingleById(t._clips,\"clipPath\",a,(function(t){t.append(\"path\").attr(\"d\",\"M0,0Z\")})),e.plotContainer=o.ensureSingle(e.container,\"g\",e.id),e.updateLayers(r),u.setClipUrl(e.layers.backplot,i,n),u.setClipUrl(e.layers.grids,i,n)},A.updateLayers=function(t){var e=this.layers,n=[\"draglayer\",\"plotbg\",\"backplot\",\"grids\"];\"below traces\"===t.aaxis.layer&&n.push(\"aaxis\",\"aline\"),\"below traces\"===t.baxis.layer&&n.push(\"baxis\",\"bline\"),\"below traces\"===t.caxis.layer&&n.push(\"caxis\",\"cline\"),n.push(\"frontplot\"),\"above traces\"===t.aaxis.layer&&n.push(\"aaxis\",\"aline\"),\"above traces\"===t.baxis.layer&&n.push(\"baxis\",\"bline\"),\"above traces\"===t.caxis.layer&&n.push(\"caxis\",\"cline\");var i=this.plotContainer.selectAll(\"g.toplevel\").data(n,String),a=[\"agrid\",\"bgrid\",\"cgrid\"];i.enter().append(\"g\").attr(\"class\",(function(t){return\"toplevel \"+t})).each((function(t){var n=r.select(this);e[t]=n,\"frontplot\"===t?n.append(\"g\").classed(\"scatterlayer\",!0):\"backplot\"===t?n.append(\"g\").classed(\"maplayer\",!0):\"plotbg\"===t?n.append(\"path\").attr(\"d\",\"M0,0Z\"):\"aline\"===t||\"bline\"===t||\"cline\"===t?n.append(\"path\"):\"grids\"===t&&a.forEach((function(t){e[t]=n.append(\"g\").classed(\"grid \"+t,!0)}))})),i.order()};var L=Math.sqrt(4/3);A.adjustLayout=function(t,e){var n,r,i,a,o,l,f=this,p=t.domain,m=(p.x[0]+p.x[1])/2,g=(p.y[0]+p.y[1])/2,y=p.x[1]-p.x[0],v=p.y[1]-p.y[0],_=y*e.w,b=v*e.h,x=t.sum,w=t.aaxis.min,k=t.baxis.min,M=t.caxis.min;_>L*b?i=(a=b)*L:a=(i=_)/L,o=y*i/_,l=v*a/b,r=e.t+e.h*(1-g)-a/2,f.x0=n=e.l+e.w*m-i/2,f.y0=r,f.w=i,f.h=a,f.sum=x,f.xaxis={type:\"linear\",range:[w+2*M-x,x-w-2*k],domain:[m-o/2,m+o/2],_id:\"x\"},h(f.xaxis,f.graphDiv._fullLayout),f.xaxis.setScale(),f.xaxis.isPtWithinRange=function(t){return t.a>=f.aaxis.range[0]&&t.a<=f.aaxis.range[1]&&t.b>=f.baxis.range[1]&&t.b<=f.baxis.range[0]&&t.c>=f.caxis.range[1]&&t.c<=f.caxis.range[0]},f.yaxis={type:\"linear\",range:[w,x-k-M],domain:[g-l/2,g+l/2],_id:\"y\"},h(f.yaxis,f.graphDiv._fullLayout),f.yaxis.setScale(),f.yaxis.isPtWithinRange=function(){return!0};var T=f.yaxis.domain[0],S=f.aaxis=d({},t.aaxis,{range:[w,x-k-M],side:\"left\",tickangle:(+t.aaxis.tickangle||0)-30,domain:[T,T+l*L],anchor:\"free\",position:0,_id:\"y\",_length:i});h(S,f.graphDiv._fullLayout),S.setScale();var A=f.baxis=d({},t.baxis,{range:[x-w-M,k],side:\"bottom\",domain:f.xaxis.domain,anchor:\"free\",position:0,_id:\"x\",_length:i});h(A,f.graphDiv._fullLayout),A.setScale();var C=f.caxis=d({},t.caxis,{range:[x-w-k,M],side:\"right\",tickangle:(+t.caxis.tickangle||0)+30,domain:[T,T+l*L],anchor:\"free\",position:0,_id:\"y\",_length:i});h(C,f.graphDiv._fullLayout),C.setScale();var E=\"M\"+n+\",\"+(r+a)+\"h\"+i+\"l-\"+i/2+\",-\"+a+\"Z\";f.clipDef.select(\"path\").attr(\"d\",E),f.layers.plotbg.select(\"path\").attr(\"d\",E);var O=\"M0,\"+a+\"h\"+i+\"l-\"+i/2+\",-\"+a+\"Z\";f.clipDefRelative.select(\"path\").attr(\"d\",O);var D=s(n,r);f.plotContainer.selectAll(\".scatterlayer,.maplayer\").attr(\"transform\",D),f.clipDefRelative.select(\"path\").attr(\"transform\",null);var I=s(n-A._offset,r+a);f.layers.baxis.attr(\"transform\",I),f.layers.bgrid.attr(\"transform\",I);var P=s(n+i/2,r)+\"rotate(30)\"+s(0,-S._offset);f.layers.aaxis.attr(\"transform\",P),f.layers.agrid.attr(\"transform\",P);var R=s(n+i/2,r)+\"rotate(-30)\"+s(0,-C._offset);f.layers.caxis.attr(\"transform\",R),f.layers.cgrid.attr(\"transform\",R),f.drawAxes(!0),f.layers.aline.select(\"path\").attr(\"d\",S.showline?\"M\"+n+\",\"+(r+a)+\"l\"+i/2+\",-\"+a:\"M0,0\").call(c.stroke,S.linecolor||\"#000\").style(\"stroke-width\",(S.linewidth||0)+\"px\"),f.layers.bline.select(\"path\").attr(\"d\",A.showline?\"M\"+n+\",\"+(r+a)+\"h\"+i:\"M0,0\").call(c.stroke,A.linecolor||\"#000\").style(\"stroke-width\",(A.linewidth||0)+\"px\"),f.layers.cline.select(\"path\").attr(\"d\",C.showline?\"M\"+(n+i/2)+\",\"+r+\"l\"+i/2+\",\"+a:\"M0,0\").call(c.stroke,C.linecolor||\"#000\").style(\"stroke-width\",(C.linewidth||0)+\"px\"),f.graphDiv._context.staticPlot||f.initInteractions(),u.setClipUrl(f.layers.frontplot,f._hasClipOnAxisFalse?null:f.clipId,f.graphDiv)},A.drawAxes=function(t){var e=this,n=e.graphDiv,r=e.id.substr(7)+\"title\",i=e.layers,a=e.aaxis,o=e.baxis,s=e.caxis;if(e.drawAx(a),e.drawAx(o),e.drawAx(s),t){var c=Math.max(a.showticklabels?a.tickfont.size/2:0,(s.showticklabels?.75*s.tickfont.size:0)+(\"outside\"===s.ticks?.87*s.ticklen:0)),u=(o.showticklabels?o.tickfont.size:0)+(\"outside\"===o.ticks?o.ticklen:0)+3;i[\"a-title\"]=b.draw(n,\"a\"+r,{propContainer:a,propName:e.id+\".aaxis.title\",placeholder:l(n,\"Click to enter Component A title\"),attributes:{x:e.x0+e.w/2,y:e.y0-a.title.font.size/3-c,\"text-anchor\":\"middle\"}}),i[\"b-title\"]=b.draw(n,\"b\"+r,{propContainer:o,propName:e.id+\".baxis.title\",placeholder:l(n,\"Click to enter Component B title\"),attributes:{x:e.x0-u,y:e.y0+e.h+.83*o.title.font.size+u,\"text-anchor\":\"middle\"}}),i[\"c-title\"]=b.draw(n,\"c\"+r,{propContainer:s,propName:e.id+\".caxis.title\",placeholder:l(n,\"Click to enter Component C title\"),attributes:{x:e.x0+e.w+u,y:e.y0+e.h+.83*s.title.font.size+u,\"text-anchor\":\"middle\"}})}},A.drawAx=function(t){var e,n=this,r=n.graphDiv,i=t._name,a=i.charAt(0),s=t._id,l=n.layers[i],c=a+\"tickLayout\",u=(e=t).ticks+String(e.ticklen)+String(e.showticklabels);n[c]!==u&&(l.selectAll(\".\"+s+\"tick\").remove(),n[c]=u),t.setScale();var h=p.calcTicks(t),d=p.clipEnds(t,h),f=p.makeTransTickFn(t),m=p.getTickSigns(t)[2],g=o.deg2rad(30),y=m*(t.linewidth||1)/2,v=m*t.ticklen,_=n.w,b=n.h,x=\"b\"===a?\"M0,\"+y+\"l\"+Math.sin(g)*v+\",\"+Math.cos(g)*v:\"M\"+y+\",0l\"+Math.cos(g)*v+\",\"+-Math.sin(g)*v,w={a:\"M0,0l\"+b+\",-\"+_/2,b:\"M0,0l-\"+_/2+\",-\"+b,c:\"M0,0l-\"+b+\",\"+_/2}[a];p.drawTicks(r,t,{vals:\"inside\"===t.ticks?d:h,layer:l,path:x,transFn:f,crisp:!1}),p.drawGrid(r,t,{vals:d,layer:n.layers[a+\"grid\"],path:w,transFn:f,crisp:!1}),p.drawLabels(r,t,{vals:h,layer:l,transFn:f,labelFns:p.makeLabelFns(t,0,30)})};var C=T.MINZOOM/2+.87,E=\"m-0.87,.5h\"+C+\"v3h-\"+(C+5.2)+\"l\"+(C/2+2.6)+\",-\"+(.87*C+4.5)+\"l2.6,1.5l-\"+C/2+\",\"+.87*C+\"Z\",O=\"m0.87,.5h-\"+C+\"v3h\"+(C+5.2)+\"l-\"+(C/2+2.6)+\",-\"+(.87*C+4.5)+\"l-2.6,1.5l\"+C/2+\",\"+.87*C+\"Z\",D=\"m0,1l\"+C/2+\",\"+.87*C+\"l2.6,-1.5l-\"+(C/2+2.6)+\",-\"+(.87*C+4.5)+\"l-\"+(C/2+2.6)+\",\"+(.87*C+4.5)+\"l2.6,1.5l\"+C/2+\",-\"+.87*C+\"Z\",I=!0;function P(t){r.select(t).selectAll(\".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners\").remove()}A.clearSelect=function(){M(this.dragOptions),k(this.dragOptions.gd)},A.initInteractions=function(){var t,e,n,r,h,d,f,p,y,b,k,M,S=this,A=S.layers.plotbg.select(\"path\").node(),C=S.graphDiv,R=C._fullLayout._zoomlayer;function z(t){var e={};return e[S.id+\".aaxis.min\"]=t.a,e[S.id+\".baxis.min\"]=t.b,e[S.id+\".caxis.min\"]=t.c,e}function j(t,e){var n=C._fullLayout.clickmode;P(C),2===t&&(C.emit(\"plotly_doubleclick\",null),a.call(\"_guiRelayout\",C,z({a:0,b:0,c:0}))),n.indexOf(\"select\")>-1&&1===t&&w(e,C,[S.xaxis],[S.yaxis],S.id,S.dragOptions),n.indexOf(\"event\")>-1&&g.click(C,e,S.id)}function F(t,e){return 1-e/S.h}function N(t,e){return 1-(t+(S.h-e)/Math.sqrt(3))/S.w}function B(t,e){return(t-(S.h-e)/Math.sqrt(3))/S.w}function Y(i,a){var o=n+i*t,s=r+a*e,l=Math.max(0,Math.min(1,F(0,r),F(0,s))),c=Math.max(0,Math.min(1,N(n,r),N(o,s))),u=Math.max(0,Math.min(1,B(n,r),B(o,s))),m=(l/2+u)*S.w,g=(1-l/2-c)*S.w,v=(m+g)/2,_=g-m,x=(1-l)*S.h,w=x-_/L;_<T.MINZOOM?(f=h,k.attr(\"d\",y),M.attr(\"d\",\"M0,0Z\")):(f={a:h.a+l*d,b:h.b+c*d,c:h.c+u*d},k.attr(\"d\",y+\"M\"+m+\",\"+x+\"H\"+g+\"L\"+v+\",\"+w+\"L\"+m+\",\"+x+\"Z\"),M.attr(\"d\",\"M\"+n+\",\"+r+\"m0.5,0.5h5v-2h-5v-5h-2v5h-5v2h5v5h2ZM\"+m+\",\"+x+E+\"M\"+g+\",\"+x+O+\"M\"+v+\",\"+w+D)),b||(k.transition().style(\"fill\",p>.2?\"rgba(0,0,0,0.4)\":\"rgba(255,255,255,0.3)\").duration(200),M.transition().style(\"opacity\",1).duration(200),b=!0),C.emit(\"plotly_relayouting\",z(f))}function H(){P(C),f!==h&&(a.call(\"_guiRelayout\",C,z(f)),I&&C.data&&C._context.showTips&&(o.notifier(l(C,\"Double-click to zoom back out\"),\"long\"),I=!1))}function V(t,e){var n=t/S.xaxis._m,r=e/S.yaxis._m,i=[(f={a:h.a-r,b:h.b+(n+r)/2,c:h.c-(n-r)/2}).a,f.b,f.c].sort(o.sorterAsc),a=i.indexOf(f.a),l=i.indexOf(f.b),c=i.indexOf(f.c);i[0]<0&&(i[1]+i[0]/2<0?(i[2]+=i[0]+i[1],i[0]=i[1]=0):(i[2]+=i[0]/2,i[1]+=i[0]/2,i[0]=0),e=(h.a-(f={a:i[a],b:i[l],c:i[c]}).a)*S.yaxis._m,t=(h.c-f.c-h.b+f.b)*S.xaxis._m);var d=s(S.x0+t,S.y0+e);S.plotContainer.selectAll(\".scatterlayer,.maplayer\").attr(\"transform\",d);var p=s(-t,-e);S.clipDefRelative.select(\"path\").attr(\"transform\",p),S.aaxis.range=[f.a,S.sum-f.b-f.c],S.baxis.range=[S.sum-f.a-f.c,f.b],S.caxis.range=[S.sum-f.a-f.b,f.c],S.drawAxes(!1),S._hasClipOnAxisFalse&&S.plotContainer.select(\".scatterlayer\").selectAll(\".trace\").call(u.hideOutsideRangePoints,S),C.emit(\"plotly_relayouting\",z(f))}function U(){a.call(\"_guiRelayout\",C,z(f))}this.dragOptions={element:A,gd:C,plotinfo:{id:S.id,domain:C._fullLayout[S.id].domain,xaxis:S.xaxis,yaxis:S.yaxis},subplot:S.id,prepFn:function(a,l,u){S.dragOptions.xaxes=[S.xaxis],S.dragOptions.yaxes=[S.yaxis],t=C._fullLayout._invScaleX,e=C._fullLayout._invScaleY;var m=S.dragOptions.dragmode=C._fullLayout.dragmode;S.dragOptions.minDrag=v(m)?1:void 0,\"zoom\"===m?(S.dragOptions.moveFn=Y,S.dragOptions.clickFn=j,S.dragOptions.doneFn=H,function(t,e,a){var l=A.getBoundingClientRect();n=e-l.left,r=a-l.top,C._fullLayout._calcInverseTransform(C);var u=o.apply3DTransform(C._fullLayout._invTransform)(n,r);n=u[0],r=u[1],f=h={a:S.aaxis.range[0],b:S.baxis.range[1],c:S.caxis.range[1]},d=S.aaxis.range[1]-h.a,p=i(S.graphDiv._fullLayout[S.id].bgcolor).getLuminance(),y=\"M0,\"+S.h+\"L\"+S.w/2+\", 0L\"+S.w+\",\"+S.h+\"Z\",b=!1,k=R.append(\"path\").attr(\"class\",\"zoombox\").attr(\"transform\",s(S.x0,S.y0)).style({fill:p>.2?\"rgba(0,0,0,0)\":\"rgba(255,255,255,0)\",\"stroke-width\":0}).attr(\"d\",y),M=R.append(\"path\").attr(\"class\",\"zoombox-corners\").attr(\"transform\",s(S.x0,S.y0)).style({fill:c.background,stroke:c.defaultLine,\"stroke-width\":1,opacity:0}).attr(\"d\",\"M0,0Z\"),S.clearSelect(C)}(0,l,u)):\"pan\"===m?(S.dragOptions.moveFn=V,S.dragOptions.clickFn=j,S.dragOptions.doneFn=U,f=h={a:S.aaxis.range[0],b:S.baxis.range[1],c:S.caxis.range[1]},S.clearSelect(C)):(_(m)||v(m))&&x(a,l,u,S.dragOptions,m)}},A.onmousemove=function(t){g.hover(C,t,S.id),C._fullLayout._lasthover=A,C._fullLayout._hoversubplot=S.id},A.onmouseout=function(t){C._dragging||m.unhover(C,t)},m.init(this.dragOptions)}},{\"../../components/color\":643,\"../../components/dragelement\":662,\"../../components/dragelement/helpers\":661,\"../../components/drawing\":665,\"../../components/fx\":683,\"../../components/titles\":738,\"../../lib\":778,\"../../lib/extend\":768,\"../../registry\":911,\"../cartesian/axes\":828,\"../cartesian/constants\":834,\"../cartesian/select\":847,\"../cartesian/set_convert\":848,\"../plots\":891,d3:169,tinycolor2:576}],911:[function(t,e,n){\"use strict\";var r=t(\"./lib/loggers\"),i=t(\"./lib/noop\"),a=t(\"./lib/push_unique\"),o=t(\"./lib/is_plain_object\"),s=t(\"./lib/dom\").addStyleRule,l=t(\"./lib/extend\"),c=t(\"./plots/attributes\"),u=t(\"./plots/layout_attributes\"),h=l.extendFlat,d=l.extendDeepAll;function f(t){var e=t.name,i=t.categories,a=t.meta;if(n.modules[e])r.log(\"Type \"+e+\" already registered\");else{n.subplotsRegistry[t.basePlotModule.name]||function(t){var e=t.name;if(n.subplotsRegistry[e])r.log(\"Plot type \"+e+\" already registered.\");else for(var i in y(t),n.subplotsRegistry[e]=t,n.componentsRegistry)b(i,t.name)}(t.basePlotModule);for(var o={},l=0;l<i.length;l++)o[i[l]]=!0,n.allCategories[i[l]]=!0;for(var c in n.modules[e]={_module:t,categories:o},a&&Object.keys(a).length&&(n.modules[e].meta=a),n.allTypes.push(e),n.componentsRegistry)v(c,e);t.layoutAttributes&&h(n.traceLayoutAttributes,t.layoutAttributes);var u=t.basePlotModule,d=u.name;if(\"mapbox\"===d){var f=u.constants.styleRules;for(var p in f)s(\".js-plotly-plot .plotly .mapboxgl-\"+p,f[p])}\"geo\"!==d&&\"mapbox\"!==d||void 0===typeof window||void 0!==window.PlotlyGeoAssets||(window.PlotlyGeoAssets={topojson:{}})}}function p(t){if(\"string\"!=typeof t.name)throw new Error(\"Component module *name* must be a string.\");var e=t.name;for(var r in n.componentsRegistry[e]=t,t.layoutAttributes&&(t.layoutAttributes._isLinkedToArray&&a(n.layoutArrayContainers,e),y(t)),n.modules)v(e,r);for(var i in n.subplotsRegistry)b(e,i);for(var o in n.transformsRegistry)_(e,o);t.schema&&t.schema.layout&&d(u,t.schema.layout)}function m(t){if(\"string\"!=typeof t.name)throw new Error(\"Transform module *name* must be a string.\");var e=\"Transform module \"+t.name,i=\"function\"==typeof t.transform,a=\"function\"==typeof t.calcTransform;if(!i&&!a)throw new Error(e+\" is missing a *transform* or *calcTransform* method.\");for(var s in i&&a&&r.log([e+\" has both a *transform* and *calcTransform* methods.\",\"Please note that all *transform* methods are executed\",\"before all *calcTransform* methods.\"].join(\" \")),o(t.attributes)||r.log(e+\" registered without an *attributes* object.\"),\"function\"!=typeof t.supplyDefaults&&r.log(e+\" registered without a *supplyDefaults* method.\"),n.transformsRegistry[t.name]=t,n.componentsRegistry)_(s,t.name)}function g(t){var e=t.name,r=e.split(\"-\")[0],i=t.dictionary,a=t.format,o=i&&Object.keys(i).length,s=a&&Object.keys(a).length,l=n.localeRegistry,c=l[e];if(c||(l[e]=c={}),r!==e){var u=l[r];u||(l[r]=u={}),o&&u.dictionary===c.dictionary&&(u.dictionary=i),s&&u.format===c.format&&(u.format=a)}o&&(c.dictionary=i),s&&(c.format=a)}function y(t){if(t.layoutAttributes){var e=t.layoutAttributes._arrayAttrRegexps;if(e)for(var r=0;r<e.length;r++)a(n.layoutArrayRegexes,e[r])}}function v(t,e){var r=n.componentsRegistry[t].schema;if(r&&r.traces){var i=r.traces[e];i&&d(n.modules[e]._module.attributes,i)}}function _(t,e){var r=n.componentsRegistry[t].schema;if(r&&r.transforms){var i=r.transforms[e];i&&d(n.transformsRegistry[e].attributes,i)}}function b(t,e){var r=n.componentsRegistry[t].schema;if(r&&r.subplots){var i=n.subplotsRegistry[e],a=i.layoutAttributes,o=\"subplot\"===i.attr?i.name:i.attr;Array.isArray(o)&&(o=o[0]);var s=r.subplots[o];a&&s&&d(a,s)}}function x(t){return\"object\"==typeof t&&(t=t.type),t}n.modules={},n.allCategories={},n.allTypes=[],n.subplotsRegistry={},n.transformsRegistry={},n.componentsRegistry={},n.layoutArrayContainers=[],n.layoutArrayRegexes=[],n.traceLayoutAttributes={},n.localeRegistry={},n.apiMethodRegistry={},n.collectableSubplotTypes=null,n.register=function(t){if(n.collectableSubplotTypes=null,!t)throw new Error(\"No argument passed to Plotly.register.\");t&&!Array.isArray(t)&&(t=[t]);for(var e=0;e<t.length;e++){var r=t[e];if(!r)throw new Error(\"Invalid module was attempted to be registered!\");switch(r.moduleType){case\"trace\":f(r);break;case\"transform\":m(r);break;case\"component\":p(r);break;case\"locale\":g(r);break;case\"apiMethod\":n.apiMethodRegistry[r.name]=r.fn;break;default:throw new Error(\"Invalid module was attempted to be registered!\")}}},n.getModule=function(t){var e=n.modules[x(t)];return!!e&&e._module},n.traceIs=function(t,e){if(\"various\"===(t=x(t)))return!1;var i=n.modules[t];return i||(t&&\"area\"!==t&&r.log(\"Unrecognized trace type \"+t+\".\"),i=n.modules[c.type.dflt]),!!i.categories[e]},n.getTransformIndices=function(t,e){for(var n=[],r=t.transforms||[],i=0;i<r.length;i++)r[i].type===e&&n.push(i);return n},n.hasTransform=function(t,e){for(var n=t.transforms||[],r=0;r<n.length;r++)if(n[r].type===e)return!0;return!1},n.getComponentMethod=function(t,e){var r=n.componentsRegistry[t];return r&&r[e]||i},n.call=function(){var t=arguments[0],e=[].slice.call(arguments,1);return n.apiMethodRegistry[t].apply(null,e)}},{\"./lib/dom\":766,\"./lib/extend\":768,\"./lib/is_plain_object\":779,\"./lib/loggers\":782,\"./lib/noop\":787,\"./lib/push_unique\":793,\"./plots/attributes\":824,\"./plots/layout_attributes\":882}],912:[function(t,e,n){\"use strict\";var r=t(\"../registry\"),i=t(\"../lib\"),a=i.extendFlat,o=i.extendDeep;function s(t){var e;switch(t){case\"themes__thumb\":e={autosize:!0,width:150,height:150,title:{text:\"\"},showlegend:!1,margin:{l:5,r:5,t:5,b:5,pad:0},annotations:[]};break;case\"thumbnail\":e={title:{text:\"\"},hidesources:!0,showlegend:!1,borderwidth:0,bordercolor:\"\",margin:{l:1,r:1,t:1,b:1,pad:0},annotations:[]};break;default:e={}}return e}e.exports=function(t,e){var n;t.framework&&t.framework.isPolar&&(t=t.framework.getConfig());var i=t.layout,l=o([],t.data),c=o({},i,s(e.tileClass)),u=t._context||{};if(e.width&&(c.width=e.width),e.height&&(c.height=e.height),\"thumbnail\"===e.tileClass||\"themes__thumb\"===e.tileClass){c.annotations=[];var h=Object.keys(c);for(n=0;n<h.length;n++)[\"xaxis\",\"yaxis\",\"zaxis\"].indexOf(h[n].slice(0,5))>-1&&(c[h[n]].title={text:\"\"});for(n=0;n<l.length;n++){var d=l[n];d.showscale=!1,d.marker&&(d.marker.showscale=!1),r.traceIs(d,\"pie-like\")&&(d.textposition=\"none\")}}if(Array.isArray(e.annotations))for(n=0;n<e.annotations.length;n++)c.annotations.push(e.annotations[n]);var f=Object.keys(c).filter((function(t){return t.match(/^scene\\d*$/)}));if(f.length){var p={};for(\"thumbnail\"===e.tileClass&&(p={title:{text:\"\"},showaxeslabels:!1,showticklabels:!1,linetickenable:!1}),n=0;n<f.length;n++){var m=c[f[n]];m.xaxis||(m.xaxis={}),m.yaxis||(m.yaxis={}),m.zaxis||(m.zaxis={}),a(m.xaxis,p),a(m.yaxis,p),a(m.zaxis,p),m._scene=null}}var g=document.createElement(\"div\");e.tileClass&&(g.className=e.tileClass);var y={gd:g,td:g,layout:c,data:l,config:{staticPlot:void 0===e.staticPlot||e.staticPlot,plotGlPixelRatio:void 0===e.plotGlPixelRatio?2:e.plotGlPixelRatio,displaylogo:e.displaylogo||!1,showLink:e.showLink||!1,showTips:e.showTips||!1,mapboxAccessToken:u.mapboxAccessToken}};return\"transparent\"!==e.setBackground&&(y.config.setBackground=e.setBackground||\"opaque\"),y.gd.defaultLayout=s(e.tileClass),y}},{\"../lib\":778,\"../registry\":911}],913:[function(t,e,n){\"use strict\";var r=t(\"../lib\"),i=t(\"../plot_api/to_image\"),a=t(\"./filesaver\"),o=t(\"./helpers\");e.exports=function(t,e){var n;return r.isPlainObject(t)||(n=r.getGraphDiv(t)),(e=e||{}).format=e.format||\"png\",e.width=e.width||null,e.height=e.height||null,e.imageDataOnly=!0,new Promise((function(s,l){n&&n._snapshotInProgress&&l(new Error(\"Snapshotting already in progress.\")),r.isIE()&&\"svg\"!==e.format&&l(new Error(o.MSG_IE_BAD_FORMAT)),n&&(n._snapshotInProgress=!0);var c=i(t,e),u=e.filename||t.fn||\"newplot\";u+=\".\"+e.format.replace(\"-\",\".\"),c.then((function(t){return n&&(n._snapshotInProgress=!1),a(t,u,e.format)})).then((function(t){s(t)})).catch((function(t){n&&(n._snapshotInProgress=!1),l(t)}))}))}},{\"../lib\":778,\"../plot_api/to_image\":820,\"./filesaver\":914,\"./helpers\":915}],914:[function(t,e,n){\"use strict\";var r=t(\"../lib\"),i=t(\"./helpers\");e.exports=function(t,e,n){var a=document.createElement(\"a\"),o=\"download\"in a;return new Promise((function(s,l){var c,u;return r.isIE9orBelow()&&l(new Error(\"IE < 10 unsupported\")),r.isSafari()?(i.octetStream((\"svg\"===n?\",\":\";base64,\")+encodeURIComponent(t)),s(e)):r.isIE()?(c=i.createBlob(t,\"svg\"),window.navigator.msSaveBlob(c,e),c=null,s(e)):o?(c=i.createBlob(t,n),u=i.createObjectURL(c),a.href=u,a.download=e,document.body.appendChild(a),a.click(),document.body.removeChild(a),i.revokeObjectURL(u),c=null,s(e)):void l(new Error(\"download error\"))}))}},{\"../lib\":778,\"./helpers\":915}],915:[function(t,e,n){\"use strict\";var r=t(\"../registry\");n.getDelay=function(t){return t._has&&(t._has(\"gl3d\")||t._has(\"gl2d\")||t._has(\"mapbox\"))?500:0},n.getRedrawFunc=function(t){return function(){var e=t._fullLayout||{};(!e._has||!e._has(\"polar\"))&&t.data&&t.data[0]&&t.data[0].r||r.getComponentMethod(\"colorbar\",\"draw\")(t)}},n.encodeSVG=function(t){return\"data:image/svg+xml,\"+encodeURIComponent(t)},n.encodeJSON=function(t){return\"data:application/json,\"+encodeURIComponent(t)};var i=window.URL||window.webkitURL;n.createObjectURL=function(t){return i.createObjectURL(t)},n.revokeObjectURL=function(t){return i.revokeObjectURL(t)},n.createBlob=function(t,e){if(\"svg\"===e)return new window.Blob([t],{type:\"image/svg+xml;charset=utf-8\"});if(\"full-json\"===e)return new window.Blob([t],{type:\"application/json;charset=utf-8\"});var n=function(t){for(var e=t.length,n=new ArrayBuffer(e),r=new Uint8Array(n),i=0;i<e;i++)r[i]=t.charCodeAt(i);return n}(window.atob(t));return new window.Blob([n],{type:\"image/\"+e})},n.octetStream=function(t){document.location.href=\"data:application/octet-stream\"+t},n.IMAGE_URL_PREFIX=/^data:image\\/\\w+;base64,/,n.MSG_IE_BAD_FORMAT=\"Sorry IE does not support downloading from canvas. Try {format:'svg'} instead.\"},{\"../registry\":911}],916:[function(t,e,n){\"use strict\";var r=t(\"./helpers\"),i={getDelay:r.getDelay,getRedrawFunc:r.getRedrawFunc,clone:t(\"./cloneplot\"),toSVG:t(\"./tosvg\"),svgToImg:t(\"./svgtoimg\"),toImage:t(\"./toimage\"),downloadImage:t(\"./download\")};e.exports=i},{\"./cloneplot\":912,\"./download\":913,\"./helpers\":915,\"./svgtoimg\":917,\"./toimage\":918,\"./tosvg\":919}],917:[function(t,e,n){\"use strict\";var r=t(\"../lib\"),i=t(\"events\").EventEmitter,a=t(\"./helpers\");e.exports=function(t){var e=t.emitter||new i,n=new Promise((function(i,o){var s=window.Image,l=t.svg,c=t.format||\"png\";if(r.isIE()&&\"svg\"!==c){var u=new Error(a.MSG_IE_BAD_FORMAT);return o(u),t.promise?n:e.emit(\"error\",u)}var h,d,f=t.canvas,p=t.scale||1,m=p*(t.width||300),g=p*(t.height||150),y=f.getContext(\"2d\"),v=new s;\"svg\"===c||r.isIE9orBelow()||r.isSafari()?d=a.encodeSVG(l):(h=a.createBlob(l,\"svg\"),d=a.createObjectURL(h)),f.width=m,f.height=g,v.onload=function(){var n;switch(h=null,a.revokeObjectURL(d),\"svg\"!==c&&y.drawImage(v,0,0,m,g),c){case\"jpeg\":n=f.toDataURL(\"image/jpeg\");break;case\"png\":n=f.toDataURL(\"image/png\");break;case\"webp\":n=f.toDataURL(\"image/webp\");break;case\"svg\":n=d;break;default:var r=\"Image format is not jpeg, png, svg or webp.\";if(o(new Error(r)),!t.promise)return e.emit(\"error\",r)}i(n),t.promise||e.emit(\"success\",n)},v.onerror=function(n){if(h=null,a.revokeObjectURL(d),o(n),!t.promise)return e.emit(\"error\",n)},v.src=d}));return t.promise?n:e}},{\"../lib\":778,\"./helpers\":915,events:110}],918:[function(t,e,n){\"use strict\";var r=t(\"events\").EventEmitter,i=t(\"../registry\"),a=t(\"../lib\"),o=t(\"./helpers\"),s=t(\"./cloneplot\"),l=t(\"./tosvg\"),c=t(\"./svgtoimg\");e.exports=function(t,e){var n=new r,u=s(t,{format:\"png\"}),h=u.gd;h.style.position=\"absolute\",h.style.left=\"-5000px\",document.body.appendChild(h);var d=o.getRedrawFunc(h);return i.call(\"plot\",h,u.data,u.layout,u.config).then(d).then((function(){var t=o.getDelay(h._fullLayout);setTimeout((function(){var t=l(h),r=document.createElement(\"canvas\");r.id=a.randstr(),(n=c({format:e.format,width:h._fullLayout.width,height:h._fullLayout.height,canvas:r,emitter:n,svg:t})).clean=function(){h&&document.body.removeChild(h)}}),t)})).catch((function(t){n.emit(\"error\",t)})),n}},{\"../lib\":778,\"../registry\":911,\"./cloneplot\":912,\"./helpers\":915,\"./svgtoimg\":917,\"./tosvg\":919,events:110}],919:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../lib\"),a=t(\"../components/drawing\"),o=t(\"../components/color\"),s=t(\"../constants/xmlns_namespaces\"),l=/\"/g,c=\"TOBESTRIPPED\",u=new RegExp('(\"TOBESTRIPPED)|(TOBESTRIPPED\")',\"g\");e.exports=function(t,e,n){var h,d=t._fullLayout,f=d._paper,p=d._toppaper,m=d.width,g=d.height;f.insert(\"rect\",\":first-child\").call(a.setRect,0,0,m,g).call(o.fill,d.paper_bgcolor);var y=d._basePlotModules||[];for(h=0;h<y.length;h++){var v=y[h];v.toSVG&&v.toSVG(t)}if(p){var _=p.node().childNodes,b=Array.prototype.slice.call(_);for(h=0;h<b.length;h++){var x=b[h];x.childNodes.length&&f.node().appendChild(x)}}if(d._draggers&&d._draggers.remove(),f.node().style.background=\"\",f.selectAll(\"text\").attr({\"data-unformatted\":null,\"data-math\":null}).each((function(){var t=r.select(this);if(\"hidden\"!==this.style.visibility&&\"none\"!==this.style.display){t.style({visibility:null,display:null});var e=this.style.fontFamily;e&&-1!==e.indexOf('\"')&&t.style(\"font-family\",e.replace(l,c))}else t.remove()})),d._gradientUrlQueryParts){var w=[];for(var k in d._gradientUrlQueryParts)w.push(k);w.length&&f.selectAll(w.join(\",\")).each((function(){var t=r.select(this),e=this.style.fill;e&&-1!==e.indexOf(\"url(\")&&t.style(\"fill\",e.replace(l,c));var n=this.style.stroke;n&&-1!==n.indexOf(\"url(\")&&t.style(\"stroke\",n.replace(l,c))}))}\"pdf\"!==e&&\"eps\"!==e||f.selectAll(\"#MathJax_SVG_glyphs path\").attr(\"stroke-width\",0),f.node().setAttributeNS(s.xmlns,\"xmlns\",s.svg),f.node().setAttributeNS(s.xmlns,\"xmlns:xlink\",s.xlink),\"svg\"===e&&n&&(f.attr(\"width\",n*m),f.attr(\"height\",n*g),f.attr(\"viewBox\",\"0 0 \"+m+\" \"+g));var M,T=(new window.XMLSerializer).serializeToString(f.node());return T=(M=T=function(t){var e=r.select(\"body\").append(\"div\").style({display:\"none\"}).html(\"\"),n=t.replace(/(&[^;]*;)/gi,(function(t){return\"&lt;\"===t?\"&#60;\":\"&rt;\"===t?\"&#62;\":-1!==t.indexOf(\"<\")||-1!==t.indexOf(\">\")?\"\":e.html(t).text()}));return e.remove(),n}(T),T=M.replace(/&(?!\\w+;|\\#[0-9]+;| \\#x[0-9A-F]+;)/g,\"&amp;\")).replace(u,\"'\"),i.isIE()&&(T=(T=(T=T.replace(/\"/gi,\"'\")).replace(/(\\('#)([^']*)('\\))/gi,'(\"#$2\")')).replace(/(\\\\')/gi,'\"')),T}},{\"../components/color\":643,\"../components/drawing\":665,\"../constants/xmlns_namespaces\":754,\"../lib\":778,d3:169}],920:[function(t,e,n){\"use strict\";var r=t(\"../../lib\");e.exports=function(t,e){for(var n=0;n<t.length;n++)t[n].i=n;r.mergeArray(e.text,t,\"tx\"),r.mergeArray(e.hovertext,t,\"htx\");var i=e.marker;if(i){r.mergeArray(i.opacity,t,\"mo\",!0),r.mergeArray(i.color,t,\"mc\");var a=i.line;a&&(r.mergeArray(a.color,t,\"mlc\"),r.mergeArrayCastPositive(a.width,t,\"mlw\"))}}},{\"../../lib\":778}],921:[function(t,e,n){\"use strict\";var r=t(\"../scatter/attributes\"),i=t(\"../../plots/template_attributes\").hovertemplateAttrs,a=t(\"../../plots/template_attributes\").texttemplateAttrs,o=t(\"../../components/colorscale/attributes\"),s=t(\"../../plots/font_attributes\"),l=t(\"./constants\"),c=t(\"../../lib/extend\").extendFlat,u=s({editType:\"calc\",arrayOk:!0,colorEditType:\"style\"}),h=c({},r.marker.line.width,{dflt:0}),d=c({width:h,editType:\"calc\"},o(\"marker.line\")),f=c({line:d,editType:\"calc\"},o(\"marker\"),{opacity:{valType:\"number\",arrayOk:!0,dflt:1,min:0,max:1,editType:\"style\"}});e.exports={x:r.x,x0:r.x0,dx:r.dx,y:r.y,y0:r.y0,dy:r.dy,xperiod:r.xperiod,yperiod:r.yperiod,xperiod0:r.xperiod0,yperiod0:r.yperiod0,xperiodalignment:r.xperiodalignment,yperiodalignment:r.yperiodalignment,text:r.text,texttemplate:a({editType:\"plot\"},{keys:l.eventDataKeys}),hovertext:r.hovertext,hovertemplate:i({},{keys:l.eventDataKeys}),textposition:{valType:\"enumerated\",values:[\"inside\",\"outside\",\"auto\",\"none\"],dflt:\"none\",arrayOk:!0,editType:\"calc\"},insidetextanchor:{valType:\"enumerated\",values:[\"end\",\"middle\",\"start\"],dflt:\"end\",editType:\"plot\"},textangle:{valType:\"angle\",dflt:\"auto\",editType:\"plot\"},textfont:c({},u,{}),insidetextfont:c({},u,{}),outsidetextfont:c({},u,{}),constraintext:{valType:\"enumerated\",values:[\"inside\",\"outside\",\"both\",\"none\"],dflt:\"both\",editType:\"calc\"},cliponaxis:c({},r.cliponaxis,{}),orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],editType:\"calc+clearAxisTypes\"},base:{valType:\"any\",dflt:null,arrayOk:!0,editType:\"calc\"},offset:{valType:\"number\",dflt:null,arrayOk:!0,editType:\"calc\"},width:{valType:\"number\",dflt:null,min:0,arrayOk:!0,editType:\"calc\"},marker:f,offsetgroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},alignmentgroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},selected:{marker:{opacity:r.selected.marker.opacity,color:r.selected.marker.color,editType:\"style\"},textfont:r.selected.textfont,editType:\"style\"},unselected:{marker:{opacity:r.unselected.marker.opacity,color:r.unselected.marker.color,editType:\"style\"},textfont:r.unselected.textfont,editType:\"style\"},r:r.r,t:r.t,_deprecated:{bardir:{valType:\"enumerated\",editType:\"calc\",values:[\"v\",\"h\"]}}}},{\"../../components/colorscale/attributes\":650,\"../../lib/extend\":768,\"../../plots/font_attributes\":856,\"../../plots/template_attributes\":906,\"../scatter/attributes\":1187,\"./constants\":923}],922:[function(t,e,n){\"use strict\";var r=t(\"../../plots/cartesian/axes\"),i=t(\"../../plots/cartesian/align_period\"),a=t(\"../../components/colorscale/helpers\").hasColorscale,o=t(\"../../components/colorscale/calc\"),s=t(\"./arrays_to_calcdata\"),l=t(\"../scatter/calc_selection\");e.exports=function(t,e){var n,c,u,h,d=r.getFromId(t,e.xaxis||\"x\"),f=r.getFromId(t,e.yaxis||\"y\"),p={msUTC:!(!e.base&&0!==e.base)};\"h\"===e.orientation?(n=d.makeCalcdata(e,\"x\",p),u=f.makeCalcdata(e,\"y\"),c=i(e,f,\"y\",u),h=!!e.yperiodalignment):(n=f.makeCalcdata(e,\"y\",p),u=d.makeCalcdata(e,\"x\"),c=i(e,d,\"x\",u),h=!!e.xperiodalignment);for(var m=Math.min(c.length,n.length),g=new Array(m),y=0;y<m;y++)g[y]={p:c[y],s:n[y]},h&&(g[y].orig_p=u[y]),e.ids&&(g[y].id=String(e.ids[y]));return a(e,\"marker\")&&o(t,e,{vals:e.marker.color,containerStr:\"marker\",cLetter:\"c\"}),a(e,\"marker.line\")&&o(t,e,{vals:e.marker.line.color,containerStr:\"marker.line\",cLetter:\"c\"}),s(g,e),l(g,e),g}},{\"../../components/colorscale/calc\":651,\"../../components/colorscale/helpers\":654,\"../../plots/cartesian/align_period\":825,\"../../plots/cartesian/axes\":828,\"../scatter/calc_selection\":1189,\"./arrays_to_calcdata\":920}],923:[function(t,e,n){\"use strict\";e.exports={TEXTPAD:3,eventDataKeys:[\"value\",\"label\"]}},{}],924:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../lib\").isArrayOrTypedArray,a=t(\"../../constants/numerical\").BADNUM,o=t(\"../../registry\"),s=t(\"../../plots/cartesian/axes\"),l=t(\"../../plots/cartesian/constraints\").getAxisGroup,c=t(\"./sieve.js\");function u(t,e,n,o,u){if(o.length){var b,x,w,k;switch(function(t,e){var n,a;for(n=0;n<e.length;n++){var o,s=e[n],l=s[0].trace,c=\"funnel\"===l.type?l._base:l.base,u=\"h\"===l.orientation?l.xcalendar:l.ycalendar,h=\"category\"===t.type||\"multicategory\"===t.type?function(){return null}:t.d2c;if(i(c)){for(a=0;a<Math.min(c.length,s.length);a++)o=h(c[a],0,u),r(o)?(s[a].b=+o,s[a].hasB=1):s[a].b=0;for(;a<s.length;a++)s[a].b=0}else{o=h(c,0,u);var d=r(o);for(o=d?o:0,a=0;a<s.length;a++)s[a].b=o,d&&(s[a].hasB=1)}}}(n,o),u.mode){case\"overlay\":h(e,n,o,u);break;case\"group\":for(b=[],x=[],w=0;w<o.length;w++)void 0===(k=o[w])[0].trace.offset?x.push(k):b.push(k);x.length&&function(t,e,n,r,i){var o=new c(r,{sepNegVal:!1,overlapNoMerge:!i.norm});(function(t,e,n,r){for(var i=t._fullLayout,a=n.minDiff,o=n.traces,s=o.length,c=n.positions.length!==n.distinctPositions.length,u=a*(1-r.gap),h=l(i,e._id)+o[0][0].trace.orientation,d=i._alignmentOpts[h]||{},g=0;g<s;g++){var y,v,_=o[g],b=_[0].trace,x=Object.keys((d[b.alignmentgroup]||{}).offsetGroups||{}).length,w=(y=x?u/x:c?u/s:u)*(1-(r.groupgap||0));v=x?((2*b._offsetIndex+1-x)*y-w)/2:c?((2*g+1-s)*y-w)/2:-w/2;var k=_[0].t;k.barwidth=w,k.poffset=v,k.bargroupwidth=u,k.bardelta=a}n.binWidth=o[0][0].t.barwidth/100,f(n),p(e,n),m(e,n,c)})(t,e,o,i),function(t){for(var e=t.traces,n=0;n<e.length;n++){var r=e[n];if(void 0===r[0].trace.base)for(var i=new c([r],{sepNegVal:!0,overlapNoMerge:!0}),o=0;o<r.length;o++){var s=r[o];if(s.p!==a){var l=i.put(s.p,s.b+s.s);l&&(s.b=l)}}}}(o),i.norm?(y(o),v(n,o,i)):g(n,o)}(t,e,n,x,u),b.length&&h(e,n,b,u);break;case\"stack\":case\"relative\":for(b=[],x=[],w=0;w<o.length;w++)void 0===(k=o[w])[0].trace.base?x.push(k):b.push(k);x.length&&function(t,e,n,r,i){var o=new c(r,{sepNegVal:\"relative\"===i.mode,overlapNoMerge:!(i.norm||\"stack\"===i.mode||\"relative\"===i.mode)});d(e,o,i),function(t,e,n){var r,i,o,l,c,u,h=_(t),d=e.traces;for(l=0;l<d.length;l++)if(\"funnel\"===(i=(r=d[l])[0].trace).type)for(c=0;c<r.length;c++)(u=r[c]).s!==a&&e.put(u.p,-.5*u.s);for(l=0;l<d.length;l++){o=\"funnel\"===(i=(r=d[l])[0].trace).type;var f=[];for(c=0;c<r.length;c++)if((u=r[c]).s!==a){var p,m=e.put(u.p,p=o?u.s:u.s+u.b),g=m+p;u.b=m,u[h]=g,n.norm||(f.push(g),u.hasB&&f.push(m))}n.norm||(i._extremes[t._id]=s.findExtremes(t,f,{tozero:!0,padded:!0}))}}(n,o,i);for(var l=0;l<r.length;l++)for(var u=r[l],h=0;h<u.length;h++){var f=u[h];f.s!==a&&f.b+f.s===o.get(f.p,f.s)&&(f._outmost=!0)}i.norm&&v(n,o,i)}(0,e,n,x,u),b.length&&h(e,n,b,u)}!function(t,e){var n,i,a,o=_(e),s={},l=1/0,c=-1/0;for(n=0;n<t.length;n++)for(a=t[n],i=0;i<a.length;i++){var u=a[i].p;r(u)&&(l=Math.min(l,u),c=Math.max(c,u))}var h=1e4/(c-l),d=s.round=function(t){return String(Math.round(h*(t-l)))};for(n=0;n<t.length;n++){(a=t[n])[0].t.extents=s;var f=a[0].t.poffset,p=Array.isArray(f);for(i=0;i<a.length;i++){var m=a[i],g=m[o]-m.w/2;if(r(g)){var y=m[o]+m.w/2,v=d(m.p);s[v]=s[v]?[Math.min(g,s[v][0]),Math.max(y,s[v][1])]:[g,y]}m.p0=m.p+(p?f[i]:f),m.p1=m.p0+m.w,m.s0=m.b,m.s1=m.s0+m.s}}}(o,e)}}function h(t,e,n,r){for(var i=0;i<n.length;i++){var a=new c([n[i]],{unitMinDiff:r.xCat||r.yCat,sepNegVal:!1,overlapNoMerge:!r.norm});d(t,a,r),r.norm?(y(a),v(e,a,r)):g(e,a)}}function d(t,e,n){for(var r=e.minDiff,i=e.traces,a=r*(1-n.gap),o=a*(1-(n.groupgap||0)),s=-o/2,l=0;l<i.length;l++){var c=i[l][0].t;c.barwidth=o,c.poffset=s,c.bargroupwidth=a,c.bardelta=r}e.binWidth=i[0][0].t.barwidth/100,f(e),p(t,e),m(t,e)}function f(t){var e,n,a=t.traces;for(e=0;e<a.length;e++){var o,s=a[e],l=s[0],c=l.trace,u=l.t,h=c._offset||c.offset,d=u.poffset;if(i(h)){for(o=Array.prototype.slice.call(h,0,s.length),n=0;n<o.length;n++)r(o[n])||(o[n]=d);for(n=o.length;n<s.length;n++)o.push(d);u.poffset=o}else void 0!==h&&(u.poffset=h);var f=c._width||c.width,p=u.barwidth;if(i(f)){var m=Array.prototype.slice.call(f,0,s.length);for(n=0;n<m.length;n++)r(m[n])||(m[n]=p);for(n=m.length;n<s.length;n++)m.push(p);if(u.barwidth=m,void 0===h){for(o=[],n=0;n<s.length;n++)o.push(d+(p-m[n])/2);u.poffset=o}}else void 0!==f&&(u.barwidth=f,void 0===h&&(u.poffset=d+(p-f)/2))}}function p(t,e){for(var n=e.traces,r=_(t),i=0;i<n.length;i++)for(var a=n[i],o=a[0].t,s=o.poffset,l=Array.isArray(s),c=o.barwidth,u=Array.isArray(c),h=0;h<a.length;h++){var d=a[h],f=d.w=u?c[h]:c;d[r]=d.p+(l?s[h]:s)+f/2}}function m(t,e,n){var r=e.traces,i=e.minDiff/2;s.minDtick(t,e.minDiff,e.distinctPositions[0],n);for(var a=0;a<r.length;a++){var o,l,c,u=r[a],h=u[0],d=h.trace,f=[];for(c=0;c<u.length;c++)f.push(l=(o=u[c]).p-i,o.p+i);if(d.width||d.offset){var p=h.t,m=p.poffset,g=p.barwidth,y=Array.isArray(m),v=Array.isArray(g);for(c=0;c<u.length;c++)f.push(l=(o=u[c]).p+(y?m[c]:m),l+(v?g[c]:g))}d._extremes[t._id]=s.findExtremes(t,f,{padded:!1})}}function g(t,e){for(var n=e.traces,r=_(t),i=0;i<n.length;i++){for(var a=n[i],o=a[0].trace,l=[],c=!1,u=0;u<a.length;u++){var h=a[u],d=h.b,f=d+h.s;h[r]=f,l.push(f),h.hasB&&l.push(d),h.hasB&&h.b||(c=!0)}o._extremes[t._id]=s.findExtremes(t,l,{tozero:c,padded:!0})}}function y(t){for(var e=t.traces,n=0;n<e.length;n++)for(var r=e[n],i=0;i<r.length;i++){var o=r[i];o.s!==a&&t.put(o.p,o.b+o.s)}}function v(t,e,n){var i=e.traces,o=_(t),l=\"fraction\"===n.norm?1:100,c=l/1e9,u=t.l2c(t.c2l(0)),h=\"stack\"===n.mode?l:u;function d(e){return r(t.c2l(e))&&(e<u-c||e>h+c||!r(u))}for(var f=0;f<i.length;f++){for(var p=i[f],m=p[0].trace,g=[],y=!1,v=!1,b=0;b<p.length;b++){var x=p[b];if(x.s!==a){var w=Math.abs(l/e.get(x.p,x.s));x.b*=w,x.s*=w;var k=x.b,M=k+x.s;x[o]=M,g.push(M),v=v||d(M),x.hasB&&(g.push(k),v=v||d(k)),x.hasB&&x.b||(y=!0)}}m._extremes[t._id]=s.findExtremes(t,g,{tozero:y,padded:v})}}function _(t){return t._id.charAt(0)}e.exports={crossTraceCalc:function(t,e){for(var n=e.xaxis,r=e.yaxis,i=t._fullLayout,a=t._fullData,s=t.calcdata,l=[],c=[],h=0;h<a.length;h++){var d=a[h];if(!0===d.visible&&o.traceIs(d,\"bar\")&&d.xaxis===n._id&&d.yaxis===r._id&&(\"h\"===d.orientation?l.push(s[h]):c.push(s[h]),d._computePh))for(var f=t.calcdata[h],p=0;p<f.length;p++)\"function\"==typeof f[p].ph0&&(f[p].ph0=f[p].ph0()),\"function\"==typeof f[p].ph1&&(f[p].ph1=f[p].ph1())}var m={xCat:\"category\"===n.type||\"multicategory\"===n.type,yCat:\"category\"===r.type||\"multicategory\"===r.type,mode:i.barmode,norm:i.barnorm,gap:i.bargap,groupgap:i.bargroupgap};u(t,n,r,c,m),u(t,r,n,l,m)},setGroupPositions:u}},{\"../../constants/numerical\":753,\"../../lib\":778,\"../../plots/cartesian/axes\":828,\"../../plots/cartesian/constraints\":835,\"../../registry\":911,\"./sieve.js\":934,\"fast-isnumeric\":241}],925:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../components/color\"),a=t(\"../../registry\"),o=t(\"../scatter/xy_defaults\"),s=t(\"../scatter/period_defaults\"),l=t(\"./style_defaults\"),c=t(\"../../plots/cartesian/constraints\").getAxisGroup,u=t(\"./attributes\"),h=r.coerceFont;function d(t,e,n,r){var i=e.orientation,a=c(n,e[{v:\"x\",h:\"y\"}[i]+\"axis\"])+i,o=n._alignmentOpts||{},s=r(\"alignmentgroup\"),l=o[a];l||(l=o[a]={});var u=l[s];u?u.traces.push(e):u=l[s]={traces:[e],alignmentIndex:Object.keys(l).length,offsetGroups:{}};var h=r(\"offsetgroup\"),d=u.offsetGroups,f=d[h];h&&(f||(f=d[h]={offsetIndex:Object.keys(d).length}),e._offsetIndex=f.offsetIndex)}function f(t,e,n,i,a,o){var s=!(!1===(o=o||{}).moduleHasSelected),l=!(!1===o.moduleHasUnselected),c=!(!1===o.moduleHasConstrain),u=!(!1===o.moduleHasCliponaxis),d=!(!1===o.moduleHasTextangle),f=!(!1===o.moduleHasInsideanchor),p=!!o.hasPathbar,m=Array.isArray(a)||\"auto\"===a,g=m||\"inside\"===a,y=m||\"outside\"===a;if(g||y){var v=h(i,\"textfont\",n.font),_=r.extendFlat({},v),b=!(t.textfont&&t.textfont.color);if(b&&delete _.color,h(i,\"insidetextfont\",_),p){var x=r.extendFlat({},v);b&&delete x.color,h(i,\"pathbar.textfont\",x)}y&&h(i,\"outsidetextfont\",v),s&&i(\"selected.textfont.color\"),l&&i(\"unselected.textfont.color\"),c&&i(\"constraintext\"),u&&i(\"cliponaxis\"),d&&i(\"textangle\"),i(\"texttemplate\")}g&&f&&i(\"insidetextanchor\")}e.exports={supplyDefaults:function(t,e,n,c){function h(n,i){return r.coerce(t,e,u,n,i)}if(o(t,e,c,h)){s(t,e,c,h),h(\"orientation\",e.x&&!e.y?\"h\":\"v\"),h(\"base\"),h(\"offset\"),h(\"width\"),h(\"text\"),h(\"hovertext\"),h(\"hovertemplate\");var d=h(\"textposition\");f(t,0,c,h,d,{moduleHasSelected:!0,moduleHasUnselected:!0,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),l(t,e,h,n,c);var p=(e.marker.line||{}).color,m=a.getComponentMethod(\"errorbars\",\"supplyDefaults\");m(t,e,p||i.defaultLine,{axis:\"y\"}),m(t,e,p||i.defaultLine,{axis:\"x\",inherit:\"y\"}),r.coerceSelectionMarkerOpacity(e,h)}else e.visible=!1},crossTraceDefaults:function(t,e){var n;function i(t){return r.coerce(n._input,n,u,t)}if(\"group\"===e.barmode)for(var a=0;a<t.length;a++)\"bar\"===(n=t[a]).type&&d(0,n,e,i)},handleGroupingDefaults:d,handleText:f}},{\"../../components/color\":643,\"../../lib\":778,\"../../plots/cartesian/constraints\":835,\"../../registry\":911,\"../scatter/period_defaults\":1207,\"../scatter/xy_defaults\":1214,\"./attributes\":921,\"./style_defaults\":936}],926:[function(t,e,n){\"use strict\";e.exports=function(t,e,n){return t.x=\"xVal\"in e?e.xVal:e.x,t.y=\"yVal\"in e?e.yVal:e.y,e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),\"h\"===n.orientation?(t.label=t.y,t.value=t.x):(t.label=t.x,t.value=t.y),t}},{}],927:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"tinycolor2\"),a=t(\"../../lib\").isArrayOrTypedArray;n.coerceString=function(t,e,n){if(\"string\"==typeof e){if(e||!t.noBlank)return e}else if((\"number\"==typeof e||!0===e)&&!t.strict)return String(e);return void 0!==n?n:t.dflt},n.coerceNumber=function(t,e,n){if(r(e)){e=+e;var i=t.min,a=t.max;if(!(void 0!==i&&e<i||void 0!==a&&e>a))return e}return void 0!==n?n:t.dflt},n.coerceColor=function(t,e,n){return i(e).isValid()?e:void 0!==n?n:t.dflt},n.coerceEnumerated=function(t,e,n){return t.coerceNumber&&(e=+e),-1!==t.values.indexOf(e)?e:void 0!==n?n:t.dflt},n.getValue=function(t,e){var n;return Array.isArray(t)?e<t.length&&(n=t[e]):n=t,n},n.getLineWidth=function(t,e){return 0<e.mlw?e.mlw:a(t.marker.line.width)?0:t.marker.line.width}},{\"../../lib\":778,\"fast-isnumeric\":241,tinycolor2:576}],928:[function(t,e,n){\"use strict\";var r=t(\"../../components/fx\"),i=t(\"../../registry\"),a=t(\"../../components/color\"),o=t(\"../../lib\").fillText,s=t(\"./helpers\").getLineWidth,l=t(\"../../plots/cartesian/axes\").hoverLabelText,c=t(\"../../constants/numerical\").BADNUM;function u(t,e,n,i){var a,s,u,h,d,f,p,m=t.cd,g=m[0].trace,y=m[0].t,v=\"closest\"===i,_=\"waterfall\"===g.type,b=t.maxHoverDistance;function x(t){return t[u]-t.w/2}function w(t){return t[u]+t.w/2}var k=v?x:function(t){return Math.min(x(t),t.p-y.bardelta/2)},M=v?w:function(t){return Math.max(w(t),t.p+y.bardelta/2)};function T(t,e){return r.inbox(t-a,e-a,b+Math.min(1,Math.abs(e-t)/p)-1)}function S(t){return T(k(t),M(t))}function A(t){var e=s,n=t.b,i=t[h];if(_){var a=Math.abs(t.rawS)||0;e>0?i+=a:e<0&&(i-=a)}return r.inbox(n-e,i-e,b+(i-e)/(i-n)-1)}\"h\"===g.orientation?(a=n,s=e,u=\"y\",h=\"x\",d=A,f=S):(a=e,s=n,u=\"x\",h=\"y\",f=A,d=S);var L=t[u+\"a\"],C=t[h+\"a\"];p=Math.abs(L.r2c(L.range[1])-L.r2c(L.range[0]));var E=r.getDistanceFunction(i,d,f,(function(t){return(d(t)+f(t))/2}));if(r.getClosest(m,E,t),!1!==t.index&&m[t.index].p!==c){v||(k=function(t){return Math.min(x(t),t.p-y.bargroupwidth/2)},M=function(t){return Math.max(w(t),t.p+y.bargroupwidth/2)});var O=m[t.index],D=g.base?O.b+O.s:O.s;t[h+\"0\"]=t[h+\"1\"]=C.c2p(O[h],!0),t[h+\"LabelVal\"]=D;var I=y.extents[y.extents.round(O.p)];return t[u+\"0\"]=L.c2p(v?k(O):I[0],!0),t[u+\"1\"]=L.c2p(v?M(O):I[1],!0),t[u+\"LabelVal\"]=void 0!==O.orig_p?O.orig_p:O.p,t.labelLabel=l(L,t[u+\"LabelVal\"]),t.valueLabel=l(C,t[h+\"LabelVal\"]),t.baseLabel=l(C,O.b),t.spikeDistance=(A(O)+function(t){return T(x(t),w(t))}(O))/2-b,t[u+\"Spike\"]=L.c2p(O.p,!0),o(O,g,t),t.hovertemplate=g.hovertemplate,t}}function h(t,e){var n=e.mcc||t.marker.color,r=e.mlcc||t.marker.line.color,i=s(t,e);return a.opacity(n)?n:a.opacity(r)&&i?r:void 0}e.exports={hoverPoints:function(t,e,n,r){var a=u(t,e,n,r);if(a){var o=a.cd,s=o[0].trace,l=o[a.index];return a.color=h(s,l),i.getComponentMethod(\"errorbars\",\"hoverInfo\")(l,s,a),[a]}},hoverOnBars:u,getTraceColor:h}},{\"../../components/color\":643,\"../../components/fx\":683,\"../../constants/numerical\":753,\"../../lib\":778,\"../../plots/cartesian/axes\":828,\"../../registry\":911,\"./helpers\":927}],929:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),layoutAttributes:t(\"./layout_attributes\"),supplyDefaults:t(\"./defaults\").supplyDefaults,crossTraceDefaults:t(\"./defaults\").crossTraceDefaults,supplyLayoutDefaults:t(\"./layout_defaults\"),calc:t(\"./calc\"),crossTraceCalc:t(\"./cross_trace_calc\").crossTraceCalc,colorbar:t(\"../scatter/marker_colorbar\"),arraysToCalcdata:t(\"./arrays_to_calcdata\"),plot:t(\"./plot\").plot,style:t(\"./style\").style,styleOnSelect:t(\"./style\").styleOnSelect,hoverPoints:t(\"./hover\").hoverPoints,eventData:t(\"./event_data\"),selectPoints:t(\"./select\"),moduleType:\"trace\",name:\"bar\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"bar-like\",\"cartesian\",\"svg\",\"bar\",\"oriented\",\"errorBarsOK\",\"showLegend\",\"zoomScale\"],animatable:!0,meta:{}}},{\"../../plots/cartesian\":841,\"../scatter/marker_colorbar\":1205,\"./arrays_to_calcdata\":920,\"./attributes\":921,\"./calc\":922,\"./cross_trace_calc\":924,\"./defaults\":925,\"./event_data\":926,\"./hover\":928,\"./layout_attributes\":930,\"./layout_defaults\":931,\"./plot\":932,\"./select\":933,\"./style\":935}],930:[function(t,e,n){\"use strict\";e.exports={barmode:{valType:\"enumerated\",values:[\"stack\",\"group\",\"overlay\",\"relative\"],dflt:\"group\",editType:\"calc\"},barnorm:{valType:\"enumerated\",values:[\"\",\"fraction\",\"percent\"],dflt:\"\",editType:\"calc\"},bargap:{valType:\"number\",min:0,max:1,editType:\"calc\"},bargroupgap:{valType:\"number\",min:0,max:1,dflt:0,editType:\"calc\"}}},{}],931:[function(t,e,n){\"use strict\";var r=t(\"../../registry\"),i=t(\"../../plots/cartesian/axes\"),a=t(\"../../lib\"),o=t(\"./layout_attributes\");e.exports=function(t,e,n){function s(n,r){return a.coerce(t,e,o,n,r)}for(var l=!1,c=!1,u=!1,h={},d=s(\"barmode\"),f=0;f<n.length;f++){var p=n[f];if(r.traceIs(p,\"bar\")&&p.visible){if(l=!0,\"group\"===d){var m=p.xaxis+p.yaxis;h[m]&&(u=!0),h[m]=!0}p.visible&&\"histogram\"===p.type&&\"category\"!==i.getFromId({_fullLayout:e},p[\"v\"===p.orientation?\"xaxis\":\"yaxis\"]).type&&(c=!0)}}l?(\"overlay\"!==d&&s(\"barnorm\"),s(\"bargap\",c&&!u?0:.2),s(\"bargroupgap\")):delete e.barmode}},{\"../../lib\":778,\"../../plots/cartesian/axes\":828,\"../../registry\":911,\"./layout_attributes\":930}],932:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"fast-isnumeric\"),a=t(\"../../lib\"),o=t(\"../../lib/svg_text_utils\"),s=t(\"../../components/color\"),l=t(\"../../components/drawing\"),c=t(\"../../registry\"),u=t(\"../../plots/cartesian/axes\").tickText,h=t(\"./uniform_text\"),d=h.recordMinTextSize,f=h.clearMinTextSize,p=t(\"./style\"),m=t(\"./helpers\"),g=t(\"./constants\"),y=t(\"./attributes\"),v=y.text,_=y.textposition,b=t(\"../../components/fx/helpers\").appendArrayPointValue,x=g.TEXTPAD;function w(t){return t.id}function k(t){if(t.ids)return w}function M(t,e){return t<e?1:-1}function T(t,e,n,r){var i;return!e.uniformtext.mode&&S(n)?(r&&(i=r()),t.transition().duration(n.duration).ease(n.easing).each(\"end\",(function(){i&&i()})).each(\"interrupt\",(function(){i&&i()}))):t}function S(t){return t&&t.duration>0}function A(t){return\"auto\"===t?0:t}function L(t,e){var n=Math.PI/180*e,r=Math.abs(Math.sin(n)),i=Math.abs(Math.cos(n));return{x:t.width*i+t.height*r,y:t.width*r+t.height*i}}function C(t,e,n,r,i,a){var o=!!a.isHorizontal,s=!!a.constrained,l=a.angle||0,c=a.anchor||\"end\",u=\"end\"===c,h=\"start\"===c,d=((a.leftToRight||0)+1)/2,f=1-d,p=i.width,m=i.height,g=Math.abs(e-t),y=Math.abs(r-n),v=g>2*x&&y>2*x?x:0;g-=2*v,y-=2*v;var _=A(l);\"auto\"!==l||p<=g&&m<=y||!(p>g||m>y)||(p>y||m>g)&&p<m==g<y||(_+=90);var b=L(i,_),w=1;s&&(w=Math.min(1,g/b.x,y/b.y));var k=i.left*f+i.right*d,T=(i.top+i.bottom)/2,S=(t+x)*f+(e-x)*d,C=(n+r)/2,E=0,O=0;if(h||u){var D=(o?b.x:b.y)/2,I=o?M(t,e):M(n,r);o?h?(S=t+I*v,E=-I*D):(S=e-I*v,E=I*D):h?(C=n+I*v,O=-I*D):(C=r-I*v,O=I*D)}return{textX:k,textY:T,targetX:S,targetY:C,anchorX:E,anchorY:O,scale:w,rotate:_}}e.exports={plot:function(t,e,n,h,g,y){var w=e.xaxis,E=e.yaxis,O=t._fullLayout;g||(g={mode:O.barmode,norm:O.barmode,gap:O.bargap,groupgap:O.bargroupgap},f(\"bar\",O));var D=a.makeTraceGroups(h,n,\"trace bars\").each((function(n){var c=r.select(this),h=n[0].trace,f=\"bar\"===h.type||\"funnel\"===h.type,D=0;\"waterfall\"===h.type&&h.connector.visible&&\"between\"===h.connector.mode&&(D=h.connector.line.width/2);var I=\"h\"===h.orientation,P=S(g),R=a.ensureSingle(c,\"g\",\"points\"),z=k(h),j=R.selectAll(\"g.point\").data(a.identity,z);j.enter().append(\"g\").classed(\"point\",!0),j.exit().remove(),j.each((function(c,k){var S,R,z=r.select(this),j=function(t,e,n,r){var i=[],a=[],o=r?e:n,s=r?n:e;return i[0]=o.c2p(t.s0,!0),a[0]=s.c2p(t.p0,!0),i[1]=o.c2p(t.s1,!0),a[1]=s.c2p(t.p1,!0),r?[i,a]:[a,i]}(c,w,E,I),F=j[0][0],N=j[0][1],B=j[1][0],Y=j[1][1],H=0==(I?N-F:Y-B);if(H&&f&&m.getLineWidth(h,c)&&(H=!1),H||(H=!(i(F)&&i(N)&&i(B)&&i(Y))),c.isBlank=H,H&&(I?N=F:Y=B),D&&!H&&(I?(F-=M(F,N)*D,N+=M(F,N)*D):(B-=M(B,Y)*D,Y+=M(B,Y)*D)),\"waterfall\"===h.type){if(!H){var V=h[c.dir].marker;S=V.line.width,R=V.color}}else S=m.getLineWidth(h,c),R=c.mc||h.marker.color;function U(t){var e=r.round(S/2%1,2);return 0===g.gap&&0===g.groupgap?r.round(Math.round(t)-e,2):t}if(!t._context.staticPlot){var W=s.opacity(R)<1||S>.01?U:function(t,e,n){return n&&t===e?t:Math.abs(t-e)>=2?U(t):t>e?Math.ceil(t):Math.floor(t)};F=W(F,N,I),N=W(N,F,I),B=W(B,Y,!I),Y=W(Y,B,!I)}var q=T(a.ensureSingle(z,\"path\"),O,g,y);if(q.style(\"vector-effect\",\"non-scaling-stroke\").attr(\"d\",isNaN((N-F)*(Y-B))||H&&t._context.staticPlot?\"M0,0Z\":\"M\"+F+\",\"+B+\"V\"+Y+\"H\"+N+\"V\"+B+\"Z\").call(l.setClipUrl,e.layerClipId,t),!O.uniformtext.mode&&P){var G=l.makePointStyleFns(h);l.singlePointStyle(c,q,h,G,t)}(function(t,e,n,r,i,s,c,h,f,g,y){var w,k=e.xaxis,S=e.yaxis,E=t._fullLayout;function O(e,n,r){return a.ensureSingle(e,\"text\").text(n).attr({class:\"bartext bartext-\"+w,\"text-anchor\":\"middle\",\"data-notex\":1}).call(l.font,r).call(o.convertToTspans,t)}var D=r[0].trace,I=\"h\"===D.orientation,P=function(t,e,n,r,i){var o,s=e[0].trace;return o=s.texttemplate?function(t,e,n,r,i){var o=e[0].trace,s=a.castOption(o,n,\"texttemplate\");if(!s)return\"\";var l,c,h,d,f=\"waterfall\"===o.type,p=\"funnel\"===o.type;function m(t){return u(d,+t,!0).text}\"h\"===o.orientation?(l=\"y\",c=i,h=\"x\",d=r):(l=\"x\",c=r,h=\"y\",d=i);var g=e[n],y={};y.label=g.p,y.labelLabel=y[l+\"Label\"]=u(c,g.p,!0).text;var v=a.castOption(o,g.i,\"text\");(0===v||v)&&(y.text=v),y.value=g.s,y.valueLabel=y[h+\"Label\"]=m(g.s);var _={};b(_,o,g.i),f&&(y.delta=+g.rawS||g.s,y.deltaLabel=m(y.delta),y.final=g.v,y.finalLabel=m(y.final),y.initial=y.final-y.delta,y.initialLabel=m(y.initial)),p&&(y.value=g.s,y.valueLabel=m(y.value),y.percentInitial=g.begR,y.percentInitialLabel=a.formatPercent(g.begR),y.percentPrevious=g.difR,y.percentPreviousLabel=a.formatPercent(g.difR),y.percentTotal=g.sumR,y.percenTotalLabel=a.formatPercent(g.sumR));var x=a.castOption(o,g.i,\"customdata\");return x&&(y.customdata=x),a.texttemplateString(s,y,t._d3locale,_,y,o._meta||{})}(t,e,n,r,i):s.textinfo?function(t,e,n,r){var i=t[0].trace,o=\"h\"===i.orientation,s=\"waterfall\"===i.type,l=\"funnel\"===i.type;function c(t){return u(o?n:r,+t,!0).text}var h,d=t[e],f=i.textinfo.split(\"+\"),p=[],m=function(t){return-1!==f.indexOf(t)};if(m(\"label\")&&p.push(u(o?r:n,t[e].p,!0).text),m(\"text\")&&(0===(h=a.castOption(i,d.i,\"text\"))||h)&&p.push(h),s){var g=+d.rawS||d.s,y=d.v,v=y-g;m(\"initial\")&&p.push(c(v)),m(\"delta\")&&p.push(c(g)),m(\"final\")&&p.push(c(y))}if(l){m(\"value\")&&p.push(c(d.s));var _=0;m(\"percent initial\")&&_++,m(\"percent previous\")&&_++,m(\"percent total\")&&_++;var b=_>1;m(\"percent initial\")&&(h=a.formatPercent(d.begR),b&&(h+=\" of initial\"),p.push(h)),m(\"percent previous\")&&(h=a.formatPercent(d.difR),b&&(h+=\" of previous\"),p.push(h)),m(\"percent total\")&&(h=a.formatPercent(d.sumR),b&&(h+=\" of total\"),p.push(h))}return p.join(\"<br>\")}(e,n,r,i):m.getValue(s.text,n),m.coerceString(v,o)}(E,r,i,k,S);w=function(t,e){var n=m.getValue(t.textposition,e);return m.coerceEnumerated(_,n)}(D,i);var R=r[i],z=!(\"stack\"===g.mode||\"relative\"===g.mode)||R._outmost;if(P&&\"none\"!==w&&(!R.isBlank&&s!==c&&h!==f||\"auto\"!==w&&\"inside\"!==w)){var j=E.font,F=p.getBarColor(r[i],D),N=p.getInsideTextFont(D,i,j,F),B=p.getOutsideTextFont(D,i,j),Y=n.datum();I?\"log\"===k.type&&Y.s0<=0&&(s=k.range[0]<k.range[1]?0:k._length):\"log\"===S.type&&Y.s0<=0&&(h=S.range[0]<S.range[1]?S._length:0);var H,V,U,W,q,G=Math.abs(c-s)-2*x,X=Math.abs(f-h)-2*x;if(\"outside\"===w&&(z||R.hasB||(w=\"inside\")),\"auto\"===w&&(z?(w=\"inside\",H=O(n,P,q=a.ensureUniformFontSize(t,N)),W=(V=l.bBox(H.node())).height,(U=V.width)>0&&W>0&&(U<=G&&W<=X||U<=X&&W<=G||(I?G>=U*(X/W):X>=W*(G/U)))?w=\"inside\":(w=\"outside\",H.remove(),H=null)):w=\"inside\"),!H){var Z=(H=O(n,P,q=a.ensureUniformFontSize(t,\"outside\"===w?B:N))).attr(\"transform\");if(H.attr(\"transform\",\"\"),U=(V=l.bBox(H.node())).width,W=V.height,H.attr(\"transform\",Z),U<=0||W<=0)return void H.remove()}var J,K=D.textangle;(J=\"outside\"===w?function(t,e,n,r,i,a){var o,s=!!a.isHorizontal,l=!!a.constrained,c=a.angle||0,u=i.width,h=i.height,d=Math.abs(e-t),f=Math.abs(r-n);o=s?f>2*x?x:0:d>2*x?x:0;var p=1;l&&(p=s?Math.min(1,f/h):Math.min(1,d/u));var m=A(c),g=L(i,m),y=(s?g.x:g.y)/2,v=(i.left+i.right)/2,_=(i.top+i.bottom)/2,b=(t+e)/2,w=(n+r)/2,k=0,T=0,S=s?M(e,t):M(n,r);return s?(b=e-S*o,k=S*y):(w=r+S*o,T=-S*y),{textX:v,textY:_,targetX:b,targetY:w,anchorX:k,anchorY:T,scale:p,rotate:m}}(s,c,h,f,V,{isHorizontal:I,constrained:\"both\"===D.constraintext||\"outside\"===D.constraintext,angle:K}):C(s,c,h,f,V,{isHorizontal:I,constrained:\"both\"===D.constraintext||\"inside\"===D.constraintext,angle:K,anchor:D.insidetextanchor})).fontSize=q.size,d(D.type,J,E),R.transform=J,T(H,E,g,y).attr(\"transform\",a.getTextTransform(J))}else n.select(\"text\").remove()})(t,e,z,n,k,F,N,B,Y,g,y),e.layerClipId&&l.hideOutsideRangePoint(c,z.select(\"text\"),w,E,h.xcalendar,h.ycalendar)})),l.setClipUrl(c,!1===h.cliponaxis?null:e.layerClipId,t)}));c.getComponentMethod(\"errorbars\",\"plot\")(t,D,e,g)},toMoveInsideBar:C}},{\"../../components/color\":643,\"../../components/drawing\":665,\"../../components/fx/helpers\":679,\"../../lib\":778,\"../../lib/svg_text_utils\":803,\"../../plots/cartesian/axes\":828,\"../../registry\":911,\"./attributes\":921,\"./constants\":923,\"./helpers\":927,\"./style\":935,\"./uniform_text\":937,d3:169,\"fast-isnumeric\":241}],933:[function(t,e,n){\"use strict\";function r(t,e,n,r,i){var a=e.c2p(r?t.s0:t.p0,!0),o=e.c2p(r?t.s1:t.p1,!0),s=n.c2p(r?t.p0:t.s0,!0),l=n.c2p(r?t.p1:t.s1,!0);return i?[(a+o)/2,(s+l)/2]:r?[o,(s+l)/2]:[(a+o)/2,l]}e.exports=function(t,e){var n,i=t.cd,a=t.xaxis,o=t.yaxis,s=i[0].trace,l=\"funnel\"===s.type,c=\"h\"===s.orientation,u=[];if(!1===e)for(n=0;n<i.length;n++)i[n].selected=0;else for(n=0;n<i.length;n++){var h=i[n],d=\"ct\"in h?h.ct:r(h,a,o,c,l);e.contains(d,!1,n,t)?(u.push({pointNumber:n,x:a.c2d(h.x),y:o.c2d(h.y)}),h.selected=1):h.selected=0}return u}},{}],934:[function(t,e,n){\"use strict\";e.exports=a;var r=t(\"../../lib\").distinctVals,i=t(\"../../constants/numerical\").BADNUM;function a(t,e){this.traces=t,this.sepNegVal=e.sepNegVal,this.overlapNoMerge=e.overlapNoMerge;for(var n=1/0,a=[],o=0;o<t.length;o++){for(var s=t[o],l=0;l<s.length;l++){var c=s[l];c.p!==i&&a.push(c.p)}s[0]&&s[0].width1&&(n=Math.min(s[0].width1,n))}this.positions=a;var u=r(a,{unitMinDiff:e.unitMinDiff});this.distinctPositions=u.vals,this.minDiff=1===u.vals.length&&n!==1/0?n:Math.min(u.minDiff,n),this.binWidth=this.minDiff,this.bins={}}a.prototype.put=function(t,e){var n=this.getLabel(t,e),r=this.bins[n]||0;return this.bins[n]=r+e,r},a.prototype.get=function(t,e){var n=this.getLabel(t,e);return this.bins[n]||0},a.prototype.getLabel=function(t,e){return(e<0&&this.sepNegVal?\"v\":\"^\")+(this.overlapNoMerge?t:Math.round(t/this.binWidth))}},{\"../../constants/numerical\":753,\"../../lib\":778}],935:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../components/color\"),a=t(\"../../components/drawing\"),o=t(\"../../lib\"),s=t(\"../../registry\"),l=t(\"./uniform_text\").resizeText,c=t(\"./attributes\"),u=c.textfont,h=c.insidetextfont,d=c.outsidetextfont,f=t(\"./helpers\");function p(t,e,n){a.pointStyle(t.selectAll(\"path\"),e,n),m(t,e,n)}function m(t,e,n){t.selectAll(\"text\").each((function(t){var i=r.select(this),s=o.ensureUniformFontSize(n,g(i,t,e,n));a.font(i,s)}))}function g(t,e,n,r){var i=r._fullLayout.font,a=n.textfont;if(t.classed(\"bartext-inside\")){var o=x(e,n);a=v(n,e.i,i,o)}else t.classed(\"bartext-outside\")&&(a=_(n,e.i,i));return a}function y(t,e,n){return b(u,t.textfont,e,n)}function v(t,e,n,r){var a=y(t,e,n);return(void 0===t._input.textfont||void 0===t._input.textfont.color||Array.isArray(t.textfont.color)&&void 0===t.textfont.color[e])&&(a={color:i.contrast(r),family:a.family,size:a.size}),b(h,t.insidetextfont,e,a)}function _(t,e,n){var r=y(t,e,n);return b(d,t.outsidetextfont,e,r)}function b(t,e,n,r){var i=f.getValue((e=e||{}).family,n),a=f.getValue(e.size,n),o=f.getValue(e.color,n);return{family:f.coerceString(t.family,i,r.family),size:f.coerceNumber(t.size,a,r.size),color:f.coerceColor(t.color,o,r.color)}}function x(t,e){return\"waterfall\"===e.type?e[t.dir].marker.color:t.mc||e.marker.color}e.exports={style:function(t){var e=r.select(t).selectAll(\"g.barlayer\").selectAll(\"g.trace\");l(t,e,\"bar\");var n=e.size(),i=t._fullLayout;e.style(\"opacity\",(function(t){return t[0].trace.opacity})).each((function(t){(\"stack\"===i.barmode&&n>1||0===i.bargap&&0===i.bargroupgap&&!t[0].trace.marker.line.width)&&r.select(this).attr(\"shape-rendering\",\"crispEdges\")})),e.selectAll(\"g.points\").each((function(e){p(r.select(this),e[0].trace,t)})),s.getComponentMethod(\"errorbars\",\"style\")(e)},styleTextPoints:m,styleOnSelect:function(t,e,n){var i=e[0].trace;i.selectedpoints?function(t,e,n){a.selectedPointStyle(t.selectAll(\"path\"),e),function(t,e,n){t.each((function(t){var i,s=r.select(this);if(t.selected){i=o.ensureUniformFontSize(n,g(s,t,e,n));var l=e.selected.textfont&&e.selected.textfont.color;l&&(i.color=l),a.font(s,i)}else a.selectedTextStyle(s,e)}))}(t.selectAll(\"text\"),e,n)}(n,i,t):(p(n,i,t),s.getComponentMethod(\"errorbars\",\"style\")(n))},getInsideTextFont:v,getOutsideTextFont:_,getBarColor:x,resizeText:l}},{\"../../components/color\":643,\"../../components/drawing\":665,\"../../lib\":778,\"../../registry\":911,\"./attributes\":921,\"./helpers\":927,\"./uniform_text\":937,d3:169}],936:[function(t,e,n){\"use strict\";var r=t(\"../../components/color\"),i=t(\"../../components/colorscale/helpers\").hasColorscale,a=t(\"../../components/colorscale/defaults\");e.exports=function(t,e,n,o,s){n(\"marker.color\",o),i(t,\"marker\")&&a(t,e,s,n,{prefix:\"marker.\",cLetter:\"c\"}),n(\"marker.line.color\",r.defaultLine),i(t,\"marker.line\")&&a(t,e,s,n,{prefix:\"marker.line.\",cLetter:\"c\"}),n(\"marker.line.width\"),n(\"marker.opacity\"),n(\"selected.marker.color\"),n(\"unselected.marker.color\")}},{\"../../components/color\":643,\"../../components/colorscale/defaults\":653,\"../../components/colorscale/helpers\":654}],937:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../lib\");function a(t){return\"_\"+t+\"Text_minsize\"}e.exports={recordMinTextSize:function(t,e,n){if(n.uniformtext.mode){var r=a(t),i=n.uniformtext.minsize,o=e.scale*e.fontSize;e.hide=o<i,n[r]=n[r]||1/0,e.hide||(n[r]=Math.min(n[r],Math.max(o,i)))}},clearMinTextSize:function(t,e){e[a(t)]=void 0},resizeText:function(t,e,n){var a=t._fullLayout,o=a[\"_\"+n+\"Text_minsize\"];if(o){var s,l=\"hide\"===a.uniformtext.mode;switch(n){case\"funnelarea\":case\"pie\":case\"sunburst\":s=\"g.slice\";break;case\"treemap\":s=\"g.slice, g.pathbar\";break;default:s=\"g.points > g.point\"}e.selectAll(s).each((function(t){var e=t.transform;e&&(e.scale=l&&e.hide?0:o/e.fontSize,r.select(this).select(\"text\").attr(\"transform\",i.getTextTransform(e)))}))}}}},{\"../../lib\":778,d3:169}],938:[function(t,e,n){\"use strict\";var r=t(\"../../plots/template_attributes\").hovertemplateAttrs,i=t(\"../../lib/extend\").extendFlat,a=t(\"../scatterpolar/attributes\"),o=t(\"../bar/attributes\");e.exports={r:a.r,theta:a.theta,r0:a.r0,dr:a.dr,theta0:a.theta0,dtheta:a.dtheta,thetaunit:a.thetaunit,base:i({},o.base,{}),offset:i({},o.offset,{}),width:i({},o.width,{}),text:i({},o.text,{}),hovertext:i({},o.hovertext,{}),marker:o.marker,hoverinfo:a.hoverinfo,hovertemplate:r(),selected:o.selected,unselected:o.unselected}},{\"../../lib/extend\":768,\"../../plots/template_attributes\":906,\"../bar/attributes\":921,\"../scatterpolar/attributes\":1261}],939:[function(t,e,n){\"use strict\";var r=t(\"../../components/colorscale/helpers\").hasColorscale,i=t(\"../../components/colorscale/calc\"),a=t(\"../bar/arrays_to_calcdata\"),o=t(\"../bar/cross_trace_calc\").setGroupPositions,s=t(\"../scatter/calc_selection\"),l=t(\"../../registry\").traceIs,c=t(\"../../lib\").extendFlat;e.exports={calc:function(t,e){for(var n=t._fullLayout,o=e.subplot,l=n[o].angularaxis,c=n[o].radialaxis.makeCalcdata(e,\"r\"),u=l.makeCalcdata(e,\"theta\"),h=e._length,d=new Array(h),f=c,p=u,m=0;m<h;m++)d[m]={p:p[m],s:f[m]};function g(t){var n=e[t];void 0!==n&&(e[\"_\"+t]=Array.isArray(n)?l.makeCalcdata(e,t):l.d2c(n,e.thetaunit))}return\"linear\"===l.type&&(g(\"width\"),g(\"offset\")),r(e,\"marker\")&&i(t,e,{vals:e.marker.color,containerStr:\"marker\",cLetter:\"c\"}),r(e,\"marker.line\")&&i(t,e,{vals:e.marker.line.color,containerStr:\"marker.line\",cLetter:\"c\"}),a(d,e),s(d,e),d},crossTraceCalc:function(t,e,n){for(var r=t.calcdata,i=[],a=0;a<r.length;a++){var s=r[a],u=s[0].trace;!0===u.visible&&l(u,\"bar\")&&u.subplot===n&&i.push(s)}var h=c({},e.radialaxis,{_id:\"x\"});o(t,e.angularaxis,h,i,{mode:e.barmode,norm:e.barnorm,gap:e.bargap,groupgap:e.bargroupgap})}}},{\"../../components/colorscale/calc\":651,\"../../components/colorscale/helpers\":654,\"../../lib\":778,\"../../registry\":911,\"../bar/arrays_to_calcdata\":920,\"../bar/cross_trace_calc\":924,\"../scatter/calc_selection\":1189}],940:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../scatterpolar/defaults\").handleRThetaDefaults,a=t(\"../bar/style_defaults\"),o=t(\"./attributes\");e.exports=function(t,e,n,s){function l(n,i){return r.coerce(t,e,o,n,i)}i(t,e,s,l)?(l(\"thetaunit\"),l(\"base\"),l(\"offset\"),l(\"width\"),l(\"text\"),l(\"hovertext\"),l(\"hovertemplate\"),a(t,e,l,n,s),r.coerceSelectionMarkerOpacity(e,l)):e.visible=!1}},{\"../../lib\":778,\"../bar/style_defaults\":936,\"../scatterpolar/defaults\":1263,\"./attributes\":938}],941:[function(t,e,n){\"use strict\";var r=t(\"../../components/fx\"),i=t(\"../../lib\"),a=t(\"../bar/hover\").getTraceColor,o=i.fillText,s=t(\"../scatterpolar/hover\").makeHoverPointText,l=t(\"../../plots/polar/helpers\").isPtInsidePolygon;e.exports=function(t,e,n){var c=t.cd,u=c[0].trace,h=t.subplot,d=h.radialAxis,f=h.vangles,p=f?l:i.isPtInsideSector,m=t.maxHoverDistance,g=h.angularAxis._period||2*Math.PI,y=Math.abs(d.g2p(Math.sqrt(e*e+n*n))),v=Math.atan2(n,e);if(d.range[0]>d.range[1]&&(v+=Math.PI),r.getClosest(c,(function(t){return p(y,v,[t.rp0,t.rp1],[t.thetag0,t.thetag1],f)?m+Math.min(1,Math.abs(t.thetag1-t.thetag0)/g)-1+(t.rp1-y)/(t.rp1-t.rp0)-1:1/0}),t),!1!==t.index){var _=c[t.index];t.x0=t.x1=_.ct[0],t.y0=t.y1=_.ct[1];var b=i.extendFlat({},_,{r:_.s,theta:_.p});return o(_,u,t),s(b,u,h,t),t.hovertemplate=u.hovertemplate,t.color=a(u,_),t.xLabelVal=t.yLabelVal=void 0,_.s<0&&(t.idealAlign=\"left\"),[t]}}},{\"../../components/fx\":683,\"../../lib\":778,\"../../plots/polar/helpers\":893,\"../bar/hover\":928,\"../scatterpolar/hover\":1265}],942:[function(t,e,n){\"use strict\";e.exports={moduleType:\"trace\",name:\"barpolar\",basePlotModule:t(\"../../plots/polar\"),categories:[\"polar\",\"bar\",\"showLegend\"],attributes:t(\"./attributes\"),layoutAttributes:t(\"./layout_attributes\"),supplyDefaults:t(\"./defaults\"),supplyLayoutDefaults:t(\"./layout_defaults\"),calc:t(\"./calc\").calc,crossTraceCalc:t(\"./calc\").crossTraceCalc,plot:t(\"./plot\"),colorbar:t(\"../scatter/marker_colorbar\"),formatLabels:t(\"../scatterpolar/format_labels\"),style:t(\"../bar/style\").style,styleOnSelect:t(\"../bar/style\").styleOnSelect,hoverPoints:t(\"./hover\"),selectPoints:t(\"../bar/select\"),meta:{}}},{\"../../plots/polar\":894,\"../bar/select\":933,\"../bar/style\":935,\"../scatter/marker_colorbar\":1205,\"../scatterpolar/format_labels\":1264,\"./attributes\":938,\"./calc\":939,\"./defaults\":940,\"./hover\":941,\"./layout_attributes\":943,\"./layout_defaults\":944,\"./plot\":945}],943:[function(t,e,n){\"use strict\";e.exports={barmode:{valType:\"enumerated\",values:[\"stack\",\"overlay\"],dflt:\"stack\",editType:\"calc\"},bargap:{valType:\"number\",dflt:.1,min:0,max:1,editType:\"calc\"}}},{}],944:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./layout_attributes\");e.exports=function(t,e,n){var a,o={};function s(n,o){return r.coerce(t[a]||{},e[a],i,n,o)}for(var l=0;l<n.length;l++){var c=n[l];\"barpolar\"===c.type&&!0===c.visible&&(o[a=c.subplot]||(s(\"barmode\"),s(\"bargap\"),o[a]=1))}}},{\"../../lib\":778,\"./layout_attributes\":943}],945:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"fast-isnumeric\"),a=t(\"../../lib\"),o=t(\"../../components/drawing\"),s=t(\"../../plots/polar/helpers\");e.exports=function(t,e,n){var l=e.xaxis,c=e.yaxis,u=e.radialAxis,h=e.angularAxis,d=function(t){var e=t.cxx,n=t.cyy;return t.vangles?function(r,i,o,l){var c,u;a.angleDelta(o,l)>0?(c=o,u=l):(c=l,u=o);var h=s.findEnclosingVertexAngles(c,t.vangles)[0],d=s.findEnclosingVertexAngles(u,t.vangles)[1];return s.pathPolygonAnnulus(r,i,c,u,[h,(c+u)/2,d],e,n)}:function(t,r,i,o){return a.pathAnnulus(t,r,i,o,e,n)}}(e),f=e.layers.frontplot.select(\"g.barlayer\");a.makeTraceGroups(f,n,\"trace bars\").each((function(){var n=r.select(this),s=a.ensureSingle(n,\"g\",\"points\").selectAll(\"g.point\").data(a.identity);s.enter().append(\"g\").style(\"vector-effect\",\"non-scaling-stroke\").style(\"stroke-miterlimit\",2).classed(\"point\",!0),s.exit().remove(),s.each((function(t){var e,n=r.select(this),o=t.rp0=u.c2p(t.s0),s=t.rp1=u.c2p(t.s1),f=t.thetag0=h.c2g(t.p0),p=t.thetag1=h.c2g(t.p1);if(i(o)&&i(s)&&i(f)&&i(p)&&o!==s&&f!==p){var m=u.c2g(t.s1),g=(f+p)/2;t.ct=[l.c2p(m*Math.cos(g)),c.c2p(m*Math.sin(g))],e=d(o,s,f,p)}else e=\"M0,0Z\";a.ensureSingle(n,\"path\").attr(\"d\",e)})),o.setClipUrl(n,e._hasClipOnAxisFalse?e.clipIds.forTraces:null,t)}))}},{\"../../components/drawing\":665,\"../../lib\":778,\"../../plots/polar/helpers\":893,d3:169,\"fast-isnumeric\":241}],946:[function(t,e,n){\"use strict\";var r=t(\"../scatter/attributes\"),i=t(\"../bar/attributes\"),a=t(\"../../components/color/attributes\"),o=t(\"../../plots/template_attributes\").hovertemplateAttrs,s=t(\"../../lib/extend\").extendFlat,l=r.marker,c=l.line;e.exports={y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},x0:{valType:\"any\",editType:\"calc+clearAxisTypes\"},y0:{valType:\"any\",editType:\"calc+clearAxisTypes\"},dx:{valType:\"number\",editType:\"calc\"},dy:{valType:\"number\",editType:\"calc\"},xperiod:r.xperiod,yperiod:r.yperiod,xperiod0:r.xperiod0,yperiod0:r.yperiod0,xperiodalignment:r.xperiodalignment,yperiodalignment:r.yperiodalignment,name:{valType:\"string\",editType:\"calc+clearAxisTypes\"},q1:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},median:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},q3:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},lowerfence:{valType:\"data_array\",editType:\"calc\"},upperfence:{valType:\"data_array\",editType:\"calc\"},notched:{valType:\"boolean\",editType:\"calc\"},notchwidth:{valType:\"number\",min:0,max:.5,dflt:.25,editType:\"calc\"},notchspan:{valType:\"data_array\",editType:\"calc\"},boxpoints:{valType:\"enumerated\",values:[\"all\",\"outliers\",\"suspectedoutliers\",!1],editType:\"calc\"},jitter:{valType:\"number\",min:0,max:1,editType:\"calc\"},pointpos:{valType:\"number\",min:-2,max:2,editType:\"calc\"},boxmean:{valType:\"enumerated\",values:[!0,\"sd\",!1],editType:\"calc\"},mean:{valType:\"data_array\",editType:\"calc\"},sd:{valType:\"data_array\",editType:\"calc\"},orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],editType:\"calc+clearAxisTypes\"},quartilemethod:{valType:\"enumerated\",values:[\"linear\",\"exclusive\",\"inclusive\"],dflt:\"linear\",editType:\"calc\"},width:{valType:\"number\",min:0,dflt:0,editType:\"calc\"},marker:{outliercolor:{valType:\"color\",dflt:\"rgba(0, 0, 0, 0)\",editType:\"style\"},symbol:s({},l.symbol,{arrayOk:!1,editType:\"plot\"}),opacity:s({},l.opacity,{arrayOk:!1,dflt:1,editType:\"style\"}),size:s({},l.size,{arrayOk:!1,editType:\"calc\"}),color:s({},l.color,{arrayOk:!1,editType:\"style\"}),line:{color:s({},c.color,{arrayOk:!1,dflt:a.defaultLine,editType:\"style\"}),width:s({},c.width,{arrayOk:!1,dflt:0,editType:\"style\"}),outliercolor:{valType:\"color\",editType:\"style\"},outlierwidth:{valType:\"number\",min:0,dflt:1,editType:\"style\"},editType:\"style\"},editType:\"plot\"},line:{color:{valType:\"color\",editType:\"style\"},width:{valType:\"number\",min:0,dflt:2,editType:\"style\"},editType:\"plot\"},fillcolor:r.fillcolor,whiskerwidth:{valType:\"number\",min:0,max:1,dflt:.5,editType:\"calc\"},offsetgroup:i.offsetgroup,alignmentgroup:i.alignmentgroup,selected:{marker:r.selected.marker,editType:\"style\"},unselected:{marker:r.unselected.marker,editType:\"style\"},text:s({},r.text,{}),hovertext:s({},r.hovertext,{}),hovertemplate:o({}),hoveron:{valType:\"flaglist\",flags:[\"boxes\",\"points\"],dflt:\"boxes+points\",editType:\"style\"}}},{\"../../components/color/attributes\":642,\"../../lib/extend\":768,\"../../plots/template_attributes\":906,\"../bar/attributes\":921,\"../scatter/attributes\":1187}],947:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../plots/cartesian/axes\"),a=t(\"../../plots/cartesian/align_period\"),o=t(\"../../lib\"),s=t(\"../../constants/numerical\").BADNUM,l=o._;e.exports=function(t,e){var n,c,v,_,b,x,w,k=t._fullLayout,M=i.getFromId(t,e.xaxis||\"x\"),T=i.getFromId(t,e.yaxis||\"y\"),S=[],A=\"violin\"===e.type?\"_numViolins\":\"_numBoxes\";\"h\"===e.orientation?(v=M,_=\"x\",b=T,x=\"y\",w=!!e.yperiodalignment):(v=T,_=\"y\",b=M,x=\"x\",w=!!e.xperiodalignment);var L,C,E,O,D,I,P=function(t,e,n,i){var s,l=e+\"0\"in t;if(e in t||l&&\"d\"+e in t){var c=n.makeCalcdata(t,e);return[a(t,n,e,c),c]}s=l?t[e+\"0\"]:\"name\"in t&&(\"category\"===n.type||r(t.name)&&-1!==[\"linear\",\"log\"].indexOf(n.type)||o.isDateTime(t.name)&&\"date\"===n.type)?t.name:i;for(var u=\"multicategory\"===n.type?n.r2c_just_indices(s):n.d2c(s,0,t[e+\"calendar\"]),h=t._length,d=new Array(h),f=0;f<h;f++)d[f]=u;return[d]}(e,x,b,k[A]),R=P[0],z=P[1],j=o.distinctVals(R),F=j.vals,N=j.minDiff/2,B=\"all\"===(e.boxpoints||e.points)?o.identity:function(t){return t.v<L.lf||t.v>L.uf};if(e._hasPreCompStats){var Y=e[_],H=function(t){return v.d2c((e[t]||[])[n])},V=1/0,U=-1/0;for(n=0;n<e._length;n++){var W=R[n];if(r(W)){if((L={}).pos=L[x]=W,w&&z&&(L.orig_p=z[n]),L.q1=H(\"q1\"),L.med=H(\"median\"),L.q3=H(\"q3\"),C=[],Y&&o.isArrayOrTypedArray(Y[n]))for(c=0;c<Y[n].length;c++)(I=v.d2c(Y[n][c]))!==s&&(u(D={v:I,i:[n,c]},e,[n,c]),C.push(D));if(L.pts=C.sort(h),O=(E=L[_]=C.map(d)).length,L.med!==s&&L.q1!==s&&L.q3!==s&&L.med>=L.q1&&L.q3>=L.med){var q=H(\"lowerfence\");L.lf=q!==s&&q<=L.q1?q:f(L,E,O);var G=H(\"upperfence\");L.uf=G!==s&&G>=L.q3?G:p(L,E,O);var X=H(\"mean\");L.mean=X!==s?X:O?o.mean(E,O):(L.q1+L.q3)/2;var Z=H(\"sd\");L.sd=X!==s&&Z>=0?Z:O?o.stdev(E,O,L.mean):L.q3-L.q1,L.lo=m(L),L.uo=g(L);var J=H(\"notchspan\");J=J!==s&&J>0?J:y(L,O),L.ln=L.med-J,L.un=L.med+J;var K=L.lf,$=L.uf;e.boxpoints&&E.length&&(K=Math.min(K,E[0]),$=Math.max($,E[O-1])),e.notched&&(K=Math.min(K,L.ln),$=Math.max($,L.un)),L.min=K,L.max=$}else{var Q;o.warn([\"Invalid input - make sure that q1 <= median <= q3\",\"q1 = \"+L.q1,\"median = \"+L.med,\"q3 = \"+L.q3].join(\"\\n\")),L.med=Q=L.med!==s?L.med:L.q1!==s?L.q3!==s?(L.q1+L.q3)/2:L.q1:L.q3!==s?L.q3:0,L.q1=L.q3=Q,L.lf=L.uf=Q,L.mean=L.sd=Q,L.ln=L.un=Q,L.min=L.max=Q}V=Math.min(V,L.min),U=Math.max(U,L.max),L.pts2=C.filter(B),S.push(L)}}e._extremes[v._id]=i.findExtremes(v,[V,U],{padded:!0})}else{var tt=v.makeCalcdata(e,_),et=function(t,e){for(var n=t.length,r=new Array(n+1),i=0;i<n;i++)r[i]=t[i]-e;return r[n]=t[n-1]+e,r}(F,N),nt=F.length,rt=function(t){for(var e=new Array(t),n=0;n<t;n++)e[n]=[];return e}(nt);for(n=0;n<e._length;n++)if(r(I=tt[n])){var it=o.findBin(R[n],et);it>=0&&it<nt&&(u(D={v:I,i:n},e,n),rt[it].push(D))}var at=1/0,ot=-1/0,st=e.quartilemethod,lt=\"exclusive\"===st,ct=\"inclusive\"===st;for(n=0;n<nt;n++)if(rt[n].length>0){var ut,ht;(L={}).pos=L[x]=F[n],C=L.pts=rt[n].sort(h),O=(E=L[_]=C.map(d)).length,L.min=E[0],L.max=E[O-1],L.mean=o.mean(E,O),L.sd=o.stdev(E,O,L.mean),L.med=o.interp(E,.5),O%2&&(lt||ct)?(lt?(ut=E.slice(0,O/2),ht=E.slice(O/2+1)):ct&&(ut=E.slice(0,O/2+1),ht=E.slice(O/2)),L.q1=o.interp(ut,.5),L.q3=o.interp(ht,.5)):(L.q1=o.interp(E,.25),L.q3=o.interp(E,.75)),L.lf=f(L,E,O),L.uf=p(L,E,O),L.lo=m(L),L.uo=g(L);var dt=y(L,O);L.ln=L.med-dt,L.un=L.med+dt,at=Math.min(at,L.ln),ot=Math.max(ot,L.un),L.pts2=C.filter(B),S.push(L)}e._extremes[v._id]=i.findExtremes(v,e.notched?tt.concat([at,ot]):tt,{padded:!0})}return function(t,e){if(o.isArrayOrTypedArray(e.selectedpoints))for(var n=0;n<t.length;n++){for(var r=t[n].pts||[],i={},a=0;a<r.length;a++)i[r[a].i]=a;o.tagSelected(r,e,i)}}(S,e),S.length>0?(S[0].t={num:k[A],dPos:N,posLetter:x,valLetter:_,labels:{med:l(t,\"median:\"),min:l(t,\"min:\"),q1:l(t,\"q1:\"),q3:l(t,\"q3:\"),max:l(t,\"max:\"),mean:l(t,\"sd\"===e.boxmean?\"mean \\xb1 \\u03c3:\":\"mean:\"),lf:l(t,\"lower fence:\"),uf:l(t,\"upper fence:\")}},k[A]++,S):[{t:{empty:!0}}]};var c={text:\"tx\",hovertext:\"htx\"};function u(t,e,n){for(var r in c)o.isArrayOrTypedArray(e[r])&&(Array.isArray(n)?o.isArrayOrTypedArray(e[r][n[0]])&&(t[c[r]]=e[r][n[0]][n[1]]):t[c[r]]=e[r][n])}function h(t,e){return t.v-e.v}function d(t){return t.v}function f(t,e,n){return 0===n?t.q1:Math.min(t.q1,e[Math.min(o.findBin(2.5*t.q1-1.5*t.q3,e,!0)+1,n-1)])}function p(t,e,n){return 0===n?t.q3:Math.max(t.q3,e[Math.max(o.findBin(2.5*t.q3-1.5*t.q1,e),0)])}function m(t){return 4*t.q1-3*t.q3}function g(t){return 4*t.q3-3*t.q1}function y(t,e){return 0===e?0:1.57*(t.q3-t.q1)/Math.sqrt(e)}},{\"../../constants/numerical\":753,\"../../lib\":778,\"../../plots/cartesian/align_period\":825,\"../../plots/cartesian/axes\":828,\"fast-isnumeric\":241}],948:[function(t,e,n){\"use strict\";var r=t(\"../../plots/cartesian/axes\"),i=t(\"../../lib\"),a=t(\"../../plots/cartesian/constraints\").getAxisGroup,o=[\"v\",\"h\"];function s(t,e,n,o){var s,l,c,u=e.calcdata,h=e._fullLayout,d=o._id,f=d.charAt(0),p=[],m=0;for(s=0;s<n.length;s++)for(c=u[n[s]],l=0;l<c.length;l++)p.push(o.c2l(c[l].pos,!0)),m+=(c[l].pts2||[]).length;if(p.length){var g=i.distinctVals(p,{unitMinDiff:\"category\"===o.type||\"multicategory\"===o.type}),y=g.minDiff/2;r.minDtick(o,g.minDiff,g.vals[0],!0);var v=h[\"violin\"===t?\"_numViolins\":\"_numBoxes\"],_=\"group\"===h[t+\"mode\"]&&v>1,b=1-h[t+\"gap\"],x=1-h[t+\"groupgap\"];for(s=0;s<n.length;s++){var w,k,M,T,S,A,L=(c=u[n[s]])[0].trace,C=c[0].t,E=L.width,O=L.side;if(E)w=k=T=E/2,M=0;else if(w=y,_){var D=a(h,o._id)+L.orientation,I=Object.keys(((h._alignmentOpts[D]||{})[L.alignmentgroup]||{}).offsetGroups||{}).length,P=I||v;k=w*b*x/P,M=2*w*(((I?L._offsetIndex:C.num)+.5)/P-.5)*b,T=w*b/P}else k=w*b*x,M=0,T=w;C.dPos=w,C.bPos=M,C.bdPos=k,C.wHover=T;var R,z,j,F,N,B,Y=M+k,H=Boolean(E);if(\"positive\"===O?(S=w*(E?1:.5),R=Y,A=R=M):\"negative\"===O?(S=R=M,A=w*(E?1:.5),z=Y):(S=A=w,R=z=Y),(L.boxpoints||L.points)&&m>0){var V=L.pointpos,U=L.jitter,W=L.marker.size/2,q=0;V+U>=0&&((q=Y*(V+U))>S?(H=!0,N=W,j=q):q>R&&(N=W,j=S)),q<=S&&(j=S);var G=0;V-U<=0&&((G=-Y*(V-U))>A?(H=!0,B=W,F=G):G>z&&(B=W,F=A)),G<=A&&(F=A)}else j=S,F=A;var X=new Array(c.length);for(l=0;l<c.length;l++)X[l]=c[l].pos;L._extremes[d]=r.findExtremes(o,X,{padded:H,vpadminus:F,vpadplus:j,vpadLinearized:!0,ppadminus:{x:B,y:N}[f],ppadplus:{x:N,y:B}[f]})}}}e.exports={crossTraceCalc:function(t,e){for(var n=t.calcdata,r=e.xaxis,i=e.yaxis,a=0;a<o.length;a++){for(var l=o[a],c=\"h\"===l?i:r,u=[],h=0;h<n.length;h++){var d=n[h],f=d[0].trace;!0!==f.visible||\"box\"!==f.type&&\"candlestick\"!==f.type||d[0].t.empty||(f.orientation||\"v\")!==l||f.xaxis!==r._id||f.yaxis!==i._id||u.push(h)}s(\"box\",t,u,c)}},setPositionOffset:s}},{\"../../lib\":778,\"../../plots/cartesian/axes\":828,\"../../plots/cartesian/constraints\":835}],949:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../registry\"),a=t(\"../../components/color\"),o=t(\"../scatter/period_defaults\"),s=t(\"../bar/defaults\").handleGroupingDefaults,l=t(\"../../plots/cartesian/axis_autotype\"),c=t(\"./attributes\");function u(t,e,n,a){function o(t){var e=0;return t&&t.length&&(e+=1,r.isArrayOrTypedArray(t[0])&&t[0].length&&(e+=1)),e}function s(e){return r.validate(t[e],c[e])}var u,h=n(\"y\"),d=n(\"x\");if(\"box\"===e.type){var f=n(\"q1\"),p=n(\"median\"),m=n(\"q3\");e._hasPreCompStats=f&&f.length&&p&&p.length&&m&&m.length,u=Math.min(r.minRowLength(f),r.minRowLength(p),r.minRowLength(m))}var g,y,v=o(h),_=o(d),b=v&&r.minRowLength(h),x=_&&r.minRowLength(d),w=a.calendar,k={autotypenumbers:a.autotypenumbers};if(e._hasPreCompStats)switch(String(_)+String(v)){case\"00\":var M=s(\"x0\")||s(\"dx\");g=!s(\"y0\")&&!s(\"dy\")||M?\"v\":\"h\",y=u;break;case\"10\":g=\"v\",y=Math.min(u,x);break;case\"20\":g=\"h\",y=Math.min(u,d.length);break;case\"01\":g=\"h\",y=Math.min(u,b);break;case\"02\":g=\"v\",y=Math.min(u,h.length);break;case\"12\":g=\"v\",y=Math.min(u,x,h.length);break;case\"21\":g=\"h\",y=Math.min(u,d.length,b);break;case\"11\":y=0;break;case\"22\":var T,S=!1;for(T=0;T<d.length;T++)if(\"category\"===l(d[T],w,k)){S=!0;break}if(S)g=\"v\",y=Math.min(u,x,h.length);else{for(T=0;T<h.length;T++)if(\"category\"===l(h[T],w,k)){S=!0;break}S?(g=\"h\",y=Math.min(u,d.length,b)):(g=\"v\",y=Math.min(u,x,h.length))}}else v>0?(g=\"v\",y=_>0?Math.min(x,b):Math.min(b)):_>0?(g=\"h\",y=Math.min(x)):y=0;if(y){e._length=y;var A=n(\"orientation\",g);e._hasPreCompStats?\"v\"===A&&0===_?(n(\"x0\",0),n(\"dx\",1)):\"h\"===A&&0===v&&(n(\"y0\",0),n(\"dy\",1)):\"v\"===A&&0===_?n(\"x0\"):\"h\"===A&&0===v&&n(\"y0\"),i.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\"],a)}else e.visible=!1}function h(t,e,n,i){var a=i.prefix,o=r.coerce2(t,e,c,\"marker.outliercolor\"),s=n(\"marker.line.outliercolor\"),l=\"outliers\";e._hasPreCompStats?l=\"all\":(o||s)&&(l=\"suspectedoutliers\");var u=n(a+\"points\",l);u?(n(\"jitter\",\"all\"===u?.3:0),n(\"pointpos\",\"all\"===u?-1.5:0),n(\"marker.symbol\"),n(\"marker.opacity\"),n(\"marker.size\"),n(\"marker.color\",e.line.color),n(\"marker.line.color\"),n(\"marker.line.width\"),\"suspectedoutliers\"===u&&(n(\"marker.line.outliercolor\",e.marker.color),n(\"marker.line.outlierwidth\")),n(\"selected.marker.color\"),n(\"unselected.marker.color\"),n(\"selected.marker.size\"),n(\"unselected.marker.size\"),n(\"text\"),n(\"hovertext\")):delete e.marker;var h=n(\"hoveron\");\"all\"!==h&&-1===h.indexOf(\"points\")||n(\"hovertemplate\"),r.coerceSelectionMarkerOpacity(e,n)}e.exports={supplyDefaults:function(t,e,n,i){function s(n,i){return r.coerce(t,e,c,n,i)}if(u(t,e,s,i),!1!==e.visible){o(t,e,i,s);var l=e._hasPreCompStats;l&&(s(\"lowerfence\"),s(\"upperfence\")),s(\"line.color\",(t.marker||{}).color||n),s(\"line.width\"),s(\"fillcolor\",a.addOpacity(e.line.color,.5));var d=!1;if(l){var f=s(\"mean\"),p=s(\"sd\");f&&f.length&&(d=!0,p&&p.length&&(d=\"sd\"))}s(\"boxmean\",d),s(\"whiskerwidth\"),s(\"width\"),s(\"quartilemethod\");var m=!1;if(l){var g=s(\"notchspan\");g&&g.length&&(m=!0)}else r.validate(t.notchwidth,c.notchwidth)&&(m=!0);s(\"notched\",m)&&s(\"notchwidth\"),h(t,e,s,{prefix:\"box\"})}},crossTraceDefaults:function(t,e){var n;function i(t){return r.coerce(n._input,n,c,t)}for(var a=0;a<t.length;a++){var o=(n=t[a]).type;\"box\"!==o&&\"violin\"!==o||\"group\"===e[o+\"mode\"]&&s(n._input,n,e,i)}},handleSampleDefaults:u,handlePointsDefaults:h}},{\"../../components/color\":643,\"../../lib\":778,\"../../plots/cartesian/axis_autotype\":829,\"../../registry\":911,\"../bar/defaults\":925,\"../scatter/period_defaults\":1207,\"./attributes\":946}],950:[function(t,e,n){\"use strict\";e.exports=function(t,e){return e.hoverOnBox&&(t.hoverOnBox=e.hoverOnBox),\"xVal\"in e&&(t.x=e.xVal),\"yVal\"in e&&(t.y=e.yVal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t}},{}],951:[function(t,e,n){\"use strict\";var r=t(\"../../plots/cartesian/axes\"),i=t(\"../../lib\"),a=t(\"../../components/fx\"),o=t(\"../../components/color\"),s=i.fillText;function l(t,e,n,s){var l,c,u,h,d,f,p,m,g,y,v,_,b,x,w=t.cd,k=t.xa,M=t.ya,T=w[0].trace,S=w[0].t,A=\"violin\"===T.type,L=[],C=S.bdPos,E=S.wHover,O=function(t){return u.c2l(t.pos)+S.bPos-u.c2l(f)};A&&\"both\"!==T.side?(\"positive\"===T.side&&(g=function(t){var e=O(t);return a.inbox(e,e+E,y)},_=C,b=0),\"negative\"===T.side&&(g=function(t){var e=O(t);return a.inbox(e-E,e,y)},_=0,b=C)):(g=function(t){var e=O(t);return a.inbox(e-E,e+E,y)},_=b=C),x=A?function(t){return a.inbox(t.span[0]-d,t.span[1]-d,y)}:function(t){return a.inbox(t.min-d,t.max-d,y)},\"h\"===T.orientation?(d=e,f=n,p=x,m=g,l=\"y\",u=M,c=\"x\",h=k):(d=n,f=e,p=g,m=x,l=\"x\",u=k,c=\"y\",h=M);var D=Math.min(1,C/Math.abs(u.r2c(u.range[1])-u.r2c(u.range[0])));function I(t){return(p(t)+m(t))/2}y=t.maxHoverDistance-D,v=t.maxSpikeDistance-D;var P=a.getDistanceFunction(s,p,m,I);if(a.getClosest(w,P,t),!1===t.index)return[];var R=w[t.index],z=T.line.color,j=(T.marker||{}).color;t.color=o.opacity(z)&&T.line.width?z:o.opacity(j)&&T.boxpoints?j:T.fillcolor,t[l+\"0\"]=u.c2p(R.pos+S.bPos-b,!0),t[l+\"1\"]=u.c2p(R.pos+S.bPos+_,!0),t[l+\"LabelVal\"]=void 0!==R.orig_p?R.orig_p:R.pos;var F=l+\"Spike\";t.spikeDistance=I(R)*v/y,t[F]=u.c2p(R.pos,!0);var N={},B=[\"med\",\"q1\",\"q3\",\"min\",\"max\"];(T.boxmean||(T.meanline||{}).visible)&&B.push(\"mean\"),(T.boxpoints||T.points)&&B.push(\"lf\",\"uf\");for(var Y=0;Y<B.length;Y++){var H=B[Y];if(H in R&&!(R[H]in N)){N[R[H]]=!0;var V=R[H],U=h.c2p(V,!0),W=i.extendFlat({},t);W.attr=H,W[c+\"0\"]=W[c+\"1\"]=U,W[c+\"LabelVal\"]=V,W[c+\"Label\"]=(S.labels?S.labels[H]+\" \":\"\")+r.hoverLabelText(h,V),W.hoverOnBox=!0,\"mean\"===H&&\"sd\"in R&&\"sd\"===T.boxmean&&(W[c+\"err\"]=R.sd),t.name=\"\",t.spikeDistance=void 0,t[F]=void 0,W.hovertemplate=!1,L.push(W)}}return L}function c(t,e,n){for(var r,o,l,c=t.cd,u=t.xa,h=t.ya,d=c[0].trace,f=u.c2p(e),p=h.c2p(n),m=a.quadrature((function(t){var e=Math.max(3,t.mrc||0);return Math.max(Math.abs(u.c2p(t.x)-f)-e,1-3/e)}),(function(t){var e=Math.max(3,t.mrc||0);return Math.max(Math.abs(h.c2p(t.y)-p)-e,1-3/e)})),g=!1,y=0;y<c.length;y++){o=c[y];for(var v=0;v<(o.pts||[]).length;v++){var _=m(l=o.pts[v]);_<=t.distance&&(t.distance=_,g=[y,v])}}if(!g)return!1;var b=u.c2p((l=(o=c[g[0]]).pts[g[1]]).x,!0),x=h.c2p(l.y,!0),w=l.mrc||1;r=i.extendFlat({},t,{index:l.i,color:(d.marker||{}).color,name:d.name,x0:b-w,x1:b+w,y0:x-w,y1:x+w,spikeDistance:t.distance,hovertemplate:d.hovertemplate});var k,M=o.orig_p,T=void 0!==M?M:o.pos;return\"h\"===d.orientation?(k=h,r.xLabelVal=l.x,r.yLabelVal=T):(k=u,r.xLabelVal=T,r.yLabelVal=l.y),r[k._id.charAt(0)+\"Spike\"]=k.c2p(o.pos,!0),s(l,d,r),r}e.exports={hoverPoints:function(t,e,n,r){var i,a=t.cd[0].trace.hoveron,o=[];return-1!==a.indexOf(\"boxes\")&&(o=o.concat(l(t,e,n,r))),-1!==a.indexOf(\"points\")&&(i=c(t,e,n)),\"closest\"===r?i?[i]:o:i?(o.push(i),o):o},hoverOnBoxes:l,hoverOnPoints:c}},{\"../../components/color\":643,\"../../components/fx\":683,\"../../lib\":778,\"../../plots/cartesian/axes\":828}],952:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),layoutAttributes:t(\"./layout_attributes\"),supplyDefaults:t(\"./defaults\").supplyDefaults,crossTraceDefaults:t(\"./defaults\").crossTraceDefaults,supplyLayoutDefaults:t(\"./layout_defaults\").supplyLayoutDefaults,calc:t(\"./calc\"),crossTraceCalc:t(\"./cross_trace_calc\").crossTraceCalc,plot:t(\"./plot\").plot,style:t(\"./style\").style,styleOnSelect:t(\"./style\").styleOnSelect,hoverPoints:t(\"./hover\").hoverPoints,eventData:t(\"./event_data\"),selectPoints:t(\"./select\"),moduleType:\"trace\",name:\"box\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"symbols\",\"oriented\",\"box-violin\",\"showLegend\",\"boxLayout\",\"zoomScale\"],meta:{}}},{\"../../plots/cartesian\":841,\"./attributes\":946,\"./calc\":947,\"./cross_trace_calc\":948,\"./defaults\":949,\"./event_data\":950,\"./hover\":951,\"./layout_attributes\":953,\"./layout_defaults\":954,\"./plot\":955,\"./select\":956,\"./style\":957}],953:[function(t,e,n){\"use strict\";e.exports={boxmode:{valType:\"enumerated\",values:[\"group\",\"overlay\"],dflt:\"overlay\",editType:\"calc\"},boxgap:{valType:\"number\",min:0,max:1,dflt:.3,editType:\"calc\"},boxgroupgap:{valType:\"number\",min:0,max:1,dflt:.3,editType:\"calc\"}}},{}],954:[function(t,e,n){\"use strict\";var r=t(\"../../registry\"),i=t(\"../../lib\"),a=t(\"./layout_attributes\");function o(t,e,n,i,a){for(var o=a+\"Layout\",s=!1,l=0;l<n.length;l++)if(r.traceIs(n[l],o)){s=!0;break}s&&(i(a+\"mode\"),i(a+\"gap\"),i(a+\"groupgap\"))}e.exports={supplyLayoutDefaults:function(t,e,n){o(0,0,n,(function(n,r){return i.coerce(t,e,a,n,r)}),\"box\")},_supply:o}},{\"../../lib\":778,\"../../registry\":911,\"./layout_attributes\":953}],955:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../lib\"),a=t(\"../../components/drawing\");function o(t,e,n,a){var o,s,l=\"h\"===n.orientation,c=e.val,u=e.pos,h=!!u.rangebreaks,d=a.bPos,f=a.wdPos||0,p=a.bPosPxOffset||0,m=n.whiskerwidth||0,g=n.notched||!1,y=g?1-2*n.notchwidth:1;Array.isArray(a.bdPos)?(o=a.bdPos[0],s=a.bdPos[1]):(o=a.bdPos,s=a.bdPos);var v=t.selectAll(\"path.box\").data(\"violin\"!==n.type||n.box.visible?i.identity:[]);v.enter().append(\"path\").style(\"vector-effect\",\"non-scaling-stroke\").attr(\"class\",\"box\"),v.exit().remove(),v.each((function(t){if(t.empty)return\"M0,0Z\";var e=u.c2l(t.pos+d,!0),a=u.l2p(e-o)+p,v=u.l2p(e+s)+p,_=h?(a+v)/2:u.l2p(e)+p,b=n.whiskerwidth,x=h?a*b+(1-b)*_:u.l2p(e-f)+p,w=h?v*b+(1-b)*_:u.l2p(e+f)+p,k=u.l2p(e-o*y)+p,M=u.l2p(e+s*y)+p,T=c.c2p(t.q1,!0),S=c.c2p(t.q3,!0),A=i.constrain(c.c2p(t.med,!0),Math.min(T,S)+1,Math.max(T,S)-1),L=void 0===t.lf||!1===n.boxpoints,C=c.c2p(L?t.min:t.lf,!0),E=c.c2p(L?t.max:t.uf,!0),O=c.c2p(t.ln,!0),D=c.c2p(t.un,!0);l?r.select(this).attr(\"d\",\"M\"+A+\",\"+k+\"V\"+M+\"M\"+T+\",\"+a+\"V\"+v+(g?\"H\"+O+\"L\"+A+\",\"+M+\"L\"+D+\",\"+v:\"\")+\"H\"+S+\"V\"+a+(g?\"H\"+D+\"L\"+A+\",\"+k+\"L\"+O+\",\"+a:\"\")+\"ZM\"+T+\",\"+_+\"H\"+C+\"M\"+S+\",\"+_+\"H\"+E+(0===m?\"\":\"M\"+C+\",\"+x+\"V\"+w+\"M\"+E+\",\"+x+\"V\"+w)):r.select(this).attr(\"d\",\"M\"+k+\",\"+A+\"H\"+M+\"M\"+a+\",\"+T+\"H\"+v+(g?\"V\"+O+\"L\"+M+\",\"+A+\"L\"+v+\",\"+D:\"\")+\"V\"+S+\"H\"+a+(g?\"V\"+D+\"L\"+k+\",\"+A+\"L\"+a+\",\"+O:\"\")+\"ZM\"+_+\",\"+T+\"V\"+C+\"M\"+_+\",\"+S+\"V\"+E+(0===m?\"\":\"M\"+x+\",\"+C+\"H\"+w+\"M\"+x+\",\"+E+\"H\"+w))}))}function s(t,e,n,r){var o=e.x,s=e.y,l=r.bdPos,c=r.bPos,u=n.boxpoints||n.points;i.seedPseudoRandom();var h=t.selectAll(\"g.points\").data(u?function(t){return t.forEach((function(t){t.t=r,t.trace=n})),t}:[]);h.enter().append(\"g\").attr(\"class\",\"points\"),h.exit().remove();var d=h.selectAll(\"path\").data((function(t){var e,r,a=t.pts2,o=Math.max((t.max-t.min)/10,t.q3-t.q1),s=1e-9*o,h=.01*o,d=[],f=0;if(n.jitter){if(0===o)for(f=1,d=new Array(a.length),e=0;e<a.length;e++)d[e]=1;else for(e=0;e<a.length;e++){var p=Math.max(0,e-5),m=a[p].v,g=Math.min(a.length-1,e+5),y=a[g].v;\"all\"!==u&&(a[e].v<t.lf?y=Math.min(y,t.lf):m=Math.max(m,t.uf));var v=Math.sqrt(h*(g-p)/(y-m+s))||0;v=i.constrain(Math.abs(v),0,1),d.push(v),f=Math.max(v,f)}r=2*n.jitter/(f||1)}for(e=0;e<a.length;e++){var _=a[e],b=_.v,x=n.jitter?r*d[e]*(i.pseudoRandom()-.5):0,w=t.pos+c+l*(n.pointpos+x);\"h\"===n.orientation?(_.y=w,_.x=b):(_.x=w,_.y=b),\"suspectedoutliers\"===u&&b<t.uo&&b>t.lo&&(_.so=!0)}return a}));d.enter().append(\"path\").classed(\"point\",!0),d.exit().remove(),d.call(a.translatePoints,o,s)}function l(t,e,n,a){var o,s,l=e.val,c=e.pos,u=!!c.rangebreaks,h=a.bPos,d=a.bPosPxOffset||0,f=n.boxmean||(n.meanline||{}).visible;Array.isArray(a.bdPos)?(o=a.bdPos[0],s=a.bdPos[1]):(o=a.bdPos,s=a.bdPos);var p=t.selectAll(\"path.mean\").data(\"box\"===n.type&&n.boxmean||\"violin\"===n.type&&n.box.visible&&n.meanline.visible?i.identity:[]);p.enter().append(\"path\").attr(\"class\",\"mean\").style({fill:\"none\",\"vector-effect\":\"non-scaling-stroke\"}),p.exit().remove(),p.each((function(t){var e=c.c2l(t.pos+h,!0),i=c.l2p(e-o)+d,a=c.l2p(e+s)+d,p=u?(i+a)/2:c.l2p(e)+d,m=l.c2p(t.mean,!0),g=l.c2p(t.mean-t.sd,!0),y=l.c2p(t.mean+t.sd,!0);\"h\"===n.orientation?r.select(this).attr(\"d\",\"M\"+m+\",\"+i+\"V\"+a+(\"sd\"===f?\"m0,0L\"+g+\",\"+p+\"L\"+m+\",\"+i+\"L\"+y+\",\"+p+\"Z\":\"\")):r.select(this).attr(\"d\",\"M\"+i+\",\"+m+\"H\"+a+(\"sd\"===f?\"m0,0L\"+p+\",\"+g+\"L\"+i+\",\"+m+\"L\"+p+\",\"+y+\"Z\":\"\"))}))}e.exports={plot:function(t,e,n,a){var c=e.xaxis,u=e.yaxis;i.makeTraceGroups(a,n,\"trace boxes\").each((function(t){var e,n,i=r.select(this),a=t[0],h=a.t,d=a.trace;h.wdPos=h.bdPos*d.whiskerwidth,!0!==d.visible||h.empty?i.remove():(\"h\"===d.orientation?(e=u,n=c):(e=c,n=u),o(i,{pos:e,val:n},d,h),s(i,{x:c,y:u},d,h),l(i,{pos:e,val:n},d,h))}))},plotBoxAndWhiskers:o,plotPoints:s,plotBoxMean:l}},{\"../../components/drawing\":665,\"../../lib\":778,d3:169}],956:[function(t,e,n){\"use strict\";e.exports=function(t,e){var n,r,i=t.cd,a=t.xaxis,o=t.yaxis,s=[];if(!1===e)for(n=0;n<i.length;n++)for(r=0;r<(i[n].pts||[]).length;r++)i[n].pts[r].selected=0;else for(n=0;n<i.length;n++)for(r=0;r<(i[n].pts||[]).length;r++){var l=i[n].pts[r],c=a.c2p(l.x),u=o.c2p(l.y);e.contains([c,u],null,l.i,t)?(s.push({pointNumber:l.i,x:a.c2d(l.x),y:o.c2d(l.y)}),l.selected=1):l.selected=0}return s}},{}],957:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../components/color\"),a=t(\"../../components/drawing\");e.exports={style:function(t,e,n){var o=n||r.select(t).selectAll(\"g.trace.boxes\");o.style(\"opacity\",(function(t){return t[0].trace.opacity})),o.each((function(e){var n=r.select(this),o=e[0].trace,s=o.line.width;function l(t,e,n,r){t.style(\"stroke-width\",e+\"px\").call(i.stroke,n).call(i.fill,r)}var c=n.selectAll(\"path.box\");if(\"candlestick\"===o.type)c.each((function(t){if(!t.empty){var e=r.select(this),n=o[t.dir];l(e,n.line.width,n.line.color,n.fillcolor),e.style(\"opacity\",o.selectedpoints&&!t.selected?.3:1)}}));else{l(c,s,o.line.color,o.fillcolor),n.selectAll(\"path.mean\").style({\"stroke-width\":s,\"stroke-dasharray\":2*s+\"px,\"+s+\"px\"}).call(i.stroke,o.line.color);var u=n.selectAll(\"path.point\");a.pointStyle(u,o,t)}}))},styleOnSelect:function(t,e,n){var r=e[0].trace,i=n.selectAll(\"path.point\");r.selectedpoints?a.selectedPointStyle(i,r):a.pointStyle(i,r,t)}}},{\"../../components/color\":643,\"../../components/drawing\":665,d3:169}],958:[function(t,e,n){\"use strict\";var r=t(\"../../lib\").extendFlat,i=t(\"../ohlc/attributes\"),a=t(\"../box/attributes\");function o(t){return{line:{color:r({},a.line.color,{dflt:t}),width:a.line.width,editType:\"style\"},fillcolor:a.fillcolor,editType:\"style\"}}e.exports={xperiod:i.xperiod,xperiod0:i.xperiod0,xperiodalignment:i.xperiodalignment,x:i.x,open:i.open,high:i.high,low:i.low,close:i.close,line:{width:r({},a.line.width,{}),editType:\"style\"},increasing:o(i.increasing.line.color.dflt),decreasing:o(i.decreasing.line.color.dflt),text:i.text,hovertext:i.hovertext,whiskerwidth:r({},a.whiskerwidth,{dflt:0}),hoverlabel:i.hoverlabel}},{\"../../lib\":778,\"../box/attributes\":946,\"../ohlc/attributes\":1133}],959:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../plots/cartesian/axes\"),a=t(\"../../plots/cartesian/align_period\"),o=t(\"../ohlc/calc\").calcCommon;function s(t,e,n,r){return{min:n,q1:Math.min(t,r),med:r,q3:Math.max(t,r),max:e}}e.exports=function(t,e){var n=t._fullLayout,l=i.getFromId(t,e.xaxis),c=i.getFromId(t,e.yaxis),u=l.makeCalcdata(e,\"x\"),h=a(e,l,\"x\",u),d=o(t,e,u,h,c,s);return d.length?(r.extendFlat(d[0].t,{num:n._numBoxes,dPos:r.distinctVals(h).minDiff/2,posLetter:\"x\",valLetter:\"y\"}),n._numBoxes++,d):[{t:{empty:!0}}]}},{\"../../lib\":778,\"../../plots/cartesian/align_period\":825,\"../../plots/cartesian/axes\":828,\"../ohlc/calc\":1134}],960:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../components/color\"),a=t(\"../ohlc/ohlc_defaults\"),o=t(\"../scatter/period_defaults\"),s=t(\"./attributes\");function l(t,e,n,r){var a=n(r+\".line.color\");n(r+\".line.width\",e.line.width),n(r+\".fillcolor\",i.addOpacity(a,.5))}e.exports=function(t,e,n,i){function c(n,i){return r.coerce(t,e,s,n,i)}a(t,e,c,i)?(o(t,e,i,c,{x:!0}),c(\"line.width\"),l(0,e,c,\"increasing\"),l(0,e,c,\"decreasing\"),c(\"text\"),c(\"hovertext\"),c(\"whiskerwidth\"),i._requestRangeslider[e.xaxis]=!0):e.visible=!1}},{\"../../components/color\":643,\"../../lib\":778,\"../ohlc/ohlc_defaults\":1138,\"../scatter/period_defaults\":1207,\"./attributes\":958}],961:[function(t,e,n){\"use strict\";e.exports={moduleType:\"trace\",name:\"candlestick\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"showLegend\",\"candlestick\",\"boxLayout\"],meta:{},attributes:t(\"./attributes\"),layoutAttributes:t(\"../box/layout_attributes\"),supplyLayoutDefaults:t(\"../box/layout_defaults\").supplyLayoutDefaults,crossTraceCalc:t(\"../box/cross_trace_calc\").crossTraceCalc,supplyDefaults:t(\"./defaults\"),calc:t(\"./calc\"),plot:t(\"../box/plot\").plot,layerName:\"boxlayer\",style:t(\"../box/style\").style,hoverPoints:t(\"../ohlc/hover\").hoverPoints,selectPoints:t(\"../ohlc/select\")}},{\"../../plots/cartesian\":841,\"../box/cross_trace_calc\":948,\"../box/layout_attributes\":953,\"../box/layout_defaults\":954,\"../box/plot\":955,\"../box/style\":957,\"../ohlc/hover\":1136,\"../ohlc/select\":1140,\"./attributes\":958,\"./calc\":959,\"./defaults\":960}],962:[function(t,e,n){\"use strict\";var r=t(\"./axis_defaults\"),i=t(\"../../plot_api/plot_template\");e.exports=function(t,e,n,a,o){a(\"a\")||(a(\"da\"),a(\"a0\")),a(\"b\")||(a(\"db\"),a(\"b0\")),function(t,e,n,a){[\"aaxis\",\"baxis\"].forEach((function(o){var s=o.charAt(0),l=t[o]||{},c=i.newContainer(e,o);r(l,c,{tickfont:\"x\",id:s+\"axis\",letter:s,font:e.font,name:o,data:t[s],calendar:e.calendar,dfltColor:a,bgColor:n.paper_bgcolor,autotypenumbersDflt:n.autotypenumbers,fullLayout:n}),c._categories=c._categories||[],t[o]||\"-\"===l.type||(t[o]={type:l.type})}))}(t,e,n,o)}},{\"../../plot_api/plot_template\":817,\"./axis_defaults\":967}],963:[function(t,e,n){\"use strict\";var r=t(\"../../lib\").isArrayOrTypedArray;e.exports=function(t){return function t(e,n){if(!r(e)||n>=10)return null;for(var i=1/0,a=-1/0,o=e.length,s=0;s<o;s++){var l=e[s];if(r(l)){var c=t(l,n+1);c&&(i=Math.min(c[0],i),a=Math.max(c[1],a))}else i=Math.min(l,i),a=Math.max(l,a)}return[i,a]}(t,0)}},{\"../../lib\":778}],964:[function(t,e,n){\"use strict\";var r=t(\"../../plots/font_attributes\"),i=t(\"./axis_attributes\"),a=t(\"../../components/color/attributes\"),o=r({editType:\"calc\"});o.family.dflt='\"Open Sans\", verdana, arial, sans-serif',o.size.dflt=12,o.color.dflt=a.defaultLine,e.exports={carpet:{valType:\"string\",editType:\"calc\"},x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},a:{valType:\"data_array\",editType:\"calc\"},a0:{valType:\"number\",dflt:0,editType:\"calc\"},da:{valType:\"number\",dflt:1,editType:\"calc\"},b:{valType:\"data_array\",editType:\"calc\"},b0:{valType:\"number\",dflt:0,editType:\"calc\"},db:{valType:\"number\",dflt:1,editType:\"calc\"},cheaterslope:{valType:\"number\",dflt:1,editType:\"calc\"},aaxis:i,baxis:i,font:o,color:{valType:\"color\",dflt:a.defaultLine,editType:\"plot\"},transforms:void 0}},{\"../../components/color/attributes\":642,\"../../plots/font_attributes\":856,\"./axis_attributes\":966}],965:[function(t,e,n){\"use strict\";var r=t(\"../../lib\").isArrayOrTypedArray;e.exports=function(t,e,n,i){var a,o,s,l,c,u,h,d,f,p,m,g,y,v=r(n)?\"a\":\"b\",_=(\"a\"===v?t.aaxis:t.baxis).smoothing,b=\"a\"===v?t.a2i:t.b2j,x=\"a\"===v?n:i,w=\"a\"===v?i:n,k=\"a\"===v?e.a.length:e.b.length,M=\"a\"===v?e.b.length:e.a.length,T=Math.floor(\"a\"===v?t.b2j(w):t.a2i(w)),S=\"a\"===v?function(e){return t.evalxy([],e,T)}:function(e){return t.evalxy([],T,e)};_&&(s=Math.max(0,Math.min(M-2,T)),l=T-s,o=\"a\"===v?function(e,n){return t.dxydi([],e,s,n,l)}:function(e,n){return t.dxydj([],s,e,l,n)});var A=b(x[0]),L=b(x[1]),C=A<L?1:-1,E=1e-8*(L-A),O=C>0?Math.floor:Math.ceil,D=C>0?Math.ceil:Math.floor,I=C>0?Math.min:Math.max,P=C>0?Math.max:Math.min,R=O(A+E),z=D(L-E),j=[[h=S(A)]];for(a=R;a*C<z*C;a+=C)c=[],m=P(A,a),y=(g=I(L,a+C))-m,u=Math.max(0,Math.min(k-2,Math.floor(.5*(m+g)))),d=S(g),_&&(f=o(u,m-u),p=o(u,g-u),c.push([h[0]+f[0]/3*y,h[1]+f[1]/3*y]),c.push([d[0]-p[0]/3*y,d[1]-p[1]/3*y])),c.push(d),j.push(c),h=d;return j}},{\"../../lib\":778}],966:[function(t,e,n){\"use strict\";var r=t(\"../../plots/font_attributes\"),i=t(\"../../components/color/attributes\"),a=t(\"../../plots/cartesian/layout_attributes\"),o=t(\"../../plot_api/edit_types\").overrideAll;t(\"../../constants/docs\"),t(\"../../constants/docs\"),e.exports={color:{valType:\"color\",editType:\"calc\"},smoothing:{valType:\"number\",dflt:1,min:0,max:1.3,editType:\"calc\"},title:{text:{valType:\"string\",dflt:\"\",editType:\"calc\"},font:r({editType:\"calc\"}),offset:{valType:\"number\",dflt:10,editType:\"calc\"},editType:\"calc\"},type:{valType:\"enumerated\",values:[\"-\",\"linear\",\"date\",\"category\"],dflt:\"-\",editType:\"calc\"},autotypenumbers:a.autotypenumbers,autorange:{valType:\"enumerated\",values:[!0,!1,\"reversed\"],dflt:!0,editType:\"calc\"},rangemode:{valType:\"enumerated\",values:[\"normal\",\"tozero\",\"nonnegative\"],dflt:\"normal\",editType:\"calc\"},range:{valType:\"info_array\",editType:\"calc\",items:[{valType:\"any\",editType:\"calc\"},{valType:\"any\",editType:\"calc\"}]},fixedrange:{valType:\"boolean\",dflt:!1,editType:\"calc\"},cheatertype:{valType:\"enumerated\",values:[\"index\",\"value\"],dflt:\"value\",editType:\"calc\"},tickmode:{valType:\"enumerated\",values:[\"linear\",\"array\"],dflt:\"array\",editType:\"calc\"},nticks:{valType:\"integer\",min:0,dflt:0,editType:\"calc\"},tickvals:{valType:\"data_array\",editType:\"calc\"},ticktext:{valType:\"data_array\",editType:\"calc\"},showticklabels:{valType:\"enumerated\",values:[\"start\",\"end\",\"both\",\"none\"],dflt:\"start\",editType:\"calc\"},tickfont:r({editType:\"calc\"}),tickangle:{valType:\"angle\",dflt:\"auto\",editType:\"calc\"},tickprefix:{valType:\"string\",dflt:\"\",editType:\"calc\"},showtickprefix:{valType:\"enumerated\",values:[\"all\",\"first\",\"last\",\"none\"],dflt:\"all\",editType:\"calc\"},ticksuffix:{valType:\"string\",dflt:\"\",editType:\"calc\"},showticksuffix:{valType:\"enumerated\",values:[\"all\",\"first\",\"last\",\"none\"],dflt:\"all\",editType:\"calc\"},showexponent:{valType:\"enumerated\",values:[\"all\",\"first\",\"last\",\"none\"],dflt:\"all\",editType:\"calc\"},exponentformat:{valType:\"enumerated\",values:[\"none\",\"e\",\"E\",\"power\",\"SI\",\"B\"],dflt:\"B\",editType:\"calc\"},minexponent:{valType:\"number\",dflt:3,min:0,editType:\"calc\"},separatethousands:{valType:\"boolean\",dflt:!1,editType:\"calc\"},tickformat:{valType:\"string\",dflt:\"\",editType:\"calc\"},tickformatstops:o(a.tickformatstops,\"calc\",\"from-root\"),categoryorder:{valType:\"enumerated\",values:[\"trace\",\"category ascending\",\"category descending\",\"array\"],dflt:\"trace\",editType:\"calc\"},categoryarray:{valType:\"data_array\",editType:\"calc\"},labelpadding:{valType:\"integer\",dflt:10,editType:\"calc\"},labelprefix:{valType:\"string\",editType:\"calc\"},labelsuffix:{valType:\"string\",dflt:\"\",editType:\"calc\"},showline:{valType:\"boolean\",dflt:!1,editType:\"calc\"},linecolor:{valType:\"color\",dflt:i.defaultLine,editType:\"calc\"},linewidth:{valType:\"number\",min:0,dflt:1,editType:\"calc\"},gridcolor:{valType:\"color\",editType:\"calc\"},gridwidth:{valType:\"number\",min:0,dflt:1,editType:\"calc\"},showgrid:{valType:\"boolean\",dflt:!0,editType:\"calc\"},minorgridcount:{valType:\"integer\",min:0,dflt:0,editType:\"calc\"},minorgridwidth:{valType:\"number\",min:0,dflt:1,editType:\"calc\"},minorgridcolor:{valType:\"color\",dflt:i.lightLine,editType:\"calc\"},startline:{valType:\"boolean\",editType:\"calc\"},startlinecolor:{valType:\"color\",editType:\"calc\"},startlinewidth:{valType:\"number\",dflt:1,editType:\"calc\"},endline:{valType:\"boolean\",editType:\"calc\"},endlinewidth:{valType:\"number\",dflt:1,editType:\"calc\"},endlinecolor:{valType:\"color\",editType:\"calc\"},tick0:{valType:\"number\",min:0,dflt:0,editType:\"calc\"},dtick:{valType:\"number\",min:0,dflt:1,editType:\"calc\"},arraytick0:{valType:\"integer\",min:0,dflt:0,editType:\"calc\"},arraydtick:{valType:\"integer\",min:1,dflt:1,editType:\"calc\"},_deprecated:{title:{valType:\"string\",editType:\"calc\"},titlefont:r({editType:\"calc\"}),titleoffset:{valType:\"number\",dflt:10,editType:\"calc\"}},editType:\"calc\"}},{\"../../components/color/attributes\":642,\"../../constants/docs\":748,\"../../plot_api/edit_types\":810,\"../../plots/cartesian/layout_attributes\":842,\"../../plots/font_attributes\":856}],967:[function(t,e,n){\"use strict\";var r=t(\"./attributes\"),i=t(\"../../components/color\").addOpacity,a=t(\"../../registry\"),o=t(\"../../lib\"),s=t(\"../../plots/cartesian/tick_value_defaults\"),l=t(\"../../plots/cartesian/tick_label_defaults\"),c=t(\"../../plots/cartesian/category_order_defaults\"),u=t(\"../../plots/cartesian/set_convert\"),h=t(\"../../plots/cartesian/axis_autotype\");e.exports=function(t,e,n){var d=n.letter,f=n.font||{},p=r[d+\"axis\"];function m(n,r){return o.coerce(t,e,p,n,r)}function g(n,r){return o.coerce2(t,e,p,n,r)}n.name&&(e._name=n.name,e._id=n.name),m(\"autotypenumbers\",n.autotypenumbersDflt);var y=m(\"type\");\"-\"===y&&(n.data&&function(t,e){if(\"-\"===t.type){var n=t._id.charAt(0);t.type=h(e,t[n+\"calendar\"],{autotypenumbers:t.autotypenumbers})}}(e,n.data),\"-\"===e.type?e.type=\"linear\":y=t.type=e.type),m(\"smoothing\"),m(\"cheatertype\"),m(\"showticklabels\"),m(\"labelprefix\",d+\" = \"),m(\"labelsuffix\"),m(\"showtickprefix\"),m(\"showticksuffix\"),m(\"separatethousands\"),m(\"tickformat\"),m(\"exponentformat\"),m(\"minexponent\"),m(\"showexponent\"),m(\"categoryorder\"),m(\"tickmode\"),m(\"tickvals\"),m(\"ticktext\"),m(\"tick0\"),m(\"dtick\"),\"array\"===e.tickmode&&(m(\"arraytick0\"),m(\"arraydtick\")),m(\"labelpadding\"),e._hovertitle=d,\"date\"===y&&a.getComponentMethod(\"calendars\",\"handleDefaults\")(t,e,\"calendar\",n.calendar),u(e,n.fullLayout),e.c2p=o.identity;var v=m(\"color\",n.dfltColor),_=v===t.color?v:f.color;m(\"title.text\")&&(o.coerceFont(m,\"title.font\",{family:f.family,size:Math.round(1.2*f.size),color:_}),m(\"title.offset\")),m(\"tickangle\"),m(\"autorange\",!e.isValidRange(t.range))&&m(\"rangemode\"),m(\"range\"),e.cleanRange(),m(\"fixedrange\"),s(t,e,m,y),l(t,e,m,y,n),c(t,e,m,{data:n.data,dataAttr:d});var b=g(\"gridcolor\",i(v,.3)),x=g(\"gridwidth\"),w=m(\"showgrid\");w||(delete e.gridcolor,delete e.gridwidth);var k=g(\"startlinecolor\",v),M=g(\"startlinewidth\",x);m(\"startline\",e.showgrid||!!k||!!M)||(delete e.startlinecolor,delete e.startlinewidth);var T=g(\"endlinecolor\",v),S=g(\"endlinewidth\",x);return m(\"endline\",e.showgrid||!!T||!!S)||(delete e.endlinecolor,delete e.endlinewidth),w?(m(\"minorgridcount\"),m(\"minorgridwidth\",x),m(\"minorgridcolor\",i(b,.06)),e.minorgridcount||(delete e.minorgridwidth,delete e.minorgridcolor)):(delete e.gridcolor,delete e.gridWidth),\"none\"===e.showticklabels&&(delete e.tickfont,delete e.tickangle,delete e.showexponent,delete e.exponentformat,delete e.minexponent,delete e.tickformat,delete e.showticksuffix,delete e.showtickprefix),e.showticksuffix||delete e.ticksuffix,e.showtickprefix||delete e.tickprefix,m(\"tickmode\"),e}},{\"../../components/color\":643,\"../../lib\":778,\"../../plots/cartesian/axis_autotype\":829,\"../../plots/cartesian/category_order_defaults\":832,\"../../plots/cartesian/set_convert\":848,\"../../plots/cartesian/tick_label_defaults\":849,\"../../plots/cartesian/tick_value_defaults\":851,\"../../registry\":911,\"./attributes\":964}],968:[function(t,e,n){\"use strict\";var r=t(\"../../plots/cartesian/axes\"),i=t(\"../../lib\").isArray1D,a=t(\"./cheater_basis\"),o=t(\"./array_minmax\"),s=t(\"./calc_gridlines\"),l=t(\"./calc_labels\"),c=t(\"./calc_clippath\"),u=t(\"../heatmap/clean_2d_array\"),h=t(\"./smooth_fill_2d_array\"),d=t(\"../heatmap/convert_column_xyz\"),f=t(\"./set_convert\");e.exports=function(t,e){var n=r.getFromId(t,e.xaxis),p=r.getFromId(t,e.yaxis),m=e.aaxis,g=e.baxis,y=e.x,v=e.y,_=[];y&&i(y)&&_.push(\"x\"),v&&i(v)&&_.push(\"y\"),_.length&&d(e,m,g,\"a\",\"b\",_);var b=e._a=e._a||e.a,x=e._b=e._b||e.b;y=e._x||e.x,v=e._y||e.y;var w={};e._cheater&&(y=a(\"index\"===m.cheatertype?b.length:b,\"index\"===g.cheatertype?x.length:x,e.cheaterslope)),e._x=y=u(y),e._y=v=u(v),h(y,b,x),h(v,b,x),f(e),e.setScale();var k=o(y),M=o(v),T=.5*(k[1]-k[0]),S=.5*(k[1]+k[0]),A=.5*(M[1]-M[0]),L=.5*(M[1]+M[0]),C=1.3;return M=[L-A*C,L+A*C],e._extremes[n._id]=r.findExtremes(n,k=[S-T*C,S+T*C],{padded:!0}),e._extremes[p._id]=r.findExtremes(p,M,{padded:!0}),s(e,\"a\",\"b\"),s(e,\"b\",\"a\"),l(e,m),l(e,g),w.clipsegments=c(e._xctrl,e._yctrl,m,g),w.x=y,w.y=v,w.a=b,w.b=x,[w]}},{\"../../lib\":778,\"../../plots/cartesian/axes\":828,\"../heatmap/clean_2d_array\":1067,\"../heatmap/convert_column_xyz\":1069,\"./array_minmax\":963,\"./calc_clippath\":969,\"./calc_gridlines\":970,\"./calc_labels\":971,\"./cheater_basis\":973,\"./set_convert\":986,\"./smooth_fill_2d_array\":987}],969:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,r){var i,a,o,s=[],l=!!n.smoothing,c=!!r.smoothing,u=t[0].length-1,h=t.length-1;for(i=0,a=[],o=[];i<=u;i++)a[i]=t[0][i],o[i]=e[0][i];for(s.push({x:a,y:o,bicubic:l}),i=0,a=[],o=[];i<=h;i++)a[i]=t[i][u],o[i]=e[i][u];for(s.push({x:a,y:o,bicubic:c}),i=u,a=[],o=[];i>=0;i--)a[u-i]=t[h][i],o[u-i]=e[h][i];for(s.push({x:a,y:o,bicubic:l}),i=h,a=[],o=[];i>=0;i--)a[h-i]=t[i][0],o[h-i]=e[i][0];return s.push({x:a,y:o,bicubic:c}),s}},{}],970:[function(t,e,n){\"use strict\";var r=t(\"../../plots/cartesian/axes\"),i=t(\"../../lib/extend\").extendFlat;e.exports=function(t,e,n){var a,o,s,l,c,u,h,d,f,p,m,g,y,v,_=t[\"_\"+e],b=t[e+\"axis\"],x=b._gridlines=[],w=b._minorgridlines=[],k=b._boundarylines=[],M=t[\"_\"+n],T=t[n+\"axis\"];\"array\"===b.tickmode&&(b.tickvals=_.slice());var S=t._xctrl,A=t._yctrl,L=S[0].length,C=S.length,E=t._a.length,O=t._b.length;r.prepTicks(b),\"array\"===b.tickmode&&delete b.tickvals;var D=b.smoothing?3:1;function I(r){var i,a,o,s,l,c,u,h,f,p,m,g,y=[],v=[],_={};if(\"b\"===e)for(a=t.b2j(r),o=Math.floor(Math.max(0,Math.min(O-2,a))),s=a-o,_.length=O,_.crossLength=E,_.xy=function(e){return t.evalxy([],e,a)},_.dxy=function(e,n){return t.dxydi([],e,o,n,s)},i=0;i<E;i++)c=Math.min(E-2,i),u=i-c,h=t.evalxy([],i,a),T.smoothing&&i>0&&(f=t.dxydi([],i-1,o,0,s),y.push(l[0]+f[0]/3),v.push(l[1]+f[1]/3),p=t.dxydi([],i-1,o,1,s),y.push(h[0]-p[0]/3),v.push(h[1]-p[1]/3)),y.push(h[0]),v.push(h[1]),l=h;else for(i=t.a2i(r),c=Math.floor(Math.max(0,Math.min(E-2,i))),u=i-c,_.length=E,_.crossLength=O,_.xy=function(e){return t.evalxy([],i,e)},_.dxy=function(e,n){return t.dxydj([],c,e,u,n)},a=0;a<O;a++)o=Math.min(O-2,a),s=a-o,h=t.evalxy([],i,a),T.smoothing&&a>0&&(m=t.dxydj([],c,a-1,u,0),y.push(l[0]+m[0]/3),v.push(l[1]+m[1]/3),g=t.dxydj([],c,a-1,u,1),y.push(h[0]-g[0]/3),v.push(h[1]-g[1]/3)),y.push(h[0]),v.push(h[1]),l=h;return _.axisLetter=e,_.axis=b,_.crossAxis=T,_.value=r,_.constvar=n,_.index=d,_.x=y,_.y=v,_.smoothing=T.smoothing,_}function P(r){var i,a,o,s,l,c=[],u=[],h={};if(h.length=_.length,h.crossLength=M.length,\"b\"===e)for(o=Math.max(0,Math.min(O-2,r)),l=Math.min(1,Math.max(0,r-o)),h.xy=function(e){return t.evalxy([],e,r)},h.dxy=function(e,n){return t.dxydi([],e,o,n,l)},i=0;i<L;i++)c[i]=S[r*D][i],u[i]=A[r*D][i];else for(a=Math.max(0,Math.min(E-2,r)),s=Math.min(1,Math.max(0,r-a)),h.xy=function(e){return t.evalxy([],r,e)},h.dxy=function(e,n){return t.dxydj([],a,e,s,n)},i=0;i<C;i++)c[i]=S[i][r*D],u[i]=A[i][r*D];return h.axisLetter=e,h.axis=b,h.crossAxis=T,h.value=_[r],h.constvar=n,h.index=r,h.x=c,h.y=u,h.smoothing=T.smoothing,h}if(\"array\"===b.tickmode){for(l=5e-15,h=(c=[Math.floor((_.length-1-b.arraytick0)/b.arraydtick*(1+l)),Math.ceil(-b.arraytick0/b.arraydtick/(1+l))].sort((function(t,e){return t-e})))[1]+1,d=u=c[0]-1;d<h;d++)(o=b.arraytick0+b.arraydtick*d)<0||o>_.length-1||x.push(i(P(o),{color:b.gridcolor,width:b.gridwidth}));for(d=u;d<h;d++)if(s=b.arraytick0+b.arraydtick*d,m=Math.min(s+b.arraydtick,_.length-1),!(s<0||s>_.length-1||m<0||m>_.length-1))for(g=_[s],y=_[m],a=0;a<b.minorgridcount;a++)(v=m-s)<=0||(p=g+(y-g)*(a+1)/(b.minorgridcount+1)*(b.arraydtick/v))<_[0]||p>_[_.length-1]||w.push(i(I(p),{color:b.minorgridcolor,width:b.minorgridwidth}));b.startline&&k.push(i(P(0),{color:b.startlinecolor,width:b.startlinewidth})),b.endline&&k.push(i(P(_.length-1),{color:b.endlinecolor,width:b.endlinewidth}))}else{for(l=5e-15,h=(c=[Math.floor((_[_.length-1]-b.tick0)/b.dtick*(1+l)),Math.ceil((_[0]-b.tick0)/b.dtick/(1+l))].sort((function(t,e){return t-e})))[1],d=u=c[0];d<=h;d++)x.push(i(I(f=b.tick0+b.dtick*d),{color:b.gridcolor,width:b.gridwidth}));for(d=u-1;d<h+1;d++)for(f=b.tick0+b.dtick*d,a=0;a<b.minorgridcount;a++)(p=f+b.dtick*(a+1)/(b.minorgridcount+1))<_[0]||p>_[_.length-1]||w.push(i(I(p),{color:b.minorgridcolor,width:b.minorgridwidth}));b.startline&&k.push(i(I(_[0]),{color:b.startlinecolor,width:b.startlinewidth})),b.endline&&k.push(i(I(_[_.length-1]),{color:b.endlinecolor,width:b.endlinewidth}))}}},{\"../../lib/extend\":768,\"../../plots/cartesian/axes\":828}],971:[function(t,e,n){\"use strict\";var r=t(\"../../plots/cartesian/axes\"),i=t(\"../../lib/extend\").extendFlat;e.exports=function(t,e){var n,a,o,s=e._labels=[],l=e._gridlines;for(n=0;n<l.length;n++)o=l[n],-1!==[\"start\",\"both\"].indexOf(e.showticklabels)&&(a=r.tickText(e,o.value),i(a,{prefix:void 0,suffix:void 0,endAnchor:!0,xy:o.xy(0),dxy:o.dxy(0,0),axis:o.axis,length:o.crossAxis.length,font:o.axis.tickfont,isFirst:0===n,isLast:n===l.length-1}),s.push(a)),-1!==[\"end\",\"both\"].indexOf(e.showticklabels)&&(a=r.tickText(e,o.value),i(a,{endAnchor:!1,xy:o.xy(o.crossLength-1),dxy:o.dxy(o.crossLength-2,1),axis:o.axis,length:o.crossAxis.length,font:o.axis.tickfont,isFirst:0===n,isLast:n===l.length-1}),s.push(a))}},{\"../../lib/extend\":768,\"../../plots/cartesian/axes\":828}],972:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,r){var i=t[0]-e[0],a=t[1]-e[1],o=n[0]-e[0],s=n[1]-e[1],l=Math.pow(i*i+a*a,.25),c=Math.pow(o*o+s*s,.25),u=(c*c*i-l*l*o)*r,h=(c*c*a-l*l*s)*r,d=c*(l+c)*3,f=l*(l+c)*3;return[[e[0]+(d&&u/d),e[1]+(d&&h/d)],[e[0]-(f&&u/f),e[1]-(f&&h/f)]]}},{}],973:[function(t,e,n){\"use strict\";var r=t(\"../../lib\").isArrayOrTypedArray;e.exports=function(t,e,n){var i,a,o,s,l,c,u=[],h=r(t)?t.length:t,d=r(e)?e.length:e,f=r(t)?t:null,p=r(e)?e:null;f&&(o=(f.length-1)/(f[f.length-1]-f[0])/(h-1)),p&&(s=(p.length-1)/(p[p.length-1]-p[0])/(d-1));var m=1/0,g=-1/0;for(a=0;a<d;a++)for(u[a]=[],l=p?(p[a]-p[0])*s:a/(d-1),i=0;i<h;i++)c=(f?(f[i]-f[0])*o:i/(h-1))-l*n,m=Math.min(c,m),g=Math.max(c,g),u[a][i]=c;var y=1/(g-m),v=-m*y;for(a=0;a<d;a++)for(i=0;i<h;i++)u[a][i]=y*u[a][i]+v;return u}},{\"../../lib\":778}],974:[function(t,e,n){\"use strict\";var r=t(\"./catmull_rom\"),i=t(\"../../lib\").ensureArray;function a(t,e,n){return[(2*(-.5*n[0]+1.5*e[0])+t[0])/3,(2*(-.5*n[1]+1.5*e[1])+t[1])/3]}e.exports=function(t,e,n,o,s,l){var c,u,h,d,f,p,m,g,y,v,_=n[0].length,b=n.length,x=s?3*_-2:_,w=l?3*b-2:b;for(t=i(t,w),e=i(e,w),h=0;h<w;h++)t[h]=i(t[h],x),e[h]=i(e[h],x);for(u=0,d=0;u<b;u++,d+=l?3:1)for(f=t[d],p=e[d],m=n[u],g=o[u],c=0,h=0;c<_;c++,h+=s?3:1)f[h]=m[c],p[h]=g[c];if(s)for(u=0,d=0;u<b;u++,d+=l?3:1){for(c=1,h=3;c<_-1;c++,h+=3)y=r([n[u][c-1],o[u][c-1]],[n[u][c],o[u][c]],[n[u][c+1],o[u][c+1]],s),t[d][h-1]=y[0][0],e[d][h-1]=y[0][1],t[d][h+1]=y[1][0],e[d][h+1]=y[1][1];v=a([t[d][0],e[d][0]],[t[d][2],e[d][2]],[t[d][3],e[d][3]]),t[d][1]=v[0],e[d][1]=v[1],v=a([t[d][x-1],e[d][x-1]],[t[d][x-3],e[d][x-3]],[t[d][x-4],e[d][x-4]]),t[d][x-2]=v[0],e[d][x-2]=v[1]}if(l)for(h=0;h<x;h++){for(d=3;d<w-3;d+=3)y=r([t[d-3][h],e[d-3][h]],[t[d][h],e[d][h]],[t[d+3][h],e[d+3][h]],l),t[d-1][h]=y[0][0],e[d-1][h]=y[0][1],t[d+1][h]=y[1][0],e[d+1][h]=y[1][1];v=a([t[0][h],e[0][h]],[t[2][h],e[2][h]],[t[3][h],e[3][h]]),t[1][h]=v[0],e[1][h]=v[1],v=a([t[w-1][h],e[w-1][h]],[t[w-3][h],e[w-3][h]],[t[w-4][h],e[w-4][h]]),t[w-2][h]=v[0],e[w-2][h]=v[1]}if(s&&l)for(d=1;d<w;d+=(d+1)%3==0?2:1){for(h=3;h<x-3;h+=3)y=r([t[d][h-3],e[d][h-3]],[t[d][h],e[d][h]],[t[d][h+3],e[d][h+3]],s),t[d][h-1]=.5*(t[d][h-1]+y[0][0]),e[d][h-1]=.5*(e[d][h-1]+y[0][1]),t[d][h+1]=.5*(t[d][h+1]+y[1][0]),e[d][h+1]=.5*(e[d][h+1]+y[1][1]);v=a([t[d][0],e[d][0]],[t[d][2],e[d][2]],[t[d][3],e[d][3]]),t[d][1]=.5*(t[d][1]+v[0]),e[d][1]=.5*(e[d][1]+v[1]),v=a([t[d][x-1],e[d][x-1]],[t[d][x-3],e[d][x-3]],[t[d][x-4],e[d][x-4]]),t[d][x-2]=.5*(t[d][x-2]+v[0]),e[d][x-2]=.5*(e[d][x-2]+v[1])}return[t,e]}},{\"../../lib\":778,\"./catmull_rom\":972}],975:[function(t,e,n){\"use strict\";e.exports={RELATIVE_CULL_TOLERANCE:1e-6}},{}],976:[function(t,e,n){\"use strict\";e.exports=function(t,e,n){return e&&n?function(e,n,r,i,a){var o,s;e||(e=[]),n*=3,r*=3;var l=i*i,c=1-i,u=c*c,h=c*i*2,d=-3*u,f=3*(u-h),p=3*(h-l),m=3*l,g=a*a,y=g*a,v=1-a,_=v*v,b=_*v;for(s=0;s<t.length;s++)e[s]=b*(d*(o=t[s])[r][n]+f*o[r][n+1]+p*o[r][n+2]+m*o[r][n+3])+3*(_*a*(d*o[r+1][n]+f*o[r+1][n+1]+p*o[r+1][n+2]+m*o[r+1][n+3])+v*g*(d*o[r+2][n]+f*o[r+2][n+1]+p*o[r+2][n+2]+m*o[r+2][n+3]))+y*(d*o[r+3][n]+f*o[r+3][n+1]+p*o[r+3][n+2]+m*o[r+3][n+3]);return e}:e?function(e,n,r,i,a){var o,s;e||(e=[]),n*=3;var l=i*i,c=1-i,u=c*c,h=c*i*2,d=-3*u,f=3*(u-h),p=3*(h-l),m=3*l,g=1-a;for(o=0;o<t.length;o++)e[o]=g*(d*(s=t[o])[r][n]+f*s[r][n+1]+p*s[r][n+2]+m*s[r][n+3])+a*(d*s[r+1][n]+f*s[r+1][n+1]+p*s[r+1][n+2]+m*s[r+1][n+3]);return e}:n?function(e,n,r,i,a){var o,s;e||(e=[]),r*=3;var l=a*a,c=l*a,u=1-a,h=u*u,d=h*u;for(o=0;o<t.length;o++)e[o]=d*((s=t[o])[r][n+1]-s[r][n])+3*(h*a*(s[r+1][n+1]-s[r+1][n])+u*l*(s[r+2][n+1]-s[r+2][n]))+c*(s[r+3][n+1]-s[r+3][n]);return e}:function(e,n,r,i,a){var o,s;e||(e=[]);var l=1-a;for(o=0;o<t.length;o++)e[o]=l*((s=t[o])[r][n+1]-s[r][n])+a*(s[r+1][n+1]-s[r+1][n]);return e}}},{}],977:[function(t,e,n){\"use strict\";e.exports=function(t,e,n){return e&&n?function(e,n,r,i,a){var o,s;e||(e=[]),n*=3,r*=3;var l=i*i,c=l*i,u=1-i,h=u*u,d=h*u,f=a*a,p=1-a,m=p*p,g=p*a*2,y=-3*m,v=3*(m-g),_=3*(g-f),b=3*f;for(s=0;s<t.length;s++)e[s]=d*(y*(o=t[s])[r][n]+v*o[r+1][n]+_*o[r+2][n]+b*o[r+3][n])+3*(h*i*(y*o[r][n+1]+v*o[r+1][n+1]+_*o[r+2][n+1]+b*o[r+3][n+1])+u*l*(y*o[r][n+2]+v*o[r+1][n+2]+_*o[r+2][n+2]+b*o[r+3][n+2]))+c*(y*o[r][n+3]+v*o[r+1][n+3]+_*o[r+2][n+3]+b*o[r+3][n+3]);return e}:e?function(e,n,r,i,a){var o,s;e||(e=[]),n*=3;var l=a*a,c=l*a,u=1-a,h=u*u,d=h*u;for(o=0;o<t.length;o++)e[o]=d*((s=t[o])[r+1][n]-s[r][n])+3*(h*a*(s[r+1][n+1]-s[r][n+1])+u*l*(s[r+1][n+2]-s[r][n+2]))+c*(s[r+1][n+3]-s[r][n+3]);return e}:n?function(e,n,r,i,a){var o,s;e||(e=[]),r*=3;var l=1-i,c=a*a,u=1-a,h=u*u,d=u*a*2,f=-3*h,p=3*(h-d),m=3*(d-c),g=3*c;for(o=0;o<t.length;o++)e[o]=l*(f*(s=t[o])[r][n]+p*s[r+1][n]+m*s[r+2][n]+g*s[r+3][n])+i*(f*s[r][n+1]+p*s[r+1][n+1]+m*s[r+2][n+1]+g*s[r+3][n+1]);return e}:function(e,n,r,i,a){var o,s;e||(e=[]);var l=1-i;for(o=0;o<t.length;o++)e[o]=l*((s=t[o])[r+1][n]-s[r][n])+i*(s[r+1][n+1]-s[r][n+1]);return e}}},{}],978:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,r,i){var a=e-2,o=n-2;return r&&i?function(e,n,r){var i,s;e||(e=[]);var l=Math.max(0,Math.min(Math.floor(n),a)),c=Math.max(0,Math.min(Math.floor(r),o)),u=Math.max(0,Math.min(1,n-l)),h=Math.max(0,Math.min(1,r-c));l*=3,c*=3;var d=u*u,f=d*u,p=1-u,m=p*p,g=m*p,y=h*h,v=y*h,_=1-h,b=_*_,x=b*_;for(s=0;s<t.length;s++)e[s]=x*(g*(i=t[s])[c][l]+3*(m*u*i[c][l+1]+p*d*i[c][l+2])+f*i[c][l+3])+3*(b*h*(g*i[c+1][l]+3*(m*u*i[c+1][l+1]+p*d*i[c+1][l+2])+f*i[c+1][l+3])+_*y*(g*i[c+2][l]+3*(m*u*i[c+2][l+1]+p*d*i[c+2][l+2])+f*i[c+2][l+3]))+v*(g*i[c+3][l]+3*(m*u*i[c+3][l+1]+p*d*i[c+3][l+2])+f*i[c+3][l+3]);return e}:r?function(e,n,r){e||(e=[]);var i,s,l=Math.max(0,Math.min(Math.floor(n),a)),c=Math.max(0,Math.min(Math.floor(r),o)),u=Math.max(0,Math.min(1,n-l)),h=Math.max(0,Math.min(1,r-c));l*=3;var d=u*u,f=d*u,p=1-u,m=p*p,g=m*p,y=1-h;for(i=0;i<t.length;i++)e[i]=g*(y*(s=t[i])[c][l]+h*s[c+1][l])+3*(m*u*(y*s[c][l+1]+h*s[c+1][l+1])+p*d*(y*s[c][l+2]+h*s[c+1][l+1]))+f*(y*s[c][l+3]+h*s[c+1][l+1]);return e}:i?function(e,n,r){e||(e=[]);var i,s,l=Math.max(0,Math.min(Math.floor(n),a)),c=Math.max(0,Math.min(Math.floor(r),o)),u=Math.max(0,Math.min(1,n-l)),h=Math.max(0,Math.min(1,r-c));c*=3;var d=h*h,f=d*h,p=1-h,m=p*p,g=m*p,y=1-u;for(i=0;i<t.length;i++)e[i]=g*(y*(s=t[i])[c][l]+u*s[c][l+1])+3*(m*h*(y*s[c+1][l]+u*s[c+1][l+1])+p*d*(y*s[c+2][l]+u*s[c+2][l+1]))+f*(y*s[c+3][l]+u*s[c+3][l+1]);return e}:function(e,n,r){e||(e=[]);var i,s,l=Math.max(0,Math.min(Math.floor(n),a)),c=Math.max(0,Math.min(Math.floor(r),o)),u=Math.max(0,Math.min(1,n-l)),h=Math.max(0,Math.min(1,r-c)),d=1-h,f=1-u;for(i=0;i<t.length;i++)e[i]=d*(f*(s=t[i])[c][l]+u*s[c][l+1])+h*(f*s[c+1][l]+u*s[c+1][l+1]);return e}}},{}],979:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./xy_defaults\"),a=t(\"./ab_defaults\"),o=t(\"./attributes\"),s=t(\"../../components/color/attributes\");e.exports=function(t,e,n,l){function c(n,i){return r.coerce(t,e,o,n,i)}e._clipPathId=\"clip\"+e.uid+\"carpet\";var u=c(\"color\",s.defaultLine);r.coerceFont(c,\"font\"),c(\"carpet\"),a(t,e,l,c,u),e.a&&e.b?(e.a.length<3&&(e.aaxis.smoothing=0),e.b.length<3&&(e.baxis.smoothing=0),i(t,e,c)||(e.visible=!1),e._cheater&&c(\"cheaterslope\")):e.visible=!1}},{\"../../components/color/attributes\":642,\"../../lib\":778,\"./ab_defaults\":962,\"./attributes\":964,\"./xy_defaults\":988}],980:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),plot:t(\"./plot\"),calc:t(\"./calc\"),animatable:!0,isContainer:!0,moduleType:\"trace\",name:\"carpet\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"carpet\",\"carpetAxis\",\"notLegendIsolatable\",\"noMultiCategory\",\"noHover\",\"noSortingByValue\"],meta:{}}},{\"../../plots/cartesian\":841,\"./attributes\":964,\"./calc\":968,\"./defaults\":979,\"./plot\":985}],981:[function(t,e,n){\"use strict\";e.exports=function(t,e){for(var n,r=t._fullData.length,i=0;i<r;i++){var a=t._fullData[i];if(a.index!==e.index&&\"carpet\"===a.type&&(n||(n=a),a.carpet===e.carpet))return a}return n}},{}],982:[function(t,e,n){\"use strict\";e.exports=function(t,e,n){if(0===t.length)return\"\";var r,i=[],a=n?3:1;for(r=0;r<t.length;r+=a)i.push(t[r]+\",\"+e[r]),n&&r<t.length-a&&(i.push(\"C\"),i.push([t[r+1]+\",\"+e[r+1],t[r+2]+\",\"+e[r+2]+\" \"].join(\" \")));return i.join(n?\"\":\"L\")}},{}],983:[function(t,e,n){\"use strict\";var r=t(\"../../lib\").isArrayOrTypedArray;e.exports=function(t,e,n){var i;for(r(t)?t.length>e.length&&(t=t.slice(0,e.length)):t=[],i=0;i<e.length;i++)t[i]=n(e[i]);return t}},{\"../../lib\":778}],984:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,r,i,a){var o=i[0]*t.dpdx(e),s=i[1]*t.dpdy(n),l=1,c=1;if(a){var u=Math.sqrt(i[0]*i[0]+i[1]*i[1]),h=Math.sqrt(a[0]*a[0]+a[1]*a[1]);c=Math.max(0,(i[0]*a[0]+i[1]*a[1])/u/h)}var d=180*Math.atan2(s,o)/Math.PI;return d<-90?(d+=180,l=-l):d>90&&(d-=180,l=-l),{angle:d,flip:l,p:t.c2p(r,e,n),offsetMultplier:c}}},{}],985:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../components/drawing\"),a=t(\"./map_1d_array\"),o=t(\"./makepath\"),s=t(\"./orient_text\"),l=t(\"../../lib/svg_text_utils\"),c=t(\"../../lib\"),u=c.strRotate,h=c.strTranslate,d=t(\"../../constants/alignment\");function f(t,e,n,i,s,l){var c=\"const-\"+s+\"-lines\",u=n.selectAll(\".\"+c).data(l);u.enter().append(\"path\").classed(c,!0).style(\"vector-effect\",\"non-scaling-stroke\"),u.each((function(n){var i=n,s=i.y,l=a([],i.x,t.c2p),c=a([],s,e.c2p),u=\"M\"+o(l,c,i.smoothing);r.select(this).attr(\"d\",u).style(\"stroke-width\",i.width).style(\"stroke\",i.color).style(\"fill\",\"none\")})),u.exit().remove()}function p(t,e,n,a,o,c,d,f){var p=c.selectAll(\"text.\"+f).data(d);p.enter().append(\"text\").classed(f,!0);var m=0,g={};return p.each((function(o,c){var d;if(\"auto\"===o.axis.tickangle)d=s(a,e,n,o.xy,o.dxy);else{var f=(o.axis.tickangle+180)*Math.PI/180;d=s(a,e,n,o.xy,[Math.cos(f),Math.sin(f)])}c||(g={angle:d.angle,flip:d.flip});var p=(o.endAnchor?-1:1)*d.flip,y=r.select(this).attr({\"text-anchor\":p>0?\"start\":\"end\",\"data-notex\":1}).call(i.font,o.font).text(o.text).call(l.convertToTspans,t),v=i.bBox(this);y.attr(\"transform\",h(d.p[0],d.p[1])+u(d.angle)+h(o.axis.labelpadding*p,.3*v.height)),m=Math.max(m,v.width+o.axis.labelpadding)})),p.exit().remove(),g.maxExtent=m,g}e.exports=function(t,e,n,i){var l=e.xaxis,u=e.yaxis,h=t._fullLayout._clips;c.makeTraceGroups(i,n,\"trace\").each((function(e){var n=r.select(this),i=e[0],d=i.trace,m=d.aaxis,g=d.baxis,v=c.ensureSingle(n,\"g\",\"minorlayer\"),_=c.ensureSingle(n,\"g\",\"majorlayer\"),b=c.ensureSingle(n,\"g\",\"boundarylayer\"),x=c.ensureSingle(n,\"g\",\"labellayer\");n.style(\"opacity\",d.opacity),f(l,u,_,0,\"a\",m._gridlines),f(l,u,_,0,\"b\",g._gridlines),f(l,u,v,0,\"a\",m._minorgridlines),f(l,u,v,0,\"b\",g._minorgridlines),f(l,u,b,0,\"a-boundary\",m._boundarylines),f(l,u,b,0,\"b-boundary\",g._boundarylines);var w=p(t,l,u,d,0,x,m._labels,\"a-label\"),k=p(t,l,u,d,0,x,g._labels,\"b-label\");(function(t,e,n,r,i,a,o,l){var u,h,d,f,p=c.aggNums(Math.min,null,n.a),m=c.aggNums(Math.max,null,n.a),g=c.aggNums(Math.min,null,n.b),v=c.aggNums(Math.max,null,n.b);d=n.ab2xy(u=.5*(p+m),h=g,!0),f=n.dxyda_rough(u,h),void 0===o.angle&&c.extendFlat(o,s(n,i,a,d,n.dxydb_rough(u,h))),y(t,e,n,0,d,f,n.aaxis,i,a,o,\"a-title\"),d=n.ab2xy(u=p,h=.5*(g+v),!0),f=n.dxydb_rough(u,h),void 0===l.angle&&c.extendFlat(l,s(n,i,a,d,n.dxyda_rough(u,h))),y(t,e,n,0,d,f,n.baxis,i,a,l,\"b-title\")})(t,x,d,0,l,u,w,k),function(t,e,n,r,i){var s,l,u,h,d=n.select(\"#\"+t._clipPathId);d.size()||(d=n.append(\"clipPath\").classed(\"carpetclip\",!0));var f=c.ensureSingle(d,\"path\",\"carpetboundary\"),p=e.clipsegments,m=[];for(h=0;h<p.length;h++)l=a([],(s=p[h]).x,r.c2p),u=a([],s.y,i.c2p),m.push(o(l,u,s.bicubic));var g=\"M\"+m.join(\"L\")+\"Z\";d.attr(\"id\",t._clipPathId),f.attr(\"d\",g)}(d,i,h,l,u)}))};var m=d.LINE_SPACING,g=(1-d.MID_SHIFT)/m+1;function y(t,e,n,a,o,c,d,f,p,y,v){var _=[];d.title.text&&_.push(d.title.text);var b=e.selectAll(\"text.\"+v).data(_),x=y.maxExtent;b.enter().append(\"text\").classed(v,!0),b.each((function(){var e=s(n,f,p,o,c);-1===[\"start\",\"both\"].indexOf(d.showticklabels)&&(x=0);var a=d.title.font.size;x+=a+d.title.offset;var v=(y.angle+(y.flip<0?180:0)-e.angle+450)%360,_=v>90&&v<270,b=r.select(this);b.text(d.title.text).call(l.convertToTspans,t),_&&(x=(-l.lineCount(b)+g)*m*a-x),b.attr(\"transform\",h(e.p[0],e.p[1])+u(e.angle)+h(0,x)).attr(\"text-anchor\",\"middle\").call(i.font,d.title.font)})),b.exit().remove()}},{\"../../components/drawing\":665,\"../../constants/alignment\":745,\"../../lib\":778,\"../../lib/svg_text_utils\":803,\"./makepath\":982,\"./map_1d_array\":983,\"./orient_text\":984,d3:169}],986:[function(t,e,n){\"use strict\";var r=t(\"./constants\"),i=t(\"../../lib/search\").findBin,a=t(\"./compute_control_points\"),o=t(\"./create_spline_evaluator\"),s=t(\"./create_i_derivative_evaluator\"),l=t(\"./create_j_derivative_evaluator\");e.exports=function(t){var e=t._a,n=t._b,c=e.length,u=n.length,h=t.aaxis,d=t.baxis,f=e[0],p=e[c-1],m=n[0],g=n[u-1],y=e[e.length-1]-e[0],v=n[n.length-1]-n[0],_=y*r.RELATIVE_CULL_TOLERANCE,b=v*r.RELATIVE_CULL_TOLERANCE;f-=_,p+=_,m-=b,g+=b,t.isVisible=function(t,e){return t>f&&t<p&&e>m&&e<g},t.isOccluded=function(t,e){return t<f||t>p||e<m||e>g},t.setScale=function(){var e=a(t._xctrl,t._yctrl,t._x,t._y,h.smoothing,d.smoothing);t._xctrl=e[0],t._yctrl=e[1],t.evalxy=o([t._xctrl,t._yctrl],c,u,h.smoothing,d.smoothing),t.dxydi=s([t._xctrl,t._yctrl],h.smoothing,d.smoothing),t.dxydj=l([t._xctrl,t._yctrl],h.smoothing,d.smoothing)},t.i2a=function(t){var n=Math.max(0,Math.floor(t[0]),c-2),r=t[0]-n;return(1-r)*e[n]+r*e[n+1]},t.j2b=function(t){var e=Math.max(0,Math.floor(t[1]),c-2),r=t[1]-e;return(1-r)*n[e]+r*n[e+1]},t.ij2ab=function(e){return[t.i2a(e[0]),t.j2b(e[1])]},t.a2i=function(t){var n=Math.max(0,Math.min(i(t,e),c-2)),r=e[n];return Math.max(0,Math.min(c-1,n+(t-r)/(e[n+1]-r)))},t.b2j=function(t){var e=Math.max(0,Math.min(i(t,n),u-2)),r=n[e];return Math.max(0,Math.min(u-1,e+(t-r)/(n[e+1]-r)))},t.ab2ij=function(e){return[t.a2i(e[0]),t.b2j(e[1])]},t.i2c=function(e,n){return t.evalxy([],e,n)},t.ab2xy=function(r,i,a){if(!a&&(r<e[0]||r>e[c-1]|i<n[0]||i>n[u-1]))return[!1,!1];var o=t.a2i(r),s=t.b2j(i),l=t.evalxy([],o,s);if(a){var h,d,f,p,m=0,g=0,y=[];r<e[0]?(h=0,d=0,m=(r-e[0])/(e[1]-e[0])):r>e[c-1]?(h=c-2,d=1,m=(r-e[c-1])/(e[c-1]-e[c-2])):d=o-(h=Math.max(0,Math.min(c-2,Math.floor(o)))),i<n[0]?(f=0,p=0,g=(i-n[0])/(n[1]-n[0])):i>n[u-1]?(f=u-2,p=1,g=(i-n[u-1])/(n[u-1]-n[u-2])):p=s-(f=Math.max(0,Math.min(u-2,Math.floor(s)))),m&&(t.dxydi(y,h,f,d,p),l[0]+=y[0]*m,l[1]+=y[1]*m),g&&(t.dxydj(y,h,f,d,p),l[0]+=y[0]*g,l[1]+=y[1]*g)}return l},t.c2p=function(t,e,n){return[e.c2p(t[0]),n.c2p(t[1])]},t.p2x=function(t,e,n){return[e.p2c(t[0]),n.p2c(t[1])]},t.dadi=function(t){var n=Math.max(0,Math.min(e.length-2,t));return e[n+1]-e[n]},t.dbdj=function(t){var e=Math.max(0,Math.min(n.length-2,t));return n[e+1]-n[e]},t.dxyda=function(e,n,r,i){var a=t.dxydi(null,e,n,r,i),o=t.dadi(e,r);return[a[0]/o,a[1]/o]},t.dxydb=function(e,n,r,i){var a=t.dxydj(null,e,n,r,i),o=t.dbdj(n,i);return[a[0]/o,a[1]/o]},t.dxyda_rough=function(e,n,r){var i=y*(r||.1),a=t.ab2xy(e+i,n,!0),o=t.ab2xy(e-i,n,!0);return[.5*(a[0]-o[0])/i,.5*(a[1]-o[1])/i]},t.dxydb_rough=function(e,n,r){var i=v*(r||.1),a=t.ab2xy(e,n+i,!0),o=t.ab2xy(e,n-i,!0);return[.5*(a[0]-o[0])/i,.5*(a[1]-o[1])/i]},t.dpdx=function(t){return t._m},t.dpdy=function(t){return t._m}}},{\"../../lib/search\":798,\"./compute_control_points\":974,\"./constants\":975,\"./create_i_derivative_evaluator\":976,\"./create_j_derivative_evaluator\":977,\"./create_spline_evaluator\":978}],987:[function(t,e,n){\"use strict\";var r=t(\"../../lib\");e.exports=function(t,e,n){var i,a,o,s=[],l=[],c=t[0].length,u=t.length;function h(e,n){var r,i=0,a=0;return e>0&&void 0!==(r=t[n][e-1])&&(a++,i+=r),e<c-1&&void 0!==(r=t[n][e+1])&&(a++,i+=r),n>0&&void 0!==(r=t[n-1][e])&&(a++,i+=r),n<u-1&&void 0!==(r=t[n+1][e])&&(a++,i+=r),i/Math.max(1,a)}var d,f,p,m,g,y,v,_,b,x,w=0;for(i=0;i<c;i++)for(a=0;a<u;a++)void 0===t[a][i]&&(s.push(i),l.push(a),t[a][i]=h(i,a)),w=Math.max(w,Math.abs(t[a][i]));if(!s.length)return t;var k=0,M=0,T=s.length;do{for(k=0,o=0;o<T;o++){a=l[o];var S,A,L,C,E=0,O=0;0===(i=s[o])?(L=Math.min(c-1,2),O+=(S=t[a][1])+(S-t[a][L])*(e[0]-(A=e[1]))/(A-e[L]),E++):i===c-1&&(L=Math.max(0,c-3),O+=(S=t[a][c-2])+(S-t[a][L])*(e[c-1]-(A=e[c-2]))/(A-e[L]),E++),(0===i||i===c-1)&&a>0&&a<u-1&&(O+=((f=n[a]-n[a-1])*t[a+1][i]+(d=n[a+1]-n[a])*t[a-1][i])/(f+d),E++),0===a?(C=Math.min(u-1,2),O+=(S=t[1][i])+(S-t[C][i])*(n[0]-(A=n[1]))/(A-n[C]),E++):a===u-1&&(C=Math.max(0,u-3),O+=(S=t[u-2][i])+(S-t[C][i])*(n[u-1]-(A=n[u-2]))/(A-n[C]),E++),(0===a||a===u-1)&&i>0&&i<c-1&&(O+=((f=e[i]-e[i-1])*t[a][i+1]+(d=e[i+1]-e[i])*t[a][i-1])/(f+d),E++),E?O/=E:O=((v=(p=e[i+1]-e[i])*(m=e[i]-e[i-1])*(p+m))*((y=n[a]-n[a-1])*t[a+1][i]+(g=n[a+1]-n[a])*t[a-1][i])+(_=g*y*(g+y))*(m*t[a][i+1]+p*t[a][i-1]))/(_*(m+p)+v*(y+g)),k+=(x=(b=O-t[a][i])/w)*x,t[a][i]+=b*(1+(E?0:.85))}k=Math.sqrt(k)}while(M++<100&&k>1e-5);return r.log(\"Smoother converged to\",k,\"after\",M,\"iterations\"),t}},{\"../../lib\":778}],988:[function(t,e,n){\"use strict\";var r=t(\"../../lib\").isArray1D;e.exports=function(t,e,n){var i=n(\"x\"),a=i&&i.length,o=n(\"y\"),s=o&&o.length;if(!a&&!s)return!1;if(e._cheater=!i,a&&!r(i)||s&&!r(o))e._length=null;else{var l=a?i.length:1/0;s&&(l=Math.min(l,o.length)),e.a&&e.a.length&&(l=Math.min(l,e.a.length)),e.b&&e.b.length&&(l=Math.min(l,e.b.length)),e._length=l}return!0}},{\"../../lib\":778}],989:[function(t,e,n){\"use strict\";var r=t(\"../../plots/template_attributes\").hovertemplateAttrs,i=t(\"../scattergeo/attributes\"),a=t(\"../../components/colorscale/attributes\"),o=t(\"../../plots/attributes\"),s=t(\"../../components/color/attributes\").defaultLine,l=t(\"../../lib/extend\").extendFlat,c=i.marker.line;e.exports=l({locations:{valType:\"data_array\",editType:\"calc\"},locationmode:i.locationmode,z:{valType:\"data_array\",editType:\"calc\"},geojson:l({},i.geojson,{}),featureidkey:i.featureidkey,text:l({},i.text,{}),hovertext:l({},i.hovertext,{}),marker:{line:{color:l({},c.color,{dflt:s}),width:l({},c.width,{dflt:1}),editType:\"calc\"},opacity:{valType:\"number\",arrayOk:!0,min:0,max:1,dflt:1,editType:\"style\"},editType:\"calc\"},selected:{marker:{opacity:i.selected.marker.opacity,editType:\"plot\"},editType:\"plot\"},unselected:{marker:{opacity:i.unselected.marker.opacity,editType:\"plot\"},editType:\"plot\"},hoverinfo:l({},o.hoverinfo,{editType:\"calc\",flags:[\"location\",\"z\",\"text\",\"name\"]}),hovertemplate:r(),showlegend:l({},o.showlegend,{dflt:!1})},a(\"\",{cLetter:\"z\",editTypeOverride:\"calc\"}))},{\"../../components/color/attributes\":642,\"../../components/colorscale/attributes\":650,\"../../lib/extend\":768,\"../../plots/attributes\":824,\"../../plots/template_attributes\":906,\"../scattergeo/attributes\":1229}],990:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../constants/numerical\").BADNUM,a=t(\"../../components/colorscale/calc\"),o=t(\"../scatter/arrays_to_calcdata\"),s=t(\"../scatter/calc_selection\");function l(t){return t&&\"string\"==typeof t}e.exports=function(t,e){var n,c=e._length,u=new Array(c);n=e.geojson?function(t){return l(t)||r(t)}:l;for(var h=0;h<c;h++){var d=u[h]={},f=e.locations[h],p=e.z[h];n(f)&&r(p)?(d.loc=f,d.z=p):(d.loc=null,d.z=i),d.index=h}return o(u,e),a(t,e,{vals:e.z,containerStr:\"\",cLetter:\"z\"}),s(u,e),u}},{\"../../components/colorscale/calc\":651,\"../../constants/numerical\":753,\"../scatter/arrays_to_calcdata\":1186,\"../scatter/calc_selection\":1189,\"fast-isnumeric\":241}],991:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../components/colorscale/defaults\"),a=t(\"./attributes\");e.exports=function(t,e,n,o){function s(n,i){return r.coerce(t,e,a,n,i)}var l=s(\"locations\"),c=s(\"z\");if(l&&l.length&&r.isArrayOrTypedArray(c)&&c.length){e._length=Math.min(l.length,c.length);var u,h=s(\"geojson\");(\"string\"==typeof h&&\"\"!==h||r.isPlainObject(h))&&(u=\"geojson-id\"),\"geojson-id\"===s(\"locationmode\",u)&&s(\"featureidkey\"),s(\"text\"),s(\"hovertext\"),s(\"hovertemplate\"),s(\"marker.line.width\")&&s(\"marker.line.color\"),s(\"marker.opacity\"),i(t,e,o,s,{prefix:\"\",cLetter:\"z\"}),r.coerceSelectionMarkerOpacity(e,s)}else e.visible=!1}},{\"../../components/colorscale/defaults\":653,\"../../lib\":778,\"./attributes\":989}],992:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,r,i){t.location=e.location,t.z=e.z;var a=r[i];return a.fIn&&a.fIn.properties&&(t.properties=a.fIn.properties),t.ct=a.ct,t}},{}],993:[function(t,e,n){\"use strict\";var r=t(\"../../plots/cartesian/axes\"),i=t(\"./attributes\"),a=t(\"../../lib\").fillText;e.exports=function(t,e,n){var o,s,l,c,u=t.cd,h=u[0].trace,d=t.subplot,f=[e,n],p=[e+360,n];for(s=0;s<u.length;s++)if(c=!1,(o=u[s])._polygons){for(l=0;l<o._polygons.length;l++)o._polygons[l].contains(f)&&(c=!c),o._polygons[l].contains(p)&&(c=!c);if(c)break}if(c&&o)return t.x0=t.x1=t.xa.c2p(o.ct),t.y0=t.y1=t.ya.c2p(o.ct),t.index=o.index,t.location=o.loc,t.z=o.z,t.zLabel=r.tickText(d.mockAxis,d.mockAxis.c2l(o.z),\"hover\").text,t.hovertemplate=o.hovertemplate,function(t,e,n){if(!e.hovertemplate){var r=n.hi||e.hoverinfo,o=String(n.loc),s=\"all\"===r?i.hoverinfo.flags:r.split(\"+\"),l=-1!==s.indexOf(\"name\"),c=-1!==s.indexOf(\"location\"),u=-1!==s.indexOf(\"z\"),h=-1!==s.indexOf(\"text\"),d=[];!l&&c?t.nameOverride=o:(l&&(t.nameOverride=e.name),c&&d.push(o)),u&&d.push(t.zLabel),h&&a(n,e,d),t.extraText=d.join(\"<br>\")}}(t,h,o),[t]}},{\"../../lib\":778,\"../../plots/cartesian/axes\":828,\"./attributes\":989}],994:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:t(\"../heatmap/colorbar\"),calc:t(\"./calc\"),calcGeoJSON:t(\"./plot\").calcGeoJSON,plot:t(\"./plot\").plot,style:t(\"./style\").style,styleOnSelect:t(\"./style\").styleOnSelect,hoverPoints:t(\"./hover\"),eventData:t(\"./event_data\"),selectPoints:t(\"./select\"),moduleType:\"trace\",name:\"choropleth\",basePlotModule:t(\"../../plots/geo\"),categories:[\"geo\",\"noOpacity\",\"showLegend\"],meta:{}}},{\"../../plots/geo\":860,\"../heatmap/colorbar\":1068,\"./attributes\":989,\"./calc\":990,\"./defaults\":991,\"./event_data\":992,\"./hover\":993,\"./plot\":995,\"./select\":996,\"./style\":997}],995:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../lib\"),a=t(\"../../lib/geo_location_utils\"),o=t(\"../../lib/topojson_utils\").getTopojsonFeatures,s=t(\"../../plots/cartesian/autorange\").findExtremes,l=t(\"./style\").style;e.exports={calcGeoJSON:function(t,e){for(var n=t[0].trace,r=e[n.geo],i=r._subplot,l=n.locationmode,c=n._length,u=\"geojson-id\"===l?a.extractTraceFeature(t):o(n,i.topojson),h=[],d=[],f=0;f<c;f++){var p=t[f],m=\"geojson-id\"===l?p.fOut:a.locationToFeature(l,p.loc,u);if(m){p.geojson=m,p.ct=m.properties.ct,p._polygons=a.feature2polygons(m);var g=a.computeBbox(m);h.push(g[0],g[2]),d.push(g[1],g[3])}else p.geojson=null}if(\"geojson\"===r.fitbounds&&\"geojson-id\"===l){var y=a.computeBbox(a.getTraceGeojson(n));h=[y[0],y[2]],d=[y[1],y[3]]}var v={padded:!0};n._extremes.lon=s(r.lonaxis._ax,h,v),n._extremes.lat=s(r.lataxis._ax,d,v)},plot:function(t,e,n){var a=e.layers.backplot.select(\".choroplethlayer\");i.makeTraceGroups(a,n,\"trace choropleth\").each((function(e){var n=r.select(this).selectAll(\"path.choroplethlocation\").data(i.identity);n.enter().append(\"path\").classed(\"choroplethlocation\",!0),n.exit().remove(),l(t,e)}))}}},{\"../../lib\":778,\"../../lib/geo_location_utils\":771,\"../../lib/topojson_utils\":806,\"../../plots/cartesian/autorange\":827,\"./style\":997,d3:169}],996:[function(t,e,n){\"use strict\";e.exports=function(t,e){var n,r,i,a,o,s=t.cd,l=t.xaxis,c=t.yaxis,u=[];if(!1===e)for(n=0;n<s.length;n++)s[n].selected=0;else for(n=0;n<s.length;n++)(i=(r=s[n]).ct)&&(a=l.c2p(i),o=c.c2p(i),e.contains([a,o],null,n,t)?(u.push({pointNumber:n,lon:i[0],lat:i[1]}),r.selected=1):r.selected=0);return u}},{}],997:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../components/color\"),a=t(\"../../components/drawing\"),o=t(\"../../components/colorscale\");function s(t,e){var n=e[0].trace,s=e[0].node3.selectAll(\".choroplethlocation\"),l=n.marker||{},c=l.line||{},u=o.makeColorScaleFuncFromTrace(n);s.each((function(t){r.select(this).attr(\"fill\",u(t.z)).call(i.stroke,t.mlc||c.color).call(a.dashLine,\"\",t.mlw||c.width||0).style(\"opacity\",l.opacity)})),a.selectedPointStyle(s,n,t)}e.exports={style:function(t,e){e&&s(t,e)},styleOnSelect:function(t,e){var n=e[0].trace;n.selectedpoints?a.selectedPointStyle(e[0].node3.selectAll(\".choroplethlocation\"),n,t):s(t,e)}}},{\"../../components/color\":643,\"../../components/colorscale\":655,\"../../components/drawing\":665,d3:169}],998:[function(t,e,n){\"use strict\";var r=t(\"../choropleth/attributes\"),i=t(\"../../components/colorscale/attributes\"),a=t(\"../../plots/template_attributes\").hovertemplateAttrs,o=t(\"../../plots/attributes\"),s=t(\"../../lib/extend\").extendFlat;e.exports=s({locations:{valType:\"data_array\",editType:\"calc\"},z:{valType:\"data_array\",editType:\"calc\"},geojson:{valType:\"any\",editType:\"calc\"},featureidkey:s({},r.featureidkey,{}),below:{valType:\"string\",editType:\"plot\"},text:r.text,hovertext:r.hovertext,marker:{line:{color:s({},r.marker.line.color,{editType:\"plot\"}),width:s({},r.marker.line.width,{editType:\"plot\"}),editType:\"calc\"},opacity:s({},r.marker.opacity,{editType:\"plot\"}),editType:\"calc\"},selected:{marker:{opacity:s({},r.selected.marker.opacity,{editType:\"plot\"}),editType:\"plot\"},editType:\"plot\"},unselected:{marker:{opacity:s({},r.unselected.marker.opacity,{editType:\"plot\"}),editType:\"plot\"},editType:\"plot\"},hoverinfo:r.hoverinfo,hovertemplate:a({},{keys:[\"properties\"]}),showlegend:s({},o.showlegend,{dflt:!1})},i(\"\",{cLetter:\"z\",editTypeOverride:\"calc\"}))},{\"../../components/colorscale/attributes\":650,\"../../lib/extend\":768,\"../../plots/attributes\":824,\"../../plots/template_attributes\":906,\"../choropleth/attributes\":989}],999:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../lib\"),a=t(\"../../components/colorscale\"),o=t(\"../../components/drawing\"),s=t(\"../../lib/geojson_utils\").makeBlank,l=t(\"../../lib/geo_location_utils\");function c(t){var e,n=t[0].trace,r=n._opts;if(n.selectedpoints){for(var a=o.makeSelectedPointStyleFns(n),s=0;s<t.length;s++){var l=t[s];l.fOut&&(l.fOut.properties.mo2=a.selectedOpacityFn(l))}e={type:\"identity\",property:\"mo2\"}}else e=i.isArrayOrTypedArray(n.marker.opacity)?{type:\"identity\",property:\"mo\"}:n.marker.opacity;return i.extendFlat(r.fill.paint,{\"fill-opacity\":e}),i.extendFlat(r.line.paint,{\"line-opacity\":e}),r}e.exports={convert:function(t){var e=t[0].trace,n=!0===e.visible&&0!==e._length,o={layout:{visibility:\"none\"},paint:{}},u={layout:{visibility:\"none\"},paint:{}},h=e._opts={fill:o,line:u,geojson:s()};if(!n)return h;var d=l.extractTraceFeature(t);if(!d)return h;var f,p,m,g=a.makeColorScaleFuncFromTrace(e),y=e.marker,v=y.line||{};i.isArrayOrTypedArray(y.opacity)&&(f=function(t){var e=t.mo;return r(e)?+i.constrain(e,0,1):0}),i.isArrayOrTypedArray(v.color)&&(p=function(t){return t.mlc}),i.isArrayOrTypedArray(v.width)&&(m=function(t){return t.mlw});for(var _=0;_<t.length;_++){var b=t[_],x=b.fOut;if(x){var w=x.properties;w.fc=g(b.z),f&&(w.mo=f(b)),p&&(w.mlc=p(b)),m&&(w.mlw=m(b)),b.ct=w.ct,b._polygons=l.feature2polygons(x)}}var k=f?{type:\"identity\",property:\"mo\"}:y.opacity;return i.extendFlat(o.paint,{\"fill-color\":{type:\"identity\",property:\"fc\"},\"fill-opacity\":k}),i.extendFlat(u.paint,{\"line-color\":p?{type:\"identity\",property:\"mlc\"}:v.color,\"line-width\":m?{type:\"identity\",property:\"mlw\"}:v.width,\"line-opacity\":k}),o.layout.visibility=\"visible\",u.layout.visibility=\"visible\",h.geojson={type:\"FeatureCollection\",features:d},c(t),h},convertOnSelect:c}},{\"../../components/colorscale\":655,\"../../components/drawing\":665,\"../../lib\":778,\"../../lib/geo_location_utils\":771,\"../../lib/geojson_utils\":772,\"fast-isnumeric\":241}],1e3:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../components/colorscale/defaults\"),a=t(\"./attributes\");e.exports=function(t,e,n,o){function s(n,i){return r.coerce(t,e,a,n,i)}var l=s(\"locations\"),c=s(\"z\"),u=s(\"geojson\");r.isArrayOrTypedArray(l)&&l.length&&r.isArrayOrTypedArray(c)&&c.length&&(\"string\"==typeof u&&\"\"!==u||r.isPlainObject(u))?(s(\"featureidkey\"),e._length=Math.min(l.length,c.length),s(\"below\"),s(\"text\"),s(\"hovertext\"),s(\"hovertemplate\"),s(\"marker.line.width\")&&s(\"marker.line.color\"),s(\"marker.opacity\"),i(t,e,o,s,{prefix:\"\",cLetter:\"z\"}),r.coerceSelectionMarkerOpacity(e,s)):e.visible=!1}},{\"../../components/colorscale/defaults\":653,\"../../lib\":778,\"./attributes\":998}],1001:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:t(\"../heatmap/colorbar\"),calc:t(\"../choropleth/calc\"),plot:t(\"./plot\"),hoverPoints:t(\"../choropleth/hover\"),eventData:t(\"../choropleth/event_data\"),selectPoints:t(\"../choropleth/select\"),styleOnSelect:function(t,e){e&&e[0].trace._glTrace.updateOnSelect(e)},getBelow:function(t,e){for(var n=e.getMapLayers(),r=n.length-2;r>=0;r--){var i=n[r].id;if(\"string\"==typeof i&&0===i.indexOf(\"water\"))for(var a=r+1;a<n.length;a++)if(\"string\"==typeof(i=n[a].id)&&-1===i.indexOf(\"plotly-\"))return i}},moduleType:\"trace\",name:\"choroplethmapbox\",basePlotModule:t(\"../../plots/mapbox\"),categories:[\"mapbox\",\"gl\",\"noOpacity\",\"showLegend\"],meta:{hr_name:\"choropleth_mapbox\"}}},{\"../../plots/mapbox\":885,\"../choropleth/calc\":990,\"../choropleth/event_data\":992,\"../choropleth/hover\":993,\"../choropleth/select\":996,\"../heatmap/colorbar\":1068,\"./attributes\":998,\"./defaults\":1e3,\"./plot\":1002}],1002:[function(t,e,n){\"use strict\";var r=t(\"./convert\").convert,i=t(\"./convert\").convertOnSelect,a=t(\"../../plots/mapbox/constants\").traceLayerPrefix;function o(t,e){this.type=\"choroplethmapbox\",this.subplot=t,this.uid=e,this.sourceId=\"source-\"+e,this.layerList=[[\"fill\",a+e+\"-fill\"],[\"line\",a+e+\"-line\"]],this.below=null}var s=o.prototype;s.update=function(t){this._update(r(t))},s.updateOnSelect=function(t){this._update(i(t))},s._update=function(t){var e=this.subplot,n=this.layerList,r=e.belowLookup[\"trace-\"+this.uid];e.map.getSource(this.sourceId).setData(t.geojson),r!==this.below&&(this._removeLayers(),this._addLayers(t,r),this.below=r);for(var i=0;i<n.length;i++){var a=n[i],o=a[1],s=t[a[0]];e.setOptions(o,\"setLayoutProperty\",s.layout),\"visible\"===s.layout.visibility&&e.setOptions(o,\"setPaintProperty\",s.paint)}},s._addLayers=function(t,e){for(var n=this.subplot,r=this.layerList,i=this.sourceId,a=0;a<r.length;a++){var o=r[a],s=o[0],l=t[s];n.addLayer({type:s,id:o[1],source:i,layout:l.layout,paint:l.paint},e)}},s._removeLayers=function(){for(var t=this.subplot.map,e=this.layerList,n=e.length-1;n>=0;n--)t.removeLayer(e[n][1])},s.dispose=function(){var t=this.subplot.map;this._removeLayers(),t.removeSource(this.sourceId)},e.exports=function(t,e){var n=e[0].trace,i=new o(t,n.uid),a=i.sourceId,s=r(e),l=i.below=t.belowLookup[\"trace-\"+n.uid];return t.map.addSource(a,{type:\"geojson\",data:s.geojson}),i._addLayers(s,l),e[0].trace._glTrace=i,i}},{\"../../plots/mapbox/constants\":883,\"./convert\":999}],1003:[function(t,e,n){\"use strict\";var r=t(\"../../components/colorscale/attributes\"),i=t(\"../../plots/template_attributes\").hovertemplateAttrs,a=t(\"../mesh3d/attributes\"),o=t(\"../../plots/attributes\"),s=t(\"../../lib/extend\").extendFlat,l={x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},z:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},u:{valType:\"data_array\",editType:\"calc\"},v:{valType:\"data_array\",editType:\"calc\"},w:{valType:\"data_array\",editType:\"calc\"},sizemode:{valType:\"enumerated\",values:[\"scaled\",\"absolute\"],editType:\"calc\",dflt:\"scaled\"},sizeref:{valType:\"number\",editType:\"calc\",min:0},anchor:{valType:\"enumerated\",editType:\"calc\",values:[\"tip\",\"tail\",\"cm\",\"center\"],dflt:\"cm\"},text:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},hovertemplate:i({editType:\"calc\"},{keys:[\"norm\"]}),showlegend:s({},o.showlegend,{dflt:!1})};s(l,r(\"\",{colorAttr:\"u/v/w norm\",showScaleDflt:!0,editTypeOverride:\"calc\"})),[\"opacity\",\"lightposition\",\"lighting\"].forEach((function(t){l[t]=a[t]})),l.hoverinfo=s({},o.hoverinfo,{editType:\"calc\",flags:[\"x\",\"y\",\"z\",\"u\",\"v\",\"w\",\"norm\",\"text\",\"name\"],dflt:\"x+y+z+norm+text+name\"}),l.transforms=void 0,e.exports=l},{\"../../components/colorscale/attributes\":650,\"../../lib/extend\":768,\"../../plots/attributes\":824,\"../../plots/template_attributes\":906,\"../mesh3d/attributes\":1128}],1004:[function(t,e,n){\"use strict\";var r=t(\"../../components/colorscale/calc\");e.exports=function(t,e){for(var n=e.u,i=e.v,a=e.w,o=Math.min(e.x.length,e.y.length,e.z.length,n.length,i.length,a.length),s=-1/0,l=1/0,c=0;c<o;c++){var u=n[c],h=i[c],d=a[c],f=Math.sqrt(u*u+h*h+d*d);s=Math.max(s,f),l=Math.min(l,f)}e._len=o,e._normMax=s,r(t,e,{vals:[l,s],containerStr:\"\",cLetter:\"c\"})}},{\"../../components/colorscale/calc\":651}],1005:[function(t,e,n){\"use strict\";var r=t(\"gl-cone3d\"),i=t(\"gl-cone3d\").createConeMesh,a=t(\"../../lib\").simpleMap,o=t(\"../../lib/gl_format_color\").parseColorScale,s=t(\"../../components/colorscale\").extractOpts,l=t(\"../../plots/gl3d/zip3\");function c(t,e){this.scene=t,this.uid=e,this.mesh=null,this.data=null}var u=c.prototype;u.handlePick=function(t){if(t.object===this.mesh){var e=t.index=t.data.index,n=this.data.u[e],r=this.data.v[e],i=this.data.w[e];t.traceCoordinate=[this.data.x[e],this.data.y[e],this.data.z[e],n,r,i,Math.sqrt(n*n+r*r+i*i)];var a=this.data.hovertext||this.data.text;return Array.isArray(a)&&void 0!==a[e]?t.textLabel=a[e]:a&&(t.textLabel=a),!0}};var h={xaxis:0,yaxis:1,zaxis:2},d={tip:1,tail:0,cm:.25,center:.5},f={tip:1,tail:1,cm:.75,center:.5};function p(t,e){var n=t.fullSceneLayout,i=t.dataScale,c={};function u(t,e){var r=n[e],o=i[h[e]];return a(t,(function(t){return r.d2l(t)*o}))}c.vectors=l(u(e.u,\"xaxis\"),u(e.v,\"yaxis\"),u(e.w,\"zaxis\"),e._len),c.positions=l(u(e.x,\"xaxis\"),u(e.y,\"yaxis\"),u(e.z,\"zaxis\"),e._len);var p=s(e);c.colormap=o(e),c.vertexIntensityBounds=[p.min/e._normMax,p.max/e._normMax],c.coneOffset=d[e.anchor],c.coneSize=\"scaled\"===e.sizemode?e.sizeref||.5:e.sizeref&&e._normMax?e.sizeref/e._normMax:.5;var m=r(c),g=e.lightposition;return m.lightPosition=[g.x,g.y,g.z],m.ambient=e.lighting.ambient,m.diffuse=e.lighting.diffuse,m.specular=e.lighting.specular,m.roughness=e.lighting.roughness,m.fresnel=e.lighting.fresnel,m.opacity=e.opacity,e._pad=f[e.anchor]*m.vectorScale*m.coneScale*e._normMax,m}u.update=function(t){this.data=t;var e=p(this.scene,t);this.mesh.update(e)},u.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports=function(t,e){var n=t.glplot.gl,r=p(t,e),a=i(n,r),o=new c(t,e.uid);return o.mesh=a,o.data=e,a._trace=o,t.glplot.add(a),o}},{\"../../components/colorscale\":655,\"../../lib\":778,\"../../lib/gl_format_color\":774,\"../../plots/gl3d/zip3\":881,\"gl-cone3d\":260}],1006:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../components/colorscale/defaults\"),a=t(\"./attributes\");e.exports=function(t,e,n,o){function s(n,i){return r.coerce(t,e,a,n,i)}var l=s(\"u\"),c=s(\"v\"),u=s(\"w\"),h=s(\"x\"),d=s(\"y\"),f=s(\"z\");l&&l.length&&c&&c.length&&u&&u.length&&h&&h.length&&d&&d.length&&f&&f.length?(s(\"sizeref\"),s(\"sizemode\"),s(\"anchor\"),s(\"lighting.ambient\"),s(\"lighting.diffuse\"),s(\"lighting.specular\"),s(\"lighting.roughness\"),s(\"lighting.fresnel\"),s(\"lightposition.x\"),s(\"lightposition.y\"),s(\"lightposition.z\"),i(t,e,o,s,{prefix:\"\",cLetter:\"c\"}),s(\"text\"),s(\"hovertext\"),s(\"hovertemplate\"),e._length=null):e.visible=!1}},{\"../../components/colorscale/defaults\":653,\"../../lib\":778,\"./attributes\":1003}],1007:[function(t,e,n){\"use strict\";e.exports={moduleType:\"trace\",name:\"cone\",basePlotModule:t(\"../../plots/gl3d\"),categories:[\"gl3d\",\"showLegend\"],attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:{min:\"cmin\",max:\"cmax\"},calc:t(\"./calc\"),plot:t(\"./convert\"),eventData:function(t,e){return t.norm=e.traceCoordinate[6],t},meta:{}}},{\"../../plots/gl3d\":870,\"./attributes\":1003,\"./calc\":1004,\"./convert\":1005,\"./defaults\":1006}],1008:[function(t,e,n){\"use strict\";var r=t(\"../heatmap/attributes\"),i=t(\"../scatter/attributes\"),a=t(\"../../components/colorscale/attributes\"),o=t(\"../../components/drawing/attributes\").dash,s=t(\"../../plots/font_attributes\"),l=t(\"../../lib/extend\").extendFlat,c=t(\"../../constants/filter_ops\"),u=c.COMPARISON_OPS2,h=c.INTERVAL_OPS,d=(t(\"../../constants/docs\"),i.line);e.exports=l({z:r.z,x:r.x,x0:r.x0,dx:r.dx,y:r.y,y0:r.y0,dy:r.dy,xperiod:r.xperiod,yperiod:r.yperiod,xperiod0:i.xperiod0,yperiod0:i.yperiod0,xperiodalignment:r.xperiodalignment,yperiodalignment:r.yperiodalignment,text:r.text,hovertext:r.hovertext,transpose:r.transpose,xtype:r.xtype,ytype:r.ytype,zhoverformat:r.zhoverformat,hovertemplate:r.hovertemplate,hoverongaps:r.hoverongaps,connectgaps:l({},r.connectgaps,{}),fillcolor:{valType:\"color\",editType:\"calc\"},autocontour:{valType:\"boolean\",dflt:!0,editType:\"calc\",impliedEdits:{\"contours.start\":void 0,\"contours.end\":void 0,\"contours.size\":void 0}},ncontours:{valType:\"integer\",dflt:15,min:1,editType:\"calc\"},contours:{type:{valType:\"enumerated\",values:[\"levels\",\"constraint\"],dflt:\"levels\",editType:\"calc\"},start:{valType:\"number\",dflt:null,editType:\"plot\",impliedEdits:{\"^autocontour\":!1}},end:{valType:\"number\",dflt:null,editType:\"plot\",impliedEdits:{\"^autocontour\":!1}},size:{valType:\"number\",dflt:null,min:0,editType:\"plot\",impliedEdits:{\"^autocontour\":!1}},coloring:{valType:\"enumerated\",values:[\"fill\",\"heatmap\",\"lines\",\"none\"],dflt:\"fill\",editType:\"calc\"},showlines:{valType:\"boolean\",dflt:!0,editType:\"plot\"},showlabels:{valType:\"boolean\",dflt:!1,editType:\"plot\"},labelfont:s({editType:\"plot\",colorEditType:\"style\"}),labelformat:{valType:\"string\",dflt:\"\",editType:\"plot\"},operation:{valType:\"enumerated\",values:[].concat(u).concat(h),dflt:\"=\",editType:\"calc\"},value:{valType:\"any\",dflt:0,editType:\"calc\"},editType:\"calc\",impliedEdits:{autocontour:!1}},line:{color:l({},d.color,{editType:\"style+colorbars\"}),width:{valType:\"number\",min:0,editType:\"style+colorbars\"},dash:o,smoothing:l({},d.smoothing,{}),editType:\"plot\"}},a(\"\",{cLetter:\"z\",autoColorDflt:!1,editTypeOverride:\"calc\"}))},{\"../../components/colorscale/attributes\":650,\"../../components/drawing/attributes\":664,\"../../constants/docs\":748,\"../../constants/filter_ops\":749,\"../../lib/extend\":768,\"../../plots/font_attributes\":856,\"../heatmap/attributes\":1065,\"../scatter/attributes\":1187}],1009:[function(t,e,n){\"use strict\";var r=t(\"../../components/colorscale\"),i=t(\"../heatmap/calc\"),a=t(\"./set_contours\"),o=t(\"./end_plus\");e.exports=function(t,e){var n=i(t,e),s=n[0].z;a(e,s);var l,c=e.contours,u=r.extractOpts(e);if(\"heatmap\"===c.coloring&&u.auto&&!1===e.autocontour){var h=c.start,d=o(c),f=c.size||1,p=Math.floor((d-h)/f)+1;isFinite(f)||(f=1,p=1);var m=h-f/2;l=[m,m+p*f]}else l=s;return r.calc(t,e,{vals:l,cLetter:\"z\"}),n}},{\"../../components/colorscale\":655,\"../heatmap/calc\":1066,\"./end_plus\":1019,\"./set_contours\":1027}],1010:[function(t,e,n){\"use strict\";e.exports=function(t,e){var n,r=t[0],i=r.z;switch(e.type){case\"levels\":var a=Math.min(i[0][0],i[0][1]);for(n=0;n<t.length;n++){var o=t[n];o.prefixBoundary=!o.edgepaths.length&&(a>o.level||o.starts.length&&a===o.level)}break;case\"constraint\":if(r.prefixBoundary=!1,r.edgepaths.length)return;var s=r.x.length,l=r.y.length,c=-1/0,u=1/0;for(n=0;n<l;n++)u=Math.min(u,i[n][0]),u=Math.min(u,i[n][s-1]),c=Math.max(c,i[n][0]),c=Math.max(c,i[n][s-1]);for(n=1;n<s-1;n++)u=Math.min(u,i[0][n]),u=Math.min(u,i[l-1][n]),c=Math.max(c,i[0][n]),c=Math.max(c,i[l-1][n]);var h,d,f=e.value;switch(e._operation){case\">\":f>c&&(r.prefixBoundary=!0);break;case\"<\":(f<u||r.starts.length&&f===u)&&(r.prefixBoundary=!0);break;case\"[]\":h=Math.min(f[0],f[1]),((d=Math.max(f[0],f[1]))<u||h>c||r.starts.length&&d===u)&&(r.prefixBoundary=!0);break;case\"][\":h=Math.min(f[0],f[1]),d=Math.max(f[0],f[1]),h<u&&d>c&&(r.prefixBoundary=!0)}}}},{}],1011:[function(t,e,n){\"use strict\";var r=t(\"../../components/colorscale\"),i=t(\"./make_color_map\"),a=t(\"./end_plus\");e.exports={min:\"zmin\",max:\"zmax\",calc:function(t,e,n){var o=e.contours,s=e.line,l=o.size||1,c=o.coloring,u=i(e,{isColorbar:!0});if(\"heatmap\"===c){var h=r.extractOpts(e);n._fillgradient=h.reversescale?r.flipScale(h.colorscale):h.colorscale,n._zrange=[h.min,h.max]}else\"fill\"===c&&(n._fillcolor=u);n._line={color:\"lines\"===c?u:s.color,width:!1!==o.showlines?s.width:0,dash:s.dash},n._levels={start:o.start,end:a(o),size:l}}}},{\"../../components/colorscale\":655,\"./end_plus\":1019,\"./make_color_map\":1024}],1012:[function(t,e,n){\"use strict\";e.exports={BOTTOMSTART:[1,9,13,104,713],TOPSTART:[4,6,7,104,713],LEFTSTART:[8,12,14,208,1114],RIGHTSTART:[2,3,11,208,1114],NEWDELTA:[null,[-1,0],[0,-1],[-1,0],[1,0],null,[0,-1],[-1,0],[0,1],[0,1],null,[0,1],[1,0],[1,0],[0,-1]],CHOOSESADDLE:{104:[4,1],208:[2,8],713:[7,13],1114:[11,14]},SADDLEREMAINDER:{1:4,2:8,4:1,7:13,8:2,11:14,13:7,14:11},LABELDISTANCE:2,LABELINCREASE:10,LABELMIN:3,LABELMAX:10,LABELOPTIMIZER:{EDGECOST:1,ANGLECOST:1,NEIGHBORCOST:5,SAMELEVELFACTOR:10,SAMELEVELDISTANCE:5,MAXCOST:100,INITIALSEARCHPOINTS:10,ITERATIONS:5}}},{}],1013:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"./label_defaults\"),a=t(\"../../components/color\"),o=a.addOpacity,s=a.opacity,l=t(\"../../constants/filter_ops\"),c=l.CONSTRAINT_REDUCTION,u=l.COMPARISON_OPS2;e.exports=function(t,e,n,a,l,h){var d,f,p,m=e.contours,g=n(\"contours.operation\");m._operation=c[g],function(t,e){var n;-1===u.indexOf(e.operation)?(t(\"contours.value\",[0,1]),Array.isArray(e.value)?e.value.length>2?e.value=e.value.slice(2):0===e.length?e.value=[0,1]:e.length<2?(n=parseFloat(e.value[0]),e.value=[n,n+1]):e.value=[parseFloat(e.value[0]),parseFloat(e.value[1])]:r(e.value)&&(n=parseFloat(e.value),e.value=[n,n+1])):(t(\"contours.value\",0),r(e.value)||(e.value=Array.isArray(e.value)?parseFloat(e.value[0]):0))}(n,m),\"=\"===g?d=m.showlines=!0:(d=n(\"contours.showlines\"),p=n(\"fillcolor\",o((t.line||{}).color||l,.5))),d&&(f=n(\"line.color\",p&&s(p)?o(e.fillcolor,1):l),n(\"line.width\",2),n(\"line.dash\")),n(\"line.smoothing\"),i(n,a,f,h)}},{\"../../components/color\":643,\"../../constants/filter_ops\":749,\"./label_defaults\":1023,\"fast-isnumeric\":241}],1014:[function(t,e,n){\"use strict\";var r=t(\"../../constants/filter_ops\"),i=t(\"fast-isnumeric\");function a(t,e){var n,a=Array.isArray(e);function o(t){return i(t)?+t:null}return-1!==r.COMPARISON_OPS2.indexOf(t)?n=o(a?e[0]:e):-1!==r.INTERVAL_OPS.indexOf(t)?n=a?[o(e[0]),o(e[1])]:[o(e),o(e)]:-1!==r.SET_OPS.indexOf(t)&&(n=a?e.map(o):[o(e)]),n}function o(t){return function(e){e=a(t,e);var n=Math.min(e[0],e[1]),r=Math.max(e[0],e[1]);return{start:n,end:r,size:r-n}}}function s(t){return function(e){return{start:e=a(t,e),end:1/0,size:1/0}}}e.exports={\"[]\":o(\"[]\"),\"][\":o(\"][\"),\">\":s(\">\"),\"<\":s(\"<\"),\"=\":s(\"=\")}},{\"../../constants/filter_ops\":749,\"fast-isnumeric\":241}],1015:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,r){var i=r(\"contours.start\"),a=r(\"contours.end\"),o=!1===i||!1===a,s=n(\"contours.size\");!(o?e.autocontour=!0:n(\"autocontour\",!1))&&s||n(\"ncontours\")}},{}],1016:[function(t,e,n){\"use strict\";var r=t(\"../../lib\");function i(t){return r.extendFlat({},t,{edgepaths:r.extendDeep([],t.edgepaths),paths:r.extendDeep([],t.paths),starts:r.extendDeep([],t.starts)})}e.exports=function(t,e){var n,a,o,s=function(t){return t.reverse()},l=function(t){return t};switch(e){case\"=\":case\"<\":return t;case\">\":for(1!==t.length&&r.warn(\"Contour data invalid for the specified inequality operation.\"),a=t[0],n=0;n<a.edgepaths.length;n++)a.edgepaths[n]=s(a.edgepaths[n]);for(n=0;n<a.paths.length;n++)a.paths[n]=s(a.paths[n]);for(n=0;n<a.starts.length;n++)a.starts[n]=s(a.starts[n]);return t;case\"][\":var c=s;s=l,l=c;case\"[]\":for(2!==t.length&&r.warn(\"Contour data invalid for the specified inequality range operation.\"),a=i(t[0]),o=i(t[1]),n=0;n<a.edgepaths.length;n++)a.edgepaths[n]=s(a.edgepaths[n]);for(n=0;n<a.paths.length;n++)a.paths[n]=s(a.paths[n]);for(n=0;n<a.starts.length;n++)a.starts[n]=s(a.starts[n]);for(;o.edgepaths.length;)a.edgepaths.push(l(o.edgepaths.shift()));for(;o.paths.length;)a.paths.push(l(o.paths.shift()));for(;o.starts.length;)a.starts.push(l(o.starts.shift()));return[a]}}},{\"../../lib\":778}],1017:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../heatmap/xyz_defaults\"),a=t(\"../scatter/period_defaults\"),o=t(\"./constraint_defaults\"),s=t(\"./contours_defaults\"),l=t(\"./style_defaults\"),c=t(\"./attributes\");e.exports=function(t,e,n,u){function h(n,i){return r.coerce(t,e,c,n,i)}if(i(t,e,h,u)){a(t,e,u,h),h(\"text\"),h(\"hovertext\"),h(\"hovertemplate\"),h(\"hoverongaps\");var d=\"constraint\"===h(\"contours.type\");h(\"connectgaps\",r.isArray1D(e.z)),d?o(t,e,h,u,n):(s(t,e,h,(function(n){return r.coerce2(t,e,c,n)})),l(t,e,h,u))}else e.visible=!1}},{\"../../lib\":778,\"../heatmap/xyz_defaults\":1079,\"../scatter/period_defaults\":1207,\"./attributes\":1008,\"./constraint_defaults\":1013,\"./contours_defaults\":1015,\"./style_defaults\":1029}],1018:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./constraint_mapping\"),a=t(\"./end_plus\");e.exports=function(t,e,n){for(var o=\"constraint\"===t.type?i[t._operation](t.value):t,s=o.size,l=[],c=a(o),u=n.trace._carpetTrace,h=u?{xaxis:u.aaxis,yaxis:u.baxis,x:n.a,y:n.b}:{xaxis:e.xaxis,yaxis:e.yaxis,x:n.x,y:n.y},d=o.start;d<c;d+=s)if(l.push(r.extendFlat({level:d,crossings:{},starts:[],edgepaths:[],paths:[],z:n.z,smoothing:n.trace.line.smoothing},h)),l.length>1e3){r.warn(\"Too many contours, clipping at 1000\",t);break}return l}},{\"../../lib\":778,\"./constraint_mapping\":1014,\"./end_plus\":1019}],1019:[function(t,e,n){\"use strict\";e.exports=function(t){return t.end+t.size/1e6}},{}],1020:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./constants\");function a(t,e,n,r){return Math.abs(t[0]-e[0])<n&&Math.abs(t[1]-e[1])<r}function o(t,e,n,o,l){var c,u=e.join(\",\"),h=t.crossings[u],d=function(t,e,n){var r=0,a=0;return t>20&&e?208===t||1114===t?r=0===n[0]?1:-1:a=0===n[1]?1:-1:-1!==i.BOTTOMSTART.indexOf(t)?a=1:-1!==i.LEFTSTART.indexOf(t)?r=1:-1!==i.TOPSTART.indexOf(t)?a=-1:r=-1,[r,a]}(h,n,e),f=[s(t,e,[-d[0],-d[1]])],p=t.z.length,m=t.z[0].length,g=e.slice(),y=d.slice();for(c=0;c<1e4;c++){if(h>20?t.crossings[u]=i.SADDLEREMAINDER[h=i.CHOOSESADDLE[h][(d[0]||d[1])<0?0:1]]:delete t.crossings[u],!(d=i.NEWDELTA[h])){r.log(\"Found bad marching index:\",h,e,t.level);break}if(f.push(s(t,e,d)),e[0]+=d[0],e[1]+=d[1],u=e.join(\",\"),a(f[f.length-1],f[f.length-2],o,l)&&f.pop(),e[0]===g[0]&&e[1]===g[1]&&d[0]===y[0]&&d[1]===y[1]||n&&(d[0]&&(e[0]<0||e[0]>m-2)||d[1]&&(e[1]<0||e[1]>p-2)))break;h=t.crossings[u]}1e4===c&&r.log(\"Infinite loop in contour?\");var v,_,b,x,w,k,M,T,S,A,L,C,E,O,D,I=a(f[0],f[f.length-1],o,l),P=0,R=.2*t.smoothing,z=[],j=0;for(c=1;c<f.length;c++)P+=(void 0,void 0,O=(C=f[c])[2]-(E=f[c-1])[2],D=C[3]-E[3],M=Math.sqrt(O*O+D*D)),z.push(M);var F=P/z.length*R;function N(t){return f[t%f.length]}for(c=f.length-2;c>=j;c--)if((v=z[c])<F){for(b=0,_=c-1;_>=j&&v+z[_]<F;_--)v+=z[_];if(I&&c===f.length-2)for(b=0;b<_&&v+z[b]<F;b++)v+=z[b];w=c-_+b+1,k=Math.floor((c+_+b+2)/2),x=I||c!==f.length-2?I||-1!==_?w%2?N(k):[(N(k)[0]+N(k+1)[0])/2,(N(k)[1]+N(k+1)[1])/2]:f[0]:f[f.length-1],f.splice(_+1,c-_+1,x),c=_+1,b&&(j=b),I&&(c===f.length-2?f[b]=f[f.length-1]:0===c&&(f[f.length-1]=f[0]))}for(f.splice(0,j),c=0;c<f.length;c++)f[c].length=2;if(!(f.length<2))if(I)f.pop(),t.paths.push(f);else{n||r.log(\"Unclosed interior contour?\",t.level,g.join(\",\"),f.join(\"L\"));var B=!1;for(T=0;T<t.edgepaths.length;T++)if(A=t.edgepaths[T],!B&&a(A[0],f[f.length-1],o,l)){f.pop(),B=!0;var Y=!1;for(S=0;S<t.edgepaths.length;S++)if(a((L=t.edgepaths[S])[L.length-1],f[0],o,l)){Y=!0,f.shift(),t.edgepaths.splice(T,1),S===T?t.paths.push(f.concat(L)):(S>T&&S--,t.edgepaths[S]=L.concat(f,A));break}Y||(t.edgepaths[T]=f.concat(A))}for(T=0;T<t.edgepaths.length&&!B;T++)a((A=t.edgepaths[T])[A.length-1],f[0],o,l)&&(f.shift(),t.edgepaths[T]=A.concat(f),B=!0);B||t.edgepaths.push(f)}}function s(t,e,n){var r=e[0]+Math.max(n[0],0),i=e[1]+Math.max(n[1],0),a=t.z[i][r],o=t.xaxis,s=t.yaxis;if(n[1]){var l=(t.level-a)/(t.z[i][r+1]-a);return[o.c2p((1-l)*t.x[r]+l*t.x[r+1],!0),s.c2p(t.y[i],!0),r+l,i]}var c=(t.level-a)/(t.z[i+1][r]-a);return[o.c2p(t.x[r],!0),s.c2p((1-c)*t.y[i]+c*t.y[i+1],!0),r,i+c]}e.exports=function(t,e,n){var i,a,s,l;for(e=e||.01,n=n||.01,a=0;a<t.length;a++){for(s=t[a],l=0;l<s.starts.length;l++)o(s,s.starts[l],\"edge\",e,n);for(i=0;Object.keys(s.crossings).length&&i<1e4;)i++,o(s,Object.keys(s.crossings)[0].split(\",\").map(Number),void 0,e,n);1e4===i&&r.log(\"Infinite loop in contour?\")}}},{\"../../lib\":778,\"./constants\":1012}],1021:[function(t,e,n){\"use strict\";var r=t(\"../../components/color\"),i=t(\"../heatmap/hover\");e.exports=function(t,e,n,a,o){var s=i(t,e,n,a,o,!0);return s&&s.forEach((function(t){var e=t.trace;\"constraint\"===e.contours.type&&(e.fillcolor&&r.opacity(e.fillcolor)?t.color=r.addOpacity(e.fillcolor,1):e.contours.showlines&&r.opacity(e.line.color)&&(t.color=r.addOpacity(e.line.color,1)))})),s}},{\"../../components/color\":643,\"../heatmap/hover\":1072}],1022:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),calc:t(\"./calc\"),plot:t(\"./plot\").plot,style:t(\"./style\"),colorbar:t(\"./colorbar\"),hoverPoints:t(\"./hover\"),moduleType:\"trace\",name:\"contour\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"2dMap\",\"contour\",\"showLegend\"],meta:{}}},{\"../../plots/cartesian\":841,\"./attributes\":1008,\"./calc\":1009,\"./colorbar\":1011,\"./defaults\":1017,\"./hover\":1021,\"./plot\":1026,\"./style\":1028}],1023:[function(t,e,n){\"use strict\";var r=t(\"../../lib\");e.exports=function(t,e,n,i){if(i||(i={}),t(\"contours.showlabels\")){var a=e.font;r.coerceFont(t,\"contours.labelfont\",{family:a.family,size:a.size,color:n}),t(\"contours.labelformat\")}!1!==i.hasHover&&t(\"zhoverformat\")}},{\"../../lib\":778}],1024:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../components/colorscale\"),a=t(\"./end_plus\");e.exports=function(t){var e=t.contours,n=e.start,o=a(e),s=e.size||1,l=Math.floor((o-n)/s)+1,c=\"lines\"===e.coloring?0:1,u=i.extractOpts(t);isFinite(s)||(s=1,l=1);var h,d,f=u.reversescale?i.flipScale(u.colorscale):u.colorscale,p=f.length,m=new Array(p),g=new Array(p);if(\"heatmap\"===e.coloring){var y=u.min,v=u.max;for(d=0;d<p;d++)m[d]=(h=f[d])[0]*(v-y)+y,g[d]=h[1];var _=r.extent([y,v,e.start,e.start+s*(l-1)]),b=_[y<v?0:1],x=_[y<v?1:0];b!==y&&(m.splice(0,0,b),g.splice(0,0,g[0])),x!==v&&(m.push(x),g.push(g[g.length-1]))}else for(d=0;d<p;d++)m[d]=((h=f[d])[0]*(l+c-1)-c/2)*s+n,g[d]=h[1];return i.makeColorScaleFunc({domain:m,range:g},{noNumericCheck:!0})}},{\"../../components/colorscale\":655,\"./end_plus\":1019,d3:169}],1025:[function(t,e,n){\"use strict\";var r=t(\"./constants\");function i(t,e){var n=(e[0][0]>t?0:1)+(e[0][1]>t?0:2)+(e[1][1]>t?0:4)+(e[1][0]>t?0:8);return 5===n||10===n?t>(e[0][0]+e[0][1]+e[1][0]+e[1][1])/4?5===n?713:1114:5===n?104:208:15===n?0:n}e.exports=function(t){var e,n,a,o,s,l,c,u,h,d=t[0].z,f=d.length,p=d[0].length,m=2===f||2===p;for(n=0;n<f-1;n++)for(o=[],0===n&&(o=o.concat(r.BOTTOMSTART)),n===f-2&&(o=o.concat(r.TOPSTART)),e=0;e<p-1;e++)for(a=o.slice(),0===e&&(a=a.concat(r.LEFTSTART)),e===p-2&&(a=a.concat(r.RIGHTSTART)),s=e+\",\"+n,l=[[d[n][e],d[n][e+1]],[d[n+1][e],d[n+1][e+1]]],h=0;h<t.length;h++)(c=i((u=t[h]).level,l))&&(u.crossings[s]=c,-1!==a.indexOf(c)&&(u.starts.push([e,n]),m&&-1!==a.indexOf(c,a.indexOf(c)+1)&&u.starts.push([e,n])))}},{\"./constants\":1012}],1026:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../lib\"),a=t(\"../../components/drawing\"),o=t(\"../../components/colorscale\"),s=t(\"../../lib/svg_text_utils\"),l=t(\"../../plots/cartesian/axes\"),c=t(\"../../plots/cartesian/set_convert\"),u=t(\"../heatmap/plot\"),h=t(\"./make_crossings\"),d=t(\"./find_all_paths\"),f=t(\"./empty_pathinfo\"),p=t(\"./convert_to_constraints\"),m=t(\"./close_boundaries\"),g=t(\"./constants\"),y=g.LABELOPTIMIZER;function v(t,e){var n,r,o,s,l,c,u=\"\",h=0,d=t.edgepaths.map((function(t,e){return e})),f=!0;function p(t){return Math.abs(t[1]-e[2][1])<.01}function m(t){return Math.abs(t[0]-e[2][0])<.01}for(;d.length;){for(c=a.smoothopen(t.edgepaths[h],t.smoothing),u+=f?c:c.replace(/^M/,\"L\"),d.splice(d.indexOf(h),1),n=t.edgepaths[h][t.edgepaths[h].length-1],s=-1,o=0;o<4;o++){if(!n){i.log(\"Missing end?\",h,t);break}for(Math.abs(n[1]-e[0][1])<.01&&!m(n)?r=e[1]:Math.abs(n[0]-e[0][0])<.01?r=e[0]:p(n)?r=e[3]:m(n)&&(r=e[2]),l=0;l<t.edgepaths.length;l++){var g=t.edgepaths[l][0];Math.abs(n[0]-r[0])<.01?Math.abs(n[0]-g[0])<.01&&(g[1]-n[1])*(r[1]-g[1])>=0&&(r=g,s=l):Math.abs(n[1]-r[1])<.01?Math.abs(n[1]-g[1])<.01&&(g[0]-n[0])*(r[0]-g[0])>=0&&(r=g,s=l):i.log(\"endpt to newendpt is not vert. or horz.\",n,r,g)}if(n=r,s>=0)break;u+=\"L\"+r}if(s===t.edgepaths.length){i.log(\"unclosed perimeter path\");break}(f=-1===d.indexOf(h=s))&&(h=d[0],u+=\"Z\")}for(h=0;h<t.paths.length;h++)u+=a.smoothclosed(t.paths[h],t.smoothing);return u}function _(t,e,n,r){var a=e.width/2,o=e.height/2,s=t.x,l=t.y,c=t.theta,u=Math.cos(c)*a,h=Math.sin(c)*a,d=(s>r.center?r.right-s:s-r.left)/(u+Math.abs(Math.sin(c)*o)),f=(l>r.middle?r.bottom-l:l-r.top)/(Math.abs(h)+Math.cos(c)*o);if(d<1||f<1)return 1/0;var p=y.EDGECOST*(1/(d-1)+1/(f-1));p+=y.ANGLECOST*c*c;for(var m=s-u,g=l-h,v=s+u,_=l+h,b=0;b<n.length;b++){var x=n[b],w=Math.cos(x.theta)*x.width/2,k=Math.sin(x.theta)*x.width/2,M=2*i.segmentDistance(m,g,v,_,x.x-w,x.y-k,x.x+w,x.y+k)/(e.height+x.height),T=x.level===e.level,S=T?y.SAMELEVELDISTANCE:1;if(M<=S)return 1/0;p+=y.NEIGHBORCOST*(T?y.SAMELEVELFACTOR:1)/(M-S)}return p}function b(t){var e,n,r=t.trace._emptypoints,i=[],a=t.z.length,o=t.z[0].length,s=[];for(e=0;e<o;e++)s.push(1);for(e=0;e<a;e++)i.push(s.slice());for(e=0;e<r.length;e++)i[(n=r[e])[0]][n[1]]=0;return t.zmask=i,i}n.plot=function(t,e,o,s){var l=e.xaxis,c=e.yaxis;i.makeTraceGroups(s,o,\"contour\").each((function(o){var s=r.select(this),y=o[0],_=y.x,x=y.y,w=y.trace.contours,k=f(w,e,y),M=i.ensureSingle(s,\"g\",\"heatmapcoloring\"),T=[];\"heatmap\"===w.coloring&&(T=[o]),u(t,e,T,M),h(k),d(k);var S=l.c2p(_[0],!0),A=l.c2p(_[_.length-1],!0),L=c.c2p(x[0],!0),C=c.c2p(x[x.length-1],!0),E=[[S,C],[A,C],[A,L],[S,L]],O=k;\"constraint\"===w.type&&(O=p(k,w._operation)),function(t,e,n){var r=i.ensureSingle(t,\"g\",\"contourbg\").selectAll(\"path\").data(\"fill\"===n.coloring?[0]:[]);r.enter().append(\"path\"),r.exit().remove(),r.attr(\"d\",\"M\"+e.join(\"L\")+\"Z\").style(\"stroke\",\"none\")}(s,E,w),function(t,e,n,a){var o=\"fill\"===a.coloring||\"constraint\"===a.type&&\"=\"!==a._operation,s=\"M\"+n.join(\"L\")+\"Z\";o&&m(e,a);var l=i.ensureSingle(t,\"g\",\"contourfill\").selectAll(\"path\").data(o?e:[]);l.enter().append(\"path\"),l.exit().remove(),l.each((function(t){var e=(t.prefixBoundary?s:\"\")+v(t,n);e?r.select(this).attr(\"d\",e).style(\"stroke\",\"none\"):r.select(this).remove()}))}(s,O,E,w),function(t,e,o,s,l){var c=i.ensureSingle(t,\"g\",\"contourlines\"),u=!1!==l.showlines,h=l.showlabels,d=u&&h,f=n.createLines(c,u||h,e),p=n.createLineClip(c,d,o,s.trace.uid),m=t.selectAll(\"g.contourlabels\").data(h?[0]:[]);if(m.exit().remove(),m.enter().append(\"g\").classed(\"contourlabels\",!0),h){var y=[],v=[];i.clearLocationCache();var _=n.labelFormatter(o,s),b=a.tester.append(\"text\").attr(\"data-notex\",1).call(a.font,l.labelfont),x=e[0].xaxis,w=e[0].yaxis,k=x._length,M=w._length,T=x.range,S=w.range,A=i.aggNums(Math.min,null,s.x),L=i.aggNums(Math.max,null,s.x),C=i.aggNums(Math.min,null,s.y),E=i.aggNums(Math.max,null,s.y),O=Math.max(x.c2p(A,!0),0),D=Math.min(x.c2p(L,!0),k),I=Math.max(w.c2p(E,!0),0),P=Math.min(w.c2p(C,!0),M),R={};T[0]<T[1]?(R.left=O,R.right=D):(R.left=D,R.right=O),S[0]<S[1]?(R.top=I,R.bottom=P):(R.top=P,R.bottom=I),R.middle=(R.top+R.bottom)/2,R.center=(R.left+R.right)/2,y.push([[R.left,R.top],[R.right,R.top],[R.right,R.bottom],[R.left,R.bottom]]);var z=Math.sqrt(k*k+M*M),j=g.LABELDISTANCE*z/Math.max(1,e.length/g.LABELINCREASE);f.each((function(t){var e=n.calcTextOpts(t.level,_,b,o);r.select(this).selectAll(\"path\").each((function(){var t=i.getVisibleSegment(this,R,e.height/2);if(t&&!(t.len<(e.width+e.height)*g.LABELMIN))for(var r=Math.min(Math.ceil(t.len/j),g.LABELMAX),a=0;a<r;a++){var o=n.findBestTextLocation(this,t,e,v,R);if(!o)break;n.addLabelData(o,e,v,y)}}))})),b.remove(),n.drawLabels(m,v,o,p,d?y:null)}h&&!u&&f.remove()}(s,k,t,y,w),function(t,e,n,r,o){var s=r.trace,l=\"clip\"+s.uid,c=n._fullLayout._clips.selectAll(\"#\"+l).data(s.connectgaps?[]:[0]);if(c.enter().append(\"clipPath\").classed(\"contourclip\",!0).attr(\"id\",l),c.exit().remove(),!1===s.connectgaps){var u={level:.9,crossings:{},starts:[],edgepaths:[],paths:[],xaxis:e.xaxis,yaxis:e.yaxis,x:r.x,y:r.y,z:b(r),smoothing:0};h([u]),d([u]),m([u],{type:\"levels\"}),i.ensureSingle(c,\"path\",\"\").attr(\"d\",(u.prefixBoundary?\"M\"+o.join(\"L\")+\"Z\":\"\")+v(u,o))}else l=null;a.setClipUrl(t,l,n)}(s,e,t,y,E)}))},n.createLines=function(t,e,n){var r=n[0].smoothing,i=t.selectAll(\"g.contourlevel\").data(e?n:[]);if(i.exit().remove(),i.enter().append(\"g\").classed(\"contourlevel\",!0),e){var o=i.selectAll(\"path.openline\").data((function(t){return t.pedgepaths||t.edgepaths}));o.exit().remove(),o.enter().append(\"path\").classed(\"openline\",!0),o.attr(\"d\",(function(t){return a.smoothopen(t,r)})).style(\"stroke-miterlimit\",1).style(\"vector-effect\",\"non-scaling-stroke\");var s=i.selectAll(\"path.closedline\").data((function(t){return t.ppaths||t.paths}));s.exit().remove(),s.enter().append(\"path\").classed(\"closedline\",!0),s.attr(\"d\",(function(t){return a.smoothclosed(t,r)})).style(\"stroke-miterlimit\",1).style(\"vector-effect\",\"non-scaling-stroke\")}return i},n.createLineClip=function(t,e,n,r){var i=e?\"clipline\"+r:null,o=n._fullLayout._clips.selectAll(\"#\"+i).data(e?[0]:[]);return o.exit().remove(),o.enter().append(\"clipPath\").classed(\"contourlineclip\",!0).attr(\"id\",i),a.setClipUrl(t,i,n),o},n.labelFormatter=function(t,e){var n=t._fullLayout,r=e.trace,i=r.contours,a={type:\"linear\",_id:\"ycontour\",showexponent:\"all\",exponentformat:\"B\"};if(i.labelformat)a.tickformat=i.labelformat,c(a,n);else{var s=o.extractOpts(r);if(s&&s.colorbar&&s.colorbar._axis)a=s.colorbar._axis;else{if(\"constraint\"===i.type){var u=i.value;a.range=Array.isArray(u)?[u[0],u[u.length-1]]:[u,u]}else a.range=[i.start,i.end],a.nticks=(i.end-i.start)/i.size;a.range[0]===a.range[1]&&(a.range[1]+=a.range[0]||1),a.nticks||(a.nticks=1e3),c(a,n),l.prepTicks(a),a._tmin=null,a._tmax=null}}return function(t){return l.tickText(a,t).text}},n.calcTextOpts=function(t,e,n,r){var i=e(t);n.text(i).call(s.convertToTspans,r);var o=n.node(),l=a.bBox(o,!0);return{text:i,width:l.width,height:l.height,fontSize:+o.style[\"font-size\"].replace(\"px\",\"\"),level:t,dy:(l.top+l.bottom)/2}},n.findBestTextLocation=function(t,e,n,r,a){var o,s,l,c,u,h=n.width;e.isClosed?(o=e.min+(s=e.len/y.INITIALSEARCHPOINTS)/2,l=e.max):(o=e.min+(s=(e.len-h)/(y.INITIALSEARCHPOINTS+1))+h/2,l=e.max-(s+h)/2);for(var d=1/0,f=0;f<y.ITERATIONS;f++){for(var p=o;p<l;p+=s){var m=i.getTextLocation(t,e.total,p,h),g=_(m,n,r,a);g<d&&(d=g,u=m,c=p)}if(d>2*y.MAXCOST)break;f&&(s/=2),l=(o=c-s/2)+1.5*s}if(d<=y.MAXCOST)return u},n.addLabelData=function(t,e,n,r){var i=e.fontSize,a=e.width+i/3,o=Math.max(0,e.height-i/3),s=t.x,l=t.y,c=t.theta,u=Math.sin(c),h=Math.cos(c),d=function(t,e){return[s+t*h-e*u,l+t*u+e*h]},f=[d(-a/2,-o/2),d(-a/2,o/2),d(a/2,o/2),d(a/2,-o/2)];n.push({text:e.text,x:s,y:l,dy:e.dy,theta:c,level:e.level,width:a,height:o}),r.push(f)},n.drawLabels=function(t,e,n,a,o){var l=t.selectAll(\"text\").data(e,(function(t){return t.text+\",\"+t.x+\",\"+t.y+\",\"+t.theta}));if(l.exit().remove(),l.enter().append(\"text\").attr({\"data-notex\":1,\"text-anchor\":\"middle\"}).each((function(t){var e=t.x+Math.sin(t.theta)*t.dy,i=t.y-Math.cos(t.theta)*t.dy;r.select(this).text(t.text).attr({x:e,y:i,transform:\"rotate(\"+180*t.theta/Math.PI+\" \"+e+\" \"+i+\")\"}).call(s.convertToTspans,n)})),o){for(var c=\"\",u=0;u<o.length;u++)c+=\"M\"+o[u].join(\"L\")+\"Z\";i.ensureSingle(a,\"path\",\"\").attr(\"d\",c)}}},{\"../../components/colorscale\":655,\"../../components/drawing\":665,\"../../lib\":778,\"../../lib/svg_text_utils\":803,\"../../plots/cartesian/axes\":828,\"../../plots/cartesian/set_convert\":848,\"../heatmap/plot\":1076,\"./close_boundaries\":1010,\"./constants\":1012,\"./convert_to_constraints\":1016,\"./empty_pathinfo\":1018,\"./find_all_paths\":1020,\"./make_crossings\":1025,d3:169}],1027:[function(t,e,n){\"use strict\";var r=t(\"../../plots/cartesian/axes\"),i=t(\"../../lib\");function a(t,e,n){var i={type:\"linear\",range:[t,e]};return r.autoTicks(i,(e-t)/(n||15)),i}e.exports=function(t,e){var n=t.contours;if(t.autocontour){var o=t.zmin,s=t.zmax;(t.zauto||void 0===o)&&(o=i.aggNums(Math.min,null,e)),(t.zauto||void 0===s)&&(s=i.aggNums(Math.max,null,e));var l=a(o,s,t.ncontours);n.size=l.dtick,n.start=r.tickFirst(l),l.range.reverse(),n.end=r.tickFirst(l),n.start===o&&(n.start+=n.size),n.end===s&&(n.end-=n.size),n.start>n.end&&(n.start=n.end=(n.start+n.end)/2),t._input.contours||(t._input.contours={}),i.extendFlat(t._input.contours,{start:n.start,end:n.end,size:n.size}),t._input.autocontour=!0}else if(\"constraint\"!==n.type){var c,u=n.start,h=n.end,d=t._input.contours;u>h&&(n.start=d.start=h,h=n.end=d.end=u,u=n.start),n.size>0||(c=u===h?1:a(u,h,t.ncontours).dtick,d.size=n.size=c)}}},{\"../../lib\":778,\"../../plots/cartesian/axes\":828}],1028:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../components/drawing\"),a=t(\"../heatmap/style\"),o=t(\"./make_color_map\");e.exports=function(t){var e=r.select(t).selectAll(\"g.contour\");e.style(\"opacity\",(function(t){return t[0].trace.opacity})),e.each((function(t){var e=r.select(this),n=t[0].trace,a=n.contours,s=n.line,l=a.size||1,c=a.start,u=\"constraint\"===a.type,h=!u&&\"lines\"===a.coloring,d=!u&&\"fill\"===a.coloring,f=h||d?o(n):null;e.selectAll(\"g.contourlevel\").each((function(t){r.select(this).selectAll(\"path\").call(i.lineGroupStyle,s.width,h?f(t.level):s.color,s.dash)}));var p=a.labelfont;if(e.selectAll(\"g.contourlabels text\").each((function(t){i.font(r.select(this),{family:p.family,size:p.size,color:p.color||(h?f(t.level):s.color)})})),u)e.selectAll(\"g.contourfill path\").style(\"fill\",n.fillcolor);else if(d){var m;e.selectAll(\"g.contourfill path\").style(\"fill\",(function(t){return void 0===m&&(m=t.level),f(t.level+.5*l)})),void 0===m&&(m=c),e.selectAll(\"g.contourbg path\").style(\"fill\",f(m-.5*l))}})),a(t)}},{\"../../components/drawing\":665,\"../heatmap/style\":1077,\"./make_color_map\":1024,d3:169}],1029:[function(t,e,n){\"use strict\";var r=t(\"../../components/colorscale/defaults\"),i=t(\"./label_defaults\");e.exports=function(t,e,n,a,o){var s,l=n(\"contours.coloring\"),c=\"\";\"fill\"===l&&(s=n(\"contours.showlines\")),!1!==s&&(\"lines\"!==l&&(c=n(\"line.color\",\"#000\")),n(\"line.width\",.5),n(\"line.dash\")),\"none\"!==l&&(!0!==t.showlegend&&(e.showlegend=!1),e._dfltShowLegend=!1,r(t,e,a,n,{prefix:\"\",cLetter:\"z\"})),n(\"line.smoothing\"),i(n,a,c,o)}},{\"../../components/colorscale/defaults\":653,\"./label_defaults\":1023}],1030:[function(t,e,n){\"use strict\";var r=t(\"../heatmap/attributes\"),i=t(\"../contour/attributes\"),a=t(\"../../components/colorscale/attributes\"),o=t(\"../../lib/extend\").extendFlat,s=i.contours;e.exports=o({carpet:{valType:\"string\",editType:\"calc\"},z:r.z,a:r.x,a0:r.x0,da:r.dx,b:r.y,b0:r.y0,db:r.dy,text:r.text,hovertext:r.hovertext,transpose:r.transpose,atype:r.xtype,btype:r.ytype,fillcolor:i.fillcolor,autocontour:i.autocontour,ncontours:i.ncontours,contours:{type:s.type,start:s.start,end:s.end,size:s.size,coloring:{valType:\"enumerated\",values:[\"fill\",\"lines\",\"none\"],dflt:\"fill\",editType:\"calc\"},showlines:s.showlines,showlabels:s.showlabels,labelfont:s.labelfont,labelformat:s.labelformat,operation:s.operation,value:s.value,editType:\"calc\",impliedEdits:{autocontour:!1}},line:{color:i.line.color,width:i.line.width,dash:i.line.dash,smoothing:i.line.smoothing,editType:\"plot\"},transforms:void 0},a(\"\",{cLetter:\"z\",autoColorDflt:!1}))},{\"../../components/colorscale/attributes\":650,\"../../lib/extend\":768,\"../contour/attributes\":1008,\"../heatmap/attributes\":1065}],1031:[function(t,e,n){\"use strict\";var r=t(\"../../components/colorscale/calc\"),i=t(\"../../lib\"),a=t(\"../heatmap/convert_column_xyz\"),o=t(\"../heatmap/clean_2d_array\"),s=t(\"../heatmap/interp2d\"),l=t(\"../heatmap/find_empties\"),c=t(\"../heatmap/make_bound_array\"),u=t(\"./defaults\"),h=t(\"../carpet/lookup_carpetid\"),d=t(\"../contour/set_contours\");e.exports=function(t,e){var n=e._carpetTrace=h(t,e);if(n&&n.visible&&\"legendonly\"!==n.visible){if(!e.a||!e.b){var f=t.data[n.index],p=t.data[e.index];p.a||(p.a=f.a),p.b||(p.b=f.b),u(p,e,e._defaultColor,t._fullLayout)}var m=function(t,e){var n,u,h,d,f,p,m,g=e._carpetTrace,y=g.aaxis,v=g.baxis;y._minDtick=0,v._minDtick=0,i.isArray1D(e.z)&&a(e,y,v,\"a\",\"b\",[\"z\"]),n=e._a=e._a||e.a,d=e._b=e._b||e.b,n=n?y.makeCalcdata(e,\"_a\"):[],d=d?v.makeCalcdata(e,\"_b\"):[],u=e.a0||0,h=e.da||1,f=e.b0||0,p=e.db||1,m=e._z=o(e._z||e.z,e.transpose),e._emptypoints=l(m),s(m,e._emptypoints);var _=i.maxRowLength(m),b={a:c(e,\"scaled\"===e.xtype?\"\":n,u,h,_,y),b:c(e,\"scaled\"===e.ytype?\"\":d,f,p,m.length,v),z:m};return\"levels\"===e.contours.type&&\"none\"!==e.contours.coloring&&r(t,e,{vals:m,containerStr:\"\",cLetter:\"z\"}),[b]}(t,e);return d(e,e._z),m}}},{\"../../components/colorscale/calc\":651,\"../../lib\":778,\"../carpet/lookup_carpetid\":981,\"../contour/set_contours\":1027,\"../heatmap/clean_2d_array\":1067,\"../heatmap/convert_column_xyz\":1069,\"../heatmap/find_empties\":1071,\"../heatmap/interp2d\":1074,\"../heatmap/make_bound_array\":1075,\"./defaults\":1032}],1032:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../heatmap/xyz_defaults\"),a=t(\"./attributes\"),o=t(\"../contour/constraint_defaults\"),s=t(\"../contour/contours_defaults\"),l=t(\"../contour/style_defaults\");e.exports=function(t,e,n,c){function u(n,i){return r.coerce(t,e,a,n,i)}if(u(\"carpet\"),t.a&&t.b){if(!i(t,e,u,c,\"a\",\"b\"))return void(e.visible=!1);u(\"text\"),\"constraint\"===u(\"contours.type\")?o(t,e,u,c,n,{hasHover:!1}):(s(t,e,u,(function(n){return r.coerce2(t,e,a,n)})),l(t,e,u,c,{hasHover:!1}))}else e._defaultColor=n,e._length=null}},{\"../../lib\":778,\"../contour/constraint_defaults\":1013,\"../contour/contours_defaults\":1015,\"../contour/style_defaults\":1029,\"../heatmap/xyz_defaults\":1079,\"./attributes\":1030}],1033:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:t(\"../contour/colorbar\"),calc:t(\"./calc\"),plot:t(\"./plot\"),style:t(\"../contour/style\"),moduleType:\"trace\",name:\"contourcarpet\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"carpet\",\"contour\",\"symbols\",\"showLegend\",\"hasLines\",\"carpetDependent\",\"noHover\",\"noSortingByValue\"],meta:{}}},{\"../../plots/cartesian\":841,\"../contour/colorbar\":1011,\"../contour/style\":1028,\"./attributes\":1030,\"./calc\":1031,\"./defaults\":1032,\"./plot\":1034}],1034:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../carpet/map_1d_array\"),a=t(\"../carpet/makepath\"),o=t(\"../../components/drawing\"),s=t(\"../../lib\"),l=t(\"../contour/make_crossings\"),c=t(\"../contour/find_all_paths\"),u=t(\"../contour/plot\"),h=t(\"../contour/constants\"),d=t(\"../contour/convert_to_constraints\"),f=t(\"../contour/empty_pathinfo\"),p=t(\"../contour/close_boundaries\"),m=t(\"../carpet/lookup_carpetid\"),g=t(\"../carpet/axis_aligned_line\");function y(t,e,n){var r=t.getPointAtLength(e),i=t.getPointAtLength(n),a=i.x-r.x,o=i.y-r.y,s=Math.sqrt(a*a+o*o);return[a/s,o/s]}function v(t){var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]);return[t[0]/e,t[1]/e]}function _(t,e){var n=Math.abs(t[0]*e[0]+t[1]*e[1]);return Math.sqrt(1-n*n)/n}e.exports=function(t,e,n,b){var x=e.xaxis,w=e.yaxis;s.makeTraceGroups(b,n,\"contour\").each((function(n){var b=r.select(this),k=n[0],M=k.trace,T=M._carpetTrace=m(t,M),S=t.calcdata[T.index][0];if(T.visible&&\"legendonly\"!==T.visible){var A=k.a,L=k.b,C=M.contours,E=f(C,e,k),O=\"constraint\"===C.type,D=C._operation,I=O?\"=\"===D?\"lines\":\"fill\":C.coloring,P=[[A[0],L[L.length-1]],[A[A.length-1],L[L.length-1]],[A[A.length-1],L[0]],[A[0],L[0]]];l(E),c(E,1e-8*(A[A.length-1]-A[0]),1e-8*(L[L.length-1]-L[0]));var R,z,j,F,N=E;\"constraint\"===C.type&&(N=d(E,D)),function(t,e){var n,r,i,a,o,s,l,c,u;for(n=0;n<t.length;n++){for(o=(a=t[n]).pedgepaths=[],s=a.ppaths=[],r=0;r<a.edgepaths.length;r++){for(u=a.edgepaths[r],l=[],i=0;i<u.length;i++)l[i]=e(u[i]);o.push(l)}for(r=0;r<a.paths.length;r++){for(u=a.paths[r],c=[],i=0;i<u.length;i++)c[i]=e(u[i]);s.push(c)}}}(E,H);var B=[];for(F=S.clipsegments.length-1;F>=0;F--)z=i([],(R=S.clipsegments[F]).x,x.c2p),j=i([],R.y,w.c2p),z.reverse(),j.reverse(),B.push(a(z,j,R.bicubic));var Y=\"M\"+B.join(\"L\")+\"Z\";(function(t,e,n,r,o,l){var c,u,h,d,f=s.ensureSingle(t,\"g\",\"contourbg\").selectAll(\"path\").data(\"fill\"!==l||o?[]:[0]);f.enter().append(\"path\"),f.exit().remove();var p=[];for(d=0;d<e.length;d++)u=i([],(c=e[d]).x,n.c2p),h=i([],c.y,r.c2p),p.push(a(u,h,c.bicubic));f.attr(\"d\",\"M\"+p.join(\"L\")+\"Z\").style(\"stroke\",\"none\")})(b,S.clipsegments,x,w,O,I),function(t,e,n,i,a,l,c,u,h,d,f){var m=\"fill\"===d;m&&p(a,t.contours);var y=s.ensureSingle(e,\"g\",\"contourfill\").selectAll(\"path\").data(m?a:[]);y.enter().append(\"path\"),y.exit().remove(),y.each((function(t){var e=(t.prefixBoundary?f:\"\")+function(t,e,n,r,i,a,l,c){var u,h,d,f,p,m,y,v=\"\",_=e.edgepaths.map((function(t,e){return e})),b=!0,x=1e-4*Math.abs(n[0][0]-n[2][0]),w=1e-4*Math.abs(n[0][1]-n[2][1]);function k(t){return Math.abs(t[1]-n[0][1])<w}function M(t){return Math.abs(t[1]-n[2][1])<w}function T(t){return Math.abs(t[0]-n[0][0])<x}function S(t){return Math.abs(t[0]-n[2][0])<x}function A(t,e){var n,r,o,s,u=\"\";for(k(t)&&!S(t)||M(t)&&!T(t)?(s=i.aaxis,o=g(i,a,[t[0],e[0]],.5*(t[1]+e[1]))):(s=i.baxis,o=g(i,a,.5*(t[0]+e[0]),[t[1],e[1]])),n=1;n<o.length;n++)for(u+=s.smoothing?\"C\":\"L\",r=0;r<o[n].length;r++){var h=o[n][r];u+=[l.c2p(h[0]),c.c2p(h[1])]+\" \"}return u}for(u=0,h=null;_.length;){for(h&&(v+=A(h,e.edgepaths[u][0])),y=o.smoothopen(e.edgepaths[u].map(r),e.smoothing),v+=b?y:y.replace(/^M/,\"L\"),_.splice(_.indexOf(u),1),h=e.edgepaths[u][e.edgepaths[u].length-1],p=-1,f=0;f<4;f++){if(!h){s.log(\"Missing end?\",u,e);break}for(k(h)&&!S(h)?d=n[1]:T(h)?d=n[0]:M(h)?d=n[3]:S(h)&&(d=n[2]),m=0;m<e.edgepaths.length;m++){var L=e.edgepaths[m][0];Math.abs(h[0]-d[0])<x?Math.abs(h[0]-L[0])<x&&(L[1]-h[1])*(d[1]-L[1])>=0&&(d=L,p=m):Math.abs(h[1]-d[1])<w?Math.abs(h[1]-L[1])<w&&(L[0]-h[0])*(d[0]-L[0])>=0&&(d=L,p=m):s.log(\"endpt to newendpt is not vert. or horz.\",h,d,L)}if(p>=0)break;v+=A(h,d),h=d}if(p===e.edgepaths.length){s.log(\"unclosed perimeter path\");break}(b=-1===_.indexOf(u=p))&&(u=_[0],v+=A(h,d)+\"Z\",h=null)}for(u=0;u<e.paths.length;u++)v+=o.smoothclosed(e.paths[u].map(r),e.smoothing);return v}(0,t,l,c,u,h,n,i);e?r.select(this).attr(\"d\",e).style(\"stroke\",\"none\"):r.select(this).remove()}))}(M,b,x,w,N,P,H,T,S,I,Y),function(t,e,n,i,a,l,c){var d=s.ensureSingle(t,\"g\",\"contourlines\"),f=!1!==a.showlines,p=a.showlabels,m=f&&p,g=u.createLines(d,f||p,e),b=u.createLineClip(d,m,n,i.trace.uid),x=t.selectAll(\"g.contourlabels\").data(p?[0]:[]);if(x.exit().remove(),x.enter().append(\"g\").classed(\"contourlabels\",!0),p){var w=l.xaxis._length,k=l.yaxis._length,M=[[[0,0],[w,0],[w,k],[0,k]]],T=[];s.clearLocationCache();var S=u.labelFormatter(n,i),A=o.tester.append(\"text\").attr(\"data-notex\",1).call(o.font,a.labelfont),L={left:0,right:w,center:w/2,top:0,bottom:k,middle:k/2},C=Math.sqrt(w*w+k*k),E=h.LABELDISTANCE*C/Math.max(1,e.length/h.LABELINCREASE);g.each((function(t){var e=u.calcTextOpts(t.level,S,A,n);r.select(this).selectAll(\"path\").each((function(n){var r=this,i=s.getVisibleSegment(r,L,e.height/2);if(i&&(function(t,e,n,r,i,a){for(var o,s=0;s<n.pedgepaths.length;s++)e===n.pedgepaths[s]&&(o=n.edgepaths[s]);if(o){var l=i.a[0],c=i.a[i.a.length-1],u=i.b[0],h=i.b[i.b.length-1],d=y(t,0,1),f=y(t,r.total,r.total-1),p=g(o[0],d),m=r.total-g(o[o.length-1],f);r.min<p&&(r.min=p),r.max>m&&(r.max=m),r.len=r.max-r.min}function g(t,e){var n,r=0,o=.1;return(Math.abs(t[0]-l)<o||Math.abs(t[0]-c)<o)&&(n=v(i.dxydb_rough(t[0],t[1],o)),r=Math.max(r,a*_(e,n)/2)),(Math.abs(t[1]-u)<o||Math.abs(t[1]-h)<o)&&(n=v(i.dxyda_rough(t[0],t[1],o)),r=Math.max(r,a*_(e,n)/2)),r}}(r,n,t,i,c,e.height),!(i.len<(e.width+e.height)*h.LABELMIN)))for(var a=Math.min(Math.ceil(i.len/E),h.LABELMAX),o=0;o<a;o++){var l=u.findBestTextLocation(r,i,e,T,L);if(!l)break;u.addLabelData(l,e,T,M)}}))})),A.remove(),u.drawLabels(x,T,n,b,m?M:null)}p&&!f&&g.remove()}(b,E,t,k,C,e,T),o.setClipUrl(b,T._clipPathId,t)}function H(t){var e=T.ab2xy(t[0],t[1],!0);return[x.c2p(e[0]),w.c2p(e[1])]}}))}},{\"../../components/drawing\":665,\"../../lib\":778,\"../carpet/axis_aligned_line\":965,\"../carpet/lookup_carpetid\":981,\"../carpet/makepath\":982,\"../carpet/map_1d_array\":983,\"../contour/close_boundaries\":1010,\"../contour/constants\":1012,\"../contour/convert_to_constraints\":1016,\"../contour/empty_pathinfo\":1018,\"../contour/find_all_paths\":1020,\"../contour/make_crossings\":1025,\"../contour/plot\":1026,d3:169}],1035:[function(t,e,n){\"use strict\";var r=t(\"../../components/colorscale/attributes\"),i=t(\"../../plots/template_attributes\").hovertemplateAttrs,a=t(\"../../plots/attributes\"),o=t(\"../scattermapbox/attributes\"),s=t(\"../../lib/extend\").extendFlat;e.exports=s({lon:o.lon,lat:o.lat,z:{valType:\"data_array\",editType:\"calc\"},radius:{valType:\"number\",editType:\"plot\",arrayOk:!0,min:1,dflt:30},below:{valType:\"string\",editType:\"plot\"},text:o.text,hovertext:o.hovertext,hoverinfo:s({},a.hoverinfo,{flags:[\"lon\",\"lat\",\"z\",\"text\",\"name\"]}),hovertemplate:i(),showlegend:s({},a.showlegend,{dflt:!1})},r(\"\",{cLetter:\"z\",editTypeOverride:\"calc\"}))},{\"../../components/colorscale/attributes\":650,\"../../lib/extend\":768,\"../../plots/attributes\":824,\"../../plots/template_attributes\":906,\"../scattermapbox/attributes\":1252}],1036:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../lib\").isArrayOrTypedArray,a=t(\"../../constants/numerical\").BADNUM,o=t(\"../../components/colorscale/calc\"),s=t(\"../../lib\")._;e.exports=function(t,e){for(var n=e._length,l=new Array(n),c=e.z,u=i(c)&&c.length,h=0;h<n;h++){var d=l[h]={},f=e.lon[h],p=e.lat[h];if(d.lonlat=r(f)&&r(p)?[+f,+p]:[a,a],u){var m=c[h];d.z=r(m)?m:a}}return o(t,e,{vals:u?c:[0,1],containerStr:\"\",cLetter:\"z\"}),n&&(l[0].t={labels:{lat:s(t,\"lat:\")+\" \",lon:s(t,\"lon:\")+\" \"}}),l}},{\"../../components/colorscale/calc\":651,\"../../constants/numerical\":753,\"../../lib\":778,\"fast-isnumeric\":241}],1037:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../lib\"),a=t(\"../../components/color\"),o=t(\"../../components/colorscale\"),s=t(\"../../constants/numerical\").BADNUM,l=t(\"../../lib/geojson_utils\").makeBlank;e.exports=function(t){var e=t[0].trace,n=!0===e.visible&&0!==e._length,c=e._opts={heatmap:{layout:{visibility:\"none\"},paint:{}},geojson:l()};if(!n)return c;var u,h=[],d=e.z,f=e.radius,p=i.isArrayOrTypedArray(d)&&d.length,m=i.isArrayOrTypedArray(f);for(u=0;u<t.length;u++){var g=t[u],y=g.lonlat;if(y[0]!==s){var v={};if(p){var _=g.z;v.z=_!==s?_:0}m&&(v.r=r(f[u])&&f[u]>0?+f[u]:0),h.push({type:\"Feature\",geometry:{type:\"Point\",coordinates:y},properties:v})}}var b=o.extractOpts(e),x=b.reversescale?o.flipScale(b.colorscale):b.colorscale,w=x[0][1],k=[\"interpolate\",[\"linear\"],[\"heatmap-density\"],0,a.opacity(w)<1?w:a.addOpacity(w,0)];for(u=1;u<x.length;u++)k.push(x[u][0],x[u][1]);return i.extendFlat(c.heatmap.paint,{\"heatmap-weight\":p?[\"interpolate\",[\"linear\"],[\"get\",\"z\"],b.min,0,b.max,1]:1/(b.max-b.min),\"heatmap-color\":k,\"heatmap-radius\":m?{type:\"identity\",property:\"r\"}:e.radius,\"heatmap-opacity\":e.opacity}),c.geojson={type:\"FeatureCollection\",features:h},c.heatmap.layout.visibility=\"visible\",c}},{\"../../components/color\":643,\"../../components/colorscale\":655,\"../../constants/numerical\":753,\"../../lib\":778,\"../../lib/geojson_utils\":772,\"fast-isnumeric\":241}],1038:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../components/colorscale/defaults\"),a=t(\"./attributes\");e.exports=function(t,e,n,o){function s(n,i){return r.coerce(t,e,a,n,i)}var l=s(\"lon\")||[],c=s(\"lat\")||[],u=Math.min(l.length,c.length);u?(e._length=u,s(\"z\"),s(\"radius\"),s(\"below\"),s(\"text\"),s(\"hovertext\"),s(\"hovertemplate\"),i(t,e,o,s,{prefix:\"\",cLetter:\"z\"})):e.visible=!1}},{\"../../components/colorscale/defaults\":653,\"../../lib\":778,\"./attributes\":1035}],1039:[function(t,e,n){\"use strict\";e.exports=function(t,e){return t.lon=e.lon,t.lat=e.lat,t.z=e.z,t}},{}],1040:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../plots/cartesian/axes\"),a=t(\"../scattermapbox/hover\");e.exports=function(t,e,n){var o=a(t,e,n);if(o){var s=o[0],l=s.cd,c=l[0].trace,u=l[s.index];if(delete s.color,\"z\"in u){var h=s.subplot.mockAxis;s.z=u.z,s.zLabel=i.tickText(h,h.c2l(u.z),\"hover\").text}return s.extraText=function(t,e,n){if(!t.hovertemplate){var i=(e.hi||t.hoverinfo).split(\"+\"),a=-1!==i.indexOf(\"all\"),o=-1!==i.indexOf(\"lon\"),s=-1!==i.indexOf(\"lat\"),l=e.lonlat,c=[];return a||o&&s?c.push(\"(\"+u(l[0])+\", \"+u(l[1])+\")\"):o?c.push(n.lon+u(l[0])):s&&c.push(n.lat+u(l[1])),(a||-1!==i.indexOf(\"text\"))&&r.fillText(e,t,c),c.join(\"<br>\")}function u(t){return t+\"\\xb0\"}}(c,u,l[0].t.labels),[s]}}},{\"../../lib\":778,\"../../plots/cartesian/axes\":828,\"../scattermapbox/hover\":1257}],1041:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:t(\"../heatmap/colorbar\"),formatLabels:t(\"../scattermapbox/format_labels\"),calc:t(\"./calc\"),plot:t(\"./plot\"),hoverPoints:t(\"./hover\"),eventData:t(\"./event_data\"),getBelow:function(t,e){for(var n=e.getMapLayers(),r=0;r<n.length;r++){var i=n[r],a=i.id;if(\"symbol\"===i.type&&\"string\"==typeof a&&-1===a.indexOf(\"plotly-\"))return a}},moduleType:\"trace\",name:\"densitymapbox\",basePlotModule:t(\"../../plots/mapbox\"),categories:[\"mapbox\",\"gl\",\"showLegend\"],meta:{hr_name:\"density_mapbox\"}}},{\"../../plots/mapbox\":885,\"../heatmap/colorbar\":1068,\"../scattermapbox/format_labels\":1256,\"./attributes\":1035,\"./calc\":1036,\"./defaults\":1038,\"./event_data\":1039,\"./hover\":1040,\"./plot\":1042}],1042:[function(t,e,n){\"use strict\";var r=t(\"./convert\"),i=t(\"../../plots/mapbox/constants\").traceLayerPrefix;function a(t,e){this.type=\"densitymapbox\",this.subplot=t,this.uid=e,this.sourceId=\"source-\"+e,this.layerList=[[\"heatmap\",i+e+\"-heatmap\"]],this.below=null}var o=a.prototype;o.update=function(t){var e=this.subplot,n=this.layerList,i=r(t),a=e.belowLookup[\"trace-\"+this.uid];e.map.getSource(this.sourceId).setData(i.geojson),a!==this.below&&(this._removeLayers(),this._addLayers(i,a),this.below=a);for(var o=0;o<n.length;o++){var s=n[o],l=s[1],c=i[s[0]];e.setOptions(l,\"setLayoutProperty\",c.layout),\"visible\"===c.layout.visibility&&e.setOptions(l,\"setPaintProperty\",c.paint)}},o._addLayers=function(t,e){for(var n=this.subplot,r=this.layerList,i=this.sourceId,a=0;a<r.length;a++){var o=r[a],s=o[0],l=t[s];n.addLayer({type:s,id:o[1],source:i,layout:l.layout,paint:l.paint},e)}},o._removeLayers=function(){for(var t=this.subplot.map,e=this.layerList,n=e.length-1;n>=0;n--)t.removeLayer(e[n][1])},o.dispose=function(){var t=this.subplot.map;this._removeLayers(),t.removeSource(this.sourceId)},e.exports=function(t,e){var n=e[0].trace,i=new a(t,n.uid),o=i.sourceId,s=r(e),l=i.below=t.belowLookup[\"trace-\"+n.uid];return t.map.addSource(o,{type:\"geojson\",data:s.geojson}),i._addLayers(s,l),i}},{\"../../plots/mapbox/constants\":883,\"./convert\":1037}],1043:[function(t,e,n){\"use strict\";var r=t(\"../../lib\");e.exports=function(t,e){for(var n=0;n<t.length;n++)t[n].i=n;r.mergeArray(e.text,t,\"tx\"),r.mergeArray(e.hovertext,t,\"htx\");var i=e.marker;if(i){r.mergeArray(i.opacity,t,\"mo\"),r.mergeArray(i.color,t,\"mc\");var a=i.line;a&&(r.mergeArray(a.color,t,\"mlc\"),r.mergeArrayCastPositive(a.width,t,\"mlw\"))}}},{\"../../lib\":778}],1044:[function(t,e,n){\"use strict\";var r=t(\"../bar/attributes\"),i=t(\"../scatter/attributes\").line,a=t(\"../../plots/attributes\"),o=t(\"../../plots/template_attributes\").hovertemplateAttrs,s=t(\"../../plots/template_attributes\").texttemplateAttrs,l=t(\"./constants\"),c=t(\"../../lib/extend\").extendFlat,u=t(\"../../components/color\");e.exports={x:r.x,x0:r.x0,dx:r.dx,y:r.y,y0:r.y0,dy:r.dy,xperiod:r.xperiod,yperiod:r.yperiod,xperiod0:r.xperiod0,yperiod0:r.yperiod0,xperiodalignment:r.xperiodalignment,yperiodalignment:r.yperiodalignment,hovertext:r.hovertext,hovertemplate:o({},{keys:l.eventDataKeys}),hoverinfo:c({},a.hoverinfo,{flags:[\"name\",\"x\",\"y\",\"text\",\"percent initial\",\"percent previous\",\"percent total\"]}),textinfo:{valType:\"flaglist\",flags:[\"label\",\"text\",\"percent initial\",\"percent previous\",\"percent total\",\"value\"],extras:[\"none\"],editType:\"plot\",arrayOk:!1},texttemplate:s({editType:\"plot\"},{keys:l.eventDataKeys.concat([\"label\",\"value\"])}),text:r.text,textposition:c({},r.textposition,{dflt:\"auto\"}),insidetextanchor:c({},r.insidetextanchor,{dflt:\"middle\"}),textangle:c({},r.textangle,{dflt:0}),textfont:r.textfont,insidetextfont:r.insidetextfont,outsidetextfont:r.outsidetextfont,constraintext:r.constraintext,cliponaxis:r.cliponaxis,orientation:c({},r.orientation,{}),offset:c({},r.offset,{arrayOk:!1}),width:c({},r.width,{arrayOk:!1}),marker:r.marker,connector:{fillcolor:{valType:\"color\",editType:\"style\"},line:{color:c({},i.color,{dflt:u.defaultLine}),width:c({},i.width,{dflt:0,editType:\"plot\"}),dash:i.dash,editType:\"style\"},visible:{valType:\"boolean\",dflt:!0,editType:\"plot\"},editType:\"plot\"},offsetgroup:r.offsetgroup,alignmentgroup:r.alignmentgroup}},{\"../../components/color\":643,\"../../lib/extend\":768,\"../../plots/attributes\":824,\"../../plots/template_attributes\":906,\"../bar/attributes\":921,\"../scatter/attributes\":1187,\"./constants\":1046}],1045:[function(t,e,n){\"use strict\";var r=t(\"../../plots/cartesian/axes\"),i=t(\"../../plots/cartesian/align_period\"),a=t(\"./arrays_to_calcdata\"),o=t(\"../scatter/calc_selection\"),s=t(\"../../constants/numerical\").BADNUM;function l(t){return t===s?0:t}e.exports=function(t,e){var n,c,u,h,d,f,p=r.getFromId(t,e.xaxis||\"x\"),m=r.getFromId(t,e.yaxis||\"y\");\"h\"===e.orientation?(n=p.makeCalcdata(e,\"x\"),u=m.makeCalcdata(e,\"y\"),c=i(e,m,\"y\",u),f=!!e.yperiodalignment):(n=m.makeCalcdata(e,\"y\"),u=p.makeCalcdata(e,\"x\"),c=i(e,p,\"x\",u),f=!!e.xperiodalignment);var g,y=Math.min(c.length,n.length),v=new Array(y);for(e._base=[],h=0;h<y;h++){n[h]<0&&(n[h]=s);var _=!1;n[h]!==s&&h+1<y&&n[h+1]!==s&&(_=!0),d=v[h]={p:c[h],s:n[h],cNext:_},e._base[h]=-.5*d.s,f&&(v[h].orig_p=u[h]),e.ids&&(d.id=String(e.ids[h])),0===h&&(v[0].vTotal=0),v[0].vTotal+=l(d.s),d.begR=l(d.s)/l(v[0].s)}for(h=0;h<y;h++)(d=v[h]).s!==s&&(d.sumR=d.s/v[0].vTotal,d.difR=void 0!==g?d.s/g:1,g=d.s);return a(v,e),o(v,e),v}},{\"../../constants/numerical\":753,\"../../plots/cartesian/align_period\":825,\"../../plots/cartesian/axes\":828,\"../scatter/calc_selection\":1189,\"./arrays_to_calcdata\":1043}],1046:[function(t,e,n){\"use strict\";e.exports={eventDataKeys:[\"percentInitial\",\"percentPrevious\",\"percentTotal\"]}},{}],1047:[function(t,e,n){\"use strict\";var r=t(\"../bar/cross_trace_calc\").setGroupPositions;e.exports=function(t,e){var n,i,a=t._fullLayout,o=t._fullData,s=t.calcdata,l=e.xaxis,c=e.yaxis,u=[],h=[],d=[];for(i=0;i<o.length;i++){var f=o[i];!0===f.visible&&f.xaxis===l._id&&f.yaxis===c._id&&\"funnel\"===f.type&&(n=s[i],\"h\"===f.orientation?d.push(n):h.push(n),u.push(n))}var p={mode:a.funnelmode,norm:a.funnelnorm,gap:a.funnelgap,groupgap:a.funnelgroupgap};for(r(t,l,c,h,p),r(t,c,l,d,p),i=0;i<u.length;i++){n=u[i];for(var m=0;m<n.length;m++)m+1<n.length&&(n[m].nextP0=n[m+1].p0,n[m].nextS0=n[m+1].s0,n[m].nextP1=n[m+1].p1,n[m].nextS1=n[m+1].s1)}}},{\"../bar/cross_trace_calc\":924}],1048:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../bar/defaults\").handleGroupingDefaults,a=t(\"../bar/defaults\").handleText,o=t(\"../scatter/xy_defaults\"),s=t(\"../scatter/period_defaults\"),l=t(\"./attributes\"),c=t(\"../../components/color\");e.exports={supplyDefaults:function(t,e,n,i){function u(n,i){return r.coerce(t,e,l,n,i)}if(o(t,e,i,u)){s(t,e,i,u),u(\"orientation\",e.y&&!e.x?\"v\":\"h\"),u(\"offset\"),u(\"width\");var h=u(\"text\");u(\"hovertext\"),u(\"hovertemplate\");var d=u(\"textposition\");a(t,e,i,u,d,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),\"none\"===e.textposition||e.texttemplate||u(\"textinfo\",Array.isArray(h)?\"text+value\":\"value\");var f=u(\"marker.color\",n);u(\"marker.line.color\",c.defaultLine),u(\"marker.line.width\"),u(\"connector.visible\")&&(u(\"connector.fillcolor\",function(t){var e=r.isArrayOrTypedArray(t)?\"#000\":t;return c.addOpacity(e,.5*c.opacity(e))}(f)),u(\"connector.line.width\")&&(u(\"connector.line.color\"),u(\"connector.line.dash\")))}else e.visible=!1},crossTraceDefaults:function(t,e){var n;function a(t){return r.coerce(n._input,n,l,t)}if(\"group\"===e.funnelmode)for(var o=0;o<t.length;o++)i((n=t[o])._input,n,e,a)}}},{\"../../components/color\":643,\"../../lib\":778,\"../bar/defaults\":925,\"../scatter/period_defaults\":1207,\"../scatter/xy_defaults\":1214,\"./attributes\":1044}],1049:[function(t,e,n){\"use strict\";e.exports=function(t,e){return t.x=\"xVal\"in e?e.xVal:e.x,t.y=\"yVal\"in e?e.yVal:e.y,\"percentInitial\"in e&&(t.percentInitial=e.percentInitial),\"percentPrevious\"in e&&(t.percentPrevious=e.percentPrevious),\"percentTotal\"in e&&(t.percentTotal=e.percentTotal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t}},{}],1050:[function(t,e,n){\"use strict\";var r=t(\"../../components/color\").opacity,i=t(\"../bar/hover\").hoverOnBars,a=t(\"../../lib\").formatPercent;e.exports=function(t,e,n,o){var s=i(t,e,n,o);if(s){var l=s.cd,c=l[0].trace,u=l[s.index];s[(\"h\"===c.orientation?\"x\":\"y\")+\"LabelVal\"]=u.s,s.percentInitial=u.begR,s.percentInitialLabel=a(u.begR,1),s.percentPrevious=u.difR,s.percentPreviousLabel=a(u.difR,1),s.percentTotal=u.sumR,s.percentTotalLabel=a(u.sumR,1);var h=u.hi||c.hoverinfo,d=[];if(h&&\"none\"!==h&&\"skip\"!==h){var f=\"all\"===h,p=h.split(\"+\"),m=function(t){return f||-1!==p.indexOf(t)};m(\"percent initial\")&&d.push(s.percentInitialLabel+\" of initial\"),m(\"percent previous\")&&d.push(s.percentPreviousLabel+\" of previous\"),m(\"percent total\")&&d.push(s.percentTotalLabel+\" of total\")}return s.extraText=d.join(\"<br>\"),s.color=function(t,e){var n=t.marker,i=e.mc||n.color,a=e.mlc||n.line.color,o=e.mlw||n.line.width;return r(i)?i:r(a)&&o?a:void 0}(c,u),[s]}}},{\"../../components/color\":643,\"../../lib\":778,\"../bar/hover\":928}],1051:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),layoutAttributes:t(\"./layout_attributes\"),supplyDefaults:t(\"./defaults\").supplyDefaults,crossTraceDefaults:t(\"./defaults\").crossTraceDefaults,supplyLayoutDefaults:t(\"./layout_defaults\"),calc:t(\"./calc\"),crossTraceCalc:t(\"./cross_trace_calc\"),plot:t(\"./plot\"),style:t(\"./style\").style,hoverPoints:t(\"./hover\"),eventData:t(\"./event_data\"),selectPoints:t(\"../bar/select\"),moduleType:\"trace\",name:\"funnel\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"bar-like\",\"cartesian\",\"svg\",\"oriented\",\"showLegend\",\"zoomScale\"],meta:{}}},{\"../../plots/cartesian\":841,\"../bar/select\":933,\"./attributes\":1044,\"./calc\":1045,\"./cross_trace_calc\":1047,\"./defaults\":1048,\"./event_data\":1049,\"./hover\":1050,\"./layout_attributes\":1052,\"./layout_defaults\":1053,\"./plot\":1054,\"./style\":1055}],1052:[function(t,e,n){\"use strict\";e.exports={funnelmode:{valType:\"enumerated\",values:[\"stack\",\"group\",\"overlay\"],dflt:\"stack\",editType:\"calc\"},funnelgap:{valType:\"number\",min:0,max:1,editType:\"calc\"},funnelgroupgap:{valType:\"number\",min:0,max:1,dflt:0,editType:\"calc\"}}},{}],1053:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./layout_attributes\");e.exports=function(t,e,n){var a=!1;function o(n,a){return r.coerce(t,e,i,n,a)}for(var s=0;s<n.length;s++){var l=n[s];if(l.visible&&\"funnel\"===l.type){a=!0;break}}a&&(o(\"funnelmode\"),o(\"funnelgap\",.2),o(\"funnelgroupgap\"))}},{\"../../lib\":778,\"./layout_attributes\":1052}],1054:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../lib\"),a=t(\"../../components/drawing\"),o=t(\"../../constants/numerical\").BADNUM,s=t(\"../bar/plot\"),l=t(\"../bar/uniform_text\").clearMinTextSize;function c(t,e,n,r){var i=[],a=[],o=r?e:n,s=r?n:e;return i[0]=o.c2p(t.s0,!0),a[0]=s.c2p(t.p0,!0),i[1]=o.c2p(t.s1,!0),a[1]=s.c2p(t.p1,!0),i[2]=o.c2p(t.nextS0,!0),a[2]=s.c2p(t.nextP0,!0),i[3]=o.c2p(t.nextS1,!0),a[3]=s.c2p(t.nextP1,!0),r?[i,a]:[a,i]}e.exports=function(t,e,n,u){var h=t._fullLayout;l(\"funnel\",h),function(t,e,n,s){var l=e.xaxis,u=e.yaxis;i.makeTraceGroups(s,n,\"trace bars\").each((function(n){var s=r.select(this),h=n[0].trace,d=i.ensureSingle(s,\"g\",\"regions\");if(h.connector&&h.connector.visible){var f=\"h\"===h.orientation,p=d.selectAll(\"g.region\").data(i.identity);p.enter().append(\"g\").classed(\"region\",!0),p.exit().remove();var m=p.size();p.each((function(n,s){if(s===m-1||n.cNext){var h=c(n,l,u,f),d=h[0],p=h[1],g=\"\";d[0]!==o&&p[0]!==o&&d[1]!==o&&p[1]!==o&&d[2]!==o&&p[2]!==o&&d[3]!==o&&p[3]!==o&&(g+=f?\"M\"+d[0]+\",\"+p[1]+\"L\"+d[2]+\",\"+p[2]+\"H\"+d[3]+\"L\"+d[1]+\",\"+p[1]+\"Z\":\"M\"+d[1]+\",\"+p[1]+\"L\"+d[2]+\",\"+p[3]+\"V\"+p[2]+\"L\"+d[1]+\",\"+p[0]+\"Z\"),\"\"===g&&(g=\"M0,0Z\"),i.ensureSingle(r.select(this),\"path\").attr(\"d\",g).call(a.setClipUrl,e.layerClipId,t)}}))}else d.remove()}))}(t,e,n,u),function(t,e,n,o){var s=e.xaxis,l=e.yaxis;i.makeTraceGroups(o,n,\"trace bars\").each((function(n){var o=r.select(this),u=n[0].trace,h=i.ensureSingle(o,\"g\",\"lines\");if(u.connector&&u.connector.visible&&u.connector.line.width){var d=\"h\"===u.orientation,f=h.selectAll(\"g.line\").data(i.identity);f.enter().append(\"g\").classed(\"line\",!0),f.exit().remove();var p=f.size();f.each((function(n,o){if(o===p-1||n.cNext){var u=c(n,s,l,d),h=u[0],f=u[1],m=\"\";void 0!==h[3]&&void 0!==f[3]&&(d?(m+=\"M\"+h[0]+\",\"+f[1]+\"L\"+h[2]+\",\"+f[2],m+=\"M\"+h[1]+\",\"+f[1]+\"L\"+h[3]+\",\"+f[2]):(m+=\"M\"+h[1]+\",\"+f[1]+\"L\"+h[2]+\",\"+f[3],m+=\"M\"+h[1]+\",\"+f[0]+\"L\"+h[2]+\",\"+f[2])),\"\"===m&&(m=\"M0,0Z\"),i.ensureSingle(r.select(this),\"path\").attr(\"d\",m).call(a.setClipUrl,e.layerClipId,t)}}))}else h.remove()}))}(t,e,n,u),s.plot(t,e,n,u,{mode:h.funnelmode,norm:h.funnelmode,gap:h.funnelgap,groupgap:h.funnelgroupgap})}},{\"../../components/drawing\":665,\"../../constants/numerical\":753,\"../../lib\":778,\"../bar/plot\":932,\"../bar/uniform_text\":937,d3:169}],1055:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../components/drawing\"),a=t(\"../../components/color\"),o=t(\"../../constants/interactions\").DESELECTDIM,s=t(\"../bar/style\"),l=t(\"../bar/uniform_text\").resizeText,c=s.styleTextPoints;e.exports={style:function(t,e,n){var s=n||r.select(t).selectAll(\"g.funnellayer\").selectAll(\"g.trace\");l(t,s,\"funnel\"),s.style(\"opacity\",(function(t){return t[0].trace.opacity})),s.each((function(e){var n=r.select(this),s=e[0].trace;n.selectAll(\".point > path\").each((function(t){if(!t.isBlank){var e=s.marker;r.select(this).call(a.fill,t.mc||e.color).call(a.stroke,t.mlc||e.line.color).call(i.dashLine,e.line.dash,t.mlw||e.line.width).style(\"opacity\",s.selectedpoints&&!t.selected?o:1)}})),c(n,s,t),n.selectAll(\".regions\").each((function(){r.select(this).selectAll(\"path\").style(\"stroke-width\",0).call(a.fill,s.connector.fillcolor)})),n.selectAll(\".lines\").each((function(){var t=s.connector.line;i.lineGroupStyle(r.select(this).selectAll(\"path\"),t.width,t.color,t.dash)}))}))}}},{\"../../components/color\":643,\"../../components/drawing\":665,\"../../constants/interactions\":752,\"../bar/style\":935,\"../bar/uniform_text\":937,d3:169}],1056:[function(t,e,n){\"use strict\";var r=t(\"../pie/attributes\"),i=t(\"../../plots/attributes\"),a=t(\"../../plots/domain\").attributes,o=t(\"../../plots/template_attributes\").hovertemplateAttrs,s=t(\"../../plots/template_attributes\").texttemplateAttrs,l=t(\"../../lib/extend\").extendFlat;e.exports={labels:r.labels,label0:r.label0,dlabel:r.dlabel,values:r.values,marker:{colors:r.marker.colors,line:{color:l({},r.marker.line.color,{dflt:null}),width:l({},r.marker.line.width,{dflt:1}),editType:\"calc\"},editType:\"calc\"},text:r.text,hovertext:r.hovertext,scalegroup:l({},r.scalegroup,{}),textinfo:l({},r.textinfo,{flags:[\"label\",\"text\",\"value\",\"percent\"]}),texttemplate:s({editType:\"plot\"},{keys:[\"label\",\"color\",\"value\",\"text\",\"percent\"]}),hoverinfo:l({},i.hoverinfo,{flags:[\"label\",\"text\",\"value\",\"percent\",\"name\"]}),hovertemplate:o({},{keys:[\"label\",\"color\",\"value\",\"text\",\"percent\"]}),textposition:l({},r.textposition,{values:[\"inside\",\"none\"],dflt:\"inside\"}),textfont:r.textfont,insidetextfont:r.insidetextfont,title:{text:r.title.text,font:r.title.font,position:l({},r.title.position,{values:[\"top left\",\"top center\",\"top right\"],dflt:\"top center\"}),editType:\"plot\"},domain:a({name:\"funnelarea\",trace:!0,editType:\"calc\"}),aspectratio:{valType:\"number\",min:0,dflt:1,editType:\"plot\"},baseratio:{valType:\"number\",min:0,max:1,dflt:.333,editType:\"plot\"}}},{\"../../lib/extend\":768,\"../../plots/attributes\":824,\"../../plots/domain\":855,\"../../plots/template_attributes\":906,\"../pie/attributes\":1161}],1057:[function(t,e,n){\"use strict\";var r=t(\"../../plots/plots\");n.name=\"funnelarea\",n.plot=function(t,e,i,a){r.plotBasePlot(n.name,t,e,i,a)},n.clean=function(t,e,i,a){r.cleanBasePlot(n.name,t,e,i,a)}},{\"../../plots/plots\":891}],1058:[function(t,e,n){\"use strict\";var r=t(\"../pie/calc\");e.exports={calc:function(t,e){return r.calc(t,e)},crossTraceCalc:function(t){r.crossTraceCalc(t,{type:\"funnelarea\"})}}},{\"../pie/calc\":1163}],1059:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./attributes\"),a=t(\"../../plots/domain\").defaults,o=t(\"../bar/defaults\").handleText,s=t(\"../pie/defaults\").handleLabelsAndValues;e.exports=function(t,e,n,l){function c(n,a){return r.coerce(t,e,i,n,a)}var u=c(\"labels\"),h=c(\"values\"),d=s(u,h),f=d.len;if(e._hasLabels=d.hasLabels,e._hasValues=d.hasValues,!e._hasLabels&&e._hasValues&&(c(\"label0\"),c(\"dlabel\")),f){e._length=f,c(\"marker.line.width\")&&c(\"marker.line.color\",l.paper_bgcolor),c(\"marker.colors\"),c(\"scalegroup\");var p,m=c(\"text\"),g=c(\"texttemplate\");if(g||(p=c(\"textinfo\",Array.isArray(m)?\"text+percent\":\"percent\")),c(\"hovertext\"),c(\"hovertemplate\"),g||p&&\"none\"!==p){var y=c(\"textposition\");o(t,e,l,c,y,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1})}a(e,l,c),c(\"title.text\")&&(c(\"title.position\"),r.coerceFont(c,\"title.font\",l.font)),c(\"aspectratio\"),c(\"baseratio\")}else e.visible=!1}},{\"../../lib\":778,\"../../plots/domain\":855,\"../bar/defaults\":925,\"../pie/defaults\":1164,\"./attributes\":1056}],1060:[function(t,e,n){\"use strict\";e.exports={moduleType:\"trace\",name:\"funnelarea\",basePlotModule:t(\"./base_plot\"),categories:[\"pie-like\",\"funnelarea\",\"showLegend\"],attributes:t(\"./attributes\"),layoutAttributes:t(\"./layout_attributes\"),supplyDefaults:t(\"./defaults\"),supplyLayoutDefaults:t(\"./layout_defaults\"),calc:t(\"./calc\").calc,crossTraceCalc:t(\"./calc\").crossTraceCalc,plot:t(\"./plot\"),style:t(\"./style\"),styleOne:t(\"../pie/style_one\"),meta:{}}},{\"../pie/style_one\":1172,\"./attributes\":1056,\"./base_plot\":1057,\"./calc\":1058,\"./defaults\":1059,\"./layout_attributes\":1061,\"./layout_defaults\":1062,\"./plot\":1063,\"./style\":1064}],1061:[function(t,e,n){\"use strict\";var r=t(\"../pie/layout_attributes\").hiddenlabels;e.exports={hiddenlabels:r,funnelareacolorway:{valType:\"colorlist\",editType:\"calc\"},extendfunnelareacolors:{valType:\"boolean\",dflt:!0,editType:\"calc\"}}},{\"../pie/layout_attributes\":1168}],1062:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./layout_attributes\");e.exports=function(t,e){function n(n,a){return r.coerce(t,e,i,n,a)}n(\"hiddenlabels\"),n(\"funnelareacolorway\",e.colorway),n(\"extendfunnelareacolors\")}},{\"../../lib\":778,\"./layout_attributes\":1061}],1063:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../components/drawing\"),a=t(\"../../lib\"),o=a.strScale,s=a.strTranslate,l=t(\"../../lib/svg_text_utils\"),c=t(\"../bar/plot\").toMoveInsideBar,u=t(\"../bar/uniform_text\"),h=u.recordMinTextSize,d=u.clearMinTextSize,f=t(\"../pie/helpers\"),p=t(\"../pie/plot\"),m=p.attachFxHandlers,g=p.determineInsideTextFont,y=p.layoutAreas,v=p.prerenderTitles,_=p.positionTitleOutside,b=p.formatSliceLabel;function x(t,e){return\"l\"+(e[0]-t[0])+\",\"+(e[1]-t[1])}e.exports=function(t,e){var n=t._fullLayout;d(\"funnelarea\",n),v(e,t),y(e,n._size),a.makeTraceGroups(n._funnelarealayer,e,\"trace\").each((function(e){var u=r.select(this),d=e[0],p=d.trace;(function(t){if(t.length){var e=t[0],n=e.trace,r=n.aspectratio,i=n.baseratio;i>.999&&(i=.999);var a,o,s,l=Math.pow(i,2),c=e.vTotal,u=c,h=c*l/(1-l)/c,d=[];for(d.push(S()),o=t.length-1;o>-1;o--)(s=t[o]).hidden||(h+=s.v/u,d.push(S()));var f=1/0,p=-1/0;for(o=0;o<d.length;o++)a=d[o],f=Math.min(f,a[1]),p=Math.max(p,a[1]);for(o=0;o<d.length;o++)d[o][1]-=(p+f)/2;var m=e.r,g=(p-f)/2,y=m/d[d.length-1][0],v=m/g*r;for(e.r=v*g,o=0;o<d.length;o++)d[o][0]*=y,d[o][1]*=v;var _=[-(a=d[0])[0],a[1]],b=[a[0],a[1]],x=0;for(o=t.length-1;o>-1;o--)if(!(s=t[o]).hidden){var w=d[x+=1][0],k=d[x][1];s.TL=[-w,k],s.TR=[w,k],s.BL=_,s.BR=b,s.pxmid=[.5*((M=s.TR)[0]+(T=s.BR)[0]),.5*(M[1]+T[1])],_=s.TL,b=s.TR}}var M,T;function S(){var t,e={x:t=Math.sqrt(h),y:-t};return[e.x,e.y]}})(e),u.each((function(){var u=r.select(this).selectAll(\"g.slice\").data(e);u.enter().append(\"g\").classed(\"slice\",!0),u.exit().remove(),u.each((function(o,s){if(o.hidden)r.select(this).selectAll(\"path,g\").remove();else{o.pointNumber=o.i,o.curveNumber=p.index;var u=d.cx,y=d.cy,v=r.select(this),_=v.selectAll(\"path.surface\").data([o]);_.enter().append(\"path\").classed(\"surface\",!0).style({\"pointer-events\":\"all\"}),v.call(m,t,e);var w=\"M\"+(u+o.TR[0])+\",\"+(y+o.TR[1])+x(o.TR,o.BR)+x(o.BR,o.BL)+x(o.BL,o.TL)+\"Z\";_.attr(\"d\",w),b(t,o,d);var k=f.castOption(p.textposition,o.pts),M=v.selectAll(\"g.slicetext\").data(o.text&&\"none\"!==k?[0]:[]);M.enter().append(\"g\").classed(\"slicetext\",!0),M.exit().remove(),M.each((function(){var d=a.ensureSingle(r.select(this),\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),f=a.ensureUniformFontSize(t,g(p,o,n.font));d.text(o.text).attr({class:\"slicetext\",transform:\"\",\"text-anchor\":\"middle\"}).call(i.font,f).call(l.convertToTspans,t);var m,v,_,b=i.bBox(d.node()),x=Math.min(o.BL[1],o.BR[1])+y,w=Math.max(o.TL[1],o.TR[1])+y;v=Math.max(o.TL[0],o.BL[0])+u,_=Math.min(o.TR[0],o.BR[0])+u,(m=c(v,_,x,w,b,{isHorizontal:!0,constrained:!0,angle:0,anchor:\"middle\"})).fontSize=f.size,h(p.type,m,n),e[s].transform=m,d.attr(\"transform\",a.getTextTransform(m))}))}}));var y=r.select(this).selectAll(\"g.titletext\").data(p.title.text?[0]:[]);y.enter().append(\"g\").classed(\"titletext\",!0),y.exit().remove(),y.each((function(){var e=a.ensureSingle(r.select(this),\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),c=p.title.text;p._meta&&(c=a.templateString(c,p._meta)),e.text(c).attr({class:\"titletext\",transform:\"\",\"text-anchor\":\"middle\"}).call(i.font,p.title.font).call(l.convertToTspans,t);var u=_(d,n._size);e.attr(\"transform\",s(u.x,u.y)+o(Math.min(1,u.scale))+s(u.tx,u.ty))}))}))}))}},{\"../../components/drawing\":665,\"../../lib\":778,\"../../lib/svg_text_utils\":803,\"../bar/plot\":932,\"../bar/uniform_text\":937,\"../pie/helpers\":1166,\"../pie/plot\":1170,d3:169}],1064:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../pie/style_one\"),a=t(\"../bar/uniform_text\").resizeText;e.exports=function(t){var e=t._fullLayout._funnelarealayer.selectAll(\".trace\");a(t,e,\"funnelarea\"),e.each((function(t){var e=t[0].trace,n=r.select(this);n.style({opacity:e.opacity}),n.selectAll(\"path.surface\").each((function(t){r.select(this).call(i,t,e)}))}))}},{\"../bar/uniform_text\":937,\"../pie/style_one\":1172,d3:169}],1065:[function(t,e,n){\"use strict\";var r=t(\"../scatter/attributes\"),i=t(\"../../plots/attributes\"),a=t(\"../../plots/template_attributes\").hovertemplateAttrs,o=t(\"../../components/colorscale/attributes\"),s=(t(\"../../constants/docs\"),t(\"../../lib/extend\").extendFlat);e.exports=s({z:{valType:\"data_array\",editType:\"calc\"},x:s({},r.x,{impliedEdits:{xtype:\"array\"}}),x0:s({},r.x0,{impliedEdits:{xtype:\"scaled\"}}),dx:s({},r.dx,{impliedEdits:{xtype:\"scaled\"}}),y:s({},r.y,{impliedEdits:{ytype:\"array\"}}),y0:s({},r.y0,{impliedEdits:{ytype:\"scaled\"}}),dy:s({},r.dy,{impliedEdits:{ytype:\"scaled\"}}),xperiod:s({},r.xperiod,{impliedEdits:{xtype:\"scaled\"}}),yperiod:s({},r.yperiod,{impliedEdits:{ytype:\"scaled\"}}),xperiod0:s({},r.xperiod0,{impliedEdits:{xtype:\"scaled\"}}),yperiod0:s({},r.yperiod0,{impliedEdits:{ytype:\"scaled\"}}),xperiodalignment:s({},r.xperiodalignment,{impliedEdits:{xtype:\"scaled\"}}),yperiodalignment:s({},r.yperiodalignment,{impliedEdits:{ytype:\"scaled\"}}),text:{valType:\"data_array\",editType:\"calc\"},hovertext:{valType:\"data_array\",editType:\"calc\"},transpose:{valType:\"boolean\",dflt:!1,editType:\"calc\"},xtype:{valType:\"enumerated\",values:[\"array\",\"scaled\"],editType:\"calc+clearAxisTypes\"},ytype:{valType:\"enumerated\",values:[\"array\",\"scaled\"],editType:\"calc+clearAxisTypes\"},zsmooth:{valType:\"enumerated\",values:[\"fast\",\"best\",!1],dflt:!1,editType:\"calc\"},hoverongaps:{valType:\"boolean\",dflt:!0,editType:\"none\"},connectgaps:{valType:\"boolean\",editType:\"calc\"},xgap:{valType:\"number\",dflt:0,min:0,editType:\"plot\"},ygap:{valType:\"number\",dflt:0,min:0,editType:\"plot\"},zhoverformat:{valType:\"string\",dflt:\"\",editType:\"none\"},hovertemplate:a(),showlegend:s({},i.showlegend,{dflt:!1})},{transforms:void 0},o(\"\",{cLetter:\"z\",autoColorDflt:!1}))},{\"../../components/colorscale/attributes\":650,\"../../constants/docs\":748,\"../../lib/extend\":768,\"../../plots/attributes\":824,\"../../plots/template_attributes\":906,\"../scatter/attributes\":1187}],1066:[function(t,e,n){\"use strict\";var r=t(\"../../registry\"),i=t(\"../../lib\"),a=t(\"../../plots/cartesian/axes\"),o=t(\"../../plots/cartesian/align_period\"),s=t(\"../histogram2d/calc\"),l=t(\"../../components/colorscale/calc\"),c=t(\"./convert_column_xyz\"),u=t(\"./clean_2d_array\"),h=t(\"./interp2d\"),d=t(\"./find_empties\"),f=t(\"./make_bound_array\"),p=t(\"../../constants/numerical\").BADNUM;function m(t){for(var e=[],n=t.length,r=0;r<n;r++){var i=t[r];i!==p&&e.push(i)}return e}e.exports=function(t,e){var n,g,y,v,_,b,x,w,k,M,T,S=a.getFromId(t,e.xaxis||\"x\"),A=a.getFromId(t,e.yaxis||\"y\"),L=r.traceIs(e,\"contour\"),C=r.traceIs(e,\"histogram\"),E=r.traceIs(e,\"gl2d\"),O=L?\"best\":e.zsmooth;if(S._minDtick=0,A._minDtick=0,C)v=(T=s(t,e)).orig_x,n=T.x,g=T.x0,y=T.dx,w=T.orig_y,_=T.y,b=T.y0,x=T.dy,k=T.z;else{var D=e.z;i.isArray1D(D)?(c(e,S,A,\"x\",\"y\",[\"z\"]),n=e._x,_=e._y,D=e._z):(v=e.x?S.makeCalcdata(e,\"x\"):[],w=e.y?A.makeCalcdata(e,\"y\"):[],n=o(e,S,\"x\",v),_=o(e,A,\"y\",w),e._x=n,e._y=_),g=e.x0,y=e.dx,b=e.y0,x=e.dy,k=u(D,e,S,A)}function I(t){O=e._input.zsmooth=e.zsmooth=!1,i.warn('cannot use zsmooth: \"fast\": '+t)}if((S.rangebreaks||A.rangebreaks)&&(k=function(t,e,n){for(var r=[],i=-1,a=0;a<n.length;a++)if(e[a]!==p){r[++i]=[];for(var o=0;o<n[a].length;o++)t[o]!==p&&r[i].push(n[a][o])}return r}(n,_,k),C||(n=m(n),_=m(_),e._x=n,e._y=_)),C||!L&&!e.connectgaps||(e._emptypoints=d(k),h(k,e._emptypoints)),\"fast\"===O)if(\"log\"===S.type||\"log\"===A.type)I(\"log axis found\");else if(!C){if(n.length){var P=(n[n.length-1]-n[0])/(n.length-1),R=Math.abs(P/100);for(M=0;M<n.length-1;M++)if(Math.abs(n[M+1]-n[M]-P)>R){I(\"x scale is not linear\");break}}if(_.length&&\"fast\"===O){var z=(_[_.length-1]-_[0])/(_.length-1),j=Math.abs(z/100);for(M=0;M<_.length-1;M++)if(Math.abs(_[M+1]-_[M]-z)>j){I(\"y scale is not linear\");break}}}var F=i.maxRowLength(k),N=\"scaled\"===e.xtype?\"\":n,B=f(e,N,g,y,F,S),Y=\"scaled\"===e.ytype?\"\":_,H=f(e,Y,b,x,k.length,A);E||(e._extremes[S._id]=a.findExtremes(S,B),e._extremes[A._id]=a.findExtremes(A,H));var V={x:B,y:H,z:k,text:e._text||e.text,hovertext:e._hovertext||e.hovertext};if(e.xperiodalignment&&v&&(V.orig_x=v),e.yperiodalignment&&w&&(V.orig_y=w),N&&N.length===B.length-1&&(V.xCenter=N),Y&&Y.length===H.length-1&&(V.yCenter=Y),C&&(V.xRanges=T.xRanges,V.yRanges=T.yRanges,V.pts=T.pts),L||l(t,e,{vals:k,cLetter:\"z\"}),L&&e.contours&&\"heatmap\"===e.contours.coloring){var U={type:\"contour\"===e.type?\"heatmap\":\"histogram2d\",xcalendar:e.xcalendar,ycalendar:e.ycalendar};V.xfill=f(U,N,g,y,F,S),V.yfill=f(U,Y,b,x,k.length,A)}return[V]}},{\"../../components/colorscale/calc\":651,\"../../constants/numerical\":753,\"../../lib\":778,\"../../plots/cartesian/align_period\":825,\"../../plots/cartesian/axes\":828,\"../../registry\":911,\"../histogram2d/calc\":1098,\"./clean_2d_array\":1067,\"./convert_column_xyz\":1069,\"./find_empties\":1071,\"./interp2d\":1074,\"./make_bound_array\":1075}],1067:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../lib\"),a=t(\"../../constants/numerical\").BADNUM;e.exports=function(t,e,n,o){var s,l,c,u,h,d;function f(t){if(r(t))return+t}if(e&&e.transpose){for(s=0,h=0;h<t.length;h++)s=Math.max(s,t[h].length);if(0===s)return!1;c=function(t){return t.length},u=function(t,e,n){return(t[n]||[])[e]}}else s=t.length,c=function(t,e){return t[e].length},u=function(t,e,n){return(t[e]||[])[n]};var p=function(t,e,n){return e===a||n===a?a:u(t,e,n)};function m(t){if(e&&\"carpet\"!==e.type&&\"contourcarpet\"!==e.type&&t&&\"category\"===t.type&&e[\"_\"+t._id.charAt(0)].length){var n=t._id.charAt(0),r={},o=e[\"_\"+n+\"CategoryMap\"]||e[n];for(h=0;h<o.length;h++)r[o[h]]=h;return function(e){var n=r[t._categories[e]];return n+1?n:a}}return i.identity}var g=m(n),y=m(o);o&&\"category\"===o.type&&(s=o._categories.length);var v=new Array(s);for(h=0;h<s;h++)for(l=n&&\"category\"===n.type?n._categories.length:c(t,h),v[h]=new Array(l),d=0;d<l;d++)v[h][d]=f(p(t,y(h),g(d)));return v}},{\"../../constants/numerical\":753,\"../../lib\":778,\"fast-isnumeric\":241}],1068:[function(t,e,n){\"use strict\";e.exports={min:\"zmin\",max:\"zmax\"}},{}],1069:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../constants/numerical\").BADNUM,a=t(\"../../plots/cartesian/align_period\");e.exports=function(t,e,n,o,s,l){var c=t._length,u=e.makeCalcdata(t,o),h=n.makeCalcdata(t,s);u=a(t,e,o,u),h=a(t,n,s,h);var d,f,p,m,g=t.text,y=void 0!==g&&r.isArray1D(g),v=t.hovertext,_=void 0!==v&&r.isArray1D(v),b=r.distinctVals(u),x=b.vals,w=r.distinctVals(h),k=w.vals,M=[],T=k.length,S=x.length;for(d=0;d<l.length;d++)M[d]=r.init2dArray(T,S);y&&(p=r.init2dArray(T,S)),_&&(m=r.init2dArray(T,S));var A=r.init2dArray(T,S);for(d=0;d<c;d++)if(u[d]!==i&&h[d]!==i){var L=r.findBin(u[d]+b.minDiff/2,x),C=r.findBin(h[d]+w.minDiff/2,k);for(f=0;f<l.length;f++)M[f][C][L]=t[l[f]][d],A[C][L]=d;y&&(p[C][L]=g[d]),_&&(m[C][L]=v[d])}for(t[\"_\"+o]=x,t[\"_\"+s]=k,f=0;f<l.length;f++)t[\"_\"+l[f]]=M[f];y&&(t._text=p),_&&(t._hovertext=m),e&&\"category\"===e.type&&(t[\"_\"+o+\"CategoryMap\"]=x.map((function(t){return e._categories[t]}))),n&&\"category\"===n.type&&(t[\"_\"+s+\"CategoryMap\"]=k.map((function(t){return n._categories[t]}))),t._after2before=A}},{\"../../constants/numerical\":753,\"../../lib\":778,\"../../plots/cartesian/align_period\":825}],1070:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./xyz_defaults\"),a=t(\"../scatter/period_defaults\"),o=t(\"./style_defaults\"),s=t(\"../../components/colorscale/defaults\"),l=t(\"./attributes\");e.exports=function(t,e,n,c){function u(n,i){return r.coerce(t,e,l,n,i)}i(t,e,u,c)?(a(t,e,c,u),u(\"text\"),u(\"hovertext\"),u(\"hovertemplate\"),o(t,e,u,c),u(\"hoverongaps\"),u(\"connectgaps\",r.isArray1D(e.z)&&!1!==e.zsmooth),s(t,e,c,u,{prefix:\"\",cLetter:\"z\"})):e.visible=!1}},{\"../../components/colorscale/defaults\":653,\"../../lib\":778,\"../scatter/period_defaults\":1207,\"./attributes\":1065,\"./style_defaults\":1078,\"./xyz_defaults\":1079}],1071:[function(t,e,n){\"use strict\";var r=t(\"../../lib\").maxRowLength;e.exports=function(t){var e,n,i,a,o,s,l,c,u=[],h={},d=[],f=t[0],p=[],m=[0,0,0],g=r(t);for(n=0;n<t.length;n++)for(e=p,p=f,f=t[n+1]||[],i=0;i<g;i++)void 0===p[i]&&((s=(void 0!==p[i-1]?1:0)+(void 0!==p[i+1]?1:0)+(void 0!==e[i]?1:0)+(void 0!==f[i]?1:0))?(0===n&&s++,0===i&&s++,n===t.length-1&&s++,i===p.length-1&&s++,s<4&&(h[[n,i]]=[n,i,s]),u.push([n,i,s])):d.push([n,i]));for(;d.length;){for(l={},c=!1,o=d.length-1;o>=0;o--)(s=((h[[(n=(a=d[o])[0])-1,i=a[1]]]||m)[2]+(h[[n+1,i]]||m)[2]+(h[[n,i-1]]||m)[2]+(h[[n,i+1]]||m)[2])/20)&&(l[a]=[n,i,s],d.splice(o,1),c=!0);if(!c)throw\"findEmpties iterated with no new neighbors\";for(a in l)h[a]=l[a],u.push(l[a])}return u.sort((function(t,e){return e[2]-t[2]}))}},{\"../../lib\":778}],1072:[function(t,e,n){\"use strict\";var r=t(\"../../components/fx\"),i=t(\"../../lib\"),a=t(\"../../plots/cartesian/axes\"),o=t(\"../../components/colorscale\").extractOpts;e.exports=function(t,e,n,s,l,c){var u,h,d,f,p=t.cd[0],m=p.trace,g=t.xa,y=t.ya,v=p.x,_=p.y,b=p.z,x=p.xCenter,w=p.yCenter,k=p.zmask,M=m.zhoverformat,T=v,S=_;if(!1!==t.index){try{d=Math.round(t.index[1]),f=Math.round(t.index[0])}catch(F){return void i.error(\"Error hovering on heatmap, pointNumber must be [row,col], found:\",t.index)}if(d<0||d>=b[0].length||f<0||f>b.length)return}else{if(r.inbox(e-v[0],e-v[v.length-1],0)>0||r.inbox(n-_[0],n-_[_.length-1],0)>0)return;if(c){var A;for(T=[2*v[0]-v[1]],A=1;A<v.length;A++)T.push((v[A]+v[A-1])/2);for(T.push([2*v[v.length-1]-v[v.length-2]]),S=[2*_[0]-_[1]],A=1;A<_.length;A++)S.push((_[A]+_[A-1])/2);S.push([2*_[_.length-1]-_[_.length-2]])}d=Math.max(0,Math.min(T.length-2,i.findBin(e,T))),f=Math.max(0,Math.min(S.length-2,i.findBin(n,S)))}var L,C,E=g.c2p(v[d]),O=g.c2p(v[d+1]),D=y.c2p(_[f]),I=y.c2p(_[f+1]);c?(O=E,u=(L=p.orig_x||v)[d],I=D,h=(C=p.orig_y||_)[f]):(L=p.orig_x||x||v,C=p.orig_y||w||_,u=x?L[d]:(L[d]+L[d+1])/2,h=w?C[f]:(C[f]+C[f+1])/2,g&&\"category\"===g.type&&(u=v[d]),y&&\"category\"===y.type&&(h=_[f]),m.zsmooth&&(E=O=g.c2p(u),D=I=y.c2p(h)));var P=b[f][d];if(k&&!k[f][d]&&(P=void 0),void 0!==P||m.hoverongaps){var R;Array.isArray(p.hovertext)&&Array.isArray(p.hovertext[f])?R=p.hovertext[f][d]:Array.isArray(p.text)&&Array.isArray(p.text[f])&&(R=p.text[f][d]);var z=o(m),j=a.tickText({type:\"linear\",range:[z.min,z.max],hoverformat:M,_separators:g._separators,_numFormat:g._numFormat},P,\"hover\").text;return[i.extendFlat(t,{index:m._after2before?m._after2before[f][d]:[f,d],distance:t.maxHoverDistance,spikeDistance:t.maxSpikeDistance,x0:E,x1:O,y0:D,y1:I,xLabelVal:u,yLabelVal:h,zLabelVal:P,zLabel:j,text:R})]}}},{\"../../components/colorscale\":655,\"../../components/fx\":683,\"../../lib\":778,\"../../plots/cartesian/axes\":828}],1073:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),calc:t(\"./calc\"),plot:t(\"./plot\"),colorbar:t(\"./colorbar\"),style:t(\"./style\"),hoverPoints:t(\"./hover\"),moduleType:\"trace\",name:\"heatmap\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"2dMap\",\"showLegend\"],meta:{}}},{\"../../plots/cartesian\":841,\"./attributes\":1065,\"./calc\":1066,\"./colorbar\":1068,\"./defaults\":1070,\"./hover\":1072,\"./plot\":1076,\"./style\":1077}],1074:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=[[-1,0],[1,0],[0,-1],[0,1]];function a(t){return.5-.25*Math.min(1,.5*t)}function o(t,e,n){var r,a,o,s,l,c,u,h,d,f,p,m,g,y=0;for(s=0;s<e.length;s++){for(p=t[a=(r=e[s])[0]][o=r[1]],f=0,d=0,l=0;l<4;l++)(u=t[a+(c=i[l])[0]])&&void 0!==(h=u[o+c[1]])&&(0===f?m=g=h:(m=Math.min(m,h),g=Math.max(g,h)),d++,f+=h);if(0===d)throw\"iterateInterp2d order is wrong: no defined neighbors\";t[a][o]=f/d,void 0===p?d<4&&(y=1):(t[a][o]=(1+n)*t[a][o]-n*p,g>m&&(y=Math.max(y,Math.abs(t[a][o]-p)/(g-m))))}return y}e.exports=function(t,e){var n,i=1;for(o(t,e),n=0;n<e.length&&!(e[n][2]<4);n++);for(e=e.slice(n),n=0;n<100&&i>.01;n++)i=o(t,e,a(i));return i>.01&&r.log(\"interp2d didn't converge quickly\",i),t}},{\"../../lib\":778}],1075:[function(t,e,n){\"use strict\";var r=t(\"../../registry\"),i=t(\"../../lib\").isArrayOrTypedArray;e.exports=function(t,e,n,a,o,s){var l,c,u,h=[],d=r.traceIs(t,\"contour\"),f=r.traceIs(t,\"histogram\"),p=r.traceIs(t,\"gl2d\");if(i(e)&&e.length>1&&!f&&\"category\"!==s.type){var m=e.length;if(!(m<=o))return e.slice(0,d?o:o+1);if(d||p)h=e.slice(0,o);else if(1===o)h=[e[0]-.5,e[0]+.5];else{for(h=[1.5*e[0]-.5*e[1]],u=1;u<m;u++)h.push(.5*(e[u-1]+e[u]));h.push(1.5*e[m-1]-.5*e[m-2])}if(m<o){var g=h[h.length-1],y=g-h[h.length-2];for(u=m;u<o;u++)h.push(g+=y)}}else{var v=t[s._id.charAt(0)+\"calendar\"];for(l=f?s.r2c(n,0,v):i(e)&&1===e.length?e[0]:void 0===n?0:(\"log\"===s.type?s.d2c:s.r2c)(n,0,v),c=a||1,u=d||p?0:-.5;u<o;u++)h.push(l+c*u)}return h}},{\"../../lib\":778,\"../../registry\":911}],1076:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"tinycolor2\"),a=t(\"../../registry\"),o=t(\"../../lib\"),s=t(\"../../components/colorscale\").makeColorScaleFuncFromTrace,l=t(\"../../constants/xmlns_namespaces\");function c(t,e){var n=e.length-2,r=o.constrain(o.findBin(t,e),0,n),i=e[r],a=o.constrain(r+(t-i)/(e[r+1]-i)-.5,0,n),s=Math.round(a),l=Math.abs(a-s);return a&&a!==n&&l?{bin0:s,frac:l,bin1:Math.round(s+l/(a-s))}:{bin0:s,bin1:s,frac:0}}function u(t,e){var n=e.length-1,r=o.constrain(o.findBin(t,e),0,n),i=e[r],a=(t-i)/(e[r+1]-i)||0;return a<=0?{bin0:r,bin1:r,frac:0}:a<.5?{bin0:r,bin1:r+1,frac:a}:{bin0:r+1,bin1:r,frac:1-a}}function h(t,e,n){t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=Math.round(255*n[3])}e.exports=function(t,e,n,d){var f=e.xaxis,p=e.yaxis;o.makeTraceGroups(d,n,\"hm\").each((function(e){var n,d,m,g,y,v,_=r.select(this),b=e[0],x=b.trace,w=b.z,k=b.x,M=b.y,T=b.xCenter,S=b.yCenter,A=a.traceIs(x,\"contour\"),L=A?\"best\":x.zsmooth,C=w.length,E=o.maxRowLength(w),O=!1,D=!1;for(v=0;void 0===n&&v<k.length-1;)n=f.c2p(k[v]),v++;for(v=k.length-1;void 0===d&&v>0;)d=f.c2p(k[v]),v--;for(d<n&&(m=d,d=n,n=m,O=!0),v=0;void 0===g&&v<M.length-1;)g=p.c2p(M[v]),v++;for(v=M.length-1;void 0===y&&v>0;)y=p.c2p(M[v]),v--;if(y<g&&(m=g,g=y,y=m,D=!0),A&&(T=k,S=M,k=b.xfill,M=b.yfill),\"fast\"!==L){var I=\"best\"===L?0:.5;n=Math.max(-I*f._length,n),d=Math.min((1+I)*f._length,d),g=Math.max(-I*p._length,g),y=Math.min((1+I)*p._length,y)}var P=Math.round(d-n),R=Math.round(y-g);if(P<=0||R<=0)_.selectAll(\"image\").data([]).exit().remove();else{var z,j;\"fast\"===L?(z=E,j=C):(z=P,j=R);var F=document.createElement(\"canvas\");F.width=z,F.height=j;var N,B,Y=F.getContext(\"2d\"),H=s(x,{noNumericCheck:!0,returnArray:!0});\"fast\"===L?(N=O?function(t){return E-1-t}:o.identity,B=D?function(t){return C-1-t}:o.identity):(N=function(t){return o.constrain(Math.round(f.c2p(k[t])-n),0,P)},B=function(t){return o.constrain(Math.round(p.c2p(M[t])-g),0,R)});var V,U,W,q,G,X=B(0),Z=[X,X],J=O?0:1,K=D?0:1,$=0,Q=0,tt=0,et=0;if(L){var nt,rt=0;try{nt=new Uint8Array(P*R*4)}catch(Tt){nt=new Array(P*R*4)}if(\"best\"===L){var it,at,ot,st=T||k,lt=S||M,ct=new Array(st.length),ut=new Array(lt.length),ht=new Array(P),dt=T?u:c,ft=S?u:c;for(v=0;v<st.length;v++)ct[v]=Math.round(f.c2p(st[v])-n);for(v=0;v<lt.length;v++)ut[v]=Math.round(p.c2p(lt[v])-g);for(v=0;v<P;v++)ht[v]=dt(v,ct);for(U=0;U<R;U++)for(at=w[(it=ft(U,ut)).bin0],ot=w[it.bin1],v=0;v<P;v++,rt+=4)h(nt,rt,G=Mt(at,ot,ht[v],it))}else for(U=0;U<C;U++)for(q=w[U],Z=B(U),v=0;v<P;v++)G=kt(q[v],1),h(nt,rt=4*(Z*P+N(v)),G);var pt=Y.createImageData(P,R);try{pt.data.set(nt)}catch(Tt){var mt=pt.data,gt=mt.length;for(U=0;U<gt;U++)mt[U]=nt[U]}Y.putImageData(pt,0,0)}else{var yt=x.xgap,vt=x.ygap,_t=Math.floor(yt/2),bt=Math.floor(vt/2);for(U=0;U<C;U++)if(q=w[U],Z.reverse(),Z[K]=B(U+1),Z[0]!==Z[1]&&void 0!==Z[0]&&void 0!==Z[1])for(V=[W=N(0),W],v=0;v<E;v++)V.reverse(),V[J]=N(v+1),V[0]!==V[1]&&void 0!==V[0]&&void 0!==V[1]&&(G=kt(q[v],(V[1]-V[0])*(Z[1]-Z[0])),Y.fillStyle=\"rgba(\"+G.join(\",\")+\")\",Y.fillRect(V[0]+_t,Z[0]+bt,V[1]-V[0]-yt,Z[1]-Z[0]-vt))}Q=Math.round(Q/$),tt=Math.round(tt/$),et=Math.round(et/$);var xt=i(\"rgb(\"+Q+\",\"+tt+\",\"+et+\")\");t._hmpixcount=(t._hmpixcount||0)+$,t._hmlumcount=(t._hmlumcount||0)+$*xt.getLuminance();var wt=_.selectAll(\"image\").data(e);wt.enter().append(\"svg:image\").attr({xmlns:l.svg,preserveAspectRatio:\"none\"}),wt.attr({height:R,width:P,x:n,y:g,\"xlink:href\":F.toDataURL(\"image/png\")})}function kt(t,e){if(void 0!==t){var n=H(t);return n[0]=Math.round(n[0]),n[1]=Math.round(n[1]),n[2]=Math.round(n[2]),$+=e,Q+=n[0]*e,tt+=n[1]*e,et+=n[2]*e,n}return[0,0,0,0]}function Mt(t,e,n,r){var i=t[n.bin0];if(void 0===i)return kt(void 0,1);var a=t[n.bin1],o=e[n.bin0],s=e[n.bin1];return kt(i+n.frac*(a-i||0)+r.frac*((o-i||0)+n.frac*(void 0===a?void 0===s?0:void 0===o?2*(s-i):2*(2*s-o-i)/3:void 0===s?void 0===o?0:2*(2*i-a-o)/3:void 0===o?2*(2*s-a-i)/3:s+i-a-o)))}}))}},{\"../../components/colorscale\":655,\"../../constants/xmlns_namespaces\":754,\"../../lib\":778,\"../../registry\":911,d3:169,tinycolor2:576}],1077:[function(t,e,n){\"use strict\";var r=t(\"d3\");e.exports=function(t){r.select(t).selectAll(\".hm image\").style(\"opacity\",(function(t){return t.trace.opacity}))}},{d3:169}],1078:[function(t,e,n){\"use strict\";e.exports=function(t,e,n){!1===n(\"zsmooth\")&&(n(\"xgap\"),n(\"ygap\")),n(\"zhoverformat\")}},{}],1079:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../lib\"),a=t(\"../../registry\");function o(t,e){var n=e(t);return\"scaled\"===(n?e(t+\"type\",\"array\"):\"scaled\")&&(e(t+\"0\"),e(\"d\"+t)),n}e.exports=function(t,e,n,s,l,c){var u,h,d=n(\"z\");if(l=l||\"x\",c=c||\"y\",void 0===d||!d.length)return 0;if(i.isArray1D(t.z)){u=n(l),h=n(c);var f=i.minRowLength(u),p=i.minRowLength(h);if(0===f||0===p)return 0;e._length=Math.min(f,p,d.length)}else{if(u=o(l,n),h=o(c,n),!function(t){for(var e,n=!0,a=!1,o=!1,s=0;s<t.length;s++){if(!i.isArrayOrTypedArray(e=t[s])){n=!1;break}e.length>0&&(a=!0);for(var l=0;l<e.length;l++)if(r(e[l])){o=!0;break}}return n&&a&&o}(d))return 0;n(\"transpose\"),e._length=null}return\"heatmapgl\"===t.type||\"contourgl\"===t.type||a.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[l,c],s),!0}},{\"../../lib\":778,\"../../registry\":911,\"fast-isnumeric\":241}],1080:[function(t,e,n){\"use strict\";for(var r=t(\"../heatmap/attributes\"),i=t(\"../../components/colorscale/attributes\"),a=t(\"../../lib/extend\").extendFlat,o=t(\"../../plot_api/edit_types\").overrideAll,s=[\"z\",\"x\",\"x0\",\"dx\",\"y\",\"y0\",\"dy\",\"text\",\"transpose\",\"xtype\",\"ytype\"],l={},c=0;c<s.length;c++){var u=s[c];l[u]=r[u]}l.zsmooth={valType:\"enumerated\",values:[\"fast\",!1],dflt:\"fast\",editType:\"calc\"},a(l,i(\"\",{cLetter:\"z\",autoColorDflt:!1})),e.exports=o(l,\"calc\",\"nested\")},{\"../../components/colorscale/attributes\":650,\"../../lib/extend\":768,\"../../plot_api/edit_types\":810,\"../heatmap/attributes\":1065}],1081:[function(t,e,n){\"use strict\";var r=t(\"gl-heatmap2d\"),i=t(\"../../plots/cartesian/axes\"),a=t(\"../../lib/str2rgbarray\");function o(t,e){this.scene=t,this.uid=e,this.type=\"heatmapgl\",this.name=\"\",this.hoverinfo=\"all\",this.xData=[],this.yData=[],this.zData=[],this.textLabels=[],this.idToIndex=[],this.bounds=[0,0,0,0],this.options={zsmooth:\"fast\",z:[],x:[],y:[],shape:[0,0],colorLevels:[0],colorValues:[0,0,0,1]},this.heatmap=r(t.glplot,this.options),this.heatmap._trace=this}var s=o.prototype;s.handlePick=function(t){var e=this.options,n=e.shape,r=t.pointId,i=r%n[0],a=Math.floor(r/n[0]);return{trace:this,dataCoord:t.dataCoord,traceCoord:[e.x[i],e.y[a],e.z[r]],textLabel:this.textLabels[r],name:this.name,pointIndex:[a,i],hoverinfo:this.hoverinfo}},s.update=function(t,e){var n=e[0];this.index=t.index,this.name=t.name,this.hoverinfo=t.hoverinfo;var r=n.z;this.options.z=[].concat.apply([],r),this.options.shape=[r[0].length,r.length],this.options.x=n.x,this.options.y=n.y,this.options.zsmooth=t.zsmooth;var o=function(t){for(var e=t.colorscale,n=t.zmin,r=t.zmax,i=e.length,o=new Array(i),s=new Array(4*i),l=0;l<i;l++){var c=e[l],u=a(c[1]);o[l]=n+c[0]*(r-n);for(var h=0;h<4;h++)s[4*l+h]=u[h]}return{colorLevels:o,colorValues:s}}(t);this.options.colorLevels=o.colorLevels,this.options.colorValues=o.colorValues,this.textLabels=[].concat.apply([],t.text),this.heatmap.update(this.options);var s,l,c=this.scene.xaxis,u=this.scene.yaxis;!1===t.zsmooth&&(s={ppad:n.x[1]-n.x[0]},l={ppad:n.y[1]-n.y[0]}),t._extremes[c._id]=i.findExtremes(c,n.x,s),t._extremes[u._id]=i.findExtremes(u,n.y,l)},s.dispose=function(){this.heatmap.dispose()},e.exports=function(t,e,n){var r=new o(t,e.uid);return r.update(e,n),r}},{\"../../lib/str2rgbarray\":802,\"../../plots/cartesian/axes\":828,\"gl-heatmap2d\":271}],1082:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../heatmap/xyz_defaults\"),a=t(\"../../components/colorscale/defaults\"),o=t(\"./attributes\");e.exports=function(t,e,n,s){function l(n,i){return r.coerce(t,e,o,n,i)}i(t,e,l,s)?(l(\"text\"),l(\"zsmooth\"),a(t,e,s,l,{prefix:\"\",cLetter:\"z\"})):e.visible=!1}},{\"../../components/colorscale/defaults\":653,\"../../lib\":778,\"../heatmap/xyz_defaults\":1079,\"./attributes\":1080}],1083:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:t(\"../heatmap/colorbar\"),calc:t(\"../heatmap/calc\"),plot:t(\"./convert\"),moduleType:\"trace\",name:\"heatmapgl\",basePlotModule:t(\"../../plots/gl2d\"),categories:[\"gl\",\"gl2d\",\"2dMap\"],meta:{}}},{\"../../plots/gl2d\":868,\"../heatmap/calc\":1066,\"../heatmap/colorbar\":1068,\"./attributes\":1080,\"./convert\":1081,\"./defaults\":1082}],1084:[function(t,e,n){\"use strict\";var r=t(\"../bar/attributes\"),i=t(\"../../plots/template_attributes\").hovertemplateAttrs,a=t(\"./bin_attributes\"),o=t(\"./constants\"),s=t(\"../../lib/extend\").extendFlat;e.exports={x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},text:s({},r.text,{}),hovertext:s({},r.hovertext,{}),orientation:r.orientation,histfunc:{valType:\"enumerated\",values:[\"count\",\"sum\",\"avg\",\"min\",\"max\"],dflt:\"count\",editType:\"calc\"},histnorm:{valType:\"enumerated\",values:[\"\",\"percent\",\"probability\",\"density\",\"probability density\"],dflt:\"\",editType:\"calc\"},cumulative:{enabled:{valType:\"boolean\",dflt:!1,editType:\"calc\"},direction:{valType:\"enumerated\",values:[\"increasing\",\"decreasing\"],dflt:\"increasing\",editType:\"calc\"},currentbin:{valType:\"enumerated\",values:[\"include\",\"exclude\",\"half\"],dflt:\"include\",editType:\"calc\"},editType:\"calc\"},nbinsx:{valType:\"integer\",min:0,dflt:0,editType:\"calc\"},xbins:a(\"x\",!0),nbinsy:{valType:\"integer\",min:0,dflt:0,editType:\"calc\"},ybins:a(\"y\",!0),autobinx:{valType:\"boolean\",dflt:null,editType:\"calc\"},autobiny:{valType:\"boolean\",dflt:null,editType:\"calc\"},bingroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},hovertemplate:i({},{keys:o.eventDataKeys}),marker:r.marker,offsetgroup:r.offsetgroup,alignmentgroup:r.alignmentgroup,selected:r.selected,unselected:r.unselected,_deprecated:{bardir:r._deprecated.bardir}}},{\"../../lib/extend\":768,\"../../plots/template_attributes\":906,\"../bar/attributes\":921,\"./bin_attributes\":1086,\"./constants\":1090}],1085:[function(t,e,n){\"use strict\";e.exports=function(t,e){for(var n=t.length,r=0,i=0;i<n;i++)e[i]?(t[i]/=e[i],r+=t[i]):t[i]=null;return r}},{}],1086:[function(t,e,n){\"use strict\";e.exports=function(t,e){return{start:{valType:\"any\",editType:\"calc\"},end:{valType:\"any\",editType:\"calc\"},size:{valType:\"any\",editType:\"calc\"},editType:\"calc\"}}},{}],1087:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\");e.exports={count:function(t,e,n){return n[t]++,1},sum:function(t,e,n,i){var a=i[e];return r(a)?(a=Number(a),n[t]+=a,a):0},avg:function(t,e,n,i,a){var o=i[e];return r(o)&&(o=Number(o),n[t]+=o,a[t]++),0},min:function(t,e,n,i){var a=i[e];if(r(a)){if(a=Number(a),!r(n[t]))return n[t]=a,a;if(n[t]>a){var o=a-n[t];return n[t]=a,o}}return 0},max:function(t,e,n,i){var a=i[e];if(r(a)){if(a=Number(a),!r(n[t]))return n[t]=a,a;if(n[t]<a){var o=a-n[t];return n[t]=a,o}}return 0}}},{\"fast-isnumeric\":241}],1088:[function(t,e,n){\"use strict\";var r=t(\"../../constants/numerical\"),i=r.ONEAVGYEAR,a=r.ONEAVGMONTH,o=r.ONEDAY,s=r.ONEHOUR,l=r.ONEMIN,c=r.ONESEC,u=t(\"../../plots/cartesian/axes\").tickIncrement;function h(t,e,n,r){if(t*e<=0)return 1/0;for(var i=Math.abs(e-t),a=\"date\"===n.type,o=d(i,a),s=0;s<10;s++){var l=d(80*o,a);if(o===l)break;if(!f(l,t,e,a,n,r))break;o=l}return o}function d(t,e){return e&&t>c?t>o?t>1.1*i?i:t>1.1*a?a:o:t>s?s:t>l?l:c:Math.pow(10,Math.floor(Math.log(t)/Math.LN10))}function f(t,e,n,r,a,s){if(r&&t>o){var l=p(e,a,s),c=p(n,a,s),u=t===i?0:1;return l[u]!==c[u]}return Math.floor(n/t)-Math.floor(e/t)>.1}function p(t,e,n){var r=e.c2d(t,i,n).split(\"-\");return\"\"===r[0]&&(r.unshift(),r[0]=\"-\"+r[0]),r}e.exports=function(t,e,n,r,a){var s,l,c=-1.1*e,d=-.1*e,f=t-d,p=n[0],m=n[1],g=Math.min(h(p+d,p+f,r,a),h(m+d,m+f,r,a)),y=Math.min(h(p+c,p+d,r,a),h(m+c,m+d,r,a));if(g>y&&y<Math.abs(m-p)/4e3?(s=g,l=!1):(s=Math.min(g,y),l=!0),\"date\"===r.type&&s>o){var v=s===i?1:6,_=s===i?\"M12\":\"M1\";return function(e,n){var o=r.c2d(e,i,a),s=o.indexOf(\"-\",v);s>0&&(o=o.substr(0,s));var c=r.d2c(o,0,a);if(c<e){var h=u(c,_,!1,a);(c+h)/2<e+t&&(c=h)}return n&&l?u(c,_,!0,a):c}}return function(e,n){var r=s*Math.round(e/s);return r+s/10<e&&r+.9*s<e+t&&(r+=s),n&&l&&(r-=s),r}}},{\"../../constants/numerical\":753,\"../../plots/cartesian/axes\":828}],1089:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../lib\"),a=t(\"../../registry\"),o=t(\"../../plots/cartesian/axes\"),s=t(\"../bar/arrays_to_calcdata\"),l=t(\"./bin_functions\"),c=t(\"./norm_functions\"),u=t(\"./average\"),h=t(\"./bin_label_vals\");function d(t,e,n,s,l){var c,u,h,f,p,m,g,y=s+\"bins\",v=t._fullLayout,_=v._histogramBinOpts[e[\"_\"+s+\"bingroup\"]],b=\"overlay\"===v.barmode,x=function(t){return n.r2c(t,0,f)},w=function(t){return n.c2r(t,0,f)},k=\"date\"===n.type?function(t){return t||0===t?i.cleanDate(t,null,f):null}:function(t){return r(t)?Number(t):null};function M(t,e,n){e[t+\"Found\"]?(e[t]=k(e[t]),null===e[t]&&(e[t]=n[t])):(m[t]=e[t]=n[t],i.nestedProperty(u[0],y+\".\"+t).set(n[t]))}if(e[\"_\"+s+\"autoBinFinished\"])delete e[\"_\"+s+\"autoBinFinished\"];else{u=_.traces;var T=[],S=!0,A=!1,L=!1;for(c=0;c<u.length;c++)if((h=u[c]).visible){var C=_.dirs[c];p=h[\"_\"+C+\"pos0\"]=n.makeCalcdata(h,C),T=i.concat(T,p),delete h[\"_\"+s+\"autoBinFinished\"],!0===e.visible&&(S?S=!1:(delete h._autoBin,h[\"_\"+s+\"autoBinFinished\"]=1),a.traceIs(h,\"2dMap\")&&(A=!0),\"histogram2dcontour\"===h.type&&(L=!0))}var E=o.autoBin(T,n,_.nbins,A,f=u[0][s+\"calendar\"],_.sizeFound&&_.size),O=u[0]._autoBin={};if(m=O[_.dirs[0]]={},L&&(_.size||(E.start=w(o.tickIncrement(x(E.start),E.size,!0,f))),void 0===_.end&&(E.end=w(o.tickIncrement(x(E.end),E.size,!1,f)))),b&&!a.traceIs(e,\"2dMap\")&&0===E._dataSpan&&\"category\"!==n.type&&\"multicategory\"!==n.type){if(l)return[E,p,!0];E=function(t,e,n,r,a){var o,s,l,c=t._fullLayout,u=function(t,e){for(var n=e.xaxis,r=e.yaxis,i=e.orientation,a=[],o=t._fullData,s=0;s<o.length;s++){var l=o[s];\"histogram\"===l.type&&!0===l.visible&&l.orientation===i&&l.xaxis===n&&l.yaxis===r&&a.push(l)}return a}(t,e),h=!1,f=1/0,p=[e];for(o=0;o<u.length;o++)if((s=u[o])===e)h=!0;else if(h){var m=d(t,s,n,r,!0),g=m[0],y=m[2];s[\"_\"+r+\"autoBinFinished\"]=1,s[\"_\"+r+\"pos0\"]=m[1],y?p.push(s):f=Math.min(f,g.size)}else l=c._histogramBinOpts[s[\"_\"+r+\"bingroup\"]],f=Math.min(f,l.size||s[a].size);var v=new Array(p.length);for(o=0;o<p.length;o++)for(var _=p[o][\"_\"+r+\"pos0\"],b=0;b<_.length;b++)if(void 0!==_[b]){v[o]=_[b];break}for(isFinite(f)||(f=i.distinctVals(v).minDiff),o=0;o<p.length;o++){var x=(s=p[o])[r+\"calendar\"],w={start:n.c2r(v[o]-f/2,0,x),end:n.c2r(v[o]+f/2,0,x),size:f};s._input[a]=s[a]=w,(l=c._histogramBinOpts[s[\"_\"+r+\"bingroup\"]])&&i.extendFlat(l,w)}return e[a]}(t,e,n,s,y)}(g=h.cumulative||{}).enabled&&\"include\"!==g.currentbin&&(\"decreasing\"===g.direction?E.start=w(o.tickIncrement(x(E.start),E.size,!0,f)):E.end=w(o.tickIncrement(x(E.end),E.size,!1,f))),_.size=E.size,_.sizeFound||(m.size=E.size,i.nestedProperty(u[0],y+\".size\").set(E.size)),M(\"start\",_,E),M(\"end\",_,E)}p=e[\"_\"+s+\"pos0\"],delete e[\"_\"+s+\"pos0\"];var D=e._input[y]||{},I=i.extendFlat({},_),P=_.start,R=n.r2l(D.start),z=void 0!==R;if((_.startFound||z)&&R!==n.r2l(P)){var j=z?R:i.aggNums(Math.min,null,p),F={type:\"category\"===n.type||\"multicategory\"===n.type?\"linear\":n.type,r2l:n.r2l,dtick:_.size,tick0:P,calendar:f,range:[j,o.tickIncrement(j,_.size,!1,f)].map(n.l2r)},N=o.tickFirst(F);N>n.r2l(j)&&(N=o.tickIncrement(N,_.size,!0,f)),I.start=n.l2r(N),z||i.nestedProperty(e,y+\".start\").set(I.start)}var B=_.end,Y=n.r2l(D.end),H=void 0!==Y;if((_.endFound||H)&&Y!==n.r2l(B)){var V=H?Y:i.aggNums(Math.max,null,p);I.end=n.l2r(V),H||i.nestedProperty(e,y+\".start\").set(I.end)}var U=\"autobin\"+s;return!1===e._input[U]&&(e._input[y]=i.extendFlat({},e[y]||{}),delete e._input[U],delete e[U]),[I,p]}e.exports={calc:function(t,e){var n,a,f,p,m=[],g=[],y=o.getFromId(t,\"h\"===e.orientation?e.yaxis:e.xaxis),v=\"h\"===e.orientation?\"y\":\"x\",_={x:\"y\",y:\"x\"}[v],b=e[v+\"calendar\"],x=e.cumulative,w=d(t,e,y,v),k=w[0],M=w[1],T=\"string\"==typeof k.size,S=[],A=T?S:k,L=[],C=[],E=[],O=0,D=e.histnorm,I=e.histfunc,P=-1!==D.indexOf(\"density\");x.enabled&&P&&(D=D.replace(/ ?density$/,\"\"),P=!1);var R,z=\"max\"===I||\"min\"===I?null:0,j=l.count,F=c[D],N=!1,B=function(t){return y.r2c(t,0,b)};for(i.isArrayOrTypedArray(e[_])&&\"count\"!==I&&(R=e[_],N=\"avg\"===I,j=l[I]),n=B(k.start),f=B(k.end)+(n-o.tickIncrement(n,k.size,!1,b))/1e6;n<f&&m.length<1e6&&(a=o.tickIncrement(n,k.size,!1,b),m.push((n+a)/2),g.push(z),E.push([]),S.push(n),P&&L.push(1/(a-n)),N&&C.push(0),!(a<=n));)n=a;S.push(n),T||\"date\"!==y.type||(A={start:B(A.start),end:B(A.end),size:A.size}),t._fullLayout._roundFnOpts||(t._fullLayout._roundFnOpts={});var Y=e[\"_\"+v+\"bingroup\"],H={leftGap:1/0,rightGap:1/0};Y&&(t._fullLayout._roundFnOpts[Y]||(t._fullLayout._roundFnOpts[Y]=H),H=t._fullLayout._roundFnOpts[Y]);var V,U=g.length,W=!0,q=H.leftGap,G=H.rightGap,X={};for(n=0;n<M.length;n++){var Z=M[n];(p=i.findBin(Z,A))>=0&&p<U&&(O+=j(p,n,g,R,C),W&&E[p].length&&Z!==M[E[p][0]]&&(W=!1),E[p].push(n),X[n]=p,q=Math.min(q,Z-S[p]),G=Math.min(G,S[p+1]-Z))}H.leftGap=q,H.rightGap=G,W||(V=function(e,n){return function(){var r=t._fullLayout._roundFnOpts[Y];return h(r.leftGap,r.rightGap,S,y,b)(e,n)}}),N&&(O=u(g,C)),F&&F(g,O,L),x.enabled&&function(t,e,n){var r,i,a;function o(e){a=t[e],t[e]/=2}function s(e){t[e]=a+(i=t[e])/2,a+=i}if(\"half\"===n)if(\"increasing\"===e)for(o(0),r=1;r<t.length;r++)s(r);else for(o(t.length-1),r=t.length-2;r>=0;r--)s(r);else if(\"increasing\"===e){for(r=1;r<t.length;r++)t[r]+=t[r-1];\"exclude\"===n&&(t.unshift(0),t.pop())}else{for(r=t.length-2;r>=0;r--)t[r]+=t[r+1];\"exclude\"===n&&(t.push(0),t.shift())}}(g,x.direction,x.currentbin);var J=Math.min(m.length,g.length),K=[],$=0,Q=J-1;for(n=0;n<J;n++)if(g[n]){$=n;break}for(n=J-1;n>=$;n--)if(g[n]){Q=n;break}for(n=$;n<=Q;n++)if(r(m[n])&&r(g[n])){var tt={p:m[n],s:g[n],b:0};x.enabled||(tt.pts=E[n],W?tt.ph0=tt.ph1=E[n].length?M[E[n][0]]:m[n]:(e._computePh=!0,tt.ph0=V(S[n]),tt.ph1=V(S[n+1],!0))),K.push(tt)}return 1===K.length&&(K[0].width1=o.tickIncrement(K[0].p,k.size,!1,b)-K[0].p),s(K,e),i.isArrayOrTypedArray(e.selectedpoints)&&i.tagSelected(K,e,X),K},calcAllAutoBins:d}},{\"../../lib\":778,\"../../plots/cartesian/axes\":828,\"../../registry\":911,\"../bar/arrays_to_calcdata\":920,\"./average\":1085,\"./bin_functions\":1087,\"./bin_label_vals\":1088,\"./norm_functions\":1096,\"fast-isnumeric\":241}],1090:[function(t,e,n){\"use strict\";e.exports={eventDataKeys:[\"binNumber\"]}},{}],1091:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../plots/cartesian/axis_ids\"),a=t(\"../../registry\").traceIs,o=t(\"../bar/defaults\").handleGroupingDefaults,s=r.nestedProperty,l=t(\"../../plots/cartesian/constraints\").getAxisGroup,c=[{aStr:{x:\"xbins.start\",y:\"ybins.start\"},name:\"start\"},{aStr:{x:\"xbins.end\",y:\"ybins.end\"},name:\"end\"},{aStr:{x:\"xbins.size\",y:\"ybins.size\"},name:\"size\"},{aStr:{x:\"nbinsx\",y:\"nbinsy\"},name:\"nbins\"}],u=[\"x\",\"y\"];e.exports=function(t,e){var n,h,d,f,p,m,g,y=e._histogramBinOpts={},v=[],_={},b=[];function x(t,e){return r.coerce(n._input,n,n._module.attributes,t,e)}function w(t){return\"v\"===t.orientation?\"x\":\"y\"}function k(t,n,a){var o=t.uid+\"__\"+a;n||(n=o);var s=function(t,n){return i.getFromTrace({_fullLayout:e},t,n).type}(t,a),l=t[a+\"calendar\"]||\"\",c=y[n],u=!0;c&&(s===c.axType&&l===c.calendar?(u=!1,c.traces.push(t),c.dirs.push(a)):(n=o,s!==c.axType&&r.warn([\"Attempted to group the bins of trace\",t.index,\"set on a\",\"type:\"+s,\"axis\",\"with bins on\",\"type:\"+c.axType,\"axis.\"].join(\" \")),l!==c.calendar&&r.warn([\"Attempted to group the bins of trace\",t.index,\"set with a\",l,\"calendar\",\"with bins\",c.calendar?\"on a \"+c.calendar+\" calendar\":\"w/o a set calendar\"].join(\" \")))),u&&(y[n]={traces:[t],dirs:[a],axType:s,calendar:t[a+\"calendar\"]||\"\"}),t[\"_\"+a+\"bingroup\"]=n}for(p=0;p<t.length;p++)a(n=t[p],\"histogram\")&&(v.push(n),delete n._xautoBinFinished,delete n._yautoBinFinished,a(n,\"2dMap\")||o(n._input,n,e,x));var M=e._alignmentOpts||{};for(p=0;p<v.length;p++){if(d=\"\",!a(n=v[p],\"2dMap\")){if(f=w(n),\"group\"===e.barmode&&n.alignmentgroup){var T=l(e,n[f+\"axis\"])+n.orientation;(M[T]||{})[n.alignmentgroup]&&(d=T)}d||\"overlay\"===e.barmode||(d=l(e,n.xaxis)+l(e,n.yaxis)+w(n))}d?(_[d]||(_[d]=[]),_[d].push(n)):b.push(n)}for(d in _)if(1!==(h=_[d]).length){var S=!1;for(h.length&&(n=h[0],S=x(\"bingroup\")),d=S||d,p=0;p<h.length;p++){var A=(n=h[p])._input.bingroup;A&&A!==d&&r.warn([\"Trace\",n.index,\"must match\",\"within bingroup\",d+\".\",\"Ignoring its bingroup:\",A,\"setting.\"].join(\" \")),n.bingroup=d,k(n,d,w(n))}}else b.push(h[0]);for(p=0;p<b.length;p++){n=b[p];var L=x(\"bingroup\");if(a(n,\"2dMap\"))for(g=0;g<2;g++){var C=x((f=u[g])+\"bingroup\",L?L+\"__\"+f:null);k(n,C,f)}else k(n,L,w(n))}for(d in y){var E=y[d];for(h=E.traces,m=0;m<c.length;m++){var O,D,I=c[m],P=I.name;if(\"nbins\"!==P||!E.sizeFound){for(p=0;p<h.length;p++){if(void 0!==s((n=h[p])._input,O=I.aStr[f=E.dirs[p]]).get()){E[P]=x(O),E[P+\"Found\"]=!0;break}(D=(n._autoBin||{})[f]||{})[P]&&s(n,O).set(D[P])}if(\"start\"===P||\"end\"===P)for(;p<h.length;p++)(n=h[p])[\"_\"+f+\"bingroup\"]&&x(O,(D=(n._autoBin||{})[f]||{})[P]);\"nbins\"!==P||E.sizeFound||E.nbinsFound||(n=h[0],E[P]=x(O))}}}}},{\"../../lib\":778,\"../../plots/cartesian/axis_ids\":831,\"../../plots/cartesian/constraints\":835,\"../../registry\":911,\"../bar/defaults\":925}],1092:[function(t,e,n){\"use strict\";var r=t(\"../../registry\"),i=t(\"../../lib\"),a=t(\"../../components/color\"),o=t(\"../bar/style_defaults\"),s=t(\"./attributes\");e.exports=function(t,e,n,l){function c(n,r){return i.coerce(t,e,s,n,r)}var u=c(\"x\"),h=c(\"y\");c(\"cumulative.enabled\")&&(c(\"cumulative.direction\"),c(\"cumulative.currentbin\")),c(\"text\"),c(\"hovertext\"),c(\"hovertemplate\");var d=c(\"orientation\",h&&!u?\"h\":\"v\"),f=\"v\"===d?\"x\":\"y\",p=\"v\"===d?\"y\":\"x\",m=u&&h?Math.min(i.minRowLength(u)&&i.minRowLength(h)):i.minRowLength(e[f]||[]);if(m){e._length=m,r.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\"],l),e[p]&&c(\"histfunc\"),c(\"histnorm\"),c(\"autobin\"+f),o(t,e,c,n,l),i.coerceSelectionMarkerOpacity(e,c);var g=(e.marker.line||{}).color,y=r.getComponentMethod(\"errorbars\",\"supplyDefaults\");y(t,e,g||a.defaultLine,{axis:\"y\"}),y(t,e,g||a.defaultLine,{axis:\"x\",inherit:\"y\"})}else e.visible=!1}},{\"../../components/color\":643,\"../../lib\":778,\"../../registry\":911,\"../bar/style_defaults\":936,\"./attributes\":1084}],1093:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,r,i){if(t.x=\"xVal\"in e?e.xVal:e.x,t.y=\"yVal\"in e?e.yVal:e.y,\"zLabelVal\"in e&&(t.z=e.zLabelVal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),!(n.cumulative||{}).enabled){var a,o=Array.isArray(i)?r[0].pts[i[0]][i[1]]:r[i].pts;if(t.pointNumbers=o,t.binNumber=t.pointNumber,delete t.pointNumber,delete t.pointIndex,n._indexToPoints){a=[];for(var s=0;s<o.length;s++)a=a.concat(n._indexToPoints[o[s]])}else a=o;t.pointIndices=a}return t}},{}],1094:[function(t,e,n){\"use strict\";var r=t(\"../bar/hover\").hoverPoints,i=t(\"../../plots/cartesian/axes\").hoverLabelText;e.exports=function(t,e,n,a){var o=r(t,e,n,a);if(o){var s=(t=o[0]).cd[t.index],l=t.cd[0].trace;if(!l.cumulative.enabled){var c=\"h\"===l.orientation?\"y\":\"x\";t[c+\"Label\"]=i(t[c+\"a\"],s.ph0,s.ph1)}return o}}},{\"../../plots/cartesian/axes\":828,\"../bar/hover\":928}],1095:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),layoutAttributes:t(\"../bar/layout_attributes\"),supplyDefaults:t(\"./defaults\"),crossTraceDefaults:t(\"./cross_trace_defaults\"),supplyLayoutDefaults:t(\"../bar/layout_defaults\"),calc:t(\"./calc\").calc,crossTraceCalc:t(\"../bar/cross_trace_calc\").crossTraceCalc,plot:t(\"../bar/plot\").plot,layerName:\"barlayer\",style:t(\"../bar/style\").style,styleOnSelect:t(\"../bar/style\").styleOnSelect,colorbar:t(\"../scatter/marker_colorbar\"),hoverPoints:t(\"./hover\"),selectPoints:t(\"../bar/select\"),eventData:t(\"./event_data\"),moduleType:\"trace\",name:\"histogram\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"bar-like\",\"cartesian\",\"svg\",\"bar\",\"histogram\",\"oriented\",\"errorBarsOK\",\"showLegend\"],meta:{}}},{\"../../plots/cartesian\":841,\"../bar/cross_trace_calc\":924,\"../bar/layout_attributes\":930,\"../bar/layout_defaults\":931,\"../bar/plot\":932,\"../bar/select\":933,\"../bar/style\":935,\"../scatter/marker_colorbar\":1205,\"./attributes\":1084,\"./calc\":1089,\"./cross_trace_defaults\":1091,\"./defaults\":1092,\"./event_data\":1093,\"./hover\":1094}],1096:[function(t,e,n){\"use strict\";e.exports={percent:function(t,e){for(var n=t.length,r=100/e,i=0;i<n;i++)t[i]*=r},probability:function(t,e){for(var n=t.length,r=0;r<n;r++)t[r]/=e},density:function(t,e,n,r){var i=t.length;r=r||1;for(var a=0;a<i;a++)t[a]*=n[a]*r},\"probability density\":function(t,e,n,r){var i=t.length;r&&(e/=r);for(var a=0;a<i;a++)t[a]*=n[a]/e}}},{}],1097:[function(t,e,n){\"use strict\";var r=t(\"../histogram/attributes\"),i=t(\"../histogram/bin_attributes\"),a=t(\"../heatmap/attributes\"),o=t(\"../../plots/attributes\"),s=t(\"../../plots/template_attributes\").hovertemplateAttrs,l=t(\"../../components/colorscale/attributes\"),c=t(\"../../lib/extend\").extendFlat;e.exports=c({x:r.x,y:r.y,z:{valType:\"data_array\",editType:\"calc\"},marker:{color:{valType:\"data_array\",editType:\"calc\"},editType:\"calc\"},histnorm:r.histnorm,histfunc:r.histfunc,nbinsx:r.nbinsx,xbins:i(\"x\"),nbinsy:r.nbinsy,ybins:i(\"y\"),autobinx:r.autobinx,autobiny:r.autobiny,bingroup:c({},r.bingroup,{}),xbingroup:c({},r.bingroup,{}),ybingroup:c({},r.bingroup,{}),xgap:a.xgap,ygap:a.ygap,zsmooth:a.zsmooth,zhoverformat:a.zhoverformat,hovertemplate:s({},{keys:\"z\"}),showlegend:c({},o.showlegend,{dflt:!1})},l(\"\",{cLetter:\"z\",autoColorDflt:!1}))},{\"../../components/colorscale/attributes\":650,\"../../lib/extend\":768,\"../../plots/attributes\":824,\"../../plots/template_attributes\":906,\"../heatmap/attributes\":1065,\"../histogram/attributes\":1084,\"../histogram/bin_attributes\":1086}],1098:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../plots/cartesian/axes\"),a=t(\"../histogram/bin_functions\"),o=t(\"../histogram/norm_functions\"),s=t(\"../histogram/average\"),l=t(\"../histogram/bin_label_vals\"),c=t(\"../histogram/calc\").calcAllAutoBins;function u(t,e,n,r){var i,a=new Array(t);if(r)for(i=0;i<t;i++)a[i]=1/(e[i+1]-e[i]);else{var o=1/n;for(i=0;i<t;i++)a[i]=o}return a}function h(t,e){return{start:t(e.start),end:t(e.end),size:e.size}}function d(t,e,n,r,i,a){var o,s=t.length-1,c=new Array(s),u=l(n,r,t,i,a);for(o=0;o<s;o++){var h=(e||[])[o];c[o]=void 0===h?[u(t[o]),u(t[o+1],!0)]:[h,h]}return c}e.exports=function(t,e){var n,l,f,p,m=i.getFromId(t,e.xaxis),g=i.getFromId(t,e.yaxis),y=e.xcalendar,v=e.ycalendar,_=function(t){return m.r2c(t,0,y)},b=function(t){return g.r2c(t,0,v)},x=c(t,e,m,\"x\"),w=x[0],k=x[1],M=c(t,e,g,\"y\"),T=M[0],S=M[1],A=e._length;k.length>A&&k.splice(A,k.length-A),S.length>A&&S.splice(A,S.length-A);var L=[],C=[],E=[],O=\"string\"==typeof w.size,D=\"string\"==typeof T.size,I=[],P=[],R=O?I:w,z=D?P:T,j=0,F=[],N=[],B=e.histnorm,Y=e.histfunc,H=-1!==B.indexOf(\"density\"),V=\"max\"===Y||\"min\"===Y?null:0,U=a.count,W=o[B],q=!1,G=[],X=[],Z=\"z\"in e?e.z:\"marker\"in e&&Array.isArray(e.marker.color)?e.marker.color:\"\";Z&&\"count\"!==Y&&(q=\"avg\"===Y,U=a[Y]);var J=w.size,K=_(w.start),$=_(w.end)+(K-i.tickIncrement(K,J,!1,y))/1e6;for(n=K;n<$;n=i.tickIncrement(n,J,!1,y))C.push(V),I.push(n),q&&E.push(0);I.push(n);var Q=C.length,tt=(n-K)/Q,et=m.c2r(K+tt/2,0,y),nt=T.size,rt=b(T.start),it=b(T.end)+(rt-i.tickIncrement(rt,nt,!1,v))/1e6;for(n=rt;n<it;n=i.tickIncrement(n,nt,!1,v)){L.push(C.slice()),P.push(n);var at=new Array(Q);for(l=0;l<Q;l++)at[l]=[];N.push(at),q&&F.push(E.slice())}P.push(n);var ot=L.length,st=(n-rt)/ot,lt=g.c2r(rt+st/2,0,v);H&&(G=u(C.length,R,tt,O),X=u(L.length,z,st,D)),O||\"date\"!==m.type||(R=h(_,R)),D||\"date\"!==g.type||(z=h(b,z));var ct=!0,ut=!0,ht=new Array(Q),dt=new Array(ot),ft=1/0,pt=1/0,mt=1/0,gt=1/0;for(n=0;n<A;n++){var yt=k[n],vt=S[n];f=r.findBin(yt,R),p=r.findBin(vt,z),f>=0&&f<Q&&p>=0&&p<ot&&(j+=U(f,n,L[p],Z,F[p]),N[p][f].push(n),ct&&(void 0===ht[f]?ht[f]=yt:ht[f]!==yt&&(ct=!1)),ut&&(void 0===dt[p]?dt[p]=vt:dt[p]!==vt&&(ut=!1)),ft=Math.min(ft,yt-I[f]),pt=Math.min(pt,I[f+1]-yt),mt=Math.min(mt,vt-P[p]),gt=Math.min(gt,P[p+1]-vt))}if(q)for(p=0;p<ot;p++)j+=s(L[p],F[p]);if(W)for(p=0;p<ot;p++)W(L[p],j,G,X[p]);return{x:k,xRanges:d(I,ct&&ht,ft,pt,m,y),x0:et,dx:tt,y:S,yRanges:d(P,ut&&dt,mt,gt,g,v),y0:lt,dy:st,z:L,pts:N}}},{\"../../lib\":778,\"../../plots/cartesian/axes\":828,\"../histogram/average\":1085,\"../histogram/bin_functions\":1087,\"../histogram/bin_label_vals\":1088,\"../histogram/calc\":1089,\"../histogram/norm_functions\":1096}],1099:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./sample_defaults\"),a=t(\"../heatmap/style_defaults\"),o=t(\"../../components/colorscale/defaults\"),s=t(\"./attributes\");e.exports=function(t,e,n,l){function c(n,i){return r.coerce(t,e,s,n,i)}i(t,e,c,l),!1!==e.visible&&(a(t,e,c,l),o(t,e,l,c,{prefix:\"\",cLetter:\"z\"}),c(\"hovertemplate\"))}},{\"../../components/colorscale/defaults\":653,\"../../lib\":778,\"../heatmap/style_defaults\":1078,\"./attributes\":1097,\"./sample_defaults\":1102}],1100:[function(t,e,n){\"use strict\";var r=t(\"../heatmap/hover\"),i=t(\"../../plots/cartesian/axes\").hoverLabelText;e.exports=function(t,e,n,a,o,s){var l=r(t,e,n,a,o,s);if(l){var c=(t=l[0]).index,u=t.cd[0],h=u.xRanges[c[1]],d=u.yRanges[c[0]];return t.xLabel=i(t.xa,h[0],h[1]),t.yLabel=i(t.ya,d[0],d[1]),l}}},{\"../../plots/cartesian/axes\":828,\"../heatmap/hover\":1072}],1101:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),crossTraceDefaults:t(\"../histogram/cross_trace_defaults\"),calc:t(\"../heatmap/calc\"),plot:t(\"../heatmap/plot\"),layerName:\"heatmaplayer\",colorbar:t(\"../heatmap/colorbar\"),style:t(\"../heatmap/style\"),hoverPoints:t(\"./hover\"),eventData:t(\"../histogram/event_data\"),moduleType:\"trace\",name:\"histogram2d\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"2dMap\",\"histogram\",\"showLegend\"],meta:{}}},{\"../../plots/cartesian\":841,\"../heatmap/calc\":1066,\"../heatmap/colorbar\":1068,\"../heatmap/plot\":1076,\"../heatmap/style\":1077,\"../histogram/cross_trace_defaults\":1091,\"../histogram/event_data\":1093,\"./attributes\":1097,\"./defaults\":1099,\"./hover\":1100}],1102:[function(t,e,n){\"use strict\";var r=t(\"../../registry\"),i=t(\"../../lib\");e.exports=function(t,e,n,a){var o=n(\"x\"),s=n(\"y\"),l=i.minRowLength(o),c=i.minRowLength(s);l&&c?(e._length=Math.min(l,c),r.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\"],a),(n(\"z\")||n(\"marker.color\"))&&n(\"histfunc\"),n(\"histnorm\"),n(\"autobinx\"),n(\"autobiny\")):e.visible=!1}},{\"../../lib\":778,\"../../registry\":911}],1103:[function(t,e,n){\"use strict\";var r=t(\"../histogram2d/attributes\"),i=t(\"../contour/attributes\"),a=t(\"../../components/colorscale/attributes\"),o=t(\"../../lib/extend\").extendFlat;e.exports=o({x:r.x,y:r.y,z:r.z,marker:r.marker,histnorm:r.histnorm,histfunc:r.histfunc,nbinsx:r.nbinsx,xbins:r.xbins,nbinsy:r.nbinsy,ybins:r.ybins,autobinx:r.autobinx,autobiny:r.autobiny,bingroup:r.bingroup,xbingroup:r.xbingroup,ybingroup:r.ybingroup,autocontour:i.autocontour,ncontours:i.ncontours,contours:i.contours,line:{color:i.line.color,width:o({},i.line.width,{dflt:.5}),dash:i.line.dash,smoothing:i.line.smoothing,editType:\"plot\"},zhoverformat:r.zhoverformat,hovertemplate:r.hovertemplate},a(\"\",{cLetter:\"z\",editTypeOverride:\"calc\"}))},{\"../../components/colorscale/attributes\":650,\"../../lib/extend\":768,\"../contour/attributes\":1008,\"../histogram2d/attributes\":1097}],1104:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../histogram2d/sample_defaults\"),a=t(\"../contour/contours_defaults\"),o=t(\"../contour/style_defaults\"),s=t(\"./attributes\");e.exports=function(t,e,n,l){function c(n,i){return r.coerce(t,e,s,n,i)}i(t,e,c,l),!1!==e.visible&&(a(t,e,c,(function(n){return r.coerce2(t,e,s,n)})),o(t,e,c,l),c(\"hovertemplate\"))}},{\"../../lib\":778,\"../contour/contours_defaults\":1015,\"../contour/style_defaults\":1029,\"../histogram2d/sample_defaults\":1102,\"./attributes\":1103}],1105:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),crossTraceDefaults:t(\"../histogram/cross_trace_defaults\"),calc:t(\"../contour/calc\"),plot:t(\"../contour/plot\").plot,layerName:\"contourlayer\",style:t(\"../contour/style\"),colorbar:t(\"../contour/colorbar\"),hoverPoints:t(\"../contour/hover\"),moduleType:\"trace\",name:\"histogram2dcontour\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"2dMap\",\"contour\",\"histogram\",\"showLegend\"],meta:{}}},{\"../../plots/cartesian\":841,\"../contour/calc\":1009,\"../contour/colorbar\":1011,\"../contour/hover\":1021,\"../contour/plot\":1026,\"../contour/style\":1028,\"../histogram/cross_trace_defaults\":1091,\"./attributes\":1103,\"./defaults\":1104}],1106:[function(t,e,n){\"use strict\";for(var r=t(\"../../plots/attributes\"),i=t(\"../../plots/template_attributes\").hovertemplateAttrs,a=t(\"../../lib/extend\").extendFlat,o=t(\"./constants\").colormodel,s=[\"rgb\",\"rgba\",\"rgba256\",\"hsl\",\"hsla\"],l=[],c=[],u=0;u<s.length;u++){var h=o[s[u]];l.push(\"For the `\"+s[u]+\"` colormodel, it is [\"+(h.zminDflt||h.min).join(\", \")+\"].\"),c.push(\"For the `\"+s[u]+\"` colormodel, it is [\"+(h.zmaxDflt||h.max).join(\", \")+\"].\")}e.exports=a({source:{valType:\"string\",editType:\"calc\"},z:{valType:\"data_array\",editType:\"calc\"},colormodel:{valType:\"enumerated\",values:s,editType:\"calc\"},zmin:{valType:\"info_array\",items:[{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"}],editType:\"calc\"},zmax:{valType:\"info_array\",items:[{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"}],editType:\"calc\"},x0:{valType:\"any\",dflt:0,editType:\"calc+clearAxisTypes\"},y0:{valType:\"any\",dflt:0,editType:\"calc+clearAxisTypes\"},dx:{valType:\"number\",dflt:1,editType:\"calc\"},dy:{valType:\"number\",dflt:1,editType:\"calc\"},text:{valType:\"data_array\",editType:\"plot\"},hovertext:{valType:\"data_array\",editType:\"plot\"},hoverinfo:a({},r.hoverinfo,{flags:[\"x\",\"y\",\"z\",\"color\",\"name\",\"text\"],dflt:\"x+y+z+text+name\"}),hovertemplate:i({},{keys:[\"z\",\"color\",\"colormodel\"]}),transforms:void 0})},{\"../../lib/extend\":768,\"../../plots/attributes\":824,\"../../plots/template_attributes\":906,\"./constants\":1108}],1107:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./constants\"),a=t(\"fast-isnumeric\"),o=t(\"../../plots/cartesian/axes\"),s=t(\"../../lib\").maxRowLength,l=t(\"./helpers\").getImageSize;function c(t,e,n,i){return function(a){return r.constrain((a-t)*e,n,i)}}function u(t,e){return function(n){return r.constrain(n,t,e)}}e.exports=function(t,e){var n,r;if(e._hasZ)n=e.z.length,r=s(e.z);else if(e._hasSource){var h=l(e.source);n=h.height,r=h.width}var d,f=o.getFromId(t,e.xaxis||\"x\"),p=o.getFromId(t,e.yaxis||\"y\"),m=f.d2c(e.x0)-e.dx/2,g=p.d2c(e.y0)-e.dy/2,y=[m,m+r*e.dx],v=[g,g+n*e.dy];if(f&&\"log\"===f.type)for(d=0;d<r;d++)y.push(m+d*e.dx);if(p&&\"log\"===p.type)for(d=0;d<n;d++)v.push(g+d*e.dy);return e._extremes[f._id]=o.findExtremes(f,y),e._extremes[p._id]=o.findExtremes(p,v),e._scaler=function(t){var e=i.colormodel[t.colormodel],n=(e.colormodel||t.colormodel).length;t._sArray=[];for(var r=0;r<n;r++)t._sArray.push(e.min[r]!==t.zmin[r]||e.max[r]!==t.zmax[r]?c(t.zmin[r],(e.max[r]-e.min[r])/(t.zmax[r]-t.zmin[r]),e.min[r],e.max[r]):u(e.min[r],e.max[r]));return function(e){for(var r=e.slice(0,n),i=0;i<n;i++){var o=r[i];if(!a(o))return!1;r[i]=t._sArray[i](o)}return r}}(e),[{x0:m,y0:g,z:e.z,w:r,h:n}]}},{\"../../lib\":778,\"../../plots/cartesian/axes\":828,\"./constants\":1108,\"./helpers\":1111,\"fast-isnumeric\":241}],1108:[function(t,e,n){\"use strict\";e.exports={colormodel:{rgb:{min:[0,0,0],max:[255,255,255],fmt:function(t){return t.slice(0,3)},suffix:[\"\",\"\",\"\"]},rgba:{min:[0,0,0,0],max:[255,255,255,1],fmt:function(t){return t.slice(0,4)},suffix:[\"\",\"\",\"\",\"\"]},rgba256:{colormodel:\"rgba\",zminDflt:[0,0,0,0],zmaxDflt:[255,255,255,255],min:[0,0,0,0],max:[255,255,255,1],fmt:function(t){return t.slice(0,4)},suffix:[\"\",\"\",\"\",\"\"]},hsl:{min:[0,0,0],max:[360,100,100],fmt:function(t){var e=t.slice(0,3);return e[1]=e[1]+\"%\",e[2]=e[2]+\"%\",e},suffix:[\"\\xb0\",\"%\",\"%\"]},hsla:{min:[0,0,0,0],max:[360,100,100,1],fmt:function(t){var e=t.slice(0,4);return e[1]=e[1]+\"%\",e[2]=e[2]+\"%\",e},suffix:[\"\\xb0\",\"%\",\"%\",\"\"]}}}},{}],1109:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./attributes\"),a=t(\"./constants\"),o=t(\"../../snapshot/helpers\").IMAGE_URL_PREFIX;e.exports=function(t,e){function n(n,a){return r.coerce(t,e,i,n,a)}n(\"source\"),e.source&&!e.source.match(o)&&delete e.source,e._hasSource=!!e.source;var s,l=n(\"z\");e._hasZ=!(void 0===l||!l.length||!l[0]||!l[0].length),e._hasZ||e._hasSource?(n(\"x0\"),n(\"y0\"),n(\"dx\"),n(\"dy\"),e._hasZ?(n(\"colormodel\",\"rgb\"),n(\"zmin\",(s=a.colormodel[e.colormodel]).zminDflt||s.min),n(\"zmax\",s.zmaxDflt||s.max)):e._hasSource&&(e.colormodel=\"rgba256\",e.zmin=(s=a.colormodel[e.colormodel]).zminDflt,e.zmax=s.zmaxDflt),n(\"text\"),n(\"hovertext\"),n(\"hovertemplate\"),e._length=null):e.visible=!1}},{\"../../lib\":778,\"../../snapshot/helpers\":915,\"./attributes\":1106,\"./constants\":1108}],1110:[function(t,e,n){\"use strict\";e.exports=function(t,e){return\"xVal\"in e&&(t.x=e.xVal),\"yVal\"in e&&(t.y=e.yVal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t.color=e.color,t.colormodel=e.trace.colormodel,t.z||(t.z=e.color),t}},{}],1111:[function(t,e,n){\"use strict\";var r=t(\"image-size\"),i=t(\"../../snapshot/helpers\").IMAGE_URL_PREFIX,a=t(\"buffer/\").Buffer;n.getImageSize=function(t){var e=t.replace(i,\"\"),n=new a(e,\"base64\");return r(n)}},{\"../../snapshot/helpers\":915,\"buffer/\":111,\"image-size\":444}],1112:[function(t,e,n){\"use strict\";var r=t(\"../../components/fx\"),i=t(\"../../lib\"),a=t(\"./constants\");e.exports=function(t,e,n){var o=t.cd[0],s=o.trace,l=t.xa,c=t.ya;if(!(r.inbox(e-o.x0,e-(o.x0+o.w*s.dx),0)>0||r.inbox(n-o.y0,n-(o.y0+o.h*s.dy),0)>0)){var u,h=Math.floor((e-o.x0)/s.dx),d=Math.floor(Math.abs(n-o.y0)/s.dy);if(s._hasZ?u=o.z[d][h]:s._hasSource&&(u=s._canvas.el.getContext(\"2d\").getImageData(h,d,1,1).data),u){var f,p=o.hi||s.hoverinfo;if(p){var m=p.split(\"+\");-1!==m.indexOf(\"all\")&&(m=[\"color\"]),-1!==m.indexOf(\"color\")&&(f=!0)}var g,y=a.colormodel[s.colormodel],v=y.colormodel||s.colormodel,_=v.length,b=s._scaler(u),x=y.suffix,w=[];(s.hovertemplate||f)&&(w.push(\"[\"+[b[0]+x[0],b[1]+x[1],b[2]+x[2]].join(\", \")),4===_&&w.push(\", \"+b[3]+x[3]),w.push(\"]\"),w=w.join(\"\"),t.extraText=v.toUpperCase()+\": \"+w),Array.isArray(s.hovertext)&&Array.isArray(s.hovertext[d])?g=s.hovertext[d][h]:Array.isArray(s.text)&&Array.isArray(s.text[d])&&(g=s.text[d][h]);var k=c.c2p(o.y0+(d+.5)*s.dy),M=o.x0+(h+.5)*s.dx,T=o.y0+(d+.5)*s.dy,S=\"[\"+u.slice(0,s.colormodel.length).join(\", \")+\"]\";return[i.extendFlat(t,{index:[d,h],x0:l.c2p(o.x0+h*s.dx),x1:l.c2p(o.x0+(h+1)*s.dx),y0:k,y1:k,color:b,xVal:M,xLabelVal:M,yVal:T,yLabelVal:T,zLabelVal:S,text:g,hovertemplateLabels:{zLabel:S,colorLabel:w,\"color[0]Label\":b[0]+x[0],\"color[1]Label\":b[1]+x[1],\"color[2]Label\":b[2]+x[2],\"color[3]Label\":b[3]+x[3]}})]}}}},{\"../../components/fx\":683,\"../../lib\":778,\"./constants\":1108}],1113:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),calc:t(\"./calc\"),plot:t(\"./plot\"),style:t(\"./style\"),hoverPoints:t(\"./hover\"),eventData:t(\"./event_data\"),moduleType:\"trace\",name:\"image\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"2dMap\",\"noSortingByValue\"],animatable:!1,meta:{}}},{\"../../plots/cartesian\":841,\"./attributes\":1106,\"./calc\":1107,\"./defaults\":1109,\"./event_data\":1110,\"./hover\":1112,\"./plot\":1114,\"./style\":1115}],1114:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../lib\"),a=i.strTranslate,o=t(\"../../constants/xmlns_namespaces\"),s=t(\"./constants\"),l=i.isIOS()||i.isSafari()||i.isIE();e.exports=function(t,e,n,c){var u=e.xaxis,h=e.yaxis,d=!(l||t._context._exportedPlot);i.makeTraceGroups(c,n,\"im\").each((function(e){var n=r.select(this),l=e[0],c=l.trace,f=d&&!c._hasZ&&c._hasSource&&\"linear\"===u.type&&\"linear\"===h.type;c._fastImage=f;var p,m,g,y,v,_,b=l.z,x=l.x0,w=l.y0,k=l.w,M=l.h,T=c.dx,S=c.dy;for(_=0;void 0===p&&_<k;)p=u.c2p(x+_*T),_++;for(_=k;void 0===m&&_>0;)m=u.c2p(x+_*T),_--;for(_=0;void 0===y&&_<M;)y=h.c2p(w+_*S),_++;for(_=M;void 0===v&&_>0;)v=h.c2p(w+_*S),_--;m<p&&(g=m,m=p,p=g),v<y&&(g=y,y=v,v=g),f||(p=Math.max(-.5*u._length,p),m=Math.min(1.5*u._length,m),y=Math.max(-.5*h._length,y),v=Math.min(1.5*h._length,v));var A=Math.round(m-p),L=Math.round(v-y);if(A<=0||L<=0)n.selectAll(\"image\").data([]).exit().remove();else{var C=n.selectAll(\"image\").data([e]);C.enter().append(\"svg:image\").attr({xmlns:o.svg,preserveAspectRatio:\"none\"}),C.exit().remove();var E=\"image-rendering: optimizeSpeed; image-rendering: -moz-crisp-edges; image-rendering: -o-crisp-edges; image-rendering: -webkit-optimize-contrast; image-rendering: optimize-contrast; image-rendering: crisp-edges; image-rendering: pixelated;\";if(f){var O=i.simpleMap(u.range,u.r2l),D=i.simpleMap(h.range,h.r2l),I=O[1]<O[0],P=D[1]>D[0];if(I||P){var R=p+A/2,z=y+L/2;E+=\"transform:\"+a(R+\"px\",z+\"px\")+\"scale(\"+(I?-1:1)+\",\"+(P?-1:1)+\")\"+a(-R+\"px\",-z+\"px\")+\";\"}}C.attr(\"style\",E);var j=new Promise((function(t){if(c._hasZ)t();else if(c._hasSource)if(c._canvas&&c._canvas.el.width===k&&c._canvas.el.height===M&&c._canvas.source===c.source)t();else{var e=document.createElement(\"canvas\");e.width=k,e.height=M;var n=e.getContext(\"2d\");c._image=c._image||new Image;var r=c._image;r.onload=function(){n.drawImage(r,0,0),c._canvas={el:e,source:c.source},t()},r.setAttribute(\"src\",c.source)}})).then((function(){var t;if(c._hasZ)t=F((function(t,e){return b[e][t]})).toDataURL(\"image/png\");else if(c._hasSource)if(f)t=c.source;else{var e=c._canvas.el.getContext(\"2d\").getImageData(0,0,k,M).data;t=F((function(t,n){var r=4*(n*k+t);return[e[r],e[r+1],e[r+2],e[r+3]]})).toDataURL(\"image/png\")}C.attr({\"xlink:href\":t,height:L,width:A,x:p,y:y})}));t._promises.push(j)}function F(t){var e=document.createElement(\"canvas\");e.width=A,e.height=L;var n,r=e.getContext(\"2d\"),a=function(t){return i.constrain(Math.round(u.c2p(x+t*T)-p),0,A)},o=function(t){return i.constrain(Math.round(h.c2p(w+t*S)-y),0,L)},d=s.colormodel[c.colormodel],f=d.colormodel||c.colormodel,m=d.fmt;for(_=0;_<l.w;_++){var g=a(_),v=a(_+1);if(v!==g&&!isNaN(v)&&!isNaN(g))for(var b=0;b<l.h;b++){var k=o(b),M=o(b+1);M===k||isNaN(M)||isNaN(k)||!t(_,b)||(n=c._scaler(t(_,b)),r.fillStyle=n?f+\"(\"+m(n).join(\",\")+\")\":\"rgba(0,0,0,0)\",r.fillRect(g,k,v-g,M-k))}}return e}}))}},{\"../../constants/xmlns_namespaces\":754,\"../../lib\":778,\"./constants\":1108,d3:169}],1115:[function(t,e,n){\"use strict\";var r=t(\"d3\");e.exports=function(t){r.select(t).selectAll(\".im image\").style(\"opacity\",(function(t){return t[0].trace.opacity}))}},{d3:169}],1116:[function(t,e,n){\"use strict\";var r=t(\"../../lib/extend\").extendFlat,i=t(\"../../lib/extend\").extendDeep,a=t(\"../../plot_api/edit_types\").overrideAll,o=t(\"../../plots/font_attributes\"),s=t(\"../../components/color/attributes\"),l=t(\"../../plots/domain\").attributes,c=t(\"../../plots/cartesian/layout_attributes\"),u=t(\"../../plot_api/plot_template\").templatedArray,h=t(\"../../constants/delta.js\"),d=(t(\"../../constants/docs\"),o({editType:\"plot\",colorEditType:\"plot\"})),f={color:{valType:\"color\",editType:\"plot\"},line:{color:{valType:\"color\",dflt:s.defaultLine,editType:\"plot\"},width:{valType:\"number\",min:0,dflt:0,editType:\"plot\"},editType:\"calc\"},thickness:{valType:\"number\",min:0,max:1,dflt:1,editType:\"plot\"},editType:\"calc\"},p={valType:\"info_array\",items:[{valType:\"number\",editType:\"plot\"},{valType:\"number\",editType:\"plot\"}],editType:\"plot\"},m=u(\"step\",i({},f,{range:p}));e.exports={mode:{valType:\"flaglist\",editType:\"calc\",flags:[\"number\",\"delta\",\"gauge\"],dflt:\"number\"},value:{valType:\"number\",editType:\"calc\",anim:!0},align:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"],editType:\"plot\"},domain:l({name:\"indicator\",trace:!0,editType:\"calc\"}),title:{text:{valType:\"string\",editType:\"plot\"},align:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"],editType:\"plot\"},font:r({},d,{}),editType:\"plot\"},number:{valueformat:{valType:\"string\",dflt:\"\",editType:\"plot\"},font:r({},d,{}),prefix:{valType:\"string\",dflt:\"\",editType:\"plot\"},suffix:{valType:\"string\",dflt:\"\",editType:\"plot\"},editType:\"plot\"},delta:{reference:{valType:\"number\",editType:\"calc\"},position:{valType:\"enumerated\",values:[\"top\",\"bottom\",\"left\",\"right\"],dflt:\"bottom\",editType:\"plot\"},relative:{valType:\"boolean\",editType:\"plot\",dflt:!1},valueformat:{valType:\"string\",editType:\"plot\"},increasing:{symbol:{valType:\"string\",dflt:h.INCREASING.SYMBOL,editType:\"plot\"},color:{valType:\"color\",dflt:h.INCREASING.COLOR,editType:\"plot\"},editType:\"plot\"},decreasing:{symbol:{valType:\"string\",dflt:h.DECREASING.SYMBOL,editType:\"plot\"},color:{valType:\"color\",dflt:h.DECREASING.COLOR,editType:\"plot\"},editType:\"plot\"},font:r({},d,{}),editType:\"calc\"},gauge:{shape:{valType:\"enumerated\",editType:\"plot\",dflt:\"angular\",values:[\"angular\",\"bullet\"]},bar:i({},f,{color:{dflt:\"green\"}}),bgcolor:{valType:\"color\",editType:\"plot\"},bordercolor:{valType:\"color\",dflt:s.defaultLine,editType:\"plot\"},borderwidth:{valType:\"number\",min:0,dflt:1,editType:\"plot\"},axis:a({range:p,visible:r({},c.visible,{dflt:!0}),tickmode:c.tickmode,nticks:c.nticks,tick0:c.tick0,dtick:c.dtick,tickvals:c.tickvals,ticktext:c.ticktext,ticks:r({},c.ticks,{dflt:\"outside\"}),ticklen:c.ticklen,tickwidth:c.tickwidth,tickcolor:c.tickcolor,showticklabels:c.showticklabels,tickfont:o({}),tickangle:c.tickangle,tickformat:c.tickformat,tickformatstops:c.tickformatstops,tickprefix:c.tickprefix,showtickprefix:c.showtickprefix,ticksuffix:c.ticksuffix,showticksuffix:c.showticksuffix,separatethousands:c.separatethousands,exponentformat:c.exponentformat,minexponent:c.minexponent,showexponent:c.showexponent,editType:\"plot\"},\"plot\"),steps:m,threshold:{line:{color:r({},f.line.color,{}),width:r({},f.line.width,{dflt:1}),editType:\"plot\"},thickness:r({},f.thickness,{dflt:.85}),value:{valType:\"number\",editType:\"calc\",dflt:!1},editType:\"plot\"},editType:\"plot\"}}},{\"../../components/color/attributes\":642,\"../../constants/delta.js\":747,\"../../constants/docs\":748,\"../../lib/extend\":768,\"../../plot_api/edit_types\":810,\"../../plot_api/plot_template\":817,\"../../plots/cartesian/layout_attributes\":842,\"../../plots/domain\":855,\"../../plots/font_attributes\":856}],1117:[function(t,e,n){\"use strict\";var r=t(\"../../plots/plots\");n.name=\"indicator\",n.plot=function(t,e,i,a){r.plotBasePlot(n.name,t,e,i,a)},n.clean=function(t,e,i,a){r.cleanBasePlot(n.name,t,e,i,a)}},{\"../../plots/plots\":891}],1118:[function(t,e,n){\"use strict\";e.exports={calc:function(t,e){var n=[],r=e.value;\"number\"!=typeof e._lastValue&&(e._lastValue=e.value);var i=e._lastValue,a=i;return e._hasDelta&&\"number\"==typeof e.delta.reference&&(a=e.delta.reference),n[0]={y:r,lastY:i,delta:r-a,relativeDelta:(r-a)/a},n}}},{}],1119:[function(t,e,n){\"use strict\";e.exports={defaultNumberFontSize:80,bulletNumberDomainSize:.25,bulletPadding:.025,innerRadius:.75,valueThickness:.5,titlePadding:5,horizontalPadding:10}},{}],1120:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./attributes\"),a=t(\"../../plots/domain\").defaults,o=t(\"../../plot_api/plot_template\"),s=t(\"../../plots/array_container_defaults\"),l=t(\"./constants.js\"),c=t(\"../../plots/cartesian/tick_value_defaults\"),u=t(\"../../plots/cartesian/tick_mark_defaults\"),h=t(\"../../plots/cartesian/tick_label_defaults\");function d(t,e){function n(n,a){return r.coerce(t,e,i.gauge.steps,n,a)}n(\"color\"),n(\"line.color\"),n(\"line.width\"),n(\"range\"),n(\"thickness\")}e.exports={supplyDefaults:function(t,e,n,f){function p(n,a){return r.coerce(t,e,i,n,a)}a(e,f,p),p(\"mode\"),e._hasNumber=-1!==e.mode.indexOf(\"number\"),e._hasDelta=-1!==e.mode.indexOf(\"delta\"),e._hasGauge=-1!==e.mode.indexOf(\"gauge\");var m=p(\"value\");e._range=[0,\"number\"==typeof m?1.5*m:1];var g,y,v,_,b,x,w=new Array(2);function k(t,e){return r.coerce(v,_,i.gauge,t,e)}function M(t,e){return r.coerce(b,x,i.gauge.axis,t,e)}if(e._hasNumber&&(p(\"number.valueformat\"),p(\"number.font.color\",f.font.color),p(\"number.font.family\",f.font.family),p(\"number.font.size\"),void 0===e.number.font.size&&(e.number.font.size=l.defaultNumberFontSize,w[0]=!0),p(\"number.prefix\"),p(\"number.suffix\"),g=e.number.font.size),e._hasDelta&&(p(\"delta.font.color\",f.font.color),p(\"delta.font.family\",f.font.family),p(\"delta.font.size\"),void 0===e.delta.font.size&&(e.delta.font.size=(e._hasNumber?.5:1)*(g||l.defaultNumberFontSize),w[1]=!0),p(\"delta.reference\",e.value),p(\"delta.relative\"),p(\"delta.valueformat\",e.delta.relative?\"2%\":\"\"),p(\"delta.increasing.symbol\"),p(\"delta.increasing.color\"),p(\"delta.decreasing.symbol\"),p(\"delta.decreasing.color\"),p(\"delta.position\"),y=e.delta.font.size),e._scaleNumbers=(!e._hasNumber||w[0])&&(!e._hasDelta||w[1])||!1,p(\"title.font.color\",f.font.color),p(\"title.font.family\",f.font.family),p(\"title.font.size\",.25*(g||y||l.defaultNumberFontSize)),p(\"title.text\"),e._hasGauge){(v=t.gauge)||(v={}),_=o.newContainer(e,\"gauge\"),k(\"shape\"),(e._isBullet=\"bullet\"===e.gauge.shape)||p(\"title.align\",\"center\"),(e._isAngular=\"angular\"===e.gauge.shape)||p(\"align\",\"center\"),k(\"bgcolor\",f.paper_bgcolor),k(\"borderwidth\"),k(\"bordercolor\"),k(\"bar.color\"),k(\"bar.line.color\"),k(\"bar.line.width\"),k(\"bar.thickness\",l.valueThickness*(\"bullet\"===e.gauge.shape?.5:1)),s(v,_,{name:\"steps\",handleItemDefaults:d}),k(\"threshold.value\"),k(\"threshold.thickness\"),k(\"threshold.line.width\"),k(\"threshold.line.color\"),b={},v&&(b=v.axis||{}),x=o.newContainer(_,\"axis\"),M(\"visible\"),e._range=M(\"range\",e._range);var T={outerTicks:!0};c(b,x,M,\"linear\"),h(b,x,M,\"linear\",T),u(b,x,M,T)}else p(\"title.align\",\"center\"),p(\"align\",\"center\"),e._isAngular=e._isBullet=!1;e._length=null}}},{\"../../lib\":778,\"../../plot_api/plot_template\":817,\"../../plots/array_container_defaults\":823,\"../../plots/cartesian/tick_label_defaults\":849,\"../../plots/cartesian/tick_mark_defaults\":850,\"../../plots/cartesian/tick_value_defaults\":851,\"../../plots/domain\":855,\"./attributes\":1116,\"./constants.js\":1119}],1121:[function(t,e,n){\"use strict\";e.exports={moduleType:\"trace\",name:\"indicator\",basePlotModule:t(\"./base_plot\"),categories:[\"svg\",\"noOpacity\",\"noHover\"],animatable:!0,attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\").supplyDefaults,calc:t(\"./calc\").calc,plot:t(\"./plot\"),meta:{}}},{\"./attributes\":1116,\"./base_plot\":1117,\"./calc\":1118,\"./defaults\":1120,\"./plot\":1122}],1122:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../lib\"),a=i.strScale,o=i.strTranslate,s=i.rad2deg,l=t(\"../../constants/alignment\").MID_SHIFT,c=t(\"../../components/drawing\"),u=t(\"./constants\"),h=t(\"../../lib/svg_text_utils\"),d=t(\"../../plots/cartesian/axes\"),f=t(\"../../plots/cartesian/axis_defaults\"),p=t(\"../../plots/cartesian/position_defaults\"),m=t(\"../../plots/cartesian/layout_attributes\"),g=t(\"../../components/color\"),y={left:\"start\",center:\"middle\",right:\"end\"},v={left:0,center:.5,right:1},_=/[yzafpn\\xb5mkMGTPEZY]/;function b(t){return t&&t.duration>0}function x(t){t.each((function(t){g.stroke(r.select(this),t.line.color)})).each((function(t){g.fill(r.select(this),t.color)})).style(\"stroke-width\",(function(t){return t.line.width}))}function w(t,e,n){var r=t._fullLayout,a=i.extendFlat({type:\"linear\",ticks:\"outside\",range:n,showline:!0},e),o={type:\"linear\",_id:\"x\"+e._id},s={letter:\"x\",font:r.font,noHover:!0,noTickson:!0};function l(t,e){return i.coerce(a,o,m,t,e)}return f(a,o,l,s,r),p(a,o,l,s),o}function k(t,e,n){return[Math.min(e/t.width,n/t.height),t,e+\"x\"+n]}function M(t,e,n,i){var a=document.createElementNS(\"http://www.w3.org/2000/svg\",\"text\"),o=r.select(a);return o.text(t).attr(\"x\",0).attr(\"y\",0).attr(\"text-anchor\",n).attr(\"data-unformatted\",t).call(h.convertToTspans,i).call(c.font,e),c.bBox(o.node())}function T(t,e,n,r,a,o){var s=\"_cache\"+e;t[s]&&t[s].key===a||(t[s]={key:a,value:n});var l=i.aggNums(o,null,[t[s].value,r],2);return t[s].value=l,l}e.exports=function(t,e,n,f){var p,m=t._fullLayout;b(n)&&f&&(p=f()),i.makeTraceGroups(m._indicatorlayer,e,\"trace\").each((function(e){var f,S,A,L,C,E=e[0].trace,O=r.select(this),D=E._hasGauge,I=E._isAngular,P=E._isBullet,R=E.domain,z={w:m._size.w*(R.x[1]-R.x[0]),h:m._size.h*(R.y[1]-R.y[0]),l:m._size.l+m._size.w*R.x[0],r:m._size.r+m._size.w*(1-R.x[1]),t:m._size.t+m._size.h*(1-R.y[1]),b:m._size.b+m._size.h*R.y[0]},j=z.l+z.w/2,F=z.t+z.h/2,N=Math.min(z.w/2,z.h),B=u.innerRadius*N,Y=E.align||\"center\";if(S=F,D){if(I&&(f=j,S=F+N/2,A=function(t){return function(t,e){return[e/Math.sqrt(t.width/2*(t.width/2)+t.height*t.height),t,e]}(t,.9*B)}),P){var H=u.bulletPadding,V=1-u.bulletNumberDomainSize+H;f=z.l+(V+(1-V)*v[Y])*z.w,A=function(t){return k(t,(u.bulletNumberDomainSize-H)*z.w,z.h)}}}else f=z.l+v[Y]*z.w,A=function(t){return k(t,z.w,z.h)};(function(t,e,n,s){var l,u,f,p=n[0].trace,m=s.numbersX,x=s.numbersY,k=p.align||\"center\",S=y[k],A=s.transitionOpts,L=s.onComplete,C=i.ensureSingle(e,\"g\",\"numbers\"),E=[];p._hasNumber&&E.push(\"number\"),p._hasDelta&&(E.push(\"delta\"),\"left\"===p.delta.position&&E.reverse());var O=C.selectAll(\"text\").data(E);function D(e,n,r,i){if(!e.match(\"s\")||r>=0==i>=0||n(r).slice(-1).match(_)||n(i).slice(-1).match(_))return n;var a=e.slice().replace(\"s\",\"f\").replace(/\\d+/,(function(t){return parseInt(t)-1})),o=w(t,{tickformat:a});return function(t){return Math.abs(t)<1?d.tickText(o,t).text:n(t)}}O.enter().append(\"text\"),O.attr(\"text-anchor\",(function(){return S})).attr(\"class\",(function(t){return t})).attr(\"x\",null).attr(\"y\",null).attr(\"dx\",null).attr(\"dy\",null),O.exit().remove();var I,P=p.mode+p.align;if(p._hasDelta&&(I=function(){var e=w(t,{tickformat:p.delta.valueformat},p._range);e.setScale(),d.prepTicks(e);var i=function(t){return d.tickText(e,t).text},a=function(t){return p.delta.relative?t.relativeDelta:t.delta},o=function(t,e){return 0===t||\"number\"!=typeof t||isNaN(t)?\"-\":(t>0?p.delta.increasing.symbol:p.delta.decreasing.symbol)+e(t)},s=function(t){return t.delta>=0?p.delta.increasing.color:p.delta.decreasing.color};void 0===p._deltaLastValue&&(p._deltaLastValue=a(n[0]));var l=C.select(\"text.delta\");function f(){l.text(o(a(n[0]),i)).call(g.fill,s(n[0])).call(h.convertToTspans,t)}return l.call(c.font,p.delta.font).call(g.fill,s({delta:p._deltaLastValue})),b(A)?l.transition().duration(A.duration).ease(A.easing).tween(\"text\",(function(){var t=r.select(this),e=a(n[0]),l=p._deltaLastValue,c=D(p.delta.valueformat,i,l,e),u=r.interpolateNumber(l,e);return p._deltaLastValue=e,function(e){t.text(o(u(e),c)),t.call(g.fill,s({delta:u(e)}))}})).each(\"end\",(function(){f(),L&&L()})).each(\"interrupt\",(function(){f(),L&&L()})):f(),u=M(o(a(n[0]),i),p.delta.font,S,t),l}(),P+=p.delta.position+p.delta.font.size+p.delta.font.family+p.delta.valueformat,P+=p.delta.increasing.symbol+p.delta.decreasing.symbol,f=u),p._hasNumber&&(function(){var e=w(t,{tickformat:p.number.valueformat},p._range);e.setScale(),d.prepTicks(e);var i=function(t){return d.tickText(e,t).text},a=p.number.suffix,o=p.number.prefix,s=C.select(\"text.number\");function u(){var e=\"number\"==typeof n[0].y?o+i(n[0].y)+a:\"-\";s.text(e).call(c.font,p.number.font).call(h.convertToTspans,t)}b(A)?s.transition().duration(A.duration).ease(A.easing).each(\"end\",(function(){u(),L&&L()})).each(\"interrupt\",(function(){u(),L&&L()})).attrTween(\"text\",(function(){var t=r.select(this),e=r.interpolateNumber(n[0].lastY,n[0].y);p._lastValue=n[0].y;var s=D(p.number.valueformat,i,n[0].lastY,n[0].y);return function(n){t.text(o+s(e(n))+a)}})):u(),l=M(o+i(n[0].y)+a,p.number.font,S,t)}(),P+=p.number.font.size+p.number.font.family+p.number.valueformat+p.number.suffix+p.number.prefix,f=l),p._hasDelta&&p._hasNumber){var R,z,j=[(l.left+l.right)/2,(l.top+l.bottom)/2],F=[(u.left+u.right)/2,(u.top+u.bottom)/2],N=.75*p.delta.font.size;\"left\"===p.delta.position&&(R=T(p,\"deltaPos\",0,-1*(l.width*v[p.align]+u.width*(1-v[p.align])+N),P,Math.min),z=j[1]-F[1],f={width:l.width+u.width+N,height:Math.max(l.height,u.height),left:u.left+R,right:l.right,top:Math.min(l.top,u.top+z),bottom:Math.max(l.bottom,u.bottom+z)}),\"right\"===p.delta.position&&(R=T(p,\"deltaPos\",0,l.width*(1-v[p.align])+u.width*v[p.align]+N,P,Math.max),z=j[1]-F[1],f={width:l.width+u.width+N,height:Math.max(l.height,u.height),left:l.left,right:u.right+R,top:Math.min(l.top,u.top+z),bottom:Math.max(l.bottom,u.bottom+z)}),\"bottom\"===p.delta.position&&(R=null,z=u.height,f={width:Math.max(l.width,u.width),height:l.height+u.height,left:Math.min(l.left,u.left),right:Math.max(l.right,u.right),top:l.bottom-l.height,bottom:l.bottom+u.height}),\"top\"===p.delta.position&&(R=null,z=l.top,f={width:Math.max(l.width,u.width),height:l.height+u.height,left:Math.min(l.left,u.left),right:Math.max(l.right,u.right),top:l.bottom-l.height-u.height,bottom:l.bottom}),I.attr({dx:R,dy:z})}(p._hasNumber||p._hasDelta)&&C.attr(\"transform\",(function(){var t,e=s.numbersScaler(f),n=T(p,\"numbersScale\",1,e[0],P+=e[2],Math.min);p._scaleNumbers||(n=1),p._numbersTop=n*f.top+(t=p._isAngular?x-n*f.bottom:x-n*(f.top+f.bottom)/2);var r=f[k];\"center\"===k&&(r=(f.left+f.right)/2);var i=m-n*r;return i=T(p,\"numbersTranslate\",0,i,P,Math.max),o(i,t)+a(n)}))})(t,O,e,{numbersX:f,numbersY:S,numbersScaler:A,transitionOpts:n,onComplete:p}),D&&(L={range:E.gauge.axis.range,color:E.gauge.bgcolor,line:{color:E.gauge.bordercolor,width:0},thickness:1},C={range:E.gauge.axis.range,color:\"rgba(0, 0, 0, 0)\",line:{color:E.gauge.bordercolor,width:E.gauge.borderwidth},thickness:1});var U=O.selectAll(\"g.angular\").data(I?e:[]);U.exit().remove();var W=O.selectAll(\"g.angularaxis\").data(I?e:[]);W.exit().remove(),I&&function(t,e,n,i){var a,c,u,h,f=n[0].trace,p=i.size,m=i.radius,g=i.innerRadius,y=i.gaugeBg,v=i.gaugeOutline,_=[p.l+p.w/2,p.t+p.h/2+m/2],k=i.gauge,M=i.layer,T=i.transitionOpts,S=i.onComplete,A=Math.PI/2;function L(t){var e=f.gauge.axis.range[0],n=(t-e)/(f.gauge.axis.range[1]-e)*Math.PI-A;return n<-A?-A:n>A?A:n}function C(t){return r.svg.arc().innerRadius((g+m)/2-t/2*(m-g)).outerRadius((g+m)/2+t/2*(m-g)).startAngle(-A)}function E(t){t.attr(\"d\",(function(t){return C(t.thickness).startAngle(L(t.range[0])).endAngle(L(t.range[1]))()}))}k.enter().append(\"g\").classed(\"angular\",!0),k.attr(\"transform\",o(_[0],_[1])),M.enter().append(\"g\").classed(\"angularaxis\",!0).classed(\"crisp\",!0),M.selectAll(\"g.xangularaxistick,path,text\").remove(),(a=w(t,f.gauge.axis)).type=\"linear\",a.range=f.gauge.axis.range,a._id=\"xangularaxis\",a.setScale();var O=function(t){return(a.range[0]-t.x)/(a.range[1]-a.range[0])*Math.PI+Math.PI},D={},I=d.makeLabelFns(a,0).labelStandoff;D.xFn=function(t){var e=O(t);return Math.cos(e)*I},D.yFn=function(t){var e=O(t),n=Math.sin(e)>0?.2:1;return-Math.sin(e)*(I+t.fontSize*n)+Math.abs(Math.cos(e))*(t.fontSize*l)},D.anchorFn=function(t){var e=O(t),n=Math.cos(e);return Math.abs(n)<.1?\"middle\":n>0?\"start\":\"end\"},D.heightFn=function(t,e,n){var r=O(t);return-.5*(1+Math.sin(r))*n};var P=function(t){return o(_[0]+m*Math.cos(t),_[1]-m*Math.sin(t))};u=function(t){return P(O(t))},c=d.calcTicks(a),h=d.getTickSigns(a)[2],a.visible&&(d.drawTicks(t,a,{vals:c,layer:M,path:\"M\"+(h=\"inside\"===a.ticks?-1:1)*((a.linewidth||1)/2)+\",0h\"+h*a.ticklen,transFn:function(t){var e=O(t);return P(e)+\"rotate(\"+-s(e)+\")\"}}),d.drawLabels(t,a,{vals:c,layer:M,transFn:u,labelFns:D}));var R=[y].concat(f.gauge.steps),z=k.selectAll(\"g.bg-arc\").data(R);z.enter().append(\"g\").classed(\"bg-arc\",!0).append(\"path\"),z.select(\"path\").call(E).call(x),z.exit().remove();var j=C(f.gauge.bar.thickness),F=k.selectAll(\"g.value-arc\").data([f.gauge.bar]);F.enter().append(\"g\").classed(\"value-arc\",!0).append(\"path\");var N,B,Y,H=F.select(\"path\");b(T)?(H.transition().duration(T.duration).ease(T.easing).each(\"end\",(function(){S&&S()})).each(\"interrupt\",(function(){S&&S()})).attrTween(\"d\",(N=j,B=L(n[0].lastY),Y=L(n[0].y),function(){var t=r.interpolate(B,Y);return function(e){return N.endAngle(t(e))()}})),f._lastValue=n[0].y):H.attr(\"d\",\"number\"==typeof n[0].y?j.endAngle(L(n[0].y)):\"M0,0Z\"),H.call(x),F.exit().remove(),R=[];var V=f.gauge.threshold.value;V&&R.push({range:[V,V],color:f.gauge.threshold.color,line:{color:f.gauge.threshold.line.color,width:f.gauge.threshold.line.width},thickness:f.gauge.threshold.thickness});var U=k.selectAll(\"g.threshold-arc\").data(R);U.enter().append(\"g\").classed(\"threshold-arc\",!0).append(\"path\"),U.select(\"path\").call(E).call(x),U.exit().remove();var W=k.selectAll(\"g.gauge-outline\").data([v]);W.enter().append(\"g\").classed(\"gauge-outline\",!0).append(\"path\"),W.select(\"path\").call(E).call(x),W.exit().remove()}(t,0,e,{radius:N,innerRadius:B,gauge:U,layer:W,size:z,gaugeBg:L,gaugeOutline:C,transitionOpts:n,onComplete:p});var q=O.selectAll(\"g.bullet\").data(P?e:[]);q.exit().remove();var G=O.selectAll(\"g.bulletaxis\").data(P?e:[]);G.exit().remove(),P&&function(t,e,n,r){var i,a,s,l,c,h=n[0].trace,f=r.gauge,p=r.layer,m=r.gaugeBg,y=r.gaugeOutline,v=r.size,_=h.domain,k=r.transitionOpts,M=r.onComplete;f.enter().append(\"g\").classed(\"bullet\",!0),f.attr(\"transform\",o(v.l,v.t)),p.enter().append(\"g\").classed(\"bulletaxis\",!0).classed(\"crisp\",!0),p.selectAll(\"g.xbulletaxistick,path,text\").remove();var T=v.h,S=h.gauge.bar.thickness*T,A=_.x[0],L=_.x[0]+(_.x[1]-_.x[0])*(h._hasNumber||h._hasDelta?1-u.bulletNumberDomainSize:1);function C(t){t.attr(\"width\",(function(t){return Math.max(0,i.c2p(t.range[1])-i.c2p(t.range[0]))})).attr(\"x\",(function(t){return i.c2p(t.range[0])})).attr(\"y\",(function(t){return.5*(1-t.thickness)*T})).attr(\"height\",(function(t){return t.thickness*T}))}(i=w(t,h.gauge.axis))._id=\"xbulletaxis\",i.domain=[A,L],i.setScale(),a=d.calcTicks(i),s=d.makeTransTickFn(i),l=d.getTickSigns(i)[2],c=v.t+v.h,i.visible&&(d.drawTicks(t,i,{vals:\"inside\"===i.ticks?d.clipEnds(i,a):a,layer:p,path:d.makeTickPath(i,c,l),transFn:s}),d.drawLabels(t,i,{vals:a,layer:p,transFn:s,labelFns:d.makeLabelFns(i,c)}));var E=[m].concat(h.gauge.steps),O=f.selectAll(\"g.bg-bullet\").data(E);O.enter().append(\"g\").classed(\"bg-bullet\",!0).append(\"rect\"),O.select(\"rect\").call(C).call(x),O.exit().remove();var D=f.selectAll(\"g.value-bullet\").data([h.gauge.bar]);D.enter().append(\"g\").classed(\"value-bullet\",!0).append(\"rect\"),D.select(\"rect\").attr(\"height\",S).attr(\"y\",(T-S)/2).call(x),b(k)?D.select(\"rect\").transition().duration(k.duration).ease(k.easing).each(\"end\",(function(){M&&M()})).each(\"interrupt\",(function(){M&&M()})).attr(\"width\",Math.max(0,i.c2p(Math.min(h.gauge.axis.range[1],n[0].y)))):D.select(\"rect\").attr(\"width\",\"number\"==typeof n[0].y?Math.max(0,i.c2p(Math.min(h.gauge.axis.range[1],n[0].y))):0),D.exit().remove();var I=n.filter((function(){return h.gauge.threshold.value})),P=f.selectAll(\"g.threshold-bullet\").data(I);P.enter().append(\"g\").classed(\"threshold-bullet\",!0).append(\"line\"),P.select(\"line\").attr(\"x1\",i.c2p(h.gauge.threshold.value)).attr(\"x2\",i.c2p(h.gauge.threshold.value)).attr(\"y1\",(1-h.gauge.threshold.thickness)/2*T).attr(\"y2\",(1-(1-h.gauge.threshold.thickness)/2)*T).call(g.stroke,h.gauge.threshold.line.color).style(\"stroke-width\",h.gauge.threshold.line.width),P.exit().remove();var R=f.selectAll(\"g.gauge-outline\").data([y]);R.enter().append(\"g\").classed(\"gauge-outline\",!0).append(\"rect\"),R.select(\"rect\").call(C).call(x),R.exit().remove()}(t,0,e,{gauge:q,layer:G,size:z,gaugeBg:L,gaugeOutline:C,transitionOpts:n,onComplete:p});var X=O.selectAll(\"text.title\").data(e);X.exit().remove(),X.enter().append(\"text\").classed(\"title\",!0),X.attr(\"text-anchor\",(function(){return P?y.right:y[E.title.align]})).text(E.title.text).call(c.font,E.title.font).call(h.convertToTspans,t),X.attr(\"transform\",(function(){var t,e=z.l+z.w*v[E.title.align],n=u.titlePadding,r=c.bBox(X.node());return D?(I&&(t=E.gauge.axis.visible?c.bBox(W.node()).top-n-r.bottom:z.t+z.h/2-N/2-r.bottom-n),P&&(t=S-(r.top+r.bottom)/2,e=z.l-u.bulletPadding*z.w)):t=E._numbersTop-n-r.bottom,o(e,t)}))}))}},{\"../../components/color\":643,\"../../components/drawing\":665,\"../../constants/alignment\":745,\"../../lib\":778,\"../../lib/svg_text_utils\":803,\"../../plots/cartesian/axes\":828,\"../../plots/cartesian/axis_defaults\":830,\"../../plots/cartesian/layout_attributes\":842,\"../../plots/cartesian/position_defaults\":845,\"./constants\":1119,d3:169}],1123:[function(t,e,n){\"use strict\";var r=t(\"../../components/colorscale/attributes\"),i=t(\"../../plots/template_attributes\").hovertemplateAttrs,a=t(\"../mesh3d/attributes\"),o=t(\"../../plots/attributes\"),s=t(\"../../lib/extend\").extendFlat,l=t(\"../../plot_api/edit_types\").overrideAll,c=e.exports=l(s({x:{valType:\"data_array\"},y:{valType:\"data_array\"},z:{valType:\"data_array\"},value:{valType:\"data_array\"},isomin:{valType:\"number\"},isomax:{valType:\"number\"},surface:{show:{valType:\"boolean\",dflt:!0},count:{valType:\"integer\",dflt:2,min:1},fill:{valType:\"number\",min:0,max:1,dflt:1},pattern:{valType:\"flaglist\",flags:[\"A\",\"B\",\"C\",\"D\",\"E\"],extras:[\"all\",\"odd\",\"even\"],dflt:\"all\"}},spaceframe:{show:{valType:\"boolean\",dflt:!1},fill:{valType:\"number\",min:0,max:1,dflt:.15}},slices:{x:{show:{valType:\"boolean\",dflt:!1},locations:{valType:\"data_array\",dflt:[]},fill:{valType:\"number\",min:0,max:1,dflt:1}},y:{show:{valType:\"boolean\",dflt:!1},locations:{valType:\"data_array\",dflt:[]},fill:{valType:\"number\",min:0,max:1,dflt:1}},z:{show:{valType:\"boolean\",dflt:!1},locations:{valType:\"data_array\",dflt:[]},fill:{valType:\"number\",min:0,max:1,dflt:1}}},caps:{x:{show:{valType:\"boolean\",dflt:!0},fill:{valType:\"number\",min:0,max:1,dflt:1}},y:{show:{valType:\"boolean\",dflt:!0},fill:{valType:\"number\",min:0,max:1,dflt:1}},z:{show:{valType:\"boolean\",dflt:!0},fill:{valType:\"number\",min:0,max:1,dflt:1}}},text:{valType:\"string\",dflt:\"\",arrayOk:!0},hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0},hovertemplate:i(),showlegend:s({},o.showlegend,{dflt:!1})},r(\"\",{colorAttr:\"`value`\",showScaleDflt:!0,editTypeOverride:\"calc\"}),{opacity:a.opacity,lightposition:a.lightposition,lighting:a.lighting,flatshading:a.flatshading,contour:a.contour,hoverinfo:s({},o.hoverinfo)}),\"calc\",\"nested\");c.flatshading.dflt=!0,c.lighting.facenormalsepsilon.dflt=0,c.x.editType=c.y.editType=c.z.editType=c.value.editType=\"calc+clearAxisTypes\",c.transforms=void 0},{\"../../components/colorscale/attributes\":650,\"../../lib/extend\":768,\"../../plot_api/edit_types\":810,\"../../plots/attributes\":824,\"../../plots/template_attributes\":906,\"../mesh3d/attributes\":1128}],1124:[function(t,e,n){\"use strict\";var r=t(\"../../components/colorscale/calc\"),i=t(\"../streamtube/calc\").processGrid,a=t(\"../streamtube/calc\").filter;e.exports=function(t,e){e._len=Math.min(e.x.length,e.y.length,e.z.length,e.value.length),e._x=a(e.x,e._len),e._y=a(e.y,e._len),e._z=a(e.z,e._len),e._value=a(e.value,e._len);var n=i(e);e._gridFill=n.fill,e._Xs=n.Xs,e._Ys=n.Ys,e._Zs=n.Zs,e._len=n.len;for(var o=1/0,s=-1/0,l=0;l<e._len;l++){var c=e._value[l];o=Math.min(o,c),s=Math.max(s,c)}e._minValues=o,e._maxValues=s,e._vMin=null==e.isomin?o:e.isomin,e._vMax=void 0===e.isomax||null===e.isomin?s:e.isomax,r(t,e,{vals:[e._vMin,e._vMax],containerStr:\"\",cLetter:\"c\"})}},{\"../../components/colorscale/calc\":651,\"../streamtube/calc\":1295}],1125:[function(t,e,n){\"use strict\";var r=t(\"gl-mesh3d\"),i=t(\"../../lib/gl_format_color\").parseColorScale,a=t(\"../../lib/str2rgbarray\"),o=t(\"../../components/colorscale\").extractOpts,s=t(\"../../plots/gl3d/zip3\"),l=function(t,e){for(var n=e.length-1;n>0;n--){var r=Math.min(e[n],e[n-1]),i=Math.max(e[n],e[n-1]);if(i>r&&r<t&&t<=i)return{id:n,distRatio:(i-t)/(i-r)}}return{id:0,distRatio:0}};function c(t,e,n){this.scene=t,this.uid=n,this.mesh=e,this.name=\"\",this.data=null,this.showContour=!1}var u=c.prototype;u.handlePick=function(t){if(t.object===this.mesh){var e=t.data.index,n=this.data._meshY[e],r=this.data._meshZ[e],i=this.data._Ys.length,a=this.data._Zs.length,o=l(this.data._meshX[e],this.data._Xs).id,s=l(n,this.data._Ys).id,c=l(r,this.data._Zs).id,u=t.index=c+a*s+a*i*o;t.traceCoordinate=[this.data._meshX[u],this.data._meshY[u],this.data._meshZ[u],this.data._value[u]];var h=this.data.hovertext||this.data.text;return Array.isArray(h)&&void 0!==h[u]?t.textLabel=h[u]:h&&(t.textLabel=h),!0}},u.update=function(t){var e=this.scene,n=e.fullSceneLayout;function r(t,e,n,r){return e.map((function(e){return t.d2l(e,0,r)*n}))}this.data=d(t);var l={positions:s(r(n.xaxis,t._meshX,e.dataScale[0],t.xcalendar),r(n.yaxis,t._meshY,e.dataScale[1],t.ycalendar),r(n.zaxis,t._meshZ,e.dataScale[2],t.zcalendar)),cells:s(t._meshI,t._meshJ,t._meshK),lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,contourEnable:t.contour.show,contourColor:a(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading},c=o(t);l.vertexIntensity=t._meshIntensity,l.vertexIntensityBounds=[c.min,c.max],l.colormap=i(t),this.mesh.update(l)},u.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()};var h=[\"xyz\",\"xzy\",\"yxz\",\"yzx\",\"zxy\",\"zyx\"];function d(t){t._meshI=[],t._meshJ=[],t._meshK=[];var e,n,r,i,a,o,s,c=t.surface.show,u=t.spaceframe.show,d=t.surface.fill,f=t.spaceframe.fill,p=!1,m=!1,g=0,y=t._Xs,v=t._Ys,_=t._Zs,b=y.length,x=v.length,w=_.length,k=h.indexOf(t._gridFill.replace(/-/g,\"\").replace(/\\+/g,\"\")),M=function(t,e,n){switch(k){case 5:return n+w*e+w*x*t;case 4:return n+w*t+w*b*e;case 3:return e+x*n+x*w*t;case 2:return e+x*t+x*b*n;case 1:return t+b*n+b*w*e;default:return t+b*e+b*x*n}},T=t._minValues,S=t._maxValues,A=t._vMin,L=t._vMax;function C(t,e,s){for(var l=o.length,c=n;c<l;c++)if(t===r[c]&&e===i[c]&&s===a[c])return c;return-1}function E(){n=e}function O(){r=[],i=[],a=[],o=[],e=0,E()}function D(t,n,s,l){return r.push(t),i.push(n),a.push(s),o.push(l),++e-1}function I(t,e,n){for(var r=[],i=0;i<t.length;i++)r[i]=t[i]*(1-n)+n*e[i];return r}function P(t){s=t}function R(t,e){return\"all\"===t||null===t||t.indexOf(e)>-1}function z(t,e){return null===t?e:t}function j(e,n,r){E();var i,a,o=[n],l=[r];if(s>=1)o=[n],l=[r];else if(s>0){var c=function(t,e){var n=t[0],r=t[1],i=t[2],a=function(t,e,n){for(var r=[],i=0;i<t.length;i++)r[i]=(t[i]+e[i]+n[i])/3;return r}(n,r,i),o=Math.sqrt(1-s),l=I(a,n,o),c=I(a,r,o),u=I(a,i,o),h=e[0],d=e[1],f=e[2];return{xyzv:[[n,r,c],[c,l,n],[r,i,u],[u,c,r],[i,n,l],[l,u,i]],abc:[[h,d,-1],[-1,-1,h],[d,f,-1],[-1,-1,d],[f,h,-1],[-1,-1,f]]}}(n,r);o=c.xyzv,l=c.abc}for(var u=0;u<o.length;u++){n=o[u],r=l[u];for(var h=[],d=0;d<3;d++){var f=n[d][0],p=n[d][1],m=n[d][2],y=n[d][3],v=r[d]>-1?r[d]:C(f,p,m);h[d]=v>-1?v:D(f,p,m,z(e,y))}i=h[1],a=h[2],t._meshI.push(h[0]),t._meshJ.push(i),t._meshK.push(a),++g}}function F(t,e,n,r){var i=t[3];i<n&&(i=n),i>r&&(i=r);for(var a=(t[3]-i)/(t[3]-e[3]+1e-9),o=[],s=0;s<4;s++)o[s]=(1-a)*t[s]+a*e[s];return o}function N(t,e,n){return t>=e&&t<=n}function B(t){var e=.001*(L-A);return t>=A-e&&t<=L+e}function Y(e){for(var n=[],r=0;r<4;r++){var i=e[r];n.push([t._x[i],t._y[i],t._z[i],t._value[i]])}return n}function H(t,e,n,r,i,a){a||(a=1),n=[-1,-1,-1];var o=!1,s=[N(e[0][3],r,i),N(e[1][3],r,i),N(e[2][3],r,i)];if(!s[0]&&!s[1]&&!s[2])return!1;var l=function(t,e,n){return B(e[0][3])&&B(e[1][3])&&B(e[2][3])?(j(t,e,n),!0):a<3&&H(t,e,n,A,L,++a)};if(s[0]&&s[1]&&s[2])return l(t,e,n)||o;var c=!1;return[[0,1,2],[2,0,1],[1,2,0]].forEach((function(a){if(s[a[0]]&&s[a[1]]&&!s[a[2]]){var u=e[a[0]],h=e[a[1]],d=e[a[2]],f=F(d,u,r,i),p=F(d,h,r,i);o=l(t,[p,f,u],[-1,-1,n[a[0]]])||o,o=l(t,[u,h,p],[n[a[0]],n[a[1]],-1])||o,c=!0}})),c||[[0,1,2],[1,2,0],[2,0,1]].forEach((function(a){if(s[a[0]]&&!s[a[1]]&&!s[a[2]]){var u=e[a[0]],h=e[a[2]],d=F(e[a[1]],u,r,i),f=F(h,u,r,i);o=l(t,[f,d,u],[-1,-1,n[a[0]]])||o,c=!0}})),o}function V(t,e,n,r){var i=!1,a=Y(e),o=[N(a[0][3],n,r),N(a[1][3],n,r),N(a[2][3],n,r),N(a[3][3],n,r)];if(!(o[0]||o[1]||o[2]||o[3]))return i;if(o[0]&&o[1]&&o[2]&&o[3])return m&&(i=function(t,e,n){var r=function(r,i,a){j(t,[e[r],e[i],e[a]],[n[r],n[i],n[a]])};r(0,1,2),r(3,0,1),r(2,3,0),r(1,2,3)}(t,a,e)||i),i;var s=!1;return[[0,1,2,3],[3,0,1,2],[2,3,0,1],[1,2,3,0]].forEach((function(l){if(o[l[0]]&&o[l[1]]&&o[l[2]]&&!o[l[3]]){var c=a[l[0]],u=a[l[1]],h=a[l[2]],d=a[l[3]];if(m)i=j(t,[c,u,h],[e[l[0]],e[l[1]],e[l[2]]])||i;else{var f=F(d,c,n,r),p=F(d,u,n,r),g=F(d,h,n,r);i=j(null,[f,p,g],[-1,-1,-1])||i}s=!0}})),s||([[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2],[0,2,3,1],[1,3,2,0]].forEach((function(l){if(o[l[0]]&&o[l[1]]&&!o[l[2]]&&!o[l[3]]){var c=a[l[0]],u=a[l[1]],h=a[l[2]],d=a[l[3]],f=F(h,c,n,r),p=F(h,u,n,r),g=F(d,u,n,r),y=F(d,c,n,r);m?(i=j(t,[c,y,f],[e[l[0]],-1,-1])||i,i=j(t,[u,p,g],[e[l[1]],-1,-1])||i):i=function(t,e,n){var r=function(t,r,i){j(null,[e[t],e[r],e[i]],[n[t],n[r],n[i]])};r(0,1,2),r(2,3,0)}(0,[f,p,g,y],[-1,-1,-1,-1])||i,s=!0}})),s||[[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2]].forEach((function(l){if(o[l[0]]&&!o[l[1]]&&!o[l[2]]&&!o[l[3]]){var c=a[l[0]],u=a[l[2]],h=a[l[3]],d=F(a[l[1]],c,n,r),f=F(u,c,n,r),p=F(h,c,n,r);m?(i=j(t,[c,d,f],[e[l[0]],-1,-1])||i,i=j(t,[c,f,p],[e[l[0]],-1,-1])||i,i=j(t,[c,p,d],[e[l[0]],-1,-1])||i):i=j(null,[d,f,p],[-1,-1,-1])||i,s=!0}}))),i}function U(t,e,n,r,i,a,o,s,l,c,u){var h=!1;return p&&(R(t,\"A\")&&(h=V(null,[e,n,r,a],c,u)||h),R(t,\"B\")&&(h=V(null,[n,r,i,l],c,u)||h),R(t,\"C\")&&(h=V(null,[n,a,o,l],c,u)||h),R(t,\"D\")&&(h=V(null,[r,a,s,l],c,u)||h),R(t,\"E\")&&(h=V(null,[n,r,a,l],c,u)||h)),m&&(h=V(t,[n,r,a,l],c,u)||h),h}function W(t,e,n,r,i,a,o,s){return[!0===s[0]||H(t,Y([e,n,r]),[e,n,r],a,o),!0===s[1]||H(t,Y([r,i,e]),[r,i,e],a,o)]}function q(t,e,n,r,i,a,o,s,l){return s?W(t,e,n,i,r,a,o,l):W(t,n,i,r,e,a,o,l)}function G(t,e,n,r,i,a,o){var s,l,c,u,h=!1,d=function(){h=H(t,[s,l,c],[-1,-1,-1],i,a)||h,h=H(t,[c,u,s],[-1,-1,-1],i,a)||h},f=o[0],p=o[1],m=o[2];return f&&(s=I(Y([M(e,n-0,r-0)])[0],Y([M(e-1,n-0,r-0)])[0],f),l=I(Y([M(e,n-0,r-1)])[0],Y([M(e-1,n-0,r-1)])[0],f),c=I(Y([M(e,n-1,r-1)])[0],Y([M(e-1,n-1,r-1)])[0],f),u=I(Y([M(e,n-1,r-0)])[0],Y([M(e-1,n-1,r-0)])[0],f),d()),p&&(s=I(Y([M(e-0,n,r-0)])[0],Y([M(e-0,n-1,r-0)])[0],p),l=I(Y([M(e-0,n,r-1)])[0],Y([M(e-0,n-1,r-1)])[0],p),c=I(Y([M(e-1,n,r-1)])[0],Y([M(e-1,n-1,r-1)])[0],p),u=I(Y([M(e-1,n,r-0)])[0],Y([M(e-1,n-1,r-0)])[0],p),d()),m&&(s=I(Y([M(e-0,n-0,r)])[0],Y([M(e-0,n-0,r-1)])[0],m),l=I(Y([M(e-0,n-1,r)])[0],Y([M(e-0,n-1,r-1)])[0],m),c=I(Y([M(e-1,n-1,r)])[0],Y([M(e-1,n-1,r-1)])[0],m),u=I(Y([M(e-1,n-0,r)])[0],Y([M(e-1,n-0,r-1)])[0],m),d()),h}function X(t,e,n,r,i,a,o,s,l,c,u,h){var d=t;return h?(p&&\"even\"===t&&(d=null),U(d,e,n,r,i,a,o,s,l,c,u)):(p&&\"odd\"===t&&(d=null),U(d,l,s,o,a,i,r,n,e,c,u))}function Z(t,e,n,r,i){for(var a=[],o=0,s=0;s<e.length;s++)for(var l=e[s],c=1;c<w;c++)for(var u=1;u<x;u++)a.push(q(t,M(l,u-1,c-1),M(l,u-1,c),M(l,u,c-1),M(l,u,c),n,r,(l+u+c)%2,i&&i[o]?i[o]:[])),o++;return a}function J(t,e,n,r,i){for(var a=[],o=0,s=0;s<e.length;s++)for(var l=e[s],c=1;c<b;c++)for(var u=1;u<w;u++)a.push(q(t,M(c-1,l,u-1),M(c,l,u-1),M(c-1,l,u),M(c,l,u),n,r,(c+l+u)%2,i&&i[o]?i[o]:[])),o++;return a}function K(t,e,n,r,i){for(var a=[],o=0,s=0;s<e.length;s++)for(var l=e[s],c=1;c<x;c++)for(var u=1;u<b;u++)a.push(q(t,M(u-1,c-1,l),M(u-1,c,l),M(u,c-1,l),M(u,c,l),n,r,(u+c+l)%2,i&&i[o]?i[o]:[])),o++;return a}function $(t,e,n){for(var r=1;r<w;r++)for(var i=1;i<x;i++)for(var a=1;a<b;a++)X(t,M(a-1,i-1,r-1),M(a-1,i-1,r),M(a-1,i,r-1),M(a-1,i,r),M(a,i-1,r-1),M(a,i-1,r),M(a,i,r-1),M(a,i,r),e,n,(a+i+r)%2)}function Q(t,e,n,r,i,a){for(var o=[],s=0;s<e.length;s++)for(var l=e[s],c=1;c<w;c++)for(var u=1;u<x;u++)o.push(G(t,l,u,c,n,r,i[s]));return o}function tt(t,e,n,r,i,a){for(var o=[],s=0;s<e.length;s++)for(var l=e[s],c=1;c<b;c++)for(var u=1;u<w;u++)o.push(G(t,c,l,u,n,r,i[s]));return o}function et(t,e,n,r,i,a){for(var o=[],s=0;s<e.length;s++)for(var l=e[s],c=1;c<x;c++)for(var u=1;u<b;u++)o.push(G(t,u,c,l,n,r,i[s]));return o}function nt(t,e){for(var n=[],r=t;r<e;r++)n.push(r);return n}return function(){O(),function(){for(var e=0;e<b;e++)for(var n=0;n<x;n++)for(var r=0;r<w;r++){var i=M(e,n,r);D(t._x[i],t._y[i],t._z[i],t._value[i])}}();var e=null;if(u&&f&&(P(f),m=!0,$(e,A,L),m=!1),c&&d){P(d);for(var n=t.surface.pattern,s=t.surface.count,h=0;h<s;h++){var k=1===s?.5:h/(s-1),C=(1-k)*A+k*L,E=Math.abs(C-T)>Math.abs(C-S)?[T,C]:[C,S];p=!0,$(n,E[0],E[1]),p=!1}}var I=[[Math.min(A,S),Math.max(A,S)],[Math.min(T,L),Math.max(T,L)]];[\"x\",\"y\",\"z\"].forEach((function(n){for(var r=[],i=0;i<I.length;i++){var a=0,o=I[i][0],s=I[i][1],c=t.slices[n];if(c.show&&c.fill){P(c.fill);var u=[],h=[],d=[];if(c.locations.length)for(var f=0;f<c.locations.length;f++){var p=l(c.locations[f],\"x\"===n?y:\"y\"===n?v:_);0===p.distRatio?u.push(p.id):p.id>0&&(h.push(p.id),d.push(\"x\"===n?[p.distRatio,0,0]:\"y\"===n?[0,p.distRatio,0]:[0,0,p.distRatio]))}else u=nt(1,\"x\"===n?b-1:\"y\"===n?x-1:w-1);h.length>0&&(r[a]=\"x\"===n?Q(e,h,o,s,d):\"y\"===n?tt(e,h,o,s,d):et(e,h,o,s,d),a++),u.length>0&&(r[a]=\"x\"===n?Z(e,u,o,s,r[a]):\"y\"===n?J(e,u,o,s,r[a]):K(e,u,o,s,r[a]),a++)}var m=t.caps[n];m.show&&m.fill&&(P(m.fill),r[a]=\"x\"===n?Z(e,[0,b-1],o,s,r[a]):\"y\"===n?J(e,[0,x-1],o,s,r[a]):K(e,[0,w-1],o,s,r[a]),a++)}})),0===g&&O(),t._meshX=r,t._meshY=i,t._meshZ=a,t._meshIntensity=o,t._Xs=y,t._Ys=v,t._Zs=_}(),t}e.exports={findNearestOnAxis:l,generateIsoMeshes:d,createIsosurfaceTrace:function(t,e){var n=r({gl:t.glplot.gl}),i=new c(t,n,e.uid);return n._trace=i,i.update(e),t.glplot.add(n),i}}},{\"../../components/colorscale\":655,\"../../lib/gl_format_color\":774,\"../../lib/str2rgbarray\":802,\"../../plots/gl3d/zip3\":881,\"gl-mesh3d\":309}],1126:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../registry\"),a=t(\"./attributes\"),o=t(\"../../components/colorscale/defaults\");function s(t,e,n,r,a){var s=a(\"isomin\"),l=a(\"isomax\");null!=l&&null!=s&&s>l&&(e.isomin=null,e.isomax=null);var c=a(\"x\"),u=a(\"y\"),h=a(\"z\"),d=a(\"value\");c&&c.length&&u&&u.length&&h&&h.length&&d&&d.length?(i.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\",\"z\"],r),[\"x\",\"y\",\"z\"].forEach((function(t){var e=\"caps.\"+t;a(e+\".show\")&&a(e+\".fill\");var n=\"slices.\"+t;a(n+\".show\")&&(a(n+\".fill\"),a(n+\".locations\"))})),a(\"spaceframe.show\")&&a(\"spaceframe.fill\"),a(\"surface.show\")&&(a(\"surface.count\"),a(\"surface.fill\"),a(\"surface.pattern\")),a(\"contour.show\")&&(a(\"contour.color\"),a(\"contour.width\")),[\"text\",\"hovertext\",\"hovertemplate\",\"lighting.ambient\",\"lighting.diffuse\",\"lighting.specular\",\"lighting.roughness\",\"lighting.fresnel\",\"lighting.vertexnormalsepsilon\",\"lighting.facenormalsepsilon\",\"lightposition.x\",\"lightposition.y\",\"lightposition.z\",\"flatshading\",\"opacity\"].forEach((function(t){a(t)})),o(t,e,r,a,{prefix:\"\",cLetter:\"c\"}),e._length=null):e.visible=!1}e.exports={supplyDefaults:function(t,e,n,i){s(t,e,0,i,(function(n,i){return r.coerce(t,e,a,n,i)}))},supplyIsoDefaults:s}},{\"../../components/colorscale/defaults\":653,\"../../lib\":778,\"../../registry\":911,\"./attributes\":1123}],1127:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\").supplyDefaults,calc:t(\"./calc\"),colorbar:{min:\"cmin\",max:\"cmax\"},plot:t(\"./convert\").createIsosurfaceTrace,moduleType:\"trace\",name:\"isosurface\",basePlotModule:t(\"../../plots/gl3d\"),categories:[\"gl3d\",\"showLegend\"],meta:{}}},{\"../../plots/gl3d\":870,\"./attributes\":1123,\"./calc\":1124,\"./convert\":1125,\"./defaults\":1126}],1128:[function(t,e,n){\"use strict\";var r=t(\"../../components/colorscale/attributes\"),i=t(\"../../plots/template_attributes\").hovertemplateAttrs,a=t(\"../surface/attributes\"),o=t(\"../../plots/attributes\"),s=t(\"../../lib/extend\").extendFlat;e.exports=s({x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},z:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},i:{valType:\"data_array\",editType:\"calc\"},j:{valType:\"data_array\",editType:\"calc\"},k:{valType:\"data_array\",editType:\"calc\"},text:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},hovertemplate:i({editType:\"calc\"}),delaunayaxis:{valType:\"enumerated\",values:[\"x\",\"y\",\"z\"],dflt:\"z\",editType:\"calc\"},alphahull:{valType:\"number\",dflt:-1,editType:\"calc\"},intensity:{valType:\"data_array\",editType:\"calc\"},intensitymode:{valType:\"enumerated\",values:[\"vertex\",\"cell\"],dflt:\"vertex\",editType:\"calc\"},color:{valType:\"color\",editType:\"calc\"},vertexcolor:{valType:\"data_array\",editType:\"calc\"},facecolor:{valType:\"data_array\",editType:\"calc\"},transforms:void 0},r(\"\",{colorAttr:\"`intensity`\",showScaleDflt:!0,editTypeOverride:\"calc\"}),{opacity:a.opacity,flatshading:{valType:\"boolean\",dflt:!1,editType:\"calc\"},contour:{show:s({},a.contours.x.show,{}),color:a.contours.x.color,width:a.contours.x.width,editType:\"calc\"},lightposition:{x:s({},a.lightposition.x,{dflt:1e5}),y:s({},a.lightposition.y,{dflt:1e5}),z:s({},a.lightposition.z,{dflt:0}),editType:\"calc\"},lighting:s({vertexnormalsepsilon:{valType:\"number\",min:0,max:1,dflt:1e-12,editType:\"calc\"},facenormalsepsilon:{valType:\"number\",min:0,max:1,dflt:1e-6,editType:\"calc\"},editType:\"calc\"},a.lighting),hoverinfo:s({},o.hoverinfo,{editType:\"calc\"}),showlegend:s({},o.showlegend,{dflt:!1})})},{\"../../components/colorscale/attributes\":650,\"../../lib/extend\":768,\"../../plots/attributes\":824,\"../../plots/template_attributes\":906,\"../surface/attributes\":1311}],1129:[function(t,e,n){\"use strict\";var r=t(\"../../components/colorscale/calc\");e.exports=function(t,e){e.intensity&&r(t,e,{vals:e.intensity,containerStr:\"\",cLetter:\"c\"})}},{\"../../components/colorscale/calc\":651}],1130:[function(t,e,n){\"use strict\";var r=t(\"gl-mesh3d\"),i=t(\"delaunay-triangulate\"),a=t(\"alpha-shape\"),o=t(\"convex-hull\"),s=t(\"../../lib/gl_format_color\").parseColorScale,l=t(\"../../lib/str2rgbarray\"),c=t(\"../../components/colorscale\").extractOpts,u=t(\"../../plots/gl3d/zip3\");function h(t,e,n){this.scene=t,this.uid=n,this.mesh=e,this.name=\"\",this.color=\"#fff\",this.data=null,this.showContour=!1}var d=h.prototype;function f(t){for(var e=[],n=t.length,r=0;r<n;r++)e[r]=l(t[r]);return e}function p(t,e,n,r){for(var i=[],a=e.length,o=0;o<a;o++)i[o]=t.d2l(e[o],0,r)*n;return i}function m(t){for(var e=[],n=t.length,r=0;r<n;r++)e[r]=Math.round(t[r]);return e}function g(t,e){for(var n=t.length,r=0;r<n;r++)if(t[r]<=-.5||t[r]>=e-.5)return!1;return!0}d.handlePick=function(t){if(t.object===this.mesh){var e=t.index=t.data.index;t.traceCoordinate=t.data._cellCenter?t.data.dataCoordinate:[this.data.x[e],this.data.y[e],this.data.z[e]];var n=this.data.hovertext||this.data.text;return Array.isArray(n)&&void 0!==n[e]?t.textLabel=n[e]:n&&(t.textLabel=n),!0}},d.update=function(t){var e=this.scene,n=e.fullSceneLayout;this.data=t;var r,h=t.x.length,d=u(p(n.xaxis,t.x,e.dataScale[0],t.xcalendar),p(n.yaxis,t.y,e.dataScale[1],t.ycalendar),p(n.zaxis,t.z,e.dataScale[2],t.zcalendar));if(t.i&&t.j&&t.k){if(t.i.length!==t.j.length||t.j.length!==t.k.length||!g(t.i,h)||!g(t.j,h)||!g(t.k,h))return;r=u(m(t.i),m(t.j),m(t.k))}else r=0===t.alphahull?o(d):t.alphahull>0?a(t.alphahull,d):function(t,e){for(var n=[\"x\",\"y\",\"z\"].indexOf(t),r=[],a=e.length,o=0;o<a;o++)r[o]=[e[o][(n+1)%3],e[o][(n+2)%3]];return i(r)}(t.delaunayaxis,d);var y={positions:d,cells:r,lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,contourEnable:t.contour.show,contourColor:l(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading};if(t.intensity){var v=c(t);this.color=\"#fff\";var _=t.intensitymode;y[_+\"Intensity\"]=t.intensity,y[_+\"IntensityBounds\"]=[v.min,v.max],y.colormap=s(t)}else t.vertexcolor?(this.color=t.vertexcolor[0],y.vertexColors=f(t.vertexcolor)):t.facecolor?(this.color=t.facecolor[0],y.cellColors=f(t.facecolor)):(this.color=t.color,y.meshColor=l(t.color));this.mesh.update(y)},d.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports=function(t,e){var n=r({gl:t.glplot.gl}),i=new h(t,n,e.uid);return n._trace=i,i.update(e),t.glplot.add(n),i}},{\"../../components/colorscale\":655,\"../../lib/gl_format_color\":774,\"../../lib/str2rgbarray\":802,\"../../plots/gl3d/zip3\":881,\"alpha-shape\":69,\"convex-hull\":135,\"delaunay-triangulate\":171,\"gl-mesh3d\":309}],1131:[function(t,e,n){\"use strict\";var r=t(\"../../registry\"),i=t(\"../../lib\"),a=t(\"../../components/colorscale/defaults\"),o=t(\"./attributes\");e.exports=function(t,e,n,s){function l(n,r){return i.coerce(t,e,o,n,r)}function c(t){var e=t.map((function(t){var e=l(t);return e&&i.isArrayOrTypedArray(e)?e:null}));return e.every((function(t){return t&&t.length===e[0].length}))&&e}c([\"x\",\"y\",\"z\"])?(c([\"i\",\"j\",\"k\"]),(!e.i||e.j&&e.k)&&(!e.j||e.k&&e.i)&&(!e.k||e.i&&e.j)?(r.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\",\"z\"],s),[\"lighting.ambient\",\"lighting.diffuse\",\"lighting.specular\",\"lighting.roughness\",\"lighting.fresnel\",\"lighting.vertexnormalsepsilon\",\"lighting.facenormalsepsilon\",\"lightposition.x\",\"lightposition.y\",\"lightposition.z\",\"flatshading\",\"alphahull\",\"delaunayaxis\",\"opacity\"].forEach((function(t){l(t)})),l(\"contour.show\")&&(l(\"contour.color\"),l(\"contour.width\")),\"intensity\"in t?(l(\"intensity\"),l(\"intensitymode\"),a(t,e,s,l,{prefix:\"\",cLetter:\"c\"})):(e.showscale=!1,\"facecolor\"in t?l(\"facecolor\"):\"vertexcolor\"in t?l(\"vertexcolor\"):l(\"color\",n)),l(\"text\"),l(\"hovertext\"),l(\"hovertemplate\"),e._length=null):e.visible=!1):e.visible=!1}},{\"../../components/colorscale/defaults\":653,\"../../lib\":778,\"../../registry\":911,\"./attributes\":1128}],1132:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),calc:t(\"./calc\"),colorbar:{min:\"cmin\",max:\"cmax\"},plot:t(\"./convert\"),moduleType:\"trace\",name:\"mesh3d\",basePlotModule:t(\"../../plots/gl3d\"),categories:[\"gl3d\",\"showLegend\"],meta:{}}},{\"../../plots/gl3d\":870,\"./attributes\":1128,\"./calc\":1129,\"./convert\":1130,\"./defaults\":1131}],1133:[function(t,e,n){\"use strict\";var r=t(\"../../lib\").extendFlat,i=t(\"../scatter/attributes\"),a=t(\"../../components/drawing/attributes\").dash,o=t(\"../../components/fx/attributes\"),s=t(\"../../constants/delta.js\"),l=s.INCREASING.COLOR,c=s.DECREASING.COLOR,u=i.line;function h(t){return{line:{color:r({},u.color,{dflt:t}),width:u.width,dash:a,editType:\"style\"},editType:\"style\"}}e.exports={xperiod:i.xperiod,xperiod0:i.xperiod0,xperiodalignment:i.xperiodalignment,x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},open:{valType:\"data_array\",editType:\"calc\"},high:{valType:\"data_array\",editType:\"calc\"},low:{valType:\"data_array\",editType:\"calc\"},close:{valType:\"data_array\",editType:\"calc\"},line:{width:r({},u.width,{}),dash:r({},a,{}),editType:\"style\"},increasing:h(l),decreasing:h(c),text:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},tickwidth:{valType:\"number\",min:0,max:.5,dflt:.3,editType:\"calc\"},hoverlabel:r({},o.hoverlabel,{split:{valType:\"boolean\",dflt:!1,editType:\"style\"}})}},{\"../../components/drawing/attributes\":664,\"../../components/fx/attributes\":674,\"../../constants/delta.js\":747,\"../../lib\":778,\"../scatter/attributes\":1187}],1134:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=r._,a=t(\"../../plots/cartesian/axes\"),o=t(\"../../plots/cartesian/align_period\"),s=t(\"../../constants/numerical\").BADNUM;function l(t,e,n,r){return{o:t,h:e,l:n,c:r}}function c(t,e,n,o,l,c){for(var u=l.makeCalcdata(e,\"open\"),h=l.makeCalcdata(e,\"high\"),d=l.makeCalcdata(e,\"low\"),f=l.makeCalcdata(e,\"close\"),p=Array.isArray(e.text),m=Array.isArray(e.hovertext),g=!0,y=null,v=!!e.xperiodalignment,_=[],b=0;b<o.length;b++){var x=o[b],w=u[b],k=h[b],M=d[b],T=f[b];if(x!==s&&w!==s&&k!==s&&M!==s&&T!==s){T===w?null!==y&&T!==y&&(g=T>y):g=T>w,y=T;var S=c(w,k,M,T);S.pos=x,S.yc=(w+T)/2,S.i=b,S.dir=g?\"increasing\":\"decreasing\",S.x=S.pos,S.y=[M,k],v&&(S.orig_p=n[b]),p&&(S.tx=e.text[b]),m&&(S.htx=e.hovertext[b]),_.push(S)}else _.push({pos:x,empty:!0})}return e._extremes[l._id]=a.findExtremes(l,r.concat(d,h),{padded:!0}),_.length&&(_[0].t={labels:{open:i(t,\"open:\")+\" \",high:i(t,\"high:\")+\" \",low:i(t,\"low:\")+\" \",close:i(t,\"close:\")+\" \"}}),_}e.exports={calc:function(t,e){var n=a.getFromId(t,e.xaxis),i=a.getFromId(t,e.yaxis),s=function(t,e,n){var i=n._minDiff;if(!i){var a,s=t._fullData,l=[];for(i=1/0,a=0;a<s.length;a++){var c=s[a];if(\"ohlc\"===c.type&&!0===c.visible&&c.xaxis===e._id){l.push(c);var u=e.makeCalcdata(c,\"x\");c._origX=u;var h=o(n,e,\"x\",u);c._xcalc=h;var d=r.distinctVals(h).minDiff;d&&isFinite(d)&&(i=Math.min(i,d))}}for(i===1/0&&(i=1),a=0;a<l.length;a++)l[a]._minDiff=i}return i*n.tickwidth}(t,n,e),u=e._minDiff;e._minDiff=null;var h=e._origX;e._origX=null;var d=e._xcalc;e._xcalc=null;var f=c(t,e,h,d,i,l);return e._extremes[n._id]=a.findExtremes(n,d,{vpad:u/2}),f.length?(r.extendFlat(f[0].t,{wHover:u/2,tickLen:s}),f):[{t:{empty:!0}}]},calcCommon:c}},{\"../../constants/numerical\":753,\"../../lib\":778,\"../../plots/cartesian/align_period\":825,\"../../plots/cartesian/axes\":828}],1135:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./ohlc_defaults\"),a=t(\"../scatter/period_defaults\"),o=t(\"./attributes\");function s(t,e,n,r){n(r+\".line.color\"),n(r+\".line.width\",e.line.width),n(r+\".line.dash\",e.line.dash)}e.exports=function(t,e,n,l){function c(n,i){return r.coerce(t,e,o,n,i)}i(t,e,c,l)?(a(t,e,l,c,{x:!0}),c(\"line.width\"),c(\"line.dash\"),s(0,e,c,\"increasing\"),s(0,e,c,\"decreasing\"),c(\"text\"),c(\"hovertext\"),c(\"tickwidth\"),l._requestRangeslider[e.xaxis]=!0):e.visible=!1}},{\"../../lib\":778,\"../scatter/period_defaults\":1207,\"./attributes\":1133,\"./ohlc_defaults\":1138}],1136:[function(t,e,n){\"use strict\";var r=t(\"../../plots/cartesian/axes\"),i=t(\"../../lib\"),a=t(\"../../components/fx\"),o=t(\"../../components/color\"),s=t(\"../../lib\").fillText,l=t(\"../../constants/delta.js\"),c={increasing:l.INCREASING.SYMBOL,decreasing:l.DECREASING.SYMBOL};function u(t,e,n,r){var i,s,l=t.cd,c=t.xa,u=l[0].trace,h=l[0].t,d=u.type,f=\"ohlc\"===d?\"l\":\"min\",p=\"ohlc\"===d?\"h\":\"max\",m=h.bPos||0,g=h.bdPos||h.tickLen,y=h.wHover,v=Math.min(1,g/Math.abs(c.r2c(c.range[1])-c.r2c(c.range[0])));function _(t){var n=function(t){return t.pos+m-e}(t);return a.inbox(n-y,n+y,i)}function b(t){var e=t[f],r=t[p];return e===r||a.inbox(e-n,r-n,i)}function x(t){return(_(t)+b(t))/2}i=t.maxHoverDistance-v,s=t.maxSpikeDistance-v;var w=a.getDistanceFunction(r,_,b,x);if(a.getClosest(l,w,t),!1===t.index)return null;var k=l[t.index];if(k.empty)return null;var M=u[k.dir],T=M.line.color;return t.color=o.opacity(T)&&M.line.width?T:M.fillcolor,t.x0=c.c2p(k.pos+m-g,!0),t.x1=c.c2p(k.pos+m+g,!0),t.xLabelVal=void 0!==k.orig_p?k.orig_p:k.pos,t.spikeDistance=x(k)*s/i,t.xSpike=c.c2p(k.pos,!0),t}function h(t,e,n,a){var o=t.cd,s=t.ya,l=o[0].trace,c=o[0].t,h=[],d=u(t,e,n,a);if(!d)return[];var f=o[d.index].hi||l.hoverinfo,p=f.split(\"+\");if(\"all\"!==f&&-1===p.indexOf(\"y\"))return[];for(var m=[\"high\",\"open\",\"close\",\"low\"],g={},y=0;y<m.length;y++){var v,_=m[y],b=l[_][d.index],x=s.c2p(b,!0);b in g?(v=g[b]).yLabel+=\"<br>\"+c.labels[_]+r.hoverLabelText(s,b):((v=i.extendFlat({},d)).y0=v.y1=x,v.yLabelVal=b,v.yLabel=c.labels[_]+r.hoverLabelText(s,b),v.name=\"\",h.push(v),g[b]=v)}return h}function d(t,e,n,i){var a=t.cd,o=t.ya,l=a[0].trace,h=a[0].t,d=u(t,e,n,i);if(!d)return[];var f=a[d.index],p=d.index=f.i,m=f.dir;function g(t){return h.labels[t]+r.hoverLabelText(o,l[t][p])}var y=f.hi||l.hoverinfo,v=y.split(\"+\"),_=\"all\"===y,b=_||-1!==v.indexOf(\"y\"),x=_||-1!==v.indexOf(\"text\"),w=b?[g(\"open\"),g(\"high\"),g(\"low\"),g(\"close\")+\"  \"+c[m]]:[];return x&&s(f,l,w),d.extraText=w.join(\"<br>\"),d.y0=d.y1=o.c2p(f.yc,!0),[d]}e.exports={hoverPoints:function(t,e,n,r){return t.cd[0].trace.hoverlabel.split?h(t,e,n,r):d(t,e,n,r)},hoverSplit:h,hoverOnPoints:d}},{\"../../components/color\":643,\"../../components/fx\":683,\"../../constants/delta.js\":747,\"../../lib\":778,\"../../plots/cartesian/axes\":828}],1137:[function(t,e,n){\"use strict\";e.exports={moduleType:\"trace\",name:\"ohlc\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"showLegend\"],meta:{},attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),calc:t(\"./calc\").calc,plot:t(\"./plot\"),style:t(\"./style\"),hoverPoints:t(\"./hover\").hoverPoints,selectPoints:t(\"./select\")}},{\"../../plots/cartesian\":841,\"./attributes\":1133,\"./calc\":1134,\"./defaults\":1135,\"./hover\":1136,\"./plot\":1139,\"./select\":1140,\"./style\":1141}],1138:[function(t,e,n){\"use strict\";var r=t(\"../../registry\"),i=t(\"../../lib\");e.exports=function(t,e,n,a){var o=n(\"x\"),s=n(\"open\"),l=n(\"high\"),c=n(\"low\"),u=n(\"close\");if(n(\"hoverlabel.split\"),r.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\"],a),s&&l&&c&&u){var h=Math.min(s.length,l.length,c.length,u.length);return o&&(h=Math.min(h,i.minRowLength(o))),e._length=h,h}}},{\"../../lib\":778,\"../../registry\":911}],1139:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../lib\");e.exports=function(t,e,n,a){var o=e.yaxis,s=e.xaxis,l=!!s.rangebreaks;i.makeTraceGroups(a,n,\"trace ohlc\").each((function(t){var e=r.select(this),n=t[0],a=n.t;if(!0!==n.trace.visible||a.empty)e.remove();else{var c=a.tickLen,u=e.selectAll(\"path\").data(i.identity);u.enter().append(\"path\"),u.exit().remove(),u.attr(\"d\",(function(t){if(t.empty)return\"M0,0Z\";var e=s.c2p(t.pos-c,!0),n=s.c2p(t.pos+c,!0),r=l?(e+n)/2:s.c2p(t.pos,!0);return\"M\"+e+\",\"+o.c2p(t.o,!0)+\"H\"+r+\"M\"+r+\",\"+o.c2p(t.h,!0)+\"V\"+o.c2p(t.l,!0)+\"M\"+n+\",\"+o.c2p(t.c,!0)+\"H\"+r}))}}))}},{\"../../lib\":778,d3:169}],1140:[function(t,e,n){\"use strict\";e.exports=function(t,e){var n,r=t.cd,i=t.xaxis,a=t.yaxis,o=[],s=r[0].t.bPos||0;if(!1===e)for(n=0;n<r.length;n++)r[n].selected=0;else for(n=0;n<r.length;n++){var l=r[n];e.contains([i.c2p(l.pos+s),a.c2p(l.yc)],null,l.i,t)?(o.push({pointNumber:l.i,x:i.c2d(l.pos),y:a.c2d(l.yc)}),l.selected=1):l.selected=0}return o}},{}],1141:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../components/drawing\"),a=t(\"../../components/color\");e.exports=function(t,e,n){var o=n||r.select(t).selectAll(\"g.ohlclayer\").selectAll(\"g.trace\");o.style(\"opacity\",(function(t){return t[0].trace.opacity})),o.each((function(t){var e=t[0].trace;r.select(this).selectAll(\"path\").each((function(t){if(!t.empty){var n=e[t.dir].line;r.select(this).style(\"fill\",\"none\").call(a.stroke,n.color).call(i.dashLine,n.dash,n.width).style(\"opacity\",e.selectedpoints&&!t.selected?.3:1)}}))}))}},{\"../../components/color\":643,\"../../components/drawing\":665,d3:169}],1142:[function(t,e,n){\"use strict\";var r=t(\"../../lib/extend\").extendFlat,i=t(\"../../plots/attributes\"),a=t(\"../../plots/font_attributes\"),o=t(\"../../components/colorscale/attributes\"),s=t(\"../../plots/template_attributes\").hovertemplateAttrs,l=t(\"../../plots/domain\").attributes,c=r({editType:\"calc\"},o(\"line\",{editTypeOverride:\"calc\"}),{shape:{valType:\"enumerated\",values:[\"linear\",\"hspline\"],dflt:\"linear\",editType:\"plot\"},hovertemplate:s({editType:\"plot\",arrayOk:!1},{keys:[\"count\",\"probability\"]})});e.exports={domain:l({name:\"parcats\",trace:!0,editType:\"calc\"}),hoverinfo:r({},i.hoverinfo,{flags:[\"count\",\"probability\"],editType:\"plot\",arrayOk:!1}),hoveron:{valType:\"enumerated\",values:[\"category\",\"color\",\"dimension\"],dflt:\"category\",editType:\"plot\"},hovertemplate:s({editType:\"plot\",arrayOk:!1},{keys:[\"count\",\"probability\",\"category\",\"categorycount\",\"colorcount\",\"bandcolorcount\"]}),arrangement:{valType:\"enumerated\",values:[\"perpendicular\",\"freeform\",\"fixed\"],dflt:\"perpendicular\",editType:\"plot\"},bundlecolors:{valType:\"boolean\",dflt:!0,editType:\"plot\"},sortpaths:{valType:\"enumerated\",values:[\"forward\",\"backward\"],dflt:\"forward\",editType:\"plot\"},labelfont:a({editType:\"calc\"}),tickfont:a({editType:\"calc\"}),dimensions:{_isLinkedToArray:\"dimension\",label:{valType:\"string\",editType:\"calc\"},categoryorder:{valType:\"enumerated\",values:[\"trace\",\"category ascending\",\"category descending\",\"array\"],dflt:\"trace\",editType:\"calc\"},categoryarray:{valType:\"data_array\",editType:\"calc\"},ticktext:{valType:\"data_array\",editType:\"calc\"},values:{valType:\"data_array\",dflt:[],editType:\"calc\"},displayindex:{valType:\"integer\",editType:\"calc\"},editType:\"calc\",visible:{valType:\"boolean\",dflt:!0,editType:\"calc\"}},line:c,counts:{valType:\"number\",min:0,dflt:1,arrayOk:!0,editType:\"calc\"},customdata:void 0,hoverlabel:void 0,ids:void 0,legendgroup:void 0,opacity:void 0,selectedpoints:void 0,showlegend:void 0}},{\"../../components/colorscale/attributes\":650,\"../../lib/extend\":768,\"../../plots/attributes\":824,\"../../plots/domain\":855,\"../../plots/font_attributes\":856,\"../../plots/template_attributes\":906}],1143:[function(t,e,n){\"use strict\";var r=t(\"../../plots/get_data\").getModuleCalcData,i=t(\"./plot\"),a=\"parcats\";n.name=a,n.plot=function(t,e,n,o){var s=r(t.calcdata,a);s.length&&i(t,s[0],n,o)},n.clean=function(t,e,n,r){var i=r._has&&r._has(\"parcats\"),a=e._has&&e._has(\"parcats\");i&&!a&&r._paperdiv.selectAll(\".parcats\").remove()}},{\"../../plots/get_data\":865,\"./plot\":1148}],1144:[function(t,e,n){\"use strict\";var r=t(\"../../lib/gup\").wrap,i=t(\"../../components/colorscale/helpers\").hasColorscale,a=t(\"../../components/colorscale/calc\"),o=t(\"../../lib/filter_unique.js\"),s=t(\"../../components/drawing\"),l=t(\"../../lib\"),c=t(\"fast-isnumeric\");function u(t,e,n){t.valueInds.push(e),t.count+=n}function h(t,e,n){return{categoryInds:t,color:e,rawColor:n,valueInds:[],count:0}}function d(t,e,n){t.valueInds.push(e),t.count+=n}e.exports=function(t,e){var n=l.filterVisible(e.dimensions);if(0===n.length)return[];var f,p,m,g=n.map((function(t){var e;if(\"trace\"===t.categoryorder)e=null;else if(\"array\"===t.categoryorder)e=t.categoryarray;else{e=o(t.values);for(var n=!0,r=0;r<e.length;r++)if(!c(e[r])){n=!1;break}e.sort(n?l.sorterAsc:void 0),\"category descending\"===t.categoryorder&&(e=e.reverse())}return function(t,e){e=null==e?[]:e.map((function(t){return t}));var n={},r={},i=[];e.forEach((function(t,e){n[t]=0,r[t]=e}));for(var a=0;a<t.length;a++){var o,s=t[a];void 0===n[s]?(n[s]=1,o=e.push(s)-1,r[s]=o):(n[s]++,o=r[s]),i.push(o)}var l=e.map((function(t){return n[t]}));return{uniqueValues:e,uniqueCounts:l,inds:i}}(t.values,e)}));f=l.isArrayOrTypedArray(e.counts)?e.counts:[e.counts],function(t){var e;if(function(t){for(var e=new Array(t.length),n=0;n<t.length;n++){if(t[n]<0||t[n]>=t.length)return!1;if(void 0!==e[t[n]])return!1;e[t[n]]=!0}return!0}(t.map((function(t){return t.displayindex}))))for(e=0;e<t.length;e++)t[e]._displayindex=t[e].displayindex;else for(e=0;e<t.length;e++)t[e]._displayindex=e}(n),n.forEach((function(t,e){!function(t,e){t._categoryarray=e.uniqueValues,t._ticktext=null==t.ticktext?[]:t.ticktext.slice();for(var n=t._ticktext.length;n<e.uniqueValues.length;n++)t._ticktext.push(e.uniqueValues[n])}(t,g[e])}));var y,v=e.line;v?(i(e,\"line\")&&a(t,e,{vals:e.line.color,containerStr:\"line\",cLetter:\"c\"}),y=s.tryColorscale(v)):y=l.identity;var _,b,x,w,k,M=n[0].values.length,T={},S=g.map((function(t){return t.inds}));for(m=0,_=0;_<M;_++){var A=[];for(b=0;b<S.length;b++)A.push(S[b][_]);m+=p=f[_%f.length];var L=(x=_,w=void 0,k=void 0,l.isArrayOrTypedArray(v.color)?k=w=v.color[x%v.color.length]:w=v.color,{color:y(w),rawColor:k}),C=A+\"-\"+L.rawColor;void 0===T[C]&&(T[C]=h(A,L.color,L.rawColor)),d(T[C],_,p)}var E,O=n.map((function(t,e){return function(t,e,n,r,i){return{dimensionInd:t,containerInd:e,displayInd:n,dimensionLabel:r,count:i,categories:[],dragX:null}}(e,t._index,t._displayindex,t.label,m)}));for(_=0;_<M;_++)for(p=f[_%f.length],b=0;b<O.length;b++){var D=O[b].containerInd,I=g[b].inds[_],P=O[b].categories;void 0===P[I]&&(P[I]={dimensionInd:b,categoryInd:E=I,categoryValue:e.dimensions[D]._categoryarray[I],displayInd:E,categoryLabel:e.dimensions[D]._ticktext[I],valueInds:[],count:0,dragY:null}),u(P[I],_,p)}return r(function(t,e,n){var r=t.map((function(t){return t.categories.length})).reduce((function(t,e){return Math.max(t,e)}));return{dimensions:t,paths:e,trace:void 0,maxCats:r,count:n}}(O,T,m))}},{\"../../components/colorscale/calc\":651,\"../../components/colorscale/helpers\":654,\"../../components/drawing\":665,\"../../lib\":778,\"../../lib/filter_unique.js\":769,\"../../lib/gup\":775,\"fast-isnumeric\":241}],1145:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../components/colorscale/helpers\").hasColorscale,a=t(\"../../components/colorscale/defaults\"),o=t(\"../../plots/domain\").defaults,s=t(\"../../plots/array_container_defaults\"),l=t(\"./attributes\"),c=t(\"../parcoords/merge_length\");function u(t,e){function n(n,i){return r.coerce(t,e,l.dimensions,n,i)}var i=n(\"values\"),a=n(\"visible\");if(i&&i.length||(a=e.visible=!1),a){n(\"label\"),n(\"displayindex\",e._index);var o,s=t.categoryarray,c=Array.isArray(s)&&s.length>0;c&&(o=\"array\");var u=n(\"categoryorder\",o);\"array\"===u?(n(\"categoryarray\"),n(\"ticktext\")):(delete t.categoryarray,delete t.ticktext),c||\"array\"!==u||(e.categoryorder=\"trace\")}}e.exports=function(t,e,n,h){function d(n,i){return r.coerce(t,e,l,n,i)}var f=s(t,e,{name:\"dimensions\",handleItemDefaults:u}),p=function(t,e,n,o,s){s(\"line.shape\"),s(\"line.hovertemplate\");var l=s(\"line.color\",o.colorway[0]);if(i(t,\"line\")&&r.isArrayOrTypedArray(l)){if(l.length)return s(\"line.colorscale\"),a(t,e,o,s,{prefix:\"line.\",cLetter:\"c\"}),l.length;e.line.color=n}return 1/0}(t,e,n,h,d);o(e,h,d),Array.isArray(f)&&f.length||(e.visible=!1),c(e,f,\"values\",p),d(\"hoveron\"),d(\"hovertemplate\"),d(\"arrangement\"),d(\"bundlecolors\"),d(\"sortpaths\"),d(\"counts\");var m={family:h.font.family,size:Math.round(h.font.size),color:h.font.color};r.coerceFont(d,\"labelfont\",m);var g={family:h.font.family,size:Math.round(h.font.size/1.2),color:h.font.color};r.coerceFont(d,\"tickfont\",g)}},{\"../../components/colorscale/defaults\":653,\"../../components/colorscale/helpers\":654,\"../../lib\":778,\"../../plots/array_container_defaults\":823,\"../../plots/domain\":855,\"../parcoords/merge_length\":1158,\"./attributes\":1142}],1146:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),calc:t(\"./calc\"),plot:t(\"./plot\"),colorbar:{container:\"line\",min:\"cmin\",max:\"cmax\"},moduleType:\"trace\",name:\"parcats\",basePlotModule:t(\"./base_plot\"),categories:[\"noOpacity\"],meta:{}}},{\"./attributes\":1142,\"./base_plot\":1143,\"./calc\":1144,\"./defaults\":1145,\"./plot\":1148}],1147:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../plot_api/plot_api\"),a=t(\"../../components/fx\"),o=t(\"../../lib\"),s=o.strTranslate,l=t(\"../../components/drawing\"),c=t(\"tinycolor2\"),u=t(\"../../lib/svg_text_utils\");function h(t,e,n,i){var a=t.map(z.bind(0,e,n)),c=i.selectAll(\"g.parcatslayer\").data([null]);c.enter().append(\"g\").attr(\"class\",\"parcatslayer\").style(\"pointer-events\",\"all\");var h=c.selectAll(\"g.trace.parcats\").data(a,d),y=h.enter().append(\"g\").attr(\"class\",\"trace parcats\");h.attr(\"transform\",(function(t){return s(t.x,t.y)})),y.append(\"g\").attr(\"class\",\"paths\");var v=h.select(\"g.paths\").selectAll(\"path.path\").data((function(t){return t.paths}),d);v.attr(\"fill\",(function(t){return t.model.color}));var x=v.enter().append(\"path\").attr(\"class\",\"path\").attr(\"stroke-opacity\",0).attr(\"fill\",(function(t){return t.model.color})).attr(\"fill-opacity\",0);b(x),v.attr(\"d\",(function(t){return t.svgD})),x.empty()||v.sort(p),v.exit().remove(),v.on(\"mouseover\",m).on(\"mouseout\",g).on(\"click\",_),y.append(\"g\").attr(\"class\",\"dimensions\");var M=h.select(\"g.dimensions\").selectAll(\"g.dimension\").data((function(t){return t.dimensions}),d);M.enter().append(\"g\").attr(\"class\",\"dimension\"),M.attr(\"transform\",(function(t){return s(t.x,0)})),M.exit().remove();var T=M.selectAll(\"g.category\").data((function(t){return t.categories}),d),S=T.enter().append(\"g\").attr(\"class\",\"category\");T.attr(\"transform\",(function(t){return s(0,t.y)})),S.append(\"rect\").attr(\"class\",\"catrect\").attr(\"pointer-events\",\"none\"),T.select(\"rect.catrect\").attr(\"fill\",\"none\").attr(\"width\",(function(t){return t.width})).attr(\"height\",(function(t){return t.height})),w(S);var A=T.selectAll(\"rect.bandrect\").data((function(t){return t.bands}),d);A.each((function(){o.raiseToTop(this)})),A.attr(\"fill\",(function(t){return t.color}));var I=A.enter().append(\"rect\").attr(\"class\",\"bandrect\").attr(\"stroke-opacity\",0).attr(\"fill\",(function(t){return t.color})).attr(\"fill-opacity\",0);A.attr(\"fill\",(function(t){return t.color})).attr(\"width\",(function(t){return t.width})).attr(\"height\",(function(t){return t.height})).attr(\"y\",(function(t){return t.y})).attr(\"cursor\",(function(t){return\"fixed\"===t.parcatsViewModel.arrangement?\"default\":\"perpendicular\"===t.parcatsViewModel.arrangement?\"ns-resize\":\"move\"})),k(I),A.exit().remove(),S.append(\"text\").attr(\"class\",\"catlabel\").attr(\"pointer-events\",\"none\");var P=e._fullLayout.paper_bgcolor;T.select(\"text.catlabel\").attr(\"text-anchor\",(function(t){return f(t)?\"start\":\"end\"})).attr(\"alignment-baseline\",\"middle\").style(\"text-shadow\",P+\" -1px  1px 2px, \"+P+\" 1px  1px 2px, \"+P+\"  1px -1px 2px, \"+P+\" -1px -1px 2px\").style(\"fill\",\"rgb(0, 0, 0)\").attr(\"x\",(function(t){return f(t)?t.width+5:-5})).attr(\"y\",(function(t){return t.height/2})).text((function(t){return t.model.categoryLabel})).each((function(t){l.font(r.select(this),t.parcatsViewModel.categorylabelfont),u.convertToTspans(r.select(this),e)})),S.append(\"text\").attr(\"class\",\"dimlabel\"),T.select(\"text.dimlabel\").attr(\"text-anchor\",\"middle\").attr(\"alignment-baseline\",\"baseline\").attr(\"cursor\",(function(t){return\"fixed\"===t.parcatsViewModel.arrangement?\"default\":\"ew-resize\"})).attr(\"x\",(function(t){return t.width/2})).attr(\"y\",-5).text((function(t,e){return 0===e?t.parcatsViewModel.model.dimensions[t.model.dimensionInd].dimensionLabel:null})).each((function(t){l.font(r.select(this),t.parcatsViewModel.labelfont)})),T.selectAll(\"rect.bandrect\").on(\"mouseover\",L).on(\"mouseout\",C),T.exit().remove(),M.call(r.behavior.drag().origin((function(t){return{x:t.x,y:0}})).on(\"dragstart\",E).on(\"drag\",O).on(\"dragend\",D)),h.each((function(t){t.traceSelection=r.select(this),t.pathSelection=r.select(this).selectAll(\"g.paths\").selectAll(\"path.path\"),t.dimensionSelection=r.select(this).selectAll(\"g.dimensions\").selectAll(\"g.dimension\")})),h.exit().remove()}function d(t){return t.key}function f(t){return t.model.dimensionInd===t.parcatsViewModel.dimensions[t.parcatsViewModel.dimensions.length-1].model.dimensionInd}function p(t,e){return t.model.rawColor>e.model.rawColor?1:t.model.rawColor<e.model.rawColor?-1:0}function m(t){if(!t.parcatsViewModel.dragDimension&&-1===t.parcatsViewModel.hoverinfoItems.indexOf(\"skip\")){o.raiseToTop(this),x(r.select(this));var e=y(t),n=v(t);if(t.parcatsViewModel.graphDiv.emit(\"plotly_hover\",{points:e,event:r.event,constraints:n}),-1===t.parcatsViewModel.hoverinfoItems.indexOf(\"none\")){var i,s,l,u=r.mouse(this)[0],h=t.parcatsViewModel.graphDiv,d=t.parcatsViewModel.trace,f=h._fullLayout,p=f._paperdiv.node().getBoundingClientRect(),m=t.parcatsViewModel.graphDiv.getBoundingClientRect();for(l=0;l<t.leftXs.length-1;l++)if(t.leftXs[l]+t.dimWidths[l]-2<=u&&u<=t.leftXs[l+1]+2){var g=t.parcatsViewModel.dimensions[l];i=(g.x+g.width+t.parcatsViewModel.dimensions[l+1].x)/2,s=(t.topYs[l]+t.topYs[l+1]+t.height)/2;break}var _=t.parcatsViewModel.x+i,b=t.parcatsViewModel.y+s,w=c.mostReadable(t.model.color,[\"black\",\"white\"]),k=t.model.count,M=k/t.parcatsViewModel.model.count,T={countLabel:k,probabilityLabel:M.toFixed(3)},S=[];-1!==t.parcatsViewModel.hoverinfoItems.indexOf(\"count\")&&S.push([\"Count:\",T.countLabel].join(\" \")),-1!==t.parcatsViewModel.hoverinfoItems.indexOf(\"probability\")&&S.push([\"P:\",T.probabilityLabel].join(\" \"));var A=S.join(\"<br>\"),L=r.mouse(h)[0];a.loneHover({trace:d,x:_-p.left+m.left,y:b-p.top+m.top,text:A,color:t.model.color,borderColor:\"black\",fontFamily:'Monaco, \"Courier New\", monospace',fontSize:10,fontColor:w,idealAlign:L<_?\"right\":\"left\",hovertemplate:(d.line||{}).hovertemplate,hovertemplateLabels:T,eventData:[{data:d._input,fullData:d,count:k,probability:M}]},{container:f._hoverlayer.node(),outerContainer:f._paper.node(),gd:h})}}}function g(t){if(!t.parcatsViewModel.dragDimension&&(b(r.select(this)),a.loneUnhover(t.parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()),t.parcatsViewModel.pathSelection.sort(p),-1===t.parcatsViewModel.hoverinfoItems.indexOf(\"skip\"))){var e=y(t),n=v(t);t.parcatsViewModel.graphDiv.emit(\"plotly_unhover\",{points:e,event:r.event,constraints:n})}}function y(t){for(var e=[],n=I(t.parcatsViewModel),r=0;r<t.model.valueInds.length;r++)e.push({curveNumber:n,pointNumber:t.model.valueInds[r]});return e}function v(t){for(var e={},n=t.parcatsViewModel.model.dimensions,r=0;r<n.length;r++){var i=n[r];e[i.containerInd]=i.categories[t.model.categoryInds[r]].categoryValue}return void 0!==t.model.rawColor&&(e.color=t.model.rawColor),e}function _(t){if(-1===t.parcatsViewModel.hoverinfoItems.indexOf(\"skip\")){var e=y(t),n=v(t);t.parcatsViewModel.graphDiv.emit(\"plotly_click\",{points:e,event:r.event,constraints:n})}}function b(t){t.attr(\"fill\",(function(t){return t.model.color})).attr(\"fill-opacity\",.6).attr(\"stroke\",\"lightgray\").attr(\"stroke-width\",.2).attr(\"stroke-opacity\",1)}function x(t){t.attr(\"fill-opacity\",.8).attr(\"stroke\",(function(t){return c.mostReadable(t.model.color,[\"black\",\"white\"])})).attr(\"stroke-width\",.3)}function w(t){t.select(\"rect.catrect\").attr(\"stroke\",\"black\").attr(\"stroke-width\",1).attr(\"stroke-opacity\",1)}function k(t){t.attr(\"stroke\",\"black\").attr(\"stroke-width\",.2).attr(\"stroke-opacity\",1).attr(\"fill-opacity\",1)}function M(t){var e=t.categoryViewModel.model.dimensionInd,n=t.categoryViewModel.model.categoryInd;return t.parcatsViewModel.pathSelection.filter((function(r){return r.model.categoryInds[e]===n&&r.model.color===t.color}))}function T(t,e,n){var i=r.select(t).datum(),a=i.categoryViewModel.model,o=i.parcatsViewModel.graphDiv,s=r.select(t.parentNode).selectAll(\"rect.bandrect\"),l=[];s.each((function(t){M(t).each((function(t){Array.prototype.push.apply(l,y(t))}))}));var c={};c[a.dimensionInd]=a.categoryValue,o.emit(e,{points:l,event:n,constraints:c})}function S(t,e,n){var i=r.select(t).datum(),a=i.categoryViewModel.model,o=i.parcatsViewModel.graphDiv,s=M(i),l=[];s.each((function(t){Array.prototype.push.apply(l,y(t))}));var c={};c[a.dimensionInd]=a.categoryValue,void 0!==i.rawColor&&(c.color=i.rawColor),o.emit(e,{points:l,event:n,constraints:c})}function A(t,e,n){t._fullLayout._calcInverseTransform(t);var i,a,o=t._fullLayout._invScaleX,s=t._fullLayout._invScaleY,l=r.select(n.parentNode).select(\"rect.catrect\"),c=l.node().getBoundingClientRect(),u=l.datum(),h=u.parcatsViewModel,d=h.trace,f=c.top+c.height/2;h.dimensions.length>1&&h.model.dimensions[u.model.dimensionInd].displayInd===h.dimensions.length-1?(i=c.left,a=\"left\"):(i=c.left+c.width,a=\"right\");var p=u.model.count,m=u.model.categoryLabel,g=p/u.parcatsViewModel.model.count,y={countLabel:p,categoryLabel:m,probabilityLabel:g.toFixed(3)},v=[];-1!==u.parcatsViewModel.hoverinfoItems.indexOf(\"count\")&&v.push([\"Count:\",y.countLabel].join(\" \")),-1!==u.parcatsViewModel.hoverinfoItems.indexOf(\"probability\")&&v.push([\"P(\"+y.categoryLabel+\"):\",y.probabilityLabel].join(\" \"));var _=v.join(\"<br>\");return{trace:d,x:o*(i-e.left),y:s*(f-e.top),text:_,color:\"lightgray\",borderColor:\"black\",fontFamily:'Monaco, \"Courier New\", monospace',fontSize:12,fontColor:\"black\",idealAlign:a,hovertemplate:d.hovertemplate,hovertemplateLabels:y,eventData:[{data:d._input,fullData:d,count:p,category:m,probability:g}]}}function L(t){if(!t.parcatsViewModel.dragDimension&&-1===t.parcatsViewModel.hoverinfoItems.indexOf(\"skip\")){if(r.mouse(this)[1]<-1)return;var e,n=t.parcatsViewModel.graphDiv,i=n._fullLayout,s=i._paperdiv.node().getBoundingClientRect(),l=t.parcatsViewModel.hoveron,u=this;\"color\"===l?(function(t){var e=r.select(t).datum(),n=M(e);x(n),n.each((function(){o.raiseToTop(this)})),r.select(t.parentNode).selectAll(\"rect.bandrect\").filter((function(t){return t.color===e.color})).each((function(){o.raiseToTop(this),r.select(this).attr(\"stroke\",\"black\").attr(\"stroke-width\",1.5)}))}(u),S(u,\"plotly_hover\",r.event)):(function(t){r.select(t.parentNode).selectAll(\"rect.bandrect\").each((function(t){var e=M(t);x(e),e.each((function(){o.raiseToTop(this)}))})),r.select(t.parentNode).select(\"rect.catrect\").attr(\"stroke\",\"black\").attr(\"stroke-width\",2.5)}(u),T(u,\"plotly_hover\",r.event)),-1===t.parcatsViewModel.hoverinfoItems.indexOf(\"none\")&&(\"category\"===l?e=A(n,s,u):\"color\"===l?e=function(t,e,n){t._fullLayout._calcInverseTransform(t);var i,a,o=t._fullLayout._invScaleX,s=t._fullLayout._invScaleY,l=n.getBoundingClientRect(),u=r.select(n).datum(),h=u.categoryViewModel,d=h.parcatsViewModel,f=d.trace,p=l.y+l.height/2;d.dimensions.length>1&&d.model.dimensions[h.model.dimensionInd].displayInd===d.dimensions.length-1?(i=l.left,a=\"left\"):(i=l.left+l.width,a=\"right\");var m=h.model.categoryLabel,g=u.parcatsViewModel.model.count,y=0;u.categoryViewModel.bands.forEach((function(t){t.color===u.color&&(y+=t.count)}));var v=h.model.count,_=0;d.pathSelection.each((function(t){t.model.color===u.color&&(_+=t.model.count)}));var b=y/g,x=y/_,w=y/v,k={countLabel:g,categoryLabel:m,probabilityLabel:b.toFixed(3)},M=[];-1!==h.parcatsViewModel.hoverinfoItems.indexOf(\"count\")&&M.push([\"Count:\",k.countLabel].join(\" \")),-1!==h.parcatsViewModel.hoverinfoItems.indexOf(\"probability\")&&(M.push(\"P(color \\u2229 \"+m+\"): \"+k.probabilityLabel),M.push(\"P(\"+m+\" | color): \"+x.toFixed(3)),M.push(\"P(color | \"+m+\"): \"+w.toFixed(3)));var T=M.join(\"<br>\"),S=c.mostReadable(u.color,[\"black\",\"white\"]);return{trace:f,x:o*(i-e.left),y:s*(p-e.top),text:T,color:u.color,borderColor:\"black\",fontFamily:'Monaco, \"Courier New\", monospace',fontColor:S,fontSize:10,idealAlign:a,hovertemplate:f.hovertemplate,hovertemplateLabels:k,eventData:[{data:f._input,fullData:f,category:m,count:g,probability:b,categorycount:v,colorcount:_,bandcolorcount:y}]}}(n,s,u):\"dimension\"===l&&(e=function(t,e,n){var i=[];return r.select(n.parentNode.parentNode).selectAll(\"g.category\").select(\"rect.catrect\").each((function(){i.push(A(t,e,this))})),i}(n,s,u)),e&&a.loneHover(e,{container:i._hoverlayer.node(),outerContainer:i._paper.node(),gd:n}))}}function C(t){var e=t.parcatsViewModel;e.dragDimension||(b(e.pathSelection),w(e.dimensionSelection.selectAll(\"g.category\")),k(e.dimensionSelection.selectAll(\"g.category\").selectAll(\"rect.bandrect\")),a.loneUnhover(e.graphDiv._fullLayout._hoverlayer.node()),e.pathSelection.sort(p),-1!==e.hoverinfoItems.indexOf(\"skip\"))||(\"color\"===t.parcatsViewModel.hoveron?S(this,\"plotly_unhover\",r.event):T(this,\"plotly_unhover\",r.event))}function E(t){\"fixed\"!==t.parcatsViewModel.arrangement&&(t.dragDimensionDisplayInd=t.model.displayInd,t.initialDragDimensionDisplayInds=t.parcatsViewModel.model.dimensions.map((function(t){return t.displayInd})),t.dragHasMoved=!1,t.dragCategoryDisplayInd=null,r.select(this).selectAll(\"g.category\").select(\"rect.catrect\").each((function(e){var n=r.mouse(this)[0],i=r.mouse(this)[1];-2<=n&&n<=e.width+2&&-2<=i&&i<=e.height+2&&(t.dragCategoryDisplayInd=e.model.displayInd,t.initialDragCategoryDisplayInds=t.model.categories.map((function(t){return t.displayInd})),e.model.dragY=e.y,o.raiseToTop(this.parentNode),r.select(this.parentNode).selectAll(\"rect.bandrect\").each((function(e){e.y<i&&i<=e.y+e.height&&(t.potentialClickBand=this)})))})),t.parcatsViewModel.dragDimension=t,a.loneUnhover(t.parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()))}function O(t){if(\"fixed\"!==t.parcatsViewModel.arrangement&&(t.dragHasMoved=!0,null!==t.dragDimensionDisplayInd)){var e=t.dragDimensionDisplayInd,n=e-1,i=e+1,a=t.parcatsViewModel.dimensions[e];if(null!==t.dragCategoryDisplayInd){var o=a.categories[t.dragCategoryDisplayInd];o.model.dragY+=r.event.dy;var s=o.model.dragY,l=o.model.displayInd,c=a.categories,u=c[l-1],h=c[l+1];void 0!==u&&s<u.y+u.height/2&&(o.model.displayInd=u.model.displayInd,u.model.displayInd=l),void 0!==h&&s+o.height>h.y+h.height/2&&(o.model.displayInd=h.model.displayInd,h.model.displayInd=l),t.dragCategoryDisplayInd=o.model.displayInd}if(null===t.dragCategoryDisplayInd||\"freeform\"===t.parcatsViewModel.arrangement){a.model.dragX=r.event.x;var d=t.parcatsViewModel.dimensions[n],f=t.parcatsViewModel.dimensions[i];void 0!==d&&a.model.dragX<d.x+d.width&&(a.model.displayInd=d.model.displayInd,d.model.displayInd=e),void 0!==f&&a.model.dragX+a.width>f.x&&(a.model.displayInd=f.model.displayInd,f.model.displayInd=t.dragDimensionDisplayInd),t.dragDimensionDisplayInd=a.model.displayInd}N(t.parcatsViewModel),F(t.parcatsViewModel),R(t.parcatsViewModel),P(t.parcatsViewModel)}}function D(t){if(\"fixed\"!==t.parcatsViewModel.arrangement&&null!==t.dragDimensionDisplayInd){r.select(this).selectAll(\"text\").attr(\"font-weight\",\"normal\");var e={},n=I(t.parcatsViewModel),a=t.parcatsViewModel.model.dimensions.map((function(t){return t.displayInd})),o=t.initialDragDimensionDisplayInds.some((function(t,e){return t!==a[e]}));o&&a.forEach((function(n,r){e[\"dimensions[\"+t.parcatsViewModel.model.dimensions[r].containerInd+\"].displayindex\"]=n}));var s=!1;if(null!==t.dragCategoryDisplayInd){var l=t.model.categories.map((function(t){return t.displayInd}));if(s=t.initialDragCategoryDisplayInds.some((function(t,e){return t!==l[e]}))){var c=t.model.categories.slice().sort((function(t,e){return t.displayInd-e.displayInd})),u=c.map((function(t){return t.categoryValue})),h=c.map((function(t){return t.categoryLabel}));e[\"dimensions[\"+t.model.containerInd+\"].categoryarray\"]=[u],e[\"dimensions[\"+t.model.containerInd+\"].ticktext\"]=[h],e[\"dimensions[\"+t.model.containerInd+\"].categoryorder\"]=\"array\"}}-1===t.parcatsViewModel.hoverinfoItems.indexOf(\"skip\")&&!t.dragHasMoved&&t.potentialClickBand&&(\"color\"===t.parcatsViewModel.hoveron?S(t.potentialClickBand,\"plotly_click\",r.event.sourceEvent):T(t.potentialClickBand,\"plotly_click\",r.event.sourceEvent)),t.model.dragX=null,null!==t.dragCategoryDisplayInd&&(t.parcatsViewModel.dimensions[t.dragDimensionDisplayInd].categories[t.dragCategoryDisplayInd].model.dragY=null,t.dragCategoryDisplayInd=null),t.dragDimensionDisplayInd=null,t.parcatsViewModel.dragDimension=null,t.dragHasMoved=null,t.potentialClickBand=null,N(t.parcatsViewModel),F(t.parcatsViewModel),r.transition().duration(300).ease(\"cubic-in-out\").each((function(){R(t.parcatsViewModel,!0),P(t.parcatsViewModel,!0)})).each(\"end\",(function(){(o||s)&&i.restyle(t.parcatsViewModel.graphDiv,e,[n])}))}}function I(t){for(var e,n=t.graphDiv._fullData,r=0;r<n.length;r++)if(t.key===n[r].uid){e=r;break}return e}function P(t,e){var n;void 0===e&&(e=!1),t.pathSelection.data((function(t){return t.paths}),d),(n=t.pathSelection,e?n.transition():n).attr(\"d\",(function(t){return t.svgD}))}function R(t,e){function n(t){return e?t.transition():t}void 0===e&&(e=!1),t.dimensionSelection.data((function(t){return t.dimensions}),d);var i=t.dimensionSelection.selectAll(\"g.category\").data((function(t){return t.categories}),d);n(t.dimensionSelection).attr(\"transform\",(function(t){return s(t.x,0)})),n(i).attr(\"transform\",(function(t){return s(0,t.y)})),i.select(\".dimlabel\").text((function(t,e){return 0===e?t.parcatsViewModel.model.dimensions[t.model.dimensionInd].dimensionLabel:null})),i.select(\".catlabel\").attr(\"text-anchor\",(function(t){return f(t)?\"start\":\"end\"})).attr(\"x\",(function(t){return f(t)?t.width+5:-5})).each((function(t){var e,n;f(t)?(e=t.width+5,n=\"start\"):(e=-5,n=\"end\"),r.select(this).selectAll(\"tspan\").attr(\"x\",e).attr(\"text-anchor\",n)}));var a=i.selectAll(\"rect.bandrect\").data((function(t){return t.bands}),d),l=a.enter().append(\"rect\").attr(\"class\",\"bandrect\").attr(\"cursor\",\"move\").attr(\"stroke-opacity\",0).attr(\"fill\",(function(t){return t.color})).attr(\"fill-opacity\",0);a.attr(\"fill\",(function(t){return t.color})).attr(\"width\",(function(t){return t.width})).attr(\"height\",(function(t){return t.height})).attr(\"y\",(function(t){return t.y})),k(l),a.each((function(){o.raiseToTop(this)})),a.exit().remove()}function z(t,e,n){var r,i=n[0],a=e.margin||{l:80,r:80,t:100,b:80},o=i.trace,s=o.domain,l=e.width,c=e.height,u=Math.floor(l*(s.x[1]-s.x[0])),h=Math.floor(c*(s.y[1]-s.y[0])),d=s.x[0]*l+a.l,f=e.height-s.y[1]*e.height+a.t,p=o.line.shape;r=\"all\"===o.hoverinfo?[\"count\",\"probability\"]:(o.hoverinfo||\"\").split(\"+\");var m={trace:o,key:o.uid,model:i,x:d,y:f,width:u,height:h,hoveron:o.hoveron,hoverinfoItems:r,arrangement:o.arrangement,bundlecolors:o.bundlecolors,sortpaths:o.sortpaths,labelfont:o.labelfont,categorylabelfont:o.tickfont,pathShape:p,dragDimension:null,margin:a,paths:[],dimensions:[],graphDiv:t,traceSelection:null,pathSelection:null,dimensionSelection:null};return i.dimensions&&(N(m),F(m)),m}function j(t,e,n,i,a){var o,s,l=[],c=[];for(s=0;s<n.length-1;s++)o=r.interpolateNumber(n[s]+t[s],t[s+1]),l.push(o(a)),c.push(o(1-a));var u=\"M \"+t[0]+\",\"+e[0];for(u+=\"l\"+n[0]+\",0 \",s=1;s<n.length;s++)u+=\"C\"+l[s-1]+\",\"+e[s-1]+\" \"+c[s-1]+\",\"+e[s]+\" \"+t[s]+\",\"+e[s],u+=\"l\"+n[s]+\",0 \";for(u+=\"l0,\"+i+\" \",u+=\"l -\"+n[n.length-1]+\",0 \",s=n.length-2;s>=0;s--)u+=\"C\"+c[s]+\",\"+(e[s+1]+i)+\" \"+l[s]+\",\"+(e[s]+i)+\" \"+(t[s]+n[s])+\",\"+(e[s]+i),u+=\"l-\"+n[s]+\",0 \";return u+\"Z\"}function F(t){var e=t.dimensions,n=t.model,r=e.map((function(t){return t.categories.map((function(t){return t.y}))})),i=t.model.dimensions.map((function(t){return t.categories.map((function(t){return t.displayInd}))})),a=t.model.dimensions.map((function(t){return t.displayInd})),o=t.dimensions.map((function(t){return t.model.dimensionInd})),s=e.map((function(t){return t.x})),l=e.map((function(t){return t.width})),c=[];for(var u in n.paths)n.paths.hasOwnProperty(u)&&c.push(n.paths[u]);function h(t){var e=t.categoryInds.map((function(t,e){return i[e][t]}));return o.map((function(t){return e[t]}))}c.sort((function(e,n){var r=h(e),i=h(n);return\"backward\"===t.sortpaths&&(r.reverse(),i.reverse()),r.push(e.valueInds[0]),i.push(n.valueInds[0]),t.bundlecolors&&(r.unshift(e.rawColor),i.unshift(n.rawColor)),r<i?-1:r>i?1:0}));for(var d=new Array(c.length),f=e[0].model.count,p=e[0].categories.map((function(t){return t.height})).reduce((function(t,e){return t+e})),m=0;m<c.length;m++){var g,y=c[m];g=f>0?p*(y.count/f):0;for(var v,_=new Array(r.length),b=0;b<y.categoryInds.length;b++){var x=i[b][y.categoryInds[b]],w=a[b];_[w]=r[w][x],r[w][x]+=g;var k=t.dimensions[w].categories[x],M=k.bands.length,T=k.bands[M-1];if(void 0===T||y.rawColor!==T.rawColor){var S=void 0===T?0:T.y+T.height;k.bands.push({key:S,color:y.color,rawColor:y.rawColor,height:g,width:k.width,count:y.count,y:S,categoryViewModel:k,parcatsViewModel:t})}else{var A=k.bands[M-1];A.height+=g,A.count+=y.count}}v=j(s,_,l,g,\"hspline\"===t.pathShape?.5:0),d[m]={key:y.valueInds[0],model:y,height:g,leftXs:s,topYs:_,dimWidths:l,svgD:v,parcatsViewModel:t}}t.paths=d}function N(t){var e=t.model.dimensions.map((function(t){return{displayInd:t.displayInd,dimensionInd:t.dimensionInd}}));e.sort((function(t,e){return t.displayInd-e.displayInd}));var n=[];for(var r in e)n.push(B(t,t.model.dimensions[e[r].dimensionInd]));t.dimensions=n}function B(t,e){var n,r=t.model.dimensions.length;n=40+(r>1?(t.width-80-16)/(r-1):0)*e.displayInd;var i,a,o,s,l=[],c=t.model.maxCats,u=e.categories.length,h=e.count,d=t.height-8*(c-1),f=8*(c-u)/2,p=e.categories.map((function(t){return{displayInd:t.displayInd,categoryInd:t.categoryInd}}));for(p.sort((function(t,e){return t.displayInd-e.displayInd})),s=0;s<u;s++)o={key:(a=e.categories[p[s].categoryInd]).valueInds[0],model:a,width:16,height:i=h>0?a.count/h*d:0,y:null!==a.dragY?a.dragY:f,bands:[],parcatsViewModel:t},f=f+i+8,l.push(o);return{key:e.dimensionInd,x:null!==e.dragX?e.dragX:n,y:0,width:16,model:e,categories:l,parcatsViewModel:t,dragCategoryDisplayInd:null,dragDimensionDisplayInd:null,initialDragDimensionDisplayInds:null,initialDragCategoryDisplayInds:null,dragHasMoved:null,potentialClickBand:null}}e.exports=function(t,e,n,r){h(n,t,r,e)}},{\"../../components/drawing\":665,\"../../components/fx\":683,\"../../lib\":778,\"../../lib/svg_text_utils\":803,\"../../plot_api/plot_api\":814,d3:169,tinycolor2:576}],1148:[function(t,e,n){\"use strict\";var r=t(\"./parcats\");e.exports=function(t,e,n,i){var a=t._fullLayout,o=a._size;r(t,a._paper,e,{width:o.w,height:o.h,margin:{t:o.t,r:o.r,b:o.b,l:o.l}},n,i)}},{\"./parcats\":1147}],1149:[function(t,e,n){\"use strict\";var r=t(\"../../components/colorscale/attributes\"),i=t(\"../../plots/cartesian/layout_attributes\"),a=t(\"../../plots/font_attributes\"),o=t(\"../../plots/domain\").attributes,s=t(\"../../lib/extend\").extendFlat,l=t(\"../../plot_api/plot_template\").templatedArray;e.exports={domain:o({name:\"parcoords\",trace:!0,editType:\"plot\"}),labelangle:{valType:\"angle\",dflt:0,editType:\"plot\"},labelside:{valType:\"enumerated\",values:[\"top\",\"bottom\"],dflt:\"top\",editType:\"plot\"},labelfont:a({editType:\"plot\"}),tickfont:a({editType:\"plot\"}),rangefont:a({editType:\"plot\"}),dimensions:l(\"dimension\",{label:{valType:\"string\",editType:\"plot\"},tickvals:s({},i.tickvals,{editType:\"plot\"}),ticktext:s({},i.ticktext,{editType:\"plot\"}),tickformat:s({},i.tickformat,{editType:\"plot\"}),visible:{valType:\"boolean\",dflt:!0,editType:\"plot\"},range:{valType:\"info_array\",items:[{valType:\"number\",editType:\"plot\"},{valType:\"number\",editType:\"plot\"}],editType:\"plot\"},constraintrange:{valType:\"info_array\",freeLength:!0,dimensions:\"1-2\",items:[{valType:\"number\",editType:\"plot\"},{valType:\"number\",editType:\"plot\"}],editType:\"plot\"},multiselect:{valType:\"boolean\",dflt:!0,editType:\"plot\"},values:{valType:\"data_array\",editType:\"calc\"},editType:\"calc\"}),line:s({editType:\"calc\"},r(\"line\",{colorscaleDflt:\"Viridis\",autoColorDflt:!1,editTypeOverride:\"calc\"}))}},{\"../../components/colorscale/attributes\":650,\"../../lib/extend\":768,\"../../plot_api/plot_template\":817,\"../../plots/cartesian/layout_attributes\":842,\"../../plots/domain\":855,\"../../plots/font_attributes\":856}],1150:[function(t,e,n){\"use strict\";var r=t(\"./constants\"),i=t(\"d3\"),a=t(\"../../lib/gup\").keyFun,o=t(\"../../lib/gup\").repeat,s=t(\"../../lib\").sorterAsc,l=t(\"../../lib\").strTranslate,c=r.bar.snapRatio;function u(t,e){return t*(1-c)+e*c}var h=r.bar.snapClose;function d(t,e){return t*(1-h)+e*h}function f(t,e,n,r){if(function(t,e){for(var n=0;n<e.length;n++)if(t>=e[n][0]&&t<=e[n][1])return!0;return!1}(n,r))return n;var i=t?-1:1,a=0,o=e.length-1;if(i<0){var s=a;a=o,o=s}for(var l=e[a],c=l,h=a;i*h<i*o;h+=i){var f=h+i,p=e[f];if(i*n<i*d(l,p))return u(l,c);if(i*n<i*p||f===o)return u(p,l);c=l,l=p}}function p(t){t.attr(\"x\",-r.bar.captureWidth/2).attr(\"width\",r.bar.captureWidth)}function m(t){t.attr(\"visibility\",\"visible\").style(\"visibility\",\"visible\").attr(\"fill\",\"yellow\").attr(\"opacity\",0)}function g(t){if(!t.brush.filterSpecified)return\"0,\"+t.height;for(var e,n,r,i=y(t.brush.filter.getConsolidated(),t.height),a=[0],o=i.length?i[0][0]:null,s=0;s<i.length;s++)n=(e=i[s])[1]-e[0],a.push(o),a.push(n),(r=s+1)<i.length&&(o=i[r][0]-e[1]);return a.push(t.height),a}function y(t,e){return t.map((function(t){return t.map((function(t){return Math.max(0,t*e)})).sort(s)}))}function v(){i.select(document.body).style(\"cursor\",null)}function _(t){t.attr(\"stroke-dasharray\",g)}function b(t,e){var n=i.select(t).selectAll(\".highlight, .highlight-shadow\");_(e?n.transition().duration(r.bar.snapDuration).each(\"end\",e):n)}function x(t,e){var n,i=t.brush,a=NaN,o={};if(i.filterSpecified){var s=t.height,l=i.filter.getConsolidated(),c=y(l,s),u=NaN,h=NaN,d=NaN;for(n=0;n<=c.length;n++){var f=c[n];if(f&&f[0]<=e&&e<=f[1]){u=n;break}if(h=n?n-1:NaN,f&&f[0]>e){d=n;break}}if(a=u,isNaN(a)&&(a=isNaN(h)||isNaN(d)?isNaN(h)?d:h:e-c[h][1]<c[d][0]-e?h:d),!isNaN(a)){var p=c[a],m=function(t,e){var n=r.bar.handleHeight;if(!(e>t[1]+n||e<t[0]-n))return e>=.9*t[1]+.1*t[0]?\"n\":e<=.9*t[0]+.1*t[1]?\"s\":\"ns\"}(p,e);m&&(o.interval=l[a],o.intervalPix=p,o.region=m)}}if(t.ordinal&&!o.region){var g=t.unitTickvals,v=t.unitToPaddedPx.invert(e);for(n=0;n<g.length;n++){var _=[.25*g[Math.max(n-1,0)]+.75*g[n],.25*g[Math.min(n+1,g.length-1)]+.75*g[n]];if(v>=_[0]&&v<=_[1]){o.clickableOrdinalRange=_;break}}}return o}function w(t,e){i.event.sourceEvent.stopPropagation();var n=e.height-i.mouse(t)[1]-2*r.verticalPadding,a=e.brush.svgBrush;a.wasDragged=!0,a._dragging=!0,a.newExtent=a.grabbingBar?[n-a.grabPoint,n+a.barLength-a.grabPoint].map(e.unitToPaddedPx.invert):[a.startExtent,e.unitToPaddedPx.invert(n)].sort(s),e.brush.filterSpecified=!0,a.extent=a.stayingIntervals.concat([a.newExtent]),a.brushCallback(e),b(t.parentNode)}function k(t,e){var n=x(e,e.height-i.mouse(t)[1]-2*r.verticalPadding),a=\"crosshair\";n.clickableOrdinalRange?a=\"pointer\":n.region&&(a=n.region+\"-resize\"),i.select(document.body).style(\"cursor\",a)}function M(t){t.on(\"mousemove\",(function(t){i.event.preventDefault(),t.parent.inBrushDrag||k(this,t)})).on(\"mouseleave\",(function(t){t.parent.inBrushDrag||v()})).call(i.behavior.drag().on(\"dragstart\",(function(t){!function(t,e){i.event.sourceEvent.stopPropagation();var n=e.height-i.mouse(t)[1]-2*r.verticalPadding,a=e.unitToPaddedPx.invert(n),o=e.brush,s=x(e,n),l=s.interval,c=o.svgBrush;if(c.wasDragged=!1,c.grabbingBar=\"ns\"===s.region,c.grabbingBar){var u=l.map(e.unitToPaddedPx);c.grabPoint=n-u[0]-r.verticalPadding,c.barLength=u[1]-u[0]}c.clickableOrdinalRange=s.clickableOrdinalRange,c.stayingIntervals=e.multiselect&&o.filterSpecified?o.filter.getConsolidated():[],l&&(c.stayingIntervals=c.stayingIntervals.filter((function(t){return t[0]!==l[0]&&t[1]!==l[1]}))),c.startExtent=s.region?l[\"s\"===s.region?1:0]:a,e.parent.inBrushDrag=!0,c.brushStartCallback()}(this,t)})).on(\"drag\",(function(t){w(this,t)})).on(\"dragend\",(function(t){!function(t,e){var n=e.brush,r=n.filter,a=n.svgBrush;a._dragging||(k(t,e),w(t,e),e.brush.svgBrush.wasDragged=!1),a._dragging=!1,i.event.sourceEvent.stopPropagation();var o=a.grabbingBar;if(a.grabbingBar=!1,a.grabLocation=void 0,e.parent.inBrushDrag=!1,v(),!a.wasDragged)return a.wasDragged=void 0,a.clickableOrdinalRange?n.filterSpecified&&e.multiselect?a.extent.push(a.clickableOrdinalRange):(a.extent=[a.clickableOrdinalRange],n.filterSpecified=!0):o?(a.extent=a.stayingIntervals,0===a.extent.length&&S(n)):S(n),a.brushCallback(e),b(t.parentNode),void a.brushEndCallback(n.filterSpecified?r.getConsolidated():[]);var s=function(){r.set(r.getConsolidated())};if(e.ordinal){var l=e.unitTickvals;l[l.length-1]<l[0]&&l.reverse(),a.newExtent=[f(0,l,a.newExtent[0],a.stayingIntervals),f(1,l,a.newExtent[1],a.stayingIntervals)];var c=a.newExtent[1]>a.newExtent[0];a.extent=a.stayingIntervals.concat(c?[a.newExtent]:[]),a.extent.length||S(n),a.brushCallback(e),c?b(t.parentNode,s):(s(),b(t.parentNode))}else s();a.brushEndCallback(n.filterSpecified?r.getConsolidated():[])}(this,t)})))}function T(t,e){return t[0]-e[0]}function S(t){t.filterSpecified=!1,t.svgBrush.extent=[[-1/0,1/0]]}function A(t){for(var e,n=t.slice(),r=[],i=n.shift();i;){for(e=i.slice();(i=n.shift())&&i[0]<=e[1];)e[1]=Math.max(e[1],i[1]);r.push(e)}return 1===r.length&&r[0][0]>r[0][1]&&(r=[]),r}e.exports={makeBrush:function(t,e,n,r,i,a){var o,l=function(){var t,e,n=[];return{set:function(r){1===(n=r.map((function(t){return t.slice().sort(s)})).sort(T)).length&&n[0][0]===-1/0&&n[0][1]===1/0&&(n=[[0,-1]]),t=A(n),e=n.reduce((function(t,e){return[Math.min(t[0],e[0]),Math.max(t[1],e[1])]}),[1/0,-1/0])},get:function(){return n.slice()},getConsolidated:function(){return t},getBounds:function(){return e}}}();return l.set(n),{filter:l,filterSpecified:e,svgBrush:{extent:[],brushStartCallback:r,brushCallback:(o=i,function(t){var e=t.brush,n=function(t){return t.svgBrush.extent.map((function(t){return t.slice()}))}(e).slice();e.filter.set(n),o()}),brushEndCallback:a}}},ensureAxisBrush:function(t){var e=t.selectAll(\".\"+r.cn.axisBrush).data(o,a);e.enter().append(\"g\").classed(r.cn.axisBrush,!0),function(t){var e=t.selectAll(\".background\").data(o);e.enter().append(\"rect\").classed(\"background\",!0).call(p).call(m).style(\"pointer-events\",\"auto\").attr(\"transform\",l(0,r.verticalPadding)),e.call(M).attr(\"height\",(function(t){return t.height-r.verticalPadding}));var n=t.selectAll(\".highlight-shadow\").data(o);n.enter().append(\"line\").classed(\"highlight-shadow\",!0).attr(\"x\",-r.bar.width/2).attr(\"stroke-width\",r.bar.width+r.bar.strokeWidth).attr(\"stroke\",r.bar.strokeColor).attr(\"opacity\",r.bar.strokeOpacity).attr(\"stroke-linecap\",\"butt\"),n.attr(\"y1\",(function(t){return t.height})).call(_);var i=t.selectAll(\".highlight\").data(o);i.enter().append(\"line\").classed(\"highlight\",!0).attr(\"x\",-r.bar.width/2).attr(\"stroke-width\",r.bar.width-r.bar.strokeWidth).attr(\"stroke\",r.bar.fillColor).attr(\"opacity\",r.bar.fillOpacity).attr(\"stroke-linecap\",\"butt\"),i.attr(\"y1\",(function(t){return t.height})).call(_)}(e)},cleanRanges:function(t,e){if(Array.isArray(t[0])?(t=t.map((function(t){return t.sort(s)})),t=e.multiselect?A(t.sort(T)):[t[0]]):t=[t.sort(s)],e.tickvals){var n=e.tickvals.slice().sort(s);if(!(t=t.map((function(t){var e=[f(0,n,t[0],[]),f(1,n,t[1],[])];if(e[1]>e[0])return e})).filter((function(t){return t}))).length)return}return t.length>1?t:t[0]}}},{\"../../lib\":778,\"../../lib/gup\":775,\"./constants\":1153,d3:169}],1151:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../plots/get_data\").getModuleCalcData,a=t(\"./plot\"),o=t(\"../../constants/xmlns_namespaces\");n.name=\"parcoords\",n.plot=function(t){var e=i(t.calcdata,\"parcoords\")[0];e.length&&a(t,e)},n.clean=function(t,e,n,r){var i=r._has&&r._has(\"parcoords\"),a=e._has&&e._has(\"parcoords\");i&&!a&&(r._paperdiv.selectAll(\".parcoords\").remove(),r._glimages.selectAll(\"*\").remove())},n.toSVG=function(t){var e=t._fullLayout._glimages,n=r.select(t).selectAll(\".svg-container\");n.filter((function(t,e){return e===n.size()-1})).selectAll(\".gl-canvas-context, .gl-canvas-focus\").each((function(){var t=this,n=t.toDataURL(\"image/png\");e.append(\"svg:image\").attr({xmlns:o.svg,\"xlink:href\":n,preserveAspectRatio:\"none\",x:0,y:0,width:t.width,height:t.height})})),window.setTimeout((function(){r.selectAll(\"#filterBarPattern\").attr(\"id\",\"filterBarPattern\")}),60)}},{\"../../constants/xmlns_namespaces\":754,\"../../plots/get_data\":865,\"./plot\":1160,d3:169}],1152:[function(t,e,n){\"use strict\";var r=t(\"../../lib\").isArrayOrTypedArray,i=t(\"../../components/colorscale\"),a=t(\"../../lib/gup\").wrap;e.exports=function(t,e){var n,o;return i.hasColorscale(e,\"line\")&&r(e.line.color)?(n=e.line.color,o=i.extractOpts(e.line).colorscale,i.calc(t,e,{vals:n,containerStr:\"line\",cLetter:\"c\"})):(n=function(t){for(var e=new Array(t),n=0;n<t;n++)e[n]=.5;return e}(e._length),o=[[0,e.line.color],[1,e.line.color]]),a({lineColor:n,cscale:o})}},{\"../../components/colorscale\":655,\"../../lib\":778,\"../../lib/gup\":775}],1153:[function(t,e,n){\"use strict\";e.exports={maxDimensionCount:60,overdrag:45,verticalPadding:2,tickDistance:50,canvasPixelRatio:1,blockLineCount:5e3,layers:[\"contextLineLayer\",\"focusLineLayer\",\"pickLineLayer\"],axisTitleOffset:28,axisExtentOffset:10,deselectedLineColor:\"#777\",bar:{width:4,captureWidth:10,fillColor:\"magenta\",fillOpacity:1,snapDuration:150,snapRatio:.25,snapClose:.01,strokeColor:\"white\",strokeOpacity:1,strokeWidth:1,handleHeight:8,handleOpacity:1,handleOverlap:0},cn:{axisExtentText:\"axis-extent-text\",parcoordsLineLayers:\"parcoords-line-layers\",parcoordsLineLayer:\"parcoords-lines\",parcoords:\"parcoords\",parcoordsControlView:\"parcoords-control-view\",yAxis:\"y-axis\",axisOverlays:\"axis-overlays\",axis:\"axis\",axisHeading:\"axis-heading\",axisTitle:\"axis-title\",axisExtent:\"axis-extent\",axisExtentTop:\"axis-extent-top\",axisExtentTopText:\"axis-extent-top-text\",axisExtentBottom:\"axis-extent-bottom\",axisExtentBottomText:\"axis-extent-bottom-text\",axisBrush:\"axis-brush\"},id:{filterBarPattern:\"filter-bar-pattern\"}}},{}],1154:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../components/colorscale/helpers\").hasColorscale,a=t(\"../../components/colorscale/defaults\"),o=t(\"../../plots/domain\").defaults,s=t(\"../../plots/array_container_defaults\"),l=t(\"../../plots/cartesian/axes\"),c=t(\"./attributes\"),u=t(\"./axisbrush\"),h=t(\"./constants\").maxDimensionCount,d=t(\"./merge_length\");function f(t,e,n,i){function a(n,i){return r.coerce(t,e,c.dimensions,n,i)}var o=a(\"values\"),s=a(\"visible\");if(o&&o.length||(s=e.visible=!1),s){a(\"label\"),a(\"tickvals\"),a(\"ticktext\"),a(\"tickformat\");var h=a(\"range\");e._ax={_id:\"y\",type:\"linear\",showexponent:\"all\",exponentformat:\"B\",range:h},l.setConvert(e._ax,i.layout),a(\"multiselect\");var d=a(\"constraintrange\");d&&(e.constraintrange=u.cleanRanges(d,e))}}e.exports=function(t,e,n,l){function u(n,i){return r.coerce(t,e,c,n,i)}var p=t.dimensions;Array.isArray(p)&&p.length>h&&(r.log(\"parcoords traces support up to \"+h+\" dimensions at the moment\"),p.splice(h));var m=s(t,e,{name:\"dimensions\",layout:l,handleItemDefaults:f}),g=function(t,e,n,o,s){var l=s(\"line.color\",n);if(i(t,\"line\")&&r.isArrayOrTypedArray(l)){if(l.length)return s(\"line.colorscale\"),a(t,e,o,s,{prefix:\"line.\",cLetter:\"c\"}),l.length;e.line.color=n}return 1/0}(t,e,n,l,u);o(e,l,u),Array.isArray(m)&&m.length||(e.visible=!1),d(e,m,\"values\",g);var y={family:l.font.family,size:Math.round(l.font.size/1.2),color:l.font.color};r.coerceFont(u,\"labelfont\",y),r.coerceFont(u,\"tickfont\",y),r.coerceFont(u,\"rangefont\",y),u(\"labelangle\"),u(\"labelside\")}},{\"../../components/colorscale/defaults\":653,\"../../components/colorscale/helpers\":654,\"../../lib\":778,\"../../plots/array_container_defaults\":823,\"../../plots/cartesian/axes\":828,\"../../plots/domain\":855,\"./attributes\":1149,\"./axisbrush\":1150,\"./constants\":1153,\"./merge_length\":1158}],1155:[function(t,e,n){\"use strict\";var r=t(\"../../lib\").isTypedArray;n.convertTypedArray=function(t){return r(t)?Array.prototype.slice.call(t):t},n.isOrdinal=function(t){return!!t.tickvals},n.isVisible=function(t){return t.visible||!(\"visible\"in t)}},{\"../../lib\":778}],1156:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),calc:t(\"./calc\"),plot:t(\"./plot\"),colorbar:{container:\"line\",min:\"cmin\",max:\"cmax\"},moduleType:\"trace\",name:\"parcoords\",basePlotModule:t(\"./base_plot\"),categories:[\"gl\",\"regl\",\"noOpacity\",\"noHover\"],meta:{}}},{\"./attributes\":1149,\"./base_plot\":1151,\"./calc\":1152,\"./defaults\":1154,\"./plot\":1160}],1157:[function(t,e,n){\"use strict\";var r=t(\"glslify\"),i=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragColor;\\n\\nattribute vec4 p01_04, p05_08, p09_12, p13_16,\\n               p17_20, p21_24, p25_28, p29_32,\\n               p33_36, p37_40, p41_44, p45_48,\\n               p49_52, p53_56, p57_60, colors;\\n\\nuniform mat4 dim0A, dim1A, dim0B, dim1B, dim0C, dim1C, dim0D, dim1D,\\n             loA, hiA, loB, hiB, loC, hiC, loD, hiD;\\n\\nuniform vec2 resolution, viewBoxPos, viewBoxSize;\\nuniform sampler2D mask, palette;\\nuniform float maskHeight;\\nuniform float drwLayer; // 0: context, 1: focus, 2: pick\\nuniform vec4 contextColor;\\n\\nbool isPick    = (drwLayer > 1.5);\\nbool isContext = (drwLayer < 0.5);\\n\\nconst vec4 ZEROS = vec4(0.0, 0.0, 0.0, 0.0);\\nconst vec4 UNITS = vec4(1.0, 1.0, 1.0, 1.0);\\n\\nfloat val(mat4 p, mat4 v) {\\n    return dot(matrixCompMult(p, v) * UNITS, UNITS);\\n}\\n\\nfloat axisY(float ratio, mat4 A, mat4 B, mat4 C, mat4 D) {\\n    float y1 = val(A, dim0A) + val(B, dim0B) + val(C, dim0C) + val(D, dim0D);\\n    float y2 = val(A, dim1A) + val(B, dim1B) + val(C, dim1C) + val(D, dim1D);\\n    return y1 * (1.0 - ratio) + y2 * ratio;\\n}\\n\\nint iMod(int a, int b) {\\n    return a - b * (a / b);\\n}\\n\\nbool fOutside(float p, float lo, float hi) {\\n    return (lo < hi) && (lo > p || p > hi);\\n}\\n\\nbool vOutside(vec4 p, vec4 lo, vec4 hi) {\\n    return (\\n        fOutside(p[0], lo[0], hi[0]) ||\\n        fOutside(p[1], lo[1], hi[1]) ||\\n        fOutside(p[2], lo[2], hi[2]) ||\\n        fOutside(p[3], lo[3], hi[3])\\n    );\\n}\\n\\nbool mOutside(mat4 p, mat4 lo, mat4 hi) {\\n    return (\\n        vOutside(p[0], lo[0], hi[0]) ||\\n        vOutside(p[1], lo[1], hi[1]) ||\\n        vOutside(p[2], lo[2], hi[2]) ||\\n        vOutside(p[3], lo[3], hi[3])\\n    );\\n}\\n\\nbool outsideBoundingBox(mat4 A, mat4 B, mat4 C, mat4 D) {\\n    return mOutside(A, loA, hiA) ||\\n           mOutside(B, loB, hiB) ||\\n           mOutside(C, loC, hiC) ||\\n           mOutside(D, loD, hiD);\\n}\\n\\nbool outsideRasterMask(mat4 A, mat4 B, mat4 C, mat4 D) {\\n    mat4 pnts[4];\\n    pnts[0] = A;\\n    pnts[1] = B;\\n    pnts[2] = C;\\n    pnts[3] = D;\\n\\n    for(int i = 0; i < 4; ++i) {\\n        for(int j = 0; j < 4; ++j) {\\n            for(int k = 0; k < 4; ++k) {\\n                if(0 == iMod(\\n                    int(255.0 * texture2D(mask,\\n                        vec2(\\n                            (float(i * 2 + j / 2) + 0.5) / 8.0,\\n                            (pnts[i][j][k] * (maskHeight - 1.0) + 1.0) / maskHeight\\n                        ))[3]\\n                    ) / int(pow(2.0, float(iMod(j * 4 + k, 8)))),\\n                    2\\n                )) return true;\\n            }\\n        }\\n    }\\n    return false;\\n}\\n\\nvec4 position(bool isContext, float v, mat4 A, mat4 B, mat4 C, mat4 D) {\\n    float x = 0.5 * sign(v) + 0.5;\\n    float y = axisY(x, A, B, C, D);\\n    float z = 1.0 - abs(v);\\n\\n    z += isContext ? 0.0 : 2.0 * float(\\n        outsideBoundingBox(A, B, C, D) ||\\n        outsideRasterMask(A, B, C, D)\\n    );\\n\\n    return vec4(\\n        2.0 * (vec2(x, y) * viewBoxSize + viewBoxPos) / resolution - 1.0,\\n        z,\\n        1.0\\n    );\\n}\\n\\nvoid main() {\\n    mat4 A = mat4(p01_04, p05_08, p09_12, p13_16);\\n    mat4 B = mat4(p17_20, p21_24, p25_28, p29_32);\\n    mat4 C = mat4(p33_36, p37_40, p41_44, p45_48);\\n    mat4 D = mat4(p49_52, p53_56, p57_60, ZEROS);\\n\\n    float v = colors[3];\\n\\n    gl_Position = position(isContext, v, A, B, C, D);\\n\\n    fragColor =\\n        isContext ? vec4(contextColor) :\\n        isPick ? vec4(colors.rgb, 1.0) : texture2D(palette, vec2(abs(v), 0.5));\\n}\\n\"]),a=r([\"precision highp float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragColor;\\n\\nvoid main() {\\n    gl_FragColor = fragColor;\\n}\\n\"]),o=t(\"./constants\").maxDimensionCount,s=t(\"../../lib\"),l=new Uint8Array(4),c=new Uint8Array(4),u={shape:[256,1],format:\"rgba\",type:\"uint8\",mag:\"nearest\",min:\"nearest\"};function h(t,e,n,r,i){var a=t._gl;a.enable(a.SCISSOR_TEST),a.scissor(e,n,r,i),t.clear({color:[0,0,0,0],depth:1})}function d(t,e,n,r,i,a){var o=a.key;n.drawCompleted||(function(t){t.read({x:0,y:0,width:1,height:1,data:l})}(t),n.drawCompleted=!0),function s(l){var c=Math.min(r,i-l*r);0===l&&(window.cancelAnimationFrame(n.currentRafs[o]),delete n.currentRafs[o],h(t,a.scissorX,a.scissorY,a.scissorWidth,a.viewBoxSize[1])),n.clearOnly||(a.count=2*c,a.offset=2*l*r,e(a),l*r+c<i&&(n.currentRafs[o]=window.requestAnimationFrame((function(){s(l+1)}))),n.drawCompleted=!1)}(0)}function f(t,e){for(var n=new Array(256),r=0;r<256;r++)n[r]=t(r/255).concat(e);return n}function p(t,e){return(t>>>8*e)%256/255}function m(t,e,n){for(var r=new Array(8*e),i=0,a=0;a<e;a++)for(var o=0;o<2;o++)for(var s=0;s<4;s++){var l=4*t+s,c=n[64*a+l];63===l&&0===o&&(c*=-1),r[i++]=c}return r}function g(t){var e=\"0\"+t;return e.substr(e.length-2)}function y(t){return t<o?\"p\"+g(t+1)+\"_\"+g(t+4):\"colors\"}function v(t,e,n,r,i,a,o,l,c,u,h,d,f){for(var p=[[],[]],m=0;m<64;m++)p[0][m]=m===i?1:0,p[1][m]=m===a?1:0;var g=t.lines.canvasOverdrag,y=t.domain,v=t.canvasWidth,_=t.canvasHeight,b=t.deselectedLines.color;return s.extendFlat({key:h,resolution:[v,_],viewBoxPos:[o+g,l],viewBoxSize:[c,u],i0:i,i1:a,dim0A:p[0].slice(0,16),dim0B:p[0].slice(16,32),dim0C:p[0].slice(32,48),dim0D:p[0].slice(48,64),dim1A:p[1].slice(0,16),dim1B:p[1].slice(16,32),dim1C:p[1].slice(32,48),dim1D:p[1].slice(48,64),drwLayer:d,contextColor:[b[0]/255,b[1]/255,b[2]/255,b[3]<1?b[3]:Math.max(1/255,Math.pow(1/t.lines.color.length,1/3))],scissorX:(r===e?0:o+g)+(t.pad.l-g)+t.layoutWidth*y.x[0],scissorWidth:(r===n?v-o+g:c+.5)+(r===e?o+g:0),scissorY:l+t.pad.b+t.layoutHeight*y.y[0],scissorHeight:u,viewportX:t.pad.l-g+t.layoutWidth*y.x[0],viewportY:t.pad.b+t.layoutHeight*y.y[0],viewportWidth:v,viewportHeight:_},f)}function _(t){var e=2047,n=Math.max(0,Math.floor(t[0]*e),0),r=Math.min(e,Math.ceil(t[1]*e),e);return[Math.min(n,r),Math.max(n,r)]}e.exports=function(t,e){var n,r,l,g,b=e.context,x=e.pick,w=e.regl,k={currentRafs:{},drawCompleted:!0,clearOnly:!1},M=function(t){for(var e={},n=0;n<=o;n+=4)e[y(n)]=t.buffer({usage:\"dynamic\",type:\"float\",data:new Uint8Array(0)});return e}(w),T=w.texture(u),S=[];L(e);var A=w({profile:!1,blend:{enable:b,func:{srcRGB:\"src alpha\",dstRGB:\"one minus src alpha\",srcAlpha:1,dstAlpha:1},equation:{rgb:\"add\",alpha:\"add\"},color:[0,0,0,0]},depth:{enable:!b,mask:!0,func:\"less\",range:[0,1]},cull:{enable:!0,face:\"back\"},scissor:{enable:!0,box:{x:w.prop(\"scissorX\"),y:w.prop(\"scissorY\"),width:w.prop(\"scissorWidth\"),height:w.prop(\"scissorHeight\")}},viewport:{x:w.prop(\"viewportX\"),y:w.prop(\"viewportY\"),width:w.prop(\"viewportWidth\"),height:w.prop(\"viewportHeight\")},dither:!1,vert:i,frag:a,primitive:\"lines\",lineWidth:1,attributes:M,uniforms:{resolution:w.prop(\"resolution\"),viewBoxPos:w.prop(\"viewBoxPos\"),viewBoxSize:w.prop(\"viewBoxSize\"),dim0A:w.prop(\"dim0A\"),dim1A:w.prop(\"dim1A\"),dim0B:w.prop(\"dim0B\"),dim1B:w.prop(\"dim1B\"),dim0C:w.prop(\"dim0C\"),dim1C:w.prop(\"dim1C\"),dim0D:w.prop(\"dim0D\"),dim1D:w.prop(\"dim1D\"),loA:w.prop(\"loA\"),hiA:w.prop(\"hiA\"),loB:w.prop(\"loB\"),hiB:w.prop(\"hiB\"),loC:w.prop(\"loC\"),hiC:w.prop(\"hiC\"),loD:w.prop(\"loD\"),hiD:w.prop(\"hiD\"),palette:T,contextColor:w.prop(\"contextColor\"),mask:w.prop(\"maskTexture\"),drwLayer:w.prop(\"drwLayer\"),maskHeight:w.prop(\"maskHeight\")},offset:w.prop(\"offset\"),count:w.prop(\"count\")});function L(t){n=t.model,r=t.viewModel.dimensions.slice(),l=r[0]?r[0].values.length:0;var e=n.lines,i=x?e.color.map((function(t,n){return n/e.color.length})):e.color,a=function(t,e,n){for(var r=new Array(t*(o+4)),i=0,a=0;a<t;a++){for(var s=0;s<o;s++)r[i++]=s<e.length?e[s].paddedUnitValues[a]:.5;r[i++]=p(a,2),r[i++]=p(a,1),r[i++]=p(a,0),r[i++]=Math.max(1e-6,Math.min(.999999,n[a]))}return r}(l,r,i);(function(t,e,n){for(var r=0;r<=o;r+=4)t[y(r)](m(r/4,e,n))})(M,l,a),b||x||(T=w.texture(s.extendFlat({data:f(n.unitToColor,255)},u)))}return{render:function(t,e,i){var a,o,s,c=t.length,u=1/0,f=-1/0;for(a=0;a<c;a++)t[a].dim0.canvasX<u&&(u=t[a].dim0.canvasX,o=a),t[a].dim1.canvasX>f&&(f=t[a].dim1.canvasX,s=a);0===c&&h(w,0,0,n.canvasWidth,n.canvasHeight);var p=function(t){var e,n,i,a=[[],[]];for(i=0;i<64;i++){var o=!t&&i<r.length?r[i].brush.filter.getBounds():[-1/0,1/0];a[0][i]=o[0],a[1][i]=o[1]}var s=new Array(16384);for(e=0;e<16384;e++)s[e]=255;if(!t)for(e=0;e<r.length;e++){var l=e%8,c=(e-l)/8,u=Math.pow(2,l),h=r[e].brush.filter.get();if(!(h.length<2)){var d=_(h[0])[1];for(n=1;n<h.length;n++){var f=_(h[n]);for(i=d+1;i<f[0];i++)s[8*i+c]&=~u;d=Math.max(d,f[1])}}}var p={shape:[8,2048],format:\"alpha\",type:\"uint8\",mag:\"nearest\",min:\"nearest\",data:s};return g?g(p):g=w.texture(p),{maskTexture:g,maskHeight:2048,loA:a[0].slice(0,16),loB:a[0].slice(16,32),loC:a[0].slice(32,48),loD:a[0].slice(48,64),hiA:a[1].slice(0,16),hiB:a[1].slice(16,32),hiC:a[1].slice(32,48),hiD:a[1].slice(48,64)}}(b);for(a=0;a<c;a++){var m=t[a],y=m.dim0.crossfilterDimensionIndex,M=m.dim1.crossfilterDimensionIndex,T=m.canvasX,L=m.canvasY,C=T+m.panelSizeX;if(e||!S[y]||S[y][0]!==T||S[y][1]!==C){S[y]=[T,C];var E=v(n,o,s,a,y,M,T,L,m.panelSizeX,m.panelSizeY,m.dim0.crossfilterDimensionIndex,b?0:x?2:1,p);k.clearOnly=i,d(w,A,k,e?n.lines.blockLineCount:l,l,E)}}},readPixel:function(t,e){return w.read({x:t,y:e,width:1,height:1,data:c}),c},readPixels:function(t,e,n,r){var i=new Uint8Array(4*n*r);return w.read({x:t,y:e,width:n,height:r,data:i}),i},destroy:function(){for(var e in t.style[\"pointer-events\"]=\"none\",T.destroy(),g&&g.destroy(),M)M[e].destroy()},update:L}}},{\"../../lib\":778,\"./constants\":1153,glslify:439}],1158:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,r){var i,a;for(r||(r=1/0),i=0;i<e.length;i++)(a=e[i]).visible&&(r=Math.min(r,a[n].length));for(r===1/0&&(r=0),t._length=r,i=0;i<e.length;i++)(a=e[i]).visible&&(a._length=r);return r}},{}],1159:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"color-rgba\"),a=t(\"../../plots/cartesian/axes\"),o=t(\"../../lib\"),s=o.strRotate,l=o.strTranslate,c=t(\"../../lib/svg_text_utils\"),u=t(\"../../components/drawing\"),h=t(\"../../components/colorscale\"),d=t(\"../../lib/gup\"),f=d.keyFun,p=d.repeat,m=d.unwrap,g=t(\"./helpers\"),y=t(\"./constants\"),v=t(\"./axisbrush\"),_=t(\"./lines\");function b(t,e,n){return o.aggNums(t,null,e,n)}function x(t,e){return k(b(Math.min,t,e),b(Math.max,t,e))}function w(t){var e=t.range;return e?k(e[0],e[1]):x(t.values,t._length)}function k(t,e){return!isNaN(t)&&isFinite(t)||(t=0),!isNaN(e)&&isFinite(e)||(e=0),t===e&&(0===t?(t-=1,e+=1):(t*=.9,e*=1.1)),[t,e]}function M(t,e,n,i,a){var o,s,l=w(n);return i?r.scale.ordinal().domain(i.map((o=r.format(n.tickformat),s=a,s?function(t,e){var n=s[e];return null==n?o(t):n}:o))).range(i.map((function(n){return t-e+(n-l[0])/(l[1]-l[0])*(2*e-t)}))):r.scale.linear().domain(l).range([t-e,e])}function T(t){if(t.tickvals){var e=w(t);return r.scale.ordinal().domain(t.tickvals).range(t.tickvals.map((function(t){return(t-e[0])/(e[1]-e[0])})))}}function S(t){var e=t.map((function(t){return t[0]})),n=t.map((function(t){var e=i(t[1]);return r.rgb(\"rgb(\"+e[0]+\",\"+e[1]+\",\"+e[2]+\")\")})),a=\"rgb\".split(\"\").map((function(t){return r.scale.linear().clamp(!0).domain(e).range(n.map((i=t,function(t){return t[i]})));var i}));return function(t){return a.map((function(e){return e(t)}))}}function A(t){return t.dimensions.some((function(t){return t.brush.filterSpecified}))}function L(t,e,n){var a=m(e),s=a.trace,l=g.convertTypedArray(a.lineColor),c=s.line,u={color:i(y.deselectedLineColor)},d=h.extractOpts(c),f=d.reversescale?h.flipScale(a.cscale):a.cscale,p=s.domain,v=s.dimensions,_=t.width,b=s.labelangle,x=s.labelside,k=s.labelfont,M=s.tickfont,T=s.rangefont,A=o.extendDeepNoArrays({},c,{color:l.map(r.scale.linear().domain(w({values:l,range:[d.min,d.max],_length:s._length}))),blockLineCount:y.blockLineCount,canvasOverdrag:y.overdrag*y.canvasPixelRatio}),L=Math.floor(_*(p.x[1]-p.x[0])),C=Math.floor(t.height*(p.y[1]-p.y[0])),E=t.margin||{l:80,r:80,t:100,b:80},O=L,D=C;return{key:n,colCount:v.filter(g.isVisible).length,dimensions:v,tickDistance:y.tickDistance,unitToColor:S(f),lines:A,deselectedLines:u,labelAngle:b,labelSide:x,labelFont:k,tickFont:M,rangeFont:T,layoutWidth:_,layoutHeight:t.height,domain:p,translateX:p.x[0]*_,translateY:t.height-p.y[1]*t.height,pad:E,canvasWidth:O*y.canvasPixelRatio+2*A.canvasOverdrag,canvasHeight:D*y.canvasPixelRatio,width:O,height:D,canvasPixelRatio:y.canvasPixelRatio}}function C(t,e,n){var i=n.width,a=n.height,s=n.dimensions,l=n.canvasPixelRatio,c=function(t){return i*t/Math.max(1,n.colCount-1)},u=y.verticalPadding/a,h=function(t,e){return r.scale.linear().range([e,t-e])}(a,y.verticalPadding),d={key:n.key,xScale:c,model:n,inBrushDrag:!1},f={};return d.dimensions=s.filter(g.isVisible).map((function(i,s){var p=function(t,e){return r.scale.linear().domain(w(t)).range([e,1-e])}(i,u),m=f[i.label];f[i.label]=(m||0)+1;var _=i.label+(m?\"__\"+m:\"\"),b=i.constraintrange,x=b&&b.length;x&&!Array.isArray(b[0])&&(b=[b]);var k=x?b.map((function(t){return t.map(p)})):[[-1/0,1/0]],S=i.values;S.length>i._length&&(S=S.slice(0,i._length));var L,C=i.tickvals;function E(t,e){return{val:t,text:L[e]}}function O(t,e){return t.val-e.val}if(Array.isArray(C)&&C.length){L=i.ticktext,Array.isArray(L)&&L.length?L.length>C.length?L=L.slice(0,C.length):C.length>L.length&&(C=C.slice(0,L.length)):L=C.map(r.format(i.tickformat));for(var D=1;D<C.length;D++)if(C[D]<C[D-1]){for(var I=C.map(E).sort(O),P=0;P<C.length;P++)C[P]=I[P].val,L[P]=I[P].text;break}}else C=void 0;return S=g.convertTypedArray(S),{key:_,label:i.label,tickFormat:i.tickformat,tickvals:C,ticktext:L,ordinal:g.isOrdinal(i),multiselect:i.multiselect,xIndex:s,crossfilterDimensionIndex:s,visibleIndex:i._index,height:a,values:S,paddedUnitValues:S.map(p),unitTickvals:C&&C.map(p),xScale:c,x:c(s),canvasX:c(s)*l,unitToPaddedPx:h,domainScale:M(a,y.verticalPadding,i,C,L),ordinalScale:T(i),parent:d,model:n,brush:v.makeBrush(t,x,k,(function(){t.linePickActive(!1)}),(function(){var e=d;e.focusLayer&&e.focusLayer.render(e.panels,!0);var n=A(e);!t.contextShown()&&n?(e.contextLayer&&e.contextLayer.render(e.panels,!0),t.contextShown(!0)):t.contextShown()&&!n&&(e.contextLayer&&e.contextLayer.render(e.panels,!0,!0),t.contextShown(!1))}),(function(n){if(d.focusLayer.render(d.panels,!0),d.pickLayer&&d.pickLayer.render(d.panels,!0),t.linePickActive(!0),e&&e.filterChanged){var r=p.invert,a=n.map((function(t){return t.map(r).sort(o.sorterAsc)})).sort((function(t,e){return t[0]-e[0]}));e.filterChanged(d.key,i._index,a)}}))}})),d}function E(t){t.classed(y.cn.axisExtentText,!0).attr(\"text-anchor\",\"middle\").style(\"cursor\",\"default\")}function O(t,e){var n=t*Math.PI/180;return{dir:\"top\"===e?1:-1,dx:Math.sin(n),dy:Math.cos(n),degrees:t}}function D(t,e){for(var n=e.panels||(e.panels=[]),r=t.data(),i=0;i<r.length-1;i++){var a=n[i]||(n[i]={}),o=r[i],s=r[i+1];a.dim0=o,a.dim1=s,a.canvasX=o.canvasX,a.panelSizeX=s.canvasX-o.canvasX,a.panelSizeY=e.model.canvasHeight,a.y=0,a.canvasY=0}}function I(t,e){return a.tickText(t._ax,e,!1).text}function P(t,e){if(t.ordinal)return\"\";var n=t.domainScale.domain();return I(t.model.dimensions[t.visibleIndex],n[e?n.length-1:0])}e.exports=function(t,e,n,i){var h=t._fullLayout,d=h._toppaper,b=h._glcontainer;!function(t){for(var e=0;e<t.length;e++)for(var n=0;n<t[e].length;n++)for(var r=t[e][n].trace,i=r.dimensions,o=0;o<i.length;o++){var s=i[o].values,l=i[o]._ax;l&&(l.range=l.range?k(l.range[0],l.range[1]):x(s,r._length),l.dtick||(l.dtick=.01*(Math.abs(l.range[1]-l.range[0])||1)),l.tickformat=i[o].tickformat,a.calcTicks(l),l.cleanRange())}}(e);var w,M,T=(w=!0,M=!1,{linePickActive:function(t){return arguments.length?w=!!t:w},contextShown:function(t){return arguments.length?M=!!t:M}}),S=e.filter((function(t){return m(t).trace.visible})).map(L.bind(0,n)).map(C.bind(0,T,i));b.each((function(t,e){return o.extendFlat(t,S[e])}));var R=b.selectAll(\".gl-canvas\").each((function(t){t.viewModel=S[0],t.model=t.viewModel?t.viewModel.model:null})),z=null;R.filter((function(t){return t.pick})).style(\"pointer-events\",\"auto\").on(\"mousemove\",(function(t){if(T.linePickActive()&&t.lineLayer&&i&&i.hover){var e=r.event,n=this.width,a=this.height,o=r.mouse(this),s=o[0],l=o[1];if(s<0||l<0||s>=n||l>=a)return;var c=t.lineLayer.readPixel(s,a-1-l),u=0!==c[3],h=u?c[2]+256*(c[1]+256*c[0]):null,d={x:s,y:l,clientX:e.clientX,clientY:e.clientY,dataIndex:t.model.key,curveNumber:h};h!==z&&(u?i.hover(d):i.unhover&&i.unhover(d),z=h)}})),R.style(\"opacity\",(function(t){return t.pick?0:1})),d.style(\"background\",\"rgba(255, 255, 255, 0)\");var j=d.selectAll(\".\"+y.cn.parcoords).data(S,f);j.exit().remove(),j.enter().append(\"g\").classed(y.cn.parcoords,!0).style(\"shape-rendering\",\"crispEdges\").style(\"pointer-events\",\"none\"),j.attr(\"transform\",(function(t){return l(t.model.translateX,t.model.translateY)}));var F=j.selectAll(\".\"+y.cn.parcoordsControlView).data(p,f);F.enter().append(\"g\").classed(y.cn.parcoordsControlView,!0),F.attr(\"transform\",(function(t){return l(t.model.pad.l,t.model.pad.t)}));var N=F.selectAll(\".\"+y.cn.yAxis).data((function(t){return t.dimensions}),f);N.enter().append(\"g\").classed(y.cn.yAxis,!0),F.each((function(t){D(N,t)})),R.each((function(t){t.viewModel&&(!t.lineLayer||i?t.lineLayer=_(this,t):t.lineLayer.update(t),(t.key||0===t.key)&&(t.viewModel[t.key]=t.lineLayer),t.lineLayer.render(t.viewModel.panels,!t.context||i))})),N.attr(\"transform\",(function(t){return l(t.xScale(t.xIndex),0)})),N.call(r.behavior.drag().origin((function(t){return t})).on(\"drag\",(function(t){var e=t.parent;T.linePickActive(!1),t.x=Math.max(-y.overdrag,Math.min(t.model.width+y.overdrag,r.event.x)),t.canvasX=t.x*t.model.canvasPixelRatio,N.sort((function(t,e){return t.x-e.x})).each((function(e,n){e.xIndex=n,e.x=t===e?e.x:e.xScale(e.xIndex),e.canvasX=e.x*e.model.canvasPixelRatio})),D(N,e),N.filter((function(e){return 0!==Math.abs(t.xIndex-e.xIndex)})).attr(\"transform\",(function(t){return l(t.xScale(t.xIndex),0)})),r.select(this).attr(\"transform\",l(t.x,0)),N.each((function(n,r,i){i===t.parent.key&&(e.dimensions[r]=n)})),e.contextLayer&&e.contextLayer.render(e.panels,!1,!A(e)),e.focusLayer.render&&e.focusLayer.render(e.panels)})).on(\"dragend\",(function(t){var e=t.parent;t.x=t.xScale(t.xIndex),t.canvasX=t.x*t.model.canvasPixelRatio,D(N,e),r.select(this).attr(\"transform\",(function(t){return l(t.x,0)})),e.contextLayer&&e.contextLayer.render(e.panels,!1,!A(e)),e.focusLayer&&e.focusLayer.render(e.panels),e.pickLayer&&e.pickLayer.render(e.panels,!0),T.linePickActive(!0),i&&i.axesMoved&&i.axesMoved(e.key,e.dimensions.map((function(t){return t.crossfilterDimensionIndex})))}))),N.exit().remove();var B=N.selectAll(\".\"+y.cn.axisOverlays).data(p,f);B.enter().append(\"g\").classed(y.cn.axisOverlays,!0),B.selectAll(\".\"+y.cn.axis).remove();var Y=B.selectAll(\".\"+y.cn.axis).data(p,f);Y.enter().append(\"g\").classed(y.cn.axis,!0),Y.each((function(t){var e=t.model.height/t.model.tickDistance,n=t.domainScale,i=n.domain();r.select(this).call(r.svg.axis().orient(\"left\").tickSize(4).outerTickSize(2).ticks(e,t.tickFormat).tickValues(t.ordinal?i:null).tickFormat((function(e){return g.isOrdinal(t)?e:I(t.model.dimensions[t.visibleIndex],e)})).scale(n)),u.font(Y.selectAll(\"text\"),t.model.tickFont)})),Y.selectAll(\".domain, .tick>line\").attr(\"fill\",\"none\").attr(\"stroke\",\"black\").attr(\"stroke-opacity\",.25).attr(\"stroke-width\",\"1px\"),Y.selectAll(\"text\").style(\"text-shadow\",\"1px 1px 1px #fff, -1px -1px 1px #fff, 1px -1px 1px #fff, -1px 1px 1px #fff\").style(\"cursor\",\"default\");var H=B.selectAll(\".\"+y.cn.axisHeading).data(p,f);H.enter().append(\"g\").classed(y.cn.axisHeading,!0);var V=H.selectAll(\".\"+y.cn.axisTitle).data(p,f);V.enter().append(\"text\").classed(y.cn.axisTitle,!0).attr(\"text-anchor\",\"middle\").style(\"cursor\",\"ew-resize\").style(\"pointer-events\",\"auto\"),V.text((function(t){return t.label})).each((function(e){var n=r.select(this);u.font(n,e.model.labelFont),c.convertToTspans(n,t)})).attr(\"transform\",(function(t){var e=O(t.model.labelAngle,t.model.labelSide),n=y.axisTitleOffset;return(e.dir>0?\"\":l(0,2*n+t.model.height))+s(e.degrees)+l(-n*e.dx,-n*e.dy)})).attr(\"text-anchor\",(function(t){var e=O(t.model.labelAngle,t.model.labelSide);return 2*Math.abs(e.dx)>Math.abs(e.dy)?e.dir*e.dx<0?\"start\":\"end\":\"middle\"}));var U=B.selectAll(\".\"+y.cn.axisExtent).data(p,f);U.enter().append(\"g\").classed(y.cn.axisExtent,!0);var W=U.selectAll(\".\"+y.cn.axisExtentTop).data(p,f);W.enter().append(\"g\").classed(y.cn.axisExtentTop,!0),W.attr(\"transform\",l(0,-y.axisExtentOffset));var q=W.selectAll(\".\"+y.cn.axisExtentTopText).data(p,f);q.enter().append(\"text\").classed(y.cn.axisExtentTopText,!0).call(E),q.text((function(t){return P(t,!0)})).each((function(t){u.font(r.select(this),t.model.rangeFont)}));var G=U.selectAll(\".\"+y.cn.axisExtentBottom).data(p,f);G.enter().append(\"g\").classed(y.cn.axisExtentBottom,!0),G.attr(\"transform\",(function(t){return l(0,t.model.height+y.axisExtentOffset)}));var X=G.selectAll(\".\"+y.cn.axisExtentBottomText).data(p,f);X.enter().append(\"text\").classed(y.cn.axisExtentBottomText,!0).attr(\"dy\",\"0.75em\").call(E),X.text((function(t){return P(t,!1)})).each((function(t){u.font(r.select(this),t.model.rangeFont)})),v.ensureAxisBrush(B)}},{\"../../components/colorscale\":655,\"../../components/drawing\":665,\"../../lib\":778,\"../../lib/gup\":775,\"../../lib/svg_text_utils\":803,\"../../plots/cartesian/axes\":828,\"./axisbrush\":1150,\"./constants\":1153,\"./helpers\":1155,\"./lines\":1157,\"color-rgba\":127,d3:169}],1160:[function(t,e,n){\"use strict\";var r=t(\"./parcoords\"),i=t(\"../../lib/prepare_regl\"),a=t(\"./helpers\").isVisible;function o(t,e,n){var r=e.indexOf(n),i=t.indexOf(r);return-1===i&&(i+=e.length),i}e.exports=function(t,e){var n=t._fullLayout;if(i(t)){var s={},l={},c={},u={},h=n._size;e.forEach((function(e,n){var r=e[0].trace;c[n]=r.index;var i=u[n]=r._fullInput.index;s[n]=t.data[i].dimensions,l[n]=t.data[i].dimensions.slice()})),r(t,e,{width:h.w,height:h.h,margin:{t:h.t,r:h.r,b:h.b,l:h.l}},{filterChanged:function(e,r,i){var a=l[e][r],o=i.map((function(t){return t.slice()})),s=\"dimensions[\"+r+\"].constraintrange\",h=n._tracePreGUI[t._fullData[c[e]]._fullInput.uid];void 0===h[s]&&(h[s]=a.constraintrange||null);var d=t._fullData[c[e]].dimensions[r];o.length?(1===o.length&&(o=o[0]),a.constraintrange=o,d.constraintrange=o.slice(),o=[o]):(delete a.constraintrange,delete d.constraintrange,o=null);var f={};f[s]=o,t.emit(\"plotly_restyle\",[f,[u[e]]])},hover:function(e){t.emit(\"plotly_hover\",e)},unhover:function(e){t.emit(\"plotly_unhover\",e)},axesMoved:function(e,n){var r=function(t,e){return function(n,r){return o(t,e,n)-o(t,e,r)}}(n,l[e].filter(a));s[e].sort(r),l[e].filter((function(t){return!a(t)})).sort((function(t){return l[e].indexOf(t)})).forEach((function(t){s[e].splice(s[e].indexOf(t),1),s[e].splice(l[e].indexOf(t),0,t)})),t.emit(\"plotly_restyle\",[{dimensions:[s[e]]},[u[e]]])}})}}},{\"../../lib/prepare_regl\":791,\"./helpers\":1155,\"./parcoords\":1159}],1161:[function(t,e,n){\"use strict\";var r=t(\"../../plots/attributes\"),i=t(\"../../plots/domain\").attributes,a=t(\"../../plots/font_attributes\"),o=t(\"../../components/color/attributes\"),s=t(\"../../plots/template_attributes\").hovertemplateAttrs,l=t(\"../../plots/template_attributes\").texttemplateAttrs,c=t(\"../../lib/extend\").extendFlat,u=a({editType:\"plot\",arrayOk:!0,colorEditType:\"plot\"});e.exports={labels:{valType:\"data_array\",editType:\"calc\"},label0:{valType:\"number\",dflt:0,editType:\"calc\"},dlabel:{valType:\"number\",dflt:1,editType:\"calc\"},values:{valType:\"data_array\",editType:\"calc\"},marker:{colors:{valType:\"data_array\",editType:\"calc\"},line:{color:{valType:\"color\",dflt:o.defaultLine,arrayOk:!0,editType:\"style\"},width:{valType:\"number\",min:0,dflt:0,arrayOk:!0,editType:\"style\"},editType:\"calc\"},editType:\"calc\"},text:{valType:\"data_array\",editType:\"plot\"},hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"style\"},scalegroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},textinfo:{valType:\"flaglist\",flags:[\"label\",\"text\",\"value\",\"percent\"],extras:[\"none\"],editType:\"calc\"},hoverinfo:c({},r.hoverinfo,{flags:[\"label\",\"text\",\"value\",\"percent\",\"name\"]}),hovertemplate:s({},{keys:[\"label\",\"color\",\"value\",\"percent\",\"text\"]}),texttemplate:l({editType:\"plot\"},{keys:[\"label\",\"color\",\"value\",\"percent\",\"text\"]}),textposition:{valType:\"enumerated\",values:[\"inside\",\"outside\",\"auto\",\"none\"],dflt:\"auto\",arrayOk:!0,editType:\"plot\"},textfont:c({},u,{}),insidetextorientation:{valType:\"enumerated\",values:[\"horizontal\",\"radial\",\"tangential\",\"auto\"],dflt:\"auto\",editType:\"plot\"},insidetextfont:c({},u,{}),outsidetextfont:c({},u,{}),automargin:{valType:\"boolean\",dflt:!1,editType:\"plot\"},title:{text:{valType:\"string\",dflt:\"\",editType:\"plot\"},font:c({},u,{}),position:{valType:\"enumerated\",values:[\"top left\",\"top center\",\"top right\",\"middle center\",\"bottom left\",\"bottom center\",\"bottom right\"],editType:\"plot\"},editType:\"plot\"},domain:i({name:\"pie\",trace:!0,editType:\"calc\"}),hole:{valType:\"number\",min:0,max:1,dflt:0,editType:\"calc\"},sort:{valType:\"boolean\",dflt:!0,editType:\"calc\"},direction:{valType:\"enumerated\",values:[\"clockwise\",\"counterclockwise\"],dflt:\"counterclockwise\",editType:\"calc\"},rotation:{valType:\"number\",min:-360,max:360,dflt:0,editType:\"calc\"},pull:{valType:\"number\",min:0,max:1,dflt:0,arrayOk:!0,editType:\"calc\"},_deprecated:{title:{valType:\"string\",dflt:\"\",editType:\"calc\"},titlefont:c({},u,{}),titleposition:{valType:\"enumerated\",values:[\"top left\",\"top center\",\"top right\",\"middle center\",\"bottom left\",\"bottom center\",\"bottom right\"],editType:\"calc\"}}}},{\"../../components/color/attributes\":642,\"../../lib/extend\":768,\"../../plots/attributes\":824,\"../../plots/domain\":855,\"../../plots/font_attributes\":856,\"../../plots/template_attributes\":906}],1162:[function(t,e,n){\"use strict\";var r=t(\"../../plots/plots\");n.name=\"pie\",n.plot=function(t,e,i,a){r.plotBasePlot(n.name,t,e,i,a)},n.clean=function(t,e,i,a){r.cleanBasePlot(n.name,t,e,i,a)}},{\"../../plots/plots\":891}],1163:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"tinycolor2\"),a=t(\"../../components/color\"),o={};function s(t){return function(e,n){return!!e&&!!(e=i(e)).isValid()&&(e=a.addOpacity(e,e.getAlpha()),t[n]||(t[n]=e),e)}}function l(t,e){var n,r=JSON.stringify(t),a=e[r];if(!a){for(a=t.slice(),n=0;n<t.length;n++)a.push(i(t[n]).lighten(20).toHexString());for(n=0;n<t.length;n++)a.push(i(t[n]).darken(20).toHexString());e[r]=a}return a}e.exports={calc:function(t,e){var n,i,a=[],o=t._fullLayout,l=o.hiddenlabels||[],c=e.labels,u=e.marker.colors||[],h=e.values,d=e._length,f=e._hasValues&&d;if(e.dlabel)for(c=new Array(d),n=0;n<d;n++)c[n]=String(e.label0+n*e.dlabel);var p={},m=s(o[\"_\"+e.type+\"colormap\"]),g=0,y=!1;for(n=0;n<d;n++){var v,_,b;if(f){if(!r(v=h[n]))continue;if((v=+v)<0)continue}else v=1;void 0!==(_=c[n])&&\"\"!==_||(_=n);var x=p[_=String(_)];void 0===x?(p[_]=a.length,(b=-1!==l.indexOf(_))||(g+=v),a.push({v:v,label:_,color:m(u[n],_),i:n,pts:[n],hidden:b})):(y=!0,(i=a[x]).v+=v,i.pts.push(n),i.hidden||(g+=v),!1===i.color&&u[n]&&(i.color=m(u[n],_)))}return(\"funnelarea\"===e.type?y:e.sort)&&a.sort((function(t,e){return e.v-t.v})),a[0]&&(a[0].vTotal=g),a},crossTraceCalc:function(t,e){var n=(e||{}).type;n||(n=\"pie\");var r=t._fullLayout,i=t.calcdata,a=r[n+\"colorway\"],s=r[\"_\"+n+\"colormap\"];r[\"extend\"+n+\"colors\"]&&(a=l(a,o));for(var c=0,u=0;u<i.length;u++){var h=i[u];if(h[0].trace.type===n)for(var d=0;d<h.length;d++){var f=h[d];!1===f.color&&(s[f.label]?f.color=s[f.label]:(s[f.label]=f.color=a[c%a.length],c++))}}},makePullColorFn:s,generateExtendedColors:l}},{\"../../components/color\":643,\"fast-isnumeric\":241,tinycolor2:576}],1164:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../lib\"),a=t(\"./attributes\"),o=t(\"../../plots/domain\").defaults,s=t(\"../bar/defaults\").handleText;function l(t,e){var n=Array.isArray(t),a=i.isArrayOrTypedArray(e),o=Math.min(n?t.length:1/0,a?e.length:1/0);if(isFinite(o)||(o=0),o&&a){for(var s,l=0;l<o;l++){var c=e[l];if(r(c)&&c>0){s=!0;break}}s||(o=0)}return{hasLabels:n,hasValues:a,len:o}}e.exports={handleLabelsAndValues:l,supplyDefaults:function(t,e,n,r){function c(n,r){return i.coerce(t,e,a,n,r)}var u=l(c(\"labels\"),c(\"values\")),h=u.len;if(e._hasLabels=u.hasLabels,e._hasValues=u.hasValues,!e._hasLabels&&e._hasValues&&(c(\"label0\"),c(\"dlabel\")),h){e._length=h,c(\"marker.line.width\")&&c(\"marker.line.color\"),c(\"marker.colors\"),c(\"scalegroup\");var d,f=c(\"text\"),p=c(\"texttemplate\");if(p||(d=c(\"textinfo\",Array.isArray(f)?\"text+percent\":\"percent\")),c(\"hovertext\"),c(\"hovertemplate\"),p||d&&\"none\"!==d){var m=c(\"textposition\");s(t,e,r,c,m,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),(Array.isArray(m)||\"auto\"===m||\"outside\"===m)&&c(\"automargin\"),(\"inside\"===m||\"auto\"===m||Array.isArray(m))&&c(\"insidetextorientation\")}o(e,r,c);var g=c(\"hole\");if(c(\"title.text\")){var y=c(\"title.position\",g?\"middle center\":\"top center\");g||\"middle center\"!==y||(e.title.position=\"top center\"),i.coerceFont(c,\"title.font\",r.font)}c(\"sort\"),c(\"direction\"),c(\"rotation\"),c(\"pull\")}else e.visible=!1}}},{\"../../lib\":778,\"../../plots/domain\":855,\"../bar/defaults\":925,\"./attributes\":1161,\"fast-isnumeric\":241}],1165:[function(t,e,n){\"use strict\";var r=t(\"../../components/fx/helpers\").appendArrayMultiPointValues;e.exports=function(t,e){var n={curveNumber:e.index,pointNumbers:t.pts,data:e._input,fullData:e,label:t.label,color:t.color,value:t.v,percent:t.percent,text:t.text,v:t.v};return 1===t.pts.length&&(n.pointNumber=n.i=t.pts[0]),r(n,e,t.pts),\"funnelarea\"===e.type&&(delete n.v,delete n.i),n}},{\"../../components/fx/helpers\":679}],1166:[function(t,e,n){\"use strict\";var r=t(\"../../lib\");function i(t){return-1!==t.indexOf(\"e\")?t.replace(/[.]?0+e/,\"e\"):-1!==t.indexOf(\".\")?t.replace(/[.]?0+$/,\"\"):t}n.formatPiePercent=function(t,e){var n=i((100*t).toPrecision(3));return r.numSeparate(n,e)+\"%\"},n.formatPieValue=function(t,e){var n=i(t.toPrecision(10));return r.numSeparate(n,e)},n.getFirstFilled=function(t,e){if(Array.isArray(t))for(var n=0;n<e.length;n++){var r=t[e[n]];if(r||0===r||\"\"===r)return r}},n.castOption=function(t,e){return Array.isArray(t)?n.getFirstFilled(t,e):t||void 0},n.getRotationAngle=function(t){return(\"auto\"===t?0:t)*Math.PI/180}},{\"../../lib\":778}],1167:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\").supplyDefaults,supplyLayoutDefaults:t(\"./layout_defaults\"),layoutAttributes:t(\"./layout_attributes\"),calc:t(\"./calc\").calc,crossTraceCalc:t(\"./calc\").crossTraceCalc,plot:t(\"./plot\").plot,style:t(\"./style\"),styleOne:t(\"./style_one\"),moduleType:\"trace\",name:\"pie\",basePlotModule:t(\"./base_plot\"),categories:[\"pie-like\",\"pie\",\"showLegend\"],meta:{}}},{\"./attributes\":1161,\"./base_plot\":1162,\"./calc\":1163,\"./defaults\":1164,\"./layout_attributes\":1168,\"./layout_defaults\":1169,\"./plot\":1170,\"./style\":1171,\"./style_one\":1172}],1168:[function(t,e,n){\"use strict\";e.exports={hiddenlabels:{valType:\"data_array\",editType:\"calc\"},piecolorway:{valType:\"colorlist\",editType:\"calc\"},extendpiecolors:{valType:\"boolean\",dflt:!0,editType:\"calc\"}}},{}],1169:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./layout_attributes\");e.exports=function(t,e){function n(n,a){return r.coerce(t,e,i,n,a)}n(\"hiddenlabels\"),n(\"piecolorway\",e.colorway),n(\"extendpiecolors\")}},{\"../../lib\":778,\"./layout_attributes\":1168}],1170:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../plots/plots\"),a=t(\"../../components/fx\"),o=t(\"../../components/color\"),s=t(\"../../components/drawing\"),l=t(\"../../lib\"),c=l.strScale,u=l.strTranslate,h=t(\"../../lib/svg_text_utils\"),d=t(\"../bar/uniform_text\"),f=d.recordMinTextSize,p=d.clearMinTextSize,m=t(\"../bar/constants\").TEXTPAD,g=t(\"./helpers\"),y=t(\"./event_data\"),v=t(\"../../lib\").isValidTextValue;function _(t,e,n){var i=n[0],o=i.trace,s=i.cx,c=i.cy;\"_hasHoverLabel\"in o||(o._hasHoverLabel=!1),\"_hasHoverEvent\"in o||(o._hasHoverEvent=!1),t.on(\"mouseover\",(function(t){var n=e._fullLayout,u=e._fullData[o.index];if(!e._dragging&&!1!==n.hovermode){var h=u.hoverinfo;if(Array.isArray(h)&&(h=a.castHoverinfo({hoverinfo:[g.castOption(h,t.pts)],_module:o._module},n,0)),\"all\"===h&&(h=\"label+text+value+percent+name\"),u.hovertemplate||\"none\"!==h&&\"skip\"!==h&&h){var d=t.rInscribed||0,f=s+t.pxmid[0]*(1-d),p=c+t.pxmid[1]*(1-d),m=n.separators,v=[];if(h&&-1!==h.indexOf(\"label\")&&v.push(t.label),t.text=g.castOption(u.hovertext||u.text,t.pts),h&&-1!==h.indexOf(\"text\")){var _=t.text;l.isValidTextValue(_)&&v.push(_)}t.value=t.v,t.valueLabel=g.formatPieValue(t.v,m),h&&-1!==h.indexOf(\"value\")&&v.push(t.valueLabel),t.percent=t.v/i.vTotal,t.percentLabel=g.formatPiePercent(t.percent,m),h&&-1!==h.indexOf(\"percent\")&&v.push(t.percentLabel);var b=u.hoverlabel,x=b.font;a.loneHover({trace:o,x0:f-d*i.r,x1:f+d*i.r,y:p,text:v.join(\"<br>\"),name:u.hovertemplate||-1!==h.indexOf(\"name\")?u.name:void 0,idealAlign:t.pxmid[0]<0?\"left\":\"right\",color:g.castOption(b.bgcolor,t.pts)||t.color,borderColor:g.castOption(b.bordercolor,t.pts),fontFamily:g.castOption(x.family,t.pts),fontSize:g.castOption(x.size,t.pts),fontColor:g.castOption(x.color,t.pts),nameLength:g.castOption(b.namelength,t.pts),textAlign:g.castOption(b.align,t.pts),hovertemplate:g.castOption(u.hovertemplate,t.pts),hovertemplateLabels:t,eventData:[y(t,u)]},{container:n._hoverlayer.node(),outerContainer:n._paper.node(),gd:e}),o._hasHoverLabel=!0}o._hasHoverEvent=!0,e.emit(\"plotly_hover\",{points:[y(t,u)],event:r.event})}})),t.on(\"mouseout\",(function(t){var n=e._fullLayout,i=e._fullData[o.index],s=r.select(this).datum();o._hasHoverEvent&&(t.originalEvent=r.event,e.emit(\"plotly_unhover\",{points:[y(s,i)],event:r.event}),o._hasHoverEvent=!1),o._hasHoverLabel&&(a.loneUnhover(n._hoverlayer.node()),o._hasHoverLabel=!1)})),t.on(\"click\",(function(t){e._dragging||!1===e._fullLayout.hovermode||(e._hoverdata=[y(t,e._fullData[o.index])],a.click(e,r.event))}))}function b(t,e,n){var r=g.castOption(t.insidetextfont.color,e.pts);!r&&t._input.textfont&&(r=g.castOption(t._input.textfont.color,e.pts));var i=g.castOption(t.insidetextfont.family,e.pts)||g.castOption(t.textfont.family,e.pts)||n.family,a=g.castOption(t.insidetextfont.size,e.pts)||g.castOption(t.textfont.size,e.pts)||n.size;return{color:r||o.contrast(e.color),family:i,size:a}}function x(t,e){for(var n,r,i=0;i<t.length;i++)if((r=(n=t[i][0]).trace).title.text){var a=r.title.text;r._meta&&(a=l.templateString(a,r._meta));var o=s.tester.append(\"text\").attr(\"data-notex\",1).text(a).call(s.font,r.title.font).call(h.convertToTspans,e),c=s.bBox(o.node(),!0);n.titleBox={width:c.width,height:c.height},o.remove()}}function w(t,e,n){var r=n.r||e.rpx1,i=e.rInscribed;if(e.startangle===e.stopangle)return{rCenter:1-i,scale:0,rotate:0,textPosAngle:0};var a,o=e.ring,s=1===o&&Math.abs(e.startangle-e.stopangle)===2*Math.PI,l=e.halfangle,c=e.midangle,u=n.trace.insidetextorientation,h=\"horizontal\"===u,d=\"tangential\"===u,f=\"radial\"===u,p=\"auto\"===u,m=[];if(!p){var g,y=function(n,i){if(function(t,e){var n=t.startangle,r=t.stopangle;return n>e&&e>r||n<e&&e<r}(e,n)){var s=Math.abs(n-e.startangle),l=Math.abs(n-e.stopangle),c=s<l?s:l;(a=\"tan\"===i?M(t,r,o,c,0):k(t,r,o,c,Math.PI/2)).textPosAngle=n,m.push(a)}};if(h||d){for(g=4;g>=-4;g-=2)y(Math.PI*g,\"tan\");for(g=4;g>=-4;g-=2)y(Math.PI*(g+1),\"tan\")}if(h||f){for(g=4;g>=-4;g-=2)y(Math.PI*(g+1.5),\"rad\");for(g=4;g>=-4;g-=2)y(Math.PI*(g+.5),\"rad\")}}if(s||p||h){var v=Math.sqrt(t.width*t.width+t.height*t.height);if((a={scale:i*r*2/v,rCenter:1-i,rotate:0}).textPosAngle=(e.startangle+e.stopangle)/2,a.scale>=1)return a;m.push(a)}(p||f)&&((a=k(t,r,o,l,c)).textPosAngle=(e.startangle+e.stopangle)/2,m.push(a)),(p||d)&&((a=M(t,r,o,l,c)).textPosAngle=(e.startangle+e.stopangle)/2,m.push(a));for(var _=0,b=0,x=0;x<m.length;x++){var w=m[x].scale;if(b<w&&(b=w,_=x),!p&&b>=1)break}return m[_]}function k(t,e,n,r,i){e=Math.max(0,e-2*m);var a=t.width/t.height,o=A(a,r,e,n);return{scale:2*o/t.height,rCenter:T(a,o/e),rotate:S(i)}}function M(t,e,n,r,i){e=Math.max(0,e-2*m);var a=t.height/t.width,o=A(a,r,e,n);return{scale:2*o/t.width,rCenter:T(a,o/e),rotate:S(i+Math.PI/2)}}function T(t,e){return Math.cos(e)-t*e}function S(t){return(180/Math.PI*t+720)%180-90}function A(t,e,n,r){var i=t+1/(2*Math.tan(e));return n*Math.min(1/(Math.sqrt(i*i+.5)+i),r/(Math.sqrt(t*t+r/2)+t))}function L(t,e){return t.v!==e.vTotal||e.trace.hole?Math.min(1/(1+1/Math.sin(t.halfangle)),t.ring/2):1}function C(t,e){var n=e.pxmid[0],r=e.pxmid[1],i=t.width/2,a=t.height/2;return n<0&&(i*=-1),r<0&&(a*=-1),{scale:1,rCenter:1,rotate:0,x:i+Math.abs(a)*(i>0?1:-1)/2,y:a/(1+n*n/(r*r)),outside:!0}}function E(t,e){var n,r,i,a=t.trace,o={x:t.cx,y:t.cy},s={tx:0,ty:0};s.ty+=a.title.font.size,n=D(a),-1!==a.title.position.indexOf(\"top\")?(o.y-=(1+n)*t.r,s.ty-=t.titleBox.height):-1!==a.title.position.indexOf(\"bottom\")&&(o.y+=(1+n)*t.r);var l,c=t.r/(void 0===(l=t.trace.aspectratio)?1:l),u=e.w*(a.domain.x[1]-a.domain.x[0])/2;return-1!==a.title.position.indexOf(\"left\")?(u+=c,o.x-=(1+n)*c,s.tx+=t.titleBox.width/2):-1!==a.title.position.indexOf(\"center\")?u*=2:-1!==a.title.position.indexOf(\"right\")&&(u+=c,o.x+=(1+n)*c,s.tx-=t.titleBox.width/2),r=u/t.titleBox.width,i=O(t,e)/t.titleBox.height,{x:o.x,y:o.y,scale:Math.min(r,i),tx:s.tx,ty:s.ty}}function O(t,e){var n=t.trace;return Math.min(t.titleBox.height,e.h*(n.domain.y[1]-n.domain.y[0])/2)}function D(t){var e,n=t.pull;if(!n)return 0;if(Array.isArray(n))for(n=0,e=0;e<t.pull.length;e++)t.pull[e]>n&&(n=t.pull[e]);return n}function I(t,e){for(var n=[],r=0;r<t.length;r++){var i=t[r][0],a=i.trace,o=a.domain,s=e.w*(o.x[1]-o.x[0]),l=e.h*(o.y[1]-o.y[0]);a.title.text&&\"middle center\"!==a.title.position&&(l-=O(i,e));var c=l/2;\"funnelarea\"!==a.type||a.scalegroup||(c/=a.aspectratio),i.r=Math.min(s/2,c)/(1+D(a)),i.cx=e.l+e.w*(a.domain.x[1]+a.domain.x[0])/2,i.cy=e.t+e.h*(1-a.domain.y[0])-l/2,a.title.text&&-1!==a.title.position.indexOf(\"bottom\")&&(i.cy-=O(i,e)),a.scalegroup&&-1===n.indexOf(a.scalegroup)&&n.push(a.scalegroup)}!function(t,e){for(var n,r,i,a=0;a<e.length;a++){var o=1/0,s=e[a];for(r=0;r<t.length;r++)if((i=(n=t[r][0]).trace).scalegroup===s){var l;if(\"pie\"===i.type)l=n.r*n.r;else if(\"funnelarea\"===i.type){var c,u;i.aspectratio>1?u=(c=n.r)/i.aspectratio:c=(u=n.r)*i.aspectratio,l=(c*=(1+i.baseratio)/2)*u}o=Math.min(o,l/n.vTotal)}for(r=0;r<t.length;r++)if((i=(n=t[r][0]).trace).scalegroup===s){var h=o*n.vTotal;\"funnelarea\"===i.type&&(h/=(1+i.baseratio)/2,h/=i.aspectratio),n.r=Math.sqrt(h)}}}(t,n)}function P(t,e){return[t*Math.sin(e),-t*Math.cos(e)]}function R(t,e,n){var r=t._fullLayout,i=n.trace,a=i.texttemplate,o=i.textinfo;if(!a&&o&&\"none\"!==o){var s,c=o.split(\"+\"),u=function(t){return-1!==c.indexOf(t)},h=u(\"label\"),d=u(\"text\"),f=u(\"value\"),p=u(\"percent\"),m=r.separators;if(s=h?[e.label]:[],d){var y=g.getFirstFilled(i.text,e.pts);v(y)&&s.push(y)}f&&s.push(g.formatPieValue(e.v,m)),p&&s.push(g.formatPiePercent(e.v/n.vTotal,m)),e.text=s.join(\"<br>\")}if(a){var _=l.castOption(i,e.i,\"texttemplate\");if(_){var b=function(t){return{label:t.label,value:t.v,valueLabel:g.formatPieValue(t.v,r.separators),percent:t.v/n.vTotal,percentLabel:g.formatPiePercent(t.v/n.vTotal,r.separators),color:t.color,text:t.text,customdata:l.castOption(i,t.i,\"customdata\")}}(e),x=g.getFirstFilled(i.text,e.pts);(v(x)||\"\"===x)&&(b.text=x),e.text=l.texttemplateString(_,b,t._fullLayout._d3locale,b,i._meta||{})}else e.text=\"\"}}function z(t,e){var n=t.rotate*Math.PI/180,r=Math.cos(n),i=Math.sin(n),a=(e.left+e.right)/2,o=(e.top+e.bottom)/2;t.textX=a*r-o*i,t.textY=a*i+o*r,t.noCenter=!0}e.exports={plot:function(t,e){var n=t._fullLayout,a=n._size;p(\"pie\",n),x(e,t),I(e,a);var d=l.makeTraceGroups(n._pielayer,e,\"trace\").each((function(e){var d=r.select(this),p=e[0],m=p.trace;(function(t){var e,n,r,i=t[0],a=i.r,o=i.trace,s=g.getRotationAngle(o.rotation),l=2*Math.PI/i.vTotal,c=\"px0\",u=\"px1\";if(\"counterclockwise\"===o.direction){for(e=0;e<t.length&&t[e].hidden;e++);if(e===t.length)return;s+=l*t[e].v,l*=-1,c=\"px1\",u=\"px0\"}for(r=P(a,s),e=0;e<t.length;e++)(n=t[e]).hidden||(n[c]=r,n.startangle=s,n.pxmid=P(a,s+=l*n.v/2),n.midangle=s,r=P(a,s+=l*n.v/2),n.stopangle=s,n[u]=r,n.largeArc=n.v>i.vTotal/2?1:0,n.halfangle=Math.PI*Math.min(n.v/i.vTotal,.5),n.ring=1-o.hole,n.rInscribed=L(n,i))})(e),d.attr(\"stroke-linejoin\",\"round\"),d.each((function(){var y=r.select(this).selectAll(\"g.slice\").data(e);y.enter().append(\"g\").classed(\"slice\",!0),y.exit().remove();var v=[[[],[]],[[],[]]],x=!1;y.each((function(i,a){if(i.hidden)r.select(this).selectAll(\"path,g\").remove();else{i.pointNumber=i.i,i.curveNumber=m.index,v[i.pxmid[1]<0?0:1][i.pxmid[0]<0?0:1].push(i);var o=p.cx,c=p.cy,u=r.select(this),d=u.selectAll(\"path.surface\").data([i]);if(d.enter().append(\"path\").classed(\"surface\",!0).style({\"pointer-events\":\"all\"}),u.call(_,t,e),m.pull){var y=+g.castOption(m.pull,i.pts)||0;y>0&&(o+=y*i.pxmid[0],c+=y*i.pxmid[1])}i.cxFinal=o,i.cyFinal=c;var k=m.hole;if(i.v===p.vTotal){var M=\"M\"+(o+i.px0[0])+\",\"+(c+i.px0[1])+E(i.px0,i.pxmid,!0,1)+E(i.pxmid,i.px0,!0,1)+\"Z\";d.attr(\"d\",k?\"M\"+(o+k*i.px0[0])+\",\"+(c+k*i.px0[1])+E(i.px0,i.pxmid,!1,k)+E(i.pxmid,i.px0,!1,k)+\"Z\"+M:M)}else{var T=E(i.px0,i.px1,!0,1);if(k){var S=1-k;d.attr(\"d\",\"M\"+(o+k*i.px1[0])+\",\"+(c+k*i.px1[1])+E(i.px1,i.px0,!1,k)+\"l\"+S*i.px0[0]+\",\"+S*i.px0[1]+T+\"Z\")}else d.attr(\"d\",\"M\"+o+\",\"+c+\"l\"+i.px0[0]+\",\"+i.px0[1]+T+\"Z\")}R(t,i,p);var A=g.castOption(m.textposition,i.pts),L=u.selectAll(\"g.slicetext\").data(i.text&&\"none\"!==A?[0]:[]);L.enter().append(\"g\").classed(\"slicetext\",!0),L.exit().remove(),L.each((function(){var u=l.ensureSingle(r.select(this),\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),d=l.ensureUniformFontSize(t,\"outside\"===A?function(t,e,n){return{color:g.castOption(t.outsidetextfont.color,e.pts)||g.castOption(t.textfont.color,e.pts)||n.color,family:g.castOption(t.outsidetextfont.family,e.pts)||g.castOption(t.textfont.family,e.pts)||n.family,size:g.castOption(t.outsidetextfont.size,e.pts)||g.castOption(t.textfont.size,e.pts)||n.size}}(m,i,n.font):b(m,i,n.font));u.text(i.text).attr({class:\"slicetext\",transform:\"\",\"text-anchor\":\"middle\"}).call(s.font,d).call(h.convertToTspans,t);var y,v=s.bBox(u.node());if(\"outside\"===A)y=C(v,i);else if(y=w(v,i,p),\"auto\"===A&&y.scale<1){var _=l.ensureUniformFontSize(t,m.outsidetextfont);u.call(s.font,_),y=C(v=s.bBox(u.node()),i)}var k=y.textPosAngle,M=void 0===k?i.pxmid:P(p.r,k);if(y.targetX=o+M[0]*y.rCenter+(y.x||0),y.targetY=c+M[1]*y.rCenter+(y.y||0),z(y,v),y.outside){var T=y.targetY;i.yLabelMin=T-v.height/2,i.yLabelMid=T,i.yLabelMax=T+v.height/2,i.labelExtraX=0,i.labelExtraY=0,x=!0}y.fontSize=d.size,f(m.type,y,n),e[a].transform=y,u.attr(\"transform\",l.getTextTransform(y))}))}function E(t,e,n,r){return\"a\"+r*p.r+\",\"+r*p.r+\" 0 \"+i.largeArc+(n?\" 1 \":\" 0 \")+r*(e[0]-t[0])+\",\"+r*(e[1]-t[1])}}));var k=r.select(this).selectAll(\"g.titletext\").data(m.title.text?[0]:[]);if(k.enter().append(\"g\").classed(\"titletext\",!0),k.exit().remove(),k.each((function(){var e,n=l.ensureSingle(r.select(this),\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),i=m.title.text;m._meta&&(i=l.templateString(i,m._meta)),n.text(i).attr({class:\"titletext\",transform:\"\",\"text-anchor\":\"middle\"}).call(s.font,m.title.font).call(h.convertToTspans,t),e=\"middle center\"===m.title.position?function(t){var e=Math.sqrt(t.titleBox.width*t.titleBox.width+t.titleBox.height*t.titleBox.height);return{x:t.cx,y:t.cy,scale:t.trace.hole*t.r*2/e,tx:0,ty:-t.titleBox.height/2+t.trace.title.font.size}}(p):E(p,a),n.attr(\"transform\",u(e.x,e.y)+c(Math.min(1,e.scale))+u(e.tx,e.ty))})),x&&function(t,e){var n,r,i,a,o,s,l,c,u,h,d,f,p;function m(t,e){return t.pxmid[1]-e.pxmid[1]}function y(t,e){return e.pxmid[1]-t.pxmid[1]}function v(t,n){n||(n={});var i,c,u,d,f=n.labelExtraY+(r?n.yLabelMax:n.yLabelMin),p=r?t.yLabelMin:t.yLabelMax,m=r?t.yLabelMax:t.yLabelMin,y=t.cyFinal+o(t.px0[1],t.px1[1]),v=f-p;if(v*l>0&&(t.labelExtraY=v),Array.isArray(e.pull))for(c=0;c<h.length;c++)(u=h[c])===t||(g.castOption(e.pull,t.pts)||0)>=(g.castOption(e.pull,u.pts)||0)||((t.pxmid[1]-u.pxmid[1])*l>0?(v=u.cyFinal+o(u.px0[1],u.px1[1])-p-t.labelExtraY)*l>0&&(t.labelExtraY+=v):(m+t.labelExtraY-y)*l>0&&(i=3*s*Math.abs(c-h.indexOf(t)),(d=u.cxFinal+a(u.px0[0],u.px1[0])+i-(t.cxFinal+t.pxmid[0])-t.labelExtraX)*s>0&&(t.labelExtraX+=d)))}for(r=0;r<2;r++)for(i=r?m:y,o=r?Math.max:Math.min,l=r?1:-1,n=0;n<2;n++){for(a=n?Math.max:Math.min,s=n?1:-1,(c=t[r][n]).sort(i),h=(u=t[1-r][n]).concat(c),f=[],d=0;d<c.length;d++)void 0!==c[d].yLabelMid&&f.push(c[d]);for(p=!1,d=0;r&&d<u.length;d++)if(void 0!==u[d].yLabelMid){p=u[d];break}for(d=0;d<f.length;d++){var _=d&&f[d-1];p&&!d&&(_=p),v(f[d],_)}}}(v,m),function(t,e){t.each((function(t){var n=r.select(this);if(t.labelExtraX||t.labelExtraY){var i=n.select(\"g.slicetext text\");t.transform.targetX+=t.labelExtraX,t.transform.targetY+=t.labelExtraY,i.attr(\"transform\",l.getTextTransform(t.transform));var a=t.cxFinal+t.pxmid[0],s=\"M\"+a+\",\"+(t.cyFinal+t.pxmid[1]),c=(t.yLabelMax-t.yLabelMin)*(t.pxmid[0]<0?-1:1)/4;if(t.labelExtraX){var u=t.labelExtraX*t.pxmid[1]/t.pxmid[0],h=t.yLabelMid+t.labelExtraY-(t.cyFinal+t.pxmid[1]);Math.abs(u)>Math.abs(h)?s+=\"l\"+h*t.pxmid[0]/t.pxmid[1]+\",\"+h+\"H\"+(a+t.labelExtraX+c):s+=\"l\"+t.labelExtraX+\",\"+u+\"v\"+(h-u)+\"h\"+c}else s+=\"V\"+(t.yLabelMid+t.labelExtraY)+\"h\"+c;l.ensureSingle(n,\"path\",\"textline\").call(o.stroke,e.outsidetextfont.color).attr({\"stroke-width\":Math.min(2,e.outsidetextfont.size/8),d:s,fill:\"none\"})}else n.select(\"path.textline\").remove()}))}(y,m),x&&m.automargin){var M=s.bBox(d.node()),T=m.domain,S=(a.w*(T.x[1]-T.x[0])*.5-p.r)/a.w,A=(a.h*(T.y[1]-T.y[0])*.5-p.r)/a.h;i.autoMargin(t,\"pie.\"+m.uid+\".automargin\",{xl:T.x[0]-S,xr:T.x[1]+S,yb:T.y[0]-A,yt:T.y[1]+A,l:Math.max(p.cx-p.r-M.left,0),r:Math.max(M.right-(p.cx+p.r),0),b:Math.max(M.bottom-(p.cy+p.r),0),t:Math.max(p.cy-p.r-M.top,0),pad:5})}}))}));setTimeout((function(){d.selectAll(\"tspan\").each((function(){var t=r.select(this);t.attr(\"dy\")&&t.attr(\"dy\",t.attr(\"dy\"))}))}),0)},formatSliceLabel:R,transformInsideText:w,determineInsideTextFont:b,positionTitleOutside:E,prerenderTitles:x,layoutAreas:I,attachFxHandlers:_,computeTransform:z}},{\"../../components/color\":643,\"../../components/drawing\":665,\"../../components/fx\":683,\"../../lib\":778,\"../../lib/svg_text_utils\":803,\"../../plots/plots\":891,\"../bar/constants\":923,\"../bar/uniform_text\":937,\"./event_data\":1165,\"./helpers\":1166,d3:169}],1171:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"./style_one\"),a=t(\"../bar/uniform_text\").resizeText;e.exports=function(t){var e=t._fullLayout._pielayer.selectAll(\".trace\");a(t,e,\"pie\"),e.each((function(t){var e=t[0].trace,n=r.select(this);n.style({opacity:e.opacity}),n.selectAll(\"path.surface\").each((function(t){r.select(this).call(i,t,e)}))}))}},{\"../bar/uniform_text\":937,\"./style_one\":1172,d3:169}],1172:[function(t,e,n){\"use strict\";var r=t(\"../../components/color\"),i=t(\"./helpers\").castOption;e.exports=function(t,e,n){var a=n.marker.line,o=i(a.color,e.pts)||r.defaultLine,s=i(a.width,e.pts)||0;t.style(\"stroke-width\",s).call(r.fill,e.color).call(r.stroke,o)}},{\"../../components/color\":643,\"./helpers\":1166}],1173:[function(t,e,n){\"use strict\";var r=t(\"../scatter/attributes\");e.exports={x:r.x,y:r.y,xy:{valType:\"data_array\",editType:\"calc\"},indices:{valType:\"data_array\",editType:\"calc\"},xbounds:{valType:\"data_array\",editType:\"calc\"},ybounds:{valType:\"data_array\",editType:\"calc\"},text:r.text,marker:{color:{valType:\"color\",arrayOk:!1,editType:\"calc\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,arrayOk:!1,editType:\"calc\"},blend:{valType:\"boolean\",dflt:null,editType:\"calc\"},sizemin:{valType:\"number\",min:.1,max:2,dflt:.5,editType:\"calc\"},sizemax:{valType:\"number\",min:.1,dflt:20,editType:\"calc\"},border:{color:{valType:\"color\",arrayOk:!1,editType:\"calc\"},arearatio:{valType:\"number\",min:0,max:1,dflt:0,editType:\"calc\"},editType:\"calc\"},editType:\"calc\"},transforms:void 0}},{\"../scatter/attributes\":1187}],1174:[function(t,e,n){\"use strict\";var r=t(\"gl-pointcloud2d\"),i=t(\"../../lib/str2rgbarray\"),a=t(\"../../plots/cartesian/autorange\").findExtremes,o=t(\"../scatter/get_trace_color\");function s(t,e){this.scene=t,this.uid=e,this.type=\"pointcloud\",this.pickXData=[],this.pickYData=[],this.xData=[],this.yData=[],this.textLabels=[],this.color=\"rgb(0, 0, 0)\",this.name=\"\",this.hoverinfo=\"all\",this.idToIndex=new Int32Array(0),this.bounds=[0,0,0,0],this.pointcloudOptions={positions:new Float32Array(0),idToIndex:this.idToIndex,sizemin:.5,sizemax:12,color:[0,0,0,1],areaRatio:1,borderColor:[0,0,0,1]},this.pointcloud=r(t.glplot,this.pointcloudOptions),this.pointcloud._trace=this}var l=s.prototype;l.handlePick=function(t){var e=this.idToIndex[t.pointId];return{trace:this,dataCoord:t.dataCoord,traceCoord:this.pickXYData?[this.pickXYData[2*e],this.pickXYData[2*e+1]]:[this.pickXData[e],this.pickYData[e]],textLabel:Array.isArray(this.textLabels)?this.textLabels[e]:this.textLabels,color:this.color,name:this.name,pointIndex:e,hoverinfo:this.hoverinfo}},l.update=function(t){this.index=t.index,this.textLabels=t.text,this.name=t.name,this.hoverinfo=t.hoverinfo,this.bounds=[1/0,1/0,-1/0,-1/0],this.updateFast(t),this.color=o(t,{})},l.updateFast=function(t){var e,n,r,o,s,l,c=this.xData=this.pickXData=t.x,u=this.yData=this.pickYData=t.y,h=this.pickXYData=t.xy,d=t.indices,f=this.bounds;if(h){if(r=h,e=h.length>>>1,t.xbounds&&t.ybounds)f[0]=t.xbounds[0],f[2]=t.xbounds[1],f[1]=t.ybounds[0],f[3]=t.ybounds[1];else for(l=0;l<e;l++)s=r[2*l+1],(o=r[2*l])<f[0]&&(f[0]=o),o>f[2]&&(f[2]=o),s<f[1]&&(f[1]=s),s>f[3]&&(f[3]=s);if(d)n=d;else for(n=new Int32Array(e),l=0;l<e;l++)n[l]=l}else for(e=c.length,r=new Float32Array(2*e),n=new Int32Array(e),l=0;l<e;l++)o=c[l],s=u[l],n[l]=l,r[2*l]=o,r[2*l+1]=s,o<f[0]&&(f[0]=o),o>f[2]&&(f[2]=o),s<f[1]&&(f[1]=s),s>f[3]&&(f[3]=s);this.idToIndex=n,this.pointcloudOptions.idToIndex=n,this.pointcloudOptions.positions=r;var p=i(t.marker.color),m=i(t.marker.border.color),g=t.opacity*t.marker.opacity;p[3]*=g,this.pointcloudOptions.color=p;var y=t.marker.blend;null===y&&(y=c.length<100||u.length<100),this.pointcloudOptions.blend=y,m[3]*=g,this.pointcloudOptions.borderColor=m;var v=t.marker.sizemin,_=Math.max(t.marker.sizemax,t.marker.sizemin);this.pointcloudOptions.sizeMin=v,this.pointcloudOptions.sizeMax=_,this.pointcloudOptions.areaRatio=t.marker.border.arearatio,this.pointcloud.update(this.pointcloudOptions);var b=this.scene.xaxis,x=this.scene.yaxis,w=_/2||.5;t._extremes[b._id]=a(b,[f[0],f[2]],{ppad:w}),t._extremes[x._id]=a(x,[f[1],f[3]],{ppad:w})},l.dispose=function(){this.pointcloud.dispose()},e.exports=function(t,e){var n=new s(t,e.uid);return n.update(e),n}},{\"../../lib/str2rgbarray\":802,\"../../plots/cartesian/autorange\":827,\"../scatter/get_trace_color\":1197,\"gl-pointcloud2d\":324}],1175:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./attributes\");e.exports=function(t,e,n){function a(n,a){return r.coerce(t,e,i,n,a)}a(\"x\"),a(\"y\"),a(\"xbounds\"),a(\"ybounds\"),t.xy&&t.xy instanceof Float32Array&&(e.xy=t.xy),t.indices&&t.indices instanceof Int32Array&&(e.indices=t.indices),a(\"text\"),a(\"marker.color\",n),a(\"marker.opacity\"),a(\"marker.blend\"),a(\"marker.sizemin\"),a(\"marker.sizemax\"),a(\"marker.border.color\",n),a(\"marker.border.arearatio\"),e._length=null}},{\"../../lib\":778,\"./attributes\":1173}],1176:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),calc:t(\"../scatter3d/calc\"),plot:t(\"./convert\"),moduleType:\"trace\",name:\"pointcloud\",basePlotModule:t(\"../../plots/gl2d\"),categories:[\"gl\",\"gl2d\",\"showLegend\"],meta:{}}},{\"../../plots/gl2d\":868,\"../scatter3d/calc\":1216,\"./attributes\":1173,\"./convert\":1174,\"./defaults\":1175}],1177:[function(t,e,n){\"use strict\";var r=t(\"../../plots/font_attributes\"),i=t(\"../../plots/attributes\"),a=t(\"../../components/color/attributes\"),o=t(\"../../components/fx/attributes\"),s=t(\"../../plots/domain\").attributes,l=t(\"../../plots/template_attributes\").hovertemplateAttrs,c=t(\"../../components/colorscale/attributes\"),u=t(\"../../plot_api/plot_template\").templatedArray,h=t(\"../../lib/extend\").extendFlat,d=t(\"../../plot_api/edit_types\").overrideAll;t(\"../../constants/docs\"),(e.exports=d({hoverinfo:h({},i.hoverinfo,{flags:[],arrayOk:!1}),hoverlabel:o.hoverlabel,domain:s({name:\"sankey\",trace:!0}),orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],dflt:\"h\"},valueformat:{valType:\"string\",dflt:\".3s\"},valuesuffix:{valType:\"string\",dflt:\"\"},arrangement:{valType:\"enumerated\",values:[\"snap\",\"perpendicular\",\"freeform\",\"fixed\"],dflt:\"snap\"},textfont:r({}),customdata:void 0,node:{label:{valType:\"data_array\",dflt:[]},groups:{valType:\"info_array\",impliedEdits:{x:[],y:[]},dimensions:2,freeLength:!0,dflt:[],items:{valType:\"number\",editType:\"calc\"}},x:{valType:\"data_array\",dflt:[]},y:{valType:\"data_array\",dflt:[]},color:{valType:\"color\",arrayOk:!0},customdata:{valType:\"data_array\",editType:\"calc\"},line:{color:{valType:\"color\",dflt:a.defaultLine,arrayOk:!0},width:{valType:\"number\",min:0,dflt:.5,arrayOk:!0}},pad:{valType:\"number\",arrayOk:!1,min:0,dflt:20},thickness:{valType:\"number\",arrayOk:!1,min:1,dflt:20},hoverinfo:{valType:\"enumerated\",values:[\"all\",\"none\",\"skip\"],dflt:\"all\"},hoverlabel:o.hoverlabel,hovertemplate:l({},{keys:[\"value\",\"label\"]})},link:{label:{valType:\"data_array\",dflt:[]},color:{valType:\"color\",arrayOk:!0},customdata:{valType:\"data_array\",editType:\"calc\"},line:{color:{valType:\"color\",dflt:a.defaultLine,arrayOk:!0},width:{valType:\"number\",min:0,dflt:0,arrayOk:!0}},source:{valType:\"data_array\",dflt:[]},target:{valType:\"data_array\",dflt:[]},value:{valType:\"data_array\",dflt:[]},hoverinfo:{valType:\"enumerated\",values:[\"all\",\"none\",\"skip\"],dflt:\"all\"},hoverlabel:o.hoverlabel,hovertemplate:l({},{keys:[\"value\",\"label\"]}),colorscales:u(\"concentrationscales\",{editType:\"calc\",label:{valType:\"string\",editType:\"calc\",dflt:\"\"},cmax:{valType:\"number\",editType:\"calc\",dflt:1},cmin:{valType:\"number\",editType:\"calc\",dflt:0},colorscale:h(c().colorscale,{dflt:[[0,\"white\"],[1,\"black\"]]})})}},\"calc\",\"nested\")).transforms=void 0},{\"../../components/color/attributes\":642,\"../../components/colorscale/attributes\":650,\"../../components/fx/attributes\":674,\"../../constants/docs\":748,\"../../lib/extend\":768,\"../../plot_api/edit_types\":810,\"../../plot_api/plot_template\":817,\"../../plots/attributes\":824,\"../../plots/domain\":855,\"../../plots/font_attributes\":856,\"../../plots/template_attributes\":906}],1178:[function(t,e,n){\"use strict\";var r=t(\"../../plot_api/edit_types\").overrideAll,i=t(\"../../plots/get_data\").getModuleCalcData,a=t(\"./plot\"),o=t(\"../../components/fx/layout_attributes\"),s=t(\"../../lib/setcursor\"),l=t(\"../../components/dragelement\"),c=t(\"../../plots/cartesian/select\").prepSelect,u=t(\"../../lib\"),h=t(\"../../registry\"),d=\"sankey\";function f(t,e){var n=t._fullData[e],r=t._fullLayout,i=r.dragmode,a=n._bgRect;if(\"pan\"!==i&&\"zoom\"!==i){s(a,\"pan\"===r.dragmode?\"move\":\"crosshair\");var o={_id:\"x\",c2p:u.identity,_offset:n._sankey.translateX,_length:n._sankey.width},d={_id:\"y\",c2p:u.identity,_offset:n._sankey.translateY,_length:n._sankey.height},f={gd:t,element:a.node(),plotinfo:{id:e,xaxis:o,yaxis:d,fillRangeItems:u.noop},subplot:e,xaxes:[o],yaxes:[d],doneFnCompleted:function(n){var r,i=t._fullData[e],a=i.node.groups.slice(),o=[];function s(t){for(var e=i._sankey.graph.nodes,n=0;n<e.length;n++)if(e[n].pointNumber===t)return e[n]}for(var l=0;l<n.length;l++){var c=s(n[l].pointNumber);if(c)if(c.group){for(var u=0;u<c.childrenNodes.length;u++)o.push(c.childrenNodes[u].pointNumber);a[c.pointNumber-i.node._count]=!1}else o.push(c.pointNumber)}r=a.filter(Boolean).concat([o]),h.call(\"_guiRestyle\",t,{\"node.groups\":[r]},e)},prepFn:function(t,e,n){c(t,e,n,f,i)}};l.init(f)}}n.name=d,n.baseLayoutAttrOverrides=r({hoverlabel:o.hoverlabel},\"plot\",\"nested\"),n.plot=function(t){var e=i(t.calcdata,d)[0];a(t,e),n.updateFx(t)},n.clean=function(t,e,n,r){var i=r._has&&r._has(d),a=e._has&&e._has(d);i&&!a&&(r._paperdiv.selectAll(\".sankey\").remove(),r._paperdiv.selectAll(\".bgsankey\").remove())},n.updateFx=function(t){for(var e=0;e<t._fullData.length;e++)f(t,e)}},{\"../../components/dragelement\":662,\"../../components/fx/layout_attributes\":684,\"../../lib\":778,\"../../lib/setcursor\":799,\"../../plot_api/edit_types\":810,\"../../plots/cartesian/select\":847,\"../../plots/get_data\":865,\"../../registry\":911,\"./plot\":1183}],1179:[function(t,e,n){\"use strict\";var r=t(\"strongly-connected-components\"),i=t(\"../../lib\"),a=t(\"../../lib/gup\").wrap,o=i.isArrayOrTypedArray,s=i.isIndex,l=t(\"../../components/colorscale\");e.exports=function(t,e){var n=function(t){var e,n=t.node,a=t.link,c=[],u=o(a.color),h=o(a.customdata),d={},f={},p=a.colorscales.length;for(e=0;e<p;e++){var m=a.colorscales[e],g=l.extractScale(m,{cLetter:\"c\"}),y=l.makeColorScaleFunc(g);f[m.label]=y}var v=0;for(e=0;e<a.value.length;e++)a.source[e]>v&&(v=a.source[e]),a.target[e]>v&&(v=a.target[e]);var _,b=v+1;t.node._count=b;var x=t.node.groups,w={};for(e=0;e<x.length;e++){var k=x[e];for(_=0;_<k.length;_++){var M=k[_],T=b+e;w.hasOwnProperty(M)?i.warn(\"Node \"+M+\" is already part of a group.\"):w[M]=T}}var S={source:[],target:[]};for(e=0;e<a.value.length;e++){var A=a.value[e],L=a.source[e],C=a.target[e];if(A>0&&s(L,b)&&s(C,b)&&(!w.hasOwnProperty(L)||!w.hasOwnProperty(C)||w[L]!==w[C])){w.hasOwnProperty(C)&&(C=w[C]),w.hasOwnProperty(L)&&(L=w[L]),d[L=+L]=d[C=+C]=!0;var E=\"\";a.label&&a.label[e]&&(E=a.label[e]);var O=null;E&&f.hasOwnProperty(E)&&(O=f[E]),c.push({pointNumber:e,label:E,color:u?a.color[e]:a.color,customdata:h?a.customdata[e]:a.customdata,concentrationscale:O,source:L,target:C,value:+A}),S.source.push(L),S.target.push(C)}}var D=b+x.length,I=o(n.color),P=o(n.customdata),R=[];for(e=0;e<D;e++)d[e]&&R.push({group:e>b-1,childrenNodes:[],pointNumber:e,label:n.label[e],color:I?n.color[e]:n.color,customdata:P?n.customdata[e]:n.customdata});var z=!1;return function(t,e,n){for(var a=i.init2dArray(t,0),o=0;o<Math.min(e.length,n.length);o++)if(i.isIndex(e[o],t)&&i.isIndex(n[o],t)){if(e[o]===n[o])return!0;a[e[o]].push(n[o])}return r(a).components.some((function(t){return t.length>1}))}(D,S.source,S.target)&&(z=!0),{circular:z,links:c,nodes:R,groups:x,groupLookup:w}}(e);return a({circular:n.circular,_nodes:n.nodes,_links:n.links,_groups:n.groups,_groupLookup:n.groupLookup})}},{\"../../components/colorscale\":655,\"../../lib\":778,\"../../lib/gup\":775,\"strongly-connected-components\":569}],1180:[function(t,e,n){\"use strict\";e.exports={nodeTextOffsetHorizontal:4,nodeTextOffsetVertical:3,nodePadAcross:10,sankeyIterations:50,forceIterations:5,forceTicksPerFrame:10,duration:500,ease:\"linear\",cn:{sankey:\"sankey\",sankeyLinks:\"sankey-links\",sankeyLink:\"sankey-link\",sankeyNodeSet:\"sankey-node-set\",sankeyNode:\"sankey-node\",nodeRect:\"node-rect\",nodeCapture:\"node-capture\",nodeCentered:\"node-entered\",nodeLabelGuide:\"node-label-guide\",nodeLabel:\"node-label\",nodeLabelTextPath:\"node-label-text-path\"}}},{}],1181:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./attributes\"),a=t(\"../../components/color\"),o=t(\"tinycolor2\"),s=t(\"../../plots/domain\").defaults,l=t(\"../../components/fx/hoverlabel_defaults\"),c=t(\"../../plot_api/plot_template\"),u=t(\"../../plots/array_container_defaults\");function h(t,e){function n(n,a){return r.coerce(t,e,i.link.colorscales,n,a)}n(\"label\"),n(\"cmin\"),n(\"cmax\"),n(\"colorscale\")}e.exports=function(t,e,n,d){function f(n,a){return r.coerce(t,e,i,n,a)}var p=r.extendDeep(d.hoverlabel,t.hoverlabel),m=t.node,g=c.newContainer(e,\"node\");function y(t,e){return r.coerce(m,g,i.node,t,e)}y(\"label\"),y(\"groups\"),y(\"x\"),y(\"y\"),y(\"pad\"),y(\"thickness\"),y(\"line.color\"),y(\"line.width\"),y(\"hoverinfo\",t.hoverinfo),l(m,g,y,p),y(\"hovertemplate\");var v=d.colorway;y(\"color\",g.label.map((function(t,e){return a.addOpacity(function(t){return v[t%v.length]}(e),.8)}))),y(\"customdata\");var _=t.link||{},b=c.newContainer(e,\"link\");function x(t,e){return r.coerce(_,b,i.link,t,e)}x(\"label\"),x(\"source\"),x(\"target\"),x(\"value\"),x(\"line.color\"),x(\"line.width\"),x(\"hoverinfo\",t.hoverinfo),l(_,b,x,p),x(\"hovertemplate\");var w,k=o(d.paper_bgcolor).getLuminance()<.333?\"rgba(255, 255, 255, 0.6)\":\"rgba(0, 0, 0, 0.2)\";x(\"color\",r.repeat(k,b.value.length)),x(\"customdata\"),u(_,b,{name:\"colorscales\",handleItemDefaults:h}),s(e,d,f),f(\"orientation\"),f(\"valueformat\"),f(\"valuesuffix\"),g.x.length&&g.y.length&&(w=\"freeform\"),f(\"arrangement\",w),r.coerceFont(f,\"textfont\",r.extendFlat({},d.font)),e._length=null}},{\"../../components/color\":643,\"../../components/fx/hoverlabel_defaults\":681,\"../../lib\":778,\"../../plot_api/plot_template\":817,\"../../plots/array_container_defaults\":823,\"../../plots/domain\":855,\"./attributes\":1177,tinycolor2:576}],1182:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),calc:t(\"./calc\"),plot:t(\"./plot\"),moduleType:\"trace\",name:\"sankey\",basePlotModule:t(\"./base_plot\"),selectPoints:t(\"./select.js\"),categories:[\"noOpacity\"],meta:{}}},{\"./attributes\":1177,\"./base_plot\":1178,\"./calc\":1179,\"./defaults\":1181,\"./plot\":1183,\"./select.js\":1185}],1183:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"./render\"),a=t(\"../../components/fx\"),o=t(\"../../components/color\"),s=t(\"../../lib\"),l=t(\"./constants\").cn,c=s._;function u(t){return\"\"!==t}function h(t,e){return t.filter((function(t){return t.key===e.traceId}))}function d(t,e){r.select(t).select(\"path\").style(\"fill-opacity\",e),r.select(t).select(\"rect\").style(\"fill-opacity\",e)}function f(t){r.select(t).select(\"text.name\").style(\"fill\",\"black\")}function p(t){return function(e){return-1!==t.node.sourceLinks.indexOf(e.link)||-1!==t.node.targetLinks.indexOf(e.link)}}function m(t){return function(e){return-1!==e.node.sourceLinks.indexOf(t.link)||-1!==e.node.targetLinks.indexOf(t.link)}}function g(t,e,n){e&&n&&h(n,e).selectAll(\".\"+l.sankeyLink).filter(p(e)).call(v.bind(0,e,n,!1))}function y(t,e,n){e&&n&&h(n,e).selectAll(\".\"+l.sankeyLink).filter(p(e)).call(_.bind(0,e,n,!1))}function v(t,e,n,r){var i=r.datum().link.label;r.style(\"fill-opacity\",(function(t){if(!t.link.concentrationscale)return.4})),i&&h(e,t).selectAll(\".\"+l.sankeyLink).filter((function(t){return t.link.label===i})).style(\"fill-opacity\",(function(t){if(!t.link.concentrationscale)return.4})),n&&h(e,t).selectAll(\".\"+l.sankeyNode).filter(m(t)).call(g)}function _(t,e,n,r){var i=r.datum().link.label;r.style(\"fill-opacity\",(function(t){return t.tinyColorAlpha})),i&&h(e,t).selectAll(\".\"+l.sankeyLink).filter((function(t){return t.link.label===i})).style(\"fill-opacity\",(function(t){return t.tinyColorAlpha})),n&&h(e,t).selectAll(l.sankeyNode).filter(m(t)).call(y)}function b(t,e){var n=s.nestedProperty(t.hoverlabel||{},e).get();return!Array.isArray(n)&&n}e.exports=function(t,e){for(var n=t._fullLayout,s=n._paper,h=n._size,p=0;p<t._fullData.length;p++)if(t._fullData[p].visible&&t._fullData[p].type===l.sankey&&!t._fullData[p]._viewInitial){var m=t._fullData[p].node;t._fullData[p]._viewInitial={node:{groups:m.groups.slice(),x:m.x.slice(),y:m.y.slice()}}}var x=c(t,\"source:\")+\" \",w=c(t,\"target:\")+\" \",k=c(t,\"concentration:\")+\" \",M=c(t,\"incoming flow count:\")+\" \",T=c(t,\"outgoing flow count:\")+\" \";i(t,s,e,{width:h.w,height:h.h,margin:{t:h.t,r:h.r,b:h.b,l:h.l}},{linkEvents:{hover:function(e,n,i){!1!==t._fullLayout.hovermode&&(r.select(e).call(v.bind(0,n,i,!0)),\"skip\"!==n.link.trace.link.hoverinfo&&(n.link.fullData=n.link.trace,t.emit(\"plotly_hover\",{event:r.event,points:[n.link]})))},follow:function(e,i){if(!1!==t._fullLayout.hovermode){var s=i.link.trace.link;if(\"none\"!==s.hoverinfo&&\"skip\"!==s.hoverinfo){for(var l=[],c=0,h=0;h<i.flow.links.length;h++){var p=i.flow.links[h];if(\"closest\"!==t._fullLayout.hovermode||i.link.pointNumber===p.pointNumber){i.link.pointNumber===p.pointNumber&&(c=h),p.fullData=p.trace,s=i.link.trace.link;var m=y(p),g={valueLabel:r.format(i.valueFormat)(p.value)+i.valueSuffix};l.push({x:m[0],y:m[1],name:g.valueLabel,text:[p.label||\"\",x+p.source.label,w+p.target.label,p.concentrationscale?k+r.format(\"%0.2f\")(p.flow.labelConcentration):\"\"].filter(u).join(\"<br>\"),color:b(s,\"bgcolor\")||o.addOpacity(p.color,1),borderColor:b(s,\"bordercolor\"),fontFamily:b(s,\"font.family\"),fontSize:b(s,\"font.size\"),fontColor:b(s,\"font.color\"),nameLength:b(s,\"namelength\"),textAlign:b(s,\"align\"),idealAlign:r.event.x<m[0]?\"right\":\"left\",hovertemplate:s.hovertemplate,hovertemplateLabels:g,eventData:[p]})}}a.loneHover(l,{container:n._hoverlayer.node(),outerContainer:n._paper.node(),gd:t,anchorIndex:c}).each((function(){i.link.concentrationscale||d(this,.65),f(this)}))}}function y(t){var e,n;t.circular?(e=(t.circularPathData.leftInnerExtent+t.circularPathData.rightInnerExtent)/2,n=t.circularPathData.verticalFullExtent):(e=(t.source.x1+t.target.x0)/2,n=(t.y0+t.y1)/2);var r=[e,n];return\"v\"===t.trace.orientation&&r.reverse(),r[0]+=i.parent.translateX,r[1]+=i.parent.translateY,r}},unhover:function(e,i,o){!1!==t._fullLayout.hovermode&&(r.select(e).call(_.bind(0,i,o,!0)),\"skip\"!==i.link.trace.link.hoverinfo&&(i.link.fullData=i.link.trace,t.emit(\"plotly_unhover\",{event:r.event,points:[i.link]})),a.loneUnhover(n._hoverlayer.node()))},select:function(e,n){var i=n.link;i.originalEvent=r.event,t._hoverdata=[i],a.click(t,{target:!0})}},nodeEvents:{hover:function(e,n,i){!1!==t._fullLayout.hovermode&&(r.select(e).call(g,n,i),\"skip\"!==n.node.trace.node.hoverinfo&&(n.node.fullData=n.node.trace,t.emit(\"plotly_hover\",{event:r.event,points:[n.node]})))},follow:function(e,i){if(!1!==t._fullLayout.hovermode){var o=i.node.trace.node;if(\"none\"!==o.hoverinfo&&\"skip\"!==o.hoverinfo){var s=r.select(e).select(\".\"+l.nodeRect),c=t._fullLayout._paperdiv.node().getBoundingClientRect(),h=s.node().getBoundingClientRect(),p=h.left-2-c.left,m=h.right+2-c.left,g=h.top+h.height/4-c.top,y={valueLabel:r.format(i.valueFormat)(i.node.value)+i.valueSuffix};i.node.fullData=i.node.trace,t._fullLayout._calcInverseTransform(t);var v=t._fullLayout._invScaleX,_=a.loneHover({x0:v*p,x1:v*m,y:t._fullLayout._invScaleY*g,name:r.format(i.valueFormat)(i.node.value)+i.valueSuffix,text:[i.node.label,M+i.node.targetLinks.length,T+i.node.sourceLinks.length].filter(u).join(\"<br>\"),color:b(o,\"bgcolor\")||i.tinyColorHue,borderColor:b(o,\"bordercolor\"),fontFamily:b(o,\"font.family\"),fontSize:b(o,\"font.size\"),fontColor:b(o,\"font.color\"),nameLength:b(o,\"namelength\"),textAlign:b(o,\"align\"),idealAlign:\"left\",hovertemplate:o.hovertemplate,hovertemplateLabels:y,eventData:[i.node]},{container:n._hoverlayer.node(),outerContainer:n._paper.node(),gd:t});d(_,.85),f(_)}}},unhover:function(e,i,o){!1!==t._fullLayout.hovermode&&(r.select(e).call(y,i,o),\"skip\"!==i.node.trace.node.hoverinfo&&(i.node.fullData=i.node.trace,t.emit(\"plotly_unhover\",{event:r.event,points:[i.node]})),a.loneUnhover(n._hoverlayer.node()))},select:function(e,n,i){var o=n.node;o.originalEvent=r.event,t._hoverdata=[o],r.select(e).call(y,n,i),a.click(t,{target:!0})}}})}},{\"../../components/color\":643,\"../../components/fx\":683,\"../../lib\":778,\"./constants\":1180,\"./render\":1184,d3:169}],1184:[function(t,e,n){\"use strict\";var r=t(\"./constants\"),i=t(\"d3\"),a=t(\"tinycolor2\"),o=t(\"../../components/color\"),s=t(\"../../components/drawing\"),l=t(\"@plotly/d3-sankey\"),c=t(\"@plotly/d3-sankey-circular\"),u=t(\"d3-force\"),h=t(\"../../lib\"),d=h.strTranslate,f=t(\"../../lib/gup\"),p=f.keyFun,m=f.repeat,g=f.unwrap,y=t(\"d3-interpolate\").interpolateNumber,v=t(\"../../registry\");function _(t,e,n){var i,o=g(e),s=o.trace,u=s.domain,d=\"h\"===s.orientation,f=s.node.pad,p=s.node.thickness,m=t.width*(u.x[1]-u.x[0]),y=t.height*(u.y[1]-u.y[0]),v=o._nodes,_=o._links,b=o.circular;(i=b?c.sankeyCircular().circularLinkGap(0):l.sankey()).iterations(r.sankeyIterations).size(d?[m,y]:[y,m]).nodeWidth(p).nodePadding(f).nodeId((function(t){return t.pointNumber})).nodes(v).links(_);var x,w,k,M=i();for(var T in i.nodePadding()<f&&h.warn(\"node.pad was reduced to \",i.nodePadding(),\" to fit within the figure.\"),o._groupLookup){var S,A=parseInt(o._groupLookup[T]);for(x=0;x<M.nodes.length;x++)if(M.nodes[x].pointNumber===A){S=M.nodes[x];break}if(S){var L={pointNumber:parseInt(T),x0:S.x0,x1:S.x1,y0:S.y0,y1:S.y1,partOfGroup:!0,sourceLinks:[],targetLinks:[]};M.nodes.unshift(L),S.childrenNodes.unshift(L)}}if(function(){for(x=0;x<M.nodes.length;x++){var t,e,n=M.nodes[x],r={};for(w=0;w<n.targetLinks.length;w++)r.hasOwnProperty(t=(e=n.targetLinks[w]).source.pointNumber+\":\"+e.target.pointNumber)||(r[t]=[]),r[t].push(e);var i=Object.keys(r);for(w=0;w<i.length;w++){var o=r[t=i[w]],s=0,l={};for(k=0;k<o.length;k++)l[(e=o[k]).label]||(l[e.label]=0),l[e.label]+=e.value,s+=e.value;for(k=0;k<o.length;k++)(e=o[k]).flow={value:s,labelConcentration:l[e.label]/s,concentration:e.value/s,links:o},e.concentrationscale&&(e.color=a(e.concentrationscale(e.flow.labelConcentration)))}var c=0;for(w=0;w<n.sourceLinks.length;w++)c+=n.sourceLinks[w].value;for(w=0;w<n.sourceLinks.length;w++)(e=n.sourceLinks[w]).concentrationOut=e.value/c;var u=0;for(w=0;w<n.targetLinks.length;w++)u+=n.targetLinks[w].value;for(w=0;w<n.targetLinks.length;w++)(e=n.targetLinks[w]).concenrationIn=e.value/u}}(),s.node.x.length&&s.node.y.length){for(x=0;x<Math.min(s.node.x.length,s.node.y.length,M.nodes.length);x++)if(s.node.x[x]&&s.node.y[x]){var C=[s.node.x[x]*m,s.node.y[x]*y];M.nodes[x].x0=C[0]-p/2,M.nodes[x].x1=C[0]+p/2;var E=M.nodes[x].y1-M.nodes[x].y0;M.nodes[x].y0=C[1]-E/2,M.nodes[x].y1=C[1]+E/2}\"snap\"===s.arrangement&&function(t){var e,n,r=t.map((function(t,e){return{x0:t.x0,index:e}})).sort((function(t,e){return t.x0-e.x0})),i=[],a=-1,o=-1/0;for(x=0;x<r.length;x++){var s=t[r[x].index];s.x0>o+p&&(a+=1,e=s.x0),o=s.x0,i[a]||(i[a]=[]),i[a].push(s),s.x0+=n=e-s.x0,s.x1+=n}return i}(v=M.nodes).forEach((function(t){var e,n,r,i=0,a=t.length;for(t.sort((function(t,e){return t.y0-e.y0})),r=0;r<a;++r)(e=t[r]).y0>=i||(n=i-e.y0)>1e-6&&(e.y0+=n,e.y1+=n),i=e.y1+f})),i.update(M)}return{circular:b,key:n,trace:s,guid:h.randstr(),horizontal:d,width:m,height:y,nodePad:s.node.pad,nodeLineColor:s.node.line.color,nodeLineWidth:s.node.line.width,linkLineColor:s.link.line.color,linkLineWidth:s.link.line.width,valueFormat:s.valueformat,valueSuffix:s.valuesuffix,textFont:s.textfont,translateX:u.x[0]*t.width+t.margin.l,translateY:t.height-u.y[1]*t.height+t.margin.t,dragParallel:d?y:m,dragPerpendicular:d?m:y,arrangement:s.arrangement,sankey:i,graph:M,forceLayouts:{},interactionState:{dragInProgress:!1,hovered:!1}}}function b(t,e,n){var r=a(e.color),i=e.source.label+\"|\"+e.target.label+\"__\"+n;return e.trace=t.trace,e.curveNumber=t.trace.index,{circular:t.circular,key:i,traceId:t.key,pointNumber:e.pointNumber,link:e,tinyColorHue:o.tinyRGB(r),tinyColorAlpha:r.getAlpha(),linkPath:x,linkLineColor:t.linkLineColor,linkLineWidth:t.linkLineWidth,valueFormat:t.valueFormat,valueSuffix:t.valueSuffix,sankey:t.sankey,parent:t,interactionState:t.interactionState,flow:e.flow}}function x(){return function(t){if(t.link.circular)return n=(e=t.link).width/2,r=e.circularPathData,\"top\"===e.circularLinkType?\"M \"+r.targetX+\" \"+(r.targetY+n)+\" L\"+r.rightInnerExtent+\" \"+(r.targetY+n)+\"A\"+(r.rightLargeArcRadius+n)+\" \"+(r.rightSmallArcRadius+n)+\" 0 0 1 \"+(r.rightFullExtent-n)+\" \"+(r.targetY-r.rightSmallArcRadius)+\"L\"+(r.rightFullExtent-n)+\" \"+r.verticalRightInnerExtent+\"A\"+(r.rightLargeArcRadius+n)+\" \"+(r.rightLargeArcRadius+n)+\" 0 0 1 \"+r.rightInnerExtent+\" \"+(r.verticalFullExtent-n)+\"L\"+r.leftInnerExtent+\" \"+(r.verticalFullExtent-n)+\"A\"+(r.leftLargeArcRadius+n)+\" \"+(r.leftLargeArcRadius+n)+\" 0 0 1 \"+(r.leftFullExtent+n)+\" \"+r.verticalLeftInnerExtent+\"L\"+(r.leftFullExtent+n)+\" \"+(r.sourceY-r.leftSmallArcRadius)+\"A\"+(r.leftLargeArcRadius+n)+\" \"+(r.leftSmallArcRadius+n)+\" 0 0 1 \"+r.leftInnerExtent+\" \"+(r.sourceY+n)+\"L\"+r.sourceX+\" \"+(r.sourceY+n)+\"L\"+r.sourceX+\" \"+(r.sourceY-n)+\"L\"+r.leftInnerExtent+\" \"+(r.sourceY-n)+\"A\"+(r.leftLargeArcRadius-n)+\" \"+(r.leftSmallArcRadius-n)+\" 0 0 0 \"+(r.leftFullExtent-n)+\" \"+(r.sourceY-r.leftSmallArcRadius)+\"L\"+(r.leftFullExtent-n)+\" \"+r.verticalLeftInnerExtent+\"A\"+(r.leftLargeArcRadius-n)+\" \"+(r.leftLargeArcRadius-n)+\" 0 0 0 \"+r.leftInnerExtent+\" \"+(r.verticalFullExtent+n)+\"L\"+r.rightInnerExtent+\" \"+(r.verticalFullExtent+n)+\"A\"+(r.rightLargeArcRadius-n)+\" \"+(r.rightLargeArcRadius-n)+\" 0 0 0 \"+(r.rightFullExtent+n)+\" \"+r.verticalRightInnerExtent+\"L\"+(r.rightFullExtent+n)+\" \"+(r.targetY-r.rightSmallArcRadius)+\"A\"+(r.rightLargeArcRadius-n)+\" \"+(r.rightSmallArcRadius-n)+\" 0 0 0 \"+r.rightInnerExtent+\" \"+(r.targetY-n)+\"L\"+r.targetX+\" \"+(r.targetY-n)+\"Z\":\"M \"+r.targetX+\" \"+(r.targetY-n)+\" L\"+r.rightInnerExtent+\" \"+(r.targetY-n)+\"A\"+(r.rightLargeArcRadius+n)+\" \"+(r.rightSmallArcRadius+n)+\" 0 0 0 \"+(r.rightFullExtent-n)+\" \"+(r.targetY+r.rightSmallArcRadius)+\"L\"+(r.rightFullExtent-n)+\" \"+r.verticalRightInnerExtent+\"A\"+(r.rightLargeArcRadius+n)+\" \"+(r.rightLargeArcRadius+n)+\" 0 0 0 \"+r.rightInnerExtent+\" \"+(r.verticalFullExtent+n)+\"L\"+r.leftInnerExtent+\" \"+(r.verticalFullExtent+n)+\"A\"+(r.leftLargeArcRadius+n)+\" \"+(r.leftLargeArcRadius+n)+\" 0 0 0 \"+(r.leftFullExtent+n)+\" \"+r.verticalLeftInnerExtent+\"L\"+(r.leftFullExtent+n)+\" \"+(r.sourceY+r.leftSmallArcRadius)+\"A\"+(r.leftLargeArcRadius+n)+\" \"+(r.leftSmallArcRadius+n)+\" 0 0 0 \"+r.leftInnerExtent+\" \"+(r.sourceY-n)+\"L\"+r.sourceX+\" \"+(r.sourceY-n)+\"L\"+r.sourceX+\" \"+(r.sourceY+n)+\"L\"+r.leftInnerExtent+\" \"+(r.sourceY+n)+\"A\"+(r.leftLargeArcRadius-n)+\" \"+(r.leftSmallArcRadius-n)+\" 0 0 1 \"+(r.leftFullExtent-n)+\" \"+(r.sourceY+r.leftSmallArcRadius)+\"L\"+(r.leftFullExtent-n)+\" \"+r.verticalLeftInnerExtent+\"A\"+(r.leftLargeArcRadius-n)+\" \"+(r.leftLargeArcRadius-n)+\" 0 0 1 \"+r.leftInnerExtent+\" \"+(r.verticalFullExtent-n)+\"L\"+r.rightInnerExtent+\" \"+(r.verticalFullExtent-n)+\"A\"+(r.rightLargeArcRadius-n)+\" \"+(r.rightLargeArcRadius-n)+\" 0 0 1 \"+(r.rightFullExtent+n)+\" \"+r.verticalRightInnerExtent+\"L\"+(r.rightFullExtent+n)+\" \"+(r.targetY+r.rightSmallArcRadius)+\"A\"+(r.rightLargeArcRadius-n)+\" \"+(r.rightSmallArcRadius-n)+\" 0 0 1 \"+r.rightInnerExtent+\" \"+(r.targetY+n)+\"L\"+r.targetX+\" \"+(r.targetY+n)+\"Z\";var e,n,r,i=t.link.source.x1,a=t.link.target.x0,o=y(i,a),s=o(.5),l=o(.5),c=t.link.y0-t.link.width/2,u=t.link.y0+t.link.width/2,h=t.link.y1-t.link.width/2,d=t.link.y1+t.link.width/2;return\"M\"+i+\",\"+c+\"C\"+s+\",\"+c+\" \"+l+\",\"+h+\" \"+a+\",\"+h+\"L\"+a+\",\"+d+\"C\"+l+\",\"+d+\" \"+s+\",\"+u+\" \"+i+\",\"+u+\"Z\"}}function w(t,e){var n=a(e.color),i=r.nodePadAcross,s=t.nodePad/2;e.dx=e.x1-e.x0,e.dy=e.y1-e.y0;var l=e.dx,c=Math.max(.5,e.dy),u=\"node_\"+e.pointNumber;return e.group&&(u=h.randstr()),e.trace=t.trace,e.curveNumber=t.trace.index,{index:e.pointNumber,key:u,partOfGroup:e.partOfGroup||!1,group:e.group,traceId:t.key,trace:t.trace,node:e,nodePad:t.nodePad,nodeLineColor:t.nodeLineColor,nodeLineWidth:t.nodeLineWidth,textFont:t.textFont,size:t.horizontal?t.height:t.width,visibleWidth:Math.ceil(l),visibleHeight:c,zoneX:-i,zoneY:-s,zoneWidth:l+2*i,zoneHeight:c+2*s,labelY:t.horizontal?e.dy/2+1:e.dx/2+1,left:1===e.originalLayer,sizeAcross:t.width,forceLayouts:t.forceLayouts,horizontal:t.horizontal,darkBackground:n.getBrightness()<=128,tinyColorHue:o.tinyRGB(n),tinyColorAlpha:n.getAlpha(),valueFormat:t.valueFormat,valueSuffix:t.valueSuffix,sankey:t.sankey,graph:t.graph,arrangement:t.arrangement,uniqueNodeLabelPathId:[t.guid,t.key,u].join(\"_\"),interactionState:t.interactionState,figure:t}}function k(t){t.attr(\"transform\",(function(t){return d(t.node.x0.toFixed(3),t.node.y0.toFixed(3))}))}function M(t){t.call(k)}function T(t,e){t.call(M),e.attr(\"d\",x())}function S(t){t.attr(\"width\",(function(t){return t.node.x1-t.node.x0})).attr(\"height\",(function(t){return t.visibleHeight}))}function A(t){return t.link.width>1||t.linkLineWidth>0}function L(t){return d(t.translateX,t.translateY)+(t.horizontal?\"matrix(1 0 0 1 0 0)\":\"matrix(0 1 1 0 0 0)\")}function C(t){return d(t.horizontal?0:t.labelY,t.horizontal?t.labelY:0)}function E(t){return i.svg.line()([[t.horizontal?t.left?-t.sizeAcross:t.visibleWidth+r.nodeTextOffsetHorizontal:r.nodeTextOffsetHorizontal,0],[t.horizontal?t.left?-r.nodeTextOffsetHorizontal:t.sizeAcross:t.visibleHeight-r.nodeTextOffsetHorizontal,0]])}function O(t){return t.horizontal?\"matrix(1 0 0 1 0 0)\":\"matrix(0 1 1 0 0 0)\"}function D(t){return t.horizontal?\"scale(1 1)\":\"scale(-1 1)\"}function I(t){return t.darkBackground&&!t.horizontal?\"rgb(255,255,255)\":\"rgb(0,0,0)\"}function P(t){return t.horizontal&&t.left?\"100%\":\"0%\"}function R(t,e,n){t.on(\".basic\",null).on(\"mouseover.basic\",(function(t){t.interactionState.dragInProgress||t.partOfGroup||(n.hover(this,t,e),t.interactionState.hovered=[this,t])})).on(\"mousemove.basic\",(function(t){t.interactionState.dragInProgress||t.partOfGroup||(n.follow(this,t),t.interactionState.hovered=[this,t])})).on(\"mouseout.basic\",(function(t){t.interactionState.dragInProgress||t.partOfGroup||(n.unhover(this,t,e),t.interactionState.hovered=!1)})).on(\"click.basic\",(function(t){t.interactionState.hovered&&(n.unhover(this,t,e),t.interactionState.hovered=!1),t.interactionState.dragInProgress||t.partOfGroup||n.select(this,t,e)}))}function z(t,e,n,a){var o=i.behavior.drag().origin((function(t){return{x:t.node.x0+t.visibleWidth/2,y:t.node.y0+t.visibleHeight/2}})).on(\"dragstart\",(function(i){if(\"fixed\"!==i.arrangement&&(h.ensureSingle(a._fullLayout._infolayer,\"g\",\"dragcover\",(function(t){a._fullLayout._dragCover=t})),h.raiseToTop(this),i.interactionState.dragInProgress=i.node,F(i.node),i.interactionState.hovered&&(n.nodeEvents.unhover.apply(0,i.interactionState.hovered),i.interactionState.hovered=!1),\"snap\"===i.arrangement)){var o=i.traceId+\"|\"+i.key;i.forceLayouts[o]?i.forceLayouts[o].alpha(1):function(t,e,n,i){!function(t){for(var e=0;e<t.length;e++)t[e].y=(t[e].y0+t[e].y1)/2,t[e].x=(t[e].x0+t[e].x1)/2}(n.graph.nodes);var a=n.graph.nodes.filter((function(t){return t.originalX===n.node.originalX})).filter((function(t){return!t.partOfGroup}));n.forceLayouts[e]=u.forceSimulation(a).alphaDecay(0).force(\"collide\",u.forceCollide().radius((function(t){return t.dy/2+n.nodePad/2})).strength(1).iterations(r.forceIterations)).force(\"constrain\",function(t,e,n,i){return function(){for(var t=0,a=0;a<n.length;a++){var o=n[a];o===i.interactionState.dragInProgress?(o.x=o.lastDraggedX,o.y=o.lastDraggedY):(o.vx=(o.originalX-o.x)/r.forceTicksPerFrame,o.y=Math.min(i.size-o.dy/2,Math.max(o.dy/2,o.y))),t=Math.max(t,Math.abs(o.vx),Math.abs(o.vy))}!i.interactionState.dragInProgress&&t<.1&&i.forceLayouts[e].alpha()>0&&i.forceLayouts[e].alpha(0)}}(0,e,a,n)).stop()}(0,o,i),function(t,e,n,i,a){window.requestAnimationFrame((function o(){var s;for(s=0;s<r.forceTicksPerFrame;s++)n.forceLayouts[i].tick();if(function(t){for(var e=0;e<t.length;e++)t[e].y0=t[e].y-t[e].dy/2,t[e].y1=t[e].y0+t[e].dy,t[e].x0=t[e].x-t[e].dx/2,t[e].x1=t[e].x0+t[e].dx}(n.graph.nodes),n.sankey.update(n.graph),T(t.filter(N(n)),e),n.forceLayouts[i].alpha()>0)window.requestAnimationFrame(o);else{var l=n.node.originalX;n.node.x0=l-n.visibleWidth/2,n.node.x1=l+n.visibleWidth/2,j(n,a)}}))}(t,e,i,o,a)}})).on(\"drag\",(function(n){if(\"fixed\"!==n.arrangement){var r=i.event.x,a=i.event.y;\"snap\"===n.arrangement?(n.node.x0=r-n.visibleWidth/2,n.node.x1=r+n.visibleWidth/2,n.node.y0=a-n.visibleHeight/2,n.node.y1=a+n.visibleHeight/2):(\"freeform\"===n.arrangement&&(n.node.x0=r-n.visibleWidth/2,n.node.x1=r+n.visibleWidth/2),a=Math.max(0,Math.min(n.size-n.visibleHeight/2,a)),n.node.y0=a-n.visibleHeight/2,n.node.y1=a+n.visibleHeight/2),F(n.node),\"snap\"!==n.arrangement&&(n.sankey.update(n.graph),T(t.filter(N(n)),e))}})).on(\"dragend\",(function(t){if(\"fixed\"!==t.arrangement){t.interactionState.dragInProgress=!1;for(var e=0;e<t.node.childrenNodes.length;e++)t.node.childrenNodes[e].x=t.node.x,t.node.childrenNodes[e].y=t.node.y;\"snap\"!==t.arrangement&&j(t,a)}}));t.on(\".drag\",null).call(o)}function j(t,e){for(var n=[],r=[],i=0;i<t.graph.nodes.length;i++){var a=(t.graph.nodes[i].y0+t.graph.nodes[i].y1)/2;n.push((t.graph.nodes[i].x0+t.graph.nodes[i].x1)/2/t.figure.width),r.push(a/t.figure.height)}v.call(\"_guiRestyle\",e,{\"node.x\":[n],\"node.y\":[r]},t.trace.index).then((function(){e._fullLayout._dragCover&&e._fullLayout._dragCover.remove()}))}function F(t){t.lastDraggedX=t.x0+t.dx/2,t.lastDraggedY=t.y0+t.dy/2}function N(t){return function(e){return e.node.originalX===t.node.originalX}}e.exports=function(t,e,n,l,c){var u=!1;h.ensureSingle(t._fullLayout._infolayer,\"g\",\"first-render\",(function(){u=!0}));var d=t._fullLayout._dragCover,f=n.filter((function(t){return g(t).trace.visible})).map(_.bind(null,l)),y=e.selectAll(\".\"+r.cn.sankey).data(f,p);y.exit().remove(),y.enter().append(\"g\").classed(r.cn.sankey,!0).style(\"box-sizing\",\"content-box\").style(\"position\",\"absolute\").style(\"left\",0).style(\"shape-rendering\",\"geometricPrecision\").style(\"pointer-events\",\"auto\").attr(\"transform\",L),y.each((function(e,n){t._fullData[n]._sankey=e;var r=\"bgsankey-\"+e.trace.uid+\"-\"+n;h.ensureSingle(t._fullLayout._draggers,\"rect\",r),t._fullData[n]._bgRect=i.select(\".\"+r),t._fullData[n]._bgRect.style(\"pointer-events\",\"all\").attr(\"width\",e.width).attr(\"height\",e.height).attr(\"x\",e.translateX).attr(\"y\",e.translateY).classed(\"bgsankey\",!0).style({fill:\"transparent\",\"stroke-width\":0})})),y.transition().ease(r.ease).duration(r.duration).attr(\"transform\",L);var v=y.selectAll(\".\"+r.cn.sankeyLinks).data(m,p);v.enter().append(\"g\").classed(r.cn.sankeyLinks,!0).style(\"fill\",\"none\");var M=v.selectAll(\".\"+r.cn.sankeyLink).data((function(t){return t.graph.links.filter((function(t){return t.value})).map(b.bind(null,t))}),p);M.enter().append(\"path\").classed(r.cn.sankeyLink,!0).call(R,y,c.linkEvents),M.style(\"stroke\",(function(t){return A(t)?o.tinyRGB(a(t.linkLineColor)):t.tinyColorHue})).style(\"stroke-opacity\",(function(t){return A(t)?o.opacity(t.linkLineColor):t.tinyColorAlpha})).style(\"fill\",(function(t){return t.tinyColorHue})).style(\"fill-opacity\",(function(t){return t.tinyColorAlpha})).style(\"stroke-width\",(function(t){return A(t)?t.linkLineWidth:1})).attr(\"d\",x()),M.style(\"opacity\",(function(){return t._context.staticPlot||u||d?1:0})).transition().ease(r.ease).duration(r.duration).style(\"opacity\",1),M.exit().transition().ease(r.ease).duration(r.duration).style(\"opacity\",0).remove();var T=y.selectAll(\".\"+r.cn.sankeyNodeSet).data(m,p);T.enter().append(\"g\").classed(r.cn.sankeyNodeSet,!0),T.style(\"cursor\",(function(t){switch(t.arrangement){case\"fixed\":return\"default\";case\"perpendicular\":return\"ns-resize\";default:return\"move\"}}));var j=T.selectAll(\".\"+r.cn.sankeyNode).data((function(t){var e=t.graph.nodes;return function(t){var e,n=[];for(e=0;e<t.length;e++)t[e].originalX=(t[e].x0+t[e].x1)/2,t[e].originalY=(t[e].y0+t[e].y1)/2,-1===n.indexOf(t[e].originalX)&&n.push(t[e].originalX);for(n.sort((function(t,e){return t-e})),e=0;e<t.length;e++)t[e].originalLayerIndex=n.indexOf(t[e].originalX),t[e].originalLayer=t[e].originalLayerIndex/(n.length-1)}(e),e.map(w.bind(null,t))}),p);j.enter().append(\"g\").classed(r.cn.sankeyNode,!0).call(k).style(\"opacity\",(function(e){return!t._context.staticPlot&&!u||e.partOfGroup?0:1})),j.call(R,y,c.nodeEvents).call(z,M,c,t),j.transition().ease(r.ease).duration(r.duration).call(k).style(\"opacity\",(function(t){return t.partOfGroup?0:1})),j.exit().transition().ease(r.ease).duration(r.duration).style(\"opacity\",0).remove();var F=j.selectAll(\".\"+r.cn.nodeRect).data(m);F.enter().append(\"rect\").classed(r.cn.nodeRect,!0).call(S),F.style(\"stroke-width\",(function(t){return t.nodeLineWidth})).style(\"stroke\",(function(t){return o.tinyRGB(a(t.nodeLineColor))})).style(\"stroke-opacity\",(function(t){return o.opacity(t.nodeLineColor)})).style(\"fill\",(function(t){return t.tinyColorHue})).style(\"fill-opacity\",(function(t){return t.tinyColorAlpha})),F.transition().ease(r.ease).duration(r.duration).call(S);var N=j.selectAll(\".\"+r.cn.nodeCapture).data(m);N.enter().append(\"rect\").classed(r.cn.nodeCapture,!0).style(\"fill-opacity\",0),N.attr(\"x\",(function(t){return t.zoneX})).attr(\"y\",(function(t){return t.zoneY})).attr(\"width\",(function(t){return t.zoneWidth})).attr(\"height\",(function(t){return t.zoneHeight}));var B=j.selectAll(\".\"+r.cn.nodeCentered).data(m);B.enter().append(\"g\").classed(r.cn.nodeCentered,!0).attr(\"transform\",C),B.transition().ease(r.ease).duration(r.duration).attr(\"transform\",C);var Y=B.selectAll(\".\"+r.cn.nodeLabelGuide).data(m);Y.enter().append(\"path\").classed(r.cn.nodeLabelGuide,!0).attr(\"id\",(function(t){return t.uniqueNodeLabelPathId})).attr(\"d\",E).attr(\"transform\",O),Y.transition().ease(r.ease).duration(r.duration).attr(\"d\",E).attr(\"transform\",O);var H=B.selectAll(\".\"+r.cn.nodeLabel).data(m);H.enter().append(\"text\").classed(r.cn.nodeLabel,!0).attr(\"transform\",D).style(\"cursor\",\"default\").style(\"fill\",\"black\"),H.style(\"text-shadow\",(function(t){return t.horizontal?\"-1px 1px 1px #fff, 1px 1px 1px #fff, 1px -1px 1px #fff, -1px -1px 1px #fff\":\"none\"})).each((function(t){s.font(H,t.textFont)})),H.transition().ease(r.ease).duration(r.duration).attr(\"transform\",D);var V=H.selectAll(\".\"+r.cn.nodeLabelTextPath).data(m);V.enter().append(\"textPath\").classed(r.cn.nodeLabelTextPath,!0).attr(\"alignment-baseline\",\"middle\").attr(\"xlink:href\",(function(t){return\"#\"+t.uniqueNodeLabelPathId})).attr(\"startOffset\",P).style(\"fill\",I),V.text((function(t){return t.horizontal||t.node.dy>5?t.node.label:\"\"})).attr(\"text-anchor\",(function(t){return t.horizontal&&t.left?\"end\":\"start\"})),V.transition().ease(r.ease).duration(r.duration).attr(\"startOffset\",P).style(\"fill\",I)}},{\"../../components/color\":643,\"../../components/drawing\":665,\"../../lib\":778,\"../../lib/gup\":775,\"../../registry\":911,\"./constants\":1180,\"@plotly/d3-sankey\":56,\"@plotly/d3-sankey-circular\":55,d3:169,\"d3-force\":160,\"d3-interpolate\":162,tinycolor2:576}],1185:[function(t,e,n){\"use strict\";e.exports=function(t,e){for(var n=[],r=t.cd[0].trace,i=r._sankey.graph.nodes,a=0;a<i.length;a++){var o=i[a];if(!o.partOfGroup){var s=[(o.x0+o.x1)/2,(o.y0+o.y1)/2];\"v\"===r.orientation&&s.reverse(),e&&e.contains(s,!1,a,t)&&n.push({pointNumber:o.pointNumber})}}return n}},{}],1186:[function(t,e,n){\"use strict\";var r=t(\"../../lib\");e.exports=function(t,e){for(var n=0;n<t.length;n++)t[n].i=n;r.mergeArray(e.text,t,\"tx\"),r.mergeArray(e.texttemplate,t,\"txt\"),r.mergeArray(e.hovertext,t,\"htx\"),r.mergeArray(e.customdata,t,\"data\"),r.mergeArray(e.textposition,t,\"tp\"),e.textfont&&(r.mergeArrayCastPositive(e.textfont.size,t,\"ts\"),r.mergeArray(e.textfont.color,t,\"tc\"),r.mergeArray(e.textfont.family,t,\"tf\"));var i=e.marker;if(i){r.mergeArrayCastPositive(i.size,t,\"ms\"),r.mergeArrayCastPositive(i.opacity,t,\"mo\"),r.mergeArray(i.symbol,t,\"mx\"),r.mergeArray(i.color,t,\"mc\");var a=i.line;i.line&&(r.mergeArray(a.color,t,\"mlc\"),r.mergeArrayCastPositive(a.width,t,\"mlw\"));var o=i.gradient;o&&\"none\"!==o.type&&(r.mergeArray(o.type,t,\"mgt\"),r.mergeArray(o.color,t,\"mgc\"))}}},{\"../../lib\":778}],1187:[function(t,e,n){\"use strict\";var r=t(\"../../plots/template_attributes\").texttemplateAttrs,i=t(\"../../plots/template_attributes\").hovertemplateAttrs,a=t(\"../../components/colorscale/attributes\"),o=t(\"../../plots/font_attributes\"),s=t(\"../../components/drawing/attributes\").dash,l=t(\"../../components/drawing\"),c=t(\"./constants\"),u=t(\"../../lib/extend\").extendFlat;e.exports={x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\",anim:!0},x0:{valType:\"any\",dflt:0,editType:\"calc+clearAxisTypes\",anim:!0},dx:{valType:\"number\",dflt:1,editType:\"calc\",anim:!0},y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\",anim:!0},y0:{valType:\"any\",dflt:0,editType:\"calc+clearAxisTypes\",anim:!0},dy:{valType:\"number\",dflt:1,editType:\"calc\",anim:!0},xperiod:{valType:\"any\",dflt:0,editType:\"calc\"},yperiod:{valType:\"any\",dflt:0,editType:\"calc\"},xperiod0:{valType:\"any\",editType:\"calc\"},yperiod0:{valType:\"any\",editType:\"calc\"},xperiodalignment:{valType:\"enumerated\",values:[\"start\",\"middle\",\"end\"],dflt:\"middle\",editType:\"calc\"},yperiodalignment:{valType:\"enumerated\",values:[\"start\",\"middle\",\"end\"],dflt:\"middle\",editType:\"calc\"},stackgroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],editType:\"calc\"},groupnorm:{valType:\"enumerated\",values:[\"\",\"fraction\",\"percent\"],dflt:\"\",editType:\"calc\"},stackgaps:{valType:\"enumerated\",values:[\"infer zero\",\"interpolate\"],dflt:\"infer zero\",editType:\"calc\"},text:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},texttemplate:r({},{}),hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"style\"},mode:{valType:\"flaglist\",flags:[\"lines\",\"markers\",\"text\"],extras:[\"none\"],editType:\"calc\"},hoveron:{valType:\"flaglist\",flags:[\"points\",\"fills\"],editType:\"style\"},hovertemplate:i({},{keys:c.eventDataKeys}),line:{color:{valType:\"color\",editType:\"style\",anim:!0},width:{valType:\"number\",min:0,dflt:2,editType:\"style\",anim:!0},shape:{valType:\"enumerated\",values:[\"linear\",\"spline\",\"hv\",\"vh\",\"hvh\",\"vhv\"],dflt:\"linear\",editType:\"plot\"},smoothing:{valType:\"number\",min:0,max:1.3,dflt:1,editType:\"plot\"},dash:u({},s,{editType:\"style\"}),simplify:{valType:\"boolean\",dflt:!0,editType:\"plot\"},editType:\"plot\"},connectgaps:{valType:\"boolean\",dflt:!1,editType:\"calc\"},cliponaxis:{valType:\"boolean\",dflt:!0,editType:\"plot\"},fill:{valType:\"enumerated\",values:[\"none\",\"tozeroy\",\"tozerox\",\"tonexty\",\"tonextx\",\"toself\",\"tonext\"],editType:\"calc\"},fillcolor:{valType:\"color\",editType:\"style\",anim:!0},marker:u({symbol:{valType:\"enumerated\",values:l.symbolList,dflt:\"circle\",arrayOk:!0,editType:\"style\"},opacity:{valType:\"number\",min:0,max:1,arrayOk:!0,editType:\"style\",anim:!0},size:{valType:\"number\",min:0,dflt:6,arrayOk:!0,editType:\"calc\",anim:!0},maxdisplayed:{valType:\"number\",min:0,dflt:0,editType:\"plot\"},sizeref:{valType:\"number\",dflt:1,editType:\"calc\"},sizemin:{valType:\"number\",min:0,dflt:0,editType:\"calc\"},sizemode:{valType:\"enumerated\",values:[\"diameter\",\"area\"],dflt:\"diameter\",editType:\"calc\"},line:u({width:{valType:\"number\",min:0,arrayOk:!0,editType:\"style\",anim:!0},editType:\"calc\"},a(\"marker.line\",{anim:!0})),gradient:{type:{valType:\"enumerated\",values:[\"radial\",\"horizontal\",\"vertical\",\"none\"],arrayOk:!0,dflt:\"none\",editType:\"calc\"},color:{valType:\"color\",arrayOk:!0,editType:\"calc\"},editType:\"calc\"},editType:\"calc\"},a(\"marker\",{anim:!0})),selected:{marker:{opacity:{valType:\"number\",min:0,max:1,editType:\"style\"},color:{valType:\"color\",editType:\"style\"},size:{valType:\"number\",min:0,editType:\"style\"},editType:\"style\"},textfont:{color:{valType:\"color\",editType:\"style\"},editType:\"style\"},editType:\"style\"},unselected:{marker:{opacity:{valType:\"number\",min:0,max:1,editType:\"style\"},color:{valType:\"color\",editType:\"style\"},size:{valType:\"number\",min:0,editType:\"style\"},editType:\"style\"},textfont:{color:{valType:\"color\",editType:\"style\"},editType:\"style\"},editType:\"style\"},textposition:{valType:\"enumerated\",values:[\"top left\",\"top center\",\"top right\",\"middle left\",\"middle center\",\"middle right\",\"bottom left\",\"bottom center\",\"bottom right\"],dflt:\"middle center\",arrayOk:!0,editType:\"calc\"},textfont:o({editType:\"calc\",colorEditType:\"style\",arrayOk:!0}),r:{valType:\"data_array\",editType:\"calc\"},t:{valType:\"data_array\",editType:\"calc\"}}},{\"../../components/colorscale/attributes\":650,\"../../components/drawing\":665,\"../../components/drawing/attributes\":664,\"../../lib/extend\":768,\"../../plots/font_attributes\":856,\"../../plots/template_attributes\":906,\"./constants\":1191}],1188:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../lib\"),a=t(\"../../plots/cartesian/axes\"),o=t(\"../../plots/cartesian/align_period\"),s=t(\"../../constants/numerical\").BADNUM,l=t(\"./subtypes\"),c=t(\"./colorscale_calc\"),u=t(\"./arrays_to_calcdata\"),h=t(\"./calc_selection\");function d(t,e,n,r,i,o,s){var c=e._length,u=t._fullLayout,h=n._id,d=r._id,f=u._firstScatter[m(e)]===e.uid,p=(g(e,u,n,r)||{}).orientation,y=e.fill;n._minDtick=0,r._minDtick=0;var v={padded:!0},_={padded:!0};s&&(v.ppad=_.ppad=s);var b=c<2||i[0]!==i[c-1]||o[0]!==o[c-1];b&&(\"tozerox\"===y||\"tonextx\"===y&&(f||\"h\"===p))?v.tozero=!0:(e.error_y||{}).visible||\"tonexty\"!==y&&\"tozeroy\"!==y&&(l.hasMarkers(e)||l.hasText(e))||(v.padded=!1,v.ppad=0),b&&(\"tozeroy\"===y||\"tonexty\"===y&&(f||\"v\"===p))?_.tozero=!0:\"tonextx\"!==y&&\"tozerox\"!==y||(_.padded=!1),h&&(e._extremes[h]=a.findExtremes(n,i,v)),d&&(e._extremes[d]=a.findExtremes(r,o,_))}function f(t,e){if(l.hasMarkers(t)){var n,r=t.marker,o=1.6*(t.marker.sizeref||1);if(n=\"area\"===t.marker.sizemode?function(t){return Math.max(Math.sqrt((t||0)/o),3)}:function(t){return Math.max((t||0)/o,3)},i.isArrayOrTypedArray(r.size)){var s={type:\"linear\"};a.setConvert(s);for(var c=s.makeCalcdata(t.marker,\"size\"),u=new Array(e),h=0;h<e;h++)u[h]=n(c[h]);return u}return n(r.size)}}function p(t,e){var n=m(e),r=t._firstScatter;r[n]||(r[n]=e.uid)}function m(t){var e=t.stackgroup;return t.xaxis+t.yaxis+t.type+(e?\"-\"+e:\"\")}function g(t,e,n,r){var i=t.stackgroup;if(i){var a=e._scatterStackOpts[n._id+r._id][i],o=\"v\"===a.orientation?r:n;return\"linear\"===o.type||\"log\"===o.type?a:void 0}}e.exports={calc:function(t,e){var n,l,m,y,v,_,b=t._fullLayout,x=a.getFromId(t,e.xaxis||\"x\"),w=a.getFromId(t,e.yaxis||\"y\"),k=x.makeCalcdata(e,\"x\"),M=w.makeCalcdata(e,\"y\"),T=o(e,x,\"x\",k),S=o(e,w,\"y\",M),A=e._length,L=new Array(A),C=e.ids,E=g(e,b,x,w),O=!1;p(b,e);var D,I=\"x\",P=\"y\";E?(i.pushUnique(E.traceIndices,e._expandedIndex),(n=\"v\"===E.orientation)?(P=\"s\",D=\"x\"):(I=\"s\",D=\"y\"),v=\"interpolate\"===E.stackgaps):d(t,e,x,w,T,S,f(e,A));var R=!!e.xperiodalignment,z=!!e.yperiodalignment;for(l=0;l<A;l++){var j=L[l]={},F=r(T[l]),N=r(S[l]);F&&N?(j[I]=T[l],j[P]=S[l],R&&(j.orig_x=k[l]),z&&(j.orig_y=M[l])):E&&(n?F:N)?(j[D]=n?T[l]:S[l],j.gap=!0,v?(j.s=s,O=!0):j.s=0):j[I]=j[P]=s,C&&(j.id=String(C[l]))}if(u(L,e),c(t,e),h(L,e),E){for(l=0;l<L.length;)L[l][D]===s?L.splice(l,1):l++;if(i.sort(L,(function(t,e){return t[D]-e[D]||t.i-e.i})),O){for(l=0;l<L.length-1&&L[l].gap;)l++;for((_=L[l].s)||(_=L[l].s=0),m=0;m<l;m++)L[m].s=_;for(y=L.length-1;y>l&&L[y].gap;)y--;for(_=L[y].s,m=L.length-1;m>y;m--)L[m].s=_;for(;l<y;)if(L[++l].gap){for(m=l+1;L[m].gap;)m++;for(var B=L[l-1][D],Y=L[l-1].s,H=(L[m].s-Y)/(L[m][D]-B);l<m;)L[l].s=Y+(L[l][D]-B)*H,l++}}}return L},calcMarkerSize:f,calcAxisExpansion:d,setFirstScatter:p,getStackOpts:g}},{\"../../constants/numerical\":753,\"../../lib\":778,\"../../plots/cartesian/align_period\":825,\"../../plots/cartesian/axes\":828,\"./arrays_to_calcdata\":1186,\"./calc_selection\":1189,\"./colorscale_calc\":1190,\"./subtypes\":1212,\"fast-isnumeric\":241}],1189:[function(t,e,n){\"use strict\";var r=t(\"../../lib\");e.exports=function(t,e){r.isArrayOrTypedArray(e.selectedpoints)&&r.tagSelected(t,e)}},{\"../../lib\":778}],1190:[function(t,e,n){\"use strict\";var r=t(\"../../components/colorscale/helpers\").hasColorscale,i=t(\"../../components/colorscale/calc\"),a=t(\"./subtypes\");e.exports=function(t,e){a.hasLines(e)&&r(e,\"line\")&&i(t,e,{vals:e.line.color,containerStr:\"line\",cLetter:\"c\"}),a.hasMarkers(e)&&(r(e,\"marker\")&&i(t,e,{vals:e.marker.color,containerStr:\"marker\",cLetter:\"c\"}),r(e,\"marker.line\")&&i(t,e,{vals:e.marker.line.color,containerStr:\"marker.line\",cLetter:\"c\"}))}},{\"../../components/colorscale/calc\":651,\"../../components/colorscale/helpers\":654,\"./subtypes\":1212}],1191:[function(t,e,n){\"use strict\";e.exports={PTS_LINESONLY:20,minTolerance:.2,toleranceGrowth:10,maxScreensAway:20,eventDataKeys:[]}},{}],1192:[function(t,e,n){\"use strict\";var r=t(\"./calc\");function i(t,e,n,r,i,a,o){i[r]=!0;var s={i:null,gap:!0,s:0};if(s[o]=n,t.splice(e,0,s),e&&n===t[e-1][o]){var l=t[e-1];s.s=l.s,s.i=l.i,s.gap=l.gap}else a&&(s.s=function(t,e,n,r){var i=t[e-1],a=t[e+1];return a?i?i.s+(a.s-i.s)*(n-i[r])/(a[r]-i[r]):a.s:i.s}(t,e,n,o));e||(t[0].t=t[1].t,t[0].trace=t[1].trace,delete t[1].t,delete t[1].trace)}e.exports=function(t,e){var n=e.xaxis,a=e.yaxis,o=t._fullLayout._scatterStackOpts[n._id+a._id];if(o){var s,l,c,u,h,d,f,p,m,g,y,v,_,b,x,w=t.calcdata;for(var k in o){var M=(g=o[k]).traceIndices;if(M.length){for(y=\"interpolate\"===g.stackgaps,v=g.groupnorm,\"v\"===g.orientation?(_=\"x\",b=\"y\"):(_=\"y\",b=\"x\"),x=new Array(M.length),s=0;s<x.length;s++)x[s]=!1;d=w[M[0]];var T=new Array(d.length);for(s=0;s<d.length;s++)T[s]=d[s][_];for(s=1;s<M.length;s++){for(h=w[M[s]],l=c=0;l<h.length;l++){for(f=h[l][_];f>T[c]&&c<T.length;c++)i(h,l,T[c],s,x,y,_),l++;if(f!==T[c]){for(u=0;u<s;u++)i(w[M[u]],c,f,u,x,y,_);T.splice(c,0,f)}c++}for(;c<T.length;c++)i(h,l,T[c],s,x,y,_),l++}var S=T.length;for(l=0;l<d.length;l++){for(p=d[l][b]=d[l].s,s=1;s<M.length;s++)(h=w[M[s]])[0].trace._rawLength=h[0].trace._length,h[0].trace._length=S,h[l][b]=p+=h[l].s;if(v)for(m=(\"fraction\"===v?p:p/100)||1,s=0;s<M.length;s++){var A=w[M[s]][l];A[b]/=m,A.sNorm=A.s/m}}for(s=0;s<M.length;s++){var L=(h=w[M[s]])[0].trace,C=r.calcMarkerSize(L,L._rawLength),E=Array.isArray(C);if(C&&x[s]||E){var O=C;for(C=new Array(S),l=0;l<S;l++)C[l]=h[l].gap?0:E?O[h[l].i]:O}var D=new Array(S),I=new Array(S);for(l=0;l<S;l++)D[l]=h[l].x,I[l]=h[l].y;r.calcAxisExpansion(t,L,n,a,D,I,C),h[0].t.orientation=g.orientation}}}}}},{\"./calc\":1188}],1193:[function(t,e,n){\"use strict\";e.exports=function(t){for(var e=0;e<t.length;e++){var n=t[e];if(\"scatter\"===n.type){var r=n.fill;if(\"none\"!==r&&\"toself\"!==r&&(n.opacity=void 0,\"tonexty\"===r||\"tonextx\"===r))for(var i=e-1;i>=0;i--){var a=t[i];if(\"scatter\"===a.type&&a.xaxis===n.xaxis&&a.yaxis===n.yaxis){a.opacity=void 0;break}}}}}},{}],1194:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../registry\"),a=t(\"./attributes\"),o=t(\"./constants\"),s=t(\"./subtypes\"),l=t(\"./xy_defaults\"),c=t(\"./period_defaults\"),u=t(\"./stack_defaults\"),h=t(\"./marker_defaults\"),d=t(\"./line_defaults\"),f=t(\"./line_shape_defaults\"),p=t(\"./text_defaults\"),m=t(\"./fillcolor_defaults\");e.exports=function(t,e,n,g){function y(n,i){return r.coerce(t,e,a,n,i)}var v=l(t,e,g,y);if(v||(e.visible=!1),e.visible){c(t,e,g,y);var _=u(t,e,g,y),b=!_&&v<o.PTS_LINESONLY?\"lines+markers\":\"lines\";y(\"text\"),y(\"hovertext\"),y(\"mode\",b),s.hasLines(e)&&(d(t,e,n,g,y),f(t,e,y),y(\"connectgaps\"),y(\"line.simplify\")),s.hasMarkers(e)&&h(t,e,n,g,y,{gradient:!0}),s.hasText(e)&&(y(\"texttemplate\"),p(t,e,g,y));var x=[];(s.hasMarkers(e)||s.hasText(e))&&(y(\"cliponaxis\"),y(\"marker.maxdisplayed\"),x.push(\"points\")),y(\"fill\",_?_.fillDflt:\"none\"),\"none\"!==e.fill&&(m(t,e,n,y),s.hasLines(e)||f(t,e,y));var w=(e.line||{}).color,k=(e.marker||{}).color;\"tonext\"!==e.fill&&\"toself\"!==e.fill||x.push(\"fills\"),y(\"hoveron\",x.join(\"+\")||\"points\"),\"fills\"!==e.hoveron&&y(\"hovertemplate\");var M=i.getComponentMethod(\"errorbars\",\"supplyDefaults\");M(t,e,w||k||n,{axis:\"y\"}),M(t,e,w||k||n,{axis:\"x\",inherit:\"y\"}),r.coerceSelectionMarkerOpacity(e,y)}}},{\"../../lib\":778,\"../../registry\":911,\"./attributes\":1187,\"./constants\":1191,\"./fillcolor_defaults\":1195,\"./line_defaults\":1200,\"./line_shape_defaults\":1202,\"./marker_defaults\":1206,\"./period_defaults\":1207,\"./stack_defaults\":1210,\"./subtypes\":1212,\"./text_defaults\":1213,\"./xy_defaults\":1214}],1195:[function(t,e,n){\"use strict\";var r=t(\"../../components/color\"),i=t(\"../../lib\").isArrayOrTypedArray;e.exports=function(t,e,n,a){var o=!1;if(e.marker){var s=e.marker.color,l=(e.marker.line||{}).color;s&&!i(s)?o=s:l&&!i(l)&&(o=l)}a(\"fillcolor\",r.addOpacity((e.line||{}).color||o||n,.5))}},{\"../../components/color\":643,\"../../lib\":778}],1196:[function(t,e,n){\"use strict\";var r=t(\"../../plots/cartesian/axes\");e.exports=function(t,e,n){var i={},a={_fullLayout:n},o=r.getFromTrace(a,e,\"x\"),s=r.getFromTrace(a,e,\"y\");return i.xLabel=r.tickText(o,t.x,!0).text,i.yLabel=r.tickText(s,t.y,!0).text,i}},{\"../../plots/cartesian/axes\":828}],1197:[function(t,e,n){\"use strict\";var r=t(\"../../components/color\"),i=t(\"./subtypes\");e.exports=function(t,e){var n,a;if(\"lines\"===t.mode)return(n=t.line.color)&&r.opacity(n)?n:t.fillcolor;if(\"none\"===t.mode)return t.fill?t.fillcolor:\"\";var o=e.mcc||(t.marker||{}).color,s=e.mlcc||((t.marker||{}).line||{}).color;return(a=o&&r.opacity(o)?o:s&&r.opacity(s)&&(e.mlw||((t.marker||{}).line||{}).width)?s:\"\")?r.opacity(a)<.3?r.addOpacity(a,.3):a:(n=(t.line||{}).color)&&r.opacity(n)&&i.hasLines(t)&&t.line.width?n:t.fillcolor}},{\"../../components/color\":643,\"./subtypes\":1212}],1198:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../components/fx\"),a=t(\"../../registry\"),o=t(\"./get_trace_color\"),s=t(\"../../components/color\"),l=r.fillText;e.exports=function(t,e,n,c){var u=t.cd,h=u[0].trace,d=t.xa,f=t.ya,p=d.c2p(e),m=f.c2p(n),g=[p,m],y=h.hoveron||\"\",v=-1!==h.mode.indexOf(\"markers\")?3:.5;if(-1!==y.indexOf(\"points\")){var _=function(t){var e=Math.max(v,t.mrc||0),n=d.c2p(t.x)-p,r=f.c2p(t.y)-m;return Math.max(Math.sqrt(n*n+r*r)-e,1-v/e)},b=i.getDistanceFunction(c,(function(t){var e=Math.max(3,t.mrc||0),n=1-1/e,r=Math.abs(d.c2p(t.x)-p);return r<e?n*r/e:r-e+n}),(function(t){var e=Math.max(3,t.mrc||0),n=1-1/e,r=Math.abs(f.c2p(t.y)-m);return r<e?n*r/e:r-e+n}),_);if(i.getClosest(u,b,t),!1!==t.index){var x=u[t.index],w=d.c2p(x.x,!0),k=f.c2p(x.y,!0),M=x.mrc||1;t.index=x.i;var T=u[0].t.orientation,S=T&&(x.sNorm||x.s),A=\"h\"===T?S:void 0!==x.orig_x?x.orig_x:x.x,L=\"v\"===T?S:void 0!==x.orig_y?x.orig_y:x.y;return r.extendFlat(t,{color:o(h,x),x0:w-M,x1:w+M,xLabelVal:A,y0:k-M,y1:k+M,yLabelVal:L,spikeDistance:_(x),hovertemplate:h.hovertemplate}),l(x,h,t),a.getComponentMethod(\"errorbars\",\"hoverInfo\")(x,h,t),[t]}}if(-1!==y.indexOf(\"fills\")&&h._polygons){var C,E,O,D,I,P,R,z,j=h._polygons,F=[],N=!1,B=1/0,Y=-1/0,H=1/0,V=-1/0;for(C=0;C<j.length;C++)(O=j[C]).contains(g)&&(N=!N,F.push(O),H=Math.min(H,O.ymin),V=Math.max(V,O.ymax));if(N){var U=((H=Math.max(H,0))+(V=Math.min(V,f._length)))/2;for(C=0;C<F.length;C++)for(D=F[C].pts,E=1;E<D.length;E++)(R=D[E-1][1])>U!=(z=D[E][1])>=U&&(P=D[E-1][0],z-R&&(I=P+(D[E][0]-P)*(U-R)/(z-R),B=Math.min(B,I),Y=Math.max(Y,I)));B=Math.max(B,0),Y=Math.min(Y,d._length);var W=s.defaultLine;return s.opacity(h.fillcolor)?W=h.fillcolor:s.opacity((h.line||{}).color)&&(W=h.line.color),r.extendFlat(t,{distance:t.maxHoverDistance,x0:B,x1:Y,y0:U,y1:U,color:W,hovertemplate:!1}),delete t.index,t.text=h.text&&!Array.isArray(h.text)?String(h.text):h.name,[t]}}}},{\"../../components/color\":643,\"../../components/fx\":683,\"../../lib\":778,\"../../registry\":911,\"./get_trace_color\":1197}],1199:[function(t,e,n){\"use strict\";var r=t(\"./subtypes\");e.exports={hasLines:r.hasLines,hasMarkers:r.hasMarkers,hasText:r.hasText,isBubble:r.isBubble,attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),crossTraceDefaults:t(\"./cross_trace_defaults\"),calc:t(\"./calc\").calc,crossTraceCalc:t(\"./cross_trace_calc\"),arraysToCalcdata:t(\"./arrays_to_calcdata\"),plot:t(\"./plot\"),colorbar:t(\"./marker_colorbar\"),formatLabels:t(\"./format_labels\"),style:t(\"./style\").style,styleOnSelect:t(\"./style\").styleOnSelect,hoverPoints:t(\"./hover\"),selectPoints:t(\"./select\"),animatable:!0,moduleType:\"trace\",name:\"scatter\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"symbols\",\"errorBarsOK\",\"showLegend\",\"scatter-like\",\"zoomScale\"],meta:{}}},{\"../../plots/cartesian\":841,\"./arrays_to_calcdata\":1186,\"./attributes\":1187,\"./calc\":1188,\"./cross_trace_calc\":1192,\"./cross_trace_defaults\":1193,\"./defaults\":1194,\"./format_labels\":1196,\"./hover\":1198,\"./marker_colorbar\":1205,\"./plot\":1208,\"./select\":1209,\"./style\":1211,\"./subtypes\":1212}],1200:[function(t,e,n){\"use strict\";var r=t(\"../../lib\").isArrayOrTypedArray,i=t(\"../../components/colorscale/helpers\").hasColorscale,a=t(\"../../components/colorscale/defaults\");e.exports=function(t,e,n,o,s,l){var c=(t.marker||{}).color;s(\"line.color\",n),i(t,\"line\")?a(t,e,o,s,{prefix:\"line.\",cLetter:\"c\"}):s(\"line.color\",!r(c)&&c||n),s(\"line.width\"),(l||{}).noDash||s(\"line.dash\")}},{\"../../components/colorscale/defaults\":653,\"../../components/colorscale/helpers\":654,\"../../lib\":778}],1201:[function(t,e,n){\"use strict\";var r=t(\"../../constants/numerical\"),i=r.BADNUM,a=r.LOG_CLIP,o=a+.5,s=a-.5,l=t(\"../../lib\"),c=l.segmentsIntersect,u=l.constrain,h=t(\"./constants\");e.exports=function(t,e){var n,r,a,d,f,p,m,g,y,v,_,b,x,w,k,M,T,S,A=e.xaxis,L=e.yaxis,C=\"log\"===A.type,E=\"log\"===L.type,O=A._length,D=L._length,I=e.connectGaps,P=e.baseTolerance,R=e.shape,z=\"linear\"===R,j=e.fill&&\"none\"!==e.fill,F=[],N=h.minTolerance,B=t.length,Y=new Array(B),H=0;function V(n){var r=t[n];if(!r)return!1;var a=e.linearized?A.l2p(r.x):A.c2p(r.x),l=e.linearized?L.l2p(r.y):L.c2p(r.y);if(a===i){if(C&&(a=A.c2p(r.x,!0)),a===i)return!1;E&&l===i&&(a*=Math.abs(A._m*D*(A._m>0?o:s)/(L._m*O*(L._m>0?o:s)))),a*=1e3}if(l===i){if(E&&(l=L.c2p(r.y,!0)),l===i)return!1;l*=1e3}return[a,l]}function U(t,e,n,r){var i=n-t,a=r-e,o=.5-t,s=.5-e,l=i*i+a*a,c=i*o+a*s;if(c>0&&c<l){var u=o*a-s*i;if(u*u<l)return!0}}function W(t,e){var n=t[0]/O,r=t[1]/D,i=Math.max(0,-n,n-1,-r,r-1);return i&&void 0!==T&&U(n,r,T,S)&&(i=0),i&&e&&U(n,r,e[0]/O,e[1]/D)&&(i=0),(1+h.toleranceGrowth*i)*P}function q(t,e){var n=t[0]-e[0],r=t[1]-e[1];return Math.sqrt(n*n+r*r)}var G,X,Z,J,K,$,Q,tt=h.maxScreensAway,et=-O*tt,nt=O*(1+tt),rt=-D*tt,it=D*(1+tt),at=[[et,rt,nt,rt],[nt,rt,nt,it],[nt,it,et,it],[et,it,et,rt]];function ot(t){if(t[0]<et||t[0]>nt||t[1]<rt||t[1]>it)return[u(t[0],et,nt),u(t[1],rt,it)]}function st(t,e){return t[0]===e[0]&&(t[0]===et||t[0]===nt)||t[1]===e[1]&&(t[1]===rt||t[1]===it)||void 0}function lt(t,e,n){return function(r,i){var a=ot(r),o=ot(i),s=[];if(a&&o&&st(a,o))return s;a&&s.push(a),o&&s.push(o);var c=2*l.constrain((r[t]+i[t])/2,e,n)-((a||r)[t]+(o||i)[t]);return c&&((a&&o?c>0==a[t]>o[t]?a:o:a||o)[t]+=c),s}}function ct(t){var e=t[0],n=t[1],r=e===Y[H-1][0],i=n===Y[H-1][1];if(!r||!i)if(H>1){var a=e===Y[H-2][0],o=n===Y[H-2][1];r&&(e===et||e===nt)&&a?o?H--:Y[H-1]=t:i&&(n===rt||n===it)&&o?a?H--:Y[H-1]=t:Y[H++]=t}else Y[H++]=t}function ut(t){Y[H-1][0]!==t[0]&&Y[H-1][1]!==t[1]&&ct([Z,J]),ct(t),K=null,Z=J=0}function ht(t){if(T=t[0]/O,S=t[1]/D,X=t[1]<rt?rt:t[1]>it?it:0,(G=t[0]<et?et:t[0]>nt?nt:0)||X){if(H)if(K){var e=Q(K,t);e.length>1&&(ut(e[0]),Y[H++]=e[1])}else $=Q(Y[H-1],t)[0],Y[H++]=$;else Y[H++]=[G||t[0],X||t[1]];var n=Y[H-1];G&&X&&(n[0]!==G||n[1]!==X)?(K&&(Z!==G&&J!==X?ct(Z&&J?(o=((i=t)[1]-(r=K)[1])/(a=i[0]-r[0]),(r[1]*i[0]-i[1]*r[0])/a>0?[o>0?et:nt,it]:[o>0?nt:et,rt]):[Z||G,J||X]):Z&&J&&ct([Z,J])),ct([G,X])):Z-G&&J-X&&ct([G||Z,X||J]),K=t,Z=G,J=X}else K&&ut(Q(K,t)[0]),Y[H++]=t;var r,i,a,o}for(\"linear\"===R||\"spline\"===R?Q=function(t,e){for(var n=[],r=0,i=0;i<4;i++){var a=at[i],o=c(t[0],t[1],e[0],e[1],a[0],a[1],a[2],a[3]);o&&(!r||Math.abs(o.x-n[0][0])>1||Math.abs(o.y-n[0][1])>1)&&(o=[o.x,o.y],r&&q(o,t)<q(n[0],t)?n.unshift(o):n.push(o),r++)}return n}:\"hv\"===R||\"vh\"===R?Q=function(t,e){var n=[],r=ot(t),i=ot(e);return r&&i&&st(r,i)||(r&&n.push(r),i&&n.push(i)),n}:\"hvh\"===R?Q=lt(0,et,nt):\"vhv\"===R&&(Q=lt(1,rt,it)),n=0;n<B;n++)if(r=V(n)){for(H=0,K=null,ht(r),n++;n<B;n++){if(!(d=V(n))){if(I)continue;break}if(z&&e.simplify){var dt=V(n+1);if(v=q(d,r),j&&(0===H||H===B-1)||!(v<W(d,dt)*N)){for(g=[(d[0]-r[0])/v,(d[1]-r[1])/v],f=r,_=v,b=w=k=0,m=!1,a=d,n++;n<t.length;n++){if(p=dt,dt=V(n+1),!p){if(I)continue;break}if(M=(y=[p[0]-r[0],p[1]-r[1]])[0]*g[1]-y[1]*g[0],w=Math.min(w,M),(k=Math.max(k,M))-w>W(p,dt))break;a=p,(x=y[0]*g[0]+y[1]*g[1])>_?(_=x,d=p,m=!1):x<b&&(b=x,f=p,m=!0)}if(m?(ht(d),a!==f&&ht(f)):(f!==r&&ht(f),a!==d&&ht(d)),ht(a),n>=t.length||!p)break;ht(p),r=p}}else ht(d)}K&&ct([Z||K[0],J||K[1]]),F.push(Y.slice(0,H))}return F}},{\"../../constants/numerical\":753,\"../../lib\":778,\"./constants\":1191}],1202:[function(t,e,n){\"use strict\";e.exports=function(t,e,n){\"spline\"===n(\"line.shape\")&&n(\"line.smoothing\")}},{}],1203:[function(t,e,n){\"use strict\";var r={tonextx:1,tonexty:1,tonext:1};e.exports=function(t,e,n){var i,a,o,s,l,c={},u=!1,h=-1,d=0,f=-1;for(a=0;a<n.length;a++)(o=(i=n[a][0].trace).stackgroup||\"\")?o in c?l=c[o]:(l=c[o]=d,d++):i.fill in r&&f>=0?l=f:(l=f=d,d++),l<h&&(u=!0),i._groupIndex=h=l;var p=n.slice();u&&p.sort((function(t,e){var n=t[0].trace,r=e[0].trace;return n._groupIndex-r._groupIndex||n.index-r.index}));var m={};for(a=0;a<p.length;a++)o=(i=p[a][0].trace).stackgroup||\"\",!0===i.visible?(i._nexttrace=null,i.fill in r&&(i._prevtrace=(s=m[o])||null,s&&(s._nexttrace=i)),i._ownfill=i.fill&&(\"tozero\"===i.fill.substr(0,6)||\"toself\"===i.fill||\"to\"===i.fill.substr(0,2)&&!i._prevtrace),m[o]=i):i._prevtrace=i._nexttrace=i._ownfill=null;return p}},{}],1204:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\");e.exports=function(t){var e=t.marker,n=e.sizeref||1,i=e.sizemin||0,a=\"area\"===e.sizemode?function(t){return Math.sqrt(t/n)}:function(t){return t/n};return function(t){var e=a(t/2);return r(e)&&e>0?Math.max(e,i):0}}},{\"fast-isnumeric\":241}],1205:[function(t,e,n){\"use strict\";e.exports={container:\"marker\",min:\"cmin\",max:\"cmax\"}},{}],1206:[function(t,e,n){\"use strict\";var r=t(\"../../components/color\"),i=t(\"../../components/colorscale/helpers\").hasColorscale,a=t(\"../../components/colorscale/defaults\"),o=t(\"./subtypes\");e.exports=function(t,e,n,s,l,c){var u=o.isBubble(t),h=(t.line||{}).color;c=c||{},h&&(n=h),l(\"marker.symbol\"),l(\"marker.opacity\",u?.7:1),l(\"marker.size\"),l(\"marker.color\",n),i(t,\"marker\")&&a(t,e,s,l,{prefix:\"marker.\",cLetter:\"c\"}),c.noSelect||(l(\"selected.marker.color\"),l(\"unselected.marker.color\"),l(\"selected.marker.size\"),l(\"unselected.marker.size\")),c.noLine||(l(\"marker.line.color\",h&&!Array.isArray(h)&&e.marker.color!==h?h:u?r.background:r.defaultLine),i(t,\"marker.line\")&&a(t,e,s,l,{prefix:\"marker.line.\",cLetter:\"c\"}),l(\"marker.line.width\",u?1:0)),u&&(l(\"marker.sizeref\"),l(\"marker.sizemin\"),l(\"marker.sizemode\")),c.gradient&&\"none\"!==l(\"marker.gradient.type\")&&l(\"marker.gradient.color\")}},{\"../../components/color\":643,\"../../components/colorscale/defaults\":653,\"../../components/colorscale/helpers\":654,\"./subtypes\":1212}],1207:[function(t,e,n){\"use strict\";var r=t(\"../../lib\").dateTick0,i=t(\"../../constants/numerical\").ONEWEEK;function a(t,e){return r(e,t%i==0?1:0)}e.exports=function(t,e,n,r,i){if(i||(i={x:!0,y:!0}),i.x){var o=r(\"xperiod\");o&&(r(\"xperiod0\",a(o,e.xcalendar)),r(\"xperiodalignment\"))}if(i.y){var s=r(\"yperiod\");s&&(r(\"yperiod0\",a(s,e.ycalendar)),r(\"yperiodalignment\"))}}},{\"../../constants/numerical\":753,\"../../lib\":778}],1208:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../registry\"),a=t(\"../../lib\"),o=a.ensureSingle,s=a.identity,l=t(\"../../components/drawing\"),c=t(\"./subtypes\"),u=t(\"./line_points\"),h=t(\"./link_traces\"),d=t(\"../../lib/polygon\").tester;function f(t,e,n,h,f,p,m){var g;!function(t,e,n,i,o){var s=n.xaxis,l=n.yaxis,u=r.extent(a.simpleMap(s.range,s.r2c)),h=r.extent(a.simpleMap(l.range,l.r2c)),d=i[0].trace;if(c.hasMarkers(d)){var f=d.marker.maxdisplayed;if(0!==f){var p=i.filter((function(t){return t.x>=u[0]&&t.x<=u[1]&&t.y>=h[0]&&t.y<=h[1]})),m=Math.ceil(p.length/f),g=0;o.forEach((function(t,n){var r=t[0].trace;c.hasMarkers(r)&&r.marker.maxdisplayed>0&&n<e&&g++}));var y=Math.round(g*m/3+Math.floor(g/3)*m/7.1);i.forEach((function(t){delete t.vis})),p.forEach((function(t,e){0===Math.round((e+y)%m)&&(t.vis=!0)}))}}}(0,e,n,h,f);var y=!!m&&m.duration>0;function v(t){return y?t.transition():t}var _=n.xaxis,b=n.yaxis,x=h[0].trace,w=x.line,k=r.select(p),M=o(k,\"g\",\"errorbars\"),T=o(k,\"g\",\"lines\"),S=o(k,\"g\",\"points\"),A=o(k,\"g\",\"text\");if(i.getComponentMethod(\"errorbars\",\"plot\")(t,M,n,m),!0===x.visible){var L,C;v(k).style(\"opacity\",x.opacity);var E=x.fill.charAt(x.fill.length-1);\"x\"!==E&&\"y\"!==E&&(E=\"\"),h[0][n.isRangePlot?\"nodeRangePlot3\":\"node3\"]=k;var O,D,I=\"\",P=[],R=x._prevtrace;R&&(I=R._prevRevpath||\"\",C=R._nextFill,P=R._polygons);var z,j,F,N,B,Y,H,V=\"\",U=\"\",W=[],q=a.noop;if(L=x._ownFill,c.hasLines(x)||\"none\"!==x.fill){for(C&&C.datum(h),-1!==[\"hv\",\"vh\",\"hvh\",\"vhv\"].indexOf(w.shape)?(z=l.steps(w.shape),j=l.steps(w.shape.split(\"\").reverse().join(\"\"))):z=j=\"spline\"===w.shape?function(t){var e=t[t.length-1];return t.length>1&&t[0][0]===e[0]&&t[0][1]===e[1]?l.smoothclosed(t.slice(1),w.smoothing):l.smoothopen(t,w.smoothing)}:function(t){return\"M\"+t.join(\"L\")},F=function(t){return j(t.reverse())},W=u(h,{xaxis:_,yaxis:b,connectGaps:x.connectgaps,baseTolerance:Math.max(w.width||1,3)/4,shape:w.shape,simplify:w.simplify,fill:x.fill}),H=x._polygons=new Array(W.length),g=0;g<W.length;g++)x._polygons[g]=d(W[g]);W.length&&(N=W[0][0],Y=(B=W[W.length-1])[B.length-1]),q=function(t){return function(e){if(O=z(e),D=F(e),V?E?(V+=\"L\"+O.substr(1),U=D+\"L\"+U.substr(1)):(V+=\"Z\"+O,U=D+\"Z\"+U):(V=O,U=D),c.hasLines(x)&&e.length>1){var n=r.select(this);if(n.datum(h),t)v(n.style(\"opacity\",0).attr(\"d\",O).call(l.lineGroupStyle)).style(\"opacity\",1);else{var i=v(n);i.attr(\"d\",O),l.singleLineStyle(h,i)}}}}}var G=T.selectAll(\".js-line\").data(W);v(G.exit()).style(\"opacity\",0).remove(),G.each(q(!1)),G.enter().append(\"path\").classed(\"js-line\",!0).style(\"vector-effect\",\"non-scaling-stroke\").call(l.lineGroupStyle).each(q(!0)),l.setClipUrl(G,n.layerClipId,t),W.length?(L?(L.datum(h),N&&Y&&(E?(\"y\"===E?N[1]=Y[1]=b.c2p(0,!0):\"x\"===E&&(N[0]=Y[0]=_.c2p(0,!0)),v(L).attr(\"d\",\"M\"+Y+\"L\"+N+\"L\"+V.substr(1)).call(l.singleFillStyle)):v(L).attr(\"d\",V+\"Z\").call(l.singleFillStyle))):C&&(\"tonext\"===x.fill.substr(0,6)&&V&&I?(\"tonext\"===x.fill?v(C).attr(\"d\",V+\"Z\"+I+\"Z\").call(l.singleFillStyle):v(C).attr(\"d\",V+\"L\"+I.substr(1)+\"Z\").call(l.singleFillStyle),x._polygons=x._polygons.concat(P)):(Z(C),x._polygons=null)),x._prevRevpath=U,x._prevPolygons=H):(L?Z(L):C&&Z(C),x._polygons=x._prevRevpath=x._prevPolygons=null),S.datum(h),A.datum(h),function(e,i,a){var o,u=a[0].trace,h=c.hasMarkers(u),d=c.hasText(u),f=tt(u),p=et,m=et;if(h||d){var g=s,x=u.stackgroup,w=x&&\"infer zero\"===t._fullLayout._scatterStackOpts[_._id+b._id][x].stackgaps;u.marker.maxdisplayed||u._needsCull?g=w?K:J:x&&!w&&(g=$),h&&(p=g),d&&(m=g)}var k,M=(o=e.selectAll(\"path.point\").data(p,f)).enter().append(\"path\").classed(\"point\",!0);y&&M.call(l.pointStyle,u,t).call(l.translatePoints,_,b).style(\"opacity\",0).transition().style(\"opacity\",1),o.order(),h&&(k=l.makePointStyleFns(u)),o.each((function(e){var i=r.select(this),a=v(i);l.translatePoint(e,a,_,b)?(l.singlePointStyle(e,a,u,k,t),n.layerClipId&&l.hideOutsideRangePoint(e,a,_,b,u.xcalendar,u.ycalendar),u.customdata&&i.classed(\"plotly-customdata\",null!=e.data)):a.remove()})),y?o.exit().transition().style(\"opacity\",0).remove():o.exit().remove(),(o=i.selectAll(\"g\").data(m,f)).enter().append(\"g\").classed(\"textpoint\",!0).append(\"text\"),o.order(),o.each((function(t){var e=r.select(this),i=v(e.select(\"text\"));l.translatePoint(t,i,_,b)?n.layerClipId&&l.hideOutsideRangePoint(t,e,_,b,u.xcalendar,u.ycalendar):e.remove()})),o.selectAll(\"text\").call(l.textPointStyle,u,t).each((function(t){var e=_.c2p(t.x),n=b.c2p(t.y);r.select(this).selectAll(\"tspan.line\").each((function(){v(r.select(this)).attr({x:e,y:n})}))})),o.exit().remove()}(S,A,h);var X=!1===x.cliponaxis?null:n.layerClipId;l.setClipUrl(S,X,t),l.setClipUrl(A,X,t)}function Z(t){v(t).attr(\"d\",\"M0,0Z\")}function J(t){return t.filter((function(t){return!t.gap&&t.vis}))}function K(t){return t.filter((function(t){return t.vis}))}function $(t){return t.filter((function(t){return!t.gap}))}function Q(t){return t.id}function tt(t){if(t.ids)return Q}function et(){return!1}}e.exports=function(t,e,n,i,a,c){var u,d,p=!a,m=!!a&&a.duration>0,g=h(t,e,n);(u=i.selectAll(\"g.trace\").data(g,(function(t){return t[0].trace.uid}))).enter().append(\"g\").attr(\"class\",(function(t){return\"trace scatter trace\"+t[0].trace.uid})).style(\"stroke-miterlimit\",2),u.order(),function(t,e,n){e.each((function(e){var i=o(r.select(this),\"g\",\"fills\");l.setClipUrl(i,n.layerClipId,t);var a=e[0].trace,c=[];a._ownfill&&c.push(\"_ownFill\"),a._nexttrace&&c.push(\"_nextFill\");var u=i.selectAll(\"g\").data(c,s);u.enter().append(\"g\"),u.exit().each((function(t){a[t]=null})).remove(),u.order().each((function(t){a[t]=o(r.select(this),\"path\",\"js-fill\")}))}))}(t,u,e),m?(c&&(d=c()),r.transition().duration(a.duration).ease(a.easing).each(\"end\",(function(){d&&d()})).each(\"interrupt\",(function(){d&&d()})).each((function(){i.selectAll(\"g.trace\").each((function(n,r){f(t,r,e,n,g,this,a)}))}))):u.each((function(n,r){f(t,r,e,n,g,this,a)})),p&&u.exit().remove(),i.selectAll(\"path:not([d])\").remove()}},{\"../../components/drawing\":665,\"../../lib\":778,\"../../lib/polygon\":790,\"../../registry\":911,\"./line_points\":1201,\"./link_traces\":1203,\"./subtypes\":1212,d3:169}],1209:[function(t,e,n){\"use strict\";var r=t(\"./subtypes\");e.exports=function(t,e){var n,i,a,o,s=t.cd,l=t.xaxis,c=t.yaxis,u=[],h=s[0].trace;if(!r.hasMarkers(h)&&!r.hasText(h))return[];if(!1===e)for(n=0;n<s.length;n++)s[n].selected=0;else for(n=0;n<s.length;n++)a=l.c2p((i=s[n]).x),o=c.c2p(i.y),null!==i.i&&e.contains([a,o],!1,n,t)?(u.push({pointNumber:i.i,x:l.c2d(i.x),y:c.c2d(i.y)}),i.selected=1):i.selected=0;return u}},{\"./subtypes\":1212}],1210:[function(t,e,n){\"use strict\";var r=[\"orientation\",\"groupnorm\",\"stackgaps\"];e.exports=function(t,e,n,i){var a=n._scatterStackOpts,o=i(\"stackgroup\");if(o){var s=e.xaxis+e.yaxis,l=a[s];l||(l=a[s]={});var c=l[o],u=!1;c?c.traces.push(e):(c=l[o]={traceIndices:[],traces:[e]},u=!0);for(var h={orientation:e.x&&!e.y?\"h\":\"v\"},d=0;d<r.length;d++){var f=r[d],p=f+\"Found\";if(!c[p]){var m=void 0!==t[f],g=\"orientation\"===f;if((m||u)&&(c[f]=i(f,h[f]),g&&(c.fillDflt=\"h\"===c[f]?\"tonextx\":\"tonexty\"),m&&(c[p]=!0,!u&&(delete c.traces[0][f],g))))for(var y=0;y<c.traces.length-1;y++){var v=c.traces[y];v._input.fill!==v.fill&&(v.fill=c.fillDflt)}}}return c}}},{}],1211:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../components/drawing\"),a=t(\"../../registry\");function o(t,e,n){i.pointStyle(t.selectAll(\"path.point\"),e,n)}function s(t,e,n){i.textPointStyle(t.selectAll(\"text\"),e,n)}e.exports={style:function(t){var e=r.select(t).selectAll(\"g.trace.scatter\");e.style(\"opacity\",(function(t){return t[0].trace.opacity})),e.selectAll(\"g.points\").each((function(e){o(r.select(this),e.trace||e[0].trace,t)})),e.selectAll(\"g.text\").each((function(e){s(r.select(this),e.trace||e[0].trace,t)})),e.selectAll(\"g.trace path.js-line\").call(i.lineGroupStyle),e.selectAll(\"g.trace path.js-fill\").call(i.fillGroupStyle),a.getComponentMethod(\"errorbars\",\"style\")(e)},stylePoints:o,styleText:s,styleOnSelect:function(t,e,n){var r=e[0].trace;r.selectedpoints?(i.selectedPointStyle(n.selectAll(\"path.point\"),r),i.selectedTextStyle(n.selectAll(\"text\"),r)):(o(n,r,t),s(n,r,t))}}},{\"../../components/drawing\":665,\"../../registry\":911,d3:169}],1212:[function(t,e,n){\"use strict\";var r=t(\"../../lib\");e.exports={hasLines:function(t){return t.visible&&t.mode&&-1!==t.mode.indexOf(\"lines\")},hasMarkers:function(t){return t.visible&&(t.mode&&-1!==t.mode.indexOf(\"markers\")||\"splom\"===t.type)},hasText:function(t){return t.visible&&t.mode&&-1!==t.mode.indexOf(\"text\")},isBubble:function(t){return r.isPlainObject(t.marker)&&r.isArrayOrTypedArray(t.marker.size)}}},{\"../../lib\":778}],1213:[function(t,e,n){\"use strict\";var r=t(\"../../lib\");e.exports=function(t,e,n,i,a){a=a||{},i(\"textposition\"),r.coerceFont(i,\"textfont\",n.font),a.noSelect||(i(\"selected.textfont.color\"),i(\"unselected.textfont.color\"))}},{\"../../lib\":778}],1214:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../registry\");e.exports=function(t,e,n,a){var o,s=a(\"x\"),l=a(\"y\");if(i.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\"],n),s){var c=r.minRowLength(s);l?o=Math.min(c,r.minRowLength(l)):(o=c,a(\"y0\"),a(\"dy\"))}else{if(!l)return 0;o=r.minRowLength(l),a(\"x0\"),a(\"dx\")}return e._length=o,o}},{\"../../lib\":778,\"../../registry\":911}],1215:[function(t,e,n){\"use strict\";var r=t(\"../scatter/attributes\"),i=t(\"../../components/colorscale/attributes\"),a=t(\"../../plots/template_attributes\").hovertemplateAttrs,o=t(\"../../plots/template_attributes\").texttemplateAttrs,s=t(\"../../plots/attributes\"),l=t(\"../../constants/gl3d_dashes\"),c=t(\"../../constants/gl3d_markers\"),u=t(\"../../lib/extend\").extendFlat,h=t(\"../../plot_api/edit_types\").overrideAll,d=r.marker,f=d.line,p=u({width:r.line.width,dash:{valType:\"enumerated\",values:Object.keys(l),dflt:\"solid\"}},i(\"line\")),m=e.exports=h({x:r.x,y:r.y,z:{valType:\"data_array\"},text:u({},r.text,{}),texttemplate:o({},{}),hovertext:u({},r.hovertext,{}),hovertemplate:a(),mode:u({},r.mode,{dflt:\"lines+markers\"}),surfaceaxis:{valType:\"enumerated\",values:[-1,0,1,2],dflt:-1},surfacecolor:{valType:\"color\"},projection:{x:{show:{valType:\"boolean\",dflt:!1},opacity:{valType:\"number\",min:0,max:1,dflt:1},scale:{valType:\"number\",min:0,max:10,dflt:2/3}},y:{show:{valType:\"boolean\",dflt:!1},opacity:{valType:\"number\",min:0,max:1,dflt:1},scale:{valType:\"number\",min:0,max:10,dflt:2/3}},z:{show:{valType:\"boolean\",dflt:!1},opacity:{valType:\"number\",min:0,max:1,dflt:1},scale:{valType:\"number\",min:0,max:10,dflt:2/3}}},connectgaps:r.connectgaps,line:p,marker:u({symbol:{valType:\"enumerated\",values:Object.keys(c),dflt:\"circle\",arrayOk:!0},size:u({},d.size,{dflt:8}),sizeref:d.sizeref,sizemin:d.sizemin,sizemode:d.sizemode,opacity:u({},d.opacity,{arrayOk:!1}),colorbar:d.colorbar,line:u({width:u({},f.width,{arrayOk:!1})},i(\"marker.line\"))},i(\"marker\")),textposition:u({},r.textposition,{dflt:\"top center\"}),textfont:{color:r.textfont.color,size:r.textfont.size,family:u({},r.textfont.family,{arrayOk:!1})},hoverinfo:u({},s.hoverinfo)},\"calc\",\"nested\");m.x.editType=m.y.editType=m.z.editType=\"calc+clearAxisTypes\"},{\"../../components/colorscale/attributes\":650,\"../../constants/gl3d_dashes\":750,\"../../constants/gl3d_markers\":751,\"../../lib/extend\":768,\"../../plot_api/edit_types\":810,\"../../plots/attributes\":824,\"../../plots/template_attributes\":906,\"../scatter/attributes\":1187}],1216:[function(t,e,n){\"use strict\";var r=t(\"../scatter/arrays_to_calcdata\"),i=t(\"../scatter/colorscale_calc\");e.exports=function(t,e){var n=[{x:!1,y:!1,trace:e,t:{}}];return r(n,e),i(t,e),n}},{\"../scatter/arrays_to_calcdata\":1186,\"../scatter/colorscale_calc\":1190}],1217:[function(t,e,n){\"use strict\";var r=t(\"../../registry\");function i(t,e,n,i){if(!e||!e.visible)return null;for(var a=r.getComponentMethod(\"errorbars\",\"makeComputeError\")(e),o=new Array(t.length),s=0;s<t.length;s++){var l=a(+t[s],s);if(\"log\"===i.type){var c=i.c2l(t[s]),u=t[s]-l[0],h=t[s]+l[1];if(o[s]=[(i.c2l(u,!0)-c)*n,(i.c2l(h,!0)-c)*n],u>0){var d=i.c2l(u);i._lowerLogErrorBound||(i._lowerLogErrorBound=d),i._lowerErrorBound=Math.min(i._lowerLogErrorBound,d)}}else o[s]=[-l[0]*n,l[1]*n]}return o}e.exports=function(t,e,n){var r=[i(t.x,t.error_x,e[0],n.xaxis),i(t.y,t.error_y,e[1],n.yaxis),i(t.z,t.error_z,e[2],n.zaxis)],a=function(t){for(var e=0;e<t.length;e++)if(t[e])return t[e].length;return 0}(r);if(0===a)return null;for(var o=new Array(a),s=0;s<a;s++){for(var l=[[0,0,0],[0,0,0]],c=0;c<3;c++)if(r[c])for(var u=0;u<2;u++)l[u][c]=r[c][s][u];o[s]=l}return o}},{\"../../registry\":911}],1218:[function(t,e,n){\"use strict\";var r=t(\"gl-line3d\"),i=t(\"gl-scatter3d\"),a=t(\"gl-error3d\"),o=t(\"gl-mesh3d\"),s=t(\"delaunay-triangulate\"),l=t(\"../../lib\"),c=t(\"../../lib/str2rgbarray\"),u=t(\"../../lib/gl_format_color\").formatColor,h=t(\"../scatter/make_bubble_size_func\"),d=t(\"../../constants/gl3d_dashes\"),f=t(\"../../constants/gl3d_markers\"),p=t(\"../../plots/cartesian/axes\"),m=t(\"../../components/fx/helpers\").appendArrayPointValue,g=t(\"./calc_errors\");function y(t,e){this.scene=t,this.uid=e,this.linePlot=null,this.scatterPlot=null,this.errorBars=null,this.textMarkers=null,this.delaunayMesh=null,this.color=null,this.mode=\"\",this.dataPoints=[],this.axesBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.textLabels=null,this.data=null}var v=y.prototype;function _(t){return null==t?0:t.indexOf(\"left\")>-1?-1:t.indexOf(\"right\")>-1?1:0}function b(t){return null==t?0:t.indexOf(\"top\")>-1?-1:t.indexOf(\"bottom\")>-1?1:0}function x(t,e){return e(4*t)}function w(t){return f[t]}function k(t,e,n,r,i){var a=null;if(l.isArrayOrTypedArray(t)){a=[];for(var o=0;o<e;o++)a[o]=void 0===t[o]?r:n(t[o],i)}else a=n(t,l.identity);return a}function M(t){if(l.isArrayOrTypedArray(t)){var e=t[0];return l.isArrayOrTypedArray(e)&&(t=e),\"rgb(\"+t.slice(0,3).map((function(t){return Math.round(255*t)}))+\")\"}return null}function T(t){return l.isArrayOrTypedArray(t)?4===t.length&&\"number\"==typeof t[0]?M(t):t.map(M):null}v.handlePick=function(t){if(t.object&&(t.object===this.linePlot||t.object===this.delaunayMesh||t.object===this.textMarkers||t.object===this.scatterPlot)){var e=t.index=t.data.index;return t.object.highlight&&t.object.highlight(null),this.scatterPlot&&(t.object=this.scatterPlot,this.scatterPlot.highlight(t.data)),t.textLabel=\"\",this.textLabels&&(Array.isArray(this.textLabels)?(this.textLabels[e]||0===this.textLabels[e])&&(t.textLabel=this.textLabels[e]):t.textLabel=this.textLabels),t.traceCoordinate=[this.data.x[e],this.data.y[e],this.data.z[e]],!0}},v.update=function(t){var e,n,f,y,v=this.scene.glplot.gl,M=d.solid;this.data=t;var S=function(t,e){var n,r,i,a,o,s,d=[],f=t.fullSceneLayout,y=t.dataScale,v=f.xaxis,M=f.yaxis,T=f.zaxis,S=e.marker,A=e.line,L=e.x||[],C=e.y||[],E=e.z||[],O=L.length,D=e.xcalendar,I=e.ycalendar,P=e.zcalendar;for(o=0;o<O;o++)n=v.d2l(L[o],0,D)*y[0],r=M.d2l(C[o],0,I)*y[1],i=T.d2l(E[o],0,P)*y[2],d[o]=[n,r,i];if(Array.isArray(e.text))s=e.text;else if(void 0!==e.text)for(s=new Array(O),o=0;o<O;o++)s[o]=e.text;function R(t,e){var n=f[t];return p.tickText(n,n.d2l(e),!0).text}var z=e.texttemplate;if(z){var j=t.fullLayout._d3locale,F=Array.isArray(z),N=F?Math.min(z.length,O):O,B=F?function(t){return z[t]}:function(){return z};for(s=new Array(N),o=0;o<N;o++){var Y={x:L[o],y:C[o],z:E[o]},H={xLabel:R(\"xaxis\",L[o]),yLabel:R(\"yaxis\",C[o]),zLabel:R(\"zaxis\",E[o])},V={};m(V,e,o);var U=e._meta||{};s[o]=l.texttemplateString(B(o),H,j,V,Y,U)}}if(a={position:d,mode:e.mode,text:s},\"line\"in e&&(a.lineColor=u(A,1,O),a.lineWidth=A.width,a.lineDashes=A.dash),\"marker\"in e){var W=h(e);a.scatterColor=u(S,1,O),a.scatterSize=k(S.size,O,x,20,W),a.scatterMarker=k(S.symbol,O,w,\"\\u25cf\"),a.scatterLineWidth=S.line.width,a.scatterLineColor=u(S.line,1,O),a.scatterAngle=0}\"textposition\"in e&&(a.textOffset=function(t){var e=[0,0];if(Array.isArray(t))for(var n=0;n<t.length;n++)e[n]=[0,0],t[n]&&(e[n][0]=_(t[n]),e[n][1]=b(t[n]));else e[0]=_(t),e[1]=b(t);return e}(e.textposition),a.textColor=u(e.textfont,1,O),a.textSize=k(e.textfont.size,O,l.identity,12),a.textFont=e.textfont.family,a.textAngle=0);var q=[\"x\",\"y\",\"z\"];for(a.project=[!1,!1,!1],a.projectScale=[1,1,1],a.projectOpacity=[1,1,1],o=0;o<3;++o){var G=e.projection[q[o]];(a.project[o]=G.show)&&(a.projectOpacity[o]=G.opacity,a.projectScale[o]=G.scale)}a.errorBounds=g(e,y,f);var X=function(t){for(var e=[0,0,0],n=[[0,0,0],[0,0,0],[0,0,0]],r=[1,1,1],i=0;i<3;i++){var a=t[i];a&&!1!==a.copy_zstyle&&!1!==t[2].visible&&(a=t[2]),a&&a.visible&&(e[i]=a.width/2,n[i]=c(a.color),r[i]=a.thickness)}return{capSize:e,color:n,lineWidth:r}}([e.error_x,e.error_y,e.error_z]);return a.errorColor=X.color,a.errorLineWidth=X.lineWidth,a.errorCapSize=X.capSize,a.delaunayAxis=e.surfaceaxis,a.delaunayColor=c(e.surfacecolor),a}(this.scene,t);\"mode\"in S&&(this.mode=S.mode),\"lineDashes\"in S&&S.lineDashes in d&&(M=d[S.lineDashes]),this.color=T(S.scatterColor)||T(S.lineColor),this.dataPoints=S.position,e={gl:this.scene.glplot.gl,position:S.position,color:S.lineColor,lineWidth:S.lineWidth||1,dashes:M[0],dashScale:M[1],opacity:t.opacity,connectGaps:t.connectgaps},-1!==this.mode.indexOf(\"lines\")?this.linePlot?this.linePlot.update(e):(this.linePlot=r(e),this.linePlot._trace=this,this.scene.glplot.add(this.linePlot)):this.linePlot&&(this.scene.glplot.remove(this.linePlot),this.linePlot.dispose(),this.linePlot=null);var A=t.opacity;if(t.marker&&t.marker.opacity&&(A*=t.marker.opacity),n={gl:this.scene.glplot.gl,position:S.position,color:S.scatterColor,size:S.scatterSize,glyph:S.scatterMarker,opacity:A,orthographic:!0,lineWidth:S.scatterLineWidth,lineColor:S.scatterLineColor,project:S.project,projectScale:S.projectScale,projectOpacity:S.projectOpacity},-1!==this.mode.indexOf(\"markers\")?this.scatterPlot?this.scatterPlot.update(n):(this.scatterPlot=i(n),this.scatterPlot._trace=this,this.scatterPlot.highlightScale=1,this.scene.glplot.add(this.scatterPlot)):this.scatterPlot&&(this.scene.glplot.remove(this.scatterPlot),this.scatterPlot.dispose(),this.scatterPlot=null),y={gl:this.scene.glplot.gl,position:S.position,glyph:S.text,color:S.textColor,size:S.textSize,angle:S.textAngle,alignment:S.textOffset,font:S.textFont,orthographic:!0,lineWidth:0,project:!1,opacity:t.opacity},this.textLabels=t.hovertext||t.text,-1!==this.mode.indexOf(\"text\")?this.textMarkers?this.textMarkers.update(y):(this.textMarkers=i(y),this.textMarkers._trace=this,this.textMarkers.highlightScale=1,this.scene.glplot.add(this.textMarkers)):this.textMarkers&&(this.scene.glplot.remove(this.textMarkers),this.textMarkers.dispose(),this.textMarkers=null),f={gl:this.scene.glplot.gl,position:S.position,color:S.errorColor,error:S.errorBounds,lineWidth:S.errorLineWidth,capSize:S.errorCapSize,opacity:t.opacity},this.errorBars?S.errorBounds?this.errorBars.update(f):(this.scene.glplot.remove(this.errorBars),this.errorBars.dispose(),this.errorBars=null):S.errorBounds&&(this.errorBars=a(f),this.errorBars._trace=this,this.scene.glplot.add(this.errorBars)),S.delaunayAxis>=0){var L=function(t,e,n){var r,i=(n+1)%3,a=(n+2)%3,o=[],l=[];for(r=0;r<t.length;++r){var c=t[r];!isNaN(c[i])&&isFinite(c[i])&&!isNaN(c[a])&&isFinite(c[a])&&(o.push([c[i],c[a]]),l.push(r))}var u=s(o);for(r=0;r<u.length;++r)for(var h=u[r],d=0;d<h.length;++d)h[d]=l[h[d]];return{positions:t,cells:u,meshColor:e}}(S.position,S.delaunayColor,S.delaunayAxis);L.opacity=t.opacity,this.delaunayMesh?this.delaunayMesh.update(L):(L.gl=v,this.delaunayMesh=o(L),this.delaunayMesh._trace=this,this.scene.glplot.add(this.delaunayMesh))}else this.delaunayMesh&&(this.scene.glplot.remove(this.delaunayMesh),this.delaunayMesh.dispose(),this.delaunayMesh=null)},v.dispose=function(){this.linePlot&&(this.scene.glplot.remove(this.linePlot),this.linePlot.dispose()),this.scatterPlot&&(this.scene.glplot.remove(this.scatterPlot),this.scatterPlot.dispose()),this.errorBars&&(this.scene.glplot.remove(this.errorBars),this.errorBars.dispose()),this.textMarkers&&(this.scene.glplot.remove(this.textMarkers),this.textMarkers.dispose()),this.delaunayMesh&&(this.scene.glplot.remove(this.delaunayMesh),this.delaunayMesh.dispose())},e.exports=function(t,e){var n=new y(t,e.uid);return n.update(e),n}},{\"../../components/fx/helpers\":679,\"../../constants/gl3d_dashes\":750,\"../../constants/gl3d_markers\":751,\"../../lib\":778,\"../../lib/gl_format_color\":774,\"../../lib/str2rgbarray\":802,\"../../plots/cartesian/axes\":828,\"../scatter/make_bubble_size_func\":1204,\"./calc_errors\":1217,\"delaunay-triangulate\":171,\"gl-error3d\":266,\"gl-line3d\":275,\"gl-mesh3d\":309,\"gl-scatter3d\":330}],1219:[function(t,e,n){\"use strict\";var r=t(\"../../registry\"),i=t(\"../../lib\"),a=t(\"../scatter/subtypes\"),o=t(\"../scatter/marker_defaults\"),s=t(\"../scatter/line_defaults\"),l=t(\"../scatter/text_defaults\"),c=t(\"./attributes\");e.exports=function(t,e,n,u){function h(n,r){return i.coerce(t,e,c,n,r)}if(function(t,e,n,i){var a=0,o=n(\"x\"),s=n(\"y\"),l=n(\"z\");return r.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\",\"z\"],i),o&&s&&l&&(a=Math.min(o.length,s.length,l.length),e._length=e._xlength=e._ylength=e._zlength=a),a}(t,e,h,u)){h(\"text\"),h(\"hovertext\"),h(\"hovertemplate\"),h(\"mode\"),a.hasLines(e)&&(h(\"connectgaps\"),s(t,e,n,u,h)),a.hasMarkers(e)&&o(t,e,n,u,h,{noSelect:!0}),a.hasText(e)&&(h(\"texttemplate\"),l(t,e,u,h,{noSelect:!0}));var d=(e.line||{}).color,f=(e.marker||{}).color;h(\"surfaceaxis\")>=0&&h(\"surfacecolor\",d||f);for(var p=[\"x\",\"y\",\"z\"],m=0;m<3;++m){var g=\"projection.\"+p[m];h(g+\".show\")&&(h(g+\".opacity\"),h(g+\".scale\"))}var y=r.getComponentMethod(\"errorbars\",\"supplyDefaults\");y(t,e,d||f||n,{axis:\"z\"}),y(t,e,d||f||n,{axis:\"y\",inherit:\"z\"}),y(t,e,d||f||n,{axis:\"x\",inherit:\"z\"})}else e.visible=!1}},{\"../../lib\":778,\"../../registry\":911,\"../scatter/line_defaults\":1200,\"../scatter/marker_defaults\":1206,\"../scatter/subtypes\":1212,\"../scatter/text_defaults\":1213,\"./attributes\":1215}],1220:[function(t,e,n){\"use strict\";e.exports={plot:t(\"./convert\"),attributes:t(\"./attributes\"),markerSymbols:t(\"../../constants/gl3d_markers\"),supplyDefaults:t(\"./defaults\"),colorbar:[{container:\"marker\",min:\"cmin\",max:\"cmax\"},{container:\"line\",min:\"cmin\",max:\"cmax\"}],calc:t(\"./calc\"),moduleType:\"trace\",name:\"scatter3d\",basePlotModule:t(\"../../plots/gl3d\"),categories:[\"gl3d\",\"symbols\",\"showLegend\",\"scatter-like\"],meta:{}}},{\"../../constants/gl3d_markers\":751,\"../../plots/gl3d\":870,\"./attributes\":1215,\"./calc\":1216,\"./convert\":1218,\"./defaults\":1219}],1221:[function(t,e,n){\"use strict\";var r=t(\"../scatter/attributes\"),i=t(\"../../plots/attributes\"),a=t(\"../../plots/template_attributes\").hovertemplateAttrs,o=t(\"../../plots/template_attributes\").texttemplateAttrs,s=t(\"../../components/colorscale/attributes\"),l=t(\"../../lib/extend\").extendFlat,c=r.marker,u=r.line,h=c.line;e.exports={carpet:{valType:\"string\",editType:\"calc\"},a:{valType:\"data_array\",editType:\"calc\"},b:{valType:\"data_array\",editType:\"calc\"},mode:l({},r.mode,{dflt:\"markers\"}),text:l({},r.text,{}),texttemplate:o({editType:\"plot\"},{keys:[\"a\",\"b\",\"text\"]}),hovertext:l({},r.hovertext,{}),line:{color:u.color,width:u.width,dash:u.dash,shape:l({},u.shape,{values:[\"linear\",\"spline\"]}),smoothing:u.smoothing,editType:\"calc\"},connectgaps:r.connectgaps,fill:l({},r.fill,{values:[\"none\",\"toself\",\"tonext\"],dflt:\"none\"}),fillcolor:r.fillcolor,marker:l({symbol:c.symbol,opacity:c.opacity,maxdisplayed:c.maxdisplayed,size:c.size,sizeref:c.sizeref,sizemin:c.sizemin,sizemode:c.sizemode,line:l({width:h.width,editType:\"calc\"},s(\"marker.line\")),gradient:c.gradient,editType:\"calc\"},s(\"marker\")),textfont:r.textfont,textposition:r.textposition,selected:r.selected,unselected:r.unselected,hoverinfo:l({},i.hoverinfo,{flags:[\"a\",\"b\",\"text\",\"name\"]}),hoveron:r.hoveron,hovertemplate:a()}},{\"../../components/colorscale/attributes\":650,\"../../lib/extend\":768,\"../../plots/attributes\":824,\"../../plots/template_attributes\":906,\"../scatter/attributes\":1187}],1222:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../scatter/colorscale_calc\"),a=t(\"../scatter/arrays_to_calcdata\"),o=t(\"../scatter/calc_selection\"),s=t(\"../scatter/calc\").calcMarkerSize,l=t(\"../carpet/lookup_carpetid\");e.exports=function(t,e){var n=e._carpetTrace=l(t,e);if(n&&n.visible&&\"legendonly\"!==n.visible){var c;e.xaxis=n.xaxis,e.yaxis=n.yaxis;var u,h,d=e._length,f=new Array(d),p=!1;for(c=0;c<d;c++)if(h=e.b[c],r(u=e.a[c])&&r(h)){var m=n.ab2xy(+u,+h,!0),g=n.isVisible(+u,+h);g||(p=!0),f[c]={x:m[0],y:m[1],a:u,b:h,vis:g}}else f[c]={x:!1,y:!1};return e._needsCull=p,f[0].carpet=n,f[0].trace=e,s(e,d),i(t,e),a(f,e),o(f,e),f}}},{\"../carpet/lookup_carpetid\":981,\"../scatter/arrays_to_calcdata\":1186,\"../scatter/calc\":1188,\"../scatter/calc_selection\":1189,\"../scatter/colorscale_calc\":1190,\"fast-isnumeric\":241}],1223:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../scatter/constants\"),a=t(\"../scatter/subtypes\"),o=t(\"../scatter/marker_defaults\"),s=t(\"../scatter/line_defaults\"),l=t(\"../scatter/line_shape_defaults\"),c=t(\"../scatter/text_defaults\"),u=t(\"../scatter/fillcolor_defaults\"),h=t(\"./attributes\");e.exports=function(t,e,n,d){function f(n,i){return r.coerce(t,e,h,n,i)}f(\"carpet\"),e.xaxis=\"x\",e.yaxis=\"y\";var p=f(\"a\"),m=f(\"b\"),g=Math.min(p.length,m.length);if(g){e._length=g,f(\"text\"),f(\"texttemplate\"),f(\"hovertext\"),f(\"mode\",g<i.PTS_LINESONLY?\"lines+markers\":\"lines\"),a.hasLines(e)&&(s(t,e,n,d,f),l(t,e,f),f(\"connectgaps\")),a.hasMarkers(e)&&o(t,e,n,d,f,{gradient:!0}),a.hasText(e)&&c(t,e,d,f);var y=[];(a.hasMarkers(e)||a.hasText(e))&&(f(\"marker.maxdisplayed\"),y.push(\"points\")),f(\"fill\"),\"none\"!==e.fill&&(u(t,e,n,f),a.hasLines(e)||l(t,e,f)),\"tonext\"!==e.fill&&\"toself\"!==e.fill||y.push(\"fills\"),\"fills\"!==f(\"hoveron\",y.join(\"+\")||\"points\")&&f(\"hovertemplate\"),r.coerceSelectionMarkerOpacity(e,f)}else e.visible=!1}},{\"../../lib\":778,\"../scatter/constants\":1191,\"../scatter/fillcolor_defaults\":1195,\"../scatter/line_defaults\":1200,\"../scatter/line_shape_defaults\":1202,\"../scatter/marker_defaults\":1206,\"../scatter/subtypes\":1212,\"../scatter/text_defaults\":1213,\"./attributes\":1221}],1224:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,r,i){var a=r[i];return t.a=a.a,t.b=a.b,t.y=a.y,t}},{}],1225:[function(t,e,n){\"use strict\";e.exports=function(t,e){var n={},r=e._carpet,i=r.ab2ij([t.a,t.b]),a=Math.floor(i[0]),o=i[0]-a,s=Math.floor(i[1]),l=r.evalxy([],a,s,o,i[1]-s);return n.yLabel=l[1].toFixed(3),n}},{}],1226:[function(t,e,n){\"use strict\";var r=t(\"../scatter/hover\"),i=t(\"../../lib\").fillText;e.exports=function(t,e,n,a){var o=r(t,e,n,a);if(o&&!1!==o[0].index){var s=o[0];if(void 0===s.index){var l=t.xa._length,c=l*(1-s.y0/t.ya._length)/2,u=l-c;return s.x0=Math.max(Math.min(s.x0,u),c),s.x1=Math.max(Math.min(s.x1,u),c),o}var h=s.cd[s.index];s.a=h.a,s.b=h.b,s.xLabelVal=void 0,s.yLabelVal=void 0;var d=s.trace,f=d._carpet,p=d._module.formatLabels(h,d);s.yLabel=p.yLabel,delete s.text;var m=[];if(!d.hovertemplate){var g=(h.hi||d.hoverinfo).split(\"+\");-1!==g.indexOf(\"all\")&&(g=[\"a\",\"b\",\"text\"]),-1!==g.indexOf(\"a\")&&y(f.aaxis,h.a),-1!==g.indexOf(\"b\")&&y(f.baxis,h.b),m.push(\"y: \"+s.yLabel),-1!==g.indexOf(\"text\")&&i(h,d,m),s.extraText=m.join(\"<br>\")}return o}function y(t,e){var n;n=t.labelprefix&&t.labelprefix.length>0?t.labelprefix.replace(/ = $/,\"\"):t._hovertitle,m.push(n+\": \"+e.toFixed(3)+t.labelsuffix)}}},{\"../../lib\":778,\"../scatter/hover\":1198}],1227:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:t(\"../scatter/marker_colorbar\"),formatLabels:t(\"./format_labels\"),calc:t(\"./calc\"),plot:t(\"./plot\"),style:t(\"../scatter/style\").style,styleOnSelect:t(\"../scatter/style\").styleOnSelect,hoverPoints:t(\"./hover\"),selectPoints:t(\"../scatter/select\"),eventData:t(\"./event_data\"),moduleType:\"trace\",name:\"scattercarpet\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"svg\",\"carpet\",\"symbols\",\"showLegend\",\"carpetDependent\",\"zoomScale\"],meta:{}}},{\"../../plots/cartesian\":841,\"../scatter/marker_colorbar\":1205,\"../scatter/select\":1209,\"../scatter/style\":1211,\"./attributes\":1221,\"./calc\":1222,\"./defaults\":1223,\"./event_data\":1224,\"./format_labels\":1225,\"./hover\":1226,\"./plot\":1228}],1228:[function(t,e,n){\"use strict\";var r=t(\"../scatter/plot\"),i=t(\"../../plots/cartesian/axes\"),a=t(\"../../components/drawing\");e.exports=function(t,e,n,o){var s,l,c=n[0][0].carpet,u={xaxis:i.getFromId(t,c.xaxis||\"x\"),yaxis:i.getFromId(t,c.yaxis||\"y\"),plot:e.plot};for(r(t,u,n,o),s=0;s<n.length;s++)l=o.selectAll(\"g.trace\"+n[s][0].trace.uid+\" .js-line\"),a.setClipUrl(l,n[s][0].carpet._clipPathId,t)}},{\"../../components/drawing\":665,\"../../plots/cartesian/axes\":828,\"../scatter/plot\":1208}],1229:[function(t,e,n){\"use strict\";var r=t(\"../../plots/template_attributes\").hovertemplateAttrs,i=t(\"../../plots/template_attributes\").texttemplateAttrs,a=t(\"../scatter/attributes\"),o=t(\"../../plots/attributes\"),s=t(\"../../components/colorscale/attributes\"),l=t(\"../../components/drawing/attributes\").dash,c=t(\"../../lib/extend\").extendFlat,u=t(\"../../plot_api/edit_types\").overrideAll,h=a.marker,d=a.line,f=h.line;e.exports=u({lon:{valType:\"data_array\"},lat:{valType:\"data_array\"},locations:{valType:\"data_array\"},locationmode:{valType:\"enumerated\",values:[\"ISO-3\",\"USA-states\",\"country names\",\"geojson-id\"],dflt:\"ISO-3\"},geojson:{valType:\"any\",editType:\"calc\"},featureidkey:{valType:\"string\",editType:\"calc\",dflt:\"id\"},mode:c({},a.mode,{dflt:\"markers\"}),text:c({},a.text,{}),texttemplate:i({editType:\"plot\"},{keys:[\"lat\",\"lon\",\"location\",\"text\"]}),hovertext:c({},a.hovertext,{}),textfont:a.textfont,textposition:a.textposition,line:{color:d.color,width:d.width,dash:l},connectgaps:a.connectgaps,marker:c({symbol:h.symbol,opacity:h.opacity,size:h.size,sizeref:h.sizeref,sizemin:h.sizemin,sizemode:h.sizemode,colorbar:h.colorbar,line:c({width:f.width},s(\"marker.line\")),gradient:h.gradient},s(\"marker\")),fill:{valType:\"enumerated\",values:[\"none\",\"toself\"],dflt:\"none\"},fillcolor:a.fillcolor,selected:a.selected,unselected:a.unselected,hoverinfo:c({},o.hoverinfo,{flags:[\"lon\",\"lat\",\"location\",\"text\",\"name\"]}),hovertemplate:r()},\"calc\",\"nested\")},{\"../../components/colorscale/attributes\":650,\"../../components/drawing/attributes\":664,\"../../lib/extend\":768,\"../../plot_api/edit_types\":810,\"../../plots/attributes\":824,\"../../plots/template_attributes\":906,\"../scatter/attributes\":1187}],1230:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../constants/numerical\").BADNUM,a=t(\"../scatter/colorscale_calc\"),o=t(\"../scatter/arrays_to_calcdata\"),s=t(\"../scatter/calc_selection\"),l=t(\"../../lib\")._;function c(t){return t&&\"string\"==typeof t}e.exports=function(t,e){var n,u=Array.isArray(e.locations),h=u?e.locations.length:e._length,d=new Array(h);n=e.geojson?function(t){return c(t)||r(t)}:c;for(var f=0;f<h;f++){var p=d[f]={};if(u){var m=e.locations[f];p.loc=n(m)?m:null}else{var g=e.lon[f],y=e.lat[f];p.lonlat=r(g)&&r(y)?[+g,+y]:[i,i]}}return o(d,e),a(t,e),s(d,e),h&&(d[0].t={labels:{lat:l(t,\"lat:\")+\" \",lon:l(t,\"lon:\")+\" \"}}),d}},{\"../../constants/numerical\":753,\"../../lib\":778,\"../scatter/arrays_to_calcdata\":1186,\"../scatter/calc_selection\":1189,\"../scatter/colorscale_calc\":1190,\"fast-isnumeric\":241}],1231:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../scatter/subtypes\"),a=t(\"../scatter/marker_defaults\"),o=t(\"../scatter/line_defaults\"),s=t(\"../scatter/text_defaults\"),l=t(\"../scatter/fillcolor_defaults\"),c=t(\"./attributes\");e.exports=function(t,e,n,u){function h(n,i){return r.coerce(t,e,c,n,i)}var d,f=h(\"locations\");if(f&&f.length){var p,m=h(\"geojson\");(\"string\"==typeof m&&\"\"!==m||r.isPlainObject(m))&&(p=\"geojson-id\"),\"geojson-id\"===h(\"locationmode\",p)&&h(\"featureidkey\"),d=f.length}else{var g=h(\"lon\")||[],y=h(\"lat\")||[];d=Math.min(g.length,y.length)}d?(e._length=d,h(\"text\"),h(\"hovertext\"),h(\"hovertemplate\"),h(\"mode\"),i.hasLines(e)&&(o(t,e,n,u,h),h(\"connectgaps\")),i.hasMarkers(e)&&a(t,e,n,u,h,{gradient:!0}),i.hasText(e)&&(h(\"texttemplate\"),s(t,e,u,h)),h(\"fill\"),\"none\"!==e.fill&&l(t,e,n,h),r.coerceSelectionMarkerOpacity(e,h)):e.visible=!1}},{\"../../lib\":778,\"../scatter/fillcolor_defaults\":1195,\"../scatter/line_defaults\":1200,\"../scatter/marker_defaults\":1206,\"../scatter/subtypes\":1212,\"../scatter/text_defaults\":1213,\"./attributes\":1229}],1232:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,r,i){t.lon=e.lon,t.lat=e.lat,t.location=e.loc?e.loc:null;var a=r[i];return a.fIn&&a.fIn.properties&&(t.properties=a.fIn.properties),t}},{}],1233:[function(t,e,n){\"use strict\";var r=t(\"../../plots/cartesian/axes\");e.exports=function(t,e,n){var i={},a=n[e.geo]._subplot.mockAxis,o=t.lonlat;return i.lonLabel=r.tickText(a,a.c2l(o[0]),!0).text,i.latLabel=r.tickText(a,a.c2l(o[1]),!0).text,i}},{\"../../plots/cartesian/axes\":828}],1234:[function(t,e,n){\"use strict\";var r=t(\"../../components/fx\"),i=t(\"../../constants/numerical\").BADNUM,a=t(\"../scatter/get_trace_color\"),o=t(\"../../lib\").fillText,s=t(\"./attributes\");e.exports=function(t,e,n){var l=t.cd,c=l[0].trace,u=t.xa,h=t.ya,d=t.subplot,f=d.projection.isLonLatOverEdges,p=d.project;if(r.getClosest(l,(function(t){var r=t.lonlat;if(r[0]===i)return 1/0;if(f(r))return 1/0;var a=p(r),o=p([e,n]),s=Math.abs(a[0]-o[0]),l=Math.abs(a[1]-o[1]),c=Math.max(3,t.mrc||0);return Math.max(Math.sqrt(s*s+l*l)-c,1-3/c)}),t),!1!==t.index){var m=l[t.index],g=m.lonlat,y=[u.c2p(g),h.c2p(g)],v=m.mrc||1;t.x0=y[0]-v,t.x1=y[0]+v,t.y0=y[1]-v,t.y1=y[1]+v,t.loc=m.loc,t.lon=g[0],t.lat=g[1];var _={};_[c.geo]={_subplot:d};var b=c._module.formatLabels(m,c,_);return t.lonLabel=b.lonLabel,t.latLabel=b.latLabel,t.color=a(c,m),t.extraText=function(t,e,n,r){if(!t.hovertemplate){var i=e.hi||t.hoverinfo,a=\"all\"===i?s.hoverinfo.flags:i.split(\"+\"),l=-1!==a.indexOf(\"location\")&&Array.isArray(t.locations),c=-1!==a.indexOf(\"lon\"),u=-1!==a.indexOf(\"lat\"),h=-1!==a.indexOf(\"text\"),d=[];return l?d.push(e.loc):c&&u?d.push(\"(\"+f(n.lonLabel)+\", \"+f(n.latLabel)+\")\"):c?d.push(r.lon+f(n.lonLabel)):u&&d.push(r.lat+f(n.latLabel)),h&&o(e,t,d),d.join(\"<br>\")}function f(t){return t+\"\\xb0\"}}(c,m,t,l[0].t.labels),t.hovertemplate=c.hovertemplate,[t]}}},{\"../../components/fx\":683,\"../../constants/numerical\":753,\"../../lib\":778,\"../scatter/get_trace_color\":1197,\"./attributes\":1229}],1235:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:t(\"../scatter/marker_colorbar\"),formatLabels:t(\"./format_labels\"),calc:t(\"./calc\"),calcGeoJSON:t(\"./plot\").calcGeoJSON,plot:t(\"./plot\").plot,style:t(\"./style\"),styleOnSelect:t(\"../scatter/style\").styleOnSelect,hoverPoints:t(\"./hover\"),eventData:t(\"./event_data\"),selectPoints:t(\"./select\"),moduleType:\"trace\",name:\"scattergeo\",basePlotModule:t(\"../../plots/geo\"),categories:[\"geo\",\"symbols\",\"showLegend\",\"scatter-like\"],meta:{}}},{\"../../plots/geo\":860,\"../scatter/marker_colorbar\":1205,\"../scatter/style\":1211,\"./attributes\":1229,\"./calc\":1230,\"./defaults\":1231,\"./event_data\":1232,\"./format_labels\":1233,\"./hover\":1234,\"./plot\":1236,\"./select\":1237,\"./style\":1238}],1236:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../lib\"),a=t(\"../../lib/topojson_utils\").getTopojsonFeatures,o=t(\"../../lib/geojson_utils\"),s=t(\"../../lib/geo_location_utils\"),l=t(\"../../plots/cartesian/autorange\").findExtremes,c=t(\"../../constants/numerical\").BADNUM,u=t(\"../scatter/calc\").calcMarkerSize,h=t(\"../scatter/subtypes\"),d=t(\"./style\");e.exports={calcGeoJSON:function(t,e){var n,r,i=t[0].trace,o=e[i.geo],h=o._subplot,d=i._length;if(Array.isArray(i.locations)){var f=i.locationmode,p=\"geojson-id\"===f?s.extractTraceFeature(t):a(i,h.topojson);for(n=0;n<d;n++){r=t[n];var m=\"geojson-id\"===f?r.fOut:s.locationToFeature(f,r.loc,p);r.lonlat=m?m.properties.ct:[c,c]}}var g,y,v={padded:!0};if(\"geojson\"===o.fitbounds&&\"geojson-id\"===i.locationmode){var _=s.computeBbox(s.getTraceGeojson(i));g=[_[0],_[2]],y=[_[1],_[3]]}else{for(g=new Array(d),y=new Array(d),n=0;n<d;n++)g[n]=(r=t[n]).lonlat[0],y[n]=r.lonlat[1];v.ppad=u(i,d)}i._extremes.lon=l(o.lonaxis._ax,g,v),i._extremes.lat=l(o.lataxis._ax,y,v)},plot:function(t,e,n){var a=e.layers.frontplot.select(\".scatterlayer\"),s=i.makeTraceGroups(a,n,\"trace scattergeo\");function l(t,e){t.lonlat[0]===c&&r.select(e).remove()}s.selectAll(\"*\").remove(),s.each((function(e){var n=r.select(this),a=e[0].trace;if(h.hasLines(a)||\"none\"!==a.fill){var s=o.calcTraceToLineCoords(e),c=\"none\"!==a.fill?o.makePolygon(s):o.makeLine(s);n.selectAll(\"path.js-line\").data([{geojson:c,trace:a}]).enter().append(\"path\").classed(\"js-line\",!0).style(\"stroke-miterlimit\",2)}h.hasMarkers(a)&&n.selectAll(\"path.point\").data(i.identity).enter().append(\"path\").classed(\"point\",!0).each((function(t){l(t,this)})),h.hasText(a)&&n.selectAll(\"g\").data(i.identity).enter().append(\"g\").append(\"text\").each((function(t){l(t,this)})),d(t,e)}))}}},{\"../../constants/numerical\":753,\"../../lib\":778,\"../../lib/geo_location_utils\":771,\"../../lib/geojson_utils\":772,\"../../lib/topojson_utils\":806,\"../../plots/cartesian/autorange\":827,\"../scatter/calc\":1188,\"../scatter/subtypes\":1212,\"./style\":1238,d3:169}],1237:[function(t,e,n){\"use strict\";var r=t(\"../scatter/subtypes\"),i=t(\"../../constants/numerical\").BADNUM;e.exports=function(t,e){var n,a,o,s,l,c=t.cd,u=t.xaxis,h=t.yaxis,d=[],f=c[0].trace;if(!r.hasMarkers(f)&&!r.hasText(f))return[];if(!1===e)for(l=0;l<c.length;l++)c[l].selected=0;else for(l=0;l<c.length;l++)(a=(n=c[l]).lonlat)[0]!==i&&(o=u.c2p(a),s=h.c2p(a),e.contains([o,s],null,l,t)?(d.push({pointNumber:l,lon:a[0],lat:a[1]}),n.selected=1):n.selected=0);return d}},{\"../../constants/numerical\":753,\"../scatter/subtypes\":1212}],1238:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../components/drawing\"),a=t(\"../../components/color\"),o=t(\"../scatter/style\"),s=o.stylePoints,l=o.styleText;e.exports=function(t,e){e&&function(t,e){var n=e[0].trace,o=e[0].node3;o.style(\"opacity\",e[0].trace.opacity),s(o,n,t),l(o,n,t),o.selectAll(\"path.js-line\").style(\"fill\",\"none\").each((function(t){var e=r.select(this),n=t.trace,o=n.line||{};e.call(a.stroke,o.color).call(i.dashLine,o.dash||\"\",o.width||0),\"none\"!==n.fill&&e.call(a.fill,n.fillcolor)}))}(t,e)}},{\"../../components/color\":643,\"../../components/drawing\":665,\"../scatter/style\":1211,d3:169}],1239:[function(t,e,n){\"use strict\";var r=t(\"../../plots/attributes\"),i=t(\"../scatter/attributes\"),a=t(\"../../components/colorscale/attributes\"),o=t(\"../../lib/extend\").extendFlat,s=t(\"../../plot_api/edit_types\").overrideAll,l=t(\"./constants\").DASHES,c=i.line,u=i.marker,h=u.line,d=e.exports=s({x:i.x,x0:i.x0,dx:i.dx,y:i.y,y0:i.y0,dy:i.dy,xperiod:i.xperiod,yperiod:i.yperiod,xperiod0:i.xperiod0,yperiod0:i.yperiod0,xperiodalignment:i.xperiodalignment,yperiodalignment:i.yperiodalignment,text:i.text,hovertext:i.hovertext,textposition:i.textposition,textfont:i.textfont,mode:{valType:\"flaglist\",flags:[\"lines\",\"markers\",\"text\"],extras:[\"none\"]},line:{color:c.color,width:c.width,shape:{valType:\"enumerated\",values:[\"linear\",\"hv\",\"vh\",\"hvh\",\"vhv\"],dflt:\"linear\",editType:\"plot\"},dash:{valType:\"enumerated\",values:Object.keys(l),dflt:\"solid\"}},marker:o({},a(\"marker\"),{symbol:u.symbol,size:u.size,sizeref:u.sizeref,sizemin:u.sizemin,sizemode:u.sizemode,opacity:u.opacity,colorbar:u.colorbar,line:o({},a(\"marker.line\"),{width:h.width})}),connectgaps:i.connectgaps,fill:o({},i.fill,{dflt:\"none\"}),fillcolor:i.fillcolor,selected:{marker:i.selected.marker,textfont:i.selected.textfont},unselected:{marker:i.unselected.marker,textfont:i.unselected.textfont},opacity:r.opacity},\"calc\",\"nested\");d.x.editType=d.y.editType=d.x0.editType=d.y0.editType=\"calc+clearAxisTypes\",d.hovertemplate=i.hovertemplate,d.texttemplate=i.texttemplate},{\"../../components/colorscale/attributes\":650,\"../../lib/extend\":768,\"../../plot_api/edit_types\":810,\"../../plots/attributes\":824,\"../scatter/attributes\":1187,\"./constants\":1241}],1240:[function(t,e,n){\"use strict\";var r=t(\"@plotly/point-cluster\"),i=t(\"../../lib\"),a=t(\"../../plots/cartesian/axis_ids\"),o=t(\"../../plots/cartesian/autorange\").findExtremes,s=t(\"../../plots/cartesian/align_period\"),l=t(\"../scatter/calc\"),c=l.calcMarkerSize,u=l.calcAxisExpansion,h=l.setFirstScatter,d=t(\"../scatter/colorscale_calc\"),f=t(\"./convert\"),p=t(\"./scene_update\"),m=t(\"../../constants/numerical\").BADNUM,g=t(\"./constants\").TOO_MANY_POINTS;function y(t,e,n){var r=t._extremes[e._id],i=o(e,n._bnds,{padded:!0});r.min=r.min.concat(i.min),r.max=r.max.concat(i.max)}e.exports=function(t,e){var n,o,l,v=t._fullLayout,_=a.getFromId(t,e.xaxis),b=a.getFromId(t,e.yaxis),x=v._plots[e.xaxis+e.yaxis],w=e._length,k=w>=g,M=2*w,T={},S=_.makeCalcdata(e,\"x\"),A=b.makeCalcdata(e,\"y\"),L=s(e,_,\"x\",S),C=s(e,b,\"y\",A);e._x=L,e._y=C,e.xperiodalignment&&(e._origX=S),e.yperiodalignment&&(e._origY=A);var E=new Array(M);for(n=0;n<w;n++)l=C[n],E[2*n]=(o=L[n])===m?NaN:o,E[2*n+1]=l===m?NaN:l;if(\"log\"===_.type)for(n=0;n<M;n+=2)E[n]=_.c2l(E[n]);if(\"log\"===b.type)for(n=1;n<M;n+=2)E[n]=b.c2l(E[n]);if(k&&\"log\"!==_.type&&\"log\"!==b.type)T.tree=r(E);else{var O=T.ids=new Array(w);for(n=0;n<w;n++)O[n]=n}d(t,e);var D,I=function(t,e,n,r,a,o){var s=f.style(t,n);if(s.marker&&(s.marker.positions=r),s.line&&r.length>1&&i.extendFlat(s.line,f.linePositions(t,n,r)),s.errorX||s.errorY){var l=f.errorBarPositions(t,n,r,a,o);s.errorX&&i.extendFlat(s.errorX,l.x),s.errorY&&i.extendFlat(s.errorY,l.y)}return s.text&&(i.extendFlat(s.text,{positions:r},f.textPosition(t,n,s.text,s.marker)),i.extendFlat(s.textSel,{positions:r},f.textPosition(t,n,s.text,s.markerSel)),i.extendFlat(s.textUnsel,{positions:r},f.textPosition(t,n,s.text,s.markerUnsel))),s}(t,0,e,E,L,C),P=p(t,x);return h(v,e),k?I.marker&&(D=2*(I.marker.sizeAvg||Math.max(I.marker.size,3))):D=c(e,w),u(t,e,_,b,L,C,D),I.errorX&&y(e,_,I.errorX),I.errorY&&y(e,b,I.errorY),I.fill&&!P.fill2d&&(P.fill2d=!0),I.marker&&!P.scatter2d&&(P.scatter2d=!0),I.line&&!P.line2d&&(P.line2d=!0),!I.errorX&&!I.errorY||P.error2d||(P.error2d=!0),I.text&&!P.glText&&(P.glText=!0),I.marker&&(I.marker.snap=w),P.lineOptions.push(I.line),P.errorXOptions.push(I.errorX),P.errorYOptions.push(I.errorY),P.fillOptions.push(I.fill),P.markerOptions.push(I.marker),P.markerSelectedOptions.push(I.markerSel),P.markerUnselectedOptions.push(I.markerUnsel),P.textOptions.push(I.text),P.textSelectedOptions.push(I.textSel),P.textUnselectedOptions.push(I.textUnsel),P.selectBatch.push([]),P.unselectBatch.push([]),T._scene=P,T.index=P.count,T.x=L,T.y=C,T.positions=E,P.count++,[{x:!1,y:!1,t:T,trace:e}]}},{\"../../constants/numerical\":753,\"../../lib\":778,\"../../plots/cartesian/align_period\":825,\"../../plots/cartesian/autorange\":827,\"../../plots/cartesian/axis_ids\":831,\"../scatter/calc\":1188,\"../scatter/colorscale_calc\":1190,\"./constants\":1241,\"./convert\":1242,\"./scene_update\":1250,\"@plotly/point-cluster\":57}],1241:[function(t,e,n){\"use strict\";e.exports={TOO_MANY_POINTS:1e5,SYMBOL_SDF_SIZE:200,SYMBOL_SIZE:20,SYMBOL_STROKE:1,DOT_RE:/-dot/,OPEN_RE:/-open/,DASHES:{solid:[1],dot:[1,1],dash:[4,1],longdash:[8,1],dashdot:[4,1,1,1],longdashdot:[8,1,1,1]}}},{}],1242:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"svg-path-sdf\"),a=t(\"color-normalize\"),o=t(\"../../registry\"),s=t(\"../../lib\"),l=t(\"../../components/drawing\"),c=t(\"../../plots/cartesian/axis_ids\"),u=t(\"../../lib/gl_format_color\").formatColor,h=t(\"../scatter/subtypes\"),d=t(\"../scatter/make_bubble_size_func\"),f=t(\"./helpers\"),p=t(\"./constants\"),m=t(\"../../constants/interactions\").DESELECTDIM,g={start:1,left:1,end:-1,right:-1,middle:0,center:0,bottom:1,top:-1},y=t(\"../../components/fx/helpers\").appendArrayPointValue;function v(t,e){var n,i=t._fullLayout,a=e._length,o=e.textfont,l=e.textposition,c=Array.isArray(l)?l:[l],u=o.color,h=o.size,d=o.family,f={},p=e.texttemplate;if(p){f.text=[];var m=i._d3locale,g=Array.isArray(p),v=g?Math.min(p.length,a):a,_=g?function(t){return p[t]}:function(){return p};for(n=0;n<v;n++){var b={i:n},x=e._module.formatLabels(b,e,i),w={};y(w,e,n);var k=e._meta||{};f.text.push(s.texttemplateString(_(n),x,m,w,b,k))}}else f.text=Array.isArray(e.text)&&e.text.length<a?e.text.slice():e.text;if(Array.isArray(f.text))for(n=f.text.length;n<a;n++)f.text[n]=\"\";for(f.opacity=e.opacity,f.font={},f.align=[],f.baseline=[],n=0;n<c.length;n++){var M=c[n].split(/\\s+/);switch(M[1]){case\"left\":f.align.push(\"right\");break;case\"right\":f.align.push(\"left\");break;default:f.align.push(M[1])}switch(M[0]){case\"top\":f.baseline.push(\"bottom\");break;case\"bottom\":f.baseline.push(\"top\");break;default:f.baseline.push(M[0])}}if(Array.isArray(u))for(f.color=new Array(a),n=0;n<a;n++)f.color[n]=u[n];else f.color=u;if(s.isArrayOrTypedArray(h)||Array.isArray(d))for(f.font=new Array(a),n=0;n<a;n++){var T=f.font[n]={};T.size=s.isTypedArray(h)?h[n]:Array.isArray(h)?r(h[n])?h[n]:0:h,T.family=Array.isArray(d)?d[n]:d}else f.font={size:h,family:d};return f}function _(t){var e,n,r=t._length,i=t.marker,o={},l=s.isArrayOrTypedArray(i.symbol),c=s.isArrayOrTypedArray(i.color),h=s.isArrayOrTypedArray(i.line.color),p=s.isArrayOrTypedArray(i.opacity),m=s.isArrayOrTypedArray(i.size),g=s.isArrayOrTypedArray(i.line.width);if(l||(n=f.isOpenSymbol(i.symbol)),l||c||h||p){o.colors=new Array(r),o.borderColors=new Array(r);var y=u(i,i.opacity,r),v=u(i.line,i.opacity,r);if(!Array.isArray(v[0])){var _=v;for(v=Array(r),e=0;e<r;e++)v[e]=_}if(!Array.isArray(y[0])){var b=y;for(y=Array(r),e=0;e<r;e++)y[e]=b}for(o.colors=y,o.borderColors=v,e=0;e<r;e++)l&&(n=f.isOpenSymbol(i.symbol[e])),n&&(v[e]=y[e].slice(),y[e]=y[e].slice(),y[e][3]=0);o.opacity=t.opacity}else n?(o.color=a(i.color,\"uint8\"),o.color[3]=0,o.borderColor=a(i.color,\"uint8\")):(o.color=a(i.color,\"uint8\"),o.borderColor=a(i.line.color,\"uint8\")),o.opacity=t.opacity*i.opacity;if(l)for(o.markers=new Array(r),e=0;e<r;e++)o.markers[e]=L(i.symbol[e]);else o.marker=L(i.symbol);var x,w=d(t);if(m||g){var k,M=o.sizes=new Array(r),T=o.borderSizes=new Array(r),S=0;if(m){for(e=0;e<r;e++)M[e]=w(i.size[e]),S+=M[e];k=S/r}else for(x=w(i.size),e=0;e<r;e++)M[e]=x;if(g)for(e=0;e<r;e++)T[e]=i.line.width[e]/2;else for(x=i.line.width/2,e=0;e<r;e++)T[e]=x;o.sizeAvg=k}else o.size=w(i&&i.size||10),o.borderSizes=w(i.line.width);return o}function b(t,e){var n={};return e?(e.marker&&e.marker.symbol?n=_(s.extendFlat({},t.marker,e.marker)):e.marker&&(e.marker.size&&(n.size=e.marker.size/2),e.marker.color&&(n.colors=e.marker.color),void 0!==e.marker.opacity&&(n.opacity=e.marker.opacity)),n):n}function x(t,e,n){var r={};if(!n)return r;if(n.textfont){var i={opacity:1,text:e.text,texttemplate:e.texttemplate,textposition:e.textposition,textfont:s.extendFlat({},e.textfont)};n.textfont&&s.extendFlat(i.textfont,n.textfont),r=v(t,i)}return r}function w(t,e){var n={capSize:2*e.width,lineWidth:e.thickness,color:e.color};return e.copy_ystyle&&(n=t.error_y),n}var k=p.SYMBOL_SDF_SIZE,M=p.SYMBOL_SIZE,T=p.SYMBOL_STROKE,S={},A=l.symbolFuncs[0](.05*M);function L(t){if(\"circle\"===t)return null;var e,n,r=l.symbolNumber(t),a=l.symbolFuncs[r%100],o=!!l.symbolNoDot[r%100],s=!!l.symbolNoFill[r%100],c=f.isDotSymbol(t);return S[t]?S[t]:(e=c&&!o?a(1.1*M)+A:a(M),n=i(e,{w:k,h:k,viewBox:[-M,-M,M,M],stroke:s?T:-T}),S[t]=n,n||null)}e.exports={style:function(t,e){var n,r={marker:void 0,markerSel:void 0,markerUnsel:void 0,line:void 0,fill:void 0,errorX:void 0,errorY:void 0,text:void 0,textSel:void 0,textUnsel:void 0};if(!0!==e.visible)return r;if(h.hasText(e)&&(r.text=v(t,e),r.textSel=x(t,e,e.selected),r.textUnsel=x(t,e,e.unselected)),h.hasMarkers(e)&&(r.marker=_(e),r.markerSel=b(e,e.selected),r.markerUnsel=b(e,e.unselected),!e.unselected&&s.isArrayOrTypedArray(e.marker.opacity))){var i=e.marker.opacity;for(r.markerUnsel.opacity=new Array(i.length),n=0;n<i.length;n++)r.markerUnsel.opacity[n]=m*i[n]}if(h.hasLines(e)){r.line={overlay:!0,thickness:e.line.width,color:e.line.color,opacity:e.opacity};var a=(p.DASHES[e.line.dash]||[1]).slice();for(n=0;n<a.length;++n)a[n]*=e.line.width;r.line.dashes=a}return e.error_x&&e.error_x.visible&&(r.errorX=w(e,e.error_x)),e.error_y&&e.error_y.visible&&(r.errorY=w(e,e.error_y)),e.fill&&\"none\"!==e.fill&&(r.fill={closed:!0,fill:e.fillcolor,thickness:0}),r},markerStyle:_,markerSelection:b,linePositions:function(t,e,n){var r,i,a=n.length,o=a/2;if(h.hasLines(e)&&o)if(\"hv\"===e.line.shape){for(r=[],i=0;i<o-1;i++)isNaN(n[2*i])||isNaN(n[2*i+1])?r.push(NaN,NaN,NaN,NaN):(r.push(n[2*i],n[2*i+1]),isNaN(n[2*i+2])||isNaN(n[2*i+3])?r.push(NaN,NaN):r.push(n[2*i+2],n[2*i+1]));r.push(n[a-2],n[a-1])}else if(\"hvh\"===e.line.shape){for(r=[],i=0;i<o-1;i++)if(isNaN(n[2*i])||isNaN(n[2*i+1])||isNaN(n[2*i+2])||isNaN(n[2*i+3]))isNaN(n[2*i])||isNaN(n[2*i+1])?r.push(NaN,NaN):r.push(n[2*i],n[2*i+1]),r.push(NaN,NaN);else{var s=(n[2*i]+n[2*i+2])/2;r.push(n[2*i],n[2*i+1],s,n[2*i+1],s,n[2*i+3])}r.push(n[a-2],n[a-1])}else if(\"vhv\"===e.line.shape){for(r=[],i=0;i<o-1;i++)if(isNaN(n[2*i])||isNaN(n[2*i+1])||isNaN(n[2*i+2])||isNaN(n[2*i+3]))isNaN(n[2*i])||isNaN(n[2*i+1])?r.push(NaN,NaN):r.push(n[2*i],n[2*i+1]),r.push(NaN,NaN);else{var l=(n[2*i+1]+n[2*i+3])/2;r.push(n[2*i],n[2*i+1],n[2*i],l,n[2*i+2],l)}r.push(n[a-2],n[a-1])}else if(\"vh\"===e.line.shape){for(r=[],i=0;i<o-1;i++)isNaN(n[2*i])||isNaN(n[2*i+1])?r.push(NaN,NaN,NaN,NaN):(r.push(n[2*i],n[2*i+1]),isNaN(n[2*i+2])||isNaN(n[2*i+3])?r.push(NaN,NaN):r.push(n[2*i],n[2*i+3]));r.push(n[a-2],n[a-1])}else r=n;var c=!1;for(i=0;i<r.length;i++)if(isNaN(r[i])){c=!0;break}var u=c||r.length>p.TOO_MANY_POINTS||h.hasMarkers(e)?\"rect\":\"round\";if(c&&e.connectgaps){var d=r[0],f=r[1];for(i=0;i<r.length;i+=2)isNaN(r[i])||isNaN(r[i+1])?(r[i]=d,r[i+1]=f):(d=r[i],f=r[i+1])}return{join:u,positions:r}},errorBarPositions:function(t,e,n,i,a){var s=o.getComponentMethod(\"errorbars\",\"makeComputeError\"),l=c.getFromId(t,e.xaxis),u=c.getFromId(t,e.yaxis),h=n.length/2,d={};function f(t,i){var a=i._id.charAt(0),o=e[\"error_\"+a];if(o&&o.visible&&(\"linear\"===i.type||\"log\"===i.type)){for(var l=s(o),c={x:0,y:1}[a],u={x:[0,1,2,3],y:[2,3,0,1]}[a],f=new Float64Array(4*h),p=1/0,m=-1/0,g=0,y=0;g<h;g++,y+=4){var v=t[g];if(r(v)){var _=n[2*g+c],b=l(v,g),x=b[0],w=b[1];if(r(x)&&r(w)){var k=v+w;f[y+u[0]]=_-i.c2l(v-x),f[y+u[1]]=i.c2l(k)-_,f[y+u[2]]=0,f[y+u[3]]=0,p=Math.min(p,v-x),m=Math.max(m,v+w)}}}d[a]={positions:n,errors:f,_bnds:[p,m]}}}return f(i,l),f(a,u),d},textPosition:function(t,e,n,r){var i,a=e._length,o={};if(h.hasMarkers(e)){var s=n.font,l=n.align,c=n.baseline;for(o.offset=new Array(a),i=0;i<a;i++){var u=r.sizes?r.sizes[i]:r.size,d=Array.isArray(s)?s[i].size:s.size,f=Array.isArray(l)?l.length>1?l[i]:l[0]:l,p=Array.isArray(c)?c.length>1?c[i]:c[0]:c,m=g[p],y=u?u/.8+1:0;o.offset[i]=[g[f]*y/d,(-m*y-.5*m)/d]}}return o}}},{\"../../components/drawing\":665,\"../../components/fx/helpers\":679,\"../../constants/interactions\":752,\"../../lib\":778,\"../../lib/gl_format_color\":774,\"../../plots/cartesian/axis_ids\":831,\"../../registry\":911,\"../scatter/make_bubble_size_func\":1204,\"../scatter/subtypes\":1212,\"./constants\":1241,\"./helpers\":1246,\"color-normalize\":125,\"fast-isnumeric\":241,\"svg-path-sdf\":574}],1243:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../registry\"),a=t(\"./helpers\"),o=t(\"./attributes\"),s=t(\"../scatter/constants\"),l=t(\"../scatter/subtypes\"),c=t(\"../scatter/xy_defaults\"),u=t(\"../scatter/period_defaults\"),h=t(\"../scatter/marker_defaults\"),d=t(\"../scatter/line_defaults\"),f=t(\"../scatter/fillcolor_defaults\"),p=t(\"../scatter/text_defaults\");e.exports=function(t,e,n,m){function g(n,i){return r.coerce(t,e,o,n,i)}var y=!!t.marker&&a.isOpenSymbol(t.marker.symbol),v=l.isBubble(t),_=c(t,e,m,g);if(_){u(t,e,m,g);var b=_<s.PTS_LINESONLY?\"lines+markers\":\"lines\";g(\"text\"),g(\"hovertext\"),g(\"hovertemplate\"),g(\"mode\",b),l.hasLines(e)&&(g(\"connectgaps\"),d(t,e,n,m,g),g(\"line.shape\")),l.hasMarkers(e)&&(h(t,e,n,m,g),g(\"marker.line.width\",y||v?1:0)),l.hasText(e)&&(g(\"texttemplate\"),p(t,e,m,g));var x=(e.line||{}).color,w=(e.marker||{}).color;g(\"fill\"),\"none\"!==e.fill&&f(t,e,n,g);var k=i.getComponentMethod(\"errorbars\",\"supplyDefaults\");k(t,e,x||w||n,{axis:\"y\"}),k(t,e,x||w||n,{axis:\"x\",inherit:\"y\"}),r.coerceSelectionMarkerOpacity(e,g)}else e.visible=!1}},{\"../../lib\":778,\"../../registry\":911,\"../scatter/constants\":1191,\"../scatter/fillcolor_defaults\":1195,\"../scatter/line_defaults\":1200,\"../scatter/marker_defaults\":1206,\"../scatter/period_defaults\":1207,\"../scatter/subtypes\":1212,\"../scatter/text_defaults\":1213,\"../scatter/xy_defaults\":1214,\"./attributes\":1239,\"./helpers\":1246}],1244:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../components/color\"),a=t(\"../../constants/interactions\").DESELECTDIM;e.exports={styleTextSelection:function(t){var e,n,o=t[0],s=o.trace,l=o.t,c=l._scene,u=l.index,h=c.selectBatch[u],d=c.unselectBatch[u],f=c.textOptions[u],p=c.textSelectedOptions[u]||{},m=c.textUnselectedOptions[u]||{},g=r.extendFlat({},f);if(h.length||d.length){var y=p.color,v=m.color,_=f.color,b=Array.isArray(_);for(g.color=new Array(s._length),e=0;e<h.length;e++)g.color[n=h[e]]=y||(b?_[n]:_);for(e=0;e<d.length;e++){n=d[e];var x=b?_[n]:_;g.color[n]=v||(y?x:i.addOpacity(x,a))}}c.glText[u].update(g)}}},{\"../../components/color\":643,\"../../constants/interactions\":752,\"../../lib\":778}],1245:[function(t,e,n){\"use strict\";var r=t(\"../scatter/format_labels\");e.exports=function(t,e,n){var i=t.i;return\"x\"in t||(t.x=e._x[i]),\"y\"in t||(t.y=e._y[i]),r(t,e,n)}},{\"../scatter/format_labels\":1196}],1246:[function(t,e,n){\"use strict\";var r=t(\"./constants\");n.isOpenSymbol=function(t){return\"string\"==typeof t?r.OPEN_RE.test(t):t%200>100},n.isDotSymbol=function(t){return\"string\"==typeof t?r.DOT_RE.test(t):t>200}},{\"./constants\":1241}],1247:[function(t,e,n){\"use strict\";var r=t(\"../../registry\"),i=t(\"../../lib\"),a=t(\"../scatter/get_trace_color\");function o(t,e,n,o){var s=t.xa,l=t.ya,c=t.distance,u=t.dxy,h=t.index,d={pointNumber:h,x:e[h],y:n[h]};d.tx=Array.isArray(o.text)?o.text[h]:o.text,d.htx=Array.isArray(o.hovertext)?o.hovertext[h]:o.hovertext,d.data=Array.isArray(o.customdata)?o.customdata[h]:o.customdata,d.tp=Array.isArray(o.textposition)?o.textposition[h]:o.textposition;var f=o.textfont;f&&(d.ts=i.isArrayOrTypedArray(f.size)?f.size[h]:f.size,d.tc=Array.isArray(f.color)?f.color[h]:f.color,d.tf=Array.isArray(f.family)?f.family[h]:f.family);var p=o.marker;p&&(d.ms=i.isArrayOrTypedArray(p.size)?p.size[h]:p.size,d.mo=i.isArrayOrTypedArray(p.opacity)?p.opacity[h]:p.opacity,d.mx=i.isArrayOrTypedArray(p.symbol)?p.symbol[h]:p.symbol,d.mc=i.isArrayOrTypedArray(p.color)?p.color[h]:p.color);var m=p&&p.line;m&&(d.mlc=Array.isArray(m.color)?m.color[h]:m.color,d.mlw=i.isArrayOrTypedArray(m.width)?m.width[h]:m.width);var g=p&&p.gradient;g&&\"none\"!==g.type&&(d.mgt=Array.isArray(g.type)?g.type[h]:g.type,d.mgc=Array.isArray(g.color)?g.color[h]:g.color);var y=s.c2p(d.x,!0),v=l.c2p(d.y,!0),_=d.mrc||1,b=o.hoverlabel;b&&(d.hbg=Array.isArray(b.bgcolor)?b.bgcolor[h]:b.bgcolor,d.hbc=Array.isArray(b.bordercolor)?b.bordercolor[h]:b.bordercolor,d.hts=i.isArrayOrTypedArray(b.font.size)?b.font.size[h]:b.font.size,d.htc=Array.isArray(b.font.color)?b.font.color[h]:b.font.color,d.htf=Array.isArray(b.font.family)?b.font.family[h]:b.font.family,d.hnl=i.isArrayOrTypedArray(b.namelength)?b.namelength[h]:b.namelength);var x=o.hoverinfo;x&&(d.hi=Array.isArray(x)?x[h]:x);var w=o.hovertemplate;w&&(d.ht=Array.isArray(w)?w[h]:w);var k={};k[t.index]=d;var M=o._origX,T=o._origY,S=i.extendFlat({},t,{color:a(o,d),x0:y-_,x1:y+_,xLabelVal:M?M[h]:d.x,y0:v-_,y1:v+_,yLabelVal:T?T[h]:d.y,cd:k,distance:c,spikeDistance:u,hovertemplate:d.ht});return d.htx?S.text=d.htx:d.tx?S.text=d.tx:o.text&&(S.text=o.text),i.fillText(d,o,S),r.getComponentMethod(\"errorbars\",\"hoverInfo\")(d,o,S),S}e.exports={hoverPoints:function(t,e,n,r){var i,a,s,l,c,u,h,d,f,p=t.cd,m=p[0].t,g=p[0].trace,y=t.xa,v=t.ya,_=m.x,b=m.y,x=y.c2p(e),w=v.c2p(n),k=t.distance;if(m.tree){var M=y.p2c(x-k),T=y.p2c(x+k),S=v.p2c(w-k),A=v.p2c(w+k);i=\"x\"===r?m.tree.range(Math.min(M,T),Math.min(v._rl[0],v._rl[1]),Math.max(M,T),Math.max(v._rl[0],v._rl[1])):m.tree.range(Math.min(M,T),Math.min(S,A),Math.max(M,T),Math.max(S,A))}else i=m.ids;var L=k;if(\"x\"===r)for(c=0;c<i.length;c++)s=_[i[c]],(u=Math.abs(y.c2p(s)-x))<L&&(L=u,h=v.c2p(b[i[c]])-w,f=Math.sqrt(u*u+h*h),a=i[c]);else for(c=i.length-1;c>-1;c--)l=b[i[c]],u=y.c2p(s=_[i[c]])-x,h=v.c2p(l)-w,(d=Math.sqrt(u*u+h*h))<L&&(L=f=d,a=i[c]);return t.index=a,t.distance=L,t.dxy=f,void 0===a?[t]:[o(t,_,b,g)]},calcHover:o}},{\"../../lib\":778,\"../../registry\":911,\"../scatter/get_trace_color\":1197}],1248:[function(t,e,n){\"use strict\";var r=t(\"./hover\");e.exports={moduleType:\"trace\",name:\"scattergl\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"gl\",\"regl\",\"cartesian\",\"symbols\",\"errorBarsOK\",\"showLegend\",\"scatter-like\"],attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),crossTraceDefaults:t(\"../scatter/cross_trace_defaults\"),colorbar:t(\"../scatter/marker_colorbar\"),formatLabels:t(\"./format_labels\"),calc:t(\"./calc\"),plot:t(\"./plot\"),hoverPoints:r.hoverPoints,selectPoints:t(\"./select\"),meta:{}}},{\"../../plots/cartesian\":841,\"../scatter/cross_trace_defaults\":1193,\"../scatter/marker_colorbar\":1205,\"./attributes\":1239,\"./calc\":1240,\"./defaults\":1243,\"./format_labels\":1245,\"./hover\":1247,\"./plot\":1249,\"./select\":1251}],1249:[function(t,e,n){\"use strict\";var r=t(\"regl-scatter2d\"),i=t(\"regl-line2d\"),a=t(\"regl-error2d\"),o=t(\"gl-text\"),s=t(\"../../lib\"),l=t(\"../../components/dragelement/helpers\").selectMode,c=t(\"../../lib/prepare_regl\"),u=t(\"../scatter/subtypes\"),h=t(\"../scatter/link_traces\"),d=t(\"./edit_style\").styleTextSelection;function f(t,e,n){var r=t._size;return[r.l+e.domain[0]*r.w,r.b+n.domain[0]*r.h,t.width-r.r-(1-e.domain[1])*r.w,t.height-r.t-(1-n.domain[1])*r.h]}e.exports=function(t,e,n){if(n.length){var p,m,g=t._fullLayout,y=e._scene,v=e.xaxis,_=e.yaxis;if(y)if(c(t,[\"ANGLE_instanced_arrays\",\"OES_element_index_uint\"])){var b=y.count,x=g._glcanvas.data()[0].regl;if(h(t,e,n),y.dirty){if(!0===y.error2d&&(y.error2d=a(x)),!0===y.line2d&&(y.line2d=i(x)),!0===y.scatter2d&&(y.scatter2d=r(x,{constPointSize:!0})),!0===y.fill2d&&(y.fill2d=i(x)),!0===y.glText)for(y.glText=new Array(b),p=0;p<b;p++)y.glText[p]=new o(x);if(y.glText){if(b>y.glText.length){var w=b-y.glText.length;for(p=0;p<w;p++)y.glText.push(new o(x))}else b<y.glText.length&&y.glText.splice(b,y.glText.length-b).forEach((function(t){t.destroy()}));for(p=0;p<b;p++)y.glText[p].update(y.textOptions[p])}if(y.line2d&&(y.line2d.update(y.lineOptions),y.lineOptions=y.lineOptions.map((function(t){if(t&&t.positions){for(var e=t.positions,n=0;n<e.length&&(isNaN(e[n])||isNaN(e[n+1]));)n+=2;for(var r=e.length-2;r>n&&(isNaN(e[r])||isNaN(e[r+1]));)r-=2;t.positions=e.slice(n,r+2)}return t})),y.line2d.update(y.lineOptions)),y.error2d){var k=(y.errorXOptions||[]).concat(y.errorYOptions||[]);y.error2d.update(k)}y.scatter2d&&y.scatter2d.update(y.markerOptions),y.fillOrder=s.repeat(null,b),y.fill2d&&(y.fillOptions=y.fillOptions.map((function(t,e){var r=n[e];if(t&&r&&r[0]&&r[0].trace){var i,a,o=r[0],s=o.trace,l=o.t,c=y.lineOptions[e],u=[];s._ownfill&&u.push(e),s._nexttrace&&u.push(e+1),u.length&&(y.fillOrder[e]=u);var h,d,f=[],p=c&&c.positions||l.positions;if(\"tozeroy\"===s.fill){for(h=0;h<p.length&&isNaN(p[h+1]);)h+=2;for(d=p.length-2;d>h&&isNaN(p[d+1]);)d-=2;0!==p[h+1]&&(f=[p[h],0]),f=f.concat(p.slice(h,d+2)),0!==p[d+1]&&(f=f.concat([p[d],0]))}else if(\"tozerox\"===s.fill){for(h=0;h<p.length&&isNaN(p[h]);)h+=2;for(d=p.length-2;d>h&&isNaN(p[d]);)d-=2;0!==p[h]&&(f=[0,p[h+1]]),f=f.concat(p.slice(h,d+2)),0!==p[d]&&(f=f.concat([0,p[d+1]]))}else if(\"toself\"===s.fill||\"tonext\"===s.fill){for(f=[],i=0,a=0;a<p.length;a+=2)(isNaN(p[a])||isNaN(p[a+1]))&&((f=f.concat(p.slice(i,a))).push(p[i],p[i+1]),i=a+2);f=f.concat(p.slice(i)),i&&f.push(p[i],p[i+1])}else{var m=s._nexttrace;if(m){var g=y.lineOptions[e+1];if(g){var v=g.positions;if(\"tonexty\"===s.fill){for(f=p.slice(),e=Math.floor(v.length/2);e--;){var _=v[2*e],b=v[2*e+1];isNaN(_)||isNaN(b)||f.push(_,b)}t.fill=m.fillcolor}}}}if(s._prevtrace&&\"tonext\"===s._prevtrace.fill){var x=y.lineOptions[e-1].positions,w=f.length/2,k=[i=w];for(a=0;a<x.length;a+=2)(isNaN(x[a])||isNaN(x[a+1]))&&(k.push(a/2+w+1),i=a+2);f=f.concat(x),t.hole=k}return t.fillmode=s.fill,t.opacity=s.opacity,t.positions=f,t}})),y.fill2d.update(y.fillOptions))}var M=l(g.dragmode),T=g.clickmode.indexOf(\"select\")>-1;for(p=0;p<b;p++){var S=n[p][0],A=S.trace,L=S.t,C=L.index,E=A._length,O=L.x,D=L.y;if(A.selectedpoints||M||T){if(M||(M=!0),A.selectedpoints){var I=y.selectBatch[C]=s.selIndices2selPoints(A),P={};for(m=0;m<I.length;m++)P[I[m]]=1;var R=[];for(m=0;m<E;m++)P[m]||R.push(m);y.unselectBatch[C]=R}var z=L.xpx=new Array(E),j=L.ypx=new Array(E);for(m=0;m<E;m++)z[m]=v.c2p(O[m]),j[m]=_.c2p(D[m])}else L.xpx=L.ypx=null}if(M){if(y.select2d||(y.select2d=r(g._glcanvas.data()[1].regl)),y.scatter2d){var F=new Array(b);for(p=0;p<b;p++)F[p]=y.selectBatch[p].length||y.unselectBatch[p].length?y.markerUnselectedOptions[p]:{};y.scatter2d.update(F)}y.select2d&&(y.select2d.update(y.markerOptions),y.select2d.update(y.markerSelectedOptions)),y.glText&&n.forEach((function(t){u.hasText(((t||[])[0]||{}).trace||{})&&d(t)}))}else y.scatter2d&&y.scatter2d.update(y.markerOptions);var N={viewport:f(g,v,_),range:[(v._rl||v.range)[0],(_._rl||_.range)[0],(v._rl||v.range)[1],(_._rl||_.range)[1]]},B=s.repeat(N,y.count);y.fill2d&&y.fill2d.update(B),y.line2d&&y.line2d.update(B),y.error2d&&y.error2d.update(B.concat(B)),y.scatter2d&&y.scatter2d.update(B),y.select2d&&y.select2d.update(B),y.glText&&y.glText.forEach((function(t){t.update(N)}))}else y.init()}}},{\"../../components/dragelement/helpers\":661,\"../../lib\":778,\"../../lib/prepare_regl\":791,\"../scatter/link_traces\":1203,\"../scatter/subtypes\":1212,\"./edit_style\":1244,\"gl-text\":352,\"regl-error2d\":534,\"regl-line2d\":535,\"regl-scatter2d\":537}],1250:[function(t,e,n){\"use strict\";var r=t(\"../../lib\");e.exports=function(t,e){var n=e._scene,i={count:0,dirty:!0,lineOptions:[],fillOptions:[],markerOptions:[],markerSelectedOptions:[],markerUnselectedOptions:[],errorXOptions:[],errorYOptions:[],textOptions:[],textSelectedOptions:[],textUnselectedOptions:[],selectBatch:[],unselectBatch:[]},a={fill2d:!1,scatter2d:!1,error2d:!1,line2d:!1,glText:!1,select2d:!1};return e._scene||((n=e._scene={}).init=function(){r.extendFlat(n,a,i)},n.init(),n.update=function(t){var e=r.repeat(t,n.count);if(n.fill2d&&n.fill2d.update(e),n.scatter2d&&n.scatter2d.update(e),n.line2d&&n.line2d.update(e),n.error2d&&n.error2d.update(e.concat(e)),n.select2d&&n.select2d.update(e),n.glText)for(var i=0;i<n.count;i++)n.glText[i].update(t)},n.draw=function(){for(var t=n.count,e=n.fill2d,i=n.error2d,a=n.line2d,o=n.scatter2d,s=n.glText,l=n.select2d,c=n.selectBatch,u=n.unselectBatch,h=0;h<t;h++){if(e&&n.fillOrder[h]&&e.draw(n.fillOrder[h]),a&&n.lineOptions[h]&&a.draw(h),i&&(n.errorXOptions[h]&&i.draw(h),n.errorYOptions[h]&&i.draw(h+t)),o&&n.markerOptions[h])if(u[h].length){var d=r.repeat([],n.count);d[h]=u[h],o.draw(d)}else c[h].length||o.draw(h);s[h]&&n.textOptions[h]&&s[h].render()}l&&l.draw(c),n.dirty=!1},n.destroy=function(){n.fill2d&&n.fill2d.destroy&&n.fill2d.destroy(),n.scatter2d&&n.scatter2d.destroy&&n.scatter2d.destroy(),n.error2d&&n.error2d.destroy&&n.error2d.destroy(),n.line2d&&n.line2d.destroy&&n.line2d.destroy(),n.select2d&&n.select2d.destroy&&n.select2d.destroy(),n.glText&&n.glText.forEach((function(t){t.destroy&&t.destroy()})),n.lineOptions=null,n.fillOptions=null,n.markerOptions=null,n.markerSelectedOptions=null,n.markerUnselectedOptions=null,n.errorXOptions=null,n.errorYOptions=null,n.textOptions=null,n.textSelectedOptions=null,n.textUnselectedOptions=null,n.selectBatch=null,n.unselectBatch=null,e._scene=null}),n.dirty||r.extendFlat(n,i),n}},{\"../../lib\":778}],1251:[function(t,e,n){\"use strict\";var r=t(\"../scatter/subtypes\"),i=t(\"./edit_style\").styleTextSelection;e.exports=function(t,e){var n=t.cd,a=[],o=n[0].trace,s=n[0].t,l=o._length,c=s.x,u=s.y,h=s._scene,d=s.index;if(!h)return a;var f=r.hasText(o),p=r.hasMarkers(o);if(!0!==o.visible||!p&&!f)return a;var m=[],g=[];if(!1!==e&&!e.degenerate)for(var y=0;y<l;y++)e.contains([s.xpx[y],s.ypx[y]],!1,y,t)?(m.push(y),a.push({pointNumber:y,x:c[y],y:u[y]})):g.push(y);if(p){var v=h.scatter2d;if(m.length||g.length){if(!h.selectBatch[d].length&&!h.unselectBatch[d].length){var _=new Array(h.count);_[d]=h.markerUnselectedOptions[d],v.update.apply(v,_)}}else{var b=new Array(h.count);b[d]=h.markerOptions[d],v.update.apply(v,b)}}return h.selectBatch[d]=m,h.unselectBatch[d]=g,f&&i(n),a}},{\"../scatter/subtypes\":1212,\"./edit_style\":1244}],1252:[function(t,e,n){\"use strict\";var r=t(\"../../plots/template_attributes\").hovertemplateAttrs,i=t(\"../../plots/template_attributes\").texttemplateAttrs,a=t(\"../scattergeo/attributes\"),o=t(\"../scatter/attributes\"),s=t(\"../../plots/mapbox/layout_attributes\"),l=t(\"../../plots/attributes\"),c=t(\"../../components/colorscale/attributes\"),u=t(\"../../lib/extend\").extendFlat,h=t(\"../../plot_api/edit_types\").overrideAll,d=a.line,f=a.marker;e.exports=h({lon:a.lon,lat:a.lat,mode:u({},o.mode,{dflt:\"markers\"}),text:u({},o.text,{}),texttemplate:i({editType:\"plot\"},{keys:[\"lat\",\"lon\",\"text\"]}),hovertext:u({},o.hovertext,{}),line:{color:d.color,width:d.width},connectgaps:o.connectgaps,marker:u({symbol:{valType:\"string\",dflt:\"circle\",arrayOk:!0},angle:{valType:\"number\",dflt:\"auto\",arrayOk:!0},allowoverlap:{valType:\"boolean\",dflt:!1},opacity:f.opacity,size:f.size,sizeref:f.sizeref,sizemin:f.sizemin,sizemode:f.sizemode},c(\"marker\")),fill:a.fill,fillcolor:o.fillcolor,textfont:s.layers.symbol.textfont,textposition:s.layers.symbol.textposition,below:{valType:\"string\"},selected:{marker:o.selected.marker},unselected:{marker:o.unselected.marker},hoverinfo:u({},l.hoverinfo,{flags:[\"lon\",\"lat\",\"text\",\"name\"]}),hovertemplate:r()},\"calc\",\"nested\")},{\"../../components/colorscale/attributes\":650,\"../../lib/extend\":768,\"../../plot_api/edit_types\":810,\"../../plots/attributes\":824,\"../../plots/mapbox/layout_attributes\":887,\"../../plots/template_attributes\":906,\"../scatter/attributes\":1187,\"../scattergeo/attributes\":1229}],1253:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../lib\"),a=t(\"../../constants/numerical\").BADNUM,o=t(\"../../lib/geojson_utils\"),s=t(\"../../components/colorscale\"),l=t(\"../../components/drawing\"),c=t(\"../scatter/make_bubble_size_func\"),u=t(\"../scatter/subtypes\"),h=t(\"../../plots/mapbox/convert_text_opts\"),d=t(\"../../components/fx/helpers\").appendArrayPointValue,f=t(\"../../lib/svg_text_utils\").NEWLINES,p=t(\"../../lib/svg_text_utils\").BR_TAG_ALL;function m(){return{geojson:o.makeBlank(),layout:{visibility:\"none\"},paint:{}}}function g(t,e){return i.isArrayOrTypedArray(t)?e?function(e){return r(t[e])?+t[e]:0}:function(e){return t[e]}:t?function(){return t}:y}function y(){return\"\"}function v(t){return t[0]===a}e.exports=function(t,e){var n,a=e[0].trace,_=!0===a.visible&&0!==a._length,b=\"none\"!==a.fill,x=u.hasLines(a),w=u.hasMarkers(a),k=u.hasText(a),M=w&&\"circle\"===a.marker.symbol,T=w&&\"circle\"!==a.marker.symbol,S=m(),A=m(),L=m(),C=m(),E={fill:S,line:A,circle:L,symbol:C};if(!_)return E;if((b||x)&&(n=o.calcTraceToLineCoords(e)),b&&(S.geojson=o.makePolygon(n),S.layout.visibility=\"visible\",i.extendFlat(S.paint,{\"fill-color\":a.fillcolor})),x&&(A.geojson=o.makeLine(n),A.layout.visibility=\"visible\",i.extendFlat(A.paint,{\"line-width\":a.line.width,\"line-color\":a.line.color,\"line-opacity\":a.opacity})),M){var O=function(t){var e,n,a,o,u=t[0].trace,h=u.marker,d=u.selectedpoints,f=i.isArrayOrTypedArray(h.color),p=i.isArrayOrTypedArray(h.size),m=i.isArrayOrTypedArray(h.opacity);function g(t){return u.opacity*t}f&&(n=s.hasColorscale(u,\"marker\")?s.makeColorScaleFuncFromTrace(h):i.identity),p&&(a=c(u)),m&&(o=function(t){return g(r(t)?+i.constrain(t,0,1):0)});var y,_,b=[];for(e=0;e<t.length;e++){var x=t[e],w=x.lonlat;if(!v(w)){var k={};n&&(k.mcc=x.mcc=n(x.mc)),a&&(k.mrc=x.mrc=a(x.ms)),o&&(k.mo=o(x.mo)),d&&(k.selected=x.selected||0),b.push({type:\"Feature\",geometry:{type:\"Point\",coordinates:w},properties:k})}}if(d)for(y=l.makeSelectedPointStyleFns(u),e=0;e<b.length;e++){var M=b[e].properties;y.selectedOpacityFn&&(M.mo=g(y.selectedOpacityFn(M))),y.selectedColorFn&&(M.mcc=y.selectedColorFn(M)),y.selectedSizeFn&&(M.mrc=y.selectedSizeFn(M))}return{geojson:{type:\"FeatureCollection\",features:b},mcc:f||y&&y.selectedColorFn?{type:\"identity\",property:\"mcc\"}:h.color,mrc:p||y&&y.selectedSizeFn?{type:\"identity\",property:\"mrc\"}:(_=h.size,_/2),mo:m||y&&y.selectedOpacityFn?{type:\"identity\",property:\"mo\"}:g(h.opacity)}}(e);L.geojson=O.geojson,L.layout.visibility=\"visible\",i.extendFlat(L.paint,{\"circle-color\":O.mcc,\"circle-radius\":O.mrc,\"circle-opacity\":O.mo})}if((T||k)&&(C.geojson=function(t,e){for(var n=e._fullLayout,r=t[0].trace,a=r.marker||{},o=a.symbol,s=a.angle,l=\"circle\"!==o?g(o):y,c=\"auto\"!==s?g(s,!0):y,h=u.hasText(r)?g(r.text):y,m=[],_=0;_<t.length;_++){var b=t[_];if(!v(b.lonlat)){var x,w=r.texttemplate;if(w){var k=Array.isArray(w)?w[_]||\"\":w,M=r._module.formatLabels(b,r,n),T={};d(T,r,b.i),x=i.texttemplateString(k,M,n._d3locale,T,b,r._meta||{})}else x=h(_);x&&(x=x.replace(f,\"\").replace(p,\"\\n\")),m.push({type:\"Feature\",geometry:{type:\"Point\",coordinates:b.lonlat},properties:{symbol:l(_),angle:c(_),text:x}})}}return{type:\"FeatureCollection\",features:m}}(e,t),i.extendFlat(C.layout,{visibility:\"visible\",\"icon-image\":\"{symbol}-15\",\"text-field\":\"{text}\"}),T&&(i.extendFlat(C.layout,{\"icon-size\":a.marker.size/10}),\"angle\"in a.marker&&\"auto\"!==a.marker.angle&&i.extendFlat(C.layout,{\"icon-rotate\":{type:\"identity\",property:\"angle\"},\"icon-rotation-alignment\":\"map\"}),C.layout[\"icon-allow-overlap\"]=a.marker.allowoverlap,i.extendFlat(C.paint,{\"icon-opacity\":a.opacity*a.marker.opacity,\"icon-color\":a.marker.color})),k)){var D=h(a.textposition,(a.marker||{}).size);i.extendFlat(C.layout,{\"text-size\":a.textfont.size,\"text-anchor\":D.anchor,\"text-offset\":D.offset}),i.extendFlat(C.paint,{\"text-color\":a.textfont.color,\"text-opacity\":a.opacity})}return E}},{\"../../components/colorscale\":655,\"../../components/drawing\":665,\"../../components/fx/helpers\":679,\"../../constants/numerical\":753,\"../../lib\":778,\"../../lib/geojson_utils\":772,\"../../lib/svg_text_utils\":803,\"../../plots/mapbox/convert_text_opts\":884,\"../scatter/make_bubble_size_func\":1204,\"../scatter/subtypes\":1212,\"fast-isnumeric\":241}],1254:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../scatter/subtypes\"),a=t(\"../scatter/marker_defaults\"),o=t(\"../scatter/line_defaults\"),s=t(\"../scatter/text_defaults\"),l=t(\"../scatter/fillcolor_defaults\"),c=t(\"./attributes\");e.exports=function(t,e,n,u){function h(n,i){return r.coerce(t,e,c,n,i)}if(function(t,e,n){var r=n(\"lon\")||[],i=n(\"lat\")||[],a=Math.min(r.length,i.length);return e._length=a,a}(0,e,h)){if(h(\"text\"),h(\"texttemplate\"),h(\"hovertext\"),h(\"hovertemplate\"),h(\"mode\"),h(\"below\"),i.hasLines(e)&&(o(t,e,n,u,h,{noDash:!0}),h(\"connectgaps\")),i.hasMarkers(e)){a(t,e,n,u,h,{noLine:!0}),h(\"marker.allowoverlap\"),h(\"marker.angle\");var d=e.marker;\"circle\"!==d.symbol&&(r.isArrayOrTypedArray(d.size)&&(d.size=d.size[0]),r.isArrayOrTypedArray(d.color)&&(d.color=d.color[0]))}i.hasText(e)&&s(t,e,u,h,{noSelect:!0}),h(\"fill\"),\"none\"!==e.fill&&l(t,e,n,h),r.coerceSelectionMarkerOpacity(e,h)}else e.visible=!1}},{\"../../lib\":778,\"../scatter/fillcolor_defaults\":1195,\"../scatter/line_defaults\":1200,\"../scatter/marker_defaults\":1206,\"../scatter/subtypes\":1212,\"../scatter/text_defaults\":1213,\"./attributes\":1252}],1255:[function(t,e,n){\"use strict\";e.exports=function(t,e){return t.lon=e.lon,t.lat=e.lat,t}},{}],1256:[function(t,e,n){\"use strict\";var r=t(\"../../plots/cartesian/axes\");e.exports=function(t,e,n){var i={},a=n[e.subplot]._subplot.mockAxis,o=t.lonlat;return i.lonLabel=r.tickText(a,a.c2l(o[0]),!0).text,i.latLabel=r.tickText(a,a.c2l(o[1]),!0).text,i}},{\"../../plots/cartesian/axes\":828}],1257:[function(t,e,n){\"use strict\";var r=t(\"../../components/fx\"),i=t(\"../../lib\"),a=t(\"../scatter/get_trace_color\"),o=i.fillText,s=t(\"../../constants/numerical\").BADNUM;e.exports=function(t,e,n){var l=t.cd,c=l[0].trace,u=t.xa,h=t.ya,d=t.subplot,f=360*(e>=0?Math.floor((e+180)/360):Math.ceil((e-180)/360)),p=e-f;if(r.getClosest(l,(function(t){var e=t.lonlat;if(e[0]===s)return 1/0;var r=i.modHalf(e[0],360),a=e[1],o=d.project([r,a]),l=o.x-u.c2p([p,a]),c=o.y-h.c2p([r,n]),f=Math.max(3,t.mrc||0);return Math.max(Math.sqrt(l*l+c*c)-f,1-3/f)}),t),!1!==t.index){var m=l[t.index],g=m.lonlat,y=[i.modHalf(g[0],360)+f,g[1]],v=u.c2p(y),_=h.c2p(y),b=m.mrc||1;t.x0=v-b,t.x1=v+b,t.y0=_-b,t.y1=_+b;var x={};x[c.subplot]={_subplot:d};var w=c._module.formatLabels(m,c,x);return t.lonLabel=w.lonLabel,t.latLabel=w.latLabel,t.color=a(c,m),t.extraText=function(t,e,n){if(!t.hovertemplate){var r=(e.hi||t.hoverinfo).split(\"+\"),i=-1!==r.indexOf(\"all\"),a=-1!==r.indexOf(\"lon\"),s=-1!==r.indexOf(\"lat\"),l=e.lonlat,c=[];return i||a&&s?c.push(\"(\"+u(l[0])+\", \"+u(l[1])+\")\"):a?c.push(n.lon+u(l[0])):s&&c.push(n.lat+u(l[1])),(i||-1!==r.indexOf(\"text\"))&&o(e,t,c),c.join(\"<br>\")}function u(t){return t+\"\\xb0\"}}(c,m,l[0].t.labels),t.hovertemplate=c.hovertemplate,[t]}}},{\"../../components/fx\":683,\"../../constants/numerical\":753,\"../../lib\":778,\"../scatter/get_trace_color\":1197}],1258:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:t(\"../scatter/marker_colorbar\"),formatLabels:t(\"./format_labels\"),calc:t(\"../scattergeo/calc\"),plot:t(\"./plot\"),hoverPoints:t(\"./hover\"),eventData:t(\"./event_data\"),selectPoints:t(\"./select\"),styleOnSelect:function(t,e){e&&e[0].trace._glTrace.update(e)},moduleType:\"trace\",name:\"scattermapbox\",basePlotModule:t(\"../../plots/mapbox\"),categories:[\"mapbox\",\"gl\",\"symbols\",\"showLegend\",\"scatter-like\"],meta:{}}},{\"../../plots/mapbox\":885,\"../scatter/marker_colorbar\":1205,\"../scattergeo/calc\":1230,\"./attributes\":1252,\"./defaults\":1254,\"./event_data\":1255,\"./format_labels\":1256,\"./hover\":1257,\"./plot\":1259,\"./select\":1260}],1259:[function(t,e,n){\"use strict\";var r=t(\"./convert\"),i=t(\"../../plots/mapbox/constants\").traceLayerPrefix,a=[\"fill\",\"line\",\"circle\",\"symbol\"];function o(t,e){this.type=\"scattermapbox\",this.subplot=t,this.uid=e,this.sourceIds={fill:\"source-\"+e+\"-fill\",line:\"source-\"+e+\"-line\",circle:\"source-\"+e+\"-circle\",symbol:\"source-\"+e+\"-symbol\"},this.layerIds={fill:i+e+\"-fill\",line:i+e+\"-line\",circle:i+e+\"-circle\",symbol:i+e+\"-symbol\"},this.below=null}var s=o.prototype;s.addSource=function(t,e){this.subplot.map.addSource(this.sourceIds[t],{type:\"geojson\",data:e.geojson})},s.setSourceData=function(t,e){this.subplot.map.getSource(this.sourceIds[t]).setData(e.geojson)},s.addLayer=function(t,e,n){this.subplot.addLayer({type:t,id:this.layerIds[t],source:this.sourceIds[t],layout:e.layout,paint:e.paint},n)},s.update=function(t){var e,n,i,o=this.subplot,s=o.map,l=r(o.gd,t),c=o.belowLookup[\"trace-\"+this.uid];if(c!==this.below){for(e=a.length-1;e>=0;e--)s.removeLayer(this.layerIds[n=a[e]]);for(e=0;e<a.length;e++)this.addLayer(n=a[e],i=l[n],c);this.below=c}for(e=0;e<a.length;e++)o.setOptions(this.layerIds[n=a[e]],\"setLayoutProperty\",(i=l[n]).layout),\"visible\"===i.layout.visibility&&(this.setSourceData(n,i),o.setOptions(this.layerIds[n],\"setPaintProperty\",i.paint));t[0].trace._glTrace=this},s.dispose=function(){for(var t=this.subplot.map,e=a.length-1;e>=0;e--){var n=a[e];t.removeLayer(this.layerIds[n]),t.removeSource(this.sourceIds[n])}},e.exports=function(t,e){for(var n=e[0].trace,i=new o(t,n.uid),s=r(t.gd,e),l=i.below=t.belowLookup[\"trace-\"+n.uid],c=0;c<a.length;c++){var u=a[c],h=s[u];i.addSource(u,h),i.addLayer(u,h,l)}return e[0].trace._glTrace=i,i}},{\"../../plots/mapbox/constants\":883,\"./convert\":1253}],1260:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../scatter/subtypes\"),a=t(\"../../constants/numerical\").BADNUM;e.exports=function(t,e){var n,o=t.cd,s=t.xaxis,l=t.yaxis,c=[];if(!i.hasMarkers(o[0].trace))return[];if(!1===e)for(n=0;n<o.length;n++)o[n].selected=0;else for(n=0;n<o.length;n++){var u=o[n],h=u.lonlat;if(h[0]!==a){var d=[r.modHalf(h[0],360),h[1]],f=[s.c2p(d),l.c2p(d)];e.contains(f,null,n,t)?(c.push({pointNumber:n,lon:h[0],lat:h[1]}),u.selected=1):u.selected=0}}return c}},{\"../../constants/numerical\":753,\"../../lib\":778,\"../scatter/subtypes\":1212}],1261:[function(t,e,n){\"use strict\";var r=t(\"../../plots/template_attributes\").hovertemplateAttrs,i=t(\"../../plots/template_attributes\").texttemplateAttrs,a=t(\"../../lib/extend\").extendFlat,o=t(\"../scatter/attributes\"),s=t(\"../../plots/attributes\"),l=o.line;e.exports={mode:o.mode,r:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},theta:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},r0:{valType:\"any\",dflt:0,editType:\"calc+clearAxisTypes\"},dr:{valType:\"number\",dflt:1,editType:\"calc\"},theta0:{valType:\"any\",dflt:0,editType:\"calc+clearAxisTypes\"},dtheta:{valType:\"number\",editType:\"calc\"},thetaunit:{valType:\"enumerated\",values:[\"radians\",\"degrees\",\"gradians\"],dflt:\"degrees\",editType:\"calc+clearAxisTypes\"},text:o.text,texttemplate:i({editType:\"plot\"},{keys:[\"r\",\"theta\",\"text\"]}),hovertext:o.hovertext,line:{color:l.color,width:l.width,dash:l.dash,shape:a({},l.shape,{values:[\"linear\",\"spline\"]}),smoothing:l.smoothing,editType:\"calc\"},connectgaps:o.connectgaps,marker:o.marker,cliponaxis:a({},o.cliponaxis,{dflt:!1}),textposition:o.textposition,textfont:o.textfont,fill:a({},o.fill,{values:[\"none\",\"toself\",\"tonext\"],dflt:\"none\"}),fillcolor:o.fillcolor,hoverinfo:a({},s.hoverinfo,{flags:[\"r\",\"theta\",\"text\",\"name\"]}),hoveron:o.hoveron,hovertemplate:r(),selected:o.selected,unselected:o.unselected}},{\"../../lib/extend\":768,\"../../plots/attributes\":824,\"../../plots/template_attributes\":906,\"../scatter/attributes\":1187}],1262:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../../constants/numerical\").BADNUM,a=t(\"../../plots/cartesian/axes\"),o=t(\"../scatter/colorscale_calc\"),s=t(\"../scatter/arrays_to_calcdata\"),l=t(\"../scatter/calc_selection\"),c=t(\"../scatter/calc\").calcMarkerSize;e.exports=function(t,e){for(var n=t._fullLayout,u=e.subplot,h=n[u].radialaxis,d=n[u].angularaxis,f=h.makeCalcdata(e,\"r\"),p=d.makeCalcdata(e,\"theta\"),m=e._length,g=new Array(m),y=0;y<m;y++){var v=f[y],_=p[y],b=g[y]={};r(v)&&r(_)?(b.r=v,b.theta=_):b.r=i}var x=c(e,m);return e._extremes.x=a.findExtremes(h,f,{ppad:x}),o(t,e),s(g,e),l(g,e),g}},{\"../../constants/numerical\":753,\"../../plots/cartesian/axes\":828,\"../scatter/arrays_to_calcdata\":1186,\"../scatter/calc\":1188,\"../scatter/calc_selection\":1189,\"../scatter/colorscale_calc\":1190,\"fast-isnumeric\":241}],1263:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../scatter/subtypes\"),a=t(\"../scatter/marker_defaults\"),o=t(\"../scatter/line_defaults\"),s=t(\"../scatter/line_shape_defaults\"),l=t(\"../scatter/text_defaults\"),c=t(\"../scatter/fillcolor_defaults\"),u=t(\"../scatter/constants\").PTS_LINESONLY,h=t(\"./attributes\");function d(t,e,n,r){var i,a=r(\"r\"),o=r(\"theta\");if(a)o?i=Math.min(a.length,o.length):(i=a.length,r(\"theta0\"),r(\"dtheta\"));else{if(!o)return 0;i=e.theta.length,r(\"r0\"),r(\"dr\")}return e._length=i,i}e.exports={handleRThetaDefaults:d,supplyDefaults:function(t,e,n,f){function p(n,i){return r.coerce(t,e,h,n,i)}var m=d(0,e,0,p);if(m){p(\"thetaunit\"),p(\"mode\",m<u?\"lines+markers\":\"lines\"),p(\"text\"),p(\"hovertext\"),\"fills\"!==e.hoveron&&p(\"hovertemplate\"),i.hasLines(e)&&(o(t,e,n,f,p),s(t,e,p),p(\"connectgaps\")),i.hasMarkers(e)&&a(t,e,n,f,p,{gradient:!0}),i.hasText(e)&&(p(\"texttemplate\"),l(t,e,f,p));var g=[];(i.hasMarkers(e)||i.hasText(e))&&(p(\"cliponaxis\"),p(\"marker.maxdisplayed\"),g.push(\"points\")),p(\"fill\"),\"none\"!==e.fill&&(c(t,e,n,p),i.hasLines(e)||s(t,e,p)),\"tonext\"!==e.fill&&\"toself\"!==e.fill||g.push(\"fills\"),p(\"hoveron\",g.join(\"+\")||\"points\"),r.coerceSelectionMarkerOpacity(e,p)}else e.visible=!1}}},{\"../../lib\":778,\"../scatter/constants\":1191,\"../scatter/fillcolor_defaults\":1195,\"../scatter/line_defaults\":1200,\"../scatter/line_shape_defaults\":1202,\"../scatter/marker_defaults\":1206,\"../scatter/subtypes\":1212,\"../scatter/text_defaults\":1213,\"./attributes\":1261}],1264:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../plots/cartesian/axes\");e.exports=function(t,e,n){var a,o,s={},l=n[e.subplot]._subplot;l?(a=l.radialAxis,o=l.angularAxis):(a=(l=n[e.subplot]).radialaxis,o=l.angularaxis);var c=a.c2l(t.r);s.rLabel=i.tickText(a,c,!0).text;var u=\"degrees\"===o.thetaunit?r.rad2deg(t.theta):t.theta;return s.thetaLabel=i.tickText(o,u,!0).text,s}},{\"../../lib\":778,\"../../plots/cartesian/axes\":828}],1265:[function(t,e,n){\"use strict\";var r=t(\"../scatter/hover\");function i(t,e,n,r){var i=n.radialAxis,a=n.angularAxis;i._hovertitle=\"r\",a._hovertitle=\"\\u03b8\";var o={};o[e.subplot]={_subplot:n};var s=e._module.formatLabels(t,e,o);r.rLabel=s.rLabel,r.thetaLabel=s.thetaLabel;var l=[];function c(t,e){l.push(t._hovertitle+\": \"+e)}if(!e.hovertemplate){var u=(t.hi||e.hoverinfo).split(\"+\");-1!==u.indexOf(\"all\")&&(u=[\"r\",\"theta\",\"text\"]),-1!==u.indexOf(\"r\")&&c(i,r.rLabel),-1!==u.indexOf(\"theta\")&&c(a,r.thetaLabel),-1!==u.indexOf(\"text\")&&r.text&&(l.push(r.text),delete r.text),r.extraText=l.join(\"<br>\")}}e.exports={hoverPoints:function(t,e,n,a){var o=r(t,e,n,a);if(o&&!1!==o[0].index){var s=o[0];if(void 0===s.index)return o;var l=t.subplot,c=s.cd[s.index],u=s.trace;if(l.isPtInside(c))return s.xLabelVal=void 0,s.yLabelVal=void 0,i(c,u,l,s),s.hovertemplate=u.hovertemplate,o}},makeHoverPointText:i}},{\"../scatter/hover\":1198}],1266:[function(t,e,n){\"use strict\";e.exports={moduleType:\"trace\",name:\"scatterpolar\",basePlotModule:t(\"../../plots/polar\"),categories:[\"polar\",\"symbols\",\"showLegend\",\"scatter-like\"],attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\").supplyDefaults,colorbar:t(\"../scatter/marker_colorbar\"),formatLabels:t(\"./format_labels\"),calc:t(\"./calc\"),plot:t(\"./plot\"),style:t(\"../scatter/style\").style,styleOnSelect:t(\"../scatter/style\").styleOnSelect,hoverPoints:t(\"./hover\").hoverPoints,selectPoints:t(\"../scatter/select\"),meta:{}}},{\"../../plots/polar\":894,\"../scatter/marker_colorbar\":1205,\"../scatter/select\":1209,\"../scatter/style\":1211,\"./attributes\":1261,\"./calc\":1262,\"./defaults\":1263,\"./format_labels\":1264,\"./hover\":1265,\"./plot\":1267}],1267:[function(t,e,n){\"use strict\";var r=t(\"../scatter/plot\"),i=t(\"../../constants/numerical\").BADNUM;e.exports=function(t,e,n){for(var a=e.layers.frontplot.select(\"g.scatterlayer\"),o={xaxis:e.xaxis,yaxis:e.yaxis,plot:e.framework,layerClipId:e._hasClipOnAxisFalse?e.clipIds.forTraces:null},s=e.radialAxis,l=e.angularAxis,c=0;c<n.length;c++)for(var u=n[c],h=0;h<u.length;h++){var d=u[h],f=d.r;if(f===i)d.x=d.y=i;else{var p=s.c2g(f),m=l.c2g(d.theta);d.x=p*Math.cos(m),d.y=p*Math.sin(m)}}r(t,o,n,a)}},{\"../../constants/numerical\":753,\"../scatter/plot\":1208}],1268:[function(t,e,n){\"use strict\";var r=t(\"../scatterpolar/attributes\"),i=t(\"../scattergl/attributes\"),a=t(\"../../plots/template_attributes\").texttemplateAttrs;e.exports={mode:r.mode,r:r.r,theta:r.theta,r0:r.r0,dr:r.dr,theta0:r.theta0,dtheta:r.dtheta,thetaunit:r.thetaunit,text:r.text,texttemplate:a({editType:\"plot\"},{keys:[\"r\",\"theta\",\"text\"]}),hovertext:r.hovertext,hovertemplate:r.hovertemplate,line:i.line,connectgaps:i.connectgaps,marker:i.marker,fill:i.fill,fillcolor:i.fillcolor,textposition:i.textposition,textfont:i.textfont,hoverinfo:r.hoverinfo,selected:r.selected,unselected:r.unselected}},{\"../../plots/template_attributes\":906,\"../scattergl/attributes\":1239,\"../scatterpolar/attributes\":1261}],1269:[function(t,e,n){\"use strict\";var r=t(\"../scatter/colorscale_calc\"),i=t(\"../scatter/calc\").calcMarkerSize,a=t(\"../scattergl/convert\"),o=t(\"../../plots/cartesian/axes\"),s=t(\"../scattergl/constants\").TOO_MANY_POINTS;e.exports=function(t,e){var n=t._fullLayout,l=e.subplot,c=n[l].radialaxis,u=n[l].angularaxis,h=e._r=c.makeCalcdata(e,\"r\"),d=e._theta=u.makeCalcdata(e,\"theta\"),f=e._length,p={};f<h.length&&(h=h.slice(0,f)),f<d.length&&(d=d.slice(0,f)),p.r=h,p.theta=d,r(t,e);var m,g=p.opts=a.style(t,e);return f<s?m=i(e,f):g.marker&&(m=2*(g.marker.sizeAvg||Math.max(g.marker.size,3))),e._extremes.x=o.findExtremes(c,h,{ppad:m}),[{x:!1,y:!1,t:p,trace:e}]}},{\"../../plots/cartesian/axes\":828,\"../scatter/calc\":1188,\"../scatter/colorscale_calc\":1190,\"../scattergl/constants\":1241,\"../scattergl/convert\":1242}],1270:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../scatter/subtypes\"),a=t(\"../scatterpolar/defaults\").handleRThetaDefaults,o=t(\"../scatter/marker_defaults\"),s=t(\"../scatter/line_defaults\"),l=t(\"../scatter/text_defaults\"),c=t(\"../scatter/fillcolor_defaults\"),u=t(\"../scatter/constants\").PTS_LINESONLY,h=t(\"./attributes\");e.exports=function(t,e,n,d){function f(n,i){return r.coerce(t,e,h,n,i)}var p=a(t,e,d,f);p?(f(\"thetaunit\"),f(\"mode\",p<u?\"lines+markers\":\"lines\"),f(\"text\"),f(\"hovertext\"),\"fills\"!==e.hoveron&&f(\"hovertemplate\"),i.hasLines(e)&&(s(t,e,n,d,f),f(\"connectgaps\")),i.hasMarkers(e)&&o(t,e,n,d,f),i.hasText(e)&&(f(\"texttemplate\"),l(t,e,d,f)),f(\"fill\"),\"none\"!==e.fill&&c(t,e,n,f),r.coerceSelectionMarkerOpacity(e,f)):e.visible=!1}},{\"../../lib\":778,\"../scatter/constants\":1191,\"../scatter/fillcolor_defaults\":1195,\"../scatter/line_defaults\":1200,\"../scatter/marker_defaults\":1206,\"../scatter/subtypes\":1212,\"../scatter/text_defaults\":1213,\"../scatterpolar/defaults\":1263,\"./attributes\":1268}],1271:[function(t,e,n){\"use strict\";var r=t(\"../scatterpolar/format_labels\");e.exports=function(t,e,n){var i=t.i;return\"r\"in t||(t.r=e._r[i]),\"theta\"in t||(t.theta=e._theta[i]),r(t,e,n)}},{\"../scatterpolar/format_labels\":1264}],1272:[function(t,e,n){\"use strict\";var r=t(\"../scattergl/hover\"),i=t(\"../scatterpolar/hover\").makeHoverPointText;e.exports={hoverPoints:function(t,e,n,a){var o=t.cd[0].t,s=o.r,l=o.theta,c=r.hoverPoints(t,e,n,a);if(c&&!1!==c[0].index){var u=c[0];if(void 0===u.index)return c;var h=t.subplot,d=u.cd[u.index],f=u.trace;if(d.r=s[u.index],d.theta=l[u.index],h.isPtInside(d))return u.xLabelVal=void 0,u.yLabelVal=void 0,i(d,f,h,u),c}}}},{\"../scattergl/hover\":1247,\"../scatterpolar/hover\":1265}],1273:[function(t,e,n){\"use strict\";e.exports={moduleType:\"trace\",name:\"scatterpolargl\",basePlotModule:t(\"../../plots/polar\"),categories:[\"gl\",\"regl\",\"polar\",\"symbols\",\"showLegend\",\"scatter-like\"],attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:t(\"../scatter/marker_colorbar\"),formatLabels:t(\"./format_labels\"),calc:t(\"./calc\"),plot:t(\"./plot\"),hoverPoints:t(\"./hover\").hoverPoints,selectPoints:t(\"../scattergl/select\"),meta:{}}},{\"../../plots/polar\":894,\"../scatter/marker_colorbar\":1205,\"../scattergl/select\":1251,\"./attributes\":1268,\"./calc\":1269,\"./defaults\":1270,\"./format_labels\":1271,\"./hover\":1272,\"./plot\":1274}],1274:[function(t,e,n){\"use strict\";var r=t(\"@plotly/point-cluster\"),i=t(\"fast-isnumeric\"),a=t(\"../scattergl/plot\"),o=t(\"../scattergl/scene_update\"),s=t(\"../scattergl/convert\"),l=t(\"../../lib\"),c=t(\"../scattergl/constants\").TOO_MANY_POINTS;e.exports=function(t,e,n){if(n.length){var u=e.radialAxis,h=e.angularAxis,d=o(t,e);return n.forEach((function(n){if(n&&n[0]&&n[0].trace){var a,o=n[0],f=o.trace,p=o.t,m=f._length,g=p.r,y=p.theta,v=p.opts,_=g.slice(),b=y.slice();for(a=0;a<g.length;a++)e.isPtInside({r:g[a],theta:y[a]})||(_[a]=NaN,b[a]=NaN);var x=new Array(2*m),w=Array(m),k=Array(m);for(a=0;a<m;a++){var M,T,S=_[a];if(i(S)){var A=u.c2g(S),L=h.c2g(b[a],f.thetaunit);M=A*Math.cos(L),T=A*Math.sin(L)}else M=T=NaN;w[a]=x[2*a]=M,k[a]=x[2*a+1]=T}p.tree=r(x),v.marker&&m>=c&&(v.marker.cluster=p.tree),v.marker&&(v.markerSel.positions=v.markerUnsel.positions=v.marker.positions=x),v.line&&x.length>1&&l.extendFlat(v.line,s.linePositions(t,f,x)),v.text&&(l.extendFlat(v.text,{positions:x},s.textPosition(t,f,v.text,v.marker)),l.extendFlat(v.textSel,{positions:x},s.textPosition(t,f,v.text,v.markerSel)),l.extendFlat(v.textUnsel,{positions:x},s.textPosition(t,f,v.text,v.markerUnsel))),v.fill&&!d.fill2d&&(d.fill2d=!0),v.marker&&!d.scatter2d&&(d.scatter2d=!0),v.line&&!d.line2d&&(d.line2d=!0),v.text&&!d.glText&&(d.glText=!0),d.lineOptions.push(v.line),d.fillOptions.push(v.fill),d.markerOptions.push(v.marker),d.markerSelectedOptions.push(v.markerSel),d.markerUnselectedOptions.push(v.markerUnsel),d.textOptions.push(v.text),d.textSelectedOptions.push(v.textSel),d.textUnselectedOptions.push(v.textUnsel),d.selectBatch.push([]),d.unselectBatch.push([]),p.x=w,p.y=k,p.rawx=w,p.rawy=k,p.r=g,p.theta=y,p.positions=x,p._scene=d,p.index=d.count,d.count++}})),a(t,e,n)}}},{\"../../lib\":778,\"../scattergl/constants\":1241,\"../scattergl/convert\":1242,\"../scattergl/plot\":1249,\"../scattergl/scene_update\":1250,\"@plotly/point-cluster\":57,\"fast-isnumeric\":241}],1275:[function(t,e,n){\"use strict\";var r=t(\"../../plots/template_attributes\").hovertemplateAttrs,i=t(\"../../plots/template_attributes\").texttemplateAttrs,a=t(\"../scatter/attributes\"),o=t(\"../../plots/attributes\"),s=t(\"../../components/colorscale/attributes\"),l=t(\"../../components/drawing/attributes\").dash,c=t(\"../../lib/extend\").extendFlat,u=a.marker,h=a.line,d=u.line;e.exports={a:{valType:\"data_array\",editType:\"calc\"},b:{valType:\"data_array\",editType:\"calc\"},c:{valType:\"data_array\",editType:\"calc\"},sum:{valType:\"number\",dflt:0,min:0,editType:\"calc\"},mode:c({},a.mode,{dflt:\"markers\"}),text:c({},a.text,{}),texttemplate:i({editType:\"plot\"},{keys:[\"a\",\"b\",\"c\",\"text\"]}),hovertext:c({},a.hovertext,{}),line:{color:h.color,width:h.width,dash:l,shape:c({},h.shape,{values:[\"linear\",\"spline\"]}),smoothing:h.smoothing,editType:\"calc\"},connectgaps:a.connectgaps,cliponaxis:a.cliponaxis,fill:c({},a.fill,{values:[\"none\",\"toself\",\"tonext\"],dflt:\"none\"}),fillcolor:a.fillcolor,marker:c({symbol:u.symbol,opacity:u.opacity,maxdisplayed:u.maxdisplayed,size:u.size,sizeref:u.sizeref,sizemin:u.sizemin,sizemode:u.sizemode,line:c({width:d.width,editType:\"calc\"},s(\"marker.line\")),gradient:u.gradient,editType:\"calc\"},s(\"marker\")),textfont:a.textfont,textposition:a.textposition,selected:a.selected,unselected:a.unselected,hoverinfo:c({},o.hoverinfo,{flags:[\"a\",\"b\",\"c\",\"text\",\"name\"]}),hoveron:a.hoveron,hovertemplate:r()}},{\"../../components/colorscale/attributes\":650,\"../../components/drawing/attributes\":664,\"../../lib/extend\":768,\"../../plots/attributes\":824,\"../../plots/template_attributes\":906,\"../scatter/attributes\":1187}],1276:[function(t,e,n){\"use strict\";var r=t(\"fast-isnumeric\"),i=t(\"../scatter/colorscale_calc\"),a=t(\"../scatter/arrays_to_calcdata\"),o=t(\"../scatter/calc_selection\"),s=t(\"../scatter/calc\").calcMarkerSize,l=[\"a\",\"b\",\"c\"],c={a:[\"b\",\"c\"],b:[\"a\",\"c\"],c:[\"a\",\"b\"]};e.exports=function(t,e){var n,u,h,d,f,p,m=t._fullLayout[e.subplot].sum,g=e.sum||m,y={a:e.a,b:e.b,c:e.c};for(n=0;n<l.length;n++)if(!y[h=l[n]]){for(f=y[c[h][0]],p=y[c[h][1]],d=new Array(f.length),u=0;u<f.length;u++)d[u]=g-f[u]-p[u];y[h]=d}var v,_,b,x,w=e._length,k=new Array(w);for(n=0;n<w;n++)_=y.b[n],b=y.c[n],r(v=y.a[n])&&r(_)&&r(b)?(1!=(x=m/((v=+v)+(_=+_)+(b=+b)))&&(v*=x,_*=x,b*=x),k[n]={x:b-_,y:v,a:v,b:_,c:b}):k[n]={x:!1,y:!1};return s(e,w),i(t,e),a(k,e),o(k,e),k}},{\"../scatter/arrays_to_calcdata\":1186,\"../scatter/calc\":1188,\"../scatter/calc_selection\":1189,\"../scatter/colorscale_calc\":1190,\"fast-isnumeric\":241}],1277:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../scatter/constants\"),a=t(\"../scatter/subtypes\"),o=t(\"../scatter/marker_defaults\"),s=t(\"../scatter/line_defaults\"),l=t(\"../scatter/line_shape_defaults\"),c=t(\"../scatter/text_defaults\"),u=t(\"../scatter/fillcolor_defaults\"),h=t(\"./attributes\");e.exports=function(t,e,n,d){function f(n,i){return r.coerce(t,e,h,n,i)}var p,m=f(\"a\"),g=f(\"b\"),y=f(\"c\");if(m?(p=m.length,g?(p=Math.min(p,g.length),y&&(p=Math.min(p,y.length))):p=y?Math.min(p,y.length):0):g&&y&&(p=Math.min(g.length,y.length)),p){e._length=p,f(\"sum\"),f(\"text\"),f(\"hovertext\"),\"fills\"!==e.hoveron&&f(\"hovertemplate\"),f(\"mode\",p<i.PTS_LINESONLY?\"lines+markers\":\"lines\"),a.hasLines(e)&&(s(t,e,n,d,f),l(t,e,f),f(\"connectgaps\")),a.hasMarkers(e)&&o(t,e,n,d,f,{gradient:!0}),a.hasText(e)&&(f(\"texttemplate\"),c(t,e,d,f));var v=[];(a.hasMarkers(e)||a.hasText(e))&&(f(\"cliponaxis\"),f(\"marker.maxdisplayed\"),v.push(\"points\")),f(\"fill\"),\"none\"!==e.fill&&(u(t,e,n,f),a.hasLines(e)||l(t,e,f)),\"tonext\"!==e.fill&&\"toself\"!==e.fill||v.push(\"fills\"),f(\"hoveron\",v.join(\"+\")||\"points\"),r.coerceSelectionMarkerOpacity(e,f)}else e.visible=!1}},{\"../../lib\":778,\"../scatter/constants\":1191,\"../scatter/fillcolor_defaults\":1195,\"../scatter/line_defaults\":1200,\"../scatter/line_shape_defaults\":1202,\"../scatter/marker_defaults\":1206,\"../scatter/subtypes\":1212,\"../scatter/text_defaults\":1213,\"./attributes\":1275}],1278:[function(t,e,n){\"use strict\";e.exports=function(t,e,n,r,i){if(e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),r[i]){var a=r[i];t.a=a.a,t.b=a.b,t.c=a.c}else t.a=e.a,t.b=e.b,t.c=e.c;return t}},{}],1279:[function(t,e,n){\"use strict\";var r=t(\"../../plots/cartesian/axes\");e.exports=function(t,e,n){var i={},a=n[e.subplot]._subplot;return i.aLabel=r.tickText(a.aaxis,t.a,!0).text,i.bLabel=r.tickText(a.baxis,t.b,!0).text,i.cLabel=r.tickText(a.caxis,t.c,!0).text,i}},{\"../../plots/cartesian/axes\":828}],1280:[function(t,e,n){\"use strict\";var r=t(\"../scatter/hover\");e.exports=function(t,e,n,i){var a=r(t,e,n,i);if(a&&!1!==a[0].index){var o=a[0];if(void 0===o.index){var s=t.xa._length,l=s*(1-o.y0/t.ya._length)/2,c=s-l;return o.x0=Math.max(Math.min(o.x0,c),l),o.x1=Math.max(Math.min(o.x1,c),l),a}var u=o.cd[o.index],h=o.trace,d=o.subplot;o.a=u.a,o.b=u.b,o.c=u.c,o.xLabelVal=void 0,o.yLabelVal=void 0;var f={};f[h.subplot]={_subplot:d};var p=h._module.formatLabels(u,h,f);o.aLabel=p.aLabel,o.bLabel=p.bLabel,o.cLabel=p.cLabel;var m=[];if(!h.hovertemplate){var g=(u.hi||h.hoverinfo).split(\"+\");-1!==g.indexOf(\"all\")&&(g=[\"a\",\"b\",\"c\"]),-1!==g.indexOf(\"a\")&&y(d.aaxis,o.aLabel),-1!==g.indexOf(\"b\")&&y(d.baxis,o.bLabel),-1!==g.indexOf(\"c\")&&y(d.caxis,o.cLabel)}return o.extraText=m.join(\"<br>\"),o.hovertemplate=h.hovertemplate,a}function y(t,e){m.push(t._hovertitle+\": \"+e)}}},{\"../scatter/hover\":1198}],1281:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:t(\"../scatter/marker_colorbar\"),formatLabels:t(\"./format_labels\"),calc:t(\"./calc\"),plot:t(\"./plot\"),style:t(\"../scatter/style\").style,styleOnSelect:t(\"../scatter/style\").styleOnSelect,hoverPoints:t(\"./hover\"),selectPoints:t(\"../scatter/select\"),eventData:t(\"./event_data\"),moduleType:\"trace\",name:\"scatterternary\",basePlotModule:t(\"../../plots/ternary\"),categories:[\"ternary\",\"symbols\",\"showLegend\",\"scatter-like\"],meta:{}}},{\"../../plots/ternary\":907,\"../scatter/marker_colorbar\":1205,\"../scatter/select\":1209,\"../scatter/style\":1211,\"./attributes\":1275,\"./calc\":1276,\"./defaults\":1277,\"./event_data\":1278,\"./format_labels\":1279,\"./hover\":1280,\"./plot\":1282}],1282:[function(t,e,n){\"use strict\";var r=t(\"../scatter/plot\");e.exports=function(t,e,n){var i=e.plotContainer;i.select(\".scatterlayer\").selectAll(\"*\").remove();var a={xaxis:e.xaxis,yaxis:e.yaxis,plot:i,layerClipId:e._hasClipOnAxisFalse?e.clipIdRelative:null},o=e.layers.frontplot.select(\"g.scatterlayer\");r(t,a,n,o)}},{\"../scatter/plot\":1208}],1283:[function(t,e,n){\"use strict\";var r=t(\"../scatter/attributes\"),i=t(\"../../components/colorscale/attributes\"),a=t(\"../../plots/template_attributes\").hovertemplateAttrs,o=t(\"../scattergl/attributes\"),s=t(\"../../plots/cartesian/constants\").idRegex,l=t(\"../../plot_api/plot_template\").templatedArray,c=t(\"../../lib/extend\").extendFlat,u=r.marker,h=u.line,d=c(i(\"marker.line\",{editTypeOverride:\"calc\"}),{width:c({},h.width,{editType:\"calc\"}),editType:\"calc\"}),f=c(i(\"marker\"),{symbol:u.symbol,size:c({},u.size,{editType:\"markerSize\"}),sizeref:u.sizeref,sizemin:u.sizemin,sizemode:u.sizemode,opacity:u.opacity,colorbar:u.colorbar,line:d,editType:\"calc\"});function p(t){return{valType:\"info_array\",freeLength:!0,editType:\"calc\",items:{valType:\"subplotid\",regex:s[t],editType:\"plot\"}}}f.color.editType=f.cmin.editType=f.cmax.editType=\"style\",e.exports={dimensions:l(\"dimension\",{visible:{valType:\"boolean\",dflt:!0,editType:\"calc\"},label:{valType:\"string\",editType:\"calc\"},values:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},axis:{type:{valType:\"enumerated\",values:[\"linear\",\"log\",\"date\",\"category\"],editType:\"calc+clearAxisTypes\"},matches:{valType:\"boolean\",dflt:!1,editType:\"calc\"},editType:\"calc+clearAxisTypes\"},editType:\"calc+clearAxisTypes\"}),text:c({},o.text,{}),hovertext:c({},o.hovertext,{}),hovertemplate:a(),marker:f,xaxes:p(\"x\"),yaxes:p(\"y\"),diagonal:{visible:{valType:\"boolean\",dflt:!0,editType:\"calc\"},editType:\"calc\"},showupperhalf:{valType:\"boolean\",dflt:!0,editType:\"calc\"},showlowerhalf:{valType:\"boolean\",dflt:!0,editType:\"calc\"},selected:{marker:o.selected.marker,editType:\"calc\"},unselected:{marker:o.unselected.marker,editType:\"calc\"},opacity:o.opacity}},{\"../../components/colorscale/attributes\":650,\"../../lib/extend\":768,\"../../plot_api/plot_template\":817,\"../../plots/cartesian/constants\":834,\"../../plots/template_attributes\":906,\"../scatter/attributes\":1187,\"../scattergl/attributes\":1239}],1284:[function(t,e,n){\"use strict\";var r=t(\"regl-line2d\"),i=t(\"../../registry\"),a=t(\"../../lib/prepare_regl\"),o=t(\"../../plots/get_data\").getModuleCalcData,s=t(\"../../plots/cartesian\"),l=t(\"../../plots/cartesian/axis_ids\").getFromId,c=t(\"../../plots/cartesian/axes\").shouldShowZeroLine,u=\"splom\";function h(t,e,n){for(var r=e._visibleDims,i=n.viewOpts.ranges=new Array(n.matrixOptions.data.length),a=0;a<r.length;a++){var o=r[a],s=i[a]=new Array(4),c=l(t,e._diag[o][0]);c&&(s[0]=c.r2l(c.range[0]),s[2]=c.r2l(c.range[1]));var u=l(t,e._diag[o][1]);u&&(s[1]=u.r2l(u.range[0]),s[3]=u.r2l(u.range[1]))}n.selectBatch.length||n.unselectBatch.length?n.matrix.update({ranges:i},{ranges:i}):n.matrix.update({ranges:i})}function d(t){var e=t._fullLayout,n=e._glcanvas.data()[0].regl,i=e._splomGrid;i||(i=e._splomGrid=r(n)),i.update(function(t){var e,n=t._fullLayout,r=n._size,i=[0,0,n.width,n.height],a={};function o(t,e,n,r,o,s){var l=e[t+\"color\"],c=e[t+\"width\"],u=String(l+c);u in a?a[u].data.push(NaN,NaN,n,r,o,s):a[u]={data:[n,r,o,s],join:\"rect\",thickness:c,color:l,viewport:i,range:i,overlay:!1}}for(e in n._splomSubplots){var s,l,u=n._plots[e],h=u.xaxis,d=u.yaxis,f=h._gridVals,p=d._gridVals,m=r.b+d.domain[0]*r.h,g=-d._m,y=-g*d.r2l(d.range[0],d.calendar);if(h.showgrid)for(e=0;e<f.length;e++)s=h._offset+h.l2p(f[e].x),o(\"grid\",h,s,m,s,m+d._length);if(d.showgrid)for(e=0;e<p.length;e++)o(\"grid\",d,h._offset,l=m+y+g*p[e].x,h._offset+h._length,l);c(t,h,d)&&(s=h._offset+h.l2p(0),o(\"zeroline\",h,s,m,s,m+d._length)),c(t,d,h)&&o(\"zeroline\",d,h._offset,l=m+y+0,h._offset+h._length,l)}var v=[];for(e in a)v.push(a[e]);return v}(t))}e.exports={name:u,attr:s.attr,attrRegex:s.attrRegex,layoutAttributes:s.layoutAttributes,supplyLayoutDefaults:s.supplyLayoutDefaults,drawFramework:s.drawFramework,plot:function(t){var e=t._fullLayout,n=i.getModule(u),r=o(t.calcdata,n)[0];a(t,[\"ANGLE_instanced_arrays\",\"OES_element_index_uint\"])&&(e._hasOnlyLargeSploms&&d(t),n.plot(t,{},r))},drag:function(t){var e=t.calcdata,n=t._fullLayout;n._hasOnlyLargeSploms&&d(t);for(var r=0;r<e.length;r++){var i=e[r][0].trace,a=n._splomScenes[i.uid];\"splom\"===i.type&&a&&a.matrix&&h(t,i,a)}},updateGrid:d,clean:function(t,e,n,r){var i,a={};if(r._splomScenes){for(i=0;i<t.length;i++){var o=t[i];\"splom\"===o.type&&(a[o.uid]=1)}for(i=0;i<n.length;i++){var l=n[i];if(!a[l.uid]){var c=r._splomScenes[l.uid];c&&c.destroy&&c.destroy(),r._splomScenes[l.uid]=null,delete r._splomScenes[l.uid]}}}0===Object.keys(r._splomScenes||{}).length&&delete r._splomScenes,r._splomGrid&&!e._hasOnlyLargeSploms&&r._hasOnlyLargeSploms&&(r._splomGrid.destroy(),r._splomGrid=null,delete r._splomGrid),s.clean(t,e,n,r)},updateFx:s.updateFx,toSVG:s.toSVG}},{\"../../lib/prepare_regl\":791,\"../../plots/cartesian\":841,\"../../plots/cartesian/axes\":828,\"../../plots/cartesian/axis_ids\":831,\"../../plots/get_data\":865,\"../../registry\":911,\"regl-line2d\":535}],1285:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../plots/cartesian/axis_ids\"),a=t(\"../scatter/calc\").calcMarkerSize,o=t(\"../scatter/calc\").calcAxisExpansion,s=t(\"../scatter/colorscale_calc\"),l=t(\"../scattergl/convert\").markerSelection,c=t(\"../scattergl/convert\").markerStyle,u=t(\"./scene_update\"),h=t(\"../../constants/numerical\").BADNUM,d=t(\"../scattergl/constants\").TOO_MANY_POINTS;e.exports=function(t,e){var n,f,p,m,g,y,v=e.dimensions,_=e._length,b={},x=b.cdata=[],w=b.data=[],k=e._visibleDims=[];function M(t,n){for(var i=t.makeCalcdata({v:n.values,vcalendar:e.calendar},\"v\"),a=0;a<i.length;a++)i[a]=i[a]===h?NaN:i[a];x.push(i),w.push(\"log\"===t.type?r.simpleMap(i,t.c2l):i)}for(n=0;n<v.length;n++)if((p=v[n]).visible){if(m=i.getFromId(t,e._diag[n][0]),g=i.getFromId(t,e._diag[n][1]),m&&g&&m.type!==g.type){r.log(\"Skipping splom dimension \"+n+\" with conflicting axis types\");continue}m?(M(m,p),g&&\"category\"===g.type&&(g._categories=m._categories.slice())):M(g,p),k.push(n)}for(s(t,e),r.extendFlat(b,c(e)),y=x.length*_>d?2*(b.sizeAvg||Math.max(b.size,3)):a(e,_),f=0;f<k.length;f++)p=v[n=k[f]],m=i.getFromId(t,e._diag[n][0])||{},g=i.getFromId(t,e._diag[n][1])||{},o(t,e,m,g,x[f],x[f],y);var T=u(t,e);return T.matrix||(T.matrix=!0),T.matrixOptions=b,T.selectedOptions=l(e,e.selected),T.unselectedOptions=l(e,e.unselected),[{x:!1,y:!1,t:{},trace:e}]}},{\"../../constants/numerical\":753,\"../../lib\":778,\"../../plots/cartesian/axis_ids\":831,\"../scatter/calc\":1188,\"../scatter/colorscale_calc\":1190,\"../scattergl/constants\":1241,\"../scattergl/convert\":1242,\"./scene_update\":1292}],1286:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../plots/array_container_defaults\"),a=t(\"./attributes\"),o=t(\"../scatter/subtypes\"),s=t(\"../scatter/marker_defaults\"),l=t(\"../parcoords/merge_length\"),c=t(\"../scattergl/helpers\").isOpenSymbol;function u(t,e){function n(n,i){return r.coerce(t,e,a.dimensions,n,i)}n(\"label\");var i=n(\"values\");i&&i.length?n(\"visible\"):e.visible=!1,n(\"axis.type\"),n(\"axis.matches\")}e.exports=function(t,e,n,h){function d(n,i){return r.coerce(t,e,a,n,i)}var f=i(t,e,{name:\"dimensions\",handleItemDefaults:u}),p=d(\"diagonal.visible\"),m=d(\"showupperhalf\"),g=d(\"showlowerhalf\");if(l(e,f,\"values\")&&(p||m||g)){d(\"text\"),d(\"hovertext\"),d(\"hovertemplate\"),s(t,e,n,h,d);var y=c(e.marker.symbol),v=o.isBubble(e);d(\"marker.line.width\",y||v?1:0),function(t,e,n,r){var i,a,o=e.dimensions,s=o.length,l=e.showupperhalf,c=e.showlowerhalf,u=e.diagonal.visible,h=new Array(s),d=new Array(s);for(i=0;i<s;i++){var f=i?i+1:\"\";h[i]=\"x\"+f,d[i]=\"y\"+f}var p=r(\"xaxes\",h),m=r(\"yaxes\",d),g=e._diag=new Array(s);e._xaxes={},e._yaxes={};var y=[],v=[];function _(t,r,i,a){if(t){var o=t.charAt(0),s=n._splomAxes[o];if(e[\"_\"+o+\"axes\"][t]=1,a.push(t),!(t in s)){var l=s[t]={};i&&(l.label=i.label||\"\",i.visible&&i.axis&&(i.axis.type&&(l.type=i.axis.type),i.axis.matches&&(l.matches=r)))}}}var b=!u&&!c,x=!u&&!l;for(e._axesDim={},i=0;i<s;i++){var w=o[i],k=0===i,M=i===s-1,T=k&&b||M&&x?void 0:p[i],S=k&&x||M&&b?void 0:m[i];_(T,S,w,y),_(S,T,w,v),g[i]=[T,S],e._axesDim[T]=i,e._axesDim[S]=i}for(i=0;i<y.length;i++)for(a=0;a<v.length;a++){var A=y[i]+v[a];i>a&&l||i<a&&c?n._splomSubplots[A]=1:i!==a||!u&&c&&l||(n._splomSubplots[A]=1)}(!c||!u&&l&&c)&&(n._splomGridDflt.xside=\"bottom\",n._splomGridDflt.yside=\"left\")}(0,e,h,d),r.coerceSelectionMarkerOpacity(e,d)}else e.visible=!1}},{\"../../lib\":778,\"../../plots/array_container_defaults\":823,\"../parcoords/merge_length\":1158,\"../scatter/marker_defaults\":1206,\"../scatter/subtypes\":1212,\"../scattergl/helpers\":1246,\"./attributes\":1283}],1287:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../scatter/colorscale_calc\"),a=t(\"../scattergl/convert\").markerStyle;e.exports=function(t,e){var n=e.trace,o=t._fullLayout._splomScenes[n.uid];if(o){i(t,n),r.extendFlat(o.matrixOptions,a(n));var s=r.extendFlat({},o.matrixOptions,o.viewOpts);o.matrix.update(s,null)}}},{\"../../lib\":778,\"../scatter/colorscale_calc\":1190,\"../scattergl/convert\":1242}],1288:[function(t,e,n){\"use strict\";n.getDimIndex=function(t,e){for(var n=e._id,r={x:0,y:1}[n.charAt(0)],i=t._visibleDims,a=0;a<i.length;a++)if(t._diag[i[a]][r]===n)return a;return!1}},{}],1289:[function(t,e,n){\"use strict\";var r=t(\"./helpers\"),i=t(\"../scattergl/hover\").calcHover;e.exports={hoverPoints:function(t,e,n){var a=t.cd[0].trace,o=t.scene.matrixOptions.cdata,s=t.xa,l=t.ya,c=s.c2p(e),u=l.c2p(n),h=t.distance,d=r.getDimIndex(a,s),f=r.getDimIndex(a,l);if(!1===d||!1===f)return[t];for(var p,m,g=o[d],y=o[f],v=h,_=0;_<g.length;_++){var b=y[_],x=s.c2p(g[_])-c,w=l.c2p(b)-u,k=Math.sqrt(x*x+w*w);k<v&&(v=m=k,p=_)}return t.index=p,t.distance=v,t.dxy=m,void 0===p?[t]:[i(t,g,y,a)]}}},{\"../scattergl/hover\":1247,\"./helpers\":1288}],1290:[function(t,e,n){\"use strict\";var r=t(\"../../registry\"),i=t(\"../../components/grid\");e.exports={moduleType:\"trace\",name:\"splom\",basePlotModule:t(\"./base_plot\"),categories:[\"gl\",\"regl\",\"cartesian\",\"symbols\",\"showLegend\",\"scatter-like\"],attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:t(\"../scatter/marker_colorbar\"),calc:t(\"./calc\"),plot:t(\"./plot\"),hoverPoints:t(\"./hover\").hoverPoints,selectPoints:t(\"./select\"),editStyle:t(\"./edit_style\"),meta:{}},r.register(i)},{\"../../components/grid\":687,\"../../registry\":911,\"../scatter/marker_colorbar\":1205,\"./attributes\":1283,\"./base_plot\":1284,\"./calc\":1285,\"./defaults\":1286,\"./edit_style\":1287,\"./hover\":1289,\"./plot\":1291,\"./select\":1293}],1291:[function(t,e,n){\"use strict\";var r=t(\"regl-splom\"),i=t(\"../../lib\"),a=t(\"../../plots/cartesian/axis_ids\"),o=t(\"../../components/dragelement/helpers\").selectMode;function s(t,e){var n,s,l,c,u,h=t._fullLayout,d=h._size,f=e.trace,p=e.t,m=h._splomScenes[f.uid],g=m.matrixOptions,y=g.cdata,v=h._glcanvas.data()[0].regl,_=h.dragmode;if(0!==y.length){g.lower=f.showupperhalf,g.upper=f.showlowerhalf,g.diagonal=f.diagonal.visible;var b=f._visibleDims,x=y.length,w=m.viewOpts={};for(w.ranges=new Array(x),w.domains=new Array(x),u=0;u<b.length;u++){l=b[u];var k=w.ranges[u]=new Array(4),M=w.domains[u]=new Array(4);(n=a.getFromId(t,f._diag[l][0]))&&(k[0]=n._rl[0],k[2]=n._rl[1],M[0]=n.domain[0],M[2]=n.domain[1]),(s=a.getFromId(t,f._diag[l][1]))&&(k[1]=s._rl[0],k[3]=s._rl[1],M[1]=s.domain[0],M[3]=s.domain[1])}w.viewport=[d.l,d.b,d.w+d.l,d.h+d.b],!0===m.matrix&&(m.matrix=r(v));var T=h.clickmode.indexOf(\"select\")>-1,S=!0;if(o(_)||f.selectedpoints||T){var A=f._length;if(f.selectedpoints){m.selectBatch=f.selectedpoints;var L=f.selectedpoints,C={};for(l=0;l<L.length;l++)C[L[l]]=!0;var E=[];for(l=0;l<A;l++)C[l]||E.push(l);m.unselectBatch=E}var O=p.xpx=new Array(x),D=p.ypx=new Array(x);for(u=0;u<b.length;u++){if(n=a.getFromId(t,f._diag[l=b[u]][0]))for(O[u]=new Array(A),c=0;c<A;c++)O[u][c]=n.c2p(y[u][c]);if(s=a.getFromId(t,f._diag[l][1]))for(D[u]=new Array(A),c=0;c<A;c++)D[u][c]=s.c2p(y[u][c])}if(m.selectBatch.length||m.unselectBatch.length){var I=i.extendFlat({},g,m.unselectedOptions,w),P=i.extendFlat({},g,m.selectedOptions,w);m.matrix.update(I,P),S=!1}}else p.xpx=p.ypx=null;if(S){var R=i.extendFlat({},g,w);m.matrix.update(R,null)}}}e.exports=function(t,e,n){if(n.length)for(var r=0;r<n.length;r++)s(t,n[r][0])}},{\"../../components/dragelement/helpers\":661,\"../../lib\":778,\"../../plots/cartesian/axis_ids\":831,\"regl-splom\":539}],1292:[function(t,e,n){\"use strict\";var r=t(\"../../lib\");e.exports=function(t,e){var n=t._fullLayout,i=e.uid,a=n._splomScenes;a||(a=n._splomScenes={});var o={dirty:!0,selectBatch:[],unselectBatch:[]},s=a[e.uid];return s||((s=a[i]=r.extendFlat({},o,{matrix:!1,selectBatch:[],unselectBatch:[]})).draw=function(){s.matrix&&s.matrix.draw&&(s.selectBatch.length||s.unselectBatch.length?s.matrix.draw(s.unselectBatch,s.selectBatch):s.matrix.draw()),s.dirty=!1},s.destroy=function(){s.matrix&&s.matrix.destroy&&s.matrix.destroy(),s.matrixOptions=null,s.selectBatch=null,s.unselectBatch=null,s=null}),s.dirty||r.extendFlat(s,o),s}},{\"../../lib\":778}],1293:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../scatter/subtypes\"),a=t(\"./helpers\");e.exports=function(t,e){var n=t.cd,o=n[0].trace,s=n[0].t,l=t.scene,c=l.matrixOptions.cdata,u=t.xaxis,h=t.yaxis,d=[];if(!l)return d;var f=!i.hasMarkers(o)&&!i.hasText(o);if(!0!==o.visible||f)return d;var p=a.getDimIndex(o,u),m=a.getDimIndex(o,h);if(!1===p||!1===m)return d;var g=s.xpx[p],y=s.ypx[m],v=c[p],_=c[m],b=[],x=[];if(!1!==e&&!e.degenerate)for(var w=0;w<v.length;w++)e.contains([g[w],y[w]],null,w,t)?(b.push(w),d.push({pointNumber:w,x:v[w],y:_[w]})):x.push(w);var k=l.matrixOptions;return b.length||x.length?l.selectBatch.length||l.unselectBatch.length||l.matrix.update(l.unselectedOptions,r.extendFlat({},k,l.selectedOptions,l.viewOpts)):l.matrix.update(k,null),l.selectBatch=b,l.unselectBatch=x,d}},{\"../../lib\":778,\"../scatter/subtypes\":1212,\"./helpers\":1288}],1294:[function(t,e,n){\"use strict\";var r=t(\"../../components/colorscale/attributes\"),i=t(\"../../plots/template_attributes\").hovertemplateAttrs,a=t(\"../mesh3d/attributes\"),o=t(\"../../plots/attributes\"),s=t(\"../../lib/extend\").extendFlat,l={x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},z:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},u:{valType:\"data_array\",editType:\"calc\"},v:{valType:\"data_array\",editType:\"calc\"},w:{valType:\"data_array\",editType:\"calc\"},starts:{x:{valType:\"data_array\",editType:\"calc\"},y:{valType:\"data_array\",editType:\"calc\"},z:{valType:\"data_array\",editType:\"calc\"},editType:\"calc\"},maxdisplayed:{valType:\"integer\",min:0,dflt:1e3,editType:\"calc\"},sizeref:{valType:\"number\",editType:\"calc\",min:0,dflt:1},text:{valType:\"string\",dflt:\"\",editType:\"calc\"},hovertext:{valType:\"string\",dflt:\"\",editType:\"calc\"},hovertemplate:i({editType:\"calc\"},{keys:[\"tubex\",\"tubey\",\"tubez\",\"tubeu\",\"tubev\",\"tubew\",\"norm\",\"divergence\"]}),showlegend:s({},o.showlegend,{dflt:!1})};s(l,r(\"\",{colorAttr:\"u/v/w norm\",showScaleDflt:!0,editTypeOverride:\"calc\"})),[\"opacity\",\"lightposition\",\"lighting\"].forEach((function(t){l[t]=a[t]})),l.hoverinfo=s({},o.hoverinfo,{editType:\"calc\",flags:[\"x\",\"y\",\"z\",\"u\",\"v\",\"w\",\"norm\",\"divergence\",\"text\",\"name\"],dflt:\"x+y+z+norm+text+name\"}),l.transforms=void 0,e.exports=l},{\"../../components/colorscale/attributes\":650,\"../../lib/extend\":768,\"../../plots/attributes\":824,\"../../plots/template_attributes\":906,\"../mesh3d/attributes\":1128}],1295:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../components/colorscale/calc\");function a(t){var e,n,i,a,s,l,c,u,h,d,f,p,m=t._x,g=t._y,y=t._z,v=t._len,_=-1/0,b=1/0,x=-1/0,w=1/0,k=-1/0,M=1/0,T=\"\";for(v&&(c=m[0],h=g[0],f=y[0]),v>1&&(u=m[v-1],d=g[v-1],p=y[v-1]),e=0;e<v;e++)_=Math.max(_,m[e]),b=Math.min(b,m[e]),x=Math.max(x,g[e]),w=Math.min(w,g[e]),k=Math.max(k,y[e]),M=Math.min(M,y[e]),a||m[e]===c||(a=!0,T+=\"x\"),s||g[e]===h||(s=!0,T+=\"y\"),l||y[e]===f||(l=!0,T+=\"z\");a||(T+=\"x\"),s||(T+=\"y\"),l||(T+=\"z\");var S=o(t._x),A=o(t._y),L=o(t._z);T=(T=(T=T.replace(\"x\",(c>u?\"-\":\"+\")+\"x\")).replace(\"y\",(h>d?\"-\":\"+\")+\"y\")).replace(\"z\",(f>p?\"-\":\"+\")+\"z\");var C=function(){v=0,S=[],A=[],L=[]};(!v||v<S.length*A.length*L.length)&&C();var E=function(t){return\"x\"===t?m:\"y\"===t?g:y},O=function(t){return\"x\"===t?S:\"y\"===t?A:L},D=function(t){return t[v-1]<t[0]?-1:1},I=E(T[1]),P=E(T[3]),R=E(T[5]),z=O(T[1]).length,j=O(T[3]).length,F=O(T[5]).length,N=!1,B=function(t,e,n){return z*(j*t+e)+n},Y=D(E(T[1])),H=D(E(T[3])),V=D(E(T[5]));for(e=0;e<F-1;e++){for(n=0;n<j-1;n++){for(i=0;i<z-1;i++){var U=B(e,n,i),W=B(e,n,i+1),q=B(e,n+1,i),G=B(e+1,n,i);if(I[U]*Y<I[W]*Y&&P[U]*H<P[q]*H&&R[U]*V<R[G]*V||(N=!0),N)break}if(N)break}if(N)break}return N&&(r.warn(\"Encountered arbitrary coordinates! Unable to input data grid.\"),C()),{xMin:b,yMin:w,zMin:M,xMax:_,yMax:x,zMax:k,Xs:S,Ys:A,Zs:L,len:v,fill:T}}function o(t){return r.distinctVals(t).vals}function s(t,e){if(void 0===e&&(e=t.length),r.isTypedArray(t))return t.subarray(0,e);for(var n=[],i=0;i<e;i++)n[i]=+t[i];return n}e.exports={calc:function(t,e){e._len=Math.min(e.u.length,e.v.length,e.w.length,e.x.length,e.y.length,e.z.length),e._u=s(e.u,e._len),e._v=s(e.v,e._len),e._w=s(e.w,e._len),e._x=s(e.x,e._len),e._y=s(e.y,e._len),e._z=s(e.z,e._len);var n=a(e);e._gridFill=n.fill,e._Xs=n.Xs,e._Ys=n.Ys,e._Zs=n.Zs,e._len=n.len;var r,o,l,c=0;e.starts&&(r=s(e.starts.x||[]),o=s(e.starts.y||[]),l=s(e.starts.z||[]),c=Math.min(r.length,o.length,l.length)),e._startsX=r||[],e._startsY=o||[],e._startsZ=l||[];var u,h=0,d=1/0;for(u=0;u<e._len;u++){var f=e._u[u],p=e._v[u],m=e._w[u],g=Math.sqrt(f*f+p*p+m*m);h=Math.max(h,g),d=Math.min(d,g)}for(i(t,e,{vals:[d,h],containerStr:\"\",cLetter:\"c\"}),u=0;u<c;u++){var y=r[u];n.xMax=Math.max(n.xMax,y),n.xMin=Math.min(n.xMin,y);var v=o[u];n.yMax=Math.max(n.yMax,v),n.yMin=Math.min(n.yMin,v);var _=l[u];n.zMax=Math.max(n.zMax,_),n.zMin=Math.min(n.zMin,_)}e._slen=c,e._normMax=h,e._xbnds=[n.xMin,n.xMax],e._ybnds=[n.yMin,n.yMax],e._zbnds=[n.zMin,n.zMax]},filter:s,processGrid:a}},{\"../../components/colorscale/calc\":651,\"../../lib\":778}],1296:[function(t,e,n){\"use strict\";var r=t(\"gl-streamtube3d\"),i=r.createTubeMesh,a=t(\"../../lib\"),o=t(\"../../lib/gl_format_color\").parseColorScale,s=t(\"../../components/colorscale\").extractOpts,l=t(\"../../plots/gl3d/zip3\"),c={xaxis:0,yaxis:1,zaxis:2};function u(t,e){this.scene=t,this.uid=e,this.mesh=null,this.data=null}var h=u.prototype;function d(t){var e=t.length;return e>2?t.slice(1,e-1):2===e?[(t[0]+t[1])/2]:t}function f(t){var e=t.length;return 1===e?[.5,.5]:[t[1]-t[0],t[e-1]-t[e-2]]}function p(t,e){var n=t.fullSceneLayout,i=t.dataScale,u=e._len,h={};function p(t,e){var r=n[e],o=i[c[e]];return a.simpleMap(t,(function(t){return r.d2l(t)*o}))}if(h.vectors=l(p(e._u,\"xaxis\"),p(e._v,\"yaxis\"),p(e._w,\"zaxis\"),u),!u)return{positions:[],cells:[]};var m=p(e._Xs,\"xaxis\"),g=p(e._Ys,\"yaxis\"),y=p(e._Zs,\"zaxis\");if(h.meshgrid=[m,g,y],h.gridFill=e._gridFill,e._slen)h.startingPositions=l(p(e._startsX,\"xaxis\"),p(e._startsY,\"yaxis\"),p(e._startsZ,\"zaxis\"));else{for(var v=g[0],_=d(m),b=d(y),x=new Array(_.length*b.length),w=0,k=0;k<_.length;k++)for(var M=0;M<b.length;M++)x[w++]=[_[k],v,b[M]];h.startingPositions=x}h.colormap=o(e),h.tubeSize=e.sizeref,h.maxLength=e.maxdisplayed;var T=p(e._xbnds,\"xaxis\"),S=p(e._ybnds,\"yaxis\"),A=p(e._zbnds,\"zaxis\"),L=f(m),C=f(g),E=f(y),O=r(h,[[T[0]-L[0],S[0]-C[0],A[0]-E[0]],[T[1]+L[1],S[1]+C[1],A[1]+E[1]]]),D=s(e);O.vertexIntensityBounds=[D.min/e._normMax,D.max/e._normMax];var I=e.lightposition;return O.lightPosition=[I.x,I.y,I.z],O.ambient=e.lighting.ambient,O.diffuse=e.lighting.diffuse,O.specular=e.lighting.specular,O.roughness=e.lighting.roughness,O.fresnel=e.lighting.fresnel,O.opacity=e.opacity,e._pad=O.tubeScale*e.sizeref*2,O}h.handlePick=function(t){var e=this.scene.fullSceneLayout,n=this.scene.dataScale;function r(t,r){var i=n[c[r]];return e[r].l2c(t)/i}if(t.object===this.mesh){var i=t.data.position,a=t.data.velocity;return t.traceCoordinate=[r(i[0],\"xaxis\"),r(i[1],\"yaxis\"),r(i[2],\"zaxis\"),r(a[0],\"xaxis\"),r(a[1],\"yaxis\"),r(a[2],\"zaxis\"),t.data.intensity*this.data._normMax,t.data.divergence],t.textLabel=this.data.hovertext||this.data.text,!0}},h.update=function(t){this.data=t;var e=p(this.scene,t);this.mesh.update(e)},h.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports=function(t,e){var n=t.glplot.gl,r=p(t,e),a=i(n,r),o=new u(t,e.uid);return o.mesh=a,o.data=e,a._trace=o,t.glplot.add(a),o}},{\"../../components/colorscale\":655,\"../../lib\":778,\"../../lib/gl_format_color\":774,\"../../plots/gl3d/zip3\":881,\"gl-streamtube3d\":348}],1297:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../components/colorscale/defaults\"),a=t(\"./attributes\");e.exports=function(t,e,n,o){function s(n,i){return r.coerce(t,e,a,n,i)}var l=s(\"u\"),c=s(\"v\"),u=s(\"w\"),h=s(\"x\"),d=s(\"y\"),f=s(\"z\");l&&l.length&&c&&c.length&&u&&u.length&&h&&h.length&&d&&d.length&&f&&f.length?(s(\"starts.x\"),s(\"starts.y\"),s(\"starts.z\"),s(\"maxdisplayed\"),s(\"sizeref\"),s(\"lighting.ambient\"),s(\"lighting.diffuse\"),s(\"lighting.specular\"),s(\"lighting.roughness\"),s(\"lighting.fresnel\"),s(\"lightposition.x\"),s(\"lightposition.y\"),s(\"lightposition.z\"),i(t,e,o,s,{prefix:\"\",cLetter:\"c\"}),s(\"text\"),s(\"hovertext\"),s(\"hovertemplate\"),e._length=null):e.visible=!1}},{\"../../components/colorscale/defaults\":653,\"../../lib\":778,\"./attributes\":1294}],1298:[function(t,e,n){\"use strict\";e.exports={moduleType:\"trace\",name:\"streamtube\",basePlotModule:t(\"../../plots/gl3d\"),categories:[\"gl3d\",\"showLegend\"],attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:{min:\"cmin\",max:\"cmax\"},calc:t(\"./calc\").calc,plot:t(\"./convert\"),eventData:function(t,e){return t.tubex=t.x,t.tubey=t.y,t.tubez=t.z,t.tubeu=e.traceCoordinate[3],t.tubev=e.traceCoordinate[4],t.tubew=e.traceCoordinate[5],t.norm=e.traceCoordinate[6],t.divergence=e.traceCoordinate[7],delete t.x,delete t.y,delete t.z,t},meta:{}}},{\"../../plots/gl3d\":870,\"./attributes\":1294,\"./calc\":1295,\"./convert\":1296,\"./defaults\":1297}],1299:[function(t,e,n){\"use strict\";var r=t(\"../../plots/attributes\"),i=t(\"../../plots/template_attributes\").hovertemplateAttrs,a=t(\"../../plots/template_attributes\").texttemplateAttrs,o=t(\"../../components/colorscale/attributes\"),s=t(\"../../plots/domain\").attributes,l=t(\"../pie/attributes\"),c=t(\"./constants\"),u=t(\"../../lib/extend\").extendFlat;e.exports={labels:{valType:\"data_array\",editType:\"calc\"},parents:{valType:\"data_array\",editType:\"calc\"},values:{valType:\"data_array\",editType:\"calc\"},branchvalues:{valType:\"enumerated\",values:[\"remainder\",\"total\"],dflt:\"remainder\",editType:\"calc\"},count:{valType:\"flaglist\",flags:[\"branches\",\"leaves\"],dflt:\"leaves\",editType:\"calc\"},level:{valType:\"any\",editType:\"plot\",anim:!0},maxdepth:{valType:\"integer\",editType:\"plot\",dflt:-1},marker:u({colors:{valType:\"data_array\",editType:\"calc\"},line:{color:u({},l.marker.line.color,{dflt:null}),width:u({},l.marker.line.width,{dflt:1}),editType:\"calc\"},editType:\"calc\"},o(\"marker\",{colorAttr:\"colors\",anim:!1})),leaf:{opacity:{valType:\"number\",editType:\"style\",min:0,max:1},editType:\"plot\"},text:l.text,textinfo:{valType:\"flaglist\",flags:[\"label\",\"text\",\"value\",\"current path\",\"percent root\",\"percent entry\",\"percent parent\"],extras:[\"none\"],editType:\"plot\"},texttemplate:a({editType:\"plot\"},{keys:c.eventDataKeys.concat([\"label\",\"value\"])}),hovertext:l.hovertext,hoverinfo:u({},r.hoverinfo,{flags:[\"label\",\"text\",\"value\",\"name\",\"current path\",\"percent root\",\"percent entry\",\"percent parent\"],dflt:\"label+text+value+name\"}),hovertemplate:i({},{keys:c.eventDataKeys}),textfont:l.textfont,insidetextorientation:l.insidetextorientation,insidetextfont:l.insidetextfont,outsidetextfont:u({},l.outsidetextfont,{}),rotation:{valType:\"angle\",dflt:0,editType:\"plot\"},sort:l.sort,root:{color:{valType:\"color\",editType:\"calc\",dflt:\"rgba(0,0,0,0)\"},editType:\"calc\"},domain:s({name:\"sunburst\",trace:!0,editType:\"calc\"})}},{\"../../components/colorscale/attributes\":650,\"../../lib/extend\":768,\"../../plots/attributes\":824,\"../../plots/domain\":855,\"../../plots/template_attributes\":906,\"../pie/attributes\":1161,\"./constants\":1302}],1300:[function(t,e,n){\"use strict\";var r=t(\"../../plots/plots\");n.name=\"sunburst\",n.plot=function(t,e,i,a){r.plotBasePlot(n.name,t,e,i,a)},n.clean=function(t,e,i,a){r.cleanBasePlot(n.name,t,e,i,a)}},{\"../../plots/plots\":891}],1301:[function(t,e,n){\"use strict\";var r=t(\"d3-hierarchy\"),i=t(\"fast-isnumeric\"),a=t(\"../../lib\"),o=t(\"../../components/colorscale\").makeColorScaleFuncFromTrace,s=t(\"../pie/calc\").makePullColorFn,l=t(\"../pie/calc\").generateExtendedColors,c=t(\"../../components/colorscale\").calc,u=t(\"../../constants/numerical\").ALMOST_EQUAL,h={},d={};n.calc=function(t,e){var n,l,h,d,f,p,m=t._fullLayout,g=e.ids,y=a.isArrayOrTypedArray(g),v=e.labels,_=e.parents,b=e.values,x=a.isArrayOrTypedArray(b),w=[],k={},M={},T=function(t){return t||\"number\"==typeof t},S=function(t){return!x||i(b[t])&&b[t]>=0};y?(n=Math.min(g.length,_.length),l=function(t){return T(g[t])&&S(t)},h=function(t){return String(g[t])}):(n=Math.min(v.length,_.length),l=function(t){return T(v[t])&&S(t)},h=function(t){return String(v[t])}),x&&(n=Math.min(n,b.length));for(var A=0;A<n;A++)if(l(A)){var L=h(A),C=T(_[A])?String(_[A]):\"\",E={i:A,id:L,pid:C,label:T(v[A])?String(v[A]):\"\"};x&&(E.v=+b[A]),w.push(E),p=L,k[f=C]?k[f].push(p):k[f]=[p],M[p]=1}if(k[\"\"]){if(k[\"\"].length>1){for(var O=a.randstr(),D=0;D<w.length;D++)\"\"===w[D].pid&&(w[D].pid=O);w.unshift({hasMultipleRoots:!0,id:O,pid:\"\",label:\"\"})}}else{var I,P=[];for(I in k)M[I]||P.push(I);if(1!==P.length)return a.warn([\"Multiple implied roots, cannot build\",e.type,\"hierarchy of\",e.name+\".\",\"These roots include:\",P.join(\", \")].join(\" \"));w.unshift({hasImpliedRoot:!0,id:I=P[0],pid:\"\",label:I})}try{d=r.stratify().id((function(t){return t.id})).parentId((function(t){return t.pid}))(w)}catch(B){return a.warn([\"Failed to build\",e.type,\"hierarchy of\",e.name+\".\",\"Error:\",B.message].join(\" \"))}var R=r.hierarchy(d),z=!1;if(x)switch(e.branchvalues){case\"remainder\":R.sum((function(t){return t.data.v}));break;case\"total\":R.each((function(t){var n=t.data.data,r=n.v;if(t.children){var i=t.children.reduce((function(t,e){return t+e.data.data.v}),0);if((n.hasImpliedRoot||n.hasMultipleRoots)&&(r=i),r<i*u)return z=!0,a.warn([\"Total value for node\",t.data.data.id,\"of\",e.name,\"is smaller than the sum of its children.\",\"\\nparent value =\",r,\"\\nchildren sum =\",i].join(\" \"))}t.value=r}))}else!function t(e,n,r){var i=0,a=e.children;if(a){for(var o=a.length,s=0;s<o;s++)i+=t(a[s],n,r);r.branches&&i++}else r.leaves&&i++;return e.value=e.data.data.value=i,n._values||(n._values=[]),n._values[e.data.data.i]=i,i}(R,e,{branches:-1!==e.count.indexOf(\"branches\"),leaves:-1!==e.count.indexOf(\"leaves\")});if(!z){var j,F;e.sort&&R.sort((function(t,e){return e.value-t.value}));var N=e.marker.colors||[];return e._hasColorscale?(!!N.length||(N=x?e.values:e._values),c(t,e,{vals:N,containerStr:\"marker\",cLetter:\"c\"}),F=o(e.marker)):j=s(m[\"_\"+e.type+\"colormap\"]),R.each((function(t){var n=t.data.data;n.color=e._hasColorscale?F(N[n.i]):j(N[n.i],n.id)})),w[0].hierarchy=R,w}},n._runCrossTraceCalc=function(t,e){var n=e._fullLayout,r=e.calcdata,i=n[t+\"colorway\"],a=n[\"_\"+t+\"colormap\"];n[\"extend\"+t+\"colors\"]&&(i=l(i,\"treemap\"===t?d:h));var o,s=0;function c(t){var e=t.data.data,n=e.id;!1===e.color&&(a[n]?e.color=a[n]:t.parent?t.parent.parent?e.color=t.parent.data.data.color:(a[n]=e.color=i[s%i.length],s++):e.color=o)}for(var u=0;u<r.length;u++){var f=r[u][0];f.trace.type===t&&f.hierarchy&&(o=f.trace.root.color,f.hierarchy.each(c))}},n.crossTraceCalc=function(t){return n._runCrossTraceCalc(\"sunburst\",t)}},{\"../../components/colorscale\":655,\"../../constants/numerical\":753,\"../../lib\":778,\"../pie/calc\":1163,\"d3-hierarchy\":161,\"fast-isnumeric\":241}],1302:[function(t,e,n){\"use strict\";e.exports={CLICK_TRANSITION_TIME:750,CLICK_TRANSITION_EASING:\"linear\",eventDataKeys:[\"currentPath\",\"root\",\"entry\",\"percentRoot\",\"percentEntry\",\"percentParent\"]}},{}],1303:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./attributes\"),a=t(\"../../plots/domain\").defaults,o=t(\"../bar/defaults\").handleText,s=t(\"../../components/colorscale\"),l=s.hasColorscale,c=s.handleDefaults;e.exports=function(t,e,n,s){function u(n,a){return r.coerce(t,e,i,n,a)}var h=u(\"labels\"),d=u(\"parents\");if(h&&h.length&&d&&d.length){var f=u(\"values\");u(f&&f.length?\"branchvalues\":\"count\"),u(\"level\"),u(\"maxdepth\"),u(\"marker.line.width\")&&u(\"marker.line.color\",s.paper_bgcolor),u(\"marker.colors\");var p=e._hasColorscale=l(t,\"marker\",\"colors\")||(t.marker||{}).coloraxis;p&&c(t,e,s,u,{prefix:\"marker.\",cLetter:\"c\"}),u(\"leaf.opacity\",p?1:.7);var m=u(\"text\");u(\"texttemplate\"),e.texttemplate||u(\"textinfo\",Array.isArray(m)?\"text+label\":\"label\"),u(\"hovertext\"),u(\"hovertemplate\"),o(t,e,s,u,\"auto\",{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),u(\"insidetextorientation\"),u(\"sort\"),u(\"rotation\"),u(\"root.color\"),a(e,s,u),e._length=null}else e.visible=!1}},{\"../../components/colorscale\":655,\"../../lib\":778,\"../../plots/domain\":855,\"../bar/defaults\":925,\"./attributes\":1299}],1304:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../registry\"),a=t(\"../../components/fx/helpers\").appendArrayPointValue,o=t(\"../../components/fx\"),s=t(\"../../lib\"),l=t(\"../../lib/events\"),c=t(\"./helpers\"),u=t(\"../pie/helpers\").formatPieValue;function h(t,e,n){for(var r=t.data.data,i={curveNumber:e.index,pointNumber:r.i,data:e._input,fullData:e},o=0;o<n.length;o++){var s=n[o];s in t&&(i[s]=t[s])}return\"parentString\"in t&&!c.isHierarchyRoot(t)&&(i.parent=t.parentString),a(i,e,r.i),i}e.exports=function(t,e,n,a,d){var f=a[0],p=f.trace,m=f.hierarchy,g=\"sunburst\"===p.type,y=\"treemap\"===p.type;\"_hasHoverLabel\"in p||(p._hasHoverLabel=!1),\"_hasHoverEvent\"in p||(p._hasHoverEvent=!1),t.on(\"mouseover\",(function(i){var a=n._fullLayout;if(!n._dragging&&!1!==a.hovermode){var l=n._fullData[p.index],v=i.data.data,_=v.i,b=c.isHierarchyRoot(i),x=c.getParent(m,i),w=c.getValue(i),k=function(t){return s.castOption(l,_,t)},M=k(\"hovertemplate\"),T=o.castHoverinfo(l,a,_),S=a.separators;if(M||T&&\"none\"!==T&&\"skip\"!==T){var A,L;g&&(A=f.cx+i.pxmid[0]*(1-i.rInscribed),L=f.cy+i.pxmid[1]*(1-i.rInscribed)),y&&(A=i._hoverX,L=i._hoverY);var C,E={},O=[],D=[],I=function(t){return-1!==O.indexOf(t)};T&&(O=\"all\"===T?l._module.attributes.hoverinfo.flags:T.split(\"+\")),E.label=v.label,I(\"label\")&&E.label&&D.push(E.label),v.hasOwnProperty(\"v\")&&(E.value=v.v,E.valueLabel=u(E.value,S),I(\"value\")&&D.push(E.valueLabel)),E.currentPath=i.currentPath=c.getPath(i.data),I(\"current path\")&&!b&&D.push(E.currentPath);var P=[],R=function(){-1===P.indexOf(C)&&(D.push(C),P.push(C))};E.percentParent=i.percentParent=w/c.getValue(x),E.parent=i.parentString=c.getPtLabel(x),I(\"percent parent\")&&(C=c.formatPercent(E.percentParent,S)+\" of \"+E.parent,R()),E.percentEntry=i.percentEntry=w/c.getValue(e),E.entry=i.entry=c.getPtLabel(e),!I(\"percent entry\")||b||i.onPathbar||(C=c.formatPercent(E.percentEntry,S)+\" of \"+E.entry,R()),E.percentRoot=i.percentRoot=w/c.getValue(m),E.root=i.root=c.getPtLabel(m),I(\"percent root\")&&!b&&(C=c.formatPercent(E.percentRoot,S)+\" of \"+E.root,R()),E.text=k(\"hovertext\")||k(\"text\"),I(\"text\")&&s.isValidTextValue(C=E.text)&&D.push(C);var z={trace:l,y:L,text:D.join(\"<br>\"),name:M||I(\"name\")?l.name:void 0,color:k(\"hoverlabel.bgcolor\")||v.color,borderColor:k(\"hoverlabel.bordercolor\"),fontFamily:k(\"hoverlabel.font.family\"),fontSize:k(\"hoverlabel.font.size\"),fontColor:k(\"hoverlabel.font.color\"),nameLength:k(\"hoverlabel.namelength\"),textAlign:k(\"hoverlabel.align\"),hovertemplate:M,hovertemplateLabels:E,eventData:[h(i,l,d.eventDataKeys)]};g&&(z.x0=A-i.rInscribed*i.rpx1,z.x1=A+i.rInscribed*i.rpx1,z.idealAlign=i.pxmid[0]<0?\"left\":\"right\"),y&&(z.x=A,z.idealAlign=A<0?\"left\":\"right\"),o.loneHover(z,{container:a._hoverlayer.node(),outerContainer:a._paper.node(),gd:n}),p._hasHoverLabel=!0}if(y){var j=t.select(\"path.surface\");d.styleOne(j,i,l,{hovered:!0})}p._hasHoverEvent=!0,n.emit(\"plotly_hover\",{points:[h(i,l,d.eventDataKeys)],event:r.event})}})),t.on(\"mouseout\",(function(e){var i=n._fullLayout,a=n._fullData[p.index],s=r.select(this).datum();if(p._hasHoverEvent&&(e.originalEvent=r.event,n.emit(\"plotly_unhover\",{points:[h(s,a,d.eventDataKeys)],event:r.event}),p._hasHoverEvent=!1),p._hasHoverLabel&&(o.loneUnhover(i._hoverlayer.node()),p._hasHoverLabel=!1),y){var l=t.select(\"path.surface\");d.styleOne(l,s,a,{hovered:!1})}})),t.on(\"click\",(function(t){var e=n._fullLayout,a=n._fullData[p.index],s=g&&(c.isHierarchyRoot(t)||c.isLeaf(t)),u=c.getPtId(t),f=c.isEntry(t)?c.findEntryWithChild(m,u):c.findEntryWithLevel(m,u),y=c.getPtId(f),v={points:[h(t,a,d.eventDataKeys)],event:r.event};s||(v.nextLevel=y);var _=l.triggerHandler(n,\"plotly_\"+p.type+\"click\",v);if(!1!==_&&e.hovermode&&(n._hoverdata=[h(t,a,d.eventDataKeys)],o.click(n,r.event)),!s&&!1!==_&&!n._dragging&&!n._transitioning){i.call(\"_storeDirectGUIEdit\",a,e._tracePreGUI[a.uid],{level:a.level});var b={data:[{level:y}],traces:[p.index]},x={frame:{redraw:!1,duration:d.transitionTime},transition:{duration:d.transitionTime,easing:d.transitionEasing},mode:\"immediate\",fromcurrent:!0};o.loneUnhover(e._hoverlayer.node()),i.call(\"animate\",n,b,x)}}))}},{\"../../components/fx\":683,\"../../components/fx/helpers\":679,\"../../lib\":778,\"../../lib/events\":767,\"../../registry\":911,\"../pie/helpers\":1166,\"./helpers\":1305,d3:169}],1305:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../components/color\"),a=t(\"../../lib/setcursor\"),o=t(\"../pie/helpers\");function s(t){return t.data.data.pid}n.findEntryWithLevel=function(t,e){var r;return e&&t.eachAfter((function(t){if(n.getPtId(t)===e)return r=t.copy()})),r||t},n.findEntryWithChild=function(t,e){var r;return t.eachAfter((function(t){for(var i=t.children||[],a=0;a<i.length;a++)if(n.getPtId(i[a])===e)return r=t.copy()})),r||t},n.isEntry=function(t){return!t.parent},n.isLeaf=function(t){return!t.children},n.getPtId=function(t){return t.data.data.id},n.getPtLabel=function(t){return t.data.data.label},n.getValue=function(t){return t.value},n.isHierarchyRoot=function(t){return\"\"===s(t)},n.setSliceCursor=function(t,e,r){var i=r.isTransitioning;if(!i){var o=t.datum();i=r.hideOnRoot&&n.isHierarchyRoot(o)||r.hideOnLeaves&&n.isLeaf(o)}a(t,i?null:\"pointer\")},n.getInsideTextFontKey=function(t,e,n,i,a){var o=n.data.data.i;return r.castOption(e,o,((a||{}).onPathbar?\"pathbar.textfont\":\"insidetextfont\")+\".\"+t)||r.castOption(e,o,\"textfont.\"+t)||i.size},n.getOutsideTextFontKey=function(t,e,n,i){var a=n.data.data.i;return r.castOption(e,a,\"outsidetextfont.\"+t)||r.castOption(e,a,\"textfont.\"+t)||i.size},n.isOutsideText=function(t,e){return!t._hasColorscale&&n.isHierarchyRoot(e)},n.determineTextFont=function(t,e,a,o){return n.isOutsideText(t,e)?function(t,e,r){return{color:n.getOutsideTextFontKey(\"color\",t,e,r),family:n.getOutsideTextFontKey(\"family\",t,e,r),size:n.getOutsideTextFontKey(\"size\",t,e,r)}}(t,e,a):function(t,e,a,o){var s=e.data.data,l=s.i,c=r.castOption(t,l,((o||{}).onPathbar?\"pathbar.textfont\":\"insidetextfont\")+\".color\");return!c&&t._input.textfont&&(c=r.castOption(t._input,l,\"textfont.color\")),{color:c||i.contrast(s.color),family:n.getInsideTextFontKey(\"family\",t,e,a,o),size:n.getInsideTextFontKey(\"size\",t,e,a,o)}}(t,e,a,o)},n.hasTransition=function(t){return!!(t&&t.duration>0)},n.getMaxDepth=function(t){return t.maxdepth>=0?t.maxdepth:1/0},n.isHeader=function(t,e){return!(n.isLeaf(t)||t.depth===e._maxDepth-1)},n.getParent=function(t,e){return n.findEntryWithLevel(t,s(e))},n.listPath=function(t,e){var r=t.parent;if(!r)return[];var i=e?[r.data[e]]:[r];return n.listPath(r,e).concat(i)},n.getPath=function(t){return n.listPath(t,\"label\").join(\"/\")+\"/\"},n.formatValue=o.formatPieValue,n.formatPercent=function(t,e){var n=r.formatPercent(t,0);return\"0%\"===n&&(n=o.formatPiePercent(t,e)),n}},{\"../../components/color\":643,\"../../lib\":778,\"../../lib/setcursor\":799,\"../pie/helpers\":1166}],1306:[function(t,e,n){\"use strict\";e.exports={moduleType:\"trace\",name:\"sunburst\",basePlotModule:t(\"./base_plot\"),categories:[],animatable:!0,attributes:t(\"./attributes\"),layoutAttributes:t(\"./layout_attributes\"),supplyDefaults:t(\"./defaults\"),supplyLayoutDefaults:t(\"./layout_defaults\"),calc:t(\"./calc\").calc,crossTraceCalc:t(\"./calc\").crossTraceCalc,plot:t(\"./plot\").plot,style:t(\"./style\").style,colorbar:t(\"../scatter/marker_colorbar\"),meta:{}}},{\"../scatter/marker_colorbar\":1205,\"./attributes\":1299,\"./base_plot\":1300,\"./calc\":1301,\"./defaults\":1303,\"./layout_attributes\":1307,\"./layout_defaults\":1308,\"./plot\":1309,\"./style\":1310}],1307:[function(t,e,n){\"use strict\";e.exports={sunburstcolorway:{valType:\"colorlist\",editType:\"calc\"},extendsunburstcolors:{valType:\"boolean\",dflt:!0,editType:\"calc\"}}},{}],1308:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./layout_attributes\");e.exports=function(t,e){function n(n,a){return r.coerce(t,e,i,n,a)}n(\"sunburstcolorway\",e.colorway),n(\"extendsunburstcolors\")}},{\"../../lib\":778,\"./layout_attributes\":1307}],1309:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"d3-hierarchy\"),a=t(\"../../components/drawing\"),o=t(\"../../lib\"),s=t(\"../../lib/svg_text_utils\"),l=t(\"../bar/uniform_text\"),c=l.recordMinTextSize,u=l.clearMinTextSize,h=t(\"../pie/plot\"),d=t(\"../pie/helpers\").getRotationAngle,f=h.computeTransform,p=h.transformInsideText,m=t(\"./style\").styleOne,g=t(\"../bar/style\").resizeText,y=t(\"./fx\"),v=t(\"./constants\"),_=t(\"./helpers\");function b(t,e,l,u){var h=t._fullLayout,g=!h.uniformtext.mode&&_.hasTransition(u),b=r.select(l).selectAll(\"g.slice\"),w=e[0],k=w.trace,M=_.findEntryWithLevel(w.hierarchy,k.level),T=_.getMaxDepth(k),S=h._size,A=k.domain,L=S.h*(A.y[1]-A.y[0]),C=.5*Math.min(S.w*(A.x[1]-A.x[0]),L),E=w.cx=S.l+S.w*(A.x[1]+A.x[0])/2,O=w.cy=S.t+S.h*(1-A.y[0])-L/2;if(!M)return b.remove();var D=null,I={};g&&b.each((function(t){I[_.getPtId(t)]={rpx0:t.rpx0,rpx1:t.rpx1,x0:t.x0,x1:t.x1,transform:t.transform},!D&&_.isEntry(t)&&(D=t)}));var P=function(t){return i.partition().size([2*Math.PI,t.height+1])(t)}(M).descendants(),R=M.height+1,z=0,j=T;w.hasMultipleRoots&&_.isHierarchyRoot(M)&&(P=P.slice(1),R-=1,z=1,j+=1),P=P.filter((function(t){return t.y1<=j}));var F=d(k.rotation);F&&P.forEach((function(t){t.x0+=F,t.x1+=F}));var N=Math.min(R,T),B=function(t){return(t-z)/N*C},Y=function(t,e){return[t*Math.cos(e),-t*Math.sin(e)]},H=function(t){return o.pathAnnulus(t.rpx0,t.rpx1,t.x0,t.x1,E,O)},V=function(t){return E+x(t)[0]*(t.transform.rCenter||0)+(t.transform.x||0)},U=function(t){return O+x(t)[1]*(t.transform.rCenter||0)+(t.transform.y||0)};(b=b.data(P,_.getPtId)).enter().append(\"g\").classed(\"slice\",!0),g?b.exit().transition().each((function(){var t=r.select(this);t.select(\"path.surface\").transition().attrTween(\"d\",(function(t){var e=function(t){var e,n=_.getPtId(t),i=I[n],a=I[_.getPtId(M)];if(a){var o=(t.x1>a.x1?2*Math.PI:0)+F;e=t.rpx1<a.rpx1?{rpx0:0,rpx1:0}:{x0:o,x1:o}}else{var s,l=_.getPtId(t.parent);b.each((function(t){if(_.getPtId(t)===l)return s=t}));var c,u=s.children;u.forEach((function(t,e){if(_.getPtId(t)===n)return c=e}));var h=u.length,d=r.interpolate(s.x0,s.x1);e={rpx0:C,rpx1:C,x0:d(c/h),x1:d((c+1)/h)}}return r.interpolate(i,e)}(t);return function(t){return H(e(t))}})),t.select(\"g.slicetext\").attr(\"opacity\",0)})).remove():b.exit().remove(),b.order();var W=null;if(g&&D){var q=_.getPtId(D);b.each((function(t){null===W&&_.getPtId(t)===q&&(W=t.x1)}))}var G=b;function X(t){var e=t.parent,n=I[_.getPtId(e)],i={};if(n){var a=e.children,o=a.indexOf(t),s=a.length,l=r.interpolate(n.x0,n.x1);i.x0=l(o/s),i.x1=l(o/s)}else i.x0=i.x1=0;return i}g&&(G=G.transition().each(\"end\",(function(){var e=r.select(this);_.setSliceCursor(e,t,{hideOnRoot:!0,hideOnLeaves:!0,isTransitioning:!1})}))),G.each((function(i){var l=r.select(this),u=o.ensureSingle(l,\"path\",\"surface\",(function(t){t.style(\"pointer-events\",\"all\")}));i.rpx0=B(i.y0),i.rpx1=B(i.y1),i.xmid=(i.x0+i.x1)/2,i.pxmid=Y(i.rpx1,i.xmid),i.midangle=-(i.xmid-Math.PI/2),i.startangle=-(i.x0-Math.PI/2),i.stopangle=-(i.x1-Math.PI/2),i.halfangle=.5*Math.min(o.angleDelta(i.x0,i.x1)||Math.PI,Math.PI),i.ring=1-i.rpx0/i.rpx1,i.rInscribed=function(t){return 0===t.rpx0&&o.isFullCircle([t.x0,t.x1])?1:Math.max(0,Math.min(1/(1+1/Math.sin(t.halfangle)),t.ring/2))}(i),g?u.transition().attrTween(\"d\",(function(t){var e=function(t){var e,n=I[_.getPtId(t)],i={x0:t.x0,x1:t.x1,rpx0:t.rpx0,rpx1:t.rpx1};if(n)e=n;else if(D)if(t.parent)if(W){var a=(t.x1>W?2*Math.PI:0)+F;e={x0:a,x1:a}}else o.extendFlat(e={rpx0:C,rpx1:C},X(t));else e={rpx0:0,rpx1:0};else e={x0:F,x1:F};return r.interpolate(e,i)}(t);return function(t){return H(e(t))}})):u.attr(\"d\",H),l.call(y,M,t,e,{eventDataKeys:v.eventDataKeys,transitionTime:v.CLICK_TRANSITION_TIME,transitionEasing:v.CLICK_TRANSITION_EASING}).call(_.setSliceCursor,t,{hideOnRoot:!0,hideOnLeaves:!0,isTransitioning:t._transitioning}),u.call(m,i,k);var d=o.ensureSingle(l,\"g\",\"slicetext\"),b=o.ensureSingle(d,\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),x=o.ensureUniformFontSize(t,_.determineTextFont(k,i,h.font));b.text(n.formatSliceLabel(i,M,k,e,h)).classed(\"slicetext\",!0).attr(\"text-anchor\",\"middle\").call(a.font,x).call(s.convertToTspans,t);var T=a.bBox(b.node());i.transform=p(T,i,w),i.transform.targetX=V(i),i.transform.targetY=U(i);var S=function(t,e){var n=t.transform;return f(n,e),n.fontSize=x.size,c(k.type,n,h),o.getTextTransform(n)};g?b.transition().attrTween(\"transform\",(function(t){var e=function(t){var e,n=I[_.getPtId(t)],i=t.transform;if(n)e=n;else if(e={rpx1:t.rpx1,transform:{textPosAngle:i.textPosAngle,scale:0,rotate:i.rotate,rCenter:i.rCenter,x:i.x,y:i.y}},D)if(t.parent)if(W){var a=t.x1>W?2*Math.PI:0;e.x0=e.x1=a}else o.extendFlat(e,X(t));else e.x0=e.x1=F;else e.x0=e.x1=F;var s=r.interpolate(e.transform.textPosAngle,t.transform.textPosAngle),l=r.interpolate(e.rpx1,t.rpx1),u=r.interpolate(e.x0,t.x0),d=r.interpolate(e.x1,t.x1),f=r.interpolate(e.transform.scale,i.scale),p=r.interpolate(e.transform.rotate,i.rotate),m=0===i.rCenter?3:0===e.transform.rCenter?1/3:1,g=r.interpolate(e.transform.rCenter,i.rCenter);return function(t){var e=l(t),n=u(t),r=d(t),a=function(t){return g(Math.pow(t,m))}(t),o={pxmid:Y(e,(n+r)/2),rpx1:e,transform:{textPosAngle:s(t),rCenter:a,x:i.x,y:i.y}};return c(k.type,i,h),{transform:{targetX:V(o),targetY:U(o),scale:f(t),rotate:p(t),rCenter:a}}}}(t);return function(t){return S(e(t),T)}})):b.attr(\"transform\",S(i,T))}))}function x(t){return n=t.transform.textPosAngle,[(e=t.rpx1)*Math.sin(n),-e*Math.cos(n)];var e,n}n.plot=function(t,e,n,i){var a,o,s=t._fullLayout,l=s._sunburstlayer,c=!n,h=!s.uniformtext.mode&&_.hasTransition(n);u(\"sunburst\",s),(a=l.selectAll(\"g.trace.sunburst\").data(e,(function(t){return t[0].trace.uid}))).enter().append(\"g\").classed(\"trace\",!0).classed(\"sunburst\",!0).attr(\"stroke-linejoin\",\"round\"),a.order(),h?(i&&(o=i()),r.transition().duration(n.duration).ease(n.easing).each(\"end\",(function(){o&&o()})).each(\"interrupt\",(function(){o&&o()})).each((function(){l.selectAll(\"g.trace\").each((function(e){b(t,e,this,n)}))}))):(a.each((function(e){b(t,e,this,n)})),s.uniformtext.mode&&g(t,s._sunburstlayer.selectAll(\".trace\"),\"sunburst\")),c&&a.exit().remove()},n.formatSliceLabel=function(t,e,n,r,i){var a=n.texttemplate,s=n.textinfo;if(!(a||s&&\"none\"!==s))return\"\";var l=i.separators,c=t.data.data,u=r[0].hierarchy,h=_.isHierarchyRoot(t),d=_.getParent(u,t),f=_.getValue(t);if(!a){var p,m=s.split(\"+\"),g=function(t){return-1!==m.indexOf(t)},y=[];if(g(\"label\")&&c.label&&y.push(c.label),c.hasOwnProperty(\"v\")&&g(\"value\")&&y.push(_.formatValue(c.v,l)),!h){g(\"current path\")&&y.push(_.getPath(t.data));var v=0;g(\"percent parent\")&&v++,g(\"percent entry\")&&v++,g(\"percent root\")&&v++;var b=v>1;if(v){var x,w=function(t){p=_.formatPercent(x,l),b&&(p+=\" of \"+t),y.push(p)};g(\"percent parent\")&&!h&&(x=f/_.getValue(d),w(\"parent\")),g(\"percent entry\")&&(x=f/_.getValue(e),w(\"entry\")),g(\"percent root\")&&(x=f/_.getValue(u),w(\"root\"))}}return g(\"text\")&&(p=o.castOption(n,c.i,\"text\"),o.isValidTextValue(p)&&y.push(p)),y.join(\"<br>\")}var k=o.castOption(n,c.i,\"texttemplate\");if(!k)return\"\";var M={};c.label&&(M.label=c.label),c.hasOwnProperty(\"v\")&&(M.value=c.v,M.valueLabel=_.formatValue(c.v,l)),M.currentPath=_.getPath(t.data),h||(M.percentParent=f/_.getValue(d),M.percentParentLabel=_.formatPercent(M.percentParent,l),M.parent=_.getPtLabel(d)),M.percentEntry=f/_.getValue(e),M.percentEntryLabel=_.formatPercent(M.percentEntry,l),M.entry=_.getPtLabel(e),M.percentRoot=f/_.getValue(u),M.percentRootLabel=_.formatPercent(M.percentRoot,l),M.root=_.getPtLabel(u),c.hasOwnProperty(\"color\")&&(M.color=c.color);var T=o.castOption(n,c.i,\"text\");return(o.isValidTextValue(T)||\"\"===T)&&(M.text=T),M.customdata=o.castOption(n,c.i,\"customdata\"),o.texttemplateString(k,M,i._d3locale,M,n._meta||{})}},{\"../../components/drawing\":665,\"../../lib\":778,\"../../lib/svg_text_utils\":803,\"../bar/style\":935,\"../bar/uniform_text\":937,\"../pie/helpers\":1166,\"../pie/plot\":1170,\"./constants\":1302,\"./fx\":1304,\"./helpers\":1305,\"./style\":1310,d3:169,\"d3-hierarchy\":161}],1310:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../components/color\"),a=t(\"../../lib\"),o=t(\"../bar/uniform_text\").resizeText;function s(t,e,n){var r=e.data.data,o=!e.children,s=r.i,l=a.castOption(n,s,\"marker.line.color\")||i.defaultLine,c=a.castOption(n,s,\"marker.line.width\")||0;t.style(\"stroke-width\",c).call(i.fill,r.color).call(i.stroke,l).style(\"opacity\",o?n.leaf.opacity:null)}e.exports={style:function(t){var e=t._fullLayout._sunburstlayer.selectAll(\".trace\");o(t,e,\"sunburst\"),e.each((function(t){var e=r.select(this),n=t[0].trace;e.style(\"opacity\",n.opacity),e.selectAll(\"path.surface\").each((function(t){r.select(this).call(s,t,n)}))}))},styleOne:s}},{\"../../components/color\":643,\"../../lib\":778,\"../bar/uniform_text\":937,d3:169}],1311:[function(t,e,n){\"use strict\";var r=t(\"../../components/color\"),i=t(\"../../components/colorscale/attributes\"),a=t(\"../../plots/template_attributes\").hovertemplateAttrs,o=t(\"../../plots/attributes\"),s=t(\"../../lib/extend\").extendFlat,l=t(\"../../plot_api/edit_types\").overrideAll;function c(t){return{show:{valType:\"boolean\",dflt:!1},start:{valType:\"number\",dflt:null,editType:\"plot\"},end:{valType:\"number\",dflt:null,editType:\"plot\"},size:{valType:\"number\",dflt:null,min:0,editType:\"plot\"},project:{x:{valType:\"boolean\",dflt:!1},y:{valType:\"boolean\",dflt:!1},z:{valType:\"boolean\",dflt:!1}},color:{valType:\"color\",dflt:r.defaultLine},usecolormap:{valType:\"boolean\",dflt:!1},width:{valType:\"number\",min:1,max:16,dflt:2},highlight:{valType:\"boolean\",dflt:!0},highlightcolor:{valType:\"color\",dflt:r.defaultLine},highlightwidth:{valType:\"number\",min:1,max:16,dflt:2}}}var u=e.exports=l(s({z:{valType:\"data_array\"},x:{valType:\"data_array\"},y:{valType:\"data_array\"},text:{valType:\"string\",dflt:\"\",arrayOk:!0},hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0},hovertemplate:a(),connectgaps:{valType:\"boolean\",dflt:!1,editType:\"calc\"},surfacecolor:{valType:\"data_array\"}},i(\"\",{colorAttr:\"z or surfacecolor\",showScaleDflt:!0,autoColorDflt:!1,editTypeOverride:\"calc\"}),{contours:{x:c(),y:c(),z:c()},hidesurface:{valType:\"boolean\",dflt:!1},lightposition:{x:{valType:\"number\",min:-1e5,max:1e5,dflt:10},y:{valType:\"number\",min:-1e5,max:1e5,dflt:1e4},z:{valType:\"number\",min:-1e5,max:1e5,dflt:0}},lighting:{ambient:{valType:\"number\",min:0,max:1,dflt:.8},diffuse:{valType:\"number\",min:0,max:1,dflt:.8},specular:{valType:\"number\",min:0,max:2,dflt:.05},roughness:{valType:\"number\",min:0,max:1,dflt:.5},fresnel:{valType:\"number\",min:0,max:5,dflt:.2}},opacity:{valType:\"number\",min:0,max:1,dflt:1},opacityscale:{valType:\"any\",editType:\"calc\"},_deprecated:{zauto:s({},i.zauto,{}),zmin:s({},i.zmin,{}),zmax:s({},i.zmax,{})},hoverinfo:s({},o.hoverinfo),showlegend:s({},o.showlegend,{dflt:!1})}),\"calc\",\"nested\");u.x.editType=u.y.editType=u.z.editType=\"calc+clearAxisTypes\",u.transforms=void 0},{\"../../components/color\":643,\"../../components/colorscale/attributes\":650,\"../../lib/extend\":768,\"../../plot_api/edit_types\":810,\"../../plots/attributes\":824,\"../../plots/template_attributes\":906}],1312:[function(t,e,n){\"use strict\";var r=t(\"../../components/colorscale/calc\");e.exports=function(t,e){r(t,e,e.surfacecolor?{vals:e.surfacecolor,containerStr:\"\",cLetter:\"c\"}:{vals:e.z,containerStr:\"\",cLetter:\"c\"})}},{\"../../components/colorscale/calc\":651}],1313:[function(t,e,n){\"use strict\";var r=t(\"gl-surface3d\"),i=t(\"ndarray\"),a=t(\"ndarray-linear-interpolate\").d2,o=t(\"../heatmap/interp2d\"),s=t(\"../heatmap/find_empties\"),l=t(\"../../lib\").isArrayOrTypedArray,c=t(\"../../lib/gl_format_color\").parseColorScale,u=t(\"../../lib/str2rgbarray\"),h=t(\"../../components/colorscale\").extractOpts;function d(t,e,n){this.scene=t,this.uid=n,this.surface=e,this.data=null,this.showContour=[!1,!1,!1],this.contourStart=[null,null,null],this.contourEnd=[null,null,null],this.contourSize=[0,0,0],this.minValues=[1/0,1/0,1/0],this.maxValues=[-1/0,-1/0,-1/0],this.dataScaleX=1,this.dataScaleY=1,this.refineData=!0,this.objectOffset=[0,0,0]}var f=d.prototype;f.getXat=function(t,e,n,r){var i=l(this.data.x)?l(this.data.x[0])?this.data.x[e][t]:this.data.x[t]:t;return void 0===n?i:r.d2l(i,0,n)},f.getYat=function(t,e,n,r){var i=l(this.data.y)?l(this.data.y[0])?this.data.y[e][t]:this.data.y[e]:e;return void 0===n?i:r.d2l(i,0,n)},f.getZat=function(t,e,n,r){var i=this.data.z[e][t];return null===i&&this.data.connectgaps&&this.data._interpolatedZ&&(i=this.data._interpolatedZ[e][t]),void 0===n?i:r.d2l(i,0,n)},f.handlePick=function(t){if(t.object===this.surface){var e=(t.data.index[1]-1)/this.dataScaleY-1,n=Math.max(Math.min(Math.round((t.data.index[0]-1)/this.dataScaleX-1),this.data.z[0].length-1),0),r=Math.max(Math.min(Math.round(e),this.data._ylength-1),0);t.index=[n,r],t.traceCoordinate=[this.getXat(n,r),this.getYat(n,r),this.getZat(n,r)],t.dataCoordinate=[this.getXat(n,r,this.data.xcalendar,this.scene.fullSceneLayout.xaxis),this.getYat(n,r,this.data.ycalendar,this.scene.fullSceneLayout.yaxis),this.getZat(n,r,this.data.zcalendar,this.scene.fullSceneLayout.zaxis)];for(var i=0;i<3;i++)null!=t.dataCoordinate[i]&&(t.dataCoordinate[i]*=this.scene.dataScale[i]);var a=this.data.hovertext||this.data.text;return t.textLabel=Array.isArray(a)&&a[r]&&void 0!==a[r][n]?a[r][n]:a||\"\",t.data.dataCoordinate=t.dataCoordinate.slice(),this.surface.highlight(t.data),this.scene.glplot.spikes.position=t.dataCoordinate,!0}};var p=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039,1049,1051,1061,1063,1069,1087,1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163,1171,1181,1187,1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277,1279,1283,1289,1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,1381,1399,1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,1489,1493,1499,1511,1523,1531,1543,1549,1553,1559,1567,1571,1579,1583,1597,1601,1607,1609,1613,1619,1621,1627,1637,1657,1663,1667,1669,1693,1697,1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,1801,1811,1823,1831,1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,1913,1931,1933,1949,1951,1973,1979,1987,1993,1997,1999,2003,2011,2017,2027,2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111,2113,2129,2131,2137,2141,2143,2153,2161,2179,2203,2207,2213,2221,2237,2239,2243,2251,2267,2269,2273,2281,2287,2293,2297,2309,2311,2333,2339,2341,2347,2351,2357,2371,2377,2381,2383,2389,2393,2399,2411,2417,2423,2437,2441,2447,2459,2467,2473,2477,2503,2521,2531,2539,2543,2549,2551,2557,2579,2591,2593,2609,2617,2621,2633,2647,2657,2659,2663,2671,2677,2683,2687,2689,2693,2699,2707,2711,2713,2719,2729,2731,2741,2749,2753,2767,2777,2789,2791,2797,2801,2803,2819,2833,2837,2843,2851,2857,2861,2879,2887,2897,2903,2909,2917,2927,2939,2953,2957,2963,2969,2971,2999];function m(t,e){if(t<e)return 0;for(var n=0;0===Math.floor(t%e);)t/=e,n++;return n}function g(t){for(var e=[],n=0;n<p.length;n++)e.push(m(t,p[n]));return e}function y(t){for(var e=g(t),n=t,r=0;r<p.length;r++)if(e[r]>0){n=p[r];break}return n}function v(t,e){if(!(t<1||e<1)){for(var n=g(t),r=g(e),i=1,a=0;a<p.length;a++)i*=Math.pow(p[a],Math.max(n[a],r[a]));return i}}f.calcXnums=function(t){var e,n=[];for(e=1;e<t;e++){var r=this.getXat(e-1,0),i=this.getXat(e,0);n[e-1]=i!==r&&null!=r&&null!=i?Math.abs(i-r):0}var a=0;for(e=1;e<t;e++)a+=n[e-1];for(e=1;e<t;e++)n[e-1]=0===n[e-1]?1:Math.round(a/n[e-1]);return n},f.calcYnums=function(t){var e,n=[];for(e=1;e<t;e++){var r=this.getYat(0,e-1),i=this.getYat(0,e);n[e-1]=i!==r&&null!=r&&null!=i?Math.abs(i-r):0}var a=0;for(e=1;e<t;e++)a+=n[e-1];for(e=1;e<t;e++)n[e-1]=0===n[e-1]?1:Math.round(a/n[e-1]);return n};var _=[1,2,4,6,12,24,36,48,60,120,180,240,360,720,840,1260],b=_[9],x=_[13];function w(t,e,n){var r=n[8]+n[2]*e[0]+n[5]*e[1];return t[0]=(n[6]+n[0]*e[0]+n[3]*e[1])/r,t[1]=(n[7]+n[1]*e[0]+n[4]*e[1])/r,t}function k(t,e,n){return function(t,e,n,r){for(var i=[0,0],o=t.shape[0],s=t.shape[1],l=0;l<o;l++)for(var c=0;c<s;c++)n(i,[l,c],r),t.set(l,c,a(e,i[0],i[1]))}(t,e,w,n),t}function M(t,e){for(var n=!1,r=0;r<t.length;r++)if(e===t[r]){n=!0;break}!1===n&&t.push(e)}f.estimateScale=function(t,e){for(var n=1+function(t){if(0!==t.length){for(var e=1,n=0;n<t.length;n++)e=v(e,t[n]);return e}}(0===e?this.calcXnums(t):this.calcYnums(t));n<b;)n*=2;for(;n>x;)n--,n/=y(n),++n<b&&(n=x);var r=Math.round(n/t);return r>1?r:1},f.refineCoords=function(t){for(var e=this.dataScaleX,n=this.dataScaleY,r=t[0].shape[0],a=t[0].shape[1],o=0|Math.floor(t[0].shape[0]*e+1),s=0|Math.floor(t[0].shape[1]*n+1),l=1+r+1,c=1+a+1,u=i(new Float32Array(l*c),[l,c]),h=[1/e,0,0,0,1/n,0,0,0,1],d=0;d<t.length;++d){this.surface.padField(u,t[d]);var f=i(new Float32Array(o*s),[o,s]);k(f,u,h),t[d]=f}},f.setContourLevels=function(){var t,e,n=[[],[],[]],r=[!1,!1,!1],i=!1;for(t=0;t<3;++t)if(this.showContour[t]&&(i=!0,this.contourSize[t]>0&&null!==this.contourStart[t]&&null!==this.contourEnd[t]&&this.contourEnd[t]>this.contourStart[t]))for(r[t]=!0,e=this.contourStart[t];e<this.contourEnd[t];e+=this.contourSize[t])M(n[t],e*this.scene.dataScale[t]);if(i){var a=[[],[],[]];for(t=0;t<3;++t)this.showContour[t]&&(a[t]=r[t]?n[t]:this.scene.contourLevels[t]);this.surface.update({levels:a})}},f.update=function(t){var e,n,r,a,l=this.scene,d=l.fullSceneLayout,f=this.surface,p=c(t),m=l.dataScale,g=t.z[0].length,y=t._ylength,v=l.contourLevels;this.data=t;var _=[];for(e=0;e<3;e++)for(_[e]=[],n=0;n<g;n++)_[e][n]=[];for(n=0;n<g;n++)for(r=0;r<y;r++)_[0][n][r]=this.getXat(n,r,t.xcalendar,d.xaxis),_[1][n][r]=this.getYat(n,r,t.ycalendar,d.yaxis),_[2][n][r]=this.getZat(n,r,t.zcalendar,d.zaxis);if(t.connectgaps)for(t._emptypoints=s(_[2]),o(_[2],t._emptypoints),t._interpolatedZ=[],n=0;n<g;n++)for(t._interpolatedZ[n]=[],r=0;r<y;r++)t._interpolatedZ[n][r]=_[2][n][r];for(e=0;e<3;e++)for(n=0;n<g;n++)for(r=0;r<y;r++)null==(a=_[e][n][r])?_[e][n][r]=NaN:a=_[e][n][r]*=m[e];for(e=0;e<3;e++)for(n=0;n<g;n++)for(r=0;r<y;r++)null!=(a=_[e][n][r])&&(this.minValues[e]>a&&(this.minValues[e]=a),this.maxValues[e]<a&&(this.maxValues[e]=a));for(e=0;e<3;e++)this.objectOffset[e]=.5*(this.minValues[e]+this.maxValues[e]);for(e=0;e<3;e++)for(n=0;n<g;n++)for(r=0;r<y;r++)null!=(a=_[e][n][r])&&(_[e][n][r]-=this.objectOffset[e]);var b=[i(new Float32Array(g*y),[g,y]),i(new Float32Array(g*y),[g,y]),i(new Float32Array(g*y),[g,y])];for(e=0;e<3;e++)for(n=0;n<g;n++)for(r=0;r<y;r++)b[e].set(n,r,_[e][n][r]);_=[];var w={colormap:p,levels:[[],[],[]],showContour:[!0,!0,!0],showSurface:!t.hidesurface,contourProject:[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],contourWidth:[1,1,1],contourColor:[[1,1,1,1],[1,1,1,1],[1,1,1,1]],contourTint:[1,1,1],dynamicColor:[[1,1,1,1],[1,1,1,1],[1,1,1,1]],dynamicWidth:[1,1,1],dynamicTint:[1,1,1],opacityscale:t.opacityscale,opacity:t.opacity},k=h(t);if(w.intensityBounds=[k.min,k.max],t.surfacecolor){var M=i(new Float32Array(g*y),[g,y]);for(n=0;n<g;n++)for(r=0;r<y;r++)M.set(n,r,t.surfacecolor[r][n]);b.push(M)}else w.intensityBounds[0]*=m[2],w.intensityBounds[1]*=m[2];(x<b[0].shape[0]||x<b[0].shape[1])&&(this.refineData=!1),!0===this.refineData&&(this.dataScaleX=this.estimateScale(b[0].shape[0],0),this.dataScaleY=this.estimateScale(b[0].shape[1],1),1===this.dataScaleX&&1===this.dataScaleY||this.refineCoords(b)),t.surfacecolor&&(w.intensity=b.pop());var T=[!0,!0,!0],S=[\"x\",\"y\",\"z\"];for(e=0;e<3;++e){var A=t.contours[S[e]];T[e]=A.highlight,w.showContour[e]=A.show||A.highlight,w.showContour[e]&&(w.contourProject[e]=[A.project.x,A.project.y,A.project.z],A.show?(this.showContour[e]=!0,w.levels[e]=v[e],f.highlightColor[e]=w.contourColor[e]=u(A.color),f.highlightTint[e]=w.contourTint[e]=A.usecolormap?0:1,w.contourWidth[e]=A.width,this.contourStart[e]=A.start,this.contourEnd[e]=A.end,this.contourSize[e]=A.size):(this.showContour[e]=!1,this.contourStart[e]=null,this.contourEnd[e]=null,this.contourSize[e]=0),A.highlight&&(w.dynamicColor[e]=u(A.highlightcolor),w.dynamicWidth[e]=A.highlightwidth))}(function(t){var e=t[0].rgb,n=t[t.length-1].rgb;return e[0]===n[0]&&e[1]===n[1]&&e[2]===n[2]&&e[3]===n[3]})(p)&&(w.vertexColor=!0),w.objectOffset=this.objectOffset,w.coords=b,f.update(w),f.visible=t.visible,f.enableDynamic=T,f.enableHighlight=T,f.snapToData=!0,\"lighting\"in t&&(f.ambientLight=t.lighting.ambient,f.diffuseLight=t.lighting.diffuse,f.specularLight=t.lighting.specular,f.roughness=t.lighting.roughness,f.fresnel=t.lighting.fresnel),\"lightposition\"in t&&(f.lightPosition=[t.lightposition.x,t.lightposition.y,t.lightposition.z])},f.dispose=function(){this.scene.glplot.remove(this.surface),this.surface.dispose()},e.exports=function(t,e){var n=r({gl:t.glplot.gl}),i=new d(t,n,e.uid);return n._trace=i,i.update(e),t.glplot.add(n),i}},{\"../../components/colorscale\":655,\"../../lib\":778,\"../../lib/gl_format_color\":774,\"../../lib/str2rgbarray\":802,\"../heatmap/find_empties\":1071,\"../heatmap/interp2d\":1074,\"gl-surface3d\":351,ndarray:495,\"ndarray-linear-interpolate\":489}],1314:[function(t,e,n){\"use strict\";var r=t(\"../../registry\"),i=t(\"../../lib\"),a=t(\"../../components/colorscale/defaults\"),o=t(\"./attributes\");function s(t,e,n,r){var i=r(\"opacityscale\");\"max\"===i?e.opacityscale=[[0,.1],[1,1]]:\"min\"===i?e.opacityscale=[[0,1],[1,.1]]:\"extremes\"===i?e.opacityscale=function(t,e){for(var n=[],r=0;r<32;r++){var i=r/31,a=.1+.9*(1-Math.pow(Math.sin(1*i*Math.PI),2));n.push([i,Math.max(0,Math.min(1,a))])}return n}():function(t){var e=0;if(!Array.isArray(t)||t.length<2)return!1;if(!t[0]||!t[t.length-1])return!1;if(0!=+t[0][0]||1!=+t[t.length-1][0])return!1;for(var n=0;n<t.length;n++){var r=t[n];if(2!==r.length||+r[0]<e)return!1;e=+r[0]}return!0}(i)||(e.opacityscale=void 0)}function l(t,e,n){e in t&&!(n in t)&&(t[n]=t[e])}e.exports={supplyDefaults:function(t,e,n,c){var u,h;function d(n,r){return i.coerce(t,e,o,n,r)}var f=d(\"x\"),p=d(\"y\"),m=d(\"z\");if(!m||!m.length||f&&f.length<1||p&&p.length<1)e.visible=!1;else{e._xlength=Array.isArray(f)&&i.isArrayOrTypedArray(f[0])?m.length:m[0].length,e._ylength=m.length,r.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\",\"z\"],c),d(\"text\"),d(\"hovertext\"),d(\"hovertemplate\"),[\"lighting.ambient\",\"lighting.diffuse\",\"lighting.specular\",\"lighting.roughness\",\"lighting.fresnel\",\"lightposition.x\",\"lightposition.y\",\"lightposition.z\",\"hidesurface\",\"connectgaps\",\"opacity\"].forEach((function(t){d(t)}));var g=d(\"surfacecolor\"),y=[\"x\",\"y\",\"z\"];for(u=0;u<3;++u){var v=\"contours.\"+y[u],_=d(v+\".show\"),b=d(v+\".highlight\");if(_||b)for(h=0;h<3;++h)d(v+\".project.\"+y[h]);_&&(d(v+\".color\"),d(v+\".width\"),d(v+\".usecolormap\")),b&&(d(v+\".highlightcolor\"),d(v+\".highlightwidth\")),d(v+\".start\"),d(v+\".end\"),d(v+\".size\")}g||(l(t,\"zmin\",\"cmin\"),l(t,\"zmax\",\"cmax\"),l(t,\"zauto\",\"cauto\")),a(t,e,c,d,{prefix:\"\",cLetter:\"c\"}),s(0,e,0,d),e._length=null}},opacityscaleDefaults:s}},{\"../../components/colorscale/defaults\":653,\"../../lib\":778,\"../../registry\":911,\"./attributes\":1311}],1315:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\").supplyDefaults,colorbar:{min:\"cmin\",max:\"cmax\"},calc:t(\"./calc\"),plot:t(\"./convert\"),moduleType:\"trace\",name:\"surface\",basePlotModule:t(\"../../plots/gl3d\"),categories:[\"gl3d\",\"2dMap\",\"showLegend\"],meta:{}}},{\"../../plots/gl3d\":870,\"./attributes\":1311,\"./calc\":1312,\"./convert\":1313,\"./defaults\":1314}],1316:[function(t,e,n){\"use strict\";var r=t(\"../../components/annotations/attributes\"),i=t(\"../../lib/extend\").extendFlat,a=t(\"../../plot_api/edit_types\").overrideAll,o=t(\"../../plots/font_attributes\"),s=t(\"../../plots/domain\").attributes;t(\"../../constants/docs\"),(e.exports=a({domain:s({name:\"table\",trace:!0}),columnwidth:{valType:\"number\",arrayOk:!0,dflt:null},columnorder:{valType:\"data_array\"},header:{values:{valType:\"data_array\",dflt:[]},format:{valType:\"data_array\",dflt:[]},prefix:{valType:\"string\",arrayOk:!0,dflt:null},suffix:{valType:\"string\",arrayOk:!0,dflt:null},height:{valType:\"number\",dflt:28},align:i({},r.align,{arrayOk:!0}),line:{width:{valType:\"number\",arrayOk:!0,dflt:1},color:{valType:\"color\",arrayOk:!0,dflt:\"grey\"}},fill:{color:{valType:\"color\",arrayOk:!0,dflt:\"white\"}},font:i({},o({arrayOk:!0}))},cells:{values:{valType:\"data_array\",dflt:[]},format:{valType:\"data_array\",dflt:[]},prefix:{valType:\"string\",arrayOk:!0,dflt:null},suffix:{valType:\"string\",arrayOk:!0,dflt:null},height:{valType:\"number\",dflt:20},align:i({},r.align,{arrayOk:!0}),line:{width:{valType:\"number\",arrayOk:!0,dflt:1},color:{valType:\"color\",arrayOk:!0,dflt:\"grey\"}},fill:{color:{valType:\"color\",arrayOk:!0,dflt:\"white\"}},font:i({},o({arrayOk:!0}))}},\"calc\",\"from-root\")).transforms=void 0},{\"../../components/annotations/attributes\":626,\"../../constants/docs\":748,\"../../lib/extend\":768,\"../../plot_api/edit_types\":810,\"../../plots/domain\":855,\"../../plots/font_attributes\":856}],1317:[function(t,e,n){\"use strict\";var r=t(\"../../plots/get_data\").getModuleCalcData,i=t(\"./plot\"),a=\"table\";n.name=a,n.plot=function(t){var e=r(t.calcdata,a)[0];e.length&&i(t,e)},n.clean=function(t,e,n,r){var i=r._has&&r._has(a),o=e._has&&e._has(a);i&&!o&&r._paperdiv.selectAll(\".table\").remove()}},{\"../../plots/get_data\":865,\"./plot\":1324}],1318:[function(t,e,n){\"use strict\";var r=t(\"../../lib/gup\").wrap;e.exports=function(){return r({})}},{\"../../lib/gup\":775}],1319:[function(t,e,n){\"use strict\";e.exports={cellPad:8,columnExtentOffset:10,columnTitleOffset:28,emptyHeaderHeight:16,latexCheck:/^\\$.*\\$$/,goldenRatio:1.618,lineBreaker:\"<br>\",maxDimensionCount:60,overdrag:45,releaseTransitionDuration:120,releaseTransitionEase:\"cubic-out\",scrollbarCaptureWidth:18,scrollbarHideDelay:1e3,scrollbarHideDuration:1e3,scrollbarOffset:5,scrollbarWidth:8,transitionDuration:100,transitionEase:\"cubic-out\",uplift:5,wrapSpacer:\" \",wrapSplitCharacter:\" \",cn:{table:\"table\",tableControlView:\"table-control-view\",scrollBackground:\"scroll-background\",yColumn:\"y-column\",columnBlock:\"column-block\",scrollAreaClip:\"scroll-area-clip\",scrollAreaClipRect:\"scroll-area-clip-rect\",columnBoundary:\"column-boundary\",columnBoundaryClippath:\"column-boundary-clippath\",columnBoundaryRect:\"column-boundary-rect\",columnCells:\"column-cells\",columnCell:\"column-cell\",cellRect:\"cell-rect\",cellText:\"cell-text\",cellTextHolder:\"cell-text-holder\",scrollbarKit:\"scrollbar-kit\",scrollbar:\"scrollbar\",scrollbarSlider:\"scrollbar-slider\",scrollbarGlyph:\"scrollbar-glyph\",scrollbarCaptureZone:\"scrollbar-capture-zone\"}}},{}],1320:[function(t,e,n){\"use strict\";var r=t(\"./constants\"),i=t(\"../../lib/extend\").extendFlat,a=t(\"fast-isnumeric\");function o(t){if(Array.isArray(t)){for(var e=0,n=0;n<t.length;n++)e=Math.max(e,o(t[n]));return e}return t}function s(t,e){return t+e}function l(t){var e,n=t.slice(),r=1/0,i=0;for(e=0;e<n.length;e++)Array.isArray(n[e])||(n[e]=[n[e]]),r=Math.min(r,n[e].length),i=Math.max(i,n[e].length);if(r!==i)for(e=0;e<n.length;e++){var a=i-n[e].length;a&&(n[e]=n[e].concat(c(a)))}return n}function c(t){for(var e=new Array(t),n=0;n<t;n++)e[n]=\"\";return e}function u(t){return t.calcdata.columns.reduce((function(e,n){return n.xIndex<t.xIndex?e+n.columnWidth:e}),0)}function h(t,e){return Object.keys(t).map((function(n){return i({},t[n],{auxiliaryBlocks:e})}))}function d(t,e){for(var n,r={},i=0,a=0,o={firstRowIndex:null,lastRowIndex:null,rows:[]},s=0,l=0,c=0;c<t.length;c++)o.rows.push({rowIndex:c,rowHeight:n=t[c]}),((a+=n)>=e||c===t.length-1)&&(r[i]=o,o.key=l++,o.firstRowIndex=s,o.lastRowIndex=c,o={firstRowIndex:null,lastRowIndex:null,rows:[]},i+=a,s=c+1,a=0);return r}e.exports=function(t,e){var n=l(e.cells.values),f=function(t){return t.slice(e.header.values.length,t.length)},p=l(e.header.values);p.length&&!p[0].length&&(p[0]=[\"\"],p=l(p));var m=p.concat(f(n).map((function(){return c((p[0]||[\"\"]).length)}))),g=e.domain,y=Math.floor(t._fullLayout._size.w*(g.x[1]-g.x[0])),v=Math.floor(t._fullLayout._size.h*(g.y[1]-g.y[0])),_=e.header.values.length?m[0].map((function(){return e.header.height})):[r.emptyHeaderHeight],b=n.length?n[0].map((function(){return e.cells.height})):[],x=_.reduce(s,0),w=d(b,v-x+r.uplift),k=h(d(_,x),[]),M=h(w,k),T={},S=e._fullInput.columnorder.concat(f(n.map((function(t,e){return e})))),A=m.map((function(t,n){var r=Array.isArray(e.columnwidth)?e.columnwidth[Math.min(n,e.columnwidth.length-1)]:e.columnwidth;return a(r)?Number(r):1})),L=A.reduce(s,0);A=A.map((function(t){return t/L*y}));var C=Math.max(o(e.header.line.width),o(e.cells.line.width)),E={key:e.uid+t._context.staticPlot,translateX:g.x[0]*t._fullLayout._size.w,translateY:t._fullLayout._size.h*(1-g.y[1]),size:t._fullLayout._size,width:y,maxLineWidth:C,height:v,columnOrder:S,groupHeight:v,rowBlocks:M,headerRowBlocks:k,scrollY:0,cells:i({},e.cells,{values:n}),headerCells:i({},e.header,{values:m}),gdColumns:m.map((function(t){return t[0]})),gdColumnsOriginalOrder:m.map((function(t){return t[0]})),prevPages:[0,0],scrollbarState:{scrollbarScrollInProgress:!1},columns:m.map((function(t,e){return T[t]=(T[t]||0)+1,{key:t+\"__\"+T[t],label:t,specIndex:e,xIndex:S[e],xScale:u,x:void 0,calcdata:void 0,columnWidth:A[e]}}))};return E.columns.forEach((function(t){t.calcdata=E,t.x=u(t)})),E}},{\"../../lib/extend\":768,\"./constants\":1319,\"fast-isnumeric\":241}],1321:[function(t,e,n){\"use strict\";var r=t(\"../../lib/extend\").extendFlat;n.splitToPanels=function(t){var e=[0,0],n=r({},t,{key:\"header\",type:\"header\",page:0,prevPages:e,currentRepaint:[null,null],dragHandle:!0,values:t.calcdata.headerCells.values[t.specIndex],rowBlocks:t.calcdata.headerRowBlocks,calcdata:r({},t.calcdata,{cells:t.calcdata.headerCells})});return[r({},t,{key:\"cells1\",type:\"cells\",page:0,prevPages:e,currentRepaint:[null,null],dragHandle:!1,values:t.calcdata.cells.values[t.specIndex],rowBlocks:t.calcdata.rowBlocks}),r({},t,{key:\"cells2\",type:\"cells\",page:1,prevPages:e,currentRepaint:[null,null],dragHandle:!1,values:t.calcdata.cells.values[t.specIndex],rowBlocks:t.calcdata.rowBlocks}),n]},n.splitToCells=function(t){var e=function(t){var e=t.rowBlocks[t.page],n=e?e.rows[0].rowIndex:0;return[n,e?n+e.rows.length:0]}(t);return(t.values||[]).slice(e[0],e[1]).map((function(n,r){return{keyWithinBlock:r+(\"string\"==typeof n&&n.match(/[<$&> ]/)?\"_keybuster_\"+Math.random():\"\"),key:e[0]+r,column:t,calcdata:t.calcdata,page:t.page,rowBlocks:t.rowBlocks,value:n}}))}},{\"../../lib/extend\":768}],1322:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./attributes\"),a=t(\"../../plots/domain\").defaults;e.exports=function(t,e,n,o){function s(n,a){return r.coerce(t,e,i,n,a)}a(e,o,s),s(\"columnwidth\"),s(\"header.values\"),s(\"header.format\"),s(\"header.align\"),s(\"header.prefix\"),s(\"header.suffix\"),s(\"header.height\"),s(\"header.line.width\"),s(\"header.line.color\"),s(\"header.fill.color\"),r.coerceFont(s,\"header.font\",r.extendFlat({},o.font)),function(t,e){for(var n=t.header.values.length,r=(t.columnorder||[]).slice(0,n),i=r.slice().sort((function(t,e){return t-e})),a=r.map((function(t){return i.indexOf(t)})),o=a.length;o<n;o++)a.push(o);e(\"columnorder\",a)}(e,s),s(\"cells.values\"),s(\"cells.format\"),s(\"cells.align\"),s(\"cells.prefix\"),s(\"cells.suffix\"),s(\"cells.height\"),s(\"cells.line.width\"),s(\"cells.line.color\"),s(\"cells.fill.color\"),r.coerceFont(s,\"cells.font\",r.extendFlat({},o.font)),e._length=null}},{\"../../lib\":778,\"../../plots/domain\":855,\"./attributes\":1316}],1323:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),calc:t(\"./calc\"),plot:t(\"./plot\"),moduleType:\"trace\",name:\"table\",basePlotModule:t(\"./base_plot\"),categories:[\"noOpacity\"],meta:{}}},{\"./attributes\":1316,\"./base_plot\":1317,\"./calc\":1318,\"./defaults\":1322,\"./plot\":1324}],1324:[function(t,e,n){\"use strict\";var r=t(\"./constants\"),i=t(\"d3\"),a=t(\"../../lib/gup\"),o=t(\"../../components/drawing\"),s=t(\"../../lib/svg_text_utils\"),l=t(\"../../lib\").raiseToTop,c=t(\"../../lib\").strTranslate,u=t(\"../../lib\").cancelTransition,h=t(\"./data_preparation_helper\"),d=t(\"./data_split_helpers\"),f=t(\"../../components/color\");function p(t){return Math.ceil(t.calcdata.maxLineWidth/2)}function m(t,e){return\"clip\"+t._fullLayout._uid+\"_scrollAreaBottomClip_\"+e.key}function g(t,e){return\"clip\"+t._fullLayout._uid+\"_columnBoundaryClippath_\"+e.calcdata.key+\"_\"+e.specIndex}function y(t){return[].concat.apply([],t.map((function(t){return t}))).map((function(t){return t.__data__}))}function v(t,e,n){var o=t.selectAll(\".\"+r.cn.scrollbarKit).data(a.repeat,a.keyFun);o.enter().append(\"g\").classed(r.cn.scrollbarKit,!0).style(\"shape-rendering\",\"geometricPrecision\"),o.each((function(t){var e=t.scrollbarState;e.totalHeight=function(t){var e=t.rowBlocks;return P(e,e.length-1)+(e.length?R(e[e.length-1],1/0):1)}(t),e.scrollableAreaHeight=t.groupHeight-S(t),e.currentlyVisibleHeight=Math.min(e.totalHeight,e.scrollableAreaHeight),e.ratio=e.currentlyVisibleHeight/e.totalHeight,e.barLength=Math.max(e.ratio*e.currentlyVisibleHeight,r.goldenRatio*r.scrollbarWidth),e.barWiggleRoom=e.currentlyVisibleHeight-e.barLength,e.wiggleRoom=Math.max(0,e.totalHeight-e.scrollableAreaHeight),e.topY=0===e.barWiggleRoom?0:t.scrollY/e.wiggleRoom*e.barWiggleRoom,e.bottomY=e.topY+e.barLength,e.dragMultiplier=e.wiggleRoom/e.barWiggleRoom})).attr(\"transform\",(function(t){return c(t.width+r.scrollbarWidth/2+r.scrollbarOffset,S(t))}));var s=o.selectAll(\".\"+r.cn.scrollbar).data(a.repeat,a.keyFun);s.enter().append(\"g\").classed(r.cn.scrollbar,!0);var l=s.selectAll(\".\"+r.cn.scrollbarSlider).data(a.repeat,a.keyFun);l.enter().append(\"g\").classed(r.cn.scrollbarSlider,!0),l.attr(\"transform\",(function(t){return c(0,t.scrollbarState.topY||0)}));var u=l.selectAll(\".\"+r.cn.scrollbarGlyph).data(a.repeat,a.keyFun);u.enter().append(\"line\").classed(r.cn.scrollbarGlyph,!0).attr(\"stroke\",\"black\").attr(\"stroke-width\",r.scrollbarWidth).attr(\"stroke-linecap\",\"round\").attr(\"y1\",r.scrollbarWidth/2),u.attr(\"y2\",(function(t){return t.scrollbarState.barLength-r.scrollbarWidth/2})).attr(\"stroke-opacity\",(function(t){return t.columnDragInProgress||!t.scrollbarState.barWiggleRoom||n?0:.4})),u.transition().delay(0).duration(0),u.transition().delay(r.scrollbarHideDelay).duration(r.scrollbarHideDuration).attr(\"stroke-opacity\",0);var h=s.selectAll(\".\"+r.cn.scrollbarCaptureZone).data(a.repeat,a.keyFun);h.enter().append(\"line\").classed(r.cn.scrollbarCaptureZone,!0).attr(\"stroke\",\"white\").attr(\"stroke-opacity\",.01).attr(\"stroke-width\",r.scrollbarCaptureWidth).attr(\"stroke-linecap\",\"butt\").attr(\"y1\",0).on(\"mousedown\",(function(n){var r=i.event.y,a=this.getBoundingClientRect(),o=n.scrollbarState,s=r-a.top,l=i.scale.linear().domain([0,o.scrollableAreaHeight]).range([0,o.totalHeight]).clamp(!0);o.topY<=s&&s<=o.bottomY||L(e,t,null,l(s-o.barLength/2))(n)})).call(i.behavior.drag().origin((function(t){return i.event.stopPropagation(),t.scrollbarState.scrollbarScrollInProgress=!0,t})).on(\"drag\",L(e,t)).on(\"dragend\",(function(){}))),h.attr(\"y2\",(function(t){return t.scrollbarState.scrollableAreaHeight})),e._context.staticPlot&&(u.remove(),h.remove())}function _(t,e,n,s){var l=function(t){var e=t.selectAll(\".\"+r.cn.columnCell).data(d.splitToCells,(function(t){return t.keyWithinBlock}));return e.enter().append(\"g\").classed(r.cn.columnCell,!0),e.exit().remove(),e}(function(t){var e=t.selectAll(\".\"+r.cn.columnCells).data(a.repeat,a.keyFun);return e.enter().append(\"g\").classed(r.cn.columnCells,!0),e.exit().remove(),e}(n));(function(t){t.each((function(t,e){var n=t.calcdata.cells.font,r=t.column.specIndex,i={size:w(n.size,r,e),color:w(n.color,r,e),family:w(n.family,r,e)};t.rowNumber=t.key,t.align=w(t.calcdata.cells.align,r,e),t.cellBorderWidth=w(t.calcdata.cells.line.width,r,e),t.font=i}))})(l),function(t){var e=t.selectAll(\".\"+r.cn.cellRect).data(a.repeat,(function(t){return t.keyWithinBlock}));return e.enter().append(\"rect\").classed(r.cn.cellRect,!0),e}(l).attr(\"width\",(function(t){return t.column.columnWidth})).attr(\"stroke-width\",(function(t){return t.cellBorderWidth})).each((function(t){var e=i.select(this);f.stroke(e,w(t.calcdata.cells.line.color,t.column.specIndex,t.rowNumber)),f.fill(e,w(t.calcdata.cells.fill.color,t.column.specIndex,t.rowNumber))}));var c=function(t){var e=t.selectAll(\".\"+r.cn.cellText).data(a.repeat,(function(t){return t.keyWithinBlock}));return e.enter().append(\"text\").classed(r.cn.cellText,!0).style(\"cursor\",(function(){return\"auto\"})).on(\"mousedown\",(function(){i.event.stopPropagation()})),e}(function(t){var e=t.selectAll(\".\"+r.cn.cellTextHolder).data(a.repeat,(function(t){return t.keyWithinBlock}));return e.enter().append(\"g\").classed(r.cn.cellTextHolder,!0).style(\"shape-rendering\",\"geometricPrecision\"),e}(l));(function(t){t.each((function(t){o.font(i.select(this),t.font)}))})(c),b(c,e,s,t),I(l)}function b(t,e,n,a){t.text((function(t){var e=t.column.specIndex,n=t.rowNumber,a=t.value,o=\"string\"==typeof a,s=o&&a.match(/<br>/i),l=!o||s;t.mayHaveMarkup=o&&a.match(/[<&>]/);var c,u=\"string\"==typeof(c=a)&&c.match(r.latexCheck);t.latex=u;var h,d,f=u?\"\":w(t.calcdata.cells.prefix,e,n)||\"\",p=u?\"\":w(t.calcdata.cells.suffix,e,n)||\"\",m=u?null:w(t.calcdata.cells.format,e,n)||null,g=f+(m?i.format(m)(t.value):t.value)+p;if(t.wrappingNeeded=!t.wrapped&&!l&&!u&&(h=x(g)),t.cellHeightMayIncrease=s||u||t.mayHaveMarkup||(void 0===h?x(g):h),t.needsConvertToTspans=t.mayHaveMarkup||t.wrappingNeeded||t.latex,t.wrappingNeeded){var y=(\" \"===r.wrapSplitCharacter?g.replace(/<a href=/gi,\"<a_href=\"):g).split(r.wrapSplitCharacter),v=\" \"===r.wrapSplitCharacter?y.map((function(t){return t.replace(/<a_href=/gi,\"<a href=\")})):y;t.fragments=v.map((function(t){return{text:t,width:null}})),t.fragments.push({fragment:r.wrapSpacer,width:null}),d=v.join(r.lineBreaker)+r.lineBreaker+r.wrapSpacer}else delete t.fragments,d=g;return d})).attr(\"dy\",(function(t){return t.needsConvertToTspans?0:\"0.75em\"})).each((function(t){var o=this,l=i.select(o);t.needsConvertToTspans?s.convertToTspans(l,a,(t.wrappingNeeded?E:O)(n,o,e,a,t)):i.select(o.parentNode).attr(\"transform\",(function(t){return c(D(t),r.cellPad)})).attr(\"text-anchor\",(function(t){return{left:\"start\",center:\"middle\",right:\"end\"}[t.align]}))}))}function x(t){return-1!==t.indexOf(r.wrapSplitCharacter)}function w(t,e,n){if(Array.isArray(t)){var r=t[Math.min(e,t.length-1)];return Array.isArray(r)?r[Math.min(n,r.length-1)]:r}return t}function k(t,e,n){t.transition().ease(r.releaseTransitionEase).duration(r.releaseTransitionDuration).attr(\"transform\",c(e.x,n))}function M(t){return\"cells\"===t.type}function T(t){return\"header\"===t.type}function S(t){return(t.rowBlocks.length?t.rowBlocks[0].auxiliaryBlocks:[]).reduce((function(t,e){return t+R(e,1/0)}),0)}function A(t,e,n){var r=y(e)[0];if(void 0!==r){var i=r.rowBlocks,a=r.calcdata,o=P(i,i.length),s=r.calcdata.groupHeight-S(r),l=a.scrollY=Math.max(0,Math.min(o-s,a.scrollY)),u=function(t,e,n){for(var r=[],i=0,a=0;a<t.length;a++){for(var o=t[a],s=o.rows,l=0,c=0;c<s.length;c++)l+=s[c].rowHeight;o.allRowsHeight=l,e<i+l&&e+n>i&&r.push(a),i+=l}return r}(i,l,s);1===u.length&&(u[0]===i.length-1?u.unshift(u[0]-1):u.push(u[0]+1)),u[0]%2&&u.reverse(),e.each((function(t,e){t.page=u[e],t.scrollY=l})),e.attr(\"transform\",(function(t){var e=P(t.rowBlocks,t.page)-t.scrollY;return c(0,e)})),t&&(C(t,n,e,u,r.prevPages,r,0),C(t,n,e,u,r.prevPages,r,1),v(n,t))}}function L(t,e,n,a){return function(o){var s=o.calcdata?o.calcdata:o,l=e.filter((function(t){return s.key===t.key})),c=s.scrollY;s.scrollY=void 0===a?s.scrollY+(n||s.scrollbarState.dragMultiplier)*i.event.dy:a;var u=l.selectAll(\".\"+r.cn.yColumn).selectAll(\".\"+r.cn.columnBlock).filter(M);return A(t,u,l),s.scrollY===c}}function C(t,e,n,r,i,a,o){r[o]!==i[o]&&(clearTimeout(a.currentRepaint[o]),a.currentRepaint[o]=setTimeout((function(){var a=n.filter((function(t,e){return e===o&&r[e]!==i[e]}));_(t,e,a,n),i[o]=r[o]})))}function E(t,e,n,a){return function(){var o=i.select(e.parentNode);o.each((function(t){var e=t.fragments;o.selectAll(\"tspan.line\").each((function(t,n){e[n].width=this.getComputedTextLength()}));var n,i,a=e[e.length-1].width,s=e.slice(0,-1),l=[],c=0,u=t.column.columnWidth-2*r.cellPad;for(t.value=\"\";s.length;)c+(i=(n=s.shift()).width+a)>u&&(t.value+=l.join(r.wrapSpacer)+r.lineBreaker,l=[],c=0),l.push(n.text),c+=i;c&&(t.value+=l.join(r.wrapSpacer)),t.wrapped=!0})),o.selectAll(\"tspan.line\").remove(),b(o.select(\".\"+r.cn.cellText),n,t,a),i.select(e.parentNode.parentNode).call(I)}}function O(t,e,n,a,o){return function(){if(!o.settledY){var s=i.select(e.parentNode),l=j(o),u=o.key-l.firstRowIndex,h=l.rows[u].rowHeight,d=o.cellHeightMayIncrease?e.parentNode.getBoundingClientRect().height+2*r.cellPad:h,f=Math.max(d,h);f-l.rows[u].rowHeight&&(l.rows[u].rowHeight=f,t.selectAll(\".\"+r.cn.columnCell).call(I),A(null,t.filter(M),0),v(n,a,!0)),s.attr(\"transform\",(function(){var t=this,e=t.parentNode.getBoundingClientRect(),n=i.select(t.parentNode).select(\".\"+r.cn.cellRect).node().getBoundingClientRect(),a=t.transform.baseVal.consolidate(),s=n.top-e.top+(a?a.matrix.f:r.cellPad);return c(D(o,i.select(t.parentNode).select(\".\"+r.cn.cellTextHolder).node().getBoundingClientRect().width),s)})),o.settledY=!0}}}function D(t,e){switch(t.align){case\"left\":return r.cellPad;case\"right\":return t.column.columnWidth-(e||0)-r.cellPad;case\"center\":return(t.column.columnWidth-(e||0))/2;default:return r.cellPad}}function I(t){t.attr(\"transform\",(function(t){var e=t.rowBlocks[0].auxiliaryBlocks.reduce((function(t,e){return t+R(e,1/0)}),0),n=R(j(t),t.key);return c(0,n+e)})).selectAll(\".\"+r.cn.cellRect).attr(\"height\",(function(t){return(e=j(t),n=t.key,e.rows[n-e.firstRowIndex]).rowHeight;var e,n}))}function P(t,e){for(var n=0,r=e-1;r>=0;r--)n+=z(t[r]);return n}function R(t,e){for(var n=0,r=0;r<t.rows.length&&t.rows[r].rowIndex<e;r++)n+=t.rows[r].rowHeight;return n}function z(t){var e=t.allRowsHeight;if(void 0!==e)return e;for(var n=0,r=0;r<t.rows.length;r++)n+=t.rows[r].rowHeight;return t.allRowsHeight=n,n}function j(t){return t.rowBlocks[t.page]}e.exports=function(t,e){var n=!t._context.staticPlot,s=t._fullLayout._paper.selectAll(\".\"+r.cn.table).data(e.map((function(e){var n=a.unwrap(e);return h(t,n.trace)})),a.keyFun);s.exit().remove(),s.enter().append(\"g\").classed(r.cn.table,!0).attr(\"overflow\",\"visible\").style(\"box-sizing\",\"content-box\").style(\"position\",\"absolute\").style(\"left\",0).style(\"overflow\",\"visible\").style(\"shape-rendering\",\"crispEdges\").style(\"pointer-events\",\"all\"),s.attr(\"width\",(function(t){return t.width+t.size.l+t.size.r})).attr(\"height\",(function(t){return t.height+t.size.t+t.size.b})).attr(\"transform\",(function(t){return c(t.translateX,t.translateY)}));var f=s.selectAll(\".\"+r.cn.tableControlView).data(a.repeat,a.keyFun),b=f.enter().append(\"g\").classed(r.cn.tableControlView,!0).style(\"box-sizing\",\"content-box\");if(n){var x=\"onwheel\"in document?\"wheel\":\"mousewheel\";b.on(\"mousemove\",(function(e){f.filter((function(t){return e===t})).call(v,t)})).on(x,(function(e){e.scrollbarState.wheeling||(e.scrollbarState.wheeling=!0,L(t,f,null,e.scrollY+i.event.deltaY)(e)||(i.event.stopPropagation(),i.event.preventDefault()),e.scrollbarState.wheeling=!1)})).call(v,t,!0)}f.attr(\"transform\",(function(t){return c(t.size.l,t.size.t)}));var w=f.selectAll(\".\"+r.cn.scrollBackground).data(a.repeat,a.keyFun);w.enter().append(\"rect\").classed(r.cn.scrollBackground,!0).attr(\"fill\",\"none\"),w.attr(\"width\",(function(t){return t.width})).attr(\"height\",(function(t){return t.height})),f.each((function(e){o.setClipUrl(i.select(this),m(t,e),t)}));var S=f.selectAll(\".\"+r.cn.yColumn).data((function(t){return t.columns}),a.keyFun);S.enter().append(\"g\").classed(r.cn.yColumn,!0),S.exit().remove(),S.attr(\"transform\",(function(t){return c(t.x,0)})),n&&S.call(i.behavior.drag().origin((function(e){return k(i.select(this),e,-r.uplift),l(this),e.calcdata.columnDragInProgress=!0,v(f.filter((function(t){return e.calcdata.key===t.key})),t),e})).on(\"drag\",(function(t){var e=i.select(this),n=function(e){return(t===e?i.event.x:e.x)+e.columnWidth/2};t.x=Math.max(-r.overdrag,Math.min(t.calcdata.width+r.overdrag-t.columnWidth,i.event.x)),y(S).filter((function(e){return e.calcdata.key===t.calcdata.key})).sort((function(t,e){return n(t)-n(e)})).forEach((function(e,n){e.xIndex=n,e.x=t===e?e.x:e.xScale(e)})),S.filter((function(e){return t!==e})).transition().ease(r.transitionEase).duration(r.transitionDuration).attr(\"transform\",(function(t){return c(t.x,0)})),e.call(u).attr(\"transform\",c(t.x,-r.uplift))})).on(\"dragend\",(function(e){var n=i.select(this),r=e.calcdata;e.x=e.xScale(e),e.calcdata.columnDragInProgress=!1,k(n,e,0),function(t,e,n){var r=e.gdColumnsOriginalOrder;e.gdColumns.sort((function(t,e){return n[r.indexOf(t)]-n[r.indexOf(e)]})),e.columnorder=n,t.emit(\"plotly_restyle\")}(t,r,r.columns.map((function(t){return t.xIndex})))}))),S.each((function(e){o.setClipUrl(i.select(this),g(t,e),t)}));var C=S.selectAll(\".\"+r.cn.columnBlock).data(d.splitToPanels,a.keyFun);C.enter().append(\"g\").classed(r.cn.columnBlock,!0).attr(\"id\",(function(t){return t.key})),C.style(\"cursor\",(function(t){return t.dragHandle?\"ew-resize\":t.calcdata.scrollbarState.barWiggleRoom?\"ns-resize\":\"default\"}));var E=C.filter(T),O=C.filter(M);n&&O.call(i.behavior.drag().origin((function(t){return i.event.stopPropagation(),t})).on(\"drag\",L(t,f,-1)).on(\"dragend\",(function(){}))),_(t,f,E,C),_(t,f,O,C);var D=f.selectAll(\".\"+r.cn.scrollAreaClip).data(a.repeat,a.keyFun);D.enter().append(\"clipPath\").classed(r.cn.scrollAreaClip,!0).attr(\"id\",(function(e){return m(t,e)}));var I=D.selectAll(\".\"+r.cn.scrollAreaClipRect).data(a.repeat,a.keyFun);I.enter().append(\"rect\").classed(r.cn.scrollAreaClipRect,!0).attr(\"x\",-r.overdrag).attr(\"y\",-r.uplift).attr(\"fill\",\"none\"),I.attr(\"width\",(function(t){return t.width+2*r.overdrag})).attr(\"height\",(function(t){return t.height+r.uplift})),S.selectAll(\".\"+r.cn.columnBoundary).data(a.repeat,a.keyFun).enter().append(\"g\").classed(r.cn.columnBoundary,!0);var P=S.selectAll(\".\"+r.cn.columnBoundaryClippath).data(a.repeat,a.keyFun);P.enter().append(\"clipPath\").classed(r.cn.columnBoundaryClippath,!0),P.attr(\"id\",(function(e){return g(t,e)}));var R=P.selectAll(\".\"+r.cn.columnBoundaryRect).data(a.repeat,a.keyFun);R.enter().append(\"rect\").classed(r.cn.columnBoundaryRect,!0).attr(\"fill\",\"none\"),R.attr(\"width\",(function(t){return t.columnWidth+2*p(t)})).attr(\"height\",(function(t){return t.calcdata.height+2*p(t)+r.uplift})).attr(\"x\",(function(t){return-p(t)})).attr(\"y\",(function(t){return-p(t)})),A(null,O,f)}},{\"../../components/color\":643,\"../../components/drawing\":665,\"../../lib\":778,\"../../lib/gup\":775,\"../../lib/svg_text_utils\":803,\"./constants\":1319,\"./data_preparation_helper\":1320,\"./data_split_helpers\":1321,d3:169}],1325:[function(t,e,n){\"use strict\";var r=t(\"../../plots/template_attributes\").hovertemplateAttrs,i=t(\"../../plots/template_attributes\").texttemplateAttrs,a=t(\"../../components/colorscale/attributes\"),o=t(\"../../plots/domain\").attributes,s=t(\"../pie/attributes\"),l=t(\"../sunburst/attributes\"),c=t(\"./constants\"),u=t(\"../../lib/extend\").extendFlat;e.exports={labels:l.labels,parents:l.parents,values:l.values,branchvalues:l.branchvalues,count:l.count,level:l.level,maxdepth:l.maxdepth,tiling:{packing:{valType:\"enumerated\",values:[\"squarify\",\"binary\",\"dice\",\"slice\",\"slice-dice\",\"dice-slice\"],dflt:\"squarify\",editType:\"plot\"},squarifyratio:{valType:\"number\",min:1,dflt:1,editType:\"plot\"},flip:{valType:\"flaglist\",flags:[\"x\",\"y\"],dflt:\"\",editType:\"plot\"},pad:{valType:\"number\",min:0,dflt:3,editType:\"plot\"},editType:\"calc\"},marker:u({pad:{t:{valType:\"number\",min:0,editType:\"plot\"},l:{valType:\"number\",min:0,editType:\"plot\"},r:{valType:\"number\",min:0,editType:\"plot\"},b:{valType:\"number\",min:0,editType:\"plot\"},editType:\"calc\"},colors:l.marker.colors,depthfade:{valType:\"enumerated\",values:[!0,!1,\"reversed\"],editType:\"style\"},line:l.marker.line,editType:\"calc\"},a(\"marker\",{colorAttr:\"colors\",anim:!1})),pathbar:{visible:{valType:\"boolean\",dflt:!0,editType:\"plot\"},side:{valType:\"enumerated\",values:[\"top\",\"bottom\"],dflt:\"top\",editType:\"plot\"},edgeshape:{valType:\"enumerated\",values:[\">\",\"<\",\"|\",\"/\",\"\\\\\"],dflt:\">\",editType:\"plot\"},thickness:{valType:\"number\",min:12,editType:\"plot\"},textfont:u({},s.textfont,{}),editType:\"calc\"},text:s.text,textinfo:l.textinfo,texttemplate:i({editType:\"plot\"},{keys:c.eventDataKeys.concat([\"label\",\"value\"])}),hovertext:s.hovertext,hoverinfo:l.hoverinfo,hovertemplate:r({},{keys:c.eventDataKeys}),textfont:s.textfont,insidetextfont:s.insidetextfont,outsidetextfont:u({},s.outsidetextfont,{}),textposition:{valType:\"enumerated\",values:[\"top left\",\"top center\",\"top right\",\"middle left\",\"middle center\",\"middle right\",\"bottom left\",\"bottom center\",\"bottom right\"],dflt:\"top left\",editType:\"plot\"},sort:s.sort,root:l.root,domain:o({name:\"treemap\",trace:!0,editType:\"calc\"})}},{\"../../components/colorscale/attributes\":650,\"../../lib/extend\":768,\"../../plots/domain\":855,\"../../plots/template_attributes\":906,\"../pie/attributes\":1161,\"../sunburst/attributes\":1299,\"./constants\":1328}],1326:[function(t,e,n){\"use strict\";var r=t(\"../../plots/plots\");n.name=\"treemap\",n.plot=function(t,e,i,a){r.plotBasePlot(n.name,t,e,i,a)},n.clean=function(t,e,i,a){r.cleanBasePlot(n.name,t,e,i,a)}},{\"../../plots/plots\":891}],1327:[function(t,e,n){\"use strict\";var r=t(\"../sunburst/calc\");n.calc=function(t,e){return r.calc(t,e)},n.crossTraceCalc=function(t){return r._runCrossTraceCalc(\"treemap\",t)}},{\"../sunburst/calc\":1301}],1328:[function(t,e,n){\"use strict\";e.exports={CLICK_TRANSITION_TIME:750,CLICK_TRANSITION_EASING:\"poly\",eventDataKeys:[\"currentPath\",\"root\",\"entry\",\"percentRoot\",\"percentEntry\",\"percentParent\"],gapWithPathbar:1}},{}],1329:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./attributes\"),a=t(\"../../components/color\"),o=t(\"../../plots/domain\").defaults,s=t(\"../bar/defaults\").handleText,l=t(\"../bar/constants\").TEXTPAD,c=t(\"../../components/colorscale\"),u=c.hasColorscale,h=c.handleDefaults;e.exports=function(t,e,n,c){function d(n,a){return r.coerce(t,e,i,n,a)}var f=d(\"labels\"),p=d(\"parents\");if(f&&f.length&&p&&p.length){var m=d(\"values\");d(m&&m.length?\"branchvalues\":\"count\"),d(\"level\"),d(\"maxdepth\"),\"squarify\"===d(\"tiling.packing\")&&d(\"tiling.squarifyratio\"),d(\"tiling.flip\"),d(\"tiling.pad\");var g=d(\"text\");d(\"texttemplate\"),e.texttemplate||d(\"textinfo\",Array.isArray(g)?\"text+label\":\"label\"),d(\"hovertext\"),d(\"hovertemplate\");var y=d(\"pathbar.visible\");s(t,e,c,d,\"auto\",{hasPathbar:y,moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),d(\"textposition\");var v=-1!==e.textposition.indexOf(\"bottom\");d(\"marker.line.width\")&&d(\"marker.line.color\",c.paper_bgcolor);var _=d(\"marker.colors\"),b=e._hasColorscale=u(t,\"marker\",\"colors\")||(t.marker||{}).coloraxis;b?h(t,e,c,d,{prefix:\"marker.\",cLetter:\"c\"}):d(\"marker.depthfade\",!(_||[]).length);var x=2*e.textfont.size;d(\"marker.pad.t\",v?x/4:x),d(\"marker.pad.l\",x/4),d(\"marker.pad.r\",x/4),d(\"marker.pad.b\",v?x:x/4),b&&h(t,e,c,d,{prefix:\"marker.\",cLetter:\"c\"}),e._hovered={marker:{line:{width:2,color:a.contrast(c.paper_bgcolor)}}},y&&(d(\"pathbar.thickness\",e.pathbar.textfont.size+2*l),d(\"pathbar.side\"),d(\"pathbar.edgeshape\")),d(\"sort\"),d(\"root.color\"),o(e,c,d),e._length=null}else e.visible=!1}},{\"../../components/color\":643,\"../../components/colorscale\":655,\"../../lib\":778,\"../../plots/domain\":855,\"../bar/constants\":923,\"../bar/defaults\":925,\"./attributes\":1325}],1330:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../lib\"),a=t(\"../../components/drawing\"),o=t(\"../../lib/svg_text_utils\"),s=t(\"./partition\"),l=t(\"./style\").styleOne,c=t(\"./constants\"),u=t(\"../sunburst/helpers\"),h=t(\"../sunburst/fx\"),d=!0;e.exports=function(t,e,n,f,p){var m=p.barDifY,g=p.width,y=p.height,v=p.viewX,_=p.viewY,b=p.pathSlice,x=p.toMoveInsideSlice,w=p.strTransform,k=p.hasTransition,M=p.handleSlicesExit,T=p.makeUpdateSliceInterpolator,S=p.makeUpdateTextInterpolator,A={},L=t._fullLayout,C=e[0],E=C.trace,O=C.hierarchy,D=g/E._entryDepth,I=u.listPath(n.data,\"id\"),P=s(O.copy(),[g,y],{packing:\"dice\",pad:{inner:0,top:0,left:0,right:0,bottom:0}}).descendants();(P=P.filter((function(t){var e=I.indexOf(t.data.id);return-1!==e&&(t.x0=D*e,t.x1=D*(e+1),t.y0=m,t.y1=m+y,t.onPathbar=!0,!0)}))).reverse(),(f=f.data(P,u.getPtId)).enter().append(\"g\").classed(\"pathbar\",!0),M(f,d,A,[g,y],b),f.order();var R=f;k&&(R=R.transition().each(\"end\",(function(){var e=r.select(this);u.setSliceCursor(e,t,{hideOnRoot:!1,hideOnLeaves:!1,isTransitioning:!1})}))),R.each((function(s){s._hoverX=v(s.x1-Math.min(g,y)/2),s._hoverY=_(s.y1-y/2);var f=r.select(this),p=i.ensureSingle(f,\"path\",\"surface\",(function(t){t.style(\"pointer-events\",\"all\")}));k?p.transition().attrTween(\"d\",(function(t){var e=T(t,d,A,[g,y]);return function(t){return b(e(t))}})):p.attr(\"d\",b),f.call(h,n,t,e,{styleOne:l,eventDataKeys:c.eventDataKeys,transitionTime:c.CLICK_TRANSITION_TIME,transitionEasing:c.CLICK_TRANSITION_EASING}).call(u.setSliceCursor,t,{hideOnRoot:!1,hideOnLeaves:!1,isTransitioning:t._transitioning}),p.call(l,s,E,{hovered:!1}),s._text=(u.getPtLabel(s)||\"\").split(\"<br>\").join(\" \")||\"\";var m=i.ensureSingle(f,\"g\",\"slicetext\"),M=i.ensureSingle(m,\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),C=i.ensureUniformFontSize(t,u.determineTextFont(E,s,L.font,{onPathbar:!0}));M.text(s._text||\" \").classed(\"slicetext\",!0).attr(\"text-anchor\",\"start\").call(a.font,C).call(o.convertToTspans,t),s.textBB=a.bBox(M.node()),s.transform=x(s,{fontSize:C.size,onPathbar:!0}),s.transform.fontSize=C.size,k?M.transition().attrTween(\"transform\",(function(t){var e=S(t,d,A,[g,y]);return function(t){return w(e(t))}})):M.attr(\"transform\",w(s))}))}},{\"../../components/drawing\":665,\"../../lib\":778,\"../../lib/svg_text_utils\":803,\"../sunburst/fx\":1304,\"../sunburst/helpers\":1305,\"./constants\":1328,\"./partition\":1335,\"./style\":1337,d3:169}],1331:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../lib\"),a=t(\"../../components/drawing\"),o=t(\"../../lib/svg_text_utils\"),s=t(\"./partition\"),l=t(\"./style\").styleOne,c=t(\"./constants\"),u=t(\"../sunburst/helpers\"),h=t(\"../sunburst/fx\"),d=t(\"../sunburst/plot\").formatSliceLabel,f=!1;e.exports=function(t,e,n,p,m){var g=m.width,y=m.height,v=m.viewX,_=m.viewY,b=m.pathSlice,x=m.toMoveInsideSlice,w=m.strTransform,k=m.hasTransition,M=m.handleSlicesExit,T=m.makeUpdateSliceInterpolator,S=m.makeUpdateTextInterpolator,A=m.prevEntry,L=t._fullLayout,C=e[0].trace,E=-1!==C.textposition.indexOf(\"left\"),O=-1!==C.textposition.indexOf(\"right\"),D=-1!==C.textposition.indexOf(\"bottom\"),I=!D&&!C.marker.pad.t||D&&!C.marker.pad.b,P=s(n,[g,y],{packing:C.tiling.packing,squarifyratio:C.tiling.squarifyratio,flipX:C.tiling.flip.indexOf(\"x\")>-1,flipY:C.tiling.flip.indexOf(\"y\")>-1,pad:{inner:C.tiling.pad,top:C.marker.pad.t,left:C.marker.pad.l,right:C.marker.pad.r,bottom:C.marker.pad.b}}).descendants(),R=1/0,z=-1/0;P.forEach((function(t){var e=t.depth;e>=C._maxDepth?(t.x0=t.x1=(t.x0+t.x1)/2,t.y0=t.y1=(t.y0+t.y1)/2):(R=Math.min(R,e),z=Math.max(z,e))})),p=p.data(P,u.getPtId),C._maxVisibleLayers=isFinite(z)?z-R+1:0,p.enter().append(\"g\").classed(\"slice\",!0),M(p,f,{},[g,y],b),p.order();var j=null;if(k&&A){var F=u.getPtId(A);p.each((function(t){null===j&&u.getPtId(t)===F&&(j={x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1})}))}var N=function(){return j||{x0:0,x1:g,y0:0,y1:y}},B=p;return k&&(B=B.transition().each(\"end\",(function(){var e=r.select(this);u.setSliceCursor(e,t,{hideOnRoot:!0,hideOnLeaves:!1,isTransitioning:!1})}))),B.each((function(s){var p=u.isHeader(s,C);s._hoverX=v(s.x1-C.marker.pad.r),s._hoverY=_(D?s.y1-C.marker.pad.b/2:s.y0+C.marker.pad.t/2);var m=r.select(this),M=i.ensureSingle(m,\"path\",\"surface\",(function(t){t.style(\"pointer-events\",\"all\")}));k?M.transition().attrTween(\"d\",(function(t){var e=T(t,f,N(),[g,y]);return function(t){return b(e(t))}})):M.attr(\"d\",b),m.call(h,n,t,e,{styleOne:l,eventDataKeys:c.eventDataKeys,transitionTime:c.CLICK_TRANSITION_TIME,transitionEasing:c.CLICK_TRANSITION_EASING}).call(u.setSliceCursor,t,{isTransitioning:t._transitioning}),M.call(l,s,C,{hovered:!1}),s._text=s.x0===s.x1||s.y0===s.y1?\"\":p?I?\"\":u.getPtLabel(s)||\"\":d(s,n,C,e,L)||\"\";var A=i.ensureSingle(m,\"g\",\"slicetext\"),P=i.ensureSingle(A,\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),R=i.ensureUniformFontSize(t,u.determineTextFont(C,s,L.font));P.text(s._text||\" \").classed(\"slicetext\",!0).attr(\"text-anchor\",O?\"end\":E||p?\"start\":\"middle\").call(a.font,R).call(o.convertToTspans,t),s.textBB=a.bBox(P.node()),s.transform=x(s,{fontSize:R.size,isHeader:p}),s.transform.fontSize=R.size,k?P.transition().attrTween(\"transform\",(function(t){var e=S(t,f,N(),[g,y]);return function(t){return w(e(t))}})):P.attr(\"transform\",w(s))})),j}},{\"../../components/drawing\":665,\"../../lib\":778,\"../../lib/svg_text_utils\":803,\"../sunburst/fx\":1304,\"../sunburst/helpers\":1305,\"../sunburst/plot\":1309,\"./constants\":1328,\"./partition\":1335,\"./style\":1337,d3:169}],1332:[function(t,e,n){\"use strict\";e.exports={moduleType:\"trace\",name:\"treemap\",basePlotModule:t(\"./base_plot\"),categories:[],animatable:!0,attributes:t(\"./attributes\"),layoutAttributes:t(\"./layout_attributes\"),supplyDefaults:t(\"./defaults\"),supplyLayoutDefaults:t(\"./layout_defaults\"),calc:t(\"./calc\").calc,crossTraceCalc:t(\"./calc\").crossTraceCalc,plot:t(\"./plot\"),style:t(\"./style\").style,colorbar:t(\"../scatter/marker_colorbar\"),meta:{}}},{\"../scatter/marker_colorbar\":1205,\"./attributes\":1325,\"./base_plot\":1326,\"./calc\":1327,\"./defaults\":1329,\"./layout_attributes\":1333,\"./layout_defaults\":1334,\"./plot\":1336,\"./style\":1337}],1333:[function(t,e,n){\"use strict\";e.exports={treemapcolorway:{valType:\"colorlist\",editType:\"calc\"},extendtreemapcolors:{valType:\"boolean\",dflt:!0,editType:\"calc\"}}},{}],1334:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./layout_attributes\");e.exports=function(t,e){function n(n,a){return r.coerce(t,e,i,n,a)}n(\"treemapcolorway\",e.colorway),n(\"extendtreemapcolors\")}},{\"../../lib\":778,\"./layout_attributes\":1333}],1335:[function(t,e,n){\"use strict\";var r=t(\"d3-hierarchy\");e.exports=function(t,e,n){var i,a=n.flipX,o=n.flipY,s=\"dice-slice\"===n.packing,l=n.pad[o?\"bottom\":\"top\"],c=n.pad[a?\"right\":\"left\"],u=n.pad[a?\"left\":\"right\"],h=n.pad[o?\"top\":\"bottom\"];s&&(i=c,c=l,l=i,i=u,u=h,h=i);var d=r.treemap().tile(function(t,e){switch(t){case\"squarify\":return r.treemapSquarify.ratio(e);case\"binary\":return r.treemapBinary;case\"dice\":return r.treemapDice;case\"slice\":return r.treemapSlice;default:return r.treemapSliceDice}}(n.packing,n.squarifyratio)).paddingInner(n.pad.inner).paddingLeft(c).paddingRight(u).paddingTop(l).paddingBottom(h).size(s?[e[1],e[0]]:e)(t);return(s||a||o)&&function t(e,n,r){var i;r.swapXY&&(i=e.x0,e.x0=e.y0,e.y0=i,i=e.x1,e.x1=e.y1,e.y1=i),r.flipX&&(i=e.x0,e.x0=n[0]-e.x1,e.x1=n[0]-i),r.flipY&&(i=e.y0,e.y0=n[1]-e.y1,e.y1=n[1]-i);var a=e.children;if(a)for(var o=0;o<a.length;o++)t(a[o],n,r)}(d,e,{swapXY:s,flipX:a,flipY:o}),d}},{\"d3-hierarchy\":161}],1336:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../sunburst/helpers\"),a=t(\"../../lib\"),o=t(\"../bar/constants\").TEXTPAD,s=t(\"../bar/plot\").toMoveInsideBar,l=t(\"../bar/uniform_text\"),c=l.recordMinTextSize,u=l.clearMinTextSize,h=t(\"../bar/style\").resizeText,d=t(\"./constants\"),f=t(\"./draw_descendants\"),p=t(\"./draw_ancestors\");function m(t){return i.isHierarchyRoot(t)?\"\":i.getPtId(t)}function g(t,e,n,l){var u=t._fullLayout,h=e[0],g=h.trace,y=h.hierarchy,v=i.findEntryWithLevel(y,g.level),_=r.select(n),b=_.selectAll(\"g.pathbar\"),x=_.selectAll(\"g.slice\");if(!v)return b.remove(),void x.remove();var w=i.isHierarchyRoot(v),k=!u.uniformtext.mode&&i.hasTransition(l),M=i.getMaxDepth(g),T=u._size,S=g.domain,A=T.w*(S.x[1]-S.x[0]),L=T.h*(S.y[1]-S.y[0]),C=A,E=g.pathbar.thickness,O=g.marker.line.width+d.gapWithPathbar,D=g.pathbar.visible?g.pathbar.side.indexOf(\"bottom\")>-1?L+O:-(E+O):0,I={x0:C,x1:C,y0:D,y1:D+E},P=function(t,e,n){var r=g.tiling.pad,i=function(t){return t-r<=e.x0},a=function(t){return t+r>=e.x1},o=function(t){return t-r<=e.y0},s=function(t){return t+r>=e.y1};return{x0:i(t.x0-r)?0:a(t.x0-r)?n[0]:t.x0,x1:i(t.x1+r)?0:a(t.x1+r)?n[0]:t.x1,y0:o(t.y0-r)?0:s(t.y0-r)?n[1]:t.y0,y1:o(t.y1+r)?0:s(t.y1+r)?n[1]:t.y1}},R=null,z={},j={},F=null,N=function(t,e){return e?z[m(t)]:j[m(t)]};h.hasMultipleRoots&&w&&M++,g._maxDepth=M,g._backgroundColor=u.paper_bgcolor,g._entryDepth=v.data.depth,g._atRootLevel=w;var B=-A/2+T.l+T.w*(S.x[1]+S.x[0])/2,Y=-L/2+T.t+T.h*(1-(S.y[1]+S.y[0])/2),H=function(t){return B+t},V=function(t){return Y+t},U=V(0),W=H(0),q=function(t){return W+t},G=function(t){return U+t};function X(t,e){return t+\",\"+e}var Z=q(0),J=function(t){t.x=Math.max(Z,t.x)},K=g.pathbar.edgeshape,$=function(t,e){var n=t.x0,r=t.x1,i=t.y0,a=t.y1,l=t.textBB,h=function(t){return-1!==g.textposition.indexOf(t)},d=h(\"bottom\"),f=h(\"top\")||e.isHeader&&!d?\"start\":d?\"end\":\"middle\",p=h(\"right\"),m=h(\"left\")||e.onPathbar,y=g.marker.pad;if(e.isHeader){if((n+=y.l-o)>=(r-=y.r-o)){var v=(n+r)/2;n=v,r=v}var _;d?i<(_=a-y.b)&&_<a&&(i=_):i<(_=i+y.t)&&_<a&&(a=_)}var b=s(n,r,i,a,l,{isHorizontal:!1,constrained:!0,angle:0,anchor:f,leftToRight:m?-1:p?1:0});return b.fontSize=e.fontSize,b.targetX=H(b.targetX),b.targetY=V(b.targetY),isNaN(b.targetX)||isNaN(b.targetY)?{}:(n!==r&&i!==a&&c(g.type,b,u),{scale:b.scale,rotate:b.rotate,textX:b.textX,textY:b.textY,anchorX:b.anchorX,anchorY:b.anchorY,targetX:b.targetX,targetY:b.targetY})},Q=function(t,e){for(var n,r=0,i=t;!n&&r<M;)r++,(i=i.parent)?n=N(i,e):r=M;return n||{}},tt=function(t,e,n,i){var o,s=N(t,e);if(s)o=s;else if(e)o=I;else if(R)if(t.parent){var l=F||n;l&&!e?o=P(t,l,i):a.extendFlat(o={},Q(t,e))}else o=t;else o={};return r.interpolate(o,{x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1})},et=function(t,e,n,o){var s=N(t,e),l={},h=function(t,e,n,r){if(e)return z[m(y)]||I;var i=j[g.level]||n;return function(t){return t.data.depth-v.data.depth<M}(t)?P(t,i,r):{}}(t,e,n,o);a.extendFlat(l,{transform:$({x0:h.x0,x1:h.x1,y0:h.y0,y1:h.y1,textBB:t.textBB,_text:t._text},{isHeader:i.isHeader(t,g)})}),s?l=s:t.parent&&a.extendFlat(l,Q(t,e));var d=t.transform;return t.x0!==t.x1&&t.y0!==t.y1&&c(g.type,d,u),r.interpolate(l,{transform:{scale:d.scale,rotate:d.rotate,textX:d.textX,textY:d.textY,anchorX:d.anchorX,anchorY:d.anchorY,targetX:d.targetX,targetY:d.targetY}})},nt=function(t,e,n,i,a){var o=i[0],s=i[1];k?t.exit().transition().each((function(){var t=r.select(this);t.select(\"path.surface\").transition().attrTween(\"d\",(function(t){var n=function(t,e,n,i){var a,o=N(t,e);if(e)a=I;else{var s=N(v,e);a=s?P(t,s,i):{}}return r.interpolate(o,a)}(t,e,0,[o,s]);return function(t){return a(n(t))}})),t.select(\"g.slicetext\").attr(\"opacity\",0)})).remove():t.exit().remove()},rt=function(t){var e=t.transform;return t.x0!==t.x1&&t.y0!==t.y1&&c(g.type,e,u),a.getTextTransform({textX:e.textX,textY:e.textY,anchorX:e.anchorX,anchorY:e.anchorY,targetX:e.targetX,targetY:e.targetY,scale:e.scale,rotate:e.rotate})};k&&(b.each((function(t){z[m(t)]={x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1},t.transform&&(z[m(t)].transform={textX:t.transform.textX,textY:t.transform.textY,anchorX:t.transform.anchorX,anchorY:t.transform.anchorY,targetX:t.transform.targetX,targetY:t.transform.targetY,scale:t.transform.scale,rotate:t.transform.rotate})})),x.each((function(t){j[m(t)]={x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1},t.transform&&(j[m(t)].transform={textX:t.transform.textX,textY:t.transform.textY,anchorX:t.transform.anchorX,anchorY:t.transform.anchorY,targetX:t.transform.targetX,targetY:t.transform.targetY,scale:t.transform.scale,rotate:t.transform.rotate}),!R&&i.isEntry(t)&&(R=t)}))),F=f(t,e,v,x,{width:A,height:L,viewX:H,viewY:V,pathSlice:function(t){var e=H(t.x0),n=H(t.x1),r=V(t.y0),i=V(t.y1);return n-e&&i-r?\"M\"+X(e,r+0)+\"L\"+X(n-0,r)+\"L\"+X(n,i-0)+\"L\"+X(e+0,i)+\"Z\":\"\"},toMoveInsideSlice:$,prevEntry:R,makeUpdateSliceInterpolator:tt,makeUpdateTextInterpolator:et,handleSlicesExit:nt,hasTransition:k,strTransform:rt}),g.pathbar.visible?p(t,e,v,b,{barDifY:D,width:C,height:E,viewX:q,viewY:G,pathSlice:function(t){var e=q(Math.max(Math.min(t.x0,t.x0),0)),n=q(Math.min(Math.max(t.x1,t.x1),C)),r=G(t.y0),i=G(t.y1),a=E/2,o={},s={};o.x=e,s.x=n,o.y=s.y=(r+i)/2;var l={x:e,y:r},c={x:n,y:r},u={x:n,y:i},h={x:e,y:i};return\">\"===K?(l.x-=a,c.x-=a,u.x-=a,h.x-=a):\"/\"===K?(u.x-=a,h.x-=a,o.x-=a/2,s.x-=a/2):\"\\\\\"===K?(l.x-=a,c.x-=a,o.x-=a/2,s.x-=a/2):\"<\"===K&&(o.x-=a,s.x-=a),J(l),J(h),J(o),J(c),J(u),J(s),\"M\"+X(l.x,l.y)+\"L\"+X(c.x,c.y)+\"L\"+X(s.x,s.y)+\"L\"+X(u.x,u.y)+\"L\"+X(h.x,h.y)+\"L\"+X(o.x,o.y)+\"Z\"},toMoveInsideSlice:$,makeUpdateSliceInterpolator:tt,makeUpdateTextInterpolator:et,handleSlicesExit:nt,hasTransition:k,strTransform:rt}):b.remove()}e.exports=function(t,e,n,a){var o,s,l=t._fullLayout,c=l._treemaplayer,d=!n;u(\"treemap\",l),(o=c.selectAll(\"g.trace.treemap\").data(e,(function(t){return t[0].trace.uid}))).enter().append(\"g\").classed(\"trace\",!0).classed(\"treemap\",!0),o.order(),!l.uniformtext.mode&&i.hasTransition(n)?(a&&(s=a()),r.transition().duration(n.duration).ease(n.easing).each(\"end\",(function(){s&&s()})).each(\"interrupt\",(function(){s&&s()})).each((function(){c.selectAll(\"g.trace\").each((function(e){g(t,e,this,n)}))}))):(o.each((function(e){g(t,e,this,n)})),l.uniformtext.mode&&h(t,l._treemaplayer.selectAll(\".trace\"),\"treemap\")),d&&o.exit().remove()}},{\"../../lib\":778,\"../bar/constants\":923,\"../bar/plot\":932,\"../bar/style\":935,\"../bar/uniform_text\":937,\"../sunburst/helpers\":1305,\"./constants\":1328,\"./draw_ancestors\":1330,\"./draw_descendants\":1331,d3:169}],1337:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../components/color\"),a=t(\"../../lib\"),o=t(\"../sunburst/helpers\"),s=t(\"../bar/uniform_text\").resizeText;function l(t,e,n,r){var s,l,c=(r||{}).hovered,u=e.data.data,h=u.i,d=u.color,f=o.isHierarchyRoot(e),p=1;if(c)s=n._hovered.marker.line.color,l=n._hovered.marker.line.width;else if(f&&d===n.root.color)p=100,s=\"rgba(0,0,0,0)\",l=0;else if(s=a.castOption(n,h,\"marker.line.color\")||i.defaultLine,l=a.castOption(n,h,\"marker.line.width\")||0,!n._hasColorscale&&!e.onPathbar){var m=n.marker.depthfade;if(m){var g,y=i.combine(i.addOpacity(n._backgroundColor,.75),d);if(!0===m){var v=o.getMaxDepth(n);g=isFinite(v)?o.isLeaf(e)?0:n._maxVisibleLayers-(e.data.depth-n._entryDepth):e.data.height+1}else g=e.data.depth-n._entryDepth,n._atRootLevel||g++;if(g>0)for(var _=0;_<g;_++)d=i.combine(i.addOpacity(y,.5*_/g),d)}}t.style(\"stroke-width\",l).call(i.fill,d).call(i.stroke,s).style(\"opacity\",p)}e.exports={style:function(t){var e=t._fullLayout._treemaplayer.selectAll(\".trace\");s(t,e,\"treemap\"),e.each((function(t){var e=r.select(this),n=t[0].trace;e.style(\"opacity\",n.opacity),e.selectAll(\"path.surface\").each((function(t){r.select(this).call(l,t,n,{hovered:!1})}))}))},styleOne:l}},{\"../../components/color\":643,\"../../lib\":778,\"../bar/uniform_text\":937,\"../sunburst/helpers\":1305,d3:169}],1338:[function(t,e,n){\"use strict\";var r=t(\"../box/attributes\"),i=t(\"../../lib/extend\").extendFlat;e.exports={y:r.y,x:r.x,x0:r.x0,y0:r.y0,name:i({},r.name,{}),orientation:i({},r.orientation,{}),bandwidth:{valType:\"number\",min:0,editType:\"calc\"},scalegroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},scalemode:{valType:\"enumerated\",values:[\"width\",\"count\"],dflt:\"width\",editType:\"calc\"},spanmode:{valType:\"enumerated\",values:[\"soft\",\"hard\",\"manual\"],dflt:\"soft\",editType:\"calc\"},span:{valType:\"info_array\",items:[{valType:\"any\",editType:\"calc\"},{valType:\"any\",editType:\"calc\"}],editType:\"calc\"},line:{color:{valType:\"color\",editType:\"style\"},width:{valType:\"number\",min:0,dflt:2,editType:\"style\"},editType:\"plot\"},fillcolor:r.fillcolor,points:i({},r.boxpoints,{}),jitter:i({},r.jitter,{}),pointpos:i({},r.pointpos,{}),width:i({},r.width,{}),marker:r.marker,text:r.text,hovertext:r.hovertext,hovertemplate:r.hovertemplate,box:{visible:{valType:\"boolean\",dflt:!1,editType:\"plot\"},width:{valType:\"number\",min:0,max:1,dflt:.25,editType:\"plot\"},fillcolor:{valType:\"color\",editType:\"style\"},line:{color:{valType:\"color\",editType:\"style\"},width:{valType:\"number\",min:0,editType:\"style\"},editType:\"style\"},editType:\"plot\"},meanline:{visible:{valType:\"boolean\",dflt:!1,editType:\"plot\"},color:{valType:\"color\",editType:\"style\"},width:{valType:\"number\",min:0,editType:\"style\"},editType:\"plot\"},side:{valType:\"enumerated\",values:[\"both\",\"positive\",\"negative\"],dflt:\"both\",editType:\"calc\"},offsetgroup:r.offsetgroup,alignmentgroup:r.alignmentgroup,selected:r.selected,unselected:r.unselected,hoveron:{valType:\"flaglist\",flags:[\"violins\",\"points\",\"kde\"],dflt:\"violins+points+kde\",extras:[\"all\"],editType:\"style\"}}},{\"../../lib/extend\":768,\"../box/attributes\":946}],1339:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../plots/cartesian/axes\"),a=t(\"../box/calc\"),o=t(\"./helpers\"),s=t(\"../../constants/numerical\").BADNUM;function l(t,e,n){var i=e.max-e.min;if(!i)return t.bandwidth?t.bandwidth:0;if(t.bandwidth)return Math.max(t.bandwidth,i/1e4);var a=n.length,o=r.stdev(n,a-1,e.mean);return Math.max(function(t,e,n){return 1.059*Math.min(e,n/1.349)*Math.pow(t,-.2)}(a,o,e.q3-e.q1),i/100)}function c(t,e,n,r){var a,o=t.spanmode,l=t.span||[],c=[e.min-2*r,e.max+2*r];function u(r){var i=l[r],a=\"multicategory\"===n.type?n.r2c(i):n.d2c(i,0,t[e.valLetter+\"calendar\"]);return a===s?c[r]:a}var h={type:\"linear\",range:a=\"soft\"===o?c:\"hard\"===o?[e.min,e.max]:[u(0),u(1)]};return i.setConvert(h),h.cleanRange(),a}e.exports=function(t,e){var n=a(t,e);if(n[0].t.empty)return n;for(var s=t._fullLayout,u=i.getFromId(t,e[\"h\"===e.orientation?\"xaxis\":\"yaxis\"]),h=1/0,d=-1/0,f=0,p=0,m=0;m<n.length;m++){var g=n[m],y=g.pts.map(o.extractVal),v=g.bandwidth=l(e,g,y),_=g.span=c(e,g,u,v);if(g.min===g.max&&0===v)_=g.span=[g.min,g.max],g.density=[{v:1,t:_[0]}],g.bandwidth=v,f=Math.max(f,1);else{var b=_[1]-_[0],x=Math.ceil(b/(v/3)),w=b/x;if(!isFinite(w)||!isFinite(x))return r.error(\"Something went wrong with computing the violin span\"),n[0].t.empty=!0,n;var k=o.makeKDE(g,e,y);g.density=new Array(x);for(var M=0,T=_[0];T<_[1]+w/2;M++,T+=w){var S=k(T);g.density[M]={v:S,t:T},f=Math.max(f,S)}}p=Math.max(p,y.length),h=Math.min(h,_[0]),d=Math.max(d,_[1])}var A=i.findExtremes(u,[h,d],{padded:!0});if(e._extremes[u._id]=A,e.width)n[0].t.maxKDE=f;else{var L=s._violinScaleGroupStats,C=e.scalegroup,E=L[C];E?(E.maxKDE=Math.max(E.maxKDE,f),E.maxCount=Math.max(E.maxCount,p)):L[C]={maxKDE:f,maxCount:p}}return n[0].t.labels.kde=r._(t,\"kde:\"),n}},{\"../../constants/numerical\":753,\"../../lib\":778,\"../../plots/cartesian/axes\":828,\"../box/calc\":947,\"./helpers\":1342}],1340:[function(t,e,n){\"use strict\";var r=t(\"../box/cross_trace_calc\").setPositionOffset,i=[\"v\",\"h\"];e.exports=function(t,e){for(var n=t.calcdata,a=e.xaxis,o=e.yaxis,s=0;s<i.length;s++){for(var l=i[s],c=\"h\"===l?o:a,u=[],h=0;h<n.length;h++){var d=n[h],f=d[0].trace;!0!==f.visible||\"violin\"!==f.type||d[0].t.empty||f.orientation!==l||f.xaxis!==a._id||f.yaxis!==o._id||u.push(h)}r(\"violin\",t,u,c)}}},{\"../box/cross_trace_calc\":948}],1341:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../components/color\"),a=t(\"../box/defaults\"),o=t(\"./attributes\");e.exports=function(t,e,n,s){function l(n,i){return r.coerce(t,e,o,n,i)}function c(n,i){return r.coerce2(t,e,o,n,i)}if(a.handleSampleDefaults(t,e,l,s),!1!==e.visible){l(\"bandwidth\"),l(\"side\"),l(\"width\")||(l(\"scalegroup\",e.name),l(\"scalemode\"));var u,h=l(\"span\");Array.isArray(h)&&(u=\"manual\"),l(\"spanmode\",u);var d=l(\"line.color\",(t.marker||{}).color||n),f=l(\"line.width\"),p=l(\"fillcolor\",i.addOpacity(e.line.color,.5));a.handlePointsDefaults(t,e,l,{prefix:\"\"});var m=c(\"box.width\"),g=c(\"box.fillcolor\",p),y=c(\"box.line.color\",d),v=c(\"box.line.width\",f);l(\"box.visible\",Boolean(m||g||y||v))||(e.box={visible:!1});var _=c(\"meanline.color\",d),b=c(\"meanline.width\",f);l(\"meanline.visible\",Boolean(_||b))||(e.meanline={visible:!1})}}},{\"../../components/color\":643,\"../../lib\":778,\"../box/defaults\":949,\"./attributes\":1338}],1342:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=function(t){return 1/Math.sqrt(2*Math.PI)*Math.exp(-.5*t*t)};n.makeKDE=function(t,e,n){var r=n.length,a=i,o=t.bandwidth,s=1/(r*o);return function(t){for(var e=0,i=0;i<r;i++)e+=a((t-n[i])/o);return s*e}},n.getPositionOnKdePath=function(t,e,n){var i,a;\"h\"===e.orientation?(i=\"y\",a=\"x\"):(i=\"x\",a=\"y\");var o=r.findPointOnPath(t.path,n,a,{pathLength:t.pathLength}),s=t.posCenterPx,l=o[i];return[l,\"both\"===e.side?2*s-l:s]},n.getKdeValue=function(t,e,r){var i=t.pts.map(n.extractVal);return n.makeKDE(t,e,i)(r)/t.posDensityScale},n.extractVal=function(t){return t.v}},{\"../../lib\":778}],1343:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../../plots/cartesian/axes\"),a=t(\"../box/hover\"),o=t(\"./helpers\");e.exports=function(t,e,n,s,l){var c,u,h=t.cd,d=h[0].trace,f=d.hoveron,p=-1!==f.indexOf(\"violins\"),m=-1!==f.indexOf(\"kde\"),g=[];if(p||m){var y=a.hoverOnBoxes(t,e,n,s);if(m&&y.length>0){var v,_,b,x,w,k=t.xa,M=t.ya;\"h\"===d.orientation?(w=e,v=\"y\",b=M,_=\"x\",x=k):(w=n,v=\"x\",b=k,_=\"y\",x=M);var T=h[t.index];if(w>=T.span[0]&&w<=T.span[1]){var S=r.extendFlat({},t),A=x.c2p(w,!0),L=o.getKdeValue(T,d,w),C=o.getPositionOnKdePath(T,d,A),E=b._offset,O=b._length;S[v+\"0\"]=C[0],S[v+\"1\"]=C[1],S[_+\"0\"]=S[_+\"1\"]=A,S[_+\"Label\"]=_+\": \"+i.hoverLabelText(x,w)+\", \"+h[0].t.labels.kde+\" \"+L.toFixed(3),S.spikeDistance=y[0].spikeDistance;var D=v+\"Spike\";S[D]=y[0][D],y[0].spikeDistance=void 0,y[0][D]=void 0,S.hovertemplate=!1,g.push(S),(u={stroke:t.color})[v+\"1\"]=r.constrain(E+C[0],E,E+O),u[v+\"2\"]=r.constrain(E+C[1],E,E+O),u[_+\"1\"]=u[_+\"2\"]=x._offset+A}}p&&(g=g.concat(y))}-1!==f.indexOf(\"points\")&&(c=a.hoverOnPoints(t,e,n));var I=l.selectAll(\".violinline-\"+d.uid).data(u?[0]:[]);return I.enter().append(\"line\").classed(\"violinline-\"+d.uid,!0).attr(\"stroke-width\",1.5),I.exit().remove(),I.attr(u),\"closest\"===s?c?[c]:g:c?(g.push(c),g):g}},{\"../../lib\":778,\"../../plots/cartesian/axes\":828,\"../box/hover\":951,\"./helpers\":1342}],1344:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),layoutAttributes:t(\"./layout_attributes\"),supplyDefaults:t(\"./defaults\"),crossTraceDefaults:t(\"../box/defaults\").crossTraceDefaults,supplyLayoutDefaults:t(\"./layout_defaults\"),calc:t(\"./calc\"),crossTraceCalc:t(\"./cross_trace_calc\"),plot:t(\"./plot\"),style:t(\"./style\"),styleOnSelect:t(\"../scatter/style\").styleOnSelect,hoverPoints:t(\"./hover\"),selectPoints:t(\"../box/select\"),moduleType:\"trace\",name:\"violin\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"symbols\",\"oriented\",\"box-violin\",\"showLegend\",\"violinLayout\",\"zoomScale\"],meta:{}}},{\"../../plots/cartesian\":841,\"../box/defaults\":949,\"../box/select\":956,\"../scatter/style\":1211,\"./attributes\":1338,\"./calc\":1339,\"./cross_trace_calc\":1340,\"./defaults\":1341,\"./hover\":1343,\"./layout_attributes\":1345,\"./layout_defaults\":1346,\"./plot\":1347,\"./style\":1348}],1345:[function(t,e,n){\"use strict\";var r=t(\"../box/layout_attributes\"),i=t(\"../../lib\").extendFlat;e.exports={violinmode:i({},r.boxmode,{}),violingap:i({},r.boxgap,{}),violingroupgap:i({},r.boxgroupgap,{})}},{\"../../lib\":778,\"../box/layout_attributes\":953}],1346:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./layout_attributes\"),a=t(\"../box/layout_defaults\");e.exports=function(t,e,n){a._supply(t,e,n,(function(n,a){return r.coerce(t,e,i,n,a)}),\"violin\")}},{\"../../lib\":778,\"../box/layout_defaults\":954,\"./layout_attributes\":1345}],1347:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../lib\"),a=t(\"../../components/drawing\"),o=t(\"../box/plot\"),s=t(\"../scatter/line_points\"),l=t(\"./helpers\");e.exports=function(t,e,n,c){var u=t._fullLayout,h=e.xaxis,d=e.yaxis;function f(t){var e=s(t,{xaxis:h,yaxis:d,connectGaps:!0,baseTolerance:.75,shape:\"spline\",simplify:!0,linearized:!0});return a.smoothopen(e[0],1)}i.makeTraceGroups(c,n,\"trace violins\").each((function(t){var n=r.select(this),a=t[0],s=a.t,c=a.trace;if(!0!==c.visible||s.empty)n.remove();else{var p=s.bPos,m=s.bdPos,g=e[s.valLetter+\"axis\"],y=e[s.posLetter+\"axis\"],v=\"both\"===c.side,_=v||\"positive\"===c.side,b=v||\"negative\"===c.side,x=n.selectAll(\"path.violin\").data(i.identity);x.enter().append(\"path\").style(\"vector-effect\",\"non-scaling-stroke\").attr(\"class\",\"violin\"),x.exit().remove(),x.each((function(t){var e,n,i,a,o,l,h,d,x=r.select(this),w=t.density,k=w.length,M=y.c2l(t.pos+p,!0),T=y.l2p(M);if(c.width)e=s.maxKDE/m;else{var S=u._violinScaleGroupStats[c.scalegroup];e=\"count\"===c.scalemode?S.maxKDE/m*(S.maxCount/t.pts.length):S.maxKDE/m}if(_){for(h=new Array(k),o=0;o<k;o++)(d=h[o]={})[s.posLetter]=M+w[o].v/e,d[s.valLetter]=g.c2l(w[o].t,!0);n=f(h)}if(b){for(h=new Array(k),l=0,o=k-1;l<k;l++,o--)(d=h[l]={})[s.posLetter]=M-w[o].v/e,d[s.valLetter]=g.c2l(w[o].t,!0);i=f(h)}if(v)a=n+\"L\"+i.substr(1)+\"Z\";else{var A=[T,g.c2p(w[0].t)],L=[T,g.c2p(w[k-1].t)];\"h\"===c.orientation&&(A.reverse(),L.reverse()),a=_?\"M\"+A+\"L\"+n.substr(1)+\"L\"+L:\"M\"+L+\"L\"+i.substr(1)+\"L\"+A}x.attr(\"d\",a),t.posCenterPx=T,t.posDensityScale=e*m,t.path=x.node(),t.pathLength=t.path.getTotalLength()/(v?2:1)}));var w,k,M,T=c.box,S=T.width,A=(T.line||{}).width;v?(w=m*S,k=0):_?(w=[0,m*S/2],k=A*{x:1,y:-1}[s.posLetter]):(w=[m*S/2,0],k=A*{x:-1,y:1}[s.posLetter]),o.plotBoxAndWhiskers(n,{pos:y,val:g},c,{bPos:p,bdPos:w,bPosPxOffset:k}),o.plotBoxMean(n,{pos:y,val:g},c,{bPos:p,bdPos:w,bPosPxOffset:k}),!c.box.visible&&c.meanline.visible&&(M=i.identity);var L=n.selectAll(\"path.meanline\").data(M||[]);L.enter().append(\"path\").attr(\"class\",\"meanline\").style(\"fill\",\"none\").style(\"vector-effect\",\"non-scaling-stroke\"),L.exit().remove(),L.each((function(t){var e=g.c2p(t.mean,!0),n=l.getPositionOnKdePath(t,c,e);r.select(this).attr(\"d\",\"h\"===c.orientation?\"M\"+e+\",\"+n[0]+\"V\"+n[1]:\"M\"+n[0]+\",\"+e+\"H\"+n[1])})),o.plotPoints(n,{x:h,y:d},c,s)}}))}},{\"../../components/drawing\":665,\"../../lib\":778,\"../box/plot\":955,\"../scatter/line_points\":1201,\"./helpers\":1342,d3:169}],1348:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../components/color\"),a=t(\"../scatter/style\").stylePoints;e.exports=function(t){var e=r.select(t).selectAll(\"g.trace.violins\");e.style(\"opacity\",(function(t){return t[0].trace.opacity})),e.each((function(e){var n=e[0].trace,o=r.select(this),s=n.box||{},l=s.line||{},c=n.meanline||{},u=c.width;o.selectAll(\"path.violin\").style(\"stroke-width\",n.line.width+\"px\").call(i.stroke,n.line.color).call(i.fill,n.fillcolor),o.selectAll(\"path.box\").style(\"stroke-width\",l.width+\"px\").call(i.stroke,l.color).call(i.fill,s.fillcolor);var h={\"stroke-width\":u+\"px\",\"stroke-dasharray\":2*u+\"px,\"+u+\"px\"};o.selectAll(\"path.mean\").style(h).call(i.stroke,c.color),o.selectAll(\"path.meanline\").style(h).call(i.stroke,c.color),a(o,n,t)}))}},{\"../../components/color\":643,\"../scatter/style\":1211,d3:169}],1349:[function(t,e,n){\"use strict\";var r=t(\"../../components/colorscale/attributes\"),i=t(\"../isosurface/attributes\"),a=t(\"../surface/attributes\"),o=t(\"../../plots/attributes\"),s=t(\"../../lib/extend\").extendFlat,l=t(\"../../plot_api/edit_types\").overrideAll,c=e.exports=l(s({x:i.x,y:i.y,z:i.z,value:i.value,isomin:i.isomin,isomax:i.isomax,surface:i.surface,spaceframe:{show:{valType:\"boolean\",dflt:!1},fill:{valType:\"number\",min:0,max:1,dflt:1}},slices:i.slices,caps:i.caps,text:i.text,hovertext:i.hovertext,hovertemplate:i.hovertemplate},r(\"\",{colorAttr:\"`value`\",showScaleDflt:!0,editTypeOverride:\"calc\"}),{colorbar:i.colorbar,opacity:i.opacity,opacityscale:a.opacityscale,lightposition:i.lightposition,lighting:i.lighting,flatshading:i.flatshading,contour:i.contour,hoverinfo:s({},o.hoverinfo),showlegend:s({},o.showlegend,{dflt:!1})}),\"calc\",\"nested\");c.x.editType=c.y.editType=c.z.editType=c.value.editType=\"calc+clearAxisTypes\",c.transforms=void 0},{\"../../components/colorscale/attributes\":650,\"../../lib/extend\":768,\"../../plot_api/edit_types\":810,\"../../plots/attributes\":824,\"../isosurface/attributes\":1123,\"../surface/attributes\":1311}],1350:[function(t,e,n){\"use strict\";var r=t(\"gl-mesh3d\"),i=t(\"../../lib/gl_format_color\").parseColorScale,a=t(\"../../lib/str2rgbarray\"),o=t(\"../../components/colorscale\").extractOpts,s=t(\"../../plots/gl3d/zip3\"),l=t(\"../isosurface/convert\").findNearestOnAxis,c=t(\"../isosurface/convert\").generateIsoMeshes;function u(t,e,n){this.scene=t,this.uid=n,this.mesh=e,this.name=\"\",this.data=null,this.showContour=!1}var h=u.prototype;h.handlePick=function(t){if(t.object===this.mesh){var e=t.data.index,n=this.data._meshY[e],r=this.data._meshZ[e],i=this.data._Ys.length,a=this.data._Zs.length,o=l(this.data._meshX[e],this.data._Xs).id,s=l(n,this.data._Ys).id,c=l(r,this.data._Zs).id,u=t.index=c+a*s+a*i*o;t.traceCoordinate=[this.data._meshX[u],this.data._meshY[u],this.data._meshZ[u],this.data._value[u]];var h=this.data.hovertext||this.data.text;return Array.isArray(h)&&void 0!==h[u]?t.textLabel=h[u]:h&&(t.textLabel=h),!0}},h.update=function(t){var e=this.scene,n=e.fullSceneLayout;function r(t,e,n,r){return e.map((function(e){return t.d2l(e,0,r)*n}))}this.data=c(t);var l={positions:s(r(n.xaxis,t._meshX,e.dataScale[0],t.xcalendar),r(n.yaxis,t._meshY,e.dataScale[1],t.ycalendar),r(n.zaxis,t._meshZ,e.dataScale[2],t.zcalendar)),cells:s(t._meshI,t._meshJ,t._meshK),lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,opacityscale:t.opacityscale,contourEnable:t.contour.show,contourColor:a(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading},u=o(t);l.vertexIntensity=t._meshIntensity,l.vertexIntensityBounds=[u.min,u.max],l.colormap=i(t),this.mesh.update(l)},h.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports=function(t,e){var n=r({gl:t.glplot.gl}),i=new u(t,n,e.uid);return n._trace=i,i.update(e),t.glplot.add(n),i}},{\"../../components/colorscale\":655,\"../../lib/gl_format_color\":774,\"../../lib/str2rgbarray\":802,\"../../plots/gl3d/zip3\":881,\"../isosurface/convert\":1125,\"gl-mesh3d\":309}],1351:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./attributes\"),a=t(\"../isosurface/defaults\").supplyIsoDefaults,o=t(\"../surface/defaults\").opacityscaleDefaults;e.exports=function(t,e,n,s){function l(n,a){return r.coerce(t,e,i,n,a)}a(t,e,n,s,l),o(t,e,s,l)}},{\"../../lib\":778,\"../isosurface/defaults\":1126,\"../surface/defaults\":1314,\"./attributes\":1349}],1352:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),calc:t(\"../isosurface/calc\"),colorbar:{min:\"cmin\",max:\"cmax\"},plot:t(\"./convert\"),moduleType:\"trace\",name:\"volume\",basePlotModule:t(\"../../plots/gl3d\"),categories:[\"gl3d\",\"showLegend\"],meta:{}}},{\"../../plots/gl3d\":870,\"../isosurface/calc\":1124,\"./attributes\":1349,\"./convert\":1350,\"./defaults\":1351}],1353:[function(t,e,n){\"use strict\";var r=t(\"../bar/attributes\"),i=t(\"../scatter/attributes\").line,a=t(\"../../plots/attributes\"),o=t(\"../../plots/template_attributes\").hovertemplateAttrs,s=t(\"../../plots/template_attributes\").texttemplateAttrs,l=t(\"./constants\"),c=t(\"../../lib/extend\").extendFlat,u=t(\"../../components/color\");function h(t){return{marker:{color:c({},r.marker.color,{arrayOk:!1,editType:\"style\"}),line:{color:c({},r.marker.line.color,{arrayOk:!1,editType:\"style\"}),width:c({},r.marker.line.width,{arrayOk:!1,editType:\"style\"}),editType:\"style\"},editType:\"style\"},editType:\"style\"}}e.exports={measure:{valType:\"data_array\",dflt:[],editType:\"calc\"},base:{valType:\"number\",dflt:null,arrayOk:!1,editType:\"calc\"},x:r.x,x0:r.x0,dx:r.dx,y:r.y,y0:r.y0,dy:r.dy,xperiod:r.xperiod,yperiod:r.yperiod,xperiod0:r.xperiod0,yperiod0:r.yperiod0,xperiodalignment:r.xperiodalignment,yperiodalignment:r.yperiodalignment,hovertext:r.hovertext,hovertemplate:o({},{keys:l.eventDataKeys}),hoverinfo:c({},a.hoverinfo,{flags:[\"name\",\"x\",\"y\",\"text\",\"initial\",\"delta\",\"final\"]}),textinfo:{valType:\"flaglist\",flags:[\"label\",\"text\",\"initial\",\"delta\",\"final\"],extras:[\"none\"],editType:\"plot\",arrayOk:!1},texttemplate:s({editType:\"plot\"},{keys:l.eventDataKeys.concat([\"label\"])}),text:r.text,textposition:r.textposition,insidetextanchor:r.insidetextanchor,textangle:r.textangle,textfont:r.textfont,insidetextfont:r.insidetextfont,outsidetextfont:r.outsidetextfont,constraintext:r.constraintext,cliponaxis:r.cliponaxis,orientation:r.orientation,offset:r.offset,width:r.width,increasing:h(),decreasing:h(),totals:h(),connector:{line:{color:c({},i.color,{dflt:u.defaultLine}),width:c({},i.width,{editType:\"plot\"}),dash:i.dash,editType:\"plot\"},mode:{valType:\"enumerated\",values:[\"spanning\",\"between\"],dflt:\"between\",editType:\"plot\"},visible:{valType:\"boolean\",dflt:!0,editType:\"plot\"},editType:\"plot\"},offsetgroup:r.offsetgroup,alignmentgroup:r.alignmentgroup}},{\"../../components/color\":643,\"../../lib/extend\":768,\"../../plots/attributes\":824,\"../../plots/template_attributes\":906,\"../bar/attributes\":921,\"../scatter/attributes\":1187,\"./constants\":1355}],1354:[function(t,e,n){\"use strict\";var r=t(\"../../plots/cartesian/axes\"),i=t(\"../../plots/cartesian/align_period\"),a=t(\"../../lib\").mergeArray,o=t(\"../scatter/calc_selection\"),s=t(\"../../constants/numerical\").BADNUM;function l(t){return\"a\"===t||\"absolute\"===t}function c(t){return\"t\"===t||\"total\"===t}e.exports=function(t,e){var n,u,h,d,f=r.getFromId(t,e.xaxis||\"x\"),p=r.getFromId(t,e.yaxis||\"y\");\"h\"===e.orientation?(n=f.makeCalcdata(e,\"x\"),h=p.makeCalcdata(e,\"y\"),u=i(e,p,\"y\",h),d=!!e.yperiodalignment):(n=p.makeCalcdata(e,\"y\"),h=f.makeCalcdata(e,\"x\"),u=i(e,f,\"x\",h),d=!!e.xperiodalignment);for(var m,g=Math.min(u.length,n.length),y=new Array(g),v=0,_=!1,b=0;b<g;b++){var x=n[b]||0,w=!1;(n[b]!==s||c(e.measure[b])||l(e.measure[b]))&&b+1<g&&(n[b+1]!==s||c(e.measure[b+1])||l(e.measure[b+1]))&&(w=!0);var k=y[b]={i:b,p:u[b],s:x,rawS:x,cNext:w};l(e.measure[b])?(v=k.s,k.isSum=!0,k.dir=\"totals\",k.s=v):c(e.measure[b])?(k.isSum=!0,k.dir=\"totals\",k.s=v):(k.isSum=!1,k.dir=k.rawS<0?\"decreasing\":\"increasing\",k.s=v+(m=k.s),v+=m),\"totals\"===k.dir&&(_=!0),d&&(y[b].orig_p=h[b]),e.ids&&(k.id=String(e.ids[b])),k.v=(e.base||0)+v}return y.length&&(y[0].hasTotals=_),a(e.text,y,\"tx\"),a(e.hovertext,y,\"htx\"),o(y,e),y}},{\"../../constants/numerical\":753,\"../../lib\":778,\"../../plots/cartesian/align_period\":825,\"../../plots/cartesian/axes\":828,\"../scatter/calc_selection\":1189}],1355:[function(t,e,n){\"use strict\";e.exports={eventDataKeys:[\"initial\",\"delta\",\"final\"]}},{}],1356:[function(t,e,n){\"use strict\";var r=t(\"../bar/cross_trace_calc\").setGroupPositions;e.exports=function(t,e){var n,i,a=t._fullLayout,o=t._fullData,s=t.calcdata,l=e.xaxis,c=e.yaxis,u=[],h=[],d=[];for(i=0;i<o.length;i++){var f=o[i];!0===f.visible&&f.xaxis===l._id&&f.yaxis===c._id&&\"waterfall\"===f.type&&(n=s[i],\"h\"===f.orientation?d.push(n):h.push(n),u.push(n))}var p={mode:a.waterfallmode,norm:a.waterfallnorm,gap:a.waterfallgap,groupgap:a.waterfallgroupgap};for(r(t,l,c,h,p),r(t,c,l,d,p),i=0;i<u.length;i++){n=u[i];for(var m=0;m<n.length;m++){var g=n[m];!1===g.isSum&&(g.s0+=0===m?0:n[m-1].s),m+1<n.length&&(n[m].nextP0=n[m+1].p0,n[m].nextS0=n[m+1].s0)}}}},{\"../bar/cross_trace_calc\":924}],1357:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"../bar/defaults\").handleGroupingDefaults,a=t(\"../bar/defaults\").handleText,o=t(\"../scatter/xy_defaults\"),s=t(\"../scatter/period_defaults\"),l=t(\"./attributes\"),c=t(\"../../components/color\"),u=t(\"../../constants/delta.js\"),h=u.INCREASING.COLOR,d=u.DECREASING.COLOR;function f(t,e,n){t(e+\".marker.color\",n),t(e+\".marker.line.color\",c.defaultLine),t(e+\".marker.line.width\")}e.exports={supplyDefaults:function(t,e,n,i){function c(n,i){return r.coerce(t,e,l,n,i)}if(o(t,e,i,c)){s(t,e,i,c),c(\"measure\"),c(\"orientation\",e.x&&!e.y?\"h\":\"v\"),c(\"base\"),c(\"offset\"),c(\"width\"),c(\"text\"),c(\"hovertext\"),c(\"hovertemplate\");var u=c(\"textposition\");a(t,e,i,c,u,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),\"none\"!==e.textposition&&(c(\"texttemplate\"),e.texttemplate||c(\"textinfo\")),f(c,\"increasing\",h),f(c,\"decreasing\",d),f(c,\"totals\",\"#4499FF\"),c(\"connector.visible\")&&(c(\"connector.mode\"),c(\"connector.line.width\")&&(c(\"connector.line.color\"),c(\"connector.line.dash\")))}else e.visible=!1},crossTraceDefaults:function(t,e){var n;function a(t){return r.coerce(n._input,n,l,t)}if(\"group\"===e.waterfallmode)for(var o=0;o<t.length;o++)i((n=t[o])._input,n,e,a)}}},{\"../../components/color\":643,\"../../constants/delta.js\":747,\"../../lib\":778,\"../bar/defaults\":925,\"../scatter/period_defaults\":1207,\"../scatter/xy_defaults\":1214,\"./attributes\":1353}],1358:[function(t,e,n){\"use strict\";e.exports=function(t,e){return t.x=\"xVal\"in e?e.xVal:e.x,t.y=\"yVal\"in e?e.yVal:e.y,\"initial\"in e&&(t.initial=e.initial),\"delta\"in e&&(t.delta=e.delta),\"final\"in e&&(t.final=e.final),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t}},{}],1359:[function(t,e,n){\"use strict\";var r=t(\"../../plots/cartesian/axes\").hoverLabelText,i=t(\"../../components/color\").opacity,a=t(\"../bar/hover\").hoverOnBars,o=t(\"../../constants/delta.js\"),s=o.INCREASING.SYMBOL,l=o.DECREASING.SYMBOL;e.exports=function(t,e,n,o){var c=a(t,e,n,o);if(c){var u=c.cd,h=u[0].trace,d=\"h\"===h.orientation,f=d?t.xa:t.ya,p=u[c.index],m=p.isSum?p.b+p.s:p.rawS;if(!p.isSum){c.initial=p.b+p.s-m,c.delta=m,c.final=c.initial+c.delta;var g=w(Math.abs(c.delta));c.deltaLabel=m<0?\"(\"+g+\")\":g,c.finalLabel=w(c.final),c.initialLabel=w(c.initial)}var y=p.hi||h.hoverinfo,v=[];if(y&&\"none\"!==y&&\"skip\"!==y){var _=\"all\"===y,b=y.split(\"+\"),x=function(t){return _||-1!==b.indexOf(t)};p.isSum||(!x(\"final\")||x(d?\"x\":\"y\")||v.push(c.finalLabel),x(\"delta\")&&v.push(m<0?c.deltaLabel+\" \"+l:c.deltaLabel+\" \"+s),x(\"initial\")&&v.push(\"Initial: \"+c.initialLabel))}return v.length&&(c.extraText=v.join(\"<br>\")),c.color=function(t,e){var n=t[e.dir].marker,r=n.color,a=n.line.color,o=n.line.width;return i(r)?r:i(a)&&o?a:void 0}(h,p),[c]}function w(t){return r(f,t)}}},{\"../../components/color\":643,\"../../constants/delta.js\":747,\"../../plots/cartesian/axes\":828,\"../bar/hover\":928}],1360:[function(t,e,n){\"use strict\";e.exports={attributes:t(\"./attributes\"),layoutAttributes:t(\"./layout_attributes\"),supplyDefaults:t(\"./defaults\").supplyDefaults,crossTraceDefaults:t(\"./defaults\").crossTraceDefaults,supplyLayoutDefaults:t(\"./layout_defaults\"),calc:t(\"./calc\"),crossTraceCalc:t(\"./cross_trace_calc\"),plot:t(\"./plot\"),style:t(\"./style\").style,hoverPoints:t(\"./hover\"),eventData:t(\"./event_data\"),selectPoints:t(\"../bar/select\"),moduleType:\"trace\",name:\"waterfall\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"bar-like\",\"cartesian\",\"svg\",\"oriented\",\"showLegend\",\"zoomScale\"],meta:{}}},{\"../../plots/cartesian\":841,\"../bar/select\":933,\"./attributes\":1353,\"./calc\":1354,\"./cross_trace_calc\":1356,\"./defaults\":1357,\"./event_data\":1358,\"./hover\":1359,\"./layout_attributes\":1361,\"./layout_defaults\":1362,\"./plot\":1363,\"./style\":1364}],1361:[function(t,e,n){\"use strict\";e.exports={waterfallmode:{valType:\"enumerated\",values:[\"group\",\"overlay\"],dflt:\"group\",editType:\"calc\"},waterfallgap:{valType:\"number\",min:0,max:1,editType:\"calc\"},waterfallgroupgap:{valType:\"number\",min:0,max:1,dflt:0,editType:\"calc\"}}},{}],1362:[function(t,e,n){\"use strict\";var r=t(\"../../lib\"),i=t(\"./layout_attributes\");e.exports=function(t,e,n){var a=!1;function o(n,a){return r.coerce(t,e,i,n,a)}for(var s=0;s<n.length;s++){var l=n[s];if(l.visible&&\"waterfall\"===l.type){a=!0;break}}a&&(o(\"waterfallmode\"),o(\"waterfallgap\",.2),o(\"waterfallgroupgap\"))}},{\"../../lib\":778,\"./layout_attributes\":1361}],1363:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../lib\"),a=t(\"../../components/drawing\"),o=t(\"../../constants/numerical\").BADNUM,s=t(\"../bar/plot\"),l=t(\"../bar/uniform_text\").clearMinTextSize;e.exports=function(t,e,n,c){var u=t._fullLayout;l(\"waterfall\",u),s.plot(t,e,n,c,{mode:u.waterfallmode,norm:u.waterfallmode,gap:u.waterfallgap,groupgap:u.waterfallgroupgap}),function(t,e,n,s){var l=e.xaxis,c=e.yaxis;i.makeTraceGroups(s,n,\"trace bars\").each((function(n){var s=r.select(this),u=n[0].trace,h=i.ensureSingle(s,\"g\",\"lines\");if(u.connector&&u.connector.visible){var d=\"h\"===u.orientation,f=u.connector.mode,p=h.selectAll(\"g.line\").data(i.identity);p.enter().append(\"g\").classed(\"line\",!0),p.exit().remove();var m=p.size();p.each((function(n,s){if(s===m-1||n.cNext){var u=function(t,e,n,r){var i=[],a=[],o=r?e:n,s=r?n:e;return i[0]=o.c2p(t.s0,!0),a[0]=s.c2p(t.p0,!0),i[1]=o.c2p(t.s1,!0),a[1]=s.c2p(t.p1,!0),i[2]=o.c2p(t.nextS0,!0),a[2]=s.c2p(t.nextP0,!0),r?[i,a]:[a,i]}(n,l,c,d),h=u[0],p=u[1],g=\"\";h[0]!==o&&p[0]!==o&&h[1]!==o&&p[1]!==o&&(\"spanning\"===f&&!n.isSum&&s>0&&(g+=d?\"M\"+h[0]+\",\"+p[1]+\"V\"+p[0]:\"M\"+h[1]+\",\"+p[0]+\"H\"+h[0]),\"between\"!==f&&(n.isSum||s<m-1)&&(g+=d?\"M\"+h[1]+\",\"+p[0]+\"V\"+p[1]:\"M\"+h[0]+\",\"+p[1]+\"H\"+h[1]),h[2]!==o&&p[2]!==o&&(g+=d?\"M\"+h[1]+\",\"+p[1]+\"V\"+p[2]:\"M\"+h[1]+\",\"+p[1]+\"H\"+h[2])),\"\"===g&&(g=\"M0,0Z\"),i.ensureSingle(r.select(this),\"path\").attr(\"d\",g).call(a.setClipUrl,e.layerClipId,t)}}))}else h.remove()}))}(t,e,n,c)}},{\"../../components/drawing\":665,\"../../constants/numerical\":753,\"../../lib\":778,\"../bar/plot\":932,\"../bar/uniform_text\":937,d3:169}],1364:[function(t,e,n){\"use strict\";var r=t(\"d3\"),i=t(\"../../components/drawing\"),a=t(\"../../components/color\"),o=t(\"../../constants/interactions\").DESELECTDIM,s=t(\"../bar/style\"),l=t(\"../bar/uniform_text\").resizeText,c=s.styleTextPoints;e.exports={style:function(t,e,n){var s=n||r.select(t).selectAll(\"g.waterfalllayer\").selectAll(\"g.trace\");l(t,s,\"waterfall\"),s.style(\"opacity\",(function(t){return t[0].trace.opacity})),s.each((function(e){var n=r.select(this),s=e[0].trace;n.selectAll(\".point > path\").each((function(t){if(!t.isBlank){var e=s[t.dir].marker;r.select(this).call(a.fill,e.color).call(a.stroke,e.line.color).call(i.dashLine,e.line.dash,e.line.width).style(\"opacity\",s.selectedpoints&&!t.selected?o:1)}})),c(n,s,t),n.selectAll(\".lines\").each((function(){var t=s.connector.line;i.lineGroupStyle(r.select(this).selectAll(\"path\"),t.width,t.color,t.dash)}))}))}}},{\"../../components/color\":643,\"../../components/drawing\":665,\"../../constants/interactions\":752,\"../bar/style\":935,\"../bar/uniform_text\":937,d3:169}],1365:[function(t,e,n){\"use strict\";var r=t(\"../plots/cartesian/axes\"),i=t(\"../lib\"),a=t(\"../plot_api/plot_schema\"),o=t(\"./helpers\").pointsAccessorFunction,s=t(\"../constants/numerical\").BADNUM;n.moduleType=\"transform\",n.name=\"aggregate\";var l=n.attributes={enabled:{valType:\"boolean\",dflt:!0,editType:\"calc\"},groups:{valType:\"string\",strict:!0,noBlank:!0,arrayOk:!0,dflt:\"x\",editType:\"calc\"},aggregations:{_isLinkedToArray:\"aggregation\",target:{valType:\"string\",editType:\"calc\"},func:{valType:\"enumerated\",values:[\"count\",\"sum\",\"avg\",\"median\",\"mode\",\"rms\",\"stddev\",\"min\",\"max\",\"first\",\"last\",\"change\",\"range\"],dflt:\"first\",editType:\"calc\"},funcmode:{valType:\"enumerated\",values:[\"sample\",\"population\"],dflt:\"sample\",editType:\"calc\"},enabled:{valType:\"boolean\",dflt:!0,editType:\"calc\"},editType:\"calc\"},editType:\"calc\"},c=l.aggregations;function u(t,e,n,a){if(a.enabled){for(var o=a.target,l=i.nestedProperty(e,o),c=l.get(),u=function(t,e){var n=e.d2c,r=e.c2d;switch(t.func){case\"count\":return h;case\"first\":return d;case\"last\":return f;case\"sum\":return function(t,e){for(var i=0,a=0;a<e.length;a++){var o=n(t[e[a]]);o!==s&&(i+=o)}return r(i)};case\"avg\":return function(t,e){for(var i=0,a=0,o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&(i+=l,a++)}return a?r(i/a):s};case\"min\":return function(t,e){for(var i=1/0,a=0;a<e.length;a++){var o=n(t[e[a]]);o!==s&&(i=Math.min(i,o))}return i===1/0?s:r(i)};case\"max\":return function(t,e){for(var i=-1/0,a=0;a<e.length;a++){var o=n(t[e[a]]);o!==s&&(i=Math.max(i,o))}return i===-1/0?s:r(i)};case\"range\":return function(t,e){for(var i=1/0,a=-1/0,o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&(i=Math.min(i,l),a=Math.max(a,l))}return a===-1/0||i===1/0?s:r(a-i)};case\"change\":return function(t,e){var i=n(t[e[0]]),a=n(t[e[e.length-1]]);return i===s||a===s?s:r(a-i)};case\"median\":return function(t,e){for(var a=[],o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&a.push(l)}if(!a.length)return s;a.sort(i.sorterAsc);var c=(a.length-1)/2;return r((a[Math.floor(c)]+a[Math.ceil(c)])/2)};case\"mode\":return function(t,e){for(var i={},a=0,o=s,l=0;l<e.length;l++){var c=n(t[e[l]]);if(c!==s){var u=i[c]=(i[c]||0)+1;u>a&&(a=u,o=c)}}return a?r(o):s};case\"rms\":return function(t,e){for(var i=0,a=0,o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&(i+=l*l,a++)}return a?r(Math.sqrt(i/a)):s};case\"stddev\":return function(e,r){var i,a=0,o=0,l=1,c=s;for(i=0;i<r.length&&c===s;i++)c=n(e[r[i]]);if(c===s)return s;for(;i<r.length;i++){var u=n(e[r[i]]);if(u!==s){var h=u-c;a+=h,o+=h*h,l++}}var d=\"sample\"===t.funcmode?l-1:l;return d?Math.sqrt((o-a*a/l)/d):0}}}(a,r.getDataConversions(t,e,o,c)),p=new Array(n.length),m=0;m<n.length;m++)p[m]=u(c,n[m]);l.set(p),\"count\"===a.func&&i.pushUnique(e._arrayAttrs,o)}}function h(t,e){return e.length}function d(t,e){return t[e[0]]}function f(t,e){return t[e[e.length-1]]}n.supplyDefaults=function(t,e){var n,r={};function o(e,n){return i.coerce(t,r,l,e,n)}if(!o(\"enabled\"))return r;var s=a.findArrayAttributes(e),u={};for(n=0;n<s.length;n++)u[s[n]]=1;var h=o(\"groups\");if(!Array.isArray(h)){if(!u[h])return r.enabled=!1,r;u[h]=0}var d,f=t.aggregations||[],p=r.aggregations=new Array(f.length);function m(t,e){return i.coerce(f[n],d,c,t,e)}for(n=0;n<f.length;n++){d={_index:n};var g=m(\"target\"),y=m(\"func\");m(\"enabled\")&&g&&(u[g]||\"count\"===y&&void 0===u[g])?(\"stddev\"===y&&m(\"funcmode\"),u[g]=0,p[n]=d):p[n]={enabled:!1,_index:n}}for(n=0;n<s.length;n++)u[s[n]]&&p.push({target:s[n],func:c.func.dflt,enabled:!0,_index:-1});return r},n.calcTransform=function(t,e,n){if(n.enabled){var r=n.groups,a=i.getTargetArray(e,{target:r});if(a){var s,l,c,h={},d={},f=[],p=o(e.transforms,n),m=a.length;for(e._length&&(m=Math.min(m,e._length)),s=0;s<m;s++)void 0===(c=h[l=a[s]])?(h[l]=f.length,f.push([s]),d[h[l]]=p(s)):(f[c].push(s),d[h[l]]=(d[h[l]]||[]).concat(p(s)));n._indexToPoints=d;var g=n.aggregations;for(s=0;s<g.length;s++)u(t,e,f,g[s]);\"string\"==typeof r&&u(t,e,f,{target:r,func:\"first\",enabled:!0}),e._length=f.length}}}},{\"../constants/numerical\":753,\"../lib\":778,\"../plot_api/plot_schema\":816,\"../plots/cartesian/axes\":828,\"./helpers\":1368}],1366:[function(t,e,n){\"use strict\";var r=t(\"../lib\"),i=t(\"../registry\"),a=t(\"../plots/cartesian/axes\"),o=t(\"./helpers\").pointsAccessorFunction,s=t(\"../constants/filter_ops\"),l=s.COMPARISON_OPS,c=s.INTERVAL_OPS,u=s.SET_OPS;n.moduleType=\"transform\",n.name=\"filter\",n.attributes={enabled:{valType:\"boolean\",dflt:!0,editType:\"calc\"},target:{valType:\"string\",strict:!0,noBlank:!0,arrayOk:!0,dflt:\"x\",editType:\"calc\"},operation:{valType:\"enumerated\",values:[].concat(l).concat(c).concat(u),dflt:\"=\",editType:\"calc\"},value:{valType:\"any\",dflt:0,editType:\"calc\"},preservegaps:{valType:\"boolean\",dflt:!1,editType:\"calc\"},editType:\"calc\"},n.supplyDefaults=function(t){var e={};function a(i,a){return r.coerce(t,e,n.attributes,i,a)}if(a(\"enabled\")){var o=a(\"target\");if(r.isArrayOrTypedArray(o)&&0===o.length)return e.enabled=!1,e;a(\"preservegaps\"),a(\"operation\"),a(\"value\");var s=i.getComponentMethod(\"calendars\",\"handleDefaults\");s(t,e,\"valuecalendar\",null),s(t,e,\"targetcalendar\",null)}return e},n.calcTransform=function(t,e,n){if(n.enabled){var i=r.getTargetArray(e,n);if(i){var s=n.target,h=i.length;e._length&&(h=Math.min(h,e._length));var d=n.targetcalendar,f=e._arrayAttrs,p=n.preservegaps;if(\"string\"==typeof s){var m=r.nestedProperty(e,s+\"calendar\").get();m&&(d=m)}var g,y,v=function(t,e,n){var r=t.operation,i=t.value,a=Array.isArray(i);function o(t){return-1!==t.indexOf(r)}var s,h=function(n){return e(n,0,t.valuecalendar)},d=function(t){return e(t,0,n)};switch(o(l)?s=h(a?i[0]:i):o(c)?s=a?[h(i[0]),h(i[1])]:[h(i),h(i)]:o(u)&&(s=a?i.map(h):[h(i)]),r){case\"=\":return function(t){return d(t)===s};case\"!=\":return function(t){return d(t)!==s};case\"<\":return function(t){return d(t)<s};case\"<=\":return function(t){return d(t)<=s};case\">\":return function(t){return d(t)>s};case\">=\":return function(t){return d(t)>=s};case\"[]\":return function(t){var e=d(t);return e>=s[0]&&e<=s[1]};case\"()\":return function(t){var e=d(t);return e>s[0]&&e<s[1]};case\"[)\":return function(t){var e=d(t);return e>=s[0]&&e<s[1]};case\"(]\":return function(t){var e=d(t);return e>s[0]&&e<=s[1]};case\"][\":return function(t){var e=d(t);return e<=s[0]||e>=s[1]};case\")(\":return function(t){var e=d(t);return e<s[0]||e>s[1]};case\"](\":return function(t){var e=d(t);return e<=s[0]||e>s[1]};case\")[\":return function(t){var e=d(t);return e<s[0]||e>=s[1]};case\"{}\":return function(t){return-1!==s.indexOf(d(t))};case\"}{\":return function(t){return-1===s.indexOf(d(t))}}}(n,a.getDataToCoordFunc(t,e,s,i),d),_={},b={},x=0;p?(g=function(t){_[t.astr]=r.extendDeep([],t.get()),t.set(new Array(h))},y=function(t,e){var n=_[t.astr][e];t.get()[e]=n}):(g=function(t){_[t.astr]=r.extendDeep([],t.get()),t.set([])},y=function(t,e){var n=_[t.astr][e];t.get().push(n)}),M(g);for(var w=o(e.transforms,n),k=0;k<h;k++)v(i[k])?(M(y,k),b[x++]=w(k)):p&&x++;n._indexToPoints=b,e._length=x}}function M(t,n){for(var i=0;i<f.length;i++)t(r.nestedProperty(e,f[i]),n)}}},{\"../constants/filter_ops\":749,\"../lib\":778,\"../plots/cartesian/axes\":828,\"../registry\":911,\"./helpers\":1368}],1367:[function(t,e,n){\"use strict\";var r=t(\"../lib\"),i=t(\"../plot_api/plot_schema\"),a=t(\"../plots/plots\"),o=t(\"./helpers\").pointsAccessorFunction;function s(t,e){var n,s,l,c,u,h,d,f,p,m,g=e.transform,y=e.transformIndex,v=t.transforms[y].groups,_=o(t.transforms,g);if(!r.isArrayOrTypedArray(v)||0===v.length)return[t];var b=r.filterUnique(v),x=new Array(b.length),w=v.length,k=i.findArrayAttributes(t),M=g.styles||[],T={};for(n=0;n<M.length;n++)T[M[n].target]=M[n].value;g.styles&&(m=r.keyedContainer(g,\"styles\",\"target\",\"value.name\"));var S={},A={};for(n=0;n<b.length;n++){S[h=b[n]]=n,A[h]=0,(d=x[n]=r.extendDeepNoArrays({},t))._group=h,d.transforms[y]._indexToPoints={};var L=null;for(m&&(L=m.get(h)),d.name=L||\"\"===L?L:r.templateString(g.nameformat,{trace:t.name,group:h}),f=d.transforms,d.transforms=[],s=0;s<f.length;s++)d.transforms[s]=r.extendDeepNoArrays({},f[s]);for(s=0;s<k.length;s++)r.nestedProperty(d,k[s]).set([])}for(l=0;l<k.length;l++){for(c=k[l],s=0,p=[];s<b.length;s++)p[s]=r.nestedProperty(x[s],c).get();for(u=r.nestedProperty(t,c).get(),s=0;s<w;s++)p[S[v[s]]].push(u[s])}for(s=0;s<w;s++)(d=x[S[v[s]]]).transforms[y]._indexToPoints[A[v[s]]]=_(s),A[v[s]]++;for(n=0;n<b.length;n++)h=b[n],a.clearExpandedTraceDefaultColors(d=x[n]),d=r.extendDeepNoArrays(d,T[h]||{});return x}n.moduleType=\"transform\",n.name=\"groupby\",n.attributes={enabled:{valType:\"boolean\",dflt:!0,editType:\"calc\"},groups:{valType:\"data_array\",dflt:[],editType:\"calc\"},nameformat:{valType:\"string\",editType:\"calc\"},styles:{_isLinkedToArray:\"style\",target:{valType:\"string\",editType:\"calc\"},value:{valType:\"any\",dflt:{},editType:\"calc\",_compareAsJSON:!0},editType:\"calc\"},editType:\"calc\"},n.supplyDefaults=function(t,e,i){var a,o={};function s(e,i){return r.coerce(t,o,n.attributes,e,i)}if(!s(\"enabled\"))return o;s(\"groups\"),s(\"nameformat\",i._dataLength>1?\"%{group} (%{trace})\":\"%{group}\");var l=t.styles,c=o.styles=[];if(l)for(a=0;a<l.length;a++){var u=c[a]={};r.coerce(l[a],c[a],n.attributes.styles,\"target\");var h=r.coerce(l[a],c[a],n.attributes.styles,\"value\");r.isPlainObject(h)?u.value=r.extendDeep({},h):h&&delete u.value}return o},n.transform=function(t,e){var n,r,i,a=[];for(r=0;r<t.length;r++)for(n=s(t[r],e),i=0;i<n.length;i++)a.push(n[i]);return a}},{\"../lib\":778,\"../plot_api/plot_schema\":816,\"../plots/plots\":891,\"./helpers\":1368}],1368:[function(t,e,n){\"use strict\";n.pointsAccessorFunction=function(t,e){for(var n,r,i=0;i<t.length&&(n=t[i])!==e;i++)n._indexToPoints&&!1!==n.enabled&&(r=n._indexToPoints);return r?function(t){return r[t]}:function(t){return[t]}}},{}],1369:[function(t,e,n){\"use strict\";var r=t(\"../lib\"),i=t(\"../plots/cartesian/axes\"),a=t(\"./helpers\").pointsAccessorFunction,o=t(\"../constants/numerical\").BADNUM;n.moduleType=\"transform\",n.name=\"sort\",n.attributes={enabled:{valType:\"boolean\",dflt:!0,editType:\"calc\"},target:{valType:\"string\",strict:!0,noBlank:!0,arrayOk:!0,dflt:\"x\",editType:\"calc\"},order:{valType:\"enumerated\",values:[\"ascending\",\"descending\"],dflt:\"ascending\",editType:\"calc\"},editType:\"calc\"},n.supplyDefaults=function(t){var e={};function i(i,a){return r.coerce(t,e,n.attributes,i,a)}return i(\"enabled\")&&(i(\"target\"),i(\"order\")),e},n.calcTransform=function(t,e,n){if(n.enabled){var s=r.getTargetArray(e,n);if(s){var l=n.target,c=s.length;e._length&&(c=Math.min(c,e._length));var u,h,d=e._arrayAttrs,f=function(t,e,n,r){var i,a=new Array(r),s=new Array(r);for(i=0;i<r;i++)a[i]={v:e[i],i:i};for(a.sort(function(t,e){switch(t.order){case\"ascending\":return function(t,n){var r=e(t.v),i=e(n.v);return r===o?1:i===o?-1:r-i};case\"descending\":return function(t,n){var r=e(t.v),i=e(n.v);return r===o?1:i===o?-1:i-r}}}(t,n)),i=0;i<r;i++)s[i]=a[i].i;return s}(n,s,i.getDataToCoordFunc(t,e,l,s),c),p=a(e.transforms,n),m={};for(u=0;u<d.length;u++){var g=r.nestedProperty(e,d[u]),y=g.get(),v=new Array(c);for(h=0;h<c;h++)v[h]=y[f[h]];g.set(v)}for(h=0;h<c;h++)m[h]=p(f[h]);n._indexToPoints=m,e._length=c}}}},{\"../constants/numerical\":753,\"../lib\":778,\"../plots/cartesian/axes\":828,\"./helpers\":1368}],1370:[function(t,e,n){\"use strict\";n.version=\"1.58.4\"},{}]},{},[26])(26)},\"9ppp\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return r}));const r=(()=>{function t(){return Error.call(this),this.message=\"object unsubscribed\",this.name=\"ObjectUnsubscribedError\",this}return t.prototype=Object.create(Error.prototype),t})()},\"9rRi\":function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"gd\",{months:[\"Am Faoilleach\",\"An Gearran\",\"Am M\\xe0rt\",\"An Giblean\",\"An C\\xe8itean\",\"An t-\\xd2gmhios\",\"An t-Iuchar\",\"An L\\xf9nastal\",\"An t-Sultain\",\"An D\\xe0mhair\",\"An t-Samhain\",\"An D\\xf9bhlachd\"],monthsShort:[\"Faoi\",\"Gear\",\"M\\xe0rt\",\"Gibl\",\"C\\xe8it\",\"\\xd2gmh\",\"Iuch\",\"L\\xf9n\",\"Sult\",\"D\\xe0mh\",\"Samh\",\"D\\xf9bh\"],monthsParseExact:!0,weekdays:[\"Did\\xf2mhnaich\",\"Diluain\",\"Dim\\xe0irt\",\"Diciadain\",\"Diardaoin\",\"Dihaoine\",\"Disathairne\"],weekdaysShort:[\"Did\",\"Dil\",\"Dim\",\"Dic\",\"Dia\",\"Dih\",\"Dis\"],weekdaysMin:[\"D\\xf2\",\"Lu\",\"M\\xe0\",\"Ci\",\"Ar\",\"Ha\",\"Sa\"],longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[An-diugh aig] LT\",nextDay:\"[A-m\\xe0ireach aig] LT\",nextWeek:\"dddd [aig] LT\",lastDay:\"[An-d\\xe8 aig] LT\",lastWeek:\"dddd [seo chaidh] [aig] LT\",sameElse:\"L\"},relativeTime:{future:\"ann an %s\",past:\"bho chionn %s\",s:\"beagan diogan\",ss:\"%d diogan\",m:\"mionaid\",mm:\"%d mionaidean\",h:\"uair\",hh:\"%d uairean\",d:\"latha\",dd:\"%d latha\",M:\"m\\xecos\",MM:\"%d m\\xecosan\",y:\"bliadhna\",yy:\"%d bliadhna\"},dayOfMonthOrdinalParse:/\\d{1,2}(d|na|mh)/,ordinal:function(t){return t+(1===t?\"d\":t%10==2?\"na\":\"mh\")},week:{dow:1,doy:4}})}(n(\"wd/R\"))},\"A+xa\":function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"cv\",{months:\"\\u043a\\u04d1\\u0440\\u043b\\u0430\\u0447_\\u043d\\u0430\\u0440\\u04d1\\u0441_\\u043f\\u0443\\u0448_\\u0430\\u043a\\u0430_\\u043c\\u0430\\u0439_\\u04ab\\u04d7\\u0440\\u0442\\u043c\\u0435_\\u0443\\u0442\\u04d1_\\u04ab\\u0443\\u0440\\u043b\\u0430_\\u0430\\u0432\\u04d1\\u043d_\\u044e\\u043f\\u0430_\\u0447\\u04f3\\u043a_\\u0440\\u0430\\u0448\\u0442\\u0430\\u0432\".split(\"_\"),monthsShort:\"\\u043a\\u04d1\\u0440_\\u043d\\u0430\\u0440_\\u043f\\u0443\\u0448_\\u0430\\u043a\\u0430_\\u043c\\u0430\\u0439_\\u04ab\\u04d7\\u0440_\\u0443\\u0442\\u04d1_\\u04ab\\u0443\\u0440_\\u0430\\u0432\\u043d_\\u044e\\u043f\\u0430_\\u0447\\u04f3\\u043a_\\u0440\\u0430\\u0448\".split(\"_\"),weekdays:\"\\u0432\\u044b\\u0440\\u0441\\u0430\\u0440\\u043d\\u0438\\u043a\\u0443\\u043d_\\u0442\\u0443\\u043d\\u0442\\u0438\\u043a\\u0443\\u043d_\\u044b\\u0442\\u043b\\u0430\\u0440\\u0438\\u043a\\u0443\\u043d_\\u044e\\u043d\\u043a\\u0443\\u043d_\\u043a\\u04d7\\u04ab\\u043d\\u0435\\u0440\\u043d\\u0438\\u043a\\u0443\\u043d_\\u044d\\u0440\\u043d\\u0435\\u043a\\u0443\\u043d_\\u0448\\u04d1\\u043c\\u0430\\u0442\\u043a\\u0443\\u043d\".split(\"_\"),weekdaysShort:\"\\u0432\\u044b\\u0440_\\u0442\\u0443\\u043d_\\u044b\\u0442\\u043b_\\u044e\\u043d_\\u043a\\u04d7\\u04ab_\\u044d\\u0440\\u043d_\\u0448\\u04d1\\u043c\".split(\"_\"),weekdaysMin:\"\\u0432\\u0440_\\u0442\\u043d_\\u044b\\u0442_\\u044e\\u043d_\\u043a\\u04ab_\\u044d\\u0440_\\u0448\\u043c\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD-MM-YYYY\",LL:\"YYYY [\\u04ab\\u0443\\u043b\\u0445\\u0438] MMMM [\\u0443\\u0439\\u04d1\\u0445\\u04d7\\u043d] D[-\\u043c\\u04d7\\u0448\\u04d7]\",LLL:\"YYYY [\\u04ab\\u0443\\u043b\\u0445\\u0438] MMMM [\\u0443\\u0439\\u04d1\\u0445\\u04d7\\u043d] D[-\\u043c\\u04d7\\u0448\\u04d7], HH:mm\",LLLL:\"dddd, YYYY [\\u04ab\\u0443\\u043b\\u0445\\u0438] MMMM [\\u0443\\u0439\\u04d1\\u0445\\u04d7\\u043d] D[-\\u043c\\u04d7\\u0448\\u04d7], HH:mm\"},calendar:{sameDay:\"[\\u041f\\u0430\\u044f\\u043d] LT [\\u0441\\u0435\\u0445\\u0435\\u0442\\u0440\\u0435]\",nextDay:\"[\\u042b\\u0440\\u0430\\u043d] LT [\\u0441\\u0435\\u0445\\u0435\\u0442\\u0440\\u0435]\",lastDay:\"[\\u04d6\\u043d\\u0435\\u0440] LT [\\u0441\\u0435\\u0445\\u0435\\u0442\\u0440\\u0435]\",nextWeek:\"[\\u04aa\\u0438\\u0442\\u0435\\u0441] dddd LT [\\u0441\\u0435\\u0445\\u0435\\u0442\\u0440\\u0435]\",lastWeek:\"[\\u0418\\u0440\\u0442\\u043d\\u04d7] dddd LT [\\u0441\\u0435\\u0445\\u0435\\u0442\\u0440\\u0435]\",sameElse:\"L\"},relativeTime:{future:function(t){return t+(/\\u0441\\u0435\\u0445\\u0435\\u0442$/i.exec(t)?\"\\u0440\\u0435\\u043d\":/\\u04ab\\u0443\\u043b$/i.exec(t)?\"\\u0442\\u0430\\u043d\":\"\\u0440\\u0430\\u043d\")},past:\"%s \\u043a\\u0430\\u044f\\u043b\\u043b\\u0430\",s:\"\\u043f\\u04d7\\u0440-\\u0438\\u043a \\u04ab\\u0435\\u043a\\u043a\\u0443\\u043d\\u0442\",ss:\"%d \\u04ab\\u0435\\u043a\\u043a\\u0443\\u043d\\u0442\",m:\"\\u043f\\u04d7\\u0440 \\u043c\\u0438\\u043d\\u0443\\u0442\",mm:\"%d \\u043c\\u0438\\u043d\\u0443\\u0442\",h:\"\\u043f\\u04d7\\u0440 \\u0441\\u0435\\u0445\\u0435\\u0442\",hh:\"%d \\u0441\\u0435\\u0445\\u0435\\u0442\",d:\"\\u043f\\u04d7\\u0440 \\u043a\\u0443\\u043d\",dd:\"%d \\u043a\\u0443\\u043d\",M:\"\\u043f\\u04d7\\u0440 \\u0443\\u0439\\u04d1\\u0445\",MM:\"%d \\u0443\\u0439\\u04d1\\u0445\",y:\"\\u043f\\u04d7\\u0440 \\u04ab\\u0443\\u043b\",yy:\"%d \\u04ab\\u0443\\u043b\"},dayOfMonthOrdinalParse:/\\d{1,2}-\\u043c\\u04d7\\u0448/,ordinal:\"%d-\\u043c\\u04d7\\u0448\",week:{dow:1,doy:7}})}(n(\"wd/R\"))},AQ68:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"uz-latn\",{months:\"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr\".split(\"_\"),monthsShort:\"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek\".split(\"_\"),weekdays:\"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba\".split(\"_\"),weekdaysShort:\"Yak_Dush_Sesh_Chor_Pay_Jum_Shan\".split(\"_\"),weekdaysMin:\"Ya_Du_Se_Cho_Pa_Ju_Sha\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"D MMMM YYYY, dddd HH:mm\"},calendar:{sameDay:\"[Bugun soat] LT [da]\",nextDay:\"[Ertaga] LT [da]\",nextWeek:\"dddd [kuni soat] LT [da]\",lastDay:\"[Kecha soat] LT [da]\",lastWeek:\"[O'tgan] dddd [kuni soat] LT [da]\",sameElse:\"L\"},relativeTime:{future:\"Yaqin %s ichida\",past:\"Bir necha %s oldin\",s:\"soniya\",ss:\"%d soniya\",m:\"bir daqiqa\",mm:\"%d daqiqa\",h:\"bir soat\",hh:\"%d soat\",d:\"bir kun\",dd:\"%d kun\",M:\"bir oy\",MM:\"%d oy\",y:\"bir yil\",yy:\"%d yil\"},week:{dow:1,doy:7}})}(n(\"wd/R\"))},AcyG:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return Et})),n.d(e,\"b\",(function(){return Mt})),n.d(e,\"c\",(function(){return D})),n.d(e,\"d\",(function(){return Ct})),n.d(e,\"e\",(function(){return Dt})),n.d(e,\"f\",(function(){return It})),n.d(e,\"g\",(function(){return Ot})),n.d(e,\"h\",(function(){return Pt})),n.d(e,\"i\",(function(){return wt})),n.d(e,\"j\",(function(){return Tt})),n.d(e,\"k\",(function(){return Y})),n.d(e,\"l\",(function(){return B})),n.d(e,\"m\",(function(){return V})),n.d(e,\"n\",(function(){return H})),n.d(e,\"o\",(function(){return Lt}));var r=n(\"fXoL\"),i=n(\"z5Zb\"),a=n(\"ofXK\"),o=n(\"HDdC\"),s=n(\"XNiG\"),l=n(\"2Vo4\"),c=n(\"LRne\"),u=n(\"cp0P\"),h=n(\"z6cu\"),d=n(\"EY2u\"),f=n(\"Cfvw\"),p=n(\"jtHE\"),m=n(\"pLZG\"),g=n(\"lJxs\"),y=n(\"UXun\"),v=n(\"IzEk\"),_=n(\"zx2A\");class b{constructor(t){this.project=t}call(t,e){return e.subscribe(new x(t,this.project))}}class x extends _.b{constructor(t,e){super(t),this.project=e,this.hasSubscription=!1,this.hasCompleted=!1,this.index=0}_next(t){this.hasSubscription||this.tryNext(t)}tryNext(t){let e;const n=this.index++;try{e=this.project(t,n)}catch(r){return void this.destination.error(r)}this.hasSubscription=!0,this._innerSub(e)}_innerSub(t){const e=new _.a(this),n=this.destination;n.add(e);const r=Object(_.c)(t,e);r!==e&&n.add(r)}_complete(){this.hasCompleted=!0,this.hasSubscription||this.destination.complete(),this.unsubscribe()}notifyNext(t){this.destination.next(t)}notifyError(t){this.destination.error(t)}notifyComplete(){this.hasSubscription=!1,this.hasCompleted&&this.destination.complete()}}var w=n(\"5+tZ\"),k=n(\"xbPD\"),M=n(\"JIr8\"),T=n(\"1G5W\"),S=n(\"vkgz\"),A=n(\"/uUt\");const L={STATE_NAME:t=>t+\" is not a valid state name. It needs to be a valid object property name.\",STATE_NAME_PROPERTY:()=>\"States must register a 'name' property\",STATE_UNIQUE:(t,e,n)=>`State name '${t}' from ${e} already exists in ${n}`,STATE_DECORATOR:()=>\"States must be decorated with @State() decorator\",INCORRECT_PRODUCTION:()=>\"Angular is running in production mode but NGXS is still running in the development mode!\\nPlease set developmentMode to false on the NgxsModule options when in production mode.\\nNgxsModule.forRoot(states, { developmentMode: !environment.production })\",INCORRECT_DEVELOPMENT:()=>\"RECOMMENDATION: Set developmentMode to true on the NgxsModule when Angular is running in development mode.\\nNgxsModule.forRoot(states, { developmentMode: !environment.production })\",SELECT_FACTORY_NOT_CONNECTED:()=>\"You have forgotten to import the NGXS module!\",ACTION_DECORATOR:()=>\"@Action() decorator cannot be used with static methods\",SELECTOR_DECORATOR:()=>\"Selectors only work on methods\",ZONE_WARNING:()=>\"Your application was bootstrapped with nooped zone and your execution strategy requires an actual NgZone!\\nPlease set the value of the executionStrategy property to NoopNgxsExecutionStrategy.\\nNgxsModule.forRoot(states, { executionStrategy: NoopNgxsExecutionStrategy })\",PATCHING_ARRAY:()=>\"Patching arrays is not supported.\",PATCHING_PRIMITIVE:()=>\"Patching primitives is not supported.\",UNDECORATED_STATE_IN_IVY:t=>`'${t}' class should be decorated with @Injectable() right after the @State() decorator`};let C=(()=>{class t{constructor(t,e){this._ngZone=t,this._platformId=e,this.verifyZoneIsNotNooped(this._ngZone)}enter(t){return Object(a.z)(this._platformId)?this.runInsideAngular(t):this.runOutsideAngular(t)}leave(t){return this.runInsideAngular(t)}runInsideAngular(t){return r.H.isInAngularZone()?t():this._ngZone.run(t)}runOutsideAngular(t){return r.H.isInAngularZone()?this._ngZone.runOutsideAngular(t):t()}verifyZoneIsNotNooped(t){t instanceof r.H||console.warn(L.ZONE_WARNING())}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(r.H),r.hc(r.K))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})();const E=new r.w(\"ROOT_STATE_TOKEN\"),O=new r.w(\"FEATURE_STATE_TOKEN\"),D=new r.w(\"NGXS_PLUGINS\"),I=new r.w(\"NG_TEST_MODE\"),P=new r.w(\"NG_DEV_MODE\"),R=\"NGXS_META\",z=\"NGXS_SELECTOR_META\";let j=(()=>{class t{constructor(){this.defaultsState={},this.selectorOptions={injectContainerState:!0,suppressErrors:!0},this.compatibility={strictContentSecurityPolicy:!1},this.executionStrategy=C}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})();class F{constructor(t,e,n){this.previousValue=t,this.currentValue=e,this.firstChange=n}}const N=new r.w(\"NGXS_EXECUTION_STRATEGY\");function B(t){return t.constructor&&t.constructor.type?t.constructor.type:t.type}function Y(t){const e=B(t);return function(t){return e===B(t)}}const H=(t,e,n)=>{t=Object.assign({},t);const r=e.split(\".\"),i=r.length-1;return r.reduce((t,e,r)=>(t[e]=r===i?n:Array.isArray(t[e])?t[e].slice():Object.assign({},t[e]),t&&t[e]),t),t},V=(t,e)=>e.split(\".\").reduce((t,e)=>t&&t[e],t),U=t=>t&&\"object\"==typeof t&&!Array.isArray(t),W=(t,...e)=>{if(!e.length)return t;const n=e.shift();if(U(t)&&U(n))for(const r in n)U(n[r])?(t[r]||Object.assign(t,{[r]:{}}),W(t[r],n[r])):Object.assign(t,{[r]:n[r]});return W(t,...e)};function q(t){if(!t.hasOwnProperty(R)){const e={name:null,actions:{},defaults:{},path:null,makeRootSelector:t=>t.getStateGetter(e.name),children:[]};Object.defineProperty(t,R,{value:e})}return G(t)}function G(t){return t.NGXS_META}function X(t){return t.hasOwnProperty(z)||Object.defineProperty(t,z,{value:{makeRootSelector:null,originalFn:null,containerClass:null,selectorName:null,getSelectorOptions:()=>({})}}),Z(t)}function Z(t){return t.NGXS_SELECTOR_META}function J(t,e){return e&&e.compatibility&&e.compatibility.strictContentSecurityPolicy?function(t){const e=t.slice();return t=>e.reduce((t,e)=>t&&t[e],t)}(t):function(t){const e=t;let n=\"store.\"+e[0],r=0;const i=e.length;let a=n;for(;++r<i;)a=a+\" && \"+(n=n+\".\"+e[r]);return new Function(\"store\",\"return \"+a+\";\")}(t)}function K(t,e){const n=V(e.currentAppState,t.path),r=V(e.newAppState,t.path);return new F(n,r,!t.isInitialised)}function $(...t){return function(t,e,n=Q){const r=t.reduce((t,e)=>(t[B(e)]=!0,t),{}),i=e&&function(t){return t.reduce((t,e)=>(t[e]=!0,t),{})}(e);return function(t){return t.pipe(function(t,e){return Object(m.a)(n=>{const r=B(n.action);return t[r]&&(!e||e[n.status])})}(r,i),n())}}(t,[\"DISPATCHED\"])}function Q(){return Object(g.a)(t=>t.action)}function tt(t){return e=>new o.a(n=>e.subscribe({next(e){t.leave(()=>n.next(e))},error(e){t.leave(()=>n.error(e))},complete(){t.leave(()=>n.complete())}}))}let et=(()=>{class t{constructor(t){this._executionStrategy=t}enter(t){return this._executionStrategy.enter(t)}leave(t){return this._executionStrategy.leave(t)}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(N))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})();class nt extends s.a{constructor(){super(...arguments),this._itemQueue=[],this._busyPushingNext=!1}next(t){if(this._busyPushingNext)this._itemQueue.unshift(t);else{for(this._busyPushingNext=!0,super.next(t);this._itemQueue.length>0;){const t=this._itemQueue.pop();super.next(t)}this._busyPushingNext=!1}}}let rt=(()=>{class t extends nt{}return t.\\u0275fac=function(e){return it(e||t)},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})();const it=r.fc(rt);let at=(()=>{class t extends o.a{constructor(t,e){super(n=>{const r=t.pipe(tt(e)).subscribe({next:t=>n.next(t),error:t=>n.error(t),complete:()=>n.complete()});n.add(r)})}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(rt),r.hc(et))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})();const ot=t=>(...e)=>t.shift()(...e,(...e)=>ot(t)(...e));let st=(()=>{class t extends l.a{constructor(){super({})}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})(),lt=(()=>{class t{constructor(t,e){this._parentManager=t,this._pluginHandlers=e,this.plugins=[],this.registerHandlers()}get rootPlugins(){return this._parentManager&&this._parentManager.plugins||this.plugins}registerHandlers(){const t=this.getPluginHandlers();this.rootPlugins.push(...t)}getPluginHandlers(){return(this._pluginHandlers||[]).map(t=>t.handle?t.handle.bind(t):t)}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(t,12),r.hc(D,8))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})(),ct=(()=>{class t extends s.a{}return t.\\u0275fac=function(e){return ut(e||t)},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})();const ut=r.fc(ct);let ht=(()=>{class t{constructor(t,e,n,r,i,a){this._errorHandler=t,this._actions=e,this._actionResults=n,this._pluginManager=r,this._stateStream=i,this._ngxsExecutionStrategy=a}dispatch(t){const e=this._ngxsExecutionStrategy.enter(()=>this.dispatchByEvents(t));return e.subscribe({error:t=>this._ngxsExecutionStrategy.leave(()=>{try{this._errorHandler.handleError(t)}catch(e){}})}),e.pipe(tt(this._ngxsExecutionStrategy))}dispatchByEvents(t){return Array.isArray(t)?0===t.length?Object(c.a)(this._stateStream.getValue()):Object(u.a)(t.map(t=>this.dispatchSingle(t))):this.dispatchSingle(t)}dispatchSingle(t){if(!B(t)){const e=new Error(\"This action doesn't have a type property: \"+t.constructor.name);return Object(h.a)(e)}const e=this._stateStream.getValue();return ot([...this._pluginManager.plugins,(t,n)=>{t!==e&&this._stateStream.next(t);const r=this.getActionResultStream(n);return r.subscribe(t=>this._actions.next(t)),this._actions.next({action:n,status:\"DISPATCHED\"}),this.createDispatchObservable(r)}])(e,t).pipe(Object(y.a)())}getActionResultStream(t){return this._actionResults.pipe(Object(m.a)(e=>e.action===t&&\"DISPATCHED\"!==e.status),Object(v.a)(1),Object(y.a)())}createDispatchObservable(t){return t.pipe(function t(e,n){return n?r=>r.pipe(t((t,r)=>Object(f.a)(e(t,r)).pipe(Object(g.a)((e,i)=>n(t,e,r,i))))):t=>t.lift(new b(e))}(t=>{switch(t.status){case\"SUCCESSFUL\":return Object(c.a)(this._stateStream.getValue());case\"ERRORED\":return Object(h.a)(t.error);default:return d.a}})).pipe(Object(y.a)())}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(r.r),r.hc(rt),r.hc(ct),r.hc(lt),r.hc(st),r.hc(et))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})();const dt=t=>{Object.freeze(t);const e=\"function\"==typeof t,n=Object.prototype.hasOwnProperty;return Object.getOwnPropertyNames(t).forEach((function(r){!n.call(t,r)||e&&(\"caller\"===r||\"callee\"===r||\"arguments\"===r)||null===t[r]||\"object\"!=typeof t[r]&&\"function\"!=typeof t[r]||Object.isFrozen(t[r])||dt(t[r])})),t};let ft=(()=>{class t{constructor(t,e){this.isDevMode=t,this.isTestMode=e}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(P),r.hc(I))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})(),pt=(()=>{class t{constructor(t,e){this._host=t,this._config=e}get isIncorrectProduction(){return!this._host.isDevMode()&&this._config.developmentMode}get isIncorrectDevelopment(){return this._host.isDevMode()&&!this._config.developmentMode}verifyDevMode(){this._host.isTestMode()||(this.isIncorrectProduction?console.warn(L.INCORRECT_PRODUCTION()):this.isIncorrectDevelopment&&console.warn(L.INCORRECT_DEVELOPMENT()))}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(ft),r.hc(j))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})(),mt=(()=>{class t{constructor(t,e,n,r){this._stateStream=t,this._dispatcher=e,this._config=n,r.verifyDevMode()}getRootStateOperations(){const t={getState:()=>this._stateStream.getValue(),setState:t=>this._stateStream.next(t),dispatch:t=>this._dispatcher.dispatch(t)};return this._config.developmentMode?this.ensureStateAndActionsAreImmutable(t):t}ensureStateAndActionsAreImmutable(t){return{getState:()=>t.getState(),setState:e=>{const n=dt(e);return t.setState(n)},dispatch:e=>t.dispatch(e)}}setStateToTheCurrentWithNew(t){const e=this.getRootStateOperations(),n=e.getState();e.setState(Object.assign({},n,t.defaults))}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(st),r.hc(ht),r.hc(j),r.hc(pt))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})(),gt=(()=>{class t{constructor(t){this._internalStateOperations=t}createStateContext(t){const e=this._internalStateOperations.getRootStateOperations();function n(e){return V(e,t.path)}function r(n,r){const i=H(n,t.path,r),a=t.instance;if(a.ngxsOnChanges){const e=K(t,{currentAppState:n,newAppState:i});a.ngxsOnChanges(e)}return e.setState(i),i}function i(t,e){return r(t,e(n(t)))}return{getState:()=>n(e.getState()),patchState:t=>i(e.getState(),function(t){return e=>{if(Array.isArray(t))throw new Error(L.PATCHING_ARRAY());if(\"object\"!=typeof t)throw new Error(L.PATCHING_PRIMITIVE());const n=Object.assign({},e);for(const r in t)n[r]=t[r];return n}}(t)),setState(t){const n=e.getState();return\"function\"==typeof t?i(n,t):r(n,t)},dispatch:t=>e.dispatch(t)}}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(mt))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})(),yt=(()=>{class t{static stateNameErrorMessage(t){return L.STATE_NAME(t)}static checkCorrectStateName(t){if(!t)throw new Error(L.STATE_NAME_PROPERTY());if(!this.stateNameRegex.test(t))throw new Error(this.stateNameErrorMessage(t))}static checkStateNameIsUnique(t,e){const n=this.getValidStateMeta(t).name,r=e[n];if(r&&r!==t)throw new Error(L.STATE_UNIQUE(n,t.name,r.name));return n}static getValidStateMeta(t){const e=G(t);if(!e)throw new Error(L.STATE_DECORATOR());return e}}return t.stateNameRegex=new RegExp(\"^[a-zA-Z0-9_]+$\"),t})(),vt=(()=>{class t{constructor(t,e,n,r,a,o,s){this._injector=t,this._config=e,this._parentFactory=n,this._actions=r,this._actionResults=a,this._stateContextFactory=o,this._initialState=s,this._actionsSubscription=null,this._states=[],this._statesByName={},this._statePaths={},this.getRuntimeSelectorContext=Object(i.g)(()=>{const t=this;function e(e){const n=t.statePaths[e];return n?J(n.split(\".\"),t._config):null}return this._parentFactory?this._parentFactory.getRuntimeSelectorContext():{getStateGetter(t){let n=e(t);return n||((...r)=>(n||(n=e(t)),n?n(...r):void 0))},getSelectorOptions:e=>Object.assign({},t._config.selectorOptions,e||{})}})}get states(){return this._parentFactory?this._parentFactory.states:this._states}get statesByName(){return this._parentFactory?this._parentFactory.statesByName:this._statesByName}get statePaths(){return this._parentFactory?this._parentFactory.statePaths:this._statePaths}static cloneDefaults(t){let e={};var n;return e=Array.isArray(t)?t.slice():\"object\"==typeof(n=t)&&null!==n||\"function\"==typeof n?Object.assign({},t):void 0===t?{}:t,e}static checkStatesAreValid(t){t.forEach(yt.getValidStateMeta)}ngOnDestroy(){this._actionsSubscription.unsubscribe()}add(e){t.checkStatesAreValid(e);const{newStates:n}=this.addToStatesMap(e);if(!n.length)return[];const r=function(t){const e=e=>{const n=t.find(t=>t===e);if(!n)throw new Error(`Child state not found: ${e}. \\r\\nYou may have forgotten to add states to module`);return n.NGXS_META.name};return t.reduce((t,n)=>{const{name:r,children:i}=n.NGXS_META;return t[r]=(i||[]).map(e),t},{})}(n),i=function(t){const e=[],n={},r=(i,a=[])=>{Array.isArray(a)||(a=[]),a.push(i),n[i]=!0,t[i].forEach(t=>{if(a.indexOf(t)>=0)throw new Error(`Circular dependency '${t}' is required by '${i}': ${a.join(\" -> \")}`);n[t]||r(t,a.slice(0))}),e.indexOf(i)<0&&e.push(i)};return Object.keys(t).forEach(t=>r(t)),e.reverse()}(r),a=function(t,e={}){const n=(t,e)=>{for(const r in t)if(t.hasOwnProperty(r)&&t[r].indexOf(e)>=0){const e=n(t,r);return null!==e?`${e}.${r}`:r}return null};for(const r in t)if(t.hasOwnProperty(r)){const i=n(t,r);e[r]=i?`${i}.${r}`:r}return e}(r),o=n.reduce((t,e)=>(t[e.NGXS_META.name]=e,t),{}),s=[];for(const l of i){const e=o[l],n=a[l],r=e.NGXS_META;this.addRuntimeInfoToMeta(r,n);const i={name:l,path:n,isInitialised:!1,actions:r.actions,instance:this._injector.get(e),defaults:t.cloneDefaults(r.defaults)};this.hasBeenMountedAndBootstrapped(l,n)||s.push(i),this.states.push(i)}return s}addAndReturnDefaults(t){const e=this.add(t||[]);return{defaults:e.reduce((t,e)=>H(t,e.path,e.defaults),{}),states:e}}connectActionHandlers(){null===this._actionsSubscription&&(this._actionsSubscription=this._actions.pipe(Object(m.a)(t=>\"DISPATCHED\"===t.status),Object(w.a)(({action:t})=>this.invokeActions(this._actions,t).pipe(Object(g.a)(()=>({action:t,status:\"SUCCESSFUL\"})),Object(k.a)({action:t,status:\"CANCELED\"}),Object(M.a)(e=>Object(c.a)({action:t,status:\"ERRORED\",error:e}))))).subscribe(t=>this._actionResults.next(t)))}invokeActions(t,e){const n=B(e),r=[];for(const a of this.states){const s=a.actions[n];if(s)for(const n of s){const s=this._stateContextFactory.createStateContext(a);try{let i=a.instance[n.fn](s,e);i instanceof Promise&&(i=Object(f.a)(i)),i instanceof o.a?(i=i.pipe(Object(k.a)({})),n.options.cancelUncompleted&&(i=i.pipe(Object(T.a)(t.pipe($(e)))))):i=Object(c.a)({}).pipe(Object(y.a)()),r.push(i)}catch(i){r.push(Object(h.a)(i))}}}return r.length||r.push(Object(c.a)({})),Object(u.a)(r)}addToStatesMap(t){const e=[],n=this.statesByName;for(const r of t){const t=yt.checkStateNameIsUnique(r,n);!n[t]&&(e.push(r),n[t]=r)}return{newStates:e}}addRuntimeInfoToMeta(t,e){this.statePaths[t.name]=e,t.path=e}hasBeenMountedAndBootstrapped(t,e){const n=void 0!==V(this._initialState,e);return this.statesByName[t]&&n}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(r.x),r.hc(j),r.hc(t,12),r.hc(rt),r.hc(ct),r.hc(gt),r.hc(i.a,8))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})(),_t=(()=>{class t{constructor(t,e,n){this.internalStateOperations=t,this.stateContextFactory=e,this.bootstrapper=n}ngxsBootstrap(t,e){this.internalStateOperations.getRootStateOperations().dispatch(t).pipe(Object(m.a)(()=>!!e),Object(S.a)(()=>this.invokeInit(e.states)),Object(w.a)(()=>this.bootstrapper.appBootstrapped$),Object(m.a)(t=>!!t)).subscribe(()=>this.invokeBootstrap(e.states))}invokeInit(t){for(const e of t){const t=e.instance;if(t.ngxsOnChanges){const n=K(e,{currentAppState:{},newAppState:this.internalStateOperations.getRootStateOperations().getState()});t.ngxsOnChanges(n)}t.ngxsOnInit&&t.ngxsOnInit(this.getStateContext(e)),e.isInitialised=!0}}invokeBootstrap(t){for(const e of t){const t=e.instance;t.ngxsAfterBootstrap&&t.ngxsAfterBootstrap(this.getStateContext(e))}}getStateContext(t){return this.stateContextFactory.createStateContext(t)}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(mt),r.hc(gt),r.hc(i.e))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})();const bt=t=>t&&t.NGXS_SELECTOR_OPTIONS_META||{};function xt(t){const e=Z(t)||G(t);return e&&e.makeRootSelector||(()=>t)}let wt=(()=>{class t{constructor(t,e,n,r,i,a){this._stateStream=t,this._internalStateOperations=e,this._config=n,this._internalExecutionStrategy=r,this._stateFactory=i,this.initStateStream(a)}dispatch(t){return this._internalStateOperations.getRootStateOperations().dispatch(t)}select(t){const e=this.getStoreBoundSelectorFn(t);return this._stateStream.pipe(Object(g.a)(e),Object(M.a)(t=>{const{suppressErrors:e}=this._config.selectorOptions;return t instanceof TypeError&&e?Object(c.a)(void 0):Object(h.a)(t)}),Object(A.a)(),tt(this._internalExecutionStrategy))}selectOnce(t){return this.select(t).pipe(Object(v.a)(1))}selectSnapshot(t){return this.getStoreBoundSelectorFn(t)(this._stateStream.getValue())}subscribe(t){return this._stateStream.pipe(tt(this._internalExecutionStrategy)).subscribe(t)}snapshot(){return this._internalStateOperations.getRootStateOperations().getState()}reset(t){return this._internalStateOperations.getRootStateOperations().setState(t)}getStoreBoundSelectorFn(t){return xt(t)(this._stateFactory.getRuntimeSelectorContext())}initStateStream(t){const e=this._stateStream.value;if(!e||0===Object.keys(e).length){const e=Object.keys(this._config.defaultsState).length>0?Object.assign({},this._config.defaultsState,t):t;this._stateStream.next(e)}}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(st),r.hc(mt),r.hc(j),r.hc(et),r.hc(vt),r.hc(i.a,8))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})(),kt=(()=>{class t{constructor(e,n){t.store=e,t.config=n}ngOnDestroy(){t.store=null,t.config=null}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(wt),r.hc(j))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t.store=null,t.config=null,t})();class Mt{static get type(){return\"@@INIT\"}}class Tt{constructor(t){this.addedStates=t}static get type(){return\"@@UPDATE_STATE\"}}const St=new p.a(1);let At=(()=>{class t{constructor(t,e,n,i,a=[],o){!function(){try{const t=window.ng,e=!(t.probe&&t.coreTokens)&&Object(r.gb)();St.next(e)}catch(t){St.next(!1)}finally{St.complete()}}();const s=t.addAndReturnDefaults(a);e.setStateToTheCurrentWithNew(s),t.connectActionHandlers(),o.ngxsBootstrap(new Mt,s)}}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)(r.hc(vt),r.hc(mt),r.hc(wt),r.hc(kt),r.hc(E,8),r.hc(_t))}}),t})(),Lt=(()=>{class t{constructor(e,n,r,i=[],a){const o=t.flattenStates(i),s=r.addAndReturnDefaults(o);s.states.length&&(n.setStateToTheCurrentWithNew(s),a.ngxsBootstrap(new Tt(s.defaults),s))}static flattenStates(t=[]){return t.reduce((t,e)=>t.concat(e),[])}}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)(r.hc(wt),r.hc(mt),r.hc(vt),r.hc(O,8),r.hc(_t))}}),t})(),Ct=(()=>{class t{static forRoot(e=[],n={}){return{ngModule:At,providers:[vt,gt,at,rt,i.e,pt,ft,_t,ht,ct,mt,et,wt,st,kt,lt,...e,...t.ngxsTokenProviders(e,n)]}}static forFeature(t=[]){return{ngModule:Lt,providers:[vt,lt,...t,{provide:O,multi:!0,useValue:t}]}}static ngxsTokenProviders(e,n){return[{provide:I,useValue:i.f},{provide:P,useValue:r.gb},{provide:N,useClass:n.executionStrategy||C},{provide:E,useValue:e},{provide:t.ROOT_OPTIONS,useValue:n},{provide:j,useFactory:t.ngxsConfigFactory,deps:[t.ROOT_OPTIONS]},{provide:r.b,useFactory:t.appBootstrapListenerFactory,multi:!0,deps:[i.e]},{provide:i.a,useFactory:t.getInitialState},{provide:i.c,useExisting:gt},{provide:i.d,useExisting:vt}]}static ngxsConfigFactory(t){return W(new j,t)}static appBootstrapListenerFactory(t){return()=>t.bootstrap()}static getInitialState(){return i.b.pop()}}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)}}),t.ROOT_OPTIONS=new r.w(\"ROOT_OPTIONS\"),t})();function Et(t,e){return(n,r)=>{if(n.hasOwnProperty(\"prototype\"))throw new Error(L.ACTION_DECORATOR());const i=q(n.constructor);Array.isArray(t)||(t=[t]);for(const a of t){const t=a.type;i.actions[t]||(i.actions[t]=[]),i.actions[t].push({fn:r,options:e||{},type:t})}}}function Ot(t){return e=>{!function(t){St.subscribe(e=>{e&&(t.\\u0275prov||console.warn(L.UNDECORATED_STATE_IN_IVY(t.name)))})}(e);const n=e,r=q(n),i=Object.getPrototypeOf(n),a=function(e){return Object.assign({},e.NGXS_OPTIONS_META||{},t)}(i);!function(t){const{meta:e,inheritedStateClass:n,optionsWithInheritance:r}=t,{children:i,defaults:a,name:o}=r,s=\"string\"==typeof o?o:o&&o.getName()||null;yt.checkCorrectStateName(s),n.hasOwnProperty(R)&&(e.actions=Object.assign({},e.actions,(n.NGXS_META||{}).actions)),e.children=i,e.defaults=a,e.name=s}({meta:r,inheritedStateClass:i,optionsWithInheritance:a}),n.NGXS_OPTIONS_META=a}}function Dt(t,...e){return function(n,r){const i=r.toString(),a=`__${i}__selector`,o=function(t,e,n=[]){return\"string\"==typeof(e=e||function(t){const e=t.length-1;return 36===t.charCodeAt(e)?t.slice(0,e):t}(t))?J(n.length?[e,...n]:e.split(\".\"),kt.config):e}(i,t,e);Object.defineProperties(n,{[a]:{writable:!0,enumerable:!1,configurable:!0},[i]:{enumerable:!0,configurable:!0,get(){return this[a]||(this[a]=function(t){if(!kt.store)throw new Error(L.SELECT_FACTORY_NOT_CONNECTED());return kt.store.select(t)}(o))}}})}}function It(t){return(e,n,r)=>{if(!r||null===r.value)throw new Error(L.SELECTOR_DECORATOR());const a=r.value,o=function(t,e,n){const r=n&&n.containerClass,a=Object(i.g)((function(...t){const n=e.apply(r,t);return n instanceof Function?i.g.apply(null,[n]):n}));Object.setPrototypeOf(a,e);const o=function(t,e){const n=X(t);n.originalFn=t;let r=()=>({});e&&(n.containerClass=e.containerClass,n.selectorName=e.selectorName,r=e.getSelectorOptions||r);const i=Object.assign({},n);return n.getSelectorOptions=()=>function(t,e){return Object.assign({},bt(t.containerClass)||{},bt(t.originalFn)||{},t.getSelectorOptions()||{},e)}(i,r()),n}(e,n);return o.makeRootSelector=e=>{const{argumentSelectorFunctions:n,selectorOptions:r}=function(t,e,n=[]){const r=e.getSelectorOptions(),i=t.getSelectorOptions(r);return{selectorOptions:i,argumentSelectorFunctions:function(t=[],e,n){const r=[];return n&&(0===t.length||e.injectContainerState)&&G(n)&&r.push(n),t&&r.push(...t),r}(n,i,e.containerClass).map(e=>xt(e)(t))}}(e,o,t);return function(t){const e=n.map(e=>e(t));try{return a(...e)}catch(i){if(i instanceof TypeError&&r.suppressErrors)return;throw i}}},a}(t,a,{containerClass:e,selectorName:n.toString(),getSelectorOptions:()=>({})}),s={configurable:!0,get:()=>o};return s.originalFn=a,s}}class Pt{constructor(t){this.name=t,X(this).makeRootSelector=t=>t.getStateGetter(this.name)}getName(){return this.name}toString(){return`StateToken[${this.name}]`}}},AvvY:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"ml\",{months:\"\\u0d1c\\u0d28\\u0d41\\u0d35\\u0d30\\u0d3f_\\u0d2b\\u0d46\\u0d2c\\u0d4d\\u0d30\\u0d41\\u0d35\\u0d30\\u0d3f_\\u0d2e\\u0d3e\\u0d7c\\u0d1a\\u0d4d\\u0d1a\\u0d4d_\\u0d0f\\u0d2a\\u0d4d\\u0d30\\u0d3f\\u0d7d_\\u0d2e\\u0d47\\u0d2f\\u0d4d_\\u0d1c\\u0d42\\u0d7a_\\u0d1c\\u0d42\\u0d32\\u0d48_\\u0d13\\u0d17\\u0d38\\u0d4d\\u0d31\\u0d4d\\u0d31\\u0d4d_\\u0d38\\u0d46\\u0d2a\\u0d4d\\u0d31\\u0d4d\\u0d31\\u0d02\\u0d2c\\u0d7c_\\u0d12\\u0d15\\u0d4d\\u0d1f\\u0d4b\\u0d2c\\u0d7c_\\u0d28\\u0d35\\u0d02\\u0d2c\\u0d7c_\\u0d21\\u0d3f\\u0d38\\u0d02\\u0d2c\\u0d7c\".split(\"_\"),monthsShort:\"\\u0d1c\\u0d28\\u0d41._\\u0d2b\\u0d46\\u0d2c\\u0d4d\\u0d30\\u0d41._\\u0d2e\\u0d3e\\u0d7c._\\u0d0f\\u0d2a\\u0d4d\\u0d30\\u0d3f._\\u0d2e\\u0d47\\u0d2f\\u0d4d_\\u0d1c\\u0d42\\u0d7a_\\u0d1c\\u0d42\\u0d32\\u0d48._\\u0d13\\u0d17._\\u0d38\\u0d46\\u0d2a\\u0d4d\\u0d31\\u0d4d\\u0d31._\\u0d12\\u0d15\\u0d4d\\u0d1f\\u0d4b._\\u0d28\\u0d35\\u0d02._\\u0d21\\u0d3f\\u0d38\\u0d02.\".split(\"_\"),monthsParseExact:!0,weekdays:\"\\u0d1e\\u0d3e\\u0d2f\\u0d31\\u0d3e\\u0d34\\u0d4d\\u0d1a_\\u0d24\\u0d3f\\u0d19\\u0d4d\\u0d15\\u0d33\\u0d3e\\u0d34\\u0d4d\\u0d1a_\\u0d1a\\u0d4a\\u0d35\\u0d4d\\u0d35\\u0d3e\\u0d34\\u0d4d\\u0d1a_\\u0d2c\\u0d41\\u0d27\\u0d28\\u0d3e\\u0d34\\u0d4d\\u0d1a_\\u0d35\\u0d4d\\u0d2f\\u0d3e\\u0d34\\u0d3e\\u0d34\\u0d4d\\u0d1a_\\u0d35\\u0d46\\u0d33\\u0d4d\\u0d33\\u0d3f\\u0d2f\\u0d3e\\u0d34\\u0d4d\\u0d1a_\\u0d36\\u0d28\\u0d3f\\u0d2f\\u0d3e\\u0d34\\u0d4d\\u0d1a\".split(\"_\"),weekdaysShort:\"\\u0d1e\\u0d3e\\u0d2f\\u0d7c_\\u0d24\\u0d3f\\u0d19\\u0d4d\\u0d15\\u0d7e_\\u0d1a\\u0d4a\\u0d35\\u0d4d\\u0d35_\\u0d2c\\u0d41\\u0d27\\u0d7b_\\u0d35\\u0d4d\\u0d2f\\u0d3e\\u0d34\\u0d02_\\u0d35\\u0d46\\u0d33\\u0d4d\\u0d33\\u0d3f_\\u0d36\\u0d28\\u0d3f\".split(\"_\"),weekdaysMin:\"\\u0d1e\\u0d3e_\\u0d24\\u0d3f_\\u0d1a\\u0d4a_\\u0d2c\\u0d41_\\u0d35\\u0d4d\\u0d2f\\u0d3e_\\u0d35\\u0d46_\\u0d36\".split(\"_\"),longDateFormat:{LT:\"A h:mm -\\u0d28\\u0d41\",LTS:\"A h:mm:ss -\\u0d28\\u0d41\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm -\\u0d28\\u0d41\",LLLL:\"dddd, D MMMM YYYY, A h:mm -\\u0d28\\u0d41\"},calendar:{sameDay:\"[\\u0d07\\u0d28\\u0d4d\\u0d28\\u0d4d] LT\",nextDay:\"[\\u0d28\\u0d3e\\u0d33\\u0d46] LT\",nextWeek:\"dddd, LT\",lastDay:\"[\\u0d07\\u0d28\\u0d4d\\u0d28\\u0d32\\u0d46] LT\",lastWeek:\"[\\u0d15\\u0d34\\u0d3f\\u0d1e\\u0d4d\\u0d1e] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s \\u0d15\\u0d34\\u0d3f\\u0d1e\\u0d4d\\u0d1e\\u0d4d\",past:\"%s \\u0d2e\\u0d41\\u0d7b\\u0d2a\\u0d4d\",s:\"\\u0d05\\u0d7d\\u0d2a \\u0d28\\u0d3f\\u0d2e\\u0d3f\\u0d37\\u0d19\\u0d4d\\u0d19\\u0d7e\",ss:\"%d \\u0d38\\u0d46\\u0d15\\u0d4d\\u0d15\\u0d7b\\u0d21\\u0d4d\",m:\"\\u0d12\\u0d30\\u0d41 \\u0d2e\\u0d3f\\u0d28\\u0d3f\\u0d31\\u0d4d\\u0d31\\u0d4d\",mm:\"%d \\u0d2e\\u0d3f\\u0d28\\u0d3f\\u0d31\\u0d4d\\u0d31\\u0d4d\",h:\"\\u0d12\\u0d30\\u0d41 \\u0d2e\\u0d23\\u0d3f\\u0d15\\u0d4d\\u0d15\\u0d42\\u0d7c\",hh:\"%d \\u0d2e\\u0d23\\u0d3f\\u0d15\\u0d4d\\u0d15\\u0d42\\u0d7c\",d:\"\\u0d12\\u0d30\\u0d41 \\u0d26\\u0d3f\\u0d35\\u0d38\\u0d02\",dd:\"%d \\u0d26\\u0d3f\\u0d35\\u0d38\\u0d02\",M:\"\\u0d12\\u0d30\\u0d41 \\u0d2e\\u0d3e\\u0d38\\u0d02\",MM:\"%d \\u0d2e\\u0d3e\\u0d38\\u0d02\",y:\"\\u0d12\\u0d30\\u0d41 \\u0d35\\u0d7c\\u0d37\\u0d02\",yy:\"%d \\u0d35\\u0d7c\\u0d37\\u0d02\"},meridiemParse:/\\u0d30\\u0d3e\\u0d24\\u0d4d\\u0d30\\u0d3f|\\u0d30\\u0d3e\\u0d35\\u0d3f\\u0d32\\u0d46|\\u0d09\\u0d1a\\u0d4d\\u0d1a \\u0d15\\u0d34\\u0d3f\\u0d1e\\u0d4d\\u0d1e\\u0d4d|\\u0d35\\u0d48\\u0d15\\u0d41\\u0d28\\u0d4d\\u0d28\\u0d47\\u0d30\\u0d02|\\u0d30\\u0d3e\\u0d24\\u0d4d\\u0d30\\u0d3f/i,meridiemHour:function(t,e){return 12===t&&(t=0),\"\\u0d30\\u0d3e\\u0d24\\u0d4d\\u0d30\\u0d3f\"===e&&t>=4||\"\\u0d09\\u0d1a\\u0d4d\\u0d1a \\u0d15\\u0d34\\u0d3f\\u0d1e\\u0d4d\\u0d1e\\u0d4d\"===e||\"\\u0d35\\u0d48\\u0d15\\u0d41\\u0d28\\u0d4d\\u0d28\\u0d47\\u0d30\\u0d02\"===e?t+12:t},meridiem:function(t,e,n){return t<4?\"\\u0d30\\u0d3e\\u0d24\\u0d4d\\u0d30\\u0d3f\":t<12?\"\\u0d30\\u0d3e\\u0d35\\u0d3f\\u0d32\\u0d46\":t<17?\"\\u0d09\\u0d1a\\u0d4d\\u0d1a \\u0d15\\u0d34\\u0d3f\\u0d1e\\u0d4d\\u0d1e\\u0d4d\":t<20?\"\\u0d35\\u0d48\\u0d15\\u0d41\\u0d28\\u0d4d\\u0d28\\u0d47\\u0d30\\u0d02\":\"\\u0d30\\u0d3e\\u0d24\\u0d4d\\u0d30\\u0d3f\"}})}(n(\"wd/R\"))},AytR:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return r}));const r={production:!0,apiUrl:\"/api\",version:\"2.0\"}},\"B/XX\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return w})),n.d(e,\"b\",(function(){return m})),n.d(e,\"c\",(function(){return g})),n.d(e,\"d\",(function(){return k})),n.d(e,\"e\",(function(){return S})),n.d(e,\"f\",(function(){return M})),n.d(e,\"g\",(function(){return T})),n.d(e,\"h\",(function(){return x}));var r=n(\"u47x\"),i=n(\"cH1L\"),a=n(\"8LU1\"),o=n(\"FtGj\"),s=n(\"ofXK\"),l=n(\"fXoL\"),c=n(\"XNiG\"),u=n(\"LRne\"),h=n(\"JX91\"),d=n(\"1G5W\");function f(t,e){1&t&&l.tc(0)}const p=[\"*\"];let m=(()=>{class t{constructor(t){this._elementRef=t}focus(){this._elementRef.nativeElement.focus()}}return t.\\u0275fac=function(e){return new(e||t)(l.Xb(l.p))},t.\\u0275dir=l.Sb({type:t,selectors:[[\"\",\"cdkStepHeader\",\"\"]],hostAttrs:[\"role\",\"tab\"]}),t})(),g=(()=>{class t{constructor(t){this.template=t}}return t.\\u0275fac=function(e){return new(e||t)(l.Xb(l.V))},t.\\u0275dir=l.Sb({type:t,selectors:[[\"\",\"cdkStepLabel\",\"\"]]}),t})(),y=0;const v=\"edit\",_=\"done\",b=\"error\",x=new l.w(\"STEPPER_GLOBAL_OPTIONS\");let w=(()=>{class t{constructor(t,e){this._stepper=t,this.interacted=!1,this._editable=!0,this._optional=!1,this._completedOverride=null,this._customError=null,this._stepperOptions=e||{},this._displayDefaultIndicatorType=!1!==this._stepperOptions.displayDefaultIndicatorType,this._showError=!!this._stepperOptions.showError}get editable(){return this._editable}set editable(t){this._editable=Object(a.c)(t)}get optional(){return this._optional}set optional(t){this._optional=Object(a.c)(t)}get completed(){return null==this._completedOverride?this._getDefaultCompleted():this._completedOverride}set completed(t){this._completedOverride=Object(a.c)(t)}_getDefaultCompleted(){return this.stepControl?this.stepControl.valid&&this.interacted:this.interacted}get hasError(){return null==this._customError?this._getDefaultError():this._customError}set hasError(t){this._customError=Object(a.c)(t)}_getDefaultError(){return this.stepControl&&this.stepControl.invalid&&this.interacted}select(){this._stepper.selected=this}reset(){this.interacted=!1,null!=this._completedOverride&&(this._completedOverride=!1),null!=this._customError&&(this._customError=!1),this.stepControl&&this.stepControl.reset()}ngOnChanges(){this._stepper._stateChanged()}}return t.\\u0275fac=function(e){return new(e||t)(l.Xb(Object(l.db)(()=>k)),l.Xb(x,8))},t.\\u0275cmp=l.Rb({type:t,selectors:[[\"cdk-step\"]],contentQueries:function(t,e,n){if(1&t&&l.Qb(n,g,!0),2&t){let t;l.Ac(t=l.mc())&&(e.stepLabel=t.first)}},viewQuery:function(t,e){if(1&t&&l.Ic(l.V,!0),2&t){let t;l.Ac(t=l.mc())&&(e.content=t.first)}},inputs:{editable:\"editable\",optional:\"optional\",completed:\"completed\",hasError:\"hasError\",stepControl:\"stepControl\",label:\"label\",errorMessage:\"errorMessage\",ariaLabel:[\"aria-label\",\"ariaLabel\"],ariaLabelledby:[\"aria-labelledby\",\"ariaLabelledby\"],state:\"state\"},exportAs:[\"cdkStep\"],features:[l.Jb],ngContentSelectors:p,decls:1,vars:0,template:function(t,e){1&t&&(l.uc(),l.Mc(0,f,1,0,\"ng-template\"))},encapsulation:2,changeDetection:0}),t})(),k=(()=>{class t{constructor(t,e,n,r){this._dir=t,this._changeDetectorRef=e,this._elementRef=n,this._destroyed=new c.a,this.steps=new l.N,this._linear=!1,this._selectedIndex=0,this.selectionChange=new l.s,this._orientation=\"horizontal\",this._groupId=y++,this._document=r}get linear(){return this._linear}set linear(t){this._linear=Object(a.c)(t)}get selectedIndex(){return this._selectedIndex}set selectedIndex(t){const e=Object(a.f)(t);this.steps&&this._steps?(this._isValidIndex(t),this._selectedIndex!==e&&!this._anyControlsInvalidOrPending(e)&&(e>=this._selectedIndex||this.steps.toArray()[e].editable)&&this._updateSelectedItemIndex(t)):this._selectedIndex=e}get selected(){return this.steps?this.steps.toArray()[this.selectedIndex]:void 0}set selected(t){this.selectedIndex=this.steps?this.steps.toArray().indexOf(t):-1}ngAfterContentInit(){this._steps.changes.pipe(Object(h.a)(this._steps),Object(d.a)(this._destroyed)).subscribe(t=>{this.steps.reset(t.filter(t=>t._stepper===this)),this.steps.notifyOnChanges()})}ngAfterViewInit(){this._keyManager=new r.g(this._stepHeader).withWrap().withHomeAndEnd().withVerticalOrientation(\"vertical\"===this._orientation),(this._dir?this._dir.change:Object(u.a)()).pipe(Object(h.a)(this._layoutDirection()),Object(d.a)(this._destroyed)).subscribe(t=>this._keyManager.withHorizontalOrientation(t)),this._keyManager.updateActiveItem(this._selectedIndex),this.steps.changes.subscribe(()=>{this.selected||(this._selectedIndex=Math.max(this._selectedIndex-1,0))}),this._isValidIndex(this._selectedIndex)||(this._selectedIndex=0)}ngOnDestroy(){this.steps.destroy(),this._destroyed.next(),this._destroyed.complete()}next(){this.selectedIndex=Math.min(this._selectedIndex+1,this.steps.length-1)}previous(){this.selectedIndex=Math.max(this._selectedIndex-1,0)}reset(){this._updateSelectedItemIndex(0),this.steps.forEach(t=>t.reset()),this._stateChanged()}_getStepLabelId(t){return`cdk-step-label-${this._groupId}-${t}`}_getStepContentId(t){return`cdk-step-content-${this._groupId}-${t}`}_stateChanged(){this._changeDetectorRef.markForCheck()}_getAnimationDirection(t){const e=t-this._selectedIndex;return e<0?\"rtl\"===this._layoutDirection()?\"next\":\"previous\":e>0?\"rtl\"===this._layoutDirection()?\"previous\":\"next\":\"current\"}_getIndicatorType(t,e=\"number\"){const n=this.steps.toArray()[t],r=this._isCurrentStep(t);return n._displayDefaultIndicatorType?this._getDefaultIndicatorLogic(n,r):this._getGuidelineLogic(n,r,e)}_getDefaultIndicatorLogic(t,e){return t._showError&&t.hasError&&!e?b:!t.completed||e?\"number\":t.editable?v:_}_getGuidelineLogic(t,e,n=\"number\"){return t._showError&&t.hasError&&!e?b:t.completed&&!e?_:t.completed&&e?n:t.editable&&e?v:n}_isCurrentStep(t){return this._selectedIndex===t}_getFocusIndex(){return this._keyManager?this._keyManager.activeItemIndex:this._selectedIndex}_updateSelectedItemIndex(t){const e=this.steps.toArray();this.selectionChange.emit({selectedIndex:t,previouslySelectedIndex:this._selectedIndex,selectedStep:e[t],previouslySelectedStep:e[this._selectedIndex]}),this._containsFocus()?this._keyManager.setActiveItem(t):this._keyManager.updateActiveItem(t),this._selectedIndex=t,this._stateChanged()}_onKeydown(t){const e=Object(o.r)(t),n=t.keyCode,r=this._keyManager;null==r.activeItemIndex||e||n!==o.m&&n!==o.e?r.onKeydown(t):(this.selectedIndex=r.activeItemIndex,t.preventDefault())}_anyControlsInvalidOrPending(t){const e=this.steps.toArray();return e[this._selectedIndex].interacted=!0,!!(this._linear&&t>=0)&&e.slice(0,t).some(t=>{const e=t.stepControl;return(e?e.invalid||e.pending||!t.interacted:!t.completed)&&!t.optional&&!t._completedOverride})}_layoutDirection(){return this._dir&&\"rtl\"===this._dir.value?\"rtl\":\"ltr\"}_containsFocus(){if(!this._document||!this._elementRef)return!1;const t=this._elementRef.nativeElement,e=this._document.activeElement;return t===e||t.contains(e)}_isValidIndex(t){return t>-1&&(!this.steps||t<this.steps.length)}}return t.\\u0275fac=function(e){return new(e||t)(l.Xb(i.b,8),l.Xb(l.j),l.Xb(l.p),l.Xb(s.d))},t.\\u0275dir=l.Sb({type:t,selectors:[[\"\",\"cdkStepper\",\"\"]],contentQueries:function(t,e,n){if(1&t&&(l.Qb(n,w,!0),l.Qb(n,m,!0)),2&t){let t;l.Ac(t=l.mc())&&(e._steps=t),l.Ac(t=l.mc())&&(e._stepHeader=t)}},inputs:{linear:\"linear\",selectedIndex:\"selectedIndex\",selected:\"selected\"},outputs:{selectionChange:\"selectionChange\"},exportAs:[\"cdkStepper\"]}),t})(),M=(()=>{class t{constructor(t){this._stepper=t,this.type=\"submit\"}_handleClick(){this._stepper.next()}}return t.\\u0275fac=function(e){return new(e||t)(l.Xb(k))},t.\\u0275dir=l.Sb({type:t,selectors:[[\"button\",\"cdkStepperNext\",\"\"]],hostVars:1,hostBindings:function(t,e){1&t&&l.lc(\"click\",(function(){return e._handleClick()})),2&t&&l.gc(\"type\",e.type)},inputs:{type:\"type\"}}),t})(),T=(()=>{class t{constructor(t){this._stepper=t,this.type=\"button\"}_handleClick(){this._stepper.previous()}}return t.\\u0275fac=function(e){return new(e||t)(l.Xb(k))},t.\\u0275dir=l.Sb({type:t,selectors:[[\"button\",\"cdkStepperPrevious\",\"\"]],hostVars:1,hostBindings:function(t,e){1&t&&l.lc(\"click\",(function(){return e._handleClick()})),2&t&&l.gc(\"type\",e.type)},inputs:{type:\"type\"}}),t})(),S=(()=>{class t{}return t.\\u0275mod=l.Vb({type:t}),t.\\u0275inj=l.Ub({factory:function(e){return new(e||t)},imports:[[i.a]]}),t})()},B55N:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"ja\",{eras:[{since:\"2019-05-01\",offset:1,name:\"\\u4ee4\\u548c\",narrow:\"\\u32ff\",abbr:\"R\"},{since:\"1989-01-08\",until:\"2019-04-30\",offset:1,name:\"\\u5e73\\u6210\",narrow:\"\\u337b\",abbr:\"H\"},{since:\"1926-12-25\",until:\"1989-01-07\",offset:1,name:\"\\u662d\\u548c\",narrow:\"\\u337c\",abbr:\"S\"},{since:\"1912-07-30\",until:\"1926-12-24\",offset:1,name:\"\\u5927\\u6b63\",narrow:\"\\u337d\",abbr:\"T\"},{since:\"1873-01-01\",until:\"1912-07-29\",offset:6,name:\"\\u660e\\u6cbb\",narrow:\"\\u337e\",abbr:\"M\"},{since:\"0001-01-01\",until:\"1873-12-31\",offset:1,name:\"\\u897f\\u66a6\",narrow:\"AD\",abbr:\"AD\"},{since:\"0000-12-31\",until:-1/0,offset:1,name:\"\\u7d00\\u5143\\u524d\",narrow:\"BC\",abbr:\"BC\"}],eraYearOrdinalRegex:/(\\u5143|\\d+)\\u5e74/,eraYearOrdinalParse:function(t,e){return\"\\u5143\"===e[1]?1:parseInt(e[1]||t,10)},months:\"1\\u6708_2\\u6708_3\\u6708_4\\u6708_5\\u6708_6\\u6708_7\\u6708_8\\u6708_9\\u6708_10\\u6708_11\\u6708_12\\u6708\".split(\"_\"),monthsShort:\"1\\u6708_2\\u6708_3\\u6708_4\\u6708_5\\u6708_6\\u6708_7\\u6708_8\\u6708_9\\u6708_10\\u6708_11\\u6708_12\\u6708\".split(\"_\"),weekdays:\"\\u65e5\\u66dc\\u65e5_\\u6708\\u66dc\\u65e5_\\u706b\\u66dc\\u65e5_\\u6c34\\u66dc\\u65e5_\\u6728\\u66dc\\u65e5_\\u91d1\\u66dc\\u65e5_\\u571f\\u66dc\\u65e5\".split(\"_\"),weekdaysShort:\"\\u65e5_\\u6708_\\u706b_\\u6c34_\\u6728_\\u91d1_\\u571f\".split(\"_\"),weekdaysMin:\"\\u65e5_\\u6708_\\u706b_\\u6c34_\\u6728_\\u91d1_\\u571f\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY\\u5e74M\\u6708D\\u65e5\",LLL:\"YYYY\\u5e74M\\u6708D\\u65e5 HH:mm\",LLLL:\"YYYY\\u5e74M\\u6708D\\u65e5 dddd HH:mm\",l:\"YYYY/MM/DD\",ll:\"YYYY\\u5e74M\\u6708D\\u65e5\",lll:\"YYYY\\u5e74M\\u6708D\\u65e5 HH:mm\",llll:\"YYYY\\u5e74M\\u6708D\\u65e5(ddd) HH:mm\"},meridiemParse:/\\u5348\\u524d|\\u5348\\u5f8c/i,isPM:function(t){return\"\\u5348\\u5f8c\"===t},meridiem:function(t,e,n){return t<12?\"\\u5348\\u524d\":\"\\u5348\\u5f8c\"},calendar:{sameDay:\"[\\u4eca\\u65e5] LT\",nextDay:\"[\\u660e\\u65e5] LT\",nextWeek:function(t){return t.week()!==this.week()?\"[\\u6765\\u9031]dddd LT\":\"dddd LT\"},lastDay:\"[\\u6628\\u65e5] LT\",lastWeek:function(t){return this.week()!==t.week()?\"[\\u5148\\u9031]dddd LT\":\"dddd LT\"},sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}\\u65e5/,ordinal:function(t,e){switch(e){case\"y\":return 1===t?\"\\u5143\\u5e74\":t+\"\\u5e74\";case\"d\":case\"D\":case\"DDD\":return t+\"\\u65e5\";default:return t}},relativeTime:{future:\"%s\\u5f8c\",past:\"%s\\u524d\",s:\"\\u6570\\u79d2\",ss:\"%d\\u79d2\",m:\"1\\u5206\",mm:\"%d\\u5206\",h:\"1\\u6642\\u9593\",hh:\"%d\\u6642\\u9593\",d:\"1\\u65e5\",dd:\"%d\\u65e5\",M:\"1\\u30f6\\u6708\",MM:\"%d\\u30f6\\u6708\",y:\"1\\u5e74\",yy:\"%d\\u5e74\"}})}(n(\"wd/R\"))},BHZs:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));var r=n(\"fXoL\");let i=(()=>{class t{transform(t){return null==t?\"no valid score so far...\":Number.isInteger(+t)?+t:Math.round(1e4*(+t+Number.EPSILON))/1e4}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275pipe=r.Wb({name:\"roundNumber\",type:t,pure:!0}),t})()},BVg3:function(t,e,n){!function(t){\"use strict\";function e(t){return t%100==11||t%10!=1}function n(t,n,r,i){var a=t+\" \";switch(r){case\"s\":return n||i?\"nokkrar sek\\xfandur\":\"nokkrum sek\\xfandum\";case\"ss\":return e(t)?a+(n||i?\"sek\\xfandur\":\"sek\\xfandum\"):a+\"sek\\xfanda\";case\"m\":return n?\"m\\xedn\\xfata\":\"m\\xedn\\xfatu\";case\"mm\":return e(t)?a+(n||i?\"m\\xedn\\xfatur\":\"m\\xedn\\xfatum\"):n?a+\"m\\xedn\\xfata\":a+\"m\\xedn\\xfatu\";case\"hh\":return e(t)?a+(n||i?\"klukkustundir\":\"klukkustundum\"):a+\"klukkustund\";case\"d\":return n?\"dagur\":i?\"dag\":\"degi\";case\"dd\":return e(t)?n?a+\"dagar\":a+(i?\"daga\":\"d\\xf6gum\"):n?a+\"dagur\":a+(i?\"dag\":\"degi\");case\"M\":return n?\"m\\xe1nu\\xf0ur\":i?\"m\\xe1nu\\xf0\":\"m\\xe1nu\\xf0i\";case\"MM\":return e(t)?n?a+\"m\\xe1nu\\xf0ir\":a+(i?\"m\\xe1nu\\xf0i\":\"m\\xe1nu\\xf0um\"):n?a+\"m\\xe1nu\\xf0ur\":a+(i?\"m\\xe1nu\\xf0\":\"m\\xe1nu\\xf0i\");case\"y\":return n||i?\"\\xe1r\":\"\\xe1ri\";case\"yy\":return e(t)?a+(n||i?\"\\xe1r\":\"\\xe1rum\"):a+(n||i?\"\\xe1r\":\"\\xe1ri\")}}t.defineLocale(\"is\",{months:\"jan\\xfaar_febr\\xfaar_mars_apr\\xedl_ma\\xed_j\\xfan\\xed_j\\xfal\\xed_\\xe1g\\xfast_september_okt\\xf3ber_n\\xf3vember_desember\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_ma\\xed_j\\xfan_j\\xfal_\\xe1g\\xfa_sep_okt_n\\xf3v_des\".split(\"_\"),weekdays:\"sunnudagur_m\\xe1nudagur_\\xferi\\xf0judagur_mi\\xf0vikudagur_fimmtudagur_f\\xf6studagur_laugardagur\".split(\"_\"),weekdaysShort:\"sun_m\\xe1n_\\xferi_mi\\xf0_fim_f\\xf6s_lau\".split(\"_\"),weekdaysMin:\"Su_M\\xe1_\\xder_Mi_Fi_F\\xf6_La\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY [kl.] H:mm\",LLLL:\"dddd, D. MMMM YYYY [kl.] H:mm\"},calendar:{sameDay:\"[\\xed dag kl.] LT\",nextDay:\"[\\xe1 morgun kl.] LT\",nextWeek:\"dddd [kl.] LT\",lastDay:\"[\\xed g\\xe6r kl.] LT\",lastWeek:\"[s\\xed\\xf0asta] dddd [kl.] LT\",sameElse:\"L\"},relativeTime:{future:\"eftir %s\",past:\"fyrir %s s\\xed\\xf0an\",s:n,ss:n,m:n,mm:n,h:\"klukkustund\",hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},ByF4:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"fo\",{months:\"januar_februar_mars_apr\\xedl_mai_juni_juli_august_september_oktober_november_desember\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des\".split(\"_\"),weekdays:\"sunnudagur_m\\xe1nadagur_t\\xfdsdagur_mikudagur_h\\xf3sdagur_fr\\xedggjadagur_leygardagur\".split(\"_\"),weekdaysShort:\"sun_m\\xe1n_t\\xfds_mik_h\\xf3s_fr\\xed_ley\".split(\"_\"),weekdaysMin:\"su_m\\xe1_t\\xfd_mi_h\\xf3_fr_le\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D. MMMM, YYYY HH:mm\"},calendar:{sameDay:\"[\\xcd dag kl.] LT\",nextDay:\"[\\xcd morgin kl.] LT\",nextWeek:\"dddd [kl.] LT\",lastDay:\"[\\xcd gj\\xe1r kl.] LT\",lastWeek:\"[s\\xed\\xf0stu] dddd [kl] LT\",sameElse:\"L\"},relativeTime:{future:\"um %s\",past:\"%s s\\xed\\xf0ani\",s:\"f\\xe1 sekund\",ss:\"%d sekundir\",m:\"ein minuttur\",mm:\"%d minuttir\",h:\"ein t\\xedmi\",hh:\"%d t\\xedmar\",d:\"ein dagur\",dd:\"%d dagar\",M:\"ein m\\xe1na\\xf0ur\",MM:\"%d m\\xe1na\\xf0ir\",y:\"eitt \\xe1r\",yy:\"%d \\xe1r\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},Bzzc:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));var r=n(\"fXoL\");let i=(()=>{class t{transform(t){return-1===t.startTime&&-1===t.endTime?\"Stopping...\":t.startTime&&t.endTime&&-1!==t.startTime&&-1!==t.endTime?\"Finished\":t.startTime&&-1!==t.startTime&&!t.endTime?\"Running\":t.startTime||t.endTime?void 0:\"Not started\"}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275pipe=r.Wb({name:\"experimentStatus\",type:t,pure:!0}),t})()},Cfvw:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return h}));var r=n(\"HDdC\"),i=n(\"SeVD\"),a=n(\"quSY\"),o=n(\"kJWO\"),s=n(\"jZKg\"),l=n(\"Lhse\"),c=n(\"c2HN\"),u=n(\"I55L\");function h(t,e){return e?function(t,e){if(null!=t){if(function(t){return t&&\"function\"==typeof t[o.a]}(t))return function(t,e){return new r.a(n=>{const r=new a.a;return r.add(e.schedule(()=>{const i=t[o.a]();r.add(i.subscribe({next(t){r.add(e.schedule(()=>n.next(t)))},error(t){r.add(e.schedule(()=>n.error(t)))},complete(){r.add(e.schedule(()=>n.complete()))}}))})),r})}(t,e);if(Object(c.a)(t))return function(t,e){return new r.a(n=>{const r=new a.a;return r.add(e.schedule(()=>t.then(t=>{r.add(e.schedule(()=>{n.next(t),r.add(e.schedule(()=>n.complete()))}))},t=>{r.add(e.schedule(()=>n.error(t)))}))),r})}(t,e);if(Object(u.a)(t))return Object(s.a)(t,e);if(function(t){return t&&\"function\"==typeof t[l.a]}(t)||\"string\"==typeof t)return function(t,e){if(!t)throw new Error(\"Iterable cannot be null\");return new r.a(n=>{const r=new a.a;let i;return r.add(()=>{i&&\"function\"==typeof i.return&&i.return()}),r.add(e.schedule(()=>{i=t[l.a](),r.add(e.schedule((function(){if(n.closed)return;let t,e;try{const n=i.next();t=n.value,e=n.done}catch(r){return void n.error(r)}e?n.complete():(n.next(t),this.schedule())})))})),r})}(t,e)}throw new TypeError((null!==t&&typeof t||t)+\" is not observable\")}(t,e):t instanceof r.a?t:new r.a(Object(i.a)(t))}},CjzT:function(t,e,n){!function(t){\"use strict\";var e=\"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\".split(\"_\"),n=\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],i=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;t.defineLocale(\"es-do\",{months:\"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\".split(\"_\"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:\"domingo_lunes_martes_mi\\xe9rcoles_jueves_viernes_s\\xe1bado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._mi\\xe9._jue._vie._s\\xe1b.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_s\\xe1\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY h:mm A\",LLLL:\"dddd, D [de] MMMM [de] YYYY h:mm A\"},calendar:{sameDay:function(){return\"[hoy a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextDay:function(){return\"[ma\\xf1ana a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextWeek:function(){return\"dddd [a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastDay:function(){return\"[ayer a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [pasado a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"en %s\",past:\"hace %s\",s:\"unos segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"una hora\",hh:\"%d horas\",d:\"un d\\xeda\",dd:\"%d d\\xedas\",w:\"una semana\",ww:\"%d semanas\",M:\"un mes\",MM:\"%d meses\",y:\"un a\\xf1o\",yy:\"%d a\\xf1os\"},dayOfMonthOrdinalParse:/\\d{1,2}\\xba/,ordinal:\"%d\\xba\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},CoRJ:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"ar-ma\",{months:\"\\u064a\\u0646\\u0627\\u064a\\u0631_\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631_\\u0645\\u0627\\u0631\\u0633_\\u0623\\u0628\\u0631\\u064a\\u0644_\\u0645\\u0627\\u064a_\\u064a\\u0648\\u0646\\u064a\\u0648_\\u064a\\u0648\\u0644\\u064a\\u0648\\u0632_\\u063a\\u0634\\u062a_\\u0634\\u062a\\u0646\\u0628\\u0631_\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631_\\u0646\\u0648\\u0646\\u0628\\u0631_\\u062f\\u062c\\u0646\\u0628\\u0631\".split(\"_\"),monthsShort:\"\\u064a\\u0646\\u0627\\u064a\\u0631_\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631_\\u0645\\u0627\\u0631\\u0633_\\u0623\\u0628\\u0631\\u064a\\u0644_\\u0645\\u0627\\u064a_\\u064a\\u0648\\u0646\\u064a\\u0648_\\u064a\\u0648\\u0644\\u064a\\u0648\\u0632_\\u063a\\u0634\\u062a_\\u0634\\u062a\\u0646\\u0628\\u0631_\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631_\\u0646\\u0648\\u0646\\u0628\\u0631_\\u062f\\u062c\\u0646\\u0628\\u0631\".split(\"_\"),weekdays:\"\\u0627\\u0644\\u0623\\u062d\\u062f_\\u0627\\u0644\\u0625\\u062b\\u0646\\u064a\\u0646_\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621_\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621_\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633_\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629_\\u0627\\u0644\\u0633\\u0628\\u062a\".split(\"_\"),weekdaysShort:\"\\u0627\\u062d\\u062f_\\u0627\\u062b\\u0646\\u064a\\u0646_\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621_\\u0627\\u0631\\u0628\\u0639\\u0627\\u0621_\\u062e\\u0645\\u064a\\u0633_\\u062c\\u0645\\u0639\\u0629_\\u0633\\u0628\\u062a\".split(\"_\"),weekdaysMin:\"\\u062d_\\u0646_\\u062b_\\u0631_\\u062e_\\u062c_\\u0633\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[\\u0627\\u0644\\u064a\\u0648\\u0645 \\u0639\\u0644\\u0649 \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",nextDay:\"[\\u063a\\u062f\\u0627 \\u0639\\u0644\\u0649 \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",nextWeek:\"dddd [\\u0639\\u0644\\u0649 \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",lastDay:\"[\\u0623\\u0645\\u0633 \\u0639\\u0644\\u0649 \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",lastWeek:\"dddd [\\u0639\\u0644\\u0649 \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",sameElse:\"L\"},relativeTime:{future:\"\\u0641\\u064a %s\",past:\"\\u0645\\u0646\\u0630 %s\",s:\"\\u062b\\u0648\\u0627\\u0646\",ss:\"%d \\u062b\\u0627\\u0646\\u064a\\u0629\",m:\"\\u062f\\u0642\\u064a\\u0642\\u0629\",mm:\"%d \\u062f\\u0642\\u0627\\u0626\\u0642\",h:\"\\u0633\\u0627\\u0639\\u0629\",hh:\"%d \\u0633\\u0627\\u0639\\u0627\\u062a\",d:\"\\u064a\\u0648\\u0645\",dd:\"%d \\u0623\\u064a\\u0627\\u0645\",M:\"\\u0634\\u0647\\u0631\",MM:\"%d \\u0623\\u0634\\u0647\\u0631\",y:\"\\u0633\\u0646\\u0629\",yy:\"%d \\u0633\\u0646\\u0648\\u0627\\u062a\"},week:{dow:1,doy:4}})}(n(\"wd/R\"))},\"D/JM\":function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"eu\",{months:\"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua\".split(\"_\"),monthsShort:\"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.\".split(\"_\"),monthsParseExact:!0,weekdays:\"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata\".split(\"_\"),weekdaysShort:\"ig._al._ar._az._og._ol._lr.\".split(\"_\"),weekdaysMin:\"ig_al_ar_az_og_ol_lr\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"YYYY[ko] MMMM[ren] D[a]\",LLL:\"YYYY[ko] MMMM[ren] D[a] HH:mm\",LLLL:\"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm\",l:\"YYYY-M-D\",ll:\"YYYY[ko] MMM D[a]\",lll:\"YYYY[ko] MMM D[a] HH:mm\",llll:\"ddd, YYYY[ko] MMM D[a] HH:mm\"},calendar:{sameDay:\"[gaur] LT[etan]\",nextDay:\"[bihar] LT[etan]\",nextWeek:\"dddd LT[etan]\",lastDay:\"[atzo] LT[etan]\",lastWeek:\"[aurreko] dddd LT[etan]\",sameElse:\"L\"},relativeTime:{future:\"%s barru\",past:\"duela %s\",s:\"segundo batzuk\",ss:\"%d segundo\",m:\"minutu bat\",mm:\"%d minutu\",h:\"ordu bat\",hh:\"%d ordu\",d:\"egun bat\",dd:\"%d egun\",M:\"hilabete bat\",MM:\"%d hilabete\",y:\"urte bat\",yy:\"%d urte\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(n(\"wd/R\"))},D0XW:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));var r=n(\"3N8a\");const i=new(n(\"IjjT\").a)(r.a)},DH7j:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return r}));const r=(()=>Array.isArray||(t=>t&&\"number\"==typeof t.length))()},DHDI:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return a}));var r=n(\"dNgK\"),i=n(\"fXoL\");let a=(()=>{class t{constructor(t,e){this.snackBar=t,this.zone=e,this.initConfig()}initConfig(){this.config=new r.b,this.config.verticalPosition=\"top\",this.config.horizontalPosition=\"center\",this.config.duration=4e3}getConfig(t){return this.config.panelClass=t?[t]:void 0,this.config}openSnackBar(t,e,n){const r=this.getConfig(n);this.zone.run(()=>{this.snackBar.open(t,e,r)})}error(t,e){this.openSnackBar(t,e,\"text-error\")}success(t,e){this.openSnackBar(t,e,\"text-success\")}warning(t,e){this.openSnackBar(t,e,\"text-warn\")}info(t,e){this.openSnackBar(t,e,\"text-info\")}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(r.a),i.hc(i.H))},t.\\u0275prov=i.Tb({token:t,factory:t.\\u0275fac,providedIn:\"root\"}),t})()},\"DKr+\":function(t,e,n){!function(t){\"use strict\";function e(t,e,n,r){var i={s:[\"thoddea sekondamni\",\"thodde sekond\"],ss:[t+\" sekondamni\",t+\" sekond\"],m:[\"eka mintan\",\"ek minut\"],mm:[t+\" mintamni\",t+\" mintam\"],h:[\"eka voran\",\"ek vor\"],hh:[t+\" voramni\",t+\" voram\"],d:[\"eka disan\",\"ek dis\"],dd:[t+\" disamni\",t+\" dis\"],M:[\"eka mhoinean\",\"ek mhoino\"],MM:[t+\" mhoineamni\",t+\" mhoine\"],y:[\"eka vorsan\",\"ek voros\"],yy:[t+\" vorsamni\",t+\" vorsam\"]};return r?i[n][0]:i[n][1]}t.defineLocale(\"gom-latn\",{months:{standalone:\"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr\".split(\"_\"),format:\"Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea\".split(\"_\"),isFormat:/MMMM(\\s)+D[oD]?/},monthsShort:\"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var\".split(\"_\"),weekdaysShort:\"Ait._Som._Mon._Bud._Bre._Suk._Son.\".split(\"_\"),weekdaysMin:\"Ai_Sm_Mo_Bu_Br_Su_Sn\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"A h:mm [vazta]\",LTS:\"A h:mm:ss [vazta]\",L:\"DD-MM-YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY A h:mm [vazta]\",LLLL:\"dddd, MMMM Do, YYYY, A h:mm [vazta]\",llll:\"ddd, D MMM YYYY, A h:mm [vazta]\"},calendar:{sameDay:\"[Aiz] LT\",nextDay:\"[Faleam] LT\",nextWeek:\"[Fuddlo] dddd[,] LT\",lastDay:\"[Kal] LT\",lastWeek:\"[Fattlo] dddd[,] LT\",sameElse:\"L\"},relativeTime:{future:\"%s\",past:\"%s adim\",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\\d{1,2}(er)/,ordinal:function(t,e){switch(e){case\"D\":return t+\"er\";default:case\"M\":case\"Q\":case\"DDD\":case\"d\":case\"w\":case\"W\":return t}},week:{dow:0,doy:3},meridiemParse:/rati|sokallim|donparam|sanje/,meridiemHour:function(t,e){return 12===t&&(t=0),\"rati\"===e?t<4?t:t+12:\"sokallim\"===e?t:\"donparam\"===e?t>12?t:t+12:\"sanje\"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?\"rati\":t<12?\"sokallim\":t<16?\"donparam\":t<20?\"sanje\":\"rati\"}})}(n(\"wd/R\"))},Dh3D:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return y})),n.d(e,\"b\",(function(){return T})),n.d(e,\"c\",(function(){return S}));var r=n(\"fXoL\"),i=n(\"8LU1\"),a=n(\"FKr1\"),o=n(\"FtGj\"),s=n(\"XNiG\"),l=n(\"VRyK\"),c=n(\"R0Ic\"),u=n(\"ofXK\"),h=n(\"u47x\");const d=[\"mat-sort-header\",\"\"];function f(t,e){if(1&t){const t=r.ec();r.dc(0,\"div\",3),r.lc(\"@arrowPosition.start\",(function(){return r.Ec(t),r.pc()._disableViewStateAnimation=!0}))(\"@arrowPosition.done\",(function(){return r.Ec(t),r.pc()._disableViewStateAnimation=!1})),r.Yb(1,\"div\",4),r.dc(2,\"div\",5),r.Yb(3,\"div\",6),r.Yb(4,\"div\",7),r.Yb(5,\"div\",8),r.cc(),r.cc()}if(2&t){const t=r.pc();r.vc(\"@arrowOpacity\",t._getArrowViewState())(\"@arrowPosition\",t._getArrowViewState())(\"@allowChildren\",t._getArrowDirectionState()),r.Lb(2),r.vc(\"@indicator\",t._getArrowDirectionState()),r.Lb(1),r.vc(\"@leftPointer\",t._getArrowDirectionState()),r.Lb(1),r.vc(\"@rightPointer\",t._getArrowDirectionState())}}const p=[\"*\"];class m{}const g=Object(a.A)(Object(a.y)(m));let y=(()=>{class t extends g{constructor(){super(...arguments),this.sortables=new Map,this._stateChanges=new s.a,this.start=\"asc\",this._direction=\"\",this.sortChange=new r.s}get direction(){return this._direction}set direction(t){this._direction=t}get disableClear(){return this._disableClear}set disableClear(t){this._disableClear=Object(i.c)(t)}register(t){this.sortables.set(t.id,t)}deregister(t){this.sortables.delete(t.id)}sort(t){this.active!=t.id?(this.active=t.id,this.direction=t.start?t.start:this.start):this.direction=this.getNextSortDirection(t),this.sortChange.emit({active:this.active,direction:this.direction})}getNextSortDirection(t){if(!t)return\"\";let e=function(t,e){let n=[\"asc\",\"desc\"];return\"desc\"==t&&n.reverse(),e||n.push(\"\"),n}(t.start||this.start,null!=t.disableClear?t.disableClear:this.disableClear),n=e.indexOf(this.direction)+1;return n>=e.length&&(n=0),e[n]}ngOnInit(){this._markInitialized()}ngOnChanges(){this._stateChanges.next()}ngOnDestroy(){this._stateChanges.complete()}}return t.\\u0275fac=function(e){return v(e||t)},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"matSort\",\"\"]],hostAttrs:[1,\"mat-sort\"],inputs:{disabled:[\"matSortDisabled\",\"disabled\"],start:[\"matSortStart\",\"start\"],direction:[\"matSortDirection\",\"direction\"],disableClear:[\"matSortDisableClear\",\"disableClear\"],active:[\"matSortActive\",\"active\"]},outputs:{sortChange:\"matSortChange\"},exportAs:[\"matSort\"],features:[r.Ib,r.Jb]}),t})();const v=r.fc(y),_=a.b.ENTERING+\" \"+a.a.STANDARD_CURVE,b={indicator:Object(c.m)(\"indicator\",[Object(c.j)(\"active-asc, asc\",Object(c.k)({transform:\"translateY(0px)\"})),Object(c.j)(\"active-desc, desc\",Object(c.k)({transform:\"translateY(10px)\"})),Object(c.l)(\"active-asc <=> active-desc\",Object(c.e)(_))]),leftPointer:Object(c.m)(\"leftPointer\",[Object(c.j)(\"active-asc, asc\",Object(c.k)({transform:\"rotate(-45deg)\"})),Object(c.j)(\"active-desc, desc\",Object(c.k)({transform:\"rotate(45deg)\"})),Object(c.l)(\"active-asc <=> active-desc\",Object(c.e)(_))]),rightPointer:Object(c.m)(\"rightPointer\",[Object(c.j)(\"active-asc, asc\",Object(c.k)({transform:\"rotate(45deg)\"})),Object(c.j)(\"active-desc, desc\",Object(c.k)({transform:\"rotate(-45deg)\"})),Object(c.l)(\"active-asc <=> active-desc\",Object(c.e)(_))]),arrowOpacity:Object(c.m)(\"arrowOpacity\",[Object(c.j)(\"desc-to-active, asc-to-active, active\",Object(c.k)({opacity:1})),Object(c.j)(\"desc-to-hint, asc-to-hint, hint\",Object(c.k)({opacity:.54})),Object(c.j)(\"hint-to-desc, active-to-desc, desc, hint-to-asc, active-to-asc, asc, void\",Object(c.k)({opacity:0})),Object(c.l)(\"* => asc, * => desc, * => active, * => hint, * => void\",Object(c.e)(\"0ms\")),Object(c.l)(\"* <=> *\",Object(c.e)(_))]),arrowPosition:Object(c.m)(\"arrowPosition\",[Object(c.l)(\"* => desc-to-hint, * => desc-to-active\",Object(c.e)(_,Object(c.g)([Object(c.k)({transform:\"translateY(-25%)\"}),Object(c.k)({transform:\"translateY(0)\"})]))),Object(c.l)(\"* => hint-to-desc, * => active-to-desc\",Object(c.e)(_,Object(c.g)([Object(c.k)({transform:\"translateY(0)\"}),Object(c.k)({transform:\"translateY(25%)\"})]))),Object(c.l)(\"* => asc-to-hint, * => asc-to-active\",Object(c.e)(_,Object(c.g)([Object(c.k)({transform:\"translateY(25%)\"}),Object(c.k)({transform:\"translateY(0)\"})]))),Object(c.l)(\"* => hint-to-asc, * => active-to-asc\",Object(c.e)(_,Object(c.g)([Object(c.k)({transform:\"translateY(0)\"}),Object(c.k)({transform:\"translateY(-25%)\"})]))),Object(c.j)(\"desc-to-hint, asc-to-hint, hint, desc-to-active, asc-to-active, active\",Object(c.k)({transform:\"translateY(0)\"})),Object(c.j)(\"hint-to-desc, active-to-desc, desc\",Object(c.k)({transform:\"translateY(-25%)\"})),Object(c.j)(\"hint-to-asc, active-to-asc, asc\",Object(c.k)({transform:\"translateY(25%)\"}))]),allowChildren:Object(c.m)(\"allowChildren\",[Object(c.l)(\"* <=> *\",[Object(c.h)(\"@*\",Object(c.f)(),{optional:!0})])])};let x=(()=>{class t{constructor(){this.changes=new s.a,this.sortButtonLabel=t=>\"Change sorting for \"+t}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=Object(r.Tb)({factory:function(){return new t},token:t,providedIn:\"root\"}),t})();const w={provide:x,deps:[[new r.I,new r.T,x]],useFactory:function(t){return t||new x}};class k{}const M=Object(a.y)(k);let T=(()=>{class t extends M{constructor(t,e,n,r,i,a){super(),this._intl=t,this._changeDetectorRef=e,this._sort=n,this._columnDef=r,this._focusMonitor=i,this._elementRef=a,this._showIndicatorHint=!1,this._arrowDirection=\"\",this._disableViewStateAnimation=!1,this.arrowPosition=\"after\",this._rerenderSubscription=Object(l.a)(n.sortChange,n._stateChanges,t.changes).subscribe(()=>{this._isSorted()&&this._updateArrowDirection(),!this._isSorted()&&this._viewState&&\"active\"===this._viewState.toState&&(this._disableViewStateAnimation=!1,this._setAnimationTransitionState({fromState:\"active\",toState:this._arrowDirection})),e.markForCheck()})}get disableClear(){return this._disableClear}set disableClear(t){this._disableClear=Object(i.c)(t)}ngOnInit(){!this.id&&this._columnDef&&(this.id=this._columnDef.name),this._updateArrowDirection(),this._setAnimationTransitionState({toState:this._isSorted()?\"active\":this._arrowDirection}),this._sort.register(this)}ngAfterViewInit(){this._focusMonitor.monitor(this._elementRef,!0).subscribe(t=>{const e=!!t;e!==this._showIndicatorHint&&(this._setIndicatorHintVisible(e),this._changeDetectorRef.markForCheck())})}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef),this._sort.deregister(this),this._rerenderSubscription.unsubscribe()}_setIndicatorHintVisible(t){this._isDisabled()&&t||(this._showIndicatorHint=t,this._isSorted()||(this._updateArrowDirection(),this._setAnimationTransitionState(this._showIndicatorHint?{fromState:this._arrowDirection,toState:\"hint\"}:{fromState:\"hint\",toState:this._arrowDirection})))}_setAnimationTransitionState(t){this._viewState=t,this._disableViewStateAnimation&&(this._viewState={toState:t.toState})}_toggleOnInteraction(){this._sort.sort(this),\"hint\"!==this._viewState.toState&&\"active\"!==this._viewState.toState||(this._disableViewStateAnimation=!0);const t=this._isSorted()?{fromState:this._arrowDirection,toState:\"active\"}:{fromState:\"active\",toState:this._arrowDirection};this._setAnimationTransitionState(t),this._showIndicatorHint=!1}_handleClick(){this._isDisabled()||this._toggleOnInteraction()}_handleKeydown(t){this._isDisabled()||t.keyCode!==o.m&&t.keyCode!==o.e||(t.preventDefault(),this._toggleOnInteraction())}_isSorted(){return this._sort.active==this.id&&(\"asc\"===this._sort.direction||\"desc\"===this._sort.direction)}_getArrowDirectionState(){return`${this._isSorted()?\"active-\":\"\"}${this._arrowDirection}`}_getArrowViewState(){const t=this._viewState.fromState;return(t?t+\"-to-\":\"\")+this._viewState.toState}_updateArrowDirection(){this._arrowDirection=this._isSorted()?this._sort.direction:this.start||this._sort.start}_isDisabled(){return this._sort.disabled||this.disabled}_getAriaSortAttribute(){return this._isSorted()?\"asc\"==this._sort.direction?\"ascending\":\"descending\":\"none\"}_renderArrow(){return!this._isDisabled()||this._isSorted()}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(x),r.Xb(r.j),r.Xb(y,8),r.Xb(\"MAT_SORT_HEADER_COLUMN_DEF\",8),r.Xb(h.h),r.Xb(r.p))},t.\\u0275cmp=r.Rb({type:t,selectors:[[\"\",\"mat-sort-header\",\"\"]],hostAttrs:[1,\"mat-sort-header\"],hostVars:3,hostBindings:function(t,e){1&t&&r.lc(\"click\",(function(){return e._handleClick()}))(\"keydown\",(function(t){return e._handleKeydown(t)}))(\"mouseenter\",(function(){return e._setIndicatorHintVisible(!0)}))(\"mouseleave\",(function(){return e._setIndicatorHintVisible(!1)})),2&t&&(r.Mb(\"aria-sort\",e._getAriaSortAttribute()),r.Pb(\"mat-sort-header-disabled\",e._isDisabled()))},inputs:{disabled:\"disabled\",arrowPosition:\"arrowPosition\",disableClear:\"disableClear\",id:[\"mat-sort-header\",\"id\"],start:\"start\"},exportAs:[\"matSortHeader\"],features:[r.Ib],attrs:d,ngContentSelectors:p,decls:4,vars:6,consts:[[\"role\",\"button\",1,\"mat-sort-header-container\",\"mat-focus-indicator\"],[1,\"mat-sort-header-content\"],[\"class\",\"mat-sort-header-arrow\",4,\"ngIf\"],[1,\"mat-sort-header-arrow\"],[1,\"mat-sort-header-stem\"],[1,\"mat-sort-header-indicator\"],[1,\"mat-sort-header-pointer-left\"],[1,\"mat-sort-header-pointer-right\"],[1,\"mat-sort-header-pointer-middle\"]],template:function(t,e){1&t&&(r.uc(),r.dc(0,\"div\",0),r.dc(1,\"div\",1),r.tc(2),r.cc(),r.Mc(3,f,6,6,\"div\",2),r.cc()),2&t&&(r.Pb(\"mat-sort-header-sorted\",e._isSorted())(\"mat-sort-header-position-before\",\"before\"==e.arrowPosition),r.Mb(\"tabindex\",e._isDisabled()?null:0),r.Lb(3),r.vc(\"ngIf\",e._renderArrow()))},directives:[u.o],styles:[\".mat-sort-header-container{display:flex;cursor:pointer;align-items:center;letter-spacing:normal;outline:0}[mat-sort-header].cdk-keyboard-focused .mat-sort-header-container,[mat-sort-header].cdk-program-focused .mat-sort-header-container{border-bottom:solid 1px currentColor}.mat-sort-header-disabled .mat-sort-header-container{cursor:default}.mat-sort-header-content{text-align:center;display:flex;align-items:center}.mat-sort-header-position-before{flex-direction:row-reverse}.mat-sort-header-arrow{height:12px;width:12px;min-width:12px;position:relative;display:flex;opacity:0}.mat-sort-header-arrow,[dir=rtl] .mat-sort-header-position-before .mat-sort-header-arrow{margin:0 0 0 6px}.mat-sort-header-position-before .mat-sort-header-arrow,[dir=rtl] .mat-sort-header-arrow{margin:0 6px 0 0}.mat-sort-header-stem{background:currentColor;height:10px;width:2px;margin:auto;display:flex;align-items:center}.cdk-high-contrast-active .mat-sort-header-stem{width:0;border-left:solid 2px}.mat-sort-header-indicator{width:100%;height:2px;display:flex;align-items:center;position:absolute;top:0;left:0}.mat-sort-header-pointer-middle{margin:auto;height:2px;width:2px;background:currentColor;transform:rotate(45deg)}.cdk-high-contrast-active .mat-sort-header-pointer-middle{width:0;height:0;border-top:solid 2px;border-left:solid 2px}.mat-sort-header-pointer-left,.mat-sort-header-pointer-right{background:currentColor;width:6px;height:2px;position:absolute;top:0}.cdk-high-contrast-active .mat-sort-header-pointer-left,.cdk-high-contrast-active .mat-sort-header-pointer-right{width:0;height:0;border-left:solid 6px;border-top:solid 2px}.mat-sort-header-pointer-left{transform-origin:right;left:0}.mat-sort-header-pointer-right{transform-origin:left;right:0}\\n\"],encapsulation:2,data:{animation:[b.indicator,b.leftPointer,b.rightPointer,b.arrowOpacity,b.arrowPosition,b.allowChildren]},changeDetection:0}),t})(),S=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},providers:[w],imports:[[u.c,a.i]]}),t})()},Dkky:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"fr-ch\",{months:\"janvier_f\\xe9vrier_mars_avril_mai_juin_juillet_ao\\xfbt_septembre_octobre_novembre_d\\xe9cembre\".split(\"_\"),monthsShort:\"janv._f\\xe9vr._mars_avr._mai_juin_juil._ao\\xfbt_sept._oct._nov._d\\xe9c.\".split(\"_\"),monthsParseExact:!0,weekdays:\"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\".split(\"_\"),weekdaysShort:\"dim._lun._mar._mer._jeu._ven._sam.\".split(\"_\"),weekdaysMin:\"di_lu_ma_me_je_ve_sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Aujourd\\u2019hui \\xe0] LT\",nextDay:\"[Demain \\xe0] LT\",nextWeek:\"dddd [\\xe0] LT\",lastDay:\"[Hier \\xe0] LT\",lastWeek:\"dddd [dernier \\xe0] LT\",sameElse:\"L\"},relativeTime:{future:\"dans %s\",past:\"il y a %s\",s:\"quelques secondes\",ss:\"%d secondes\",m:\"une minute\",mm:\"%d minutes\",h:\"une heure\",hh:\"%d heures\",d:\"un jour\",dd:\"%d jours\",M:\"un mois\",MM:\"%d mois\",y:\"un an\",yy:\"%d ans\"},dayOfMonthOrdinalParse:/\\d{1,2}(er|e)/,ordinal:function(t,e){switch(e){default:case\"M\":case\"Q\":case\"D\":case\"DDD\":case\"d\":return t+(1===t?\"er\":\"e\");case\"w\":case\"W\":return t+(1===t?\"re\":\"e\")}},week:{dow:1,doy:4}})}(n(\"wd/R\"))},Dmvi:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"en-au\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?\"th\":1===e?\"st\":2===e?\"nd\":3===e?\"rd\":\"th\")},week:{dow:0,doy:4}})}(n(\"wd/R\"))},DoHr:function(t,e,n){!function(t){\"use strict\";var e={1:\"'inci\",5:\"'inci\",8:\"'inci\",70:\"'inci\",80:\"'inci\",2:\"'nci\",7:\"'nci\",20:\"'nci\",50:\"'nci\",3:\"'\\xfcnc\\xfc\",4:\"'\\xfcnc\\xfc\",100:\"'\\xfcnc\\xfc\",6:\"'nc\\u0131\",9:\"'uncu\",10:\"'uncu\",30:\"'uncu\",60:\"'\\u0131nc\\u0131\",90:\"'\\u0131nc\\u0131\"};t.defineLocale(\"tr\",{months:\"Ocak_\\u015eubat_Mart_Nisan_May\\u0131s_Haziran_Temmuz_A\\u011fustos_Eyl\\xfcl_Ekim_Kas\\u0131m_Aral\\u0131k\".split(\"_\"),monthsShort:\"Oca_\\u015eub_Mar_Nis_May_Haz_Tem_A\\u011fu_Eyl_Eki_Kas_Ara\".split(\"_\"),weekdays:\"Pazar_Pazartesi_Sal\\u0131_\\xc7ar\\u015famba_Per\\u015fembe_Cuma_Cumartesi\".split(\"_\"),weekdaysShort:\"Paz_Pts_Sal_\\xc7ar_Per_Cum_Cts\".split(\"_\"),weekdaysMin:\"Pz_Pt_Sa_\\xc7a_Pe_Cu_Ct\".split(\"_\"),meridiem:function(t,e,n){return t<12?n?\"\\xf6\\xf6\":\"\\xd6\\xd6\":n?\"\\xf6s\":\"\\xd6S\"},meridiemParse:/\\xf6\\xf6|\\xd6\\xd6|\\xf6s|\\xd6S/,isPM:function(t){return\"\\xf6s\"===t||\"\\xd6S\"===t},longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[bug\\xfcn saat] LT\",nextDay:\"[yar\\u0131n saat] LT\",nextWeek:\"[gelecek] dddd [saat] LT\",lastDay:\"[d\\xfcn] LT\",lastWeek:\"[ge\\xe7en] dddd [saat] LT\",sameElse:\"L\"},relativeTime:{future:\"%s sonra\",past:\"%s \\xf6nce\",s:\"birka\\xe7 saniye\",ss:\"%d saniye\",m:\"bir dakika\",mm:\"%d dakika\",h:\"bir saat\",hh:\"%d saat\",d:\"bir g\\xfcn\",dd:\"%d g\\xfcn\",w:\"bir hafta\",ww:\"%d hafta\",M:\"bir ay\",MM:\"%d ay\",y:\"bir y\\u0131l\",yy:\"%d y\\u0131l\"},ordinal:function(t,n){switch(n){case\"d\":case\"D\":case\"Do\":case\"DD\":return t;default:if(0===t)return t+\"'\\u0131nc\\u0131\";var r=t%10;return t+(e[r]||e[t%100-r]||e[t>=100?100:null])}},week:{dow:1,doy:7}})}(n(\"wd/R\"))},DxQv:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"da\",{months:\"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),weekdays:\"s\\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\\xf8rdag\".split(\"_\"),weekdaysShort:\"s\\xf8n_man_tir_ons_tor_fre_l\\xf8r\".split(\"_\"),weekdaysMin:\"s\\xf8_ma_ti_on_to_fr_l\\xf8\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd [d.] D. MMMM YYYY [kl.] HH:mm\"},calendar:{sameDay:\"[i dag kl.] LT\",nextDay:\"[i morgen kl.] LT\",nextWeek:\"p\\xe5 dddd [kl.] LT\",lastDay:\"[i g\\xe5r kl.] LT\",lastWeek:\"[i] dddd[s kl.] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"%s siden\",s:\"f\\xe5 sekunder\",ss:\"%d sekunder\",m:\"et minut\",mm:\"%d minutter\",h:\"en time\",hh:\"%d timer\",d:\"en dag\",dd:\"%d dage\",M:\"en m\\xe5ned\",MM:\"%d m\\xe5neder\",y:\"et \\xe5r\",yy:\"%d \\xe5r\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},Dzi0:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"tl-ph\",{months:\"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre\".split(\"_\"),monthsShort:\"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis\".split(\"_\"),weekdays:\"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado\".split(\"_\"),weekdaysShort:\"Lin_Lun_Mar_Miy_Huw_Biy_Sab\".split(\"_\"),weekdaysMin:\"Li_Lu_Ma_Mi_Hu_Bi_Sab\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"MM/D/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY HH:mm\",LLLL:\"dddd, MMMM DD, YYYY HH:mm\"},calendar:{sameDay:\"LT [ngayong araw]\",nextDay:\"[Bukas ng] LT\",nextWeek:\"LT [sa susunod na] dddd\",lastDay:\"LT [kahapon]\",lastWeek:\"LT [noong nakaraang] dddd\",sameElse:\"L\"},relativeTime:{future:\"sa loob ng %s\",past:\"%s ang nakalipas\",s:\"ilang segundo\",ss:\"%d segundo\",m:\"isang minuto\",mm:\"%d minuto\",h:\"isang oras\",hh:\"%d oras\",d:\"isang araw\",dd:\"%d araw\",M:\"isang buwan\",MM:\"%d buwan\",y:\"isang taon\",yy:\"%d taon\"},dayOfMonthOrdinalParse:/\\d{1,2}/,ordinal:function(t){return t},week:{dow:1,doy:4}})}(n(\"wd/R\"))},\"E+lV\":function(t,e,n){!function(t){\"use strict\";var e={words:{ss:[\"\\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u0430\",\"\\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u0435\",\"\\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u0438\"],m:[\"\\u0458\\u0435\\u0434\\u0430\\u043d \\u043c\\u0438\\u043d\\u0443\\u0442\",\"\\u0458\\u0435\\u0434\\u043d\\u0435 \\u043c\\u0438\\u043d\\u0443\\u0442\\u0435\"],mm:[\"\\u043c\\u0438\\u043d\\u0443\\u0442\",\"\\u043c\\u0438\\u043d\\u0443\\u0442\\u0435\",\"\\u043c\\u0438\\u043d\\u0443\\u0442\\u0430\"],h:[\"\\u0458\\u0435\\u0434\\u0430\\u043d \\u0441\\u0430\\u0442\",\"\\u0458\\u0435\\u0434\\u043d\\u043e\\u0433 \\u0441\\u0430\\u0442\\u0430\"],hh:[\"\\u0441\\u0430\\u0442\",\"\\u0441\\u0430\\u0442\\u0430\",\"\\u0441\\u0430\\u0442\\u0438\"],dd:[\"\\u0434\\u0430\\u043d\",\"\\u0434\\u0430\\u043d\\u0430\",\"\\u0434\\u0430\\u043d\\u0430\"],MM:[\"\\u043c\\u0435\\u0441\\u0435\\u0446\",\"\\u043c\\u0435\\u0441\\u0435\\u0446\\u0430\",\"\\u043c\\u0435\\u0441\\u0435\\u0446\\u0438\"],yy:[\"\\u0433\\u043e\\u0434\\u0438\\u043d\\u0430\",\"\\u0433\\u043e\\u0434\\u0438\\u043d\\u0435\",\"\\u0433\\u043e\\u0434\\u0438\\u043d\\u0430\"]},correctGrammaticalCase:function(t,e){return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,r){var i=e.words[r];return 1===r.length?n?i[0]:i[1]:t+\" \"+e.correctGrammaticalCase(t,i)}};t.defineLocale(\"sr-cyrl\",{months:\"\\u0458\\u0430\\u043d\\u0443\\u0430\\u0440_\\u0444\\u0435\\u0431\\u0440\\u0443\\u0430\\u0440_\\u043c\\u0430\\u0440\\u0442_\\u0430\\u043f\\u0440\\u0438\\u043b_\\u043c\\u0430\\u0458_\\u0458\\u0443\\u043d_\\u0458\\u0443\\u043b_\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442_\\u0441\\u0435\\u043f\\u0442\\u0435\\u043c\\u0431\\u0430\\u0440_\\u043e\\u043a\\u0442\\u043e\\u0431\\u0430\\u0440_\\u043d\\u043e\\u0432\\u0435\\u043c\\u0431\\u0430\\u0440_\\u0434\\u0435\\u0446\\u0435\\u043c\\u0431\\u0430\\u0440\".split(\"_\"),monthsShort:\"\\u0458\\u0430\\u043d._\\u0444\\u0435\\u0431._\\u043c\\u0430\\u0440._\\u0430\\u043f\\u0440._\\u043c\\u0430\\u0458_\\u0458\\u0443\\u043d_\\u0458\\u0443\\u043b_\\u0430\\u0432\\u0433._\\u0441\\u0435\\u043f._\\u043e\\u043a\\u0442._\\u043d\\u043e\\u0432._\\u0434\\u0435\\u0446.\".split(\"_\"),monthsParseExact:!0,weekdays:\"\\u043d\\u0435\\u0434\\u0435\\u0459\\u0430_\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u0459\\u0430\\u043a_\\u0443\\u0442\\u043e\\u0440\\u0430\\u043a_\\u0441\\u0440\\u0435\\u0434\\u0430_\\u0447\\u0435\\u0442\\u0432\\u0440\\u0442\\u0430\\u043a_\\u043f\\u0435\\u0442\\u0430\\u043a_\\u0441\\u0443\\u0431\\u043e\\u0442\\u0430\".split(\"_\"),weekdaysShort:\"\\u043d\\u0435\\u0434._\\u043f\\u043e\\u043d._\\u0443\\u0442\\u043e._\\u0441\\u0440\\u0435._\\u0447\\u0435\\u0442._\\u043f\\u0435\\u0442._\\u0441\\u0443\\u0431.\".split(\"_\"),weekdaysMin:\"\\u043d\\u0435_\\u043f\\u043e_\\u0443\\u0442_\\u0441\\u0440_\\u0447\\u0435_\\u043f\\u0435_\\u0441\\u0443\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"D. M. YYYY.\",LL:\"D. MMMM YYYY.\",LLL:\"D. MMMM YYYY. H:mm\",LLLL:\"dddd, D. MMMM YYYY. H:mm\"},calendar:{sameDay:\"[\\u0434\\u0430\\u043d\\u0430\\u0441 \\u0443] LT\",nextDay:\"[\\u0441\\u0443\\u0442\\u0440\\u0430 \\u0443] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[\\u0443] [\\u043d\\u0435\\u0434\\u0435\\u0459\\u0443] [\\u0443] LT\";case 3:return\"[\\u0443] [\\u0441\\u0440\\u0435\\u0434\\u0443] [\\u0443] LT\";case 6:return\"[\\u0443] [\\u0441\\u0443\\u0431\\u043e\\u0442\\u0443] [\\u0443] LT\";case 1:case 2:case 4:case 5:return\"[\\u0443] dddd [\\u0443] LT\"}},lastDay:\"[\\u0458\\u0443\\u0447\\u0435 \\u0443] LT\",lastWeek:function(){return[\"[\\u043f\\u0440\\u043e\\u0448\\u043b\\u0435] [\\u043d\\u0435\\u0434\\u0435\\u0459\\u0435] [\\u0443] LT\",\"[\\u043f\\u0440\\u043e\\u0448\\u043b\\u043e\\u0433] [\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u0459\\u043a\\u0430] [\\u0443] LT\",\"[\\u043f\\u0440\\u043e\\u0448\\u043b\\u043e\\u0433] [\\u0443\\u0442\\u043e\\u0440\\u043a\\u0430] [\\u0443] LT\",\"[\\u043f\\u0440\\u043e\\u0448\\u043b\\u0435] [\\u0441\\u0440\\u0435\\u0434\\u0435] [\\u0443] LT\",\"[\\u043f\\u0440\\u043e\\u0448\\u043b\\u043e\\u0433] [\\u0447\\u0435\\u0442\\u0432\\u0440\\u0442\\u043a\\u0430] [\\u0443] LT\",\"[\\u043f\\u0440\\u043e\\u0448\\u043b\\u043e\\u0433] [\\u043f\\u0435\\u0442\\u043a\\u0430] [\\u0443] LT\",\"[\\u043f\\u0440\\u043e\\u0448\\u043b\\u0435] [\\u0441\\u0443\\u0431\\u043e\\u0442\\u0435] [\\u0443] LT\"][this.day()]},sameElse:\"L\"},relativeTime:{future:\"\\u0437\\u0430 %s\",past:\"\\u043f\\u0440\\u0435 %s\",s:\"\\u043d\\u0435\\u043a\\u043e\\u043b\\u0438\\u043a\\u043e \\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u0438\",ss:e.translate,m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:\"\\u0434\\u0430\\u043d\",dd:e.translate,M:\"\\u043c\\u0435\\u0441\\u0435\\u0446\",MM:e.translate,y:\"\\u0433\\u043e\\u0434\\u0438\\u043d\\u0443\",yy:e.translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(n(\"wd/R\"))},EHOR:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));var r=n(\"fXoL\");let i=(()=>{class t{transform(t){if(t>0&&t>60){const e=Math.floor(t/60);return t%2!=0?`${e}h ${t-60*e}min`:e+\"h\"}return t+\"min\"}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275pipe=r.Wb({name:\"minToHour\",type:t,pure:!0}),t})()},ENCR:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));var r=n(\"fXoL\");let i=(()=>{class t{transform(t){return 0===t.length?\"\":t.charAt(0).toUpperCase()+t.slice(1)}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275pipe=r.Wb({name:\"flu\",type:t,pure:!0}),t})()},EOgW:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"th\",{months:\"\\u0e21\\u0e01\\u0e23\\u0e32\\u0e04\\u0e21_\\u0e01\\u0e38\\u0e21\\u0e20\\u0e32\\u0e1e\\u0e31\\u0e19\\u0e18\\u0e4c_\\u0e21\\u0e35\\u0e19\\u0e32\\u0e04\\u0e21_\\u0e40\\u0e21\\u0e29\\u0e32\\u0e22\\u0e19_\\u0e1e\\u0e24\\u0e29\\u0e20\\u0e32\\u0e04\\u0e21_\\u0e21\\u0e34\\u0e16\\u0e38\\u0e19\\u0e32\\u0e22\\u0e19_\\u0e01\\u0e23\\u0e01\\u0e0e\\u0e32\\u0e04\\u0e21_\\u0e2a\\u0e34\\u0e07\\u0e2b\\u0e32\\u0e04\\u0e21_\\u0e01\\u0e31\\u0e19\\u0e22\\u0e32\\u0e22\\u0e19_\\u0e15\\u0e38\\u0e25\\u0e32\\u0e04\\u0e21_\\u0e1e\\u0e24\\u0e28\\u0e08\\u0e34\\u0e01\\u0e32\\u0e22\\u0e19_\\u0e18\\u0e31\\u0e19\\u0e27\\u0e32\\u0e04\\u0e21\".split(\"_\"),monthsShort:\"\\u0e21.\\u0e04._\\u0e01.\\u0e1e._\\u0e21\\u0e35.\\u0e04._\\u0e40\\u0e21.\\u0e22._\\u0e1e.\\u0e04._\\u0e21\\u0e34.\\u0e22._\\u0e01.\\u0e04._\\u0e2a.\\u0e04._\\u0e01.\\u0e22._\\u0e15.\\u0e04._\\u0e1e.\\u0e22._\\u0e18.\\u0e04.\".split(\"_\"),monthsParseExact:!0,weekdays:\"\\u0e2d\\u0e32\\u0e17\\u0e34\\u0e15\\u0e22\\u0e4c_\\u0e08\\u0e31\\u0e19\\u0e17\\u0e23\\u0e4c_\\u0e2d\\u0e31\\u0e07\\u0e04\\u0e32\\u0e23_\\u0e1e\\u0e38\\u0e18_\\u0e1e\\u0e24\\u0e2b\\u0e31\\u0e2a\\u0e1a\\u0e14\\u0e35_\\u0e28\\u0e38\\u0e01\\u0e23\\u0e4c_\\u0e40\\u0e2a\\u0e32\\u0e23\\u0e4c\".split(\"_\"),weekdaysShort:\"\\u0e2d\\u0e32\\u0e17\\u0e34\\u0e15\\u0e22\\u0e4c_\\u0e08\\u0e31\\u0e19\\u0e17\\u0e23\\u0e4c_\\u0e2d\\u0e31\\u0e07\\u0e04\\u0e32\\u0e23_\\u0e1e\\u0e38\\u0e18_\\u0e1e\\u0e24\\u0e2b\\u0e31\\u0e2a_\\u0e28\\u0e38\\u0e01\\u0e23\\u0e4c_\\u0e40\\u0e2a\\u0e32\\u0e23\\u0e4c\".split(\"_\"),weekdaysMin:\"\\u0e2d\\u0e32._\\u0e08._\\u0e2d._\\u0e1e._\\u0e1e\\u0e24._\\u0e28._\\u0e2a.\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY \\u0e40\\u0e27\\u0e25\\u0e32 H:mm\",LLLL:\"\\u0e27\\u0e31\\u0e19dddd\\u0e17\\u0e35\\u0e48 D MMMM YYYY \\u0e40\\u0e27\\u0e25\\u0e32 H:mm\"},meridiemParse:/\\u0e01\\u0e48\\u0e2d\\u0e19\\u0e40\\u0e17\\u0e35\\u0e48\\u0e22\\u0e07|\\u0e2b\\u0e25\\u0e31\\u0e07\\u0e40\\u0e17\\u0e35\\u0e48\\u0e22\\u0e07/,isPM:function(t){return\"\\u0e2b\\u0e25\\u0e31\\u0e07\\u0e40\\u0e17\\u0e35\\u0e48\\u0e22\\u0e07\"===t},meridiem:function(t,e,n){return t<12?\"\\u0e01\\u0e48\\u0e2d\\u0e19\\u0e40\\u0e17\\u0e35\\u0e48\\u0e22\\u0e07\":\"\\u0e2b\\u0e25\\u0e31\\u0e07\\u0e40\\u0e17\\u0e35\\u0e48\\u0e22\\u0e07\"},calendar:{sameDay:\"[\\u0e27\\u0e31\\u0e19\\u0e19\\u0e35\\u0e49 \\u0e40\\u0e27\\u0e25\\u0e32] LT\",nextDay:\"[\\u0e1e\\u0e23\\u0e38\\u0e48\\u0e07\\u0e19\\u0e35\\u0e49 \\u0e40\\u0e27\\u0e25\\u0e32] LT\",nextWeek:\"dddd[\\u0e2b\\u0e19\\u0e49\\u0e32 \\u0e40\\u0e27\\u0e25\\u0e32] LT\",lastDay:\"[\\u0e40\\u0e21\\u0e37\\u0e48\\u0e2d\\u0e27\\u0e32\\u0e19\\u0e19\\u0e35\\u0e49 \\u0e40\\u0e27\\u0e25\\u0e32] LT\",lastWeek:\"[\\u0e27\\u0e31\\u0e19]dddd[\\u0e17\\u0e35\\u0e48\\u0e41\\u0e25\\u0e49\\u0e27 \\u0e40\\u0e27\\u0e25\\u0e32] LT\",sameElse:\"L\"},relativeTime:{future:\"\\u0e2d\\u0e35\\u0e01 %s\",past:\"%s\\u0e17\\u0e35\\u0e48\\u0e41\\u0e25\\u0e49\\u0e27\",s:\"\\u0e44\\u0e21\\u0e48\\u0e01\\u0e35\\u0e48\\u0e27\\u0e34\\u0e19\\u0e32\\u0e17\\u0e35\",ss:\"%d \\u0e27\\u0e34\\u0e19\\u0e32\\u0e17\\u0e35\",m:\"1 \\u0e19\\u0e32\\u0e17\\u0e35\",mm:\"%d \\u0e19\\u0e32\\u0e17\\u0e35\",h:\"1 \\u0e0a\\u0e31\\u0e48\\u0e27\\u0e42\\u0e21\\u0e07\",hh:\"%d \\u0e0a\\u0e31\\u0e48\\u0e27\\u0e42\\u0e21\\u0e07\",d:\"1 \\u0e27\\u0e31\\u0e19\",dd:\"%d \\u0e27\\u0e31\\u0e19\",w:\"1 \\u0e2a\\u0e31\\u0e1b\\u0e14\\u0e32\\u0e2b\\u0e4c\",ww:\"%d \\u0e2a\\u0e31\\u0e1b\\u0e14\\u0e32\\u0e2b\\u0e4c\",M:\"1 \\u0e40\\u0e14\\u0e37\\u0e2d\\u0e19\",MM:\"%d \\u0e40\\u0e14\\u0e37\\u0e2d\\u0e19\",y:\"1 \\u0e1b\\u0e35\",yy:\"%d \\u0e1b\\u0e35\"}})}(n(\"wd/R\"))},EY2u:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i})),n.d(e,\"b\",(function(){return a}));var r=n(\"HDdC\");const i=new r.a(t=>t.complete());function a(t){return t?function(t){return new r.a(e=>t.schedule(()=>e.complete()))}(t):i}},FKr1:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return v})),n.d(e,\"b\",(function(){return _})),n.d(e,\"c\",(function(){return E})),n.d(e,\"d\",(function(){return H})),n.d(e,\"e\",(function(){return O})),n.d(e,\"f\",(function(){return ct})),n.d(e,\"g\",(function(){return it})),n.d(e,\"h\",(function(){return Q})),n.d(e,\"i\",(function(){return w})),n.d(e,\"j\",(function(){return V})),n.d(e,\"k\",(function(){return q})),n.d(e,\"l\",(function(){return Y})),n.d(e,\"m\",(function(){return ft})),n.d(e,\"n\",(function(){return gt})),n.d(e,\"o\",(function(){return ht})),n.d(e,\"p\",(function(){return nt})),n.d(e,\"q\",(function(){return rt})),n.d(e,\"r\",(function(){return tt})),n.d(e,\"s\",(function(){return et})),n.d(e,\"t\",(function(){return $})),n.d(e,\"u\",(function(){return pt})),n.d(e,\"v\",(function(){return mt})),n.d(e,\"w\",(function(){return M})),n.d(e,\"x\",(function(){return T})),n.d(e,\"y\",(function(){return k})),n.d(e,\"z\",(function(){return A})),n.d(e,\"A\",(function(){return L})),n.d(e,\"B\",(function(){return S})),n.d(e,\"C\",(function(){return U}));var r=n(\"fXoL\"),i=n(\"u47x\"),a=n(\"cH1L\");const o=new r.Y(\"11.1.0\");var s=n(\"ofXK\"),l=n(\"8LU1\"),c=n(\"XNiG\"),u=n(\"HDdC\"),h=n(\"nLfN\"),d=n(\"JX91\"),f=n(\"R1ws\"),p=n(\"FtGj\");function m(t,e){if(1&t&&r.Yb(0,\"mat-pseudo-checkbox\",4),2&t){const t=r.pc();r.vc(\"state\",t.selected?\"checked\":\"unchecked\")(\"disabled\",t.disabled)}}function g(t,e){if(1&t&&(r.dc(0,\"span\",5),r.Oc(1),r.cc()),2&t){const t=r.pc();r.Lb(1),r.Qc(\"(\",t.group.label,\")\")}}const y=[\"*\"];let v=(()=>{class t{}return t.STANDARD_CURVE=\"cubic-bezier(0.4,0.0,0.2,1)\",t.DECELERATION_CURVE=\"cubic-bezier(0.0,0.0,0.2,1)\",t.ACCELERATION_CURVE=\"cubic-bezier(0.4,0.0,1,1)\",t.SHARP_CURVE=\"cubic-bezier(0.4,0.0,0.6,1)\",t})(),_=(()=>{class t{}return t.COMPLEX=\"375ms\",t.ENTERING=\"225ms\",t.EXITING=\"195ms\",t})();const b=new r.Y(\"11.1.0\"),x=new r.w(\"mat-sanity-checks\",{providedIn:\"root\",factory:function(){return!0}});let w=(()=>{class t{constructor(t,e,n){this._hasDoneGlobalChecks=!1,this._document=n,t._applyBodyHighContrastModeCssClasses(),this._sanityChecks=e,this._hasDoneGlobalChecks||(this._checkDoctypeIsDefined(),this._checkThemeIsPresent(),this._checkCdkVersionMatch(),this._hasDoneGlobalChecks=!0)}_getWindow(){const t=this._document.defaultView||window;return\"object\"==typeof t&&t?t:null}_checksAreEnabled(){return Object(r.gb)()&&!this._isTestEnv()}_isTestEnv(){const t=this._getWindow();return t&&(t.__karma__||t.jasmine)}_checkDoctypeIsDefined(){this._checksAreEnabled()&&(!0===this._sanityChecks||this._sanityChecks.doctype)&&!this._document.doctype&&console.warn(\"Current document does not have a doctype. This may cause some Angular Material components not to behave as expected.\")}_checkThemeIsPresent(){if(!this._checksAreEnabled()||!1===this._sanityChecks||!this._sanityChecks.theme||!this._document.body||\"function\"!=typeof getComputedStyle)return;const t=this._document.createElement(\"div\");t.classList.add(\"mat-theme-loaded-marker\"),this._document.body.appendChild(t);const e=getComputedStyle(t);e&&\"none\"!==e.display&&console.warn(\"Could not find Angular Material core theme. Most Material components may not work as expected. For more info refer to the theming guide: https://material.angular.io/guide/theming\"),this._document.body.removeChild(t)}_checkCdkVersionMatch(){this._checksAreEnabled()&&(!0===this._sanityChecks||this._sanityChecks.version)&&b.full!==o.full&&console.warn(\"The Angular Material version (\"+b.full+\") does not match the Angular CDK version (\"+o.full+\").\\nPlease ensure the versions of these two packages exactly match.\")}}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)(r.hc(i.j),r.hc(x,8),r.hc(s.d))},imports:[[a.a],a.a]}),t})();function k(t){return class extends t{constructor(...t){super(...t),this._disabled=!1}get disabled(){return this._disabled}set disabled(t){this._disabled=Object(l.c)(t)}}}function M(t,e){return class extends t{constructor(...t){super(...t),this.defaultColor=e,this.color=e}get color(){return this._color}set color(t){const e=t||this.defaultColor;e!==this._color&&(this._color&&this._elementRef.nativeElement.classList.remove(\"mat-\"+this._color),e&&this._elementRef.nativeElement.classList.add(\"mat-\"+e),this._color=e)}}}function T(t){return class extends t{constructor(...t){super(...t),this._disableRipple=!1}get disableRipple(){return this._disableRipple}set disableRipple(t){this._disableRipple=Object(l.c)(t)}}}function S(t,e=0){return class extends t{constructor(...t){super(...t),this._tabIndex=e,this.defaultTabIndex=e}get tabIndex(){return this.disabled?-1:this._tabIndex}set tabIndex(t){this._tabIndex=null!=t?Object(l.f)(t):this.defaultTabIndex}}}function A(t){return class extends t{constructor(...t){super(...t),this.errorState=!1,this.stateChanges=new c.a}updateErrorState(){const t=this.errorState,e=(this.errorStateMatcher||this._defaultErrorStateMatcher).isErrorState(this.ngControl?this.ngControl.control:null,this._parentFormGroup||this._parentForm);e!==t&&(this.errorState=e,this.stateChanges.next())}}}function L(t){return class extends t{constructor(...t){super(...t),this._isInitialized=!1,this._pendingSubscribers=[],this.initialized=new u.a(t=>{this._isInitialized?this._notifySubscriber(t):this._pendingSubscribers.push(t)})}_markInitialized(){this._isInitialized=!0,this._pendingSubscribers.forEach(this._notifySubscriber),this._pendingSubscribers=null}_notifySubscriber(t){t.next(),t.complete()}}}const C=new r.w(\"MAT_DATE_LOCALE\",{providedIn:\"root\",factory:function(){return Object(r.fb)(r.B)}});class E{constructor(){this._localeChanges=new c.a,this.localeChanges=this._localeChanges}getValidDateOrNull(t){return this.isDateInstance(t)&&this.isValid(t)?t:null}deserialize(t){return null==t||this.isDateInstance(t)&&this.isValid(t)?t:this.invalid()}setLocale(t){this.locale=t,this._localeChanges.next()}compareDate(t,e){return this.getYear(t)-this.getYear(e)||this.getMonth(t)-this.getMonth(e)||this.getDate(t)-this.getDate(e)}sameDate(t,e){if(t&&e){let n=this.isValid(t),r=this.isValid(e);return n&&r?!this.compareDate(t,e):n==r}return t==e}clampDate(t,e,n){return e&&this.compareDate(t,e)<0?e:n&&this.compareDate(t,n)>0?n:t}}const O=new r.w(\"mat-date-formats\");let D;try{D=\"undefined\"!=typeof Intl}catch(yt){D=!1}const I={long:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],short:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"]},P=j(31,t=>String(t+1)),R={long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"]},z=/^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;function j(t,e){const n=Array(t);for(let r=0;r<t;r++)n[r]=e(r);return n}let F=(()=>{class t extends E{constructor(t,e){super(),this.useUtcForDisplay=!0,super.setLocale(t),this.useUtcForDisplay=!e.TRIDENT,this._clampDate=e.TRIDENT||e.EDGE}getYear(t){return t.getFullYear()}getMonth(t){return t.getMonth()}getDate(t){return t.getDate()}getDayOfWeek(t){return t.getDay()}getMonthNames(t){if(D){const e=new Intl.DateTimeFormat(this.locale,{month:t,timeZone:\"utc\"});return j(12,t=>this._stripDirectionalityCharacters(this._format(e,new Date(2017,t,1))))}return I[t]}getDateNames(){if(D){const t=new Intl.DateTimeFormat(this.locale,{day:\"numeric\",timeZone:\"utc\"});return j(31,e=>this._stripDirectionalityCharacters(this._format(t,new Date(2017,0,e+1))))}return P}getDayOfWeekNames(t){if(D){const e=new Intl.DateTimeFormat(this.locale,{weekday:t,timeZone:\"utc\"});return j(7,t=>this._stripDirectionalityCharacters(this._format(e,new Date(2017,0,t+1))))}return R[t]}getYearName(t){if(D){const e=new Intl.DateTimeFormat(this.locale,{year:\"numeric\",timeZone:\"utc\"});return this._stripDirectionalityCharacters(this._format(e,t))}return String(this.getYear(t))}getFirstDayOfWeek(){return 0}getNumDaysInMonth(t){return this.getDate(this._createDateWithOverflow(this.getYear(t),this.getMonth(t)+1,0))}clone(t){return new Date(t.getTime())}createDate(t,e,n){let r=this._createDateWithOverflow(t,e,n);return r.getMonth(),r}today(){return new Date}parse(t){return\"number\"==typeof t?new Date(t):t?new Date(Date.parse(t)):null}format(t,e){if(!this.isValid(t))throw Error(\"NativeDateAdapter: Cannot format invalid date.\");if(D){this._clampDate&&(t.getFullYear()<1||t.getFullYear()>9999)&&(t=this.clone(t)).setFullYear(Math.max(1,Math.min(9999,t.getFullYear()))),e=Object.assign(Object.assign({},e),{timeZone:\"utc\"});const n=new Intl.DateTimeFormat(this.locale,e);return this._stripDirectionalityCharacters(this._format(n,t))}return this._stripDirectionalityCharacters(t.toDateString())}addCalendarYears(t,e){return this.addCalendarMonths(t,12*e)}addCalendarMonths(t,e){let n=this._createDateWithOverflow(this.getYear(t),this.getMonth(t)+e,this.getDate(t));return this.getMonth(n)!=((this.getMonth(t)+e)%12+12)%12&&(n=this._createDateWithOverflow(this.getYear(n),this.getMonth(n),0)),n}addCalendarDays(t,e){return this._createDateWithOverflow(this.getYear(t),this.getMonth(t),this.getDate(t)+e)}toIso8601(t){return[t.getUTCFullYear(),this._2digit(t.getUTCMonth()+1),this._2digit(t.getUTCDate())].join(\"-\")}deserialize(t){if(\"string\"==typeof t){if(!t)return null;if(z.test(t)){let e=new Date(t);if(this.isValid(e))return e}}return super.deserialize(t)}isDateInstance(t){return t instanceof Date}isValid(t){return!isNaN(t.getTime())}invalid(){return new Date(NaN)}_createDateWithOverflow(t,e,n){const r=new Date;return r.setFullYear(t,e,n),r.setHours(0,0,0,0),r}_2digit(t){return(\"00\"+t).slice(-2)}_stripDirectionalityCharacters(t){return t.replace(/[\\u200e\\u200f]/g,\"\")}_format(t,e){const n=new Date;return n.setUTCFullYear(e.getFullYear(),e.getMonth(),e.getDate()),n.setUTCHours(e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()),t.format(n)}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(C,8),r.hc(h.a))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})(),N=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},providers:[{provide:E,useClass:F}],imports:[[h.b]]}),t})();const B={parse:{dateInput:null},display:{dateInput:{year:\"numeric\",month:\"numeric\",day:\"numeric\"},monthYearLabel:{year:\"numeric\",month:\"short\"},dateA11yLabel:{year:\"numeric\",month:\"long\",day:\"numeric\"},monthYearA11yLabel:{year:\"numeric\",month:\"long\"}}};let Y=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},providers:[{provide:O,useValue:B}],imports:[[N]]}),t})(),H=(()=>{class t{isErrorState(t,e){return!!(t&&t.invalid&&(t.touched||e&&e.submitted))}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=Object(r.Tb)({factory:function(){return new t},token:t,providedIn:\"root\"}),t})(),V=(()=>{class t{}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"mat-line\",\"\"],[\"\",\"matLine\",\"\"]],hostAttrs:[1,\"mat-line\"]}),t})();function U(t,e,n=\"mat\"){t.changes.pipe(Object(d.a)(t)).subscribe(({length:t})=>{W(e,n+\"-2-line\",!1),W(e,n+\"-3-line\",!1),W(e,n+\"-multi-line\",!1),2===t||3===t?W(e,`${n}-${t}-line`,!0):t>3&&W(e,n+\"-multi-line\",!0)})}function W(t,e,n){const r=t.nativeElement.classList;n?r.add(e):r.remove(e)}let q=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},imports:[[w],w]}),t})();class G{constructor(t,e,n){this._renderer=t,this.element=e,this.config=n,this.state=3}fadeOut(){this._renderer.fadeOutRipple(this)}}const X={enterDuration:450,exitDuration:400},Z=Object(h.f)({passive:!0}),J=[\"mousedown\",\"touchstart\"],K=[\"mouseup\",\"mouseleave\",\"touchend\",\"touchcancel\"];class ${constructor(t,e,n,r){this._target=t,this._ngZone=e,this._isPointerDown=!1,this._activeRipples=new Set,this._pointerUpEventsRegistered=!1,r.isBrowser&&(this._containerElement=Object(l.e)(n))}fadeInRipple(t,e,n={}){const r=this._containerRect=this._containerRect||this._containerElement.getBoundingClientRect(),i=Object.assign(Object.assign({},X),n.animation);n.centered&&(t=r.left+r.width/2,e=r.top+r.height/2);const a=n.radius||function(t,e,n){const r=Math.max(Math.abs(t-n.left),Math.abs(t-n.right)),i=Math.max(Math.abs(e-n.top),Math.abs(e-n.bottom));return Math.sqrt(r*r+i*i)}(t,e,r),o=t-r.left,s=e-r.top,l=i.enterDuration,c=document.createElement(\"div\");c.classList.add(\"mat-ripple-element\"),c.style.left=o-a+\"px\",c.style.top=s-a+\"px\",c.style.height=2*a+\"px\",c.style.width=2*a+\"px\",null!=n.color&&(c.style.backgroundColor=n.color),c.style.transitionDuration=l+\"ms\",this._containerElement.appendChild(c),window.getComputedStyle(c).getPropertyValue(\"opacity\"),c.style.transform=\"scale(1)\";const u=new G(this,c,n);return u.state=0,this._activeRipples.add(u),n.persistent||(this._mostRecentTransientRipple=u),this._runTimeoutOutsideZone(()=>{const t=u===this._mostRecentTransientRipple;u.state=1,n.persistent||t&&this._isPointerDown||u.fadeOut()},l),u}fadeOutRipple(t){const e=this._activeRipples.delete(t);if(t===this._mostRecentTransientRipple&&(this._mostRecentTransientRipple=null),this._activeRipples.size||(this._containerRect=null),!e)return;const n=t.element,r=Object.assign(Object.assign({},X),t.config.animation);n.style.transitionDuration=r.exitDuration+\"ms\",n.style.opacity=\"0\",t.state=2,this._runTimeoutOutsideZone(()=>{t.state=3,n.parentNode.removeChild(n)},r.exitDuration)}fadeOutAll(){this._activeRipples.forEach(t=>t.fadeOut())}setupTriggerEvents(t){const e=Object(l.e)(t);e&&e!==this._triggerElement&&(this._removeTriggerEvents(),this._triggerElement=e,this._registerEvents(J))}handleEvent(t){\"mousedown\"===t.type?this._onMousedown(t):\"touchstart\"===t.type?this._onTouchStart(t):this._onPointerUp(),this._pointerUpEventsRegistered||(this._registerEvents(K),this._pointerUpEventsRegistered=!0)}_onMousedown(t){const e=Object(i.l)(t),n=this._lastTouchStartEvent&&Date.now()<this._lastTouchStartEvent+800;this._target.rippleDisabled||e||n||(this._isPointerDown=!0,this.fadeInRipple(t.clientX,t.clientY,this._target.rippleConfig))}_onTouchStart(t){if(!this._target.rippleDisabled){this._lastTouchStartEvent=Date.now(),this._isPointerDown=!0;const e=t.changedTouches;for(let t=0;t<e.length;t++)this.fadeInRipple(e[t].clientX,e[t].clientY,this._target.rippleConfig)}}_onPointerUp(){this._isPointerDown&&(this._isPointerDown=!1,this._activeRipples.forEach(t=>{!t.config.persistent&&(1===t.state||t.config.terminateOnPointerUp&&0===t.state)&&t.fadeOut()}))}_runTimeoutOutsideZone(t,e=0){this._ngZone.runOutsideAngular(()=>setTimeout(t,e))}_registerEvents(t){this._ngZone.runOutsideAngular(()=>{t.forEach(t=>{this._triggerElement.addEventListener(t,this,Z)})})}_removeTriggerEvents(){this._triggerElement&&(J.forEach(t=>{this._triggerElement.removeEventListener(t,this,Z)}),this._pointerUpEventsRegistered&&K.forEach(t=>{this._triggerElement.removeEventListener(t,this,Z)}))}}const Q=new r.w(\"mat-ripple-global-options\");let tt=(()=>{class t{constructor(t,e,n,r,i){this._elementRef=t,this._animationMode=i,this.radius=0,this._disabled=!1,this._isInitialized=!1,this._globalOptions=r||{},this._rippleRenderer=new $(this,e,t,n)}get disabled(){return this._disabled}set disabled(t){this._disabled=t,this._setupTriggerEventsIfEnabled()}get trigger(){return this._trigger||this._elementRef.nativeElement}set trigger(t){this._trigger=t,this._setupTriggerEventsIfEnabled()}ngOnInit(){this._isInitialized=!0,this._setupTriggerEventsIfEnabled()}ngOnDestroy(){this._rippleRenderer._removeTriggerEvents()}fadeOutAll(){this._rippleRenderer.fadeOutAll()}get rippleConfig(){return{centered:this.centered,radius:this.radius,color:this.color,animation:Object.assign(Object.assign(Object.assign({},this._globalOptions.animation),\"NoopAnimations\"===this._animationMode?{enterDuration:0,exitDuration:0}:{}),this.animation),terminateOnPointerUp:this._globalOptions.terminateOnPointerUp}}get rippleDisabled(){return this.disabled||!!this._globalOptions.disabled}_setupTriggerEventsIfEnabled(){!this.disabled&&this._isInitialized&&this._rippleRenderer.setupTriggerEvents(this.trigger)}launch(t,e=0,n){return\"number\"==typeof t?this._rippleRenderer.fadeInRipple(t,e,Object.assign(Object.assign({},this.rippleConfig),n)):this._rippleRenderer.fadeInRipple(0,0,Object.assign(Object.assign({},this.rippleConfig),t))}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.p),r.Xb(r.H),r.Xb(h.a),r.Xb(Q,8),r.Xb(f.a,8))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"mat-ripple\",\"\"],[\"\",\"matRipple\",\"\"]],hostAttrs:[1,\"mat-ripple\"],hostVars:2,hostBindings:function(t,e){2&t&&r.Pb(\"mat-ripple-unbounded\",e.unbounded)},inputs:{radius:[\"matRippleRadius\",\"radius\"],disabled:[\"matRippleDisabled\",\"disabled\"],trigger:[\"matRippleTrigger\",\"trigger\"],color:[\"matRippleColor\",\"color\"],unbounded:[\"matRippleUnbounded\",\"unbounded\"],centered:[\"matRippleCentered\",\"centered\"],animation:[\"matRippleAnimation\",\"animation\"]},exportAs:[\"matRipple\"]}),t})(),et=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},imports:[[w,h.b],w]}),t})(),nt=(()=>{class t{constructor(t){this._animationMode=t,this.state=\"unchecked\",this.disabled=!1}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(f.a,8))},t.\\u0275cmp=r.Rb({type:t,selectors:[[\"mat-pseudo-checkbox\"]],hostAttrs:[1,\"mat-pseudo-checkbox\"],hostVars:8,hostBindings:function(t,e){2&t&&r.Pb(\"mat-pseudo-checkbox-indeterminate\",\"indeterminate\"===e.state)(\"mat-pseudo-checkbox-checked\",\"checked\"===e.state)(\"mat-pseudo-checkbox-disabled\",e.disabled)(\"_mat-animation-noopable\",\"NoopAnimations\"===e._animationMode)},inputs:{state:\"state\",disabled:\"disabled\"},decls:0,vars:0,template:function(t,e){},styles:['.mat-pseudo-checkbox{width:16px;height:16px;border:2px solid;border-radius:2px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0, 0, 0.2, 0.1),background-color 90ms cubic-bezier(0, 0, 0.2, 0.1)}.mat-pseudo-checkbox::after{position:absolute;opacity:0;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0, 0, 0.2, 0.1)}.mat-pseudo-checkbox.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox.mat-pseudo-checkbox-indeterminate{border-color:transparent}._mat-animation-noopable.mat-pseudo-checkbox{transition:none;animation:none}._mat-animation-noopable.mat-pseudo-checkbox::after{transition:none}.mat-pseudo-checkbox-disabled{cursor:default}.mat-pseudo-checkbox-indeterminate::after{top:5px;left:1px;width:10px;opacity:1;border-radius:2px}.mat-pseudo-checkbox-checked::after{top:2.4px;left:1px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box}\\n'],encapsulation:2,changeDetection:0}),t})(),rt=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},imports:[[w]]}),t})();const it=new r.w(\"MAT_OPTION_PARENT_COMPONENT\");class at{}const ot=k(at);let st=0,lt=(()=>{class t extends ot{constructor(t){var e;super(),this._labelId=\"mat-optgroup-label-\"+st++,this._inert=null!==(e=null==t?void 0:t.inertGroups)&&void 0!==e&&e}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(it,8))},t.\\u0275dir=r.Sb({type:t,inputs:{label:\"label\"},features:[r.Ib]}),t})();const ct=new r.w(\"MatOptgroup\");let ut=0;class ht{constructor(t,e=!1){this.source=t,this.isUserInput=e}}let dt=(()=>{class t{constructor(t,e,n,i){this._element=t,this._changeDetectorRef=e,this._parent=n,this.group=i,this._selected=!1,this._active=!1,this._disabled=!1,this._mostRecentViewValue=\"\",this.id=\"mat-option-\"+ut++,this.onSelectionChange=new r.s,this._stateChanges=new c.a}get multiple(){return this._parent&&this._parent.multiple}get selected(){return this._selected}get disabled(){return this.group&&this.group.disabled||this._disabled}set disabled(t){this._disabled=Object(l.c)(t)}get disableRipple(){return this._parent&&this._parent.disableRipple}get active(){return this._active}get viewValue(){return(this._getHostElement().textContent||\"\").trim()}select(){this._selected||(this._selected=!0,this._changeDetectorRef.markForCheck(),this._emitSelectionChangeEvent())}deselect(){this._selected&&(this._selected=!1,this._changeDetectorRef.markForCheck(),this._emitSelectionChangeEvent())}focus(t,e){const n=this._getHostElement();\"function\"==typeof n.focus&&n.focus(e)}setActiveStyles(){this._active||(this._active=!0,this._changeDetectorRef.markForCheck())}setInactiveStyles(){this._active&&(this._active=!1,this._changeDetectorRef.markForCheck())}getLabel(){return this.viewValue}_handleKeydown(t){t.keyCode!==p.e&&t.keyCode!==p.m||Object(p.r)(t)||(this._selectViaInteraction(),t.preventDefault())}_selectViaInteraction(){this.disabled||(this._selected=!this.multiple||!this._selected,this._changeDetectorRef.markForCheck(),this._emitSelectionChangeEvent(!0))}_getAriaSelected(){return this.selected||!this.multiple&&null}_getTabIndex(){return this.disabled?\"-1\":\"0\"}_getHostElement(){return this._element.nativeElement}ngAfterViewChecked(){if(this._selected){const t=this.viewValue;t!==this._mostRecentViewValue&&(this._mostRecentViewValue=t,this._stateChanges.next())}}ngOnDestroy(){this._stateChanges.complete()}_emitSelectionChangeEvent(t=!1){this.onSelectionChange.emit(new ht(this,t))}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.p),r.Xb(r.j),r.Xb(void 0),r.Xb(lt))},t.\\u0275dir=r.Sb({type:t,inputs:{id:\"id\",disabled:\"disabled\",value:\"value\"},outputs:{onSelectionChange:\"onSelectionChange\"}}),t})(),ft=(()=>{class t extends dt{constructor(t,e,n,r){super(t,e,n,r)}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.p),r.Xb(r.j),r.Xb(it,8),r.Xb(ct,8))},t.\\u0275cmp=r.Rb({type:t,selectors:[[\"mat-option\"]],hostAttrs:[\"role\",\"option\",1,\"mat-option\",\"mat-focus-indicator\"],hostVars:12,hostBindings:function(t,e){1&t&&r.lc(\"click\",(function(){return e._selectViaInteraction()}))(\"keydown\",(function(t){return e._handleKeydown(t)})),2&t&&(r.gc(\"id\",e.id),r.Mb(\"tabindex\",e._getTabIndex())(\"aria-selected\",e._getAriaSelected())(\"aria-disabled\",e.disabled.toString()),r.Pb(\"mat-selected\",e.selected)(\"mat-option-multiple\",e.multiple)(\"mat-active\",e.active)(\"mat-option-disabled\",e.disabled))},exportAs:[\"matOption\"],features:[r.Ib],ngContentSelectors:y,decls:5,vars:4,consts:[[\"class\",\"mat-option-pseudo-checkbox\",3,\"state\",\"disabled\",4,\"ngIf\"],[1,\"mat-option-text\"],[\"class\",\"cdk-visually-hidden\",4,\"ngIf\"],[\"mat-ripple\",\"\",1,\"mat-option-ripple\",3,\"matRippleTrigger\",\"matRippleDisabled\"],[1,\"mat-option-pseudo-checkbox\",3,\"state\",\"disabled\"],[1,\"cdk-visually-hidden\"]],template:function(t,e){1&t&&(r.uc(),r.Mc(0,m,1,2,\"mat-pseudo-checkbox\",0),r.dc(1,\"span\",1),r.tc(2),r.cc(),r.Mc(3,g,2,1,\"span\",2),r.Yb(4,\"div\",3)),2&t&&(r.vc(\"ngIf\",e.multiple),r.Lb(3),r.vc(\"ngIf\",e.group&&e.group._inert),r.Lb(1),r.vc(\"matRippleTrigger\",e._getHostElement())(\"matRippleDisabled\",e.disabled||e.disableRipple))},directives:[s.o,tt,nt],styles:[\".mat-option{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;line-height:48px;height:48px;padding:0 16px;text-align:left;text-decoration:none;max-width:100%;position:relative;cursor:pointer;outline:none;display:flex;flex-direction:row;max-width:100%;box-sizing:border-box;align-items:center;-webkit-tap-highlight-color:transparent}.mat-option[disabled]{cursor:default}[dir=rtl] .mat-option{text-align:right}.mat-option .mat-icon{margin-right:16px;vertical-align:middle}.mat-option .mat-icon svg{vertical-align:top}[dir=rtl] .mat-option .mat-icon{margin-left:16px;margin-right:0}.mat-option[aria-disabled=true]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.mat-optgroup .mat-option:not(.mat-option-multiple){padding-left:32px}[dir=rtl] .mat-optgroup .mat-option:not(.mat-option-multiple){padding-left:16px;padding-right:32px}.cdk-high-contrast-active .mat-option{margin:0 1px}.cdk-high-contrast-active .mat-option.mat-active{border:solid 1px currentColor;margin:0}.cdk-high-contrast-active .mat-option[aria-disabled=true]{opacity:.5}.mat-option-text{display:inline-block;flex-grow:1;overflow:hidden;text-overflow:ellipsis}.mat-option .mat-option-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-option-pseudo-checkbox{margin-right:8px}[dir=rtl] .mat-option-pseudo-checkbox{margin-left:8px;margin-right:0}\\n\"],encapsulation:2,changeDetection:0}),t})();function pt(t,e,n){if(n.length){let r=e.toArray(),i=n.toArray(),a=0;for(let e=0;e<t+1;e++)r[e].group&&r[e].group===i[a]&&a++;return a}return 0}function mt(t,e,n,r){return t<n?t:t+e>n+r?Math.max(0,t-r+e):n}let gt=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},imports:[[et,s.c,w,rt]]}),t})()},Fnuy:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"oc-lnc\",{months:{standalone:\"geni\\xe8r_febri\\xe8r_mar\\xe7_abril_mai_junh_julhet_agost_setembre_oct\\xf2bre_novembre_decembre\".split(\"_\"),format:\"de geni\\xe8r_de febri\\xe8r_de mar\\xe7_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'oct\\xf2bre_de novembre_de decembre\".split(\"_\"),isFormat:/D[oD]?(\\s)+MMMM/},monthsShort:\"gen._febr._mar\\xe7_abr._mai_junh_julh._ago._set._oct._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"dimenge_diluns_dimars_dim\\xe8cres_dij\\xf2us_divendres_dissabte\".split(\"_\"),weekdaysShort:\"dg._dl._dm._dc._dj._dv._ds.\".split(\"_\"),weekdaysMin:\"dg_dl_dm_dc_dj_dv_ds\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM [de] YYYY\",ll:\"D MMM YYYY\",LLL:\"D MMMM [de] YYYY [a] H:mm\",lll:\"D MMM YYYY, H:mm\",LLLL:\"dddd D MMMM [de] YYYY [a] H:mm\",llll:\"ddd D MMM YYYY, H:mm\"},calendar:{sameDay:\"[u\\xe8i a] LT\",nextDay:\"[deman a] LT\",nextWeek:\"dddd [a] LT\",lastDay:\"[i\\xe8r a] LT\",lastWeek:\"dddd [passat a] LT\",sameElse:\"L\"},relativeTime:{future:\"d'aqu\\xed %s\",past:\"fa %s\",s:\"unas segondas\",ss:\"%d segondas\",m:\"una minuta\",mm:\"%d minutas\",h:\"una ora\",hh:\"%d oras\",d:\"un jorn\",dd:\"%d jorns\",M:\"un mes\",MM:\"%d meses\",y:\"un an\",yy:\"%d ans\"},dayOfMonthOrdinalParse:/\\d{1,2}(r|n|t|\\xe8|a)/,ordinal:function(t,e){var n=1===t?\"r\":2===t?\"n\":3===t?\"r\":4===t?\"t\":\"\\xe8\";return\"w\"!==e&&\"W\"!==e||(n=\"a\"),t+n},week:{dow:1,doy:4}})}(n(\"wd/R\"))},FtGj:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return v})),n.d(e,\"b\",(function(){return r})),n.d(e,\"c\",(function(){return m})),n.d(e,\"d\",(function(){return u})),n.d(e,\"e\",(function(){return a})),n.d(e,\"f\",(function(){return o})),n.d(e,\"g\",(function(){return h})),n.d(e,\"h\",(function(){return d})),n.d(e,\"i\",(function(){return y})),n.d(e,\"j\",(function(){return c})),n.d(e,\"k\",(function(){return l})),n.d(e,\"l\",(function(){return p})),n.d(e,\"m\",(function(){return s})),n.d(e,\"n\",(function(){return i})),n.d(e,\"o\",(function(){return f})),n.d(e,\"p\",(function(){return _})),n.d(e,\"q\",(function(){return g})),n.d(e,\"r\",(function(){return b}));const r=8,i=9,a=13,o=27,s=32,l=33,c=34,u=35,h=36,d=37,f=38,p=39,m=40,g=48,y=57,v=65,_=90;function b(t,...e){return e.length?e.some(e=>t[e]):t.altKey||t.shiftKey||t.ctrlKey||t.metaKey}},G0Uy:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"mt\",{months:\"Jannar_Frar_Marzu_April_Mejju_\\u0120unju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Di\\u010bembru\".split(\"_\"),monthsShort:\"Jan_Fra_Mar_Apr_Mej_\\u0120un_Lul_Aww_Set_Ott_Nov_Di\\u010b\".split(\"_\"),weekdays:\"Il-\\u0126add_It-Tnejn_It-Tlieta_L-Erbg\\u0127a_Il-\\u0126amis_Il-\\u0120img\\u0127a_Is-Sibt\".split(\"_\"),weekdaysShort:\"\\u0126ad_Tne_Tli_Erb_\\u0126am_\\u0120im_Sib\".split(\"_\"),weekdaysMin:\"\\u0126a_Tn_Tl_Er_\\u0126a_\\u0120i_Si\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Illum fil-]LT\",nextDay:\"[G\\u0127ada fil-]LT\",nextWeek:\"dddd [fil-]LT\",lastDay:\"[Il-biera\\u0127 fil-]LT\",lastWeek:\"dddd [li g\\u0127adda] [fil-]LT\",sameElse:\"L\"},relativeTime:{future:\"f\\u2019 %s\",past:\"%s ilu\",s:\"ftit sekondi\",ss:\"%d sekondi\",m:\"minuta\",mm:\"%d minuti\",h:\"sieg\\u0127a\",hh:\"%d sieg\\u0127at\",d:\"\\u0121urnata\",dd:\"%d \\u0121ranet\",M:\"xahar\",MM:\"%d xhur\",y:\"sena\",yy:\"%d sni\"},dayOfMonthOrdinalParse:/\\d{1,2}\\xba/,ordinal:\"%d\\xba\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},GU7r:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return u})),n.d(e,\"b\",(function(){return c})),n.d(e,\"c\",(function(){return h}));var r=n(\"8LU1\"),i=n(\"fXoL\"),a=n(\"HDdC\"),o=n(\"XNiG\"),s=n(\"Kj3r\");let l=(()=>{class t{create(t){return\"undefined\"==typeof MutationObserver?null:new MutationObserver(t)}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=Object(i.Tb)({factory:function(){return new t},token:t,providedIn:\"root\"}),t})(),c=(()=>{class t{constructor(t){this._mutationObserverFactory=t,this._observedElements=new Map}ngOnDestroy(){this._observedElements.forEach((t,e)=>this._cleanupObserver(e))}observe(t){const e=Object(r.e)(t);return new a.a(t=>{const n=this._observeElement(e).subscribe(t);return()=>{n.unsubscribe(),this._unobserveElement(e)}})}_observeElement(t){if(this._observedElements.has(t))this._observedElements.get(t).count++;else{const e=new o.a,n=this._mutationObserverFactory.create(t=>e.next(t));n&&n.observe(t,{characterData:!0,childList:!0,subtree:!0}),this._observedElements.set(t,{observer:n,stream:e,count:1})}return this._observedElements.get(t).stream}_unobserveElement(t){this._observedElements.has(t)&&(this._observedElements.get(t).count--,this._observedElements.get(t).count||this._cleanupObserver(t))}_cleanupObserver(t){if(this._observedElements.has(t)){const{observer:e,stream:n}=this._observedElements.get(t);e&&e.disconnect(),n.complete(),this._observedElements.delete(t)}}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(l))},t.\\u0275prov=Object(i.Tb)({factory:function(){return new t(Object(i.hc)(l))},token:t,providedIn:\"root\"}),t})(),u=(()=>{class t{constructor(t,e,n){this._contentObserver=t,this._elementRef=e,this._ngZone=n,this.event=new i.s,this._disabled=!1,this._currentSubscription=null}get disabled(){return this._disabled}set disabled(t){this._disabled=Object(r.c)(t),this._disabled?this._unsubscribe():this._subscribe()}get debounce(){return this._debounce}set debounce(t){this._debounce=Object(r.f)(t),this._subscribe()}ngAfterContentInit(){this._currentSubscription||this.disabled||this._subscribe()}ngOnDestroy(){this._unsubscribe()}_subscribe(){this._unsubscribe();const t=this._contentObserver.observe(this._elementRef);this._ngZone.runOutsideAngular(()=>{this._currentSubscription=(this.debounce?t.pipe(Object(s.a)(this.debounce)):t).subscribe(this.event)})}_unsubscribe(){var t;null===(t=this._currentSubscription)||void 0===t||t.unsubscribe()}}return t.\\u0275fac=function(e){return new(e||t)(i.Xb(c),i.Xb(i.p),i.Xb(i.H))},t.\\u0275dir=i.Sb({type:t,selectors:[[\"\",\"cdkObserveContent\",\"\"]],inputs:{disabled:[\"cdkObserveContentDisabled\",\"disabled\"],debounce:\"debounce\"},outputs:{event:\"cdkObserveContent\"},exportAs:[\"cdkObserveContent\"]}),t})(),h=(()=>{class t{}return t.\\u0275mod=i.Vb({type:t}),t.\\u0275inj=i.Ub({factory:function(e){return new(e||t)},providers:[l]}),t})()},GyhO:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return a}));var r=n(\"LRne\"),i=n(\"bHdf\");function a(...t){return Object(i.a)(1)(Object(r.a)(...t))}},H8ED:function(t,e,n){!function(t){\"use strict\";function e(t,e,n){return\"m\"===n?e?\"\\u0445\\u0432\\u0456\\u043b\\u0456\\u043d\\u0430\":\"\\u0445\\u0432\\u0456\\u043b\\u0456\\u043d\\u0443\":\"h\"===n?e?\"\\u0433\\u0430\\u0434\\u0437\\u0456\\u043d\\u0430\":\"\\u0433\\u0430\\u0434\\u0437\\u0456\\u043d\\u0443\":t+\" \"+(r=+t,i={ss:e?\"\\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u0430_\\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u044b_\\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\":\"\\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u0443_\\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u044b_\\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\",mm:e?\"\\u0445\\u0432\\u0456\\u043b\\u0456\\u043d\\u0430_\\u0445\\u0432\\u0456\\u043b\\u0456\\u043d\\u044b_\\u0445\\u0432\\u0456\\u043b\\u0456\\u043d\":\"\\u0445\\u0432\\u0456\\u043b\\u0456\\u043d\\u0443_\\u0445\\u0432\\u0456\\u043b\\u0456\\u043d\\u044b_\\u0445\\u0432\\u0456\\u043b\\u0456\\u043d\",hh:e?\"\\u0433\\u0430\\u0434\\u0437\\u0456\\u043d\\u0430_\\u0433\\u0430\\u0434\\u0437\\u0456\\u043d\\u044b_\\u0433\\u0430\\u0434\\u0437\\u0456\\u043d\":\"\\u0433\\u0430\\u0434\\u0437\\u0456\\u043d\\u0443_\\u0433\\u0430\\u0434\\u0437\\u0456\\u043d\\u044b_\\u0433\\u0430\\u0434\\u0437\\u0456\\u043d\",dd:\"\\u0434\\u0437\\u0435\\u043d\\u044c_\\u0434\\u043d\\u0456_\\u0434\\u0437\\u0451\\u043d\",MM:\"\\u043c\\u0435\\u0441\\u044f\\u0446_\\u043c\\u0435\\u0441\\u044f\\u0446\\u044b_\\u043c\\u0435\\u0441\\u044f\\u0446\\u0430\\u045e\",yy:\"\\u0433\\u043e\\u0434_\\u0433\\u0430\\u0434\\u044b_\\u0433\\u0430\\u0434\\u043e\\u045e\"}[n].split(\"_\"),r%10==1&&r%100!=11?i[0]:r%10>=2&&r%10<=4&&(r%100<10||r%100>=20)?i[1]:i[2]);var r,i}t.defineLocale(\"be\",{months:{format:\"\\u0441\\u0442\\u0443\\u0434\\u0437\\u0435\\u043d\\u044f_\\u043b\\u044e\\u0442\\u0430\\u0433\\u0430_\\u0441\\u0430\\u043a\\u0430\\u0432\\u0456\\u043a\\u0430_\\u043a\\u0440\\u0430\\u0441\\u0430\\u0432\\u0456\\u043a\\u0430_\\u0442\\u0440\\u0430\\u045e\\u043d\\u044f_\\u0447\\u044d\\u0440\\u0432\\u0435\\u043d\\u044f_\\u043b\\u0456\\u043f\\u0435\\u043d\\u044f_\\u0436\\u043d\\u0456\\u045e\\u043d\\u044f_\\u0432\\u0435\\u0440\\u0430\\u0441\\u043d\\u044f_\\u043a\\u0430\\u0441\\u0442\\u0440\\u044b\\u0447\\u043d\\u0456\\u043a\\u0430_\\u043b\\u0456\\u0441\\u0442\\u0430\\u043f\\u0430\\u0434\\u0430_\\u0441\\u043d\\u0435\\u0436\\u043d\\u044f\".split(\"_\"),standalone:\"\\u0441\\u0442\\u0443\\u0434\\u0437\\u0435\\u043d\\u044c_\\u043b\\u044e\\u0442\\u044b_\\u0441\\u0430\\u043a\\u0430\\u0432\\u0456\\u043a_\\u043a\\u0440\\u0430\\u0441\\u0430\\u0432\\u0456\\u043a_\\u0442\\u0440\\u0430\\u0432\\u0435\\u043d\\u044c_\\u0447\\u044d\\u0440\\u0432\\u0435\\u043d\\u044c_\\u043b\\u0456\\u043f\\u0435\\u043d\\u044c_\\u0436\\u043d\\u0456\\u0432\\u0435\\u043d\\u044c_\\u0432\\u0435\\u0440\\u0430\\u0441\\u0435\\u043d\\u044c_\\u043a\\u0430\\u0441\\u0442\\u0440\\u044b\\u0447\\u043d\\u0456\\u043a_\\u043b\\u0456\\u0441\\u0442\\u0430\\u043f\\u0430\\u0434_\\u0441\\u043d\\u0435\\u0436\\u0430\\u043d\\u044c\".split(\"_\")},monthsShort:\"\\u0441\\u0442\\u0443\\u0434_\\u043b\\u044e\\u0442_\\u0441\\u0430\\u043a_\\u043a\\u0440\\u0430\\u0441_\\u0442\\u0440\\u0430\\u0432_\\u0447\\u044d\\u0440\\u0432_\\u043b\\u0456\\u043f_\\u0436\\u043d\\u0456\\u0432_\\u0432\\u0435\\u0440_\\u043a\\u0430\\u0441\\u0442_\\u043b\\u0456\\u0441\\u0442_\\u0441\\u043d\\u0435\\u0436\".split(\"_\"),weekdays:{format:\"\\u043d\\u044f\\u0434\\u0437\\u0435\\u043b\\u044e_\\u043f\\u0430\\u043d\\u044f\\u0434\\u0437\\u0435\\u043b\\u0430\\u043a_\\u0430\\u045e\\u0442\\u043e\\u0440\\u0430\\u043a_\\u0441\\u0435\\u0440\\u0430\\u0434\\u0443_\\u0447\\u0430\\u0446\\u0432\\u0435\\u0440_\\u043f\\u044f\\u0442\\u043d\\u0456\\u0446\\u0443_\\u0441\\u0443\\u0431\\u043e\\u0442\\u0443\".split(\"_\"),standalone:\"\\u043d\\u044f\\u0434\\u0437\\u0435\\u043b\\u044f_\\u043f\\u0430\\u043d\\u044f\\u0434\\u0437\\u0435\\u043b\\u0430\\u043a_\\u0430\\u045e\\u0442\\u043e\\u0440\\u0430\\u043a_\\u0441\\u0435\\u0440\\u0430\\u0434\\u0430_\\u0447\\u0430\\u0446\\u0432\\u0435\\u0440_\\u043f\\u044f\\u0442\\u043d\\u0456\\u0446\\u0430_\\u0441\\u0443\\u0431\\u043e\\u0442\\u0430\".split(\"_\"),isFormat:/\\[ ?[\\u0423\\u0443\\u045e] ?(?:\\u043c\\u0456\\u043d\\u0443\\u043b\\u0443\\u044e|\\u043d\\u0430\\u0441\\u0442\\u0443\\u043f\\u043d\\u0443\\u044e)? ?\\] ?dddd/},weekdaysShort:\"\\u043d\\u0434_\\u043f\\u043d_\\u0430\\u0442_\\u0441\\u0440_\\u0447\\u0446_\\u043f\\u0442_\\u0441\\u0431\".split(\"_\"),weekdaysMin:\"\\u043d\\u0434_\\u043f\\u043d_\\u0430\\u0442_\\u0441\\u0440_\\u0447\\u0446_\\u043f\\u0442_\\u0441\\u0431\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY \\u0433.\",LLL:\"D MMMM YYYY \\u0433., HH:mm\",LLLL:\"dddd, D MMMM YYYY \\u0433., HH:mm\"},calendar:{sameDay:\"[\\u0421\\u0451\\u043d\\u043d\\u044f \\u045e] LT\",nextDay:\"[\\u0417\\u0430\\u045e\\u0442\\u0440\\u0430 \\u045e] LT\",lastDay:\"[\\u0423\\u0447\\u043e\\u0440\\u0430 \\u045e] LT\",nextWeek:function(){return\"[\\u0423] dddd [\\u045e] LT\"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return\"[\\u0423 \\u043c\\u0456\\u043d\\u0443\\u043b\\u0443\\u044e] dddd [\\u045e] LT\";case 1:case 2:case 4:return\"[\\u0423 \\u043c\\u0456\\u043d\\u0443\\u043b\\u044b] dddd [\\u045e] LT\"}},sameElse:\"L\"},relativeTime:{future:\"\\u043f\\u0440\\u0430\\u0437 %s\",past:\"%s \\u0442\\u0430\\u043c\\u0443\",s:\"\\u043d\\u0435\\u043a\\u0430\\u043b\\u044c\\u043a\\u0456 \\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\",m:e,mm:e,h:e,hh:e,d:\"\\u0434\\u0437\\u0435\\u043d\\u044c\",dd:e,M:\"\\u043c\\u0435\\u0441\\u044f\\u0446\",MM:e,y:\"\\u0433\\u043e\\u0434\",yy:e},meridiemParse:/\\u043d\\u043e\\u0447\\u044b|\\u0440\\u0430\\u043d\\u0456\\u0446\\u044b|\\u0434\\u043d\\u044f|\\u0432\\u0435\\u0447\\u0430\\u0440\\u0430/,isPM:function(t){return/^(\\u0434\\u043d\\u044f|\\u0432\\u0435\\u0447\\u0430\\u0440\\u0430)$/.test(t)},meridiem:function(t,e,n){return t<4?\"\\u043d\\u043e\\u0447\\u044b\":t<12?\"\\u0440\\u0430\\u043d\\u0456\\u0446\\u044b\":t<17?\"\\u0434\\u043d\\u044f\":\"\\u0432\\u0435\\u0447\\u0430\\u0440\\u0430\"},dayOfMonthOrdinalParse:/\\d{1,2}-(\\u0456|\\u044b|\\u0433\\u0430)/,ordinal:function(t,e){switch(e){case\"M\":case\"d\":case\"DDD\":case\"w\":case\"W\":return t%10!=2&&t%10!=3||t%100==12||t%100==13?t+\"-\\u044b\":t+\"-\\u0456\";case\"D\":return t+\"-\\u0433\\u0430\";default:return t}},week:{dow:1,doy:7}})}(n(\"wd/R\"))},HDdC:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return c}));var r=n(\"7o/Q\"),i=n(\"2QA8\"),a=n(\"gRHU\"),o=n(\"kJWO\"),s=n(\"SpAZ\"),l=n(\"2fFW\");let c=(()=>{class t{constructor(t){this._isScalar=!1,t&&(this._subscribe=t)}lift(e){const n=new t;return n.source=this,n.operator=e,n}subscribe(t,e,n){const{operator:o}=this,s=function(t,e,n){if(t){if(t instanceof r.a)return t;if(t[i.a])return t[i.a]()}return t||e||n?new r.a(t,e,n):new r.a(a.a)}(t,e,n);if(s.add(o?o.call(s,this.source):this.source||l.a.useDeprecatedSynchronousErrorHandling&&!s.syncErrorThrowable?this._subscribe(s):this._trySubscribe(s)),l.a.useDeprecatedSynchronousErrorHandling&&s.syncErrorThrowable&&(s.syncErrorThrowable=!1,s.syncErrorThrown))throw s.syncErrorValue;return s}_trySubscribe(t){try{return this._subscribe(t)}catch(e){l.a.useDeprecatedSynchronousErrorHandling&&(t.syncErrorThrown=!0,t.syncErrorValue=e),function(t){for(;t;){const{closed:e,destination:n,isStopped:i}=t;if(e||i)return!1;t=n&&n instanceof r.a?n:null}return!0}(t)?t.error(e):console.warn(e)}}forEach(t,e){return new(e=u(e))((e,n)=>{let r;r=this.subscribe(e=>{try{t(e)}catch(i){n(i),r&&r.unsubscribe()}},n,e)})}_subscribe(t){const{source:e}=this;return e&&e.subscribe(t)}[o.a](){return this}pipe(...t){return 0===t.length?this:(0===(e=t).length?s.a:1===e.length?e[0]:function(t){return e.reduce((t,e)=>e(t),t)})(this);var e}toPromise(t){return new(t=u(t))((t,e)=>{let n;this.subscribe(t=>n=t,t=>e(t),()=>t(n))})}}return t.create=e=>new t(e),t})();function u(t){if(t||(t=l.a.Promise||Promise),!t)throw new Error(\"no Promise impl found\");return t}},HP3h:function(t,e,n){!function(t){\"use strict\";var e={1:\"1\",2:\"2\",3:\"3\",4:\"4\",5:\"5\",6:\"6\",7:\"7\",8:\"8\",9:\"9\",0:\"0\"},n=function(t){return 0===t?0:1===t?1:2===t?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5},r={s:[\"\\u0623\\u0642\\u0644 \\u0645\\u0646 \\u062b\\u0627\\u0646\\u064a\\u0629\",\"\\u062b\\u0627\\u0646\\u064a\\u0629 \\u0648\\u0627\\u062d\\u062f\\u0629\",[\"\\u062b\\u0627\\u0646\\u064a\\u062a\\u0627\\u0646\",\"\\u062b\\u0627\\u0646\\u064a\\u062a\\u064a\\u0646\"],\"%d \\u062b\\u0648\\u0627\\u0646\",\"%d \\u062b\\u0627\\u0646\\u064a\\u0629\",\"%d \\u062b\\u0627\\u0646\\u064a\\u0629\"],m:[\"\\u0623\\u0642\\u0644 \\u0645\\u0646 \\u062f\\u0642\\u064a\\u0642\\u0629\",\"\\u062f\\u0642\\u064a\\u0642\\u0629 \\u0648\\u0627\\u062d\\u062f\\u0629\",[\"\\u062f\\u0642\\u064a\\u0642\\u062a\\u0627\\u0646\",\"\\u062f\\u0642\\u064a\\u0642\\u062a\\u064a\\u0646\"],\"%d \\u062f\\u0642\\u0627\\u0626\\u0642\",\"%d \\u062f\\u0642\\u064a\\u0642\\u0629\",\"%d \\u062f\\u0642\\u064a\\u0642\\u0629\"],h:[\"\\u0623\\u0642\\u0644 \\u0645\\u0646 \\u0633\\u0627\\u0639\\u0629\",\"\\u0633\\u0627\\u0639\\u0629 \\u0648\\u0627\\u062d\\u062f\\u0629\",[\"\\u0633\\u0627\\u0639\\u062a\\u0627\\u0646\",\"\\u0633\\u0627\\u0639\\u062a\\u064a\\u0646\"],\"%d \\u0633\\u0627\\u0639\\u0627\\u062a\",\"%d \\u0633\\u0627\\u0639\\u0629\",\"%d \\u0633\\u0627\\u0639\\u0629\"],d:[\"\\u0623\\u0642\\u0644 \\u0645\\u0646 \\u064a\\u0648\\u0645\",\"\\u064a\\u0648\\u0645 \\u0648\\u0627\\u062d\\u062f\",[\"\\u064a\\u0648\\u0645\\u0627\\u0646\",\"\\u064a\\u0648\\u0645\\u064a\\u0646\"],\"%d \\u0623\\u064a\\u0627\\u0645\",\"%d \\u064a\\u0648\\u0645\\u064b\\u0627\",\"%d \\u064a\\u0648\\u0645\"],M:[\"\\u0623\\u0642\\u0644 \\u0645\\u0646 \\u0634\\u0647\\u0631\",\"\\u0634\\u0647\\u0631 \\u0648\\u0627\\u062d\\u062f\",[\"\\u0634\\u0647\\u0631\\u0627\\u0646\",\"\\u0634\\u0647\\u0631\\u064a\\u0646\"],\"%d \\u0623\\u0634\\u0647\\u0631\",\"%d \\u0634\\u0647\\u0631\\u0627\",\"%d \\u0634\\u0647\\u0631\"],y:[\"\\u0623\\u0642\\u0644 \\u0645\\u0646 \\u0639\\u0627\\u0645\",\"\\u0639\\u0627\\u0645 \\u0648\\u0627\\u062d\\u062f\",[\"\\u0639\\u0627\\u0645\\u0627\\u0646\",\"\\u0639\\u0627\\u0645\\u064a\\u0646\"],\"%d \\u0623\\u0639\\u0648\\u0627\\u0645\",\"%d \\u0639\\u0627\\u0645\\u064b\\u0627\",\"%d \\u0639\\u0627\\u0645\"]},i=function(t){return function(e,i,a,o){var s=n(e),l=r[t][n(e)];return 2===s&&(l=l[i?0:1]),l.replace(/%d/i,e)}},a=[\"\\u064a\\u0646\\u0627\\u064a\\u0631\",\"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\"\\u0645\\u0627\\u0631\\u0633\",\"\\u0623\\u0628\\u0631\\u064a\\u0644\",\"\\u0645\\u0627\\u064a\\u0648\",\"\\u064a\\u0648\\u0646\\u064a\\u0648\",\"\\u064a\\u0648\\u0644\\u064a\\u0648\",\"\\u0623\\u063a\\u0633\\u0637\\u0633\",\"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"];t.defineLocale(\"ar-ly\",{months:a,monthsShort:a,weekdays:\"\\u0627\\u0644\\u0623\\u062d\\u062f_\\u0627\\u0644\\u0625\\u062b\\u0646\\u064a\\u0646_\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621_\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621_\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633_\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629_\\u0627\\u0644\\u0633\\u0628\\u062a\".split(\"_\"),weekdaysShort:\"\\u0623\\u062d\\u062f_\\u0625\\u062b\\u0646\\u064a\\u0646_\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621_\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621_\\u062e\\u0645\\u064a\\u0633_\\u062c\\u0645\\u0639\\u0629_\\u0633\\u0628\\u062a\".split(\"_\"),weekdaysMin:\"\\u062d_\\u0646_\\u062b_\\u0631_\\u062e_\\u062c_\\u0633\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"D/\\u200fM/\\u200fYYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/\\u0635|\\u0645/,isPM:function(t){return\"\\u0645\"===t},meridiem:function(t,e,n){return t<12?\"\\u0635\":\"\\u0645\"},calendar:{sameDay:\"[\\u0627\\u0644\\u064a\\u0648\\u0645 \\u0639\\u0646\\u062f \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",nextDay:\"[\\u063a\\u062f\\u064b\\u0627 \\u0639\\u0646\\u062f \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",nextWeek:\"dddd [\\u0639\\u0646\\u062f \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",lastDay:\"[\\u0623\\u0645\\u0633 \\u0639\\u0646\\u062f \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",lastWeek:\"dddd [\\u0639\\u0646\\u062f \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",sameElse:\"L\"},relativeTime:{future:\"\\u0628\\u0639\\u062f %s\",past:\"\\u0645\\u0646\\u0630 %s\",s:i(\"s\"),ss:i(\"s\"),m:i(\"m\"),mm:i(\"m\"),h:i(\"h\"),hh:i(\"h\"),d:i(\"d\"),dd:i(\"d\"),M:i(\"M\"),MM:i(\"M\"),y:i(\"y\"),yy:i(\"y\")},preparse:function(t){return t.replace(/\\u060c/g,\",\")},postformat:function(t){return t.replace(/\\d/g,(function(t){return e[t]})).replace(/,/g,\"\\u060c\")},week:{dow:6,doy:12}})}(n(\"wd/R\"))},I55L:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return r}));const r=t=>t&&\"number\"==typeof t.length&&\"function\"!=typeof t},IBtZ:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"ka\",{months:\"\\u10d8\\u10d0\\u10dc\\u10d5\\u10d0\\u10e0\\u10d8_\\u10d7\\u10d4\\u10d1\\u10d4\\u10e0\\u10d5\\u10d0\\u10da\\u10d8_\\u10db\\u10d0\\u10e0\\u10e2\\u10d8_\\u10d0\\u10de\\u10e0\\u10d8\\u10da\\u10d8_\\u10db\\u10d0\\u10d8\\u10e1\\u10d8_\\u10d8\\u10d5\\u10dc\\u10d8\\u10e1\\u10d8_\\u10d8\\u10d5\\u10da\\u10d8\\u10e1\\u10d8_\\u10d0\\u10d2\\u10d5\\u10d8\\u10e1\\u10e2\\u10dd_\\u10e1\\u10d4\\u10e5\\u10e2\\u10d4\\u10db\\u10d1\\u10d4\\u10e0\\u10d8_\\u10dd\\u10e5\\u10e2\\u10dd\\u10db\\u10d1\\u10d4\\u10e0\\u10d8_\\u10dc\\u10dd\\u10d4\\u10db\\u10d1\\u10d4\\u10e0\\u10d8_\\u10d3\\u10d4\\u10d9\\u10d4\\u10db\\u10d1\\u10d4\\u10e0\\u10d8\".split(\"_\"),monthsShort:\"\\u10d8\\u10d0\\u10dc_\\u10d7\\u10d4\\u10d1_\\u10db\\u10d0\\u10e0_\\u10d0\\u10de\\u10e0_\\u10db\\u10d0\\u10d8_\\u10d8\\u10d5\\u10dc_\\u10d8\\u10d5\\u10da_\\u10d0\\u10d2\\u10d5_\\u10e1\\u10d4\\u10e5_\\u10dd\\u10e5\\u10e2_\\u10dc\\u10dd\\u10d4_\\u10d3\\u10d4\\u10d9\".split(\"_\"),weekdays:{standalone:\"\\u10d9\\u10d5\\u10d8\\u10e0\\u10d0_\\u10dd\\u10e0\\u10e8\\u10d0\\u10d1\\u10d0\\u10d7\\u10d8_\\u10e1\\u10d0\\u10db\\u10e8\\u10d0\\u10d1\\u10d0\\u10d7\\u10d8_\\u10dd\\u10d7\\u10ee\\u10e8\\u10d0\\u10d1\\u10d0\\u10d7\\u10d8_\\u10ee\\u10e3\\u10d7\\u10e8\\u10d0\\u10d1\\u10d0\\u10d7\\u10d8_\\u10de\\u10d0\\u10e0\\u10d0\\u10e1\\u10d9\\u10d4\\u10d5\\u10d8_\\u10e8\\u10d0\\u10d1\\u10d0\\u10d7\\u10d8\".split(\"_\"),format:\"\\u10d9\\u10d5\\u10d8\\u10e0\\u10d0\\u10e1_\\u10dd\\u10e0\\u10e8\\u10d0\\u10d1\\u10d0\\u10d7\\u10e1_\\u10e1\\u10d0\\u10db\\u10e8\\u10d0\\u10d1\\u10d0\\u10d7\\u10e1_\\u10dd\\u10d7\\u10ee\\u10e8\\u10d0\\u10d1\\u10d0\\u10d7\\u10e1_\\u10ee\\u10e3\\u10d7\\u10e8\\u10d0\\u10d1\\u10d0\\u10d7\\u10e1_\\u10de\\u10d0\\u10e0\\u10d0\\u10e1\\u10d9\\u10d4\\u10d5\\u10e1_\\u10e8\\u10d0\\u10d1\\u10d0\\u10d7\\u10e1\".split(\"_\"),isFormat:/(\\u10ec\\u10d8\\u10dc\\u10d0|\\u10e8\\u10d4\\u10db\\u10d3\\u10d4\\u10d2)/},weekdaysShort:\"\\u10d9\\u10d5\\u10d8_\\u10dd\\u10e0\\u10e8_\\u10e1\\u10d0\\u10db_\\u10dd\\u10d7\\u10ee_\\u10ee\\u10e3\\u10d7_\\u10de\\u10d0\\u10e0_\\u10e8\\u10d0\\u10d1\".split(\"_\"),weekdaysMin:\"\\u10d9\\u10d5_\\u10dd\\u10e0_\\u10e1\\u10d0_\\u10dd\\u10d7_\\u10ee\\u10e3_\\u10de\\u10d0_\\u10e8\\u10d0\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[\\u10d3\\u10e6\\u10d4\\u10e1] LT[-\\u10d6\\u10d4]\",nextDay:\"[\\u10ee\\u10d5\\u10d0\\u10da] LT[-\\u10d6\\u10d4]\",lastDay:\"[\\u10d2\\u10e3\\u10e8\\u10d8\\u10dc] LT[-\\u10d6\\u10d4]\",nextWeek:\"[\\u10e8\\u10d4\\u10db\\u10d3\\u10d4\\u10d2] dddd LT[-\\u10d6\\u10d4]\",lastWeek:\"[\\u10ec\\u10d8\\u10dc\\u10d0] dddd LT-\\u10d6\\u10d4\",sameElse:\"L\"},relativeTime:{future:function(t){return t.replace(/(\\u10ec\\u10d0\\u10db|\\u10ec\\u10e3\\u10d7|\\u10e1\\u10d0\\u10d0\\u10d7|\\u10ec\\u10d4\\u10da|\\u10d3\\u10e6|\\u10d7\\u10d5)(\\u10d8|\\u10d4)/,(function(t,e,n){return\"\\u10d8\"===n?e+\"\\u10e8\\u10d8\":e+n+\"\\u10e8\\u10d8\"}))},past:function(t){return/(\\u10ec\\u10d0\\u10db\\u10d8|\\u10ec\\u10e3\\u10d7\\u10d8|\\u10e1\\u10d0\\u10d0\\u10d7\\u10d8|\\u10d3\\u10e6\\u10d4|\\u10d7\\u10d5\\u10d4)/.test(t)?t.replace(/(\\u10d8|\\u10d4)$/,\"\\u10d8\\u10e1 \\u10ec\\u10d8\\u10dc\"):/\\u10ec\\u10d4\\u10da\\u10d8/.test(t)?t.replace(/\\u10ec\\u10d4\\u10da\\u10d8$/,\"\\u10ec\\u10da\\u10d8\\u10e1 \\u10ec\\u10d8\\u10dc\"):t},s:\"\\u10e0\\u10d0\\u10db\\u10d3\\u10d4\\u10dc\\u10d8\\u10db\\u10d4 \\u10ec\\u10d0\\u10db\\u10d8\",ss:\"%d \\u10ec\\u10d0\\u10db\\u10d8\",m:\"\\u10ec\\u10e3\\u10d7\\u10d8\",mm:\"%d \\u10ec\\u10e3\\u10d7\\u10d8\",h:\"\\u10e1\\u10d0\\u10d0\\u10d7\\u10d8\",hh:\"%d \\u10e1\\u10d0\\u10d0\\u10d7\\u10d8\",d:\"\\u10d3\\u10e6\\u10d4\",dd:\"%d \\u10d3\\u10e6\\u10d4\",M:\"\\u10d7\\u10d5\\u10d4\",MM:\"%d \\u10d7\\u10d5\\u10d4\",y:\"\\u10ec\\u10d4\\u10da\\u10d8\",yy:\"%d \\u10ec\\u10d4\\u10da\\u10d8\"},dayOfMonthOrdinalParse:/0|1-\\u10da\\u10d8|\\u10db\\u10d4-\\d{1,2}|\\d{1,2}-\\u10d4/,ordinal:function(t){return 0===t?t:1===t?t+\"-\\u10da\\u10d8\":t<20||t<=100&&t%20==0||t%100==0?\"\\u10db\\u10d4-\"+t:t+\"-\\u10d4\"},week:{dow:1,doy:7}})}(n(\"wd/R\"))},IjjT:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));let r=(()=>{class t{constructor(e,n=t.now){this.SchedulerAction=e,this.now=n}schedule(t,e=0,n){return new this.SchedulerAction(this,t).schedule(n,e)}}return t.now=()=>Date.now(),t})();class i extends r{constructor(t,e=r.now){super(t,()=>i.delegate&&i.delegate!==this?i.delegate.now():e()),this.actions=[],this.active=!1,this.scheduled=void 0}schedule(t,e=0,n){return i.delegate&&i.delegate!==this?i.delegate.schedule(t,e,n):super.schedule(t,e,n)}flush(t){const{actions:e}=this;if(this.active)return void e.push(t);let n;this.active=!0;do{if(n=t.execute(t.state,t.delay))break}while(t=e.shift());if(this.active=!1,n){for(;t=e.shift();)t.unsubscribe();throw n}}}},\"Ivi+\":function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"ko\",{months:\"1\\uc6d4_2\\uc6d4_3\\uc6d4_4\\uc6d4_5\\uc6d4_6\\uc6d4_7\\uc6d4_8\\uc6d4_9\\uc6d4_10\\uc6d4_11\\uc6d4_12\\uc6d4\".split(\"_\"),monthsShort:\"1\\uc6d4_2\\uc6d4_3\\uc6d4_4\\uc6d4_5\\uc6d4_6\\uc6d4_7\\uc6d4_8\\uc6d4_9\\uc6d4_10\\uc6d4_11\\uc6d4_12\\uc6d4\".split(\"_\"),weekdays:\"\\uc77c\\uc694\\uc77c_\\uc6d4\\uc694\\uc77c_\\ud654\\uc694\\uc77c_\\uc218\\uc694\\uc77c_\\ubaa9\\uc694\\uc77c_\\uae08\\uc694\\uc77c_\\ud1a0\\uc694\\uc77c\".split(\"_\"),weekdaysShort:\"\\uc77c_\\uc6d4_\\ud654_\\uc218_\\ubaa9_\\uae08_\\ud1a0\".split(\"_\"),weekdaysMin:\"\\uc77c_\\uc6d4_\\ud654_\\uc218_\\ubaa9_\\uae08_\\ud1a0\".split(\"_\"),longDateFormat:{LT:\"A h:mm\",LTS:\"A h:mm:ss\",L:\"YYYY.MM.DD.\",LL:\"YYYY\\ub144 MMMM D\\uc77c\",LLL:\"YYYY\\ub144 MMMM D\\uc77c A h:mm\",LLLL:\"YYYY\\ub144 MMMM D\\uc77c dddd A h:mm\",l:\"YYYY.MM.DD.\",ll:\"YYYY\\ub144 MMMM D\\uc77c\",lll:\"YYYY\\ub144 MMMM D\\uc77c A h:mm\",llll:\"YYYY\\ub144 MMMM D\\uc77c dddd A h:mm\"},calendar:{sameDay:\"\\uc624\\ub298 LT\",nextDay:\"\\ub0b4\\uc77c LT\",nextWeek:\"dddd LT\",lastDay:\"\\uc5b4\\uc81c LT\",lastWeek:\"\\uc9c0\\ub09c\\uc8fc dddd LT\",sameElse:\"L\"},relativeTime:{future:\"%s \\ud6c4\",past:\"%s \\uc804\",s:\"\\uba87 \\ucd08\",ss:\"%d\\ucd08\",m:\"1\\ubd84\",mm:\"%d\\ubd84\",h:\"\\ud55c \\uc2dc\\uac04\",hh:\"%d\\uc2dc\\uac04\",d:\"\\ud558\\ub8e8\",dd:\"%d\\uc77c\",M:\"\\ud55c \\ub2ec\",MM:\"%d\\ub2ec\",y:\"\\uc77c \\ub144\",yy:\"%d\\ub144\"},dayOfMonthOrdinalParse:/\\d{1,2}(\\uc77c|\\uc6d4|\\uc8fc)/,ordinal:function(t,e){switch(e){case\"d\":case\"D\":case\"DDD\":return t+\"\\uc77c\";case\"M\":return t+\"\\uc6d4\";case\"w\":case\"W\":return t+\"\\uc8fc\";default:return t}},meridiemParse:/\\uc624\\uc804|\\uc624\\ud6c4/,isPM:function(t){return\"\\uc624\\ud6c4\"===t},meridiem:function(t,e,n){return t<12?\"\\uc624\\uc804\":\"\\uc624\\ud6c4\"}})}(n(\"wd/R\"))},IzEk:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return o}));var r=n(\"7o/Q\"),i=n(\"4I5i\"),a=n(\"EY2u\");function o(t){return e=>0===t?Object(a.b)():e.lift(new s(t))}class s{constructor(t){if(this.total=t,this.total<0)throw new i.a}call(t,e){return e.subscribe(new l(t,this.total))}}class l extends r.a{constructor(t,e){super(t),this.total=e,this.count=0}_next(t){const e=this.total,n=++this.count;n<=e&&(this.destination.next(t),n===e&&(this.destination.complete(),this.unsubscribe()))}}},\"JCF/\":function(t,e,n){!function(t){\"use strict\";var e={1:\"\\u0661\",2:\"\\u0662\",3:\"\\u0663\",4:\"\\u0664\",5:\"\\u0665\",6:\"\\u0666\",7:\"\\u0667\",8:\"\\u0668\",9:\"\\u0669\",0:\"\\u0660\"},n={\"\\u0661\":\"1\",\"\\u0662\":\"2\",\"\\u0663\":\"3\",\"\\u0664\":\"4\",\"\\u0665\":\"5\",\"\\u0666\":\"6\",\"\\u0667\":\"7\",\"\\u0668\":\"8\",\"\\u0669\":\"9\",\"\\u0660\":\"0\"},r=[\"\\u06a9\\u0627\\u0646\\u0648\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\"\\u0634\\u0648\\u0628\\u0627\\u062a\",\"\\u0626\\u0627\\u0632\\u0627\\u0631\",\"\\u0646\\u06cc\\u0633\\u0627\\u0646\",\"\\u0626\\u0627\\u06cc\\u0627\\u0631\",\"\\u062d\\u0648\\u0632\\u06d5\\u06cc\\u0631\\u0627\\u0646\",\"\\u062a\\u06d5\\u0645\\u0645\\u0648\\u0632\",\"\\u0626\\u0627\\u0628\",\"\\u0626\\u06d5\\u06cc\\u0644\\u0648\\u0648\\u0644\",\"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u06cc\\u06d5\\u0643\\u06d5\\u0645\",\"\\u062a\\u0634\\u0631\\u06cc\\u0646\\u06cc \\u062f\\u0648\\u0648\\u06d5\\u0645\",\"\\u0643\\u0627\\u0646\\u0648\\u0646\\u06cc \\u06cc\\u06d5\\u06a9\\u06d5\\u0645\"];t.defineLocale(\"ku\",{months:r,monthsShort:r,weekdays:\"\\u06cc\\u0647\\u200c\\u0643\\u0634\\u0647\\u200c\\u0645\\u0645\\u0647\\u200c_\\u062f\\u0648\\u0648\\u0634\\u0647\\u200c\\u0645\\u0645\\u0647\\u200c_\\u0633\\u06ce\\u0634\\u0647\\u200c\\u0645\\u0645\\u0647\\u200c_\\u0686\\u0648\\u0627\\u0631\\u0634\\u0647\\u200c\\u0645\\u0645\\u0647\\u200c_\\u067e\\u06ce\\u0646\\u062c\\u0634\\u0647\\u200c\\u0645\\u0645\\u0647\\u200c_\\u0647\\u0647\\u200c\\u06cc\\u0646\\u06cc_\\u0634\\u0647\\u200c\\u0645\\u0645\\u0647\\u200c\".split(\"_\"),weekdaysShort:\"\\u06cc\\u0647\\u200c\\u0643\\u0634\\u0647\\u200c\\u0645_\\u062f\\u0648\\u0648\\u0634\\u0647\\u200c\\u0645_\\u0633\\u06ce\\u0634\\u0647\\u200c\\u0645_\\u0686\\u0648\\u0627\\u0631\\u0634\\u0647\\u200c\\u0645_\\u067e\\u06ce\\u0646\\u062c\\u0634\\u0647\\u200c\\u0645_\\u0647\\u0647\\u200c\\u06cc\\u0646\\u06cc_\\u0634\\u0647\\u200c\\u0645\\u0645\\u0647\\u200c\".split(\"_\"),weekdaysMin:\"\\u06cc_\\u062f_\\u0633_\\u0686_\\u067e_\\u0647_\\u0634\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},meridiemParse:/\\u0626\\u06ce\\u0648\\u0627\\u0631\\u0647\\u200c|\\u0628\\u0647\\u200c\\u06cc\\u0627\\u0646\\u06cc/,isPM:function(t){return/\\u0626\\u06ce\\u0648\\u0627\\u0631\\u0647\\u200c/.test(t)},meridiem:function(t,e,n){return t<12?\"\\u0628\\u0647\\u200c\\u06cc\\u0627\\u0646\\u06cc\":\"\\u0626\\u06ce\\u0648\\u0627\\u0631\\u0647\\u200c\"},calendar:{sameDay:\"[\\u0626\\u0647\\u200c\\u0645\\u0631\\u06c6 \\u0643\\u0627\\u062a\\u0698\\u0645\\u06ce\\u0631] LT\",nextDay:\"[\\u0628\\u0647\\u200c\\u06cc\\u0627\\u0646\\u06cc \\u0643\\u0627\\u062a\\u0698\\u0645\\u06ce\\u0631] LT\",nextWeek:\"dddd [\\u0643\\u0627\\u062a\\u0698\\u0645\\u06ce\\u0631] LT\",lastDay:\"[\\u062f\\u0648\\u06ce\\u0646\\u06ce \\u0643\\u0627\\u062a\\u0698\\u0645\\u06ce\\u0631] LT\",lastWeek:\"dddd [\\u0643\\u0627\\u062a\\u0698\\u0645\\u06ce\\u0631] LT\",sameElse:\"L\"},relativeTime:{future:\"\\u0644\\u0647\\u200c %s\",past:\"%s\",s:\"\\u0686\\u0647\\u200c\\u0646\\u062f \\u0686\\u0631\\u0643\\u0647\\u200c\\u06cc\\u0647\\u200c\\u0643\",ss:\"\\u0686\\u0631\\u0643\\u0647\\u200c %d\",m:\"\\u06cc\\u0647\\u200c\\u0643 \\u062e\\u0648\\u0644\\u0647\\u200c\\u0643\",mm:\"%d \\u062e\\u0648\\u0644\\u0647\\u200c\\u0643\",h:\"\\u06cc\\u0647\\u200c\\u0643 \\u0643\\u0627\\u062a\\u0698\\u0645\\u06ce\\u0631\",hh:\"%d \\u0643\\u0627\\u062a\\u0698\\u0645\\u06ce\\u0631\",d:\"\\u06cc\\u0647\\u200c\\u0643 \\u0695\\u06c6\\u0698\",dd:\"%d \\u0695\\u06c6\\u0698\",M:\"\\u06cc\\u0647\\u200c\\u0643 \\u0645\\u0627\\u0646\\u06af\",MM:\"%d \\u0645\\u0627\\u0646\\u06af\",y:\"\\u06cc\\u0647\\u200c\\u0643 \\u0633\\u0627\\u06b5\",yy:\"%d \\u0633\\u0627\\u06b5\"},preparse:function(t){return t.replace(/[\\u0661\\u0662\\u0663\\u0664\\u0665\\u0666\\u0667\\u0668\\u0669\\u0660]/g,(function(t){return n[t]})).replace(/\\u060c/g,\",\")},postformat:function(t){return t.replace(/\\d/g,(function(t){return e[t]})).replace(/,/g,\"\\u060c\")},week:{dow:6,doy:12}})}(n(\"wd/R\"))},JIr8:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));var r=n(\"zx2A\");function i(t){return function(e){const n=new a(t),r=e.lift(n);return n.caught=r}}class a{constructor(t){this.selector=t}call(t,e){return e.subscribe(new o(t,this.selector,this.caught))}}class o extends r.b{constructor(t,e,n){super(t),this.selector=e,this.caught=n}error(t){if(!this.isStopped){let n;try{n=this.selector(t,this.caught)}catch(e){return void super.error(e)}this._unsubscribeAndRecycle();const i=new r.a(this);this.add(i);const a=Object(r.c)(n,i);a!==i&&this.add(a)}}}},JVSJ:function(t,e,n){!function(t){\"use strict\";function e(t,e,n){var r=t+\" \";switch(n){case\"ss\":return r+(1===t?\"sekunda\":2===t||3===t||4===t?\"sekunde\":\"sekundi\");case\"m\":return e?\"jedna minuta\":\"jedne minute\";case\"mm\":return r+(1===t?\"minuta\":2===t||3===t||4===t?\"minute\":\"minuta\");case\"h\":return e?\"jedan sat\":\"jednog sata\";case\"hh\":return r+(1===t?\"sat\":2===t||3===t||4===t?\"sata\":\"sati\");case\"dd\":return r+(1===t?\"dan\":\"dana\");case\"MM\":return r+(1===t?\"mjesec\":2===t||3===t||4===t?\"mjeseca\":\"mjeseci\");case\"yy\":return r+(1===t?\"godina\":2===t||3===t||4===t?\"godine\":\"godina\")}}t.defineLocale(\"bs\",{months:\"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedjelja_ponedjeljak_utorak_srijeda_\\u010detvrtak_petak_subota\".split(\"_\"),weekdaysShort:\"ned._pon._uto._sri._\\u010det._pet._sub.\".split(\"_\"),weekdaysMin:\"ne_po_ut_sr_\\u010de_pe_su\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[danas u] LT\",nextDay:\"[sutra u] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[u] [nedjelju] [u] LT\";case 3:return\"[u] [srijedu] [u] LT\";case 6:return\"[u] [subotu] [u] LT\";case 1:case 2:case 4:case 5:return\"[u] dddd [u] LT\"}},lastDay:\"[ju\\u010der u] LT\",lastWeek:function(){switch(this.day()){case 0:case 3:return\"[pro\\u0161lu] dddd [u] LT\";case 6:return\"[pro\\u0161le] [subote] [u] LT\";case 1:case 2:case 4:case 5:return\"[pro\\u0161li] dddd [u] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"prije %s\",s:\"par sekundi\",ss:e,m:e,mm:e,h:e,hh:e,d:\"dan\",dd:e,M:\"mjesec\",MM:e,y:\"godinu\",yy:e},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(n(\"wd/R\"))},JX91:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return a}));var r=n(\"GyhO\"),i=n(\"z+Ro\");function a(...t){const e=t[t.length-1];return Object(i.a)(e)?(t.pop(),n=>Object(r.a)(t,n,e)):e=>Object(r.a)(t,e)}},JvlW:function(t,e,n){!function(t){\"use strict\";var e={ss:\"sekund\\u0117_sekund\\u017ei\\u0173_sekundes\",m:\"minut\\u0117_minut\\u0117s_minut\\u0119\",mm:\"minut\\u0117s_minu\\u010di\\u0173_minutes\",h:\"valanda_valandos_valand\\u0105\",hh:\"valandos_valand\\u0173_valandas\",d:\"diena_dienos_dien\\u0105\",dd:\"dienos_dien\\u0173_dienas\",M:\"m\\u0117nuo_m\\u0117nesio_m\\u0117nes\\u012f\",MM:\"m\\u0117nesiai_m\\u0117nesi\\u0173_m\\u0117nesius\",y:\"metai_met\\u0173_metus\",yy:\"metai_met\\u0173_metus\"};function n(t,e,n,r){return e?i(n)[0]:r?i(n)[1]:i(n)[2]}function r(t){return t%10==0||t>10&&t<20}function i(t){return e[t].split(\"_\")}function a(t,e,a,o){var s=t+\" \";return 1===t?s+n(0,e,a[0],o):e?s+(r(t)?i(a)[1]:i(a)[0]):o?s+i(a)[1]:s+(r(t)?i(a)[1]:i(a)[2])}t.defineLocale(\"lt\",{months:{format:\"sausio_vasario_kovo_baland\\u017eio_gegu\\u017e\\u0117s_bir\\u017eelio_liepos_rugpj\\u016b\\u010dio_rugs\\u0117jo_spalio_lapkri\\u010dio_gruod\\u017eio\".split(\"_\"),standalone:\"sausis_vasaris_kovas_balandis_gegu\\u017e\\u0117_bir\\u017eelis_liepa_rugpj\\u016btis_rugs\\u0117jis_spalis_lapkritis_gruodis\".split(\"_\"),isFormat:/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/},monthsShort:\"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd\".split(\"_\"),weekdays:{format:\"sekmadien\\u012f_pirmadien\\u012f_antradien\\u012f_tre\\u010diadien\\u012f_ketvirtadien\\u012f_penktadien\\u012f_\\u0161e\\u0161tadien\\u012f\".split(\"_\"),standalone:\"sekmadienis_pirmadienis_antradienis_tre\\u010diadienis_ketvirtadienis_penktadienis_\\u0161e\\u0161tadienis\".split(\"_\"),isFormat:/dddd HH:mm/},weekdaysShort:\"Sek_Pir_Ant_Tre_Ket_Pen_\\u0160e\\u0161\".split(\"_\"),weekdaysMin:\"S_P_A_T_K_Pn_\\u0160\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"YYYY [m.] MMMM D [d.]\",LLL:\"YYYY [m.] MMMM D [d.], HH:mm [val.]\",LLLL:\"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]\",l:\"YYYY-MM-DD\",ll:\"YYYY [m.] MMMM D [d.]\",lll:\"YYYY [m.] MMMM D [d.], HH:mm [val.]\",llll:\"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]\"},calendar:{sameDay:\"[\\u0160iandien] LT\",nextDay:\"[Rytoj] LT\",nextWeek:\"dddd LT\",lastDay:\"[Vakar] LT\",lastWeek:\"[Pra\\u0117jus\\u012f] dddd LT\",sameElse:\"L\"},relativeTime:{future:\"po %s\",past:\"prie\\u0161 %s\",s:function(t,e,n,r){return e?\"kelios sekund\\u0117s\":r?\"keli\\u0173 sekund\\u017ei\\u0173\":\"kelias sekundes\"},ss:a,m:n,mm:a,h:n,hh:a,d:n,dd:a,M:n,MM:a,y:n,yy:a},dayOfMonthOrdinalParse:/\\d{1,2}-oji/,ordinal:function(t){return t+\"-oji\"},week:{dow:1,doy:4}})}(n(\"wd/R\"))},\"K/tc\":function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"af\",{months:\"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember\".split(\"_\"),monthsShort:\"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des\".split(\"_\"),weekdays:\"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag\".split(\"_\"),weekdaysShort:\"Son_Maa_Din_Woe_Don_Vry_Sat\".split(\"_\"),weekdaysMin:\"So_Ma_Di_Wo_Do_Vr_Sa\".split(\"_\"),meridiemParse:/vm|nm/i,isPM:function(t){return/^nm$/i.test(t)},meridiem:function(t,e,n){return t<12?n?\"vm\":\"VM\":n?\"nm\":\"NM\"},longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Vandag om] LT\",nextDay:\"[M\\xf4re om] LT\",nextWeek:\"dddd [om] LT\",lastDay:\"[Gister om] LT\",lastWeek:\"[Laas] dddd [om] LT\",sameElse:\"L\"},relativeTime:{future:\"oor %s\",past:\"%s gelede\",s:\"'n paar sekondes\",ss:\"%d sekondes\",m:\"'n minuut\",mm:\"%d minute\",h:\"'n uur\",hh:\"%d ure\",d:\"'n dag\",dd:\"%d dae\",M:\"'n maand\",MM:\"%d maande\",y:\"'n jaar\",yy:\"%d jaar\"},dayOfMonthOrdinalParse:/\\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?\"ste\":\"de\")},week:{dow:1,doy:4}})}(n(\"wd/R\"))},KSF8:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"vi\",{months:\"th\\xe1ng 1_th\\xe1ng 2_th\\xe1ng 3_th\\xe1ng 4_th\\xe1ng 5_th\\xe1ng 6_th\\xe1ng 7_th\\xe1ng 8_th\\xe1ng 9_th\\xe1ng 10_th\\xe1ng 11_th\\xe1ng 12\".split(\"_\"),monthsShort:\"Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12\".split(\"_\"),monthsParseExact:!0,weekdays:\"ch\\u1ee7 nh\\u1eadt_th\\u1ee9 hai_th\\u1ee9 ba_th\\u1ee9 t\\u01b0_th\\u1ee9 n\\u0103m_th\\u1ee9 s\\xe1u_th\\u1ee9 b\\u1ea3y\".split(\"_\"),weekdaysShort:\"CN_T2_T3_T4_T5_T6_T7\".split(\"_\"),weekdaysMin:\"CN_T2_T3_T4_T5_T6_T7\".split(\"_\"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(t){return/^ch$/i.test(t)},meridiem:function(t,e,n){return t<12?n?\"sa\":\"SA\":n?\"ch\":\"CH\"},longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM [n\\u0103m] YYYY\",LLL:\"D MMMM [n\\u0103m] YYYY HH:mm\",LLLL:\"dddd, D MMMM [n\\u0103m] YYYY HH:mm\",l:\"DD/M/YYYY\",ll:\"D MMM YYYY\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd, D MMM YYYY HH:mm\"},calendar:{sameDay:\"[H\\xf4m nay l\\xfac] LT\",nextDay:\"[Ng\\xe0y mai l\\xfac] LT\",nextWeek:\"dddd [tu\\u1ea7n t\\u1edbi l\\xfac] LT\",lastDay:\"[H\\xf4m qua l\\xfac] LT\",lastWeek:\"dddd [tu\\u1ea7n tr\\u01b0\\u1edbc l\\xfac] LT\",sameElse:\"L\"},relativeTime:{future:\"%s t\\u1edbi\",past:\"%s tr\\u01b0\\u1edbc\",s:\"v\\xe0i gi\\xe2y\",ss:\"%d gi\\xe2y\",m:\"m\\u1ed9t ph\\xfat\",mm:\"%d ph\\xfat\",h:\"m\\u1ed9t gi\\u1edd\",hh:\"%d gi\\u1edd\",d:\"m\\u1ed9t ng\\xe0y\",dd:\"%d ng\\xe0y\",w:\"m\\u1ed9t tu\\u1ea7n\",ww:\"%d tu\\u1ea7n\",M:\"m\\u1ed9t th\\xe1ng\",MM:\"%d th\\xe1ng\",y:\"m\\u1ed9t n\\u0103m\",yy:\"%d n\\u0103m\"},dayOfMonthOrdinalParse:/\\d{1,2}/,ordinal:function(t){return t},week:{dow:1,doy:4}})}(n(\"wd/R\"))},KTz0:function(t,e,n){!function(t){\"use strict\";var e={words:{ss:[\"sekund\",\"sekunda\",\"sekundi\"],m:[\"jedan minut\",\"jednog minuta\"],mm:[\"minut\",\"minuta\",\"minuta\"],h:[\"jedan sat\",\"jednog sata\"],hh:[\"sat\",\"sata\",\"sati\"],dd:[\"dan\",\"dana\",\"dana\"],MM:[\"mjesec\",\"mjeseca\",\"mjeseci\"],yy:[\"godina\",\"godine\",\"godina\"]},correctGrammaticalCase:function(t,e){return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,r){var i=e.words[r];return 1===r.length?n?i[0]:i[1]:t+\" \"+e.correctGrammaticalCase(t,i)}};t.defineLocale(\"me\",{months:\"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedjelja_ponedjeljak_utorak_srijeda_\\u010detvrtak_petak_subota\".split(\"_\"),weekdaysShort:\"ned._pon._uto._sri._\\u010det._pet._sub.\".split(\"_\"),weekdaysMin:\"ne_po_ut_sr_\\u010de_pe_su\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[danas u] LT\",nextDay:\"[sjutra u] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[u] [nedjelju] [u] LT\";case 3:return\"[u] [srijedu] [u] LT\";case 6:return\"[u] [subotu] [u] LT\";case 1:case 2:case 4:case 5:return\"[u] dddd [u] LT\"}},lastDay:\"[ju\\u010de u] LT\",lastWeek:function(){return[\"[pro\\u0161le] [nedjelje] [u] LT\",\"[pro\\u0161log] [ponedjeljka] [u] LT\",\"[pro\\u0161log] [utorka] [u] LT\",\"[pro\\u0161le] [srijede] [u] LT\",\"[pro\\u0161log] [\\u010detvrtka] [u] LT\",\"[pro\\u0161log] [petka] [u] LT\",\"[pro\\u0161le] [subote] [u] LT\"][this.day()]},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"prije %s\",s:\"nekoliko sekundi\",ss:e.translate,m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:\"dan\",dd:e.translate,M:\"mjesec\",MM:e.translate,y:\"godinu\",yy:e.translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(n(\"wd/R\"))},Kj3r:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return a}));var r=n(\"7o/Q\"),i=n(\"D0XW\");function a(t,e=i.a){return n=>n.lift(new o(t,e))}class o{constructor(t,e){this.dueTime=t,this.scheduler=e}call(t,e){return e.subscribe(new s(t,this.dueTime,this.scheduler))}}class s extends r.a{constructor(t,e,n){super(t),this.dueTime=e,this.scheduler=n,this.debouncedSubscription=null,this.lastValue=null,this.hasValue=!1}_next(t){this.clearDebounce(),this.lastValue=t,this.hasValue=!0,this.add(this.debouncedSubscription=this.scheduler.schedule(l,this.dueTime,this))}_complete(){this.debouncedNext(),this.destination.complete()}debouncedNext(){if(this.clearDebounce(),this.hasValue){const{lastValue:t}=this;this.lastValue=null,this.hasValue=!1,this.destination.next(t)}}clearDebounce(){const t=this.debouncedSubscription;null!==t&&(this.remove(t),t.unsubscribe(),this.debouncedSubscription=null)}}function l(t){t.debouncedNext()}},KkKq:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));var r=n(\"fXoL\");let i=(()=>{class t{transform(t){if(null!==t)return Math.floor(100*t.value/t.maxValue)}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275pipe=r.Wb({name:\"progressWidth\",type:t,pure:!0}),t})()},LRne:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return o}));var r=n(\"z+Ro\"),i=n(\"yCtX\"),a=n(\"jZKg\");function o(...t){let e=t[t.length-1];return Object(r.a)(e)?(t.pop(),Object(a.a)(t,e)):Object(i.a)(t)}},Lhse:function(t,e,n){\"use strict\";function r(){return\"function\"==typeof Symbol&&Symbol.iterator?Symbol.iterator:\"@@iterator\"}n.d(e,\"a\",(function(){return i}));const i=r()},Loxo:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"uz\",{months:\"\\u044f\\u043d\\u0432\\u0430\\u0440_\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b_\\u043c\\u0430\\u0440\\u0442_\\u0430\\u043f\\u0440\\u0435\\u043b_\\u043c\\u0430\\u0439_\\u0438\\u044e\\u043d_\\u0438\\u044e\\u043b_\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442_\\u0441\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440_\\u043e\\u043a\\u0442\\u044f\\u0431\\u0440_\\u043d\\u043e\\u044f\\u0431\\u0440_\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\".split(\"_\"),monthsShort:\"\\u044f\\u043d\\u0432_\\u0444\\u0435\\u0432_\\u043c\\u0430\\u0440_\\u0430\\u043f\\u0440_\\u043c\\u0430\\u0439_\\u0438\\u044e\\u043d_\\u0438\\u044e\\u043b_\\u0430\\u0432\\u0433_\\u0441\\u0435\\u043d_\\u043e\\u043a\\u0442_\\u043d\\u043e\\u044f_\\u0434\\u0435\\u043a\".split(\"_\"),weekdays:\"\\u042f\\u043a\\u0448\\u0430\\u043d\\u0431\\u0430_\\u0414\\u0443\\u0448\\u0430\\u043d\\u0431\\u0430_\\u0421\\u0435\\u0448\\u0430\\u043d\\u0431\\u0430_\\u0427\\u043e\\u0440\\u0448\\u0430\\u043d\\u0431\\u0430_\\u041f\\u0430\\u0439\\u0448\\u0430\\u043d\\u0431\\u0430_\\u0416\\u0443\\u043c\\u0430_\\u0428\\u0430\\u043d\\u0431\\u0430\".split(\"_\"),weekdaysShort:\"\\u042f\\u043a\\u0448_\\u0414\\u0443\\u0448_\\u0421\\u0435\\u0448_\\u0427\\u043e\\u0440_\\u041f\\u0430\\u0439_\\u0416\\u0443\\u043c_\\u0428\\u0430\\u043d\".split(\"_\"),weekdaysMin:\"\\u042f\\u043a_\\u0414\\u0443_\\u0421\\u0435_\\u0427\\u043e_\\u041f\\u0430_\\u0416\\u0443_\\u0428\\u0430\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"D MMMM YYYY, dddd HH:mm\"},calendar:{sameDay:\"[\\u0411\\u0443\\u0433\\u0443\\u043d \\u0441\\u043e\\u0430\\u0442] LT [\\u0434\\u0430]\",nextDay:\"[\\u042d\\u0440\\u0442\\u0430\\u0433\\u0430] LT [\\u0434\\u0430]\",nextWeek:\"dddd [\\u043a\\u0443\\u043d\\u0438 \\u0441\\u043e\\u0430\\u0442] LT [\\u0434\\u0430]\",lastDay:\"[\\u041a\\u0435\\u0447\\u0430 \\u0441\\u043e\\u0430\\u0442] LT [\\u0434\\u0430]\",lastWeek:\"[\\u0423\\u0442\\u0433\\u0430\\u043d] dddd [\\u043a\\u0443\\u043d\\u0438 \\u0441\\u043e\\u0430\\u0442] LT [\\u0434\\u0430]\",sameElse:\"L\"},relativeTime:{future:\"\\u042f\\u043a\\u0438\\u043d %s \\u0438\\u0447\\u0438\\u0434\\u0430\",past:\"\\u0411\\u0438\\u0440 \\u043d\\u0435\\u0447\\u0430 %s \\u043e\\u043b\\u0434\\u0438\\u043d\",s:\"\\u0444\\u0443\\u0440\\u0441\\u0430\\u0442\",ss:\"%d \\u0444\\u0443\\u0440\\u0441\\u0430\\u0442\",m:\"\\u0431\\u0438\\u0440 \\u0434\\u0430\\u043a\\u0438\\u043a\\u0430\",mm:\"%d \\u0434\\u0430\\u043a\\u0438\\u043a\\u0430\",h:\"\\u0431\\u0438\\u0440 \\u0441\\u043e\\u0430\\u0442\",hh:\"%d \\u0441\\u043e\\u0430\\u0442\",d:\"\\u0431\\u0438\\u0440 \\u043a\\u0443\\u043d\",dd:\"%d \\u043a\\u0443\\u043d\",M:\"\\u0431\\u0438\\u0440 \\u043e\\u0439\",MM:\"%d \\u043e\\u0439\",y:\"\\u0431\\u0438\\u0440 \\u0439\\u0438\\u043b\",yy:\"%d \\u0439\\u0438\\u043b\"},week:{dow:1,doy:7}})}(n(\"wd/R\"))},M9IT:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return M})),n.d(e,\"b\",(function(){return T}));var r=n(\"ofXK\"),i=n(\"fXoL\"),a=n(\"FKr1\"),o=n(\"bTqV\"),s=n(\"d3UM\"),l=n(\"Qu3c\"),c=n(\"8LU1\"),u=n(\"XNiG\"),h=n(\"kmnG\");function d(t,e){if(1&t&&(i.dc(0,\"mat-option\",19),i.Oc(1),i.cc()),2&t){const t=e.$implicit;i.vc(\"value\",t),i.Lb(1),i.Qc(\" \",t,\" \")}}function f(t,e){if(1&t){const t=i.ec();i.dc(0,\"mat-form-field\",16),i.dc(1,\"mat-select\",17),i.lc(\"selectionChange\",(function(e){return i.Ec(t),i.pc(2)._changePageSize(e.value)})),i.Mc(2,d,2,2,\"mat-option\",18),i.cc(),i.cc()}if(2&t){const t=i.pc(2);i.vc(\"appearance\",t._formFieldAppearance)(\"color\",t.color),i.Lb(1),i.vc(\"value\",t.pageSize)(\"disabled\",t.disabled)(\"aria-label\",t._intl.itemsPerPageLabel),i.Lb(1),i.vc(\"ngForOf\",t._displayedPageSizeOptions)}}function p(t,e){if(1&t&&(i.dc(0,\"div\",20),i.Oc(1),i.cc()),2&t){const t=i.pc(2);i.Lb(1),i.Pc(t.pageSize)}}function m(t,e){if(1&t&&(i.dc(0,\"div\",12),i.dc(1,\"div\",13),i.Oc(2),i.cc(),i.Mc(3,f,3,6,\"mat-form-field\",14),i.Mc(4,p,2,1,\"div\",15),i.cc()),2&t){const t=i.pc();i.Lb(2),i.Qc(\" \",t._intl.itemsPerPageLabel,\" \"),i.Lb(1),i.vc(\"ngIf\",t._displayedPageSizeOptions.length>1),i.Lb(1),i.vc(\"ngIf\",t._displayedPageSizeOptions.length<=1)}}function g(t,e){if(1&t){const t=i.ec();i.dc(0,\"button\",21),i.lc(\"click\",(function(){return i.Ec(t),i.pc().firstPage()})),i.oc(),i.dc(1,\"svg\",7),i.Yb(2,\"path\",22),i.cc(),i.cc()}if(2&t){const t=i.pc();i.vc(\"matTooltip\",t._intl.firstPageLabel)(\"matTooltipDisabled\",t._previousButtonsDisabled())(\"matTooltipPosition\",\"above\")(\"disabled\",t._previousButtonsDisabled()),i.Mb(\"aria-label\",t._intl.firstPageLabel)}}function y(t,e){if(1&t){const t=i.ec();i.oc(),i.nc(),i.dc(0,\"button\",23),i.lc(\"click\",(function(){return i.Ec(t),i.pc().lastPage()})),i.oc(),i.dc(1,\"svg\",7),i.Yb(2,\"path\",24),i.cc(),i.cc()}if(2&t){const t=i.pc();i.vc(\"matTooltip\",t._intl.lastPageLabel)(\"matTooltipDisabled\",t._nextButtonsDisabled())(\"matTooltipPosition\",\"above\")(\"disabled\",t._nextButtonsDisabled()),i.Mb(\"aria-label\",t._intl.lastPageLabel)}}let v=(()=>{class t{constructor(){this.changes=new u.a,this.itemsPerPageLabel=\"Items per page:\",this.nextPageLabel=\"Next page\",this.previousPageLabel=\"Previous page\",this.firstPageLabel=\"First page\",this.lastPageLabel=\"Last page\",this.getRangeLabel=(t,e,n)=>{if(0==n||0==e)return\"0 of \"+n;const r=t*e;return`${r+1} \\u2013 ${r<(n=Math.max(n,0))?Math.min(r+e,n):r+e} of ${n}`}}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=Object(i.Tb)({factory:function(){return new t},token:t,providedIn:\"root\"}),t})();const _={provide:v,deps:[[new i.I,new i.T,v]],useFactory:function(t){return t||new v}},b=new i.w(\"MAT_PAGINATOR_DEFAULT_OPTIONS\");class x{}const w=Object(a.y)(Object(a.A)(x));let k=(()=>{class t extends w{constructor(t,e,n){if(super(),this._intl=t,this._changeDetectorRef=e,this._pageIndex=0,this._length=0,this._pageSizeOptions=[],this._hidePageSize=!1,this._showFirstLastButtons=!1,this.page=new i.s,this._intlChanges=t.changes.subscribe(()=>this._changeDetectorRef.markForCheck()),n){const{pageSize:t,pageSizeOptions:e,hidePageSize:r,showFirstLastButtons:i}=n;null!=t&&(this._pageSize=t),null!=e&&(this._pageSizeOptions=e),null!=r&&(this._hidePageSize=r),null!=i&&(this._showFirstLastButtons=i)}}get pageIndex(){return this._pageIndex}set pageIndex(t){this._pageIndex=Math.max(Object(c.f)(t),0),this._changeDetectorRef.markForCheck()}get length(){return this._length}set length(t){this._length=Object(c.f)(t),this._changeDetectorRef.markForCheck()}get pageSize(){return this._pageSize}set pageSize(t){this._pageSize=Math.max(Object(c.f)(t),0),this._updateDisplayedPageSizeOptions()}get pageSizeOptions(){return this._pageSizeOptions}set pageSizeOptions(t){this._pageSizeOptions=(t||[]).map(t=>Object(c.f)(t)),this._updateDisplayedPageSizeOptions()}get hidePageSize(){return this._hidePageSize}set hidePageSize(t){this._hidePageSize=Object(c.c)(t)}get showFirstLastButtons(){return this._showFirstLastButtons}set showFirstLastButtons(t){this._showFirstLastButtons=Object(c.c)(t)}ngOnInit(){this._initialized=!0,this._updateDisplayedPageSizeOptions(),this._markInitialized()}ngOnDestroy(){this._intlChanges.unsubscribe()}nextPage(){if(!this.hasNextPage())return;const t=this.pageIndex;this.pageIndex++,this._emitPageEvent(t)}previousPage(){if(!this.hasPreviousPage())return;const t=this.pageIndex;this.pageIndex--,this._emitPageEvent(t)}firstPage(){if(!this.hasPreviousPage())return;const t=this.pageIndex;this.pageIndex=0,this._emitPageEvent(t)}lastPage(){if(!this.hasNextPage())return;const t=this.pageIndex;this.pageIndex=this.getNumberOfPages()-1,this._emitPageEvent(t)}hasPreviousPage(){return this.pageIndex>=1&&0!=this.pageSize}hasNextPage(){const t=this.getNumberOfPages()-1;return this.pageIndex<t&&0!=this.pageSize}getNumberOfPages(){return this.pageSize?Math.ceil(this.length/this.pageSize):0}_changePageSize(t){const e=this.pageIndex;this.pageIndex=Math.floor(this.pageIndex*this.pageSize/t)||0,this.pageSize=t,this._emitPageEvent(e)}_nextButtonsDisabled(){return this.disabled||!this.hasNextPage()}_previousButtonsDisabled(){return this.disabled||!this.hasPreviousPage()}_updateDisplayedPageSizeOptions(){this._initialized&&(this.pageSize||(this._pageSize=0!=this.pageSizeOptions.length?this.pageSizeOptions[0]:50),this._displayedPageSizeOptions=this.pageSizeOptions.slice(),-1===this._displayedPageSizeOptions.indexOf(this.pageSize)&&this._displayedPageSizeOptions.push(this.pageSize),this._displayedPageSizeOptions.sort((t,e)=>t-e),this._changeDetectorRef.markForCheck())}_emitPageEvent(t){this.page.emit({previousPageIndex:t,pageIndex:this.pageIndex,pageSize:this.pageSize,length:this.length})}}return t.\\u0275fac=function(e){return new(e||t)(i.Xb(v),i.Xb(i.j),i.Xb(void 0))},t.\\u0275dir=i.Sb({type:t,inputs:{pageIndex:\"pageIndex\",length:\"length\",pageSize:\"pageSize\",pageSizeOptions:\"pageSizeOptions\",hidePageSize:\"hidePageSize\",showFirstLastButtons:\"showFirstLastButtons\",color:\"color\"},outputs:{page:\"page\"},features:[i.Ib]}),t})(),M=(()=>{class t extends k{constructor(t,e,n){super(t,e,n),n&&null!=n.formFieldAppearance&&(this._formFieldAppearance=n.formFieldAppearance)}}return t.\\u0275fac=function(e){return new(e||t)(i.Xb(v),i.Xb(i.j),i.Xb(b,8))},t.\\u0275cmp=i.Rb({type:t,selectors:[[\"mat-paginator\"]],hostAttrs:[1,\"mat-paginator\"],inputs:{disabled:\"disabled\"},exportAs:[\"matPaginator\"],features:[i.Ib],decls:14,vars:14,consts:[[1,\"mat-paginator-outer-container\"],[1,\"mat-paginator-container\"],[\"class\",\"mat-paginator-page-size\",4,\"ngIf\"],[1,\"mat-paginator-range-actions\"],[1,\"mat-paginator-range-label\"],[\"mat-icon-button\",\"\",\"type\",\"button\",\"class\",\"mat-paginator-navigation-first\",3,\"matTooltip\",\"matTooltipDisabled\",\"matTooltipPosition\",\"disabled\",\"click\",4,\"ngIf\"],[\"mat-icon-button\",\"\",\"type\",\"button\",1,\"mat-paginator-navigation-previous\",3,\"matTooltip\",\"matTooltipDisabled\",\"matTooltipPosition\",\"disabled\",\"click\"],[\"viewBox\",\"0 0 24 24\",\"focusable\",\"false\",1,\"mat-paginator-icon\"],[\"d\",\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"],[\"mat-icon-button\",\"\",\"type\",\"button\",1,\"mat-paginator-navigation-next\",3,\"matTooltip\",\"matTooltipDisabled\",\"matTooltipPosition\",\"disabled\",\"click\"],[\"d\",\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"],[\"mat-icon-button\",\"\",\"type\",\"button\",\"class\",\"mat-paginator-navigation-last\",3,\"matTooltip\",\"matTooltipDisabled\",\"matTooltipPosition\",\"disabled\",\"click\",4,\"ngIf\"],[1,\"mat-paginator-page-size\"],[1,\"mat-paginator-page-size-label\"],[\"class\",\"mat-paginator-page-size-select\",3,\"appearance\",\"color\",4,\"ngIf\"],[\"class\",\"mat-paginator-page-size-value\",4,\"ngIf\"],[1,\"mat-paginator-page-size-select\",3,\"appearance\",\"color\"],[3,\"value\",\"disabled\",\"aria-label\",\"selectionChange\"],[3,\"value\",4,\"ngFor\",\"ngForOf\"],[3,\"value\"],[1,\"mat-paginator-page-size-value\"],[\"mat-icon-button\",\"\",\"type\",\"button\",1,\"mat-paginator-navigation-first\",3,\"matTooltip\",\"matTooltipDisabled\",\"matTooltipPosition\",\"disabled\",\"click\"],[\"d\",\"M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z\"],[\"mat-icon-button\",\"\",\"type\",\"button\",1,\"mat-paginator-navigation-last\",3,\"matTooltip\",\"matTooltipDisabled\",\"matTooltipPosition\",\"disabled\",\"click\"],[\"d\",\"M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z\"]],template:function(t,e){1&t&&(i.dc(0,\"div\",0),i.dc(1,\"div\",1),i.Mc(2,m,5,3,\"div\",2),i.dc(3,\"div\",3),i.dc(4,\"div\",4),i.Oc(5),i.cc(),i.Mc(6,g,3,5,\"button\",5),i.dc(7,\"button\",6),i.lc(\"click\",(function(){return e.previousPage()})),i.oc(),i.dc(8,\"svg\",7),i.Yb(9,\"path\",8),i.cc(),i.cc(),i.nc(),i.dc(10,\"button\",9),i.lc(\"click\",(function(){return e.nextPage()})),i.oc(),i.dc(11,\"svg\",7),i.Yb(12,\"path\",10),i.cc(),i.cc(),i.Mc(13,y,3,5,\"button\",11),i.cc(),i.cc(),i.cc()),2&t&&(i.Lb(2),i.vc(\"ngIf\",!e.hidePageSize),i.Lb(3),i.Qc(\" \",e._intl.getRangeLabel(e.pageIndex,e.pageSize,e.length),\" \"),i.Lb(1),i.vc(\"ngIf\",e.showFirstLastButtons),i.Lb(1),i.vc(\"matTooltip\",e._intl.previousPageLabel)(\"matTooltipDisabled\",e._previousButtonsDisabled())(\"matTooltipPosition\",\"above\")(\"disabled\",e._previousButtonsDisabled()),i.Mb(\"aria-label\",e._intl.previousPageLabel),i.Lb(3),i.vc(\"matTooltip\",e._intl.nextPageLabel)(\"matTooltipDisabled\",e._nextButtonsDisabled())(\"matTooltipPosition\",\"above\")(\"disabled\",e._nextButtonsDisabled()),i.Mb(\"aria-label\",e._intl.nextPageLabel),i.Lb(3),i.vc(\"ngIf\",e.showFirstLastButtons))},directives:[r.o,o.b,l.a,h.c,s.a,r.n,a.m],styles:[\".mat-paginator{display:block}.mat-paginator-outer-container{display:flex}.mat-paginator-container{display:flex;align-items:center;justify-content:flex-end;padding:0 8px;flex-wrap:wrap-reverse;width:100%}.mat-paginator-page-size{display:flex;align-items:baseline;margin-right:8px}[dir=rtl] .mat-paginator-page-size{margin-right:0;margin-left:8px}.mat-paginator-page-size-label{margin:0 4px}.mat-paginator-page-size-select{margin:6px 4px 0 4px;width:56px}.mat-paginator-page-size-select.mat-form-field-appearance-outline{width:64px}.mat-paginator-page-size-select.mat-form-field-appearance-fill{width:64px}.mat-paginator-range-label{margin:0 32px 0 24px}.mat-paginator-range-actions{display:flex;align-items:center}.mat-paginator-icon{width:28px;fill:currentColor}[dir=rtl] .mat-paginator-icon{transform:rotate(180deg)}\\n\"],encapsulation:2,changeDetection:0}),t})(),T=(()=>{class t{}return t.\\u0275mod=i.Vb({type:t}),t.\\u0275inj=i.Ub({factory:function(e){return new(e||t)},providers:[_],imports:[[r.c,o.c,s.b,l.b,a.i]]}),t})()},MutI:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return k})),n.d(e,\"b\",(function(){return M})),n.d(e,\"c\",(function(){return _}));var r=n(\"ofXK\"),i=n(\"fXoL\"),a=n(\"FKr1\"),o=n(\"8LU1\"),s=n(\"XNiG\"),l=n(\"1G5W\");n(\"JX91\"),n(\"u47x\"),n(\"0EQZ\"),n(\"FtGj\"),n(\"3Pt+\");let c=(()=>{class t{}return t.\\u0275mod=i.Vb({type:t}),t.\\u0275inj=i.Ub({factory:function(e){return new(e||t)},imports:[[a.i],a.i]}),t})();const u=[\"*\"],h=[[[\"\",\"mat-list-avatar\",\"\"],[\"\",\"mat-list-icon\",\"\"],[\"\",\"matListAvatar\",\"\"],[\"\",\"matListIcon\",\"\"]],[[\"\",\"mat-line\",\"\"],[\"\",\"matLine\",\"\"]],\"*\"],d=[\"[mat-list-avatar], [mat-list-icon], [matListAvatar], [matListIcon]\",\"[mat-line], [matLine]\",\"*\"];class f{}const p=Object(a.y)(Object(a.x)(f));class m{}const g=Object(a.x)(m),y=new i.w(\"MatList\"),v=new i.w(\"MatNavList\");let _=(()=>{class t extends p{constructor(){super(...arguments),this._stateChanges=new s.a}ngOnChanges(){this._stateChanges.next()}ngOnDestroy(){this._stateChanges.complete()}}return t.\\u0275fac=function(e){return b(e||t)},t.\\u0275cmp=i.Rb({type:t,selectors:[[\"mat-nav-list\"]],hostAttrs:[\"role\",\"navigation\",1,\"mat-nav-list\",\"mat-list-base\"],inputs:{disableRipple:\"disableRipple\",disabled:\"disabled\"},exportAs:[\"matNavList\"],features:[i.Kb([{provide:v,useExisting:t}]),i.Ib,i.Jb],ngContentSelectors:u,decls:1,vars:0,template:function(t,e){1&t&&(i.uc(),i.tc(0))},styles:['.mat-subheader{display:flex;box-sizing:border-box;padding:16px;align-items:center}.mat-list-base .mat-subheader{margin:0}.mat-list-base{padding-top:8px;display:block;-webkit-tap-highlight-color:transparent}.mat-list-base .mat-subheader{height:48px;line-height:16px}.mat-list-base .mat-subheader:first-child{margin-top:-8px}.mat-list-base .mat-list-item,.mat-list-base .mat-list-option{display:block;height:48px;-webkit-tap-highlight-color:transparent;width:100%;padding:0}.mat-list-base .mat-list-item .mat-list-item-content,.mat-list-base .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base .mat-list-item .mat-list-item-content-reverse,.mat-list-base .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base .mat-list-item .mat-list-item-ripple,.mat-list-base .mat-list-option .mat-list-item-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar,.mat-list-base .mat-list-option.mat-list-item-with-avatar{height:56px}.mat-list-base .mat-list-item.mat-2-line,.mat-list-base .mat-list-option.mat-2-line{height:72px}.mat-list-base .mat-list-item.mat-3-line,.mat-list-base .mat-list-option.mat-3-line{height:88px}.mat-list-base .mat-list-item.mat-multi-line,.mat-list-base .mat-list-option.mat-multi-line{height:auto}.mat-list-base .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base .mat-list-item .mat-list-text,.mat-list-base .mat-list-option .mat-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base .mat-list-item .mat-list-text>*,.mat-list-base .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base .mat-list-item .mat-list-text:empty,.mat-list-base .mat-list-option .mat-list-text:empty{display:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base .mat-list-item .mat-list-avatar,.mat-list-base .mat-list-option .mat-list-avatar{flex-shrink:0;width:40px;height:40px;border-radius:50%;object-fit:cover}.mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:72px;width:calc(100% - 72px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:72px}.mat-list-base .mat-list-item .mat-list-icon,.mat-list-base .mat-list-option .mat-list-icon{flex-shrink:0;width:24px;height:24px;font-size:24px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:64px;width:calc(100% - 64px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:64px}.mat-list-base .mat-list-item .mat-divider,.mat-list-base .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base .mat-list-item .mat-divider,[dir=rtl] .mat-list-base .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-list-base[dense]{padding-top:4px;display:block}.mat-list-base[dense] .mat-subheader{height:40px;line-height:8px}.mat-list-base[dense] .mat-subheader:first-child{margin-top:-4px}.mat-list-base[dense] .mat-list-item,.mat-list-base[dense] .mat-list-option{display:block;height:40px;-webkit-tap-highlight-color:transparent;width:100%;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-item-content,.mat-list-base[dense] .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base[dense] .mat-list-item .mat-list-item-content-reverse,.mat-list-base[dense] .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base[dense] .mat-list-item .mat-list-item-ripple,.mat-list-base[dense] .mat-list-option .mat-list-item-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar{height:48px}.mat-list-base[dense] .mat-list-item.mat-2-line,.mat-list-base[dense] .mat-list-option.mat-2-line{height:60px}.mat-list-base[dense] .mat-list-item.mat-3-line,.mat-list-base[dense] .mat-list-option.mat-3-line{height:76px}.mat-list-base[dense] .mat-list-item.mat-multi-line,.mat-list-base[dense] .mat-list-option.mat-multi-line{height:auto}.mat-list-base[dense] .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base[dense] .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base[dense] .mat-list-item .mat-list-text,.mat-list-base[dense] .mat-list-option .mat-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-text>*,.mat-list-base[dense] .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base[dense] .mat-list-item .mat-list-text:empty,.mat-list-base[dense] .mat-list-option .mat-list-text:empty{display:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base[dense] .mat-list-item .mat-list-avatar,.mat-list-base[dense] .mat-list-option .mat-list-avatar{flex-shrink:0;width:36px;height:36px;border-radius:50%;object-fit:cover}.mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:68px;width:calc(100% - 68px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:68px}.mat-list-base[dense] .mat-list-item .mat-list-icon,.mat-list-base[dense] .mat-list-option .mat-list-icon{flex-shrink:0;width:20px;height:20px;font-size:20px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:60px;width:calc(100% - 60px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:60px}.mat-list-base[dense] .mat-list-item .mat-divider,.mat-list-base[dense] .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-divider,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base[dense] .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-nav-list a{text-decoration:none;color:inherit}.mat-nav-list .mat-list-item{cursor:pointer;outline:none}mat-action-list button{background:none;color:inherit;border:none;font:inherit;outline:inherit;-webkit-tap-highlight-color:transparent;text-align:left}[dir=rtl] mat-action-list button{text-align:right}mat-action-list button::-moz-focus-inner{border:0}mat-action-list .mat-list-item{cursor:pointer;outline:inherit}.mat-list-option:not(.mat-list-item-disabled){cursor:pointer;outline:none}.mat-list-item-disabled{pointer-events:none}.cdk-high-contrast-active .mat-list-item-disabled{opacity:.5}.cdk-high-contrast-active :host .mat-list-item-disabled{opacity:.5}.cdk-high-contrast-active .mat-selection-list:focus{outline-style:dotted}.cdk-high-contrast-active .mat-list-option:hover,.cdk-high-contrast-active .mat-list-option:focus,.cdk-high-contrast-active .mat-nav-list .mat-list-item:hover,.cdk-high-contrast-active .mat-nav-list .mat-list-item:focus,.cdk-high-contrast-active mat-action-list .mat-list-item:hover,.cdk-high-contrast-active mat-action-list .mat-list-item:focus{outline:dotted 1px}.cdk-high-contrast-active .mat-list-single-selected-option::after{content:\"\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}.cdk-high-contrast-active [dir=rtl] .mat-list-single-selected-option::after{right:auto;left:16px}@media(hover: none){.mat-list-option:not(.mat-list-single-selected-option):not(.mat-list-item-disabled):hover,.mat-nav-list .mat-list-item:not(.mat-list-item-disabled):hover,.mat-action-list .mat-list-item:not(.mat-list-item-disabled):hover{background:none}}\\n'],encapsulation:2,changeDetection:0}),t})();const b=i.fc(_);let x=(()=>{class t{}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275dir=i.Sb({type:t,selectors:[[\"\",\"mat-list-avatar\",\"\"],[\"\",\"matListAvatar\",\"\"]],hostAttrs:[1,\"mat-list-avatar\"]}),t})(),w=(()=>{class t{}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275dir=i.Sb({type:t,selectors:[[\"\",\"mat-list-icon\",\"\"],[\"\",\"matListIcon\",\"\"]],hostAttrs:[1,\"mat-list-icon\"]}),t})(),k=(()=>{class t extends g{constructor(t,e,n,r){super(),this._element=t,this._isInteractiveList=!1,this._destroyed=new s.a,this._disabled=!1,this._isInteractiveList=!!(n||r&&\"action-list\"===r._getListType()),this._list=n||r;const i=this._getHostElement();\"button\"!==i.nodeName.toLowerCase()||i.hasAttribute(\"type\")||i.setAttribute(\"type\",\"button\"),this._list&&this._list._stateChanges.pipe(Object(l.a)(this._destroyed)).subscribe(()=>{e.markForCheck()})}get disabled(){return this._disabled||!(!this._list||!this._list.disabled)}set disabled(t){this._disabled=Object(o.c)(t)}ngAfterContentInit(){Object(a.C)(this._lines,this._element)}ngOnDestroy(){this._destroyed.next(),this._destroyed.complete()}_isRippleDisabled(){return!this._isInteractiveList||this.disableRipple||!(!this._list||!this._list.disableRipple)}_getHostElement(){return this._element.nativeElement}}return t.\\u0275fac=function(e){return new(e||t)(i.Xb(i.p),i.Xb(i.j),i.Xb(v,8),i.Xb(y,8))},t.\\u0275cmp=i.Rb({type:t,selectors:[[\"mat-list-item\"],[\"a\",\"mat-list-item\",\"\"],[\"button\",\"mat-list-item\",\"\"]],contentQueries:function(t,e,n){if(1&t&&(i.Qb(n,x,!0),i.Qb(n,w,!0),i.Qb(n,a.j,!0)),2&t){let t;i.Ac(t=i.mc())&&(e._avatar=t.first),i.Ac(t=i.mc())&&(e._icon=t.first),i.Ac(t=i.mc())&&(e._lines=t)}},hostAttrs:[1,\"mat-list-item\",\"mat-focus-indicator\"],hostVars:6,hostBindings:function(t,e){2&t&&i.Pb(\"mat-list-item-disabled\",e.disabled)(\"mat-list-item-avatar\",e._avatar||e._icon)(\"mat-list-item-with-avatar\",e._avatar||e._icon)},inputs:{disableRipple:\"disableRipple\",disabled:\"disabled\"},exportAs:[\"matListItem\"],features:[i.Ib],ngContentSelectors:d,decls:6,vars:2,consts:[[1,\"mat-list-item-content\"],[\"mat-ripple\",\"\",1,\"mat-list-item-ripple\",3,\"matRippleTrigger\",\"matRippleDisabled\"],[1,\"mat-list-text\"]],template:function(t,e){1&t&&(i.uc(h),i.dc(0,\"div\",0),i.Yb(1,\"div\",1),i.tc(2),i.dc(3,\"div\",2),i.tc(4,1),i.cc(),i.tc(5,2),i.cc()),2&t&&(i.Lb(1),i.vc(\"matRippleTrigger\",e._getHostElement())(\"matRippleDisabled\",e._isRippleDisabled()))},directives:[a.r],encapsulation:2,changeDetection:0}),t})(),M=(()=>{class t{}return t.\\u0275mod=i.Vb({type:t}),t.\\u0275inj=i.Ub({factory:function(e){return new(e||t)},imports:[[a.k,a.s,a.i,a.q,r.c],a.k,a.i,a.q,c]}),t})()},NFeN:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return I})),n.d(e,\"b\",(function(){return P})),n.d(e,\"c\",(function(){return M}));var r=n(\"fXoL\"),i=n(\"FKr1\"),a=n(\"8LU1\"),o=n(\"ofXK\"),s=n(\"LRne\"),l=n(\"z6cu\"),c=n(\"cp0P\"),u=n(\"quSY\"),h=n(\"vkgz\"),d=n(\"lJxs\"),f=n(\"JIr8\"),p=n(\"nYR2\"),m=n(\"w1tV\"),g=n(\"IzEk\"),y=n(\"tk/3\"),v=n(\"jhN1\");const _=[\"*\"];function b(t){return Error(`Unable to find icon with the name \"${t}\"`)}function x(t){return Error(`The URL provided to MatIconRegistry was not trusted as a resource URL via Angular's DomSanitizer. Attempted URL was \"${t}\".`)}function w(t){return Error(`The literal provided to MatIconRegistry was not trusted as safe HTML by Angular's DomSanitizer. Attempted literal was \"${t}\".`)}class k{constructor(t,e,n){this.url=t,this.svgText=e,this.options=n}}let M=(()=>{class t{constructor(t,e,n,r){this._httpClient=t,this._sanitizer=e,this._errorHandler=r,this._svgIconConfigs=new Map,this._iconSetConfigs=new Map,this._cachedIconsByUrl=new Map,this._inProgressUrlFetches=new Map,this._fontCssClassesByAlias=new Map,this._resolvers=[],this._defaultFontSetClass=\"material-icons\",this._document=n}addSvgIcon(t,e,n){return this.addSvgIconInNamespace(\"\",t,e,n)}addSvgIconLiteral(t,e,n){return this.addSvgIconLiteralInNamespace(\"\",t,e,n)}addSvgIconInNamespace(t,e,n,r){return this._addSvgIconConfig(t,e,new k(n,null,r))}addSvgIconResolver(t){return this._resolvers.push(t),this}addSvgIconLiteralInNamespace(t,e,n,i){const a=this._sanitizer.sanitize(r.S.HTML,n);if(!a)throw w(n);return this._addSvgIconConfig(t,e,new k(\"\",a,i))}addSvgIconSet(t,e){return this.addSvgIconSetInNamespace(\"\",t,e)}addSvgIconSetLiteral(t,e){return this.addSvgIconSetLiteralInNamespace(\"\",t,e)}addSvgIconSetInNamespace(t,e,n){return this._addSvgIconSetConfig(t,new k(e,null,n))}addSvgIconSetLiteralInNamespace(t,e,n){const i=this._sanitizer.sanitize(r.S.HTML,e);if(!i)throw w(e);return this._addSvgIconSetConfig(t,new k(\"\",i,n))}registerFontClassAlias(t,e=t){return this._fontCssClassesByAlias.set(t,e),this}classNameForFontAlias(t){return this._fontCssClassesByAlias.get(t)||t}setDefaultFontSetClass(t){return this._defaultFontSetClass=t,this}getDefaultFontSetClass(){return this._defaultFontSetClass}getSvgIconFromUrl(t){const e=this._sanitizer.sanitize(r.S.RESOURCE_URL,t);if(!e)throw x(t);const n=this._cachedIconsByUrl.get(e);return n?Object(s.a)(T(n)):this._loadSvgIconFromConfig(new k(t,null)).pipe(Object(h.a)(t=>this._cachedIconsByUrl.set(e,t)),Object(d.a)(t=>T(t)))}getNamedSvgIcon(t,e=\"\"){const n=S(e,t);let r=this._svgIconConfigs.get(n);if(r)return this._getSvgFromConfig(r);if(r=this._getIconConfigFromResolvers(e,t),r)return this._svgIconConfigs.set(n,r),this._getSvgFromConfig(r);const i=this._iconSetConfigs.get(e);return i?this._getSvgFromIconSetConfigs(t,i):Object(l.a)(b(n))}ngOnDestroy(){this._resolvers=[],this._svgIconConfigs.clear(),this._iconSetConfigs.clear(),this._cachedIconsByUrl.clear()}_getSvgFromConfig(t){return t.svgText?Object(s.a)(T(this._svgElementFromConfig(t))):this._loadSvgIconFromConfig(t).pipe(Object(d.a)(t=>T(t)))}_getSvgFromIconSetConfigs(t,e){const n=this._extractIconWithNameFromAnySet(t,e);if(n)return Object(s.a)(n);const i=e.filter(t=>!t.svgText).map(t=>this._loadSvgIconSetFromConfig(t).pipe(Object(f.a)(e=>{const n=this._sanitizer.sanitize(r.S.RESOURCE_URL,t.url);return this._errorHandler.handleError(new Error(`Loading icon set URL: ${n} failed: ${e.message}`)),Object(s.a)(null)})));return Object(c.a)(i).pipe(Object(d.a)(()=>{const n=this._extractIconWithNameFromAnySet(t,e);if(!n)throw b(t);return n}))}_extractIconWithNameFromAnySet(t,e){for(let n=e.length-1;n>=0;n--){const r=e[n];if(r.svgText&&r.svgText.indexOf(t)>-1){const e=this._svgElementFromConfig(r),n=this._extractSvgIconFromSet(e,t,r.options);if(n)return n}}return null}_loadSvgIconFromConfig(t){return this._fetchIcon(t).pipe(Object(h.a)(e=>t.svgText=e),Object(d.a)(()=>this._svgElementFromConfig(t)))}_loadSvgIconSetFromConfig(t){return t.svgText?Object(s.a)(null):this._fetchIcon(t).pipe(Object(h.a)(e=>t.svgText=e))}_extractSvgIconFromSet(t,e,n){const r=t.querySelector(`[id=\"${e}\"]`);if(!r)return null;const i=r.cloneNode(!0);if(i.removeAttribute(\"id\"),\"svg\"===i.nodeName.toLowerCase())return this._setSvgAttributes(i,n);if(\"symbol\"===i.nodeName.toLowerCase())return this._setSvgAttributes(this._toSvgElement(i),n);const a=this._svgElementFromString(\"<svg></svg>\");return a.appendChild(i),this._setSvgAttributes(a,n)}_svgElementFromString(t){const e=this._document.createElement(\"DIV\");e.innerHTML=t;const n=e.querySelector(\"svg\");if(!n)throw Error(\"<svg> tag not found\");return n}_toSvgElement(t){const e=this._svgElementFromString(\"<svg></svg>\"),n=t.attributes;for(let r=0;r<n.length;r++){const{name:t,value:i}=n[r];\"id\"!==t&&e.setAttribute(t,i)}for(let r=0;r<t.childNodes.length;r++)t.childNodes[r].nodeType===this._document.ELEMENT_NODE&&e.appendChild(t.childNodes[r].cloneNode(!0));return e}_setSvgAttributes(t,e){return t.setAttribute(\"fit\",\"\"),t.setAttribute(\"height\",\"100%\"),t.setAttribute(\"width\",\"100%\"),t.setAttribute(\"preserveAspectRatio\",\"xMidYMid meet\"),t.setAttribute(\"focusable\",\"false\"),e&&e.viewBox&&t.setAttribute(\"viewBox\",e.viewBox),t}_fetchIcon(t){var e;const{url:n,options:i}=t,a=null!==(e=null==i?void 0:i.withCredentials)&&void 0!==e&&e;if(!this._httpClient)throw Error(\"Could not find HttpClient provider for use with Angular Material icons. Please include the HttpClientModule from @angular/common/http in your app imports.\");if(null==n)throw Error(`Cannot fetch icon from URL \"${n}\".`);const o=this._sanitizer.sanitize(r.S.RESOURCE_URL,n);if(!o)throw x(n);const s=this._inProgressUrlFetches.get(o);if(s)return s;const l=this._httpClient.get(o,{responseType:\"text\",withCredentials:a}).pipe(Object(p.a)(()=>this._inProgressUrlFetches.delete(o)),Object(m.a)());return this._inProgressUrlFetches.set(o,l),l}_addSvgIconConfig(t,e,n){return this._svgIconConfigs.set(S(t,e),n),this}_addSvgIconSetConfig(t,e){const n=this._iconSetConfigs.get(t);return n?n.push(e):this._iconSetConfigs.set(t,[e]),this}_svgElementFromConfig(t){if(!t.svgElement){const e=this._svgElementFromString(t.svgText);this._setSvgAttributes(e,t.options),t.svgElement=e}return t.svgElement}_getIconConfigFromResolvers(t,e){for(let r=0;r<this._resolvers.length;r++){const i=this._resolvers[r](e,t);if(i)return(n=i).url&&n.options?new k(i.url,null,i.options):new k(i,null)}var n}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(y.a,8),r.hc(v.b),r.hc(o.d,8),r.hc(r.r))},t.\\u0275prov=Object(r.Tb)({factory:function(){return new t(Object(r.hc)(y.a,8),Object(r.hc)(v.b),Object(r.hc)(o.d,8),Object(r.hc)(r.r))},token:t,providedIn:\"root\"}),t})();function T(t){return t.cloneNode(!0)}function S(t,e){return t+\":\"+e}class A{constructor(t){this._elementRef=t}}const L=Object(i.w)(A),C=new r.w(\"mat-icon-location\",{providedIn:\"root\",factory:function(){const t=Object(r.fb)(o.d),e=t?t.location:null;return{getPathname:()=>e?e.pathname+e.search:\"\"}}}),E=[\"clip-path\",\"color-profile\",\"src\",\"cursor\",\"fill\",\"filter\",\"marker\",\"marker-start\",\"marker-mid\",\"marker-end\",\"mask\",\"stroke\"],O=E.map(t=>`[${t}]`).join(\", \"),D=/^url\\(['\"]?#(.*?)['\"]?\\)$/;let I=(()=>{class t extends L{constructor(t,e,n,r,i){super(t),this._iconRegistry=e,this._location=r,this._errorHandler=i,this._inline=!1,this._currentIconFetch=u.a.EMPTY,n||t.nativeElement.setAttribute(\"aria-hidden\",\"true\")}get inline(){return this._inline}set inline(t){this._inline=Object(a.c)(t)}get svgIcon(){return this._svgIcon}set svgIcon(t){t!==this._svgIcon&&(t?this._updateSvgIcon(t):this._svgIcon&&this._clearSvgElement(),this._svgIcon=t)}get fontSet(){return this._fontSet}set fontSet(t){const e=this._cleanupFontValue(t);e!==this._fontSet&&(this._fontSet=e,this._updateFontIconClasses())}get fontIcon(){return this._fontIcon}set fontIcon(t){const e=this._cleanupFontValue(t);e!==this._fontIcon&&(this._fontIcon=e,this._updateFontIconClasses())}_splitIconName(t){if(!t)return[\"\",\"\"];const e=t.split(\":\");switch(e.length){case 1:return[\"\",e[0]];case 2:return e;default:throw Error(`Invalid icon name: \"${t}\"`)}}ngOnInit(){this._updateFontIconClasses()}ngAfterViewChecked(){const t=this._elementsWithExternalReferences;if(t&&t.size){const t=this._location.getPathname();t!==this._previousPath&&(this._previousPath=t,this._prependPathToReferences(t))}}ngOnDestroy(){this._currentIconFetch.unsubscribe(),this._elementsWithExternalReferences&&this._elementsWithExternalReferences.clear()}_usingFontIcon(){return!this.svgIcon}_setSvgElement(t){this._clearSvgElement();const e=t.querySelectorAll(\"style\");for(let r=0;r<e.length;r++)e[r].textContent+=\" \";const n=this._location.getPathname();this._previousPath=n,this._cacheChildrenWithExternalReferences(t),this._prependPathToReferences(n),this._elementRef.nativeElement.appendChild(t)}_clearSvgElement(){const t=this._elementRef.nativeElement;let e=t.childNodes.length;for(this._elementsWithExternalReferences&&this._elementsWithExternalReferences.clear();e--;){const n=t.childNodes[e];1===n.nodeType&&\"svg\"!==n.nodeName.toLowerCase()||t.removeChild(n)}}_updateFontIconClasses(){if(!this._usingFontIcon())return;const t=this._elementRef.nativeElement,e=this.fontSet?this._iconRegistry.classNameForFontAlias(this.fontSet):this._iconRegistry.getDefaultFontSetClass();e!=this._previousFontSetClass&&(this._previousFontSetClass&&t.classList.remove(this._previousFontSetClass),e&&t.classList.add(e),this._previousFontSetClass=e),this.fontIcon!=this._previousFontIconClass&&(this._previousFontIconClass&&t.classList.remove(this._previousFontIconClass),this.fontIcon&&t.classList.add(this.fontIcon),this._previousFontIconClass=this.fontIcon)}_cleanupFontValue(t){return\"string\"==typeof t?t.trim().split(\" \")[0]:t}_prependPathToReferences(t){const e=this._elementsWithExternalReferences;e&&e.forEach((e,n)=>{e.forEach(e=>{n.setAttribute(e.name,`url('${t}#${e.value}')`)})})}_cacheChildrenWithExternalReferences(t){const e=t.querySelectorAll(O),n=this._elementsWithExternalReferences=this._elementsWithExternalReferences||new Map;for(let r=0;r<e.length;r++)E.forEach(t=>{const i=e[r],a=i.getAttribute(t),o=a?a.match(D):null;if(o){let e=n.get(i);e||(e=[],n.set(i,e)),e.push({name:t,value:o[1]})}})}_updateSvgIcon(t){if(this._svgNamespace=null,this._svgName=null,this._currentIconFetch.unsubscribe(),t){const[e,n]=this._splitIconName(t);e&&(this._svgNamespace=e),n&&(this._svgName=n),this._currentIconFetch=this._iconRegistry.getNamedSvgIcon(n,e).pipe(Object(g.a)(1)).subscribe(t=>this._setSvgElement(t),t=>{this._errorHandler.handleError(new Error(`Error retrieving icon ${e}:${n}! ${t.message}`))})}}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.p),r.Xb(M),r.ic(\"aria-hidden\"),r.Xb(C),r.Xb(r.r))},t.\\u0275cmp=r.Rb({type:t,selectors:[[\"mat-icon\"]],hostAttrs:[\"role\",\"img\",1,\"mat-icon\",\"notranslate\"],hostVars:7,hostBindings:function(t,e){2&t&&(r.Mb(\"data-mat-icon-type\",e._usingFontIcon()?\"font\":\"svg\")(\"data-mat-icon-name\",e._svgName||e.fontIcon)(\"data-mat-icon-namespace\",e._svgNamespace||e.fontSet),r.Pb(\"mat-icon-inline\",e.inline)(\"mat-icon-no-color\",\"primary\"!==e.color&&\"accent\"!==e.color&&\"warn\"!==e.color))},inputs:{color:\"color\",inline:\"inline\",svgIcon:\"svgIcon\",fontSet:\"fontSet\",fontIcon:\"fontIcon\"},exportAs:[\"matIcon\"],features:[r.Ib],ngContentSelectors:_,decls:1,vars:0,template:function(t,e){1&t&&(r.uc(),r.tc(0))},styles:[\".mat-icon{background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px}.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}[dir=rtl] .mat-icon-rtl-mirror{transform:scale(-1, 1)}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon{display:block}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-icon{margin:auto}\\n\"],encapsulation:2,changeDetection:0}),t})(),P=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},imports:[[i.i],i.i]}),t})()},NJ4a:function(t,e,n){\"use strict\";function r(t){setTimeout(()=>{throw t},0)}n.d(e,\"a\",(function(){return r}))},NXqw:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return h}));var r=n(\"0IaG\"),i=n(\"fXoL\"),a=n(\"XiUz\"),o=n(\"bTqV\"),s=n(\"NFeN\"),l=n(\"ofXK\");function c(t,e){if(1&t&&(i.dc(0,\"p\",9),i.Oc(1),i.cc()),2&t){const t=i.pc();i.Lb(1),i.Pc(null==t.dialog?null:t.dialog.secondLine)}}function u(t,e){if(1&t&&(i.dc(0,\"button\",10),i.Oc(1),i.cc()),2&t){const t=i.pc();i.Lb(1),i.Qc(\" \",t.cancelButtonText,\" \")}}let h=(()=>{class t{constructor(t){this.data=t,this.hideCancelButton=this.data.hideCancelButton&&!0,this.confirmButtonText=t.confirmButtonText?t.confirmButtonText:this.hideCancelButton?\"Close\":\"Confirm\",this.cancelButtonText=t.cancelButtonText||\"Cancel\"}ngOnInit(){this.dialog=this.data}}return t.\\u0275fac=function(e){return new(e||t)(i.Xb(r.a))},t.\\u0275cmp=i.Rb({type:t,selectors:[[\"ng-component\"]],decls:14,vars:6,consts:[[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"space-between center\",1,\"w-full\",\"p-3\",\"bg-primary\",\"text-white\",\"header-dialog-title\"],[1,\"mat-title\",\"m-0\"],[\"mat-icon-button\",\"\",\"matDialogClose\",\"\"],[1,\"w-full\",\"px-5\",\"pt-5\"],[1,\"font-size-14\",\"mb-4\"],[\"class\",\"font-size-14 mt-4\",4,\"ngIf\"],[\"fxLayout\",\"row\",\"fxLayoutAlign\",\"end center\",\"fxLayoutGap\",\"15px\",1,\"mb-1\",\"px-5\",\"pb-5\"],[\"mat-raised-button\",\"\",\"type\",\"button\",\"mat-dialog-close\",\"\",4,\"ngIf\"],[\"mat-raised-button\",\"\",\"color\",\"primary\",\"type\",\"button\",3,\"mat-dialog-close\"],[1,\"font-size-14\",\"mt-4\"],[\"mat-raised-button\",\"\",\"type\",\"button\",\"mat-dialog-close\",\"\"]],template:function(t,e){1&t&&(i.dc(0,\"div\",0),i.dc(1,\"h2\",1),i.Oc(2),i.cc(),i.dc(3,\"button\",2),i.dc(4,\"mat-icon\"),i.Oc(5,\"close\"),i.cc(),i.cc(),i.cc(),i.dc(6,\"mat-dialog-content\",3),i.dc(7,\"p\",4),i.Oc(8),i.cc(),i.Mc(9,c,2,1,\"p\",5),i.cc(),i.dc(10,\"mat-dialog-actions\",6),i.Mc(11,u,2,1,\"button\",7),i.dc(12,\"button\",8),i.Oc(13),i.cc(),i.cc()),2&t&&(i.Lb(2),i.Pc(null!=e.dialog&&e.dialog.title?e.dialog.title:\"\"),i.Lb(6),i.Pc(null!=e.dialog&&e.dialog.content?e.dialog.content:\"\"),i.Lb(1),i.vc(\"ngIf\",null==e.dialog?null:e.dialog.secondLine),i.Lb(2),i.vc(\"ngIf\",!e.hideCancelButton),i.Lb(1),i.vc(\"mat-dialog-close\",!0),i.Lb(1),i.Qc(\" \",e.confirmButtonText,\" \"))},directives:[a.d,a.c,o.b,r.d,s.a,r.e,l.o,r.c,a.e],styles:[\"mat-dialog-content[_ngcontent-%COMP%]{margin:0!important}\"]}),t})()},NXyV:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return o}));var r=n(\"HDdC\"),i=n(\"Cfvw\"),a=n(\"EY2u\");function o(t){return new r.a(e=>{let n;try{n=t()}catch(r){return void e.error(r)}return(n?Object(i.a)(n):Object(a.b)()).subscribe(e)})}},Ne9M:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return l}));var r=n(\"dhIe\"),i=n(\"TkeJ\"),a=n(\"fXoL\"),o=n(\"AcyG\"),s=n(\"tyNb\");let l=(()=>{class t{constructor(t,e,n){this.ngZone=t,this.store=e,this.router=n}canActivate(){const t=this.store.selectSnapshot(r.a.isDbUrl);return t||this.store.dispatch(new i.a([\"/initialize\"])),t}canLoad(){const t=this.store.selectSnapshot(r.a.isDbUrl);return t||this.store.dispatch(new i.a([\"/initialize\"])),t}}return t.\\u0275fac=function(e){return new(e||t)(a.hc(a.H),a.hc(o.i),a.hc(s.g))},t.\\u0275prov=a.Tb({token:t,factory:t.\\u0275fac}),t})()},OCth:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return r}));var r=function(t){return t.SUCCESS=\"Success\",t.ERROR=\"Error\",t.WARNING=\"Warning\",t.INFO=\"Info\",t}({})},OIYi:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"en-ca\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"YYYY-MM-DD\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?\"th\":1===e?\"st\":2===e?\"nd\":3===e?\"rd\":\"th\")}})}(n(\"wd/R\"))},Oaa7:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"en-gb\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?\"th\":1===e?\"st\":2===e?\"nd\":3===e?\"rd\":\"th\")},week:{dow:1,doy:4}})}(n(\"wd/R\"))},Ob0Z:function(t,e,n){!function(t){\"use strict\";var e={1:\"\\u0967\",2:\"\\u0968\",3:\"\\u0969\",4:\"\\u096a\",5:\"\\u096b\",6:\"\\u096c\",7:\"\\u096d\",8:\"\\u096e\",9:\"\\u096f\",0:\"\\u0966\"},n={\"\\u0967\":\"1\",\"\\u0968\":\"2\",\"\\u0969\":\"3\",\"\\u096a\":\"4\",\"\\u096b\":\"5\",\"\\u096c\":\"6\",\"\\u096d\":\"7\",\"\\u096e\":\"8\",\"\\u096f\":\"9\",\"\\u0966\":\"0\"};function r(t,e,n,r){var i=\"\";if(e)switch(n){case\"s\":i=\"\\u0915\\u093e\\u0939\\u0940 \\u0938\\u0947\\u0915\\u0902\\u0926\";break;case\"ss\":i=\"%d \\u0938\\u0947\\u0915\\u0902\\u0926\";break;case\"m\":i=\"\\u090f\\u0915 \\u092e\\u093f\\u0928\\u093f\\u091f\";break;case\"mm\":i=\"%d \\u092e\\u093f\\u0928\\u093f\\u091f\\u0947\";break;case\"h\":i=\"\\u090f\\u0915 \\u0924\\u093e\\u0938\";break;case\"hh\":i=\"%d \\u0924\\u093e\\u0938\";break;case\"d\":i=\"\\u090f\\u0915 \\u0926\\u093f\\u0935\\u0938\";break;case\"dd\":i=\"%d \\u0926\\u093f\\u0935\\u0938\";break;case\"M\":i=\"\\u090f\\u0915 \\u092e\\u0939\\u093f\\u0928\\u093e\";break;case\"MM\":i=\"%d \\u092e\\u0939\\u093f\\u0928\\u0947\";break;case\"y\":i=\"\\u090f\\u0915 \\u0935\\u0930\\u094d\\u0937\";break;case\"yy\":i=\"%d \\u0935\\u0930\\u094d\\u0937\\u0947\"}else switch(n){case\"s\":i=\"\\u0915\\u093e\\u0939\\u0940 \\u0938\\u0947\\u0915\\u0902\\u0926\\u093e\\u0902\";break;case\"ss\":i=\"%d \\u0938\\u0947\\u0915\\u0902\\u0926\\u093e\\u0902\";break;case\"m\":i=\"\\u090f\\u0915\\u093e \\u092e\\u093f\\u0928\\u093f\\u091f\\u093e\";break;case\"mm\":i=\"%d \\u092e\\u093f\\u0928\\u093f\\u091f\\u093e\\u0902\";break;case\"h\":i=\"\\u090f\\u0915\\u093e \\u0924\\u093e\\u0938\\u093e\";break;case\"hh\":i=\"%d \\u0924\\u093e\\u0938\\u093e\\u0902\";break;case\"d\":i=\"\\u090f\\u0915\\u093e \\u0926\\u093f\\u0935\\u0938\\u093e\";break;case\"dd\":i=\"%d \\u0926\\u093f\\u0935\\u0938\\u093e\\u0902\";break;case\"M\":i=\"\\u090f\\u0915\\u093e \\u092e\\u0939\\u093f\\u0928\\u094d\\u092f\\u093e\";break;case\"MM\":i=\"%d \\u092e\\u0939\\u093f\\u0928\\u094d\\u092f\\u093e\\u0902\";break;case\"y\":i=\"\\u090f\\u0915\\u093e \\u0935\\u0930\\u094d\\u0937\\u093e\";break;case\"yy\":i=\"%d \\u0935\\u0930\\u094d\\u0937\\u093e\\u0902\"}return i.replace(/%d/i,t)}t.defineLocale(\"mr\",{months:\"\\u091c\\u093e\\u0928\\u0947\\u0935\\u093e\\u0930\\u0940_\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941\\u0935\\u093e\\u0930\\u0940_\\u092e\\u093e\\u0930\\u094d\\u091a_\\u090f\\u092a\\u094d\\u0930\\u093f\\u0932_\\u092e\\u0947_\\u091c\\u0942\\u0928_\\u091c\\u0941\\u0932\\u0948_\\u0911\\u0917\\u0938\\u094d\\u091f_\\u0938\\u092a\\u094d\\u091f\\u0947\\u0902\\u092c\\u0930_\\u0911\\u0915\\u094d\\u091f\\u094b\\u092c\\u0930_\\u0928\\u094b\\u0935\\u094d\\u0939\\u0947\\u0902\\u092c\\u0930_\\u0921\\u093f\\u0938\\u0947\\u0902\\u092c\\u0930\".split(\"_\"),monthsShort:\"\\u091c\\u093e\\u0928\\u0947._\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941._\\u092e\\u093e\\u0930\\u094d\\u091a._\\u090f\\u092a\\u094d\\u0930\\u093f._\\u092e\\u0947._\\u091c\\u0942\\u0928._\\u091c\\u0941\\u0932\\u0948._\\u0911\\u0917._\\u0938\\u092a\\u094d\\u091f\\u0947\\u0902._\\u0911\\u0915\\u094d\\u091f\\u094b._\\u0928\\u094b\\u0935\\u094d\\u0939\\u0947\\u0902._\\u0921\\u093f\\u0938\\u0947\\u0902.\".split(\"_\"),monthsParseExact:!0,weekdays:\"\\u0930\\u0935\\u093f\\u0935\\u093e\\u0930_\\u0938\\u094b\\u092e\\u0935\\u093e\\u0930_\\u092e\\u0902\\u0917\\u0933\\u0935\\u093e\\u0930_\\u092c\\u0941\\u0927\\u0935\\u093e\\u0930_\\u0917\\u0941\\u0930\\u0942\\u0935\\u093e\\u0930_\\u0936\\u0941\\u0915\\u094d\\u0930\\u0935\\u093e\\u0930_\\u0936\\u0928\\u093f\\u0935\\u093e\\u0930\".split(\"_\"),weekdaysShort:\"\\u0930\\u0935\\u093f_\\u0938\\u094b\\u092e_\\u092e\\u0902\\u0917\\u0933_\\u092c\\u0941\\u0927_\\u0917\\u0941\\u0930\\u0942_\\u0936\\u0941\\u0915\\u094d\\u0930_\\u0936\\u0928\\u093f\".split(\"_\"),weekdaysMin:\"\\u0930_\\u0938\\u094b_\\u092e\\u0902_\\u092c\\u0941_\\u0917\\u0941_\\u0936\\u0941_\\u0936\".split(\"_\"),longDateFormat:{LT:\"A h:mm \\u0935\\u093e\\u091c\\u0924\\u093e\",LTS:\"A h:mm:ss \\u0935\\u093e\\u091c\\u0924\\u093e\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm \\u0935\\u093e\\u091c\\u0924\\u093e\",LLLL:\"dddd, D MMMM YYYY, A h:mm \\u0935\\u093e\\u091c\\u0924\\u093e\"},calendar:{sameDay:\"[\\u0906\\u091c] LT\",nextDay:\"[\\u0909\\u0926\\u094d\\u092f\\u093e] LT\",nextWeek:\"dddd, LT\",lastDay:\"[\\u0915\\u093e\\u0932] LT\",lastWeek:\"[\\u092e\\u093e\\u0917\\u0940\\u0932] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s\\u092e\\u0927\\u094d\\u092f\\u0947\",past:\"%s\\u092a\\u0942\\u0930\\u094d\\u0935\\u0940\",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},preparse:function(t){return t.replace(/[\\u0967\\u0968\\u0969\\u096a\\u096b\\u096c\\u096d\\u096e\\u096f\\u0966]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\\d/g,(function(t){return e[t]}))},meridiemParse:/\\u092a\\u0939\\u093e\\u091f\\u0947|\\u0938\\u0915\\u093e\\u0933\\u0940|\\u0926\\u0941\\u092a\\u093e\\u0930\\u0940|\\u0938\\u093e\\u092f\\u0902\\u0915\\u093e\\u0933\\u0940|\\u0930\\u093e\\u0924\\u094d\\u0930\\u0940/,meridiemHour:function(t,e){return 12===t&&(t=0),\"\\u092a\\u0939\\u093e\\u091f\\u0947\"===e||\"\\u0938\\u0915\\u093e\\u0933\\u0940\"===e?t:\"\\u0926\\u0941\\u092a\\u093e\\u0930\\u0940\"===e||\"\\u0938\\u093e\\u092f\\u0902\\u0915\\u093e\\u0933\\u0940\"===e||\"\\u0930\\u093e\\u0924\\u094d\\u0930\\u0940\"===e?t>=12?t:t+12:void 0},meridiem:function(t,e,n){return t>=0&&t<6?\"\\u092a\\u0939\\u093e\\u091f\\u0947\":t<12?\"\\u0938\\u0915\\u093e\\u0933\\u0940\":t<17?\"\\u0926\\u0941\\u092a\\u093e\\u0930\\u0940\":t<20?\"\\u0938\\u093e\\u092f\\u0902\\u0915\\u093e\\u0933\\u0940\":\"\\u0930\\u093e\\u0924\\u094d\\u0930\\u0940\"},week:{dow:0,doy:6}})}(n(\"wd/R\"))},OjkT:function(t,e,n){!function(t){\"use strict\";var e={1:\"\\u0967\",2:\"\\u0968\",3:\"\\u0969\",4:\"\\u096a\",5:\"\\u096b\",6:\"\\u096c\",7:\"\\u096d\",8:\"\\u096e\",9:\"\\u096f\",0:\"\\u0966\"},n={\"\\u0967\":\"1\",\"\\u0968\":\"2\",\"\\u0969\":\"3\",\"\\u096a\":\"4\",\"\\u096b\":\"5\",\"\\u096c\":\"6\",\"\\u096d\":\"7\",\"\\u096e\":\"8\",\"\\u096f\":\"9\",\"\\u0966\":\"0\"};t.defineLocale(\"ne\",{months:\"\\u091c\\u0928\\u0935\\u0930\\u0940_\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941\\u0935\\u0930\\u0940_\\u092e\\u093e\\u0930\\u094d\\u091a_\\u0905\\u092a\\u094d\\u0930\\u093f\\u0932_\\u092e\\u0908_\\u091c\\u0941\\u0928_\\u091c\\u0941\\u0932\\u093e\\u0908_\\u0905\\u0917\\u0937\\u094d\\u091f_\\u0938\\u0947\\u092a\\u094d\\u091f\\u0947\\u092e\\u094d\\u092c\\u0930_\\u0905\\u0915\\u094d\\u091f\\u094b\\u092c\\u0930_\\u0928\\u094b\\u092d\\u0947\\u092e\\u094d\\u092c\\u0930_\\u0921\\u093f\\u0938\\u0947\\u092e\\u094d\\u092c\\u0930\".split(\"_\"),monthsShort:\"\\u091c\\u0928._\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941._\\u092e\\u093e\\u0930\\u094d\\u091a_\\u0905\\u092a\\u094d\\u0930\\u093f._\\u092e\\u0908_\\u091c\\u0941\\u0928_\\u091c\\u0941\\u0932\\u093e\\u0908._\\u0905\\u0917._\\u0938\\u0947\\u092a\\u094d\\u091f._\\u0905\\u0915\\u094d\\u091f\\u094b._\\u0928\\u094b\\u092d\\u0947._\\u0921\\u093f\\u0938\\u0947.\".split(\"_\"),monthsParseExact:!0,weekdays:\"\\u0906\\u0907\\u0924\\u092c\\u093e\\u0930_\\u0938\\u094b\\u092e\\u092c\\u093e\\u0930_\\u092e\\u0919\\u094d\\u0917\\u0932\\u092c\\u093e\\u0930_\\u092c\\u0941\\u0927\\u092c\\u093e\\u0930_\\u092c\\u093f\\u0939\\u093f\\u092c\\u093e\\u0930_\\u0936\\u0941\\u0915\\u094d\\u0930\\u092c\\u093e\\u0930_\\u0936\\u0928\\u093f\\u092c\\u093e\\u0930\".split(\"_\"),weekdaysShort:\"\\u0906\\u0907\\u0924._\\u0938\\u094b\\u092e._\\u092e\\u0919\\u094d\\u0917\\u0932._\\u092c\\u0941\\u0927._\\u092c\\u093f\\u0939\\u093f._\\u0936\\u0941\\u0915\\u094d\\u0930._\\u0936\\u0928\\u093f.\".split(\"_\"),weekdaysMin:\"\\u0906._\\u0938\\u094b._\\u092e\\u0902._\\u092c\\u0941._\\u092c\\u093f._\\u0936\\u0941._\\u0936.\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"A\\u0915\\u094b h:mm \\u092c\\u091c\\u0947\",LTS:\"A\\u0915\\u094b h:mm:ss \\u092c\\u091c\\u0947\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A\\u0915\\u094b h:mm \\u092c\\u091c\\u0947\",LLLL:\"dddd, D MMMM YYYY, A\\u0915\\u094b h:mm \\u092c\\u091c\\u0947\"},preparse:function(t){return t.replace(/[\\u0967\\u0968\\u0969\\u096a\\u096b\\u096c\\u096d\\u096e\\u096f\\u0966]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\\d/g,(function(t){return e[t]}))},meridiemParse:/\\u0930\\u093e\\u0924\\u093f|\\u092c\\u093f\\u0939\\u093e\\u0928|\\u0926\\u093f\\u0909\\u0901\\u0938\\u094b|\\u0938\\u093e\\u0901\\u091d/,meridiemHour:function(t,e){return 12===t&&(t=0),\"\\u0930\\u093e\\u0924\\u093f\"===e?t<4?t:t+12:\"\\u092c\\u093f\\u0939\\u093e\\u0928\"===e?t:\"\\u0926\\u093f\\u0909\\u0901\\u0938\\u094b\"===e?t>=10?t:t+12:\"\\u0938\\u093e\\u0901\\u091d\"===e?t+12:void 0},meridiem:function(t,e,n){return t<3?\"\\u0930\\u093e\\u0924\\u093f\":t<12?\"\\u092c\\u093f\\u0939\\u093e\\u0928\":t<16?\"\\u0926\\u093f\\u0909\\u0901\\u0938\\u094b\":t<20?\"\\u0938\\u093e\\u0901\\u091d\":\"\\u0930\\u093e\\u0924\\u093f\"},calendar:{sameDay:\"[\\u0906\\u091c] LT\",nextDay:\"[\\u092d\\u094b\\u0932\\u093f] LT\",nextWeek:\"[\\u0906\\u0909\\u0901\\u0926\\u094b] dddd[,] LT\",lastDay:\"[\\u0939\\u093f\\u091c\\u094b] LT\",lastWeek:\"[\\u0917\\u090f\\u0915\\u094b] dddd[,] LT\",sameElse:\"L\"},relativeTime:{future:\"%s\\u092e\\u093e\",past:\"%s \\u0905\\u0917\\u093e\\u0921\\u093f\",s:\"\\u0915\\u0947\\u0939\\u0940 \\u0915\\u094d\\u0937\\u0923\",ss:\"%d \\u0938\\u0947\\u0915\\u0947\\u0923\\u094d\\u0921\",m:\"\\u090f\\u0915 \\u092e\\u093f\\u0928\\u0947\\u091f\",mm:\"%d \\u092e\\u093f\\u0928\\u0947\\u091f\",h:\"\\u090f\\u0915 \\u0918\\u0923\\u094d\\u091f\\u093e\",hh:\"%d \\u0918\\u0923\\u094d\\u091f\\u093e\",d:\"\\u090f\\u0915 \\u0926\\u093f\\u0928\",dd:\"%d \\u0926\\u093f\\u0928\",M:\"\\u090f\\u0915 \\u092e\\u0939\\u093f\\u0928\\u093e\",MM:\"%d \\u092e\\u0939\\u093f\\u0928\\u093e\",y:\"\\u090f\\u0915 \\u092c\\u0930\\u094d\\u0937\",yy:\"%d \\u092c\\u0930\\u094d\\u0937\"},week:{dow:0,doy:6}})}(n(\"wd/R\"))},OmwH:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"zh-mo\",{months:\"\\u4e00\\u6708_\\u4e8c\\u6708_\\u4e09\\u6708_\\u56db\\u6708_\\u4e94\\u6708_\\u516d\\u6708_\\u4e03\\u6708_\\u516b\\u6708_\\u4e5d\\u6708_\\u5341\\u6708_\\u5341\\u4e00\\u6708_\\u5341\\u4e8c\\u6708\".split(\"_\"),monthsShort:\"1\\u6708_2\\u6708_3\\u6708_4\\u6708_5\\u6708_6\\u6708_7\\u6708_8\\u6708_9\\u6708_10\\u6708_11\\u6708_12\\u6708\".split(\"_\"),weekdays:\"\\u661f\\u671f\\u65e5_\\u661f\\u671f\\u4e00_\\u661f\\u671f\\u4e8c_\\u661f\\u671f\\u4e09_\\u661f\\u671f\\u56db_\\u661f\\u671f\\u4e94_\\u661f\\u671f\\u516d\".split(\"_\"),weekdaysShort:\"\\u9031\\u65e5_\\u9031\\u4e00_\\u9031\\u4e8c_\\u9031\\u4e09_\\u9031\\u56db_\\u9031\\u4e94_\\u9031\\u516d\".split(\"_\"),weekdaysMin:\"\\u65e5_\\u4e00_\\u4e8c_\\u4e09_\\u56db_\\u4e94_\\u516d\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"YYYY\\u5e74M\\u6708D\\u65e5\",LLL:\"YYYY\\u5e74M\\u6708D\\u65e5 HH:mm\",LLLL:\"YYYY\\u5e74M\\u6708D\\u65e5dddd HH:mm\",l:\"D/M/YYYY\",ll:\"YYYY\\u5e74M\\u6708D\\u65e5\",lll:\"YYYY\\u5e74M\\u6708D\\u65e5 HH:mm\",llll:\"YYYY\\u5e74M\\u6708D\\u65e5dddd HH:mm\"},meridiemParse:/\\u51cc\\u6668|\\u65e9\\u4e0a|\\u4e0a\\u5348|\\u4e2d\\u5348|\\u4e0b\\u5348|\\u665a\\u4e0a/,meridiemHour:function(t,e){return 12===t&&(t=0),\"\\u51cc\\u6668\"===e||\"\\u65e9\\u4e0a\"===e||\"\\u4e0a\\u5348\"===e?t:\"\\u4e2d\\u5348\"===e?t>=11?t:t+12:\"\\u4e0b\\u5348\"===e||\"\\u665a\\u4e0a\"===e?t+12:void 0},meridiem:function(t,e,n){var r=100*t+e;return r<600?\"\\u51cc\\u6668\":r<900?\"\\u65e9\\u4e0a\":r<1130?\"\\u4e0a\\u5348\":r<1230?\"\\u4e2d\\u5348\":r<1800?\"\\u4e0b\\u5348\":\"\\u665a\\u4e0a\"},calendar:{sameDay:\"[\\u4eca\\u5929] LT\",nextDay:\"[\\u660e\\u5929] LT\",nextWeek:\"[\\u4e0b]dddd LT\",lastDay:\"[\\u6628\\u5929] LT\",lastWeek:\"[\\u4e0a]dddd LT\",sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}(\\u65e5|\\u6708|\\u9031)/,ordinal:function(t,e){switch(e){case\"d\":case\"D\":case\"DDD\":return t+\"\\u65e5\";case\"M\":return t+\"\\u6708\";case\"w\":case\"W\":return t+\"\\u9031\";default:return t}},relativeTime:{future:\"%s\\u5167\",past:\"%s\\u524d\",s:\"\\u5e7e\\u79d2\",ss:\"%d \\u79d2\",m:\"1 \\u5206\\u9418\",mm:\"%d \\u5206\\u9418\",h:\"1 \\u5c0f\\u6642\",hh:\"%d \\u5c0f\\u6642\",d:\"1 \\u5929\",dd:\"%d \\u5929\",M:\"1 \\u500b\\u6708\",MM:\"%d \\u500b\\u6708\",y:\"1 \\u5e74\",yy:\"%d \\u5e74\"}})}(n(\"wd/R\"))},Oxv6:function(t,e,n){!function(t){\"use strict\";var e={0:\"-\\u0443\\u043c\",1:\"-\\u0443\\u043c\",2:\"-\\u044e\\u043c\",3:\"-\\u044e\\u043c\",4:\"-\\u0443\\u043c\",5:\"-\\u0443\\u043c\",6:\"-\\u0443\\u043c\",7:\"-\\u0443\\u043c\",8:\"-\\u0443\\u043c\",9:\"-\\u0443\\u043c\",10:\"-\\u0443\\u043c\",12:\"-\\u0443\\u043c\",13:\"-\\u0443\\u043c\",20:\"-\\u0443\\u043c\",30:\"-\\u044e\\u043c\",40:\"-\\u0443\\u043c\",50:\"-\\u0443\\u043c\",60:\"-\\u0443\\u043c\",70:\"-\\u0443\\u043c\",80:\"-\\u0443\\u043c\",90:\"-\\u0443\\u043c\",100:\"-\\u0443\\u043c\"};t.defineLocale(\"tg\",{months:{format:\"\\u044f\\u043d\\u0432\\u0430\\u0440\\u0438_\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b\\u0438_\\u043c\\u0430\\u0440\\u0442\\u0438_\\u0430\\u043f\\u0440\\u0435\\u043b\\u0438_\\u043c\\u0430\\u0439\\u0438_\\u0438\\u044e\\u043d\\u0438_\\u0438\\u044e\\u043b\\u0438_\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\\u0438_\\u0441\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\\u0438_\\u043e\\u043a\\u0442\\u044f\\u0431\\u0440\\u0438_\\u043d\\u043e\\u044f\\u0431\\u0440\\u0438_\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\\u0438\".split(\"_\"),standalone:\"\\u044f\\u043d\\u0432\\u0430\\u0440_\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b_\\u043c\\u0430\\u0440\\u0442_\\u0430\\u043f\\u0440\\u0435\\u043b_\\u043c\\u0430\\u0439_\\u0438\\u044e\\u043d_\\u0438\\u044e\\u043b_\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442_\\u0441\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440_\\u043e\\u043a\\u0442\\u044f\\u0431\\u0440_\\u043d\\u043e\\u044f\\u0431\\u0440_\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\".split(\"_\")},monthsShort:\"\\u044f\\u043d\\u0432_\\u0444\\u0435\\u0432_\\u043c\\u0430\\u0440_\\u0430\\u043f\\u0440_\\u043c\\u0430\\u0439_\\u0438\\u044e\\u043d_\\u0438\\u044e\\u043b_\\u0430\\u0432\\u0433_\\u0441\\u0435\\u043d_\\u043e\\u043a\\u0442_\\u043d\\u043e\\u044f_\\u0434\\u0435\\u043a\".split(\"_\"),weekdays:\"\\u044f\\u043a\\u0448\\u0430\\u043d\\u0431\\u0435_\\u0434\\u0443\\u0448\\u0430\\u043d\\u0431\\u0435_\\u0441\\u0435\\u0448\\u0430\\u043d\\u0431\\u0435_\\u0447\\u043e\\u0440\\u0448\\u0430\\u043d\\u0431\\u0435_\\u043f\\u0430\\u043d\\u04b7\\u0448\\u0430\\u043d\\u0431\\u0435_\\u04b7\\u0443\\u043c\\u044a\\u0430_\\u0448\\u0430\\u043d\\u0431\\u0435\".split(\"_\"),weekdaysShort:\"\\u044f\\u0448\\u0431_\\u0434\\u0448\\u0431_\\u0441\\u0448\\u0431_\\u0447\\u0448\\u0431_\\u043f\\u0448\\u0431_\\u04b7\\u0443\\u043c_\\u0448\\u043d\\u0431\".split(\"_\"),weekdaysMin:\"\\u044f\\u0448_\\u0434\\u0448_\\u0441\\u0448_\\u0447\\u0448_\\u043f\\u0448_\\u04b7\\u043c_\\u0448\\u0431\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[\\u0418\\u043c\\u0440\\u04ef\\u0437 \\u0441\\u043e\\u0430\\u0442\\u0438] LT\",nextDay:\"[\\u0424\\u0430\\u0440\\u0434\\u043e \\u0441\\u043e\\u0430\\u0442\\u0438] LT\",lastDay:\"[\\u0414\\u0438\\u0440\\u04ef\\u0437 \\u0441\\u043e\\u0430\\u0442\\u0438] LT\",nextWeek:\"dddd[\\u0438] [\\u04b3\\u0430\\u0444\\u0442\\u0430\\u0438 \\u043e\\u044f\\u043d\\u0434\\u0430 \\u0441\\u043e\\u0430\\u0442\\u0438] LT\",lastWeek:\"dddd[\\u0438] [\\u04b3\\u0430\\u0444\\u0442\\u0430\\u0438 \\u0433\\u0443\\u0437\\u0430\\u0448\\u0442\\u0430 \\u0441\\u043e\\u0430\\u0442\\u0438] LT\",sameElse:\"L\"},relativeTime:{future:\"\\u0431\\u0430\\u044a\\u0434\\u0438 %s\",past:\"%s \\u043f\\u0435\\u0448\",s:\"\\u044f\\u043a\\u0447\\u0430\\u043d\\u0434 \\u0441\\u043e\\u043d\\u0438\\u044f\",m:\"\\u044f\\u043a \\u0434\\u0430\\u049b\\u0438\\u049b\\u0430\",mm:\"%d \\u0434\\u0430\\u049b\\u0438\\u049b\\u0430\",h:\"\\u044f\\u043a \\u0441\\u043e\\u0430\\u0442\",hh:\"%d \\u0441\\u043e\\u0430\\u0442\",d:\"\\u044f\\u043a \\u0440\\u04ef\\u0437\",dd:\"%d \\u0440\\u04ef\\u0437\",M:\"\\u044f\\u043a \\u043c\\u043e\\u04b3\",MM:\"%d \\u043c\\u043e\\u04b3\",y:\"\\u044f\\u043a \\u0441\\u043e\\u043b\",yy:\"%d \\u0441\\u043e\\u043b\"},meridiemParse:/\\u0448\\u0430\\u0431|\\u0441\\u0443\\u0431\\u04b3|\\u0440\\u04ef\\u0437|\\u0431\\u0435\\u0433\\u043e\\u04b3/,meridiemHour:function(t,e){return 12===t&&(t=0),\"\\u0448\\u0430\\u0431\"===e?t<4?t:t+12:\"\\u0441\\u0443\\u0431\\u04b3\"===e?t:\"\\u0440\\u04ef\\u0437\"===e?t>=11?t:t+12:\"\\u0431\\u0435\\u0433\\u043e\\u04b3\"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?\"\\u0448\\u0430\\u0431\":t<11?\"\\u0441\\u0443\\u0431\\u04b3\":t<16?\"\\u0440\\u04ef\\u0437\":t<19?\"\\u0431\\u0435\\u0433\\u043e\\u04b3\":\"\\u0448\\u0430\\u0431\"},dayOfMonthOrdinalParse:/\\d{1,2}-(\\u0443\\u043c|\\u044e\\u043c)/,ordinal:function(t){return t+(e[t]||e[t%10]||e[t>=100?100:null])},week:{dow:1,doy:7}})}(n(\"wd/R\"))},PA2r:function(t,e,n){!function(t){\"use strict\";var e=\"leden_\\xfanor_b\\u0159ezen_duben_kv\\u011bten_\\u010derven_\\u010dervenec_srpen_z\\xe1\\u0159\\xed_\\u0159\\xedjen_listopad_prosinec\".split(\"_\"),n=\"led_\\xfano_b\\u0159e_dub_kv\\u011b_\\u010dvn_\\u010dvc_srp_z\\xe1\\u0159_\\u0159\\xedj_lis_pro\".split(\"_\"),r=[/^led/i,/^\\xfano/i,/^b\\u0159e/i,/^dub/i,/^kv\\u011b/i,/^(\\u010dvn|\\u010derven$|\\u010dervna)/i,/^(\\u010dvc|\\u010dervenec|\\u010dervence)/i,/^srp/i,/^z\\xe1\\u0159/i,/^\\u0159\\xedj/i,/^lis/i,/^pro/i],i=/^(leden|\\xfanor|b\\u0159ezen|duben|kv\\u011bten|\\u010dervenec|\\u010dervence|\\u010derven|\\u010dervna|srpen|z\\xe1\\u0159\\xed|\\u0159\\xedjen|listopad|prosinec|led|\\xfano|b\\u0159e|dub|kv\\u011b|\\u010dvn|\\u010dvc|srp|z\\xe1\\u0159|\\u0159\\xedj|lis|pro)/i;function a(t){return t>1&&t<5&&1!=~~(t/10)}function o(t,e,n,r){var i=t+\" \";switch(n){case\"s\":return e||r?\"p\\xe1r sekund\":\"p\\xe1r sekundami\";case\"ss\":return e||r?i+(a(t)?\"sekundy\":\"sekund\"):i+\"sekundami\";case\"m\":return e?\"minuta\":r?\"minutu\":\"minutou\";case\"mm\":return e||r?i+(a(t)?\"minuty\":\"minut\"):i+\"minutami\";case\"h\":return e?\"hodina\":r?\"hodinu\":\"hodinou\";case\"hh\":return e||r?i+(a(t)?\"hodiny\":\"hodin\"):i+\"hodinami\";case\"d\":return e||r?\"den\":\"dnem\";case\"dd\":return e||r?i+(a(t)?\"dny\":\"dn\\xed\"):i+\"dny\";case\"M\":return e||r?\"m\\u011bs\\xedc\":\"m\\u011bs\\xedcem\";case\"MM\":return e||r?i+(a(t)?\"m\\u011bs\\xedce\":\"m\\u011bs\\xedc\\u016f\"):i+\"m\\u011bs\\xedci\";case\"y\":return e||r?\"rok\":\"rokem\";case\"yy\":return e||r?i+(a(t)?\"roky\":\"let\"):i+\"lety\"}}t.defineLocale(\"cs\",{months:e,monthsShort:n,monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(leden|ledna|\\xfanora|\\xfanor|b\\u0159ezen|b\\u0159ezna|duben|dubna|kv\\u011bten|kv\\u011btna|\\u010dervenec|\\u010dervence|\\u010derven|\\u010dervna|srpen|srpna|z\\xe1\\u0159\\xed|\\u0159\\xedjen|\\u0159\\xedjna|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|\\xfano|b\\u0159e|dub|kv\\u011b|\\u010dvn|\\u010dvc|srp|z\\xe1\\u0159|\\u0159\\xedj|lis|pro)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:\"ned\\u011ble_pond\\u011bl\\xed_\\xfater\\xfd_st\\u0159eda_\\u010dtvrtek_p\\xe1tek_sobota\".split(\"_\"),weekdaysShort:\"ne_po_\\xfat_st_\\u010dt_p\\xe1_so\".split(\"_\"),weekdaysMin:\"ne_po_\\xfat_st_\\u010dt_p\\xe1_so\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd D. MMMM YYYY H:mm\",l:\"D. M. YYYY\"},calendar:{sameDay:\"[dnes v] LT\",nextDay:\"[z\\xedtra v] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[v ned\\u011bli v] LT\";case 1:case 2:return\"[v] dddd [v] LT\";case 3:return\"[ve st\\u0159edu v] LT\";case 4:return\"[ve \\u010dtvrtek v] LT\";case 5:return\"[v p\\xe1tek v] LT\";case 6:return\"[v sobotu v] LT\"}},lastDay:\"[v\\u010dera v] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[minulou ned\\u011bli v] LT\";case 1:case 2:return\"[minul\\xe9] dddd [v] LT\";case 3:return\"[minulou st\\u0159edu v] LT\";case 4:case 5:return\"[minul\\xfd] dddd [v] LT\";case 6:return\"[minulou sobotu v] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"p\\u0159ed %s\",s:o,ss:o,m:o,mm:o,h:o,hh:o,d:o,dd:o,M:o,MM:o,y:o,yy:o},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},PCNd:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return it}));var r=n(\"ofXK\"),i=n(\"u47x\"),a=(n(\"8LU1\"),n(\"nLfN\"),n(\"fXoL\")),o=n(\"FKr1\"),s=(n(\"quSY\"),n(\"XNiG\")),l=(n(\"NXyV\"),n(\"VRyK\"),n(\"LRne\"),n(\"xgIS\"),n(\"rDax\")),c=n(\"vxfF\"),u=(n(\"FtGj\"),n(\"+rOU\")),h=n(\"3Pt+\"),d=n(\"kmnG\");n(\"IzEk\"),n(\"eIep\"),n(\"pLZG\"),n(\"lJxs\"),n(\"vkgz\"),n(\"3E0/\"),n(\"cH1L\");const f={provide:new a.w(\"mat-autocomplete-scroll-strategy\"),deps:[l.c],useFactory:function(t){return()=>t.scrollStrategies.reposition()}};let p=(()=>{class t{}return t.\\u0275mod=a.Vb({type:t}),t.\\u0275inj=a.Ub({factory:function(e){return new(e||t)},providers:[f],imports:[[l.f,o.n,o.i,r.c],c.b,o.n,o.i]}),t})();var m=n(\"bTqV\"),g=n(\"Wp6s\"),y=n(\"bSwM\"),v=n(\"0IaG\"),_=(n(\"JX91\"),n(\"R0Ic\"),n(\"qFsG\"));let b=(()=>{class t{constructor(){this.changes=new s.a,this.calendarLabel=\"Calendar\",this.openCalendarLabel=\"Open calendar\",this.closeCalendarLabel=\"Close calendar\",this.prevMonthLabel=\"Previous month\",this.nextMonthLabel=\"Next month\",this.prevYearLabel=\"Previous year\",this.nextYearLabel=\"Next year\",this.prevMultiYearLabel=\"Previous 20 years\",this.nextMultiYearLabel=\"Next 20 years\",this.switchToMonthViewLabel=\"Choose date\",this.switchToMultiYearViewLabel=\"Choose month and year\"}formatYearRange(t,e){return`${t} \\u2013 ${e}`}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=Object(a.Tb)({factory:function(){return new t},token:t,providedIn:\"root\"}),t})();const x={provide:new a.w(\"mat-datepicker-scroll-strategy\"),deps:[l.c],useFactory:function(t){return()=>t.scrollStrategies.reposition()}};let w=(()=>{class t{}return t.\\u0275mod=a.Vb({type:t}),t.\\u0275inj=a.Ub({factory:function(e){return new(e||t)},providers:[b,x],imports:[[r.c,m.c,v.f,l.f,i.a,u.f,o.i],c.b]}),t})(),k=(()=>{class t{}return t.\\u0275mod=a.Vb({type:t}),t.\\u0275inj=a.Ub({factory:function(e){return new(e||t)},imports:[[o.k,o.i],o.k,o.i]}),t})();var M=n(\"NFeN\"),T=n(\"MutI\"),S=n(\"STbY\"),A=n(\"M9IT\");n(\"R1ws\");let L=(()=>{class t{}return t.\\u0275mod=a.Vb({type:t}),t.\\u0275inj=a.Ub({factory:function(e){return new(e||t)},imports:[[r.c,o.i],o.i]}),t})();var C=n(\"Xa2L\"),E=n(\"d3UM\"),O=n(\"XhcP\"),D=n(\"1jcm\"),I=n(\"dNgK\"),P=n(\"Dh3D\"),R=n(\"xHqg\"),z=n(\"+0xr\"),j=n(\"GU7r\");n(\"PqYM\"),n(\"/uUt\"),n(\"1G5W\");let F=(()=>{class t{}return t.\\u0275mod=a.Vb({type:t}),t.\\u0275inj=a.Ub({factory:function(e){return new(e||t)},imports:[[r.c,o.i,u.f,o.s,j.c,i.a],o.i]}),t})();var N=n(\"/t3+\"),B=n(\"Qu3c\");n(\"0EQZ\");let Y=(()=>{class t{}return t.\\u0275mod=a.Vb({type:t}),t.\\u0275inj=a.Ub({factory:function(e){return new(e||t)},imports:[[o.s,o.i],o.i]}),t})(),H=(()=>{class t{}return t.\\u0275mod=a.Vb({type:t}),t.\\u0275inj=a.Ub({factory:function(e){return new(e||t)}}),t})();n(\"EY2u\");let V=(()=>{class t{}return t.\\u0275mod=a.Vb({type:t}),t.\\u0275inj=a.Ub({factory:function(e){return new(e||t)},imports:[[r.c,o.i,H,u.f]]}),t})();var U=n(\"TU8p\"),W=n(\"jaxi\");const q=[m.c,y.b,d.e,_.c,S.c,M.b,w,o.l,O.e,N.b,T.b,F,g.d,E.b,C.a,v.f,z.l,P.c,A.b,I.c,D.b,L,k,B.b,R.d,p,Y,V,U.b,W.c];let G=(()=>{class t{}return t.\\u0275mod=a.Vb({type:t}),t.\\u0275inj=a.Ub({factory:function(e){return new(e||t)},imports:[q,m.c,y.b,d.e,_.c,S.c,M.b,w,o.l,O.e,N.b,T.b,F,g.d,E.b,C.a,v.f,z.l,P.c,A.b,I.c,D.b,L,k,B.b,R.d,p,Y,V,U.b,W.c]}),t})();var X=n(\"pD6V\"),Z=n(\"znSr\"),J=n(\"XiUz\");let K=(()=>{class t{}return t.\\u0275mod=a.Vb({type:t}),t.\\u0275inj=a.Ub({factory:function(e){return new(e||t)},imports:[[X.c]]}),t})(),$=(()=>{class t{constructor(t,e){Object(r.z)(e)&&!t&&console.warn(\"Warning: Flex Layout loaded on the server without FlexLayoutServerModule\")}static withConfig(e,n=[]){return{ngModule:t,providers:e.serverLoaded?[{provide:X.e,useValue:Object.assign(Object.assign({},X.d),e)},{provide:X.a,useValue:n,multi:!0},{provide:X.g,useValue:!0}]:[{provide:X.e,useValue:Object.assign(Object.assign({},X.d),e)},{provide:X.a,useValue:n,multi:!0}]}}}return t.\\u0275mod=a.Vb({type:t}),t.\\u0275inj=a.Ub({factory:function(e){return new(e||t)(a.hc(X.g),a.hc(a.K))},imports:[[J.g,Z.d,K],J.g,Z.d,K]}),t})();var Q=n(\"tk/3\"),tt=n(\"oOf3\"),et=n(\"ZF+8\"),nt=n(\"95T3\"),rt=n(\"u3+B\");n(\"NXqw\"),n(\"EHOR\"),n(\"93C2\"),n(\"BHZs\"),n(\"KkKq\"),n(\"ENCR\"),n(\"Bzzc\"),n(\"h93q\"),n(\"efK2\"),rt.b.plotlyjs=nt;let it=(()=>{class t{}return t.\\u0275mod=a.Vb({type:t}),t.\\u0275inj=a.Ub({factory:function(e){return new(e||t)},providers:[et.d],imports:[[r.c,h.j,h.r,G,$,Q.b],h.j,h.r,G,$,Q.b,rt.b,tt.a]}),t})()},PeUW:function(t,e,n){!function(t){\"use strict\";var e={1:\"\\u0be7\",2:\"\\u0be8\",3:\"\\u0be9\",4:\"\\u0bea\",5:\"\\u0beb\",6:\"\\u0bec\",7:\"\\u0bed\",8:\"\\u0bee\",9:\"\\u0bef\",0:\"\\u0be6\"},n={\"\\u0be7\":\"1\",\"\\u0be8\":\"2\",\"\\u0be9\":\"3\",\"\\u0bea\":\"4\",\"\\u0beb\":\"5\",\"\\u0bec\":\"6\",\"\\u0bed\":\"7\",\"\\u0bee\":\"8\",\"\\u0bef\":\"9\",\"\\u0be6\":\"0\"};t.defineLocale(\"ta\",{months:\"\\u0b9c\\u0ba9\\u0bb5\\u0bb0\\u0bbf_\\u0baa\\u0bbf\\u0baa\\u0bcd\\u0bb0\\u0bb5\\u0bb0\\u0bbf_\\u0bae\\u0bbe\\u0bb0\\u0bcd\\u0b9a\\u0bcd_\\u0b8f\\u0baa\\u0bcd\\u0bb0\\u0bb2\\u0bcd_\\u0bae\\u0bc7_\\u0b9c\\u0bc2\\u0ba9\\u0bcd_\\u0b9c\\u0bc2\\u0bb2\\u0bc8_\\u0b86\\u0b95\\u0bb8\\u0bcd\\u0b9f\\u0bcd_\\u0b9a\\u0bc6\\u0baa\\u0bcd\\u0b9f\\u0bc6\\u0bae\\u0bcd\\u0baa\\u0bb0\\u0bcd_\\u0b85\\u0b95\\u0bcd\\u0b9f\\u0bc7\\u0bbe\\u0baa\\u0bb0\\u0bcd_\\u0ba8\\u0bb5\\u0bae\\u0bcd\\u0baa\\u0bb0\\u0bcd_\\u0b9f\\u0bbf\\u0b9a\\u0bae\\u0bcd\\u0baa\\u0bb0\\u0bcd\".split(\"_\"),monthsShort:\"\\u0b9c\\u0ba9\\u0bb5\\u0bb0\\u0bbf_\\u0baa\\u0bbf\\u0baa\\u0bcd\\u0bb0\\u0bb5\\u0bb0\\u0bbf_\\u0bae\\u0bbe\\u0bb0\\u0bcd\\u0b9a\\u0bcd_\\u0b8f\\u0baa\\u0bcd\\u0bb0\\u0bb2\\u0bcd_\\u0bae\\u0bc7_\\u0b9c\\u0bc2\\u0ba9\\u0bcd_\\u0b9c\\u0bc2\\u0bb2\\u0bc8_\\u0b86\\u0b95\\u0bb8\\u0bcd\\u0b9f\\u0bcd_\\u0b9a\\u0bc6\\u0baa\\u0bcd\\u0b9f\\u0bc6\\u0bae\\u0bcd\\u0baa\\u0bb0\\u0bcd_\\u0b85\\u0b95\\u0bcd\\u0b9f\\u0bc7\\u0bbe\\u0baa\\u0bb0\\u0bcd_\\u0ba8\\u0bb5\\u0bae\\u0bcd\\u0baa\\u0bb0\\u0bcd_\\u0b9f\\u0bbf\\u0b9a\\u0bae\\u0bcd\\u0baa\\u0bb0\\u0bcd\".split(\"_\"),weekdays:\"\\u0b9e\\u0bbe\\u0baf\\u0bbf\\u0bb1\\u0bcd\\u0bb1\\u0bc1\\u0b95\\u0bcd\\u0b95\\u0bbf\\u0bb4\\u0bae\\u0bc8_\\u0ba4\\u0bbf\\u0b99\\u0bcd\\u0b95\\u0b9f\\u0bcd\\u0b95\\u0bbf\\u0bb4\\u0bae\\u0bc8_\\u0b9a\\u0bc6\\u0bb5\\u0bcd\\u0bb5\\u0bbe\\u0baf\\u0bcd\\u0b95\\u0bbf\\u0bb4\\u0bae\\u0bc8_\\u0baa\\u0bc1\\u0ba4\\u0ba9\\u0bcd\\u0b95\\u0bbf\\u0bb4\\u0bae\\u0bc8_\\u0bb5\\u0bbf\\u0baf\\u0bbe\\u0bb4\\u0b95\\u0bcd\\u0b95\\u0bbf\\u0bb4\\u0bae\\u0bc8_\\u0bb5\\u0bc6\\u0bb3\\u0bcd\\u0bb3\\u0bbf\\u0b95\\u0bcd\\u0b95\\u0bbf\\u0bb4\\u0bae\\u0bc8_\\u0b9a\\u0ba9\\u0bbf\\u0b95\\u0bcd\\u0b95\\u0bbf\\u0bb4\\u0bae\\u0bc8\".split(\"_\"),weekdaysShort:\"\\u0b9e\\u0bbe\\u0baf\\u0bbf\\u0bb1\\u0bc1_\\u0ba4\\u0bbf\\u0b99\\u0bcd\\u0b95\\u0bb3\\u0bcd_\\u0b9a\\u0bc6\\u0bb5\\u0bcd\\u0bb5\\u0bbe\\u0baf\\u0bcd_\\u0baa\\u0bc1\\u0ba4\\u0ba9\\u0bcd_\\u0bb5\\u0bbf\\u0baf\\u0bbe\\u0bb4\\u0ba9\\u0bcd_\\u0bb5\\u0bc6\\u0bb3\\u0bcd\\u0bb3\\u0bbf_\\u0b9a\\u0ba9\\u0bbf\".split(\"_\"),weekdaysMin:\"\\u0b9e\\u0bbe_\\u0ba4\\u0bbf_\\u0b9a\\u0bc6_\\u0baa\\u0bc1_\\u0bb5\\u0bbf_\\u0bb5\\u0bc6_\\u0b9a\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, HH:mm\",LLLL:\"dddd, D MMMM YYYY, HH:mm\"},calendar:{sameDay:\"[\\u0b87\\u0ba9\\u0bcd\\u0bb1\\u0bc1] LT\",nextDay:\"[\\u0ba8\\u0bbe\\u0bb3\\u0bc8] LT\",nextWeek:\"dddd, LT\",lastDay:\"[\\u0ba8\\u0bc7\\u0bb1\\u0bcd\\u0bb1\\u0bc1] LT\",lastWeek:\"[\\u0b95\\u0b9f\\u0ba8\\u0bcd\\u0ba4 \\u0bb5\\u0bbe\\u0bb0\\u0bae\\u0bcd] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s \\u0b87\\u0bb2\\u0bcd\",past:\"%s \\u0bae\\u0bc1\\u0ba9\\u0bcd\",s:\"\\u0b92\\u0bb0\\u0bc1 \\u0b9a\\u0bbf\\u0bb2 \\u0bb5\\u0bbf\\u0ba8\\u0bbe\\u0b9f\\u0bbf\\u0b95\\u0bb3\\u0bcd\",ss:\"%d \\u0bb5\\u0bbf\\u0ba8\\u0bbe\\u0b9f\\u0bbf\\u0b95\\u0bb3\\u0bcd\",m:\"\\u0b92\\u0bb0\\u0bc1 \\u0ba8\\u0bbf\\u0bae\\u0bbf\\u0b9f\\u0bae\\u0bcd\",mm:\"%d \\u0ba8\\u0bbf\\u0bae\\u0bbf\\u0b9f\\u0b99\\u0bcd\\u0b95\\u0bb3\\u0bcd\",h:\"\\u0b92\\u0bb0\\u0bc1 \\u0bae\\u0ba3\\u0bbf \\u0ba8\\u0bc7\\u0bb0\\u0bae\\u0bcd\",hh:\"%d \\u0bae\\u0ba3\\u0bbf \\u0ba8\\u0bc7\\u0bb0\\u0bae\\u0bcd\",d:\"\\u0b92\\u0bb0\\u0bc1 \\u0ba8\\u0bbe\\u0bb3\\u0bcd\",dd:\"%d \\u0ba8\\u0bbe\\u0b9f\\u0bcd\\u0b95\\u0bb3\\u0bcd\",M:\"\\u0b92\\u0bb0\\u0bc1 \\u0bae\\u0bbe\\u0ba4\\u0bae\\u0bcd\",MM:\"%d \\u0bae\\u0bbe\\u0ba4\\u0b99\\u0bcd\\u0b95\\u0bb3\\u0bcd\",y:\"\\u0b92\\u0bb0\\u0bc1 \\u0bb5\\u0bb0\\u0bc1\\u0b9f\\u0bae\\u0bcd\",yy:\"%d \\u0b86\\u0ba3\\u0bcd\\u0b9f\\u0bc1\\u0b95\\u0bb3\\u0bcd\"},dayOfMonthOrdinalParse:/\\d{1,2}\\u0bb5\\u0ba4\\u0bc1/,ordinal:function(t){return t+\"\\u0bb5\\u0ba4\\u0bc1\"},preparse:function(t){return t.replace(/[\\u0be7\\u0be8\\u0be9\\u0bea\\u0beb\\u0bec\\u0bed\\u0bee\\u0bef\\u0be6]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\\d/g,(function(t){return e[t]}))},meridiemParse:/\\u0baf\\u0bbe\\u0bae\\u0bae\\u0bcd|\\u0bb5\\u0bc8\\u0b95\\u0bb1\\u0bc8|\\u0b95\\u0bbe\\u0bb2\\u0bc8|\\u0ba8\\u0ba3\\u0bcd\\u0baa\\u0b95\\u0bb2\\u0bcd|\\u0b8e\\u0bb1\\u0bcd\\u0baa\\u0bbe\\u0b9f\\u0bc1|\\u0bae\\u0bbe\\u0bb2\\u0bc8/,meridiem:function(t,e,n){return t<2?\" \\u0baf\\u0bbe\\u0bae\\u0bae\\u0bcd\":t<6?\" \\u0bb5\\u0bc8\\u0b95\\u0bb1\\u0bc8\":t<10?\" \\u0b95\\u0bbe\\u0bb2\\u0bc8\":t<14?\" \\u0ba8\\u0ba3\\u0bcd\\u0baa\\u0b95\\u0bb2\\u0bcd\":t<18?\" \\u0b8e\\u0bb1\\u0bcd\\u0baa\\u0bbe\\u0b9f\\u0bc1\":t<22?\" \\u0bae\\u0bbe\\u0bb2\\u0bc8\":\" \\u0baf\\u0bbe\\u0bae\\u0bae\\u0bcd\"},meridiemHour:function(t,e){return 12===t&&(t=0),\"\\u0baf\\u0bbe\\u0bae\\u0bae\\u0bcd\"===e?t<2?t:t+12:\"\\u0bb5\\u0bc8\\u0b95\\u0bb1\\u0bc8\"===e||\"\\u0b95\\u0bbe\\u0bb2\\u0bc8\"===e||\"\\u0ba8\\u0ba3\\u0bcd\\u0baa\\u0b95\\u0bb2\\u0bcd\"===e&&t>=10?t:t+12},week:{dow:0,doy:6}})}(n(\"wd/R\"))},PpIw:function(t,e,n){!function(t){\"use strict\";var e={1:\"\\u0ce7\",2:\"\\u0ce8\",3:\"\\u0ce9\",4:\"\\u0cea\",5:\"\\u0ceb\",6:\"\\u0cec\",7:\"\\u0ced\",8:\"\\u0cee\",9:\"\\u0cef\",0:\"\\u0ce6\"},n={\"\\u0ce7\":\"1\",\"\\u0ce8\":\"2\",\"\\u0ce9\":\"3\",\"\\u0cea\":\"4\",\"\\u0ceb\":\"5\",\"\\u0cec\":\"6\",\"\\u0ced\":\"7\",\"\\u0cee\":\"8\",\"\\u0cef\":\"9\",\"\\u0ce6\":\"0\"};t.defineLocale(\"kn\",{months:\"\\u0c9c\\u0ca8\\u0cb5\\u0cb0\\u0cbf_\\u0cab\\u0cc6\\u0cac\\u0ccd\\u0cb0\\u0cb5\\u0cb0\\u0cbf_\\u0cae\\u0cbe\\u0cb0\\u0ccd\\u0c9a\\u0ccd_\\u0c8f\\u0caa\\u0ccd\\u0cb0\\u0cbf\\u0cb2\\u0ccd_\\u0cae\\u0cc6\\u0cd5_\\u0c9c\\u0cc2\\u0ca8\\u0ccd_\\u0c9c\\u0cc1\\u0cb2\\u0cc6\\u0cd6_\\u0c86\\u0c97\\u0cb8\\u0ccd\\u0c9f\\u0ccd_\\u0cb8\\u0cc6\\u0caa\\u0ccd\\u0c9f\\u0cc6\\u0c82\\u0cac\\u0cb0\\u0ccd_\\u0c85\\u0c95\\u0ccd\\u0c9f\\u0cc6\\u0cc2\\u0cd5\\u0cac\\u0cb0\\u0ccd_\\u0ca8\\u0cb5\\u0cc6\\u0c82\\u0cac\\u0cb0\\u0ccd_\\u0ca1\\u0cbf\\u0cb8\\u0cc6\\u0c82\\u0cac\\u0cb0\\u0ccd\".split(\"_\"),monthsShort:\"\\u0c9c\\u0ca8_\\u0cab\\u0cc6\\u0cac\\u0ccd\\u0cb0_\\u0cae\\u0cbe\\u0cb0\\u0ccd\\u0c9a\\u0ccd_\\u0c8f\\u0caa\\u0ccd\\u0cb0\\u0cbf\\u0cb2\\u0ccd_\\u0cae\\u0cc6\\u0cd5_\\u0c9c\\u0cc2\\u0ca8\\u0ccd_\\u0c9c\\u0cc1\\u0cb2\\u0cc6\\u0cd6_\\u0c86\\u0c97\\u0cb8\\u0ccd\\u0c9f\\u0ccd_\\u0cb8\\u0cc6\\u0caa\\u0ccd\\u0c9f\\u0cc6\\u0c82_\\u0c85\\u0c95\\u0ccd\\u0c9f\\u0cc6\\u0cc2\\u0cd5_\\u0ca8\\u0cb5\\u0cc6\\u0c82_\\u0ca1\\u0cbf\\u0cb8\\u0cc6\\u0c82\".split(\"_\"),monthsParseExact:!0,weekdays:\"\\u0cad\\u0cbe\\u0ca8\\u0cc1\\u0cb5\\u0cbe\\u0cb0_\\u0cb8\\u0cc6\\u0cc2\\u0cd5\\u0cae\\u0cb5\\u0cbe\\u0cb0_\\u0cae\\u0c82\\u0c97\\u0cb3\\u0cb5\\u0cbe\\u0cb0_\\u0cac\\u0cc1\\u0ca7\\u0cb5\\u0cbe\\u0cb0_\\u0c97\\u0cc1\\u0cb0\\u0cc1\\u0cb5\\u0cbe\\u0cb0_\\u0cb6\\u0cc1\\u0c95\\u0ccd\\u0cb0\\u0cb5\\u0cbe\\u0cb0_\\u0cb6\\u0ca8\\u0cbf\\u0cb5\\u0cbe\\u0cb0\".split(\"_\"),weekdaysShort:\"\\u0cad\\u0cbe\\u0ca8\\u0cc1_\\u0cb8\\u0cc6\\u0cc2\\u0cd5\\u0cae_\\u0cae\\u0c82\\u0c97\\u0cb3_\\u0cac\\u0cc1\\u0ca7_\\u0c97\\u0cc1\\u0cb0\\u0cc1_\\u0cb6\\u0cc1\\u0c95\\u0ccd\\u0cb0_\\u0cb6\\u0ca8\\u0cbf\".split(\"_\"),weekdaysMin:\"\\u0cad\\u0cbe_\\u0cb8\\u0cc6\\u0cc2\\u0cd5_\\u0cae\\u0c82_\\u0cac\\u0cc1_\\u0c97\\u0cc1_\\u0cb6\\u0cc1_\\u0cb6\".split(\"_\"),longDateFormat:{LT:\"A h:mm\",LTS:\"A h:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm\",LLLL:\"dddd, D MMMM YYYY, A h:mm\"},calendar:{sameDay:\"[\\u0c87\\u0c82\\u0ca6\\u0cc1] LT\",nextDay:\"[\\u0ca8\\u0cbe\\u0cb3\\u0cc6] LT\",nextWeek:\"dddd, LT\",lastDay:\"[\\u0ca8\\u0cbf\\u0ca8\\u0ccd\\u0ca8\\u0cc6] LT\",lastWeek:\"[\\u0c95\\u0cc6\\u0cc2\\u0ca8\\u0cc6\\u0caf] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s \\u0ca8\\u0c82\\u0ca4\\u0cb0\",past:\"%s \\u0cb9\\u0cbf\\u0c82\\u0ca6\\u0cc6\",s:\"\\u0c95\\u0cc6\\u0cb2\\u0cb5\\u0cc1 \\u0c95\\u0ccd\\u0cb7\\u0ca3\\u0c97\\u0cb3\\u0cc1\",ss:\"%d \\u0cb8\\u0cc6\\u0c95\\u0cc6\\u0c82\\u0ca1\\u0cc1\\u0c97\\u0cb3\\u0cc1\",m:\"\\u0c92\\u0c82\\u0ca6\\u0cc1 \\u0ca8\\u0cbf\\u0cae\\u0cbf\\u0cb7\",mm:\"%d \\u0ca8\\u0cbf\\u0cae\\u0cbf\\u0cb7\",h:\"\\u0c92\\u0c82\\u0ca6\\u0cc1 \\u0c97\\u0c82\\u0c9f\\u0cc6\",hh:\"%d \\u0c97\\u0c82\\u0c9f\\u0cc6\",d:\"\\u0c92\\u0c82\\u0ca6\\u0cc1 \\u0ca6\\u0cbf\\u0ca8\",dd:\"%d \\u0ca6\\u0cbf\\u0ca8\",M:\"\\u0c92\\u0c82\\u0ca6\\u0cc1 \\u0ca4\\u0cbf\\u0c82\\u0c97\\u0cb3\\u0cc1\",MM:\"%d \\u0ca4\\u0cbf\\u0c82\\u0c97\\u0cb3\\u0cc1\",y:\"\\u0c92\\u0c82\\u0ca6\\u0cc1 \\u0cb5\\u0cb0\\u0ccd\\u0cb7\",yy:\"%d \\u0cb5\\u0cb0\\u0ccd\\u0cb7\"},preparse:function(t){return t.replace(/[\\u0ce7\\u0ce8\\u0ce9\\u0cea\\u0ceb\\u0cec\\u0ced\\u0cee\\u0cef\\u0ce6]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\\d/g,(function(t){return e[t]}))},meridiemParse:/\\u0cb0\\u0cbe\\u0ca4\\u0ccd\\u0cb0\\u0cbf|\\u0cac\\u0cc6\\u0cb3\\u0cbf\\u0c97\\u0ccd\\u0c97\\u0cc6|\\u0cae\\u0ca7\\u0ccd\\u0caf\\u0cbe\\u0cb9\\u0ccd\\u0ca8|\\u0cb8\\u0c82\\u0c9c\\u0cc6/,meridiemHour:function(t,e){return 12===t&&(t=0),\"\\u0cb0\\u0cbe\\u0ca4\\u0ccd\\u0cb0\\u0cbf\"===e?t<4?t:t+12:\"\\u0cac\\u0cc6\\u0cb3\\u0cbf\\u0c97\\u0ccd\\u0c97\\u0cc6\"===e?t:\"\\u0cae\\u0ca7\\u0ccd\\u0caf\\u0cbe\\u0cb9\\u0ccd\\u0ca8\"===e?t>=10?t:t+12:\"\\u0cb8\\u0c82\\u0c9c\\u0cc6\"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?\"\\u0cb0\\u0cbe\\u0ca4\\u0ccd\\u0cb0\\u0cbf\":t<10?\"\\u0cac\\u0cc6\\u0cb3\\u0cbf\\u0c97\\u0ccd\\u0c97\\u0cc6\":t<17?\"\\u0cae\\u0ca7\\u0ccd\\u0caf\\u0cbe\\u0cb9\\u0ccd\\u0ca8\":t<20?\"\\u0cb8\\u0c82\\u0c9c\\u0cc6\":\"\\u0cb0\\u0cbe\\u0ca4\\u0ccd\\u0cb0\\u0cbf\"},dayOfMonthOrdinalParse:/\\d{1,2}(\\u0ca8\\u0cc6\\u0cd5)/,ordinal:function(t){return t+\"\\u0ca8\\u0cc6\\u0cd5\"},week:{dow:0,doy:6}})}(n(\"wd/R\"))},PqYM:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return s}));var r=n(\"HDdC\"),i=n(\"D0XW\"),a=n(\"Y7HM\"),o=n(\"z+Ro\");function s(t=0,e,n){let s=-1;return Object(a.a)(e)?s=Number(e)<1?1:Number(e):Object(o.a)(e)&&(n=e),Object(o.a)(n)||(n=i.a),new r.a(e=>{const r=Object(a.a)(t)?t:+t-n.now();return n.schedule(l,r,{index:0,period:s,subscriber:e})})}function l(t){const{index:e,period:n,subscriber:r}=t;if(r.next(e),!r.closed){if(-1===n)return r.complete();t.index=e+1,this.schedule(t,n)}}},Qj4J:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"ar-kw\",{months:\"\\u064a\\u0646\\u0627\\u064a\\u0631_\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631_\\u0645\\u0627\\u0631\\u0633_\\u0623\\u0628\\u0631\\u064a\\u0644_\\u0645\\u0627\\u064a_\\u064a\\u0648\\u0646\\u064a\\u0648_\\u064a\\u0648\\u0644\\u064a\\u0648\\u0632_\\u063a\\u0634\\u062a_\\u0634\\u062a\\u0646\\u0628\\u0631_\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631_\\u0646\\u0648\\u0646\\u0628\\u0631_\\u062f\\u062c\\u0646\\u0628\\u0631\".split(\"_\"),monthsShort:\"\\u064a\\u0646\\u0627\\u064a\\u0631_\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631_\\u0645\\u0627\\u0631\\u0633_\\u0623\\u0628\\u0631\\u064a\\u0644_\\u0645\\u0627\\u064a_\\u064a\\u0648\\u0646\\u064a\\u0648_\\u064a\\u0648\\u0644\\u064a\\u0648\\u0632_\\u063a\\u0634\\u062a_\\u0634\\u062a\\u0646\\u0628\\u0631_\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631_\\u0646\\u0648\\u0646\\u0628\\u0631_\\u062f\\u062c\\u0646\\u0628\\u0631\".split(\"_\"),weekdays:\"\\u0627\\u0644\\u0623\\u062d\\u062f_\\u0627\\u0644\\u0625\\u062a\\u0646\\u064a\\u0646_\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621_\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621_\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633_\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629_\\u0627\\u0644\\u0633\\u0628\\u062a\".split(\"_\"),weekdaysShort:\"\\u0627\\u062d\\u062f_\\u0627\\u062a\\u0646\\u064a\\u0646_\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621_\\u0627\\u0631\\u0628\\u0639\\u0627\\u0621_\\u062e\\u0645\\u064a\\u0633_\\u062c\\u0645\\u0639\\u0629_\\u0633\\u0628\\u062a\".split(\"_\"),weekdaysMin:\"\\u062d_\\u0646_\\u062b_\\u0631_\\u062e_\\u062c_\\u0633\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[\\u0627\\u0644\\u064a\\u0648\\u0645 \\u0639\\u0644\\u0649 \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",nextDay:\"[\\u063a\\u062f\\u0627 \\u0639\\u0644\\u0649 \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",nextWeek:\"dddd [\\u0639\\u0644\\u0649 \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",lastDay:\"[\\u0623\\u0645\\u0633 \\u0639\\u0644\\u0649 \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",lastWeek:\"dddd [\\u0639\\u0644\\u0649 \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",sameElse:\"L\"},relativeTime:{future:\"\\u0641\\u064a %s\",past:\"\\u0645\\u0646\\u0630 %s\",s:\"\\u062b\\u0648\\u0627\\u0646\",ss:\"%d \\u062b\\u0627\\u0646\\u064a\\u0629\",m:\"\\u062f\\u0642\\u064a\\u0642\\u0629\",mm:\"%d \\u062f\\u0642\\u0627\\u0626\\u0642\",h:\"\\u0633\\u0627\\u0639\\u0629\",hh:\"%d \\u0633\\u0627\\u0639\\u0627\\u062a\",d:\"\\u064a\\u0648\\u0645\",dd:\"%d \\u0623\\u064a\\u0627\\u0645\",M:\"\\u0634\\u0647\\u0631\",MM:\"%d \\u0623\\u0634\\u0647\\u0631\",y:\"\\u0633\\u0646\\u0629\",yy:\"%d \\u0633\\u0646\\u0648\\u0627\\u062a\"},week:{dow:0,doy:12}})}(n(\"wd/R\"))},Qu3c:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return M})),n.d(e,\"b\",(function(){return S}));var r=n(\"rDax\"),i=n(\"u47x\"),a=n(\"ofXK\"),o=n(\"fXoL\"),s=n(\"FKr1\"),l=n(\"vxfF\"),c=n(\"8LU1\"),u=n(\"FtGj\"),h=n(\"0MNC\"),d=n(\"nLfN\"),f=n(\"+rOU\"),p=n(\"XNiG\"),m=n(\"1G5W\"),g=n(\"IzEk\"),y=n(\"R0Ic\"),v=n(\"cH1L\");const _={tooltipState:Object(y.m)(\"state\",[Object(y.j)(\"initial, void, hidden\",Object(y.k)({opacity:0,transform:\"scale(0)\"})),Object(y.j)(\"visible\",Object(y.k)({transform:\"scale(1)\"})),Object(y.l)(\"* => visible\",Object(y.e)(\"200ms cubic-bezier(0, 0, 0.2, 1)\",Object(y.g)([Object(y.k)({opacity:0,transform:\"scale(0)\",offset:0}),Object(y.k)({opacity:.5,transform:\"scale(0.99)\",offset:.5}),Object(y.k)({opacity:1,transform:\"scale(1)\",offset:1})]))),Object(y.l)(\"* => hidden\",Object(y.e)(\"100ms cubic-bezier(0, 0, 0.2, 1)\",Object(y.k)({opacity:0})))])},b=Object(d.f)({passive:!0}),x=new o.w(\"mat-tooltip-scroll-strategy\"),w={provide:x,deps:[r.c],useFactory:function(t){return()=>t.scrollStrategies.reposition({scrollThrottle:20})}},k=new o.w(\"mat-tooltip-default-options\",{providedIn:\"root\",factory:function(){return{showDelay:0,hideDelay:0,touchendHideDelay:1500}}});let M=(()=>{class t{constructor(t,e,n,r,i,a,o,s,l,c,h,d){this._overlay=t,this._elementRef=e,this._scrollDispatcher=n,this._viewContainerRef=r,this._ngZone=i,this._platform=a,this._ariaDescriber=o,this._focusMonitor=s,this._dir=c,this._defaultOptions=h,this._position=\"below\",this._disabled=!1,this._viewInitialized=!1,this._pointerExitEventsInitialized=!1,this.showDelay=this._defaultOptions.showDelay,this.hideDelay=this._defaultOptions.hideDelay,this.touchGestures=\"auto\",this._message=\"\",this._passiveListeners=[],this._destroyed=new p.a,this._handleKeydown=t=>{this._isTooltipVisible()&&t.keyCode===u.f&&!Object(u.r)(t)&&(t.preventDefault(),t.stopPropagation(),this._ngZone.run(()=>this.hide(0)))},this._scrollStrategy=l,h&&(h.position&&(this.position=h.position),h.touchGestures&&(this.touchGestures=h.touchGestures)),i.runOutsideAngular(()=>{e.nativeElement.addEventListener(\"keydown\",this._handleKeydown)})}get position(){return this._position}set position(t){t!==this._position&&(this._position=t,this._overlayRef&&(this._updatePosition(),this._tooltipInstance&&this._tooltipInstance.show(0),this._overlayRef.updatePosition()))}get disabled(){return this._disabled}set disabled(t){this._disabled=Object(c.c)(t),this._disabled?this.hide(0):this._setupPointerEnterEventsIfNeeded()}get message(){return this._message}set message(t){this._ariaDescriber.removeDescription(this._elementRef.nativeElement,this._message,\"tooltip\"),this._message=null!=t?String(t).trim():\"\",!this._message&&this._isTooltipVisible()?this.hide(0):(this._setupPointerEnterEventsIfNeeded(),this._updateTooltipMessage(),this._ngZone.runOutsideAngular(()=>{Promise.resolve().then(()=>{this._ariaDescriber.describe(this._elementRef.nativeElement,this.message,\"tooltip\")})}))}get tooltipClass(){return this._tooltipClass}set tooltipClass(t){this._tooltipClass=t,this._tooltipInstance&&this._setTooltipClass(this._tooltipClass)}ngAfterViewInit(){this._viewInitialized=!0,this._setupPointerEnterEventsIfNeeded(),this._focusMonitor.monitor(this._elementRef).pipe(Object(m.a)(this._destroyed)).subscribe(t=>{t?\"keyboard\"===t&&this._ngZone.run(()=>this.show()):this._ngZone.run(()=>this.hide(0))})}ngOnDestroy(){const t=this._elementRef.nativeElement;clearTimeout(this._touchstartTimeout),this._overlayRef&&(this._overlayRef.dispose(),this._tooltipInstance=null),t.removeEventListener(\"keydown\",this._handleKeydown),this._passiveListeners.forEach(([e,n])=>{t.removeEventListener(e,n,b)}),this._passiveListeners.length=0,this._destroyed.next(),this._destroyed.complete(),this._ariaDescriber.removeDescription(t,this.message,\"tooltip\"),this._focusMonitor.stopMonitoring(t)}show(t=this.showDelay){if(this.disabled||!this.message||this._isTooltipVisible()&&!this._tooltipInstance._showTimeoutId&&!this._tooltipInstance._hideTimeoutId)return;const e=this._createOverlay();this._detach(),this._portal=this._portal||new f.d(T,this._viewContainerRef),this._tooltipInstance=e.attach(this._portal).instance,this._tooltipInstance.afterHidden().pipe(Object(m.a)(this._destroyed)).subscribe(()=>this._detach()),this._setTooltipClass(this._tooltipClass),this._updateTooltipMessage(),this._tooltipInstance.show(t)}hide(t=this.hideDelay){this._tooltipInstance&&this._tooltipInstance.hide(t)}toggle(){this._isTooltipVisible()?this.hide():this.show()}_isTooltipVisible(){return!!this._tooltipInstance&&this._tooltipInstance.isVisible()}_createOverlay(){if(this._overlayRef)return this._overlayRef;const t=this._scrollDispatcher.getAncestorScrollContainers(this._elementRef),e=this._overlay.position().flexibleConnectedTo(this._elementRef).withTransformOriginOn(\".mat-tooltip\").withFlexibleDimensions(!1).withViewportMargin(8).withScrollableContainers(t);return e.positionChanges.pipe(Object(m.a)(this._destroyed)).subscribe(t=>{this._tooltipInstance&&t.scrollableViewProperties.isOverlayClipped&&this._tooltipInstance.isVisible()&&this._ngZone.run(()=>this.hide(0))}),this._overlayRef=this._overlay.create({direction:this._dir,positionStrategy:e,panelClass:\"mat-tooltip-panel\",scrollStrategy:this._scrollStrategy()}),this._updatePosition(),this._overlayRef.detachments().pipe(Object(m.a)(this._destroyed)).subscribe(()=>this._detach()),this._overlayRef}_detach(){this._overlayRef&&this._overlayRef.hasAttached()&&this._overlayRef.detach(),this._tooltipInstance=null}_updatePosition(){const t=this._overlayRef.getConfig().positionStrategy,e=this._getOrigin(),n=this._getOverlayPosition();t.withPositions([Object.assign(Object.assign({},e.main),n.main),Object.assign(Object.assign({},e.fallback),n.fallback)])}_getOrigin(){const t=!this._dir||\"ltr\"==this._dir.value,e=this.position;let n;\"above\"==e||\"below\"==e?n={originX:\"center\",originY:\"above\"==e?\"top\":\"bottom\"}:\"before\"==e||\"left\"==e&&t||\"right\"==e&&!t?n={originX:\"start\",originY:\"center\"}:(\"after\"==e||\"right\"==e&&t||\"left\"==e&&!t)&&(n={originX:\"end\",originY:\"center\"});const{x:r,y:i}=this._invertPosition(n.originX,n.originY);return{main:n,fallback:{originX:r,originY:i}}}_getOverlayPosition(){const t=!this._dir||\"ltr\"==this._dir.value,e=this.position;let n;\"above\"==e?n={overlayX:\"center\",overlayY:\"bottom\"}:\"below\"==e?n={overlayX:\"center\",overlayY:\"top\"}:\"before\"==e||\"left\"==e&&t||\"right\"==e&&!t?n={overlayX:\"end\",overlayY:\"center\"}:(\"after\"==e||\"right\"==e&&t||\"left\"==e&&!t)&&(n={overlayX:\"start\",overlayY:\"center\"});const{x:r,y:i}=this._invertPosition(n.overlayX,n.overlayY);return{main:n,fallback:{overlayX:r,overlayY:i}}}_updateTooltipMessage(){this._tooltipInstance&&(this._tooltipInstance.message=this.message,this._tooltipInstance._markForCheck(),this._ngZone.onMicrotaskEmpty.pipe(Object(g.a)(1),Object(m.a)(this._destroyed)).subscribe(()=>{this._tooltipInstance&&this._overlayRef.updatePosition()}))}_setTooltipClass(t){this._tooltipInstance&&(this._tooltipInstance.tooltipClass=t,this._tooltipInstance._markForCheck())}_invertPosition(t,e){return\"above\"===this.position||\"below\"===this.position?\"top\"===e?e=\"bottom\":\"bottom\"===e&&(e=\"top\"):\"end\"===t?t=\"start\":\"start\"===t&&(t=\"end\"),{x:t,y:e}}_setupPointerEnterEventsIfNeeded(){!this._disabled&&this.message&&this._viewInitialized&&!this._passiveListeners.length&&(this._platformSupportsMouseEvents()?this._passiveListeners.push([\"mouseenter\",()=>{this._setupPointerExitEventsIfNeeded(),this.show()}]):\"off\"!==this.touchGestures&&(this._disableNativeGesturesIfNecessary(),this._passiveListeners.push([\"touchstart\",()=>{this._setupPointerExitEventsIfNeeded(),clearTimeout(this._touchstartTimeout),this._touchstartTimeout=setTimeout(()=>this.show(),500)}])),this._addListeners(this._passiveListeners))}_setupPointerExitEventsIfNeeded(){if(this._pointerExitEventsInitialized)return;this._pointerExitEventsInitialized=!0;const t=[];if(this._platformSupportsMouseEvents())t.push([\"mouseleave\",()=>this.hide()],[\"wheel\",t=>this._wheelListener(t)]);else if(\"off\"!==this.touchGestures){this._disableNativeGesturesIfNecessary();const e=()=>{clearTimeout(this._touchstartTimeout),this.hide(this._defaultOptions.touchendHideDelay)};t.push([\"touchend\",e],[\"touchcancel\",e])}this._addListeners(t),this._passiveListeners.push(...t)}_addListeners(t){t.forEach(([t,e])=>{this._elementRef.nativeElement.addEventListener(t,e,b)})}_platformSupportsMouseEvents(){return!this._platform.IOS&&!this._platform.ANDROID}_wheelListener(t){if(this._isTooltipVisible()){const e=(this._document||document).elementFromPoint(t.clientX,t.clientY),n=this._elementRef.nativeElement;e===n||n.contains(e)||this.hide()}}_disableNativeGesturesIfNecessary(){const t=this.touchGestures;if(\"off\"!==t){const e=this._elementRef.nativeElement,n=e.style;(\"on\"===t||\"INPUT\"!==e.nodeName&&\"TEXTAREA\"!==e.nodeName)&&(n.userSelect=n.msUserSelect=n.webkitUserSelect=n.MozUserSelect=\"none\"),\"on\"!==t&&e.draggable||(n.webkitUserDrag=\"none\"),n.touchAction=\"none\",n.webkitTapHighlightColor=\"transparent\"}}}return t.\\u0275fac=function(e){return new(e||t)(o.Xb(r.c),o.Xb(o.p),o.Xb(l.c),o.Xb(o.Z),o.Xb(o.H),o.Xb(d.a),o.Xb(i.c),o.Xb(i.h),o.Xb(x),o.Xb(v.b,8),o.Xb(k,8),o.Xb(a.d))},t.\\u0275dir=o.Sb({type:t,selectors:[[\"\",\"matTooltip\",\"\"]],hostAttrs:[1,\"mat-tooltip-trigger\"],inputs:{showDelay:[\"matTooltipShowDelay\",\"showDelay\"],hideDelay:[\"matTooltipHideDelay\",\"hideDelay\"],touchGestures:[\"matTooltipTouchGestures\",\"touchGestures\"],position:[\"matTooltipPosition\",\"position\"],disabled:[\"matTooltipDisabled\",\"disabled\"],message:[\"matTooltip\",\"message\"],tooltipClass:[\"matTooltipClass\",\"tooltipClass\"]},exportAs:[\"matTooltip\"]}),t})(),T=(()=>{class t{constructor(t,e){this._changeDetectorRef=t,this._breakpointObserver=e,this._visibility=\"initial\",this._closeOnInteraction=!1,this._onHide=new p.a,this._isHandset=this._breakpointObserver.observe(h.b.Handset)}show(t){this._hideTimeoutId&&(clearTimeout(this._hideTimeoutId),this._hideTimeoutId=null),this._closeOnInteraction=!0,this._showTimeoutId=setTimeout(()=>{this._visibility=\"visible\",this._showTimeoutId=null,this._markForCheck()},t)}hide(t){this._showTimeoutId&&(clearTimeout(this._showTimeoutId),this._showTimeoutId=null),this._hideTimeoutId=setTimeout(()=>{this._visibility=\"hidden\",this._hideTimeoutId=null,this._markForCheck()},t)}afterHidden(){return this._onHide}isVisible(){return\"visible\"===this._visibility}ngOnDestroy(){this._onHide.complete()}_animationStart(){this._closeOnInteraction=!1}_animationDone(t){const e=t.toState;\"hidden\"!==e||this.isVisible()||this._onHide.next(),\"visible\"!==e&&\"hidden\"!==e||(this._closeOnInteraction=!0)}_handleBodyInteraction(){this._closeOnInteraction&&this.hide(0)}_markForCheck(){this._changeDetectorRef.markForCheck()}}return t.\\u0275fac=function(e){return new(e||t)(o.Xb(o.j),o.Xb(h.a))},t.\\u0275cmp=o.Rb({type:t,selectors:[[\"mat-tooltip-component\"]],hostAttrs:[\"aria-hidden\",\"true\"],hostVars:2,hostBindings:function(t,e){1&t&&o.lc(\"click\",(function(){return e._handleBodyInteraction()}),!1,o.Cc)(\"auxclick\",(function(){return e._handleBodyInteraction()}),!1,o.Cc),2&t&&o.Jc(\"zoom\",\"visible\"===e._visibility?1:null)},decls:3,vars:7,consts:[[1,\"mat-tooltip\",3,\"ngClass\"]],template:function(t,e){if(1&t&&(o.dc(0,\"div\",0),o.lc(\"@state.start\",(function(){return e._animationStart()}))(\"@state.done\",(function(t){return e._animationDone(t)})),o.qc(1,\"async\"),o.Oc(2),o.cc()),2&t){let t=null;o.Pb(\"mat-tooltip-handset\",null==(t=o.rc(1,5,e._isHandset))?null:t.matches),o.vc(\"ngClass\",e.tooltipClass)(\"@state\",e._visibility),o.Lb(2),o.Pc(e.message)}},directives:[a.m],pipes:[a.b],styles:[\".mat-tooltip-panel{pointer-events:none !important}.mat-tooltip{color:#fff;border-radius:4px;margin:14px;max-width:250px;padding-left:8px;padding-right:8px;overflow:hidden;text-overflow:ellipsis}.cdk-high-contrast-active .mat-tooltip{outline:solid 1px}.mat-tooltip-handset{margin:24px;padding-left:16px;padding-right:16px}\\n\"],encapsulation:2,data:{animation:[_.tooltipState]},changeDetection:0}),t})(),S=(()=>{class t{}return t.\\u0275mod=o.Vb({type:t}),t.\\u0275inj=o.Ub({factory:function(e){return new(e||t)},providers:[w],imports:[[i.a,a.c,r.f,s.i],s.i,l.b]}),t})()},R0Ic:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return a})),n.d(e,\"b\",(function(){return r})),n.d(e,\"c\",(function(){return i})),n.d(e,\"d\",(function(){return g})),n.d(e,\"e\",(function(){return s})),n.d(e,\"f\",(function(){return f})),n.d(e,\"g\",(function(){return h})),n.d(e,\"h\",(function(){return p})),n.d(e,\"i\",(function(){return l})),n.d(e,\"j\",(function(){return u})),n.d(e,\"k\",(function(){return c})),n.d(e,\"l\",(function(){return d})),n.d(e,\"m\",(function(){return o})),n.d(e,\"n\",(function(){return y})),n.d(e,\"o\",(function(){return v}));class r{}class i{}const a=\"*\";function o(t,e){return{type:7,name:t,definitions:e,options:{}}}function s(t,e=null){return{type:4,styles:e,timings:t}}function l(t,e=null){return{type:2,steps:t,options:e}}function c(t){return{type:6,styles:t,offset:null}}function u(t,e,n){return{type:0,name:t,styles:e,options:n}}function h(t){return{type:5,steps:t}}function d(t,e,n=null){return{type:1,expr:t,animation:e,options:n}}function f(t=null){return{type:9,options:t}}function p(t,e,n=null){return{type:11,selector:t,animation:e,options:n}}function m(t){Promise.resolve(null).then(t)}class g{constructor(t=0,e=0){this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._started=!1,this._destroyed=!1,this._finished=!1,this._position=0,this.parentPlayer=null,this.totalTime=t+e}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(t=>t()),this._onDoneFns=[])}onStart(t){this._onStartFns.push(t)}onDone(t){this._onDoneFns.push(t)}onDestroy(t){this._onDestroyFns.push(t)}hasStarted(){return this._started}init(){}play(){this.hasStarted()||(this._onStart(),this.triggerMicrotask()),this._started=!0}triggerMicrotask(){m(()=>this._onFinish())}_onStart(){this._onStartFns.forEach(t=>t()),this._onStartFns=[]}pause(){}restart(){}finish(){this._onFinish()}destroy(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(t=>t()),this._onDestroyFns=[])}reset(){}setPosition(t){this._position=this.totalTime?t*this.totalTime:1}getPosition(){return this.totalTime?this._position/this.totalTime:1}triggerCallback(t){const e=\"start\"==t?this._onStartFns:this._onDoneFns;e.forEach(t=>t()),e.length=0}}class y{constructor(t){this._onDoneFns=[],this._onStartFns=[],this._finished=!1,this._started=!1,this._destroyed=!1,this._onDestroyFns=[],this.parentPlayer=null,this.totalTime=0,this.players=t;let e=0,n=0,r=0;const i=this.players.length;0==i?m(()=>this._onFinish()):this.players.forEach(t=>{t.onDone(()=>{++e==i&&this._onFinish()}),t.onDestroy(()=>{++n==i&&this._onDestroy()}),t.onStart(()=>{++r==i&&this._onStart()})}),this.totalTime=this.players.reduce((t,e)=>Math.max(t,e.totalTime),0)}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(t=>t()),this._onDoneFns=[])}init(){this.players.forEach(t=>t.init())}onStart(t){this._onStartFns.push(t)}_onStart(){this.hasStarted()||(this._started=!0,this._onStartFns.forEach(t=>t()),this._onStartFns=[])}onDone(t){this._onDoneFns.push(t)}onDestroy(t){this._onDestroyFns.push(t)}hasStarted(){return this._started}play(){this.parentPlayer||this.init(),this._onStart(),this.players.forEach(t=>t.play())}pause(){this.players.forEach(t=>t.pause())}restart(){this.players.forEach(t=>t.restart())}finish(){this._onFinish(),this.players.forEach(t=>t.finish())}destroy(){this._onDestroy()}_onDestroy(){this._destroyed||(this._destroyed=!0,this._onFinish(),this.players.forEach(t=>t.destroy()),this._onDestroyFns.forEach(t=>t()),this._onDestroyFns=[])}reset(){this.players.forEach(t=>t.reset()),this._destroyed=!1,this._finished=!1,this._started=!1}setPosition(t){const e=t*this.totalTime;this.players.forEach(t=>{const n=t.totalTime?Math.min(1,e/t.totalTime):1;t.setPosition(n)})}getPosition(){const t=this.players.reduce((t,e)=>null===t||e.totalTime>t.totalTime?e:t,null);return null!=t?t.getPosition():0}beforeDestroy(){this.players.forEach(t=>{t.beforeDestroy&&t.beforeDestroy()})}triggerCallback(t){const e=\"start\"==t?this._onStartFns:this._onDoneFns;e.forEach(t=>t()),e.length=0}}const v=\"!\"},R1ws:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return Ee})),n.d(e,\"b\",(function(){return De}));var r=n(\"fXoL\"),i=n(\"jhN1\"),a=n(\"R0Ic\");function o(){return\"undefined\"!=typeof process&&\"[object process]\"==={}.toString.call(process)}function s(t){switch(t.length){case 0:return new a.d;case 1:return t[0];default:return new a.n(t)}}function l(t,e,n,r,i={},o={}){const s=[],l=[];let c=-1,u=null;if(r.forEach(t=>{const n=t.offset,r=n==c,h=r&&u||{};Object.keys(t).forEach(n=>{let r=n,l=t[n];if(\"offset\"!==n)switch(r=e.normalizePropertyName(r,s),l){case a.o:l=i[n];break;case a.a:l=o[n];break;default:l=e.normalizeStyleValue(n,r,l,s)}h[r]=l}),r||l.push(h),u=h,c=n}),s.length){const t=\"\\n - \";throw new Error(`Unable to animate due to the following errors:${t}${s.join(t)}`)}return l}function c(t,e,n,r){switch(e){case\"start\":t.onStart(()=>r(n&&u(n,\"start\",t)));break;case\"done\":t.onDone(()=>r(n&&u(n,\"done\",t)));break;case\"destroy\":t.onDestroy(()=>r(n&&u(n,\"destroy\",t)))}}function u(t,e,n){const r=n.totalTime,i=h(t.element,t.triggerName,t.fromState,t.toState,e||t.phaseName,null==r?t.totalTime:r,!!n.disabled),a=t._data;return null!=a&&(i._data=a),i}function h(t,e,n,r,i=\"\",a=0,o){return{element:t,triggerName:e,fromState:n,toState:r,phaseName:i,totalTime:a,disabled:!!o}}function d(t,e,n){let r;return t instanceof Map?(r=t.get(e),r||t.set(e,r=n)):(r=t[e],r||(r=t[e]=n)),r}function f(t){const e=t.indexOf(\":\");return[t.substring(1,e),t.substr(e+1)]}let p=(t,e)=>!1,m=(t,e)=>!1,g=(t,e,n)=>[];const y=o();(y||\"undefined\"!=typeof Element)&&(p=(t,e)=>t.contains(e),m=(()=>{if(y||Element.prototype.matches)return(t,e)=>t.matches(e);{const t=Element.prototype,e=t.matchesSelector||t.mozMatchesSelector||t.msMatchesSelector||t.oMatchesSelector||t.webkitMatchesSelector;return e?(t,n)=>e.apply(t,[n]):m}})(),g=(t,e,n)=>{let r=[];if(n){const n=t.querySelectorAll(e);for(let t=0;t<n.length;t++)r.push(n[t])}else{const n=t.querySelector(e);n&&r.push(n)}return r});let v=null,_=!1;function b(t){v||(v=(\"undefined\"!=typeof document?document.body:null)||{},_=!!v.style&&\"WebkitAppearance\"in v.style);let e=!0;return v.style&&!function(t){return\"ebkit\"==t.substring(1,6)}(t)&&(e=t in v.style,!e&&_)&&(e=\"Webkit\"+t.charAt(0).toUpperCase()+t.substr(1)in v.style),e}const x=m,w=p,k=g;function M(t){const e={};return Object.keys(t).forEach(n=>{const r=n.replace(/([a-z])([A-Z])/g,\"$1-$2\");e[r]=t[n]}),e}let T=(()=>{class t{validateStyleProperty(t){return b(t)}matchesElement(t,e){return x(t,e)}containsElement(t,e){return w(t,e)}query(t,e,n){return k(t,e,n)}computeStyle(t,e,n){return n||\"\"}animate(t,e,n,r,i,o=[],s){return new a.d(n,r)}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})(),S=(()=>{class t{}return t.NOOP=new T,t})();const A=\"ng-enter\",L=\"ng-leave\",C=\"ng-trigger\",E=\".ng-trigger\",O=\"ng-animating\",D=\".ng-animating\";function I(t){if(\"number\"==typeof t)return t;const e=t.match(/^(-?[\\.\\d]+)(m?s)/);return!e||e.length<2?0:P(parseFloat(e[1]),e[2])}function P(t,e){switch(e){case\"s\":return 1e3*t;default:return t}}function R(t,e,n){return t.hasOwnProperty(\"duration\")?t:function(t,e,n){let r,i=0,a=\"\";if(\"string\"==typeof t){const n=t.match(/^(-?[\\.\\d]+)(m?s)(?:\\s+(-?[\\.\\d]+)(m?s))?(?:\\s+([-a-z]+(?:\\(.+?\\))?))?$/i);if(null===n)return e.push(`The provided timing value \"${t}\" is invalid.`),{duration:0,delay:0,easing:\"\"};r=P(parseFloat(n[1]),n[2]);const o=n[3];null!=o&&(i=P(parseFloat(o),n[4]));const s=n[5];s&&(a=s)}else r=t;if(!n){let n=!1,a=e.length;r<0&&(e.push(\"Duration values below 0 are not allowed for this animation step.\"),n=!0),i<0&&(e.push(\"Delay values below 0 are not allowed for this animation step.\"),n=!0),n&&e.splice(a,0,`The provided timing value \"${t}\" is invalid.`)}return{duration:r,delay:i,easing:a}}(t,e,n)}function z(t,e={}){return Object.keys(t).forEach(n=>{e[n]=t[n]}),e}function j(t,e,n={}){if(e)for(let r in t)n[r]=t[r];else z(t,n);return n}function F(t,e,n){return n?e+\":\"+n+\";\":\"\"}function N(t){let e=\"\";for(let n=0;n<t.style.length;n++){const r=t.style.item(n);e+=F(0,r,t.style.getPropertyValue(r))}for(const n in t.style)t.style.hasOwnProperty(n)&&!n.startsWith(\"_\")&&(e+=F(0,n.replace(/([a-z])([A-Z])/g,\"$1-$2\").toLowerCase(),t.style[n]));t.setAttribute(\"style\",e)}function B(t,e,n){t.style&&(Object.keys(e).forEach(r=>{const i=X(r);n&&!n.hasOwnProperty(r)&&(n[r]=t.style[i]),t.style[i]=e[r]}),o()&&N(t))}function Y(t,e){t.style&&(Object.keys(e).forEach(e=>{const n=X(e);t.style[n]=\"\"}),o()&&N(t))}function H(t){return Array.isArray(t)?1==t.length?t[0]:Object(a.i)(t):t}const V=new RegExp(\"{{\\\\s*(.+?)\\\\s*}}\",\"g\");function U(t){let e=[];if(\"string\"==typeof t){let n;for(;n=V.exec(t);)e.push(n[1]);V.lastIndex=0}return e}function W(t,e,n){const r=t.toString(),i=r.replace(V,(t,r)=>{let i=e[r];return e.hasOwnProperty(r)||(n.push(\"Please provide a value for the animation param \"+r),i=\"\"),i.toString()});return i==r?t:i}function q(t){const e=[];let n=t.next();for(;!n.done;)e.push(n.value),n=t.next();return e}const G=/-+([a-z0-9])/g;function X(t){return t.replace(G,(...t)=>t[1].toUpperCase())}function Z(t,e){return 0===t||0===e}function J(t,e,n){const r=Object.keys(n);if(r.length&&e.length){let a=e[0],o=[];if(r.forEach(t=>{a.hasOwnProperty(t)||o.push(t),a[t]=n[t]}),o.length)for(var i=1;i<e.length;i++){let n=e[i];o.forEach((function(e){n[e]=$(t,e)}))}}return e}function K(t,e,n){switch(e.type){case 7:return t.visitTrigger(e,n);case 0:return t.visitState(e,n);case 1:return t.visitTransition(e,n);case 2:return t.visitSequence(e,n);case 3:return t.visitGroup(e,n);case 4:return t.visitAnimate(e,n);case 5:return t.visitKeyframes(e,n);case 6:return t.visitStyle(e,n);case 8:return t.visitReference(e,n);case 9:return t.visitAnimateChild(e,n);case 10:return t.visitAnimateRef(e,n);case 11:return t.visitQuery(e,n);case 12:return t.visitStagger(e,n);default:throw new Error(\"Unable to resolve animation metadata node #\"+e.type)}}function $(t,e){return window.getComputedStyle(t)[e]}const Q=\"*\";function tt(t,e){const n=[];return\"string\"==typeof t?t.split(/\\s*,\\s*/).forEach(t=>function(t,e,n){if(\":\"==t[0]){const r=function(t,e){switch(t){case\":enter\":return\"void => *\";case\":leave\":return\"* => void\";case\":increment\":return(t,e)=>parseFloat(e)>parseFloat(t);case\":decrement\":return(t,e)=>parseFloat(e)<parseFloat(t);default:return e.push(`The transition alias value \"${t}\" is not supported`),\"* => *\"}}(t,n);if(\"function\"==typeof r)return void e.push(r);t=r}const r=t.match(/^(\\*|[-\\w]+)\\s*(<?[=-]>)\\s*(\\*|[-\\w]+)$/);if(null==r||r.length<4)return n.push(`The provided transition expression \"${t}\" is not supported`),e;const i=r[1],a=r[2],o=r[3];e.push(rt(i,o)),\"<\"!=a[0]||i==Q&&o==Q||e.push(rt(o,i))}(t,n,e)):n.push(t),n}const et=new Set([\"true\",\"1\"]),nt=new Set([\"false\",\"0\"]);function rt(t,e){const n=et.has(t)||nt.has(t),r=et.has(e)||nt.has(e);return(i,a)=>{let o=t==Q||t==i,s=e==Q||e==a;return!o&&n&&\"boolean\"==typeof i&&(o=i?et.has(t):nt.has(t)),!s&&r&&\"boolean\"==typeof a&&(s=a?et.has(e):nt.has(e)),o&&s}}const it=new RegExp(\"s*:selfs*,?\",\"g\");function at(t,e,n){return new ot(t).build(e,n)}class ot{constructor(t){this._driver=t}build(t,e){const n=new st(e);return this._resetContextStyleTimingState(n),K(this,H(t),n)}_resetContextStyleTimingState(t){t.currentQuerySelector=\"\",t.collectedStyles={},t.collectedStyles[\"\"]={},t.currentTime=0}visitTrigger(t,e){let n=e.queryCount=0,r=e.depCount=0;const i=[],a=[];return\"@\"==t.name.charAt(0)&&e.errors.push(\"animation triggers cannot be prefixed with an `@` sign (e.g. trigger('@foo', [...]))\"),t.definitions.forEach(t=>{if(this._resetContextStyleTimingState(e),0==t.type){const n=t,r=n.name;r.toString().split(/\\s*,\\s*/).forEach(t=>{n.name=t,i.push(this.visitState(n,e))}),n.name=r}else if(1==t.type){const i=this.visitTransition(t,e);n+=i.queryCount,r+=i.depCount,a.push(i)}else e.errors.push(\"only state() and transition() definitions can sit inside of a trigger()\")}),{type:7,name:t.name,states:i,transitions:a,queryCount:n,depCount:r,options:null}}visitState(t,e){const n=this.visitStyle(t.styles,e),r=t.options&&t.options.params||null;if(n.containsDynamicStyles){const i=new Set,a=r||{};if(n.styles.forEach(t=>{if(lt(t)){const e=t;Object.keys(e).forEach(t=>{U(e[t]).forEach(t=>{a.hasOwnProperty(t)||i.add(t)})})}}),i.size){const n=q(i.values());e.errors.push(`state(\"${t.name}\", ...) must define default values for all the following style substitutions: ${n.join(\", \")}`)}}return{type:0,name:t.name,style:n,options:r?{params:r}:null}}visitTransition(t,e){e.queryCount=0,e.depCount=0;const n=K(this,H(t.animation),e);return{type:1,matchers:tt(t.expr,e.errors),animation:n,queryCount:e.queryCount,depCount:e.depCount,options:ct(t.options)}}visitSequence(t,e){return{type:2,steps:t.steps.map(t=>K(this,t,e)),options:ct(t.options)}}visitGroup(t,e){const n=e.currentTime;let r=0;const i=t.steps.map(t=>{e.currentTime=n;const i=K(this,t,e);return r=Math.max(r,e.currentTime),i});return e.currentTime=r,{type:3,steps:i,options:ct(t.options)}}visitAnimate(t,e){const n=function(t,e){let n=null;if(t.hasOwnProperty(\"duration\"))n=t;else if(\"number\"==typeof t)return ut(R(t,e).duration,0,\"\");const r=t;if(r.split(/\\s+/).some(t=>\"{\"==t.charAt(0)&&\"{\"==t.charAt(1))){const t=ut(0,0,\"\");return t.dynamic=!0,t.strValue=r,t}return n=n||R(r,e),ut(n.duration,n.delay,n.easing)}(t.timings,e.errors);let r;e.currentAnimateTimings=n;let i=t.styles?t.styles:Object(a.k)({});if(5==i.type)r=this.visitKeyframes(i,e);else{let i=t.styles,o=!1;if(!i){o=!0;const t={};n.easing&&(t.easing=n.easing),i=Object(a.k)(t)}e.currentTime+=n.duration+n.delay;const s=this.visitStyle(i,e);s.isEmptyStep=o,r=s}return e.currentAnimateTimings=null,{type:4,timings:n,style:r,options:null}}visitStyle(t,e){const n=this._makeStyleAst(t,e);return this._validateStyleAst(n,e),n}_makeStyleAst(t,e){const n=[];Array.isArray(t.styles)?t.styles.forEach(t=>{\"string\"==typeof t?t==a.a?n.push(t):e.errors.push(`The provided style string value ${t} is not allowed.`):n.push(t)}):n.push(t.styles);let r=!1,i=null;return n.forEach(t=>{if(lt(t)){const e=t,n=e.easing;if(n&&(i=n,delete e.easing),!r)for(let t in e)if(e[t].toString().indexOf(\"{{\")>=0){r=!0;break}}}),{type:6,styles:n,easing:i,offset:t.offset,containsDynamicStyles:r,options:null}}_validateStyleAst(t,e){const n=e.currentAnimateTimings;let r=e.currentTime,i=e.currentTime;n&&i>0&&(i-=n.duration+n.delay),t.styles.forEach(t=>{\"string\"!=typeof t&&Object.keys(t).forEach(n=>{if(!this._driver.validateStyleProperty(n))return void e.errors.push(`The provided animation property \"${n}\" is not a supported CSS property for animations`);const a=e.collectedStyles[e.currentQuerySelector],o=a[n];let s=!0;o&&(i!=r&&i>=o.startTime&&r<=o.endTime&&(e.errors.push(`The CSS property \"${n}\" that exists between the times of \"${o.startTime}ms\" and \"${o.endTime}ms\" is also being animated in a parallel animation between the times of \"${i}ms\" and \"${r}ms\"`),s=!1),i=o.startTime),s&&(a[n]={startTime:i,endTime:r}),e.options&&function(t,e,n){const r=e.params||{},i=U(t);i.length&&i.forEach(t=>{r.hasOwnProperty(t)||n.push(`Unable to resolve the local animation param ${t} in the given list of values`)})}(t[n],e.options,e.errors)})})}visitKeyframes(t,e){const n={type:5,styles:[],options:null};if(!e.currentAnimateTimings)return e.errors.push(\"keyframes() must be placed inside of a call to animate()\"),n;let r=0;const i=[];let a=!1,o=!1,s=0;const l=t.steps.map(t=>{const n=this._makeStyleAst(t,e);let l=null!=n.offset?n.offset:function(t){if(\"string\"==typeof t)return null;let e=null;if(Array.isArray(t))t.forEach(t=>{if(lt(t)&&t.hasOwnProperty(\"offset\")){const n=t;e=parseFloat(n.offset),delete n.offset}});else if(lt(t)&&t.hasOwnProperty(\"offset\")){const n=t;e=parseFloat(n.offset),delete n.offset}return e}(n.styles),c=0;return null!=l&&(r++,c=n.offset=l),o=o||c<0||c>1,a=a||c<s,s=c,i.push(c),n});o&&e.errors.push(\"Please ensure that all keyframe offsets are between 0 and 1\"),a&&e.errors.push(\"Please ensure that all keyframe offsets are in order\");const c=t.steps.length;let u=0;r>0&&r<c?e.errors.push(\"Not all style() steps within the declared keyframes() contain offsets\"):0==r&&(u=1/(c-1));const h=c-1,d=e.currentTime,f=e.currentAnimateTimings,p=f.duration;return l.forEach((t,r)=>{const a=u>0?r==h?1:u*r:i[r],o=a*p;e.currentTime=d+f.delay+o,f.duration=o,this._validateStyleAst(t,e),t.offset=a,n.styles.push(t)}),n}visitReference(t,e){return{type:8,animation:K(this,H(t.animation),e),options:ct(t.options)}}visitAnimateChild(t,e){return e.depCount++,{type:9,options:ct(t.options)}}visitAnimateRef(t,e){return{type:10,animation:this.visitReference(t.animation,e),options:ct(t.options)}}visitQuery(t,e){const n=e.currentQuerySelector,r=t.options||{};e.queryCount++,e.currentQuery=t;const[i,a]=function(t){const e=!!t.split(/\\s*,\\s*/).find(t=>\":self\"==t);return e&&(t=t.replace(it,\"\")),[t=t.replace(/@\\*/g,E).replace(/@\\w+/g,t=>\".ng-trigger-\"+t.substr(1)).replace(/:animating/g,D),e]}(t.selector);e.currentQuerySelector=n.length?n+\" \"+i:i,d(e.collectedStyles,e.currentQuerySelector,{});const o=K(this,H(t.animation),e);return e.currentQuery=null,e.currentQuerySelector=n,{type:11,selector:i,limit:r.limit||0,optional:!!r.optional,includeSelf:a,animation:o,originalSelector:t.selector,options:ct(t.options)}}visitStagger(t,e){e.currentQuery||e.errors.push(\"stagger() can only be used inside of query()\");const n=\"full\"===t.timings?{duration:0,delay:0,easing:\"full\"}:R(t.timings,e.errors,!0);return{type:12,animation:K(this,H(t.animation),e),timings:n,options:null}}}class st{constructor(t){this.errors=t,this.queryCount=0,this.depCount=0,this.currentTransition=null,this.currentQuery=null,this.currentQuerySelector=null,this.currentAnimateTimings=null,this.currentTime=0,this.collectedStyles={},this.options=null}}function lt(t){return!Array.isArray(t)&&\"object\"==typeof t}function ct(t){var e;return t?(t=z(t)).params&&(t.params=(e=t.params)?z(e):null):t={},t}function ut(t,e,n){return{duration:t,delay:e,easing:n}}function ht(t,e,n,r,i,a,o=null,s=!1){return{type:1,element:t,keyframes:e,preStyleProps:n,postStyleProps:r,duration:i,delay:a,totalTime:i+a,easing:o,subTimeline:s}}class dt{constructor(){this._map=new Map}consume(t){let e=this._map.get(t);return e?this._map.delete(t):e=[],e}append(t,e){let n=this._map.get(t);n||this._map.set(t,n=[]),n.push(...e)}has(t){return this._map.has(t)}clear(){this._map.clear()}}const ft=new RegExp(\":enter\",\"g\"),pt=new RegExp(\":leave\",\"g\");function mt(t,e,n,r,i,a={},o={},s,l,c=[]){return(new gt).buildKeyframes(t,e,n,r,i,a,o,s,l,c)}class gt{buildKeyframes(t,e,n,r,i,a,o,s,l,c=[]){l=l||new dt;const u=new vt(t,e,l,r,i,c,[]);u.options=s,u.currentTimeline.setStyles([a],null,u.errors,s),K(this,n,u);const h=u.timelines.filter(t=>t.containsAnimation());if(h.length&&Object.keys(o).length){const t=h[h.length-1];t.allowOnlyTimelineStyles()||t.setStyles([o],null,u.errors,s)}return h.length?h.map(t=>t.buildKeyframes()):[ht(e,[],[],[],0,0,\"\",!1)]}visitTrigger(t,e){}visitState(t,e){}visitTransition(t,e){}visitAnimateChild(t,e){const n=e.subInstructions.consume(e.element);if(n){const r=e.createSubContext(t.options),i=e.currentTimeline.currentTime,a=this._visitSubInstructions(n,r,r.options);i!=a&&e.transformIntoNewTimeline(a)}e.previousNode=t}visitAnimateRef(t,e){const n=e.createSubContext(t.options);n.transformIntoNewTimeline(),this.visitReference(t.animation,n),e.transformIntoNewTimeline(n.currentTimeline.currentTime),e.previousNode=t}_visitSubInstructions(t,e,n){let r=e.currentTimeline.currentTime;const i=null!=n.duration?I(n.duration):null,a=null!=n.delay?I(n.delay):null;return 0!==i&&t.forEach(t=>{const n=e.appendInstructionToTimeline(t,i,a);r=Math.max(r,n.duration+n.delay)}),r}visitReference(t,e){e.updateOptions(t.options,!0),K(this,t.animation,e),e.previousNode=t}visitSequence(t,e){const n=e.subContextCount;let r=e;const i=t.options;if(i&&(i.params||i.delay)&&(r=e.createSubContext(i),r.transformIntoNewTimeline(),null!=i.delay)){6==r.previousNode.type&&(r.currentTimeline.snapshotCurrentStyles(),r.previousNode=yt);const t=I(i.delay);r.delayNextStep(t)}t.steps.length&&(t.steps.forEach(t=>K(this,t,r)),r.currentTimeline.applyStylesToKeyframe(),r.subContextCount>n&&r.transformIntoNewTimeline()),e.previousNode=t}visitGroup(t,e){const n=[];let r=e.currentTimeline.currentTime;const i=t.options&&t.options.delay?I(t.options.delay):0;t.steps.forEach(a=>{const o=e.createSubContext(t.options);i&&o.delayNextStep(i),K(this,a,o),r=Math.max(r,o.currentTimeline.currentTime),n.push(o.currentTimeline)}),n.forEach(t=>e.currentTimeline.mergeTimelineCollectedStyles(t)),e.transformIntoNewTimeline(r),e.previousNode=t}_visitTiming(t,e){if(t.dynamic){const n=t.strValue;return R(e.params?W(n,e.params,e.errors):n,e.errors)}return{duration:t.duration,delay:t.delay,easing:t.easing}}visitAnimate(t,e){const n=e.currentAnimateTimings=this._visitTiming(t.timings,e),r=e.currentTimeline;n.delay&&(e.incrementTime(n.delay),r.snapshotCurrentStyles());const i=t.style;5==i.type?this.visitKeyframes(i,e):(e.incrementTime(n.duration),this.visitStyle(i,e),r.applyStylesToKeyframe()),e.currentAnimateTimings=null,e.previousNode=t}visitStyle(t,e){const n=e.currentTimeline,r=e.currentAnimateTimings;!r&&n.getCurrentStyleProperties().length&&n.forwardFrame();const i=r&&r.easing||t.easing;t.isEmptyStep?n.applyEmptyStep(i):n.setStyles(t.styles,i,e.errors,e.options),e.previousNode=t}visitKeyframes(t,e){const n=e.currentAnimateTimings,r=e.currentTimeline.duration,i=n.duration,a=e.createSubContext().currentTimeline;a.easing=n.easing,t.styles.forEach(t=>{a.forwardTime((t.offset||0)*i),a.setStyles(t.styles,t.easing,e.errors,e.options),a.applyStylesToKeyframe()}),e.currentTimeline.mergeTimelineCollectedStyles(a),e.transformIntoNewTimeline(r+i),e.previousNode=t}visitQuery(t,e){const n=e.currentTimeline.currentTime,r=t.options||{},i=r.delay?I(r.delay):0;i&&(6===e.previousNode.type||0==n&&e.currentTimeline.getCurrentStyleProperties().length)&&(e.currentTimeline.snapshotCurrentStyles(),e.previousNode=yt);let a=n;const o=e.invokeQuery(t.selector,t.originalSelector,t.limit,t.includeSelf,!!r.optional,e.errors);e.currentQueryTotal=o.length;let s=null;o.forEach((n,r)=>{e.currentQueryIndex=r;const o=e.createSubContext(t.options,n);i&&o.delayNextStep(i),n===e.element&&(s=o.currentTimeline),K(this,t.animation,o),o.currentTimeline.applyStylesToKeyframe(),a=Math.max(a,o.currentTimeline.currentTime)}),e.currentQueryIndex=0,e.currentQueryTotal=0,e.transformIntoNewTimeline(a),s&&(e.currentTimeline.mergeTimelineCollectedStyles(s),e.currentTimeline.snapshotCurrentStyles()),e.previousNode=t}visitStagger(t,e){const n=e.parentContext,r=e.currentTimeline,i=t.timings,a=Math.abs(i.duration),o=a*(e.currentQueryTotal-1);let s=a*e.currentQueryIndex;switch(i.duration<0?\"reverse\":i.easing){case\"reverse\":s=o-s;break;case\"full\":s=n.currentStaggerTime}const l=e.currentTimeline;s&&l.delayNextStep(s);const c=l.currentTime;K(this,t.animation,e),e.previousNode=t,n.currentStaggerTime=r.currentTime-c+(r.startTime-n.currentTimeline.startTime)}}const yt={};class vt{constructor(t,e,n,r,i,a,o,s){this._driver=t,this.element=e,this.subInstructions=n,this._enterClassName=r,this._leaveClassName=i,this.errors=a,this.timelines=o,this.parentContext=null,this.currentAnimateTimings=null,this.previousNode=yt,this.subContextCount=0,this.options={},this.currentQueryIndex=0,this.currentQueryTotal=0,this.currentStaggerTime=0,this.currentTimeline=s||new _t(this._driver,e,0),o.push(this.currentTimeline)}get params(){return this.options.params}updateOptions(t,e){if(!t)return;const n=t;let r=this.options;null!=n.duration&&(r.duration=I(n.duration)),null!=n.delay&&(r.delay=I(n.delay));const i=n.params;if(i){let t=r.params;t||(t=this.options.params={}),Object.keys(i).forEach(n=>{e&&t.hasOwnProperty(n)||(t[n]=W(i[n],t,this.errors))})}}_copyOptions(){const t={};if(this.options){const e=this.options.params;if(e){const n=t.params={};Object.keys(e).forEach(t=>{n[t]=e[t]})}}return t}createSubContext(t=null,e,n){const r=e||this.element,i=new vt(this._driver,r,this.subInstructions,this._enterClassName,this._leaveClassName,this.errors,this.timelines,this.currentTimeline.fork(r,n||0));return i.previousNode=this.previousNode,i.currentAnimateTimings=this.currentAnimateTimings,i.options=this._copyOptions(),i.updateOptions(t),i.currentQueryIndex=this.currentQueryIndex,i.currentQueryTotal=this.currentQueryTotal,i.parentContext=this,this.subContextCount++,i}transformIntoNewTimeline(t){return this.previousNode=yt,this.currentTimeline=this.currentTimeline.fork(this.element,t),this.timelines.push(this.currentTimeline),this.currentTimeline}appendInstructionToTimeline(t,e,n){const r={duration:null!=e?e:t.duration,delay:this.currentTimeline.currentTime+(null!=n?n:0)+t.delay,easing:\"\"},i=new bt(this._driver,t.element,t.keyframes,t.preStyleProps,t.postStyleProps,r,t.stretchStartingKeyframe);return this.timelines.push(i),r}incrementTime(t){this.currentTimeline.forwardTime(this.currentTimeline.duration+t)}delayNextStep(t){t>0&&this.currentTimeline.delayNextStep(t)}invokeQuery(t,e,n,r,i,a){let o=[];if(r&&o.push(this.element),t.length>0){t=(t=t.replace(ft,\".\"+this._enterClassName)).replace(pt,\".\"+this._leaveClassName);let e=this._driver.query(this.element,t,1!=n);0!==n&&(e=n<0?e.slice(e.length+n,e.length):e.slice(0,n)),o.push(...e)}return i||0!=o.length||a.push(`\\`query(\"${e}\")\\` returned zero elements. (Use \\`query(\"${e}\", { optional: true })\\` if you wish to allow this.)`),o}}class _t{constructor(t,e,n,r){this._driver=t,this.element=e,this.startTime=n,this._elementTimelineStylesLookup=r,this.duration=0,this._previousKeyframe={},this._currentKeyframe={},this._keyframes=new Map,this._styleSummary={},this._pendingStyles={},this._backFill={},this._currentEmptyStepKeyframe=null,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._localTimelineStyles=Object.create(this._backFill,{}),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(e),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(e,this._localTimelineStyles)),this._loadKeyframe()}containsAnimation(){switch(this._keyframes.size){case 0:return!1;case 1:return this.getCurrentStyleProperties().length>0;default:return!0}}getCurrentStyleProperties(){return Object.keys(this._currentKeyframe)}get currentTime(){return this.startTime+this.duration}delayNextStep(t){const e=1==this._keyframes.size&&Object.keys(this._pendingStyles).length;this.duration||e?(this.forwardTime(this.currentTime+t),e&&this.snapshotCurrentStyles()):this.startTime+=t}fork(t,e){return this.applyStylesToKeyframe(),new _t(this._driver,t,e||this.currentTime,this._elementTimelineStylesLookup)}_loadKeyframe(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=Object.create(this._backFill,{}),this._keyframes.set(this.duration,this._currentKeyframe))}forwardFrame(){this.duration+=1,this._loadKeyframe()}forwardTime(t){this.applyStylesToKeyframe(),this.duration=t,this._loadKeyframe()}_updateStyle(t,e){this._localTimelineStyles[t]=e,this._globalTimelineStyles[t]=e,this._styleSummary[t]={time:this.currentTime,value:e}}allowOnlyTimelineStyles(){return this._currentEmptyStepKeyframe!==this._currentKeyframe}applyEmptyStep(t){t&&(this._previousKeyframe.easing=t),Object.keys(this._globalTimelineStyles).forEach(t=>{this._backFill[t]=this._globalTimelineStyles[t]||a.a,this._currentKeyframe[t]=a.a}),this._currentEmptyStepKeyframe=this._currentKeyframe}setStyles(t,e,n,r){e&&(this._previousKeyframe.easing=e);const i=r&&r.params||{},o=function(t,e){const n={};let r;return t.forEach(t=>{\"*\"===t?(r=r||Object.keys(e),r.forEach(t=>{n[t]=a.a})):j(t,!1,n)}),n}(t,this._globalTimelineStyles);Object.keys(o).forEach(t=>{const e=W(o[t],i,n);this._pendingStyles[t]=e,this._localTimelineStyles.hasOwnProperty(t)||(this._backFill[t]=this._globalTimelineStyles.hasOwnProperty(t)?this._globalTimelineStyles[t]:a.a),this._updateStyle(t,e)})}applyStylesToKeyframe(){const t=this._pendingStyles,e=Object.keys(t);0!=e.length&&(this._pendingStyles={},e.forEach(e=>{this._currentKeyframe[e]=t[e]}),Object.keys(this._localTimelineStyles).forEach(t=>{this._currentKeyframe.hasOwnProperty(t)||(this._currentKeyframe[t]=this._localTimelineStyles[t])}))}snapshotCurrentStyles(){Object.keys(this._localTimelineStyles).forEach(t=>{const e=this._localTimelineStyles[t];this._pendingStyles[t]=e,this._updateStyle(t,e)})}getFinalKeyframe(){return this._keyframes.get(this.duration)}get properties(){const t=[];for(let e in this._currentKeyframe)t.push(e);return t}mergeTimelineCollectedStyles(t){Object.keys(t._styleSummary).forEach(e=>{const n=this._styleSummary[e],r=t._styleSummary[e];(!n||r.time>n.time)&&this._updateStyle(e,r.value)})}buildKeyframes(){this.applyStylesToKeyframe();const t=new Set,e=new Set,n=1===this._keyframes.size&&0===this.duration;let r=[];this._keyframes.forEach((i,o)=>{const s=j(i,!0);Object.keys(s).forEach(n=>{const r=s[n];r==a.o?t.add(n):r==a.a&&e.add(n)}),n||(s.offset=o/this.duration),r.push(s)});const i=t.size?q(t.values()):[],o=e.size?q(e.values()):[];if(n){const t=r[0],e=z(t);t.offset=0,e.offset=1,r=[t,e]}return ht(this.element,r,i,o,this.duration,this.startTime,this.easing,!1)}}class bt extends _t{constructor(t,e,n,r,i,a,o=!1){super(t,e,a.delay),this.element=e,this.keyframes=n,this.preStyleProps=r,this.postStyleProps=i,this._stretchStartingKeyframe=o,this.timings={duration:a.duration,delay:a.delay,easing:a.easing}}containsAnimation(){return this.keyframes.length>1}buildKeyframes(){let t=this.keyframes,{delay:e,duration:n,easing:r}=this.timings;if(this._stretchStartingKeyframe&&e){const i=[],a=n+e,o=e/a,s=j(t[0],!1);s.offset=0,i.push(s);const l=j(t[0],!1);l.offset=xt(o),i.push(l);const c=t.length-1;for(let r=1;r<=c;r++){let o=j(t[r],!1);o.offset=xt((e+o.offset*n)/a),i.push(o)}n=a,e=0,r=\"\",t=i}return ht(this.element,t,this.preStyleProps,this.postStyleProps,n,e,r,!0)}}function xt(t,e=3){const n=Math.pow(10,e-1);return Math.round(t*n)/n}class wt{}class kt extends wt{normalizePropertyName(t,e){return X(t)}normalizeStyleValue(t,e,n,r){let i=\"\";const a=n.toString().trim();if(Mt[e]&&0!==n&&\"0\"!==n)if(\"number\"==typeof n)i=\"px\";else{const e=n.match(/^[+-]?[\\d\\.]+([a-z]*)$/);e&&0==e[1].length&&r.push(`Please provide a CSS unit value for ${t}:${n}`)}return a+i}}const Mt=(()=>function(t){const e={};return t.forEach(t=>e[t]=!0),e}(\"width,height,minWidth,minHeight,maxWidth,maxHeight,left,top,bottom,right,fontSize,outlineWidth,outlineOffset,paddingTop,paddingLeft,paddingBottom,paddingRight,marginTop,marginLeft,marginBottom,marginRight,borderRadius,borderWidth,borderTopWidth,borderLeftWidth,borderRightWidth,borderBottomWidth,textIndent,perspective\".split(\",\")))();function Tt(t,e,n,r,i,a,o,s,l,c,u,h,d){return{type:0,element:t,triggerName:e,isRemovalTransition:i,fromState:n,fromStyles:a,toState:r,toStyles:o,timelines:s,queriedElements:l,preStyleProps:c,postStyleProps:u,totalTime:h,errors:d}}const St={};class At{constructor(t,e,n){this._triggerName=t,this.ast=e,this._stateStyles=n}match(t,e,n,r){return function(t,e,n,r,i){return t.some(t=>t(e,n,r,i))}(this.ast.matchers,t,e,n,r)}buildStyles(t,e,n){const r=this._stateStyles[\"*\"],i=this._stateStyles[t],a=r?r.buildStyles(e,n):{};return i?i.buildStyles(e,n):a}build(t,e,n,r,i,a,o,s,l,c){const u=[],h=this.ast.options&&this.ast.options.params||St,f=this.buildStyles(n,o&&o.params||St,u),p=s&&s.params||St,m=this.buildStyles(r,p,u),g=new Set,y=new Map,v=new Map,_=\"void\"===r,b={params:Object.assign(Object.assign({},h),p)},x=c?[]:mt(t,e,this.ast.animation,i,a,f,m,b,l,u);let w=0;if(x.forEach(t=>{w=Math.max(t.duration+t.delay,w)}),u.length)return Tt(e,this._triggerName,n,r,_,f,m,[],[],y,v,w,u);x.forEach(t=>{const n=t.element,r=d(y,n,{});t.preStyleProps.forEach(t=>r[t]=!0);const i=d(v,n,{});t.postStyleProps.forEach(t=>i[t]=!0),n!==e&&g.add(n)});const k=q(g.values());return Tt(e,this._triggerName,n,r,_,f,m,x,k,y,v,w)}}class Lt{constructor(t,e){this.styles=t,this.defaultParams=e}buildStyles(t,e){const n={},r=z(this.defaultParams);return Object.keys(t).forEach(e=>{const n=t[e];null!=n&&(r[e]=n)}),this.styles.styles.forEach(t=>{if(\"string\"!=typeof t){const i=t;Object.keys(i).forEach(t=>{let a=i[t];a.length>1&&(a=W(a,r,e)),n[t]=a})}}),n}}class Ct{constructor(t,e){this.name=t,this.ast=e,this.transitionFactories=[],this.states={},e.states.forEach(t=>{this.states[t.name]=new Lt(t.style,t.options&&t.options.params||{})}),Et(this.states,\"true\",\"1\"),Et(this.states,\"false\",\"0\"),e.transitions.forEach(e=>{this.transitionFactories.push(new At(t,e,this.states))}),this.fallbackTransition=new At(t,{type:1,animation:{type:2,steps:[],options:null},matchers:[(t,e)=>!0],options:null,queryCount:0,depCount:0},this.states)}get containsQueries(){return this.ast.queryCount>0}matchTransition(t,e,n,r){return this.transitionFactories.find(i=>i.match(t,e,n,r))||null}matchStyles(t,e,n){return this.fallbackTransition.buildStyles(t,e,n)}}function Et(t,e,n){t.hasOwnProperty(e)?t.hasOwnProperty(n)||(t[n]=t[e]):t.hasOwnProperty(n)&&(t[e]=t[n])}const Ot=new dt;class Dt{constructor(t,e,n){this.bodyNode=t,this._driver=e,this._normalizer=n,this._animations={},this._playersById={},this.players=[]}register(t,e){const n=[],r=at(this._driver,e,n);if(n.length)throw new Error(\"Unable to build the animation due to the following errors: \"+n.join(\"\\n\"));this._animations[t]=r}_buildPlayer(t,e,n){const r=t.element,i=l(0,this._normalizer,0,t.keyframes,e,n);return this._driver.animate(r,i,t.duration,t.delay,t.easing,[],!0)}create(t,e,n={}){const r=[],i=this._animations[t];let o;const l=new Map;if(i?(o=mt(this._driver,e,i,A,L,{},{},n,Ot,r),o.forEach(t=>{const e=d(l,t.element,{});t.postStyleProps.forEach(t=>e[t]=null)})):(r.push(\"The requested animation doesn't exist or has already been destroyed\"),o=[]),r.length)throw new Error(\"Unable to create the animation due to the following errors: \"+r.join(\"\\n\"));l.forEach((t,e)=>{Object.keys(t).forEach(n=>{t[n]=this._driver.computeStyle(e,n,a.a)})});const c=s(o.map(t=>{const e=l.get(t.element);return this._buildPlayer(t,{},e)}));return this._playersById[t]=c,c.onDestroy(()=>this.destroy(t)),this.players.push(c),c}destroy(t){const e=this._getPlayer(t);e.destroy(),delete this._playersById[t];const n=this.players.indexOf(e);n>=0&&this.players.splice(n,1)}_getPlayer(t){const e=this._playersById[t];if(!e)throw new Error(\"Unable to find the timeline player referenced by \"+t);return e}listen(t,e,n,r){const i=h(e,\"\",\"\",\"\");return c(this._getPlayer(t),n,i,r),()=>{}}command(t,e,n,r){if(\"register\"==n)return void this.register(t,r[0]);if(\"create\"==n)return void this.create(t,e,r[0]||{});const i=this._getPlayer(t);switch(n){case\"play\":i.play();break;case\"pause\":i.pause();break;case\"reset\":i.reset();break;case\"restart\":i.restart();break;case\"finish\":i.finish();break;case\"init\":i.init();break;case\"setPosition\":i.setPosition(parseFloat(r[0]));break;case\"destroy\":this.destroy(t)}}}const It=\"ng-animate-queued\",Pt=\"ng-animate-disabled\",Rt=\".ng-animate-disabled\",zt=[],jt={namespaceId:\"\",setForRemoval:!1,setForMove:!1,hasAnimation:!1,removedBeforeQueried:!1},Ft={namespaceId:\"\",setForMove:!1,setForRemoval:!1,hasAnimation:!1,removedBeforeQueried:!0};class Nt{constructor(t,e=\"\"){this.namespaceId=e;const n=t&&t.hasOwnProperty(\"value\");if(this.value=null!=(r=n?t.value:t)?r:null,n){const e=z(t);delete e.value,this.options=e}else this.options={};var r;this.options.params||(this.options.params={})}get params(){return this.options.params}absorbOptions(t){const e=t.params;if(e){const t=this.options.params;Object.keys(e).forEach(n=>{null==t[n]&&(t[n]=e[n])})}}}const Bt=\"void\",Yt=new Nt(Bt);class Ht{constructor(t,e,n){this.id=t,this.hostElement=e,this._engine=n,this.players=[],this._triggers={},this._queue=[],this._elementListeners=new Map,this._hostClassName=\"ng-tns-\"+t,Zt(e,this._hostClassName)}listen(t,e,n,r){if(!this._triggers.hasOwnProperty(e))throw new Error(`Unable to listen on the animation trigger event \"${n}\" because the animation trigger \"${e}\" doesn't exist!`);if(null==n||0==n.length)throw new Error(`Unable to listen on the animation trigger \"${e}\" because the provided event is undefined!`);if(\"start\"!=(i=n)&&\"done\"!=i)throw new Error(`The provided animation trigger event \"${n}\" for the animation trigger \"${e}\" is not supported!`);var i;const a=d(this._elementListeners,t,[]),o={name:e,phase:n,callback:r};a.push(o);const s=d(this._engine.statesByElement,t,{});return s.hasOwnProperty(e)||(Zt(t,C),Zt(t,\"ng-trigger-\"+e),s[e]=Yt),()=>{this._engine.afterFlush(()=>{const t=a.indexOf(o);t>=0&&a.splice(t,1),this._triggers[e]||delete s[e]})}}register(t,e){return!this._triggers[t]&&(this._triggers[t]=e,!0)}_getTrigger(t){const e=this._triggers[t];if(!e)throw new Error(`The provided animation trigger \"${t}\" has not been registered!`);return e}trigger(t,e,n,r=!0){const i=this._getTrigger(e),a=new Ut(this.id,e,t);let o=this._engine.statesByElement.get(t);o||(Zt(t,C),Zt(t,\"ng-trigger-\"+e),this._engine.statesByElement.set(t,o={}));let s=o[e];const l=new Nt(n,this.id);if(!(n&&n.hasOwnProperty(\"value\"))&&s&&l.absorbOptions(s.options),o[e]=l,s||(s=Yt),l.value!==Bt&&s.value===l.value){if(!function(t,e){const n=Object.keys(t),r=Object.keys(e);if(n.length!=r.length)return!1;for(let i=0;i<n.length;i++){const r=n[i];if(!e.hasOwnProperty(r)||t[r]!==e[r])return!1}return!0}(s.params,l.params)){const e=[],n=i.matchStyles(s.value,s.params,e),r=i.matchStyles(l.value,l.params,e);e.length?this._engine.reportError(e):this._engine.afterFlush(()=>{Y(t,n),B(t,r)})}return}const c=d(this._engine.playersByElement,t,[]);c.forEach(t=>{t.namespaceId==this.id&&t.triggerName==e&&t.queued&&t.destroy()});let u=i.matchTransition(s.value,l.value,t,l.params),h=!1;if(!u){if(!r)return;u=i.fallbackTransition,h=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:t,triggerName:e,transition:u,fromState:s,toState:l,player:a,isFallbackTransition:h}),h||(Zt(t,It),a.onStart(()=>{Jt(t,It)})),a.onDone(()=>{let e=this.players.indexOf(a);e>=0&&this.players.splice(e,1);const n=this._engine.playersByElement.get(t);if(n){let t=n.indexOf(a);t>=0&&n.splice(t,1)}}),this.players.push(a),c.push(a),a}deregister(t){delete this._triggers[t],this._engine.statesByElement.forEach((e,n)=>{delete e[t]}),this._elementListeners.forEach((e,n)=>{this._elementListeners.set(n,e.filter(e=>e.name!=t))})}clearElementCache(t){this._engine.statesByElement.delete(t),this._elementListeners.delete(t);const e=this._engine.playersByElement.get(t);e&&(e.forEach(t=>t.destroy()),this._engine.playersByElement.delete(t))}_signalRemovalForInnerTriggers(t,e){const n=this._engine.driver.query(t,E,!0);n.forEach(t=>{if(t.__ng_removed)return;const n=this._engine.fetchNamespacesByElement(t);n.size?n.forEach(n=>n.triggerLeaveAnimation(t,e,!1,!0)):this.clearElementCache(t)}),this._engine.afterFlushAnimationsDone(()=>n.forEach(t=>this.clearElementCache(t)))}triggerLeaveAnimation(t,e,n,r){const i=this._engine.statesByElement.get(t);if(i){const a=[];if(Object.keys(i).forEach(e=>{if(this._triggers[e]){const n=this.trigger(t,e,Bt,r);n&&a.push(n)}}),a.length)return this._engine.markElementAsRemoved(this.id,t,!0,e),n&&s(a).onDone(()=>this._engine.processLeaveNode(t)),!0}return!1}prepareLeaveAnimationListeners(t){const e=this._elementListeners.get(t);if(e){const n=new Set;e.forEach(e=>{const r=e.name;if(n.has(r))return;n.add(r);const i=this._triggers[r].fallbackTransition,a=this._engine.statesByElement.get(t)[r]||Yt,o=new Nt(Bt),s=new Ut(this.id,r,t);this._engine.totalQueuedPlayers++,this._queue.push({element:t,triggerName:r,transition:i,fromState:a,toState:o,player:s,isFallbackTransition:!0})})}}removeNode(t,e){const n=this._engine;if(t.childElementCount&&this._signalRemovalForInnerTriggers(t,e),this.triggerLeaveAnimation(t,e,!0))return;let r=!1;if(n.totalAnimations){const e=n.players.length?n.playersByQueriedElement.get(t):[];if(e&&e.length)r=!0;else{let e=t;for(;e=e.parentNode;)if(n.statesByElement.get(e)){r=!0;break}}}if(this.prepareLeaveAnimationListeners(t),r)n.markElementAsRemoved(this.id,t,!1,e);else{const r=t.__ng_removed;r&&r!==jt||(n.afterFlush(()=>this.clearElementCache(t)),n.destroyInnerAnimations(t),n._onRemovalComplete(t,e))}}insertNode(t,e){Zt(t,this._hostClassName)}drainQueuedTransitions(t){const e=[];return this._queue.forEach(n=>{const r=n.player;if(r.destroyed)return;const i=n.element,a=this._elementListeners.get(i);a&&a.forEach(e=>{if(e.name==n.triggerName){const r=h(i,n.triggerName,n.fromState.value,n.toState.value);r._data=t,c(n.player,e.phase,r,e.callback)}}),r.markedForDestroy?this._engine.afterFlush(()=>{r.destroy()}):e.push(n)}),this._queue=[],e.sort((t,e)=>{const n=t.transition.ast.depCount,r=e.transition.ast.depCount;return 0==n||0==r?n-r:this._engine.driver.containsElement(t.element,e.element)?1:-1})}destroy(t){this.players.forEach(t=>t.destroy()),this._signalRemovalForInnerTriggers(this.hostElement,t)}elementContainsData(t){let e=!1;return this._elementListeners.has(t)&&(e=!0),e=!!this._queue.find(e=>e.element===t)||e,e}}class Vt{constructor(t,e,n){this.bodyNode=t,this.driver=e,this._normalizer=n,this.players=[],this.newHostElements=new Map,this.playersByElement=new Map,this.playersByQueriedElement=new Map,this.statesByElement=new Map,this.disabledNodes=new Set,this.totalAnimations=0,this.totalQueuedPlayers=0,this._namespaceLookup={},this._namespaceList=[],this._flushFns=[],this._whenQuietFns=[],this.namespacesByHostElement=new Map,this.collectedEnterElements=[],this.collectedLeaveElements=[],this.onRemovalComplete=(t,e)=>{}}_onRemovalComplete(t,e){this.onRemovalComplete(t,e)}get queuedPlayers(){const t=[];return this._namespaceList.forEach(e=>{e.players.forEach(e=>{e.queued&&t.push(e)})}),t}createNamespace(t,e){const n=new Ht(t,e,this);return e.parentNode?this._balanceNamespaceList(n,e):(this.newHostElements.set(e,n),this.collectEnterElement(e)),this._namespaceLookup[t]=n}_balanceNamespaceList(t,e){const n=this._namespaceList.length-1;if(n>=0){let r=!1;for(let i=n;i>=0;i--)if(this.driver.containsElement(this._namespaceList[i].hostElement,e)){this._namespaceList.splice(i+1,0,t),r=!0;break}r||this._namespaceList.splice(0,0,t)}else this._namespaceList.push(t);return this.namespacesByHostElement.set(e,t),t}register(t,e){let n=this._namespaceLookup[t];return n||(n=this.createNamespace(t,e)),n}registerTrigger(t,e,n){let r=this._namespaceLookup[t];r&&r.register(e,n)&&this.totalAnimations++}destroy(t,e){if(!t)return;const n=this._fetchNamespace(t);this.afterFlush(()=>{this.namespacesByHostElement.delete(n.hostElement),delete this._namespaceLookup[t];const e=this._namespaceList.indexOf(n);e>=0&&this._namespaceList.splice(e,1)}),this.afterFlushAnimationsDone(()=>n.destroy(e))}_fetchNamespace(t){return this._namespaceLookup[t]}fetchNamespacesByElement(t){const e=new Set,n=this.statesByElement.get(t);if(n){const t=Object.keys(n);for(let r=0;r<t.length;r++){const i=n[t[r]].namespaceId;if(i){const t=this._fetchNamespace(i);t&&e.add(t)}}}return e}trigger(t,e,n,r){if(Wt(e)){const i=this._fetchNamespace(t);if(i)return i.trigger(e,n,r),!0}return!1}insertNode(t,e,n,r){if(!Wt(e))return;const i=e.__ng_removed;if(i&&i.setForRemoval){i.setForRemoval=!1,i.setForMove=!0;const t=this.collectedLeaveElements.indexOf(e);t>=0&&this.collectedLeaveElements.splice(t,1)}if(t){const r=this._fetchNamespace(t);r&&r.insertNode(e,n)}r&&this.collectEnterElement(e)}collectEnterElement(t){this.collectedEnterElements.push(t)}markElementAsDisabled(t,e){e?this.disabledNodes.has(t)||(this.disabledNodes.add(t),Zt(t,Pt)):this.disabledNodes.has(t)&&(this.disabledNodes.delete(t),Jt(t,Pt))}removeNode(t,e,n,r){if(Wt(e)){const i=t?this._fetchNamespace(t):null;if(i?i.removeNode(e,r):this.markElementAsRemoved(t,e,!1,r),n){const n=this.namespacesByHostElement.get(e);n&&n.id!==t&&n.removeNode(e,r)}}else this._onRemovalComplete(e,r)}markElementAsRemoved(t,e,n,r){this.collectedLeaveElements.push(e),e.__ng_removed={namespaceId:t,setForRemoval:r,hasAnimation:n,removedBeforeQueried:!1}}listen(t,e,n,r,i){return Wt(e)?this._fetchNamespace(t).listen(e,n,r,i):()=>{}}_buildInstruction(t,e,n,r,i){return t.transition.build(this.driver,t.element,t.fromState.value,t.toState.value,n,r,t.fromState.options,t.toState.options,e,i)}destroyInnerAnimations(t){let e=this.driver.query(t,E,!0);e.forEach(t=>this.destroyActiveAnimationsForElement(t)),0!=this.playersByQueriedElement.size&&(e=this.driver.query(t,D,!0),e.forEach(t=>this.finishActiveQueriedAnimationOnElement(t)))}destroyActiveAnimationsForElement(t){const e=this.playersByElement.get(t);e&&e.forEach(t=>{t.queued?t.markedForDestroy=!0:t.destroy()})}finishActiveQueriedAnimationOnElement(t){const e=this.playersByQueriedElement.get(t);e&&e.forEach(t=>t.finish())}whenRenderingDone(){return new Promise(t=>{if(this.players.length)return s(this.players).onDone(()=>t());t()})}processLeaveNode(t){const e=t.__ng_removed;if(e&&e.setForRemoval){if(t.__ng_removed=jt,e.namespaceId){this.destroyInnerAnimations(t);const n=this._fetchNamespace(e.namespaceId);n&&n.clearElementCache(t)}this._onRemovalComplete(t,e.setForRemoval)}this.driver.matchesElement(t,Rt)&&this.markElementAsDisabled(t,!1),this.driver.query(t,Rt,!0).forEach(t=>{this.markElementAsDisabled(t,!1)})}flush(t=-1){let e=[];if(this.newHostElements.size&&(this.newHostElements.forEach((t,e)=>this._balanceNamespaceList(t,e)),this.newHostElements.clear()),this.totalAnimations&&this.collectedEnterElements.length)for(let n=0;n<this.collectedEnterElements.length;n++)Zt(this.collectedEnterElements[n],\"ng-star-inserted\");if(this._namespaceList.length&&(this.totalQueuedPlayers||this.collectedLeaveElements.length)){const n=[];try{e=this._flushAnimations(n,t)}finally{for(let t=0;t<n.length;t++)n[t]()}}else for(let n=0;n<this.collectedLeaveElements.length;n++)this.processLeaveNode(this.collectedLeaveElements[n]);if(this.totalQueuedPlayers=0,this.collectedEnterElements.length=0,this.collectedLeaveElements.length=0,this._flushFns.forEach(t=>t()),this._flushFns=[],this._whenQuietFns.length){const t=this._whenQuietFns;this._whenQuietFns=[],e.length?s(e).onDone(()=>{t.forEach(t=>t())}):t.forEach(t=>t())}}reportError(t){throw new Error(\"Unable to process animations due to the following failed trigger transitions\\n \"+t.join(\"\\n\"))}_flushAnimations(t,e){const n=new dt,r=[],i=new Map,o=[],l=new Map,c=new Map,u=new Map,h=new Set;this.disabledNodes.forEach(t=>{h.add(t);const e=this.driver.query(t,\".ng-animate-queued\",!0);for(let n=0;n<e.length;n++)h.add(e[n])});const f=this.bodyNode,p=Array.from(this.statesByElement.keys()),m=Xt(p,this.collectedEnterElements),g=new Map;let y=0;m.forEach((t,e)=>{const n=A+y++;g.set(e,n),t.forEach(t=>Zt(t,n))});const v=[],_=new Set,b=new Set;for(let a=0;a<this.collectedLeaveElements.length;a++){const t=this.collectedLeaveElements[a],e=t.__ng_removed;e&&e.setForRemoval&&(v.push(t),_.add(t),e.hasAnimation?this.driver.query(t,\".ng-star-inserted\",!0).forEach(t=>_.add(t)):b.add(t))}const x=new Map,w=Xt(p,Array.from(_));w.forEach((t,e)=>{const n=L+y++;x.set(e,n),t.forEach(t=>Zt(t,n))}),t.push(()=>{m.forEach((t,e)=>{const n=g.get(e);t.forEach(t=>Jt(t,n))}),w.forEach((t,e)=>{const n=x.get(e);t.forEach(t=>Jt(t,n))}),v.forEach(t=>{this.processLeaveNode(t)})});const k=[],M=[];for(let a=this._namespaceList.length-1;a>=0;a--)this._namespaceList[a].drainQueuedTransitions(e).forEach(t=>{const e=t.player,i=t.element;if(k.push(e),this.collectedEnterElements.length){const t=i.__ng_removed;if(t&&t.setForMove)return void e.destroy()}const a=!f||!this.driver.containsElement(f,i),s=x.get(i),h=g.get(i),p=this._buildInstruction(t,n,h,s,a);if(p.errors&&p.errors.length)M.push(p);else{if(a)return e.onStart(()=>Y(i,p.fromStyles)),e.onDestroy(()=>B(i,p.toStyles)),void r.push(e);if(t.isFallbackTransition)return e.onStart(()=>Y(i,p.fromStyles)),e.onDestroy(()=>B(i,p.toStyles)),void r.push(e);p.timelines.forEach(t=>t.stretchStartingKeyframe=!0),n.append(i,p.timelines),o.push({instruction:p,player:e,element:i}),p.queriedElements.forEach(t=>d(l,t,[]).push(e)),p.preStyleProps.forEach((t,e)=>{const n=Object.keys(t);if(n.length){let t=c.get(e);t||c.set(e,t=new Set),n.forEach(e=>t.add(e))}}),p.postStyleProps.forEach((t,e)=>{const n=Object.keys(t);let r=u.get(e);r||u.set(e,r=new Set),n.forEach(t=>r.add(t))})}});if(M.length){const t=[];M.forEach(e=>{t.push(`@${e.triggerName} has failed due to:\\n`),e.errors.forEach(e=>t.push(`- ${e}\\n`))}),k.forEach(t=>t.destroy()),this.reportError(t)}const T=new Map,S=new Map;o.forEach(t=>{const e=t.element;n.has(e)&&(S.set(e,e),this._beforeAnimationBuild(t.player.namespaceId,t.instruction,T))}),r.forEach(t=>{const e=t.element;this._getPreviousPlayers(e,!1,t.namespaceId,t.triggerName,null).forEach(t=>{d(T,e,[]).push(t),t.destroy()})});const C=v.filter(t=>$t(t,c,u)),E=new Map;Gt(E,this.driver,b,u,a.a).forEach(t=>{$t(t,c,u)&&C.push(t)});const O=new Map;m.forEach((t,e)=>{Gt(O,this.driver,new Set(t),c,a.o)}),C.forEach(t=>{const e=E.get(t),n=O.get(t);E.set(t,Object.assign(Object.assign({},e),n))});const I=[],P=[],R={};o.forEach(t=>{const{element:e,player:a,instruction:o}=t;if(n.has(e)){if(h.has(e))return a.onDestroy(()=>B(e,o.toStyles)),a.disabled=!0,a.overrideTotalTime(o.totalTime),void r.push(a);let t=R;if(S.size>1){let n=e;const r=[];for(;n=n.parentNode;){const e=S.get(n);if(e){t=e;break}r.push(n)}r.forEach(e=>S.set(e,t))}const n=this._buildAnimation(a.namespaceId,o,T,i,O,E);if(a.setRealPlayer(n),t===R)I.push(a);else{const e=this.playersByElement.get(t);e&&e.length&&(a.parentPlayer=s(e)),r.push(a)}}else Y(e,o.fromStyles),a.onDestroy(()=>B(e,o.toStyles)),P.push(a),h.has(e)&&r.push(a)}),P.forEach(t=>{const e=i.get(t.element);if(e&&e.length){const n=s(e);t.setRealPlayer(n)}}),r.forEach(t=>{t.parentPlayer?t.syncPlayerEvents(t.parentPlayer):t.destroy()});for(let a=0;a<v.length;a++){const t=v[a],e=t.__ng_removed;if(Jt(t,L),e&&e.hasAnimation)continue;let n=[];if(l.size){let e=l.get(t);e&&e.length&&n.push(...e);let r=this.driver.query(t,D,!0);for(let t=0;t<r.length;t++){let e=l.get(r[t]);e&&e.length&&n.push(...e)}}const r=n.filter(t=>!t.destroyed);r.length?Kt(this,t,r):this.processLeaveNode(t)}return v.length=0,I.forEach(t=>{this.players.push(t),t.onDone(()=>{t.destroy();const e=this.players.indexOf(t);this.players.splice(e,1)}),t.play()}),I}elementContainsData(t,e){let n=!1;const r=e.__ng_removed;return r&&r.setForRemoval&&(n=!0),this.playersByElement.has(e)&&(n=!0),this.playersByQueriedElement.has(e)&&(n=!0),this.statesByElement.has(e)&&(n=!0),this._fetchNamespace(t).elementContainsData(e)||n}afterFlush(t){this._flushFns.push(t)}afterFlushAnimationsDone(t){this._whenQuietFns.push(t)}_getPreviousPlayers(t,e,n,r,i){let a=[];if(e){const e=this.playersByQueriedElement.get(t);e&&(a=e)}else{const e=this.playersByElement.get(t);if(e){const t=!i||i==Bt;e.forEach(e=>{e.queued||(t||e.triggerName==r)&&a.push(e)})}}return(n||r)&&(a=a.filter(t=>!(n&&n!=t.namespaceId||r&&r!=t.triggerName))),a}_beforeAnimationBuild(t,e,n){const r=e.element,i=e.isRemovalTransition?void 0:t,a=e.isRemovalTransition?void 0:e.triggerName;for(const o of e.timelines){const t=o.element,s=t!==r,l=d(n,t,[]);this._getPreviousPlayers(t,s,i,a,e.toState).forEach(t=>{const e=t.getRealPlayer();e.beforeDestroy&&e.beforeDestroy(),t.destroy(),l.push(t)})}Y(r,e.fromStyles)}_buildAnimation(t,e,n,r,i,o){const c=e.triggerName,u=e.element,h=[],f=new Set,p=new Set,m=e.timelines.map(e=>{const s=e.element;f.add(s);const d=s.__ng_removed;if(d&&d.removedBeforeQueried)return new a.d(e.duration,e.delay);const m=s!==u,g=function(t){const e=[];return function t(e,n){for(let r=0;r<e.length;r++){const i=e[r];i instanceof a.n?t(i.players,n):n.push(i)}}(t,e),e}((n.get(s)||zt).map(t=>t.getRealPlayer())).filter(t=>!!t.element&&t.element===s),y=i.get(s),v=o.get(s),_=l(0,this._normalizer,0,e.keyframes,y,v),b=this._buildPlayer(e,_,g);if(e.subTimeline&&r&&p.add(s),m){const e=new Ut(t,c,s);e.setRealPlayer(b),h.push(e)}return b});h.forEach(t=>{d(this.playersByQueriedElement,t.element,[]).push(t),t.onDone(()=>function(t,e,n){let r;if(t instanceof Map){if(r=t.get(e),r){if(r.length){const t=r.indexOf(n);r.splice(t,1)}0==r.length&&t.delete(e)}}else if(r=t[e],r){if(r.length){const t=r.indexOf(n);r.splice(t,1)}0==r.length&&delete t[e]}return r}(this.playersByQueriedElement,t.element,t))}),f.forEach(t=>Zt(t,O));const g=s(m);return g.onDestroy(()=>{f.forEach(t=>Jt(t,O)),B(u,e.toStyles)}),p.forEach(t=>{d(r,t,[]).push(g)}),g}_buildPlayer(t,e,n){return e.length>0?this.driver.animate(t.element,e,t.duration,t.delay,t.easing,n):new a.d(t.duration,t.delay)}}class Ut{constructor(t,e,n){this.namespaceId=t,this.triggerName=e,this.element=n,this._player=new a.d,this._containsRealPlayer=!1,this._queuedCallbacks={},this.destroyed=!1,this.markedForDestroy=!1,this.disabled=!1,this.queued=!0,this.totalTime=0}setRealPlayer(t){this._containsRealPlayer||(this._player=t,Object.keys(this._queuedCallbacks).forEach(e=>{this._queuedCallbacks[e].forEach(n=>c(t,e,void 0,n))}),this._queuedCallbacks={},this._containsRealPlayer=!0,this.overrideTotalTime(t.totalTime),this.queued=!1)}getRealPlayer(){return this._player}overrideTotalTime(t){this.totalTime=t}syncPlayerEvents(t){const e=this._player;e.triggerCallback&&t.onStart(()=>e.triggerCallback(\"start\")),t.onDone(()=>this.finish()),t.onDestroy(()=>this.destroy())}_queueEvent(t,e){d(this._queuedCallbacks,t,[]).push(e)}onDone(t){this.queued&&this._queueEvent(\"done\",t),this._player.onDone(t)}onStart(t){this.queued&&this._queueEvent(\"start\",t),this._player.onStart(t)}onDestroy(t){this.queued&&this._queueEvent(\"destroy\",t),this._player.onDestroy(t)}init(){this._player.init()}hasStarted(){return!this.queued&&this._player.hasStarted()}play(){!this.queued&&this._player.play()}pause(){!this.queued&&this._player.pause()}restart(){!this.queued&&this._player.restart()}finish(){this._player.finish()}destroy(){this.destroyed=!0,this._player.destroy()}reset(){!this.queued&&this._player.reset()}setPosition(t){this.queued||this._player.setPosition(t)}getPosition(){return this.queued?0:this._player.getPosition()}triggerCallback(t){const e=this._player;e.triggerCallback&&e.triggerCallback(t)}}function Wt(t){return t&&1===t.nodeType}function qt(t,e){const n=t.style.display;return t.style.display=null!=e?e:\"none\",n}function Gt(t,e,n,r,i){const a=[];n.forEach(t=>a.push(qt(t)));const o=[];r.forEach((n,r)=>{const a={};n.forEach(t=>{const n=a[t]=e.computeStyle(r,t,i);n&&0!=n.length||(r.__ng_removed=Ft,o.push(r))}),t.set(r,a)});let s=0;return n.forEach(t=>qt(t,a[s++])),o}function Xt(t,e){const n=new Map;if(t.forEach(t=>n.set(t,[])),0==e.length)return n;const r=new Set(e),i=new Map;return e.forEach(t=>{const e=function t(e){if(!e)return 1;let a=i.get(e);if(a)return a;const o=e.parentNode;return a=n.has(o)?o:r.has(o)?1:t(o),i.set(e,a),a}(t);1!==e&&n.get(e).push(t)}),n}function Zt(t,e){if(t.classList)t.classList.add(e);else{let n=t.$$classes;n||(n=t.$$classes={}),n[e]=!0}}function Jt(t,e){if(t.classList)t.classList.remove(e);else{let n=t.$$classes;n&&delete n[e]}}function Kt(t,e,n){s(n).onDone(()=>t.processLeaveNode(e))}function $t(t,e,n){const r=n.get(t);if(!r)return!1;let i=e.get(t);return i?r.forEach(t=>i.add(t)):e.set(t,r),n.delete(t),!0}class Qt{constructor(t,e,n){this.bodyNode=t,this._driver=e,this._triggerCache={},this.onRemovalComplete=(t,e)=>{},this._transitionEngine=new Vt(t,e,n),this._timelineEngine=new Dt(t,e,n),this._transitionEngine.onRemovalComplete=(t,e)=>this.onRemovalComplete(t,e)}registerTrigger(t,e,n,r,i){const a=t+\"-\"+r;let o=this._triggerCache[a];if(!o){const t=[],e=at(this._driver,i,t);if(t.length)throw new Error(`The animation trigger \"${r}\" has failed to build due to the following errors:\\n - ${t.join(\"\\n - \")}`);o=function(t,e){return new Ct(t,e)}(r,e),this._triggerCache[a]=o}this._transitionEngine.registerTrigger(e,r,o)}register(t,e){this._transitionEngine.register(t,e)}destroy(t,e){this._transitionEngine.destroy(t,e)}onInsert(t,e,n,r){this._transitionEngine.insertNode(t,e,n,r)}onRemove(t,e,n,r){this._transitionEngine.removeNode(t,e,r||!1,n)}disableAnimations(t,e){this._transitionEngine.markElementAsDisabled(t,e)}process(t,e,n,r){if(\"@\"==n.charAt(0)){const[t,i]=f(n);this._timelineEngine.command(t,e,i,r)}else this._transitionEngine.trigger(t,e,n,r)}listen(t,e,n,r,i){if(\"@\"==n.charAt(0)){const[t,r]=f(n);return this._timelineEngine.listen(t,e,r,i)}return this._transitionEngine.listen(t,e,n,r,i)}flush(t=-1){this._transitionEngine.flush(t)}get players(){return this._transitionEngine.players.concat(this._timelineEngine.players)}whenRenderingDone(){return this._transitionEngine.whenRenderingDone()}}function te(t,e){let n=null,r=null;return Array.isArray(e)&&e.length?(n=ne(e[0]),e.length>1&&(r=ne(e[e.length-1]))):e&&(n=ne(e)),n||r?new ee(t,n,r):null}let ee=(()=>{class t{constructor(e,n,r){this._element=e,this._startStyles=n,this._endStyles=r,this._state=0;let i=t.initialStylesByElement.get(e);i||t.initialStylesByElement.set(e,i={}),this._initialStyles=i}start(){this._state<1&&(this._startStyles&&B(this._element,this._startStyles,this._initialStyles),this._state=1)}finish(){this.start(),this._state<2&&(B(this._element,this._initialStyles),this._endStyles&&(B(this._element,this._endStyles),this._endStyles=null),this._state=1)}destroy(){this.finish(),this._state<3&&(t.initialStylesByElement.delete(this._element),this._startStyles&&(Y(this._element,this._startStyles),this._endStyles=null),this._endStyles&&(Y(this._element,this._endStyles),this._endStyles=null),B(this._element,this._initialStyles),this._state=3)}}return t.initialStylesByElement=new WeakMap,t})();function ne(t){let e=null;const n=Object.keys(t);for(let r=0;r<n.length;r++){const i=n[r];re(i)&&(e=e||{},e[i]=t[i])}return e}function re(t){return\"display\"===t||\"position\"===t}const ie=\"animation\",ae=\"animationend\";class oe{constructor(t,e,n,r,i,a,o){this._element=t,this._name=e,this._duration=n,this._delay=r,this._easing=i,this._fillMode=a,this._onDoneFn=o,this._finished=!1,this._destroyed=!1,this._startTime=0,this._position=0,this._eventFn=t=>this._handleCallback(t)}apply(){!function(t,e){const n=de(t,\"\").trim();n.length&&(function(t,e){let n=0;for(let r=0;r<t.length;r++)\",\"===t.charAt(r)&&n++}(n),e=`${n}, ${e}`),he(t,\"\",e)}(this._element,`${this._duration}ms ${this._easing} ${this._delay}ms 1 normal ${this._fillMode} ${this._name}`),ue(this._element,this._eventFn,!1),this._startTime=Date.now()}pause(){se(this._element,this._name,\"paused\")}resume(){se(this._element,this._name,\"running\")}setPosition(t){const e=le(this._element,this._name);this._position=t*this._duration,he(this._element,\"Delay\",`-${this._position}ms`,e)}getPosition(){return this._position}_handleCallback(t){const e=t._ngTestManualTimestamp||Date.now(),n=1e3*parseFloat(t.elapsedTime.toFixed(3));t.animationName==this._name&&Math.max(e-this._startTime,0)>=this._delay&&n>=this._duration&&this.finish()}finish(){this._finished||(this._finished=!0,this._onDoneFn(),ue(this._element,this._eventFn,!0))}destroy(){this._destroyed||(this._destroyed=!0,this.finish(),function(t,e){const n=de(t,\"\").split(\",\"),r=ce(n,e);r>=0&&(n.splice(r,1),he(t,\"\",n.join(\",\")))}(this._element,this._name))}}function se(t,e,n){he(t,\"PlayState\",n,le(t,e))}function le(t,e){const n=de(t,\"\");return n.indexOf(\",\")>0?ce(n.split(\",\"),e):ce([n],e)}function ce(t,e){for(let n=0;n<t.length;n++)if(t[n].indexOf(e)>=0)return n;return-1}function ue(t,e,n){n?t.removeEventListener(ae,e):t.addEventListener(ae,e)}function he(t,e,n,r){const i=ie+e;if(null!=r){const e=t.style[i];if(e.length){const t=e.split(\",\");t[r]=n,n=t.join(\",\")}}t.style[i]=n}function de(t,e){return t.style[ie+e]||\"\"}class fe{constructor(t,e,n,r,i,a,o,s){this.element=t,this.keyframes=e,this.animationName=n,this._duration=r,this._delay=i,this._finalStyles=o,this._specialStyles=s,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._started=!1,this.currentSnapshot={},this._state=0,this.easing=a||\"linear\",this.totalTime=r+i,this._buildStyler()}onStart(t){this._onStartFns.push(t)}onDone(t){this._onDoneFns.push(t)}onDestroy(t){this._onDestroyFns.push(t)}destroy(){this.init(),this._state>=4||(this._state=4,this._styler.destroy(),this._flushStartFns(),this._flushDoneFns(),this._specialStyles&&this._specialStyles.destroy(),this._onDestroyFns.forEach(t=>t()),this._onDestroyFns=[])}_flushDoneFns(){this._onDoneFns.forEach(t=>t()),this._onDoneFns=[]}_flushStartFns(){this._onStartFns.forEach(t=>t()),this._onStartFns=[]}finish(){this.init(),this._state>=3||(this._state=3,this._styler.finish(),this._flushStartFns(),this._specialStyles&&this._specialStyles.finish(),this._flushDoneFns())}setPosition(t){this._styler.setPosition(t)}getPosition(){return this._styler.getPosition()}hasStarted(){return this._state>=2}init(){this._state>=1||(this._state=1,this._styler.apply(),this._delay&&this._styler.pause())}play(){this.init(),this.hasStarted()||(this._flushStartFns(),this._state=2,this._specialStyles&&this._specialStyles.start()),this._styler.resume()}pause(){this.init(),this._styler.pause()}restart(){this.reset(),this.play()}reset(){this._styler.destroy(),this._buildStyler(),this._styler.apply()}_buildStyler(){this._styler=new oe(this.element,this.animationName,this._duration,this._delay,this.easing,\"forwards\",()=>this.finish())}triggerCallback(t){const e=\"start\"==t?this._onStartFns:this._onDoneFns;e.forEach(t=>t()),e.length=0}beforeDestroy(){this.init();const t={};if(this.hasStarted()){const e=this._state>=3;Object.keys(this._finalStyles).forEach(n=>{\"offset\"!=n&&(t[n]=e?this._finalStyles[n]:$(this.element,n))})}this.currentSnapshot=t}}class pe extends a.d{constructor(t,e){super(),this.element=t,this._startingStyles={},this.__initialized=!1,this._styles=M(e)}init(){!this.__initialized&&this._startingStyles&&(this.__initialized=!0,Object.keys(this._styles).forEach(t=>{this._startingStyles[t]=this.element.style[t]}),super.init())}play(){this._startingStyles&&(this.init(),Object.keys(this._styles).forEach(t=>this.element.style.setProperty(t,this._styles[t])),super.play())}destroy(){this._startingStyles&&(Object.keys(this._startingStyles).forEach(t=>{const e=this._startingStyles[t];e?this.element.style.setProperty(t,e):this.element.style.removeProperty(t)}),this._startingStyles=null,super.destroy())}}class me{constructor(){this._count=0,this._head=document.querySelector(\"head\")}validateStyleProperty(t){return b(t)}matchesElement(t,e){return x(t,e)}containsElement(t,e){return w(t,e)}query(t,e,n){return k(t,e,n)}computeStyle(t,e,n){return window.getComputedStyle(t)[e]}buildKeyframeElement(t,e,n){n=n.map(t=>M(t));let r=`@keyframes ${e} {\\n`,i=\"\";n.forEach(t=>{i=\" \";const e=parseFloat(t.offset);r+=`${i}${100*e}% {\\n`,i+=\" \",Object.keys(t).forEach(e=>{const n=t[e];switch(e){case\"offset\":return;case\"easing\":return void(n&&(r+=`${i}animation-timing-function: ${n};\\n`));default:return void(r+=`${i}${e}: ${n};\\n`)}}),r+=i+\"}\\n\"}),r+=\"}\\n\";const a=document.createElement(\"style\");return a.textContent=r,a}animate(t,e,n,r,i,a=[],o){const s=a.filter(t=>t instanceof fe),l={};Z(n,r)&&s.forEach(t=>{let e=t.currentSnapshot;Object.keys(e).forEach(t=>l[t]=e[t])});const c=function(t){let e={};return t&&(Array.isArray(t)?t:[t]).forEach(t=>{Object.keys(t).forEach(n=>{\"offset\"!=n&&\"easing\"!=n&&(e[n]=t[n])})}),e}(e=J(t,e,l));if(0==n)return new pe(t,c);const u=\"gen_css_kf_\"+this._count++,h=this.buildKeyframeElement(t,u,e);document.querySelector(\"head\").appendChild(h);const d=te(t,e),f=new fe(t,e,u,n,r,i,c,d);return f.onDestroy(()=>{var t;(t=h).parentNode.removeChild(t)}),f}}class ge{constructor(t,e,n,r){this.element=t,this.keyframes=e,this.options=n,this._specialStyles=r,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._initialized=!1,this._finished=!1,this._started=!1,this._destroyed=!1,this.time=0,this.parentPlayer=null,this.currentSnapshot={},this._duration=n.duration,this._delay=n.delay||0,this.time=this._duration+this._delay}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(t=>t()),this._onDoneFns=[])}init(){this._buildPlayer(),this._preparePlayerBeforeStart()}_buildPlayer(){if(this._initialized)return;this._initialized=!0;const t=this.keyframes;this.domPlayer=this._triggerWebAnimation(this.element,t,this.options),this._finalKeyframe=t.length?t[t.length-1]:{},this.domPlayer.addEventListener(\"finish\",()=>this._onFinish())}_preparePlayerBeforeStart(){this._delay?this._resetDomPlayerState():this.domPlayer.pause()}_triggerWebAnimation(t,e,n){return t.animate(e,n)}onStart(t){this._onStartFns.push(t)}onDone(t){this._onDoneFns.push(t)}onDestroy(t){this._onDestroyFns.push(t)}play(){this._buildPlayer(),this.hasStarted()||(this._onStartFns.forEach(t=>t()),this._onStartFns=[],this._started=!0,this._specialStyles&&this._specialStyles.start()),this.domPlayer.play()}pause(){this.init(),this.domPlayer.pause()}finish(){this.init(),this._specialStyles&&this._specialStyles.finish(),this._onFinish(),this.domPlayer.finish()}reset(){this._resetDomPlayerState(),this._destroyed=!1,this._finished=!1,this._started=!1}_resetDomPlayerState(){this.domPlayer&&this.domPlayer.cancel()}restart(){this.reset(),this.play()}hasStarted(){return this._started}destroy(){this._destroyed||(this._destroyed=!0,this._resetDomPlayerState(),this._onFinish(),this._specialStyles&&this._specialStyles.destroy(),this._onDestroyFns.forEach(t=>t()),this._onDestroyFns=[])}setPosition(t){this.domPlayer.currentTime=t*this.time}getPosition(){return this.domPlayer.currentTime/this.time}get totalTime(){return this._delay+this._duration}beforeDestroy(){const t={};this.hasStarted()&&Object.keys(this._finalKeyframe).forEach(e=>{\"offset\"!=e&&(t[e]=this._finished?this._finalKeyframe[e]:$(this.element,e))}),this.currentSnapshot=t}triggerCallback(t){const e=\"start\"==t?this._onStartFns:this._onDoneFns;e.forEach(t=>t()),e.length=0}}class ye{constructor(){this._isNativeImpl=/\\{\\s*\\[native\\s+code\\]\\s*\\}/.test(ve().toString()),this._cssKeyframesDriver=new me}validateStyleProperty(t){return b(t)}matchesElement(t,e){return x(t,e)}containsElement(t,e){return w(t,e)}query(t,e,n){return k(t,e,n)}computeStyle(t,e,n){return window.getComputedStyle(t)[e]}overrideWebAnimationsSupport(t){this._isNativeImpl=t}animate(t,e,n,r,i,a=[],o){if(!o&&!this._isNativeImpl)return this._cssKeyframesDriver.animate(t,e,n,r,i,a);const s={duration:n,delay:r,fill:0==r?\"both\":\"forwards\"};i&&(s.easing=i);const l={},c=a.filter(t=>t instanceof ge);Z(n,r)&&c.forEach(t=>{let e=t.currentSnapshot;Object.keys(e).forEach(t=>l[t]=e[t])});const u=te(t,e=J(t,e=e.map(t=>j(t,!1)),l));return new ge(t,e,s,u)}}function ve(){return\"undefined\"!=typeof window&&void 0!==window.document&&Element.prototype.animate||{}}var _e=n(\"ofXK\");let be=(()=>{class t extends a.b{constructor(t,e){super(),this._nextAnimationId=0,this._renderer=t.createRenderer(e.body,{id:\"0\",encapsulation:r.ab.None,styles:[],data:{animation:[]}})}build(t){const e=this._nextAnimationId.toString();this._nextAnimationId++;const n=Array.isArray(t)?Object(a.i)(t):t;return ke(this._renderer,null,e,\"register\",[n]),new xe(e,this._renderer)}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(r.P),r.hc(_e.d))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})();class xe extends a.c{constructor(t,e){super(),this._id=t,this._renderer=e}create(t,e){return new we(this._id,t,e||{},this._renderer)}}class we{constructor(t,e,n,r){this.id=t,this.element=e,this._renderer=r,this.parentPlayer=null,this._started=!1,this.totalTime=0,this._command(\"create\",n)}_listen(t,e){return this._renderer.listen(this.element,`@@${this.id}:${t}`,e)}_command(t,...e){return ke(this._renderer,this.element,this.id,t,e)}onDone(t){this._listen(\"done\",t)}onStart(t){this._listen(\"start\",t)}onDestroy(t){this._listen(\"destroy\",t)}init(){this._command(\"init\")}hasStarted(){return this._started}play(){this._command(\"play\"),this._started=!0}pause(){this._command(\"pause\")}restart(){this._command(\"restart\")}finish(){this._command(\"finish\")}destroy(){this._command(\"destroy\")}reset(){this._command(\"reset\")}setPosition(t){this._command(\"setPosition\",t)}getPosition(){var t,e;return null!==(e=null===(t=this._renderer.engine.players[+this.id])||void 0===t?void 0:t.getPosition())&&void 0!==e?e:0}}function ke(t,e,n,r,i){return t.setProperty(e,`@@${n}:${r}`,i)}const Me=\"@\",Te=\"@.disabled\";let Se=(()=>{class t{constructor(t,e,n){this.delegate=t,this.engine=e,this._zone=n,this._currentId=0,this._microtaskId=1,this._animationCallbacksBuffer=[],this._rendererCache=new Map,this._cdRecurDepth=0,this.promise=Promise.resolve(0),e.onRemovalComplete=(t,e)=>{e&&e.parentNode(t)&&e.removeChild(t.parentNode,t)}}createRenderer(t,e){const n=this.delegate.createRenderer(t,e);if(!(t&&e&&e.data&&e.data.animation)){let t=this._rendererCache.get(n);return t||(t=new Ae(\"\",n,this.engine),this._rendererCache.set(n,t)),t}const r=e.id,i=e.id+\"-\"+this._currentId;this._currentId++,this.engine.register(i,t);const a=e=>{Array.isArray(e)?e.forEach(a):this.engine.registerTrigger(r,i,t,e.name,e)};return e.data.animation.forEach(a),new Le(this,i,n,this.engine)}begin(){this._cdRecurDepth++,this.delegate.begin&&this.delegate.begin()}_scheduleCountTask(){this.promise.then(()=>{this._microtaskId++})}scheduleListenerCallback(t,e,n){t>=0&&t<this._microtaskId?this._zone.run(()=>e(n)):(0==this._animationCallbacksBuffer.length&&Promise.resolve(null).then(()=>{this._zone.run(()=>{this._animationCallbacksBuffer.forEach(t=>{const[e,n]=t;e(n)}),this._animationCallbacksBuffer=[]})}),this._animationCallbacksBuffer.push([e,n]))}end(){this._cdRecurDepth--,0==this._cdRecurDepth&&this._zone.runOutsideAngular(()=>{this._scheduleCountTask(),this.engine.flush(this._microtaskId)}),this.delegate.end&&this.delegate.end()}whenRenderingDone(){return this.engine.whenRenderingDone()}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(r.P),r.hc(Qt),r.hc(r.H))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})();class Ae{constructor(t,e,n){this.namespaceId=t,this.delegate=e,this.engine=n,this.destroyNode=this.delegate.destroyNode?t=>e.destroyNode(t):null}get data(){return this.delegate.data}destroy(){this.engine.destroy(this.namespaceId,this.delegate),this.delegate.destroy()}createElement(t,e){return this.delegate.createElement(t,e)}createComment(t){return this.delegate.createComment(t)}createText(t){return this.delegate.createText(t)}appendChild(t,e){this.delegate.appendChild(t,e),this.engine.onInsert(this.namespaceId,e,t,!1)}insertBefore(t,e,n,r=!0){this.delegate.insertBefore(t,e,n),this.engine.onInsert(this.namespaceId,e,t,r)}removeChild(t,e,n){this.engine.onRemove(this.namespaceId,e,this.delegate,n)}selectRootElement(t,e){return this.delegate.selectRootElement(t,e)}parentNode(t){return this.delegate.parentNode(t)}nextSibling(t){return this.delegate.nextSibling(t)}setAttribute(t,e,n,r){this.delegate.setAttribute(t,e,n,r)}removeAttribute(t,e,n){this.delegate.removeAttribute(t,e,n)}addClass(t,e){this.delegate.addClass(t,e)}removeClass(t,e){this.delegate.removeClass(t,e)}setStyle(t,e,n,r){this.delegate.setStyle(t,e,n,r)}removeStyle(t,e,n){this.delegate.removeStyle(t,e,n)}setProperty(t,e,n){e.charAt(0)==Me&&e==Te?this.disableAnimations(t,!!n):this.delegate.setProperty(t,e,n)}setValue(t,e){this.delegate.setValue(t,e)}listen(t,e,n){return this.delegate.listen(t,e,n)}disableAnimations(t,e){this.engine.disableAnimations(t,e)}}class Le extends Ae{constructor(t,e,n,r){super(e,n,r),this.factory=t,this.namespaceId=e}setProperty(t,e,n){e.charAt(0)==Me?\".\"==e.charAt(1)&&e==Te?this.disableAnimations(t,n=void 0===n||!!n):this.engine.process(this.namespaceId,t,e.substr(1),n):this.delegate.setProperty(t,e,n)}listen(t,e,n){if(e.charAt(0)==Me){const r=function(t){switch(t){case\"body\":return document.body;case\"document\":return document;case\"window\":return window;default:return t}}(t);let i=e.substr(1),a=\"\";return i.charAt(0)!=Me&&([i,a]=function(t){const e=t.indexOf(\".\");return[t.substring(0,e),t.substr(e+1)]}(i)),this.engine.listen(this.namespaceId,r,i,a,t=>{this.factory.scheduleListenerCallback(t._data||-1,n,t)})}return this.delegate.listen(t,e,n)}}let Ce=(()=>{class t extends Qt{constructor(t,e,n){super(t.body,e,n)}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(_e.d),r.hc(S),r.hc(wt))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})();const Ee=new r.w(\"AnimationModuleType\"),Oe=[{provide:S,useFactory:function(){return\"function\"==typeof ve()?new ye:new me}},{provide:Ee,useValue:\"BrowserAnimations\"},{provide:a.b,useClass:be},{provide:wt,useFactory:function(){return new kt}},{provide:Qt,useClass:Ce},{provide:r.P,useFactory:function(t,e,n){return new Se(t,e,n)},deps:[i.d,Qt,r.H]}];let De=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},providers:Oe,imports:[i.a]}),t})()},RAwQ:function(t,e,n){!function(t){\"use strict\";function e(t,e,n,r){var i={m:[\"eng Minutt\",\"enger Minutt\"],h:[\"eng Stonn\",\"enger Stonn\"],d:[\"een Dag\",\"engem Dag\"],M:[\"ee Mount\",\"engem Mount\"],y:[\"ee Joer\",\"engem Joer\"]};return e?i[n][0]:i[n][1]}function n(t){if(t=parseInt(t,10),isNaN(t))return!1;if(t<0)return!0;if(t<10)return 4<=t&&t<=7;if(t<100){var e=t%10;return n(0===e?t/10:e)}if(t<1e4){for(;t>=10;)t/=10;return n(t)}return n(t/=1e3)}t.defineLocale(\"lb\",{months:\"Januar_Februar_M\\xe4erz_Abr\\xebll_Mee_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonndeg_M\\xe9indeg_D\\xebnschdeg_M\\xebttwoch_Donneschdeg_Freideg_Samschdeg\".split(\"_\"),weekdaysShort:\"So._M\\xe9._D\\xeb._M\\xeb._Do._Fr._Sa.\".split(\"_\"),weekdaysMin:\"So_M\\xe9_D\\xeb_M\\xeb_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm [Auer]\",LTS:\"H:mm:ss [Auer]\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm [Auer]\",LLLL:\"dddd, D. MMMM YYYY H:mm [Auer]\"},calendar:{sameDay:\"[Haut um] LT\",sameElse:\"L\",nextDay:\"[Muer um] LT\",nextWeek:\"dddd [um] LT\",lastDay:\"[G\\xebschter um] LT\",lastWeek:function(){switch(this.day()){case 2:case 4:return\"[Leschten] dddd [um] LT\";default:return\"[Leschte] dddd [um] LT\"}}},relativeTime:{future:function(t){return n(t.substr(0,t.indexOf(\" \")))?\"a \"+t:\"an \"+t},past:function(t){return n(t.substr(0,t.indexOf(\" \")))?\"viru \"+t:\"virun \"+t},s:\"e puer Sekonnen\",ss:\"%d Sekonnen\",m:e,mm:\"%d Minutten\",h:e,hh:\"%d Stonnen\",d:e,dd:\"%d Deeg\",M:e,MM:\"%d M\\xe9int\",y:e,yy:\"%d Joer\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},RnhZ:function(t,e,n){var r={\"./af\":\"K/tc\",\"./af.js\":\"K/tc\",\"./ar\":\"jnO4\",\"./ar-dz\":\"o1bE\",\"./ar-dz.js\":\"o1bE\",\"./ar-kw\":\"Qj4J\",\"./ar-kw.js\":\"Qj4J\",\"./ar-ly\":\"HP3h\",\"./ar-ly.js\":\"HP3h\",\"./ar-ma\":\"CoRJ\",\"./ar-ma.js\":\"CoRJ\",\"./ar-sa\":\"gjCT\",\"./ar-sa.js\":\"gjCT\",\"./ar-tn\":\"bYM6\",\"./ar-tn.js\":\"bYM6\",\"./ar.js\":\"jnO4\",\"./az\":\"SFxW\",\"./az.js\":\"SFxW\",\"./be\":\"H8ED\",\"./be.js\":\"H8ED\",\"./bg\":\"hKrs\",\"./bg.js\":\"hKrs\",\"./bm\":\"p/rL\",\"./bm.js\":\"p/rL\",\"./bn\":\"kEOa\",\"./bn-bd\":\"loYQ\",\"./bn-bd.js\":\"loYQ\",\"./bn.js\":\"kEOa\",\"./bo\":\"0mo+\",\"./bo.js\":\"0mo+\",\"./br\":\"aIdf\",\"./br.js\":\"aIdf\",\"./bs\":\"JVSJ\",\"./bs.js\":\"JVSJ\",\"./ca\":\"1xZ4\",\"./ca.js\":\"1xZ4\",\"./cs\":\"PA2r\",\"./cs.js\":\"PA2r\",\"./cv\":\"A+xa\",\"./cv.js\":\"A+xa\",\"./cy\":\"l5ep\",\"./cy.js\":\"l5ep\",\"./da\":\"DxQv\",\"./da.js\":\"DxQv\",\"./de\":\"tGlX\",\"./de-at\":\"s+uk\",\"./de-at.js\":\"s+uk\",\"./de-ch\":\"u3GI\",\"./de-ch.js\":\"u3GI\",\"./de.js\":\"tGlX\",\"./dv\":\"WYrj\",\"./dv.js\":\"WYrj\",\"./el\":\"jUeY\",\"./el.js\":\"jUeY\",\"./en-au\":\"Dmvi\",\"./en-au.js\":\"Dmvi\",\"./en-ca\":\"OIYi\",\"./en-ca.js\":\"OIYi\",\"./en-gb\":\"Oaa7\",\"./en-gb.js\":\"Oaa7\",\"./en-ie\":\"4dOw\",\"./en-ie.js\":\"4dOw\",\"./en-il\":\"czMo\",\"./en-il.js\":\"czMo\",\"./en-in\":\"7C5Q\",\"./en-in.js\":\"7C5Q\",\"./en-nz\":\"b1Dy\",\"./en-nz.js\":\"b1Dy\",\"./en-sg\":\"t+mt\",\"./en-sg.js\":\"t+mt\",\"./eo\":\"Zduo\",\"./eo.js\":\"Zduo\",\"./es\":\"iYuL\",\"./es-do\":\"CjzT\",\"./es-do.js\":\"CjzT\",\"./es-mx\":\"tbfe\",\"./es-mx.js\":\"tbfe\",\"./es-us\":\"Vclq\",\"./es-us.js\":\"Vclq\",\"./es.js\":\"iYuL\",\"./et\":\"7BjC\",\"./et.js\":\"7BjC\",\"./eu\":\"D/JM\",\"./eu.js\":\"D/JM\",\"./fa\":\"jfSC\",\"./fa.js\":\"jfSC\",\"./fi\":\"gekB\",\"./fi.js\":\"gekB\",\"./fil\":\"1ppg\",\"./fil.js\":\"1ppg\",\"./fo\":\"ByF4\",\"./fo.js\":\"ByF4\",\"./fr\":\"nyYc\",\"./fr-ca\":\"2fjn\",\"./fr-ca.js\":\"2fjn\",\"./fr-ch\":\"Dkky\",\"./fr-ch.js\":\"Dkky\",\"./fr.js\":\"nyYc\",\"./fy\":\"cRix\",\"./fy.js\":\"cRix\",\"./ga\":\"USCx\",\"./ga.js\":\"USCx\",\"./gd\":\"9rRi\",\"./gd.js\":\"9rRi\",\"./gl\":\"iEDd\",\"./gl.js\":\"iEDd\",\"./gom-deva\":\"qvJo\",\"./gom-deva.js\":\"qvJo\",\"./gom-latn\":\"DKr+\",\"./gom-latn.js\":\"DKr+\",\"./gu\":\"4MV3\",\"./gu.js\":\"4MV3\",\"./he\":\"x6pH\",\"./he.js\":\"x6pH\",\"./hi\":\"3E1r\",\"./hi.js\":\"3E1r\",\"./hr\":\"S6ln\",\"./hr.js\":\"S6ln\",\"./hu\":\"WxRl\",\"./hu.js\":\"WxRl\",\"./hy-am\":\"1rYy\",\"./hy-am.js\":\"1rYy\",\"./id\":\"UDhR\",\"./id.js\":\"UDhR\",\"./is\":\"BVg3\",\"./is.js\":\"BVg3\",\"./it\":\"bpih\",\"./it-ch\":\"bxKX\",\"./it-ch.js\":\"bxKX\",\"./it.js\":\"bpih\",\"./ja\":\"B55N\",\"./ja.js\":\"B55N\",\"./jv\":\"tUCv\",\"./jv.js\":\"tUCv\",\"./ka\":\"IBtZ\",\"./ka.js\":\"IBtZ\",\"./kk\":\"bXm7\",\"./kk.js\":\"bXm7\",\"./km\":\"6B0Y\",\"./km.js\":\"6B0Y\",\"./kn\":\"PpIw\",\"./kn.js\":\"PpIw\",\"./ko\":\"Ivi+\",\"./ko.js\":\"Ivi+\",\"./ku\":\"JCF/\",\"./ku.js\":\"JCF/\",\"./ky\":\"lgnt\",\"./ky.js\":\"lgnt\",\"./lb\":\"RAwQ\",\"./lb.js\":\"RAwQ\",\"./lo\":\"sp3z\",\"./lo.js\":\"sp3z\",\"./lt\":\"JvlW\",\"./lt.js\":\"JvlW\",\"./lv\":\"uXwI\",\"./lv.js\":\"uXwI\",\"./me\":\"KTz0\",\"./me.js\":\"KTz0\",\"./mi\":\"aIsn\",\"./mi.js\":\"aIsn\",\"./mk\":\"aQkU\",\"./mk.js\":\"aQkU\",\"./ml\":\"AvvY\",\"./ml.js\":\"AvvY\",\"./mn\":\"lYtQ\",\"./mn.js\":\"lYtQ\",\"./mr\":\"Ob0Z\",\"./mr.js\":\"Ob0Z\",\"./ms\":\"6+QB\",\"./ms-my\":\"ZAMP\",\"./ms-my.js\":\"ZAMP\",\"./ms.js\":\"6+QB\",\"./mt\":\"G0Uy\",\"./mt.js\":\"G0Uy\",\"./my\":\"honF\",\"./my.js\":\"honF\",\"./nb\":\"bOMt\",\"./nb.js\":\"bOMt\",\"./ne\":\"OjkT\",\"./ne.js\":\"OjkT\",\"./nl\":\"+s0g\",\"./nl-be\":\"2ykv\",\"./nl-be.js\":\"2ykv\",\"./nl.js\":\"+s0g\",\"./nn\":\"uEye\",\"./nn.js\":\"uEye\",\"./oc-lnc\":\"Fnuy\",\"./oc-lnc.js\":\"Fnuy\",\"./pa-in\":\"8/+R\",\"./pa-in.js\":\"8/+R\",\"./pl\":\"jVdC\",\"./pl.js\":\"jVdC\",\"./pt\":\"8mBD\",\"./pt-br\":\"0tRk\",\"./pt-br.js\":\"0tRk\",\"./pt.js\":\"8mBD\",\"./ro\":\"lyxo\",\"./ro.js\":\"lyxo\",\"./ru\":\"lXzo\",\"./ru.js\":\"lXzo\",\"./sd\":\"Z4QM\",\"./sd.js\":\"Z4QM\",\"./se\":\"//9w\",\"./se.js\":\"//9w\",\"./si\":\"7aV9\",\"./si.js\":\"7aV9\",\"./sk\":\"e+ae\",\"./sk.js\":\"e+ae\",\"./sl\":\"gVVK\",\"./sl.js\":\"gVVK\",\"./sq\":\"yPMs\",\"./sq.js\":\"yPMs\",\"./sr\":\"zx6S\",\"./sr-cyrl\":\"E+lV\",\"./sr-cyrl.js\":\"E+lV\",\"./sr.js\":\"zx6S\",\"./ss\":\"Ur1D\",\"./ss.js\":\"Ur1D\",\"./sv\":\"X709\",\"./sv.js\":\"X709\",\"./sw\":\"dNwA\",\"./sw.js\":\"dNwA\",\"./ta\":\"PeUW\",\"./ta.js\":\"PeUW\",\"./te\":\"XLvN\",\"./te.js\":\"XLvN\",\"./tet\":\"V2x9\",\"./tet.js\":\"V2x9\",\"./tg\":\"Oxv6\",\"./tg.js\":\"Oxv6\",\"./th\":\"EOgW\",\"./th.js\":\"EOgW\",\"./tk\":\"Wv91\",\"./tk.js\":\"Wv91\",\"./tl-ph\":\"Dzi0\",\"./tl-ph.js\":\"Dzi0\",\"./tlh\":\"z3Vd\",\"./tlh.js\":\"z3Vd\",\"./tr\":\"DoHr\",\"./tr.js\":\"DoHr\",\"./tzl\":\"z1FC\",\"./tzl.js\":\"z1FC\",\"./tzm\":\"wQk9\",\"./tzm-latn\":\"tT3J\",\"./tzm-latn.js\":\"tT3J\",\"./tzm.js\":\"wQk9\",\"./ug-cn\":\"YRex\",\"./ug-cn.js\":\"YRex\",\"./uk\":\"raLr\",\"./uk.js\":\"raLr\",\"./ur\":\"UpQW\",\"./ur.js\":\"UpQW\",\"./uz\":\"Loxo\",\"./uz-latn\":\"AQ68\",\"./uz-latn.js\":\"AQ68\",\"./uz.js\":\"Loxo\",\"./vi\":\"KSF8\",\"./vi.js\":\"KSF8\",\"./x-pseudo\":\"/X5v\",\"./x-pseudo.js\":\"/X5v\",\"./yo\":\"fzPg\",\"./yo.js\":\"fzPg\",\"./zh-cn\":\"XDpg\",\"./zh-cn.js\":\"XDpg\",\"./zh-hk\":\"SatO\",\"./zh-hk.js\":\"SatO\",\"./zh-mo\":\"OmwH\",\"./zh-mo.js\":\"OmwH\",\"./zh-tw\":\"kOpN\",\"./zh-tw.js\":\"kOpN\"};function i(t){var e=a(t);return n(e)}function a(t){if(!n.o(r,t)){var e=new Error(\"Cannot find module '\"+t+\"'\");throw e.code=\"MODULE_NOT_FOUND\",e}return r[t]}i.keys=function(){return Object.keys(r)},i.resolve=a,t.exports=i,i.id=\"RnhZ\"},S6ln:function(t,e,n){!function(t){\"use strict\";function e(t,e,n){var r=t+\" \";switch(n){case\"ss\":return r+(1===t?\"sekunda\":2===t||3===t||4===t?\"sekunde\":\"sekundi\");case\"m\":return e?\"jedna minuta\":\"jedne minute\";case\"mm\":return r+(1===t?\"minuta\":2===t||3===t||4===t?\"minute\":\"minuta\");case\"h\":return e?\"jedan sat\":\"jednog sata\";case\"hh\":return r+(1===t?\"sat\":2===t||3===t||4===t?\"sata\":\"sati\");case\"dd\":return r+(1===t?\"dan\":\"dana\");case\"MM\":return r+(1===t?\"mjesec\":2===t||3===t||4===t?\"mjeseca\":\"mjeseci\");case\"yy\":return r+(1===t?\"godina\":2===t||3===t||4===t?\"godine\":\"godina\")}}t.defineLocale(\"hr\",{months:{format:\"sije\\u010dnja_velja\\u010de_o\\u017eujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca\".split(\"_\"),standalone:\"sije\\u010danj_velja\\u010da_o\\u017eujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac\".split(\"_\")},monthsShort:\"sij._velj._o\\u017eu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedjelja_ponedjeljak_utorak_srijeda_\\u010detvrtak_petak_subota\".split(\"_\"),weekdaysShort:\"ned._pon._uto._sri._\\u010det._pet._sub.\".split(\"_\"),weekdaysMin:\"ne_po_ut_sr_\\u010de_pe_su\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"Do MMMM YYYY\",LLL:\"Do MMMM YYYY H:mm\",LLLL:\"dddd, Do MMMM YYYY H:mm\"},calendar:{sameDay:\"[danas u] LT\",nextDay:\"[sutra u] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[u] [nedjelju] [u] LT\";case 3:return\"[u] [srijedu] [u] LT\";case 6:return\"[u] [subotu] [u] LT\";case 1:case 2:case 4:case 5:return\"[u] dddd [u] LT\"}},lastDay:\"[ju\\u010der u] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[pro\\u0161lu] [nedjelju] [u] LT\";case 3:return\"[pro\\u0161lu] [srijedu] [u] LT\";case 6:return\"[pro\\u0161le] [subote] [u] LT\";case 1:case 2:case 4:case 5:return\"[pro\\u0161li] dddd [u] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"prije %s\",s:\"par sekundi\",ss:e,m:e,mm:e,h:e,hh:e,d:\"dan\",dd:e,M:\"mjesec\",MM:e,y:\"godinu\",yy:e},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(n(\"wd/R\"))},SFxW:function(t,e,n){!function(t){\"use strict\";var e={1:\"-inci\",5:\"-inci\",8:\"-inci\",70:\"-inci\",80:\"-inci\",2:\"-nci\",7:\"-nci\",20:\"-nci\",50:\"-nci\",3:\"-\\xfcnc\\xfc\",4:\"-\\xfcnc\\xfc\",100:\"-\\xfcnc\\xfc\",6:\"-nc\\u0131\",9:\"-uncu\",10:\"-uncu\",30:\"-uncu\",60:\"-\\u0131nc\\u0131\",90:\"-\\u0131nc\\u0131\"};t.defineLocale(\"az\",{months:\"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr\".split(\"_\"),monthsShort:\"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek\".split(\"_\"),weekdays:\"Bazar_Bazar ert\\u0259si_\\xc7\\u0259r\\u015f\\u0259nb\\u0259 ax\\u015fam\\u0131_\\xc7\\u0259r\\u015f\\u0259nb\\u0259_C\\xfcm\\u0259 ax\\u015fam\\u0131_C\\xfcm\\u0259_\\u015e\\u0259nb\\u0259\".split(\"_\"),weekdaysShort:\"Baz_BzE_\\xc7Ax_\\xc7\\u0259r_CAx_C\\xfcm_\\u015e\\u0259n\".split(\"_\"),weekdaysMin:\"Bz_BE_\\xc7A_\\xc7\\u0259_CA_C\\xfc_\\u015e\\u0259\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[bug\\xfcn saat] LT\",nextDay:\"[sabah saat] LT\",nextWeek:\"[g\\u0259l\\u0259n h\\u0259ft\\u0259] dddd [saat] LT\",lastDay:\"[d\\xfcn\\u0259n] LT\",lastWeek:\"[ke\\xe7\\u0259n h\\u0259ft\\u0259] dddd [saat] LT\",sameElse:\"L\"},relativeTime:{future:\"%s sonra\",past:\"%s \\u0259vv\\u0259l\",s:\"bir ne\\xe7\\u0259 saniy\\u0259\",ss:\"%d saniy\\u0259\",m:\"bir d\\u0259qiq\\u0259\",mm:\"%d d\\u0259qiq\\u0259\",h:\"bir saat\",hh:\"%d saat\",d:\"bir g\\xfcn\",dd:\"%d g\\xfcn\",M:\"bir ay\",MM:\"%d ay\",y:\"bir il\",yy:\"%d il\"},meridiemParse:/gec\\u0259|s\\u0259h\\u0259r|g\\xfcnd\\xfcz|ax\\u015fam/,isPM:function(t){return/^(g\\xfcnd\\xfcz|ax\\u015fam)$/.test(t)},meridiem:function(t,e,n){return t<4?\"gec\\u0259\":t<12?\"s\\u0259h\\u0259r\":t<17?\"g\\xfcnd\\xfcz\":\"ax\\u015fam\"},dayOfMonthOrdinalParse:/\\d{1,2}-(\\u0131nc\\u0131|inci|nci|\\xfcnc\\xfc|nc\\u0131|uncu)/,ordinal:function(t){if(0===t)return t+\"-\\u0131nc\\u0131\";var n=t%10;return t+(e[n]||e[t%100-n]||e[t>=100?100:null])},week:{dow:1,doy:7}})}(n(\"wd/R\"))},STbY:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return F})),n.d(e,\"b\",(function(){return P})),n.d(e,\"c\",(function(){return U})),n.d(e,\"d\",(function(){return H}));var r=n(\"u47x\"),i=n(\"8LU1\"),a=n(\"FtGj\"),o=n(\"fXoL\"),s=n(\"XNiG\"),l=n(\"quSY\"),c=n(\"VRyK\"),u=n(\"LRne\"),h=n(\"7Hc7\"),d=n(\"JX91\"),f=n(\"eIep\"),p=n(\"IzEk\"),m=n(\"pLZG\"),g=n(\"1G5W\"),y=n(\"3E0/\"),v=n(\"R0Ic\"),_=n(\"+rOU\"),b=n(\"ofXK\"),x=n(\"FKr1\"),w=n(\"rDax\"),k=n(\"nLfN\"),M=n(\"vxfF\"),T=n(\"cH1L\");const S=[\"mat-menu-item\",\"\"],A=[\"*\"];function L(t,e){if(1&t){const t=o.ec();o.dc(0,\"div\",0),o.lc(\"keydown\",(function(e){return o.Ec(t),o.pc()._handleKeydown(e)}))(\"click\",(function(){return o.Ec(t),o.pc().closed.emit(\"click\")}))(\"@transformMenu.start\",(function(e){return o.Ec(t),o.pc()._onAnimationStart(e)}))(\"@transformMenu.done\",(function(e){return o.Ec(t),o.pc()._onAnimationDone(e)})),o.dc(1,\"div\",1),o.tc(2),o.cc(),o.cc()}if(2&t){const t=o.pc();o.vc(\"id\",t.panelId)(\"ngClass\",t._classList)(\"@transformMenu\",t._panelAnimationState),o.Mb(\"aria-label\",t.ariaLabel||null)(\"aria-labelledby\",t.ariaLabelledby||null)(\"aria-describedby\",t.ariaDescribedby||null)}}const C={transformMenu:Object(v.m)(\"transformMenu\",[Object(v.j)(\"void\",Object(v.k)({opacity:0,transform:\"scale(0.8)\"})),Object(v.l)(\"void => enter\",Object(v.e)(\"120ms cubic-bezier(0, 0, 0.2, 1)\",Object(v.k)({opacity:1,transform:\"scale(1)\"}))),Object(v.l)(\"* => void\",Object(v.e)(\"100ms 25ms linear\",Object(v.k)({opacity:0})))]),fadeInItems:Object(v.m)(\"fadeInItems\",[Object(v.j)(\"showing\",Object(v.k)({opacity:1})),Object(v.l)(\"void => *\",[Object(v.k)({opacity:0}),Object(v.e)(\"400ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)\")])])},E=new o.w(\"MatMenuContent\"),O=new o.w(\"MAT_MENU_PANEL\");class D{}const I=Object(x.x)(Object(x.y)(D));let P=(()=>{class t extends I{constructor(t,e,n,r){super(),this._elementRef=t,this._focusMonitor=n,this._parentMenu=r,this.role=\"menuitem\",this._hovered=new s.a,this._focused=new s.a,this._highlighted=!1,this._triggersSubmenu=!1,r&&r.addItem&&r.addItem(this)}focus(t,e){this._focusMonitor&&t?this._focusMonitor.focusVia(this._getHostElement(),t,e):this._getHostElement().focus(e),this._focused.next(this)}ngAfterViewInit(){this._focusMonitor&&this._focusMonitor.monitor(this._elementRef,!1)}ngOnDestroy(){this._focusMonitor&&this._focusMonitor.stopMonitoring(this._elementRef),this._parentMenu&&this._parentMenu.removeItem&&this._parentMenu.removeItem(this),this._hovered.complete(),this._focused.complete()}_getTabIndex(){return this.disabled?\"-1\":\"0\"}_getHostElement(){return this._elementRef.nativeElement}_checkDisabled(t){this.disabled&&(t.preventDefault(),t.stopPropagation())}_handleMouseEnter(){this._hovered.next(this)}getLabel(){var t,e;const n=this._elementRef.nativeElement.cloneNode(!0),r=n.querySelectorAll(\"mat-icon, .material-icons\");for(let i=0;i<r.length;i++){const e=r[i];null===(t=e.parentNode)||void 0===t||t.removeChild(e)}return(null===(e=n.textContent)||void 0===e?void 0:e.trim())||\"\"}}return t.\\u0275fac=function(e){return new(e||t)(o.Xb(o.p),o.Xb(b.d),o.Xb(r.h),o.Xb(O,8))},t.\\u0275cmp=o.Rb({type:t,selectors:[[\"\",\"mat-menu-item\",\"\"]],hostAttrs:[1,\"mat-focus-indicator\"],hostVars:10,hostBindings:function(t,e){1&t&&o.lc(\"click\",(function(t){return e._checkDisabled(t)}))(\"mouseenter\",(function(){return e._handleMouseEnter()})),2&t&&(o.Mb(\"role\",e.role)(\"tabindex\",e._getTabIndex())(\"aria-disabled\",e.disabled.toString())(\"disabled\",e.disabled||null),o.Pb(\"mat-menu-item\",!0)(\"mat-menu-item-highlighted\",e._highlighted)(\"mat-menu-item-submenu-trigger\",e._triggersSubmenu))},inputs:{disabled:\"disabled\",disableRipple:\"disableRipple\",role:\"role\"},exportAs:[\"matMenuItem\"],features:[o.Ib],attrs:S,ngContentSelectors:A,decls:2,vars:2,consts:[[\"matRipple\",\"\",1,\"mat-menu-ripple\",3,\"matRippleDisabled\",\"matRippleTrigger\"]],template:function(t,e){1&t&&(o.uc(),o.tc(0),o.Yb(1,\"div\",0)),2&t&&(o.Lb(1),o.vc(\"matRippleDisabled\",e.disableRipple||e.disabled)(\"matRippleTrigger\",e._getHostElement()))},directives:[x.r],encapsulation:2,changeDetection:0}),t})();const R=new o.w(\"mat-menu-default-options\",{providedIn:\"root\",factory:function(){return{overlapTrigger:!1,xPosition:\"after\",yPosition:\"below\",backdropClass:\"cdk-overlay-transparent-backdrop\"}}});let z=0,j=(()=>{class t{constructor(t,e,n){this._elementRef=t,this._ngZone=e,this._defaultOptions=n,this._xPosition=this._defaultOptions.xPosition,this._yPosition=this._defaultOptions.yPosition,this._directDescendantItems=new o.N,this._tabSubscription=l.a.EMPTY,this._classList={},this._panelAnimationState=\"void\",this._animationDone=new s.a,this.overlayPanelClass=this._defaultOptions.overlayPanelClass||\"\",this.backdropClass=this._defaultOptions.backdropClass,this._overlapTrigger=this._defaultOptions.overlapTrigger,this._hasBackdrop=this._defaultOptions.hasBackdrop,this.closed=new o.s,this.close=this.closed,this.panelId=\"mat-menu-panel-\"+z++}get xPosition(){return this._xPosition}set xPosition(t){this._xPosition=t,this.setPositionClasses()}get yPosition(){return this._yPosition}set yPosition(t){this._yPosition=t,this.setPositionClasses()}get overlapTrigger(){return this._overlapTrigger}set overlapTrigger(t){this._overlapTrigger=Object(i.c)(t)}get hasBackdrop(){return this._hasBackdrop}set hasBackdrop(t){this._hasBackdrop=Object(i.c)(t)}set panelClass(t){const e=this._previousPanelClass;e&&e.length&&e.split(\" \").forEach(t=>{this._classList[t]=!1}),this._previousPanelClass=t,t&&t.length&&(t.split(\" \").forEach(t=>{this._classList[t]=!0}),this._elementRef.nativeElement.className=\"\")}get classList(){return this.panelClass}set classList(t){this.panelClass=t}ngOnInit(){this.setPositionClasses()}ngAfterContentInit(){this._updateDirectDescendants(),this._keyManager=new r.g(this._directDescendantItems).withWrap().withTypeAhead().withHomeAndEnd(),this._tabSubscription=this._keyManager.tabOut.subscribe(()=>this.closed.emit(\"tab\")),this._directDescendantItems.changes.pipe(Object(d.a)(this._directDescendantItems),Object(f.a)(t=>Object(c.a)(...t.map(t=>t._focused)))).subscribe(t=>this._keyManager.updateActiveItem(t))}ngOnDestroy(){this._directDescendantItems.destroy(),this._tabSubscription.unsubscribe(),this.closed.complete()}_hovered(){return this._directDescendantItems.changes.pipe(Object(d.a)(this._directDescendantItems),Object(f.a)(t=>Object(c.a)(...t.map(t=>t._hovered))))}addItem(t){}removeItem(t){}_handleKeydown(t){const e=t.keyCode,n=this._keyManager;switch(e){case a.f:Object(a.r)(t)||(t.preventDefault(),this.closed.emit(\"keydown\"));break;case a.h:this.parentMenu&&\"ltr\"===this.direction&&this.closed.emit(\"keydown\");break;case a.l:this.parentMenu&&\"rtl\"===this.direction&&this.closed.emit(\"keydown\");break;default:e!==a.o&&e!==a.c||n.setFocusOrigin(\"keyboard\"),n.onKeydown(t)}}focusFirstItem(t=\"program\"){this.lazyContent?this._ngZone.onStable.pipe(Object(p.a)(1)).subscribe(()=>this._focusFirstItem(t)):this._focusFirstItem(t)}_focusFirstItem(t){const e=this._keyManager;if(e.setFocusOrigin(t).setFirstItemActive(),!e.activeItem&&this._directDescendantItems.length){let t=this._directDescendantItems.first._getHostElement().parentElement;for(;t;){if(\"menu\"===t.getAttribute(\"role\")){t.focus();break}t=t.parentElement}}}resetActiveItem(){this._keyManager.setActiveItem(-1)}setElevation(t){const e=\"mat-elevation-z\"+Math.min(4+t,24),n=Object.keys(this._classList).find(t=>t.startsWith(\"mat-elevation-z\"));n&&n!==this._previousElevation||(this._previousElevation&&(this._classList[this._previousElevation]=!1),this._classList[e]=!0,this._previousElevation=e)}setPositionClasses(t=this.xPosition,e=this.yPosition){const n=this._classList;n[\"mat-menu-before\"]=\"before\"===t,n[\"mat-menu-after\"]=\"after\"===t,n[\"mat-menu-above\"]=\"above\"===e,n[\"mat-menu-below\"]=\"below\"===e}_startAnimation(){this._panelAnimationState=\"enter\"}_resetAnimation(){this._panelAnimationState=\"void\"}_onAnimationDone(t){this._animationDone.next(t),this._isAnimating=!1}_onAnimationStart(t){this._isAnimating=!0,\"enter\"===t.toState&&0===this._keyManager.activeItemIndex&&(t.element.scrollTop=0)}_updateDirectDescendants(){this._allItems.changes.pipe(Object(d.a)(this._allItems)).subscribe(t=>{this._directDescendantItems.reset(t.filter(t=>t._parentMenu===this)),this._directDescendantItems.notifyOnChanges()})}}return t.\\u0275fac=function(e){return new(e||t)(o.Xb(o.p),o.Xb(o.H),o.Xb(R))},t.\\u0275dir=o.Sb({type:t,contentQueries:function(t,e,n){if(1&t&&(o.Qb(n,E,!0),o.Qb(n,P,!0),o.Qb(n,P,!1)),2&t){let t;o.Ac(t=o.mc())&&(e.lazyContent=t.first),o.Ac(t=o.mc())&&(e._allItems=t),o.Ac(t=o.mc())&&(e.items=t)}},viewQuery:function(t,e){if(1&t&&o.Sc(o.V,!0),2&t){let t;o.Ac(t=o.mc())&&(e.templateRef=t.first)}},inputs:{backdropClass:\"backdropClass\",xPosition:\"xPosition\",yPosition:\"yPosition\",overlapTrigger:\"overlapTrigger\",hasBackdrop:\"hasBackdrop\",panelClass:[\"class\",\"panelClass\"],classList:\"classList\",ariaLabel:[\"aria-label\",\"ariaLabel\"],ariaLabelledby:[\"aria-labelledby\",\"ariaLabelledby\"],ariaDescribedby:[\"aria-describedby\",\"ariaDescribedby\"]},outputs:{closed:\"closed\",close:\"close\"}}),t})(),F=(()=>{class t extends j{constructor(t,e,n){super(t,e,n)}}return t.\\u0275fac=function(e){return new(e||t)(o.Xb(o.p),o.Xb(o.H),o.Xb(R))},t.\\u0275cmp=o.Rb({type:t,selectors:[[\"mat-menu\"]],hostVars:3,hostBindings:function(t,e){2&t&&o.Mb(\"aria-label\",null)(\"aria-labelledby\",null)(\"aria-describedby\",null)},exportAs:[\"matMenu\"],features:[o.Kb([{provide:O,useExisting:t}]),o.Ib],ngContentSelectors:A,decls:1,vars:0,consts:[[\"tabindex\",\"-1\",\"role\",\"menu\",1,\"mat-menu-panel\",3,\"id\",\"ngClass\",\"keydown\",\"click\"],[1,\"mat-menu-content\"]],template:function(t,e){1&t&&(o.uc(),o.Mc(0,L,3,6,\"ng-template\"))},directives:[b.m],styles:['.mat-menu-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;max-height:calc(100vh - 48px);border-radius:4px;outline:0;min-height:64px}.mat-menu-panel.ng-animating{pointer-events:none}.cdk-high-contrast-active .mat-menu-panel{outline:solid 1px}.mat-menu-content:not(:empty){padding-top:8px;padding-bottom:8px}.mat-menu-item{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;line-height:48px;height:48px;padding:0 16px;text-align:left;text-decoration:none;max-width:100%;position:relative}.mat-menu-item::-moz-focus-inner{border:0}.mat-menu-item[disabled]{cursor:default}[dir=rtl] .mat-menu-item{text-align:right}.mat-menu-item .mat-icon{margin-right:16px;vertical-align:middle}.mat-menu-item .mat-icon svg{vertical-align:top}[dir=rtl] .mat-menu-item .mat-icon{margin-left:16px;margin-right:0}.mat-menu-item[disabled]{pointer-events:none}.cdk-high-contrast-active .mat-menu-item{margin-top:1px}.cdk-high-contrast-active .mat-menu-item.cdk-program-focused,.cdk-high-contrast-active .mat-menu-item.cdk-keyboard-focused,.cdk-high-contrast-active .mat-menu-item-highlighted{outline:dotted 1px}.mat-menu-item-submenu-trigger{padding-right:32px}.mat-menu-item-submenu-trigger::after{width:0;height:0;border-style:solid;border-width:5px 0 5px 5px;border-color:transparent transparent transparent currentColor;content:\"\";display:inline-block;position:absolute;top:50%;right:16px;transform:translateY(-50%)}[dir=rtl] .mat-menu-item-submenu-trigger{padding-right:16px;padding-left:32px}[dir=rtl] .mat-menu-item-submenu-trigger::after{right:auto;left:16px;transform:rotateY(180deg) translateY(-50%)}button.mat-menu-item{width:100%}.mat-menu-item .mat-menu-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}\\n'],encapsulation:2,data:{animation:[C.transformMenu,C.fadeInItems]},changeDetection:0}),t})();const N=new o.w(\"mat-menu-scroll-strategy\"),B={provide:N,deps:[w.c],useFactory:function(t){return()=>t.scrollStrategies.reposition()}},Y=Object(k.f)({passive:!0});let H=(()=>{class t{constructor(t,e,n,r,i,a,s,c){this._overlay=t,this._element=e,this._viewContainerRef=n,this._menuItemInstance=a,this._dir=s,this._focusMonitor=c,this._overlayRef=null,this._menuOpen=!1,this._closingActionsSubscription=l.a.EMPTY,this._hoverSubscription=l.a.EMPTY,this._menuCloseSubscription=l.a.EMPTY,this._handleTouchStart=()=>this._openedBy=\"touch\",this._openedBy=null,this.restoreFocus=!0,this.menuOpened=new o.s,this.onMenuOpen=this.menuOpened,this.menuClosed=new o.s,this.onMenuClose=this.menuClosed,this._scrollStrategy=r,this._parentMaterialMenu=i instanceof j?i:void 0,e.nativeElement.addEventListener(\"touchstart\",this._handleTouchStart,Y),a&&(a._triggersSubmenu=this.triggersSubmenu())}get _deprecatedMatMenuTriggerFor(){return this.menu}set _deprecatedMatMenuTriggerFor(t){this.menu=t}get menu(){return this._menu}set menu(t){t!==this._menu&&(this._menu=t,this._menuCloseSubscription.unsubscribe(),t&&(this._menuCloseSubscription=t.close.subscribe(t=>{this._destroyMenu(),\"click\"!==t&&\"tab\"!==t||!this._parentMaterialMenu||this._parentMaterialMenu.closed.emit(t)})))}ngAfterContentInit(){this._checkMenu(),this._handleHover()}ngOnDestroy(){this._overlayRef&&(this._overlayRef.dispose(),this._overlayRef=null),this._element.nativeElement.removeEventListener(\"touchstart\",this._handleTouchStart,Y),this._menuCloseSubscription.unsubscribe(),this._closingActionsSubscription.unsubscribe(),this._hoverSubscription.unsubscribe()}get menuOpen(){return this._menuOpen}get dir(){return this._dir&&\"rtl\"===this._dir.value?\"rtl\":\"ltr\"}triggersSubmenu(){return!(!this._menuItemInstance||!this._parentMaterialMenu)}toggleMenu(){return this._menuOpen?this.closeMenu():this.openMenu()}openMenu(){if(this._menuOpen)return;this._checkMenu();const t=this._createOverlay(),e=t.getConfig();this._setPosition(e.positionStrategy),e.hasBackdrop=null==this.menu.hasBackdrop?!this.triggersSubmenu():this.menu.hasBackdrop,t.attach(this._getPortal()),this.menu.lazyContent&&this.menu.lazyContent.attach(this.menuData),this._closingActionsSubscription=this._menuClosingActions().subscribe(()=>this.closeMenu()),this._initMenu(),this.menu instanceof j&&this.menu._startAnimation()}closeMenu(){this.menu.close.emit()}focus(t,e){this._focusMonitor&&t?this._focusMonitor.focusVia(this._element,t,e):this._element.nativeElement.focus(e)}_destroyMenu(){if(!this._overlayRef||!this.menuOpen)return;const t=this.menu;this._closingActionsSubscription.unsubscribe(),this._overlayRef.detach(),this._restoreFocus(),t instanceof j?(t._resetAnimation(),t.lazyContent?t._animationDone.pipe(Object(m.a)(t=>\"void\"===t.toState),Object(p.a)(1),Object(g.a)(t.lazyContent._attached)).subscribe({next:()=>t.lazyContent.detach(),complete:()=>this._setIsMenuOpen(!1)}):this._setIsMenuOpen(!1)):(this._setIsMenuOpen(!1),t.lazyContent&&t.lazyContent.detach())}_initMenu(){this.menu.parentMenu=this.triggersSubmenu()?this._parentMaterialMenu:void 0,this.menu.direction=this.dir,this._setMenuElevation(),this._setIsMenuOpen(!0),this.menu.focusFirstItem(this._openedBy||\"program\")}_setMenuElevation(){if(this.menu.setElevation){let t=0,e=this.menu.parentMenu;for(;e;)t++,e=e.parentMenu;this.menu.setElevation(t)}}_restoreFocus(){this.restoreFocus&&(this._openedBy?this.triggersSubmenu()||this.focus(this._openedBy):this.focus()),this._openedBy=null}_setIsMenuOpen(t){this._menuOpen=t,this._menuOpen?this.menuOpened.emit():this.menuClosed.emit(),this.triggersSubmenu()&&(this._menuItemInstance._highlighted=t)}_checkMenu(){}_createOverlay(){if(!this._overlayRef){const t=this._getOverlayConfig();this._subscribeToPositions(t.positionStrategy),this._overlayRef=this._overlay.create(t),this._overlayRef.keydownEvents().subscribe()}return this._overlayRef}_getOverlayConfig(){return new w.d({positionStrategy:this._overlay.position().flexibleConnectedTo(this._element).withLockedPosition().withGrowAfterOpen().withTransformOriginOn(\".mat-menu-panel, .mat-mdc-menu-panel\"),backdropClass:this.menu.backdropClass||\"cdk-overlay-transparent-backdrop\",panelClass:this.menu.overlayPanelClass,scrollStrategy:this._scrollStrategy(),direction:this._dir})}_subscribeToPositions(t){this.menu.setPositionClasses&&t.positionChanges.subscribe(t=>{this.menu.setPositionClasses(\"start\"===t.connectionPair.overlayX?\"after\":\"before\",\"top\"===t.connectionPair.overlayY?\"below\":\"above\")})}_setPosition(t){let[e,n]=\"before\"===this.menu.xPosition?[\"end\",\"start\"]:[\"start\",\"end\"],[r,i]=\"above\"===this.menu.yPosition?[\"bottom\",\"top\"]:[\"top\",\"bottom\"],[a,o]=[r,i],[s,l]=[e,n],c=0;this.triggersSubmenu()?(l=e=\"before\"===this.menu.xPosition?\"start\":\"end\",n=s=\"end\"===e?\"start\":\"end\",c=\"bottom\"===r?8:-8):this.menu.overlapTrigger||(a=\"top\"===r?\"bottom\":\"top\",o=\"top\"===i?\"bottom\":\"top\"),t.withPositions([{originX:e,originY:a,overlayX:s,overlayY:r,offsetY:c},{originX:n,originY:a,overlayX:l,overlayY:r,offsetY:c},{originX:e,originY:o,overlayX:s,overlayY:i,offsetY:-c},{originX:n,originY:o,overlayX:l,overlayY:i,offsetY:-c}])}_menuClosingActions(){const t=this._overlayRef.backdropClick(),e=this._overlayRef.detachments(),n=this._parentMaterialMenu?this._parentMaterialMenu.closed:Object(u.a)(),r=this._parentMaterialMenu?this._parentMaterialMenu._hovered().pipe(Object(m.a)(t=>t!==this._menuItemInstance),Object(m.a)(()=>this._menuOpen)):Object(u.a)();return Object(c.a)(t,n,r,e)}_handleMousedown(t){Object(r.l)(t)||(this._openedBy=0===t.button?\"mouse\":null,this.triggersSubmenu()&&t.preventDefault())}_handleKeydown(t){const e=t.keyCode;e!==a.e&&e!==a.m||(this._openedBy=\"keyboard\"),this.triggersSubmenu()&&(e===a.l&&\"ltr\"===this.dir||e===a.h&&\"rtl\"===this.dir)&&(this._openedBy=\"keyboard\",this.openMenu())}_handleClick(t){this.triggersSubmenu()?(t.stopPropagation(),this.openMenu()):this.toggleMenu()}_handleHover(){this.triggersSubmenu()&&this._parentMaterialMenu&&(this._hoverSubscription=this._parentMaterialMenu._hovered().pipe(Object(m.a)(t=>t===this._menuItemInstance&&!t.disabled),Object(y.a)(0,h.a)).subscribe(()=>{this._openedBy=\"mouse\",this.menu instanceof j&&this.menu._isAnimating?this.menu._animationDone.pipe(Object(p.a)(1),Object(y.a)(0,h.a),Object(g.a)(this._parentMaterialMenu._hovered())).subscribe(()=>this.openMenu()):this.openMenu()}))}_getPortal(){return this._portal&&this._portal.templateRef===this.menu.templateRef||(this._portal=new _.g(this.menu.templateRef,this._viewContainerRef)),this._portal}}return t.\\u0275fac=function(e){return new(e||t)(o.Xb(w.c),o.Xb(o.p),o.Xb(o.Z),o.Xb(N),o.Xb(O,8),o.Xb(P,10),o.Xb(T.b,8),o.Xb(r.h))},t.\\u0275dir=o.Sb({type:t,selectors:[[\"\",\"mat-menu-trigger-for\",\"\"],[\"\",\"matMenuTriggerFor\",\"\"]],hostAttrs:[\"aria-haspopup\",\"true\",1,\"mat-menu-trigger\"],hostVars:2,hostBindings:function(t,e){1&t&&o.lc(\"mousedown\",(function(t){return e._handleMousedown(t)}))(\"keydown\",(function(t){return e._handleKeydown(t)}))(\"click\",(function(t){return e._handleClick(t)})),2&t&&o.Mb(\"aria-expanded\",e.menuOpen||null)(\"aria-controls\",e.menuOpen?e.menu.panelId:null)},inputs:{restoreFocus:[\"matMenuTriggerRestoreFocus\",\"restoreFocus\"],_deprecatedMatMenuTriggerFor:[\"mat-menu-trigger-for\",\"_deprecatedMatMenuTriggerFor\"],menu:[\"matMenuTriggerFor\",\"menu\"],menuData:[\"matMenuTriggerData\",\"menuData\"]},outputs:{menuOpened:\"menuOpened\",onMenuOpen:\"onMenuOpen\",menuClosed:\"menuClosed\",onMenuClose:\"onMenuClose\"},exportAs:[\"matMenuTrigger\"]}),t})(),V=(()=>{class t{}return t.\\u0275mod=o.Vb({type:t}),t.\\u0275inj=o.Ub({factory:function(e){return new(e||t)},providers:[B],imports:[x.i]}),t})(),U=(()=>{class t{}return t.\\u0275mod=o.Vb({type:t}),t.\\u0275inj=o.Ub({factory:function(e){return new(e||t)},providers:[B],imports:[[b.c,x.i,x.s,w.f,V],M.b,x.i,V]}),t})()},SUpr:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));var r=n(\"fXoL\");let i=(()=>{class t{constructor(t){this.colorSchemePrefix=\"color-scheme-\",this.renderer=t.createRenderer(null,null)}_detectPrefersColorScheme(){this.colorScheme=\"not all\"!==window.matchMedia(\"(prefers-color-scheme)\").media?window.matchMedia(\"(prefers-color-scheme: dark)\").matches?\"dark\":\"light\":\"dark\"}_setColorScheme(t){this.colorScheme=t,localStorage.setItem(\"prefers-color\",t)}_getColorScheme(){localStorage.getItem(\"prefers-color\")?this.colorScheme=localStorage.getItem(\"prefers-color\"):this._detectPrefersColorScheme()}load(){this._getColorScheme(),this.renderer.addClass(document.body,this.colorSchemePrefix+this.colorScheme)}update(t){this._setColorScheme(t),this.renderer.removeClass(document.body,this.colorSchemePrefix+(\"dark\"===this.colorScheme?\"light\":\"dark\")),this.renderer.addClass(document.body,this.colorSchemePrefix+t)}currentActive(){return this.colorScheme}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(r.P))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac,providedIn:\"root\"}),t})()},SatO:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"zh-hk\",{months:\"\\u4e00\\u6708_\\u4e8c\\u6708_\\u4e09\\u6708_\\u56db\\u6708_\\u4e94\\u6708_\\u516d\\u6708_\\u4e03\\u6708_\\u516b\\u6708_\\u4e5d\\u6708_\\u5341\\u6708_\\u5341\\u4e00\\u6708_\\u5341\\u4e8c\\u6708\".split(\"_\"),monthsShort:\"1\\u6708_2\\u6708_3\\u6708_4\\u6708_5\\u6708_6\\u6708_7\\u6708_8\\u6708_9\\u6708_10\\u6708_11\\u6708_12\\u6708\".split(\"_\"),weekdays:\"\\u661f\\u671f\\u65e5_\\u661f\\u671f\\u4e00_\\u661f\\u671f\\u4e8c_\\u661f\\u671f\\u4e09_\\u661f\\u671f\\u56db_\\u661f\\u671f\\u4e94_\\u661f\\u671f\\u516d\".split(\"_\"),weekdaysShort:\"\\u9031\\u65e5_\\u9031\\u4e00_\\u9031\\u4e8c_\\u9031\\u4e09_\\u9031\\u56db_\\u9031\\u4e94_\\u9031\\u516d\".split(\"_\"),weekdaysMin:\"\\u65e5_\\u4e00_\\u4e8c_\\u4e09_\\u56db_\\u4e94_\\u516d\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY\\u5e74M\\u6708D\\u65e5\",LLL:\"YYYY\\u5e74M\\u6708D\\u65e5 HH:mm\",LLLL:\"YYYY\\u5e74M\\u6708D\\u65e5dddd HH:mm\",l:\"YYYY/M/D\",ll:\"YYYY\\u5e74M\\u6708D\\u65e5\",lll:\"YYYY\\u5e74M\\u6708D\\u65e5 HH:mm\",llll:\"YYYY\\u5e74M\\u6708D\\u65e5dddd HH:mm\"},meridiemParse:/\\u51cc\\u6668|\\u65e9\\u4e0a|\\u4e0a\\u5348|\\u4e2d\\u5348|\\u4e0b\\u5348|\\u665a\\u4e0a/,meridiemHour:function(t,e){return 12===t&&(t=0),\"\\u51cc\\u6668\"===e||\"\\u65e9\\u4e0a\"===e||\"\\u4e0a\\u5348\"===e?t:\"\\u4e2d\\u5348\"===e?t>=11?t:t+12:\"\\u4e0b\\u5348\"===e||\"\\u665a\\u4e0a\"===e?t+12:void 0},meridiem:function(t,e,n){var r=100*t+e;return r<600?\"\\u51cc\\u6668\":r<900?\"\\u65e9\\u4e0a\":r<1200?\"\\u4e0a\\u5348\":1200===r?\"\\u4e2d\\u5348\":r<1800?\"\\u4e0b\\u5348\":\"\\u665a\\u4e0a\"},calendar:{sameDay:\"[\\u4eca\\u5929]LT\",nextDay:\"[\\u660e\\u5929]LT\",nextWeek:\"[\\u4e0b]ddddLT\",lastDay:\"[\\u6628\\u5929]LT\",lastWeek:\"[\\u4e0a]ddddLT\",sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}(\\u65e5|\\u6708|\\u9031)/,ordinal:function(t,e){switch(e){case\"d\":case\"D\":case\"DDD\":return t+\"\\u65e5\";case\"M\":return t+\"\\u6708\";case\"w\":case\"W\":return t+\"\\u9031\";default:return t}},relativeTime:{future:\"%s\\u5f8c\",past:\"%s\\u524d\",s:\"\\u5e7e\\u79d2\",ss:\"%d \\u79d2\",m:\"1 \\u5206\\u9418\",mm:\"%d \\u5206\\u9418\",h:\"1 \\u5c0f\\u6642\",hh:\"%d \\u5c0f\\u6642\",d:\"1 \\u5929\",dd:\"%d \\u5929\",M:\"1 \\u500b\\u6708\",MM:\"%d \\u500b\\u6708\",y:\"1 \\u5e74\",yy:\"%d \\u5e74\"}})}(n(\"wd/R\"))},SeVD:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return u}));var r=n(\"ngJS\"),i=n(\"NJ4a\"),a=n(\"Lhse\"),o=n(\"kJWO\"),s=n(\"I55L\"),l=n(\"c2HN\"),c=n(\"XoHu\");const u=t=>{if(t&&\"function\"==typeof t[o.a])return u=t,t=>{const e=u[o.a]();if(\"function\"!=typeof e.subscribe)throw new TypeError(\"Provided object does not correctly implement Symbol.observable\");return e.subscribe(t)};if(Object(s.a)(t))return Object(r.a)(t);if(Object(l.a)(t))return n=t,t=>(n.then(e=>{t.closed||(t.next(e),t.complete())},e=>t.error(e)).then(null,i.a),t);if(t&&\"function\"==typeof t[a.a])return e=t,t=>{const n=e[a.a]();for(;;){let e;try{e=n.next()}catch(r){return t.error(r),t}if(e.done){t.complete();break}if(t.next(e.value),t.closed)break}return\"function\"==typeof n.return&&t.add(()=>{n.return&&n.return()}),t};{const e=Object(c.a)(t)?\"an invalid object\":`'${t}'`;throw new TypeError(`You provided ${e} where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.`)}var e,n,u}},SpAZ:function(t,e,n){\"use strict\";function r(t){return t}n.d(e,\"a\",(function(){return r}))},SxV6:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return c}));var r=n(\"sVev\"),i=n(\"pLZG\"),a=n(\"IzEk\"),o=n(\"xbPD\"),s=n(\"XDbj\"),l=n(\"SpAZ\");function c(t,e){const n=arguments.length>=2;return c=>c.pipe(t?Object(i.a)((e,n)=>t(e,n,c)):l.a,Object(a.a)(1),n?Object(o.a)(e):Object(s.a)(()=>new r.a))}},TU8p:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return h})),n.d(e,\"b\",(function(){return d}));var r=n(\"FKr1\"),i=n(\"u47x\"),a=n(\"8LU1\"),o=n(\"R1ws\"),s=n(\"fXoL\");let l=0;class c{}const u=Object(r.y)(c);let h=(()=>{class t extends u{constructor(t,e,n,r,i){super(),this._ngZone=t,this._elementRef=e,this._ariaDescriber=n,this._renderer=r,this._animationMode=i,this._hasContent=!1,this._color=\"primary\",this._overlap=!0,this.position=\"above after\",this.size=\"medium\",this._id=l++}get color(){return this._color}set color(t){this._setColor(t),this._color=t}get overlap(){return this._overlap}set overlap(t){this._overlap=Object(a.c)(t)}get description(){return this._description}set description(t){if(t!==this._description){const e=this._badgeElement;this._updateHostAriaDescription(t,this._description),this._description=t,e&&(t?e.setAttribute(\"aria-label\",t):e.removeAttribute(\"aria-label\"))}}get hidden(){return this._hidden}set hidden(t){this._hidden=Object(a.c)(t)}isAbove(){return-1===this.position.indexOf(\"below\")}isAfter(){return-1===this.position.indexOf(\"before\")}ngOnChanges(t){const e=t.content;if(e){const t=e.currentValue;this._hasContent=null!=t&&(\"\"+t).trim().length>0,this._updateTextContent()}}ngOnDestroy(){const t=this._badgeElement;t&&(this.description&&this._ariaDescriber.removeDescription(t,this.description),this._renderer.destroyNode&&this._renderer.destroyNode(t))}getBadgeElement(){return this._badgeElement}_updateTextContent(){return this._badgeElement?this._badgeElement.textContent=this._stringifyContent():this._badgeElement=this._createBadgeElement(),this._badgeElement}_createBadgeElement(){const t=this._renderer.createElement(\"span\"),e=\"mat-badge-active\",n=\"mat-badge-content\";return this._clearExistingBadges(n),t.setAttribute(\"id\",\"mat-badge-content-\"+this._id),t.classList.add(n),t.textContent=this._stringifyContent(),\"NoopAnimations\"===this._animationMode&&t.classList.add(\"_mat-animation-noopable\"),this.description&&t.setAttribute(\"aria-label\",this.description),this._elementRef.nativeElement.appendChild(t),\"function\"==typeof requestAnimationFrame&&\"NoopAnimations\"!==this._animationMode?this._ngZone.runOutsideAngular(()=>{requestAnimationFrame(()=>{t.classList.add(e)})}):t.classList.add(e),t}_updateHostAriaDescription(t,e){const n=this._updateTextContent();e&&this._ariaDescriber.removeDescription(n,e),t&&this._ariaDescriber.describe(n,t)}_setColor(t){if(t!==this._color){const e=this._elementRef.nativeElement.classList;this._color&&e.remove(\"mat-badge-\"+this._color),t&&e.add(\"mat-badge-\"+t)}}_clearExistingBadges(t){const e=this._elementRef.nativeElement;let n=e.children.length;for(;n--;){const r=e.children[n];r.classList.contains(t)&&e.removeChild(r)}}_stringifyContent(){const t=this.content;return null==t?\"\":\"\"+t}}return t.\\u0275fac=function(e){return new(e||t)(s.Xb(s.H),s.Xb(s.p),s.Xb(i.c),s.Xb(s.O),s.Xb(o.a,8))},t.\\u0275dir=s.Sb({type:t,selectors:[[\"\",\"matBadge\",\"\"]],hostAttrs:[1,\"mat-badge\"],hostVars:20,hostBindings:function(t,e){2&t&&s.Pb(\"mat-badge-overlap\",e.overlap)(\"mat-badge-above\",e.isAbove())(\"mat-badge-below\",!e.isAbove())(\"mat-badge-before\",!e.isAfter())(\"mat-badge-after\",e.isAfter())(\"mat-badge-small\",\"small\"===e.size)(\"mat-badge-medium\",\"medium\"===e.size)(\"mat-badge-large\",\"large\"===e.size)(\"mat-badge-hidden\",e.hidden||!e._hasContent)(\"mat-badge-disabled\",e.disabled)},inputs:{disabled:[\"matBadgeDisabled\",\"disabled\"],position:[\"matBadgePosition\",\"position\"],size:[\"matBadgeSize\",\"size\"],color:[\"matBadgeColor\",\"color\"],overlap:[\"matBadgeOverlap\",\"overlap\"],description:[\"matBadgeDescription\",\"description\"],hidden:[\"matBadgeHidden\",\"hidden\"],content:[\"matBadge\",\"content\"]},features:[s.Ib,s.Jb]}),t})(),d=(()=>{class t{}return t.\\u0275mod=s.Vb({type:t}),t.\\u0275inj=s.Ub({factory:function(e){return new(e||t)},imports:[[i.a,r.i],r.i]}),t})()},TkeJ:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return d})),n.d(e,\"b\",(function(){return b}));var r=n(\"AcyG\");function i(t,e,n,r){var i,a=arguments.length,o=a<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(t,e,n,r);else for(var s=t.length-1;s>=0;s--)(i=t[s])&&(o=(a<3?i(o):a>3?i(e,n,o):i(e,n))||o);return a>3&&o&&Object.defineProperty(e,n,o),o}function a(t,e){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(t,e)}var o,s=n(\"tyNb\"),l=n(\"z5Zb\"),c=n(\"SxV6\"),u=n(\"fXoL\"),h=n(\"ofXK\");class d{constructor(t,e,n){this.path=t,this.queryParams=e,this.extras=n}static get type(){return\"[Router] Navigate\"}}class f{constructor(t,e,n=\"none\"){this.routerState=t,this.event=e,this.trigger=n}static get type(){return\"[Router] RouterNavigation\"}}class p{constructor(t,e,n,r=\"none\"){this.routerState=t,this.storeState=e,this.event=n,this.trigger=r}static get type(){return\"[Router] RouterCancel\"}}class m{constructor(t,e,n,r=\"none\"){this.routerState=t,this.storeState=e,this.event=n,this.trigger=r}static get type(){return\"[Router] RouterError\"}}class g{constructor(t,e,n=\"none\"){this.routerState=t,this.event=e,this.trigger=n}static get type(){return\"[Router] RouterDataResolved\"}}class y{}class v{serialize(t){return{root:this.serializeRoute(t.root),url:t.url}}serializeRoute(t){const e=t.children.map(t=>this.serializeRoute(t));return{url:t.url,params:t.params,queryParams:t.queryParams,fragment:t.fragment,data:t.data,outlet:t.outlet,component:null,routeConfig:null,root:null,parent:null,firstChild:e[0],children:e,pathFromRoot:null,paramMap:t.paramMap,queryParamMap:t.queryParamMap,toString:t.toString}}}let _=(()=>{let t=o=class{constructor(t,e,n,r,i,a,o){this._store=t,this._router=e,this._serializer=n,this._ngZone=r,this._urlSerializer=i,this._locationStrategy=a,this._location=o,this._trigger=\"none\",this._routerState=null,this._storeState=null,this._lastRoutesRecognized=null,this.setUpStoreListener(),this.setUpRouterEventsListener(),this.checkInitialNavigationOnce()}static state(t){return t&&t.state}static url(t){return t&&t.state&&t.state.url}navigate(t,e){return this._ngZone.run(()=>this._router.navigate(e.path,Object.assign({queryParams:e.queryParams},e.extras)))}angularRouterAction(t,e){t.setState(Object.assign({},t.getState(),{trigger:e.trigger,state:e.routerState,navigationId:e.event.id}))}setUpStoreListener(){this._store.select(o).subscribe(t=>{this.navigateIfNeeded(t)})}setUpRouterEventsListener(){this._router.events.subscribe(t=>{t instanceof s.e?this.navigationStart():t instanceof s.l?this._lastRoutesRecognized=t:t instanceof s.f?this.dispatchRouterDataResolved(t):t instanceof s.b?(this.dispatchRouterCancel(t),this.reset()):t instanceof s.d?(this.dispatchRouterError(t),this.reset()):t instanceof s.c&&(this.navigationEnd(),this.reset())})}navigationStart(){this._routerState=this._serializer.serialize(this._router.routerState.snapshot),\"none\"!==this._trigger&&(this._storeState=this._store.selectSnapshot(o))}navigationEnd(){this.shouldDispatchRouterNavigation()&&this.dispatchRouterNavigation()}shouldDispatchRouterNavigation(){return!this._storeState||\"store\"!==this._trigger}navigateIfNeeded(t){!this._storeState||!this._storeState.state||!t||\"router\"===t.trigger||this._router.url===this._storeState.state.url||(this._trigger=\"store\",this._ngZone.run(()=>{this._router.navigateByUrl(this._storeState.state.url)}))}dispatchRouterNavigation(){const t=this._serializer.serialize(this._lastRoutesRecognized.state);this.dispatchRouterAction(new f(t,new s.l(this._lastRoutesRecognized.id,this._lastRoutesRecognized.url,this._lastRoutesRecognized.urlAfterRedirects,t),this._trigger))}dispatchRouterCancel(t){this.dispatchRouterAction(new p(this._routerState,this._storeState,t,this._trigger))}dispatchRouterError(t){this.dispatchRouterAction(new m(this._routerState,this._storeState,new s.d(t.id,t.url,\"\"+t),this._trigger))}dispatchRouterAction(t){this._trigger=\"router\";try{this._store.dispatch(t)}finally{this._trigger=\"none\"}}dispatchRouterDataResolved(t){const e=this._serializer.serialize(t.state);this.dispatchRouterAction(new g(e,t,this._trigger))}reset(){this._trigger=\"none\",this._storeState=null,this._routerState=null}checkInitialNavigationOnce(){Object(l.f)()||this._router.events.pipe(Object(c.a)(t=>t instanceof s.l)).subscribe(({url:t})=>{const e=this._location.normalize(this._locationStrategy.path(!0)),n=this._urlSerializer.parse(e);this._urlSerializer.serialize(n)!==t&&this._router.navigateByUrl(e)})}};return t.\\u0275fac=function(e){return new(e||t)(u.hc(r.i),u.hc(s.g),u.hc(y),u.hc(u.H),u.hc(s.m),u.hc(h.k),u.hc(h.j))},t.\\u0275prov=u.Tb({token:t,factory:function(e){return t.\\u0275fac(e)}}),i([Object(r.a)(d),a(\"design:type\",Function),a(\"design:paramtypes\",[Object,d]),a(\"design:returntype\",void 0)],t.prototype,\"navigate\",null),i([Object(r.a)([f,m,p,g]),a(\"design:type\",Function),a(\"design:paramtypes\",[Object,Object]),a(\"design:returntype\",void 0)],t.prototype,\"angularRouterAction\",null),i([Object(r.f)(),a(\"design:type\",Function),a(\"design:paramtypes\",[Object]),a(\"design:returntype\",void 0)],t,\"state\",null),i([Object(r.f)(),a(\"design:type\",Function),a(\"design:paramtypes\",[Object]),a(\"design:returntype\",Object)],t,\"url\",null),t=o=i([Object(r.g)({name:\"router\",defaults:{state:void 0,navigationId:void 0,trigger:\"none\"}})],t),t})(),b=(()=>{class t{static forRoot(){return{ngModule:t,providers:[{provide:y,useClass:v}]}}}return t.\\u0275mod=u.Vb({type:t}),t.\\u0275inj=u.Ub({factory:function(e){return new(e||t)},imports:[[r.d.forFeature([_])]]}),t})()},UDhR:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"id\",{months:\"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des\".split(\"_\"),weekdays:\"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu\".split(\"_\"),weekdaysShort:\"Min_Sen_Sel_Rab_Kam_Jum_Sab\".split(\"_\"),weekdaysMin:\"Mg_Sn_Sl_Rb_Km_Jm_Sb\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [pukul] HH.mm\",LLLL:\"dddd, D MMMM YYYY [pukul] HH.mm\"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),\"pagi\"===e?t:\"siang\"===e?t>=11?t:t+12:\"sore\"===e||\"malam\"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?\"pagi\":t<15?\"siang\":t<19?\"sore\":\"malam\"},calendar:{sameDay:\"[Hari ini pukul] LT\",nextDay:\"[Besok pukul] LT\",nextWeek:\"dddd [pukul] LT\",lastDay:\"[Kemarin pukul] LT\",lastWeek:\"dddd [lalu pukul] LT\",sameElse:\"L\"},relativeTime:{future:\"dalam %s\",past:\"%s yang lalu\",s:\"beberapa detik\",ss:\"%d detik\",m:\"semenit\",mm:\"%d menit\",h:\"sejam\",hh:\"%d jam\",d:\"sehari\",dd:\"%d hari\",M:\"sebulan\",MM:\"%d bulan\",y:\"setahun\",yy:\"%d tahun\"},week:{dow:0,doy:6}})}(n(\"wd/R\"))},USCx:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"ga\",{months:[\"Ean\\xe1ir\",\"Feabhra\",\"M\\xe1rta\",\"Aibre\\xe1n\",\"Bealtaine\",\"Meitheamh\",\"I\\xfail\",\"L\\xfanasa\",\"Me\\xe1n F\\xf3mhair\",\"Deireadh F\\xf3mhair\",\"Samhain\",\"Nollaig\"],monthsShort:[\"Ean\",\"Feabh\",\"M\\xe1rt\",\"Aib\",\"Beal\",\"Meith\",\"I\\xfail\",\"L\\xfan\",\"M.F.\",\"D.F.\",\"Samh\",\"Noll\"],monthsParseExact:!0,weekdays:[\"D\\xe9 Domhnaigh\",\"D\\xe9 Luain\",\"D\\xe9 M\\xe1irt\",\"D\\xe9 C\\xe9adaoin\",\"D\\xe9ardaoin\",\"D\\xe9 hAoine\",\"D\\xe9 Sathairn\"],weekdaysShort:[\"Domh\",\"Luan\",\"M\\xe1irt\",\"C\\xe9ad\",\"D\\xe9ar\",\"Aoine\",\"Sath\"],weekdaysMin:[\"Do\",\"Lu\",\"M\\xe1\",\"C\\xe9\",\"D\\xe9\",\"A\",\"Sa\"],longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Inniu ag] LT\",nextDay:\"[Am\\xe1rach ag] LT\",nextWeek:\"dddd [ag] LT\",lastDay:\"[Inn\\xe9 ag] LT\",lastWeek:\"dddd [seo caite] [ag] LT\",sameElse:\"L\"},relativeTime:{future:\"i %s\",past:\"%s \\xf3 shin\",s:\"c\\xfapla soicind\",ss:\"%d soicind\",m:\"n\\xf3im\\xe9ad\",mm:\"%d n\\xf3im\\xe9ad\",h:\"uair an chloig\",hh:\"%d uair an chloig\",d:\"l\\xe1\",dd:\"%d l\\xe1\",M:\"m\\xed\",MM:\"%d m\\xedonna\",y:\"bliain\",yy:\"%d bliain\"},dayOfMonthOrdinalParse:/\\d{1,2}(d|na|mh)/,ordinal:function(t){return t+(1===t?\"d\":t%10==2?\"na\":\"mh\")},week:{dow:1,doy:4}})}(n(\"wd/R\"))},UXun:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));var r=n(\"jtHE\");function i(t,e,n){let i;return i=t&&\"object\"==typeof t?t:{bufferSize:t,windowTime:e,refCount:!1,scheduler:n},t=>t.lift(function({bufferSize:t=Number.POSITIVE_INFINITY,windowTime:e=Number.POSITIVE_INFINITY,refCount:n,scheduler:i}){let a,o,s=0,l=!1,c=!1;return function(u){let h;s++,!a||l?(l=!1,a=new r.a(t,e,i),h=a.subscribe(this),o=u.subscribe({next(t){a.next(t)},error(t){l=!0,a.error(t)},complete(){c=!0,o=void 0,a.complete()}})):h=a.subscribe(this),this.add(()=>{s--,h.unsubscribe(),o&&!c&&n&&0===s&&(o.unsubscribe(),o=void 0,a=void 0)})}}(i))}},UpQW:function(t,e,n){!function(t){\"use strict\";var e=[\"\\u062c\\u0646\\u0648\\u0631\\u06cc\",\"\\u0641\\u0631\\u0648\\u0631\\u06cc\",\"\\u0645\\u0627\\u0631\\u0686\",\"\\u0627\\u067e\\u0631\\u06cc\\u0644\",\"\\u0645\\u0626\\u06cc\",\"\\u062c\\u0648\\u0646\",\"\\u062c\\u0648\\u0644\\u0627\\u0626\\u06cc\",\"\\u0627\\u06af\\u0633\\u062a\",\"\\u0633\\u062a\\u0645\\u0628\\u0631\",\"\\u0627\\u06a9\\u062a\\u0648\\u0628\\u0631\",\"\\u0646\\u0648\\u0645\\u0628\\u0631\",\"\\u062f\\u0633\\u0645\\u0628\\u0631\"],n=[\"\\u0627\\u062a\\u0648\\u0627\\u0631\",\"\\u067e\\u06cc\\u0631\",\"\\u0645\\u0646\\u06af\\u0644\",\"\\u0628\\u062f\\u06be\",\"\\u062c\\u0645\\u0639\\u0631\\u0627\\u062a\",\"\\u062c\\u0645\\u0639\\u06c1\",\"\\u06c1\\u0641\\u062a\\u06c1\"];t.defineLocale(\"ur\",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd\\u060c D MMMM YYYY HH:mm\"},meridiemParse:/\\u0635\\u0628\\u062d|\\u0634\\u0627\\u0645/,isPM:function(t){return\"\\u0634\\u0627\\u0645\"===t},meridiem:function(t,e,n){return t<12?\"\\u0635\\u0628\\u062d\":\"\\u0634\\u0627\\u0645\"},calendar:{sameDay:\"[\\u0622\\u062c \\u0628\\u0648\\u0642\\u062a] LT\",nextDay:\"[\\u06a9\\u0644 \\u0628\\u0648\\u0642\\u062a] LT\",nextWeek:\"dddd [\\u0628\\u0648\\u0642\\u062a] LT\",lastDay:\"[\\u06af\\u0630\\u0634\\u062a\\u06c1 \\u0631\\u0648\\u0632 \\u0628\\u0648\\u0642\\u062a] LT\",lastWeek:\"[\\u06af\\u0630\\u0634\\u062a\\u06c1] dddd [\\u0628\\u0648\\u0642\\u062a] LT\",sameElse:\"L\"},relativeTime:{future:\"%s \\u0628\\u0639\\u062f\",past:\"%s \\u0642\\u0628\\u0644\",s:\"\\u0686\\u0646\\u062f \\u0633\\u06cc\\u06a9\\u0646\\u0688\",ss:\"%d \\u0633\\u06cc\\u06a9\\u0646\\u0688\",m:\"\\u0627\\u06cc\\u06a9 \\u0645\\u0646\\u0679\",mm:\"%d \\u0645\\u0646\\u0679\",h:\"\\u0627\\u06cc\\u06a9 \\u06af\\u06be\\u0646\\u0679\\u06c1\",hh:\"%d \\u06af\\u06be\\u0646\\u0679\\u06d2\",d:\"\\u0627\\u06cc\\u06a9 \\u062f\\u0646\",dd:\"%d \\u062f\\u0646\",M:\"\\u0627\\u06cc\\u06a9 \\u0645\\u0627\\u06c1\",MM:\"%d \\u0645\\u0627\\u06c1\",y:\"\\u0627\\u06cc\\u06a9 \\u0633\\u0627\\u0644\",yy:\"%d \\u0633\\u0627\\u0644\"},preparse:function(t){return t.replace(/\\u060c/g,\",\")},postformat:function(t){return t.replace(/,/g,\"\\u060c\")},week:{dow:1,doy:4}})}(n(\"wd/R\"))},Ur1D:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"ss\",{months:\"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split(\"_\"),monthsShort:\"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo\".split(\"_\"),weekdays:\"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo\".split(\"_\"),weekdaysShort:\"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg\".split(\"_\"),weekdaysMin:\"Li_Us_Lb_Lt_Ls_Lh_Ug\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[Namuhla nga] LT\",nextDay:\"[Kusasa nga] LT\",nextWeek:\"dddd [nga] LT\",lastDay:\"[Itolo nga] LT\",lastWeek:\"dddd [leliphelile] [nga] LT\",sameElse:\"L\"},relativeTime:{future:\"nga %s\",past:\"wenteka nga %s\",s:\"emizuzwana lomcane\",ss:\"%d mzuzwana\",m:\"umzuzu\",mm:\"%d emizuzu\",h:\"lihora\",hh:\"%d emahora\",d:\"lilanga\",dd:\"%d emalanga\",M:\"inyanga\",MM:\"%d tinyanga\",y:\"umnyaka\",yy:\"%d iminyaka\"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(t,e,n){return t<11?\"ekuseni\":t<15?\"emini\":t<19?\"entsambama\":\"ebusuku\"},meridiemHour:function(t,e){return 12===t&&(t=0),\"ekuseni\"===e?t:\"emini\"===e?t>=11?t:t+12:\"entsambama\"===e||\"ebusuku\"===e?0===t?0:t+12:void 0},dayOfMonthOrdinalParse:/\\d{1,2}/,ordinal:\"%d\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},V2x9:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"tet\",{months:\"Janeiru_Fevereiru_Marsu_Abril_Maiu_Ju\\xf1u_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru\".split(\"_\"),monthsShort:\"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez\".split(\"_\"),weekdays:\"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu\".split(\"_\"),weekdaysShort:\"Dom_Seg_Ters_Kua_Kint_Sest_Sab\".split(\"_\"),weekdaysMin:\"Do_Seg_Te_Ku_Ki_Ses_Sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Ohin iha] LT\",nextDay:\"[Aban iha] LT\",nextWeek:\"dddd [iha] LT\",lastDay:\"[Horiseik iha] LT\",lastWeek:\"dddd [semana kotuk] [iha] LT\",sameElse:\"L\"},relativeTime:{future:\"iha %s\",past:\"%s liuba\",s:\"segundu balun\",ss:\"segundu %d\",m:\"minutu ida\",mm:\"minutu %d\",h:\"oras ida\",hh:\"oras %d\",d:\"loron ida\",dd:\"loron %d\",M:\"fulan ida\",MM:\"fulan %d\",y:\"tinan ida\",yy:\"tinan %d\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?\"th\":1===e?\"st\":2===e?\"nd\":3===e?\"rd\":\"th\")},week:{dow:1,doy:4}})}(n(\"wd/R\"))},VRyK:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return s}));var r=n(\"HDdC\"),i=n(\"z+Ro\"),a=n(\"bHdf\"),o=n(\"yCtX\");function s(...t){let e=Number.POSITIVE_INFINITY,n=null,s=t[t.length-1];return Object(i.a)(s)?(n=t.pop(),t.length>1&&\"number\"==typeof t[t.length-1]&&(e=t.pop())):\"number\"==typeof s&&(e=t.pop()),null===n&&1===t.length&&t[0]instanceof r.a?t[0]:Object(a.a)(e)(Object(o.a)(t,n))}},Vclq:function(t,e,n){!function(t){\"use strict\";var e=\"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\".split(\"_\"),n=\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],i=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;t.defineLocale(\"es-us\",{months:\"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\".split(\"_\"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:\"domingo_lunes_martes_mi\\xe9rcoles_jueves_viernes_s\\xe1bado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._mi\\xe9._jue._vie._s\\xe1b.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_s\\xe1\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"MM/DD/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY h:mm A\",LLLL:\"dddd, D [de] MMMM [de] YYYY h:mm A\"},calendar:{sameDay:function(){return\"[hoy a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextDay:function(){return\"[ma\\xf1ana a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextWeek:function(){return\"dddd [a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastDay:function(){return\"[ayer a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [pasado a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"en %s\",past:\"hace %s\",s:\"unos segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"una hora\",hh:\"%d horas\",d:\"un d\\xeda\",dd:\"%d d\\xedas\",w:\"una semana\",ww:\"%d semanas\",M:\"un mes\",MM:\"%d meses\",y:\"un a\\xf1o\",yy:\"%d a\\xf1os\"},dayOfMonthOrdinalParse:/\\d{1,2}\\xba/,ordinal:\"%d\\xba\",week:{dow:0,doy:6}})}(n(\"wd/R\"))},WMd4:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return o}));var r=n(\"EY2u\"),i=n(\"LRne\"),a=n(\"z6cu\");let o=(()=>{class t{constructor(t,e,n){this.kind=t,this.value=e,this.error=n,this.hasValue=\"N\"===t}observe(t){switch(this.kind){case\"N\":return t.next&&t.next(this.value);case\"E\":return t.error&&t.error(this.error);case\"C\":return t.complete&&t.complete()}}do(t,e,n){switch(this.kind){case\"N\":return t&&t(this.value);case\"E\":return e&&e(this.error);case\"C\":return n&&n()}}accept(t,e,n){return t&&\"function\"==typeof t.next?this.observe(t):this.do(t,e,n)}toObservable(){switch(this.kind){case\"N\":return Object(i.a)(this.value);case\"E\":return Object(a.a)(this.error);case\"C\":return Object(r.b)()}throw new Error(\"unexpected notification kind value\")}static createNext(e){return void 0!==e?new t(\"N\",e):t.undefinedValueNotification}static createError(e){return new t(\"E\",void 0,e)}static createComplete(){return t.completeNotification}}return t.completeNotification=new t(\"C\"),t.undefinedValueNotification=new t(\"N\",void 0),t})()},WYrj:function(t,e,n){!function(t){\"use strict\";var e=[\"\\u0796\\u07ac\\u0782\\u07aa\\u0787\\u07a6\\u0783\\u07a9\",\"\\u078a\\u07ac\\u0784\\u07b0\\u0783\\u07aa\\u0787\\u07a6\\u0783\\u07a9\",\"\\u0789\\u07a7\\u0783\\u07a8\\u0797\\u07aa\",\"\\u0787\\u07ad\\u0795\\u07b0\\u0783\\u07a9\\u078d\\u07aa\",\"\\u0789\\u07ad\",\"\\u0796\\u07ab\\u0782\\u07b0\",\"\\u0796\\u07aa\\u078d\\u07a6\\u0787\\u07a8\",\"\\u0787\\u07af\\u078e\\u07a6\\u0790\\u07b0\\u0793\\u07aa\",\"\\u0790\\u07ac\\u0795\\u07b0\\u0793\\u07ac\\u0789\\u07b0\\u0784\\u07a6\\u0783\\u07aa\",\"\\u0787\\u07ae\\u0786\\u07b0\\u0793\\u07af\\u0784\\u07a6\\u0783\\u07aa\",\"\\u0782\\u07ae\\u0788\\u07ac\\u0789\\u07b0\\u0784\\u07a6\\u0783\\u07aa\",\"\\u0791\\u07a8\\u0790\\u07ac\\u0789\\u07b0\\u0784\\u07a6\\u0783\\u07aa\"],n=[\"\\u0787\\u07a7\\u078b\\u07a8\\u0787\\u07b0\\u078c\\u07a6\",\"\\u0780\\u07af\\u0789\\u07a6\",\"\\u0787\\u07a6\\u0782\\u07b0\\u078e\\u07a7\\u0783\\u07a6\",\"\\u0784\\u07aa\\u078b\\u07a6\",\"\\u0784\\u07aa\\u0783\\u07a7\\u0790\\u07b0\\u078a\\u07a6\\u078c\\u07a8\",\"\\u0780\\u07aa\\u0786\\u07aa\\u0783\\u07aa\",\"\\u0780\\u07ae\\u0782\\u07a8\\u0780\\u07a8\\u0783\\u07aa\"];t.defineLocale(\"dv\",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:\"\\u0787\\u07a7\\u078b\\u07a8_\\u0780\\u07af\\u0789\\u07a6_\\u0787\\u07a6\\u0782\\u07b0_\\u0784\\u07aa\\u078b\\u07a6_\\u0784\\u07aa\\u0783\\u07a7_\\u0780\\u07aa\\u0786\\u07aa_\\u0780\\u07ae\\u0782\\u07a8\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"D/M/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/\\u0789\\u0786|\\u0789\\u078a/,isPM:function(t){return\"\\u0789\\u078a\"===t},meridiem:function(t,e,n){return t<12?\"\\u0789\\u0786\":\"\\u0789\\u078a\"},calendar:{sameDay:\"[\\u0789\\u07a8\\u0787\\u07a6\\u078b\\u07aa] LT\",nextDay:\"[\\u0789\\u07a7\\u078b\\u07a6\\u0789\\u07a7] LT\",nextWeek:\"dddd LT\",lastDay:\"[\\u0787\\u07a8\\u0787\\u07b0\\u0794\\u07ac] LT\",lastWeek:\"[\\u078a\\u07a7\\u0787\\u07a8\\u078c\\u07aa\\u0788\\u07a8] dddd LT\",sameElse:\"L\"},relativeTime:{future:\"\\u078c\\u07ac\\u0783\\u07ad\\u078e\\u07a6\\u0787\\u07a8 %s\",past:\"\\u0786\\u07aa\\u0783\\u07a8\\u0782\\u07b0 %s\",s:\"\\u0790\\u07a8\\u0786\\u07aa\\u0782\\u07b0\\u078c\\u07aa\\u0786\\u07ae\\u0785\\u07ac\\u0787\\u07b0\",ss:\"d% \\u0790\\u07a8\\u0786\\u07aa\\u0782\\u07b0\\u078c\\u07aa\",m:\"\\u0789\\u07a8\\u0782\\u07a8\\u0793\\u07ac\\u0787\\u07b0\",mm:\"\\u0789\\u07a8\\u0782\\u07a8\\u0793\\u07aa %d\",h:\"\\u078e\\u07a6\\u0791\\u07a8\\u0787\\u07a8\\u0783\\u07ac\\u0787\\u07b0\",hh:\"\\u078e\\u07a6\\u0791\\u07a8\\u0787\\u07a8\\u0783\\u07aa %d\",d:\"\\u078b\\u07aa\\u0788\\u07a6\\u0780\\u07ac\\u0787\\u07b0\",dd:\"\\u078b\\u07aa\\u0788\\u07a6\\u0790\\u07b0 %d\",M:\"\\u0789\\u07a6\\u0780\\u07ac\\u0787\\u07b0\",MM:\"\\u0789\\u07a6\\u0790\\u07b0 %d\",y:\"\\u0787\\u07a6\\u0780\\u07a6\\u0783\\u07ac\\u0787\\u07b0\",yy:\"\\u0787\\u07a6\\u0780\\u07a6\\u0783\\u07aa %d\"},preparse:function(t){return t.replace(/\\u060c/g,\",\")},postformat:function(t){return t.replace(/,/g,\"\\u060c\")},week:{dow:7,doy:12}})}(n(\"wd/R\"))},Wp6s:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return u})),n.d(e,\"b\",(function(){return c})),n.d(e,\"c\",(function(){return l})),n.d(e,\"d\",(function(){return h}));var r=n(\"R1ws\"),i=n(\"FKr1\"),a=n(\"fXoL\");const o=[\"*\",[[\"mat-card-footer\"]]],s=[\"*\",\"mat-card-footer\"];let l=(()=>{class t{}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275dir=a.Sb({type:t,selectors:[[\"mat-card-content\"],[\"\",\"mat-card-content\",\"\"],[\"\",\"matCardContent\",\"\"]],hostAttrs:[1,\"mat-card-content\"]}),t})(),c=(()=>{class t{constructor(){this.align=\"start\"}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275dir=a.Sb({type:t,selectors:[[\"mat-card-actions\"]],hostAttrs:[1,\"mat-card-actions\"],hostVars:2,hostBindings:function(t,e){2&t&&a.Pb(\"mat-card-actions-align-end\",\"end\"===e.align)},inputs:{align:\"align\"},exportAs:[\"matCardActions\"]}),t})(),u=(()=>{class t{constructor(t){this._animationMode=t}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(r.a,8))},t.\\u0275cmp=a.Rb({type:t,selectors:[[\"mat-card\"]],hostAttrs:[1,\"mat-card\",\"mat-focus-indicator\"],hostVars:2,hostBindings:function(t,e){2&t&&a.Pb(\"_mat-animation-noopable\",\"NoopAnimations\"===e._animationMode)},exportAs:[\"matCard\"],ngContentSelectors:s,decls:2,vars:0,template:function(t,e){1&t&&(a.uc(o),a.tc(0),a.tc(1,1))},styles:[\".mat-card{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);display:block;position:relative;padding:16px;border-radius:4px}._mat-animation-noopable.mat-card{transition:none;animation:none}.mat-card .mat-divider-horizontal{position:absolute;left:0;width:100%}[dir=rtl] .mat-card .mat-divider-horizontal{left:auto;right:0}.mat-card .mat-divider-horizontal.mat-divider-inset{position:static;margin:0}[dir=rtl] .mat-card .mat-divider-horizontal.mat-divider-inset{margin-right:0}.cdk-high-contrast-active .mat-card{outline:solid 1px}.mat-card-actions,.mat-card-subtitle,.mat-card-content{display:block;margin-bottom:16px}.mat-card-title{display:block;margin-bottom:8px}.mat-card-actions{margin-left:-8px;margin-right:-8px;padding:8px 0}.mat-card-actions-align-end{display:flex;justify-content:flex-end}.mat-card-image{width:calc(100% + 32px);margin:0 -16px 16px -16px}.mat-card-footer{display:block;margin:0 -16px -16px -16px}.mat-card-actions .mat-button,.mat-card-actions .mat-raised-button,.mat-card-actions .mat-stroked-button{margin:0 8px}.mat-card-header{display:flex;flex-direction:row}.mat-card-header .mat-card-title{margin-bottom:12px}.mat-card-header-text{margin:0 16px}.mat-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0;object-fit:cover}.mat-card-title-group{display:flex;justify-content:space-between}.mat-card-sm-image{width:80px;height:80px}.mat-card-md-image{width:112px;height:112px}.mat-card-lg-image{width:152px;height:152px}.mat-card-xl-image{width:240px;height:240px;margin:-8px}.mat-card-title-group>.mat-card-xl-image{margin:-8px 0 8px}@media(max-width: 599px){.mat-card-title-group{margin:0}.mat-card-xl-image{margin-left:0;margin-right:0}}.mat-card>:first-child,.mat-card-content>:first-child{margin-top:0}.mat-card>:last-child:not(.mat-card-footer),.mat-card-content>:last-child:not(.mat-card-footer){margin-bottom:0}.mat-card-image:first-child{margin-top:-16px;border-top-left-radius:inherit;border-top-right-radius:inherit}.mat-card>.mat-card-actions:last-child{margin-bottom:-8px;padding-bottom:0}.mat-card-actions .mat-button:first-child,.mat-card-actions .mat-raised-button:first-child,.mat-card-actions .mat-stroked-button:first-child{margin-left:0;margin-right:0}.mat-card-title:not(:first-child),.mat-card-subtitle:not(:first-child){margin-top:-4px}.mat-card-header .mat-card-subtitle:not(:first-child){margin-top:-8px}.mat-card>.mat-card-xl-image:first-child{margin-top:-8px}.mat-card>.mat-card-xl-image:last-child{margin-bottom:-8px}\\n\"],encapsulation:2,changeDetection:0}),t})(),h=(()=>{class t{}return t.\\u0275mod=a.Vb({type:t}),t.\\u0275inj=a.Ub({factory:function(e){return new(e||t)},imports:[[i.i],i.i]}),t})()},Wv91:function(t,e,n){!function(t){\"use strict\";var e={1:\"'inji\",5:\"'inji\",8:\"'inji\",70:\"'inji\",80:\"'inji\",2:\"'nji\",7:\"'nji\",20:\"'nji\",50:\"'nji\",3:\"'\\xfcnji\",4:\"'\\xfcnji\",100:\"'\\xfcnji\",6:\"'njy\",9:\"'unjy\",10:\"'unjy\",30:\"'unjy\",60:\"'ynjy\",90:\"'ynjy\"};t.defineLocale(\"tk\",{months:\"\\xddanwar_Fewral_Mart_Aprel_Ma\\xfd_I\\xfdun_I\\xfdul_Awgust_Sent\\xfdabr_Okt\\xfdabr_No\\xfdabr_Dekabr\".split(\"_\"),monthsShort:\"\\xddan_Few_Mar_Apr_Ma\\xfd_I\\xfdn_I\\xfdl_Awg_Sen_Okt_No\\xfd_Dek\".split(\"_\"),weekdays:\"\\xddek\\u015fenbe_Du\\u015fenbe_Si\\u015fenbe_\\xc7ar\\u015fenbe_Pen\\u015fenbe_Anna_\\u015eenbe\".split(\"_\"),weekdaysShort:\"\\xddek_Du\\u015f_Si\\u015f_\\xc7ar_Pen_Ann_\\u015een\".split(\"_\"),weekdaysMin:\"\\xddk_D\\u015f_S\\u015f_\\xc7r_Pn_An_\\u015en\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[bug\\xfcn sagat] LT\",nextDay:\"[ertir sagat] LT\",nextWeek:\"[indiki] dddd [sagat] LT\",lastDay:\"[d\\xfc\\xfdn] LT\",lastWeek:\"[ge\\xe7en] dddd [sagat] LT\",sameElse:\"L\"},relativeTime:{future:\"%s so\\u0148\",past:\"%s \\xf6\\u0148\",s:\"birn\\xe4\\xe7e sekunt\",m:\"bir minut\",mm:\"%d minut\",h:\"bir sagat\",hh:\"%d sagat\",d:\"bir g\\xfcn\",dd:\"%d g\\xfcn\",M:\"bir a\\xfd\",MM:\"%d a\\xfd\",y:\"bir \\xfdyl\",yy:\"%d \\xfdyl\"},ordinal:function(t,n){switch(n){case\"d\":case\"D\":case\"Do\":case\"DD\":return t;default:if(0===t)return t+\"'unjy\";var r=t%10;return t+(e[r]||e[t%100-r]||e[t>=100?100:null])}},week:{dow:1,doy:7}})}(n(\"wd/R\"))},WxRl:function(t,e,n){!function(t){\"use strict\";var e=\"vas\\xe1rnap h\\xe9tf\\u0151n kedden szerd\\xe1n cs\\xfct\\xf6rt\\xf6k\\xf6n p\\xe9nteken szombaton\".split(\" \");function n(t,e,n,r){var i=t;switch(n){case\"s\":return r||e?\"n\\xe9h\\xe1ny m\\xe1sodperc\":\"n\\xe9h\\xe1ny m\\xe1sodperce\";case\"ss\":return i+(r||e)?\" m\\xe1sodperc\":\" m\\xe1sodperce\";case\"m\":return\"egy\"+(r||e?\" perc\":\" perce\");case\"mm\":return i+(r||e?\" perc\":\" perce\");case\"h\":return\"egy\"+(r||e?\" \\xf3ra\":\" \\xf3r\\xe1ja\");case\"hh\":return i+(r||e?\" \\xf3ra\":\" \\xf3r\\xe1ja\");case\"d\":return\"egy\"+(r||e?\" nap\":\" napja\");case\"dd\":return i+(r||e?\" nap\":\" napja\");case\"M\":return\"egy\"+(r||e?\" h\\xf3nap\":\" h\\xf3napja\");case\"MM\":return i+(r||e?\" h\\xf3nap\":\" h\\xf3napja\");case\"y\":return\"egy\"+(r||e?\" \\xe9v\":\" \\xe9ve\");case\"yy\":return i+(r||e?\" \\xe9v\":\" \\xe9ve\")}return\"\"}function r(t){return(t?\"\":\"[m\\xfalt] \")+\"[\"+e[this.day()]+\"] LT[-kor]\"}t.defineLocale(\"hu\",{months:\"janu\\xe1r_febru\\xe1r_m\\xe1rcius_\\xe1prilis_m\\xe1jus_j\\xfanius_j\\xfalius_augusztus_szeptember_okt\\xf3ber_november_december\".split(\"_\"),monthsShort:\"jan._feb._m\\xe1rc._\\xe1pr._m\\xe1j._j\\xfan._j\\xfal._aug._szept._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"vas\\xe1rnap_h\\xe9tf\\u0151_kedd_szerda_cs\\xfct\\xf6rt\\xf6k_p\\xe9ntek_szombat\".split(\"_\"),weekdaysShort:\"vas_h\\xe9t_kedd_sze_cs\\xfct_p\\xe9n_szo\".split(\"_\"),weekdaysMin:\"v_h_k_sze_cs_p_szo\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"YYYY.MM.DD.\",LL:\"YYYY. MMMM D.\",LLL:\"YYYY. MMMM D. H:mm\",LLLL:\"YYYY. MMMM D., dddd H:mm\"},meridiemParse:/de|du/i,isPM:function(t){return\"u\"===t.charAt(1).toLowerCase()},meridiem:function(t,e,n){return t<12?!0===n?\"de\":\"DE\":!0===n?\"du\":\"DU\"},calendar:{sameDay:\"[ma] LT[-kor]\",nextDay:\"[holnap] LT[-kor]\",nextWeek:function(){return r.call(this,!0)},lastDay:\"[tegnap] LT[-kor]\",lastWeek:function(){return r.call(this,!1)},sameElse:\"L\"},relativeTime:{future:\"%s m\\xfalva\",past:\"%s\",s:n,ss:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},X709:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"sv\",{months:\"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),weekdays:\"s\\xf6ndag_m\\xe5ndag_tisdag_onsdag_torsdag_fredag_l\\xf6rdag\".split(\"_\"),weekdaysShort:\"s\\xf6n_m\\xe5n_tis_ons_tor_fre_l\\xf6r\".split(\"_\"),weekdaysMin:\"s\\xf6_m\\xe5_ti_on_to_fr_l\\xf6\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [kl.] HH:mm\",LLLL:\"dddd D MMMM YYYY [kl.] HH:mm\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd D MMM YYYY HH:mm\"},calendar:{sameDay:\"[Idag] LT\",nextDay:\"[Imorgon] LT\",lastDay:\"[Ig\\xe5r] LT\",nextWeek:\"[P\\xe5] dddd LT\",lastWeek:\"[I] dddd[s] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"f\\xf6r %s sedan\",s:\"n\\xe5gra sekunder\",ss:\"%d sekunder\",m:\"en minut\",mm:\"%d minuter\",h:\"en timme\",hh:\"%d timmar\",d:\"en dag\",dd:\"%d dagar\",M:\"en m\\xe5nad\",MM:\"%d m\\xe5nader\",y:\"ett \\xe5r\",yy:\"%d \\xe5r\"},dayOfMonthOrdinalParse:/\\d{1,2}(\\:e|\\:a)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?\":e\":1===e||2===e?\":a\":\":e\")},week:{dow:1,doy:4}})}(n(\"wd/R\"))},XDbj:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return a}));var r=n(\"sVev\"),i=n(\"7o/Q\");function a(t=l){return e=>e.lift(new o(t))}class o{constructor(t){this.errorFactory=t}call(t,e){return e.subscribe(new s(t,this.errorFactory))}}class s extends i.a{constructor(t,e){super(t),this.errorFactory=e,this.hasValue=!1}_next(t){this.hasValue=!0,this.destination.next(t)}_complete(){if(this.hasValue)return this.destination.complete();{let e;try{e=this.errorFactory()}catch(t){e=t}this.destination.error(e)}}}function l(){return new r.a}},XDpg:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"zh-cn\",{months:\"\\u4e00\\u6708_\\u4e8c\\u6708_\\u4e09\\u6708_\\u56db\\u6708_\\u4e94\\u6708_\\u516d\\u6708_\\u4e03\\u6708_\\u516b\\u6708_\\u4e5d\\u6708_\\u5341\\u6708_\\u5341\\u4e00\\u6708_\\u5341\\u4e8c\\u6708\".split(\"_\"),monthsShort:\"1\\u6708_2\\u6708_3\\u6708_4\\u6708_5\\u6708_6\\u6708_7\\u6708_8\\u6708_9\\u6708_10\\u6708_11\\u6708_12\\u6708\".split(\"_\"),weekdays:\"\\u661f\\u671f\\u65e5_\\u661f\\u671f\\u4e00_\\u661f\\u671f\\u4e8c_\\u661f\\u671f\\u4e09_\\u661f\\u671f\\u56db_\\u661f\\u671f\\u4e94_\\u661f\\u671f\\u516d\".split(\"_\"),weekdaysShort:\"\\u5468\\u65e5_\\u5468\\u4e00_\\u5468\\u4e8c_\\u5468\\u4e09_\\u5468\\u56db_\\u5468\\u4e94_\\u5468\\u516d\".split(\"_\"),weekdaysMin:\"\\u65e5_\\u4e00_\\u4e8c_\\u4e09_\\u56db_\\u4e94_\\u516d\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY\\u5e74M\\u6708D\\u65e5\",LLL:\"YYYY\\u5e74M\\u6708D\\u65e5Ah\\u70b9mm\\u5206\",LLLL:\"YYYY\\u5e74M\\u6708D\\u65e5ddddAh\\u70b9mm\\u5206\",l:\"YYYY/M/D\",ll:\"YYYY\\u5e74M\\u6708D\\u65e5\",lll:\"YYYY\\u5e74M\\u6708D\\u65e5 HH:mm\",llll:\"YYYY\\u5e74M\\u6708D\\u65e5dddd HH:mm\"},meridiemParse:/\\u51cc\\u6668|\\u65e9\\u4e0a|\\u4e0a\\u5348|\\u4e2d\\u5348|\\u4e0b\\u5348|\\u665a\\u4e0a/,meridiemHour:function(t,e){return 12===t&&(t=0),\"\\u51cc\\u6668\"===e||\"\\u65e9\\u4e0a\"===e||\"\\u4e0a\\u5348\"===e?t:\"\\u4e0b\\u5348\"===e||\"\\u665a\\u4e0a\"===e?t+12:t>=11?t:t+12},meridiem:function(t,e,n){var r=100*t+e;return r<600?\"\\u51cc\\u6668\":r<900?\"\\u65e9\\u4e0a\":r<1130?\"\\u4e0a\\u5348\":r<1230?\"\\u4e2d\\u5348\":r<1800?\"\\u4e0b\\u5348\":\"\\u665a\\u4e0a\"},calendar:{sameDay:\"[\\u4eca\\u5929]LT\",nextDay:\"[\\u660e\\u5929]LT\",nextWeek:function(t){return t.week()!==this.week()?\"[\\u4e0b]dddLT\":\"[\\u672c]dddLT\"},lastDay:\"[\\u6628\\u5929]LT\",lastWeek:function(t){return this.week()!==t.week()?\"[\\u4e0a]dddLT\":\"[\\u672c]dddLT\"},sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}(\\u65e5|\\u6708|\\u5468)/,ordinal:function(t,e){switch(e){case\"d\":case\"D\":case\"DDD\":return t+\"\\u65e5\";case\"M\":return t+\"\\u6708\";case\"w\":case\"W\":return t+\"\\u5468\";default:return t}},relativeTime:{future:\"%s\\u540e\",past:\"%s\\u524d\",s:\"\\u51e0\\u79d2\",ss:\"%d \\u79d2\",m:\"1 \\u5206\\u949f\",mm:\"%d \\u5206\\u949f\",h:\"1 \\u5c0f\\u65f6\",hh:\"%d \\u5c0f\\u65f6\",d:\"1 \\u5929\",dd:\"%d \\u5929\",w:\"1 \\u5468\",ww:\"%d \\u5468\",M:\"1 \\u4e2a\\u6708\",MM:\"%d \\u4e2a\\u6708\",y:\"1 \\u5e74\",yy:\"%d \\u5e74\"},week:{dow:1,doy:4}})}(n(\"wd/R\"))},XLvN:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"te\",{months:\"\\u0c1c\\u0c28\\u0c35\\u0c30\\u0c3f_\\u0c2b\\u0c3f\\u0c2c\\u0c4d\\u0c30\\u0c35\\u0c30\\u0c3f_\\u0c2e\\u0c3e\\u0c30\\u0c4d\\u0c1a\\u0c3f_\\u0c0f\\u0c2a\\u0c4d\\u0c30\\u0c3f\\u0c32\\u0c4d_\\u0c2e\\u0c47_\\u0c1c\\u0c42\\u0c28\\u0c4d_\\u0c1c\\u0c41\\u0c32\\u0c48_\\u0c06\\u0c17\\u0c38\\u0c4d\\u0c1f\\u0c41_\\u0c38\\u0c46\\u0c2a\\u0c4d\\u0c1f\\u0c46\\u0c02\\u0c2c\\u0c30\\u0c4d_\\u0c05\\u0c15\\u0c4d\\u0c1f\\u0c4b\\u0c2c\\u0c30\\u0c4d_\\u0c28\\u0c35\\u0c02\\u0c2c\\u0c30\\u0c4d_\\u0c21\\u0c3f\\u0c38\\u0c46\\u0c02\\u0c2c\\u0c30\\u0c4d\".split(\"_\"),monthsShort:\"\\u0c1c\\u0c28._\\u0c2b\\u0c3f\\u0c2c\\u0c4d\\u0c30._\\u0c2e\\u0c3e\\u0c30\\u0c4d\\u0c1a\\u0c3f_\\u0c0f\\u0c2a\\u0c4d\\u0c30\\u0c3f._\\u0c2e\\u0c47_\\u0c1c\\u0c42\\u0c28\\u0c4d_\\u0c1c\\u0c41\\u0c32\\u0c48_\\u0c06\\u0c17._\\u0c38\\u0c46\\u0c2a\\u0c4d._\\u0c05\\u0c15\\u0c4d\\u0c1f\\u0c4b._\\u0c28\\u0c35._\\u0c21\\u0c3f\\u0c38\\u0c46.\".split(\"_\"),monthsParseExact:!0,weekdays:\"\\u0c06\\u0c26\\u0c3f\\u0c35\\u0c3e\\u0c30\\u0c02_\\u0c38\\u0c4b\\u0c2e\\u0c35\\u0c3e\\u0c30\\u0c02_\\u0c2e\\u0c02\\u0c17\\u0c33\\u0c35\\u0c3e\\u0c30\\u0c02_\\u0c2c\\u0c41\\u0c27\\u0c35\\u0c3e\\u0c30\\u0c02_\\u0c17\\u0c41\\u0c30\\u0c41\\u0c35\\u0c3e\\u0c30\\u0c02_\\u0c36\\u0c41\\u0c15\\u0c4d\\u0c30\\u0c35\\u0c3e\\u0c30\\u0c02_\\u0c36\\u0c28\\u0c3f\\u0c35\\u0c3e\\u0c30\\u0c02\".split(\"_\"),weekdaysShort:\"\\u0c06\\u0c26\\u0c3f_\\u0c38\\u0c4b\\u0c2e_\\u0c2e\\u0c02\\u0c17\\u0c33_\\u0c2c\\u0c41\\u0c27_\\u0c17\\u0c41\\u0c30\\u0c41_\\u0c36\\u0c41\\u0c15\\u0c4d\\u0c30_\\u0c36\\u0c28\\u0c3f\".split(\"_\"),weekdaysMin:\"\\u0c06_\\u0c38\\u0c4b_\\u0c2e\\u0c02_\\u0c2c\\u0c41_\\u0c17\\u0c41_\\u0c36\\u0c41_\\u0c36\".split(\"_\"),longDateFormat:{LT:\"A h:mm\",LTS:\"A h:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm\",LLLL:\"dddd, D MMMM YYYY, A h:mm\"},calendar:{sameDay:\"[\\u0c28\\u0c47\\u0c21\\u0c41] LT\",nextDay:\"[\\u0c30\\u0c47\\u0c2a\\u0c41] LT\",nextWeek:\"dddd, LT\",lastDay:\"[\\u0c28\\u0c3f\\u0c28\\u0c4d\\u0c28] LT\",lastWeek:\"[\\u0c17\\u0c24] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s \\u0c32\\u0c4b\",past:\"%s \\u0c15\\u0c4d\\u0c30\\u0c3f\\u0c24\\u0c02\",s:\"\\u0c15\\u0c4a\\u0c28\\u0c4d\\u0c28\\u0c3f \\u0c15\\u0c4d\\u0c37\\u0c23\\u0c3e\\u0c32\\u0c41\",ss:\"%d \\u0c38\\u0c46\\u0c15\\u0c28\\u0c4d\\u0c32\\u0c41\",m:\"\\u0c12\\u0c15 \\u0c28\\u0c3f\\u0c2e\\u0c3f\\u0c37\\u0c02\",mm:\"%d \\u0c28\\u0c3f\\u0c2e\\u0c3f\\u0c37\\u0c3e\\u0c32\\u0c41\",h:\"\\u0c12\\u0c15 \\u0c17\\u0c02\\u0c1f\",hh:\"%d \\u0c17\\u0c02\\u0c1f\\u0c32\\u0c41\",d:\"\\u0c12\\u0c15 \\u0c30\\u0c4b\\u0c1c\\u0c41\",dd:\"%d \\u0c30\\u0c4b\\u0c1c\\u0c41\\u0c32\\u0c41\",M:\"\\u0c12\\u0c15 \\u0c28\\u0c46\\u0c32\",MM:\"%d \\u0c28\\u0c46\\u0c32\\u0c32\\u0c41\",y:\"\\u0c12\\u0c15 \\u0c38\\u0c02\\u0c35\\u0c24\\u0c4d\\u0c38\\u0c30\\u0c02\",yy:\"%d \\u0c38\\u0c02\\u0c35\\u0c24\\u0c4d\\u0c38\\u0c30\\u0c3e\\u0c32\\u0c41\"},dayOfMonthOrdinalParse:/\\d{1,2}\\u0c35/,ordinal:\"%d\\u0c35\",meridiemParse:/\\u0c30\\u0c3e\\u0c24\\u0c4d\\u0c30\\u0c3f|\\u0c09\\u0c26\\u0c2f\\u0c02|\\u0c2e\\u0c27\\u0c4d\\u0c2f\\u0c3e\\u0c39\\u0c4d\\u0c28\\u0c02|\\u0c38\\u0c3e\\u0c2f\\u0c02\\u0c24\\u0c4d\\u0c30\\u0c02/,meridiemHour:function(t,e){return 12===t&&(t=0),\"\\u0c30\\u0c3e\\u0c24\\u0c4d\\u0c30\\u0c3f\"===e?t<4?t:t+12:\"\\u0c09\\u0c26\\u0c2f\\u0c02\"===e?t:\"\\u0c2e\\u0c27\\u0c4d\\u0c2f\\u0c3e\\u0c39\\u0c4d\\u0c28\\u0c02\"===e?t>=10?t:t+12:\"\\u0c38\\u0c3e\\u0c2f\\u0c02\\u0c24\\u0c4d\\u0c30\\u0c02\"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?\"\\u0c30\\u0c3e\\u0c24\\u0c4d\\u0c30\\u0c3f\":t<10?\"\\u0c09\\u0c26\\u0c2f\\u0c02\":t<17?\"\\u0c2e\\u0c27\\u0c4d\\u0c2f\\u0c3e\\u0c39\\u0c4d\\u0c28\\u0c02\":t<20?\"\\u0c38\\u0c3e\\u0c2f\\u0c02\\u0c24\\u0c4d\\u0c30\\u0c02\":\"\\u0c30\\u0c3e\\u0c24\\u0c4d\\u0c30\\u0c3f\"},week:{dow:0,doy:6}})}(n(\"wd/R\"))},XNiG:function(t,e,n){\"use strict\";n.d(e,\"b\",(function(){return c})),n.d(e,\"a\",(function(){return u}));var r=n(\"HDdC\"),i=n(\"7o/Q\"),a=n(\"quSY\"),o=n(\"9ppp\"),s=n(\"Ylt2\"),l=n(\"2QA8\");class c extends i.a{constructor(t){super(t),this.destination=t}}let u=(()=>{class t extends r.a{constructor(){super(),this.observers=[],this.closed=!1,this.isStopped=!1,this.hasError=!1,this.thrownError=null}[l.a](){return new c(this)}lift(t){const e=new h(this,this);return e.operator=t,e}next(t){if(this.closed)throw new o.a;if(!this.isStopped){const{observers:e}=this,n=e.length,r=e.slice();for(let i=0;i<n;i++)r[i].next(t)}}error(t){if(this.closed)throw new o.a;this.hasError=!0,this.thrownError=t,this.isStopped=!0;const{observers:e}=this,n=e.length,r=e.slice();for(let i=0;i<n;i++)r[i].error(t);this.observers.length=0}complete(){if(this.closed)throw new o.a;this.isStopped=!0;const{observers:t}=this,e=t.length,n=t.slice();for(let r=0;r<e;r++)n[r].complete();this.observers.length=0}unsubscribe(){this.isStopped=!0,this.closed=!0,this.observers=null}_trySubscribe(t){if(this.closed)throw new o.a;return super._trySubscribe(t)}_subscribe(t){if(this.closed)throw new o.a;return this.hasError?(t.error(this.thrownError),a.a.EMPTY):this.isStopped?(t.complete(),a.a.EMPTY):(this.observers.push(t),new s.a(this,t))}asObservable(){const t=new r.a;return t.source=this,t}}return t.create=(t,e)=>new h(t,e),t})();class h extends u{constructor(t,e){super(),this.destination=t,this.source=e}next(t){const{destination:e}=this;e&&e.next&&e.next(t)}error(t){const{destination:e}=this;e&&e.error&&this.destination.error(t)}complete(){const{destination:t}=this;t&&t.complete&&this.destination.complete()}_subscribe(t){const{source:e}=this;return e?this.source.subscribe(t):a.a.EMPTY}}},Xa2L:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return _})),n.d(e,\"b\",(function(){return v}));var r=n(\"fXoL\"),i=n(\"ofXK\"),a=n(\"FKr1\"),o=n(\"8LU1\"),s=n(\"nLfN\"),l=n(\"R1ws\");function c(t,e){if(1&t&&(r.oc(),r.Yb(0,\"circle\",3)),2&t){const t=r.pc();r.Jc(\"animation-name\",\"mat-progress-spinner-stroke-rotate-\"+t._spinnerAnimationLabel)(\"stroke-dashoffset\",t._getStrokeDashOffset(),\"px\")(\"stroke-dasharray\",t._getStrokeCircumference(),\"px\")(\"stroke-width\",t._getCircleStrokeWidth(),\"%\"),r.Mb(\"r\",t._getCircleRadius())}}function u(t,e){if(1&t&&(r.oc(),r.Yb(0,\"circle\",3)),2&t){const t=r.pc();r.Jc(\"stroke-dashoffset\",t._getStrokeDashOffset(),\"px\")(\"stroke-dasharray\",t._getStrokeCircumference(),\"px\")(\"stroke-width\",t._getCircleStrokeWidth(),\"%\"),r.Mb(\"r\",t._getCircleRadius())}}function h(t,e){if(1&t&&(r.oc(),r.Yb(0,\"circle\",3)),2&t){const t=r.pc();r.Jc(\"animation-name\",\"mat-progress-spinner-stroke-rotate-\"+t._spinnerAnimationLabel)(\"stroke-dashoffset\",t._getStrokeDashOffset(),\"px\")(\"stroke-dasharray\",t._getStrokeCircumference(),\"px\")(\"stroke-width\",t._getCircleStrokeWidth(),\"%\"),r.Mb(\"r\",t._getCircleRadius())}}function d(t,e){if(1&t&&(r.oc(),r.Yb(0,\"circle\",3)),2&t){const t=r.pc();r.Jc(\"stroke-dashoffset\",t._getStrokeDashOffset(),\"px\")(\"stroke-dasharray\",t._getStrokeCircumference(),\"px\")(\"stroke-width\",t._getCircleStrokeWidth(),\"%\"),r.Mb(\"r\",t._getCircleRadius())}}const f=\".mat-progress-spinner{display:block;position:relative;overflow:hidden}.mat-progress-spinner svg{position:absolute;transform:rotate(-90deg);top:0;left:0;transform-origin:center;overflow:visible}.mat-progress-spinner circle{fill:transparent;transform-origin:center;transition:stroke-dashoffset 225ms linear}._mat-animation-noopable.mat-progress-spinner circle{transition:none;animation:none}.cdk-high-contrast-active .mat-progress-spinner circle{stroke:currentColor}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] svg{animation:mat-progress-spinner-linear-rotate 2000ms linear infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] svg{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition-property:stroke;animation-duration:4000ms;animation-timing-function:cubic-bezier(0.35, 0, 0.25, 1);animation-iteration-count:infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] svg{animation:mat-progress-spinner-stroke-rotate-fallback 10000ms cubic-bezier(0.87, 0.03, 0.33, 1) infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] svg{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] circle{transition-property:stroke}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] circle{transition:none;animation:none}@keyframes mat-progress-spinner-linear-rotate{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes mat-progress-spinner-stroke-rotate-100{0%{stroke-dashoffset:268.606171575px;transform:rotate(0)}12.5%{stroke-dashoffset:56.5486677px;transform:rotate(0)}12.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(72.5deg)}25%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(72.5deg)}25.0001%{stroke-dashoffset:268.606171575px;transform:rotate(270deg)}37.5%{stroke-dashoffset:56.5486677px;transform:rotate(270deg)}37.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(161.5deg)}50%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(161.5deg)}50.0001%{stroke-dashoffset:268.606171575px;transform:rotate(180deg)}62.5%{stroke-dashoffset:56.5486677px;transform:rotate(180deg)}62.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(251.5deg)}75%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(251.5deg)}75.0001%{stroke-dashoffset:268.606171575px;transform:rotate(90deg)}87.5%{stroke-dashoffset:56.5486677px;transform:rotate(90deg)}87.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(341.5deg)}100%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(341.5deg)}}@keyframes mat-progress-spinner-stroke-rotate-fallback{0%{transform:rotate(0deg)}25%{transform:rotate(1170deg)}50%{transform:rotate(2340deg)}75%{transform:rotate(3510deg)}100%{transform:rotate(4680deg)}}\\n\";class p{constructor(t){this._elementRef=t}}const m=Object(a.w)(p,\"primary\"),g=new r.w(\"mat-progress-spinner-default-options\",{providedIn:\"root\",factory:function(){return{diameter:100}}});let y=(()=>{class t extends m{constructor(e,n,r,i,a){super(e),this._elementRef=e,this._document=r,this._diameter=100,this._value=0,this._fallbackAnimation=!1,this.mode=\"determinate\";const o=t._diameters;this._spinnerAnimationLabel=this._getSpinnerAnimationLabel(),o.has(r.head)||o.set(r.head,new Set([100])),this._fallbackAnimation=n.EDGE||n.TRIDENT,this._noopAnimations=\"NoopAnimations\"===i&&!!a&&!a._forceAnimations,a&&(a.diameter&&(this.diameter=a.diameter),a.strokeWidth&&(this.strokeWidth=a.strokeWidth))}get diameter(){return this._diameter}set diameter(t){this._diameter=Object(o.f)(t),this._spinnerAnimationLabel=this._getSpinnerAnimationLabel(),!this._fallbackAnimation&&this._styleRoot&&this._attachStyleNode()}get strokeWidth(){return this._strokeWidth||this.diameter/10}set strokeWidth(t){this._strokeWidth=Object(o.f)(t)}get value(){return\"determinate\"===this.mode?this._value:0}set value(t){this._value=Math.max(0,Math.min(100,Object(o.f)(t)))}ngOnInit(){const t=this._elementRef.nativeElement;this._styleRoot=Object(s.c)(t)||this._document.head,this._attachStyleNode(),t.classList.add(`mat-progress-spinner-indeterminate${this._fallbackAnimation?\"-fallback\":\"\"}-animation`)}_getCircleRadius(){return(this.diameter-10)/2}_getViewBox(){const t=2*this._getCircleRadius()+this.strokeWidth;return`0 0 ${t} ${t}`}_getStrokeCircumference(){return 2*Math.PI*this._getCircleRadius()}_getStrokeDashOffset(){return\"determinate\"===this.mode?this._getStrokeCircumference()*(100-this._value)/100:this._fallbackAnimation&&\"indeterminate\"===this.mode?.2*this._getStrokeCircumference():null}_getCircleStrokeWidth(){return this.strokeWidth/this.diameter*100}_attachStyleNode(){const e=this._styleRoot,n=this._diameter,r=t._diameters;let i=r.get(e);if(!i||!i.has(n)){const t=this._document.createElement(\"style\");t.setAttribute(\"mat-spinner-animation\",this._spinnerAnimationLabel),t.textContent=this._getAnimationText(),e.appendChild(t),i||(i=new Set,r.set(e,i)),i.add(n)}}_getAnimationText(){const t=this._getStrokeCircumference();return\"\\n @keyframes mat-progress-spinner-stroke-rotate-DIAMETER {\\n    0%      { stroke-dashoffset: START_VALUE;  transform: rotate(0); }\\n    12.5%   { stroke-dashoffset: END_VALUE;    transform: rotate(0); }\\n    12.5001%  { stroke-dashoffset: END_VALUE;    transform: rotateX(180deg) rotate(72.5deg); }\\n    25%     { stroke-dashoffset: START_VALUE;  transform: rotateX(180deg) rotate(72.5deg); }\\n\\n    25.0001%   { stroke-dashoffset: START_VALUE;  transform: rotate(270deg); }\\n    37.5%   { stroke-dashoffset: END_VALUE;    transform: rotate(270deg); }\\n    37.5001%  { stroke-dashoffset: END_VALUE;    transform: rotateX(180deg) rotate(161.5deg); }\\n    50%     { stroke-dashoffset: START_VALUE;  transform: rotateX(180deg) rotate(161.5deg); }\\n\\n    50.0001%  { stroke-dashoffset: START_VALUE;  transform: rotate(180deg); }\\n    62.5%   { stroke-dashoffset: END_VALUE;    transform: rotate(180deg); }\\n    62.5001%  { stroke-dashoffset: END_VALUE;    transform: rotateX(180deg) rotate(251.5deg); }\\n    75%     { stroke-dashoffset: START_VALUE;  transform: rotateX(180deg) rotate(251.5deg); }\\n\\n    75.0001%  { stroke-dashoffset: START_VALUE;  transform: rotate(90deg); }\\n    87.5%   { stroke-dashoffset: END_VALUE;    transform: rotate(90deg); }\\n    87.5001%  { stroke-dashoffset: END_VALUE;    transform: rotateX(180deg) rotate(341.5deg); }\\n    100%    { stroke-dashoffset: START_VALUE;  transform: rotateX(180deg) rotate(341.5deg); }\\n  }\\n\".replace(/START_VALUE/g,\"\"+.95*t).replace(/END_VALUE/g,\"\"+.2*t).replace(/DIAMETER/g,\"\"+this._spinnerAnimationLabel)}_getSpinnerAnimationLabel(){return this.diameter.toString().replace(\".\",\"_\")}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.p),r.Xb(s.a),r.Xb(i.d,8),r.Xb(l.a,8),r.Xb(g))},t.\\u0275cmp=r.Rb({type:t,selectors:[[\"mat-progress-spinner\"]],hostAttrs:[\"role\",\"progressbar\",1,\"mat-progress-spinner\"],hostVars:10,hostBindings:function(t,e){2&t&&(r.Mb(\"aria-valuemin\",\"determinate\"===e.mode?0:null)(\"aria-valuemax\",\"determinate\"===e.mode?100:null)(\"aria-valuenow\",\"determinate\"===e.mode?e.value:null)(\"mode\",e.mode),r.Jc(\"width\",e.diameter,\"px\")(\"height\",e.diameter,\"px\"),r.Pb(\"_mat-animation-noopable\",e._noopAnimations))},inputs:{color:\"color\",mode:\"mode\",diameter:\"diameter\",strokeWidth:\"strokeWidth\",value:\"value\"},exportAs:[\"matProgressSpinner\"],features:[r.Ib],decls:3,vars:8,consts:[[\"preserveAspectRatio\",\"xMidYMid meet\",\"focusable\",\"false\",3,\"ngSwitch\"],[\"cx\",\"50%\",\"cy\",\"50%\",3,\"animation-name\",\"stroke-dashoffset\",\"stroke-dasharray\",\"stroke-width\",4,\"ngSwitchCase\"],[\"cx\",\"50%\",\"cy\",\"50%\",3,\"stroke-dashoffset\",\"stroke-dasharray\",\"stroke-width\",4,\"ngSwitchCase\"],[\"cx\",\"50%\",\"cy\",\"50%\"]],template:function(t,e){1&t&&(r.oc(),r.dc(0,\"svg\",0),r.Mc(1,c,1,9,\"circle\",1),r.Mc(2,u,1,7,\"circle\",2),r.cc()),2&t&&(r.Jc(\"width\",e.diameter,\"px\")(\"height\",e.diameter,\"px\"),r.vc(\"ngSwitch\",\"indeterminate\"===e.mode),r.Mb(\"viewBox\",e._getViewBox()),r.Lb(1),r.vc(\"ngSwitchCase\",!0),r.Lb(1),r.vc(\"ngSwitchCase\",!1))},directives:[i.q,i.r],styles:[f],encapsulation:2,changeDetection:0}),t._diameters=new WeakMap,t})(),v=(()=>{class t extends y{constructor(t,e,n,r,i){super(t,e,n,r,i),this.mode=\"indeterminate\"}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.p),r.Xb(s.a),r.Xb(i.d,8),r.Xb(l.a,8),r.Xb(g))},t.\\u0275cmp=r.Rb({type:t,selectors:[[\"mat-spinner\"]],hostAttrs:[\"role\",\"progressbar\",\"mode\",\"indeterminate\",1,\"mat-spinner\",\"mat-progress-spinner\"],hostVars:6,hostBindings:function(t,e){2&t&&(r.Jc(\"width\",e.diameter,\"px\")(\"height\",e.diameter,\"px\"),r.Pb(\"_mat-animation-noopable\",e._noopAnimations))},inputs:{color:\"color\"},features:[r.Ib],decls:3,vars:8,consts:[[\"preserveAspectRatio\",\"xMidYMid meet\",\"focusable\",\"false\",3,\"ngSwitch\"],[\"cx\",\"50%\",\"cy\",\"50%\",3,\"animation-name\",\"stroke-dashoffset\",\"stroke-dasharray\",\"stroke-width\",4,\"ngSwitchCase\"],[\"cx\",\"50%\",\"cy\",\"50%\",3,\"stroke-dashoffset\",\"stroke-dasharray\",\"stroke-width\",4,\"ngSwitchCase\"],[\"cx\",\"50%\",\"cy\",\"50%\"]],template:function(t,e){1&t&&(r.oc(),r.dc(0,\"svg\",0),r.Mc(1,h,1,9,\"circle\",1),r.Mc(2,d,1,7,\"circle\",2),r.cc()),2&t&&(r.Jc(\"width\",e.diameter,\"px\")(\"height\",e.diameter,\"px\"),r.vc(\"ngSwitch\",\"indeterminate\"===e.mode),r.Mb(\"viewBox\",e._getViewBox()),r.Lb(1),r.vc(\"ngSwitchCase\",!0),r.Lb(1),r.vc(\"ngSwitchCase\",!1))},directives:[i.q,i.r],styles:[f],encapsulation:2,changeDetection:0}),t})(),_=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},imports:[[a.i,i.c],a.i]}),t})()},XhcP:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return H})),n.d(e,\"b\",(function(){return V})),n.d(e,\"c\",(function(){return Y})),n.d(e,\"d\",(function(){return G})),n.d(e,\"e\",(function(){return Z}));var r=n(\"nLfN\"),i=n(\"vxfF\"),a=n(\"ofXK\"),o=n(\"fXoL\"),s=n(\"FKr1\"),l=n(\"8LU1\"),c=n(\"FtGj\"),u=n(\"XNiG\"),h=n(\"xgIS\"),d=n(\"VRyK\"),f=n(\"pLZG\"),p=n(\"lJxs\"),m=n(\"7o/Q\");function g(t){return e=>e.lift(new y(t))}class y{constructor(t){this.value=t}call(t,e){return e.subscribe(new v(t,this.value))}}class v extends m.a{constructor(t,e){super(t),this.value=e}_next(t){this.destination.next(this.value)}}var _=n(\"1G5W\"),b=n(\"/uUt\"),x=n(\"IzEk\"),w=n(\"JX91\"),k=n(\"Kj3r\"),M=n(\"R0Ic\"),T=n(\"R1ws\"),S=n(\"u47x\"),A=n(\"cH1L\");const L=[\"*\"];function C(t,e){if(1&t){const t=o.ec();o.dc(0,\"div\",2),o.lc(\"click\",(function(){return o.Ec(t),o.pc()._onBackdropClicked()})),o.cc()}if(2&t){const t=o.pc();o.Pb(\"mat-drawer-shown\",t._isShowingBackdrop())}}function E(t,e){1&t&&(o.dc(0,\"mat-drawer-content\"),o.tc(1,2),o.cc())}const O=[[[\"mat-drawer\"]],[[\"mat-drawer-content\"]],\"*\"],D=[\"mat-drawer\",\"mat-drawer-content\",\"*\"];function I(t,e){if(1&t){const t=o.ec();o.dc(0,\"div\",2),o.lc(\"click\",(function(){return o.Ec(t),o.pc()._onBackdropClicked()})),o.cc()}if(2&t){const t=o.pc();o.Pb(\"mat-drawer-shown\",t._isShowingBackdrop())}}function P(t,e){1&t&&(o.dc(0,\"mat-sidenav-content\",3),o.tc(1,2),o.cc())}const R=[[[\"mat-sidenav\"]],[[\"mat-sidenav-content\"]],\"*\"],z=[\"mat-sidenav\",\"mat-sidenav-content\",\"*\"],j=\".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\\n\",F={transformDrawer:Object(M.m)(\"transform\",[Object(M.j)(\"open, open-instant\",Object(M.k)({transform:\"none\",visibility:\"visible\"})),Object(M.j)(\"void\",Object(M.k)({\"box-shadow\":\"none\",visibility:\"hidden\"})),Object(M.l)(\"void => open-instant\",Object(M.e)(\"0ms\")),Object(M.l)(\"void <=> open, open-instant => void\",Object(M.e)(\"400ms cubic-bezier(0.25, 0.8, 0.25, 1)\"))])},N=new o.w(\"MAT_DRAWER_DEFAULT_AUTOSIZE\",{providedIn:\"root\",factory:function(){return!1}}),B=new o.w(\"MAT_DRAWER_CONTAINER\");let Y=(()=>{class t extends i.a{constructor(t,e,n,r,i){super(n,r,i),this._changeDetectorRef=t,this._container=e}ngAfterContentInit(){this._container._contentMarginChanges.subscribe(()=>{this._changeDetectorRef.markForCheck()})}}return t.\\u0275fac=function(e){return new(e||t)(o.Xb(o.j),o.Xb(Object(o.db)(()=>V)),o.Xb(o.p),o.Xb(i.c),o.Xb(o.H))},t.\\u0275cmp=o.Rb({type:t,selectors:[[\"mat-drawer-content\"]],hostAttrs:[1,\"mat-drawer-content\"],hostVars:4,hostBindings:function(t,e){2&t&&o.Jc(\"margin-left\",e._container._contentMargins.left,\"px\")(\"margin-right\",e._container._contentMargins.right,\"px\")},features:[o.Ib],ngContentSelectors:L,decls:1,vars:0,template:function(t,e){1&t&&(o.uc(),o.tc(0))},encapsulation:2,changeDetection:0}),t})(),H=(()=>{class t{constructor(t,e,n,r,i,a,s){this._elementRef=t,this._focusTrapFactory=e,this._focusMonitor=n,this._platform=r,this._ngZone=i,this._doc=a,this._container=s,this._elementFocusedBeforeDrawerWasOpened=null,this._enableAnimations=!1,this._position=\"start\",this._mode=\"over\",this._disableClose=!1,this._opened=!1,this._animationStarted=new u.a,this._animationEnd=new u.a,this._animationState=\"void\",this.openedChange=new o.s(!0),this._openedStream=this.openedChange.pipe(Object(f.a)(t=>t),Object(p.a)(()=>{})),this.openedStart=this._animationStarted.pipe(Object(f.a)(t=>t.fromState!==t.toState&&0===t.toState.indexOf(\"open\")),g(void 0)),this._closedStream=this.openedChange.pipe(Object(f.a)(t=>!t),Object(p.a)(()=>{})),this.closedStart=this._animationStarted.pipe(Object(f.a)(t=>t.fromState!==t.toState&&\"void\"===t.toState),g(void 0)),this._destroyed=new u.a,this.onPositionChanged=new o.s,this._modeChanged=new u.a,this.openedChange.subscribe(t=>{t?(this._doc&&(this._elementFocusedBeforeDrawerWasOpened=this._doc.activeElement),this._takeFocus()):this._isFocusWithinDrawer()&&this._restoreFocus()}),this._ngZone.runOutsideAngular(()=>{Object(h.a)(this._elementRef.nativeElement,\"keydown\").pipe(Object(f.a)(t=>t.keyCode===c.f&&!this.disableClose&&!Object(c.r)(t)),Object(_.a)(this._destroyed)).subscribe(t=>this._ngZone.run(()=>{this.close(),t.stopPropagation(),t.preventDefault()}))}),this._animationEnd.pipe(Object(b.a)((t,e)=>t.fromState===e.fromState&&t.toState===e.toState)).subscribe(t=>{const{fromState:e,toState:n}=t;(0===n.indexOf(\"open\")&&\"void\"===e||\"void\"===n&&0===e.indexOf(\"open\"))&&this.openedChange.emit(this._opened)})}get position(){return this._position}set position(t){(t=\"end\"===t?\"end\":\"start\")!=this._position&&(this._position=t,this.onPositionChanged.emit())}get mode(){return this._mode}set mode(t){this._mode=t,this._updateFocusTrapState(),this._modeChanged.next()}get disableClose(){return this._disableClose}set disableClose(t){this._disableClose=Object(l.c)(t)}get autoFocus(){const t=this._autoFocus;return null==t?\"side\"!==this.mode:t}set autoFocus(t){this._autoFocus=Object(l.c)(t)}get opened(){return this._opened}set opened(t){this.toggle(Object(l.c)(t))}_takeFocus(){this.autoFocus&&this._focusTrap&&this._focusTrap.focusInitialElementWhenReady().then(t=>{t||\"function\"!=typeof this._elementRef.nativeElement.focus||this._elementRef.nativeElement.focus()})}_restoreFocus(){this.autoFocus&&(this._elementFocusedBeforeDrawerWasOpened?this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened,this._openedVia):this._elementRef.nativeElement.blur(),this._elementFocusedBeforeDrawerWasOpened=null,this._openedVia=null)}_isFocusWithinDrawer(){var t;const e=null===(t=this._doc)||void 0===t?void 0:t.activeElement;return!!e&&this._elementRef.nativeElement.contains(e)}ngAfterContentInit(){this._focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement),this._updateFocusTrapState()}ngAfterContentChecked(){this._platform.isBrowser&&(this._enableAnimations=!0)}ngOnDestroy(){this._focusTrap&&this._focusTrap.destroy(),this._animationStarted.complete(),this._animationEnd.complete(),this._modeChanged.complete(),this._destroyed.next(),this._destroyed.complete()}open(t){return this.toggle(!0,t)}close(){return this.toggle(!1)}_closeViaBackdropClick(){return this._setOpen(!1,!0)}toggle(t=!this.opened,e){return this._setOpen(t,!t&&this._isFocusWithinDrawer(),e)}_setOpen(t,e,n=\"program\"){return this._opened=t,t?(this._animationState=this._enableAnimations?\"open\":\"open-instant\",this._openedVia=n):(this._animationState=\"void\",e&&this._restoreFocus()),this._updateFocusTrapState(),new Promise(t=>{this.openedChange.pipe(Object(x.a)(1)).subscribe(e=>t(e?\"open\":\"close\"))})}_getWidth(){return this._elementRef.nativeElement&&this._elementRef.nativeElement.offsetWidth||0}_updateFocusTrapState(){this._focusTrap&&(this._focusTrap.enabled=this.opened&&\"side\"!==this.mode)}_animationStartListener(t){this._animationStarted.next(t)}_animationDoneListener(t){this._animationEnd.next(t)}}return t.\\u0275fac=function(e){return new(e||t)(o.Xb(o.p),o.Xb(S.i),o.Xb(S.h),o.Xb(r.a),o.Xb(o.H),o.Xb(a.d,8),o.Xb(B,8))},t.\\u0275cmp=o.Rb({type:t,selectors:[[\"mat-drawer\"]],hostAttrs:[\"tabIndex\",\"-1\",1,\"mat-drawer\"],hostVars:12,hostBindings:function(t,e){1&t&&o.Kc(\"@transform.start\",(function(t){return e._animationStartListener(t)}))(\"@transform.done\",(function(t){return e._animationDoneListener(t)})),2&t&&(o.Mb(\"align\",null),o.Lc(\"@transform\",e._animationState),o.Pb(\"mat-drawer-end\",\"end\"===e.position)(\"mat-drawer-over\",\"over\"===e.mode)(\"mat-drawer-push\",\"push\"===e.mode)(\"mat-drawer-side\",\"side\"===e.mode)(\"mat-drawer-opened\",e.opened))},inputs:{position:\"position\",mode:\"mode\",disableClose:\"disableClose\",autoFocus:\"autoFocus\",opened:\"opened\"},outputs:{openedChange:\"openedChange\",_openedStream:\"opened\",openedStart:\"openedStart\",_closedStream:\"closed\",closedStart:\"closedStart\",onPositionChanged:\"positionChanged\"},exportAs:[\"matDrawer\"],ngContentSelectors:L,decls:2,vars:0,consts:[[1,\"mat-drawer-inner-container\"]],template:function(t,e){1&t&&(o.uc(),o.dc(0,\"div\",0),o.tc(1),o.cc())},encapsulation:2,data:{animation:[F.transformDrawer]},changeDetection:0}),t})(),V=(()=>{class t{constructor(t,e,n,r,i,a=!1,s){this._dir=t,this._element=e,this._ngZone=n,this._changeDetectorRef=r,this._animationMode=s,this._drawers=new o.N,this.backdropClick=new o.s,this._destroyed=new u.a,this._doCheckSubject=new u.a,this._contentMargins={left:null,right:null},this._contentMarginChanges=new u.a,t&&t.change.pipe(Object(_.a)(this._destroyed)).subscribe(()=>{this._validateDrawers(),this.updateContentMargins()}),i.change().pipe(Object(_.a)(this._destroyed)).subscribe(()=>this.updateContentMargins()),this._autosize=a}get start(){return this._start}get end(){return this._end}get autosize(){return this._autosize}set autosize(t){this._autosize=Object(l.c)(t)}get hasBackdrop(){return null==this._backdropOverride?!this._start||\"side\"!==this._start.mode||!this._end||\"side\"!==this._end.mode:this._backdropOverride}set hasBackdrop(t){this._backdropOverride=null==t?null:Object(l.c)(t)}get scrollable(){return this._userContent||this._content}ngAfterContentInit(){this._allDrawers.changes.pipe(Object(w.a)(this._allDrawers),Object(_.a)(this._destroyed)).subscribe(t=>{this._drawers.reset(t.filter(t=>!t._container||t._container===this)),this._drawers.notifyOnChanges()}),this._drawers.changes.pipe(Object(w.a)(null)).subscribe(()=>{this._validateDrawers(),this._drawers.forEach(t=>{this._watchDrawerToggle(t),this._watchDrawerPosition(t),this._watchDrawerMode(t)}),(!this._drawers.length||this._isDrawerOpen(this._start)||this._isDrawerOpen(this._end))&&this.updateContentMargins(),this._changeDetectorRef.markForCheck()}),this._ngZone.runOutsideAngular(()=>{this._doCheckSubject.pipe(Object(k.a)(10),Object(_.a)(this._destroyed)).subscribe(()=>this.updateContentMargins())})}ngOnDestroy(){this._contentMarginChanges.complete(),this._doCheckSubject.complete(),this._drawers.destroy(),this._destroyed.next(),this._destroyed.complete()}open(){this._drawers.forEach(t=>t.open())}close(){this._drawers.forEach(t=>t.close())}updateContentMargins(){let t=0,e=0;if(this._left&&this._left.opened)if(\"side\"==this._left.mode)t+=this._left._getWidth();else if(\"push\"==this._left.mode){const n=this._left._getWidth();t+=n,e-=n}if(this._right&&this._right.opened)if(\"side\"==this._right.mode)e+=this._right._getWidth();else if(\"push\"==this._right.mode){const n=this._right._getWidth();e+=n,t-=n}t=t||null,e=e||null,t===this._contentMargins.left&&e===this._contentMargins.right||(this._contentMargins={left:t,right:e},this._ngZone.run(()=>this._contentMarginChanges.next(this._contentMargins)))}ngDoCheck(){this._autosize&&this._isPushed()&&this._ngZone.runOutsideAngular(()=>this._doCheckSubject.next())}_watchDrawerToggle(t){t._animationStarted.pipe(Object(f.a)(t=>t.fromState!==t.toState),Object(_.a)(this._drawers.changes)).subscribe(t=>{\"open-instant\"!==t.toState&&\"NoopAnimations\"!==this._animationMode&&this._element.nativeElement.classList.add(\"mat-drawer-transition\"),this.updateContentMargins(),this._changeDetectorRef.markForCheck()}),\"side\"!==t.mode&&t.openedChange.pipe(Object(_.a)(this._drawers.changes)).subscribe(()=>this._setContainerClass(t.opened))}_watchDrawerPosition(t){t&&t.onPositionChanged.pipe(Object(_.a)(this._drawers.changes)).subscribe(()=>{this._ngZone.onMicrotaskEmpty.pipe(Object(x.a)(1)).subscribe(()=>{this._validateDrawers()})})}_watchDrawerMode(t){t&&t._modeChanged.pipe(Object(_.a)(Object(d.a)(this._drawers.changes,this._destroyed))).subscribe(()=>{this.updateContentMargins(),this._changeDetectorRef.markForCheck()})}_setContainerClass(t){const e=this._element.nativeElement.classList,n=\"mat-drawer-container-has-open\";t?e.add(n):e.remove(n)}_validateDrawers(){this._start=this._end=null,this._drawers.forEach(t=>{\"end\"==t.position?this._end=t:this._start=t}),this._right=this._left=null,this._dir&&\"rtl\"===this._dir.value?(this._left=this._end,this._right=this._start):(this._left=this._start,this._right=this._end)}_isPushed(){return this._isDrawerOpen(this._start)&&\"over\"!=this._start.mode||this._isDrawerOpen(this._end)&&\"over\"!=this._end.mode}_onBackdropClicked(){this.backdropClick.emit(),this._closeModalDrawersViaBackdrop()}_closeModalDrawersViaBackdrop(){[this._start,this._end].filter(t=>t&&!t.disableClose&&this._canHaveBackdrop(t)).forEach(t=>t._closeViaBackdropClick())}_isShowingBackdrop(){return this._isDrawerOpen(this._start)&&this._canHaveBackdrop(this._start)||this._isDrawerOpen(this._end)&&this._canHaveBackdrop(this._end)}_canHaveBackdrop(t){return\"side\"!==t.mode||!!this._backdropOverride}_isDrawerOpen(t){return null!=t&&t.opened}}return t.\\u0275fac=function(e){return new(e||t)(o.Xb(A.b,8),o.Xb(o.p),o.Xb(o.H),o.Xb(o.j),o.Xb(i.e),o.Xb(N),o.Xb(T.a,8))},t.\\u0275cmp=o.Rb({type:t,selectors:[[\"mat-drawer-container\"]],contentQueries:function(t,e,n){if(1&t&&(o.Qb(n,Y,!0),o.Qb(n,H,!0)),2&t){let t;o.Ac(t=o.mc())&&(e._content=t.first),o.Ac(t=o.mc())&&(e._allDrawers=t)}},viewQuery:function(t,e){if(1&t&&o.Sc(Y,!0),2&t){let t;o.Ac(t=o.mc())&&(e._userContent=t.first)}},hostAttrs:[1,\"mat-drawer-container\"],hostVars:2,hostBindings:function(t,e){2&t&&o.Pb(\"mat-drawer-container-explicit-backdrop\",e._backdropOverride)},inputs:{autosize:\"autosize\",hasBackdrop:\"hasBackdrop\"},outputs:{backdropClick:\"backdropClick\"},exportAs:[\"matDrawerContainer\"],features:[o.Kb([{provide:B,useExisting:t}])],ngContentSelectors:D,decls:4,vars:2,consts:[[\"class\",\"mat-drawer-backdrop\",3,\"mat-drawer-shown\",\"click\",4,\"ngIf\"],[4,\"ngIf\"],[1,\"mat-drawer-backdrop\",3,\"click\"]],template:function(t,e){1&t&&(o.uc(O),o.Mc(0,C,1,2,\"div\",0),o.tc(1),o.tc(2,1),o.Mc(3,E,2,0,\"mat-drawer-content\",1)),2&t&&(o.vc(\"ngIf\",e.hasBackdrop),o.Lb(3),o.vc(\"ngIf\",!e._content))},directives:[a.o,Y],styles:[j],encapsulation:2,changeDetection:0}),t})(),U=(()=>{class t extends Y{constructor(t,e,n,r,i){super(t,e,n,r,i)}}return t.\\u0275fac=function(e){return new(e||t)(o.Xb(o.j),o.Xb(Object(o.db)(()=>G)),o.Xb(o.p),o.Xb(i.c),o.Xb(o.H))},t.\\u0275cmp=o.Rb({type:t,selectors:[[\"mat-sidenav-content\"]],hostAttrs:[1,\"mat-drawer-content\",\"mat-sidenav-content\"],hostVars:4,hostBindings:function(t,e){2&t&&o.Jc(\"margin-left\",e._container._contentMargins.left,\"px\")(\"margin-right\",e._container._contentMargins.right,\"px\")},features:[o.Ib],ngContentSelectors:L,decls:1,vars:0,template:function(t,e){1&t&&(o.uc(),o.tc(0))},encapsulation:2,changeDetection:0}),t})(),W=(()=>{class t extends H{constructor(){super(...arguments),this._fixedInViewport=!1,this._fixedTopGap=0,this._fixedBottomGap=0}get fixedInViewport(){return this._fixedInViewport}set fixedInViewport(t){this._fixedInViewport=Object(l.c)(t)}get fixedTopGap(){return this._fixedTopGap}set fixedTopGap(t){this._fixedTopGap=Object(l.f)(t)}get fixedBottomGap(){return this._fixedBottomGap}set fixedBottomGap(t){this._fixedBottomGap=Object(l.f)(t)}}return t.\\u0275fac=function(e){return q(e||t)},t.\\u0275cmp=o.Rb({type:t,selectors:[[\"mat-sidenav\"]],hostAttrs:[\"tabIndex\",\"-1\",1,\"mat-drawer\",\"mat-sidenav\"],hostVars:17,hostBindings:function(t,e){2&t&&(o.Mb(\"align\",null),o.Jc(\"top\",e.fixedInViewport?e.fixedTopGap:null,\"px\")(\"bottom\",e.fixedInViewport?e.fixedBottomGap:null,\"px\"),o.Pb(\"mat-drawer-end\",\"end\"===e.position)(\"mat-drawer-over\",\"over\"===e.mode)(\"mat-drawer-push\",\"push\"===e.mode)(\"mat-drawer-side\",\"side\"===e.mode)(\"mat-drawer-opened\",e.opened)(\"mat-sidenav-fixed\",e.fixedInViewport))},inputs:{fixedInViewport:\"fixedInViewport\",fixedTopGap:\"fixedTopGap\",fixedBottomGap:\"fixedBottomGap\"},exportAs:[\"matSidenav\"],features:[o.Ib],ngContentSelectors:L,decls:2,vars:0,consts:[[1,\"mat-drawer-inner-container\"]],template:function(t,e){1&t&&(o.uc(),o.dc(0,\"div\",0),o.tc(1),o.cc())},encapsulation:2,data:{animation:[F.transformDrawer]},changeDetection:0}),t})();const q=o.fc(W);let G=(()=>{class t extends V{}return t.\\u0275fac=function(e){return X(e||t)},t.\\u0275cmp=o.Rb({type:t,selectors:[[\"mat-sidenav-container\"]],contentQueries:function(t,e,n){if(1&t&&(o.Qb(n,U,!0),o.Qb(n,W,!0)),2&t){let t;o.Ac(t=o.mc())&&(e._content=t.first),o.Ac(t=o.mc())&&(e._allDrawers=t)}},hostAttrs:[1,\"mat-drawer-container\",\"mat-sidenav-container\"],hostVars:2,hostBindings:function(t,e){2&t&&o.Pb(\"mat-drawer-container-explicit-backdrop\",e._backdropOverride)},exportAs:[\"matSidenavContainer\"],features:[o.Kb([{provide:B,useExisting:t}]),o.Ib],ngContentSelectors:z,decls:4,vars:2,consts:[[\"class\",\"mat-drawer-backdrop\",3,\"mat-drawer-shown\",\"click\",4,\"ngIf\"],[\"cdkScrollable\",\"\",4,\"ngIf\"],[1,\"mat-drawer-backdrop\",3,\"click\"],[\"cdkScrollable\",\"\"]],template:function(t,e){1&t&&(o.uc(R),o.Mc(0,I,1,2,\"div\",0),o.tc(1),o.tc(2,1),o.Mc(3,P,2,0,\"mat-sidenav-content\",1)),2&t&&(o.vc(\"ngIf\",e.hasBackdrop),o.Lb(3),o.vc(\"ngIf\",!e._content))},directives:[a.o,U,i.a],styles:[j],encapsulation:2,changeDetection:0}),t})();const X=o.fc(G);let Z=(()=>{class t{}return t.\\u0275mod=o.Vb({type:t}),t.\\u0275inj=o.Ub({factory:function(e){return new(e||t)},imports:[[a.c,s.i,r.b,i.b],i.b,s.i]}),t})()},XiUz:function(t,e,n){\"use strict\";n.d(e,\"g\",(function(){return pt})),n.d(e,\"b\",(function(){return z})),n.d(e,\"a\",(function(){return G})),n.d(e,\"f\",(function(){return $})),n.d(e,\"d\",(function(){return y})),n.d(e,\"c\",(function(){return it})),n.d(e,\"e\",(function(){return M}));var r=n(\"fXoL\"),i=n(\"pD6V\"),a=n(\"cH1L\"),o=n(\"XNiG\"),s=n(\"1G5W\");const l=\"inline\",c=[\"row\",\"column\",\"row-reverse\",\"column-reverse\"];function u(t){t=t?t.toLowerCase():\"\";let[e,n,r]=t.split(\" \");return c.find(t=>t===e)||(e=c[0]),n===l&&(n=r!==l?r:\"\",r=l),[e,d(n),!!r]}function h(t){let[e]=u(t);return e.indexOf(\"row\")>-1}function d(t){if(t)switch(t.toLowerCase()){case\"reverse\":case\"wrap-reverse\":case\"reverse-wrap\":t=\"wrap-reverse\";break;case\"no\":case\"none\":case\"nowrap\":t=\"nowrap\";break;default:t=\"wrap\"}return t}let f=(()=>{class t extends i.h{buildStyles(t){return function(t){let[e,n,r]=u(t);return function(t,e=null,n=!1){return{display:n?\"inline-flex\":\"flex\",\"box-sizing\":\"border-box\",\"flex-direction\":t,\"flex-wrap\":e||null}}(e,n,r)}(t)}}return t.\\u0275fac=function(e){return p(e||t)},t.\\u0275prov=Object(r.Tb)({factory:function(){return new t},token:t,providedIn:\"root\"}),t})();const p=r.fc(f),m=[\"fxLayout\",\"fxLayout.xs\",\"fxLayout.sm\",\"fxLayout.md\",\"fxLayout.lg\",\"fxLayout.xl\",\"fxLayout.lt-sm\",\"fxLayout.lt-md\",\"fxLayout.lt-lg\",\"fxLayout.lt-xl\",\"fxLayout.gt-xs\",\"fxLayout.gt-sm\",\"fxLayout.gt-md\",\"fxLayout.gt-lg\"];let g=(()=>{class t extends i.b{constructor(t,e,n,r){super(t,n,e,r),this.DIRECTIVE_KEY=\"layout\",this.styleCache=_,this.init()}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.p),r.Xb(i.i),r.Xb(f),r.Xb(i.f))},t.\\u0275dir=r.Sb({type:t,features:[r.Ib]}),t})(),y=(()=>{class t extends g{constructor(){super(...arguments),this.inputs=m}}return t.\\u0275fac=function(e){return v(e||t)},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"fxLayout\",\"\"],[\"\",\"fxLayout.xs\",\"\"],[\"\",\"fxLayout.sm\",\"\"],[\"\",\"fxLayout.md\",\"\"],[\"\",\"fxLayout.lg\",\"\"],[\"\",\"fxLayout.xl\",\"\"],[\"\",\"fxLayout.lt-sm\",\"\"],[\"\",\"fxLayout.lt-md\",\"\"],[\"\",\"fxLayout.lt-lg\",\"\"],[\"\",\"fxLayout.lt-xl\",\"\"],[\"\",\"fxLayout.gt-xs\",\"\"],[\"\",\"fxLayout.gt-sm\",\"\"],[\"\",\"fxLayout.gt-md\",\"\"],[\"\",\"fxLayout.gt-lg\",\"\"]],inputs:{fxLayout:\"fxLayout\",\"fxLayout.xs\":\"fxLayout.xs\",\"fxLayout.sm\":\"fxLayout.sm\",\"fxLayout.md\":\"fxLayout.md\",\"fxLayout.lg\":\"fxLayout.lg\",\"fxLayout.xl\":\"fxLayout.xl\",\"fxLayout.lt-sm\":\"fxLayout.lt-sm\",\"fxLayout.lt-md\":\"fxLayout.lt-md\",\"fxLayout.lt-lg\":\"fxLayout.lt-lg\",\"fxLayout.lt-xl\":\"fxLayout.lt-xl\",\"fxLayout.gt-xs\":\"fxLayout.gt-xs\",\"fxLayout.gt-sm\":\"fxLayout.gt-sm\",\"fxLayout.gt-md\":\"fxLayout.gt-md\",\"fxLayout.gt-lg\":\"fxLayout.gt-lg\"},features:[r.Ib]}),t})();const v=r.fc(y),_=new Map,b={\"margin-left\":null,\"margin-right\":null,\"margin-top\":null,\"margin-bottom\":null};let x=(()=>{class t extends i.h{constructor(t){super(),this._styler=t}buildStyles(t,e){return t.endsWith(E)?function(t,e){const[n,r]=t.split(\" \"),i=t=>\"-\"+t;let a=\"0px\",o=i(r||n),s=\"0px\";return\"rtl\"===e?s=i(n):a=i(n),{margin:`0px ${a} ${o} ${s}`}}(t=t.slice(0,t.indexOf(E)),e.directionality):{}}sideEffect(t,e,n){const r=n.items;if(t.endsWith(E)){const e=function(t,e){const[n,r]=t.split(\" \");let i=\"0px\",a=\"0px\";return\"rtl\"===e?a=n:i=n,{padding:`0px ${i} ${r||n} ${a}`}}(t=t.slice(0,t.indexOf(E)),n.directionality);this._styler.applyStyleToElements(e,n.items)}else{const e=r.pop(),i=function(t,e){const n=O(e.directionality,e.layout),r=Object.assign({},b);return r[n]=t,r}(t,n);this._styler.applyStyleToElements(i,r),this._styler.applyStyleToElements(b,[e])}}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(i.i))},t.\\u0275prov=Object(r.Tb)({factory:function(){return new t(Object(r.hc)(i.i))},token:t,providedIn:\"root\"}),t})();const w=[\"fxLayoutGap\",\"fxLayoutGap.xs\",\"fxLayoutGap.sm\",\"fxLayoutGap.md\",\"fxLayoutGap.lg\",\"fxLayoutGap.xl\",\"fxLayoutGap.lt-sm\",\"fxLayoutGap.lt-md\",\"fxLayoutGap.lt-lg\",\"fxLayoutGap.lt-xl\",\"fxLayoutGap.gt-xs\",\"fxLayoutGap.gt-sm\",\"fxLayoutGap.gt-md\",\"fxLayoutGap.gt-lg\"];let k=(()=>{class t extends i.b{constructor(t,e,n,r,i,a){super(t,i,r,a),this.zone=e,this.directionality=n,this.styleUtils=r,this.layout=\"row\",this.DIRECTIVE_KEY=\"layout-gap\",this.observerSubject=new o.a;const l=[this.directionality.change,this.observerSubject.asObservable()];this.init(l),this.marshal.trackValue(this.nativeElement,\"layout\").pipe(Object(s.a)(this.destroySubject)).subscribe(this.onLayoutChange.bind(this))}get childrenNodes(){const t=this.nativeElement.children,e=[];for(let n=t.length;n--;)e[n]=t[n];return e}ngAfterContentInit(){this.buildChildObservable(),this.triggerUpdate()}ngOnDestroy(){super.ngOnDestroy(),this.observer&&this.observer.disconnect()}onLayoutChange(t){const e=t.value.split(\" \");this.layout=e[0],c.find(t=>t===this.layout)||(this.layout=\"row\"),this.triggerUpdate()}updateWithValue(t){const e=this.childrenNodes.filter(t=>1===t.nodeType&&this.willDisplay(t)).sort((t,e)=>{const n=+this.styler.lookupStyle(t,\"order\"),r=+this.styler.lookupStyle(e,\"order\");return isNaN(n)||isNaN(r)||n===r?0:n>r?1:-1});if(e.length>0){const n=this.directionality.value,r=this.layout;\"row\"===r&&\"rtl\"===n?this.styleCache=S:\"row\"===r&&\"rtl\"!==n?this.styleCache=L:\"column\"===r&&\"rtl\"===n?this.styleCache=A:\"column\"===r&&\"rtl\"!==n&&(this.styleCache=C),this.addStyles(t,{directionality:n,items:e,layout:r})}}clearStyles(){const t=Object.keys(this.mru).length>0,e=t?\"padding\":O(this.directionality.value,this.layout);t&&super.clearStyles(),this.styleUtils.applyStyleToElements({[e]:\"\"},this.childrenNodes)}willDisplay(t){const e=this.marshal.getValue(t,\"show-hide\");return!0===e||void 0===e&&\"none\"!==this.styleUtils.lookupStyle(t,\"display\")}buildChildObservable(){this.zone.runOutsideAngular(()=>{\"undefined\"!=typeof MutationObserver&&(this.observer=new MutationObserver(t=>{t.some(t=>t.addedNodes&&t.addedNodes.length>0||t.removedNodes&&t.removedNodes.length>0)&&this.observerSubject.next()}),this.observer.observe(this.nativeElement,{childList:!0}))})}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.p),r.Xb(r.H),r.Xb(a.b),r.Xb(i.i),r.Xb(x),r.Xb(i.f))},t.\\u0275dir=r.Sb({type:t,features:[r.Ib]}),t})(),M=(()=>{class t extends k{constructor(){super(...arguments),this.inputs=w}}return t.\\u0275fac=function(e){return T(e||t)},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"fxLayoutGap\",\"\"],[\"\",\"fxLayoutGap.xs\",\"\"],[\"\",\"fxLayoutGap.sm\",\"\"],[\"\",\"fxLayoutGap.md\",\"\"],[\"\",\"fxLayoutGap.lg\",\"\"],[\"\",\"fxLayoutGap.xl\",\"\"],[\"\",\"fxLayoutGap.lt-sm\",\"\"],[\"\",\"fxLayoutGap.lt-md\",\"\"],[\"\",\"fxLayoutGap.lt-lg\",\"\"],[\"\",\"fxLayoutGap.lt-xl\",\"\"],[\"\",\"fxLayoutGap.gt-xs\",\"\"],[\"\",\"fxLayoutGap.gt-sm\",\"\"],[\"\",\"fxLayoutGap.gt-md\",\"\"],[\"\",\"fxLayoutGap.gt-lg\",\"\"]],inputs:{fxLayoutGap:\"fxLayoutGap\",\"fxLayoutGap.xs\":\"fxLayoutGap.xs\",\"fxLayoutGap.sm\":\"fxLayoutGap.sm\",\"fxLayoutGap.md\":\"fxLayoutGap.md\",\"fxLayoutGap.lg\":\"fxLayoutGap.lg\",\"fxLayoutGap.xl\":\"fxLayoutGap.xl\",\"fxLayoutGap.lt-sm\":\"fxLayoutGap.lt-sm\",\"fxLayoutGap.lt-md\":\"fxLayoutGap.lt-md\",\"fxLayoutGap.lt-lg\":\"fxLayoutGap.lt-lg\",\"fxLayoutGap.lt-xl\":\"fxLayoutGap.lt-xl\",\"fxLayoutGap.gt-xs\":\"fxLayoutGap.gt-xs\",\"fxLayoutGap.gt-sm\":\"fxLayoutGap.gt-sm\",\"fxLayoutGap.gt-md\":\"fxLayoutGap.gt-md\",\"fxLayoutGap.gt-lg\":\"fxLayoutGap.gt-lg\"},features:[r.Ib]}),t})();const T=r.fc(M),S=new Map,A=new Map,L=new Map,C=new Map,E=\" grid\";function O(t,e){switch(e){case\"column\":return\"margin-bottom\";case\"column-reverse\":return\"margin-top\";case\"row\":return\"rtl\"===t?\"margin-left\":\"margin-right\";case\"row-reverse\":return\"rtl\"===t?\"margin-right\":\"margin-left\";default:return\"rtl\"===t?\"margin-left\":\"margin-right\"}}function D(t,...e){if(null==t)throw TypeError(\"Cannot convert undefined or null to object\");for(let n of e)if(null!=n)for(let e in n)n.hasOwnProperty(e)&&(t[e]=n[e]);return t}let I=(()=>{class t extends i.h{constructor(t){super(),this.layoutConfig=t}buildStyles(t,e){let[n,r,...i]=t.split(\" \"),a=i.join(\" \");const o=e.direction.indexOf(\"column\")>-1?\"column\":\"row\",s=h(o)?\"max-width\":\"max-height\",l=h(o)?\"min-width\":\"min-height\",c=String(a).indexOf(\"calc\")>-1,u=c||\"auto\"===a,d=String(a).indexOf(\"%\")>-1&&!c,f=String(a).indexOf(\"px\")>-1||String(a).indexOf(\"rem\")>-1||String(a).indexOf(\"em\")>-1||String(a).indexOf(\"vw\")>-1||String(a).indexOf(\"vh\")>-1;let p=c||f;n=\"0\"==n?0:n,r=\"0\"==r?0:r;const m=!n&&!r;let g={};const y={\"max-width\":null,\"max-height\":null,\"min-width\":null,\"min-height\":null};switch(a||\"\"){case\"\":const t=!1!==this.layoutConfig.useColumnBasisZero;a=\"row\"===o?\"0%\":t?\"0.000000001px\":\"auto\";break;case\"initial\":case\"nogrow\":n=0,a=\"auto\";break;case\"grow\":a=\"100%\";break;case\"noshrink\":r=0,a=\"auto\";break;case\"auto\":break;case\"none\":n=0,r=0,a=\"auto\";break;default:p||d||isNaN(a)||(a+=\"%\"),\"0%\"===a&&(p=!0),\"0px\"===a&&(a=\"0%\"),g=D(y,c?{\"flex-grow\":n,\"flex-shrink\":r,\"flex-basis\":p?a:\"100%\"}:{flex:`${n} ${r} ${p?a:\"100%\"}`})}return g.flex||g[\"flex-grow\"]||(g=D(y,c?{\"flex-grow\":n,\"flex-shrink\":r,\"flex-basis\":a}:{flex:`${n} ${r} ${a}`})),\"0%\"!==a&&\"0px\"!==a&&\"0.000000001px\"!==a&&\"auto\"!==a&&(g[l]=m||p&&n?a:null,g[s]=m||!u&&r?a:null),g[l]||g[s]?e.hasWrap&&(g[c?\"flex-basis\":\"flex\"]=g[s]?c?g[s]:`${n} ${r} ${g[s]}`:c?g[l]:`${n} ${r} ${g[l]}`):g=D(y,c?{\"flex-grow\":n,\"flex-shrink\":r,\"flex-basis\":a}:{flex:`${n} ${r} ${a}`}),D(g,{\"box-sizing\":\"border-box\"})}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(i.e))},t.\\u0275prov=Object(r.Tb)({factory:function(){return new t(Object(r.hc)(i.e))},token:t,providedIn:\"root\"}),t})();const P=[\"fxFlex\",\"fxFlex.xs\",\"fxFlex.sm\",\"fxFlex.md\",\"fxFlex.lg\",\"fxFlex.xl\",\"fxFlex.lt-sm\",\"fxFlex.lt-md\",\"fxFlex.lt-lg\",\"fxFlex.lt-xl\",\"fxFlex.gt-xs\",\"fxFlex.gt-sm\",\"fxFlex.gt-md\",\"fxFlex.gt-lg\"];let R=(()=>{class t extends i.b{constructor(t,e,n,r,i){super(t,r,e,i),this.layoutConfig=n,this.marshal=i,this.DIRECTIVE_KEY=\"flex\",this.direction=void 0,this.wrap=void 0,this.flexGrow=\"1\",this.flexShrink=\"1\",this.init()}get shrink(){return this.flexShrink}set shrink(t){this.flexShrink=t||\"1\",this.triggerReflow()}get grow(){return this.flexGrow}set grow(t){this.flexGrow=t||\"1\",this.triggerReflow()}ngOnInit(){this.parentElement&&(this.marshal.trackValue(this.parentElement,\"layout\").pipe(Object(s.a)(this.destroySubject)).subscribe(this.onLayoutChange.bind(this)),this.marshal.trackValue(this.nativeElement,\"layout-align\").pipe(Object(s.a)(this.destroySubject)).subscribe(this.triggerReflow.bind(this)))}onLayoutChange(t){const e=t.value.split(\" \");this.direction=e[0],this.wrap=void 0!==e[1]&&\"wrap\"===e[1],this.triggerUpdate()}updateWithValue(t){void 0===this.direction&&(this.direction=this.getFlexFlowDirection(this.parentElement,!1!==this.layoutConfig.addFlexToParent)),void 0===this.wrap&&(this.wrap=this.hasWrap(this.parentElement));const e=this.direction,n=e.startsWith(\"row\"),r=this.wrap;n&&r?this.styleCache=B:n&&!r?this.styleCache=F:!n&&r?this.styleCache=Y:n||r||(this.styleCache=N);const a=String(t).replace(\";\",\"\"),o=Object(i.j)(a,this.flexGrow,this.flexShrink);this.addStyles(o.join(\" \"),{direction:e,hasWrap:r})}triggerReflow(){const t=this.activatedValue;if(void 0!==t){const e=Object(i.j)(t+\"\",this.flexGrow,this.flexShrink);this.marshal.updateElement(this.nativeElement,this.DIRECTIVE_KEY,e.join(\" \"))}}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.p),r.Xb(i.i),r.Xb(i.e),r.Xb(I),r.Xb(i.f))},t.\\u0275dir=r.Sb({type:t,inputs:{shrink:[\"fxShrink\",\"shrink\"],grow:[\"fxGrow\",\"grow\"]},features:[r.Ib]}),t})(),z=(()=>{class t extends R{constructor(){super(...arguments),this.inputs=P}}return t.\\u0275fac=function(e){return j(e||t)},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"fxFlex\",\"\"],[\"\",\"fxFlex.xs\",\"\"],[\"\",\"fxFlex.sm\",\"\"],[\"\",\"fxFlex.md\",\"\"],[\"\",\"fxFlex.lg\",\"\"],[\"\",\"fxFlex.xl\",\"\"],[\"\",\"fxFlex.lt-sm\",\"\"],[\"\",\"fxFlex.lt-md\",\"\"],[\"\",\"fxFlex.lt-lg\",\"\"],[\"\",\"fxFlex.lt-xl\",\"\"],[\"\",\"fxFlex.gt-xs\",\"\"],[\"\",\"fxFlex.gt-sm\",\"\"],[\"\",\"fxFlex.gt-md\",\"\"],[\"\",\"fxFlex.gt-lg\",\"\"]],inputs:{fxFlex:\"fxFlex\",\"fxFlex.xs\":\"fxFlex.xs\",\"fxFlex.sm\":\"fxFlex.sm\",\"fxFlex.md\":\"fxFlex.md\",\"fxFlex.lg\":\"fxFlex.lg\",\"fxFlex.xl\":\"fxFlex.xl\",\"fxFlex.lt-sm\":\"fxFlex.lt-sm\",\"fxFlex.lt-md\":\"fxFlex.lt-md\",\"fxFlex.lt-lg\":\"fxFlex.lt-lg\",\"fxFlex.lt-xl\":\"fxFlex.lt-xl\",\"fxFlex.gt-xs\":\"fxFlex.gt-xs\",\"fxFlex.gt-sm\":\"fxFlex.gt-sm\",\"fxFlex.gt-md\":\"fxFlex.gt-md\",\"fxFlex.gt-lg\":\"fxFlex.gt-lg\"},features:[r.Ib]}),t})();const j=r.fc(z),F=new Map,N=new Map,B=new Map,Y=new Map;let H=(()=>{class t extends i.h{buildStyles(t){const e={};switch(t=t||\"stretch\"){case\"start\":e[\"align-self\"]=\"flex-start\";break;case\"end\":e[\"align-self\"]=\"flex-end\";break;default:e[\"align-self\"]=t}return e}}return t.\\u0275fac=function(e){return V(e||t)},t.\\u0275prov=Object(r.Tb)({factory:function(){return new t},token:t,providedIn:\"root\"}),t})();const V=r.fc(H),U=[\"fxFlexAlign\",\"fxFlexAlign.xs\",\"fxFlexAlign.sm\",\"fxFlexAlign.md\",\"fxFlexAlign.lg\",\"fxFlexAlign.xl\",\"fxFlexAlign.lt-sm\",\"fxFlexAlign.lt-md\",\"fxFlexAlign.lt-lg\",\"fxFlexAlign.lt-xl\",\"fxFlexAlign.gt-xs\",\"fxFlexAlign.gt-sm\",\"fxFlexAlign.gt-md\",\"fxFlexAlign.gt-lg\"];let W=(()=>{class t extends i.b{constructor(t,e,n,r){super(t,n,e,r),this.DIRECTIVE_KEY=\"flex-align\",this.styleCache=q,this.init()}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.p),r.Xb(i.i),r.Xb(H),r.Xb(i.f))},t.\\u0275dir=r.Sb({type:t,features:[r.Ib]}),t})();const q=new Map;let G=(()=>{class t extends W{constructor(){super(...arguments),this.inputs=U}}return t.\\u0275fac=function(e){return X(e||t)},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"fxFlexAlign\",\"\"],[\"\",\"fxFlexAlign.xs\",\"\"],[\"\",\"fxFlexAlign.sm\",\"\"],[\"\",\"fxFlexAlign.md\",\"\"],[\"\",\"fxFlexAlign.lg\",\"\"],[\"\",\"fxFlexAlign.xl\",\"\"],[\"\",\"fxFlexAlign.lt-sm\",\"\"],[\"\",\"fxFlexAlign.lt-md\",\"\"],[\"\",\"fxFlexAlign.lt-lg\",\"\"],[\"\",\"fxFlexAlign.lt-xl\",\"\"],[\"\",\"fxFlexAlign.gt-xs\",\"\"],[\"\",\"fxFlexAlign.gt-sm\",\"\"],[\"\",\"fxFlexAlign.gt-md\",\"\"],[\"\",\"fxFlexAlign.gt-lg\",\"\"]],inputs:{fxFlexAlign:\"fxFlexAlign\",\"fxFlexAlign.xs\":\"fxFlexAlign.xs\",\"fxFlexAlign.sm\":\"fxFlexAlign.sm\",\"fxFlexAlign.md\":\"fxFlexAlign.md\",\"fxFlexAlign.lg\":\"fxFlexAlign.lg\",\"fxFlexAlign.xl\":\"fxFlexAlign.xl\",\"fxFlexAlign.lt-sm\":\"fxFlexAlign.lt-sm\",\"fxFlexAlign.lt-md\":\"fxFlexAlign.lt-md\",\"fxFlexAlign.lt-lg\":\"fxFlexAlign.lt-lg\",\"fxFlexAlign.lt-xl\":\"fxFlexAlign.lt-xl\",\"fxFlexAlign.gt-xs\":\"fxFlexAlign.gt-xs\",\"fxFlexAlign.gt-sm\":\"fxFlexAlign.gt-sm\",\"fxFlexAlign.gt-md\":\"fxFlexAlign.gt-md\",\"fxFlexAlign.gt-lg\":\"fxFlexAlign.gt-lg\"},features:[r.Ib]}),t})();const X=r.fc(G),Z={margin:0,width:\"100%\",height:\"100%\",\"min-width\":\"100%\",\"min-height\":\"100%\"};let J=(()=>{class t extends i.h{buildStyles(t){return Z}}return t.\\u0275fac=function(e){return K(e||t)},t.\\u0275prov=Object(r.Tb)({factory:function(){return new t},token:t,providedIn:\"root\"}),t})();const K=r.fc(J);let $=(()=>{class t extends i.b{constructor(t,e,n,r){super(t,n,e,r),this.styleCache=Q,this.addStyles(\"\")}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.p),r.Xb(i.i),r.Xb(J),r.Xb(i.f))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"fxFill\",\"\"],[\"\",\"fxFlexFill\",\"\"]],features:[r.Ib]}),t})();const Q=new Map;let tt=(()=>{class t extends i.h{buildStyles(t,e){const n={},[r,i]=t.split(\" \");switch(r){case\"center\":n[\"justify-content\"]=\"center\";break;case\"space-around\":n[\"justify-content\"]=\"space-around\";break;case\"space-between\":n[\"justify-content\"]=\"space-between\";break;case\"space-evenly\":n[\"justify-content\"]=\"space-evenly\";break;case\"end\":case\"flex-end\":n[\"justify-content\"]=\"flex-end\";break;case\"start\":case\"flex-start\":default:n[\"justify-content\"]=\"flex-start\"}switch(i){case\"start\":case\"flex-start\":n[\"align-items\"]=n[\"align-content\"]=\"flex-start\";break;case\"center\":n[\"align-items\"]=n[\"align-content\"]=\"center\";break;case\"end\":case\"flex-end\":n[\"align-items\"]=n[\"align-content\"]=\"flex-end\";break;case\"space-between\":n[\"align-content\"]=\"space-between\",n[\"align-items\"]=\"stretch\";break;case\"space-around\":n[\"align-content\"]=\"space-around\",n[\"align-items\"]=\"stretch\";break;case\"baseline\":n[\"align-content\"]=\"stretch\",n[\"align-items\"]=\"baseline\";break;case\"stretch\":default:n[\"align-items\"]=n[\"align-content\"]=\"stretch\"}return D(n,{display:e.inline?\"inline-flex\":\"flex\",\"flex-direction\":e.layout,\"box-sizing\":\"border-box\",\"max-width\":\"stretch\"===i?h(e.layout)?null:\"100%\":null,\"max-height\":\"stretch\"===i&&h(e.layout)?\"100%\":null})}}return t.\\u0275fac=function(e){return et(e||t)},t.\\u0275prov=Object(r.Tb)({factory:function(){return new t},token:t,providedIn:\"root\"}),t})();const et=r.fc(tt),nt=[\"fxLayoutAlign\",\"fxLayoutAlign.xs\",\"fxLayoutAlign.sm\",\"fxLayoutAlign.md\",\"fxLayoutAlign.lg\",\"fxLayoutAlign.xl\",\"fxLayoutAlign.lt-sm\",\"fxLayoutAlign.lt-md\",\"fxLayoutAlign.lt-lg\",\"fxLayoutAlign.lt-xl\",\"fxLayoutAlign.gt-xs\",\"fxLayoutAlign.gt-sm\",\"fxLayoutAlign.gt-md\",\"fxLayoutAlign.gt-lg\"];let rt=(()=>{class t extends i.b{constructor(t,e,n,r){super(t,n,e,r),this.DIRECTIVE_KEY=\"layout-align\",this.layout=\"row\",this.inline=!1,this.init(),this.marshal.trackValue(this.nativeElement,\"layout\").pipe(Object(s.a)(this.destroySubject)).subscribe(this.onLayoutChange.bind(this))}updateWithValue(t){const e=this.layout||\"row\",n=this.inline;\"row\"===e&&n?this.styleCache=ut:\"row\"!==e||n?\"row-reverse\"===e&&n?this.styleCache=dt:\"row-reverse\"!==e||n?\"column\"===e&&n?this.styleCache=ht:\"column\"!==e||n?\"column-reverse\"===e&&n?this.styleCache=ft:\"column-reverse\"!==e||n||(this.styleCache=ct):this.styleCache=st:this.styleCache=lt:this.styleCache=ot,this.addStyles(t,{layout:e,inline:n})}onLayoutChange(t){const e=t.value.split(\" \");this.layout=e[0],this.inline=t.value.includes(\"inline\"),c.find(t=>t===this.layout)||(this.layout=\"row\"),this.triggerUpdate()}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.p),r.Xb(i.i),r.Xb(tt),r.Xb(i.f))},t.\\u0275dir=r.Sb({type:t,features:[r.Ib]}),t})(),it=(()=>{class t extends rt{constructor(){super(...arguments),this.inputs=nt}}return t.\\u0275fac=function(e){return at(e||t)},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"fxLayoutAlign\",\"\"],[\"\",\"fxLayoutAlign.xs\",\"\"],[\"\",\"fxLayoutAlign.sm\",\"\"],[\"\",\"fxLayoutAlign.md\",\"\"],[\"\",\"fxLayoutAlign.lg\",\"\"],[\"\",\"fxLayoutAlign.xl\",\"\"],[\"\",\"fxLayoutAlign.lt-sm\",\"\"],[\"\",\"fxLayoutAlign.lt-md\",\"\"],[\"\",\"fxLayoutAlign.lt-lg\",\"\"],[\"\",\"fxLayoutAlign.lt-xl\",\"\"],[\"\",\"fxLayoutAlign.gt-xs\",\"\"],[\"\",\"fxLayoutAlign.gt-sm\",\"\"],[\"\",\"fxLayoutAlign.gt-md\",\"\"],[\"\",\"fxLayoutAlign.gt-lg\",\"\"]],inputs:{fxLayoutAlign:\"fxLayoutAlign\",\"fxLayoutAlign.xs\":\"fxLayoutAlign.xs\",\"fxLayoutAlign.sm\":\"fxLayoutAlign.sm\",\"fxLayoutAlign.md\":\"fxLayoutAlign.md\",\"fxLayoutAlign.lg\":\"fxLayoutAlign.lg\",\"fxLayoutAlign.xl\":\"fxLayoutAlign.xl\",\"fxLayoutAlign.lt-sm\":\"fxLayoutAlign.lt-sm\",\"fxLayoutAlign.lt-md\":\"fxLayoutAlign.lt-md\",\"fxLayoutAlign.lt-lg\":\"fxLayoutAlign.lt-lg\",\"fxLayoutAlign.lt-xl\":\"fxLayoutAlign.lt-xl\",\"fxLayoutAlign.gt-xs\":\"fxLayoutAlign.gt-xs\",\"fxLayoutAlign.gt-sm\":\"fxLayoutAlign.gt-sm\",\"fxLayoutAlign.gt-md\":\"fxLayoutAlign.gt-md\",\"fxLayoutAlign.gt-lg\":\"fxLayoutAlign.gt-lg\"},features:[r.Ib]}),t})();const at=r.fc(it),ot=new Map,st=new Map,lt=new Map,ct=new Map,ut=new Map,ht=new Map,dt=new Map,ft=new Map;let pt=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},imports:[[i.c,a.a]]}),t})()},XoHu:function(t,e,n){\"use strict\";function r(t){return null!==t&&\"object\"==typeof t}n.d(e,\"a\",(function(){return r}))},Y7HM:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));var r=n(\"DH7j\");function i(t){return!Object(r.a)(t)&&t-parseFloat(t)+1>=0}},YRex:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"ug-cn\",{months:\"\\u064a\\u0627\\u0646\\u06cb\\u0627\\u0631_\\u0641\\u06d0\\u06cb\\u0631\\u0627\\u0644_\\u0645\\u0627\\u0631\\u062a_\\u0626\\u0627\\u067e\\u0631\\u06d0\\u0644_\\u0645\\u0627\\u064a_\\u0626\\u0649\\u064a\\u06c7\\u0646_\\u0626\\u0649\\u064a\\u06c7\\u0644_\\u0626\\u0627\\u06cb\\u063a\\u06c7\\u0633\\u062a_\\u0633\\u06d0\\u0646\\u062a\\u06d5\\u0628\\u0649\\u0631_\\u0626\\u06c6\\u0643\\u062a\\u06d5\\u0628\\u0649\\u0631_\\u0646\\u0648\\u064a\\u0627\\u0628\\u0649\\u0631_\\u062f\\u06d0\\u0643\\u0627\\u0628\\u0649\\u0631\".split(\"_\"),monthsShort:\"\\u064a\\u0627\\u0646\\u06cb\\u0627\\u0631_\\u0641\\u06d0\\u06cb\\u0631\\u0627\\u0644_\\u0645\\u0627\\u0631\\u062a_\\u0626\\u0627\\u067e\\u0631\\u06d0\\u0644_\\u0645\\u0627\\u064a_\\u0626\\u0649\\u064a\\u06c7\\u0646_\\u0626\\u0649\\u064a\\u06c7\\u0644_\\u0626\\u0627\\u06cb\\u063a\\u06c7\\u0633\\u062a_\\u0633\\u06d0\\u0646\\u062a\\u06d5\\u0628\\u0649\\u0631_\\u0626\\u06c6\\u0643\\u062a\\u06d5\\u0628\\u0649\\u0631_\\u0646\\u0648\\u064a\\u0627\\u0628\\u0649\\u0631_\\u062f\\u06d0\\u0643\\u0627\\u0628\\u0649\\u0631\".split(\"_\"),weekdays:\"\\u064a\\u06d5\\u0643\\u0634\\u06d5\\u0646\\u0628\\u06d5_\\u062f\\u06c8\\u0634\\u06d5\\u0646\\u0628\\u06d5_\\u0633\\u06d5\\u064a\\u0634\\u06d5\\u0646\\u0628\\u06d5_\\u0686\\u0627\\u0631\\u0634\\u06d5\\u0646\\u0628\\u06d5_\\u067e\\u06d5\\u064a\\u0634\\u06d5\\u0646\\u0628\\u06d5_\\u062c\\u06c8\\u0645\\u06d5_\\u0634\\u06d5\\u0646\\u0628\\u06d5\".split(\"_\"),weekdaysShort:\"\\u064a\\u06d5_\\u062f\\u06c8_\\u0633\\u06d5_\\u0686\\u0627_\\u067e\\u06d5_\\u062c\\u06c8_\\u0634\\u06d5\".split(\"_\"),weekdaysMin:\"\\u064a\\u06d5_\\u062f\\u06c8_\\u0633\\u06d5_\\u0686\\u0627_\\u067e\\u06d5_\\u062c\\u06c8_\\u0634\\u06d5\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"YYYY-\\u064a\\u0649\\u0644\\u0649M-\\u0626\\u0627\\u064a\\u0646\\u0649\\u06adD-\\u0643\\u06c8\\u0646\\u0649\",LLL:\"YYYY-\\u064a\\u0649\\u0644\\u0649M-\\u0626\\u0627\\u064a\\u0646\\u0649\\u06adD-\\u0643\\u06c8\\u0646\\u0649\\u060c HH:mm\",LLLL:\"dddd\\u060c YYYY-\\u064a\\u0649\\u0644\\u0649M-\\u0626\\u0627\\u064a\\u0646\\u0649\\u06adD-\\u0643\\u06c8\\u0646\\u0649\\u060c HH:mm\"},meridiemParse:/\\u064a\\u06d0\\u0631\\u0649\\u0645 \\u0643\\u06d0\\u0686\\u06d5|\\u0633\\u06d5\\u06be\\u06d5\\u0631|\\u0686\\u06c8\\u0634\\u062a\\u0649\\u0646 \\u0628\\u06c7\\u0631\\u06c7\\u0646|\\u0686\\u06c8\\u0634|\\u0686\\u06c8\\u0634\\u062a\\u0649\\u0646 \\u0643\\u06d0\\u064a\\u0649\\u0646|\\u0643\\u06d5\\u0686/,meridiemHour:function(t,e){return 12===t&&(t=0),\"\\u064a\\u06d0\\u0631\\u0649\\u0645 \\u0643\\u06d0\\u0686\\u06d5\"===e||\"\\u0633\\u06d5\\u06be\\u06d5\\u0631\"===e||\"\\u0686\\u06c8\\u0634\\u062a\\u0649\\u0646 \\u0628\\u06c7\\u0631\\u06c7\\u0646\"===e?t:\"\\u0686\\u06c8\\u0634\\u062a\\u0649\\u0646 \\u0643\\u06d0\\u064a\\u0649\\u0646\"===e||\"\\u0643\\u06d5\\u0686\"===e?t+12:t>=11?t:t+12},meridiem:function(t,e,n){var r=100*t+e;return r<600?\"\\u064a\\u06d0\\u0631\\u0649\\u0645 \\u0643\\u06d0\\u0686\\u06d5\":r<900?\"\\u0633\\u06d5\\u06be\\u06d5\\u0631\":r<1130?\"\\u0686\\u06c8\\u0634\\u062a\\u0649\\u0646 \\u0628\\u06c7\\u0631\\u06c7\\u0646\":r<1230?\"\\u0686\\u06c8\\u0634\":r<1800?\"\\u0686\\u06c8\\u0634\\u062a\\u0649\\u0646 \\u0643\\u06d0\\u064a\\u0649\\u0646\":\"\\u0643\\u06d5\\u0686\"},calendar:{sameDay:\"[\\u0628\\u06c8\\u06af\\u06c8\\u0646 \\u0633\\u0627\\u0626\\u06d5\\u062a] LT\",nextDay:\"[\\u0626\\u06d5\\u062a\\u06d5 \\u0633\\u0627\\u0626\\u06d5\\u062a] LT\",nextWeek:\"[\\u0643\\u06d0\\u0644\\u06d5\\u0631\\u0643\\u0649] dddd [\\u0633\\u0627\\u0626\\u06d5\\u062a] LT\",lastDay:\"[\\u062a\\u06c6\\u0646\\u06c8\\u06af\\u06c8\\u0646] LT\",lastWeek:\"[\\u0626\\u0627\\u0644\\u062f\\u0649\\u0646\\u0642\\u0649] dddd [\\u0633\\u0627\\u0626\\u06d5\\u062a] LT\",sameElse:\"L\"},relativeTime:{future:\"%s \\u0643\\u06d0\\u064a\\u0649\\u0646\",past:\"%s \\u0628\\u06c7\\u0631\\u06c7\\u0646\",s:\"\\u0646\\u06d5\\u0686\\u0686\\u06d5 \\u0633\\u06d0\\u0643\\u0648\\u0646\\u062a\",ss:\"%d \\u0633\\u06d0\\u0643\\u0648\\u0646\\u062a\",m:\"\\u0628\\u0649\\u0631 \\u0645\\u0649\\u0646\\u06c7\\u062a\",mm:\"%d \\u0645\\u0649\\u0646\\u06c7\\u062a\",h:\"\\u0628\\u0649\\u0631 \\u0633\\u0627\\u0626\\u06d5\\u062a\",hh:\"%d \\u0633\\u0627\\u0626\\u06d5\\u062a\",d:\"\\u0628\\u0649\\u0631 \\u0643\\u06c8\\u0646\",dd:\"%d \\u0643\\u06c8\\u0646\",M:\"\\u0628\\u0649\\u0631 \\u0626\\u0627\\u064a\",MM:\"%d \\u0626\\u0627\\u064a\",y:\"\\u0628\\u0649\\u0631 \\u064a\\u0649\\u0644\",yy:\"%d \\u064a\\u0649\\u0644\"},dayOfMonthOrdinalParse:/\\d{1,2}(-\\u0643\\u06c8\\u0646\\u0649|-\\u0626\\u0627\\u064a|-\\u06be\\u06d5\\u067e\\u062a\\u06d5)/,ordinal:function(t,e){switch(e){case\"d\":case\"D\":case\"DDD\":return t+\"-\\u0643\\u06c8\\u0646\\u0649\";case\"w\":case\"W\":return t+\"-\\u06be\\u06d5\\u067e\\u062a\\u06d5\";default:return t}},preparse:function(t){return t.replace(/\\u060c/g,\",\")},postformat:function(t){return t.replace(/,/g,\"\\u060c\")},week:{dow:1,doy:7}})}(n(\"wd/R\"))},Ylt2:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));var r=n(\"quSY\");class i extends r.a{constructor(t,e){super(),this.subject=t,this.subscriber=e,this.closed=!1}unsubscribe(){if(this.closed)return;this.closed=!0;const t=this.subject,e=t.observers;if(this.subject=null,!e||0===e.length||t.isStopped||t.closed)return;const n=e.indexOf(this.subscriber);-1!==n&&e.splice(n,1)}}},YuTi:function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,\"loaded\",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,\"id\",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},Z4QM:function(t,e,n){!function(t){\"use strict\";var e=[\"\\u062c\\u0646\\u0648\\u0631\\u064a\",\"\\u0641\\u064a\\u0628\\u0631\\u0648\\u0631\\u064a\",\"\\u0645\\u0627\\u0631\\u0686\",\"\\u0627\\u067e\\u0631\\u064a\\u0644\",\"\\u0645\\u0626\\u064a\",\"\\u062c\\u0648\\u0646\",\"\\u062c\\u0648\\u0644\\u0627\\u0621\\u0650\",\"\\u0622\\u06af\\u0633\\u067d\",\"\\u0633\\u064a\\u067e\\u067d\\u0645\\u0628\\u0631\",\"\\u0622\\u06aa\\u067d\\u0648\\u0628\\u0631\",\"\\u0646\\u0648\\u0645\\u0628\\u0631\",\"\\u068a\\u0633\\u0645\\u0628\\u0631\"],n=[\"\\u0622\\u0686\\u0631\",\"\\u0633\\u0648\\u0645\\u0631\",\"\\u0627\\u06b1\\u0627\\u0631\\u0648\",\"\\u0627\\u0631\\u0628\\u0639\",\"\\u062e\\u0645\\u064a\\u0633\",\"\\u062c\\u0645\\u0639\",\"\\u0687\\u0646\\u0687\\u0631\"];t.defineLocale(\"sd\",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd\\u060c D MMMM YYYY HH:mm\"},meridiemParse:/\\u0635\\u0628\\u062d|\\u0634\\u0627\\u0645/,isPM:function(t){return\"\\u0634\\u0627\\u0645\"===t},meridiem:function(t,e,n){return t<12?\"\\u0635\\u0628\\u062d\":\"\\u0634\\u0627\\u0645\"},calendar:{sameDay:\"[\\u0627\\u0684] LT\",nextDay:\"[\\u0633\\u0680\\u0627\\u06bb\\u064a] LT\",nextWeek:\"dddd [\\u0627\\u06b3\\u064a\\u0646 \\u0647\\u0641\\u062a\\u064a \\u062a\\u064a] LT\",lastDay:\"[\\u06aa\\u0627\\u0644\\u0647\\u0647] LT\",lastWeek:\"[\\u06af\\u0632\\u0631\\u064a\\u0644 \\u0647\\u0641\\u062a\\u064a] dddd [\\u062a\\u064a] LT\",sameElse:\"L\"},relativeTime:{future:\"%s \\u067e\\u0648\\u0621\",past:\"%s \\u0627\\u06b3\",s:\"\\u0686\\u0646\\u062f \\u0633\\u064a\\u06aa\\u0646\\u068a\",ss:\"%d \\u0633\\u064a\\u06aa\\u0646\\u068a\",m:\"\\u0647\\u06aa \\u0645\\u0646\\u067d\",mm:\"%d \\u0645\\u0646\\u067d\",h:\"\\u0647\\u06aa \\u06aa\\u0644\\u0627\\u06aa\",hh:\"%d \\u06aa\\u0644\\u0627\\u06aa\",d:\"\\u0647\\u06aa \\u068f\\u064a\\u0646\\u0647\\u0646\",dd:\"%d \\u068f\\u064a\\u0646\\u0647\\u0646\",M:\"\\u0647\\u06aa \\u0645\\u0647\\u064a\\u0646\\u0648\",MM:\"%d \\u0645\\u0647\\u064a\\u0646\\u0627\",y:\"\\u0647\\u06aa \\u0633\\u0627\\u0644\",yy:\"%d \\u0633\\u0627\\u0644\"},preparse:function(t){return t.replace(/\\u060c/g,\",\")},postformat:function(t){return t.replace(/,/g,\"\\u060c\")},week:{dow:1,doy:4}})}(n(\"wd/R\"))},ZAMP:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"ms-my\",{months:\"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember\".split(\"_\"),monthsShort:\"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis\".split(\"_\"),weekdays:\"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu\".split(\"_\"),weekdaysShort:\"Ahd_Isn_Sel_Rab_Kha_Jum_Sab\".split(\"_\"),weekdaysMin:\"Ah_Is_Sl_Rb_Km_Jm_Sb\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [pukul] HH.mm\",LLLL:\"dddd, D MMMM YYYY [pukul] HH.mm\"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),\"pagi\"===e?t:\"tengahari\"===e?t>=11?t:t+12:\"petang\"===e||\"malam\"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?\"pagi\":t<15?\"tengahari\":t<19?\"petang\":\"malam\"},calendar:{sameDay:\"[Hari ini pukul] LT\",nextDay:\"[Esok pukul] LT\",nextWeek:\"dddd [pukul] LT\",lastDay:\"[Kelmarin pukul] LT\",lastWeek:\"dddd [lepas pukul] LT\",sameElse:\"L\"},relativeTime:{future:\"dalam %s\",past:\"%s yang lepas\",s:\"beberapa saat\",ss:\"%d saat\",m:\"seminit\",mm:\"%d minit\",h:\"sejam\",hh:\"%d jam\",d:\"sehari\",dd:\"%d hari\",M:\"sebulan\",MM:\"%d bulan\",y:\"setahun\",yy:\"%d tahun\"},week:{dow:1,doy:7}})}(n(\"wd/R\"))},\"ZF+8\":function(t,e,n){\"use strict\";n.d(e,\"d\",(function(){return c})),n.d(e,\"c\",(function(){return a})),n.d(e,\"a\",(function(){return o.a})),n.d(e,\"b\",(function(){return s.a}));var r=n(\"wd/R\"),i=n(\"fXoL\");let a=(()=>{class t{dataToString(t){const e=r(t);return e&&e.isValid()?e.format(\"YYYY-MM-DD\"):\"\"}dataToStringWithFormat(t,e){const n=r(t);return n&&n.isValid()?n.format(e):\"\"}compare(t,e,n){return(t<e?-1:1)*(n?1:-1)}toCamel(t){return t.replace(/([-_][a-z])/gi,t=>t.toUpperCase().replace(\"-\",\"\").replace(\"_\",\"\"))}keysToCamel(t){if(t===Object(t)&&!Array.isArray(t)&&\"function\"!=typeof t){const e={};return Object.keys(t).forEach(n=>{e[this.toCamel(n)]=this.keysToCamel(t[n])}),e}return Array.isArray(t)?t.map(t=>this.keysToCamel(t)):t}formatErrorMessage(t){if(t)return t.error?t.error.message.toString():t.message?t.message.toString():t.toString()}trimString(t){return t?t.toString().toLocaleLowerCase().trim():t}filterArraysBasedOnId(){const t=[...arguments];return t.shift().filter(e=>t.every(t=>t.some(t=>t.id===e.id)))}isNumber(t){return\"number\"==typeof t&&!isNaN(t)&&isFinite(t)}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=i.Tb({token:t,factory:t.\\u0275fac,providedIn:\"root\"}),t})();var o=n(\"sIil\"),s=n(\"DHDI\"),l=n(\"nm5K\");const c=[a,o.a,s.a,l.a]},ZUHj:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return s}));var r=n(\"7o/Q\");class i extends r.a{constructor(t,e,n){super(),this.parent=t,this.outerValue=e,this.outerIndex=n,this.index=0}_next(t){this.parent.notifyNext(this.outerValue,t,this.outerIndex,this.index++,this)}_error(t){this.parent.notifyError(t,this),this.unsubscribe()}_complete(){this.parent.notifyComplete(this),this.unsubscribe()}}var a=n(\"SeVD\"),o=n(\"HDdC\");function s(t,e,n,r,s=new i(t,n,r)){if(!s.closed)return e instanceof o.a?e.subscribe(s):Object(a.a)(e)(s)}},Zduo:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"eo\",{months:\"januaro_februaro_marto_aprilo_majo_junio_julio_a\\u016dgusto_septembro_oktobro_novembro_decembro\".split(\"_\"),monthsShort:\"jan_feb_mart_apr_maj_jun_jul_a\\u016dg_sept_okt_nov_dec\".split(\"_\"),weekdays:\"diman\\u0109o_lundo_mardo_merkredo_\\u0135a\\u016ddo_vendredo_sabato\".split(\"_\"),weekdaysShort:\"dim_lun_mard_merk_\\u0135a\\u016d_ven_sab\".split(\"_\"),weekdaysMin:\"di_lu_ma_me_\\u0135a_ve_sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"[la] D[-an de] MMMM, YYYY\",LLL:\"[la] D[-an de] MMMM, YYYY HH:mm\",LLLL:\"dddd[n], [la] D[-an de] MMMM, YYYY HH:mm\",llll:\"ddd, [la] D[-an de] MMM, YYYY HH:mm\"},meridiemParse:/[ap]\\.t\\.m/i,isPM:function(t){return\"p\"===t.charAt(0).toLowerCase()},meridiem:function(t,e,n){return t>11?n?\"p.t.m.\":\"P.T.M.\":n?\"a.t.m.\":\"A.T.M.\"},calendar:{sameDay:\"[Hodia\\u016d je] LT\",nextDay:\"[Morga\\u016d je] LT\",nextWeek:\"dddd[n je] LT\",lastDay:\"[Hiera\\u016d je] LT\",lastWeek:\"[pasintan] dddd[n je] LT\",sameElse:\"L\"},relativeTime:{future:\"post %s\",past:\"anta\\u016d %s\",s:\"kelkaj sekundoj\",ss:\"%d sekundoj\",m:\"unu minuto\",mm:\"%d minutoj\",h:\"unu horo\",hh:\"%d horoj\",d:\"unu tago\",dd:\"%d tagoj\",M:\"unu monato\",MM:\"%d monatoj\",y:\"unu jaro\",yy:\"%d jaroj\"},dayOfMonthOrdinalParse:/\\d{1,2}a/,ordinal:\"%da\",week:{dow:1,doy:7}})}(n(\"wd/R\"))},aIdf:function(t,e,n){!function(t){\"use strict\";function e(t,e,n){return t+\" \"+function(t,e){return 2===e?function(t){var e={m:\"v\",b:\"v\",d:\"z\"};return void 0===e[t.charAt(0)]?t:e[t.charAt(0)]+t.substring(1)}(t):t}({mm:\"munutenn\",MM:\"miz\",dd:\"devezh\"}[n],t)}var n=[/^gen/i,/^c[\\u02bc\\']hwe/i,/^meu/i,/^ebr/i,/^mae/i,/^(mez|eve)/i,/^gou/i,/^eos/i,/^gwe/i,/^her/i,/^du/i,/^ker/i],r=/^(genver|c[\\u02bc\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[\\u02bc\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,i=[/^Su/i,/^Lu/i,/^Me([^r]|$)/i,/^Mer/i,/^Ya/i,/^Gw/i,/^Sa/i];t.defineLocale(\"br\",{months:\"Genver_C\\u02bchwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu\".split(\"_\"),monthsShort:\"Gen_C\\u02bchwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker\".split(\"_\"),weekdays:\"Sul_Lun_Meurzh_Merc\\u02bcher_Yaou_Gwener_Sadorn\".split(\"_\"),weekdaysShort:\"Sul_Lun_Meu_Mer_Yao_Gwe_Sad\".split(\"_\"),weekdaysMin:\"Su_Lu_Me_Mer_Ya_Gw_Sa\".split(\"_\"),weekdaysParse:i,fullWeekdaysParse:[/^sul/i,/^lun/i,/^meurzh/i,/^merc[\\u02bc\\']her/i,/^yaou/i,/^gwener/i,/^sadorn/i],shortWeekdaysParse:[/^Sul/i,/^Lun/i,/^Meu/i,/^Mer/i,/^Yao/i,/^Gwe/i,/^Sad/i],minWeekdaysParse:i,monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(genver|c[\\u02bc\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,monthsShortStrictRegex:/^(gen|c[\\u02bc\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [a viz] MMMM YYYY\",LLL:\"D [a viz] MMMM YYYY HH:mm\",LLLL:\"dddd, D [a viz] MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Hiziv da] LT\",nextDay:\"[Warc\\u02bchoazh da] LT\",nextWeek:\"dddd [da] LT\",lastDay:\"[Dec\\u02bch da] LT\",lastWeek:\"dddd [paset da] LT\",sameElse:\"L\"},relativeTime:{future:\"a-benn %s\",past:\"%s \\u02bczo\",s:\"un nebeud segondenno\\xf9\",ss:\"%d eilenn\",m:\"ur vunutenn\",mm:e,h:\"un eur\",hh:\"%d eur\",d:\"un devezh\",dd:e,M:\"ur miz\",MM:e,y:\"ur bloaz\",yy:function(t){switch(function t(e){return e>9?t(e%10):e}(t)){case 1:case 3:case 4:case 5:case 9:return t+\" bloaz\";default:return t+\" vloaz\"}}},dayOfMonthOrdinalParse:/\\d{1,2}(a\\xf1|vet)/,ordinal:function(t){return t+(1===t?\"a\\xf1\":\"vet\")},week:{dow:1,doy:4},meridiemParse:/a.m.|g.m./,isPM:function(t){return\"g.m.\"===t},meridiem:function(t,e,n){return t<12?\"a.m.\":\"g.m.\"}})}(n(\"wd/R\"))},aIsn:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"mi\",{months:\"Kohi-t\\u0101te_Hui-tanguru_Pout\\u016b-te-rangi_Paenga-wh\\u0101wh\\u0101_Haratua_Pipiri_H\\u014dngoingoi_Here-turi-k\\u014dk\\u0101_Mahuru_Whiringa-\\u0101-nuku_Whiringa-\\u0101-rangi_Hakihea\".split(\"_\"),monthsShort:\"Kohi_Hui_Pou_Pae_Hara_Pipi_H\\u014dngoi_Here_Mahu_Whi-nu_Whi-ra_Haki\".split(\"_\"),monthsRegex:/(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,monthsShortRegex:/(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,weekdays:\"R\\u0101tapu_Mane_T\\u016brei_Wenerei_T\\u0101ite_Paraire_H\\u0101tarei\".split(\"_\"),weekdaysShort:\"Ta_Ma_T\\u016b_We_T\\u0101i_Pa_H\\u0101\".split(\"_\"),weekdaysMin:\"Ta_Ma_T\\u016b_We_T\\u0101i_Pa_H\\u0101\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [i] HH:mm\",LLLL:\"dddd, D MMMM YYYY [i] HH:mm\"},calendar:{sameDay:\"[i teie mahana, i] LT\",nextDay:\"[apopo i] LT\",nextWeek:\"dddd [i] LT\",lastDay:\"[inanahi i] LT\",lastWeek:\"dddd [whakamutunga i] LT\",sameElse:\"L\"},relativeTime:{future:\"i roto i %s\",past:\"%s i mua\",s:\"te h\\u0113kona ruarua\",ss:\"%d h\\u0113kona\",m:\"he meneti\",mm:\"%d meneti\",h:\"te haora\",hh:\"%d haora\",d:\"he ra\",dd:\"%d ra\",M:\"he marama\",MM:\"%d marama\",y:\"he tau\",yy:\"%d tau\"},dayOfMonthOrdinalParse:/\\d{1,2}\\xba/,ordinal:\"%d\\xba\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},aQkU:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"mk\",{months:\"\\u0458\\u0430\\u043d\\u0443\\u0430\\u0440\\u0438_\\u0444\\u0435\\u0432\\u0440\\u0443\\u0430\\u0440\\u0438_\\u043c\\u0430\\u0440\\u0442_\\u0430\\u043f\\u0440\\u0438\\u043b_\\u043c\\u0430\\u0458_\\u0458\\u0443\\u043d\\u0438_\\u0458\\u0443\\u043b\\u0438_\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442_\\u0441\\u0435\\u043f\\u0442\\u0435\\u043c\\u0432\\u0440\\u0438_\\u043e\\u043a\\u0442\\u043e\\u043c\\u0432\\u0440\\u0438_\\u043d\\u043e\\u0435\\u043c\\u0432\\u0440\\u0438_\\u0434\\u0435\\u043a\\u0435\\u043c\\u0432\\u0440\\u0438\".split(\"_\"),monthsShort:\"\\u0458\\u0430\\u043d_\\u0444\\u0435\\u0432_\\u043c\\u0430\\u0440_\\u0430\\u043f\\u0440_\\u043c\\u0430\\u0458_\\u0458\\u0443\\u043d_\\u0458\\u0443\\u043b_\\u0430\\u0432\\u0433_\\u0441\\u0435\\u043f_\\u043e\\u043a\\u0442_\\u043d\\u043e\\u0435_\\u0434\\u0435\\u043a\".split(\"_\"),weekdays:\"\\u043d\\u0435\\u0434\\u0435\\u043b\\u0430_\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u043b\\u043d\\u0438\\u043a_\\u0432\\u0442\\u043e\\u0440\\u043d\\u0438\\u043a_\\u0441\\u0440\\u0435\\u0434\\u0430_\\u0447\\u0435\\u0442\\u0432\\u0440\\u0442\\u043e\\u043a_\\u043f\\u0435\\u0442\\u043e\\u043a_\\u0441\\u0430\\u0431\\u043e\\u0442\\u0430\".split(\"_\"),weekdaysShort:\"\\u043d\\u0435\\u0434_\\u043f\\u043e\\u043d_\\u0432\\u0442\\u043e_\\u0441\\u0440\\u0435_\\u0447\\u0435\\u0442_\\u043f\\u0435\\u0442_\\u0441\\u0430\\u0431\".split(\"_\"),weekdaysMin:\"\\u043de_\\u043fo_\\u0432\\u0442_\\u0441\\u0440_\\u0447\\u0435_\\u043f\\u0435_\\u0441a\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"D.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY H:mm\",LLLL:\"dddd, D MMMM YYYY H:mm\"},calendar:{sameDay:\"[\\u0414\\u0435\\u043d\\u0435\\u0441 \\u0432\\u043e] LT\",nextDay:\"[\\u0423\\u0442\\u0440\\u0435 \\u0432\\u043e] LT\",nextWeek:\"[\\u0412\\u043e] dddd [\\u0432\\u043e] LT\",lastDay:\"[\\u0412\\u0447\\u0435\\u0440\\u0430 \\u0432\\u043e] LT\",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return\"[\\u0418\\u0437\\u043c\\u0438\\u043d\\u0430\\u0442\\u0430\\u0442\\u0430] dddd [\\u0432\\u043e] LT\";case 1:case 2:case 4:case 5:return\"[\\u0418\\u0437\\u043c\\u0438\\u043d\\u0430\\u0442\\u0438\\u043e\\u0442] dddd [\\u0432\\u043e] LT\"}},sameElse:\"L\"},relativeTime:{future:\"\\u0437\\u0430 %s\",past:\"\\u043f\\u0440\\u0435\\u0434 %s\",s:\"\\u043d\\u0435\\u043a\\u043e\\u043b\\u043a\\u0443 \\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u0438\",ss:\"%d \\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u0438\",m:\"\\u0435\\u0434\\u043d\\u0430 \\u043c\\u0438\\u043d\\u0443\\u0442\\u0430\",mm:\"%d \\u043c\\u0438\\u043d\\u0443\\u0442\\u0438\",h:\"\\u0435\\u0434\\u0435\\u043d \\u0447\\u0430\\u0441\",hh:\"%d \\u0447\\u0430\\u0441\\u0430\",d:\"\\u0435\\u0434\\u0435\\u043d \\u0434\\u0435\\u043d\",dd:\"%d \\u0434\\u0435\\u043d\\u0430\",M:\"\\u0435\\u0434\\u0435\\u043d \\u043c\\u0435\\u0441\\u0435\\u0446\",MM:\"%d \\u043c\\u0435\\u0441\\u0435\\u0446\\u0438\",y:\"\\u0435\\u0434\\u043d\\u0430 \\u0433\\u043e\\u0434\\u0438\\u043d\\u0430\",yy:\"%d \\u0433\\u043e\\u0434\\u0438\\u043d\\u0438\"},dayOfMonthOrdinalParse:/\\d{1,2}-(\\u0435\\u0432|\\u0435\\u043d|\\u0442\\u0438|\\u0432\\u0438|\\u0440\\u0438|\\u043c\\u0438)/,ordinal:function(t){var e=t%10,n=t%100;return 0===t?t+\"-\\u0435\\u0432\":0===n?t+\"-\\u0435\\u043d\":n>10&&n<20?t+\"-\\u0442\\u0438\":1===e?t+\"-\\u0432\\u0438\":2===e?t+\"-\\u0440\\u0438\":7===e||8===e?t+\"-\\u043c\\u0438\":t+\"-\\u0442\\u0438\"},week:{dow:1,doy:7}})}(n(\"wd/R\"))},b1Dy:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"en-nz\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?\"th\":1===e?\"st\":2===e?\"nd\":3===e?\"rd\":\"th\")},week:{dow:1,doy:4}})}(n(\"wd/R\"))},bHdf:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return a}));var r=n(\"5+tZ\"),i=n(\"SpAZ\");function a(t=Number.POSITIVE_INFINITY){return Object(r.a)(i.a,t)}},bOMt:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"nb\",{months:\"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember\".split(\"_\"),monthsShort:\"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.\".split(\"_\"),monthsParseExact:!0,weekdays:\"s\\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\\xf8rdag\".split(\"_\"),weekdaysShort:\"s\\xf8._ma._ti._on._to._fr._l\\xf8.\".split(\"_\"),weekdaysMin:\"s\\xf8_ma_ti_on_to_fr_l\\xf8\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY [kl.] HH:mm\",LLLL:\"dddd D. MMMM YYYY [kl.] HH:mm\"},calendar:{sameDay:\"[i dag kl.] LT\",nextDay:\"[i morgen kl.] LT\",nextWeek:\"dddd [kl.] LT\",lastDay:\"[i g\\xe5r kl.] LT\",lastWeek:\"[forrige] dddd [kl.] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"%s siden\",s:\"noen sekunder\",ss:\"%d sekunder\",m:\"ett minutt\",mm:\"%d minutter\",h:\"en time\",hh:\"%d timer\",d:\"en dag\",dd:\"%d dager\",w:\"en uke\",ww:\"%d uker\",M:\"en m\\xe5ned\",MM:\"%d m\\xe5neder\",y:\"ett \\xe5r\",yy:\"%d \\xe5r\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},bOdf:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));var r=n(\"5+tZ\");function i(t,e){return Object(r.a)(t,e,1)}},bSwM:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return x})),n.d(e,\"b\",(function(){return k}));var r=n(\"8LU1\"),i=n(\"fXoL\"),a=n(\"3Pt+\"),o=n(\"FKr1\"),s=n(\"R1ws\"),l=n(\"GU7r\"),c=n(\"u47x\");const u=[\"input\"],h=function(){return{enterDuration:150}},d=[\"*\"],f=new i.w(\"mat-checkbox-default-options\",{providedIn:\"root\",factory:p});function p(){return{color:\"accent\",clickAction:\"check-indeterminate\"}}let m=0;const g=p(),y={provide:a.l,useExisting:Object(i.db)(()=>x),multi:!0};class v{}class _{constructor(t){this._elementRef=t}}const b=Object(o.B)(Object(o.w)(Object(o.x)(Object(o.y)(_))));let x=(()=>{class t extends b{constructor(t,e,n,r,a,o,s){super(t),this._changeDetectorRef=e,this._focusMonitor=n,this._ngZone=r,this._animationMode=o,this._options=s,this.ariaLabel=\"\",this.ariaLabelledby=null,this._uniqueId=\"mat-checkbox-\"+ ++m,this.id=this._uniqueId,this.labelPosition=\"after\",this.name=null,this.change=new i.s,this.indeterminateChange=new i.s,this._onTouched=()=>{},this._currentAnimationClass=\"\",this._currentCheckState=0,this._controlValueAccessorChangeFn=()=>{},this._checked=!1,this._disabled=!1,this._indeterminate=!1,this._options=this._options||g,this.color=this.defaultColor=this._options.color||g.color,this.tabIndex=parseInt(a)||0}get inputId(){return(this.id||this._uniqueId)+\"-input\"}get required(){return this._required}set required(t){this._required=Object(r.c)(t)}ngAfterViewInit(){this._focusMonitor.monitor(this._elementRef,!0).subscribe(t=>{t||Promise.resolve().then(()=>{this._onTouched(),this._changeDetectorRef.markForCheck()})}),this._syncIndeterminate(this._indeterminate)}ngAfterViewChecked(){}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef)}get checked(){return this._checked}set checked(t){t!=this.checked&&(this._checked=t,this._changeDetectorRef.markForCheck())}get disabled(){return this._disabled}set disabled(t){const e=Object(r.c)(t);e!==this.disabled&&(this._disabled=e,this._changeDetectorRef.markForCheck())}get indeterminate(){return this._indeterminate}set indeterminate(t){const e=t!=this._indeterminate;this._indeterminate=Object(r.c)(t),e&&(this._transitionCheckState(this._indeterminate?3:this.checked?1:2),this.indeterminateChange.emit(this._indeterminate)),this._syncIndeterminate(this._indeterminate)}_isRippleDisabled(){return this.disableRipple||this.disabled}_onLabelTextChange(){this._changeDetectorRef.detectChanges()}writeValue(t){this.checked=!!t}registerOnChange(t){this._controlValueAccessorChangeFn=t}registerOnTouched(t){this._onTouched=t}setDisabledState(t){this.disabled=t}_getAriaChecked(){return this.checked?\"true\":this.indeterminate?\"mixed\":\"false\"}_transitionCheckState(t){let e=this._currentCheckState,n=this._elementRef.nativeElement;if(e!==t&&(this._currentAnimationClass.length>0&&n.classList.remove(this._currentAnimationClass),this._currentAnimationClass=this._getAnimationClassForCheckStateTransition(e,t),this._currentCheckState=t,this._currentAnimationClass.length>0)){n.classList.add(this._currentAnimationClass);const t=this._currentAnimationClass;this._ngZone.runOutsideAngular(()=>{setTimeout(()=>{n.classList.remove(t)},1e3)})}}_emitChangeEvent(){const t=new v;t.source=this,t.checked=this.checked,this._controlValueAccessorChangeFn(this.checked),this.change.emit(t)}toggle(){this.checked=!this.checked}_onInputClick(t){var e;const n=null===(e=this._options)||void 0===e?void 0:e.clickAction;t.stopPropagation(),this.disabled||\"noop\"===n?this.disabled||\"noop\"!==n||(this._inputElement.nativeElement.checked=this.checked,this._inputElement.nativeElement.indeterminate=this.indeterminate):(this.indeterminate&&\"check\"!==n&&Promise.resolve().then(()=>{this._indeterminate=!1,this.indeterminateChange.emit(this._indeterminate)}),this.toggle(),this._transitionCheckState(this._checked?1:2),this._emitChangeEvent())}focus(t,e){t?this._focusMonitor.focusVia(this._inputElement,t,e):this._inputElement.nativeElement.focus(e)}_onInteractionEvent(t){t.stopPropagation()}_getAnimationClassForCheckStateTransition(t,e){if(\"NoopAnimations\"===this._animationMode)return\"\";let n=\"\";switch(t){case 0:if(1===e)n=\"unchecked-checked\";else{if(3!=e)return\"\";n=\"unchecked-indeterminate\"}break;case 2:n=1===e?\"unchecked-checked\":\"unchecked-indeterminate\";break;case 1:n=2===e?\"checked-unchecked\":\"checked-indeterminate\";break;case 3:n=1===e?\"indeterminate-checked\":\"indeterminate-unchecked\"}return\"mat-checkbox-anim-\"+n}_syncIndeterminate(t){const e=this._inputElement;e&&(e.nativeElement.indeterminate=t)}}return t.\\u0275fac=function(e){return new(e||t)(i.Xb(i.p),i.Xb(i.j),i.Xb(c.h),i.Xb(i.H),i.ic(\"tabindex\"),i.Xb(s.a,8),i.Xb(f,8))},t.\\u0275cmp=i.Rb({type:t,selectors:[[\"mat-checkbox\"]],viewQuery:function(t,e){if(1&t&&(i.Sc(u,!0),i.Sc(o.r,!0)),2&t){let t;i.Ac(t=i.mc())&&(e._inputElement=t.first),i.Ac(t=i.mc())&&(e.ripple=t.first)}},hostAttrs:[1,\"mat-checkbox\"],hostVars:12,hostBindings:function(t,e){2&t&&(i.gc(\"id\",e.id),i.Mb(\"tabindex\",null),i.Pb(\"mat-checkbox-indeterminate\",e.indeterminate)(\"mat-checkbox-checked\",e.checked)(\"mat-checkbox-disabled\",e.disabled)(\"mat-checkbox-label-before\",\"before\"==e.labelPosition)(\"_mat-animation-noopable\",\"NoopAnimations\"===e._animationMode))},inputs:{disableRipple:\"disableRipple\",color:\"color\",tabIndex:\"tabIndex\",ariaLabel:[\"aria-label\",\"ariaLabel\"],ariaLabelledby:[\"aria-labelledby\",\"ariaLabelledby\"],id:\"id\",labelPosition:\"labelPosition\",name:\"name\",required:\"required\",checked:\"checked\",disabled:\"disabled\",indeterminate:\"indeterminate\",ariaDescribedby:[\"aria-describedby\",\"ariaDescribedby\"],value:\"value\"},outputs:{change:\"change\",indeterminateChange:\"indeterminateChange\"},exportAs:[\"matCheckbox\"],features:[i.Kb([y]),i.Ib],ngContentSelectors:d,decls:17,vars:20,consts:[[1,\"mat-checkbox-layout\"],[\"label\",\"\"],[1,\"mat-checkbox-inner-container\"],[\"type\",\"checkbox\",1,\"mat-checkbox-input\",\"cdk-visually-hidden\",3,\"id\",\"required\",\"checked\",\"disabled\",\"tabIndex\",\"change\",\"click\"],[\"input\",\"\"],[\"matRipple\",\"\",1,\"mat-checkbox-ripple\",\"mat-focus-indicator\",3,\"matRippleTrigger\",\"matRippleDisabled\",\"matRippleRadius\",\"matRippleCentered\",\"matRippleAnimation\"],[1,\"mat-ripple-element\",\"mat-checkbox-persistent-ripple\"],[1,\"mat-checkbox-frame\"],[1,\"mat-checkbox-background\"],[\"version\",\"1.1\",\"focusable\",\"false\",\"viewBox\",\"0 0 24 24\",0,\"xml\",\"space\",\"preserve\",1,\"mat-checkbox-checkmark\"],[\"fill\",\"none\",\"stroke\",\"white\",\"d\",\"M4.1,12.7 9,17.6 20.3,6.3\",1,\"mat-checkbox-checkmark-path\"],[1,\"mat-checkbox-mixedmark\"],[1,\"mat-checkbox-label\",3,\"cdkObserveContent\"],[\"checkboxLabel\",\"\"],[2,\"display\",\"none\"]],template:function(t,e){if(1&t&&(i.uc(),i.dc(0,\"label\",0,1),i.dc(2,\"span\",2),i.dc(3,\"input\",3,4),i.lc(\"change\",(function(t){return e._onInteractionEvent(t)}))(\"click\",(function(t){return e._onInputClick(t)})),i.cc(),i.dc(5,\"span\",5),i.Yb(6,\"span\",6),i.cc(),i.Yb(7,\"span\",7),i.dc(8,\"span\",8),i.oc(),i.dc(9,\"svg\",9),i.Yb(10,\"path\",10),i.cc(),i.nc(),i.Yb(11,\"span\",11),i.cc(),i.cc(),i.dc(12,\"span\",12,13),i.lc(\"cdkObserveContent\",(function(){return e._onLabelTextChange()})),i.dc(14,\"span\",14),i.Oc(15,\"\\xa0\"),i.cc(),i.tc(16),i.cc(),i.cc()),2&t){const t=i.Bc(1),n=i.Bc(13);i.Mb(\"for\",e.inputId),i.Lb(2),i.Pb(\"mat-checkbox-inner-container-no-side-margin\",!n.textContent||!n.textContent.trim()),i.Lb(1),i.vc(\"id\",e.inputId)(\"required\",e.required)(\"checked\",e.checked)(\"disabled\",e.disabled)(\"tabIndex\",e.tabIndex),i.Mb(\"value\",e.value)(\"name\",e.name)(\"aria-label\",e.ariaLabel||null)(\"aria-labelledby\",e.ariaLabelledby)(\"aria-checked\",e._getAriaChecked())(\"aria-describedby\",e.ariaDescribedby),i.Lb(2),i.vc(\"matRippleTrigger\",t)(\"matRippleDisabled\",e._isRippleDisabled())(\"matRippleRadius\",20)(\"matRippleCentered\",!0)(\"matRippleAnimation\",i.xc(19,h))}},directives:[o.r,l.a],styles:[\"@keyframes mat-checkbox-fade-in-background{0%{opacity:0}50%{opacity:1}}@keyframes mat-checkbox-fade-out-background{0%,50%{opacity:1}100%{opacity:0}}@keyframes mat-checkbox-unchecked-checked-checkmark-path{0%,50%{stroke-dashoffset:22.910259}50%{animation-timing-function:cubic-bezier(0, 0, 0.2, 0.1)}100%{stroke-dashoffset:0}}@keyframes mat-checkbox-unchecked-indeterminate-mixedmark{0%,68.2%{transform:scaleX(0)}68.2%{animation-timing-function:cubic-bezier(0, 0, 0, 1)}100%{transform:scaleX(1)}}@keyframes mat-checkbox-checked-unchecked-checkmark-path{from{animation-timing-function:cubic-bezier(0.4, 0, 1, 1);stroke-dashoffset:0}to{stroke-dashoffset:-22.910259}}@keyframes mat-checkbox-checked-indeterminate-checkmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 0.1);opacity:1;transform:rotate(0deg)}to{opacity:0;transform:rotate(45deg)}}@keyframes mat-checkbox-indeterminate-checked-checkmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);opacity:0;transform:rotate(45deg)}to{opacity:1;transform:rotate(360deg)}}@keyframes mat-checkbox-checked-indeterminate-mixedmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 0.1);opacity:0;transform:rotate(-45deg)}to{opacity:1;transform:rotate(0deg)}}@keyframes mat-checkbox-indeterminate-checked-mixedmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);opacity:1;transform:rotate(0deg)}to{opacity:0;transform:rotate(315deg)}}@keyframes mat-checkbox-indeterminate-unchecked-mixedmark{0%{animation-timing-function:linear;opacity:1;transform:scaleX(1)}32.8%,100%{opacity:0;transform:scaleX(0)}}.mat-checkbox-background,.mat-checkbox-frame{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:2px;box-sizing:border-box;pointer-events:none}.mat-checkbox{display:inline-block;transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);cursor:pointer;-webkit-tap-highlight-color:transparent}._mat-animation-noopable.mat-checkbox{transition:none;animation:none}.mat-checkbox .mat-ripple-element:not(.mat-checkbox-persistent-ripple){opacity:.16}.mat-checkbox-layout{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:inherit;align-items:baseline;vertical-align:middle;display:inline-flex;white-space:nowrap}.mat-checkbox-label{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.mat-checkbox-inner-container{display:inline-block;height:16px;line-height:0;margin:auto;margin-right:8px;order:0;position:relative;vertical-align:middle;white-space:nowrap;width:16px;flex-shrink:0}[dir=rtl] .mat-checkbox-inner-container{margin-left:8px;margin-right:auto}.mat-checkbox-inner-container-no-side-margin{margin-left:0;margin-right:0}.mat-checkbox-frame{background-color:transparent;transition:border-color 90ms cubic-bezier(0, 0, 0.2, 0.1);border-width:2px;border-style:solid}._mat-animation-noopable .mat-checkbox-frame{transition:none}.cdk-high-contrast-active .mat-checkbox.cdk-keyboard-focused .mat-checkbox-frame{border-style:dotted}.mat-checkbox-background{align-items:center;display:inline-flex;justify-content:center;transition:background-color 90ms cubic-bezier(0, 0, 0.2, 0.1),opacity 90ms cubic-bezier(0, 0, 0.2, 0.1)}._mat-animation-noopable .mat-checkbox-background{transition:none}.cdk-high-contrast-active .mat-checkbox .mat-checkbox-background{background:none}.mat-checkbox-persistent-ripple{display:block;width:100%;height:100%;transform:none}.mat-checkbox-inner-container:hover .mat-checkbox-persistent-ripple{opacity:.04}.mat-checkbox.cdk-keyboard-focused .mat-checkbox-persistent-ripple{opacity:.12}.mat-checkbox-persistent-ripple,.mat-checkbox.mat-checkbox-disabled .mat-checkbox-inner-container:hover .mat-checkbox-persistent-ripple{opacity:0}@media(hover: none){.mat-checkbox-inner-container:hover .mat-checkbox-persistent-ripple{display:none}}.mat-checkbox-checkmark{top:0;left:0;right:0;bottom:0;position:absolute;width:100%}.mat-checkbox-checkmark-path{stroke-dashoffset:22.910259;stroke-dasharray:22.910259;stroke-width:2.1333333333px}.cdk-high-contrast-black-on-white .mat-checkbox-checkmark-path{stroke:#000 !important}.mat-checkbox-mixedmark{width:calc(100% - 6px);height:2px;opacity:0;transform:scaleX(0) rotate(0deg);border-radius:2px}.cdk-high-contrast-active .mat-checkbox-mixedmark{height:0;border-top:solid 2px;margin-top:2px}.mat-checkbox-label-before .mat-checkbox-inner-container{order:1;margin-left:8px;margin-right:auto}[dir=rtl] .mat-checkbox-label-before .mat-checkbox-inner-container{margin-left:auto;margin-right:8px}.mat-checkbox-checked .mat-checkbox-checkmark{opacity:1}.mat-checkbox-checked .mat-checkbox-checkmark-path{stroke-dashoffset:0}.mat-checkbox-checked .mat-checkbox-mixedmark{transform:scaleX(1) rotate(-45deg)}.mat-checkbox-indeterminate .mat-checkbox-checkmark{opacity:0;transform:rotate(45deg)}.mat-checkbox-indeterminate .mat-checkbox-checkmark-path{stroke-dashoffset:0}.mat-checkbox-indeterminate .mat-checkbox-mixedmark{opacity:1;transform:scaleX(1) rotate(0deg)}.mat-checkbox-unchecked .mat-checkbox-background{background-color:transparent}.mat-checkbox-disabled{cursor:default}.cdk-high-contrast-active .mat-checkbox-disabled{opacity:.5}.mat-checkbox-anim-unchecked-checked .mat-checkbox-background{animation:180ms linear 0ms mat-checkbox-fade-in-background}.mat-checkbox-anim-unchecked-checked .mat-checkbox-checkmark-path{animation:180ms linear 0ms mat-checkbox-unchecked-checked-checkmark-path}.mat-checkbox-anim-unchecked-indeterminate .mat-checkbox-background{animation:180ms linear 0ms mat-checkbox-fade-in-background}.mat-checkbox-anim-unchecked-indeterminate .mat-checkbox-mixedmark{animation:90ms linear 0ms mat-checkbox-unchecked-indeterminate-mixedmark}.mat-checkbox-anim-checked-unchecked .mat-checkbox-background{animation:180ms linear 0ms mat-checkbox-fade-out-background}.mat-checkbox-anim-checked-unchecked .mat-checkbox-checkmark-path{animation:90ms linear 0ms mat-checkbox-checked-unchecked-checkmark-path}.mat-checkbox-anim-checked-indeterminate .mat-checkbox-checkmark{animation:90ms linear 0ms mat-checkbox-checked-indeterminate-checkmark}.mat-checkbox-anim-checked-indeterminate .mat-checkbox-mixedmark{animation:90ms linear 0ms mat-checkbox-checked-indeterminate-mixedmark}.mat-checkbox-anim-indeterminate-checked .mat-checkbox-checkmark{animation:500ms linear 0ms mat-checkbox-indeterminate-checked-checkmark}.mat-checkbox-anim-indeterminate-checked .mat-checkbox-mixedmark{animation:500ms linear 0ms mat-checkbox-indeterminate-checked-mixedmark}.mat-checkbox-anim-indeterminate-unchecked .mat-checkbox-background{animation:180ms linear 0ms mat-checkbox-fade-out-background}.mat-checkbox-anim-indeterminate-unchecked .mat-checkbox-mixedmark{animation:300ms linear 0ms mat-checkbox-indeterminate-unchecked-mixedmark}.mat-checkbox-input{bottom:0;left:50%}.mat-checkbox .mat-checkbox-ripple{position:absolute;left:calc(50% - 20px);top:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}\\n\"],encapsulation:2,changeDetection:0}),t})(),w=(()=>{class t{}return t.\\u0275mod=i.Vb({type:t}),t.\\u0275inj=i.Ub({factory:function(e){return new(e||t)}}),t})(),k=(()=>{class t{}return t.\\u0275mod=i.Vb({type:t}),t.\\u0275inj=i.Ub({factory:function(e){return new(e||t)},imports:[[o.s,o.i,l.c,w],o.i,w]}),t})()},bTqV:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return p})),n.d(e,\"b\",(function(){return f})),n.d(e,\"c\",(function(){return m}));var r=n(\"FKr1\"),i=n(\"R1ws\"),a=n(\"fXoL\"),o=n(\"u47x\");const s=[\"mat-button\",\"\"],l=[\"*\"],c=\".mat-button .mat-button-focus-overlay,.mat-icon-button .mat-button-focus-overlay{opacity:0}.mat-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay,.mat-stroked-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay{opacity:.04}@media(hover: none){.mat-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay,.mat-stroked-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay{opacity:0}}.mat-button,.mat-icon-button,.mat-stroked-button,.mat-flat-button{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible}.mat-button::-moz-focus-inner,.mat-icon-button::-moz-focus-inner,.mat-stroked-button::-moz-focus-inner,.mat-flat-button::-moz-focus-inner{border:0}.mat-button.mat-button-disabled,.mat-icon-button.mat-button-disabled,.mat-stroked-button.mat-button-disabled,.mat-flat-button.mat-button-disabled{cursor:default}.mat-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-button.cdk-program-focused .mat-button-focus-overlay,.mat-icon-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-icon-button.cdk-program-focused .mat-button-focus-overlay,.mat-stroked-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-stroked-button.cdk-program-focused .mat-button-focus-overlay,.mat-flat-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-flat-button.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-button::-moz-focus-inner,.mat-icon-button::-moz-focus-inner,.mat-stroked-button::-moz-focus-inner,.mat-flat-button::-moz-focus-inner{border:0}.mat-raised-button{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;transform:translate3d(0, 0, 0);transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-raised-button::-moz-focus-inner{border:0}.mat-raised-button.mat-button-disabled{cursor:default}.mat-raised-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-raised-button.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-raised-button::-moz-focus-inner{border:0}._mat-animation-noopable.mat-raised-button{transition:none;animation:none}.mat-stroked-button{border:1px solid currentColor;padding:0 15px;line-height:34px}.mat-stroked-button .mat-button-ripple.mat-ripple,.mat-stroked-button .mat-button-focus-overlay{top:-1px;left:-1px;right:-1px;bottom:-1px}.mat-fab{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;transform:translate3d(0, 0, 0);transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);min-width:0;border-radius:50%;width:56px;height:56px;padding:0;flex-shrink:0}.mat-fab::-moz-focus-inner{border:0}.mat-fab.mat-button-disabled{cursor:default}.mat-fab.cdk-keyboard-focused .mat-button-focus-overlay,.mat-fab.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-fab::-moz-focus-inner{border:0}._mat-animation-noopable.mat-fab{transition:none;animation:none}.mat-fab .mat-button-wrapper{padding:16px 0;display:inline-block;line-height:24px}.mat-mini-fab{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;transform:translate3d(0, 0, 0);transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);min-width:0;border-radius:50%;width:40px;height:40px;padding:0;flex-shrink:0}.mat-mini-fab::-moz-focus-inner{border:0}.mat-mini-fab.mat-button-disabled{cursor:default}.mat-mini-fab.cdk-keyboard-focused .mat-button-focus-overlay,.mat-mini-fab.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-mini-fab::-moz-focus-inner{border:0}._mat-animation-noopable.mat-mini-fab{transition:none;animation:none}.mat-mini-fab .mat-button-wrapper{padding:8px 0;display:inline-block;line-height:24px}.mat-icon-button{padding:0;min-width:0;width:40px;height:40px;flex-shrink:0;line-height:40px;border-radius:50%}.mat-icon-button i,.mat-icon-button .mat-icon{line-height:24px}.mat-button-ripple.mat-ripple,.mat-button-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-button-ripple.mat-ripple:not(:empty){transform:translateZ(0)}.mat-button-focus-overlay{opacity:0;transition:opacity 200ms cubic-bezier(0.35, 0, 0.25, 1),background-color 200ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable .mat-button-focus-overlay{transition:none}.mat-button-ripple-round{border-radius:50%;z-index:1}.mat-button .mat-button-wrapper>*,.mat-flat-button .mat-button-wrapper>*,.mat-stroked-button .mat-button-wrapper>*,.mat-raised-button .mat-button-wrapper>*,.mat-icon-button .mat-button-wrapper>*,.mat-fab .mat-button-wrapper>*,.mat-mini-fab .mat-button-wrapper>*{vertical-align:middle}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button{display:inline-flex;justify-content:center;align-items:center;font-size:inherit;width:2.5em;height:2.5em}.cdk-high-contrast-active .mat-button,.cdk-high-contrast-active .mat-flat-button,.cdk-high-contrast-active .mat-raised-button,.cdk-high-contrast-active .mat-icon-button,.cdk-high-contrast-active .mat-fab,.cdk-high-contrast-active .mat-mini-fab{outline:solid 1px}.cdk-high-contrast-active .mat-button-base.cdk-keyboard-focused,.cdk-high-contrast-active .mat-button-base.cdk-program-focused{outline:solid 3px}\\n\",u=[\"mat-button\",\"mat-flat-button\",\"mat-icon-button\",\"mat-raised-button\",\"mat-stroked-button\",\"mat-mini-fab\",\"mat-fab\"];class h{constructor(t){this._elementRef=t}}const d=Object(r.w)(Object(r.y)(Object(r.x)(h)));let f=(()=>{class t extends d{constructor(t,e,n){super(t),this._focusMonitor=e,this._animationMode=n,this.isRoundButton=this._hasHostAttributes(\"mat-fab\",\"mat-mini-fab\"),this.isIconButton=this._hasHostAttributes(\"mat-icon-button\");for(const r of u)this._hasHostAttributes(r)&&this._getHostElement().classList.add(r);t.nativeElement.classList.add(\"mat-button-base\"),this.isRoundButton&&(this.color=\"accent\")}ngAfterViewInit(){this._focusMonitor.monitor(this._elementRef,!0)}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef)}focus(t,e){t?this._focusMonitor.focusVia(this._getHostElement(),t,e):this._getHostElement().focus(e)}_getHostElement(){return this._elementRef.nativeElement}_isRippleDisabled(){return this.disableRipple||this.disabled}_hasHostAttributes(...t){return t.some(t=>this._getHostElement().hasAttribute(t))}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(a.p),a.Xb(o.h),a.Xb(i.a,8))},t.\\u0275cmp=a.Rb({type:t,selectors:[[\"button\",\"mat-button\",\"\"],[\"button\",\"mat-raised-button\",\"\"],[\"button\",\"mat-icon-button\",\"\"],[\"button\",\"mat-fab\",\"\"],[\"button\",\"mat-mini-fab\",\"\"],[\"button\",\"mat-stroked-button\",\"\"],[\"button\",\"mat-flat-button\",\"\"]],viewQuery:function(t,e){if(1&t&&a.Sc(r.r,!0),2&t){let t;a.Ac(t=a.mc())&&(e.ripple=t.first)}},hostAttrs:[1,\"mat-focus-indicator\"],hostVars:5,hostBindings:function(t,e){2&t&&(a.Mb(\"disabled\",e.disabled||null),a.Pb(\"_mat-animation-noopable\",\"NoopAnimations\"===e._animationMode)(\"mat-button-disabled\",e.disabled))},inputs:{disabled:\"disabled\",disableRipple:\"disableRipple\",color:\"color\"},exportAs:[\"matButton\"],features:[a.Ib],attrs:s,ngContentSelectors:l,decls:4,vars:5,consts:[[1,\"mat-button-wrapper\"],[\"matRipple\",\"\",1,\"mat-button-ripple\",3,\"matRippleDisabled\",\"matRippleCentered\",\"matRippleTrigger\"],[1,\"mat-button-focus-overlay\"]],template:function(t,e){1&t&&(a.uc(),a.dc(0,\"span\",0),a.tc(1),a.cc(),a.Yb(2,\"span\",1),a.Yb(3,\"span\",2)),2&t&&(a.Lb(2),a.Pb(\"mat-button-ripple-round\",e.isRoundButton||e.isIconButton),a.vc(\"matRippleDisabled\",e._isRippleDisabled())(\"matRippleCentered\",e.isIconButton)(\"matRippleTrigger\",e._getHostElement()))},directives:[r.r],styles:[c],encapsulation:2,changeDetection:0}),t})(),p=(()=>{class t extends f{constructor(t,e,n){super(e,t,n)}_haltDisabledEvents(t){this.disabled&&(t.preventDefault(),t.stopImmediatePropagation())}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(o.h),a.Xb(a.p),a.Xb(i.a,8))},t.\\u0275cmp=a.Rb({type:t,selectors:[[\"a\",\"mat-button\",\"\"],[\"a\",\"mat-raised-button\",\"\"],[\"a\",\"mat-icon-button\",\"\"],[\"a\",\"mat-fab\",\"\"],[\"a\",\"mat-mini-fab\",\"\"],[\"a\",\"mat-stroked-button\",\"\"],[\"a\",\"mat-flat-button\",\"\"]],hostAttrs:[1,\"mat-focus-indicator\"],hostVars:7,hostBindings:function(t,e){1&t&&a.lc(\"click\",(function(t){return e._haltDisabledEvents(t)})),2&t&&(a.Mb(\"tabindex\",e.disabled?-1:e.tabIndex||0)(\"disabled\",e.disabled||null)(\"aria-disabled\",e.disabled.toString()),a.Pb(\"_mat-animation-noopable\",\"NoopAnimations\"===e._animationMode)(\"mat-button-disabled\",e.disabled))},inputs:{disabled:\"disabled\",disableRipple:\"disableRipple\",color:\"color\",tabIndex:\"tabIndex\"},exportAs:[\"matButton\",\"matAnchor\"],features:[a.Ib],attrs:s,ngContentSelectors:l,decls:4,vars:5,consts:[[1,\"mat-button-wrapper\"],[\"matRipple\",\"\",1,\"mat-button-ripple\",3,\"matRippleDisabled\",\"matRippleCentered\",\"matRippleTrigger\"],[1,\"mat-button-focus-overlay\"]],template:function(t,e){1&t&&(a.uc(),a.dc(0,\"span\",0),a.tc(1),a.cc(),a.Yb(2,\"span\",1),a.Yb(3,\"span\",2)),2&t&&(a.Lb(2),a.Pb(\"mat-button-ripple-round\",e.isRoundButton||e.isIconButton),a.vc(\"matRippleDisabled\",e._isRippleDisabled())(\"matRippleCentered\",e.isIconButton)(\"matRippleTrigger\",e._getHostElement()))},directives:[r.r],styles:[c],encapsulation:2,changeDetection:0}),t})(),m=(()=>{class t{}return t.\\u0275mod=a.Vb({type:t}),t.\\u0275inj=a.Ub({factory:function(e){return new(e||t)},imports:[[r.s,r.i],r.i]}),t})()},bXm7:function(t,e,n){!function(t){\"use strict\";var e={0:\"-\\u0448\\u0456\",1:\"-\\u0448\\u0456\",2:\"-\\u0448\\u0456\",3:\"-\\u0448\\u0456\",4:\"-\\u0448\\u0456\",5:\"-\\u0448\\u0456\",6:\"-\\u0448\\u044b\",7:\"-\\u0448\\u0456\",8:\"-\\u0448\\u0456\",9:\"-\\u0448\\u044b\",10:\"-\\u0448\\u044b\",20:\"-\\u0448\\u044b\",30:\"-\\u0448\\u044b\",40:\"-\\u0448\\u044b\",50:\"-\\u0448\\u0456\",60:\"-\\u0448\\u044b\",70:\"-\\u0448\\u0456\",80:\"-\\u0448\\u0456\",90:\"-\\u0448\\u044b\",100:\"-\\u0448\\u0456\"};t.defineLocale(\"kk\",{months:\"\\u049b\\u0430\\u04a3\\u0442\\u0430\\u0440_\\u0430\\u049b\\u043f\\u0430\\u043d_\\u043d\\u0430\\u0443\\u0440\\u044b\\u0437_\\u0441\\u04d9\\u0443\\u0456\\u0440_\\u043c\\u0430\\u043c\\u044b\\u0440_\\u043c\\u0430\\u0443\\u0441\\u044b\\u043c_\\u0448\\u0456\\u043b\\u0434\\u0435_\\u0442\\u0430\\u043c\\u044b\\u0437_\\u049b\\u044b\\u0440\\u043a\\u04af\\u0439\\u0435\\u043a_\\u049b\\u0430\\u0437\\u0430\\u043d_\\u049b\\u0430\\u0440\\u0430\\u0448\\u0430_\\u0436\\u0435\\u043b\\u0442\\u043e\\u049b\\u0441\\u0430\\u043d\".split(\"_\"),monthsShort:\"\\u049b\\u0430\\u04a3_\\u0430\\u049b\\u043f_\\u043d\\u0430\\u0443_\\u0441\\u04d9\\u0443_\\u043c\\u0430\\u043c_\\u043c\\u0430\\u0443_\\u0448\\u0456\\u043b_\\u0442\\u0430\\u043c_\\u049b\\u044b\\u0440_\\u049b\\u0430\\u0437_\\u049b\\u0430\\u0440_\\u0436\\u0435\\u043b\".split(\"_\"),weekdays:\"\\u0436\\u0435\\u043a\\u0441\\u0435\\u043d\\u0431\\u0456_\\u0434\\u04af\\u0439\\u0441\\u0435\\u043d\\u0431\\u0456_\\u0441\\u0435\\u0439\\u0441\\u0435\\u043d\\u0431\\u0456_\\u0441\\u04d9\\u0440\\u0441\\u0435\\u043d\\u0431\\u0456_\\u0431\\u0435\\u0439\\u0441\\u0435\\u043d\\u0431\\u0456_\\u0436\\u04b1\\u043c\\u0430_\\u0441\\u0435\\u043d\\u0431\\u0456\".split(\"_\"),weekdaysShort:\"\\u0436\\u0435\\u043a_\\u0434\\u04af\\u0439_\\u0441\\u0435\\u0439_\\u0441\\u04d9\\u0440_\\u0431\\u0435\\u0439_\\u0436\\u04b1\\u043c_\\u0441\\u0435\\u043d\".split(\"_\"),weekdaysMin:\"\\u0436\\u043a_\\u0434\\u0439_\\u0441\\u0439_\\u0441\\u0440_\\u0431\\u0439_\\u0436\\u043c_\\u0441\\u043d\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[\\u0411\\u04af\\u0433\\u0456\\u043d \\u0441\\u0430\\u0493\\u0430\\u0442] LT\",nextDay:\"[\\u0415\\u0440\\u0442\\u0435\\u04a3 \\u0441\\u0430\\u0493\\u0430\\u0442] LT\",nextWeek:\"dddd [\\u0441\\u0430\\u0493\\u0430\\u0442] LT\",lastDay:\"[\\u041a\\u0435\\u0448\\u0435 \\u0441\\u0430\\u0493\\u0430\\u0442] LT\",lastWeek:\"[\\u04e8\\u0442\\u043a\\u0435\\u043d \\u0430\\u043f\\u0442\\u0430\\u043d\\u044b\\u04a3] dddd [\\u0441\\u0430\\u0493\\u0430\\u0442] LT\",sameElse:\"L\"},relativeTime:{future:\"%s \\u0456\\u0448\\u0456\\u043d\\u0434\\u0435\",past:\"%s \\u0431\\u04b1\\u0440\\u044b\\u043d\",s:\"\\u0431\\u0456\\u0440\\u043d\\u0435\\u0448\\u0435 \\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\",ss:\"%d \\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\",m:\"\\u0431\\u0456\\u0440 \\u043c\\u0438\\u043d\\u0443\\u0442\",mm:\"%d \\u043c\\u0438\\u043d\\u0443\\u0442\",h:\"\\u0431\\u0456\\u0440 \\u0441\\u0430\\u0493\\u0430\\u0442\",hh:\"%d \\u0441\\u0430\\u0493\\u0430\\u0442\",d:\"\\u0431\\u0456\\u0440 \\u043a\\u04af\\u043d\",dd:\"%d \\u043a\\u04af\\u043d\",M:\"\\u0431\\u0456\\u0440 \\u0430\\u0439\",MM:\"%d \\u0430\\u0439\",y:\"\\u0431\\u0456\\u0440 \\u0436\\u044b\\u043b\",yy:\"%d \\u0436\\u044b\\u043b\"},dayOfMonthOrdinalParse:/\\d{1,2}-(\\u0448\\u0456|\\u0448\\u044b)/,ordinal:function(t){return t+(e[t]||e[t%10]||e[t>=100?100:null])},week:{dow:1,doy:7}})}(n(\"wd/R\"))},bYM6:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"ar-tn\",{months:\"\\u062c\\u0627\\u0646\\u0641\\u064a_\\u0641\\u064a\\u0641\\u0631\\u064a_\\u0645\\u0627\\u0631\\u0633_\\u0623\\u0641\\u0631\\u064a\\u0644_\\u0645\\u0627\\u064a_\\u062c\\u0648\\u0627\\u0646_\\u062c\\u0648\\u064a\\u0644\\u064a\\u0629_\\u0623\\u0648\\u062a_\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631_\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631_\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631_\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\".split(\"_\"),monthsShort:\"\\u062c\\u0627\\u0646\\u0641\\u064a_\\u0641\\u064a\\u0641\\u0631\\u064a_\\u0645\\u0627\\u0631\\u0633_\\u0623\\u0641\\u0631\\u064a\\u0644_\\u0645\\u0627\\u064a_\\u062c\\u0648\\u0627\\u0646_\\u062c\\u0648\\u064a\\u0644\\u064a\\u0629_\\u0623\\u0648\\u062a_\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631_\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631_\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631_\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\".split(\"_\"),weekdays:\"\\u0627\\u0644\\u0623\\u062d\\u062f_\\u0627\\u0644\\u0625\\u062b\\u0646\\u064a\\u0646_\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621_\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621_\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633_\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629_\\u0627\\u0644\\u0633\\u0628\\u062a\".split(\"_\"),weekdaysShort:\"\\u0623\\u062d\\u062f_\\u0625\\u062b\\u0646\\u064a\\u0646_\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621_\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621_\\u062e\\u0645\\u064a\\u0633_\\u062c\\u0645\\u0639\\u0629_\\u0633\\u0628\\u062a\".split(\"_\"),weekdaysMin:\"\\u062d_\\u0646_\\u062b_\\u0631_\\u062e_\\u062c_\\u0633\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[\\u0627\\u0644\\u064a\\u0648\\u0645 \\u0639\\u0644\\u0649 \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",nextDay:\"[\\u063a\\u062f\\u0627 \\u0639\\u0644\\u0649 \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",nextWeek:\"dddd [\\u0639\\u0644\\u0649 \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",lastDay:\"[\\u0623\\u0645\\u0633 \\u0639\\u0644\\u0649 \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",lastWeek:\"dddd [\\u0639\\u0644\\u0649 \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",sameElse:\"L\"},relativeTime:{future:\"\\u0641\\u064a %s\",past:\"\\u0645\\u0646\\u0630 %s\",s:\"\\u062b\\u0648\\u0627\\u0646\",ss:\"%d \\u062b\\u0627\\u0646\\u064a\\u0629\",m:\"\\u062f\\u0642\\u064a\\u0642\\u0629\",mm:\"%d \\u062f\\u0642\\u0627\\u0626\\u0642\",h:\"\\u0633\\u0627\\u0639\\u0629\",hh:\"%d \\u0633\\u0627\\u0639\\u0627\\u062a\",d:\"\\u064a\\u0648\\u0645\",dd:\"%d \\u0623\\u064a\\u0627\\u0645\",M:\"\\u0634\\u0647\\u0631\",MM:\"%d \\u0623\\u0634\\u0647\\u0631\",y:\"\\u0633\\u0646\\u0629\",yy:\"%d \\u0633\\u0646\\u0648\\u0627\\u062a\"},week:{dow:1,doy:4}})}(n(\"wd/R\"))},bpih:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"it\",{months:\"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre\".split(\"_\"),monthsShort:\"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic\".split(\"_\"),weekdays:\"domenica_luned\\xec_marted\\xec_mercoled\\xec_gioved\\xec_venerd\\xec_sabato\".split(\"_\"),weekdaysShort:\"dom_lun_mar_mer_gio_ven_sab\".split(\"_\"),weekdaysMin:\"do_lu_ma_me_gi_ve_sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:function(){return\"[Oggi a\"+(this.hours()>1?\"lle \":0===this.hours()?\" \":\"ll'\")+\"]LT\"},nextDay:function(){return\"[Domani a\"+(this.hours()>1?\"lle \":0===this.hours()?\" \":\"ll'\")+\"]LT\"},nextWeek:function(){return\"dddd [a\"+(this.hours()>1?\"lle \":0===this.hours()?\" \":\"ll'\")+\"]LT\"},lastDay:function(){return\"[Ieri a\"+(this.hours()>1?\"lle \":0===this.hours()?\" \":\"ll'\")+\"]LT\"},lastWeek:function(){switch(this.day()){case 0:return\"[La scorsa] dddd [a\"+(this.hours()>1?\"lle \":0===this.hours()?\" \":\"ll'\")+\"]LT\";default:return\"[Lo scorso] dddd [a\"+(this.hours()>1?\"lle \":0===this.hours()?\" \":\"ll'\")+\"]LT\"}},sameElse:\"L\"},relativeTime:{future:\"tra %s\",past:\"%s fa\",s:\"alcuni secondi\",ss:\"%d secondi\",m:\"un minuto\",mm:\"%d minuti\",h:\"un'ora\",hh:\"%d ore\",d:\"un giorno\",dd:\"%d giorni\",w:\"una settimana\",ww:\"%d settimane\",M:\"un mese\",MM:\"%d mesi\",y:\"un anno\",yy:\"%d anni\"},dayOfMonthOrdinalParse:/\\d{1,2}\\xba/,ordinal:\"%d\\xba\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},bxKX:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"it-ch\",{months:\"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre\".split(\"_\"),monthsShort:\"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic\".split(\"_\"),weekdays:\"domenica_luned\\xec_marted\\xec_mercoled\\xec_gioved\\xec_venerd\\xec_sabato\".split(\"_\"),weekdaysShort:\"dom_lun_mar_mer_gio_ven_sab\".split(\"_\"),weekdaysMin:\"do_lu_ma_me_gi_ve_sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Oggi alle] LT\",nextDay:\"[Domani alle] LT\",nextWeek:\"dddd [alle] LT\",lastDay:\"[Ieri alle] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[la scorsa] dddd [alle] LT\";default:return\"[lo scorso] dddd [alle] LT\"}},sameElse:\"L\"},relativeTime:{future:function(t){return(/^[0-9].+$/.test(t)?\"tra\":\"in\")+\" \"+t},past:\"%s fa\",s:\"alcuni secondi\",ss:\"%d secondi\",m:\"un minuto\",mm:\"%d minuti\",h:\"un'ora\",hh:\"%d ore\",d:\"un giorno\",dd:\"%d giorni\",M:\"un mese\",MM:\"%d mesi\",y:\"un anno\",yy:\"%d anni\"},dayOfMonthOrdinalParse:/\\d{1,2}\\xba/,ordinal:\"%d\\xba\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},c2HN:function(t,e,n){\"use strict\";function r(t){return!!t&&\"function\"!=typeof t.subscribe&&\"function\"==typeof t.then}n.d(e,\"a\",(function(){return r}))},cH1L:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return s})),n.d(e,\"b\",(function(){return o}));var r=n(\"fXoL\"),i=n(\"ofXK\");const a=new r.w(\"cdk-dir-doc\",{providedIn:\"root\",factory:function(){return Object(r.fb)(i.d)}});let o=(()=>{class t{constructor(t){if(this.value=\"ltr\",this.change=new r.s,t){const e=t.documentElement?t.documentElement.dir:null,n=(t.body?t.body.dir:null)||e;this.value=\"ltr\"===n||\"rtl\"===n?n:\"ltr\"}}ngOnDestroy(){this.change.complete()}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(a,8))},t.\\u0275prov=Object(r.Tb)({factory:function(){return new t(Object(r.hc)(a,8))},token:t,providedIn:\"root\"}),t})(),s=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)}}),t})()},cRix:function(t,e,n){!function(t){\"use strict\";var e=\"jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.\".split(\"_\"),n=\"jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des\".split(\"_\");t.defineLocale(\"fy\",{months:\"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber\".split(\"_\"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsParseExact:!0,weekdays:\"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon\".split(\"_\"),weekdaysShort:\"si._mo._ti._wo._to._fr._so.\".split(\"_\"),weekdaysMin:\"Si_Mo_Ti_Wo_To_Fr_So\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD-MM-YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[hjoed om] LT\",nextDay:\"[moarn om] LT\",nextWeek:\"dddd [om] LT\",lastDay:\"[juster om] LT\",lastWeek:\"[\\xf4fr\\xfbne] dddd [om] LT\",sameElse:\"L\"},relativeTime:{future:\"oer %s\",past:\"%s lyn\",s:\"in pear sekonden\",ss:\"%d sekonden\",m:\"ien min\\xfat\",mm:\"%d minuten\",h:\"ien oere\",hh:\"%d oeren\",d:\"ien dei\",dd:\"%d dagen\",M:\"ien moanne\",MM:\"%d moannen\",y:\"ien jier\",yy:\"%d jierren\"},dayOfMonthOrdinalParse:/\\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?\"ste\":\"de\")},week:{dow:1,doy:4}})}(n(\"wd/R\"))},cp0P:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return l}));var r=n(\"HDdC\"),i=n(\"DH7j\"),a=n(\"lJxs\"),o=n(\"XoHu\"),s=n(\"Cfvw\");function l(...t){if(1===t.length){const e=t[0];if(Object(i.a)(e))return c(e,null);if(Object(o.a)(e)&&Object.getPrototypeOf(e)===Object.prototype){const t=Object.keys(e);return c(t.map(t=>e[t]),t)}}if(\"function\"==typeof t[t.length-1]){const e=t.pop();return c(t=1===t.length&&Object(i.a)(t[0])?t[0]:t,null).pipe(Object(a.a)(t=>e(...t)))}return c(t,null)}function c(t,e){return new r.a(n=>{const r=t.length;if(0===r)return void n.complete();const i=new Array(r);let a=0,o=0;for(let l=0;l<r;l++){const c=Object(s.a)(t[l]);let u=!1;n.add(c.subscribe({next:t=>{u||(u=!0,o++),i[l]=t},error:t=>n.error(t),complete:()=>{a++,a!==r&&u||(o===r&&n.next(e?e.reduce((t,e,n)=>(t[e]=i[n],t),{}):i),n.complete())}}))}})}},czMo:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"en-il\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?\"th\":1===e?\"st\":2===e?\"nd\":3===e?\"rd\":\"th\")}})}(n(\"wd/R\"))},d3UM:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return q})),n.d(e,\"b\",(function(){return X}));var r=n(\"rDax\"),i=n(\"ofXK\"),a=n(\"fXoL\"),o=n(\"FKr1\"),s=n(\"kmnG\"),l=n(\"vxfF\"),c=n(\"u47x\"),u=n(\"8LU1\"),h=n(\"0EQZ\"),d=n(\"FtGj\"),f=n(\"XNiG\"),p=n(\"NXyV\"),m=n(\"VRyK\"),g=n(\"JX91\"),y=n(\"eIep\"),v=n(\"IzEk\"),_=n(\"pLZG\"),b=n(\"lJxs\"),x=n(\"/uUt\"),w=n(\"1G5W\"),k=n(\"R0Ic\"),M=n(\"cH1L\"),T=n(\"3Pt+\");const S=[\"trigger\"],A=[\"panel\"];function L(t,e){if(1&t&&(a.dc(0,\"span\",8),a.Oc(1),a.cc()),2&t){const t=a.pc();a.Lb(1),a.Pc(t.placeholder||\"\\xa0\")}}function C(t,e){if(1&t&&(a.dc(0,\"span\"),a.Oc(1),a.cc()),2&t){const t=a.pc(2);a.Lb(1),a.Pc(t.triggerValue||\"\\xa0\")}}function E(t,e){1&t&&a.tc(0,0,[\"*ngSwitchCase\",\"true\"])}function O(t,e){if(1&t&&(a.dc(0,\"span\",9),a.Mc(1,C,2,1,\"span\",10),a.Mc(2,E,1,0,\"ng-content\",11),a.cc()),2&t){const t=a.pc();a.vc(\"ngSwitch\",!!t.customTrigger),a.Lb(2),a.vc(\"ngSwitchCase\",!0)}}function D(t,e){if(1&t){const t=a.ec();a.dc(0,\"div\",12),a.dc(1,\"div\",13,14),a.lc(\"@transformPanel.done\",(function(e){return a.Ec(t),a.pc()._panelDoneAnimatingStream.next(e.toState)}))(\"keydown\",(function(e){return a.Ec(t),a.pc()._handleKeydown(e)})),a.tc(3,1),a.cc(),a.cc()}if(2&t){const t=a.pc();a.vc(\"@transformPanelWrap\",void 0),a.Lb(1),a.Ob(\"mat-select-panel \",t._getPanelTheme(),\"\"),a.Jc(\"transform-origin\",t._transformOrigin)(\"font-size\",t._triggerFontSize,\"px\"),a.vc(\"ngClass\",t.panelClass)(\"@transformPanel\",t.multiple?\"showing-multiple\":\"showing\"),a.Mb(\"id\",t.id+\"-panel\")(\"aria-multiselectable\",t.multiple)(\"aria-label\",t.ariaLabel||null)(\"aria-labelledby\",t._getPanelAriaLabelledby())}}const I=[[[\"mat-select-trigger\"]],\"*\"],P=[\"mat-select-trigger\",\"*\"],R={transformPanelWrap:Object(k.m)(\"transformPanelWrap\",[Object(k.l)(\"* => void\",Object(k.h)(\"@transformPanel\",[Object(k.f)()],{optional:!0}))]),transformPanel:Object(k.m)(\"transformPanel\",[Object(k.j)(\"void\",Object(k.k)({transform:\"scaleY(0.8)\",minWidth:\"100%\",opacity:0})),Object(k.j)(\"showing\",Object(k.k)({opacity:1,minWidth:\"calc(100% + 32px)\",transform:\"scaleY(1)\"})),Object(k.j)(\"showing-multiple\",Object(k.k)({opacity:1,minWidth:\"calc(100% + 64px)\",transform:\"scaleY(1)\"})),Object(k.l)(\"void => *\",Object(k.e)(\"120ms cubic-bezier(0, 0, 0.2, 1)\")),Object(k.l)(\"* => void\",Object(k.e)(\"100ms 25ms linear\",Object(k.k)({opacity:0})))])};let z=0;const j=256,F=new a.w(\"mat-select-scroll-strategy\"),N=new a.w(\"MAT_SELECT_CONFIG\"),B={provide:F,deps:[r.c],useFactory:function(t){return()=>t.scrollStrategies.reposition()}};class Y{constructor(t,e){this.source=t,this.value=e}}class H{constructor(t,e,n,r,i){this._elementRef=t,this._defaultErrorStateMatcher=e,this._parentForm=n,this._parentFormGroup=r,this.ngControl=i}}const V=Object(o.x)(Object(o.B)(Object(o.y)(Object(o.z)(H)))),U=new a.w(\"MatSelectTrigger\");let W=(()=>{class t extends V{constructor(t,e,n,r,i,o,s,l,c,u,h,d,x,w){var k,M,T;super(i,r,s,l,u),this._viewportRuler=t,this._changeDetectorRef=e,this._ngZone=n,this._dir=o,this._parentFormField=c,this.ngControl=u,this._liveAnnouncer=x,this._defaultOptions=w,this._panelOpen=!1,this._compareWith=(t,e)=>t===e,this._uid=\"mat-select-\"+z++,this._triggerAriaLabelledBy=null,this._destroy=new f.a,this._onChange=()=>{},this._onTouched=()=>{},this._valueId=\"mat-select-value-\"+z++,this._panelDoneAnimatingStream=new f.a,this._overlayPanelClass=(null===(k=this._defaultOptions)||void 0===k?void 0:k.overlayPanelClass)||\"\",this._focused=!1,this.controlType=\"mat-select\",this._required=!1,this._multiple=!1,this._disableOptionCentering=null!==(T=null===(M=this._defaultOptions)||void 0===M?void 0:M.disableOptionCentering)&&void 0!==T&&T,this.ariaLabel=\"\",this.optionSelectionChanges=Object(p.a)(()=>{const t=this.options;return t?t.changes.pipe(Object(g.a)(t),Object(y.a)(()=>Object(m.a)(...t.map(t=>t.onSelectionChange)))):this._ngZone.onStable.pipe(Object(v.a)(1),Object(y.a)(()=>this.optionSelectionChanges))}),this.openedChange=new a.s,this._openedStream=this.openedChange.pipe(Object(_.a)(t=>t),Object(b.a)(()=>{})),this._closedStream=this.openedChange.pipe(Object(_.a)(t=>!t),Object(b.a)(()=>{})),this.selectionChange=new a.s,this.valueChange=new a.s,this.ngControl&&(this.ngControl.valueAccessor=this),null!=(null==w?void 0:w.typeaheadDebounceInterval)&&(this._typeaheadDebounceInterval=w.typeaheadDebounceInterval),this._scrollStrategyFactory=d,this._scrollStrategy=this._scrollStrategyFactory(),this.tabIndex=parseInt(h)||0,this.id=this.id}get focused(){return this._focused||this._panelOpen}get placeholder(){return this._placeholder}set placeholder(t){this._placeholder=t,this.stateChanges.next()}get required(){return this._required}set required(t){this._required=Object(u.c)(t),this.stateChanges.next()}get multiple(){return this._multiple}set multiple(t){this._multiple=Object(u.c)(t)}get disableOptionCentering(){return this._disableOptionCentering}set disableOptionCentering(t){this._disableOptionCentering=Object(u.c)(t)}get compareWith(){return this._compareWith}set compareWith(t){this._compareWith=t,this._selectionModel&&this._initializeSelection()}get value(){return this._value}set value(t){t!==this._value&&(this.options&&this._setSelectionByValue(t),this._value=t)}get typeaheadDebounceInterval(){return this._typeaheadDebounceInterval}set typeaheadDebounceInterval(t){this._typeaheadDebounceInterval=Object(u.f)(t)}get id(){return this._id}set id(t){this._id=t||this._uid,this.stateChanges.next()}ngOnInit(){this._selectionModel=new h.c(this.multiple),this.stateChanges.next(),this._panelDoneAnimatingStream.pipe(Object(x.a)(),Object(w.a)(this._destroy)).subscribe(()=>this._panelDoneAnimating(this.panelOpen))}ngAfterContentInit(){this._initKeyManager(),this._selectionModel.changed.pipe(Object(w.a)(this._destroy)).subscribe(t=>{t.added.forEach(t=>t.select()),t.removed.forEach(t=>t.deselect())}),this.options.changes.pipe(Object(g.a)(null),Object(w.a)(this._destroy)).subscribe(()=>{this._resetOptions(),this._initializeSelection()})}ngDoCheck(){const t=this._getTriggerAriaLabelledby();if(t!==this._triggerAriaLabelledBy){const e=this._elementRef.nativeElement;this._triggerAriaLabelledBy=t,t?e.setAttribute(\"aria-labelledby\",t):e.removeAttribute(\"aria-labelledby\")}this.ngControl&&this.updateErrorState()}ngOnChanges(t){t.disabled&&this.stateChanges.next(),t.typeaheadDebounceInterval&&this._keyManager&&this._keyManager.withTypeAhead(this._typeaheadDebounceInterval)}ngOnDestroy(){this._destroy.next(),this._destroy.complete(),this.stateChanges.complete()}toggle(){this.panelOpen?this.close():this.open()}open(){this._canOpen()&&(this._panelOpen=!0,this._keyManager.withHorizontalOrientation(null),this._highlightCorrectOption(),this._changeDetectorRef.markForCheck())}close(){this._panelOpen&&(this._panelOpen=!1,this._keyManager.withHorizontalOrientation(this._isRtl()?\"rtl\":\"ltr\"),this._changeDetectorRef.markForCheck(),this._onTouched())}writeValue(t){this.value=t}registerOnChange(t){this._onChange=t}registerOnTouched(t){this._onTouched=t}setDisabledState(t){this.disabled=t,this._changeDetectorRef.markForCheck(),this.stateChanges.next()}get panelOpen(){return this._panelOpen}get selected(){return this.multiple?this._selectionModel.selected:this._selectionModel.selected[0]}get triggerValue(){if(this.empty)return\"\";if(this._multiple){const t=this._selectionModel.selected.map(t=>t.viewValue);return this._isRtl()&&t.reverse(),t.join(\", \")}return this._selectionModel.selected[0].viewValue}_isRtl(){return!!this._dir&&\"rtl\"===this._dir.value}_handleKeydown(t){this.disabled||(this.panelOpen?this._handleOpenKeydown(t):this._handleClosedKeydown(t))}_handleClosedKeydown(t){const e=t.keyCode,n=e===d.c||e===d.o||e===d.h||e===d.l,r=e===d.e||e===d.m,i=this._keyManager;if(!i.isTyping()&&r&&!Object(d.r)(t)||(this.multiple||t.altKey)&&n)t.preventDefault(),this.open();else if(!this.multiple){const e=this.selected;i.onKeydown(t);const n=this.selected;n&&e!==n&&this._liveAnnouncer.announce(n.viewValue,1e4)}}_handleOpenKeydown(t){const e=this._keyManager,n=t.keyCode,r=n===d.c||n===d.o,i=e.isTyping();if(r&&t.altKey)t.preventDefault(),this.close();else if(i||n!==d.e&&n!==d.m||!e.activeItem||Object(d.r)(t))if(!i&&this._multiple&&n===d.a&&t.ctrlKey){t.preventDefault();const e=this.options.some(t=>!t.disabled&&!t.selected);this.options.forEach(t=>{t.disabled||(e?t.select():t.deselect())})}else{const n=e.activeItemIndex;e.onKeydown(t),this._multiple&&r&&t.shiftKey&&e.activeItem&&e.activeItemIndex!==n&&e.activeItem._selectViaInteraction()}else t.preventDefault(),e.activeItem._selectViaInteraction()}_onFocus(){this.disabled||(this._focused=!0,this.stateChanges.next())}_onBlur(){this._focused=!1,this.disabled||this.panelOpen||(this._onTouched(),this._changeDetectorRef.markForCheck(),this.stateChanges.next())}_onAttached(){this.overlayDir.positionChange.pipe(Object(v.a)(1)).subscribe(()=>{this._changeDetectorRef.detectChanges(),this._positioningSettled()})}_getPanelTheme(){return this._parentFormField?\"mat-\"+this._parentFormField.color:\"\"}get empty(){return!this._selectionModel||this._selectionModel.isEmpty()}_initializeSelection(){Promise.resolve().then(()=>{this._setSelectionByValue(this.ngControl?this.ngControl.value:this._value),this.stateChanges.next()})}_setSelectionByValue(t){if(this._selectionModel.selected.forEach(t=>t.setInactiveStyles()),this._selectionModel.clear(),this.multiple&&t)Array.isArray(t),t.forEach(t=>this._selectValue(t)),this._sortValues();else{const e=this._selectValue(t);e?this._keyManager.updateActiveItem(e):this.panelOpen||this._keyManager.updateActiveItem(-1)}this._changeDetectorRef.markForCheck()}_selectValue(t){const e=this.options.find(e=>{try{return null!=e.value&&this._compareWith(e.value,t)}catch(n){return!1}});return e&&this._selectionModel.select(e),e}_initKeyManager(){this._keyManager=new c.b(this.options).withTypeAhead(this._typeaheadDebounceInterval).withVerticalOrientation().withHorizontalOrientation(this._isRtl()?\"rtl\":\"ltr\").withHomeAndEnd().withAllowedModifierKeys([\"shiftKey\"]),this._keyManager.tabOut.pipe(Object(w.a)(this._destroy)).subscribe(()=>{this.panelOpen&&(!this.multiple&&this._keyManager.activeItem&&this._keyManager.activeItem._selectViaInteraction(),this.focus(),this.close())}),this._keyManager.change.pipe(Object(w.a)(this._destroy)).subscribe(()=>{this._panelOpen&&this.panel?this._scrollOptionIntoView(this._keyManager.activeItemIndex||0):this._panelOpen||this.multiple||!this._keyManager.activeItem||this._keyManager.activeItem._selectViaInteraction()})}_resetOptions(){const t=Object(m.a)(this.options.changes,this._destroy);this.optionSelectionChanges.pipe(Object(w.a)(t)).subscribe(t=>{this._onSelect(t.source,t.isUserInput),t.isUserInput&&!this.multiple&&this._panelOpen&&(this.close(),this.focus())}),Object(m.a)(...this.options.map(t=>t._stateChanges)).pipe(Object(w.a)(t)).subscribe(()=>{this._changeDetectorRef.markForCheck(),this.stateChanges.next()})}_onSelect(t,e){const n=this._selectionModel.isSelected(t);null!=t.value||this._multiple?(n!==t.selected&&(t.selected?this._selectionModel.select(t):this._selectionModel.deselect(t)),e&&this._keyManager.setActiveItem(t),this.multiple&&(this._sortValues(),e&&this.focus())):(t.deselect(),this._selectionModel.clear(),null!=this.value&&this._propagateChanges(t.value)),n!==this._selectionModel.isSelected(t)&&this._propagateChanges(),this.stateChanges.next()}_sortValues(){if(this.multiple){const t=this.options.toArray();this._selectionModel.sort((e,n)=>this.sortComparator?this.sortComparator(e,n,t):t.indexOf(e)-t.indexOf(n)),this.stateChanges.next()}}_propagateChanges(t){let e=null;e=this.multiple?this.selected.map(t=>t.value):this.selected?this.selected.value:t,this._value=e,this.valueChange.emit(e),this._onChange(e),this.selectionChange.emit(this._getChangeEvent(e)),this._changeDetectorRef.markForCheck()}_highlightCorrectOption(){this._keyManager&&(this.empty?this._keyManager.setFirstItemActive():this._keyManager.setActiveItem(this._selectionModel.selected[0]))}_canOpen(){var t;return!this._panelOpen&&!this.disabled&&(null===(t=this.options)||void 0===t?void 0:t.length)>0}focus(t){this._elementRef.nativeElement.focus(t)}_getPanelAriaLabelledby(){if(this.ariaLabel)return null;const t=this._getLabelId();return this.ariaLabelledby?t+\" \"+this.ariaLabelledby:t}_getAriaActiveDescendant(){return this.panelOpen&&this._keyManager&&this._keyManager.activeItem?this._keyManager.activeItem.id:null}_getLabelId(){var t;return(null===(t=this._parentFormField)||void 0===t?void 0:t.getLabelId())||\"\"}_getTriggerAriaLabelledby(){if(this.ariaLabel)return null;let t=this._getLabelId()+\" \"+this._valueId;return this.ariaLabelledby&&(t+=\" \"+this.ariaLabelledby),t}_panelDoneAnimating(t){this.openedChange.emit(t)}setDescribedByIds(t){this._ariaDescribedby=t.join(\" \")}onContainerClick(){this.focus(),this.open()}get shouldLabelFloat(){return this._panelOpen||!this.empty}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(l.e),a.Xb(a.j),a.Xb(a.H),a.Xb(o.d),a.Xb(a.p),a.Xb(M.b,8),a.Xb(T.p,8),a.Xb(T.i,8),a.Xb(s.a,8),a.Xb(T.m,10),a.ic(\"tabindex\"),a.Xb(F),a.Xb(c.k),a.Xb(N,8))},t.\\u0275dir=a.Sb({type:t,viewQuery:function(t,e){if(1&t&&(a.Sc(S,!0),a.Sc(A,!0),a.Sc(r.a,!0)),2&t){let t;a.Ac(t=a.mc())&&(e.trigger=t.first),a.Ac(t=a.mc())&&(e.panel=t.first),a.Ac(t=a.mc())&&(e.overlayDir=t.first)}},inputs:{ariaLabel:[\"aria-label\",\"ariaLabel\"],id:\"id\",placeholder:\"placeholder\",required:\"required\",multiple:\"multiple\",disableOptionCentering:\"disableOptionCentering\",compareWith:\"compareWith\",value:\"value\",typeaheadDebounceInterval:\"typeaheadDebounceInterval\",panelClass:\"panelClass\",ariaLabelledby:[\"aria-labelledby\",\"ariaLabelledby\"],errorStateMatcher:\"errorStateMatcher\",sortComparator:\"sortComparator\"},outputs:{openedChange:\"openedChange\",_openedStream:\"opened\",_closedStream:\"closed\",selectionChange:\"selectionChange\",valueChange:\"valueChange\"},features:[a.Ib,a.Jb]}),t})(),q=(()=>{class t extends W{constructor(){super(...arguments),this._scrollTop=0,this._triggerFontSize=0,this._transformOrigin=\"top\",this._offsetY=0,this._positions=[{originX:\"start\",originY:\"top\",overlayX:\"start\",overlayY:\"top\"},{originX:\"start\",originY:\"bottom\",overlayX:\"start\",overlayY:\"bottom\"}]}_calculateOverlayScroll(t,e,n){const r=this._getItemHeight();return Math.min(Math.max(0,r*t-e+r/2),n)}ngOnInit(){super.ngOnInit(),this._viewportRuler.change().pipe(Object(w.a)(this._destroy)).subscribe(()=>{this.panelOpen&&(this._triggerRect=this.trigger.nativeElement.getBoundingClientRect(),this._changeDetectorRef.markForCheck())})}open(){super._canOpen()&&(super.open(),this._triggerRect=this.trigger.nativeElement.getBoundingClientRect(),this._triggerFontSize=parseInt(getComputedStyle(this.trigger.nativeElement).fontSize||\"0\"),this._calculateOverlayPosition(),this._ngZone.onStable.pipe(Object(v.a)(1)).subscribe(()=>{this._triggerFontSize&&this.overlayDir.overlayRef&&this.overlayDir.overlayRef.overlayElement&&(this.overlayDir.overlayRef.overlayElement.style.fontSize=this._triggerFontSize+\"px\")}))}_scrollOptionIntoView(t){const e=Object(o.u)(t,this.options,this.optionGroups),n=this._getItemHeight();this.panel.nativeElement.scrollTop=Object(o.v)((t+e)*n,n,this.panel.nativeElement.scrollTop,j)}_positioningSettled(){this._calculateOverlayOffsetX(),this.panel.nativeElement.scrollTop=this._scrollTop}_panelDoneAnimating(t){this.panelOpen?this._scrollTop=0:(this.overlayDir.offsetX=0,this._changeDetectorRef.markForCheck()),super._panelDoneAnimating(t)}_getChangeEvent(t){return new Y(this,t)}_calculateOverlayOffsetX(){const t=this.overlayDir.overlayRef.overlayElement.getBoundingClientRect(),e=this._viewportRuler.getViewportSize(),n=this._isRtl(),r=this.multiple?56:32;let i;if(this.multiple)i=40;else{let t=this._selectionModel.selected[0]||this.options.first;i=t&&t.group?32:16}n||(i*=-1);const a=0-(t.left+i-(n?r:0)),o=t.right+i-e.width+(n?0:r);a>0?i+=a+8:o>0&&(i-=o+8),this.overlayDir.offsetX=Math.round(i),this.overlayDir.overlayRef.updatePosition()}_calculateOverlayOffsetY(t,e,n){const r=this._getItemHeight(),i=(r-this._triggerRect.height)/2,a=Math.floor(j/r);let o;return this.disableOptionCentering?0:(o=0===this._scrollTop?t*r:this._scrollTop===n?(t-(this._getItemCount()-a))*r+(r-(this._getItemCount()*r-j)%r):e-r/2,Math.round(-1*o-i))}_checkOverlayWithinViewport(t){const e=this._getItemHeight(),n=this._viewportRuler.getViewportSize(),r=this._triggerRect.top-8,i=n.height-this._triggerRect.bottom-8,a=Math.abs(this._offsetY),o=Math.min(this._getItemCount()*e,j)-a-this._triggerRect.height;o>i?this._adjustPanelUp(o,i):a>r?this._adjustPanelDown(a,r,t):this._transformOrigin=this._getOriginBasedOnOption()}_adjustPanelUp(t,e){const n=Math.round(t-e);this._scrollTop-=n,this._offsetY-=n,this._transformOrigin=this._getOriginBasedOnOption(),this._scrollTop<=0&&(this._scrollTop=0,this._offsetY=0,this._transformOrigin=\"50% bottom 0px\")}_adjustPanelDown(t,e,n){const r=Math.round(t-e);if(this._scrollTop+=r,this._offsetY+=r,this._transformOrigin=this._getOriginBasedOnOption(),this._scrollTop>=n)return this._scrollTop=n,this._offsetY=0,void(this._transformOrigin=\"50% top 0px\")}_calculateOverlayPosition(){const t=this._getItemHeight(),e=this._getItemCount(),n=Math.min(e*t,j),r=e*t-n;let i;i=this.empty?0:Math.max(this.options.toArray().indexOf(this._selectionModel.selected[0]),0),i+=Object(o.u)(i,this.options,this.optionGroups);const a=n/2;this._scrollTop=this._calculateOverlayScroll(i,a,r),this._offsetY=this._calculateOverlayOffsetY(i,a,r),this._checkOverlayWithinViewport(r)}_getOriginBasedOnOption(){const t=this._getItemHeight(),e=(t-this._triggerRect.height)/2;return`50% ${Math.abs(this._offsetY)-e+t/2}px 0px`}_getItemHeight(){return 3*this._triggerFontSize}_getItemCount(){return this.options.length+this.optionGroups.length}}return t.\\u0275fac=function(e){return G(e||t)},t.\\u0275cmp=a.Rb({type:t,selectors:[[\"mat-select\"]],contentQueries:function(t,e,n){if(1&t&&(a.Qb(n,U,!0),a.Qb(n,o.m,!0),a.Qb(n,o.f,!0)),2&t){let t;a.Ac(t=a.mc())&&(e.customTrigger=t.first),a.Ac(t=a.mc())&&(e.options=t),a.Ac(t=a.mc())&&(e.optionGroups=t)}},hostAttrs:[\"role\",\"combobox\",\"aria-autocomplete\",\"none\",\"aria-haspopup\",\"true\",1,\"mat-select\"],hostVars:20,hostBindings:function(t,e){1&t&&a.lc(\"keydown\",(function(t){return e._handleKeydown(t)}))(\"focus\",(function(){return e._onFocus()}))(\"blur\",(function(){return e._onBlur()})),2&t&&(a.Mb(\"id\",e.id)(\"tabindex\",e.tabIndex)(\"aria-controls\",e.panelOpen?e.id+\"-panel\":null)(\"aria-expanded\",e.panelOpen)(\"aria-label\",e.ariaLabel||null)(\"aria-required\",e.required.toString())(\"aria-disabled\",e.disabled.toString())(\"aria-invalid\",e.errorState)(\"aria-describedby\",e._ariaDescribedby||null)(\"aria-activedescendant\",e._getAriaActiveDescendant()),a.Pb(\"mat-select-disabled\",e.disabled)(\"mat-select-invalid\",e.errorState)(\"mat-select-required\",e.required)(\"mat-select-empty\",e.empty)(\"mat-select-multiple\",e.multiple))},inputs:{disabled:\"disabled\",disableRipple:\"disableRipple\",tabIndex:\"tabIndex\"},exportAs:[\"matSelect\"],features:[a.Kb([{provide:s.d,useExisting:t},{provide:o.g,useExisting:t}]),a.Ib],ngContentSelectors:P,decls:9,vars:12,consts:[[\"cdk-overlay-origin\",\"\",1,\"mat-select-trigger\",3,\"click\"],[\"origin\",\"cdkOverlayOrigin\",\"trigger\",\"\"],[1,\"mat-select-value\",3,\"ngSwitch\"],[\"class\",\"mat-select-placeholder\",4,\"ngSwitchCase\"],[\"class\",\"mat-select-value-text\",3,\"ngSwitch\",4,\"ngSwitchCase\"],[1,\"mat-select-arrow-wrapper\"],[1,\"mat-select-arrow\"],[\"cdk-connected-overlay\",\"\",\"cdkConnectedOverlayLockPosition\",\"\",\"cdkConnectedOverlayHasBackdrop\",\"\",\"cdkConnectedOverlayBackdropClass\",\"cdk-overlay-transparent-backdrop\",3,\"cdkConnectedOverlayPanelClass\",\"cdkConnectedOverlayScrollStrategy\",\"cdkConnectedOverlayOrigin\",\"cdkConnectedOverlayOpen\",\"cdkConnectedOverlayPositions\",\"cdkConnectedOverlayMinWidth\",\"cdkConnectedOverlayOffsetY\",\"backdropClick\",\"attach\",\"detach\"],[1,\"mat-select-placeholder\"],[1,\"mat-select-value-text\",3,\"ngSwitch\"],[4,\"ngSwitchDefault\"],[4,\"ngSwitchCase\"],[1,\"mat-select-panel-wrap\"],[\"role\",\"listbox\",\"tabindex\",\"-1\",3,\"ngClass\",\"keydown\"],[\"panel\",\"\"]],template:function(t,e){if(1&t&&(a.uc(I),a.dc(0,\"div\",0,1),a.lc(\"click\",(function(){return e.toggle()})),a.dc(3,\"div\",2),a.Mc(4,L,2,1,\"span\",3),a.Mc(5,O,3,2,\"span\",4),a.cc(),a.dc(6,\"div\",5),a.Yb(7,\"div\",6),a.cc(),a.cc(),a.Mc(8,D,4,14,\"ng-template\",7),a.lc(\"backdropClick\",(function(){return e.close()}))(\"attach\",(function(){return e._onAttached()}))(\"detach\",(function(){return e.close()}))),2&t){const t=a.Bc(1);a.Mb(\"aria-owns\",e.panelOpen?e.id+\"-panel\":null),a.Lb(3),a.vc(\"ngSwitch\",e.empty),a.Mb(\"id\",e._valueId),a.Lb(1),a.vc(\"ngSwitchCase\",!0),a.Lb(1),a.vc(\"ngSwitchCase\",!1),a.Lb(3),a.vc(\"cdkConnectedOverlayPanelClass\",e._overlayPanelClass)(\"cdkConnectedOverlayScrollStrategy\",e._scrollStrategy)(\"cdkConnectedOverlayOrigin\",t)(\"cdkConnectedOverlayOpen\",e.panelOpen)(\"cdkConnectedOverlayPositions\",e._positions)(\"cdkConnectedOverlayMinWidth\",null==e._triggerRect?null:e._triggerRect.width)(\"cdkConnectedOverlayOffsetY\",e._offsetY)}},directives:[r.b,i.q,i.r,r.a,i.s,i.m],styles:[\".mat-select{display:inline-block;width:100%;outline:none}.mat-select-trigger{display:inline-table;cursor:pointer;position:relative;box-sizing:border-box}.mat-select-disabled .mat-select-trigger{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.mat-select-value{display:table-cell;max-width:0;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-select-arrow-wrapper{display:table-cell;vertical-align:middle}.mat-form-field-appearance-fill .mat-select-arrow-wrapper{transform:translateY(-50%)}.mat-form-field-appearance-outline .mat-select-arrow-wrapper{transform:translateY(-25%)}.mat-form-field-appearance-standard.mat-form-field-has-label .mat-select:not(.mat-select-empty) .mat-select-arrow-wrapper{transform:translateY(-50%)}.mat-form-field-appearance-standard .mat-select.mat-select-empty .mat-select-arrow-wrapper{transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}._mat-animation-noopable.mat-form-field-appearance-standard .mat-select.mat-select-empty .mat-select-arrow-wrapper{transition:none}.mat-select-arrow{width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid;margin:0 4px}.mat-select-panel-wrap{flex-basis:100%}.mat-select-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;padding-top:0;padding-bottom:0;max-height:256px;min-width:100%;border-radius:4px;outline:0}.cdk-high-contrast-active .mat-select-panel{outline:solid 1px}.mat-select-panel .mat-optgroup-label,.mat-select-panel .mat-option{font-size:inherit;line-height:3em;height:3em}.mat-form-field-type-mat-select:not(.mat-form-field-disabled) .mat-form-field-flex{cursor:pointer}.mat-form-field-type-mat-select .mat-form-field-label{width:calc(100% - 18px)}.mat-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}._mat-animation-noopable .mat-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-select-placeholder{color:transparent;-webkit-text-fill-color:transparent;transition:none;display:block}\\n\"],encapsulation:2,data:{animation:[R.transformPanelWrap,R.transformPanel]},changeDetection:0}),t})();const G=a.fc(q);let X=(()=>{class t{}return t.\\u0275mod=a.Vb({type:t}),t.\\u0275inj=a.Ub({factory:function(e){return new(e||t)},providers:[B],imports:[[i.c,r.f,o.n,o.i],l.b,s.e,o.n,o.i]}),t})()},d4xE:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return r}));var r=function(t){return t.DARK=\"dark\",t.LIGHT=\"light\",t}({})},dNgK:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return A})),n.d(e,\"b\",(function(){return _})),n.d(e,\"c\",(function(){return T}));var r=n(\"rDax\"),i=n(\"+rOU\"),a=n(\"ofXK\"),o=n(\"fXoL\"),s=n(\"FKr1\"),l=n(\"bTqV\"),c=n(\"XNiG\"),u=n(\"IzEk\"),h=n(\"1G5W\"),d=n(\"R0Ic\"),f=n(\"u47x\"),p=n(\"0MNC\"),m=n(\"nLfN\");function g(t,e){if(1&t){const t=o.ec();o.dc(0,\"div\",1),o.dc(1,\"button\",2),o.lc(\"click\",(function(){return o.Ec(t),o.pc().action()})),o.Oc(2),o.cc(),o.cc()}if(2&t){const t=o.pc();o.Lb(2),o.Pc(t.data.action)}}function y(t,e){}const v=new o.w(\"MatSnackBarData\");class _{constructor(){this.politeness=\"assertive\",this.announcementMessage=\"\",this.duration=0,this.data=null,this.horizontalPosition=\"center\",this.verticalPosition=\"bottom\"}}const b=Math.pow(2,31)-1;class x{constructor(t,e){this._overlayRef=e,this._afterDismissed=new c.a,this._afterOpened=new c.a,this._onAction=new c.a,this._dismissedByAction=!1,this.containerInstance=t,this.onAction().subscribe(()=>this.dismiss()),t._onExit.subscribe(()=>this._finishDismiss())}dismiss(){this._afterDismissed.closed||this.containerInstance.exit(),clearTimeout(this._durationTimeoutId)}dismissWithAction(){this._onAction.closed||(this._dismissedByAction=!0,this._onAction.next(),this._onAction.complete())}closeWithAction(){this.dismissWithAction()}_dismissAfter(t){this._durationTimeoutId=setTimeout(()=>this.dismiss(),Math.min(t,b))}_open(){this._afterOpened.closed||(this._afterOpened.next(),this._afterOpened.complete())}_finishDismiss(){this._overlayRef.dispose(),this._onAction.closed||this._onAction.complete(),this._afterDismissed.next({dismissedByAction:this._dismissedByAction}),this._afterDismissed.complete(),this._dismissedByAction=!1}afterDismissed(){return this._afterDismissed}afterOpened(){return this.containerInstance._onEnter}onAction(){return this._onAction}}let w=(()=>{class t{constructor(t,e){this.snackBarRef=t,this.data=e}action(){this.snackBarRef.dismissWithAction()}get hasAction(){return!!this.data.action}}return t.\\u0275fac=function(e){return new(e||t)(o.Xb(x),o.Xb(v))},t.\\u0275cmp=o.Rb({type:t,selectors:[[\"simple-snack-bar\"]],hostAttrs:[1,\"mat-simple-snackbar\"],decls:3,vars:2,consts:[[\"class\",\"mat-simple-snackbar-action\",4,\"ngIf\"],[1,\"mat-simple-snackbar-action\"],[\"mat-button\",\"\",3,\"click\"]],template:function(t,e){1&t&&(o.dc(0,\"span\"),o.Oc(1),o.cc(),o.Mc(2,g,3,1,\"div\",0)),2&t&&(o.Lb(1),o.Pc(e.data.message),o.Lb(1),o.vc(\"ngIf\",e.hasAction))},directives:[a.o,l.b],styles:[\".mat-simple-snackbar{display:flex;justify-content:space-between;align-items:center;line-height:20px;opacity:1}.mat-simple-snackbar-action{flex-shrink:0;margin:-8px -8px -8px 8px}.mat-simple-snackbar-action button{max-height:36px;min-width:0}[dir=rtl] .mat-simple-snackbar-action{margin-left:-8px;margin-right:8px}\\n\"],encapsulation:2,changeDetection:0}),t})();const k={snackBarState:Object(d.m)(\"state\",[Object(d.j)(\"void, hidden\",Object(d.k)({transform:\"scale(0.8)\",opacity:0})),Object(d.j)(\"visible\",Object(d.k)({transform:\"scale(1)\",opacity:1})),Object(d.l)(\"* => visible\",Object(d.e)(\"150ms cubic-bezier(0, 0, 0.2, 1)\")),Object(d.l)(\"* => void, * => hidden\",Object(d.e)(\"75ms cubic-bezier(0.4, 0.0, 1, 1)\",Object(d.k)({opacity:0})))])};let M=(()=>{class t extends i.a{constructor(t,e,n,r,i){super(),this._ngZone=t,this._elementRef=e,this._changeDetectorRef=n,this._platform=r,this.snackBarConfig=i,this._announceDelay=150,this._destroyed=!1,this._onAnnounce=new c.a,this._onExit=new c.a,this._onEnter=new c.a,this._animationState=\"void\",this.attachDomPortal=t=>(this._assertNotAttached(),this._applySnackBarClasses(),this._portalOutlet.attachDomPortal(t)),this._live=\"assertive\"!==i.politeness||i.announcementMessage?\"off\"===i.politeness?\"off\":\"polite\":\"assertive\",this._platform.FIREFOX&&(\"polite\"===this._live&&(this._role=\"status\"),\"assertive\"===this._live&&(this._role=\"alert\"))}attachComponentPortal(t){return this._assertNotAttached(),this._applySnackBarClasses(),this._portalOutlet.attachComponentPortal(t)}attachTemplatePortal(t){return this._assertNotAttached(),this._applySnackBarClasses(),this._portalOutlet.attachTemplatePortal(t)}onAnimationEnd(t){const{fromState:e,toState:n}=t;if((\"void\"===n&&\"void\"!==e||\"hidden\"===n)&&this._completeExit(),\"visible\"===n){const t=this._onEnter;this._ngZone.run(()=>{t.next(),t.complete()})}}enter(){this._destroyed||(this._animationState=\"visible\",this._changeDetectorRef.detectChanges(),this._screenReaderAnnounce())}exit(){return this._animationState=\"hidden\",this._elementRef.nativeElement.setAttribute(\"mat-exit\",\"\"),clearTimeout(this._announceTimeoutId),this._onExit}ngOnDestroy(){this._destroyed=!0,this._completeExit()}_completeExit(){this._ngZone.onMicrotaskEmpty.pipe(Object(u.a)(1)).subscribe(()=>{this._onExit.next(),this._onExit.complete()})}_applySnackBarClasses(){const t=this._elementRef.nativeElement,e=this.snackBarConfig.panelClass;e&&(Array.isArray(e)?e.forEach(e=>t.classList.add(e)):t.classList.add(e)),\"center\"===this.snackBarConfig.horizontalPosition&&t.classList.add(\"mat-snack-bar-center\"),\"top\"===this.snackBarConfig.verticalPosition&&t.classList.add(\"mat-snack-bar-top\")}_assertNotAttached(){this._portalOutlet.hasAttached()}_screenReaderAnnounce(){this._announceTimeoutId||this._ngZone.runOutsideAngular(()=>{this._announceTimeoutId=setTimeout(()=>{const t=this._elementRef.nativeElement.querySelector(\"[aria-hidden]\"),e=this._elementRef.nativeElement.querySelector(\"[aria-live]\");if(t&&e){let n=null;this._platform.isBrowser&&document.activeElement instanceof HTMLElement&&t.contains(document.activeElement)&&(n=document.activeElement),t.removeAttribute(\"aria-hidden\"),e.appendChild(t),null==n||n.focus(),this._onAnnounce.next(),this._onAnnounce.complete()}},this._announceDelay)})}}return t.\\u0275fac=function(e){return new(e||t)(o.Xb(o.H),o.Xb(o.p),o.Xb(o.j),o.Xb(m.a),o.Xb(_))},t.\\u0275cmp=o.Rb({type:t,selectors:[[\"snack-bar-container\"]],viewQuery:function(t,e){if(1&t&&o.Ic(i.c,!0),2&t){let t;o.Ac(t=o.mc())&&(e._portalOutlet=t.first)}},hostAttrs:[1,\"mat-snack-bar-container\"],hostVars:1,hostBindings:function(t,e){1&t&&o.Kc(\"@state.done\",(function(t){return e.onAnimationEnd(t)})),2&t&&o.Lc(\"@state\",e._animationState)},features:[o.Ib],decls:3,vars:2,consts:[[\"aria-hidden\",\"true\"],[\"cdkPortalOutlet\",\"\"]],template:function(t,e){1&t&&(o.dc(0,\"div\",0),o.Mc(1,y,0,0,\"ng-template\",1),o.cc(),o.Yb(2,\"div\")),2&t&&(o.Lb(2),o.Mb(\"aria-live\",e._live)(\"role\",e._role))},directives:[i.c],styles:[\".mat-snack-bar-container{border-radius:4px;box-sizing:border-box;display:block;margin:24px;max-width:33vw;min-width:344px;padding:14px 16px;min-height:48px;transform-origin:center}.cdk-high-contrast-active .mat-snack-bar-container{border:solid 1px}.mat-snack-bar-handset{width:100%}.mat-snack-bar-handset .mat-snack-bar-container{margin:8px;max-width:100%;min-width:0;width:100%}\\n\"],encapsulation:2,data:{animation:[k.snackBarState]}}),t})(),T=(()=>{class t{}return t.\\u0275mod=o.Vb({type:t}),t.\\u0275inj=o.Ub({factory:function(e){return new(e||t)},imports:[[r.f,i.f,a.c,l.c,s.i],s.i]}),t})();const S=new o.w(\"mat-snack-bar-default-options\",{providedIn:\"root\",factory:function(){return new _}});let A=(()=>{class t{constructor(t,e,n,r,i,a){this._overlay=t,this._live=e,this._injector=n,this._breakpointObserver=r,this._parentSnackBar=i,this._defaultConfig=a,this._snackBarRefAtThisLevel=null,this.simpleSnackBarComponent=w,this.snackBarContainerComponent=M,this.handsetCssClass=\"mat-snack-bar-handset\"}get _openedSnackBarRef(){const t=this._parentSnackBar;return t?t._openedSnackBarRef:this._snackBarRefAtThisLevel}set _openedSnackBarRef(t){this._parentSnackBar?this._parentSnackBar._openedSnackBarRef=t:this._snackBarRefAtThisLevel=t}openFromComponent(t,e){return this._attach(t,e)}openFromTemplate(t,e){return this._attach(t,e)}open(t,e=\"\",n){const r=Object.assign(Object.assign({},this._defaultConfig),n);return r.data={message:t,action:e},r.announcementMessage===t&&(r.announcementMessage=void 0),this.openFromComponent(this.simpleSnackBarComponent,r)}dismiss(){this._openedSnackBarRef&&this._openedSnackBarRef.dismiss()}ngOnDestroy(){this._snackBarRefAtThisLevel&&this._snackBarRefAtThisLevel.dismiss()}_attachSnackBarContainer(t,e){const n=o.x.create({parent:e&&e.viewContainerRef&&e.viewContainerRef.injector||this._injector,providers:[{provide:_,useValue:e}]}),r=new i.d(this.snackBarContainerComponent,e.viewContainerRef,n),a=t.attach(r);return a.instance.snackBarConfig=e,a.instance}_attach(t,e){const n=Object.assign(Object.assign(Object.assign({},new _),this._defaultConfig),e),r=this._createOverlay(n),a=this._attachSnackBarContainer(r,n),s=new x(a,r);if(t instanceof o.V){const e=new i.g(t,null,{$implicit:n.data,snackBarRef:s});s.instance=a.attachTemplatePortal(e)}else{const e=this._createInjector(n,s),r=new i.d(t,void 0,e),o=a.attachComponentPortal(r);s.instance=o.instance}return this._breakpointObserver.observe(p.b.HandsetPortrait).pipe(Object(h.a)(r.detachments())).subscribe(t=>{const e=r.overlayElement.classList;t.matches?e.add(this.handsetCssClass):e.remove(this.handsetCssClass)}),n.announcementMessage&&a._onAnnounce.subscribe(()=>{this._live.announce(n.announcementMessage,n.politeness)}),this._animateSnackBar(s,n),this._openedSnackBarRef=s,this._openedSnackBarRef}_animateSnackBar(t,e){t.afterDismissed().subscribe(()=>{this._openedSnackBarRef==t&&(this._openedSnackBarRef=null),e.announcementMessage&&this._live.clear()}),this._openedSnackBarRef?(this._openedSnackBarRef.afterDismissed().subscribe(()=>{t.containerInstance.enter()}),this._openedSnackBarRef.dismiss()):t.containerInstance.enter(),e.duration&&e.duration>0&&t.afterOpened().subscribe(()=>t._dismissAfter(e.duration))}_createOverlay(t){const e=new r.d;e.direction=t.direction;let n=this._overlay.position().global();const i=\"rtl\"===t.direction,a=\"left\"===t.horizontalPosition||\"start\"===t.horizontalPosition&&!i||\"end\"===t.horizontalPosition&&i,o=!a&&\"center\"!==t.horizontalPosition;return a?n.left(\"0\"):o?n.right(\"0\"):n.centerHorizontally(),\"top\"===t.verticalPosition?n.top(\"0\"):n.bottom(\"0\"),e.positionStrategy=n,this._overlay.create(e)}_createInjector(t,e){return o.x.create({parent:t&&t.viewContainerRef&&t.viewContainerRef.injector||this._injector,providers:[{provide:x,useValue:e},{provide:v,useValue:t.data}]})}}return t.\\u0275fac=function(e){return new(e||t)(o.hc(r.c),o.hc(f.k),o.hc(o.x),o.hc(p.a),o.hc(t,12),o.hc(S))},t.\\u0275prov=Object(o.Tb)({factory:function(){return new t(Object(o.hc)(r.c),Object(o.hc)(f.k),Object(o.hc)(o.t),Object(o.hc)(p.a),Object(o.hc)(t,12),Object(o.hc)(S))},token:t,providedIn:T}),t})()},dNwA:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"sw\",{months:\"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba\".split(\"_\"),monthsShort:\"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des\".split(\"_\"),weekdays:\"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi\".split(\"_\"),weekdaysShort:\"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos\".split(\"_\"),weekdaysMin:\"J2_J3_J4_J5_Al_Ij_J1\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"hh:mm A\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[leo saa] LT\",nextDay:\"[kesho saa] LT\",nextWeek:\"[wiki ijayo] dddd [saat] LT\",lastDay:\"[jana] LT\",lastWeek:\"[wiki iliyopita] dddd [saat] LT\",sameElse:\"L\"},relativeTime:{future:\"%s baadaye\",past:\"tokea %s\",s:\"hivi punde\",ss:\"sekunde %d\",m:\"dakika moja\",mm:\"dakika %d\",h:\"saa limoja\",hh:\"masaa %d\",d:\"siku moja\",dd:\"siku %d\",M:\"mwezi mmoja\",MM:\"miezi %d\",y:\"mwaka mmoja\",yy:\"miaka %d\"},week:{dow:1,doy:7}})}(n(\"wd/R\"))},dhIe:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return m}));var r=n(\"mrSG\"),i=n(\"AcyG\"),a=n(\"nHCO\"),o=n(\"JIr8\"),s=n(\"lJxs\"),l=n(\"z6cu\"),c=n(\"d4xE\"),u=n(\"fXoL\"),h=n(\"SUpr\"),d=n(\"nm5K\");let f=(()=>{class t{constructor(t){this.apiService=t}getDatabaseLink(){return this.apiService.get(\"current_db\")}}return t.\\u0275fac=function(e){return new(e||t)(u.hc(d.a))},t.\\u0275prov=u.Tb({token:t,factory:t.\\u0275fac,providedIn:\"root\"}),t})();var p=n(\"ZF+8\");let m=(()=>{let t=class{constructor(t,e,n,r){this.colorSchemeService=t,this.appService=e,this.snackbarService=n,this.utilsService=r}static theme(t){return t.theme}static dbUrl(t){return t.dbUrl}static isDbUrl(t){return!!t.dbUrl}static themes(t){return t.themes}static notifications(t){return t.notifications}setTheme(t){const e=t.getState(),n=this.colorSchemeService.currentActive(),r=e.themes.filter(t=>t.name===n)[0];t.setState(Object.assign(Object.assign({},e),{theme:r}))}changeTheme(t,{payload:e}){const n=t.getState(),r=e;return t.setState(Object.assign(Object.assign({},n),{theme:r})),this.colorSchemeService.update(e.name)}addNotifications(t,{payload:e}){const n=t.getState();if(!e)return;const r=n.notifications.slice();-1===r.indexOf(e)&&r.push(e),t.patchState({notifications:r}),localStorage.setItem(\"notifications\",JSON.stringify(r))}removeNotifications(t,{payload:e}){const n=t.getState();if(!e)return;const r=n.notifications.slice(),i=r.indexOf(e);r.splice(i,1),t.patchState({notifications:r}),localStorage.setItem(\"notifications\",JSON.stringify(r))}removeAllNotifications(t){const e=[];t.patchState({notifications:e}),localStorage.setItem(\"notifications\",JSON.stringify(e))}getNotifications(t){const e=JSON.parse(localStorage.getItem(\"notifications\"))||[],n=t.getState().notificationExpiration,r=(new Date).getTime(),i=e.filter(t=>{if(n>(r-t.receivedAt)/1e3)return t});t.patchState({notifications:i}),localStorage.setItem(\"notifications\",JSON.stringify(i))}getDatabaseLink(t){return this.appService.getDatabaseLink().pipe(Object(o.a)(t=>(this.snackbarService.error(this.utilsService.formatErrorMessage(t)),Object(l.a)(t))),Object(s.a)(e=>{e&&e.db_path&&t.patchState({dbUrl:e.db_path})}))}};return t.\\u0275fac=function(e){return new(e||t)(u.hc(h.a),u.hc(f),u.hc(p.b),u.hc(p.c))},t.\\u0275prov=u.Tb({token:t,factory:t.\\u0275fac}),Object(r.b)([Object(i.a)(a.g)],t.prototype,\"setTheme\",null),Object(r.b)([Object(i.a)(a.b)],t.prototype,\"changeTheme\",null),Object(r.b)([Object(i.a)(a.a)],t.prototype,\"addNotifications\",null),Object(r.b)([Object(i.a)(a.f)],t.prototype,\"removeNotifications\",null),Object(r.b)([Object(i.a)(a.e)],t.prototype,\"removeAllNotifications\",null),Object(r.b)([Object(i.a)(a.d)],t.prototype,\"getNotifications\",null),Object(r.b)([Object(i.a)(a.c)],t.prototype,\"getDatabaseLink\",null),Object(r.b)([Object(i.f)()],t,\"theme\",null),Object(r.b)([Object(i.f)()],t,\"dbUrl\",null),Object(r.b)([Object(i.f)()],t,\"isDbUrl\",null),Object(r.b)([Object(i.f)()],t,\"themes\",null),Object(r.b)([Object(i.f)()],t,\"notifications\",null),t=Object(r.b)([Object(i.g)({name:\"app\",defaults:{theme:null,themes:[{name:c.a.DARK,icon:\"brightness_3\"},{name:c.a.LIGHT,icon:\"wb_sunny\"}],dbUrl:null,notifications:[],notificationExpiration:86400}})],t),t})()},\"e+ae\":function(t,e,n){!function(t){\"use strict\";var e=\"janu\\xe1r_febru\\xe1r_marec_apr\\xedl_m\\xe1j_j\\xfan_j\\xfal_august_september_okt\\xf3ber_november_december\".split(\"_\"),n=\"jan_feb_mar_apr_m\\xe1j_j\\xfan_j\\xfal_aug_sep_okt_nov_dec\".split(\"_\");function r(t){return t>1&&t<5}function i(t,e,n,i){var a=t+\" \";switch(n){case\"s\":return e||i?\"p\\xe1r sek\\xfand\":\"p\\xe1r sekundami\";case\"ss\":return e||i?a+(r(t)?\"sekundy\":\"sek\\xfand\"):a+\"sekundami\";case\"m\":return e?\"min\\xfata\":i?\"min\\xfatu\":\"min\\xfatou\";case\"mm\":return e||i?a+(r(t)?\"min\\xfaty\":\"min\\xfat\"):a+\"min\\xfatami\";case\"h\":return e?\"hodina\":i?\"hodinu\":\"hodinou\";case\"hh\":return e||i?a+(r(t)?\"hodiny\":\"hod\\xedn\"):a+\"hodinami\";case\"d\":return e||i?\"de\\u0148\":\"d\\u0148om\";case\"dd\":return e||i?a+(r(t)?\"dni\":\"dn\\xed\"):a+\"d\\u0148ami\";case\"M\":return e||i?\"mesiac\":\"mesiacom\";case\"MM\":return e||i?a+(r(t)?\"mesiace\":\"mesiacov\"):a+\"mesiacmi\";case\"y\":return e||i?\"rok\":\"rokom\";case\"yy\":return e||i?a+(r(t)?\"roky\":\"rokov\"):a+\"rokmi\"}}t.defineLocale(\"sk\",{months:e,monthsShort:n,weekdays:\"nede\\u013ea_pondelok_utorok_streda_\\u0161tvrtok_piatok_sobota\".split(\"_\"),weekdaysShort:\"ne_po_ut_st_\\u0161t_pi_so\".split(\"_\"),weekdaysMin:\"ne_po_ut_st_\\u0161t_pi_so\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[dnes o] LT\",nextDay:\"[zajtra o] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[v nede\\u013eu o] LT\";case 1:case 2:return\"[v] dddd [o] LT\";case 3:return\"[v stredu o] LT\";case 4:return\"[vo \\u0161tvrtok o] LT\";case 5:return\"[v piatok o] LT\";case 6:return\"[v sobotu o] LT\"}},lastDay:\"[v\\u010dera o] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[minul\\xfa nede\\u013eu o] LT\";case 1:case 2:return\"[minul\\xfd] dddd [o] LT\";case 3:return\"[minul\\xfa stredu o] LT\";case 4:case 5:return\"[minul\\xfd] dddd [o] LT\";case 6:return\"[minul\\xfa sobotu o] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"pred %s\",s:i,ss:i,m:i,mm:i,h:i,hh:i,d:i,dd:i,M:i,MM:i,y:i,yy:i},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},eIep:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return o}));var r=n(\"lJxs\"),i=n(\"Cfvw\"),a=n(\"zx2A\");function o(t,e){return\"function\"==typeof e?n=>n.pipe(o((n,a)=>Object(i.a)(t(n,a)).pipe(Object(r.a)((t,r)=>e(n,t,a,r))))):e=>e.lift(new s(t))}class s{constructor(t){this.project=t}call(t,e){return e.subscribe(new l(t,this.project))}}class l extends a.b{constructor(t,e){super(t),this.project=e,this.index=0}_next(t){let e;const n=this.index++;try{e=this.project(t,n)}catch(r){return void this.destination.error(r)}this._innerSub(e)}_innerSub(t){const e=this.innerSubscription;e&&e.unsubscribe();const n=new a.a(this),r=this.destination;r.add(n),this.innerSubscription=Object(a.c)(t,n),this.innerSubscription!==n&&r.add(this.innerSubscription)}_complete(){const{innerSubscription:t}=this;t&&!t.closed||super._complete(),this.unsubscribe()}_unsubscribe(){this.innerSubscription=void 0}notifyComplete(){this.innerSubscription=void 0,this.isStopped&&super._complete()}notifyNext(t){this.destination.next(t)}}},efK2:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));var r=n(\"fXoL\");let i=(()=>{class t{transform(t,e){const n=e.length>0?parseInt(e[0],10):20,r=e.length>1?e[1]:\"...\";return t.length>n?t.substring(0,n)+r:t}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275pipe=r.Wb({name:\"truncate\",type:t,pure:!0}),t})()},f6nW:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return w})),n.d(e,\"b\",(function(){return I})),n.d(e,\"c\",(function(){return M})),n.d(e,\"d\",(function(){return W})),n.d(e,\"e\",(function(){return C})),n.d(e,\"f\",(function(){return D})),n.d(e,\"g\",(function(){return S})),n.d(e,\"h\",(function(){return G})),n.d(e,\"i\",(function(){return V})),n.d(e,\"j\",(function(){return O})),n.d(e,\"k\",(function(){return T})),n.d(e,\"l\",(function(){return q})),n.d(e,\"m\",(function(){return B})),n.d(e,\"n\",(function(){return Z})),n.d(e,\"o\",(function(){return X})),n.d(e,\"p\",(function(){return U})),n.d(e,\"q\",(function(){return rt})),n.d(e,\"r\",(function(){return ot})),n.d(e,\"s\",(function(){return at})),n.d(e,\"t\",(function(){return Q})),n.d(e,\"u\",(function(){return et})),n.d(e,\"v\",(function(){return tt})),n.d(e,\"w\",(function(){return nt})),n.d(e,\"x\",(function(){return R})),n.d(e,\"y\",(function(){return z}));var r=n(\"8LU1\"),i=n(\"0EQZ\"),a=n(\"fXoL\"),o=n(\"cH1L\"),s=n(\"nLfN\"),l=n(\"vxfF\"),c=n(\"ofXK\"),u=n(\"XNiG\"),h=n(\"Cfvw\"),d=n(\"2Vo4\"),f=n(\"7+OI\"),p=n(\"LRne\"),m=n(\"1G5W\"),g=n(\"IzEk\");const y=[[[\"caption\"]],[[\"colgroup\"],[\"col\"]]],v=[\"caption\",\"colgroup, col\"];function _(t,e){if(1&t&&(a.dc(0,\"th\",3),a.Oc(1),a.cc()),2&t){const t=a.pc();a.Jc(\"text-align\",t.justify),a.Lb(1),a.Qc(\" \",t.headerText,\" \")}}function b(t,e){if(1&t&&(a.dc(0,\"td\",4),a.Oc(1),a.cc()),2&t){const t=e.$implicit,n=a.pc();a.Jc(\"text-align\",n.justify),a.Lb(1),a.Qc(\" \",n.dataAccessor(t,n.name),\" \")}}function x(t){return class extends t{constructor(...t){super(...t),this._sticky=!1,this._hasStickyChanged=!1}get sticky(){return this._sticky}set sticky(t){const e=this._sticky;this._sticky=Object(r.c)(t),this._hasStickyChanged=e!==this._sticky}hasStickyChanged(){const t=this._hasStickyChanged;return this._hasStickyChanged=!1,t}resetStickyChanged(){this._hasStickyChanged=!1}}}const w=new a.w(\"CDK_TABLE\"),k=new a.w(\"text-column-options\");let M=(()=>{class t{constructor(t){this.template=t}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(a.V))},t.\\u0275dir=a.Sb({type:t,selectors:[[\"\",\"cdkCellDef\",\"\"]]}),t})(),T=(()=>{class t{constructor(t){this.template=t}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(a.V))},t.\\u0275dir=a.Sb({type:t,selectors:[[\"\",\"cdkHeaderCellDef\",\"\"]]}),t})(),S=(()=>{class t{constructor(t){this.template=t}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(a.V))},t.\\u0275dir=a.Sb({type:t,selectors:[[\"\",\"cdkFooterCellDef\",\"\"]]}),t})();class A{}const L=x(A);let C=(()=>{class t extends L{constructor(t){super(),this._table=t,this._stickyEnd=!1}get name(){return this._name}set name(t){this._setNameInput(t)}get stickyEnd(){return this._stickyEnd}set stickyEnd(t){const e=this._stickyEnd;this._stickyEnd=Object(r.c)(t),this._hasStickyChanged=e!==this._stickyEnd}_updateColumnCssClassName(){this._columnCssClassName=[\"cdk-column-\"+this.cssClassFriendlyName]}_setNameInput(t){t&&(this._name=t,this.cssClassFriendlyName=t.replace(/[^a-z0-9_-]/gi,\"-\"),this._updateColumnCssClassName())}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(w,8))},t.\\u0275dir=a.Sb({type:t,selectors:[[\"\",\"cdkColumnDef\",\"\"]],contentQueries:function(t,e,n){if(1&t&&(a.Qb(n,M,!0),a.Qb(n,T,!0),a.Qb(n,S,!0)),2&t){let t;a.Ac(t=a.mc())&&(e.cell=t.first),a.Ac(t=a.mc())&&(e.headerCell=t.first),a.Ac(t=a.mc())&&(e.footerCell=t.first)}},inputs:{sticky:\"sticky\",name:[\"cdkColumnDef\",\"name\"],stickyEnd:\"stickyEnd\"},features:[a.Kb([{provide:\"MAT_SORT_HEADER_COLUMN_DEF\",useExisting:t}]),a.Ib]}),t})();class E{constructor(t,e){const n=e.nativeElement.classList;for(const r of t._columnCssClassName)n.add(r)}}let O=(()=>{class t extends E{constructor(t,e){super(t,e)}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(C),a.Xb(a.p))},t.\\u0275dir=a.Sb({type:t,selectors:[[\"cdk-header-cell\"],[\"th\",\"cdk-header-cell\",\"\"]],hostAttrs:[\"role\",\"columnheader\",1,\"cdk-header-cell\"],features:[a.Ib]}),t})(),D=(()=>{class t extends E{constructor(t,e){super(t,e)}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(C),a.Xb(a.p))},t.\\u0275dir=a.Sb({type:t,selectors:[[\"cdk-footer-cell\"],[\"td\",\"cdk-footer-cell\",\"\"]],hostAttrs:[\"role\",\"gridcell\",1,\"cdk-footer-cell\"],features:[a.Ib]}),t})(),I=(()=>{class t extends E{constructor(t,e){super(t,e)}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(C),a.Xb(a.p))},t.\\u0275dir=a.Sb({type:t,selectors:[[\"cdk-cell\"],[\"td\",\"cdk-cell\",\"\"]],hostAttrs:[\"role\",\"gridcell\",1,\"cdk-cell\"],features:[a.Ib]}),t})();class P{constructor(){this.tasks=[],this.endTasks=[]}}const R=new a.w(\"_COALESCED_STYLE_SCHEDULER\");let z=(()=>{class t{constructor(t){this._ngZone=t,this._currentSchedule=null,this._destroyed=new u.a}schedule(t){this._createScheduleIfNeeded(),this._currentSchedule.tasks.push(t)}scheduleEnd(t){this._createScheduleIfNeeded(),this._currentSchedule.endTasks.push(t)}ngOnDestroy(){this._destroyed.next(),this._destroyed.complete()}_createScheduleIfNeeded(){this._currentSchedule||(this._currentSchedule=new P,this._getScheduleObservable().pipe(Object(m.a)(this._destroyed)).subscribe(()=>{for(;this._currentSchedule.tasks.length||this._currentSchedule.endTasks.length;){const t=this._currentSchedule;this._currentSchedule=new P;for(const e of t.tasks)e();for(const e of t.endTasks)e()}this._currentSchedule=null}))}_getScheduleObservable(){return this._ngZone.isStable?Object(h.a)(Promise.resolve(void 0)):this._ngZone.onStable.pipe(Object(g.a)(1))}}return t.\\u0275fac=function(e){return new(e||t)(a.hc(a.H))},t.\\u0275prov=a.Tb({token:t,factory:t.\\u0275fac}),t})(),j=(()=>{class t{constructor(t,e){this.template=t,this._differs=e}ngOnChanges(t){if(!this._columnsDiffer){const e=t.columns&&t.columns.currentValue||[];this._columnsDiffer=this._differs.find(e).create(),this._columnsDiffer.diff(e)}}getColumnsDiff(){return this._columnsDiffer.diff(this.columns)}extractCellTemplate(t){return this instanceof B?t.headerCell.template:this instanceof V?t.footerCell.template:t.cell.template}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(a.V),a.Xb(a.z))},t.\\u0275dir=a.Sb({type:t,features:[a.Jb]}),t})();class F extends j{}const N=x(F);let B=(()=>{class t extends N{constructor(t,e,n){super(t,e),this._table=n}ngOnChanges(t){super.ngOnChanges(t)}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(a.V),a.Xb(a.z),a.Xb(w,8))},t.\\u0275dir=a.Sb({type:t,selectors:[[\"\",\"cdkHeaderRowDef\",\"\"]],inputs:{columns:[\"cdkHeaderRowDef\",\"columns\"],sticky:[\"cdkHeaderRowDefSticky\",\"sticky\"]},features:[a.Ib,a.Jb]}),t})();class Y extends j{}const H=x(Y);let V=(()=>{class t extends H{constructor(t,e,n){super(t,e),this._table=n}ngOnChanges(t){super.ngOnChanges(t)}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(a.V),a.Xb(a.z),a.Xb(w,8))},t.\\u0275dir=a.Sb({type:t,selectors:[[\"\",\"cdkFooterRowDef\",\"\"]],inputs:{columns:[\"cdkFooterRowDef\",\"columns\"],sticky:[\"cdkFooterRowDefSticky\",\"sticky\"]},features:[a.Ib,a.Jb]}),t})(),U=(()=>{class t extends j{constructor(t,e,n){super(t,e),this._table=n}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(a.V),a.Xb(a.z),a.Xb(w,8))},t.\\u0275dir=a.Sb({type:t,selectors:[[\"\",\"cdkRowDef\",\"\"]],inputs:{columns:[\"cdkRowDefColumns\",\"columns\"],when:[\"cdkRowDefWhen\",\"when\"]},features:[a.Ib]}),t})(),W=(()=>{class t{constructor(e){this._viewContainer=e,t.mostRecentCellOutlet=this}ngOnDestroy(){t.mostRecentCellOutlet===this&&(t.mostRecentCellOutlet=null)}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(a.Z))},t.\\u0275dir=a.Sb({type:t,selectors:[[\"\",\"cdkCellOutlet\",\"\"]]}),t.mostRecentCellOutlet=null,t})(),q=(()=>{class t{}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275cmp=a.Rb({type:t,selectors:[[\"cdk-header-row\"],[\"tr\",\"cdk-header-row\",\"\"]],hostAttrs:[\"role\",\"row\",1,\"cdk-header-row\"],decls:1,vars:0,consts:[[\"cdkCellOutlet\",\"\"]],template:function(t,e){1&t&&a.Zb(0,0)},directives:[W],encapsulation:2}),t})(),G=(()=>{class t{}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275cmp=a.Rb({type:t,selectors:[[\"cdk-footer-row\"],[\"tr\",\"cdk-footer-row\",\"\"]],hostAttrs:[\"role\",\"row\",1,\"cdk-footer-row\"],decls:1,vars:0,consts:[[\"cdkCellOutlet\",\"\"]],template:function(t,e){1&t&&a.Zb(0,0)},directives:[W],encapsulation:2}),t})(),X=(()=>{class t{}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275cmp=a.Rb({type:t,selectors:[[\"cdk-row\"],[\"tr\",\"cdk-row\",\"\"]],hostAttrs:[\"role\",\"row\",1,\"cdk-row\"],decls:1,vars:0,consts:[[\"cdkCellOutlet\",\"\"]],template:function(t,e){1&t&&a.Zb(0,0)},directives:[W],encapsulation:2}),t})(),Z=(()=>{class t{constructor(t){this.templateRef=t}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(a.V))},t.\\u0275dir=a.Sb({type:t,selectors:[[\"ng-template\",\"cdkNoDataRow\",\"\"]]}),t})();const J=[\"top\",\"bottom\",\"left\",\"right\"];class K{constructor(t,e,n,r,i=!0,a=!0,o){this._isNativeHtmlTable=t,this._stickCellCss=e,this.direction=n,this._coalescedStyleScheduler=r,this._isBrowser=i,this._needsPositionStickyOnElement=a,this._positionListener=o,this._cachedCellWidths=[],this._borderCellCss={top:e+\"-border-elem-top\",bottom:e+\"-border-elem-bottom\",left:e+\"-border-elem-left\",right:e+\"-border-elem-right\"}}clearStickyPositioning(t,e){const n=[];for(const r of t)if(r.nodeType===r.ELEMENT_NODE){n.push(r);for(let t=0;t<r.children.length;t++)n.push(r.children[t])}this._scheduleStyleChanges(()=>{for(const t of n)this._removeStickyStyle(t,e)})}updateStickyColumns(t,e,n,r=!0){if(!t.length||!this._isBrowser||!e.some(t=>t)&&!n.some(t=>t))return void(this._positionListener&&(this._positionListener.stickyColumnsUpdated({sizes:[]}),this._positionListener.stickyEndColumnsUpdated({sizes:[]})));const i=t[0],a=i.children.length,o=this._getCellWidths(i,r),s=this._getStickyStartColumnPositions(o,e),l=this._getStickyEndColumnPositions(o,n),c=e.lastIndexOf(!0),u=n.indexOf(!0);this._scheduleStyleChanges(()=>{const r=\"rtl\"===this.direction,i=r?\"right\":\"left\",h=r?\"left\":\"right\";for(const o of t)for(let t=0;t<a;t++){const r=o.children[t];e[t]&&this._addStickyStyle(r,i,s[t],t===c),n[t]&&this._addStickyStyle(r,h,l[t],t===u)}this._positionListener&&(this._positionListener.stickyColumnsUpdated({sizes:-1===c?[]:o.slice(0,c+1).map((t,n)=>e[n]?t:null)}),this._positionListener.stickyEndColumnsUpdated({sizes:-1===u?[]:o.slice(u).map((t,e)=>n[e+u]?t:null).reverse()}))})}stickRows(t,e,n){if(!this._isBrowser)return;const r=\"bottom\"===n?t.slice().reverse():t,i=\"bottom\"===n?e.slice().reverse():e,a=[],o=[],s=[];for(let c=0,u=0;c<r.length;c++){if(a[c]=u,!i[c])continue;const t=r[c];s[c]=this._isNativeHtmlTable?Array.from(t.children):[t];const e=t.getBoundingClientRect().height;u+=e,o[c]=e}const l=i.lastIndexOf(!0);this._scheduleStyleChanges(()=>{var t,e;for(let o=0;o<r.length;o++){if(!i[o])continue;const t=a[o],e=o===l;for(const r of s[o])this._addStickyStyle(r,n,t,e)}\"top\"===n?null===(t=this._positionListener)||void 0===t||t.stickyHeaderRowsUpdated({sizes:o}):null===(e=this._positionListener)||void 0===e||e.stickyFooterRowsUpdated({sizes:o})})}updateStickyFooterContainer(t,e){if(!this._isNativeHtmlTable)return;const n=t.querySelector(\"tfoot\");this._scheduleStyleChanges(()=>{e.some(t=>!t)?this._removeStickyStyle(n,[\"bottom\"]):this._addStickyStyle(n,\"bottom\",0,!1)})}_removeStickyStyle(t,e){for(const n of e)t.style[n]=\"\",t.classList.remove(this._borderCellCss[n]);J.some(n=>-1===e.indexOf(n)&&t.style[n])?t.style.zIndex=this._getCalculatedZIndex(t):(t.style.zIndex=\"\",this._needsPositionStickyOnElement&&(t.style.position=\"\"),t.classList.remove(this._stickCellCss))}_addStickyStyle(t,e,n,r){t.classList.add(this._stickCellCss),r&&t.classList.add(this._borderCellCss[e]),t.style[e]=n+\"px\",t.style.zIndex=this._getCalculatedZIndex(t),this._needsPositionStickyOnElement&&(t.style.cssText+=\"position: -webkit-sticky; position: sticky; \")}_getCalculatedZIndex(t){const e={top:100,bottom:10,left:1,right:1};let n=0;for(const r of J)t.style[r]&&(n+=e[r]);return n?\"\"+n:\"\"}_getCellWidths(t,e=!0){if(!e&&this._cachedCellWidths.length)return this._cachedCellWidths;const n=[],r=t.children;for(let i=0;i<r.length;i++)n.push(r[i].getBoundingClientRect().width);return this._cachedCellWidths=n,n}_getStickyStartColumnPositions(t,e){const n=[];let r=0;for(let i=0;i<t.length;i++)e[i]&&(n[i]=r,r+=t[i]);return n}_getStickyEndColumnPositions(t,e){const n=[];let r=0;for(let i=t.length;i>0;i--)e[i]&&(n[i]=r,r+=t[i]);return n}_scheduleStyleChanges(t){this._coalescedStyleScheduler?this._coalescedStyleScheduler.schedule(t):t()}}const $=new a.w(\"CDK_SPL\");let Q=(()=>{class t{constructor(t,e){this.viewContainer=t,this.elementRef=e}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(a.Z),a.Xb(a.p))},t.\\u0275dir=a.Sb({type:t,selectors:[[\"\",\"rowOutlet\",\"\"]]}),t})(),tt=(()=>{class t{constructor(t,e){this.viewContainer=t,this.elementRef=e}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(a.Z),a.Xb(a.p))},t.\\u0275dir=a.Sb({type:t,selectors:[[\"\",\"headerRowOutlet\",\"\"]]}),t})(),et=(()=>{class t{constructor(t,e){this.viewContainer=t,this.elementRef=e}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(a.Z),a.Xb(a.p))},t.\\u0275dir=a.Sb({type:t,selectors:[[\"\",\"footerRowOutlet\",\"\"]]}),t})(),nt=(()=>{class t{constructor(t,e){this.viewContainer=t,this.elementRef=e}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(a.Z),a.Xb(a.p))},t.\\u0275dir=a.Sb({type:t,selectors:[[\"\",\"noDataRowOutlet\",\"\"]]}),t})(),rt=(()=>{class t{constructor(t,e,n,r,i,a,o,s,l,c,h){this._differs=t,this._changeDetectorRef=e,this._elementRef=n,this._dir=i,this._platform=o,this._viewRepeater=s,this._coalescedStyleScheduler=l,this._stickyPositioningListener=c,this._viewportRuler=h,this._onDestroy=new u.a,this._columnDefsByName=new Map,this._customColumnDefs=new Set,this._customRowDefs=new Set,this._customHeaderRowDefs=new Set,this._customFooterRowDefs=new Set,this._headerRowDefChanged=!0,this._footerRowDefChanged=!0,this._stickyColumnStylesNeedReset=!0,this._forceRecalculateCellWidths=!0,this._cachedRenderRowsMap=new Map,this.stickyCssClass=\"cdk-table-sticky\",this.needsPositionStickyOnElement=!0,this._isShowingNoDataRow=!1,this._multiTemplateDataRows=!1,this._fixedLayout=!1,this.viewChange=new d.a({start:0,end:Number.MAX_VALUE}),r||this._elementRef.nativeElement.setAttribute(\"role\",\"grid\"),this._document=a,this._isNativeHtmlTable=\"TABLE\"===this._elementRef.nativeElement.nodeName}get trackBy(){return this._trackByFn}set trackBy(t){this._trackByFn=t}get dataSource(){return this._dataSource}set dataSource(t){this._dataSource!==t&&this._switchDataSource(t)}get multiTemplateDataRows(){return this._multiTemplateDataRows}set multiTemplateDataRows(t){this._multiTemplateDataRows=Object(r.c)(t),this._rowOutlet&&this._rowOutlet.viewContainer.length&&(this._forceRenderDataRows(),this.updateStickyColumnStyles())}get fixedLayout(){return this._fixedLayout}set fixedLayout(t){this._fixedLayout=Object(r.c)(t),this._forceRecalculateCellWidths=!0,this._stickyColumnStylesNeedReset=!0}ngOnInit(){this._setupStickyStyler(),this._isNativeHtmlTable&&this._applyNativeTableSections(),this._dataDiffer=this._differs.find([]).create((t,e)=>this.trackBy?this.trackBy(e.dataIndex,e.data):e),this._viewportRuler&&this._viewportRuler.change().pipe(Object(m.a)(this._onDestroy)).subscribe(()=>{this._forceRecalculateCellWidths=!0})}ngAfterContentChecked(){this._cacheRowDefs(),this._cacheColumnDefs();const t=this._renderUpdatedColumns()||this._headerRowDefChanged||this._footerRowDefChanged;this._stickyColumnStylesNeedReset=this._stickyColumnStylesNeedReset||t,this._forceRecalculateCellWidths=t,this._headerRowDefChanged&&(this._forceRenderHeaderRows(),this._headerRowDefChanged=!1),this._footerRowDefChanged&&(this._forceRenderFooterRows(),this._footerRowDefChanged=!1),this.dataSource&&this._rowDefs.length>0&&!this._renderChangeSubscription?this._observeRenderChanges():this._stickyColumnStylesNeedReset&&this.updateStickyColumnStyles(),this._checkStickyStates()}ngOnDestroy(){this._rowOutlet.viewContainer.clear(),this._noDataRowOutlet.viewContainer.clear(),this._headerRowOutlet.viewContainer.clear(),this._footerRowOutlet.viewContainer.clear(),this._cachedRenderRowsMap.clear(),this._onDestroy.next(),this._onDestroy.complete(),Object(i.h)(this.dataSource)&&this.dataSource.disconnect(this)}renderRows(){this._renderRows=this._getAllRenderRows();const t=this._dataDiffer.diff(this._renderRows);if(!t)return void this._updateNoDataRow();const e=this._rowOutlet.viewContainer;this._viewRepeater?this._viewRepeater.applyChanges(t,e,(t,e,n)=>this._getEmbeddedViewArgs(t.item,n),t=>t.item.data,t=>{1===t.operation&&t.context&&this._renderCellTemplateForItem(t.record.item.rowDef,t.context)}):t.forEachOperation((t,n,r)=>{if(null==t.previousIndex){const e=t.item;this._renderRow(this._rowOutlet,e.rowDef,r,{$implicit:e.data})}else if(null==r)e.remove(n);else{const t=e.get(n);e.move(t,r)}}),this._updateRowIndexContext(),t.forEachIdentityChange(t=>{e.get(t.currentIndex).context.$implicit=t.item.data}),this._updateNoDataRow(),this.updateStickyColumnStyles()}addColumnDef(t){this._customColumnDefs.add(t)}removeColumnDef(t){this._customColumnDefs.delete(t)}addRowDef(t){this._customRowDefs.add(t)}removeRowDef(t){this._customRowDefs.delete(t)}addHeaderRowDef(t){this._customHeaderRowDefs.add(t),this._headerRowDefChanged=!0}removeHeaderRowDef(t){this._customHeaderRowDefs.delete(t),this._headerRowDefChanged=!0}addFooterRowDef(t){this._customFooterRowDefs.add(t),this._footerRowDefChanged=!0}removeFooterRowDef(t){this._customFooterRowDefs.delete(t),this._footerRowDefChanged=!0}setNoDataRow(t){this._customNoDataRow=t}updateStickyHeaderRowStyles(){const t=this._getRenderedRows(this._headerRowOutlet),e=this._elementRef.nativeElement.querySelector(\"thead\");e&&(e.style.display=t.length?\"\":\"none\");const n=this._headerRowDefs.map(t=>t.sticky);this._stickyStyler.clearStickyPositioning(t,[\"top\"]),this._stickyStyler.stickRows(t,n,\"top\"),this._headerRowDefs.forEach(t=>t.resetStickyChanged())}updateStickyFooterRowStyles(){const t=this._getRenderedRows(this._footerRowOutlet),e=this._elementRef.nativeElement.querySelector(\"tfoot\");e&&(e.style.display=t.length?\"\":\"none\");const n=this._footerRowDefs.map(t=>t.sticky);this._stickyStyler.clearStickyPositioning(t,[\"bottom\"]),this._stickyStyler.stickRows(t,n,\"bottom\"),this._stickyStyler.updateStickyFooterContainer(this._elementRef.nativeElement,n),this._footerRowDefs.forEach(t=>t.resetStickyChanged())}updateStickyColumnStyles(){const t=this._getRenderedRows(this._headerRowOutlet),e=this._getRenderedRows(this._rowOutlet),n=this._getRenderedRows(this._footerRowOutlet);(this._isNativeHtmlTable&&!this._fixedLayout||this._stickyColumnStylesNeedReset)&&(this._stickyStyler.clearStickyPositioning([...t,...e,...n],[\"left\",\"right\"]),this._stickyColumnStylesNeedReset=!1),t.forEach((t,e)=>{this._addStickyColumnStyles([t],this._headerRowDefs[e])}),this._rowDefs.forEach(t=>{const n=[];for(let r=0;r<e.length;r++)this._renderRows[r].rowDef===t&&n.push(e[r]);this._addStickyColumnStyles(n,t)}),n.forEach((t,e)=>{this._addStickyColumnStyles([t],this._footerRowDefs[e])}),Array.from(this._columnDefsByName.values()).forEach(t=>t.resetStickyChanged())}_getAllRenderRows(){const t=[],e=this._cachedRenderRowsMap;this._cachedRenderRowsMap=new Map;for(let n=0;n<this._data.length;n++){let r=this._data[n];const i=this._getRenderRowsForData(r,n,e.get(r));this._cachedRenderRowsMap.has(r)||this._cachedRenderRowsMap.set(r,new WeakMap);for(let e=0;e<i.length;e++){let n=i[e];const r=this._cachedRenderRowsMap.get(n.data);r.has(n.rowDef)?r.get(n.rowDef).push(n):r.set(n.rowDef,[n]),t.push(n)}}return t}_getRenderRowsForData(t,e,n){return this._getRowDefs(t,e).map(r=>{const i=n&&n.has(r)?n.get(r):[];if(i.length){const t=i.shift();return t.dataIndex=e,t}return{data:t,rowDef:r,dataIndex:e}})}_cacheColumnDefs(){this._columnDefsByName.clear(),it(this._getOwnDefs(this._contentColumnDefs),this._customColumnDefs).forEach(t=>{this._columnDefsByName.has(t.name),this._columnDefsByName.set(t.name,t)})}_cacheRowDefs(){this._headerRowDefs=it(this._getOwnDefs(this._contentHeaderRowDefs),this._customHeaderRowDefs),this._footerRowDefs=it(this._getOwnDefs(this._contentFooterRowDefs),this._customFooterRowDefs),this._rowDefs=it(this._getOwnDefs(this._contentRowDefs),this._customRowDefs);const t=this._rowDefs.filter(t=>!t.when);this._defaultRowDef=t[0]}_renderUpdatedColumns(){const t=(t,e)=>t||!!e.getColumnsDiff(),e=this._rowDefs.reduce(t,!1);e&&this._forceRenderDataRows();const n=this._headerRowDefs.reduce(t,!1);n&&this._forceRenderHeaderRows();const r=this._footerRowDefs.reduce(t,!1);return r&&this._forceRenderFooterRows(),e||n||r}_switchDataSource(t){this._data=[],Object(i.h)(this.dataSource)&&this.dataSource.disconnect(this),this._renderChangeSubscription&&(this._renderChangeSubscription.unsubscribe(),this._renderChangeSubscription=null),t||(this._dataDiffer&&this._dataDiffer.diff([]),this._rowOutlet.viewContainer.clear()),this._dataSource=t}_observeRenderChanges(){if(!this.dataSource)return;let t;Object(i.h)(this.dataSource)?t=this.dataSource.connect(this):Object(f.a)(this.dataSource)?t=this.dataSource:Array.isArray(this.dataSource)&&(t=Object(p.a)(this.dataSource)),this._renderChangeSubscription=t.pipe(Object(m.a)(this._onDestroy)).subscribe(t=>{this._data=t||[],this.renderRows()})}_forceRenderHeaderRows(){this._headerRowOutlet.viewContainer.length>0&&this._headerRowOutlet.viewContainer.clear(),this._headerRowDefs.forEach((t,e)=>this._renderRow(this._headerRowOutlet,t,e)),this.updateStickyHeaderRowStyles()}_forceRenderFooterRows(){this._footerRowOutlet.viewContainer.length>0&&this._footerRowOutlet.viewContainer.clear(),this._footerRowDefs.forEach((t,e)=>this._renderRow(this._footerRowOutlet,t,e)),this.updateStickyFooterRowStyles()}_addStickyColumnStyles(t,e){const n=Array.from(e.columns||[]).map(t=>this._columnDefsByName.get(t)),r=n.map(t=>t.sticky),i=n.map(t=>t.stickyEnd);this._stickyStyler.updateStickyColumns(t,r,i,!this._fixedLayout||this._forceRecalculateCellWidths)}_getRenderedRows(t){const e=[];for(let n=0;n<t.viewContainer.length;n++){const r=t.viewContainer.get(n);e.push(r.rootNodes[0])}return e}_getRowDefs(t,e){if(1==this._rowDefs.length)return[this._rowDefs[0]];let n=[];if(this.multiTemplateDataRows)n=this._rowDefs.filter(n=>!n.when||n.when(e,t));else{let r=this._rowDefs.find(n=>n.when&&n.when(e,t))||this._defaultRowDef;r&&n.push(r)}return n}_getEmbeddedViewArgs(t,e){return{templateRef:t.rowDef.template,context:{$implicit:t.data},index:e}}_renderRow(t,e,n,r={}){const i=t.viewContainer.createEmbeddedView(e.template,r,n);return this._renderCellTemplateForItem(e,r),i}_renderCellTemplateForItem(t,e){for(let n of this._getCellTemplates(t))W.mostRecentCellOutlet&&W.mostRecentCellOutlet._viewContainer.createEmbeddedView(n,e);this._changeDetectorRef.markForCheck()}_updateRowIndexContext(){const t=this._rowOutlet.viewContainer;for(let e=0,n=t.length;e<n;e++){const r=t.get(e).context;r.count=n,r.first=0===e,r.last=e===n-1,r.even=e%2==0,r.odd=!r.even,this.multiTemplateDataRows?(r.dataIndex=this._renderRows[e].dataIndex,r.renderIndex=e):r.index=this._renderRows[e].dataIndex}}_getCellTemplates(t){return t&&t.columns?Array.from(t.columns,e=>{const n=this._columnDefsByName.get(e);return t.extractCellTemplate(n)}):[]}_applyNativeTableSections(){const t=this._document.createDocumentFragment(),e=[{tag:\"thead\",outlets:[this._headerRowOutlet]},{tag:\"tbody\",outlets:[this._rowOutlet,this._noDataRowOutlet]},{tag:\"tfoot\",outlets:[this._footerRowOutlet]}];for(const n of e){const e=this._document.createElement(n.tag);e.setAttribute(\"role\",\"rowgroup\");for(const t of n.outlets)e.appendChild(t.elementRef.nativeElement);t.appendChild(e)}this._elementRef.nativeElement.appendChild(t)}_forceRenderDataRows(){this._dataDiffer.diff([]),this._rowOutlet.viewContainer.clear(),this.renderRows()}_checkStickyStates(){const t=(t,e)=>t||e.hasStickyChanged();this._headerRowDefs.reduce(t,!1)&&this.updateStickyHeaderRowStyles(),this._footerRowDefs.reduce(t,!1)&&this.updateStickyFooterRowStyles(),Array.from(this._columnDefsByName.values()).reduce(t,!1)&&(this._stickyColumnStylesNeedReset=!0,this.updateStickyColumnStyles())}_setupStickyStyler(){this._stickyStyler=new K(this._isNativeHtmlTable,this.stickyCssClass,this._dir?this._dir.value:\"ltr\",this._coalescedStyleScheduler,this._platform.isBrowser,this.needsPositionStickyOnElement,this._stickyPositioningListener),(this._dir?this._dir.change:Object(p.a)()).pipe(Object(m.a)(this._onDestroy)).subscribe(t=>{this._stickyStyler.direction=t,this.updateStickyColumnStyles()})}_getOwnDefs(t){return t.filter(t=>!t._table||t._table===this)}_updateNoDataRow(){const t=this._customNoDataRow||this._noDataRow;if(t){const e=0===this._rowOutlet.viewContainer.length;if(e!==this._isShowingNoDataRow){const n=this._noDataRowOutlet.viewContainer;e?n.createEmbeddedView(t.templateRef):n.clear(),this._isShowingNoDataRow=e}}}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(a.z),a.Xb(a.j),a.Xb(a.p),a.ic(\"role\"),a.Xb(o.b,8),a.Xb(c.d),a.Xb(s.a),a.Xb(i.g,8),a.Xb(R,8),a.Xb($,12),a.Xb(l.e,8))},t.\\u0275cmp=a.Rb({type:t,selectors:[[\"cdk-table\"],[\"table\",\"cdk-table\",\"\"]],contentQueries:function(t,e,n){if(1&t&&(a.Qb(n,Z,!0),a.Qb(n,C,!0),a.Qb(n,U,!0),a.Qb(n,B,!0),a.Qb(n,V,!0)),2&t){let t;a.Ac(t=a.mc())&&(e._noDataRow=t.first),a.Ac(t=a.mc())&&(e._contentColumnDefs=t),a.Ac(t=a.mc())&&(e._contentRowDefs=t),a.Ac(t=a.mc())&&(e._contentHeaderRowDefs=t),a.Ac(t=a.mc())&&(e._contentFooterRowDefs=t)}},viewQuery:function(t,e){if(1&t&&(a.Ic(Q,!0),a.Ic(tt,!0),a.Ic(et,!0),a.Ic(nt,!0)),2&t){let t;a.Ac(t=a.mc())&&(e._rowOutlet=t.first),a.Ac(t=a.mc())&&(e._headerRowOutlet=t.first),a.Ac(t=a.mc())&&(e._footerRowOutlet=t.first),a.Ac(t=a.mc())&&(e._noDataRowOutlet=t.first)}},hostAttrs:[1,\"cdk-table\"],hostVars:2,hostBindings:function(t,e){2&t&&a.Pb(\"cdk-table-fixed-layout\",e.fixedLayout)},inputs:{trackBy:\"trackBy\",dataSource:\"dataSource\",multiTemplateDataRows:\"multiTemplateDataRows\",fixedLayout:\"fixedLayout\"},exportAs:[\"cdkTable\"],features:[a.Kb([{provide:w,useExisting:t},{provide:i.g,useClass:i.e},{provide:R,useClass:z},{provide:$,useValue:null}])],ngContentSelectors:v,decls:6,vars:0,consts:[[\"headerRowOutlet\",\"\"],[\"rowOutlet\",\"\"],[\"noDataRowOutlet\",\"\"],[\"footerRowOutlet\",\"\"]],template:function(t,e){1&t&&(a.uc(y),a.tc(0),a.tc(1,1),a.Zb(2,0),a.Zb(3,1),a.Zb(4,2),a.Zb(5,3))},directives:[tt,Q,nt,et],styles:[\".cdk-table-fixed-layout{table-layout:fixed}\\n\"],encapsulation:2}),t})();function it(t,e){return t.concat(Array.from(e))}let at=(()=>{class t{constructor(t,e){this._table=t,this._options=e,this.justify=\"start\",this._options=e||{}}get name(){return this._name}set name(t){this._name=t,this._syncColumnDefName()}ngOnInit(){this._syncColumnDefName(),void 0===this.headerText&&(this.headerText=this._createDefaultHeaderText()),this.dataAccessor||(this.dataAccessor=this._options.defaultDataAccessor||((t,e)=>t[e])),this._table&&(this.columnDef.cell=this.cell,this.columnDef.headerCell=this.headerCell,this._table.addColumnDef(this.columnDef))}ngOnDestroy(){this._table&&this._table.removeColumnDef(this.columnDef)}_createDefaultHeaderText(){const t=this.name;return this._options&&this._options.defaultHeaderTextTransform?this._options.defaultHeaderTextTransform(t):t[0].toUpperCase()+t.slice(1)}_syncColumnDefName(){this.columnDef&&(this.columnDef.name=this.name)}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(rt,8),a.Xb(k,8))},t.\\u0275cmp=a.Rb({type:t,selectors:[[\"cdk-text-column\"]],viewQuery:function(t,e){if(1&t&&(a.Ic(C,!0),a.Ic(M,!0),a.Ic(T,!0)),2&t){let t;a.Ac(t=a.mc())&&(e.columnDef=t.first),a.Ac(t=a.mc())&&(e.cell=t.first),a.Ac(t=a.mc())&&(e.headerCell=t.first)}},inputs:{justify:\"justify\",name:\"name\",headerText:\"headerText\",dataAccessor:\"dataAccessor\"},decls:3,vars:0,consts:[[\"cdkColumnDef\",\"\"],[\"cdk-header-cell\",\"\",3,\"text-align\",4,\"cdkHeaderCellDef\"],[\"cdk-cell\",\"\",3,\"text-align\",4,\"cdkCellDef\"],[\"cdk-header-cell\",\"\"],[\"cdk-cell\",\"\"]],template:function(t,e){1&t&&(a.bc(0,0),a.Mc(1,_,2,3,\"th\",1),a.Mc(2,b,2,3,\"td\",2),a.ac())},directives:[C,T,M,O,I],encapsulation:2}),t})(),ot=(()=>{class t{}return t.\\u0275mod=a.Vb({type:t}),t.\\u0275inj=a.Ub({factory:function(e){return new(e||t)},imports:[[l.d]]}),t})()},fXoL:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return Sn})),n.d(e,\"b\",(function(){return xf})),n.d(e,\"c\",(function(){return gf})),n.d(e,\"d\",(function(){return pf})),n.d(e,\"e\",(function(){return mf})),n.d(e,\"f\",(function(){return yp})),n.d(e,\"g\",(function(){return ap})),n.d(e,\"h\",(function(){return If})),n.d(e,\"i\",(function(){return O})),n.d(e,\"j\",(function(){return lh})),n.d(e,\"k\",(function(){return Df})),n.d(e,\"l\",(function(){return af})),n.d(e,\"m\",(function(){return zu})),n.d(e,\"n\",(function(){return Mf})),n.d(e,\"o\",(function(){return rf})),n.d(e,\"p\",(function(){return Bu})),n.d(e,\"q\",(function(){return fp})),n.d(e,\"r\",(function(){return gi})),n.d(e,\"s\",(function(){return sd})),n.d(e,\"t\",(function(){return yo})),n.d(e,\"u\",(function(){return qn})),n.d(e,\"v\",(function(){return S})),n.d(e,\"w\",(function(){return Tn})),n.d(e,\"x\",(function(){return Io})),n.d(e,\"y\",(function(){return sf})),n.d(e,\"z\",(function(){return rh})),n.d(e,\"A\",(function(){return ih})),n.d(e,\"B\",(function(){return kf})),n.d(e,\"C\",(function(){return df})),n.d(e,\"D\",(function(){return _h})),n.d(e,\"E\",(function(){return sp})),n.d(e,\"F\",(function(){return vh})),n.d(e,\"G\",(function(){return tp})),n.d(e,\"H\",(function(){return zf})),n.d(e,\"I\",(function(){return Gn})),n.d(e,\"J\",(function(){return lf})),n.d(e,\"K\",(function(){return bf})),n.d(e,\"L\",(function(){return _f})),n.d(e,\"M\",(function(){return of})),n.d(e,\"N\",(function(){return cd})),n.d(e,\"O\",(function(){return Hu})),n.d(e,\"P\",(function(){return Yu})),n.d(e,\"Q\",(function(){return Mi})),n.d(e,\"R\",(function(){return Uu})),n.d(e,\"S\",(function(){return ni})),n.d(e,\"T\",(function(){return Zn})),n.d(e,\"U\",(function(){return up})),n.d(e,\"V\",(function(){return ph})),n.d(e,\"W\",(function(){return Vf})),n.d(e,\"X\",(function(){return Cn})),n.d(e,\"Y\",(function(){return Wu})),n.d(e,\"Z\",(function(){return xh})),n.d(e,\"ab\",(function(){return D})),n.d(e,\"bb\",(function(){return ep})),n.d(e,\"cb\",(function(){return $f})),n.d(e,\"db\",(function(){return f})),n.d(e,\"eb\",(function(){return np})),n.d(e,\"fb\",(function(){return dr})),n.d(e,\"gb\",(function(){return Kf})),n.d(e,\"hb\",(function(){return mp})),n.d(e,\"ib\",(function(){return qf})),n.d(e,\"jb\",(function(){return wf})),n.d(e,\"kb\",(function(){return _o})),n.d(e,\"lb\",(function(){return kc})),n.d(e,\"mb\",(function(){return ti})),n.d(e,\"nb\",(function(){return zr})),n.d(e,\"ob\",(function(){return Mr})),n.d(e,\"pb\",(function(){return Sr})),n.d(e,\"qb\",(function(){return Er})),n.d(e,\"rb\",(function(){return Lr})),n.d(e,\"sb\",(function(){return Ar})),n.d(e,\"tb\",(function(){return Cr})),n.d(e,\"ub\",(function(){return _c})),n.d(e,\"vb\",(function(){return pp})),n.d(e,\"wb\",(function(){return bc})),n.d(e,\"xb\",(function(){return xc})),n.d(e,\"yb\",(function(){return Tr})),n.d(e,\"zb\",(function(){return j})),n.d(e,\"Ab\",(function(){return Go})),n.d(e,\"Bb\",(function(){return Ps})),n.d(e,\"Cb\",(function(){return Is})),n.d(e,\"Db\",(function(){return vc})),n.d(e,\"Eb\",(function(){return Ih})),n.d(e,\"Fb\",(function(){return Et})),n.d(e,\"Gb\",(function(){return u})),n.d(e,\"Hb\",(function(){return kr})),n.d(e,\"Ib\",(function(){return zo})),n.d(e,\"Jb\",(function(){return wt})),n.d(e,\"Kb\",(function(){return Iu})),n.d(e,\"Lb\",(function(){return ya})),n.d(e,\"Mb\",(function(){return es})),n.d(e,\"Nb\",(function(){return gl})),n.d(e,\"Ob\",(function(){return Bl})),n.d(e,\"Pb\",(function(){return fl})),n.d(e,\"Qb\",(function(){return wd})),n.d(e,\"Rb\",(function(){return X})),n.d(e,\"Sb\",(function(){return nt})),n.d(e,\"Tb\",(function(){return y})),n.d(e,\"Ub\",(function(){return v})),n.d(e,\"Vb\",(function(){return Q})),n.d(e,\"Wb\",(function(){return rt})),n.d(e,\"Xb\",(function(){return ws})),n.d(e,\"Yb\",(function(){return Ls})),n.d(e,\"Zb\",(function(){return Os})),n.d(e,\"ac\",(function(){return Es})),n.d(e,\"bc\",(function(){return Cs})),n.d(e,\"cc\",(function(){return As})),n.d(e,\"dc\",(function(){return Ss})),n.d(e,\"ec\",(function(){return Ds})),n.d(e,\"fc\",(function(){return mn})),n.d(e,\"gc\",(function(){return fc})),n.d(e,\"hc\",(function(){return ur})),n.d(e,\"ic\",(function(){return gn})),n.d(e,\"jc\",(function(){return Ed})),n.d(e,\"kc\",(function(){return ks})),n.d(e,\"lc\",(function(){return Rs})),n.d(e,\"mc\",(function(){return Td})),n.d(e,\"nc\",(function(){return Oe})),n.d(e,\"oc\",(function(){return Ce})),n.d(e,\"pc\",(function(){return Bs})),n.d(e,\"qc\",(function(){return Qh})),n.d(e,\"rc\",(function(){return td})),n.d(e,\"sc\",(function(){return ed})),n.d(e,\"tc\",(function(){return Vs})),n.d(e,\"uc\",(function(){return Hs})),n.d(e,\"vc\",(function(){return Ms})),n.d(e,\"wc\",(function(){return Us})),n.d(e,\"xc\",(function(){return jh})),n.d(e,\"yc\",(function(){return Fh})),n.d(e,\"zc\",(function(){return Nh})),n.d(e,\"Ac\",(function(){return vd})),n.d(e,\"Bc\",(function(){return xs})),n.d(e,\"Cc\",(function(){return wi})),n.d(e,\"Dc\",(function(){return bi})),n.d(e,\"Ec\",(function(){return $t})),n.d(e,\"Fc\",(function(){return ai})),n.d(e,\"Gc\",(function(){return tt})),n.d(e,\"Hc\",(function(){return kd})),n.d(e,\"Ic\",(function(){return _d})),n.d(e,\"Jc\",(function(){return dl})),n.d(e,\"Kc\",(function(){return zs})),n.d(e,\"Lc\",(function(){return pc})),n.d(e,\"Mc\",(function(){return bs})),n.d(e,\"Nc\",(function(){return Cd})),n.d(e,\"Oc\",(function(){return Cl})),n.d(e,\"Pc\",(function(){return El})),n.d(e,\"Qc\",(function(){return Ol})),n.d(e,\"Rc\",(function(){return Dl})),n.d(e,\"Sc\",(function(){return bd}));var r=n(\"XNiG\"),i=n(\"quSY\"),a=n(\"HDdC\"),o=n(\"VRyK\"),s=n(\"w1tV\");function l(t){for(let e in t)if(t[e]===l)return e;throw Error(\"Could not find renamed property on target object.\")}function c(t,e){for(const n in e)e.hasOwnProperty(n)&&!t.hasOwnProperty(n)&&(t[n]=e[n])}function u(t){if(\"string\"==typeof t)return t;if(Array.isArray(t))return\"[\"+t.map(u).join(\", \")+\"]\";if(null==t)return\"\"+t;if(t.overriddenName)return\"\"+t.overriddenName;if(t.name)return\"\"+t.name;const e=t.toString();if(null==e)return\"\"+e;const n=e.indexOf(\"\\n\");return-1===n?e:e.substring(0,n)}function h(t,e){return null==t||\"\"===t?null===e?\"\":e:null==e||\"\"===e?t:t+\" \"+e}const d=l({__forward_ref__:l});function f(t){return t.__forward_ref__=f,t.toString=function(){return u(this())},t}function p(t){return m(t)?t():t}function m(t){return\"function\"==typeof t&&t.hasOwnProperty(d)&&t.__forward_ref__===f}function g(t,e,n,r){throw new Error(\"ASSERTION ERROR: \"+t+(null==r?\"\":` [Expected=> ${n} ${r} ${e} <=Actual]`))}function y(t){return{token:t.token,providedIn:t.providedIn||null,factory:t.factory,value:void 0}}function v(t){return{factory:t.factory,providers:t.providers||[],imports:t.imports||[]}}function _(t){return b(t,w)||b(t,M)}function b(t,e){return t.hasOwnProperty(e)?t[e]:null}function x(t){return t&&(t.hasOwnProperty(k)||t.hasOwnProperty(T))?t[k]:null}const w=l({\"\\u0275prov\":l}),k=l({\"\\u0275inj\":l}),M=l({ngInjectableDef:l}),T=l({ngInjectorDef:l});var S=function(t){return t[t.Default=0]=\"Default\",t[t.Host=1]=\"Host\",t[t.Self=2]=\"Self\",t[t.SkipSelf=4]=\"SkipSelf\",t[t.Optional=8]=\"Optional\",t}({});let A;function L(t){const e=A;return A=t,e}function C(t,e,n){const r=_(t);if(r&&\"root\"==r.providedIn)return void 0===r.value?r.value=r.factory():r.value;if(n&S.Optional)return null;if(void 0!==e)return e;throw new Error(`Injector: NOT_FOUND [${u(t)}]`)}function E(t){return{toString:t}.toString()}var O=function(t){return t[t.OnPush=0]=\"OnPush\",t[t.Default=1]=\"Default\",t}({}),D=function(t){return t[t.Emulated=0]=\"Emulated\",t[t.None=2]=\"None\",t[t.ShadowDom=3]=\"ShadowDom\",t}({});const I=\"undefined\"!=typeof globalThis&&globalThis,P=\"undefined\"!=typeof window&&window,R=\"undefined\"!=typeof self&&\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&self,z=\"undefined\"!=typeof global&&global,j=I||z||P||R,F={},N=[],B=l({\"\\u0275cmp\":l}),Y=l({\"\\u0275dir\":l}),H=l({\"\\u0275pipe\":l}),V=l({\"\\u0275mod\":l}),U=l({\"\\u0275loc\":l}),W=l({\"\\u0275fac\":l}),q=l({__NG_ELEMENT_ID__:l});let G=0;function X(t){return E(()=>{const e={},n={type:t.type,providersResolver:null,decls:t.decls,vars:t.vars,factory:null,template:t.template||null,consts:t.consts||null,ngContentSelectors:t.ngContentSelectors,hostBindings:t.hostBindings||null,hostVars:t.hostVars||0,hostAttrs:t.hostAttrs||null,contentQueries:t.contentQueries||null,declaredInputs:e,inputs:null,outputs:null,exportAs:t.exportAs||null,onPush:t.changeDetection===O.OnPush,directiveDefs:null,pipeDefs:null,selectors:t.selectors||N,viewQuery:t.viewQuery||null,features:t.features||null,data:t.data||{},encapsulation:t.encapsulation||D.Emulated,id:\"c\",styles:t.styles||N,_:null,setInput:null,schemas:t.schemas||null,tView:null},r=t.directives,i=t.features,a=t.pipes;return n.id+=G++,n.inputs=et(t.inputs,e),n.outputs=et(t.outputs),i&&i.forEach(t=>t(n)),n.directiveDefs=r?()=>(\"function\"==typeof r?r():r).map(J):null,n.pipeDefs=a?()=>(\"function\"==typeof a?a():a).map(K):null,n})}function Z(t,e,n){const r=t.\\u0275cmp;r.directiveDefs=()=>e.map(J),r.pipeDefs=()=>n.map(K)}function J(t){return it(t)||at(t)}function K(t){return ot(t)}const $={};function Q(t){const e={type:t.type,bootstrap:t.bootstrap||N,declarations:t.declarations||N,imports:t.imports||N,exports:t.exports||N,transitiveCompileScopes:null,schemas:t.schemas||null,id:t.id||null};return null!=t.id&&E(()=>{$[t.id]=t.type}),e}function tt(t,e){return E(()=>{const n=st(t,!0);n.declarations=e.declarations||N,n.imports=e.imports||N,n.exports=e.exports||N})}function et(t,e){if(null==t)return F;const n={};for(const r in t)if(t.hasOwnProperty(r)){let i=t[r],a=i;Array.isArray(i)&&(a=i[1],i=i[0]),n[i]=r,e&&(e[i]=a)}return n}const nt=X;function rt(t){return{type:t.type,name:t.name,factory:null,pure:!1!==t.pure,onDestroy:t.type.prototype.ngOnDestroy||null}}function it(t){return t[B]||null}function at(t){return t[Y]||null}function ot(t){return t[H]||null}function st(t,e){const n=t[V]||null;if(!n&&!0===e)throw new Error(`Type ${u(t)} does not have '\\u0275mod' property.`);return n}const lt=20,ct=10;function ut(t){return Array.isArray(t)&&\"object\"==typeof t[1]}function ht(t){return Array.isArray(t)&&!0===t[1]}function dt(t){return 0!=(8&t.flags)}function ft(t){return 2==(2&t.flags)}function pt(t){return 1==(1&t.flags)}function mt(t){return null!==t.template}function gt(t,e){return t.hasOwnProperty(W)?t[W]:null}class yt extends Error{constructor(t,e){super(function(t,e){return`${t?`NG0${t}: `:\"\"}${e}`}(t,e)),this.code=t}}function vt(t){return\"string\"==typeof t?t:null==t?\"\":String(t)}function _t(t){return\"function\"==typeof t?t.name||t.toString():\"object\"==typeof t&&null!=t&&\"function\"==typeof t.type?t.type.name||t.type.toString():vt(t)}function bt(t,e){const n=e?\" in \"+e:\"\";throw new yt(\"201\",`No provider for ${_t(t)} found${n}`)}class xt{constructor(t,e,n){this.previousValue=t,this.currentValue=e,this.firstChange=n}isFirstChange(){return this.firstChange}}function wt(){return kt}function kt(t){return t.type.prototype.ngOnChanges&&(t.setInput=Tt),Mt}function Mt(){const t=St(this),e=null==t?void 0:t.current;if(e){const n=t.previous;if(n===F)t.previous=e;else for(let t in e)n[t]=e[t];t.current=null,this.ngOnChanges(e)}}function Tt(t,e,n,r){const i=St(t)||function(t,e){return t.__ngSimpleChanges__=e}(t,{previous:F,current:null}),a=i.current||(i.current={}),o=i.previous,s=this.declaredInputs[n],l=o[s];a[s]=new xt(l&&l.currentValue,e,o===F),t[r]=e}function St(t){return t.__ngSimpleChanges__||null}wt.ngInherit=!0;const At=\"http://www.w3.org/2000/svg\",Lt=\"http://www.w3.org/1998/MathML/\";let Ct=void 0;function Et(t){Ct=t}function Ot(){return void 0!==Ct?Ct:\"undefined\"!=typeof document?document:void 0}function Dt(t){return!!t.listen}const It={createRenderer:(t,e)=>Ot()};function Pt(t){for(;Array.isArray(t);)t=t[0];return t}function Rt(t,e){return Pt(e[t])}function zt(t,e){return Pt(e[t.index])}function jt(t,e){return t.data[e]}function Ft(t,e){return t[e]}function Nt(t,e){const n=e[t];return ut(n)?n:n[0]}function Bt(t){const e=function(t){return t.__ngContext__||null}(t);return e?Array.isArray(e)?e:e.lView:null}function Yt(t){return 4==(4&t[2])}function Ht(t){return 128==(128&t[2])}function Vt(t,e){return null==e?null:t[e]}function Ut(t){t[18]=0}function Wt(t,e){t[5]+=e;let n=t,r=t[3];for(;null!==r&&(1===e&&1===n[5]||-1===e&&0===n[5]);)r[5]+=e,n=r,r=r[3]}const qt={lFrame:we(null),bindingsEnabled:!0,isInCheckNoChangesMode:!1};function Gt(){return qt.bindingsEnabled}function Xt(){qt.bindingsEnabled=!0}function Zt(){qt.bindingsEnabled=!1}function Jt(){return qt.lFrame.lView}function Kt(){return qt.lFrame.tView}function $t(t){qt.lFrame.contextLView=t}function Qt(){let t=te();for(;null!==t&&64===t.type;)t=t.parent;return t}function te(){return qt.lFrame.currentTNode}function ee(){const t=qt.lFrame,e=t.currentTNode;return t.isParent?e:e.parent}function ne(t,e){const n=qt.lFrame;n.currentTNode=t,n.isParent=e}function re(){return qt.lFrame.isParent}function ie(){qt.lFrame.isParent=!1}function ae(){return qt.isInCheckNoChangesMode}function oe(t){qt.isInCheckNoChangesMode=t}function se(){const t=qt.lFrame;let e=t.bindingRootIndex;return-1===e&&(e=t.bindingRootIndex=t.tView.bindingStartIndex),e}function le(){return qt.lFrame.bindingIndex}function ce(t){return qt.lFrame.bindingIndex=t}function ue(){return qt.lFrame.bindingIndex++}function he(t){const e=qt.lFrame,n=e.bindingIndex;return e.bindingIndex=e.bindingIndex+t,n}function de(t){qt.lFrame.inI18n=t}function fe(t,e){const n=qt.lFrame;n.bindingIndex=n.bindingRootIndex=t,pe(e)}function pe(t){qt.lFrame.currentDirectiveIndex=t}function me(t){const e=qt.lFrame.currentDirectiveIndex;return-1===e?null:t[e]}function ge(){return qt.lFrame.currentQueryIndex}function ye(t){qt.lFrame.currentQueryIndex=t}function ve(t){const e=t[1];return 2===e.type?e.declTNode:1===e.type?t[6]:null}function _e(t,e,n){if(n&S.SkipSelf){let r=e,i=t;for(;r=r.parent,!(null!==r||n&S.Host||(r=ve(i),null===r)||(i=i[15],10&r.type)););if(null===r)return!1;e=r,t=i}const r=qt.lFrame=xe();return r.currentTNode=e,r.lView=t,!0}function be(t){const e=xe(),n=t[1];qt.lFrame=e,e.currentTNode=n.firstChild,e.lView=t,e.tView=n,e.contextLView=t,e.bindingIndex=n.bindingStartIndex,e.inI18n=!1}function xe(){const t=qt.lFrame,e=null===t?null:t.child;return null===e?we(t):e}function we(t){const e={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:t,child:null,inI18n:!1};return null!==t&&(t.child=e),e}function ke(){const t=qt.lFrame;return qt.lFrame=t.parent,t.currentTNode=null,t.lView=null,t}const Me=ke;function Te(){const t=ke();t.isParent=!0,t.tView=null,t.selectedIndex=-1,t.contextLView=null,t.elementDepthCount=0,t.currentDirectiveIndex=-1,t.currentNamespace=null,t.bindingRootIndex=-1,t.bindingIndex=-1,t.currentQueryIndex=0}function Se(){return qt.lFrame.selectedIndex}function Ae(t){qt.lFrame.selectedIndex=t}function Le(){const t=qt.lFrame;return jt(t.tView,t.selectedIndex)}function Ce(){qt.lFrame.currentNamespace=At}function Ee(){qt.lFrame.currentNamespace=Lt}function Oe(){qt.lFrame.currentNamespace=null}function De(t,e){for(let n=e.directiveStart,r=e.directiveEnd;n<r;n++){const e=t.data[n].type.prototype,{ngAfterContentInit:r,ngAfterContentChecked:i,ngAfterViewInit:a,ngAfterViewChecked:o,ngOnDestroy:s}=e;r&&(t.contentHooks||(t.contentHooks=[])).push(-n,r),i&&((t.contentHooks||(t.contentHooks=[])).push(n,i),(t.contentCheckHooks||(t.contentCheckHooks=[])).push(n,i)),a&&(t.viewHooks||(t.viewHooks=[])).push(-n,a),o&&((t.viewHooks||(t.viewHooks=[])).push(n,o),(t.viewCheckHooks||(t.viewCheckHooks=[])).push(n,o)),null!=s&&(t.destroyHooks||(t.destroyHooks=[])).push(n,s)}}function Ie(t,e,n){ze(t,e,3,n)}function Pe(t,e,n,r){(3&t[2])===n&&ze(t,e,n,r)}function Re(t,e){let n=t[2];(3&n)===e&&(n&=2047,n+=1,t[2]=n)}function ze(t,e,n,r){const i=null!=r?r:-1,a=e.length-1;let o=0;for(let s=void 0!==r?65535&t[18]:0;s<a;s++)if(\"number\"==typeof e[s+1]){if(o=e[s],null!=r&&o>=r)break}else e[s]<0&&(t[18]+=65536),(o<i||-1==i)&&(je(t,n,e,s),t[18]=(4294901760&t[18])+s+2),s++}function je(t,e,n,r){const i=n[r]<0,a=n[r+1],o=t[i?-n[r]:n[r]];i?t[2]>>11<t[18]>>16&&(3&t[2])===e&&(t[2]+=2048,a.call(o)):a.call(o)}const Fe=-1;class Ne{constructor(t,e,n){this.factory=t,this.resolving=!1,this.canSeeViewProviders=e,this.injectImpl=n}}function Be(t,e,n){const r=Dt(t);let i=0;for(;i<n.length;){const a=n[i];if(\"number\"==typeof a){if(0!==a)break;i++;const o=n[i++],s=n[i++],l=n[i++];r?t.setAttribute(e,s,l,o):e.setAttributeNS(o,s,l)}else{const o=a,s=n[++i];He(o)?r&&t.setProperty(e,o,s):r?t.setAttribute(e,o,s):e.setAttribute(o,s),i++}}return i}function Ye(t){return 3===t||4===t||6===t}function He(t){return 64===t.charCodeAt(0)}function Ve(t,e){if(null===e||0===e.length);else if(null===t||0===t.length)t=e.slice();else{let n=-1;for(let r=0;r<e.length;r++){const i=e[r];\"number\"==typeof i?n=i:0===n||Ue(t,n,i,null,-1===n||2===n?e[++r]:null)}}return t}function Ue(t,e,n,r,i){let a=0,o=t.length;if(-1===e)o=-1;else for(;a<t.length;){const n=t[a++];if(\"number\"==typeof n){if(n===e){o=-1;break}if(n>e){o=a-1;break}}}for(;a<t.length;){const e=t[a];if(\"number\"==typeof e)break;if(e===n){if(null===r)return void(null!==i&&(t[a+1]=i));if(r===t[a+1])return void(t[a+2]=i)}a++,null!==r&&a++,null!==i&&a++}-1!==o&&(t.splice(o,0,e),a=o+1),t.splice(a++,0,n),null!==r&&t.splice(a++,0,r),null!==i&&t.splice(a++,0,i)}function We(t){return t!==Fe}function qe(t){return 32767&t}function Ge(t,e){let n=t>>16,r=e;for(;n>0;)r=r[15],n--;return r}let Xe=!0;function Ze(t){const e=Xe;return Xe=t,e}let Je=0;function Ke(t,e){const n=Qe(t,e);if(-1!==n)return n;const r=e[1];r.firstCreatePass&&(t.injectorIndex=e.length,$e(r.data,t),$e(e,null),$e(r.blueprint,null));const i=tn(t,e),a=t.injectorIndex;if(We(i)){const t=qe(i),n=Ge(i,e),r=n[1].data;for(let i=0;i<8;i++)e[a+i]=n[t+i]|r[t+i]}return e[a+8]=i,a}function $e(t,e){t.push(0,0,0,0,0,0,0,0,e)}function Qe(t,e){return-1===t.injectorIndex||t.parent&&t.parent.injectorIndex===t.injectorIndex||null===e[t.injectorIndex+8]?-1:t.injectorIndex}function tn(t,e){if(t.parent&&-1!==t.parent.injectorIndex)return t.parent.injectorIndex;let n=0,r=null,i=e;for(;null!==i;){const t=i[1],e=t.type;if(r=2===e?t.declTNode:1===e?i[6]:null,null===r)return Fe;if(n++,i=i[15],-1!==r.injectorIndex)return r.injectorIndex|n<<16}return Fe}function en(t,e,n){!function(t,e,n){let r;\"string\"==typeof n?r=n.charCodeAt(0)||0:n.hasOwnProperty(q)&&(r=n[q]),null==r&&(r=n[q]=Je++);const i=255&r,a=1<<i,o=64&i,s=32&i,l=e.data;128&i?o?s?l[t+7]|=a:l[t+6]|=a:s?l[t+5]|=a:l[t+4]|=a:o?s?l[t+3]|=a:l[t+2]|=a:s?l[t+1]|=a:l[t]|=a}(t,e,n)}function nn(t,e,n){if(n&S.Optional)return t;bt(e,\"NodeInjector\")}function rn(t,e,n,r){if(n&S.Optional&&void 0===r&&(r=null),0==(n&(S.Self|S.Host))){const i=t[9],a=L(void 0);try{return i?i.get(e,r,n&S.Optional):C(e,r,n&S.Optional)}finally{L(a)}}return nn(r,e,n)}function an(t,e,n,r=S.Default,i){if(null!==t){const a=function(t){if(\"string\"==typeof t)return t.charCodeAt(0)||0;const e=t.hasOwnProperty(q)?t[q]:void 0;return\"number\"==typeof e?e>=0?255&e:sn:e}(n);if(\"function\"==typeof a){if(!_e(e,t,r))return r&S.Host?nn(i,n,r):rn(e,n,r,i);try{const t=a();if(null!=t||r&S.Optional)return t;bt(n)}finally{Me()}}else if(\"number\"==typeof a){let i=null,o=Qe(t,e),s=Fe,l=r&S.Host?e[16][6]:null;for((-1===o||r&S.SkipSelf)&&(s=-1===o?tn(t,e):e[o+8],s!==Fe&&dn(r,!1)?(i=e[1],o=qe(s),e=Ge(s,e)):o=-1);-1!==o;){const t=e[1];if(hn(a,o,t.data)){const t=ln(o,e,n,i,r,l);if(t!==on)return t}s=e[o+8],s!==Fe&&dn(r,e[1].data[o+8]===l)&&hn(a,o,e)?(i=t,o=qe(s),e=Ge(s,e)):o=-1}}}return rn(e,n,r,i)}const on={};function sn(){return new fn(Qt(),Jt())}function ln(t,e,n,r,i,a){const o=e[1],s=o.data[t+8],l=cn(s,o,n,null==r?ft(s)&&Xe:r!=o&&0!=(3&s.type),i&S.Host&&a===s);return null!==l?un(e,o,l,s):on}function cn(t,e,n,r,i){const a=t.providerIndexes,o=e.data,s=1048575&a,l=t.directiveStart,c=a>>20,u=i?s+c:t.directiveEnd;for(let h=r?s:s+c;h<u;h++){const t=o[h];if(h<l&&n===t||h>=l&&t.type===n)return h}if(i){const t=o[l];if(t&&mt(t)&&t.type===n)return l}return null}function un(t,e,n,r){let i=t[n];const a=e.data;if(i instanceof Ne){const o=i;o.resolving&&function(t,e){throw new yt(\"200\",\"Circular dependency in DI detected for \"+t)}(_t(a[n]));const s=Ze(o.canSeeViewProviders);o.resolving=!0;const l=o.injectImpl?L(o.injectImpl):null;_e(t,r,S.Default);try{i=t[n]=o.factory(void 0,a,t,r),e.firstCreatePass&&n>=r.directiveStart&&function(t,e,n){const{ngOnChanges:r,ngOnInit:i,ngDoCheck:a}=e.type.prototype;if(r){const r=kt(e);(n.preOrderHooks||(n.preOrderHooks=[])).push(t,r),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(t,r)}i&&(n.preOrderHooks||(n.preOrderHooks=[])).push(0-t,i),a&&((n.preOrderHooks||(n.preOrderHooks=[])).push(t,a),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(t,a))}(n,a[n],e)}finally{null!==l&&L(l),Ze(s),o.resolving=!1,Me()}}return i}function hn(t,e,n){const r=64&t,i=32&t;let a;return a=128&t?r?i?n[e+7]:n[e+6]:i?n[e+5]:n[e+4]:r?i?n[e+3]:n[e+2]:i?n[e+1]:n[e],!!(a&1<<t)}function dn(t,e){return!(t&S.Self||t&S.Host&&e)}class fn{constructor(t,e){this._tNode=t,this._lView=e}get(t,e){return an(this._tNode,this._lView,t,void 0,e)}}function pn(t){const e=t;if(m(t))return()=>{const t=pn(p(e));return t?t():null};let n=gt(e);if(null===n){const t=x(e);n=t&&t.factory}return n||null}function mn(t){return E(()=>{const e=t.prototype.constructor,n=e[W]||pn(e),r=Object.prototype;let i=Object.getPrototypeOf(t.prototype).constructor;for(;i&&i!==r;){const t=i[W]||pn(i);if(t&&t!==n)return t;i=Object.getPrototypeOf(i)}return t=>new t})}function gn(t){return function(t,e){if(\"class\"===e)return t.classes;if(\"style\"===e)return t.styles;const n=t.attrs;if(n){const t=n.length;let r=0;for(;r<t;){const i=n[r];if(Ye(i))break;if(0===i)r+=2;else if(\"number\"==typeof i)for(r++;r<t&&\"string\"==typeof n[r];)r++;else{if(i===e)return n[r+1];r+=2}}}return null}(Qt(),t)}const yn=\"__annotations__\",vn=\"__parameters__\",_n=\"__prop__metadata__\";function bn(t,e,n,r,i){return E(()=>{const a=xn(e);function o(...t){if(this instanceof o)return a.call(this,...t),this;const e=new o(...t);return function(n){return i&&i(n,...t),(n.hasOwnProperty(yn)?n[yn]:Object.defineProperty(n,yn,{value:[]})[yn]).push(e),r&&r(n),n}}return n&&(o.prototype=Object.create(n.prototype)),o.prototype.ngMetadataName=t,o.annotationCls=o,o})}function xn(t){return function(...e){if(t){const n=t(...e);for(const t in n)this[t]=n[t]}}}function wn(t,e,n){return E(()=>{const r=xn(e);function i(...t){if(this instanceof i)return r.apply(this,t),this;const e=new i(...t);return n.annotation=e,n;function n(t,n,r){const i=t.hasOwnProperty(vn)?t[vn]:Object.defineProperty(t,vn,{value:[]})[vn];for(;i.length<=r;)i.push(null);return(i[r]=i[r]||[]).push(e),t}}return n&&(i.prototype=Object.create(n.prototype)),i.prototype.ngMetadataName=t,i.annotationCls=i,i})}function kn(t,e,n,r){return E(()=>{const i=xn(e);function a(...t){if(this instanceof a)return i.apply(this,t),this;const e=new a(...t);return function(n,i){const a=n.constructor,o=a.hasOwnProperty(_n)?a[_n]:Object.defineProperty(a,_n,{value:{}})[_n];o[i]=o.hasOwnProperty(i)&&o[i]||[],o[i].unshift(e),r&&r(n,i,...t)}}return n&&(a.prototype=Object.create(n.prototype)),a.prototype.ngMetadataName=t,a.annotationCls=a,a})}const Mn=function(){return wn(\"Attribute\",t=>({attributeName:t,__NG_ELEMENT_ID__:()=>gn(t)}))}();class Tn{constructor(t,e){this._desc=t,this.ngMetadataName=\"InjectionToken\",this.\\u0275prov=void 0,\"number\"==typeof e?this.__NG_ELEMENT_ID__=e:void 0!==e&&(this.\\u0275prov=y({token:this,providedIn:e.providedIn||\"root\",factory:e.factory}))}toString(){return\"InjectionToken \"+this._desc}}const Sn=new Tn(\"AnalyzeForEntryComponents\");var An=function(t){return t[t.Token=0]=\"Token\",t[t.Attribute=1]=\"Attribute\",t[t.ChangeDetectorRef=2]=\"ChangeDetectorRef\",t[t.Invalid=3]=\"Invalid\",t}({});function Ln(){const t=j.ng;if(!t||!t.\\u0275compilerFacade)throw new Error(\"Angular JIT compilation failed: '@angular/compiler' not loaded!\\n  - JIT compilation is discouraged for production use-cases! Consider AOT mode instead.\\n  - Did you bootstrap using '@angular/platform-browser-dynamic' or '@angular/platform-server'?\\n  - Alternatively provide the compiler with 'import \\\"@angular/compiler\\\";' before bootstrapping.\");return t.\\u0275compilerFacade}const Cn=Function;function En(t){return\"function\"==typeof t}function On(t,e){void 0===e&&(e=t);for(let n=0;n<t.length;n++){let r=t[n];Array.isArray(r)?(e===t&&(e=t.slice(0,n)),On(r,e)):e!==t&&e.push(r)}return e}function Dn(t,e){t.forEach(t=>Array.isArray(t)?Dn(t,e):e(t))}function In(t,e,n){e>=t.length?t.push(n):t.splice(e,0,n)}function Pn(t,e){return e>=t.length-1?t.pop():t.splice(e,1)[0]}function Rn(t,e){const n=[];for(let r=0;r<t;r++)n.push(e);return n}function zn(t,e,n){let r=Fn(t,e);return r>=0?t[1|r]=n:(r=~r,function(t,e,n,r){let i=t.length;if(i==e)t.push(n,r);else if(1===i)t.push(r,t[0]),t[0]=n;else{for(i--,t.push(t[i-1],t[i]);i>e;)t[i]=t[i-2],i--;t[e]=n,t[e+1]=r}}(t,r,e,n)),r}function jn(t,e){const n=Fn(t,e);if(n>=0)return t[1|n]}function Fn(t,e){return function(t,e,n){let r=0,i=t.length>>1;for(;i!==r;){const n=r+(i-r>>1),a=t[n<<1];if(e===a)return n<<1;a>e?i=n:r=n+1}return~(i<<1)}(t,e)}const Nn=/^function\\s+\\S+\\(\\)\\s*{[\\s\\S]+\\.apply\\(this,\\s*(arguments|[^()]+\\(arguments\\))\\)/,Bn=/^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{/,Yn=/^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{[\\s\\S]*constructor\\s*\\(/,Hn=/^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{[\\s\\S]*constructor\\s*\\(\\)\\s*{\\s*super\\(\\.\\.\\.arguments\\)/;class Vn{constructor(t){this._reflect=t||j.Reflect}isReflectionEnabled(){return!0}factory(t){return(...e)=>new t(...e)}_zipTypesAndAnnotations(t,e){let n;n=Rn(void 0===t?e.length:t.length);for(let r=0;r<n.length;r++)n[r]=void 0===t?[]:t[r]&&t[r]!=Object?[t[r]]:[],e&&null!=e[r]&&(n[r]=n[r].concat(e[r]));return n}_ownParameters(t,e){if(n=t.toString(),Nn.test(n)||Hn.test(n)||Bn.test(n)&&!Yn.test(n))return null;var n;if(t.parameters&&t.parameters!==e.parameters)return t.parameters;const r=t.ctorParameters;if(r&&r!==e.ctorParameters){const t=\"function\"==typeof r?r():r,e=t.map(t=>t&&t.type),n=t.map(t=>t&&Un(t.decorators));return this._zipTypesAndAnnotations(e,n)}const i=t.hasOwnProperty(vn)&&t[vn],a=this._reflect&&this._reflect.getOwnMetadata&&this._reflect.getOwnMetadata(\"design:paramtypes\",t);return a||i?this._zipTypesAndAnnotations(a,i):Rn(t.length)}parameters(t){if(!En(t))return[];const e=Wn(t);let n=this._ownParameters(t,e);return n||e===Object||(n=this.parameters(e)),n||[]}_ownAnnotations(t,e){if(t.annotations&&t.annotations!==e.annotations){let e=t.annotations;return\"function\"==typeof e&&e.annotations&&(e=e.annotations),e}return t.decorators&&t.decorators!==e.decorators?Un(t.decorators):t.hasOwnProperty(yn)?t[yn]:null}annotations(t){if(!En(t))return[];const e=Wn(t),n=this._ownAnnotations(t,e)||[];return(e!==Object?this.annotations(e):[]).concat(n)}_ownPropMetadata(t,e){if(t.propMetadata&&t.propMetadata!==e.propMetadata){let e=t.propMetadata;return\"function\"==typeof e&&e.propMetadata&&(e=e.propMetadata),e}if(t.propDecorators&&t.propDecorators!==e.propDecorators){const e=t.propDecorators,n={};return Object.keys(e).forEach(t=>{n[t]=Un(e[t])}),n}return t.hasOwnProperty(_n)?t[_n]:null}propMetadata(t){if(!En(t))return{};const e=Wn(t),n={};if(e!==Object){const t=this.propMetadata(e);Object.keys(t).forEach(e=>{n[e]=t[e]})}const r=this._ownPropMetadata(t,e);return r&&Object.keys(r).forEach(t=>{const e=[];n.hasOwnProperty(t)&&e.push(...n[t]),e.push(...r[t]),n[t]=e}),n}ownPropMetadata(t){return En(t)&&this._ownPropMetadata(t,Wn(t))||{}}hasLifecycleHook(t,e){return t instanceof Cn&&e in t.prototype}guards(t){return{}}getter(t){return new Function(\"o\",\"return o.\"+t+\";\")}setter(t){return new Function(\"o\",\"v\",\"return o.\"+t+\" = v;\")}method(t){return new Function(\"o\",\"args\",`if (!o.${t}) throw new Error('\"${t}\" is undefined');\\n        return o.${t}.apply(o, args);`)}importUri(t){return\"object\"==typeof t&&t.filePath?t.filePath:\"./\"+u(t)}resourceUri(t){return\"./\"+u(t)}resolveIdentifier(t,e,n,r){return r}resolveEnum(t,e){return t[e]}}function Un(t){return t?t.map(t=>new(0,t.type.annotationCls)(...t.args?t.args:[])):[]}function Wn(t){const e=t.prototype?Object.getPrototypeOf(t.prototype):null;return(e?e.constructor:null)||Object}const qn=wn(\"Inject\",t=>({token:t})),Gn=wn(\"Optional\"),Xn=wn(\"Self\"),Zn=wn(\"SkipSelf\"),Jn=wn(\"Host\");let Kn=null;function $n(){return Kn=Kn||new Vn}function Qn(t){return function(t){const e=Ln();return t.map(t=>function(t,e){const n={token:null,host:!1,optional:!1,resolved:t.R3ResolvedDependencyType.Token,self:!1,skipSelf:!1};function r(e){n.resolved=t.R3ResolvedDependencyType.Token,n.token=e}if(Array.isArray(e)&&e.length>0)for(let i=0;i<e.length;i++){const a=e[i];if(void 0===a)continue;const o=Object.getPrototypeOf(a);if(a instanceof Gn||\"Optional\"===o.ngMetadataName)n.optional=!0;else if(a instanceof Zn||\"SkipSelf\"===o.ngMetadataName)n.skipSelf=!0;else if(a instanceof Xn||\"Self\"===o.ngMetadataName)n.self=!0;else if(a instanceof Jn||\"Host\"===o.ngMetadataName)n.host=!0;else if(a instanceof qn)n.token=a.token;else if(a instanceof Mn){if(void 0===a.attributeName)throw new Error(\"Attribute name must be defined.\");n.token=a.attributeName,n.resolved=t.R3ResolvedDependencyType.Attribute}else!0===a.__ChangeDetectorRef__?(n.token=a,n.resolved=t.R3ResolvedDependencyType.ChangeDetectorRef):r(a)}else void 0===e||Array.isArray(e)&&0===e.length?(n.token=void 0,n.resolved=An.Invalid):r(e);return n}(e,t))}($n().parameters(t))}let tr=new Map;const er=new Set;function nr(t){return!!(t.templateUrl&&!t.hasOwnProperty(\"template\")||t.styleUrls&&t.styleUrls.length)}const rr={},ir=/\\n/gm,ar=\"__source\",or=l({provide:String,useValue:l});let sr=void 0;function lr(t){const e=sr;return sr=t,e}function cr(t,e=S.Default){if(void 0===sr)throw new Error(\"inject() must be called from an injection context\");return null===sr?C(t,void 0,e):sr.get(t,e&S.Optional?null:void 0,e)}function ur(t,e=S.Default){return(A||cr)(p(t),e)}function hr(t){throw new Error(\"invalid\")}const dr=ur;function fr(t){const e=[];for(let n=0;n<t.length;n++){const r=p(t[n]);if(Array.isArray(r)){if(0===r.length)throw new Error(\"Arguments array must have arguments.\");let t=void 0,n=S.Default;for(let e=0;e<r.length;e++){const i=r[e];i instanceof Gn||\"Optional\"===i.ngMetadataName||i===Gn?n|=S.Optional:i instanceof Zn||\"SkipSelf\"===i.ngMetadataName||i===Zn?n|=S.SkipSelf:i instanceof Xn||\"Self\"===i.ngMetadataName||i===Xn?n|=S.Self:i instanceof Jn||\"Host\"===i.ngMetadataName||i===Jn?n|=S.Host:t=i instanceof qn||i===qn?i.token:i}e.push(ur(t,n))}else e.push(ur(r))}return e}let pr;function mr(){if(void 0===pr&&(pr=null,j.trustedTypes))try{pr=j.trustedTypes.createPolicy(\"angular\",{createHTML:t=>t,createScript:t=>t,createScriptURL:t=>t})}catch(t){}return pr}function gr(t){var e;return(null===(e=mr())||void 0===e?void 0:e.createHTML(t))||t}class yr{constructor(t){this.changingThisBreaksApplicationSecurity=t}toString(){return\"SafeValue must use [property]=binding: \"+this.changingThisBreaksApplicationSecurity+\" (see https://g.co/ng/security#xss)\"}}class vr extends yr{getTypeName(){return\"HTML\"}}class _r extends yr{getTypeName(){return\"Style\"}}class br extends yr{getTypeName(){return\"Script\"}}class xr extends yr{getTypeName(){return\"URL\"}}class wr extends yr{getTypeName(){return\"ResourceURL\"}}function kr(t){return t instanceof yr?t.changingThisBreaksApplicationSecurity:t}function Mr(t,e){const n=Tr(t);if(null!=n&&n!==e){if(\"ResourceURL\"===n&&\"URL\"===e)return!0;throw new Error(`Required a safe ${e}, got a ${n} (see https://g.co/ng/security#xss)`)}return n===e}function Tr(t){return t instanceof yr&&t.getTypeName()||null}function Sr(t){return new vr(t)}function Ar(t){return new _r(t)}function Lr(t){return new br(t)}function Cr(t){return new xr(t)}function Er(t){return new wr(t)}function Or(t){const e=new Ir(t);return function(){try{return!!(new window.DOMParser).parseFromString(gr(\"\"),\"text/html\")}catch(t){return!1}}()?new Dr(e):e}class Dr{constructor(t){this.inertDocumentHelper=t}getInertBodyElement(t){t=\"<body><remove></remove>\"+t;try{const e=(new window.DOMParser).parseFromString(gr(t),\"text/html\").body;return null===e?this.inertDocumentHelper.getInertBodyElement(t):(e.removeChild(e.firstChild),e)}catch(e){return null}}}class Ir{constructor(t){if(this.defaultDoc=t,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument(\"sanitization-inert\"),null==this.inertDocument.body){const t=this.inertDocument.createElement(\"html\");this.inertDocument.appendChild(t);const e=this.inertDocument.createElement(\"body\");t.appendChild(e)}}getInertBodyElement(t){const e=this.inertDocument.createElement(\"template\");if(\"content\"in e)return e.innerHTML=gr(t),e;const n=this.inertDocument.createElement(\"body\");return n.innerHTML=gr(t),this.defaultDoc.documentMode&&this.stripCustomNsAttrs(n),n}stripCustomNsAttrs(t){const e=t.attributes;for(let r=e.length-1;0<r;r--){const n=e.item(r).name;\"xmlns:ns1\"!==n&&0!==n.indexOf(\"ns1:\")||t.removeAttribute(n)}let n=t.firstChild;for(;n;)n.nodeType===Node.ELEMENT_NODE&&this.stripCustomNsAttrs(n),n=n.nextSibling}}const Pr=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^&:/?#]*(?:[/?#]|$))/gi,Rr=/^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+\\/]+=*$/i;function zr(t){return(t=String(t)).match(Pr)||t.match(Rr)?t:\"unsafe:\"+t}function jr(t){return(t=String(t)).split(\",\").map(t=>zr(t.trim())).join(\", \")}function Fr(t){const e={};for(const n of t.split(\",\"))e[n]=!0;return e}function Nr(...t){const e={};for(const n of t)for(const t in n)n.hasOwnProperty(t)&&(e[t]=!0);return e}const Br=Fr(\"area,br,col,hr,img,wbr\"),Yr=Fr(\"colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr\"),Hr=Fr(\"rp,rt\"),Vr=Nr(Hr,Yr),Ur=Nr(Br,Nr(Yr,Fr(\"address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul\")),Nr(Hr,Fr(\"a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video\")),Vr),Wr=Fr(\"background,cite,href,itemtype,longdesc,poster,src,xlink:href\"),qr=Fr(\"srcset\"),Gr=Nr(Wr,qr,Fr(\"abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width\"),Fr(\"aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext\")),Xr=Fr(\"script,style,template\");class Zr{constructor(){this.sanitizedSomething=!1,this.buf=[]}sanitizeChildren(t){let e=t.firstChild,n=!0;for(;e;)if(e.nodeType===Node.ELEMENT_NODE?n=this.startElement(e):e.nodeType===Node.TEXT_NODE?this.chars(e.nodeValue):this.sanitizedSomething=!0,n&&e.firstChild)e=e.firstChild;else for(;e;){e.nodeType===Node.ELEMENT_NODE&&this.endElement(e);let t=this.checkClobberedElement(e,e.nextSibling);if(t){e=t;break}e=this.checkClobberedElement(e,e.parentNode)}return this.buf.join(\"\")}startElement(t){const e=t.nodeName.toLowerCase();if(!Ur.hasOwnProperty(e))return this.sanitizedSomething=!0,!Xr.hasOwnProperty(e);this.buf.push(\"<\"),this.buf.push(e);const n=t.attributes;for(let r=0;r<n.length;r++){const t=n.item(r),e=t.name,i=e.toLowerCase();if(!Gr.hasOwnProperty(i)){this.sanitizedSomething=!0;continue}let a=t.value;Wr[i]&&(a=zr(a)),qr[i]&&(a=jr(a)),this.buf.push(\" \",e,'=\"',$r(a),'\"')}return this.buf.push(\">\"),!0}endElement(t){const e=t.nodeName.toLowerCase();Ur.hasOwnProperty(e)&&!Br.hasOwnProperty(e)&&(this.buf.push(\"</\"),this.buf.push(e),this.buf.push(\">\"))}chars(t){this.buf.push($r(t))}checkClobberedElement(t,e){if(e&&(t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_CONTAINED_BY)===Node.DOCUMENT_POSITION_CONTAINED_BY)throw new Error(\"Failed to sanitize html because the element is clobbered: \"+t.outerHTML);return e}}const Jr=/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,Kr=/([^\\#-~ |!])/g;function $r(t){return t.replace(/&/g,\"&amp;\").replace(Jr,(function(t){return\"&#\"+(1024*(t.charCodeAt(0)-55296)+(t.charCodeAt(1)-56320)+65536)+\";\"})).replace(Kr,(function(t){return\"&#\"+t.charCodeAt(0)+\";\"})).replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")}let Qr;function ti(t,e){let n=null;try{Qr=Qr||Or(t);let r=e?String(e):\"\";n=Qr.getInertBodyElement(r);let i=5,a=r;do{if(0===i)throw new Error(\"Failed to sanitize html because the input is unstable\");i--,r=a,a=n.innerHTML,n=Qr.getInertBodyElement(r)}while(r!==a);return(new Zr).sanitizeChildren(ei(n)||n)}finally{if(n){const t=ei(n)||n;for(;t.firstChild;)t.removeChild(t.firstChild)}}}function ei(t){return\"content\"in t&&function(t){return t.nodeType===Node.ELEMENT_NODE&&\"TEMPLATE\"===t.nodeName}(t)?t.content:null}var ni=function(t){return t[t.NONE=0]=\"NONE\",t[t.HTML=1]=\"HTML\",t[t.STYLE=2]=\"STYLE\",t[t.SCRIPT=3]=\"SCRIPT\",t[t.URL=4]=\"URL\",t[t.RESOURCE_URL=5]=\"RESOURCE_URL\",t}({});function ri(t){const e=di();return e?e.sanitize(ni.HTML,t)||\"\":Mr(t,\"HTML\")?kr(t):ti(Ot(),vt(t))}function ii(t){const e=di();return e?e.sanitize(ni.STYLE,t)||\"\":Mr(t,\"Style\")?kr(t):vt(t)}function ai(t){const e=di();return e?e.sanitize(ni.URL,t)||\"\":Mr(t,\"URL\")?kr(t):zr(vt(t))}function oi(t){const e=di();if(e)return e.sanitize(ni.RESOURCE_URL,t)||\"\";if(Mr(t,\"ResourceURL\"))return kr(t);throw new Error(\"unsafe value used in a resource URL context (see https://g.co/ng/security#xss)\")}function si(t){const e=di();if(e)return e.sanitize(ni.SCRIPT,t)||\"\";if(Mr(t,\"Script\"))return kr(t);throw new Error(\"unsafe value used in a script context\")}function li(t){return gr(t)}function ci(t){return function(t){var e;return(null===(e=mr())||void 0===e?void 0:e.createScript(t))||t}(t)}function ui(t){return function(t){var e;return(null===(e=mr())||void 0===e?void 0:e.createScriptURL(t))||t}(t)}function hi(t,e,n){return function(t,e){return\"src\"===e&&(\"embed\"===t||\"frame\"===t||\"iframe\"===t||\"media\"===t||\"script\"===t)||\"href\"===e&&(\"base\"===t||\"link\"===t)?oi:ai}(e,n)(t)}function di(){const t=Jt();return t&&t[12]}function fi(t){return t.ngDebugContext}function pi(t){return t.ngOriginalError}function mi(t,...e){t.error(...e)}class gi{constructor(){this._console=console}handleError(t){const e=this._findOriginalError(t),n=this._findContext(t),r=function(t){return t.ngErrorLogger||mi}(t);r(this._console,\"ERROR\",t),e&&r(this._console,\"ORIGINAL ERROR\",e),n&&r(this._console,\"ERROR CONTEXT\",n)}_findContext(t){return t?fi(t)?fi(t):this._findContext(pi(t)):null}_findOriginalError(t){let e=pi(t);for(;e&&pi(e);)e=pi(e);return e}}const yi=/-->/g;function vi(t,e){t.__ngContext__=e}const _i=(()=>(\"undefined\"!=typeof requestAnimationFrame&&requestAnimationFrame||setTimeout).bind(j))();function bi(t){return{name:\"window\",target:t.ownerDocument.defaultView}}function xi(t){return{name:\"document\",target:t.ownerDocument}}function wi(t){return{name:\"body\",target:t.ownerDocument.body}}function ki(t){return t instanceof Function?t():t}var Mi=function(t){return t[t.Important=1]=\"Important\",t[t.DashCase=2]=\"DashCase\",t}({});let Ti;function Si(t,e){return Ti(t,e)}function Ai(t){const e=t[3];return ht(e)?e[3]:e}function Li(t){return Ei(t[13])}function Ci(t){return Ei(t[4])}function Ei(t){for(;null!==t&&!ht(t);)t=t[4];return t}function Oi(t,e,n,r,i){if(null!=r){let a,o=!1;ht(r)?a=r:ut(r)&&(o=!0,r=r[0]);const s=Pt(r);0===t&&null!==n?null==i?Vi(e,n,s):Hi(e,n,s,i||null,!0):1===t&&null!==n?Hi(e,n,s,i||null,!0):2===t?$i(e,s,o):3===t&&e.destroyNode(s),null!=a&&function(t,e,n,r,i){const a=n[7];a!==Pt(n)&&Oi(e,t,r,a,i);for(let o=ct;o<n.length;o++){const i=n[o];ta(i[1],i,t,e,r,a)}}(e,t,a,n,i)}}function Di(t,e){return Dt(t)?t.createText(e):t.createTextNode(e)}function Ii(t,e,n){Dt(t)?t.setValue(e,n):e.textContent=n}function Pi(t,e){return t.createComment(function(t){return t.replace(yi,\"-\\u200b-\\u200b>\")}(e))}function Ri(t,e,n){return Dt(t)?t.createElement(e,n):null===n?t.createElement(e):t.createElementNS(n,e)}function zi(t,e){const n=t[9],r=n.indexOf(e),i=e[3];1024&e[2]&&(e[2]&=-1025,Wt(i,-1)),n.splice(r,1)}function ji(t,e){if(t.length<=ct)return;const n=ct+e,r=t[n];if(r){const a=r[17];null!==a&&a!==t&&zi(a,r),e>0&&(t[n-1][4]=r[4]);const o=Pn(t,ct+e);ta(r[1],i=r,i[11],2,null,null),i[0]=null,i[6]=null;const s=o[19];null!==s&&s.detachView(o[1]),r[3]=null,r[4]=null,r[2]&=-129}var i;return r}function Fi(t,e){if(!(256&e[2])){const n=e[11];Dt(n)&&n.destroyNode&&ta(t,e,n,3,null,null),function(t){let e=t[13];if(!e)return Ni(t[1],t);for(;e;){let n=null;if(ut(e))n=e[13];else{const t=e[10];t&&(n=t)}if(!n){for(;e&&!e[4]&&e!==t;)ut(e)&&Ni(e[1],e),e=e[3];null===e&&(e=t),ut(e)&&Ni(e[1],e),n=e&&e[4]}e=n}}(e)}}function Ni(t,e){if(!(256&e[2])){e[2]&=-129,e[2]|=256,function(t,e){let n;if(null!=t&&null!=(n=t.destroyHooks))for(let r=0;r<n.length;r+=2){const t=e[n[r]];if(!(t instanceof Ne)){const e=n[r+1];if(Array.isArray(e))for(let n=0;n<e.length;n+=2)e[n+1].call(t[e[n]]);else e.call(t)}}}(t,e),function(t,e){const n=t.cleanup,r=e[7];let i=-1;if(null!==n)for(let a=0;a<n.length-1;a+=2)if(\"string\"==typeof n[a]){const t=n[a+1],o=\"function\"==typeof t?t(e):Pt(e[t]),s=r[i=n[a+2]],l=n[a+3];\"boolean\"==typeof l?o.removeEventListener(n[a],s,l):l>=0?r[i=l]():r[i=-l].unsubscribe(),a+=2}else{const t=r[i=n[a+1]];n[a].call(t)}if(null!==r){for(let t=i+1;t<r.length;t++)(0,r[t])();e[7]=null}}(t,e),1===e[1].type&&Dt(e[11])&&e[11].destroy();const n=e[17];if(null!==n&&ht(e[3])){n!==e[3]&&zi(n,e);const r=e[19];null!==r&&r.detachView(t)}}}function Bi(t,e,n){return Yi(t,e.parent,n)}function Yi(t,e,n){let r=e;for(;null!==r&&40&r.type;)r=(e=r).parent;if(null===r)return n[0];if(2&r.flags){const e=t.data[r.directiveStart].encapsulation;if(e===D.None||e===D.Emulated)return null}return zt(r,n)}function Hi(t,e,n,r,i){Dt(t)?t.insertBefore(e,n,r,i):e.insertBefore(n,r,i)}function Vi(t,e,n){Dt(t)?t.appendChild(e,n):e.appendChild(n)}function Ui(t,e,n,r,i){null!==r?Hi(t,e,n,r,i):Vi(t,e,n)}function Wi(t,e){return Dt(t)?t.parentNode(e):e.parentNode}function qi(t,e,n){return Zi(t,e,n)}function Gi(t,e,n){return 40&t.type?zt(t,n):null}let Xi,Zi=Gi;function Ji(t,e){Zi=t,Xi=e}function Ki(t,e,n,r){const i=Bi(t,r,e),a=e[11],o=qi(r.parent||e[6],r,e);if(null!=i)if(Array.isArray(n))for(let s=0;s<n.length;s++)Ui(a,i,n[s],o,!1);else Ui(a,i,n,o,!1);void 0!==Xi&&Xi(a,r,e,n,i)}function $i(t,e,n){const r=Wi(t,e);r&&function(t,e,n,r){Dt(t)?t.removeChild(e,n,r):e.removeChild(n)}(t,r,e,n)}function Qi(t,e,n,r,i,a,o){for(;null!=n;){const s=r[n.index],l=n.type;if(o&&0===e&&(s&&vi(Pt(s),r),n.flags|=4),64!=(64&n.flags))if(8&l)Qi(t,e,n.child,r,i,a,!1),Oi(e,t,i,s,a);else if(32&l){const o=Si(n,r);let l;for(;l=o();)Oi(e,t,i,l,a);Oi(e,t,i,s,a)}else 16&l?ea(t,e,r,n,i,a):Oi(e,t,i,s,a);n=o?n.projectionNext:n.next}}function ta(t,e,n,r,i,a){Qi(n,r,t.firstChild,e,i,a,!1)}function ea(t,e,n,r,i,a){const o=n[16],s=o[6].projection[r.projection];if(Array.isArray(s))for(let l=0;l<s.length;l++)Oi(e,t,i,s[l],a);else Qi(t,e,s,o[3],i,a,!0)}function na(t,e,n){Dt(t)?t.setAttribute(e,\"style\",n):e.style.cssText=n}function ra(t,e,n){Dt(t)?\"\"===n?t.removeAttribute(e,\"class\"):t.setAttribute(e,\"class\",n):e.className=n}function ia(t,e,n){let r=t.length;for(;;){const i=t.indexOf(e,n);if(-1===i)return i;if(0===i||t.charCodeAt(i-1)<=32){const n=e.length;if(i+n===r||t.charCodeAt(i+n)<=32)return i}n=i+1}}const aa=\"ng-template\";function oa(t,e,n){let r=0;for(;r<t.length;){let i=t[r++];if(n&&\"class\"===i){if(i=t[r],-1!==ia(i.toLowerCase(),e,0))return!0}else if(1===i){for(;r<t.length&&\"string\"==typeof(i=t[r++]);)if(i.toLowerCase()===e)return!0;return!1}}return!1}function sa(t){return 4===t.type&&t.value!==aa}function la(t,e,n){return e===(4!==t.type||n?t.value:aa)}function ca(t,e,n){let r=4;const i=t.attrs||[],a=function(t){for(let e=0;e<t.length;e++)if(Ye(t[e]))return e;return t.length}(i);let o=!1;for(let s=0;s<e.length;s++){const l=e[s];if(\"number\"!=typeof l){if(!o)if(4&r){if(r=2|1&r,\"\"!==l&&!la(t,l,n)||\"\"===l&&1===e.length){if(ua(r))return!1;o=!0}}else{const c=8&r?l:e[++s];if(8&r&&null!==t.attrs){if(!oa(t.attrs,c,n)){if(ua(r))return!1;o=!0}continue}const u=ha(8&r?\"class\":l,i,sa(t),n);if(-1===u){if(ua(r))return!1;o=!0;continue}if(\"\"!==c){let t;t=u>a?\"\":i[u+1].toLowerCase();const e=8&r?t:null;if(e&&-1!==ia(e,c,0)||2&r&&c!==t){if(ua(r))return!1;o=!0}}}}else{if(!o&&!ua(r)&&!ua(l))return!1;if(o&&ua(l))continue;o=!1,r=l|1&r}}return ua(r)||o}function ua(t){return 0==(1&t)}function ha(t,e,n,r){if(null===e)return-1;let i=0;if(r||!n){let n=!1;for(;i<e.length;){const r=e[i];if(r===t)return i;if(3===r||6===r)n=!0;else{if(1===r||2===r){let t=e[++i];for(;\"string\"==typeof t;)t=e[++i];continue}if(4===r)break;if(0===r){i+=4;continue}}i+=n?1:2}return-1}return function(t,e){let n=t.indexOf(4);if(n>-1)for(n++;n<t.length;){const r=t[n];if(\"number\"==typeof r)return-1;if(r===e)return n;n++}return-1}(e,t)}function da(t,e,n=!1){for(let r=0;r<e.length;r++)if(ca(t,e[r],n))return!0;return!1}function fa(t,e){t:for(let n=0;n<e.length;n++){const r=e[n];if(t.length===r.length){for(let e=0;e<t.length;e++)if(t[e]!==r[e])continue t;return!0}}return!1}function pa(t,e){return t?\":not(\"+e.trim()+\")\":e}function ma(t){let e=t[0],n=1,r=2,i=\"\",a=!1;for(;n<t.length;){let o=t[n];if(\"string\"==typeof o)if(2&r){const e=t[++n];i+=\"[\"+o+(e.length>0?'=\"'+e+'\"':\"\")+\"]\"}else 8&r?i+=\".\"+o:4&r&&(i+=\" \"+o);else\"\"===i||ua(o)||(e+=pa(a,i),i=\"\"),r=o,a=a||!ua(r);n++}return\"\"!==i&&(e+=pa(a,i)),e}const ga={};function ya(t){va(Kt(),Jt(),Se()+t,ae())}function va(t,e,n,r){if(!r)if(3==(3&e[2])){const r=t.preOrderCheckHooks;null!==r&&Ie(e,r,n)}else{const r=t.preOrderHooks;null!==r&&Pe(e,r,0,n)}Ae(n)}function _a(t,e){return t<<17|e<<2}function ba(t){return t>>17&32767}function xa(t){return 2|t}function wa(t){return(131068&t)>>2}function ka(t,e){return-131069&t|e<<2}function Ma(t){return 1|t}function Ta(t,e){const n=t.contentQueries;if(null!==n)for(let r=0;r<n.length;r+=2){const i=n[r],a=n[r+1];if(-1!==a){const n=t.data[a];ye(i),n.contentQueries(2,e[a],a)}}}function Sa(t,e,n,r,i,a,o,s,l,c){const u=e.blueprint.slice();return u[0]=i,u[2]=140|r,Ut(u),u[3]=u[15]=t,u[8]=n,u[10]=o||t&&t[10],u[11]=s||t&&t[11],u[12]=l||t&&t[12]||null,u[9]=c||t&&t[9]||null,u[6]=a,u[16]=2==e.type?t[16]:u,u}function Aa(t,e,n,r,i){let a=t.data[e];if(null===a)a=La(t,e,n,r,i),qt.lFrame.inI18n&&(a.flags|=64);else if(64&a.type){a.type=n,a.value=r,a.attrs=i;const t=ee();a.injectorIndex=null===t?-1:t.injectorIndex}return ne(a,!0),a}function La(t,e,n,r,i){const a=te(),o=re(),s=t.data[e]=function(t,e,n,r,i,a){return{type:n,index:r,insertBeforeIndex:null,injectorIndex:e?e.injectorIndex:-1,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,propertyBindings:null,flags:0,providerIndexes:0,value:i,attrs:a,mergedAttrs:null,localNames:null,initialInputs:void 0,inputs:null,outputs:null,tViews:null,next:null,projectionNext:null,child:null,parent:e,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0}}(0,o?a:a&&a.parent,n,e,r,i);return null===t.firstChild&&(t.firstChild=s),null!==a&&(o?null==a.child&&null!==s.parent&&(a.child=s):null===a.next&&(a.next=s)),s}function Ca(t,e,n,r){if(0===n)return-1;const i=e.length;for(let a=0;a<n;a++)e.push(r),t.blueprint.push(r),t.data.push(null);return i}function Ea(t,e,n){be(e);try{const r=t.viewQuery;null!==r&&so(1,r,n);const i=t.template;null!==i&&Ia(t,e,i,1,n),t.firstCreatePass&&(t.firstCreatePass=!1),t.staticContentQueries&&Ta(t,e),t.staticViewQueries&&so(2,t.viewQuery,n);const a=t.components;null!==a&&function(t,e){for(let n=0;n<e.length;n++)no(t,e[n])}(e,a)}catch(r){throw t.firstCreatePass&&(t.incompleteFirstPass=!0),r}finally{e[2]&=-5,Te()}}function Oa(t,e,n,r){const i=e[2];if(256==(256&i))return;be(e);const a=ae();try{Ut(e),ce(t.bindingStartIndex),null!==n&&Ia(t,e,n,2,r);const o=3==(3&i);if(!a)if(o){const n=t.preOrderCheckHooks;null!==n&&Ie(e,n,null)}else{const n=t.preOrderHooks;null!==n&&Pe(e,n,0,null),Re(e,0)}if(function(t){for(let e=Li(t);null!==e;e=Ci(e)){if(!e[2])continue;const t=e[9];for(let e=0;e<t.length;e++){const n=t[e],r=n[3];0==(1024&n[2])&&Wt(r,1),n[2]|=1024}}}(e),function(t){for(let e=Li(t);null!==e;e=Ci(e))for(let t=ct;t<e.length;t++){const n=e[t],r=n[1];Ht(n)&&Oa(r,n,r.template,n[8])}}(e),null!==t.contentQueries&&Ta(t,e),!a)if(o){const n=t.contentCheckHooks;null!==n&&Ie(e,n)}else{const n=t.contentHooks;null!==n&&Pe(e,n,1),Re(e,1)}!function(t,e){const n=t.hostBindingOpCodes;if(null!==n)try{for(let t=0;t<n.length;t++){const r=n[t];if(r<0)Ae(~r);else{const i=r,a=n[++t],o=n[++t];fe(a,i),o(2,e[i])}}}finally{Ae(-1)}}(t,e);const s=t.components;null!==s&&function(t,e){for(let n=0;n<e.length;n++)eo(t,e[n])}(e,s);const l=t.viewQuery;if(null!==l&&so(2,l,r),!a)if(o){const n=t.viewCheckHooks;null!==n&&Ie(e,n)}else{const n=t.viewHooks;null!==n&&Pe(e,n,2),Re(e,2)}!0===t.firstUpdatePass&&(t.firstUpdatePass=!1),a||(e[2]&=-73),1024&e[2]&&(e[2]&=-1025,Wt(e[3],-1))}finally{Te()}}function Da(t,e,n,r){const i=e[10],a=!ae(),o=Yt(e);try{a&&!o&&i.begin&&i.begin(),o&&Ea(t,e,r),Oa(t,e,n,r)}finally{a&&!o&&i.end&&i.end()}}function Ia(t,e,n,r,i){const a=Se();try{Ae(-1),2&r&&e.length>lt&&va(t,e,lt,ae()),n(r,i)}finally{Ae(a)}}function Pa(t,e,n){if(dt(e)){const r=e.directiveEnd;for(let i=e.directiveStart;i<r;i++){const e=t.data[i];e.contentQueries&&e.contentQueries(1,n[i],i)}}}function Ra(t,e,n){Gt()&&(function(t,e,n,r){const i=n.directiveStart,a=n.directiveEnd;t.firstCreatePass||Ke(n,e),vi(r,e);const o=n.initialInputs;for(let s=i;s<a;s++){const r=t.data[s],a=mt(r);a&&Za(e,n,r);const l=un(e,t,s,n);vi(l,e),null!==o&&$a(0,s-i,l,r,0,o),a&&(Nt(n.index,e)[8]=l)}}(t,e,n,zt(n,e)),128==(128&n.flags)&&function(t,e,n){const r=n.directiveStart,i=n.directiveEnd,a=n.index,o=qt.lFrame.currentDirectiveIndex;try{Ae(a);for(let n=r;n<i;n++){const r=t.data[n],i=e[n];pe(n),null===r.hostBindings&&0===r.hostVars&&null===r.hostAttrs||Ua(r,i)}}finally{Ae(-1),pe(o)}}(t,e,n))}function za(t,e,n=zt){const r=e.localNames;if(null!==r){let i=e.index+1;for(let a=0;a<r.length;a+=2){const o=r[a+1],s=-1===o?n(e,t):t[o];t[i++]=s}}}function ja(t){const e=t.tView;return null===e||e.incompleteFirstPass?t.tView=Fa(1,null,t.template,t.decls,t.vars,t.directiveDefs,t.pipeDefs,t.viewQuery,t.schemas,t.consts):e}function Fa(t,e,n,r,i,a,o,s,l,c){const u=lt+r,h=u+i,d=function(t,e){const n=[];for(let r=0;r<e;r++)n.push(r<t?null:ga);return n}(u,h),f=\"function\"==typeof c?c():c;return d[1]={type:t,blueprint:d,template:n,queries:null,viewQuery:s,declTNode:e,data:d.slice().fill(null,u),bindingStartIndex:u,expandoStartIndex:h,hostBindingOpCodes:null,firstCreatePass:!0,firstUpdatePass:!0,staticViewQueries:!1,staticContentQueries:!1,preOrderHooks:null,preOrderCheckHooks:null,contentHooks:null,contentCheckHooks:null,viewHooks:null,viewCheckHooks:null,destroyHooks:null,cleanup:null,contentQueries:null,components:null,directiveRegistry:\"function\"==typeof a?a():a,pipeRegistry:\"function\"==typeof o?o():o,firstChild:null,schemas:l,consts:f,incompleteFirstPass:!1}}function Na(t,e,n,r){const i=co(e);null===n?i.push(r):(i.push(n),t.firstCreatePass&&uo(t).push(r,i.length-1))}function Ba(t,e,n){for(let r in t)if(t.hasOwnProperty(r)){const i=t[r];(n=null===n?{}:n).hasOwnProperty(r)?n[r].push(e,i):n[r]=[e,i]}return n}function Ya(t,e,n,r,i,a,o,s){const l=zt(e,n);let c,u=e.inputs;!s&&null!=u&&(c=u[r])?(po(t,n,c,r,i),ft(e)&&function(t,e){const n=Nt(e,t);16&n[2]||(n[2]|=64)}(n,e.index)):3&e.type&&(r=function(t){return\"class\"===t?\"className\":\"for\"===t?\"htmlFor\":\"formaction\"===t?\"formAction\":\"innerHtml\"===t?\"innerHTML\":\"readonly\"===t?\"readOnly\":\"tabindex\"===t?\"tabIndex\":t}(r),i=null!=o?o(i,e.value||\"\",r):i,Dt(a)?a.setProperty(l,r,i):He(r)||(l.setProperty?l.setProperty(r,i):l[r]=i))}function Ha(t,e,n,r){let i=!1;if(Gt()){const a=function(t,e,n){const r=t.directiveRegistry;let i=null;if(r)for(let a=0;a<r.length;a++){const o=r[a];da(n,o.selectors,!1)&&(i||(i=[]),en(Ke(n,e),t,o.type),mt(o)?(Wa(t,n),i.unshift(o)):i.push(o))}return i}(t,e,n),o=null===r?null:{\"\":-1};if(null!==a){i=!0,Ga(n,t.data.length,a.length);for(let t=0;t<a.length;t++){const e=a[t];e.providersResolver&&e.providersResolver(e)}let r=!1,s=!1,l=Ca(t,e,a.length,null);for(let i=0;i<a.length;i++){const c=a[i];n.mergedAttrs=Ve(n.mergedAttrs,c.hostAttrs),Xa(t,n,e,l,c),qa(l,c,o),null!==c.contentQueries&&(n.flags|=8),null===c.hostBindings&&null===c.hostAttrs&&0===c.hostVars||(n.flags|=128);const u=c.type.prototype;!r&&(u.ngOnChanges||u.ngOnInit||u.ngDoCheck)&&((t.preOrderHooks||(t.preOrderHooks=[])).push(n.index),r=!0),s||!u.ngOnChanges&&!u.ngDoCheck||((t.preOrderCheckHooks||(t.preOrderCheckHooks=[])).push(n.index),s=!0),l++}!function(t,e){const n=e.directiveEnd,r=t.data,i=e.attrs,a=[];let o=null,s=null;for(let l=e.directiveStart;l<n;l++){const t=r[l],n=t.inputs,c=null===i||sa(e)?null:Qa(n,i);a.push(c),o=Ba(n,l,o),s=Ba(t.outputs,l,s)}null!==o&&(o.hasOwnProperty(\"class\")&&(e.flags|=16),o.hasOwnProperty(\"style\")&&(e.flags|=32)),e.initialInputs=a,e.inputs=o,e.outputs=s}(t,n)}o&&function(t,e,n){if(e){const r=t.localNames=[];for(let t=0;t<e.length;t+=2){const i=n[e[t+1]];if(null==i)throw new yt(\"301\",`Export of name '${e[t+1]}' not found!`);r.push(e[t],i)}}}(n,r,o)}return n.mergedAttrs=Ve(n.mergedAttrs,n.attrs),i}function Va(t,e,n,r,i,a){const o=a.hostBindings;if(o){let n=t.hostBindingOpCodes;null===n&&(n=t.hostBindingOpCodes=[]);const a=~e.index;(function(t){let e=t.length;for(;e>0;){const n=t[--e];if(\"number\"==typeof n&&n<0)return n}return 0})(n)!=a&&n.push(a),n.push(r,i,o)}}function Ua(t,e){null!==t.hostBindings&&t.hostBindings(1,e)}function Wa(t,e){e.flags|=2,(t.components||(t.components=[])).push(e.index)}function qa(t,e,n){if(n){if(e.exportAs)for(let r=0;r<e.exportAs.length;r++)n[e.exportAs[r]]=t;mt(e)&&(n[\"\"]=t)}}function Ga(t,e,n){t.flags|=1,t.directiveStart=e,t.directiveEnd=e+n,t.providerIndexes=e}function Xa(t,e,n,r,i){t.data[r]=i;const a=i.factory||(i.factory=gt(i.type)),o=new Ne(a,mt(i),null);t.blueprint[r]=o,n[r]=o,Va(t,e,0,r,Ca(t,n,i.hostVars,ga),i)}function Za(t,e,n){const r=zt(e,t),i=ja(n),a=t[10],o=ro(t,Sa(t,i,null,n.onPush?64:16,r,e,a,a.createRenderer(r,n),null,null));t[e.index]=o}function Ja(t,e,n,r,i,a){const o=zt(t,e);Ka(e[11],o,a,t.value,n,r,i)}function Ka(t,e,n,r,i,a,o){if(null==a)Dt(t)?t.removeAttribute(e,i,n):e.removeAttribute(i);else{const s=null==o?vt(a):o(a,r||\"\",i);Dt(t)?t.setAttribute(e,i,s,n):n?e.setAttributeNS(n,i,s):e.setAttribute(i,s)}}function $a(t,e,n,r,i,a){const o=a[e];if(null!==o){const t=r.setInput;for(let e=0;e<o.length;){const i=o[e++],a=o[e++],s=o[e++];null!==t?r.setInput(n,s,i,a):n[a]=s}}}function Qa(t,e){let n=null,r=0;for(;r<e.length;){const i=e[r];if(0!==i)if(5!==i){if(\"number\"==typeof i)break;t.hasOwnProperty(i)&&(null===n&&(n=[]),n.push(i,t[i],e[r+1])),r+=2}else r+=2;else r+=4}return n}function to(t,e,n,r){return new Array(t,!0,!1,e,null,0,r,n,null,null)}function eo(t,e){const n=Nt(e,t);if(Ht(n)){const t=n[1];80&n[2]?Oa(t,n,t.template,n[8]):n[5]>0&&function t(e){for(let r=Li(e);null!==r;r=Ci(r))for(let e=ct;e<r.length;e++){const n=r[e];if(1024&n[2]){const t=n[1];Oa(t,n,t.template,n[8])}else n[5]>0&&t(n)}const n=e[1].components;if(null!==n)for(let r=0;r<n.length;r++){const i=Nt(n[r],e);Ht(i)&&i[5]>0&&t(i)}}(n)}}function no(t,e){const n=Nt(e,t),r=n[1];!function(t,e){for(let n=e.length;n<t.blueprint.length;n++)e.push(t.blueprint[n])}(r,n),Ea(r,n,n[8])}function ro(t,e){return t[13]?t[14][4]=e:t[13]=e,t[14]=e,e}function io(t){for(;t;){t[2]|=64;const e=Ai(t);if(0!=(512&t[2])&&!e)return t;t=e}return null}function ao(t,e,n){const r=e[10];r.begin&&r.begin();try{Oa(t,e,t.template,n)}catch(i){throw fo(e,i),i}finally{r.end&&r.end()}}function oo(t){!function(t){for(let e=0;e<t.components.length;e++){const n=t.components[e],r=Bt(n),i=r[1];Da(i,r,i.template,n)}}(t[8])}function so(t,e,n){ye(0),e(t,n)}const lo=(()=>Promise.resolve(null))();function co(t){return t[7]||(t[7]=[])}function uo(t){return t.cleanup||(t.cleanup=[])}function ho(t,e,n){return(null===t||mt(t))&&(n=function(t){for(;Array.isArray(t);){if(\"object\"==typeof t[1])return t;t=t[0]}return null}(n[e.index])),n[11]}function fo(t,e){const n=t[9],r=n?n.get(gi,null):null;r&&r.handleError(e)}function po(t,e,n,r,i){for(let a=0;a<n.length;){const o=n[a++],s=n[a++],l=e[o],c=t.data[o];null!==c.setInput?c.setInput(l,i,r,s):l[s]=i}}function mo(t,e,n){const r=Rt(e,t);Ii(t[11],r,n)}function go(t,e,n){let r=n?t.styles:null,i=n?t.classes:null,a=0;if(null!==e)for(let o=0;o<e.length;o++){const t=e[o];\"number\"==typeof t?a=t:1==a?i=h(i,t):2==a&&(r=h(r,t+\": \"+e[++o]+\";\"))}n?t.styles=r:t.stylesWithoutHost=r,n?t.classes=i:t.classesWithoutHost=i}const yo=new Tn(\"INJECTOR\",-1);class vo{get(t,e=rr){if(e===rr){const e=new Error(`NullInjectorError: No provider for ${u(t)}!`);throw e.name=\"NullInjectorError\",e}return e}}const _o=new Tn(\"Set Injector scope.\"),bo={},xo={},wo=[];let ko=void 0;function Mo(){return void 0===ko&&(ko=new vo),ko}function To(t,e=null,n=null,r){return new So(t,n,e||Mo(),r)}class So{constructor(t,e,n,r=null){this.parent=n,this.records=new Map,this.injectorDefTypes=new Set,this.onDestroy=new Set,this._destroyed=!1;const i=[];e&&Dn(e,n=>this.processProvider(n,t,e)),Dn([t],t=>this.processInjectorType(t,[],i)),this.records.set(yo,Co(void 0,this));const a=this.records.get(_o);this.scope=null!=a?a.value:null,this.source=r||(\"object\"==typeof t?null:u(t))}get destroyed(){return this._destroyed}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{this.onDestroy.forEach(t=>t.ngOnDestroy())}finally{this.records.clear(),this.onDestroy.clear(),this.injectorDefTypes.clear()}}get(t,e=rr,n=S.Default){this.assertNotDestroyed();const r=lr(this);try{if(!(n&S.SkipSelf)){let e=this.records.get(t);if(void 0===e){const n=(\"function\"==typeof(i=t)||\"object\"==typeof i&&i instanceof Tn)&&_(t);e=n&&this.injectableDefInScope(n)?Co(Ao(t),bo):null,this.records.set(t,e)}if(null!=e)return this.hydrate(t,e)}return(n&S.Self?Mo():this.parent).get(t,e=n&S.Optional&&e===rr?null:e)}catch(a){if(\"NullInjectorError\"===a.name){if((a.ngTempTokenPath=a.ngTempTokenPath||[]).unshift(u(t)),r)throw a;return function(t,e,n,r){const i=t.ngTempTokenPath;throw e[ar]&&i.unshift(e[ar]),t.message=function(t,e,n,r=null){t=t&&\"\\n\"===t.charAt(0)&&\"\\u0275\"==t.charAt(1)?t.substr(2):t;let i=u(e);if(Array.isArray(e))i=e.map(u).join(\" -> \");else if(\"object\"==typeof e){let t=[];for(let n in e)if(e.hasOwnProperty(n)){let r=e[n];t.push(n+\":\"+(\"string\"==typeof r?JSON.stringify(r):u(r)))}i=`{${t.join(\", \")}}`}return`${n}${r?\"(\"+r+\")\":\"\"}[${i}]: ${t.replace(ir,\"\\n  \")}`}(\"\\n\"+t.message,i,n,r),t.ngTokenPath=i,t.ngTempTokenPath=null,t}(a,t,\"R3InjectorError\",this.source)}throw a}finally{lr(r)}var i}_resolveInjectorDefTypes(){this.injectorDefTypes.forEach(t=>this.get(t))}toString(){const t=[];return this.records.forEach((e,n)=>t.push(u(n))),`R3Injector[${t.join(\", \")}]`}assertNotDestroyed(){if(this._destroyed)throw new Error(\"Injector has already been destroyed.\")}processInjectorType(t,e,n){if(!(t=p(t)))return!1;let r=x(t);const i=null==r&&t.ngModule||void 0,a=void 0===i?t:i,o=-1!==n.indexOf(a);if(void 0!==i&&(r=x(i)),null==r)return!1;if(null!=r.imports&&!o){let t;n.push(a);try{Dn(r.imports,r=>{this.processInjectorType(r,e,n)&&(void 0===t&&(t=[]),t.push(r))})}finally{}if(void 0!==t)for(let e=0;e<t.length;e++){const{ngModule:n,providers:r}=t[e];Dn(r,t=>this.processProvider(t,n,r||wo))}}this.injectorDefTypes.add(a),this.records.set(a,Co(r.factory,bo));const s=r.providers;if(null!=s&&!o){const e=t;Dn(s,t=>this.processProvider(t,e,s))}return void 0!==i&&void 0!==t.providers}processProvider(t,e,n){let r=Oo(t=p(t))?t:p(t&&t.provide);const i=function(t,e,n){return Eo(t)?Co(void 0,t.useValue):Co(Lo(t),bo)}(t);if(Oo(t)||!0!==t.multi)this.records.get(r);else{let e=this.records.get(r);e||(e=Co(void 0,bo,!0),e.factory=()=>fr(e.multi),this.records.set(r,e)),r=t,e.multi.push(t)}this.records.set(r,i)}hydrate(t,e){var n;return e.value===bo&&(e.value=xo,e.value=e.factory()),\"object\"==typeof e.value&&e.value&&null!==(n=e.value)&&\"object\"==typeof n&&\"function\"==typeof n.ngOnDestroy&&this.onDestroy.add(e.value),e.value}injectableDefInScope(t){return!!t.providedIn&&(\"string\"==typeof t.providedIn?\"any\"===t.providedIn||t.providedIn===this.scope:this.injectorDefTypes.has(t.providedIn))}}function Ao(t){const e=_(t),n=null!==e?e.factory:gt(t);if(null!==n)return n;const r=x(t);if(null!==r)return r.factory;if(t instanceof Tn)throw new Error(`Token ${u(t)} is missing a \\u0275prov definition.`);if(t instanceof Function)return function(t){const e=t.length;if(e>0){const n=Rn(e,\"?\");throw new Error(`Can't resolve all parameters for ${u(t)}: (${n.join(\", \")}).`)}const n=function(t){const e=t&&(t[w]||t[M]);if(e){const n=function(t){if(t.hasOwnProperty(\"name\"))return t.name;const e=(\"\"+t).match(/^function\\s*([^\\s(]+)/);return null===e?\"\":e[1]}(t);return console.warn(`DEPRECATED: DI is instantiating a token \"${n}\" that inherits its @Injectable decorator but does not provide one itself.\\nThis will become an error in a future version of Angular. Please add @Injectable() to the \"${n}\" class.`),e}return null}(t);return null!==n?()=>n.factory(t):()=>new t}(t);throw new Error(\"unreachable\")}function Lo(t,e,n){let r=void 0;if(Oo(t)){const e=p(t);return gt(e)||Ao(e)}if(Eo(t))r=()=>p(t.useValue);else if((i=t)&&i.useFactory)r=()=>t.useFactory(...fr(t.deps||[]));else if(function(t){return!(!t||!t.useExisting)}(t))r=()=>ur(p(t.useExisting));else{const e=p(t&&(t.useClass||t.provide));if(!function(t){return!!t.deps}(t))return gt(e)||Ao(e);r=()=>new e(...fr(t.deps))}var i;return r}function Co(t,e,n=!1){return{factory:t,value:e,multi:n?[]:void 0}}function Eo(t){return null!==t&&\"object\"==typeof t&&or in t}function Oo(t){return\"function\"==typeof t}const Do=function(t,e,n){return function(t,e=null,n=null,r){const i=To(t,e,n,r);return i._resolveInjectorDefTypes(),i}({name:n},e,t,n)};let Io=(()=>{class t{static create(t,e){return Array.isArray(t)?Do(t,e,\"\"):Do(t.providers,t.parent,t.name||\"\")}}return t.THROW_IF_NOT_FOUND=rr,t.NULL=new vo,t.\\u0275prov=y({token:t,providedIn:\"any\",factory:()=>ur(yo)}),t.__NG_ELEMENT_ID__=-1,t})();function Po(t,e){De(Bt(t)[1],Qt())}function Ro(t){return Object.getPrototypeOf(t.prototype).constructor}function zo(t){let e=Ro(t.type),n=!0;const r=[t];for(;e;){let i=void 0;if(mt(t))i=e.\\u0275cmp||e.\\u0275dir;else{if(e.\\u0275cmp)throw new Error(\"Directives cannot inherit Components\");i=e.\\u0275dir}if(i){if(n){r.push(i);const e=t;e.inputs=jo(t.inputs),e.declaredInputs=jo(t.declaredInputs),e.outputs=jo(t.outputs);const n=i.hostBindings;n&&Bo(t,n);const a=i.viewQuery,o=i.contentQueries;if(a&&Fo(t,a),o&&No(t,o),c(t.inputs,i.inputs),c(t.declaredInputs,i.declaredInputs),c(t.outputs,i.outputs),mt(i)&&i.data.animation){const e=t.data;e.animation=(e.animation||[]).concat(i.data.animation)}}const e=i.features;if(e)for(let r=0;r<e.length;r++){const i=e[r];i&&i.ngInherit&&i(t),i===zo&&(n=!1)}}e=Object.getPrototypeOf(e)}!function(t){let e=0,n=null;for(let r=t.length-1;r>=0;r--){const i=t[r];i.hostVars=e+=i.hostVars,i.hostAttrs=Ve(i.hostAttrs,n=Ve(n,i.hostAttrs))}}(r)}function jo(t){return t===F?{}:t===N?[]:t}function Fo(t,e){const n=t.viewQuery;t.viewQuery=n?(t,r)=>{e(t,r),n(t,r)}:e}function No(t,e){const n=t.contentQueries;t.contentQueries=n?(t,r,i)=>{e(t,r,i),n(t,r,i)}:e}function Bo(t,e){const n=t.hostBindings;t.hostBindings=n?(t,r)=>{e(t,r),n(t,r)}:e}const Yo=[\"providersResolver\"],Ho=[\"template\",\"decls\",\"consts\",\"vars\",\"onPush\",\"ngContentSelectors\",\"styles\",\"encapsulation\",\"schemas\"];function Vo(t){let e=Ro(t.type),n=void 0;n=mt(t)?e.\\u0275cmp:e.\\u0275dir;const r=t;for(const i of Yo)r[i]=n[i];if(mt(n))for(const i of Ho)r[i]=n[i]}let Uo=null;function Wo(){if(!Uo){const t=j.Symbol;if(t&&t.iterator)Uo=t.iterator;else{const t=Object.getOwnPropertyNames(Map.prototype);for(let e=0;e<t.length;++e){const n=t[e];\"entries\"!==n&&\"size\"!==n&&Map.prototype[n]===Map.prototype.entries&&(Uo=n)}}}return Uo}class qo{constructor(t){this.wrapped=t}static wrap(t){return new qo(t)}static unwrap(t){return qo.isWrapped(t)?t.wrapped:t}static isWrapped(t){return t instanceof qo}}function Go(t){return!!Xo(t)&&(Array.isArray(t)||!(t instanceof Map)&&Wo()in t)}function Xo(t){return null!==t&&(\"function\"==typeof t||\"object\"==typeof t)}function Zo(t,e,n){return t[e]=n}function Jo(t,e){return t[e]}function Ko(t,e,n){return!Object.is(t[e],n)&&(t[e]=n,!0)}function $o(t,e,n,r){const i=Ko(t,e,n);return Ko(t,e+1,r)||i}function Qo(t,e,n,r,i){const a=$o(t,e,n,r);return Ko(t,e+2,i)||a}function ts(t,e,n,r,i,a){const o=$o(t,e,n,r);return $o(t,e+2,i,a)||o}function es(t,e,n,r){const i=Jt();return Ko(i,ue(),e)&&(Kt(),Ja(Le(),i,t,e,n,r)),es}function ns(t,e){let n=!1,r=le();for(let a=1;a<e.length;a+=2)n=Ko(t,r++,e[a])||n;if(ce(r),!n)return ga;let i=e[0];for(let a=1;a<e.length;a+=2)i+=vt(e[a])+e[a+1];return i}function rs(t,e,n,r){return Ko(t,ue(),n)?e+vt(n)+r:ga}function is(t,e,n,r,i,a){const o=$o(t,le(),n,i);return he(2),o?e+vt(n)+r+vt(i)+a:ga}function as(t,e,n,r,i,a,o,s){const l=Qo(t,le(),n,i,o);return he(3),l?e+vt(n)+r+vt(i)+a+vt(o)+s:ga}function os(t,e,n,r,i,a,o,s,l,c){const u=ts(t,le(),n,i,o,l);return he(4),u?e+vt(n)+r+vt(i)+a+vt(o)+s+vt(l)+c:ga}function ss(t,e,n,r,i,a,o,s,l,c,u,h){const d=le();let f=ts(t,d,n,i,o,l);return f=Ko(t,d+4,u)||f,he(5),f?e+vt(n)+r+vt(i)+a+vt(o)+s+vt(l)+c+vt(u)+h:ga}function ls(t,e,n,r,i,a,o,s,l,c,u,h,d,f){const p=le();let m=ts(t,p,n,i,o,l);return m=$o(t,p+4,u,d)||m,he(6),m?e+vt(n)+r+vt(i)+a+vt(o)+s+vt(l)+c+vt(u)+h+vt(d)+f:ga}function cs(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m){const g=le();let y=ts(t,g,n,i,o,l);return y=Qo(t,g+4,u,d,p)||y,he(7),y?e+vt(n)+r+vt(i)+a+vt(o)+s+vt(l)+c+vt(u)+h+vt(d)+f+vt(p)+m:ga}function us(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g,y){const v=le();let _=ts(t,v,n,i,o,l);return _=ts(t,v+4,u,d,p,g)||_,he(8),_?e+vt(n)+r+vt(i)+a+vt(o)+s+vt(l)+c+vt(u)+h+vt(d)+f+vt(p)+m+vt(g)+y:ga}function hs(t,e,n,r,i,a){const o=Jt(),s=rs(o,e,n,r);return s!==ga&&Ja(Le(),o,t,s,i,a),hs}function ds(t,e,n,r,i,a,o,s){const l=Jt(),c=is(l,e,n,r,i,a);return c!==ga&&Ja(Le(),l,t,c,o,s),ds}function fs(t,e,n,r,i,a,o,s,l,c){const u=Jt(),h=as(u,e,n,r,i,a,o,s);return h!==ga&&Ja(Le(),u,t,h,l,c),fs}function ps(t,e,n,r,i,a,o,s,l,c,u,h){const d=Jt(),f=os(d,e,n,r,i,a,o,s,l,c);return f!==ga&&Ja(Le(),d,t,f,u,h),ps}function ms(t,e,n,r,i,a,o,s,l,c,u,h,d,f){const p=Jt(),m=ss(p,e,n,r,i,a,o,s,l,c,u,h);return m!==ga&&Ja(Le(),p,t,m,d,f),ms}function gs(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m){const g=Jt(),y=ls(g,e,n,r,i,a,o,s,l,c,u,h,d,f);return y!==ga&&Ja(Le(),g,t,y,p,m),gs}function ys(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g,y){const v=Jt(),_=cs(v,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m);return _!==ga&&Ja(Le(),v,t,_,g,y),ys}function vs(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g,y,v,_){const b=Jt(),x=us(b,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g,y);return x!==ga&&Ja(Le(),b,t,x,v,_),vs}function _s(t,e,n,r){const i=Jt(),a=ns(i,e);return a!==ga&&Ja(Le(),i,t,a,n,r),_s}function bs(t,e,n,r,i,a,o,s){const l=Jt(),c=Kt(),u=t+lt,h=c.firstCreatePass?function(t,e,n,r,i,a,o,s,l){const c=e.consts,u=Aa(e,t,4,o||null,Vt(c,s));Ha(e,n,u,Vt(c,l)),De(e,u);const h=u.tViews=Fa(2,u,r,i,a,e.directiveRegistry,e.pipeRegistry,null,e.schemas,c);return null!==e.queries&&(e.queries.template(e,u),h.queries=e.queries.embeddedTView(u)),u}(u,c,l,e,n,r,i,a,o):c.data[u];ne(h,!1);const d=l[11].createComment(\"\");Ki(c,l,d,h),vi(d,l),ro(l,l[u]=to(d,l,d,h)),pt(h)&&Ra(c,l,h),null!=o&&za(l,h,s)}function xs(t){return Ft(qt.lFrame.contextLView,lt+t)}function ws(t,e=S.Default){const n=Jt();return null===n?ur(t,e):an(Qt(),n,p(t),e)}function ks(){throw new Error(\"invalid\")}function Ms(t,e,n){const r=Jt();return Ko(r,ue(),e)&&Ya(Kt(),Le(),r,t,e,r[11],n,!1),Ms}function Ts(t,e,n,r,i){const a=i?\"class\":\"style\";po(t,n,e.inputs[a],a,r)}function Ss(t,e,n,r){const i=Jt(),a=Kt(),o=lt+t,s=i[11],l=i[o]=Ri(s,e,qt.lFrame.currentNamespace),c=a.firstCreatePass?function(t,e,n,r,i,a,o){const s=e.consts,l=Aa(e,t,2,i,Vt(s,a));return Ha(e,n,l,Vt(s,o)),null!==l.attrs&&go(l,l.attrs,!1),null!==l.mergedAttrs&&go(l,l.mergedAttrs,!0),null!==e.queries&&e.queries.elementStart(e,l),l}(o,a,i,0,e,n,r):a.data[o];ne(c,!0);const u=c.mergedAttrs;null!==u&&Be(s,l,u);const h=c.classes;null!==h&&ra(s,l,h);const d=c.styles;null!==d&&na(s,l,d),64!=(64&c.flags)&&Ki(a,i,l,c),0===qt.lFrame.elementDepthCount&&vi(l,i),qt.lFrame.elementDepthCount++,pt(c)&&(Ra(a,i,c),Pa(a,c,i)),null!==r&&za(i,c)}function As(){let t=Qt();re()?ie():(t=t.parent,ne(t,!1));const e=t;qt.lFrame.elementDepthCount--;const n=Kt();n.firstCreatePass&&(De(n,t),dt(t)&&n.queries.elementEnd(t)),null!=e.classesWithoutHost&&function(t){return 0!=(16&t.flags)}(e)&&Ts(n,e,Jt(),e.classesWithoutHost,!0),null!=e.stylesWithoutHost&&function(t){return 0!=(32&t.flags)}(e)&&Ts(n,e,Jt(),e.stylesWithoutHost,!1)}function Ls(t,e,n,r){Ss(t,e,n,r),As()}function Cs(t,e,n){const r=Jt(),i=Kt(),a=t+lt,o=i.firstCreatePass?function(t,e,n,r,i){const a=e.consts,o=Vt(a,r),s=Aa(e,t,8,\"ng-container\",o);return null!==o&&go(s,o,!0),Ha(e,n,s,Vt(a,i)),null!==e.queries&&e.queries.elementStart(e,s),s}(a,i,r,e,n):i.data[a];ne(o,!0);const s=r[a]=r[11].createComment(\"\");Ki(i,r,s,o),vi(s,r),pt(o)&&(Ra(i,r,o),Pa(i,o,r)),null!=n&&za(r,o)}function Es(){let t=Qt();const e=Kt();re()?ie():(t=t.parent,ne(t,!1)),e.firstCreatePass&&(De(e,t),dt(t)&&e.queries.elementEnd(t))}function Os(t,e,n){Cs(t,e,n),Es()}function Ds(){return Jt()}function Is(t){return!!t&&\"function\"==typeof t.then}function Ps(t){return!!t&&\"function\"==typeof t.subscribe}function Rs(t,e,n=!1,r){const i=Jt(),a=Kt(),o=Qt();return js(a,i,i[11],o,t,e,n,r),Rs}function zs(t,e,n=!1,r){const i=Qt(),a=Jt(),o=Kt();return js(o,a,ho(me(o.data),i,a),i,t,e,n,r),zs}function js(t,e,n,r,i,a,o=!1,s){const l=pt(r),c=t.firstCreatePass&&uo(t),u=co(e);let h=!0;if(3&r.type){const d=zt(r,e),f=s?s(d):F,p=f.target||d,m=u.length,g=s?t=>s(Pt(t[r.index])).target:r.index;if(Dt(n)){let o=null;if(!s&&l&&(o=function(t,e,n,r){const i=t.cleanup;if(null!=i)for(let a=0;a<i.length-1;a+=2){const t=i[a];if(t===n&&i[a+1]===r){const t=e[7],n=i[a+2];return t.length>n?t[n]:null}\"string\"==typeof t&&(a+=2)}return null}(t,e,i,r.index)),null!==o)(o.__ngLastListenerFn__||o).__ngNextListenerFn__=a,o.__ngLastListenerFn__=a,h=!1;else{a=Ns(r,e,a,!1);const t=n.listen(f.name||p,i,a);u.push(a,t),c&&c.push(i,g,m,m+1)}}else a=Ns(r,e,a,!0),p.addEventListener(i,a,o),u.push(a),c&&c.push(i,g,m,o)}else a=Ns(r,e,a,!1);const d=r.outputs;let f;if(h&&null!==d&&(f=d[i])){const t=f.length;if(t)for(let n=0;n<t;n+=2){const t=e[f[n]][f[n+1]].subscribe(a),o=u.length;u.push(a,t),c&&c.push(i,r.index,o,-(o+1))}}}function Fs(t,e,n){try{return!1!==e(n)}catch(r){return fo(t,r),!1}}function Ns(t,e,n,r){return function i(a){if(a===Function)return n;const o=2&t.flags?Nt(t.index,e):e;0==(32&e[2])&&io(o);let s=Fs(e,n,a),l=i.__ngNextListenerFn__;for(;l;)s=Fs(e,l,a)&&s,l=l.__ngNextListenerFn__;return r&&!1===s&&(a.preventDefault(),a.returnValue=!1),s}}function Bs(t=1){return function(t){return(qt.lFrame.contextLView=function(t,e){for(;t>0;)e=e[15],t--;return e}(t,qt.lFrame.contextLView))[8]}(t)}function Ys(t,e){let n=null;const r=function(t){const e=t.attrs;if(null!=e){const t=e.indexOf(5);if(0==(1&t))return e[t+1]}return null}(t);for(let i=0;i<e.length;i++){const a=e[i];if(\"*\"!==a){if(null===r?da(t,a,!0):fa(r,a))return i}else n=i}return n}function Hs(t){const e=Jt()[16][6];if(!e.projection){const n=e.projection=Rn(t?t.length:1,null),r=n.slice();let i=e.child;for(;null!==i;){const e=t?Ys(i,t):0;null!==e&&(r[e]?r[e].projectionNext=i:n[e]=i,r[e]=i),i=i.next}}}function Vs(t,e=0,n){const r=Jt(),i=Kt(),a=Aa(i,lt+t,16,null,n||null);null===a.projection&&(a.projection=e),ie(),64!=(64&a.flags)&&function(t,e,n){ea(e[11],0,e,n,Bi(t,n,e),qi(n.parent||e[6],n,e))}(i,r,a)}function Us(t,e,n){return Ws(t,\"\",e,\"\",n),Us}function Ws(t,e,n,r,i){const a=Jt(),o=rs(a,e,n,r);return o!==ga&&Ya(Kt(),Le(),a,t,o,a[11],i,!1),Ws}function qs(t,e,n,r,i,a,o){const s=Jt(),l=is(s,e,n,r,i,a);return l!==ga&&Ya(Kt(),Le(),s,t,l,s[11],o,!1),qs}function Gs(t,e,n,r,i,a,o,s,l){const c=Jt(),u=as(c,e,n,r,i,a,o,s);return u!==ga&&Ya(Kt(),Le(),c,t,u,c[11],l,!1),Gs}function Xs(t,e,n,r,i,a,o,s,l,c,u){const h=Jt(),d=os(h,e,n,r,i,a,o,s,l,c);return d!==ga&&Ya(Kt(),Le(),h,t,d,h[11],u,!1),Xs}function Zs(t,e,n,r,i,a,o,s,l,c,u,h,d){const f=Jt(),p=ss(f,e,n,r,i,a,o,s,l,c,u,h);return p!==ga&&Ya(Kt(),Le(),f,t,p,f[11],d,!1),Zs}function Js(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p){const m=Jt(),g=ls(m,e,n,r,i,a,o,s,l,c,u,h,d,f);return g!==ga&&Ya(Kt(),Le(),m,t,g,m[11],p,!1),Js}function Ks(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g){const y=Jt(),v=cs(y,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m);return v!==ga&&Ya(Kt(),Le(),y,t,v,y[11],g,!1),Ks}function $s(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g,y,v){const _=Jt(),b=us(_,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g,y);return b!==ga&&Ya(Kt(),Le(),_,t,b,_[11],v,!1),$s}function Qs(t,e,n){const r=Jt(),i=ns(r,e);return i!==ga&&Ya(Kt(),Le(),r,t,i,r[11],n,!1),Qs}const tl=[];function el(t,e,n,r,i){const a=t[n+1],o=null===e;let s=r?ba(a):wa(a),l=!1;for(;0!==s&&(!1===l||o);){const n=t[s+1];nl(t[s],e)&&(l=!0,t[s+1]=r?Ma(n):xa(n)),s=r?ba(n):wa(n)}l&&(t[n+1]=r?xa(a):Ma(a))}function nl(t,e){return null===t||null==e||(Array.isArray(t)?t[1]:t)===e||!(!Array.isArray(t)||\"string\"!=typeof e)&&Fn(t,e)>=0}const rl={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function il(t){return t.substring(rl.key,rl.keyEnd)}function al(t){return t.substring(rl.value,rl.valueEnd)}function ol(t,e){const n=rl.textEnd;return n===e?-1:(e=rl.keyEnd=function(t,e,n){for(;e<n&&t.charCodeAt(e)>32;)e++;return e}(t,rl.key=e,n),cl(t,e,n))}function sl(t,e){const n=rl.textEnd;let r=rl.key=cl(t,e,n);return n===r?-1:(r=rl.keyEnd=function(t,e,n){let r;for(;e<n&&(45===(r=t.charCodeAt(e))||95===r||(-33&r)>=65&&(-33&r)<=90||r>=48&&r<=57);)e++;return e}(t,r,n),r=ul(t,r,n),r=rl.value=cl(t,r,n),r=rl.valueEnd=function(t,e,n){let r=-1,i=-1,a=-1,o=e,s=o;for(;o<n;){const l=t.charCodeAt(o++);if(59===l)return s;34===l||39===l?s=o=hl(t,l,o,n):e===o-4&&85===a&&82===i&&76===r&&40===l?s=o=hl(t,41,o,n):l>32&&(s=o),a=i,i=r,r=-33&l}return s}(t,r,n),ul(t,r,n))}function ll(t){rl.key=0,rl.keyEnd=0,rl.value=0,rl.valueEnd=0,rl.textEnd=t.length}function cl(t,e,n){for(;e<n&&t.charCodeAt(e)<=32;)e++;return e}function ul(t,e,n,r){return(e=cl(t,e,n))<n&&e++,e}function hl(t,e,n,r){let i=-1,a=n;for(;a<r;){const n=t.charCodeAt(a++);if(n==e&&92!==i)return a;i=92==n&&92===i?0:n}throw new Error}function dl(t,e,n){return vl(t,e,n,!1),dl}function fl(t,e){return vl(t,e,null,!0),fl}function pl(t){_l(Ml,ml,t,!1)}function ml(t,e){for(let n=function(t){return ll(t),sl(t,cl(t,0,rl.textEnd))}(e);n>=0;n=sl(e,n))Ml(t,il(e),al(e))}function gl(t){_l(zn,yl,t,!0)}function yl(t,e){for(let n=function(t){return ll(t),ol(t,cl(t,0,rl.textEnd))}(e);n>=0;n=ol(e,n))zn(t,il(e),!0)}function vl(t,e,n,r){const i=Jt(),a=Kt(),o=he(2);a.firstUpdatePass&&xl(a,t,o,r),e!==ga&&Ko(i,o,e)&&Tl(a,a.data[Se()],i,i[11],t,i[o+1]=function(t,e){return null==t||(\"string\"==typeof e?t+=e:\"object\"==typeof t&&(t=u(kr(t)))),t}(e,n),r,o)}function _l(t,e,n,r){const i=Kt(),a=he(2);i.firstUpdatePass&&xl(i,null,a,r);const o=Jt();if(n!==ga&&Ko(o,a,n)){const s=i.data[Se()];if(Ll(s,r)&&!bl(i,a)){let t=r?s.classesWithoutHost:s.stylesWithoutHost;null!==t&&(n=h(t,n||\"\")),Ts(i,s,o,n,r)}else!function(t,e,n,r,i,a,o,s){i===ga&&(i=tl);let l=0,c=0,u=0<i.length?i[0]:null,h=0<a.length?a[0]:null;for(;null!==u||null!==h;){const d=l<i.length?i[l+1]:void 0,f=c<a.length?a[c+1]:void 0;let p=null,m=void 0;u===h?(l+=2,c+=2,d!==f&&(p=h,m=f)):null===h||null!==u&&u<h?(l+=2,p=u):(c+=2,p=h,m=f),null!==p&&Tl(t,e,n,r,p,m,o,s),u=l<i.length?i[l]:null,h=c<a.length?a[c]:null}}(i,s,o,o[11],o[a+1],o[a+1]=function(t,e,n){if(null==n||\"\"===n)return tl;const r=[],i=kr(n);if(Array.isArray(i))for(let a=0;a<i.length;a++)t(r,i[a],!0);else if(\"object\"==typeof i)for(const a in i)i.hasOwnProperty(a)&&t(r,a,i[a]);else\"string\"==typeof i&&e(r,i);return r}(t,e,n),r,a)}}function bl(t,e){return e>=t.expandoStartIndex}function xl(t,e,n,r){const i=t.data;if(null===i[n+1]){const a=i[Se()],o=bl(t,n);Ll(a,r)&&null===e&&!o&&(e=!1),e=function(t,e,n,r){const i=me(t);let a=r?e.residualClasses:e.residualStyles;if(null===i)0===(r?e.classBindings:e.styleBindings)&&(n=kl(n=wl(null,t,e,n,r),e.attrs,r),a=null);else{const o=e.directiveStylingLast;if(-1===o||t[o]!==i)if(n=wl(i,t,e,n,r),null===a){let n=function(t,e,n){const r=n?e.classBindings:e.styleBindings;if(0!==wa(r))return t[ba(r)]}(t,e,r);void 0!==n&&Array.isArray(n)&&(n=wl(null,t,e,n[1],r),n=kl(n,e.attrs,r),function(t,e,n,r){t[ba(n?e.classBindings:e.styleBindings)]=r}(t,e,r,n))}else a=function(t,e,n){let r=void 0;const i=e.directiveEnd;for(let a=1+e.directiveStylingLast;a<i;a++)r=kl(r,t[a].hostAttrs,n);return kl(r,e.attrs,n)}(t,e,r)}return void 0!==a&&(r?e.residualClasses=a:e.residualStyles=a),n}(i,a,e,r),function(t,e,n,r,i,a){let o=a?e.classBindings:e.styleBindings,s=ba(o),l=wa(o);t[r]=n;let c,u=!1;if(Array.isArray(n)){const t=n;c=t[1],(null===c||Fn(t,c)>0)&&(u=!0)}else c=n;if(i)if(0!==l){const e=ba(t[s+1]);t[r+1]=_a(e,s),0!==e&&(t[e+1]=ka(t[e+1],r)),t[s+1]=131071&t[s+1]|r<<17}else t[r+1]=_a(s,0),0!==s&&(t[s+1]=ka(t[s+1],r)),s=r;else t[r+1]=_a(l,0),0===s?s=r:t[l+1]=ka(t[l+1],r),l=r;u&&(t[r+1]=xa(t[r+1])),el(t,c,r,!0),el(t,c,r,!1),function(t,e,n,r,i){const a=i?t.residualClasses:t.residualStyles;null!=a&&\"string\"==typeof e&&Fn(a,e)>=0&&(n[r+1]=Ma(n[r+1]))}(e,c,t,r,a),o=_a(s,l),a?e.classBindings=o:e.styleBindings=o}(i,a,e,n,o,r)}}function wl(t,e,n,r,i){let a=null;const o=n.directiveEnd;let s=n.directiveStylingLast;for(-1===s?s=n.directiveStart:s++;s<o&&(a=e[s],r=kl(r,a.hostAttrs,i),a!==t);)s++;return null!==t&&(n.directiveStylingLast=s),r}function kl(t,e,n){const r=n?1:2;let i=-1;if(null!==e)for(let a=0;a<e.length;a++){const o=e[a];\"number\"==typeof o?i=o:i===r&&(Array.isArray(t)||(t=void 0===t?[]:[\"\",t]),zn(t,o,!!n||e[++a]))}return void 0===t?null:t}function Ml(t,e,n){zn(t,e,kr(n))}function Tl(t,e,n,r,i,a,o,s){if(!(3&e.type))return;const l=t.data,c=l[s+1];Al(1==(1&c)?Sl(l,e,n,i,wa(c),o):void 0)||(Al(a)||2==(2&c)&&(a=Sl(l,null,n,i,s,o)),function(t,e,n,r,i){const a=Dt(t);if(e)i?a?t.addClass(n,r):n.classList.add(r):a?t.removeClass(n,r):n.classList.remove(r);else{let e=-1===r.indexOf(\"-\")?void 0:Mi.DashCase;if(null==i)a?t.removeStyle(n,r,e):n.style.removeProperty(r);else{const o=\"string\"==typeof i&&i.endsWith(\"!important\");o&&(i=i.slice(0,-10),e|=Mi.Important),a?t.setStyle(n,r,i,e):n.style.setProperty(r,i,o?\"important\":\"\")}}}(r,o,Rt(Se(),n),i,a))}function Sl(t,e,n,r,i,a){const o=null===e;let s=void 0;for(;i>0;){const e=t[i],a=Array.isArray(e),l=a?e[1]:e,c=null===l;let u=n[i+1];u===ga&&(u=c?tl:void 0);let h=c?jn(u,r):l===r?u:void 0;if(a&&!Al(h)&&(h=jn(e,r)),Al(h)&&(s=h,o))return s;const d=t[i+1];i=o?ba(d):wa(d)}if(null!==e){let t=a?e.residualClasses:e.residualStyles;null!=t&&(s=jn(t,r))}return s}function Al(t){return void 0!==t}function Ll(t,e){return 0!=(t.flags&(e?16:32))}function Cl(t,e=\"\"){const n=Jt(),r=Kt(),i=t+lt,a=r.firstCreatePass?Aa(r,i,1,e,null):r.data[i],o=n[i]=Di(n[11],e);Ki(r,n,o,a),ne(a,!1)}function El(t){return Ol(\"\",t,\"\"),El}function Ol(t,e,n){const r=Jt(),i=rs(r,t,e,n);return i!==ga&&mo(r,Se(),i),Ol}function Dl(t,e,n,r,i){const a=Jt(),o=is(a,t,e,n,r,i);return o!==ga&&mo(a,Se(),o),Dl}function Il(t,e,n,r,i,a,o){const s=Jt(),l=as(s,t,e,n,r,i,a,o);return l!==ga&&mo(s,Se(),l),Il}function Pl(t,e,n,r,i,a,o,s,l){const c=Jt(),u=os(c,t,e,n,r,i,a,o,s,l);return u!==ga&&mo(c,Se(),u),Pl}function Rl(t,e,n,r,i,a,o,s,l,c,u){const h=Jt(),d=ss(h,t,e,n,r,i,a,o,s,l,c,u);return d!==ga&&mo(h,Se(),d),Rl}function zl(t,e,n,r,i,a,o,s,l,c,u,h,d){const f=Jt(),p=ls(f,t,e,n,r,i,a,o,s,l,c,u,h,d);return p!==ga&&mo(f,Se(),p),zl}function jl(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p){const m=Jt(),g=cs(m,t,e,n,r,i,a,o,s,l,c,u,h,d,f,p);return g!==ga&&mo(m,Se(),g),jl}function Fl(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g){const y=Jt(),v=us(y,t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g);return v!==ga&&mo(y,Se(),v),Fl}function Nl(t){const e=Jt(),n=ns(e,t);return n!==ga&&mo(e,Se(),n),Nl}function Bl(t,e,n){_l(zn,yl,rs(Jt(),t,e,n),!0)}function Yl(t,e,n,r,i){_l(zn,yl,is(Jt(),t,e,n,r,i),!0)}function Hl(t,e,n,r,i,a,o){_l(zn,yl,as(Jt(),t,e,n,r,i,a,o),!0)}function Vl(t,e,n,r,i,a,o,s,l){_l(zn,yl,os(Jt(),t,e,n,r,i,a,o,s,l),!0)}function Ul(t,e,n,r,i,a,o,s,l,c,u){_l(zn,yl,ss(Jt(),t,e,n,r,i,a,o,s,l,c,u),!0)}function Wl(t,e,n,r,i,a,o,s,l,c,u,h,d){_l(zn,yl,ls(Jt(),t,e,n,r,i,a,o,s,l,c,u,h,d),!0)}function ql(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p){_l(zn,yl,cs(Jt(),t,e,n,r,i,a,o,s,l,c,u,h,d,f,p),!0)}function Gl(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g){_l(zn,yl,us(Jt(),t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g),!0)}function Xl(t){_l(zn,yl,ns(Jt(),t),!0)}function Zl(t,e,n){pl(rs(Jt(),t,e,n))}function Jl(t,e,n,r,i){pl(is(Jt(),t,e,n,r,i))}function Kl(t,e,n,r,i,a,o){pl(as(Jt(),t,e,n,r,i,a,o))}function $l(t,e,n,r,i,a,o,s,l){pl(os(Jt(),t,e,n,r,i,a,o,s,l))}function Ql(t,e,n,r,i,a,o,s,l,c,u){pl(ss(Jt(),t,e,n,r,i,a,o,s,l,c,u))}function tc(t,e,n,r,i,a,o,s,l,c,u,h,d){pl(ls(Jt(),t,e,n,r,i,a,o,s,l,c,u,h,d))}function ec(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p){pl(cs(Jt(),t,e,n,r,i,a,o,s,l,c,u,h,d,f,p))}function nc(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g){pl(us(Jt(),t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g))}function rc(t){pl(ns(Jt(),t))}function ic(t,e,n,r,i){return vl(t,rs(Jt(),e,n,r),i,!1),ic}function ac(t,e,n,r,i,a,o){return vl(t,is(Jt(),e,n,r,i,a),o,!1),ac}function oc(t,e,n,r,i,a,o,s,l){return vl(t,as(Jt(),e,n,r,i,a,o,s),l,!1),oc}function sc(t,e,n,r,i,a,o,s,l,c,u){return vl(t,os(Jt(),e,n,r,i,a,o,s,l,c),u,!1),sc}function lc(t,e,n,r,i,a,o,s,l,c,u,h,d){return vl(t,ss(Jt(),e,n,r,i,a,o,s,l,c,u,h),d,!1),lc}function cc(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p){return vl(t,ls(Jt(),e,n,r,i,a,o,s,l,c,u,h,d,f),p,!1),cc}function uc(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g){return vl(t,cs(Jt(),e,n,r,i,a,o,s,l,c,u,h,d,f,p,m),g,!1),uc}function hc(t,e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g,y,v){return vl(t,us(Jt(),e,n,r,i,a,o,s,l,c,u,h,d,f,p,m,g,y),v,!1),hc}function dc(t,e,n){return vl(t,ns(Jt(),e),n,!1),dc}function fc(t,e,n){const r=Jt();return Ko(r,ue(),e)&&Ya(Kt(),Le(),r,t,e,r[11],n,!0),fc}function pc(t,e,n){const r=Jt();if(Ko(r,ue(),e)){const i=Kt(),a=Le();Ya(i,a,r,t,e,ho(me(i.data),a,r),n,!0)}return pc}const mc=void 0;var gc=[\"en\",[[\"a\",\"p\"],[\"AM\",\"PM\"],mc],[[\"AM\",\"PM\"],mc,mc],[[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"]],mc,[[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"]],mc,[[\"B\",\"A\"],[\"BC\",\"AD\"],[\"Before Christ\",\"Anno Domini\"]],0,[6,0],[\"M/d/yy\",\"MMM d, y\",\"MMMM d, y\",\"EEEE, MMMM d, y\"],[\"h:mm a\",\"h:mm:ss a\",\"h:mm:ss a z\",\"h:mm:ss a zzzz\"],[\"{1}, {0}\",mc,\"{1} 'at' {0}\",mc],[\".\",\",\",\";\",\"%\",\"+\",\"-\",\"E\",\"\\xd7\",\"\\u2030\",\"\\u221e\",\"NaN\",\":\"],[\"#,##0.###\",\"#,##0%\",\"\\xa4#,##0.00\",\"#E0\"],\"USD\",\"$\",\"US Dollar\",{},\"ltr\",function(t){let e=Math.floor(Math.abs(t)),n=t.toString().replace(/^[^.]*\\.?/,\"\").length;return 1===e&&0===n?1:5}];let yc={};function vc(t,e,n){\"string\"!=typeof e&&(n=e,e=t[kc.LocaleId]),e=e.toLowerCase().replace(/_/g,\"-\"),yc[e]=t,n&&(yc[e][kc.ExtraData]=n)}function _c(t){const e=function(t){return t.toLowerCase().replace(/_/g,\"-\")}(t);let n=wc(e);if(n)return n;const r=e.split(\"-\")[0];if(n=wc(r),n)return n;if(\"en\"===r)return gc;throw new Error(`Missing locale data for the locale \"${t}\".`)}function bc(t){return _c(t)[kc.CurrencyCode]||null}function xc(t){return _c(t)[kc.PluralCase]}function wc(t){return t in yc||(yc[t]=j.ng&&j.ng.common&&j.ng.common.locales&&j.ng.common.locales[t]),yc[t]}var kc=function(t){return t[t.LocaleId=0]=\"LocaleId\",t[t.DayPeriodsFormat=1]=\"DayPeriodsFormat\",t[t.DayPeriodsStandalone=2]=\"DayPeriodsStandalone\",t[t.DaysFormat=3]=\"DaysFormat\",t[t.DaysStandalone=4]=\"DaysStandalone\",t[t.MonthsFormat=5]=\"MonthsFormat\",t[t.MonthsStandalone=6]=\"MonthsStandalone\",t[t.Eras=7]=\"Eras\",t[t.FirstDayOfWeek=8]=\"FirstDayOfWeek\",t[t.WeekendRange=9]=\"WeekendRange\",t[t.DateFormat=10]=\"DateFormat\",t[t.TimeFormat=11]=\"TimeFormat\",t[t.DateTimeFormat=12]=\"DateTimeFormat\",t[t.NumberSymbols=13]=\"NumberSymbols\",t[t.NumberFormats=14]=\"NumberFormats\",t[t.CurrencyCode=15]=\"CurrencyCode\",t[t.CurrencySymbol=16]=\"CurrencySymbol\",t[t.CurrencyName=17]=\"CurrencyName\",t[t.Currencies=18]=\"Currencies\",t[t.Directionality=19]=\"Directionality\",t[t.PluralCase=20]=\"PluralCase\",t[t.ExtraData=21]=\"ExtraData\",t}({});const Mc=[\"zero\",\"one\",\"two\",\"few\",\"many\"],Tc=\"en-US\",Sc={marker:\"element\"},Ac={marker:\"ICU\"};var Lc=function(t){return t[t.SHIFT=2]=\"SHIFT\",t[t.APPEND_EAGERLY=1]=\"APPEND_EAGERLY\",t[t.COMMENT=2]=\"COMMENT\",t}({});let Cc=Tc;function Ec(t){var e;null==(e=t)&&g(\"Expected localeId to be defined\",e,null,\"!=\"),\"string\"==typeof t&&(Cc=t.toLowerCase().replace(/_/g,\"-\"))}function Oc(t,e,n){const r=e.insertBeforeIndex,i=Array.isArray(r)?r[0]:r;return null===i?Gi(t,0,n):Pt(n[i])}function Dc(t,e,n,r,i){const a=e.insertBeforeIndex;if(Array.isArray(a)){let o=r,s=null;if(3&e.type||(s=o,o=i),null!==o&&0==(2&e.flags))for(let e=1;e<a.length;e++)Hi(t,o,n[a[e]],s,!1)}}function Ic(t,e){if(t.push(e),t.length>1)for(let n=t.length-2;n>=0;n--){const r=t[n];Pc(r)||Rc(r,e)&&null===zc(r)&&jc(r,e.index)}}function Pc(t){return!(64&t.type)}function Rc(t,e){return Pc(e)||t.index>e.index}function zc(t){const e=t.insertBeforeIndex;return Array.isArray(e)?e[0]:e}function jc(t,e){const n=t.insertBeforeIndex;Array.isArray(n)?n[0]=e:(Ji(Oc,Dc),t.insertBeforeIndex=e)}function Fc(t,e){const n=t.data[e];return null===n||\"string\"==typeof n?null:n.hasOwnProperty(\"currentCaseLViewIndex\")?n:n.value}function Nc(t,e,n){const r=La(t,n,64,null,null);return Ic(e,r),r}function Bc(t,e){const n=e[t.currentCaseLViewIndex];return null===n?n:n<0?~n:n}let Yc=0,Hc=0;function Vc(t,e,n,r,i){for(let a=0;a<n.length;a++){const o=n[a],s=n[++a];if(o&i){let i=\"\";for(let o=a+1;o<=a+s;o++){const a=n[o];if(\"string\"==typeof a)i+=a;else if(\"number\"==typeof a)if(a<0)i+=vt(e[r-a]);else{const s=a>>>2;switch(3&a){case 1:const a=n[++o],l=n[++o],c=t.data[s];\"string\"==typeof c?Ka(e[11],e[s],null,c,a,i,l):Ya(t,c,e,a,i,e[11],l,!1);break;case 0:const u=e[s];null!==u&&Ii(e[11],u,i);break;case 2:Wc(t,Fc(t,s),e,i);break;case 3:Uc(t,Fc(t,s),r,e)}}}}else{const i=n[a+1];if(i>0&&3==(3&i)){const n=Fc(t,i>>>2);e[n.currentCaseLViewIndex]<0&&Uc(t,n,r,e)}}a+=s}}function Uc(t,e,n,r){let i=r[e.currentCaseLViewIndex];if(null!==i){let a=Yc;i<0&&(i=r[e.currentCaseLViewIndex]=~i,a=-1),Vc(t,r,e.update[i],n,a)}}function Wc(t,e,n,r){const i=function(t,e){let n=t.cases.indexOf(e);if(-1===n)switch(t.type){case 1:{const r=function(t,e){const n=xc(e)(parseInt(t,10)),r=Mc[n];return void 0!==r?r:\"other\"}(e,Cc);n=t.cases.indexOf(r),-1===n&&\"other\"!==r&&(n=t.cases.indexOf(\"other\"));break}case 0:n=t.cases.indexOf(\"other\")}return-1===n?null:n}(e,r);if(Bc(e,n)!==i&&(function t(e,n,r){let i=Bc(n,r);if(null!==i){const a=n.remove[i];for(let n=0;n<a.length;n++){const i=a[n];if(i>0){const t=Rt(i,r);null!==t&&$i(r[11],t)}else t(e,Fc(e,~i),r)}}}(t,e,n),n[e.currentCaseLViewIndex]=null===i?null:~i,null!==i)){const r=n[e.anchorIdx];r&&function t(e,n,r,i){const a=r[11];let o,s=null;for(let l=0;l<n.length;l++){const c=n[l];if(\"string\"==typeof c){const t=n[++l];null===r[t]&&(r[t]=Di(a,c))}else if(\"number\"==typeof c)switch(1&c){case 0:const u=c>>>17;let h,d;if(null===s&&(s=u,o=Wi(a,i)),u===s?(h=i,d=o):(h=null,d=Pt(r[u])),null!==d){const n=(131070&c)>>>1;Hi(a,d,r[n],h,!1);const i=Fc(e,n);if(null!==i&&\"object\"==typeof i){const n=Bc(i,r);null!==n&&t(e,i.create[n],r,r[i.anchorIdx])}}break;case 1:const f=n[++l],p=n[++l];Ka(a,Rt(c>>>1,r),null,null,f,p,null);break;default:throw new Error(`Unable to determine the type of mutate operation for \"${c}\"`)}else switch(c){case Ac:const t=n[++l],e=n[++l];null===r[e]&&vi(r[e]=Pi(a,t),r);break;case Sc:const i=n[++l],o=n[++l];null===r[o]&&vi(r[o]=Ri(a,i,null),r)}}}(t,e.create[i],n,r)}}const qc=/\\ufffd(\\d+):?\\d*\\ufffd/gi,Gc=/({\\s*\\ufffd\\d+:?\\d*\\ufffd\\s*,\\s*\\S{6}\\s*,[\\s\\S]*})/gi,Xc=/\\ufffd(\\d+)\\ufffd/,Zc=/^\\s*(\\ufffd\\d+:?\\d*\\ufffd)\\s*,\\s*(select|plural)\\s*,/,Jc=/\\ufffd\\/?\\*(\\d+:\\d+)\\ufffd/gi,Kc=/\\ufffd(\\/?[#*]\\d+):?\\d*\\ufffd/gi,$c=/\\uE500/g;function Qc(t,e,n,r,i,a,o){const s=Ca(t,r,1,null);let l=s<<Lc.SHIFT,c=ee();e===c&&(c=null),null===c&&(l|=Lc.APPEND_EAGERLY),o&&(l|=Lc.COMMENT,void 0===Ti&&(Ti=function(){const t=[];let e,n,r=-1;function i(t,e){r=0;const i=Bc(t,e);n=null!==i?t.remove[i]:N}function a(){if(r<n.length){const o=n[r++];return o>0?e[o]:(t.push(r,n),i(e[1].data[~o],e),a())}return 0===t.length?null:(n=t.pop(),r=t.pop(),a())}return function(n,r){for(e=r;t.length;)t.pop();return i(n.value,r),a}}())),i.push(l,null===a?\"\":a);const u=La(t,s,o?32:1,null===a?\"\":a,null);Ic(n,u);const h=u.index;return ne(u,!1),null!==c&&e!==c&&function(t,e){let n=t.insertBeforeIndex;var r;null===n?(Ji(Oc,Dc),n=t.insertBeforeIndex=[null,e]):(\"Expecting array here\",(r=Array.isArray(n))!=!0&&g(\"Expecting array here\",r,true,\"==\"),n.push(e))}(c,h),u}function tu(t,e,n,r,i,a,o){const s=o.match(qc),l=Qc(t,e,n,a,r,s?null:o,!1);s&&eu(i,o,l.index)}function eu(t,e,n,r,i=null){const a=t.length,o=a+1;t.push(null,null);const s=a+2,l=e.split(qc);let c=0;for(let u=0;u<l.length;u++){const e=l[u];if(1&u){const n=parseInt(e,10);t.push(-1-n),c|=nu(n)}else\"\"!==e&&t.push(e)}return t.push(n<<2|(r?1:0)),r&&t.push(r,i),t[a]=c,t[o]=t.length-s,c}function nu(t){return 1<<Math.min(t,31)}function ru(t){let e,n,r=\"\",i=0,a=!1;for(;null!==(e=Jc.exec(t));)a?e[0]===`\\ufffd/*${n}\\ufffd`&&(i=e.index,a=!1):(r+=t.substring(i,e.index+e[0].length),n=e[1],a=!0);return r+=t.substr(i),r}function iu(t,e,n,r,i,a){let o=0;const s={type:i.type,currentCaseLViewIndex:Ca(t,e,1,null),anchorIdx:a,cases:[],create:[],remove:[],update:[]};!function(t,e,n){t.push(nu(e.mainBinding),2,-1-e.mainBinding,n<<2|2)}(n,i,a),function(t,e,n){const r=t.data[e];null===r?t.data[e]=n:r.value=n}(t,a,s);const l=i.values;for(let c=0;c<l.length;c++){const a=l[c],u=[];for(let t=0;t<a.length;t++){const e=a[t];if(\"string\"!=typeof e){const n=u.push(e)-1;a[t]=`\\x3c!--\\ufffd${n}\\ufffd--\\x3e`}}o=su(t,s,e,n,r,i.cases[c],a.join(\"\"),u)|o}o&&function(t,e,n){t.push(e,1,n<<2|3)}(n,o,a)}function au(t){const e=[],n=[];let r=1,i=0;const a=ou(t=t.replace(Zc,(function(t,e,n){return r=\"select\"===n?0:1,i=parseInt(e.substr(1),10),\"\"})));for(let o=0;o<a.length;){let t=a[o++].trim();1===r&&(t=t.replace(/\\s*(?:=)?(\\w+)\\s*/,\"$1\")),t.length&&e.push(t);const i=ou(a[o++]);e.length>n.length&&n.push(i)}return{type:r,mainBinding:i,cases:e,values:n}}function ou(t){if(!t)return[];let e=0;const n=[],r=[],i=/[{}]/g;let a;for(i.lastIndex=0;a=i.exec(t);){const i=a.index;if(\"}\"==a[0]){if(n.pop(),0==n.length){const n=t.substring(e,i);Zc.test(n)?r.push(au(n)):r.push(n),e=i+1}}else{if(0==n.length){const n=t.substring(e,i);r.push(n),e=i+1}n.push(\"{\")}}const o=t.substring(e);return r.push(o),r}function su(t,e,n,r,i,a,o,s){const l=[],c=[],u=[];e.cases.push(a),e.create.push(l),e.remove.push(c),e.update.push(u);const h=Or(Ot()).getInertBodyElement(o),d=ei(h)||h;return d?function t(e,n,r,i,a,o,s,l,c,u,h){let d=0,f=l.firstChild;for(;f;){const l=Ca(e,r,1,null);switch(f.nodeType){case Node.ELEMENT_NODE:const p=f,m=p.tagName.toLowerCase();if(Ur.hasOwnProperty(m)){uu(a,Sc,m,c,l),e.data[l]=m;const g=p.attributes;for(let t=0;t<g.length;t++){const e=g.item(t),n=e.name.toLowerCase();e.value.match(qc)?Gr.hasOwnProperty(n)&&(Wr[n]?eu(s,e.value,l,e.name,zr):qr[n]?eu(s,e.value,l,e.name,jr):eu(s,e.value,l,e.name)):hu(a,l,e)}d=t(e,n,r,i,a,o,s,f,l,u,h+1)|d,lu(o,l,h)}break;case Node.TEXT_NODE:const g=f.textContent||\"\",y=g.match(qc);uu(a,null,y?\"\":g,c,l),lu(o,l,h),y&&(d=eu(s,g,l)|d);break;case Node.COMMENT_NODE:const v=Xc.exec(f.textContent||\"\");if(v){const t=u[parseInt(v[1],10)];uu(a,Ac,\"\",c,l),iu(e,r,i,c,t,l),cu(o,l,h)}}f=f.nextSibling}return d}(t,e,n,r,l,c,u,d,i,s,0):0}function lu(t,e,n){0===n&&t.push(e)}function cu(t,e,n){0===n&&(t.push(~e),t.push(e))}function uu(t,e,n,r,i){null!==e&&t.push(e),t.push(n,i,0|r<<17|i<<1)}function hu(t,e,n){t.push(e<<1|1,n.name,n.value)}const du=/\\[(\\ufffd.+?\\ufffd?)\\]/,fu=/\\[(\\ufffd.+?\\ufffd?)\\]|(\\ufffd\\/?\\*\\d+:\\d+\\ufffd)/g,pu=/({\\s*)(VAR_(PLURAL|SELECT)(_\\d+)?)(\\s*,)/g,mu=/{([A-Z0-9_]+)}/g,gu=/\\ufffdI18N_EXP_(ICU(_\\d+)?)\\ufffd/g,yu=/\\/\\*/,vu=/\\d+\\:(\\d+)/;function _u(t,e,n=-1){const r=Kt(),i=Jt(),a=lt+t,o=Vt(r.consts,e),s=ee();r.firstCreatePass&&function(t,e,n,r,i,a){const o=ee(),s=[],l=[],c=[[]],u=(h=i=function(t,e){if(function(t){return-1===t}(e))return ru(t);{const n=t.indexOf(`:${e}\\ufffd`)+2+e.toString().length,r=t.search(new RegExp(`\\ufffd\\\\/\\\\*\\\\d+:${e}\\ufffd`));return ru(t.substring(n,r))}}(i,a),h.replace($c,\" \")).split(Kc);var h;for(let d=0;d<u.length;d++){let r=u[d];if(0==(1&d)){const a=ou(r);for(let r=0;r<a.length;r++){let u=a[r];if(0==(1&r)){const e=u;\"\"!==e&&tu(t,o,c[0],s,l,n,e)}else{const r=u;if(\"object\"!=typeof r)throw new Error(`Unable to parse ICU expression in \"${i}\" message.`);iu(t,n,l,e,r,Qc(t,o,c[0],n,s,\"\",!0).index)}}}else{const e=47===r.charCodeAt(0),n=(r.charCodeAt(e?1:0),lt+Number.parseInt(r.substring(e?2:1)));if(e)c.shift(),ne(ee(),!1);else{const e=Nc(t,c[0],n);c.unshift([]),ne(e,!0)}}}t.data[r]={create:s,update:l}}(r,null===s?0:s.index,i,a,o,n);const l=r.data[a],c=Yi(r,s===i[6]?null:s,i);!function(t,e,n,r){const i=t[11];for(let a=0;a<e.length;a++){const o=e[a++],s=e[a],l=(o&Lc.COMMENT)===Lc.COMMENT,c=(o&Lc.APPEND_EAGERLY)===Lc.APPEND_EAGERLY,u=o>>>Lc.SHIFT;let h=t[u];null===h&&(h=t[u]=l?i.createComment(s):Di(i,s)),c&&null!==n&&Hi(i,n,h,r,!1)}}(i,l.create,c,s&&8&s.type?i[s.index]:null),de(!0)}function bu(){de(!1)}function xu(t,e,n){_u(t,e,n),bu()}function wu(t,e){const n=Kt(),r=Vt(n.consts,e);!function(t,e,n){const r=Qt().index,i=[];if(t.firstCreatePass&&null===t.data[e]){for(let t=0;t<n.length;t+=2){const e=n[t],a=n[t+1];if(\"\"!==a){if(Gc.test(a))throw new Error(`ICU expressions are not supported in attributes. Message: \"${a}\".`);eu(i,a,r,e)}}t.data[e]=i}}(n,t+lt,r)}function ku(t){return Ko(Jt(),ue(),t)&&(Yc|=1<<Math.min(Hc,31)),Hc++,ku}function Mu(t){!function(t,e,n){if(Hc>0){const r=t.data[n];Vc(t,e,Array.isArray(r)?r:r.update,le()-Hc-1,Yc)}Yc=0,Hc=0}(Kt(),Jt(),t+lt)}function Tu(t,e={}){return function(t,e={}){let n=t;if(du.test(t)){const t={},e=[0];n=n.replace(fu,(n,r,i)=>{const a=r||i,o=t[a]||[];if(o.length||(a.split(\"|\").forEach(t=>{const e=t.match(vu),n=e?parseInt(e[1],10):0,r=yu.test(t);o.push([n,r,t])}),t[a]=o),!o.length)throw new Error(\"i18n postprocess: unmatched placeholder - \"+a);const s=e[e.length-1];let l=0;for(let t=0;t<o.length;t++)if(o[t][0]===s){l=t;break}const[c,u,h]=o[l];return u?e.pop():s!==c&&e.push(c),o.splice(l,1),h})}return Object.keys(e).length?(n=n.replace(pu,(t,n,r,i,a,o)=>e.hasOwnProperty(r)?`${n}${e[r]}${o}`:t),n=n.replace(mu,(t,n)=>e.hasOwnProperty(n)?e[n]:t),n=n.replace(gu,(t,n)=>{if(e.hasOwnProperty(n)){const r=e[n];if(!r.length)throw new Error(`i18n postprocess: unmatched ICU - ${t} with key: ${n}`);return r.shift()}return t}),n):n}(t,e)}function Su(t,e,n,r,i){if(t=p(t),Array.isArray(t))for(let a=0;a<t.length;a++)Su(t[a],e,n,r,i);else{const a=Kt(),o=Jt();let s=Oo(t)?t:p(t.provide),l=Lo(t);const c=Qt(),u=1048575&c.providerIndexes,h=c.directiveStart,d=c.providerIndexes>>20;if(Oo(t)||!t.multi){const r=new Ne(l,i,ws),f=Cu(s,e,i?u:u+d,h);-1===f?(en(Ke(c,o),a,s),Au(a,t,e.length),e.push(s),c.directiveStart++,c.directiveEnd++,i&&(c.providerIndexes+=1048576),n.push(r),o.push(r)):(n[f]=r,o[f]=r)}else{const f=Cu(s,e,u+d,h),p=Cu(s,e,u,u+d),m=f>=0&&n[f],g=p>=0&&n[p];if(i&&!g||!i&&!m){en(Ke(c,o),a,s);const u=function(t,e,n,r,i){const a=new Ne(t,n,ws);return a.multi=[],a.index=e,a.componentProviders=0,Lu(a,i,r&&!n),a}(i?Ou:Eu,n.length,i,r,l);!i&&g&&(n[p].providerFactory=u),Au(a,t,e.length,0),e.push(s),c.directiveStart++,c.directiveEnd++,i&&(c.providerIndexes+=1048576),n.push(u),o.push(u)}else Au(a,t,f>-1?f:p,Lu(n[i?p:f],l,!i&&r));!i&&r&&g&&n[p].componentProviders++}}}function Au(t,e,n,r){const i=Oo(e);if(i||e.useClass){const a=(e.useClass||e).prototype.ngOnDestroy;if(a){const o=t.destroyHooks||(t.destroyHooks=[]);if(!i&&e.multi){const t=o.indexOf(n);-1===t?o.push(n,[r,a]):o[t+1].push(r,a)}else o.push(n,a)}}}function Lu(t,e,n){return n&&t.componentProviders++,t.multi.push(e)-1}function Cu(t,e,n,r){for(let i=n;i<r;i++)if(e[i]===t)return i;return-1}function Eu(t,e,n,r){return Du(this.multi,[])}function Ou(t,e,n,r){const i=this.multi;let a;if(this.providerFactory){const t=this.providerFactory.componentProviders,e=un(n,n[1],this.providerFactory.index,r);a=e.slice(0,t),Du(i,a);for(let n=t;n<e.length;n++)a.push(e[n])}else a=[],Du(i,a);return a}function Du(t,e){for(let n=0;n<t.length;n++)e.push((0,t[n])());return e}function Iu(t,e=[]){return n=>{n.providersResolver=(n,r)=>function(t,e,n){const r=Kt();if(r.firstCreatePass){const i=mt(t);Su(n,r.data,r.blueprint,i,!0),Su(e,r.data,r.blueprint,i,!1)}}(n,r?r(t):t,e)}}class Pu{}class Ru{resolveComponentFactory(t){throw function(t){const e=Error(`No component factory found for ${u(t)}. Did you add it to @NgModule.entryComponents?`);return e.ngComponent=t,e}(t)}}let zu=(()=>{class t{}return t.NULL=new Ru,t})();function ju(...t){}function Fu(t,e){return new Bu(zt(t,e))}const Nu=function(){return Fu(Qt(),Jt())};let Bu=(()=>{class t{constructor(t){this.nativeElement=t}}return t.__NG_ELEMENT_ID__=Nu,t})();class Yu{}let Hu=(()=>{class t{}return t.__NG_ELEMENT_ID__=()=>Vu(),t})();const Vu=function(){const t=Jt(),e=Nt(Qt().index,t);return function(t){return t[11]}(ut(e)?e:t)};let Uu=(()=>{class t{}return t.\\u0275prov=y({token:t,providedIn:\"root\",factory:()=>null}),t})();class Wu{constructor(t){this.full=t,this.major=t.split(\".\")[0],this.minor=t.split(\".\")[1],this.patch=t.split(\".\").slice(2).join(\".\")}}const qu=new Wu(\"11.0.9\");class Gu{constructor(){}supports(t){return Go(t)}create(t){return new Zu(t)}}const Xu=(t,e)=>e;class Zu{constructor(t){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=t||Xu}forEachItem(t){let e;for(e=this._itHead;null!==e;e=e._next)t(e)}forEachOperation(t){let e=this._itHead,n=this._removalsHead,r=0,i=null;for(;e||n;){const a=!n||e&&e.currentIndex<Qu(n,r,i)?e:n,o=Qu(a,r,i),s=a.currentIndex;if(a===n)r--,n=n._nextRemoved;else if(e=e._next,null==a.previousIndex)r++;else{i||(i=[]);const t=o-r,e=s-r;if(t!=e){for(let n=0;n<t;n++){const r=n<i.length?i[n]:i[n]=0,a=r+n;e<=a&&a<t&&(i[n]=r+1)}i[a.previousIndex]=e-t}}o!==s&&t(a,o,s)}}forEachPreviousItem(t){let e;for(e=this._previousItHead;null!==e;e=e._nextPrevious)t(e)}forEachAddedItem(t){let e;for(e=this._additionsHead;null!==e;e=e._nextAdded)t(e)}forEachMovedItem(t){let e;for(e=this._movesHead;null!==e;e=e._nextMoved)t(e)}forEachRemovedItem(t){let e;for(e=this._removalsHead;null!==e;e=e._nextRemoved)t(e)}forEachIdentityChange(t){let e;for(e=this._identityChangesHead;null!==e;e=e._nextIdentityChange)t(e)}diff(t){if(null==t&&(t=[]),!Go(t))throw new Error(`Error trying to diff '${u(t)}'. Only arrays and iterables are allowed`);return this.check(t)?this:null}onDestroy(){}check(t){this._reset();let e,n,r,i=this._itHead,a=!1;if(Array.isArray(t)){this.length=t.length;for(let e=0;e<this.length;e++)n=t[e],r=this._trackByFn(e,n),null!==i&&Object.is(i.trackById,r)?(a&&(i=this._verifyReinsertion(i,n,r,e)),Object.is(i.item,n)||this._addIdentityChange(i,n)):(i=this._mismatch(i,n,r,e),a=!0),i=i._next}else e=0,function(t,e){if(Array.isArray(t))for(let n=0;n<t.length;n++)e(t[n]);else{const n=t[Wo()]();let r;for(;!(r=n.next()).done;)e(r.value)}}(t,t=>{r=this._trackByFn(e,t),null!==i&&Object.is(i.trackById,r)?(a&&(i=this._verifyReinsertion(i,t,r,e)),Object.is(i.item,t)||this._addIdentityChange(i,t)):(i=this._mismatch(i,t,r,e),a=!0),i=i._next,e++}),this.length=e;return this._truncate(i),this.collection=t,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let t;for(t=this._previousItHead=this._itHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;null!==t;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;null!==t;t=t._nextMoved)t.previousIndex=t.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(t,e,n,r){let i;return null===t?i=this._itTail:(i=t._prev,this._remove(t)),null!==(t=null===this._linkedRecords?null:this._linkedRecords.get(n,r))?(Object.is(t.item,e)||this._addIdentityChange(t,e),this._moveAfter(t,i,r)):null!==(t=null===this._unlinkedRecords?null:this._unlinkedRecords.get(n,null))?(Object.is(t.item,e)||this._addIdentityChange(t,e),this._reinsertAfter(t,i,r)):t=this._addAfter(new Ju(e,n),i,r),t}_verifyReinsertion(t,e,n,r){let i=null===this._unlinkedRecords?null:this._unlinkedRecords.get(n,null);return null!==i?t=this._reinsertAfter(i,t._prev,r):t.currentIndex!=r&&(t.currentIndex=r,this._addToMoves(t,r)),t}_truncate(t){for(;null!==t;){const e=t._next;this._addToRemovals(this._unlink(t)),t=e}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(t,e,n){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(t);const r=t._prevRemoved,i=t._nextRemoved;return null===r?this._removalsHead=i:r._nextRemoved=i,null===i?this._removalsTail=r:i._prevRemoved=r,this._insertAfter(t,e,n),this._addToMoves(t,n),t}_moveAfter(t,e,n){return this._unlink(t),this._insertAfter(t,e,n),this._addToMoves(t,n),t}_addAfter(t,e,n){return this._insertAfter(t,e,n),this._additionsTail=null===this._additionsTail?this._additionsHead=t:this._additionsTail._nextAdded=t,t}_insertAfter(t,e,n){const r=null===e?this._itHead:e._next;return t._next=r,t._prev=e,null===r?this._itTail=t:r._prev=t,null===e?this._itHead=t:e._next=t,null===this._linkedRecords&&(this._linkedRecords=new $u),this._linkedRecords.put(t),t.currentIndex=n,t}_remove(t){return this._addToRemovals(this._unlink(t))}_unlink(t){null!==this._linkedRecords&&this._linkedRecords.remove(t);const e=t._prev,n=t._next;return null===e?this._itHead=n:e._next=n,null===n?this._itTail=e:n._prev=e,t}_addToMoves(t,e){return t.previousIndex===e||(this._movesTail=null===this._movesTail?this._movesHead=t:this._movesTail._nextMoved=t),t}_addToRemovals(t){return null===this._unlinkedRecords&&(this._unlinkedRecords=new $u),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t}_addIdentityChange(t,e){return t.item=e,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=t:this._identityChangesTail._nextIdentityChange=t,t}}class Ju{constructor(t,e){this.item=t,this.trackById=e,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class Ku{constructor(){this._head=null,this._tail=null}add(t){null===this._head?(this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t)}get(t,e){let n;for(n=this._head;null!==n;n=n._nextDup)if((null===e||e<=n.currentIndex)&&Object.is(n.trackById,t))return n;return null}remove(t){const e=t._prevDup,n=t._nextDup;return null===e?this._head=n:e._nextDup=n,null===n?this._tail=e:n._prevDup=e,null===this._head}}class $u{constructor(){this.map=new Map}put(t){const e=t.trackById;let n=this.map.get(e);n||(n=new Ku,this.map.set(e,n)),n.add(t)}get(t,e){const n=this.map.get(t);return n?n.get(t,e):null}remove(t){const e=t.trackById;return this.map.get(e).remove(t)&&this.map.delete(e),t}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function Qu(t,e,n){const r=t.previousIndex;if(null===r)return r;let i=0;return n&&r<n.length&&(i=n[r]),r+e+i}class th{constructor(){}supports(t){return t instanceof Map||Xo(t)}create(){return new eh}}class eh{constructor(){this._records=new Map,this._mapHead=null,this._appendAfter=null,this._previousMapHead=null,this._changesHead=null,this._changesTail=null,this._additionsHead=null,this._additionsTail=null,this._removalsHead=null,this._removalsTail=null}get isDirty(){return null!==this._additionsHead||null!==this._changesHead||null!==this._removalsHead}forEachItem(t){let e;for(e=this._mapHead;null!==e;e=e._next)t(e)}forEachPreviousItem(t){let e;for(e=this._previousMapHead;null!==e;e=e._nextPrevious)t(e)}forEachChangedItem(t){let e;for(e=this._changesHead;null!==e;e=e._nextChanged)t(e)}forEachAddedItem(t){let e;for(e=this._additionsHead;null!==e;e=e._nextAdded)t(e)}forEachRemovedItem(t){let e;for(e=this._removalsHead;null!==e;e=e._nextRemoved)t(e)}diff(t){if(t){if(!(t instanceof Map||Xo(t)))throw new Error(`Error trying to diff '${u(t)}'. Only maps and objects are allowed`)}else t=new Map;return this.check(t)?this:null}onDestroy(){}check(t){this._reset();let e=this._mapHead;if(this._appendAfter=null,this._forEach(t,(t,n)=>{if(e&&e.key===n)this._maybeAddToChanges(e,t),this._appendAfter=e,e=e._next;else{const r=this._getOrCreateRecordForKey(n,t);e=this._insertBeforeOrAppend(e,r)}}),e){e._prev&&(e._prev._next=null),this._removalsHead=e;for(let t=e;null!==t;t=t._nextRemoved)t===this._mapHead&&(this._mapHead=null),this._records.delete(t.key),t._nextRemoved=t._next,t.previousValue=t.currentValue,t.currentValue=null,t._prev=null,t._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(t,e){if(t){const n=t._prev;return e._next=t,e._prev=n,t._prev=e,n&&(n._next=e),t===this._mapHead&&(this._mapHead=e),this._appendAfter=t,t}return this._appendAfter?(this._appendAfter._next=e,e._prev=this._appendAfter):this._mapHead=e,this._appendAfter=e,null}_getOrCreateRecordForKey(t,e){if(this._records.has(t)){const n=this._records.get(t);this._maybeAddToChanges(n,e);const r=n._prev,i=n._next;return r&&(r._next=i),i&&(i._prev=r),n._next=null,n._prev=null,n}const n=new nh(t);return this._records.set(t,n),n.currentValue=e,this._addToAdditions(n),n}_reset(){if(this.isDirty){let t;for(this._previousMapHead=this._mapHead,t=this._previousMapHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._changesHead;null!==t;t=t._nextChanged)t.previousValue=t.currentValue;for(t=this._additionsHead;null!=t;t=t._nextAdded)t.previousValue=t.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(t,e){Object.is(e,t.currentValue)||(t.previousValue=t.currentValue,t.currentValue=e,this._addToChanges(t))}_addToAdditions(t){null===this._additionsHead?this._additionsHead=this._additionsTail=t:(this._additionsTail._nextAdded=t,this._additionsTail=t)}_addToChanges(t){null===this._changesHead?this._changesHead=this._changesTail=t:(this._changesTail._nextChanged=t,this._changesTail=t)}_forEach(t,e){t instanceof Map?t.forEach(e):Object.keys(t).forEach(n=>e(t[n],n))}}class nh{constructor(t){this.key=t,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}let rh=(()=>{class t{constructor(t){this.factories=t}static create(e,n){if(null!=n){const t=n.factories.slice();e=e.concat(t)}return new t(e)}static extend(e){return{provide:t,useFactory:n=>{if(!n)throw new Error(\"Cannot extend IterableDiffers without a parent injector\");return t.create(e,n)},deps:[[t,new Zn,new Gn]]}}find(t){const e=this.factories.find(e=>e.supports(t));if(null!=e)return e;throw new Error(`Cannot find a differ supporting object '${t}' of type '${n=t,n.name||typeof n}'`);var n}}return t.\\u0275prov=y({token:t,providedIn:\"root\",factory:()=>new t([new Gu])}),t})(),ih=(()=>{class t{constructor(t){this.factories=t}static create(e,n){if(n){const t=n.factories.slice();e=e.concat(t)}return new t(e)}static extend(e){return{provide:t,useFactory:n=>{if(!n)throw new Error(\"Cannot extend KeyValueDiffers without a parent injector\");return t.create(e,n)},deps:[[t,new Zn,new Gn]]}}find(t){const e=this.factories.find(e=>e.supports(t));if(e)return e;throw new Error(`Cannot find a differ supporting object '${t}'`)}}return t.\\u0275prov=y({token:t,providedIn:\"root\",factory:()=>new t([new th])}),t})();class ah{constructor(t,e){this._lView=t,this._cdRefInjectingView=e,this._appRef=null,this._attachedToViewContainer=!1}get rootNodes(){const t=this._lView,e=t[1];return function t(e,n,r,i,a=!1){for(;null!==r;){const o=n[r.index];if(null!==o&&i.push(Pt(o)),ht(o))for(let e=ct;e<o.length;e++){const n=o[e],r=n[1].firstChild;null!==r&&t(n[1],n,r,i)}const s=r.type;if(8&s)t(e,n,r.child,i);else if(32&s){const t=Si(r,n);let e;for(;e=t();)i.push(e)}else if(16&s){const e=n[16],a=e[6].projection[r.projection];if(Array.isArray(a))i.push(...a);else{const n=Ai(e);t(n[1],n,a,i,!0)}}r=a?r.projectionNext:r.next}return i}(e,t,e.firstChild,[])}get context(){return this._lView[8]}get destroyed(){return 256==(256&this._lView[2])}destroy(){if(this._appRef)this._appRef.detachView(this);else if(this._attachedToViewContainer){const t=this._lView[3];if(ht(t)){const e=t[8],n=e?e.indexOf(this):-1;n>-1&&(ji(t,n),Pn(e,n))}this._attachedToViewContainer=!1}Fi(this._lView[1],this._lView)}onDestroy(t){Na(this._lView[1],this._lView,null,t)}markForCheck(){io(this._cdRefInjectingView||this._lView)}detach(){this._lView[2]&=-129}reattach(){this._lView[2]|=128}detectChanges(){ao(this._lView[1],this._lView,this.context)}checkNoChanges(){!function(t,e,n){oe(!0);try{ao(t,e,n)}finally{oe(!1)}}(this._lView[1],this._lView,this.context)}attachToViewContainerRef(){if(this._appRef)throw new Error(\"This view is already attached directly to the ApplicationRef!\");this._attachedToViewContainer=!0}detachFromAppRef(){var t;this._appRef=null,ta(this._lView[1],t=this._lView,t[11],2,null,null)}attachToAppRef(t){if(this._attachedToViewContainer)throw new Error(\"This view is already attached to a ViewContainer!\");this._appRef=t}}class oh extends ah{constructor(t){super(t),this._view=t}detectChanges(){oo(this._view)}checkNoChanges(){!function(t){oe(!0);try{oo(t)}finally{oe(!1)}}(this._view)}get context(){return null}}const sh=ch;let lh=(()=>{class t{}return t.__NG_ELEMENT_ID__=sh,t.__ChangeDetectorRef__=!0,t})();function ch(t=!1){return function(t,e,n){if(!n&&ft(t)){const n=Nt(t.index,e);return new ah(n,n)}return 47&t.type?new ah(e[16],e):null}(Qt(),Jt(),t)}const uh=[new th],hh=new rh([new Gu]),dh=new ih(uh),fh=function(){return yh(Qt(),Jt())};let ph=(()=>{class t{}return t.__NG_ELEMENT_ID__=fh,t})();const mh=ph,gh=class extends mh{constructor(t,e,n){super(),this._declarationLView=t,this._declarationTContainer=e,this.elementRef=n}createEmbeddedView(t){const e=this._declarationTContainer.tViews,n=Sa(this._declarationLView,e,t,16,null,e.declTNode,null,null,null,null);n[17]=this._declarationLView[this._declarationTContainer.index];const r=this._declarationLView[19];return null!==r&&(n[19]=r.createEmbeddedView(e)),Ea(e,n,t),new ah(n)}};function yh(t,e){return 4&t.type?new gh(e,t,Fu(t,e)):null}class vh{}class _h{}const bh=function(){return Sh(Qt(),Jt())};let xh=(()=>{class t{}return t.__NG_ELEMENT_ID__=bh,t})();const wh=xh,kh=class extends wh{constructor(t,e,n){super(),this._lContainer=t,this._hostTNode=e,this._hostLView=n}get element(){return Fu(this._hostTNode,this._hostLView)}get injector(){return new fn(this._hostTNode,this._hostLView)}get parentInjector(){const t=tn(this._hostTNode,this._hostLView);if(We(t)){const e=Ge(t,this._hostLView),n=qe(t);return new fn(e[1].data[n+8],e)}return new fn(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){const e=Mh(this._lContainer);return null!==e&&e[t]||null}get length(){return this._lContainer.length-ct}createEmbeddedView(t,e,n){const r=t.createEmbeddedView(e||{});return this.insert(r,n),r}createComponent(t,e,n,r,i){const a=n||this.parentInjector;if(!i&&null==t.ngModule&&a){const t=a.get(vh,null);t&&(i=t)}const o=t.create(a,r,void 0,i);return this.insert(o.hostView,e),o}insert(t,e){const n=t._lView,r=n[1];if(ht(n[3])){const e=this.indexOf(t);if(-1!==e)this.detach(e);else{const e=n[3],r=new kh(e,e[6],e[3]);r.detach(r.indexOf(t))}}const i=this._adjustIndex(e),a=this._lContainer;!function(t,e,n,r){const i=ct+r,a=n.length;r>0&&(n[i-1][4]=e),r<a-ct?(e[4]=n[i],In(n,ct+r,e)):(n.push(e),e[4]=null),e[3]=n;const o=e[17];null!==o&&n!==o&&function(t,e){const n=t[9];e[16]!==e[3][3][16]&&(t[2]=!0),null===n?t[9]=[e]:n.push(e)}(o,e);const s=e[19];null!==s&&s.insertView(t),e[2]|=128}(r,n,a,i);const o=function t(e,n){const r=ct+e+1;if(r<n.length){const e=n[r],i=e[1].firstChild;if(null!==i)return function e(n,r){if(null!==r){const i=r.type;if(3&i)return zt(r,n);if(4&i)return t(-1,n[r.index]);if(8&i){const i=r.child;if(null!==i)return e(n,i);{const e=n[r.index];return ht(e)?t(-1,e):Pt(e)}}if(32&i)return Si(r,n)()||Pt(n[r.index]);{const t=n[16],i=t[6],a=Ai(t),o=i.projection[r.projection];return null!=o?e(a,o):e(n,r.next)}}return null}(e,i)}return n[7]}(i,a),s=n[11],l=Wi(s,a[7]);return null!==l&&function(t,e,n,r,i,a){r[0]=i,r[6]=e,ta(t,r,n,1,i,a)}(r,a[6],s,n,l,o),t.attachToViewContainerRef(),In(Th(a),i,t),t}move(t,e){return this.insert(t,e)}indexOf(t){const e=Mh(this._lContainer);return null!==e?e.indexOf(t):-1}remove(t){const e=this._adjustIndex(t,-1),n=ji(this._lContainer,e);n&&(Pn(Th(this._lContainer),e),Fi(n[1],n))}detach(t){const e=this._adjustIndex(t,-1),n=ji(this._lContainer,e);return n&&null!=Pn(Th(this._lContainer),e)?new ah(n):null}_adjustIndex(t,e=0){return null==t?this.length+e:t}};function Mh(t){return t[8]}function Th(t){return t[8]||(t[8]=[])}function Sh(t,e){let n;const r=e[t.index];if(ht(r))n=r;else{let i;if(8&t.type)i=Pt(r);else{const n=e[11];i=n.createComment(\"\");const r=zt(t,e);Hi(n,Wi(n,r),i,function(t,e){return Dt(t)?t.nextSibling(e):e.nextSibling}(n,r),!1)}e[t.index]=n=to(r,e,i,t),ro(e,n)}return new kh(n,t,e)}const Ah={};class Lh extends zu{constructor(t){super(),this.ngModule=t}resolveComponentFactory(t){const e=it(t);return new Oh(e,this.ngModule)}}function Ch(t){const e=[];for(let n in t)t.hasOwnProperty(n)&&e.push({propName:t[n],templateName:n});return e}const Eh=new Tn(\"SCHEDULER_TOKEN\",{providedIn:\"root\",factory:()=>_i});class Oh extends Pu{constructor(t,e){super(),this.componentDef=t,this.ngModule=e,this.componentType=t.type,this.selector=t.selectors.map(ma).join(\",\"),this.ngContentSelectors=t.ngContentSelectors?t.ngContentSelectors:[],this.isBoundToModule=!!e}get inputs(){return Ch(this.componentDef.inputs)}get outputs(){return Ch(this.componentDef.outputs)}create(t,e,n,r){const i=(r=r||this.ngModule)?function(t,e){return{get:(n,r,i)=>{const a=t.get(n,Ah,i);return a!==Ah||r===Ah?a:e.get(n,r,i)}}}(t,r.injector):t,a=i.get(Yu,It),o=i.get(Uu,null),s=a.createRenderer(null,this.componentDef),l=this.componentDef.selectors[0][0]||\"div\",c=n?function(t,e,n){if(Dt(t))return t.selectRootElement(e,n===D.ShadowDom);let r=\"string\"==typeof e?t.querySelector(e):e;return r.textContent=\"\",r}(s,n,this.componentDef.encapsulation):Ri(a.createRenderer(null,this.componentDef),l,function(t){const e=t.toLowerCase();return\"svg\"===e?At:\"math\"===e?Lt:null}(l)),u=this.componentDef.onPush?576:528,h={components:[],scheduler:_i,clean:lo,playerHandler:null,flags:0},d=Fa(0,null,null,1,0,null,null,null,null,null),f=Sa(null,d,h,u,null,null,a,s,o,i);let p,m;be(f);try{const t=function(t,e,n,r,i,a){const o=n[1];n[20]=t;const s=Aa(o,20,2,\"#host\",null),l=s.mergedAttrs=e.hostAttrs;null!==l&&(go(s,l,!0),null!==t&&(Be(i,t,l),null!==s.classes&&ra(i,t,s.classes),null!==s.styles&&na(i,t,s.styles)));const c=r.createRenderer(t,e),u=Sa(n,ja(e),null,e.onPush?64:16,n[20],s,r,c,null,null);return o.firstCreatePass&&(en(Ke(s,n),o,e.type),Wa(o,s),Ga(s,n.length,1)),ro(n,u),n[20]=u}(c,this.componentDef,f,a,s);if(c)if(n)Be(s,c,[\"ng-version\",qu.full]);else{const{attrs:t,classes:e}=function(t){const e=[],n=[];let r=1,i=2;for(;r<t.length;){let a=t[r];if(\"string\"==typeof a)2===i?\"\"!==a&&e.push(a,t[++r]):8===i&&n.push(a);else{if(!ua(i))break;i=a}r++}return{attrs:e,classes:n}}(this.componentDef.selectors[0]);t&&Be(s,c,t),e&&e.length>0&&ra(s,c,e.join(\" \"))}if(m=jt(d,lt),void 0!==e){const t=m.projection=[];for(let n=0;n<this.ngContentSelectors.length;n++){const r=e[n];t.push(null!=r?Array.from(r):null)}}p=function(t,e,n,r,i){const a=n[1],o=function(t,e,n){const r=Qt();t.firstCreatePass&&(n.providersResolver&&n.providersResolver(n),Xa(t,r,e,Ca(t,e,1,null),n));const i=un(e,t,r.directiveStart,r);vi(i,e);const a=zt(r,e);return a&&vi(a,e),i}(a,n,e);if(r.components.push(o),t[8]=o,i&&i.forEach(t=>t(o,e)),e.contentQueries){const t=Qt();e.contentQueries(1,o,t.directiveStart)}const s=Qt();return!a.firstCreatePass||null===e.hostBindings&&null===e.hostAttrs||(Ae(s.index),Va(n[1],s,0,s.directiveStart,s.directiveEnd,e),Ua(e,o)),o}(t,this.componentDef,f,h,[Po]),Ea(d,f,null)}finally{Te()}return new Dh(this.componentType,p,Fu(m,f),f,m)}}class Dh extends class{}{constructor(t,e,n,r,i){super(),this.location=n,this._rootLView=r,this._tNode=i,this.instance=e,this.hostView=this.changeDetectorRef=new oh(r),this.componentType=t}get injector(){return new fn(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(t){this.hostView.onDestroy(t)}}function Ih(t,e,n,r){return E(()=>{const i=t;null!==e&&(i.hasOwnProperty(\"decorators\")&&void 0!==i.decorators?i.decorators.push(...e):i.decorators=e),null!==n&&(i.ctorParameters=n),null!==r&&(i.propDecorators=i.hasOwnProperty(\"propDecorators\")&&void 0!==i.propDecorators?Object.assign(Object.assign({},i.propDecorators),r):r)})}const Ph=new Map;class Rh extends vh{constructor(t,e){super(),this._parent=e,this._bootstrapComponents=[],this.injector=this,this.destroyCbs=[],this.componentFactoryResolver=new Lh(this);const n=st(t),r=t[U]||null;r&&Ec(r),this._bootstrapComponents=ki(n.bootstrap),this._r3Injector=To(t,e,[{provide:vh,useValue:this},{provide:zu,useValue:this.componentFactoryResolver}],u(t)),this._r3Injector._resolveInjectorDefTypes(),this.instance=this.get(t)}get(t,e=Io.THROW_IF_NOT_FOUND,n=S.Default){return t===Io||t===vh||t===yo?this:this._r3Injector.get(t,e,n)}destroy(){const t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(t=>t()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}}class zh extends _h{constructor(t){super(),this.moduleType=t,null!==st(t)&&function(t){const e=new Set;!function t(n){const r=st(n,!0),i=r.id;null!==i&&(function(t,e,n){if(e&&e!==n)throw new Error(`Duplicate module registered for ${t} - ${u(e)} vs ${u(e.name)}`)}(i,Ph.get(i),n),Ph.set(i,n));const a=ki(r.imports);for(const o of a)e.has(o)||(e.add(o),t(o))}(t)}(t)}create(t){return new Rh(this.moduleType,t)}}function jh(t,e,n){const r=se()+t,i=Jt();return i[r]===ga?Zo(i,r,n?e.call(n):e()):Jo(i,r)}function Fh(t,e,n,r){return Xh(Jt(),se(),t,e,n,r)}function Nh(t,e,n,r,i){return Zh(Jt(),se(),t,e,n,r,i)}function Bh(t,e,n,r,i,a){return Jh(Jt(),se(),t,e,n,r,i,a)}function Yh(t,e,n,r,i,a,o){return Kh(Jt(),se(),t,e,n,r,i,a,o)}function Hh(t,e,n,r,i,a,o,s){const l=se()+t,c=Jt(),u=ts(c,l,n,r,i,a);return Ko(c,l+4,o)||u?Zo(c,l+5,s?e.call(s,n,r,i,a,o):e(n,r,i,a,o)):Jo(c,l+5)}function Vh(t,e,n,r,i,a,o,s,l){const c=se()+t,u=Jt(),h=ts(u,c,n,r,i,a);return $o(u,c+4,o,s)||h?Zo(u,c+6,l?e.call(l,n,r,i,a,o,s):e(n,r,i,a,o,s)):Jo(u,c+6)}function Uh(t,e,n,r,i,a,o,s,l,c){const u=se()+t,h=Jt();let d=ts(h,u,n,r,i,a);return Qo(h,u+4,o,s,l)||d?Zo(h,u+7,c?e.call(c,n,r,i,a,o,s,l):e(n,r,i,a,o,s,l)):Jo(h,u+7)}function Wh(t,e,n,r,i,a,o,s,l,c,u){const h=se()+t,d=Jt(),f=ts(d,h,n,r,i,a);return ts(d,h+4,o,s,l,c)||f?Zo(d,h+8,u?e.call(u,n,r,i,a,o,s,l,c):e(n,r,i,a,o,s,l,c)):Jo(d,h+8)}function qh(t,e,n,r){return $h(Jt(),se(),t,e,n,r)}function Gh(t,e){const n=t[e];return n===ga?void 0:n}function Xh(t,e,n,r,i,a){const o=e+n;return Ko(t,o,i)?Zo(t,o+1,a?r.call(a,i):r(i)):Gh(t,o+1)}function Zh(t,e,n,r,i,a,o){const s=e+n;return $o(t,s,i,a)?Zo(t,s+2,o?r.call(o,i,a):r(i,a)):Gh(t,s+2)}function Jh(t,e,n,r,i,a,o,s){const l=e+n;return Qo(t,l,i,a,o)?Zo(t,l+3,s?r.call(s,i,a,o):r(i,a,o)):Gh(t,l+3)}function Kh(t,e,n,r,i,a,o,s,l){const c=e+n;return ts(t,c,i,a,o,s)?Zo(t,c+4,l?r.call(l,i,a,o,s):r(i,a,o,s)):Gh(t,c+4)}function $h(t,e,n,r,i,a){let o=e+n,s=!1;for(let l=0;l<i.length;l++)Ko(t,o++,i[l])&&(s=!0);return s?Zo(t,o,r.apply(a,i)):Gh(t,o)}function Qh(t,e){const n=Kt();let r;const i=t+lt;n.firstCreatePass?(r=function(t,e){if(e)for(let n=e.length-1;n>=0;n--){const r=e[n];if(t===r.name)return r}throw new yt(\"302\",`The pipe '${t}' could not be found!`)}(e,n.pipeRegistry),n.data[i]=r,r.onDestroy&&(n.destroyHooks||(n.destroyHooks=[])).push(i,r.onDestroy)):r=n.data[i];const a=r.factory||(r.factory=gt(r.type)),o=L(ws);try{const t=Ze(!1),e=a();return Ze(t),function(t,e,n,r){n>=t.data.length&&(t.data[n]=null,t.blueprint[n]=null),e[n]=r}(n,Jt(),i,e),e}finally{L(o)}}function td(t,e,n){const r=t+lt,i=Jt(),a=Ft(i,r);return od(i,ad(i,r)?Xh(i,se(),e,a.transform,n,a):a.transform(n))}function ed(t,e,n,r){const i=t+lt,a=Jt(),o=Ft(a,i);return od(a,ad(a,i)?Zh(a,se(),e,o.transform,n,r,o):o.transform(n,r))}function nd(t,e,n,r,i){const a=t+lt,o=Jt(),s=Ft(o,a);return od(o,ad(o,a)?Jh(o,se(),e,s.transform,n,r,i,s):s.transform(n,r,i))}function rd(t,e,n,r,i,a){const o=t+lt,s=Jt(),l=Ft(s,o);return od(s,ad(s,o)?Kh(s,se(),e,l.transform,n,r,i,a,l):l.transform(n,r,i,a))}function id(t,e,n){const r=t+lt,i=Jt(),a=Ft(i,r);return od(i,ad(i,r)?$h(i,se(),e,a.transform,n,a):a.transform.apply(a,n))}function ad(t,e){return t[1].data[e].pure}function od(t,e){return qo.isWrapped(e)&&(e=qo.unwrap(e),t[le()]=ga),e}const sd=class extends r.a{constructor(t=!1){super(),this.__isAsync=t}emit(t){super.next(t)}subscribe(t,e,n){let r,a=t=>null,o=()=>null;t&&\"object\"==typeof t?(r=this.__isAsync?e=>{setTimeout(()=>t.next(e))}:e=>{t.next(e)},t.error&&(a=this.__isAsync?e=>{setTimeout(()=>t.error(e))}:e=>{t.error(e)}),t.complete&&(o=this.__isAsync?()=>{setTimeout(()=>t.complete())}:()=>{t.complete()})):(r=this.__isAsync?e=>{setTimeout(()=>t(e))}:e=>{t(e)},e&&(a=this.__isAsync?t=>{setTimeout(()=>e(t))}:t=>{e(t)}),n&&(o=this.__isAsync?()=>{setTimeout(()=>n())}:()=>{n()}));const s=super.subscribe(r,a,o);return t instanceof i.a&&t.add(s),s}};function ld(){return this._results[Wo()]()}class cd{constructor(){this.dirty=!0,this._results=[],this.changes=new sd,this.length=0;const t=Wo(),e=cd.prototype;e[t]||(e[t]=ld)}map(t){return this._results.map(t)}filter(t){return this._results.filter(t)}find(t){return this._results.find(t)}reduce(t,e){return this._results.reduce(t,e)}forEach(t){this._results.forEach(t)}some(t){return this._results.some(t)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(t){this._results=On(t),this.dirty=!1,this.length=this._results.length,this.last=this._results[this.length-1],this.first=this._results[0]}notifyOnChanges(){this.changes.emit(this)}setDirty(){this.dirty=!0}destroy(){this.changes.complete(),this.changes.unsubscribe()}}class ud{constructor(t){this.queryList=t,this.matches=null}clone(){return new ud(this.queryList)}setDirty(){this.queryList.setDirty()}}class hd{constructor(t=[]){this.queries=t}createEmbeddedView(t){const e=t.queries;if(null!==e){const n=null!==t.contentQueries?t.contentQueries[0]:e.length,r=[];for(let t=0;t<n;t++){const n=e.getByIndex(t);r.push(this.queries[n.indexInDeclarationView].clone())}return new hd(r)}return null}insertView(t){this.dirtyQueriesWithMatches(t)}detachView(t){this.dirtyQueriesWithMatches(t)}dirtyQueriesWithMatches(t){for(let e=0;e<this.queries.length;e++)null!==Ld(t,e).matches&&this.queries[e].setDirty()}}class dd{constructor(t,e,n,r=null){this.predicate=t,this.descendants=e,this.isStatic=n,this.read=r}}class fd{constructor(t=[]){this.queries=t}elementStart(t,e){for(let n=0;n<this.queries.length;n++)this.queries[n].elementStart(t,e)}elementEnd(t){for(let e=0;e<this.queries.length;e++)this.queries[e].elementEnd(t)}embeddedTView(t){let e=null;for(let n=0;n<this.length;n++){const r=null!==e?e.length:0,i=this.getByIndex(n).embeddedTView(t,r);i&&(i.indexInDeclarationView=n,null!==e?e.push(i):e=[i])}return null!==e?new fd(e):null}template(t,e){for(let n=0;n<this.queries.length;n++)this.queries[n].template(t,e)}getByIndex(t){return this.queries[t]}get length(){return this.queries.length}track(t){this.queries.push(t)}}class pd{constructor(t,e=-1){this.metadata=t,this.matches=null,this.indexInDeclarationView=-1,this.crossesNgTemplate=!1,this._appliesToNextNode=!0,this._declarationNodeIndex=e}elementStart(t,e){this.isApplyingToNode(e)&&this.matchTNode(t,e)}elementEnd(t){this._declarationNodeIndex===t.index&&(this._appliesToNextNode=!1)}template(t,e){this.elementStart(t,e)}embeddedTView(t,e){return this.isApplyingToNode(t)?(this.crossesNgTemplate=!0,this.addMatch(-t.index,e),new pd(this.metadata)):null}isApplyingToNode(t){if(this._appliesToNextNode&&!1===this.metadata.descendants){const e=this._declarationNodeIndex;let n=t.parent;for(;null!==n&&8&n.type&&n.index!==e;)n=n.parent;return e===(null!==n?n.index:-1)}return this._appliesToNextNode}matchTNode(t,e){const n=this.metadata.predicate;if(Array.isArray(n))for(let r=0;r<n.length;r++){const i=n[r];this.matchTNodeWithReadOption(t,e,md(e,i)),this.matchTNodeWithReadOption(t,e,cn(e,t,i,!1,!1))}else n===ph?4&e.type&&this.matchTNodeWithReadOption(t,e,-1):this.matchTNodeWithReadOption(t,e,cn(e,t,n,!1,!1))}matchTNodeWithReadOption(t,e,n){if(null!==n){const r=this.metadata.read;if(null!==r)if(r===Bu||r===xh||r===ph&&4&e.type)this.addMatch(e.index,-2);else{const n=cn(e,t,r,!1,!1);null!==n&&this.addMatch(e.index,n)}else this.addMatch(e.index,n)}}addMatch(t,e){null===this.matches?this.matches=[t,e]:this.matches.push(t,e)}}function md(t,e){const n=t.localNames;if(null!==n)for(let r=0;r<n.length;r+=2)if(n[r]===e)return n[r+1];return null}function gd(t,e,n,r){return-1===n?function(t,e){return 11&t.type?Fu(t,e):4&t.type?yh(t,e):null}(e,t):-2===n?function(t,e,n){return n===Bu?Fu(e,t):n===ph?yh(e,t):n===xh?Sh(e,t):void 0}(t,e,r):un(t,t[1],n,e)}function yd(t,e,n,r){const i=e[19].queries[r];if(null===i.matches){const r=t.data,a=n.matches,o=[];for(let t=0;t<a.length;t+=2){const i=a[t];o.push(i<0?null:gd(e,r[i],a[t+1],n.metadata.read))}i.matches=o}return i.matches}function vd(t){const e=Jt(),n=Kt(),r=ge();ye(r+1);const i=Ld(n,r);if(t.dirty&&Yt(e)===i.metadata.isStatic){if(null===i.matches)t.reset([]);else{const a=i.crossesNgTemplate?function t(e,n,r,i){const a=e.queries.getByIndex(r),o=a.matches;if(null!==o){const s=yd(e,n,a,r);for(let e=0;e<o.length;e+=2){const r=o[e];if(r>0)i.push(s[e/2]);else{const a=o[e+1],s=n[-r];for(let e=ct;e<s.length;e++){const n=s[e];n[17]===n[3]&&t(n[1],n,a,i)}if(null!==s[9]){const e=s[9];for(let n=0;n<e.length;n++){const r=e[n];t(r[1],r,a,i)}}}}}return i}(n,e,r,[]):yd(n,e,i,r);t.reset(a),t.notifyOnChanges()}return!0}return!1}function _d(t,e,n){xd(Kt(),Jt(),t,e,n,!0)}function bd(t,e,n){xd(Kt(),Jt(),t,e,n,!1)}function xd(t,e,n,r,i,a){t.firstCreatePass&&(Ad(t,new dd(n,r,a,i),-1),a&&(t.staticViewQueries=!0)),Sd(t,e)}function wd(t,e,n,r){Md(Kt(),Jt(),e,n,r,!1,Qt(),t)}function kd(t,e,n,r){Md(Kt(),Jt(),e,n,r,!0,Qt(),t)}function Md(t,e,n,r,i,a,o,s){t.firstCreatePass&&(Ad(t,new dd(n,r,a,i),o.index),function(t,e){const n=t.contentQueries||(t.contentQueries=[]);e!==(n.length?n[n.length-1]:-1)&&n.push(t.queries.length-1,e)}(t,s),a&&(t.staticContentQueries=!0)),Sd(t,e)}function Td(){return t=Jt(),e=ge(),t[19].queries[e].queryList;var t,e}function Sd(t,e){const n=new cd;Na(t,e,n,n.destroy),null===e[19]&&(e[19]=new hd),e[19].queries.push(new ud(n))}function Ad(t,e,n){null===t.queries&&(t.queries=new fd),t.queries.track(new pd(e,n))}function Ld(t,e){return t.queries.getByIndex(e)}function Cd(t,e){return yh(t,e)}function Ed(t=S.Default){const e=ch(!0);if(null!=e||t&S.Optional)return e;bt(\"ChangeDetectorRef\")}const Od=(()=>({\"\\u0275\\u0275attribute\":es,\"\\u0275\\u0275attributeInterpolate1\":hs,\"\\u0275\\u0275attributeInterpolate2\":ds,\"\\u0275\\u0275attributeInterpolate3\":fs,\"\\u0275\\u0275attributeInterpolate4\":ps,\"\\u0275\\u0275attributeInterpolate5\":ms,\"\\u0275\\u0275attributeInterpolate6\":gs,\"\\u0275\\u0275attributeInterpolate7\":ys,\"\\u0275\\u0275attributeInterpolate8\":vs,\"\\u0275\\u0275attributeInterpolateV\":_s,\"\\u0275\\u0275defineComponent\":X,\"\\u0275\\u0275defineDirective\":nt,\"\\u0275\\u0275defineInjectable\":y,\"\\u0275\\u0275defineInjector\":v,\"\\u0275\\u0275defineNgModule\":Q,\"\\u0275\\u0275definePipe\":rt,\"\\u0275\\u0275directiveInject\":ws,\"\\u0275\\u0275getFactoryOf\":pn,\"\\u0275\\u0275getInheritedFactory\":mn,\"\\u0275\\u0275inject\":ur,\"\\u0275\\u0275injectAttribute\":gn,\"\\u0275\\u0275invalidFactory\":ks,\"\\u0275\\u0275invalidFactoryDep\":hr,\"\\u0275\\u0275injectPipeChangeDetectorRef\":Ed,\"\\u0275\\u0275templateRefExtractor\":Cd,\"\\u0275\\u0275NgOnChangesFeature\":wt,\"\\u0275\\u0275ProvidersFeature\":Iu,\"\\u0275\\u0275CopyDefinitionFeature\":Vo,\"\\u0275\\u0275InheritDefinitionFeature\":zo,\"\\u0275\\u0275nextContext\":Bs,\"\\u0275\\u0275namespaceHTML\":Oe,\"\\u0275\\u0275namespaceMathML\":Ee,\"\\u0275\\u0275namespaceSVG\":Ce,\"\\u0275\\u0275enableBindings\":Xt,\"\\u0275\\u0275disableBindings\":Zt,\"\\u0275\\u0275elementStart\":Ss,\"\\u0275\\u0275elementEnd\":As,\"\\u0275\\u0275element\":Ls,\"\\u0275\\u0275elementContainerStart\":Cs,\"\\u0275\\u0275elementContainerEnd\":Es,\"\\u0275\\u0275elementContainer\":Os,\"\\u0275\\u0275pureFunction0\":jh,\"\\u0275\\u0275pureFunction1\":Fh,\"\\u0275\\u0275pureFunction2\":Nh,\"\\u0275\\u0275pureFunction3\":Bh,\"\\u0275\\u0275pureFunction4\":Yh,\"\\u0275\\u0275pureFunction5\":Hh,\"\\u0275\\u0275pureFunction6\":Vh,\"\\u0275\\u0275pureFunction7\":Uh,\"\\u0275\\u0275pureFunction8\":Wh,\"\\u0275\\u0275pureFunctionV\":qh,\"\\u0275\\u0275getCurrentView\":Ds,\"\\u0275\\u0275restoreView\":$t,\"\\u0275\\u0275listener\":Rs,\"\\u0275\\u0275projection\":Vs,\"\\u0275\\u0275syntheticHostProperty\":pc,\"\\u0275\\u0275syntheticHostListener\":zs,\"\\u0275\\u0275pipeBind1\":td,\"\\u0275\\u0275pipeBind2\":ed,\"\\u0275\\u0275pipeBind3\":nd,\"\\u0275\\u0275pipeBind4\":rd,\"\\u0275\\u0275pipeBindV\":id,\"\\u0275\\u0275projectionDef\":Hs,\"\\u0275\\u0275hostProperty\":fc,\"\\u0275\\u0275property\":Ms,\"\\u0275\\u0275propertyInterpolate\":Us,\"\\u0275\\u0275propertyInterpolate1\":Ws,\"\\u0275\\u0275propertyInterpolate2\":qs,\"\\u0275\\u0275propertyInterpolate3\":Gs,\"\\u0275\\u0275propertyInterpolate4\":Xs,\"\\u0275\\u0275propertyInterpolate5\":Zs,\"\\u0275\\u0275propertyInterpolate6\":Js,\"\\u0275\\u0275propertyInterpolate7\":Ks,\"\\u0275\\u0275propertyInterpolate8\":$s,\"\\u0275\\u0275propertyInterpolateV\":Qs,\"\\u0275\\u0275pipe\":Qh,\"\\u0275\\u0275queryRefresh\":vd,\"\\u0275\\u0275viewQuery\":bd,\"\\u0275\\u0275staticViewQuery\":_d,\"\\u0275\\u0275staticContentQuery\":kd,\"\\u0275\\u0275loadQuery\":Td,\"\\u0275\\u0275contentQuery\":wd,\"\\u0275\\u0275reference\":xs,\"\\u0275\\u0275classMap\":gl,\"\\u0275\\u0275classMapInterpolate1\":Bl,\"\\u0275\\u0275classMapInterpolate2\":Yl,\"\\u0275\\u0275classMapInterpolate3\":Hl,\"\\u0275\\u0275classMapInterpolate4\":Vl,\"\\u0275\\u0275classMapInterpolate5\":Ul,\"\\u0275\\u0275classMapInterpolate6\":Wl,\"\\u0275\\u0275classMapInterpolate7\":ql,\"\\u0275\\u0275classMapInterpolate8\":Gl,\"\\u0275\\u0275classMapInterpolateV\":Xl,\"\\u0275\\u0275styleMap\":pl,\"\\u0275\\u0275styleMapInterpolate1\":Zl,\"\\u0275\\u0275styleMapInterpolate2\":Jl,\"\\u0275\\u0275styleMapInterpolate3\":Kl,\"\\u0275\\u0275styleMapInterpolate4\":$l,\"\\u0275\\u0275styleMapInterpolate5\":Ql,\"\\u0275\\u0275styleMapInterpolate6\":tc,\"\\u0275\\u0275styleMapInterpolate7\":ec,\"\\u0275\\u0275styleMapInterpolate8\":nc,\"\\u0275\\u0275styleMapInterpolateV\":rc,\"\\u0275\\u0275styleProp\":dl,\"\\u0275\\u0275stylePropInterpolate1\":ic,\"\\u0275\\u0275stylePropInterpolate2\":ac,\"\\u0275\\u0275stylePropInterpolate3\":oc,\"\\u0275\\u0275stylePropInterpolate4\":sc,\"\\u0275\\u0275stylePropInterpolate5\":lc,\"\\u0275\\u0275stylePropInterpolate6\":cc,\"\\u0275\\u0275stylePropInterpolate7\":uc,\"\\u0275\\u0275stylePropInterpolate8\":hc,\"\\u0275\\u0275stylePropInterpolateV\":dc,\"\\u0275\\u0275classProp\":fl,\"\\u0275\\u0275advance\":ya,\"\\u0275\\u0275template\":bs,\"\\u0275\\u0275text\":Cl,\"\\u0275\\u0275textInterpolate\":El,\"\\u0275\\u0275textInterpolate1\":Ol,\"\\u0275\\u0275textInterpolate2\":Dl,\"\\u0275\\u0275textInterpolate3\":Il,\"\\u0275\\u0275textInterpolate4\":Pl,\"\\u0275\\u0275textInterpolate5\":Rl,\"\\u0275\\u0275textInterpolate6\":zl,\"\\u0275\\u0275textInterpolate7\":jl,\"\\u0275\\u0275textInterpolate8\":Fl,\"\\u0275\\u0275textInterpolateV\":Nl,\"\\u0275\\u0275i18n\":xu,\"\\u0275\\u0275i18nAttributes\":wu,\"\\u0275\\u0275i18nExp\":ku,\"\\u0275\\u0275i18nStart\":_u,\"\\u0275\\u0275i18nEnd\":bu,\"\\u0275\\u0275i18nApply\":Mu,\"\\u0275\\u0275i18nPostprocess\":Tu,\"\\u0275\\u0275resolveWindow\":bi,\"\\u0275\\u0275resolveDocument\":xi,\"\\u0275\\u0275resolveBody\":wi,\"\\u0275\\u0275setComponentScope\":Z,\"\\u0275\\u0275setNgModuleScope\":tt,\"\\u0275\\u0275sanitizeHtml\":ri,\"\\u0275\\u0275sanitizeStyle\":ii,\"\\u0275\\u0275sanitizeResourceUrl\":oi,\"\\u0275\\u0275sanitizeScript\":si,\"\\u0275\\u0275sanitizeUrl\":ai,\"\\u0275\\u0275sanitizeUrlOrResourceUrl\":hi,\"\\u0275\\u0275trustConstantHtml\":li,\"\\u0275\\u0275trustConstantScript\":ci,\"\\u0275\\u0275trustConstantResourceUrl\":ui}))();const Dd=[],Id=[];let Pd=!1;function Rd(t){return Array.isArray(t)?t.every(Rd):!!p(t)}function zd(t,e){const n=On(e.declarations||Dd),r=Fd(t);n.forEach(e=>{e.hasOwnProperty(B)?jd(it(e),r):e.hasOwnProperty(Y)||e.hasOwnProperty(H)||(e.ngSelectorScope=t)})}function jd(t,e){t.directiveDefs=()=>Array.from(e.compilation.directives).map(t=>t.hasOwnProperty(B)?it(t):at(t)).filter(t=>!!t),t.pipeDefs=()=>Array.from(e.compilation.pipes).map(t=>ot(t)),t.schemas=e.schemas,t.tView=null}function Fd(t){if(!Bd(t))throw new Error(t.name+\" does not have a module def (\\u0275mod property)\");const e=st(t);if(null!==e.transitiveCompileScopes)return e.transitiveCompileScopes;const n={schemas:e.schemas||null,compilation:{directives:new Set,pipes:new Set},exported:{directives:new Set,pipes:new Set}};return ki(e.imports).forEach(t=>{const e=t;if(!Bd(e))throw new Error(`Importing ${e.name} which does not have a \\u0275mod property`);const r=Fd(e);r.exported.directives.forEach(t=>n.compilation.directives.add(t)),r.exported.pipes.forEach(t=>n.compilation.pipes.add(t))}),ki(e.declarations).forEach(t=>{ot(t)?n.compilation.pipes.add(t):n.compilation.directives.add(t)}),ki(e.exports).forEach(t=>{const e=t;if(Bd(e)){const t=Fd(e);t.exported.directives.forEach(t=>{n.compilation.directives.add(t),n.exported.directives.add(t)}),t.exported.pipes.forEach(t=>{n.compilation.pipes.add(t),n.exported.pipes.add(t)})}else ot(e)?n.exported.pipes.add(e):n.exported.directives.add(e)}),e.transitiveCompileScopes=n,n}function Nd(t){return function(t){return void 0!==t.ngModule}(t)?t.ngModule:t}function Bd(t){return!!st(t)}let Yd=0;function Hd(t,e){let n=null;Ud(t,e||{}),Object.defineProperty(t,Y,{get:()=>{if(null===n){const r=Vd(t,e||{});n=Ln().compileDirective(Od,r.sourceMapUrl,r.metadata)}return n},configurable:!1})}function Vd(t,e){const n=t&&t.name,r=`ng:///${n}/\\u0275dir.js`,i=Ln(),a=qd(t,e);return a.typeSourceSpan=i.createParseSourceSpan(\"Directive\",n,r),a.usesInheritance&&Gd(t),{metadata:a,sourceMapUrl:r}}function Ud(t,e){let n=null;Object.defineProperty(t,W,{get:()=>{if(null===n){const r=Vd(t,e),i=Ln();n=i.compileFactory(Od,`ng:///${t.name}/\\u0275fac.js`,Object.assign(Object.assign({},r.metadata),{injectFn:\"directiveInject\",target:i.R3FactoryTarget.Directive}))}return n},configurable:!1})}function Wd(t){return Object.getPrototypeOf(t.prototype)===Object.prototype}function qd(t,e){const n=$n(),r=n.ownPropMetadata(t);return{name:t.name,type:t,typeArgumentCount:0,selector:void 0!==e.selector?e.selector:null,deps:Qn(t),host:e.host||F,propMetadata:r,inputs:e.inputs||N,outputs:e.outputs||N,queries:Zd(t,r,Jd),lifecycle:{usesOnChanges:n.hasLifecycleHook(t,\"ngOnChanges\")},typeSourceSpan:null,usesInheritance:!Wd(t),exportAs:(i=e.exportAs,void 0===i?null:Qd(i)),providers:e.providers||null,viewQueries:Zd(t,r,Kd)};var i}function Gd(t){const e=Object.prototype;let n=Object.getPrototypeOf(t.prototype).constructor;for(;n&&n!==e;)at(n)||it(n)||!ef(n)||Hd(n,null),n=Object.getPrototypeOf(n)}function Xd(t,e){return{propertyName:t,predicate:(n=e.selector,\"string\"==typeof n?Qd(n):p(n)),descendants:e.descendants,first:e.first,read:e.read?e.read:null,static:!!e.static};var n}function Zd(t,e,n){const r=[];for(const i in e)if(e.hasOwnProperty(i)){const a=e[i];a.forEach(e=>{if(n(e)){if(!e.selector)throw new Error(`Can't construct a query for the property \"${i}\" of \"${_t(t)}\" since the query selector wasn't defined.`);if(a.some($d))throw new Error(\"Cannot combine @Input decorators with query decorators\");r.push(Xd(i,e))}})}return r}function Jd(t){const e=t.ngMetadataName;return\"ContentChild\"===e||\"ContentChildren\"===e}function Kd(t){const e=t.ngMetadataName;return\"ViewChild\"===e||\"ViewChildren\"===e}function $d(t){return\"Input\"===t.ngMetadataName}function Qd(t){return t.split(\",\").map(t=>t.trim())}const tf=[\"ngOnChanges\",\"ngOnInit\",\"ngOnDestroy\",\"ngDoCheck\",\"ngAfterViewInit\",\"ngAfterViewChecked\",\"ngAfterContentInit\",\"ngAfterContentChecked\"];function ef(t){const e=$n();if(tf.some(n=>e.hasLifecycleHook(t,n)))return!0;const n=e.propMetadata(t);for(const r in n){const t=n[r];for(let e=0;e<t.length;e++){const n=t[e],r=n.ngMetadataName;if($d(n)||Jd(n)||Kd(n)||\"Output\"===r||\"HostBinding\"===r||\"HostListener\"===r)return!0}}return!1}function nf(t,e){return{type:t,typeArgumentCount:0,name:t.name,deps:Qn(t),pipeName:e.name,pure:void 0===e.pure||e.pure}}const rf=bn(\"Directive\",(t={})=>t,void 0,void 0,(t,e)=>uf(t,e)),af=bn(\"Component\",(t={})=>Object.assign({changeDetection:O.Default},t),rf,void 0,(t,e)=>cf(t,e)),of=bn(\"Pipe\",t=>Object.assign({pure:!0},t),void 0,void 0,(t,e)=>hf(t,e)),sf=kn(\"Input\",t=>({bindingPropertyName:t})),lf=kn(\"Output\",t=>({bindingPropertyName:t})),cf=function(t,e){let n=null;!function(t,e){nr(e)&&(tr.set(t,e),er.add(t))}(t,e),Ud(t,e),Object.defineProperty(t,B,{get:()=>{if(null===n){const r=Ln();if(nr(e)){const n=[`Component '${t.name}' is not resolved:`];throw e.templateUrl&&n.push(\" - templateUrl: \"+e.templateUrl),e.styleUrls&&e.styleUrls.length&&n.push(\" - styleUrls: \"+JSON.stringify(e.styleUrls)),n.push(\"Did you run and wait for 'resolveComponentResources()'?\"),new Error(n.join(\"\\n\"))}const i=null;let a=e.preserveWhitespaces;void 0===a&&(a=null!==i&&void 0!==i.preserveWhitespaces&&i.preserveWhitespaces);let o=e.encapsulation;void 0===o&&(o=null!==i&&void 0!==i.defaultEncapsulation?i.defaultEncapsulation:D.Emulated);const s=e.templateUrl||`ng:///${t.name}/template.html`,l=Object.assign(Object.assign({},qd(t,e)),{typeSourceSpan:r.createParseSourceSpan(\"Component\",t.name,s),template:e.template||\"\",preserveWhitespaces:a,styles:e.styles||N,animations:e.animations,directives:[],changeDetection:e.changeDetection,pipes:new Map,encapsulation:o,interpolation:e.interpolation,viewProviders:e.viewProviders||null});Yd++;try{l.usesInheritance&&Gd(t),n=r.compileComponent(Od,s,l)}finally{Yd--}if(0===Yd&&function(){if(!Pd){Pd=!0;try{for(let t=Id.length-1;t>=0;t--){const{moduleType:e,ngModule:n}=Id[t];n.declarations&&n.declarations.every(Rd)&&(Id.splice(t,1),zd(e,n))}}finally{Pd=!1}}}(),void 0!==t.ngSelectorScope){const e=Fd(t.ngSelectorScope);jd(n,e)}}return n},configurable:!1})},uf=Hd,hf=function(t,e){let n=null,r=null;Object.defineProperty(t,W,{get:()=>{if(null===r){const n=nf(t,e),i=Ln();r=i.compileFactory(Od,`ng:///${n.name}/\\u0275fac.js`,Object.assign(Object.assign({},n),{injectFn:\"directiveInject\",target:i.R3FactoryTarget.Pipe}))}return r},configurable:!1}),Object.defineProperty(t,H,{get:()=>{if(null===n){const r=nf(t,e);n=Ln().compilePipe(Od,`ng:///${r.name}/\\u0275pipe.js`,r)}return n},configurable:!1})},df=bn(\"NgModule\",t=>t,void 0,void 0,(t,e)=>ff(t,e)),ff=function(t,e={}){!function(t,e,n=!1){const r=On(e.declarations||Dd);let i=null;Object.defineProperty(t,V,{configurable:!0,get:()=>(null===i&&(i=Ln().compileNgModule(Od,`ng:///${t.name}/\\u0275mod.js`,{type:t,bootstrap:On(e.bootstrap||Dd).map(p),declarations:r.map(p),imports:On(e.imports||Dd).map(p).map(Nd),exports:On(e.exports||Dd).map(p).map(Nd),schemas:e.schemas?On(e.schemas):null,id:e.id||null}),i.schemas||(i.schemas=[])),i)});let a=null;Object.defineProperty(t,k,{get:()=>{if(null===a){const n={name:t.name,type:t,deps:Qn(t),providers:e.providers||Dd,imports:[(e.imports||Dd).map(p),(e.exports||Dd).map(p)]};a=Ln().compileInjector(Od,`ng:///${t.name}/\\u0275inj.js`,n)}return a},configurable:!1})}(t,e),function(t,e){Id.push({moduleType:t,ngModule:e})}(t,e)},pf=new Tn(\"Application Initializer\");let mf=(()=>{class t{constructor(t){this.appInits=t,this.resolve=ju,this.reject=ju,this.initialized=!1,this.done=!1,this.donePromise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}runInitializers(){if(this.initialized)return;const t=[],e=()=>{this.done=!0,this.resolve()};if(this.appInits)for(let n=0;n<this.appInits.length;n++){const e=this.appInits[n]();Is(e)&&t.push(e)}Promise.all(t).then(()=>{e()}).catch(t=>{this.reject(t)}),0===t.length&&e(),this.initialized=!0}}return t.\\u0275fac=function(e){return new(e||t)(ur(pf,8))},t.\\u0275prov=y({token:t,factory:t.\\u0275fac}),t})();const gf=new Tn(\"AppId\"),yf={provide:gf,useFactory:function(){return`${vf()}${vf()}${vf()}`},deps:[]};function vf(){return String.fromCharCode(97+Math.floor(25*Math.random()))}const _f=new Tn(\"Platform Initializer\"),bf=new Tn(\"Platform ID\"),xf=new Tn(\"appBootstrapListener\");let wf=(()=>{class t{log(t){console.log(t)}warn(t){console.warn(t)}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=y({token:t,factory:t.\\u0275fac}),t})();const kf=new Tn(\"LocaleId\"),Mf=new Tn(\"DefaultCurrencyCode\");class Tf{constructor(t,e){this.ngModuleFactory=t,this.componentFactories=e}}const Sf=function(t){return new zh(t)},Af=Sf,Lf=function(t){return Promise.resolve(Sf(t))},Cf=function(t){const e=Sf(t),n=ki(st(t).declarations).reduce((t,e)=>{const n=it(e);return n&&t.push(new Oh(n)),t},[]);return new Tf(e,n)},Ef=Cf,Of=function(t){return Promise.resolve(Cf(t))};let Df=(()=>{class t{constructor(){this.compileModuleSync=Af,this.compileModuleAsync=Lf,this.compileModuleAndAllComponentsSync=Ef,this.compileModuleAndAllComponentsAsync=Of}clearCache(){}clearCacheFor(t){}getModuleId(t){}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=y({token:t,factory:t.\\u0275fac}),t})();const If=new Tn(\"compilerOptions\"),Pf=(()=>Promise.resolve(0))();function Rf(t){\"undefined\"==typeof Zone?Pf.then(()=>{t&&t.apply(null,null)}):Zone.current.scheduleMicroTask(\"scheduleMicrotask\",t)}class zf{constructor({enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:e=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new sd(!1),this.onMicrotaskEmpty=new sd(!1),this.onStable=new sd(!1),this.onError=new sd(!1),\"undefined\"==typeof Zone)throw new Error(\"In this configuration Angular requires Zone.js\");Zone.assertZonePatched();const n=this;n._nesting=0,n._outer=n._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(n._inner=n._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(n._inner=n._inner.fork(Zone.longStackTraceZoneSpec)),n.shouldCoalesceEventChangeDetection=e,n.lastRequestAnimationFrameId=-1,n.nativeRequestAnimationFrame=function(){let t=j.requestAnimationFrame,e=j.cancelAnimationFrame;if(\"undefined\"!=typeof Zone&&t&&e){const n=t[Zone.__symbol__(\"OriginalDelegate\")];n&&(t=n);const r=e[Zone.__symbol__(\"OriginalDelegate\")];r&&(e=r)}return{nativeRequestAnimationFrame:t,nativeCancelAnimationFrame:e}}().nativeRequestAnimationFrame,function(t){const e=!!t.shouldCoalesceEventChangeDetection&&t.nativeRequestAnimationFrame&&(()=>{!function(t){-1===t.lastRequestAnimationFrameId&&(t.lastRequestAnimationFrameId=t.nativeRequestAnimationFrame.call(j,()=>{t.fakeTopEventTask||(t.fakeTopEventTask=Zone.root.scheduleEventTask(\"fakeTopEventTask\",()=>{t.lastRequestAnimationFrameId=-1,Nf(t),Ff(t)},void 0,()=>{},()=>{})),t.fakeTopEventTask.invoke()}),Nf(t))}(t)});t._inner=t._inner.fork({name:\"angular\",properties:{isAngularZone:!0,maybeDelayChangeDetection:e},onInvokeTask:(n,r,i,a,o,s)=>{try{return Bf(t),n.invokeTask(i,a,o,s)}finally{e&&\"eventTask\"===a.type&&e(),Yf(t)}},onInvoke:(e,n,r,i,a,o,s)=>{try{return Bf(t),e.invoke(r,i,a,o,s)}finally{Yf(t)}},onHasTask:(e,n,r,i)=>{e.hasTask(r,i),n===r&&(\"microTask\"==i.change?(t._hasPendingMicrotasks=i.microTask,Nf(t),Ff(t)):\"macroTask\"==i.change&&(t.hasPendingMacrotasks=i.macroTask))},onHandleError:(e,n,r,i)=>(e.handleError(r,i),t.runOutsideAngular(()=>t.onError.emit(i)),!1)})}(n)}static isInAngularZone(){return!0===Zone.current.get(\"isAngularZone\")}static assertInAngularZone(){if(!zf.isInAngularZone())throw new Error(\"Expected to be in Angular Zone, but it is not!\")}static assertNotInAngularZone(){if(zf.isInAngularZone())throw new Error(\"Expected to not be in Angular Zone, but it is!\")}run(t,e,n){return this._inner.run(t,e,n)}runTask(t,e,n,r){const i=this._inner,a=i.scheduleEventTask(\"NgZoneEvent: \"+r,t,jf,ju,ju);try{return i.runTask(a,e,n)}finally{i.cancelTask(a)}}runGuarded(t,e,n){return this._inner.runGuarded(t,e,n)}runOutsideAngular(t){return this._outer.run(t)}}const jf={};function Ff(t){if(0==t._nesting&&!t.hasPendingMicrotasks&&!t.isStable)try{t._nesting++,t.onMicrotaskEmpty.emit(null)}finally{if(t._nesting--,!t.hasPendingMicrotasks)try{t.runOutsideAngular(()=>t.onStable.emit(null))}finally{t.isStable=!0}}}function Nf(t){t.hasPendingMicrotasks=!!(t._hasPendingMicrotasks||t.shouldCoalesceEventChangeDetection&&-1!==t.lastRequestAnimationFrameId)}function Bf(t){t._nesting++,t.isStable&&(t.isStable=!1,t.onUnstable.emit(null))}function Yf(t){t._nesting--,Ff(t)}class Hf{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new sd,this.onMicrotaskEmpty=new sd,this.onStable=new sd,this.onError=new sd}run(t,e,n){return t.apply(e,n)}runGuarded(t,e,n){return t.apply(e,n)}runOutsideAngular(t){return t()}runTask(t,e,n,r){return t.apply(e,n)}}let Vf=(()=>{class t{constructor(t){this._ngZone=t,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,this._watchAngularEvents(),t.run(()=>{this.taskTrackingZone=\"undefined\"==typeof Zone?null:Zone.current.get(\"TaskTrackingZone\")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{zf.assertNotInAngularZone(),Rf(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error(\"pending async requests below zero\");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())Rf(()=>{for(;0!==this._callbacks.length;){let t=this._callbacks.pop();clearTimeout(t.timeoutId),t.doneCb(this._didWork)}this._didWork=!1});else{let t=this.getPendingTasks();this._callbacks=this._callbacks.filter(e=>!e.updateCb||!e.updateCb(t)||(clearTimeout(e.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(t=>({source:t.source,creationLocation:t.creationLocation,data:t.data})):[]}addCallback(t,e,n){let r=-1;e&&e>0&&(r=setTimeout(()=>{this._callbacks=this._callbacks.filter(t=>t.timeoutId!==r),t(this._didWork,this.getPendingTasks())},e)),this._callbacks.push({doneCb:t,timeoutId:r,updateCb:n})}whenStable(t,e,n){if(n&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is \"zone.js/dist/task-tracking.js\" loaded?');this.addCallback(t,e,n),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}findProviders(t,e,n){return[]}}return t.\\u0275fac=function(e){return new(e||t)(ur(zf))},t.\\u0275prov=y({token:t,factory:t.\\u0275fac}),t})(),Uf=(()=>{class t{constructor(){this._applications=new Map,Xf.addToWindow(this)}registerApplication(t,e){this._applications.set(t,e)}unregisterApplication(t){this._applications.delete(t)}unregisterAllApplications(){this._applications.clear()}getTestability(t){return this._applications.get(t)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(t,e=!0){return Xf.findTestabilityInTree(this,t,e)}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=y({token:t,factory:t.\\u0275fac}),t})();class Wf{addToWindow(t){}findTestabilityInTree(t,e,n){return null}}function qf(t){Xf=t}let Gf,Xf=new Wf,Zf=!0,Jf=!1;function Kf(){return Jf=!0,Zf}function $f(){if(Jf)throw new Error(\"Cannot enable prod mode after platform setup.\");Zf=!1}const Qf=new Tn(\"AllowMultipleToken\");class tp{constructor(t,e){this.name=t,this.token=e}}function ep(t,e,n=[]){const r=\"Platform: \"+e,i=new Tn(r);return(e=[])=>{let a=np();if(!a||a.injector.get(Qf,!1))if(t)t(n.concat(e).concat({provide:i,useValue:!0}));else{const t=n.concat(e).concat({provide:i,useValue:!0},{provide:_o,useValue:\"platform\"});!function(t){if(Gf&&!Gf.destroyed&&!Gf.injector.get(Qf,!1))throw new Error(\"There can be only one platform. Destroy the previous one to create a new one.\");Gf=t.get(rp);const e=t.get(_f,null);e&&e.forEach(t=>t())}(Io.create({providers:t,name:r}))}return function(t){const e=np();if(!e)throw new Error(\"No platform exists!\");if(!e.injector.get(t,null))throw new Error(\"A platform with a different configuration has been created. Please destroy it first.\");return e}(i)}}function np(){return Gf&&!Gf.destroyed?Gf:null}let rp=(()=>{class t{constructor(t){this._injector=t,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(t,e){const n=function(t,e){let n;return n=\"noop\"===t?new Hf:(\"zone.js\"===t?void 0:t)||new zf({enableLongStackTrace:Kf(),shouldCoalesceEventChangeDetection:e}),n}(e?e.ngZone:void 0,e&&e.ngZoneEventCoalescing||!1),r=[{provide:zf,useValue:n}];return n.run(()=>{const e=Io.create({providers:r,parent:this.injector,name:t.moduleType.name}),i=t.create(e),a=i.injector.get(gi,null);if(!a)throw new Error(\"No ErrorHandler. Is platform module (BrowserModule) included?\");return n.runOutsideAngular(()=>{const t=n.onError.subscribe({next:t=>{a.handleError(t)}});i.onDestroy(()=>{op(this._modules,i),t.unsubscribe()})}),function(t,e,n){try{const r=n();return Is(r)?r.catch(n=>{throw e.runOutsideAngular(()=>t.handleError(n)),n}):r}catch(r){throw e.runOutsideAngular(()=>t.handleError(r)),r}}(a,n,()=>{const t=i.injector.get(mf);return t.runInitializers(),t.donePromise.then(()=>(Ec(i.injector.get(kf,Tc)||Tc),this._moduleDoBootstrap(i),i))})})}bootstrapModule(t,e=[]){const n=ip({},e);return function(t,e,n){const r=new zh(n);return Promise.resolve(r)}(0,0,t).then(t=>this.bootstrapModuleFactory(t,n))}_moduleDoBootstrap(t){const e=t.injector.get(ap);if(t._bootstrapComponents.length>0)t._bootstrapComponents.forEach(t=>e.bootstrap(t));else{if(!t.instance.ngDoBootstrap)throw new Error(`The module ${u(t.instance.constructor)} was bootstrapped, but it does not declare \"@NgModule.bootstrap\" components nor a \"ngDoBootstrap\" method. Please define one of these.`);t.instance.ngDoBootstrap(e)}this._modules.push(t)}onDestroy(t){this._destroyListeners.push(t)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new Error(\"The platform has already been destroyed!\");this._modules.slice().forEach(t=>t.destroy()),this._destroyListeners.forEach(t=>t()),this._destroyed=!0}get destroyed(){return this._destroyed}}return t.\\u0275fac=function(e){return new(e||t)(ur(Io))},t.\\u0275prov=y({token:t,factory:t.\\u0275fac}),t})();function ip(t,e){return Array.isArray(e)?e.reduce(ip,t):Object.assign(Object.assign({},t),e)}let ap=(()=>{class t{constructor(t,e,n,r,i,l){this._zone=t,this._console=e,this._injector=n,this._exceptionHandler=r,this._componentFactoryResolver=i,this._initStatus=l,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._stable=!0,this.componentTypes=[],this.components=[],this._onMicrotaskEmptySubscription=this._zone.onMicrotaskEmpty.subscribe({next:()=>{this._zone.run(()=>{this.tick()})}});const c=new a.a(t=>{this._stable=this._zone.isStable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks,this._zone.runOutsideAngular(()=>{t.next(this._stable),t.complete()})}),u=new a.a(t=>{let e;this._zone.runOutsideAngular(()=>{e=this._zone.onStable.subscribe(()=>{zf.assertNotInAngularZone(),Rf(()=>{this._stable||this._zone.hasPendingMacrotasks||this._zone.hasPendingMicrotasks||(this._stable=!0,t.next(!0))})})});const n=this._zone.onUnstable.subscribe(()=>{zf.assertInAngularZone(),this._stable&&(this._stable=!1,this._zone.runOutsideAngular(()=>{t.next(!1)}))});return()=>{e.unsubscribe(),n.unsubscribe()}});this.isStable=Object(o.a)(c,u.pipe(Object(s.a)()))}bootstrap(t,e){if(!this._initStatus.done)throw new Error(\"Cannot bootstrap as there are still asynchronous initializers running. Bootstrap components in the `ngDoBootstrap` method of the root module.\");let n;n=t instanceof Pu?t:this._componentFactoryResolver.resolveComponentFactory(t),this.componentTypes.push(n.componentType);const r=n.isBoundToModule?void 0:this._injector.get(vh),i=n.create(Io.NULL,[],e||n.selector,r),a=i.location.nativeElement,o=i.injector.get(Vf,null),s=o&&i.injector.get(Uf);return o&&s&&s.registerApplication(a,o),i.onDestroy(()=>{this.detachView(i.hostView),op(this.components,i),s&&s.unregisterApplication(a)}),this._loadComponent(i),Kf()&&this._console.log(\"Angular is running in development mode. Call enableProdMode() to enable production mode.\"),i}tick(){if(this._runningTick)throw new Error(\"ApplicationRef.tick is called recursively\");try{this._runningTick=!0;for(let t of this._views)t.detectChanges()}catch(t){this._zone.runOutsideAngular(()=>this._exceptionHandler.handleError(t))}finally{this._runningTick=!1}}attachView(t){const e=t;this._views.push(e),e.attachToAppRef(this)}detachView(t){const e=t;op(this._views,e),e.detachFromAppRef()}_loadComponent(t){this.attachView(t.hostView),this.tick(),this.components.push(t),this._injector.get(xf,[]).concat(this._bootstrapListeners).forEach(e=>e(t))}ngOnDestroy(){this._views.slice().forEach(t=>t.destroy()),this._onMicrotaskEmptySubscription.unsubscribe()}get viewCount(){return this._views.length}}return t.\\u0275fac=function(e){return new(e||t)(ur(zf),ur(wf),ur(Io),ur(gi),ur(zu),ur(mf))},t.\\u0275prov=y({token:t,factory:t.\\u0275fac}),t})();function op(t,e){const n=t.indexOf(e);n>-1&&t.splice(n,1)}class sp{}class lp{}const cp={factoryPathPrefix:\"\",factoryPathSuffix:\".ngfactory\"};let up=(()=>{class t{constructor(t,e){this._compiler=t,this._config=e||cp}load(t){return this.loadAndCompile(t)}loadAndCompile(t){let[e,r]=t.split(\"#\");return void 0===r&&(r=\"default\"),n(\"zn8P\")(e).then(t=>t[r]).then(t=>hp(t,e,r)).then(t=>this._compiler.compileModuleAsync(t))}loadFactory(t){let[e,r]=t.split(\"#\"),i=\"NgFactory\";return void 0===r&&(r=\"default\",i=\"\"),n(\"zn8P\")(this._config.factoryPathPrefix+e+this._config.factoryPathSuffix).then(t=>t[r+i]).then(t=>hp(t,e,r))}}return t.\\u0275fac=function(e){return new(e||t)(ur(Df),ur(lp,8))},t.\\u0275prov=y({token:t,factory:t.\\u0275fac}),t})();function hp(t,e,n){if(!t)throw new Error(`Cannot find '${n}' in '${e}'`);return t}class dp extends lh{}class fp extends dp{}const pp=function(t){return null},mp=ep(null,\"core\",[{provide:bf,useValue:\"unknown\"},{provide:rp,deps:[Io]},{provide:Uf,deps:[]},{provide:wf,deps:[]}]),gp=[{provide:ap,useClass:ap,deps:[zf,wf,Io,gi,zu,mf]},{provide:Eh,deps:[zf],useFactory:function(t){let e=[];return t.onStable.subscribe(()=>{for(;e.length;)e.pop()()}),function(t){e.push(t)}}},{provide:mf,useClass:mf,deps:[[new Gn,pf]]},{provide:Df,useClass:Df,deps:[]},yf,{provide:rh,useFactory:function(){return hh},deps:[]},{provide:ih,useFactory:function(){return dh},deps:[]},{provide:kf,useFactory:function(t){return Ec(t=t||\"undefined\"!=typeof $localize&&$localize.locale||Tc),t},deps:[[new qn(kf),new Gn,new Zn]]},{provide:Mf,useValue:\"USD\"}];let yp=(()=>{class t{constructor(t){}}return t.\\u0275mod=Q({type:t}),t.\\u0275inj=v({factory:function(e){return new(e||t)(ur(ap))},providers:gp}),t})()},fzPg:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"yo\",{months:\"S\\u1eb9\\u0301r\\u1eb9\\u0301_E\\u0300re\\u0300le\\u0300_\\u1eb8r\\u1eb9\\u0300na\\u0300_I\\u0300gbe\\u0301_E\\u0300bibi_O\\u0300ku\\u0300du_Ag\\u1eb9mo_O\\u0300gu\\u0301n_Owewe_\\u1ecc\\u0300wa\\u0300ra\\u0300_Be\\u0301lu\\u0301_\\u1ecc\\u0300p\\u1eb9\\u0300\\u0300\".split(\"_\"),monthsShort:\"S\\u1eb9\\u0301r_E\\u0300rl_\\u1eb8rn_I\\u0300gb_E\\u0300bi_O\\u0300ku\\u0300_Ag\\u1eb9_O\\u0300gu\\u0301_Owe_\\u1ecc\\u0300wa\\u0300_Be\\u0301l_\\u1ecc\\u0300p\\u1eb9\\u0300\\u0300\".split(\"_\"),weekdays:\"A\\u0300i\\u0300ku\\u0301_Aje\\u0301_I\\u0300s\\u1eb9\\u0301gun_\\u1eccj\\u1ecd\\u0301ru\\u0301_\\u1eccj\\u1ecd\\u0301b\\u1ecd_\\u1eb8ti\\u0300_A\\u0300ba\\u0301m\\u1eb9\\u0301ta\".split(\"_\"),weekdaysShort:\"A\\u0300i\\u0300k_Aje\\u0301_I\\u0300s\\u1eb9\\u0301_\\u1eccjr_\\u1eccjb_\\u1eb8ti\\u0300_A\\u0300ba\\u0301\".split(\"_\"),weekdaysMin:\"A\\u0300i\\u0300_Aj_I\\u0300s_\\u1eccr_\\u1eccb_\\u1eb8t_A\\u0300b\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[O\\u0300ni\\u0300 ni] LT\",nextDay:\"[\\u1ecc\\u0300la ni] LT\",nextWeek:\"dddd [\\u1eccs\\u1eb9\\u0300 to\\u0301n'b\\u1ecd] [ni] LT\",lastDay:\"[A\\u0300na ni] LT\",lastWeek:\"dddd [\\u1eccs\\u1eb9\\u0300 to\\u0301l\\u1ecd\\u0301] [ni] LT\",sameElse:\"L\"},relativeTime:{future:\"ni\\u0301 %s\",past:\"%s k\\u1ecdja\\u0301\",s:\"i\\u0300s\\u1eb9ju\\u0301 aaya\\u0301 die\",ss:\"aaya\\u0301 %d\",m:\"i\\u0300s\\u1eb9ju\\u0301 kan\",mm:\"i\\u0300s\\u1eb9ju\\u0301 %d\",h:\"wa\\u0301kati kan\",hh:\"wa\\u0301kati %d\",d:\"\\u1ecdj\\u1ecd\\u0301 kan\",dd:\"\\u1ecdj\\u1ecd\\u0301 %d\",M:\"osu\\u0300 kan\",MM:\"osu\\u0300 %d\",y:\"\\u1ecddu\\u0301n kan\",yy:\"\\u1ecddu\\u0301n %d\"},dayOfMonthOrdinalParse:/\\u1ecdj\\u1ecd\\u0301\\s\\d{1,2}/,ordinal:\"\\u1ecdj\\u1ecd\\u0301 %d\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},gRHU:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return a}));var r=n(\"2fFW\"),i=n(\"NJ4a\");const a={closed:!0,next(t){},error(t){if(r.a.useDeprecatedSynchronousErrorHandling)throw t;Object(i.a)(t)},complete(){}}},gVVK:function(t,e,n){!function(t){\"use strict\";function e(t,e,n,r){var i=t+\" \";switch(n){case\"s\":return e||r?\"nekaj sekund\":\"nekaj sekundami\";case\"ss\":return i+(1===t?e?\"sekundo\":\"sekundi\":2===t?e||r?\"sekundi\":\"sekundah\":t<5?e||r?\"sekunde\":\"sekundah\":\"sekund\");case\"m\":return e?\"ena minuta\":\"eno minuto\";case\"mm\":return i+(1===t?e?\"minuta\":\"minuto\":2===t?e||r?\"minuti\":\"minutama\":t<5?e||r?\"minute\":\"minutami\":e||r?\"minut\":\"minutami\");case\"h\":return e?\"ena ura\":\"eno uro\";case\"hh\":return i+(1===t?e?\"ura\":\"uro\":2===t?e||r?\"uri\":\"urama\":t<5?e||r?\"ure\":\"urami\":e||r?\"ur\":\"urami\");case\"d\":return e||r?\"en dan\":\"enim dnem\";case\"dd\":return i+(1===t?e||r?\"dan\":\"dnem\":2===t?e||r?\"dni\":\"dnevoma\":e||r?\"dni\":\"dnevi\");case\"M\":return e||r?\"en mesec\":\"enim mesecem\";case\"MM\":return i+(1===t?e||r?\"mesec\":\"mesecem\":2===t?e||r?\"meseca\":\"mesecema\":t<5?e||r?\"mesece\":\"meseci\":e||r?\"mesecev\":\"meseci\");case\"y\":return e||r?\"eno leto\":\"enim letom\";case\"yy\":return i+(1===t?e||r?\"leto\":\"letom\":2===t?e||r?\"leti\":\"letoma\":t<5?e||r?\"leta\":\"leti\":e||r?\"let\":\"leti\")}}t.defineLocale(\"sl\",{months:\"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedelja_ponedeljek_torek_sreda_\\u010detrtek_petek_sobota\".split(\"_\"),weekdaysShort:\"ned._pon._tor._sre._\\u010det._pet._sob.\".split(\"_\"),weekdaysMin:\"ne_po_to_sr_\\u010de_pe_so\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD. MM. YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[danes ob] LT\",nextDay:\"[jutri ob] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[v] [nedeljo] [ob] LT\";case 3:return\"[v] [sredo] [ob] LT\";case 6:return\"[v] [soboto] [ob] LT\";case 1:case 2:case 4:case 5:return\"[v] dddd [ob] LT\"}},lastDay:\"[v\\u010deraj ob] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[prej\\u0161njo] [nedeljo] [ob] LT\";case 3:return\"[prej\\u0161njo] [sredo] [ob] LT\";case 6:return\"[prej\\u0161njo] [soboto] [ob] LT\";case 1:case 2:case 4:case 5:return\"[prej\\u0161nji] dddd [ob] LT\"}},sameElse:\"L\"},relativeTime:{future:\"\\u010dez %s\",past:\"pred %s\",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(n(\"wd/R\"))},gekB:function(t,e,n){!function(t){\"use strict\";var e=\"nolla yksi kaksi kolme nelj\\xe4 viisi kuusi seitsem\\xe4n kahdeksan yhdeks\\xe4n\".split(\" \"),n=[\"nolla\",\"yhden\",\"kahden\",\"kolmen\",\"nelj\\xe4n\",\"viiden\",\"kuuden\",e[7],e[8],e[9]];function r(t,r,i,a){var o=\"\";switch(i){case\"s\":return a?\"muutaman sekunnin\":\"muutama sekunti\";case\"ss\":o=a?\"sekunnin\":\"sekuntia\";break;case\"m\":return a?\"minuutin\":\"minuutti\";case\"mm\":o=a?\"minuutin\":\"minuuttia\";break;case\"h\":return a?\"tunnin\":\"tunti\";case\"hh\":o=a?\"tunnin\":\"tuntia\";break;case\"d\":return a?\"p\\xe4iv\\xe4n\":\"p\\xe4iv\\xe4\";case\"dd\":o=a?\"p\\xe4iv\\xe4n\":\"p\\xe4iv\\xe4\\xe4\";break;case\"M\":return a?\"kuukauden\":\"kuukausi\";case\"MM\":o=a?\"kuukauden\":\"kuukautta\";break;case\"y\":return a?\"vuoden\":\"vuosi\";case\"yy\":o=a?\"vuoden\":\"vuotta\"}return function(t,r){return t<10?r?n[t]:e[t]:t}(t,a)+\" \"+o}t.defineLocale(\"fi\",{months:\"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kes\\xe4kuu_hein\\xe4kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu\".split(\"_\"),monthsShort:\"tammi_helmi_maalis_huhti_touko_kes\\xe4_hein\\xe4_elo_syys_loka_marras_joulu\".split(\"_\"),weekdays:\"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai\".split(\"_\"),weekdaysShort:\"su_ma_ti_ke_to_pe_la\".split(\"_\"),weekdaysMin:\"su_ma_ti_ke_to_pe_la\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD.MM.YYYY\",LL:\"Do MMMM[ta] YYYY\",LLL:\"Do MMMM[ta] YYYY, [klo] HH.mm\",LLLL:\"dddd, Do MMMM[ta] YYYY, [klo] HH.mm\",l:\"D.M.YYYY\",ll:\"Do MMM YYYY\",lll:\"Do MMM YYYY, [klo] HH.mm\",llll:\"ddd, Do MMM YYYY, [klo] HH.mm\"},calendar:{sameDay:\"[t\\xe4n\\xe4\\xe4n] [klo] LT\",nextDay:\"[huomenna] [klo] LT\",nextWeek:\"dddd [klo] LT\",lastDay:\"[eilen] [klo] LT\",lastWeek:\"[viime] dddd[na] [klo] LT\",sameElse:\"L\"},relativeTime:{future:\"%s p\\xe4\\xe4st\\xe4\",past:\"%s sitten\",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},gjCT:function(t,e,n){!function(t){\"use strict\";var e={1:\"\\u0661\",2:\"\\u0662\",3:\"\\u0663\",4:\"\\u0664\",5:\"\\u0665\",6:\"\\u0666\",7:\"\\u0667\",8:\"\\u0668\",9:\"\\u0669\",0:\"\\u0660\"},n={\"\\u0661\":\"1\",\"\\u0662\":\"2\",\"\\u0663\":\"3\",\"\\u0664\":\"4\",\"\\u0665\":\"5\",\"\\u0666\":\"6\",\"\\u0667\":\"7\",\"\\u0668\":\"8\",\"\\u0669\":\"9\",\"\\u0660\":\"0\"};t.defineLocale(\"ar-sa\",{months:\"\\u064a\\u0646\\u0627\\u064a\\u0631_\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631_\\u0645\\u0627\\u0631\\u0633_\\u0623\\u0628\\u0631\\u064a\\u0644_\\u0645\\u0627\\u064a\\u0648_\\u064a\\u0648\\u0646\\u064a\\u0648_\\u064a\\u0648\\u0644\\u064a\\u0648_\\u0623\\u063a\\u0633\\u0637\\u0633_\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631_\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631_\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631_\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\".split(\"_\"),monthsShort:\"\\u064a\\u0646\\u0627\\u064a\\u0631_\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631_\\u0645\\u0627\\u0631\\u0633_\\u0623\\u0628\\u0631\\u064a\\u0644_\\u0645\\u0627\\u064a\\u0648_\\u064a\\u0648\\u0646\\u064a\\u0648_\\u064a\\u0648\\u0644\\u064a\\u0648_\\u0623\\u063a\\u0633\\u0637\\u0633_\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631_\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631_\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631_\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\".split(\"_\"),weekdays:\"\\u0627\\u0644\\u0623\\u062d\\u062f_\\u0627\\u0644\\u0625\\u062b\\u0646\\u064a\\u0646_\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621_\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621_\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633_\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629_\\u0627\\u0644\\u0633\\u0628\\u062a\".split(\"_\"),weekdaysShort:\"\\u0623\\u062d\\u062f_\\u0625\\u062b\\u0646\\u064a\\u0646_\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621_\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621_\\u062e\\u0645\\u064a\\u0633_\\u062c\\u0645\\u0639\\u0629_\\u0633\\u0628\\u062a\".split(\"_\"),weekdaysMin:\"\\u062d_\\u0646_\\u062b_\\u0631_\\u062e_\\u062c_\\u0633\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/\\u0635|\\u0645/,isPM:function(t){return\"\\u0645\"===t},meridiem:function(t,e,n){return t<12?\"\\u0635\":\"\\u0645\"},calendar:{sameDay:\"[\\u0627\\u0644\\u064a\\u0648\\u0645 \\u0639\\u0644\\u0649 \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",nextDay:\"[\\u063a\\u062f\\u0627 \\u0639\\u0644\\u0649 \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",nextWeek:\"dddd [\\u0639\\u0644\\u0649 \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",lastDay:\"[\\u0623\\u0645\\u0633 \\u0639\\u0644\\u0649 \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",lastWeek:\"dddd [\\u0639\\u0644\\u0649 \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",sameElse:\"L\"},relativeTime:{future:\"\\u0641\\u064a %s\",past:\"\\u0645\\u0646\\u0630 %s\",s:\"\\u062b\\u0648\\u0627\\u0646\",ss:\"%d \\u062b\\u0627\\u0646\\u064a\\u0629\",m:\"\\u062f\\u0642\\u064a\\u0642\\u0629\",mm:\"%d \\u062f\\u0642\\u0627\\u0626\\u0642\",h:\"\\u0633\\u0627\\u0639\\u0629\",hh:\"%d \\u0633\\u0627\\u0639\\u0627\\u062a\",d:\"\\u064a\\u0648\\u0645\",dd:\"%d \\u0623\\u064a\\u0627\\u0645\",M:\"\\u0634\\u0647\\u0631\",MM:\"%d \\u0623\\u0634\\u0647\\u0631\",y:\"\\u0633\\u0646\\u0629\",yy:\"%d \\u0633\\u0646\\u0648\\u0627\\u062a\"},preparse:function(t){return t.replace(/[\\u0661\\u0662\\u0663\\u0664\\u0665\\u0666\\u0667\\u0668\\u0669\\u0660]/g,(function(t){return n[t]})).replace(/\\u060c/g,\",\")},postformat:function(t){return t.replace(/\\d/g,(function(t){return e[t]})).replace(/,/g,\"\\u060c\")},week:{dow:0,doy:6}})}(n(\"wd/R\"))},h93q:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return a}));var r=n(\"OCth\"),i=n(\"fXoL\");let a=(()=>{class t{transform(t){if(t)switch(t){case r.a.ERROR:return\"error\";case r.a.INFO:return\"notification_important\";case r.a.SUCCESS:return\"check_circle\";case r.a.WARNING:return\"warning\"}}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275pipe=i.Wb({name:\"notifyIcon\",type:t,pure:!0}),t})()},hKrs:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"bg\",{months:\"\\u044f\\u043d\\u0443\\u0430\\u0440\\u0438_\\u0444\\u0435\\u0432\\u0440\\u0443\\u0430\\u0440\\u0438_\\u043c\\u0430\\u0440\\u0442_\\u0430\\u043f\\u0440\\u0438\\u043b_\\u043c\\u0430\\u0439_\\u044e\\u043d\\u0438_\\u044e\\u043b\\u0438_\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442_\\u0441\\u0435\\u043f\\u0442\\u0435\\u043c\\u0432\\u0440\\u0438_\\u043e\\u043a\\u0442\\u043e\\u043c\\u0432\\u0440\\u0438_\\u043d\\u043e\\u0435\\u043c\\u0432\\u0440\\u0438_\\u0434\\u0435\\u043a\\u0435\\u043c\\u0432\\u0440\\u0438\".split(\"_\"),monthsShort:\"\\u044f\\u043d\\u0443_\\u0444\\u0435\\u0432_\\u043c\\u0430\\u0440_\\u0430\\u043f\\u0440_\\u043c\\u0430\\u0439_\\u044e\\u043d\\u0438_\\u044e\\u043b\\u0438_\\u0430\\u0432\\u0433_\\u0441\\u0435\\u043f_\\u043e\\u043a\\u0442_\\u043d\\u043e\\u0435_\\u0434\\u0435\\u043a\".split(\"_\"),weekdays:\"\\u043d\\u0435\\u0434\\u0435\\u043b\\u044f_\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u043b\\u043d\\u0438\\u043a_\\u0432\\u0442\\u043e\\u0440\\u043d\\u0438\\u043a_\\u0441\\u0440\\u044f\\u0434\\u0430_\\u0447\\u0435\\u0442\\u0432\\u044a\\u0440\\u0442\\u044a\\u043a_\\u043f\\u0435\\u0442\\u044a\\u043a_\\u0441\\u044a\\u0431\\u043e\\u0442\\u0430\".split(\"_\"),weekdaysShort:\"\\u043d\\u0435\\u0434_\\u043f\\u043e\\u043d_\\u0432\\u0442\\u043e_\\u0441\\u0440\\u044f_\\u0447\\u0435\\u0442_\\u043f\\u0435\\u0442_\\u0441\\u044a\\u0431\".split(\"_\"),weekdaysMin:\"\\u043d\\u0434_\\u043f\\u043d_\\u0432\\u0442_\\u0441\\u0440_\\u0447\\u0442_\\u043f\\u0442_\\u0441\\u0431\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"D.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY H:mm\",LLLL:\"dddd, D MMMM YYYY H:mm\"},calendar:{sameDay:\"[\\u0414\\u043d\\u0435\\u0441 \\u0432] LT\",nextDay:\"[\\u0423\\u0442\\u0440\\u0435 \\u0432] LT\",nextWeek:\"dddd [\\u0432] LT\",lastDay:\"[\\u0412\\u0447\\u0435\\u0440\\u0430 \\u0432] LT\",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return\"[\\u041c\\u0438\\u043d\\u0430\\u043b\\u0430\\u0442\\u0430] dddd [\\u0432] LT\";case 1:case 2:case 4:case 5:return\"[\\u041c\\u0438\\u043d\\u0430\\u043b\\u0438\\u044f] dddd [\\u0432] LT\"}},sameElse:\"L\"},relativeTime:{future:\"\\u0441\\u043b\\u0435\\u0434 %s\",past:\"\\u043f\\u0440\\u0435\\u0434\\u0438 %s\",s:\"\\u043d\\u044f\\u043a\\u043e\\u043b\\u043a\\u043e \\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u0438\",ss:\"%d \\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u0438\",m:\"\\u043c\\u0438\\u043d\\u0443\\u0442\\u0430\",mm:\"%d \\u043c\\u0438\\u043d\\u0443\\u0442\\u0438\",h:\"\\u0447\\u0430\\u0441\",hh:\"%d \\u0447\\u0430\\u0441\\u0430\",d:\"\\u0434\\u0435\\u043d\",dd:\"%d \\u0434\\u0435\\u043d\\u0430\",w:\"\\u0441\\u0435\\u0434\\u043c\\u0438\\u0446\\u0430\",ww:\"%d \\u0441\\u0435\\u0434\\u043c\\u0438\\u0446\\u0438\",M:\"\\u043c\\u0435\\u0441\\u0435\\u0446\",MM:\"%d \\u043c\\u0435\\u0441\\u0435\\u0446\\u0430\",y:\"\\u0433\\u043e\\u0434\\u0438\\u043d\\u0430\",yy:\"%d \\u0433\\u043e\\u0434\\u0438\\u043d\\u0438\"},dayOfMonthOrdinalParse:/\\d{1,2}-(\\u0435\\u0432|\\u0435\\u043d|\\u0442\\u0438|\\u0432\\u0438|\\u0440\\u0438|\\u043c\\u0438)/,ordinal:function(t){var e=t%10,n=t%100;return 0===t?t+\"-\\u0435\\u0432\":0===n?t+\"-\\u0435\\u043d\":n>10&&n<20?t+\"-\\u0442\\u0438\":1===e?t+\"-\\u0432\\u0438\":2===e?t+\"-\\u0440\\u0438\":7===e||8===e?t+\"-\\u043c\\u0438\":t+\"-\\u0442\\u0438\"},week:{dow:1,doy:7}})}(n(\"wd/R\"))},honF:function(t,e,n){!function(t){\"use strict\";var e={1:\"\\u1041\",2:\"\\u1042\",3:\"\\u1043\",4:\"\\u1044\",5:\"\\u1045\",6:\"\\u1046\",7:\"\\u1047\",8:\"\\u1048\",9:\"\\u1049\",0:\"\\u1040\"},n={\"\\u1041\":\"1\",\"\\u1042\":\"2\",\"\\u1043\":\"3\",\"\\u1044\":\"4\",\"\\u1045\":\"5\",\"\\u1046\":\"6\",\"\\u1047\":\"7\",\"\\u1048\":\"8\",\"\\u1049\":\"9\",\"\\u1040\":\"0\"};t.defineLocale(\"my\",{months:\"\\u1007\\u1014\\u103a\\u1014\\u101d\\u102b\\u101b\\u102e_\\u1016\\u1031\\u1016\\u1031\\u102c\\u103a\\u101d\\u102b\\u101b\\u102e_\\u1019\\u1010\\u103a_\\u1027\\u1015\\u103c\\u102e_\\u1019\\u1031_\\u1007\\u103d\\u1014\\u103a_\\u1007\\u1030\\u101c\\u102d\\u102f\\u1004\\u103a_\\u101e\\u103c\\u1002\\u102f\\u1010\\u103a_\\u1005\\u1000\\u103a\\u1010\\u1004\\u103a\\u1018\\u102c_\\u1021\\u1031\\u102c\\u1000\\u103a\\u1010\\u102d\\u102f\\u1018\\u102c_\\u1014\\u102d\\u102f\\u101d\\u1004\\u103a\\u1018\\u102c_\\u1012\\u102e\\u1007\\u1004\\u103a\\u1018\\u102c\".split(\"_\"),monthsShort:\"\\u1007\\u1014\\u103a_\\u1016\\u1031_\\u1019\\u1010\\u103a_\\u1015\\u103c\\u102e_\\u1019\\u1031_\\u1007\\u103d\\u1014\\u103a_\\u101c\\u102d\\u102f\\u1004\\u103a_\\u101e\\u103c_\\u1005\\u1000\\u103a_\\u1021\\u1031\\u102c\\u1000\\u103a_\\u1014\\u102d\\u102f_\\u1012\\u102e\".split(\"_\"),weekdays:\"\\u1010\\u1014\\u1004\\u103a\\u1039\\u1002\\u1014\\u103d\\u1031_\\u1010\\u1014\\u1004\\u103a\\u1039\\u101c\\u102c_\\u1021\\u1004\\u103a\\u1039\\u1002\\u102b_\\u1017\\u102f\\u1012\\u1039\\u1013\\u101f\\u1030\\u1038_\\u1000\\u103c\\u102c\\u101e\\u1015\\u1010\\u1031\\u1038_\\u101e\\u1031\\u102c\\u1000\\u103c\\u102c_\\u1005\\u1014\\u1031\".split(\"_\"),weekdaysShort:\"\\u1014\\u103d\\u1031_\\u101c\\u102c_\\u1002\\u102b_\\u101f\\u1030\\u1038_\\u1000\\u103c\\u102c_\\u101e\\u1031\\u102c_\\u1014\\u1031\".split(\"_\"),weekdaysMin:\"\\u1014\\u103d\\u1031_\\u101c\\u102c_\\u1002\\u102b_\\u101f\\u1030\\u1038_\\u1000\\u103c\\u102c_\\u101e\\u1031\\u102c_\\u1014\\u1031\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[\\u101a\\u1014\\u1031.] LT [\\u1019\\u103e\\u102c]\",nextDay:\"[\\u1019\\u1014\\u1000\\u103a\\u1016\\u103c\\u1014\\u103a] LT [\\u1019\\u103e\\u102c]\",nextWeek:\"dddd LT [\\u1019\\u103e\\u102c]\",lastDay:\"[\\u1019\\u1014\\u1031.\\u1000] LT [\\u1019\\u103e\\u102c]\",lastWeek:\"[\\u1015\\u103c\\u102e\\u1038\\u1001\\u1032\\u1037\\u101e\\u1031\\u102c] dddd LT [\\u1019\\u103e\\u102c]\",sameElse:\"L\"},relativeTime:{future:\"\\u101c\\u102c\\u1019\\u100a\\u103a\\u1037 %s \\u1019\\u103e\\u102c\",past:\"\\u101c\\u103d\\u1014\\u103a\\u1001\\u1032\\u1037\\u101e\\u1031\\u102c %s \\u1000\",s:\"\\u1005\\u1000\\u1039\\u1000\\u1014\\u103a.\\u1021\\u1014\\u100a\\u103a\\u1038\\u1004\\u101a\\u103a\",ss:\"%d \\u1005\\u1000\\u1039\\u1000\\u1014\\u1037\\u103a\",m:\"\\u1010\\u1005\\u103a\\u1019\\u102d\\u1014\\u1005\\u103a\",mm:\"%d \\u1019\\u102d\\u1014\\u1005\\u103a\",h:\"\\u1010\\u1005\\u103a\\u1014\\u102c\\u101b\\u102e\",hh:\"%d \\u1014\\u102c\\u101b\\u102e\",d:\"\\u1010\\u1005\\u103a\\u101b\\u1000\\u103a\",dd:\"%d \\u101b\\u1000\\u103a\",M:\"\\u1010\\u1005\\u103a\\u101c\",MM:\"%d \\u101c\",y:\"\\u1010\\u1005\\u103a\\u1014\\u103e\\u1005\\u103a\",yy:\"%d \\u1014\\u103e\\u1005\\u103a\"},preparse:function(t){return t.replace(/[\\u1041\\u1042\\u1043\\u1044\\u1045\\u1046\\u1047\\u1048\\u1049\\u1040]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\\d/g,(function(t){return e[t]}))},week:{dow:1,doy:4}})}(n(\"wd/R\"))},iEDd:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"gl\",{months:\"xaneiro_febreiro_marzo_abril_maio_xu\\xf1o_xullo_agosto_setembro_outubro_novembro_decembro\".split(\"_\"),monthsShort:\"xan._feb._mar._abr._mai._xu\\xf1._xul._ago._set._out._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"domingo_luns_martes_m\\xe9rcores_xoves_venres_s\\xe1bado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._m\\xe9r._xov._ven._s\\xe1b.\".split(\"_\"),weekdaysMin:\"do_lu_ma_m\\xe9_xo_ve_s\\xe1\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY H:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY H:mm\"},calendar:{sameDay:function(){return\"[hoxe \"+(1!==this.hours()?\"\\xe1s\":\"\\xe1\")+\"] LT\"},nextDay:function(){return\"[ma\\xf1\\xe1 \"+(1!==this.hours()?\"\\xe1s\":\"\\xe1\")+\"] LT\"},nextWeek:function(){return\"dddd [\"+(1!==this.hours()?\"\\xe1s\":\"a\")+\"] LT\"},lastDay:function(){return\"[onte \"+(1!==this.hours()?\"\\xe1\":\"a\")+\"] LT\"},lastWeek:function(){return\"[o] dddd [pasado \"+(1!==this.hours()?\"\\xe1s\":\"a\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:function(t){return 0===t.indexOf(\"un\")?\"n\"+t:\"en \"+t},past:\"hai %s\",s:\"uns segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"unha hora\",hh:\"%d horas\",d:\"un d\\xeda\",dd:\"%d d\\xedas\",M:\"un mes\",MM:\"%d meses\",y:\"un ano\",yy:\"%d anos\"},dayOfMonthOrdinalParse:/\\d{1,2}\\xba/,ordinal:\"%d\\xba\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},iYuL:function(t,e,n){!function(t){\"use strict\";var e=\"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\".split(\"_\"),n=\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],i=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;t.defineLocale(\"es\",{months:\"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\".split(\"_\"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:\"domingo_lunes_martes_mi\\xe9rcoles_jueves_viernes_s\\xe1bado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._mi\\xe9._jue._vie._s\\xe1b.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_s\\xe1\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY H:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY H:mm\"},calendar:{sameDay:function(){return\"[hoy a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextDay:function(){return\"[ma\\xf1ana a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextWeek:function(){return\"dddd [a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastDay:function(){return\"[ayer a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [pasado a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"en %s\",past:\"hace %s\",s:\"unos segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"una hora\",hh:\"%d horas\",d:\"un d\\xeda\",dd:\"%d d\\xedas\",w:\"una semana\",ww:\"%d semanas\",M:\"un mes\",MM:\"%d meses\",y:\"un a\\xf1o\",yy:\"%d a\\xf1os\"},dayOfMonthOrdinalParse:/\\d{1,2}\\xba/,ordinal:\"%d\\xba\",week:{dow:1,doy:4},invalidDate:\"Fecha inv\\xe1lida\"})}(n(\"wd/R\"))},itXk:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return c}));var r=n(\"z+Ro\"),i=n(\"DH7j\"),a=n(\"l7GE\"),o=n(\"ZUHj\"),s=n(\"yCtX\");const l={};function c(...t){let e=void 0,n=void 0;return Object(r.a)(t[t.length-1])&&(n=t.pop()),\"function\"==typeof t[t.length-1]&&(e=t.pop()),1===t.length&&Object(i.a)(t[0])&&(t=t[0]),Object(s.a)(t,n).lift(new u(e))}class u{constructor(t){this.resultSelector=t}call(t,e){return e.subscribe(new h(t,this.resultSelector))}}class h extends a.a{constructor(t,e){super(t),this.resultSelector=e,this.active=0,this.values=[],this.observables=[]}_next(t){this.values.push(l),this.observables.push(t)}_complete(){const t=this.observables,e=t.length;if(0===e)this.destination.complete();else{this.active=e,this.toRespond=e;for(let n=0;n<e;n++){const e=t[n];this.add(Object(o.a)(this,e,void 0,n))}}}notifyComplete(t){0==(this.active-=1)&&this.destination.complete()}notifyNext(t,e,n){const r=this.values,i=this.toRespond?r[n]===l?--this.toRespond:this.toRespond:0;r[n]=e,0===i&&(this.resultSelector?this._tryResultSelector(r):this.destination.next(r.slice()))}_tryResultSelector(t){let e;try{e=this.resultSelector.apply(this,t)}catch(n){return void this.destination.error(n)}this.destination.next(e)}}},jUeY:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"el\",{monthsNominativeEl:\"\\u0399\\u03b1\\u03bd\\u03bf\\u03c5\\u03ac\\u03c1\\u03b9\\u03bf\\u03c2_\\u03a6\\u03b5\\u03b2\\u03c1\\u03bf\\u03c5\\u03ac\\u03c1\\u03b9\\u03bf\\u03c2_\\u039c\\u03ac\\u03c1\\u03c4\\u03b9\\u03bf\\u03c2_\\u0391\\u03c0\\u03c1\\u03af\\u03bb\\u03b9\\u03bf\\u03c2_\\u039c\\u03ac\\u03b9\\u03bf\\u03c2_\\u0399\\u03bf\\u03cd\\u03bd\\u03b9\\u03bf\\u03c2_\\u0399\\u03bf\\u03cd\\u03bb\\u03b9\\u03bf\\u03c2_\\u0391\\u03cd\\u03b3\\u03bf\\u03c5\\u03c3\\u03c4\\u03bf\\u03c2_\\u03a3\\u03b5\\u03c0\\u03c4\\u03ad\\u03bc\\u03b2\\u03c1\\u03b9\\u03bf\\u03c2_\\u039f\\u03ba\\u03c4\\u03ce\\u03b2\\u03c1\\u03b9\\u03bf\\u03c2_\\u039d\\u03bf\\u03ad\\u03bc\\u03b2\\u03c1\\u03b9\\u03bf\\u03c2_\\u0394\\u03b5\\u03ba\\u03ad\\u03bc\\u03b2\\u03c1\\u03b9\\u03bf\\u03c2\".split(\"_\"),monthsGenitiveEl:\"\\u0399\\u03b1\\u03bd\\u03bf\\u03c5\\u03b1\\u03c1\\u03af\\u03bf\\u03c5_\\u03a6\\u03b5\\u03b2\\u03c1\\u03bf\\u03c5\\u03b1\\u03c1\\u03af\\u03bf\\u03c5_\\u039c\\u03b1\\u03c1\\u03c4\\u03af\\u03bf\\u03c5_\\u0391\\u03c0\\u03c1\\u03b9\\u03bb\\u03af\\u03bf\\u03c5_\\u039c\\u03b1\\u0390\\u03bf\\u03c5_\\u0399\\u03bf\\u03c5\\u03bd\\u03af\\u03bf\\u03c5_\\u0399\\u03bf\\u03c5\\u03bb\\u03af\\u03bf\\u03c5_\\u0391\\u03c5\\u03b3\\u03bf\\u03cd\\u03c3\\u03c4\\u03bf\\u03c5_\\u03a3\\u03b5\\u03c0\\u03c4\\u03b5\\u03bc\\u03b2\\u03c1\\u03af\\u03bf\\u03c5_\\u039f\\u03ba\\u03c4\\u03c9\\u03b2\\u03c1\\u03af\\u03bf\\u03c5_\\u039d\\u03bf\\u03b5\\u03bc\\u03b2\\u03c1\\u03af\\u03bf\\u03c5_\\u0394\\u03b5\\u03ba\\u03b5\\u03bc\\u03b2\\u03c1\\u03af\\u03bf\\u03c5\".split(\"_\"),months:function(t,e){return t?\"string\"==typeof e&&/D/.test(e.substring(0,e.indexOf(\"MMMM\")))?this._monthsGenitiveEl[t.month()]:this._monthsNominativeEl[t.month()]:this._monthsNominativeEl},monthsShort:\"\\u0399\\u03b1\\u03bd_\\u03a6\\u03b5\\u03b2_\\u039c\\u03b1\\u03c1_\\u0391\\u03c0\\u03c1_\\u039c\\u03b1\\u03ca_\\u0399\\u03bf\\u03c5\\u03bd_\\u0399\\u03bf\\u03c5\\u03bb_\\u0391\\u03c5\\u03b3_\\u03a3\\u03b5\\u03c0_\\u039f\\u03ba\\u03c4_\\u039d\\u03bf\\u03b5_\\u0394\\u03b5\\u03ba\".split(\"_\"),weekdays:\"\\u039a\\u03c5\\u03c1\\u03b9\\u03b1\\u03ba\\u03ae_\\u0394\\u03b5\\u03c5\\u03c4\\u03ad\\u03c1\\u03b1_\\u03a4\\u03c1\\u03af\\u03c4\\u03b7_\\u03a4\\u03b5\\u03c4\\u03ac\\u03c1\\u03c4\\u03b7_\\u03a0\\u03ad\\u03bc\\u03c0\\u03c4\\u03b7_\\u03a0\\u03b1\\u03c1\\u03b1\\u03c3\\u03ba\\u03b5\\u03c5\\u03ae_\\u03a3\\u03ac\\u03b2\\u03b2\\u03b1\\u03c4\\u03bf\".split(\"_\"),weekdaysShort:\"\\u039a\\u03c5\\u03c1_\\u0394\\u03b5\\u03c5_\\u03a4\\u03c1\\u03b9_\\u03a4\\u03b5\\u03c4_\\u03a0\\u03b5\\u03bc_\\u03a0\\u03b1\\u03c1_\\u03a3\\u03b1\\u03b2\".split(\"_\"),weekdaysMin:\"\\u039a\\u03c5_\\u0394\\u03b5_\\u03a4\\u03c1_\\u03a4\\u03b5_\\u03a0\\u03b5_\\u03a0\\u03b1_\\u03a3\\u03b1\".split(\"_\"),meridiem:function(t,e,n){return t>11?n?\"\\u03bc\\u03bc\":\"\\u039c\\u039c\":n?\"\\u03c0\\u03bc\":\"\\u03a0\\u039c\"},isPM:function(t){return\"\\u03bc\"===(t+\"\").toLowerCase()[0]},meridiemParse:/[\\u03a0\\u039c]\\.?\\u039c?\\.?/i,longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendarEl:{sameDay:\"[\\u03a3\\u03ae\\u03bc\\u03b5\\u03c1\\u03b1 {}] LT\",nextDay:\"[\\u0391\\u03cd\\u03c1\\u03b9\\u03bf {}] LT\",nextWeek:\"dddd [{}] LT\",lastDay:\"[\\u03a7\\u03b8\\u03b5\\u03c2 {}] LT\",lastWeek:function(){switch(this.day()){case 6:return\"[\\u03c4\\u03bf \\u03c0\\u03c1\\u03bf\\u03b7\\u03b3\\u03bf\\u03cd\\u03bc\\u03b5\\u03bd\\u03bf] dddd [{}] LT\";default:return\"[\\u03c4\\u03b7\\u03bd \\u03c0\\u03c1\\u03bf\\u03b7\\u03b3\\u03bf\\u03cd\\u03bc\\u03b5\\u03bd\\u03b7] dddd [{}] LT\"}},sameElse:\"L\"},calendar:function(t,e){var n,r=this._calendarEl[t],i=e&&e.hours();return n=r,(\"undefined\"!=typeof Function&&n instanceof Function||\"[object Function]\"===Object.prototype.toString.call(n))&&(r=r.apply(e)),r.replace(\"{}\",i%12==1?\"\\u03c3\\u03c4\\u03b7\":\"\\u03c3\\u03c4\\u03b9\\u03c2\")},relativeTime:{future:\"\\u03c3\\u03b5 %s\",past:\"%s \\u03c0\\u03c1\\u03b9\\u03bd\",s:\"\\u03bb\\u03af\\u03b3\\u03b1 \\u03b4\\u03b5\\u03c5\\u03c4\\u03b5\\u03c1\\u03cc\\u03bb\\u03b5\\u03c0\\u03c4\\u03b1\",ss:\"%d \\u03b4\\u03b5\\u03c5\\u03c4\\u03b5\\u03c1\\u03cc\\u03bb\\u03b5\\u03c0\\u03c4\\u03b1\",m:\"\\u03ad\\u03bd\\u03b1 \\u03bb\\u03b5\\u03c0\\u03c4\\u03cc\",mm:\"%d \\u03bb\\u03b5\\u03c0\\u03c4\\u03ac\",h:\"\\u03bc\\u03af\\u03b1 \\u03ce\\u03c1\\u03b1\",hh:\"%d \\u03ce\\u03c1\\u03b5\\u03c2\",d:\"\\u03bc\\u03af\\u03b1 \\u03bc\\u03ad\\u03c1\\u03b1\",dd:\"%d \\u03bc\\u03ad\\u03c1\\u03b5\\u03c2\",M:\"\\u03ad\\u03bd\\u03b1\\u03c2 \\u03bc\\u03ae\\u03bd\\u03b1\\u03c2\",MM:\"%d \\u03bc\\u03ae\\u03bd\\u03b5\\u03c2\",y:\"\\u03ad\\u03bd\\u03b1\\u03c2 \\u03c7\\u03c1\\u03cc\\u03bd\\u03bf\\u03c2\",yy:\"%d \\u03c7\\u03c1\\u03cc\\u03bd\\u03b9\\u03b1\"},dayOfMonthOrdinalParse:/\\d{1,2}\\u03b7/,ordinal:\"%d\\u03b7\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},jVdC:function(t,e,n){!function(t){\"use strict\";var e=\"stycze\\u0144_luty_marzec_kwiecie\\u0144_maj_czerwiec_lipiec_sierpie\\u0144_wrzesie\\u0144_pa\\u017adziernik_listopad_grudzie\\u0144\".split(\"_\"),n=\"stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrze\\u015bnia_pa\\u017adziernika_listopada_grudnia\".split(\"_\"),r=[/^sty/i,/^lut/i,/^mar/i,/^kwi/i,/^maj/i,/^cze/i,/^lip/i,/^sie/i,/^wrz/i,/^pa\\u017a/i,/^lis/i,/^gru/i];function i(t){return t%10<5&&t%10>1&&~~(t/10)%10!=1}function a(t,e,n){var r=t+\" \";switch(n){case\"ss\":return r+(i(t)?\"sekundy\":\"sekund\");case\"m\":return e?\"minuta\":\"minut\\u0119\";case\"mm\":return r+(i(t)?\"minuty\":\"minut\");case\"h\":return e?\"godzina\":\"godzin\\u0119\";case\"hh\":return r+(i(t)?\"godziny\":\"godzin\");case\"ww\":return r+(i(t)?\"tygodnie\":\"tygodni\");case\"MM\":return r+(i(t)?\"miesi\\u0105ce\":\"miesi\\u0119cy\");case\"yy\":return r+(i(t)?\"lata\":\"lat\")}}t.defineLocale(\"pl\",{months:function(t,r){return t?/D MMMM/.test(r)?n[t.month()]:e[t.month()]:e},monthsShort:\"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_pa\\u017a_lis_gru\".split(\"_\"),monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:\"niedziela_poniedzia\\u0142ek_wtorek_\\u015broda_czwartek_pi\\u0105tek_sobota\".split(\"_\"),weekdaysShort:\"ndz_pon_wt_\\u015br_czw_pt_sob\".split(\"_\"),weekdaysMin:\"Nd_Pn_Wt_\\u015ar_Cz_Pt_So\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Dzi\\u015b o] LT\",nextDay:\"[Jutro o] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[W niedziel\\u0119 o] LT\";case 2:return\"[We wtorek o] LT\";case 3:return\"[W \\u015brod\\u0119 o] LT\";case 6:return\"[W sobot\\u0119 o] LT\";default:return\"[W] dddd [o] LT\"}},lastDay:\"[Wczoraj o] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[W zesz\\u0142\\u0105 niedziel\\u0119 o] LT\";case 3:return\"[W zesz\\u0142\\u0105 \\u015brod\\u0119 o] LT\";case 6:return\"[W zesz\\u0142\\u0105 sobot\\u0119 o] LT\";default:return\"[W zesz\\u0142y] dddd [o] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"%s temu\",s:\"kilka sekund\",ss:a,m:a,mm:a,h:a,hh:a,d:\"1 dzie\\u0144\",dd:\"%d dni\",w:\"tydzie\\u0144\",ww:a,M:\"miesi\\u0105c\",MM:a,y:\"rok\",yy:a},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},jZKg:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return a}));var r=n(\"HDdC\"),i=n(\"quSY\");function a(t,e){return new r.a(n=>{const r=new i.a;let a=0;return r.add(e.schedule((function(){a!==t.length?(n.next(t[a++]),n.closed||r.add(this.schedule())):n.complete()}))),r})}},jaxi:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return _})),n.d(e,\"b\",(function(){return g})),n.d(e,\"c\",(function(){return b}));var r=n(\"8LU1\"),i=n(\"0EQZ\"),a=n(\"fXoL\"),o=n(\"3Pt+\"),s=n(\"FKr1\"),l=n(\"u47x\");const c=[\"button\"],u=[\"*\"],h=new a.w(\"MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS\"),d=new a.w(\"MatButtonToggleGroup\"),f={provide:o.l,useExisting:Object(a.db)(()=>g),multi:!0};let p=0;class m{constructor(t,e){this.source=t,this.value=e}}let g=(()=>{class t{constructor(t,e){this._changeDetector=t,this._vertical=!1,this._multiple=!1,this._disabled=!1,this._controlValueAccessorChangeFn=()=>{},this._onTouched=()=>{},this._name=\"mat-button-toggle-group-\"+p++,this.valueChange=new a.s,this.change=new a.s,this.appearance=e&&e.appearance?e.appearance:\"standard\"}get name(){return this._name}set name(t){this._name=t,this._buttonToggles&&this._buttonToggles.forEach(t=>{t.name=this._name,t._markForCheck()})}get vertical(){return this._vertical}set vertical(t){this._vertical=Object(r.c)(t)}get value(){const t=this._selectionModel?this._selectionModel.selected:[];return this.multiple?t.map(t=>t.value):t[0]?t[0].value:void 0}set value(t){this._setSelectionByValue(t),this.valueChange.emit(this.value)}get selected(){const t=this._selectionModel?this._selectionModel.selected:[];return this.multiple?t:t[0]||null}get multiple(){return this._multiple}set multiple(t){this._multiple=Object(r.c)(t)}get disabled(){return this._disabled}set disabled(t){this._disabled=Object(r.c)(t),this._buttonToggles&&this._buttonToggles.forEach(t=>t._markForCheck())}ngOnInit(){this._selectionModel=new i.c(this.multiple,void 0,!1)}ngAfterContentInit(){this._selectionModel.select(...this._buttonToggles.filter(t=>t.checked))}writeValue(t){this.value=t,this._changeDetector.markForCheck()}registerOnChange(t){this._controlValueAccessorChangeFn=t}registerOnTouched(t){this._onTouched=t}setDisabledState(t){this.disabled=t}_emitChangeEvent(){const t=this.selected,e=Array.isArray(t)?t[t.length-1]:t,n=new m(e,this.value);this._controlValueAccessorChangeFn(n.value),this.change.emit(n)}_syncButtonToggle(t,e,n=!1,r=!1){this.multiple||!this.selected||t.checked||(this.selected.checked=!1),this._selectionModel?e?this._selectionModel.select(t):this._selectionModel.deselect(t):r=!0,r?Promise.resolve().then(()=>this._updateModelValue(n)):this._updateModelValue(n)}_isSelected(t){return this._selectionModel&&this._selectionModel.isSelected(t)}_isPrechecked(t){return void 0!==this._rawValue&&(this.multiple&&Array.isArray(this._rawValue)?this._rawValue.some(e=>null!=t.value&&e===t.value):t.value===this._rawValue)}_setSelectionByValue(t){this._rawValue=t,this._buttonToggles&&(this.multiple&&t?(Array.isArray(t),this._clearSelection(),t.forEach(t=>this._selectValue(t))):(this._clearSelection(),this._selectValue(t)))}_clearSelection(){this._selectionModel.clear(),this._buttonToggles.forEach(t=>t.checked=!1)}_selectValue(t){const e=this._buttonToggles.find(e=>null!=e.value&&e.value===t);e&&(e.checked=!0,this._selectionModel.select(e))}_updateModelValue(t){t&&this._emitChangeEvent(),this.valueChange.emit(this.value)}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(a.j),a.Xb(h,8))},t.\\u0275dir=a.Sb({type:t,selectors:[[\"mat-button-toggle-group\"]],contentQueries:function(t,e,n){if(1&t&&a.Qb(n,_,!0),2&t){let t;a.Ac(t=a.mc())&&(e._buttonToggles=t)}},hostAttrs:[\"role\",\"group\",1,\"mat-button-toggle-group\"],hostVars:5,hostBindings:function(t,e){2&t&&(a.Mb(\"aria-disabled\",e.disabled),a.Pb(\"mat-button-toggle-vertical\",e.vertical)(\"mat-button-toggle-group-appearance-standard\",\"standard\"===e.appearance))},inputs:{appearance:\"appearance\",name:\"name\",vertical:\"vertical\",value:\"value\",multiple:\"multiple\",disabled:\"disabled\"},outputs:{valueChange:\"valueChange\",change:\"change\"},exportAs:[\"matButtonToggleGroup\"],features:[a.Kb([f,{provide:d,useExisting:t}])]}),t})();class y{}const v=Object(s.x)(y);let _=(()=>{class t extends v{constructor(t,e,n,r,i,o){super(),this._changeDetectorRef=e,this._elementRef=n,this._focusMonitor=r,this._isSingleSelector=!1,this._checked=!1,this.ariaLabelledby=null,this._disabled=!1,this.change=new a.s;const s=Number(i);this.tabIndex=s||0===s?s:null,this.buttonToggleGroup=t,this.appearance=o&&o.appearance?o.appearance:\"standard\"}get buttonId(){return this.id+\"-button\"}get appearance(){return this.buttonToggleGroup?this.buttonToggleGroup.appearance:this._appearance}set appearance(t){this._appearance=t}get checked(){return this.buttonToggleGroup?this.buttonToggleGroup._isSelected(this):this._checked}set checked(t){const e=Object(r.c)(t);e!==this._checked&&(this._checked=e,this.buttonToggleGroup&&this.buttonToggleGroup._syncButtonToggle(this,this._checked),this._changeDetectorRef.markForCheck())}get disabled(){return this._disabled||this.buttonToggleGroup&&this.buttonToggleGroup.disabled}set disabled(t){this._disabled=Object(r.c)(t)}ngOnInit(){const t=this.buttonToggleGroup;this._isSingleSelector=t&&!t.multiple,this.id=this.id||\"mat-button-toggle-\"+p++,this._isSingleSelector&&(this.name=t.name),t&&(t._isPrechecked(this)?this.checked=!0:t._isSelected(this)!==this._checked&&t._syncButtonToggle(this,this._checked))}ngAfterViewInit(){this._focusMonitor.monitor(this._elementRef,!0)}ngOnDestroy(){const t=this.buttonToggleGroup;this._focusMonitor.stopMonitoring(this._elementRef),t&&t._isSelected(this)&&t._syncButtonToggle(this,!1,!1,!0)}focus(t){this._buttonElement.nativeElement.focus(t)}_onButtonClick(){const t=!!this._isSingleSelector||!this._checked;t!==this._checked&&(this._checked=t,this.buttonToggleGroup&&(this.buttonToggleGroup._syncButtonToggle(this,this._checked,!0),this.buttonToggleGroup._onTouched())),this.change.emit(new m(this,this.value))}_markForCheck(){this._changeDetectorRef.markForCheck()}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(d,8),a.Xb(a.j),a.Xb(a.p),a.Xb(l.h),a.ic(\"tabindex\"),a.Xb(h,8))},t.\\u0275cmp=a.Rb({type:t,selectors:[[\"mat-button-toggle\"]],viewQuery:function(t,e){if(1&t&&a.Sc(c,!0),2&t){let t;a.Ac(t=a.mc())&&(e._buttonElement=t.first)}},hostAttrs:[\"role\",\"presentation\",1,\"mat-button-toggle\"],hostVars:12,hostBindings:function(t,e){1&t&&a.lc(\"focus\",(function(){return e.focus()})),2&t&&(a.Mb(\"aria-label\",null)(\"aria-labelledby\",null)(\"id\",e.id)(\"name\",null),a.Pb(\"mat-button-toggle-standalone\",!e.buttonToggleGroup)(\"mat-button-toggle-checked\",e.checked)(\"mat-button-toggle-disabled\",e.disabled)(\"mat-button-toggle-appearance-standard\",\"standard\"===e.appearance))},inputs:{disableRipple:\"disableRipple\",ariaLabelledby:[\"aria-labelledby\",\"ariaLabelledby\"],tabIndex:\"tabIndex\",appearance:\"appearance\",checked:\"checked\",disabled:\"disabled\",id:\"id\",name:\"name\",ariaLabel:[\"aria-label\",\"ariaLabel\"],value:\"value\"},outputs:{change:\"change\"},exportAs:[\"matButtonToggle\"],features:[a.Ib],ngContentSelectors:u,decls:6,vars:9,consts:[[\"type\",\"button\",1,\"mat-button-toggle-button\",\"mat-focus-indicator\",3,\"id\",\"disabled\",\"click\"],[\"button\",\"\"],[1,\"mat-button-toggle-label-content\"],[1,\"mat-button-toggle-focus-overlay\"],[\"matRipple\",\"\",1,\"mat-button-toggle-ripple\",3,\"matRippleTrigger\",\"matRippleDisabled\"]],template:function(t,e){if(1&t&&(a.uc(),a.dc(0,\"button\",0,1),a.lc(\"click\",(function(){return e._onButtonClick()})),a.dc(2,\"span\",2),a.tc(3),a.cc(),a.cc(),a.Yb(4,\"span\",3),a.Yb(5,\"span\",4)),2&t){const t=a.Bc(1);a.vc(\"id\",e.buttonId)(\"disabled\",e.disabled||null),a.Mb(\"tabindex\",e.disabled?-1:e.tabIndex)(\"aria-pressed\",e.checked)(\"name\",e.name||null)(\"aria-label\",e.ariaLabel)(\"aria-labelledby\",e.ariaLabelledby),a.Lb(5),a.vc(\"matRippleTrigger\",t)(\"matRippleDisabled\",e.disableRipple||e.disabled)}},directives:[s.r],styles:[\".mat-button-toggle-standalone,.mat-button-toggle-group{position:relative;display:inline-flex;flex-direction:row;white-space:nowrap;overflow:hidden;border-radius:2px;-webkit-tap-highlight-color:transparent}.cdk-high-contrast-active .mat-button-toggle-standalone,.cdk-high-contrast-active .mat-button-toggle-group{outline:solid 1px}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{border-radius:4px}.cdk-high-contrast-active .mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.cdk-high-contrast-active .mat-button-toggle-group-appearance-standard{outline:0}.mat-button-toggle-vertical{flex-direction:column}.mat-button-toggle-vertical .mat-button-toggle-label-content{display:block}.mat-button-toggle{white-space:nowrap;position:relative}.mat-button-toggle .mat-icon svg{vertical-align:top}.mat-button-toggle.cdk-keyboard-focused .mat-button-toggle-focus-overlay{opacity:1}.cdk-high-contrast-active .mat-button-toggle.cdk-keyboard-focused .mat-button-toggle-focus-overlay{opacity:.5}.mat-button-toggle-appearance-standard:not(.mat-button-toggle-disabled):hover .mat-button-toggle-focus-overlay{opacity:.04}.mat-button-toggle-appearance-standard.cdk-keyboard-focused:not(.mat-button-toggle-disabled) .mat-button-toggle-focus-overlay{opacity:.12}.cdk-high-contrast-active .mat-button-toggle-appearance-standard.cdk-keyboard-focused:not(.mat-button-toggle-disabled) .mat-button-toggle-focus-overlay{opacity:.5}@media(hover: none){.mat-button-toggle-appearance-standard:not(.mat-button-toggle-disabled):hover .mat-button-toggle-focus-overlay{display:none}}.mat-button-toggle-label-content{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:inline-block;line-height:36px;padding:0 16px;position:relative}.mat-button-toggle-appearance-standard .mat-button-toggle-label-content{padding:0 12px}.mat-button-toggle-label-content>*{vertical-align:middle}.mat-button-toggle-focus-overlay{border-radius:inherit;pointer-events:none;opacity:0;top:0;left:0;right:0;bottom:0;position:absolute}.mat-button-toggle-checked .mat-button-toggle-focus-overlay{border-bottom:solid 36px}.cdk-high-contrast-active .mat-button-toggle-checked .mat-button-toggle-focus-overlay{opacity:.5;height:0}.cdk-high-contrast-active .mat-button-toggle-checked.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{border-bottom:solid 500px}.mat-button-toggle .mat-button-toggle-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-button-toggle-button{border:0;background:none;color:inherit;padding:0;margin:0;font:inherit;outline:none;width:100%;cursor:pointer}.mat-button-toggle-disabled .mat-button-toggle-button{cursor:default}.mat-button-toggle-button::-moz-focus-inner{border:0}\\n\"],encapsulation:2,changeDetection:0}),t})(),b=(()=>{class t{}return t.\\u0275mod=a.Vb({type:t}),t.\\u0275inj=a.Ub({factory:function(e){return new(e||t)},imports:[[s.i,s.s],s.i]}),t})()},jfSC:function(t,e,n){!function(t){\"use strict\";var e={1:\"\\u06f1\",2:\"\\u06f2\",3:\"\\u06f3\",4:\"\\u06f4\",5:\"\\u06f5\",6:\"\\u06f6\",7:\"\\u06f7\",8:\"\\u06f8\",9:\"\\u06f9\",0:\"\\u06f0\"},n={\"\\u06f1\":\"1\",\"\\u06f2\":\"2\",\"\\u06f3\":\"3\",\"\\u06f4\":\"4\",\"\\u06f5\":\"5\",\"\\u06f6\":\"6\",\"\\u06f7\":\"7\",\"\\u06f8\":\"8\",\"\\u06f9\":\"9\",\"\\u06f0\":\"0\"};t.defineLocale(\"fa\",{months:\"\\u0698\\u0627\\u0646\\u0648\\u06cc\\u0647_\\u0641\\u0648\\u0631\\u06cc\\u0647_\\u0645\\u0627\\u0631\\u0633_\\u0622\\u0648\\u0631\\u06cc\\u0644_\\u0645\\u0647_\\u0698\\u0648\\u0626\\u0646_\\u0698\\u0648\\u0626\\u06cc\\u0647_\\u0627\\u0648\\u062a_\\u0633\\u067e\\u062a\\u0627\\u0645\\u0628\\u0631_\\u0627\\u06a9\\u062a\\u0628\\u0631_\\u0646\\u0648\\u0627\\u0645\\u0628\\u0631_\\u062f\\u0633\\u0627\\u0645\\u0628\\u0631\".split(\"_\"),monthsShort:\"\\u0698\\u0627\\u0646\\u0648\\u06cc\\u0647_\\u0641\\u0648\\u0631\\u06cc\\u0647_\\u0645\\u0627\\u0631\\u0633_\\u0622\\u0648\\u0631\\u06cc\\u0644_\\u0645\\u0647_\\u0698\\u0648\\u0626\\u0646_\\u0698\\u0648\\u0626\\u06cc\\u0647_\\u0627\\u0648\\u062a_\\u0633\\u067e\\u062a\\u0627\\u0645\\u0628\\u0631_\\u0627\\u06a9\\u062a\\u0628\\u0631_\\u0646\\u0648\\u0627\\u0645\\u0628\\u0631_\\u062f\\u0633\\u0627\\u0645\\u0628\\u0631\".split(\"_\"),weekdays:\"\\u06cc\\u06a9\\u200c\\u0634\\u0646\\u0628\\u0647_\\u062f\\u0648\\u0634\\u0646\\u0628\\u0647_\\u0633\\u0647\\u200c\\u0634\\u0646\\u0628\\u0647_\\u0686\\u0647\\u0627\\u0631\\u0634\\u0646\\u0628\\u0647_\\u067e\\u0646\\u062c\\u200c\\u0634\\u0646\\u0628\\u0647_\\u062c\\u0645\\u0639\\u0647_\\u0634\\u0646\\u0628\\u0647\".split(\"_\"),weekdaysShort:\"\\u06cc\\u06a9\\u200c\\u0634\\u0646\\u0628\\u0647_\\u062f\\u0648\\u0634\\u0646\\u0628\\u0647_\\u0633\\u0647\\u200c\\u0634\\u0646\\u0628\\u0647_\\u0686\\u0647\\u0627\\u0631\\u0634\\u0646\\u0628\\u0647_\\u067e\\u0646\\u062c\\u200c\\u0634\\u0646\\u0628\\u0647_\\u062c\\u0645\\u0639\\u0647_\\u0634\\u0646\\u0628\\u0647\".split(\"_\"),weekdaysMin:\"\\u06cc_\\u062f_\\u0633_\\u0686_\\u067e_\\u062c_\\u0634\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},meridiemParse:/\\u0642\\u0628\\u0644 \\u0627\\u0632 \\u0638\\u0647\\u0631|\\u0628\\u0639\\u062f \\u0627\\u0632 \\u0638\\u0647\\u0631/,isPM:function(t){return/\\u0628\\u0639\\u062f \\u0627\\u0632 \\u0638\\u0647\\u0631/.test(t)},meridiem:function(t,e,n){return t<12?\"\\u0642\\u0628\\u0644 \\u0627\\u0632 \\u0638\\u0647\\u0631\":\"\\u0628\\u0639\\u062f \\u0627\\u0632 \\u0638\\u0647\\u0631\"},calendar:{sameDay:\"[\\u0627\\u0645\\u0631\\u0648\\u0632 \\u0633\\u0627\\u0639\\u062a] LT\",nextDay:\"[\\u0641\\u0631\\u062f\\u0627 \\u0633\\u0627\\u0639\\u062a] LT\",nextWeek:\"dddd [\\u0633\\u0627\\u0639\\u062a] LT\",lastDay:\"[\\u062f\\u06cc\\u0631\\u0648\\u0632 \\u0633\\u0627\\u0639\\u062a] LT\",lastWeek:\"dddd [\\u067e\\u06cc\\u0634] [\\u0633\\u0627\\u0639\\u062a] LT\",sameElse:\"L\"},relativeTime:{future:\"\\u062f\\u0631 %s\",past:\"%s \\u067e\\u06cc\\u0634\",s:\"\\u0686\\u0646\\u062f \\u062b\\u0627\\u0646\\u06cc\\u0647\",ss:\"%d \\u062b\\u0627\\u0646\\u06cc\\u0647\",m:\"\\u06cc\\u06a9 \\u062f\\u0642\\u06cc\\u0642\\u0647\",mm:\"%d \\u062f\\u0642\\u06cc\\u0642\\u0647\",h:\"\\u06cc\\u06a9 \\u0633\\u0627\\u0639\\u062a\",hh:\"%d \\u0633\\u0627\\u0639\\u062a\",d:\"\\u06cc\\u06a9 \\u0631\\u0648\\u0632\",dd:\"%d \\u0631\\u0648\\u0632\",M:\"\\u06cc\\u06a9 \\u0645\\u0627\\u0647\",MM:\"%d \\u0645\\u0627\\u0647\",y:\"\\u06cc\\u06a9 \\u0633\\u0627\\u0644\",yy:\"%d \\u0633\\u0627\\u0644\"},preparse:function(t){return t.replace(/[\\u06f0-\\u06f9]/g,(function(t){return n[t]})).replace(/\\u060c/g,\",\")},postformat:function(t){return t.replace(/\\d/g,(function(t){return e[t]})).replace(/,/g,\"\\u060c\")},dayOfMonthOrdinalParse:/\\d{1,2}\\u0645/,ordinal:\"%d\\u0645\",week:{dow:6,doy:12}})}(n(\"wd/R\"))},jhN1:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return j})),n.d(e,\"b\",(function(){return O})),n.d(e,\"c\",(function(){return R})),n.d(e,\"d\",(function(){return x}));var r=n(\"ofXK\"),i=n(\"fXoL\");class a extends r.A{constructor(){super()}supportsDOMEvents(){return!0}}class o extends a{static makeCurrent(){Object(r.E)(new o)}getProperty(t,e){return t[e]}log(t){window.console&&window.console.log&&window.console.log(t)}logGroup(t){window.console&&window.console.group&&window.console.group(t)}logGroupEnd(){window.console&&window.console.groupEnd&&window.console.groupEnd()}onAndCancel(t,e,n){return t.addEventListener(e,n,!1),()=>{t.removeEventListener(e,n,!1)}}dispatchEvent(t,e){t.dispatchEvent(e)}remove(t){return t.parentNode&&t.parentNode.removeChild(t),t}getValue(t){return t.value}createElement(t,e){return(e=e||this.getDefaultDocument()).createElement(t)}createHtmlDocument(){return document.implementation.createHTMLDocument(\"fakeTitle\")}getDefaultDocument(){return document}isElementNode(t){return t.nodeType===Node.ELEMENT_NODE}isShadowRoot(t){return t instanceof DocumentFragment}getGlobalEventTarget(t,e){return\"window\"===e?window:\"document\"===e?t:\"body\"===e?t.body:null}getHistory(){return window.history}getLocation(){return window.location}getBaseHref(t){const e=l||(l=document.querySelector(\"base\"),l)?l.getAttribute(\"href\"):null;return null==e?null:(n=e,s||(s=document.createElement(\"a\")),s.setAttribute(\"href\",n),\"/\"===s.pathname.charAt(0)?s.pathname:\"/\"+s.pathname);var n}resetBaseElement(){l=null}getUserAgent(){return window.navigator.userAgent}performanceNow(){return window.performance&&window.performance.now?window.performance.now():(new Date).getTime()}supportsCookies(){return!0}getCookie(t){return Object(r.D)(document.cookie,t)}}let s,l=null;const c=new i.w(\"TRANSITION_ID\"),u=[{provide:i.d,useFactory:function(t,e,n){return()=>{n.get(i.e).donePromise.then(()=>{const n=Object(r.C)();Array.prototype.slice.apply(e.querySelectorAll(\"style[ng-transition]\")).filter(e=>e.getAttribute(\"ng-transition\")===t).forEach(t=>n.remove(t))})}},deps:[c,r.d,i.x],multi:!0}];class h{static init(){Object(i.ib)(new h)}addToWindow(t){i.zb.getAngularTestability=(e,n=!0)=>{const r=t.findTestabilityInTree(e,n);if(null==r)throw new Error(\"Could not find testability for element.\");return r},i.zb.getAllAngularTestabilities=()=>t.getAllTestabilities(),i.zb.getAllAngularRootElements=()=>t.getAllRootElements(),i.zb.frameworkStabilizers||(i.zb.frameworkStabilizers=[]),i.zb.frameworkStabilizers.push(t=>{const e=i.zb.getAllAngularTestabilities();let n=e.length,r=!1;const a=function(e){r=r||e,n--,0==n&&t(r)};e.forEach((function(t){t.whenStable(a)}))})}findTestabilityInTree(t,e,n){if(null==e)return null;const i=t.getTestability(e);return null!=i?i:n?Object(r.C)().isShadowRoot(e)?this.findTestabilityInTree(t,e.host,!0):this.findTestabilityInTree(t,e.parentElement,!0):null}}const d=new i.w(\"EventManagerPlugins\");let f=(()=>{class t{constructor(t,e){this._zone=e,this._eventNameToPlugin=new Map,t.forEach(t=>t.manager=this),this._plugins=t.slice().reverse()}addEventListener(t,e,n){return this._findPluginFor(e).addEventListener(t,e,n)}addGlobalEventListener(t,e,n){return this._findPluginFor(e).addGlobalEventListener(t,e,n)}getZone(){return this._zone}_findPluginFor(t){const e=this._eventNameToPlugin.get(t);if(e)return e;const n=this._plugins;for(let r=0;r<n.length;r++){const e=n[r];if(e.supports(t))return this._eventNameToPlugin.set(t,e),e}throw new Error(\"No event manager plugin found for event \"+t)}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(d),i.hc(i.H))},t.\\u0275prov=i.Tb({token:t,factory:t.\\u0275fac}),t})();class p{constructor(t){this._doc=t}addGlobalEventListener(t,e,n){const i=Object(r.C)().getGlobalEventTarget(this._doc,t);if(!i)throw new Error(`Unsupported event target ${i} for event ${e}`);return this.addEventListener(i,e,n)}}let m=(()=>{class t{constructor(){this._stylesSet=new Set}addStyles(t){const e=new Set;t.forEach(t=>{this._stylesSet.has(t)||(this._stylesSet.add(t),e.add(t))}),this.onStylesAdded(e)}onStylesAdded(t){}getAllStyles(){return Array.from(this._stylesSet)}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=i.Tb({token:t,factory:t.\\u0275fac}),t})(),g=(()=>{class t extends m{constructor(t){super(),this._doc=t,this._hostNodes=new Set,this._styleNodes=new Set,this._hostNodes.add(t.head)}_addStylesToHost(t,e){t.forEach(t=>{const n=this._doc.createElement(\"style\");n.textContent=t,this._styleNodes.add(e.appendChild(n))})}addHost(t){this._addStylesToHost(this._stylesSet,t),this._hostNodes.add(t)}removeHost(t){this._hostNodes.delete(t)}onStylesAdded(t){this._hostNodes.forEach(e=>this._addStylesToHost(t,e))}ngOnDestroy(){this._styleNodes.forEach(t=>Object(r.C)().remove(t))}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(r.d))},t.\\u0275prov=i.Tb({token:t,factory:t.\\u0275fac}),t})();const y={svg:\"http://www.w3.org/2000/svg\",xhtml:\"http://www.w3.org/1999/xhtml\",xlink:\"http://www.w3.org/1999/xlink\",xml:\"http://www.w3.org/XML/1998/namespace\",xmlns:\"http://www.w3.org/2000/xmlns/\"},v=/%COMP%/g;function _(t,e,n){for(let r=0;r<e.length;r++){let i=e[r];Array.isArray(i)?_(t,i,n):(i=i.replace(v,t),n.push(i))}return n}function b(t){return e=>{if(\"__ngUnwrap__\"===e)return t;!1===t(e)&&(e.preventDefault(),e.returnValue=!1)}}let x=(()=>{class t{constructor(t,e,n){this.eventManager=t,this.sharedStylesHost=e,this.appId=n,this.rendererByCompId=new Map,this.defaultRenderer=new w(t)}createRenderer(t,e){if(!t||!e)return this.defaultRenderer;switch(e.encapsulation){case i.ab.Emulated:{let n=this.rendererByCompId.get(e.id);return n||(n=new k(this.eventManager,this.sharedStylesHost,e,this.appId),this.rendererByCompId.set(e.id,n)),n.applyToHost(t),n}case 1:case i.ab.ShadowDom:return new M(this.eventManager,this.sharedStylesHost,t,e);default:if(!this.rendererByCompId.has(e.id)){const t=_(e.id,e.styles,[]);this.sharedStylesHost.addStyles(t),this.rendererByCompId.set(e.id,this.defaultRenderer)}return this.defaultRenderer}}begin(){}end(){}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(f),i.hc(g),i.hc(i.c))},t.\\u0275prov=i.Tb({token:t,factory:t.\\u0275fac}),t})();class w{constructor(t){this.eventManager=t,this.data=Object.create(null)}destroy(){}createElement(t,e){return e?document.createElementNS(y[e]||e,t):document.createElement(t)}createComment(t){return document.createComment(t)}createText(t){return document.createTextNode(t)}appendChild(t,e){t.appendChild(e)}insertBefore(t,e,n){t&&t.insertBefore(e,n)}removeChild(t,e){t&&t.removeChild(e)}selectRootElement(t,e){let n=\"string\"==typeof t?document.querySelector(t):t;if(!n)throw new Error(`The selector \"${t}\" did not match any elements`);return e||(n.textContent=\"\"),n}parentNode(t){return t.parentNode}nextSibling(t){return t.nextSibling}setAttribute(t,e,n,r){if(r){e=r+\":\"+e;const i=y[r];i?t.setAttributeNS(i,e,n):t.setAttribute(e,n)}else t.setAttribute(e,n)}removeAttribute(t,e,n){if(n){const r=y[n];r?t.removeAttributeNS(r,e):t.removeAttribute(`${n}:${e}`)}else t.removeAttribute(e)}addClass(t,e){t.classList.add(e)}removeClass(t,e){t.classList.remove(e)}setStyle(t,e,n,r){r&(i.Q.DashCase|i.Q.Important)?t.style.setProperty(e,n,r&i.Q.Important?\"important\":\"\"):t.style[e]=n}removeStyle(t,e,n){n&i.Q.DashCase?t.style.removeProperty(e):t.style[e]=\"\"}setProperty(t,e,n){t[e]=n}setValue(t,e){t.nodeValue=e}listen(t,e,n){return\"string\"==typeof t?this.eventManager.addGlobalEventListener(t,e,b(n)):this.eventManager.addEventListener(t,e,b(n))}}class k extends w{constructor(t,e,n,r){super(t),this.component=n;const i=_(r+\"-\"+n.id,n.styles,[]);e.addStyles(i),this.contentAttr=\"_ngcontent-%COMP%\".replace(v,r+\"-\"+n.id),this.hostAttr=\"_nghost-%COMP%\".replace(v,r+\"-\"+n.id)}applyToHost(t){super.setAttribute(t,this.hostAttr,\"\")}createElement(t,e){const n=super.createElement(t,e);return super.setAttribute(n,this.contentAttr,\"\"),n}}class M extends w{constructor(t,e,n,r){super(t),this.sharedStylesHost=e,this.hostEl=n,this.shadowRoot=n.attachShadow({mode:\"open\"}),this.sharedStylesHost.addHost(this.shadowRoot);const i=_(r.id,r.styles,[]);for(let a=0;a<i.length;a++){const t=document.createElement(\"style\");t.textContent=i[a],this.shadowRoot.appendChild(t)}}nodeOrShadowRoot(t){return t===this.hostEl?this.shadowRoot:t}destroy(){this.sharedStylesHost.removeHost(this.shadowRoot)}appendChild(t,e){return super.appendChild(this.nodeOrShadowRoot(t),e)}insertBefore(t,e,n){return super.insertBefore(this.nodeOrShadowRoot(t),e,n)}removeChild(t,e){return super.removeChild(this.nodeOrShadowRoot(t),e)}parentNode(t){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(t)))}}let T=(()=>{class t extends p{constructor(t){super(t)}supports(t){return!0}addEventListener(t,e,n){return t.addEventListener(e,n,!1),()=>this.removeEventListener(t,e,n)}removeEventListener(t,e,n){return t.removeEventListener(e,n)}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(r.d))},t.\\u0275prov=i.Tb({token:t,factory:t.\\u0275fac}),t})();const S=[\"alt\",\"control\",\"meta\",\"shift\"],A={\"\\b\":\"Backspace\",\"\\t\":\"Tab\",\"\\x7f\":\"Delete\",\"\\x1b\":\"Escape\",Del:\"Delete\",Esc:\"Escape\",Left:\"ArrowLeft\",Right:\"ArrowRight\",Up:\"ArrowUp\",Down:\"ArrowDown\",Menu:\"ContextMenu\",Scroll:\"ScrollLock\",Win:\"OS\"},L={A:\"1\",B:\"2\",C:\"3\",D:\"4\",E:\"5\",F:\"6\",G:\"7\",H:\"8\",I:\"9\",J:\"*\",K:\"+\",M:\"-\",N:\".\",O:\"/\",\"`\":\"0\",\"\\x90\":\"NumLock\"},C={alt:t=>t.altKey,control:t=>t.ctrlKey,meta:t=>t.metaKey,shift:t=>t.shiftKey};let E=(()=>{class t extends p{constructor(t){super(t)}supports(e){return null!=t.parseEventName(e)}addEventListener(e,n,i){const a=t.parseEventName(n),o=t.eventCallback(a.fullKey,i,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>Object(r.C)().onAndCancel(e,a.domEventName,o))}static parseEventName(e){const n=e.toLowerCase().split(\".\"),r=n.shift();if(0===n.length||\"keydown\"!==r&&\"keyup\"!==r)return null;const i=t._normalizeKey(n.pop());let a=\"\";if(S.forEach(t=>{const e=n.indexOf(t);e>-1&&(n.splice(e,1),a+=t+\".\")}),a+=i,0!=n.length||0===i.length)return null;const o={};return o.domEventName=r,o.fullKey=a,o}static getEventFullKey(t){let e=\"\",n=function(t){let e=t.key;if(null==e){if(e=t.keyIdentifier,null==e)return\"Unidentified\";e.startsWith(\"U+\")&&(e=String.fromCharCode(parseInt(e.substring(2),16)),3===t.location&&L.hasOwnProperty(e)&&(e=L[e]))}return A[e]||e}(t);return n=n.toLowerCase(),\" \"===n?n=\"space\":\".\"===n&&(n=\"dot\"),S.forEach(r=>{r!=n&&(0,C[r])(t)&&(e+=r+\".\")}),e+=n,e}static eventCallback(e,n,r){return i=>{t.getEventFullKey(i)===e&&r.runGuarded(()=>n(i))}}static _normalizeKey(t){switch(t){case\"esc\":return\"escape\";default:return t}}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(r.d))},t.\\u0275prov=i.Tb({token:t,factory:t.\\u0275fac}),t})(),O=(()=>{class t{}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=Object(i.Tb)({factory:function(){return Object(i.hc)(I)},token:t,providedIn:\"root\"}),t})();function D(t){return new I(t.get(r.d))}let I=(()=>{class t extends O{constructor(t){super(),this._doc=t}sanitize(t,e){if(null==e)return null;switch(t){case i.S.NONE:return e;case i.S.HTML:return Object(i.ob)(e,\"HTML\")?Object(i.Hb)(e):Object(i.mb)(this._doc,String(e));case i.S.STYLE:return Object(i.ob)(e,\"Style\")?Object(i.Hb)(e):e;case i.S.SCRIPT:if(Object(i.ob)(e,\"Script\"))return Object(i.Hb)(e);throw new Error(\"unsafe value used in a script context\");case i.S.URL:return Object(i.yb)(e),Object(i.ob)(e,\"URL\")?Object(i.Hb)(e):Object(i.nb)(String(e));case i.S.RESOURCE_URL:if(Object(i.ob)(e,\"ResourceURL\"))return Object(i.Hb)(e);throw new Error(\"unsafe value used in a resource URL context (see https://g.co/ng/security#xss)\");default:throw new Error(`Unexpected SecurityContext ${t} (see https://g.co/ng/security#xss)`)}}bypassSecurityTrustHtml(t){return Object(i.pb)(t)}bypassSecurityTrustStyle(t){return Object(i.sb)(t)}bypassSecurityTrustScript(t){return Object(i.rb)(t)}bypassSecurityTrustUrl(t){return Object(i.tb)(t)}bypassSecurityTrustResourceUrl(t){return Object(i.qb)(t)}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(r.d))},t.\\u0275prov=Object(i.Tb)({factory:function(){return D(Object(i.hc)(i.t))},token:t,providedIn:\"root\"}),t})();const P=[{provide:i.K,useValue:r.B},{provide:i.L,useValue:function(){o.makeCurrent(),h.init()},multi:!0},{provide:r.d,useFactory:function(){return Object(i.Fb)(document),document},deps:[]}],R=Object(i.bb)(i.hb,\"browser\",P),z=[[],{provide:i.kb,useValue:\"root\"},{provide:i.r,useFactory:function(){return new i.r},deps:[]},{provide:d,useClass:T,multi:!0,deps:[r.d,i.H,i.K]},{provide:d,useClass:E,multi:!0,deps:[r.d]},[],{provide:x,useClass:x,deps:[f,g,i.c]},{provide:i.P,useExisting:x},{provide:m,useExisting:g},{provide:g,useClass:g,deps:[r.d]},{provide:i.W,useClass:i.W,deps:[i.H]},{provide:f,useClass:f,deps:[d,i.H]},[]];let j=(()=>{class t{constructor(t){if(t)throw new Error(\"BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.\")}static withServerTransition(e){return{ngModule:t,providers:[{provide:i.c,useValue:e.appId},{provide:c,useExisting:i.c},u]}}}return t.\\u0275mod=i.Vb({type:t}),t.\\u0275inj=i.Ub({factory:function(e){return new(e||t)(i.hc(t,12))},providers:z,imports:[r.c,i.f]}),t})();\"undefined\"!=typeof window&&window},jnO4:function(t,e,n){!function(t){\"use strict\";var e={1:\"\\u0661\",2:\"\\u0662\",3:\"\\u0663\",4:\"\\u0664\",5:\"\\u0665\",6:\"\\u0666\",7:\"\\u0667\",8:\"\\u0668\",9:\"\\u0669\",0:\"\\u0660\"},n={\"\\u0661\":\"1\",\"\\u0662\":\"2\",\"\\u0663\":\"3\",\"\\u0664\":\"4\",\"\\u0665\":\"5\",\"\\u0666\":\"6\",\"\\u0667\":\"7\",\"\\u0668\":\"8\",\"\\u0669\":\"9\",\"\\u0660\":\"0\"},r=function(t){return 0===t?0:1===t?1:2===t?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5},i={s:[\"\\u0623\\u0642\\u0644 \\u0645\\u0646 \\u062b\\u0627\\u0646\\u064a\\u0629\",\"\\u062b\\u0627\\u0646\\u064a\\u0629 \\u0648\\u0627\\u062d\\u062f\\u0629\",[\"\\u062b\\u0627\\u0646\\u064a\\u062a\\u0627\\u0646\",\"\\u062b\\u0627\\u0646\\u064a\\u062a\\u064a\\u0646\"],\"%d \\u062b\\u0648\\u0627\\u0646\",\"%d \\u062b\\u0627\\u0646\\u064a\\u0629\",\"%d \\u062b\\u0627\\u0646\\u064a\\u0629\"],m:[\"\\u0623\\u0642\\u0644 \\u0645\\u0646 \\u062f\\u0642\\u064a\\u0642\\u0629\",\"\\u062f\\u0642\\u064a\\u0642\\u0629 \\u0648\\u0627\\u062d\\u062f\\u0629\",[\"\\u062f\\u0642\\u064a\\u0642\\u062a\\u0627\\u0646\",\"\\u062f\\u0642\\u064a\\u0642\\u062a\\u064a\\u0646\"],\"%d \\u062f\\u0642\\u0627\\u0626\\u0642\",\"%d \\u062f\\u0642\\u064a\\u0642\\u0629\",\"%d \\u062f\\u0642\\u064a\\u0642\\u0629\"],h:[\"\\u0623\\u0642\\u0644 \\u0645\\u0646 \\u0633\\u0627\\u0639\\u0629\",\"\\u0633\\u0627\\u0639\\u0629 \\u0648\\u0627\\u062d\\u062f\\u0629\",[\"\\u0633\\u0627\\u0639\\u062a\\u0627\\u0646\",\"\\u0633\\u0627\\u0639\\u062a\\u064a\\u0646\"],\"%d \\u0633\\u0627\\u0639\\u0627\\u062a\",\"%d \\u0633\\u0627\\u0639\\u0629\",\"%d \\u0633\\u0627\\u0639\\u0629\"],d:[\"\\u0623\\u0642\\u0644 \\u0645\\u0646 \\u064a\\u0648\\u0645\",\"\\u064a\\u0648\\u0645 \\u0648\\u0627\\u062d\\u062f\",[\"\\u064a\\u0648\\u0645\\u0627\\u0646\",\"\\u064a\\u0648\\u0645\\u064a\\u0646\"],\"%d \\u0623\\u064a\\u0627\\u0645\",\"%d \\u064a\\u0648\\u0645\\u064b\\u0627\",\"%d \\u064a\\u0648\\u0645\"],M:[\"\\u0623\\u0642\\u0644 \\u0645\\u0646 \\u0634\\u0647\\u0631\",\"\\u0634\\u0647\\u0631 \\u0648\\u0627\\u062d\\u062f\",[\"\\u0634\\u0647\\u0631\\u0627\\u0646\",\"\\u0634\\u0647\\u0631\\u064a\\u0646\"],\"%d \\u0623\\u0634\\u0647\\u0631\",\"%d \\u0634\\u0647\\u0631\\u0627\",\"%d \\u0634\\u0647\\u0631\"],y:[\"\\u0623\\u0642\\u0644 \\u0645\\u0646 \\u0639\\u0627\\u0645\",\"\\u0639\\u0627\\u0645 \\u0648\\u0627\\u062d\\u062f\",[\"\\u0639\\u0627\\u0645\\u0627\\u0646\",\"\\u0639\\u0627\\u0645\\u064a\\u0646\"],\"%d \\u0623\\u0639\\u0648\\u0627\\u0645\",\"%d \\u0639\\u0627\\u0645\\u064b\\u0627\",\"%d \\u0639\\u0627\\u0645\"]},a=function(t){return function(e,n,a,o){var s=r(e),l=i[t][r(e)];return 2===s&&(l=l[n?0:1]),l.replace(/%d/i,e)}},o=[\"\\u064a\\u0646\\u0627\\u064a\\u0631\",\"\\u0641\\u0628\\u0631\\u0627\\u064a\\u0631\",\"\\u0645\\u0627\\u0631\\u0633\",\"\\u0623\\u0628\\u0631\\u064a\\u0644\",\"\\u0645\\u0627\\u064a\\u0648\",\"\\u064a\\u0648\\u0646\\u064a\\u0648\",\"\\u064a\\u0648\\u0644\\u064a\\u0648\",\"\\u0623\\u063a\\u0633\\u0637\\u0633\",\"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"];t.defineLocale(\"ar\",{months:o,monthsShort:o,weekdays:\"\\u0627\\u0644\\u0623\\u062d\\u062f_\\u0627\\u0644\\u0625\\u062b\\u0646\\u064a\\u0646_\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621_\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621_\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633_\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629_\\u0627\\u0644\\u0633\\u0628\\u062a\".split(\"_\"),weekdaysShort:\"\\u0623\\u062d\\u062f_\\u0625\\u062b\\u0646\\u064a\\u0646_\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621_\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621_\\u062e\\u0645\\u064a\\u0633_\\u062c\\u0645\\u0639\\u0629_\\u0633\\u0628\\u062a\".split(\"_\"),weekdaysMin:\"\\u062d_\\u0646_\\u062b_\\u0631_\\u062e_\\u062c_\\u0633\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"D/\\u200fM/\\u200fYYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/\\u0635|\\u0645/,isPM:function(t){return\"\\u0645\"===t},meridiem:function(t,e,n){return t<12?\"\\u0635\":\"\\u0645\"},calendar:{sameDay:\"[\\u0627\\u0644\\u064a\\u0648\\u0645 \\u0639\\u0646\\u062f \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",nextDay:\"[\\u063a\\u062f\\u064b\\u0627 \\u0639\\u0646\\u062f \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",nextWeek:\"dddd [\\u0639\\u0646\\u062f \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",lastDay:\"[\\u0623\\u0645\\u0633 \\u0639\\u0646\\u062f \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",lastWeek:\"dddd [\\u0639\\u0646\\u062f \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",sameElse:\"L\"},relativeTime:{future:\"\\u0628\\u0639\\u062f %s\",past:\"\\u0645\\u0646\\u0630 %s\",s:a(\"s\"),ss:a(\"s\"),m:a(\"m\"),mm:a(\"m\"),h:a(\"h\"),hh:a(\"h\"),d:a(\"d\"),dd:a(\"d\"),M:a(\"M\"),MM:a(\"M\"),y:a(\"y\"),yy:a(\"y\")},preparse:function(t){return t.replace(/[\\u0661\\u0662\\u0663\\u0664\\u0665\\u0666\\u0667\\u0668\\u0669\\u0660]/g,(function(t){return n[t]})).replace(/\\u060c/g,\",\")},postformat:function(t){return t.replace(/\\d/g,(function(t){return e[t]})).replace(/,/g,\"\\u060c\")},week:{dow:6,doy:12}})}(n(\"wd/R\"))},jtHE:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return g}));var r=n(\"XNiG\"),i=n(\"3N8a\");class a extends i.a{constructor(t,e){super(t,e),this.scheduler=t,this.work=e}schedule(t,e=0){return e>0?super.schedule(t,e):(this.delay=e,this.state=t,this.scheduler.flush(this),this)}execute(t,e){return e>0||this.closed?super.execute(t,e):this._execute(t,e)}requestAsyncId(t,e,n=0){return null!==n&&n>0||null===n&&this.delay>0?super.requestAsyncId(t,e,n):t.flush(this)}}var o=n(\"IjjT\");class s extends o.a{}const l=new s(a);var c=n(\"quSY\"),u=n(\"7o/Q\"),h=n(\"WMd4\");class d extends u.a{constructor(t,e,n=0){super(t),this.scheduler=e,this.delay=n}static dispatch(t){const{notification:e,destination:n}=t;e.observe(n),this.unsubscribe()}scheduleMessage(t){this.destination.add(this.scheduler.schedule(d.dispatch,this.delay,new f(t,this.destination)))}_next(t){this.scheduleMessage(h.a.createNext(t))}_error(t){this.scheduleMessage(h.a.createError(t)),this.unsubscribe()}_complete(){this.scheduleMessage(h.a.createComplete()),this.unsubscribe()}}class f{constructor(t,e){this.notification=t,this.destination=e}}var p=n(\"9ppp\"),m=n(\"Ylt2\");class g extends r.a{constructor(t=Number.POSITIVE_INFINITY,e=Number.POSITIVE_INFINITY,n){super(),this.scheduler=n,this._events=[],this._infiniteTimeWindow=!1,this._bufferSize=t<1?1:t,this._windowTime=e<1?1:e,e===Number.POSITIVE_INFINITY?(this._infiniteTimeWindow=!0,this.next=this.nextInfiniteTimeWindow):this.next=this.nextTimeWindow}nextInfiniteTimeWindow(t){if(!this.isStopped){const e=this._events;e.push(t),e.length>this._bufferSize&&e.shift()}super.next(t)}nextTimeWindow(t){this.isStopped||(this._events.push(new y(this._getNow(),t)),this._trimBufferThenGetEvents()),super.next(t)}_subscribe(t){const e=this._infiniteTimeWindow,n=e?this._events:this._trimBufferThenGetEvents(),r=this.scheduler,i=n.length;let a;if(this.closed)throw new p.a;if(this.isStopped||this.hasError?a=c.a.EMPTY:(this.observers.push(t),a=new m.a(this,t)),r&&t.add(t=new d(t,r)),e)for(let o=0;o<i&&!t.closed;o++)t.next(n[o]);else for(let o=0;o<i&&!t.closed;o++)t.next(n[o].value);return this.hasError?t.error(this.thrownError):this.isStopped&&t.complete(),a}_getNow(){return(this.scheduler||l).now()}_trimBufferThenGetEvents(){const t=this._getNow(),e=this._bufferSize,n=this._windowTime,r=this._events,i=r.length;let a=0;for(;a<i&&!(t-r[a].time<n);)a++;return i>e&&(a=Math.max(a,i-e)),a>0&&r.splice(0,a),r}}class y{constructor(t,e){this.time=t,this.value=e}}},kEOa:function(t,e,n){!function(t){\"use strict\";var e={1:\"\\u09e7\",2:\"\\u09e8\",3:\"\\u09e9\",4:\"\\u09ea\",5:\"\\u09eb\",6:\"\\u09ec\",7:\"\\u09ed\",8:\"\\u09ee\",9:\"\\u09ef\",0:\"\\u09e6\"},n={\"\\u09e7\":\"1\",\"\\u09e8\":\"2\",\"\\u09e9\":\"3\",\"\\u09ea\":\"4\",\"\\u09eb\":\"5\",\"\\u09ec\":\"6\",\"\\u09ed\":\"7\",\"\\u09ee\":\"8\",\"\\u09ef\":\"9\",\"\\u09e6\":\"0\"};t.defineLocale(\"bn\",{months:\"\\u099c\\u09be\\u09a8\\u09c1\\u09df\\u09be\\u09b0\\u09bf_\\u09ab\\u09c7\\u09ac\\u09cd\\u09b0\\u09c1\\u09df\\u09be\\u09b0\\u09bf_\\u09ae\\u09be\\u09b0\\u09cd\\u099a_\\u098f\\u09aa\\u09cd\\u09b0\\u09bf\\u09b2_\\u09ae\\u09c7_\\u099c\\u09c1\\u09a8_\\u099c\\u09c1\\u09b2\\u09be\\u0987_\\u0986\\u0997\\u09b8\\u09cd\\u099f_\\u09b8\\u09c7\\u09aa\\u09cd\\u099f\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0_\\u0985\\u0995\\u09cd\\u099f\\u09cb\\u09ac\\u09b0_\\u09a8\\u09ad\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0_\\u09a1\\u09bf\\u09b8\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0\".split(\"_\"),monthsShort:\"\\u099c\\u09be\\u09a8\\u09c1_\\u09ab\\u09c7\\u09ac\\u09cd\\u09b0\\u09c1_\\u09ae\\u09be\\u09b0\\u09cd\\u099a_\\u098f\\u09aa\\u09cd\\u09b0\\u09bf\\u09b2_\\u09ae\\u09c7_\\u099c\\u09c1\\u09a8_\\u099c\\u09c1\\u09b2\\u09be\\u0987_\\u0986\\u0997\\u09b8\\u09cd\\u099f_\\u09b8\\u09c7\\u09aa\\u09cd\\u099f_\\u0985\\u0995\\u09cd\\u099f\\u09cb_\\u09a8\\u09ad\\u09c7_\\u09a1\\u09bf\\u09b8\\u09c7\".split(\"_\"),weekdays:\"\\u09b0\\u09ac\\u09bf\\u09ac\\u09be\\u09b0_\\u09b8\\u09cb\\u09ae\\u09ac\\u09be\\u09b0_\\u09ae\\u0999\\u09cd\\u0997\\u09b2\\u09ac\\u09be\\u09b0_\\u09ac\\u09c1\\u09a7\\u09ac\\u09be\\u09b0_\\u09ac\\u09c3\\u09b9\\u09b8\\u09cd\\u09aa\\u09a4\\u09bf\\u09ac\\u09be\\u09b0_\\u09b6\\u09c1\\u0995\\u09cd\\u09b0\\u09ac\\u09be\\u09b0_\\u09b6\\u09a8\\u09bf\\u09ac\\u09be\\u09b0\".split(\"_\"),weekdaysShort:\"\\u09b0\\u09ac\\u09bf_\\u09b8\\u09cb\\u09ae_\\u09ae\\u0999\\u09cd\\u0997\\u09b2_\\u09ac\\u09c1\\u09a7_\\u09ac\\u09c3\\u09b9\\u09b8\\u09cd\\u09aa\\u09a4\\u09bf_\\u09b6\\u09c1\\u0995\\u09cd\\u09b0_\\u09b6\\u09a8\\u09bf\".split(\"_\"),weekdaysMin:\"\\u09b0\\u09ac\\u09bf_\\u09b8\\u09cb\\u09ae_\\u09ae\\u0999\\u09cd\\u0997\\u09b2_\\u09ac\\u09c1\\u09a7_\\u09ac\\u09c3\\u09b9_\\u09b6\\u09c1\\u0995\\u09cd\\u09b0_\\u09b6\\u09a8\\u09bf\".split(\"_\"),longDateFormat:{LT:\"A h:mm \\u09b8\\u09ae\\u09df\",LTS:\"A h:mm:ss \\u09b8\\u09ae\\u09df\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm \\u09b8\\u09ae\\u09df\",LLLL:\"dddd, D MMMM YYYY, A h:mm \\u09b8\\u09ae\\u09df\"},calendar:{sameDay:\"[\\u0986\\u099c] LT\",nextDay:\"[\\u0986\\u0997\\u09be\\u09ae\\u09c0\\u0995\\u09be\\u09b2] LT\",nextWeek:\"dddd, LT\",lastDay:\"[\\u0997\\u09a4\\u0995\\u09be\\u09b2] LT\",lastWeek:\"[\\u0997\\u09a4] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s \\u09aa\\u09b0\\u09c7\",past:\"%s \\u0986\\u0997\\u09c7\",s:\"\\u0995\\u09df\\u09c7\\u0995 \\u09b8\\u09c7\\u0995\\u09c7\\u09a8\\u09cd\\u09a1\",ss:\"%d \\u09b8\\u09c7\\u0995\\u09c7\\u09a8\\u09cd\\u09a1\",m:\"\\u098f\\u0995 \\u09ae\\u09bf\\u09a8\\u09bf\\u099f\",mm:\"%d \\u09ae\\u09bf\\u09a8\\u09bf\\u099f\",h:\"\\u098f\\u0995 \\u0998\\u09a8\\u09cd\\u099f\\u09be\",hh:\"%d \\u0998\\u09a8\\u09cd\\u099f\\u09be\",d:\"\\u098f\\u0995 \\u09a6\\u09bf\\u09a8\",dd:\"%d \\u09a6\\u09bf\\u09a8\",M:\"\\u098f\\u0995 \\u09ae\\u09be\\u09b8\",MM:\"%d \\u09ae\\u09be\\u09b8\",y:\"\\u098f\\u0995 \\u09ac\\u099b\\u09b0\",yy:\"%d \\u09ac\\u099b\\u09b0\"},preparse:function(t){return t.replace(/[\\u09e7\\u09e8\\u09e9\\u09ea\\u09eb\\u09ec\\u09ed\\u09ee\\u09ef\\u09e6]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\\d/g,(function(t){return e[t]}))},meridiemParse:/\\u09b0\\u09be\\u09a4|\\u09b8\\u0995\\u09be\\u09b2|\\u09a6\\u09c1\\u09aa\\u09c1\\u09b0|\\u09ac\\u09bf\\u0995\\u09be\\u09b2|\\u09b0\\u09be\\u09a4/,meridiemHour:function(t,e){return 12===t&&(t=0),\"\\u09b0\\u09be\\u09a4\"===e&&t>=4||\"\\u09a6\\u09c1\\u09aa\\u09c1\\u09b0\"===e&&t<5||\"\\u09ac\\u09bf\\u0995\\u09be\\u09b2\"===e?t+12:t},meridiem:function(t,e,n){return t<4?\"\\u09b0\\u09be\\u09a4\":t<10?\"\\u09b8\\u0995\\u09be\\u09b2\":t<17?\"\\u09a6\\u09c1\\u09aa\\u09c1\\u09b0\":t<20?\"\\u09ac\\u09bf\\u0995\\u09be\\u09b2\":\"\\u09b0\\u09be\\u09a4\"},week:{dow:0,doy:6}})}(n(\"wd/R\"))},kJWO:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return r}));const r=(()=>\"function\"==typeof Symbol&&Symbol.observable||\"@@observable\")()},kOpN:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"zh-tw\",{months:\"\\u4e00\\u6708_\\u4e8c\\u6708_\\u4e09\\u6708_\\u56db\\u6708_\\u4e94\\u6708_\\u516d\\u6708_\\u4e03\\u6708_\\u516b\\u6708_\\u4e5d\\u6708_\\u5341\\u6708_\\u5341\\u4e00\\u6708_\\u5341\\u4e8c\\u6708\".split(\"_\"),monthsShort:\"1\\u6708_2\\u6708_3\\u6708_4\\u6708_5\\u6708_6\\u6708_7\\u6708_8\\u6708_9\\u6708_10\\u6708_11\\u6708_12\\u6708\".split(\"_\"),weekdays:\"\\u661f\\u671f\\u65e5_\\u661f\\u671f\\u4e00_\\u661f\\u671f\\u4e8c_\\u661f\\u671f\\u4e09_\\u661f\\u671f\\u56db_\\u661f\\u671f\\u4e94_\\u661f\\u671f\\u516d\".split(\"_\"),weekdaysShort:\"\\u9031\\u65e5_\\u9031\\u4e00_\\u9031\\u4e8c_\\u9031\\u4e09_\\u9031\\u56db_\\u9031\\u4e94_\\u9031\\u516d\".split(\"_\"),weekdaysMin:\"\\u65e5_\\u4e00_\\u4e8c_\\u4e09_\\u56db_\\u4e94_\\u516d\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY\\u5e74M\\u6708D\\u65e5\",LLL:\"YYYY\\u5e74M\\u6708D\\u65e5 HH:mm\",LLLL:\"YYYY\\u5e74M\\u6708D\\u65e5dddd HH:mm\",l:\"YYYY/M/D\",ll:\"YYYY\\u5e74M\\u6708D\\u65e5\",lll:\"YYYY\\u5e74M\\u6708D\\u65e5 HH:mm\",llll:\"YYYY\\u5e74M\\u6708D\\u65e5dddd HH:mm\"},meridiemParse:/\\u51cc\\u6668|\\u65e9\\u4e0a|\\u4e0a\\u5348|\\u4e2d\\u5348|\\u4e0b\\u5348|\\u665a\\u4e0a/,meridiemHour:function(t,e){return 12===t&&(t=0),\"\\u51cc\\u6668\"===e||\"\\u65e9\\u4e0a\"===e||\"\\u4e0a\\u5348\"===e?t:\"\\u4e2d\\u5348\"===e?t>=11?t:t+12:\"\\u4e0b\\u5348\"===e||\"\\u665a\\u4e0a\"===e?t+12:void 0},meridiem:function(t,e,n){var r=100*t+e;return r<600?\"\\u51cc\\u6668\":r<900?\"\\u65e9\\u4e0a\":r<1130?\"\\u4e0a\\u5348\":r<1230?\"\\u4e2d\\u5348\":r<1800?\"\\u4e0b\\u5348\":\"\\u665a\\u4e0a\"},calendar:{sameDay:\"[\\u4eca\\u5929] LT\",nextDay:\"[\\u660e\\u5929] LT\",nextWeek:\"[\\u4e0b]dddd LT\",lastDay:\"[\\u6628\\u5929] LT\",lastWeek:\"[\\u4e0a]dddd LT\",sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}(\\u65e5|\\u6708|\\u9031)/,ordinal:function(t,e){switch(e){case\"d\":case\"D\":case\"DDD\":return t+\"\\u65e5\";case\"M\":return t+\"\\u6708\";case\"w\":case\"W\":return t+\"\\u9031\";default:return t}},relativeTime:{future:\"%s\\u5f8c\",past:\"%s\\u524d\",s:\"\\u5e7e\\u79d2\",ss:\"%d \\u79d2\",m:\"1 \\u5206\\u9418\",mm:\"%d \\u5206\\u9418\",h:\"1 \\u5c0f\\u6642\",hh:\"%d \\u5c0f\\u6642\",d:\"1 \\u5929\",dd:\"%d \\u5929\",M:\"1 \\u500b\\u6708\",MM:\"%d \\u500b\\u6708\",y:\"1 \\u5e74\",yy:\"%d \\u5e74\"}})}(n(\"wd/R\"))},kmnG:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return $})),n.d(e,\"b\",(function(){return j})),n.d(e,\"c\",(function(){return Q})),n.d(e,\"d\",(function(){return N})),n.d(e,\"e\",(function(){return tt})),n.d(e,\"f\",(function(){return H})),n.d(e,\"g\",(function(){return V})),n.d(e,\"h\",(function(){return G}));var r=n(\"GU7r\"),i=n(\"ofXK\"),a=n(\"fXoL\"),o=n(\"FKr1\"),s=n(\"8LU1\"),l=n(\"XNiG\"),c=n(\"VRyK\"),u=n(\"xgIS\"),h=n(\"JX91\"),d=n(\"1G5W\"),f=n(\"IzEk\"),p=n(\"R0Ic\"),m=n(\"R1ws\"),g=n(\"cH1L\"),y=n(\"nLfN\");const v=[\"underline\"],_=[\"connectionContainer\"],b=[\"inputContainer\"],x=[\"label\"];function w(t,e){1&t&&(a.bc(0),a.dc(1,\"div\",14),a.Yb(2,\"div\",15),a.Yb(3,\"div\",16),a.Yb(4,\"div\",17),a.cc(),a.dc(5,\"div\",18),a.Yb(6,\"div\",15),a.Yb(7,\"div\",16),a.Yb(8,\"div\",17),a.cc(),a.ac())}function k(t,e){1&t&&(a.dc(0,\"div\",19),a.tc(1,1),a.cc())}function M(t,e){if(1&t&&(a.bc(0),a.tc(1,2),a.dc(2,\"span\"),a.Oc(3),a.cc(),a.ac()),2&t){const t=a.pc(2);a.Lb(3),a.Pc(t._control.placeholder)}}function T(t,e){1&t&&a.tc(0,3,[\"*ngSwitchCase\",\"true\"])}function S(t,e){1&t&&(a.dc(0,\"span\",23),a.Oc(1,\" *\"),a.cc())}function A(t,e){if(1&t){const t=a.ec();a.dc(0,\"label\",20,21),a.lc(\"cdkObserveContent\",(function(){return a.Ec(t),a.pc().updateOutlineGap()})),a.Mc(2,M,4,1,\"ng-container\",12),a.Mc(3,T,1,0,\"ng-content\",12),a.Mc(4,S,2,0,\"span\",22),a.cc()}if(2&t){const t=a.pc();a.Pb(\"mat-empty\",t._control.empty&&!t._shouldAlwaysFloat())(\"mat-form-field-empty\",t._control.empty&&!t._shouldAlwaysFloat())(\"mat-accent\",\"accent\"==t.color)(\"mat-warn\",\"warn\"==t.color),a.vc(\"cdkObserveContentDisabled\",\"outline\"!=t.appearance)(\"id\",t._labelId)(\"ngSwitch\",t._hasLabel()),a.Mb(\"for\",t._control.id)(\"aria-owns\",t._control.id),a.Lb(2),a.vc(\"ngSwitchCase\",!1),a.Lb(1),a.vc(\"ngSwitchCase\",!0),a.Lb(1),a.vc(\"ngIf\",!t.hideRequiredMarker&&t._control.required&&!t._control.disabled)}}function L(t,e){1&t&&(a.dc(0,\"div\",24),a.tc(1,4),a.cc())}function C(t,e){if(1&t&&(a.dc(0,\"div\",25,26),a.Yb(2,\"span\",27),a.cc()),2&t){const t=a.pc();a.Lb(2),a.Pb(\"mat-accent\",\"accent\"==t.color)(\"mat-warn\",\"warn\"==t.color)}}function E(t,e){if(1&t&&(a.dc(0,\"div\"),a.tc(1,5),a.cc()),2&t){const t=a.pc();a.vc(\"@transitionMessages\",t._subscriptAnimationState)}}function O(t,e){if(1&t&&(a.dc(0,\"div\",31),a.Oc(1),a.cc()),2&t){const t=a.pc(2);a.vc(\"id\",t._hintLabelId),a.Lb(1),a.Pc(t.hintLabel)}}function D(t,e){if(1&t&&(a.dc(0,\"div\",28),a.Mc(1,O,2,2,\"div\",29),a.tc(2,6),a.Yb(3,\"div\",30),a.tc(4,7),a.cc()),2&t){const t=a.pc();a.vc(\"@transitionMessages\",t._subscriptAnimationState),a.Lb(1),a.vc(\"ngIf\",t.hintLabel)}}const I=[\"*\",[[\"\",\"matPrefix\",\"\"]],[[\"mat-placeholder\"]],[[\"mat-label\"]],[[\"\",\"matSuffix\",\"\"]],[[\"mat-error\"]],[[\"mat-hint\",3,\"align\",\"end\"]],[[\"mat-hint\",\"align\",\"end\"]]],P=[\"*\",\"[matPrefix]\",\"mat-placeholder\",\"mat-label\",\"[matSuffix]\",\"mat-error\",\"mat-hint:not([align='end'])\",\"mat-hint[align='end']\"];let R=0;const z=new a.w(\"MatError\");let j=(()=>{class t{constructor(){this.id=\"mat-error-\"+R++}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275dir=a.Sb({type:t,selectors:[[\"mat-error\"]],hostAttrs:[\"role\",\"alert\",1,\"mat-error\"],hostVars:1,hostBindings:function(t,e){2&t&&a.Mb(\"id\",e.id)},inputs:{id:\"id\"},features:[a.Kb([{provide:z,useExisting:t}])]}),t})();const F={transitionMessages:Object(p.m)(\"transitionMessages\",[Object(p.j)(\"enter\",Object(p.k)({opacity:1,transform:\"translateY(0%)\"})),Object(p.l)(\"void => enter\",[Object(p.k)({opacity:0,transform:\"translateY(-100%)\"}),Object(p.e)(\"300ms cubic-bezier(0.55, 0, 0.55, 0.2)\")])])};let N=(()=>{class t{}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275dir=a.Sb({type:t}),t})(),B=0;const Y=new a.w(\"MatHint\");let H=(()=>{class t{constructor(){this.align=\"start\",this.id=\"mat-hint-\"+B++}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275dir=a.Sb({type:t,selectors:[[\"mat-hint\"]],hostAttrs:[1,\"mat-hint\"],hostVars:4,hostBindings:function(t,e){2&t&&(a.Mb(\"id\",e.id)(\"align\",null),a.Pb(\"mat-form-field-hint-end\",\"end\"===e.align))},inputs:{align:\"align\",id:\"id\"},features:[a.Kb([{provide:Y,useExisting:t}])]}),t})(),V=(()=>{class t{}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275dir=a.Sb({type:t,selectors:[[\"mat-label\"]]}),t})(),U=(()=>{class t{}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275dir=a.Sb({type:t,selectors:[[\"mat-placeholder\"]]}),t})();const W=new a.w(\"MatPrefix\"),q=new a.w(\"MatSuffix\");let G=(()=>{class t{}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275dir=a.Sb({type:t,selectors:[[\"\",\"matSuffix\",\"\"]],features:[a.Kb([{provide:q,useExisting:t}])]}),t})(),X=0;class Z{constructor(t){this._elementRef=t}}const J=Object(o.w)(Z,\"primary\"),K=new a.w(\"MAT_FORM_FIELD_DEFAULT_OPTIONS\"),$=new a.w(\"MatFormField\");let Q=(()=>{class t extends J{constructor(t,e,n,r,i,a,o,s){super(t),this._elementRef=t,this._changeDetectorRef=e,this._dir=r,this._defaults=i,this._platform=a,this._ngZone=o,this._outlineGapCalculationNeededImmediately=!1,this._outlineGapCalculationNeededOnStable=!1,this._destroyed=new l.a,this._showAlwaysAnimate=!1,this._subscriptAnimationState=\"\",this._hintLabel=\"\",this._hintLabelId=\"mat-hint-\"+X++,this._labelId=\"mat-form-field-label-\"+X++,this.floatLabel=this._getDefaultFloatLabelState(),this._animationsEnabled=\"NoopAnimations\"!==s,this.appearance=i&&i.appearance?i.appearance:\"legacy\",this._hideRequiredMarker=!(!i||null==i.hideRequiredMarker)&&i.hideRequiredMarker}get appearance(){return this._appearance}set appearance(t){const e=this._appearance;this._appearance=t||this._defaults&&this._defaults.appearance||\"legacy\",\"outline\"===this._appearance&&e!==t&&(this._outlineGapCalculationNeededOnStable=!0)}get hideRequiredMarker(){return this._hideRequiredMarker}set hideRequiredMarker(t){this._hideRequiredMarker=Object(s.c)(t)}_shouldAlwaysFloat(){return\"always\"===this.floatLabel&&!this._showAlwaysAnimate}_canLabelFloat(){return\"never\"!==this.floatLabel}get hintLabel(){return this._hintLabel}set hintLabel(t){this._hintLabel=t,this._processHints()}get floatLabel(){return\"legacy\"!==this.appearance&&\"never\"===this._floatLabel?\"auto\":this._floatLabel}set floatLabel(t){t!==this._floatLabel&&(this._floatLabel=t||this._getDefaultFloatLabelState(),this._changeDetectorRef.markForCheck())}get _control(){return this._explicitFormFieldControl||this._controlNonStatic||this._controlStatic}set _control(t){this._explicitFormFieldControl=t}getLabelId(){return this._hasFloatingLabel()?this._labelId:null}getConnectedOverlayOrigin(){return this._connectionContainerRef||this._elementRef}ngAfterContentInit(){this._validateControlChild();const t=this._control;t.controlType&&this._elementRef.nativeElement.classList.add(\"mat-form-field-type-\"+t.controlType),t.stateChanges.pipe(Object(h.a)(null)).subscribe(()=>{this._validatePlaceholders(),this._syncDescribedByIds(),this._changeDetectorRef.markForCheck()}),t.ngControl&&t.ngControl.valueChanges&&t.ngControl.valueChanges.pipe(Object(d.a)(this._destroyed)).subscribe(()=>this._changeDetectorRef.markForCheck()),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.pipe(Object(d.a)(this._destroyed)).subscribe(()=>{this._outlineGapCalculationNeededOnStable&&this.updateOutlineGap()})}),Object(c.a)(this._prefixChildren.changes,this._suffixChildren.changes).subscribe(()=>{this._outlineGapCalculationNeededOnStable=!0,this._changeDetectorRef.markForCheck()}),this._hintChildren.changes.pipe(Object(h.a)(null)).subscribe(()=>{this._processHints(),this._changeDetectorRef.markForCheck()}),this._errorChildren.changes.pipe(Object(h.a)(null)).subscribe(()=>{this._syncDescribedByIds(),this._changeDetectorRef.markForCheck()}),this._dir&&this._dir.change.pipe(Object(d.a)(this._destroyed)).subscribe(()=>{\"function\"==typeof requestAnimationFrame?this._ngZone.runOutsideAngular(()=>{requestAnimationFrame(()=>this.updateOutlineGap())}):this.updateOutlineGap()})}ngAfterContentChecked(){this._validateControlChild(),this._outlineGapCalculationNeededImmediately&&this.updateOutlineGap()}ngAfterViewInit(){this._subscriptAnimationState=\"enter\",this._changeDetectorRef.detectChanges()}ngOnDestroy(){this._destroyed.next(),this._destroyed.complete()}_shouldForward(t){const e=this._control?this._control.ngControl:null;return e&&e[t]}_hasPlaceholder(){return!!(this._control&&this._control.placeholder||this._placeholderChild)}_hasLabel(){return!(!this._labelChildNonStatic&&!this._labelChildStatic)}_shouldLabelFloat(){return this._canLabelFloat()&&(this._control&&this._control.shouldLabelFloat||this._shouldAlwaysFloat())}_hideControlPlaceholder(){return\"legacy\"===this.appearance&&!this._hasLabel()||this._hasLabel()&&!this._shouldLabelFloat()}_hasFloatingLabel(){return this._hasLabel()||\"legacy\"===this.appearance&&this._hasPlaceholder()}_getDisplayedMessages(){return this._errorChildren&&this._errorChildren.length>0&&this._control.errorState?\"error\":\"hint\"}_animateAndLockLabel(){this._hasFloatingLabel()&&this._canLabelFloat()&&(this._animationsEnabled&&this._label&&(this._showAlwaysAnimate=!0,Object(u.a)(this._label.nativeElement,\"transitionend\").pipe(Object(f.a)(1)).subscribe(()=>{this._showAlwaysAnimate=!1})),this.floatLabel=\"always\",this._changeDetectorRef.markForCheck())}_validatePlaceholders(){}_processHints(){this._validateHints(),this._syncDescribedByIds()}_validateHints(){}_getDefaultFloatLabelState(){return this._defaults&&this._defaults.floatLabel||\"auto\"}_syncDescribedByIds(){if(this._control){let t=[];if(this._control.userAriaDescribedBy&&\"string\"==typeof this._control.userAriaDescribedBy&&t.push(...this._control.userAriaDescribedBy.split(\" \")),\"hint\"===this._getDisplayedMessages()){const e=this._hintChildren?this._hintChildren.find(t=>\"start\"===t.align):null,n=this._hintChildren?this._hintChildren.find(t=>\"end\"===t.align):null;e?t.push(e.id):this._hintLabel&&t.push(this._hintLabelId),n&&t.push(n.id)}else this._errorChildren&&t.push(...this._errorChildren.map(t=>t.id));this._control.setDescribedByIds(t)}}_validateControlChild(){}updateOutlineGap(){const t=this._label?this._label.nativeElement:null;if(\"outline\"!==this.appearance||!t||!t.children.length||!t.textContent.trim())return;if(!this._platform.isBrowser)return;if(!this._isAttachedToDOM())return void(this._outlineGapCalculationNeededImmediately=!0);let e=0,n=0;const r=this._connectionContainerRef.nativeElement,i=r.querySelectorAll(\".mat-form-field-outline-start\"),a=r.querySelectorAll(\".mat-form-field-outline-gap\");if(this._label&&this._label.nativeElement.children.length){const i=r.getBoundingClientRect();if(0===i.width&&0===i.height)return this._outlineGapCalculationNeededOnStable=!0,void(this._outlineGapCalculationNeededImmediately=!1);const a=this._getStartEnd(i),o=t.children,s=this._getStartEnd(o[0].getBoundingClientRect());let l=0;for(let t=0;t<o.length;t++)l+=o[t].offsetWidth;e=Math.abs(s-a)-5,n=l>0?.75*l+10:0}for(let o=0;o<i.length;o++)i[o].style.width=e+\"px\";for(let o=0;o<a.length;o++)a[o].style.width=n+\"px\";this._outlineGapCalculationNeededOnStable=this._outlineGapCalculationNeededImmediately=!1}_getStartEnd(t){return this._dir&&\"rtl\"===this._dir.value?t.right:t.left}_isAttachedToDOM(){const t=this._elementRef.nativeElement;if(t.getRootNode){const e=t.getRootNode();return e&&e!==t}return document.documentElement.contains(t)}}return t.\\u0275fac=function(e){return new(e||t)(a.Xb(a.p),a.Xb(a.j),a.Xb(a.p),a.Xb(g.b,8),a.Xb(K,8),a.Xb(y.a),a.Xb(a.H),a.Xb(m.a,8))},t.\\u0275cmp=a.Rb({type:t,selectors:[[\"mat-form-field\"]],contentQueries:function(t,e,n){if(1&t&&(a.Qb(n,N,!0),a.Hc(n,N,!0),a.Qb(n,V,!0),a.Hc(n,V,!0),a.Qb(n,U,!0),a.Qb(n,z,!0),a.Qb(n,Y,!0),a.Qb(n,W,!0),a.Qb(n,q,!0)),2&t){let t;a.Ac(t=a.mc())&&(e._controlNonStatic=t.first),a.Ac(t=a.mc())&&(e._controlStatic=t.first),a.Ac(t=a.mc())&&(e._labelChildNonStatic=t.first),a.Ac(t=a.mc())&&(e._labelChildStatic=t.first),a.Ac(t=a.mc())&&(e._placeholderChild=t.first),a.Ac(t=a.mc())&&(e._errorChildren=t),a.Ac(t=a.mc())&&(e._hintChildren=t),a.Ac(t=a.mc())&&(e._prefixChildren=t),a.Ac(t=a.mc())&&(e._suffixChildren=t)}},viewQuery:function(t,e){if(1&t&&(a.Sc(v,!0),a.Ic(_,!0),a.Sc(b,!0),a.Sc(x,!0)),2&t){let t;a.Ac(t=a.mc())&&(e.underlineRef=t.first),a.Ac(t=a.mc())&&(e._connectionContainerRef=t.first),a.Ac(t=a.mc())&&(e._inputContainerRef=t.first),a.Ac(t=a.mc())&&(e._label=t.first)}},hostAttrs:[1,\"mat-form-field\"],hostVars:44,hostBindings:function(t,e){2&t&&a.Pb(\"mat-form-field-appearance-standard\",\"standard\"==e.appearance)(\"mat-form-field-appearance-fill\",\"fill\"==e.appearance)(\"mat-form-field-appearance-outline\",\"outline\"==e.appearance)(\"mat-form-field-appearance-legacy\",\"legacy\"==e.appearance)(\"mat-form-field-invalid\",e._control.errorState)(\"mat-form-field-can-float\",e._canLabelFloat())(\"mat-form-field-should-float\",e._shouldLabelFloat())(\"mat-form-field-has-label\",e._hasFloatingLabel())(\"mat-form-field-hide-placeholder\",e._hideControlPlaceholder())(\"mat-form-field-disabled\",e._control.disabled)(\"mat-form-field-autofilled\",e._control.autofilled)(\"mat-focused\",e._control.focused)(\"mat-accent\",\"accent\"==e.color)(\"mat-warn\",\"warn\"==e.color)(\"ng-untouched\",e._shouldForward(\"untouched\"))(\"ng-touched\",e._shouldForward(\"touched\"))(\"ng-pristine\",e._shouldForward(\"pristine\"))(\"ng-dirty\",e._shouldForward(\"dirty\"))(\"ng-valid\",e._shouldForward(\"valid\"))(\"ng-invalid\",e._shouldForward(\"invalid\"))(\"ng-pending\",e._shouldForward(\"pending\"))(\"_mat-animation-noopable\",!e._animationsEnabled)},inputs:{color:\"color\",floatLabel:\"floatLabel\",appearance:\"appearance\",hideRequiredMarker:\"hideRequiredMarker\",hintLabel:\"hintLabel\"},exportAs:[\"matFormField\"],features:[a.Kb([{provide:$,useExisting:t}]),a.Ib],ngContentSelectors:P,decls:15,vars:8,consts:[[1,\"mat-form-field-wrapper\"],[1,\"mat-form-field-flex\",3,\"click\"],[\"connectionContainer\",\"\"],[4,\"ngIf\"],[\"class\",\"mat-form-field-prefix\",4,\"ngIf\"],[1,\"mat-form-field-infix\"],[\"inputContainer\",\"\"],[1,\"mat-form-field-label-wrapper\"],[\"class\",\"mat-form-field-label\",3,\"cdkObserveContentDisabled\",\"id\",\"mat-empty\",\"mat-form-field-empty\",\"mat-accent\",\"mat-warn\",\"ngSwitch\",\"cdkObserveContent\",4,\"ngIf\"],[\"class\",\"mat-form-field-suffix\",4,\"ngIf\"],[\"class\",\"mat-form-field-underline\",4,\"ngIf\"],[1,\"mat-form-field-subscript-wrapper\",3,\"ngSwitch\"],[4,\"ngSwitchCase\"],[\"class\",\"mat-form-field-hint-wrapper\",4,\"ngSwitchCase\"],[1,\"mat-form-field-outline\"],[1,\"mat-form-field-outline-start\"],[1,\"mat-form-field-outline-gap\"],[1,\"mat-form-field-outline-end\"],[1,\"mat-form-field-outline\",\"mat-form-field-outline-thick\"],[1,\"mat-form-field-prefix\"],[1,\"mat-form-field-label\",3,\"cdkObserveContentDisabled\",\"id\",\"ngSwitch\",\"cdkObserveContent\"],[\"label\",\"\"],[\"class\",\"mat-placeholder-required mat-form-field-required-marker\",\"aria-hidden\",\"true\",4,\"ngIf\"],[\"aria-hidden\",\"true\",1,\"mat-placeholder-required\",\"mat-form-field-required-marker\"],[1,\"mat-form-field-suffix\"],[1,\"mat-form-field-underline\"],[\"underline\",\"\"],[1,\"mat-form-field-ripple\"],[1,\"mat-form-field-hint-wrapper\"],[\"class\",\"mat-hint\",3,\"id\",4,\"ngIf\"],[1,\"mat-form-field-hint-spacer\"],[1,\"mat-hint\",3,\"id\"]],template:function(t,e){1&t&&(a.uc(I),a.dc(0,\"div\",0),a.dc(1,\"div\",1,2),a.lc(\"click\",(function(t){return e._control.onContainerClick&&e._control.onContainerClick(t)})),a.Mc(3,w,9,0,\"ng-container\",3),a.Mc(4,k,2,0,\"div\",4),a.dc(5,\"div\",5,6),a.tc(7),a.dc(8,\"span\",7),a.Mc(9,A,5,16,\"label\",8),a.cc(),a.cc(),a.Mc(10,L,2,0,\"div\",9),a.cc(),a.Mc(11,C,3,4,\"div\",10),a.dc(12,\"div\",11),a.Mc(13,E,2,1,\"div\",12),a.Mc(14,D,5,2,\"div\",13),a.cc(),a.cc()),2&t&&(a.Lb(3),a.vc(\"ngIf\",\"outline\"==e.appearance),a.Lb(1),a.vc(\"ngIf\",e._prefixChildren.length),a.Lb(5),a.vc(\"ngIf\",e._hasFloatingLabel()),a.Lb(1),a.vc(\"ngIf\",e._suffixChildren.length),a.Lb(1),a.vc(\"ngIf\",\"outline\"!=e.appearance),a.Lb(1),a.vc(\"ngSwitch\",e._getDisplayedMessages()),a.Lb(1),a.vc(\"ngSwitchCase\",\"error\"),a.Lb(1),a.vc(\"ngSwitchCase\",\"hint\"))},directives:[i.o,i.q,i.r,r.a],styles:[\".mat-form-field{display:inline-block;position:relative;text-align:left}[dir=rtl] .mat-form-field{text-align:right}.mat-form-field-wrapper{position:relative}.mat-form-field-flex{display:inline-flex;align-items:baseline;box-sizing:border-box;width:100%}.mat-form-field-prefix,.mat-form-field-suffix{white-space:nowrap;flex:none;position:relative}.mat-form-field-infix{display:block;position:relative;flex:auto;min-width:0;width:180px}.cdk-high-contrast-active .mat-form-field-infix{border-image:linear-gradient(transparent, transparent)}.mat-form-field-label-wrapper{position:absolute;left:0;box-sizing:content-box;width:100%;height:100%;overflow:hidden;pointer-events:none}[dir=rtl] .mat-form-field-label-wrapper{left:auto;right:0}.mat-form-field-label{position:absolute;left:0;font:inherit;pointer-events:none;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;transform-origin:0 0;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),color 400ms cubic-bezier(0.25, 0.8, 0.25, 1),width 400ms cubic-bezier(0.25, 0.8, 0.25, 1);display:none}[dir=rtl] .mat-form-field-label{transform-origin:100% 0;left:auto;right:0}.mat-form-field-empty.mat-form-field-label,.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{display:block}.mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{display:none}.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{display:block;transition:none}.mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-input-server[placeholder]:not(:placeholder-shown)+.mat-form-field-label-wrapper .mat-form-field-label{display:none}.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-can-float .mat-input-server[placeholder]:not(:placeholder-shown)+.mat-form-field-label-wrapper .mat-form-field-label{display:block}.mat-form-field-label:not(.mat-form-field-empty){transition:none}.mat-form-field-underline{position:absolute;width:100%;pointer-events:none;transform:scale3d(1, 1.0001, 1)}.mat-form-field-ripple{position:absolute;left:0;width:100%;transform-origin:50%;transform:scaleX(0.5);opacity:0;transition:background-color 300ms cubic-bezier(0.55, 0, 0.55, 0.2)}.mat-form-field.mat-focused .mat-form-field-ripple,.mat-form-field.mat-form-field-invalid .mat-form-field-ripple{opacity:1;transform:scaleX(1);transition:transform 300ms cubic-bezier(0.25, 0.8, 0.25, 1),opacity 100ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 300ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-subscript-wrapper{position:absolute;box-sizing:border-box;width:100%;overflow:hidden}.mat-form-field-subscript-wrapper .mat-icon,.mat-form-field-label-wrapper .mat-icon{width:1em;height:1em;font-size:inherit;vertical-align:baseline}.mat-form-field-hint-wrapper{display:flex}.mat-form-field-hint-spacer{flex:1 0 1em}.mat-error{display:block}.mat-form-field-control-wrapper{position:relative}.mat-form-field-hint-end{order:1}.mat-form-field._mat-animation-noopable .mat-form-field-label,.mat-form-field._mat-animation-noopable .mat-form-field-ripple{transition:none}\\n\",'.mat-form-field-appearance-fill .mat-form-field-flex{border-radius:4px 4px 0 0;padding:.75em .75em 0 .75em}.cdk-high-contrast-active .mat-form-field-appearance-fill .mat-form-field-flex{outline:solid 1px}.mat-form-field-appearance-fill .mat-form-field-underline::before{content:\"\";display:block;position:absolute;bottom:0;height:1px;width:100%}.mat-form-field-appearance-fill .mat-form-field-ripple{bottom:0;height:2px}.cdk-high-contrast-active .mat-form-field-appearance-fill .mat-form-field-ripple{height:0;border-top:solid 2px}.mat-form-field-appearance-fill:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{opacity:1;transform:none;transition:opacity 600ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-appearance-fill._mat-animation-noopable:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{transition:none}.mat-form-field-appearance-fill .mat-form-field-subscript-wrapper{padding:0 1em}\\n','.mat-input-element{font:inherit;background:transparent;color:currentColor;border:none;outline:none;padding:0;margin:0;width:100%;max-width:100%;vertical-align:bottom;text-align:inherit}.mat-input-element:-moz-ui-invalid{box-shadow:none}.mat-input-element::-ms-clear,.mat-input-element::-ms-reveal{display:none}.mat-input-element,.mat-input-element::-webkit-search-cancel-button,.mat-input-element::-webkit-search-decoration,.mat-input-element::-webkit-search-results-button,.mat-input-element::-webkit-search-results-decoration{-webkit-appearance:none}.mat-input-element::-webkit-contacts-auto-fill-button,.mat-input-element::-webkit-caps-lock-indicator,.mat-input-element::-webkit-credentials-auto-fill-button{visibility:hidden}.mat-input-element[type=date],.mat-input-element[type=datetime],.mat-input-element[type=datetime-local],.mat-input-element[type=month],.mat-input-element[type=week],.mat-input-element[type=time]{line-height:1}.mat-input-element[type=date]::after,.mat-input-element[type=datetime]::after,.mat-input-element[type=datetime-local]::after,.mat-input-element[type=month]::after,.mat-input-element[type=week]::after,.mat-input-element[type=time]::after{content:\" \";white-space:pre;width:1px}.mat-input-element::-webkit-inner-spin-button,.mat-input-element::-webkit-calendar-picker-indicator,.mat-input-element::-webkit-clear-button{font-size:.75em}.mat-input-element::placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-input-element::placeholder:-ms-input-placeholder{-ms-user-select:text}.mat-input-element::-moz-placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-input-element::-moz-placeholder:-ms-input-placeholder{-ms-user-select:text}.mat-input-element::-webkit-input-placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-input-element::-webkit-input-placeholder:-ms-input-placeholder{-ms-user-select:text}.mat-input-element:-ms-input-placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-input-element:-ms-input-placeholder:-ms-input-placeholder{-ms-user-select:text}.mat-form-field-hide-placeholder .mat-input-element::placeholder{color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-input-element::-moz-placeholder{color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-input-element::-webkit-input-placeholder{color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-input-element:-ms-input-placeholder{color:transparent !important;-webkit-text-fill-color:transparent;transition:none}textarea.mat-input-element{resize:vertical;overflow:auto}textarea.mat-input-element.cdk-textarea-autosize{resize:none}textarea.mat-input-element{padding:2px 0;margin:-2px 0}select.mat-input-element{-moz-appearance:none;-webkit-appearance:none;position:relative;background-color:transparent;display:inline-flex;box-sizing:border-box;padding-top:1em;top:-1em;margin-bottom:-1em}select.mat-input-element::-ms-expand{display:none}select.mat-input-element::-moz-focus-inner{border:0}select.mat-input-element:not(:disabled){cursor:pointer}select.mat-input-element::-ms-value{color:inherit;background:none}.mat-focused .cdk-high-contrast-active select.mat-input-element::-ms-value{color:inherit}.mat-form-field-type-mat-native-select .mat-form-field-infix::after{content:\"\";width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid;position:absolute;top:50%;right:0;margin-top:-2.5px;pointer-events:none}[dir=rtl] .mat-form-field-type-mat-native-select .mat-form-field-infix::after{right:auto;left:0}.mat-form-field-type-mat-native-select .mat-input-element{padding-right:15px}[dir=rtl] .mat-form-field-type-mat-native-select .mat-input-element{padding-right:0;padding-left:15px}.mat-form-field-type-mat-native-select .mat-form-field-label-wrapper{max-width:calc(100% - 10px)}.mat-form-field-type-mat-native-select.mat-form-field-appearance-outline .mat-form-field-infix::after{margin-top:-5px}.mat-form-field-type-mat-native-select.mat-form-field-appearance-fill .mat-form-field-infix::after{margin-top:-10px}\\n',\".mat-form-field-appearance-legacy .mat-form-field-label{transform:perspective(100px);-ms-transform:none}.mat-form-field-appearance-legacy .mat-form-field-prefix .mat-icon,.mat-form-field-appearance-legacy .mat-form-field-suffix .mat-icon{width:1em}.mat-form-field-appearance-legacy .mat-form-field-prefix .mat-icon-button,.mat-form-field-appearance-legacy .mat-form-field-suffix .mat-icon-button{font:inherit;vertical-align:baseline}.mat-form-field-appearance-legacy .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-appearance-legacy .mat-form-field-suffix .mat-icon-button .mat-icon{font-size:inherit}.mat-form-field-appearance-legacy .mat-form-field-underline{height:1px}.cdk-high-contrast-active .mat-form-field-appearance-legacy .mat-form-field-underline{height:0;border-top:solid 1px}.mat-form-field-appearance-legacy .mat-form-field-ripple{top:0;height:2px;overflow:hidden}.cdk-high-contrast-active .mat-form-field-appearance-legacy .mat-form-field-ripple{height:0;border-top:solid 2px}.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{background-position:0;background-color:transparent}.cdk-high-contrast-active .mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{border-top-style:dotted;border-top-width:2px}.mat-form-field-appearance-legacy.mat-form-field-invalid:not(.mat-focused) .mat-form-field-ripple{height:1px}\\n\",\".mat-form-field-appearance-outline .mat-form-field-wrapper{margin:.25em 0}.mat-form-field-appearance-outline .mat-form-field-flex{padding:0 .75em 0 .75em;margin-top:-0.25em;position:relative}.mat-form-field-appearance-outline .mat-form-field-prefix,.mat-form-field-appearance-outline .mat-form-field-suffix{top:.25em}.mat-form-field-appearance-outline .mat-form-field-outline{display:flex;position:absolute;top:.25em;left:0;right:0;bottom:0;pointer-events:none}.mat-form-field-appearance-outline .mat-form-field-outline-start,.mat-form-field-appearance-outline .mat-form-field-outline-end{border:1px solid currentColor;min-width:5px}.mat-form-field-appearance-outline .mat-form-field-outline-start{border-radius:5px 0 0 5px;border-right-style:none}[dir=rtl] .mat-form-field-appearance-outline .mat-form-field-outline-start{border-right-style:solid;border-left-style:none;border-radius:0 5px 5px 0}.mat-form-field-appearance-outline .mat-form-field-outline-end{border-radius:0 5px 5px 0;border-left-style:none;flex-grow:1}[dir=rtl] .mat-form-field-appearance-outline .mat-form-field-outline-end{border-left-style:solid;border-right-style:none;border-radius:5px 0 0 5px}.mat-form-field-appearance-outline .mat-form-field-outline-gap{border-radius:.000001px;border:1px solid currentColor;border-left-style:none;border-right-style:none}.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-outline-gap{border-top-color:transparent}.mat-form-field-appearance-outline .mat-form-field-outline-thick{opacity:0}.mat-form-field-appearance-outline .mat-form-field-outline-thick .mat-form-field-outline-start,.mat-form-field-appearance-outline .mat-form-field-outline-thick .mat-form-field-outline-end,.mat-form-field-appearance-outline .mat-form-field-outline-thick .mat-form-field-outline-gap{border-width:2px}.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline,.mat-form-field-appearance-outline.mat-form-field-invalid .mat-form-field-outline{opacity:0;transition:opacity 100ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick,.mat-form-field-appearance-outline.mat-form-field-invalid .mat-form-field-outline-thick{opacity:1}.mat-form-field-appearance-outline:not(.mat-form-field-disabled) .mat-form-field-flex:hover .mat-form-field-outline{opacity:0;transition:opacity 600ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-appearance-outline:not(.mat-form-field-disabled) .mat-form-field-flex:hover .mat-form-field-outline-thick{opacity:1}.mat-form-field-appearance-outline .mat-form-field-subscript-wrapper{padding:0 1em}.mat-form-field-appearance-outline._mat-animation-noopable:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-outline,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline-start,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline-end,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline-gap{transition:none}\\n\",\".mat-form-field-appearance-standard .mat-form-field-flex{padding-top:.75em}.mat-form-field-appearance-standard .mat-form-field-underline{height:1px}.cdk-high-contrast-active .mat-form-field-appearance-standard .mat-form-field-underline{height:0;border-top:solid 1px}.mat-form-field-appearance-standard .mat-form-field-ripple{bottom:0;height:2px}.cdk-high-contrast-active .mat-form-field-appearance-standard .mat-form-field-ripple{height:0;border-top:2px}.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{background-position:0;background-color:transparent}.cdk-high-contrast-active .mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{border-top-style:dotted;border-top-width:2px}.mat-form-field-appearance-standard:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{opacity:1;transform:none;transition:opacity 600ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-appearance-standard._mat-animation-noopable:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{transition:none}\\n\"],encapsulation:2,data:{animation:[F.transitionMessages]},changeDetection:0}),t})(),tt=(()=>{class t{}return t.\\u0275mod=a.Vb({type:t}),t.\\u0275inj=a.Ub({factory:function(e){return new(e||t)},imports:[[i.c,o.i,r.c],o.i]}),t})()},l5ep:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"cy\",{months:\"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr\".split(\"_\"),monthsShort:\"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag\".split(\"_\"),weekdays:\"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn\".split(\"_\"),weekdaysShort:\"Sul_Llun_Maw_Mer_Iau_Gwe_Sad\".split(\"_\"),weekdaysMin:\"Su_Ll_Ma_Me_Ia_Gw_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Heddiw am] LT\",nextDay:\"[Yfory am] LT\",nextWeek:\"dddd [am] LT\",lastDay:\"[Ddoe am] LT\",lastWeek:\"dddd [diwethaf am] LT\",sameElse:\"L\"},relativeTime:{future:\"mewn %s\",past:\"%s yn \\xf4l\",s:\"ychydig eiliadau\",ss:\"%d eiliad\",m:\"munud\",mm:\"%d munud\",h:\"awr\",hh:\"%d awr\",d:\"diwrnod\",dd:\"%d diwrnod\",M:\"mis\",MM:\"%d mis\",y:\"blwyddyn\",yy:\"%d flynedd\"},dayOfMonthOrdinalParse:/\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(t){var e=\"\";return t>20?e=40===t||50===t||60===t||80===t||100===t?\"fed\":\"ain\":t>0&&(e=[\"\",\"af\",\"il\",\"ydd\",\"ydd\",\"ed\",\"ed\",\"ed\",\"fed\",\"fed\",\"fed\",\"eg\",\"fed\",\"eg\",\"eg\",\"fed\",\"eg\",\"eg\",\"fed\",\"eg\",\"fed\"][t]),t+e},week:{dow:1,doy:4}})}(n(\"wd/R\"))},l7GE:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));var r=n(\"7o/Q\");class i extends r.a{notifyNext(t,e,n,r,i){this.destination.next(e)}notifyError(t,e){this.destination.error(t)}notifyComplete(t){this.destination.complete()}}},lJxs:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));var r=n(\"7o/Q\");function i(t,e){return function(n){if(\"function\"!=typeof t)throw new TypeError(\"argument is not a function. Are you looking for `mapTo()`?\");return n.lift(new a(t,e))}}class a{constructor(t,e){this.project=t,this.thisArg=e}call(t,e){return e.subscribe(new o(t,this.project,this.thisArg))}}class o extends r.a{constructor(t,e,n){super(t),this.project=e,this.count=0,this.thisArg=n||this}_next(t){let e;try{e=this.project.call(this.thisArg,t,this.count++)}catch(n){return void this.destination.error(n)}this.destination.next(e)}}},lXzo:function(t,e,n){!function(t){\"use strict\";function e(t,e,n){return\"m\"===n?e?\"\\u043c\\u0438\\u043d\\u0443\\u0442\\u0430\":\"\\u043c\\u0438\\u043d\\u0443\\u0442\\u0443\":t+\" \"+(r=+t,i={ss:e?\"\\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u0430_\\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u044b_\\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\":\"\\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u0443_\\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u044b_\\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\",mm:e?\"\\u043c\\u0438\\u043d\\u0443\\u0442\\u0430_\\u043c\\u0438\\u043d\\u0443\\u0442\\u044b_\\u043c\\u0438\\u043d\\u0443\\u0442\":\"\\u043c\\u0438\\u043d\\u0443\\u0442\\u0443_\\u043c\\u0438\\u043d\\u0443\\u0442\\u044b_\\u043c\\u0438\\u043d\\u0443\\u0442\",hh:\"\\u0447\\u0430\\u0441_\\u0447\\u0430\\u0441\\u0430_\\u0447\\u0430\\u0441\\u043e\\u0432\",dd:\"\\u0434\\u0435\\u043d\\u044c_\\u0434\\u043d\\u044f_\\u0434\\u043d\\u0435\\u0439\",ww:\"\\u043d\\u0435\\u0434\\u0435\\u043b\\u044f_\\u043d\\u0435\\u0434\\u0435\\u043b\\u0438_\\u043d\\u0435\\u0434\\u0435\\u043b\\u044c\",MM:\"\\u043c\\u0435\\u0441\\u044f\\u0446_\\u043c\\u0435\\u0441\\u044f\\u0446\\u0430_\\u043c\\u0435\\u0441\\u044f\\u0446\\u0435\\u0432\",yy:\"\\u0433\\u043e\\u0434_\\u0433\\u043e\\u0434\\u0430_\\u043b\\u0435\\u0442\"}[n].split(\"_\"),r%10==1&&r%100!=11?i[0]:r%10>=2&&r%10<=4&&(r%100<10||r%100>=20)?i[1]:i[2]);var r,i}var n=[/^\\u044f\\u043d\\u0432/i,/^\\u0444\\u0435\\u0432/i,/^\\u043c\\u0430\\u0440/i,/^\\u0430\\u043f\\u0440/i,/^\\u043c\\u0430[\\u0439\\u044f]/i,/^\\u0438\\u044e\\u043d/i,/^\\u0438\\u044e\\u043b/i,/^\\u0430\\u0432\\u0433/i,/^\\u0441\\u0435\\u043d/i,/^\\u043e\\u043a\\u0442/i,/^\\u043d\\u043e\\u044f/i,/^\\u0434\\u0435\\u043a/i];t.defineLocale(\"ru\",{months:{format:\"\\u044f\\u043d\\u0432\\u0430\\u0440\\u044f_\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b\\u044f_\\u043c\\u0430\\u0440\\u0442\\u0430_\\u0430\\u043f\\u0440\\u0435\\u043b\\u044f_\\u043c\\u0430\\u044f_\\u0438\\u044e\\u043d\\u044f_\\u0438\\u044e\\u043b\\u044f_\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\\u0430_\\u0441\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\\u044f_\\u043e\\u043a\\u0442\\u044f\\u0431\\u0440\\u044f_\\u043d\\u043e\\u044f\\u0431\\u0440\\u044f_\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\\u044f\".split(\"_\"),standalone:\"\\u044f\\u043d\\u0432\\u0430\\u0440\\u044c_\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b\\u044c_\\u043c\\u0430\\u0440\\u0442_\\u0430\\u043f\\u0440\\u0435\\u043b\\u044c_\\u043c\\u0430\\u0439_\\u0438\\u044e\\u043d\\u044c_\\u0438\\u044e\\u043b\\u044c_\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442_\\u0441\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\\u044c_\\u043e\\u043a\\u0442\\u044f\\u0431\\u0440\\u044c_\\u043d\\u043e\\u044f\\u0431\\u0440\\u044c_\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\\u044c\".split(\"_\")},monthsShort:{format:\"\\u044f\\u043d\\u0432._\\u0444\\u0435\\u0432\\u0440._\\u043c\\u0430\\u0440._\\u0430\\u043f\\u0440._\\u043c\\u0430\\u044f_\\u0438\\u044e\\u043d\\u044f_\\u0438\\u044e\\u043b\\u044f_\\u0430\\u0432\\u0433._\\u0441\\u0435\\u043d\\u0442._\\u043e\\u043a\\u0442._\\u043d\\u043e\\u044f\\u0431._\\u0434\\u0435\\u043a.\".split(\"_\"),standalone:\"\\u044f\\u043d\\u0432._\\u0444\\u0435\\u0432\\u0440._\\u043c\\u0430\\u0440\\u0442_\\u0430\\u043f\\u0440._\\u043c\\u0430\\u0439_\\u0438\\u044e\\u043d\\u044c_\\u0438\\u044e\\u043b\\u044c_\\u0430\\u0432\\u0433._\\u0441\\u0435\\u043d\\u0442._\\u043e\\u043a\\u0442._\\u043d\\u043e\\u044f\\u0431._\\u0434\\u0435\\u043a.\".split(\"_\")},weekdays:{standalone:\"\\u0432\\u043e\\u0441\\u043a\\u0440\\u0435\\u0441\\u0435\\u043d\\u044c\\u0435_\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u043b\\u044c\\u043d\\u0438\\u043a_\\u0432\\u0442\\u043e\\u0440\\u043d\\u0438\\u043a_\\u0441\\u0440\\u0435\\u0434\\u0430_\\u0447\\u0435\\u0442\\u0432\\u0435\\u0440\\u0433_\\u043f\\u044f\\u0442\\u043d\\u0438\\u0446\\u0430_\\u0441\\u0443\\u0431\\u0431\\u043e\\u0442\\u0430\".split(\"_\"),format:\"\\u0432\\u043e\\u0441\\u043a\\u0440\\u0435\\u0441\\u0435\\u043d\\u044c\\u0435_\\u043f\\u043e\\u043d\\u0435\\u0434\\u0435\\u043b\\u044c\\u043d\\u0438\\u043a_\\u0432\\u0442\\u043e\\u0440\\u043d\\u0438\\u043a_\\u0441\\u0440\\u0435\\u0434\\u0443_\\u0447\\u0435\\u0442\\u0432\\u0435\\u0440\\u0433_\\u043f\\u044f\\u0442\\u043d\\u0438\\u0446\\u0443_\\u0441\\u0443\\u0431\\u0431\\u043e\\u0442\\u0443\".split(\"_\"),isFormat:/\\[ ?[\\u0412\\u0432] ?(?:\\u043f\\u0440\\u043e\\u0448\\u043b\\u0443\\u044e|\\u0441\\u043b\\u0435\\u0434\\u0443\\u044e\\u0449\\u0443\\u044e|\\u044d\\u0442\\u0443)? ?] ?dddd/},weekdaysShort:\"\\u0432\\u0441_\\u043f\\u043d_\\u0432\\u0442_\\u0441\\u0440_\\u0447\\u0442_\\u043f\\u0442_\\u0441\\u0431\".split(\"_\"),weekdaysMin:\"\\u0432\\u0441_\\u043f\\u043d_\\u0432\\u0442_\\u0441\\u0440_\\u0447\\u0442_\\u043f\\u0442_\\u0441\\u0431\".split(\"_\"),monthsParse:n,longMonthsParse:n,shortMonthsParse:n,monthsRegex:/^(\\u044f\\u043d\\u0432\\u0430\\u0440[\\u044c\\u044f]|\\u044f\\u043d\\u0432\\.?|\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b[\\u044c\\u044f]|\\u0444\\u0435\\u0432\\u0440?\\.?|\\u043c\\u0430\\u0440\\u0442\\u0430?|\\u043c\\u0430\\u0440\\.?|\\u0430\\u043f\\u0440\\u0435\\u043b[\\u044c\\u044f]|\\u0430\\u043f\\u0440\\.?|\\u043c\\u0430[\\u0439\\u044f]|\\u0438\\u044e\\u043d[\\u044c\\u044f]|\\u0438\\u044e\\u043d\\.?|\\u0438\\u044e\\u043b[\\u044c\\u044f]|\\u0438\\u044e\\u043b\\.?|\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\\u0430?|\\u0430\\u0432\\u0433\\.?|\\u0441\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440[\\u044c\\u044f]|\\u0441\\u0435\\u043d\\u0442?\\.?|\\u043e\\u043a\\u0442\\u044f\\u0431\\u0440[\\u044c\\u044f]|\\u043e\\u043a\\u0442\\.?|\\u043d\\u043e\\u044f\\u0431\\u0440[\\u044c\\u044f]|\\u043d\\u043e\\u044f\\u0431?\\.?|\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440[\\u044c\\u044f]|\\u0434\\u0435\\u043a\\.?)/i,monthsShortRegex:/^(\\u044f\\u043d\\u0432\\u0430\\u0440[\\u044c\\u044f]|\\u044f\\u043d\\u0432\\.?|\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b[\\u044c\\u044f]|\\u0444\\u0435\\u0432\\u0440?\\.?|\\u043c\\u0430\\u0440\\u0442\\u0430?|\\u043c\\u0430\\u0440\\.?|\\u0430\\u043f\\u0440\\u0435\\u043b[\\u044c\\u044f]|\\u0430\\u043f\\u0440\\.?|\\u043c\\u0430[\\u0439\\u044f]|\\u0438\\u044e\\u043d[\\u044c\\u044f]|\\u0438\\u044e\\u043d\\.?|\\u0438\\u044e\\u043b[\\u044c\\u044f]|\\u0438\\u044e\\u043b\\.?|\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\\u0430?|\\u0430\\u0432\\u0433\\.?|\\u0441\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440[\\u044c\\u044f]|\\u0441\\u0435\\u043d\\u0442?\\.?|\\u043e\\u043a\\u0442\\u044f\\u0431\\u0440[\\u044c\\u044f]|\\u043e\\u043a\\u0442\\.?|\\u043d\\u043e\\u044f\\u0431\\u0440[\\u044c\\u044f]|\\u043d\\u043e\\u044f\\u0431?\\.?|\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440[\\u044c\\u044f]|\\u0434\\u0435\\u043a\\.?)/i,monthsStrictRegex:/^(\\u044f\\u043d\\u0432\\u0430\\u0440[\\u044f\\u044c]|\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b[\\u044f\\u044c]|\\u043c\\u0430\\u0440\\u0442\\u0430?|\\u0430\\u043f\\u0440\\u0435\\u043b[\\u044f\\u044c]|\\u043c\\u0430[\\u044f\\u0439]|\\u0438\\u044e\\u043d[\\u044f\\u044c]|\\u0438\\u044e\\u043b[\\u044f\\u044c]|\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\\u0430?|\\u0441\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440[\\u044f\\u044c]|\\u043e\\u043a\\u0442\\u044f\\u0431\\u0440[\\u044f\\u044c]|\\u043d\\u043e\\u044f\\u0431\\u0440[\\u044f\\u044c]|\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440[\\u044f\\u044c])/i,monthsShortStrictRegex:/^(\\u044f\\u043d\\u0432\\.|\\u0444\\u0435\\u0432\\u0440?\\.|\\u043c\\u0430\\u0440[\\u0442.]|\\u0430\\u043f\\u0440\\.|\\u043c\\u0430[\\u044f\\u0439]|\\u0438\\u044e\\u043d[\\u044c\\u044f.]|\\u0438\\u044e\\u043b[\\u044c\\u044f.]|\\u0430\\u0432\\u0433\\.|\\u0441\\u0435\\u043d\\u0442?\\.|\\u043e\\u043a\\u0442\\.|\\u043d\\u043e\\u044f\\u0431?\\.|\\u0434\\u0435\\u043a\\.)/i,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY \\u0433.\",LLL:\"D MMMM YYYY \\u0433., H:mm\",LLLL:\"dddd, D MMMM YYYY \\u0433., H:mm\"},calendar:{sameDay:\"[\\u0421\\u0435\\u0433\\u043e\\u0434\\u043d\\u044f, \\u0432] LT\",nextDay:\"[\\u0417\\u0430\\u0432\\u0442\\u0440\\u0430, \\u0432] LT\",lastDay:\"[\\u0412\\u0447\\u0435\\u0440\\u0430, \\u0432] LT\",nextWeek:function(t){if(t.week()===this.week())return 2===this.day()?\"[\\u0412\\u043e] dddd, [\\u0432] LT\":\"[\\u0412] dddd, [\\u0432] LT\";switch(this.day()){case 0:return\"[\\u0412 \\u0441\\u043b\\u0435\\u0434\\u0443\\u044e\\u0449\\u0435\\u0435] dddd, [\\u0432] LT\";case 1:case 2:case 4:return\"[\\u0412 \\u0441\\u043b\\u0435\\u0434\\u0443\\u044e\\u0449\\u0438\\u0439] dddd, [\\u0432] LT\";case 3:case 5:case 6:return\"[\\u0412 \\u0441\\u043b\\u0435\\u0434\\u0443\\u044e\\u0449\\u0443\\u044e] dddd, [\\u0432] LT\"}},lastWeek:function(t){if(t.week()===this.week())return 2===this.day()?\"[\\u0412\\u043e] dddd, [\\u0432] LT\":\"[\\u0412] dddd, [\\u0432] LT\";switch(this.day()){case 0:return\"[\\u0412 \\u043f\\u0440\\u043e\\u0448\\u043b\\u043e\\u0435] dddd, [\\u0432] LT\";case 1:case 2:case 4:return\"[\\u0412 \\u043f\\u0440\\u043e\\u0448\\u043b\\u044b\\u0439] dddd, [\\u0432] LT\";case 3:case 5:case 6:return\"[\\u0412 \\u043f\\u0440\\u043e\\u0448\\u043b\\u0443\\u044e] dddd, [\\u0432] LT\"}},sameElse:\"L\"},relativeTime:{future:\"\\u0447\\u0435\\u0440\\u0435\\u0437 %s\",past:\"%s \\u043d\\u0430\\u0437\\u0430\\u0434\",s:\"\\u043d\\u0435\\u0441\\u043a\\u043e\\u043b\\u044c\\u043a\\u043e \\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\",ss:e,m:e,mm:e,h:\"\\u0447\\u0430\\u0441\",hh:e,d:\"\\u0434\\u0435\\u043d\\u044c\",dd:e,w:\"\\u043d\\u0435\\u0434\\u0435\\u043b\\u044f\",ww:e,M:\"\\u043c\\u0435\\u0441\\u044f\\u0446\",MM:e,y:\"\\u0433\\u043e\\u0434\",yy:e},meridiemParse:/\\u043d\\u043e\\u0447\\u0438|\\u0443\\u0442\\u0440\\u0430|\\u0434\\u043d\\u044f|\\u0432\\u0435\\u0447\\u0435\\u0440\\u0430/i,isPM:function(t){return/^(\\u0434\\u043d\\u044f|\\u0432\\u0435\\u0447\\u0435\\u0440\\u0430)$/.test(t)},meridiem:function(t,e,n){return t<4?\"\\u043d\\u043e\\u0447\\u0438\":t<12?\"\\u0443\\u0442\\u0440\\u0430\":t<17?\"\\u0434\\u043d\\u044f\":\"\\u0432\\u0435\\u0447\\u0435\\u0440\\u0430\"},dayOfMonthOrdinalParse:/\\d{1,2}-(\\u0439|\\u0433\\u043e|\\u044f)/,ordinal:function(t,e){switch(e){case\"M\":case\"d\":case\"DDD\":return t+\"-\\u0439\";case\"D\":return t+\"-\\u0433\\u043e\";case\"w\":case\"W\":return t+\"-\\u044f\";default:return t}},week:{dow:1,doy:4}})}(n(\"wd/R\"))},lYtQ:function(t,e,n){!function(t){\"use strict\";function e(t,e,n,r){switch(n){case\"s\":return e?\"\\u0445\\u044d\\u0434\\u0445\\u044d\\u043d \\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\":\"\\u0445\\u044d\\u0434\\u0445\\u044d\\u043d \\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u044b\\u043d\";case\"ss\":return t+(e?\" \\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\":\" \\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u044b\\u043d\");case\"m\":case\"mm\":return t+(e?\" \\u043c\\u0438\\u043d\\u0443\\u0442\":\" \\u043c\\u0438\\u043d\\u0443\\u0442\\u044b\\u043d\");case\"h\":case\"hh\":return t+(e?\" \\u0446\\u0430\\u0433\":\" \\u0446\\u0430\\u0433\\u0438\\u0439\\u043d\");case\"d\":case\"dd\":return t+(e?\" \\u04e9\\u0434\\u04e9\\u0440\":\" \\u04e9\\u0434\\u0440\\u0438\\u0439\\u043d\");case\"M\":case\"MM\":return t+(e?\" \\u0441\\u0430\\u0440\":\" \\u0441\\u0430\\u0440\\u044b\\u043d\");case\"y\":case\"yy\":return t+(e?\" \\u0436\\u0438\\u043b\":\" \\u0436\\u0438\\u043b\\u0438\\u0439\\u043d\");default:return t}}t.defineLocale(\"mn\",{months:\"\\u041d\\u044d\\u0433\\u0434\\u04af\\u0433\\u044d\\u044d\\u0440 \\u0441\\u0430\\u0440_\\u0425\\u043e\\u0451\\u0440\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440_\\u0413\\u0443\\u0440\\u0430\\u0432\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440_\\u0414\\u04e9\\u0440\\u04e9\\u0432\\u0434\\u04af\\u0433\\u044d\\u044d\\u0440 \\u0441\\u0430\\u0440_\\u0422\\u0430\\u0432\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440_\\u0417\\u0443\\u0440\\u0433\\u0430\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440_\\u0414\\u043e\\u043b\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440_\\u041d\\u0430\\u0439\\u043c\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440_\\u0415\\u0441\\u0434\\u04af\\u0433\\u044d\\u044d\\u0440 \\u0441\\u0430\\u0440_\\u0410\\u0440\\u0430\\u0432\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440_\\u0410\\u0440\\u0432\\u0430\\u043d \\u043d\\u044d\\u0433\\u0434\\u04af\\u0433\\u044d\\u044d\\u0440 \\u0441\\u0430\\u0440_\\u0410\\u0440\\u0432\\u0430\\u043d \\u0445\\u043e\\u0451\\u0440\\u0434\\u0443\\u0433\\u0430\\u0430\\u0440 \\u0441\\u0430\\u0440\".split(\"_\"),monthsShort:\"1 \\u0441\\u0430\\u0440_2 \\u0441\\u0430\\u0440_3 \\u0441\\u0430\\u0440_4 \\u0441\\u0430\\u0440_5 \\u0441\\u0430\\u0440_6 \\u0441\\u0430\\u0440_7 \\u0441\\u0430\\u0440_8 \\u0441\\u0430\\u0440_9 \\u0441\\u0430\\u0440_10 \\u0441\\u0430\\u0440_11 \\u0441\\u0430\\u0440_12 \\u0441\\u0430\\u0440\".split(\"_\"),monthsParseExact:!0,weekdays:\"\\u041d\\u044f\\u043c_\\u0414\\u0430\\u0432\\u0430\\u0430_\\u041c\\u044f\\u0433\\u043c\\u0430\\u0440_\\u041b\\u0445\\u0430\\u0433\\u0432\\u0430_\\u041f\\u04af\\u0440\\u044d\\u0432_\\u0411\\u0430\\u0430\\u0441\\u0430\\u043d_\\u0411\\u044f\\u043c\\u0431\\u0430\".split(\"_\"),weekdaysShort:\"\\u041d\\u044f\\u043c_\\u0414\\u0430\\u0432_\\u041c\\u044f\\u0433_\\u041b\\u0445\\u0430_\\u041f\\u04af\\u0440_\\u0411\\u0430\\u0430_\\u0411\\u044f\\u043c\".split(\"_\"),weekdaysMin:\"\\u041d\\u044f_\\u0414\\u0430_\\u041c\\u044f_\\u041b\\u0445_\\u041f\\u04af_\\u0411\\u0430_\\u0411\\u044f\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"YYYY \\u043e\\u043d\\u044b MMMM\\u044b\\u043d D\",LLL:\"YYYY \\u043e\\u043d\\u044b MMMM\\u044b\\u043d D HH:mm\",LLLL:\"dddd, YYYY \\u043e\\u043d\\u044b MMMM\\u044b\\u043d D HH:mm\"},meridiemParse:/\\u04ae\\u04e8|\\u04ae\\u0425/i,isPM:function(t){return\"\\u04ae\\u0425\"===t},meridiem:function(t,e,n){return t<12?\"\\u04ae\\u04e8\":\"\\u04ae\\u0425\"},calendar:{sameDay:\"[\\u04e8\\u043d\\u04e9\\u04e9\\u0434\\u04e9\\u0440] LT\",nextDay:\"[\\u041c\\u0430\\u0440\\u0433\\u0430\\u0430\\u0448] LT\",nextWeek:\"[\\u0418\\u0440\\u044d\\u0445] dddd LT\",lastDay:\"[\\u04e8\\u0447\\u0438\\u0433\\u0434\\u04e9\\u0440] LT\",lastWeek:\"[\\u04e8\\u043d\\u0433\\u04e9\\u0440\\u0441\\u04e9\\u043d] dddd LT\",sameElse:\"L\"},relativeTime:{future:\"%s \\u0434\\u0430\\u0440\\u0430\\u0430\",past:\"%s \\u04e9\\u043c\\u043d\\u04e9\",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\\d{1,2} \\u04e9\\u0434\\u04e9\\u0440/,ordinal:function(t,e){switch(e){case\"d\":case\"D\":case\"DDD\":return t+\" \\u04e9\\u0434\\u04e9\\u0440\";default:return t}}})}(n(\"wd/R\"))},lgnt:function(t,e,n){!function(t){\"use strict\";var e={0:\"-\\u0447\\u04af\",1:\"-\\u0447\\u0438\",2:\"-\\u0447\\u0438\",3:\"-\\u0447\\u04af\",4:\"-\\u0447\\u04af\",5:\"-\\u0447\\u0438\",6:\"-\\u0447\\u044b\",7:\"-\\u0447\\u0438\",8:\"-\\u0447\\u0438\",9:\"-\\u0447\\u0443\",10:\"-\\u0447\\u0443\",20:\"-\\u0447\\u044b\",30:\"-\\u0447\\u0443\",40:\"-\\u0447\\u044b\",50:\"-\\u0447\\u04af\",60:\"-\\u0447\\u044b\",70:\"-\\u0447\\u0438\",80:\"-\\u0447\\u0438\",90:\"-\\u0447\\u0443\",100:\"-\\u0447\\u04af\"};t.defineLocale(\"ky\",{months:\"\\u044f\\u043d\\u0432\\u0430\\u0440\\u044c_\\u0444\\u0435\\u0432\\u0440\\u0430\\u043b\\u044c_\\u043c\\u0430\\u0440\\u0442_\\u0430\\u043f\\u0440\\u0435\\u043b\\u044c_\\u043c\\u0430\\u0439_\\u0438\\u044e\\u043d\\u044c_\\u0438\\u044e\\u043b\\u044c_\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442_\\u0441\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\\u044c_\\u043e\\u043a\\u0442\\u044f\\u0431\\u0440\\u044c_\\u043d\\u043e\\u044f\\u0431\\u0440\\u044c_\\u0434\\u0435\\u043a\\u0430\\u0431\\u0440\\u044c\".split(\"_\"),monthsShort:\"\\u044f\\u043d\\u0432_\\u0444\\u0435\\u0432_\\u043c\\u0430\\u0440\\u0442_\\u0430\\u043f\\u0440_\\u043c\\u0430\\u0439_\\u0438\\u044e\\u043d\\u044c_\\u0438\\u044e\\u043b\\u044c_\\u0430\\u0432\\u0433_\\u0441\\u0435\\u043d_\\u043e\\u043a\\u0442_\\u043d\\u043e\\u044f_\\u0434\\u0435\\u043a\".split(\"_\"),weekdays:\"\\u0416\\u0435\\u043a\\u0448\\u0435\\u043c\\u0431\\u0438_\\u0414\\u04af\\u0439\\u0448\\u04e9\\u043c\\u0431\\u04af_\\u0428\\u0435\\u0439\\u0448\\u0435\\u043c\\u0431\\u0438_\\u0428\\u0430\\u0440\\u0448\\u0435\\u043c\\u0431\\u0438_\\u0411\\u0435\\u0439\\u0448\\u0435\\u043c\\u0431\\u0438_\\u0416\\u0443\\u043c\\u0430_\\u0418\\u0448\\u0435\\u043c\\u0431\\u0438\".split(\"_\"),weekdaysShort:\"\\u0416\\u0435\\u043a_\\u0414\\u04af\\u0439_\\u0428\\u0435\\u0439_\\u0428\\u0430\\u0440_\\u0411\\u0435\\u0439_\\u0416\\u0443\\u043c_\\u0418\\u0448\\u0435\".split(\"_\"),weekdaysMin:\"\\u0416\\u043a_\\u0414\\u0439_\\u0428\\u0439_\\u0428\\u0440_\\u0411\\u0439_\\u0416\\u043c_\\u0418\\u0448\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[\\u0411\\u04af\\u0433\\u04af\\u043d \\u0441\\u0430\\u0430\\u0442] LT\",nextDay:\"[\\u042d\\u0440\\u0442\\u0435\\u04a3 \\u0441\\u0430\\u0430\\u0442] LT\",nextWeek:\"dddd [\\u0441\\u0430\\u0430\\u0442] LT\",lastDay:\"[\\u041a\\u0435\\u0447\\u044d\\u044d \\u0441\\u0430\\u0430\\u0442] LT\",lastWeek:\"[\\u04e8\\u0442\\u043a\\u04e9\\u043d \\u0430\\u043f\\u0442\\u0430\\u043d\\u044b\\u043d] dddd [\\u043a\\u04af\\u043d\\u04af] [\\u0441\\u0430\\u0430\\u0442] LT\",sameElse:\"L\"},relativeTime:{future:\"%s \\u0438\\u0447\\u0438\\u043d\\u0434\\u0435\",past:\"%s \\u043c\\u0443\\u0440\\u0443\\u043d\",s:\"\\u0431\\u0438\\u0440\\u043d\\u0435\\u0447\\u0435 \\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\",ss:\"%d \\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\",m:\"\\u0431\\u0438\\u0440 \\u043c\\u04af\\u043d\\u04e9\\u0442\",mm:\"%d \\u043c\\u04af\\u043d\\u04e9\\u0442\",h:\"\\u0431\\u0438\\u0440 \\u0441\\u0430\\u0430\\u0442\",hh:\"%d \\u0441\\u0430\\u0430\\u0442\",d:\"\\u0431\\u0438\\u0440 \\u043a\\u04af\\u043d\",dd:\"%d \\u043a\\u04af\\u043d\",M:\"\\u0431\\u0438\\u0440 \\u0430\\u0439\",MM:\"%d \\u0430\\u0439\",y:\"\\u0431\\u0438\\u0440 \\u0436\\u044b\\u043b\",yy:\"%d \\u0436\\u044b\\u043b\"},dayOfMonthOrdinalParse:/\\d{1,2}-(\\u0447\\u0438|\\u0447\\u044b|\\u0447\\u04af|\\u0447\\u0443)/,ordinal:function(t){return t+(e[t]||e[t%10]||e[t>=100?100:null])},week:{dow:1,doy:7}})}(n(\"wd/R\"))},loYQ:function(t,e,n){!function(t){\"use strict\";var e={1:\"\\u09e7\",2:\"\\u09e8\",3:\"\\u09e9\",4:\"\\u09ea\",5:\"\\u09eb\",6:\"\\u09ec\",7:\"\\u09ed\",8:\"\\u09ee\",9:\"\\u09ef\",0:\"\\u09e6\"},n={\"\\u09e7\":\"1\",\"\\u09e8\":\"2\",\"\\u09e9\":\"3\",\"\\u09ea\":\"4\",\"\\u09eb\":\"5\",\"\\u09ec\":\"6\",\"\\u09ed\":\"7\",\"\\u09ee\":\"8\",\"\\u09ef\":\"9\",\"\\u09e6\":\"0\"};t.defineLocale(\"bn-bd\",{months:\"\\u099c\\u09be\\u09a8\\u09c1\\u09df\\u09be\\u09b0\\u09bf_\\u09ab\\u09c7\\u09ac\\u09cd\\u09b0\\u09c1\\u09df\\u09be\\u09b0\\u09bf_\\u09ae\\u09be\\u09b0\\u09cd\\u099a_\\u098f\\u09aa\\u09cd\\u09b0\\u09bf\\u09b2_\\u09ae\\u09c7_\\u099c\\u09c1\\u09a8_\\u099c\\u09c1\\u09b2\\u09be\\u0987_\\u0986\\u0997\\u09b8\\u09cd\\u099f_\\u09b8\\u09c7\\u09aa\\u09cd\\u099f\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0_\\u0985\\u0995\\u09cd\\u099f\\u09cb\\u09ac\\u09b0_\\u09a8\\u09ad\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0_\\u09a1\\u09bf\\u09b8\\u09c7\\u09ae\\u09cd\\u09ac\\u09b0\".split(\"_\"),monthsShort:\"\\u099c\\u09be\\u09a8\\u09c1_\\u09ab\\u09c7\\u09ac\\u09cd\\u09b0\\u09c1_\\u09ae\\u09be\\u09b0\\u09cd\\u099a_\\u098f\\u09aa\\u09cd\\u09b0\\u09bf\\u09b2_\\u09ae\\u09c7_\\u099c\\u09c1\\u09a8_\\u099c\\u09c1\\u09b2\\u09be\\u0987_\\u0986\\u0997\\u09b8\\u09cd\\u099f_\\u09b8\\u09c7\\u09aa\\u09cd\\u099f_\\u0985\\u0995\\u09cd\\u099f\\u09cb_\\u09a8\\u09ad\\u09c7_\\u09a1\\u09bf\\u09b8\\u09c7\".split(\"_\"),weekdays:\"\\u09b0\\u09ac\\u09bf\\u09ac\\u09be\\u09b0_\\u09b8\\u09cb\\u09ae\\u09ac\\u09be\\u09b0_\\u09ae\\u0999\\u09cd\\u0997\\u09b2\\u09ac\\u09be\\u09b0_\\u09ac\\u09c1\\u09a7\\u09ac\\u09be\\u09b0_\\u09ac\\u09c3\\u09b9\\u09b8\\u09cd\\u09aa\\u09a4\\u09bf\\u09ac\\u09be\\u09b0_\\u09b6\\u09c1\\u0995\\u09cd\\u09b0\\u09ac\\u09be\\u09b0_\\u09b6\\u09a8\\u09bf\\u09ac\\u09be\\u09b0\".split(\"_\"),weekdaysShort:\"\\u09b0\\u09ac\\u09bf_\\u09b8\\u09cb\\u09ae_\\u09ae\\u0999\\u09cd\\u0997\\u09b2_\\u09ac\\u09c1\\u09a7_\\u09ac\\u09c3\\u09b9\\u09b8\\u09cd\\u09aa\\u09a4\\u09bf_\\u09b6\\u09c1\\u0995\\u09cd\\u09b0_\\u09b6\\u09a8\\u09bf\".split(\"_\"),weekdaysMin:\"\\u09b0\\u09ac\\u09bf_\\u09b8\\u09cb\\u09ae_\\u09ae\\u0999\\u09cd\\u0997\\u09b2_\\u09ac\\u09c1\\u09a7_\\u09ac\\u09c3\\u09b9_\\u09b6\\u09c1\\u0995\\u09cd\\u09b0_\\u09b6\\u09a8\\u09bf\".split(\"_\"),longDateFormat:{LT:\"A h:mm \\u09b8\\u09ae\\u09df\",LTS:\"A h:mm:ss \\u09b8\\u09ae\\u09df\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm \\u09b8\\u09ae\\u09df\",LLLL:\"dddd, D MMMM YYYY, A h:mm \\u09b8\\u09ae\\u09df\"},calendar:{sameDay:\"[\\u0986\\u099c] LT\",nextDay:\"[\\u0986\\u0997\\u09be\\u09ae\\u09c0\\u0995\\u09be\\u09b2] LT\",nextWeek:\"dddd, LT\",lastDay:\"[\\u0997\\u09a4\\u0995\\u09be\\u09b2] LT\",lastWeek:\"[\\u0997\\u09a4] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s \\u09aa\\u09b0\\u09c7\",past:\"%s \\u0986\\u0997\\u09c7\",s:\"\\u0995\\u09df\\u09c7\\u0995 \\u09b8\\u09c7\\u0995\\u09c7\\u09a8\\u09cd\\u09a1\",ss:\"%d \\u09b8\\u09c7\\u0995\\u09c7\\u09a8\\u09cd\\u09a1\",m:\"\\u098f\\u0995 \\u09ae\\u09bf\\u09a8\\u09bf\\u099f\",mm:\"%d \\u09ae\\u09bf\\u09a8\\u09bf\\u099f\",h:\"\\u098f\\u0995 \\u0998\\u09a8\\u09cd\\u099f\\u09be\",hh:\"%d \\u0998\\u09a8\\u09cd\\u099f\\u09be\",d:\"\\u098f\\u0995 \\u09a6\\u09bf\\u09a8\",dd:\"%d \\u09a6\\u09bf\\u09a8\",M:\"\\u098f\\u0995 \\u09ae\\u09be\\u09b8\",MM:\"%d \\u09ae\\u09be\\u09b8\",y:\"\\u098f\\u0995 \\u09ac\\u099b\\u09b0\",yy:\"%d \\u09ac\\u099b\\u09b0\"},preparse:function(t){return t.replace(/[\\u09e7\\u09e8\\u09e9\\u09ea\\u09eb\\u09ec\\u09ed\\u09ee\\u09ef\\u09e6]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\\d/g,(function(t){return e[t]}))},meridiemParse:/\\u09b0\\u09be\\u09a4|\\u09ad\\u09cb\\u09b0|\\u09b8\\u0995\\u09be\\u09b2|\\u09a6\\u09c1\\u09aa\\u09c1\\u09b0|\\u09ac\\u09bf\\u0995\\u09be\\u09b2|\\u09b8\\u09a8\\u09cd\\u09a7\\u09cd\\u09af\\u09be|\\u09b0\\u09be\\u09a4/,meridiemHour:function(t,e){return 12===t&&(t=0),\"\\u09b0\\u09be\\u09a4\"===e?t<4?t:t+12:\"\\u09ad\\u09cb\\u09b0\"===e||\"\\u09b8\\u0995\\u09be\\u09b2\"===e?t:\"\\u09a6\\u09c1\\u09aa\\u09c1\\u09b0\"===e?t>=3?t:t+12:\"\\u09ac\\u09bf\\u0995\\u09be\\u09b2\"===e||\"\\u09b8\\u09a8\\u09cd\\u09a7\\u09cd\\u09af\\u09be\"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?\"\\u09b0\\u09be\\u09a4\":t<6?\"\\u09ad\\u09cb\\u09b0\":t<12?\"\\u09b8\\u0995\\u09be\\u09b2\":t<15?\"\\u09a6\\u09c1\\u09aa\\u09c1\\u09b0\":t<18?\"\\u09ac\\u09bf\\u0995\\u09be\\u09b2\":t<20?\"\\u09b8\\u09a8\\u09cd\\u09a7\\u09cd\\u09af\\u09be\":\"\\u09b0\\u09be\\u09a4\"},week:{dow:0,doy:6}})}(n(\"wd/R\"))},lyxo:function(t,e,n){!function(t){\"use strict\";function e(t,e,n){var r=\" \";return(t%100>=20||t>=100&&t%100==0)&&(r=\" de \"),t+r+{ss:\"secunde\",mm:\"minute\",hh:\"ore\",dd:\"zile\",ww:\"s\\u0103pt\\u0103m\\xe2ni\",MM:\"luni\",yy:\"ani\"}[n]}t.defineLocale(\"ro\",{months:\"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie\".split(\"_\"),monthsShort:\"ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"duminic\\u0103_luni_mar\\u021bi_miercuri_joi_vineri_s\\xe2mb\\u0103t\\u0103\".split(\"_\"),weekdaysShort:\"Dum_Lun_Mar_Mie_Joi_Vin_S\\xe2m\".split(\"_\"),weekdaysMin:\"Du_Lu_Ma_Mi_Jo_Vi_S\\xe2\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY H:mm\",LLLL:\"dddd, D MMMM YYYY H:mm\"},calendar:{sameDay:\"[azi la] LT\",nextDay:\"[m\\xe2ine la] LT\",nextWeek:\"dddd [la] LT\",lastDay:\"[ieri la] LT\",lastWeek:\"[fosta] dddd [la] LT\",sameElse:\"L\"},relativeTime:{future:\"peste %s\",past:\"%s \\xeen urm\\u0103\",s:\"c\\xe2teva secunde\",ss:e,m:\"un minut\",mm:e,h:\"o or\\u0103\",hh:e,d:\"o zi\",dd:e,w:\"o s\\u0103pt\\u0103m\\xe2n\\u0103\",ww:e,M:\"o lun\\u0103\",MM:e,y:\"un an\",yy:e},week:{dow:1,doy:7}})}(n(\"wd/R\"))},mrSG:function(t,e,n){\"use strict\";function r(t,e,n,r){var i,a=arguments.length,o=a<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(t,e,n,r);else for(var s=t.length-1;s>=0;s--)(i=t[s])&&(o=(a<3?i(o):a>3?i(e,n,o):i(e,n))||o);return a>3&&o&&Object.defineProperty(e,n,o),o}function i(t,e,n,r){return new(n||(n=Promise))((function(i,a){function o(t){try{l(r.next(t))}catch(e){a(e)}}function s(t){try{l(r.throw(t))}catch(e){a(e)}}function l(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,s)}l((r=r.apply(t,e||[])).next())}))}n.d(e,\"b\",(function(){return r})),n.d(e,\"a\",(function(){return i}))},n6bG:function(t,e,n){\"use strict\";function r(t){return\"function\"==typeof t}n.d(e,\"a\",(function(){return r}))},nHCO:function(t,e,n){\"use strict\";n.d(e,\"g\",(function(){return r})),n.d(e,\"b\",(function(){return i})),n.d(e,\"c\",(function(){return a})),n.d(e,\"a\",(function(){return o})),n.d(e,\"f\",(function(){return s})),n.d(e,\"d\",(function(){return l})),n.d(e,\"e\",(function(){return c}));let r=(()=>{class t{}return t.type=\"[Theme] Set theme\",t})(),i=(()=>{class t{constructor(t){this.payload=t}}return t.type=\"[Theme] Change theme\",t})(),a=(()=>{class t{}return t.type=\"[Database] Get database link\",t})(),o=(()=>{class t{constructor(t){this.payload=t}}return t.type=\"[Notifications] Add notification\",t})(),s=(()=>{class t{constructor(t){this.payload=t}}return t.type=\"[Notifications] Remove notification\",t})(),l=(()=>{class t{}return t.type=\"[Notifications] Get notifications\",t})(),c=(()=>{class t{}return t.type=\"[Notifications] Remove notifications\",t})()},nLfN:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return s})),n.d(e,\"b\",(function(){return l})),n.d(e,\"c\",(function(){return v})),n.d(e,\"d\",(function(){return y})),n.d(e,\"e\",(function(){return u})),n.d(e,\"f\",(function(){return m})),n.d(e,\"g\",(function(){return g}));var r=n(\"fXoL\"),i=n(\"ofXK\");let a;try{a=\"undefined\"!=typeof Intl&&Intl.v8BreakIterator}catch(_){a=!1}let o,s=(()=>{class t{constructor(t){this._platformId=t,this.isBrowser=this._platformId?Object(i.y)(this._platformId):\"object\"==typeof document&&!!document,this.EDGE=this.isBrowser&&/(edge)/i.test(navigator.userAgent),this.TRIDENT=this.isBrowser&&/(msie|trident)/i.test(navigator.userAgent),this.BLINK=this.isBrowser&&!(!window.chrome&&!a)&&\"undefined\"!=typeof CSS&&!this.EDGE&&!this.TRIDENT,this.WEBKIT=this.isBrowser&&/AppleWebKit/i.test(navigator.userAgent)&&!this.BLINK&&!this.EDGE&&!this.TRIDENT,this.IOS=this.isBrowser&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!(\"MSStream\"in window),this.FIREFOX=this.isBrowser&&/(firefox|minefield)/i.test(navigator.userAgent),this.ANDROID=this.isBrowser&&/android/i.test(navigator.userAgent)&&!this.TRIDENT,this.SAFARI=this.isBrowser&&/safari/i.test(navigator.userAgent)&&this.WEBKIT}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(r.K))},t.\\u0275prov=Object(r.Tb)({factory:function(){return new t(Object(r.hc)(r.K))},token:t,providedIn:\"root\"}),t})(),l=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)}}),t})();const c=[\"color\",\"button\",\"checkbox\",\"date\",\"datetime-local\",\"email\",\"file\",\"hidden\",\"image\",\"month\",\"number\",\"password\",\"radio\",\"range\",\"reset\",\"search\",\"submit\",\"tel\",\"text\",\"time\",\"url\",\"week\"];function u(){if(o)return o;if(\"object\"!=typeof document||!document)return o=new Set(c),o;let t=document.createElement(\"input\");return o=new Set(c.filter(e=>(t.setAttribute(\"type\",e),t.type===e))),o}let h,d,f,p;function m(t){return function(){if(null==h&&\"undefined\"!=typeof window)try{window.addEventListener(\"test\",null,Object.defineProperty({},\"passive\",{get:()=>h=!0}))}finally{h=h||!1}return h}()?t:!!t.capture}function g(){if(null==f){if(\"object\"!=typeof document||!document)return f=!1,f;if(\"scrollBehavior\"in document.documentElement.style)f=!0;else{const t=Element.prototype.scrollTo;f=!!t&&!/\\{\\s*\\[native code\\]\\s*\\}/.test(t.toString())}}return f}function y(){if(\"object\"!=typeof document||!document)return 0;if(null==d){const t=document.createElement(\"div\"),e=t.style;t.dir=\"rtl\",e.width=\"1px\",e.overflow=\"auto\",e.visibility=\"hidden\",e.pointerEvents=\"none\",e.position=\"absolute\";const n=document.createElement(\"div\"),r=n.style;r.width=\"2px\",r.height=\"1px\",t.appendChild(n),document.body.appendChild(t),d=0,0===t.scrollLeft&&(t.scrollLeft=1,d=0===t.scrollLeft?1:2),t.parentNode.removeChild(t)}return d}function v(t){if(function(){if(null==p){const t=\"undefined\"!=typeof document?document.head:null;p=!(!t||!t.createShadowRoot&&!t.attachShadow)}return p}()){const e=t.getRootNode?t.getRootNode():null;if(\"undefined\"!=typeof ShadowRoot&&ShadowRoot&&e instanceof ShadowRoot)return e}return null}},nYR2:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return a}));var r=n(\"7o/Q\"),i=n(\"quSY\");function a(t){return e=>e.lift(new o(t))}class o{constructor(t){this.callback=t}call(t,e){return e.subscribe(new s(t,this.callback))}}class s extends r.a{constructor(t,e){super(t),this.add(new i.a(e))}}},ngJS:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return r}));const r=t=>e=>{for(let n=0,r=t.length;n<r&&!e.closed;n++)e.next(t[n]);e.complete()}},nm5K:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return l}));var r=n(\"AytR\"),i=n(\"fXoL\"),a=n(\"tk/3\"),o=n(\"jhN1\");const s=r.a.apiUrl;let l=(()=>{class t{constructor(t,e){this.http=t,this.sanitizer=e}get(t,e){return console.warn(\"Network: GET\",`${s}/${t}`,e||{}),this.http.get(`${s}/${t}`,{params:e})}post(t,e,n){return this.http.post(`${s}/${t}`,e,{params:n})}put(t,e){return this.http.put(`${s}/${t}`,e)}delete(t){return this.http.delete(`${s}/${t}`)}patch(t,e){return this.http.patch(`${s}/${t}`,e)}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(a.a),i.hc(o.b))},t.\\u0275prov=i.Tb({token:t,factory:t.\\u0275fac,providedIn:\"root\"}),t})()},nyYc:function(t,e,n){!function(t){\"use strict\";var e=/(janv\\.?|f\\xe9vr\\.?|mars|avr\\.?|mai|juin|juil\\.?|ao\\xfbt|sept\\.?|oct\\.?|nov\\.?|d\\xe9c\\.?|janvier|f\\xe9vrier|mars|avril|mai|juin|juillet|ao\\xfbt|septembre|octobre|novembre|d\\xe9cembre)/i,n=[/^janv/i,/^f\\xe9vr/i,/^mars/i,/^avr/i,/^mai/i,/^juin/i,/^juil/i,/^ao\\xfbt/i,/^sept/i,/^oct/i,/^nov/i,/^d\\xe9c/i];t.defineLocale(\"fr\",{months:\"janvier_f\\xe9vrier_mars_avril_mai_juin_juillet_ao\\xfbt_septembre_octobre_novembre_d\\xe9cembre\".split(\"_\"),monthsShort:\"janv._f\\xe9vr._mars_avr._mai_juin_juil._ao\\xfbt_sept._oct._nov._d\\xe9c.\".split(\"_\"),monthsRegex:e,monthsShortRegex:e,monthsStrictRegex:/^(janvier|f\\xe9vrier|mars|avril|mai|juin|juillet|ao\\xfbt|septembre|octobre|novembre|d\\xe9cembre)/i,monthsShortStrictRegex:/(janv\\.?|f\\xe9vr\\.?|mars|avr\\.?|mai|juin|juil\\.?|ao\\xfbt|sept\\.?|oct\\.?|nov\\.?|d\\xe9c\\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:\"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\".split(\"_\"),weekdaysShort:\"dim._lun._mar._mer._jeu._ven._sam.\".split(\"_\"),weekdaysMin:\"di_lu_ma_me_je_ve_sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Aujourd\\u2019hui \\xe0] LT\",nextDay:\"[Demain \\xe0] LT\",nextWeek:\"dddd [\\xe0] LT\",lastDay:\"[Hier \\xe0] LT\",lastWeek:\"dddd [dernier \\xe0] LT\",sameElse:\"L\"},relativeTime:{future:\"dans %s\",past:\"il y a %s\",s:\"quelques secondes\",ss:\"%d secondes\",m:\"une minute\",mm:\"%d minutes\",h:\"une heure\",hh:\"%d heures\",d:\"un jour\",dd:\"%d jours\",w:\"une semaine\",ww:\"%d semaines\",M:\"un mois\",MM:\"%d mois\",y:\"un an\",yy:\"%d ans\"},dayOfMonthOrdinalParse:/\\d{1,2}(er|)/,ordinal:function(t,e){switch(e){case\"D\":return t+(1===t?\"er\":\"\");default:case\"M\":case\"Q\":case\"DDD\":case\"d\":return t+(1===t?\"er\":\"e\");case\"w\":case\"W\":return t+(1===t?\"re\":\"e\")}},week:{dow:1,doy:4}})}(n(\"wd/R\"))},o1bE:function(t,e,n){!function(t){\"use strict\";var e=function(t){return 0===t?0:1===t?1:2===t?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5},n={s:[\"\\u0623\\u0642\\u0644 \\u0645\\u0646 \\u062b\\u0627\\u0646\\u064a\\u0629\",\"\\u062b\\u0627\\u0646\\u064a\\u0629 \\u0648\\u0627\\u062d\\u062f\\u0629\",[\"\\u062b\\u0627\\u0646\\u064a\\u062a\\u0627\\u0646\",\"\\u062b\\u0627\\u0646\\u064a\\u062a\\u064a\\u0646\"],\"%d \\u062b\\u0648\\u0627\\u0646\",\"%d \\u062b\\u0627\\u0646\\u064a\\u0629\",\"%d \\u062b\\u0627\\u0646\\u064a\\u0629\"],m:[\"\\u0623\\u0642\\u0644 \\u0645\\u0646 \\u062f\\u0642\\u064a\\u0642\\u0629\",\"\\u062f\\u0642\\u064a\\u0642\\u0629 \\u0648\\u0627\\u062d\\u062f\\u0629\",[\"\\u062f\\u0642\\u064a\\u0642\\u062a\\u0627\\u0646\",\"\\u062f\\u0642\\u064a\\u0642\\u062a\\u064a\\u0646\"],\"%d \\u062f\\u0642\\u0627\\u0626\\u0642\",\"%d \\u062f\\u0642\\u064a\\u0642\\u0629\",\"%d \\u062f\\u0642\\u064a\\u0642\\u0629\"],h:[\"\\u0623\\u0642\\u0644 \\u0645\\u0646 \\u0633\\u0627\\u0639\\u0629\",\"\\u0633\\u0627\\u0639\\u0629 \\u0648\\u0627\\u062d\\u062f\\u0629\",[\"\\u0633\\u0627\\u0639\\u062a\\u0627\\u0646\",\"\\u0633\\u0627\\u0639\\u062a\\u064a\\u0646\"],\"%d \\u0633\\u0627\\u0639\\u0627\\u062a\",\"%d \\u0633\\u0627\\u0639\\u0629\",\"%d \\u0633\\u0627\\u0639\\u0629\"],d:[\"\\u0623\\u0642\\u0644 \\u0645\\u0646 \\u064a\\u0648\\u0645\",\"\\u064a\\u0648\\u0645 \\u0648\\u0627\\u062d\\u062f\",[\"\\u064a\\u0648\\u0645\\u0627\\u0646\",\"\\u064a\\u0648\\u0645\\u064a\\u0646\"],\"%d \\u0623\\u064a\\u0627\\u0645\",\"%d \\u064a\\u0648\\u0645\\u064b\\u0627\",\"%d \\u064a\\u0648\\u0645\"],M:[\"\\u0623\\u0642\\u0644 \\u0645\\u0646 \\u0634\\u0647\\u0631\",\"\\u0634\\u0647\\u0631 \\u0648\\u0627\\u062d\\u062f\",[\"\\u0634\\u0647\\u0631\\u0627\\u0646\",\"\\u0634\\u0647\\u0631\\u064a\\u0646\"],\"%d \\u0623\\u0634\\u0647\\u0631\",\"%d \\u0634\\u0647\\u0631\\u0627\",\"%d \\u0634\\u0647\\u0631\"],y:[\"\\u0623\\u0642\\u0644 \\u0645\\u0646 \\u0639\\u0627\\u0645\",\"\\u0639\\u0627\\u0645 \\u0648\\u0627\\u062d\\u062f\",[\"\\u0639\\u0627\\u0645\\u0627\\u0646\",\"\\u0639\\u0627\\u0645\\u064a\\u0646\"],\"%d \\u0623\\u0639\\u0648\\u0627\\u0645\",\"%d \\u0639\\u0627\\u0645\\u064b\\u0627\",\"%d \\u0639\\u0627\\u0645\"]},r=function(t){return function(r,i,a,o){var s=e(r),l=n[t][e(r)];return 2===s&&(l=l[i?0:1]),l.replace(/%d/i,r)}},i=[\"\\u062c\\u0627\\u0646\\u0641\\u064a\",\"\\u0641\\u064a\\u0641\\u0631\\u064a\",\"\\u0645\\u0627\\u0631\\u0633\",\"\\u0623\\u0641\\u0631\\u064a\\u0644\",\"\\u0645\\u0627\\u064a\",\"\\u062c\\u0648\\u0627\\u0646\",\"\\u062c\\u0648\\u064a\\u0644\\u064a\\u0629\",\"\\u0623\\u0648\\u062a\",\"\\u0633\\u0628\\u062a\\u0645\\u0628\\u0631\",\"\\u0623\\u0643\\u062a\\u0648\\u0628\\u0631\",\"\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631\",\"\\u062f\\u064a\\u0633\\u0645\\u0628\\u0631\"];t.defineLocale(\"ar-dz\",{months:i,monthsShort:i,weekdays:\"\\u0627\\u0644\\u0623\\u062d\\u062f_\\u0627\\u0644\\u0625\\u062b\\u0646\\u064a\\u0646_\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621_\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621_\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633_\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629_\\u0627\\u0644\\u0633\\u0628\\u062a\".split(\"_\"),weekdaysShort:\"\\u0623\\u062d\\u062f_\\u0625\\u062b\\u0646\\u064a\\u0646_\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621_\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621_\\u062e\\u0645\\u064a\\u0633_\\u062c\\u0645\\u0639\\u0629_\\u0633\\u0628\\u062a\".split(\"_\"),weekdaysMin:\"\\u062d_\\u0646_\\u062b_\\u0631_\\u062e_\\u062c_\\u0633\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"D/\\u200fM/\\u200fYYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/\\u0635|\\u0645/,isPM:function(t){return\"\\u0645\"===t},meridiem:function(t,e,n){return t<12?\"\\u0635\":\"\\u0645\"},calendar:{sameDay:\"[\\u0627\\u0644\\u064a\\u0648\\u0645 \\u0639\\u0646\\u062f \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",nextDay:\"[\\u063a\\u062f\\u064b\\u0627 \\u0639\\u0646\\u062f \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",nextWeek:\"dddd [\\u0639\\u0646\\u062f \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",lastDay:\"[\\u0623\\u0645\\u0633 \\u0639\\u0646\\u062f \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",lastWeek:\"dddd [\\u0639\\u0646\\u062f \\u0627\\u0644\\u0633\\u0627\\u0639\\u0629] LT\",sameElse:\"L\"},relativeTime:{future:\"\\u0628\\u0639\\u062f %s\",past:\"\\u0645\\u0646\\u0630 %s\",s:r(\"s\"),ss:r(\"s\"),m:r(\"m\"),mm:r(\"m\"),h:r(\"h\"),hh:r(\"h\"),d:r(\"d\"),dd:r(\"d\"),M:r(\"M\"),MM:r(\"M\"),y:r(\"y\"),yy:r(\"y\")},postformat:function(t){return t.replace(/,/g,\"\\u060c\")},week:{dow:0,doy:4}})}(n(\"wd/R\"))},oOf3:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return S})),n.d(e,\"c\",(function(){return w})),n.d(e,\"b\",(function(){return v}));var r=n(\"fXoL\"),i=n(\"ofXK\");function a(t,e){if(1&t){var n=r.ec();r.dc(0,\"a\",11),r.lc(\"keyup.enter\",(function(){return r.Ec(n),r.pc(3),r.Bc(1).previous()}))(\"click\",(function(){return r.Ec(n),r.pc(3),r.Bc(1).previous()})),r.Oc(1),r.dc(2,\"span\",12),r.Oc(3),r.cc(),r.cc()}if(2&t){var i=r.pc(3);r.Mb(\"aria-label\",i.previousLabel+\" \"+i.screenReaderPageLabel),r.Lb(1),r.Qc(\" \",i.previousLabel,\" \"),r.Lb(2),r.Pc(i.screenReaderPageLabel)}}function o(t,e){if(1&t&&(r.dc(0,\"span\"),r.Oc(1),r.dc(2,\"span\",12),r.Oc(3),r.cc(),r.cc()),2&t){var n=r.pc(3);r.Lb(1),r.Qc(\" \",n.previousLabel,\" \"),r.Lb(2),r.Pc(n.screenReaderPageLabel)}}function s(t,e){if(1&t&&(r.dc(0,\"li\",8),r.Mc(1,a,4,3,\"a\",9),r.Mc(2,o,4,2,\"span\",10),r.cc()),2&t){r.pc(2);var n=r.Bc(1);r.Pb(\"disabled\",n.isFirstPage()),r.Lb(1),r.vc(\"ngIf\",1<n.getCurrent()),r.Lb(1),r.vc(\"ngIf\",n.isFirstPage())}}function l(t,e){if(1&t){var n=r.ec();r.dc(0,\"a\",11),r.lc(\"keyup.enter\",(function(){r.Ec(n);var t=r.pc().$implicit;return r.pc(2),r.Bc(1).setCurrent(t.value)}))(\"click\",(function(){r.Ec(n);var t=r.pc().$implicit;return r.pc(2),r.Bc(1).setCurrent(t.value)})),r.dc(1,\"span\",12),r.Oc(2),r.cc(),r.dc(3,\"span\"),r.Oc(4),r.qc(5,\"number\"),r.cc(),r.cc()}if(2&t){var i=r.pc().$implicit,a=r.pc(2);r.Lb(2),r.Qc(\"\",a.screenReaderPageLabel,\" \"),r.Lb(2),r.Pc(\"...\"===i.label?i.label:r.sc(5,2,i.label,\"\"))}}function c(t,e){if(1&t&&(r.bc(0),r.dc(1,\"span\",12),r.Oc(2),r.cc(),r.dc(3,\"span\"),r.Oc(4),r.qc(5,\"number\"),r.cc(),r.ac()),2&t){var n=r.pc().$implicit,i=r.pc(2);r.Lb(2),r.Qc(\"\",i.screenReaderCurrentLabel,\" \"),r.Lb(2),r.Pc(\"...\"===n.label?n.label:r.sc(5,2,n.label,\"\"))}}function u(t,e){if(1&t&&(r.dc(0,\"li\"),r.Mc(1,l,6,5,\"a\",9),r.Mc(2,c,6,5,\"ng-container\",10),r.cc()),2&t){var n=e.$implicit;r.pc(2);var i=r.Bc(1);r.Pb(\"current\",i.getCurrent()===n.value)(\"ellipsis\",\"...\"===n.label),r.Lb(1),r.vc(\"ngIf\",i.getCurrent()!==n.value),r.Lb(1),r.vc(\"ngIf\",i.getCurrent()===n.value)}}function h(t,e){if(1&t){var n=r.ec();r.dc(0,\"a\",11),r.lc(\"keyup.enter\",(function(){return r.Ec(n),r.pc(3),r.Bc(1).next()}))(\"click\",(function(){return r.Ec(n),r.pc(3),r.Bc(1).next()})),r.Oc(1),r.dc(2,\"span\",12),r.Oc(3),r.cc(),r.cc()}if(2&t){var i=r.pc(3);r.Mb(\"aria-label\",i.nextLabel+\" \"+i.screenReaderPageLabel),r.Lb(1),r.Qc(\" \",i.nextLabel,\" \"),r.Lb(2),r.Pc(i.screenReaderPageLabel)}}function d(t,e){if(1&t&&(r.dc(0,\"span\"),r.Oc(1),r.dc(2,\"span\",12),r.Oc(3),r.cc(),r.cc()),2&t){var n=r.pc(3);r.Lb(1),r.Qc(\" \",n.nextLabel,\" \"),r.Lb(2),r.Pc(n.screenReaderPageLabel)}}function f(t,e){if(1&t&&(r.dc(0,\"li\",13),r.Mc(1,h,4,3,\"a\",9),r.Mc(2,d,4,2,\"span\",10),r.cc()),2&t){r.pc(2);var n=r.Bc(1);r.Pb(\"disabled\",n.isLastPage()),r.Lb(1),r.vc(\"ngIf\",!n.isLastPage()),r.Lb(1),r.vc(\"ngIf\",n.isLastPage())}}function p(t,e){if(1&t&&(r.dc(0,\"ul\",3),r.Mc(1,s,3,4,\"li\",4),r.dc(2,\"li\",5),r.Oc(3),r.cc(),r.Mc(4,u,3,6,\"li\",6),r.Mc(5,f,3,4,\"li\",7),r.cc()),2&t){var n=r.pc(),i=r.Bc(1);r.Pb(\"responsive\",n.responsive),r.Mb(\"aria-label\",n.screenReaderPaginationLabel),r.Lb(1),r.vc(\"ngIf\",n.directionLinks),r.Lb(2),r.Rc(\" \",i.getCurrent(),\" / \",i.getLastPage(),\" \"),r.Lb(1),r.vc(\"ngForOf\",i.pages),r.Lb(1),r.vc(\"ngIf\",n.directionLinks)}}var m=function(){function t(){this.change=new r.s,this.instances={},this.DEFAULT_ID=\"DEFAULT_PAGINATION_ID\"}return t.prototype.defaultId=function(){return this.DEFAULT_ID},t.prototype.register=function(t){return null==t.id&&(t.id=this.DEFAULT_ID),this.instances[t.id]?this.updateInstance(t):(this.instances[t.id]=t,!0)},t.prototype.updateInstance=function(t){var e=!1;for(var n in this.instances[t.id])t[n]!==this.instances[t.id][n]&&(this.instances[t.id][n]=t[n],e=!0);return e},t.prototype.getCurrentPage=function(t){if(this.instances[t])return this.instances[t].currentPage},t.prototype.setCurrentPage=function(t,e){if(this.instances[t]){var n=this.instances[t];e<=Math.ceil(n.totalItems/n.itemsPerPage)&&1<=e&&(this.instances[t].currentPage=e,this.change.emit(t))}},t.prototype.setTotalItems=function(t,e){this.instances[t]&&0<=e&&(this.instances[t].totalItems=e,this.change.emit(t))},t.prototype.setItemsPerPage=function(t,e){this.instances[t]&&(this.instances[t].itemsPerPage=e,this.change.emit(t))},t.prototype.getInstance=function(t){return void 0===t&&(t=this.DEFAULT_ID),this.instances[t]?this.clone(this.instances[t]):{}},t.prototype.clone=function(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e},t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=r.Tb({token:t,factory:function(e){return t.\\u0275fac(e)}}),t}(),g=function(t,e){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(t,e)},y=Number.MAX_SAFE_INTEGER,v=function(){function t(t){this.service=t,this.state={}}return t.prototype.transform=function(t,e){if(!(t instanceof Array)){var n=e.id||this.service.defaultId();return this.state[n]?this.state[n].slice:t}var r,i,a=e.totalItems&&e.totalItems!==t.length,o=this.createInstance(t,e),s=o.id,l=o.itemsPerPage,c=this.service.register(o);if(!a&&t instanceof Array){if(this.stateIsIdentical(s,t,r=(o.currentPage-1)*(l=+l||y),i=r+l))return this.state[s].slice;var u=t.slice(r,i);return this.saveState(s,t,u,r,i),this.service.change.emit(s),u}return c&&this.service.change.emit(s),this.saveState(s,t,t,r,i),t},t.prototype.createInstance=function(t,e){return this.checkConfig(e),{id:null!=e.id?e.id:this.service.defaultId(),itemsPerPage:+e.itemsPerPage||0,currentPage:+e.currentPage||1,totalItems:+e.totalItems||t.length}},t.prototype.checkConfig=function(t){var e=[\"itemsPerPage\",\"currentPage\"].filter((function(e){return!(e in t)}));if(0<e.length)throw new Error(\"PaginatePipe: Argument is missing the following required properties: \"+e.join(\", \"))},t.prototype.saveState=function(t,e,n,r,i){this.state[t]={collection:e,size:e.length,slice:n,start:r,end:i}},t.prototype.stateIsIdentical=function(t,e,n,r){var i=this.state[t];return!!i&&!(i.size!==e.length||i.start!==n||i.end!==r)&&i.slice.every((function(t,r){return t===e[n+r]}))},(t=function(t,e,n,r){var i,a=arguments.length,o=a<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(t,e,n,r);else for(var s=t.length-1;s>=0;s--)(i=t[s])&&(o=(a<3?i(o):a>3?i(e,n,o):i(e,n))||o);return a>3&&o&&Object.defineProperty(e,n,o),o}([g(\"design:paramtypes\",[m])],t)).\\u0275fac=function(e){return new(e||t)(r.Xb(m))},t.\\u0275pipe=r.Wb({name:\"paginate\",type:t,pure:!1}),t}(),_=function(t,e,n,r){var i,a=arguments.length,o=a<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(t,e,n,r);else for(var s=t.length-1;s>=0;s--)(i=t[s])&&(o=(a<3?i(o):a>3?i(e,n,o):i(e,n))||o);return a>3&&o&&Object.defineProperty(e,n,o),o},b=function(t,e){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(t,e)};function x(t){return!!t&&\"false\"!==t}var w=function(){function t(){this.maxSize=7,this.previousLabel=\"Previous\",this.nextLabel=\"Next\",this.screenReaderPaginationLabel=\"Pagination\",this.screenReaderPageLabel=\"page\",this.screenReaderCurrentLabel=\"You're on page\",this.pageChange=new r.s,this.pageBoundsCorrection=new r.s,this._directionLinks=!0,this._autoHide=!1,this._responsive=!1}return Object.defineProperty(t.prototype,\"directionLinks\",{get:function(){return this._directionLinks},set:function(t){this._directionLinks=x(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"autoHide\",{get:function(){return this._autoHide},set:function(t){this._autoHide=x(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"responsive\",{get:function(){return this._responsive},set:function(t){this._responsive=x(t)},enumerable:!0,configurable:!0}),_([Object(r.y)(),b(\"design:type\",String)],t.prototype,\"id\",void 0),_([Object(r.y)(),b(\"design:type\",Number)],t.prototype,\"maxSize\",void 0),_([Object(r.y)(),b(\"design:type\",Boolean),b(\"design:paramtypes\",[Boolean])],t.prototype,\"directionLinks\",null),_([Object(r.y)(),b(\"design:type\",Boolean),b(\"design:paramtypes\",[Boolean])],t.prototype,\"autoHide\",null),_([Object(r.y)(),b(\"design:type\",Boolean),b(\"design:paramtypes\",[Boolean])],t.prototype,\"responsive\",null),_([Object(r.y)(),b(\"design:type\",String)],t.prototype,\"previousLabel\",void 0),_([Object(r.y)(),b(\"design:type\",String)],t.prototype,\"nextLabel\",void 0),_([Object(r.y)(),b(\"design:type\",String)],t.prototype,\"screenReaderPaginationLabel\",void 0),_([Object(r.y)(),b(\"design:type\",String)],t.prototype,\"screenReaderPageLabel\",void 0),_([Object(r.y)(),b(\"design:type\",String)],t.prototype,\"screenReaderCurrentLabel\",void 0),_([Object(r.J)(),b(\"design:type\",r.s)],t.prototype,\"pageChange\",void 0),_([Object(r.J)(),b(\"design:type\",r.s)],t.prototype,\"pageBoundsCorrection\",void 0),t.\\u0275fac=function(e){return new(e||t)},t.\\u0275cmp=r.Rb({type:t,selectors:[[\"pagination-controls\"]],inputs:{maxSize:\"maxSize\",previousLabel:\"previousLabel\",nextLabel:\"nextLabel\",screenReaderPaginationLabel:\"screenReaderPaginationLabel\",screenReaderPageLabel:\"screenReaderPageLabel\",screenReaderCurrentLabel:\"screenReaderCurrentLabel\",directionLinks:\"directionLinks\",autoHide:\"autoHide\",responsive:\"responsive\",id:\"id\"},outputs:{pageChange:\"pageChange\",pageBoundsCorrection:\"pageBoundsCorrection\"},decls:3,vars:3,consts:[[3,\"id\",\"maxSize\",\"pageChange\",\"pageBoundsCorrection\"],[\"p\",\"paginationApi\"],[\"class\",\"ngx-pagination\",\"role\",\"navigation\",3,\"responsive\",4,\"ngIf\"],[\"role\",\"navigation\",1,\"ngx-pagination\"],[\"class\",\"pagination-previous\",3,\"disabled\",4,\"ngIf\"],[1,\"small-screen\"],[3,\"current\",\"ellipsis\",4,\"ngFor\",\"ngForOf\"],[\"class\",\"pagination-next\",3,\"disabled\",4,\"ngIf\"],[1,\"pagination-previous\"],[\"tabindex\",\"0\",3,\"keyup.enter\",\"click\",4,\"ngIf\"],[4,\"ngIf\"],[\"tabindex\",\"0\",3,\"keyup.enter\",\"click\"],[1,\"show-for-sr\"],[1,\"pagination-next\"]],template:function(t,e){if(1&t&&(r.dc(0,\"pagination-template\",0,1),r.lc(\"pageChange\",(function(t){return e.pageChange.emit(t)}))(\"pageBoundsCorrection\",(function(t){return e.pageBoundsCorrection.emit(t)})),r.Mc(2,p,6,8,\"ul\",2),r.cc()),2&t){var n=r.Bc(1);r.vc(\"id\",e.id)(\"maxSize\",e.maxSize),r.Lb(2),r.vc(\"ngIf\",!(e.autoHide&&n.pages.length<=1))}},directives:function(){return[T,i.o,i.n]},pipes:function(){return[i.f]},styles:[\"\\n.ngx-pagination {\\n  margin-left: 0;\\n  margin-bottom: 1rem; }\\n  .ngx-pagination::before, .ngx-pagination::after {\\n    content: ' ';\\n    display: table; }\\n  .ngx-pagination::after {\\n    clear: both; }\\n  .ngx-pagination li {\\n    -moz-user-select: none;\\n    -webkit-user-select: none;\\n    -ms-user-select: none;\\n    margin-right: 0.0625rem;\\n    border-radius: 0; }\\n  .ngx-pagination li {\\n    display: inline-block; }\\n  .ngx-pagination a,\\n  .ngx-pagination button {\\n    color: #0a0a0a; \\n    display: block;\\n    padding: 0.1875rem 0.625rem;\\n    border-radius: 0; }\\n    .ngx-pagination a:hover,\\n    .ngx-pagination button:hover {\\n      background: #e6e6e6; }\\n  .ngx-pagination .current {\\n    padding: 0.1875rem 0.625rem;\\n    background: #2199e8;\\n    color: #fefefe;\\n    cursor: default; }\\n  .ngx-pagination .disabled {\\n    padding: 0.1875rem 0.625rem;\\n    color: #cacaca;\\n    cursor: default; } \\n    .ngx-pagination .disabled:hover {\\n      background: transparent; }\\n  .ngx-pagination a, .ngx-pagination button {\\n    cursor: pointer; }\\n\\n.ngx-pagination .pagination-previous a::before,\\n.ngx-pagination .pagination-previous.disabled::before { \\n  content: '\\xab';\\n  display: inline-block;\\n  margin-right: 0.5rem; }\\n\\n.ngx-pagination .pagination-next a::after,\\n.ngx-pagination .pagination-next.disabled::after {\\n  content: '\\xbb';\\n  display: inline-block;\\n  margin-left: 0.5rem; }\\n\\n.ngx-pagination .show-for-sr {\\n  position: absolute !important;\\n  width: 1px;\\n  height: 1px;\\n  overflow: hidden;\\n  clip: rect(0, 0, 0, 0); }\\n.ngx-pagination .small-screen {\\n  display: none; }\\n@media screen and (max-width: 601px) {\\n  .ngx-pagination.responsive .small-screen {\\n    display: inline-block; } \\n  .ngx-pagination.responsive li:not(.small-screen):not(.pagination-previous):not(.pagination-next) {\\n    display: none; }\\n}\\n  \"],encapsulation:2,changeDetection:0}),t}(),k=function(t,e,n,r){var i,a=arguments.length,o=a<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(t,e,n,r);else for(var s=t.length-1;s>=0;s--)(i=t[s])&&(o=(a<3?i(o):a>3?i(e,n,o):i(e,n))||o);return a>3&&o&&Object.defineProperty(e,n,o),o},M=function(t,e){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(t,e)},T=function(){function t(t,e){var n=this;this.service=t,this.changeDetectorRef=e,this.maxSize=7,this.pageChange=new r.s,this.pageBoundsCorrection=new r.s,this.pages=[],this.changeSub=this.service.change.subscribe((function(t){n.id===t&&(n.updatePageLinks(),n.changeDetectorRef.markForCheck(),n.changeDetectorRef.detectChanges())}))}return t.prototype.ngOnInit=function(){void 0===this.id&&(this.id=this.service.defaultId()),this.updatePageLinks()},t.prototype.ngOnChanges=function(t){this.updatePageLinks()},t.prototype.ngOnDestroy=function(){this.changeSub.unsubscribe()},t.prototype.previous=function(){this.checkValidId(),this.setCurrent(this.getCurrent()-1)},t.prototype.next=function(){this.checkValidId(),this.setCurrent(this.getCurrent()+1)},t.prototype.isFirstPage=function(){return 1===this.getCurrent()},t.prototype.isLastPage=function(){return this.getLastPage()===this.getCurrent()},t.prototype.setCurrent=function(t){this.pageChange.emit(t)},t.prototype.getCurrent=function(){return this.service.getCurrentPage(this.id)},t.prototype.getLastPage=function(){var t=this.service.getInstance(this.id);return t.totalItems<1?1:Math.ceil(t.totalItems/t.itemsPerPage)},t.prototype.getTotalItems=function(){return this.service.getInstance(this.id).totalItems},t.prototype.checkValidId=function(){null==this.service.getInstance(this.id).id&&console.warn('PaginationControlsDirective: the specified id \"'+this.id+'\" does not match any registered PaginationInstance')},t.prototype.updatePageLinks=function(){var t=this,e=this.service.getInstance(this.id),n=this.outOfBoundCorrection(e);n!==e.currentPage?setTimeout((function(){t.pageBoundsCorrection.emit(n),t.pages=t.createPageArray(e.currentPage,e.itemsPerPage,e.totalItems,t.maxSize)})):this.pages=this.createPageArray(e.currentPage,e.itemsPerPage,e.totalItems,this.maxSize)},t.prototype.outOfBoundCorrection=function(t){var e=Math.ceil(t.totalItems/t.itemsPerPage);return e<t.currentPage&&0<e?e:t.currentPage<1?1:t.currentPage},t.prototype.createPageArray=function(t,e,n,r){r=+r;for(var i=[],a=Math.ceil(n/e),o=Math.ceil(r/2),s=t<=o,l=a-o<t,c=!s&&!l,u=r<a,h=1;h<=a&&h<=r;){var d=this.calculatePageNumber(h,t,r,a);i.push({label:u&&(2===h&&(c||l)||h===r-1&&(c||s))?\"...\":d,value:d}),h++}return i},t.prototype.calculatePageNumber=function(t,e,n,r){var i=Math.ceil(n/2);return t===n?r:1===t?t:n<r?r-i<e?r-n+t:i<e?e-i+t:t:t},k([Object(r.y)(),M(\"design:type\",String)],t.prototype,\"id\",void 0),k([Object(r.y)(),M(\"design:type\",Number)],t.prototype,\"maxSize\",void 0),k([Object(r.J)(),M(\"design:type\",r.s)],t.prototype,\"pageChange\",void 0),k([Object(r.J)(),M(\"design:type\",r.s)],t.prototype,\"pageBoundsCorrection\",void 0),(t=k([M(\"design:paramtypes\",[m,r.j])],t)).\\u0275fac=function(e){return new(e||t)(r.Xb(m),r.Xb(r.j))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"pagination-template\"],[\"\",\"pagination-template\",\"\"]],inputs:{maxSize:\"maxSize\",id:\"id\"},outputs:{pageChange:\"pageChange\",pageBoundsCorrection:\"pageBoundsCorrection\"},exportAs:[\"paginationApi\"],features:[r.Jb]}),t}(),S=function(){function t(){}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},providers:[m],imports:[[i.c]]}),t}()},ofXK:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return b})),n.d(e,\"b\",(function(){return Lt})),n.d(e,\"c\",(function(){return Pt})),n.d(e,\"d\",(function(){return l})),n.d(e,\"e\",(function(){return Ot})),n.d(e,\"f\",(function(){return It})),n.d(e,\"g\",(function(){return w})),n.d(e,\"h\",(function(){return Dt})),n.d(e,\"i\",(function(){return h})),n.d(e,\"j\",(function(){return k})),n.d(e,\"k\",(function(){return v})),n.d(e,\"l\",(function(){return Ct})),n.d(e,\"m\",(function(){return ut})),n.d(e,\"n\",(function(){return dt})),n.d(e,\"o\",(function(){return pt})),n.d(e,\"p\",(function(){return xt})),n.d(e,\"q\",(function(){return vt})),n.d(e,\"r\",(function(){return _t})),n.d(e,\"s\",(function(){return bt})),n.d(e,\"t\",(function(){return wt})),n.d(e,\"u\",(function(){return x})),n.d(e,\"v\",(function(){return c})),n.d(e,\"w\",(function(){return Et})),n.d(e,\"x\",(function(){return Ft})),n.d(e,\"y\",(function(){return zt})),n.d(e,\"z\",(function(){return jt})),n.d(e,\"A\",(function(){return s})),n.d(e,\"B\",(function(){return Rt})),n.d(e,\"C\",(function(){return a})),n.d(e,\"D\",(function(){return ct})),n.d(e,\"E\",(function(){return o}));var r=n(\"fXoL\");let i=null;function a(){return i}function o(t){i||(i=t)}class s{}const l=new r.w(\"DocumentToken\");let c=(()=>{class t{}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=Object(r.Tb)({factory:u,token:t,providedIn:\"platform\"}),t})();function u(){return Object(r.hc)(d)}const h=new r.w(\"Location Initialized\");let d=(()=>{class t extends c{constructor(t){super(),this._doc=t,this._init()}_init(){this.location=a().getLocation(),this._history=a().getHistory()}getBaseHrefFromDOM(){return a().getBaseHref(this._doc)}onPopState(t){a().getGlobalEventTarget(this._doc,\"window\").addEventListener(\"popstate\",t,!1)}onHashChange(t){a().getGlobalEventTarget(this._doc,\"window\").addEventListener(\"hashchange\",t,!1)}get href(){return this.location.href}get protocol(){return this.location.protocol}get hostname(){return this.location.hostname}get port(){return this.location.port}get pathname(){return this.location.pathname}get search(){return this.location.search}get hash(){return this.location.hash}set pathname(t){this.location.pathname=t}pushState(t,e,n){f()?this._history.pushState(t,e,n):this.location.hash=n}replaceState(t,e,n){f()?this._history.replaceState(t,e,n):this.location.hash=n}forward(){this._history.forward()}back(){this._history.back()}getState(){return this._history.state}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(l))},t.\\u0275prov=Object(r.Tb)({factory:p,token:t,providedIn:\"platform\"}),t})();function f(){return!!window.history.pushState}function p(){return new d(Object(r.hc)(l))}function m(t,e){if(0==t.length)return e;if(0==e.length)return t;let n=0;return t.endsWith(\"/\")&&n++,e.startsWith(\"/\")&&n++,2==n?t+e.substring(1):1==n?t+e:t+\"/\"+e}function g(t){const e=t.match(/#|\\?|$/),n=e&&e.index||t.length;return t.slice(0,n-(\"/\"===t[n-1]?1:0))+t.slice(n)}function y(t){return t&&\"?\"!==t[0]?\"?\"+t:t}let v=(()=>{class t{}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=Object(r.Tb)({factory:_,token:t,providedIn:\"root\"}),t})();function _(t){const e=Object(r.hc)(l).location;return new x(Object(r.hc)(c),e&&e.origin||\"\")}const b=new r.w(\"appBaseHref\");let x=(()=>{class t extends v{constructor(t,e){if(super(),this._platformLocation=t,null==e&&(e=this._platformLocation.getBaseHrefFromDOM()),null==e)throw new Error(\"No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.\");this._baseHref=e}onPopState(t){this._platformLocation.onPopState(t),this._platformLocation.onHashChange(t)}getBaseHref(){return this._baseHref}prepareExternalUrl(t){return m(this._baseHref,t)}path(t=!1){const e=this._platformLocation.pathname+y(this._platformLocation.search),n=this._platformLocation.hash;return n&&t?`${e}${n}`:e}pushState(t,e,n,r){const i=this.prepareExternalUrl(n+y(r));this._platformLocation.pushState(t,e,i)}replaceState(t,e,n,r){const i=this.prepareExternalUrl(n+y(r));this._platformLocation.replaceState(t,e,i)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(c),r.hc(b,8))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})(),w=(()=>{class t extends v{constructor(t,e){super(),this._platformLocation=t,this._baseHref=\"\",null!=e&&(this._baseHref=e)}onPopState(t){this._platformLocation.onPopState(t),this._platformLocation.onHashChange(t)}getBaseHref(){return this._baseHref}path(t=!1){let e=this._platformLocation.hash;return null==e&&(e=\"#\"),e.length>0?e.substring(1):e}prepareExternalUrl(t){const e=m(this._baseHref,t);return e.length>0?\"#\"+e:e}pushState(t,e,n,r){let i=this.prepareExternalUrl(n+y(r));0==i.length&&(i=this._platformLocation.pathname),this._platformLocation.pushState(t,e,i)}replaceState(t,e,n,r){let i=this.prepareExternalUrl(n+y(r));0==i.length&&(i=this._platformLocation.pathname),this._platformLocation.replaceState(t,e,i)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(c),r.hc(b,8))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})(),k=(()=>{class t{constructor(t,e){this._subject=new r.s,this._urlChangeListeners=[],this._platformStrategy=t;const n=this._platformStrategy.getBaseHref();this._platformLocation=e,this._baseHref=g(T(n)),this._platformStrategy.onPopState(t=>{this._subject.emit({url:this.path(!0),pop:!0,state:t.state,type:t.type})})}path(t=!1){return this.normalize(this._platformStrategy.path(t))}getState(){return this._platformLocation.getState()}isCurrentPathEqualTo(t,e=\"\"){return this.path()==this.normalize(t+y(e))}normalize(e){return t.stripTrailingSlash(function(t,e){return t&&e.startsWith(t)?e.substring(t.length):e}(this._baseHref,T(e)))}prepareExternalUrl(t){return t&&\"/\"!==t[0]&&(t=\"/\"+t),this._platformStrategy.prepareExternalUrl(t)}go(t,e=\"\",n=null){this._platformStrategy.pushState(n,\"\",t,e),this._notifyUrlChangeListeners(this.prepareExternalUrl(t+y(e)),n)}replaceState(t,e=\"\",n=null){this._platformStrategy.replaceState(n,\"\",t,e),this._notifyUrlChangeListeners(this.prepareExternalUrl(t+y(e)),n)}forward(){this._platformStrategy.forward()}back(){this._platformStrategy.back()}onUrlChange(t){this._urlChangeListeners.push(t),this._urlChangeSubscription||(this._urlChangeSubscription=this.subscribe(t=>{this._notifyUrlChangeListeners(t.url,t.state)}))}_notifyUrlChangeListeners(t=\"\",e){this._urlChangeListeners.forEach(n=>n(t,e))}subscribe(t,e,n){return this._subject.subscribe({next:t,error:e,complete:n})}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(v),r.hc(c))},t.normalizeQueryParams=y,t.joinWithSlash=m,t.stripTrailingSlash=g,t.\\u0275prov=Object(r.Tb)({factory:M,token:t,providedIn:\"root\"}),t})();function M(){return new k(Object(r.hc)(v),Object(r.hc)(c))}function T(t){return t.replace(/\\/index.html$/,\"\")}var S=function(t){return t[t.Decimal=0]=\"Decimal\",t[t.Percent=1]=\"Percent\",t[t.Currency=2]=\"Currency\",t[t.Scientific=3]=\"Scientific\",t}({}),A=function(t){return t[t.Zero=0]=\"Zero\",t[t.One=1]=\"One\",t[t.Two=2]=\"Two\",t[t.Few=3]=\"Few\",t[t.Many=4]=\"Many\",t[t.Other=5]=\"Other\",t}({}),L=function(t){return t[t.Format=0]=\"Format\",t[t.Standalone=1]=\"Standalone\",t}({}),C=function(t){return t[t.Narrow=0]=\"Narrow\",t[t.Abbreviated=1]=\"Abbreviated\",t[t.Wide=2]=\"Wide\",t[t.Short=3]=\"Short\",t}({}),E=function(t){return t[t.Short=0]=\"Short\",t[t.Medium=1]=\"Medium\",t[t.Long=2]=\"Long\",t[t.Full=3]=\"Full\",t}({}),O=function(t){return t[t.Decimal=0]=\"Decimal\",t[t.Group=1]=\"Group\",t[t.List=2]=\"List\",t[t.PercentSign=3]=\"PercentSign\",t[t.PlusSign=4]=\"PlusSign\",t[t.MinusSign=5]=\"MinusSign\",t[t.Exponential=6]=\"Exponential\",t[t.SuperscriptingExponent=7]=\"SuperscriptingExponent\",t[t.PerMille=8]=\"PerMille\",t[t[1/0]=9]=\"Infinity\",t[t.NaN=10]=\"NaN\",t[t.TimeSeparator=11]=\"TimeSeparator\",t[t.CurrencyDecimal=12]=\"CurrencyDecimal\",t[t.CurrencyGroup=13]=\"CurrencyGroup\",t}({});function D(t,e){return F(Object(r.ub)(t)[r.lb.DateFormat],e)}function I(t,e){return F(Object(r.ub)(t)[r.lb.TimeFormat],e)}function P(t,e){return F(Object(r.ub)(t)[r.lb.DateTimeFormat],e)}function R(t,e){const n=Object(r.ub)(t),i=n[r.lb.NumberSymbols][e];if(void 0===i){if(e===O.CurrencyDecimal)return n[r.lb.NumberSymbols][O.Decimal];if(e===O.CurrencyGroup)return n[r.lb.NumberSymbols][O.Group]}return i}const z=r.xb;function j(t){if(!t[r.lb.ExtraData])throw new Error(`Missing extra locale data for the locale \"${t[r.lb.LocaleId]}\". Use \"registerLocaleData\" to load new data. See the \"I18n guide\" on angular.io to know more.`)}function F(t,e){for(let n=e;n>-1;n--)if(void 0!==t[n])return t[n];throw new Error(\"Locale data API: locale data undefined\")}function N(t){const[e,n]=t.split(\":\");return{hours:+e,minutes:+n}}const B=/^(\\d{4})-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?)?$/,Y={},H=/((?:[^GyYMLwWdEabBhHmsSzZO']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\\s\\S]*)/;var V=function(t){return t[t.Short=0]=\"Short\",t[t.ShortGMT=1]=\"ShortGMT\",t[t.Long=2]=\"Long\",t[t.Extended=3]=\"Extended\",t}({}),U=function(t){return t[t.FullYear=0]=\"FullYear\",t[t.Month=1]=\"Month\",t[t.Date=2]=\"Date\",t[t.Hours=3]=\"Hours\",t[t.Minutes=4]=\"Minutes\",t[t.Seconds=5]=\"Seconds\",t[t.FractionalSeconds=6]=\"FractionalSeconds\",t[t.Day=7]=\"Day\",t}({}),W=function(t){return t[t.DayPeriods=0]=\"DayPeriods\",t[t.Days=1]=\"Days\",t[t.Months=2]=\"Months\",t[t.Eras=3]=\"Eras\",t}({});function q(t,e){return e&&(t=t.replace(/\\{([^}]+)}/g,(function(t,n){return null!=e&&n in e?e[n]:t}))),t}function G(t,e,n=\"-\",r,i){let a=\"\";(t<0||i&&t<=0)&&(i?t=1-t:(t=-t,a=n));let o=String(t);for(;o.length<e;)o=\"0\"+o;return r&&(o=o.substr(o.length-e)),a+o}function X(t,e,n=0,r=!1,i=!1){return function(a,o){let s=function(t,e){switch(t){case U.FullYear:return e.getFullYear();case U.Month:return e.getMonth();case U.Date:return e.getDate();case U.Hours:return e.getHours();case U.Minutes:return e.getMinutes();case U.Seconds:return e.getSeconds();case U.FractionalSeconds:return e.getMilliseconds();case U.Day:return e.getDay();default:throw new Error(`Unknown DateType value \"${t}\".`)}}(t,a);if((n>0||s>-n)&&(s+=n),t===U.Hours)0===s&&-12===n&&(s=12);else if(t===U.FractionalSeconds)return l=e,G(s,3).substr(0,l);var l;const c=R(o,O.MinusSign);return G(s,e,c,r,i)}}function Z(t,e,n=L.Format,i=!1){return function(a,o){return function(t,e,n,i,a,o){switch(n){case W.Months:return function(t,e,n){const i=Object(r.ub)(t),a=F([i[r.lb.MonthsFormat],i[r.lb.MonthsStandalone]],e);return F(a,n)}(e,a,i)[t.getMonth()];case W.Days:return function(t,e,n){const i=Object(r.ub)(t),a=F([i[r.lb.DaysFormat],i[r.lb.DaysStandalone]],e);return F(a,n)}(e,a,i)[t.getDay()];case W.DayPeriods:const s=t.getHours(),l=t.getMinutes();if(o){const t=function(t){const e=Object(r.ub)(t);return j(e),(e[r.lb.ExtraData][2]||[]).map(t=>\"string\"==typeof t?N(t):[N(t[0]),N(t[1])])}(e),n=function(t,e,n){const i=Object(r.ub)(t);j(i);const a=F([i[r.lb.ExtraData][0],i[r.lb.ExtraData][1]],e)||[];return F(a,n)||[]}(e,a,i),o=t.findIndex(t=>{if(Array.isArray(t)){const[e,n]=t,r=s>=e.hours&&l>=e.minutes,i=s<n.hours||s===n.hours&&l<n.minutes;if(e.hours<n.hours){if(r&&i)return!0}else if(r||i)return!0}else if(t.hours===s&&t.minutes===l)return!0;return!1});if(-1!==o)return n[o]}return function(t,e,n){const i=Object(r.ub)(t),a=F([i[r.lb.DayPeriodsFormat],i[r.lb.DayPeriodsStandalone]],e);return F(a,n)}(e,a,i)[s<12?0:1];case W.Eras:return function(t,e){return F(Object(r.ub)(t)[r.lb.Eras],e)}(e,i)[t.getFullYear()<=0?0:1];default:throw new Error(\"unexpected translation type \"+n)}}(a,o,t,e,n,i)}}function J(t){return function(e,n,r){const i=-1*r,a=R(n,O.MinusSign),o=i>0?Math.floor(i/60):Math.ceil(i/60);switch(t){case V.Short:return(i>=0?\"+\":\"\")+G(o,2,a)+G(Math.abs(i%60),2,a);case V.ShortGMT:return\"GMT\"+(i>=0?\"+\":\"\")+G(o,1,a);case V.Long:return\"GMT\"+(i>=0?\"+\":\"\")+G(o,2,a)+\":\"+G(Math.abs(i%60),2,a);case V.Extended:return 0===r?\"Z\":(i>=0?\"+\":\"\")+G(o,2,a)+\":\"+G(Math.abs(i%60),2,a);default:throw new Error(`Unknown zone width \"${t}\"`)}}}function K(t){return new Date(t.getFullYear(),t.getMonth(),t.getDate()+(4-t.getDay()))}function $(t,e=!1){return function(n,r){let i;if(e){const t=new Date(n.getFullYear(),n.getMonth(),1).getDay()-1,e=n.getDate();i=1+Math.floor((e+t)/7)}else{const t=K(n),e=function(t){const e=new Date(t,0,1).getDay();return new Date(t,0,1+(e<=4?4:11)-e)}(t.getFullYear()),r=t.getTime()-e.getTime();i=1+Math.round(r/6048e5)}return G(i,t,R(r,O.MinusSign))}}function Q(t,e=!1){return function(n,r){return G(K(n).getFullYear(),t,R(r,O.MinusSign),e)}}const tt={};function et(t,e){t=t.replace(/:/g,\"\");const n=Date.parse(\"Jan 01, 1970 00:00:00 \"+t)/6e4;return isNaN(n)?e:n}function nt(t){return t instanceof Date&&!isNaN(t.valueOf())}const rt=/^(\\d+)?\\.((\\d+)(-(\\d+))?)?$/,it=\".\",at=\"0\";function ot(t){const e=parseInt(t);if(isNaN(e))throw new Error(\"Invalid integer literal when parsing \"+t);return e}class st{}let lt=(()=>{class t extends st{constructor(t){super(),this.locale=t}getPluralCategory(t,e){switch(z(e||this.locale)(t)){case A.Zero:return\"zero\";case A.One:return\"one\";case A.Two:return\"two\";case A.Few:return\"few\";case A.Many:return\"many\";default:return\"other\"}}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(r.B))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})();function ct(t,e){e=encodeURIComponent(e);for(const n of t.split(\";\")){const t=n.indexOf(\"=\"),[r,i]=-1==t?[n,\"\"]:[n.slice(0,t),n.slice(t+1)];if(r.trim()===e)return decodeURIComponent(i)}return null}let ut=(()=>{class t{constructor(t,e,n,r){this._iterableDiffers=t,this._keyValueDiffers=e,this._ngEl=n,this._renderer=r,this._iterableDiffer=null,this._keyValueDiffer=null,this._initialClasses=[],this._rawClass=null}set klass(t){this._removeClasses(this._initialClasses),this._initialClasses=\"string\"==typeof t?t.split(/\\s+/):[],this._applyClasses(this._initialClasses),this._applyClasses(this._rawClass)}set ngClass(t){this._removeClasses(this._rawClass),this._applyClasses(this._initialClasses),this._iterableDiffer=null,this._keyValueDiffer=null,this._rawClass=\"string\"==typeof t?t.split(/\\s+/):t,this._rawClass&&(Object(r.Ab)(this._rawClass)?this._iterableDiffer=this._iterableDiffers.find(this._rawClass).create():this._keyValueDiffer=this._keyValueDiffers.find(this._rawClass).create())}ngDoCheck(){if(this._iterableDiffer){const t=this._iterableDiffer.diff(this._rawClass);t&&this._applyIterableChanges(t)}else if(this._keyValueDiffer){const t=this._keyValueDiffer.diff(this._rawClass);t&&this._applyKeyValueChanges(t)}}_applyKeyValueChanges(t){t.forEachAddedItem(t=>this._toggleClass(t.key,t.currentValue)),t.forEachChangedItem(t=>this._toggleClass(t.key,t.currentValue)),t.forEachRemovedItem(t=>{t.previousValue&&this._toggleClass(t.key,!1)})}_applyIterableChanges(t){t.forEachAddedItem(t=>{if(\"string\"!=typeof t.item)throw new Error(\"NgClass can only toggle CSS classes expressed as strings, got \"+Object(r.Gb)(t.item));this._toggleClass(t.item,!0)}),t.forEachRemovedItem(t=>this._toggleClass(t.item,!1))}_applyClasses(t){t&&(Array.isArray(t)||t instanceof Set?t.forEach(t=>this._toggleClass(t,!0)):Object.keys(t).forEach(e=>this._toggleClass(e,!!t[e])))}_removeClasses(t){t&&(Array.isArray(t)||t instanceof Set?t.forEach(t=>this._toggleClass(t,!1)):Object.keys(t).forEach(t=>this._toggleClass(t,!1)))}_toggleClass(t,e){(t=t.trim())&&t.split(/\\s+/g).forEach(t=>{e?this._renderer.addClass(this._ngEl.nativeElement,t):this._renderer.removeClass(this._ngEl.nativeElement,t)})}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.z),r.Xb(r.A),r.Xb(r.p),r.Xb(r.O))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"ngClass\",\"\"]],inputs:{klass:[\"class\",\"klass\"],ngClass:\"ngClass\"}}),t})();class ht{constructor(t,e,n,r){this.$implicit=t,this.ngForOf=e,this.index=n,this.count=r}get first(){return 0===this.index}get last(){return this.index===this.count-1}get even(){return this.index%2==0}get odd(){return!this.even}}let dt=(()=>{class t{constructor(t,e,n){this._viewContainer=t,this._template=e,this._differs=n,this._ngForOf=null,this._ngForOfDirty=!0,this._differ=null}set ngForOf(t){this._ngForOf=t,this._ngForOfDirty=!0}set ngForTrackBy(t){this._trackByFn=t}get ngForTrackBy(){return this._trackByFn}set ngForTemplate(t){t&&(this._template=t)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;const n=this._ngForOf;if(!this._differ&&n)try{this._differ=this._differs.find(n).create(this.ngForTrackBy)}catch(e){throw new Error(`Cannot find a differ supporting object '${n}' of type '${t=n,t.name||typeof t}'. NgFor only supports binding to Iterables such as Arrays.`)}}var t;if(this._differ){const t=this._differ.diff(this._ngForOf);t&&this._applyChanges(t)}}_applyChanges(t){const e=[];t.forEachOperation((t,n,r)=>{if(null==t.previousIndex){const n=this._viewContainer.createEmbeddedView(this._template,new ht(null,this._ngForOf,-1,-1),null===r?void 0:r),i=new ft(t,n);e.push(i)}else if(null==r)this._viewContainer.remove(null===n?void 0:n);else if(null!==n){const i=this._viewContainer.get(n);this._viewContainer.move(i,r);const a=new ft(t,i);e.push(a)}});for(let n=0;n<e.length;n++)this._perViewChange(e[n].view,e[n].record);for(let n=0,r=this._viewContainer.length;n<r;n++){const t=this._viewContainer.get(n);t.context.index=n,t.context.count=r,t.context.ngForOf=this._ngForOf}t.forEachIdentityChange(t=>{this._viewContainer.get(t.currentIndex).context.$implicit=t.item})}_perViewChange(t,e){t.context.$implicit=e.item}static ngTemplateContextGuard(t,e){return!0}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.Z),r.Xb(r.V),r.Xb(r.z))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"ngFor\",\"\",\"ngForOf\",\"\"]],inputs:{ngForOf:\"ngForOf\",ngForTrackBy:\"ngForTrackBy\",ngForTemplate:\"ngForTemplate\"}}),t})();class ft{constructor(t,e){this.record=t,this.view=e}}let pt=(()=>{class t{constructor(t,e){this._viewContainer=t,this._context=new mt,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=e}set ngIf(t){this._context.$implicit=this._context.ngIf=t,this._updateView()}set ngIfThen(t){gt(\"ngIfThen\",t),this._thenTemplateRef=t,this._thenViewRef=null,this._updateView()}set ngIfElse(t){gt(\"ngIfElse\",t),this._elseTemplateRef=t,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(t,e){return!0}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.Z),r.Xb(r.V))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"ngIf\",\"\"]],inputs:{ngIf:\"ngIf\",ngIfThen:\"ngIfThen\",ngIfElse:\"ngIfElse\"}}),t})();class mt{constructor(){this.$implicit=null,this.ngIf=null}}function gt(t,e){if(e&&!e.createEmbeddedView)throw new Error(`${t} must be a TemplateRef, but received '${Object(r.Gb)(e)}'.`)}class yt{constructor(t,e){this._viewContainerRef=t,this._templateRef=e,this._created=!1}create(){this._created=!0,this._viewContainerRef.createEmbeddedView(this._templateRef)}destroy(){this._created=!1,this._viewContainerRef.clear()}enforceState(t){t&&!this._created?this.create():!t&&this._created&&this.destroy()}}let vt=(()=>{class t{constructor(){this._defaultUsed=!1,this._caseCount=0,this._lastCaseCheckIndex=0,this._lastCasesMatched=!1}set ngSwitch(t){this._ngSwitch=t,0===this._caseCount&&this._updateDefaultCases(!0)}_addCase(){return this._caseCount++}_addDefault(t){this._defaultViews||(this._defaultViews=[]),this._defaultViews.push(t)}_matchCase(t){const e=t==this._ngSwitch;return this._lastCasesMatched=this._lastCasesMatched||e,this._lastCaseCheckIndex++,this._lastCaseCheckIndex===this._caseCount&&(this._updateDefaultCases(!this._lastCasesMatched),this._lastCaseCheckIndex=0,this._lastCasesMatched=!1),e}_updateDefaultCases(t){if(this._defaultViews&&t!==this._defaultUsed){this._defaultUsed=t;for(let e=0;e<this._defaultViews.length;e++)this._defaultViews[e].enforceState(t)}}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"ngSwitch\",\"\"]],inputs:{ngSwitch:\"ngSwitch\"}}),t})(),_t=(()=>{class t{constructor(t,e,n){this.ngSwitch=n,n._addCase(),this._view=new yt(t,e)}ngDoCheck(){this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase))}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.Z),r.Xb(r.V),r.Xb(vt,1))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"ngSwitchCase\",\"\"]],inputs:{ngSwitchCase:\"ngSwitchCase\"}}),t})(),bt=(()=>{class t{constructor(t,e,n){n._addDefault(new yt(t,e))}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.Z),r.Xb(r.V),r.Xb(vt,1))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"ngSwitchDefault\",\"\"]]}),t})(),xt=(()=>{class t{constructor(t,e,n){this._ngEl=t,this._differs=e,this._renderer=n,this._ngStyle=null,this._differ=null}set ngStyle(t){this._ngStyle=t,!this._differ&&t&&(this._differ=this._differs.find(t).create())}ngDoCheck(){if(this._differ){const t=this._differ.diff(this._ngStyle);t&&this._applyChanges(t)}}_setStyle(t,e){const[n,r]=t.split(\".\");null!=(e=null!=e&&r?`${e}${r}`:e)?this._renderer.setStyle(this._ngEl.nativeElement,n,e):this._renderer.removeStyle(this._ngEl.nativeElement,n)}_applyChanges(t){t.forEachRemovedItem(t=>this._setStyle(t.key,null)),t.forEachAddedItem(t=>this._setStyle(t.key,t.currentValue)),t.forEachChangedItem(t=>this._setStyle(t.key,t.currentValue))}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.p),r.Xb(r.A),r.Xb(r.O))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"ngStyle\",\"\"]],inputs:{ngStyle:\"ngStyle\"}}),t})(),wt=(()=>{class t{constructor(t){this._viewContainerRef=t,this._viewRef=null,this.ngTemplateOutletContext=null,this.ngTemplateOutlet=null}ngOnChanges(t){if(this._shouldRecreateView(t)){const t=this._viewContainerRef;this._viewRef&&t.remove(t.indexOf(this._viewRef)),this._viewRef=this.ngTemplateOutlet?t.createEmbeddedView(this.ngTemplateOutlet,this.ngTemplateOutletContext):null}else this._viewRef&&this.ngTemplateOutletContext&&this._updateExistingContext(this.ngTemplateOutletContext)}_shouldRecreateView(t){const e=t.ngTemplateOutletContext;return!!t.ngTemplateOutlet||e&&this._hasContextShapeChanged(e)}_hasContextShapeChanged(t){const e=Object.keys(t.previousValue||{}),n=Object.keys(t.currentValue||{});if(e.length===n.length){for(let t of n)if(-1===e.indexOf(t))return!0;return!1}return!0}_updateExistingContext(t){for(let e of Object.keys(t))this._viewRef.context[e]=this.ngTemplateOutletContext[e]}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.Z))},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"ngTemplateOutlet\",\"\"]],inputs:{ngTemplateOutletContext:\"ngTemplateOutletContext\",ngTemplateOutlet:\"ngTemplateOutlet\"},features:[r.Jb]}),t})();function kt(t,e){return Error(`InvalidPipeArgument: '${e}' for pipe '${Object(r.Gb)(t)}'`)}class Mt{createSubscription(t,e){return t.subscribe({next:e,error:t=>{throw t}})}dispose(t){t.unsubscribe()}onDestroy(t){t.unsubscribe()}}class Tt{createSubscription(t,e){return t.then(e,t=>{throw t})}dispose(t){}onDestroy(t){}}const St=new Tt,At=new Mt;let Lt=(()=>{class t{constructor(t){this._ref=t,this._latestValue=null,this._subscription=null,this._obj=null,this._strategy=null}ngOnDestroy(){this._subscription&&this._dispose()}transform(t){return this._obj?t!==this._obj?(this._dispose(),this.transform(t)):this._latestValue:(t&&this._subscribe(t),this._latestValue)}_subscribe(t){this._obj=t,this._strategy=this._selectStrategy(t),this._subscription=this._strategy.createSubscription(t,e=>this._updateLatestValue(t,e))}_selectStrategy(e){if(Object(r.Cb)(e))return St;if(Object(r.Bb)(e))return At;throw kt(t,e)}_dispose(){this._strategy.dispose(this._subscription),this._latestValue=null,this._subscription=null,this._obj=null}_updateLatestValue(t,e){t===this._obj&&(this._latestValue=e,this._ref.markForCheck())}}return t.\\u0275fac=function(e){return new(e||t)(r.jc())},t.\\u0275pipe=r.Wb({name:\"async\",type:t,pure:!1}),t})(),Ct=(()=>{class t{transform(e){if(null==e)return null;if(\"string\"!=typeof e)throw kt(t,e);return e.toLowerCase()}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275pipe=r.Wb({name:\"lowercase\",type:t,pure:!0}),t})(),Et=(()=>{class t{transform(e){if(null==e)return null;if(\"string\"!=typeof e)throw kt(t,e);return e.toUpperCase()}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275pipe=r.Wb({name:\"uppercase\",type:t,pure:!0}),t})(),Ot=(()=>{class t{constructor(t){this.locale=t}transform(e,n=\"mediumDate\",i,a){if(null==e||\"\"===e||e!=e)return null;try{return function(t,e,n,i){let a=function(t){if(nt(t))return t;if(\"number\"==typeof t&&!isNaN(t))return new Date(t);if(\"string\"==typeof t){t=t.trim();const e=parseFloat(t);if(!isNaN(t-e))return new Date(e);if(/^(\\d{4}-\\d{1,2}-\\d{1,2})$/.test(t)){const[e,n,r]=t.split(\"-\").map(t=>+t);return new Date(e,n-1,r)}let n;if(n=t.match(B))return function(t){const e=new Date(0);let n=0,r=0;const i=t[8]?e.setUTCFullYear:e.setFullYear,a=t[8]?e.setUTCHours:e.setHours;t[9]&&(n=Number(t[9]+t[10]),r=Number(t[9]+t[11])),i.call(e,Number(t[1]),Number(t[2])-1,Number(t[3]));const o=Number(t[4]||0)-n,s=Number(t[5]||0)-r,l=Number(t[6]||0),c=Math.floor(1e3*parseFloat(\"0.\"+(t[7]||0)));return a.call(e,o,s,l,c),e}(n)}const e=new Date(t);if(!nt(e))throw new Error(`Unable to convert \"${t}\" into a date`);return e}(t);e=function t(e,n){const i=function(t){return Object(r.ub)(t)[r.lb.LocaleId]}(e);if(Y[i]=Y[i]||{},Y[i][n])return Y[i][n];let a=\"\";switch(n){case\"shortDate\":a=D(e,E.Short);break;case\"mediumDate\":a=D(e,E.Medium);break;case\"longDate\":a=D(e,E.Long);break;case\"fullDate\":a=D(e,E.Full);break;case\"shortTime\":a=I(e,E.Short);break;case\"mediumTime\":a=I(e,E.Medium);break;case\"longTime\":a=I(e,E.Long);break;case\"fullTime\":a=I(e,E.Full);break;case\"short\":const n=t(e,\"shortTime\"),r=t(e,\"shortDate\");a=q(P(e,E.Short),[n,r]);break;case\"medium\":const i=t(e,\"mediumTime\"),o=t(e,\"mediumDate\");a=q(P(e,E.Medium),[i,o]);break;case\"long\":const s=t(e,\"longTime\"),l=t(e,\"longDate\");a=q(P(e,E.Long),[s,l]);break;case\"full\":const c=t(e,\"fullTime\"),u=t(e,\"fullDate\");a=q(P(e,E.Full),[c,u])}return a&&(Y[i][n]=a),a}(n,e)||e;let o,s=[];for(;e;){if(o=H.exec(e),!o){s.push(e);break}{s=s.concat(o.slice(1));const t=s.pop();if(!t)break;e=t}}let l=a.getTimezoneOffset();i&&(l=et(i,l),a=function(t,e,n){const r=t.getTimezoneOffset();return function(t,e){return(t=new Date(t.getTime())).setMinutes(t.getMinutes()+e),t}(t,-1*(et(e,r)-r))}(a,i));let c=\"\";return s.forEach(t=>{const e=function(t){if(tt[t])return tt[t];let e;switch(t){case\"G\":case\"GG\":case\"GGG\":e=Z(W.Eras,C.Abbreviated);break;case\"GGGG\":e=Z(W.Eras,C.Wide);break;case\"GGGGG\":e=Z(W.Eras,C.Narrow);break;case\"y\":e=X(U.FullYear,1,0,!1,!0);break;case\"yy\":e=X(U.FullYear,2,0,!0,!0);break;case\"yyy\":e=X(U.FullYear,3,0,!1,!0);break;case\"yyyy\":e=X(U.FullYear,4,0,!1,!0);break;case\"Y\":e=Q(1);break;case\"YY\":e=Q(2,!0);break;case\"YYY\":e=Q(3);break;case\"YYYY\":e=Q(4);break;case\"M\":case\"L\":e=X(U.Month,1,1);break;case\"MM\":case\"LL\":e=X(U.Month,2,1);break;case\"MMM\":e=Z(W.Months,C.Abbreviated);break;case\"MMMM\":e=Z(W.Months,C.Wide);break;case\"MMMMM\":e=Z(W.Months,C.Narrow);break;case\"LLL\":e=Z(W.Months,C.Abbreviated,L.Standalone);break;case\"LLLL\":e=Z(W.Months,C.Wide,L.Standalone);break;case\"LLLLL\":e=Z(W.Months,C.Narrow,L.Standalone);break;case\"w\":e=$(1);break;case\"ww\":e=$(2);break;case\"W\":e=$(1,!0);break;case\"d\":e=X(U.Date,1);break;case\"dd\":e=X(U.Date,2);break;case\"E\":case\"EE\":case\"EEE\":e=Z(W.Days,C.Abbreviated);break;case\"EEEE\":e=Z(W.Days,C.Wide);break;case\"EEEEE\":e=Z(W.Days,C.Narrow);break;case\"EEEEEE\":e=Z(W.Days,C.Short);break;case\"a\":case\"aa\":case\"aaa\":e=Z(W.DayPeriods,C.Abbreviated);break;case\"aaaa\":e=Z(W.DayPeriods,C.Wide);break;case\"aaaaa\":e=Z(W.DayPeriods,C.Narrow);break;case\"b\":case\"bb\":case\"bbb\":e=Z(W.DayPeriods,C.Abbreviated,L.Standalone,!0);break;case\"bbbb\":e=Z(W.DayPeriods,C.Wide,L.Standalone,!0);break;case\"bbbbb\":e=Z(W.DayPeriods,C.Narrow,L.Standalone,!0);break;case\"B\":case\"BB\":case\"BBB\":e=Z(W.DayPeriods,C.Abbreviated,L.Format,!0);break;case\"BBBB\":e=Z(W.DayPeriods,C.Wide,L.Format,!0);break;case\"BBBBB\":e=Z(W.DayPeriods,C.Narrow,L.Format,!0);break;case\"h\":e=X(U.Hours,1,-12);break;case\"hh\":e=X(U.Hours,2,-12);break;case\"H\":e=X(U.Hours,1);break;case\"HH\":e=X(U.Hours,2);break;case\"m\":e=X(U.Minutes,1);break;case\"mm\":e=X(U.Minutes,2);break;case\"s\":e=X(U.Seconds,1);break;case\"ss\":e=X(U.Seconds,2);break;case\"S\":e=X(U.FractionalSeconds,1);break;case\"SS\":e=X(U.FractionalSeconds,2);break;case\"SSS\":e=X(U.FractionalSeconds,3);break;case\"Z\":case\"ZZ\":case\"ZZZ\":e=J(V.Short);break;case\"ZZZZZ\":e=J(V.Extended);break;case\"O\":case\"OO\":case\"OOO\":case\"z\":case\"zz\":case\"zzz\":e=J(V.ShortGMT);break;case\"OOOO\":case\"ZZZZ\":case\"zzzz\":e=J(V.Long);break;default:return null}return tt[t]=e,e}(t);c+=e?e(a,n,l):\"''\"===t?\"'\":t.replace(/(^'|'$)/g,\"\").replace(/''/g,\"'\")}),c}(e,n,a||this.locale,i)}catch(o){throw kt(t,o.message)}}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.B))},t.\\u0275pipe=r.Wb({name:\"date\",type:t,pure:!0}),t})(),Dt=(()=>{class t{transform(t){return JSON.stringify(t,null,2)}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275pipe=r.Wb({name:\"json\",type:t,pure:!1}),t})(),It=(()=>{class t{constructor(t){this._locale=t}transform(e,n,i){if(!function(t){return!(null==t||\"\"===t||t!=t)}(e))return null;i=i||this._locale;try{return function(t,e,n){return function(t,e,n,r,i,a,o=!1){let s=\"\",l=!1;if(isFinite(t)){let c=function(t){let e,n,r,i,a,o=Math.abs(t)+\"\",s=0;for((n=o.indexOf(it))>-1&&(o=o.replace(it,\"\")),(r=o.search(/e/i))>0?(n<0&&(n=r),n+=+o.slice(r+1),o=o.substring(0,r)):n<0&&(n=o.length),r=0;o.charAt(r)===at;r++);if(r===(a=o.length))e=[0],n=1;else{for(a--;o.charAt(a)===at;)a--;for(n-=r,e=[],i=0;r<=a;r++,i++)e[i]=Number(o.charAt(r))}return n>22&&(e=e.splice(0,21),s=n-1,n=1),{digits:e,exponent:s,integerLen:n}}(t);o&&(c=function(t){if(0===t.digits[0])return t;const e=t.digits.length-t.integerLen;return t.exponent?t.exponent+=2:(0===e?t.digits.push(0,0):1===e&&t.digits.push(0),t.integerLen+=2),t}(c));let u=e.minInt,h=e.minFrac,d=e.maxFrac;if(a){const t=a.match(rt);if(null===t)throw new Error(a+\" is not a valid digit info\");const e=t[1],n=t[3],r=t[5];null!=e&&(u=ot(e)),null!=n&&(h=ot(n)),null!=r?d=ot(r):null!=n&&h>d&&(d=h)}!function(t,e,n){if(e>n)throw new Error(`The minimum number of digits after fraction (${e}) is higher than the maximum (${n}).`);let r=t.digits,i=r.length-t.integerLen;const a=Math.min(Math.max(e,i),n);let o=a+t.integerLen,s=r[o];if(o>0){r.splice(Math.max(t.integerLen,o));for(let t=o;t<r.length;t++)r[t]=0}else{i=Math.max(0,i),t.integerLen=1,r.length=Math.max(1,o=a+1),r[0]=0;for(let t=1;t<o;t++)r[t]=0}if(s>=5)if(o-1<0){for(let e=0;e>o;e--)r.unshift(0),t.integerLen++;r.unshift(1),t.integerLen++}else r[o-1]++;for(;i<Math.max(0,a);i++)r.push(0);let l=0!==a;const c=e+t.integerLen,u=r.reduceRight((function(t,e,n,r){return r[n]=(e+=t)<10?e:e-10,l&&(0===r[n]&&n>=c?r.pop():l=!1),e>=10?1:0}),0);u&&(r.unshift(u),t.integerLen++)}(c,h,d);let f=c.digits,p=c.integerLen;const m=c.exponent;let g=[];for(l=f.every(t=>!t);p<u;p++)f.unshift(0);for(;p<0;p++)f.unshift(0);p>0?g=f.splice(p,f.length):(g=f,f=[0]);const y=[];for(f.length>=e.lgSize&&y.unshift(f.splice(-e.lgSize,f.length).join(\"\"));f.length>e.gSize;)y.unshift(f.splice(-e.gSize,f.length).join(\"\"));f.length&&y.unshift(f.join(\"\")),s=y.join(R(n,r)),g.length&&(s+=R(n,i)+g.join(\"\")),m&&(s+=R(n,O.Exponential)+\"+\"+m)}else s=R(n,O.Infinity);return s=t<0&&!l?e.negPre+s+e.negSuf:e.posPre+s+e.posSuf,s}(t,function(t,e=\"-\"){const n={minInt:1,minFrac:0,maxFrac:0,posPre:\"\",posSuf:\"\",negPre:\"\",negSuf:\"\",gSize:0,lgSize:0},r=t.split(\";\"),i=r[0],a=r[1],o=-1!==i.indexOf(it)?i.split(it):[i.substring(0,i.lastIndexOf(at)+1),i.substring(i.lastIndexOf(at)+1)],s=o[0],l=o[1]||\"\";n.posPre=s.substr(0,s.indexOf(\"#\"));for(let u=0;u<l.length;u++){const t=l.charAt(u);t===at?n.minFrac=n.maxFrac=u+1:\"#\"===t?n.maxFrac=u+1:n.posSuf+=t}const c=s.split(\",\");if(n.gSize=c[1]?c[1].length:0,n.lgSize=c[2]||c[1]?(c[2]||c[1]).length:0,a){const t=i.length-n.posPre.length-n.posSuf.length,e=a.indexOf(\"#\");n.negPre=a.substr(0,e).replace(/'/g,\"\"),n.negSuf=a.substr(e+t).replace(/'/g,\"\")}else n.negPre=e+n.posPre,n.negSuf=n.posSuf;return n}(function(t,e){return Object(r.ub)(t)[r.lb.NumberFormats][e]}(e,S.Decimal),R(e,O.MinusSign)),e,O.Group,O.Decimal,n)}(function(t){if(\"string\"==typeof t&&!isNaN(Number(t)-parseFloat(t)))return Number(t);if(\"number\"!=typeof t)throw new Error(t+\" is not a number\");return t}(e),i,n)}catch(a){throw kt(t,a.message)}}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.B))},t.\\u0275pipe=r.Wb({name:\"number\",type:t,pure:!0}),t})(),Pt=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},providers:[{provide:st,useClass:lt}]}),t})();const Rt=\"browser\";function zt(t){return t===Rt}function jt(t){return\"server\"===t}let Ft=(()=>{class t{}return t.\\u0275prov=Object(r.Tb)({token:t,providedIn:\"root\",factory:()=>new Nt(Object(r.hc)(l),window)}),t})();class Nt{constructor(t,e){this.document=t,this.window=e,this.offset=()=>[0,0]}setOffset(t){this.offset=Array.isArray(t)?()=>t:t}getScrollPosition(){return this.supportsScrolling()?[this.window.pageXOffset,this.window.pageYOffset]:[0,0]}scrollToPosition(t){this.supportsScrolling()&&this.window.scrollTo(t[0],t[1])}scrollToAnchor(t){var e;if(!this.supportsScrolling())return;const n=null!==(e=this.document.getElementById(t))&&void 0!==e?e:this.document.getElementsByName(t)[0];void 0!==n&&(this.scrollToElement(n),this.attemptFocus(n))}setHistoryScrollRestoration(t){if(this.supportScrollRestoration()){const e=this.window.history;e&&e.scrollRestoration&&(e.scrollRestoration=t)}}scrollToElement(t){const e=t.getBoundingClientRect(),n=e.left+this.window.pageXOffset,r=e.top+this.window.pageYOffset,i=this.offset();this.window.scrollTo(n-i[0],r-i[1])}attemptFocus(t){return t.focus(),this.document.activeElement===t}supportScrollRestoration(){try{if(!this.supportsScrolling())return!1;const t=Bt(this.window.history)||Bt(Object.getPrototypeOf(this.window.history));return!(!t||!t.writable&&!t.set)}catch(t){return!1}}supportsScrolling(){try{return!!this.window&&!!this.window.scrollTo&&\"pageXOffset\"in this.window}catch(t){return!1}}}function Bt(t){return Object.getOwnPropertyDescriptor(t,\"scrollRestoration\")}},\"p/rL\":function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"bm\",{months:\"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_M\\u025bkalo_Zuw\\u025bnkalo_Zuluyekalo_Utikalo_S\\u025btanburukalo_\\u0254kut\\u0254burukalo_Nowanburukalo_Desanburukalo\".split(\"_\"),monthsShort:\"Zan_Few_Mar_Awi_M\\u025b_Zuw_Zul_Uti_S\\u025bt_\\u0254ku_Now_Des\".split(\"_\"),weekdays:\"Kari_Nt\\u025bn\\u025bn_Tarata_Araba_Alamisa_Juma_Sibiri\".split(\"_\"),weekdaysShort:\"Kar_Nt\\u025b_Tar_Ara_Ala_Jum_Sib\".split(\"_\"),weekdaysMin:\"Ka_Nt_Ta_Ar_Al_Ju_Si\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"MMMM [tile] D [san] YYYY\",LLL:\"MMMM [tile] D [san] YYYY [l\\u025br\\u025b] HH:mm\",LLLL:\"dddd MMMM [tile] D [san] YYYY [l\\u025br\\u025b] HH:mm\"},calendar:{sameDay:\"[Bi l\\u025br\\u025b] LT\",nextDay:\"[Sini l\\u025br\\u025b] LT\",nextWeek:\"dddd [don l\\u025br\\u025b] LT\",lastDay:\"[Kunu l\\u025br\\u025b] LT\",lastWeek:\"dddd [t\\u025bm\\u025bnen l\\u025br\\u025b] LT\",sameElse:\"L\"},relativeTime:{future:\"%s k\\u0254n\\u0254\",past:\"a b\\u025b %s b\\u0254\",s:\"sanga dama dama\",ss:\"sekondi %d\",m:\"miniti kelen\",mm:\"miniti %d\",h:\"l\\u025br\\u025b kelen\",hh:\"l\\u025br\\u025b %d\",d:\"tile kelen\",dd:\"tile %d\",M:\"kalo kelen\",MM:\"kalo %d\",y:\"san kelen\",yy:\"san %d\"},week:{dow:1,doy:4}})}(n(\"wd/R\"))},pD6V:function(t,e,n){\"use strict\";n.d(e,\"c\",(function(){return f})),n.d(e,\"d\",(function(){return g})),n.d(e,\"e\",(function(){return y})),n.d(e,\"g\",(function(){return v})),n.d(e,\"a\",(function(){return _})),n.d(e,\"b\",(function(){return M})),n.d(e,\"i\",(function(){return G})),n.d(e,\"h\",(function(){return X})),n.d(e,\"j\",(function(){return Z})),n.d(e,\"f\",(function(){return K}));var r=n(\"fXoL\"),i=n(\"ofXK\"),a=n(\"XNiG\"),o=n(\"2Vo4\"),s=n(\"HDdC\"),l=n(\"VRyK\"),c=(n(\"7Hc7\"),n(\"LRne\"),n(\"xgIS\"),n(\"pLZG\")),u=(n(\"lJxs\"),n(\"Kj3r\"),n(\"eIep\"),n(\"1G5W\"),n(\"IzEk\"),n(\"vkgz\"));const h={provide:r.b,useFactory:function(t,e){return()=>{if(Object(i.y)(e)){const e=Array.from(t.querySelectorAll(`[class*=${d}]`)),n=/\\bflex-layout-.+?\\b/g;e.forEach(t=>{t.classList.contains(d+\"ssr\")&&t.parentNode?t.parentNode.removeChild(t):t.className.replace(n,\"\")})}}},deps:[i.d,r.K],multi:!0},d=\"flex-layout-\";let f=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},providers:[h]}),t})();class p{constructor(t=!1,e=\"all\",n=\"\",r=\"\",i=0){this.matches=t,this.mediaQuery=e,this.mqAlias=n,this.suffix=r,this.priority=i,this.property=\"\"}clone(){return new p(this.matches,this.mediaQuery,this.mqAlias,this.suffix)}}let m=(()=>{class t{constructor(){this.stylesheet=new Map}addStyleToElement(t,e,n){const r=this.stylesheet.get(t);r?r.set(e,n):this.stylesheet.set(t,new Map([[e,n]]))}clearStyles(){this.stylesheet.clear()}getStyleForElement(t,e){const n=this.stylesheet.get(t);let r=\"\";if(n){const t=n.get(e);\"number\"!=typeof t&&\"string\"!=typeof t||(r=t+\"\")}return r}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=Object(r.Tb)({factory:function(){return new t},token:t,providedIn:\"root\"}),t})();const g={addFlexToParent:!0,addOrientationBps:!1,disableDefaultBps:!1,disableVendorPrefixes:!1,serverLoaded:!1,useColumnBasisZero:!0,printWithBreakpoints:[],mediaTriggerAutoRestore:!0,ssrObserveBreakpoints:[]},y=new r.w(\"Flex Layout token, config options for the library\",{providedIn:\"root\",factory:()=>g}),v=new r.w(\"FlexLayoutServerLoaded\",{providedIn:\"root\",factory:()=>!1}),_=new r.w(\"Flex Layout token, collect all breakpoints into one provider\",{providedIn:\"root\",factory:()=>null});function b(t,e){return t=t?t.clone():new p,e&&(t.mqAlias=e.alias,t.mediaQuery=e.mediaQuery,t.suffix=e.suffix,t.priority=e.priority),t}const x=\"inline\",w=[\"row\",\"column\",\"row-reverse\",\"column-reverse\"];function k(t){if(t)switch(t.toLowerCase()){case\"reverse\":case\"wrap-reverse\":case\"reverse-wrap\":t=\"wrap-reverse\";break;case\"no\":case\"none\":case\"nowrap\":t=\"nowrap\";break;default:t=\"wrap\"}return t}let M=(()=>{class t{constructor(t,e,n,r){this.elementRef=t,this.styleBuilder=e,this.styler=n,this.marshal=r,this.DIRECTIVE_KEY=\"\",this.inputs=[],this.mru={},this.destroySubject=new a.a,this.styleCache=new Map}get parentElement(){return this.elementRef.nativeElement.parentElement}get nativeElement(){return this.elementRef.nativeElement}get activatedValue(){return this.marshal.getValue(this.nativeElement,this.DIRECTIVE_KEY)}set activatedValue(t){this.marshal.setValue(this.nativeElement,this.DIRECTIVE_KEY,t,this.marshal.activatedAlias)}ngOnChanges(t){Object.keys(t).forEach(e=>{if(-1!==this.inputs.indexOf(e)){const n=e.split(\".\").slice(1).join(\".\");this.setValue(t[e].currentValue,n)}})}ngOnDestroy(){this.destroySubject.next(),this.destroySubject.complete(),this.marshal.releaseElement(this.nativeElement)}init(t=[]){this.marshal.init(this.elementRef.nativeElement,this.DIRECTIVE_KEY,this.updateWithValue.bind(this),this.clearStyles.bind(this),t)}addStyles(t,e){const n=this.styleBuilder,r=n.shouldCache;let i=this.styleCache.get(t);i&&r||(i=n.buildStyles(t,e),r&&this.styleCache.set(t,i)),this.mru=Object.assign({},i),this.applyStyleToElement(i),n.sideEffect(t,i,e)}clearStyles(){Object.keys(this.mru).forEach(t=>{this.mru[t]=\"\"}),this.applyStyleToElement(this.mru),this.mru={}}triggerUpdate(){this.marshal.triggerUpdate(this.nativeElement,this.DIRECTIVE_KEY)}getFlexFlowDirection(t,e=!1){if(t){const[n,r]=this.styler.getFlowDirection(t);if(!r&&e){const e=function(t){let[e,n,r]=function(t){t=t?t.toLowerCase():\"\";let[e,n,r]=t.split(\" \");return w.find(t=>t===e)||(e=w[0]),n===x&&(n=r!==x?r:\"\",r=x),[e,k(n),!!r]}(t);return function(t,e=null,n=!1){return{display:n?\"inline-flex\":\"flex\",\"box-sizing\":\"border-box\",\"flex-direction\":t,\"flex-wrap\":e||null}}(e,n,r)}(n);this.styler.applyStyleToElements(e,[t])}return n.trim()}return\"row\"}hasWrap(t){return this.styler.hasWrap(t)}applyStyleToElement(t,e,n=this.nativeElement){this.styler.applyStyleToElement(n,t,e)}setValue(t,e){this.marshal.setValue(this.nativeElement,this.DIRECTIVE_KEY,t,e)}updateWithValue(t){this.currentValue!==t&&(this.addStyles(t),this.currentValue=t)}}return t.\\u0275fac=function(t){r.kc()},t.\\u0275dir=r.Sb({type:t,features:[r.Jb]}),t})();const T=[{alias:\"xs\",mediaQuery:\"screen and (min-width: 0px) and (max-width: 599.98px)\",priority:1e3},{alias:\"sm\",mediaQuery:\"screen and (min-width: 600px) and (max-width: 959.98px)\",priority:900},{alias:\"md\",mediaQuery:\"screen and (min-width: 960px) and (max-width: 1279.98px)\",priority:800},{alias:\"lg\",mediaQuery:\"screen and (min-width: 1280px) and (max-width: 1919.98px)\",priority:700},{alias:\"xl\",mediaQuery:\"screen and (min-width: 1920px) and (max-width: 4999.98px)\",priority:600},{alias:\"lt-sm\",overlapping:!0,mediaQuery:\"screen and (max-width: 599.98px)\",priority:950},{alias:\"lt-md\",overlapping:!0,mediaQuery:\"screen and (max-width: 959.98px)\",priority:850},{alias:\"lt-lg\",overlapping:!0,mediaQuery:\"screen and (max-width: 1279.98px)\",priority:750},{alias:\"lt-xl\",overlapping:!0,priority:650,mediaQuery:\"screen and (max-width: 1919.98px)\"},{alias:\"gt-xs\",overlapping:!0,mediaQuery:\"screen and (min-width: 600px)\",priority:-950},{alias:\"gt-sm\",overlapping:!0,mediaQuery:\"screen and (min-width: 960px)\",priority:-850},{alias:\"gt-md\",overlapping:!0,mediaQuery:\"screen and (min-width: 1280px)\",priority:-750},{alias:\"gt-lg\",overlapping:!0,mediaQuery:\"screen and (min-width: 1920px)\",priority:-650}],S=\"(orientation: portrait) and (max-width: 599.98px)\",A=\"(orientation: landscape) and (max-width: 959.98px)\",L=\"(orientation: portrait) and (min-width: 600px) and (max-width: 839.98px)\",C=\"(orientation: landscape) and (min-width: 960px) and (max-width: 1279.98px)\",E=\"(orientation: portrait) and (min-width: 840px)\",O=\"(orientation: landscape) and (min-width: 1280px)\",D={HANDSET:`${S}, ${A}`,TABLET:`${L} , ${C}`,WEB:`${E}, ${O} `,HANDSET_PORTRAIT:\"\"+S,TABLET_PORTRAIT:L+\" \",WEB_PORTRAIT:\"\"+E,HANDSET_LANDSCAPE:\"\"+A,TABLET_LANDSCAPE:\"\"+C,WEB_LANDSCAPE:\"\"+O},I=[{alias:\"handset\",priority:2e3,mediaQuery:D.HANDSET},{alias:\"handset.landscape\",priority:2e3,mediaQuery:D.HANDSET_LANDSCAPE},{alias:\"handset.portrait\",priority:2e3,mediaQuery:D.HANDSET_PORTRAIT},{alias:\"tablet\",priority:2100,mediaQuery:D.TABLET},{alias:\"tablet.landscape\",priority:2100,mediaQuery:D.TABLET_LANDSCAPE},{alias:\"tablet.portrait\",priority:2100,mediaQuery:D.TABLET_PORTRAIT},{alias:\"web\",priority:2200,mediaQuery:D.WEB,overlapping:!0},{alias:\"web.landscape\",priority:2200,mediaQuery:D.WEB_LANDSCAPE,overlapping:!0},{alias:\"web.portrait\",priority:2200,mediaQuery:D.WEB_PORTRAIT,overlapping:!0}],P=/(\\.|-|_)/g;function R(t){let e=t.length>0?t.charAt(0):\"\",n=t.length>1?t.slice(1):\"\";return e.toUpperCase()+n}const z=new r.w(\"Token (@angular/flex-layout) Breakpoints\",{providedIn:\"root\",factory:()=>{const t=Object(r.fb)(_),e=Object(r.fb)(y),n=[].concat.apply([],(t||[]).map(t=>Array.isArray(t)?t:[t]));return function(t,e=[]){const n={};return t.forEach(t=>{n[t.alias]=t}),e.forEach(t=>{n[t.alias]?function(t,...e){if(null==t)throw TypeError(\"Cannot convert undefined or null to object\");for(let n of e)if(null!=n)for(let e in n)n.hasOwnProperty(e)&&(t[e]=n[e])}(n[t.alias],t):n[t.alias]=t}),(r=Object.keys(n).map(t=>n[t])).forEach(t=>{t.suffix||(t.suffix=function(t){return t.replace(P,\"|\").split(\"|\").map(R).join(\"\")}(t.alias),t.overlapping=!!t.overlapping)}),r;var r}((e.disableDefaultBps?[]:T).concat(e.addOrientationBps?I:[]),n)}});function j(t,e){return(e&&e.priority||0)-(t&&t.priority||0)}function F(t,e){return(t.priority||0)-(e.priority||0)}let N=(()=>{class t{constructor(t){this.findByMap=new Map,this.items=[...t].sort(F)}findByAlias(t){return t?this.findWithPredicate(t,e=>e.alias==t):null}findByQuery(t){return this.findWithPredicate(t,e=>e.mediaQuery==t)}get overlappings(){return this.items.filter(t=>1==t.overlapping)}get aliases(){return this.items.map(t=>t.alias)}get suffixes(){return this.items.map(t=>t.suffix?t.suffix:\"\")}findWithPredicate(t,e){let n=this.findByMap.get(t);return n||(n=this.items.find(e)||null,this.findByMap.set(t,n)),n||null}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(z))},t.\\u0275prov=Object(r.Tb)({factory:function(){return new t(Object(r.hc)(z))},token:t,providedIn:\"root\"}),t})(),B=(()=>{class t{constructor(t,e,n){this._zone=t,this._platformId=e,this._document=n,this.source=new o.a(new p(!0)),this.registry=new Map,this.pendingRemoveListenerFns=[],this._observable$=this.source.asObservable()}get activations(){const t=[];return this.registry.forEach((e,n)=>{e.matches&&t.push(n)}),t}isActive(t){const e=this.registry.get(t);return e?e.matches:this.registerQuery(t).some(t=>t.matches)}observe(t,e=!1){if(t&&t.length){const n=this._observable$.pipe(Object(c.a)(n=>!e||t.indexOf(n.mediaQuery)>-1)),r=new s.a(e=>{const n=this.registerQuery(t);if(n.length){const t=n.pop();n.forEach(t=>{e.next(t)}),this.source.next(t)}e.complete()});return Object(l.a)(r,n)}return this._observable$}registerQuery(t){const e=Array.isArray(t)?t:[t],n=[];return function(t,e){const n=t.filter(t=>!Y[t]);if(n.length>0){const t=n.join(\", \");try{const r=e.createElement(\"style\");r.setAttribute(\"type\",\"text/css\"),r.styleSheet||r.appendChild(e.createTextNode(`\\n/*\\n  @angular/flex-layout - workaround for possible browser quirk with mediaQuery listeners\\n  see http://bit.ly/2sd4HMP\\n*/\\n@media ${t} {.fx-query-test{ }}\\n`)),e.head.appendChild(r),n.forEach(t=>Y[t]=r)}catch(r){console.error(r)}}}(e,this._document),e.forEach(t=>{const e=e=>{this._zone.run(()=>this.source.next(new p(e.matches,t)))};let r=this.registry.get(t);r||(r=this.buildMQL(t),r.addListener(e),this.pendingRemoveListenerFns.push(()=>r.removeListener(e)),this.registry.set(t,r)),r.matches&&n.push(new p(!0,t))}),n}ngOnDestroy(){let t;for(;t=this.pendingRemoveListenerFns.pop();)t()}buildMQL(t){return function(t,e){return e&&window.matchMedia(\"all\").addListener?window.matchMedia(t):{matches:\"all\"===t||\"\"===t,media:t,addListener:()=>{},removeListener:()=>{},onchange:null,addEventListener(){},removeEventListener(){},dispatchEvent:()=>!1}}(t,Object(i.y)(this._platformId))}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(r.H),r.hc(r.K),r.hc(i.d))},t.\\u0275prov=Object(r.Tb)({factory:function(){return new t(Object(r.hc)(r.H),Object(r.hc)(r.K),Object(r.hc)(i.d))},token:t,providedIn:\"root\"}),t})();const Y={},H=\"print\",V={alias:H,mediaQuery:H,priority:1e3};let U=(()=>{class t{constructor(t,e,n){this.breakpoints=t,this.layoutConfig=e,this._document=n,this.registeredBeforeAfterPrintHooks=!1,this.isPrintingBeforeAfterEvent=!1,this.beforePrintEventListeners=[],this.afterPrintEventListeners=[],this.isPrinting=!1,this.queue=new W,this.deactivations=[]}withPrintQuery(t){return[...t,H]}isPrintEvent(t){return t.mediaQuery.startsWith(H)}get printAlias(){return this.layoutConfig.printWithBreakpoints||[]}get printBreakPoints(){return this.printAlias.map(t=>this.breakpoints.findByAlias(t)).filter(t=>null!==t)}getEventBreakpoints({mediaQuery:t}){const e=this.breakpoints.findByQuery(t);return(e?[...this.printBreakPoints,e]:this.printBreakPoints).sort(j)}updateEvent(t){let e=this.breakpoints.findByQuery(t.mediaQuery);return this.isPrintEvent(t)&&(e=this.getEventBreakpoints(t)[0],t.mediaQuery=e?e.mediaQuery:\"\"),b(t,e)}registerBeforeAfterPrintHooks(t){if(!this._document.defaultView||this.registeredBeforeAfterPrintHooks)return;this.registeredBeforeAfterPrintHooks=!0;const e=()=>{this.isPrinting||(this.isPrintingBeforeAfterEvent=!0,this.startPrinting(t,this.getEventBreakpoints(new p(!0,H))),t.updateStyles())},n=()=>{this.isPrintingBeforeAfterEvent=!1,this.isPrinting&&(this.stopPrinting(t),t.updateStyles())};this._document.defaultView.addEventListener(\"beforeprint\",e),this._document.defaultView.addEventListener(\"afterprint\",n),this.beforePrintEventListeners.push(e),this.afterPrintEventListeners.push(n)}interceptEvents(t){return this.registerBeforeAfterPrintHooks(t),e=>{this.isPrintEvent(e)?e.matches&&!this.isPrinting?(this.startPrinting(t,this.getEventBreakpoints(e)),t.updateStyles()):e.matches||!this.isPrinting||this.isPrintingBeforeAfterEvent||(this.stopPrinting(t),t.updateStyles()):this.collectActivations(e)}}blockPropagation(){return t=>!(this.isPrinting||this.isPrintEvent(t))}startPrinting(t,e){this.isPrinting=!0,t.activatedBreakpoints=this.queue.addPrintBreakpoints(e)}stopPrinting(t){t.activatedBreakpoints=this.deactivations,this.deactivations=[],this.queue.clear(),this.isPrinting=!1}collectActivations(t){if(!this.isPrinting||this.isPrintingBeforeAfterEvent)if(t.matches)this.isPrintingBeforeAfterEvent||(this.deactivations=[]);else{const e=this.breakpoints.findByQuery(t.mediaQuery);e&&(this.deactivations.push(e),this.deactivations.sort(j))}}ngOnDestroy(){this.beforePrintEventListeners.forEach(t=>this._document.defaultView.removeEventListener(\"beforeprint\",t)),this.afterPrintEventListeners.forEach(t=>this._document.defaultView.removeEventListener(\"afterprint\",t))}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(N),r.hc(y),r.hc(i.d))},t.\\u0275prov=Object(r.Tb)({factory:function(){return new t(Object(r.hc)(N),Object(r.hc)(y),Object(r.hc)(i.d))},token:t,providedIn:\"root\"}),t})();class W{constructor(){this.printBreakpoints=[]}addPrintBreakpoints(t){return t.push(V),t.sort(j),t.forEach(t=>this.addBreakpoint(t)),this.printBreakpoints}addBreakpoint(t){t&&void 0===this.printBreakpoints.find(e=>e.mediaQuery===t.mediaQuery)&&(this.printBreakpoints=function(t){return!!t&&t.mediaQuery.startsWith(H)}(t)?[t,...this.printBreakpoints]:[...this.printBreakpoints,t])}clear(){this.printBreakpoints=[]}}function q(t){for(let e in t){let n=t[e]||\"\";switch(e){case\"display\":t.display=\"flex\"===n?[\"-webkit-flex\",\"flex\"]:\"inline-flex\"===n?[\"-webkit-inline-flex\",\"inline-flex\"]:n;break;case\"align-items\":case\"align-self\":case\"align-content\":case\"flex\":case\"flex-basis\":case\"flex-flow\":case\"flex-grow\":case\"flex-shrink\":case\"flex-wrap\":case\"justify-content\":t[\"-webkit-\"+e]=n;break;case\"flex-direction\":n=n||\"row\",t[\"-webkit-flex-direction\"]=n,t[\"flex-direction\"]=n;break;case\"order\":t.order=t[\"-webkit-\"+e]=isNaN(+n)?\"0\":n}}return t}let G=(()=>{class t{constructor(t,e,n,r){this._serverStylesheet=t,this._serverModuleLoaded=e,this._platformId=n,this.layoutConfig=r}applyStyleToElement(t,e,n=null){let r={};\"string\"==typeof e&&(r[e]=n,e=r),r=this.layoutConfig.disableVendorPrefixes?e:q(e),this._applyMultiValueStyleToElement(r,t)}applyStyleToElements(t,e=[]){const n=this.layoutConfig.disableVendorPrefixes?t:q(t);e.forEach(t=>{this._applyMultiValueStyleToElement(n,t)})}getFlowDirection(t){const e=\"flex-direction\";let n=this.lookupStyle(t,e);return[n||\"row\",this.lookupInlineStyle(t,e)||Object(i.z)(this._platformId)&&this._serverModuleLoaded?n:\"\"]}hasWrap(t){return\"wrap\"===this.lookupStyle(t,\"flex-wrap\")}lookupAttributeValue(t,e){return t.getAttribute(e)||\"\"}lookupInlineStyle(t,e){return Object(i.y)(this._platformId)?t.style.getPropertyValue(e):this._getServerStyle(t,e)}lookupStyle(t,e,n=!1){let r=\"\";return t&&((r=this.lookupInlineStyle(t,e))||(Object(i.y)(this._platformId)?n||(r=getComputedStyle(t).getPropertyValue(e)):this._serverModuleLoaded&&(r=this._serverStylesheet.getStyleForElement(t,e)))),r?r.trim():\"\"}_applyMultiValueStyleToElement(t,e){Object.keys(t).sort().forEach(n=>{const r=t[n],a=Array.isArray(r)?r:[r];a.sort();for(let t of a)t=t?t+\"\":\"\",Object(i.y)(this._platformId)||!this._serverModuleLoaded?Object(i.y)(this._platformId)?e.style.setProperty(n,t):this._setServerStyle(e,n,t):this._serverStylesheet.addStyleToElement(e,n,t)})}_setServerStyle(t,e,n){e=e.replace(/([a-z])([A-Z])/g,\"$1-$2\").toLowerCase();const r=this._readStyleAttribute(t);r[e]=n||\"\",this._writeStyleAttribute(t,r)}_getServerStyle(t,e){return this._readStyleAttribute(t)[e]||\"\"}_readStyleAttribute(t){const e={},n=t.getAttribute(\"style\");if(n){const t=n.split(/;+/g);for(let n=0;n<t.length;n++){const r=t[n].trim();if(r.length>0){const t=r.indexOf(\":\");if(-1===t)throw new Error(\"Invalid CSS style: \"+r);e[r.substr(0,t).trim()]=r.substr(t+1).trim()}}}return e}_writeStyleAttribute(t,e){let n=\"\";for(const r in e)e[r]&&(n+=r+\":\"+e[r]+\";\");t.setAttribute(\"style\",n)}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(m),r.hc(v),r.hc(r.K),r.hc(y))},t.\\u0275prov=Object(r.Tb)({factory:function(){return new t(Object(r.hc)(m),Object(r.hc)(v),Object(r.hc)(r.K),Object(r.hc)(y))},token:t,providedIn:\"root\"}),t})();class X{constructor(){this.shouldCache=!0}sideEffect(t,e,n){}}function Z(t,e=\"1\",n=\"1\"){let r=[e,n,t],i=t.indexOf(\"calc\");if(i>0){r[2]=J(t.substring(i).trim());let e=t.substr(0,i).trim().split(\" \");2==e.length&&(r[0]=e[0],r[1]=e[1])}else if(0==i)r[2]=J(t.trim());else{let i=t.split(\" \");r=3===i.length?i:[e,n,t]}return r}function J(t){return t.replace(/[\\s]/g,\"\").replace(/[\\/\\*\\+\\-]/g,\" $& \")}let K=(()=>{class t{constructor(t,e,n){this.matchMedia=t,this.breakpoints=e,this.hook=n,this.activatedBreakpoints=[],this.elementMap=new Map,this.elementKeyMap=new WeakMap,this.watcherMap=new WeakMap,this.updateMap=new WeakMap,this.clearMap=new WeakMap,this.subject=new a.a,this.observeActivations()}get activatedAlias(){return this.activatedBreakpoints[0]?this.activatedBreakpoints[0].alias:\"\"}onMediaChange(t){const e=this.findByQuery(t.mediaQuery);e&&((t=b(t,e)).matches&&-1===this.activatedBreakpoints.indexOf(e)?(this.activatedBreakpoints.push(e),this.activatedBreakpoints.sort(j),this.updateStyles()):t.matches||-1===this.activatedBreakpoints.indexOf(e)||(this.activatedBreakpoints.splice(this.activatedBreakpoints.indexOf(e),1),this.activatedBreakpoints.sort(j),this.updateStyles()))}init(t,e,n,r,i=[]){$(this.updateMap,t,e,n),$(this.clearMap,t,e,r),this.buildElementKeyMap(t,e),this.watchExtraTriggers(t,e,i)}getValue(t,e,n){const r=this.elementMap.get(t);if(r){const t=void 0!==n?r.get(n):this.getActivatedValues(r,e);if(t)return t.get(e)}}hasValue(t,e){const n=this.elementMap.get(t);if(n){const t=this.getActivatedValues(n,e);if(t)return void 0!==t.get(e)||!1}return!1}setValue(t,e,n,r){let i=this.elementMap.get(t);if(i){const a=(i.get(r)||new Map).set(e,n);i.set(r,a),this.elementMap.set(t,i)}else i=(new Map).set(r,(new Map).set(e,n)),this.elementMap.set(t,i);const a=this.getValue(t,e);void 0!==a&&this.updateElement(t,e,a)}trackValue(t,e){return this.subject.asObservable().pipe(Object(c.a)(n=>n.element===t&&n.key===e))}updateStyles(){this.elementMap.forEach((t,e)=>{const n=new Set(this.elementKeyMap.get(e));let r=this.getActivatedValues(t);r&&r.forEach((t,r)=>{this.updateElement(e,r,t),n.delete(r)}),n.forEach(n=>{if(r=this.getActivatedValues(t,n),r){const t=r.get(n);this.updateElement(e,n,t)}else this.clearElement(e,n)})})}clearElement(t,e){const n=this.clearMap.get(t);if(n){const r=n.get(e);r&&(r(),this.subject.next({element:t,key:e,value:\"\"}))}}updateElement(t,e,n){const r=this.updateMap.get(t);if(r){const i=r.get(e);i&&(i(n),this.subject.next({element:t,key:e,value:n}))}}releaseElement(t){const e=this.watcherMap.get(t);e&&(e.forEach(t=>t.unsubscribe()),this.watcherMap.delete(t));const n=this.elementMap.get(t);n&&(n.forEach((t,e)=>n.delete(e)),this.elementMap.delete(t))}triggerUpdate(t,e){const n=this.elementMap.get(t);if(n){const r=this.getActivatedValues(n,e);r&&(e?this.updateElement(t,e,r.get(e)):r.forEach((e,n)=>this.updateElement(t,n,e)))}}buildElementKeyMap(t,e){let n=this.elementKeyMap.get(t);n||(n=new Set,this.elementKeyMap.set(t,n)),n.add(e)}watchExtraTriggers(t,e,n){if(n&&n.length){let r=this.watcherMap.get(t);if(r||(r=new Map,this.watcherMap.set(t,r)),!r.get(e)){const i=Object(l.a)(...n).subscribe(()=>{const n=this.getValue(t,e);this.updateElement(t,e,n)});r.set(e,i)}}}findByQuery(t){return this.breakpoints.findByQuery(t)}getActivatedValues(t,e){for(let r=0;r<this.activatedBreakpoints.length;r++){const n=t.get(this.activatedBreakpoints[r].alias);if(n&&(void 0===e||n.has(e)&&null!=n.get(e)))return n}const n=t.get(\"\");return void 0===e||n&&n.has(e)?n:void 0}observeActivations(){const t=this.breakpoints.items.map(t=>t.mediaQuery);this.matchMedia.observe(this.hook.withPrintQuery(t)).pipe(Object(u.a)(this.hook.interceptEvents(this)),Object(c.a)(this.hook.blockPropagation())).subscribe(this.onMediaChange.bind(this))}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(B),r.hc(N),r.hc(U))},t.\\u0275prov=Object(r.Tb)({factory:function(){return new t(Object(r.hc)(B),Object(r.hc)(N),Object(r.hc)(U))},token:t,providedIn:\"root\"}),t})();function $(t,e,n,r){if(void 0!==r){let i=t.get(e);i||(i=new Map,t.set(e,i)),i.set(n,r)}}},pLZG:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));var r=n(\"7o/Q\");function i(t,e){return function(n){return n.lift(new a(t,e))}}class a{constructor(t,e){this.predicate=t,this.thisArg=e}call(t,e){return e.subscribe(new o(t,this.predicate,this.thisArg))}}class o extends r.a{constructor(t,e,n){super(t),this.predicate=e,this.thisArg=n,this.count=0}_next(t){let e;try{e=this.predicate.call(this.thisArg,t,this.count++)}catch(n){return void this.destination.error(n)}e&&this.destination.next(t)}}},qFsG:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return p})),n.d(e,\"b\",(function(){return _})),n.d(e,\"c\",(function(){return b}));var r=n(\"nLfN\"),i=n(\"fXoL\"),a=n(\"8LU1\"),o=n(\"EY2u\"),s=n(\"XNiG\");n(\"xgIS\"),n(\"3UWI\"),n(\"1G5W\"),n(\"ofXK\");const l=Object(r.f)({passive:!0});let c=(()=>{class t{constructor(t,e){this._platform=t,this._ngZone=e,this._monitoredElements=new Map}monitor(t){if(!this._platform.isBrowser)return o.a;const e=Object(a.e)(t),n=this._monitoredElements.get(e);if(n)return n.subject;const r=new s.a,i=\"cdk-text-field-autofilled\",c=t=>{\"cdk-text-field-autofill-start\"!==t.animationName||e.classList.contains(i)?\"cdk-text-field-autofill-end\"===t.animationName&&e.classList.contains(i)&&(e.classList.remove(i),this._ngZone.run(()=>r.next({target:t.target,isAutofilled:!1}))):(e.classList.add(i),this._ngZone.run(()=>r.next({target:t.target,isAutofilled:!0})))};return this._ngZone.runOutsideAngular(()=>{e.addEventListener(\"animationstart\",c,l),e.classList.add(\"cdk-text-field-autofill-monitored\")}),this._monitoredElements.set(e,{subject:r,unlisten:()=>{e.removeEventListener(\"animationstart\",c,l)}}),r}stopMonitoring(t){const e=Object(a.e)(t),n=this._monitoredElements.get(e);n&&(n.unlisten(),n.subject.complete(),e.classList.remove(\"cdk-text-field-autofill-monitored\"),e.classList.remove(\"cdk-text-field-autofilled\"),this._monitoredElements.delete(e))}ngOnDestroy(){this._monitoredElements.forEach((t,e)=>this.stopMonitoring(e))}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(r.a),i.hc(i.H))},t.\\u0275prov=Object(i.Tb)({factory:function(){return new t(Object(i.hc)(r.a),Object(i.hc)(i.H))},token:t,providedIn:\"root\"}),t})(),u=(()=>{class t{}return t.\\u0275mod=i.Vb({type:t}),t.\\u0275inj=i.Ub({factory:function(e){return new(e||t)},imports:[[r.b]]}),t})();var h=n(\"FKr1\"),d=n(\"kmnG\"),f=n(\"3Pt+\");const p=new i.w(\"MAT_INPUT_VALUE_ACCESSOR\"),m=[\"button\",\"checkbox\",\"file\",\"hidden\",\"image\",\"radio\",\"range\",\"reset\",\"submit\"];let g=0;class y{constructor(t,e,n,r){this._defaultErrorStateMatcher=t,this._parentForm=e,this._parentFormGroup=n,this.ngControl=r}}const v=Object(h.z)(y);let _=(()=>{class t extends v{constructor(t,e,n,i,a,o,l,c,u,h){super(o,i,a,n),this._elementRef=t,this._platform=e,this.ngControl=n,this._autofillMonitor=c,this._formField=h,this._uid=\"mat-input-\"+g++,this.focused=!1,this.stateChanges=new s.a,this.controlType=\"mat-input\",this.autofilled=!1,this._disabled=!1,this._required=!1,this._type=\"text\",this._readonly=!1,this._neverEmptyInputTypes=[\"date\",\"datetime\",\"datetime-local\",\"month\",\"time\",\"week\"].filter(t=>Object(r.e)().has(t));const d=this._elementRef.nativeElement,f=d.nodeName.toLowerCase();this._inputValueAccessor=l||d,this._previousNativeValue=this.value,this.id=this.id,e.IOS&&u.runOutsideAngular(()=>{t.nativeElement.addEventListener(\"keyup\",t=>{let e=t.target;e.value||e.selectionStart||e.selectionEnd||(e.setSelectionRange(1,1),e.setSelectionRange(0,0))})}),this._isServer=!this._platform.isBrowser,this._isNativeSelect=\"select\"===f,this._isTextarea=\"textarea\"===f,this._isNativeSelect&&(this.controlType=d.multiple?\"mat-native-select-multiple\":\"mat-native-select\")}get disabled(){return this.ngControl&&null!==this.ngControl.disabled?this.ngControl.disabled:this._disabled}set disabled(t){this._disabled=Object(a.c)(t),this.focused&&(this.focused=!1,this.stateChanges.next())}get id(){return this._id}set id(t){this._id=t||this._uid}get required(){return this._required}set required(t){this._required=Object(a.c)(t)}get type(){return this._type}set type(t){this._type=t||\"text\",this._validateType(),!this._isTextarea&&Object(r.e)().has(this._type)&&(this._elementRef.nativeElement.type=this._type)}get value(){return this._inputValueAccessor.value}set value(t){t!==this.value&&(this._inputValueAccessor.value=t,this.stateChanges.next())}get readonly(){return this._readonly}set readonly(t){this._readonly=Object(a.c)(t)}ngAfterViewInit(){this._platform.isBrowser&&this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(t=>{this.autofilled=t.isAutofilled,this.stateChanges.next()})}ngOnChanges(){this.stateChanges.next()}ngOnDestroy(){this.stateChanges.complete(),this._platform.isBrowser&&this._autofillMonitor.stopMonitoring(this._elementRef.nativeElement)}ngDoCheck(){this.ngControl&&this.updateErrorState(),this._dirtyCheckNativeValue(),this._dirtyCheckPlaceholder()}focus(t){this._elementRef.nativeElement.focus(t)}_focusChanged(t){t===this.focused||this.readonly&&t||(this.focused=t,this.stateChanges.next())}_onInput(){}_dirtyCheckPlaceholder(){var t,e;const n=(null===(e=null===(t=this._formField)||void 0===t?void 0:t._hideControlPlaceholder)||void 0===e?void 0:e.call(t))?null:this.placeholder;if(n!==this._previousPlaceholder){const t=this._elementRef.nativeElement;this._previousPlaceholder=n,n?t.setAttribute(\"placeholder\",n):t.removeAttribute(\"placeholder\")}}_dirtyCheckNativeValue(){const t=this._elementRef.nativeElement.value;this._previousNativeValue!==t&&(this._previousNativeValue=t,this.stateChanges.next())}_validateType(){m.indexOf(this._type)}_isNeverEmpty(){return this._neverEmptyInputTypes.indexOf(this._type)>-1}_isBadInput(){let t=this._elementRef.nativeElement.validity;return t&&t.badInput}get empty(){return!(this._isNeverEmpty()||this._elementRef.nativeElement.value||this._isBadInput()||this.autofilled)}get shouldLabelFloat(){if(this._isNativeSelect){const t=this._elementRef.nativeElement,e=t.options[0];return this.focused||t.multiple||!this.empty||!!(t.selectedIndex>-1&&e&&e.label)}return this.focused||!this.empty}setDescribedByIds(t){t.length?this._elementRef.nativeElement.setAttribute(\"aria-describedby\",t.join(\" \")):this._elementRef.nativeElement.removeAttribute(\"aria-describedby\")}onContainerClick(){this.focused||this.focus()}}return t.\\u0275fac=function(e){return new(e||t)(i.Xb(i.p),i.Xb(r.a),i.Xb(f.m,10),i.Xb(f.p,8),i.Xb(f.i,8),i.Xb(h.d),i.Xb(p,10),i.Xb(c),i.Xb(i.H),i.Xb(d.a,8))},t.\\u0275dir=i.Sb({type:t,selectors:[[\"input\",\"matInput\",\"\"],[\"textarea\",\"matInput\",\"\"],[\"select\",\"matNativeControl\",\"\"],[\"input\",\"matNativeControl\",\"\"],[\"textarea\",\"matNativeControl\",\"\"]],hostAttrs:[1,\"mat-input-element\",\"mat-form-field-autofill-control\"],hostVars:9,hostBindings:function(t,e){1&t&&i.lc(\"focus\",(function(){return e._focusChanged(!0)}))(\"blur\",(function(){return e._focusChanged(!1)}))(\"input\",(function(){return e._onInput()})),2&t&&(i.gc(\"disabled\",e.disabled)(\"required\",e.required),i.Mb(\"id\",e.id)(\"data-placeholder\",e.placeholder)(\"readonly\",e.readonly&&!e._isNativeSelect||null)(\"aria-invalid\",e.errorState)(\"aria-required\",e.required.toString()),i.Pb(\"mat-input-server\",e._isServer))},inputs:{id:\"id\",disabled:\"disabled\",required:\"required\",type:\"type\",value:\"value\",readonly:\"readonly\",placeholder:\"placeholder\",errorStateMatcher:\"errorStateMatcher\",userAriaDescribedBy:[\"aria-describedby\",\"userAriaDescribedBy\"]},exportAs:[\"matInput\"],features:[i.Kb([{provide:d.d,useExisting:t}]),i.Ib,i.Jb]}),t})(),b=(()=>{class t{}return t.\\u0275mod=i.Vb({type:t}),t.\\u0275inj=i.Ub({factory:function(e){return new(e||t)},providers:[h.d],imports:[[u,d.e,h.i],u,d.e]}),t})()},quSY:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return s}));var r=n(\"DH7j\"),i=n(\"XoHu\"),a=n(\"n6bG\");const o=(()=>{function t(t){return Error.call(this),this.message=t?`${t.length} errors occurred during unsubscription:\\n${t.map((t,e)=>`${e+1}) ${t.toString()}`).join(\"\\n  \")}`:\"\",this.name=\"UnsubscriptionError\",this.errors=t,this}return t.prototype=Object.create(Error.prototype),t})();let s=(()=>{class t{constructor(t){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,t&&(this._ctorUnsubscribe=!0,this._unsubscribe=t)}unsubscribe(){let e;if(this.closed)return;let{_parentOrParents:n,_ctorUnsubscribe:s,_unsubscribe:c,_subscriptions:u}=this;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,n instanceof t)n.remove(this);else if(null!==n)for(let t=0;t<n.length;++t)n[t].remove(this);if(Object(a.a)(c)){s&&(this._unsubscribe=void 0);try{c.call(this)}catch(h){e=h instanceof o?l(h.errors):[h]}}if(Object(r.a)(u)){let t=-1,n=u.length;for(;++t<n;){const n=u[t];if(Object(i.a)(n))try{n.unsubscribe()}catch(h){e=e||[],h instanceof o?e=e.concat(l(h.errors)):e.push(h)}}}if(e)throw new o(e)}add(e){let n=e;if(!e)return t.EMPTY;switch(typeof e){case\"function\":n=new t(e);case\"object\":if(n===this||n.closed||\"function\"!=typeof n.unsubscribe)return n;if(this.closed)return n.unsubscribe(),n;if(!(n instanceof t)){const e=n;n=new t,n._subscriptions=[e]}break;default:throw new Error(\"unrecognized teardown \"+e+\" added to Subscription.\")}let{_parentOrParents:r}=n;if(null===r)n._parentOrParents=this;else if(r instanceof t){if(r===this)return n;n._parentOrParents=[r,this]}else{if(-1!==r.indexOf(this))return n;r.push(this)}const i=this._subscriptions;return null===i?this._subscriptions=[n]:i.push(n),n}remove(t){const e=this._subscriptions;if(e){const n=e.indexOf(t);-1!==n&&e.splice(n,1)}}}var e;return t.EMPTY=((e=new t).closed=!0,e),t})();function l(t){return t.reduce((t,e)=>t.concat(e instanceof o?e.errors:e),[])}},qvJo:function(t,e,n){!function(t){\"use strict\";function e(t,e,n,r){var i={s:[\"\\u0925\\u094b\\u0921\\u092f\\u093e \\u0938\\u0945\\u0915\\u0902\\u0921\\u093e\\u0902\\u0928\\u0940\",\"\\u0925\\u094b\\u0921\\u0947 \\u0938\\u0945\\u0915\\u0902\\u0921\"],ss:[t+\" \\u0938\\u0945\\u0915\\u0902\\u0921\\u093e\\u0902\\u0928\\u0940\",t+\" \\u0938\\u0945\\u0915\\u0902\\u0921\"],m:[\"\\u090f\\u0915\\u093e \\u092e\\u093f\\u0923\\u091f\\u093e\\u0928\",\"\\u090f\\u0915 \\u092e\\u093f\\u0928\\u0942\\u091f\"],mm:[t+\" \\u092e\\u093f\\u0923\\u091f\\u093e\\u0902\\u0928\\u0940\",t+\" \\u092e\\u093f\\u0923\\u091f\\u093e\\u0902\"],h:[\"\\u090f\\u0915\\u093e \\u0935\\u0930\\u093e\\u0928\",\"\\u090f\\u0915 \\u0935\\u0930\"],hh:[t+\" \\u0935\\u0930\\u093e\\u0902\\u0928\\u0940\",t+\" \\u0935\\u0930\\u093e\\u0902\"],d:[\"\\u090f\\u0915\\u093e \\u0926\\u093f\\u0938\\u093e\\u0928\",\"\\u090f\\u0915 \\u0926\\u0940\\u0938\"],dd:[t+\" \\u0926\\u093f\\u0938\\u093e\\u0902\\u0928\\u0940\",t+\" \\u0926\\u0940\\u0938\"],M:[\"\\u090f\\u0915\\u093e \\u092e\\u094d\\u0939\\u092f\\u0928\\u094d\\u092f\\u093e\\u0928\",\"\\u090f\\u0915 \\u092e\\u094d\\u0939\\u092f\\u0928\\u094b\"],MM:[t+\" \\u092e\\u094d\\u0939\\u092f\\u0928\\u094d\\u092f\\u093e\\u0928\\u0940\",t+\" \\u092e\\u094d\\u0939\\u092f\\u0928\\u0947\"],y:[\"\\u090f\\u0915\\u093e \\u0935\\u0930\\u094d\\u0938\\u093e\\u0928\",\"\\u090f\\u0915 \\u0935\\u0930\\u094d\\u0938\"],yy:[t+\" \\u0935\\u0930\\u094d\\u0938\\u093e\\u0902\\u0928\\u0940\",t+\" \\u0935\\u0930\\u094d\\u0938\\u093e\\u0902\"]};return r?i[n][0]:i[n][1]}t.defineLocale(\"gom-deva\",{months:{standalone:\"\\u091c\\u093e\\u0928\\u0947\\u0935\\u093e\\u0930\\u0940_\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941\\u0935\\u093e\\u0930\\u0940_\\u092e\\u093e\\u0930\\u094d\\u091a_\\u090f\\u092a\\u094d\\u0930\\u0940\\u0932_\\u092e\\u0947_\\u091c\\u0942\\u0928_\\u091c\\u0941\\u0932\\u092f_\\u0911\\u0917\\u0938\\u094d\\u091f_\\u0938\\u092a\\u094d\\u091f\\u0947\\u0902\\u092c\\u0930_\\u0911\\u0915\\u094d\\u091f\\u094b\\u092c\\u0930_\\u0928\\u094b\\u0935\\u094d\\u0939\\u0947\\u0902\\u092c\\u0930_\\u0921\\u093f\\u0938\\u0947\\u0902\\u092c\\u0930\".split(\"_\"),format:\"\\u091c\\u093e\\u0928\\u0947\\u0935\\u093e\\u0930\\u0940\\u091a\\u094d\\u092f\\u093e_\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941\\u0935\\u093e\\u0930\\u0940\\u091a\\u094d\\u092f\\u093e_\\u092e\\u093e\\u0930\\u094d\\u091a\\u093e\\u091a\\u094d\\u092f\\u093e_\\u090f\\u092a\\u094d\\u0930\\u0940\\u0932\\u093e\\u091a\\u094d\\u092f\\u093e_\\u092e\\u0947\\u092f\\u093e\\u091a\\u094d\\u092f\\u093e_\\u091c\\u0942\\u0928\\u093e\\u091a\\u094d\\u092f\\u093e_\\u091c\\u0941\\u0932\\u092f\\u093e\\u091a\\u094d\\u092f\\u093e_\\u0911\\u0917\\u0938\\u094d\\u091f\\u093e\\u091a\\u094d\\u092f\\u093e_\\u0938\\u092a\\u094d\\u091f\\u0947\\u0902\\u092c\\u0930\\u093e\\u091a\\u094d\\u092f\\u093e_\\u0911\\u0915\\u094d\\u091f\\u094b\\u092c\\u0930\\u093e\\u091a\\u094d\\u092f\\u093e_\\u0928\\u094b\\u0935\\u094d\\u0939\\u0947\\u0902\\u092c\\u0930\\u093e\\u091a\\u094d\\u092f\\u093e_\\u0921\\u093f\\u0938\\u0947\\u0902\\u092c\\u0930\\u093e\\u091a\\u094d\\u092f\\u093e\".split(\"_\"),isFormat:/MMMM(\\s)+D[oD]?/},monthsShort:\"\\u091c\\u093e\\u0928\\u0947._\\u092b\\u0947\\u092c\\u094d\\u0930\\u0941._\\u092e\\u093e\\u0930\\u094d\\u091a_\\u090f\\u092a\\u094d\\u0930\\u0940._\\u092e\\u0947_\\u091c\\u0942\\u0928_\\u091c\\u0941\\u0932._\\u0911\\u0917._\\u0938\\u092a\\u094d\\u091f\\u0947\\u0902._\\u0911\\u0915\\u094d\\u091f\\u094b._\\u0928\\u094b\\u0935\\u094d\\u0939\\u0947\\u0902._\\u0921\\u093f\\u0938\\u0947\\u0902.\".split(\"_\"),monthsParseExact:!0,weekdays:\"\\u0906\\u092f\\u0924\\u093e\\u0930_\\u0938\\u094b\\u092e\\u093e\\u0930_\\u092e\\u0902\\u0917\\u0933\\u093e\\u0930_\\u092c\\u0941\\u0927\\u0935\\u093e\\u0930_\\u092c\\u093f\\u0930\\u0947\\u0938\\u094d\\u0924\\u093e\\u0930_\\u0938\\u0941\\u0915\\u094d\\u0930\\u093e\\u0930_\\u0936\\u0947\\u0928\\u0935\\u093e\\u0930\".split(\"_\"),weekdaysShort:\"\\u0906\\u092f\\u0924._\\u0938\\u094b\\u092e._\\u092e\\u0902\\u0917\\u0933._\\u092c\\u0941\\u0927._\\u092c\\u094d\\u0930\\u0947\\u0938\\u094d\\u0924._\\u0938\\u0941\\u0915\\u094d\\u0930._\\u0936\\u0947\\u0928.\".split(\"_\"),weekdaysMin:\"\\u0906_\\u0938\\u094b_\\u092e\\u0902_\\u092c\\u0941_\\u092c\\u094d\\u0930\\u0947_\\u0938\\u0941_\\u0936\\u0947\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"A h:mm [\\u0935\\u093e\\u091c\\u0924\\u093e\\u0902]\",LTS:\"A h:mm:ss [\\u0935\\u093e\\u091c\\u0924\\u093e\\u0902]\",L:\"DD-MM-YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY A h:mm [\\u0935\\u093e\\u091c\\u0924\\u093e\\u0902]\",LLLL:\"dddd, MMMM Do, YYYY, A h:mm [\\u0935\\u093e\\u091c\\u0924\\u093e\\u0902]\",llll:\"ddd, D MMM YYYY, A h:mm [\\u0935\\u093e\\u091c\\u0924\\u093e\\u0902]\"},calendar:{sameDay:\"[\\u0906\\u092f\\u091c] LT\",nextDay:\"[\\u092b\\u093e\\u0932\\u094d\\u092f\\u093e\\u0902] LT\",nextWeek:\"[\\u092b\\u0941\\u0921\\u0932\\u094b] dddd[,] LT\",lastDay:\"[\\u0915\\u093e\\u0932] LT\",lastWeek:\"[\\u092b\\u093e\\u091f\\u0932\\u094b] dddd[,] LT\",sameElse:\"L\"},relativeTime:{future:\"%s\",past:\"%s \\u0906\\u0926\\u0940\\u0902\",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\\d{1,2}(\\u0935\\u0947\\u0930)/,ordinal:function(t,e){switch(e){case\"D\":return t+\"\\u0935\\u0947\\u0930\";default:case\"M\":case\"Q\":case\"DDD\":case\"d\":case\"w\":case\"W\":return t}},week:{dow:0,doy:3},meridiemParse:/\\u0930\\u093e\\u0924\\u0940|\\u0938\\u0915\\u093e\\u0933\\u0940\\u0902|\\u0926\\u0928\\u092a\\u093e\\u0930\\u093e\\u0902|\\u0938\\u093e\\u0902\\u091c\\u0947/,meridiemHour:function(t,e){return 12===t&&(t=0),\"\\u0930\\u093e\\u0924\\u0940\"===e?t<4?t:t+12:\"\\u0938\\u0915\\u093e\\u0933\\u0940\\u0902\"===e?t:\"\\u0926\\u0928\\u092a\\u093e\\u0930\\u093e\\u0902\"===e?t>12?t:t+12:\"\\u0938\\u093e\\u0902\\u091c\\u0947\"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?\"\\u0930\\u093e\\u0924\\u0940\":t<12?\"\\u0938\\u0915\\u093e\\u0933\\u0940\\u0902\":t<16?\"\\u0926\\u0928\\u092a\\u093e\\u0930\\u093e\\u0902\":t<20?\"\\u0938\\u093e\\u0902\\u091c\\u0947\":\"\\u0930\\u093e\\u0924\\u0940\"}})}(n(\"wd/R\"))},rDax:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return K})),n.d(e,\"b\",(function(){return J})),n.d(e,\"c\",(function(){return G})),n.d(e,\"d\",(function(){return A})),n.d(e,\"e\",(function(){return P})),n.d(e,\"f\",(function(){return Q}));var r=n(\"vxfF\"),i=n(\"fXoL\"),a=n(\"nLfN\"),o=n(\"cH1L\"),s=n(\"ofXK\"),l=n(\"8LU1\"),c=n(\"+rOU\"),u=n(\"XNiG\"),h=n(\"quSY\"),d=n(\"VRyK\"),f=n(\"IzEk\"),p=n(\"1G5W\"),m=n(\"7o/Q\");class g{constructor(t,e){this.predicate=t,this.inclusive=e}call(t,e){return e.subscribe(new y(t,this.predicate,this.inclusive))}}class y extends m.a{constructor(t,e,n){super(t),this.predicate=e,this.inclusive=n,this.index=0}_next(t){const e=this.destination;let n;try{n=this.predicate(t,this.index++)}catch(r){return void e.error(r)}this.nextOrComplete(t,n)}nextOrComplete(t,e){const n=this.destination;Boolean(e)?n.next(t):(this.inclusive&&n.next(t),n.complete())}}var v=n(\"FtGj\");const _=Object(a.g)();class b{constructor(t,e){this._viewportRuler=t,this._previousHTMLStyles={top:\"\",left:\"\"},this._isEnabled=!1,this._document=e}attach(){}enable(){if(this._canBeEnabled()){const t=this._document.documentElement;this._previousScrollPosition=this._viewportRuler.getViewportScrollPosition(),this._previousHTMLStyles.left=t.style.left||\"\",this._previousHTMLStyles.top=t.style.top||\"\",t.style.left=Object(l.d)(-this._previousScrollPosition.left),t.style.top=Object(l.d)(-this._previousScrollPosition.top),t.classList.add(\"cdk-global-scrollblock\"),this._isEnabled=!0}}disable(){if(this._isEnabled){const t=this._document.documentElement,e=t.style,n=this._document.body.style,r=e.scrollBehavior||\"\",i=n.scrollBehavior||\"\";this._isEnabled=!1,e.left=this._previousHTMLStyles.left,e.top=this._previousHTMLStyles.top,t.classList.remove(\"cdk-global-scrollblock\"),_&&(e.scrollBehavior=n.scrollBehavior=\"auto\"),window.scroll(this._previousScrollPosition.left,this._previousScrollPosition.top),_&&(e.scrollBehavior=r,n.scrollBehavior=i)}}_canBeEnabled(){if(this._document.documentElement.classList.contains(\"cdk-global-scrollblock\")||this._isEnabled)return!1;const t=this._document.body,e=this._viewportRuler.getViewportSize();return t.scrollHeight>e.height||t.scrollWidth>e.width}}class x{constructor(t,e,n,r){this._scrollDispatcher=t,this._ngZone=e,this._viewportRuler=n,this._config=r,this._scrollSubscription=null,this._detach=()=>{this.disable(),this._overlayRef.hasAttached()&&this._ngZone.run(()=>this._overlayRef.detach())}}attach(t){this._overlayRef=t}enable(){if(this._scrollSubscription)return;const t=this._scrollDispatcher.scrolled(0);this._config&&this._config.threshold&&this._config.threshold>1?(this._initialScrollPosition=this._viewportRuler.getViewportScrollPosition().top,this._scrollSubscription=t.subscribe(()=>{const t=this._viewportRuler.getViewportScrollPosition().top;Math.abs(t-this._initialScrollPosition)>this._config.threshold?this._detach():this._overlayRef.updatePosition()})):this._scrollSubscription=t.subscribe(this._detach)}disable(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)}detach(){this.disable(),this._overlayRef=null}}class w{enable(){}disable(){}attach(){}}function k(t,e){return e.some(e=>t.bottom<e.top||t.top>e.bottom||t.right<e.left||t.left>e.right)}function M(t,e){return e.some(e=>t.top<e.top||t.bottom>e.bottom||t.left<e.left||t.right>e.right)}class T{constructor(t,e,n,r){this._scrollDispatcher=t,this._viewportRuler=e,this._ngZone=n,this._config=r,this._scrollSubscription=null}attach(t){this._overlayRef=t}enable(){this._scrollSubscription||(this._scrollSubscription=this._scrollDispatcher.scrolled(this._config?this._config.scrollThrottle:0).subscribe(()=>{if(this._overlayRef.updatePosition(),this._config&&this._config.autoClose){const t=this._overlayRef.overlayElement.getBoundingClientRect(),{width:e,height:n}=this._viewportRuler.getViewportSize();k(t,[{width:e,height:n,bottom:n,right:e,top:0,left:0}])&&(this.disable(),this._ngZone.run(()=>this._overlayRef.detach()))}}))}disable(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)}detach(){this.disable(),this._overlayRef=null}}let S=(()=>{class t{constructor(t,e,n,r){this._scrollDispatcher=t,this._viewportRuler=e,this._ngZone=n,this.noop=()=>new w,this.close=t=>new x(this._scrollDispatcher,this._ngZone,this._viewportRuler,t),this.block=()=>new b(this._viewportRuler,this._document),this.reposition=t=>new T(this._scrollDispatcher,this._viewportRuler,this._ngZone,t),this._document=r}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(r.c),i.hc(r.e),i.hc(i.H),i.hc(s.d))},t.\\u0275prov=Object(i.Tb)({factory:function(){return new t(Object(i.hc)(r.c),Object(i.hc)(r.e),Object(i.hc)(i.H),Object(i.hc)(s.d))},token:t,providedIn:\"root\"}),t})();class A{constructor(t){if(this.scrollStrategy=new w,this.panelClass=\"\",this.hasBackdrop=!1,this.backdropClass=\"cdk-overlay-dark-backdrop\",this.disposeOnNavigation=!1,t){const e=Object.keys(t);for(const n of e)void 0!==t[n]&&(this[n]=t[n])}}}class L{constructor(t,e,n,r,i){this.offsetX=n,this.offsetY=r,this.panelClass=i,this.originX=t.originX,this.originY=t.originY,this.overlayX=e.overlayX,this.overlayY=e.overlayY}}class C{constructor(t,e){this.connectionPair=t,this.scrollableViewProperties=e}}let E=(()=>{class t{constructor(t){this._attachedOverlays=[],this._document=t}ngOnDestroy(){this.detach()}add(t){this.remove(t),this._attachedOverlays.push(t)}remove(t){const e=this._attachedOverlays.indexOf(t);e>-1&&this._attachedOverlays.splice(e,1),0===this._attachedOverlays.length&&this.detach()}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(s.d))},t.\\u0275prov=Object(i.Tb)({factory:function(){return new t(Object(i.hc)(s.d))},token:t,providedIn:\"root\"}),t})(),O=(()=>{class t extends E{constructor(t){super(t),this._keydownListener=t=>{const e=this._attachedOverlays;for(let n=e.length-1;n>-1;n--)if(e[n]._keydownEvents.observers.length>0){e[n]._keydownEvents.next(t);break}}}add(t){super.add(t),this._isAttached||(this._document.body.addEventListener(\"keydown\",this._keydownListener),this._isAttached=!0)}detach(){this._isAttached&&(this._document.body.removeEventListener(\"keydown\",this._keydownListener),this._isAttached=!1)}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(s.d))},t.\\u0275prov=Object(i.Tb)({factory:function(){return new t(Object(i.hc)(s.d))},token:t,providedIn:\"root\"}),t})(),D=(()=>{class t extends E{constructor(t,e){super(t),this._platform=e,this._cursorStyleIsSet=!1,this._clickListener=t=>{const e=t.composedPath?t.composedPath()[0]:t.target,n=this._attachedOverlays.slice();for(let r=n.length-1;r>-1;r--){const i=n[r];if(!(i._outsidePointerEvents.observers.length<1)&&i.hasAttached()){if(i.overlayElement.contains(e))break;i._outsidePointerEvents.next(t)}}}}add(t){super.add(t),this._isAttached||(this._document.body.addEventListener(\"click\",this._clickListener,!0),this._document.body.addEventListener(\"contextmenu\",this._clickListener,!0),this._platform.IOS&&!this._cursorStyleIsSet&&(this._cursorOriginalValue=this._document.body.style.cursor,this._document.body.style.cursor=\"pointer\",this._cursorStyleIsSet=!0),this._isAttached=!0)}detach(){this._isAttached&&(this._document.body.removeEventListener(\"click\",this._clickListener,!0),this._document.body.removeEventListener(\"contextmenu\",this._clickListener,!0),this._platform.IOS&&this._cursorStyleIsSet&&(this._document.body.style.cursor=this._cursorOriginalValue,this._cursorStyleIsSet=!1),this._isAttached=!1)}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(s.d),i.hc(a.a))},t.\\u0275prov=Object(i.Tb)({factory:function(){return new t(Object(i.hc)(s.d),Object(i.hc)(a.a))},token:t,providedIn:\"root\"}),t})();const I=!(\"undefined\"==typeof window||!window||!window.__karma__&&!window.jasmine);let P=(()=>{class t{constructor(t,e){this._platform=e,this._document=t}ngOnDestroy(){const t=this._containerElement;t&&t.parentNode&&t.parentNode.removeChild(t)}getContainerElement(){return this._containerElement||this._createContainer(),this._containerElement}_createContainer(){const t=\"cdk-overlay-container\";if(this._platform.isBrowser||I){const e=this._document.querySelectorAll(`.${t}[platform=\"server\"], .${t}[platform=\"test\"]`);for(let t=0;t<e.length;t++)e[t].parentNode.removeChild(e[t])}const e=this._document.createElement(\"div\");e.classList.add(t),I?e.setAttribute(\"platform\",\"test\"):this._platform.isBrowser||e.setAttribute(\"platform\",\"server\"),this._document.body.appendChild(e),this._containerElement=e}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(s.d),i.hc(a.a))},t.\\u0275prov=Object(i.Tb)({factory:function(){return new t(Object(i.hc)(s.d),Object(i.hc)(a.a))},token:t,providedIn:\"root\"}),t})();class R{constructor(t,e,n,r,i,a,o,s,l){this._portalOutlet=t,this._host=e,this._pane=n,this._config=r,this._ngZone=i,this._keyboardDispatcher=a,this._document=o,this._location=s,this._outsideClickDispatcher=l,this._backdropElement=null,this._backdropClick=new u.a,this._attachments=new u.a,this._detachments=new u.a,this._locationChanges=h.a.EMPTY,this._backdropClickHandler=t=>this._backdropClick.next(t),this._keydownEvents=new u.a,this._outsidePointerEvents=new u.a,r.scrollStrategy&&(this._scrollStrategy=r.scrollStrategy,this._scrollStrategy.attach(this)),this._positionStrategy=r.positionStrategy}get overlayElement(){return this._pane}get backdropElement(){return this._backdropElement}get hostElement(){return this._host}attach(t){let e=this._portalOutlet.attach(t);return!this._host.parentElement&&this._previousHostParent&&this._previousHostParent.appendChild(this._host),this._positionStrategy&&this._positionStrategy.attach(this),this._updateStackingOrder(),this._updateElementSize(),this._updateElementDirection(),this._scrollStrategy&&this._scrollStrategy.enable(),this._ngZone.onStable.pipe(Object(f.a)(1)).subscribe(()=>{this.hasAttached()&&this.updatePosition()}),this._togglePointerEvents(!0),this._config.hasBackdrop&&this._attachBackdrop(),this._config.panelClass&&this._toggleClasses(this._pane,this._config.panelClass,!0),this._attachments.next(),this._keyboardDispatcher.add(this),this._config.disposeOnNavigation&&(this._locationChanges=this._location.subscribe(()=>this.dispose())),this._outsideClickDispatcher.add(this),e}detach(){if(!this.hasAttached())return;this.detachBackdrop(),this._togglePointerEvents(!1),this._positionStrategy&&this._positionStrategy.detach&&this._positionStrategy.detach(),this._scrollStrategy&&this._scrollStrategy.disable();const t=this._portalOutlet.detach();return this._detachments.next(),this._keyboardDispatcher.remove(this),this._detachContentWhenStable(),this._locationChanges.unsubscribe(),this._outsideClickDispatcher.remove(this),t}dispose(){const t=this.hasAttached();this._positionStrategy&&this._positionStrategy.dispose(),this._disposeScrollStrategy(),this.detachBackdrop(),this._locationChanges.unsubscribe(),this._keyboardDispatcher.remove(this),this._portalOutlet.dispose(),this._attachments.complete(),this._backdropClick.complete(),this._keydownEvents.complete(),this._outsidePointerEvents.complete(),this._outsideClickDispatcher.remove(this),this._host&&this._host.parentNode&&(this._host.parentNode.removeChild(this._host),this._host=null),this._previousHostParent=this._pane=null,t&&this._detachments.next(),this._detachments.complete()}hasAttached(){return this._portalOutlet.hasAttached()}backdropClick(){return this._backdropClick}attachments(){return this._attachments}detachments(){return this._detachments}keydownEvents(){return this._keydownEvents}outsidePointerEvents(){return this._outsidePointerEvents}getConfig(){return this._config}updatePosition(){this._positionStrategy&&this._positionStrategy.apply()}updatePositionStrategy(t){t!==this._positionStrategy&&(this._positionStrategy&&this._positionStrategy.dispose(),this._positionStrategy=t,this.hasAttached()&&(t.attach(this),this.updatePosition()))}updateSize(t){this._config=Object.assign(Object.assign({},this._config),t),this._updateElementSize()}setDirection(t){this._config=Object.assign(Object.assign({},this._config),{direction:t}),this._updateElementDirection()}addPanelClass(t){this._pane&&this._toggleClasses(this._pane,t,!0)}removePanelClass(t){this._pane&&this._toggleClasses(this._pane,t,!1)}getDirection(){const t=this._config.direction;return t?\"string\"==typeof t?t:t.value:\"ltr\"}updateScrollStrategy(t){t!==this._scrollStrategy&&(this._disposeScrollStrategy(),this._scrollStrategy=t,this.hasAttached()&&(t.attach(this),t.enable()))}_updateElementDirection(){this._host.setAttribute(\"dir\",this.getDirection())}_updateElementSize(){if(!this._pane)return;const t=this._pane.style;t.width=Object(l.d)(this._config.width),t.height=Object(l.d)(this._config.height),t.minWidth=Object(l.d)(this._config.minWidth),t.minHeight=Object(l.d)(this._config.minHeight),t.maxWidth=Object(l.d)(this._config.maxWidth),t.maxHeight=Object(l.d)(this._config.maxHeight)}_togglePointerEvents(t){this._pane.style.pointerEvents=t?\"auto\":\"none\"}_attachBackdrop(){const t=\"cdk-overlay-backdrop-showing\";this._backdropElement=this._document.createElement(\"div\"),this._backdropElement.classList.add(\"cdk-overlay-backdrop\"),this._config.backdropClass&&this._toggleClasses(this._backdropElement,this._config.backdropClass,!0),this._host.parentElement.insertBefore(this._backdropElement,this._host),this._backdropElement.addEventListener(\"click\",this._backdropClickHandler),\"undefined\"!=typeof requestAnimationFrame?this._ngZone.runOutsideAngular(()=>{requestAnimationFrame(()=>{this._backdropElement&&this._backdropElement.classList.add(t)})}):this._backdropElement.classList.add(t)}_updateStackingOrder(){this._host.nextSibling&&this._host.parentNode.appendChild(this._host)}detachBackdrop(){let t,e=this._backdropElement;if(!e)return;let n=()=>{e&&(e.removeEventListener(\"click\",this._backdropClickHandler),e.removeEventListener(\"transitionend\",n),e.parentNode&&e.parentNode.removeChild(e)),this._backdropElement==e&&(this._backdropElement=null),this._config.backdropClass&&this._toggleClasses(e,this._config.backdropClass,!1),clearTimeout(t)};e.classList.remove(\"cdk-overlay-backdrop-showing\"),this._ngZone.runOutsideAngular(()=>{e.addEventListener(\"transitionend\",n)}),e.style.pointerEvents=\"none\",t=this._ngZone.runOutsideAngular(()=>setTimeout(n,500))}_toggleClasses(t,e,n){const r=t.classList;Object(l.b)(e).forEach(t=>{t&&(n?r.add(t):r.remove(t))})}_detachContentWhenStable(){this._ngZone.runOutsideAngular(()=>{const t=this._ngZone.onStable.pipe(Object(p.a)(Object(d.a)(this._attachments,this._detachments))).subscribe(()=>{this._pane&&this._host&&0!==this._pane.children.length||(this._pane&&this._config.panelClass&&this._toggleClasses(this._pane,this._config.panelClass,!1),this._host&&this._host.parentElement&&(this._previousHostParent=this._host.parentElement,this._previousHostParent.removeChild(this._host)),t.unsubscribe())})})}_disposeScrollStrategy(){const t=this._scrollStrategy;t&&(t.disable(),t.detach&&t.detach())}}const z=\"cdk-overlay-connected-position-bounding-box\",j=/([A-Za-z%]+)$/;class F{constructor(t,e,n,r,i){this._viewportRuler=e,this._document=n,this._platform=r,this._overlayContainer=i,this._lastBoundingBoxSize={width:0,height:0},this._isPushed=!1,this._canPush=!0,this._growAfterOpen=!1,this._hasFlexibleDimensions=!0,this._positionLocked=!1,this._viewportMargin=0,this._scrollables=[],this._preferredPositions=[],this._positionChanges=new u.a,this._resizeSubscription=h.a.EMPTY,this._offsetX=0,this._offsetY=0,this._appliedPanelClasses=[],this.positionChanges=this._positionChanges,this.setOrigin(t)}get positions(){return this._preferredPositions}attach(t){this._validatePositions(),t.hostElement.classList.add(z),this._overlayRef=t,this._boundingBox=t.hostElement,this._pane=t.overlayElement,this._isDisposed=!1,this._isInitialRender=!0,this._lastPosition=null,this._resizeSubscription.unsubscribe(),this._resizeSubscription=this._viewportRuler.change().subscribe(()=>{this._isInitialRender=!0,this.apply()})}apply(){if(this._isDisposed||!this._platform.isBrowser)return;if(!this._isInitialRender&&this._positionLocked&&this._lastPosition)return void this.reapplyLastPosition();this._clearPanelClasses(),this._resetOverlayElementStyles(),this._resetBoundingBoxStyles(),this._viewportRect=this._getNarrowedViewportRect(),this._originRect=this._getOriginRect(),this._overlayRect=this._pane.getBoundingClientRect();const t=this._originRect,e=this._overlayRect,n=this._viewportRect,r=[];let i;for(let a of this._preferredPositions){let o=this._getOriginPoint(t,a),s=this._getOverlayPoint(o,e,a),l=this._getOverlayFit(s,e,n,a);if(l.isCompletelyWithinViewport)return this._isPushed=!1,void this._applyPosition(a,o);this._canFitWithFlexibleDimensions(l,s,n)?r.push({position:a,origin:o,overlayRect:e,boundingBoxRect:this._calculateBoundingBoxRect(o,a)}):(!i||i.overlayFit.visibleArea<l.visibleArea)&&(i={overlayFit:l,overlayPoint:s,originPoint:o,position:a,overlayRect:e})}if(r.length){let t=null,e=-1;for(const n of r){const r=n.boundingBoxRect.width*n.boundingBoxRect.height*(n.position.weight||1);r>e&&(e=r,t=n)}return this._isPushed=!1,void this._applyPosition(t.position,t.origin)}if(this._canPush)return this._isPushed=!0,void this._applyPosition(i.position,i.originPoint);this._applyPosition(i.position,i.originPoint)}detach(){this._clearPanelClasses(),this._lastPosition=null,this._previousPushAmount=null,this._resizeSubscription.unsubscribe()}dispose(){this._isDisposed||(this._boundingBox&&N(this._boundingBox.style,{top:\"\",left:\"\",right:\"\",bottom:\"\",height:\"\",width:\"\",alignItems:\"\",justifyContent:\"\"}),this._pane&&this._resetOverlayElementStyles(),this._overlayRef&&this._overlayRef.hostElement.classList.remove(z),this.detach(),this._positionChanges.complete(),this._overlayRef=this._boundingBox=null,this._isDisposed=!0)}reapplyLastPosition(){if(!this._isDisposed&&(!this._platform||this._platform.isBrowser)){this._originRect=this._getOriginRect(),this._overlayRect=this._pane.getBoundingClientRect(),this._viewportRect=this._getNarrowedViewportRect();const t=this._lastPosition||this._preferredPositions[0],e=this._getOriginPoint(this._originRect,t);this._applyPosition(t,e)}}withScrollableContainers(t){return this._scrollables=t,this}withPositions(t){return this._preferredPositions=t,-1===t.indexOf(this._lastPosition)&&(this._lastPosition=null),this._validatePositions(),this}withViewportMargin(t){return this._viewportMargin=t,this}withFlexibleDimensions(t=!0){return this._hasFlexibleDimensions=t,this}withGrowAfterOpen(t=!0){return this._growAfterOpen=t,this}withPush(t=!0){return this._canPush=t,this}withLockedPosition(t=!0){return this._positionLocked=t,this}setOrigin(t){return this._origin=t,this}withDefaultOffsetX(t){return this._offsetX=t,this}withDefaultOffsetY(t){return this._offsetY=t,this}withTransformOriginOn(t){return this._transformOriginSelector=t,this}_getOriginPoint(t,e){let n,r;if(\"center\"==e.originX)n=t.left+t.width/2;else{const r=this._isRtl()?t.right:t.left,i=this._isRtl()?t.left:t.right;n=\"start\"==e.originX?r:i}return r=\"center\"==e.originY?t.top+t.height/2:\"top\"==e.originY?t.top:t.bottom,{x:n,y:r}}_getOverlayPoint(t,e,n){let r,i;return r=\"center\"==n.overlayX?-e.width/2:\"start\"===n.overlayX?this._isRtl()?-e.width:0:this._isRtl()?0:-e.width,i=\"center\"==n.overlayY?-e.height/2:\"top\"==n.overlayY?0:-e.height,{x:t.x+r,y:t.y+i}}_getOverlayFit(t,e,n,r){const i=Y(e);let{x:a,y:o}=t,s=this._getOffset(r,\"x\"),l=this._getOffset(r,\"y\");s&&(a+=s),l&&(o+=l);let c=0-o,u=o+i.height-n.height,h=this._subtractOverflows(i.width,0-a,a+i.width-n.width),d=this._subtractOverflows(i.height,c,u),f=h*d;return{visibleArea:f,isCompletelyWithinViewport:i.width*i.height===f,fitsInViewportVertically:d===i.height,fitsInViewportHorizontally:h==i.width}}_canFitWithFlexibleDimensions(t,e,n){if(this._hasFlexibleDimensions){const r=n.bottom-e.y,i=n.right-e.x,a=B(this._overlayRef.getConfig().minHeight),o=B(this._overlayRef.getConfig().minWidth),s=t.fitsInViewportHorizontally||null!=o&&o<=i;return(t.fitsInViewportVertically||null!=a&&a<=r)&&s}return!1}_pushOverlayOnScreen(t,e,n){if(this._previousPushAmount&&this._positionLocked)return{x:t.x+this._previousPushAmount.x,y:t.y+this._previousPushAmount.y};const r=Y(e),i=this._viewportRect,a=Math.max(t.x+r.width-i.width,0),o=Math.max(t.y+r.height-i.height,0),s=Math.max(i.top-n.top-t.y,0),l=Math.max(i.left-n.left-t.x,0);let c=0,u=0;return c=r.width<=i.width?l||-a:t.x<this._viewportMargin?i.left-n.left-t.x:0,u=r.height<=i.height?s||-o:t.y<this._viewportMargin?i.top-n.top-t.y:0,this._previousPushAmount={x:c,y:u},{x:t.x+c,y:t.y+u}}_applyPosition(t,e){if(this._setTransformOrigin(t),this._setOverlayElementStyles(e,t),this._setBoundingBoxStyles(e,t),t.panelClass&&this._addPanelClasses(t.panelClass),this._lastPosition=t,this._positionChanges.observers.length){const e=this._getScrollVisibility(),n=new C(t,e);this._positionChanges.next(n)}this._isInitialRender=!1}_setTransformOrigin(t){if(!this._transformOriginSelector)return;const e=this._boundingBox.querySelectorAll(this._transformOriginSelector);let n,r=t.overlayY;n=\"center\"===t.overlayX?\"center\":this._isRtl()?\"start\"===t.overlayX?\"right\":\"left\":\"start\"===t.overlayX?\"left\":\"right\";for(let i=0;i<e.length;i++)e[i].style.transformOrigin=`${n} ${r}`}_calculateBoundingBoxRect(t,e){const n=this._viewportRect,r=this._isRtl();let i,a,o,s,l,c;if(\"top\"===e.overlayY)a=t.y,i=n.height-a+this._viewportMargin;else if(\"bottom\"===e.overlayY)o=n.height-t.y+2*this._viewportMargin,i=n.height-o+this._viewportMargin;else{const e=Math.min(n.bottom-t.y+n.top,t.y),r=this._lastBoundingBoxSize.height;i=2*e,a=t.y-e,i>r&&!this._isInitialRender&&!this._growAfterOpen&&(a=t.y-r/2)}if(\"end\"===e.overlayX&&!r||\"start\"===e.overlayX&&r)c=n.width-t.x+this._viewportMargin,s=t.x-this._viewportMargin;else if(\"start\"===e.overlayX&&!r||\"end\"===e.overlayX&&r)l=t.x,s=n.right-t.x;else{const e=Math.min(n.right-t.x+n.left,t.x),r=this._lastBoundingBoxSize.width;s=2*e,l=t.x-e,s>r&&!this._isInitialRender&&!this._growAfterOpen&&(l=t.x-r/2)}return{top:a,left:l,bottom:o,right:c,width:s,height:i}}_setBoundingBoxStyles(t,e){const n=this._calculateBoundingBoxRect(t,e);this._isInitialRender||this._growAfterOpen||(n.height=Math.min(n.height,this._lastBoundingBoxSize.height),n.width=Math.min(n.width,this._lastBoundingBoxSize.width));const r={};if(this._hasExactPosition())r.top=r.left=\"0\",r.bottom=r.right=r.maxHeight=r.maxWidth=\"\",r.width=r.height=\"100%\";else{const t=this._overlayRef.getConfig().maxHeight,i=this._overlayRef.getConfig().maxWidth;r.height=Object(l.d)(n.height),r.top=Object(l.d)(n.top),r.bottom=Object(l.d)(n.bottom),r.width=Object(l.d)(n.width),r.left=Object(l.d)(n.left),r.right=Object(l.d)(n.right),r.alignItems=\"center\"===e.overlayX?\"center\":\"end\"===e.overlayX?\"flex-end\":\"flex-start\",r.justifyContent=\"center\"===e.overlayY?\"center\":\"bottom\"===e.overlayY?\"flex-end\":\"flex-start\",t&&(r.maxHeight=Object(l.d)(t)),i&&(r.maxWidth=Object(l.d)(i))}this._lastBoundingBoxSize=n,N(this._boundingBox.style,r)}_resetBoundingBoxStyles(){N(this._boundingBox.style,{top:\"0\",left:\"0\",right:\"0\",bottom:\"0\",height:\"\",width:\"\",alignItems:\"\",justifyContent:\"\"})}_resetOverlayElementStyles(){N(this._pane.style,{top:\"\",left:\"\",bottom:\"\",right:\"\",position:\"\",transform:\"\"})}_setOverlayElementStyles(t,e){const n={},r=this._hasExactPosition(),i=this._hasFlexibleDimensions,a=this._overlayRef.getConfig();if(r){const r=this._viewportRuler.getViewportScrollPosition();N(n,this._getExactOverlayY(e,t,r)),N(n,this._getExactOverlayX(e,t,r))}else n.position=\"static\";let o=\"\",s=this._getOffset(e,\"x\"),c=this._getOffset(e,\"y\");s&&(o+=`translateX(${s}px) `),c&&(o+=`translateY(${c}px)`),n.transform=o.trim(),a.maxHeight&&(r?n.maxHeight=Object(l.d)(a.maxHeight):i&&(n.maxHeight=\"\")),a.maxWidth&&(r?n.maxWidth=Object(l.d)(a.maxWidth):i&&(n.maxWidth=\"\")),N(this._pane.style,n)}_getExactOverlayY(t,e,n){let r={top:\"\",bottom:\"\"},i=this._getOverlayPoint(e,this._overlayRect,t);this._isPushed&&(i=this._pushOverlayOnScreen(i,this._overlayRect,n));let a=this._overlayContainer.getContainerElement().getBoundingClientRect().top;return i.y-=a,\"bottom\"===t.overlayY?r.bottom=this._document.documentElement.clientHeight-(i.y+this._overlayRect.height)+\"px\":r.top=Object(l.d)(i.y),r}_getExactOverlayX(t,e,n){let r,i={left:\"\",right:\"\"},a=this._getOverlayPoint(e,this._overlayRect,t);return this._isPushed&&(a=this._pushOverlayOnScreen(a,this._overlayRect,n)),r=this._isRtl()?\"end\"===t.overlayX?\"left\":\"right\":\"end\"===t.overlayX?\"right\":\"left\",\"right\"===r?i.right=this._document.documentElement.clientWidth-(a.x+this._overlayRect.width)+\"px\":i.left=Object(l.d)(a.x),i}_getScrollVisibility(){const t=this._getOriginRect(),e=this._pane.getBoundingClientRect(),n=this._scrollables.map(t=>t.getElementRef().nativeElement.getBoundingClientRect());return{isOriginClipped:M(t,n),isOriginOutsideView:k(t,n),isOverlayClipped:M(e,n),isOverlayOutsideView:k(e,n)}}_subtractOverflows(t,...e){return e.reduce((t,e)=>t-Math.max(e,0),t)}_getNarrowedViewportRect(){const t=this._document.documentElement.clientWidth,e=this._document.documentElement.clientHeight,n=this._viewportRuler.getViewportScrollPosition();return{top:n.top+this._viewportMargin,left:n.left+this._viewportMargin,right:n.left+t-this._viewportMargin,bottom:n.top+e-this._viewportMargin,width:t-2*this._viewportMargin,height:e-2*this._viewportMargin}}_isRtl(){return\"rtl\"===this._overlayRef.getDirection()}_hasExactPosition(){return!this._hasFlexibleDimensions||this._isPushed}_getOffset(t,e){return\"x\"===e?null==t.offsetX?this._offsetX:t.offsetX:null==t.offsetY?this._offsetY:t.offsetY}_validatePositions(){}_addPanelClasses(t){this._pane&&Object(l.b)(t).forEach(t=>{\"\"!==t&&-1===this._appliedPanelClasses.indexOf(t)&&(this._appliedPanelClasses.push(t),this._pane.classList.add(t))})}_clearPanelClasses(){this._pane&&(this._appliedPanelClasses.forEach(t=>{this._pane.classList.remove(t)}),this._appliedPanelClasses=[])}_getOriginRect(){const t=this._origin;if(t instanceof i.p)return t.nativeElement.getBoundingClientRect();if(t instanceof Element)return t.getBoundingClientRect();const e=t.width||0,n=t.height||0;return{top:t.y,bottom:t.y+n,left:t.x,right:t.x+e,height:n,width:e}}}function N(t,e){for(let n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}function B(t){if(\"number\"!=typeof t&&null!=t){const[e,n]=t.split(j);return n&&\"px\"!==n?null:parseFloat(e)}return t||null}function Y(t){return{top:Math.floor(t.top),right:Math.floor(t.right),bottom:Math.floor(t.bottom),left:Math.floor(t.left),width:Math.floor(t.width),height:Math.floor(t.height)}}class H{constructor(t,e,n,r,i,a,o){this._preferredPositions=[],this._positionStrategy=new F(n,r,i,a,o).withFlexibleDimensions(!1).withPush(!1).withViewportMargin(0),this.withFallbackPosition(t,e),this.onPositionChange=this._positionStrategy.positionChanges}get positions(){return this._preferredPositions}attach(t){this._overlayRef=t,this._positionStrategy.attach(t),this._direction&&(t.setDirection(this._direction),this._direction=null)}dispose(){this._positionStrategy.dispose()}detach(){this._positionStrategy.detach()}apply(){this._positionStrategy.apply()}recalculateLastPosition(){this._positionStrategy.reapplyLastPosition()}withScrollableContainers(t){this._positionStrategy.withScrollableContainers(t)}withFallbackPosition(t,e,n,r){const i=new L(t,e,n,r);return this._preferredPositions.push(i),this._positionStrategy.withPositions(this._preferredPositions),this}withDirection(t){return this._overlayRef?this._overlayRef.setDirection(t):this._direction=t,this}withOffsetX(t){return this._positionStrategy.withDefaultOffsetX(t),this}withOffsetY(t){return this._positionStrategy.withDefaultOffsetY(t),this}withLockedPosition(t){return this._positionStrategy.withLockedPosition(t),this}withPositions(t){return this._preferredPositions=t.slice(),this._positionStrategy.withPositions(this._preferredPositions),this}setOrigin(t){return this._positionStrategy.setOrigin(t),this}}const V=\"cdk-global-overlay-wrapper\";class U{constructor(){this._cssPosition=\"static\",this._topOffset=\"\",this._bottomOffset=\"\",this._leftOffset=\"\",this._rightOffset=\"\",this._alignItems=\"\",this._justifyContent=\"\",this._width=\"\",this._height=\"\"}attach(t){const e=t.getConfig();this._overlayRef=t,this._width&&!e.width&&t.updateSize({width:this._width}),this._height&&!e.height&&t.updateSize({height:this._height}),t.hostElement.classList.add(V),this._isDisposed=!1}top(t=\"\"){return this._bottomOffset=\"\",this._topOffset=t,this._alignItems=\"flex-start\",this}left(t=\"\"){return this._rightOffset=\"\",this._leftOffset=t,this._justifyContent=\"flex-start\",this}bottom(t=\"\"){return this._topOffset=\"\",this._bottomOffset=t,this._alignItems=\"flex-end\",this}right(t=\"\"){return this._leftOffset=\"\",this._rightOffset=t,this._justifyContent=\"flex-end\",this}width(t=\"\"){return this._overlayRef?this._overlayRef.updateSize({width:t}):this._width=t,this}height(t=\"\"){return this._overlayRef?this._overlayRef.updateSize({height:t}):this._height=t,this}centerHorizontally(t=\"\"){return this.left(t),this._justifyContent=\"center\",this}centerVertically(t=\"\"){return this.top(t),this._alignItems=\"center\",this}apply(){if(!this._overlayRef||!this._overlayRef.hasAttached())return;const t=this._overlayRef.overlayElement.style,e=this._overlayRef.hostElement.style,n=this._overlayRef.getConfig(),{width:r,height:i,maxWidth:a,maxHeight:o}=n,s=!(\"100%\"!==r&&\"100vw\"!==r||a&&\"100%\"!==a&&\"100vw\"!==a),l=!(\"100%\"!==i&&\"100vh\"!==i||o&&\"100%\"!==o&&\"100vh\"!==o);t.position=this._cssPosition,t.marginLeft=s?\"0\":this._leftOffset,t.marginTop=l?\"0\":this._topOffset,t.marginBottom=this._bottomOffset,t.marginRight=this._rightOffset,s?e.justifyContent=\"flex-start\":\"center\"===this._justifyContent?e.justifyContent=\"center\":\"rtl\"===this._overlayRef.getConfig().direction?\"flex-start\"===this._justifyContent?e.justifyContent=\"flex-end\":\"flex-end\"===this._justifyContent&&(e.justifyContent=\"flex-start\"):e.justifyContent=this._justifyContent,e.alignItems=l?\"flex-start\":this._alignItems}dispose(){if(this._isDisposed||!this._overlayRef)return;const t=this._overlayRef.overlayElement.style,e=this._overlayRef.hostElement,n=e.style;e.classList.remove(V),n.justifyContent=n.alignItems=t.marginTop=t.marginBottom=t.marginLeft=t.marginRight=t.position=\"\",this._overlayRef=null,this._isDisposed=!0}}let W=(()=>{class t{constructor(t,e,n,r){this._viewportRuler=t,this._document=e,this._platform=n,this._overlayContainer=r}global(){return new U}connectedTo(t,e,n){return new H(e,n,t,this._viewportRuler,this._document,this._platform,this._overlayContainer)}flexibleConnectedTo(t){return new F(t,this._viewportRuler,this._document,this._platform,this._overlayContainer)}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(r.e),i.hc(s.d),i.hc(a.a),i.hc(P))},t.\\u0275prov=Object(i.Tb)({factory:function(){return new t(Object(i.hc)(r.e),Object(i.hc)(s.d),Object(i.hc)(a.a),Object(i.hc)(P))},token:t,providedIn:\"root\"}),t})(),q=0,G=(()=>{class t{constructor(t,e,n,r,i,a,o,s,l,c,u){this.scrollStrategies=t,this._overlayContainer=e,this._componentFactoryResolver=n,this._positionBuilder=r,this._keyboardDispatcher=i,this._injector=a,this._ngZone=o,this._document=s,this._directionality=l,this._location=c,this._outsideClickDispatcher=u}create(t){const e=this._createHostElement(),n=this._createPaneElement(e),r=this._createPortalOutlet(n),i=new A(t);return i.direction=i.direction||this._directionality.value,new R(r,e,n,i,this._ngZone,this._keyboardDispatcher,this._document,this._location,this._outsideClickDispatcher)}position(){return this._positionBuilder}_createPaneElement(t){const e=this._document.createElement(\"div\");return e.id=\"cdk-overlay-\"+q++,e.classList.add(\"cdk-overlay-pane\"),t.appendChild(e),e}_createHostElement(){const t=this._document.createElement(\"div\");return this._overlayContainer.getContainerElement().appendChild(t),t}_createPortalOutlet(t){return this._appRef||(this._appRef=this._injector.get(i.g)),new c.e(t,this._componentFactoryResolver,this._appRef,this._injector,this._document)}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(S),i.hc(P),i.hc(i.m),i.hc(W),i.hc(O),i.hc(i.x),i.hc(i.H),i.hc(s.d),i.hc(o.b),i.hc(s.j),i.hc(D))},t.\\u0275prov=i.Tb({token:t,factory:t.\\u0275fac}),t})();const X=[{originX:\"start\",originY:\"bottom\",overlayX:\"start\",overlayY:\"top\"},{originX:\"start\",originY:\"top\",overlayX:\"start\",overlayY:\"bottom\"},{originX:\"end\",originY:\"top\",overlayX:\"end\",overlayY:\"bottom\"},{originX:\"end\",originY:\"bottom\",overlayX:\"end\",overlayY:\"top\"}],Z=new i.w(\"cdk-connected-overlay-scroll-strategy\");let J=(()=>{class t{constructor(t){this.elementRef=t}}return t.\\u0275fac=function(e){return new(e||t)(i.Xb(i.p))},t.\\u0275dir=i.Sb({type:t,selectors:[[\"\",\"cdk-overlay-origin\",\"\"],[\"\",\"overlay-origin\",\"\"],[\"\",\"cdkOverlayOrigin\",\"\"]],exportAs:[\"cdkOverlayOrigin\"]}),t})(),K=(()=>{class t{constructor(t,e,n,r,a){this._overlay=t,this._dir=a,this._hasBackdrop=!1,this._lockPosition=!1,this._growAfterOpen=!1,this._flexibleDimensions=!1,this._push=!1,this._backdropSubscription=h.a.EMPTY,this._attachSubscription=h.a.EMPTY,this._detachSubscription=h.a.EMPTY,this._positionSubscription=h.a.EMPTY,this.viewportMargin=0,this.open=!1,this.disableClose=!1,this.backdropClick=new i.s,this.positionChange=new i.s,this.attach=new i.s,this.detach=new i.s,this.overlayKeydown=new i.s,this.overlayOutsideClick=new i.s,this._templatePortal=new c.g(e,n),this._scrollStrategyFactory=r,this.scrollStrategy=this._scrollStrategyFactory()}get offsetX(){return this._offsetX}set offsetX(t){this._offsetX=t,this._position&&this._updatePositionStrategy(this._position)}get offsetY(){return this._offsetY}set offsetY(t){this._offsetY=t,this._position&&this._updatePositionStrategy(this._position)}get hasBackdrop(){return this._hasBackdrop}set hasBackdrop(t){this._hasBackdrop=Object(l.c)(t)}get lockPosition(){return this._lockPosition}set lockPosition(t){this._lockPosition=Object(l.c)(t)}get flexibleDimensions(){return this._flexibleDimensions}set flexibleDimensions(t){this._flexibleDimensions=Object(l.c)(t)}get growAfterOpen(){return this._growAfterOpen}set growAfterOpen(t){this._growAfterOpen=Object(l.c)(t)}get push(){return this._push}set push(t){this._push=Object(l.c)(t)}get overlayRef(){return this._overlayRef}get dir(){return this._dir?this._dir.value:\"ltr\"}ngOnDestroy(){this._attachSubscription.unsubscribe(),this._detachSubscription.unsubscribe(),this._backdropSubscription.unsubscribe(),this._positionSubscription.unsubscribe(),this._overlayRef&&this._overlayRef.dispose()}ngOnChanges(t){this._position&&(this._updatePositionStrategy(this._position),this._overlayRef.updateSize({width:this.width,minWidth:this.minWidth,height:this.height,minHeight:this.minHeight}),t.origin&&this.open&&this._position.apply()),t.open&&(this.open?this._attachOverlay():this._detachOverlay())}_createOverlay(){this.positions&&this.positions.length||(this.positions=X);const t=this._overlayRef=this._overlay.create(this._buildConfig());this._attachSubscription=t.attachments().subscribe(()=>this.attach.emit()),this._detachSubscription=t.detachments().subscribe(()=>this.detach.emit()),t.keydownEvents().subscribe(t=>{this.overlayKeydown.next(t),t.keyCode!==v.f||this.disableClose||Object(v.r)(t)||(t.preventDefault(),this._detachOverlay())}),this._overlayRef.outsidePointerEvents().subscribe(t=>{this.overlayOutsideClick.next(t)})}_buildConfig(){const t=this._position=this.positionStrategy||this._createPositionStrategy(),e=new A({direction:this._dir,positionStrategy:t,scrollStrategy:this.scrollStrategy,hasBackdrop:this.hasBackdrop});return(this.width||0===this.width)&&(e.width=this.width),(this.height||0===this.height)&&(e.height=this.height),(this.minWidth||0===this.minWidth)&&(e.minWidth=this.minWidth),(this.minHeight||0===this.minHeight)&&(e.minHeight=this.minHeight),this.backdropClass&&(e.backdropClass=this.backdropClass),this.panelClass&&(e.panelClass=this.panelClass),e}_updatePositionStrategy(t){const e=this.positions.map(t=>({originX:t.originX,originY:t.originY,overlayX:t.overlayX,overlayY:t.overlayY,offsetX:t.offsetX||this.offsetX,offsetY:t.offsetY||this.offsetY,panelClass:t.panelClass||void 0}));return t.setOrigin(this.origin.elementRef).withPositions(e).withFlexibleDimensions(this.flexibleDimensions).withPush(this.push).withGrowAfterOpen(this.growAfterOpen).withViewportMargin(this.viewportMargin).withLockedPosition(this.lockPosition).withTransformOriginOn(this.transformOriginSelector)}_createPositionStrategy(){const t=this._overlay.position().flexibleConnectedTo(this.origin.elementRef);return this._updatePositionStrategy(t),t}_attachOverlay(){this._overlayRef?this._overlayRef.getConfig().hasBackdrop=this.hasBackdrop:this._createOverlay(),this._overlayRef.hasAttached()||this._overlayRef.attach(this._templatePortal),this.hasBackdrop?this._backdropSubscription=this._overlayRef.backdropClick().subscribe(t=>{this.backdropClick.emit(t)}):this._backdropSubscription.unsubscribe(),this._positionSubscription.unsubscribe(),this.positionChange.observers.length>0&&(this._positionSubscription=this._position.positionChanges.pipe(function(t,e=!1){return n=>n.lift(new g(t,e))}(()=>this.positionChange.observers.length>0)).subscribe(t=>{this.positionChange.emit(t),0===this.positionChange.observers.length&&this._positionSubscription.unsubscribe()}))}_detachOverlay(){this._overlayRef&&this._overlayRef.detach(),this._backdropSubscription.unsubscribe(),this._positionSubscription.unsubscribe()}}return t.\\u0275fac=function(e){return new(e||t)(i.Xb(G),i.Xb(i.V),i.Xb(i.Z),i.Xb(Z),i.Xb(o.b,8))},t.\\u0275dir=i.Sb({type:t,selectors:[[\"\",\"cdk-connected-overlay\",\"\"],[\"\",\"connected-overlay\",\"\"],[\"\",\"cdkConnectedOverlay\",\"\"]],inputs:{viewportMargin:[\"cdkConnectedOverlayViewportMargin\",\"viewportMargin\"],open:[\"cdkConnectedOverlayOpen\",\"open\"],disableClose:[\"cdkConnectedOverlayDisableClose\",\"disableClose\"],scrollStrategy:[\"cdkConnectedOverlayScrollStrategy\",\"scrollStrategy\"],offsetX:[\"cdkConnectedOverlayOffsetX\",\"offsetX\"],offsetY:[\"cdkConnectedOverlayOffsetY\",\"offsetY\"],hasBackdrop:[\"cdkConnectedOverlayHasBackdrop\",\"hasBackdrop\"],lockPosition:[\"cdkConnectedOverlayLockPosition\",\"lockPosition\"],flexibleDimensions:[\"cdkConnectedOverlayFlexibleDimensions\",\"flexibleDimensions\"],growAfterOpen:[\"cdkConnectedOverlayGrowAfterOpen\",\"growAfterOpen\"],push:[\"cdkConnectedOverlayPush\",\"push\"],positions:[\"cdkConnectedOverlayPositions\",\"positions\"],origin:[\"cdkConnectedOverlayOrigin\",\"origin\"],positionStrategy:[\"cdkConnectedOverlayPositionStrategy\",\"positionStrategy\"],width:[\"cdkConnectedOverlayWidth\",\"width\"],height:[\"cdkConnectedOverlayHeight\",\"height\"],minWidth:[\"cdkConnectedOverlayMinWidth\",\"minWidth\"],minHeight:[\"cdkConnectedOverlayMinHeight\",\"minHeight\"],backdropClass:[\"cdkConnectedOverlayBackdropClass\",\"backdropClass\"],panelClass:[\"cdkConnectedOverlayPanelClass\",\"panelClass\"],transformOriginSelector:[\"cdkConnectedOverlayTransformOriginOn\",\"transformOriginSelector\"]},outputs:{backdropClick:\"backdropClick\",positionChange:\"positionChange\",attach:\"attach\",detach:\"detach\",overlayKeydown:\"overlayKeydown\",overlayOutsideClick:\"overlayOutsideClick\"},exportAs:[\"cdkConnectedOverlay\"],features:[i.Jb]}),t})();const $={provide:Z,deps:[G],useFactory:function(t){return()=>t.scrollStrategies.reposition()}};let Q=(()=>{class t{}return t.\\u0275mod=i.Vb({type:t}),t.\\u0275inj=i.Ub({factory:function(e){return new(e||t)},providers:[G,$],imports:[[o.a,c.f,r.d],r.d]}),t})()},raLr:function(t,e,n){!function(t){\"use strict\";function e(t,e,n){return\"m\"===n?e?\"\\u0445\\u0432\\u0438\\u043b\\u0438\\u043d\\u0430\":\"\\u0445\\u0432\\u0438\\u043b\\u0438\\u043d\\u0443\":\"h\"===n?e?\"\\u0433\\u043e\\u0434\\u0438\\u043d\\u0430\":\"\\u0433\\u043e\\u0434\\u0438\\u043d\\u0443\":t+\" \"+(r=+t,i={ss:e?\"\\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u0430_\\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u0438_\\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\":\"\\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u0443_\\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\\u0438_\\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\",mm:e?\"\\u0445\\u0432\\u0438\\u043b\\u0438\\u043d\\u0430_\\u0445\\u0432\\u0438\\u043b\\u0438\\u043d\\u0438_\\u0445\\u0432\\u0438\\u043b\\u0438\\u043d\":\"\\u0445\\u0432\\u0438\\u043b\\u0438\\u043d\\u0443_\\u0445\\u0432\\u0438\\u043b\\u0438\\u043d\\u0438_\\u0445\\u0432\\u0438\\u043b\\u0438\\u043d\",hh:e?\"\\u0433\\u043e\\u0434\\u0438\\u043d\\u0430_\\u0433\\u043e\\u0434\\u0438\\u043d\\u0438_\\u0433\\u043e\\u0434\\u0438\\u043d\":\"\\u0433\\u043e\\u0434\\u0438\\u043d\\u0443_\\u0433\\u043e\\u0434\\u0438\\u043d\\u0438_\\u0433\\u043e\\u0434\\u0438\\u043d\",dd:\"\\u0434\\u0435\\u043d\\u044c_\\u0434\\u043d\\u0456_\\u0434\\u043d\\u0456\\u0432\",MM:\"\\u043c\\u0456\\u0441\\u044f\\u0446\\u044c_\\u043c\\u0456\\u0441\\u044f\\u0446\\u0456_\\u043c\\u0456\\u0441\\u044f\\u0446\\u0456\\u0432\",yy:\"\\u0440\\u0456\\u043a_\\u0440\\u043e\\u043a\\u0438_\\u0440\\u043e\\u043a\\u0456\\u0432\"}[n].split(\"_\"),r%10==1&&r%100!=11?i[0]:r%10>=2&&r%10<=4&&(r%100<10||r%100>=20)?i[1]:i[2]);var r,i}function n(t){return function(){return t+\"\\u043e\"+(11===this.hours()?\"\\u0431\":\"\")+\"] LT\"}}t.defineLocale(\"uk\",{months:{format:\"\\u0441\\u0456\\u0447\\u043d\\u044f_\\u043b\\u044e\\u0442\\u043e\\u0433\\u043e_\\u0431\\u0435\\u0440\\u0435\\u0437\\u043d\\u044f_\\u043a\\u0432\\u0456\\u0442\\u043d\\u044f_\\u0442\\u0440\\u0430\\u0432\\u043d\\u044f_\\u0447\\u0435\\u0440\\u0432\\u043d\\u044f_\\u043b\\u0438\\u043f\\u043d\\u044f_\\u0441\\u0435\\u0440\\u043f\\u043d\\u044f_\\u0432\\u0435\\u0440\\u0435\\u0441\\u043d\\u044f_\\u0436\\u043e\\u0432\\u0442\\u043d\\u044f_\\u043b\\u0438\\u0441\\u0442\\u043e\\u043f\\u0430\\u0434\\u0430_\\u0433\\u0440\\u0443\\u0434\\u043d\\u044f\".split(\"_\"),standalone:\"\\u0441\\u0456\\u0447\\u0435\\u043d\\u044c_\\u043b\\u044e\\u0442\\u0438\\u0439_\\u0431\\u0435\\u0440\\u0435\\u0437\\u0435\\u043d\\u044c_\\u043a\\u0432\\u0456\\u0442\\u0435\\u043d\\u044c_\\u0442\\u0440\\u0430\\u0432\\u0435\\u043d\\u044c_\\u0447\\u0435\\u0440\\u0432\\u0435\\u043d\\u044c_\\u043b\\u0438\\u043f\\u0435\\u043d\\u044c_\\u0441\\u0435\\u0440\\u043f\\u0435\\u043d\\u044c_\\u0432\\u0435\\u0440\\u0435\\u0441\\u0435\\u043d\\u044c_\\u0436\\u043e\\u0432\\u0442\\u0435\\u043d\\u044c_\\u043b\\u0438\\u0441\\u0442\\u043e\\u043f\\u0430\\u0434_\\u0433\\u0440\\u0443\\u0434\\u0435\\u043d\\u044c\".split(\"_\")},monthsShort:\"\\u0441\\u0456\\u0447_\\u043b\\u044e\\u0442_\\u0431\\u0435\\u0440_\\u043a\\u0432\\u0456\\u0442_\\u0442\\u0440\\u0430\\u0432_\\u0447\\u0435\\u0440\\u0432_\\u043b\\u0438\\u043f_\\u0441\\u0435\\u0440\\u043f_\\u0432\\u0435\\u0440_\\u0436\\u043e\\u0432\\u0442_\\u043b\\u0438\\u0441\\u0442_\\u0433\\u0440\\u0443\\u0434\".split(\"_\"),weekdays:function(t,e){var n={nominative:\"\\u043d\\u0435\\u0434\\u0456\\u043b\\u044f_\\u043f\\u043e\\u043d\\u0435\\u0434\\u0456\\u043b\\u043e\\u043a_\\u0432\\u0456\\u0432\\u0442\\u043e\\u0440\\u043e\\u043a_\\u0441\\u0435\\u0440\\u0435\\u0434\\u0430_\\u0447\\u0435\\u0442\\u0432\\u0435\\u0440_\\u043f\\u2019\\u044f\\u0442\\u043d\\u0438\\u0446\\u044f_\\u0441\\u0443\\u0431\\u043e\\u0442\\u0430\".split(\"_\"),accusative:\"\\u043d\\u0435\\u0434\\u0456\\u043b\\u044e_\\u043f\\u043e\\u043d\\u0435\\u0434\\u0456\\u043b\\u043e\\u043a_\\u0432\\u0456\\u0432\\u0442\\u043e\\u0440\\u043e\\u043a_\\u0441\\u0435\\u0440\\u0435\\u0434\\u0443_\\u0447\\u0435\\u0442\\u0432\\u0435\\u0440_\\u043f\\u2019\\u044f\\u0442\\u043d\\u0438\\u0446\\u044e_\\u0441\\u0443\\u0431\\u043e\\u0442\\u0443\".split(\"_\"),genitive:\"\\u043d\\u0435\\u0434\\u0456\\u043b\\u0456_\\u043f\\u043e\\u043d\\u0435\\u0434\\u0456\\u043b\\u043a\\u0430_\\u0432\\u0456\\u0432\\u0442\\u043e\\u0440\\u043a\\u0430_\\u0441\\u0435\\u0440\\u0435\\u0434\\u0438_\\u0447\\u0435\\u0442\\u0432\\u0435\\u0440\\u0433\\u0430_\\u043f\\u2019\\u044f\\u0442\\u043d\\u0438\\u0446\\u0456_\\u0441\\u0443\\u0431\\u043e\\u0442\\u0438\".split(\"_\")};return!0===t?n.nominative.slice(1,7).concat(n.nominative.slice(0,1)):t?n[/(\\[[\\u0412\\u0432\\u0423\\u0443]\\]) ?dddd/.test(e)?\"accusative\":/\\[?(?:\\u043c\\u0438\\u043d\\u0443\\u043b\\u043e\\u0457|\\u043d\\u0430\\u0441\\u0442\\u0443\\u043f\\u043d\\u043e\\u0457)? ?\\] ?dddd/.test(e)?\"genitive\":\"nominative\"][t.day()]:n.nominative},weekdaysShort:\"\\u043d\\u0434_\\u043f\\u043d_\\u0432\\u0442_\\u0441\\u0440_\\u0447\\u0442_\\u043f\\u0442_\\u0441\\u0431\".split(\"_\"),weekdaysMin:\"\\u043d\\u0434_\\u043f\\u043d_\\u0432\\u0442_\\u0441\\u0440_\\u0447\\u0442_\\u043f\\u0442_\\u0441\\u0431\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY \\u0440.\",LLL:\"D MMMM YYYY \\u0440., HH:mm\",LLLL:\"dddd, D MMMM YYYY \\u0440., HH:mm\"},calendar:{sameDay:n(\"[\\u0421\\u044c\\u043e\\u0433\\u043e\\u0434\\u043d\\u0456 \"),nextDay:n(\"[\\u0417\\u0430\\u0432\\u0442\\u0440\\u0430 \"),lastDay:n(\"[\\u0412\\u0447\\u043e\\u0440\\u0430 \"),nextWeek:n(\"[\\u0423] dddd [\"),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return n(\"[\\u041c\\u0438\\u043d\\u0443\\u043b\\u043e\\u0457] dddd [\").call(this);case 1:case 2:case 4:return n(\"[\\u041c\\u0438\\u043d\\u0443\\u043b\\u043e\\u0433\\u043e] dddd [\").call(this)}},sameElse:\"L\"},relativeTime:{future:\"\\u0437\\u0430 %s\",past:\"%s \\u0442\\u043e\\u043c\\u0443\",s:\"\\u0434\\u0435\\u043a\\u0456\\u043b\\u044c\\u043a\\u0430 \\u0441\\u0435\\u043a\\u0443\\u043d\\u0434\",ss:e,m:e,mm:e,h:\"\\u0433\\u043e\\u0434\\u0438\\u043d\\u0443\",hh:e,d:\"\\u0434\\u0435\\u043d\\u044c\",dd:e,M:\"\\u043c\\u0456\\u0441\\u044f\\u0446\\u044c\",MM:e,y:\"\\u0440\\u0456\\u043a\",yy:e},meridiemParse:/\\u043d\\u043e\\u0447\\u0456|\\u0440\\u0430\\u043d\\u043a\\u0443|\\u0434\\u043d\\u044f|\\u0432\\u0435\\u0447\\u043e\\u0440\\u0430/,isPM:function(t){return/^(\\u0434\\u043d\\u044f|\\u0432\\u0435\\u0447\\u043e\\u0440\\u0430)$/.test(t)},meridiem:function(t,e,n){return t<4?\"\\u043d\\u043e\\u0447\\u0456\":t<12?\"\\u0440\\u0430\\u043d\\u043a\\u0443\":t<17?\"\\u0434\\u043d\\u044f\":\"\\u0432\\u0435\\u0447\\u043e\\u0440\\u0430\"},dayOfMonthOrdinalParse:/\\d{1,2}-(\\u0439|\\u0433\\u043e)/,ordinal:function(t,e){switch(e){case\"M\":case\"d\":case\"DDD\":case\"w\":case\"W\":return t+\"-\\u0439\";case\"D\":return t+\"-\\u0433\\u043e\";default:return t}},week:{dow:1,doy:7}})}(n(\"wd/R\"))},\"s+uk\":function(t,e,n){!function(t){\"use strict\";function e(t,e,n,r){var i={m:[\"eine Minute\",\"einer Minute\"],h:[\"eine Stunde\",\"einer Stunde\"],d:[\"ein Tag\",\"einem Tag\"],dd:[t+\" Tage\",t+\" Tagen\"],w:[\"eine Woche\",\"einer Woche\"],M:[\"ein Monat\",\"einem Monat\"],MM:[t+\" Monate\",t+\" Monaten\"],y:[\"ein Jahr\",\"einem Jahr\"],yy:[t+\" Jahre\",t+\" Jahren\"]};return e?i[n][0]:i[n][1]}t.defineLocale(\"de-at\",{months:\"J\\xe4nner_Februar_M\\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"J\\xe4n._Feb._M\\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\".split(\"_\"),weekdaysShort:\"So._Mo._Di._Mi._Do._Fr._Sa.\".split(\"_\"),weekdaysMin:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd, D. MMMM YYYY HH:mm\"},calendar:{sameDay:\"[heute um] LT [Uhr]\",sameElse:\"L\",nextDay:\"[morgen um] LT [Uhr]\",nextWeek:\"dddd [um] LT [Uhr]\",lastDay:\"[gestern um] LT [Uhr]\",lastWeek:\"[letzten] dddd [um] LT [Uhr]\"},relativeTime:{future:\"in %s\",past:\"vor %s\",s:\"ein paar Sekunden\",ss:\"%d Sekunden\",m:e,mm:\"%d Minuten\",h:e,hh:\"%d Stunden\",d:e,dd:e,w:e,ww:\"%d Wochen\",M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},sIil:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return a}));var r=n(\"fXoL\"),i=n(\"tyNb\");let a=(()=>{class t{constructor(t){this.router=t}redirectTo(t,e){t&&this.router.navigate(e?[t,e]:[t])}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(i.g))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac,providedIn:\"root\"}),t})()},sVev:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return r}));const r=(()=>{function t(){return Error.call(this),this.message=\"no elements in sequence\",this.name=\"EmptyError\",this}return t.prototype=Object.create(Error.prototype),t})()},sp3z:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"lo\",{months:\"\\u0ea1\\u0eb1\\u0e87\\u0e81\\u0ead\\u0e99_\\u0e81\\u0eb8\\u0ea1\\u0e9e\\u0eb2_\\u0ea1\\u0eb5\\u0e99\\u0eb2_\\u0ec0\\u0ea1\\u0eaa\\u0eb2_\\u0e9e\\u0eb6\\u0e94\\u0eaa\\u0eb0\\u0e9e\\u0eb2_\\u0ea1\\u0eb4\\u0e96\\u0eb8\\u0e99\\u0eb2_\\u0e81\\u0ecd\\u0ea5\\u0eb0\\u0e81\\u0ebb\\u0e94_\\u0eaa\\u0eb4\\u0e87\\u0eab\\u0eb2_\\u0e81\\u0eb1\\u0e99\\u0e8d\\u0eb2_\\u0e95\\u0eb8\\u0ea5\\u0eb2_\\u0e9e\\u0eb0\\u0e88\\u0eb4\\u0e81_\\u0e97\\u0eb1\\u0e99\\u0ea7\\u0eb2\".split(\"_\"),monthsShort:\"\\u0ea1\\u0eb1\\u0e87\\u0e81\\u0ead\\u0e99_\\u0e81\\u0eb8\\u0ea1\\u0e9e\\u0eb2_\\u0ea1\\u0eb5\\u0e99\\u0eb2_\\u0ec0\\u0ea1\\u0eaa\\u0eb2_\\u0e9e\\u0eb6\\u0e94\\u0eaa\\u0eb0\\u0e9e\\u0eb2_\\u0ea1\\u0eb4\\u0e96\\u0eb8\\u0e99\\u0eb2_\\u0e81\\u0ecd\\u0ea5\\u0eb0\\u0e81\\u0ebb\\u0e94_\\u0eaa\\u0eb4\\u0e87\\u0eab\\u0eb2_\\u0e81\\u0eb1\\u0e99\\u0e8d\\u0eb2_\\u0e95\\u0eb8\\u0ea5\\u0eb2_\\u0e9e\\u0eb0\\u0e88\\u0eb4\\u0e81_\\u0e97\\u0eb1\\u0e99\\u0ea7\\u0eb2\".split(\"_\"),weekdays:\"\\u0ead\\u0eb2\\u0e97\\u0eb4\\u0e94_\\u0e88\\u0eb1\\u0e99_\\u0ead\\u0eb1\\u0e87\\u0e84\\u0eb2\\u0e99_\\u0e9e\\u0eb8\\u0e94_\\u0e9e\\u0eb0\\u0eab\\u0eb1\\u0e94_\\u0eaa\\u0eb8\\u0e81_\\u0ec0\\u0eaa\\u0ebb\\u0eb2\".split(\"_\"),weekdaysShort:\"\\u0e97\\u0eb4\\u0e94_\\u0e88\\u0eb1\\u0e99_\\u0ead\\u0eb1\\u0e87\\u0e84\\u0eb2\\u0e99_\\u0e9e\\u0eb8\\u0e94_\\u0e9e\\u0eb0\\u0eab\\u0eb1\\u0e94_\\u0eaa\\u0eb8\\u0e81_\\u0ec0\\u0eaa\\u0ebb\\u0eb2\".split(\"_\"),weekdaysMin:\"\\u0e97_\\u0e88_\\u0ead\\u0e84_\\u0e9e_\\u0e9e\\u0eab_\\u0eaa\\u0e81_\\u0eaa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"\\u0ea7\\u0eb1\\u0e99dddd D MMMM YYYY HH:mm\"},meridiemParse:/\\u0e95\\u0ead\\u0e99\\u0ec0\\u0e8a\\u0ebb\\u0ec9\\u0eb2|\\u0e95\\u0ead\\u0e99\\u0ec1\\u0ea5\\u0e87/,isPM:function(t){return\"\\u0e95\\u0ead\\u0e99\\u0ec1\\u0ea5\\u0e87\"===t},meridiem:function(t,e,n){return t<12?\"\\u0e95\\u0ead\\u0e99\\u0ec0\\u0e8a\\u0ebb\\u0ec9\\u0eb2\":\"\\u0e95\\u0ead\\u0e99\\u0ec1\\u0ea5\\u0e87\"},calendar:{sameDay:\"[\\u0ea1\\u0eb7\\u0ec9\\u0e99\\u0eb5\\u0ec9\\u0ec0\\u0ea7\\u0ea5\\u0eb2] LT\",nextDay:\"[\\u0ea1\\u0eb7\\u0ec9\\u0ead\\u0eb7\\u0ec8\\u0e99\\u0ec0\\u0ea7\\u0ea5\\u0eb2] LT\",nextWeek:\"[\\u0ea7\\u0eb1\\u0e99]dddd[\\u0edc\\u0ec9\\u0eb2\\u0ec0\\u0ea7\\u0ea5\\u0eb2] LT\",lastDay:\"[\\u0ea1\\u0eb7\\u0ec9\\u0ea7\\u0eb2\\u0e99\\u0e99\\u0eb5\\u0ec9\\u0ec0\\u0ea7\\u0ea5\\u0eb2] LT\",lastWeek:\"[\\u0ea7\\u0eb1\\u0e99]dddd[\\u0ec1\\u0ea5\\u0ec9\\u0ea7\\u0e99\\u0eb5\\u0ec9\\u0ec0\\u0ea7\\u0ea5\\u0eb2] LT\",sameElse:\"L\"},relativeTime:{future:\"\\u0ead\\u0eb5\\u0e81 %s\",past:\"%s\\u0e9c\\u0ec8\\u0eb2\\u0e99\\u0ea1\\u0eb2\",s:\"\\u0e9a\\u0ecd\\u0ec8\\u0ec0\\u0e97\\u0ebb\\u0ec8\\u0eb2\\u0ec3\\u0e94\\u0ea7\\u0eb4\\u0e99\\u0eb2\\u0e97\\u0eb5\",ss:\"%d \\u0ea7\\u0eb4\\u0e99\\u0eb2\\u0e97\\u0eb5\",m:\"1 \\u0e99\\u0eb2\\u0e97\\u0eb5\",mm:\"%d \\u0e99\\u0eb2\\u0e97\\u0eb5\",h:\"1 \\u0e8a\\u0ebb\\u0ec8\\u0ea7\\u0ec2\\u0ea1\\u0e87\",hh:\"%d \\u0e8a\\u0ebb\\u0ec8\\u0ea7\\u0ec2\\u0ea1\\u0e87\",d:\"1 \\u0ea1\\u0eb7\\u0ec9\",dd:\"%d \\u0ea1\\u0eb7\\u0ec9\",M:\"1 \\u0ec0\\u0e94\\u0eb7\\u0ead\\u0e99\",MM:\"%d \\u0ec0\\u0e94\\u0eb7\\u0ead\\u0e99\",y:\"1 \\u0e9b\\u0eb5\",yy:\"%d \\u0e9b\\u0eb5\"},dayOfMonthOrdinalParse:/(\\u0e97\\u0eb5\\u0ec8)\\d{1,2}/,ordinal:function(t){return\"\\u0e97\\u0eb5\\u0ec8\"+t}})}(n(\"wd/R\"))},\"t+mt\":function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"en-sg\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?\"th\":1===e?\"st\":2===e?\"nd\":3===e?\"rd\":\"th\")},week:{dow:1,doy:4}})}(n(\"wd/R\"))},tGlX:function(t,e,n){!function(t){\"use strict\";function e(t,e,n,r){var i={m:[\"eine Minute\",\"einer Minute\"],h:[\"eine Stunde\",\"einer Stunde\"],d:[\"ein Tag\",\"einem Tag\"],dd:[t+\" Tage\",t+\" Tagen\"],w:[\"eine Woche\",\"einer Woche\"],M:[\"ein Monat\",\"einem Monat\"],MM:[t+\" Monate\",t+\" Monaten\"],y:[\"ein Jahr\",\"einem Jahr\"],yy:[t+\" Jahre\",t+\" Jahren\"]};return e?i[n][0]:i[n][1]}t.defineLocale(\"de\",{months:\"Januar_Februar_M\\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jan._Feb._M\\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\".split(\"_\"),weekdaysShort:\"So._Mo._Di._Mi._Do._Fr._Sa.\".split(\"_\"),weekdaysMin:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd, D. MMMM YYYY HH:mm\"},calendar:{sameDay:\"[heute um] LT [Uhr]\",sameElse:\"L\",nextDay:\"[morgen um] LT [Uhr]\",nextWeek:\"dddd [um] LT [Uhr]\",lastDay:\"[gestern um] LT [Uhr]\",lastWeek:\"[letzten] dddd [um] LT [Uhr]\"},relativeTime:{future:\"in %s\",past:\"vor %s\",s:\"ein paar Sekunden\",ss:\"%d Sekunden\",m:e,mm:\"%d Minuten\",h:e,hh:\"%d Stunden\",d:e,dd:e,w:e,ww:\"%d Wochen\",M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},tT3J:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"tzm-latn\",{months:\"innayr_br\\u02e4ayr\\u02e4_mar\\u02e4s\\u02e4_ibrir_mayyw_ywnyw_ywlywz_\\u0263w\\u0161t_\\u0161wtanbir_kt\\u02e4wbr\\u02e4_nwwanbir_dwjnbir\".split(\"_\"),monthsShort:\"innayr_br\\u02e4ayr\\u02e4_mar\\u02e4s\\u02e4_ibrir_mayyw_ywnyw_ywlywz_\\u0263w\\u0161t_\\u0161wtanbir_kt\\u02e4wbr\\u02e4_nwwanbir_dwjnbir\".split(\"_\"),weekdays:\"asamas_aynas_asinas_akras_akwas_asimwas_asi\\u1e0dyas\".split(\"_\"),weekdaysShort:\"asamas_aynas_asinas_akras_akwas_asimwas_asi\\u1e0dyas\".split(\"_\"),weekdaysMin:\"asamas_aynas_asinas_akras_akwas_asimwas_asi\\u1e0dyas\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[asdkh g] LT\",nextDay:\"[aska g] LT\",nextWeek:\"dddd [g] LT\",lastDay:\"[assant g] LT\",lastWeek:\"dddd [g] LT\",sameElse:\"L\"},relativeTime:{future:\"dadkh s yan %s\",past:\"yan %s\",s:\"imik\",ss:\"%d imik\",m:\"minu\\u1e0d\",mm:\"%d minu\\u1e0d\",h:\"sa\\u025ba\",hh:\"%d tassa\\u025bin\",d:\"ass\",dd:\"%d ossan\",M:\"ayowr\",MM:\"%d iyyirn\",y:\"asgas\",yy:\"%d isgasn\"},week:{dow:6,doy:12}})}(n(\"wd/R\"))},tUCv:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"jv\",{months:\"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des\".split(\"_\"),weekdays:\"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu\".split(\"_\"),weekdaysShort:\"Min_Sen_Sel_Reb_Kem_Jem_Sep\".split(\"_\"),weekdaysMin:\"Mg_Sn_Sl_Rb_Km_Jm_Sp\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [pukul] HH.mm\",LLLL:\"dddd, D MMMM YYYY [pukul] HH.mm\"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(t,e){return 12===t&&(t=0),\"enjing\"===e?t:\"siyang\"===e?t>=11?t:t+12:\"sonten\"===e||\"ndalu\"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?\"enjing\":t<15?\"siyang\":t<19?\"sonten\":\"ndalu\"},calendar:{sameDay:\"[Dinten puniko pukul] LT\",nextDay:\"[Mbenjang pukul] LT\",nextWeek:\"dddd [pukul] LT\",lastDay:\"[Kala wingi pukul] LT\",lastWeek:\"dddd [kepengker pukul] LT\",sameElse:\"L\"},relativeTime:{future:\"wonten ing %s\",past:\"%s ingkang kepengker\",s:\"sawetawis detik\",ss:\"%d detik\",m:\"setunggal menit\",mm:\"%d menit\",h:\"setunggal jam\",hh:\"%d jam\",d:\"sedinten\",dd:\"%d dinten\",M:\"sewulan\",MM:\"%d wulan\",y:\"setaun\",yy:\"%d taun\"},week:{dow:1,doy:7}})}(n(\"wd/R\"))},tbfe:function(t,e,n){!function(t){\"use strict\";var e=\"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\".split(\"_\"),n=\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],i=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;t.defineLocale(\"es-mx\",{months:\"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\".split(\"_\"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:\"domingo_lunes_martes_mi\\xe9rcoles_jueves_viernes_s\\xe1bado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._mi\\xe9._jue._vie._s\\xe1b.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_s\\xe1\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY H:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY H:mm\"},calendar:{sameDay:function(){return\"[hoy a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextDay:function(){return\"[ma\\xf1ana a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextWeek:function(){return\"dddd [a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastDay:function(){return\"[ayer a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [pasado a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"en %s\",past:\"hace %s\",s:\"unos segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"una hora\",hh:\"%d horas\",d:\"un d\\xeda\",dd:\"%d d\\xedas\",w:\"una semana\",ww:\"%d semanas\",M:\"un mes\",MM:\"%d meses\",y:\"un a\\xf1o\",yy:\"%d a\\xf1os\"},dayOfMonthOrdinalParse:/\\d{1,2}\\xba/,ordinal:\"%d\\xba\",week:{dow:0,doy:4},invalidDate:\"Fecha inv\\xe1lida\"})}(n(\"wd/R\"))},\"tk/3\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return S})),n.d(e,\"b\",(function(){return Y}));var r=n(\"fXoL\"),i=n(\"LRne\"),a=n(\"HDdC\"),o=n(\"bOdf\"),s=n(\"pLZG\"),l=n(\"lJxs\"),c=n(\"ofXK\");class u{}class h{}class d{constructor(t){this.normalizedNames=new Map,this.lazyUpdate=null,t?this.lazyInit=\"string\"==typeof t?()=>{this.headers=new Map,t.split(\"\\n\").forEach(t=>{const e=t.indexOf(\":\");if(e>0){const n=t.slice(0,e),r=n.toLowerCase(),i=t.slice(e+1).trim();this.maybeSetNormalizedName(n,r),this.headers.has(r)?this.headers.get(r).push(i):this.headers.set(r,[i])}})}:()=>{this.headers=new Map,Object.keys(t).forEach(e=>{let n=t[e];const r=e.toLowerCase();\"string\"==typeof n&&(n=[n]),n.length>0&&(this.headers.set(r,n),this.maybeSetNormalizedName(e,r))})}:this.headers=new Map}has(t){return this.init(),this.headers.has(t.toLowerCase())}get(t){this.init();const e=this.headers.get(t.toLowerCase());return e&&e.length>0?e[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(t){return this.init(),this.headers.get(t.toLowerCase())||null}append(t,e){return this.clone({name:t,value:e,op:\"a\"})}set(t,e){return this.clone({name:t,value:e,op:\"s\"})}delete(t,e){return this.clone({name:t,value:e,op:\"d\"})}maybeSetNormalizedName(t,e){this.normalizedNames.has(e)||this.normalizedNames.set(e,t)}init(){this.lazyInit&&(this.lazyInit instanceof d?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(t=>this.applyUpdate(t)),this.lazyUpdate=null))}copyFrom(t){t.init(),Array.from(t.headers.keys()).forEach(e=>{this.headers.set(e,t.headers.get(e)),this.normalizedNames.set(e,t.normalizedNames.get(e))})}clone(t){const e=new d;return e.lazyInit=this.lazyInit&&this.lazyInit instanceof d?this.lazyInit:this,e.lazyUpdate=(this.lazyUpdate||[]).concat([t]),e}applyUpdate(t){const e=t.name.toLowerCase();switch(t.op){case\"a\":case\"s\":let n=t.value;if(\"string\"==typeof n&&(n=[n]),0===n.length)return;this.maybeSetNormalizedName(t.name,e);const r=(\"a\"===t.op?this.headers.get(e):void 0)||[];r.push(...n),this.headers.set(e,r);break;case\"d\":const i=t.value;if(i){let t=this.headers.get(e);if(!t)return;t=t.filter(t=>-1===i.indexOf(t)),0===t.length?(this.headers.delete(e),this.normalizedNames.delete(e)):this.headers.set(e,t)}else this.headers.delete(e),this.normalizedNames.delete(e)}}forEach(t){this.init(),Array.from(this.normalizedNames.keys()).forEach(e=>t(this.normalizedNames.get(e),this.headers.get(e)))}}class f{encodeKey(t){return p(t)}encodeValue(t){return p(t)}decodeKey(t){return decodeURIComponent(t)}decodeValue(t){return decodeURIComponent(t)}}function p(t){return encodeURIComponent(t).replace(/%40/gi,\"@\").replace(/%3A/gi,\":\").replace(/%24/gi,\"$\").replace(/%2C/gi,\",\").replace(/%3B/gi,\";\").replace(/%2B/gi,\"+\").replace(/%3D/gi,\"=\").replace(/%3F/gi,\"?\").replace(/%2F/gi,\"/\")}class m{constructor(t={}){if(this.updates=null,this.cloneFrom=null,this.encoder=t.encoder||new f,t.fromString){if(t.fromObject)throw new Error(\"Cannot specify both fromString and fromObject.\");this.map=function(t,e){const n=new Map;return t.length>0&&t.split(\"&\").forEach(t=>{const r=t.indexOf(\"=\"),[i,a]=-1==r?[e.decodeKey(t),\"\"]:[e.decodeKey(t.slice(0,r)),e.decodeValue(t.slice(r+1))],o=n.get(i)||[];o.push(a),n.set(i,o)}),n}(t.fromString,this.encoder)}else t.fromObject?(this.map=new Map,Object.keys(t.fromObject).forEach(e=>{const n=t.fromObject[e];this.map.set(e,Array.isArray(n)?n:[n])})):this.map=null}has(t){return this.init(),this.map.has(t)}get(t){this.init();const e=this.map.get(t);return e?e[0]:null}getAll(t){return this.init(),this.map.get(t)||null}keys(){return this.init(),Array.from(this.map.keys())}append(t,e){return this.clone({param:t,value:e,op:\"a\"})}set(t,e){return this.clone({param:t,value:e,op:\"s\"})}delete(t,e){return this.clone({param:t,value:e,op:\"d\"})}toString(){return this.init(),this.keys().map(t=>{const e=this.encoder.encodeKey(t);return this.map.get(t).map(t=>e+\"=\"+this.encoder.encodeValue(t)).join(\"&\")}).filter(t=>\"\"!==t).join(\"&\")}clone(t){const e=new m({encoder:this.encoder});return e.cloneFrom=this.cloneFrom||this,e.updates=(this.updates||[]).concat([t]),e}init(){null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(t=>this.map.set(t,this.cloneFrom.map.get(t))),this.updates.forEach(t=>{switch(t.op){case\"a\":case\"s\":const e=(\"a\"===t.op?this.map.get(t.param):void 0)||[];e.push(t.value),this.map.set(t.param,e);break;case\"d\":if(void 0===t.value){this.map.delete(t.param);break}{let e=this.map.get(t.param)||[];const n=e.indexOf(t.value);-1!==n&&e.splice(n,1),e.length>0?this.map.set(t.param,e):this.map.delete(t.param)}}}),this.cloneFrom=this.updates=null)}}function g(t){return\"undefined\"!=typeof ArrayBuffer&&t instanceof ArrayBuffer}function y(t){return\"undefined\"!=typeof Blob&&t instanceof Blob}function v(t){return\"undefined\"!=typeof FormData&&t instanceof FormData}class _{constructor(t,e,n,r){let i;if(this.url=e,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType=\"json\",this.method=t.toUpperCase(),function(t){switch(t){case\"DELETE\":case\"GET\":case\"HEAD\":case\"OPTIONS\":case\"JSONP\":return!1;default:return!0}}(this.method)||r?(this.body=void 0!==n?n:null,i=r):i=n,i&&(this.reportProgress=!!i.reportProgress,this.withCredentials=!!i.withCredentials,i.responseType&&(this.responseType=i.responseType),i.headers&&(this.headers=i.headers),i.params&&(this.params=i.params)),this.headers||(this.headers=new d),this.params){const t=this.params.toString();if(0===t.length)this.urlWithParams=e;else{const n=e.indexOf(\"?\");this.urlWithParams=e+(-1===n?\"?\":n<e.length-1?\"&\":\"\")+t}}else this.params=new m,this.urlWithParams=e}serializeBody(){return null===this.body?null:g(this.body)||y(this.body)||v(this.body)||\"string\"==typeof this.body?this.body:this.body instanceof m?this.body.toString():\"object\"==typeof this.body||\"boolean\"==typeof this.body||Array.isArray(this.body)?JSON.stringify(this.body):this.body.toString()}detectContentTypeHeader(){return null===this.body||v(this.body)?null:y(this.body)?this.body.type||null:g(this.body)?null:\"string\"==typeof this.body?\"text/plain\":this.body instanceof m?\"application/x-www-form-urlencoded;charset=UTF-8\":\"object\"==typeof this.body||\"number\"==typeof this.body||Array.isArray(this.body)?\"application/json\":null}clone(t={}){const e=t.method||this.method,n=t.url||this.url,r=t.responseType||this.responseType,i=void 0!==t.body?t.body:this.body,a=void 0!==t.withCredentials?t.withCredentials:this.withCredentials,o=void 0!==t.reportProgress?t.reportProgress:this.reportProgress;let s=t.headers||this.headers,l=t.params||this.params;return void 0!==t.setHeaders&&(s=Object.keys(t.setHeaders).reduce((e,n)=>e.set(n,t.setHeaders[n]),s)),t.setParams&&(l=Object.keys(t.setParams).reduce((e,n)=>e.set(n,t.setParams[n]),l)),new _(e,n,i,{params:l,headers:s,reportProgress:o,responseType:r,withCredentials:a})}}var b=function(t){return t[t.Sent=0]=\"Sent\",t[t.UploadProgress=1]=\"UploadProgress\",t[t.ResponseHeader=2]=\"ResponseHeader\",t[t.DownloadProgress=3]=\"DownloadProgress\",t[t.Response=4]=\"Response\",t[t.User=5]=\"User\",t}({});class x{constructor(t,e=200,n=\"OK\"){this.headers=t.headers||new d,this.status=void 0!==t.status?t.status:e,this.statusText=t.statusText||n,this.url=t.url||null,this.ok=this.status>=200&&this.status<300}}class w extends x{constructor(t={}){super(t),this.type=b.ResponseHeader}clone(t={}){return new w({headers:t.headers||this.headers,status:void 0!==t.status?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0})}}class k extends x{constructor(t={}){super(t),this.type=b.Response,this.body=void 0!==t.body?t.body:null}clone(t={}){return new k({body:void 0!==t.body?t.body:this.body,headers:t.headers||this.headers,status:void 0!==t.status?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0})}}class M extends x{constructor(t){super(t,0,\"Unknown Error\"),this.name=\"HttpErrorResponse\",this.ok=!1,this.message=this.status>=200&&this.status<300?\"Http failure during parsing for \"+(t.url||\"(unknown url)\"):`Http failure response for ${t.url||\"(unknown url)\"}: ${t.status} ${t.statusText}`,this.error=t.error||null}}function T(t,e){return{body:e,headers:t.headers,observe:t.observe,params:t.params,reportProgress:t.reportProgress,responseType:t.responseType,withCredentials:t.withCredentials}}let S=(()=>{class t{constructor(t){this.handler=t}request(t,e,n={}){let r;if(t instanceof _)r=t;else{let i=void 0;i=n.headers instanceof d?n.headers:new d(n.headers);let a=void 0;n.params&&(a=n.params instanceof m?n.params:new m({fromObject:n.params})),r=new _(t,e,void 0!==n.body?n.body:null,{headers:i,params:a,reportProgress:n.reportProgress,responseType:n.responseType||\"json\",withCredentials:n.withCredentials})}const a=Object(i.a)(r).pipe(Object(o.a)(t=>this.handler.handle(t)));if(t instanceof _||\"events\"===n.observe)return a;const c=a.pipe(Object(s.a)(t=>t instanceof k));switch(n.observe||\"body\"){case\"body\":switch(r.responseType){case\"arraybuffer\":return c.pipe(Object(l.a)(t=>{if(null!==t.body&&!(t.body instanceof ArrayBuffer))throw new Error(\"Response is not an ArrayBuffer.\");return t.body}));case\"blob\":return c.pipe(Object(l.a)(t=>{if(null!==t.body&&!(t.body instanceof Blob))throw new Error(\"Response is not a Blob.\");return t.body}));case\"text\":return c.pipe(Object(l.a)(t=>{if(null!==t.body&&\"string\"!=typeof t.body)throw new Error(\"Response is not a string.\");return t.body}));case\"json\":default:return c.pipe(Object(l.a)(t=>t.body))}case\"response\":return c;default:throw new Error(`Unreachable: unhandled observe type ${n.observe}}`)}}delete(t,e={}){return this.request(\"DELETE\",t,e)}get(t,e={}){return this.request(\"GET\",t,e)}head(t,e={}){return this.request(\"HEAD\",t,e)}jsonp(t,e){return this.request(\"JSONP\",t,{params:(new m).append(e,\"JSONP_CALLBACK\"),observe:\"body\",responseType:\"json\"})}options(t,e={}){return this.request(\"OPTIONS\",t,e)}patch(t,e,n={}){return this.request(\"PATCH\",t,T(n,e))}post(t,e,n={}){return this.request(\"POST\",t,T(n,e))}put(t,e,n={}){return this.request(\"PUT\",t,T(n,e))}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(u))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})();class A{constructor(t,e){this.next=t,this.interceptor=e}handle(t){return this.interceptor.intercept(t,this.next)}}const L=new r.w(\"HTTP_INTERCEPTORS\");let C=(()=>{class t{intercept(t,e){return e.handle(t)}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})();const E=/^\\)\\]\\}',?\\n/;class O{}let D=(()=>{class t{constructor(){}build(){return new XMLHttpRequest}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})(),I=(()=>{class t{constructor(t){this.xhrFactory=t}handle(t){if(\"JSONP\"===t.method)throw new Error(\"Attempted to construct Jsonp request without HttpClientJsonpModule installed.\");return new a.a(e=>{const n=this.xhrFactory.build();if(n.open(t.method,t.urlWithParams),t.withCredentials&&(n.withCredentials=!0),t.headers.forEach((t,e)=>n.setRequestHeader(t,e.join(\",\"))),t.headers.has(\"Accept\")||n.setRequestHeader(\"Accept\",\"application/json, text/plain, */*\"),!t.headers.has(\"Content-Type\")){const e=t.detectContentTypeHeader();null!==e&&n.setRequestHeader(\"Content-Type\",e)}if(t.responseType){const e=t.responseType.toLowerCase();n.responseType=\"json\"!==e?e:\"text\"}const r=t.serializeBody();let i=null;const a=()=>{if(null!==i)return i;const e=1223===n.status?204:n.status,r=n.statusText||\"OK\",a=new d(n.getAllResponseHeaders()),o=function(t){return\"responseURL\"in t&&t.responseURL?t.responseURL:/^X-Request-URL:/m.test(t.getAllResponseHeaders())?t.getResponseHeader(\"X-Request-URL\"):null}(n)||t.url;return i=new w({headers:a,status:e,statusText:r,url:o}),i},o=()=>{let{headers:r,status:i,statusText:o,url:s}=a(),l=null;204!==i&&(l=void 0===n.response?n.responseText:n.response),0===i&&(i=l?200:0);let c=i>=200&&i<300;if(\"json\"===t.responseType&&\"string\"==typeof l){const t=l;l=l.replace(E,\"\");try{l=\"\"!==l?JSON.parse(l):null}catch(u){l=t,c&&(c=!1,l={error:u,text:l})}}c?(e.next(new k({body:l,headers:r,status:i,statusText:o,url:s||void 0})),e.complete()):e.error(new M({error:l,headers:r,status:i,statusText:o,url:s||void 0}))},s=t=>{const{url:r}=a(),i=new M({error:t,status:n.status||0,statusText:n.statusText||\"Unknown Error\",url:r||void 0});e.error(i)};let l=!1;const c=r=>{l||(e.next(a()),l=!0);let i={type:b.DownloadProgress,loaded:r.loaded};r.lengthComputable&&(i.total=r.total),\"text\"===t.responseType&&n.responseText&&(i.partialText=n.responseText),e.next(i)},u=t=>{let n={type:b.UploadProgress,loaded:t.loaded};t.lengthComputable&&(n.total=t.total),e.next(n)};return n.addEventListener(\"load\",o),n.addEventListener(\"error\",s),t.reportProgress&&(n.addEventListener(\"progress\",c),null!==r&&n.upload&&n.upload.addEventListener(\"progress\",u)),n.send(r),e.next({type:b.Sent}),()=>{n.removeEventListener(\"error\",s),n.removeEventListener(\"load\",o),t.reportProgress&&(n.removeEventListener(\"progress\",c),null!==r&&n.upload&&n.upload.removeEventListener(\"progress\",u)),n.readyState!==n.DONE&&n.abort()}})}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(O))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})();const P=new r.w(\"XSRF_COOKIE_NAME\"),R=new r.w(\"XSRF_HEADER_NAME\");class z{}let j=(()=>{class t{constructor(t,e,n){this.doc=t,this.platform=e,this.cookieName=n,this.lastCookieString=\"\",this.lastToken=null,this.parseCount=0}getToken(){if(\"server\"===this.platform)return null;const t=this.doc.cookie||\"\";return t!==this.lastCookieString&&(this.parseCount++,this.lastToken=Object(c.D)(t,this.cookieName),this.lastCookieString=t),this.lastToken}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(c.d),r.hc(r.K),r.hc(P))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})(),F=(()=>{class t{constructor(t,e){this.tokenService=t,this.headerName=e}intercept(t,e){const n=t.url.toLowerCase();if(\"GET\"===t.method||\"HEAD\"===t.method||n.startsWith(\"http://\")||n.startsWith(\"https://\"))return e.handle(t);const r=this.tokenService.getToken();return null===r||t.headers.has(this.headerName)||(t=t.clone({headers:t.headers.set(this.headerName,r)})),e.handle(t)}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(z),r.hc(R))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})(),N=(()=>{class t{constructor(t,e){this.backend=t,this.injector=e,this.chain=null}handle(t){if(null===this.chain){const t=this.injector.get(L,[]);this.chain=t.reduceRight((t,e)=>new A(t,e),this.backend)}return this.chain.handle(t)}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(h),r.hc(r.x))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})(),B=(()=>{class t{static disable(){return{ngModule:t,providers:[{provide:F,useClass:C}]}}static withOptions(e={}){return{ngModule:t,providers:[e.cookieName?{provide:P,useValue:e.cookieName}:[],e.headerName?{provide:R,useValue:e.headerName}:[]]}}}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},providers:[F,{provide:L,useExisting:F,multi:!0},{provide:z,useClass:j},{provide:P,useValue:\"XSRF-TOKEN\"},{provide:R,useValue:\"X-XSRF-TOKEN\"}]}),t})(),Y=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},providers:[S,{provide:u,useClass:N},I,{provide:h,useExisting:I},D,{provide:O,useExisting:D}],imports:[[B.withOptions({cookieName:\"XSRF-TOKEN\",headerName:\"X-XSRF-TOKEN\"})]]}),t})()},tyNb:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return Nt})),n.d(e,\"b\",(function(){return Y})),n.d(e,\"c\",(function(){return B})),n.d(e,\"d\",(function(){return H})),n.d(e,\"e\",(function(){return N})),n.d(e,\"f\",(function(){return G})),n.d(e,\"g\",(function(){return tn})),n.d(e,\"h\",(function(){return an})),n.d(e,\"i\",(function(){return nn})),n.d(e,\"j\",(function(){return gn})),n.d(e,\"k\",(function(){return on})),n.d(e,\"l\",(function(){return V})),n.d(e,\"m\",(function(){return yt}));var r=n(\"ofXK\"),i=n(\"fXoL\"),a=n(\"Cfvw\"),o=n(\"LRne\"),s=n(\"2Vo4\"),l=n(\"itXk\"),c=n(\"HDdC\"),u=n(\"sVev\"),h=n(\"GyhO\"),d=n(\"NXyV\"),f=n(\"EY2u\"),p=n(\"XNiG\"),m=n(\"lJxs\"),g=n(\"eIep\"),y=n(\"IzEk\"),v=n(\"JX91\"),_=n(\"7o/Q\");function b(t,e){let n=!1;return arguments.length>=2&&(n=!0),function(r){return r.lift(new x(t,e,n))}}class x{constructor(t,e,n=!1){this.accumulator=t,this.seed=e,this.hasSeed=n}call(t,e){return e.subscribe(new w(t,this.accumulator,this.seed,this.hasSeed))}}class w extends _.a{constructor(t,e,n,r){super(t),this.accumulator=e,this._seed=n,this.hasSeed=r,this.index=0}get seed(){return this._seed}set seed(t){this.hasSeed=!0,this._seed=t}_next(t){if(this.hasSeed)return this._tryNext(t);this.seed=t,this.destination.next(t)}_tryNext(t){const e=this.index++;let n;try{n=this.accumulator(this.seed,t,e)}catch(r){this.destination.error(r)}this.seed=n,this.destination.next(n)}}var k=n(\"pLZG\"),M=n(\"JIr8\"),T=n(\"bOdf\"),S=n(\"4I5i\");function A(t){return function(e){return 0===t?Object(f.b)():e.lift(new L(t))}}class L{constructor(t){if(this.total=t,this.total<0)throw new S.a}call(t,e){return e.subscribe(new C(t,this.total))}}class C extends _.a{constructor(t,e){super(t),this.total=e,this.ring=new Array,this.count=0}_next(t){const e=this.ring,n=this.total,r=this.count++;e.length<n?e.push(t):e[r%n]=t}_complete(){const t=this.destination;let e=this.count;if(e>0){const n=this.count>=this.total?this.total:this.count,r=this.ring;for(let i=0;i<n;i++){const i=e++%n;t.next(r[i])}}t.complete()}}var E=n(\"XDbj\"),O=n(\"xbPD\"),D=n(\"SpAZ\"),I=n(\"SxV6\"),P=n(\"5+tZ\"),R=n(\"vkgz\"),z=n(\"nYR2\"),j=n(\"bHdf\");class F{constructor(t,e){this.id=t,this.url=e}}class N extends F{constructor(t,e,n=\"imperative\",r=null){super(t,e),this.navigationTrigger=n,this.restoredState=r}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}}class B extends F{constructor(t,e,n){super(t,e),this.urlAfterRedirects=n}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}}class Y extends F{constructor(t,e,n){super(t,e),this.reason=n}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}}class H extends F{constructor(t,e,n){super(t,e),this.error=n}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}}class V extends F{constructor(t,e,n,r){super(t,e),this.urlAfterRedirects=n,this.state=r}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class U extends F{constructor(t,e,n,r){super(t,e),this.urlAfterRedirects=n,this.state=r}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class W extends F{constructor(t,e,n,r,i){super(t,e),this.urlAfterRedirects=n,this.state=r,this.shouldActivate=i}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}}class q extends F{constructor(t,e,n,r){super(t,e),this.urlAfterRedirects=n,this.state=r}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class G extends F{constructor(t,e,n,r){super(t,e),this.urlAfterRedirects=n,this.state=r}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class X{constructor(t){this.route=t}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}}class Z{constructor(t){this.route=t}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}}class J{constructor(t){this.snapshot=t}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||\"\"}')`}}class K{constructor(t){this.snapshot=t}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||\"\"}')`}}class ${constructor(t){this.snapshot=t}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||\"\"}')`}}class Q{constructor(t){this.snapshot=t}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||\"\"}')`}}class tt{constructor(t,e,n){this.routerEvent=t,this.position=e,this.anchor=n}toString(){return`Scroll(anchor: '${this.anchor}', position: '${this.position?`${this.position[0]}, ${this.position[1]}`:null}')`}}const et=\"primary\";class nt{constructor(t){this.params=t||{}}has(t){return Object.prototype.hasOwnProperty.call(this.params,t)}get(t){if(this.has(t)){const e=this.params[t];return Array.isArray(e)?e[0]:e}return null}getAll(t){if(this.has(t)){const e=this.params[t];return Array.isArray(e)?e:[e]}return[]}get keys(){return Object.keys(this.params)}}function rt(t){return new nt(t)}function it(t){const e=Error(\"NavigationCancelingError: \"+t);return e.ngNavigationCancelingError=!0,e}function at(t,e,n){const r=n.path.split(\"/\");if(r.length>t.length)return null;if(\"full\"===n.pathMatch&&(e.hasChildren()||r.length<t.length))return null;const i={};for(let a=0;a<r.length;a++){const e=r[a],n=t[a];if(e.startsWith(\":\"))i[e.substring(1)]=n;else if(e!==n.path)return null}return{consumed:t.slice(0,r.length),posParams:i}}function ot(t,e){const n=Object.keys(t),r=Object.keys(e);if(!n||!r||n.length!=r.length)return!1;let i;for(let a=0;a<n.length;a++)if(i=n[a],!st(t[i],e[i]))return!1;return!0}function st(t,e){if(Array.isArray(t)&&Array.isArray(e)){if(t.length!==e.length)return!1;const n=[...t].sort(),r=[...e].sort();return n.every((t,e)=>r[e]===t)}return t===e}function lt(t){return Array.prototype.concat.apply([],t)}function ct(t){return t.length>0?t[t.length-1]:null}function ut(t,e){for(const n in t)t.hasOwnProperty(n)&&e(t[n],n)}function ht(t){return Object(i.Bb)(t)?t:Object(i.Cb)(t)?Object(a.a)(Promise.resolve(t)):Object(o.a)(t)}function dt(t,e,n){return n?function(t,e){return ot(t,e)}(t.queryParams,e.queryParams)&&function t(e,n){if(!gt(e.segments,n.segments))return!1;if(e.numberOfChildren!==n.numberOfChildren)return!1;for(const r in n.children){if(!e.children[r])return!1;if(!t(e.children[r],n.children[r]))return!1}return!0}(t.root,e.root):function(t,e){return Object.keys(e).length<=Object.keys(t).length&&Object.keys(e).every(n=>st(t[n],e[n]))}(t.queryParams,e.queryParams)&&function t(e,n){return function e(n,r,i){if(n.segments.length>i.length)return!!gt(n.segments.slice(0,i.length),i)&&!r.hasChildren();if(n.segments.length===i.length){if(!gt(n.segments,i))return!1;for(const e in r.children){if(!n.children[e])return!1;if(!t(n.children[e],r.children[e]))return!1}return!0}{const t=i.slice(0,n.segments.length),a=i.slice(n.segments.length);return!!gt(n.segments,t)&&!!n.children.primary&&e(n.children.primary,r,a)}}(e,n,n.segments)}(t.root,e.root)}class ft{constructor(t,e,n){this.root=t,this.queryParams=e,this.fragment=n}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=rt(this.queryParams)),this._queryParamMap}toString(){return _t.serialize(this)}}class pt{constructor(t,e){this.segments=t,this.children=e,this.parent=null,ut(e,(t,e)=>t.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return bt(this)}}class mt{constructor(t,e){this.path=t,this.parameters=e}get parameterMap(){return this._parameterMap||(this._parameterMap=rt(this.parameters)),this._parameterMap}toString(){return St(this)}}function gt(t,e){return t.length===e.length&&t.every((t,n)=>t.path===e[n].path)}class yt{}class vt{parse(t){const e=new Ot(t);return new ft(e.parseRootSegment(),e.parseQueryParams(),e.parseFragment())}serialize(t){return`${\"/\"+function t(e,n){if(!e.hasChildren())return bt(e);if(n){const n=e.children.primary?t(e.children.primary,!1):\"\",r=[];return ut(e.children,(e,n)=>{n!==et&&r.push(`${n}:${t(e,!1)}`)}),r.length>0?`${n}(${r.join(\"//\")})`:n}{const n=function(t,e){let n=[];return ut(t.children,(t,r)=>{r===et&&(n=n.concat(e(t,r)))}),ut(t.children,(t,r)=>{r!==et&&(n=n.concat(e(t,r)))}),n}(e,(n,r)=>r===et?[t(e.children.primary,!1)]:[`${r}:${t(n,!1)}`]);return 1===Object.keys(e.children).length&&null!=e.children.primary?`${bt(e)}/${n[0]}`:`${bt(e)}/(${n.join(\"//\")})`}}(t.root,!0)}${function(t){const e=Object.keys(t).map(e=>{const n=t[e];return Array.isArray(n)?n.map(t=>`${wt(e)}=${wt(t)}`).join(\"&\"):`${wt(e)}=${wt(n)}`});return e.length?\"?\"+e.join(\"&\"):\"\"}(t.queryParams)}${\"string\"==typeof t.fragment?\"#\"+encodeURI(t.fragment):\"\"}`}}const _t=new vt;function bt(t){return t.segments.map(t=>St(t)).join(\"/\")}function xt(t){return encodeURIComponent(t).replace(/%40/g,\"@\").replace(/%3A/gi,\":\").replace(/%24/g,\"$\").replace(/%2C/gi,\",\")}function wt(t){return xt(t).replace(/%3B/gi,\";\")}function kt(t){return xt(t).replace(/\\(/g,\"%28\").replace(/\\)/g,\"%29\").replace(/%26/gi,\"&\")}function Mt(t){return decodeURIComponent(t)}function Tt(t){return Mt(t.replace(/\\+/g,\"%20\"))}function St(t){return`${kt(t.path)}${e=t.parameters,Object.keys(e).map(t=>`;${kt(t)}=${kt(e[t])}`).join(\"\")}`;var e}const At=/^[^\\/()?;=#]+/;function Lt(t){const e=t.match(At);return e?e[0]:\"\"}const Ct=/^[^=?&#]+/,Et=/^[^?&#]+/;class Ot{constructor(t){this.url=t,this.remaining=t}parseRootSegment(){return this.consumeOptional(\"/\"),\"\"===this.remaining||this.peekStartsWith(\"?\")||this.peekStartsWith(\"#\")?new pt([],{}):new pt([],this.parseChildren())}parseQueryParams(){const t={};if(this.consumeOptional(\"?\"))do{this.parseQueryParam(t)}while(this.consumeOptional(\"&\"));return t}parseFragment(){return this.consumeOptional(\"#\")?decodeURIComponent(this.remaining):null}parseChildren(){if(\"\"===this.remaining)return{};this.consumeOptional(\"/\");const t=[];for(this.peekStartsWith(\"(\")||t.push(this.parseSegment());this.peekStartsWith(\"/\")&&!this.peekStartsWith(\"//\")&&!this.peekStartsWith(\"/(\");)this.capture(\"/\"),t.push(this.parseSegment());let e={};this.peekStartsWith(\"/(\")&&(this.capture(\"/\"),e=this.parseParens(!0));let n={};return this.peekStartsWith(\"(\")&&(n=this.parseParens(!1)),(t.length>0||Object.keys(e).length>0)&&(n.primary=new pt(t,e)),n}parseSegment(){const t=Lt(this.remaining);if(\"\"===t&&this.peekStartsWith(\";\"))throw new Error(`Empty path url segment cannot have parameters: '${this.remaining}'.`);return this.capture(t),new mt(Mt(t),this.parseMatrixParams())}parseMatrixParams(){const t={};for(;this.consumeOptional(\";\");)this.parseParam(t);return t}parseParam(t){const e=Lt(this.remaining);if(!e)return;this.capture(e);let n=\"\";if(this.consumeOptional(\"=\")){const t=Lt(this.remaining);t&&(n=t,this.capture(n))}t[Mt(e)]=Mt(n)}parseQueryParam(t){const e=function(t){const e=t.match(Ct);return e?e[0]:\"\"}(this.remaining);if(!e)return;this.capture(e);let n=\"\";if(this.consumeOptional(\"=\")){const t=function(t){const e=t.match(Et);return e?e[0]:\"\"}(this.remaining);t&&(n=t,this.capture(n))}const r=Tt(e),i=Tt(n);if(t.hasOwnProperty(r)){let e=t[r];Array.isArray(e)||(e=[e],t[r]=e),e.push(i)}else t[r]=i}parseParens(t){const e={};for(this.capture(\"(\");!this.consumeOptional(\")\")&&this.remaining.length>0;){const n=Lt(this.remaining),r=this.remaining[n.length];if(\"/\"!==r&&\")\"!==r&&\";\"!==r)throw new Error(`Cannot parse url '${this.url}'`);let i=void 0;n.indexOf(\":\")>-1?(i=n.substr(0,n.indexOf(\":\")),this.capture(i),this.capture(\":\")):t&&(i=et);const a=this.parseChildren();e[i]=1===Object.keys(a).length?a.primary:new pt([],a),this.consumeOptional(\"//\")}return e}peekStartsWith(t){return this.remaining.startsWith(t)}consumeOptional(t){return!!this.peekStartsWith(t)&&(this.remaining=this.remaining.substring(t.length),!0)}capture(t){if(!this.consumeOptional(t))throw new Error(`Expected \"${t}\".`)}}class Dt{constructor(t){this._root=t}get root(){return this._root.value}parent(t){const e=this.pathFromRoot(t);return e.length>1?e[e.length-2]:null}children(t){const e=It(t,this._root);return e?e.children.map(t=>t.value):[]}firstChild(t){const e=It(t,this._root);return e&&e.children.length>0?e.children[0].value:null}siblings(t){const e=Pt(t,this._root);return e.length<2?[]:e[e.length-2].children.map(t=>t.value).filter(e=>e!==t)}pathFromRoot(t){return Pt(t,this._root).map(t=>t.value)}}function It(t,e){if(t===e.value)return e;for(const n of e.children){const e=It(t,n);if(e)return e}return null}function Pt(t,e){if(t===e.value)return[e];for(const n of e.children){const r=Pt(t,n);if(r.length)return r.unshift(e),r}return[]}class Rt{constructor(t,e){this.value=t,this.children=e}toString(){return`TreeNode(${this.value})`}}function zt(t){const e={};return t&&t.children.forEach(t=>e[t.value.outlet]=t),e}class jt extends Dt{constructor(t,e){super(t),this.snapshot=e,Vt(this,t)}toString(){return this.snapshot.toString()}}function Ft(t,e){const n=function(t,e){const n=new Yt([],{},{},\"\",{},et,e,null,t.root,-1,{});return new Ht(\"\",new Rt(n,[]))}(t,e),r=new s.a([new mt(\"\",{})]),i=new s.a({}),a=new s.a({}),o=new s.a({}),l=new s.a(\"\"),c=new Nt(r,i,o,l,a,et,e,n.root);return c.snapshot=n.root,new jt(new Rt(c,[]),n)}class Nt{constructor(t,e,n,r,i,a,o,s){this.url=t,this.params=e,this.queryParams=n,this.fragment=r,this.data=i,this.outlet=a,this.component=o,this._futureSnapshot=s}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=this.params.pipe(Object(m.a)(t=>rt(t)))),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=this.queryParams.pipe(Object(m.a)(t=>rt(t)))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}}function Bt(t,e=\"emptyOnly\"){const n=t.pathFromRoot;let r=0;if(\"always\"!==e)for(r=n.length-1;r>=1;){const t=n[r],e=n[r-1];if(t.routeConfig&&\"\"===t.routeConfig.path)r--;else{if(e.component)break;r--}}return function(t){return t.reduce((t,e)=>({params:Object.assign(Object.assign({},t.params),e.params),data:Object.assign(Object.assign({},t.data),e.data),resolve:Object.assign(Object.assign({},t.resolve),e._resolvedData)}),{params:{},data:{},resolve:{}})}(n.slice(r))}class Yt{constructor(t,e,n,r,i,a,o,s,l,c,u){this.url=t,this.params=e,this.queryParams=n,this.fragment=r,this.data=i,this.outlet=a,this.component=o,this.routeConfig=s,this._urlSegment=l,this._lastPathIndex=c,this._resolve=u}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=rt(this.params)),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=rt(this.queryParams)),this._queryParamMap}toString(){return`Route(url:'${this.url.map(t=>t.toString()).join(\"/\")}', path:'${this.routeConfig?this.routeConfig.path:\"\"}')`}}class Ht extends Dt{constructor(t,e){super(e),this.url=t,Vt(this,e)}toString(){return Ut(this._root)}}function Vt(t,e){e.value._routerState=t,e.children.forEach(e=>Vt(t,e))}function Ut(t){const e=t.children.length>0?` { ${t.children.map(Ut).join(\", \")} } `:\"\";return`${t.value}${e}`}function Wt(t){if(t.snapshot){const e=t.snapshot,n=t._futureSnapshot;t.snapshot=n,ot(e.queryParams,n.queryParams)||t.queryParams.next(n.queryParams),e.fragment!==n.fragment&&t.fragment.next(n.fragment),ot(e.params,n.params)||t.params.next(n.params),function(t,e){if(t.length!==e.length)return!1;for(let n=0;n<t.length;++n)if(!ot(t[n],e[n]))return!1;return!0}(e.url,n.url)||t.url.next(n.url),ot(e.data,n.data)||t.data.next(n.data)}else t.snapshot=t._futureSnapshot,t.data.next(t._futureSnapshot.data)}function qt(t,e){var n,r;return ot(t.params,e.params)&&gt(n=t.url,r=e.url)&&n.every((t,e)=>ot(t.parameters,r[e].parameters))&&!(!t.parent!=!e.parent)&&(!t.parent||qt(t.parent,e.parent))}function Gt(t){return\"object\"==typeof t&&null!=t&&!t.outlets&&!t.segmentPath}function Xt(t){return\"object\"==typeof t&&null!=t&&t.outlets}function Zt(t,e,n,r,i){let a={};return r&&ut(r,(t,e)=>{a[e]=Array.isArray(t)?t.map(t=>\"\"+t):\"\"+t}),new ft(n.root===t?e:function t(e,n,r){const i={};return ut(e.children,(e,a)=>{i[a]=e===n?r:t(e,n,r)}),new pt(e.segments,i)}(n.root,t,e),a,i)}class Jt{constructor(t,e,n){if(this.isAbsolute=t,this.numberOfDoubleDots=e,this.commands=n,t&&n.length>0&&Gt(n[0]))throw new Error(\"Root segment cannot have matrix parameters\");const r=n.find(Xt);if(r&&r!==ct(n))throw new Error(\"{outlets:{}} has to be the last command\")}toRoot(){return this.isAbsolute&&1===this.commands.length&&\"/\"==this.commands[0]}}class Kt{constructor(t,e,n){this.segmentGroup=t,this.processChildren=e,this.index=n}}function $t(t,e,n){if(t||(t=new pt([],{})),0===t.segments.length&&t.hasChildren())return Qt(t,e,n);const r=function(t,e,n){let r=0,i=e;const a={match:!1,pathIndex:0,commandIndex:0};for(;i<t.segments.length;){if(r>=n.length)return a;const e=t.segments[i],o=n[r];if(Xt(o))break;const s=\"\"+o,l=r<n.length-1?n[r+1]:null;if(i>0&&void 0===s)break;if(s&&l&&\"object\"==typeof l&&void 0===l.outlets){if(!re(s,l,e))return a;r+=2}else{if(!re(s,{},e))return a;r++}i++}return{match:!0,pathIndex:i,commandIndex:r}}(t,e,n),i=n.slice(r.commandIndex);if(r.match&&r.pathIndex<t.segments.length){const e=new pt(t.segments.slice(0,r.pathIndex),{});return e.children.primary=new pt(t.segments.slice(r.pathIndex),t.children),Qt(e,0,i)}return r.match&&0===i.length?new pt(t.segments,{}):r.match&&!t.hasChildren()?te(t,e,n):r.match?Qt(t,0,i):te(t,e,n)}function Qt(t,e,n){if(0===n.length)return new pt(t.segments,{});{const r=function(t){return Xt(t[0])?t[0].outlets:{[et]:t}}(n),i={};return ut(r,(n,r)=>{\"string\"==typeof n&&(n=[n]),null!==n&&(i[r]=$t(t.children[r],e,n))}),ut(t.children,(t,e)=>{void 0===r[e]&&(i[e]=t)}),new pt(t.segments,i)}}function te(t,e,n){const r=t.segments.slice(0,e);let i=0;for(;i<n.length;){const a=n[i];if(Xt(a)){const t=ee(a.outlets);return new pt(r,t)}if(0===i&&Gt(n[0])){r.push(new mt(t.segments[e].path,n[0])),i++;continue}const o=Xt(a)?a.outlets.primary:\"\"+a,s=i<n.length-1?n[i+1]:null;o&&s&&Gt(s)?(r.push(new mt(o,ne(s))),i+=2):(r.push(new mt(o,{})),i++)}return new pt(r,{})}function ee(t){const e={};return ut(t,(t,n)=>{\"string\"==typeof t&&(t=[t]),null!==t&&(e[n]=te(new pt([],{}),0,t))}),e}function ne(t){const e={};return ut(t,(t,n)=>e[n]=\"\"+t),e}function re(t,e,n){return t==n.path&&ot(e,n.parameters)}class ie{constructor(t,e,n,r){this.routeReuseStrategy=t,this.futureState=e,this.currState=n,this.forwardEvent=r}activate(t){const e=this.futureState._root,n=this.currState?this.currState._root:null;this.deactivateChildRoutes(e,n,t),Wt(this.futureState.root),this.activateChildRoutes(e,n,t)}deactivateChildRoutes(t,e,n){const r=zt(e);t.children.forEach(t=>{const e=t.value.outlet;this.deactivateRoutes(t,r[e],n),delete r[e]}),ut(r,(t,e)=>{this.deactivateRouteAndItsChildren(t,n)})}deactivateRoutes(t,e,n){const r=t.value,i=e?e.value:null;if(r===i)if(r.component){const i=n.getContext(r.outlet);i&&this.deactivateChildRoutes(t,e,i.children)}else this.deactivateChildRoutes(t,e,n);else i&&this.deactivateRouteAndItsChildren(e,n)}deactivateRouteAndItsChildren(t,e){this.routeReuseStrategy.shouldDetach(t.value.snapshot)?this.detachAndStoreRouteSubtree(t,e):this.deactivateRouteAndOutlet(t,e)}detachAndStoreRouteSubtree(t,e){const n=e.getContext(t.value.outlet);if(n&&n.outlet){const e=n.outlet.detach(),r=n.children.onOutletDeactivated();this.routeReuseStrategy.store(t.value.snapshot,{componentRef:e,route:t,contexts:r})}}deactivateRouteAndOutlet(t,e){const n=e.getContext(t.value.outlet),r=n&&t.value.component?n.children:e,i=zt(t);for(const a of Object.keys(i))this.deactivateRouteAndItsChildren(i[a],r);n&&n.outlet&&(n.outlet.deactivate(),n.children.onOutletDeactivated())}activateChildRoutes(t,e,n){const r=zt(e);t.children.forEach(t=>{this.activateRoutes(t,r[t.value.outlet],n),this.forwardEvent(new Q(t.value.snapshot))}),t.children.length&&this.forwardEvent(new K(t.value.snapshot))}activateRoutes(t,e,n){const r=t.value,i=e?e.value:null;if(Wt(r),r===i)if(r.component){const i=n.getOrCreateContext(r.outlet);this.activateChildRoutes(t,e,i.children)}else this.activateChildRoutes(t,e,n);else if(r.component){const e=n.getOrCreateContext(r.outlet);if(this.routeReuseStrategy.shouldAttach(r.snapshot)){const t=this.routeReuseStrategy.retrieve(r.snapshot);this.routeReuseStrategy.store(r.snapshot,null),e.children.onOutletReAttached(t.contexts),e.attachRef=t.componentRef,e.route=t.route.value,e.outlet&&e.outlet.attach(t.componentRef,t.route.value),ae(t.route)}else{const n=function(t){for(let e=t.parent;e;e=e.parent){const t=e.routeConfig;if(t&&t._loadedConfig)return t._loadedConfig;if(t&&t.component)return null}return null}(r.snapshot),i=n?n.module.componentFactoryResolver:null;e.attachRef=null,e.route=r,e.resolver=i,e.outlet&&e.outlet.activateWith(r,i),this.activateChildRoutes(t,null,e.children)}}else this.activateChildRoutes(t,null,n)}}function ae(t){Wt(t.value),t.children.forEach(ae)}class oe{constructor(t,e){this.routes=t,this.module=e}}function se(t){return\"function\"==typeof t}function le(t){return t instanceof ft}const ce=Symbol(\"INITIAL_VALUE\");function ue(){return Object(g.a)(t=>Object(l.a)(t.map(t=>t.pipe(Object(y.a)(1),Object(v.a)(ce)))).pipe(b((t,e)=>{let n=!1;return e.reduce((t,r,i)=>{if(t!==ce)return t;if(r===ce&&(n=!0),!n){if(!1===r)return r;if(i===e.length-1||le(r))return r}return t},t)},ce),Object(k.a)(t=>t!==ce),Object(m.a)(t=>le(t)?t:!0===t),Object(y.a)(1)))}let he=(()=>{class t{}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275cmp=i.Rb({type:t,selectors:[[\"ng-component\"]],decls:1,vars:0,template:function(t,e){1&t&&i.Yb(0,\"router-outlet\")},directives:function(){return[on]},encapsulation:2}),t})();function de(t,e=\"\"){for(let n=0;n<t.length;n++){const r=t[n];fe(r,pe(e,r))}}function fe(t,e){t.children&&de(t.children,e)}function pe(t,e){return e?t||e.path?t&&!e.path?t+\"/\":!t&&e.path?e.path:`${t}/${e.path}`:\"\":t}function me(t){const e=t.children&&t.children.map(me),n=e?Object.assign(Object.assign({},t),{children:e}):Object.assign({},t);return!n.component&&(e||n.loadChildren)&&n.outlet&&n.outlet!==et&&(n.component=he),n}function ge(t){return t.outlet||et}function ye(t,e){const n=t.filter(t=>ge(t)===e);return n.push(...t.filter(t=>ge(t)!==e)),n}const ve={matched:!1,consumedSegments:[],lastChild:0,parameters:{},positionalParamSegments:{}};function _e(t,e,n){var r;if(\"\"===e.path)return\"full\"===e.pathMatch&&(t.hasChildren()||n.length>0)?Object.assign({},ve):{matched:!0,consumedSegments:[],lastChild:0,parameters:{},positionalParamSegments:{}};const i=(e.matcher||at)(n,t,e);if(!i)return Object.assign({},ve);const a={};ut(i.posParams,(t,e)=>{a[e]=t.path});const o=i.consumed.length>0?Object.assign(Object.assign({},a),i.consumed[i.consumed.length-1].parameters):a;return{matched:!0,consumedSegments:i.consumed,lastChild:i.consumed.length,parameters:o,positionalParamSegments:null!==(r=i.posParams)&&void 0!==r?r:{}}}function be(t,e,n,r,i=\"corrected\"){if(n.length>0&&function(t,e,n){return n.some(n=>xe(t,e,n)&&ge(n)!==et)}(t,n,r)){const i=new pt(e,function(t,e,n,r){const i={};i.primary=r,r._sourceSegment=t,r._segmentIndexShift=e.length;for(const a of n)if(\"\"===a.path&&ge(a)!==et){const n=new pt([],{});n._sourceSegment=t,n._segmentIndexShift=e.length,i[ge(a)]=n}return i}(t,e,r,new pt(n,t.children)));return i._sourceSegment=t,i._segmentIndexShift=e.length,{segmentGroup:i,slicedSegments:[]}}if(0===n.length&&function(t,e,n){return n.some(n=>xe(t,e,n))}(t,n,r)){const a=new pt(t.segments,function(t,e,n,r,i,a){const o={};for(const s of r)if(xe(t,n,s)&&!i[ge(s)]){const n=new pt([],{});n._sourceSegment=t,n._segmentIndexShift=\"legacy\"===a?t.segments.length:e.length,o[ge(s)]=n}return Object.assign(Object.assign({},i),o)}(t,e,n,r,t.children,i));return a._sourceSegment=t,a._segmentIndexShift=e.length,{segmentGroup:a,slicedSegments:n}}const a=new pt(t.segments,t.children);return a._sourceSegment=t,a._segmentIndexShift=e.length,{segmentGroup:a,slicedSegments:n}}function xe(t,e,n){return(!(t.hasChildren()||e.length>0)||\"full\"!==n.pathMatch)&&\"\"===n.path}function we(t,e,n,r){return!!(ge(t)===r||r!==et&&xe(e,n,t))&&(\"**\"===t.path||_e(e,t,n).matched)}function ke(t,e,n){return 0===e.length&&!t.children[n]}class Me{constructor(t){this.segmentGroup=t||null}}class Te{constructor(t){this.urlTree=t}}function Se(t){return new c.a(e=>e.error(new Me(t)))}function Ae(t){return new c.a(e=>e.error(new Te(t)))}function Le(t){return new c.a(e=>e.error(new Error(`Only absolute redirects can have named outlets. redirectTo: '${t}'`)))}class Ce{constructor(t,e,n,r,a){this.configLoader=e,this.urlSerializer=n,this.urlTree=r,this.config=a,this.allowRedirects=!0,this.ngModule=t.get(i.F)}apply(){const t=be(this.urlTree.root,[],[],this.config).segmentGroup,e=new pt(t.segments,t.children);return this.expandSegmentGroup(this.ngModule,this.config,e,et).pipe(Object(m.a)(t=>this.createUrlTree(Ee(t),this.urlTree.queryParams,this.urlTree.fragment))).pipe(Object(M.a)(t=>{if(t instanceof Te)return this.allowRedirects=!1,this.match(t.urlTree);if(t instanceof Me)throw this.noMatchError(t);throw t}))}match(t){return this.expandSegmentGroup(this.ngModule,this.config,t.root,et).pipe(Object(m.a)(e=>this.createUrlTree(Ee(e),t.queryParams,t.fragment))).pipe(Object(M.a)(t=>{if(t instanceof Me)throw this.noMatchError(t);throw t}))}noMatchError(t){return new Error(`Cannot match any routes. URL Segment: '${t.segmentGroup}'`)}createUrlTree(t,e,n){const r=t.segments.length>0?new pt([],{[et]:t}):t;return new ft(r,e,n)}expandSegmentGroup(t,e,n,r){return 0===n.segments.length&&n.hasChildren()?this.expandChildren(t,e,n).pipe(Object(m.a)(t=>new pt([],t))):this.expandSegment(t,n,e,n.segments,r,!0)}expandChildren(t,e,n){const r=[];for(const i of Object.keys(n.children))\"primary\"===i?r.unshift(i):r.push(i);return Object(a.a)(r).pipe(Object(T.a)(r=>{const i=n.children[r],a=ye(e,r);return this.expandSegmentGroup(t,a,i,r).pipe(Object(m.a)(t=>({segment:t,outlet:r})))}),b((t,e)=>(t[e.outlet]=e.segment,t),{}),function(t,e){const n=arguments.length>=2;return r=>r.pipe(t?Object(k.a)((e,n)=>t(e,n,r)):D.a,A(1),n?Object(O.a)(e):Object(E.a)(()=>new u.a))}())}expandSegment(t,e,n,r,i,s){return Object(a.a)(n).pipe(Object(T.a)(a=>this.expandSegmentAgainstRoute(t,e,n,a,r,i,s).pipe(Object(M.a)(t=>{if(t instanceof Me)return Object(o.a)(null);throw t}))),Object(I.a)(t=>!!t),Object(M.a)((t,n)=>{if(t instanceof u.a||\"EmptyError\"===t.name){if(ke(e,r,i))return Object(o.a)(new pt([],{}));throw new Me(e)}throw t}))}expandSegmentAgainstRoute(t,e,n,r,i,a,o){return we(r,e,i,a)?void 0===r.redirectTo?this.matchSegmentAgainstRoute(t,e,r,i,a):o&&this.allowRedirects?this.expandSegmentAgainstRouteUsingRedirect(t,e,n,r,i,a):Se(e):Se(e)}expandSegmentAgainstRouteUsingRedirect(t,e,n,r,i,a){return\"**\"===r.path?this.expandWildCardWithParamsAgainstRouteUsingRedirect(t,n,r,a):this.expandRegularSegmentAgainstRouteUsingRedirect(t,e,n,r,i,a)}expandWildCardWithParamsAgainstRouteUsingRedirect(t,e,n,r){const i=this.applyRedirectCommands([],n.redirectTo,{});return n.redirectTo.startsWith(\"/\")?Ae(i):this.lineralizeSegments(n,i).pipe(Object(P.a)(n=>{const i=new pt(n,{});return this.expandSegment(t,i,e,n,r,!1)}))}expandRegularSegmentAgainstRouteUsingRedirect(t,e,n,r,i,a){const{matched:o,consumedSegments:s,lastChild:l,positionalParamSegments:c}=_e(e,r,i);if(!o)return Se(e);const u=this.applyRedirectCommands(s,r.redirectTo,c);return r.redirectTo.startsWith(\"/\")?Ae(u):this.lineralizeSegments(r,u).pipe(Object(P.a)(r=>this.expandSegment(t,e,n,r.concat(i.slice(l)),a,!1)))}matchSegmentAgainstRoute(t,e,n,r,i){if(\"**\"===n.path)return n.loadChildren?this.configLoader.load(t.injector,n).pipe(Object(m.a)(t=>(n._loadedConfig=t,new pt(r,{})))):Object(o.a)(new pt(r,{}));const{matched:a,consumedSegments:s,lastChild:l}=_e(e,n,r);if(!a)return Se(e);const c=r.slice(l);return this.getChildConfig(t,n,r).pipe(Object(P.a)(t=>{const r=t.module,a=t.routes,{segmentGroup:l,slicedSegments:u}=be(e,s,c,a),h=new pt(l.segments,l.children);if(0===u.length&&h.hasChildren())return this.expandChildren(r,a,h).pipe(Object(m.a)(t=>new pt(s,t)));if(0===a.length&&0===u.length)return Object(o.a)(new pt(s,{}));const d=ge(n)===i;return this.expandSegment(r,h,a,u,d?et:i,!0).pipe(Object(m.a)(t=>new pt(s.concat(t.segments),t.children)))}))}getChildConfig(t,e,n){return e.children?Object(o.a)(new oe(e.children,t)):e.loadChildren?void 0!==e._loadedConfig?Object(o.a)(e._loadedConfig):this.runCanLoadGuards(t.injector,e,n).pipe(Object(P.a)(n=>n?this.configLoader.load(t.injector,e).pipe(Object(m.a)(t=>(e._loadedConfig=t,t))):function(t){return new c.a(e=>e.error(it(`Cannot load children because the guard of the route \"path: '${t.path}'\" returned false`)))}(e))):Object(o.a)(new oe([],t))}runCanLoadGuards(t,e,n){const r=e.canLoad;if(!r||0===r.length)return Object(o.a)(!0);const i=r.map(r=>{const i=t.get(r);let a;if(function(t){return t&&se(t.canLoad)}(i))a=i.canLoad(e,n);else{if(!se(i))throw new Error(\"Invalid CanLoad guard\");a=i(e,n)}return ht(a)});return Object(o.a)(i).pipe(ue(),Object(R.a)(t=>{if(!le(t))return;const e=it(`Redirecting to \"${this.urlSerializer.serialize(t)}\"`);throw e.url=t,e}),Object(m.a)(t=>!0===t))}lineralizeSegments(t,e){let n=[],r=e.root;for(;;){if(n=n.concat(r.segments),0===r.numberOfChildren)return Object(o.a)(n);if(r.numberOfChildren>1||!r.children.primary)return Le(t.redirectTo);r=r.children.primary}}applyRedirectCommands(t,e,n){return this.applyRedirectCreatreUrlTree(e,this.urlSerializer.parse(e),t,n)}applyRedirectCreatreUrlTree(t,e,n,r){const i=this.createSegmentGroup(t,e.root,n,r);return new ft(i,this.createQueryParams(e.queryParams,this.urlTree.queryParams),e.fragment)}createQueryParams(t,e){const n={};return ut(t,(t,r)=>{if(\"string\"==typeof t&&t.startsWith(\":\")){const i=t.substring(1);n[r]=e[i]}else n[r]=t}),n}createSegmentGroup(t,e,n,r){const i=this.createSegments(t,e.segments,n,r);let a={};return ut(e.children,(e,i)=>{a[i]=this.createSegmentGroup(t,e,n,r)}),new pt(i,a)}createSegments(t,e,n,r){return e.map(e=>e.path.startsWith(\":\")?this.findPosParam(t,e,r):this.findOrReturn(e,n))}findPosParam(t,e,n){const r=n[e.path.substring(1)];if(!r)throw new Error(`Cannot redirect to '${t}'. Cannot find '${e.path}'.`);return r}findOrReturn(t,e){let n=0;for(const r of e){if(r.path===t.path)return e.splice(n),r;n++}return t}}function Ee(t){const e={};for(const n of Object.keys(t.children)){const r=Ee(t.children[n]);(r.segments.length>0||r.hasChildren())&&(e[n]=r)}return function(t){if(1===t.numberOfChildren&&t.children.primary){const e=t.children.primary;return new pt(t.segments.concat(e.segments),e.children)}return t}(new pt(t.segments,e))}class Oe{constructor(t){this.path=t,this.route=this.path[this.path.length-1]}}class De{constructor(t,e){this.component=t,this.route=e}}function Ie(t,e,n){const r=t._root;return function t(e,n,r,i,a={canDeactivateChecks:[],canActivateChecks:[]}){const o=zt(n);return e.children.forEach(e=>{!function(e,n,r,i,a={canDeactivateChecks:[],canActivateChecks:[]}){const o=e.value,s=n?n.value:null,l=r?r.getContext(e.value.outlet):null;if(s&&o.routeConfig===s.routeConfig){const c=function(t,e,n){if(\"function\"==typeof n)return n(t,e);switch(n){case\"pathParamsChange\":return!gt(t.url,e.url);case\"pathParamsOrQueryParamsChange\":return!gt(t.url,e.url)||!ot(t.queryParams,e.queryParams);case\"always\":return!0;case\"paramsOrQueryParamsChange\":return!qt(t,e)||!ot(t.queryParams,e.queryParams);case\"paramsChange\":default:return!qt(t,e)}}(s,o,o.routeConfig.runGuardsAndResolvers);c?a.canActivateChecks.push(new Oe(i)):(o.data=s.data,o._resolvedData=s._resolvedData),t(e,n,o.component?l?l.children:null:r,i,a),c&&l&&l.outlet&&l.outlet.isActivated&&a.canDeactivateChecks.push(new De(l.outlet.component,s))}else s&&Re(n,l,a),a.canActivateChecks.push(new Oe(i)),t(e,null,o.component?l?l.children:null:r,i,a)}(e,o[e.value.outlet],r,i.concat([e.value]),a),delete o[e.value.outlet]}),ut(o,(t,e)=>Re(t,r.getContext(e),a)),a}(r,e?e._root:null,n,[r.value])}function Pe(t,e,n){const r=function(t){if(!t)return null;for(let e=t.parent;e;e=e.parent){const t=e.routeConfig;if(t&&t._loadedConfig)return t._loadedConfig}return null}(e);return(r?r.module.injector:n).get(t)}function Re(t,e,n){const r=zt(t),i=t.value;ut(r,(t,r)=>{Re(t,i.component?e?e.children.getContext(r):null:e,n)}),n.canDeactivateChecks.push(new De(i.component&&e&&e.outlet&&e.outlet.isActivated?e.outlet.component:null,i))}class ze{}function je(t){return new c.a(e=>e.error(t))}class Fe{constructor(t,e,n,r,i,a){this.rootComponentType=t,this.config=e,this.urlTree=n,this.url=r,this.paramsInheritanceStrategy=i,this.relativeLinkResolution=a}recognize(){const t=be(this.urlTree.root,[],[],this.config.filter(t=>void 0===t.redirectTo),this.relativeLinkResolution).segmentGroup,e=this.processSegmentGroup(this.config,t,et);if(null===e)return null;const n=new Yt([],Object.freeze({}),Object.freeze(Object.assign({},this.urlTree.queryParams)),this.urlTree.fragment,{},et,this.rootComponentType,null,this.urlTree.root,-1,{}),r=new Rt(n,e),i=new Ht(this.url,r);return this.inheritParamsAndData(i._root),i}inheritParamsAndData(t){const e=t.value,n=Bt(e,this.paramsInheritanceStrategy);e.params=Object.freeze(n.params),e.data=Object.freeze(n.data),t.children.forEach(t=>this.inheritParamsAndData(t))}processSegmentGroup(t,e,n){return 0===e.segments.length&&e.hasChildren()?this.processChildren(t,e):this.processSegment(t,e,e.segments,n)}processChildren(t,e){const n=[];for(const i of Object.keys(e.children)){const r=e.children[i],a=ye(t,i),o=this.processSegmentGroup(a,r,i);if(null===o)return null;n.push(...o)}const r=function(t){const e=[];for(const n of t){if(!Ne(n)){e.push(n);continue}const t=e.find(t=>n.value.routeConfig===t.value.routeConfig);void 0!==t?t.children.push(...n.children):e.push(n)}return e}(n);return r.sort((t,e)=>t.value.outlet===et?-1:e.value.outlet===et?1:t.value.outlet.localeCompare(e.value.outlet)),r}processSegment(t,e,n,r){for(const i of t){const t=this.processSegmentAgainstRoute(i,e,n,r);if(null!==t)return t}return ke(e,n,r)?[]:null}processSegmentAgainstRoute(t,e,n,r){if(t.redirectTo||!we(t,e,n,r))return null;let i,a=[],o=[];if(\"**\"===t.path){const r=n.length>0?ct(n).parameters:{};i=new Yt(n,r,Object.freeze(Object.assign({},this.urlTree.queryParams)),this.urlTree.fragment,He(t),ge(t),t.component,t,Be(e),Ye(e)+n.length,Ve(t))}else{const r=_e(e,t,n);if(!r.matched)return null;a=r.consumedSegments,o=n.slice(r.lastChild),i=new Yt(a,r.parameters,Object.freeze(Object.assign({},this.urlTree.queryParams)),this.urlTree.fragment,He(t),ge(t),t.component,t,Be(e),Ye(e)+a.length,Ve(t))}const s=function(t){return t.children?t.children:t.loadChildren?t._loadedConfig.routes:[]}(t),{segmentGroup:l,slicedSegments:c}=be(e,a,o,s.filter(t=>void 0===t.redirectTo),this.relativeLinkResolution);if(0===c.length&&l.hasChildren()){const t=this.processChildren(s,l);return null===t?null:[new Rt(i,t)]}if(0===s.length&&0===c.length)return[new Rt(i,[])];const u=ge(t)===r,h=this.processSegment(s,l,c,u?et:r);return null===h?null:[new Rt(i,h)]}}function Ne(t){const e=t.value.routeConfig;return e&&\"\"===e.path&&void 0===e.redirectTo}function Be(t){let e=t;for(;e._sourceSegment;)e=e._sourceSegment;return e}function Ye(t){let e=t,n=e._segmentIndexShift?e._segmentIndexShift:0;for(;e._sourceSegment;)e=e._sourceSegment,n+=e._segmentIndexShift?e._segmentIndexShift:0;return n-1}function He(t){return t.data||{}}function Ve(t){return t.resolve||{}}function Ue(t){return Object(g.a)(e=>{const n=t(e);return n?Object(a.a)(n).pipe(Object(m.a)(()=>e)):Object(o.a)(e)})}class We extends class{shouldDetach(t){return!1}store(t,e){}shouldAttach(t){return!1}retrieve(t){return null}shouldReuseRoute(t,e){return t.routeConfig===e.routeConfig}}{}const qe=new i.w(\"ROUTES\");class Ge{constructor(t,e,n,r){this.loader=t,this.compiler=e,this.onLoadStartListener=n,this.onLoadEndListener=r}load(t,e){return this.onLoadStartListener&&this.onLoadStartListener(e),this.loadModuleFactory(e.loadChildren).pipe(Object(m.a)(n=>{this.onLoadEndListener&&this.onLoadEndListener(e);const r=n.create(t);return new oe(lt(r.injector.get(qe)).map(me),r)}))}loadModuleFactory(t){return\"string\"==typeof t?Object(a.a)(this.loader.load(t)):ht(t()).pipe(Object(P.a)(t=>t instanceof i.D?Object(o.a)(t):Object(a.a)(this.compiler.compileModuleAsync(t))))}}class Xe{constructor(){this.outlet=null,this.route=null,this.resolver=null,this.children=new Ze,this.attachRef=null}}class Ze{constructor(){this.contexts=new Map}onChildOutletCreated(t,e){const n=this.getOrCreateContext(t);n.outlet=e,this.contexts.set(t,n)}onChildOutletDestroyed(t){const e=this.getContext(t);e&&(e.outlet=null)}onOutletDeactivated(){const t=this.contexts;return this.contexts=new Map,t}onOutletReAttached(t){this.contexts=t}getOrCreateContext(t){let e=this.getContext(t);return e||(e=new Xe,this.contexts.set(t,e)),e}getContext(t){return this.contexts.get(t)||null}}class Je{shouldProcessUrl(t){return!0}extract(t){return t}merge(t,e){return t}}function Ke(t){throw t}function $e(t,e,n){return e.parse(\"/\")}function Qe(t,e){return Object(o.a)(null)}let tn=(()=>{class t{constructor(t,e,n,r,a,o,l,c){this.rootComponentType=t,this.urlSerializer=e,this.rootContexts=n,this.location=r,this.config=c,this.lastSuccessfulNavigation=null,this.currentNavigation=null,this.lastLocationChangeInfo=null,this.navigationId=0,this.isNgZoneEnabled=!1,this.events=new p.a,this.errorHandler=Ke,this.malformedUriErrorHandler=$e,this.navigated=!1,this.lastSuccessfulId=-1,this.hooks={beforePreactivation:Qe,afterPreactivation:Qe},this.urlHandlingStrategy=new Je,this.routeReuseStrategy=new We,this.onSameUrlNavigation=\"ignore\",this.paramsInheritanceStrategy=\"emptyOnly\",this.urlUpdateStrategy=\"deferred\",this.relativeLinkResolution=\"corrected\",this.ngModule=a.get(i.F),this.console=a.get(i.jb);const u=a.get(i.H);this.isNgZoneEnabled=u instanceof i.H&&i.H.isInAngularZone(),this.resetConfig(c),this.currentUrlTree=new ft(new pt([],{}),{},null),this.rawUrlTree=this.currentUrlTree,this.browserUrlTree=this.currentUrlTree,this.configLoader=new Ge(o,l,t=>this.triggerEvent(new X(t)),t=>this.triggerEvent(new Z(t))),this.routerState=Ft(this.currentUrlTree,this.rootComponentType),this.transitions=new s.a({id:0,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,extractedUrl:this.urlHandlingStrategy.extract(this.currentUrlTree),urlAfterRedirects:this.urlHandlingStrategy.extract(this.currentUrlTree),rawUrl:this.currentUrlTree,extras:{},resolve:null,reject:null,promise:Promise.resolve(!0),source:\"imperative\",restoredState:null,currentSnapshot:this.routerState.snapshot,targetSnapshot:null,currentRouterState:this.routerState,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null}),this.navigations=this.setupNavigations(this.transitions),this.processNavigations()}setupNavigations(t){const e=this.events;return t.pipe(Object(k.a)(t=>0!==t.id),Object(m.a)(t=>Object.assign(Object.assign({},t),{extractedUrl:this.urlHandlingStrategy.extract(t.rawUrl)})),Object(g.a)(t=>{let n=!1,r=!1;return Object(o.a)(t).pipe(Object(R.a)(t=>{this.currentNavigation={id:t.id,initialUrl:t.currentRawUrl,extractedUrl:t.extractedUrl,trigger:t.source,extras:t.extras,previousNavigation:this.lastSuccessfulNavigation?Object.assign(Object.assign({},this.lastSuccessfulNavigation),{previousNavigation:null}):null}}),Object(g.a)(t=>{const n=!this.navigated||t.extractedUrl.toString()!==this.browserUrlTree.toString();if((\"reload\"===this.onSameUrlNavigation||n)&&this.urlHandlingStrategy.shouldProcessUrl(t.rawUrl))return Object(o.a)(t).pipe(Object(g.a)(t=>{const n=this.transitions.getValue();return e.next(new N(t.id,this.serializeUrl(t.extractedUrl),t.source,t.restoredState)),n!==this.transitions.getValue()?f.a:Promise.resolve(t)}),(r=this.ngModule.injector,i=this.configLoader,a=this.urlSerializer,s=this.config,Object(g.a)(t=>function(t,e,n,r,i){return new Ce(t,e,n,r,i).apply()}(r,i,a,t.extractedUrl,s).pipe(Object(m.a)(e=>Object.assign(Object.assign({},t),{urlAfterRedirects:e}))))),Object(R.a)(t=>{this.currentNavigation=Object.assign(Object.assign({},this.currentNavigation),{finalUrl:t.urlAfterRedirects})}),function(t,e,n,r,i){return Object(P.a)(a=>function(t,e,n,r,i=\"emptyOnly\",a=\"legacy\"){try{const s=new Fe(t,e,n,r,i,a).recognize();return null===s?je(new ze):Object(o.a)(s)}catch(s){return je(s)}}(t,e,a.urlAfterRedirects,n(a.urlAfterRedirects),r,i).pipe(Object(m.a)(t=>Object.assign(Object.assign({},a),{targetSnapshot:t}))))}(this.rootComponentType,this.config,t=>this.serializeUrl(t),this.paramsInheritanceStrategy,this.relativeLinkResolution),Object(R.a)(t=>{\"eager\"===this.urlUpdateStrategy&&(t.extras.skipLocationChange||this.setBrowserUrl(t.urlAfterRedirects,!!t.extras.replaceUrl,t.id,t.extras.state),this.browserUrlTree=t.urlAfterRedirects);const n=new V(t.id,this.serializeUrl(t.extractedUrl),this.serializeUrl(t.urlAfterRedirects),t.targetSnapshot);e.next(n)}));var r,i,a,s;if(n&&this.rawUrlTree&&this.urlHandlingStrategy.shouldProcessUrl(this.rawUrlTree)){const{id:n,extractedUrl:r,source:i,restoredState:a,extras:s}=t,l=new N(n,this.serializeUrl(r),i,a);e.next(l);const c=Ft(r,this.rootComponentType).snapshot;return Object(o.a)(Object.assign(Object.assign({},t),{targetSnapshot:c,urlAfterRedirects:r,extras:Object.assign(Object.assign({},s),{skipLocationChange:!1,replaceUrl:!1})}))}return this.rawUrlTree=t.rawUrl,this.browserUrlTree=t.urlAfterRedirects,t.resolve(null),f.a}),Ue(t=>{const{targetSnapshot:e,id:n,extractedUrl:r,rawUrl:i,extras:{skipLocationChange:a,replaceUrl:o}}=t;return this.hooks.beforePreactivation(e,{navigationId:n,appliedUrlTree:r,rawUrlTree:i,skipLocationChange:!!a,replaceUrl:!!o})}),Object(R.a)(t=>{const e=new U(t.id,this.serializeUrl(t.extractedUrl),this.serializeUrl(t.urlAfterRedirects),t.targetSnapshot);this.triggerEvent(e)}),Object(m.a)(t=>Object.assign(Object.assign({},t),{guards:Ie(t.targetSnapshot,t.currentSnapshot,this.rootContexts)})),function(t,e){return Object(P.a)(n=>{const{targetSnapshot:r,currentSnapshot:i,guards:{canActivateChecks:s,canDeactivateChecks:l}}=n;return 0===l.length&&0===s.length?Object(o.a)(Object.assign(Object.assign({},n),{guardsResult:!0})):function(t,e,n,r){return Object(a.a)(t).pipe(Object(P.a)(t=>function(t,e,n,r,i){const a=e&&e.routeConfig?e.routeConfig.canDeactivate:null;if(!a||0===a.length)return Object(o.a)(!0);const s=a.map(a=>{const o=Pe(a,e,i);let s;if(function(t){return t&&se(t.canDeactivate)}(o))s=ht(o.canDeactivate(t,e,n,r));else{if(!se(o))throw new Error(\"Invalid CanDeactivate guard\");s=ht(o(t,e,n,r))}return s.pipe(Object(I.a)())});return Object(o.a)(s).pipe(ue())}(t.component,t.route,n,e,r)),Object(I.a)(t=>!0!==t,!0))}(l,r,i,t).pipe(Object(P.a)(n=>n&&\"boolean\"==typeof n?function(t,e,n,r){return Object(a.a)(e).pipe(Object(T.a)(e=>Object(h.a)(function(t,e){return null!==t&&e&&e(new J(t)),Object(o.a)(!0)}(e.route.parent,r),function(t,e){return null!==t&&e&&e(new $(t)),Object(o.a)(!0)}(e.route,r),function(t,e,n){const r=e[e.length-1],i=e.slice(0,e.length-1).reverse().map(t=>function(t){const e=t.routeConfig?t.routeConfig.canActivateChild:null;return e&&0!==e.length?{node:t,guards:e}:null}(t)).filter(t=>null!==t).map(e=>Object(d.a)(()=>{const i=e.guards.map(i=>{const a=Pe(i,e.node,n);let o;if(function(t){return t&&se(t.canActivateChild)}(a))o=ht(a.canActivateChild(r,t));else{if(!se(a))throw new Error(\"Invalid CanActivateChild guard\");o=ht(a(r,t))}return o.pipe(Object(I.a)())});return Object(o.a)(i).pipe(ue())}));return Object(o.a)(i).pipe(ue())}(t,e.path,n),function(t,e,n){const r=e.routeConfig?e.routeConfig.canActivate:null;if(!r||0===r.length)return Object(o.a)(!0);const i=r.map(r=>Object(d.a)(()=>{const i=Pe(r,e,n);let a;if(function(t){return t&&se(t.canActivate)}(i))a=ht(i.canActivate(e,t));else{if(!se(i))throw new Error(\"Invalid CanActivate guard\");a=ht(i(e,t))}return a.pipe(Object(I.a)())}));return Object(o.a)(i).pipe(ue())}(t,e.route,n))),Object(I.a)(t=>!0!==t,!0))}(r,s,t,e):Object(o.a)(n)),Object(m.a)(t=>Object.assign(Object.assign({},n),{guardsResult:t})))})}(this.ngModule.injector,t=>this.triggerEvent(t)),Object(R.a)(t=>{if(le(t.guardsResult)){const e=it(`Redirecting to \"${this.serializeUrl(t.guardsResult)}\"`);throw e.url=t.guardsResult,e}const e=new W(t.id,this.serializeUrl(t.extractedUrl),this.serializeUrl(t.urlAfterRedirects),t.targetSnapshot,!!t.guardsResult);this.triggerEvent(e)}),Object(k.a)(t=>{if(!t.guardsResult){this.resetUrlToCurrentUrlTree();const n=new Y(t.id,this.serializeUrl(t.extractedUrl),\"\");return e.next(n),t.resolve(!1),!1}return!0}),Ue(t=>{if(t.guards.canActivateChecks.length)return Object(o.a)(t).pipe(Object(R.a)(t=>{const e=new q(t.id,this.serializeUrl(t.extractedUrl),this.serializeUrl(t.urlAfterRedirects),t.targetSnapshot);this.triggerEvent(e)}),Object(g.a)(t=>{let n=!1;return Object(o.a)(t).pipe((r=this.paramsInheritanceStrategy,i=this.ngModule.injector,Object(P.a)(t=>{const{targetSnapshot:e,guards:{canActivateChecks:n}}=t;if(!n.length)return Object(o.a)(t);let s=0;return Object(a.a)(n).pipe(Object(T.a)(t=>function(t,e,n,r){return function(t,e,n,r){const i=Object.keys(t);if(0===i.length)return Object(o.a)({});const s={};return Object(a.a)(i).pipe(Object(P.a)(i=>function(t,e,n,r){const i=Pe(t,e,r);return ht(i.resolve?i.resolve(e,n):i(e,n))}(t[i],e,n,r).pipe(Object(R.a)(t=>{s[i]=t}))),A(1),Object(P.a)(()=>Object.keys(s).length===i.length?Object(o.a)(s):f.a))}(t._resolve,t,e,r).pipe(Object(m.a)(e=>(t._resolvedData=e,t.data=Object.assign(Object.assign({},t.data),Bt(t,n).resolve),null)))}(t.route,e,r,i)),Object(R.a)(()=>s++),A(1),Object(P.a)(e=>s===n.length?Object(o.a)(t):f.a))})),Object(R.a)({next:()=>n=!0,complete:()=>{if(!n){const n=new Y(t.id,this.serializeUrl(t.extractedUrl),\"At least one route resolver didn't emit any value.\");e.next(n),t.resolve(!1)}}}));var r,i}),Object(R.a)(t=>{const e=new G(t.id,this.serializeUrl(t.extractedUrl),this.serializeUrl(t.urlAfterRedirects),t.targetSnapshot);this.triggerEvent(e)}))}),Ue(t=>{const{targetSnapshot:e,id:n,extractedUrl:r,rawUrl:i,extras:{skipLocationChange:a,replaceUrl:o}}=t;return this.hooks.afterPreactivation(e,{navigationId:n,appliedUrlTree:r,rawUrlTree:i,skipLocationChange:!!a,replaceUrl:!!o})}),Object(m.a)(t=>{const e=function(t,e,n){const r=function t(e,n,r){if(r&&e.shouldReuseRoute(n.value,r.value.snapshot)){const i=r.value;i._futureSnapshot=n.value;const a=function(e,n,r){return n.children.map(n=>{for(const i of r.children)if(e.shouldReuseRoute(n.value,i.value.snapshot))return t(e,n,i);return t(e,n)})}(e,n,r);return new Rt(i,a)}{const r=e.retrieve(n.value);if(r){const t=r.route;return function t(e,n){if(e.value.routeConfig!==n.value.routeConfig)throw new Error(\"Cannot reattach ActivatedRouteSnapshot created from a different route\");if(e.children.length!==n.children.length)throw new Error(\"Cannot reattach ActivatedRouteSnapshot with a different number of children\");n.value._futureSnapshot=e.value;for(let r=0;r<e.children.length;++r)t(e.children[r],n.children[r])}(n,t),t}{const r=new Nt(new s.a((i=n.value).url),new s.a(i.params),new s.a(i.queryParams),new s.a(i.fragment),new s.a(i.data),i.outlet,i.component,i),a=n.children.map(n=>t(e,n));return new Rt(r,a)}}var i}(t,e._root,n?n._root:void 0);return new jt(r,e)}(this.routeReuseStrategy,t.targetSnapshot,t.currentRouterState);return Object.assign(Object.assign({},t),{targetRouterState:e})}),Object(R.a)(t=>{this.currentUrlTree=t.urlAfterRedirects,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,t.rawUrl),this.routerState=t.targetRouterState,\"deferred\"===this.urlUpdateStrategy&&(t.extras.skipLocationChange||this.setBrowserUrl(this.rawUrlTree,!!t.extras.replaceUrl,t.id,t.extras.state),this.browserUrlTree=t.urlAfterRedirects)}),(i=this.rootContexts,l=this.routeReuseStrategy,c=t=>this.triggerEvent(t),Object(m.a)(t=>(new ie(l,t.targetRouterState,t.currentRouterState,c).activate(i),t))),Object(R.a)({next(){n=!0},complete(){n=!0}}),Object(z.a)(()=>{if(!n&&!r){this.resetUrlToCurrentUrlTree();const n=new Y(t.id,this.serializeUrl(t.extractedUrl),`Navigation ID ${t.id} is not equal to the current navigation id ${this.navigationId}`);e.next(n),t.resolve(!1)}this.currentNavigation=null}),Object(M.a)(n=>{if(r=!0,(i=n)&&i.ngNavigationCancelingError){const r=le(n.url);r||(this.navigated=!0,this.resetStateAndUrl(t.currentRouterState,t.currentUrlTree,t.rawUrl));const i=new Y(t.id,this.serializeUrl(t.extractedUrl),n.message);e.next(i),r?setTimeout(()=>{const e=this.urlHandlingStrategy.merge(n.url,this.rawUrlTree);this.scheduleNavigation(e,\"imperative\",null,{skipLocationChange:t.extras.skipLocationChange,replaceUrl:\"eager\"===this.urlUpdateStrategy},{resolve:t.resolve,reject:t.reject,promise:t.promise})},0):t.resolve(!1)}else{this.resetStateAndUrl(t.currentRouterState,t.currentUrlTree,t.rawUrl);const r=new H(t.id,this.serializeUrl(t.extractedUrl),n);e.next(r);try{t.resolve(this.errorHandler(n))}catch(a){t.reject(a)}}var i;return f.a}));var i,l,c}))}resetRootComponentType(t){this.rootComponentType=t,this.routerState.root.component=this.rootComponentType}getTransition(){const t=this.transitions.value;return t.urlAfterRedirects=this.browserUrlTree,t}setTransition(t){this.transitions.next(Object.assign(Object.assign({},this.getTransition()),t))}initialNavigation(){this.setUpLocationChangeListener(),0===this.navigationId&&this.navigateByUrl(this.location.path(!0),{replaceUrl:!0})}setUpLocationChangeListener(){this.locationSubscription||(this.locationSubscription=this.location.subscribe(t=>{const e=this.extractLocationChangeInfoFromEvent(t);this.shouldScheduleNavigation(this.lastLocationChangeInfo,e)&&setTimeout(()=>{const{source:t,state:n,urlTree:r}=e,i={replaceUrl:!0};if(n){const t=Object.assign({},n);delete t.navigationId,0!==Object.keys(t).length&&(i.state=t)}this.scheduleNavigation(r,t,n,i)},0),this.lastLocationChangeInfo=e}))}extractLocationChangeInfoFromEvent(t){var e;return{source:\"popstate\"===t.type?\"popstate\":\"hashchange\",urlTree:this.parseUrl(t.url),state:(null===(e=t.state)||void 0===e?void 0:e.navigationId)?t.state:null,transitionId:this.getTransition().id}}shouldScheduleNavigation(t,e){if(!t)return!0;const n=e.urlTree.toString()===t.urlTree.toString();return!(e.transitionId===t.transitionId&&n&&(\"hashchange\"===e.source&&\"popstate\"===t.source||\"popstate\"===e.source&&\"hashchange\"===t.source))}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return this.currentNavigation}triggerEvent(t){this.events.next(t)}resetConfig(t){de(t),this.config=t.map(me),this.navigated=!1,this.lastSuccessfulId=-1}ngOnDestroy(){this.dispose()}dispose(){this.locationSubscription&&(this.locationSubscription.unsubscribe(),this.locationSubscription=void 0)}createUrlTree(t,e={}){const{relativeTo:n,queryParams:r,fragment:i,queryParamsHandling:a,preserveFragment:o}=e,s=n||this.routerState.root,l=o?this.currentUrlTree.fragment:i;let c=null;switch(a){case\"merge\":c=Object.assign(Object.assign({},this.currentUrlTree.queryParams),r);break;case\"preserve\":c=this.currentUrlTree.queryParams;break;default:c=r||null}return null!==c&&(c=this.removeEmptyProps(c)),function(t,e,n,r,i){if(0===n.length)return Zt(e.root,e.root,e,r,i);const a=function(t){if(\"string\"==typeof t[0]&&1===t.length&&\"/\"===t[0])return new Jt(!0,0,t);let e=0,n=!1;const r=t.reduce((t,r,i)=>{if(\"object\"==typeof r&&null!=r){if(r.outlets){const e={};return ut(r.outlets,(t,n)=>{e[n]=\"string\"==typeof t?t.split(\"/\"):t}),[...t,{outlets:e}]}if(r.segmentPath)return[...t,r.segmentPath]}return\"string\"!=typeof r?[...t,r]:0===i?(r.split(\"/\").forEach((r,i)=>{0==i&&\".\"===r||(0==i&&\"\"===r?n=!0:\"..\"===r?e++:\"\"!=r&&t.push(r))}),t):[...t,r]},[]);return new Jt(n,e,r)}(n);if(a.toRoot())return Zt(e.root,new pt([],{}),e,r,i);const o=function(t,e,n){if(t.isAbsolute)return new Kt(e.root,!0,0);if(-1===n.snapshot._lastPathIndex){const t=n.snapshot._urlSegment;return new Kt(t,t===e.root,0)}const r=Gt(t.commands[0])?0:1;return function(t,e,n){let r=t,i=e,a=n;for(;a>i;){if(a-=i,r=r.parent,!r)throw new Error(\"Invalid number of '../'\");i=r.segments.length}return new Kt(r,!1,i-a)}(n.snapshot._urlSegment,n.snapshot._lastPathIndex+r,t.numberOfDoubleDots)}(a,e,t),s=o.processChildren?Qt(o.segmentGroup,o.index,a.commands):$t(o.segmentGroup,o.index,a.commands);return Zt(o.segmentGroup,s,e,r,i)}(s,this.currentUrlTree,t,c,l)}navigateByUrl(t,e={skipLocationChange:!1}){const n=le(t)?t:this.parseUrl(t),r=this.urlHandlingStrategy.merge(n,this.rawUrlTree);return this.scheduleNavigation(r,\"imperative\",null,e)}navigate(t,e={skipLocationChange:!1}){return function(t){for(let e=0;e<t.length;e++){const n=t[e];if(null==n)throw new Error(`The requested path contains ${n} segment at index ${e}`)}}(t),this.navigateByUrl(this.createUrlTree(t,e),e)}serializeUrl(t){return this.urlSerializer.serialize(t)}parseUrl(t){let e;try{e=this.urlSerializer.parse(t)}catch(n){e=this.malformedUriErrorHandler(n,this.urlSerializer,t)}return e}isActive(t,e){if(le(t))return dt(this.currentUrlTree,t,e);const n=this.parseUrl(t);return dt(this.currentUrlTree,n,e)}removeEmptyProps(t){return Object.keys(t).reduce((e,n)=>{const r=t[n];return null!=r&&(e[n]=r),e},{})}processNavigations(){this.navigations.subscribe(t=>{this.navigated=!0,this.lastSuccessfulId=t.id,this.events.next(new B(t.id,this.serializeUrl(t.extractedUrl),this.serializeUrl(this.currentUrlTree))),this.lastSuccessfulNavigation=this.currentNavigation,this.currentNavigation=null,t.resolve(!0)},t=>{this.console.warn(\"Unhandled Navigation Error: \")})}scheduleNavigation(t,e,n,r,i){const a=this.getTransition(),o=\"imperative\"!==e&&\"imperative\"===(null==a?void 0:a.source),s=(this.lastSuccessfulId===a.id||this.currentNavigation?a.rawUrl:a.urlAfterRedirects).toString()===t.toString();if(o&&s)return Promise.resolve(!0);let l,c,u;i?(l=i.resolve,c=i.reject,u=i.promise):u=new Promise((t,e)=>{l=t,c=e});const h=++this.navigationId;return this.setTransition({id:h,source:e,restoredState:n,currentUrlTree:this.currentUrlTree,currentRawUrl:this.rawUrlTree,rawUrl:t,extras:r,resolve:l,reject:c,promise:u,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),u.catch(t=>Promise.reject(t))}setBrowserUrl(t,e,n,r){const i=this.urlSerializer.serialize(t);r=r||{},this.location.isCurrentPathEqualTo(i)||e?this.location.replaceState(i,\"\",Object.assign(Object.assign({},r),{navigationId:n})):this.location.go(i,\"\",Object.assign(Object.assign({},r),{navigationId:n}))}resetStateAndUrl(t,e,n){this.routerState=t,this.currentUrlTree=e,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,n),this.resetUrlToCurrentUrlTree()}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),\"\",{navigationId:this.lastSuccessfulId})}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(i.X),i.hc(yt),i.hc(Ze),i.hc(r.j),i.hc(i.x),i.hc(i.E),i.hc(i.k),i.hc(void 0))},t.\\u0275prov=i.Tb({token:t,factory:t.\\u0275fac}),t})(),en=(()=>{class t{constructor(t,e,n,r,i){this.router=t,this.route=e,this.commands=[],this.onChanges=new p.a,null==n&&r.setAttribute(i.nativeElement,\"tabindex\",\"0\")}ngOnChanges(t){this.onChanges.next(this)}set routerLink(t){this.commands=null!=t?Array.isArray(t)?t:[t]:[]}onClick(){const t={skipLocationChange:rn(this.skipLocationChange),replaceUrl:rn(this.replaceUrl),state:this.state};return this.router.navigateByUrl(this.urlTree,t),!0}get urlTree(){return this.router.createUrlTree(this.commands,{relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,queryParamsHandling:this.queryParamsHandling,preserveFragment:rn(this.preserveFragment)})}}return t.\\u0275fac=function(e){return new(e||t)(i.Xb(tn),i.Xb(Nt),i.ic(\"tabindex\"),i.Xb(i.O),i.Xb(i.p))},t.\\u0275dir=i.Sb({type:t,selectors:[[\"\",\"routerLink\",\"\",5,\"a\",5,\"area\"]],hostBindings:function(t,e){1&t&&i.lc(\"click\",(function(){return e.onClick()}))},inputs:{routerLink:\"routerLink\",queryParams:\"queryParams\",fragment:\"fragment\",queryParamsHandling:\"queryParamsHandling\",preserveFragment:\"preserveFragment\",skipLocationChange:\"skipLocationChange\",replaceUrl:\"replaceUrl\",state:\"state\"},features:[i.Jb]}),t})(),nn=(()=>{class t{constructor(t,e,n){this.router=t,this.route=e,this.locationStrategy=n,this.commands=[],this.onChanges=new p.a,this.subscription=t.events.subscribe(t=>{t instanceof B&&this.updateTargetUrlAndHref()})}set routerLink(t){this.commands=null!=t?Array.isArray(t)?t:[t]:[]}ngOnChanges(t){this.updateTargetUrlAndHref(),this.onChanges.next(this)}ngOnDestroy(){this.subscription.unsubscribe()}onClick(t,e,n,r,i){if(0!==t||e||n||r||i)return!0;if(\"string\"==typeof this.target&&\"_self\"!=this.target)return!0;const a={skipLocationChange:rn(this.skipLocationChange),replaceUrl:rn(this.replaceUrl),state:this.state};return this.router.navigateByUrl(this.urlTree,a),!1}updateTargetUrlAndHref(){this.href=this.locationStrategy.prepareExternalUrl(this.router.serializeUrl(this.urlTree))}get urlTree(){return this.router.createUrlTree(this.commands,{relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,queryParamsHandling:this.queryParamsHandling,preserveFragment:rn(this.preserveFragment)})}}return t.\\u0275fac=function(e){return new(e||t)(i.Xb(tn),i.Xb(Nt),i.Xb(r.k))},t.\\u0275dir=i.Sb({type:t,selectors:[[\"a\",\"routerLink\",\"\"],[\"area\",\"routerLink\",\"\"]],hostVars:2,hostBindings:function(t,e){1&t&&i.lc(\"click\",(function(t){return e.onClick(t.button,t.ctrlKey,t.shiftKey,t.altKey,t.metaKey)})),2&t&&(i.gc(\"href\",e.href,i.Fc),i.Mb(\"target\",e.target))},inputs:{routerLink:\"routerLink\",target:\"target\",queryParams:\"queryParams\",fragment:\"fragment\",queryParamsHandling:\"queryParamsHandling\",preserveFragment:\"preserveFragment\",skipLocationChange:\"skipLocationChange\",replaceUrl:\"replaceUrl\",state:\"state\"},features:[i.Jb]}),t})();function rn(t){return\"\"===t||!!t}let an=(()=>{class t{constructor(t,e,n,r,i,a){this.router=t,this.element=e,this.renderer=n,this.cdr=r,this.link=i,this.linkWithHref=a,this.classes=[],this.isActive=!1,this.routerLinkActiveOptions={exact:!1},this.routerEventsSubscription=t.events.subscribe(t=>{t instanceof B&&this.update()})}ngAfterContentInit(){Object(o.a)(this.links.changes,this.linksWithHrefs.changes,Object(o.a)(null)).pipe(Object(j.a)()).subscribe(t=>{this.update(),this.subscribeToEachLinkOnChanges()})}subscribeToEachLinkOnChanges(){var t;null===(t=this.linkInputChangesSubscription)||void 0===t||t.unsubscribe();const e=[...this.links.toArray(),...this.linksWithHrefs.toArray(),this.link,this.linkWithHref].filter(t=>!!t).map(t=>t.onChanges);this.linkInputChangesSubscription=Object(a.a)(e).pipe(Object(j.a)()).subscribe(t=>{this.isActive!==this.isLinkActive(this.router)(t)&&this.update()})}set routerLinkActive(t){const e=Array.isArray(t)?t:t.split(\" \");this.classes=e.filter(t=>!!t)}ngOnChanges(t){this.update()}ngOnDestroy(){var t;this.routerEventsSubscription.unsubscribe(),null===(t=this.linkInputChangesSubscription)||void 0===t||t.unsubscribe()}update(){this.links&&this.linksWithHrefs&&this.router.navigated&&Promise.resolve().then(()=>{const t=this.hasActiveLinks();this.isActive!==t&&(this.isActive=t,this.cdr.markForCheck(),this.classes.forEach(e=>{t?this.renderer.addClass(this.element.nativeElement,e):this.renderer.removeClass(this.element.nativeElement,e)}))})}isLinkActive(t){return e=>t.isActive(e.urlTree,this.routerLinkActiveOptions.exact)}hasActiveLinks(){const t=this.isLinkActive(this.router);return this.link&&t(this.link)||this.linkWithHref&&t(this.linkWithHref)||this.links.some(t)||this.linksWithHrefs.some(t)}}return t.\\u0275fac=function(e){return new(e||t)(i.Xb(tn),i.Xb(i.p),i.Xb(i.O),i.Xb(i.j),i.Xb(en,8),i.Xb(nn,8))},t.\\u0275dir=i.Sb({type:t,selectors:[[\"\",\"routerLinkActive\",\"\"]],contentQueries:function(t,e,n){if(1&t&&(i.Qb(n,en,!0),i.Qb(n,nn,!0)),2&t){let t;i.Ac(t=i.mc())&&(e.links=t),i.Ac(t=i.mc())&&(e.linksWithHrefs=t)}},inputs:{routerLinkActiveOptions:\"routerLinkActiveOptions\",routerLinkActive:\"routerLinkActive\"},exportAs:[\"routerLinkActive\"],features:[i.Jb]}),t})(),on=(()=>{class t{constructor(t,e,n,r,a){this.parentContexts=t,this.location=e,this.resolver=n,this.changeDetector=a,this.activated=null,this._activatedRoute=null,this.activateEvents=new i.s,this.deactivateEvents=new i.s,this.name=r||et,t.onChildOutletCreated(this.name,this)}ngOnDestroy(){this.parentContexts.onChildOutletDestroyed(this.name)}ngOnInit(){if(!this.activated){const t=this.parentContexts.getContext(this.name);t&&t.route&&(t.attachRef?this.attach(t.attachRef,t.route):this.activateWith(t.route,t.resolver||null))}}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new Error(\"Outlet is not activated\");return this.activated.instance}get activatedRoute(){if(!this.activated)throw new Error(\"Outlet is not activated\");return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new Error(\"Outlet is not activated\");this.location.detach();const t=this.activated;return this.activated=null,this._activatedRoute=null,t}attach(t,e){this.activated=t,this._activatedRoute=e,this.location.insert(t.hostView)}deactivate(){if(this.activated){const t=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(t)}}activateWith(t,e){if(this.isActivated)throw new Error(\"Cannot activate an already activated outlet\");this._activatedRoute=t;const n=(e=e||this.resolver).resolveComponentFactory(t._futureSnapshot.routeConfig.component),r=this.parentContexts.getOrCreateContext(this.name).children,i=new sn(t,r,this.location.injector);this.activated=this.location.createComponent(n,this.location.length,i),this.changeDetector.markForCheck(),this.activateEvents.emit(this.activated.instance)}}return t.\\u0275fac=function(e){return new(e||t)(i.Xb(Ze),i.Xb(i.Z),i.Xb(i.m),i.ic(\"name\"),i.Xb(i.j))},t.\\u0275dir=i.Sb({type:t,selectors:[[\"router-outlet\"]],outputs:{activateEvents:\"activate\",deactivateEvents:\"deactivate\"},exportAs:[\"outlet\"]}),t})();class sn{constructor(t,e,n){this.route=t,this.childContexts=e,this.parent=n}get(t,e){return t===Nt?this.route:t===Ze?this.childContexts:this.parent.get(t,e)}}class ln{}class cn{preload(t,e){return Object(o.a)(null)}}let un=(()=>{class t{constructor(t,e,n,r,i){this.router=t,this.injector=r,this.preloadingStrategy=i,this.loader=new Ge(e,n,e=>t.triggerEvent(new X(e)),e=>t.triggerEvent(new Z(e)))}setUpPreloading(){this.subscription=this.router.events.pipe(Object(k.a)(t=>t instanceof B),Object(T.a)(()=>this.preload())).subscribe(()=>{})}preload(){const t=this.injector.get(i.F);return this.processRoutes(t,this.router.config)}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}processRoutes(t,e){const n=[];for(const r of e)if(r.loadChildren&&!r.canLoad&&r._loadedConfig){const t=r._loadedConfig;n.push(this.processRoutes(t.module,t.routes))}else r.loadChildren&&!r.canLoad?n.push(this.preloadConfig(t,r)):r.children&&n.push(this.processRoutes(t,r.children));return Object(a.a)(n).pipe(Object(j.a)(),Object(m.a)(t=>{}))}preloadConfig(t,e){return this.preloadingStrategy.preload(e,()=>this.loader.load(t.injector,e).pipe(Object(P.a)(t=>(e._loadedConfig=t,this.processRoutes(t.module,t.routes)))))}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(tn),i.hc(i.E),i.hc(i.k),i.hc(i.x),i.hc(ln))},t.\\u0275prov=i.Tb({token:t,factory:t.\\u0275fac}),t})(),hn=(()=>{class t{constructor(t,e,n={}){this.router=t,this.viewportScroller=e,this.options=n,this.lastId=0,this.lastSource=\"imperative\",this.restoredId=0,this.store={},n.scrollPositionRestoration=n.scrollPositionRestoration||\"disabled\",n.anchorScrolling=n.anchorScrolling||\"disabled\"}init(){\"disabled\"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration(\"manual\"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.router.events.subscribe(t=>{t instanceof N?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=t.navigationTrigger,this.restoredId=t.restoredState?t.restoredState.navigationId:0):t instanceof B&&(this.lastId=t.id,this.scheduleScrollEvent(t,this.router.parseUrl(t.urlAfterRedirects).fragment))})}consumeScrollEvents(){return this.router.events.subscribe(t=>{t instanceof tt&&(t.position?\"top\"===this.options.scrollPositionRestoration?this.viewportScroller.scrollToPosition([0,0]):\"enabled\"===this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition(t.position):t.anchor&&\"enabled\"===this.options.anchorScrolling?this.viewportScroller.scrollToAnchor(t.anchor):\"disabled\"!==this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition([0,0]))})}scheduleScrollEvent(t,e){this.router.triggerEvent(new tt(t,\"popstate\"===this.lastSource?this.store[this.restoredId]:null,e))}ngOnDestroy(){this.routerEventsSubscription&&this.routerEventsSubscription.unsubscribe(),this.scrollEventsSubscription&&this.scrollEventsSubscription.unsubscribe()}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(tn),i.hc(r.x),i.hc(void 0))},t.\\u0275prov=i.Tb({token:t,factory:t.\\u0275fac}),t})();const dn=new i.w(\"ROUTER_CONFIGURATION\"),fn=new i.w(\"ROUTER_FORROOT_GUARD\"),pn=[r.j,{provide:yt,useClass:vt},{provide:tn,useFactory:function(t,e,n,i,a,o,s,l={},c,u){const h=new tn(null,t,e,n,i,a,o,lt(s));if(c&&(h.urlHandlingStrategy=c),u&&(h.routeReuseStrategy=u),function(t,e){t.errorHandler&&(e.errorHandler=t.errorHandler),t.malformedUriErrorHandler&&(e.malformedUriErrorHandler=t.malformedUriErrorHandler),t.onSameUrlNavigation&&(e.onSameUrlNavigation=t.onSameUrlNavigation),t.paramsInheritanceStrategy&&(e.paramsInheritanceStrategy=t.paramsInheritanceStrategy),t.relativeLinkResolution&&(e.relativeLinkResolution=t.relativeLinkResolution),t.urlUpdateStrategy&&(e.urlUpdateStrategy=t.urlUpdateStrategy)}(l,h),l.enableTracing){const t=Object(r.C)();h.events.subscribe(e=>{t.logGroup(\"Router Event: \"+e.constructor.name),t.log(e.toString()),t.log(e),t.logGroupEnd()})}return h},deps:[yt,Ze,r.j,i.x,i.E,i.k,qe,dn,[class{},new i.I],[class{},new i.I]]},Ze,{provide:Nt,useFactory:function(t){return t.routerState.root},deps:[tn]},{provide:i.E,useClass:i.U},un,cn,class{preload(t,e){return e().pipe(Object(M.a)(()=>Object(o.a)(null)))}},{provide:dn,useValue:{enableTracing:!1}}];function mn(){return new i.G(\"Router\",tn)}let gn=(()=>{class t{constructor(t,e){}static forRoot(e,n){return{ngModule:t,providers:[pn,bn(e),{provide:fn,useFactory:_n,deps:[[tn,new i.I,new i.T]]},{provide:dn,useValue:n||{}},{provide:r.k,useFactory:vn,deps:[r.v,[new i.u(r.a),new i.I],dn]},{provide:hn,useFactory:yn,deps:[tn,r.x,dn]},{provide:ln,useExisting:n&&n.preloadingStrategy?n.preloadingStrategy:cn},{provide:i.G,multi:!0,useFactory:mn},[xn,{provide:i.d,multi:!0,useFactory:wn,deps:[xn]},{provide:Mn,useFactory:kn,deps:[xn]},{provide:i.b,multi:!0,useExisting:Mn}]]}}static forChild(e){return{ngModule:t,providers:[bn(e)]}}}return t.\\u0275mod=i.Vb({type:t}),t.\\u0275inj=i.Ub({factory:function(e){return new(e||t)(i.hc(fn,8),i.hc(tn,8))}}),t})();function yn(t,e,n){return n.scrollOffset&&e.setOffset(n.scrollOffset),new hn(t,e,n)}function vn(t,e,n={}){return n.useHash?new r.g(t,e):new r.u(t,e)}function _n(t){return\"guarded\"}function bn(t){return[{provide:i.a,multi:!0,useValue:t},{provide:qe,multi:!0,useValue:t}]}let xn=(()=>{class t{constructor(t){this.injector=t,this.initNavigation=!1,this.resultOfPreactivationDone=new p.a}appInitializer(){return this.injector.get(r.i,Promise.resolve(null)).then(()=>{let t=null;const e=new Promise(e=>t=e),n=this.injector.get(tn),r=this.injector.get(dn);return\"disabled\"===r.initialNavigation?(n.setUpLocationChangeListener(),t(!0)):\"enabled\"===r.initialNavigation||\"enabledBlocking\"===r.initialNavigation?(n.hooks.afterPreactivation=()=>this.initNavigation?Object(o.a)(null):(this.initNavigation=!0,t(!0),this.resultOfPreactivationDone),n.initialNavigation()):t(!0),e})}bootstrapListener(t){const e=this.injector.get(dn),n=this.injector.get(un),r=this.injector.get(hn),a=this.injector.get(tn),o=this.injector.get(i.g);t===o.components[0]&&(\"enabledNonBlocking\"!==e.initialNavigation&&void 0!==e.initialNavigation||a.initialNavigation(),n.setUpPreloading(),r.init(),a.resetRootComponentType(o.componentTypes[0]),this.resultOfPreactivationDone.next(null),this.resultOfPreactivationDone.complete())}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(i.x))},t.\\u0275prov=i.Tb({token:t,factory:t.\\u0275fac}),t})();function wn(t){return t.appInitializer.bind(t)}function kn(t){return t.bootstrapListener.bind(t)}const Mn=new i.w(\"Router Initializer\")},\"u3+B\":function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return l})),n.d(e,\"b\",(function(){return u})),n.d(e,\"c\",(function(){return s}));var r=n(\"fXoL\"),i=n(\"ofXK\"),a=n(\"mrSG\");const o=[\"plot\"];let s=(()=>{class t{static setModuleName(e){t.moduleName=e}static getModuleName(){return t.moduleName}static setPlotly(e){if(\"object\"==typeof e&&\"function\"!=typeof e.react)throw new Error(\"Invalid plotly.js version. Please, use any version above 1.40.0\");t.plotly=e}static insert(e){return-1===t.instances.indexOf(e)&&t.instances.push(e),e}static remove(e){const n=t.instances.indexOf(e);n>=0&&(t.instances.splice(n,1),t.plotly.purge(e))}getInstanceByDivId(e){for(const n of t.instances)if(n&&n.id===e)return n}getPlotly(){if(void 0===t.plotly)throw new Error(\"ViaCDN\"===t.moduleName?\"Error loading Peer dependency plotly.js from CDN url\":\"Peer dependency plotly.js isn't installed\");return t.plotly}waitFor(t){return new Promise(e=>{const n=()=>{t()?e():setTimeout(n,10)};n()})}newPlot(e,n,r,i,o){return Object(a.a)(this,void 0,void 0,(function*(){if(yield this.waitFor(()=>\"waiting\"!==this.getPlotly()),o){const a={data:n,layout:r,config:i,frames:o};return this.getPlotly().newPlot(e,a).then(()=>t.insert(e))}return this.getPlotly().newPlot(e,n,r,i).then(()=>t.insert(e))}))}plot(t,e,n,r,i){if(i){const a={data:e,layout:n,config:r,frames:i};return this.getPlotly().plot(t,a)}return this.getPlotly().plot(t,e,n,r)}update(t,e,n,r,i){if(i){const a={data:e,layout:n,config:r,frames:i};return this.getPlotly().react(t,a)}return this.getPlotly().react(t,e,n,r)}resize(t){return this.getPlotly().Plots.resize(t)}}return t.\\u0275fac=function(e){return new(e||t)},t.instances=[],t.plotly=void 0,t.moduleName=void 0,t.\\u0275prov=Object(r.Tb)({factory:function(){return new t},token:t,providedIn:\"root\"}),t})(),l=(()=>{class t{constructor(t,e,n){this.plotly=t,this.iterableDiffers=e,this.keyValueDiffers=n,this.defaultClassName=\"js-plotly-plot\",this.revision=0,this.debug=!1,this.useResizeHandler=!1,this.updateOnLayoutChange=!0,this.updateOnDataChange=!0,this.updateOnlyWithRevision=!1,this.initialized=new r.s,this.update=new r.s,this.purge=new r.s,this.error=new r.s,this.afterExport=new r.s,this.afterPlot=new r.s,this.animated=new r.s,this.animatingFrame=new r.s,this.animationInterrupted=new r.s,this.autoSize=new r.s,this.beforeExport=new r.s,this.buttonClicked=new r.s,this.click=new r.s,this.plotlyClick=new r.s,this.clickAnnotation=new r.s,this.deselect=new r.s,this.doubleClick=new r.s,this.framework=new r.s,this.hover=new r.s,this.legendClick=new r.s,this.legendDoubleClick=new r.s,this.react=new r.s,this.relayout=new r.s,this.restyle=new r.s,this.redraw=new r.s,this.selected=new r.s,this.selecting=new r.s,this.sliderChange=new r.s,this.sliderEnd=new r.s,this.sliderStart=new r.s,this.transitioning=new r.s,this.transitionInterrupted=new r.s,this.unhover=new r.s,this.relayouting=new r.s,this.treemapclick=new r.s,this.sunburstclick=new r.s,this.eventNames=[\"afterExport\",\"afterPlot\",\"animated\",\"animatingFrame\",\"animationInterrupted\",\"autoSize\",\"beforeExport\",\"buttonClicked\",\"clickAnnotation\",\"deselect\",\"doubleClick\",\"framework\",\"hover\",\"legendClick\",\"legendDoubleClick\",\"react\",\"relayout\",\"restyle\",\"redraw\",\"selected\",\"selecting\",\"sliderChange\",\"sliderEnd\",\"sliderStart\",\"transitioning\",\"transitionInterrupted\",\"unhover\",\"relayouting\",\"treemapclick\",\"sunburstclick\"]}ngOnInit(){this.createPlot().then(()=>{const t=this.createFigure();this.initialized.emit(t)}),this.click.observers.length>0&&console.error(\"DEPRECATED: Reconsider using `(plotlyClick)` instead of `(click)` to avoid event conflict. Please check https://github.com/plotly/angular-plotly.js#FAQ\")}ngOnDestroy(){\"function\"==typeof this.resizeHandler&&(this.getWindow().removeEventListener(\"resize\",this.resizeHandler),this.resizeHandler=void 0);const t=this.createFigure();this.purge.emit(t),s.remove(this.plotlyInstance)}ngOnChanges(t){let e=!1;const n=t.revision;n&&!n.isFirstChange()&&(e=!0);const r=t.debug;r&&!r.isFirstChange()&&(e=!0),e&&this.updatePlot(),this.updateWindowResizeHandler()}ngDoCheck(){if(this.updateOnlyWithRevision)return!1;let t=!1;this.updateOnLayoutChange&&(this.layoutDiffer?this.layoutDiffer.diff(this.layout)&&(t=!0):this.layoutDiffer=this.layout?this.keyValueDiffers.find(this.layout).create():void 0),this.updateOnDataChange&&(this.dataDiffer?this.dataDiffer.diff(this.data)&&(t=!0):this.dataDiffer=Array.isArray(this.data)?this.iterableDiffers.find(this.data).create(this.dataDifferTrackBy):void 0),t&&this.plotlyInstance&&this.updatePlot()}getWindow(){return window}getClassName(){let t=[this.defaultClassName];return Array.isArray(this.className)?t=t.concat(this.className):this.className&&t.push(this.className),t.join(\" \")}createPlot(){return this.plotly.newPlot(this.plotEl.nativeElement,this.data,this.layout,this.config,this.frames).then(t=>{this.plotlyInstance=t,this.getWindow().gd=this.debug?t:void 0,this.eventNames.forEach(e=>{const n=\"plotly_\"+e.toLowerCase();t.on(n,t=>this[e].emit(t))}),t.on(\"plotly_click\",t=>{this.click.emit(t),this.plotlyClick.emit(t)}),this.updateWindowResizeHandler()},t=>{console.error(\"Error while plotting:\",t),this.error.emit(t)})}createFigure(){const t=this.plotlyInstance;return{data:t.data,layout:t.layout,frames:t._transitionData?t._transitionData._frames:null}}updatePlot(){if(!this.plotlyInstance){const t=new Error(\"Plotly component wasn't initialized\");throw this.error.emit(t),t}const t=Object.assign({},this.layout);return this.plotly.update(this.plotlyInstance,this.data,t,this.config,this.frames).then(()=>{const t=this.createFigure();this.update.emit(t)},t=>{console.error(\"Error while updating plot:\",t),this.error.emit(t)})}updateWindowResizeHandler(){this.useResizeHandler?void 0===this.resizeHandler&&(this.resizeHandler=()=>this.plotly.resize(this.plotlyInstance),this.getWindow().addEventListener(\"resize\",this.resizeHandler)):\"function\"==typeof this.resizeHandler&&(this.getWindow().removeEventListener(\"resize\",this.resizeHandler),this.resizeHandler=void 0)}dataDifferTrackBy(t,e){const n=Object.assign({},e,{uid:\"\"});return JSON.stringify(n)}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(s),r.Xb(r.z),r.Xb(r.A))},t.\\u0275cmp=r.Rb({type:t,selectors:[[\"plotly-plot\"]],viewQuery:function(t,e){if(1&t&&r.Ic(o,!0),2&t){let t;r.Ac(t=r.mc())&&(e.plotEl=t.first)}},inputs:{revision:\"revision\",debug:\"debug\",useResizeHandler:\"useResizeHandler\",updateOnLayoutChange:\"updateOnLayoutChange\",updateOnDataChange:\"updateOnDataChange\",updateOnlyWithRevision:\"updateOnlyWithRevision\",data:\"data\",layout:\"layout\",config:\"config\",frames:\"frames\",style:\"style\",divId:\"divId\",className:\"className\"},outputs:{initialized:\"initialized\",update:\"update\",purge:\"purge\",error:\"error\",afterExport:\"afterExport\",afterPlot:\"afterPlot\",animated:\"animated\",animatingFrame:\"animatingFrame\",animationInterrupted:\"animationInterrupted\",autoSize:\"autoSize\",beforeExport:\"beforeExport\",buttonClicked:\"buttonClicked\",click:\"click\",plotlyClick:\"plotlyClick\",clickAnnotation:\"clickAnnotation\",deselect:\"deselect\",doubleClick:\"doubleClick\",framework:\"framework\",hover:\"hover\",legendClick:\"legendClick\",legendDoubleClick:\"legendDoubleClick\",react:\"react\",relayout:\"relayout\",restyle:\"restyle\",redraw:\"redraw\",selected:\"selected\",selecting:\"selecting\",sliderChange:\"sliderChange\",sliderEnd:\"sliderEnd\",sliderStart:\"sliderStart\",transitioning:\"transitioning\",transitionInterrupted:\"transitionInterrupted\",unhover:\"unhover\",relayouting:\"relayouting\",treemapclick:\"treemapclick\",sunburstclick:\"sunburstclick\"},features:[r.Kb([s]),r.Jb],decls:2,vars:3,consts:[[3,\"className\",\"ngStyle\"],[\"plot\",\"\"]],template:function(t,e){1&t&&r.Yb(0,\"div\",0,1),2&t&&(r.vc(\"className\",e.getClassName())(\"ngStyle\",e.style),r.Mb(\"id\",e.divId))},directives:[i.p],encapsulation:2}),t})(),c=(()=>{class t{constructor(){}}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},providers:[s],imports:[[i.c]]}),t})(),u=(()=>{class t{constructor(){if(!this.isValid())throw new Error(\"Invalid PlotlyJS object. Please check https://github.com/plotly/angular-plotly.js#quick-start to see how to add PlotlyJS to your project.\");s.setPlotly(t.plotlyjs)}isValid(){return void 0!==t.plotlyjs&&\"function\"==typeof t.plotlyjs.plot}}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},providers:[s],imports:[[i.c,c],c]}),t.plotlyjs={},t})()},u3GI:function(t,e,n){!function(t){\"use strict\";function e(t,e,n,r){var i={m:[\"eine Minute\",\"einer Minute\"],h:[\"eine Stunde\",\"einer Stunde\"],d:[\"ein Tag\",\"einem Tag\"],dd:[t+\" Tage\",t+\" Tagen\"],w:[\"eine Woche\",\"einer Woche\"],M:[\"ein Monat\",\"einem Monat\"],MM:[t+\" Monate\",t+\" Monaten\"],y:[\"ein Jahr\",\"einem Jahr\"],yy:[t+\" Jahre\",t+\" Jahren\"]};return e?i[n][0]:i[n][1]}t.defineLocale(\"de-ch\",{months:\"Januar_Februar_M\\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jan._Feb._M\\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\".split(\"_\"),weekdaysShort:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysMin:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd, D. MMMM YYYY HH:mm\"},calendar:{sameDay:\"[heute um] LT [Uhr]\",sameElse:\"L\",nextDay:\"[morgen um] LT [Uhr]\",nextWeek:\"dddd [um] LT [Uhr]\",lastDay:\"[gestern um] LT [Uhr]\",lastWeek:\"[letzten] dddd [um] LT [Uhr]\"},relativeTime:{future:\"in %s\",past:\"vor %s\",s:\"ein paar Sekunden\",ss:\"%d Sekunden\",m:e,mm:\"%d Minuten\",h:e,hh:\"%d Stunden\",d:e,dd:e,w:e,ww:\"%d Wochen\",M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},u47x:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return Z})),n.d(e,\"b\",(function(){return A})),n.d(e,\"c\",(function(){return k})),n.d(e,\"d\",(function(){return F})),n.d(e,\"e\",(function(){return U})),n.d(e,\"f\",(function(){return P})),n.d(e,\"g\",(function(){return L})),n.d(e,\"h\",(function(){return H})),n.d(e,\"i\",(function(){return I})),n.d(e,\"j\",(function(){return X})),n.d(e,\"k\",(function(){return j})),n.d(e,\"l\",(function(){return N}));var r=n(\"ofXK\"),i=n(\"fXoL\"),a=n(\"XNiG\"),o=n(\"quSY\"),s=n(\"LRne\"),l=n(\"FtGj\"),c=n(\"vkgz\"),u=n(\"Kj3r\"),h=n(\"pLZG\"),d=n(\"lJxs\"),f=n(\"IzEk\"),p=n(\"8LU1\"),m=n(\"nLfN\"),g=n(\"GU7r\");function y(t,e){return(t.getAttribute(e)||\"\").match(/\\S+/g)||[]}const v=\"cdk-describedby-message-container\",_=\"cdk-describedby-host\";let b=0;const x=new Map;let w=null,k=(()=>{class t{constructor(t){this._document=t}describe(t,e,n){if(!this._canBeDescribed(t,e))return;const r=M(e,n);\"string\"!=typeof e?(T(e),x.set(r,{messageElement:e,referenceCount:0})):x.has(r)||this._createMessageElement(e,n),this._isElementDescribedByMessage(t,r)||this._addMessageReference(t,r)}removeDescription(t,e,n){if(!e||!this._isElementNode(t))return;const r=M(e,n);if(this._isElementDescribedByMessage(t,r)&&this._removeMessageReference(t,r),\"string\"==typeof e){const t=x.get(r);t&&0===t.referenceCount&&this._deleteMessageElement(r)}w&&0===w.childNodes.length&&this._deleteMessagesContainer()}ngOnDestroy(){const t=this._document.querySelectorAll(\"[cdk-describedby-host]\");for(let e=0;e<t.length;e++)this._removeCdkDescribedByReferenceIds(t[e]),t[e].removeAttribute(_);w&&this._deleteMessagesContainer(),x.clear()}_createMessageElement(t,e){const n=this._document.createElement(\"div\");T(n),n.textContent=t,e&&n.setAttribute(\"role\",e),this._createMessagesContainer(),w.appendChild(n),x.set(M(t,e),{messageElement:n,referenceCount:0})}_deleteMessageElement(t){const e=x.get(t),n=e&&e.messageElement;w&&n&&w.removeChild(n),x.delete(t)}_createMessagesContainer(){if(!w){const t=this._document.getElementById(v);t&&t.parentNode&&t.parentNode.removeChild(t),w=this._document.createElement(\"div\"),w.id=v,w.style.visibility=\"hidden\",w.classList.add(\"cdk-visually-hidden\"),this._document.body.appendChild(w)}}_deleteMessagesContainer(){w&&w.parentNode&&(w.parentNode.removeChild(w),w=null)}_removeCdkDescribedByReferenceIds(t){const e=y(t,\"aria-describedby\").filter(t=>0!=t.indexOf(\"cdk-describedby-message\"));t.setAttribute(\"aria-describedby\",e.join(\" \"))}_addMessageReference(t,e){const n=x.get(e);!function(t,e,n){const r=y(t,e);r.some(t=>t.trim()==n.trim())||(r.push(n.trim()),t.setAttribute(e,r.join(\" \")))}(t,\"aria-describedby\",n.messageElement.id),t.setAttribute(_,\"\"),n.referenceCount++}_removeMessageReference(t,e){const n=x.get(e);n.referenceCount--,function(t,e,n){const r=y(t,e).filter(t=>t!=n.trim());r.length?t.setAttribute(e,r.join(\" \")):t.removeAttribute(e)}(t,\"aria-describedby\",n.messageElement.id),t.removeAttribute(_)}_isElementDescribedByMessage(t,e){const n=y(t,\"aria-describedby\"),r=x.get(e),i=r&&r.messageElement.id;return!!i&&-1!=n.indexOf(i)}_canBeDescribed(t,e){if(!this._isElementNode(t))return!1;if(e&&\"object\"==typeof e)return!0;const n=null==e?\"\":(\"\"+e).trim(),r=t.getAttribute(\"aria-label\");return!(!n||r&&r.trim()===n)}_isElementNode(t){return t.nodeType===this._document.ELEMENT_NODE}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(r.d))},t.\\u0275prov=Object(i.Tb)({factory:function(){return new t(Object(i.hc)(r.d))},token:t,providedIn:\"root\"}),t})();function M(t,e){return\"string\"==typeof t?`${e||\"\"}/${t}`:t}function T(t){t.id||(t.id=\"cdk-describedby-message-\"+b++)}class S{constructor(t){this._items=t,this._activeItemIndex=-1,this._activeItem=null,this._wrap=!1,this._letterKeyStream=new a.a,this._typeaheadSubscription=o.a.EMPTY,this._vertical=!0,this._allowedModifierKeys=[],this._homeAndEnd=!1,this._skipPredicateFn=t=>t.disabled,this._pressedLetters=[],this.tabOut=new a.a,this.change=new a.a,t instanceof i.N&&t.changes.subscribe(t=>{if(this._activeItem){const e=t.toArray().indexOf(this._activeItem);e>-1&&e!==this._activeItemIndex&&(this._activeItemIndex=e)}})}skipPredicate(t){return this._skipPredicateFn=t,this}withWrap(t=!0){return this._wrap=t,this}withVerticalOrientation(t=!0){return this._vertical=t,this}withHorizontalOrientation(t){return this._horizontal=t,this}withAllowedModifierKeys(t){return this._allowedModifierKeys=t,this}withTypeAhead(t=200){return this._typeaheadSubscription.unsubscribe(),this._typeaheadSubscription=this._letterKeyStream.pipe(Object(c.a)(t=>this._pressedLetters.push(t)),Object(u.a)(t),Object(h.a)(()=>this._pressedLetters.length>0),Object(d.a)(()=>this._pressedLetters.join(\"\"))).subscribe(t=>{const e=this._getItemsArray();for(let n=1;n<e.length+1;n++){const r=(this._activeItemIndex+n)%e.length,i=e[r];if(!this._skipPredicateFn(i)&&0===i.getLabel().toUpperCase().trim().indexOf(t)){this.setActiveItem(r);break}}this._pressedLetters=[]}),this}withHomeAndEnd(t=!0){return this._homeAndEnd=t,this}setActiveItem(t){const e=this._activeItem;this.updateActiveItem(t),this._activeItem!==e&&this.change.next(this._activeItemIndex)}onKeydown(t){const e=t.keyCode,n=[\"altKey\",\"ctrlKey\",\"metaKey\",\"shiftKey\"].every(e=>!t[e]||this._allowedModifierKeys.indexOf(e)>-1);switch(e){case l.n:return void this.tabOut.next();case l.c:if(this._vertical&&n){this.setNextItemActive();break}return;case l.o:if(this._vertical&&n){this.setPreviousItemActive();break}return;case l.l:if(this._horizontal&&n){\"rtl\"===this._horizontal?this.setPreviousItemActive():this.setNextItemActive();break}return;case l.h:if(this._horizontal&&n){\"rtl\"===this._horizontal?this.setNextItemActive():this.setPreviousItemActive();break}return;case l.g:if(this._homeAndEnd&&n){this.setFirstItemActive();break}return;case l.d:if(this._homeAndEnd&&n){this.setLastItemActive();break}return;default:return void((n||Object(l.r)(t,\"shiftKey\"))&&(t.key&&1===t.key.length?this._letterKeyStream.next(t.key.toLocaleUpperCase()):(e>=l.a&&e<=l.p||e>=l.q&&e<=l.i)&&this._letterKeyStream.next(String.fromCharCode(e))))}this._pressedLetters=[],t.preventDefault()}get activeItemIndex(){return this._activeItemIndex}get activeItem(){return this._activeItem}isTyping(){return this._pressedLetters.length>0}setFirstItemActive(){this._setActiveItemByIndex(0,1)}setLastItemActive(){this._setActiveItemByIndex(this._items.length-1,-1)}setNextItemActive(){this._activeItemIndex<0?this.setFirstItemActive():this._setActiveItemByDelta(1)}setPreviousItemActive(){this._activeItemIndex<0&&this._wrap?this.setLastItemActive():this._setActiveItemByDelta(-1)}updateActiveItem(t){const e=this._getItemsArray(),n=\"number\"==typeof t?t:e.indexOf(t),r=e[n];this._activeItem=null==r?null:r,this._activeItemIndex=n}_setActiveItemByDelta(t){this._wrap?this._setActiveInWrapMode(t):this._setActiveInDefaultMode(t)}_setActiveInWrapMode(t){const e=this._getItemsArray();for(let n=1;n<=e.length;n++){const r=(this._activeItemIndex+t*n+e.length)%e.length;if(!this._skipPredicateFn(e[r]))return void this.setActiveItem(r)}}_setActiveInDefaultMode(t){this._setActiveItemByIndex(this._activeItemIndex+t,t)}_setActiveItemByIndex(t,e){const n=this._getItemsArray();if(n[t]){for(;this._skipPredicateFn(n[t]);)if(!n[t+=e])return;this.setActiveItem(t)}}_getItemsArray(){return this._items instanceof i.N?this._items.toArray():this._items}}class A extends S{setActiveItem(t){this.activeItem&&this.activeItem.setInactiveStyles(),super.setActiveItem(t),this.activeItem&&this.activeItem.setActiveStyles()}}class L extends S{constructor(){super(...arguments),this._origin=\"program\"}setFocusOrigin(t){return this._origin=t,this}setActiveItem(t){super.setActiveItem(t),this.activeItem&&this.activeItem.focus(this._origin)}}let C=(()=>{class t{constructor(t){this._platform=t}isDisabled(t){return t.hasAttribute(\"disabled\")}isVisible(t){return function(t){return!!(t.offsetWidth||t.offsetHeight||\"function\"==typeof t.getClientRects&&t.getClientRects().length)}(t)&&\"visible\"===getComputedStyle(t).visibility}isTabbable(t){if(!this._platform.isBrowser)return!1;const e=function(t){try{return t.frameElement}catch(e){return null}}((n=t).ownerDocument&&n.ownerDocument.defaultView||window);var n;if(e){if(-1===O(e))return!1;if(!this.isVisible(e))return!1}let r=t.nodeName.toLowerCase(),i=O(t);return t.hasAttribute(\"contenteditable\")?-1!==i:\"iframe\"!==r&&\"object\"!==r&&!(this._platform.WEBKIT&&this._platform.IOS&&!function(t){let e=t.nodeName.toLowerCase(),n=\"input\"===e&&t.type;return\"text\"===n||\"password\"===n||\"select\"===e||\"textarea\"===e}(t))&&(\"audio\"===r?!!t.hasAttribute(\"controls\")&&-1!==i:\"video\"===r?-1!==i&&(null!==i||this._platform.FIREFOX||t.hasAttribute(\"controls\")):t.tabIndex>=0)}isFocusable(t,e){return function(t){return!function(t){return function(t){return\"input\"==t.nodeName.toLowerCase()}(t)&&\"hidden\"==t.type}(t)&&(function(t){let e=t.nodeName.toLowerCase();return\"input\"===e||\"select\"===e||\"button\"===e||\"textarea\"===e}(t)||function(t){return function(t){return\"a\"==t.nodeName.toLowerCase()}(t)&&t.hasAttribute(\"href\")}(t)||t.hasAttribute(\"contenteditable\")||E(t))}(t)&&!this.isDisabled(t)&&((null==e?void 0:e.ignoreVisibility)||this.isVisible(t))}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(m.a))},t.\\u0275prov=Object(i.Tb)({factory:function(){return new t(Object(i.hc)(m.a))},token:t,providedIn:\"root\"}),t})();function E(t){if(!t.hasAttribute(\"tabindex\")||void 0===t.tabIndex)return!1;let e=t.getAttribute(\"tabindex\");return\"-32768\"!=e&&!(!e||isNaN(parseInt(e,10)))}function O(t){if(!E(t))return null;const e=parseInt(t.getAttribute(\"tabindex\")||\"\",10);return isNaN(e)?-1:e}class D{constructor(t,e,n,r,i=!1){this._element=t,this._checker=e,this._ngZone=n,this._document=r,this._hasAttached=!1,this.startAnchorListener=()=>this.focusLastTabbableElement(),this.endAnchorListener=()=>this.focusFirstTabbableElement(),this._enabled=!0,i||this.attachAnchors()}get enabled(){return this._enabled}set enabled(t){this._enabled=t,this._startAnchor&&this._endAnchor&&(this._toggleAnchorTabIndex(t,this._startAnchor),this._toggleAnchorTabIndex(t,this._endAnchor))}destroy(){const t=this._startAnchor,e=this._endAnchor;t&&(t.removeEventListener(\"focus\",this.startAnchorListener),t.parentNode&&t.parentNode.removeChild(t)),e&&(e.removeEventListener(\"focus\",this.endAnchorListener),e.parentNode&&e.parentNode.removeChild(e)),this._startAnchor=this._endAnchor=null,this._hasAttached=!1}attachAnchors(){return!!this._hasAttached||(this._ngZone.runOutsideAngular(()=>{this._startAnchor||(this._startAnchor=this._createAnchor(),this._startAnchor.addEventListener(\"focus\",this.startAnchorListener)),this._endAnchor||(this._endAnchor=this._createAnchor(),this._endAnchor.addEventListener(\"focus\",this.endAnchorListener))}),this._element.parentNode&&(this._element.parentNode.insertBefore(this._startAnchor,this._element),this._element.parentNode.insertBefore(this._endAnchor,this._element.nextSibling),this._hasAttached=!0),this._hasAttached)}focusInitialElementWhenReady(){return new Promise(t=>{this._executeOnStable(()=>t(this.focusInitialElement()))})}focusFirstTabbableElementWhenReady(){return new Promise(t=>{this._executeOnStable(()=>t(this.focusFirstTabbableElement()))})}focusLastTabbableElementWhenReady(){return new Promise(t=>{this._executeOnStable(()=>t(this.focusLastTabbableElement()))})}_getRegionBoundary(t){let e=this._element.querySelectorAll(`[cdk-focus-region-${t}], [cdkFocusRegion${t}], [cdk-focus-${t}]`);for(let n=0;n<e.length;n++)e[n].hasAttribute(\"cdk-focus-\"+t)?console.warn(`Found use of deprecated attribute 'cdk-focus-${t}', use 'cdkFocusRegion${t}' instead. The deprecated attribute will be removed in 8.0.0.`,e[n]):e[n].hasAttribute(\"cdk-focus-region-\"+t)&&console.warn(`Found use of deprecated attribute 'cdk-focus-region-${t}', use 'cdkFocusRegion${t}' instead. The deprecated attribute will be removed in 8.0.0.`,e[n]);return\"start\"==t?e.length?e[0]:this._getFirstTabbableElement(this._element):e.length?e[e.length-1]:this._getLastTabbableElement(this._element)}focusInitialElement(){const t=this._element.querySelector(\"[cdk-focus-initial], [cdkFocusInitial]\");if(t){if(t.hasAttribute(\"cdk-focus-initial\")&&console.warn(\"Found use of deprecated attribute 'cdk-focus-initial', use 'cdkFocusInitial' instead. The deprecated attribute will be removed in 8.0.0\",t),!this._checker.isFocusable(t)){const e=this._getFirstTabbableElement(t);return null==e||e.focus(),!!e}return t.focus(),!0}return this.focusFirstTabbableElement()}focusFirstTabbableElement(){const t=this._getRegionBoundary(\"start\");return t&&t.focus(),!!t}focusLastTabbableElement(){const t=this._getRegionBoundary(\"end\");return t&&t.focus(),!!t}hasAttached(){return this._hasAttached}_getFirstTabbableElement(t){if(this._checker.isFocusable(t)&&this._checker.isTabbable(t))return t;let e=t.children||t.childNodes;for(let n=0;n<e.length;n++){let t=e[n].nodeType===this._document.ELEMENT_NODE?this._getFirstTabbableElement(e[n]):null;if(t)return t}return null}_getLastTabbableElement(t){if(this._checker.isFocusable(t)&&this._checker.isTabbable(t))return t;let e=t.children||t.childNodes;for(let n=e.length-1;n>=0;n--){let t=e[n].nodeType===this._document.ELEMENT_NODE?this._getLastTabbableElement(e[n]):null;if(t)return t}return null}_createAnchor(){const t=this._document.createElement(\"div\");return this._toggleAnchorTabIndex(this._enabled,t),t.classList.add(\"cdk-visually-hidden\"),t.classList.add(\"cdk-focus-trap-anchor\"),t.setAttribute(\"aria-hidden\",\"true\"),t}_toggleAnchorTabIndex(t,e){t?e.setAttribute(\"tabindex\",\"0\"):e.removeAttribute(\"tabindex\")}toggleAnchors(t){this._startAnchor&&this._endAnchor&&(this._toggleAnchorTabIndex(t,this._startAnchor),this._toggleAnchorTabIndex(t,this._endAnchor))}_executeOnStable(t){this._ngZone.isStable?t():this._ngZone.onStable.pipe(Object(f.a)(1)).subscribe(t)}}let I=(()=>{class t{constructor(t,e,n){this._checker=t,this._ngZone=e,this._document=n}create(t,e=!1){return new D(t,this._checker,this._ngZone,this._document,e)}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(C),i.hc(i.H),i.hc(r.d))},t.\\u0275prov=Object(i.Tb)({factory:function(){return new t(Object(i.hc)(C),Object(i.hc)(i.H),Object(i.hc)(r.d))},token:t,providedIn:\"root\"}),t})(),P=(()=>{class t{constructor(t,e,n){this._elementRef=t,this._focusTrapFactory=e,this._previouslyFocusedElement=null,this._document=n,this.focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement,!0)}get enabled(){return this.focusTrap.enabled}set enabled(t){this.focusTrap.enabled=Object(p.c)(t)}get autoCapture(){return this._autoCapture}set autoCapture(t){this._autoCapture=Object(p.c)(t)}ngOnDestroy(){this.focusTrap.destroy(),this._previouslyFocusedElement&&(this._previouslyFocusedElement.focus(),this._previouslyFocusedElement=null)}ngAfterContentInit(){this.focusTrap.attachAnchors(),this.autoCapture&&this._captureFocus()}ngDoCheck(){this.focusTrap.hasAttached()||this.focusTrap.attachAnchors()}ngOnChanges(t){const e=t.autoCapture;e&&!e.firstChange&&this.autoCapture&&this.focusTrap.hasAttached()&&this._captureFocus()}_captureFocus(){this._previouslyFocusedElement=this._document.activeElement,this.focusTrap.focusInitialElementWhenReady()}}return t.\\u0275fac=function(e){return new(e||t)(i.Xb(i.p),i.Xb(I),i.Xb(r.d))},t.\\u0275dir=i.Sb({type:t,selectors:[[\"\",\"cdkTrapFocus\",\"\"]],inputs:{enabled:[\"cdkTrapFocus\",\"enabled\"],autoCapture:[\"cdkTrapFocusAutoCapture\",\"autoCapture\"]},exportAs:[\"cdkTrapFocus\"],features:[i.Jb]}),t})();\"undefined\"!=typeof Element&&Element;const R=new i.w(\"liveAnnouncerElement\",{providedIn:\"root\",factory:function(){return null}}),z=new i.w(\"LIVE_ANNOUNCER_DEFAULT_OPTIONS\");let j=(()=>{class t{constructor(t,e,n,r){this._ngZone=e,this._defaultOptions=r,this._document=n,this._liveElement=t||this._createLiveElement()}announce(t,...e){const n=this._defaultOptions;let r,i;return 1===e.length&&\"number\"==typeof e[0]?i=e[0]:[r,i]=e,this.clear(),clearTimeout(this._previousTimeout),r||(r=n&&n.politeness?n.politeness:\"polite\"),null==i&&n&&(i=n.duration),this._liveElement.setAttribute(\"aria-live\",r),this._ngZone.runOutsideAngular(()=>new Promise(e=>{clearTimeout(this._previousTimeout),this._previousTimeout=setTimeout(()=>{this._liveElement.textContent=t,e(),\"number\"==typeof i&&(this._previousTimeout=setTimeout(()=>this.clear(),i))},100)}))}clear(){this._liveElement&&(this._liveElement.textContent=\"\")}ngOnDestroy(){clearTimeout(this._previousTimeout),this._liveElement&&this._liveElement.parentNode&&(this._liveElement.parentNode.removeChild(this._liveElement),this._liveElement=null)}_createLiveElement(){const t=\"cdk-live-announcer-element\",e=this._document.getElementsByClassName(t),n=this._document.createElement(\"div\");for(let r=0;r<e.length;r++)e[r].parentNode.removeChild(e[r]);return n.classList.add(t),n.classList.add(\"cdk-visually-hidden\"),n.setAttribute(\"aria-atomic\",\"true\"),n.setAttribute(\"aria-live\",\"polite\"),this._document.body.appendChild(n),n}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(R,8),i.hc(i.H),i.hc(r.d),i.hc(z,8))},t.\\u0275prov=Object(i.Tb)({factory:function(){return new t(Object(i.hc)(R,8),Object(i.hc)(i.H),Object(i.hc)(r.d),Object(i.hc)(z,8))},token:t,providedIn:\"root\"}),t})(),F=(()=>{class t{constructor(t,e,n,r){this._elementRef=t,this._liveAnnouncer=e,this._contentObserver=n,this._ngZone=r,this._politeness=\"polite\"}get politeness(){return this._politeness}set politeness(t){this._politeness=\"off\"===t||\"assertive\"===t?t:\"polite\",\"off\"===this._politeness?this._subscription&&(this._subscription.unsubscribe(),this._subscription=null):this._subscription||(this._subscription=this._ngZone.runOutsideAngular(()=>this._contentObserver.observe(this._elementRef).subscribe(()=>{const t=this._elementRef.nativeElement.textContent;t!==this._previousAnnouncedText&&(this._liveAnnouncer.announce(t,this._politeness),this._previousAnnouncedText=t)})))}ngOnDestroy(){this._subscription&&this._subscription.unsubscribe()}}return t.\\u0275fac=function(e){return new(e||t)(i.Xb(i.p),i.Xb(j),i.Xb(g.b),i.Xb(i.H))},t.\\u0275dir=i.Sb({type:t,selectors:[[\"\",\"cdkAriaLive\",\"\"]],inputs:{politeness:[\"cdkAriaLive\",\"politeness\"]},exportAs:[\"cdkAriaLive\"]}),t})();function N(t){return 0===t.buttons}const B=new i.w(\"cdk-focus-monitor-default-options\"),Y=Object(m.f)({passive:!0,capture:!0});let H=(()=>{class t{constructor(t,e,n,r){this._ngZone=t,this._platform=e,this._origin=null,this._windowFocused=!1,this._elementInfo=new Map,this._monitoredElementCount=0,this._rootNodeFocusListenerCount=new Map,this._documentKeydownListener=()=>{this._lastTouchTarget=null,this._setOriginForCurrentEventQueue(\"keyboard\")},this._documentMousedownListener=t=>{if(!this._lastTouchTarget){const e=N(t)?\"keyboard\":\"mouse\";this._setOriginForCurrentEventQueue(e)}},this._documentTouchstartListener=t=>{null!=this._touchTimeoutId&&clearTimeout(this._touchTimeoutId),this._lastTouchTarget=V(t),this._touchTimeoutId=setTimeout(()=>this._lastTouchTarget=null,650)},this._windowFocusListener=()=>{this._windowFocused=!0,this._windowFocusTimeoutId=setTimeout(()=>this._windowFocused=!1)},this._rootNodeFocusAndBlurListener=t=>{const e=V(t),n=\"focus\"===t.type?this._onFocus:this._onBlur;for(let r=e;r;r=r.parentElement)n.call(this,t,r)},this._document=n,this._detectionMode=(null==r?void 0:r.detectionMode)||0}monitor(t,e=!1){const n=Object(p.e)(t);if(!this._platform.isBrowser||1!==n.nodeType)return Object(s.a)(null);const r=Object(m.c)(n)||this._getDocument(),i=this._elementInfo.get(n);if(i)return e&&(i.checkChildren=!0),i.subject;const o={checkChildren:e,subject:new a.a,rootNode:r};return this._elementInfo.set(n,o),this._registerGlobalListeners(o),o.subject}stopMonitoring(t){const e=Object(p.e)(t),n=this._elementInfo.get(e);n&&(n.subject.complete(),this._setClasses(e),this._elementInfo.delete(e),this._removeGlobalListeners(n))}focusVia(t,e,n){const r=Object(p.e)(t);r===this._getDocument().activeElement?this._getClosestElementsInfo(r).forEach(([t,n])=>this._originChanged(t,e,n)):(this._setOriginForCurrentEventQueue(e),\"function\"==typeof r.focus&&r.focus(n))}ngOnDestroy(){this._elementInfo.forEach((t,e)=>this.stopMonitoring(e))}_getDocument(){return this._document||document}_getWindow(){return this._getDocument().defaultView||window}_toggleClass(t,e,n){n?t.classList.add(e):t.classList.remove(e)}_getFocusOrigin(t){return this._origin?this._origin:this._windowFocused&&this._lastFocusOrigin?this._lastFocusOrigin:this._wasCausedByTouch(t)?\"touch\":\"program\"}_setClasses(t,e){this._toggleClass(t,\"cdk-focused\",!!e),this._toggleClass(t,\"cdk-touch-focused\",\"touch\"===e),this._toggleClass(t,\"cdk-keyboard-focused\",\"keyboard\"===e),this._toggleClass(t,\"cdk-mouse-focused\",\"mouse\"===e),this._toggleClass(t,\"cdk-program-focused\",\"program\"===e)}_setOriginForCurrentEventQueue(t){this._ngZone.runOutsideAngular(()=>{this._origin=t,0===this._detectionMode&&(this._originTimeoutId=setTimeout(()=>this._origin=null,1))})}_wasCausedByTouch(t){const e=V(t);return this._lastTouchTarget instanceof Node&&e instanceof Node&&(e===this._lastTouchTarget||e.contains(this._lastTouchTarget))}_onFocus(t,e){const n=this._elementInfo.get(e);n&&(n.checkChildren||e===V(t))&&this._originChanged(e,this._getFocusOrigin(t),n)}_onBlur(t,e){const n=this._elementInfo.get(e);!n||n.checkChildren&&t.relatedTarget instanceof Node&&e.contains(t.relatedTarget)||(this._setClasses(e),this._emitOrigin(n.subject,null))}_emitOrigin(t,e){this._ngZone.run(()=>t.next(e))}_registerGlobalListeners(t){if(!this._platform.isBrowser)return;const e=t.rootNode,n=this._rootNodeFocusListenerCount.get(e)||0;n||this._ngZone.runOutsideAngular(()=>{e.addEventListener(\"focus\",this._rootNodeFocusAndBlurListener,Y),e.addEventListener(\"blur\",this._rootNodeFocusAndBlurListener,Y)}),this._rootNodeFocusListenerCount.set(e,n+1),1==++this._monitoredElementCount&&this._ngZone.runOutsideAngular(()=>{const t=this._getDocument(),e=this._getWindow();t.addEventListener(\"keydown\",this._documentKeydownListener,Y),t.addEventListener(\"mousedown\",this._documentMousedownListener,Y),t.addEventListener(\"touchstart\",this._documentTouchstartListener,Y),e.addEventListener(\"focus\",this._windowFocusListener)})}_removeGlobalListeners(t){const e=t.rootNode;if(this._rootNodeFocusListenerCount.has(e)){const t=this._rootNodeFocusListenerCount.get(e);t>1?this._rootNodeFocusListenerCount.set(e,t-1):(e.removeEventListener(\"focus\",this._rootNodeFocusAndBlurListener,Y),e.removeEventListener(\"blur\",this._rootNodeFocusAndBlurListener,Y),this._rootNodeFocusListenerCount.delete(e))}if(!--this._monitoredElementCount){const t=this._getDocument(),e=this._getWindow();t.removeEventListener(\"keydown\",this._documentKeydownListener,Y),t.removeEventListener(\"mousedown\",this._documentMousedownListener,Y),t.removeEventListener(\"touchstart\",this._documentTouchstartListener,Y),e.removeEventListener(\"focus\",this._windowFocusListener),clearTimeout(this._windowFocusTimeoutId),clearTimeout(this._touchTimeoutId),clearTimeout(this._originTimeoutId)}}_originChanged(t,e,n){this._setClasses(t,e),this._emitOrigin(n.subject,e),this._lastFocusOrigin=e}_getClosestElementsInfo(t){const e=[];return this._elementInfo.forEach((n,r)=>{(r===t||n.checkChildren&&r.contains(t))&&e.push([r,n])}),e}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(i.H),i.hc(m.a),i.hc(r.d,8),i.hc(B,8))},t.\\u0275prov=Object(i.Tb)({factory:function(){return new t(Object(i.hc)(i.H),Object(i.hc)(m.a),Object(i.hc)(r.d,8),Object(i.hc)(B,8))},token:t,providedIn:\"root\"}),t})();function V(t){return t.composedPath?t.composedPath()[0]:t.target}let U=(()=>{class t{constructor(t,e){this._elementRef=t,this._focusMonitor=e,this.cdkFocusChange=new i.s}ngAfterViewInit(){const t=this._elementRef.nativeElement;this._monitorSubscription=this._focusMonitor.monitor(t,1===t.nodeType&&t.hasAttribute(\"cdkMonitorSubtreeFocus\")).subscribe(t=>this.cdkFocusChange.emit(t))}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef),this._monitorSubscription&&this._monitorSubscription.unsubscribe()}}return t.\\u0275fac=function(e){return new(e||t)(i.Xb(i.p),i.Xb(H))},t.\\u0275dir=i.Sb({type:t,selectors:[[\"\",\"cdkMonitorElementFocus\",\"\"],[\"\",\"cdkMonitorSubtreeFocus\",\"\"]],outputs:{cdkFocusChange:\"cdkFocusChange\"}}),t})();const W=\"cdk-high-contrast-black-on-white\",q=\"cdk-high-contrast-white-on-black\",G=\"cdk-high-contrast-active\";let X=(()=>{class t{constructor(t,e){this._platform=t,this._document=e}getHighContrastMode(){if(!this._platform.isBrowser)return 0;const t=this._document.createElement(\"div\");t.style.backgroundColor=\"rgb(1,2,3)\",t.style.position=\"absolute\",this._document.body.appendChild(t);const e=this._document.defaultView||window,n=e&&e.getComputedStyle?e.getComputedStyle(t):null,r=(n&&n.backgroundColor||\"\").replace(/ /g,\"\");switch(this._document.body.removeChild(t),r){case\"rgb(0,0,0)\":return 2;case\"rgb(255,255,255)\":return 1}return 0}_applyBodyHighContrastModeCssClasses(){if(this._platform.isBrowser&&this._document.body){const t=this._document.body.classList;t.remove(G),t.remove(W),t.remove(q);const e=this.getHighContrastMode();1===e?(t.add(G),t.add(W)):2===e&&(t.add(G),t.add(q))}}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(m.a),i.hc(r.d))},t.\\u0275prov=Object(i.Tb)({factory:function(){return new t(Object(i.hc)(m.a),Object(i.hc)(r.d))},token:t,providedIn:\"root\"}),t})(),Z=(()=>{class t{constructor(t){t._applyBodyHighContrastModeCssClasses()}}return t.\\u0275mod=i.Vb({type:t}),t.\\u0275inj=i.Ub({factory:function(e){return new(e||t)(i.hc(X))},imports:[[m.b,g.c]]}),t})()},uEye:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"nn\",{months:\"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember\".split(\"_\"),monthsShort:\"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.\".split(\"_\"),monthsParseExact:!0,weekdays:\"sundag_m\\xe5ndag_tysdag_onsdag_torsdag_fredag_laurdag\".split(\"_\"),weekdaysShort:\"su._m\\xe5._ty._on._to._fr._lau.\".split(\"_\"),weekdaysMin:\"su_m\\xe5_ty_on_to_fr_la\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY [kl.] H:mm\",LLLL:\"dddd D. MMMM YYYY [kl.] HH:mm\"},calendar:{sameDay:\"[I dag klokka] LT\",nextDay:\"[I morgon klokka] LT\",nextWeek:\"dddd [klokka] LT\",lastDay:\"[I g\\xe5r klokka] LT\",lastWeek:\"[F\\xf8reg\\xe5ande] dddd [klokka] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"%s sidan\",s:\"nokre sekund\",ss:\"%d sekund\",m:\"eit minutt\",mm:\"%d minutt\",h:\"ein time\",hh:\"%d timar\",d:\"ein dag\",dd:\"%d dagar\",w:\"ei veke\",ww:\"%d veker\",M:\"ein m\\xe5nad\",MM:\"%d m\\xe5nader\",y:\"eit \\xe5r\",yy:\"%d \\xe5r\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},uXwI:function(t,e,n){!function(t){\"use strict\";var e={ss:\"sekundes_sekund\\u0113m_sekunde_sekundes\".split(\"_\"),m:\"min\\u016btes_min\\u016bt\\u0113m_min\\u016bte_min\\u016btes\".split(\"_\"),mm:\"min\\u016btes_min\\u016bt\\u0113m_min\\u016bte_min\\u016btes\".split(\"_\"),h:\"stundas_stund\\u0101m_stunda_stundas\".split(\"_\"),hh:\"stundas_stund\\u0101m_stunda_stundas\".split(\"_\"),d:\"dienas_dien\\u0101m_diena_dienas\".split(\"_\"),dd:\"dienas_dien\\u0101m_diena_dienas\".split(\"_\"),M:\"m\\u0113ne\\u0161a_m\\u0113ne\\u0161iem_m\\u0113nesis_m\\u0113ne\\u0161i\".split(\"_\"),MM:\"m\\u0113ne\\u0161a_m\\u0113ne\\u0161iem_m\\u0113nesis_m\\u0113ne\\u0161i\".split(\"_\"),y:\"gada_gadiem_gads_gadi\".split(\"_\"),yy:\"gada_gadiem_gads_gadi\".split(\"_\")};function n(t,e,n){return n?e%10==1&&e%100!=11?t[2]:t[3]:e%10==1&&e%100!=11?t[0]:t[1]}function r(t,r,i){return t+\" \"+n(e[i],t,r)}function i(t,r,i){return n(e[i],t,r)}t.defineLocale(\"lv\",{months:\"janv\\u0101ris_febru\\u0101ris_marts_apr\\u012blis_maijs_j\\u016bnijs_j\\u016blijs_augusts_septembris_oktobris_novembris_decembris\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_mai_j\\u016bn_j\\u016bl_aug_sep_okt_nov_dec\".split(\"_\"),weekdays:\"sv\\u0113tdiena_pirmdiena_otrdiena_tre\\u0161diena_ceturtdiena_piektdiena_sestdiena\".split(\"_\"),weekdaysShort:\"Sv_P_O_T_C_Pk_S\".split(\"_\"),weekdaysMin:\"Sv_P_O_T_C_Pk_S\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY.\",LL:\"YYYY. [gada] D. MMMM\",LLL:\"YYYY. [gada] D. MMMM, HH:mm\",LLLL:\"YYYY. [gada] D. MMMM, dddd, HH:mm\"},calendar:{sameDay:\"[\\u0160odien pulksten] LT\",nextDay:\"[R\\u012bt pulksten] LT\",nextWeek:\"dddd [pulksten] LT\",lastDay:\"[Vakar pulksten] LT\",lastWeek:\"[Pag\\u0101ju\\u0161\\u0101] dddd [pulksten] LT\",sameElse:\"L\"},relativeTime:{future:\"p\\u0113c %s\",past:\"pirms %s\",s:function(t,e){return e?\"da\\u017eas sekundes\":\"da\\u017e\\u0101m sekund\\u0113m\"},ss:r,m:i,mm:r,h:i,hh:r,d:i,dd:r,M:i,MM:r,y:i,yy:r},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},vkgz:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return o}));var r=n(\"7o/Q\");function i(){}var a=n(\"n6bG\");function o(t,e,n){return function(r){return r.lift(new s(t,e,n))}}class s{constructor(t,e,n){this.nextOrObserver=t,this.error=e,this.complete=n}call(t,e){return e.subscribe(new l(t,this.nextOrObserver,this.error,this.complete))}}class l extends r.a{constructor(t,e,n,r){super(t),this._tapNext=i,this._tapError=i,this._tapComplete=i,this._tapError=n||i,this._tapComplete=r||i,Object(a.a)(e)?(this._context=this,this._tapNext=e):e&&(this._context=e,this._tapNext=e.next||i,this._tapError=e.error||i,this._tapComplete=e.complete||i)}_next(t){try{this._tapNext.call(this._context,t)}catch(e){return void this.destination.error(e)}this.destination.next(t)}_error(t){try{this._tapError.call(this._context,t)}catch(t){return void this.destination.error(t)}this.destination.error(t)}_complete(){try{this._tapComplete.call(this._context)}catch(t){return void this.destination.error(t)}return this.destination.complete()}}},vxfF:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return g})),n.d(e,\"b\",(function(){return v})),n.d(e,\"c\",(function(){return m})),n.d(e,\"d\",(function(){return _})),n.d(e,\"e\",(function(){return y}));var r=n(\"8LU1\"),i=n(\"fXoL\"),a=n(\"XNiG\"),o=n(\"LRne\"),s=n(\"HDdC\"),l=n(\"xgIS\");n(\"3N8a\"),n(\"IjjT\"),n(\"7Hc7\");var c=(n(\"quSY\"),n(\"7+OI\"),n(\"/uUt\"),n(\"3UWI\")),u=n(\"pLZG\"),h=n(\"1G5W\");n(\"JX91\"),n(\"7o/Q\"),n(\"eIep\"),n(\"UXun\");var d=n(\"nLfN\"),f=n(\"ofXK\"),p=n(\"cH1L\");n(\"0EQZ\");let m=(()=>{class t{constructor(t,e,n){this._ngZone=t,this._platform=e,this._scrolled=new a.a,this._globalSubscription=null,this._scrolledCount=0,this.scrollContainers=new Map,this._document=n}register(t){this.scrollContainers.has(t)||this.scrollContainers.set(t,t.elementScrolled().subscribe(()=>this._scrolled.next(t)))}deregister(t){const e=this.scrollContainers.get(t);e&&(e.unsubscribe(),this.scrollContainers.delete(t))}scrolled(t=20){return this._platform.isBrowser?new s.a(e=>{this._globalSubscription||this._addGlobalListener();const n=t>0?this._scrolled.pipe(Object(c.a)(t)).subscribe(e):this._scrolled.subscribe(e);return this._scrolledCount++,()=>{n.unsubscribe(),this._scrolledCount--,this._scrolledCount||this._removeGlobalListener()}}):Object(o.a)()}ngOnDestroy(){this._removeGlobalListener(),this.scrollContainers.forEach((t,e)=>this.deregister(e)),this._scrolled.complete()}ancestorScrolled(t,e){const n=this.getAncestorScrollContainers(t);return this.scrolled(e).pipe(Object(u.a)(t=>!t||n.indexOf(t)>-1))}getAncestorScrollContainers(t){const e=[];return this.scrollContainers.forEach((n,r)=>{this._scrollableContainsElement(r,t)&&e.push(r)}),e}_getWindow(){return this._document.defaultView||window}_scrollableContainsElement(t,e){let n=Object(r.e)(e),i=t.getElementRef().nativeElement;do{if(n==i)return!0}while(n=n.parentElement);return!1}_addGlobalListener(){this._globalSubscription=this._ngZone.runOutsideAngular(()=>{const t=this._getWindow();return Object(l.a)(t.document,\"scroll\").subscribe(()=>this._scrolled.next())})}_removeGlobalListener(){this._globalSubscription&&(this._globalSubscription.unsubscribe(),this._globalSubscription=null)}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(i.H),i.hc(d.a),i.hc(f.d,8))},t.\\u0275prov=Object(i.Tb)({factory:function(){return new t(Object(i.hc)(i.H),Object(i.hc)(d.a),Object(i.hc)(f.d,8))},token:t,providedIn:\"root\"}),t})(),g=(()=>{class t{constructor(t,e,n,r){this.elementRef=t,this.scrollDispatcher=e,this.ngZone=n,this.dir=r,this._destroyed=new a.a,this._elementScrolled=new s.a(t=>this.ngZone.runOutsideAngular(()=>Object(l.a)(this.elementRef.nativeElement,\"scroll\").pipe(Object(h.a)(this._destroyed)).subscribe(t)))}ngOnInit(){this.scrollDispatcher.register(this)}ngOnDestroy(){this.scrollDispatcher.deregister(this),this._destroyed.next(),this._destroyed.complete()}elementScrolled(){return this._elementScrolled}getElementRef(){return this.elementRef}scrollTo(t){const e=this.elementRef.nativeElement,n=this.dir&&\"rtl\"==this.dir.value;null==t.left&&(t.left=n?t.end:t.start),null==t.right&&(t.right=n?t.start:t.end),null!=t.bottom&&(t.top=e.scrollHeight-e.clientHeight-t.bottom),n&&0!=Object(d.d)()?(null!=t.left&&(t.right=e.scrollWidth-e.clientWidth-t.left),2==Object(d.d)()?t.left=t.right:1==Object(d.d)()&&(t.left=t.right?-t.right:t.right)):null!=t.right&&(t.left=e.scrollWidth-e.clientWidth-t.right),this._applyScrollToOptions(t)}_applyScrollToOptions(t){const e=this.elementRef.nativeElement;Object(d.g)()?e.scrollTo(t):(null!=t.top&&(e.scrollTop=t.top),null!=t.left&&(e.scrollLeft=t.left))}measureScrollOffset(t){const e=\"left\",n=\"right\",r=this.elementRef.nativeElement;if(\"top\"==t)return r.scrollTop;if(\"bottom\"==t)return r.scrollHeight-r.clientHeight-r.scrollTop;const i=this.dir&&\"rtl\"==this.dir.value;return\"start\"==t?t=i?n:e:\"end\"==t&&(t=i?e:n),i&&2==Object(d.d)()?t==e?r.scrollWidth-r.clientWidth-r.scrollLeft:r.scrollLeft:i&&1==Object(d.d)()?t==e?r.scrollLeft+r.scrollWidth-r.clientWidth:-r.scrollLeft:t==e?r.scrollLeft:r.scrollWidth-r.clientWidth-r.scrollLeft}}return t.\\u0275fac=function(e){return new(e||t)(i.Xb(i.p),i.Xb(m),i.Xb(i.H),i.Xb(p.b,8))},t.\\u0275dir=i.Sb({type:t,selectors:[[\"\",\"cdk-scrollable\",\"\"],[\"\",\"cdkScrollable\",\"\"]]}),t})(),y=(()=>{class t{constructor(t,e,n){this._platform=t,this._change=new a.a,this._changeListener=t=>{this._change.next(t)},this._document=n,e.runOutsideAngular(()=>{if(t.isBrowser){const t=this._getWindow();t.addEventListener(\"resize\",this._changeListener),t.addEventListener(\"orientationchange\",this._changeListener)}this.change().subscribe(()=>this._updateViewportSize())})}ngOnDestroy(){if(this._platform.isBrowser){const t=this._getWindow();t.removeEventListener(\"resize\",this._changeListener),t.removeEventListener(\"orientationchange\",this._changeListener)}this._change.complete()}getViewportSize(){this._viewportSize||this._updateViewportSize();const t={width:this._viewportSize.width,height:this._viewportSize.height};return this._platform.isBrowser||(this._viewportSize=null),t}getViewportRect(){const t=this.getViewportScrollPosition(),{width:e,height:n}=this.getViewportSize();return{top:t.top,left:t.left,bottom:t.top+n,right:t.left+e,height:n,width:e}}getViewportScrollPosition(){if(!this._platform.isBrowser)return{top:0,left:0};const t=this._document,e=this._getWindow(),n=t.documentElement,r=n.getBoundingClientRect();return{top:-r.top||t.body.scrollTop||e.scrollY||n.scrollTop||0,left:-r.left||t.body.scrollLeft||e.scrollX||n.scrollLeft||0}}change(t=20){return t>0?this._change.pipe(Object(c.a)(t)):this._change}_getWindow(){return this._document.defaultView||window}_updateViewportSize(){const t=this._getWindow();this._viewportSize=this._platform.isBrowser?{width:t.innerWidth,height:t.innerHeight}:{width:0,height:0}}}return t.\\u0275fac=function(e){return new(e||t)(i.hc(d.a),i.hc(i.H),i.hc(f.d,8))},t.\\u0275prov=Object(i.Tb)({factory:function(){return new t(Object(i.hc)(d.a),Object(i.hc)(i.H),Object(i.hc)(f.d,8))},token:t,providedIn:\"root\"}),t})(),v=(()=>{class t{}return t.\\u0275mod=i.Vb({type:t}),t.\\u0275inj=i.Ub({factory:function(e){return new(e||t)}}),t})(),_=(()=>{class t{}return t.\\u0275mod=i.Vb({type:t}),t.\\u0275inj=i.Ub({factory:function(e){return new(e||t)},imports:[[p.a,d.b,v],p.a,v]}),t})()},w1tV:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return p}));var r=n(\"XNiG\"),i=n(\"HDdC\"),a=n(\"7o/Q\"),o=n(\"quSY\");function s(){return function(t){return t.lift(new l(t))}}class l{constructor(t){this.connectable=t}call(t,e){const{connectable:n}=this;n._refCount++;const r=new c(t,n),i=e.subscribe(r);return r.closed||(r.connection=n.connect()),i}}class c extends a.a{constructor(t,e){super(t),this.connectable=e}_unsubscribe(){const{connectable:t}=this;if(!t)return void(this.connection=null);this.connectable=null;const e=t._refCount;if(e<=0)return void(this.connection=null);if(t._refCount=e-1,e>1)return void(this.connection=null);const{connection:n}=this,r=t._connection;this.connection=null,!r||n&&r!==n||r.unsubscribe()}}class u extends i.a{constructor(t,e){super(),this.source=t,this.subjectFactory=e,this._refCount=0,this._isComplete=!1}_subscribe(t){return this.getSubject().subscribe(t)}getSubject(){const t=this._subject;return t&&!t.isStopped||(this._subject=this.subjectFactory()),this._subject}connect(){let t=this._connection;return t||(this._isComplete=!1,t=this._connection=new o.a,t.add(this.source.subscribe(new d(this.getSubject(),this))),t.closed&&(this._connection=null,t=o.a.EMPTY)),t}refCount(){return s()(this)}}const h=(()=>{const t=u.prototype;return{operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:t._subscribe},_isComplete:{value:t._isComplete,writable:!0},getSubject:{value:t.getSubject},connect:{value:t.connect},refCount:{value:t.refCount}}})();class d extends r.b{constructor(t,e){super(t),this.connectable=e}_error(t){this._unsubscribe(),super._error(t)}_complete(){this.connectable._isComplete=!0,this._unsubscribe(),super._complete()}_unsubscribe(){const t=this.connectable;if(t){this.connectable=null;const e=t._connection;t._refCount=0,t._subject=null,t._connection=null,e&&e.unsubscribe()}}}function f(){return new r.a}function p(){return t=>{return s()((e=f,function(t){let n;n=\"function\"==typeof e?e:function(){return e};const r=Object.create(t,h);return r.source=t,r.subjectFactory=n,r})(t));var e}}},wQk9:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"tzm\",{months:\"\\u2d49\\u2d4f\\u2d4f\\u2d30\\u2d62\\u2d54_\\u2d31\\u2d55\\u2d30\\u2d62\\u2d55_\\u2d4e\\u2d30\\u2d55\\u2d5a_\\u2d49\\u2d31\\u2d54\\u2d49\\u2d54_\\u2d4e\\u2d30\\u2d62\\u2d62\\u2d53_\\u2d62\\u2d53\\u2d4f\\u2d62\\u2d53_\\u2d62\\u2d53\\u2d4d\\u2d62\\u2d53\\u2d63_\\u2d56\\u2d53\\u2d5b\\u2d5c_\\u2d5b\\u2d53\\u2d5c\\u2d30\\u2d4f\\u2d31\\u2d49\\u2d54_\\u2d3d\\u2d5f\\u2d53\\u2d31\\u2d55_\\u2d4f\\u2d53\\u2d61\\u2d30\\u2d4f\\u2d31\\u2d49\\u2d54_\\u2d37\\u2d53\\u2d4a\\u2d4f\\u2d31\\u2d49\\u2d54\".split(\"_\"),monthsShort:\"\\u2d49\\u2d4f\\u2d4f\\u2d30\\u2d62\\u2d54_\\u2d31\\u2d55\\u2d30\\u2d62\\u2d55_\\u2d4e\\u2d30\\u2d55\\u2d5a_\\u2d49\\u2d31\\u2d54\\u2d49\\u2d54_\\u2d4e\\u2d30\\u2d62\\u2d62\\u2d53_\\u2d62\\u2d53\\u2d4f\\u2d62\\u2d53_\\u2d62\\u2d53\\u2d4d\\u2d62\\u2d53\\u2d63_\\u2d56\\u2d53\\u2d5b\\u2d5c_\\u2d5b\\u2d53\\u2d5c\\u2d30\\u2d4f\\u2d31\\u2d49\\u2d54_\\u2d3d\\u2d5f\\u2d53\\u2d31\\u2d55_\\u2d4f\\u2d53\\u2d61\\u2d30\\u2d4f\\u2d31\\u2d49\\u2d54_\\u2d37\\u2d53\\u2d4a\\u2d4f\\u2d31\\u2d49\\u2d54\".split(\"_\"),weekdays:\"\\u2d30\\u2d59\\u2d30\\u2d4e\\u2d30\\u2d59_\\u2d30\\u2d62\\u2d4f\\u2d30\\u2d59_\\u2d30\\u2d59\\u2d49\\u2d4f\\u2d30\\u2d59_\\u2d30\\u2d3d\\u2d54\\u2d30\\u2d59_\\u2d30\\u2d3d\\u2d61\\u2d30\\u2d59_\\u2d30\\u2d59\\u2d49\\u2d4e\\u2d61\\u2d30\\u2d59_\\u2d30\\u2d59\\u2d49\\u2d39\\u2d62\\u2d30\\u2d59\".split(\"_\"),weekdaysShort:\"\\u2d30\\u2d59\\u2d30\\u2d4e\\u2d30\\u2d59_\\u2d30\\u2d62\\u2d4f\\u2d30\\u2d59_\\u2d30\\u2d59\\u2d49\\u2d4f\\u2d30\\u2d59_\\u2d30\\u2d3d\\u2d54\\u2d30\\u2d59_\\u2d30\\u2d3d\\u2d61\\u2d30\\u2d59_\\u2d30\\u2d59\\u2d49\\u2d4e\\u2d61\\u2d30\\u2d59_\\u2d30\\u2d59\\u2d49\\u2d39\\u2d62\\u2d30\\u2d59\".split(\"_\"),weekdaysMin:\"\\u2d30\\u2d59\\u2d30\\u2d4e\\u2d30\\u2d59_\\u2d30\\u2d62\\u2d4f\\u2d30\\u2d59_\\u2d30\\u2d59\\u2d49\\u2d4f\\u2d30\\u2d59_\\u2d30\\u2d3d\\u2d54\\u2d30\\u2d59_\\u2d30\\u2d3d\\u2d61\\u2d30\\u2d59_\\u2d30\\u2d59\\u2d49\\u2d4e\\u2d61\\u2d30\\u2d59_\\u2d30\\u2d59\\u2d49\\u2d39\\u2d62\\u2d30\\u2d59\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[\\u2d30\\u2d59\\u2d37\\u2d45 \\u2d34] LT\",nextDay:\"[\\u2d30\\u2d59\\u2d3d\\u2d30 \\u2d34] LT\",nextWeek:\"dddd [\\u2d34] LT\",lastDay:\"[\\u2d30\\u2d5a\\u2d30\\u2d4f\\u2d5c \\u2d34] LT\",lastWeek:\"dddd [\\u2d34] LT\",sameElse:\"L\"},relativeTime:{future:\"\\u2d37\\u2d30\\u2d37\\u2d45 \\u2d59 \\u2d62\\u2d30\\u2d4f %s\",past:\"\\u2d62\\u2d30\\u2d4f %s\",s:\"\\u2d49\\u2d4e\\u2d49\\u2d3d\",ss:\"%d \\u2d49\\u2d4e\\u2d49\\u2d3d\",m:\"\\u2d4e\\u2d49\\u2d4f\\u2d53\\u2d3a\",mm:\"%d \\u2d4e\\u2d49\\u2d4f\\u2d53\\u2d3a\",h:\"\\u2d59\\u2d30\\u2d44\\u2d30\",hh:\"%d \\u2d5c\\u2d30\\u2d59\\u2d59\\u2d30\\u2d44\\u2d49\\u2d4f\",d:\"\\u2d30\\u2d59\\u2d59\",dd:\"%d o\\u2d59\\u2d59\\u2d30\\u2d4f\",M:\"\\u2d30\\u2d62o\\u2d53\\u2d54\",MM:\"%d \\u2d49\\u2d62\\u2d62\\u2d49\\u2d54\\u2d4f\",y:\"\\u2d30\\u2d59\\u2d33\\u2d30\\u2d59\",yy:\"%d \\u2d49\\u2d59\\u2d33\\u2d30\\u2d59\\u2d4f\"},week:{dow:6,doy:12}})}(n(\"wd/R\"))},\"wd/R\":function(t,e,n){(function(t){t.exports=function(){\"use strict\";var e,r;function i(){return e.apply(null,arguments)}function a(t){return t instanceof Array||\"[object Array]\"===Object.prototype.toString.call(t)}function o(t){return null!=t&&\"[object Object]\"===Object.prototype.toString.call(t)}function s(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function l(t){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(t).length;var e;for(e in t)if(s(t,e))return!1;return!0}function c(t){return void 0===t}function u(t){return\"number\"==typeof t||\"[object Number]\"===Object.prototype.toString.call(t)}function h(t){return t instanceof Date||\"[object Date]\"===Object.prototype.toString.call(t)}function d(t,e){var n,r=[];for(n=0;n<t.length;++n)r.push(e(t[n],n));return r}function f(t,e){for(var n in e)s(e,n)&&(t[n]=e[n]);return s(e,\"toString\")&&(t.toString=e.toString),s(e,\"valueOf\")&&(t.valueOf=e.valueOf),t}function p(t,e,n,r){return Me(t,e,n,r,!0).utc()}function m(t){return null==t._pf&&(t._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),t._pf}function g(t){if(null==t._isValid){var e=m(t),n=r.call(e.parsedDateParts,(function(t){return null!=t})),i=!isNaN(t._d.getTime())&&e.overflow<0&&!e.empty&&!e.invalidEra&&!e.invalidMonth&&!e.invalidWeekday&&!e.weekdayMismatch&&!e.nullInput&&!e.invalidFormat&&!e.userInvalidated&&(!e.meridiem||e.meridiem&&n);if(t._strict&&(i=i&&0===e.charsLeftOver&&0===e.unusedTokens.length&&void 0===e.bigHour),null!=Object.isFrozen&&Object.isFrozen(t))return i;t._isValid=i}return t._isValid}function y(t){var e=p(NaN);return null!=t?f(m(e),t):m(e).userInvalidated=!0,e}r=Array.prototype.some?Array.prototype.some:function(t){var e,n=Object(this),r=n.length>>>0;for(e=0;e<r;e++)if(e in n&&t.call(this,n[e],e,n))return!0;return!1};var v=i.momentProperties=[],_=!1;function b(t,e){var n,r,i;if(c(e._isAMomentObject)||(t._isAMomentObject=e._isAMomentObject),c(e._i)||(t._i=e._i),c(e._f)||(t._f=e._f),c(e._l)||(t._l=e._l),c(e._strict)||(t._strict=e._strict),c(e._tzm)||(t._tzm=e._tzm),c(e._isUTC)||(t._isUTC=e._isUTC),c(e._offset)||(t._offset=e._offset),c(e._pf)||(t._pf=m(e)),c(e._locale)||(t._locale=e._locale),v.length>0)for(n=0;n<v.length;n++)c(i=e[r=v[n]])||(t[r]=i);return t}function x(t){b(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===_&&(_=!0,i.updateOffset(this),_=!1)}function w(t){return t instanceof x||null!=t&&null!=t._isAMomentObject}function k(t){!1===i.suppressDeprecationWarnings&&\"undefined\"!=typeof console&&console.warn&&console.warn(\"Deprecation warning: \"+t)}function M(t,e){var n=!0;return f((function(){if(null!=i.deprecationHandler&&i.deprecationHandler(null,t),n){var r,a,o,l=[];for(a=0;a<arguments.length;a++){if(r=\"\",\"object\"==typeof arguments[a]){for(o in r+=\"\\n[\"+a+\"] \",arguments[0])s(arguments[0],o)&&(r+=o+\": \"+arguments[0][o]+\", \");r=r.slice(0,-2)}else r=arguments[a];l.push(r)}k(t+\"\\nArguments: \"+Array.prototype.slice.call(l).join(\"\")+\"\\n\"+(new Error).stack),n=!1}return e.apply(this,arguments)}),e)}var T,S={};function A(t,e){null!=i.deprecationHandler&&i.deprecationHandler(t,e),S[t]||(k(e),S[t]=!0)}function L(t){return\"undefined\"!=typeof Function&&t instanceof Function||\"[object Function]\"===Object.prototype.toString.call(t)}function C(t,e){var n,r=f({},t);for(n in e)s(e,n)&&(o(t[n])&&o(e[n])?(r[n]={},f(r[n],t[n]),f(r[n],e[n])):null!=e[n]?r[n]=e[n]:delete r[n]);for(n in t)s(t,n)&&!s(e,n)&&o(t[n])&&(r[n]=f({},r[n]));return r}function E(t){null!=t&&this.set(t)}function O(t,e,n){var r=\"\"+Math.abs(t);return(t>=0?n?\"+\":\"\":\"-\")+Math.pow(10,Math.max(0,e-r.length)).toString().substr(1)+r}i.suppressDeprecationWarnings=!1,i.deprecationHandler=null,T=Object.keys?Object.keys:function(t){var e,n=[];for(e in t)s(t,e)&&n.push(e);return n};var D=/(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,I=/(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,P={},R={};function z(t,e,n,r){var i=r;\"string\"==typeof r&&(i=function(){return this[r]()}),t&&(R[t]=i),e&&(R[e[0]]=function(){return O(i.apply(this,arguments),e[1],e[2])}),n&&(R[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),t)})}function j(t,e){return t.isValid()?(e=F(e,t.localeData()),P[e]=P[e]||function(t){var e,n,r,i=t.match(D);for(e=0,n=i.length;e<n;e++)i[e]=R[i[e]]?R[i[e]]:(r=i[e]).match(/\\[[\\s\\S]/)?r.replace(/^\\[|\\]$/g,\"\"):r.replace(/\\\\/g,\"\");return function(e){var r,a=\"\";for(r=0;r<n;r++)a+=L(i[r])?i[r].call(e,t):i[r];return a}}(e),P[e](t)):t.localeData().invalidDate()}function F(t,e){var n=5;function r(t){return e.longDateFormat(t)||t}for(I.lastIndex=0;n>=0&&I.test(t);)t=t.replace(I,r),I.lastIndex=0,n-=1;return t}var N={};function B(t,e){var n=t.toLowerCase();N[n]=N[n+\"s\"]=N[e]=t}function Y(t){return\"string\"==typeof t?N[t]||N[t.toLowerCase()]:void 0}function H(t){var e,n,r={};for(n in t)s(t,n)&&(e=Y(n))&&(r[e]=t[n]);return r}var V={};function U(t,e){V[t]=e}function W(t){return t%4==0&&t%100!=0||t%400==0}function q(t){return t<0?Math.ceil(t)||0:Math.floor(t)}function G(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=q(e)),n}function X(t,e){return function(n){return null!=n?(J(this,t,n),i.updateOffset(this,e),this):Z(this,t)}}function Z(t,e){return t.isValid()?t._d[\"get\"+(t._isUTC?\"UTC\":\"\")+e]():NaN}function J(t,e,n){t.isValid()&&!isNaN(n)&&(\"FullYear\"===e&&W(t.year())&&1===t.month()&&29===t.date()?(n=G(n),t._d[\"set\"+(t._isUTC?\"UTC\":\"\")+e](n,t.month(),wt(n,t.month()))):t._d[\"set\"+(t._isUTC?\"UTC\":\"\")+e](n))}var K,$=/\\d/,Q=/\\d\\d/,tt=/\\d{3}/,et=/\\d{4}/,nt=/[+-]?\\d{6}/,rt=/\\d\\d?/,it=/\\d\\d\\d\\d?/,at=/\\d\\d\\d\\d\\d\\d?/,ot=/\\d{1,3}/,st=/\\d{1,4}/,lt=/[+-]?\\d{1,6}/,ct=/\\d+/,ut=/[+-]?\\d+/,ht=/Z|[+-]\\d\\d:?\\d\\d/gi,dt=/Z|[+-]\\d\\d(?::?\\d\\d)?/gi,ft=/[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;function pt(t,e,n){K[t]=L(e)?e:function(t,r){return t&&n?n:e}}function mt(t,e){return s(K,t)?K[t](e._strict,e._locale):new RegExp(gt(t.replace(\"\\\\\",\"\").replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,(function(t,e,n,r,i){return e||n||r||i}))))}function gt(t){return t.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}K={};var yt,vt={};function _t(t,e){var n,r=e;for(\"string\"==typeof t&&(t=[t]),u(e)&&(r=function(t,n){n[e]=G(t)}),n=0;n<t.length;n++)vt[t[n]]=r}function bt(t,e){_t(t,(function(t,n,r,i){r._w=r._w||{},e(t,r._w,r,i)}))}function xt(t,e,n){null!=e&&s(vt,t)&&vt[t](e,n._a,n,t)}function wt(t,e){if(isNaN(t)||isNaN(e))return NaN;var n=(e%12+12)%12;return t+=(e-n)/12,1===n?W(t)?29:28:31-n%7%2}yt=Array.prototype.indexOf?Array.prototype.indexOf:function(t){var e;for(e=0;e<this.length;++e)if(this[e]===t)return e;return-1},z(\"M\",[\"MM\",2],\"Mo\",(function(){return this.month()+1})),z(\"MMM\",0,0,(function(t){return this.localeData().monthsShort(this,t)})),z(\"MMMM\",0,0,(function(t){return this.localeData().months(this,t)})),B(\"month\",\"M\"),U(\"month\",8),pt(\"M\",rt),pt(\"MM\",rt,Q),pt(\"MMM\",(function(t,e){return e.monthsShortRegex(t)})),pt(\"MMMM\",(function(t,e){return e.monthsRegex(t)})),_t([\"M\",\"MM\"],(function(t,e){e[1]=G(t)-1})),_t([\"MMM\",\"MMMM\"],(function(t,e,n,r){var i=n._locale.monthsParse(t,r,n._strict);null!=i?e[1]=i:m(n).invalidMonth=t}));var kt=\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),Mt=\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),Tt=/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,St=ft,At=ft;function Lt(t,e,n){var r,i,a,o=t.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],r=0;r<12;++r)a=p([2e3,r]),this._shortMonthsParse[r]=this.monthsShort(a,\"\").toLocaleLowerCase(),this._longMonthsParse[r]=this.months(a,\"\").toLocaleLowerCase();return n?\"MMM\"===e?-1!==(i=yt.call(this._shortMonthsParse,o))?i:null:-1!==(i=yt.call(this._longMonthsParse,o))?i:null:\"MMM\"===e?-1!==(i=yt.call(this._shortMonthsParse,o))||-1!==(i=yt.call(this._longMonthsParse,o))?i:null:-1!==(i=yt.call(this._longMonthsParse,o))||-1!==(i=yt.call(this._shortMonthsParse,o))?i:null}function Ct(t,e){var n;if(!t.isValid())return t;if(\"string\"==typeof e)if(/^\\d+$/.test(e))e=G(e);else if(!u(e=t.localeData().monthsParse(e)))return t;return n=Math.min(t.date(),wt(t.year(),e)),t._d[\"set\"+(t._isUTC?\"UTC\":\"\")+\"Month\"](e,n),t}function Et(t){return null!=t?(Ct(this,t),i.updateOffset(this,!0),this):Z(this,\"Month\")}function Ot(){function t(t,e){return e.length-t.length}var e,n,r=[],i=[],a=[];for(e=0;e<12;e++)n=p([2e3,e]),r.push(this.monthsShort(n,\"\")),i.push(this.months(n,\"\")),a.push(this.months(n,\"\")),a.push(this.monthsShort(n,\"\"));for(r.sort(t),i.sort(t),a.sort(t),e=0;e<12;e++)r[e]=gt(r[e]),i[e]=gt(i[e]);for(e=0;e<24;e++)a[e]=gt(a[e]);this._monthsRegex=new RegExp(\"^(\"+a.join(\"|\")+\")\",\"i\"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp(\"^(\"+i.join(\"|\")+\")\",\"i\"),this._monthsShortStrictRegex=new RegExp(\"^(\"+r.join(\"|\")+\")\",\"i\")}function Dt(t){return W(t)?366:365}z(\"Y\",0,0,(function(){var t=this.year();return t<=9999?O(t,4):\"+\"+t})),z(0,[\"YY\",2],0,(function(){return this.year()%100})),z(0,[\"YYYY\",4],0,\"year\"),z(0,[\"YYYYY\",5],0,\"year\"),z(0,[\"YYYYYY\",6,!0],0,\"year\"),B(\"year\",\"y\"),U(\"year\",1),pt(\"Y\",ut),pt(\"YY\",rt,Q),pt(\"YYYY\",st,et),pt(\"YYYYY\",lt,nt),pt(\"YYYYYY\",lt,nt),_t([\"YYYYY\",\"YYYYYY\"],0),_t(\"YYYY\",(function(t,e){e[0]=2===t.length?i.parseTwoDigitYear(t):G(t)})),_t(\"YY\",(function(t,e){e[0]=i.parseTwoDigitYear(t)})),_t(\"Y\",(function(t,e){e[0]=parseInt(t,10)})),i.parseTwoDigitYear=function(t){return G(t)+(G(t)>68?1900:2e3)};var It=X(\"FullYear\",!0);function Pt(t,e,n,r,i,a,o){var s;return t<100&&t>=0?(s=new Date(t+400,e,n,r,i,a,o),isFinite(s.getFullYear())&&s.setFullYear(t)):s=new Date(t,e,n,r,i,a,o),s}function Rt(t){var e,n;return t<100&&t>=0?((n=Array.prototype.slice.call(arguments))[0]=t+400,e=new Date(Date.UTC.apply(null,n)),isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t)):e=new Date(Date.UTC.apply(null,arguments)),e}function zt(t,e,n){var r=7+e-n;return-(7+Rt(t,0,r).getUTCDay()-e)%7+r-1}function jt(t,e,n,r,i){var a,o,s=1+7*(e-1)+(7+n-r)%7+zt(t,r,i);return s<=0?o=Dt(a=t-1)+s:s>Dt(t)?(a=t+1,o=s-Dt(t)):(a=t,o=s),{year:a,dayOfYear:o}}function Ft(t,e,n){var r,i,a=zt(t.year(),e,n),o=Math.floor((t.dayOfYear()-a-1)/7)+1;return o<1?r=o+Nt(i=t.year()-1,e,n):o>Nt(t.year(),e,n)?(r=o-Nt(t.year(),e,n),i=t.year()+1):(i=t.year(),r=o),{week:r,year:i}}function Nt(t,e,n){var r=zt(t,e,n),i=zt(t+1,e,n);return(Dt(t)-r+i)/7}function Bt(t,e){return t.slice(e,7).concat(t.slice(0,e))}z(\"w\",[\"ww\",2],\"wo\",\"week\"),z(\"W\",[\"WW\",2],\"Wo\",\"isoWeek\"),B(\"week\",\"w\"),B(\"isoWeek\",\"W\"),U(\"week\",5),U(\"isoWeek\",5),pt(\"w\",rt),pt(\"ww\",rt,Q),pt(\"W\",rt),pt(\"WW\",rt,Q),bt([\"w\",\"ww\",\"W\",\"WW\"],(function(t,e,n,r){e[r.substr(0,1)]=G(t)})),z(\"d\",0,\"do\",\"day\"),z(\"dd\",0,0,(function(t){return this.localeData().weekdaysMin(this,t)})),z(\"ddd\",0,0,(function(t){return this.localeData().weekdaysShort(this,t)})),z(\"dddd\",0,0,(function(t){return this.localeData().weekdays(this,t)})),z(\"e\",0,0,\"weekday\"),z(\"E\",0,0,\"isoWeekday\"),B(\"day\",\"d\"),B(\"weekday\",\"e\"),B(\"isoWeekday\",\"E\"),U(\"day\",11),U(\"weekday\",11),U(\"isoWeekday\",11),pt(\"d\",rt),pt(\"e\",rt),pt(\"E\",rt),pt(\"dd\",(function(t,e){return e.weekdaysMinRegex(t)})),pt(\"ddd\",(function(t,e){return e.weekdaysShortRegex(t)})),pt(\"dddd\",(function(t,e){return e.weekdaysRegex(t)})),bt([\"dd\",\"ddd\",\"dddd\"],(function(t,e,n,r){var i=n._locale.weekdaysParse(t,r,n._strict);null!=i?e.d=i:m(n).invalidWeekday=t})),bt([\"d\",\"e\",\"E\"],(function(t,e,n,r){e[r]=G(t)}));var Yt=\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),Ht=\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),Vt=\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),Ut=ft,Wt=ft,qt=ft;function Gt(t,e,n){var r,i,a,o=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)a=p([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(a,\"\").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(a,\"\").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(a,\"\").toLocaleLowerCase();return n?\"dddd\"===e?-1!==(i=yt.call(this._weekdaysParse,o))?i:null:\"ddd\"===e?-1!==(i=yt.call(this._shortWeekdaysParse,o))?i:null:-1!==(i=yt.call(this._minWeekdaysParse,o))?i:null:\"dddd\"===e?-1!==(i=yt.call(this._weekdaysParse,o))||-1!==(i=yt.call(this._shortWeekdaysParse,o))||-1!==(i=yt.call(this._minWeekdaysParse,o))?i:null:\"ddd\"===e?-1!==(i=yt.call(this._shortWeekdaysParse,o))||-1!==(i=yt.call(this._weekdaysParse,o))||-1!==(i=yt.call(this._minWeekdaysParse,o))?i:null:-1!==(i=yt.call(this._minWeekdaysParse,o))||-1!==(i=yt.call(this._weekdaysParse,o))||-1!==(i=yt.call(this._shortWeekdaysParse,o))?i:null}function Xt(){function t(t,e){return e.length-t.length}var e,n,r,i,a,o=[],s=[],l=[],c=[];for(e=0;e<7;e++)n=p([2e3,1]).day(e),r=gt(this.weekdaysMin(n,\"\")),i=gt(this.weekdaysShort(n,\"\")),a=gt(this.weekdays(n,\"\")),o.push(r),s.push(i),l.push(a),c.push(r),c.push(i),c.push(a);o.sort(t),s.sort(t),l.sort(t),c.sort(t),this._weekdaysRegex=new RegExp(\"^(\"+c.join(\"|\")+\")\",\"i\"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp(\"^(\"+l.join(\"|\")+\")\",\"i\"),this._weekdaysShortStrictRegex=new RegExp(\"^(\"+s.join(\"|\")+\")\",\"i\"),this._weekdaysMinStrictRegex=new RegExp(\"^(\"+o.join(\"|\")+\")\",\"i\")}function Zt(){return this.hours()%12||12}function Jt(t,e){z(t,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)}))}function Kt(t,e){return e._meridiemParse}z(\"H\",[\"HH\",2],0,\"hour\"),z(\"h\",[\"hh\",2],0,Zt),z(\"k\",[\"kk\",2],0,(function(){return this.hours()||24})),z(\"hmm\",0,0,(function(){return\"\"+Zt.apply(this)+O(this.minutes(),2)})),z(\"hmmss\",0,0,(function(){return\"\"+Zt.apply(this)+O(this.minutes(),2)+O(this.seconds(),2)})),z(\"Hmm\",0,0,(function(){return\"\"+this.hours()+O(this.minutes(),2)})),z(\"Hmmss\",0,0,(function(){return\"\"+this.hours()+O(this.minutes(),2)+O(this.seconds(),2)})),Jt(\"a\",!0),Jt(\"A\",!1),B(\"hour\",\"h\"),U(\"hour\",13),pt(\"a\",Kt),pt(\"A\",Kt),pt(\"H\",rt),pt(\"h\",rt),pt(\"k\",rt),pt(\"HH\",rt,Q),pt(\"hh\",rt,Q),pt(\"kk\",rt,Q),pt(\"hmm\",it),pt(\"hmmss\",at),pt(\"Hmm\",it),pt(\"Hmmss\",at),_t([\"H\",\"HH\"],3),_t([\"k\",\"kk\"],(function(t,e,n){var r=G(t);e[3]=24===r?0:r})),_t([\"a\",\"A\"],(function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t})),_t([\"h\",\"hh\"],(function(t,e,n){e[3]=G(t),m(n).bigHour=!0})),_t(\"hmm\",(function(t,e,n){var r=t.length-2;e[3]=G(t.substr(0,r)),e[4]=G(t.substr(r)),m(n).bigHour=!0})),_t(\"hmmss\",(function(t,e,n){var r=t.length-4,i=t.length-2;e[3]=G(t.substr(0,r)),e[4]=G(t.substr(r,2)),e[5]=G(t.substr(i)),m(n).bigHour=!0})),_t(\"Hmm\",(function(t,e,n){var r=t.length-2;e[3]=G(t.substr(0,r)),e[4]=G(t.substr(r))})),_t(\"Hmmss\",(function(t,e,n){var r=t.length-4,i=t.length-2;e[3]=G(t.substr(0,r)),e[4]=G(t.substr(r,2)),e[5]=G(t.substr(i))}));var $t,Qt=X(\"Hours\",!0),te={calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},longDateFormat:{LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},invalidDate:\"Invalid date\",ordinal:\"%d\",dayOfMonthOrdinalParse:/\\d{1,2}/,relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",w:\"a week\",ww:\"%d weeks\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},months:kt,monthsShort:Mt,week:{dow:0,doy:6},weekdays:Yt,weekdaysMin:Vt,weekdaysShort:Ht,meridiemParse:/[ap]\\.?m?\\.?/i},ee={},ne={};function re(t,e){var n,r=Math.min(t.length,e.length);for(n=0;n<r;n+=1)if(t[n]!==e[n])return n;return r}function ie(t){return t?t.toLowerCase().replace(\"_\",\"-\"):t}function ae(e){var r=null;if(void 0===ee[e]&&void 0!==t&&t&&t.exports)try{r=$t._abbr,n(\"RnhZ\")(\"./\"+e),oe(r)}catch(i){ee[e]=null}return ee[e]}function oe(t,e){var n;return t&&((n=c(e)?le(t):se(t,e))?$t=n:\"undefined\"!=typeof console&&console.warn&&console.warn(\"Locale \"+t+\" not found. Did you forget to load it?\")),$t._abbr}function se(t,e){if(null!==e){var n,r=te;if(e.abbr=t,null!=ee[t])A(\"defineLocaleOverride\",\"use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info.\"),r=ee[t]._config;else if(null!=e.parentLocale)if(null!=ee[e.parentLocale])r=ee[e.parentLocale]._config;else{if(null==(n=ae(e.parentLocale)))return ne[e.parentLocale]||(ne[e.parentLocale]=[]),ne[e.parentLocale].push({name:t,config:e}),null;r=n._config}return ee[t]=new E(C(r,e)),ne[t]&&ne[t].forEach((function(t){se(t.name,t.config)})),oe(t),ee[t]}return delete ee[t],null}function le(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return $t;if(!a(t)){if(e=ae(t))return e;t=[t]}return function(t){for(var e,n,r,i,a=0;a<t.length;){for(e=(i=ie(t[a]).split(\"-\")).length,n=(n=ie(t[a+1]))?n.split(\"-\"):null;e>0;){if(r=ae(i.slice(0,e).join(\"-\")))return r;if(n&&n.length>=e&&re(i,n)>=e-1)break;e--}a++}return $t}(t)}function ce(t){var e,n=t._a;return n&&-2===m(t).overflow&&(e=n[1]<0||n[1]>11?1:n[2]<1||n[2]>wt(n[0],n[1])?2:n[3]<0||n[3]>24||24===n[3]&&(0!==n[4]||0!==n[5]||0!==n[6])?3:n[4]<0||n[4]>59?4:n[5]<0||n[5]>59?5:n[6]<0||n[6]>999?6:-1,m(t)._overflowDayOfYear&&(e<0||e>2)&&(e=2),m(t)._overflowWeeks&&-1===e&&(e=7),m(t)._overflowWeekday&&-1===e&&(e=8),m(t).overflow=e),t}var ue=/^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,he=/^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,de=/Z|[+-]\\d\\d(?::?\\d\\d)?/,fe=[[\"YYYYYY-MM-DD\",/[+-]\\d{6}-\\d\\d-\\d\\d/],[\"YYYY-MM-DD\",/\\d{4}-\\d\\d-\\d\\d/],[\"GGGG-[W]WW-E\",/\\d{4}-W\\d\\d-\\d/],[\"GGGG-[W]WW\",/\\d{4}-W\\d\\d/,!1],[\"YYYY-DDD\",/\\d{4}-\\d{3}/],[\"YYYY-MM\",/\\d{4}-\\d\\d/,!1],[\"YYYYYYMMDD\",/[+-]\\d{10}/],[\"YYYYMMDD\",/\\d{8}/],[\"GGGG[W]WWE\",/\\d{4}W\\d{3}/],[\"GGGG[W]WW\",/\\d{4}W\\d{2}/,!1],[\"YYYYDDD\",/\\d{7}/],[\"YYYYMM\",/\\d{6}/,!1],[\"YYYY\",/\\d{4}/,!1]],pe=[[\"HH:mm:ss.SSSS\",/\\d\\d:\\d\\d:\\d\\d\\.\\d+/],[\"HH:mm:ss,SSSS\",/\\d\\d:\\d\\d:\\d\\d,\\d+/],[\"HH:mm:ss\",/\\d\\d:\\d\\d:\\d\\d/],[\"HH:mm\",/\\d\\d:\\d\\d/],[\"HHmmss.SSSS\",/\\d\\d\\d\\d\\d\\d\\.\\d+/],[\"HHmmss,SSSS\",/\\d\\d\\d\\d\\d\\d,\\d+/],[\"HHmmss\",/\\d\\d\\d\\d\\d\\d/],[\"HHmm\",/\\d\\d\\d\\d/],[\"HH\",/\\d\\d/]],me=/^\\/?Date\\((-?\\d+)/i,ge=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,ye={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function ve(t){var e,n,r,i,a,o,s=t._i,l=ue.exec(s)||he.exec(s);if(l){for(m(t).iso=!0,e=0,n=fe.length;e<n;e++)if(fe[e][1].exec(l[1])){i=fe[e][0],r=!1!==fe[e][2];break}if(null==i)return void(t._isValid=!1);if(l[3]){for(e=0,n=pe.length;e<n;e++)if(pe[e][1].exec(l[3])){a=(l[2]||\" \")+pe[e][0];break}if(null==a)return void(t._isValid=!1)}if(!r&&null!=a)return void(t._isValid=!1);if(l[4]){if(!de.exec(l[4]))return void(t._isValid=!1);o=\"Z\"}t._f=i+(a||\"\")+(o||\"\"),we(t)}else t._isValid=!1}function _e(t){var e,n,r,i,a,o,s,l,c,u=ge.exec(t._i.replace(/\\([^)]*\\)|[\\n\\t]/g,\" \").replace(/(\\s\\s+)/g,\" \").replace(/^\\s\\s*/,\"\").replace(/\\s\\s*$/,\"\"));if(u){if(n=u[3],r=u[2],i=u[5],a=u[6],o=u[7],s=[(l=u[4],c=parseInt(l,10),c<=49?2e3+c:c<=999?1900+c:c),Mt.indexOf(n),parseInt(r,10),parseInt(i,10),parseInt(a,10)],o&&s.push(parseInt(o,10)),!function(t,e,n){return!t||Ht.indexOf(t)===new Date(e[0],e[1],e[2]).getDay()||(m(n).weekdayMismatch=!0,n._isValid=!1,!1)}(u[1],e=s,t))return;t._a=e,t._tzm=function(t,e,n){if(t)return ye[t];if(e)return 0;var r=parseInt(n,10),i=r%100;return(r-i)/100*60+i}(u[8],u[9],u[10]),t._d=Rt.apply(null,t._a),t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),m(t).rfc2822=!0}else t._isValid=!1}function be(t,e,n){return null!=t?t:null!=e?e:n}function xe(t){var e,n,r,a,o,s=[];if(!t._d){for(r=function(t){var e=new Date(i.now());return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}(t),t._w&&null==t._a[2]&&null==t._a[1]&&function(t){var e,n,r,i,a,o,s,l,c;null!=(e=t._w).GG||null!=e.W||null!=e.E?(a=1,o=4,n=be(e.GG,t._a[0],Ft(Te(),1,4).year),r=be(e.W,1),((i=be(e.E,1))<1||i>7)&&(l=!0)):(a=t._locale._week.dow,o=t._locale._week.doy,c=Ft(Te(),a,o),n=be(e.gg,t._a[0],c.year),r=be(e.w,c.week),null!=e.d?((i=e.d)<0||i>6)&&(l=!0):null!=e.e?(i=e.e+a,(e.e<0||e.e>6)&&(l=!0)):i=a),r<1||r>Nt(n,a,o)?m(t)._overflowWeeks=!0:null!=l?m(t)._overflowWeekday=!0:(s=jt(n,r,i,a,o),t._a[0]=s.year,t._dayOfYear=s.dayOfYear)}(t),null!=t._dayOfYear&&(o=be(t._a[0],r[0]),(t._dayOfYear>Dt(o)||0===t._dayOfYear)&&(m(t)._overflowDayOfYear=!0),n=Rt(o,0,t._dayOfYear),t._a[1]=n.getUTCMonth(),t._a[2]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=s[e]=r[e];for(;e<7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[3]&&0===t._a[4]&&0===t._a[5]&&0===t._a[6]&&(t._nextDay=!0,t._a[3]=0),t._d=(t._useUTC?Rt:Pt).apply(null,s),a=t._useUTC?t._d.getUTCDay():t._d.getDay(),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[3]=24),t._w&&void 0!==t._w.d&&t._w.d!==a&&(m(t).weekdayMismatch=!0)}}function we(t){if(t._f!==i.ISO_8601)if(t._f!==i.RFC_2822){t._a=[],m(t).empty=!0;var e,n,r,a,o,s,l=\"\"+t._i,c=l.length,u=0;for(r=F(t._f,t._locale).match(D)||[],e=0;e<r.length;e++)(n=(l.match(mt(a=r[e],t))||[])[0])&&((o=l.substr(0,l.indexOf(n))).length>0&&m(t).unusedInput.push(o),l=l.slice(l.indexOf(n)+n.length),u+=n.length),R[a]?(n?m(t).empty=!1:m(t).unusedTokens.push(a),xt(a,n,t)):t._strict&&!n&&m(t).unusedTokens.push(a);m(t).charsLeftOver=c-u,l.length>0&&m(t).unusedInput.push(l),t._a[3]<=12&&!0===m(t).bigHour&&t._a[3]>0&&(m(t).bigHour=void 0),m(t).parsedDateParts=t._a.slice(0),m(t).meridiem=t._meridiem,t._a[3]=function(t,e,n){var r;return null==n?e:null!=t.meridiemHour?t.meridiemHour(e,n):null!=t.isPM?((r=t.isPM(n))&&e<12&&(e+=12),r||12!==e||(e=0),e):e}(t._locale,t._a[3],t._meridiem),null!==(s=m(t).era)&&(t._a[0]=t._locale.erasConvertYear(s,t._a[0])),xe(t),ce(t)}else _e(t);else ve(t)}function ke(t){var e=t._i,n=t._f;return t._locale=t._locale||le(t._l),null===e||void 0===n&&\"\"===e?y({nullInput:!0}):(\"string\"==typeof e&&(t._i=e=t._locale.preparse(e)),w(e)?new x(ce(e)):(h(e)?t._d=e:a(n)?function(t){var e,n,r,i,a,o,s=!1;if(0===t._f.length)return m(t).invalidFormat=!0,void(t._d=new Date(NaN));for(i=0;i<t._f.length;i++)a=0,o=!1,e=b({},t),null!=t._useUTC&&(e._useUTC=t._useUTC),e._f=t._f[i],we(e),g(e)&&(o=!0),a+=m(e).charsLeftOver,a+=10*m(e).unusedTokens.length,m(e).score=a,s?a<r&&(r=a,n=e):(null==r||a<r||o)&&(r=a,n=e,o&&(s=!0));f(t,n||e)}(t):n?we(t):function(t){var e=t._i;c(e)?t._d=new Date(i.now()):h(e)?t._d=new Date(e.valueOf()):\"string\"==typeof e?function(t){var e=me.exec(t._i);null===e?(ve(t),!1===t._isValid&&(delete t._isValid,_e(t),!1===t._isValid&&(delete t._isValid,t._strict?t._isValid=!1:i.createFromInputFallback(t)))):t._d=new Date(+e[1])}(t):a(e)?(t._a=d(e.slice(0),(function(t){return parseInt(t,10)})),xe(t)):o(e)?function(t){if(!t._d){var e=H(t._i);t._a=d([e.year,e.month,void 0===e.day?e.date:e.day,e.hour,e.minute,e.second,e.millisecond],(function(t){return t&&parseInt(t,10)})),xe(t)}}(t):u(e)?t._d=new Date(e):i.createFromInputFallback(t)}(t),g(t)||(t._d=null),t))}function Me(t,e,n,r,i){var s,c={};return!0!==e&&!1!==e||(r=e,e=void 0),!0!==n&&!1!==n||(r=n,n=void 0),(o(t)&&l(t)||a(t)&&0===t.length)&&(t=void 0),c._isAMomentObject=!0,c._useUTC=c._isUTC=i,c._l=n,c._i=t,c._f=e,c._strict=r,(s=new x(ce(ke(c))))._nextDay&&(s.add(1,\"d\"),s._nextDay=void 0),s}function Te(t,e,n,r){return Me(t,e,n,r,!1)}i.createFromInputFallback=M(\"value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.\",(function(t){t._d=new Date(t._i+(t._useUTC?\" UTC\":\"\"))})),i.ISO_8601=function(){},i.RFC_2822=function(){};var Se=M(\"moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/\",(function(){var t=Te.apply(null,arguments);return this.isValid()&&t.isValid()?t<this?this:t:y()})),Ae=M(\"moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/\",(function(){var t=Te.apply(null,arguments);return this.isValid()&&t.isValid()?t>this?this:t:y()}));function Le(t,e){var n,r;if(1===e.length&&a(e[0])&&(e=e[0]),!e.length)return Te();for(n=e[0],r=1;r<e.length;++r)e[r].isValid()&&!e[r][t](n)||(n=e[r]);return n}var Ce=[\"year\",\"quarter\",\"month\",\"week\",\"day\",\"hour\",\"minute\",\"second\",\"millisecond\"];function Ee(t){var e=H(t),n=e.year||0,r=e.quarter||0,i=e.month||0,a=e.week||e.isoWeek||0,o=e.day||0,l=e.hour||0,c=e.minute||0,u=e.second||0,h=e.millisecond||0;this._isValid=function(t){var e,n,r=!1;for(e in t)if(s(t,e)&&(-1===yt.call(Ce,e)||null!=t[e]&&isNaN(t[e])))return!1;for(n=0;n<Ce.length;++n)if(t[Ce[n]]){if(r)return!1;parseFloat(t[Ce[n]])!==G(t[Ce[n]])&&(r=!0)}return!0}(e),this._milliseconds=+h+1e3*u+6e4*c+1e3*l*60*60,this._days=+o+7*a,this._months=+i+3*r+12*n,this._data={},this._locale=le(),this._bubble()}function Oe(t){return t instanceof Ee}function De(t){return t<0?-1*Math.round(-1*t):Math.round(t)}function Ie(t,e){z(t,0,0,(function(){var t=this.utcOffset(),n=\"+\";return t<0&&(t=-t,n=\"-\"),n+O(~~(t/60),2)+e+O(~~t%60,2)}))}Ie(\"Z\",\":\"),Ie(\"ZZ\",\"\"),pt(\"Z\",dt),pt(\"ZZ\",dt),_t([\"Z\",\"ZZ\"],(function(t,e,n){n._useUTC=!0,n._tzm=Re(dt,t)}));var Pe=/([\\+\\-]|\\d\\d)/gi;function Re(t,e){var n,r,i=(e||\"\").match(t);return null===i?null:0===(r=60*(n=((i[i.length-1]||[])+\"\").match(Pe)||[\"-\",0,0])[1]+G(n[2]))?0:\"+\"===n[0]?r:-r}function ze(t,e){var n,r;return e._isUTC?(n=e.clone(),r=(w(t)||h(t)?t.valueOf():Te(t).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+r),i.updateOffset(n,!1),n):Te(t).local()}function je(t){return-Math.round(t._d.getTimezoneOffset())}function Fe(){return!!this.isValid()&&this._isUTC&&0===this._offset}i.updateOffset=function(){};var Ne=/^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,Be=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Ye(t,e){var n,r,i,a,o,l,c=t,h=null;return Oe(t)?c={ms:t._milliseconds,d:t._days,M:t._months}:u(t)||!isNaN(+t)?(c={},e?c[e]=+t:c.milliseconds=+t):(h=Ne.exec(t))?(n=\"-\"===h[1]?-1:1,c={y:0,d:G(h[2])*n,h:G(h[3])*n,m:G(h[4])*n,s:G(h[5])*n,ms:G(De(1e3*h[6]))*n}):(h=Be.exec(t))?c={y:He(h[2],n=\"-\"===h[1]?-1:1),M:He(h[3],n),w:He(h[4],n),d:He(h[5],n),h:He(h[6],n),m:He(h[7],n),s:He(h[8],n)}:null==c?c={}:\"object\"==typeof c&&(\"from\"in c||\"to\"in c)&&(a=Te(c.from),o=Te(c.to),i=a.isValid()&&o.isValid()?(o=ze(o,a),a.isBefore(o)?l=Ve(a,o):((l=Ve(o,a)).milliseconds=-l.milliseconds,l.months=-l.months),l):{milliseconds:0,months:0},(c={}).ms=i.milliseconds,c.M=i.months),r=new Ee(c),Oe(t)&&s(t,\"_locale\")&&(r._locale=t._locale),Oe(t)&&s(t,\"_isValid\")&&(r._isValid=t._isValid),r}function He(t,e){var n=t&&parseFloat(t.replace(\",\",\".\"));return(isNaN(n)?0:n)*e}function Ve(t,e){var n={};return n.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(n.months,\"M\").isAfter(e)&&--n.months,n.milliseconds=+e-+t.clone().add(n.months,\"M\"),n}function Ue(t,e){return function(n,r){var i;return null===r||isNaN(+r)||(A(e,\"moment().\"+e+\"(period, number) is deprecated. Please use moment().\"+e+\"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.\"),i=n,n=r,r=i),We(this,Ye(n,r),t),this}}function We(t,e,n,r){var a=e._milliseconds,o=De(e._days),s=De(e._months);t.isValid()&&(r=null==r||r,s&&Ct(t,Z(t,\"Month\")+s*n),o&&J(t,\"Date\",Z(t,\"Date\")+o*n),a&&t._d.setTime(t._d.valueOf()+a*n),r&&i.updateOffset(t,o||s))}Ye.fn=Ee.prototype,Ye.invalid=function(){return Ye(NaN)};var qe=Ue(1,\"add\"),Ge=Ue(-1,\"subtract\");function Xe(t){return\"string\"==typeof t||t instanceof String}function Ze(t){return w(t)||h(t)||Xe(t)||u(t)||function(t){var e=a(t),n=!1;return e&&(n=0===t.filter((function(e){return!u(e)&&Xe(t)})).length),e&&n}(t)||function(t){var e,n=o(t)&&!l(t),r=!1,i=[\"years\",\"year\",\"y\",\"months\",\"month\",\"M\",\"days\",\"day\",\"d\",\"dates\",\"date\",\"D\",\"hours\",\"hour\",\"h\",\"minutes\",\"minute\",\"m\",\"seconds\",\"second\",\"s\",\"milliseconds\",\"millisecond\",\"ms\"];for(e=0;e<i.length;e+=1)r=r||s(t,i[e]);return n&&r}(t)||null==t}function Je(t){var e,n=o(t)&&!l(t),r=!1,i=[\"sameDay\",\"nextDay\",\"lastDay\",\"nextWeek\",\"lastWeek\",\"sameElse\"];for(e=0;e<i.length;e+=1)r=r||s(t,i[e]);return n&&r}function Ke(t,e){if(t.date()<e.date())return-Ke(e,t);var n=12*(e.year()-t.year())+(e.month()-t.month()),r=t.clone().add(n,\"months\");return-(n+(e-r<0?(e-r)/(r-t.clone().add(n-1,\"months\")):(e-r)/(t.clone().add(n+1,\"months\")-r)))||0}function $e(t){var e;return void 0===t?this._locale._abbr:(null!=(e=le(t))&&(this._locale=e),this)}i.defaultFormat=\"YYYY-MM-DDTHH:mm:ssZ\",i.defaultFormatUtc=\"YYYY-MM-DDTHH:mm:ss[Z]\";var Qe=M(\"moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.\",(function(t){return void 0===t?this.localeData():this.locale(t)}));function tn(){return this._locale}var en=1e3,nn=6e4,rn=36e5,an=126227808e5;function on(t,e){return(t%e+e)%e}function sn(t,e,n){return t<100&&t>=0?new Date(t+400,e,n)-an:new Date(t,e,n).valueOf()}function ln(t,e,n){return t<100&&t>=0?Date.UTC(t+400,e,n)-an:Date.UTC(t,e,n)}function cn(t,e){return e.erasAbbrRegex(t)}function un(){var t,e,n=[],r=[],i=[],a=[],o=this.eras();for(t=0,e=o.length;t<e;++t)r.push(gt(o[t].name)),n.push(gt(o[t].abbr)),i.push(gt(o[t].narrow)),a.push(gt(o[t].name)),a.push(gt(o[t].abbr)),a.push(gt(o[t].narrow));this._erasRegex=new RegExp(\"^(\"+a.join(\"|\")+\")\",\"i\"),this._erasNameRegex=new RegExp(\"^(\"+r.join(\"|\")+\")\",\"i\"),this._erasAbbrRegex=new RegExp(\"^(\"+n.join(\"|\")+\")\",\"i\"),this._erasNarrowRegex=new RegExp(\"^(\"+i.join(\"|\")+\")\",\"i\")}function hn(t,e){z(0,[t,t.length],0,e)}function dn(t,e,n,r,i){var a;return null==t?Ft(this,r,i).year:(e>(a=Nt(t,r,i))&&(e=a),fn.call(this,t,e,n,r,i))}function fn(t,e,n,r,i){var a=jt(t,e,n,r,i),o=Rt(a.year,0,a.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}z(\"N\",0,0,\"eraAbbr\"),z(\"NN\",0,0,\"eraAbbr\"),z(\"NNN\",0,0,\"eraAbbr\"),z(\"NNNN\",0,0,\"eraName\"),z(\"NNNNN\",0,0,\"eraNarrow\"),z(\"y\",[\"y\",1],\"yo\",\"eraYear\"),z(\"y\",[\"yy\",2],0,\"eraYear\"),z(\"y\",[\"yyy\",3],0,\"eraYear\"),z(\"y\",[\"yyyy\",4],0,\"eraYear\"),pt(\"N\",cn),pt(\"NN\",cn),pt(\"NNN\",cn),pt(\"NNNN\",(function(t,e){return e.erasNameRegex(t)})),pt(\"NNNNN\",(function(t,e){return e.erasNarrowRegex(t)})),_t([\"N\",\"NN\",\"NNN\",\"NNNN\",\"NNNNN\"],(function(t,e,n,r){var i=n._locale.erasParse(t,r,n._strict);i?m(n).era=i:m(n).invalidEra=t})),pt(\"y\",ct),pt(\"yy\",ct),pt(\"yyy\",ct),pt(\"yyyy\",ct),pt(\"yo\",(function(t,e){return e._eraYearOrdinalRegex||ct})),_t([\"y\",\"yy\",\"yyy\",\"yyyy\"],0),_t([\"yo\"],(function(t,e,n,r){var i;n._locale._eraYearOrdinalRegex&&(i=t.match(n._locale._eraYearOrdinalRegex)),e[0]=n._locale.eraYearOrdinalParse?n._locale.eraYearOrdinalParse(t,i):parseInt(t,10)})),z(0,[\"gg\",2],0,(function(){return this.weekYear()%100})),z(0,[\"GG\",2],0,(function(){return this.isoWeekYear()%100})),hn(\"gggg\",\"weekYear\"),hn(\"ggggg\",\"weekYear\"),hn(\"GGGG\",\"isoWeekYear\"),hn(\"GGGGG\",\"isoWeekYear\"),B(\"weekYear\",\"gg\"),B(\"isoWeekYear\",\"GG\"),U(\"weekYear\",1),U(\"isoWeekYear\",1),pt(\"G\",ut),pt(\"g\",ut),pt(\"GG\",rt,Q),pt(\"gg\",rt,Q),pt(\"GGGG\",st,et),pt(\"gggg\",st,et),pt(\"GGGGG\",lt,nt),pt(\"ggggg\",lt,nt),bt([\"gggg\",\"ggggg\",\"GGGG\",\"GGGGG\"],(function(t,e,n,r){e[r.substr(0,2)]=G(t)})),bt([\"gg\",\"GG\"],(function(t,e,n,r){e[r]=i.parseTwoDigitYear(t)})),z(\"Q\",0,\"Qo\",\"quarter\"),B(\"quarter\",\"Q\"),U(\"quarter\",7),pt(\"Q\",$),_t(\"Q\",(function(t,e){e[1]=3*(G(t)-1)})),z(\"D\",[\"DD\",2],\"Do\",\"date\"),B(\"date\",\"D\"),U(\"date\",9),pt(\"D\",rt),pt(\"DD\",rt,Q),pt(\"Do\",(function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient})),_t([\"D\",\"DD\"],2),_t(\"Do\",(function(t,e){e[2]=G(t.match(rt)[0])}));var pn=X(\"Date\",!0);z(\"DDD\",[\"DDDD\",3],\"DDDo\",\"dayOfYear\"),B(\"dayOfYear\",\"DDD\"),U(\"dayOfYear\",4),pt(\"DDD\",ot),pt(\"DDDD\",tt),_t([\"DDD\",\"DDDD\"],(function(t,e,n){n._dayOfYear=G(t)})),z(\"m\",[\"mm\",2],0,\"minute\"),B(\"minute\",\"m\"),U(\"minute\",14),pt(\"m\",rt),pt(\"mm\",rt,Q),_t([\"m\",\"mm\"],4);var mn=X(\"Minutes\",!1);z(\"s\",[\"ss\",2],0,\"second\"),B(\"second\",\"s\"),U(\"second\",15),pt(\"s\",rt),pt(\"ss\",rt,Q),_t([\"s\",\"ss\"],5);var gn,yn,vn=X(\"Seconds\",!1);for(z(\"S\",0,0,(function(){return~~(this.millisecond()/100)})),z(0,[\"SS\",2],0,(function(){return~~(this.millisecond()/10)})),z(0,[\"SSS\",3],0,\"millisecond\"),z(0,[\"SSSS\",4],0,(function(){return 10*this.millisecond()})),z(0,[\"SSSSS\",5],0,(function(){return 100*this.millisecond()})),z(0,[\"SSSSSS\",6],0,(function(){return 1e3*this.millisecond()})),z(0,[\"SSSSSSS\",7],0,(function(){return 1e4*this.millisecond()})),z(0,[\"SSSSSSSS\",8],0,(function(){return 1e5*this.millisecond()})),z(0,[\"SSSSSSSSS\",9],0,(function(){return 1e6*this.millisecond()})),B(\"millisecond\",\"ms\"),U(\"millisecond\",16),pt(\"S\",ot,$),pt(\"SS\",ot,Q),pt(\"SSS\",ot,tt),gn=\"SSSS\";gn.length<=9;gn+=\"S\")pt(gn,ct);function _n(t,e){e[6]=G(1e3*(\"0.\"+t))}for(gn=\"S\";gn.length<=9;gn+=\"S\")_t(gn,_n);yn=X(\"Milliseconds\",!1),z(\"z\",0,0,\"zoneAbbr\"),z(\"zz\",0,0,\"zoneName\");var bn=x.prototype;function xn(t){return t}bn.add=qe,bn.calendar=function(t,e){1===arguments.length&&(arguments[0]?Ze(arguments[0])?(t=arguments[0],e=void 0):Je(arguments[0])&&(e=arguments[0],t=void 0):(t=void 0,e=void 0));var n=t||Te(),r=ze(n,this).startOf(\"day\"),a=i.calendarFormat(this,r)||\"sameElse\",o=e&&(L(e[a])?e[a].call(this,n):e[a]);return this.format(o||this.localeData().calendar(a,this,Te(n)))},bn.clone=function(){return new x(this)},bn.diff=function(t,e,n){var r,i,a;if(!this.isValid())return NaN;if(!(r=ze(t,this)).isValid())return NaN;switch(i=6e4*(r.utcOffset()-this.utcOffset()),e=Y(e)){case\"year\":a=Ke(this,r)/12;break;case\"month\":a=Ke(this,r);break;case\"quarter\":a=Ke(this,r)/3;break;case\"second\":a=(this-r)/1e3;break;case\"minute\":a=(this-r)/6e4;break;case\"hour\":a=(this-r)/36e5;break;case\"day\":a=(this-r-i)/864e5;break;case\"week\":a=(this-r-i)/6048e5;break;default:a=this-r}return n?a:q(a)},bn.endOf=function(t){var e,n;if(void 0===(t=Y(t))||\"millisecond\"===t||!this.isValid())return this;switch(n=this._isUTC?ln:sn,t){case\"year\":e=n(this.year()+1,0,1)-1;break;case\"quarter\":e=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case\"month\":e=n(this.year(),this.month()+1,1)-1;break;case\"week\":e=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case\"isoWeek\":e=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case\"day\":case\"date\":e=n(this.year(),this.month(),this.date()+1)-1;break;case\"hour\":e=this._d.valueOf(),e+=rn-on(e+(this._isUTC?0:this.utcOffset()*nn),rn)-1;break;case\"minute\":e=this._d.valueOf(),e+=nn-on(e,nn)-1;break;case\"second\":e=this._d.valueOf(),e+=en-on(e,en)-1}return this._d.setTime(e),i.updateOffset(this,!0),this},bn.format=function(t){t||(t=this.isUtc()?i.defaultFormatUtc:i.defaultFormat);var e=j(this,t);return this.localeData().postformat(e)},bn.from=function(t,e){return this.isValid()&&(w(t)&&t.isValid()||Te(t).isValid())?Ye({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()},bn.fromNow=function(t){return this.from(Te(),t)},bn.to=function(t,e){return this.isValid()&&(w(t)&&t.isValid()||Te(t).isValid())?Ye({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()},bn.toNow=function(t){return this.to(Te(),t)},bn.get=function(t){return L(this[t=Y(t)])?this[t]():this},bn.invalidAt=function(){return m(this).overflow},bn.isAfter=function(t,e){var n=w(t)?t:Te(t);return!(!this.isValid()||!n.isValid())&&(\"millisecond\"===(e=Y(e)||\"millisecond\")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(e).valueOf())},bn.isBefore=function(t,e){var n=w(t)?t:Te(t);return!(!this.isValid()||!n.isValid())&&(\"millisecond\"===(e=Y(e)||\"millisecond\")?this.valueOf()<n.valueOf():this.clone().endOf(e).valueOf()<n.valueOf())},bn.isBetween=function(t,e,n,r){var i=w(t)?t:Te(t),a=w(e)?e:Te(e);return!!(this.isValid()&&i.isValid()&&a.isValid())&&(\"(\"===(r=r||\"()\")[0]?this.isAfter(i,n):!this.isBefore(i,n))&&(\")\"===r[1]?this.isBefore(a,n):!this.isAfter(a,n))},bn.isSame=function(t,e){var n,r=w(t)?t:Te(t);return!(!this.isValid()||!r.isValid())&&(\"millisecond\"===(e=Y(e)||\"millisecond\")?this.valueOf()===r.valueOf():(n=r.valueOf(),this.clone().startOf(e).valueOf()<=n&&n<=this.clone().endOf(e).valueOf()))},bn.isSameOrAfter=function(t,e){return this.isSame(t,e)||this.isAfter(t,e)},bn.isSameOrBefore=function(t,e){return this.isSame(t,e)||this.isBefore(t,e)},bn.isValid=function(){return g(this)},bn.lang=Qe,bn.locale=$e,bn.localeData=tn,bn.max=Ae,bn.min=Se,bn.parsingFlags=function(){return f({},m(this))},bn.set=function(t,e){if(\"object\"==typeof t){var n,r=function(t){var e,n=[];for(e in t)s(t,e)&&n.push({unit:e,priority:V[e]});return n.sort((function(t,e){return t.priority-e.priority})),n}(t=H(t));for(n=0;n<r.length;n++)this[r[n].unit](t[r[n].unit])}else if(L(this[t=Y(t)]))return this[t](e);return this},bn.startOf=function(t){var e,n;if(void 0===(t=Y(t))||\"millisecond\"===t||!this.isValid())return this;switch(n=this._isUTC?ln:sn,t){case\"year\":e=n(this.year(),0,1);break;case\"quarter\":e=n(this.year(),this.month()-this.month()%3,1);break;case\"month\":e=n(this.year(),this.month(),1);break;case\"week\":e=n(this.year(),this.month(),this.date()-this.weekday());break;case\"isoWeek\":e=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case\"day\":case\"date\":e=n(this.year(),this.month(),this.date());break;case\"hour\":e=this._d.valueOf(),e-=on(e+(this._isUTC?0:this.utcOffset()*nn),rn);break;case\"minute\":e=this._d.valueOf(),e-=on(e,nn);break;case\"second\":e=this._d.valueOf(),e-=on(e,en)}return this._d.setTime(e),i.updateOffset(this,!0),this},bn.subtract=Ge,bn.toArray=function(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]},bn.toObject=function(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}},bn.toDate=function(){return new Date(this.valueOf())},bn.toISOString=function(t){if(!this.isValid())return null;var e=!0!==t,n=e?this.clone().utc():this;return n.year()<0||n.year()>9999?j(n,e?\"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ\"):L(Date.prototype.toISOString)?e?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace(\"Z\",j(n,\"Z\")):j(n,e?\"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYY-MM-DD[T]HH:mm:ss.SSSZ\")},bn.inspect=function(){if(!this.isValid())return\"moment.invalid(/* \"+this._i+\" */)\";var t,e,n=\"moment\",r=\"\";return this.isLocal()||(n=0===this.utcOffset()?\"moment.utc\":\"moment.parseZone\",r=\"Z\"),t=\"[\"+n+'(\"]',e=0<=this.year()&&this.year()<=9999?\"YYYY\":\"YYYYYY\",this.format(t+e+\"-MM-DD[T]HH:mm:ss.SSS\"+r+'[\")]')},\"undefined\"!=typeof Symbol&&null!=Symbol.for&&(bn[Symbol.for(\"nodejs.util.inspect.custom\")]=function(){return\"Moment<\"+this.format()+\">\"}),bn.toJSON=function(){return this.isValid()?this.toISOString():null},bn.toString=function(){return this.clone().locale(\"en\").format(\"ddd MMM DD YYYY HH:mm:ss [GMT]ZZ\")},bn.unix=function(){return Math.floor(this.valueOf()/1e3)},bn.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},bn.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},bn.eraName=function(){var t,e,n,r=this.localeData().eras();for(t=0,e=r.length;t<e;++t){if(n=this.clone().startOf(\"day\").valueOf(),r[t].since<=n&&n<=r[t].until)return r[t].name;if(r[t].until<=n&&n<=r[t].since)return r[t].name}return\"\"},bn.eraNarrow=function(){var t,e,n,r=this.localeData().eras();for(t=0,e=r.length;t<e;++t){if(n=this.clone().startOf(\"day\").valueOf(),r[t].since<=n&&n<=r[t].until)return r[t].narrow;if(r[t].until<=n&&n<=r[t].since)return r[t].narrow}return\"\"},bn.eraAbbr=function(){var t,e,n,r=this.localeData().eras();for(t=0,e=r.length;t<e;++t){if(n=this.clone().startOf(\"day\").valueOf(),r[t].since<=n&&n<=r[t].until)return r[t].abbr;if(r[t].until<=n&&n<=r[t].since)return r[t].abbr}return\"\"},bn.eraYear=function(){var t,e,n,r,a=this.localeData().eras();for(t=0,e=a.length;t<e;++t)if(n=a[t].since<=a[t].until?1:-1,r=this.clone().startOf(\"day\").valueOf(),a[t].since<=r&&r<=a[t].until||a[t].until<=r&&r<=a[t].since)return(this.year()-i(a[t].since).year())*n+a[t].offset;return this.year()},bn.year=It,bn.isLeapYear=function(){return W(this.year())},bn.weekYear=function(t){return dn.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},bn.isoWeekYear=function(t){return dn.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)},bn.quarter=bn.quarters=function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},bn.month=Et,bn.daysInMonth=function(){return wt(this.year(),this.month())},bn.week=bn.weeks=function(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),\"d\")},bn.isoWeek=bn.isoWeeks=function(t){var e=Ft(this,1,4).week;return null==t?e:this.add(7*(t-e),\"d\")},bn.weeksInYear=function(){var t=this.localeData()._week;return Nt(this.year(),t.dow,t.doy)},bn.weeksInWeekYear=function(){var t=this.localeData()._week;return Nt(this.weekYear(),t.dow,t.doy)},bn.isoWeeksInYear=function(){return Nt(this.year(),1,4)},bn.isoWeeksInISOWeekYear=function(){return Nt(this.isoWeekYear(),1,4)},bn.date=pn,bn.day=bn.days=function(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=function(t,e){return\"string\"!=typeof t?t:isNaN(t)?\"number\"==typeof(t=e.weekdaysParse(t))?t:null:parseInt(t,10)}(t,this.localeData()),this.add(t-e,\"d\")):e},bn.weekday=function(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,\"d\")},bn.isoWeekday=function(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=function(t,e){return\"string\"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7},bn.dayOfYear=function(t){var e=Math.round((this.clone().startOf(\"day\")-this.clone().startOf(\"year\"))/864e5)+1;return null==t?e:this.add(t-e,\"d\")},bn.hour=bn.hours=Qt,bn.minute=bn.minutes=mn,bn.second=bn.seconds=vn,bn.millisecond=bn.milliseconds=yn,bn.utcOffset=function(t,e,n){var r,a=this._offset||0;if(!this.isValid())return null!=t?this:NaN;if(null!=t){if(\"string\"==typeof t){if(null===(t=Re(dt,t)))return this}else Math.abs(t)<16&&!n&&(t*=60);return!this._isUTC&&e&&(r=je(this)),this._offset=t,this._isUTC=!0,null!=r&&this.add(r,\"m\"),a!==t&&(!e||this._changeInProgress?We(this,Ye(t-a,\"m\"),1,!1):this._changeInProgress||(this._changeInProgress=!0,i.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?a:je(this)},bn.utc=function(t){return this.utcOffset(0,t)},bn.local=function(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(je(this),\"m\")),this},bn.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if(\"string\"==typeof this._i){var t=Re(ht,this._i);null!=t?this.utcOffset(t):this.utcOffset(0,!0)}return this},bn.hasAlignedHourOffset=function(t){return!!this.isValid()&&(t=t?Te(t).utcOffset():0,(this.utcOffset()-t)%60==0)},bn.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},bn.isLocal=function(){return!!this.isValid()&&!this._isUTC},bn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},bn.isUtc=Fe,bn.isUTC=Fe,bn.zoneAbbr=function(){return this._isUTC?\"UTC\":\"\"},bn.zoneName=function(){return this._isUTC?\"Coordinated Universal Time\":\"\"},bn.dates=M(\"dates accessor is deprecated. Use date instead.\",pn),bn.months=M(\"months accessor is deprecated. Use month instead\",Et),bn.years=M(\"years accessor is deprecated. Use year instead\",It),bn.zone=M(\"moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/\",(function(t,e){return null!=t?(\"string\"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()})),bn.isDSTShifted=M(\"isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information\",(function(){if(!c(this._isDSTShifted))return this._isDSTShifted;var t,e={};return b(e,this),(e=ke(e))._a?(t=e._isUTC?p(e._a):Te(e._a),this._isDSTShifted=this.isValid()&&function(t,e,n){var r,i=Math.min(t.length,e.length),a=Math.abs(t.length-e.length),o=0;for(r=0;r<i;r++)G(t[r])!==G(e[r])&&o++;return o+a}(e._a,t.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}));var wn=E.prototype;function kn(t,e,n,r){var i=le(),a=p().set(r,e);return i[n](a,t)}function Mn(t,e,n){if(u(t)&&(e=t,t=void 0),t=t||\"\",null!=e)return kn(t,e,n,\"month\");var r,i=[];for(r=0;r<12;r++)i[r]=kn(t,r,n,\"month\");return i}function Tn(t,e,n,r){\"boolean\"==typeof t?(u(e)&&(n=e,e=void 0),e=e||\"\"):(n=e=t,t=!1,u(e)&&(n=e,e=void 0),e=e||\"\");var i,a=le(),o=t?a._week.dow:0,s=[];if(null!=n)return kn(e,(n+o)%7,r,\"day\");for(i=0;i<7;i++)s[i]=kn(e,(i+o)%7,r,\"day\");return s}wn.calendar=function(t,e,n){var r=this._calendar[t]||this._calendar.sameElse;return L(r)?r.call(e,n):r},wn.longDateFormat=function(t){var e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.match(D).map((function(t){return\"MMMM\"===t||\"MM\"===t||\"DD\"===t||\"dddd\"===t?t.slice(1):t})).join(\"\"),this._longDateFormat[t])},wn.invalidDate=function(){return this._invalidDate},wn.ordinal=function(t){return this._ordinal.replace(\"%d\",t)},wn.preparse=xn,wn.postformat=xn,wn.relativeTime=function(t,e,n,r){var i=this._relativeTime[n];return L(i)?i(t,e,n,r):i.replace(/%d/i,t)},wn.pastFuture=function(t,e){var n=this._relativeTime[t>0?\"future\":\"past\"];return L(n)?n(e):n.replace(/%s/i,e)},wn.set=function(t){var e,n;for(n in t)s(t,n)&&(L(e=t[n])?this[n]=e:this[\"_\"+n]=e);this._config=t,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+\"|\"+/\\d{1,2}/.source)},wn.eras=function(t,e){var n,r,a,o=this._eras||le(\"en\")._eras;for(n=0,r=o.length;n<r;++n){switch(typeof o[n].since){case\"string\":a=i(o[n].since).startOf(\"day\"),o[n].since=a.valueOf()}switch(typeof o[n].until){case\"undefined\":o[n].until=1/0;break;case\"string\":a=i(o[n].until).startOf(\"day\").valueOf(),o[n].until=a.valueOf()}}return o},wn.erasParse=function(t,e,n){var r,i,a,o,s,l=this.eras();for(t=t.toUpperCase(),r=0,i=l.length;r<i;++r)if(a=l[r].name.toUpperCase(),o=l[r].abbr.toUpperCase(),s=l[r].narrow.toUpperCase(),n)switch(e){case\"N\":case\"NN\":case\"NNN\":if(o===t)return l[r];break;case\"NNNN\":if(a===t)return l[r];break;case\"NNNNN\":if(s===t)return l[r]}else if([a,o,s].indexOf(t)>=0)return l[r]},wn.erasConvertYear=function(t,e){var n=t.since<=t.until?1:-1;return void 0===e?i(t.since).year():i(t.since).year()+(e-t.offset)*n},wn.erasAbbrRegex=function(t){return s(this,\"_erasAbbrRegex\")||un.call(this),t?this._erasAbbrRegex:this._erasRegex},wn.erasNameRegex=function(t){return s(this,\"_erasNameRegex\")||un.call(this),t?this._erasNameRegex:this._erasRegex},wn.erasNarrowRegex=function(t){return s(this,\"_erasNarrowRegex\")||un.call(this),t?this._erasNarrowRegex:this._erasRegex},wn.months=function(t,e){return t?a(this._months)?this._months[t.month()]:this._months[(this._months.isFormat||Tt).test(e)?\"format\":\"standalone\"][t.month()]:a(this._months)?this._months:this._months.standalone},wn.monthsShort=function(t,e){return t?a(this._monthsShort)?this._monthsShort[t.month()]:this._monthsShort[Tt.test(e)?\"format\":\"standalone\"][t.month()]:a(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},wn.monthsParse=function(t,e,n){var r,i,a;if(this._monthsParseExact)return Lt.call(this,t,e,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),r=0;r<12;r++){if(i=p([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp(\"^\"+this.months(i,\"\").replace(\".\",\"\")+\"$\",\"i\"),this._shortMonthsParse[r]=new RegExp(\"^\"+this.monthsShort(i,\"\").replace(\".\",\"\")+\"$\",\"i\")),n||this._monthsParse[r]||(a=\"^\"+this.months(i,\"\")+\"|^\"+this.monthsShort(i,\"\"),this._monthsParse[r]=new RegExp(a.replace(\".\",\"\"),\"i\")),n&&\"MMMM\"===e&&this._longMonthsParse[r].test(t))return r;if(n&&\"MMM\"===e&&this._shortMonthsParse[r].test(t))return r;if(!n&&this._monthsParse[r].test(t))return r}},wn.monthsRegex=function(t){return this._monthsParseExact?(s(this,\"_monthsRegex\")||Ot.call(this),t?this._monthsStrictRegex:this._monthsRegex):(s(this,\"_monthsRegex\")||(this._monthsRegex=At),this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex)},wn.monthsShortRegex=function(t){return this._monthsParseExact?(s(this,\"_monthsRegex\")||Ot.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):(s(this,\"_monthsShortRegex\")||(this._monthsShortRegex=St),this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex)},wn.week=function(t){return Ft(t,this._week.dow,this._week.doy).week},wn.firstDayOfYear=function(){return this._week.doy},wn.firstDayOfWeek=function(){return this._week.dow},wn.weekdays=function(t,e){var n=a(this._weekdays)?this._weekdays:this._weekdays[t&&!0!==t&&this._weekdays.isFormat.test(e)?\"format\":\"standalone\"];return!0===t?Bt(n,this._week.dow):t?n[t.day()]:n},wn.weekdaysMin=function(t){return!0===t?Bt(this._weekdaysMin,this._week.dow):t?this._weekdaysMin[t.day()]:this._weekdaysMin},wn.weekdaysShort=function(t){return!0===t?Bt(this._weekdaysShort,this._week.dow):t?this._weekdaysShort[t.day()]:this._weekdaysShort},wn.weekdaysParse=function(t,e,n){var r,i,a;if(this._weekdaysParseExact)return Gt.call(this,t,e,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(i=p([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp(\"^\"+this.weekdays(i,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._shortWeekdaysParse[r]=new RegExp(\"^\"+this.weekdaysShort(i,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._minWeekdaysParse[r]=new RegExp(\"^\"+this.weekdaysMin(i,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\")),this._weekdaysParse[r]||(a=\"^\"+this.weekdays(i,\"\")+\"|^\"+this.weekdaysShort(i,\"\")+\"|^\"+this.weekdaysMin(i,\"\"),this._weekdaysParse[r]=new RegExp(a.replace(\".\",\"\"),\"i\")),n&&\"dddd\"===e&&this._fullWeekdaysParse[r].test(t))return r;if(n&&\"ddd\"===e&&this._shortWeekdaysParse[r].test(t))return r;if(n&&\"dd\"===e&&this._minWeekdaysParse[r].test(t))return r;if(!n&&this._weekdaysParse[r].test(t))return r}},wn.weekdaysRegex=function(t){return this._weekdaysParseExact?(s(this,\"_weekdaysRegex\")||Xt.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(s(this,\"_weekdaysRegex\")||(this._weekdaysRegex=Ut),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)},wn.weekdaysShortRegex=function(t){return this._weekdaysParseExact?(s(this,\"_weekdaysRegex\")||Xt.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(s(this,\"_weekdaysShortRegex\")||(this._weekdaysShortRegex=Wt),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},wn.weekdaysMinRegex=function(t){return this._weekdaysParseExact?(s(this,\"_weekdaysRegex\")||Xt.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(s(this,\"_weekdaysMinRegex\")||(this._weekdaysMinRegex=qt),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},wn.isPM=function(t){return\"p\"===(t+\"\").toLowerCase().charAt(0)},wn.meridiem=function(t,e,n){return t>11?n?\"pm\":\"PM\":n?\"am\":\"AM\"},oe(\"en\",{eras:[{since:\"0001-01-01\",until:1/0,offset:1,name:\"Anno Domini\",narrow:\"AD\",abbr:\"AD\"},{since:\"0000-12-31\",until:-1/0,offset:1,name:\"Before Christ\",narrow:\"BC\",abbr:\"BC\"}],dayOfMonthOrdinalParse:/\\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1===G(t%100/10)?\"th\":1===e?\"st\":2===e?\"nd\":3===e?\"rd\":\"th\")}}),i.lang=M(\"moment.lang is deprecated. Use moment.locale instead.\",oe),i.langData=M(\"moment.langData is deprecated. Use moment.localeData instead.\",le);var Sn=Math.abs;function An(t,e,n,r){var i=Ye(e,n);return t._milliseconds+=r*i._milliseconds,t._days+=r*i._days,t._months+=r*i._months,t._bubble()}function Ln(t){return t<0?Math.floor(t):Math.ceil(t)}function Cn(t){return 4800*t/146097}function En(t){return 146097*t/4800}function On(t){return function(){return this.as(t)}}var Dn=On(\"ms\"),In=On(\"s\"),Pn=On(\"m\"),Rn=On(\"h\"),zn=On(\"d\"),jn=On(\"w\"),Fn=On(\"M\"),Nn=On(\"Q\"),Bn=On(\"y\");function Yn(t){return function(){return this.isValid()?this._data[t]:NaN}}var Hn=Yn(\"milliseconds\"),Vn=Yn(\"seconds\"),Un=Yn(\"minutes\"),Wn=Yn(\"hours\"),qn=Yn(\"days\"),Gn=Yn(\"months\"),Xn=Yn(\"years\"),Zn=Math.round,Jn={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function Kn(t,e,n,r,i){return i.relativeTime(e||1,!!n,t,r)}var $n=Math.abs;function Qn(t){return(t>0)-(t<0)||+t}function tr(){if(!this.isValid())return this.localeData().invalidDate();var t,e,n,r,i,a,o,s,l=$n(this._milliseconds)/1e3,c=$n(this._days),u=$n(this._months),h=this.asSeconds();return h?(t=q(l/60),e=q(t/60),l%=60,t%=60,n=q(u/12),u%=12,r=l?l.toFixed(3).replace(/\\.?0+$/,\"\"):\"\",i=h<0?\"-\":\"\",a=Qn(this._months)!==Qn(h)?\"-\":\"\",o=Qn(this._days)!==Qn(h)?\"-\":\"\",s=Qn(this._milliseconds)!==Qn(h)?\"-\":\"\",i+\"P\"+(n?a+n+\"Y\":\"\")+(u?a+u+\"M\":\"\")+(c?o+c+\"D\":\"\")+(e||t||l?\"T\":\"\")+(e?s+e+\"H\":\"\")+(t?s+t+\"M\":\"\")+(l?s+r+\"S\":\"\")):\"P0D\"}var er=Ee.prototype;return er.isValid=function(){return this._isValid},er.abs=function(){var t=this._data;return this._milliseconds=Sn(this._milliseconds),this._days=Sn(this._days),this._months=Sn(this._months),t.milliseconds=Sn(t.milliseconds),t.seconds=Sn(t.seconds),t.minutes=Sn(t.minutes),t.hours=Sn(t.hours),t.months=Sn(t.months),t.years=Sn(t.years),this},er.add=function(t,e){return An(this,t,e,1)},er.subtract=function(t,e){return An(this,t,e,-1)},er.as=function(t){if(!this.isValid())return NaN;var e,n,r=this._milliseconds;if(\"month\"===(t=Y(t))||\"quarter\"===t||\"year\"===t)switch(n=this._months+Cn(e=this._days+r/864e5),t){case\"month\":return n;case\"quarter\":return n/3;case\"year\":return n/12}else switch(e=this._days+Math.round(En(this._months)),t){case\"week\":return e/7+r/6048e5;case\"day\":return e+r/864e5;case\"hour\":return 24*e+r/36e5;case\"minute\":return 1440*e+r/6e4;case\"second\":return 86400*e+r/1e3;case\"millisecond\":return Math.floor(864e5*e)+r;default:throw new Error(\"Unknown unit \"+t)}},er.asMilliseconds=Dn,er.asSeconds=In,er.asMinutes=Pn,er.asHours=Rn,er.asDays=zn,er.asWeeks=jn,er.asMonths=Fn,er.asQuarters=Nn,er.asYears=Bn,er.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*G(this._months/12):NaN},er._bubble=function(){var t,e,n,r,i,a=this._milliseconds,o=this._days,s=this._months,l=this._data;return a>=0&&o>=0&&s>=0||a<=0&&o<=0&&s<=0||(a+=864e5*Ln(En(s)+o),o=0,s=0),l.milliseconds=a%1e3,t=q(a/1e3),l.seconds=t%60,e=q(t/60),l.minutes=e%60,n=q(e/60),l.hours=n%24,o+=q(n/24),s+=i=q(Cn(o)),o-=Ln(En(i)),r=q(s/12),s%=12,l.days=o,l.months=s,l.years=r,this},er.clone=function(){return Ye(this)},er.get=function(t){return t=Y(t),this.isValid()?this[t+\"s\"]():NaN},er.milliseconds=Hn,er.seconds=Vn,er.minutes=Un,er.hours=Wn,er.days=qn,er.weeks=function(){return q(this.days()/7)},er.months=Gn,er.years=Xn,er.humanize=function(t,e){if(!this.isValid())return this.localeData().invalidDate();var n,r,i=!1,a=Jn;return\"object\"==typeof t&&(e=t,t=!1),\"boolean\"==typeof t&&(i=t),\"object\"==typeof e&&(a=Object.assign({},Jn,e),null!=e.s&&null==e.ss&&(a.ss=e.s-1)),r=function(t,e,n,r){var i=Ye(t).abs(),a=Zn(i.as(\"s\")),o=Zn(i.as(\"m\")),s=Zn(i.as(\"h\")),l=Zn(i.as(\"d\")),c=Zn(i.as(\"M\")),u=Zn(i.as(\"w\")),h=Zn(i.as(\"y\")),d=a<=n.ss&&[\"s\",a]||a<n.s&&[\"ss\",a]||o<=1&&[\"m\"]||o<n.m&&[\"mm\",o]||s<=1&&[\"h\"]||s<n.h&&[\"hh\",s]||l<=1&&[\"d\"]||l<n.d&&[\"dd\",l];return null!=n.w&&(d=d||u<=1&&[\"w\"]||u<n.w&&[\"ww\",u]),(d=d||c<=1&&[\"M\"]||c<n.M&&[\"MM\",c]||h<=1&&[\"y\"]||[\"yy\",h])[2]=e,d[3]=+t>0,d[4]=r,Kn.apply(null,d)}(this,!i,a,n=this.localeData()),i&&(r=n.pastFuture(+this,r)),n.postformat(r)},er.toISOString=tr,er.toString=tr,er.toJSON=tr,er.locale=$e,er.localeData=tn,er.toIsoString=M(\"toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)\",tr),er.lang=Qe,z(\"X\",0,0,\"unix\"),z(\"x\",0,0,\"valueOf\"),pt(\"x\",ut),pt(\"X\",/[+-]?\\d+(\\.\\d{1,3})?/),_t(\"X\",(function(t,e,n){n._d=new Date(1e3*parseFloat(t))})),_t(\"x\",(function(t,e,n){n._d=new Date(G(t))})),i.version=\"2.29.1\",e=Te,i.fn=bn,i.min=function(){return Le(\"isBefore\",[].slice.call(arguments,0))},i.max=function(){return Le(\"isAfter\",[].slice.call(arguments,0))},i.now=function(){return Date.now?Date.now():+new Date},i.utc=p,i.unix=function(t){return Te(1e3*t)},i.months=function(t,e){return Mn(t,e,\"months\")},i.isDate=h,i.locale=oe,i.invalid=y,i.duration=Ye,i.isMoment=w,i.weekdays=function(t,e,n){return Tn(t,e,n,\"weekdays\")},i.parseZone=function(){return Te.apply(null,arguments).parseZone()},i.localeData=le,i.isDuration=Oe,i.monthsShort=function(t,e){return Mn(t,e,\"monthsShort\")},i.weekdaysMin=function(t,e,n){return Tn(t,e,n,\"weekdaysMin\")},i.defineLocale=se,i.updateLocale=function(t,e){if(null!=e){var n,r,i=te;null!=ee[t]&&null!=ee[t].parentLocale?ee[t].set(C(ee[t]._config,e)):(null!=(r=ae(t))&&(i=r._config),e=C(i,e),null==r&&(e.abbr=t),(n=new E(e)).parentLocale=ee[t],ee[t]=n),oe(t)}else null!=ee[t]&&(null!=ee[t].parentLocale?(ee[t]=ee[t].parentLocale,t===oe()&&oe(t)):null!=ee[t]&&delete ee[t]);return ee[t]},i.locales=function(){return T(ee)},i.weekdaysShort=function(t,e,n){return Tn(t,e,n,\"weekdaysShort\")},i.normalizeUnits=Y,i.relativeTimeRounding=function(t){return void 0===t?Zn:\"function\"==typeof t&&(Zn=t,!0)},i.relativeTimeThreshold=function(t,e){return void 0!==Jn[t]&&(void 0===e?Jn[t]:(Jn[t]=e,\"s\"===t&&(Jn.ss=e-1),!0))},i.calendarFormat=function(t,e){var n=t.diff(e,\"days\",!0);return n<-6?\"sameElse\":n<-1?\"lastWeek\":n<0?\"lastDay\":n<1?\"sameDay\":n<2?\"nextDay\":n<7?\"nextWeek\":\"sameElse\"},i.prototype=bn,i.HTML5_FMT={DATETIME_LOCAL:\"YYYY-MM-DDTHH:mm\",DATETIME_LOCAL_SECONDS:\"YYYY-MM-DDTHH:mm:ss\",DATETIME_LOCAL_MS:\"YYYY-MM-DDTHH:mm:ss.SSS\",DATE:\"YYYY-MM-DD\",TIME:\"HH:mm\",TIME_SECONDS:\"HH:mm:ss\",TIME_MS:\"HH:mm:ss.SSS\",WEEK:\"GGGG-[W]WW\",MONTH:\"YYYY-MM\"},i}()}).call(this,n(\"YuTi\")(t))},x6pH:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"he\",{months:\"\\u05d9\\u05e0\\u05d5\\u05d0\\u05e8_\\u05e4\\u05d1\\u05e8\\u05d5\\u05d0\\u05e8_\\u05de\\u05e8\\u05e5_\\u05d0\\u05e4\\u05e8\\u05d9\\u05dc_\\u05de\\u05d0\\u05d9_\\u05d9\\u05d5\\u05e0\\u05d9_\\u05d9\\u05d5\\u05dc\\u05d9_\\u05d0\\u05d5\\u05d2\\u05d5\\u05e1\\u05d8_\\u05e1\\u05e4\\u05d8\\u05de\\u05d1\\u05e8_\\u05d0\\u05d5\\u05e7\\u05d8\\u05d5\\u05d1\\u05e8_\\u05e0\\u05d5\\u05d1\\u05de\\u05d1\\u05e8_\\u05d3\\u05e6\\u05de\\u05d1\\u05e8\".split(\"_\"),monthsShort:\"\\u05d9\\u05e0\\u05d5\\u05f3_\\u05e4\\u05d1\\u05e8\\u05f3_\\u05de\\u05e8\\u05e5_\\u05d0\\u05e4\\u05e8\\u05f3_\\u05de\\u05d0\\u05d9_\\u05d9\\u05d5\\u05e0\\u05d9_\\u05d9\\u05d5\\u05dc\\u05d9_\\u05d0\\u05d5\\u05d2\\u05f3_\\u05e1\\u05e4\\u05d8\\u05f3_\\u05d0\\u05d5\\u05e7\\u05f3_\\u05e0\\u05d5\\u05d1\\u05f3_\\u05d3\\u05e6\\u05de\\u05f3\".split(\"_\"),weekdays:\"\\u05e8\\u05d0\\u05e9\\u05d5\\u05df_\\u05e9\\u05e0\\u05d9_\\u05e9\\u05dc\\u05d9\\u05e9\\u05d9_\\u05e8\\u05d1\\u05d9\\u05e2\\u05d9_\\u05d7\\u05de\\u05d9\\u05e9\\u05d9_\\u05e9\\u05d9\\u05e9\\u05d9_\\u05e9\\u05d1\\u05ea\".split(\"_\"),weekdaysShort:\"\\u05d0\\u05f3_\\u05d1\\u05f3_\\u05d2\\u05f3_\\u05d3\\u05f3_\\u05d4\\u05f3_\\u05d5\\u05f3_\\u05e9\\u05f3\".split(\"_\"),weekdaysMin:\"\\u05d0_\\u05d1_\\u05d2_\\u05d3_\\u05d4_\\u05d5_\\u05e9\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [\\u05d1]MMMM YYYY\",LLL:\"D [\\u05d1]MMMM YYYY HH:mm\",LLLL:\"dddd, D [\\u05d1]MMMM YYYY HH:mm\",l:\"D/M/YYYY\",ll:\"D MMM YYYY\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd, D MMM YYYY HH:mm\"},calendar:{sameDay:\"[\\u05d4\\u05d9\\u05d5\\u05dd \\u05d1\\u05be]LT\",nextDay:\"[\\u05de\\u05d7\\u05e8 \\u05d1\\u05be]LT\",nextWeek:\"dddd [\\u05d1\\u05e9\\u05e2\\u05d4] LT\",lastDay:\"[\\u05d0\\u05ea\\u05de\\u05d5\\u05dc \\u05d1\\u05be]LT\",lastWeek:\"[\\u05d1\\u05d9\\u05d5\\u05dd] dddd [\\u05d4\\u05d0\\u05d7\\u05e8\\u05d5\\u05df \\u05d1\\u05e9\\u05e2\\u05d4] LT\",sameElse:\"L\"},relativeTime:{future:\"\\u05d1\\u05e2\\u05d5\\u05d3 %s\",past:\"\\u05dc\\u05e4\\u05e0\\u05d9 %s\",s:\"\\u05de\\u05e1\\u05e4\\u05e8 \\u05e9\\u05e0\\u05d9\\u05d5\\u05ea\",ss:\"%d \\u05e9\\u05e0\\u05d9\\u05d5\\u05ea\",m:\"\\u05d3\\u05e7\\u05d4\",mm:\"%d \\u05d3\\u05e7\\u05d5\\u05ea\",h:\"\\u05e9\\u05e2\\u05d4\",hh:function(t){return 2===t?\"\\u05e9\\u05e2\\u05ea\\u05d9\\u05d9\\u05dd\":t+\" \\u05e9\\u05e2\\u05d5\\u05ea\"},d:\"\\u05d9\\u05d5\\u05dd\",dd:function(t){return 2===t?\"\\u05d9\\u05d5\\u05de\\u05d9\\u05d9\\u05dd\":t+\" \\u05d9\\u05de\\u05d9\\u05dd\"},M:\"\\u05d7\\u05d5\\u05d3\\u05e9\",MM:function(t){return 2===t?\"\\u05d7\\u05d5\\u05d3\\u05e9\\u05d9\\u05d9\\u05dd\":t+\" \\u05d7\\u05d5\\u05d3\\u05e9\\u05d9\\u05dd\"},y:\"\\u05e9\\u05e0\\u05d4\",yy:function(t){return 2===t?\"\\u05e9\\u05e0\\u05ea\\u05d9\\u05d9\\u05dd\":t%10==0&&10!==t?t+\" \\u05e9\\u05e0\\u05d4\":t+\" \\u05e9\\u05e0\\u05d9\\u05dd\"}},meridiemParse:/\\u05d0\\u05d7\\u05d4\"\\u05e6|\\u05dc\\u05e4\\u05e0\\u05d4\"\\u05e6|\\u05d0\\u05d7\\u05e8\\u05d9 \\u05d4\\u05e6\\u05d4\\u05e8\\u05d9\\u05d9\\u05dd|\\u05dc\\u05e4\\u05e0\\u05d9 \\u05d4\\u05e6\\u05d4\\u05e8\\u05d9\\u05d9\\u05dd|\\u05dc\\u05e4\\u05e0\\u05d5\\u05ea \\u05d1\\u05d5\\u05e7\\u05e8|\\u05d1\\u05d1\\u05d5\\u05e7\\u05e8|\\u05d1\\u05e2\\u05e8\\u05d1/i,isPM:function(t){return/^(\\u05d0\\u05d7\\u05d4\"\\u05e6|\\u05d0\\u05d7\\u05e8\\u05d9 \\u05d4\\u05e6\\u05d4\\u05e8\\u05d9\\u05d9\\u05dd|\\u05d1\\u05e2\\u05e8\\u05d1)$/.test(t)},meridiem:function(t,e,n){return t<5?\"\\u05dc\\u05e4\\u05e0\\u05d5\\u05ea \\u05d1\\u05d5\\u05e7\\u05e8\":t<10?\"\\u05d1\\u05d1\\u05d5\\u05e7\\u05e8\":t<12?n?'\\u05dc\\u05e4\\u05e0\\u05d4\"\\u05e6':\"\\u05dc\\u05e4\\u05e0\\u05d9 \\u05d4\\u05e6\\u05d4\\u05e8\\u05d9\\u05d9\\u05dd\":t<18?n?'\\u05d0\\u05d7\\u05d4\"\\u05e6':\"\\u05d0\\u05d7\\u05e8\\u05d9 \\u05d4\\u05e6\\u05d4\\u05e8\\u05d9\\u05d9\\u05dd\":\"\\u05d1\\u05e2\\u05e8\\u05d1\"}})}(n(\"wd/R\"))},xHqg:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return B})),n.d(e,\"b\",(function(){return j})),n.d(e,\"c\",(function(){return L})),n.d(e,\"d\",(function(){return q})),n.d(e,\"e\",(function(){return H})),n.d(e,\"f\",(function(){return U}));var r=n(\"+rOU\"),i=n(\"B/XX\"),a=n(\"ofXK\"),o=n(\"fXoL\"),s=n(\"bTqV\"),l=n(\"FKr1\"),c=n(\"NFeN\"),u=n(\"XNiG\"),h=n(\"1G5W\"),d=n(\"/uUt\"),f=n(\"R0Ic\"),p=n(\"u47x\");function m(t,e){if(1&t&&o.Zb(0,8),2&t){const t=o.pc();o.vc(\"ngTemplateOutlet\",t.iconOverrides[t.state])(\"ngTemplateOutletContext\",t._getIconContext())}}function g(t,e){if(1&t&&(o.dc(0,\"span\"),o.Oc(1),o.cc()),2&t){const t=o.pc(2);o.Lb(1),o.Pc(t._getDefaultTextForState(t.state))}}function y(t,e){if(1&t&&(o.dc(0,\"mat-icon\"),o.Oc(1),o.cc()),2&t){const t=o.pc(2);o.Lb(1),o.Pc(t._getDefaultTextForState(t.state))}}function v(t,e){if(1&t&&(o.bc(0,9),o.Mc(1,g,2,1,\"span\",10),o.Mc(2,y,2,1,\"mat-icon\",11),o.ac()),2&t){const t=o.pc();o.vc(\"ngSwitch\",t.state),o.Lb(1),o.vc(\"ngSwitchCase\",\"number\")}}function _(t,e){if(1&t&&(o.dc(0,\"div\",12),o.Zb(1,13),o.cc()),2&t){const t=o.pc();o.Lb(1),o.vc(\"ngTemplateOutlet\",t._templateLabel().template)}}function b(t,e){if(1&t&&(o.dc(0,\"div\",12),o.Oc(1),o.cc()),2&t){const t=o.pc();o.Lb(1),o.Pc(t.label)}}function x(t,e){if(1&t&&(o.dc(0,\"div\",14),o.Oc(1),o.cc()),2&t){const t=o.pc();o.Lb(1),o.Pc(t._intl.optionalLabel)}}function w(t,e){if(1&t&&(o.dc(0,\"div\",15),o.Oc(1),o.cc()),2&t){const t=o.pc();o.Lb(1),o.Pc(t.errorMessage)}}function k(t,e){1&t&&o.tc(0)}n(\"cH1L\");const M=[\"*\"];function T(t,e){1&t&&o.Yb(0,\"div\",6)}function S(t,e){if(1&t){const t=o.ec();o.bc(0),o.dc(1,\"mat-step-header\",4),o.lc(\"click\",(function(){return e.$implicit.select()}))(\"keydown\",(function(e){return o.Ec(t),o.pc()._onKeydown(e)})),o.cc(),o.Mc(2,T,1,0,\"div\",5),o.ac()}if(2&t){const t=e.$implicit,n=e.index,r=e.last,i=o.pc();o.Lb(1),o.vc(\"tabIndex\",i._getFocusIndex()===n?0:-1)(\"id\",i._getStepLabelId(n))(\"index\",n)(\"state\",i._getIndicatorType(n,t.state))(\"label\",t.stepLabel||t.label)(\"selected\",i.selectedIndex===n)(\"active\",t.completed||i.selectedIndex===n||!i.linear)(\"optional\",t.optional)(\"errorMessage\",t.errorMessage)(\"iconOverrides\",i._iconOverrides)(\"disableRipple\",i.disableRipple)(\"color\",t.color||i.color),o.Mb(\"aria-posinset\",n+1)(\"aria-setsize\",i.steps.length)(\"aria-controls\",i._getStepContentId(n))(\"aria-selected\",i.selectedIndex==n)(\"aria-label\",t.ariaLabel||null)(\"aria-labelledby\",!t.ariaLabel&&t.ariaLabelledby?t.ariaLabelledby:null),o.Lb(1),o.vc(\"ngIf\",!r)}}function A(t,e){if(1&t){const t=o.ec();o.dc(0,\"div\",7),o.lc(\"@stepTransition.done\",(function(e){return o.Ec(t),o.pc()._animationDone.next(e)})),o.Zb(1,8),o.cc()}if(2&t){const t=e.$implicit,n=e.index,r=o.pc();o.vc(\"@stepTransition\",r._getAnimationDirection(n))(\"id\",r._getStepContentId(n)),o.Mb(\"aria-labelledby\",r._getStepLabelId(n))(\"aria-expanded\",r.selectedIndex===n),o.Lb(1),o.vc(\"ngTemplateOutlet\",t.content)}}let L=(()=>{class t extends i.c{}return t.\\u0275fac=function(e){return C(e||t)},t.\\u0275dir=o.Sb({type:t,selectors:[[\"\",\"matStepLabel\",\"\"]],features:[o.Ib]}),t})();const C=o.fc(L);let E=(()=>{class t{constructor(){this.changes=new u.a,this.optionalLabel=\"Optional\"}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=Object(o.Tb)({factory:function(){return new t},token:t,providedIn:\"root\"}),t})();const O={provide:E,deps:[[new o.I,new o.T,E]],useFactory:function(t){return t||new E}};class D extends i.b{constructor(t){super(t)}}const I=Object(l.w)(D,\"primary\");let P=(()=>{class t extends I{constructor(t,e,n,r){super(n),this._intl=t,this._focusMonitor=e,this._intlSubscription=t.changes.subscribe(()=>r.markForCheck())}ngAfterViewInit(){this._focusMonitor.monitor(this._elementRef,!0)}ngOnDestroy(){this._intlSubscription.unsubscribe(),this._focusMonitor.stopMonitoring(this._elementRef)}focus(t,e){t?this._focusMonitor.focusVia(this._elementRef,t,e):this._elementRef.nativeElement.focus(e)}_stringLabel(){return this.label instanceof L?null:this.label}_templateLabel(){return this.label instanceof L?this.label:null}_getHostElement(){return this._elementRef.nativeElement}_getIconContext(){return{index:this.index,active:this.active,optional:this.optional}}_getDefaultTextForState(t){return\"number\"==t?\"\"+(this.index+1):\"edit\"==t?\"create\":\"error\"==t?\"warning\":t}}return t.\\u0275fac=function(e){return new(e||t)(o.Xb(E),o.Xb(p.h),o.Xb(o.p),o.Xb(o.j))},t.\\u0275cmp=o.Rb({type:t,selectors:[[\"mat-step-header\"]],hostAttrs:[\"role\",\"tab\",1,\"mat-step-header\",\"mat-focus-indicator\"],inputs:{color:\"color\",state:\"state\",label:\"label\",errorMessage:\"errorMessage\",iconOverrides:\"iconOverrides\",index:\"index\",selected:\"selected\",active:\"active\",optional:\"optional\",disableRipple:\"disableRipple\"},features:[o.Ib],decls:10,vars:19,consts:[[\"matRipple\",\"\",1,\"mat-step-header-ripple\",3,\"matRippleTrigger\",\"matRippleDisabled\"],[1,\"mat-step-icon-content\",3,\"ngSwitch\"],[3,\"ngTemplateOutlet\",\"ngTemplateOutletContext\",4,\"ngSwitchCase\"],[3,\"ngSwitch\",4,\"ngSwitchDefault\"],[1,\"mat-step-label\"],[\"class\",\"mat-step-text-label\",4,\"ngIf\"],[\"class\",\"mat-step-optional\",4,\"ngIf\"],[\"class\",\"mat-step-sub-label-error\",4,\"ngIf\"],[3,\"ngTemplateOutlet\",\"ngTemplateOutletContext\"],[3,\"ngSwitch\"],[4,\"ngSwitchCase\"],[4,\"ngSwitchDefault\"],[1,\"mat-step-text-label\"],[3,\"ngTemplateOutlet\"],[1,\"mat-step-optional\"],[1,\"mat-step-sub-label-error\"]],template:function(t,e){1&t&&(o.Yb(0,\"div\",0),o.dc(1,\"div\"),o.dc(2,\"div\",1),o.Mc(3,m,1,2,\"ng-container\",2),o.Mc(4,v,3,2,\"ng-container\",3),o.cc(),o.cc(),o.dc(5,\"div\",4),o.Mc(6,_,2,1,\"div\",5),o.Mc(7,b,2,1,\"div\",5),o.Mc(8,x,2,1,\"div\",6),o.Mc(9,w,2,1,\"div\",7),o.cc()),2&t&&(o.vc(\"matRippleTrigger\",e._getHostElement())(\"matRippleDisabled\",e.disableRipple),o.Lb(1),o.Ob(\"mat-step-icon-state-\",e.state,\" mat-step-icon\"),o.Pb(\"mat-step-icon-selected\",e.selected),o.Lb(1),o.vc(\"ngSwitch\",!(!e.iconOverrides||!e.iconOverrides[e.state])),o.Lb(1),o.vc(\"ngSwitchCase\",!0),o.Lb(2),o.Pb(\"mat-step-label-active\",e.active)(\"mat-step-label-selected\",e.selected)(\"mat-step-label-error\",\"error\"==e.state),o.Lb(1),o.vc(\"ngIf\",e._templateLabel()),o.Lb(1),o.vc(\"ngIf\",e._stringLabel()),o.Lb(1),o.vc(\"ngIf\",e.optional&&\"error\"!=e.state),o.Lb(1),o.vc(\"ngIf\",\"error\"==e.state))},directives:[l.r,a.q,a.r,a.s,a.o,a.t,c.a],styles:[\".mat-step-header{overflow:hidden;outline:none;cursor:pointer;position:relative;box-sizing:content-box;-webkit-tap-highlight-color:transparent}.mat-step-optional,.mat-step-sub-label-error{font-size:12px}.mat-step-icon{border-radius:50%;height:24px;width:24px;flex-shrink:0;position:relative}.mat-step-icon-content,.mat-step-icon .mat-icon{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.mat-step-icon .mat-icon{font-size:16px;height:16px;width:16px}.mat-step-icon-state-error .mat-icon{font-size:24px;height:24px;width:24px}.mat-step-label{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:50px;vertical-align:middle}.mat-step-text-label{text-overflow:ellipsis;overflow:hidden}.mat-step-header .mat-step-header-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}\\n\"],encapsulation:2,changeDetection:0}),t})();const R={horizontalStepTransition:Object(f.m)(\"stepTransition\",[Object(f.j)(\"previous\",Object(f.k)({transform:\"translate3d(-100%, 0, 0)\",visibility:\"hidden\"})),Object(f.j)(\"current\",Object(f.k)({transform:\"none\",visibility:\"visible\"})),Object(f.j)(\"next\",Object(f.k)({transform:\"translate3d(100%, 0, 0)\",visibility:\"hidden\"})),Object(f.l)(\"* => *\",Object(f.e)(\"500ms cubic-bezier(0.35, 0, 0.25, 1)\"))]),verticalStepTransition:Object(f.m)(\"stepTransition\",[Object(f.j)(\"previous\",Object(f.k)({height:\"0px\",visibility:\"hidden\"})),Object(f.j)(\"next\",Object(f.k)({height:\"0px\",visibility:\"hidden\"})),Object(f.j)(\"current\",Object(f.k)({height:\"*\",visibility:\"visible\"})),Object(f.l)(\"* <=> current\",Object(f.e)(\"225ms cubic-bezier(0.4, 0.0, 0.2, 1)\"))])};let z=(()=>{class t{constructor(t){this.templateRef=t}}return t.\\u0275fac=function(e){return new(e||t)(o.Xb(o.V))},t.\\u0275dir=o.Sb({type:t,selectors:[[\"ng-template\",\"matStepperIcon\",\"\"]],inputs:{name:[\"matStepperIcon\",\"name\"]}}),t})(),j=(()=>{class t extends i.a{constructor(t,e,n){super(t,n),this._errorStateMatcher=e}isErrorState(t,e){return this._errorStateMatcher.isErrorState(t,e)||!!(t&&t.invalid&&this.interacted)}}return t.\\u0275fac=function(e){return new(e||t)(o.Xb(Object(o.db)(()=>F)),o.Xb(l.d,4),o.Xb(i.h,8))},t.\\u0275cmp=o.Rb({type:t,selectors:[[\"mat-step\"]],contentQueries:function(t,e,n){if(1&t&&o.Qb(n,L,!0),2&t){let t;o.Ac(t=o.mc())&&(e.stepLabel=t.first)}},inputs:{color:\"color\"},exportAs:[\"matStep\"],features:[o.Kb([{provide:l.d,useExisting:t},{provide:i.a,useExisting:t}]),o.Ib],ngContentSelectors:M,decls:1,vars:0,template:function(t,e){1&t&&(o.uc(),o.Mc(0,k,1,0,\"ng-template\"))},encapsulation:2,changeDetection:0}),t})(),F=(()=>{class t extends i.d{constructor(){super(...arguments),this.steps=new o.N,this.animationDone=new o.s,this._iconOverrides={},this._animationDone=new u.a}ngAfterContentInit(){super.ngAfterContentInit(),this._icons.forEach(({name:t,templateRef:e})=>this._iconOverrides[t]=e),this.steps.changes.pipe(Object(h.a)(this._destroyed)).subscribe(()=>{this._stateChanged()}),this._animationDone.pipe(Object(d.a)((t,e)=>t.fromState===e.fromState&&t.toState===e.toState),Object(h.a)(this._destroyed)).subscribe(t=>{\"current\"===t.toState&&this.animationDone.emit()})}}return t.\\u0275fac=function(e){return N(e||t)},t.\\u0275dir=o.Sb({type:t,selectors:[[\"\",\"matStepper\",\"\"]],contentQueries:function(t,e,n){if(1&t&&(o.Qb(n,j,!0),o.Qb(n,z,!0)),2&t){let t;o.Ac(t=o.mc())&&(e._steps=t),o.Ac(t=o.mc())&&(e._icons=t)}},viewQuery:function(t,e){if(1&t&&o.Sc(P,!0),2&t){let t;o.Ac(t=o.mc())&&(e._stepHeader=t)}},inputs:{disableRipple:\"disableRipple\",color:\"color\"},outputs:{animationDone:\"animationDone\"},features:[o.Kb([{provide:i.d,useExisting:t}]),o.Ib]}),t})();const N=o.fc(F);let B=(()=>{class t extends F{constructor(){super(...arguments),this.labelPosition=\"end\"}}return t.\\u0275fac=function(e){return Y(e||t)},t.\\u0275cmp=o.Rb({type:t,selectors:[[\"mat-horizontal-stepper\"]],hostAttrs:[\"aria-orientation\",\"horizontal\",\"role\",\"tablist\",1,\"mat-stepper-horizontal\"],hostVars:4,hostBindings:function(t,e){2&t&&o.Pb(\"mat-stepper-label-position-end\",\"end\"==e.labelPosition)(\"mat-stepper-label-position-bottom\",\"bottom\"==e.labelPosition)},inputs:{selectedIndex:\"selectedIndex\",labelPosition:\"labelPosition\"},exportAs:[\"matHorizontalStepper\"],features:[o.Kb([{provide:F,useExisting:t},{provide:i.d,useExisting:t}]),o.Ib],decls:4,vars:2,consts:[[1,\"mat-horizontal-stepper-header-container\"],[4,\"ngFor\",\"ngForOf\"],[1,\"mat-horizontal-content-container\"],[\"class\",\"mat-horizontal-stepper-content\",\"role\",\"tabpanel\",3,\"id\",4,\"ngFor\",\"ngForOf\"],[1,\"mat-horizontal-stepper-header\",3,\"tabIndex\",\"id\",\"index\",\"state\",\"label\",\"selected\",\"active\",\"optional\",\"errorMessage\",\"iconOverrides\",\"disableRipple\",\"color\",\"click\",\"keydown\"],[\"class\",\"mat-stepper-horizontal-line\",4,\"ngIf\"],[1,\"mat-stepper-horizontal-line\"],[\"role\",\"tabpanel\",1,\"mat-horizontal-stepper-content\",3,\"id\"],[3,\"ngTemplateOutlet\"]],template:function(t,e){1&t&&(o.dc(0,\"div\",0),o.Mc(1,S,3,19,\"ng-container\",1),o.cc(),o.dc(2,\"div\",2),o.Mc(3,A,2,5,\"div\",3),o.cc()),2&t&&(o.Lb(1),o.vc(\"ngForOf\",e.steps),o.Lb(2),o.vc(\"ngForOf\",e.steps))},directives:[a.n,P,a.o,a.t],styles:['.mat-stepper-vertical,.mat-stepper-horizontal{display:block}.mat-horizontal-stepper-header-container{white-space:nowrap;display:flex;align-items:center}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header-container{align-items:flex-start}.mat-stepper-horizontal-line{border-top-width:1px;border-top-style:solid;flex:auto;height:0;margin:0 -16px;min-width:32px}.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{margin:0;min-width:0;position:relative}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px)}.mat-horizontal-stepper-header{display:flex;height:72px;overflow:hidden;align-items:center;padding:0 24px}.mat-horizontal-stepper-header .mat-step-icon{margin-right:8px;flex:none}[dir=rtl] .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:8px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header{box-sizing:border-box;flex-direction:column;height:auto}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{right:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before{left:0}[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:last-child::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:first-child::after{display:none}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-label{padding:16px 0 0 0;text-align:center;width:100%}.mat-vertical-stepper-header{display:flex;align-items:center;height:24px}.mat-vertical-stepper-header .mat-step-icon{margin-right:12px}[dir=rtl] .mat-vertical-stepper-header .mat-step-icon{margin-right:0;margin-left:12px}.mat-horizontal-stepper-content{outline:0}.mat-horizontal-stepper-content[aria-expanded=false]{height:0;overflow:hidden}.mat-horizontal-content-container{overflow:hidden;padding:0 24px 24px 24px}.mat-vertical-content-container{margin-left:36px;border:0;position:relative}[dir=rtl] .mat-vertical-content-container{margin-left:0;margin-right:36px}.mat-stepper-vertical-line::before{content:\"\";position:absolute;left:0;border-left-width:1px;border-left-style:solid}[dir=rtl] .mat-stepper-vertical-line::before{left:auto;right:0}.mat-vertical-stepper-content{overflow:hidden;outline:0}.mat-vertical-content{padding:0 24px 24px 24px}.mat-step:last-child .mat-vertical-content-container{border:none}\\n'],encapsulation:2,data:{animation:[R.horizontalStepTransition]},changeDetection:0}),t})();const Y=o.fc(B);let H=(()=>{class t extends i.f{}return t.\\u0275fac=function(e){return V(e||t)},t.\\u0275dir=o.Sb({type:t,selectors:[[\"button\",\"matStepperNext\",\"\"]],hostAttrs:[1,\"mat-stepper-next\"],hostVars:1,hostBindings:function(t,e){2&t&&o.gc(\"type\",e.type)},inputs:{type:\"type\"},features:[o.Ib]}),t})();const V=o.fc(H);let U=(()=>{class t extends i.g{}return t.\\u0275fac=function(e){return W(e||t)},t.\\u0275dir=o.Sb({type:t,selectors:[[\"button\",\"matStepperPrevious\",\"\"]],hostAttrs:[1,\"mat-stepper-previous\"],hostVars:1,hostBindings:function(t,e){2&t&&o.gc(\"type\",e.type)},inputs:{type:\"type\"},features:[o.Ib]}),t})();const W=o.fc(U);let q=(()=>{class t{}return t.\\u0275mod=o.Vb({type:t}),t.\\u0275inj=o.Ub({factory:function(e){return new(e||t)},providers:[O,l.d],imports:[[l.i,a.c,r.f,s.c,i.e,c.b,l.s],l.i]}),t})()},xbPD:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));var r=n(\"7o/Q\");function i(t=null){return e=>e.lift(new a(t))}class a{constructor(t){this.defaultValue=t}call(t,e){return e.subscribe(new o(t,this.defaultValue))}}class o extends r.a{constructor(t,e){super(t),this.defaultValue=e,this.isEmpty=!0}_next(t){this.isEmpty=!1,this.destination.next(t)}_complete(){this.isEmpty&&this.destination.next(this.defaultValue),this.destination.complete()}}},xgIS:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return s}));var r=n(\"HDdC\"),i=n(\"DH7j\"),a=n(\"n6bG\"),o=n(\"lJxs\");function s(t,e,n,l){return Object(a.a)(n)&&(l=n,n=void 0),l?s(t,e,n).pipe(Object(o.a)(t=>Object(i.a)(t)?l(...t):l(t))):new r.a(r=>{!function t(e,n,r,i,a){let o;if(function(t){return t&&\"function\"==typeof t.addEventListener&&\"function\"==typeof t.removeEventListener}(e)){const t=e;e.addEventListener(n,r,a),o=()=>t.removeEventListener(n,r,a)}else if(function(t){return t&&\"function\"==typeof t.on&&\"function\"==typeof t.off}(e)){const t=e;e.on(n,r),o=()=>t.off(n,r)}else if(function(t){return t&&\"function\"==typeof t.addListener&&\"function\"==typeof t.removeListener}(e)){const t=e;e.addListener(n,r),o=()=>t.removeListener(n,r)}else{if(!e||!e.length)throw new TypeError(\"Invalid event target\");for(let o=0,s=e.length;o<s;o++)t(e[o],n,r,i,a)}i.add(o)}(t,e,(function(t){r.next(arguments.length>1?Array.prototype.slice.call(arguments):t)}),r,n)})}},yCtX:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return o}));var r=n(\"HDdC\"),i=n(\"ngJS\"),a=n(\"jZKg\");function o(t,e){return e?Object(a.a)(t,e):new r.a(Object(i.a)(t))}},yPMs:function(t,e,n){!function(t){\"use strict\";t.defineLocale(\"sq\",{months:\"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_N\\xebntor_Dhjetor\".split(\"_\"),monthsShort:\"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_N\\xebn_Dhj\".split(\"_\"),weekdays:\"E Diel_E H\\xebn\\xeb_E Mart\\xeb_E M\\xebrkur\\xeb_E Enjte_E Premte_E Shtun\\xeb\".split(\"_\"),weekdaysShort:\"Die_H\\xebn_Mar_M\\xebr_Enj_Pre_Sht\".split(\"_\"),weekdaysMin:\"D_H_Ma_M\\xeb_E_P_Sh\".split(\"_\"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(t){return\"M\"===t.charAt(0)},meridiem:function(t,e,n){return t<12?\"PD\":\"MD\"},longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Sot n\\xeb] LT\",nextDay:\"[Nes\\xebr n\\xeb] LT\",nextWeek:\"dddd [n\\xeb] LT\",lastDay:\"[Dje n\\xeb] LT\",lastWeek:\"dddd [e kaluar n\\xeb] LT\",sameElse:\"L\"},relativeTime:{future:\"n\\xeb %s\",past:\"%s m\\xeb par\\xeb\",s:\"disa sekonda\",ss:\"%d sekonda\",m:\"nj\\xeb minut\\xeb\",mm:\"%d minuta\",h:\"nj\\xeb or\\xeb\",hh:\"%d or\\xeb\",d:\"nj\\xeb dit\\xeb\",dd:\"%d dit\\xeb\",M:\"nj\\xeb muaj\",MM:\"%d muaj\",y:\"nj\\xeb vit\",yy:\"%d vite\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},\"z+Ro\":function(t,e,n){\"use strict\";function r(t){return t&&\"function\"==typeof t.schedule}n.d(e,\"a\",(function(){return r}))},z1FC:function(t,e,n){!function(t){\"use strict\";function e(t,e,n,r){var i={s:[\"viensas secunds\",\"'iensas secunds\"],ss:[t+\" secunds\",t+\" secunds\"],m:[\"'n m\\xedut\",\"'iens m\\xedut\"],mm:[t+\" m\\xeduts\",t+\" m\\xeduts\"],h:[\"'n \\xfeora\",\"'iensa \\xfeora\"],hh:[t+\" \\xfeoras\",t+\" \\xfeoras\"],d:[\"'n ziua\",\"'iensa ziua\"],dd:[t+\" ziuas\",t+\" ziuas\"],M:[\"'n mes\",\"'iens mes\"],MM:[t+\" mesen\",t+\" mesen\"],y:[\"'n ar\",\"'iens ar\"],yy:[t+\" ars\",t+\" ars\"]};return r||e?i[n][0]:i[n][1]}t.defineLocale(\"tzl\",{months:\"Januar_Fevraglh_Mar\\xe7_Avr\\xefu_Mai_G\\xfcn_Julia_Guscht_Setemvar_Listop\\xe4ts_Noemvar_Zecemvar\".split(\"_\"),monthsShort:\"Jan_Fev_Mar_Avr_Mai_G\\xfcn_Jul_Gus_Set_Lis_Noe_Zec\".split(\"_\"),weekdays:\"S\\xfaladi_L\\xfane\\xe7i_Maitzi_M\\xe1rcuri_Xh\\xfaadi_Vi\\xe9ner\\xe7i_S\\xe1turi\".split(\"_\"),weekdaysShort:\"S\\xfal_L\\xfan_Mai_M\\xe1r_Xh\\xfa_Vi\\xe9_S\\xe1t\".split(\"_\"),weekdaysMin:\"S\\xfa_L\\xfa_Ma_M\\xe1_Xh_Vi_S\\xe1\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM [dallas] YYYY\",LLL:\"D. MMMM [dallas] YYYY HH.mm\",LLLL:\"dddd, [li] D. MMMM [dallas] YYYY HH.mm\"},meridiemParse:/d\\'o|d\\'a/i,isPM:function(t){return\"d'o\"===t.toLowerCase()},meridiem:function(t,e,n){return t>11?n?\"d'o\":\"D'O\":n?\"d'a\":\"D'A\"},calendar:{sameDay:\"[oxhi \\xe0] LT\",nextDay:\"[dem\\xe0 \\xe0] LT\",nextWeek:\"dddd [\\xe0] LT\",lastDay:\"[ieiri \\xe0] LT\",lastWeek:\"[s\\xfcr el] dddd [lasteu \\xe0] LT\",sameElse:\"L\"},relativeTime:{future:\"osprei %s\",past:\"ja%s\",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},z3Vd:function(t,e,n){!function(t){\"use strict\";var e=\"pagh_wa\\u2019_cha\\u2019_wej_loS_vagh_jav_Soch_chorgh_Hut\".split(\"_\");function n(t,n,r,i){var a=function(t){var n=Math.floor(t%1e3/100),r=Math.floor(t%100/10),i=t%10,a=\"\";return n>0&&(a+=e[n]+\"vatlh\"),r>0&&(a+=(\"\"!==a?\" \":\"\")+e[r]+\"maH\"),i>0&&(a+=(\"\"!==a?\" \":\"\")+e[i]),\"\"===a?\"pagh\":a}(t);switch(r){case\"ss\":return a+\" lup\";case\"mm\":return a+\" tup\";case\"hh\":return a+\" rep\";case\"dd\":return a+\" jaj\";case\"MM\":return a+\" jar\";case\"yy\":return a+\" DIS\"}}t.defineLocale(\"tlh\",{months:\"tera\\u2019 jar wa\\u2019_tera\\u2019 jar cha\\u2019_tera\\u2019 jar wej_tera\\u2019 jar loS_tera\\u2019 jar vagh_tera\\u2019 jar jav_tera\\u2019 jar Soch_tera\\u2019 jar chorgh_tera\\u2019 jar Hut_tera\\u2019 jar wa\\u2019maH_tera\\u2019 jar wa\\u2019maH wa\\u2019_tera\\u2019 jar wa\\u2019maH cha\\u2019\".split(\"_\"),monthsShort:\"jar wa\\u2019_jar cha\\u2019_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa\\u2019maH_jar wa\\u2019maH wa\\u2019_jar wa\\u2019maH cha\\u2019\".split(\"_\"),monthsParseExact:!0,weekdays:\"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj\".split(\"_\"),weekdaysShort:\"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj\".split(\"_\"),weekdaysMin:\"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[DaHjaj] LT\",nextDay:\"[wa\\u2019leS] LT\",nextWeek:\"LLL\",lastDay:\"[wa\\u2019Hu\\u2019] LT\",lastWeek:\"LLL\",sameElse:\"L\"},relativeTime:{future:function(t){var e=t;return-1!==t.indexOf(\"jaj\")?e.slice(0,-3)+\"leS\":-1!==t.indexOf(\"jar\")?e.slice(0,-3)+\"waQ\":-1!==t.indexOf(\"DIS\")?e.slice(0,-3)+\"nem\":e+\" pIq\"},past:function(t){var e=t;return-1!==t.indexOf(\"jaj\")?e.slice(0,-3)+\"Hu\\u2019\":-1!==t.indexOf(\"jar\")?e.slice(0,-3)+\"wen\":-1!==t.indexOf(\"DIS\")?e.slice(0,-3)+\"ben\":e+\" ret\"},s:\"puS lup\",ss:n,m:\"wa\\u2019 tup\",mm:n,h:\"wa\\u2019 rep\",hh:n,d:\"wa\\u2019 jaj\",dd:n,M:\"wa\\u2019 jar\",MM:n,y:\"wa\\u2019 DIS\",yy:n},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(\"wd/R\"))},z5Zb:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return u})),n.d(e,\"b\",(function(){return h})),n.d(e,\"c\",(function(){return d})),n.d(e,\"d\",(function(){return f})),n.d(e,\"e\",(function(){return c})),n.d(e,\"f\",(function(){return l})),n.d(e,\"g\",(function(){return s}));var r=n(\"fXoL\"),i=n(\"jtHE\");function a(t,e){return t===e}function o(t,e,n){if(null===e||null===n||e.length!==n.length)return!1;const r=e.length;for(let i=0;i<r;i++)if(!t(e[i],n[i]))return!1;return!0}function s(t,e=a){let n=null,r=null;function i(){return o(e,n,arguments)||(r=t.apply(null,arguments)),n=arguments,r}return i.reset=function(){n=null,r=null},i}const l=s((function(){const t=Object(r.eb)();if(!t)return!1;const e=t.injector.get(r.h,null);return!!e&&e.some(t=>(t&&t.providers||[]).some(t=>t&&t.provide&&\"MockNgModuleResolver\"===t.provide.name||!1))}));let c=(()=>{class t{constructor(){this.bootstrap$=new i.a(1)}get appBootstrapped$(){return this.bootstrap$.asObservable()}bootstrap(){this.bootstrap$.next(!0),this.bootstrap$.complete()}}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})();const u=new r.w(\"INITIAL_STATE_TOKEN\");let h=(()=>{class t{static set(t){this.value=t}static pop(){const t=this.value;return this.value={},t}}return t.value={},t})();const d=new r.w(\"Internals.StateContextFactory\"),f=new r.w(\"Internals.StateFactory\")},z6cu:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return i}));var r=n(\"HDdC\");function i(t,e){return new r.a(e?n=>e.schedule(a,0,{error:t,subscriber:n}):e=>e.error(t))}function a({error:t,subscriber:e}){e.error(t)}},zUnb:function(t,e,n){\"use strict\";n.r(e);var r=n(\"fXoL\"),i=n(\"AytR\"),a=n(\"jhN1\"),o=n(\"tyNb\"),s=n(\"XhcP\"),l=n(\"XiUz\");const c=[{path:\"\",loadChildren:()=>n.e(5).then(n.bind(null,\"XpXM\")).then(t=>t.MainModule)},{path:\"**\",component:(()=>{class t{}return t.\\u0275fac=function(e){return new(e||t)},t.\\u0275cmp=r.Rb({type:t,selectors:[[\"app-page-not-found\"]],decls:11,vars:0,consts:[[1,\"h-full\"],[\"fxLayout\",\"column\",\"fxLayoutAlign\",\"center center\",1,\"w-full\",\"h-full\",\"p-4\"],[1,\"mat-display-4\",\"mb-3\",\"color-warn\"],[1,\"mat-headline\",\"text-center\",\"text-primary\"],[\"routerLink\",\"/\",1,\"actionable\",\"color-accent\"]],template:function(t,e){1&t&&(r.dc(0,\"mat-sidenav-container\",0),r.dc(1,\"div\",1),r.dc(2,\"h1\",2),r.Oc(3,\"404\"),r.cc(),r.dc(4,\"p\",3),r.Oc(5,\" We can`t seem to find the page you`re looking for \"),r.cc(),r.dc(6,\"p\",3),r.Oc(7,\" Click \"),r.dc(8,\"a\",4),r.Oc(9,\"here\"),r.cc(),r.Oc(10,\" to go back home \"),r.cc(),r.cc(),r.cc())},directives:[s.d,l.d,l.c,o.i],styles:[\"\"]}),t})()}];let u=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},imports:[[o.j.forRoot(c,{useHash:!0,relativeLinkResolution:\"legacy\"})],o.j]}),t})();var h=n(\"nHCO\"),d=n(\"AcyG\");let f=(()=>{class t{constructor(t){this.store=t,this.title=\"Auptimizer-Dashboard\",this.store.dispatch(new h.d)}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(d.i))},t.\\u0275cmp=r.Rb({type:t,selectors:[[\"app-root\"]],decls:1,vars:0,template:function(t,e){1&t&&r.Yb(0,\"router-outlet\")},directives:[o.k],encapsulation:2}),t})();var p=n(\"R1ws\"),m=n(\"PCNd\"),g=n(\"dhIe\"),y=n(\"TkeJ\"),v=n(\"JIr8\"),_=n(\"vkgz\");const b=new r.w(\"NGXS_DEVTOOLS_OPTIONS\");let x=(()=>{class t{constructor(t,e){this._options=t,this._injector=e,this.devtoolsExtension=null,this.windowObj=\"undefined\"!=typeof window?window:{};const n=this.windowObj.__REDUX_DEVTOOLS_EXTENSION__||this.windowObj.devToolsExtension;n&&(this.devtoolsExtension=n.connect(t),this.devtoolsExtension.subscribe(t=>this.dispatched(t)))}get store(){return this._injector.get(d.i)}handle(t,e,n){return!this.devtoolsExtension||this._options&&this._options.disabled?n(t,e):n(t,e).pipe(Object(v.a)(n=>{const r=this.store.snapshot();throw this.sendToDevTools(t,e,r),n}),Object(_.a)(n=>{this.sendToDevTools(t,e,n)}))}sendToDevTools(t,e,n){const r=Object(d.l)(e);\"@@INIT\"===r?this.devtoolsExtension.init(t):this.devtoolsExtension.send(Object.assign({},e,{action:null,type:r}),n)}dispatched(t){if(\"DISPATCH\"===t.type){if(\"JUMP_TO_ACTION\"===t.payload.type||\"JUMP_TO_STATE\"===t.payload.type){const e=JSON.parse(t.state);this.store.reset(e)}else if(\"TOGGLE_ACTION\"===t.payload.type)console.warn(\"Skip is not supported at this time.\");else if(\"IMPORT_STATE\"===t.payload.type){const{actionsById:e,computedStates:n,currentStateIndex:r}=t.payload.nextLiftedState;this.devtoolsExtension.init(n[0].state),Object.keys(e).filter(t=>\"0\"!==t).forEach(t=>this.devtoolsExtension.send(e[t],n[t].state)),this.store.reset(n[r].state)}}else if(\"ACTION\"===t.type){const e=JSON.parse(t.payload);this.store.dispatch(e)}}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(b),r.hc(r.x))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})();function w(t){return Object.assign({name:\"NGXS\"},t)}const k=new r.w(\"USER_OPTIONS\");let M=(()=>{class t{static forRoot(e){return{ngModule:t,providers:[{provide:d.c,useClass:x,multi:!0},{provide:k,useValue:e},{provide:b,useFactory:w,deps:[k]}]}}}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)}}),t})();const T=(t,e)=>{return n=e-t.toString().length,new Array(n+1).join(\"0\")+t;var n};class S{constructor(t,e,n){this.action=t,this.store=e,this.logWriter=n}dispatched(t){const e=Object(d.l)(this.action),n=(r=new Date,T(r.getHours(),2)+\":\"+T(r.getMinutes(),2)+\":\"+T(r.getSeconds(),2)+\".\"+T(r.getMilliseconds(),3));var r;this.logWriter.startGroup(`action ${e} @ ${n}`),this._hasPayload(this.action)&&this.logWriter.logGrey(\"payload\",Object.assign({},this.action)),this.logWriter.logGrey(\"prev state\",t)}completed(t){this.logWriter.logGreen(\"next state\",t),this.logWriter.endGroup()}errored(t){this.logWriter.logRedish(\"next state after error\",this.store.snapshot()),this.logWriter.logRedish(\"error\",t),this.logWriter.endGroup()}_hasPayload(t){return this._getNonEmptyProperties(t).length>0}_getNonEmptyProperties(t){return Object.keys(t).map(e=>t[e]).filter(t=>void 0!==t)}}class A{constructor(t){this.options=t,this.options=this.options||{},this.logger=t.logger||console}startGroup(t){const e=this.options.collapsed?this.logger.groupCollapsed:this.logger.group;try{e.call(this.logger,t)}catch(n){console.log(t)}}endGroup(){try{this.logger.groupEnd()}catch(t){this.logger.log(\"\\u2014\\u2014 log end \\u2014\\u2014\")}}logGrey(t,e){this.log(t,\"color: #9E9E9E; font-weight: bold\",e)}logGreen(t,e){this.log(t,\"color: #4CAF50; font-weight: bold\",e)}logRedish(t,e){this.log(t,\"color: #FD8182; font-weight: bold\",e)}log(t,e,n){this.isIE()?this.logger.log(t,n):this.logger.log(\"%c \"+t,e,n)}isIE(){const t=\"undefined\"!=typeof window&&window.navigator.userAgent?window.navigator.userAgent:\"\";let e=!1;const n=t.indexOf(\"MSIE \"),r=t.indexOf(\"Trident/\");return(n>-1||r>-1)&&(e=!0),e}}const L=new r.w(\"NGXS_LOGGER_PLUGIN_OPTIONS\");let C=(()=>{class t{constructor(t,e){this._options=t,this._injector=e}handle(t,e,n){if(this._options.disabled||!this._options.filter(e,t))return n(t,e);this._logWriter=this._logWriter||new A(this._options),this._store=this._store||this._injector.get(d.i);const r=new S(e,this._store,this._logWriter);return r.dispatched(t),n(t,e).pipe(Object(_.a)(t=>{r.completed(t)}),Object(v.a)(t=>{throw r.errored(t),t}))}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(L),r.hc(r.x))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})();const E=new r.w(\"LOGGER_USER_OPTIONS\");function O(t){const e={logger:console,collapsed:!1,disabled:!1,filter:()=>!0};return Object.assign({},e,t)}let D=(()=>{class t{static forRoot(e){return{ngModule:t,providers:[{provide:d.c,useClass:C,multi:!0},{provide:E,useValue:e},{provide:L,useFactory:O,deps:[E]}]}}}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)}}),t})();var I=n(\"SUpr\"),P=n(\"tk/3\");const R=[{name:\"information\",path:\"assets/icons/information.svg\"},{name:\"database\",path:\"assets/icons/database.svg\"},{name:\"copy\",path:\"assets/icons/copy.svg\"},{name:\"bulb\",path:\"assets/icons/emoji_objects-24px.svg\"}];var z=n(\"NFeN\");let j=(()=>{class t{constructor(t,e,n,r){this.store=t,this.colorSchemeService=e,this.matIconRegistry=n,this.domSanitizer=r,R.map(t=>{this.matIconRegistry.addSvgIcon(t.name,this.domSanitizer.bypassSecurityTrustResourceUrl(t.path))})}initializeApplication(){this.store.dispatch(new h.c),this.setTheme()}setTheme(){this.colorSchemeService.load(),this.store.dispatch(new h.g)}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(d.i),r.hc(I.a),r.hc(z.c),r.hc(a.b))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})();function F(t){return()=>t.initializeApplication()}let N=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},providers:[j,I.a,{provide:r.d,useFactory:F,deps:[j],multi:!0}],imports:[[P.b]]}),t})();var B=n(\"Ne9M\"),Y=n(\"ofXK\");const H=new r.w(\"NGXS_STORAGE_PLUGIN_OPTION\"),V=new r.w(\"STORAGE_ENGINE\"),U=\"@@STATE\";function W(t){var e;return void 0!==t&&t.key&&(t.key=(e=t.key,Array.isArray(e)||(e=[e]),e.map(t=>(t.hasOwnProperty(\"NGXS_OPTIONS_META\")&&(t=t.NGXS_OPTIONS_META.name),t instanceof d.h?t.getName():t)))),Object.assign({key:[U],storage:0,serialize:JSON.stringify,deserialize:JSON.parse,beforeSerialize:t=>t,afterDeserialize:t=>t},t)}function q(t,e){return Object(Y.z)(e)?null:0===t.storage?localStorage:1===t.storage?sessionStorage:null}let G=(()=>{class t{constructor(t,e,n){this._options=t,this._engine=e,this._platformId=n}handle(t,e,n){if(Object(Y.z)(this._platformId)&&null===this._engine)return n(t,e);const r=this._options.key,i=Object(d.k)(e),a=i(d.b)||i(d.j);let o=!1;if(a)for(const l of r){const e=l===U;let n=this._engine.getItem(l);if(\"undefined\"!==n&&null!=n){try{const t=this._options.deserialize(n);n=this._options.afterDeserialize(t,l)}catch(s){console.error(\"Error ocurred while deserializing the store value, falling back to empty object.\"),n={}}this._options.migrations&&this._options.migrations.forEach(t=>{t.version===Object(d.m)(n,t.versionKey||\"version\")&&(!t.key&&e||t.key===l)&&(n=t.migrate(n),o=!0)}),t=e?Object.assign({},t,n):Object(d.n)(t,l,n)}}return n(t,e).pipe(Object(_.a)(t=>{if(!a||a&&o)for(const e of r){let n=t;e!==U&&(n=Object(d.m)(t,e));try{const t=this._options.beforeSerialize(n,e);this._engine.setItem(e,this._options.serialize(t))}catch(s){console.error(\"Error ocurred while serializing the store value, value not updated.\")}}}))}}return t.\\u0275fac=function(e){return new(e||t)(r.hc(H),r.hc(V),r.hc(r.K))},t.\\u0275prov=r.Tb({token:t,factory:t.\\u0275fac}),t})();const X=new r.w(\"USER_OPTIONS\");let Z=(()=>{class t{static forRoot(e){return{ngModule:t,providers:[{provide:d.c,useClass:G,multi:!0},{provide:X,useValue:e},{provide:H,useFactory:W,deps:[X]},{provide:V,useFactory:q,deps:[H,r.K]}]}}}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)}}),t})(),J=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t,bootstrap:[f]}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},providers:[I.a,B.a],imports:[[a.a,N,p.b,u,m.a,d.d.forRoot([g.a]),y.b.forRoot(),M.forRoot({name:\"App Store\"}),Z.forRoot({key:[\"app.dbUrl\"]}),i.a.production?[]:D.forRoot()]]}),t})();i.a.production&&Object(r.cb)(),a.c().bootstrapModule(J).catch(t=>console.error(t))},zn8P:function(t,e){function n(t){return Promise.resolve().then((function(){var e=new Error(\"Cannot find module '\"+t+\"'\");throw e.code=\"MODULE_NOT_FOUND\",e}))}n.keys=function(){return[]},n.resolve=n,t.exports=n,n.id=\"zn8P\"},znSr:function(t,e,n){\"use strict\";n.d(e,\"d\",(function(){return C})),n.d(e,\"a\",(function(){return h})),n.d(e,\"b\",(function(){return v})),n.d(e,\"c\",(function(){return S}));var r=n(\"fXoL\"),i=n(\"ofXK\"),a=n(\"pD6V\"),o=n(\"8LU1\"),s=n(\"1G5W\"),l=n(\"jhN1\");let c=(()=>{class t extends a.b{constructor(t,e,n,r,a,o,s){super(t,null,e,n),this.ngClassInstance=s,this.DIRECTIVE_KEY=\"ngClass\",this.ngClassInstance||(this.ngClassInstance=new i.m(r,a,t,o)),this.init(),this.setValue(\"\",\"\")}set klass(t){this.ngClassInstance.klass=t,this.setValue(t,\"\")}updateWithValue(t){this.ngClassInstance.ngClass=t,this.ngClassInstance.ngDoCheck()}ngDoCheck(){this.ngClassInstance.ngDoCheck()}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.p),r.Xb(a.i),r.Xb(a.f),r.Xb(r.z),r.Xb(r.A),r.Xb(r.O),r.Xb(i.m,10))},t.\\u0275dir=r.Sb({type:t,inputs:{klass:[\"class\",\"klass\"]},features:[r.Ib]}),t})();const u=[\"ngClass\",\"ngClass.xs\",\"ngClass.sm\",\"ngClass.md\",\"ngClass.lg\",\"ngClass.xl\",\"ngClass.lt-sm\",\"ngClass.lt-md\",\"ngClass.lt-lg\",\"ngClass.lt-xl\",\"ngClass.gt-xs\",\"ngClass.gt-sm\",\"ngClass.gt-md\",\"ngClass.gt-lg\"];let h=(()=>{class t extends c{constructor(){super(...arguments),this.inputs=u}}return t.\\u0275fac=function(e){return d(e||t)},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"ngClass\",\"\"],[\"\",\"ngClass.xs\",\"\"],[\"\",\"ngClass.sm\",\"\"],[\"\",\"ngClass.md\",\"\"],[\"\",\"ngClass.lg\",\"\"],[\"\",\"ngClass.xl\",\"\"],[\"\",\"ngClass.lt-sm\",\"\"],[\"\",\"ngClass.lt-md\",\"\"],[\"\",\"ngClass.lt-lg\",\"\"],[\"\",\"ngClass.lt-xl\",\"\"],[\"\",\"ngClass.gt-xs\",\"\"],[\"\",\"ngClass.gt-sm\",\"\"],[\"\",\"ngClass.gt-md\",\"\"],[\"\",\"ngClass.gt-lg\",\"\"]],inputs:{ngClass:\"ngClass\",\"ngClass.xs\":\"ngClass.xs\",\"ngClass.sm\":\"ngClass.sm\",\"ngClass.md\":\"ngClass.md\",\"ngClass.lg\":\"ngClass.lg\",\"ngClass.xl\":\"ngClass.xl\",\"ngClass.lt-sm\":\"ngClass.lt-sm\",\"ngClass.lt-md\":\"ngClass.lt-md\",\"ngClass.lt-lg\":\"ngClass.lt-lg\",\"ngClass.lt-xl\":\"ngClass.lt-xl\",\"ngClass.gt-xs\":\"ngClass.gt-xs\",\"ngClass.gt-sm\":\"ngClass.gt-sm\",\"ngClass.gt-md\":\"ngClass.gt-md\",\"ngClass.gt-lg\":\"ngClass.gt-lg\"},features:[r.Ib]}),t})();const d=r.fc(h);let f=(()=>{class t extends a.h{buildStyles(t,e){return{display:\"true\"===t?e.display||(e.isServer?\"initial\":\"\"):\"none\"}}}return t.\\u0275fac=function(e){return p(e||t)},t.\\u0275prov=Object(r.Tb)({factory:function(){return new t},token:t,providedIn:\"root\"}),t})();const p=r.fc(f);let m=(()=>{class t extends a.b{constructor(t,e,n,r,i,a,o){super(t,e,n,r),this.layoutConfig=i,this.platformId=a,this.serverModuleLoaded=o,this.DIRECTIVE_KEY=\"show-hide\",this.display=\"\",this.hasLayout=!1,this.hasFlexChild=!1}ngAfterViewInit(){this.trackExtraTriggers();const t=Array.from(this.nativeElement.children);for(let n=0;n<t.length;n++)if(this.marshal.hasValue(t[n],\"flex\")){this.hasFlexChild=!0;break}g.has(this.nativeElement)?this.display=g.get(this.nativeElement):(this.display=this.getDisplayStyle(),g.set(this.nativeElement,this.display)),this.init();const e=this.marshal.getValue(this.nativeElement,this.DIRECTIVE_KEY,\"\");void 0===e||\"\"===e?this.setValue(!0,\"\"):this.triggerUpdate()}ngOnChanges(t){Object.keys(t).forEach(e=>{if(-1!==this.inputs.indexOf(e)){const n=e.split(\".\"),r=n.slice(1).join(\".\"),i=t[e].currentValue;let a=\"\"===i||0!==i&&Object(o.c)(i);\"fxHide\"===n[0]&&(a=!a),this.setValue(a,r)}})}trackExtraTriggers(){this.hasLayout=this.marshal.hasValue(this.nativeElement,\"layout\"),[\"layout\",\"layout-align\"].forEach(t=>{this.marshal.trackValue(this.nativeElement,t).pipe(Object(s.a)(this.destroySubject)).subscribe(this.triggerUpdate.bind(this))})}getDisplayStyle(){return this.hasLayout||this.hasFlexChild&&this.layoutConfig.addFlexToParent?\"flex\":this.styler.lookupStyle(this.nativeElement,\"display\",!0)}updateWithValue(t=!0){if(\"\"===t)return;const e=Object(i.z)(this.platformId);this.addStyles(t?\"true\":\"false\",{display:this.display,isServer:e}),e&&this.serverModuleLoaded&&this.nativeElement.style.setProperty(\"display\",\"\"),this.marshal.triggerUpdate(this.parentElement,\"layout-gap\")}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.p),r.Xb(f),r.Xb(a.i),r.Xb(a.f),r.Xb(a.e),r.Xb(r.K),r.Xb(a.g))},t.\\u0275dir=r.Sb({type:t,features:[r.Ib,r.Jb]}),t})();const g=new WeakMap,y=[\"fxShow\",\"fxShow.print\",\"fxShow.xs\",\"fxShow.sm\",\"fxShow.md\",\"fxShow.lg\",\"fxShow.xl\",\"fxShow.lt-sm\",\"fxShow.lt-md\",\"fxShow.lt-lg\",\"fxShow.lt-xl\",\"fxShow.gt-xs\",\"fxShow.gt-sm\",\"fxShow.gt-md\",\"fxShow.gt-lg\",\"fxHide\",\"fxHide.print\",\"fxHide.xs\",\"fxHide.sm\",\"fxHide.md\",\"fxHide.lg\",\"fxHide.xl\",\"fxHide.lt-sm\",\"fxHide.lt-md\",\"fxHide.lt-lg\",\"fxHide.lt-xl\",\"fxHide.gt-xs\",\"fxHide.gt-sm\",\"fxHide.gt-md\",\"fxHide.gt-lg\"];let v=(()=>{class t extends m{constructor(){super(...arguments),this.inputs=y}}return t.\\u0275fac=function(e){return _(e||t)},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"fxShow\",\"\"],[\"\",\"fxShow.print\",\"\"],[\"\",\"fxShow.xs\",\"\"],[\"\",\"fxShow.sm\",\"\"],[\"\",\"fxShow.md\",\"\"],[\"\",\"fxShow.lg\",\"\"],[\"\",\"fxShow.xl\",\"\"],[\"\",\"fxShow.lt-sm\",\"\"],[\"\",\"fxShow.lt-md\",\"\"],[\"\",\"fxShow.lt-lg\",\"\"],[\"\",\"fxShow.lt-xl\",\"\"],[\"\",\"fxShow.gt-xs\",\"\"],[\"\",\"fxShow.gt-sm\",\"\"],[\"\",\"fxShow.gt-md\",\"\"],[\"\",\"fxShow.gt-lg\",\"\"],[\"\",\"fxHide\",\"\"],[\"\",\"fxHide.print\",\"\"],[\"\",\"fxHide.xs\",\"\"],[\"\",\"fxHide.sm\",\"\"],[\"\",\"fxHide.md\",\"\"],[\"\",\"fxHide.lg\",\"\"],[\"\",\"fxHide.xl\",\"\"],[\"\",\"fxHide.lt-sm\",\"\"],[\"\",\"fxHide.lt-md\",\"\"],[\"\",\"fxHide.lt-lg\",\"\"],[\"\",\"fxHide.lt-xl\",\"\"],[\"\",\"fxHide.gt-xs\",\"\"],[\"\",\"fxHide.gt-sm\",\"\"],[\"\",\"fxHide.gt-md\",\"\"],[\"\",\"fxHide.gt-lg\",\"\"]],inputs:{fxShow:\"fxShow\",\"fxShow.print\":\"fxShow.print\",\"fxShow.xs\":\"fxShow.xs\",\"fxShow.sm\":\"fxShow.sm\",\"fxShow.md\":\"fxShow.md\",\"fxShow.lg\":\"fxShow.lg\",\"fxShow.xl\":\"fxShow.xl\",\"fxShow.lt-sm\":\"fxShow.lt-sm\",\"fxShow.lt-md\":\"fxShow.lt-md\",\"fxShow.lt-lg\":\"fxShow.lt-lg\",\"fxShow.lt-xl\":\"fxShow.lt-xl\",\"fxShow.gt-xs\":\"fxShow.gt-xs\",\"fxShow.gt-sm\":\"fxShow.gt-sm\",\"fxShow.gt-md\":\"fxShow.gt-md\",\"fxShow.gt-lg\":\"fxShow.gt-lg\",fxHide:\"fxHide\",\"fxHide.print\":\"fxHide.print\",\"fxHide.xs\":\"fxHide.xs\",\"fxHide.sm\":\"fxHide.sm\",\"fxHide.md\":\"fxHide.md\",\"fxHide.lg\":\"fxHide.lg\",\"fxHide.xl\":\"fxHide.xl\",\"fxHide.lt-sm\":\"fxHide.lt-sm\",\"fxHide.lt-md\":\"fxHide.lt-md\",\"fxHide.lt-lg\":\"fxHide.lt-lg\",\"fxHide.lt-xl\":\"fxHide.lt-xl\",\"fxHide.gt-xs\":\"fxHide.gt-xs\",\"fxHide.gt-sm\":\"fxHide.gt-sm\",\"fxHide.gt-md\":\"fxHide.gt-md\",\"fxHide.gt-lg\":\"fxHide.gt-lg\"},features:[r.Ib]}),t})();const _=r.fc(v);class b{constructor(t,e,n=!0){this.key=t,this.value=e,this.key=n?t.replace(/['\"]/g,\"\").trim():t.trim(),this.value=n?e.replace(/['\"]/g,\"\").trim():e.trim(),this.value=this.value.replace(/;/,\"\")}}function x(t){let e=typeof t;return\"object\"===e?t.constructor===Array?\"array\":t.constructor===Set?\"set\":\"object\":e}function w(t){const[e,...n]=t.split(\":\");return new b(e,n.join(\":\"))}function k(t,e){return e.key&&(t[e.key]=e.value),t}let M=(()=>{class t extends a.b{constructor(t,e,n,r,a,o,s,l,c){super(t,null,e,n),this.sanitizer=r,this.ngStyleInstance=s,this.DIRECTIVE_KEY=\"ngStyle\",this.ngStyleInstance||(this.ngStyleInstance=new i.p(t,a,o)),this.init();const u=this.nativeElement.getAttribute(\"style\")||\"\";this.fallbackStyles=this.buildStyleMap(u),this.isServer=l&&Object(i.z)(c)}updateWithValue(t){const e=this.buildStyleMap(t);this.ngStyleInstance.ngStyle=Object.assign(Object.assign({},this.fallbackStyles),e),this.isServer&&this.applyStyleToElement(e),this.ngStyleInstance.ngDoCheck()}clearStyles(){this.ngStyleInstance.ngStyle=this.fallbackStyles,this.ngStyleInstance.ngDoCheck()}buildStyleMap(t){const e=t=>this.sanitizer.sanitize(r.S.STYLE,t)||\"\";if(t)switch(x(t)){case\"string\":return L(function(t,e=\";\"){return String(t).trim().split(e).map(t=>t.trim()).filter(t=>\"\"!==t)}(t),e);case\"array\":return L(t,e);case\"set\":default:return function(t,e){let n=[];return\"set\"===x(t)?t.forEach(t=>n.push(t)):Object.keys(t).forEach(e=>{n.push(`${e}:${t[e]}`)}),function(t,e){return t.map(w).filter(t=>!!t).map(t=>(e&&(t.value=e(t.value)),t)).reduce(k,{})}(n,e)}(t,e)}return{}}ngDoCheck(){this.ngStyleInstance.ngDoCheck()}}return t.\\u0275fac=function(e){return new(e||t)(r.Xb(r.p),r.Xb(a.i),r.Xb(a.f),r.Xb(l.b),r.Xb(r.A),r.Xb(r.O),r.Xb(i.p,10),r.Xb(a.g),r.Xb(r.K))},t.\\u0275dir=r.Sb({type:t,features:[r.Ib]}),t})();const T=[\"ngStyle\",\"ngStyle.xs\",\"ngStyle.sm\",\"ngStyle.md\",\"ngStyle.lg\",\"ngStyle.xl\",\"ngStyle.lt-sm\",\"ngStyle.lt-md\",\"ngStyle.lt-lg\",\"ngStyle.lt-xl\",\"ngStyle.gt-xs\",\"ngStyle.gt-sm\",\"ngStyle.gt-md\",\"ngStyle.gt-lg\"];let S=(()=>{class t extends M{constructor(){super(...arguments),this.inputs=T}}return t.\\u0275fac=function(e){return A(e||t)},t.\\u0275dir=r.Sb({type:t,selectors:[[\"\",\"ngStyle\",\"\"],[\"\",\"ngStyle.xs\",\"\"],[\"\",\"ngStyle.sm\",\"\"],[\"\",\"ngStyle.md\",\"\"],[\"\",\"ngStyle.lg\",\"\"],[\"\",\"ngStyle.xl\",\"\"],[\"\",\"ngStyle.lt-sm\",\"\"],[\"\",\"ngStyle.lt-md\",\"\"],[\"\",\"ngStyle.lt-lg\",\"\"],[\"\",\"ngStyle.lt-xl\",\"\"],[\"\",\"ngStyle.gt-xs\",\"\"],[\"\",\"ngStyle.gt-sm\",\"\"],[\"\",\"ngStyle.gt-md\",\"\"],[\"\",\"ngStyle.gt-lg\",\"\"]],inputs:{ngStyle:\"ngStyle\",\"ngStyle.xs\":\"ngStyle.xs\",\"ngStyle.sm\":\"ngStyle.sm\",\"ngStyle.md\":\"ngStyle.md\",\"ngStyle.lg\":\"ngStyle.lg\",\"ngStyle.xl\":\"ngStyle.xl\",\"ngStyle.lt-sm\":\"ngStyle.lt-sm\",\"ngStyle.lt-md\":\"ngStyle.lt-md\",\"ngStyle.lt-lg\":\"ngStyle.lt-lg\",\"ngStyle.lt-xl\":\"ngStyle.lt-xl\",\"ngStyle.gt-xs\":\"ngStyle.gt-xs\",\"ngStyle.gt-sm\":\"ngStyle.gt-sm\",\"ngStyle.gt-md\":\"ngStyle.gt-md\",\"ngStyle.gt-lg\":\"ngStyle.gt-lg\"},features:[r.Ib]}),t})();const A=r.fc(S);function L(t,e){return t.map(w).filter(t=>!!t).map(t=>(e&&(t.value=e(t.value)),t)).reduce(k,{})}let C=(()=>{class t{}return t.\\u0275mod=r.Vb({type:t}),t.\\u0275inj=r.Ub({factory:function(e){return new(e||t)},imports:[[a.c]]}),t})()},zx2A:function(t,e,n){\"use strict\";n.d(e,\"a\",(function(){return o})),n.d(e,\"b\",(function(){return s})),n.d(e,\"c\",(function(){return l}));var r=n(\"7o/Q\"),i=n(\"HDdC\"),a=n(\"SeVD\");class o extends r.a{constructor(t){super(),this.parent=t}_next(t){this.parent.notifyNext(t)}_error(t){this.parent.notifyError(t),this.unsubscribe()}_complete(){this.parent.notifyComplete(),this.unsubscribe()}}class s extends r.a{notifyNext(t){this.destination.next(t)}notifyError(t){this.destination.error(t)}notifyComplete(){this.destination.complete()}}function l(t,e){if(!e.closed)return t instanceof i.a?t.subscribe(e):Object(a.a)(t)(e)}},zx6S:function(t,e,n){!function(t){\"use strict\";var e={words:{ss:[\"sekunda\",\"sekunde\",\"sekundi\"],m:[\"jedan minut\",\"jedne minute\"],mm:[\"minut\",\"minute\",\"minuta\"],h:[\"jedan sat\",\"jednog sata\"],hh:[\"sat\",\"sata\",\"sati\"],dd:[\"dan\",\"dana\",\"dana\"],MM:[\"mesec\",\"meseca\",\"meseci\"],yy:[\"godina\",\"godine\",\"godina\"]},correctGrammaticalCase:function(t,e){return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,r){var i=e.words[r];return 1===r.length?n?i[0]:i[1]:t+\" \"+e.correctGrammaticalCase(t,i)}};t.defineLocale(\"sr\",{months:\"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedelja_ponedeljak_utorak_sreda_\\u010detvrtak_petak_subota\".split(\"_\"),weekdaysShort:\"ned._pon._uto._sre._\\u010det._pet._sub.\".split(\"_\"),weekdaysMin:\"ne_po_ut_sr_\\u010de_pe_su\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"D. M. YYYY.\",LL:\"D. MMMM YYYY.\",LLL:\"D. MMMM YYYY. H:mm\",LLLL:\"dddd, D. MMMM YYYY. H:mm\"},calendar:{sameDay:\"[danas u] LT\",nextDay:\"[sutra u] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[u] [nedelju] [u] LT\";case 3:return\"[u] [sredu] [u] LT\";case 6:return\"[u] [subotu] [u] LT\";case 1:case 2:case 4:case 5:return\"[u] dddd [u] LT\"}},lastDay:\"[ju\\u010de u] LT\",lastWeek:function(){return[\"[pro\\u0161le] [nedelje] [u] LT\",\"[pro\\u0161log] [ponedeljka] [u] LT\",\"[pro\\u0161log] [utorka] [u] LT\",\"[pro\\u0161le] [srede] [u] LT\",\"[pro\\u0161log] [\\u010detvrtka] [u] LT\",\"[pro\\u0161log] [petka] [u] LT\",\"[pro\\u0161le] [subote] [u] LT\"][this.day()]},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"pre %s\",s:\"nekoliko sekundi\",ss:e.translate,m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:\"dan\",dd:e.translate,M:\"mesec\",MM:e.translate,y:\"godinu\",yy:e.translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(n(\"wd/R\"))}},[[0,0]]]);"
  },
  {
    "path": "src/aup/dashboard/frontend/febuild/auptimizer-dashboard/polyfills.9cfb3f513e777138fb2c.js",
    "content": "(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{1:function(e,t,n){e.exports=n(\"hN/g\")},\"hN/g\":function(e,t,n){\"use strict\";n.r(t),n(\"pDpN\")},pDpN:function(e,t){!function(e){const t=e.performance;function n(e){t&&t.mark&&t.mark(e)}function o(e,n){t&&t.measure&&t.measure(e,n)}n(\"Zone\");const r=e.__Zone_symbol_prefix||\"__zone_symbol__\";function s(e){return r+e}const a=!0===e[s(\"forceDuplicateZoneCheck\")];if(e.Zone){if(a||\"function\"!=typeof e.Zone.__symbol__)throw new Error(\"Zone already loaded.\");return e.Zone}class i{constructor(e,t){this._parent=e,this._name=t?t.name||\"unnamed\":\"<root>\",this._properties=t&&t.properties||{},this._zoneDelegate=new l(this,this._parent&&this._parent._zoneDelegate,t)}static assertZonePatched(){if(e.Promise!==O.ZoneAwarePromise)throw new Error(\"Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)\")}static get root(){let e=i.current;for(;e.parent;)e=e.parent;return e}static get current(){return z.zone}static get currentTask(){return j}static __load_patch(t,r){if(O.hasOwnProperty(t)){if(a)throw Error(\"Already loaded patch: \"+t)}else if(!e[\"__Zone_disable_\"+t]){const s=\"Zone:\"+t;n(s),O[t]=r(e,i,C),o(s,s)}}get parent(){return this._parent}get name(){return this._name}get(e){const t=this.getZoneWith(e);if(t)return t._properties[e]}getZoneWith(e){let t=this;for(;t;){if(t._properties.hasOwnProperty(e))return t;t=t._parent}return null}fork(e){if(!e)throw new Error(\"ZoneSpec required!\");return this._zoneDelegate.fork(this,e)}wrap(e,t){if(\"function\"!=typeof e)throw new Error(\"Expecting function got: \"+e);const n=this._zoneDelegate.intercept(this,e,t),o=this;return function(){return o.runGuarded(n,this,arguments,t)}}run(e,t,n,o){z={parent:z,zone:this};try{return this._zoneDelegate.invoke(this,e,t,n,o)}finally{z=z.parent}}runGuarded(e,t=null,n,o){z={parent:z,zone:this};try{try{return this._zoneDelegate.invoke(this,e,t,n,o)}catch(r){if(this._zoneDelegate.handleError(this,r))throw r}}finally{z=z.parent}}runTask(e,t,n){if(e.zone!=this)throw new Error(\"A task can only be run in the zone of creation! (Creation: \"+(e.zone||y).name+\"; Execution: \"+this.name+\")\");if(e.state===v&&(e.type===P||e.type===D))return;const o=e.state!=E;o&&e._transitionTo(E,b),e.runCount++;const r=j;j=e,z={parent:z,zone:this};try{e.type==D&&e.data&&!e.data.isPeriodic&&(e.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,e,t,n)}catch(s){if(this._zoneDelegate.handleError(this,s))throw s}}finally{e.state!==v&&e.state!==Z&&(e.type==P||e.data&&e.data.isPeriodic?o&&e._transitionTo(b,E):(e.runCount=0,this._updateTaskCount(e,-1),o&&e._transitionTo(v,E,v))),z=z.parent,j=r}}scheduleTask(e){if(e.zone&&e.zone!==this){let t=this;for(;t;){if(t===e.zone)throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${e.zone.name}`);t=t.parent}}e._transitionTo(T,v);const t=[];e._zoneDelegates=t,e._zone=this;try{e=this._zoneDelegate.scheduleTask(this,e)}catch(n){throw e._transitionTo(Z,T,v),this._zoneDelegate.handleError(this,n),n}return e._zoneDelegates===t&&this._updateTaskCount(e,1),e.state==T&&e._transitionTo(b,T),e}scheduleMicroTask(e,t,n,o){return this.scheduleTask(new u(S,e,t,n,o,void 0))}scheduleMacroTask(e,t,n,o,r){return this.scheduleTask(new u(D,e,t,n,o,r))}scheduleEventTask(e,t,n,o,r){return this.scheduleTask(new u(P,e,t,n,o,r))}cancelTask(e){if(e.zone!=this)throw new Error(\"A task can only be cancelled in the zone of creation! (Creation: \"+(e.zone||y).name+\"; Execution: \"+this.name+\")\");e._transitionTo(w,b,E);try{this._zoneDelegate.cancelTask(this,e)}catch(t){throw e._transitionTo(Z,w),this._zoneDelegate.handleError(this,t),t}return this._updateTaskCount(e,-1),e._transitionTo(v,w),e.runCount=0,e}_updateTaskCount(e,t){const n=e._zoneDelegates;-1==t&&(e._zoneDelegates=null);for(let o=0;o<n.length;o++)n[o]._updateTaskCount(e.type,t)}}i.__symbol__=s;const c={name:\"\",onHasTask:(e,t,n,o)=>e.hasTask(n,o),onScheduleTask:(e,t,n,o)=>e.scheduleTask(n,o),onInvokeTask:(e,t,n,o,r,s)=>e.invokeTask(n,o,r,s),onCancelTask:(e,t,n,o)=>e.cancelTask(n,o)};class l{constructor(e,t,n){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=e,this._parentDelegate=t,this._forkZS=n&&(n&&n.onFork?n:t._forkZS),this._forkDlgt=n&&(n.onFork?t:t._forkDlgt),this._forkCurrZone=n&&(n.onFork?this.zone:t._forkCurrZone),this._interceptZS=n&&(n.onIntercept?n:t._interceptZS),this._interceptDlgt=n&&(n.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=n&&(n.onIntercept?this.zone:t._interceptCurrZone),this._invokeZS=n&&(n.onInvoke?n:t._invokeZS),this._invokeDlgt=n&&(n.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=n&&(n.onInvoke?this.zone:t._invokeCurrZone),this._handleErrorZS=n&&(n.onHandleError?n:t._handleErrorZS),this._handleErrorDlgt=n&&(n.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=n&&(n.onHandleError?this.zone:t._handleErrorCurrZone),this._scheduleTaskZS=n&&(n.onScheduleTask?n:t._scheduleTaskZS),this._scheduleTaskDlgt=n&&(n.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=n&&(n.onScheduleTask?this.zone:t._scheduleTaskCurrZone),this._invokeTaskZS=n&&(n.onInvokeTask?n:t._invokeTaskZS),this._invokeTaskDlgt=n&&(n.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=n&&(n.onInvokeTask?this.zone:t._invokeTaskCurrZone),this._cancelTaskZS=n&&(n.onCancelTask?n:t._cancelTaskZS),this._cancelTaskDlgt=n&&(n.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=n&&(n.onCancelTask?this.zone:t._cancelTaskCurrZone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;const o=n&&n.onHasTask;(o||t&&t._hasTaskZS)&&(this._hasTaskZS=o?n:c,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=e,n.onScheduleTask||(this._scheduleTaskZS=c,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this.zone),n.onInvokeTask||(this._invokeTaskZS=c,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this.zone),n.onCancelTask||(this._cancelTaskZS=c,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this.zone))}fork(e,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,e,t):new i(e,t)}intercept(e,t,n){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,e,t,n):t}invoke(e,t,n,o,r){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,e,t,n,o,r):t.apply(n,o)}handleError(e,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,e,t)}scheduleTask(e,t){let n=t;if(this._scheduleTaskZS)this._hasTaskZS&&n._zoneDelegates.push(this._hasTaskDlgtOwner),n=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,e,t),n||(n=t);else if(t.scheduleFn)t.scheduleFn(t);else{if(t.type!=S)throw new Error(\"Task is missing scheduleFn.\");k(t)}return n}invokeTask(e,t,n,o){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,e,t,n,o):t.callback.apply(n,o)}cancelTask(e,t){let n;if(this._cancelTaskZS)n=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,e,t);else{if(!t.cancelFn)throw Error(\"Task is not cancelable\");n=t.cancelFn(t)}return n}hasTask(e,t){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,e,t)}catch(n){this.handleError(e,n)}}_updateTaskCount(e,t){const n=this._taskCounts,o=n[e],r=n[e]=o+t;if(r<0)throw new Error(\"More tasks executed then were scheduled.\");0!=o&&0!=r||this.hasTask(this.zone,{microTask:n.microTask>0,macroTask:n.macroTask>0,eventTask:n.eventTask>0,change:e})}}class u{constructor(t,n,o,r,s,a){if(this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state=\"notScheduled\",this.type=t,this.source=n,this.data=r,this.scheduleFn=s,this.cancelFn=a,!o)throw new Error(\"callback is not defined\");this.callback=o;const i=this;this.invoke=t===P&&r&&r.useG?u.invokeTask:function(){return u.invokeTask.call(e,i,this,arguments)}}static invokeTask(e,t,n){e||(e=this),I++;try{return e.runCount++,e.zone.runTask(e,t,n)}finally{1==I&&m(),I--}}get zone(){return this._zone}get state(){return this._state}cancelScheduleRequest(){this._transitionTo(v,T)}_transitionTo(e,t,n){if(this._state!==t&&this._state!==n)throw new Error(`${this.type} '${this.source}': can not transition to '${e}', expecting state '${t}'${n?\" or '\"+n+\"'\":\"\"}, was '${this._state}'.`);this._state=e,e==v&&(this._zoneDelegates=null)}toString(){return this.data&&void 0!==this.data.handleId?this.data.handleId.toString():Object.prototype.toString.call(this)}toJSON(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}}}const h=s(\"setTimeout\"),p=s(\"Promise\"),f=s(\"then\");let d,g=[],_=!1;function k(t){if(0===I&&0===g.length)if(d||e[p]&&(d=e[p].resolve(0)),d){let e=d[f];e||(e=d.then),e.call(d,m)}else e[h](m,0);t&&g.push(t)}function m(){if(!_){for(_=!0;g.length;){const t=g;g=[];for(let n=0;n<t.length;n++){const o=t[n];try{o.zone.runTask(o,null,null)}catch(e){C.onUnhandledError(e)}}}C.microtaskDrainDone(),_=!1}}const y={name:\"NO ZONE\"},v=\"notScheduled\",T=\"scheduling\",b=\"scheduled\",E=\"running\",w=\"canceling\",Z=\"unknown\",S=\"microTask\",D=\"macroTask\",P=\"eventTask\",O={},C={symbol:s,currentZoneFrame:()=>z,onUnhandledError:R,microtaskDrainDone:R,scheduleMicroTask:k,showUncaughtError:()=>!i[s(\"ignoreConsoleErrorUncaughtError\")],patchEventTarget:()=>[],patchOnProperties:R,patchMethod:()=>R,bindArguments:()=>[],patchThen:()=>R,patchMacroTask:()=>R,patchEventPrototype:()=>R,isIEOrEdge:()=>!1,getGlobalObjects:()=>{},ObjectDefineProperty:()=>R,ObjectGetOwnPropertyDescriptor:()=>{},ObjectCreate:()=>{},ArraySlice:()=>[],patchClass:()=>R,wrapWithCurrentZone:()=>R,filterProperties:()=>[],attachOriginToPatched:()=>R,_redefineProperty:()=>R,patchCallbacks:()=>R};let z={parent:null,zone:new i(null,null)},j=null,I=0;function R(){}o(\"Zone\",\"Zone\"),e.Zone=i}(\"undefined\"!=typeof window&&window||\"undefined\"!=typeof self&&self||global);const n=Object.getOwnPropertyDescriptor,o=Object.defineProperty,r=Object.getPrototypeOf,s=Object.create,a=Array.prototype.slice,i=\"addEventListener\",c=\"removeEventListener\",l=Zone.__symbol__(i),u=Zone.__symbol__(c),h=\"true\",p=\"false\",f=Zone.__symbol__(\"\");function d(e,t){return Zone.current.wrap(e,t)}function g(e,t,n,o,r){return Zone.current.scheduleMacroTask(e,t,n,o,r)}const _=Zone.__symbol__,k=\"undefined\"!=typeof window,m=k?window:void 0,y=k&&m||\"object\"==typeof self&&self||global,v=[null];function T(e,t){for(let n=e.length-1;n>=0;n--)\"function\"==typeof e[n]&&(e[n]=d(e[n],t+\"_\"+n));return e}function b(e){return!e||!1!==e.writable&&!(\"function\"==typeof e.get&&void 0===e.set)}const E=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,w=!(\"nw\"in y)&&void 0!==y.process&&\"[object process]\"==={}.toString.call(y.process),Z=!w&&!E&&!(!k||!m.HTMLElement),S=void 0!==y.process&&\"[object process]\"==={}.toString.call(y.process)&&!E&&!(!k||!m.HTMLElement),D={},P=function(e){if(!(e=e||y.event))return;let t=D[e.type];t||(t=D[e.type]=_(\"ON_PROPERTY\"+e.type));const n=this||e.target||y,o=n[t];let r;if(Z&&n===m&&\"error\"===e.type){const t=e;r=o&&o.call(this,t.message,t.filename,t.lineno,t.colno,t.error),!0===r&&e.preventDefault()}else r=o&&o.apply(this,arguments),null==r||r||e.preventDefault();return r};function O(e,t,r){let s=n(e,t);if(!s&&r&&n(r,t)&&(s={enumerable:!0,configurable:!0}),!s||!s.configurable)return;const a=_(\"on\"+t+\"patched\");if(e.hasOwnProperty(a)&&e[a])return;delete s.writable,delete s.value;const i=s.get,c=s.set,l=t.substr(2);let u=D[l];u||(u=D[l]=_(\"ON_PROPERTY\"+l)),s.set=function(t){let n=this;n||e!==y||(n=y),n&&(n[u]&&n.removeEventListener(l,P),c&&c.apply(n,v),\"function\"==typeof t?(n[u]=t,n.addEventListener(l,P,!1)):n[u]=null)},s.get=function(){let n=this;if(n||e!==y||(n=y),!n)return null;const o=n[u];if(o)return o;if(i){let e=i&&i.call(this);if(e)return s.set.call(this,e),\"function\"==typeof n.removeAttribute&&n.removeAttribute(t),e}return null},o(e,t,s),e[a]=!0}function C(e,t,n){if(t)for(let o=0;o<t.length;o++)O(e,\"on\"+t[o],n);else{const t=[];for(const n in e)\"on\"==n.substr(0,2)&&t.push(n);for(let o=0;o<t.length;o++)O(e,t[o],n)}}const z=_(\"originalInstance\");function j(e){const t=y[e];if(!t)return;y[_(e)]=t,y[e]=function(){const n=T(arguments,e);switch(n.length){case 0:this[z]=new t;break;case 1:this[z]=new t(n[0]);break;case 2:this[z]=new t(n[0],n[1]);break;case 3:this[z]=new t(n[0],n[1],n[2]);break;case 4:this[z]=new t(n[0],n[1],n[2],n[3]);break;default:throw new Error(\"Arg list too long.\")}},N(y[e],t);const n=new t((function(){}));let r;for(r in n)\"XMLHttpRequest\"===e&&\"responseBlob\"===r||function(t){\"function\"==typeof n[t]?y[e].prototype[t]=function(){return this[z][t].apply(this[z],arguments)}:o(y[e].prototype,t,{set:function(n){\"function\"==typeof n?(this[z][t]=d(n,e+\".\"+t),N(this[z][t],n)):this[z][t]=n},get:function(){return this[z][t]}})}(r);for(r in t)\"prototype\"!==r&&t.hasOwnProperty(r)&&(y[e][r]=t[r])}function I(e,t,o){let s=e;for(;s&&!s.hasOwnProperty(t);)s=r(s);!s&&e[t]&&(s=e);const a=_(t);let i=null;if(s&&!(i=s[a])&&(i=s[a]=s[t],b(s&&n(s,t)))){const e=o(i,a,t);s[t]=function(){return e(this,arguments)},N(s[t],i)}return i}function R(e,t,n){let o=null;function r(e){const t=e.data;return t.args[t.cbIdx]=function(){e.invoke.apply(this,arguments)},o.apply(t.target,t.args),e}o=I(e,t,e=>function(t,o){const s=n(t,o);return s.cbIdx>=0&&\"function\"==typeof o[s.cbIdx]?g(s.name,o[s.cbIdx],s,r):e.apply(t,o)})}function N(e,t){e[_(\"OriginalDelegate\")]=t}let x=!1,M=!1;function L(){try{const e=m.navigator.userAgent;if(-1!==e.indexOf(\"MSIE \")||-1!==e.indexOf(\"Trident/\"))return!0}catch(e){}return!1}function A(){if(x)return M;x=!0;try{const e=m.navigator.userAgent;-1===e.indexOf(\"MSIE \")&&-1===e.indexOf(\"Trident/\")&&-1===e.indexOf(\"Edge/\")||(M=!0)}catch(e){}return M}Zone.__load_patch(\"ZoneAwarePromise\",(e,t,n)=>{const o=Object.getOwnPropertyDescriptor,r=Object.defineProperty,s=n.symbol,a=[],i=!0===e[s(\"DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION\")],c=s(\"Promise\"),l=s(\"then\");n.onUnhandledError=e=>{if(n.showUncaughtError()){const t=e&&e.rejection;t?console.error(\"Unhandled Promise rejection:\",t instanceof Error?t.message:t,\"; Zone:\",e.zone.name,\"; Task:\",e.task&&e.task.source,\"; Value:\",t,t instanceof Error?t.stack:void 0):console.error(e)}},n.microtaskDrainDone=()=>{for(;a.length;){const t=a.shift();try{t.zone.runGuarded(()=>{if(t.throwOriginal)throw t.rejection;throw t})}catch(e){h(e)}}};const u=s(\"unhandledPromiseRejectionHandler\");function h(e){n.onUnhandledError(e);try{const n=t[u];\"function\"==typeof n&&n.call(this,e)}catch(o){}}function p(e){return e&&e.then}function f(e){return e}function d(e){return C.reject(e)}const g=s(\"state\"),_=s(\"value\"),k=s(\"finally\"),m=s(\"parentPromiseValue\"),y=s(\"parentPromiseState\"),v=null,T=!0,b=!1;function E(e,t){return n=>{try{Z(e,t,n)}catch(o){Z(e,!1,o)}}}const w=s(\"currentTaskTrace\");function Z(e,o,s){const c=function(){let e=!1;return function(t){return function(){e||(e=!0,t.apply(null,arguments))}}}();if(e===s)throw new TypeError(\"Promise resolved with itself\");if(e[g]===v){let h=null;try{\"object\"!=typeof s&&\"function\"!=typeof s||(h=s&&s.then)}catch(u){return c(()=>{Z(e,!1,u)})(),e}if(o!==b&&s instanceof C&&s.hasOwnProperty(g)&&s.hasOwnProperty(_)&&s[g]!==v)D(s),Z(e,s[g],s[_]);else if(o!==b&&\"function\"==typeof h)try{h.call(s,c(E(e,o)),c(E(e,!1)))}catch(u){c(()=>{Z(e,!1,u)})()}else{e[g]=o;const c=e[_];if(e[_]=s,e[k]===k&&o===T&&(e[g]=e[y],e[_]=e[m]),o===b&&s instanceof Error){const e=t.currentTask&&t.currentTask.data&&t.currentTask.data.__creationTrace__;e&&r(s,w,{configurable:!0,enumerable:!1,writable:!0,value:e})}for(let t=0;t<c.length;)P(e,c[t++],c[t++],c[t++],c[t++]);if(0==c.length&&o==b){e[g]=0;let o=s;try{throw new Error(\"Uncaught (in promise): \"+((l=s)&&l.toString===Object.prototype.toString?(l.constructor&&l.constructor.name||\"\")+\": \"+JSON.stringify(l):l?l.toString():Object.prototype.toString.call(l))+(s&&s.stack?\"\\n\"+s.stack:\"\"))}catch(u){o=u}i&&(o.throwOriginal=!0),o.rejection=s,o.promise=e,o.zone=t.current,o.task=t.currentTask,a.push(o),n.scheduleMicroTask()}}}var l;return e}const S=s(\"rejectionHandledHandler\");function D(e){if(0===e[g]){try{const n=t[S];n&&\"function\"==typeof n&&n.call(this,{rejection:e[_],promise:e})}catch(n){}e[g]=b;for(let t=0;t<a.length;t++)e===a[t].promise&&a.splice(t,1)}}function P(e,t,n,o,r){D(e);const s=e[g],a=s?\"function\"==typeof o?o:f:\"function\"==typeof r?r:d;t.scheduleMicroTask(\"Promise.then\",()=>{try{const o=e[_],r=!!n&&k===n[k];r&&(n[m]=o,n[y]=s);const i=t.run(a,void 0,r&&a!==d&&a!==f?[]:[o]);Z(n,!0,i)}catch(o){Z(n,!1,o)}},n)}const O=function(){};class C{static toString(){return\"function ZoneAwarePromise() { [native code] }\"}static resolve(e){return Z(new this(null),T,e)}static reject(e){return Z(new this(null),b,e)}static race(e){let t,n,o=new this((e,o)=>{t=e,n=o});function r(e){t(e)}function s(e){n(e)}for(let a of e)p(a)||(a=this.resolve(a)),a.then(r,s);return o}static all(e){return C.allWithCallback(e)}static allSettled(e){return(this&&this.prototype instanceof C?this:C).allWithCallback(e,{thenCallback:e=>({status:\"fulfilled\",value:e}),errorCallback:e=>({status:\"rejected\",reason:e})})}static allWithCallback(e,t){let n,o,r=new this((e,t)=>{n=e,o=t}),s=2,a=0;const i=[];for(let l of e){p(l)||(l=this.resolve(l));const e=a;try{l.then(o=>{i[e]=t?t.thenCallback(o):o,s--,0===s&&n(i)},r=>{t?(i[e]=t.errorCallback(r),s--,0===s&&n(i)):o(r)})}catch(c){o(c)}s++,a++}return s-=2,0===s&&n(i),r}constructor(e){const t=this;if(!(t instanceof C))throw new Error(\"Must be an instanceof Promise.\");t[g]=v,t[_]=[];try{e&&e(E(t,T),E(t,b))}catch(n){Z(t,!1,n)}}get[Symbol.toStringTag](){return\"Promise\"}get[Symbol.species](){return C}then(e,n){let o=this.constructor[Symbol.species];o&&\"function\"==typeof o||(o=this.constructor||C);const r=new o(O),s=t.current;return this[g]==v?this[_].push(s,r,e,n):P(this,s,r,e,n),r}catch(e){return this.then(null,e)}finally(e){let n=this.constructor[Symbol.species];n&&\"function\"==typeof n||(n=C);const o=new n(O);o[k]=k;const r=t.current;return this[g]==v?this[_].push(r,o,e,e):P(this,r,o,e,e),o}}C.resolve=C.resolve,C.reject=C.reject,C.race=C.race,C.all=C.all;const z=e[c]=e.Promise;e.Promise=C;const j=s(\"thenPatched\");function R(e){const t=e.prototype,n=o(t,\"then\");if(n&&(!1===n.writable||!n.configurable))return;const r=t.then;t[l]=r,e.prototype.then=function(e,t){return new C((e,t)=>{r.call(this,e,t)}).then(e,t)},e[j]=!0}return n.patchThen=R,z&&(R(z),I(e,\"fetch\",e=>{return t=e,function(e,n){let o=t.apply(e,n);if(o instanceof C)return o;let r=o.constructor;return r[j]||R(r),o};var t})),Promise[t.__symbol__(\"uncaughtPromiseErrors\")]=a,C}),Zone.__load_patch(\"toString\",e=>{const t=Function.prototype.toString,n=_(\"OriginalDelegate\"),o=_(\"Promise\"),r=_(\"Error\"),s=function(){if(\"function\"==typeof this){const s=this[n];if(s)return\"function\"==typeof s?t.call(s):Object.prototype.toString.call(s);if(this===Promise){const n=e[o];if(n)return t.call(n)}if(this===Error){const n=e[r];if(n)return t.call(n)}}return t.call(this)};s[n]=t,Function.prototype.toString=s;const a=Object.prototype.toString;Object.prototype.toString=function(){return\"function\"==typeof Promise&&this instanceof Promise?\"[object Promise]\":a.call(this)}});let H=!1;if(\"undefined\"!=typeof window)try{const e=Object.defineProperty({},\"passive\",{get:function(){H=!0}});window.addEventListener(\"test\",e,e),window.removeEventListener(\"test\",e,e)}catch(fe){H=!1}const F={useG:!0},G={},q={},B=new RegExp(\"^\"+f+\"(\\\\w+)(true|false)$\"),W=_(\"propagationStopped\");function U(e,t){const n=(t?t(e):e)+p,o=(t?t(e):e)+h,r=f+n,s=f+o;G[e]={},G[e].false=r,G[e].true=s}function V(e,t,n){const o=n&&n.add||i,s=n&&n.rm||c,a=n&&n.listeners||\"eventListeners\",l=n&&n.rmAll||\"removeAllListeners\",u=_(o),d=\".\"+o+\":\",g=function(e,t,n){if(e.isRemoved)return;const o=e.callback;\"object\"==typeof o&&o.handleEvent&&(e.callback=e=>o.handleEvent(e),e.originalDelegate=o),e.invoke(e,t,[n]);const r=e.options;r&&\"object\"==typeof r&&r.once&&t[s].call(t,n.type,e.originalDelegate?e.originalDelegate:e.callback,r)},k=function(t){if(!(t=t||e.event))return;const n=this||t.target||e,o=n[G[t.type].false];if(o)if(1===o.length)g(o[0],n,t);else{const e=o.slice();for(let o=0;o<e.length&&(!t||!0!==t[W]);o++)g(e[o],n,t)}},m=function(t){if(!(t=t||e.event))return;const n=this||t.target||e,o=n[G[t.type].true];if(o)if(1===o.length)g(o[0],n,t);else{const e=o.slice();for(let o=0;o<e.length&&(!t||!0!==t[W]);o++)g(e[o],n,t)}};function y(t,n){if(!t)return!1;let i=!0;n&&void 0!==n.useG&&(i=n.useG);const c=n&&n.vh;let g=!0;n&&void 0!==n.chkDup&&(g=n.chkDup);let y=!1;n&&void 0!==n.rt&&(y=n.rt);let v=t;for(;v&&!v.hasOwnProperty(o);)v=r(v);if(!v&&t[o]&&(v=t),!v)return!1;if(v[u])return!1;const T=n&&n.eventNameToString,b={},E=v[u]=v[o],Z=v[_(s)]=v[s],S=v[_(a)]=v[a],D=v[_(l)]=v[l];let P;function O(e,t){return!H&&\"object\"==typeof e&&e?!!e.capture:H&&t?\"boolean\"==typeof e?{capture:e,passive:!0}:e?\"object\"==typeof e&&!1!==e.passive?Object.assign(Object.assign({},e),{passive:!0}):e:{passive:!0}:e}n&&n.prepend&&(P=v[_(n.prepend)]=v[n.prepend]);const C=i?function(e){if(!b.isExisting)return E.call(b.target,b.eventName,b.capture?m:k,b.options)}:function(e){return E.call(b.target,b.eventName,e.invoke,b.options)},z=i?function(e){if(!e.isRemoved){const t=G[e.eventName];let n;t&&(n=t[e.capture?h:p]);const o=n&&e.target[n];if(o)for(let r=0;r<o.length;r++)if(o[r]===e){o.splice(r,1),e.isRemoved=!0,0===o.length&&(e.allRemoved=!0,e.target[n]=null);break}}if(e.allRemoved)return Z.call(e.target,e.eventName,e.capture?m:k,e.options)}:function(e){return Z.call(e.target,e.eventName,e.invoke,e.options)},j=n&&n.diff?n.diff:function(e,t){const n=typeof t;return\"function\"===n&&e.callback===t||\"object\"===n&&e.originalDelegate===t},I=Zone[_(\"UNPATCHED_EVENTS\")],R=e[_(\"PASSIVE_EVENTS\")],x=function(t,o,r,s,a=!1,l=!1){return function(){const u=this||e;let f=arguments[0];n&&n.transferEventName&&(f=n.transferEventName(f));let d=arguments[1];if(!d)return t.apply(this,arguments);if(w&&\"uncaughtException\"===f)return t.apply(this,arguments);let _=!1;if(\"function\"!=typeof d){if(!d.handleEvent)return t.apply(this,arguments);_=!0}if(c&&!c(t,d,u,arguments))return;const k=H&&!!R&&-1!==R.indexOf(f),m=O(arguments[2],k);if(I)for(let e=0;e<I.length;e++)if(f===I[e])return k?t.call(u,f,d,m):t.apply(this,arguments);const y=!!m&&(\"boolean\"==typeof m||m.capture),v=!(!m||\"object\"!=typeof m)&&m.once,E=Zone.current;let Z=G[f];Z||(U(f,T),Z=G[f]);const S=Z[y?h:p];let D,P=u[S],C=!1;if(P){if(C=!0,g)for(let e=0;e<P.length;e++)if(j(P[e],d))return}else P=u[S]=[];const z=u.constructor.name,N=q[z];N&&(D=N[f]),D||(D=z+o+(T?T(f):f)),b.options=m,v&&(b.options.once=!1),b.target=u,b.capture=y,b.eventName=f,b.isExisting=C;const x=i?F:void 0;x&&(x.taskData=b);const M=E.scheduleEventTask(D,d,x,r,s);return b.target=null,x&&(x.taskData=null),v&&(m.once=!0),(H||\"boolean\"!=typeof M.options)&&(M.options=m),M.target=u,M.capture=y,M.eventName=f,_&&(M.originalDelegate=d),l?P.unshift(M):P.push(M),a?u:void 0}};return v[o]=x(E,d,C,z,y),P&&(v.prependListener=x(P,\".prependListener:\",(function(e){return P.call(b.target,b.eventName,e.invoke,b.options)}),z,y,!0)),v[s]=function(){const t=this||e;let o=arguments[0];n&&n.transferEventName&&(o=n.transferEventName(o));const r=arguments[2],s=!!r&&(\"boolean\"==typeof r||r.capture),a=arguments[1];if(!a)return Z.apply(this,arguments);if(c&&!c(Z,a,t,arguments))return;const i=G[o];let l;i&&(l=i[s?h:p]);const u=l&&t[l];if(u)for(let e=0;e<u.length;e++){const n=u[e];if(j(n,a))return u.splice(e,1),n.isRemoved=!0,0===u.length&&(n.allRemoved=!0,t[l]=null,\"string\"==typeof o)&&(t[f+\"ON_PROPERTY\"+o]=null),n.zone.cancelTask(n),y?t:void 0}return Z.apply(this,arguments)},v[a]=function(){const t=this||e;let o=arguments[0];n&&n.transferEventName&&(o=n.transferEventName(o));const r=[],s=$(t,T?T(o):o);for(let e=0;e<s.length;e++){const t=s[e];r.push(t.originalDelegate?t.originalDelegate:t.callback)}return r},v[l]=function(){const t=this||e;let o=arguments[0];if(o){n&&n.transferEventName&&(o=n.transferEventName(o));const e=G[o];if(e){const n=t[e.false],r=t[e.true];if(n){const e=n.slice();for(let t=0;t<e.length;t++){const n=e[t];this[s].call(this,o,n.originalDelegate?n.originalDelegate:n.callback,n.options)}}if(r){const e=r.slice();for(let t=0;t<e.length;t++){const n=e[t];this[s].call(this,o,n.originalDelegate?n.originalDelegate:n.callback,n.options)}}}}else{const e=Object.keys(t);for(let t=0;t<e.length;t++){const n=B.exec(e[t]);let o=n&&n[1];o&&\"removeListener\"!==o&&this[l].call(this,o)}this[l].call(this,\"removeListener\")}if(y)return this},N(v[o],E),N(v[s],Z),D&&N(v[l],D),S&&N(v[a],S),!0}let v=[];for(let r=0;r<t.length;r++)v[r]=y(t[r],n);return v}function $(e,t){if(!t){const n=[];for(let o in e){const r=B.exec(o);let s=r&&r[1];if(s&&(!t||s===t)){const t=e[o];if(t)for(let e=0;e<t.length;e++)n.push(t[e])}}return n}let n=G[t];n||(U(t),n=G[t]);const o=e[n.false],r=e[n.true];return o?r?o.concat(r):o.slice():r?r.slice():[]}function X(e,t){const n=e.Event;n&&n.prototype&&t.patchMethod(n.prototype,\"stopImmediatePropagation\",e=>function(t,n){t[W]=!0,e&&e.apply(t,n)})}function J(e,t,n,o,r){const s=Zone.__symbol__(o);if(t[s])return;const a=t[s]=t[o];t[o]=function(s,i,c){return i&&i.prototype&&r.forEach((function(t){const r=`${n}.${o}::`+t,s=i.prototype;if(s.hasOwnProperty(t)){const n=e.ObjectGetOwnPropertyDescriptor(s,t);n&&n.value?(n.value=e.wrapWithCurrentZone(n.value,r),e._redefineProperty(i.prototype,t,n)):s[t]&&(s[t]=e.wrapWithCurrentZone(s[t],r))}else s[t]&&(s[t]=e.wrapWithCurrentZone(s[t],r))})),a.call(t,s,i,c)},e.attachOriginToPatched(t[o],a)}const Y=[\"absolutedeviceorientation\",\"afterinput\",\"afterprint\",\"appinstalled\",\"beforeinstallprompt\",\"beforeprint\",\"beforeunload\",\"devicelight\",\"devicemotion\",\"deviceorientation\",\"deviceorientationabsolute\",\"deviceproximity\",\"hashchange\",\"languagechange\",\"message\",\"mozbeforepaint\",\"offline\",\"online\",\"paint\",\"pageshow\",\"pagehide\",\"popstate\",\"rejectionhandled\",\"storage\",\"unhandledrejection\",\"unload\",\"userproximity\",\"vrdisplayconnected\",\"vrdisplaydisconnected\",\"vrdisplaypresentchange\"],K=[\"encrypted\",\"waitingforkey\",\"msneedkey\",\"mozinterruptbegin\",\"mozinterruptend\"],Q=[\"load\"],ee=[\"blur\",\"error\",\"focus\",\"load\",\"resize\",\"scroll\",\"messageerror\"],te=[\"bounce\",\"finish\",\"start\"],ne=[\"loadstart\",\"progress\",\"abort\",\"error\",\"load\",\"progress\",\"timeout\",\"loadend\",\"readystatechange\"],oe=[\"upgradeneeded\",\"complete\",\"abort\",\"success\",\"error\",\"blocked\",\"versionchange\",\"close\"],re=[\"close\",\"error\",\"open\",\"message\"],se=[\"error\",\"message\"],ae=[\"abort\",\"animationcancel\",\"animationend\",\"animationiteration\",\"auxclick\",\"beforeinput\",\"blur\",\"cancel\",\"canplay\",\"canplaythrough\",\"change\",\"compositionstart\",\"compositionupdate\",\"compositionend\",\"cuechange\",\"click\",\"close\",\"contextmenu\",\"curechange\",\"dblclick\",\"drag\",\"dragend\",\"dragenter\",\"dragexit\",\"dragleave\",\"dragover\",\"drop\",\"durationchange\",\"emptied\",\"ended\",\"error\",\"focus\",\"focusin\",\"focusout\",\"gotpointercapture\",\"input\",\"invalid\",\"keydown\",\"keypress\",\"keyup\",\"load\",\"loadstart\",\"loadeddata\",\"loadedmetadata\",\"lostpointercapture\",\"mousedown\",\"mouseenter\",\"mouseleave\",\"mousemove\",\"mouseout\",\"mouseover\",\"mouseup\",\"mousewheel\",\"orientationchange\",\"pause\",\"play\",\"playing\",\"pointercancel\",\"pointerdown\",\"pointerenter\",\"pointerleave\",\"pointerlockchange\",\"mozpointerlockchange\",\"webkitpointerlockerchange\",\"pointerlockerror\",\"mozpointerlockerror\",\"webkitpointerlockerror\",\"pointermove\",\"pointout\",\"pointerover\",\"pointerup\",\"progress\",\"ratechange\",\"reset\",\"resize\",\"scroll\",\"seeked\",\"seeking\",\"select\",\"selectionchange\",\"selectstart\",\"show\",\"sort\",\"stalled\",\"submit\",\"suspend\",\"timeupdate\",\"volumechange\",\"touchcancel\",\"touchmove\",\"touchstart\",\"touchend\",\"transitioncancel\",\"transitionend\",\"waiting\",\"wheel\"].concat([\"webglcontextrestored\",\"webglcontextlost\",\"webglcontextcreationerror\"],[\"autocomplete\",\"autocompleteerror\"],[\"toggle\"],[\"afterscriptexecute\",\"beforescriptexecute\",\"DOMContentLoaded\",\"freeze\",\"fullscreenchange\",\"mozfullscreenchange\",\"webkitfullscreenchange\",\"msfullscreenchange\",\"fullscreenerror\",\"mozfullscreenerror\",\"webkitfullscreenerror\",\"msfullscreenerror\",\"readystatechange\",\"visibilitychange\",\"resume\"],Y,[\"beforecopy\",\"beforecut\",\"beforepaste\",\"copy\",\"cut\",\"paste\",\"dragstart\",\"loadend\",\"animationstart\",\"search\",\"transitionrun\",\"transitionstart\",\"webkitanimationend\",\"webkitanimationiteration\",\"webkitanimationstart\",\"webkittransitionend\"],[\"activate\",\"afterupdate\",\"ariarequest\",\"beforeactivate\",\"beforedeactivate\",\"beforeeditfocus\",\"beforeupdate\",\"cellchange\",\"controlselect\",\"dataavailable\",\"datasetchanged\",\"datasetcomplete\",\"errorupdate\",\"filterchange\",\"layoutcomplete\",\"losecapture\",\"move\",\"moveend\",\"movestart\",\"propertychange\",\"resizeend\",\"resizestart\",\"rowenter\",\"rowexit\",\"rowsdelete\",\"rowsinserted\",\"command\",\"compassneedscalibration\",\"deactivate\",\"help\",\"mscontentzoom\",\"msmanipulationstatechanged\",\"msgesturechange\",\"msgesturedoubletap\",\"msgestureend\",\"msgesturehold\",\"msgesturestart\",\"msgesturetap\",\"msgotpointercapture\",\"msinertiastart\",\"mslostpointercapture\",\"mspointercancel\",\"mspointerdown\",\"mspointerenter\",\"mspointerhover\",\"mspointerleave\",\"mspointermove\",\"mspointerout\",\"mspointerover\",\"mspointerup\",\"pointerout\",\"mssitemodejumplistitemremoved\",\"msthumbnailclick\",\"stop\",\"storagecommit\"]);function ie(e,t,n){if(!n||0===n.length)return t;const o=n.filter(t=>t.target===e);if(!o||0===o.length)return t;const r=o[0].ignoreProperties;return t.filter(e=>-1===r.indexOf(e))}function ce(e,t,n,o){e&&C(e,ie(e,t,n),o)}function le(e,t){if(w&&!S)return;if(Zone[e.symbol(\"patchEvents\")])return;const n=\"undefined\"!=typeof WebSocket,o=t.__Zone_ignore_on_properties;if(Z){const e=window,t=L()?[{target:e,ignoreProperties:[\"error\"]}]:[];ce(e,ae.concat([\"messageerror\"]),o?o.concat(t):o,r(e)),ce(Document.prototype,ae,o),void 0!==e.SVGElement&&ce(e.SVGElement.prototype,ae,o),ce(Element.prototype,ae,o),ce(HTMLElement.prototype,ae,o),ce(HTMLMediaElement.prototype,K,o),ce(HTMLFrameSetElement.prototype,Y.concat(ee),o),ce(HTMLBodyElement.prototype,Y.concat(ee),o),ce(HTMLFrameElement.prototype,Q,o),ce(HTMLIFrameElement.prototype,Q,o);const n=e.HTMLMarqueeElement;n&&ce(n.prototype,te,o);const s=e.Worker;s&&ce(s.prototype,se,o)}const s=t.XMLHttpRequest;s&&ce(s.prototype,ne,o);const a=t.XMLHttpRequestEventTarget;a&&ce(a&&a.prototype,ne,o),\"undefined\"!=typeof IDBIndex&&(ce(IDBIndex.prototype,oe,o),ce(IDBRequest.prototype,oe,o),ce(IDBOpenDBRequest.prototype,oe,o),ce(IDBDatabase.prototype,oe,o),ce(IDBTransaction.prototype,oe,o),ce(IDBCursor.prototype,oe,o)),n&&ce(WebSocket.prototype,re,o)}Zone.__load_patch(\"util\",(e,t,r)=>{r.patchOnProperties=C,r.patchMethod=I,r.bindArguments=T,r.patchMacroTask=R;const l=t.__symbol__(\"BLACK_LISTED_EVENTS\"),u=t.__symbol__(\"UNPATCHED_EVENTS\");e[u]&&(e[l]=e[u]),e[l]&&(t[l]=t[u]=e[l]),r.patchEventPrototype=X,r.patchEventTarget=V,r.isIEOrEdge=A,r.ObjectDefineProperty=o,r.ObjectGetOwnPropertyDescriptor=n,r.ObjectCreate=s,r.ArraySlice=a,r.patchClass=j,r.wrapWithCurrentZone=d,r.filterProperties=ie,r.attachOriginToPatched=N,r._redefineProperty=Object.defineProperty,r.patchCallbacks=J,r.getGlobalObjects=()=>({globalSources:q,zoneSymbolEventNames:G,eventNames:ae,isBrowser:Z,isMix:S,isNode:w,TRUE_STR:h,FALSE_STR:p,ZONE_SYMBOL_PREFIX:f,ADD_EVENT_LISTENER_STR:i,REMOVE_EVENT_LISTENER_STR:c})});const ue=_(\"zoneTask\");function he(e,t,n,o){let r=null,s=null;n+=o;const a={};function i(t){const n=t.data;return n.args[0]=function(){try{t.invoke.apply(this,arguments)}finally{t.data&&t.data.isPeriodic||(\"number\"==typeof n.handleId?delete a[n.handleId]:n.handleId&&(n.handleId[ue]=null))}},n.handleId=r.apply(e,n.args),t}function c(t){return s.call(e,t.data.handleId)}r=I(e,t+=o,n=>function(r,s){if(\"function\"==typeof s[0]){const e=g(t,s[0],{isPeriodic:\"Interval\"===o,delay:\"Timeout\"===o||\"Interval\"===o?s[1]||0:void 0,args:s},i,c);if(!e)return e;const n=e.data.handleId;return\"number\"==typeof n?a[n]=e:n&&(n[ue]=e),n&&n.ref&&n.unref&&\"function\"==typeof n.ref&&\"function\"==typeof n.unref&&(e.ref=n.ref.bind(n),e.unref=n.unref.bind(n)),\"number\"==typeof n||n?n:e}return n.apply(e,s)}),s=I(e,n,t=>function(n,o){const r=o[0];let s;\"number\"==typeof r?s=a[r]:(s=r&&r[ue],s||(s=r)),s&&\"string\"==typeof s.type?\"notScheduled\"!==s.state&&(s.cancelFn&&s.data.isPeriodic||0===s.runCount)&&(\"number\"==typeof r?delete a[r]:r&&(r[ue]=null),s.zone.cancelTask(s)):t.apply(e,o)})}function pe(e,t){if(Zone[t.symbol(\"patchEventTarget\")])return;const{eventNames:n,zoneSymbolEventNames:o,TRUE_STR:r,FALSE_STR:s,ZONE_SYMBOL_PREFIX:a}=t.getGlobalObjects();for(let c=0;c<n.length;c++){const e=n[c],t=a+(e+s),i=a+(e+r);o[e]={},o[e][s]=t,o[e][r]=i}const i=e.EventTarget;return i&&i.prototype?(t.patchEventTarget(e,[i&&i.prototype]),!0):void 0}Zone.__load_patch(\"legacy\",e=>{const t=e[Zone.__symbol__(\"legacyPatch\")];t&&t()}),Zone.__load_patch(\"timers\",e=>{const t=\"set\",n=\"clear\";he(e,t,n,\"Timeout\"),he(e,t,n,\"Interval\"),he(e,t,n,\"Immediate\")}),Zone.__load_patch(\"requestAnimationFrame\",e=>{he(e,\"request\",\"cancel\",\"AnimationFrame\"),he(e,\"mozRequest\",\"mozCancel\",\"AnimationFrame\"),he(e,\"webkitRequest\",\"webkitCancel\",\"AnimationFrame\")}),Zone.__load_patch(\"blocking\",(e,t)=>{const n=[\"alert\",\"prompt\",\"confirm\"];for(let o=0;o<n.length;o++)I(e,n[o],(n,o,r)=>function(o,s){return t.current.run(n,e,s,r)})}),Zone.__load_patch(\"EventTarget\",(e,t,n)=>{!function(e,t){t.patchEventPrototype(e,t)}(e,n),pe(e,n);const o=e.XMLHttpRequestEventTarget;o&&o.prototype&&n.patchEventTarget(e,[o.prototype])}),Zone.__load_patch(\"MutationObserver\",(e,t,n)=>{j(\"MutationObserver\"),j(\"WebKitMutationObserver\")}),Zone.__load_patch(\"IntersectionObserver\",(e,t,n)=>{j(\"IntersectionObserver\")}),Zone.__load_patch(\"FileReader\",(e,t,n)=>{j(\"FileReader\")}),Zone.__load_patch(\"on_property\",(e,t,n)=>{le(n,e)}),Zone.__load_patch(\"customElements\",(e,t,n)=>{!function(e,t){const{isBrowser:n,isMix:o}=t.getGlobalObjects();(n||o)&&e.customElements&&\"customElements\"in e&&t.patchCallbacks(t,e.customElements,\"customElements\",\"define\",[\"connectedCallback\",\"disconnectedCallback\",\"adoptedCallback\",\"attributeChangedCallback\"])}(e,n)}),Zone.__load_patch(\"XHR\",(e,t)=>{!function(e){const c=e.XMLHttpRequest;if(!c)return;const h=c.prototype;let p=h[l],f=h[u];if(!p){const t=e.XMLHttpRequestEventTarget;if(t){const e=t.prototype;p=e[l],f=e[u]}}const d=\"readystatechange\",k=\"scheduled\";function m(e){const o=e.data,a=o.target;a[s]=!1,a[i]=!1;const c=a[r];p||(p=a[l],f=a[u]),c&&f.call(a,d,c);const h=a[r]=()=>{if(a.readyState===a.DONE)if(!o.aborted&&a[s]&&e.state===k){const n=a[t.__symbol__(\"loadfalse\")];if(0!==a.status&&n&&n.length>0){const r=e.invoke;e.invoke=function(){const n=a[t.__symbol__(\"loadfalse\")];for(let t=0;t<n.length;t++)n[t]===e&&n.splice(t,1);o.aborted||e.state!==k||r.call(e)},n.push(e)}else e.invoke()}else o.aborted||!1!==a[s]||(a[i]=!0)};return p.call(a,d,h),a[n]||(a[n]=e),w.apply(a,o.args),a[s]=!0,e}function y(){}function v(e){const t=e.data;return t.aborted=!0,Z.apply(t.target,t.args)}const T=I(h,\"open\",()=>function(e,t){return e[o]=0==t[2],e[a]=t[1],T.apply(e,t)}),b=_(\"fetchTaskAborting\"),E=_(\"fetchTaskScheduling\"),w=I(h,\"send\",()=>function(e,n){if(!0===t.current[E])return w.apply(e,n);if(e[o])return w.apply(e,n);{const t={target:e,url:e[a],isPeriodic:!1,args:n,aborted:!1},o=g(\"XMLHttpRequest.send\",y,t,m,v);e&&!0===e[i]&&!t.aborted&&o.state===k&&o.invoke()}}),Z=I(h,\"abort\",()=>function(e,o){const r=e[n];if(r&&\"string\"==typeof r.type){if(null==r.cancelFn||r.data&&r.data.aborted)return;r.zone.cancelTask(r)}else if(!0===t.current[b])return Z.apply(e,o)})}(e);const n=_(\"xhrTask\"),o=_(\"xhrSync\"),r=_(\"xhrListener\"),s=_(\"xhrScheduled\"),a=_(\"xhrURL\"),i=_(\"xhrErrorBeforeScheduled\")}),Zone.__load_patch(\"geolocation\",e=>{e.navigator&&e.navigator.geolocation&&function(e,t){const o=e.constructor.name;for(let r=0;r<t.length;r++){const s=t[r],a=e[s];if(a){if(!b(n(e,s)))continue;e[s]=(e=>{const t=function(){return e.apply(this,T(arguments,o+\".\"+s))};return N(t,e),t})(a)}}}(e.navigator.geolocation,[\"getCurrentPosition\",\"watchPosition\"])}),Zone.__load_patch(\"PromiseRejectionEvent\",(e,t)=>{function n(t){return function(n){$(e,t).forEach(o=>{const r=e.PromiseRejectionEvent;if(r){const e=new r(t,{promise:n.promise,reason:n.rejection});o.invoke(e)}})}}e.PromiseRejectionEvent&&(t[_(\"unhandledPromiseRejectionHandler\")]=n(\"unhandledrejection\"),t[_(\"rejectionHandledHandler\")]=n(\"rejectionhandled\"))})}},[[1,0]]]);"
  },
  {
    "path": "src/aup/dashboard/frontend/febuild/auptimizer-dashboard/runtime.29a333e72cc7398676d0.js",
    "content": "!function(e){function r(r){for(var n,i,a=r[0],c=r[1],l=r[2],p=0,s=[];p<a.length;p++)i=a[p],Object.prototype.hasOwnProperty.call(o,i)&&o[i]&&s.push(o[i][0]),o[i]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(f&&f(r);s.length;)s.shift()();return u.push.apply(u,l||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,a=1;a<t.length;a++)0!==o[t[a]]&&(n=!1);n&&(u.splice(r--,1),e=i(i.s=t[0]))}return e}var n={},o={0:0},u=[];function i(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var u,a=document.createElement(\"script\");a.charset=\"utf-8\",a.timeout=120,i.nc&&a.setAttribute(\"nonce\",i.nc),a.src=function(e){return i.p+\"\"+({}[e]||e)+\".\"+{4:\"3bf463bd37e16d085b6c\",5:\"0e291298e9c49cb93c71\"}[e]+\".js\"}(e);var c=new Error;u=function(r){a.onerror=a.onload=null,clearTimeout(l);var t=o[e];if(0!==t){if(t){var n=r&&(\"load\"===r.type?\"missing\":r.type),u=r&&r.target&&r.target.src;c.message=\"Loading chunk \"+e+\" failed.\\n(\"+n+\": \"+u+\")\",c.name=\"ChunkLoadError\",c.type=n,c.request=u,t[1](c)}o[e]=void 0}};var l=setTimeout((function(){u({type:\"timeout\",target:a})}),12e4);a.onerror=a.onload=u,document.head.appendChild(a)}return Promise.all(r)},i.m=e,i.c=n,i.d=function(e,r,t){i.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},i.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},i.t=function(e,r){if(1&r&&(e=i(e)),8&r)return e;if(4&r&&\"object\"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,\"default\",{enumerable:!0,value:e}),2&r&&\"string\"!=typeof e)for(var n in e)i.d(t,n,(function(r){return e[r]}).bind(null,n));return t},i.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(r,\"a\",r),r},i.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},i.p=\"\",i.oe=function(e){throw console.error(e),e};var a=window.webpackJsonp=window.webpackJsonp||[],c=a.push.bind(a);a.push=r,a=a.slice();for(var l=0;l<a.length;l++)r(a[l]);var f=c;t()}([]);"
  },
  {
    "path": "src/aup/dashboard/frontend/febuild/auptimizer-dashboard/styles.5a1d2b21684fc92c4f99.css",
    "content": "@charset \"UTF-8\";.mat-ripple-element{background-color:rgba(0,0,0,.1)}.mat-option{color:rgba(0,0,0,.87)}.mat-option.mat-active,.mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled),.mat-option:focus:not(.mat-option-disabled),.mat-option:hover:not(.mat-option-disabled){background:rgba(0,0,0,.04)}.mat-option.mat-active{color:rgba(0,0,0,.87)}.mat-option.mat-option-disabled{color:rgba(0,0,0,.38)}.mat-primary .mat-option.mat-selected:not(.mat-option-disabled){color:#3f51b5}.mat-accent .mat-option.mat-selected:not(.mat-option-disabled){color:#ff4081}.mat-warn .mat-option.mat-selected:not(.mat-option-disabled){color:#f44336}.mat-optgroup-label{color:rgba(0,0,0,.54)}.mat-optgroup-disabled .mat-optgroup-label{color:rgba(0,0,0,.38)}.mat-pseudo-checkbox{color:rgba(0,0,0,.54)}.mat-pseudo-checkbox:after{color:#fafafa}.mat-pseudo-checkbox-disabled{color:#b0b0b0}.mat-primary .mat-pseudo-checkbox-checked,.mat-primary .mat-pseudo-checkbox-indeterminate{background:#3f51b5}.mat-accent .mat-pseudo-checkbox-checked,.mat-accent .mat-pseudo-checkbox-indeterminate,.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox-indeterminate{background:#ff4081}.mat-warn .mat-pseudo-checkbox-checked,.mat-warn .mat-pseudo-checkbox-indeterminate{background:#f44336}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled{background:#b0b0b0}.mat-app-background{background-color:#fafafa;color:rgba(0,0,0,.87)}.mat-elevation-z0{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.mat-elevation-z1{box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12)}.mat-elevation-z2{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.mat-elevation-z3{box-shadow:0 3px 3px -2px rgba(0,0,0,.2),0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12)}.mat-elevation-z4{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.mat-elevation-z5{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 5px 8px 0 rgba(0,0,0,.14),0 1px 14px 0 rgba(0,0,0,.12)}.mat-elevation-z6{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.mat-elevation-z7{box-shadow:0 4px 5px -2px rgba(0,0,0,.2),0 7px 10px 1px rgba(0,0,0,.14),0 2px 16px 1px rgba(0,0,0,.12)}.mat-elevation-z8{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.mat-elevation-z9{box-shadow:0 5px 6px -3px rgba(0,0,0,.2),0 9px 12px 1px rgba(0,0,0,.14),0 3px 16px 2px rgba(0,0,0,.12)}.mat-elevation-z10{box-shadow:0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12)}.mat-elevation-z11{box-shadow:0 6px 7px -4px rgba(0,0,0,.2),0 11px 15px 1px rgba(0,0,0,.14),0 4px 20px 3px rgba(0,0,0,.12)}.mat-elevation-z12{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.mat-elevation-z13{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 13px 19px 2px rgba(0,0,0,.14),0 5px 24px 4px rgba(0,0,0,.12)}.mat-elevation-z14{box-shadow:0 7px 9px -4px rgba(0,0,0,.2),0 14px 21px 2px rgba(0,0,0,.14),0 5px 26px 4px rgba(0,0,0,.12)}.mat-elevation-z15{box-shadow:0 8px 9px -5px rgba(0,0,0,.2),0 15px 22px 2px rgba(0,0,0,.14),0 6px 28px 5px rgba(0,0,0,.12)}.mat-elevation-z16{box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.mat-elevation-z17{box-shadow:0 8px 11px -5px rgba(0,0,0,.2),0 17px 26px 2px rgba(0,0,0,.14),0 6px 32px 5px rgba(0,0,0,.12)}.mat-elevation-z18{box-shadow:0 9px 11px -5px rgba(0,0,0,.2),0 18px 28px 2px rgba(0,0,0,.14),0 7px 34px 6px rgba(0,0,0,.12)}.mat-elevation-z19{box-shadow:0 9px 12px -6px rgba(0,0,0,.2),0 19px 29px 2px rgba(0,0,0,.14),0 7px 36px 6px rgba(0,0,0,.12)}.mat-elevation-z20{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 20px 31px 3px rgba(0,0,0,.14),0 8px 38px 7px rgba(0,0,0,.12)}.mat-elevation-z21{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 21px 33px 3px rgba(0,0,0,.14),0 8px 40px 7px rgba(0,0,0,.12)}.mat-elevation-z22{box-shadow:0 10px 14px -6px rgba(0,0,0,.2),0 22px 35px 3px rgba(0,0,0,.14),0 8px 42px 7px rgba(0,0,0,.12)}.mat-elevation-z23{box-shadow:0 11px 14px -7px rgba(0,0,0,.2),0 23px 36px 3px rgba(0,0,0,.14),0 9px 44px 8px rgba(0,0,0,.12)}.mat-elevation-z24{box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12)}.mat-autocomplete-panel{background:#fff;color:rgba(0,0,0,.87)}.mat-autocomplete-panel:not([class*=mat-elevation-z]){box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover){background:#fff}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled){color:rgba(0,0,0,.87)}.mat-badge-content{color:#fff;background:#3f51b5}.cdk-high-contrast-active .mat-badge-content{outline:1px solid;border-radius:0}.mat-badge-accent .mat-badge-content{background:#ff4081;color:#fff}.mat-badge-warn .mat-badge-content{color:#fff;background:#f44336}.mat-badge{position:relative}.mat-badge-hidden .mat-badge-content{display:none}.mat-badge-disabled .mat-badge-content{background:#b9b9b9;color:rgba(0,0,0,.38)}.mat-badge-content{position:absolute;text-align:center;display:inline-block;border-radius:50%;transition:transform .2s ease-in-out;transform:scale(.6);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.mat-badge-content._mat-animation-noopable,.ng-animate-disabled .mat-badge-content{transition:none}.mat-badge-content.mat-badge-active{transform:none}.mat-badge-small .mat-badge-content{width:16px;height:16px;line-height:16px}.mat-badge-small.mat-badge-above .mat-badge-content{top:-8px}.mat-badge-small.mat-badge-below .mat-badge-content{bottom:-8px}.mat-badge-small.mat-badge-before .mat-badge-content{left:-16px}[dir=rtl] .mat-badge-small.mat-badge-before .mat-badge-content{left:auto;right:-16px}.mat-badge-small.mat-badge-after .mat-badge-content{right:-16px}[dir=rtl] .mat-badge-small.mat-badge-after .mat-badge-content{right:auto;left:-16px}.mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-8px}[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-8px}.mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-8px}[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-8px}.mat-badge-medium .mat-badge-content{width:22px;height:22px;line-height:22px}.mat-badge-medium.mat-badge-above .mat-badge-content{top:-11px}.mat-badge-medium.mat-badge-below .mat-badge-content{bottom:-11px}.mat-badge-medium.mat-badge-before .mat-badge-content{left:-22px}[dir=rtl] .mat-badge-medium.mat-badge-before .mat-badge-content{left:auto;right:-22px}.mat-badge-medium.mat-badge-after .mat-badge-content{right:-22px}[dir=rtl] .mat-badge-medium.mat-badge-after .mat-badge-content{right:auto;left:-22px}.mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-11px}[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-11px}.mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-11px}[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-11px}.mat-badge-large .mat-badge-content{width:28px;height:28px;line-height:28px}.mat-badge-large.mat-badge-above .mat-badge-content{top:-14px}.mat-badge-large.mat-badge-below .mat-badge-content{bottom:-14px}.mat-badge-large.mat-badge-before .mat-badge-content{left:-28px}[dir=rtl] .mat-badge-large.mat-badge-before .mat-badge-content{left:auto;right:-28px}.mat-badge-large.mat-badge-after .mat-badge-content{right:-28px}[dir=rtl] .mat-badge-large.mat-badge-after .mat-badge-content{right:auto;left:-28px}.mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-14px}[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-14px}.mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-14px}[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-14px}.mat-bottom-sheet-container{box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);background:#fff;color:rgba(0,0,0,.87)}.mat-button,.mat-icon-button,.mat-stroked-button{color:inherit;background:transparent}.mat-button.mat-primary,.mat-icon-button.mat-primary,.mat-stroked-button.mat-primary{color:#3f51b5}.mat-button.mat-accent,.mat-icon-button.mat-accent,.mat-stroked-button.mat-accent{color:#ff4081}.mat-button.mat-warn,.mat-icon-button.mat-warn,.mat-stroked-button.mat-warn{color:#f44336}.mat-button.mat-accent.mat-button-disabled,.mat-button.mat-button-disabled.mat-button-disabled,.mat-button.mat-primary.mat-button-disabled,.mat-button.mat-warn.mat-button-disabled,.mat-icon-button.mat-accent.mat-button-disabled,.mat-icon-button.mat-button-disabled.mat-button-disabled,.mat-icon-button.mat-primary.mat-button-disabled,.mat-icon-button.mat-warn.mat-button-disabled,.mat-stroked-button.mat-accent.mat-button-disabled,.mat-stroked-button.mat-button-disabled.mat-button-disabled,.mat-stroked-button.mat-primary.mat-button-disabled,.mat-stroked-button.mat-warn.mat-button-disabled{color:rgba(0,0,0,.26)}.mat-button.mat-primary .mat-button-focus-overlay,.mat-icon-button.mat-primary .mat-button-focus-overlay,.mat-stroked-button.mat-primary .mat-button-focus-overlay{background-color:#3f51b5}.mat-button.mat-accent .mat-button-focus-overlay,.mat-icon-button.mat-accent .mat-button-focus-overlay,.mat-stroked-button.mat-accent .mat-button-focus-overlay{background-color:#ff4081}.mat-button.mat-warn .mat-button-focus-overlay,.mat-icon-button.mat-warn .mat-button-focus-overlay,.mat-stroked-button.mat-warn .mat-button-focus-overlay{background-color:#f44336}.mat-button.mat-button-disabled .mat-button-focus-overlay,.mat-icon-button.mat-button-disabled .mat-button-focus-overlay,.mat-stroked-button.mat-button-disabled .mat-button-focus-overlay{background-color:initial}.mat-button .mat-ripple-element,.mat-icon-button .mat-ripple-element,.mat-stroked-button .mat-ripple-element{opacity:.1;background-color:currentColor}.mat-button-focus-overlay{background:#000}.mat-stroked-button:not(.mat-button-disabled){border-color:rgba(0,0,0,.12)}.mat-fab,.mat-flat-button,.mat-mini-fab,.mat-raised-button{color:rgba(0,0,0,.87);background-color:#fff}.mat-fab.mat-accent,.mat-fab.mat-primary,.mat-fab.mat-warn,.mat-flat-button.mat-accent,.mat-flat-button.mat-primary,.mat-flat-button.mat-warn,.mat-mini-fab.mat-accent,.mat-mini-fab.mat-primary,.mat-mini-fab.mat-warn,.mat-raised-button.mat-accent,.mat-raised-button.mat-primary,.mat-raised-button.mat-warn{color:#fff}.mat-fab.mat-accent.mat-button-disabled,.mat-fab.mat-button-disabled.mat-button-disabled,.mat-fab.mat-primary.mat-button-disabled,.mat-fab.mat-warn.mat-button-disabled,.mat-flat-button.mat-accent.mat-button-disabled,.mat-flat-button.mat-button-disabled.mat-button-disabled,.mat-flat-button.mat-primary.mat-button-disabled,.mat-flat-button.mat-warn.mat-button-disabled,.mat-mini-fab.mat-accent.mat-button-disabled,.mat-mini-fab.mat-button-disabled.mat-button-disabled,.mat-mini-fab.mat-primary.mat-button-disabled,.mat-mini-fab.mat-warn.mat-button-disabled,.mat-raised-button.mat-accent.mat-button-disabled,.mat-raised-button.mat-button-disabled.mat-button-disabled,.mat-raised-button.mat-primary.mat-button-disabled,.mat-raised-button.mat-warn.mat-button-disabled{color:rgba(0,0,0,.26)}.mat-fab.mat-primary,.mat-flat-button.mat-primary,.mat-mini-fab.mat-primary,.mat-raised-button.mat-primary{background-color:#3f51b5}.mat-fab.mat-accent,.mat-flat-button.mat-accent,.mat-mini-fab.mat-accent,.mat-raised-button.mat-accent{background-color:#ff4081}.mat-fab.mat-warn,.mat-flat-button.mat-warn,.mat-mini-fab.mat-warn,.mat-raised-button.mat-warn{background-color:#f44336}.mat-fab.mat-accent.mat-button-disabled,.mat-fab.mat-button-disabled.mat-button-disabled,.mat-fab.mat-primary.mat-button-disabled,.mat-fab.mat-warn.mat-button-disabled,.mat-flat-button.mat-accent.mat-button-disabled,.mat-flat-button.mat-button-disabled.mat-button-disabled,.mat-flat-button.mat-primary.mat-button-disabled,.mat-flat-button.mat-warn.mat-button-disabled,.mat-mini-fab.mat-accent.mat-button-disabled,.mat-mini-fab.mat-button-disabled.mat-button-disabled,.mat-mini-fab.mat-primary.mat-button-disabled,.mat-mini-fab.mat-warn.mat-button-disabled,.mat-raised-button.mat-accent.mat-button-disabled,.mat-raised-button.mat-button-disabled.mat-button-disabled,.mat-raised-button.mat-primary.mat-button-disabled,.mat-raised-button.mat-warn.mat-button-disabled{background-color:rgba(0,0,0,.12)}.mat-fab.mat-accent .mat-ripple-element,.mat-fab.mat-primary .mat-ripple-element,.mat-fab.mat-warn .mat-ripple-element,.mat-flat-button.mat-accent .mat-ripple-element,.mat-flat-button.mat-primary .mat-ripple-element,.mat-flat-button.mat-warn .mat-ripple-element,.mat-mini-fab.mat-accent .mat-ripple-element,.mat-mini-fab.mat-primary .mat-ripple-element,.mat-mini-fab.mat-warn .mat-ripple-element,.mat-raised-button.mat-accent .mat-ripple-element,.mat-raised-button.mat-primary .mat-ripple-element,.mat-raised-button.mat-warn .mat-ripple-element{background-color:hsla(0,0%,100%,.1)}.mat-flat-button:not([class*=mat-elevation-z]),.mat-stroked-button:not([class*=mat-elevation-z]){box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.mat-raised-button:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.mat-raised-button:not(.mat-button-disabled):active:not([class*=mat-elevation-z]){box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.mat-raised-button.mat-button-disabled:not([class*=mat-elevation-z]){box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.mat-fab:not([class*=mat-elevation-z]),.mat-mini-fab:not([class*=mat-elevation-z]){box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.mat-fab:not(.mat-button-disabled):active:not([class*=mat-elevation-z]),.mat-mini-fab:not(.mat-button-disabled):active:not([class*=mat-elevation-z]){box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.mat-fab.mat-button-disabled:not([class*=mat-elevation-z]),.mat-mini-fab.mat-button-disabled:not([class*=mat-elevation-z]){box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.mat-button-toggle-group,.mat-button-toggle-standalone{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.mat-button-toggle-group-appearance-standard,.mat-button-toggle-standalone.mat-button-toggle-appearance-standard{box-shadow:none}.mat-button-toggle{color:rgba(0,0,0,.38)}.mat-button-toggle .mat-button-toggle-focus-overlay{background-color:rgba(0,0,0,.12)}.mat-button-toggle-appearance-standard{color:rgba(0,0,0,.87);background:#fff}.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{background-color:#000}.mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:1px solid rgba(0,0,0,.12)}[dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:none;border-right:1px solid rgba(0,0,0,.12)}.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle+.mat-button-toggle{border-left:none;border-right:none;border-top:1px solid rgba(0,0,0,.12)}.mat-button-toggle-checked{background-color:#e0e0e0;color:rgba(0,0,0,.54)}.mat-button-toggle-checked.mat-button-toggle-appearance-standard{color:rgba(0,0,0,.87)}.mat-button-toggle-disabled{color:rgba(0,0,0,.26);background-color:#eee}.mat-button-toggle-disabled.mat-button-toggle-appearance-standard{background:#fff}.mat-button-toggle-disabled.mat-button-toggle-checked{background-color:#bdbdbd}.mat-button-toggle-group-appearance-standard,.mat-button-toggle-standalone.mat-button-toggle-appearance-standard{border:1px solid rgba(0,0,0,.12)}.mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:48px}.mat-card{background:#fff;color:rgba(0,0,0,.87)}.mat-card:not([class*=mat-elevation-z]){box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12)}.mat-card.mat-card-flat:not([class*=mat-elevation-z]){box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.mat-card-subtitle{color:rgba(0,0,0,.54)}.mat-checkbox-frame{border-color:rgba(0,0,0,.54)}.mat-checkbox-checkmark{fill:#fafafa}.mat-checkbox-checkmark-path{stroke:#fafafa!important}.mat-checkbox-mixedmark{background-color:#fafafa}.mat-checkbox-checked.mat-primary .mat-checkbox-background,.mat-checkbox-indeterminate.mat-primary .mat-checkbox-background{background-color:#3f51b5}.mat-checkbox-checked.mat-accent .mat-checkbox-background,.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background{background-color:#ff4081}.mat-checkbox-checked.mat-warn .mat-checkbox-background,.mat-checkbox-indeterminate.mat-warn .mat-checkbox-background{background-color:#f44336}.mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background,.mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background{background-color:#b0b0b0}.mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame{border-color:#b0b0b0}.mat-checkbox-disabled .mat-checkbox-label{color:rgba(0,0,0,.54)}.mat-checkbox .mat-ripple-element{background-color:#000}.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element{background:#3f51b5}.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element{background:#ff4081}.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element{background:#f44336}.mat-chip.mat-standard-chip{background-color:#e0e0e0;color:rgba(0,0,0,.87)}.mat-chip.mat-standard-chip .mat-chip-remove{color:rgba(0,0,0,.87);opacity:.4}.mat-chip.mat-standard-chip:not(.mat-chip-disabled):active{box-shadow:0 3px 3px -2px rgba(0,0,0,.2),0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12)}.mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover{opacity:.54}.mat-chip.mat-standard-chip.mat-chip-disabled{opacity:.4}.mat-chip.mat-standard-chip:after{background:#000}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary{background-color:#3f51b5;color:#fff}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove{color:#fff;opacity:.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element{background-color:hsla(0,0%,100%,.1)}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn{background-color:#f44336;color:#fff}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove{color:#fff;opacity:.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element{background-color:hsla(0,0%,100%,.1)}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent{background-color:#ff4081;color:#fff}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove{color:#fff;opacity:.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element{background-color:hsla(0,0%,100%,.1)}.mat-table{background:#fff}.mat-table-sticky,.mat-table tbody,.mat-table tfoot,.mat-table thead,[mat-footer-row],[mat-header-row],[mat-row],mat-footer-row,mat-header-row,mat-row{background:inherit}mat-footer-row,mat-header-row,mat-row,td.mat-cell,td.mat-footer-cell,th.mat-header-cell{border-bottom-color:rgba(0,0,0,.12)}.mat-header-cell{color:rgba(0,0,0,.54)}.mat-cell,.mat-footer-cell{color:rgba(0,0,0,.87)}.mat-calendar-arrow{border-top-color:rgba(0,0,0,.54)}.mat-datepicker-content .mat-calendar-next-button,.mat-datepicker-content .mat-calendar-previous-button,.mat-datepicker-toggle{color:rgba(0,0,0,.54)}.mat-calendar-table-header{color:rgba(0,0,0,.38)}.mat-calendar-table-header-divider:after{background:rgba(0,0,0,.12)}.mat-calendar-body-label{color:rgba(0,0,0,.54)}.mat-calendar-body-cell-content,.mat-date-range-input-separator{color:rgba(0,0,0,.87);border-color:transparent}.mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-form-field-disabled .mat-date-range-input-separator{color:rgba(0,0,0,.38)}.mat-calendar-body-in-preview{color:rgba(0,0,0,.24)}.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:rgba(0,0,0,.38)}.mat-calendar-body-disabled>.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:rgba(0,0,0,.18)}.mat-calendar-body-in-range:before{background:rgba(63,81,181,.2)}.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range:before{background:rgba(249,171,0,.2)}.mat-calendar-body-comparison-bridge-start:before,[dir=rtl] .mat-calendar-body-comparison-bridge-end:before{background:linear-gradient(90deg,rgba(63,81,181,.2) 50%,rgba(249,171,0,.2) 0)}.mat-calendar-body-comparison-bridge-end:before,[dir=rtl] .mat-calendar-body-comparison-bridge-start:before{background:linear-gradient(270deg,rgba(63,81,181,.2) 50%,rgba(249,171,0,.2) 0)}.mat-calendar-body-in-comparison-range.mat-calendar-body-in-range:after,.mat-calendar-body-in-range>.mat-calendar-body-comparison-identical{background:#a8dab5}.mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e}.mat-calendar-body-selected{background-color:#3f51b5;color:#fff}.mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(63,81,181,.4)}.mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:rgba(63,81,181,.3)}.mat-datepicker-content{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);background-color:#fff;color:rgba(0,0,0,.87)}.mat-datepicker-content.mat-accent .mat-calendar-body-in-range:before{background:rgba(255,64,129,.2)}.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-identical,.mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range:before{background:rgba(249,171,0,.2)}.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-bridge-start:before,.mat-datepicker-content.mat-accent [dir=rtl] .mat-calendar-body-comparison-bridge-end:before{background:linear-gradient(90deg,rgba(255,64,129,.2) 50%,rgba(249,171,0,.2) 0)}.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-bridge-end:before,.mat-datepicker-content.mat-accent [dir=rtl] .mat-calendar-body-comparison-bridge-start:before{background:linear-gradient(270deg,rgba(255,64,129,.2) 50%,rgba(249,171,0,.2) 0)}.mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range.mat-calendar-body-in-range:after,.mat-datepicker-content.mat-accent .mat-calendar-body-in-range>.mat-calendar-body-comparison-identical{background:#a8dab5}.mat-datepicker-content.mat-accent .mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e}.mat-datepicker-content.mat-accent .mat-calendar-body-selected{background-color:#ff4081;color:#fff}.mat-datepicker-content.mat-accent .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(255,64,129,.4)}.mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.mat-datepicker-content.mat-accent .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-accent .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-accent .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:rgba(255,64,129,.3)}.mat-datepicker-content.mat-warn .mat-calendar-body-in-range:before{background:rgba(244,67,54,.2)}.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-identical,.mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range:before{background:rgba(249,171,0,.2)}.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-bridge-start:before,.mat-datepicker-content.mat-warn [dir=rtl] .mat-calendar-body-comparison-bridge-end:before{background:linear-gradient(90deg,rgba(244,67,54,.2) 50%,rgba(249,171,0,.2) 0)}.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-bridge-end:before,.mat-datepicker-content.mat-warn [dir=rtl] .mat-calendar-body-comparison-bridge-start:before{background:linear-gradient(270deg,rgba(244,67,54,.2) 50%,rgba(249,171,0,.2) 0)}.mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range.mat-calendar-body-in-range:after,.mat-datepicker-content.mat-warn .mat-calendar-body-in-range>.mat-calendar-body-comparison-identical{background:#a8dab5}.mat-datepicker-content.mat-warn .mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e}.mat-datepicker-content.mat-warn .mat-calendar-body-selected{background-color:#f44336;color:#fff}.mat-datepicker-content.mat-warn .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(244,67,54,.4)}.mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.mat-datepicker-content.mat-warn .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-warn .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.mat-datepicker-content.mat-warn .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:rgba(244,67,54,.3)}.mat-datepicker-content-touch{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.mat-datepicker-toggle-active{color:#3f51b5}.mat-datepicker-toggle-active.mat-accent{color:#ff4081}.mat-datepicker-toggle-active.mat-warn{color:#f44336}.mat-date-range-input-inner[disabled]{color:rgba(0,0,0,.38)}.mat-dialog-container{box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12);background:#fff;color:rgba(0,0,0,.87)}.mat-divider{border-top-color:rgba(0,0,0,.12)}.mat-divider-vertical{border-right-color:rgba(0,0,0,.12)}.mat-expansion-panel{background:#fff;color:rgba(0,0,0,.87)}.mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.mat-action-row{border-top-color:rgba(0,0,0,.12)}.mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true]),.mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true]),.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true]){background:rgba(0,0,0,.04)}@media(hover:none){.mat-expansion-panel:not(.mat-expanded):not([aria-disabled=true]) .mat-expansion-panel-header:hover{background:#fff}}.mat-expansion-panel-header-title{color:rgba(0,0,0,.87)}.mat-expansion-indicator:after,.mat-expansion-panel-header-description{color:rgba(0,0,0,.54)}.mat-expansion-panel-header[aria-disabled=true]{color:rgba(0,0,0,.26)}.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description,.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title{color:inherit}.mat-expansion-panel-header{height:48px}.mat-expansion-panel-header.mat-expanded{height:64px}.mat-form-field-label,.mat-hint{color:rgba(0,0,0,.6)}.mat-form-field.mat-focused .mat-form-field-label{color:#3f51b5}.mat-form-field.mat-focused .mat-form-field-label.mat-accent{color:#ff4081}.mat-form-field.mat-focused .mat-form-field-label.mat-warn{color:#f44336}.mat-focused .mat-form-field-required-marker{color:#ff4081}.mat-form-field-ripple{background-color:rgba(0,0,0,.87)}.mat-form-field.mat-focused .mat-form-field-ripple{background-color:#3f51b5}.mat-form-field.mat-focused .mat-form-field-ripple.mat-accent{background-color:#ff4081}.mat-form-field.mat-focused .mat-form-field-ripple.mat-warn{background-color:#f44336}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix:after{color:#3f51b5}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix:after{color:#ff4081}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix:after,.mat-form-field.mat-form-field-invalid .mat-form-field-label,.mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent,.mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker{color:#f44336}.mat-form-field.mat-form-field-invalid .mat-form-field-ripple,.mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent{background-color:#f44336}.mat-error{color:#f44336}.mat-form-field-appearance-legacy .mat-form-field-label,.mat-form-field-appearance-legacy .mat-hint{color:rgba(0,0,0,.54)}.mat-form-field-appearance-legacy .mat-form-field-underline{background-color:rgba(0,0,0,.42)}.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(90deg,rgba(0,0,0,.42) 0,rgba(0,0,0,.42) 33%,transparent 0);background-size:4px 100%;background-repeat:repeat-x}.mat-form-field-appearance-standard .mat-form-field-underline{background-color:rgba(0,0,0,.42)}.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(90deg,rgba(0,0,0,.42) 0,rgba(0,0,0,.42) 33%,transparent 0);background-size:4px 100%;background-repeat:repeat-x}.mat-form-field-appearance-fill .mat-form-field-flex{background-color:rgba(0,0,0,.04)}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex{background-color:rgba(0,0,0,.02)}.mat-form-field-appearance-fill .mat-form-field-underline:before{background-color:rgba(0,0,0,.42)}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label{color:rgba(0,0,0,.38)}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline:before{background-color:initial}.mat-form-field-appearance-outline .mat-form-field-outline{color:rgba(0,0,0,.12)}.mat-form-field-appearance-outline .mat-form-field-outline-thick{color:rgba(0,0,0,.87)}.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:#3f51b5}.mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick{color:#ff4081}.mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick,.mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick{color:#f44336}.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label{color:rgba(0,0,0,.38)}.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{color:rgba(0,0,0,.06)}.mat-icon.mat-primary{color:#3f51b5}.mat-icon.mat-accent{color:#ff4081}.mat-icon.mat-warn{color:#f44336}.mat-form-field-type-mat-native-select .mat-form-field-infix:after{color:rgba(0,0,0,.54)}.mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix:after,.mat-input-element:disabled{color:rgba(0,0,0,.38)}.mat-input-element{caret-color:#3f51b5}.mat-input-element::placeholder{color:rgba(0,0,0,.42)}.mat-input-element::-moz-placeholder{color:rgba(0,0,0,.42)}.mat-input-element::-webkit-input-placeholder{color:rgba(0,0,0,.42)}.mat-input-element:-ms-input-placeholder{color:rgba(0,0,0,.42)}.mat-form-field.mat-accent .mat-input-element{caret-color:#ff4081}.mat-form-field-invalid .mat-input-element,.mat-form-field.mat-warn .mat-input-element{caret-color:#f44336}.mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix:after{color:#f44336}.mat-list-base .mat-list-item,.mat-list-base .mat-list-option{color:rgba(0,0,0,.87)}.mat-list-base .mat-subheader{color:rgba(0,0,0,.54)}.mat-list-item-disabled{background-color:#eee}.mat-action-list .mat-list-item:focus,.mat-action-list .mat-list-item:hover,.mat-list-option:focus,.mat-list-option:hover,.mat-nav-list .mat-list-item:focus,.mat-nav-list .mat-list-item:hover{background:rgba(0,0,0,.04)}.mat-list-single-selected-option,.mat-list-single-selected-option:focus,.mat-list-single-selected-option:hover{background:rgba(0,0,0,.12)}.mat-menu-panel{background:#fff}.mat-menu-panel:not([class*=mat-elevation-z]){box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.mat-menu-item{background:transparent;color:rgba(0,0,0,.87)}.mat-menu-item[disabled],.mat-menu-item[disabled] .mat-icon-no-color,.mat-menu-item[disabled]:after{color:rgba(0,0,0,.38)}.mat-menu-item-submenu-trigger:after,.mat-menu-item .mat-icon-no-color{color:rgba(0,0,0,.54)}.mat-menu-item-highlighted:not([disabled]),.mat-menu-item.cdk-keyboard-focused:not([disabled]),.mat-menu-item.cdk-program-focused:not([disabled]),.mat-menu-item:hover:not([disabled]){background:rgba(0,0,0,.04)}.mat-paginator{background:#fff}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{color:rgba(0,0,0,.54)}.mat-paginator-decrement,.mat-paginator-increment{border-top:2px solid rgba(0,0,0,.54);border-right:2px solid rgba(0,0,0,.54)}.mat-paginator-first,.mat-paginator-last{border-top:2px solid rgba(0,0,0,.54)}.mat-icon-button[disabled] .mat-paginator-decrement,.mat-icon-button[disabled] .mat-paginator-first,.mat-icon-button[disabled] .mat-paginator-increment,.mat-icon-button[disabled] .mat-paginator-last{border-color:rgba(0,0,0,.38)}.mat-paginator-container{min-height:56px}.mat-progress-bar-background{fill:#c5cae9}.mat-progress-bar-buffer{background-color:#c5cae9}.mat-progress-bar-fill:after{background-color:#3f51b5}.mat-progress-bar.mat-accent .mat-progress-bar-background{fill:#ff80ab}.mat-progress-bar.mat-accent .mat-progress-bar-buffer{background-color:#ff80ab}.mat-progress-bar.mat-accent .mat-progress-bar-fill:after{background-color:#ff4081}.mat-progress-bar.mat-warn .mat-progress-bar-background{fill:#ffcdd2}.mat-progress-bar.mat-warn .mat-progress-bar-buffer{background-color:#ffcdd2}.mat-progress-bar.mat-warn .mat-progress-bar-fill:after{background-color:#f44336}.mat-progress-spinner circle,.mat-spinner circle{stroke:#3f51b5}.mat-progress-spinner.mat-accent circle,.mat-spinner.mat-accent circle{stroke:#ff4081}.mat-progress-spinner.mat-warn circle,.mat-spinner.mat-warn circle{stroke:#f44336}.mat-radio-outer-circle{border-color:rgba(0,0,0,.54)}.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle{border-color:#3f51b5}.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-primary .mat-radio-inner-circle,.mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-primary:active .mat-radio-persistent-ripple{background-color:#3f51b5}.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff4081}.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-accent .mat-radio-inner-circle,.mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-accent:active .mat-radio-persistent-ripple{background-color:#ff4081}.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle{border-color:#f44336}.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-warn .mat-radio-inner-circle,.mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-warn:active .mat-radio-persistent-ripple{background-color:#f44336}.mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle,.mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:rgba(0,0,0,.38)}.mat-radio-button.mat-radio-disabled .mat-radio-inner-circle,.mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element{background-color:rgba(0,0,0,.38)}.mat-radio-button.mat-radio-disabled .mat-radio-label-content{color:rgba(0,0,0,.38)}.mat-radio-button .mat-ripple-element{background-color:#000}.mat-select-value{color:rgba(0,0,0,.87)}.mat-select-placeholder{color:rgba(0,0,0,.42)}.mat-select-disabled .mat-select-value{color:rgba(0,0,0,.38)}.mat-select-arrow{color:rgba(0,0,0,.54)}.mat-select-panel{background:#fff}.mat-select-panel:not([class*=mat-elevation-z]){box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple){background:rgba(0,0,0,.12)}.mat-form-field.mat-focused.mat-primary .mat-select-arrow{color:#3f51b5}.mat-form-field.mat-focused.mat-accent .mat-select-arrow{color:#ff4081}.mat-form-field.mat-focused.mat-warn .mat-select-arrow,.mat-form-field .mat-select.mat-select-invalid .mat-select-arrow{color:#f44336}.mat-form-field .mat-select.mat-select-disabled .mat-select-arrow{color:rgba(0,0,0,.38)}.mat-drawer-container{background-color:#fafafa;color:rgba(0,0,0,.87)}.mat-drawer{color:rgba(0,0,0,.87)}.mat-drawer,.mat-drawer.mat-drawer-push{background-color:#fff}.mat-drawer:not(.mat-drawer-side){box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.mat-drawer-side{border-right:1px solid rgba(0,0,0,.12)}.mat-drawer-side.mat-drawer-end,[dir=rtl] .mat-drawer-side{border-left:1px solid rgba(0,0,0,.12);border-right:none}[dir=rtl] .mat-drawer-side.mat-drawer-end{border-left:none;border-right:1px solid rgba(0,0,0,.12)}.mat-drawer-backdrop.mat-drawer-shown{background-color:rgba(0,0,0,.6)}.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb{background-color:#ff4081}.mat-slide-toggle.mat-checked .mat-slide-toggle-bar{background-color:rgba(255,64,129,.54)}.mat-slide-toggle.mat-checked .mat-ripple-element{background-color:#ff4081}.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb{background-color:#3f51b5}.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar{background-color:rgba(63,81,181,.54)}.mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element{background-color:#3f51b5}.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb{background-color:#f44336}.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar{background-color:rgba(244,67,54,.54)}.mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element{background-color:#f44336}.mat-slide-toggle:not(.mat-checked) .mat-ripple-element{background-color:#000}.mat-slide-toggle-thumb{box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12);background-color:#fafafa}.mat-slide-toggle-bar{background-color:rgba(0,0,0,.38)}.mat-slider-track-background{background-color:rgba(0,0,0,.26)}.mat-primary .mat-slider-thumb,.mat-primary .mat-slider-thumb-label,.mat-primary .mat-slider-track-fill{background-color:#3f51b5}.mat-primary .mat-slider-thumb-label-text{color:#fff}.mat-primary .mat-slider-focus-ring{background-color:rgba(63,81,181,.2)}.mat-accent .mat-slider-thumb,.mat-accent .mat-slider-thumb-label,.mat-accent .mat-slider-track-fill{background-color:#ff4081}.mat-accent .mat-slider-thumb-label-text{color:#fff}.mat-accent .mat-slider-focus-ring{background-color:rgba(255,64,129,.2)}.mat-warn .mat-slider-thumb,.mat-warn .mat-slider-thumb-label,.mat-warn .mat-slider-track-fill{background-color:#f44336}.mat-warn .mat-slider-thumb-label-text{color:#fff}.mat-warn .mat-slider-focus-ring{background-color:rgba(244,67,54,.2)}.cdk-focused .mat-slider-track-background,.mat-slider:hover .mat-slider-track-background{background-color:rgba(0,0,0,.38)}.mat-slider-disabled .mat-slider-thumb,.mat-slider-disabled .mat-slider-track-background,.mat-slider-disabled .mat-slider-track-fill,.mat-slider-disabled:hover .mat-slider-track-background{background-color:rgba(0,0,0,.26)}.mat-slider-min-value .mat-slider-focus-ring{background-color:rgba(0,0,0,.12)}.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label{background-color:rgba(0,0,0,.87)}.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label{background-color:rgba(0,0,0,.26)}.mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb{border-color:rgba(0,0,0,.26);background-color:initial}.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb{border-color:rgba(0,0,0,.38)}.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb{border-color:rgba(0,0,0,.26)}.mat-slider-has-ticks .mat-slider-wrapper:after{border-color:rgba(0,0,0,.7)}.mat-slider-horizontal .mat-slider-ticks{background-image:repeating-linear-gradient(90deg,rgba(0,0,0,.7),rgba(0,0,0,.7) 2px,transparent 0,transparent);background-image:-moz-repeating-linear-gradient(.0001deg,rgba(0,0,0,.7),rgba(0,0,0,.7) 2px,transparent 0,transparent)}.mat-slider-vertical .mat-slider-ticks{background-image:repeating-linear-gradient(180deg,rgba(0,0,0,.7),rgba(0,0,0,.7) 2px,transparent 0,transparent)}.mat-step-header.cdk-keyboard-focused,.mat-step-header.cdk-program-focused,.mat-step-header:hover{background-color:rgba(0,0,0,.04)}@media(hover:none){.mat-step-header:hover{background:none}}.mat-step-header .mat-step-label,.mat-step-header .mat-step-optional{color:rgba(0,0,0,.54)}.mat-step-header .mat-step-icon{background-color:rgba(0,0,0,.54);color:#fff}.mat-step-header .mat-step-icon-selected,.mat-step-header .mat-step-icon-state-done,.mat-step-header .mat-step-icon-state-edit{background-color:#3f51b5;color:#fff}.mat-step-header.mat-accent .mat-step-icon{color:#fff}.mat-step-header.mat-accent .mat-step-icon-selected,.mat-step-header.mat-accent .mat-step-icon-state-done,.mat-step-header.mat-accent .mat-step-icon-state-edit{background-color:#ff4081;color:#fff}.mat-step-header.mat-warn .mat-step-icon{color:#fff}.mat-step-header.mat-warn .mat-step-icon-selected,.mat-step-header.mat-warn .mat-step-icon-state-done,.mat-step-header.mat-warn .mat-step-icon-state-edit{background-color:#f44336;color:#fff}.mat-step-header .mat-step-icon-state-error{background-color:initial;color:#f44336}.mat-step-header .mat-step-label.mat-step-label-active{color:rgba(0,0,0,.87)}.mat-step-header .mat-step-label.mat-step-label-error{color:#f44336}.mat-stepper-horizontal,.mat-stepper-vertical{background-color:#fff}.mat-stepper-vertical-line:before{border-left-color:rgba(0,0,0,.12)}.mat-horizontal-stepper-header:after,.mat-horizontal-stepper-header:before,.mat-stepper-horizontal-line{border-top-color:rgba(0,0,0,.12)}.mat-horizontal-stepper-header{height:72px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header,.mat-vertical-stepper-header{padding:24px}.mat-stepper-vertical-line:before{top:-16px;bottom:-16px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:after,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:before,.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{top:36px}.mat-sort-header-arrow{color:#757575}.mat-tab-header,.mat-tab-nav-bar{border-bottom:1px solid rgba(0,0,0,.12)}.mat-tab-group-inverted-header .mat-tab-header,.mat-tab-group-inverted-header .mat-tab-nav-bar{border-top:1px solid rgba(0,0,0,.12);border-bottom:none}.mat-tab-label,.mat-tab-link{color:rgba(0,0,0,.87)}.mat-tab-label.mat-tab-disabled,.mat-tab-link.mat-tab-disabled{color:rgba(0,0,0,.38)}.mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.87)}.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.38)}.mat-tab-group[class*=mat-background-] .mat-tab-header,.mat-tab-nav-bar[class*=mat-background-]{border-bottom:none;border-top:none}.mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(197,202,233,.3)}.mat-tab-group.mat-primary .mat-ink-bar,.mat-tab-nav-bar.mat-primary .mat-ink-bar{background-color:#3f51b5}.mat-tab-group.mat-primary.mat-background-primary>.mat-tab-header .mat-ink-bar,.mat-tab-group.mat-primary.mat-background-primary>.mat-tab-link-container .mat-ink-bar,.mat-tab-nav-bar.mat-primary.mat-background-primary>.mat-tab-header .mat-ink-bar,.mat-tab-nav-bar.mat-primary.mat-background-primary>.mat-tab-link-container .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,128,171,.3)}.mat-tab-group.mat-accent .mat-ink-bar,.mat-tab-nav-bar.mat-accent .mat-ink-bar{background-color:#ff4081}.mat-tab-group.mat-accent.mat-background-accent>.mat-tab-header .mat-ink-bar,.mat-tab-group.mat-accent.mat-background-accent>.mat-tab-link-container .mat-ink-bar,.mat-tab-nav-bar.mat-accent.mat-background-accent>.mat-tab-header .mat-ink-bar,.mat-tab-nav-bar.mat-accent.mat-background-accent>.mat-tab-link-container .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,205,210,.3)}.mat-tab-group.mat-warn .mat-ink-bar,.mat-tab-nav-bar.mat-warn .mat-ink-bar{background-color:#f44336}.mat-tab-group.mat-warn.mat-background-warn>.mat-tab-header .mat-ink-bar,.mat-tab-group.mat-warn.mat-background-warn>.mat-tab-link-container .mat-ink-bar,.mat-tab-nav-bar.mat-warn.mat-background-warn>.mat-tab-header .mat-ink-bar,.mat-tab-nav-bar.mat-warn.mat-background-warn>.mat-tab-link-container .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(197,202,233,.3)}.mat-tab-group.mat-background-primary>.mat-tab-header,.mat-tab-group.mat-background-primary>.mat-tab-header-pagination,.mat-tab-group.mat-background-primary>.mat-tab-link-container,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container{background-color:#3f51b5}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-label,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-tab-link,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-label,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-tab-link{color:#fff}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:hsla(0,0%,100%,.4)}.mat-tab-group.mat-background-primary>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination .mat-tab-header-pagination-chevron{border-color:#fff}.mat-tab-group.mat-background-primary>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:hsla(0,0%,100%,.4)}.mat-tab-group.mat-background-primary>.mat-tab-header .mat-ripple-element,.mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-ripple-element{background-color:hsla(0,0%,100%,.12)}.mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,128,171,.3)}.mat-tab-group.mat-background-accent>.mat-tab-header,.mat-tab-group.mat-background-accent>.mat-tab-header-pagination,.mat-tab-group.mat-background-accent>.mat-tab-link-container,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container{background-color:#ff4081}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-label,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-tab-link,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-label,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-tab-link{color:#fff}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:hsla(0,0%,100%,.4)}.mat-tab-group.mat-background-accent>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination .mat-tab-header-pagination-chevron{border-color:#fff}.mat-tab-group.mat-background-accent>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:hsla(0,0%,100%,.4)}.mat-tab-group.mat-background-accent>.mat-tab-header .mat-ripple-element,.mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-ripple-element{background-color:hsla(0,0%,100%,.12)}.mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,205,210,.3)}.mat-tab-group.mat-background-warn>.mat-tab-header,.mat-tab-group.mat-background-warn>.mat-tab-header-pagination,.mat-tab-group.mat-background-warn>.mat-tab-link-container,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container{background-color:#f44336}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-label,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-tab-link,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-label,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-tab-link{color:#fff}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:hsla(0,0%,100%,.4)}.mat-tab-group.mat-background-warn>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination .mat-tab-header-pagination-chevron{border-color:#fff}.mat-tab-group.mat-background-warn>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:hsla(0,0%,100%,.4)}.mat-tab-group.mat-background-warn>.mat-tab-header .mat-ripple-element,.mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-ripple-element{background-color:hsla(0,0%,100%,.12)}.mat-toolbar{background:#f5f5f5;color:rgba(0,0,0,.87)}.mat-toolbar.mat-primary{background:#3f51b5;color:#fff}.mat-toolbar.mat-accent{background:#ff4081;color:#fff}.mat-toolbar.mat-warn{background:#f44336;color:#fff}.mat-toolbar .mat-focused .mat-form-field-ripple,.mat-toolbar .mat-form-field-ripple,.mat-toolbar .mat-form-field-underline{background-color:currentColor}.mat-toolbar .mat-focused .mat-form-field-label,.mat-toolbar .mat-form-field-label,.mat-toolbar .mat-form-field.mat-focused .mat-select-arrow,.mat-toolbar .mat-select-arrow,.mat-toolbar .mat-select-value{color:inherit}.mat-toolbar .mat-input-element{caret-color:currentColor}.mat-toolbar-multiple-rows{min-height:64px}.mat-toolbar-row,.mat-toolbar-single-row{height:64px}@media(max-width:599px){.mat-toolbar-multiple-rows{min-height:56px}.mat-toolbar-row,.mat-toolbar-single-row{height:56px}}.mat-tooltip{background:rgba(97,97,97,.9)}.mat-tree{background:#fff}.mat-nested-tree-node,.mat-tree-node{color:rgba(0,0,0,.87)}.mat-tree-node{min-height:48px}.mat-snack-bar-container{color:hsla(0,0%,100%,.7);background:#323232;box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.mat-simple-snackbar-action{color:#ff4081}\n/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */.jsoneditor-modal input,.jsoneditor-modal input:not([type]),.jsoneditor-modal input[type=search],.jsoneditor-modal input[type=text],.jsoneditor input,.jsoneditor input:not([type]),.jsoneditor input[type=search],.jsoneditor input[type=text]{height:auto;border:inherit;box-shadow:none;font-size:inherit;box-sizing:inherit;padding:inherit;font-family:inherit;transition:none;line-height:inherit}.jsoneditor-modal input:focus,.jsoneditor-modal input:not([type]):focus,.jsoneditor-modal input[type=search]:focus,.jsoneditor-modal input[type=text]:focus,.jsoneditor input:focus,.jsoneditor input:not([type]):focus,.jsoneditor input[type=search]:focus,.jsoneditor input[type=text]:focus{border:inherit;box-shadow:inherit}.jsoneditor-modal textarea,.jsoneditor textarea{height:inherit}.jsoneditor-modal select,.jsoneditor select{display:inherit;height:inherit}.jsoneditor-modal label,.jsoneditor label{font-size:inherit;font-weight:inherit;color:inherit}.jsoneditor-modal table,.jsoneditor table{border-collapse:collapse;width:auto}.jsoneditor-modal td,.jsoneditor-modal th,.jsoneditor td,.jsoneditor th{padding:0;display:table-cell;text-align:left;vertical-align:inherit;border-radius:inherit}.jsoneditor .autocomplete.dropdown{position:absolute;background:#fff;box-shadow:2px 2px 12px hsla(0,0%,50.2%,.3);border:1px solid #d3d3d3;overflow-x:hidden;overflow-y:auto;cursor:default;margin:0;padding:5px;text-align:left;outline:0;font-family:dejavu sans mono,droid sans mono,consolas,monaco,lucida console,courier new,courier,monospace,sans-serif;font-size:10pt}.jsoneditor .autocomplete.dropdown .item{color:#333}.jsoneditor .autocomplete.dropdown .item.hover{background-color:#ddd}.jsoneditor .autocomplete.hint{color:#aaa;top:4px;left:4px}.jsoneditor-contextmenu-root{position:relative;width:0;height:0}.jsoneditor-contextmenu{position:absolute;box-sizing:initial;z-index:2}.jsoneditor-contextmenu .jsoneditor-menu{position:relative;left:0;top:0;width:128px;height:auto;background:#fff;border:1px solid #d3d3d3;box-shadow:2px 2px 12px hsla(0,0%,50.2%,.3);list-style:none;margin:0;padding:0}.jsoneditor-contextmenu .jsoneditor-menu button{position:relative;padding:0 8px 0 0;margin:0;width:128px;height:auto;border:none;cursor:pointer;color:#4d4d4d;background:transparent;font-size:10pt;font-family:arial,sans-serif;box-sizing:border-box;text-align:left}.jsoneditor-contextmenu .jsoneditor-menu button::-moz-focus-inner{padding:0;border:0}.jsoneditor-contextmenu .jsoneditor-menu button.jsoneditor-default{width:96px}.jsoneditor-contextmenu .jsoneditor-menu button.jsoneditor-expand{float:right;width:32px;height:24px;border-left:1px solid #e5e5e5}.jsoneditor-contextmenu .jsoneditor-menu li{overflow:hidden}.jsoneditor-contextmenu .jsoneditor-menu li ul{display:none;position:relative;left:-10px;top:0;border:none;box-shadow:inset 0 0 10px hsla(0,0%,50.2%,.5);padding:0 10px;transition:all .3s ease-out}.jsoneditor-contextmenu .jsoneditor-menu li ul .jsoneditor-icon{margin-left:24px}.jsoneditor-contextmenu .jsoneditor-menu li ul li button{padding-left:24px;animation:all 1s ease-in-out}.jsoneditor-contextmenu .jsoneditor-menu li button .jsoneditor-expand{position:absolute;top:0;right:0;width:24px;height:24px;padding:0;margin:0 4px 0 0;background:url(jsoneditor-icons.15f2789dd231f36d43a4.svg) 0 -72px}.jsoneditor-contextmenu .jsoneditor-icon{position:absolute;top:0;left:0;width:24px;height:24px;border:none;padding:0;margin:0;background-image:url(jsoneditor-icons.15f2789dd231f36d43a4.svg)}.jsoneditor-contextmenu .jsoneditor-text{padding:4px 0 4px 24px;word-wrap:break-word}.jsoneditor-contextmenu .jsoneditor-text.jsoneditor-right-margin{padding-right:24px}.jsoneditor-contextmenu .jsoneditor-separator{height:0;border-top:1px solid #e5e5e5;padding-top:5px;margin-top:5px}.jsoneditor-contextmenu button.jsoneditor-remove .jsoneditor-icon{background-position:-24px 0}.jsoneditor-contextmenu button.jsoneditor-append .jsoneditor-icon,.jsoneditor-contextmenu button.jsoneditor-insert .jsoneditor-icon{background-position:0 0}.jsoneditor-contextmenu button.jsoneditor-duplicate .jsoneditor-icon{background-position:-48px 0}.jsoneditor-contextmenu button.jsoneditor-sort-asc .jsoneditor-icon{background-position:-168px 0}.jsoneditor-contextmenu button.jsoneditor-sort-desc .jsoneditor-icon{background-position:-192px 0}.jsoneditor-contextmenu button.jsoneditor-transform .jsoneditor-icon{background-position:-216px 0}.jsoneditor-contextmenu button.jsoneditor-extract .jsoneditor-icon{background-position:0 -24px}.jsoneditor-contextmenu button.jsoneditor-type-string .jsoneditor-icon{background-position:-144px 0}.jsoneditor-contextmenu button.jsoneditor-type-auto .jsoneditor-icon{background-position:-120px 0}.jsoneditor-contextmenu button.jsoneditor-type-object .jsoneditor-icon{background-position:-72px 0}.jsoneditor-contextmenu button.jsoneditor-type-array .jsoneditor-icon{background-position:-96px 0}.jsoneditor-contextmenu button.jsoneditor-type-modes .jsoneditor-icon{background-image:none;width:6px}.jsoneditor-contextmenu li,.jsoneditor-contextmenu ul{box-sizing:initial;position:relative}.jsoneditor-contextmenu .jsoneditor-menu button:focus,.jsoneditor-contextmenu .jsoneditor-menu button:hover{color:#1a1a1a;background-color:#f5f5f5;outline:none}.jsoneditor-contextmenu .jsoneditor-menu li button.jsoneditor-selected,.jsoneditor-contextmenu .jsoneditor-menu li button.jsoneditor-selected:focus,.jsoneditor-contextmenu .jsoneditor-menu li button.jsoneditor-selected:hover{color:#fff;background-color:#ee422e}.jsoneditor-contextmenu .jsoneditor-menu li ul li button:focus,.jsoneditor-contextmenu .jsoneditor-menu li ul li button:hover{background-color:#f5f5f5}.jsoneditor-modal{max-width:95%;border-radius:2px!important;padding:45px 15px 15px!important;box-shadow:2px 2px 12px hsla(0,0%,50.2%,.3);line-height:1.3em}.jsoneditor-modal.jsoneditor-modal-transform{width:600px!important}.jsoneditor-modal .pico-modal-header{position:absolute;box-sizing:border-box;top:0;left:0;width:100%;padding:0 10px;height:30px;line-height:30px;font-family:arial,sans-serif;font-size:11pt;background:#3883fa;color:#fff}.jsoneditor-modal table{width:100%}.jsoneditor-modal table td{padding:3px 0}.jsoneditor-modal table td.jsoneditor-modal-input{text-align:right;padding-right:0;white-space:nowrap}.jsoneditor-modal table td.jsoneditor-modal-actions{padding-top:15px}.jsoneditor-modal table th{vertical-align:middle}.jsoneditor-modal p:first-child{margin-top:0}.jsoneditor-modal a{color:#3883fa}.jsoneditor-modal .pico-close{background:none!important;font-size:24px!important;top:7px!important;right:7px!important;color:#fff}.jsoneditor-modal input{padding:4px}.jsoneditor-modal input[type=text]{cursor:inherit}.jsoneditor-modal input[disabled]{background:#d3d3d3;color:grey}.jsoneditor-modal .jsoneditor-select-wrapper{position:relative;display:inline-block}.jsoneditor-modal .jsoneditor-select-wrapper:after{content:\"\";width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:6px solid #666;position:absolute;right:8px;top:14px;pointer-events:none}.jsoneditor-modal select{padding:3px 24px 3px 10px;min-width:180px;max-width:350px;-webkit-appearance:none;-moz-appearance:none;appearance:none;text-indent:0;text-overflow:\"\";font-size:10pt;line-height:1.5em}.jsoneditor-modal select::-ms-expand{display:none}.jsoneditor-modal .jsoneditor-button-group input{padding:4px 10px;margin:0;border-radius:0;border-left-style:none}.jsoneditor-modal .jsoneditor-button-group input.jsoneditor-button-first{border-top-left-radius:3px;border-bottom-left-radius:3px;border-left-style:solid}.jsoneditor-modal .jsoneditor-button-group input.jsoneditor-button-last{border-top-right-radius:3px;border-bottom-right-radius:3px}.jsoneditor-modal .jsoneditor-transform-preview{background:#f5f5f5;height:200px}.jsoneditor-modal .jsoneditor-transform-preview.jsoneditor-error{color:#ee422e}.jsoneditor-modal .jsoneditor-jmespath-wizard{line-height:1.2em;width:100%;padding:0;border-radius:3px}.jsoneditor-modal .jsoneditor-jmespath-label{font-weight:700;color:#1e90ff;margin-top:20px;margin-bottom:5px}.jsoneditor-modal .jsoneditor-jmespath-wizard-table{width:100%;border-collapse:collapse}.jsoneditor-modal .jsoneditor-jmespath-wizard-label{font-style:italic;margin:4px 0 2px}.jsoneditor-modal .jsoneditor-inline{position:relative;display:inline-block;width:100%;padding-top:2px;padding-bottom:2px}.jsoneditor-modal .jsoneditor-inline:not(:last-child){padding-right:2px}.jsoneditor-modal .jsoneditor-jmespath-filter{display:flex;flex-wrap:wrap}.jsoneditor-modal .jsoneditor-jmespath-filter-field{width:180px}.jsoneditor-modal .jsoneditor-jmespath-filter-relation{width:100px}.jsoneditor-modal .jsoneditor-jmespath-filter-value{min-width:180px;flex:1}.jsoneditor-modal .jsoneditor-jmespath-sort-field{width:170px}.jsoneditor-modal .jsoneditor-jmespath-sort-order{width:150px}.jsoneditor-modal .jsoneditor-jmespath-select-fields{width:100%}.jsoneditor-modal .selectr-selected{border-color:#d3d3d3;padding:4px 28px 4px 8px}.jsoneditor-modal .selectr-selected .selectr-tag{background-color:#3883fa;border-radius:5px}.jsoneditor-modal table td,.jsoneditor-modal table th{text-align:left;font-weight:400;color:#4d4d4d;border-spacing:0;border-collapse:collapse}.jsoneditor-modal #query,.jsoneditor-modal input,.jsoneditor-modal input[type=text],.jsoneditor-modal input[type=text]:focus,.jsoneditor-modal select,.jsoneditor-modal textarea{background:#fff;border:1px solid #d3d3d3;color:#4d4d4d;border-radius:3px;padding:4px}.jsoneditor-modal,.jsoneditor-modal #query,.jsoneditor-modal input,.jsoneditor-modal input[type=text],.jsoneditor-modal option,.jsoneditor-modal select,.jsoneditor-modal table td,.jsoneditor-modal table th,.jsoneditor-modal textarea{font-size:10.5pt;font-family:arial,sans-serif}.jsoneditor-modal #query,.jsoneditor-modal .jsoneditor-transform-preview{font-family:dejavu sans mono,droid sans mono,consolas,monaco,lucida console,courier new,courier,monospace,sans-serif;font-size:10pt;width:100%;box-sizing:border-box}.jsoneditor-modal input[type=button],.jsoneditor-modal input[type=submit]{background:#f5f5f5;padding:4px 20px}.jsoneditor-modal input,.jsoneditor-modal select{cursor:pointer}.jsoneditor-modal .jsoneditor-button-group.jsoneditor-button-group-value-asc input.jsoneditor-button-asc,.jsoneditor-modal .jsoneditor-button-group.jsoneditor-button-group-value-desc input.jsoneditor-button-desc{background:#3883fa;border-color:#3883fa;color:#fff}.jsoneditor{color:#1a1a1a;border:thin solid #3883fa;box-sizing:border-box;width:100%;height:100%;position:relative;padding:0;line-height:100%}div.jsoneditor-default,div.jsoneditor-field,div.jsoneditor-readonly,div.jsoneditor-value{border:1px solid transparent;min-height:16px;min-width:32px;padding:2px;margin:1px;word-wrap:break-word;float:left}div.jsoneditor-field p,div.jsoneditor-value p{margin:0}div.jsoneditor-value{word-break:break-word}div.jsoneditor-value.jsoneditor-empty:after{content:\"value\"}div.jsoneditor-value.jsoneditor-string{color:#006000}div.jsoneditor-value.jsoneditor-number{color:#ee422e}div.jsoneditor-value.jsoneditor-null{color:#004ed0}div.jsoneditor-value.jsoneditor-color-value,div.jsoneditor-value.jsoneditor-invalid{color:#1a1a1a}div.jsoneditor-readonly{min-width:16px;color:grey}div.jsoneditor-empty{border-color:#d3d3d3;border-style:dashed;border-radius:2px}div.jsoneditor-field.jsoneditor-empty:after{content:\"field\"}div.jsoneditor td{vertical-align:top}div.jsoneditor td.jsoneditor-separator{vertical-align:top;color:grey}div.jsoneditor td.jsoneditor-tree{vertical-align:top}div.jsoneditor.busy pre.jsoneditor-preview{background:#f5f5f5;color:grey}div.jsoneditor.busy div.jsoneditor-busy{display:inherit}div.jsoneditor code.jsoneditor-preview{background:none}div.jsoneditor.jsoneditor-mode-preview pre.jsoneditor-preview{width:100%;height:100%;box-sizing:border-box;overflow:auto;padding:2px;margin:0;white-space:pre-wrap;word-break:break-all}div.jsoneditor-default{color:grey;padding-left:10px}div.jsoneditor-tree{width:100%;height:100%;position:relative;overflow:auto}div.jsoneditor-tree button.jsoneditor-button{width:24px;height:24px;padding:0;margin:0;border:none;cursor:pointer;background:transparent url(jsoneditor-icons.15f2789dd231f36d43a4.svg)}div.jsoneditor-tree button.jsoneditor-button:focus{background-color:#f5f5f5;outline:1px solid #e5e5e5}div.jsoneditor-tree button.jsoneditor-collapsed{background-position:0 -48px}div.jsoneditor-tree button.jsoneditor-expanded{background-position:0 -72px}div.jsoneditor-tree button.jsoneditor-contextmenu-button{background-position:-48px -72px}div.jsoneditor-tree button.jsoneditor-invisible{visibility:hidden;background:none}div.jsoneditor-tree button.jsoneditor-dragarea{background:url(jsoneditor-icons.15f2789dd231f36d43a4.svg) -72px -72px;cursor:move}div.jsoneditor-tree :focus{outline:none}div.jsoneditor-tree div.jsoneditor-show-more{display:inline-block;padding:3px 4px;margin:2px 0;background-color:#e5e5e5;border-radius:3px;color:grey;font-family:arial,sans-serif;font-size:10pt}div.jsoneditor-tree div.jsoneditor-show-more a{display:inline-block;color:grey}div.jsoneditor-tree div.jsoneditor-color{display:inline-block;width:12px;height:12px;margin:4px;border:1px solid grey;cursor:pointer}div.jsoneditor-tree div.jsoneditor-date{background:#a1a1a1;color:#fff;font-family:arial,sans-serif;border-radius:3px;display:inline-block;padding:3px;margin:0 3px}div.jsoneditor-tree table.jsoneditor-tree{border-collapse:collapse;border-spacing:0;width:100%}div.jsoneditor-tree .jsoneditor-button.jsoneditor-schema-error{width:24px;height:24px;padding:0;margin:0 4px 0 0;background:url(jsoneditor-icons.15f2789dd231f36d43a4.svg) -168px -48px}div.jsoneditor-outer{position:static;width:100%;height:100%;margin:0;padding:0;box-sizing:border-box}div.jsoneditor-outer.has-nav-bar{margin-top:-26px;padding-top:26px}div.jsoneditor-outer.has-nav-bar.has-main-menu-bar{margin-top:-61px;padding-top:61px}div.jsoneditor-outer.has-status-bar{margin-bottom:-26px;padding-bottom:26px}div.jsoneditor-outer.has-main-menu-bar{margin-top:-35px;padding-top:35px}div.jsoneditor-busy{position:absolute;top:15%;left:0;box-sizing:border-box;width:100%;text-align:center;display:none}div.jsoneditor-busy span{background-color:#ffffab;border:1px solid #fe0;border-radius:3px;padding:5px 15px;box-shadow:0 0 5px rgba(0,0,0,.4)}div.jsoneditor-field.jsoneditor-empty:after,div.jsoneditor-value.jsoneditor-empty:after{pointer-events:none;color:#d3d3d3;font-size:8pt}a.jsoneditor-value.jsoneditor-url,div.jsoneditor-value.jsoneditor-url{color:#006000;text-decoration:underline}a.jsoneditor-value.jsoneditor-url{display:inline-block;padding:2px;margin:2px}a.jsoneditor-value.jsoneditor-url:focus,a.jsoneditor-value.jsoneditor-url:hover{color:#ee422e}div.jsoneditor-field.jsoneditor-highlight,div.jsoneditor-field[contenteditable=true]:focus,div.jsoneditor-field[contenteditable=true]:hover,div.jsoneditor-value.jsoneditor-highlight,div.jsoneditor-value[contenteditable=true]:focus,div.jsoneditor-value[contenteditable=true]:hover{background-color:#ffffab;border:1px solid #fe0;border-radius:2px}div.jsoneditor-field.jsoneditor-highlight-active,div.jsoneditor-field.jsoneditor-highlight-active:focus,div.jsoneditor-field.jsoneditor-highlight-active:hover,div.jsoneditor-value.jsoneditor-highlight-active,div.jsoneditor-value.jsoneditor-highlight-active:focus,div.jsoneditor-value.jsoneditor-highlight-active:hover{background-color:#fe0;border:1px solid #ffc700;border-radius:2px}div.jsoneditor-value.jsoneditor-array,div.jsoneditor-value.jsoneditor-object{min-width:16px}div.jsoneditor-tree button.jsoneditor-contextmenu-button.jsoneditor-selected,div.jsoneditor-tree button.jsoneditor-contextmenu-button:focus,div.jsoneditor-tree button.jsoneditor-contextmenu-button:hover,tr.jsoneditor-selected.jsoneditor-first button.jsoneditor-contextmenu-button{background-position:-48px -48px}div.jsoneditor-tree div.jsoneditor-show-more a:focus,div.jsoneditor-tree div.jsoneditor-show-more a:hover{color:#ee422e}.ace-jsoneditor,textarea.jsoneditor-text{min-height:150px}.ace-jsoneditor *,textarea.jsoneditor-text *{font-family:dejavu sans mono,droid sans mono,consolas,monaco,lucida console,courier new,courier,monospace,sans-serif}textarea.jsoneditor-text{width:100%;height:100%;margin:0;box-sizing:border-box;outline-width:0;border:none;background-color:#fff;resize:none}tr.jsoneditor-highlight,tr.jsoneditor-selected{background-color:#d3d3d3}tr.jsoneditor-selected button.jsoneditor-contextmenu-button,tr.jsoneditor-selected button.jsoneditor-dragarea{visibility:hidden}tr.jsoneditor-selected.jsoneditor-first button.jsoneditor-contextmenu-button,tr.jsoneditor-selected.jsoneditor-first button.jsoneditor-dragarea{visibility:visible}div.jsoneditor-tree button.jsoneditor-dragarea:focus,div.jsoneditor-tree button.jsoneditor-dragarea:hover,tr.jsoneditor-selected.jsoneditor-first button.jsoneditor-dragarea{background-position:-72px -48px}div.jsoneditor td,div.jsoneditor th,div.jsoneditor tr{padding:0;margin:0}.jsoneditor-popover,.jsoneditor-schema-error,div.jsoneditor-field,div.jsoneditor-value,div.jsoneditor td,div.jsoneditor textarea,div.jsoneditor th,pre.jsoneditor-preview{font-family:dejavu sans mono,droid sans mono,consolas,monaco,lucida console,courier new,courier,monospace,sans-serif;font-size:10pt;color:#1a1a1a}.jsoneditor-schema-error{cursor:default;display:inline-block;height:24px;line-height:24px;position:relative;text-align:center;width:24px}.jsoneditor-popover{background-color:#4c4c4c;border-radius:3px;box-shadow:0 0 5px rgba(0,0,0,.4);color:#fff;padding:7px 10px;position:absolute;cursor:auto;width:200px}.jsoneditor-popover.jsoneditor-above{bottom:32px;left:-98px}.jsoneditor-popover.jsoneditor-above:before{border-top:7px solid #4c4c4c;bottom:-7px}.jsoneditor-popover.jsoneditor-below{top:32px;left:-98px}.jsoneditor-popover.jsoneditor-below:before{border-bottom:7px solid #4c4c4c;top:-7px}.jsoneditor-popover.jsoneditor-left{top:-7px;right:32px}.jsoneditor-popover.jsoneditor-left:before{border-left:7px solid #4c4c4c;border-top:7px solid transparent;border-bottom:7px solid transparent;content:\"\";top:19px;right:-14px;left:inherit;margin-left:inherit;margin-top:-7px;position:absolute}.jsoneditor-popover.jsoneditor-right{top:-7px;left:32px}.jsoneditor-popover.jsoneditor-right:before{border-right:7px solid #4c4c4c;border-top:7px solid transparent;border-bottom:7px solid transparent;content:\"\";top:19px;left:-14px;margin-left:inherit;margin-top:-7px;position:absolute}.jsoneditor-popover:before{border-right:7px solid transparent;border-left:7px solid transparent;content:\"\";display:block;left:50%;margin-left:-7px;position:absolute}.jsoneditor-text-errors tr.jump-to-line:hover{text-decoration:underline;cursor:pointer}.jsoneditor-schema-error:focus .jsoneditor-popover,.jsoneditor-schema-error:hover .jsoneditor-popover{display:block;animation:fade-in .3s linear 1,move-up .3s linear 1}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.jsoneditor .jsoneditor-validation-errors-container{max-height:130px;overflow-y:auto}.jsoneditor .jsoneditor-validation-errors{width:100%;overflow:hidden}.jsoneditor .jsoneditor-additional-errors{position:absolute;margin:auto;bottom:31px;left:calc(50% - 92px);color:grey;background-color:#ebebeb;padding:7px 15px;border-radius:8px}.jsoneditor .jsoneditor-additional-errors.visible{visibility:visible;opacity:1;transition:opacity 2s linear}.jsoneditor .jsoneditor-additional-errors.hidden{visibility:hidden;opacity:0;transition:visibility 0s 2s,opacity 2s linear}.jsoneditor .jsoneditor-text-errors{width:100%;border-collapse:collapse;border-top:1px solid #ffc700}.jsoneditor .jsoneditor-text-errors td{padding:3px 6px;vertical-align:middle}.jsoneditor .jsoneditor-text-errors td pre{margin:0;white-space:normal}.jsoneditor .jsoneditor-text-errors tr{background-color:#ffffab}.jsoneditor .jsoneditor-text-errors tr.parse-error{background-color:rgba(238,46,46,.4392156862745098)}.jsoneditor-text-errors .jsoneditor-schema-error{border:none;width:24px;height:24px;padding:0;margin:0 4px 0 0;cursor:pointer}.jsoneditor-text-errors tr .jsoneditor-schema-error{background:url(jsoneditor-icons.15f2789dd231f36d43a4.svg) -168px -48px}.jsoneditor-text-errors tr.parse-error .jsoneditor-schema-error{background:url(jsoneditor-icons.15f2789dd231f36d43a4.svg) -25px 0}.jsoneditor-anchor{cursor:pointer}.jsoneditor-anchor .picker_wrapper.popup.popup_bottom{top:28px;left:-10px}.fadein{animation:fadein .3s;-moz-animation:fadein .3s;-o-animation:fadein .3s}@keyframes fadein{0%{opacity:0}to{opacity:1}}.jsoneditor-modal input[type=search].selectr-input{border:1px solid #d3d3d3;width:calc(100% - 4px);margin:2px;padding:4px;box-sizing:border-box}.jsoneditor-modal button.selectr-input-clear{right:8px}.jsoneditor-menu{width:100%;height:35px;padding:2px;margin:0;box-sizing:border-box;color:#fff;background-color:#3883fa;border-bottom:1px solid #3883fa}.jsoneditor-menu>.jsoneditor-modes>button,.jsoneditor-menu>button{width:26px;height:26px;margin:2px;padding:0;border-radius:2px;border:1px solid transparent;background:transparent url(jsoneditor-icons.15f2789dd231f36d43a4.svg);color:#fff;opacity:.8;font-family:arial,sans-serif;font-size:10pt;float:left}.jsoneditor-menu>.jsoneditor-modes>button:hover,.jsoneditor-menu>button:hover{background-color:hsla(0,0%,100%,.2);border:1px solid hsla(0,0%,100%,.4)}.jsoneditor-menu>.jsoneditor-modes>button:active,.jsoneditor-menu>.jsoneditor-modes>button:focus,.jsoneditor-menu>button:active,.jsoneditor-menu>button:focus{background-color:hsla(0,0%,100%,.3)}.jsoneditor-menu>.jsoneditor-modes>button:disabled,.jsoneditor-menu>button:disabled{opacity:.5;background-color:initial;border:none}.jsoneditor-menu>button.jsoneditor-collapse-all{background-position:0 -96px}.jsoneditor-menu>button.jsoneditor-expand-all{background-position:0 -120px}.jsoneditor-menu>button.jsoneditor-sort{background-position:-120px -96px}.jsoneditor-menu>button.jsoneditor-transform{background-position:-144px -96px}.jsoneditor.jsoneditor-mode-form>.jsoneditor-menu>button.jsoneditor-sort,.jsoneditor.jsoneditor-mode-form>.jsoneditor-menu>button.jsoneditor-transform,.jsoneditor.jsoneditor-mode-view>.jsoneditor-menu>button.jsoneditor-sort,.jsoneditor.jsoneditor-mode-view>.jsoneditor-menu>button.jsoneditor-transform{display:none}.jsoneditor-menu>button.jsoneditor-undo{background-position:-24px -96px}.jsoneditor-menu>button.jsoneditor-undo:disabled{background-position:-24px -120px}.jsoneditor-menu>button.jsoneditor-redo{background-position:-48px -96px}.jsoneditor-menu>button.jsoneditor-redo:disabled{background-position:-48px -120px}.jsoneditor-menu>button.jsoneditor-compact{background-position:-72px -96px}.jsoneditor-menu>button.jsoneditor-format{background-position:-72px -120px}.jsoneditor-menu>button.jsoneditor-repair{background-position:-96px -96px}.jsoneditor-menu>.jsoneditor-modes{display:inline-block;float:left}.jsoneditor-menu>.jsoneditor-modes>button{background-image:none;width:auto;padding-left:6px;padding-right:6px}.jsoneditor-menu>.jsoneditor-modes>button.jsoneditor-separator,.jsoneditor-menu>button.jsoneditor-separator{margin-left:10px}.jsoneditor-menu a{font-family:arial,sans-serif;font-size:10pt;color:#fff;opacity:.8;vertical-align:middle}.jsoneditor-menu a:hover{opacity:1}.jsoneditor-menu a.jsoneditor-poweredBy{font-size:8pt;position:absolute;right:0;top:0;padding:10px}.jsoneditor-navigation-bar{width:100%;height:26px;line-height:26px;padding:0;margin:0;border-bottom:1px solid #d3d3d3;box-sizing:border-box;color:grey;background-color:#ebebeb;overflow:hidden;font-family:arial,sans-serif;font-size:10pt}.jsoneditor-search{font-family:arial,sans-serif;position:absolute;right:4px;top:4px;border-collapse:collapse;border-spacing:0;display:flex}.jsoneditor-search input{color:#1a1a1a;width:120px;border:none;outline:none;margin:1px;line-height:20px;font-family:arial,sans-serif}.jsoneditor-search button{width:16px;height:24px;padding:0;margin:0;border:none;background:url(jsoneditor-icons.15f2789dd231f36d43a4.svg);vertical-align:top}.jsoneditor-search button:hover{background-color:initial}.jsoneditor-search button.jsoneditor-refresh{width:18px;background-position:-99px -73px}.jsoneditor-search button.jsoneditor-next{cursor:pointer;background-position:-124px -73px}.jsoneditor-search button.jsoneditor-next:hover{background-position:-124px -49px}.jsoneditor-search button.jsoneditor-previous{cursor:pointer;background-position:-148px -73px;margin-right:2px}.jsoneditor-search button.jsoneditor-previous:hover{background-position:-148px -49px}.jsoneditor-results{font-family:arial,sans-serif;color:#fff;padding-right:5px;line-height:26px}.jsoneditor-frame{border:1px solid transparent;background-color:#fff;padding:0 2px;margin:0}.jsoneditor-statusbar{line-height:26px;height:26px;color:grey;background-color:#ebebeb;border-top:1px solid #d3d3d3;box-sizing:border-box;font-size:10pt}.jsoneditor-statusbar>.jsoneditor-curserinfo-val{margin-right:12px}.jsoneditor-statusbar>.jsoneditor-curserinfo-count{margin-left:4px}.jsoneditor-statusbar>.jsoneditor-validation-error-icon{float:right;width:24px;height:24px;padding:0;margin-top:1px;background:url(jsoneditor-icons.15f2789dd231f36d43a4.svg) -168px -48px;cursor:pointer}.jsoneditor-statusbar>.jsoneditor-validation-error-count{float:right;margin:0 4px 0 0;cursor:pointer}.jsoneditor-statusbar>.jsoneditor-parse-error-icon{float:right;width:24px;height:24px;padding:0;margin:1px;background:url(jsoneditor-icons.15f2789dd231f36d43a4.svg) -25px 0}.jsoneditor-statusbar .jsoneditor-array-info a{color:inherit}div.jsoneditor-statusbar>.jsoneditor-curserinfo-label,div.jsoneditor-statusbar>.jsoneditor-size-info{margin:0 4px}.jsoneditor-treepath{padding:0 5px;overflow:hidden;white-space:nowrap;outline:none}.jsoneditor-treepath.show-all{word-wrap:break-word;white-space:normal;position:absolute;background-color:#ebebeb;z-index:1;box-shadow:2px 2px 12px hsla(0,0%,50.2%,.3)}.jsoneditor-treepath.show-all span.jsoneditor-treepath-show-all-btn{display:none}.jsoneditor-treepath div.jsoneditor-contextmenu-root{position:absolute;left:0}.jsoneditor-treepath .jsoneditor-treepath-show-all-btn{position:absolute;background-color:#ebebeb;left:0;height:20px;padding:0 3px;cursor:pointer}.jsoneditor-treepath .jsoneditor-treepath-element{margin:1px;font-family:arial,sans-serif;font-size:10pt}.jsoneditor-treepath .jsoneditor-treepath-seperator{margin:2px;font-size:9pt;font-family:arial,sans-serif}.jsoneditor-treepath span.jsoneditor-treepath-element:hover,.jsoneditor-treepath span.jsoneditor-treepath-seperator:hover{cursor:pointer;text-decoration:underline}\n/*!\n * Selectr 2.4.0\n * https://github.com/Mobius1/Selectr\n *\n * Released under the MIT license\n */.selectr-container{position:relative}.selectr-container li{list-style:none}.selectr-hidden{position:absolute;overflow:hidden;clip:rect(0,0,0,0);width:1px;height:1px;margin:-1px;padding:0;border:0}.selectr-visible{position:absolute;left:0;top:0;width:100%;height:100%;opacity:0;z-index:11}.selectr-desktop.multiple .selectr-visible{display:none}.selectr-desktop.multiple.native-open .selectr-visible{top:100%;min-height:200px!important;height:auto;opacity:1;display:block}.selectr-container.multiple.selectr-mobile .selectr-selected{z-index:0}.selectr-selected{position:relative;z-index:1;box-sizing:border-box;width:100%;padding:7px 28px 7px 14px;cursor:pointer;border:1px solid #999;border-radius:3px;background-color:#fff}.selectr-selected:before{position:absolute;top:50%;right:10px;width:0;height:0;content:\"\";transform:rotate(0deg) translate3d(0,-50%,0);border-color:#6c7a86 transparent transparent;border-style:solid;border-width:4px 4px 0}.selectr-container.native-open .selectr-selected:before,.selectr-container.open .selectr-selected:before{border-color:transparent transparent #6c7a86;border-style:solid;border-width:0 4px 4px}.selectr-label{display:none;overflow:hidden;width:100%;white-space:nowrap;text-overflow:ellipsis}.selectr-placeholder{color:#6c7a86}.selectr-tags{margin:0;padding:0;white-space:normal}.has-selected .selectr-tags{margin:0 0 -2px}.selectr-tag{list-style:none;position:relative;float:left;padding:2px 25px 2px 8px;margin:0 2px 2px 0;cursor:default;color:#fff;border:none;border-radius:10px;background:#acb7bf none repeat scroll 0 0}.selectr-container.multiple.has-selected .selectr-selected{padding:5px 28px 5px 5px}.selectr-options-container{position:absolute;z-index:10000;top:calc(100% - 1px);left:0;display:none;box-sizing:border-box;width:100%;border:1px solid #999;border-top:0 solid transparent;border-radius:0 0 3px 3px;background-color:#fff}.selectr-container.open .selectr-options-container{display:block}.selectr-input-container{position:relative;display:none}.selectr-clear,.selectr-input-clear,.selectr-tag-remove{position:absolute;top:50%;right:22px;width:20px;height:20px;padding:0;cursor:pointer;transform:translate3d(0,-50%,0);border:none;background-color:initial;z-index:11}.selectr-clear,.selectr-input-clear{display:none}.selectr-container.has-selected .selectr-clear,.selectr-input-container.active .selectr-input-clear{display:block}.selectr-selected .selectr-tag-remove{right:2px}.selectr-clear:after,.selectr-clear:before,.selectr-input-clear:after,.selectr-input-clear:before,.selectr-tag-remove:after,.selectr-tag-remove:before{position:absolute;top:5px;left:9px;width:2px;height:10px;content:\" \";background-color:#6c7a86}.selectr-tag-remove:after,.selectr-tag-remove:before{top:4px;width:3px;height:12px;background-color:#fff}.selectr-clear:before,.selectr-input-clear:before,.selectr-tag-remove:before{transform:rotate(45deg)}.selectr-clear:after,.selectr-input-clear:after,.selectr-tag-remove:after{transform:rotate(-45deg)}.selectr-input-container.active,.selectr-input-container.active .selectr-clear{display:block}.selectr-input{top:5px;left:5px;box-sizing:border-box;width:calc(100% - 30px);margin:10px 15px;padding:7px 30px 7px 9px;border:1px solid #999;border-radius:3px}.selectr-notice{display:none;box-sizing:border-box;width:100%;padding:8px 16px;border-top:1px solid #999;border-radius:0 0 3px 3px;background-color:#fff}.selectr-container.notice .selectr-notice{display:block}.selectr-container.notice .selectr-selected{border-radius:3px 3px 0 0}.selectr-options{position:relative;top:calc(100% + 2px);display:none;overflow-x:auto;overflow-y:scroll;max-height:200px;margin:0;padding:0}.selectr-container.notice .selectr-options-container,.selectr-container.open .selectr-input-container,.selectr-container.open .selectr-options{display:block}.selectr-option{position:relative;display:block;padding:5px 20px;list-style:outside none none;cursor:pointer;font-weight:400}.selectr-options.optgroups>.selectr-option{padding-left:25px}.selectr-optgroup{font-weight:700;padding:0}.selectr-optgroup--label{font-weight:700;margin-top:10px;padding:5px 15px}.selectr-match{text-decoration:underline}.selectr-option.selected{background-color:#ddd}.selectr-option.active{color:#fff;background-color:#5897fb}.selectr-option.disabled{opacity:.4}.selectr-option.excluded{display:none}.selectr-container.open .selectr-selected{border-color:#999 #999 transparent;border-radius:3px 3px 0 0}.selectr-container.open .selectr-selected:after{transform:rotate(180deg) translate3d(0,50%,0)}.selectr-disabled{opacity:.6}.has-selected .selectr-placeholder,.selectr-empty{display:none}.has-selected .selectr-label{display:block}.taggable .selectr-selected{padding:4px 28px 4px 4px}.taggable .selectr-selected:after{display:table;content:\" \";clear:both}.taggable .selectr-label{width:auto}.taggable .selectr-tags{float:left;display:block}.taggable .selectr-placeholder{display:none}.input-tag{float:left;min-width:90px;width:auto}.selectr-tag-input{border:none;padding:3px 10px;width:100%;font-family:inherit;font-weight:inherit;font-size:inherit}.selectr-input-container.loading:after{position:absolute;top:50%;right:20px;width:20px;height:20px;content:\"\";transform:translate3d(0,-50%,0);transform-origin:50% 0 0;animation:spin .5s linear 0s infinite normal forwards running;border:3px solid #ddd;border-top-color:#aaa;border-radius:50%}.selectr-container.open.inverted .selectr-selected{border-color:transparent #999 #999;border-radius:0 0 3px 3px}.selectr-container.inverted .selectr-options-container{border-width:1px 1px 0;border-color:#999 #999 transparent;border-radius:3px 3px 0 0;background-color:#fff;top:auto;bottom:calc(100% - 1px)}.selectr-container ::placeholder{color:#6c7a86;opacity:1}html{line-height:1.15;-webkit-text-size-adjust:100%}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:initial;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:initial}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:initial}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:initial}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}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:initial;background-image:none}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}*,:after,:before{box-sizing:border-box;border:0 solid #e2e8f0}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::placeholder,textarea::placeholder{color:#a0aec0}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}.container{width:100%;margin-right:auto;margin-left:auto}@media (min-width:599px){.container{max-width:599px}}@media (min-width:600px){.container{max-width:600px}}@media (min-width:960px){.container{max-width:960px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1920px){.container{max-width:1920px}}.space-y-0>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(0px * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(0px * var(--space-y-reverse))!important}.space-x-0>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(0px * var(--space-x-reverse))!important;margin-left:calc(0px * calc(1 - var(--space-x-reverse)))!important}.space-y-1>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(.25rem * var(--space-y-reverse))!important}.space-x-1>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(.25rem * var(--space-x-reverse))!important;margin-left:calc(.25rem * calc(1 - var(--space-x-reverse)))!important}.space-y-2>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(.5rem * var(--space-y-reverse))!important}.space-x-2>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(.5rem * var(--space-x-reverse))!important;margin-left:calc(.5rem * calc(1 - var(--space-x-reverse)))!important}.space-y-3>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(.75rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(.75rem * var(--space-y-reverse))!important}.space-x-3>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(.75rem * var(--space-x-reverse))!important;margin-left:calc(.75rem * calc(1 - var(--space-x-reverse)))!important}.space-y-4>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1rem * var(--space-y-reverse))!important}.space-x-4>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1rem * var(--space-x-reverse))!important;margin-left:calc(1rem * calc(1 - var(--space-x-reverse)))!important}.space-y-5>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1.25rem * var(--space-y-reverse))!important}.space-x-5>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1.25rem * var(--space-x-reverse))!important;margin-left:calc(1.25rem * calc(1 - var(--space-x-reverse)))!important}.space-y-6>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1.5rem * var(--space-y-reverse))!important}.space-x-6>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1.5rem * var(--space-x-reverse))!important;margin-left:calc(1.5rem * calc(1 - var(--space-x-reverse)))!important}.space-y-8>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(2rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(2rem * var(--space-y-reverse))!important}.space-x-8>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(2rem * var(--space-x-reverse))!important;margin-left:calc(2rem * calc(1 - var(--space-x-reverse)))!important}.space-y-10>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(2.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(2.5rem * var(--space-y-reverse))!important}.space-x-10>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(2.5rem * var(--space-x-reverse))!important;margin-left:calc(2.5rem * calc(1 - var(--space-x-reverse)))!important}.space-y-12>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(3rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(3rem * var(--space-y-reverse))!important}.space-x-12>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(3rem * var(--space-x-reverse))!important;margin-left:calc(3rem * calc(1 - var(--space-x-reverse)))!important}.space-y-16>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(4rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(4rem * var(--space-y-reverse))!important}.space-x-16>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(4rem * var(--space-x-reverse))!important;margin-left:calc(4rem * calc(1 - var(--space-x-reverse)))!important}.space-y-20>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(5rem * var(--space-y-reverse))!important}.space-x-20>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(5rem * var(--space-x-reverse))!important;margin-left:calc(5rem * calc(1 - var(--space-x-reverse)))!important}.space-y-24>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(6rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(6rem * var(--space-y-reverse))!important}.space-x-24>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(6rem * var(--space-x-reverse))!important;margin-left:calc(6rem * calc(1 - var(--space-x-reverse)))!important}.space-y-32>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(8rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(8rem * var(--space-y-reverse))!important}.space-x-32>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(8rem * var(--space-x-reverse))!important;margin-left:calc(8rem * calc(1 - var(--space-x-reverse)))!important}.space-y-40>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(10rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(10rem * var(--space-y-reverse))!important}.space-x-40>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(10rem * var(--space-x-reverse))!important;margin-left:calc(10rem * calc(1 - var(--space-x-reverse)))!important}.space-y-48>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(12rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(12rem * var(--space-y-reverse))!important}.space-x-48>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(12rem * var(--space-x-reverse))!important;margin-left:calc(12rem * calc(1 - var(--space-x-reverse)))!important}.space-y-56>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(14rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(14rem * var(--space-y-reverse))!important}.space-x-56>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(14rem * var(--space-x-reverse))!important;margin-left:calc(14rem * calc(1 - var(--space-x-reverse)))!important}.space-y-64>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(16rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(16rem * var(--space-y-reverse))!important}.space-x-64>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(16rem * var(--space-x-reverse))!important;margin-left:calc(16rem * calc(1 - var(--space-x-reverse)))!important}.space-y-px>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1px * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1px * var(--space-y-reverse))!important}.space-x-px>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1px * var(--space-x-reverse))!important;margin-left:calc(1px * calc(1 - var(--space-x-reverse)))!important}.-space-y-1>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-.25rem * var(--space-y-reverse))!important}.-space-x-1>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-.25rem * var(--space-x-reverse))!important;margin-left:calc(-.25rem * calc(1 - var(--space-x-reverse)))!important}.-space-y-2>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-.5rem * var(--space-y-reverse))!important}.-space-x-2>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-.5rem * var(--space-x-reverse))!important;margin-left:calc(-.5rem * calc(1 - var(--space-x-reverse)))!important}.-space-y-3>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-.75rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-.75rem * var(--space-y-reverse))!important}.-space-x-3>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-.75rem * var(--space-x-reverse))!important;margin-left:calc(-.75rem * calc(1 - var(--space-x-reverse)))!important}.-space-y-4>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1rem * var(--space-y-reverse))!important}.-space-x-4>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1rem * var(--space-x-reverse))!important;margin-left:calc(-1rem * calc(1 - var(--space-x-reverse)))!important}.-space-y-5>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1.25rem * var(--space-y-reverse))!important}.-space-x-5>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1.25rem * var(--space-x-reverse))!important;margin-left:calc(-1.25rem * calc(1 - var(--space-x-reverse)))!important}.-space-y-6>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1.5rem * var(--space-y-reverse))!important}.-space-x-6>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1.5rem * var(--space-x-reverse))!important;margin-left:calc(-1.5rem * calc(1 - var(--space-x-reverse)))!important}.-space-y-8>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-2rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-2rem * var(--space-y-reverse))!important}.-space-x-8>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-2rem * var(--space-x-reverse))!important;margin-left:calc(-2rem * calc(1 - var(--space-x-reverse)))!important}.-space-y-10>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-2.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-2.5rem * var(--space-y-reverse))!important}.-space-x-10>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-2.5rem * var(--space-x-reverse))!important;margin-left:calc(-2.5rem * calc(1 - var(--space-x-reverse)))!important}.-space-y-12>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-3rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-3rem * var(--space-y-reverse))!important}.-space-x-12>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-3rem * var(--space-x-reverse))!important;margin-left:calc(-3rem * calc(1 - var(--space-x-reverse)))!important}.-space-y-16>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-4rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-4rem * var(--space-y-reverse))!important}.-space-x-16>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-4rem * var(--space-x-reverse))!important;margin-left:calc(-4rem * calc(1 - var(--space-x-reverse)))!important}.-space-y-20>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-5rem * var(--space-y-reverse))!important}.-space-x-20>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-5rem * var(--space-x-reverse))!important;margin-left:calc(-5rem * calc(1 - var(--space-x-reverse)))!important}.-space-y-24>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-6rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-6rem * var(--space-y-reverse))!important}.-space-x-24>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-6rem * var(--space-x-reverse))!important;margin-left:calc(-6rem * calc(1 - var(--space-x-reverse)))!important}.-space-y-32>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-8rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-8rem * var(--space-y-reverse))!important}.-space-x-32>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-8rem * var(--space-x-reverse))!important;margin-left:calc(-8rem * calc(1 - var(--space-x-reverse)))!important}.-space-y-40>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-10rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-10rem * var(--space-y-reverse))!important}.-space-x-40>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-10rem * var(--space-x-reverse))!important;margin-left:calc(-10rem * calc(1 - var(--space-x-reverse)))!important}.-space-y-48>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-12rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-12rem * var(--space-y-reverse))!important}.-space-x-48>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-12rem * var(--space-x-reverse))!important;margin-left:calc(-12rem * calc(1 - var(--space-x-reverse)))!important}.-space-y-56>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-14rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-14rem * var(--space-y-reverse))!important}.-space-x-56>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-14rem * var(--space-x-reverse))!important;margin-left:calc(-14rem * calc(1 - var(--space-x-reverse)))!important}.-space-y-64>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-16rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-16rem * var(--space-y-reverse))!important}.-space-x-64>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-16rem * var(--space-x-reverse))!important;margin-left:calc(-16rem * calc(1 - var(--space-x-reverse)))!important}.-space-y-px>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1px * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1px * var(--space-y-reverse))!important}.-space-x-px>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1px * var(--space-x-reverse))!important;margin-left:calc(-1px * calc(1 - var(--space-x-reverse)))!important}.space-y-reverse>:not(template)~:not(template){--space-y-reverse:1!important}.space-x-reverse>:not(template)~:not(template){--space-x-reverse:1!important}.divide-y-0>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(0px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(0px * var(--divide-y-reverse))!important}.divide-x-0>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(0px * var(--divide-x-reverse))!important;border-left-width:calc(0px * calc(1 - var(--divide-x-reverse)))!important}.divide-y-2>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(2px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(2px * var(--divide-y-reverse))!important}.divide-x-2>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(2px * var(--divide-x-reverse))!important;border-left-width:calc(2px * calc(1 - var(--divide-x-reverse)))!important}.divide-y-4>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(4px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(4px * var(--divide-y-reverse))!important}.divide-x-4>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(4px * var(--divide-x-reverse))!important;border-left-width:calc(4px * calc(1 - var(--divide-x-reverse)))!important}.divide-y-8>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(8px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(8px * var(--divide-y-reverse))!important}.divide-x-8>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(8px * var(--divide-x-reverse))!important;border-left-width:calc(8px * calc(1 - var(--divide-x-reverse)))!important}.divide-y>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(1px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(1px * var(--divide-y-reverse))!important}.divide-x>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(1px * var(--divide-x-reverse))!important;border-left-width:calc(1px * calc(1 - var(--divide-x-reverse)))!important}.divide-y-reverse>:not(template)~:not(template){--divide-y-reverse:1!important}.divide-x-reverse>:not(template)~:not(template){--divide-x-reverse:1!important}.divide-transparent>:not(template)~:not(template){border-color:transparent!important}.divide-current>:not(template)~:not(template){border-color:currentColor!important}.divide-black>:not(template)~:not(template){--divide-opacity:1!important;border-color:#000!important;border-color:rgba(0,0,0,var(--divide-opacity))!important}.divide-white>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fff!important;border-color:rgba(255,255,255,var(--divide-opacity))!important}.divide-gray-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f7fafc!important;border-color:rgba(247,250,252,var(--divide-opacity))!important}.divide-gray-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#edf2f7!important;border-color:rgba(237,242,247,var(--divide-opacity))!important}.divide-gray-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e2e8f0!important;border-color:rgba(226,232,240,var(--divide-opacity))!important}.divide-gray-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#cbd5e0!important;border-color:rgba(203,213,224,var(--divide-opacity))!important}.divide-gray-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#a0aec0!important;border-color:rgba(160,174,192,var(--divide-opacity))!important}.divide-gray-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#718096!important;border-color:rgba(113,128,150,var(--divide-opacity))!important}.divide-gray-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4a5568!important;border-color:rgba(74,85,104,var(--divide-opacity))!important}.divide-gray-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2d3748!important;border-color:rgba(45,55,72,var(--divide-opacity))!important}.divide-gray-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#1a202c!important;border-color:rgba(26,32,44,var(--divide-opacity))!important}.divide-red-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fff5f5!important;border-color:rgba(255,245,245,var(--divide-opacity))!important}.divide-red-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fed7d7!important;border-color:rgba(254,215,215,var(--divide-opacity))!important}.divide-red-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#feb2b2!important;border-color:rgba(254,178,178,var(--divide-opacity))!important}.divide-red-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fc8181!important;border-color:rgba(252,129,129,var(--divide-opacity))!important}.divide-red-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f56565!important;border-color:rgba(245,101,101,var(--divide-opacity))!important}.divide-red-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e53e3e!important;border-color:rgba(229,62,62,var(--divide-opacity))!important}.divide-red-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c53030!important;border-color:rgba(197,48,48,var(--divide-opacity))!important}.divide-red-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9b2c2c!important;border-color:rgba(155,44,44,var(--divide-opacity))!important}.divide-red-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#742a2a!important;border-color:rgba(116,42,42,var(--divide-opacity))!important}.divide-orange-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fffaf0!important;border-color:rgba(255,250,240,var(--divide-opacity))!important}.divide-orange-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#feebc8!important;border-color:rgba(254,235,200,var(--divide-opacity))!important}.divide-orange-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fbd38d!important;border-color:rgba(251,211,141,var(--divide-opacity))!important}.divide-orange-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f6ad55!important;border-color:rgba(246,173,85,var(--divide-opacity))!important}.divide-orange-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ed8936!important;border-color:rgba(237,137,54,var(--divide-opacity))!important}.divide-orange-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#dd6b20!important;border-color:rgba(221,107,32,var(--divide-opacity))!important}.divide-orange-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c05621!important;border-color:rgba(192,86,33,var(--divide-opacity))!important}.divide-orange-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9c4221!important;border-color:rgba(156,66,33,var(--divide-opacity))!important}.divide-orange-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#7b341e!important;border-color:rgba(123,52,30,var(--divide-opacity))!important}.divide-yellow-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:ivory!important;border-color:rgba(255,255,240,var(--divide-opacity))!important}.divide-yellow-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fefcbf!important;border-color:rgba(254,252,191,var(--divide-opacity))!important}.divide-yellow-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#faf089!important;border-color:rgba(250,240,137,var(--divide-opacity))!important}.divide-yellow-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f6e05e!important;border-color:rgba(246,224,94,var(--divide-opacity))!important}.divide-yellow-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ecc94b!important;border-color:rgba(236,201,75,var(--divide-opacity))!important}.divide-yellow-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#d69e2e!important;border-color:rgba(214,158,46,var(--divide-opacity))!important}.divide-yellow-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b7791f!important;border-color:rgba(183,121,31,var(--divide-opacity))!important}.divide-yellow-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#975a16!important;border-color:rgba(151,90,22,var(--divide-opacity))!important}.divide-yellow-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#744210!important;border-color:rgba(116,66,16,var(--divide-opacity))!important}.divide-green-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f0fff4!important;border-color:rgba(240,255,244,var(--divide-opacity))!important}.divide-green-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c6f6d5!important;border-color:rgba(198,246,213,var(--divide-opacity))!important}.divide-green-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9ae6b4!important;border-color:rgba(154,230,180,var(--divide-opacity))!important}.divide-green-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#68d391!important;border-color:rgba(104,211,145,var(--divide-opacity))!important}.divide-green-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#48bb78!important;border-color:rgba(72,187,120,var(--divide-opacity))!important}.divide-green-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#38a169!important;border-color:rgba(56,161,105,var(--divide-opacity))!important}.divide-green-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2f855a!important;border-color:rgba(47,133,90,var(--divide-opacity))!important}.divide-green-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#276749!important;border-color:rgba(39,103,73,var(--divide-opacity))!important}.divide-green-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#22543d!important;border-color:rgba(34,84,61,var(--divide-opacity))!important}.divide-teal-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e6fffa!important;border-color:rgba(230,255,250,var(--divide-opacity))!important}.divide-teal-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b2f5ea!important;border-color:rgba(178,245,234,var(--divide-opacity))!important}.divide-teal-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#81e6d9!important;border-color:rgba(129,230,217,var(--divide-opacity))!important}.divide-teal-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4fd1c5!important;border-color:rgba(79,209,197,var(--divide-opacity))!important}.divide-teal-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#38b2ac!important;border-color:rgba(56,178,172,var(--divide-opacity))!important}.divide-teal-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#319795!important;border-color:rgba(49,151,149,var(--divide-opacity))!important}.divide-teal-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2c7a7b!important;border-color:rgba(44,122,123,var(--divide-opacity))!important}.divide-teal-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#285e61!important;border-color:rgba(40,94,97,var(--divide-opacity))!important}.divide-teal-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#234e52!important;border-color:rgba(35,78,82,var(--divide-opacity))!important}.divide-blue-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ebf8ff!important;border-color:rgba(235,248,255,var(--divide-opacity))!important}.divide-blue-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#bee3f8!important;border-color:rgba(190,227,248,var(--divide-opacity))!important}.divide-blue-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#90cdf4!important;border-color:rgba(144,205,244,var(--divide-opacity))!important}.divide-blue-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#63b3ed!important;border-color:rgba(99,179,237,var(--divide-opacity))!important}.divide-blue-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4299e1!important;border-color:rgba(66,153,225,var(--divide-opacity))!important}.divide-blue-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#3182ce!important;border-color:rgba(49,130,206,var(--divide-opacity))!important}.divide-blue-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2b6cb0!important;border-color:rgba(43,108,176,var(--divide-opacity))!important}.divide-blue-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2c5282!important;border-color:rgba(44,82,130,var(--divide-opacity))!important}.divide-blue-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2a4365!important;border-color:rgba(42,67,101,var(--divide-opacity))!important}.divide-indigo-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ebf4ff!important;border-color:rgba(235,244,255,var(--divide-opacity))!important}.divide-indigo-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c3dafe!important;border-color:rgba(195,218,254,var(--divide-opacity))!important}.divide-indigo-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#a3bffa!important;border-color:rgba(163,191,250,var(--divide-opacity))!important}.divide-indigo-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#7f9cf5!important;border-color:rgba(127,156,245,var(--divide-opacity))!important}.divide-indigo-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#667eea!important;border-color:rgba(102,126,234,var(--divide-opacity))!important}.divide-indigo-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#5a67d8!important;border-color:rgba(90,103,216,var(--divide-opacity))!important}.divide-indigo-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4c51bf!important;border-color:rgba(76,81,191,var(--divide-opacity))!important}.divide-indigo-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#434190!important;border-color:rgba(67,65,144,var(--divide-opacity))!important}.divide-indigo-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#3c366b!important;border-color:rgba(60,54,107,var(--divide-opacity))!important}.divide-purple-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#faf5ff!important;border-color:rgba(250,245,255,var(--divide-opacity))!important}.divide-purple-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e9d8fd!important;border-color:rgba(233,216,253,var(--divide-opacity))!important}.divide-purple-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#d6bcfa!important;border-color:rgba(214,188,250,var(--divide-opacity))!important}.divide-purple-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b794f4!important;border-color:rgba(183,148,244,var(--divide-opacity))!important}.divide-purple-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9f7aea!important;border-color:rgba(159,122,234,var(--divide-opacity))!important}.divide-purple-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#805ad5!important;border-color:rgba(128,90,213,var(--divide-opacity))!important}.divide-purple-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#6b46c1!important;border-color:rgba(107,70,193,var(--divide-opacity))!important}.divide-purple-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#553c9a!important;border-color:rgba(85,60,154,var(--divide-opacity))!important}.divide-purple-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#44337a!important;border-color:rgba(68,51,122,var(--divide-opacity))!important}.divide-pink-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fff5f7!important;border-color:rgba(255,245,247,var(--divide-opacity))!important}.divide-pink-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fed7e2!important;border-color:rgba(254,215,226,var(--divide-opacity))!important}.divide-pink-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fbb6ce!important;border-color:rgba(251,182,206,var(--divide-opacity))!important}.divide-pink-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f687b3!important;border-color:rgba(246,135,179,var(--divide-opacity))!important}.divide-pink-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ed64a6!important;border-color:rgba(237,100,166,var(--divide-opacity))!important}.divide-pink-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#d53f8c!important;border-color:rgba(213,63,140,var(--divide-opacity))!important}.divide-pink-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b83280!important;border-color:rgba(184,50,128,var(--divide-opacity))!important}.divide-pink-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#97266d!important;border-color:rgba(151,38,109,var(--divide-opacity))!important}.divide-pink-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#702459!important;border-color:rgba(112,36,89,var(--divide-opacity))!important}.divide-solid>:not(template)~:not(template){border-style:solid!important}.divide-dashed>:not(template)~:not(template){border-style:dashed!important}.divide-dotted>:not(template)~:not(template){border-style:dotted!important}.divide-double>:not(template)~:not(template){border-style:double!important}.divide-none>:not(template)~:not(template){border-style:none!important}.divide-opacity-0>:not(template)~:not(template){--divide-opacity:0!important}.divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25!important}.divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5!important}.divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75!important}.divide-opacity-100>:not(template)~:not(template){--divide-opacity:1!important}.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}.not-sr-only{position:static!important;width:auto!important;height:auto!important;padding:0!important;margin:0!important;overflow:visible!important;clip:auto!important;white-space:normal!important}.focus\\:sr-only:focus{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}.focus\\:not-sr-only:focus{position:static!important;width:auto!important;height:auto!important;padding:0!important;margin:0!important;overflow:visible!important;clip:auto!important;white-space:normal!important}.appearance-none{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important}.bg-fixed{background-attachment:fixed!important}.bg-local{background-attachment:local!important}.bg-scroll{background-attachment:scroll!important}.bg-clip-border{background-clip:initial!important}.bg-clip-padding{background-clip:padding-box!important}.bg-clip-content{background-clip:content-box!important}.bg-clip-text{-webkit-background-clip:text!important;background-clip:text!important}.bg-transparent{background-color:initial!important}.bg-current{background-color:currentColor!important}.bg-black{background-color:#000!important;background-color:rgba(0,0,0,var(--bg-opacity))!important}.bg-black,.bg-white{--bg-opacity:1!important}.bg-white{background-color:rgba(255,255,255,var(--bg-opacity))!important}.bg-gray-100{--bg-opacity:1!important;background-color:#f7fafc!important;background-color:rgba(247,250,252,var(--bg-opacity))!important}.bg-gray-200{--bg-opacity:1!important;background-color:#edf2f7!important;background-color:rgba(237,242,247,var(--bg-opacity))!important}.bg-gray-300{--bg-opacity:1!important;background-color:#e2e8f0!important;background-color:rgba(226,232,240,var(--bg-opacity))!important}.bg-gray-400{--bg-opacity:1!important;background-color:#cbd5e0!important;background-color:rgba(203,213,224,var(--bg-opacity))!important}.bg-gray-500{--bg-opacity:1!important;background-color:#a0aec0!important;background-color:rgba(160,174,192,var(--bg-opacity))!important}.bg-gray-600{--bg-opacity:1!important;background-color:#718096!important;background-color:rgba(113,128,150,var(--bg-opacity))!important}.bg-gray-700{--bg-opacity:1!important;background-color:#4a5568!important;background-color:rgba(74,85,104,var(--bg-opacity))!important}.bg-gray-800{--bg-opacity:1!important;background-color:#2d3748!important;background-color:rgba(45,55,72,var(--bg-opacity))!important}.bg-gray-900{--bg-opacity:1!important;background-color:#1a202c!important;background-color:rgba(26,32,44,var(--bg-opacity))!important}.bg-red-100{background-color:#fff5f5!important;background-color:rgba(255,245,245,var(--bg-opacity))!important}.bg-red-100,.bg-red-200{--bg-opacity:1!important}.bg-red-200{background-color:#fed7d7!important;background-color:rgba(254,215,215,var(--bg-opacity))!important}.bg-red-300{background-color:#feb2b2!important;background-color:rgba(254,178,178,var(--bg-opacity))!important}.bg-red-300,.bg-red-400{--bg-opacity:1!important}.bg-red-400{background-color:#fc8181!important;background-color:rgba(252,129,129,var(--bg-opacity))!important}.bg-red-500{background-color:#f56565!important;background-color:rgba(245,101,101,var(--bg-opacity))!important}.bg-red-500,.bg-red-600{--bg-opacity:1!important}.bg-red-600{background-color:#e53e3e!important;background-color:rgba(229,62,62,var(--bg-opacity))!important}.bg-red-700{background-color:#c53030!important;background-color:rgba(197,48,48,var(--bg-opacity))!important}.bg-red-700,.bg-red-800{--bg-opacity:1!important}.bg-red-800{background-color:#9b2c2c!important;background-color:rgba(155,44,44,var(--bg-opacity))!important}.bg-red-900{--bg-opacity:1!important;background-color:#742a2a!important;background-color:rgba(116,42,42,var(--bg-opacity))!important}.bg-orange-100{--bg-opacity:1!important;background-color:#fffaf0!important;background-color:rgba(255,250,240,var(--bg-opacity))!important}.bg-orange-200{--bg-opacity:1!important;background-color:#feebc8!important;background-color:rgba(254,235,200,var(--bg-opacity))!important}.bg-orange-300{--bg-opacity:1!important;background-color:#fbd38d!important;background-color:rgba(251,211,141,var(--bg-opacity))!important}.bg-orange-400{--bg-opacity:1!important;background-color:#f6ad55!important;background-color:rgba(246,173,85,var(--bg-opacity))!important}.bg-orange-500{--bg-opacity:1!important;background-color:#ed8936!important;background-color:rgba(237,137,54,var(--bg-opacity))!important}.bg-orange-600{--bg-opacity:1!important;background-color:#dd6b20!important;background-color:rgba(221,107,32,var(--bg-opacity))!important}.bg-orange-700{--bg-opacity:1!important;background-color:#c05621!important;background-color:rgba(192,86,33,var(--bg-opacity))!important}.bg-orange-800{--bg-opacity:1!important;background-color:#9c4221!important;background-color:rgba(156,66,33,var(--bg-opacity))!important}.bg-orange-900{--bg-opacity:1!important;background-color:#7b341e!important;background-color:rgba(123,52,30,var(--bg-opacity))!important}.bg-yellow-100{--bg-opacity:1!important;background-color:ivory!important;background-color:rgba(255,255,240,var(--bg-opacity))!important}.bg-yellow-200{--bg-opacity:1!important;background-color:#fefcbf!important;background-color:rgba(254,252,191,var(--bg-opacity))!important}.bg-yellow-300{--bg-opacity:1!important;background-color:#faf089!important;background-color:rgba(250,240,137,var(--bg-opacity))!important}.bg-yellow-400{--bg-opacity:1!important;background-color:#f6e05e!important;background-color:rgba(246,224,94,var(--bg-opacity))!important}.bg-yellow-500{--bg-opacity:1!important;background-color:#ecc94b!important;background-color:rgba(236,201,75,var(--bg-opacity))!important}.bg-yellow-600{--bg-opacity:1!important;background-color:#d69e2e!important;background-color:rgba(214,158,46,var(--bg-opacity))!important}.bg-yellow-700{--bg-opacity:1!important;background-color:#b7791f!important;background-color:rgba(183,121,31,var(--bg-opacity))!important}.bg-yellow-800{--bg-opacity:1!important;background-color:#975a16!important;background-color:rgba(151,90,22,var(--bg-opacity))!important}.bg-yellow-900{--bg-opacity:1!important;background-color:#744210!important;background-color:rgba(116,66,16,var(--bg-opacity))!important}.bg-green-100{--bg-opacity:1!important;background-color:#f0fff4!important;background-color:rgba(240,255,244,var(--bg-opacity))!important}.bg-green-200{--bg-opacity:1!important;background-color:#c6f6d5!important;background-color:rgba(198,246,213,var(--bg-opacity))!important}.bg-green-300{--bg-opacity:1!important;background-color:#9ae6b4!important;background-color:rgba(154,230,180,var(--bg-opacity))!important}.bg-green-400{--bg-opacity:1!important;background-color:#68d391!important;background-color:rgba(104,211,145,var(--bg-opacity))!important}.bg-green-500{--bg-opacity:1!important;background-color:#48bb78!important;background-color:rgba(72,187,120,var(--bg-opacity))!important}.bg-green-600{--bg-opacity:1!important;background-color:#38a169!important;background-color:rgba(56,161,105,var(--bg-opacity))!important}.bg-green-700{--bg-opacity:1!important;background-color:#2f855a!important;background-color:rgba(47,133,90,var(--bg-opacity))!important}.bg-green-800{--bg-opacity:1!important;background-color:#276749!important;background-color:rgba(39,103,73,var(--bg-opacity))!important}.bg-green-900{--bg-opacity:1!important;background-color:#22543d!important;background-color:rgba(34,84,61,var(--bg-opacity))!important}.bg-teal-100{--bg-opacity:1!important;background-color:#e6fffa!important;background-color:rgba(230,255,250,var(--bg-opacity))!important}.bg-teal-200{--bg-opacity:1!important;background-color:#b2f5ea!important;background-color:rgba(178,245,234,var(--bg-opacity))!important}.bg-teal-300{--bg-opacity:1!important;background-color:#81e6d9!important;background-color:rgba(129,230,217,var(--bg-opacity))!important}.bg-teal-400{--bg-opacity:1!important;background-color:#4fd1c5!important;background-color:rgba(79,209,197,var(--bg-opacity))!important}.bg-teal-500{--bg-opacity:1!important;background-color:#38b2ac!important;background-color:rgba(56,178,172,var(--bg-opacity))!important}.bg-teal-600{--bg-opacity:1!important;background-color:#319795!important;background-color:rgba(49,151,149,var(--bg-opacity))!important}.bg-teal-700{--bg-opacity:1!important;background-color:#2c7a7b!important;background-color:rgba(44,122,123,var(--bg-opacity))!important}.bg-teal-800{--bg-opacity:1!important;background-color:#285e61!important;background-color:rgba(40,94,97,var(--bg-opacity))!important}.bg-teal-900{--bg-opacity:1!important;background-color:#234e52!important;background-color:rgba(35,78,82,var(--bg-opacity))!important}.bg-blue-100{--bg-opacity:1!important;background-color:#ebf8ff!important;background-color:rgba(235,248,255,var(--bg-opacity))!important}.bg-blue-200{--bg-opacity:1!important;background-color:#bee3f8!important;background-color:rgba(190,227,248,var(--bg-opacity))!important}.bg-blue-300{--bg-opacity:1!important;background-color:#90cdf4!important;background-color:rgba(144,205,244,var(--bg-opacity))!important}.bg-blue-400{--bg-opacity:1!important;background-color:#63b3ed!important;background-color:rgba(99,179,237,var(--bg-opacity))!important}.bg-blue-500{--bg-opacity:1!important;background-color:#4299e1!important;background-color:rgba(66,153,225,var(--bg-opacity))!important}.bg-blue-600{--bg-opacity:1!important;background-color:#3182ce!important;background-color:rgba(49,130,206,var(--bg-opacity))!important}.bg-blue-700{--bg-opacity:1!important;background-color:#2b6cb0!important;background-color:rgba(43,108,176,var(--bg-opacity))!important}.bg-blue-800{--bg-opacity:1!important;background-color:#2c5282!important;background-color:rgba(44,82,130,var(--bg-opacity))!important}.bg-blue-900{--bg-opacity:1!important;background-color:#2a4365!important;background-color:rgba(42,67,101,var(--bg-opacity))!important}.bg-indigo-100{--bg-opacity:1!important;background-color:#ebf4ff!important;background-color:rgba(235,244,255,var(--bg-opacity))!important}.bg-indigo-200{--bg-opacity:1!important;background-color:#c3dafe!important;background-color:rgba(195,218,254,var(--bg-opacity))!important}.bg-indigo-300{--bg-opacity:1!important;background-color:#a3bffa!important;background-color:rgba(163,191,250,var(--bg-opacity))!important}.bg-indigo-400{--bg-opacity:1!important;background-color:#7f9cf5!important;background-color:rgba(127,156,245,var(--bg-opacity))!important}.bg-indigo-500{--bg-opacity:1!important;background-color:#667eea!important;background-color:rgba(102,126,234,var(--bg-opacity))!important}.bg-indigo-600{--bg-opacity:1!important;background-color:#5a67d8!important;background-color:rgba(90,103,216,var(--bg-opacity))!important}.bg-indigo-700{--bg-opacity:1!important;background-color:#4c51bf!important;background-color:rgba(76,81,191,var(--bg-opacity))!important}.bg-indigo-800{--bg-opacity:1!important;background-color:#434190!important;background-color:rgba(67,65,144,var(--bg-opacity))!important}.bg-indigo-900{--bg-opacity:1!important;background-color:#3c366b!important;background-color:rgba(60,54,107,var(--bg-opacity))!important}.bg-purple-100{--bg-opacity:1!important;background-color:#faf5ff!important;background-color:rgba(250,245,255,var(--bg-opacity))!important}.bg-purple-200{--bg-opacity:1!important;background-color:#e9d8fd!important;background-color:rgba(233,216,253,var(--bg-opacity))!important}.bg-purple-300{--bg-opacity:1!important;background-color:#d6bcfa!important;background-color:rgba(214,188,250,var(--bg-opacity))!important}.bg-purple-400{--bg-opacity:1!important;background-color:#b794f4!important;background-color:rgba(183,148,244,var(--bg-opacity))!important}.bg-purple-500{--bg-opacity:1!important;background-color:#9f7aea!important;background-color:rgba(159,122,234,var(--bg-opacity))!important}.bg-purple-600{--bg-opacity:1!important;background-color:#805ad5!important;background-color:rgba(128,90,213,var(--bg-opacity))!important}.bg-purple-700{--bg-opacity:1!important;background-color:#6b46c1!important;background-color:rgba(107,70,193,var(--bg-opacity))!important}.bg-purple-800{--bg-opacity:1!important;background-color:#553c9a!important;background-color:rgba(85,60,154,var(--bg-opacity))!important}.bg-purple-900{--bg-opacity:1!important;background-color:#44337a!important;background-color:rgba(68,51,122,var(--bg-opacity))!important}.bg-pink-100{--bg-opacity:1!important;background-color:#fff5f7!important;background-color:rgba(255,245,247,var(--bg-opacity))!important}.bg-pink-200{--bg-opacity:1!important;background-color:#fed7e2!important;background-color:rgba(254,215,226,var(--bg-opacity))!important}.bg-pink-300{--bg-opacity:1!important;background-color:#fbb6ce!important;background-color:rgba(251,182,206,var(--bg-opacity))!important}.bg-pink-400{--bg-opacity:1!important;background-color:#f687b3!important;background-color:rgba(246,135,179,var(--bg-opacity))!important}.bg-pink-500{--bg-opacity:1!important;background-color:#ed64a6!important;background-color:rgba(237,100,166,var(--bg-opacity))!important}.bg-pink-600{--bg-opacity:1!important;background-color:#d53f8c!important;background-color:rgba(213,63,140,var(--bg-opacity))!important}.bg-pink-700{--bg-opacity:1!important;background-color:#b83280!important;background-color:rgba(184,50,128,var(--bg-opacity))!important}.bg-pink-800{--bg-opacity:1!important;background-color:#97266d!important;background-color:rgba(151,38,109,var(--bg-opacity))!important}.bg-pink-900{--bg-opacity:1!important;background-color:#702459!important;background-color:rgba(112,36,89,var(--bg-opacity))!important}.hover\\:bg-transparent:hover{background-color:initial!important}.hover\\:bg-current:hover{background-color:currentColor!important}.hover\\:bg-black:hover{--bg-opacity:1!important;background-color:#000!important;background-color:rgba(0,0,0,var(--bg-opacity))!important}.hover\\:bg-white:hover{--bg-opacity:1!important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important}.hover\\:bg-gray-100:hover{--bg-opacity:1!important;background-color:#f7fafc!important;background-color:rgba(247,250,252,var(--bg-opacity))!important}.hover\\:bg-gray-200:hover{--bg-opacity:1!important;background-color:#edf2f7!important;background-color:rgba(237,242,247,var(--bg-opacity))!important}.hover\\:bg-gray-300:hover{--bg-opacity:1!important;background-color:#e2e8f0!important;background-color:rgba(226,232,240,var(--bg-opacity))!important}.hover\\:bg-gray-400:hover{--bg-opacity:1!important;background-color:#cbd5e0!important;background-color:rgba(203,213,224,var(--bg-opacity))!important}.hover\\:bg-gray-500:hover{--bg-opacity:1!important;background-color:#a0aec0!important;background-color:rgba(160,174,192,var(--bg-opacity))!important}.hover\\:bg-gray-600:hover{--bg-opacity:1!important;background-color:#718096!important;background-color:rgba(113,128,150,var(--bg-opacity))!important}.hover\\:bg-gray-700:hover{--bg-opacity:1!important;background-color:#4a5568!important;background-color:rgba(74,85,104,var(--bg-opacity))!important}.hover\\:bg-gray-800:hover{--bg-opacity:1!important;background-color:#2d3748!important;background-color:rgba(45,55,72,var(--bg-opacity))!important}.hover\\:bg-gray-900:hover{--bg-opacity:1!important;background-color:#1a202c!important;background-color:rgba(26,32,44,var(--bg-opacity))!important}.hover\\:bg-red-100:hover{--bg-opacity:1!important;background-color:#fff5f5!important;background-color:rgba(255,245,245,var(--bg-opacity))!important}.hover\\:bg-red-200:hover{--bg-opacity:1!important;background-color:#fed7d7!important;background-color:rgba(254,215,215,var(--bg-opacity))!important}.hover\\:bg-red-300:hover{--bg-opacity:1!important;background-color:#feb2b2!important;background-color:rgba(254,178,178,var(--bg-opacity))!important}.hover\\:bg-red-400:hover{--bg-opacity:1!important;background-color:#fc8181!important;background-color:rgba(252,129,129,var(--bg-opacity))!important}.hover\\:bg-red-500:hover{--bg-opacity:1!important;background-color:#f56565!important;background-color:rgba(245,101,101,var(--bg-opacity))!important}.hover\\:bg-red-600:hover{--bg-opacity:1!important;background-color:#e53e3e!important;background-color:rgba(229,62,62,var(--bg-opacity))!important}.hover\\:bg-red-700:hover{--bg-opacity:1!important;background-color:#c53030!important;background-color:rgba(197,48,48,var(--bg-opacity))!important}.hover\\:bg-red-800:hover{--bg-opacity:1!important;background-color:#9b2c2c!important;background-color:rgba(155,44,44,var(--bg-opacity))!important}.hover\\:bg-red-900:hover{--bg-opacity:1!important;background-color:#742a2a!important;background-color:rgba(116,42,42,var(--bg-opacity))!important}.hover\\:bg-orange-100:hover{--bg-opacity:1!important;background-color:#fffaf0!important;background-color:rgba(255,250,240,var(--bg-opacity))!important}.hover\\:bg-orange-200:hover{--bg-opacity:1!important;background-color:#feebc8!important;background-color:rgba(254,235,200,var(--bg-opacity))!important}.hover\\:bg-orange-300:hover{--bg-opacity:1!important;background-color:#fbd38d!important;background-color:rgba(251,211,141,var(--bg-opacity))!important}.hover\\:bg-orange-400:hover{--bg-opacity:1!important;background-color:#f6ad55!important;background-color:rgba(246,173,85,var(--bg-opacity))!important}.hover\\:bg-orange-500:hover{--bg-opacity:1!important;background-color:#ed8936!important;background-color:rgba(237,137,54,var(--bg-opacity))!important}.hover\\:bg-orange-600:hover{--bg-opacity:1!important;background-color:#dd6b20!important;background-color:rgba(221,107,32,var(--bg-opacity))!important}.hover\\:bg-orange-700:hover{--bg-opacity:1!important;background-color:#c05621!important;background-color:rgba(192,86,33,var(--bg-opacity))!important}.hover\\:bg-orange-800:hover{--bg-opacity:1!important;background-color:#9c4221!important;background-color:rgba(156,66,33,var(--bg-opacity))!important}.hover\\:bg-orange-900:hover{--bg-opacity:1!important;background-color:#7b341e!important;background-color:rgba(123,52,30,var(--bg-opacity))!important}.hover\\:bg-yellow-100:hover{--bg-opacity:1!important;background-color:ivory!important;background-color:rgba(255,255,240,var(--bg-opacity))!important}.hover\\:bg-yellow-200:hover{--bg-opacity:1!important;background-color:#fefcbf!important;background-color:rgba(254,252,191,var(--bg-opacity))!important}.hover\\:bg-yellow-300:hover{--bg-opacity:1!important;background-color:#faf089!important;background-color:rgba(250,240,137,var(--bg-opacity))!important}.hover\\:bg-yellow-400:hover{--bg-opacity:1!important;background-color:#f6e05e!important;background-color:rgba(246,224,94,var(--bg-opacity))!important}.hover\\:bg-yellow-500:hover{--bg-opacity:1!important;background-color:#ecc94b!important;background-color:rgba(236,201,75,var(--bg-opacity))!important}.hover\\:bg-yellow-600:hover{--bg-opacity:1!important;background-color:#d69e2e!important;background-color:rgba(214,158,46,var(--bg-opacity))!important}.hover\\:bg-yellow-700:hover{--bg-opacity:1!important;background-color:#b7791f!important;background-color:rgba(183,121,31,var(--bg-opacity))!important}.hover\\:bg-yellow-800:hover{--bg-opacity:1!important;background-color:#975a16!important;background-color:rgba(151,90,22,var(--bg-opacity))!important}.hover\\:bg-yellow-900:hover{--bg-opacity:1!important;background-color:#744210!important;background-color:rgba(116,66,16,var(--bg-opacity))!important}.hover\\:bg-green-100:hover{--bg-opacity:1!important;background-color:#f0fff4!important;background-color:rgba(240,255,244,var(--bg-opacity))!important}.hover\\:bg-green-200:hover{--bg-opacity:1!important;background-color:#c6f6d5!important;background-color:rgba(198,246,213,var(--bg-opacity))!important}.hover\\:bg-green-300:hover{--bg-opacity:1!important;background-color:#9ae6b4!important;background-color:rgba(154,230,180,var(--bg-opacity))!important}.hover\\:bg-green-400:hover{--bg-opacity:1!important;background-color:#68d391!important;background-color:rgba(104,211,145,var(--bg-opacity))!important}.hover\\:bg-green-500:hover{--bg-opacity:1!important;background-color:#48bb78!important;background-color:rgba(72,187,120,var(--bg-opacity))!important}.hover\\:bg-green-600:hover{--bg-opacity:1!important;background-color:#38a169!important;background-color:rgba(56,161,105,var(--bg-opacity))!important}.hover\\:bg-green-700:hover{--bg-opacity:1!important;background-color:#2f855a!important;background-color:rgba(47,133,90,var(--bg-opacity))!important}.hover\\:bg-green-800:hover{--bg-opacity:1!important;background-color:#276749!important;background-color:rgba(39,103,73,var(--bg-opacity))!important}.hover\\:bg-green-900:hover{--bg-opacity:1!important;background-color:#22543d!important;background-color:rgba(34,84,61,var(--bg-opacity))!important}.hover\\:bg-teal-100:hover{--bg-opacity:1!important;background-color:#e6fffa!important;background-color:rgba(230,255,250,var(--bg-opacity))!important}.hover\\:bg-teal-200:hover{--bg-opacity:1!important;background-color:#b2f5ea!important;background-color:rgba(178,245,234,var(--bg-opacity))!important}.hover\\:bg-teal-300:hover{--bg-opacity:1!important;background-color:#81e6d9!important;background-color:rgba(129,230,217,var(--bg-opacity))!important}.hover\\:bg-teal-400:hover{--bg-opacity:1!important;background-color:#4fd1c5!important;background-color:rgba(79,209,197,var(--bg-opacity))!important}.hover\\:bg-teal-500:hover{--bg-opacity:1!important;background-color:#38b2ac!important;background-color:rgba(56,178,172,var(--bg-opacity))!important}.hover\\:bg-teal-600:hover{--bg-opacity:1!important;background-color:#319795!important;background-color:rgba(49,151,149,var(--bg-opacity))!important}.hover\\:bg-teal-700:hover{--bg-opacity:1!important;background-color:#2c7a7b!important;background-color:rgba(44,122,123,var(--bg-opacity))!important}.hover\\:bg-teal-800:hover{--bg-opacity:1!important;background-color:#285e61!important;background-color:rgba(40,94,97,var(--bg-opacity))!important}.hover\\:bg-teal-900:hover{--bg-opacity:1!important;background-color:#234e52!important;background-color:rgba(35,78,82,var(--bg-opacity))!important}.hover\\:bg-blue-100:hover{--bg-opacity:1!important;background-color:#ebf8ff!important;background-color:rgba(235,248,255,var(--bg-opacity))!important}.hover\\:bg-blue-200:hover{--bg-opacity:1!important;background-color:#bee3f8!important;background-color:rgba(190,227,248,var(--bg-opacity))!important}.hover\\:bg-blue-300:hover{--bg-opacity:1!important;background-color:#90cdf4!important;background-color:rgba(144,205,244,var(--bg-opacity))!important}.hover\\:bg-blue-400:hover{--bg-opacity:1!important;background-color:#63b3ed!important;background-color:rgba(99,179,237,var(--bg-opacity))!important}.hover\\:bg-blue-500:hover{--bg-opacity:1!important;background-color:#4299e1!important;background-color:rgba(66,153,225,var(--bg-opacity))!important}.hover\\:bg-blue-600:hover{--bg-opacity:1!important;background-color:#3182ce!important;background-color:rgba(49,130,206,var(--bg-opacity))!important}.hover\\:bg-blue-700:hover{--bg-opacity:1!important;background-color:#2b6cb0!important;background-color:rgba(43,108,176,var(--bg-opacity))!important}.hover\\:bg-blue-800:hover{--bg-opacity:1!important;background-color:#2c5282!important;background-color:rgba(44,82,130,var(--bg-opacity))!important}.hover\\:bg-blue-900:hover{--bg-opacity:1!important;background-color:#2a4365!important;background-color:rgba(42,67,101,var(--bg-opacity))!important}.hover\\:bg-indigo-100:hover{--bg-opacity:1!important;background-color:#ebf4ff!important;background-color:rgba(235,244,255,var(--bg-opacity))!important}.hover\\:bg-indigo-200:hover{--bg-opacity:1!important;background-color:#c3dafe!important;background-color:rgba(195,218,254,var(--bg-opacity))!important}.hover\\:bg-indigo-300:hover{--bg-opacity:1!important;background-color:#a3bffa!important;background-color:rgba(163,191,250,var(--bg-opacity))!important}.hover\\:bg-indigo-400:hover{--bg-opacity:1!important;background-color:#7f9cf5!important;background-color:rgba(127,156,245,var(--bg-opacity))!important}.hover\\:bg-indigo-500:hover{--bg-opacity:1!important;background-color:#667eea!important;background-color:rgba(102,126,234,var(--bg-opacity))!important}.hover\\:bg-indigo-600:hover{--bg-opacity:1!important;background-color:#5a67d8!important;background-color:rgba(90,103,216,var(--bg-opacity))!important}.hover\\:bg-indigo-700:hover{--bg-opacity:1!important;background-color:#4c51bf!important;background-color:rgba(76,81,191,var(--bg-opacity))!important}.hover\\:bg-indigo-800:hover{--bg-opacity:1!important;background-color:#434190!important;background-color:rgba(67,65,144,var(--bg-opacity))!important}.hover\\:bg-indigo-900:hover{--bg-opacity:1!important;background-color:#3c366b!important;background-color:rgba(60,54,107,var(--bg-opacity))!important}.hover\\:bg-purple-100:hover{--bg-opacity:1!important;background-color:#faf5ff!important;background-color:rgba(250,245,255,var(--bg-opacity))!important}.hover\\:bg-purple-200:hover{--bg-opacity:1!important;background-color:#e9d8fd!important;background-color:rgba(233,216,253,var(--bg-opacity))!important}.hover\\:bg-purple-300:hover{--bg-opacity:1!important;background-color:#d6bcfa!important;background-color:rgba(214,188,250,var(--bg-opacity))!important}.hover\\:bg-purple-400:hover{--bg-opacity:1!important;background-color:#b794f4!important;background-color:rgba(183,148,244,var(--bg-opacity))!important}.hover\\:bg-purple-500:hover{--bg-opacity:1!important;background-color:#9f7aea!important;background-color:rgba(159,122,234,var(--bg-opacity))!important}.hover\\:bg-purple-600:hover{--bg-opacity:1!important;background-color:#805ad5!important;background-color:rgba(128,90,213,var(--bg-opacity))!important}.hover\\:bg-purple-700:hover{--bg-opacity:1!important;background-color:#6b46c1!important;background-color:rgba(107,70,193,var(--bg-opacity))!important}.hover\\:bg-purple-800:hover{--bg-opacity:1!important;background-color:#553c9a!important;background-color:rgba(85,60,154,var(--bg-opacity))!important}.hover\\:bg-purple-900:hover{--bg-opacity:1!important;background-color:#44337a!important;background-color:rgba(68,51,122,var(--bg-opacity))!important}.hover\\:bg-pink-100:hover{--bg-opacity:1!important;background-color:#fff5f7!important;background-color:rgba(255,245,247,var(--bg-opacity))!important}.hover\\:bg-pink-200:hover{--bg-opacity:1!important;background-color:#fed7e2!important;background-color:rgba(254,215,226,var(--bg-opacity))!important}.hover\\:bg-pink-300:hover{--bg-opacity:1!important;background-color:#fbb6ce!important;background-color:rgba(251,182,206,var(--bg-opacity))!important}.hover\\:bg-pink-400:hover{--bg-opacity:1!important;background-color:#f687b3!important;background-color:rgba(246,135,179,var(--bg-opacity))!important}.hover\\:bg-pink-500:hover{--bg-opacity:1!important;background-color:#ed64a6!important;background-color:rgba(237,100,166,var(--bg-opacity))!important}.hover\\:bg-pink-600:hover{--bg-opacity:1!important;background-color:#d53f8c!important;background-color:rgba(213,63,140,var(--bg-opacity))!important}.hover\\:bg-pink-700:hover{--bg-opacity:1!important;background-color:#b83280!important;background-color:rgba(184,50,128,var(--bg-opacity))!important}.hover\\:bg-pink-800:hover{--bg-opacity:1!important;background-color:#97266d!important;background-color:rgba(151,38,109,var(--bg-opacity))!important}.hover\\:bg-pink-900:hover{--bg-opacity:1!important;background-color:#702459!important;background-color:rgba(112,36,89,var(--bg-opacity))!important}.focus\\:bg-transparent:focus{background-color:initial!important}.focus\\:bg-current:focus{background-color:currentColor!important}.focus\\:bg-black:focus{--bg-opacity:1!important;background-color:#000!important;background-color:rgba(0,0,0,var(--bg-opacity))!important}.focus\\:bg-white:focus{--bg-opacity:1!important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important}.focus\\:bg-gray-100:focus{--bg-opacity:1!important;background-color:#f7fafc!important;background-color:rgba(247,250,252,var(--bg-opacity))!important}.focus\\:bg-gray-200:focus{--bg-opacity:1!important;background-color:#edf2f7!important;background-color:rgba(237,242,247,var(--bg-opacity))!important}.focus\\:bg-gray-300:focus{--bg-opacity:1!important;background-color:#e2e8f0!important;background-color:rgba(226,232,240,var(--bg-opacity))!important}.focus\\:bg-gray-400:focus{--bg-opacity:1!important;background-color:#cbd5e0!important;background-color:rgba(203,213,224,var(--bg-opacity))!important}.focus\\:bg-gray-500:focus{--bg-opacity:1!important;background-color:#a0aec0!important;background-color:rgba(160,174,192,var(--bg-opacity))!important}.focus\\:bg-gray-600:focus{--bg-opacity:1!important;background-color:#718096!important;background-color:rgba(113,128,150,var(--bg-opacity))!important}.focus\\:bg-gray-700:focus{--bg-opacity:1!important;background-color:#4a5568!important;background-color:rgba(74,85,104,var(--bg-opacity))!important}.focus\\:bg-gray-800:focus{--bg-opacity:1!important;background-color:#2d3748!important;background-color:rgba(45,55,72,var(--bg-opacity))!important}.focus\\:bg-gray-900:focus{--bg-opacity:1!important;background-color:#1a202c!important;background-color:rgba(26,32,44,var(--bg-opacity))!important}.focus\\:bg-red-100:focus{--bg-opacity:1!important;background-color:#fff5f5!important;background-color:rgba(255,245,245,var(--bg-opacity))!important}.focus\\:bg-red-200:focus{--bg-opacity:1!important;background-color:#fed7d7!important;background-color:rgba(254,215,215,var(--bg-opacity))!important}.focus\\:bg-red-300:focus{--bg-opacity:1!important;background-color:#feb2b2!important;background-color:rgba(254,178,178,var(--bg-opacity))!important}.focus\\:bg-red-400:focus{--bg-opacity:1!important;background-color:#fc8181!important;background-color:rgba(252,129,129,var(--bg-opacity))!important}.focus\\:bg-red-500:focus{--bg-opacity:1!important;background-color:#f56565!important;background-color:rgba(245,101,101,var(--bg-opacity))!important}.focus\\:bg-red-600:focus{--bg-opacity:1!important;background-color:#e53e3e!important;background-color:rgba(229,62,62,var(--bg-opacity))!important}.focus\\:bg-red-700:focus{--bg-opacity:1!important;background-color:#c53030!important;background-color:rgba(197,48,48,var(--bg-opacity))!important}.focus\\:bg-red-800:focus{--bg-opacity:1!important;background-color:#9b2c2c!important;background-color:rgba(155,44,44,var(--bg-opacity))!important}.focus\\:bg-red-900:focus{--bg-opacity:1!important;background-color:#742a2a!important;background-color:rgba(116,42,42,var(--bg-opacity))!important}.focus\\:bg-orange-100:focus{--bg-opacity:1!important;background-color:#fffaf0!important;background-color:rgba(255,250,240,var(--bg-opacity))!important}.focus\\:bg-orange-200:focus{--bg-opacity:1!important;background-color:#feebc8!important;background-color:rgba(254,235,200,var(--bg-opacity))!important}.focus\\:bg-orange-300:focus{--bg-opacity:1!important;background-color:#fbd38d!important;background-color:rgba(251,211,141,var(--bg-opacity))!important}.focus\\:bg-orange-400:focus{--bg-opacity:1!important;background-color:#f6ad55!important;background-color:rgba(246,173,85,var(--bg-opacity))!important}.focus\\:bg-orange-500:focus{--bg-opacity:1!important;background-color:#ed8936!important;background-color:rgba(237,137,54,var(--bg-opacity))!important}.focus\\:bg-orange-600:focus{--bg-opacity:1!important;background-color:#dd6b20!important;background-color:rgba(221,107,32,var(--bg-opacity))!important}.focus\\:bg-orange-700:focus{--bg-opacity:1!important;background-color:#c05621!important;background-color:rgba(192,86,33,var(--bg-opacity))!important}.focus\\:bg-orange-800:focus{--bg-opacity:1!important;background-color:#9c4221!important;background-color:rgba(156,66,33,var(--bg-opacity))!important}.focus\\:bg-orange-900:focus{--bg-opacity:1!important;background-color:#7b341e!important;background-color:rgba(123,52,30,var(--bg-opacity))!important}.focus\\:bg-yellow-100:focus{--bg-opacity:1!important;background-color:ivory!important;background-color:rgba(255,255,240,var(--bg-opacity))!important}.focus\\:bg-yellow-200:focus{--bg-opacity:1!important;background-color:#fefcbf!important;background-color:rgba(254,252,191,var(--bg-opacity))!important}.focus\\:bg-yellow-300:focus{--bg-opacity:1!important;background-color:#faf089!important;background-color:rgba(250,240,137,var(--bg-opacity))!important}.focus\\:bg-yellow-400:focus{--bg-opacity:1!important;background-color:#f6e05e!important;background-color:rgba(246,224,94,var(--bg-opacity))!important}.focus\\:bg-yellow-500:focus{--bg-opacity:1!important;background-color:#ecc94b!important;background-color:rgba(236,201,75,var(--bg-opacity))!important}.focus\\:bg-yellow-600:focus{--bg-opacity:1!important;background-color:#d69e2e!important;background-color:rgba(214,158,46,var(--bg-opacity))!important}.focus\\:bg-yellow-700:focus{--bg-opacity:1!important;background-color:#b7791f!important;background-color:rgba(183,121,31,var(--bg-opacity))!important}.focus\\:bg-yellow-800:focus{--bg-opacity:1!important;background-color:#975a16!important;background-color:rgba(151,90,22,var(--bg-opacity))!important}.focus\\:bg-yellow-900:focus{--bg-opacity:1!important;background-color:#744210!important;background-color:rgba(116,66,16,var(--bg-opacity))!important}.focus\\:bg-green-100:focus{--bg-opacity:1!important;background-color:#f0fff4!important;background-color:rgba(240,255,244,var(--bg-opacity))!important}.focus\\:bg-green-200:focus{--bg-opacity:1!important;background-color:#c6f6d5!important;background-color:rgba(198,246,213,var(--bg-opacity))!important}.focus\\:bg-green-300:focus{--bg-opacity:1!important;background-color:#9ae6b4!important;background-color:rgba(154,230,180,var(--bg-opacity))!important}.focus\\:bg-green-400:focus{--bg-opacity:1!important;background-color:#68d391!important;background-color:rgba(104,211,145,var(--bg-opacity))!important}.focus\\:bg-green-500:focus{--bg-opacity:1!important;background-color:#48bb78!important;background-color:rgba(72,187,120,var(--bg-opacity))!important}.focus\\:bg-green-600:focus{--bg-opacity:1!important;background-color:#38a169!important;background-color:rgba(56,161,105,var(--bg-opacity))!important}.focus\\:bg-green-700:focus{--bg-opacity:1!important;background-color:#2f855a!important;background-color:rgba(47,133,90,var(--bg-opacity))!important}.focus\\:bg-green-800:focus{--bg-opacity:1!important;background-color:#276749!important;background-color:rgba(39,103,73,var(--bg-opacity))!important}.focus\\:bg-green-900:focus{--bg-opacity:1!important;background-color:#22543d!important;background-color:rgba(34,84,61,var(--bg-opacity))!important}.focus\\:bg-teal-100:focus{--bg-opacity:1!important;background-color:#e6fffa!important;background-color:rgba(230,255,250,var(--bg-opacity))!important}.focus\\:bg-teal-200:focus{--bg-opacity:1!important;background-color:#b2f5ea!important;background-color:rgba(178,245,234,var(--bg-opacity))!important}.focus\\:bg-teal-300:focus{--bg-opacity:1!important;background-color:#81e6d9!important;background-color:rgba(129,230,217,var(--bg-opacity))!important}.focus\\:bg-teal-400:focus{--bg-opacity:1!important;background-color:#4fd1c5!important;background-color:rgba(79,209,197,var(--bg-opacity))!important}.focus\\:bg-teal-500:focus{--bg-opacity:1!important;background-color:#38b2ac!important;background-color:rgba(56,178,172,var(--bg-opacity))!important}.focus\\:bg-teal-600:focus{--bg-opacity:1!important;background-color:#319795!important;background-color:rgba(49,151,149,var(--bg-opacity))!important}.focus\\:bg-teal-700:focus{--bg-opacity:1!important;background-color:#2c7a7b!important;background-color:rgba(44,122,123,var(--bg-opacity))!important}.focus\\:bg-teal-800:focus{--bg-opacity:1!important;background-color:#285e61!important;background-color:rgba(40,94,97,var(--bg-opacity))!important}.focus\\:bg-teal-900:focus{--bg-opacity:1!important;background-color:#234e52!important;background-color:rgba(35,78,82,var(--bg-opacity))!important}.focus\\:bg-blue-100:focus{--bg-opacity:1!important;background-color:#ebf8ff!important;background-color:rgba(235,248,255,var(--bg-opacity))!important}.focus\\:bg-blue-200:focus{--bg-opacity:1!important;background-color:#bee3f8!important;background-color:rgba(190,227,248,var(--bg-opacity))!important}.focus\\:bg-blue-300:focus{--bg-opacity:1!important;background-color:#90cdf4!important;background-color:rgba(144,205,244,var(--bg-opacity))!important}.focus\\:bg-blue-400:focus{--bg-opacity:1!important;background-color:#63b3ed!important;background-color:rgba(99,179,237,var(--bg-opacity))!important}.focus\\:bg-blue-500:focus{--bg-opacity:1!important;background-color:#4299e1!important;background-color:rgba(66,153,225,var(--bg-opacity))!important}.focus\\:bg-blue-600:focus{--bg-opacity:1!important;background-color:#3182ce!important;background-color:rgba(49,130,206,var(--bg-opacity))!important}.focus\\:bg-blue-700:focus{--bg-opacity:1!important;background-color:#2b6cb0!important;background-color:rgba(43,108,176,var(--bg-opacity))!important}.focus\\:bg-blue-800:focus{--bg-opacity:1!important;background-color:#2c5282!important;background-color:rgba(44,82,130,var(--bg-opacity))!important}.focus\\:bg-blue-900:focus{--bg-opacity:1!important;background-color:#2a4365!important;background-color:rgba(42,67,101,var(--bg-opacity))!important}.focus\\:bg-indigo-100:focus{--bg-opacity:1!important;background-color:#ebf4ff!important;background-color:rgba(235,244,255,var(--bg-opacity))!important}.focus\\:bg-indigo-200:focus{--bg-opacity:1!important;background-color:#c3dafe!important;background-color:rgba(195,218,254,var(--bg-opacity))!important}.focus\\:bg-indigo-300:focus{--bg-opacity:1!important;background-color:#a3bffa!important;background-color:rgba(163,191,250,var(--bg-opacity))!important}.focus\\:bg-indigo-400:focus{--bg-opacity:1!important;background-color:#7f9cf5!important;background-color:rgba(127,156,245,var(--bg-opacity))!important}.focus\\:bg-indigo-500:focus{--bg-opacity:1!important;background-color:#667eea!important;background-color:rgba(102,126,234,var(--bg-opacity))!important}.focus\\:bg-indigo-600:focus{--bg-opacity:1!important;background-color:#5a67d8!important;background-color:rgba(90,103,216,var(--bg-opacity))!important}.focus\\:bg-indigo-700:focus{--bg-opacity:1!important;background-color:#4c51bf!important;background-color:rgba(76,81,191,var(--bg-opacity))!important}.focus\\:bg-indigo-800:focus{--bg-opacity:1!important;background-color:#434190!important;background-color:rgba(67,65,144,var(--bg-opacity))!important}.focus\\:bg-indigo-900:focus{--bg-opacity:1!important;background-color:#3c366b!important;background-color:rgba(60,54,107,var(--bg-opacity))!important}.focus\\:bg-purple-100:focus{--bg-opacity:1!important;background-color:#faf5ff!important;background-color:rgba(250,245,255,var(--bg-opacity))!important}.focus\\:bg-purple-200:focus{--bg-opacity:1!important;background-color:#e9d8fd!important;background-color:rgba(233,216,253,var(--bg-opacity))!important}.focus\\:bg-purple-300:focus{--bg-opacity:1!important;background-color:#d6bcfa!important;background-color:rgba(214,188,250,var(--bg-opacity))!important}.focus\\:bg-purple-400:focus{--bg-opacity:1!important;background-color:#b794f4!important;background-color:rgba(183,148,244,var(--bg-opacity))!important}.focus\\:bg-purple-500:focus{--bg-opacity:1!important;background-color:#9f7aea!important;background-color:rgba(159,122,234,var(--bg-opacity))!important}.focus\\:bg-purple-600:focus{--bg-opacity:1!important;background-color:#805ad5!important;background-color:rgba(128,90,213,var(--bg-opacity))!important}.focus\\:bg-purple-700:focus{--bg-opacity:1!important;background-color:#6b46c1!important;background-color:rgba(107,70,193,var(--bg-opacity))!important}.focus\\:bg-purple-800:focus{--bg-opacity:1!important;background-color:#553c9a!important;background-color:rgba(85,60,154,var(--bg-opacity))!important}.focus\\:bg-purple-900:focus{--bg-opacity:1!important;background-color:#44337a!important;background-color:rgba(68,51,122,var(--bg-opacity))!important}.focus\\:bg-pink-100:focus{--bg-opacity:1!important;background-color:#fff5f7!important;background-color:rgba(255,245,247,var(--bg-opacity))!important}.focus\\:bg-pink-200:focus{--bg-opacity:1!important;background-color:#fed7e2!important;background-color:rgba(254,215,226,var(--bg-opacity))!important}.focus\\:bg-pink-300:focus{--bg-opacity:1!important;background-color:#fbb6ce!important;background-color:rgba(251,182,206,var(--bg-opacity))!important}.focus\\:bg-pink-400:focus{--bg-opacity:1!important;background-color:#f687b3!important;background-color:rgba(246,135,179,var(--bg-opacity))!important}.focus\\:bg-pink-500:focus{--bg-opacity:1!important;background-color:#ed64a6!important;background-color:rgba(237,100,166,var(--bg-opacity))!important}.focus\\:bg-pink-600:focus{--bg-opacity:1!important;background-color:#d53f8c!important;background-color:rgba(213,63,140,var(--bg-opacity))!important}.focus\\:bg-pink-700:focus{--bg-opacity:1!important;background-color:#b83280!important;background-color:rgba(184,50,128,var(--bg-opacity))!important}.focus\\:bg-pink-800:focus{--bg-opacity:1!important;background-color:#97266d!important;background-color:rgba(151,38,109,var(--bg-opacity))!important}.focus\\:bg-pink-900:focus{--bg-opacity:1!important;background-color:#702459!important;background-color:rgba(112,36,89,var(--bg-opacity))!important}.bg-none{background-image:none!important}.bg-gradient-to-t{background-image:linear-gradient(0deg,var(--gradient-color-stops))!important}.bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--gradient-color-stops))!important}.bg-gradient-to-r{background-image:linear-gradient(90deg,var(--gradient-color-stops))!important}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--gradient-color-stops))!important}.bg-gradient-to-b{background-image:linear-gradient(180deg,var(--gradient-color-stops))!important}.bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--gradient-color-stops))!important}.bg-gradient-to-l{background-image:linear-gradient(270deg,var(--gradient-color-stops))!important}.bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--gradient-color-stops))!important}.from-transparent{--gradient-from-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}.from-current{--gradient-from-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}.from-black{--gradient-from-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}.from-white{--gradient-from-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}.from-gray-100{--gradient-from-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))!important}.from-gray-200{--gradient-from-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))!important}.from-gray-300{--gradient-from-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))!important}.from-gray-400{--gradient-from-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))!important}.from-gray-500{--gradient-from-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))!important}.from-gray-600{--gradient-from-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))!important}.from-gray-700{--gradient-from-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))!important}.from-gray-800{--gradient-from-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))!important}.from-gray-900{--gradient-from-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))!important}.from-red-100{--gradient-from-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}.from-red-200{--gradient-from-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,215,0))!important}.from-red-300{--gradient-from-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,178,178,0))!important}.from-red-400{--gradient-from-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(252,129,129,0))!important}.from-red-500{--gradient-from-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(245,101,101,0))!important}.from-red-600{--gradient-from-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(229,62,62,0))!important}.from-red-700{--gradient-from-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(197,48,48,0))!important}.from-red-800{--gradient-from-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(155,44,44,0))!important}.from-red-900{--gradient-from-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,42,42,0))!important}.from-orange-100{--gradient-from-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,250,240,0))!important}.from-orange-200{--gradient-from-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,235,200,0))!important}.from-orange-300{--gradient-from-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,211,141,0))!important}.from-orange-400{--gradient-from-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,173,85,0))!important}.from-orange-500{--gradient-from-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,137,54,0))!important}.from-orange-600{--gradient-from-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(221,107,32,0))!important}.from-orange-700{--gradient-from-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(192,86,33,0))!important}.from-orange-800{--gradient-from-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156,66,33,0))!important}.from-orange-900{--gradient-from-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(123,52,30,0))!important}.from-yellow-100{--gradient-from-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,255,240,0))!important}.from-yellow-200{--gradient-from-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,252,191,0))!important}.from-yellow-300{--gradient-from-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,240,137,0))!important}.from-yellow-400{--gradient-from-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,224,94,0))!important}.from-yellow-500{--gradient-from-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(236,201,75,0))!important}.from-yellow-600{--gradient-from-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,158,46,0))!important}.from-yellow-700{--gradient-from-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,121,31,0))!important}.from-yellow-800{--gradient-from-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,90,22,0))!important}.from-yellow-900{--gradient-from-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,66,16,0))!important}.from-green-100{--gradient-from-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))!important}.from-green-200{--gradient-from-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))!important}.from-green-300{--gradient-from-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))!important}.from-green-400{--gradient-from-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))!important}.from-green-500{--gradient-from-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))!important}.from-green-600{--gradient-from-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))!important}.from-green-700{--gradient-from-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))!important}.from-green-800{--gradient-from-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))!important}.from-green-900{--gradient-from-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))!important}.from-teal-100{--gradient-from-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))!important}.from-teal-200{--gradient-from-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))!important}.from-teal-300{--gradient-from-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))!important}.from-teal-400{--gradient-from-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))!important}.from-teal-500{--gradient-from-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))!important}.from-teal-600{--gradient-from-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))!important}.from-teal-700{--gradient-from-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))!important}.from-teal-800{--gradient-from-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))!important}.from-teal-900{--gradient-from-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))!important}.from-blue-100{--gradient-from-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,248,255,0))!important}.from-blue-200{--gradient-from-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(190,227,248,0))!important}.from-blue-300{--gradient-from-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(144,205,244,0))!important}.from-blue-400{--gradient-from-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(99,179,237,0))!important}.from-blue-500{--gradient-from-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(66,153,225,0))!important}.from-blue-600{--gradient-from-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,130,206,0))!important}.from-blue-700{--gradient-from-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(43,108,176,0))!important}.from-blue-800{--gradient-from-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,82,130,0))!important}.from-blue-900{--gradient-from-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(42,67,101,0))!important}.from-indigo-100{--gradient-from-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))!important}.from-indigo-200{--gradient-from-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))!important}.from-indigo-300{--gradient-from-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))!important}.from-indigo-400{--gradient-from-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))!important}.from-indigo-500{--gradient-from-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))!important}.from-indigo-600{--gradient-from-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))!important}.from-indigo-700{--gradient-from-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))!important}.from-indigo-800{--gradient-from-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))!important}.from-indigo-900{--gradient-from-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))!important}.from-purple-100{--gradient-from-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))!important}.from-purple-200{--gradient-from-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))!important}.from-purple-300{--gradient-from-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))!important}.from-purple-400{--gradient-from-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))!important}.from-purple-500{--gradient-from-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))!important}.from-purple-600{--gradient-from-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))!important}.from-purple-700{--gradient-from-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))!important}.from-purple-800{--gradient-from-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))!important}.from-purple-900{--gradient-from-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))!important}.from-pink-100{--gradient-from-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,245,247,0))!important}.from-pink-200{--gradient-from-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,226,0))!important}.from-pink-300{--gradient-from-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,182,206,0))!important}.from-pink-400{--gradient-from-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,135,179,0))!important}.from-pink-500{--gradient-from-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,100,166,0))!important}.from-pink-600{--gradient-from-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213,63,140,0))!important}.from-pink-700{--gradient-from-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(184,50,128,0))!important}.from-pink-800{--gradient-from-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,38,109,0))!important}.from-pink-900{--gradient-from-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(112,36,89,0))!important}.via-transparent{--gradient-via-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}.via-current{--gradient-via-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}.via-black{--gradient-via-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}.via-white{--gradient-via-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}.via-gray-100{--gradient-via-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))!important}.via-gray-200{--gradient-via-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))!important}.via-gray-300{--gradient-via-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))!important}.via-gray-400{--gradient-via-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))!important}.via-gray-500{--gradient-via-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))!important}.via-gray-600{--gradient-via-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))!important}.via-gray-700{--gradient-via-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))!important}.via-gray-800{--gradient-via-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))!important}.via-gray-900{--gradient-via-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))!important}.via-red-100{--gradient-via-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}.via-red-200{--gradient-via-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,215,0))!important}.via-red-300{--gradient-via-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,178,178,0))!important}.via-red-400{--gradient-via-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(252,129,129,0))!important}.via-red-500{--gradient-via-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(245,101,101,0))!important}.via-red-600{--gradient-via-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(229,62,62,0))!important}.via-red-700{--gradient-via-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(197,48,48,0))!important}.via-red-800{--gradient-via-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(155,44,44,0))!important}.via-red-900{--gradient-via-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,42,42,0))!important}.via-orange-100{--gradient-via-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,250,240,0))!important}.via-orange-200{--gradient-via-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,235,200,0))!important}.via-orange-300{--gradient-via-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,211,141,0))!important}.via-orange-400{--gradient-via-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,173,85,0))!important}.via-orange-500{--gradient-via-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,137,54,0))!important}.via-orange-600{--gradient-via-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(221,107,32,0))!important}.via-orange-700{--gradient-via-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(192,86,33,0))!important}.via-orange-800{--gradient-via-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156,66,33,0))!important}.via-orange-900{--gradient-via-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(123,52,30,0))!important}.via-yellow-100{--gradient-via-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,255,240,0))!important}.via-yellow-200{--gradient-via-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,252,191,0))!important}.via-yellow-300{--gradient-via-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,240,137,0))!important}.via-yellow-400{--gradient-via-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,224,94,0))!important}.via-yellow-500{--gradient-via-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(236,201,75,0))!important}.via-yellow-600{--gradient-via-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,158,46,0))!important}.via-yellow-700{--gradient-via-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,121,31,0))!important}.via-yellow-800{--gradient-via-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,90,22,0))!important}.via-yellow-900{--gradient-via-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,66,16,0))!important}.via-green-100{--gradient-via-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))!important}.via-green-200{--gradient-via-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))!important}.via-green-300{--gradient-via-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))!important}.via-green-400{--gradient-via-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))!important}.via-green-500{--gradient-via-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))!important}.via-green-600{--gradient-via-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))!important}.via-green-700{--gradient-via-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))!important}.via-green-800{--gradient-via-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))!important}.via-green-900{--gradient-via-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))!important}.via-teal-100{--gradient-via-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))!important}.via-teal-200{--gradient-via-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))!important}.via-teal-300{--gradient-via-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))!important}.via-teal-400{--gradient-via-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))!important}.via-teal-500{--gradient-via-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))!important}.via-teal-600{--gradient-via-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))!important}.via-teal-700{--gradient-via-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))!important}.via-teal-800{--gradient-via-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))!important}.via-teal-900{--gradient-via-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))!important}.via-blue-100{--gradient-via-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,248,255,0))!important}.via-blue-200{--gradient-via-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(190,227,248,0))!important}.via-blue-300{--gradient-via-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(144,205,244,0))!important}.via-blue-400{--gradient-via-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(99,179,237,0))!important}.via-blue-500{--gradient-via-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(66,153,225,0))!important}.via-blue-600{--gradient-via-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,130,206,0))!important}.via-blue-700{--gradient-via-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(43,108,176,0))!important}.via-blue-800{--gradient-via-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,82,130,0))!important}.via-blue-900{--gradient-via-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(42,67,101,0))!important}.via-indigo-100{--gradient-via-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))!important}.via-indigo-200{--gradient-via-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))!important}.via-indigo-300{--gradient-via-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))!important}.via-indigo-400{--gradient-via-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))!important}.via-indigo-500{--gradient-via-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))!important}.via-indigo-600{--gradient-via-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))!important}.via-indigo-700{--gradient-via-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))!important}.via-indigo-800{--gradient-via-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))!important}.via-indigo-900{--gradient-via-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))!important}.via-purple-100{--gradient-via-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))!important}.via-purple-200{--gradient-via-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))!important}.via-purple-300{--gradient-via-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))!important}.via-purple-400{--gradient-via-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))!important}.via-purple-500{--gradient-via-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))!important}.via-purple-600{--gradient-via-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))!important}.via-purple-700{--gradient-via-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))!important}.via-purple-800{--gradient-via-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))!important}.via-purple-900{--gradient-via-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))!important}.via-pink-100{--gradient-via-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,245,247,0))!important}.via-pink-200{--gradient-via-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,226,0))!important}.via-pink-300{--gradient-via-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,182,206,0))!important}.via-pink-400{--gradient-via-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,135,179,0))!important}.via-pink-500{--gradient-via-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,100,166,0))!important}.via-pink-600{--gradient-via-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213,63,140,0))!important}.via-pink-700{--gradient-via-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(184,50,128,0))!important}.via-pink-800{--gradient-via-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,38,109,0))!important}.via-pink-900{--gradient-via-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(112,36,89,0))!important}.to-transparent{--gradient-to-color:transparent!important}.to-current{--gradient-to-color:currentColor!important}.to-black{--gradient-to-color:#000!important}.to-white{--gradient-to-color:#fff!important}.to-gray-100{--gradient-to-color:#f7fafc!important}.to-gray-200{--gradient-to-color:#edf2f7!important}.to-gray-300{--gradient-to-color:#e2e8f0!important}.to-gray-400{--gradient-to-color:#cbd5e0!important}.to-gray-500{--gradient-to-color:#a0aec0!important}.to-gray-600{--gradient-to-color:#718096!important}.to-gray-700{--gradient-to-color:#4a5568!important}.to-gray-800{--gradient-to-color:#2d3748!important}.to-gray-900{--gradient-to-color:#1a202c!important}.to-red-100{--gradient-to-color:#fff5f5!important}.to-red-200{--gradient-to-color:#fed7d7!important}.to-red-300{--gradient-to-color:#feb2b2!important}.to-red-400{--gradient-to-color:#fc8181!important}.to-red-500{--gradient-to-color:#f56565!important}.to-red-600{--gradient-to-color:#e53e3e!important}.to-red-700{--gradient-to-color:#c53030!important}.to-red-800{--gradient-to-color:#9b2c2c!important}.to-red-900{--gradient-to-color:#742a2a!important}.to-orange-100{--gradient-to-color:#fffaf0!important}.to-orange-200{--gradient-to-color:#feebc8!important}.to-orange-300{--gradient-to-color:#fbd38d!important}.to-orange-400{--gradient-to-color:#f6ad55!important}.to-orange-500{--gradient-to-color:#ed8936!important}.to-orange-600{--gradient-to-color:#dd6b20!important}.to-orange-700{--gradient-to-color:#c05621!important}.to-orange-800{--gradient-to-color:#9c4221!important}.to-orange-900{--gradient-to-color:#7b341e!important}.to-yellow-100{--gradient-to-color:ivory!important}.to-yellow-200{--gradient-to-color:#fefcbf!important}.to-yellow-300{--gradient-to-color:#faf089!important}.to-yellow-400{--gradient-to-color:#f6e05e!important}.to-yellow-500{--gradient-to-color:#ecc94b!important}.to-yellow-600{--gradient-to-color:#d69e2e!important}.to-yellow-700{--gradient-to-color:#b7791f!important}.to-yellow-800{--gradient-to-color:#975a16!important}.to-yellow-900{--gradient-to-color:#744210!important}.to-green-100{--gradient-to-color:#f0fff4!important}.to-green-200{--gradient-to-color:#c6f6d5!important}.to-green-300{--gradient-to-color:#9ae6b4!important}.to-green-400{--gradient-to-color:#68d391!important}.to-green-500{--gradient-to-color:#48bb78!important}.to-green-600{--gradient-to-color:#38a169!important}.to-green-700{--gradient-to-color:#2f855a!important}.to-green-800{--gradient-to-color:#276749!important}.to-green-900{--gradient-to-color:#22543d!important}.to-teal-100{--gradient-to-color:#e6fffa!important}.to-teal-200{--gradient-to-color:#b2f5ea!important}.to-teal-300{--gradient-to-color:#81e6d9!important}.to-teal-400{--gradient-to-color:#4fd1c5!important}.to-teal-500{--gradient-to-color:#38b2ac!important}.to-teal-600{--gradient-to-color:#319795!important}.to-teal-700{--gradient-to-color:#2c7a7b!important}.to-teal-800{--gradient-to-color:#285e61!important}.to-teal-900{--gradient-to-color:#234e52!important}.to-blue-100{--gradient-to-color:#ebf8ff!important}.to-blue-200{--gradient-to-color:#bee3f8!important}.to-blue-300{--gradient-to-color:#90cdf4!important}.to-blue-400{--gradient-to-color:#63b3ed!important}.to-blue-500{--gradient-to-color:#4299e1!important}.to-blue-600{--gradient-to-color:#3182ce!important}.to-blue-700{--gradient-to-color:#2b6cb0!important}.to-blue-800{--gradient-to-color:#2c5282!important}.to-blue-900{--gradient-to-color:#2a4365!important}.to-indigo-100{--gradient-to-color:#ebf4ff!important}.to-indigo-200{--gradient-to-color:#c3dafe!important}.to-indigo-300{--gradient-to-color:#a3bffa!important}.to-indigo-400{--gradient-to-color:#7f9cf5!important}.to-indigo-500{--gradient-to-color:#667eea!important}.to-indigo-600{--gradient-to-color:#5a67d8!important}.to-indigo-700{--gradient-to-color:#4c51bf!important}.to-indigo-800{--gradient-to-color:#434190!important}.to-indigo-900{--gradient-to-color:#3c366b!important}.to-purple-100{--gradient-to-color:#faf5ff!important}.to-purple-200{--gradient-to-color:#e9d8fd!important}.to-purple-300{--gradient-to-color:#d6bcfa!important}.to-purple-400{--gradient-to-color:#b794f4!important}.to-purple-500{--gradient-to-color:#9f7aea!important}.to-purple-600{--gradient-to-color:#805ad5!important}.to-purple-700{--gradient-to-color:#6b46c1!important}.to-purple-800{--gradient-to-color:#553c9a!important}.to-purple-900{--gradient-to-color:#44337a!important}.to-pink-100{--gradient-to-color:#fff5f7!important}.to-pink-200{--gradient-to-color:#fed7e2!important}.to-pink-300{--gradient-to-color:#fbb6ce!important}.to-pink-400{--gradient-to-color:#f687b3!important}.to-pink-500{--gradient-to-color:#ed64a6!important}.to-pink-600{--gradient-to-color:#d53f8c!important}.to-pink-700{--gradient-to-color:#b83280!important}.to-pink-800{--gradient-to-color:#97266d!important}.to-pink-900{--gradient-to-color:#702459!important}.hover\\:from-transparent:hover{--gradient-from-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}.hover\\:from-current:hover{--gradient-from-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}.hover\\:from-black:hover{--gradient-from-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}.hover\\:from-white:hover{--gradient-from-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}.hover\\:from-gray-100:hover{--gradient-from-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))!important}.hover\\:from-gray-200:hover{--gradient-from-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))!important}.hover\\:from-gray-300:hover{--gradient-from-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))!important}.hover\\:from-gray-400:hover{--gradient-from-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))!important}.hover\\:from-gray-500:hover{--gradient-from-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))!important}.hover\\:from-gray-600:hover{--gradient-from-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))!important}.hover\\:from-gray-700:hover{--gradient-from-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))!important}.hover\\:from-gray-800:hover{--gradient-from-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))!important}.hover\\:from-gray-900:hover{--gradient-from-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))!important}.hover\\:from-red-100:hover{--gradient-from-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}.hover\\:from-red-200:hover{--gradient-from-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,215,0))!important}.hover\\:from-red-300:hover{--gradient-from-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,178,178,0))!important}.hover\\:from-red-400:hover{--gradient-from-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(252,129,129,0))!important}.hover\\:from-red-500:hover{--gradient-from-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(245,101,101,0))!important}.hover\\:from-red-600:hover{--gradient-from-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(229,62,62,0))!important}.hover\\:from-red-700:hover{--gradient-from-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(197,48,48,0))!important}.hover\\:from-red-800:hover{--gradient-from-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(155,44,44,0))!important}.hover\\:from-red-900:hover{--gradient-from-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,42,42,0))!important}.hover\\:from-orange-100:hover{--gradient-from-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,250,240,0))!important}.hover\\:from-orange-200:hover{--gradient-from-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,235,200,0))!important}.hover\\:from-orange-300:hover{--gradient-from-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,211,141,0))!important}.hover\\:from-orange-400:hover{--gradient-from-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,173,85,0))!important}.hover\\:from-orange-500:hover{--gradient-from-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,137,54,0))!important}.hover\\:from-orange-600:hover{--gradient-from-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(221,107,32,0))!important}.hover\\:from-orange-700:hover{--gradient-from-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(192,86,33,0))!important}.hover\\:from-orange-800:hover{--gradient-from-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156,66,33,0))!important}.hover\\:from-orange-900:hover{--gradient-from-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(123,52,30,0))!important}.hover\\:from-yellow-100:hover{--gradient-from-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,255,240,0))!important}.hover\\:from-yellow-200:hover{--gradient-from-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,252,191,0))!important}.hover\\:from-yellow-300:hover{--gradient-from-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,240,137,0))!important}.hover\\:from-yellow-400:hover{--gradient-from-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,224,94,0))!important}.hover\\:from-yellow-500:hover{--gradient-from-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(236,201,75,0))!important}.hover\\:from-yellow-600:hover{--gradient-from-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,158,46,0))!important}.hover\\:from-yellow-700:hover{--gradient-from-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,121,31,0))!important}.hover\\:from-yellow-800:hover{--gradient-from-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,90,22,0))!important}.hover\\:from-yellow-900:hover{--gradient-from-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,66,16,0))!important}.hover\\:from-green-100:hover{--gradient-from-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))!important}.hover\\:from-green-200:hover{--gradient-from-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))!important}.hover\\:from-green-300:hover{--gradient-from-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))!important}.hover\\:from-green-400:hover{--gradient-from-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))!important}.hover\\:from-green-500:hover{--gradient-from-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))!important}.hover\\:from-green-600:hover{--gradient-from-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))!important}.hover\\:from-green-700:hover{--gradient-from-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))!important}.hover\\:from-green-800:hover{--gradient-from-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))!important}.hover\\:from-green-900:hover{--gradient-from-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))!important}.hover\\:from-teal-100:hover{--gradient-from-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))!important}.hover\\:from-teal-200:hover{--gradient-from-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))!important}.hover\\:from-teal-300:hover{--gradient-from-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))!important}.hover\\:from-teal-400:hover{--gradient-from-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))!important}.hover\\:from-teal-500:hover{--gradient-from-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))!important}.hover\\:from-teal-600:hover{--gradient-from-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))!important}.hover\\:from-teal-700:hover{--gradient-from-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))!important}.hover\\:from-teal-800:hover{--gradient-from-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))!important}.hover\\:from-teal-900:hover{--gradient-from-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))!important}.hover\\:from-blue-100:hover{--gradient-from-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,248,255,0))!important}.hover\\:from-blue-200:hover{--gradient-from-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(190,227,248,0))!important}.hover\\:from-blue-300:hover{--gradient-from-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(144,205,244,0))!important}.hover\\:from-blue-400:hover{--gradient-from-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(99,179,237,0))!important}.hover\\:from-blue-500:hover{--gradient-from-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(66,153,225,0))!important}.hover\\:from-blue-600:hover{--gradient-from-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,130,206,0))!important}.hover\\:from-blue-700:hover{--gradient-from-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(43,108,176,0))!important}.hover\\:from-blue-800:hover{--gradient-from-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,82,130,0))!important}.hover\\:from-blue-900:hover{--gradient-from-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(42,67,101,0))!important}.hover\\:from-indigo-100:hover{--gradient-from-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))!important}.hover\\:from-indigo-200:hover{--gradient-from-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))!important}.hover\\:from-indigo-300:hover{--gradient-from-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))!important}.hover\\:from-indigo-400:hover{--gradient-from-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))!important}.hover\\:from-indigo-500:hover{--gradient-from-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))!important}.hover\\:from-indigo-600:hover{--gradient-from-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))!important}.hover\\:from-indigo-700:hover{--gradient-from-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))!important}.hover\\:from-indigo-800:hover{--gradient-from-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))!important}.hover\\:from-indigo-900:hover{--gradient-from-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))!important}.hover\\:from-purple-100:hover{--gradient-from-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))!important}.hover\\:from-purple-200:hover{--gradient-from-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))!important}.hover\\:from-purple-300:hover{--gradient-from-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))!important}.hover\\:from-purple-400:hover{--gradient-from-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))!important}.hover\\:from-purple-500:hover{--gradient-from-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))!important}.hover\\:from-purple-600:hover{--gradient-from-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))!important}.hover\\:from-purple-700:hover{--gradient-from-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))!important}.hover\\:from-purple-800:hover{--gradient-from-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))!important}.hover\\:from-purple-900:hover{--gradient-from-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))!important}.hover\\:from-pink-100:hover{--gradient-from-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,245,247,0))!important}.hover\\:from-pink-200:hover{--gradient-from-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,226,0))!important}.hover\\:from-pink-300:hover{--gradient-from-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,182,206,0))!important}.hover\\:from-pink-400:hover{--gradient-from-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,135,179,0))!important}.hover\\:from-pink-500:hover{--gradient-from-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,100,166,0))!important}.hover\\:from-pink-600:hover{--gradient-from-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213,63,140,0))!important}.hover\\:from-pink-700:hover{--gradient-from-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(184,50,128,0))!important}.hover\\:from-pink-800:hover{--gradient-from-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,38,109,0))!important}.hover\\:from-pink-900:hover{--gradient-from-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(112,36,89,0))!important}.hover\\:via-transparent:hover{--gradient-via-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}.hover\\:via-current:hover{--gradient-via-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}.hover\\:via-black:hover{--gradient-via-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}.hover\\:via-white:hover{--gradient-via-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}.hover\\:via-gray-100:hover{--gradient-via-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))!important}.hover\\:via-gray-200:hover{--gradient-via-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))!important}.hover\\:via-gray-300:hover{--gradient-via-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))!important}.hover\\:via-gray-400:hover{--gradient-via-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))!important}.hover\\:via-gray-500:hover{--gradient-via-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))!important}.hover\\:via-gray-600:hover{--gradient-via-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))!important}.hover\\:via-gray-700:hover{--gradient-via-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))!important}.hover\\:via-gray-800:hover{--gradient-via-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))!important}.hover\\:via-gray-900:hover{--gradient-via-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))!important}.hover\\:via-red-100:hover{--gradient-via-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}.hover\\:via-red-200:hover{--gradient-via-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,215,0))!important}.hover\\:via-red-300:hover{--gradient-via-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,178,178,0))!important}.hover\\:via-red-400:hover{--gradient-via-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(252,129,129,0))!important}.hover\\:via-red-500:hover{--gradient-via-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(245,101,101,0))!important}.hover\\:via-red-600:hover{--gradient-via-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(229,62,62,0))!important}.hover\\:via-red-700:hover{--gradient-via-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(197,48,48,0))!important}.hover\\:via-red-800:hover{--gradient-via-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(155,44,44,0))!important}.hover\\:via-red-900:hover{--gradient-via-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,42,42,0))!important}.hover\\:via-orange-100:hover{--gradient-via-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,250,240,0))!important}.hover\\:via-orange-200:hover{--gradient-via-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,235,200,0))!important}.hover\\:via-orange-300:hover{--gradient-via-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,211,141,0))!important}.hover\\:via-orange-400:hover{--gradient-via-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,173,85,0))!important}.hover\\:via-orange-500:hover{--gradient-via-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,137,54,0))!important}.hover\\:via-orange-600:hover{--gradient-via-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(221,107,32,0))!important}.hover\\:via-orange-700:hover{--gradient-via-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(192,86,33,0))!important}.hover\\:via-orange-800:hover{--gradient-via-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156,66,33,0))!important}.hover\\:via-orange-900:hover{--gradient-via-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(123,52,30,0))!important}.hover\\:via-yellow-100:hover{--gradient-via-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,255,240,0))!important}.hover\\:via-yellow-200:hover{--gradient-via-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,252,191,0))!important}.hover\\:via-yellow-300:hover{--gradient-via-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,240,137,0))!important}.hover\\:via-yellow-400:hover{--gradient-via-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,224,94,0))!important}.hover\\:via-yellow-500:hover{--gradient-via-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(236,201,75,0))!important}.hover\\:via-yellow-600:hover{--gradient-via-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,158,46,0))!important}.hover\\:via-yellow-700:hover{--gradient-via-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,121,31,0))!important}.hover\\:via-yellow-800:hover{--gradient-via-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,90,22,0))!important}.hover\\:via-yellow-900:hover{--gradient-via-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,66,16,0))!important}.hover\\:via-green-100:hover{--gradient-via-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))!important}.hover\\:via-green-200:hover{--gradient-via-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))!important}.hover\\:via-green-300:hover{--gradient-via-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))!important}.hover\\:via-green-400:hover{--gradient-via-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))!important}.hover\\:via-green-500:hover{--gradient-via-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))!important}.hover\\:via-green-600:hover{--gradient-via-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))!important}.hover\\:via-green-700:hover{--gradient-via-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))!important}.hover\\:via-green-800:hover{--gradient-via-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))!important}.hover\\:via-green-900:hover{--gradient-via-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))!important}.hover\\:via-teal-100:hover{--gradient-via-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))!important}.hover\\:via-teal-200:hover{--gradient-via-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))!important}.hover\\:via-teal-300:hover{--gradient-via-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))!important}.hover\\:via-teal-400:hover{--gradient-via-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))!important}.hover\\:via-teal-500:hover{--gradient-via-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))!important}.hover\\:via-teal-600:hover{--gradient-via-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))!important}.hover\\:via-teal-700:hover{--gradient-via-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))!important}.hover\\:via-teal-800:hover{--gradient-via-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))!important}.hover\\:via-teal-900:hover{--gradient-via-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))!important}.hover\\:via-blue-100:hover{--gradient-via-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,248,255,0))!important}.hover\\:via-blue-200:hover{--gradient-via-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(190,227,248,0))!important}.hover\\:via-blue-300:hover{--gradient-via-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(144,205,244,0))!important}.hover\\:via-blue-400:hover{--gradient-via-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(99,179,237,0))!important}.hover\\:via-blue-500:hover{--gradient-via-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(66,153,225,0))!important}.hover\\:via-blue-600:hover{--gradient-via-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,130,206,0))!important}.hover\\:via-blue-700:hover{--gradient-via-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(43,108,176,0))!important}.hover\\:via-blue-800:hover{--gradient-via-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,82,130,0))!important}.hover\\:via-blue-900:hover{--gradient-via-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(42,67,101,0))!important}.hover\\:via-indigo-100:hover{--gradient-via-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))!important}.hover\\:via-indigo-200:hover{--gradient-via-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))!important}.hover\\:via-indigo-300:hover{--gradient-via-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))!important}.hover\\:via-indigo-400:hover{--gradient-via-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))!important}.hover\\:via-indigo-500:hover{--gradient-via-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))!important}.hover\\:via-indigo-600:hover{--gradient-via-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))!important}.hover\\:via-indigo-700:hover{--gradient-via-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))!important}.hover\\:via-indigo-800:hover{--gradient-via-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))!important}.hover\\:via-indigo-900:hover{--gradient-via-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))!important}.hover\\:via-purple-100:hover{--gradient-via-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))!important}.hover\\:via-purple-200:hover{--gradient-via-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))!important}.hover\\:via-purple-300:hover{--gradient-via-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))!important}.hover\\:via-purple-400:hover{--gradient-via-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))!important}.hover\\:via-purple-500:hover{--gradient-via-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))!important}.hover\\:via-purple-600:hover{--gradient-via-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))!important}.hover\\:via-purple-700:hover{--gradient-via-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))!important}.hover\\:via-purple-800:hover{--gradient-via-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))!important}.hover\\:via-purple-900:hover{--gradient-via-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))!important}.hover\\:via-pink-100:hover{--gradient-via-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,245,247,0))!important}.hover\\:via-pink-200:hover{--gradient-via-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,226,0))!important}.hover\\:via-pink-300:hover{--gradient-via-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,182,206,0))!important}.hover\\:via-pink-400:hover{--gradient-via-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,135,179,0))!important}.hover\\:via-pink-500:hover{--gradient-via-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,100,166,0))!important}.hover\\:via-pink-600:hover{--gradient-via-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213,63,140,0))!important}.hover\\:via-pink-700:hover{--gradient-via-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(184,50,128,0))!important}.hover\\:via-pink-800:hover{--gradient-via-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,38,109,0))!important}.hover\\:via-pink-900:hover{--gradient-via-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(112,36,89,0))!important}.hover\\:to-transparent:hover{--gradient-to-color:transparent!important}.hover\\:to-current:hover{--gradient-to-color:currentColor!important}.hover\\:to-black:hover{--gradient-to-color:#000!important}.hover\\:to-white:hover{--gradient-to-color:#fff!important}.hover\\:to-gray-100:hover{--gradient-to-color:#f7fafc!important}.hover\\:to-gray-200:hover{--gradient-to-color:#edf2f7!important}.hover\\:to-gray-300:hover{--gradient-to-color:#e2e8f0!important}.hover\\:to-gray-400:hover{--gradient-to-color:#cbd5e0!important}.hover\\:to-gray-500:hover{--gradient-to-color:#a0aec0!important}.hover\\:to-gray-600:hover{--gradient-to-color:#718096!important}.hover\\:to-gray-700:hover{--gradient-to-color:#4a5568!important}.hover\\:to-gray-800:hover{--gradient-to-color:#2d3748!important}.hover\\:to-gray-900:hover{--gradient-to-color:#1a202c!important}.hover\\:to-red-100:hover{--gradient-to-color:#fff5f5!important}.hover\\:to-red-200:hover{--gradient-to-color:#fed7d7!important}.hover\\:to-red-300:hover{--gradient-to-color:#feb2b2!important}.hover\\:to-red-400:hover{--gradient-to-color:#fc8181!important}.hover\\:to-red-500:hover{--gradient-to-color:#f56565!important}.hover\\:to-red-600:hover{--gradient-to-color:#e53e3e!important}.hover\\:to-red-700:hover{--gradient-to-color:#c53030!important}.hover\\:to-red-800:hover{--gradient-to-color:#9b2c2c!important}.hover\\:to-red-900:hover{--gradient-to-color:#742a2a!important}.hover\\:to-orange-100:hover{--gradient-to-color:#fffaf0!important}.hover\\:to-orange-200:hover{--gradient-to-color:#feebc8!important}.hover\\:to-orange-300:hover{--gradient-to-color:#fbd38d!important}.hover\\:to-orange-400:hover{--gradient-to-color:#f6ad55!important}.hover\\:to-orange-500:hover{--gradient-to-color:#ed8936!important}.hover\\:to-orange-600:hover{--gradient-to-color:#dd6b20!important}.hover\\:to-orange-700:hover{--gradient-to-color:#c05621!important}.hover\\:to-orange-800:hover{--gradient-to-color:#9c4221!important}.hover\\:to-orange-900:hover{--gradient-to-color:#7b341e!important}.hover\\:to-yellow-100:hover{--gradient-to-color:ivory!important}.hover\\:to-yellow-200:hover{--gradient-to-color:#fefcbf!important}.hover\\:to-yellow-300:hover{--gradient-to-color:#faf089!important}.hover\\:to-yellow-400:hover{--gradient-to-color:#f6e05e!important}.hover\\:to-yellow-500:hover{--gradient-to-color:#ecc94b!important}.hover\\:to-yellow-600:hover{--gradient-to-color:#d69e2e!important}.hover\\:to-yellow-700:hover{--gradient-to-color:#b7791f!important}.hover\\:to-yellow-800:hover{--gradient-to-color:#975a16!important}.hover\\:to-yellow-900:hover{--gradient-to-color:#744210!important}.hover\\:to-green-100:hover{--gradient-to-color:#f0fff4!important}.hover\\:to-green-200:hover{--gradient-to-color:#c6f6d5!important}.hover\\:to-green-300:hover{--gradient-to-color:#9ae6b4!important}.hover\\:to-green-400:hover{--gradient-to-color:#68d391!important}.hover\\:to-green-500:hover{--gradient-to-color:#48bb78!important}.hover\\:to-green-600:hover{--gradient-to-color:#38a169!important}.hover\\:to-green-700:hover{--gradient-to-color:#2f855a!important}.hover\\:to-green-800:hover{--gradient-to-color:#276749!important}.hover\\:to-green-900:hover{--gradient-to-color:#22543d!important}.hover\\:to-teal-100:hover{--gradient-to-color:#e6fffa!important}.hover\\:to-teal-200:hover{--gradient-to-color:#b2f5ea!important}.hover\\:to-teal-300:hover{--gradient-to-color:#81e6d9!important}.hover\\:to-teal-400:hover{--gradient-to-color:#4fd1c5!important}.hover\\:to-teal-500:hover{--gradient-to-color:#38b2ac!important}.hover\\:to-teal-600:hover{--gradient-to-color:#319795!important}.hover\\:to-teal-700:hover{--gradient-to-color:#2c7a7b!important}.hover\\:to-teal-800:hover{--gradient-to-color:#285e61!important}.hover\\:to-teal-900:hover{--gradient-to-color:#234e52!important}.hover\\:to-blue-100:hover{--gradient-to-color:#ebf8ff!important}.hover\\:to-blue-200:hover{--gradient-to-color:#bee3f8!important}.hover\\:to-blue-300:hover{--gradient-to-color:#90cdf4!important}.hover\\:to-blue-400:hover{--gradient-to-color:#63b3ed!important}.hover\\:to-blue-500:hover{--gradient-to-color:#4299e1!important}.hover\\:to-blue-600:hover{--gradient-to-color:#3182ce!important}.hover\\:to-blue-700:hover{--gradient-to-color:#2b6cb0!important}.hover\\:to-blue-800:hover{--gradient-to-color:#2c5282!important}.hover\\:to-blue-900:hover{--gradient-to-color:#2a4365!important}.hover\\:to-indigo-100:hover{--gradient-to-color:#ebf4ff!important}.hover\\:to-indigo-200:hover{--gradient-to-color:#c3dafe!important}.hover\\:to-indigo-300:hover{--gradient-to-color:#a3bffa!important}.hover\\:to-indigo-400:hover{--gradient-to-color:#7f9cf5!important}.hover\\:to-indigo-500:hover{--gradient-to-color:#667eea!important}.hover\\:to-indigo-600:hover{--gradient-to-color:#5a67d8!important}.hover\\:to-indigo-700:hover{--gradient-to-color:#4c51bf!important}.hover\\:to-indigo-800:hover{--gradient-to-color:#434190!important}.hover\\:to-indigo-900:hover{--gradient-to-color:#3c366b!important}.hover\\:to-purple-100:hover{--gradient-to-color:#faf5ff!important}.hover\\:to-purple-200:hover{--gradient-to-color:#e9d8fd!important}.hover\\:to-purple-300:hover{--gradient-to-color:#d6bcfa!important}.hover\\:to-purple-400:hover{--gradient-to-color:#b794f4!important}.hover\\:to-purple-500:hover{--gradient-to-color:#9f7aea!important}.hover\\:to-purple-600:hover{--gradient-to-color:#805ad5!important}.hover\\:to-purple-700:hover{--gradient-to-color:#6b46c1!important}.hover\\:to-purple-800:hover{--gradient-to-color:#553c9a!important}.hover\\:to-purple-900:hover{--gradient-to-color:#44337a!important}.hover\\:to-pink-100:hover{--gradient-to-color:#fff5f7!important}.hover\\:to-pink-200:hover{--gradient-to-color:#fed7e2!important}.hover\\:to-pink-300:hover{--gradient-to-color:#fbb6ce!important}.hover\\:to-pink-400:hover{--gradient-to-color:#f687b3!important}.hover\\:to-pink-500:hover{--gradient-to-color:#ed64a6!important}.hover\\:to-pink-600:hover{--gradient-to-color:#d53f8c!important}.hover\\:to-pink-700:hover{--gradient-to-color:#b83280!important}.hover\\:to-pink-800:hover{--gradient-to-color:#97266d!important}.hover\\:to-pink-900:hover{--gradient-to-color:#702459!important}.focus\\:from-transparent:focus{--gradient-from-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}.focus\\:from-current:focus{--gradient-from-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}.focus\\:from-black:focus{--gradient-from-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}.focus\\:from-white:focus{--gradient-from-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}.focus\\:from-gray-100:focus{--gradient-from-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))!important}.focus\\:from-gray-200:focus{--gradient-from-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))!important}.focus\\:from-gray-300:focus{--gradient-from-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))!important}.focus\\:from-gray-400:focus{--gradient-from-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))!important}.focus\\:from-gray-500:focus{--gradient-from-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))!important}.focus\\:from-gray-600:focus{--gradient-from-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))!important}.focus\\:from-gray-700:focus{--gradient-from-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))!important}.focus\\:from-gray-800:focus{--gradient-from-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))!important}.focus\\:from-gray-900:focus{--gradient-from-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))!important}.focus\\:from-red-100:focus{--gradient-from-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}.focus\\:from-red-200:focus{--gradient-from-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,215,0))!important}.focus\\:from-red-300:focus{--gradient-from-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,178,178,0))!important}.focus\\:from-red-400:focus{--gradient-from-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(252,129,129,0))!important}.focus\\:from-red-500:focus{--gradient-from-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(245,101,101,0))!important}.focus\\:from-red-600:focus{--gradient-from-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(229,62,62,0))!important}.focus\\:from-red-700:focus{--gradient-from-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(197,48,48,0))!important}.focus\\:from-red-800:focus{--gradient-from-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(155,44,44,0))!important}.focus\\:from-red-900:focus{--gradient-from-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,42,42,0))!important}.focus\\:from-orange-100:focus{--gradient-from-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,250,240,0))!important}.focus\\:from-orange-200:focus{--gradient-from-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,235,200,0))!important}.focus\\:from-orange-300:focus{--gradient-from-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,211,141,0))!important}.focus\\:from-orange-400:focus{--gradient-from-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,173,85,0))!important}.focus\\:from-orange-500:focus{--gradient-from-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,137,54,0))!important}.focus\\:from-orange-600:focus{--gradient-from-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(221,107,32,0))!important}.focus\\:from-orange-700:focus{--gradient-from-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(192,86,33,0))!important}.focus\\:from-orange-800:focus{--gradient-from-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156,66,33,0))!important}.focus\\:from-orange-900:focus{--gradient-from-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(123,52,30,0))!important}.focus\\:from-yellow-100:focus{--gradient-from-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,255,240,0))!important}.focus\\:from-yellow-200:focus{--gradient-from-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,252,191,0))!important}.focus\\:from-yellow-300:focus{--gradient-from-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,240,137,0))!important}.focus\\:from-yellow-400:focus{--gradient-from-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,224,94,0))!important}.focus\\:from-yellow-500:focus{--gradient-from-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(236,201,75,0))!important}.focus\\:from-yellow-600:focus{--gradient-from-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,158,46,0))!important}.focus\\:from-yellow-700:focus{--gradient-from-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,121,31,0))!important}.focus\\:from-yellow-800:focus{--gradient-from-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,90,22,0))!important}.focus\\:from-yellow-900:focus{--gradient-from-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,66,16,0))!important}.focus\\:from-green-100:focus{--gradient-from-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))!important}.focus\\:from-green-200:focus{--gradient-from-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))!important}.focus\\:from-green-300:focus{--gradient-from-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))!important}.focus\\:from-green-400:focus{--gradient-from-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))!important}.focus\\:from-green-500:focus{--gradient-from-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))!important}.focus\\:from-green-600:focus{--gradient-from-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))!important}.focus\\:from-green-700:focus{--gradient-from-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))!important}.focus\\:from-green-800:focus{--gradient-from-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))!important}.focus\\:from-green-900:focus{--gradient-from-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))!important}.focus\\:from-teal-100:focus{--gradient-from-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))!important}.focus\\:from-teal-200:focus{--gradient-from-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))!important}.focus\\:from-teal-300:focus{--gradient-from-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))!important}.focus\\:from-teal-400:focus{--gradient-from-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))!important}.focus\\:from-teal-500:focus{--gradient-from-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))!important}.focus\\:from-teal-600:focus{--gradient-from-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))!important}.focus\\:from-teal-700:focus{--gradient-from-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))!important}.focus\\:from-teal-800:focus{--gradient-from-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))!important}.focus\\:from-teal-900:focus{--gradient-from-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))!important}.focus\\:from-blue-100:focus{--gradient-from-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,248,255,0))!important}.focus\\:from-blue-200:focus{--gradient-from-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(190,227,248,0))!important}.focus\\:from-blue-300:focus{--gradient-from-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(144,205,244,0))!important}.focus\\:from-blue-400:focus{--gradient-from-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(99,179,237,0))!important}.focus\\:from-blue-500:focus{--gradient-from-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(66,153,225,0))!important}.focus\\:from-blue-600:focus{--gradient-from-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,130,206,0))!important}.focus\\:from-blue-700:focus{--gradient-from-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(43,108,176,0))!important}.focus\\:from-blue-800:focus{--gradient-from-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,82,130,0))!important}.focus\\:from-blue-900:focus{--gradient-from-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(42,67,101,0))!important}.focus\\:from-indigo-100:focus{--gradient-from-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))!important}.focus\\:from-indigo-200:focus{--gradient-from-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))!important}.focus\\:from-indigo-300:focus{--gradient-from-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))!important}.focus\\:from-indigo-400:focus{--gradient-from-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))!important}.focus\\:from-indigo-500:focus{--gradient-from-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))!important}.focus\\:from-indigo-600:focus{--gradient-from-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))!important}.focus\\:from-indigo-700:focus{--gradient-from-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))!important}.focus\\:from-indigo-800:focus{--gradient-from-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))!important}.focus\\:from-indigo-900:focus{--gradient-from-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))!important}.focus\\:from-purple-100:focus{--gradient-from-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))!important}.focus\\:from-purple-200:focus{--gradient-from-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))!important}.focus\\:from-purple-300:focus{--gradient-from-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))!important}.focus\\:from-purple-400:focus{--gradient-from-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))!important}.focus\\:from-purple-500:focus{--gradient-from-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))!important}.focus\\:from-purple-600:focus{--gradient-from-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))!important}.focus\\:from-purple-700:focus{--gradient-from-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))!important}.focus\\:from-purple-800:focus{--gradient-from-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))!important}.focus\\:from-purple-900:focus{--gradient-from-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))!important}.focus\\:from-pink-100:focus{--gradient-from-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,245,247,0))!important}.focus\\:from-pink-200:focus{--gradient-from-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,226,0))!important}.focus\\:from-pink-300:focus{--gradient-from-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,182,206,0))!important}.focus\\:from-pink-400:focus{--gradient-from-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,135,179,0))!important}.focus\\:from-pink-500:focus{--gradient-from-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,100,166,0))!important}.focus\\:from-pink-600:focus{--gradient-from-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213,63,140,0))!important}.focus\\:from-pink-700:focus{--gradient-from-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(184,50,128,0))!important}.focus\\:from-pink-800:focus{--gradient-from-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,38,109,0))!important}.focus\\:from-pink-900:focus{--gradient-from-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(112,36,89,0))!important}.focus\\:via-transparent:focus{--gradient-via-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}.focus\\:via-current:focus{--gradient-via-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}.focus\\:via-black:focus{--gradient-via-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}.focus\\:via-white:focus{--gradient-via-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}.focus\\:via-gray-100:focus{--gradient-via-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))!important}.focus\\:via-gray-200:focus{--gradient-via-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))!important}.focus\\:via-gray-300:focus{--gradient-via-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))!important}.focus\\:via-gray-400:focus{--gradient-via-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))!important}.focus\\:via-gray-500:focus{--gradient-via-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))!important}.focus\\:via-gray-600:focus{--gradient-via-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))!important}.focus\\:via-gray-700:focus{--gradient-via-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))!important}.focus\\:via-gray-800:focus{--gradient-via-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))!important}.focus\\:via-gray-900:focus{--gradient-via-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))!important}.focus\\:via-red-100:focus{--gradient-via-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}.focus\\:via-red-200:focus{--gradient-via-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,215,0))!important}.focus\\:via-red-300:focus{--gradient-via-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,178,178,0))!important}.focus\\:via-red-400:focus{--gradient-via-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(252,129,129,0))!important}.focus\\:via-red-500:focus{--gradient-via-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(245,101,101,0))!important}.focus\\:via-red-600:focus{--gradient-via-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(229,62,62,0))!important}.focus\\:via-red-700:focus{--gradient-via-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(197,48,48,0))!important}.focus\\:via-red-800:focus{--gradient-via-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(155,44,44,0))!important}.focus\\:via-red-900:focus{--gradient-via-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,42,42,0))!important}.focus\\:via-orange-100:focus{--gradient-via-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,250,240,0))!important}.focus\\:via-orange-200:focus{--gradient-via-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,235,200,0))!important}.focus\\:via-orange-300:focus{--gradient-via-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,211,141,0))!important}.focus\\:via-orange-400:focus{--gradient-via-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,173,85,0))!important}.focus\\:via-orange-500:focus{--gradient-via-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,137,54,0))!important}.focus\\:via-orange-600:focus{--gradient-via-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(221,107,32,0))!important}.focus\\:via-orange-700:focus{--gradient-via-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(192,86,33,0))!important}.focus\\:via-orange-800:focus{--gradient-via-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156,66,33,0))!important}.focus\\:via-orange-900:focus{--gradient-via-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(123,52,30,0))!important}.focus\\:via-yellow-100:focus{--gradient-via-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,255,240,0))!important}.focus\\:via-yellow-200:focus{--gradient-via-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,252,191,0))!important}.focus\\:via-yellow-300:focus{--gradient-via-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,240,137,0))!important}.focus\\:via-yellow-400:focus{--gradient-via-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,224,94,0))!important}.focus\\:via-yellow-500:focus{--gradient-via-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(236,201,75,0))!important}.focus\\:via-yellow-600:focus{--gradient-via-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,158,46,0))!important}.focus\\:via-yellow-700:focus{--gradient-via-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,121,31,0))!important}.focus\\:via-yellow-800:focus{--gradient-via-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,90,22,0))!important}.focus\\:via-yellow-900:focus{--gradient-via-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,66,16,0))!important}.focus\\:via-green-100:focus{--gradient-via-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))!important}.focus\\:via-green-200:focus{--gradient-via-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))!important}.focus\\:via-green-300:focus{--gradient-via-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))!important}.focus\\:via-green-400:focus{--gradient-via-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))!important}.focus\\:via-green-500:focus{--gradient-via-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))!important}.focus\\:via-green-600:focus{--gradient-via-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))!important}.focus\\:via-green-700:focus{--gradient-via-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))!important}.focus\\:via-green-800:focus{--gradient-via-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))!important}.focus\\:via-green-900:focus{--gradient-via-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))!important}.focus\\:via-teal-100:focus{--gradient-via-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))!important}.focus\\:via-teal-200:focus{--gradient-via-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))!important}.focus\\:via-teal-300:focus{--gradient-via-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))!important}.focus\\:via-teal-400:focus{--gradient-via-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))!important}.focus\\:via-teal-500:focus{--gradient-via-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))!important}.focus\\:via-teal-600:focus{--gradient-via-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))!important}.focus\\:via-teal-700:focus{--gradient-via-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))!important}.focus\\:via-teal-800:focus{--gradient-via-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))!important}.focus\\:via-teal-900:focus{--gradient-via-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))!important}.focus\\:via-blue-100:focus{--gradient-via-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,248,255,0))!important}.focus\\:via-blue-200:focus{--gradient-via-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(190,227,248,0))!important}.focus\\:via-blue-300:focus{--gradient-via-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(144,205,244,0))!important}.focus\\:via-blue-400:focus{--gradient-via-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(99,179,237,0))!important}.focus\\:via-blue-500:focus{--gradient-via-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(66,153,225,0))!important}.focus\\:via-blue-600:focus{--gradient-via-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,130,206,0))!important}.focus\\:via-blue-700:focus{--gradient-via-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(43,108,176,0))!important}.focus\\:via-blue-800:focus{--gradient-via-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,82,130,0))!important}.focus\\:via-blue-900:focus{--gradient-via-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(42,67,101,0))!important}.focus\\:via-indigo-100:focus{--gradient-via-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))!important}.focus\\:via-indigo-200:focus{--gradient-via-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))!important}.focus\\:via-indigo-300:focus{--gradient-via-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))!important}.focus\\:via-indigo-400:focus{--gradient-via-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))!important}.focus\\:via-indigo-500:focus{--gradient-via-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))!important}.focus\\:via-indigo-600:focus{--gradient-via-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))!important}.focus\\:via-indigo-700:focus{--gradient-via-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))!important}.focus\\:via-indigo-800:focus{--gradient-via-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))!important}.focus\\:via-indigo-900:focus{--gradient-via-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))!important}.focus\\:via-purple-100:focus{--gradient-via-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))!important}.focus\\:via-purple-200:focus{--gradient-via-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))!important}.focus\\:via-purple-300:focus{--gradient-via-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))!important}.focus\\:via-purple-400:focus{--gradient-via-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))!important}.focus\\:via-purple-500:focus{--gradient-via-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))!important}.focus\\:via-purple-600:focus{--gradient-via-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))!important}.focus\\:via-purple-700:focus{--gradient-via-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))!important}.focus\\:via-purple-800:focus{--gradient-via-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))!important}.focus\\:via-purple-900:focus{--gradient-via-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))!important}.focus\\:via-pink-100:focus{--gradient-via-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,245,247,0))!important}.focus\\:via-pink-200:focus{--gradient-via-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,226,0))!important}.focus\\:via-pink-300:focus{--gradient-via-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,182,206,0))!important}.focus\\:via-pink-400:focus{--gradient-via-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,135,179,0))!important}.focus\\:via-pink-500:focus{--gradient-via-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,100,166,0))!important}.focus\\:via-pink-600:focus{--gradient-via-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213,63,140,0))!important}.focus\\:via-pink-700:focus{--gradient-via-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(184,50,128,0))!important}.focus\\:via-pink-800:focus{--gradient-via-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,38,109,0))!important}.focus\\:via-pink-900:focus{--gradient-via-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(112,36,89,0))!important}.focus\\:to-transparent:focus{--gradient-to-color:transparent!important}.focus\\:to-current:focus{--gradient-to-color:currentColor!important}.focus\\:to-black:focus{--gradient-to-color:#000!important}.focus\\:to-white:focus{--gradient-to-color:#fff!important}.focus\\:to-gray-100:focus{--gradient-to-color:#f7fafc!important}.focus\\:to-gray-200:focus{--gradient-to-color:#edf2f7!important}.focus\\:to-gray-300:focus{--gradient-to-color:#e2e8f0!important}.focus\\:to-gray-400:focus{--gradient-to-color:#cbd5e0!important}.focus\\:to-gray-500:focus{--gradient-to-color:#a0aec0!important}.focus\\:to-gray-600:focus{--gradient-to-color:#718096!important}.focus\\:to-gray-700:focus{--gradient-to-color:#4a5568!important}.focus\\:to-gray-800:focus{--gradient-to-color:#2d3748!important}.focus\\:to-gray-900:focus{--gradient-to-color:#1a202c!important}.focus\\:to-red-100:focus{--gradient-to-color:#fff5f5!important}.focus\\:to-red-200:focus{--gradient-to-color:#fed7d7!important}.focus\\:to-red-300:focus{--gradient-to-color:#feb2b2!important}.focus\\:to-red-400:focus{--gradient-to-color:#fc8181!important}.focus\\:to-red-500:focus{--gradient-to-color:#f56565!important}.focus\\:to-red-600:focus{--gradient-to-color:#e53e3e!important}.focus\\:to-red-700:focus{--gradient-to-color:#c53030!important}.focus\\:to-red-800:focus{--gradient-to-color:#9b2c2c!important}.focus\\:to-red-900:focus{--gradient-to-color:#742a2a!important}.focus\\:to-orange-100:focus{--gradient-to-color:#fffaf0!important}.focus\\:to-orange-200:focus{--gradient-to-color:#feebc8!important}.focus\\:to-orange-300:focus{--gradient-to-color:#fbd38d!important}.focus\\:to-orange-400:focus{--gradient-to-color:#f6ad55!important}.focus\\:to-orange-500:focus{--gradient-to-color:#ed8936!important}.focus\\:to-orange-600:focus{--gradient-to-color:#dd6b20!important}.focus\\:to-orange-700:focus{--gradient-to-color:#c05621!important}.focus\\:to-orange-800:focus{--gradient-to-color:#9c4221!important}.focus\\:to-orange-900:focus{--gradient-to-color:#7b341e!important}.focus\\:to-yellow-100:focus{--gradient-to-color:ivory!important}.focus\\:to-yellow-200:focus{--gradient-to-color:#fefcbf!important}.focus\\:to-yellow-300:focus{--gradient-to-color:#faf089!important}.focus\\:to-yellow-400:focus{--gradient-to-color:#f6e05e!important}.focus\\:to-yellow-500:focus{--gradient-to-color:#ecc94b!important}.focus\\:to-yellow-600:focus{--gradient-to-color:#d69e2e!important}.focus\\:to-yellow-700:focus{--gradient-to-color:#b7791f!important}.focus\\:to-yellow-800:focus{--gradient-to-color:#975a16!important}.focus\\:to-yellow-900:focus{--gradient-to-color:#744210!important}.focus\\:to-green-100:focus{--gradient-to-color:#f0fff4!important}.focus\\:to-green-200:focus{--gradient-to-color:#c6f6d5!important}.focus\\:to-green-300:focus{--gradient-to-color:#9ae6b4!important}.focus\\:to-green-400:focus{--gradient-to-color:#68d391!important}.focus\\:to-green-500:focus{--gradient-to-color:#48bb78!important}.focus\\:to-green-600:focus{--gradient-to-color:#38a169!important}.focus\\:to-green-700:focus{--gradient-to-color:#2f855a!important}.focus\\:to-green-800:focus{--gradient-to-color:#276749!important}.focus\\:to-green-900:focus{--gradient-to-color:#22543d!important}.focus\\:to-teal-100:focus{--gradient-to-color:#e6fffa!important}.focus\\:to-teal-200:focus{--gradient-to-color:#b2f5ea!important}.focus\\:to-teal-300:focus{--gradient-to-color:#81e6d9!important}.focus\\:to-teal-400:focus{--gradient-to-color:#4fd1c5!important}.focus\\:to-teal-500:focus{--gradient-to-color:#38b2ac!important}.focus\\:to-teal-600:focus{--gradient-to-color:#319795!important}.focus\\:to-teal-700:focus{--gradient-to-color:#2c7a7b!important}.focus\\:to-teal-800:focus{--gradient-to-color:#285e61!important}.focus\\:to-teal-900:focus{--gradient-to-color:#234e52!important}.focus\\:to-blue-100:focus{--gradient-to-color:#ebf8ff!important}.focus\\:to-blue-200:focus{--gradient-to-color:#bee3f8!important}.focus\\:to-blue-300:focus{--gradient-to-color:#90cdf4!important}.focus\\:to-blue-400:focus{--gradient-to-color:#63b3ed!important}.focus\\:to-blue-500:focus{--gradient-to-color:#4299e1!important}.focus\\:to-blue-600:focus{--gradient-to-color:#3182ce!important}.focus\\:to-blue-700:focus{--gradient-to-color:#2b6cb0!important}.focus\\:to-blue-800:focus{--gradient-to-color:#2c5282!important}.focus\\:to-blue-900:focus{--gradient-to-color:#2a4365!important}.focus\\:to-indigo-100:focus{--gradient-to-color:#ebf4ff!important}.focus\\:to-indigo-200:focus{--gradient-to-color:#c3dafe!important}.focus\\:to-indigo-300:focus{--gradient-to-color:#a3bffa!important}.focus\\:to-indigo-400:focus{--gradient-to-color:#7f9cf5!important}.focus\\:to-indigo-500:focus{--gradient-to-color:#667eea!important}.focus\\:to-indigo-600:focus{--gradient-to-color:#5a67d8!important}.focus\\:to-indigo-700:focus{--gradient-to-color:#4c51bf!important}.focus\\:to-indigo-800:focus{--gradient-to-color:#434190!important}.focus\\:to-indigo-900:focus{--gradient-to-color:#3c366b!important}.focus\\:to-purple-100:focus{--gradient-to-color:#faf5ff!important}.focus\\:to-purple-200:focus{--gradient-to-color:#e9d8fd!important}.focus\\:to-purple-300:focus{--gradient-to-color:#d6bcfa!important}.focus\\:to-purple-400:focus{--gradient-to-color:#b794f4!important}.focus\\:to-purple-500:focus{--gradient-to-color:#9f7aea!important}.focus\\:to-purple-600:focus{--gradient-to-color:#805ad5!important}.focus\\:to-purple-700:focus{--gradient-to-color:#6b46c1!important}.focus\\:to-purple-800:focus{--gradient-to-color:#553c9a!important}.focus\\:to-purple-900:focus{--gradient-to-color:#44337a!important}.focus\\:to-pink-100:focus{--gradient-to-color:#fff5f7!important}.focus\\:to-pink-200:focus{--gradient-to-color:#fed7e2!important}.focus\\:to-pink-300:focus{--gradient-to-color:#fbb6ce!important}.focus\\:to-pink-400:focus{--gradient-to-color:#f687b3!important}.focus\\:to-pink-500:focus{--gradient-to-color:#ed64a6!important}.focus\\:to-pink-600:focus{--gradient-to-color:#d53f8c!important}.focus\\:to-pink-700:focus{--gradient-to-color:#b83280!important}.focus\\:to-pink-800:focus{--gradient-to-color:#97266d!important}.focus\\:to-pink-900:focus{--gradient-to-color:#702459!important}.bg-opacity-0{--bg-opacity:0!important}.bg-opacity-25{--bg-opacity:0.25!important}.bg-opacity-50{--bg-opacity:0.5!important}.bg-opacity-75{--bg-opacity:0.75!important}.bg-opacity-100{--bg-opacity:1!important}.hover\\:bg-opacity-0:hover{--bg-opacity:0!important}.hover\\:bg-opacity-25:hover{--bg-opacity:0.25!important}.hover\\:bg-opacity-50:hover{--bg-opacity:0.5!important}.hover\\:bg-opacity-75:hover{--bg-opacity:0.75!important}.hover\\:bg-opacity-100:hover{--bg-opacity:1!important}.focus\\:bg-opacity-0:focus{--bg-opacity:0!important}.focus\\:bg-opacity-25:focus{--bg-opacity:0.25!important}.focus\\:bg-opacity-50:focus{--bg-opacity:0.5!important}.focus\\:bg-opacity-75:focus{--bg-opacity:0.75!important}.focus\\:bg-opacity-100:focus{--bg-opacity:1!important}.bg-bottom{background-position:bottom!important}.bg-center{background-position:50%!important}.bg-left{background-position:0!important}.bg-left-bottom{background-position:0 100%!important}.bg-left-top{background-position:0 0!important}.bg-right{background-position:100%!important}.bg-right-bottom{background-position:100% 100%!important}.bg-right-top{background-position:100% 0!important}.bg-top{background-position:top!important}.bg-repeat{background-repeat:repeat!important}.bg-no-repeat{background-repeat:no-repeat!important}.bg-repeat-x{background-repeat:repeat-x!important}.bg-repeat-y{background-repeat:repeat-y!important}.bg-repeat-round{background-repeat:round!important}.bg-repeat-space{background-repeat:space!important}.bg-auto{background-size:auto!important}.bg-cover{background-size:cover!important}.bg-contain{background-size:contain!important}.border-collapse{border-collapse:collapse!important}.border-separate{border-collapse:initial!important}.border-opacity-0{--border-opacity:0!important}.border-opacity-25{--border-opacity:0.25!important}.border-opacity-50{--border-opacity:0.5!important}.border-opacity-75{--border-opacity:0.75!important}.border-opacity-100{--border-opacity:1!important}.hover\\:border-opacity-0:hover{--border-opacity:0!important}.hover\\:border-opacity-25:hover{--border-opacity:0.25!important}.hover\\:border-opacity-50:hover{--border-opacity:0.5!important}.hover\\:border-opacity-75:hover{--border-opacity:0.75!important}.hover\\:border-opacity-100:hover{--border-opacity:1!important}.focus\\:border-opacity-0:focus{--border-opacity:0!important}.focus\\:border-opacity-25:focus{--border-opacity:0.25!important}.focus\\:border-opacity-50:focus{--border-opacity:0.5!important}.focus\\:border-opacity-75:focus{--border-opacity:0.75!important}.focus\\:border-opacity-100:focus{--border-opacity:1!important}.rounded-none{border-radius:0!important}.rounded-sm{border-radius:.125rem!important}.rounded{border-radius:.25rem!important}.rounded-md{border-radius:.375rem!important}.rounded-lg{border-radius:.5rem!important}.rounded-xl{border-radius:.75rem!important}.rounded-2xl{border-radius:1rem!important}.rounded-3xl{border-radius:1.5rem!important}.rounded-full{border-radius:9999px!important}.rounded-t-none{border-top-left-radius:0!important}.rounded-r-none,.rounded-t-none{border-top-right-radius:0!important}.rounded-b-none,.rounded-r-none{border-bottom-right-radius:0!important}.rounded-b-none,.rounded-l-none{border-bottom-left-radius:0!important}.rounded-l-none{border-top-left-radius:0!important}.rounded-t-sm{border-top-left-radius:.125rem!important}.rounded-r-sm,.rounded-t-sm{border-top-right-radius:.125rem!important}.rounded-b-sm,.rounded-r-sm{border-bottom-right-radius:.125rem!important}.rounded-b-sm,.rounded-l-sm{border-bottom-left-radius:.125rem!important}.rounded-l-sm{border-top-left-radius:.125rem!important}.rounded-t{border-top-left-radius:.25rem!important}.rounded-r,.rounded-t{border-top-right-radius:.25rem!important}.rounded-b,.rounded-r{border-bottom-right-radius:.25rem!important}.rounded-b,.rounded-l{border-bottom-left-radius:.25rem!important}.rounded-l{border-top-left-radius:.25rem!important}.rounded-t-md{border-top-left-radius:.375rem!important}.rounded-r-md,.rounded-t-md{border-top-right-radius:.375rem!important}.rounded-b-md,.rounded-r-md{border-bottom-right-radius:.375rem!important}.rounded-b-md,.rounded-l-md{border-bottom-left-radius:.375rem!important}.rounded-l-md{border-top-left-radius:.375rem!important}.rounded-t-lg{border-top-left-radius:.5rem!important}.rounded-r-lg,.rounded-t-lg{border-top-right-radius:.5rem!important}.rounded-b-lg,.rounded-r-lg{border-bottom-right-radius:.5rem!important}.rounded-b-lg,.rounded-l-lg{border-bottom-left-radius:.5rem!important}.rounded-l-lg{border-top-left-radius:.5rem!important}.rounded-t-xl{border-top-left-radius:.75rem!important}.rounded-r-xl,.rounded-t-xl{border-top-right-radius:.75rem!important}.rounded-b-xl,.rounded-r-xl{border-bottom-right-radius:.75rem!important}.rounded-b-xl,.rounded-l-xl{border-bottom-left-radius:.75rem!important}.rounded-l-xl{border-top-left-radius:.75rem!important}.rounded-t-2xl{border-top-left-radius:1rem!important}.rounded-r-2xl,.rounded-t-2xl{border-top-right-radius:1rem!important}.rounded-b-2xl,.rounded-r-2xl{border-bottom-right-radius:1rem!important}.rounded-b-2xl,.rounded-l-2xl{border-bottom-left-radius:1rem!important}.rounded-l-2xl{border-top-left-radius:1rem!important}.rounded-t-3xl{border-top-left-radius:1.5rem!important}.rounded-r-3xl,.rounded-t-3xl{border-top-right-radius:1.5rem!important}.rounded-b-3xl,.rounded-r-3xl{border-bottom-right-radius:1.5rem!important}.rounded-b-3xl,.rounded-l-3xl{border-bottom-left-radius:1.5rem!important}.rounded-l-3xl{border-top-left-radius:1.5rem!important}.rounded-t-full{border-top-left-radius:9999px!important}.rounded-r-full,.rounded-t-full{border-top-right-radius:9999px!important}.rounded-b-full,.rounded-r-full{border-bottom-right-radius:9999px!important}.rounded-b-full,.rounded-l-full{border-bottom-left-radius:9999px!important}.rounded-l-full{border-top-left-radius:9999px!important}.rounded-tl-none{border-top-left-radius:0!important}.rounded-tr-none{border-top-right-radius:0!important}.rounded-br-none{border-bottom-right-radius:0!important}.rounded-bl-none{border-bottom-left-radius:0!important}.rounded-tl-sm{border-top-left-radius:.125rem!important}.rounded-tr-sm{border-top-right-radius:.125rem!important}.rounded-br-sm{border-bottom-right-radius:.125rem!important}.rounded-bl-sm{border-bottom-left-radius:.125rem!important}.rounded-tl{border-top-left-radius:.25rem!important}.rounded-tr{border-top-right-radius:.25rem!important}.rounded-br{border-bottom-right-radius:.25rem!important}.rounded-bl{border-bottom-left-radius:.25rem!important}.rounded-tl-md{border-top-left-radius:.375rem!important}.rounded-tr-md{border-top-right-radius:.375rem!important}.rounded-br-md{border-bottom-right-radius:.375rem!important}.rounded-bl-md{border-bottom-left-radius:.375rem!important}.rounded-tl-lg{border-top-left-radius:.5rem!important}.rounded-tr-lg{border-top-right-radius:.5rem!important}.rounded-br-lg{border-bottom-right-radius:.5rem!important}.rounded-bl-lg{border-bottom-left-radius:.5rem!important}.rounded-tl-xl{border-top-left-radius:.75rem!important}.rounded-tr-xl{border-top-right-radius:.75rem!important}.rounded-br-xl{border-bottom-right-radius:.75rem!important}.rounded-bl-xl{border-bottom-left-radius:.75rem!important}.rounded-tl-2xl{border-top-left-radius:1rem!important}.rounded-tr-2xl{border-top-right-radius:1rem!important}.rounded-br-2xl{border-bottom-right-radius:1rem!important}.rounded-bl-2xl{border-bottom-left-radius:1rem!important}.rounded-tl-3xl{border-top-left-radius:1.5rem!important}.rounded-tr-3xl{border-top-right-radius:1.5rem!important}.rounded-br-3xl{border-bottom-right-radius:1.5rem!important}.rounded-bl-3xl{border-bottom-left-radius:1.5rem!important}.rounded-tl-full{border-top-left-radius:9999px!important}.rounded-tr-full{border-top-right-radius:9999px!important}.rounded-br-full{border-bottom-right-radius:9999px!important}.rounded-bl-full{border-bottom-left-radius:9999px!important}.border-solid{border-style:solid!important}.border-dashed{border-style:dashed!important}.border-dotted{border-style:dotted!important}.border-double{border-style:double!important}.border-none{border-style:none!important}.border-0{border-width:0!important}.border-2{border-width:2px!important}.border-4{border-width:4px!important}.border-8{border-width:8px!important}.border{border-width:1px!important}.border-t-0{border-top-width:0!important}.border-r-0{border-right-width:0!important}.border-b-0{border-bottom-width:0!important}.border-l-0{border-left-width:0!important}.border-t-2{border-top-width:2px!important}.border-r-2{border-right-width:2px!important}.border-b-2{border-bottom-width:2px!important}.border-l-2{border-left-width:2px!important}.border-t-4{border-top-width:4px!important}.border-r-4{border-right-width:4px!important}.border-b-4{border-bottom-width:4px!important}.border-l-4{border-left-width:4px!important}.border-t-8{border-top-width:8px!important}.border-r-8{border-right-width:8px!important}.border-b-8{border-bottom-width:8px!important}.border-l-8{border-left-width:8px!important}.border-t{border-top-width:1px!important}.border-r{border-right-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.box-border{box-sizing:border-box!important}.box-content{box-sizing:initial!important}.cursor-crosshair{cursor:crosshair!important}.cursor-zoom-in{cursor:zoom-in!important}.block{display:block!important}.inline-block{display:inline-block!important}.inline{display:inline!important}.flex{display:flex!important}.inline-flex{display:inline-flex!important}.table{display:table!important}.table-caption{display:table-caption!important}.table-cell{display:table-cell!important}.table-column{display:table-column!important}.table-column-group{display:table-column-group!important}.table-footer-group{display:table-footer-group!important}.table-header-group{display:table-header-group!important}.table-row-group{display:table-row-group!important}.table-row{display:table-row!important}.flow-root{display:flow-root!important}.grid{display:grid!important}.inline-grid{display:inline-grid!important}.contents{display:contents!important}.hidden{display:none!important}.flex-row{flex-direction:row!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-col{flex-direction:column!important}.flex-col-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-no-wrap{flex-wrap:nowrap!important}.place-items-auto{place-items:auto!important}.place-items-start{place-items:start!important}.place-items-end{place-items:end!important}.place-items-center{place-items:center!important}.place-items-stretch{place-items:stretch!important}.place-content-center{place-content:center!important}.place-content-start{place-content:start!important}.place-content-end{place-content:end!important}.place-content-between{place-content:space-between!important}.place-content-around{place-content:space-around!important}.place-content-evenly{place-content:space-evenly!important}.place-content-stretch{place-content:stretch!important}.place-self-auto{place-self:auto!important}.place-self-start{place-self:start!important}.place-self-end{place-self:end!important}.place-self-center{place-self:center!important}.place-self-stretch{place-self:stretch!important}.items-start{align-items:flex-start!important}.items-end{align-items:flex-end!important}.items-center{align-items:center!important}.items-baseline{align-items:baseline!important}.items-stretch{align-items:stretch!important}.content-center{align-content:center!important}.content-start{align-content:flex-start!important}.content-end{align-content:flex-end!important}.content-between{align-content:space-between!important}.content-around{align-content:space-around!important}.content-evenly{align-content:space-evenly!important}.self-auto{align-self:auto!important}.self-start{align-self:flex-start!important}.self-end{align-self:flex-end!important}.self-center{align-self:center!important}.self-stretch{align-self:stretch!important}.justify-items-auto{justify-items:auto!important}.justify-items-start{justify-items:start!important}.justify-items-end{justify-items:end!important}.justify-items-center{justify-items:center!important}.justify-items-stretch{justify-items:stretch!important}.justify-start{justify-content:flex-start!important}.justify-end{justify-content:flex-end!important}.justify-center{justify-content:center!important}.justify-between{justify-content:space-between!important}.justify-around{justify-content:space-around!important}.justify-evenly{justify-content:space-evenly!important}.justify-self-auto{justify-self:auto!important}.justify-self-start{justify-self:start!important}.justify-self-end{justify-self:end!important}.justify-self-center{justify-self:center!important}.justify-self-stretch{justify-self:stretch!important}.flex-1{flex:1 1 0%!important}.flex-auto{flex:1 1 auto!important}.flex-initial{flex:0 1 auto!important}.flex-none{flex:none!important}.flex-grow-0{flex-grow:0!important}.flex-grow{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink{flex-shrink:1!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-6{order:6!important}.order-7{order:7!important}.order-8{order:8!important}.order-9{order:9!important}.order-10{order:10!important}.order-11{order:11!important}.order-12{order:12!important}.order-first{order:-9999!important}.order-last{order:9999!important}.order-none{order:0!important}.float-right{float:right!important}.float-left{float:left!important}.float-none{float:none!important}.clearfix:after{content:\"\"!important;display:table!important;clear:both!important}.clear-left{clear:left!important}.clear-right{clear:right!important}.clear-both{clear:both!important}.clear-none{clear:none!important}.font-sans{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji!important}.font-serif{font-family:Georgia,Cambria,Times New Roman,Times,serif!important}.font-mono{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.font-hairline{font-weight:100!important}.font-thin{font-weight:200!important}.font-light{font-weight:300!important}.font-normal{font-weight:400!important}.font-medium{font-weight:500!important}.font-semibold{font-weight:600!important}.font-bold{font-weight:700!important}.font-extrabold{font-weight:800!important}.font-black{font-weight:900!important}.hover\\:font-hairline:hover{font-weight:100!important}.hover\\:font-thin:hover{font-weight:200!important}.hover\\:font-light:hover{font-weight:300!important}.hover\\:font-normal:hover{font-weight:400!important}.hover\\:font-medium:hover{font-weight:500!important}.hover\\:font-semibold:hover{font-weight:600!important}.hover\\:font-bold:hover{font-weight:700!important}.hover\\:font-extrabold:hover{font-weight:800!important}.hover\\:font-black:hover{font-weight:900!important}.focus\\:font-hairline:focus{font-weight:100!important}.focus\\:font-thin:focus{font-weight:200!important}.focus\\:font-light:focus{font-weight:300!important}.focus\\:font-normal:focus{font-weight:400!important}.focus\\:font-medium:focus{font-weight:500!important}.focus\\:font-semibold:focus{font-weight:600!important}.focus\\:font-bold:focus{font-weight:700!important}.focus\\:font-extrabold:focus{font-weight:800!important}.focus\\:font-black:focus{font-weight:900!important}.h-0{height:0!important}.h-1{height:.25rem!important}.h-2{height:.5rem!important}.h-3{height:.75rem!important}.h-4{height:1rem!important}.h-5{height:1.25rem!important}.h-6{height:1.5rem!important}.h-8{height:2rem!important}.h-10{height:2.5rem!important}.h-12{height:3rem!important}.h-16{height:4rem!important}.h-20{height:5rem!important}.h-24{height:6rem!important}.h-32{height:8rem!important}.h-40{height:10rem!important}.h-48{height:12rem!important}.h-56{height:14rem!important}.h-64{height:16rem!important}.h-auto{height:auto!important}.h-px{height:1px!important}.h-screen{height:100vh!important}.text-xs{font-size:.75rem!important}.text-sm{font-size:.875rem!important}.text-base{font-size:1rem!important}.text-lg{font-size:1.125rem!important}.text-xl{font-size:1.25rem!important}.text-2xl{font-size:1.5rem!important}.text-3xl{font-size:1.875rem!important}.text-4xl{font-size:2.25rem!important}.text-5xl{font-size:3rem!important}.text-6xl{font-size:4rem!important}.leading-3{line-height:.75rem!important}.leading-4{line-height:1rem!important}.leading-5{line-height:1.25rem!important}.leading-6{line-height:1.5rem!important}.leading-7{line-height:1.75rem!important}.leading-8{line-height:2rem!important}.leading-9{line-height:2.25rem!important}.leading-10{line-height:2.5rem!important}.leading-none{line-height:1!important}.leading-tight{line-height:1.25!important}.leading-snug{line-height:1.375!important}.leading-normal{line-height:1.5!important}.leading-relaxed{line-height:1.625!important}.leading-loose{line-height:2!important}.list-inside{list-style-position:inside!important}.list-outside{list-style-position:outside!important}.list-none{list-style-type:none!important}.list-disc{list-style-type:disc!important}.list-decimal{list-style-type:decimal!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:.75rem!important}.m-4{margin:1rem!important}.m-5{margin:1.25rem!important}.m-6{margin:1.5rem!important}.m-8{margin:2rem!important}.m-10{margin:2.5rem!important}.m-12{margin:3rem!important}.m-16{margin:4rem!important}.m-20{margin:5rem!important}.m-24{margin:6rem!important}.m-32{margin:8rem!important}.m-40{margin:10rem!important}.m-48{margin:12rem!important}.m-56{margin:14rem!important}.m-64{margin:16rem!important}.m-auto{margin:auto!important}.m-px{margin:1px!important}.-m-1{margin:-.25rem!important}.-m-2{margin:-.5rem!important}.-m-3{margin:-.75rem!important}.-m-4{margin:-1rem!important}.-m-5{margin:-1.25rem!important}.-m-6{margin:-1.5rem!important}.-m-8{margin:-2rem!important}.-m-10{margin:-2.5rem!important}.-m-12{margin:-3rem!important}.-m-16{margin:-4rem!important}.-m-20{margin:-5rem!important}.-m-24{margin:-6rem!important}.-m-32{margin:-8rem!important}.-m-40{margin:-10rem!important}.-m-48{margin:-12rem!important}.-m-56{margin:-14rem!important}.-m-64{margin:-16rem!important}.-m-px{margin:-1px!important}.my-0{margin-top:0!important;margin-bottom:0!important}.mx-0{margin-left:0!important;margin-right:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.my-5{margin-top:1.25rem!important;margin-bottom:1.25rem!important}.mx-5{margin-left:1.25rem!important;margin-right:1.25rem!important}.my-6{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.mx-6{margin-left:1.5rem!important;margin-right:1.5rem!important}.my-8{margin-top:2rem!important;margin-bottom:2rem!important}.mx-8{margin-left:2rem!important;margin-right:2rem!important}.my-10{margin-top:2.5rem!important;margin-bottom:2.5rem!important}.mx-10{margin-left:2.5rem!important;margin-right:2.5rem!important}.my-12{margin-top:3rem!important;margin-bottom:3rem!important}.mx-12{margin-left:3rem!important;margin-right:3rem!important}.my-16{margin-top:4rem!important;margin-bottom:4rem!important}.mx-16{margin-left:4rem!important;margin-right:4rem!important}.my-20{margin-top:5rem!important;margin-bottom:5rem!important}.mx-20{margin-left:5rem!important;margin-right:5rem!important}.my-24{margin-top:6rem!important;margin-bottom:6rem!important}.mx-24{margin-left:6rem!important;margin-right:6rem!important}.my-32{margin-top:8rem!important;margin-bottom:8rem!important}.mx-32{margin-left:8rem!important;margin-right:8rem!important}.my-40{margin-top:10rem!important;margin-bottom:10rem!important}.mx-40{margin-left:10rem!important;margin-right:10rem!important}.my-48{margin-top:12rem!important;margin-bottom:12rem!important}.mx-48{margin-left:12rem!important;margin-right:12rem!important}.my-56{margin-top:14rem!important;margin-bottom:14rem!important}.mx-56{margin-left:14rem!important;margin-right:14rem!important}.my-64{margin-top:16rem!important;margin-bottom:16rem!important}.mx-64{margin-left:16rem!important;margin-right:16rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-px{margin-top:1px!important;margin-bottom:1px!important}.mx-px{margin-left:1px!important;margin-right:1px!important}.-my-1{margin-top:-.25rem!important;margin-bottom:-.25rem!important}.-mx-1{margin-left:-.25rem!important;margin-right:-.25rem!important}.-my-2{margin-top:-.5rem!important;margin-bottom:-.5rem!important}.-mx-2{margin-left:-.5rem!important;margin-right:-.5rem!important}.-my-3{margin-top:-.75rem!important;margin-bottom:-.75rem!important}.-mx-3{margin-left:-.75rem!important;margin-right:-.75rem!important}.-my-4{margin-top:-1rem!important;margin-bottom:-1rem!important}.-mx-4{margin-left:-1rem!important;margin-right:-1rem!important}.-my-5{margin-top:-1.25rem!important;margin-bottom:-1.25rem!important}.-mx-5{margin-left:-1.25rem!important;margin-right:-1.25rem!important}.-my-6{margin-top:-1.5rem!important;margin-bottom:-1.5rem!important}.-mx-6{margin-left:-1.5rem!important;margin-right:-1.5rem!important}.-my-8{margin-top:-2rem!important;margin-bottom:-2rem!important}.-mx-8{margin-left:-2rem!important;margin-right:-2rem!important}.-my-10{margin-top:-2.5rem!important;margin-bottom:-2.5rem!important}.-mx-10{margin-left:-2.5rem!important;margin-right:-2.5rem!important}.-my-12{margin-top:-3rem!important;margin-bottom:-3rem!important}.-mx-12{margin-left:-3rem!important;margin-right:-3rem!important}.-my-16{margin-top:-4rem!important;margin-bottom:-4rem!important}.-mx-16{margin-left:-4rem!important;margin-right:-4rem!important}.-my-20{margin-top:-5rem!important;margin-bottom:-5rem!important}.-mx-20{margin-left:-5rem!important;margin-right:-5rem!important}.-my-24{margin-top:-6rem!important;margin-bottom:-6rem!important}.-mx-24{margin-left:-6rem!important;margin-right:-6rem!important}.-my-32{margin-top:-8rem!important;margin-bottom:-8rem!important}.-mx-32{margin-left:-8rem!important;margin-right:-8rem!important}.-my-40{margin-top:-10rem!important;margin-bottom:-10rem!important}.-mx-40{margin-left:-10rem!important;margin-right:-10rem!important}.-my-48{margin-top:-12rem!important;margin-bottom:-12rem!important}.-mx-48{margin-left:-12rem!important;margin-right:-12rem!important}.-my-56{margin-top:-14rem!important;margin-bottom:-14rem!important}.-mx-56{margin-left:-14rem!important;margin-right:-14rem!important}.-my-64{margin-top:-16rem!important;margin-bottom:-16rem!important}.-mx-64{margin-left:-16rem!important;margin-right:-16rem!important}.-my-px{margin-top:-1px!important;margin-bottom:-1px!important}.-mx-px{margin-left:-1px!important;margin-right:-1px!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mt-1{margin-top:.25rem!important}.mr-1{margin-right:.25rem!important}.mb-1{margin-bottom:.25rem!important}.ml-1{margin-left:.25rem!important}.mt-2{margin-top:.5rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mt-3{margin-top:.75rem!important}.mr-3{margin-right:.75rem!important}.mb-3{margin-bottom:.75rem!important}.ml-3{margin-left:.75rem!important}.mt-4{margin-top:1rem!important}.mr-4{margin-right:1rem!important}.mb-4{margin-bottom:1rem!important}.ml-4{margin-left:1rem!important}.mt-5{margin-top:1.25rem!important}.mr-5{margin-right:1.25rem!important}.mb-5{margin-bottom:1.25rem!important}.ml-5{margin-left:1.25rem!important}.mt-6{margin-top:1.5rem!important}.mr-6{margin-right:1.5rem!important}.mb-6{margin-bottom:1.5rem!important}.ml-6{margin-left:1.5rem!important}.mt-8{margin-top:2rem!important}.mr-8{margin-right:2rem!important}.mb-8{margin-bottom:2rem!important}.ml-8{margin-left:2rem!important}.mt-10{margin-top:2.5rem!important}.mr-10{margin-right:2.5rem!important}.mb-10{margin-bottom:2.5rem!important}.ml-10{margin-left:2.5rem!important}.mt-12{margin-top:3rem!important}.mr-12{margin-right:3rem!important}.mb-12{margin-bottom:3rem!important}.ml-12{margin-left:3rem!important}.mt-16{margin-top:4rem!important}.mr-16{margin-right:4rem!important}.mb-16{margin-bottom:4rem!important}.ml-16{margin-left:4rem!important}.mt-20{margin-top:5rem!important}.mr-20{margin-right:5rem!important}.mb-20{margin-bottom:5rem!important}.ml-20{margin-left:5rem!important}.mt-24{margin-top:6rem!important}.mr-24{margin-right:6rem!important}.mb-24{margin-bottom:6rem!important}.ml-24{margin-left:6rem!important}.mt-32{margin-top:8rem!important}.mr-32{margin-right:8rem!important}.mb-32{margin-bottom:8rem!important}.ml-32{margin-left:8rem!important}.mt-40{margin-top:10rem!important}.mr-40{margin-right:10rem!important}.mb-40{margin-bottom:10rem!important}.ml-40{margin-left:10rem!important}.mt-48{margin-top:12rem!important}.mr-48{margin-right:12rem!important}.mb-48{margin-bottom:12rem!important}.ml-48{margin-left:12rem!important}.mt-56{margin-top:14rem!important}.mr-56{margin-right:14rem!important}.mb-56{margin-bottom:14rem!important}.ml-56{margin-left:14rem!important}.mt-64{margin-top:16rem!important}.mr-64{margin-right:16rem!important}.mb-64{margin-bottom:16rem!important}.ml-64{margin-left:16rem!important}.mt-auto{margin-top:auto!important}.mr-auto{margin-right:auto!important}.mb-auto{margin-bottom:auto!important}.ml-auto{margin-left:auto!important}.mt-px{margin-top:1px!important}.mr-px{margin-right:1px!important}.mb-px{margin-bottom:1px!important}.ml-px{margin-left:1px!important}.-mt-1{margin-top:-.25rem!important}.-mr-1{margin-right:-.25rem!important}.-mb-1{margin-bottom:-.25rem!important}.-ml-1{margin-left:-.25rem!important}.-mt-2{margin-top:-.5rem!important}.-mr-2{margin-right:-.5rem!important}.-mb-2{margin-bottom:-.5rem!important}.-ml-2{margin-left:-.5rem!important}.-mt-3{margin-top:-.75rem!important}.-mr-3{margin-right:-.75rem!important}.-mb-3{margin-bottom:-.75rem!important}.-ml-3{margin-left:-.75rem!important}.-mt-4{margin-top:-1rem!important}.-mr-4{margin-right:-1rem!important}.-mb-4{margin-bottom:-1rem!important}.-ml-4{margin-left:-1rem!important}.-mt-5{margin-top:-1.25rem!important}.-mr-5{margin-right:-1.25rem!important}.-mb-5{margin-bottom:-1.25rem!important}.-ml-5{margin-left:-1.25rem!important}.-mt-6{margin-top:-1.5rem!important}.-mr-6{margin-right:-1.5rem!important}.-mb-6{margin-bottom:-1.5rem!important}.-ml-6{margin-left:-1.5rem!important}.-mt-8{margin-top:-2rem!important}.-mr-8{margin-right:-2rem!important}.-mb-8{margin-bottom:-2rem!important}.-ml-8{margin-left:-2rem!important}.-mt-10{margin-top:-2.5rem!important}.-mr-10{margin-right:-2.5rem!important}.-mb-10{margin-bottom:-2.5rem!important}.-ml-10{margin-left:-2.5rem!important}.-mt-12{margin-top:-3rem!important}.-mr-12{margin-right:-3rem!important}.-mb-12{margin-bottom:-3rem!important}.-ml-12{margin-left:-3rem!important}.-mt-16{margin-top:-4rem!important}.-mr-16{margin-right:-4rem!important}.-mb-16{margin-bottom:-4rem!important}.-ml-16{margin-left:-4rem!important}.-mt-20{margin-top:-5rem!important}.-mr-20{margin-right:-5rem!important}.-mb-20{margin-bottom:-5rem!important}.-ml-20{margin-left:-5rem!important}.-mt-24{margin-top:-6rem!important}.-mr-24{margin-right:-6rem!important}.-mb-24{margin-bottom:-6rem!important}.-ml-24{margin-left:-6rem!important}.-mt-32{margin-top:-8rem!important}.-mr-32{margin-right:-8rem!important}.-mb-32{margin-bottom:-8rem!important}.-ml-32{margin-left:-8rem!important}.-mt-40{margin-top:-10rem!important}.-mr-40{margin-right:-10rem!important}.-mb-40{margin-bottom:-10rem!important}.-ml-40{margin-left:-10rem!important}.-mt-48{margin-top:-12rem!important}.-mr-48{margin-right:-12rem!important}.-mb-48{margin-bottom:-12rem!important}.-ml-48{margin-left:-12rem!important}.-mt-56{margin-top:-14rem!important}.-mr-56{margin-right:-14rem!important}.-mb-56{margin-bottom:-14rem!important}.-ml-56{margin-left:-14rem!important}.-mt-64{margin-top:-16rem!important}.-mr-64{margin-right:-16rem!important}.-mb-64{margin-bottom:-16rem!important}.-ml-64{margin-left:-16rem!important}.-mt-px{margin-top:-1px!important}.-mr-px{margin-right:-1px!important}.-mb-px{margin-bottom:-1px!important}.-ml-px{margin-left:-1px!important}.max-h-full{max-height:100%!important}.max-h-screen{max-height:100vh!important}.max-w-none{max-width:none!important}.max-w-xs{max-width:20rem!important}.max-w-sm{max-width:24rem!important}.max-w-md{max-width:28rem!important}.max-w-lg{max-width:32rem!important}.max-w-xl{max-width:36rem!important}.max-w-2xl{max-width:42rem!important}.max-w-3xl{max-width:48rem!important}.max-w-4xl{max-width:56rem!important}.max-w-5xl{max-width:64rem!important}.max-w-6xl{max-width:72rem!important}.max-w-full{max-width:100%!important}.max-w-screen-xs{max-width:599px!important}.max-w-screen-sm{max-width:600px!important}.max-w-screen-md{max-width:960px!important}.max-w-screen-lg{max-width:1280px!important}.max-w-screen-xl{max-width:1920px!important}.min-h-0{min-height:0!important}.min-h-full{min-height:100%!important}.min-h-screen{min-height:100vh!important}.min-w-0{min-width:0!important}.min-w-full{min-width:100%!important}.object-contain{object-fit:contain!important}.object-cover{object-fit:cover!important}.object-fill{object-fit:fill!important}.object-none{object-fit:none!important}.object-scale-down{object-fit:scale-down!important}.object-bottom{object-position:bottom!important}.object-center{object-position:center!important}.object-left{object-position:left!important}.object-left-bottom{object-position:left bottom!important}.object-left-top{object-position:left top!important}.object-right{object-position:right!important}.object-right-bottom{object-position:right bottom!important}.object-right-top{object-position:right top!important}.object-top{object-position:top!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.hover\\:opacity-0:hover{opacity:0!important}.hover\\:opacity-25:hover{opacity:.25!important}.hover\\:opacity-50:hover{opacity:.5!important}.hover\\:opacity-75:hover{opacity:.75!important}.hover\\:opacity-100:hover{opacity:1!important}.focus\\:opacity-0:focus{opacity:0!important}.focus\\:opacity-25:focus{opacity:.25!important}.focus\\:opacity-50:focus{opacity:.5!important}.focus\\:opacity-75:focus{opacity:.75!important}.focus\\:opacity-100:focus{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.overflow-x-auto{overflow-x:auto!important}.overflow-y-auto{overflow-y:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-x-visible{overflow-x:visible!important}.overflow-y-visible{overflow-y:visible!important}.overflow-x-scroll{overflow-x:scroll!important}.overflow-y-scroll{overflow-y:scroll!important}.scrolling-touch{-webkit-overflow-scrolling:touch!important}.scrolling-auto{-webkit-overflow-scrolling:auto!important}.overscroll-auto{overscroll-behavior:auto!important}.overscroll-contain{overscroll-behavior:contain!important}.overscroll-none{overscroll-behavior:none!important}.overscroll-y-auto{overscroll-behavior-y:auto!important}.overscroll-y-contain{overscroll-behavior-y:contain!important}.overscroll-y-none{overscroll-behavior-y:none!important}.overscroll-x-auto{overscroll-behavior-x:auto!important}.overscroll-x-contain{overscroll-behavior-x:contain!important}.overscroll-x-none{overscroll-behavior-x:none!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:.75rem!important}.p-4{padding:1rem!important}.p-5{padding:1.25rem!important}.p-6{padding:1.5rem!important}.p-8{padding:2rem!important}.p-10{padding:2.5rem!important}.p-12{padding:3rem!important}.p-16{padding:4rem!important}.p-20{padding:5rem!important}.p-24{padding:6rem!important}.p-32{padding:8rem!important}.p-40{padding:10rem!important}.p-48{padding:12rem!important}.p-56{padding:14rem!important}.p-64{padding:16rem!important}.p-px{padding:1px!important}.py-0{padding-top:0!important;padding-bottom:0!important}.px-0{padding-left:0!important;padding-right:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-5{padding-top:1.25rem!important;padding-bottom:1.25rem!important}.px-5{padding-left:1.25rem!important;padding-right:1.25rem!important}.py-6{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-8{padding-top:2rem!important;padding-bottom:2rem!important}.px-8{padding-left:2rem!important;padding-right:2rem!important}.py-10{padding-top:2.5rem!important;padding-bottom:2.5rem!important}.px-10{padding-left:2.5rem!important;padding-right:2.5rem!important}.py-12{padding-top:3rem!important;padding-bottom:3rem!important}.px-12{padding-left:3rem!important;padding-right:3rem!important}.py-16{padding-top:4rem!important;padding-bottom:4rem!important}.px-16{padding-left:4rem!important;padding-right:4rem!important}.py-20{padding-top:5rem!important;padding-bottom:5rem!important}.px-20{padding-left:5rem!important;padding-right:5rem!important}.py-24{padding-top:6rem!important;padding-bottom:6rem!important}.px-24{padding-left:6rem!important;padding-right:6rem!important}.py-32{padding-top:8rem!important;padding-bottom:8rem!important}.px-32{padding-left:8rem!important;padding-right:8rem!important}.py-40{padding-top:10rem!important;padding-bottom:10rem!important}.px-40{padding-left:10rem!important;padding-right:10rem!important}.py-48{padding-top:12rem!important;padding-bottom:12rem!important}.px-48{padding-left:12rem!important;padding-right:12rem!important}.py-56{padding-top:14rem!important;padding-bottom:14rem!important}.px-56{padding-left:14rem!important;padding-right:14rem!important}.py-64{padding-top:16rem!important;padding-bottom:16rem!important}.px-64{padding-left:16rem!important;padding-right:16rem!important}.py-px{padding-top:1px!important;padding-bottom:1px!important}.px-px{padding-left:1px!important;padding-right:1px!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.pt-1{padding-top:.25rem!important}.pr-1{padding-right:.25rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.pt-2{padding-top:.5rem!important}.pr-2{padding-right:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pl-2{padding-left:.5rem!important}.pt-3{padding-top:.75rem!important}.pr-3{padding-right:.75rem!important}.pb-3{padding-bottom:.75rem!important}.pl-3{padding-left:.75rem!important}.pt-4{padding-top:1rem!important}.pr-4{padding-right:1rem!important}.pb-4{padding-bottom:1rem!important}.pl-4{padding-left:1rem!important}.pt-5{padding-top:1.25rem!important}.pr-5{padding-right:1.25rem!important}.pb-5{padding-bottom:1.25rem!important}.pl-5{padding-left:1.25rem!important}.pt-6{padding-top:1.5rem!important}.pr-6{padding-right:1.5rem!important}.pb-6{padding-bottom:1.5rem!important}.pl-6{padding-left:1.5rem!important}.pt-8{padding-top:2rem!important}.pr-8{padding-right:2rem!important}.pb-8{padding-bottom:2rem!important}.pl-8{padding-left:2rem!important}.pt-10{padding-top:2.5rem!important}.pr-10{padding-right:2.5rem!important}.pb-10{padding-bottom:2.5rem!important}.pl-10{padding-left:2.5rem!important}.pt-12{padding-top:3rem!important}.pr-12{padding-right:3rem!important}.pb-12{padding-bottom:3rem!important}.pl-12{padding-left:3rem!important}.pt-16{padding-top:4rem!important}.pr-16{padding-right:4rem!important}.pb-16{padding-bottom:4rem!important}.pl-16{padding-left:4rem!important}.pt-20{padding-top:5rem!important}.pr-20{padding-right:5rem!important}.pb-20{padding-bottom:5rem!important}.pl-20{padding-left:5rem!important}.pt-24{padding-top:6rem!important}.pr-24{padding-right:6rem!important}.pb-24{padding-bottom:6rem!important}.pl-24{padding-left:6rem!important}.pt-32{padding-top:8rem!important}.pr-32{padding-right:8rem!important}.pb-32{padding-bottom:8rem!important}.pl-32{padding-left:8rem!important}.pt-40{padding-top:10rem!important}.pr-40{padding-right:10rem!important}.pb-40{padding-bottom:10rem!important}.pl-40{padding-left:10rem!important}.pt-48{padding-top:12rem!important}.pr-48{padding-right:12rem!important}.pb-48{padding-bottom:12rem!important}.pl-48{padding-left:12rem!important}.pt-56{padding-top:14rem!important}.pr-56{padding-right:14rem!important}.pb-56{padding-bottom:14rem!important}.pl-56{padding-left:14rem!important}.pt-64{padding-top:16rem!important}.pr-64{padding-right:16rem!important}.pb-64{padding-bottom:16rem!important}.pl-64{padding-left:16rem!important}.pt-px{padding-top:1px!important}.pr-px{padding-right:1px!important}.pb-px{padding-bottom:1px!important}.pl-px{padding-left:1px!important}.placeholder-transparent::placeholder{color:transparent!important}.placeholder-current::placeholder{color:currentColor!important}.placeholder-black::placeholder{--placeholder-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--placeholder-opacity))!important}.placeholder-white::placeholder{--placeholder-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--placeholder-opacity))!important}.placeholder-gray-100::placeholder{--placeholder-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--placeholder-opacity))!important}.placeholder-gray-200::placeholder{--placeholder-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--placeholder-opacity))!important}.placeholder-gray-300::placeholder{--placeholder-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--placeholder-opacity))!important}.placeholder-gray-400::placeholder{--placeholder-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--placeholder-opacity))!important}.placeholder-gray-500::placeholder{--placeholder-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--placeholder-opacity))!important}.placeholder-gray-600::placeholder{--placeholder-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--placeholder-opacity))!important}.placeholder-gray-700::placeholder{--placeholder-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--placeholder-opacity))!important}.placeholder-gray-800::placeholder{--placeholder-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--placeholder-opacity))!important}.placeholder-gray-900::placeholder{--placeholder-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--placeholder-opacity))!important}.placeholder-red-100::placeholder{--placeholder-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--placeholder-opacity))!important}.placeholder-red-200::placeholder{--placeholder-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--placeholder-opacity))!important}.placeholder-red-300::placeholder{--placeholder-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--placeholder-opacity))!important}.placeholder-red-400::placeholder{--placeholder-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--placeholder-opacity))!important}.placeholder-red-500::placeholder{--placeholder-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--placeholder-opacity))!important}.placeholder-red-600::placeholder{--placeholder-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--placeholder-opacity))!important}.placeholder-red-700::placeholder{--placeholder-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--placeholder-opacity))!important}.placeholder-red-800::placeholder{--placeholder-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--placeholder-opacity))!important}.placeholder-red-900::placeholder{--placeholder-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--placeholder-opacity))!important}.placeholder-orange-100::placeholder{--placeholder-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--placeholder-opacity))!important}.placeholder-orange-200::placeholder{--placeholder-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--placeholder-opacity))!important}.placeholder-orange-300::placeholder{--placeholder-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--placeholder-opacity))!important}.placeholder-orange-400::placeholder{--placeholder-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--placeholder-opacity))!important}.placeholder-orange-500::placeholder{--placeholder-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--placeholder-opacity))!important}.placeholder-orange-600::placeholder{--placeholder-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--placeholder-opacity))!important}.placeholder-orange-700::placeholder{--placeholder-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--placeholder-opacity))!important}.placeholder-orange-800::placeholder{--placeholder-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--placeholder-opacity))!important}.placeholder-orange-900::placeholder{--placeholder-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--placeholder-opacity))!important}.placeholder-yellow-100::placeholder{--placeholder-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--placeholder-opacity))!important}.placeholder-yellow-200::placeholder{--placeholder-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--placeholder-opacity))!important}.placeholder-yellow-300::placeholder{--placeholder-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--placeholder-opacity))!important}.placeholder-yellow-400::placeholder{--placeholder-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--placeholder-opacity))!important}.placeholder-yellow-500::placeholder{--placeholder-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--placeholder-opacity))!important}.placeholder-yellow-600::placeholder{--placeholder-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--placeholder-opacity))!important}.placeholder-yellow-700::placeholder{--placeholder-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--placeholder-opacity))!important}.placeholder-yellow-800::placeholder{--placeholder-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--placeholder-opacity))!important}.placeholder-yellow-900::placeholder{--placeholder-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--placeholder-opacity))!important}.placeholder-green-100::placeholder{--placeholder-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--placeholder-opacity))!important}.placeholder-green-200::placeholder{--placeholder-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--placeholder-opacity))!important}.placeholder-green-300::placeholder{--placeholder-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--placeholder-opacity))!important}.placeholder-green-400::placeholder{--placeholder-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--placeholder-opacity))!important}.placeholder-green-500::placeholder{--placeholder-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--placeholder-opacity))!important}.placeholder-green-600::placeholder{--placeholder-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--placeholder-opacity))!important}.placeholder-green-700::placeholder{--placeholder-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--placeholder-opacity))!important}.placeholder-green-800::placeholder{--placeholder-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--placeholder-opacity))!important}.placeholder-green-900::placeholder{--placeholder-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--placeholder-opacity))!important}.placeholder-teal-100::placeholder{--placeholder-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--placeholder-opacity))!important}.placeholder-teal-200::placeholder{--placeholder-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--placeholder-opacity))!important}.placeholder-teal-300::placeholder{--placeholder-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--placeholder-opacity))!important}.placeholder-teal-400::placeholder{--placeholder-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--placeholder-opacity))!important}.placeholder-teal-500::placeholder{--placeholder-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--placeholder-opacity))!important}.placeholder-teal-600::placeholder{--placeholder-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--placeholder-opacity))!important}.placeholder-teal-700::placeholder{--placeholder-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--placeholder-opacity))!important}.placeholder-teal-800::placeholder{--placeholder-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--placeholder-opacity))!important}.placeholder-teal-900::placeholder{--placeholder-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--placeholder-opacity))!important}.placeholder-blue-100::placeholder{--placeholder-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--placeholder-opacity))!important}.placeholder-blue-200::placeholder{--placeholder-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--placeholder-opacity))!important}.placeholder-blue-300::placeholder{--placeholder-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--placeholder-opacity))!important}.placeholder-blue-400::placeholder{--placeholder-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--placeholder-opacity))!important}.placeholder-blue-500::placeholder{--placeholder-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--placeholder-opacity))!important}.placeholder-blue-600::placeholder{--placeholder-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--placeholder-opacity))!important}.placeholder-blue-700::placeholder{--placeholder-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--placeholder-opacity))!important}.placeholder-blue-800::placeholder{--placeholder-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--placeholder-opacity))!important}.placeholder-blue-900::placeholder{--placeholder-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--placeholder-opacity))!important}.placeholder-indigo-100::placeholder{--placeholder-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--placeholder-opacity))!important}.placeholder-indigo-200::placeholder{--placeholder-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--placeholder-opacity))!important}.placeholder-indigo-300::placeholder{--placeholder-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--placeholder-opacity))!important}.placeholder-indigo-400::placeholder{--placeholder-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--placeholder-opacity))!important}.placeholder-indigo-500::placeholder{--placeholder-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--placeholder-opacity))!important}.placeholder-indigo-600::placeholder{--placeholder-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--placeholder-opacity))!important}.placeholder-indigo-700::placeholder{--placeholder-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--placeholder-opacity))!important}.placeholder-indigo-800::placeholder{--placeholder-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--placeholder-opacity))!important}.placeholder-indigo-900::placeholder{--placeholder-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--placeholder-opacity))!important}.placeholder-purple-100::placeholder{--placeholder-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--placeholder-opacity))!important}.placeholder-purple-200::placeholder{--placeholder-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--placeholder-opacity))!important}.placeholder-purple-300::placeholder{--placeholder-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--placeholder-opacity))!important}.placeholder-purple-400::placeholder{--placeholder-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--placeholder-opacity))!important}.placeholder-purple-500::placeholder{--placeholder-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--placeholder-opacity))!important}.placeholder-purple-600::placeholder{--placeholder-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--placeholder-opacity))!important}.placeholder-purple-700::placeholder{--placeholder-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--placeholder-opacity))!important}.placeholder-purple-800::placeholder{--placeholder-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--placeholder-opacity))!important}.placeholder-purple-900::placeholder{--placeholder-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--placeholder-opacity))!important}.placeholder-pink-100::placeholder{--placeholder-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--placeholder-opacity))!important}.placeholder-pink-200::placeholder{--placeholder-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--placeholder-opacity))!important}.placeholder-pink-300::placeholder{--placeholder-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--placeholder-opacity))!important}.placeholder-pink-400::placeholder{--placeholder-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--placeholder-opacity))!important}.placeholder-pink-500::placeholder{--placeholder-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--placeholder-opacity))!important}.placeholder-pink-600::placeholder{--placeholder-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--placeholder-opacity))!important}.placeholder-pink-700::placeholder{--placeholder-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--placeholder-opacity))!important}.placeholder-pink-800::placeholder{--placeholder-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--placeholder-opacity))!important}.placeholder-pink-900::placeholder{--placeholder-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--placeholder-opacity))!important}.focus\\:placeholder-transparent:focus::placeholder{color:transparent!important}.focus\\:placeholder-current:focus::placeholder{color:currentColor!important}.focus\\:placeholder-black:focus::placeholder{--placeholder-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--placeholder-opacity))!important}.focus\\:placeholder-white:focus::placeholder{--placeholder-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--placeholder-opacity))!important}.focus\\:placeholder-gray-100:focus::placeholder{--placeholder-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--placeholder-opacity))!important}.focus\\:placeholder-gray-200:focus::placeholder{--placeholder-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--placeholder-opacity))!important}.focus\\:placeholder-gray-300:focus::placeholder{--placeholder-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--placeholder-opacity))!important}.focus\\:placeholder-gray-400:focus::placeholder{--placeholder-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--placeholder-opacity))!important}.focus\\:placeholder-gray-500:focus::placeholder{--placeholder-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--placeholder-opacity))!important}.focus\\:placeholder-gray-600:focus::placeholder{--placeholder-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--placeholder-opacity))!important}.focus\\:placeholder-gray-700:focus::placeholder{--placeholder-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--placeholder-opacity))!important}.focus\\:placeholder-gray-800:focus::placeholder{--placeholder-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--placeholder-opacity))!important}.focus\\:placeholder-gray-900:focus::placeholder{--placeholder-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--placeholder-opacity))!important}.focus\\:placeholder-red-100:focus::placeholder{--placeholder-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--placeholder-opacity))!important}.focus\\:placeholder-red-200:focus::placeholder{--placeholder-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--placeholder-opacity))!important}.focus\\:placeholder-red-300:focus::placeholder{--placeholder-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--placeholder-opacity))!important}.focus\\:placeholder-red-400:focus::placeholder{--placeholder-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--placeholder-opacity))!important}.focus\\:placeholder-red-500:focus::placeholder{--placeholder-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--placeholder-opacity))!important}.focus\\:placeholder-red-600:focus::placeholder{--placeholder-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--placeholder-opacity))!important}.focus\\:placeholder-red-700:focus::placeholder{--placeholder-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--placeholder-opacity))!important}.focus\\:placeholder-red-800:focus::placeholder{--placeholder-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--placeholder-opacity))!important}.focus\\:placeholder-red-900:focus::placeholder{--placeholder-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--placeholder-opacity))!important}.focus\\:placeholder-orange-100:focus::placeholder{--placeholder-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--placeholder-opacity))!important}.focus\\:placeholder-orange-200:focus::placeholder{--placeholder-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--placeholder-opacity))!important}.focus\\:placeholder-orange-300:focus::placeholder{--placeholder-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--placeholder-opacity))!important}.focus\\:placeholder-orange-400:focus::placeholder{--placeholder-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--placeholder-opacity))!important}.focus\\:placeholder-orange-500:focus::placeholder{--placeholder-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--placeholder-opacity))!important}.focus\\:placeholder-orange-600:focus::placeholder{--placeholder-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--placeholder-opacity))!important}.focus\\:placeholder-orange-700:focus::placeholder{--placeholder-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--placeholder-opacity))!important}.focus\\:placeholder-orange-800:focus::placeholder{--placeholder-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--placeholder-opacity))!important}.focus\\:placeholder-orange-900:focus::placeholder{--placeholder-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--placeholder-opacity))!important}.focus\\:placeholder-yellow-100:focus::placeholder{--placeholder-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--placeholder-opacity))!important}.focus\\:placeholder-yellow-200:focus::placeholder{--placeholder-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--placeholder-opacity))!important}.focus\\:placeholder-yellow-300:focus::placeholder{--placeholder-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--placeholder-opacity))!important}.focus\\:placeholder-yellow-400:focus::placeholder{--placeholder-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--placeholder-opacity))!important}.focus\\:placeholder-yellow-500:focus::placeholder{--placeholder-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--placeholder-opacity))!important}.focus\\:placeholder-yellow-600:focus::placeholder{--placeholder-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--placeholder-opacity))!important}.focus\\:placeholder-yellow-700:focus::placeholder{--placeholder-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--placeholder-opacity))!important}.focus\\:placeholder-yellow-800:focus::placeholder{--placeholder-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--placeholder-opacity))!important}.focus\\:placeholder-yellow-900:focus::placeholder{--placeholder-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--placeholder-opacity))!important}.focus\\:placeholder-green-100:focus::placeholder{--placeholder-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--placeholder-opacity))!important}.focus\\:placeholder-green-200:focus::placeholder{--placeholder-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--placeholder-opacity))!important}.focus\\:placeholder-green-300:focus::placeholder{--placeholder-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--placeholder-opacity))!important}.focus\\:placeholder-green-400:focus::placeholder{--placeholder-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--placeholder-opacity))!important}.focus\\:placeholder-green-500:focus::placeholder{--placeholder-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--placeholder-opacity))!important}.focus\\:placeholder-green-600:focus::placeholder{--placeholder-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--placeholder-opacity))!important}.focus\\:placeholder-green-700:focus::placeholder{--placeholder-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--placeholder-opacity))!important}.focus\\:placeholder-green-800:focus::placeholder{--placeholder-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--placeholder-opacity))!important}.focus\\:placeholder-green-900:focus::placeholder{--placeholder-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--placeholder-opacity))!important}.focus\\:placeholder-teal-100:focus::placeholder{--placeholder-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--placeholder-opacity))!important}.focus\\:placeholder-teal-200:focus::placeholder{--placeholder-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--placeholder-opacity))!important}.focus\\:placeholder-teal-300:focus::placeholder{--placeholder-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--placeholder-opacity))!important}.focus\\:placeholder-teal-400:focus::placeholder{--placeholder-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--placeholder-opacity))!important}.focus\\:placeholder-teal-500:focus::placeholder{--placeholder-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--placeholder-opacity))!important}.focus\\:placeholder-teal-600:focus::placeholder{--placeholder-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--placeholder-opacity))!important}.focus\\:placeholder-teal-700:focus::placeholder{--placeholder-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--placeholder-opacity))!important}.focus\\:placeholder-teal-800:focus::placeholder{--placeholder-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--placeholder-opacity))!important}.focus\\:placeholder-teal-900:focus::placeholder{--placeholder-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--placeholder-opacity))!important}.focus\\:placeholder-blue-100:focus::placeholder{--placeholder-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--placeholder-opacity))!important}.focus\\:placeholder-blue-200:focus::placeholder{--placeholder-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--placeholder-opacity))!important}.focus\\:placeholder-blue-300:focus::placeholder{--placeholder-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--placeholder-opacity))!important}.focus\\:placeholder-blue-400:focus::placeholder{--placeholder-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--placeholder-opacity))!important}.focus\\:placeholder-blue-500:focus::placeholder{--placeholder-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--placeholder-opacity))!important}.focus\\:placeholder-blue-600:focus::placeholder{--placeholder-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--placeholder-opacity))!important}.focus\\:placeholder-blue-700:focus::placeholder{--placeholder-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--placeholder-opacity))!important}.focus\\:placeholder-blue-800:focus::placeholder{--placeholder-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--placeholder-opacity))!important}.focus\\:placeholder-blue-900:focus::placeholder{--placeholder-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--placeholder-opacity))!important}.focus\\:placeholder-indigo-100:focus::placeholder{--placeholder-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--placeholder-opacity))!important}.focus\\:placeholder-indigo-200:focus::placeholder{--placeholder-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--placeholder-opacity))!important}.focus\\:placeholder-indigo-300:focus::placeholder{--placeholder-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--placeholder-opacity))!important}.focus\\:placeholder-indigo-400:focus::placeholder{--placeholder-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--placeholder-opacity))!important}.focus\\:placeholder-indigo-500:focus::placeholder{--placeholder-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--placeholder-opacity))!important}.focus\\:placeholder-indigo-600:focus::placeholder{--placeholder-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--placeholder-opacity))!important}.focus\\:placeholder-indigo-700:focus::placeholder{--placeholder-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--placeholder-opacity))!important}.focus\\:placeholder-indigo-800:focus::placeholder{--placeholder-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--placeholder-opacity))!important}.focus\\:placeholder-indigo-900:focus::placeholder{--placeholder-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--placeholder-opacity))!important}.focus\\:placeholder-purple-100:focus::placeholder{--placeholder-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--placeholder-opacity))!important}.focus\\:placeholder-purple-200:focus::placeholder{--placeholder-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--placeholder-opacity))!important}.focus\\:placeholder-purple-300:focus::placeholder{--placeholder-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--placeholder-opacity))!important}.focus\\:placeholder-purple-400:focus::placeholder{--placeholder-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--placeholder-opacity))!important}.focus\\:placeholder-purple-500:focus::placeholder{--placeholder-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--placeholder-opacity))!important}.focus\\:placeholder-purple-600:focus::placeholder{--placeholder-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--placeholder-opacity))!important}.focus\\:placeholder-purple-700:focus::placeholder{--placeholder-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--placeholder-opacity))!important}.focus\\:placeholder-purple-800:focus::placeholder{--placeholder-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--placeholder-opacity))!important}.focus\\:placeholder-purple-900:focus::placeholder{--placeholder-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--placeholder-opacity))!important}.focus\\:placeholder-pink-100:focus::placeholder{--placeholder-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--placeholder-opacity))!important}.focus\\:placeholder-pink-200:focus::placeholder{--placeholder-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--placeholder-opacity))!important}.focus\\:placeholder-pink-300:focus::placeholder{--placeholder-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--placeholder-opacity))!important}.focus\\:placeholder-pink-400:focus::placeholder{--placeholder-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--placeholder-opacity))!important}.focus\\:placeholder-pink-500:focus::placeholder{--placeholder-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--placeholder-opacity))!important}.focus\\:placeholder-pink-600:focus::placeholder{--placeholder-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--placeholder-opacity))!important}.focus\\:placeholder-pink-700:focus::placeholder{--placeholder-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--placeholder-opacity))!important}.focus\\:placeholder-pink-800:focus::placeholder{--placeholder-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--placeholder-opacity))!important}.focus\\:placeholder-pink-900:focus::placeholder{--placeholder-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--placeholder-opacity))!important}.placeholder-opacity-0::placeholder{--placeholder-opacity:0!important}.placeholder-opacity-25::placeholder{--placeholder-opacity:0.25!important}.placeholder-opacity-50::placeholder{--placeholder-opacity:0.5!important}.placeholder-opacity-75::placeholder{--placeholder-opacity:0.75!important}.placeholder-opacity-100::placeholder{--placeholder-opacity:1!important}.focus\\:placeholder-opacity-0:focus::placeholder{--placeholder-opacity:0!important}.focus\\:placeholder-opacity-25:focus::placeholder{--placeholder-opacity:0.25!important}.focus\\:placeholder-opacity-50:focus::placeholder{--placeholder-opacity:0.5!important}.focus\\:placeholder-opacity-75:focus::placeholder{--placeholder-opacity:0.75!important}.focus\\:placeholder-opacity-100:focus::placeholder{--placeholder-opacity:1!important}.pointer-events-none{pointer-events:none!important}.pointer-events-auto{pointer-events:auto!important}.static{position:static!important}.fixed{position:fixed!important}.absolute{position:absolute!important}.relative{position:relative!important}.sticky{position:sticky!important}.inset-0{top:0!important;right:0!important;bottom:0!important;left:0!important}.inset-auto{top:auto!important;right:auto!important;bottom:auto!important;left:auto!important}.inset-y-0{top:0!important;bottom:0!important}.inset-x-0{right:0!important;left:0!important}.inset-y-auto{top:auto!important;bottom:auto!important}.inset-x-auto{right:auto!important;left:auto!important}.top-0{top:0!important}.right-0{right:0!important}.bottom-0{bottom:0!important}.left-0{left:0!important}.top-auto{top:auto!important}.right-auto{right:auto!important}.bottom-auto{bottom:auto!important}.left-auto{left:auto!important}.resize-none{resize:none!important}.resize-y{resize:vertical!important}.resize-x{resize:horizontal!important}.resize{resize:both!important}.shadow-xs{box-shadow:0 0 0 1px rgba(0,0,0,.05)!important}.shadow-sm{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important}.shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)!important}.shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)!important}.shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)!important}.shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)!important}.shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important}.shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)!important}.shadow-outline{box-shadow:0 0 0 3px rgba(66,153,225,.5)!important}.shadow-none{box-shadow:none!important}.hover\\:shadow-xs:hover{box-shadow:0 0 0 1px rgba(0,0,0,.05)!important}.hover\\:shadow-sm:hover{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important}.hover\\:shadow:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)!important}.hover\\:shadow-md:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)!important}.hover\\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)!important}.hover\\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)!important}.hover\\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important}.hover\\:shadow-inner:hover{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)!important}.hover\\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(66,153,225,.5)!important}.hover\\:shadow-none:hover{box-shadow:none!important}.focus\\:shadow-xs:focus{box-shadow:0 0 0 1px rgba(0,0,0,.05)!important}.focus\\:shadow-sm:focus{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important}.focus\\:shadow:focus{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)!important}.focus\\:shadow-md:focus{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)!important}.focus\\:shadow-lg:focus{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)!important}.focus\\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)!important}.focus\\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important}.focus\\:shadow-inner:focus{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)!important}.focus\\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(66,153,225,.5)!important}.focus\\:shadow-none:focus{box-shadow:none!important}.fill-current{fill:currentColor!important}.stroke-current{stroke:currentColor!important}.stroke-0{stroke-width:0!important}.stroke-1{stroke-width:1!important}.stroke-2{stroke-width:2!important}.table-auto{table-layout:auto!important}.table-fixed{table-layout:fixed!important}.text-left{text-align:left!important}.text-center{text-align:center!important}.text-right{text-align:right!important}.text-justify{text-align:justify!important}.text-transparent{color:transparent!important}.text-current{color:currentColor!important}.text-black{color:#000!important;color:rgba(0,0,0,var(--text-opacity))!important}.text-black,.text-white{--text-opacity:1!important}.text-white{color:#fff!important;color:rgba(255,255,255,var(--text-opacity))!important}.text-gray-100{--text-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--text-opacity))!important}.text-gray-200{--text-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--text-opacity))!important}.text-gray-300{--text-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--text-opacity))!important}.text-gray-400{--text-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--text-opacity))!important}.text-gray-500{--text-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--text-opacity))!important}.text-gray-600{--text-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--text-opacity))!important}.text-gray-700{--text-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--text-opacity))!important}.text-gray-800{--text-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--text-opacity))!important}.text-gray-900{--text-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--text-opacity))!important}.text-red-100{--text-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--text-opacity))!important}.text-red-200{--text-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--text-opacity))!important}.text-red-300{--text-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--text-opacity))!important}.text-red-400{--text-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--text-opacity))!important}.text-red-500{--text-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--text-opacity))!important}.text-red-600{--text-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--text-opacity))!important}.text-red-700{--text-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--text-opacity))!important}.text-red-800{--text-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--text-opacity))!important}.text-red-900{--text-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--text-opacity))!important}.text-orange-100{--text-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--text-opacity))!important}.text-orange-200{--text-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--text-opacity))!important}.text-orange-300{--text-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--text-opacity))!important}.text-orange-400{--text-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--text-opacity))!important}.text-orange-500{--text-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--text-opacity))!important}.text-orange-600{--text-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--text-opacity))!important}.text-orange-700{--text-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--text-opacity))!important}.text-orange-800{--text-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--text-opacity))!important}.text-orange-900{--text-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--text-opacity))!important}.text-yellow-100{--text-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--text-opacity))!important}.text-yellow-200{--text-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--text-opacity))!important}.text-yellow-300{--text-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--text-opacity))!important}.text-yellow-400{--text-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--text-opacity))!important}.text-yellow-500{--text-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--text-opacity))!important}.text-yellow-600{--text-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--text-opacity))!important}.text-yellow-700{--text-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--text-opacity))!important}.text-yellow-800{--text-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--text-opacity))!important}.text-yellow-900{--text-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--text-opacity))!important}.text-green-100{--text-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--text-opacity))!important}.text-green-200{--text-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--text-opacity))!important}.text-green-300{--text-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--text-opacity))!important}.text-green-400{--text-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--text-opacity))!important}.text-green-500{--text-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--text-opacity))!important}.text-green-600{--text-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--text-opacity))!important}.text-green-700{--text-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--text-opacity))!important}.text-green-800{--text-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--text-opacity))!important}.text-green-900{--text-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--text-opacity))!important}.text-teal-100{--text-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--text-opacity))!important}.text-teal-200{--text-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--text-opacity))!important}.text-teal-300{--text-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--text-opacity))!important}.text-teal-400{--text-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--text-opacity))!important}.text-teal-500{--text-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--text-opacity))!important}.text-teal-600{--text-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--text-opacity))!important}.text-teal-700{--text-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--text-opacity))!important}.text-teal-800{--text-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--text-opacity))!important}.text-teal-900{--text-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--text-opacity))!important}.text-blue-100{--text-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--text-opacity))!important}.text-blue-200{--text-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--text-opacity))!important}.text-blue-300{--text-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--text-opacity))!important}.text-blue-400{--text-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--text-opacity))!important}.text-blue-500{--text-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--text-opacity))!important}.text-blue-600{--text-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--text-opacity))!important}.text-blue-700{--text-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--text-opacity))!important}.text-blue-800{--text-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--text-opacity))!important}.text-blue-900{--text-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--text-opacity))!important}.text-indigo-100{--text-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--text-opacity))!important}.text-indigo-200{--text-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--text-opacity))!important}.text-indigo-300{--text-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--text-opacity))!important}.text-indigo-400{--text-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--text-opacity))!important}.text-indigo-500{--text-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--text-opacity))!important}.text-indigo-600{--text-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--text-opacity))!important}.text-indigo-700{--text-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--text-opacity))!important}.text-indigo-800{--text-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--text-opacity))!important}.text-indigo-900{--text-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--text-opacity))!important}.text-purple-100{--text-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--text-opacity))!important}.text-purple-200{--text-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--text-opacity))!important}.text-purple-300{--text-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--text-opacity))!important}.text-purple-400{--text-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--text-opacity))!important}.text-purple-500{--text-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--text-opacity))!important}.text-purple-600{--text-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--text-opacity))!important}.text-purple-700{--text-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--text-opacity))!important}.text-purple-800{--text-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--text-opacity))!important}.text-purple-900{--text-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--text-opacity))!important}.text-pink-100{--text-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--text-opacity))!important}.text-pink-200{--text-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--text-opacity))!important}.text-pink-300{--text-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--text-opacity))!important}.text-pink-400{--text-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--text-opacity))!important}.text-pink-500{--text-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--text-opacity))!important}.text-pink-600{--text-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--text-opacity))!important}.text-pink-700{--text-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--text-opacity))!important}.text-pink-800{--text-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--text-opacity))!important}.text-pink-900{--text-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--text-opacity))!important}.hover\\:text-transparent:hover{color:transparent!important}.hover\\:text-current:hover{color:currentColor!important}.hover\\:text-black:hover{--text-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--text-opacity))!important}.hover\\:text-white:hover{--text-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--text-opacity))!important}.hover\\:text-gray-100:hover{--text-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--text-opacity))!important}.hover\\:text-gray-200:hover{--text-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--text-opacity))!important}.hover\\:text-gray-300:hover{--text-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--text-opacity))!important}.hover\\:text-gray-400:hover{--text-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--text-opacity))!important}.hover\\:text-gray-500:hover{--text-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--text-opacity))!important}.hover\\:text-gray-600:hover{--text-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--text-opacity))!important}.hover\\:text-gray-700:hover{--text-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--text-opacity))!important}.hover\\:text-gray-800:hover{--text-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--text-opacity))!important}.hover\\:text-gray-900:hover{--text-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--text-opacity))!important}.hover\\:text-red-100:hover{--text-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--text-opacity))!important}.hover\\:text-red-200:hover{--text-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--text-opacity))!important}.hover\\:text-red-300:hover{--text-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--text-opacity))!important}.hover\\:text-red-400:hover{--text-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--text-opacity))!important}.hover\\:text-red-500:hover{--text-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--text-opacity))!important}.hover\\:text-red-600:hover{--text-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--text-opacity))!important}.hover\\:text-red-700:hover{--text-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--text-opacity))!important}.hover\\:text-red-800:hover{--text-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--text-opacity))!important}.hover\\:text-red-900:hover{--text-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--text-opacity))!important}.hover\\:text-orange-100:hover{--text-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--text-opacity))!important}.hover\\:text-orange-200:hover{--text-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--text-opacity))!important}.hover\\:text-orange-300:hover{--text-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--text-opacity))!important}.hover\\:text-orange-400:hover{--text-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--text-opacity))!important}.hover\\:text-orange-500:hover{--text-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--text-opacity))!important}.hover\\:text-orange-600:hover{--text-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--text-opacity))!important}.hover\\:text-orange-700:hover{--text-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--text-opacity))!important}.hover\\:text-orange-800:hover{--text-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--text-opacity))!important}.hover\\:text-orange-900:hover{--text-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--text-opacity))!important}.hover\\:text-yellow-100:hover{--text-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--text-opacity))!important}.hover\\:text-yellow-200:hover{--text-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--text-opacity))!important}.hover\\:text-yellow-300:hover{--text-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--text-opacity))!important}.hover\\:text-yellow-400:hover{--text-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--text-opacity))!important}.hover\\:text-yellow-500:hover{--text-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--text-opacity))!important}.hover\\:text-yellow-600:hover{--text-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--text-opacity))!important}.hover\\:text-yellow-700:hover{--text-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--text-opacity))!important}.hover\\:text-yellow-800:hover{--text-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--text-opacity))!important}.hover\\:text-yellow-900:hover{--text-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--text-opacity))!important}.hover\\:text-green-100:hover{--text-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--text-opacity))!important}.hover\\:text-green-200:hover{--text-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--text-opacity))!important}.hover\\:text-green-300:hover{--text-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--text-opacity))!important}.hover\\:text-green-400:hover{--text-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--text-opacity))!important}.hover\\:text-green-500:hover{--text-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--text-opacity))!important}.hover\\:text-green-600:hover{--text-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--text-opacity))!important}.hover\\:text-green-700:hover{--text-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--text-opacity))!important}.hover\\:text-green-800:hover{--text-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--text-opacity))!important}.hover\\:text-green-900:hover{--text-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--text-opacity))!important}.hover\\:text-teal-100:hover{--text-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--text-opacity))!important}.hover\\:text-teal-200:hover{--text-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--text-opacity))!important}.hover\\:text-teal-300:hover{--text-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--text-opacity))!important}.hover\\:text-teal-400:hover{--text-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--text-opacity))!important}.hover\\:text-teal-500:hover{--text-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--text-opacity))!important}.hover\\:text-teal-600:hover{--text-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--text-opacity))!important}.hover\\:text-teal-700:hover{--text-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--text-opacity))!important}.hover\\:text-teal-800:hover{--text-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--text-opacity))!important}.hover\\:text-teal-900:hover{--text-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--text-opacity))!important}.hover\\:text-blue-100:hover{--text-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--text-opacity))!important}.hover\\:text-blue-200:hover{--text-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--text-opacity))!important}.hover\\:text-blue-300:hover{--text-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--text-opacity))!important}.hover\\:text-blue-400:hover{--text-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--text-opacity))!important}.hover\\:text-blue-500:hover{--text-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--text-opacity))!important}.hover\\:text-blue-600:hover{--text-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--text-opacity))!important}.hover\\:text-blue-700:hover{--text-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--text-opacity))!important}.hover\\:text-blue-800:hover{--text-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--text-opacity))!important}.hover\\:text-blue-900:hover{--text-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--text-opacity))!important}.hover\\:text-indigo-100:hover{--text-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--text-opacity))!important}.hover\\:text-indigo-200:hover{--text-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--text-opacity))!important}.hover\\:text-indigo-300:hover{--text-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--text-opacity))!important}.hover\\:text-indigo-400:hover{--text-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--text-opacity))!important}.hover\\:text-indigo-500:hover{--text-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--text-opacity))!important}.hover\\:text-indigo-600:hover{--text-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--text-opacity))!important}.hover\\:text-indigo-700:hover{--text-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--text-opacity))!important}.hover\\:text-indigo-800:hover{--text-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--text-opacity))!important}.hover\\:text-indigo-900:hover{--text-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--text-opacity))!important}.hover\\:text-purple-100:hover{--text-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--text-opacity))!important}.hover\\:text-purple-200:hover{--text-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--text-opacity))!important}.hover\\:text-purple-300:hover{--text-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--text-opacity))!important}.hover\\:text-purple-400:hover{--text-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--text-opacity))!important}.hover\\:text-purple-500:hover{--text-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--text-opacity))!important}.hover\\:text-purple-600:hover{--text-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--text-opacity))!important}.hover\\:text-purple-700:hover{--text-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--text-opacity))!important}.hover\\:text-purple-800:hover{--text-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--text-opacity))!important}.hover\\:text-purple-900:hover{--text-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--text-opacity))!important}.hover\\:text-pink-100:hover{--text-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--text-opacity))!important}.hover\\:text-pink-200:hover{--text-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--text-opacity))!important}.hover\\:text-pink-300:hover{--text-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--text-opacity))!important}.hover\\:text-pink-400:hover{--text-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--text-opacity))!important}.hover\\:text-pink-500:hover{--text-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--text-opacity))!important}.hover\\:text-pink-600:hover{--text-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--text-opacity))!important}.hover\\:text-pink-700:hover{--text-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--text-opacity))!important}.hover\\:text-pink-800:hover{--text-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--text-opacity))!important}.hover\\:text-pink-900:hover{--text-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--text-opacity))!important}.focus\\:text-transparent:focus{color:transparent!important}.focus\\:text-current:focus{color:currentColor!important}.focus\\:text-black:focus{--text-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--text-opacity))!important}.focus\\:text-white:focus{--text-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--text-opacity))!important}.focus\\:text-gray-100:focus{--text-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--text-opacity))!important}.focus\\:text-gray-200:focus{--text-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--text-opacity))!important}.focus\\:text-gray-300:focus{--text-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--text-opacity))!important}.focus\\:text-gray-400:focus{--text-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--text-opacity))!important}.focus\\:text-gray-500:focus{--text-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--text-opacity))!important}.focus\\:text-gray-600:focus{--text-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--text-opacity))!important}.focus\\:text-gray-700:focus{--text-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--text-opacity))!important}.focus\\:text-gray-800:focus{--text-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--text-opacity))!important}.focus\\:text-gray-900:focus{--text-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--text-opacity))!important}.focus\\:text-red-100:focus{--text-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--text-opacity))!important}.focus\\:text-red-200:focus{--text-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--text-opacity))!important}.focus\\:text-red-300:focus{--text-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--text-opacity))!important}.focus\\:text-red-400:focus{--text-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--text-opacity))!important}.focus\\:text-red-500:focus{--text-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--text-opacity))!important}.focus\\:text-red-600:focus{--text-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--text-opacity))!important}.focus\\:text-red-700:focus{--text-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--text-opacity))!important}.focus\\:text-red-800:focus{--text-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--text-opacity))!important}.focus\\:text-red-900:focus{--text-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--text-opacity))!important}.focus\\:text-orange-100:focus{--text-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--text-opacity))!important}.focus\\:text-orange-200:focus{--text-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--text-opacity))!important}.focus\\:text-orange-300:focus{--text-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--text-opacity))!important}.focus\\:text-orange-400:focus{--text-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--text-opacity))!important}.focus\\:text-orange-500:focus{--text-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--text-opacity))!important}.focus\\:text-orange-600:focus{--text-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--text-opacity))!important}.focus\\:text-orange-700:focus{--text-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--text-opacity))!important}.focus\\:text-orange-800:focus{--text-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--text-opacity))!important}.focus\\:text-orange-900:focus{--text-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--text-opacity))!important}.focus\\:text-yellow-100:focus{--text-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--text-opacity))!important}.focus\\:text-yellow-200:focus{--text-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--text-opacity))!important}.focus\\:text-yellow-300:focus{--text-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--text-opacity))!important}.focus\\:text-yellow-400:focus{--text-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--text-opacity))!important}.focus\\:text-yellow-500:focus{--text-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--text-opacity))!important}.focus\\:text-yellow-600:focus{--text-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--text-opacity))!important}.focus\\:text-yellow-700:focus{--text-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--text-opacity))!important}.focus\\:text-yellow-800:focus{--text-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--text-opacity))!important}.focus\\:text-yellow-900:focus{--text-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--text-opacity))!important}.focus\\:text-green-100:focus{--text-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--text-opacity))!important}.focus\\:text-green-200:focus{--text-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--text-opacity))!important}.focus\\:text-green-300:focus{--text-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--text-opacity))!important}.focus\\:text-green-400:focus{--text-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--text-opacity))!important}.focus\\:text-green-500:focus{--text-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--text-opacity))!important}.focus\\:text-green-600:focus{--text-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--text-opacity))!important}.focus\\:text-green-700:focus{--text-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--text-opacity))!important}.focus\\:text-green-800:focus{--text-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--text-opacity))!important}.focus\\:text-green-900:focus{--text-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--text-opacity))!important}.focus\\:text-teal-100:focus{--text-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--text-opacity))!important}.focus\\:text-teal-200:focus{--text-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--text-opacity))!important}.focus\\:text-teal-300:focus{--text-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--text-opacity))!important}.focus\\:text-teal-400:focus{--text-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--text-opacity))!important}.focus\\:text-teal-500:focus{--text-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--text-opacity))!important}.focus\\:text-teal-600:focus{--text-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--text-opacity))!important}.focus\\:text-teal-700:focus{--text-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--text-opacity))!important}.focus\\:text-teal-800:focus{--text-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--text-opacity))!important}.focus\\:text-teal-900:focus{--text-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--text-opacity))!important}.focus\\:text-blue-100:focus{--text-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--text-opacity))!important}.focus\\:text-blue-200:focus{--text-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--text-opacity))!important}.focus\\:text-blue-300:focus{--text-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--text-opacity))!important}.focus\\:text-blue-400:focus{--text-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--text-opacity))!important}.focus\\:text-blue-500:focus{--text-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--text-opacity))!important}.focus\\:text-blue-600:focus{--text-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--text-opacity))!important}.focus\\:text-blue-700:focus{--text-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--text-opacity))!important}.focus\\:text-blue-800:focus{--text-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--text-opacity))!important}.focus\\:text-blue-900:focus{--text-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--text-opacity))!important}.focus\\:text-indigo-100:focus{--text-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--text-opacity))!important}.focus\\:text-indigo-200:focus{--text-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--text-opacity))!important}.focus\\:text-indigo-300:focus{--text-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--text-opacity))!important}.focus\\:text-indigo-400:focus{--text-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--text-opacity))!important}.focus\\:text-indigo-500:focus{--text-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--text-opacity))!important}.focus\\:text-indigo-600:focus{--text-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--text-opacity))!important}.focus\\:text-indigo-700:focus{--text-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--text-opacity))!important}.focus\\:text-indigo-800:focus{--text-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--text-opacity))!important}.focus\\:text-indigo-900:focus{--text-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--text-opacity))!important}.focus\\:text-purple-100:focus{--text-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--text-opacity))!important}.focus\\:text-purple-200:focus{--text-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--text-opacity))!important}.focus\\:text-purple-300:focus{--text-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--text-opacity))!important}.focus\\:text-purple-400:focus{--text-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--text-opacity))!important}.focus\\:text-purple-500:focus{--text-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--text-opacity))!important}.focus\\:text-purple-600:focus{--text-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--text-opacity))!important}.focus\\:text-purple-700:focus{--text-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--text-opacity))!important}.focus\\:text-purple-800:focus{--text-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--text-opacity))!important}.focus\\:text-purple-900:focus{--text-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--text-opacity))!important}.focus\\:text-pink-100:focus{--text-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--text-opacity))!important}.focus\\:text-pink-200:focus{--text-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--text-opacity))!important}.focus\\:text-pink-300:focus{--text-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--text-opacity))!important}.focus\\:text-pink-400:focus{--text-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--text-opacity))!important}.focus\\:text-pink-500:focus{--text-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--text-opacity))!important}.focus\\:text-pink-600:focus{--text-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--text-opacity))!important}.focus\\:text-pink-700:focus{--text-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--text-opacity))!important}.focus\\:text-pink-800:focus{--text-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--text-opacity))!important}.focus\\:text-pink-900:focus{--text-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--text-opacity))!important}.text-opacity-0{--text-opacity:0!important}.text-opacity-25{--text-opacity:0.25!important}.text-opacity-50{--text-opacity:0.5!important}.text-opacity-75{--text-opacity:0.75!important}.text-opacity-100{--text-opacity:1!important}.hover\\:text-opacity-0:hover{--text-opacity:0!important}.hover\\:text-opacity-25:hover{--text-opacity:0.25!important}.hover\\:text-opacity-50:hover{--text-opacity:0.5!important}.hover\\:text-opacity-75:hover{--text-opacity:0.75!important}.hover\\:text-opacity-100:hover{--text-opacity:1!important}.focus\\:text-opacity-0:focus{--text-opacity:0!important}.focus\\:text-opacity-25:focus{--text-opacity:0.25!important}.focus\\:text-opacity-50:focus{--text-opacity:0.5!important}.focus\\:text-opacity-75:focus{--text-opacity:0.75!important}.focus\\:text-opacity-100:focus{--text-opacity:1!important}.italic{font-style:italic!important}.not-italic{font-style:normal!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.capitalize{text-transform:capitalize!important}.normal-case{text-transform:none!important}.underline{text-decoration:underline!important}.line-through{text-decoration:line-through!important}.no-underline{text-decoration:none!important}.hover\\:underline:hover{text-decoration:underline!important}.hover\\:line-through:hover{text-decoration:line-through!important}.hover\\:no-underline:hover{text-decoration:none!important}.focus\\:underline:focus{text-decoration:underline!important}.focus\\:line-through:focus{text-decoration:line-through!important}.focus\\:no-underline:focus{text-decoration:none!important}.antialiased{-webkit-font-smoothing:antialiased!important;-moz-osx-font-smoothing:grayscale!important}.subpixel-antialiased{-webkit-font-smoothing:auto!important;-moz-osx-font-smoothing:auto!important}.diagonal-fractions,.lining-nums,.oldstyle-nums,.ordinal,.proportional-nums,.slashed-zero,.stacked-fractions,.tabular-nums{--font-variant-numeric-ordinal:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-slashed-zero:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-figure:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-spacing:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-fraction:var(--tailwind-empty,/*!*/ /*!*/)!important;font-variant-numeric:var(--font-variant-numeric-ordinal) var(--font-variant-numeric-slashed-zero) var(--font-variant-numeric-figure) var(--font-variant-numeric-spacing) var(--font-variant-numeric-fraction)!important}.normal-nums{font-variant-numeric:normal!important}.ordinal{--font-variant-numeric-ordinal:ordinal!important}.slashed-zero{--font-variant-numeric-slashed-zero:slashed-zero!important}.lining-nums{--font-variant-numeric-figure:lining-nums!important}.oldstyle-nums{--font-variant-numeric-figure:oldstyle-nums!important}.proportional-nums{--font-variant-numeric-spacing:proportional-nums!important}.tabular-nums{--font-variant-numeric-spacing:tabular-nums!important}.diagonal-fractions{--font-variant-numeric-fraction:diagonal-fractions!important}.stacked-fractions{--font-variant-numeric-fraction:stacked-fractions!important}.tracking-tighter{letter-spacing:-.05em!important}.tracking-tight{letter-spacing:-.025em!important}.tracking-normal{letter-spacing:0!important}.tracking-wide{letter-spacing:.025em!important}.tracking-wider{letter-spacing:.05em!important}.tracking-widest{letter-spacing:.1em!important}.select-none{-webkit-user-select:none!important;user-select:none!important}.select-text{-webkit-user-select:text!important;user-select:text!important}.select-all{-webkit-user-select:all!important;user-select:all!important}.select-auto{-webkit-user-select:auto!important;user-select:auto!important}.align-baseline{vertical-align:initial!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-top{vertical-align:text-top!important}.align-text-bottom{vertical-align:text-bottom!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.whitespace-normal{white-space:normal!important}.whitespace-no-wrap{white-space:nowrap!important}.whitespace-pre{white-space:pre!important}.whitespace-pre-line{white-space:pre-line!important}.whitespace-pre-wrap{white-space:pre-wrap!important}.break-normal{word-wrap:normal!important;overflow-wrap:normal!important;word-break:normal!important}.break-words{word-wrap:break-word!important;overflow-wrap:break-word!important}.break-all{word-break:break-all!important}.truncate{overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}.w-0{width:0!important}.w-1{width:.25rem!important}.w-2{width:.5rem!important}.w-3{width:.75rem!important}.w-4{width:1rem!important}.w-5{width:1.25rem!important}.w-6{width:1.5rem!important}.w-8{width:2rem!important}.w-10{width:2.5rem!important}.w-12{width:3rem!important}.w-16{width:4rem!important}.w-20{width:5rem!important}.w-24{width:6rem!important}.w-32{width:8rem!important}.w-40{width:10rem!important}.w-48{width:12rem!important}.w-56{width:14rem!important}.w-64{width:16rem!important}.w-auto{width:auto!important}.w-px{width:1px!important}.w-1\\/2{width:50%!important}.w-1\\/3{width:33.333333%!important}.w-2\\/3{width:66.666667%!important}.w-1\\/4{width:25%!important}.w-2\\/4{width:50%!important}.w-3\\/4{width:75%!important}.w-1\\/5{width:20%!important}.w-2\\/5{width:40%!important}.w-3\\/5{width:60%!important}.w-4\\/5{width:80%!important}.w-1\\/6{width:16.666667%!important}.w-2\\/6{width:33.333333%!important}.w-3\\/6{width:50%!important}.w-4\\/6{width:66.666667%!important}.w-5\\/6{width:83.333333%!important}.w-1\\/12{width:8.333333%!important}.w-2\\/12{width:16.666667%!important}.w-3\\/12{width:25%!important}.w-4\\/12{width:33.333333%!important}.w-5\\/12{width:41.666667%!important}.w-6\\/12{width:50%!important}.w-7\\/12{width:58.333333%!important}.w-8\\/12{width:66.666667%!important}.w-9\\/12{width:75%!important}.w-10\\/12{width:83.333333%!important}.w-11\\/12{width:91.666667%!important}.w-screen{width:100vw!important}.z-0{z-index:0!important}.z-10{z-index:10!important}.z-20{z-index:20!important}.z-30{z-index:30!important}.z-40{z-index:40!important}.z-50{z-index:50!important}.z-auto{z-index:auto!important}.gap-0{grid-gap:0!important;gap:0!important}.gap-1{grid-gap:.25rem!important;gap:.25rem!important}.gap-2{grid-gap:.5rem!important;gap:.5rem!important}.gap-3{grid-gap:.75rem!important;gap:.75rem!important}.gap-4{grid-gap:1rem!important;gap:1rem!important}.gap-5{grid-gap:1.25rem!important;gap:1.25rem!important}.gap-6{grid-gap:1.5rem!important;gap:1.5rem!important}.gap-8{grid-gap:2rem!important;gap:2rem!important}.gap-10{grid-gap:2.5rem!important;gap:2.5rem!important}.gap-12{grid-gap:3rem!important;gap:3rem!important}.gap-16{grid-gap:4rem!important;gap:4rem!important}.gap-20{grid-gap:5rem!important;gap:5rem!important}.gap-24{grid-gap:6rem!important;gap:6rem!important}.gap-32{grid-gap:8rem!important;gap:8rem!important}.gap-40{grid-gap:10rem!important;gap:10rem!important}.gap-48{grid-gap:12rem!important;gap:12rem!important}.gap-56{grid-gap:14rem!important;gap:14rem!important}.gap-64{grid-gap:16rem!important;gap:16rem!important}.gap-px{grid-gap:1px!important;gap:1px!important}.col-gap-0{grid-column-gap:0!important;column-gap:0!important}.col-gap-1{grid-column-gap:.25rem!important;column-gap:.25rem!important}.col-gap-2{grid-column-gap:.5rem!important;column-gap:.5rem!important}.col-gap-3{grid-column-gap:.75rem!important;column-gap:.75rem!important}.col-gap-4{grid-column-gap:1rem!important;column-gap:1rem!important}.col-gap-5{grid-column-gap:1.25rem!important;column-gap:1.25rem!important}.col-gap-6{grid-column-gap:1.5rem!important;column-gap:1.5rem!important}.col-gap-8{grid-column-gap:2rem!important;column-gap:2rem!important}.col-gap-10{grid-column-gap:2.5rem!important;column-gap:2.5rem!important}.col-gap-12{grid-column-gap:3rem!important;column-gap:3rem!important}.col-gap-16{grid-column-gap:4rem!important;column-gap:4rem!important}.col-gap-20{grid-column-gap:5rem!important;column-gap:5rem!important}.col-gap-24{grid-column-gap:6rem!important;column-gap:6rem!important}.col-gap-32{grid-column-gap:8rem!important;column-gap:8rem!important}.col-gap-40{grid-column-gap:10rem!important;column-gap:10rem!important}.col-gap-48{grid-column-gap:12rem!important;column-gap:12rem!important}.col-gap-56{grid-column-gap:14rem!important;column-gap:14rem!important}.col-gap-64{grid-column-gap:16rem!important;column-gap:16rem!important}.col-gap-px{grid-column-gap:1px!important;column-gap:1px!important}.gap-x-0{grid-column-gap:0!important;column-gap:0!important}.gap-x-1{grid-column-gap:.25rem!important;column-gap:.25rem!important}.gap-x-2{grid-column-gap:.5rem!important;column-gap:.5rem!important}.gap-x-3{grid-column-gap:.75rem!important;column-gap:.75rem!important}.gap-x-4{grid-column-gap:1rem!important;column-gap:1rem!important}.gap-x-5{grid-column-gap:1.25rem!important;column-gap:1.25rem!important}.gap-x-6{grid-column-gap:1.5rem!important;column-gap:1.5rem!important}.gap-x-8{grid-column-gap:2rem!important;column-gap:2rem!important}.gap-x-10{grid-column-gap:2.5rem!important;column-gap:2.5rem!important}.gap-x-12{grid-column-gap:3rem!important;column-gap:3rem!important}.gap-x-16{grid-column-gap:4rem!important;column-gap:4rem!important}.gap-x-20{grid-column-gap:5rem!important;column-gap:5rem!important}.gap-x-24{grid-column-gap:6rem!important;column-gap:6rem!important}.gap-x-32{grid-column-gap:8rem!important;column-gap:8rem!important}.gap-x-40{grid-column-gap:10rem!important;column-gap:10rem!important}.gap-x-48{grid-column-gap:12rem!important;column-gap:12rem!important}.gap-x-56{grid-column-gap:14rem!important;column-gap:14rem!important}.gap-x-64{grid-column-gap:16rem!important;column-gap:16rem!important}.gap-x-px{grid-column-gap:1px!important;column-gap:1px!important}.row-gap-0{grid-row-gap:0!important;row-gap:0!important}.row-gap-1{grid-row-gap:.25rem!important;row-gap:.25rem!important}.row-gap-2{grid-row-gap:.5rem!important;row-gap:.5rem!important}.row-gap-3{grid-row-gap:.75rem!important;row-gap:.75rem!important}.row-gap-4{grid-row-gap:1rem!important;row-gap:1rem!important}.row-gap-5{grid-row-gap:1.25rem!important;row-gap:1.25rem!important}.row-gap-6{grid-row-gap:1.5rem!important;row-gap:1.5rem!important}.row-gap-8{grid-row-gap:2rem!important;row-gap:2rem!important}.row-gap-10{grid-row-gap:2.5rem!important;row-gap:2.5rem!important}.row-gap-12{grid-row-gap:3rem!important;row-gap:3rem!important}.row-gap-16{grid-row-gap:4rem!important;row-gap:4rem!important}.row-gap-20{grid-row-gap:5rem!important;row-gap:5rem!important}.row-gap-24{grid-row-gap:6rem!important;row-gap:6rem!important}.row-gap-32{grid-row-gap:8rem!important;row-gap:8rem!important}.row-gap-40{grid-row-gap:10rem!important;row-gap:10rem!important}.row-gap-48{grid-row-gap:12rem!important;row-gap:12rem!important}.row-gap-56{grid-row-gap:14rem!important;row-gap:14rem!important}.row-gap-64{grid-row-gap:16rem!important;row-gap:16rem!important}.row-gap-px{grid-row-gap:1px!important;row-gap:1px!important}.gap-y-0{grid-row-gap:0!important;row-gap:0!important}.gap-y-1{grid-row-gap:.25rem!important;row-gap:.25rem!important}.gap-y-2{grid-row-gap:.5rem!important;row-gap:.5rem!important}.gap-y-3{grid-row-gap:.75rem!important;row-gap:.75rem!important}.gap-y-4{grid-row-gap:1rem!important;row-gap:1rem!important}.gap-y-5{grid-row-gap:1.25rem!important;row-gap:1.25rem!important}.gap-y-6{grid-row-gap:1.5rem!important;row-gap:1.5rem!important}.gap-y-8{grid-row-gap:2rem!important;row-gap:2rem!important}.gap-y-10{grid-row-gap:2.5rem!important;row-gap:2.5rem!important}.gap-y-12{grid-row-gap:3rem!important;row-gap:3rem!important}.gap-y-16{grid-row-gap:4rem!important;row-gap:4rem!important}.gap-y-20{grid-row-gap:5rem!important;row-gap:5rem!important}.gap-y-24{grid-row-gap:6rem!important;row-gap:6rem!important}.gap-y-32{grid-row-gap:8rem!important;row-gap:8rem!important}.gap-y-40{grid-row-gap:10rem!important;row-gap:10rem!important}.gap-y-48{grid-row-gap:12rem!important;row-gap:12rem!important}.gap-y-56{grid-row-gap:14rem!important;row-gap:14rem!important}.gap-y-64{grid-row-gap:16rem!important;row-gap:16rem!important}.gap-y-px{grid-row-gap:1px!important;row-gap:1px!important}.grid-flow-row{grid-auto-flow:row!important}.grid-flow-col{grid-auto-flow:column!important}.grid-flow-row-dense{grid-auto-flow:row dense!important}.grid-flow-col-dense{grid-auto-flow:column dense!important}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))!important}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))!important}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))!important}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))!important}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))!important}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))!important}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))!important}.grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))!important}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))!important}.grid-cols-none{grid-template-columns:none!important}.auto-cols-auto{grid-auto-columns:auto!important}.auto-cols-min{grid-auto-columns:-webkit-min-content!important;grid-auto-columns:min-content!important}.auto-cols-max{grid-auto-columns:-webkit-max-content!important;grid-auto-columns:max-content!important}.auto-cols-fr{grid-auto-columns:minmax(0,1fr)!important}.col-auto{grid-column:auto!important}.col-span-1{grid-column:span 1/span 1!important}.col-span-2{grid-column:span 2/span 2!important}.col-span-3{grid-column:span 3/span 3!important}.col-span-4{grid-column:span 4/span 4!important}.col-span-5{grid-column:span 5/span 5!important}.col-span-6{grid-column:span 6/span 6!important}.col-span-7{grid-column:span 7/span 7!important}.col-span-8{grid-column:span 8/span 8!important}.col-span-9{grid-column:span 9/span 9!important}.col-span-10{grid-column:span 10/span 10!important}.col-span-11{grid-column:span 11/span 11!important}.col-span-12{grid-column:span 12/span 12!important}.col-span-full{grid-column:1/-1!important}.col-start-1{grid-column-start:1!important}.col-start-2{grid-column-start:2!important}.col-start-3{grid-column-start:3!important}.col-start-4{grid-column-start:4!important}.col-start-5{grid-column-start:5!important}.col-start-6{grid-column-start:6!important}.col-start-7{grid-column-start:7!important}.col-start-8{grid-column-start:8!important}.col-start-9{grid-column-start:9!important}.col-start-10{grid-column-start:10!important}.col-start-11{grid-column-start:11!important}.col-start-12{grid-column-start:12!important}.col-start-13{grid-column-start:13!important}.col-start-auto{grid-column-start:auto!important}.col-end-1{grid-column-end:1!important}.col-end-2{grid-column-end:2!important}.col-end-3{grid-column-end:3!important}.col-end-4{grid-column-end:4!important}.col-end-5{grid-column-end:5!important}.col-end-6{grid-column-end:6!important}.col-end-7{grid-column-end:7!important}.col-end-8{grid-column-end:8!important}.col-end-9{grid-column-end:9!important}.col-end-10{grid-column-end:10!important}.col-end-11{grid-column-end:11!important}.col-end-12{grid-column-end:12!important}.col-end-13{grid-column-end:13!important}.col-end-auto{grid-column-end:auto!important}.grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))!important}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))!important}.grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))!important}.grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))!important}.grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))!important}.grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))!important}.grid-rows-none{grid-template-rows:none!important}.auto-rows-auto{grid-auto-rows:auto!important}.auto-rows-min{grid-auto-rows:-webkit-min-content!important;grid-auto-rows:min-content!important}.auto-rows-max{grid-auto-rows:-webkit-max-content!important;grid-auto-rows:max-content!important}.auto-rows-fr{grid-auto-rows:minmax(0,1fr)!important}.row-auto{grid-row:auto!important}.row-span-1{grid-row:span 1/span 1!important}.row-span-2{grid-row:span 2/span 2!important}.row-span-3{grid-row:span 3/span 3!important}.row-span-4{grid-row:span 4/span 4!important}.row-span-5{grid-row:span 5/span 5!important}.row-span-6{grid-row:span 6/span 6!important}.row-span-full{grid-row:1/-1!important}.row-start-1{grid-row-start:1!important}.row-start-2{grid-row-start:2!important}.row-start-3{grid-row-start:3!important}.row-start-4{grid-row-start:4!important}.row-start-5{grid-row-start:5!important}.row-start-6{grid-row-start:6!important}.row-start-7{grid-row-start:7!important}.row-start-auto{grid-row-start:auto!important}.row-end-1{grid-row-end:1!important}.row-end-2{grid-row-end:2!important}.row-end-3{grid-row-end:3!important}.row-end-4{grid-row-end:4!important}.row-end-5{grid-row-end:5!important}.row-end-6{grid-row-end:6!important}.row-end-7{grid-row-end:7!important}.row-end-auto{grid-row-end:auto!important}.transform{--transform-translate-x:0!important;--transform-translate-y:0!important;--transform-rotate:0!important;--transform-skew-x:0!important;--transform-skew-y:0!important;--transform-scale-x:1!important;--transform-scale-y:1!important;transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))!important}.transform-none{transform:none!important}.origin-center{transform-origin:center!important}.origin-top{transform-origin:top!important}.origin-top-right{transform-origin:top right!important}.origin-right{transform-origin:right!important}.origin-bottom-right{transform-origin:bottom right!important}.origin-bottom{transform-origin:bottom!important}.origin-bottom-left{transform-origin:bottom left!important}.origin-left{transform-origin:left!important}.origin-top-left{transform-origin:top left!important}.scale-0{--transform-scale-x:0!important;--transform-scale-y:0!important}.scale-50{--transform-scale-x:.5!important;--transform-scale-y:.5!important}.scale-75{--transform-scale-x:.75!important;--transform-scale-y:.75!important}.scale-90{--transform-scale-x:.9!important;--transform-scale-y:.9!important}.scale-95{--transform-scale-x:.95!important;--transform-scale-y:.95!important}.scale-100{--transform-scale-x:1!important;--transform-scale-y:1!important}.scale-105{--transform-scale-x:1.05!important;--transform-scale-y:1.05!important}.scale-110{--transform-scale-x:1.1!important;--transform-scale-y:1.1!important}.scale-125{--transform-scale-x:1.25!important;--transform-scale-y:1.25!important}.scale-150{--transform-scale-x:1.5!important;--transform-scale-y:1.5!important}.scale-x-0{--transform-scale-x:0!important}.scale-x-50{--transform-scale-x:.5!important}.scale-x-75{--transform-scale-x:.75!important}.scale-x-90{--transform-scale-x:.9!important}.scale-x-95{--transform-scale-x:.95!important}.scale-x-100{--transform-scale-x:1!important}.scale-x-105{--transform-scale-x:1.05!important}.scale-x-110{--transform-scale-x:1.1!important}.scale-x-125{--transform-scale-x:1.25!important}.scale-x-150{--transform-scale-x:1.5!important}.scale-y-0{--transform-scale-y:0!important}.scale-y-50{--transform-scale-y:.5!important}.scale-y-75{--transform-scale-y:.75!important}.scale-y-90{--transform-scale-y:.9!important}.scale-y-95{--transform-scale-y:.95!important}.scale-y-100{--transform-scale-y:1!important}.scale-y-105{--transform-scale-y:1.05!important}.scale-y-110{--transform-scale-y:1.1!important}.scale-y-125{--transform-scale-y:1.25!important}.scale-y-150{--transform-scale-y:1.5!important}.hover\\:scale-0:hover{--transform-scale-x:0!important;--transform-scale-y:0!important}.hover\\:scale-50:hover{--transform-scale-x:.5!important;--transform-scale-y:.5!important}.hover\\:scale-75:hover{--transform-scale-x:.75!important;--transform-scale-y:.75!important}.hover\\:scale-90:hover{--transform-scale-x:.9!important;--transform-scale-y:.9!important}.hover\\:scale-95:hover{--transform-scale-x:.95!important;--transform-scale-y:.95!important}.hover\\:scale-100:hover{--transform-scale-x:1!important;--transform-scale-y:1!important}.hover\\:scale-105:hover{--transform-scale-x:1.05!important;--transform-scale-y:1.05!important}.hover\\:scale-110:hover{--transform-scale-x:1.1!important;--transform-scale-y:1.1!important}.hover\\:scale-125:hover{--transform-scale-x:1.25!important;--transform-scale-y:1.25!important}.hover\\:scale-150:hover{--transform-scale-x:1.5!important;--transform-scale-y:1.5!important}.hover\\:scale-x-0:hover{--transform-scale-x:0!important}.hover\\:scale-x-50:hover{--transform-scale-x:.5!important}.hover\\:scale-x-75:hover{--transform-scale-x:.75!important}.hover\\:scale-x-90:hover{--transform-scale-x:.9!important}.hover\\:scale-x-95:hover{--transform-scale-x:.95!important}.hover\\:scale-x-100:hover{--transform-scale-x:1!important}.hover\\:scale-x-105:hover{--transform-scale-x:1.05!important}.hover\\:scale-x-110:hover{--transform-scale-x:1.1!important}.hover\\:scale-x-125:hover{--transform-scale-x:1.25!important}.hover\\:scale-x-150:hover{--transform-scale-x:1.5!important}.hover\\:scale-y-0:hover{--transform-scale-y:0!important}.hover\\:scale-y-50:hover{--transform-scale-y:.5!important}.hover\\:scale-y-75:hover{--transform-scale-y:.75!important}.hover\\:scale-y-90:hover{--transform-scale-y:.9!important}.hover\\:scale-y-95:hover{--transform-scale-y:.95!important}.hover\\:scale-y-100:hover{--transform-scale-y:1!important}.hover\\:scale-y-105:hover{--transform-scale-y:1.05!important}.hover\\:scale-y-110:hover{--transform-scale-y:1.1!important}.hover\\:scale-y-125:hover{--transform-scale-y:1.25!important}.hover\\:scale-y-150:hover{--transform-scale-y:1.5!important}.focus\\:scale-0:focus{--transform-scale-x:0!important;--transform-scale-y:0!important}.focus\\:scale-50:focus{--transform-scale-x:.5!important;--transform-scale-y:.5!important}.focus\\:scale-75:focus{--transform-scale-x:.75!important;--transform-scale-y:.75!important}.focus\\:scale-90:focus{--transform-scale-x:.9!important;--transform-scale-y:.9!important}.focus\\:scale-95:focus{--transform-scale-x:.95!important;--transform-scale-y:.95!important}.focus\\:scale-100:focus{--transform-scale-x:1!important;--transform-scale-y:1!important}.focus\\:scale-105:focus{--transform-scale-x:1.05!important;--transform-scale-y:1.05!important}.focus\\:scale-110:focus{--transform-scale-x:1.1!important;--transform-scale-y:1.1!important}.focus\\:scale-125:focus{--transform-scale-x:1.25!important;--transform-scale-y:1.25!important}.focus\\:scale-150:focus{--transform-scale-x:1.5!important;--transform-scale-y:1.5!important}.focus\\:scale-x-0:focus{--transform-scale-x:0!important}.focus\\:scale-x-50:focus{--transform-scale-x:.5!important}.focus\\:scale-x-75:focus{--transform-scale-x:.75!important}.focus\\:scale-x-90:focus{--transform-scale-x:.9!important}.focus\\:scale-x-95:focus{--transform-scale-x:.95!important}.focus\\:scale-x-100:focus{--transform-scale-x:1!important}.focus\\:scale-x-105:focus{--transform-scale-x:1.05!important}.focus\\:scale-x-110:focus{--transform-scale-x:1.1!important}.focus\\:scale-x-125:focus{--transform-scale-x:1.25!important}.focus\\:scale-x-150:focus{--transform-scale-x:1.5!important}.focus\\:scale-y-0:focus{--transform-scale-y:0!important}.focus\\:scale-y-50:focus{--transform-scale-y:.5!important}.focus\\:scale-y-75:focus{--transform-scale-y:.75!important}.focus\\:scale-y-90:focus{--transform-scale-y:.9!important}.focus\\:scale-y-95:focus{--transform-scale-y:.95!important}.focus\\:scale-y-100:focus{--transform-scale-y:1!important}.focus\\:scale-y-105:focus{--transform-scale-y:1.05!important}.focus\\:scale-y-110:focus{--transform-scale-y:1.1!important}.focus\\:scale-y-125:focus{--transform-scale-y:1.25!important}.focus\\:scale-y-150:focus{--transform-scale-y:1.5!important}.rotate-0{--transform-rotate:0!important}.rotate-1{--transform-rotate:1deg!important}.rotate-2{--transform-rotate:2deg!important}.rotate-3{--transform-rotate:3deg!important}.rotate-6{--transform-rotate:6deg!important}.rotate-12{--transform-rotate:12deg!important}.rotate-45{--transform-rotate:45deg!important}.rotate-90{--transform-rotate:90deg!important}.rotate-180{--transform-rotate:180deg!important}.-rotate-180{--transform-rotate:-180deg!important}.-rotate-90{--transform-rotate:-90deg!important}.-rotate-45{--transform-rotate:-45deg!important}.-rotate-12{--transform-rotate:-12deg!important}.-rotate-6{--transform-rotate:-6deg!important}.-rotate-3{--transform-rotate:-3deg!important}.-rotate-2{--transform-rotate:-2deg!important}.-rotate-1{--transform-rotate:-1deg!important}.hover\\:rotate-0:hover{--transform-rotate:0!important}.hover\\:rotate-1:hover{--transform-rotate:1deg!important}.hover\\:rotate-2:hover{--transform-rotate:2deg!important}.hover\\:rotate-3:hover{--transform-rotate:3deg!important}.hover\\:rotate-6:hover{--transform-rotate:6deg!important}.hover\\:rotate-12:hover{--transform-rotate:12deg!important}.hover\\:rotate-45:hover{--transform-rotate:45deg!important}.hover\\:rotate-90:hover{--transform-rotate:90deg!important}.hover\\:rotate-180:hover{--transform-rotate:180deg!important}.hover\\:-rotate-180:hover{--transform-rotate:-180deg!important}.hover\\:-rotate-90:hover{--transform-rotate:-90deg!important}.hover\\:-rotate-45:hover{--transform-rotate:-45deg!important}.hover\\:-rotate-12:hover{--transform-rotate:-12deg!important}.hover\\:-rotate-6:hover{--transform-rotate:-6deg!important}.hover\\:-rotate-3:hover{--transform-rotate:-3deg!important}.hover\\:-rotate-2:hover{--transform-rotate:-2deg!important}.hover\\:-rotate-1:hover{--transform-rotate:-1deg!important}.focus\\:rotate-0:focus{--transform-rotate:0!important}.focus\\:rotate-1:focus{--transform-rotate:1deg!important}.focus\\:rotate-2:focus{--transform-rotate:2deg!important}.focus\\:rotate-3:focus{--transform-rotate:3deg!important}.focus\\:rotate-6:focus{--transform-rotate:6deg!important}.focus\\:rotate-12:focus{--transform-rotate:12deg!important}.focus\\:rotate-45:focus{--transform-rotate:45deg!important}.focus\\:rotate-90:focus{--transform-rotate:90deg!important}.focus\\:rotate-180:focus{--transform-rotate:180deg!important}.focus\\:-rotate-180:focus{--transform-rotate:-180deg!important}.focus\\:-rotate-90:focus{--transform-rotate:-90deg!important}.focus\\:-rotate-45:focus{--transform-rotate:-45deg!important}.focus\\:-rotate-12:focus{--transform-rotate:-12deg!important}.focus\\:-rotate-6:focus{--transform-rotate:-6deg!important}.focus\\:-rotate-3:focus{--transform-rotate:-3deg!important}.focus\\:-rotate-2:focus{--transform-rotate:-2deg!important}.focus\\:-rotate-1:focus{--transform-rotate:-1deg!important}.translate-x-0{--transform-translate-x:0!important}.translate-x-1{--transform-translate-x:0.25rem!important}.translate-x-2{--transform-translate-x:0.5rem!important}.translate-x-3{--transform-translate-x:0.75rem!important}.translate-x-4{--transform-translate-x:1rem!important}.translate-x-5{--transform-translate-x:1.25rem!important}.translate-x-6{--transform-translate-x:1.5rem!important}.translate-x-8{--transform-translate-x:2rem!important}.translate-x-10{--transform-translate-x:2.5rem!important}.translate-x-12{--transform-translate-x:3rem!important}.translate-x-16{--transform-translate-x:4rem!important}.translate-x-20{--transform-translate-x:5rem!important}.translate-x-24{--transform-translate-x:6rem!important}.translate-x-32{--transform-translate-x:8rem!important}.translate-x-40{--transform-translate-x:10rem!important}.translate-x-48{--transform-translate-x:12rem!important}.translate-x-56{--transform-translate-x:14rem!important}.translate-x-64{--transform-translate-x:16rem!important}.translate-x-px{--transform-translate-x:1px!important}.-translate-x-1{--transform-translate-x:-0.25rem!important}.-translate-x-2{--transform-translate-x:-0.5rem!important}.-translate-x-3{--transform-translate-x:-0.75rem!important}.-translate-x-4{--transform-translate-x:-1rem!important}.-translate-x-5{--transform-translate-x:-1.25rem!important}.-translate-x-6{--transform-translate-x:-1.5rem!important}.-translate-x-8{--transform-translate-x:-2rem!important}.-translate-x-10{--transform-translate-x:-2.5rem!important}.-translate-x-12{--transform-translate-x:-3rem!important}.-translate-x-16{--transform-translate-x:-4rem!important}.-translate-x-20{--transform-translate-x:-5rem!important}.-translate-x-24{--transform-translate-x:-6rem!important}.-translate-x-32{--transform-translate-x:-8rem!important}.-translate-x-40{--transform-translate-x:-10rem!important}.-translate-x-48{--transform-translate-x:-12rem!important}.-translate-x-56{--transform-translate-x:-14rem!important}.-translate-x-64{--transform-translate-x:-16rem!important}.-translate-x-px{--transform-translate-x:-1px!important}.-translate-x-full{--transform-translate-x:-100%!important}.-translate-x-1\\/2{--transform-translate-x:-50%!important}.translate-x-1\\/2{--transform-translate-x:50%!important}.translate-x-full{--transform-translate-x:100%!important}.translate-y-0{--transform-translate-y:0!important}.translate-y-1{--transform-translate-y:0.25rem!important}.translate-y-2{--transform-translate-y:0.5rem!important}.translate-y-3{--transform-translate-y:0.75rem!important}.translate-y-4{--transform-translate-y:1rem!important}.translate-y-5{--transform-translate-y:1.25rem!important}.translate-y-6{--transform-translate-y:1.5rem!important}.translate-y-8{--transform-translate-y:2rem!important}.translate-y-10{--transform-translate-y:2.5rem!important}.translate-y-12{--transform-translate-y:3rem!important}.translate-y-16{--transform-translate-y:4rem!important}.translate-y-20{--transform-translate-y:5rem!important}.translate-y-24{--transform-translate-y:6rem!important}.translate-y-32{--transform-translate-y:8rem!important}.translate-y-40{--transform-translate-y:10rem!important}.translate-y-48{--transform-translate-y:12rem!important}.translate-y-56{--transform-translate-y:14rem!important}.translate-y-64{--transform-translate-y:16rem!important}.translate-y-px{--transform-translate-y:1px!important}.-translate-y-1{--transform-translate-y:-0.25rem!important}.-translate-y-2{--transform-translate-y:-0.5rem!important}.-translate-y-3{--transform-translate-y:-0.75rem!important}.-translate-y-4{--transform-translate-y:-1rem!important}.-translate-y-5{--transform-translate-y:-1.25rem!important}.-translate-y-6{--transform-translate-y:-1.5rem!important}.-translate-y-8{--transform-translate-y:-2rem!important}.-translate-y-10{--transform-translate-y:-2.5rem!important}.-translate-y-12{--transform-translate-y:-3rem!important}.-translate-y-16{--transform-translate-y:-4rem!important}.-translate-y-20{--transform-translate-y:-5rem!important}.-translate-y-24{--transform-translate-y:-6rem!important}.-translate-y-32{--transform-translate-y:-8rem!important}.-translate-y-40{--transform-translate-y:-10rem!important}.-translate-y-48{--transform-translate-y:-12rem!important}.-translate-y-56{--transform-translate-y:-14rem!important}.-translate-y-64{--transform-translate-y:-16rem!important}.-translate-y-px{--transform-translate-y:-1px!important}.-translate-y-full{--transform-translate-y:-100%!important}.-translate-y-1\\/2{--transform-translate-y:-50%!important}.translate-y-1\\/2{--transform-translate-y:50%!important}.translate-y-full{--transform-translate-y:100%!important}.hover\\:translate-x-0:hover{--transform-translate-x:0!important}.hover\\:translate-x-1:hover{--transform-translate-x:0.25rem!important}.hover\\:translate-x-2:hover{--transform-translate-x:0.5rem!important}.hover\\:translate-x-3:hover{--transform-translate-x:0.75rem!important}.hover\\:translate-x-4:hover{--transform-translate-x:1rem!important}.hover\\:translate-x-5:hover{--transform-translate-x:1.25rem!important}.hover\\:translate-x-6:hover{--transform-translate-x:1.5rem!important}.hover\\:translate-x-8:hover{--transform-translate-x:2rem!important}.hover\\:translate-x-10:hover{--transform-translate-x:2.5rem!important}.hover\\:translate-x-12:hover{--transform-translate-x:3rem!important}.hover\\:translate-x-16:hover{--transform-translate-x:4rem!important}.hover\\:translate-x-20:hover{--transform-translate-x:5rem!important}.hover\\:translate-x-24:hover{--transform-translate-x:6rem!important}.hover\\:translate-x-32:hover{--transform-translate-x:8rem!important}.hover\\:translate-x-40:hover{--transform-translate-x:10rem!important}.hover\\:translate-x-48:hover{--transform-translate-x:12rem!important}.hover\\:translate-x-56:hover{--transform-translate-x:14rem!important}.hover\\:translate-x-64:hover{--transform-translate-x:16rem!important}.hover\\:translate-x-px:hover{--transform-translate-x:1px!important}.hover\\:-translate-x-1:hover{--transform-translate-x:-0.25rem!important}.hover\\:-translate-x-2:hover{--transform-translate-x:-0.5rem!important}.hover\\:-translate-x-3:hover{--transform-translate-x:-0.75rem!important}.hover\\:-translate-x-4:hover{--transform-translate-x:-1rem!important}.hover\\:-translate-x-5:hover{--transform-translate-x:-1.25rem!important}.hover\\:-translate-x-6:hover{--transform-translate-x:-1.5rem!important}.hover\\:-translate-x-8:hover{--transform-translate-x:-2rem!important}.hover\\:-translate-x-10:hover{--transform-translate-x:-2.5rem!important}.hover\\:-translate-x-12:hover{--transform-translate-x:-3rem!important}.hover\\:-translate-x-16:hover{--transform-translate-x:-4rem!important}.hover\\:-translate-x-20:hover{--transform-translate-x:-5rem!important}.hover\\:-translate-x-24:hover{--transform-translate-x:-6rem!important}.hover\\:-translate-x-32:hover{--transform-translate-x:-8rem!important}.hover\\:-translate-x-40:hover{--transform-translate-x:-10rem!important}.hover\\:-translate-x-48:hover{--transform-translate-x:-12rem!important}.hover\\:-translate-x-56:hover{--transform-translate-x:-14rem!important}.hover\\:-translate-x-64:hover{--transform-translate-x:-16rem!important}.hover\\:-translate-x-px:hover{--transform-translate-x:-1px!important}.hover\\:-translate-x-full:hover{--transform-translate-x:-100%!important}.hover\\:-translate-x-1\\/2:hover{--transform-translate-x:-50%!important}.hover\\:translate-x-1\\/2:hover{--transform-translate-x:50%!important}.hover\\:translate-x-full:hover{--transform-translate-x:100%!important}.hover\\:translate-y-0:hover{--transform-translate-y:0!important}.hover\\:translate-y-1:hover{--transform-translate-y:0.25rem!important}.hover\\:translate-y-2:hover{--transform-translate-y:0.5rem!important}.hover\\:translate-y-3:hover{--transform-translate-y:0.75rem!important}.hover\\:translate-y-4:hover{--transform-translate-y:1rem!important}.hover\\:translate-y-5:hover{--transform-translate-y:1.25rem!important}.hover\\:translate-y-6:hover{--transform-translate-y:1.5rem!important}.hover\\:translate-y-8:hover{--transform-translate-y:2rem!important}.hover\\:translate-y-10:hover{--transform-translate-y:2.5rem!important}.hover\\:translate-y-12:hover{--transform-translate-y:3rem!important}.hover\\:translate-y-16:hover{--transform-translate-y:4rem!important}.hover\\:translate-y-20:hover{--transform-translate-y:5rem!important}.hover\\:translate-y-24:hover{--transform-translate-y:6rem!important}.hover\\:translate-y-32:hover{--transform-translate-y:8rem!important}.hover\\:translate-y-40:hover{--transform-translate-y:10rem!important}.hover\\:translate-y-48:hover{--transform-translate-y:12rem!important}.hover\\:translate-y-56:hover{--transform-translate-y:14rem!important}.hover\\:translate-y-64:hover{--transform-translate-y:16rem!important}.hover\\:translate-y-px:hover{--transform-translate-y:1px!important}.hover\\:-translate-y-1:hover{--transform-translate-y:-0.25rem!important}.hover\\:-translate-y-2:hover{--transform-translate-y:-0.5rem!important}.hover\\:-translate-y-3:hover{--transform-translate-y:-0.75rem!important}.hover\\:-translate-y-4:hover{--transform-translate-y:-1rem!important}.hover\\:-translate-y-5:hover{--transform-translate-y:-1.25rem!important}.hover\\:-translate-y-6:hover{--transform-translate-y:-1.5rem!important}.hover\\:-translate-y-8:hover{--transform-translate-y:-2rem!important}.hover\\:-translate-y-10:hover{--transform-translate-y:-2.5rem!important}.hover\\:-translate-y-12:hover{--transform-translate-y:-3rem!important}.hover\\:-translate-y-16:hover{--transform-translate-y:-4rem!important}.hover\\:-translate-y-20:hover{--transform-translate-y:-5rem!important}.hover\\:-translate-y-24:hover{--transform-translate-y:-6rem!important}.hover\\:-translate-y-32:hover{--transform-translate-y:-8rem!important}.hover\\:-translate-y-40:hover{--transform-translate-y:-10rem!important}.hover\\:-translate-y-48:hover{--transform-translate-y:-12rem!important}.hover\\:-translate-y-56:hover{--transform-translate-y:-14rem!important}.hover\\:-translate-y-64:hover{--transform-translate-y:-16rem!important}.hover\\:-translate-y-px:hover{--transform-translate-y:-1px!important}.hover\\:-translate-y-full:hover{--transform-translate-y:-100%!important}.hover\\:-translate-y-1\\/2:hover{--transform-translate-y:-50%!important}.hover\\:translate-y-1\\/2:hover{--transform-translate-y:50%!important}.hover\\:translate-y-full:hover{--transform-translate-y:100%!important}.focus\\:translate-x-0:focus{--transform-translate-x:0!important}.focus\\:translate-x-1:focus{--transform-translate-x:0.25rem!important}.focus\\:translate-x-2:focus{--transform-translate-x:0.5rem!important}.focus\\:translate-x-3:focus{--transform-translate-x:0.75rem!important}.focus\\:translate-x-4:focus{--transform-translate-x:1rem!important}.focus\\:translate-x-5:focus{--transform-translate-x:1.25rem!important}.focus\\:translate-x-6:focus{--transform-translate-x:1.5rem!important}.focus\\:translate-x-8:focus{--transform-translate-x:2rem!important}.focus\\:translate-x-10:focus{--transform-translate-x:2.5rem!important}.focus\\:translate-x-12:focus{--transform-translate-x:3rem!important}.focus\\:translate-x-16:focus{--transform-translate-x:4rem!important}.focus\\:translate-x-20:focus{--transform-translate-x:5rem!important}.focus\\:translate-x-24:focus{--transform-translate-x:6rem!important}.focus\\:translate-x-32:focus{--transform-translate-x:8rem!important}.focus\\:translate-x-40:focus{--transform-translate-x:10rem!important}.focus\\:translate-x-48:focus{--transform-translate-x:12rem!important}.focus\\:translate-x-56:focus{--transform-translate-x:14rem!important}.focus\\:translate-x-64:focus{--transform-translate-x:16rem!important}.focus\\:translate-x-px:focus{--transform-translate-x:1px!important}.focus\\:-translate-x-1:focus{--transform-translate-x:-0.25rem!important}.focus\\:-translate-x-2:focus{--transform-translate-x:-0.5rem!important}.focus\\:-translate-x-3:focus{--transform-translate-x:-0.75rem!important}.focus\\:-translate-x-4:focus{--transform-translate-x:-1rem!important}.focus\\:-translate-x-5:focus{--transform-translate-x:-1.25rem!important}.focus\\:-translate-x-6:focus{--transform-translate-x:-1.5rem!important}.focus\\:-translate-x-8:focus{--transform-translate-x:-2rem!important}.focus\\:-translate-x-10:focus{--transform-translate-x:-2.5rem!important}.focus\\:-translate-x-12:focus{--transform-translate-x:-3rem!important}.focus\\:-translate-x-16:focus{--transform-translate-x:-4rem!important}.focus\\:-translate-x-20:focus{--transform-translate-x:-5rem!important}.focus\\:-translate-x-24:focus{--transform-translate-x:-6rem!important}.focus\\:-translate-x-32:focus{--transform-translate-x:-8rem!important}.focus\\:-translate-x-40:focus{--transform-translate-x:-10rem!important}.focus\\:-translate-x-48:focus{--transform-translate-x:-12rem!important}.focus\\:-translate-x-56:focus{--transform-translate-x:-14rem!important}.focus\\:-translate-x-64:focus{--transform-translate-x:-16rem!important}.focus\\:-translate-x-px:focus{--transform-translate-x:-1px!important}.focus\\:-translate-x-full:focus{--transform-translate-x:-100%!important}.focus\\:-translate-x-1\\/2:focus{--transform-translate-x:-50%!important}.focus\\:translate-x-1\\/2:focus{--transform-translate-x:50%!important}.focus\\:translate-x-full:focus{--transform-translate-x:100%!important}.focus\\:translate-y-0:focus{--transform-translate-y:0!important}.focus\\:translate-y-1:focus{--transform-translate-y:0.25rem!important}.focus\\:translate-y-2:focus{--transform-translate-y:0.5rem!important}.focus\\:translate-y-3:focus{--transform-translate-y:0.75rem!important}.focus\\:translate-y-4:focus{--transform-translate-y:1rem!important}.focus\\:translate-y-5:focus{--transform-translate-y:1.25rem!important}.focus\\:translate-y-6:focus{--transform-translate-y:1.5rem!important}.focus\\:translate-y-8:focus{--transform-translate-y:2rem!important}.focus\\:translate-y-10:focus{--transform-translate-y:2.5rem!important}.focus\\:translate-y-12:focus{--transform-translate-y:3rem!important}.focus\\:translate-y-16:focus{--transform-translate-y:4rem!important}.focus\\:translate-y-20:focus{--transform-translate-y:5rem!important}.focus\\:translate-y-24:focus{--transform-translate-y:6rem!important}.focus\\:translate-y-32:focus{--transform-translate-y:8rem!important}.focus\\:translate-y-40:focus{--transform-translate-y:10rem!important}.focus\\:translate-y-48:focus{--transform-translate-y:12rem!important}.focus\\:translate-y-56:focus{--transform-translate-y:14rem!important}.focus\\:translate-y-64:focus{--transform-translate-y:16rem!important}.focus\\:translate-y-px:focus{--transform-translate-y:1px!important}.focus\\:-translate-y-1:focus{--transform-translate-y:-0.25rem!important}.focus\\:-translate-y-2:focus{--transform-translate-y:-0.5rem!important}.focus\\:-translate-y-3:focus{--transform-translate-y:-0.75rem!important}.focus\\:-translate-y-4:focus{--transform-translate-y:-1rem!important}.focus\\:-translate-y-5:focus{--transform-translate-y:-1.25rem!important}.focus\\:-translate-y-6:focus{--transform-translate-y:-1.5rem!important}.focus\\:-translate-y-8:focus{--transform-translate-y:-2rem!important}.focus\\:-translate-y-10:focus{--transform-translate-y:-2.5rem!important}.focus\\:-translate-y-12:focus{--transform-translate-y:-3rem!important}.focus\\:-translate-y-16:focus{--transform-translate-y:-4rem!important}.focus\\:-translate-y-20:focus{--transform-translate-y:-5rem!important}.focus\\:-translate-y-24:focus{--transform-translate-y:-6rem!important}.focus\\:-translate-y-32:focus{--transform-translate-y:-8rem!important}.focus\\:-translate-y-40:focus{--transform-translate-y:-10rem!important}.focus\\:-translate-y-48:focus{--transform-translate-y:-12rem!important}.focus\\:-translate-y-56:focus{--transform-translate-y:-14rem!important}.focus\\:-translate-y-64:focus{--transform-translate-y:-16rem!important}.focus\\:-translate-y-px:focus{--transform-translate-y:-1px!important}.focus\\:-translate-y-full:focus{--transform-translate-y:-100%!important}.focus\\:-translate-y-1\\/2:focus{--transform-translate-y:-50%!important}.focus\\:translate-y-1\\/2:focus{--transform-translate-y:50%!important}.focus\\:translate-y-full:focus{--transform-translate-y:100%!important}.skew-x-0{--transform-skew-x:0!important}.skew-x-1{--transform-skew-x:1deg!important}.skew-x-2{--transform-skew-x:2deg!important}.skew-x-3{--transform-skew-x:3deg!important}.skew-x-6{--transform-skew-x:6deg!important}.skew-x-12{--transform-skew-x:12deg!important}.-skew-x-12{--transform-skew-x:-12deg!important}.-skew-x-6{--transform-skew-x:-6deg!important}.-skew-x-3{--transform-skew-x:-3deg!important}.-skew-x-2{--transform-skew-x:-2deg!important}.-skew-x-1{--transform-skew-x:-1deg!important}.skew-y-0{--transform-skew-y:0!important}.skew-y-1{--transform-skew-y:1deg!important}.skew-y-2{--transform-skew-y:2deg!important}.skew-y-3{--transform-skew-y:3deg!important}.skew-y-6{--transform-skew-y:6deg!important}.skew-y-12{--transform-skew-y:12deg!important}.-skew-y-12{--transform-skew-y:-12deg!important}.-skew-y-6{--transform-skew-y:-6deg!important}.-skew-y-3{--transform-skew-y:-3deg!important}.-skew-y-2{--transform-skew-y:-2deg!important}.-skew-y-1{--transform-skew-y:-1deg!important}.hover\\:skew-x-0:hover{--transform-skew-x:0!important}.hover\\:skew-x-1:hover{--transform-skew-x:1deg!important}.hover\\:skew-x-2:hover{--transform-skew-x:2deg!important}.hover\\:skew-x-3:hover{--transform-skew-x:3deg!important}.hover\\:skew-x-6:hover{--transform-skew-x:6deg!important}.hover\\:skew-x-12:hover{--transform-skew-x:12deg!important}.hover\\:-skew-x-12:hover{--transform-skew-x:-12deg!important}.hover\\:-skew-x-6:hover{--transform-skew-x:-6deg!important}.hover\\:-skew-x-3:hover{--transform-skew-x:-3deg!important}.hover\\:-skew-x-2:hover{--transform-skew-x:-2deg!important}.hover\\:-skew-x-1:hover{--transform-skew-x:-1deg!important}.hover\\:skew-y-0:hover{--transform-skew-y:0!important}.hover\\:skew-y-1:hover{--transform-skew-y:1deg!important}.hover\\:skew-y-2:hover{--transform-skew-y:2deg!important}.hover\\:skew-y-3:hover{--transform-skew-y:3deg!important}.hover\\:skew-y-6:hover{--transform-skew-y:6deg!important}.hover\\:skew-y-12:hover{--transform-skew-y:12deg!important}.hover\\:-skew-y-12:hover{--transform-skew-y:-12deg!important}.hover\\:-skew-y-6:hover{--transform-skew-y:-6deg!important}.hover\\:-skew-y-3:hover{--transform-skew-y:-3deg!important}.hover\\:-skew-y-2:hover{--transform-skew-y:-2deg!important}.hover\\:-skew-y-1:hover{--transform-skew-y:-1deg!important}.focus\\:skew-x-0:focus{--transform-skew-x:0!important}.focus\\:skew-x-1:focus{--transform-skew-x:1deg!important}.focus\\:skew-x-2:focus{--transform-skew-x:2deg!important}.focus\\:skew-x-3:focus{--transform-skew-x:3deg!important}.focus\\:skew-x-6:focus{--transform-skew-x:6deg!important}.focus\\:skew-x-12:focus{--transform-skew-x:12deg!important}.focus\\:-skew-x-12:focus{--transform-skew-x:-12deg!important}.focus\\:-skew-x-6:focus{--transform-skew-x:-6deg!important}.focus\\:-skew-x-3:focus{--transform-skew-x:-3deg!important}.focus\\:-skew-x-2:focus{--transform-skew-x:-2deg!important}.focus\\:-skew-x-1:focus{--transform-skew-x:-1deg!important}.focus\\:skew-y-0:focus{--transform-skew-y:0!important}.focus\\:skew-y-1:focus{--transform-skew-y:1deg!important}.focus\\:skew-y-2:focus{--transform-skew-y:2deg!important}.focus\\:skew-y-3:focus{--transform-skew-y:3deg!important}.focus\\:skew-y-6:focus{--transform-skew-y:6deg!important}.focus\\:skew-y-12:focus{--transform-skew-y:12deg!important}.focus\\:-skew-y-12:focus{--transform-skew-y:-12deg!important}.focus\\:-skew-y-6:focus{--transform-skew-y:-6deg!important}.focus\\:-skew-y-3:focus{--transform-skew-y:-3deg!important}.focus\\:-skew-y-2:focus{--transform-skew-y:-2deg!important}.focus\\:-skew-y-1:focus{--transform-skew-y:-1deg!important}.transition-none{transition-property:none!important}.transition-all{transition-property:all!important}.transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform!important}.transition-colors{transition-property:background-color,border-color,color,fill,stroke!important}.transition-opacity{transition-property:opacity!important}.transition-shadow{transition-property:box-shadow!important}.transition-transform{transition-property:transform!important}.ease-linear{transition-timing-function:linear!important}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)!important}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)!important}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.duration-75{transition-duration:75ms!important}.duration-100{transition-duration:.1s!important}.duration-150{transition-duration:.15s!important}.duration-200{transition-duration:.2s!important}.duration-300{transition-duration:.3s!important}.duration-500{transition-duration:.5s!important}.duration-700{transition-duration:.7s!important}.duration-1000{transition-duration:1s!important}.delay-75{transition-delay:75ms!important}.delay-100{transition-delay:.1s!important}.delay-150{transition-delay:.15s!important}.delay-200{transition-delay:.2s!important}.delay-300{transition-delay:.3s!important}.delay-500{transition-delay:.5s!important}.delay-700{transition-delay:.7s!important}.delay-1000{transition-delay:1s!important}@keyframes spin{to{transform:rotate(1turn)}}@keyframes ping{75%,to{transform:scale(2);opacity:0}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{transform:translateY(-25%);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;animation-timing-function:cubic-bezier(0,0,.2,1)}}.animate-none{animation:none!important}.animate-spin{animation:spin 1s linear infinite!important}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite!important}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite!important}.animate-bounce{animation:bounce 1s infinite!important}.truncate-none{overflow:unset!important;text-overflow:unset!important;white-space:unset!important}.bg-white{background-color:#fff!important}.w-full{width:100%!important}.h-full{height:100%!important}.scrollable{overflow-y:scroll}.mat-badge-content{font-weight:600;font-size:12px;font-family:Roboto,Helvetica Neue,sans-serif}.mat-badge-small .mat-badge-content{font-size:9px}.mat-badge-large .mat-badge-content{font-size:24px}.mat-h1,.mat-headline,.mat-typography h1{font:400 24px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h2,.mat-title,.mat-typography h2{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h3,.mat-subheading-2,.mat-typography h3{font:400 16px/28px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h4,.mat-subheading-1,.mat-typography h4{font:400 15px/24px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h5,.mat-typography h5{font:400 calc(14px * .83)/20px Roboto,Helvetica Neue,sans-serif;margin:0 0 12px}.mat-h6,.mat-typography h6{font:400 calc(14px * .67)/20px Roboto,Helvetica Neue,sans-serif;margin:0 0 12px}.mat-body-2,.mat-body-strong{font:500 14px/24px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-body,.mat-body-1,.mat-typography{font:400 14px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-body-1 p,.mat-body p,.mat-typography p{margin:0 0 12px}.mat-caption,.mat-small{font:400 12px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-display-4,.mat-typography .mat-display-4{font:300 112px/112px Roboto,Helvetica Neue,sans-serif;letter-spacing:-.05em;margin:0 0 56px}.mat-display-3,.mat-typography .mat-display-3{font:400 56px/56px Roboto,Helvetica Neue,sans-serif;letter-spacing:-.02em;margin:0 0 64px}.mat-display-2,.mat-typography .mat-display-2{font:400 45px/48px Roboto,Helvetica Neue,sans-serif;letter-spacing:-.005em;margin:0 0 64px}.mat-display-1,.mat-typography .mat-display-1{font:400 34px/40px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 64px}.mat-bottom-sheet-container{font:400 14px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-button,.mat-fab,.mat-flat-button,.mat-icon-button,.mat-mini-fab,.mat-raised-button,.mat-stroked-button{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-button-toggle,.mat-card{font-family:Roboto,Helvetica Neue,sans-serif}.mat-card-title{font-size:24px;font-weight:500}.mat-card-header .mat-card-title{font-size:20px}.mat-card-content,.mat-card-subtitle{font-size:14px}.mat-checkbox{font-family:Roboto,Helvetica Neue,sans-serif}.mat-checkbox-layout .mat-checkbox-label{line-height:24px}.mat-chip{font-size:14px;font-weight:500}.mat-chip .mat-chip-remove.mat-icon,.mat-chip .mat-chip-trailing-icon.mat-icon{font-size:18px}.mat-table{font-family:Roboto,Helvetica Neue,sans-serif}.mat-header-cell{font-size:12px;font-weight:500}.mat-cell,.mat-footer-cell{font-size:14px}.mat-calendar{font-family:Roboto,Helvetica Neue,sans-serif}.mat-calendar-body{font-size:13px}.mat-calendar-body-label,.mat-calendar-period-button{font-size:14px;font-weight:500}.mat-calendar-table-header th{font-size:11px;font-weight:400}.mat-dialog-title{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-expansion-panel-header{font-family:Roboto,Helvetica Neue,sans-serif;font-size:15px;font-weight:400}.mat-expansion-panel-content{font:400 14px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-form-field{font-size:inherit;font-weight:400;line-height:1.125;font-family:Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-form-field-wrapper{padding-bottom:1.34375em}.mat-form-field-prefix .mat-icon,.mat-form-field-suffix .mat-icon{font-size:150%;line-height:1.125}.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em}.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{height:1.125em;line-height:1.125}.mat-form-field-infix{padding:.5em 0;border-top:.84375em solid transparent}.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34375em) scale(.75);width:133.3333333333%}.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34374em) scale(.75);width:133.3333433333%}.mat-form-field-label-wrapper{top:-.84375em;padding-top:.84375em}.mat-form-field-label{top:1.34375em}.mat-form-field-underline{bottom:1.34375em}.mat-form-field-subscript-wrapper{font-size:75%;margin-top:.6666666667em;top:calc(100% - 1.7916666667em)}.mat-form-field-appearance-legacy .mat-form-field-wrapper{padding-bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-infix{padding:.4375em 0}.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(-1.28125em) scale(.75);width:133.3333333333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00101px);-ms-transform:translateY(-1.28124em) scale(.75);width:133.3333433333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00102px);-ms-transform:translateY(-1.28123em) scale(.75);width:133.3333533333%}.mat-form-field-appearance-legacy .mat-form-field-label{top:1.28125em}.mat-form-field-appearance-legacy .mat-form-field-underline{bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper{margin-top:.5416666667em;top:calc(100% - 1.6666666667em)}@media print{.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28122em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28121em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.2812em) scale(.75)}}.mat-form-field-appearance-fill .mat-form-field-infix{padding:.25em 0 .75em}.mat-form-field-appearance-fill .mat-form-field-label{top:1.09375em;margin-top:-.5em}.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-.59375em) scale(.75);width:133.3333333333%}.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-.59374em) scale(.75);width:133.3333433333%}.mat-form-field-appearance-outline .mat-form-field-infix{padding:1em 0}.mat-form-field-appearance-outline .mat-form-field-label{top:1.84375em;margin-top:-.25em}.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59375em) scale(.75);width:133.3333333333%}.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59374em) scale(.75);width:133.3333433333%}.mat-grid-tile-footer,.mat-grid-tile-header{font-size:14px}.mat-grid-tile-footer .mat-line,.mat-grid-tile-header .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-grid-tile-footer .mat-line:nth-child(n+2),.mat-grid-tile-header .mat-line:nth-child(n+2){font-size:12px}input.mat-input-element{margin-top:-.0625em}.mat-menu-item{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:400}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px}.mat-radio-button,.mat-select{font-family:Roboto,Helvetica Neue,sans-serif}.mat-select-trigger{height:1.125em}.mat-slide-toggle-content,.mat-slider-thumb-label-text{font-family:Roboto,Helvetica Neue,sans-serif}.mat-slider-thumb-label-text{font-size:12px;font-weight:500}.mat-stepper-horizontal,.mat-stepper-vertical{font-family:Roboto,Helvetica Neue,sans-serif}.mat-step-label{font-size:14px;font-weight:400}.mat-step-sub-label-error{font-weight:400}.mat-step-label-error{font-size:14px}.mat-step-label-selected{font-size:14px;font-weight:500}.mat-tab-group,.mat-tab-label,.mat-tab-link{font-family:Roboto,Helvetica Neue,sans-serif}.mat-tab-label,.mat-tab-link{font-size:14px;font-weight:500}.mat-toolbar,.mat-toolbar h1,.mat-toolbar h2,.mat-toolbar h3,.mat-toolbar h4,.mat-toolbar h5,.mat-toolbar h6{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0}.mat-tooltip{font-family:Roboto,Helvetica Neue,sans-serif;font-size:10px;padding-top:6px;padding-bottom:6px}.mat-tooltip-handset{font-size:14px;padding-top:8px;padding-bottom:8px}.mat-list-item,.mat-list-option{font-family:Roboto,Helvetica Neue,sans-serif}.mat-list-base .mat-list-item{font-size:16px}.mat-list-base .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-item .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-list-option{font-size:16px}.mat-list-base .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-option .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-subheader{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-list-base[dense] .mat-list-item{font-size:12px}.mat-list-base[dense] .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-item .mat-line:nth-child(n+2),.mat-list-base[dense] .mat-list-option{font-size:12px}.mat-list-base[dense] .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-option .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-subheader{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;font-weight:500}.mat-option{font-family:Roboto,Helvetica Neue,sans-serif;font-size:16px}.mat-optgroup-label{font:500 14px/24px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-simple-snackbar{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px}.mat-simple-snackbar-action{line-height:1;font-family:inherit;font-size:inherit;font-weight:500}.mat-tree{font-family:Roboto,Helvetica Neue,sans-serif}.mat-nested-tree-node,.mat-tree-node{font-weight:400;font-size:14px}.mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transform:scale(0)}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;outline:0;-webkit-appearance:none;-moz-appearance:none}.cdk-global-overlay-wrapper,.cdk-overlay-container{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper,.cdk-overlay-pane{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{pointer-events:auto;box-sizing:border-box;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}@media screen and (-ms-high-contrast:active){.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop,.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}@keyframes cdk-text-field-autofill-start{\n  /*!*/}@keyframes cdk-text-field-autofill-end{\n  /*!*/}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:initial!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:initial!important;height:0!important}.mat-focus-indicator,.mat-mdc-focus-indicator{position:relative}.color-primary{color:#4b6fff!important}.bg-primary{background:#4b6fff!important}.color-accent{color:#27d261!important}.bg-accent{background:#27d261!important}.color-warn{color:#f44336!important}.color-success{color:#3ddf7e!important}.color-error{color:#f44336!important}.color-info{color:#00bcd4!important}.color-warning{color:#ffc107!important}.status-Finished{color:#27d261!important}.status-Failed{color:#ffc107!important}.color-scheme-light .mat-ripple-element{background-color:rgba(0,0,0,.1)}.color-scheme-light .mat-option{color:rgba(0,0,0,.87)}.color-scheme-light .mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled),.color-scheme-light .mat-option:focus:not(.mat-option-disabled),.color-scheme-light .mat-option:hover:not(.mat-option-disabled){background:rgba(0,0,0,.04)}.color-scheme-light .mat-option.mat-active{background:rgba(0,0,0,.04);color:rgba(0,0,0,.87)}.color-scheme-light .mat-option.mat-option-disabled{color:rgba(0,0,0,.38)}.color-scheme-light .mat-primary .mat-option.mat-selected:not(.mat-option-disabled){color:#4b6fff}.color-scheme-light .mat-accent .mat-option.mat-selected:not(.mat-option-disabled){color:#3ddf7e}.color-scheme-light .mat-warn .mat-option.mat-selected:not(.mat-option-disabled){color:#f44336}.color-scheme-light .mat-optgroup-label{color:rgba(0,0,0,.54)}.color-scheme-light .mat-optgroup-disabled .mat-optgroup-label{color:rgba(0,0,0,.38)}.color-scheme-light .mat-pseudo-checkbox{color:rgba(0,0,0,.54)}.color-scheme-light .mat-pseudo-checkbox:after{color:#fafafa}.color-scheme-light .mat-pseudo-checkbox-disabled{color:#b0b0b0}.color-scheme-light .mat-primary .mat-pseudo-checkbox-checked,.color-scheme-light .mat-primary .mat-pseudo-checkbox-indeterminate{background:#4b6fff}.color-scheme-light .mat-accent .mat-pseudo-checkbox-checked,.color-scheme-light .mat-accent .mat-pseudo-checkbox-indeterminate,.color-scheme-light .mat-pseudo-checkbox-checked,.color-scheme-light .mat-pseudo-checkbox-indeterminate{background:#3ddf7e}.color-scheme-light .mat-warn .mat-pseudo-checkbox-checked,.color-scheme-light .mat-warn .mat-pseudo-checkbox-indeterminate{background:#f44336}.color-scheme-light .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,.color-scheme-light .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled{background:#b0b0b0}.color-scheme-light.mat-app-background,.color-scheme-light .mat-app-background{background-color:#fafafa;color:rgba(0,0,0,.87)}.color-scheme-light .mat-elevation-z0{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z1{box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z2{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z3{box-shadow:0 3px 3px -2px rgba(0,0,0,.2),0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z4{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z5{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 5px 8px 0 rgba(0,0,0,.14),0 1px 14px 0 rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z6{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z7{box-shadow:0 4px 5px -2px rgba(0,0,0,.2),0 7px 10px 1px rgba(0,0,0,.14),0 2px 16px 1px rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z8{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z9{box-shadow:0 5px 6px -3px rgba(0,0,0,.2),0 9px 12px 1px rgba(0,0,0,.14),0 3px 16px 2px rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z10{box-shadow:0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z11{box-shadow:0 6px 7px -4px rgba(0,0,0,.2),0 11px 15px 1px rgba(0,0,0,.14),0 4px 20px 3px rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z12{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z13{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 13px 19px 2px rgba(0,0,0,.14),0 5px 24px 4px rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z14{box-shadow:0 7px 9px -4px rgba(0,0,0,.2),0 14px 21px 2px rgba(0,0,0,.14),0 5px 26px 4px rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z15{box-shadow:0 8px 9px -5px rgba(0,0,0,.2),0 15px 22px 2px rgba(0,0,0,.14),0 6px 28px 5px rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z16{box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z17{box-shadow:0 8px 11px -5px rgba(0,0,0,.2),0 17px 26px 2px rgba(0,0,0,.14),0 6px 32px 5px rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z18{box-shadow:0 9px 11px -5px rgba(0,0,0,.2),0 18px 28px 2px rgba(0,0,0,.14),0 7px 34px 6px rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z19{box-shadow:0 9px 12px -6px rgba(0,0,0,.2),0 19px 29px 2px rgba(0,0,0,.14),0 7px 36px 6px rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z20{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 20px 31px 3px rgba(0,0,0,.14),0 8px 38px 7px rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z21{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 21px 33px 3px rgba(0,0,0,.14),0 8px 40px 7px rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z22{box-shadow:0 10px 14px -6px rgba(0,0,0,.2),0 22px 35px 3px rgba(0,0,0,.14),0 8px 42px 7px rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z23{box-shadow:0 11px 14px -7px rgba(0,0,0,.2),0 23px 36px 3px rgba(0,0,0,.14),0 9px 44px 8px rgba(0,0,0,.12)}.color-scheme-light .mat-elevation-z24{box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12)}.color-scheme-light .mat-autocomplete-panel{background:#fff;color:rgba(0,0,0,.87)}.color-scheme-light .mat-autocomplete-panel:not([class*=mat-elevation-z]){box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.color-scheme-light .mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover){background:#fff}.color-scheme-light .mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled){color:rgba(0,0,0,.87)}.color-scheme-light .mat-badge-content{color:#fff;background:#4b6fff}.cdk-high-contrast-active .color-scheme-light .mat-badge-content{outline:1px solid;border-radius:0}.color-scheme-light .mat-badge-accent .mat-badge-content{background:#3ddf7e;color:#fff}.color-scheme-light .mat-badge-warn .mat-badge-content{color:#fff;background:#f44336}.color-scheme-light .mat-badge{position:relative}.color-scheme-light .mat-badge-hidden .mat-badge-content{display:none}.color-scheme-light .mat-badge-disabled .mat-badge-content{background:#b9b9b9;color:rgba(0,0,0,.38)}.color-scheme-light .mat-badge-content{position:absolute;text-align:center;display:inline-block;border-radius:50%;transition:transform .2s ease-in-out;transform:scale(.6);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.color-scheme-light .mat-badge-content._mat-animation-noopable,.color-scheme-light .ng-animate-disabled .mat-badge-content{transition:none}.color-scheme-light .mat-badge-content.mat-badge-active{transform:none}.color-scheme-light .mat-badge-small .mat-badge-content{width:16px;height:16px;line-height:16px}.color-scheme-light .mat-badge-small.mat-badge-above .mat-badge-content{top:-8px}.color-scheme-light .mat-badge-small.mat-badge-below .mat-badge-content{bottom:-8px}.color-scheme-light .mat-badge-small.mat-badge-before .mat-badge-content{left:-16px}[dir=rtl] .color-scheme-light .mat-badge-small.mat-badge-before .mat-badge-content{left:auto;right:-16px}.color-scheme-light .mat-badge-small.mat-badge-after .mat-badge-content{right:-16px}[dir=rtl] .color-scheme-light .mat-badge-small.mat-badge-after .mat-badge-content{right:auto;left:-16px}.color-scheme-light .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-8px}[dir=rtl] .color-scheme-light .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-8px}.color-scheme-light .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-8px}[dir=rtl] .color-scheme-light .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-8px}.color-scheme-light .mat-badge-medium .mat-badge-content{width:22px;height:22px;line-height:22px}.color-scheme-light .mat-badge-medium.mat-badge-above .mat-badge-content{top:-11px}.color-scheme-light .mat-badge-medium.mat-badge-below .mat-badge-content{bottom:-11px}.color-scheme-light .mat-badge-medium.mat-badge-before .mat-badge-content{left:-22px}[dir=rtl] .color-scheme-light .mat-badge-medium.mat-badge-before .mat-badge-content{left:auto;right:-22px}.color-scheme-light .mat-badge-medium.mat-badge-after .mat-badge-content{right:-22px}[dir=rtl] .color-scheme-light .mat-badge-medium.mat-badge-after .mat-badge-content{right:auto;left:-22px}.color-scheme-light .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-11px}[dir=rtl] .color-scheme-light .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-11px}.color-scheme-light .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-11px}[dir=rtl] .color-scheme-light .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-11px}.color-scheme-light .mat-badge-large .mat-badge-content{width:28px;height:28px;line-height:28px}.color-scheme-light .mat-badge-large.mat-badge-above .mat-badge-content{top:-14px}.color-scheme-light .mat-badge-large.mat-badge-below .mat-badge-content{bottom:-14px}.color-scheme-light .mat-badge-large.mat-badge-before .mat-badge-content{left:-28px}[dir=rtl] .color-scheme-light .mat-badge-large.mat-badge-before .mat-badge-content{left:auto;right:-28px}.color-scheme-light .mat-badge-large.mat-badge-after .mat-badge-content{right:-28px}[dir=rtl] .color-scheme-light .mat-badge-large.mat-badge-after .mat-badge-content{right:auto;left:-28px}.color-scheme-light .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-14px}[dir=rtl] .color-scheme-light .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-14px}.color-scheme-light .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-14px}[dir=rtl] .color-scheme-light .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-14px}.color-scheme-light .mat-bottom-sheet-container{box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);background:#fff;color:rgba(0,0,0,.87)}.color-scheme-light .mat-button,.color-scheme-light .mat-icon-button,.color-scheme-light .mat-stroked-button{color:inherit;background:transparent}.color-scheme-light .mat-button.mat-primary,.color-scheme-light .mat-icon-button.mat-primary,.color-scheme-light .mat-stroked-button.mat-primary{color:#4b6fff}.color-scheme-light .mat-button.mat-accent,.color-scheme-light .mat-icon-button.mat-accent,.color-scheme-light .mat-stroked-button.mat-accent{color:#3ddf7e}.color-scheme-light .mat-button.mat-warn,.color-scheme-light .mat-icon-button.mat-warn,.color-scheme-light .mat-stroked-button.mat-warn{color:#f44336}.color-scheme-light .mat-button.mat-accent.mat-button-disabled,.color-scheme-light .mat-button.mat-button-disabled.mat-button-disabled,.color-scheme-light .mat-button.mat-primary.mat-button-disabled,.color-scheme-light .mat-button.mat-warn.mat-button-disabled,.color-scheme-light .mat-icon-button.mat-accent.mat-button-disabled,.color-scheme-light .mat-icon-button.mat-button-disabled.mat-button-disabled,.color-scheme-light .mat-icon-button.mat-primary.mat-button-disabled,.color-scheme-light .mat-icon-button.mat-warn.mat-button-disabled,.color-scheme-light .mat-stroked-button.mat-accent.mat-button-disabled,.color-scheme-light .mat-stroked-button.mat-button-disabled.mat-button-disabled,.color-scheme-light .mat-stroked-button.mat-primary.mat-button-disabled,.color-scheme-light .mat-stroked-button.mat-warn.mat-button-disabled{color:rgba(0,0,0,.26)}.color-scheme-light .mat-button.mat-primary .mat-button-focus-overlay,.color-scheme-light .mat-icon-button.mat-primary .mat-button-focus-overlay,.color-scheme-light .mat-stroked-button.mat-primary .mat-button-focus-overlay{background-color:#4b6fff}.color-scheme-light .mat-button.mat-accent .mat-button-focus-overlay,.color-scheme-light .mat-icon-button.mat-accent .mat-button-focus-overlay,.color-scheme-light .mat-stroked-button.mat-accent .mat-button-focus-overlay{background-color:#3ddf7e}.color-scheme-light .mat-button.mat-warn .mat-button-focus-overlay,.color-scheme-light .mat-icon-button.mat-warn .mat-button-focus-overlay,.color-scheme-light .mat-stroked-button.mat-warn .mat-button-focus-overlay{background-color:#f44336}.color-scheme-light .mat-button.mat-button-disabled .mat-button-focus-overlay,.color-scheme-light .mat-icon-button.mat-button-disabled .mat-button-focus-overlay,.color-scheme-light .mat-stroked-button.mat-button-disabled .mat-button-focus-overlay{background-color:initial}.color-scheme-light .mat-button .mat-ripple-element,.color-scheme-light .mat-icon-button .mat-ripple-element,.color-scheme-light .mat-stroked-button .mat-ripple-element{opacity:.1;background-color:currentColor}.color-scheme-light .mat-button-focus-overlay{background:#000}.color-scheme-light .mat-stroked-button:not(.mat-button-disabled){border-color:rgba(0,0,0,.12)}.color-scheme-light .mat-fab,.color-scheme-light .mat-flat-button,.color-scheme-light .mat-mini-fab,.color-scheme-light .mat-raised-button{color:rgba(0,0,0,.87);background-color:#fff}.color-scheme-light .mat-fab.mat-accent,.color-scheme-light .mat-fab.mat-primary,.color-scheme-light .mat-fab.mat-warn,.color-scheme-light .mat-flat-button.mat-accent,.color-scheme-light .mat-flat-button.mat-primary,.color-scheme-light .mat-flat-button.mat-warn,.color-scheme-light .mat-mini-fab.mat-accent,.color-scheme-light .mat-mini-fab.mat-primary,.color-scheme-light .mat-mini-fab.mat-warn,.color-scheme-light .mat-raised-button.mat-accent,.color-scheme-light .mat-raised-button.mat-primary,.color-scheme-light .mat-raised-button.mat-warn{color:#fff}.color-scheme-light .mat-fab.mat-accent.mat-button-disabled,.color-scheme-light .mat-fab.mat-button-disabled.mat-button-disabled,.color-scheme-light .mat-fab.mat-primary.mat-button-disabled,.color-scheme-light .mat-fab.mat-warn.mat-button-disabled,.color-scheme-light .mat-flat-button.mat-accent.mat-button-disabled,.color-scheme-light .mat-flat-button.mat-button-disabled.mat-button-disabled,.color-scheme-light .mat-flat-button.mat-primary.mat-button-disabled,.color-scheme-light .mat-flat-button.mat-warn.mat-button-disabled,.color-scheme-light .mat-mini-fab.mat-accent.mat-button-disabled,.color-scheme-light .mat-mini-fab.mat-button-disabled.mat-button-disabled,.color-scheme-light .mat-mini-fab.mat-primary.mat-button-disabled,.color-scheme-light .mat-mini-fab.mat-warn.mat-button-disabled,.color-scheme-light .mat-raised-button.mat-accent.mat-button-disabled,.color-scheme-light .mat-raised-button.mat-button-disabled.mat-button-disabled,.color-scheme-light .mat-raised-button.mat-primary.mat-button-disabled,.color-scheme-light .mat-raised-button.mat-warn.mat-button-disabled{color:rgba(0,0,0,.26)}.color-scheme-light .mat-fab.mat-primary,.color-scheme-light .mat-flat-button.mat-primary,.color-scheme-light .mat-mini-fab.mat-primary,.color-scheme-light .mat-raised-button.mat-primary{background-color:#4b6fff}.color-scheme-light .mat-fab.mat-accent,.color-scheme-light .mat-flat-button.mat-accent,.color-scheme-light .mat-mini-fab.mat-accent,.color-scheme-light .mat-raised-button.mat-accent{background-color:#3ddf7e}.color-scheme-light .mat-fab.mat-warn,.color-scheme-light .mat-flat-button.mat-warn,.color-scheme-light .mat-mini-fab.mat-warn,.color-scheme-light .mat-raised-button.mat-warn{background-color:#f44336}.color-scheme-light .mat-fab.mat-accent.mat-button-disabled,.color-scheme-light .mat-fab.mat-button-disabled.mat-button-disabled,.color-scheme-light .mat-fab.mat-primary.mat-button-disabled,.color-scheme-light .mat-fab.mat-warn.mat-button-disabled,.color-scheme-light .mat-flat-button.mat-accent.mat-button-disabled,.color-scheme-light .mat-flat-button.mat-button-disabled.mat-button-disabled,.color-scheme-light .mat-flat-button.mat-primary.mat-button-disabled,.color-scheme-light .mat-flat-button.mat-warn.mat-button-disabled,.color-scheme-light .mat-mini-fab.mat-accent.mat-button-disabled,.color-scheme-light .mat-mini-fab.mat-button-disabled.mat-button-disabled,.color-scheme-light .mat-mini-fab.mat-primary.mat-button-disabled,.color-scheme-light .mat-mini-fab.mat-warn.mat-button-disabled,.color-scheme-light .mat-raised-button.mat-accent.mat-button-disabled,.color-scheme-light .mat-raised-button.mat-button-disabled.mat-button-disabled,.color-scheme-light .mat-raised-button.mat-primary.mat-button-disabled,.color-scheme-light .mat-raised-button.mat-warn.mat-button-disabled{background-color:rgba(0,0,0,.12)}.color-scheme-light .mat-fab.mat-accent .mat-ripple-element,.color-scheme-light .mat-fab.mat-primary .mat-ripple-element,.color-scheme-light .mat-fab.mat-warn .mat-ripple-element,.color-scheme-light .mat-flat-button.mat-accent .mat-ripple-element,.color-scheme-light .mat-flat-button.mat-primary .mat-ripple-element,.color-scheme-light .mat-flat-button.mat-warn .mat-ripple-element,.color-scheme-light .mat-mini-fab.mat-accent .mat-ripple-element,.color-scheme-light .mat-mini-fab.mat-primary .mat-ripple-element,.color-scheme-light .mat-mini-fab.mat-warn .mat-ripple-element,.color-scheme-light .mat-raised-button.mat-accent .mat-ripple-element,.color-scheme-light .mat-raised-button.mat-primary .mat-ripple-element,.color-scheme-light .mat-raised-button.mat-warn .mat-ripple-element{background-color:hsla(0,0%,100%,.1)}.color-scheme-light .mat-flat-button:not([class*=mat-elevation-z]),.color-scheme-light .mat-stroked-button:not([class*=mat-elevation-z]){box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.color-scheme-light .mat-raised-button:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.color-scheme-light .mat-raised-button:not(.mat-button-disabled):active:not([class*=mat-elevation-z]){box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.color-scheme-light .mat-raised-button.mat-button-disabled:not([class*=mat-elevation-z]){box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.color-scheme-light .mat-fab:not([class*=mat-elevation-z]),.color-scheme-light .mat-mini-fab:not([class*=mat-elevation-z]){box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.color-scheme-light .mat-fab:not(.mat-button-disabled):active:not([class*=mat-elevation-z]),.color-scheme-light .mat-mini-fab:not(.mat-button-disabled):active:not([class*=mat-elevation-z]){box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.color-scheme-light .mat-fab.mat-button-disabled:not([class*=mat-elevation-z]),.color-scheme-light .mat-mini-fab.mat-button-disabled:not([class*=mat-elevation-z]){box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.color-scheme-light .mat-button-toggle-group,.color-scheme-light .mat-button-toggle-standalone{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.color-scheme-light .mat-button-toggle-group-appearance-standard,.color-scheme-light .mat-button-toggle-standalone.mat-button-toggle-appearance-standard{box-shadow:none}.color-scheme-light .mat-button-toggle{color:rgba(0,0,0,.38)}.color-scheme-light .mat-button-toggle .mat-button-toggle-focus-overlay{background-color:rgba(0,0,0,.12)}.color-scheme-light .mat-button-toggle-appearance-standard{color:rgba(0,0,0,.87);background:#fff}.color-scheme-light .mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{background-color:#000}.color-scheme-light .mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:1px solid rgba(0,0,0,.12)}.color-scheme-light [dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:none;border-right:1px solid rgba(0,0,0,.12)}.color-scheme-light .mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle+.mat-button-toggle{border-left:none;border-right:none;border-top:1px solid rgba(0,0,0,.12)}.color-scheme-light .mat-button-toggle-checked{background-color:#e0e0e0;color:rgba(0,0,0,.54)}.color-scheme-light .mat-button-toggle-checked.mat-button-toggle-appearance-standard{color:rgba(0,0,0,.87)}.color-scheme-light .mat-button-toggle-disabled{color:rgba(0,0,0,.26);background-color:#eee}.color-scheme-light .mat-button-toggle-disabled.mat-button-toggle-appearance-standard{background:#fff}.color-scheme-light .mat-button-toggle-disabled.mat-button-toggle-checked{background-color:#bdbdbd}.color-scheme-light .mat-button-toggle-group-appearance-standard,.color-scheme-light .mat-button-toggle-standalone.mat-button-toggle-appearance-standard{border:1px solid rgba(0,0,0,.12)}.color-scheme-light .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:48px}.color-scheme-light .mat-card{background:#fff;color:rgba(0,0,0,.87)}.color-scheme-light .mat-card:not([class*=mat-elevation-z]){box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12)}.color-scheme-light .mat-card.mat-card-flat:not([class*=mat-elevation-z]){box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.color-scheme-light .mat-card-subtitle{color:rgba(0,0,0,.54)}.color-scheme-light .mat-checkbox-frame{border-color:rgba(0,0,0,.54)}.color-scheme-light .mat-checkbox-checkmark{fill:#fafafa}.color-scheme-light .mat-checkbox-checkmark-path{stroke:#fafafa!important}.color-scheme-light .mat-checkbox-mixedmark{background-color:#fafafa}.color-scheme-light .mat-checkbox-checked.mat-primary .mat-checkbox-background,.color-scheme-light .mat-checkbox-indeterminate.mat-primary .mat-checkbox-background{background-color:#4b6fff}.color-scheme-light .mat-checkbox-checked.mat-accent .mat-checkbox-background,.color-scheme-light .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background{background-color:#3ddf7e}.color-scheme-light .mat-checkbox-checked.mat-warn .mat-checkbox-background,.color-scheme-light .mat-checkbox-indeterminate.mat-warn .mat-checkbox-background{background-color:#f44336}.color-scheme-light .mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background,.color-scheme-light .mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background{background-color:#b0b0b0}.color-scheme-light .mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame{border-color:#b0b0b0}.color-scheme-light .mat-checkbox-disabled .mat-checkbox-label{color:rgba(0,0,0,.54)}.color-scheme-light .mat-checkbox .mat-ripple-element{background-color:#000}.color-scheme-light .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element,.color-scheme-light .mat-checkbox:active:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element{background:#4b6fff}.color-scheme-light .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element,.color-scheme-light .mat-checkbox:active:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element{background:#3ddf7e}.color-scheme-light .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element,.color-scheme-light .mat-checkbox:active:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element{background:#f44336}.color-scheme-light .mat-chip.mat-standard-chip{background-color:#e0e0e0;color:rgba(0,0,0,.87)}.color-scheme-light .mat-chip.mat-standard-chip .mat-chip-remove{color:rgba(0,0,0,.87);opacity:.4}.color-scheme-light .mat-chip.mat-standard-chip:not(.mat-chip-disabled):active{box-shadow:0 3px 3px -2px rgba(0,0,0,.2),0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12)}.color-scheme-light .mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover{opacity:.54}.color-scheme-light .mat-chip.mat-standard-chip.mat-chip-disabled{opacity:.4}.color-scheme-light .mat-chip.mat-standard-chip:after{background:#000}.color-scheme-light .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary{background-color:#4b6fff;color:#fff}.color-scheme-light .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove{color:#fff;opacity:.4}.color-scheme-light .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element{background-color:hsla(0,0%,100%,.1)}.color-scheme-light .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn{background-color:#f44336;color:#fff}.color-scheme-light .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove{color:#fff;opacity:.4}.color-scheme-light .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element{background-color:hsla(0,0%,100%,.1)}.color-scheme-light .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent{background-color:#3ddf7e;color:#fff}.color-scheme-light .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove{color:#fff;opacity:.4}.color-scheme-light .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element{background-color:hsla(0,0%,100%,.1)}.color-scheme-light .mat-table{background:#fff}.color-scheme-light .mat-table-sticky,.color-scheme-light .mat-table tbody,.color-scheme-light .mat-table tfoot,.color-scheme-light .mat-table thead,.color-scheme-light [mat-footer-row],.color-scheme-light [mat-header-row],.color-scheme-light [mat-row],.color-scheme-light mat-footer-row,.color-scheme-light mat-header-row,.color-scheme-light mat-row{background:inherit}.color-scheme-light mat-footer-row,.color-scheme-light mat-header-row,.color-scheme-light mat-row,.color-scheme-light td.mat-cell,.color-scheme-light td.mat-footer-cell,.color-scheme-light th.mat-header-cell{border-bottom-color:rgba(0,0,0,.12)}.color-scheme-light .mat-header-cell{color:rgba(0,0,0,.54)}.color-scheme-light .mat-cell,.color-scheme-light .mat-footer-cell{color:rgba(0,0,0,.87)}.color-scheme-light .mat-calendar-arrow{border-top-color:rgba(0,0,0,.54)}.color-scheme-light .mat-datepicker-content .mat-calendar-next-button,.color-scheme-light .mat-datepicker-content .mat-calendar-previous-button,.color-scheme-light .mat-datepicker-toggle{color:rgba(0,0,0,.54)}.color-scheme-light .mat-calendar-table-header{color:rgba(0,0,0,.38)}.color-scheme-light .mat-calendar-table-header-divider:after{background:rgba(0,0,0,.12)}.color-scheme-light .mat-calendar-body-label{color:rgba(0,0,0,.54)}.color-scheme-light .mat-calendar-body-cell-content,.color-scheme-light .mat-date-range-input-separator{color:rgba(0,0,0,.87);border-color:transparent}.color-scheme-light .mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.color-scheme-light .mat-form-field-disabled .mat-date-range-input-separator{color:rgba(0,0,0,.38)}.color-scheme-light .mat-calendar-body-in-preview{color:rgba(0,0,0,.24)}.color-scheme-light .mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:rgba(0,0,0,.38)}.color-scheme-light .mat-calendar-body-disabled>.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:rgba(0,0,0,.18)}.color-scheme-light .mat-calendar-body-in-range:before{background:rgba(75,111,255,.2)}.color-scheme-light .mat-calendar-body-comparison-identical,.color-scheme-light .mat-calendar-body-in-comparison-range:before{background:rgba(249,171,0,.2)}.color-scheme-light .mat-calendar-body-comparison-bridge-start:before,.color-scheme-light [dir=rtl] .mat-calendar-body-comparison-bridge-end:before{background:linear-gradient(90deg,rgba(75,111,255,.2) 50%,rgba(249,171,0,.2) 0)}.color-scheme-light .mat-calendar-body-comparison-bridge-end:before,.color-scheme-light [dir=rtl] .mat-calendar-body-comparison-bridge-start:before{background:linear-gradient(270deg,rgba(75,111,255,.2) 50%,rgba(249,171,0,.2) 0)}.color-scheme-light .mat-calendar-body-in-comparison-range.mat-calendar-body-in-range:after,.color-scheme-light .mat-calendar-body-in-range>.mat-calendar-body-comparison-identical{background:#a8dab5}.color-scheme-light .mat-calendar-body-comparison-identical.mat-calendar-body-selected,.color-scheme-light .mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e}.color-scheme-light .mat-calendar-body-selected{background-color:#4b6fff;color:#fff}.color-scheme-light .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(75,111,255,.4)}.color-scheme-light .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.color-scheme-light .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.color-scheme-light .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.color-scheme-light .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:rgba(75,111,255,.3)}.color-scheme-light .mat-datepicker-content{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);background-color:#fff;color:rgba(0,0,0,.87)}.color-scheme-light .mat-datepicker-content.mat-accent .mat-calendar-body-in-range:before{background:rgba(61,223,126,.2)}.color-scheme-light .mat-datepicker-content.mat-accent .mat-calendar-body-comparison-identical,.color-scheme-light .mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range:before{background:rgba(249,171,0,.2)}.color-scheme-light .mat-datepicker-content.mat-accent .mat-calendar-body-comparison-bridge-start:before,.color-scheme-light .mat-datepicker-content.mat-accent [dir=rtl] .mat-calendar-body-comparison-bridge-end:before{background:linear-gradient(90deg,rgba(61,223,126,.2) 50%,rgba(249,171,0,.2) 0)}.color-scheme-light .mat-datepicker-content.mat-accent .mat-calendar-body-comparison-bridge-end:before,.color-scheme-light .mat-datepicker-content.mat-accent [dir=rtl] .mat-calendar-body-comparison-bridge-start:before{background:linear-gradient(270deg,rgba(61,223,126,.2) 50%,rgba(249,171,0,.2) 0)}.color-scheme-light .mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range.mat-calendar-body-in-range:after,.color-scheme-light .mat-datepicker-content.mat-accent .mat-calendar-body-in-range>.mat-calendar-body-comparison-identical{background:#a8dab5}.color-scheme-light .mat-datepicker-content.mat-accent .mat-calendar-body-comparison-identical.mat-calendar-body-selected,.color-scheme-light .mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e}.color-scheme-light .mat-datepicker-content.mat-accent .mat-calendar-body-selected{background-color:#3ddf7e;color:#fff}.color-scheme-light .mat-datepicker-content.mat-accent .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(61,223,126,.4)}.color-scheme-light .mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.color-scheme-light .mat-datepicker-content.mat-accent .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.color-scheme-light .mat-datepicker-content.mat-accent .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.color-scheme-light .mat-datepicker-content.mat-accent .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:rgba(61,223,126,.3)}.color-scheme-light .mat-datepicker-content.mat-warn .mat-calendar-body-in-range:before{background:rgba(244,67,54,.2)}.color-scheme-light .mat-datepicker-content.mat-warn .mat-calendar-body-comparison-identical,.color-scheme-light .mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range:before{background:rgba(249,171,0,.2)}.color-scheme-light .mat-datepicker-content.mat-warn .mat-calendar-body-comparison-bridge-start:before,.color-scheme-light .mat-datepicker-content.mat-warn [dir=rtl] .mat-calendar-body-comparison-bridge-end:before{background:linear-gradient(90deg,rgba(244,67,54,.2) 50%,rgba(249,171,0,.2) 0)}.color-scheme-light .mat-datepicker-content.mat-warn .mat-calendar-body-comparison-bridge-end:before,.color-scheme-light .mat-datepicker-content.mat-warn [dir=rtl] .mat-calendar-body-comparison-bridge-start:before{background:linear-gradient(270deg,rgba(244,67,54,.2) 50%,rgba(249,171,0,.2) 0)}.color-scheme-light .mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range.mat-calendar-body-in-range:after,.color-scheme-light .mat-datepicker-content.mat-warn .mat-calendar-body-in-range>.mat-calendar-body-comparison-identical{background:#a8dab5}.color-scheme-light .mat-datepicker-content.mat-warn .mat-calendar-body-comparison-identical.mat-calendar-body-selected,.color-scheme-light .mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e}.color-scheme-light .mat-datepicker-content.mat-warn .mat-calendar-body-selected{background-color:#f44336;color:#fff}.color-scheme-light .mat-datepicker-content.mat-warn .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(244,67,54,.4)}.color-scheme-light .mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.color-scheme-light .mat-datepicker-content.mat-warn .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.color-scheme-light .mat-datepicker-content.mat-warn .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.color-scheme-light .mat-datepicker-content.mat-warn .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:rgba(244,67,54,.3)}.color-scheme-light .mat-datepicker-content-touch{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.color-scheme-light .mat-datepicker-toggle-active{color:#4b6fff}.color-scheme-light .mat-datepicker-toggle-active.mat-accent{color:#3ddf7e}.color-scheme-light .mat-datepicker-toggle-active.mat-warn{color:#f44336}.color-scheme-light .mat-date-range-input-inner[disabled]{color:rgba(0,0,0,.38)}.color-scheme-light .mat-dialog-container{box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12);background:#fff;color:rgba(0,0,0,.87)}.color-scheme-light .mat-divider{border-top-color:rgba(0,0,0,.12)}.color-scheme-light .mat-divider-vertical{border-right-color:rgba(0,0,0,.12)}.color-scheme-light .mat-expansion-panel{background:#fff;color:rgba(0,0,0,.87)}.color-scheme-light .mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.color-scheme-light .mat-action-row{border-top-color:rgba(0,0,0,.12)}.color-scheme-light .mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true]),.color-scheme-light .mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true]),.color-scheme-light .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true]){background:rgba(0,0,0,.04)}@media (hover:none){.color-scheme-light .mat-expansion-panel:not(.mat-expanded):not([aria-disabled=true]) .mat-expansion-panel-header:hover{background:#fff}}.color-scheme-light .mat-expansion-panel-header-title{color:rgba(0,0,0,.87)}.color-scheme-light .mat-expansion-indicator:after,.color-scheme-light .mat-expansion-panel-header-description{color:rgba(0,0,0,.54)}.color-scheme-light .mat-expansion-panel-header[aria-disabled=true]{color:rgba(0,0,0,.26)}.color-scheme-light .mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description,.color-scheme-light .mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title{color:inherit}.color-scheme-light .mat-expansion-panel-header{height:48px}.color-scheme-light .mat-expansion-panel-header.mat-expanded{height:64px}.color-scheme-light .mat-form-field-label,.color-scheme-light .mat-hint{color:rgba(0,0,0,.6)}.color-scheme-light .mat-form-field.mat-focused .mat-form-field-label{color:#4b6fff}.color-scheme-light .mat-form-field.mat-focused .mat-form-field-label.mat-accent{color:#3ddf7e}.color-scheme-light .mat-form-field.mat-focused .mat-form-field-label.mat-warn{color:#f44336}.color-scheme-light .mat-focused .mat-form-field-required-marker{color:#3ddf7e}.color-scheme-light .mat-form-field-ripple{background-color:rgba(0,0,0,.87)}.color-scheme-light .mat-form-field.mat-focused .mat-form-field-ripple{background-color:#4b6fff}.color-scheme-light .mat-form-field.mat-focused .mat-form-field-ripple.mat-accent{background-color:#3ddf7e}.color-scheme-light .mat-form-field.mat-focused .mat-form-field-ripple.mat-warn{background-color:#f44336}.color-scheme-light .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix:after{color:#4b6fff}.color-scheme-light .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix:after{color:#3ddf7e}.color-scheme-light .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix:after,.color-scheme-light .mat-form-field.mat-form-field-invalid .mat-form-field-label,.color-scheme-light .mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent,.color-scheme-light .mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker{color:#f44336}.color-scheme-light .mat-form-field.mat-form-field-invalid .mat-form-field-ripple,.color-scheme-light .mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent{background-color:#f44336}.color-scheme-light .mat-error{color:#f44336}.color-scheme-light .mat-form-field-appearance-legacy .mat-form-field-label,.color-scheme-light .mat-form-field-appearance-legacy .mat-hint{color:rgba(0,0,0,.54)}.color-scheme-light .mat-form-field-appearance-legacy .mat-form-field-underline{background-color:rgba(0,0,0,.42)}.color-scheme-light .mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(90deg,rgba(0,0,0,.42) 0,rgba(0,0,0,.42) 33%,transparent 0);background-size:4px 100%;background-repeat:repeat-x}.color-scheme-light .mat-form-field-appearance-standard .mat-form-field-underline{background-color:rgba(0,0,0,.42)}.color-scheme-light .mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(90deg,rgba(0,0,0,.42) 0,rgba(0,0,0,.42) 33%,transparent 0);background-size:4px 100%;background-repeat:repeat-x}.color-scheme-light .mat-form-field-appearance-fill .mat-form-field-flex{background-color:rgba(0,0,0,.04)}.color-scheme-light .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex{background-color:rgba(0,0,0,.02)}.color-scheme-light .mat-form-field-appearance-fill .mat-form-field-underline:before{background-color:rgba(0,0,0,.42)}.color-scheme-light .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label{color:rgba(0,0,0,.38)}.color-scheme-light .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline:before{background-color:initial}.color-scheme-light .mat-form-field-appearance-outline .mat-form-field-outline{color:rgba(0,0,0,.12)}.color-scheme-light .mat-form-field-appearance-outline .mat-form-field-outline-thick{color:rgba(0,0,0,.87)}.color-scheme-light .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:#4b6fff}.color-scheme-light .mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick{color:#3ddf7e}.color-scheme-light .mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick,.color-scheme-light .mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick{color:#f44336}.color-scheme-light .mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label{color:rgba(0,0,0,.38)}.color-scheme-light .mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{color:rgba(0,0,0,.06)}.color-scheme-light .mat-icon.mat-primary{color:#4b6fff}.color-scheme-light .mat-icon.mat-accent{color:#3ddf7e}.color-scheme-light .mat-icon.mat-warn{color:#f44336}.color-scheme-light .mat-form-field-type-mat-native-select .mat-form-field-infix:after{color:rgba(0,0,0,.54)}.color-scheme-light .mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix:after,.color-scheme-light .mat-input-element:disabled{color:rgba(0,0,0,.38)}.color-scheme-light .mat-input-element{caret-color:#4b6fff}.color-scheme-light .mat-input-element::placeholder{color:rgba(0,0,0,.42)}.color-scheme-light .mat-input-element::-moz-placeholder{color:rgba(0,0,0,.42)}.color-scheme-light .mat-input-element::-webkit-input-placeholder{color:rgba(0,0,0,.42)}.color-scheme-light .mat-input-element:-ms-input-placeholder{color:rgba(0,0,0,.42)}.color-scheme-light .mat-form-field.mat-accent .mat-input-element{caret-color:#3ddf7e}.color-scheme-light .mat-form-field-invalid .mat-input-element,.color-scheme-light .mat-form-field.mat-warn .mat-input-element{caret-color:#f44336}.color-scheme-light .mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix:after{color:#f44336}.color-scheme-light .mat-list-base .mat-list-item,.color-scheme-light .mat-list-base .mat-list-option{color:rgba(0,0,0,.87)}.color-scheme-light .mat-list-base .mat-subheader{color:rgba(0,0,0,.54)}.color-scheme-light .mat-list-item-disabled{background-color:#eee}.color-scheme-light .mat-action-list .mat-list-item:focus,.color-scheme-light .mat-action-list .mat-list-item:hover,.color-scheme-light .mat-list-option:focus,.color-scheme-light .mat-list-option:hover,.color-scheme-light .mat-nav-list .mat-list-item:focus,.color-scheme-light .mat-nav-list .mat-list-item:hover{background:rgba(0,0,0,.04)}.color-scheme-light .mat-list-single-selected-option,.color-scheme-light .mat-list-single-selected-option:focus,.color-scheme-light .mat-list-single-selected-option:hover{background:rgba(0,0,0,.12)}.color-scheme-light .mat-menu-panel{background:#fff}.color-scheme-light .mat-menu-panel:not([class*=mat-elevation-z]){box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.color-scheme-light .mat-menu-item{background:transparent;color:rgba(0,0,0,.87)}.color-scheme-light .mat-menu-item[disabled],.color-scheme-light .mat-menu-item[disabled] .mat-icon-no-color,.color-scheme-light .mat-menu-item[disabled]:after{color:rgba(0,0,0,.38)}.color-scheme-light .mat-menu-item-submenu-trigger:after,.color-scheme-light .mat-menu-item .mat-icon-no-color{color:rgba(0,0,0,.54)}.color-scheme-light .mat-menu-item-highlighted:not([disabled]),.color-scheme-light .mat-menu-item.cdk-keyboard-focused:not([disabled]),.color-scheme-light .mat-menu-item.cdk-program-focused:not([disabled]),.color-scheme-light .mat-menu-item:hover:not([disabled]){background:rgba(0,0,0,.04)}.color-scheme-light .mat-paginator{background:#fff}.color-scheme-light .mat-paginator,.color-scheme-light .mat-paginator-page-size .mat-select-trigger{color:rgba(0,0,0,.54)}.color-scheme-light .mat-paginator-decrement,.color-scheme-light .mat-paginator-increment{border-top:2px solid rgba(0,0,0,.54);border-right:2px solid rgba(0,0,0,.54)}.color-scheme-light .mat-paginator-first,.color-scheme-light .mat-paginator-last{border-top:2px solid rgba(0,0,0,.54)}.color-scheme-light .mat-icon-button[disabled] .mat-paginator-decrement,.color-scheme-light .mat-icon-button[disabled] .mat-paginator-first,.color-scheme-light .mat-icon-button[disabled] .mat-paginator-increment,.color-scheme-light .mat-icon-button[disabled] .mat-paginator-last{border-color:rgba(0,0,0,.38)}.color-scheme-light .mat-paginator-container{min-height:56px}.color-scheme-light .mat-progress-bar-background{fill:#c9d4ff}.color-scheme-light .mat-progress-bar-buffer{background-color:#c9d4ff}.color-scheme-light .mat-progress-bar-fill:after{background-color:#4b6fff}.color-scheme-light .mat-progress-bar.mat-accent .mat-progress-bar-background{fill:#c5f5d8}.color-scheme-light .mat-progress-bar.mat-accent .mat-progress-bar-buffer{background-color:#c5f5d8}.color-scheme-light .mat-progress-bar.mat-accent .mat-progress-bar-fill:after{background-color:#3ddf7e}.color-scheme-light .mat-progress-bar.mat-warn .mat-progress-bar-background{fill:#ffcdd2}.color-scheme-light .mat-progress-bar.mat-warn .mat-progress-bar-buffer{background-color:#ffcdd2}.color-scheme-light .mat-progress-bar.mat-warn .mat-progress-bar-fill:after{background-color:#f44336}.color-scheme-light .mat-progress-spinner circle,.color-scheme-light .mat-spinner circle{stroke:#4b6fff}.color-scheme-light .mat-progress-spinner.mat-accent circle,.color-scheme-light .mat-spinner.mat-accent circle{stroke:#3ddf7e}.color-scheme-light .mat-progress-spinner.mat-warn circle,.color-scheme-light .mat-spinner.mat-warn circle{stroke:#f44336}.color-scheme-light .mat-radio-outer-circle{border-color:rgba(0,0,0,.54)}.color-scheme-light .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle{border-color:#4b6fff}.color-scheme-light .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple,.color-scheme-light .mat-radio-button.mat-primary .mat-radio-inner-circle,.color-scheme-light .mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.color-scheme-light .mat-radio-button.mat-primary:active .mat-radio-persistent-ripple{background-color:#4b6fff}.color-scheme-light .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#3ddf7e}.color-scheme-light .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple,.color-scheme-light .mat-radio-button.mat-accent .mat-radio-inner-circle,.color-scheme-light .mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.color-scheme-light .mat-radio-button.mat-accent:active .mat-radio-persistent-ripple{background-color:#3ddf7e}.color-scheme-light .mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle{border-color:#f44336}.color-scheme-light .mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple,.color-scheme-light .mat-radio-button.mat-warn .mat-radio-inner-circle,.color-scheme-light .mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.color-scheme-light .mat-radio-button.mat-warn:active .mat-radio-persistent-ripple{background-color:#f44336}.color-scheme-light .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle,.color-scheme-light .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:rgba(0,0,0,.38)}.color-scheme-light .mat-radio-button.mat-radio-disabled .mat-radio-inner-circle,.color-scheme-light .mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element{background-color:rgba(0,0,0,.38)}.color-scheme-light .mat-radio-button.mat-radio-disabled .mat-radio-label-content{color:rgba(0,0,0,.38)}.color-scheme-light .mat-radio-button .mat-ripple-element{background-color:#000}.color-scheme-light .mat-select-value{color:rgba(0,0,0,.87)}.color-scheme-light .mat-select-placeholder{color:rgba(0,0,0,.42)}.color-scheme-light .mat-select-disabled .mat-select-value{color:rgba(0,0,0,.38)}.color-scheme-light .mat-select-arrow{color:rgba(0,0,0,.54)}.color-scheme-light .mat-select-panel{background:#fff}.color-scheme-light .mat-select-panel:not([class*=mat-elevation-z]){box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.color-scheme-light .mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple){background:rgba(0,0,0,.12)}.color-scheme-light .mat-form-field.mat-focused.mat-primary .mat-select-arrow{color:#4b6fff}.color-scheme-light .mat-form-field.mat-focused.mat-accent .mat-select-arrow{color:#3ddf7e}.color-scheme-light .mat-form-field.mat-focused.mat-warn .mat-select-arrow,.color-scheme-light .mat-form-field .mat-select.mat-select-invalid .mat-select-arrow{color:#f44336}.color-scheme-light .mat-form-field .mat-select.mat-select-disabled .mat-select-arrow{color:rgba(0,0,0,.38)}.color-scheme-light .mat-drawer-container{background-color:#fafafa;color:rgba(0,0,0,.87)}.color-scheme-light .mat-drawer{background-color:#fff;color:rgba(0,0,0,.87)}.color-scheme-light .mat-drawer.mat-drawer-push{background-color:#fff}.color-scheme-light .mat-drawer:not(.mat-drawer-side){box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.color-scheme-light .mat-drawer-side{border-right:1px solid rgba(0,0,0,.12)}.color-scheme-light .mat-drawer-side.mat-drawer-end,.color-scheme-light [dir=rtl] .mat-drawer-side{border-left:1px solid rgba(0,0,0,.12);border-right:none}.color-scheme-light [dir=rtl] .mat-drawer-side.mat-drawer-end{border-left:none;border-right:1px solid rgba(0,0,0,.12)}.color-scheme-light .mat-drawer-backdrop.mat-drawer-shown{background-color:rgba(0,0,0,.6)}.color-scheme-light .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb{background-color:#3ddf7e}.color-scheme-light .mat-slide-toggle.mat-checked .mat-slide-toggle-bar{background-color:rgba(61,223,126,.54)}.color-scheme-light .mat-slide-toggle.mat-checked .mat-ripple-element{background-color:#3ddf7e}.color-scheme-light .mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb{background-color:#4b6fff}.color-scheme-light .mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar{background-color:rgba(75,111,255,.54)}.color-scheme-light .mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element{background-color:#4b6fff}.color-scheme-light .mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb{background-color:#f44336}.color-scheme-light .mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar{background-color:rgba(244,67,54,.54)}.color-scheme-light .mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element{background-color:#f44336}.color-scheme-light .mat-slide-toggle:not(.mat-checked) .mat-ripple-element{background-color:#000}.color-scheme-light .mat-slide-toggle-thumb{box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12);background-color:#fafafa}.color-scheme-light .mat-slide-toggle-bar{background-color:rgba(0,0,0,.38)}.color-scheme-light .mat-slider-track-background{background-color:rgba(0,0,0,.26)}.color-scheme-light .mat-primary .mat-slider-thumb,.color-scheme-light .mat-primary .mat-slider-thumb-label,.color-scheme-light .mat-primary .mat-slider-track-fill{background-color:#4b6fff}.color-scheme-light .mat-primary .mat-slider-thumb-label-text{color:#fff}.color-scheme-light .mat-primary .mat-slider-focus-ring{background-color:rgba(75,111,255,.2)}.color-scheme-light .mat-accent .mat-slider-thumb,.color-scheme-light .mat-accent .mat-slider-thumb-label,.color-scheme-light .mat-accent .mat-slider-track-fill{background-color:#3ddf7e}.color-scheme-light .mat-accent .mat-slider-thumb-label-text{color:#fff}.color-scheme-light .mat-accent .mat-slider-focus-ring{background-color:rgba(61,223,126,.2)}.color-scheme-light .mat-warn .mat-slider-thumb,.color-scheme-light .mat-warn .mat-slider-thumb-label,.color-scheme-light .mat-warn .mat-slider-track-fill{background-color:#f44336}.color-scheme-light .mat-warn .mat-slider-thumb-label-text{color:#fff}.color-scheme-light .mat-warn .mat-slider-focus-ring{background-color:rgba(244,67,54,.2)}.color-scheme-light .cdk-focused .mat-slider-track-background,.color-scheme-light .mat-slider:hover .mat-slider-track-background{background-color:rgba(0,0,0,.38)}.color-scheme-light .mat-slider-disabled .mat-slider-thumb,.color-scheme-light .mat-slider-disabled .mat-slider-track-background,.color-scheme-light .mat-slider-disabled .mat-slider-track-fill,.color-scheme-light .mat-slider-disabled:hover .mat-slider-track-background{background-color:rgba(0,0,0,.26)}.color-scheme-light .mat-slider-min-value .mat-slider-focus-ring{background-color:rgba(0,0,0,.12)}.color-scheme-light .mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,.color-scheme-light .mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label{background-color:rgba(0,0,0,.87)}.color-scheme-light .mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,.color-scheme-light .mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label{background-color:rgba(0,0,0,.26)}.color-scheme-light .mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb{border-color:rgba(0,0,0,.26);background-color:initial}.color-scheme-light .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb,.color-scheme-light .mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb{border-color:rgba(0,0,0,.38)}.color-scheme-light .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb,.color-scheme-light .mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb{border-color:rgba(0,0,0,.26)}.color-scheme-light .mat-slider-has-ticks .mat-slider-wrapper:after{border-color:rgba(0,0,0,.7)}.color-scheme-light .mat-slider-horizontal .mat-slider-ticks{background-image:repeating-linear-gradient(90deg,rgba(0,0,0,.7),rgba(0,0,0,.7) 2px,transparent 0,transparent);background-image:-moz-repeating-linear-gradient(.0001deg,rgba(0,0,0,.7),rgba(0,0,0,.7) 2px,transparent 0,transparent)}.color-scheme-light .mat-slider-vertical .mat-slider-ticks{background-image:repeating-linear-gradient(180deg,rgba(0,0,0,.7),rgba(0,0,0,.7) 2px,transparent 0,transparent)}.color-scheme-light .mat-step-header.cdk-keyboard-focused,.color-scheme-light .mat-step-header.cdk-program-focused,.color-scheme-light .mat-step-header:hover{background-color:rgba(0,0,0,.04)}@media (hover:none){.color-scheme-light .mat-step-header:hover{background:none}}.color-scheme-light .mat-step-header .mat-step-label,.color-scheme-light .mat-step-header .mat-step-optional{color:rgba(0,0,0,.54)}.color-scheme-light .mat-step-header .mat-step-icon{background-color:rgba(0,0,0,.54);color:#fff}.color-scheme-light .mat-step-header .mat-step-icon-selected,.color-scheme-light .mat-step-header .mat-step-icon-state-done,.color-scheme-light .mat-step-header .mat-step-icon-state-edit{background-color:#4b6fff;color:#fff}.color-scheme-light .mat-step-header.mat-accent .mat-step-icon{color:#fff}.color-scheme-light .mat-step-header.mat-accent .mat-step-icon-selected,.color-scheme-light .mat-step-header.mat-accent .mat-step-icon-state-done,.color-scheme-light .mat-step-header.mat-accent .mat-step-icon-state-edit{background-color:#3ddf7e;color:#fff}.color-scheme-light .mat-step-header.mat-warn .mat-step-icon{color:#fff}.color-scheme-light .mat-step-header.mat-warn .mat-step-icon-selected,.color-scheme-light .mat-step-header.mat-warn .mat-step-icon-state-done,.color-scheme-light .mat-step-header.mat-warn .mat-step-icon-state-edit{background-color:#f44336;color:#fff}.color-scheme-light .mat-step-header .mat-step-icon-state-error{background-color:initial;color:#f44336}.color-scheme-light .mat-step-header .mat-step-label.mat-step-label-active{color:rgba(0,0,0,.87)}.color-scheme-light .mat-step-header .mat-step-label.mat-step-label-error{color:#f44336}.color-scheme-light .mat-stepper-horizontal,.color-scheme-light .mat-stepper-vertical{background-color:#fff}.color-scheme-light .mat-stepper-vertical-line:before{border-left-color:rgba(0,0,0,.12)}.color-scheme-light .mat-horizontal-stepper-header:after,.color-scheme-light .mat-horizontal-stepper-header:before,.color-scheme-light .mat-stepper-horizontal-line{border-top-color:rgba(0,0,0,.12)}.color-scheme-light .mat-horizontal-stepper-header{height:72px}.color-scheme-light .mat-stepper-label-position-bottom .mat-horizontal-stepper-header,.color-scheme-light .mat-vertical-stepper-header{padding:24px}.color-scheme-light .mat-stepper-vertical-line:before{top:-16px;bottom:-16px}.color-scheme-light .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:after,.color-scheme-light .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:before,.color-scheme-light .mat-stepper-label-position-bottom .mat-stepper-horizontal-line{top:36px}.color-scheme-light .mat-sort-header-arrow{color:#757575}.color-scheme-light .mat-tab-header,.color-scheme-light .mat-tab-nav-bar{border-bottom:1px solid rgba(0,0,0,.12)}.color-scheme-light .mat-tab-group-inverted-header .mat-tab-header,.color-scheme-light .mat-tab-group-inverted-header .mat-tab-nav-bar{border-top:1px solid rgba(0,0,0,.12);border-bottom:none}.color-scheme-light .mat-tab-label,.color-scheme-light .mat-tab-link{color:rgba(0,0,0,.87)}.color-scheme-light .mat-tab-label.mat-tab-disabled,.color-scheme-light .mat-tab-link.mat-tab-disabled{color:rgba(0,0,0,.38)}.color-scheme-light .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.87)}.color-scheme-light .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.38)}.color-scheme-light .mat-tab-group[class*=mat-background-] .mat-tab-header,.color-scheme-light .mat-tab-nav-bar[class*=mat-background-]{border-bottom:none;border-top:none}.color-scheme-light .mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(201,212,255,.3)}.color-scheme-light .mat-tab-group.mat-primary .mat-ink-bar,.color-scheme-light .mat-tab-nav-bar.mat-primary .mat-ink-bar{background-color:#4b6fff}.color-scheme-light .mat-tab-group.mat-primary.mat-background-primary>.mat-tab-header .mat-ink-bar,.color-scheme-light .mat-tab-group.mat-primary.mat-background-primary>.mat-tab-link-container .mat-ink-bar,.color-scheme-light .mat-tab-nav-bar.mat-primary.mat-background-primary>.mat-tab-header .mat-ink-bar,.color-scheme-light .mat-tab-nav-bar.mat-primary.mat-background-primary>.mat-tab-link-container .mat-ink-bar{background-color:#fff}.color-scheme-light .mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(197,245,216,.3)}.color-scheme-light .mat-tab-group.mat-accent .mat-ink-bar,.color-scheme-light .mat-tab-nav-bar.mat-accent .mat-ink-bar{background-color:#3ddf7e}.color-scheme-light .mat-tab-group.mat-accent.mat-background-accent>.mat-tab-header .mat-ink-bar,.color-scheme-light .mat-tab-group.mat-accent.mat-background-accent>.mat-tab-link-container .mat-ink-bar,.color-scheme-light .mat-tab-nav-bar.mat-accent.mat-background-accent>.mat-tab-header .mat-ink-bar,.color-scheme-light .mat-tab-nav-bar.mat-accent.mat-background-accent>.mat-tab-link-container .mat-ink-bar{background-color:#fff}.color-scheme-light .mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,205,210,.3)}.color-scheme-light .mat-tab-group.mat-warn .mat-ink-bar,.color-scheme-light .mat-tab-nav-bar.mat-warn .mat-ink-bar{background-color:#f44336}.color-scheme-light .mat-tab-group.mat-warn.mat-background-warn>.mat-tab-header .mat-ink-bar,.color-scheme-light .mat-tab-group.mat-warn.mat-background-warn>.mat-tab-link-container .mat-ink-bar,.color-scheme-light .mat-tab-nav-bar.mat-warn.mat-background-warn>.mat-tab-header .mat-ink-bar,.color-scheme-light .mat-tab-nav-bar.mat-warn.mat-background-warn>.mat-tab-link-container .mat-ink-bar{background-color:#fff}.color-scheme-light .mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(201,212,255,.3)}.color-scheme-light .mat-tab-group.mat-background-primary>.mat-tab-header,.color-scheme-light .mat-tab-group.mat-background-primary>.mat-tab-header-pagination,.color-scheme-light .mat-tab-group.mat-background-primary>.mat-tab-link-container,.color-scheme-light .mat-tab-nav-bar.mat-background-primary>.mat-tab-header,.color-scheme-light .mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination,.color-scheme-light .mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container{background-color:#4b6fff}.color-scheme-light .mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-label,.color-scheme-light .mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-tab-link,.color-scheme-light .mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-label,.color-scheme-light .mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-tab-link{color:#fff}.color-scheme-light .mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-label.mat-tab-disabled,.color-scheme-light .mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.color-scheme-light .mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-label.mat-tab-disabled,.color-scheme-light .mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:hsla(0,0%,100%,.4)}.color-scheme-light .mat-tab-group.mat-background-primary>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.color-scheme-light .mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination .mat-tab-header-pagination-chevron{border-color:#fff}.color-scheme-light .mat-tab-group.mat-background-primary>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.color-scheme-light .mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:hsla(0,0%,100%,.4)}.color-scheme-light .mat-tab-group.mat-background-primary>.mat-tab-header .mat-ripple-element,.color-scheme-light .mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-ripple-element,.color-scheme-light .mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-ripple-element,.color-scheme-light .mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-ripple-element{background-color:hsla(0,0%,100%,.12)}.color-scheme-light .mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(197,245,216,.3)}.color-scheme-light .mat-tab-group.mat-background-accent>.mat-tab-header,.color-scheme-light .mat-tab-group.mat-background-accent>.mat-tab-header-pagination,.color-scheme-light .mat-tab-group.mat-background-accent>.mat-tab-link-container,.color-scheme-light .mat-tab-nav-bar.mat-background-accent>.mat-tab-header,.color-scheme-light .mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination,.color-scheme-light .mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container{background-color:#3ddf7e}.color-scheme-light .mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-label,.color-scheme-light .mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-tab-link,.color-scheme-light .mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-label,.color-scheme-light .mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-tab-link{color:#fff}.color-scheme-light .mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-label.mat-tab-disabled,.color-scheme-light .mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.color-scheme-light .mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-label.mat-tab-disabled,.color-scheme-light .mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:hsla(0,0%,100%,.4)}.color-scheme-light .mat-tab-group.mat-background-accent>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.color-scheme-light .mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination .mat-tab-header-pagination-chevron{border-color:#fff}.color-scheme-light .mat-tab-group.mat-background-accent>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.color-scheme-light .mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:hsla(0,0%,100%,.4)}.color-scheme-light .mat-tab-group.mat-background-accent>.mat-tab-header .mat-ripple-element,.color-scheme-light .mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-ripple-element,.color-scheme-light .mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-ripple-element,.color-scheme-light .mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-ripple-element{background-color:hsla(0,0%,100%,.12)}.color-scheme-light .mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-light .mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,205,210,.3)}.color-scheme-light .mat-tab-group.mat-background-warn>.mat-tab-header,.color-scheme-light .mat-tab-group.mat-background-warn>.mat-tab-header-pagination,.color-scheme-light .mat-tab-group.mat-background-warn>.mat-tab-link-container,.color-scheme-light .mat-tab-nav-bar.mat-background-warn>.mat-tab-header,.color-scheme-light .mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination,.color-scheme-light .mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container{background-color:#f44336}.color-scheme-light .mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-label,.color-scheme-light .mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-tab-link,.color-scheme-light .mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-label,.color-scheme-light .mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-tab-link{color:#fff}.color-scheme-light .mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-label.mat-tab-disabled,.color-scheme-light .mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.color-scheme-light .mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-label.mat-tab-disabled,.color-scheme-light .mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:hsla(0,0%,100%,.4)}.color-scheme-light .mat-tab-group.mat-background-warn>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.color-scheme-light .mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination .mat-tab-header-pagination-chevron{border-color:#fff}.color-scheme-light .mat-tab-group.mat-background-warn>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.color-scheme-light .mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:hsla(0,0%,100%,.4)}.color-scheme-light .mat-tab-group.mat-background-warn>.mat-tab-header .mat-ripple-element,.color-scheme-light .mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-ripple-element,.color-scheme-light .mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-ripple-element,.color-scheme-light .mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-ripple-element{background-color:hsla(0,0%,100%,.12)}.color-scheme-light .mat-toolbar{background:#f5f5f5;color:rgba(0,0,0,.87)}.color-scheme-light .mat-toolbar.mat-primary{background:#4b6fff;color:#fff}.color-scheme-light .mat-toolbar.mat-accent{background:#3ddf7e;color:#fff}.color-scheme-light .mat-toolbar.mat-warn{background:#f44336;color:#fff}.color-scheme-light .mat-toolbar .mat-focused .mat-form-field-ripple,.color-scheme-light .mat-toolbar .mat-form-field-ripple,.color-scheme-light .mat-toolbar .mat-form-field-underline{background-color:currentColor}.color-scheme-light .mat-toolbar .mat-focused .mat-form-field-label,.color-scheme-light .mat-toolbar .mat-form-field-label,.color-scheme-light .mat-toolbar .mat-form-field.mat-focused .mat-select-arrow,.color-scheme-light .mat-toolbar .mat-select-arrow,.color-scheme-light .mat-toolbar .mat-select-value{color:inherit}.color-scheme-light .mat-toolbar .mat-input-element{caret-color:currentColor}.color-scheme-light .mat-toolbar-multiple-rows{min-height:64px}.color-scheme-light .mat-toolbar-row,.color-scheme-light .mat-toolbar-single-row{height:64px}@media (max-width:599px){.color-scheme-light .mat-toolbar-multiple-rows{min-height:56px}.color-scheme-light .mat-toolbar-row,.color-scheme-light .mat-toolbar-single-row{height:56px}}.color-scheme-light .mat-tooltip{background:rgba(97,97,97,.9)}.color-scheme-light .mat-tree{background:#fff}.color-scheme-light .mat-nested-tree-node,.color-scheme-light .mat-tree-node{color:rgba(0,0,0,.87)}.color-scheme-light .mat-tree-node{min-height:48px}.color-scheme-light .mat-snack-bar-container{color:hsla(0,0%,100%,.7);background:#323232;box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.color-scheme-light .mat-simple-snackbar-action{color:#3ddf7e}.color-scheme-light .card-wrapper{color:#d0d0d0}.color-scheme-light .config-list{background-color:#fff}.color-scheme-light .color-dark{color:#333!important}.color-scheme-light .color-light{color:#f5f5f5!important}.color-scheme-light .color-text-primary{color:#000}.color-scheme-light .color-gray{color:#7a7a7a}.color-scheme-light .bg-primary{background:#4b6fff!important}.color-scheme-light .bg-accent{background:#3ddf7e!important}.color-scheme-light .route-active{color:#4b6fff}.color-scheme-light .table-header{background:#4b6fff;color:#fff}.color-scheme-light .first-col-header,.color-scheme-light .second-col-header{border-bottom:1px solid #fff;font-weight:500}.color-scheme-light .second-col-header{border-left:1px solid #fff}.color-scheme-light .first-col{border-bottom:1px solid #4b6fff;font-weight:500}.color-scheme-light .second-col{border-bottom:1px solid #4b6fff;border-left:1px solid #4b6fff}.color-scheme-light .table-container>:last-child .first-col{border:unset!important}.color-scheme-light .table-container>:last-child .second-col{border:unset!important;border-left:1px solid #4b6fff!important}.color-scheme-light .progress-bar,.color-scheme-light .progress-bar-filled{background-color:#f5f5f5;height:60px;border-radius:3px;box-shadow:inset 0 1px 3px rgba(0,0,0,.2)}.color-scheme-light .progress-bar-filled .progress-bar-fill,.color-scheme-light .progress-bar .progress-bar-fill{display:block;height:100%;width:100%;color:#000;text-align:center;background-color:#3ddf7e!important}.color-scheme-light .progress-bar{width:100%}.color-scheme-light .progress-bar .progress-bar-fill{background-color:#3ddf7e!important;border-radius:3px;transition:width .5s ease-in-out}.color-scheme-light .menu-list-item--active,.color-scheme-light a:not(.mat-button):not(.mat-raised-button):not(.mat-icon-button):not(.mat-list-item):active,.color-scheme-light a:not(.mat-button):not(.mat-raised-button):not(.mat-icon-button):not(.mat-list-item):hover{color:#4b6fff!important}.color-scheme-light .actionable{cursor:pointer}.color-scheme-light .actionable:hover:not(:disabled){color:#3ddf7e!important}.color-scheme-light .actionable-warn{cursor:pointer}.color-scheme-light .actionable-warn:hover:not(:disabled){color:#f44336!important}.color-scheme-light .ngx-pagination a,.color-scheme-light .ngx-pagination button{color:#000!important}.color-scheme-dark .mat-ripple-element{background-color:hsla(0,0%,100%,.1)}.color-scheme-dark .mat-option{color:#fff}.color-scheme-dark .mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled),.color-scheme-dark .mat-option:focus:not(.mat-option-disabled),.color-scheme-dark .mat-option:hover:not(.mat-option-disabled){background:hsla(0,0%,100%,.04)}.color-scheme-dark .mat-option.mat-active{background:hsla(0,0%,100%,.04);color:#fff}.color-scheme-dark .mat-option.mat-option-disabled{color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-primary .mat-option.mat-selected:not(.mat-option-disabled){color:#4b6fff}.color-scheme-dark .mat-accent .mat-option.mat-selected:not(.mat-option-disabled){color:#3ddf7e}.color-scheme-dark .mat-warn .mat-option.mat-selected:not(.mat-option-disabled){color:#f44336}.color-scheme-dark .mat-optgroup-label{color:hsla(0,0%,100%,.7)}.color-scheme-dark .mat-optgroup-disabled .mat-optgroup-label{color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-pseudo-checkbox{color:hsla(0,0%,100%,.7)}.color-scheme-dark .mat-pseudo-checkbox:after{color:#303030}.color-scheme-dark .mat-pseudo-checkbox-disabled{color:#686868}.color-scheme-dark .mat-primary .mat-pseudo-checkbox-checked,.color-scheme-dark .mat-primary .mat-pseudo-checkbox-indeterminate{background:#4b6fff}.color-scheme-dark .mat-accent .mat-pseudo-checkbox-checked,.color-scheme-dark .mat-accent .mat-pseudo-checkbox-indeterminate,.color-scheme-dark .mat-pseudo-checkbox-checked,.color-scheme-dark .mat-pseudo-checkbox-indeterminate{background:#3ddf7e}.color-scheme-dark .mat-warn .mat-pseudo-checkbox-checked,.color-scheme-dark .mat-warn .mat-pseudo-checkbox-indeterminate{background:#f44336}.color-scheme-dark .mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,.color-scheme-dark .mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled{background:#686868}.color-scheme-dark.mat-app-background,.color-scheme-dark .mat-app-background{background-color:#303030;color:#fff}.color-scheme-dark .mat-elevation-z0{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z1{box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z2{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z3{box-shadow:0 3px 3px -2px rgba(0,0,0,.2),0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z4{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z5{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 5px 8px 0 rgba(0,0,0,.14),0 1px 14px 0 rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z6{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z7{box-shadow:0 4px 5px -2px rgba(0,0,0,.2),0 7px 10px 1px rgba(0,0,0,.14),0 2px 16px 1px rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z8{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z9{box-shadow:0 5px 6px -3px rgba(0,0,0,.2),0 9px 12px 1px rgba(0,0,0,.14),0 3px 16px 2px rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z10{box-shadow:0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z11{box-shadow:0 6px 7px -4px rgba(0,0,0,.2),0 11px 15px 1px rgba(0,0,0,.14),0 4px 20px 3px rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z12{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z13{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 13px 19px 2px rgba(0,0,0,.14),0 5px 24px 4px rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z14{box-shadow:0 7px 9px -4px rgba(0,0,0,.2),0 14px 21px 2px rgba(0,0,0,.14),0 5px 26px 4px rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z15{box-shadow:0 8px 9px -5px rgba(0,0,0,.2),0 15px 22px 2px rgba(0,0,0,.14),0 6px 28px 5px rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z16{box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z17{box-shadow:0 8px 11px -5px rgba(0,0,0,.2),0 17px 26px 2px rgba(0,0,0,.14),0 6px 32px 5px rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z18{box-shadow:0 9px 11px -5px rgba(0,0,0,.2),0 18px 28px 2px rgba(0,0,0,.14),0 7px 34px 6px rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z19{box-shadow:0 9px 12px -6px rgba(0,0,0,.2),0 19px 29px 2px rgba(0,0,0,.14),0 7px 36px 6px rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z20{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 20px 31px 3px rgba(0,0,0,.14),0 8px 38px 7px rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z21{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 21px 33px 3px rgba(0,0,0,.14),0 8px 40px 7px rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z22{box-shadow:0 10px 14px -6px rgba(0,0,0,.2),0 22px 35px 3px rgba(0,0,0,.14),0 8px 42px 7px rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z23{box-shadow:0 11px 14px -7px rgba(0,0,0,.2),0 23px 36px 3px rgba(0,0,0,.14),0 9px 44px 8px rgba(0,0,0,.12)}.color-scheme-dark .mat-elevation-z24{box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12)}.mat-theme-loaded-marker{display:none}.color-scheme-dark .mat-autocomplete-panel{background:#424242;color:#fff}.color-scheme-dark .mat-autocomplete-panel:not([class*=mat-elevation-z]){box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.color-scheme-dark .mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover){background:#424242}.color-scheme-dark .mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled){color:#fff}.color-scheme-dark .mat-badge-content{color:#fff;background:#4b6fff}.cdk-high-contrast-active .color-scheme-dark .mat-badge-content{outline:1px solid;border-radius:0}.color-scheme-dark .mat-badge-accent .mat-badge-content{background:#3ddf7e;color:#fff}.color-scheme-dark .mat-badge-warn .mat-badge-content{color:#fff;background:#f44336}.color-scheme-dark .mat-badge{position:relative}.color-scheme-dark .mat-badge-hidden .mat-badge-content{display:none}.color-scheme-dark .mat-badge-disabled .mat-badge-content{background:#6e6e6e;color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-badge-content{position:absolute;text-align:center;display:inline-block;border-radius:50%;transition:transform .2s ease-in-out;transform:scale(.6);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.color-scheme-dark .mat-badge-content._mat-animation-noopable,.color-scheme-dark .ng-animate-disabled .mat-badge-content{transition:none}.color-scheme-dark .mat-badge-content.mat-badge-active{transform:none}.color-scheme-dark .mat-badge-small .mat-badge-content{width:16px;height:16px;line-height:16px}.color-scheme-dark .mat-badge-small.mat-badge-above .mat-badge-content{top:-8px}.color-scheme-dark .mat-badge-small.mat-badge-below .mat-badge-content{bottom:-8px}.color-scheme-dark .mat-badge-small.mat-badge-before .mat-badge-content{left:-16px}[dir=rtl] .color-scheme-dark .mat-badge-small.mat-badge-before .mat-badge-content{left:auto;right:-16px}.color-scheme-dark .mat-badge-small.mat-badge-after .mat-badge-content{right:-16px}[dir=rtl] .color-scheme-dark .mat-badge-small.mat-badge-after .mat-badge-content{right:auto;left:-16px}.color-scheme-dark .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-8px}[dir=rtl] .color-scheme-dark .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-8px}.color-scheme-dark .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-8px}[dir=rtl] .color-scheme-dark .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-8px}.color-scheme-dark .mat-badge-medium .mat-badge-content{width:22px;height:22px;line-height:22px}.color-scheme-dark .mat-badge-medium.mat-badge-above .mat-badge-content{top:-11px}.color-scheme-dark .mat-badge-medium.mat-badge-below .mat-badge-content{bottom:-11px}.color-scheme-dark .mat-badge-medium.mat-badge-before .mat-badge-content{left:-22px}[dir=rtl] .color-scheme-dark .mat-badge-medium.mat-badge-before .mat-badge-content{left:auto;right:-22px}.color-scheme-dark .mat-badge-medium.mat-badge-after .mat-badge-content{right:-22px}[dir=rtl] .color-scheme-dark .mat-badge-medium.mat-badge-after .mat-badge-content{right:auto;left:-22px}.color-scheme-dark .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-11px}[dir=rtl] .color-scheme-dark .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-11px}.color-scheme-dark .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-11px}[dir=rtl] .color-scheme-dark .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-11px}.color-scheme-dark .mat-badge-large .mat-badge-content{width:28px;height:28px;line-height:28px}.color-scheme-dark .mat-badge-large.mat-badge-above .mat-badge-content{top:-14px}.color-scheme-dark .mat-badge-large.mat-badge-below .mat-badge-content{bottom:-14px}.color-scheme-dark .mat-badge-large.mat-badge-before .mat-badge-content{left:-28px}[dir=rtl] .color-scheme-dark .mat-badge-large.mat-badge-before .mat-badge-content{left:auto;right:-28px}.color-scheme-dark .mat-badge-large.mat-badge-after .mat-badge-content{right:-28px}[dir=rtl] .color-scheme-dark .mat-badge-large.mat-badge-after .mat-badge-content{right:auto;left:-28px}.color-scheme-dark .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-14px}[dir=rtl] .color-scheme-dark .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-14px}.color-scheme-dark .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-14px}[dir=rtl] .color-scheme-dark .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-14px}.color-scheme-dark .mat-bottom-sheet-container{box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);background:#424242;color:#fff}.color-scheme-dark .mat-button,.color-scheme-dark .mat-icon-button,.color-scheme-dark .mat-stroked-button{color:inherit;background:transparent}.color-scheme-dark .mat-button.mat-primary,.color-scheme-dark .mat-icon-button.mat-primary,.color-scheme-dark .mat-stroked-button.mat-primary{color:#4b6fff}.color-scheme-dark .mat-button.mat-accent,.color-scheme-dark .mat-icon-button.mat-accent,.color-scheme-dark .mat-stroked-button.mat-accent{color:#3ddf7e}.color-scheme-dark .mat-button.mat-warn,.color-scheme-dark .mat-icon-button.mat-warn,.color-scheme-dark .mat-stroked-button.mat-warn{color:#f44336}.color-scheme-dark .mat-button.mat-accent.mat-button-disabled,.color-scheme-dark .mat-button.mat-button-disabled.mat-button-disabled,.color-scheme-dark .mat-button.mat-primary.mat-button-disabled,.color-scheme-dark .mat-button.mat-warn.mat-button-disabled,.color-scheme-dark .mat-icon-button.mat-accent.mat-button-disabled,.color-scheme-dark .mat-icon-button.mat-button-disabled.mat-button-disabled,.color-scheme-dark .mat-icon-button.mat-primary.mat-button-disabled,.color-scheme-dark .mat-icon-button.mat-warn.mat-button-disabled,.color-scheme-dark .mat-stroked-button.mat-accent.mat-button-disabled,.color-scheme-dark .mat-stroked-button.mat-button-disabled.mat-button-disabled,.color-scheme-dark .mat-stroked-button.mat-primary.mat-button-disabled,.color-scheme-dark .mat-stroked-button.mat-warn.mat-button-disabled{color:hsla(0,0%,100%,.3)}.color-scheme-dark .mat-button.mat-primary .mat-button-focus-overlay,.color-scheme-dark .mat-icon-button.mat-primary .mat-button-focus-overlay,.color-scheme-dark .mat-stroked-button.mat-primary .mat-button-focus-overlay{background-color:#4b6fff}.color-scheme-dark .mat-button.mat-accent .mat-button-focus-overlay,.color-scheme-dark .mat-icon-button.mat-accent .mat-button-focus-overlay,.color-scheme-dark .mat-stroked-button.mat-accent .mat-button-focus-overlay{background-color:#3ddf7e}.color-scheme-dark .mat-button.mat-warn .mat-button-focus-overlay,.color-scheme-dark .mat-icon-button.mat-warn .mat-button-focus-overlay,.color-scheme-dark .mat-stroked-button.mat-warn .mat-button-focus-overlay{background-color:#f44336}.color-scheme-dark .mat-button.mat-button-disabled .mat-button-focus-overlay,.color-scheme-dark .mat-icon-button.mat-button-disabled .mat-button-focus-overlay,.color-scheme-dark .mat-stroked-button.mat-button-disabled .mat-button-focus-overlay{background-color:initial}.color-scheme-dark .mat-button .mat-ripple-element,.color-scheme-dark .mat-icon-button .mat-ripple-element,.color-scheme-dark .mat-stroked-button .mat-ripple-element{opacity:.1;background-color:currentColor}.color-scheme-dark .mat-button-focus-overlay{background:#fff}.color-scheme-dark .mat-stroked-button:not(.mat-button-disabled){border-color:hsla(0,0%,100%,.12)}.color-scheme-dark .mat-fab,.color-scheme-dark .mat-flat-button,.color-scheme-dark .mat-mini-fab,.color-scheme-dark .mat-raised-button{color:#fff;background-color:#424242}.color-scheme-dark .mat-fab.mat-accent,.color-scheme-dark .mat-fab.mat-primary,.color-scheme-dark .mat-fab.mat-warn,.color-scheme-dark .mat-flat-button.mat-accent,.color-scheme-dark .mat-flat-button.mat-primary,.color-scheme-dark .mat-flat-button.mat-warn,.color-scheme-dark .mat-mini-fab.mat-accent,.color-scheme-dark .mat-mini-fab.mat-primary,.color-scheme-dark .mat-mini-fab.mat-warn,.color-scheme-dark .mat-raised-button.mat-accent,.color-scheme-dark .mat-raised-button.mat-primary,.color-scheme-dark .mat-raised-button.mat-warn{color:#fff}.color-scheme-dark .mat-fab.mat-accent.mat-button-disabled,.color-scheme-dark .mat-fab.mat-button-disabled.mat-button-disabled,.color-scheme-dark .mat-fab.mat-primary.mat-button-disabled,.color-scheme-dark .mat-fab.mat-warn.mat-button-disabled,.color-scheme-dark .mat-flat-button.mat-accent.mat-button-disabled,.color-scheme-dark .mat-flat-button.mat-button-disabled.mat-button-disabled,.color-scheme-dark .mat-flat-button.mat-primary.mat-button-disabled,.color-scheme-dark .mat-flat-button.mat-warn.mat-button-disabled,.color-scheme-dark .mat-mini-fab.mat-accent.mat-button-disabled,.color-scheme-dark .mat-mini-fab.mat-button-disabled.mat-button-disabled,.color-scheme-dark .mat-mini-fab.mat-primary.mat-button-disabled,.color-scheme-dark .mat-mini-fab.mat-warn.mat-button-disabled,.color-scheme-dark .mat-raised-button.mat-accent.mat-button-disabled,.color-scheme-dark .mat-raised-button.mat-button-disabled.mat-button-disabled,.color-scheme-dark .mat-raised-button.mat-primary.mat-button-disabled,.color-scheme-dark .mat-raised-button.mat-warn.mat-button-disabled{color:hsla(0,0%,100%,.3)}.color-scheme-dark .mat-fab.mat-primary,.color-scheme-dark .mat-flat-button.mat-primary,.color-scheme-dark .mat-mini-fab.mat-primary,.color-scheme-dark .mat-raised-button.mat-primary{background-color:#4b6fff}.color-scheme-dark .mat-fab.mat-accent,.color-scheme-dark .mat-flat-button.mat-accent,.color-scheme-dark .mat-mini-fab.mat-accent,.color-scheme-dark .mat-raised-button.mat-accent{background-color:#3ddf7e}.color-scheme-dark .mat-fab.mat-warn,.color-scheme-dark .mat-flat-button.mat-warn,.color-scheme-dark .mat-mini-fab.mat-warn,.color-scheme-dark .mat-raised-button.mat-warn{background-color:#f44336}.color-scheme-dark .mat-fab.mat-accent.mat-button-disabled,.color-scheme-dark .mat-fab.mat-button-disabled.mat-button-disabled,.color-scheme-dark .mat-fab.mat-primary.mat-button-disabled,.color-scheme-dark .mat-fab.mat-warn.mat-button-disabled,.color-scheme-dark .mat-flat-button.mat-accent.mat-button-disabled,.color-scheme-dark .mat-flat-button.mat-button-disabled.mat-button-disabled,.color-scheme-dark .mat-flat-button.mat-primary.mat-button-disabled,.color-scheme-dark .mat-flat-button.mat-warn.mat-button-disabled,.color-scheme-dark .mat-mini-fab.mat-accent.mat-button-disabled,.color-scheme-dark .mat-mini-fab.mat-button-disabled.mat-button-disabled,.color-scheme-dark .mat-mini-fab.mat-primary.mat-button-disabled,.color-scheme-dark .mat-mini-fab.mat-warn.mat-button-disabled,.color-scheme-dark .mat-raised-button.mat-accent.mat-button-disabled,.color-scheme-dark .mat-raised-button.mat-button-disabled.mat-button-disabled,.color-scheme-dark .mat-raised-button.mat-primary.mat-button-disabled,.color-scheme-dark .mat-raised-button.mat-warn.mat-button-disabled{background-color:hsla(0,0%,100%,.12)}.color-scheme-dark .mat-fab.mat-accent .mat-ripple-element,.color-scheme-dark .mat-fab.mat-primary .mat-ripple-element,.color-scheme-dark .mat-fab.mat-warn .mat-ripple-element,.color-scheme-dark .mat-flat-button.mat-accent .mat-ripple-element,.color-scheme-dark .mat-flat-button.mat-primary .mat-ripple-element,.color-scheme-dark .mat-flat-button.mat-warn .mat-ripple-element,.color-scheme-dark .mat-mini-fab.mat-accent .mat-ripple-element,.color-scheme-dark .mat-mini-fab.mat-primary .mat-ripple-element,.color-scheme-dark .mat-mini-fab.mat-warn .mat-ripple-element,.color-scheme-dark .mat-raised-button.mat-accent .mat-ripple-element,.color-scheme-dark .mat-raised-button.mat-primary .mat-ripple-element,.color-scheme-dark .mat-raised-button.mat-warn .mat-ripple-element{background-color:hsla(0,0%,100%,.1)}.color-scheme-dark .mat-flat-button:not([class*=mat-elevation-z]),.color-scheme-dark .mat-stroked-button:not([class*=mat-elevation-z]){box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.color-scheme-dark .mat-raised-button:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.color-scheme-dark .mat-raised-button:not(.mat-button-disabled):active:not([class*=mat-elevation-z]){box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.color-scheme-dark .mat-raised-button.mat-button-disabled:not([class*=mat-elevation-z]){box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.color-scheme-dark .mat-fab:not([class*=mat-elevation-z]),.color-scheme-dark .mat-mini-fab:not([class*=mat-elevation-z]){box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.color-scheme-dark .mat-fab:not(.mat-button-disabled):active:not([class*=mat-elevation-z]),.color-scheme-dark .mat-mini-fab:not(.mat-button-disabled):active:not([class*=mat-elevation-z]){box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.color-scheme-dark .mat-fab.mat-button-disabled:not([class*=mat-elevation-z]),.color-scheme-dark .mat-mini-fab.mat-button-disabled:not([class*=mat-elevation-z]){box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.color-scheme-dark .mat-button-toggle-group,.color-scheme-dark .mat-button-toggle-standalone{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.color-scheme-dark .mat-button-toggle-group-appearance-standard,.color-scheme-dark .mat-button-toggle-standalone.mat-button-toggle-appearance-standard{box-shadow:none}.color-scheme-dark .mat-button-toggle{color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-button-toggle .mat-button-toggle-focus-overlay{background-color:hsla(0,0%,100%,.12)}.color-scheme-dark .mat-button-toggle-appearance-standard{color:#fff;background:#424242}.color-scheme-dark .mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{background-color:#fff}.color-scheme-dark .mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:1px solid hsla(0,0%,100%,.12)}.color-scheme-dark [dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:none;border-right:1px solid hsla(0,0%,100%,.12)}.color-scheme-dark .mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle+.mat-button-toggle{border-left:none;border-right:none;border-top:1px solid hsla(0,0%,100%,.12)}.color-scheme-dark .mat-button-toggle-checked{background-color:#212121;color:hsla(0,0%,100%,.7)}.color-scheme-dark .mat-button-toggle-checked.mat-button-toggle-appearance-standard{color:#fff}.color-scheme-dark .mat-button-toggle-disabled{color:hsla(0,0%,100%,.3);background-color:#000}.color-scheme-dark .mat-button-toggle-disabled.mat-button-toggle-appearance-standard{background:#424242}.color-scheme-dark .mat-button-toggle-disabled.mat-button-toggle-checked{background-color:#424242}.color-scheme-dark .mat-button-toggle-group-appearance-standard,.color-scheme-dark .mat-button-toggle-standalone.mat-button-toggle-appearance-standard{border:1px solid hsla(0,0%,100%,.12)}.color-scheme-dark .mat-card{background:#424242;color:#fff}.color-scheme-dark .mat-card:not([class*=mat-elevation-z]){box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12)}.color-scheme-dark .mat-card.mat-card-flat:not([class*=mat-elevation-z]){box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.color-scheme-dark .mat-card-subtitle{color:hsla(0,0%,100%,.7)}.color-scheme-dark .mat-checkbox-frame{border-color:hsla(0,0%,100%,.7)}.color-scheme-dark .mat-checkbox-checkmark{fill:#303030}.color-scheme-dark .mat-checkbox-checkmark-path{stroke:#303030!important}.color-scheme-dark .mat-checkbox-mixedmark{background-color:#303030}.color-scheme-dark .mat-checkbox-checked.mat-primary .mat-checkbox-background,.color-scheme-dark .mat-checkbox-indeterminate.mat-primary .mat-checkbox-background{background-color:#4b6fff}.color-scheme-dark .mat-checkbox-checked.mat-accent .mat-checkbox-background,.color-scheme-dark .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background{background-color:#3ddf7e}.color-scheme-dark .mat-checkbox-checked.mat-warn .mat-checkbox-background,.color-scheme-dark .mat-checkbox-indeterminate.mat-warn .mat-checkbox-background{background-color:#f44336}.color-scheme-dark .mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background,.color-scheme-dark .mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background{background-color:#686868}.color-scheme-dark .mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame{border-color:#686868}.color-scheme-dark .mat-checkbox-disabled .mat-checkbox-label{color:hsla(0,0%,100%,.7)}.color-scheme-dark .mat-checkbox .mat-ripple-element{background-color:#fff}.color-scheme-dark .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element,.color-scheme-dark .mat-checkbox:active:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element{background:#4b6fff}.color-scheme-dark .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element,.color-scheme-dark .mat-checkbox:active:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element{background:#3ddf7e}.color-scheme-dark .mat-checkbox-checked:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element,.color-scheme-dark .mat-checkbox:active:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element{background:#f44336}.color-scheme-dark .mat-chip.mat-standard-chip{background-color:#616161;color:#fff}.color-scheme-dark .mat-chip.mat-standard-chip .mat-chip-remove{color:#fff;opacity:.4}.color-scheme-dark .mat-chip.mat-standard-chip:not(.mat-chip-disabled):active{box-shadow:0 3px 3px -2px rgba(0,0,0,.2),0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12)}.color-scheme-dark .mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover{opacity:.54}.color-scheme-dark .mat-chip.mat-standard-chip.mat-chip-disabled{opacity:.4}.color-scheme-dark .mat-chip.mat-standard-chip:after{background:#fff}.color-scheme-dark .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary{background-color:#4b6fff;color:#fff}.color-scheme-dark .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove{color:#fff;opacity:.4}.color-scheme-dark .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element{background-color:hsla(0,0%,100%,.1)}.color-scheme-dark .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn{background-color:#f44336;color:#fff}.color-scheme-dark .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove{color:#fff;opacity:.4}.color-scheme-dark .mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element{background-color:hsla(0,0%,100%,.1)}.color-scheme-dark .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent{background-color:#3ddf7e;color:#fff}.color-scheme-dark .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove{color:#fff;opacity:.4}.color-scheme-dark .mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element{background-color:hsla(0,0%,100%,.1)}.color-scheme-dark .mat-table{background:#424242}.color-scheme-dark .mat-table-sticky,.color-scheme-dark .mat-table tbody,.color-scheme-dark .mat-table tfoot,.color-scheme-dark .mat-table thead,.color-scheme-dark [mat-footer-row],.color-scheme-dark [mat-header-row],.color-scheme-dark [mat-row],.color-scheme-dark mat-footer-row,.color-scheme-dark mat-header-row,.color-scheme-dark mat-row{background:inherit}.color-scheme-dark mat-footer-row,.color-scheme-dark mat-header-row,.color-scheme-dark mat-row,.color-scheme-dark td.mat-cell,.color-scheme-dark td.mat-footer-cell,.color-scheme-dark th.mat-header-cell{border-bottom-color:hsla(0,0%,100%,.12)}.color-scheme-dark .mat-header-cell{color:hsla(0,0%,100%,.7)}.color-scheme-dark .mat-cell,.color-scheme-dark .mat-footer-cell{color:#fff}.color-scheme-dark .mat-calendar-arrow{border-top-color:#fff}.color-scheme-dark .mat-datepicker-content .mat-calendar-next-button,.color-scheme-dark .mat-datepicker-content .mat-calendar-previous-button,.color-scheme-dark .mat-datepicker-toggle{color:#fff}.color-scheme-dark .mat-calendar-table-header{color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-calendar-table-header-divider:after{background:hsla(0,0%,100%,.12)}.color-scheme-dark .mat-calendar-body-label{color:hsla(0,0%,100%,.7)}.color-scheme-dark .mat-calendar-body-cell-content,.color-scheme-dark .mat-date-range-input-separator{color:#fff;border-color:transparent}.color-scheme-dark .mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.color-scheme-dark .mat-form-field-disabled .mat-date-range-input-separator{color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-calendar-body-in-preview{color:hsla(0,0%,100%,.24)}.color-scheme-dark .mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-calendar-body-disabled>.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:hsla(0,0%,100%,.3)}.color-scheme-dark .mat-calendar-body-in-range:before{background:rgba(75,111,255,.2)}.color-scheme-dark .mat-calendar-body-comparison-identical,.color-scheme-dark .mat-calendar-body-in-comparison-range:before{background:rgba(249,171,0,.2)}.color-scheme-dark .mat-calendar-body-comparison-bridge-start:before,.color-scheme-dark [dir=rtl] .mat-calendar-body-comparison-bridge-end:before{background:linear-gradient(90deg,rgba(75,111,255,.2) 50%,rgba(249,171,0,.2) 0)}.color-scheme-dark .mat-calendar-body-comparison-bridge-end:before,.color-scheme-dark [dir=rtl] .mat-calendar-body-comparison-bridge-start:before{background:linear-gradient(270deg,rgba(75,111,255,.2) 50%,rgba(249,171,0,.2) 0)}.color-scheme-dark .mat-calendar-body-in-comparison-range.mat-calendar-body-in-range:after,.color-scheme-dark .mat-calendar-body-in-range>.mat-calendar-body-comparison-identical{background:#a8dab5}.color-scheme-dark .mat-calendar-body-comparison-identical.mat-calendar-body-selected,.color-scheme-dark .mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e}.color-scheme-dark .mat-calendar-body-selected{background-color:#4b6fff;color:#fff}.color-scheme-dark .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(75,111,255,.4)}.color-scheme-dark .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.color-scheme-dark .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.color-scheme-dark .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.color-scheme-dark .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:rgba(75,111,255,.3)}.color-scheme-dark .mat-datepicker-content{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);background-color:#424242;color:#fff}.color-scheme-dark .mat-datepicker-content.mat-accent .mat-calendar-body-in-range:before{background:rgba(61,223,126,.2)}.color-scheme-dark .mat-datepicker-content.mat-accent .mat-calendar-body-comparison-identical,.color-scheme-dark .mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range:before{background:rgba(249,171,0,.2)}.color-scheme-dark .mat-datepicker-content.mat-accent .mat-calendar-body-comparison-bridge-start:before,.color-scheme-dark .mat-datepicker-content.mat-accent [dir=rtl] .mat-calendar-body-comparison-bridge-end:before{background:linear-gradient(90deg,rgba(61,223,126,.2) 50%,rgba(249,171,0,.2) 0)}.color-scheme-dark .mat-datepicker-content.mat-accent .mat-calendar-body-comparison-bridge-end:before,.color-scheme-dark .mat-datepicker-content.mat-accent [dir=rtl] .mat-calendar-body-comparison-bridge-start:before{background:linear-gradient(270deg,rgba(61,223,126,.2) 50%,rgba(249,171,0,.2) 0)}.color-scheme-dark .mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range.mat-calendar-body-in-range:after,.color-scheme-dark .mat-datepicker-content.mat-accent .mat-calendar-body-in-range>.mat-calendar-body-comparison-identical{background:#a8dab5}.color-scheme-dark .mat-datepicker-content.mat-accent .mat-calendar-body-comparison-identical.mat-calendar-body-selected,.color-scheme-dark .mat-datepicker-content.mat-accent .mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e}.color-scheme-dark .mat-datepicker-content.mat-accent .mat-calendar-body-selected{background-color:#3ddf7e;color:#fff}.color-scheme-dark .mat-datepicker-content.mat-accent .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(61,223,126,.4)}.color-scheme-dark .mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.color-scheme-dark .mat-datepicker-content.mat-accent .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.color-scheme-dark .mat-datepicker-content.mat-accent .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.color-scheme-dark .mat-datepicker-content.mat-accent .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:rgba(61,223,126,.3)}.color-scheme-dark .mat-datepicker-content.mat-warn .mat-calendar-body-in-range:before{background:rgba(244,67,54,.2)}.color-scheme-dark .mat-datepicker-content.mat-warn .mat-calendar-body-comparison-identical,.color-scheme-dark .mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range:before{background:rgba(249,171,0,.2)}.color-scheme-dark .mat-datepicker-content.mat-warn .mat-calendar-body-comparison-bridge-start:before,.color-scheme-dark .mat-datepicker-content.mat-warn [dir=rtl] .mat-calendar-body-comparison-bridge-end:before{background:linear-gradient(90deg,rgba(244,67,54,.2) 50%,rgba(249,171,0,.2) 0)}.color-scheme-dark .mat-datepicker-content.mat-warn .mat-calendar-body-comparison-bridge-end:before,.color-scheme-dark .mat-datepicker-content.mat-warn [dir=rtl] .mat-calendar-body-comparison-bridge-start:before{background:linear-gradient(270deg,rgba(244,67,54,.2) 50%,rgba(249,171,0,.2) 0)}.color-scheme-dark .mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range.mat-calendar-body-in-range:after,.color-scheme-dark .mat-datepicker-content.mat-warn .mat-calendar-body-in-range>.mat-calendar-body-comparison-identical{background:#a8dab5}.color-scheme-dark .mat-datepicker-content.mat-warn .mat-calendar-body-comparison-identical.mat-calendar-body-selected,.color-scheme-dark .mat-datepicker-content.mat-warn .mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:#46a35e}.color-scheme-dark .mat-datepicker-content.mat-warn .mat-calendar-body-selected{background-color:#f44336;color:#fff}.color-scheme-dark .mat-datepicker-content.mat-warn .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(244,67,54,.4)}.color-scheme-dark .mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.color-scheme-dark .mat-datepicker-content.mat-warn .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.color-scheme-dark .mat-datepicker-content.mat-warn .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.color-scheme-dark .mat-datepicker-content.mat-warn .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:rgba(244,67,54,.3)}.color-scheme-dark .mat-datepicker-content-touch{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.color-scheme-dark .mat-datepicker-toggle-active{color:#4b6fff}.color-scheme-dark .mat-datepicker-toggle-active.mat-accent{color:#3ddf7e}.color-scheme-dark .mat-datepicker-toggle-active.mat-warn{color:#f44336}.color-scheme-dark .mat-date-range-input-inner[disabled]{color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-dialog-container{box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12);background:#424242;color:#fff}.color-scheme-dark .mat-divider{border-top-color:hsla(0,0%,100%,.12)}.color-scheme-dark .mat-divider-vertical{border-right-color:hsla(0,0%,100%,.12)}.color-scheme-dark .mat-expansion-panel{background:#424242;color:#fff}.color-scheme-dark .mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.color-scheme-dark .mat-action-row{border-top-color:hsla(0,0%,100%,.12)}.color-scheme-dark .mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true]),.color-scheme-dark .mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true]),.color-scheme-dark .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true]){background:hsla(0,0%,100%,.04)}@media (hover:none){.color-scheme-dark .mat-expansion-panel:not(.mat-expanded):not([aria-disabled=true]) .mat-expansion-panel-header:hover{background:#424242}}.color-scheme-dark .mat-expansion-panel-header-title{color:#fff}.color-scheme-dark .mat-expansion-indicator:after,.color-scheme-dark .mat-expansion-panel-header-description{color:hsla(0,0%,100%,.7)}.color-scheme-dark .mat-expansion-panel-header[aria-disabled=true]{color:hsla(0,0%,100%,.3)}.color-scheme-dark .mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description,.color-scheme-dark .mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title{color:inherit}.color-scheme-dark .mat-form-field-label,.color-scheme-dark .mat-hint{color:hsla(0,0%,100%,.7)}.color-scheme-dark .mat-form-field.mat-focused .mat-form-field-label{color:#4b6fff}.color-scheme-dark .mat-form-field.mat-focused .mat-form-field-label.mat-accent{color:#3ddf7e}.color-scheme-dark .mat-form-field.mat-focused .mat-form-field-label.mat-warn{color:#f44336}.color-scheme-dark .mat-focused .mat-form-field-required-marker{color:#3ddf7e}.color-scheme-dark .mat-form-field-ripple{background-color:#fff}.color-scheme-dark .mat-form-field.mat-focused .mat-form-field-ripple{background-color:#4b6fff}.color-scheme-dark .mat-form-field.mat-focused .mat-form-field-ripple.mat-accent{background-color:#3ddf7e}.color-scheme-dark .mat-form-field.mat-focused .mat-form-field-ripple.mat-warn{background-color:#f44336}.color-scheme-dark .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix:after{color:#4b6fff}.color-scheme-dark .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix:after{color:#3ddf7e}.color-scheme-dark .mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix:after,.color-scheme-dark .mat-form-field.mat-form-field-invalid .mat-form-field-label,.color-scheme-dark .mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent,.color-scheme-dark .mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker{color:#f44336}.color-scheme-dark .mat-form-field.mat-form-field-invalid .mat-form-field-ripple,.color-scheme-dark .mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent{background-color:#f44336}.color-scheme-dark .mat-error{color:#f44336}.color-scheme-dark .mat-form-field-appearance-legacy .mat-form-field-label,.color-scheme-dark .mat-form-field-appearance-legacy .mat-hint{color:hsla(0,0%,100%,.7)}.color-scheme-dark .mat-form-field-appearance-legacy .mat-form-field-underline{background-color:hsla(0,0%,100%,.7)}.color-scheme-dark .mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(90deg,hsla(0,0%,100%,.7) 0,hsla(0,0%,100%,.7) 33%,transparent 0);background-size:4px 100%;background-repeat:repeat-x}.color-scheme-dark .mat-form-field-appearance-standard .mat-form-field-underline{background-color:hsla(0,0%,100%,.7)}.color-scheme-dark .mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(90deg,hsla(0,0%,100%,.7) 0,hsla(0,0%,100%,.7) 33%,transparent 0);background-size:4px 100%;background-repeat:repeat-x}.color-scheme-dark .mat-form-field-appearance-fill .mat-form-field-flex{background-color:hsla(0,0%,100%,.1)}.color-scheme-dark .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex{background-color:hsla(0,0%,100%,.05)}.color-scheme-dark .mat-form-field-appearance-fill .mat-form-field-underline:before{background-color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label{color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline:before{background-color:initial}.color-scheme-dark .mat-form-field-appearance-outline .mat-form-field-outline{color:hsla(0,0%,100%,.3)}.color-scheme-dark .mat-form-field-appearance-outline .mat-form-field-outline-thick{color:#fff}.color-scheme-dark .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:#4b6fff}.color-scheme-dark .mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick{color:#3ddf7e}.color-scheme-dark .mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick,.color-scheme-dark .mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick{color:#f44336}.color-scheme-dark .mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label{color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{color:hsla(0,0%,100%,.15)}.color-scheme-dark .mat-icon.mat-primary{color:#4b6fff}.color-scheme-dark .mat-icon.mat-accent{color:#3ddf7e}.color-scheme-dark .mat-icon.mat-warn{color:#f44336}.color-scheme-dark .mat-form-field-type-mat-native-select .mat-form-field-infix:after{color:hsla(0,0%,100%,.7)}.color-scheme-dark .mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix:after,.color-scheme-dark .mat-input-element:disabled{color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-input-element{caret-color:#4b6fff}.color-scheme-dark .mat-input-element::placeholder{color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-input-element::-moz-placeholder{color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-input-element::-webkit-input-placeholder{color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-input-element:-ms-input-placeholder{color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-input-element option{color:rgba(0,0,0,.87)}.color-scheme-dark .mat-input-element option:disabled{color:rgba(0,0,0,.38)}.color-scheme-dark .mat-form-field.mat-accent .mat-input-element{caret-color:#3ddf7e}.color-scheme-dark .mat-form-field-invalid .mat-input-element,.color-scheme-dark .mat-form-field.mat-warn .mat-input-element{caret-color:#f44336}.color-scheme-dark .mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix:after{color:#f44336}.color-scheme-dark .mat-list-base .mat-list-item,.color-scheme-dark .mat-list-base .mat-list-option{color:#fff}.color-scheme-dark .mat-list-base .mat-subheader{color:hsla(0,0%,100%,.7)}.color-scheme-dark .mat-list-item-disabled{background-color:#000}.color-scheme-dark .mat-action-list .mat-list-item:focus,.color-scheme-dark .mat-action-list .mat-list-item:hover,.color-scheme-dark .mat-list-option:focus,.color-scheme-dark .mat-list-option:hover,.color-scheme-dark .mat-nav-list .mat-list-item:focus,.color-scheme-dark .mat-nav-list .mat-list-item:hover{background:hsla(0,0%,100%,.04)}.color-scheme-dark .mat-list-single-selected-option,.color-scheme-dark .mat-list-single-selected-option:focus,.color-scheme-dark .mat-list-single-selected-option:hover{background:hsla(0,0%,100%,.12)}.color-scheme-dark .mat-menu-panel{background:#424242}.color-scheme-dark .mat-menu-panel:not([class*=mat-elevation-z]){box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.color-scheme-dark .mat-menu-item{background:transparent;color:#fff}.color-scheme-dark .mat-menu-item[disabled],.color-scheme-dark .mat-menu-item[disabled] .mat-icon-no-color,.color-scheme-dark .mat-menu-item[disabled]:after{color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-menu-item-submenu-trigger:after,.color-scheme-dark .mat-menu-item .mat-icon-no-color{color:#fff}.color-scheme-dark .mat-menu-item-highlighted:not([disabled]),.color-scheme-dark .mat-menu-item.cdk-keyboard-focused:not([disabled]),.color-scheme-dark .mat-menu-item.cdk-program-focused:not([disabled]),.color-scheme-dark .mat-menu-item:hover:not([disabled]){background:hsla(0,0%,100%,.04)}.color-scheme-dark .mat-paginator{background:#424242}.color-scheme-dark .mat-paginator,.color-scheme-dark .mat-paginator-page-size .mat-select-trigger{color:hsla(0,0%,100%,.7)}.color-scheme-dark .mat-paginator-decrement,.color-scheme-dark .mat-paginator-increment{border-top:2px solid #fff;border-right:2px solid #fff}.color-scheme-dark .mat-paginator-first,.color-scheme-dark .mat-paginator-last{border-top:2px solid #fff}.color-scheme-dark .mat-icon-button[disabled] .mat-paginator-decrement,.color-scheme-dark .mat-icon-button[disabled] .mat-paginator-first,.color-scheme-dark .mat-icon-button[disabled] .mat-paginator-increment,.color-scheme-dark .mat-icon-button[disabled] .mat-paginator-last{border-color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-progress-bar-background{fill:#c9d4ff}.color-scheme-dark .mat-progress-bar-buffer{background-color:#c9d4ff}.color-scheme-dark .mat-progress-bar-fill:after{background-color:#4b6fff}.color-scheme-dark .mat-progress-bar.mat-accent .mat-progress-bar-background{fill:#c5f5d8}.color-scheme-dark .mat-progress-bar.mat-accent .mat-progress-bar-buffer{background-color:#c5f5d8}.color-scheme-dark .mat-progress-bar.mat-accent .mat-progress-bar-fill:after{background-color:#3ddf7e}.color-scheme-dark .mat-progress-bar.mat-warn .mat-progress-bar-background{fill:#ffcdd2}.color-scheme-dark .mat-progress-bar.mat-warn .mat-progress-bar-buffer{background-color:#ffcdd2}.color-scheme-dark .mat-progress-bar.mat-warn .mat-progress-bar-fill:after{background-color:#f44336}.color-scheme-dark .mat-progress-spinner circle,.color-scheme-dark .mat-spinner circle{stroke:#4b6fff}.color-scheme-dark .mat-progress-spinner.mat-accent circle,.color-scheme-dark .mat-spinner.mat-accent circle{stroke:#3ddf7e}.color-scheme-dark .mat-progress-spinner.mat-warn circle,.color-scheme-dark .mat-spinner.mat-warn circle{stroke:#f44336}.color-scheme-dark .mat-radio-outer-circle{border-color:hsla(0,0%,100%,.7)}.color-scheme-dark .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle{border-color:#4b6fff}.color-scheme-dark .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple,.color-scheme-dark .mat-radio-button.mat-primary .mat-radio-inner-circle,.color-scheme-dark .mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.color-scheme-dark .mat-radio-button.mat-primary:active .mat-radio-persistent-ripple{background-color:#4b6fff}.color-scheme-dark .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#3ddf7e}.color-scheme-dark .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple,.color-scheme-dark .mat-radio-button.mat-accent .mat-radio-inner-circle,.color-scheme-dark .mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.color-scheme-dark .mat-radio-button.mat-accent:active .mat-radio-persistent-ripple{background-color:#3ddf7e}.color-scheme-dark .mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle{border-color:#f44336}.color-scheme-dark .mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple,.color-scheme-dark .mat-radio-button.mat-warn .mat-radio-inner-circle,.color-scheme-dark .mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.color-scheme-dark .mat-radio-button.mat-warn:active .mat-radio-persistent-ripple{background-color:#f44336}.color-scheme-dark .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle,.color-scheme-dark .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-radio-button.mat-radio-disabled .mat-radio-inner-circle,.color-scheme-dark .mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element{background-color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-radio-button.mat-radio-disabled .mat-radio-label-content{color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-radio-button .mat-ripple-element{background-color:#fff}.color-scheme-dark .mat-select-value{color:#fff}.color-scheme-dark .mat-select-disabled .mat-select-value,.color-scheme-dark .mat-select-placeholder{color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-select-arrow{color:hsla(0,0%,100%,.7)}.color-scheme-dark .mat-select-panel{background:#424242}.color-scheme-dark .mat-select-panel:not([class*=mat-elevation-z]){box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.color-scheme-dark .mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple){background:hsla(0,0%,100%,.12)}.color-scheme-dark .mat-form-field.mat-focused.mat-primary .mat-select-arrow{color:#4b6fff}.color-scheme-dark .mat-form-field.mat-focused.mat-accent .mat-select-arrow{color:#3ddf7e}.color-scheme-dark .mat-form-field.mat-focused.mat-warn .mat-select-arrow,.color-scheme-dark .mat-form-field .mat-select.mat-select-invalid .mat-select-arrow{color:#f44336}.color-scheme-dark .mat-form-field .mat-select.mat-select-disabled .mat-select-arrow{color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-drawer-container{background-color:#303030;color:#fff}.color-scheme-dark .mat-drawer{background-color:#424242;color:#fff}.color-scheme-dark .mat-drawer.mat-drawer-push{background-color:#424242}.color-scheme-dark .mat-drawer:not(.mat-drawer-side){box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.color-scheme-dark .mat-drawer-side{border-right:1px solid hsla(0,0%,100%,.12)}.color-scheme-dark .mat-drawer-side.mat-drawer-end,.color-scheme-dark [dir=rtl] .mat-drawer-side{border-left:1px solid hsla(0,0%,100%,.12);border-right:none}.color-scheme-dark [dir=rtl] .mat-drawer-side.mat-drawer-end{border-left:none;border-right:1px solid hsla(0,0%,100%,.12)}.color-scheme-dark .mat-drawer-backdrop.mat-drawer-shown{background-color:hsla(0,0%,74.1%,.6)}.color-scheme-dark .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb{background-color:#3ddf7e}.color-scheme-dark .mat-slide-toggle.mat-checked .mat-slide-toggle-bar{background-color:rgba(61,223,126,.54)}.color-scheme-dark .mat-slide-toggle.mat-checked .mat-ripple-element{background-color:#3ddf7e}.color-scheme-dark .mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb{background-color:#4b6fff}.color-scheme-dark .mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar{background-color:rgba(75,111,255,.54)}.color-scheme-dark .mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element{background-color:#4b6fff}.color-scheme-dark .mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb{background-color:#f44336}.color-scheme-dark .mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar{background-color:rgba(244,67,54,.54)}.color-scheme-dark .mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element{background-color:#f44336}.color-scheme-dark .mat-slide-toggle:not(.mat-checked) .mat-ripple-element{background-color:#fff}.color-scheme-dark .mat-slide-toggle-thumb{box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12);background-color:#bdbdbd}.color-scheme-dark .mat-slide-toggle-bar{background-color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-slider-track-background{background-color:hsla(0,0%,100%,.3)}.color-scheme-dark .mat-primary .mat-slider-thumb,.color-scheme-dark .mat-primary .mat-slider-thumb-label,.color-scheme-dark .mat-primary .mat-slider-track-fill{background-color:#4b6fff}.color-scheme-dark .mat-primary .mat-slider-thumb-label-text{color:#fff}.color-scheme-dark .mat-primary .mat-slider-focus-ring{background-color:rgba(75,111,255,.2)}.color-scheme-dark .mat-accent .mat-slider-thumb,.color-scheme-dark .mat-accent .mat-slider-thumb-label,.color-scheme-dark .mat-accent .mat-slider-track-fill{background-color:#3ddf7e}.color-scheme-dark .mat-accent .mat-slider-thumb-label-text{color:#fff}.color-scheme-dark .mat-accent .mat-slider-focus-ring{background-color:rgba(61,223,126,.2)}.color-scheme-dark .mat-warn .mat-slider-thumb,.color-scheme-dark .mat-warn .mat-slider-thumb-label,.color-scheme-dark .mat-warn .mat-slider-track-fill{background-color:#f44336}.color-scheme-dark .mat-warn .mat-slider-thumb-label-text{color:#fff}.color-scheme-dark .mat-warn .mat-slider-focus-ring{background-color:rgba(244,67,54,.2)}.color-scheme-dark .cdk-focused .mat-slider-track-background,.color-scheme-dark .mat-slider-disabled .mat-slider-thumb,.color-scheme-dark .mat-slider-disabled .mat-slider-track-background,.color-scheme-dark .mat-slider-disabled .mat-slider-track-fill,.color-scheme-dark .mat-slider-disabled:hover .mat-slider-track-background,.color-scheme-dark .mat-slider:hover .mat-slider-track-background{background-color:hsla(0,0%,100%,.3)}.color-scheme-dark .mat-slider-min-value .mat-slider-focus-ring{background-color:hsla(0,0%,100%,.12)}.color-scheme-dark .mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,.color-scheme-dark .mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label{background-color:#fff}.color-scheme-dark .mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,.color-scheme-dark .mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label{background-color:hsla(0,0%,100%,.3)}.color-scheme-dark .mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb{border-color:hsla(0,0%,100%,.3);background-color:initial}.color-scheme-dark .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb,.color-scheme-dark .mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb,.color-scheme-dark .mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb,.color-scheme-dark .mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb{border-color:hsla(0,0%,100%,.3)}.color-scheme-dark .mat-slider-has-ticks .mat-slider-wrapper:after{border-color:hsla(0,0%,100%,.7)}.color-scheme-dark .mat-slider-horizontal .mat-slider-ticks{background-image:repeating-linear-gradient(90deg,hsla(0,0%,100%,.7),hsla(0,0%,100%,.7) 2px,transparent 0,transparent);background-image:-moz-repeating-linear-gradient(.0001deg,hsla(0,0%,100%,.7),hsla(0,0%,100%,.7) 2px,transparent 0,transparent)}.color-scheme-dark .mat-slider-vertical .mat-slider-ticks{background-image:repeating-linear-gradient(180deg,hsla(0,0%,100%,.7),hsla(0,0%,100%,.7) 2px,transparent 0,transparent)}.color-scheme-dark .mat-step-header.cdk-keyboard-focused,.color-scheme-dark .mat-step-header.cdk-program-focused,.color-scheme-dark .mat-step-header:hover{background-color:hsla(0,0%,100%,.04)}@media (hover:none){.color-scheme-dark .mat-step-header:hover{background:none}}.color-scheme-dark .mat-step-header .mat-step-label,.color-scheme-dark .mat-step-header .mat-step-optional{color:hsla(0,0%,100%,.7)}.color-scheme-dark .mat-step-header .mat-step-icon{background-color:hsla(0,0%,100%,.7);color:#fff}.color-scheme-dark .mat-step-header .mat-step-icon-selected,.color-scheme-dark .mat-step-header .mat-step-icon-state-done,.color-scheme-dark .mat-step-header .mat-step-icon-state-edit{background-color:#4b6fff;color:#fff}.color-scheme-dark .mat-step-header.mat-accent .mat-step-icon{color:#fff}.color-scheme-dark .mat-step-header.mat-accent .mat-step-icon-selected,.color-scheme-dark .mat-step-header.mat-accent .mat-step-icon-state-done,.color-scheme-dark .mat-step-header.mat-accent .mat-step-icon-state-edit{background-color:#3ddf7e;color:#fff}.color-scheme-dark .mat-step-header.mat-warn .mat-step-icon{color:#fff}.color-scheme-dark .mat-step-header.mat-warn .mat-step-icon-selected,.color-scheme-dark .mat-step-header.mat-warn .mat-step-icon-state-done,.color-scheme-dark .mat-step-header.mat-warn .mat-step-icon-state-edit{background-color:#f44336;color:#fff}.color-scheme-dark .mat-step-header .mat-step-icon-state-error{background-color:initial;color:#f44336}.color-scheme-dark .mat-step-header .mat-step-label.mat-step-label-active{color:#fff}.color-scheme-dark .mat-step-header .mat-step-label.mat-step-label-error{color:#f44336}.color-scheme-dark .mat-stepper-horizontal,.color-scheme-dark .mat-stepper-vertical{background-color:#424242}.color-scheme-dark .mat-stepper-vertical-line:before{border-left-color:hsla(0,0%,100%,.12)}.color-scheme-dark .mat-horizontal-stepper-header:after,.color-scheme-dark .mat-horizontal-stepper-header:before,.color-scheme-dark .mat-stepper-horizontal-line{border-top-color:hsla(0,0%,100%,.12)}.color-scheme-dark .mat-sort-header-arrow{color:#c6c6c6}.color-scheme-dark .mat-tab-header,.color-scheme-dark .mat-tab-nav-bar{border-bottom:1px solid hsla(0,0%,100%,.12)}.color-scheme-dark .mat-tab-group-inverted-header .mat-tab-header,.color-scheme-dark .mat-tab-group-inverted-header .mat-tab-nav-bar{border-top:1px solid hsla(0,0%,100%,.12);border-bottom:none}.color-scheme-dark .mat-tab-label,.color-scheme-dark .mat-tab-link{color:#fff}.color-scheme-dark .mat-tab-label.mat-tab-disabled,.color-scheme-dark .mat-tab-link.mat-tab-disabled{color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-tab-header-pagination-chevron{border-color:#fff}.color-scheme-dark .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:hsla(0,0%,100%,.5)}.color-scheme-dark .mat-tab-group[class*=mat-background-] .mat-tab-header,.color-scheme-dark .mat-tab-nav-bar[class*=mat-background-]{border-bottom:none;border-top:none}.color-scheme-dark .mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(201,212,255,.3)}.color-scheme-dark .mat-tab-group.mat-primary .mat-ink-bar,.color-scheme-dark .mat-tab-nav-bar.mat-primary .mat-ink-bar{background-color:#4b6fff}.color-scheme-dark .mat-tab-group.mat-primary.mat-background-primary>.mat-tab-header .mat-ink-bar,.color-scheme-dark .mat-tab-group.mat-primary.mat-background-primary>.mat-tab-link-container .mat-ink-bar,.color-scheme-dark .mat-tab-nav-bar.mat-primary.mat-background-primary>.mat-tab-header .mat-ink-bar,.color-scheme-dark .mat-tab-nav-bar.mat-primary.mat-background-primary>.mat-tab-link-container .mat-ink-bar{background-color:#fff}.color-scheme-dark .mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(197,245,216,.3)}.color-scheme-dark .mat-tab-group.mat-accent .mat-ink-bar,.color-scheme-dark .mat-tab-nav-bar.mat-accent .mat-ink-bar{background-color:#3ddf7e}.color-scheme-dark .mat-tab-group.mat-accent.mat-background-accent>.mat-tab-header .mat-ink-bar,.color-scheme-dark .mat-tab-group.mat-accent.mat-background-accent>.mat-tab-link-container .mat-ink-bar,.color-scheme-dark .mat-tab-nav-bar.mat-accent.mat-background-accent>.mat-tab-header .mat-ink-bar,.color-scheme-dark .mat-tab-nav-bar.mat-accent.mat-background-accent>.mat-tab-link-container .mat-ink-bar{background-color:#fff}.color-scheme-dark .mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,205,210,.3)}.color-scheme-dark .mat-tab-group.mat-warn .mat-ink-bar,.color-scheme-dark .mat-tab-nav-bar.mat-warn .mat-ink-bar{background-color:#f44336}.color-scheme-dark .mat-tab-group.mat-warn.mat-background-warn>.mat-tab-header .mat-ink-bar,.color-scheme-dark .mat-tab-group.mat-warn.mat-background-warn>.mat-tab-link-container .mat-ink-bar,.color-scheme-dark .mat-tab-nav-bar.mat-warn.mat-background-warn>.mat-tab-header .mat-ink-bar,.color-scheme-dark .mat-tab-nav-bar.mat-warn.mat-background-warn>.mat-tab-link-container .mat-ink-bar{background-color:#fff}.color-scheme-dark .mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(201,212,255,.3)}.color-scheme-dark .mat-tab-group.mat-background-primary>.mat-tab-header,.color-scheme-dark .mat-tab-group.mat-background-primary>.mat-tab-header-pagination,.color-scheme-dark .mat-tab-group.mat-background-primary>.mat-tab-link-container,.color-scheme-dark .mat-tab-nav-bar.mat-background-primary>.mat-tab-header,.color-scheme-dark .mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination,.color-scheme-dark .mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container{background-color:#4b6fff}.color-scheme-dark .mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-label,.color-scheme-dark .mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-tab-link,.color-scheme-dark .mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-label,.color-scheme-dark .mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-tab-link{color:#fff}.color-scheme-dark .mat-tab-group.mat-background-primary>.mat-tab-header .mat-tab-label.mat-tab-disabled,.color-scheme-dark .mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.color-scheme-dark .mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-tab-label.mat-tab-disabled,.color-scheme-dark .mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:hsla(0,0%,100%,.4)}.color-scheme-dark .mat-tab-group.mat-background-primary>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.color-scheme-dark .mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination .mat-tab-header-pagination-chevron{border-color:#fff}.color-scheme-dark .mat-tab-group.mat-background-primary>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.color-scheme-dark .mat-tab-nav-bar.mat-background-primary>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:hsla(0,0%,100%,.4)}.color-scheme-dark .mat-tab-group.mat-background-primary>.mat-tab-header .mat-ripple-element,.color-scheme-dark .mat-tab-group.mat-background-primary>.mat-tab-link-container .mat-ripple-element,.color-scheme-dark .mat-tab-nav-bar.mat-background-primary>.mat-tab-header .mat-ripple-element,.color-scheme-dark .mat-tab-nav-bar.mat-background-primary>.mat-tab-link-container .mat-ripple-element{background-color:hsla(0,0%,100%,.12)}.color-scheme-dark .mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(197,245,216,.3)}.color-scheme-dark .mat-tab-group.mat-background-accent>.mat-tab-header,.color-scheme-dark .mat-tab-group.mat-background-accent>.mat-tab-header-pagination,.color-scheme-dark .mat-tab-group.mat-background-accent>.mat-tab-link-container,.color-scheme-dark .mat-tab-nav-bar.mat-background-accent>.mat-tab-header,.color-scheme-dark .mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination,.color-scheme-dark .mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container{background-color:#3ddf7e}.color-scheme-dark .mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-label,.color-scheme-dark .mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-tab-link,.color-scheme-dark .mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-label,.color-scheme-dark .mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-tab-link{color:#fff}.color-scheme-dark .mat-tab-group.mat-background-accent>.mat-tab-header .mat-tab-label.mat-tab-disabled,.color-scheme-dark .mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.color-scheme-dark .mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-tab-label.mat-tab-disabled,.color-scheme-dark .mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:hsla(0,0%,100%,.4)}.color-scheme-dark .mat-tab-group.mat-background-accent>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.color-scheme-dark .mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination .mat-tab-header-pagination-chevron{border-color:#fff}.color-scheme-dark .mat-tab-group.mat-background-accent>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.color-scheme-dark .mat-tab-nav-bar.mat-background-accent>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:hsla(0,0%,100%,.4)}.color-scheme-dark .mat-tab-group.mat-background-accent>.mat-tab-header .mat-ripple-element,.color-scheme-dark .mat-tab-group.mat-background-accent>.mat-tab-link-container .mat-ripple-element,.color-scheme-dark .mat-tab-nav-bar.mat-background-accent>.mat-tab-header .mat-ripple-element,.color-scheme-dark .mat-tab-nav-bar.mat-background-accent>.mat-tab-link-container .mat-ripple-element{background-color:hsla(0,0%,100%,.12)}.color-scheme-dark .mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.color-scheme-dark .mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,205,210,.3)}.color-scheme-dark .mat-tab-group.mat-background-warn>.mat-tab-header,.color-scheme-dark .mat-tab-group.mat-background-warn>.mat-tab-header-pagination,.color-scheme-dark .mat-tab-group.mat-background-warn>.mat-tab-link-container,.color-scheme-dark .mat-tab-nav-bar.mat-background-warn>.mat-tab-header,.color-scheme-dark .mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination,.color-scheme-dark .mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container{background-color:#f44336}.color-scheme-dark .mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-label,.color-scheme-dark .mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-tab-link,.color-scheme-dark .mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-label,.color-scheme-dark .mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-tab-link{color:#fff}.color-scheme-dark .mat-tab-group.mat-background-warn>.mat-tab-header .mat-tab-label.mat-tab-disabled,.color-scheme-dark .mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-tab-link.mat-tab-disabled,.color-scheme-dark .mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-tab-label.mat-tab-disabled,.color-scheme-dark .mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-tab-link.mat-tab-disabled{color:hsla(0,0%,100%,.4)}.color-scheme-dark .mat-tab-group.mat-background-warn>.mat-tab-header-pagination .mat-tab-header-pagination-chevron,.color-scheme-dark .mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination .mat-tab-header-pagination-chevron{border-color:#fff}.color-scheme-dark .mat-tab-group.mat-background-warn>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.color-scheme-dark .mat-tab-nav-bar.mat-background-warn>.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:hsla(0,0%,100%,.4)}.color-scheme-dark .mat-tab-group.mat-background-warn>.mat-tab-header .mat-ripple-element,.color-scheme-dark .mat-tab-group.mat-background-warn>.mat-tab-link-container .mat-ripple-element,.color-scheme-dark .mat-tab-nav-bar.mat-background-warn>.mat-tab-header .mat-ripple-element,.color-scheme-dark .mat-tab-nav-bar.mat-background-warn>.mat-tab-link-container .mat-ripple-element{background-color:hsla(0,0%,100%,.12)}.color-scheme-dark .mat-toolbar{background:#212121;color:#fff}.color-scheme-dark .mat-toolbar.mat-primary{background:#4b6fff;color:#fff}.color-scheme-dark .mat-toolbar.mat-accent{background:#3ddf7e;color:#fff}.color-scheme-dark .mat-toolbar.mat-warn{background:#f44336;color:#fff}.color-scheme-dark .mat-toolbar .mat-focused .mat-form-field-ripple,.color-scheme-dark .mat-toolbar .mat-form-field-ripple,.color-scheme-dark .mat-toolbar .mat-form-field-underline{background-color:currentColor}.color-scheme-dark .mat-toolbar .mat-focused .mat-form-field-label,.color-scheme-dark .mat-toolbar .mat-form-field-label,.color-scheme-dark .mat-toolbar .mat-form-field.mat-focused .mat-select-arrow,.color-scheme-dark .mat-toolbar .mat-select-arrow,.color-scheme-dark .mat-toolbar .mat-select-value{color:inherit}.color-scheme-dark .mat-toolbar .mat-input-element{caret-color:currentColor}.color-scheme-dark .mat-tooltip{background:rgba(97,97,97,.9)}.color-scheme-dark .mat-tree{background:#424242}.color-scheme-dark .mat-nested-tree-node,.color-scheme-dark .mat-tree-node{color:#fff}.color-scheme-dark .mat-snack-bar-container{color:rgba(0,0,0,.87);background:#fafafa;box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.color-scheme-dark .mat-simple-snackbar-action{color:inherit}.color-scheme-dark g>text{fill:#fff!important;text-shadow:none!important}.color-scheme-dark .axis-extent-bottom>.axis-extent-bottom-text,.color-scheme-dark .axis-extent-text,.color-scheme-dark .axis-extent-top>.axis-extent-top-text,.color-scheme-dark .axis-title,.color-scheme-dark .tick{fill:#fff!important}.color-scheme-dark .axis-extent-bottom,.color-scheme-dark .axis-extent-top,.color-scheme-dark .axis-extent>*,.color-scheme-dark .tick,.color-scheme-dark .tick>text{color:#fff!important}.color-scheme-dark .config-list{background-color:#2d2d2d}.color-scheme-dark .card-wrapper{color:#2d2d2d}.color-scheme-dark .color-text-primary{color:#fff}.color-scheme-dark .color-gray{color:#dfdfdf}.color-scheme-dark .color-dark{color:#333!important}.color-scheme-dark .color-light{color:#f5f5f5!important}.color-scheme-dark .bg-primary{background:#4b6fff!important}.color-scheme-dark .bg-accent{background:#3ddf7e!important}.color-scheme-dark .route-active{color:#4b6fff}.color-scheme-dark .table-header{background:#4b6fff;color:#fff}.color-scheme-dark .first-col-header,.color-scheme-dark .second-col-header{border-bottom:1px solid #fff;font-weight:500}.color-scheme-dark .second-col-header{border-left:1px solid #fff}.color-scheme-dark .first-col{border-bottom:1px solid #4b6fff;font-weight:500}.color-scheme-dark .second-col{border-bottom:1px solid #4b6fff;border-left:1px solid #4b6fff}.color-scheme-dark .table-container>:last-child .first-col{border:unset!important}.color-scheme-dark .table-container>:last-child .second-col{border:unset!important;border-left:1px solid #4b6fff!important}.color-scheme-dark .menu-list-item--active{color:#4b6fff!important}.color-scheme-dark .progress-bar,.color-scheme-dark .progress-bar-filled{background-color:#f5f5f5;height:60px;border-radius:3px;box-shadow:inset 0 1px 3px rgba(0,0,0,.2)}.color-scheme-dark .progress-bar-filled .progress-bar-fill,.color-scheme-dark .progress-bar .progress-bar-fill{display:block;height:100%;width:100%;color:#000;text-align:center;background-color:#3ddf7e!important;display:flex;justify-content:center;align-items:center}.color-scheme-dark .progress-bar{width:100%}.color-scheme-dark .progress-bar .progress-bar-fill{background-color:#3ddf7e!important;border-radius:3px;transition:width .5s ease-in-out}.color-scheme-dark a:not(.mat-button):not(.mat-raised-button):not(.mat-icon-button):not(.mat-list-item):active,.color-scheme-dark a:not(.mat-button):not(.mat-raised-button):not(.mat-icon-button):not(.mat-list-item):hover{color:#4b6fff!important}.color-scheme-dark .actionable{cursor:pointer}.color-scheme-dark .actionable:hover{color:#3ddf7e!important}.color-scheme-dark .actionable-warn{cursor:pointer}.color-scheme-dark .actionable-warn:hover{color:#f44336!important}.color-scheme-dark .ngx-pagination a,.color-scheme-dark .ngx-pagination button{color:#fff!important}.btn-primary{background:#4b6fff!important;color:#fff}.mat-simple-snackbar-action,.mat-snack-bar-container{cursor:pointer;color:#fff!important}.mat-simple-snackbar-action.text-error,.mat-snack-bar-container.text-error{background:#f44336!important;position:relative}.mat-simple-snackbar-action.text-error .mat-simple-snackbar,.mat-snack-bar-container.text-error .mat-simple-snackbar{margin-left:1.1rem!important}.mat-simple-snackbar-action.text-error:after,.mat-snack-bar-container.text-error:after{content:\"⚠\"!important;position:absolute;top:.9rem;left:.6rem;font-size:1rem}.mat-simple-snackbar-action.text-warn,.mat-snack-bar-container.text-warn{position:relative;background:#ff9800!important;color:#000!important}.mat-simple-snackbar-action.text-warn .mat-simple-snackbar,.mat-snack-bar-container.text-warn .mat-simple-snackbar{margin-left:1.1rem!important}.mat-simple-snackbar-action.text-warn:after,.mat-snack-bar-container.text-warn:after{content:\"✔\"!important;position:absolute;top:.9rem;left:.6rem;font-size:1rem}.mat-simple-snackbar-action.text-info,.mat-snack-bar-container.text-info{position:relative;background:#00bcd4!important;color:#000!important}.mat-simple-snackbar-action.text-info .mat-simple-snackbar,.mat-snack-bar-container.text-info .mat-simple-snackbar{margin-left:1.1rem!important}.mat-simple-snackbar-action.text-info:after,.mat-snack-bar-container.text-info:after{content:\"❕\"!important;position:absolute;top:.9rem;left:.6rem;font-size:1rem}.mat-simple-snackbar-action.text-success,.mat-snack-bar-container.text-success{position:relative;background:#3ddf7e!important}.mat-simple-snackbar-action.text-success .mat-simple-snackbar,.mat-snack-bar-container.text-success .mat-simple-snackbar{margin-left:1.1rem!important}.mat-simple-snackbar-action.text-success:after,.mat-snack-bar-container.text-success:after{content:\"✔\"!important;position:absolute;top:.9rem;left:.6rem;font-size:1rem}.mat-simple-snackbar-action>button{padding-top:0!important}.mat-tooltip{font-size:15px}.ngx-pagination .current{background:#4b6fff!important}.ngx-pagination .current,.ngx-pagination .current:hover{border-radius:50%;padding:9px 15px!important;font-size:18px!important}.ngx-pagination a,.ngx-pagination li{border-radius:50%!important;padding:9px 15px!important;font-size:18px!important}.ngx-pagination a:focus,.ngx-pagination button:focus,.ngx-pagination li:focus{outline:none!important;border-radius:50%!important}.ngx-pagination .pagination-next a,.ngx-pagination .pagination-previous a,.ngx-pagination a{padding:9px 15px!important;font-size:18px!important}.ngx-pagination .pagination-next a:after,.ngx-pagination .pagination-previous a:before{margin:0!important}ul{list-style:none!important}ul.help-list li:before{content:\"\\a\";width:10px;height:10px;border-radius:50%;display:inline-block;margin:0 10px;background:#4b6fff;font-weight:700}.help-menu{height:40px!important}.interaction-btn{position:fixed;bottom:0;right:0;margin:10px}.help-list>li{padding:5px}.sort-toggle{height:43px;display:flex;align-items:center;justify-content:center}.sort-toggle .mat-button-toggle-label-content{padding:0!important}.cursor-pointer{cursor:pointer}.refresh-interval .mat-form-field-infix{padding:2px 2px 7px!important;margin:0!important}.header-modal .mat-dialog-container{padding:0!important;overflow:unset!important}.header-dialog-title{height:50px}.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:#3ddf7e!important}.mat-list-item-disabled{background-color:inherit!important;color:grey!important}.info-modal .mat-dialog-container{padding:0!important;overflow:unset!important}.info-dialog-content{overflow:auto!important;max-height:500px!important}.info-dialog-title{height:50px;font-size:18px;font-weight:500;font-stretch:normal;font-style:normal;line-height:1.22;letter-spacing:normal;text-align:left;color:#fff}.help-content{max-width:1000px}.job-status-table>thead>tr>.mat-sort-header>div{justify-content:center!important}::-webkit-scrollbar{height:10px;cursor:pointer;background:#fff}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.2)}::-webkit-scrollbar-thumb{background:#cecece;border-radius:0;cursor:pointer}.wrapper{width:calc(100vw - 16px);height:calc(100vh - 107px);display:flex;padding:8px}.json-option{position:absolute;right:50%;margin:10px 20px;color:#dee0f2}.json-option .mat-checkbox-frame{border-color:#bec6ef}.json-option span.mat-checkbox-label{position:relative;top:1px;font-size:14px}.json-option .mat-checkbox-checked.mat-accent .mat-checkbox-frame{border:none}.json-option.mat-checkbox-checked .mat-checkbox-frame{border-color:transparent}.ace-jsoneditor.ace_editor,.jsoneditor-schema-error,div.jsoneditor-field,div.jsoneditor-value,div.jsoneditor td,div.jsoneditor textarea,div.jsoneditor th{line-height:1.5!important;-webkit-text-stroke-width:.1px;color:#585858;font-size:15px!important;-webkit-font-smoothing:antialiased}div.jsoneditor-menu>button,div.jsoneditor-menu>div.jsoneditor-modes>button{outline:none}div.jsoneditor td.jsoneditor-separator{padding:3px 0;vertical-align:middle;color:#585858}.ace_gutter-cell{padding:0 13px!important}.ace-jsoneditor .ace_gutter{background:#fff;color:#000}.ace-jsoneditor000000.ace_variable{color:#444!important}div.jsoneditor-field{color:#000}div.jsoneditor-value.jsoneditor-number{color:red}div.jsoneditor-value.jsoneditor-string{color:green!important}div.jsoneditor-value.jsoneditor-boolean{color:#ff8c00}div.jsoneditor-statusbar{line-height:30px;height:30px;color:#000;background-color:#fff;font-weight:500;font-size:14px;margin:0;border:1px solid #ccc;border-bottom:none;border-radius:0 0 4px 4px}span.jsoneditor-parse-error-icon{margin:3px!important}div.jsoneditor-statusbar>.jsoneditor-curserinfo-val{margin-right:7px}div.jsoneditor-navigation-bar{font-weight:500;font-size:14px;height:30px;line-height:30px;font-family:Roboto;background:#fff;color:#444;border:1px solid #ccc;border-bottom:none}div.jsoneditor-outer.has-nav-bar.has-main-menu-bar{margin-top:-75px;padding-top:75px}.ace_editor.ace-jsoneditor{border:1px solid #ccc;width:calc(100% - 2px)!important}div.jsoneditor-tree{background:#fff;border:1px solid #ccc;width:calc(100% - 2px)}div.jsoneditor-treepath span.jsoneditor-treepath-element{font-weight:500;font-size:14px;font-family:Roboto;margin:2px}div.jsoneditor-treepath span.jsoneditor-treepath-seperator{font-size:10px;position:relative;top:-1px;margin:3px}div.jsoneditor{color:#565656;box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12);border:none;border-radius:4px}.left,.right{width:50%;height:100%}.left{margin-right:8px}table.jsoneditor-search button{outline:none}div.jsoneditor-tree button.jsoneditor-expanded{background-position:0 -70px}div.jsoneditor-tree button.jsoneditor-collapsed{background-position:0 -46px}div.jsoneditor-menu{background:#4b6fff!important;border:none;height:45px;padding:7px 5px;border-radius:4px 4px 0 0}div.jsoneditor-outer.has-main-menu-bar{margin-top:-45px;padding-top:45px}div.jsoneditor-outer.has-status-bar{margin-bottom:-30px;padding-bottom:30px}div.jsoneditor-menu a.jsoneditor-poweredBy{display:none}div.jsoneditor-tree div.jsoneditor-color{position:relative;top:3px;left:2px}.jsoneditor-tree input[type=checkbox]{position:relative;height:14px;width:14px;top:4px;left:1px;z-index:2;cursor:pointer}.jsoneditor-tree input[type=checkbox]+label{background:url(/assets/unchecked.svg) no-repeat;height:14px;width:14px;background-size:13px;margin-top:4px;margin-left:4px;padding:0;position:absolute;top:0;left:0;z-index:1}.jsoneditor-tree input[type=checkbox]:checked+label{background:url(/assets/checked.svg) no-repeat;height:14px;width:14px;background-size:13px;margin-top:5px;margin-left:4px;padding:0;position:absolute}table.jsoneditor-search{right:5px;top:5px}table.jsoneditor-search div.jsoneditor-frame{width:300px;padding:0 7px;box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);border-radius:4px;height:35px;border:none}div.jsoneditor .jsoneditor-search input{font-size:14px;width:245px;height:35px;padding:0;margin:0;font-family:Roboto}table.jsoneditor-search button.jsoneditor-refresh{width:24px;background-position:-99px -67px}table.jsoneditor-search button.jsoneditor-next:hover{background-position:-124px -43px}table.jsoneditor-search button.jsoneditor-previous:hover{background-position:-148px -43px}table.jsoneditor-search button.jsoneditor-next{background-position:-124px -67px}table.jsoneditor-search button.jsoneditor-previous{background-position:-148px -67px}table.jsoneditor-search div.jsoneditor-results{color:#fff;font-size:14px;line-height:32px;font-family:Roboto;text-transform:capitalize;-webkit-text-stroke-width:0;margin-right:5px}.ace-jsoneditor .ace_indent-guide{filter:contrast(.6);position:relative;left:4px}tr.jsoneditor-highlight,tr.jsoneditor-selected{background-color:#eee}div.jsoneditor-tree button.jsoneditor-contextmenu{background-position:-48px -70px}div.jsoneditor-tree button.jsoneditor-contextmenu.jsoneditor-selected,div.jsoneditor-tree button.jsoneditor-contextmenu:focus,div.jsoneditor-tree button.jsoneditor-contextmenu:hover,tr.jsoneditor-selected.jsoneditor-first button.jsoneditor-contextmenu{background-position:-48px -46px}div.jsoneditor-tree button.jsoneditor-dragarea{background-position:-72px -70px}div.jsoneditor-tree button.jsoneditor-dragarea:focus,div.jsoneditor-tree button.jsoneditor-dragarea:hover,tr.jsoneditor-selected.jsoneditor-first button.jsoneditor-dragarea{background-position:-72px -46px}.jsoneditor-modal{font-size:14px;font-family:Roboto;padding:52px 15px 15px!important;box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12)!important;color:#4d4d4d;border-radius:4px!important;border:transparent!important;line-height:20px!important}.jsoneditor-modal .pico-modal-header{background:linear-gradient(180deg,#556cea,#3f51b5)!important;height:52px;line-height:52px;padding:0 15px;font-size:16px;font-family:Roboto;border:none!important}.jsoneditor-modal .pico-close{width:16px!important;height:16px!important;margin:11px 5px}.jsoneditor-modal .jsoneditor-jmespath-label{color:#4e64da;font-weight:500}.jsoneditor-jmespath-block.jsoneditor-modal-actions{float:right;margin:0!important;outline:none}.jsoneditor-modal .jsoneditor-jmespath-block{margin-bottom:10px}.jsoneditor-modal input[type=button],.jsoneditor-modal input[type=submit],.picker_done button{box-sizing:border-box;position:relative;-webkit-user-select:none;user-select:none;cursor:pointer;outline:0;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:initial;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;transform:translateZ(0);transition:background .4s cubic-bezier(.25,.8,.25,1),box-shadow .28s cubic-bezier(.4,0,.2,1);box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);font-size:14px;color:#444}.jsoneditor-repair,.jsoneditor-search,.jsoneditor-sort,.jsoneditor-transform{display:none}.jsoneditor-modal #query,.jsoneditor-modal .jsoneditor-transform-preview{font-family:Roboto Mono;font-size:12px;box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);outline:none}.jsoneditor-modal-overlay{background:rgba(0,0,0,.32)!important;opacity:1!important}.jsoneditor-modal table td,.jsoneditor-modal table th{padding:15px 0 0;font-size:14px;min-width:75px;font-family:Roboto;vertical-align:middle}.jsoneditor-modal .jsoneditor-jmespath-filter-field,.jsoneditor-modal .jsoneditor-jmespath-filter-relation,.jsoneditor-modal .jsoneditor-jmespath-sort-field,.jsoneditor-modal .jsoneditor-jmespath-sort-order{width:calc(50% - 2px);text-transform:capitalize}.jsoneditor-modal .jsoneditor-jmespath-filter-value input{width:calc(50% - 23px);height:22px}.jsoneditor-modal .selectr-input-container input.selectr-input{margin:10px}.jsoneditor-modal .selectr-placeholder{color:#777}.jsoneditor-modal .selectr-selected,.jsoneditor-modal input,.jsoneditor-modal select{padding:6px 10px;font-size:14px;height:36px;line-height:1.5em;font-family:Roboto;min-width:203px;outline:none;box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.jsoneditor-modal .jsoneditor-button-group.jsoneditor-button-group-value-asc input.jsoneditor-button-asc,.jsoneditor-modal .jsoneditor-button-group.jsoneditor-button-group-value-desc input.jsoneditor-button-desc{border-left-style:none;background:linear-gradient(180deg,#4a5fd1,#3f51b5)!important;border-color:#4356bf!important;border-top-right-radius:0;border-bottom-right-radius:0}.jsoneditor-modal .jsoneditor-button-group input.jsoneditor-button-first{border-left-style:none}.jsoneditor-button-group{margin-left:15px}.jsoneditor-modal .jsoneditor-button-group input.jsoneditor-button-last{border-top-left-radius:0;border-bottom-left-radius:0}input#ok{background:linear-gradient(180deg,#556cea,#3f51b5);color:#fff}div.jsoneditor-contextmenu ul{width:175px;box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);border-radius:4px;border:none;left:5px}div.jsoneditor-contextmenu ul li ul{padding:2px 10px!important;box-shadow:inset 0 0 7px #a8a8a8}div.jsoneditor-contextmenu div.jsoneditor-text{padding:8px 8px 8px 25px;word-wrap:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}div.jsoneditor-contextmenu button.jsoneditor-type-modes .jsoneditor-text{padding-left:8px}div.jsoneditor-contextmenu ul li button{padding:0;font-size:13px;font-family:Roboto;width:100%;-webkit-text-stroke-width:.1px}div.jsoneditor-contextmenu ul li button:focus,div.jsoneditor-contextmenu ul li button:hover{color:#444;background:#eee}div.jsoneditor-contextmenu ul li ul li button{padding-left:25px}div.jsoneditor-contextmenu div.jsoneditor-icon,div.jsoneditor-contextmenu ul li button div.jsoneditor-expand{top:4px}div.jsoneditor-contextmenu ul li{margin:0;box-sizing:unset}div.jsoneditor-contextmenu div.jsoneditor-separator{padding:0;margin:0}div.jsoneditor-contextmenu ul li button.jsoneditor-expand{height:31px;width:31px}div.jsoneditor-contextmenu ul li button.jsoneditor-default{width:calc(100% - 31px)}div.jsoneditor-contextmenu ul li button.jsoneditor-selected,div.jsoneditor-contextmenu ul li button.jsoneditor-selected:focus,div.jsoneditor-contextmenu ul li button.jsoneditor-selected:hover{background:linear-gradient(180deg,#556cea,#3f51b5);-webkit-text-stroke-width:0}div.jsoneditor-contextmenu ul li button.jsoneditor-selected .jsoneditor-text{color:#fff}.picker_arrow{display:none}div.jsoneditor div.jsoneditor-anchor .picker_wrapper.popup.popup_bottom{margin:0;font-family:Roboto!important;width:225px;box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);background:#fff;border-radius:4px;top:20px;left:0}.picker_editor input{font-family:Roboto!important;font-size:14px!important;outline:none;border:1px solid #ccc;border-radius:2px}.picker_done button{line-height:19px;min-width:50px;font-family:Roboto;font-size:14px!important;background:#485ccb;color:#fff;border-radius:3px}.ace_search{border-radius:4px 0 0 4px!important;border:none!important;font-family:Roboto!important;padding:5px!important;font-size:14px;background:#fff!important;width:329px;box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12)}.ace_search_field{border-radius:4px 0 0 4px!important;padding:2px 7px!important;min-width:32px!important;width:191px}.ace_searchbtn{padding:2px 11px!important}.ace_search_form.ace_nomatch{border-radius:4px;outline:none!important;border:1px solid red;margin-right:23px!important;width:calc(100% - 27px)}.ace_search_form.ace_nomatch .ace_search_field{border-width:0!important}.ace_search_form.ace_nomatch .ace_searchbtn{border-width:0 0 0 1px!important}.ace_replace_form{margin-right:23px!important}.ace_searchbtn.next,.ace_searchbtn.prev{padding:2px 13px!important}.ace_searchbtn.next:after,.ace_searchbtn.prev:after{position:relative}.ace_searchbtn.prev:after{left:2px}.ace_searchbtn.next:after{left:-2px}.ace_button{margin:0 2px 0 0!important;padding:5px 10px!important;font-size:14px!important;background:#fff!important;line-height:17px!important;border-radius:4px;display:inline-block;opacity:1!important;color:#444!important;border:1px solid #cbcbcb!important}.ace_button:hover{background:#f4f6ff!important}.ace_button.checked{border-color:#39f!important}.ace_search_counter{padding:4px 10px!important}.ace_replace_form,.ace_search_form{margin-bottom:5px!important}.ace_search_options{margin:0 23px 0 0!important;height:29px}.color-scheme-dark{background:#6c6c6c}.color-scheme-dark .ace-jsoneditor.ace_editor,.color-scheme-dark .jsoneditor-schema-error,.color-scheme-dark div.jsoneditor-field,.color-scheme-dark div.jsoneditor-value,.color-scheme-dark div.jsoneditor td,.color-scheme-dark div.jsoneditor textarea,.color-scheme-dark div.jsoneditor th{-webkit-text-stroke-width:0}.color-scheme-dark .json-option .mat-checkbox-frame{border-color:#bcbcbc}.color-scheme-dark .json-option{color:#bcbcbc}.color-scheme-dark ::-webkit-scrollbar{width:10px;height:10px;cursor:pointer;background:#585858}.confirmation-dark{width:360px}.confirmation-dark .mat-dialog-container{padding:15px;border-radius:2px;overflow:hidden;background:#525252;color:#fff}.confirmation-dark .mat-dialog-container h1{font-size:18px;background:#848484;margin:-15px -15px 10px;padding:10px 15px;color:#fff;font-weight:400}.confirmation-dark .mat-dialog-content{margin:-10px -16px 10px;padding:5px 15px;font-size:16px}.confirmation-dark .mat-dialog-actions{padding:5px 10px;margin:-15px;display:inline-block;float:right;min-height:40px}.confirmation-dark button.mat-button{float:right;right:0}.confirmation-dark .mat-raised-button{color:#fff;background:#838383}.color-scheme-dark ::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.2)}.color-scheme-dark ::-webkit-scrollbar-thumb{background:#9b9b9b;border-radius:0;cursor:pointer}.color-scheme-dark .ace_editor.ace-jsoneditor{border:1px solid #545454}.color-scheme-dark div.jsoneditor-tree{border:1px solid #3d3d3d}.color-scheme-dark .ace-jsoneditor .ace_scroller{background-color:#232323}.color-scheme-dark .ace-jsoneditor .ace_marker-layer .ace_selection{background:grey}.color-scheme-dark .ace-jsoneditor .ace_marker-layer .ace_active-line{background:#545454}.color-scheme-dark .ace-jsoneditor .ace_text-layer{color:#f3f3f3}.color-scheme-dark .ace-jsoneditor .ace_variable{color:#f8f8f8!important}.color-scheme-dark .ace-jsoneditor .ace_constant.ace_language,.color-scheme-dark .ace-jsoneditor .ace_constant.ace_numeric{color:#f44}.color-scheme-dark .ace-jsoneditor .ace_string{color:#0dda16!important}.color-scheme-dark .jsoneditor-readonly,.color-scheme-dark div.jsoneditor-value.jsoneditor-array,.color-scheme-dark div.jsoneditor-value.jsoneditor-object{color:#e9e9e9}.color-scheme-dark div.jsoneditor-field{color:#f8f8f8}.color-scheme-dark div.jsoneditor-value.jsoneditor-string{color:#0dda16!important}.color-scheme-dark div.jsoneditor td.jsoneditor-separator{color:#f2f2f2}.color-scheme-dark div.jsoneditor-value.jsoneditor-number{color:#ff3d26}.color-scheme-dark div.jsoneditor-value.jsoneditor-null{color:#65bbff}.color-scheme-dark div.jsoneditor-menu{background:#4b6fff!important}.color-scheme-dark .jsoneditor-statusbar{color:#fff;background:#3d3d3d;border:none}.color-scheme-dark div.jsoneditor-navigation-bar{color:#fff;background:#3d3d3d;border:none;line-height:31px}.color-scheme-dark tr.jsoneditor-highlight,.color-scheme-dark tr.jsoneditor-selected{background-color:#545454}.color-scheme-dark div.jsoneditor-field.jsoneditor-highlight,.color-scheme-dark div.jsoneditor-field[contenteditable=true]:focus,.color-scheme-dark div.jsoneditor-field[contenteditable=true]:hover,.color-scheme-dark div.jsoneditor-value.jsoneditor-highlight,.color-scheme-dark div.jsoneditor-value[contenteditable=true]:focus,.color-scheme-dark div.jsoneditor-value[contenteditable=true]:hover{background-color:#545454;border:1px solid #232323}.color-scheme-dark div.jsoneditor-tree button{filter:contrast(2) brightness(10)}.color-scheme-dark div.jsoneditor-tree button:focus{background-color:hsla(0,0%,100%,.14);outline:1px solid hsla(0,0%,89.8%,.26)}.color-scheme-dark div.jsoneditor-contextmenu ul{background:#3d3d3d;border:1px solid #616161}.color-scheme-dark div.jsoneditor-contextmenu div.jsoneditor-separator,.color-scheme-dark div.jsoneditor-contextmenu ul li button.jsoneditor-expand{border-color:#616161}.color-scheme-dark div.jsoneditor-contextmenu ul li button div.jsoneditor-expand{filter:contrast(2) brightness(10)}.color-scheme-dark div.jsoneditor-contextmenu ul li button{-webkit-text-stroke-width:0;color:#fff}.color-scheme-dark div.jsoneditor-contextmenu ul li ul li button:focus,.color-scheme-dark div.jsoneditor-contextmenu ul li ul li button:hover{background-color:#7c7c7c}.color-scheme-dark .ace-jsoneditor .ace_gutter{background:#333;color:#fff}.color-scheme-dark .ace_content,.color-scheme-dark .jsoneditor-tree{background:#232323}.color-scheme-dark tr.jsoneditor-highlight .jsoneditor-tree,.color-scheme-dark tr.jsoneditor-selected .jsoneditor-tree{background:#545454}.color-scheme-dark div.jsoneditor-contextmenu ul li button{filter:none}.color-scheme-dark div.jsoneditor-contextmenu ul li button:focus,.color-scheme-dark div.jsoneditor-contextmenu ul li button:hover{background-color:#7d7d7d}.color-scheme-dark .ace-jsoneditor .ace_gutter-active-line{background-color:#797979}.color-scheme-dark table.jsoneditor-search div.jsoneditor-frame{background-color:#565656!important}.color-scheme-dark div.jsoneditor .jsoneditor-search input{color:#fff}.color-scheme-dark .ace-jsoneditor .ace_marker-layer .ace_selected-word{border:1px solid grey}.color-scheme-dark .ace-jsoneditor .ace_cursor{border-left:2px solid #e6e6e6}.color-scheme-dark .ace-jsoneditor .ace_indent-guide{filter:contrast(0)}.color-scheme-dark .jsoneditor-modal .pico-modal-header{background:#848484!important}.color-scheme-dark .jsoneditor-modal{background:#525252!important;color:#fff!important}.color-scheme-dark .jsoneditor-modal .jsoneditor-jmespath-label,.color-scheme-dark .jsoneditor-modal table td,.color-scheme-dark .jsoneditor-modal table th{color:#fff}.color-scheme-dark .jsoneditor-modal #query,.color-scheme-dark .jsoneditor-modal .jsoneditor-transform-preview{background-color:#787878;color:#fff;border-color:#343434}.color-scheme-dark .jsoneditor-modal .selectr-selected,.color-scheme-dark .jsoneditor-modal input,.color-scheme-dark .jsoneditor-modal select{background:#707070;color:#fff;border-color:#515151}.color-scheme-dark .jsoneditor-modal .selectr-placeholder{color:#fff}.color-scheme-dark .selectr-option{background-color:#707070}.color-scheme-dark .selectr-option.active{color:#fff;background-color:#3883fa}.color-scheme-dark .selectr-input-container{background:#525252}.color-scheme-dark .selectr-options-container{border-color:#474747}.color-scheme-dark .selectr-clear:after,.color-scheme-dark .selectr-clear:before,.color-scheme-dark .selectr-input-clear:after,.color-scheme-dark .selectr-input-clear:before,.color-scheme-dark .selectr-tag-remove:after,.color-scheme-dark .selectr-tag-remove:before{background-color:#fff}.color-scheme-dark .selectr-selected:before{border-color:#fff transparent transparent}.color-scheme-dark div.jsoneditor div.jsoneditor-anchor .picker_wrapper.popup.popup_bottom{background:#6d6d6d}.color-scheme-dark .picker_editor input{background:#232323;color:#fff}body,html{height:100%}body{margin:0;-webkit-font-smoothing:antialiased}button{outline:none!important}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-track{background:#f1f1f1!important}::-webkit-scrollbar-thumb,::-webkit-scrollbar-thumb:hover{background:#4b6fff!important}@media (min-width:599px){.xs\\:container{width:100%;margin-right:auto;margin-left:auto}}@media (min-width:599px) and (min-width:599px){.xs\\:container{max-width:599px}}@media (min-width:599px) and (min-width:600px){.xs\\:container{max-width:600px}}@media (min-width:599px) and (min-width:960px){.xs\\:container{max-width:960px}}@media (min-width:599px) and (min-width:1280px){.xs\\:container{max-width:1280px}}@media (min-width:599px) and (min-width:1920px){.xs\\:container{max-width:1920px}}@media (min-width:599px){.xs\\:space-y-0>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(0px * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(0px * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:space-x-0>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(0px * var(--space-x-reverse))!important;margin-left:calc(0px * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:space-y-1>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(.25rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:space-x-1>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(.25rem * var(--space-x-reverse))!important;margin-left:calc(.25rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:space-y-2>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(.5rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:space-x-2>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(.5rem * var(--space-x-reverse))!important;margin-left:calc(.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:space-y-3>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(.75rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(.75rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:space-x-3>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(.75rem * var(--space-x-reverse))!important;margin-left:calc(.75rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:space-y-4>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:space-x-4>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1rem * var(--space-x-reverse))!important;margin-left:calc(1rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:space-y-5>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1.25rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:space-x-5>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1.25rem * var(--space-x-reverse))!important;margin-left:calc(1.25rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:space-y-6>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1.5rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:space-x-6>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1.5rem * var(--space-x-reverse))!important;margin-left:calc(1.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:space-y-8>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(2rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(2rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:space-x-8>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(2rem * var(--space-x-reverse))!important;margin-left:calc(2rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:space-y-10>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(2.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(2.5rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:space-x-10>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(2.5rem * var(--space-x-reverse))!important;margin-left:calc(2.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:space-y-12>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(3rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(3rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:space-x-12>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(3rem * var(--space-x-reverse))!important;margin-left:calc(3rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:space-y-16>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(4rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(4rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:space-x-16>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(4rem * var(--space-x-reverse))!important;margin-left:calc(4rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:space-y-20>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(5rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:space-x-20>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(5rem * var(--space-x-reverse))!important;margin-left:calc(5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:space-y-24>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(6rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(6rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:space-x-24>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(6rem * var(--space-x-reverse))!important;margin-left:calc(6rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:space-y-32>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(8rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(8rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:space-x-32>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(8rem * var(--space-x-reverse))!important;margin-left:calc(8rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:space-y-40>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(10rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(10rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:space-x-40>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(10rem * var(--space-x-reverse))!important;margin-left:calc(10rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:space-y-48>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(12rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(12rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:space-x-48>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(12rem * var(--space-x-reverse))!important;margin-left:calc(12rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:space-y-56>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(14rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(14rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:space-x-56>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(14rem * var(--space-x-reverse))!important;margin-left:calc(14rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:space-y-64>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(16rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(16rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:space-x-64>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(16rem * var(--space-x-reverse))!important;margin-left:calc(16rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:space-y-px>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1px * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1px * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:space-x-px>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1px * var(--space-x-reverse))!important;margin-left:calc(1px * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:-space-y-1>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-.25rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:-space-x-1>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-.25rem * var(--space-x-reverse))!important;margin-left:calc(-.25rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:-space-y-2>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-.5rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:-space-x-2>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-.5rem * var(--space-x-reverse))!important;margin-left:calc(-.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:-space-y-3>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-.75rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-.75rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:-space-x-3>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-.75rem * var(--space-x-reverse))!important;margin-left:calc(-.75rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:-space-y-4>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:-space-x-4>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1rem * var(--space-x-reverse))!important;margin-left:calc(-1rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:-space-y-5>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1.25rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:-space-x-5>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1.25rem * var(--space-x-reverse))!important;margin-left:calc(-1.25rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:-space-y-6>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1.5rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:-space-x-6>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1.5rem * var(--space-x-reverse))!important;margin-left:calc(-1.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:-space-y-8>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-2rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-2rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:-space-x-8>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-2rem * var(--space-x-reverse))!important;margin-left:calc(-2rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:-space-y-10>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-2.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-2.5rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:-space-x-10>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-2.5rem * var(--space-x-reverse))!important;margin-left:calc(-2.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:-space-y-12>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-3rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-3rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:-space-x-12>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-3rem * var(--space-x-reverse))!important;margin-left:calc(-3rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:-space-y-16>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-4rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-4rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:-space-x-16>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-4rem * var(--space-x-reverse))!important;margin-left:calc(-4rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:-space-y-20>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-5rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:-space-x-20>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-5rem * var(--space-x-reverse))!important;margin-left:calc(-5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:-space-y-24>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-6rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-6rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:-space-x-24>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-6rem * var(--space-x-reverse))!important;margin-left:calc(-6rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:-space-y-32>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-8rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-8rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:-space-x-32>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-8rem * var(--space-x-reverse))!important;margin-left:calc(-8rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:-space-y-40>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-10rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-10rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:-space-x-40>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-10rem * var(--space-x-reverse))!important;margin-left:calc(-10rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:-space-y-48>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-12rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-12rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:-space-x-48>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-12rem * var(--space-x-reverse))!important;margin-left:calc(-12rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:-space-y-56>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-14rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-14rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:-space-x-56>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-14rem * var(--space-x-reverse))!important;margin-left:calc(-14rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:-space-y-64>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-16rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-16rem * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:-space-x-64>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-16rem * var(--space-x-reverse))!important;margin-left:calc(-16rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:-space-y-px>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1px * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1px * var(--space-y-reverse))!important}}@media (min-width:599px){.xs\\:-space-x-px>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1px * var(--space-x-reverse))!important;margin-left:calc(-1px * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:599px){.xs\\:space-y-reverse>:not(template)~:not(template){--space-y-reverse:1!important}}@media (min-width:599px){.xs\\:space-x-reverse>:not(template)~:not(template){--space-x-reverse:1!important}}@media (min-width:599px){.xs\\:divide-y-0>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(0px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(0px * var(--divide-y-reverse))!important}}@media (min-width:599px){.xs\\:divide-x-0>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(0px * var(--divide-x-reverse))!important;border-left-width:calc(0px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:599px){.xs\\:divide-y-2>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(2px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(2px * var(--divide-y-reverse))!important}}@media (min-width:599px){.xs\\:divide-x-2>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(2px * var(--divide-x-reverse))!important;border-left-width:calc(2px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:599px){.xs\\:divide-y-4>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(4px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(4px * var(--divide-y-reverse))!important}}@media (min-width:599px){.xs\\:divide-x-4>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(4px * var(--divide-x-reverse))!important;border-left-width:calc(4px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:599px){.xs\\:divide-y-8>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(8px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(8px * var(--divide-y-reverse))!important}}@media (min-width:599px){.xs\\:divide-x-8>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(8px * var(--divide-x-reverse))!important;border-left-width:calc(8px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:599px){.xs\\:divide-y>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(1px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(1px * var(--divide-y-reverse))!important}}@media (min-width:599px){.xs\\:divide-x>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(1px * var(--divide-x-reverse))!important;border-left-width:calc(1px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:599px){.xs\\:divide-y-reverse>:not(template)~:not(template){--divide-y-reverse:1!important}}@media (min-width:599px){.xs\\:divide-x-reverse>:not(template)~:not(template){--divide-x-reverse:1!important}}@media (min-width:599px){.xs\\:divide-transparent>:not(template)~:not(template){border-color:transparent!important}}@media (min-width:599px){.xs\\:divide-current>:not(template)~:not(template){border-color:currentColor!important}}@media (min-width:599px){.xs\\:divide-black>:not(template)~:not(template){--divide-opacity:1!important;border-color:#000!important;border-color:rgba(0,0,0,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-white>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fff!important;border-color:rgba(255,255,255,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-gray-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f7fafc!important;border-color:rgba(247,250,252,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-gray-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#edf2f7!important;border-color:rgba(237,242,247,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-gray-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e2e8f0!important;border-color:rgba(226,232,240,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-gray-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#cbd5e0!important;border-color:rgba(203,213,224,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-gray-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#a0aec0!important;border-color:rgba(160,174,192,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-gray-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#718096!important;border-color:rgba(113,128,150,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-gray-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4a5568!important;border-color:rgba(74,85,104,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-gray-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2d3748!important;border-color:rgba(45,55,72,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-gray-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#1a202c!important;border-color:rgba(26,32,44,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-red-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fff5f5!important;border-color:rgba(255,245,245,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-red-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fed7d7!important;border-color:rgba(254,215,215,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-red-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#feb2b2!important;border-color:rgba(254,178,178,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-red-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fc8181!important;border-color:rgba(252,129,129,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-red-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f56565!important;border-color:rgba(245,101,101,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-red-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e53e3e!important;border-color:rgba(229,62,62,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-red-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c53030!important;border-color:rgba(197,48,48,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-red-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9b2c2c!important;border-color:rgba(155,44,44,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-red-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#742a2a!important;border-color:rgba(116,42,42,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-orange-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fffaf0!important;border-color:rgba(255,250,240,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-orange-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#feebc8!important;border-color:rgba(254,235,200,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-orange-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fbd38d!important;border-color:rgba(251,211,141,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-orange-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f6ad55!important;border-color:rgba(246,173,85,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-orange-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ed8936!important;border-color:rgba(237,137,54,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-orange-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#dd6b20!important;border-color:rgba(221,107,32,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-orange-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c05621!important;border-color:rgba(192,86,33,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-orange-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9c4221!important;border-color:rgba(156,66,33,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-orange-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#7b341e!important;border-color:rgba(123,52,30,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-yellow-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:ivory!important;border-color:rgba(255,255,240,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-yellow-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fefcbf!important;border-color:rgba(254,252,191,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-yellow-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#faf089!important;border-color:rgba(250,240,137,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-yellow-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f6e05e!important;border-color:rgba(246,224,94,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-yellow-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ecc94b!important;border-color:rgba(236,201,75,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-yellow-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#d69e2e!important;border-color:rgba(214,158,46,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-yellow-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b7791f!important;border-color:rgba(183,121,31,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-yellow-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#975a16!important;border-color:rgba(151,90,22,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-yellow-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#744210!important;border-color:rgba(116,66,16,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-green-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f0fff4!important;border-color:rgba(240,255,244,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-green-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c6f6d5!important;border-color:rgba(198,246,213,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-green-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9ae6b4!important;border-color:rgba(154,230,180,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-green-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#68d391!important;border-color:rgba(104,211,145,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-green-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#48bb78!important;border-color:rgba(72,187,120,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-green-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#38a169!important;border-color:rgba(56,161,105,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-green-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2f855a!important;border-color:rgba(47,133,90,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-green-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#276749!important;border-color:rgba(39,103,73,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-green-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#22543d!important;border-color:rgba(34,84,61,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-teal-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e6fffa!important;border-color:rgba(230,255,250,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-teal-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b2f5ea!important;border-color:rgba(178,245,234,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-teal-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#81e6d9!important;border-color:rgba(129,230,217,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-teal-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4fd1c5!important;border-color:rgba(79,209,197,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-teal-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#38b2ac!important;border-color:rgba(56,178,172,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-teal-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#319795!important;border-color:rgba(49,151,149,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-teal-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2c7a7b!important;border-color:rgba(44,122,123,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-teal-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#285e61!important;border-color:rgba(40,94,97,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-teal-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#234e52!important;border-color:rgba(35,78,82,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-blue-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ebf8ff!important;border-color:rgba(235,248,255,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-blue-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#bee3f8!important;border-color:rgba(190,227,248,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-blue-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#90cdf4!important;border-color:rgba(144,205,244,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-blue-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#63b3ed!important;border-color:rgba(99,179,237,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-blue-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4299e1!important;border-color:rgba(66,153,225,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-blue-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#3182ce!important;border-color:rgba(49,130,206,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-blue-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2b6cb0!important;border-color:rgba(43,108,176,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-blue-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2c5282!important;border-color:rgba(44,82,130,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-blue-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2a4365!important;border-color:rgba(42,67,101,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-indigo-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ebf4ff!important;border-color:rgba(235,244,255,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-indigo-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c3dafe!important;border-color:rgba(195,218,254,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-indigo-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#a3bffa!important;border-color:rgba(163,191,250,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-indigo-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#7f9cf5!important;border-color:rgba(127,156,245,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-indigo-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#667eea!important;border-color:rgba(102,126,234,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-indigo-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#5a67d8!important;border-color:rgba(90,103,216,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-indigo-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4c51bf!important;border-color:rgba(76,81,191,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-indigo-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#434190!important;border-color:rgba(67,65,144,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-indigo-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#3c366b!important;border-color:rgba(60,54,107,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-purple-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#faf5ff!important;border-color:rgba(250,245,255,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-purple-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e9d8fd!important;border-color:rgba(233,216,253,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-purple-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#d6bcfa!important;border-color:rgba(214,188,250,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-purple-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b794f4!important;border-color:rgba(183,148,244,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-purple-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9f7aea!important;border-color:rgba(159,122,234,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-purple-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#805ad5!important;border-color:rgba(128,90,213,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-purple-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#6b46c1!important;border-color:rgba(107,70,193,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-purple-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#553c9a!important;border-color:rgba(85,60,154,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-purple-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#44337a!important;border-color:rgba(68,51,122,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-pink-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fff5f7!important;border-color:rgba(255,245,247,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-pink-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fed7e2!important;border-color:rgba(254,215,226,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-pink-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fbb6ce!important;border-color:rgba(251,182,206,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-pink-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f687b3!important;border-color:rgba(246,135,179,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-pink-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ed64a6!important;border-color:rgba(237,100,166,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-pink-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#d53f8c!important;border-color:rgba(213,63,140,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-pink-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b83280!important;border-color:rgba(184,50,128,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-pink-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#97266d!important;border-color:rgba(151,38,109,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-pink-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#702459!important;border-color:rgba(112,36,89,var(--divide-opacity))!important}}@media (min-width:599px){.xs\\:divide-solid>:not(template)~:not(template){border-style:solid!important}}@media (min-width:599px){.xs\\:divide-dashed>:not(template)~:not(template){border-style:dashed!important}}@media (min-width:599px){.xs\\:divide-dotted>:not(template)~:not(template){border-style:dotted!important}}@media (min-width:599px){.xs\\:divide-double>:not(template)~:not(template){border-style:double!important}}@media (min-width:599px){.xs\\:divide-none>:not(template)~:not(template){border-style:none!important}}@media (min-width:599px){.xs\\:divide-opacity-0>:not(template)~:not(template){--divide-opacity:0!important}}@media (min-width:599px){.xs\\:divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25!important}}@media (min-width:599px){.xs\\:divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5!important}}@media (min-width:599px){.xs\\:divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75!important}}@media (min-width:599px){.xs\\:divide-opacity-100>:not(template)~:not(template){--divide-opacity:1!important}}@media (min-width:599px){.xs\\:sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}}@media (min-width:599px){.xs\\:not-sr-only{position:static!important;width:auto!important;height:auto!important;padding:0!important;margin:0!important;overflow:visible!important;clip:auto!important;white-space:normal!important}}@media (min-width:599px){.xs\\:focus\\:sr-only:focus{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}}@media (min-width:599px){.xs\\:focus\\:not-sr-only:focus{position:static!important;width:auto!important;height:auto!important;padding:0!important;margin:0!important;overflow:visible!important;clip:auto!important;white-space:normal!important}}@media (min-width:599px){.xs\\:appearance-none{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important}}@media (min-width:599px){.xs\\:bg-fixed{background-attachment:fixed!important}}@media (min-width:599px){.xs\\:bg-local{background-attachment:local!important}}@media (min-width:599px){.xs\\:bg-scroll{background-attachment:scroll!important}}@media (min-width:599px){.xs\\:bg-clip-border{background-clip:initial!important}}@media (min-width:599px){.xs\\:bg-clip-padding{background-clip:padding-box!important}}@media (min-width:599px){.xs\\:bg-clip-content{background-clip:content-box!important}}@media (min-width:599px){.xs\\:bg-clip-text{-webkit-background-clip:text!important;background-clip:text!important}}@media (min-width:599px){.xs\\:bg-transparent{background-color:initial!important}}@media (min-width:599px){.xs\\:bg-current{background-color:currentColor!important}}@media (min-width:599px){.xs\\:bg-black{--bg-opacity:1!important;background-color:#000!important;background-color:rgba(0,0,0,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-white{--bg-opacity:1!important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-gray-100{--bg-opacity:1!important;background-color:#f7fafc!important;background-color:rgba(247,250,252,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-gray-200{--bg-opacity:1!important;background-color:#edf2f7!important;background-color:rgba(237,242,247,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-gray-300{--bg-opacity:1!important;background-color:#e2e8f0!important;background-color:rgba(226,232,240,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-gray-400{--bg-opacity:1!important;background-color:#cbd5e0!important;background-color:rgba(203,213,224,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-gray-500{--bg-opacity:1!important;background-color:#a0aec0!important;background-color:rgba(160,174,192,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-gray-600{--bg-opacity:1!important;background-color:#718096!important;background-color:rgba(113,128,150,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-gray-700{--bg-opacity:1!important;background-color:#4a5568!important;background-color:rgba(74,85,104,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-gray-800{--bg-opacity:1!important;background-color:#2d3748!important;background-color:rgba(45,55,72,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-gray-900{--bg-opacity:1!important;background-color:#1a202c!important;background-color:rgba(26,32,44,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-red-100{--bg-opacity:1!important;background-color:#fff5f5!important;background-color:rgba(255,245,245,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-red-200{--bg-opacity:1!important;background-color:#fed7d7!important;background-color:rgba(254,215,215,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-red-300{--bg-opacity:1!important;background-color:#feb2b2!important;background-color:rgba(254,178,178,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-red-400{--bg-opacity:1!important;background-color:#fc8181!important;background-color:rgba(252,129,129,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-red-500{--bg-opacity:1!important;background-color:#f56565!important;background-color:rgba(245,101,101,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-red-600{--bg-opacity:1!important;background-color:#e53e3e!important;background-color:rgba(229,62,62,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-red-700{--bg-opacity:1!important;background-color:#c53030!important;background-color:rgba(197,48,48,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-red-800{--bg-opacity:1!important;background-color:#9b2c2c!important;background-color:rgba(155,44,44,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-red-900{--bg-opacity:1!important;background-color:#742a2a!important;background-color:rgba(116,42,42,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-orange-100{--bg-opacity:1!important;background-color:#fffaf0!important;background-color:rgba(255,250,240,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-orange-200{--bg-opacity:1!important;background-color:#feebc8!important;background-color:rgba(254,235,200,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-orange-300{--bg-opacity:1!important;background-color:#fbd38d!important;background-color:rgba(251,211,141,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-orange-400{--bg-opacity:1!important;background-color:#f6ad55!important;background-color:rgba(246,173,85,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-orange-500{--bg-opacity:1!important;background-color:#ed8936!important;background-color:rgba(237,137,54,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-orange-600{--bg-opacity:1!important;background-color:#dd6b20!important;background-color:rgba(221,107,32,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-orange-700{--bg-opacity:1!important;background-color:#c05621!important;background-color:rgba(192,86,33,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-orange-800{--bg-opacity:1!important;background-color:#9c4221!important;background-color:rgba(156,66,33,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-orange-900{--bg-opacity:1!important;background-color:#7b341e!important;background-color:rgba(123,52,30,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-yellow-100{--bg-opacity:1!important;background-color:ivory!important;background-color:rgba(255,255,240,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-yellow-200{--bg-opacity:1!important;background-color:#fefcbf!important;background-color:rgba(254,252,191,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-yellow-300{--bg-opacity:1!important;background-color:#faf089!important;background-color:rgba(250,240,137,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-yellow-400{--bg-opacity:1!important;background-color:#f6e05e!important;background-color:rgba(246,224,94,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-yellow-500{--bg-opacity:1!important;background-color:#ecc94b!important;background-color:rgba(236,201,75,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-yellow-600{--bg-opacity:1!important;background-color:#d69e2e!important;background-color:rgba(214,158,46,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-yellow-700{--bg-opacity:1!important;background-color:#b7791f!important;background-color:rgba(183,121,31,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-yellow-800{--bg-opacity:1!important;background-color:#975a16!important;background-color:rgba(151,90,22,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-yellow-900{--bg-opacity:1!important;background-color:#744210!important;background-color:rgba(116,66,16,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-green-100{--bg-opacity:1!important;background-color:#f0fff4!important;background-color:rgba(240,255,244,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-green-200{--bg-opacity:1!important;background-color:#c6f6d5!important;background-color:rgba(198,246,213,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-green-300{--bg-opacity:1!important;background-color:#9ae6b4!important;background-color:rgba(154,230,180,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-green-400{--bg-opacity:1!important;background-color:#68d391!important;background-color:rgba(104,211,145,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-green-500{--bg-opacity:1!important;background-color:#48bb78!important;background-color:rgba(72,187,120,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-green-600{--bg-opacity:1!important;background-color:#38a169!important;background-color:rgba(56,161,105,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-green-700{--bg-opacity:1!important;background-color:#2f855a!important;background-color:rgba(47,133,90,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-green-800{--bg-opacity:1!important;background-color:#276749!important;background-color:rgba(39,103,73,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-green-900{--bg-opacity:1!important;background-color:#22543d!important;background-color:rgba(34,84,61,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-teal-100{--bg-opacity:1!important;background-color:#e6fffa!important;background-color:rgba(230,255,250,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-teal-200{--bg-opacity:1!important;background-color:#b2f5ea!important;background-color:rgba(178,245,234,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-teal-300{--bg-opacity:1!important;background-color:#81e6d9!important;background-color:rgba(129,230,217,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-teal-400{--bg-opacity:1!important;background-color:#4fd1c5!important;background-color:rgba(79,209,197,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-teal-500{--bg-opacity:1!important;background-color:#38b2ac!important;background-color:rgba(56,178,172,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-teal-600{--bg-opacity:1!important;background-color:#319795!important;background-color:rgba(49,151,149,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-teal-700{--bg-opacity:1!important;background-color:#2c7a7b!important;background-color:rgba(44,122,123,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-teal-800{--bg-opacity:1!important;background-color:#285e61!important;background-color:rgba(40,94,97,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-teal-900{--bg-opacity:1!important;background-color:#234e52!important;background-color:rgba(35,78,82,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-blue-100{--bg-opacity:1!important;background-color:#ebf8ff!important;background-color:rgba(235,248,255,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-blue-200{--bg-opacity:1!important;background-color:#bee3f8!important;background-color:rgba(190,227,248,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-blue-300{--bg-opacity:1!important;background-color:#90cdf4!important;background-color:rgba(144,205,244,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-blue-400{--bg-opacity:1!important;background-color:#63b3ed!important;background-color:rgba(99,179,237,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-blue-500{--bg-opacity:1!important;background-color:#4299e1!important;background-color:rgba(66,153,225,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-blue-600{--bg-opacity:1!important;background-color:#3182ce!important;background-color:rgba(49,130,206,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-blue-700{--bg-opacity:1!important;background-color:#2b6cb0!important;background-color:rgba(43,108,176,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-blue-800{--bg-opacity:1!important;background-color:#2c5282!important;background-color:rgba(44,82,130,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-blue-900{--bg-opacity:1!important;background-color:#2a4365!important;background-color:rgba(42,67,101,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-indigo-100{--bg-opacity:1!important;background-color:#ebf4ff!important;background-color:rgba(235,244,255,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-indigo-200{--bg-opacity:1!important;background-color:#c3dafe!important;background-color:rgba(195,218,254,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-indigo-300{--bg-opacity:1!important;background-color:#a3bffa!important;background-color:rgba(163,191,250,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-indigo-400{--bg-opacity:1!important;background-color:#7f9cf5!important;background-color:rgba(127,156,245,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-indigo-500{--bg-opacity:1!important;background-color:#667eea!important;background-color:rgba(102,126,234,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-indigo-600{--bg-opacity:1!important;background-color:#5a67d8!important;background-color:rgba(90,103,216,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-indigo-700{--bg-opacity:1!important;background-color:#4c51bf!important;background-color:rgba(76,81,191,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-indigo-800{--bg-opacity:1!important;background-color:#434190!important;background-color:rgba(67,65,144,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-indigo-900{--bg-opacity:1!important;background-color:#3c366b!important;background-color:rgba(60,54,107,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-purple-100{--bg-opacity:1!important;background-color:#faf5ff!important;background-color:rgba(250,245,255,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-purple-200{--bg-opacity:1!important;background-color:#e9d8fd!important;background-color:rgba(233,216,253,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-purple-300{--bg-opacity:1!important;background-color:#d6bcfa!important;background-color:rgba(214,188,250,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-purple-400{--bg-opacity:1!important;background-color:#b794f4!important;background-color:rgba(183,148,244,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-purple-500{--bg-opacity:1!important;background-color:#9f7aea!important;background-color:rgba(159,122,234,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-purple-600{--bg-opacity:1!important;background-color:#805ad5!important;background-color:rgba(128,90,213,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-purple-700{--bg-opacity:1!important;background-color:#6b46c1!important;background-color:rgba(107,70,193,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-purple-800{--bg-opacity:1!important;background-color:#553c9a!important;background-color:rgba(85,60,154,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-purple-900{--bg-opacity:1!important;background-color:#44337a!important;background-color:rgba(68,51,122,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-pink-100{--bg-opacity:1!important;background-color:#fff5f7!important;background-color:rgba(255,245,247,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-pink-200{--bg-opacity:1!important;background-color:#fed7e2!important;background-color:rgba(254,215,226,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-pink-300{--bg-opacity:1!important;background-color:#fbb6ce!important;background-color:rgba(251,182,206,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-pink-400{--bg-opacity:1!important;background-color:#f687b3!important;background-color:rgba(246,135,179,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-pink-500{--bg-opacity:1!important;background-color:#ed64a6!important;background-color:rgba(237,100,166,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-pink-600{--bg-opacity:1!important;background-color:#d53f8c!important;background-color:rgba(213,63,140,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-pink-700{--bg-opacity:1!important;background-color:#b83280!important;background-color:rgba(184,50,128,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-pink-800{--bg-opacity:1!important;background-color:#97266d!important;background-color:rgba(151,38,109,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-pink-900{--bg-opacity:1!important;background-color:#702459!important;background-color:rgba(112,36,89,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-transparent:hover{background-color:initial!important}}@media (min-width:599px){.xs\\:hover\\:bg-current:hover{background-color:currentColor!important}}@media (min-width:599px){.xs\\:hover\\:bg-black:hover{--bg-opacity:1!important;background-color:#000!important;background-color:rgba(0,0,0,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-white:hover{--bg-opacity:1!important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-gray-100:hover{--bg-opacity:1!important;background-color:#f7fafc!important;background-color:rgba(247,250,252,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-gray-200:hover{--bg-opacity:1!important;background-color:#edf2f7!important;background-color:rgba(237,242,247,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-gray-300:hover{--bg-opacity:1!important;background-color:#e2e8f0!important;background-color:rgba(226,232,240,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-gray-400:hover{--bg-opacity:1!important;background-color:#cbd5e0!important;background-color:rgba(203,213,224,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-gray-500:hover{--bg-opacity:1!important;background-color:#a0aec0!important;background-color:rgba(160,174,192,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-gray-600:hover{--bg-opacity:1!important;background-color:#718096!important;background-color:rgba(113,128,150,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-gray-700:hover{--bg-opacity:1!important;background-color:#4a5568!important;background-color:rgba(74,85,104,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-gray-800:hover{--bg-opacity:1!important;background-color:#2d3748!important;background-color:rgba(45,55,72,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-gray-900:hover{--bg-opacity:1!important;background-color:#1a202c!important;background-color:rgba(26,32,44,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-red-100:hover{--bg-opacity:1!important;background-color:#fff5f5!important;background-color:rgba(255,245,245,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-red-200:hover{--bg-opacity:1!important;background-color:#fed7d7!important;background-color:rgba(254,215,215,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-red-300:hover{--bg-opacity:1!important;background-color:#feb2b2!important;background-color:rgba(254,178,178,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-red-400:hover{--bg-opacity:1!important;background-color:#fc8181!important;background-color:rgba(252,129,129,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-red-500:hover{--bg-opacity:1!important;background-color:#f56565!important;background-color:rgba(245,101,101,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-red-600:hover{--bg-opacity:1!important;background-color:#e53e3e!important;background-color:rgba(229,62,62,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-red-700:hover{--bg-opacity:1!important;background-color:#c53030!important;background-color:rgba(197,48,48,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-red-800:hover{--bg-opacity:1!important;background-color:#9b2c2c!important;background-color:rgba(155,44,44,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-red-900:hover{--bg-opacity:1!important;background-color:#742a2a!important;background-color:rgba(116,42,42,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-orange-100:hover{--bg-opacity:1!important;background-color:#fffaf0!important;background-color:rgba(255,250,240,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-orange-200:hover{--bg-opacity:1!important;background-color:#feebc8!important;background-color:rgba(254,235,200,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-orange-300:hover{--bg-opacity:1!important;background-color:#fbd38d!important;background-color:rgba(251,211,141,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-orange-400:hover{--bg-opacity:1!important;background-color:#f6ad55!important;background-color:rgba(246,173,85,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-orange-500:hover{--bg-opacity:1!important;background-color:#ed8936!important;background-color:rgba(237,137,54,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-orange-600:hover{--bg-opacity:1!important;background-color:#dd6b20!important;background-color:rgba(221,107,32,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-orange-700:hover{--bg-opacity:1!important;background-color:#c05621!important;background-color:rgba(192,86,33,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-orange-800:hover{--bg-opacity:1!important;background-color:#9c4221!important;background-color:rgba(156,66,33,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-orange-900:hover{--bg-opacity:1!important;background-color:#7b341e!important;background-color:rgba(123,52,30,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-yellow-100:hover{--bg-opacity:1!important;background-color:ivory!important;background-color:rgba(255,255,240,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-yellow-200:hover{--bg-opacity:1!important;background-color:#fefcbf!important;background-color:rgba(254,252,191,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-yellow-300:hover{--bg-opacity:1!important;background-color:#faf089!important;background-color:rgba(250,240,137,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-yellow-400:hover{--bg-opacity:1!important;background-color:#f6e05e!important;background-color:rgba(246,224,94,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-yellow-500:hover{--bg-opacity:1!important;background-color:#ecc94b!important;background-color:rgba(236,201,75,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-yellow-600:hover{--bg-opacity:1!important;background-color:#d69e2e!important;background-color:rgba(214,158,46,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-yellow-700:hover{--bg-opacity:1!important;background-color:#b7791f!important;background-color:rgba(183,121,31,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-yellow-800:hover{--bg-opacity:1!important;background-color:#975a16!important;background-color:rgba(151,90,22,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-yellow-900:hover{--bg-opacity:1!important;background-color:#744210!important;background-color:rgba(116,66,16,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-green-100:hover{--bg-opacity:1!important;background-color:#f0fff4!important;background-color:rgba(240,255,244,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-green-200:hover{--bg-opacity:1!important;background-color:#c6f6d5!important;background-color:rgba(198,246,213,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-green-300:hover{--bg-opacity:1!important;background-color:#9ae6b4!important;background-color:rgba(154,230,180,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-green-400:hover{--bg-opacity:1!important;background-color:#68d391!important;background-color:rgba(104,211,145,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-green-500:hover{--bg-opacity:1!important;background-color:#48bb78!important;background-color:rgba(72,187,120,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-green-600:hover{--bg-opacity:1!important;background-color:#38a169!important;background-color:rgba(56,161,105,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-green-700:hover{--bg-opacity:1!important;background-color:#2f855a!important;background-color:rgba(47,133,90,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-green-800:hover{--bg-opacity:1!important;background-color:#276749!important;background-color:rgba(39,103,73,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-green-900:hover{--bg-opacity:1!important;background-color:#22543d!important;background-color:rgba(34,84,61,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-teal-100:hover{--bg-opacity:1!important;background-color:#e6fffa!important;background-color:rgba(230,255,250,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-teal-200:hover{--bg-opacity:1!important;background-color:#b2f5ea!important;background-color:rgba(178,245,234,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-teal-300:hover{--bg-opacity:1!important;background-color:#81e6d9!important;background-color:rgba(129,230,217,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-teal-400:hover{--bg-opacity:1!important;background-color:#4fd1c5!important;background-color:rgba(79,209,197,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-teal-500:hover{--bg-opacity:1!important;background-color:#38b2ac!important;background-color:rgba(56,178,172,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-teal-600:hover{--bg-opacity:1!important;background-color:#319795!important;background-color:rgba(49,151,149,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-teal-700:hover{--bg-opacity:1!important;background-color:#2c7a7b!important;background-color:rgba(44,122,123,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-teal-800:hover{--bg-opacity:1!important;background-color:#285e61!important;background-color:rgba(40,94,97,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-teal-900:hover{--bg-opacity:1!important;background-color:#234e52!important;background-color:rgba(35,78,82,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-blue-100:hover{--bg-opacity:1!important;background-color:#ebf8ff!important;background-color:rgba(235,248,255,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-blue-200:hover{--bg-opacity:1!important;background-color:#bee3f8!important;background-color:rgba(190,227,248,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-blue-300:hover{--bg-opacity:1!important;background-color:#90cdf4!important;background-color:rgba(144,205,244,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-blue-400:hover{--bg-opacity:1!important;background-color:#63b3ed!important;background-color:rgba(99,179,237,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-blue-500:hover{--bg-opacity:1!important;background-color:#4299e1!important;background-color:rgba(66,153,225,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-blue-600:hover{--bg-opacity:1!important;background-color:#3182ce!important;background-color:rgba(49,130,206,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-blue-700:hover{--bg-opacity:1!important;background-color:#2b6cb0!important;background-color:rgba(43,108,176,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-blue-800:hover{--bg-opacity:1!important;background-color:#2c5282!important;background-color:rgba(44,82,130,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-blue-900:hover{--bg-opacity:1!important;background-color:#2a4365!important;background-color:rgba(42,67,101,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-indigo-100:hover{--bg-opacity:1!important;background-color:#ebf4ff!important;background-color:rgba(235,244,255,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-indigo-200:hover{--bg-opacity:1!important;background-color:#c3dafe!important;background-color:rgba(195,218,254,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-indigo-300:hover{--bg-opacity:1!important;background-color:#a3bffa!important;background-color:rgba(163,191,250,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-indigo-400:hover{--bg-opacity:1!important;background-color:#7f9cf5!important;background-color:rgba(127,156,245,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-indigo-500:hover{--bg-opacity:1!important;background-color:#667eea!important;background-color:rgba(102,126,234,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-indigo-600:hover{--bg-opacity:1!important;background-color:#5a67d8!important;background-color:rgba(90,103,216,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-indigo-700:hover{--bg-opacity:1!important;background-color:#4c51bf!important;background-color:rgba(76,81,191,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-indigo-800:hover{--bg-opacity:1!important;background-color:#434190!important;background-color:rgba(67,65,144,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-indigo-900:hover{--bg-opacity:1!important;background-color:#3c366b!important;background-color:rgba(60,54,107,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-purple-100:hover{--bg-opacity:1!important;background-color:#faf5ff!important;background-color:rgba(250,245,255,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-purple-200:hover{--bg-opacity:1!important;background-color:#e9d8fd!important;background-color:rgba(233,216,253,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-purple-300:hover{--bg-opacity:1!important;background-color:#d6bcfa!important;background-color:rgba(214,188,250,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-purple-400:hover{--bg-opacity:1!important;background-color:#b794f4!important;background-color:rgba(183,148,244,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-purple-500:hover{--bg-opacity:1!important;background-color:#9f7aea!important;background-color:rgba(159,122,234,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-purple-600:hover{--bg-opacity:1!important;background-color:#805ad5!important;background-color:rgba(128,90,213,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-purple-700:hover{--bg-opacity:1!important;background-color:#6b46c1!important;background-color:rgba(107,70,193,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-purple-800:hover{--bg-opacity:1!important;background-color:#553c9a!important;background-color:rgba(85,60,154,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-purple-900:hover{--bg-opacity:1!important;background-color:#44337a!important;background-color:rgba(68,51,122,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-pink-100:hover{--bg-opacity:1!important;background-color:#fff5f7!important;background-color:rgba(255,245,247,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-pink-200:hover{--bg-opacity:1!important;background-color:#fed7e2!important;background-color:rgba(254,215,226,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-pink-300:hover{--bg-opacity:1!important;background-color:#fbb6ce!important;background-color:rgba(251,182,206,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-pink-400:hover{--bg-opacity:1!important;background-color:#f687b3!important;background-color:rgba(246,135,179,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-pink-500:hover{--bg-opacity:1!important;background-color:#ed64a6!important;background-color:rgba(237,100,166,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-pink-600:hover{--bg-opacity:1!important;background-color:#d53f8c!important;background-color:rgba(213,63,140,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-pink-700:hover{--bg-opacity:1!important;background-color:#b83280!important;background-color:rgba(184,50,128,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-pink-800:hover{--bg-opacity:1!important;background-color:#97266d!important;background-color:rgba(151,38,109,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:bg-pink-900:hover{--bg-opacity:1!important;background-color:#702459!important;background-color:rgba(112,36,89,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-transparent:focus{background-color:initial!important}}@media (min-width:599px){.xs\\:focus\\:bg-current:focus{background-color:currentColor!important}}@media (min-width:599px){.xs\\:focus\\:bg-black:focus{--bg-opacity:1!important;background-color:#000!important;background-color:rgba(0,0,0,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-white:focus{--bg-opacity:1!important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-gray-100:focus{--bg-opacity:1!important;background-color:#f7fafc!important;background-color:rgba(247,250,252,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-gray-200:focus{--bg-opacity:1!important;background-color:#edf2f7!important;background-color:rgba(237,242,247,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-gray-300:focus{--bg-opacity:1!important;background-color:#e2e8f0!important;background-color:rgba(226,232,240,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-gray-400:focus{--bg-opacity:1!important;background-color:#cbd5e0!important;background-color:rgba(203,213,224,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-gray-500:focus{--bg-opacity:1!important;background-color:#a0aec0!important;background-color:rgba(160,174,192,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-gray-600:focus{--bg-opacity:1!important;background-color:#718096!important;background-color:rgba(113,128,150,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-gray-700:focus{--bg-opacity:1!important;background-color:#4a5568!important;background-color:rgba(74,85,104,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-gray-800:focus{--bg-opacity:1!important;background-color:#2d3748!important;background-color:rgba(45,55,72,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-gray-900:focus{--bg-opacity:1!important;background-color:#1a202c!important;background-color:rgba(26,32,44,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-red-100:focus{--bg-opacity:1!important;background-color:#fff5f5!important;background-color:rgba(255,245,245,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-red-200:focus{--bg-opacity:1!important;background-color:#fed7d7!important;background-color:rgba(254,215,215,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-red-300:focus{--bg-opacity:1!important;background-color:#feb2b2!important;background-color:rgba(254,178,178,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-red-400:focus{--bg-opacity:1!important;background-color:#fc8181!important;background-color:rgba(252,129,129,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-red-500:focus{--bg-opacity:1!important;background-color:#f56565!important;background-color:rgba(245,101,101,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-red-600:focus{--bg-opacity:1!important;background-color:#e53e3e!important;background-color:rgba(229,62,62,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-red-700:focus{--bg-opacity:1!important;background-color:#c53030!important;background-color:rgba(197,48,48,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-red-800:focus{--bg-opacity:1!important;background-color:#9b2c2c!important;background-color:rgba(155,44,44,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-red-900:focus{--bg-opacity:1!important;background-color:#742a2a!important;background-color:rgba(116,42,42,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-orange-100:focus{--bg-opacity:1!important;background-color:#fffaf0!important;background-color:rgba(255,250,240,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-orange-200:focus{--bg-opacity:1!important;background-color:#feebc8!important;background-color:rgba(254,235,200,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-orange-300:focus{--bg-opacity:1!important;background-color:#fbd38d!important;background-color:rgba(251,211,141,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-orange-400:focus{--bg-opacity:1!important;background-color:#f6ad55!important;background-color:rgba(246,173,85,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-orange-500:focus{--bg-opacity:1!important;background-color:#ed8936!important;background-color:rgba(237,137,54,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-orange-600:focus{--bg-opacity:1!important;background-color:#dd6b20!important;background-color:rgba(221,107,32,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-orange-700:focus{--bg-opacity:1!important;background-color:#c05621!important;background-color:rgba(192,86,33,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-orange-800:focus{--bg-opacity:1!important;background-color:#9c4221!important;background-color:rgba(156,66,33,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-orange-900:focus{--bg-opacity:1!important;background-color:#7b341e!important;background-color:rgba(123,52,30,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-yellow-100:focus{--bg-opacity:1!important;background-color:ivory!important;background-color:rgba(255,255,240,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-yellow-200:focus{--bg-opacity:1!important;background-color:#fefcbf!important;background-color:rgba(254,252,191,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-yellow-300:focus{--bg-opacity:1!important;background-color:#faf089!important;background-color:rgba(250,240,137,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-yellow-400:focus{--bg-opacity:1!important;background-color:#f6e05e!important;background-color:rgba(246,224,94,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-yellow-500:focus{--bg-opacity:1!important;background-color:#ecc94b!important;background-color:rgba(236,201,75,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-yellow-600:focus{--bg-opacity:1!important;background-color:#d69e2e!important;background-color:rgba(214,158,46,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-yellow-700:focus{--bg-opacity:1!important;background-color:#b7791f!important;background-color:rgba(183,121,31,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-yellow-800:focus{--bg-opacity:1!important;background-color:#975a16!important;background-color:rgba(151,90,22,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-yellow-900:focus{--bg-opacity:1!important;background-color:#744210!important;background-color:rgba(116,66,16,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-green-100:focus{--bg-opacity:1!important;background-color:#f0fff4!important;background-color:rgba(240,255,244,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-green-200:focus{--bg-opacity:1!important;background-color:#c6f6d5!important;background-color:rgba(198,246,213,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-green-300:focus{--bg-opacity:1!important;background-color:#9ae6b4!important;background-color:rgba(154,230,180,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-green-400:focus{--bg-opacity:1!important;background-color:#68d391!important;background-color:rgba(104,211,145,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-green-500:focus{--bg-opacity:1!important;background-color:#48bb78!important;background-color:rgba(72,187,120,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-green-600:focus{--bg-opacity:1!important;background-color:#38a169!important;background-color:rgba(56,161,105,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-green-700:focus{--bg-opacity:1!important;background-color:#2f855a!important;background-color:rgba(47,133,90,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-green-800:focus{--bg-opacity:1!important;background-color:#276749!important;background-color:rgba(39,103,73,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-green-900:focus{--bg-opacity:1!important;background-color:#22543d!important;background-color:rgba(34,84,61,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-teal-100:focus{--bg-opacity:1!important;background-color:#e6fffa!important;background-color:rgba(230,255,250,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-teal-200:focus{--bg-opacity:1!important;background-color:#b2f5ea!important;background-color:rgba(178,245,234,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-teal-300:focus{--bg-opacity:1!important;background-color:#81e6d9!important;background-color:rgba(129,230,217,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-teal-400:focus{--bg-opacity:1!important;background-color:#4fd1c5!important;background-color:rgba(79,209,197,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-teal-500:focus{--bg-opacity:1!important;background-color:#38b2ac!important;background-color:rgba(56,178,172,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-teal-600:focus{--bg-opacity:1!important;background-color:#319795!important;background-color:rgba(49,151,149,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-teal-700:focus{--bg-opacity:1!important;background-color:#2c7a7b!important;background-color:rgba(44,122,123,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-teal-800:focus{--bg-opacity:1!important;background-color:#285e61!important;background-color:rgba(40,94,97,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-teal-900:focus{--bg-opacity:1!important;background-color:#234e52!important;background-color:rgba(35,78,82,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-blue-100:focus{--bg-opacity:1!important;background-color:#ebf8ff!important;background-color:rgba(235,248,255,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-blue-200:focus{--bg-opacity:1!important;background-color:#bee3f8!important;background-color:rgba(190,227,248,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-blue-300:focus{--bg-opacity:1!important;background-color:#90cdf4!important;background-color:rgba(144,205,244,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-blue-400:focus{--bg-opacity:1!important;background-color:#63b3ed!important;background-color:rgba(99,179,237,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-blue-500:focus{--bg-opacity:1!important;background-color:#4299e1!important;background-color:rgba(66,153,225,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-blue-600:focus{--bg-opacity:1!important;background-color:#3182ce!important;background-color:rgba(49,130,206,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-blue-700:focus{--bg-opacity:1!important;background-color:#2b6cb0!important;background-color:rgba(43,108,176,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-blue-800:focus{--bg-opacity:1!important;background-color:#2c5282!important;background-color:rgba(44,82,130,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-blue-900:focus{--bg-opacity:1!important;background-color:#2a4365!important;background-color:rgba(42,67,101,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-indigo-100:focus{--bg-opacity:1!important;background-color:#ebf4ff!important;background-color:rgba(235,244,255,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-indigo-200:focus{--bg-opacity:1!important;background-color:#c3dafe!important;background-color:rgba(195,218,254,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-indigo-300:focus{--bg-opacity:1!important;background-color:#a3bffa!important;background-color:rgba(163,191,250,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-indigo-400:focus{--bg-opacity:1!important;background-color:#7f9cf5!important;background-color:rgba(127,156,245,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-indigo-500:focus{--bg-opacity:1!important;background-color:#667eea!important;background-color:rgba(102,126,234,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-indigo-600:focus{--bg-opacity:1!important;background-color:#5a67d8!important;background-color:rgba(90,103,216,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-indigo-700:focus{--bg-opacity:1!important;background-color:#4c51bf!important;background-color:rgba(76,81,191,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-indigo-800:focus{--bg-opacity:1!important;background-color:#434190!important;background-color:rgba(67,65,144,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-indigo-900:focus{--bg-opacity:1!important;background-color:#3c366b!important;background-color:rgba(60,54,107,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-purple-100:focus{--bg-opacity:1!important;background-color:#faf5ff!important;background-color:rgba(250,245,255,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-purple-200:focus{--bg-opacity:1!important;background-color:#e9d8fd!important;background-color:rgba(233,216,253,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-purple-300:focus{--bg-opacity:1!important;background-color:#d6bcfa!important;background-color:rgba(214,188,250,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-purple-400:focus{--bg-opacity:1!important;background-color:#b794f4!important;background-color:rgba(183,148,244,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-purple-500:focus{--bg-opacity:1!important;background-color:#9f7aea!important;background-color:rgba(159,122,234,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-purple-600:focus{--bg-opacity:1!important;background-color:#805ad5!important;background-color:rgba(128,90,213,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-purple-700:focus{--bg-opacity:1!important;background-color:#6b46c1!important;background-color:rgba(107,70,193,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-purple-800:focus{--bg-opacity:1!important;background-color:#553c9a!important;background-color:rgba(85,60,154,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-purple-900:focus{--bg-opacity:1!important;background-color:#44337a!important;background-color:rgba(68,51,122,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-pink-100:focus{--bg-opacity:1!important;background-color:#fff5f7!important;background-color:rgba(255,245,247,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-pink-200:focus{--bg-opacity:1!important;background-color:#fed7e2!important;background-color:rgba(254,215,226,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-pink-300:focus{--bg-opacity:1!important;background-color:#fbb6ce!important;background-color:rgba(251,182,206,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-pink-400:focus{--bg-opacity:1!important;background-color:#f687b3!important;background-color:rgba(246,135,179,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-pink-500:focus{--bg-opacity:1!important;background-color:#ed64a6!important;background-color:rgba(237,100,166,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-pink-600:focus{--bg-opacity:1!important;background-color:#d53f8c!important;background-color:rgba(213,63,140,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-pink-700:focus{--bg-opacity:1!important;background-color:#b83280!important;background-color:rgba(184,50,128,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-pink-800:focus{--bg-opacity:1!important;background-color:#97266d!important;background-color:rgba(151,38,109,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:bg-pink-900:focus{--bg-opacity:1!important;background-color:#702459!important;background-color:rgba(112,36,89,var(--bg-opacity))!important}}@media (min-width:599px){.xs\\:bg-none{background-image:none!important}}@media (min-width:599px){.xs\\:bg-gradient-to-t{background-image:linear-gradient(0deg,var(--gradient-color-stops))!important}}@media (min-width:599px){.xs\\:bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--gradient-color-stops))!important}}@media (min-width:599px){.xs\\:bg-gradient-to-r{background-image:linear-gradient(90deg,var(--gradient-color-stops))!important}}@media (min-width:599px){.xs\\:bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--gradient-color-stops))!important}}@media (min-width:599px){.xs\\:bg-gradient-to-b{background-image:linear-gradient(180deg,var(--gradient-color-stops))!important}}@media (min-width:599px){.xs\\:bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--gradient-color-stops))!important}}@media (min-width:599px){.xs\\:bg-gradient-to-l{background-image:linear-gradient(270deg,var(--gradient-color-stops))!important}}@media (min-width:599px){.xs\\:bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--gradient-color-stops))!important}}@media (min-width:599px){.xs\\:from-transparent{--gradient-from-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:599px){.xs\\:from-current{--gradient-from-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:599px){.xs\\:from-black{--gradient-from-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:599px){.xs\\:from-white{--gradient-from-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:599px){.xs\\:from-gray-100{--gradient-from-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:599px){.xs\\:from-gray-200{--gradient-from-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:599px){.xs\\:from-gray-300{--gradient-from-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:599px){.xs\\:from-gray-400{--gradient-from-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:599px){.xs\\:from-gray-500{--gradient-from-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:599px){.xs\\:from-gray-600{--gradient-from-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:599px){.xs\\:from-gray-700{--gradient-from-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:599px){.xs\\:from-gray-800{--gradient-from-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:599px){.xs\\:from-gray-900{--gradient-from-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:599px){.xs\\:from-red-100{--gradient-from-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:599px){.xs\\:from-red-200{--gradient-from-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:599px){.xs\\:from-red-300{--gradient-from-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:599px){.xs\\:from-red-400{--gradient-from-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:599px){.xs\\:from-red-500{--gradient-from-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:599px){.xs\\:from-red-600{--gradient-from-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:599px){.xs\\:from-red-700{--gradient-from-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:599px){.xs\\:from-red-800{--gradient-from-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:599px){.xs\\:from-red-900{--gradient-from-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:599px){.xs\\:from-orange-100{--gradient-from-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:599px){.xs\\:from-orange-200{--gradient-from-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:599px){.xs\\:from-orange-300{--gradient-from-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:599px){.xs\\:from-orange-400{--gradient-from-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:599px){.xs\\:from-orange-500{--gradient-from-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:599px){.xs\\:from-orange-600{--gradient-from-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:599px){.xs\\:from-orange-700{--gradient-from-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:599px){.xs\\:from-orange-800{--gradient-from-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:599px){.xs\\:from-orange-900{--gradient-from-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:599px){.xs\\:from-yellow-100{--gradient-from-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:599px){.xs\\:from-yellow-200{--gradient-from-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:599px){.xs\\:from-yellow-300{--gradient-from-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:599px){.xs\\:from-yellow-400{--gradient-from-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:599px){.xs\\:from-yellow-500{--gradient-from-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:599px){.xs\\:from-yellow-600{--gradient-from-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:599px){.xs\\:from-yellow-700{--gradient-from-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:599px){.xs\\:from-yellow-800{--gradient-from-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:599px){.xs\\:from-yellow-900{--gradient-from-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:599px){.xs\\:from-green-100{--gradient-from-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:599px){.xs\\:from-green-200{--gradient-from-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:599px){.xs\\:from-green-300{--gradient-from-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:599px){.xs\\:from-green-400{--gradient-from-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:599px){.xs\\:from-green-500{--gradient-from-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:599px){.xs\\:from-green-600{--gradient-from-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:599px){.xs\\:from-green-700{--gradient-from-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:599px){.xs\\:from-green-800{--gradient-from-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:599px){.xs\\:from-green-900{--gradient-from-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:599px){.xs\\:from-teal-100{--gradient-from-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:599px){.xs\\:from-teal-200{--gradient-from-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:599px){.xs\\:from-teal-300{--gradient-from-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:599px){.xs\\:from-teal-400{--gradient-from-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:599px){.xs\\:from-teal-500{--gradient-from-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:599px){.xs\\:from-teal-600{--gradient-from-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:599px){.xs\\:from-teal-700{--gradient-from-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:599px){.xs\\:from-teal-800{--gradient-from-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:599px){.xs\\:from-teal-900{--gradient-from-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:599px){.xs\\:from-blue-100{--gradient-from-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:599px){.xs\\:from-blue-200{--gradient-from-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:599px){.xs\\:from-blue-300{--gradient-from-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:599px){.xs\\:from-blue-400{--gradient-from-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:599px){.xs\\:from-blue-500{--gradient-from-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:599px){.xs\\:from-blue-600{--gradient-from-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:599px){.xs\\:from-blue-700{--gradient-from-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:599px){.xs\\:from-blue-800{--gradient-from-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:599px){.xs\\:from-blue-900{--gradient-from-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:599px){.xs\\:from-indigo-100{--gradient-from-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:599px){.xs\\:from-indigo-200{--gradient-from-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:599px){.xs\\:from-indigo-300{--gradient-from-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:599px){.xs\\:from-indigo-400{--gradient-from-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:599px){.xs\\:from-indigo-500{--gradient-from-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:599px){.xs\\:from-indigo-600{--gradient-from-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:599px){.xs\\:from-indigo-700{--gradient-from-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:599px){.xs\\:from-indigo-800{--gradient-from-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:599px){.xs\\:from-indigo-900{--gradient-from-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:599px){.xs\\:from-purple-100{--gradient-from-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:599px){.xs\\:from-purple-200{--gradient-from-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:599px){.xs\\:from-purple-300{--gradient-from-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:599px){.xs\\:from-purple-400{--gradient-from-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:599px){.xs\\:from-purple-500{--gradient-from-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:599px){.xs\\:from-purple-600{--gradient-from-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:599px){.xs\\:from-purple-700{--gradient-from-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:599px){.xs\\:from-purple-800{--gradient-from-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:599px){.xs\\:from-purple-900{--gradient-from-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:599px){.xs\\:from-pink-100{--gradient-from-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:599px){.xs\\:from-pink-200{--gradient-from-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:599px){.xs\\:from-pink-300{--gradient-from-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:599px){.xs\\:from-pink-400{--gradient-from-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:599px){.xs\\:from-pink-500{--gradient-from-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:599px){.xs\\:from-pink-600{--gradient-from-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:599px){.xs\\:from-pink-700{--gradient-from-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:599px){.xs\\:from-pink-800{--gradient-from-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:599px){.xs\\:from-pink-900{--gradient-from-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:599px){.xs\\:via-transparent{--gradient-via-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:599px){.xs\\:via-current{--gradient-via-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:599px){.xs\\:via-black{--gradient-via-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:599px){.xs\\:via-white{--gradient-via-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:599px){.xs\\:via-gray-100{--gradient-via-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:599px){.xs\\:via-gray-200{--gradient-via-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:599px){.xs\\:via-gray-300{--gradient-via-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:599px){.xs\\:via-gray-400{--gradient-via-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:599px){.xs\\:via-gray-500{--gradient-via-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:599px){.xs\\:via-gray-600{--gradient-via-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:599px){.xs\\:via-gray-700{--gradient-via-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:599px){.xs\\:via-gray-800{--gradient-via-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:599px){.xs\\:via-gray-900{--gradient-via-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:599px){.xs\\:via-red-100{--gradient-via-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:599px){.xs\\:via-red-200{--gradient-via-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:599px){.xs\\:via-red-300{--gradient-via-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:599px){.xs\\:via-red-400{--gradient-via-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:599px){.xs\\:via-red-500{--gradient-via-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:599px){.xs\\:via-red-600{--gradient-via-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:599px){.xs\\:via-red-700{--gradient-via-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:599px){.xs\\:via-red-800{--gradient-via-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:599px){.xs\\:via-red-900{--gradient-via-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:599px){.xs\\:via-orange-100{--gradient-via-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:599px){.xs\\:via-orange-200{--gradient-via-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:599px){.xs\\:via-orange-300{--gradient-via-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:599px){.xs\\:via-orange-400{--gradient-via-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:599px){.xs\\:via-orange-500{--gradient-via-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:599px){.xs\\:via-orange-600{--gradient-via-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:599px){.xs\\:via-orange-700{--gradient-via-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:599px){.xs\\:via-orange-800{--gradient-via-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:599px){.xs\\:via-orange-900{--gradient-via-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:599px){.xs\\:via-yellow-100{--gradient-via-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:599px){.xs\\:via-yellow-200{--gradient-via-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:599px){.xs\\:via-yellow-300{--gradient-via-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:599px){.xs\\:via-yellow-400{--gradient-via-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:599px){.xs\\:via-yellow-500{--gradient-via-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:599px){.xs\\:via-yellow-600{--gradient-via-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:599px){.xs\\:via-yellow-700{--gradient-via-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:599px){.xs\\:via-yellow-800{--gradient-via-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:599px){.xs\\:via-yellow-900{--gradient-via-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:599px){.xs\\:via-green-100{--gradient-via-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:599px){.xs\\:via-green-200{--gradient-via-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:599px){.xs\\:via-green-300{--gradient-via-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:599px){.xs\\:via-green-400{--gradient-via-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:599px){.xs\\:via-green-500{--gradient-via-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:599px){.xs\\:via-green-600{--gradient-via-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:599px){.xs\\:via-green-700{--gradient-via-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:599px){.xs\\:via-green-800{--gradient-via-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:599px){.xs\\:via-green-900{--gradient-via-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:599px){.xs\\:via-teal-100{--gradient-via-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:599px){.xs\\:via-teal-200{--gradient-via-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:599px){.xs\\:via-teal-300{--gradient-via-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:599px){.xs\\:via-teal-400{--gradient-via-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:599px){.xs\\:via-teal-500{--gradient-via-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:599px){.xs\\:via-teal-600{--gradient-via-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:599px){.xs\\:via-teal-700{--gradient-via-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:599px){.xs\\:via-teal-800{--gradient-via-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:599px){.xs\\:via-teal-900{--gradient-via-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:599px){.xs\\:via-blue-100{--gradient-via-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:599px){.xs\\:via-blue-200{--gradient-via-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:599px){.xs\\:via-blue-300{--gradient-via-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:599px){.xs\\:via-blue-400{--gradient-via-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:599px){.xs\\:via-blue-500{--gradient-via-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:599px){.xs\\:via-blue-600{--gradient-via-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:599px){.xs\\:via-blue-700{--gradient-via-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:599px){.xs\\:via-blue-800{--gradient-via-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:599px){.xs\\:via-blue-900{--gradient-via-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:599px){.xs\\:via-indigo-100{--gradient-via-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:599px){.xs\\:via-indigo-200{--gradient-via-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:599px){.xs\\:via-indigo-300{--gradient-via-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:599px){.xs\\:via-indigo-400{--gradient-via-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:599px){.xs\\:via-indigo-500{--gradient-via-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:599px){.xs\\:via-indigo-600{--gradient-via-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:599px){.xs\\:via-indigo-700{--gradient-via-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:599px){.xs\\:via-indigo-800{--gradient-via-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:599px){.xs\\:via-indigo-900{--gradient-via-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:599px){.xs\\:via-purple-100{--gradient-via-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:599px){.xs\\:via-purple-200{--gradient-via-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:599px){.xs\\:via-purple-300{--gradient-via-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:599px){.xs\\:via-purple-400{--gradient-via-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:599px){.xs\\:via-purple-500{--gradient-via-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:599px){.xs\\:via-purple-600{--gradient-via-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:599px){.xs\\:via-purple-700{--gradient-via-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:599px){.xs\\:via-purple-800{--gradient-via-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:599px){.xs\\:via-purple-900{--gradient-via-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:599px){.xs\\:via-pink-100{--gradient-via-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:599px){.xs\\:via-pink-200{--gradient-via-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:599px){.xs\\:via-pink-300{--gradient-via-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:599px){.xs\\:via-pink-400{--gradient-via-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:599px){.xs\\:via-pink-500{--gradient-via-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:599px){.xs\\:via-pink-600{--gradient-via-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:599px){.xs\\:via-pink-700{--gradient-via-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:599px){.xs\\:via-pink-800{--gradient-via-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:599px){.xs\\:via-pink-900{--gradient-via-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:599px){.xs\\:to-transparent{--gradient-to-color:transparent!important}}@media (min-width:599px){.xs\\:to-current{--gradient-to-color:currentColor!important}}@media (min-width:599px){.xs\\:to-black{--gradient-to-color:#000!important}}@media (min-width:599px){.xs\\:to-white{--gradient-to-color:#fff!important}}@media (min-width:599px){.xs\\:to-gray-100{--gradient-to-color:#f7fafc!important}}@media (min-width:599px){.xs\\:to-gray-200{--gradient-to-color:#edf2f7!important}}@media (min-width:599px){.xs\\:to-gray-300{--gradient-to-color:#e2e8f0!important}}@media (min-width:599px){.xs\\:to-gray-400{--gradient-to-color:#cbd5e0!important}}@media (min-width:599px){.xs\\:to-gray-500{--gradient-to-color:#a0aec0!important}}@media (min-width:599px){.xs\\:to-gray-600{--gradient-to-color:#718096!important}}@media (min-width:599px){.xs\\:to-gray-700{--gradient-to-color:#4a5568!important}}@media (min-width:599px){.xs\\:to-gray-800{--gradient-to-color:#2d3748!important}}@media (min-width:599px){.xs\\:to-gray-900{--gradient-to-color:#1a202c!important}}@media (min-width:599px){.xs\\:to-red-100{--gradient-to-color:#fff5f5!important}}@media (min-width:599px){.xs\\:to-red-200{--gradient-to-color:#fed7d7!important}}@media (min-width:599px){.xs\\:to-red-300{--gradient-to-color:#feb2b2!important}}@media (min-width:599px){.xs\\:to-red-400{--gradient-to-color:#fc8181!important}}@media (min-width:599px){.xs\\:to-red-500{--gradient-to-color:#f56565!important}}@media (min-width:599px){.xs\\:to-red-600{--gradient-to-color:#e53e3e!important}}@media (min-width:599px){.xs\\:to-red-700{--gradient-to-color:#c53030!important}}@media (min-width:599px){.xs\\:to-red-800{--gradient-to-color:#9b2c2c!important}}@media (min-width:599px){.xs\\:to-red-900{--gradient-to-color:#742a2a!important}}@media (min-width:599px){.xs\\:to-orange-100{--gradient-to-color:#fffaf0!important}}@media (min-width:599px){.xs\\:to-orange-200{--gradient-to-color:#feebc8!important}}@media (min-width:599px){.xs\\:to-orange-300{--gradient-to-color:#fbd38d!important}}@media (min-width:599px){.xs\\:to-orange-400{--gradient-to-color:#f6ad55!important}}@media (min-width:599px){.xs\\:to-orange-500{--gradient-to-color:#ed8936!important}}@media (min-width:599px){.xs\\:to-orange-600{--gradient-to-color:#dd6b20!important}}@media (min-width:599px){.xs\\:to-orange-700{--gradient-to-color:#c05621!important}}@media (min-width:599px){.xs\\:to-orange-800{--gradient-to-color:#9c4221!important}}@media (min-width:599px){.xs\\:to-orange-900{--gradient-to-color:#7b341e!important}}@media (min-width:599px){.xs\\:to-yellow-100{--gradient-to-color:ivory!important}}@media (min-width:599px){.xs\\:to-yellow-200{--gradient-to-color:#fefcbf!important}}@media (min-width:599px){.xs\\:to-yellow-300{--gradient-to-color:#faf089!important}}@media (min-width:599px){.xs\\:to-yellow-400{--gradient-to-color:#f6e05e!important}}@media (min-width:599px){.xs\\:to-yellow-500{--gradient-to-color:#ecc94b!important}}@media (min-width:599px){.xs\\:to-yellow-600{--gradient-to-color:#d69e2e!important}}@media (min-width:599px){.xs\\:to-yellow-700{--gradient-to-color:#b7791f!important}}@media (min-width:599px){.xs\\:to-yellow-800{--gradient-to-color:#975a16!important}}@media (min-width:599px){.xs\\:to-yellow-900{--gradient-to-color:#744210!important}}@media (min-width:599px){.xs\\:to-green-100{--gradient-to-color:#f0fff4!important}}@media (min-width:599px){.xs\\:to-green-200{--gradient-to-color:#c6f6d5!important}}@media (min-width:599px){.xs\\:to-green-300{--gradient-to-color:#9ae6b4!important}}@media (min-width:599px){.xs\\:to-green-400{--gradient-to-color:#68d391!important}}@media (min-width:599px){.xs\\:to-green-500{--gradient-to-color:#48bb78!important}}@media (min-width:599px){.xs\\:to-green-600{--gradient-to-color:#38a169!important}}@media (min-width:599px){.xs\\:to-green-700{--gradient-to-color:#2f855a!important}}@media (min-width:599px){.xs\\:to-green-800{--gradient-to-color:#276749!important}}@media (min-width:599px){.xs\\:to-green-900{--gradient-to-color:#22543d!important}}@media (min-width:599px){.xs\\:to-teal-100{--gradient-to-color:#e6fffa!important}}@media (min-width:599px){.xs\\:to-teal-200{--gradient-to-color:#b2f5ea!important}}@media (min-width:599px){.xs\\:to-teal-300{--gradient-to-color:#81e6d9!important}}@media (min-width:599px){.xs\\:to-teal-400{--gradient-to-color:#4fd1c5!important}}@media (min-width:599px){.xs\\:to-teal-500{--gradient-to-color:#38b2ac!important}}@media (min-width:599px){.xs\\:to-teal-600{--gradient-to-color:#319795!important}}@media (min-width:599px){.xs\\:to-teal-700{--gradient-to-color:#2c7a7b!important}}@media (min-width:599px){.xs\\:to-teal-800{--gradient-to-color:#285e61!important}}@media (min-width:599px){.xs\\:to-teal-900{--gradient-to-color:#234e52!important}}@media (min-width:599px){.xs\\:to-blue-100{--gradient-to-color:#ebf8ff!important}}@media (min-width:599px){.xs\\:to-blue-200{--gradient-to-color:#bee3f8!important}}@media (min-width:599px){.xs\\:to-blue-300{--gradient-to-color:#90cdf4!important}}@media (min-width:599px){.xs\\:to-blue-400{--gradient-to-color:#63b3ed!important}}@media (min-width:599px){.xs\\:to-blue-500{--gradient-to-color:#4299e1!important}}@media (min-width:599px){.xs\\:to-blue-600{--gradient-to-color:#3182ce!important}}@media (min-width:599px){.xs\\:to-blue-700{--gradient-to-color:#2b6cb0!important}}@media (min-width:599px){.xs\\:to-blue-800{--gradient-to-color:#2c5282!important}}@media (min-width:599px){.xs\\:to-blue-900{--gradient-to-color:#2a4365!important}}@media (min-width:599px){.xs\\:to-indigo-100{--gradient-to-color:#ebf4ff!important}}@media (min-width:599px){.xs\\:to-indigo-200{--gradient-to-color:#c3dafe!important}}@media (min-width:599px){.xs\\:to-indigo-300{--gradient-to-color:#a3bffa!important}}@media (min-width:599px){.xs\\:to-indigo-400{--gradient-to-color:#7f9cf5!important}}@media (min-width:599px){.xs\\:to-indigo-500{--gradient-to-color:#667eea!important}}@media (min-width:599px){.xs\\:to-indigo-600{--gradient-to-color:#5a67d8!important}}@media (min-width:599px){.xs\\:to-indigo-700{--gradient-to-color:#4c51bf!important}}@media (min-width:599px){.xs\\:to-indigo-800{--gradient-to-color:#434190!important}}@media (min-width:599px){.xs\\:to-indigo-900{--gradient-to-color:#3c366b!important}}@media (min-width:599px){.xs\\:to-purple-100{--gradient-to-color:#faf5ff!important}}@media (min-width:599px){.xs\\:to-purple-200{--gradient-to-color:#e9d8fd!important}}@media (min-width:599px){.xs\\:to-purple-300{--gradient-to-color:#d6bcfa!important}}@media (min-width:599px){.xs\\:to-purple-400{--gradient-to-color:#b794f4!important}}@media (min-width:599px){.xs\\:to-purple-500{--gradient-to-color:#9f7aea!important}}@media (min-width:599px){.xs\\:to-purple-600{--gradient-to-color:#805ad5!important}}@media (min-width:599px){.xs\\:to-purple-700{--gradient-to-color:#6b46c1!important}}@media (min-width:599px){.xs\\:to-purple-800{--gradient-to-color:#553c9a!important}}@media (min-width:599px){.xs\\:to-purple-900{--gradient-to-color:#44337a!important}}@media (min-width:599px){.xs\\:to-pink-100{--gradient-to-color:#fff5f7!important}}@media (min-width:599px){.xs\\:to-pink-200{--gradient-to-color:#fed7e2!important}}@media (min-width:599px){.xs\\:to-pink-300{--gradient-to-color:#fbb6ce!important}}@media (min-width:599px){.xs\\:to-pink-400{--gradient-to-color:#f687b3!important}}@media (min-width:599px){.xs\\:to-pink-500{--gradient-to-color:#ed64a6!important}}@media (min-width:599px){.xs\\:to-pink-600{--gradient-to-color:#d53f8c!important}}@media (min-width:599px){.xs\\:to-pink-700{--gradient-to-color:#b83280!important}}@media (min-width:599px){.xs\\:to-pink-800{--gradient-to-color:#97266d!important}}@media (min-width:599px){.xs\\:to-pink-900{--gradient-to-color:#702459!important}}@media (min-width:599px){.xs\\:hover\\:from-transparent:hover{--gradient-from-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:599px){.xs\\:hover\\:from-current:hover{--gradient-from-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-black:hover{--gradient-from-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:599px){.xs\\:hover\\:from-white:hover{--gradient-from-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-gray-100:hover{--gradient-from-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-gray-200:hover{--gradient-from-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-gray-300:hover{--gradient-from-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-gray-400:hover{--gradient-from-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-gray-500:hover{--gradient-from-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-gray-600:hover{--gradient-from-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-gray-700:hover{--gradient-from-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-gray-800:hover{--gradient-from-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-gray-900:hover{--gradient-from-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-red-100:hover{--gradient-from-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-red-200:hover{--gradient-from-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-red-300:hover{--gradient-from-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-red-400:hover{--gradient-from-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-red-500:hover{--gradient-from-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-red-600:hover{--gradient-from-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-red-700:hover{--gradient-from-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-red-800:hover{--gradient-from-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-red-900:hover{--gradient-from-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-orange-100:hover{--gradient-from-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-orange-200:hover{--gradient-from-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-orange-300:hover{--gradient-from-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-orange-400:hover{--gradient-from-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-orange-500:hover{--gradient-from-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-orange-600:hover{--gradient-from-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-orange-700:hover{--gradient-from-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-orange-800:hover{--gradient-from-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-orange-900:hover{--gradient-from-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-yellow-100:hover{--gradient-from-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-yellow-200:hover{--gradient-from-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-yellow-300:hover{--gradient-from-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-yellow-400:hover{--gradient-from-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-yellow-500:hover{--gradient-from-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-yellow-600:hover{--gradient-from-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-yellow-700:hover{--gradient-from-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-yellow-800:hover{--gradient-from-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-yellow-900:hover{--gradient-from-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-green-100:hover{--gradient-from-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-green-200:hover{--gradient-from-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-green-300:hover{--gradient-from-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-green-400:hover{--gradient-from-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-green-500:hover{--gradient-from-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-green-600:hover{--gradient-from-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-green-700:hover{--gradient-from-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-green-800:hover{--gradient-from-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-green-900:hover{--gradient-from-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-teal-100:hover{--gradient-from-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-teal-200:hover{--gradient-from-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-teal-300:hover{--gradient-from-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-teal-400:hover{--gradient-from-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-teal-500:hover{--gradient-from-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-teal-600:hover{--gradient-from-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-teal-700:hover{--gradient-from-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-teal-800:hover{--gradient-from-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-teal-900:hover{--gradient-from-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-blue-100:hover{--gradient-from-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-blue-200:hover{--gradient-from-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-blue-300:hover{--gradient-from-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-blue-400:hover{--gradient-from-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-blue-500:hover{--gradient-from-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-blue-600:hover{--gradient-from-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-blue-700:hover{--gradient-from-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-blue-800:hover{--gradient-from-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-blue-900:hover{--gradient-from-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-indigo-100:hover{--gradient-from-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-indigo-200:hover{--gradient-from-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-indigo-300:hover{--gradient-from-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-indigo-400:hover{--gradient-from-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-indigo-500:hover{--gradient-from-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-indigo-600:hover{--gradient-from-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-indigo-700:hover{--gradient-from-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-indigo-800:hover{--gradient-from-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-indigo-900:hover{--gradient-from-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-purple-100:hover{--gradient-from-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-purple-200:hover{--gradient-from-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-purple-300:hover{--gradient-from-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-purple-400:hover{--gradient-from-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-purple-500:hover{--gradient-from-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-purple-600:hover{--gradient-from-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-purple-700:hover{--gradient-from-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-purple-800:hover{--gradient-from-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-purple-900:hover{--gradient-from-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-pink-100:hover{--gradient-from-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-pink-200:hover{--gradient-from-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-pink-300:hover{--gradient-from-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-pink-400:hover{--gradient-from-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-pink-500:hover{--gradient-from-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-pink-600:hover{--gradient-from-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-pink-700:hover{--gradient-from-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-pink-800:hover{--gradient-from-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:599px){.xs\\:hover\\:from-pink-900:hover{--gradient-from-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-transparent:hover{--gradient-via-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:599px){.xs\\:hover\\:via-current:hover{--gradient-via-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-black:hover{--gradient-via-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:599px){.xs\\:hover\\:via-white:hover{--gradient-via-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-gray-100:hover{--gradient-via-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-gray-200:hover{--gradient-via-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-gray-300:hover{--gradient-via-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-gray-400:hover{--gradient-via-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-gray-500:hover{--gradient-via-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-gray-600:hover{--gradient-via-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-gray-700:hover{--gradient-via-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-gray-800:hover{--gradient-via-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-gray-900:hover{--gradient-via-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-red-100:hover{--gradient-via-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-red-200:hover{--gradient-via-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-red-300:hover{--gradient-via-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-red-400:hover{--gradient-via-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-red-500:hover{--gradient-via-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-red-600:hover{--gradient-via-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-red-700:hover{--gradient-via-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-red-800:hover{--gradient-via-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-red-900:hover{--gradient-via-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-orange-100:hover{--gradient-via-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-orange-200:hover{--gradient-via-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-orange-300:hover{--gradient-via-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-orange-400:hover{--gradient-via-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-orange-500:hover{--gradient-via-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-orange-600:hover{--gradient-via-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-orange-700:hover{--gradient-via-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-orange-800:hover{--gradient-via-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-orange-900:hover{--gradient-via-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-yellow-100:hover{--gradient-via-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-yellow-200:hover{--gradient-via-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-yellow-300:hover{--gradient-via-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-yellow-400:hover{--gradient-via-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-yellow-500:hover{--gradient-via-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-yellow-600:hover{--gradient-via-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-yellow-700:hover{--gradient-via-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-yellow-800:hover{--gradient-via-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-yellow-900:hover{--gradient-via-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-green-100:hover{--gradient-via-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-green-200:hover{--gradient-via-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-green-300:hover{--gradient-via-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-green-400:hover{--gradient-via-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-green-500:hover{--gradient-via-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-green-600:hover{--gradient-via-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-green-700:hover{--gradient-via-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-green-800:hover{--gradient-via-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-green-900:hover{--gradient-via-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-teal-100:hover{--gradient-via-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-teal-200:hover{--gradient-via-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-teal-300:hover{--gradient-via-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-teal-400:hover{--gradient-via-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-teal-500:hover{--gradient-via-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-teal-600:hover{--gradient-via-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-teal-700:hover{--gradient-via-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-teal-800:hover{--gradient-via-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-teal-900:hover{--gradient-via-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-blue-100:hover{--gradient-via-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-blue-200:hover{--gradient-via-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-blue-300:hover{--gradient-via-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-blue-400:hover{--gradient-via-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-blue-500:hover{--gradient-via-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-blue-600:hover{--gradient-via-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-blue-700:hover{--gradient-via-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-blue-800:hover{--gradient-via-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-blue-900:hover{--gradient-via-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-indigo-100:hover{--gradient-via-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-indigo-200:hover{--gradient-via-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-indigo-300:hover{--gradient-via-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-indigo-400:hover{--gradient-via-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-indigo-500:hover{--gradient-via-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-indigo-600:hover{--gradient-via-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-indigo-700:hover{--gradient-via-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-indigo-800:hover{--gradient-via-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-indigo-900:hover{--gradient-via-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-purple-100:hover{--gradient-via-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-purple-200:hover{--gradient-via-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-purple-300:hover{--gradient-via-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-purple-400:hover{--gradient-via-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-purple-500:hover{--gradient-via-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-purple-600:hover{--gradient-via-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-purple-700:hover{--gradient-via-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-purple-800:hover{--gradient-via-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-purple-900:hover{--gradient-via-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-pink-100:hover{--gradient-via-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-pink-200:hover{--gradient-via-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-pink-300:hover{--gradient-via-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-pink-400:hover{--gradient-via-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-pink-500:hover{--gradient-via-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-pink-600:hover{--gradient-via-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-pink-700:hover{--gradient-via-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-pink-800:hover{--gradient-via-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:599px){.xs\\:hover\\:via-pink-900:hover{--gradient-via-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:599px){.xs\\:hover\\:to-transparent:hover{--gradient-to-color:transparent!important}}@media (min-width:599px){.xs\\:hover\\:to-current:hover{--gradient-to-color:currentColor!important}}@media (min-width:599px){.xs\\:hover\\:to-black:hover{--gradient-to-color:#000!important}}@media (min-width:599px){.xs\\:hover\\:to-white:hover{--gradient-to-color:#fff!important}}@media (min-width:599px){.xs\\:hover\\:to-gray-100:hover{--gradient-to-color:#f7fafc!important}}@media (min-width:599px){.xs\\:hover\\:to-gray-200:hover{--gradient-to-color:#edf2f7!important}}@media (min-width:599px){.xs\\:hover\\:to-gray-300:hover{--gradient-to-color:#e2e8f0!important}}@media (min-width:599px){.xs\\:hover\\:to-gray-400:hover{--gradient-to-color:#cbd5e0!important}}@media (min-width:599px){.xs\\:hover\\:to-gray-500:hover{--gradient-to-color:#a0aec0!important}}@media (min-width:599px){.xs\\:hover\\:to-gray-600:hover{--gradient-to-color:#718096!important}}@media (min-width:599px){.xs\\:hover\\:to-gray-700:hover{--gradient-to-color:#4a5568!important}}@media (min-width:599px){.xs\\:hover\\:to-gray-800:hover{--gradient-to-color:#2d3748!important}}@media (min-width:599px){.xs\\:hover\\:to-gray-900:hover{--gradient-to-color:#1a202c!important}}@media (min-width:599px){.xs\\:hover\\:to-red-100:hover{--gradient-to-color:#fff5f5!important}}@media (min-width:599px){.xs\\:hover\\:to-red-200:hover{--gradient-to-color:#fed7d7!important}}@media (min-width:599px){.xs\\:hover\\:to-red-300:hover{--gradient-to-color:#feb2b2!important}}@media (min-width:599px){.xs\\:hover\\:to-red-400:hover{--gradient-to-color:#fc8181!important}}@media (min-width:599px){.xs\\:hover\\:to-red-500:hover{--gradient-to-color:#f56565!important}}@media (min-width:599px){.xs\\:hover\\:to-red-600:hover{--gradient-to-color:#e53e3e!important}}@media (min-width:599px){.xs\\:hover\\:to-red-700:hover{--gradient-to-color:#c53030!important}}@media (min-width:599px){.xs\\:hover\\:to-red-800:hover{--gradient-to-color:#9b2c2c!important}}@media (min-width:599px){.xs\\:hover\\:to-red-900:hover{--gradient-to-color:#742a2a!important}}@media (min-width:599px){.xs\\:hover\\:to-orange-100:hover{--gradient-to-color:#fffaf0!important}}@media (min-width:599px){.xs\\:hover\\:to-orange-200:hover{--gradient-to-color:#feebc8!important}}@media (min-width:599px){.xs\\:hover\\:to-orange-300:hover{--gradient-to-color:#fbd38d!important}}@media (min-width:599px){.xs\\:hover\\:to-orange-400:hover{--gradient-to-color:#f6ad55!important}}@media (min-width:599px){.xs\\:hover\\:to-orange-500:hover{--gradient-to-color:#ed8936!important}}@media (min-width:599px){.xs\\:hover\\:to-orange-600:hover{--gradient-to-color:#dd6b20!important}}@media (min-width:599px){.xs\\:hover\\:to-orange-700:hover{--gradient-to-color:#c05621!important}}@media (min-width:599px){.xs\\:hover\\:to-orange-800:hover{--gradient-to-color:#9c4221!important}}@media (min-width:599px){.xs\\:hover\\:to-orange-900:hover{--gradient-to-color:#7b341e!important}}@media (min-width:599px){.xs\\:hover\\:to-yellow-100:hover{--gradient-to-color:ivory!important}}@media (min-width:599px){.xs\\:hover\\:to-yellow-200:hover{--gradient-to-color:#fefcbf!important}}@media (min-width:599px){.xs\\:hover\\:to-yellow-300:hover{--gradient-to-color:#faf089!important}}@media (min-width:599px){.xs\\:hover\\:to-yellow-400:hover{--gradient-to-color:#f6e05e!important}}@media (min-width:599px){.xs\\:hover\\:to-yellow-500:hover{--gradient-to-color:#ecc94b!important}}@media (min-width:599px){.xs\\:hover\\:to-yellow-600:hover{--gradient-to-color:#d69e2e!important}}@media (min-width:599px){.xs\\:hover\\:to-yellow-700:hover{--gradient-to-color:#b7791f!important}}@media (min-width:599px){.xs\\:hover\\:to-yellow-800:hover{--gradient-to-color:#975a16!important}}@media (min-width:599px){.xs\\:hover\\:to-yellow-900:hover{--gradient-to-color:#744210!important}}@media (min-width:599px){.xs\\:hover\\:to-green-100:hover{--gradient-to-color:#f0fff4!important}}@media (min-width:599px){.xs\\:hover\\:to-green-200:hover{--gradient-to-color:#c6f6d5!important}}@media (min-width:599px){.xs\\:hover\\:to-green-300:hover{--gradient-to-color:#9ae6b4!important}}@media (min-width:599px){.xs\\:hover\\:to-green-400:hover{--gradient-to-color:#68d391!important}}@media (min-width:599px){.xs\\:hover\\:to-green-500:hover{--gradient-to-color:#48bb78!important}}@media (min-width:599px){.xs\\:hover\\:to-green-600:hover{--gradient-to-color:#38a169!important}}@media (min-width:599px){.xs\\:hover\\:to-green-700:hover{--gradient-to-color:#2f855a!important}}@media (min-width:599px){.xs\\:hover\\:to-green-800:hover{--gradient-to-color:#276749!important}}@media (min-width:599px){.xs\\:hover\\:to-green-900:hover{--gradient-to-color:#22543d!important}}@media (min-width:599px){.xs\\:hover\\:to-teal-100:hover{--gradient-to-color:#e6fffa!important}}@media (min-width:599px){.xs\\:hover\\:to-teal-200:hover{--gradient-to-color:#b2f5ea!important}}@media (min-width:599px){.xs\\:hover\\:to-teal-300:hover{--gradient-to-color:#81e6d9!important}}@media (min-width:599px){.xs\\:hover\\:to-teal-400:hover{--gradient-to-color:#4fd1c5!important}}@media (min-width:599px){.xs\\:hover\\:to-teal-500:hover{--gradient-to-color:#38b2ac!important}}@media (min-width:599px){.xs\\:hover\\:to-teal-600:hover{--gradient-to-color:#319795!important}}@media (min-width:599px){.xs\\:hover\\:to-teal-700:hover{--gradient-to-color:#2c7a7b!important}}@media (min-width:599px){.xs\\:hover\\:to-teal-800:hover{--gradient-to-color:#285e61!important}}@media (min-width:599px){.xs\\:hover\\:to-teal-900:hover{--gradient-to-color:#234e52!important}}@media (min-width:599px){.xs\\:hover\\:to-blue-100:hover{--gradient-to-color:#ebf8ff!important}}@media (min-width:599px){.xs\\:hover\\:to-blue-200:hover{--gradient-to-color:#bee3f8!important}}@media (min-width:599px){.xs\\:hover\\:to-blue-300:hover{--gradient-to-color:#90cdf4!important}}@media (min-width:599px){.xs\\:hover\\:to-blue-400:hover{--gradient-to-color:#63b3ed!important}}@media (min-width:599px){.xs\\:hover\\:to-blue-500:hover{--gradient-to-color:#4299e1!important}}@media (min-width:599px){.xs\\:hover\\:to-blue-600:hover{--gradient-to-color:#3182ce!important}}@media (min-width:599px){.xs\\:hover\\:to-blue-700:hover{--gradient-to-color:#2b6cb0!important}}@media (min-width:599px){.xs\\:hover\\:to-blue-800:hover{--gradient-to-color:#2c5282!important}}@media (min-width:599px){.xs\\:hover\\:to-blue-900:hover{--gradient-to-color:#2a4365!important}}@media (min-width:599px){.xs\\:hover\\:to-indigo-100:hover{--gradient-to-color:#ebf4ff!important}}@media (min-width:599px){.xs\\:hover\\:to-indigo-200:hover{--gradient-to-color:#c3dafe!important}}@media (min-width:599px){.xs\\:hover\\:to-indigo-300:hover{--gradient-to-color:#a3bffa!important}}@media (min-width:599px){.xs\\:hover\\:to-indigo-400:hover{--gradient-to-color:#7f9cf5!important}}@media (min-width:599px){.xs\\:hover\\:to-indigo-500:hover{--gradient-to-color:#667eea!important}}@media (min-width:599px){.xs\\:hover\\:to-indigo-600:hover{--gradient-to-color:#5a67d8!important}}@media (min-width:599px){.xs\\:hover\\:to-indigo-700:hover{--gradient-to-color:#4c51bf!important}}@media (min-width:599px){.xs\\:hover\\:to-indigo-800:hover{--gradient-to-color:#434190!important}}@media (min-width:599px){.xs\\:hover\\:to-indigo-900:hover{--gradient-to-color:#3c366b!important}}@media (min-width:599px){.xs\\:hover\\:to-purple-100:hover{--gradient-to-color:#faf5ff!important}}@media (min-width:599px){.xs\\:hover\\:to-purple-200:hover{--gradient-to-color:#e9d8fd!important}}@media (min-width:599px){.xs\\:hover\\:to-purple-300:hover{--gradient-to-color:#d6bcfa!important}}@media (min-width:599px){.xs\\:hover\\:to-purple-400:hover{--gradient-to-color:#b794f4!important}}@media (min-width:599px){.xs\\:hover\\:to-purple-500:hover{--gradient-to-color:#9f7aea!important}}@media (min-width:599px){.xs\\:hover\\:to-purple-600:hover{--gradient-to-color:#805ad5!important}}@media (min-width:599px){.xs\\:hover\\:to-purple-700:hover{--gradient-to-color:#6b46c1!important}}@media (min-width:599px){.xs\\:hover\\:to-purple-800:hover{--gradient-to-color:#553c9a!important}}@media (min-width:599px){.xs\\:hover\\:to-purple-900:hover{--gradient-to-color:#44337a!important}}@media (min-width:599px){.xs\\:hover\\:to-pink-100:hover{--gradient-to-color:#fff5f7!important}}@media (min-width:599px){.xs\\:hover\\:to-pink-200:hover{--gradient-to-color:#fed7e2!important}}@media (min-width:599px){.xs\\:hover\\:to-pink-300:hover{--gradient-to-color:#fbb6ce!important}}@media (min-width:599px){.xs\\:hover\\:to-pink-400:hover{--gradient-to-color:#f687b3!important}}@media (min-width:599px){.xs\\:hover\\:to-pink-500:hover{--gradient-to-color:#ed64a6!important}}@media (min-width:599px){.xs\\:hover\\:to-pink-600:hover{--gradient-to-color:#d53f8c!important}}@media (min-width:599px){.xs\\:hover\\:to-pink-700:hover{--gradient-to-color:#b83280!important}}@media (min-width:599px){.xs\\:hover\\:to-pink-800:hover{--gradient-to-color:#97266d!important}}@media (min-width:599px){.xs\\:hover\\:to-pink-900:hover{--gradient-to-color:#702459!important}}@media (min-width:599px){.xs\\:focus\\:from-transparent:focus{--gradient-from-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:599px){.xs\\:focus\\:from-current:focus{--gradient-from-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-black:focus{--gradient-from-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:599px){.xs\\:focus\\:from-white:focus{--gradient-from-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-gray-100:focus{--gradient-from-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-gray-200:focus{--gradient-from-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-gray-300:focus{--gradient-from-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-gray-400:focus{--gradient-from-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-gray-500:focus{--gradient-from-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-gray-600:focus{--gradient-from-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-gray-700:focus{--gradient-from-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-gray-800:focus{--gradient-from-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-gray-900:focus{--gradient-from-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-red-100:focus{--gradient-from-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-red-200:focus{--gradient-from-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-red-300:focus{--gradient-from-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-red-400:focus{--gradient-from-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-red-500:focus{--gradient-from-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-red-600:focus{--gradient-from-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-red-700:focus{--gradient-from-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-red-800:focus{--gradient-from-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-red-900:focus{--gradient-from-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-orange-100:focus{--gradient-from-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-orange-200:focus{--gradient-from-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-orange-300:focus{--gradient-from-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-orange-400:focus{--gradient-from-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-orange-500:focus{--gradient-from-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-orange-600:focus{--gradient-from-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-orange-700:focus{--gradient-from-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-orange-800:focus{--gradient-from-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-orange-900:focus{--gradient-from-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-yellow-100:focus{--gradient-from-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-yellow-200:focus{--gradient-from-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-yellow-300:focus{--gradient-from-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-yellow-400:focus{--gradient-from-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-yellow-500:focus{--gradient-from-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-yellow-600:focus{--gradient-from-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-yellow-700:focus{--gradient-from-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-yellow-800:focus{--gradient-from-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-yellow-900:focus{--gradient-from-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-green-100:focus{--gradient-from-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-green-200:focus{--gradient-from-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-green-300:focus{--gradient-from-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-green-400:focus{--gradient-from-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-green-500:focus{--gradient-from-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-green-600:focus{--gradient-from-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-green-700:focus{--gradient-from-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-green-800:focus{--gradient-from-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-green-900:focus{--gradient-from-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-teal-100:focus{--gradient-from-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-teal-200:focus{--gradient-from-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-teal-300:focus{--gradient-from-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-teal-400:focus{--gradient-from-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-teal-500:focus{--gradient-from-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-teal-600:focus{--gradient-from-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-teal-700:focus{--gradient-from-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-teal-800:focus{--gradient-from-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-teal-900:focus{--gradient-from-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-blue-100:focus{--gradient-from-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-blue-200:focus{--gradient-from-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-blue-300:focus{--gradient-from-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-blue-400:focus{--gradient-from-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-blue-500:focus{--gradient-from-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-blue-600:focus{--gradient-from-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-blue-700:focus{--gradient-from-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-blue-800:focus{--gradient-from-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-blue-900:focus{--gradient-from-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-indigo-100:focus{--gradient-from-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-indigo-200:focus{--gradient-from-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-indigo-300:focus{--gradient-from-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-indigo-400:focus{--gradient-from-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-indigo-500:focus{--gradient-from-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-indigo-600:focus{--gradient-from-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-indigo-700:focus{--gradient-from-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-indigo-800:focus{--gradient-from-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-indigo-900:focus{--gradient-from-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-purple-100:focus{--gradient-from-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-purple-200:focus{--gradient-from-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-purple-300:focus{--gradient-from-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-purple-400:focus{--gradient-from-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-purple-500:focus{--gradient-from-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-purple-600:focus{--gradient-from-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-purple-700:focus{--gradient-from-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-purple-800:focus{--gradient-from-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-purple-900:focus{--gradient-from-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-pink-100:focus{--gradient-from-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-pink-200:focus{--gradient-from-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-pink-300:focus{--gradient-from-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-pink-400:focus{--gradient-from-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-pink-500:focus{--gradient-from-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-pink-600:focus{--gradient-from-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-pink-700:focus{--gradient-from-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-pink-800:focus{--gradient-from-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:599px){.xs\\:focus\\:from-pink-900:focus{--gradient-from-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-transparent:focus{--gradient-via-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:599px){.xs\\:focus\\:via-current:focus{--gradient-via-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-black:focus{--gradient-via-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:599px){.xs\\:focus\\:via-white:focus{--gradient-via-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-gray-100:focus{--gradient-via-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-gray-200:focus{--gradient-via-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-gray-300:focus{--gradient-via-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-gray-400:focus{--gradient-via-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-gray-500:focus{--gradient-via-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-gray-600:focus{--gradient-via-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-gray-700:focus{--gradient-via-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-gray-800:focus{--gradient-via-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-gray-900:focus{--gradient-via-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-red-100:focus{--gradient-via-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-red-200:focus{--gradient-via-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-red-300:focus{--gradient-via-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-red-400:focus{--gradient-via-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-red-500:focus{--gradient-via-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-red-600:focus{--gradient-via-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-red-700:focus{--gradient-via-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-red-800:focus{--gradient-via-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-red-900:focus{--gradient-via-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-orange-100:focus{--gradient-via-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-orange-200:focus{--gradient-via-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-orange-300:focus{--gradient-via-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-orange-400:focus{--gradient-via-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-orange-500:focus{--gradient-via-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-orange-600:focus{--gradient-via-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-orange-700:focus{--gradient-via-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-orange-800:focus{--gradient-via-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-orange-900:focus{--gradient-via-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-yellow-100:focus{--gradient-via-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-yellow-200:focus{--gradient-via-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-yellow-300:focus{--gradient-via-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-yellow-400:focus{--gradient-via-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-yellow-500:focus{--gradient-via-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-yellow-600:focus{--gradient-via-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-yellow-700:focus{--gradient-via-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-yellow-800:focus{--gradient-via-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-yellow-900:focus{--gradient-via-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-green-100:focus{--gradient-via-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-green-200:focus{--gradient-via-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-green-300:focus{--gradient-via-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-green-400:focus{--gradient-via-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-green-500:focus{--gradient-via-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-green-600:focus{--gradient-via-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-green-700:focus{--gradient-via-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-green-800:focus{--gradient-via-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-green-900:focus{--gradient-via-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-teal-100:focus{--gradient-via-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-teal-200:focus{--gradient-via-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-teal-300:focus{--gradient-via-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-teal-400:focus{--gradient-via-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-teal-500:focus{--gradient-via-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-teal-600:focus{--gradient-via-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-teal-700:focus{--gradient-via-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-teal-800:focus{--gradient-via-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-teal-900:focus{--gradient-via-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-blue-100:focus{--gradient-via-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-blue-200:focus{--gradient-via-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-blue-300:focus{--gradient-via-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-blue-400:focus{--gradient-via-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-blue-500:focus{--gradient-via-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-blue-600:focus{--gradient-via-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-blue-700:focus{--gradient-via-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-blue-800:focus{--gradient-via-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-blue-900:focus{--gradient-via-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-indigo-100:focus{--gradient-via-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-indigo-200:focus{--gradient-via-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-indigo-300:focus{--gradient-via-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-indigo-400:focus{--gradient-via-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-indigo-500:focus{--gradient-via-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-indigo-600:focus{--gradient-via-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-indigo-700:focus{--gradient-via-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-indigo-800:focus{--gradient-via-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-indigo-900:focus{--gradient-via-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-purple-100:focus{--gradient-via-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-purple-200:focus{--gradient-via-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-purple-300:focus{--gradient-via-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-purple-400:focus{--gradient-via-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-purple-500:focus{--gradient-via-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-purple-600:focus{--gradient-via-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-purple-700:focus{--gradient-via-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-purple-800:focus{--gradient-via-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-purple-900:focus{--gradient-via-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-pink-100:focus{--gradient-via-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-pink-200:focus{--gradient-via-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-pink-300:focus{--gradient-via-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-pink-400:focus{--gradient-via-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-pink-500:focus{--gradient-via-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-pink-600:focus{--gradient-via-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-pink-700:focus{--gradient-via-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-pink-800:focus{--gradient-via-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:599px){.xs\\:focus\\:via-pink-900:focus{--gradient-via-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:599px){.xs\\:focus\\:to-transparent:focus{--gradient-to-color:transparent!important}}@media (min-width:599px){.xs\\:focus\\:to-current:focus{--gradient-to-color:currentColor!important}}@media (min-width:599px){.xs\\:focus\\:to-black:focus{--gradient-to-color:#000!important}}@media (min-width:599px){.xs\\:focus\\:to-white:focus{--gradient-to-color:#fff!important}}@media (min-width:599px){.xs\\:focus\\:to-gray-100:focus{--gradient-to-color:#f7fafc!important}}@media (min-width:599px){.xs\\:focus\\:to-gray-200:focus{--gradient-to-color:#edf2f7!important}}@media (min-width:599px){.xs\\:focus\\:to-gray-300:focus{--gradient-to-color:#e2e8f0!important}}@media (min-width:599px){.xs\\:focus\\:to-gray-400:focus{--gradient-to-color:#cbd5e0!important}}@media (min-width:599px){.xs\\:focus\\:to-gray-500:focus{--gradient-to-color:#a0aec0!important}}@media (min-width:599px){.xs\\:focus\\:to-gray-600:focus{--gradient-to-color:#718096!important}}@media (min-width:599px){.xs\\:focus\\:to-gray-700:focus{--gradient-to-color:#4a5568!important}}@media (min-width:599px){.xs\\:focus\\:to-gray-800:focus{--gradient-to-color:#2d3748!important}}@media (min-width:599px){.xs\\:focus\\:to-gray-900:focus{--gradient-to-color:#1a202c!important}}@media (min-width:599px){.xs\\:focus\\:to-red-100:focus{--gradient-to-color:#fff5f5!important}}@media (min-width:599px){.xs\\:focus\\:to-red-200:focus{--gradient-to-color:#fed7d7!important}}@media (min-width:599px){.xs\\:focus\\:to-red-300:focus{--gradient-to-color:#feb2b2!important}}@media (min-width:599px){.xs\\:focus\\:to-red-400:focus{--gradient-to-color:#fc8181!important}}@media (min-width:599px){.xs\\:focus\\:to-red-500:focus{--gradient-to-color:#f56565!important}}@media (min-width:599px){.xs\\:focus\\:to-red-600:focus{--gradient-to-color:#e53e3e!important}}@media (min-width:599px){.xs\\:focus\\:to-red-700:focus{--gradient-to-color:#c53030!important}}@media (min-width:599px){.xs\\:focus\\:to-red-800:focus{--gradient-to-color:#9b2c2c!important}}@media (min-width:599px){.xs\\:focus\\:to-red-900:focus{--gradient-to-color:#742a2a!important}}@media (min-width:599px){.xs\\:focus\\:to-orange-100:focus{--gradient-to-color:#fffaf0!important}}@media (min-width:599px){.xs\\:focus\\:to-orange-200:focus{--gradient-to-color:#feebc8!important}}@media (min-width:599px){.xs\\:focus\\:to-orange-300:focus{--gradient-to-color:#fbd38d!important}}@media (min-width:599px){.xs\\:focus\\:to-orange-400:focus{--gradient-to-color:#f6ad55!important}}@media (min-width:599px){.xs\\:focus\\:to-orange-500:focus{--gradient-to-color:#ed8936!important}}@media (min-width:599px){.xs\\:focus\\:to-orange-600:focus{--gradient-to-color:#dd6b20!important}}@media (min-width:599px){.xs\\:focus\\:to-orange-700:focus{--gradient-to-color:#c05621!important}}@media (min-width:599px){.xs\\:focus\\:to-orange-800:focus{--gradient-to-color:#9c4221!important}}@media (min-width:599px){.xs\\:focus\\:to-orange-900:focus{--gradient-to-color:#7b341e!important}}@media (min-width:599px){.xs\\:focus\\:to-yellow-100:focus{--gradient-to-color:ivory!important}}@media (min-width:599px){.xs\\:focus\\:to-yellow-200:focus{--gradient-to-color:#fefcbf!important}}@media (min-width:599px){.xs\\:focus\\:to-yellow-300:focus{--gradient-to-color:#faf089!important}}@media (min-width:599px){.xs\\:focus\\:to-yellow-400:focus{--gradient-to-color:#f6e05e!important}}@media (min-width:599px){.xs\\:focus\\:to-yellow-500:focus{--gradient-to-color:#ecc94b!important}}@media (min-width:599px){.xs\\:focus\\:to-yellow-600:focus{--gradient-to-color:#d69e2e!important}}@media (min-width:599px){.xs\\:focus\\:to-yellow-700:focus{--gradient-to-color:#b7791f!important}}@media (min-width:599px){.xs\\:focus\\:to-yellow-800:focus{--gradient-to-color:#975a16!important}}@media (min-width:599px){.xs\\:focus\\:to-yellow-900:focus{--gradient-to-color:#744210!important}}@media (min-width:599px){.xs\\:focus\\:to-green-100:focus{--gradient-to-color:#f0fff4!important}}@media (min-width:599px){.xs\\:focus\\:to-green-200:focus{--gradient-to-color:#c6f6d5!important}}@media (min-width:599px){.xs\\:focus\\:to-green-300:focus{--gradient-to-color:#9ae6b4!important}}@media (min-width:599px){.xs\\:focus\\:to-green-400:focus{--gradient-to-color:#68d391!important}}@media (min-width:599px){.xs\\:focus\\:to-green-500:focus{--gradient-to-color:#48bb78!important}}@media (min-width:599px){.xs\\:focus\\:to-green-600:focus{--gradient-to-color:#38a169!important}}@media (min-width:599px){.xs\\:focus\\:to-green-700:focus{--gradient-to-color:#2f855a!important}}@media (min-width:599px){.xs\\:focus\\:to-green-800:focus{--gradient-to-color:#276749!important}}@media (min-width:599px){.xs\\:focus\\:to-green-900:focus{--gradient-to-color:#22543d!important}}@media (min-width:599px){.xs\\:focus\\:to-teal-100:focus{--gradient-to-color:#e6fffa!important}}@media (min-width:599px){.xs\\:focus\\:to-teal-200:focus{--gradient-to-color:#b2f5ea!important}}@media (min-width:599px){.xs\\:focus\\:to-teal-300:focus{--gradient-to-color:#81e6d9!important}}@media (min-width:599px){.xs\\:focus\\:to-teal-400:focus{--gradient-to-color:#4fd1c5!important}}@media (min-width:599px){.xs\\:focus\\:to-teal-500:focus{--gradient-to-color:#38b2ac!important}}@media (min-width:599px){.xs\\:focus\\:to-teal-600:focus{--gradient-to-color:#319795!important}}@media (min-width:599px){.xs\\:focus\\:to-teal-700:focus{--gradient-to-color:#2c7a7b!important}}@media (min-width:599px){.xs\\:focus\\:to-teal-800:focus{--gradient-to-color:#285e61!important}}@media (min-width:599px){.xs\\:focus\\:to-teal-900:focus{--gradient-to-color:#234e52!important}}@media (min-width:599px){.xs\\:focus\\:to-blue-100:focus{--gradient-to-color:#ebf8ff!important}}@media (min-width:599px){.xs\\:focus\\:to-blue-200:focus{--gradient-to-color:#bee3f8!important}}@media (min-width:599px){.xs\\:focus\\:to-blue-300:focus{--gradient-to-color:#90cdf4!important}}@media (min-width:599px){.xs\\:focus\\:to-blue-400:focus{--gradient-to-color:#63b3ed!important}}@media (min-width:599px){.xs\\:focus\\:to-blue-500:focus{--gradient-to-color:#4299e1!important}}@media (min-width:599px){.xs\\:focus\\:to-blue-600:focus{--gradient-to-color:#3182ce!important}}@media (min-width:599px){.xs\\:focus\\:to-blue-700:focus{--gradient-to-color:#2b6cb0!important}}@media (min-width:599px){.xs\\:focus\\:to-blue-800:focus{--gradient-to-color:#2c5282!important}}@media (min-width:599px){.xs\\:focus\\:to-blue-900:focus{--gradient-to-color:#2a4365!important}}@media (min-width:599px){.xs\\:focus\\:to-indigo-100:focus{--gradient-to-color:#ebf4ff!important}}@media (min-width:599px){.xs\\:focus\\:to-indigo-200:focus{--gradient-to-color:#c3dafe!important}}@media (min-width:599px){.xs\\:focus\\:to-indigo-300:focus{--gradient-to-color:#a3bffa!important}}@media (min-width:599px){.xs\\:focus\\:to-indigo-400:focus{--gradient-to-color:#7f9cf5!important}}@media (min-width:599px){.xs\\:focus\\:to-indigo-500:focus{--gradient-to-color:#667eea!important}}@media (min-width:599px){.xs\\:focus\\:to-indigo-600:focus{--gradient-to-color:#5a67d8!important}}@media (min-width:599px){.xs\\:focus\\:to-indigo-700:focus{--gradient-to-color:#4c51bf!important}}@media (min-width:599px){.xs\\:focus\\:to-indigo-800:focus{--gradient-to-color:#434190!important}}@media (min-width:599px){.xs\\:focus\\:to-indigo-900:focus{--gradient-to-color:#3c366b!important}}@media (min-width:599px){.xs\\:focus\\:to-purple-100:focus{--gradient-to-color:#faf5ff!important}}@media (min-width:599px){.xs\\:focus\\:to-purple-200:focus{--gradient-to-color:#e9d8fd!important}}@media (min-width:599px){.xs\\:focus\\:to-purple-300:focus{--gradient-to-color:#d6bcfa!important}}@media (min-width:599px){.xs\\:focus\\:to-purple-400:focus{--gradient-to-color:#b794f4!important}}@media (min-width:599px){.xs\\:focus\\:to-purple-500:focus{--gradient-to-color:#9f7aea!important}}@media (min-width:599px){.xs\\:focus\\:to-purple-600:focus{--gradient-to-color:#805ad5!important}}@media (min-width:599px){.xs\\:focus\\:to-purple-700:focus{--gradient-to-color:#6b46c1!important}}@media (min-width:599px){.xs\\:focus\\:to-purple-800:focus{--gradient-to-color:#553c9a!important}}@media (min-width:599px){.xs\\:focus\\:to-purple-900:focus{--gradient-to-color:#44337a!important}}@media (min-width:599px){.xs\\:focus\\:to-pink-100:focus{--gradient-to-color:#fff5f7!important}}@media (min-width:599px){.xs\\:focus\\:to-pink-200:focus{--gradient-to-color:#fed7e2!important}}@media (min-width:599px){.xs\\:focus\\:to-pink-300:focus{--gradient-to-color:#fbb6ce!important}}@media (min-width:599px){.xs\\:focus\\:to-pink-400:focus{--gradient-to-color:#f687b3!important}}@media (min-width:599px){.xs\\:focus\\:to-pink-500:focus{--gradient-to-color:#ed64a6!important}}@media (min-width:599px){.xs\\:focus\\:to-pink-600:focus{--gradient-to-color:#d53f8c!important}}@media (min-width:599px){.xs\\:focus\\:to-pink-700:focus{--gradient-to-color:#b83280!important}}@media (min-width:599px){.xs\\:focus\\:to-pink-800:focus{--gradient-to-color:#97266d!important}}@media (min-width:599px){.xs\\:focus\\:to-pink-900:focus{--gradient-to-color:#702459!important}}@media (min-width:599px){.xs\\:bg-opacity-0{--bg-opacity:0!important}}@media (min-width:599px){.xs\\:bg-opacity-25{--bg-opacity:0.25!important}}@media (min-width:599px){.xs\\:bg-opacity-50{--bg-opacity:0.5!important}}@media (min-width:599px){.xs\\:bg-opacity-75{--bg-opacity:0.75!important}}@media (min-width:599px){.xs\\:bg-opacity-100{--bg-opacity:1!important}}@media (min-width:599px){.xs\\:hover\\:bg-opacity-0:hover{--bg-opacity:0!important}}@media (min-width:599px){.xs\\:hover\\:bg-opacity-25:hover{--bg-opacity:0.25!important}}@media (min-width:599px){.xs\\:hover\\:bg-opacity-50:hover{--bg-opacity:0.5!important}}@media (min-width:599px){.xs\\:hover\\:bg-opacity-75:hover{--bg-opacity:0.75!important}}@media (min-width:599px){.xs\\:hover\\:bg-opacity-100:hover{--bg-opacity:1!important}}@media (min-width:599px){.xs\\:focus\\:bg-opacity-0:focus{--bg-opacity:0!important}}@media (min-width:599px){.xs\\:focus\\:bg-opacity-25:focus{--bg-opacity:0.25!important}}@media (min-width:599px){.xs\\:focus\\:bg-opacity-50:focus{--bg-opacity:0.5!important}}@media (min-width:599px){.xs\\:focus\\:bg-opacity-75:focus{--bg-opacity:0.75!important}}@media (min-width:599px){.xs\\:focus\\:bg-opacity-100:focus{--bg-opacity:1!important}}@media (min-width:599px){.xs\\:bg-bottom{background-position:bottom!important}}@media (min-width:599px){.xs\\:bg-center{background-position:50%!important}}@media (min-width:599px){.xs\\:bg-left{background-position:0!important}}@media (min-width:599px){.xs\\:bg-left-bottom{background-position:0 100%!important}}@media (min-width:599px){.xs\\:bg-left-top{background-position:0 0!important}}@media (min-width:599px){.xs\\:bg-right{background-position:100%!important}}@media (min-width:599px){.xs\\:bg-right-bottom{background-position:100% 100%!important}}@media (min-width:599px){.xs\\:bg-right-top{background-position:100% 0!important}}@media (min-width:599px){.xs\\:bg-top{background-position:top!important}}@media (min-width:599px){.xs\\:bg-repeat{background-repeat:repeat!important}}@media (min-width:599px){.xs\\:bg-no-repeat{background-repeat:no-repeat!important}}@media (min-width:599px){.xs\\:bg-repeat-x{background-repeat:repeat-x!important}}@media (min-width:599px){.xs\\:bg-repeat-y{background-repeat:repeat-y!important}}@media (min-width:599px){.xs\\:bg-repeat-round{background-repeat:round!important}}@media (min-width:599px){.xs\\:bg-repeat-space{background-repeat:space!important}}@media (min-width:599px){.xs\\:bg-auto{background-size:auto!important}}@media (min-width:599px){.xs\\:bg-cover{background-size:cover!important}}@media (min-width:599px){.xs\\:bg-contain{background-size:contain!important}}@media (min-width:599px){.xs\\:border-collapse{border-collapse:collapse!important}}@media (min-width:599px){.xs\\:border-separate{border-collapse:initial!important}}@media (min-width:599px){.xs\\:border-opacity-0{--border-opacity:0!important}}@media (min-width:599px){.xs\\:border-opacity-25{--border-opacity:0.25!important}}@media (min-width:599px){.xs\\:border-opacity-50{--border-opacity:0.5!important}}@media (min-width:599px){.xs\\:border-opacity-75{--border-opacity:0.75!important}}@media (min-width:599px){.xs\\:border-opacity-100{--border-opacity:1!important}}@media (min-width:599px){.xs\\:hover\\:border-opacity-0:hover{--border-opacity:0!important}}@media (min-width:599px){.xs\\:hover\\:border-opacity-25:hover{--border-opacity:0.25!important}}@media (min-width:599px){.xs\\:hover\\:border-opacity-50:hover{--border-opacity:0.5!important}}@media (min-width:599px){.xs\\:hover\\:border-opacity-75:hover{--border-opacity:0.75!important}}@media (min-width:599px){.xs\\:hover\\:border-opacity-100:hover{--border-opacity:1!important}}@media (min-width:599px){.xs\\:focus\\:border-opacity-0:focus{--border-opacity:0!important}}@media (min-width:599px){.xs\\:focus\\:border-opacity-25:focus{--border-opacity:0.25!important}}@media (min-width:599px){.xs\\:focus\\:border-opacity-50:focus{--border-opacity:0.5!important}}@media (min-width:599px){.xs\\:focus\\:border-opacity-75:focus{--border-opacity:0.75!important}}@media (min-width:599px){.xs\\:focus\\:border-opacity-100:focus{--border-opacity:1!important}}@media (min-width:599px){.xs\\:rounded-none{border-radius:0!important}}@media (min-width:599px){.xs\\:rounded-sm{border-radius:.125rem!important}}@media (min-width:599px){.xs\\:rounded{border-radius:.25rem!important}}@media (min-width:599px){.xs\\:rounded-md{border-radius:.375rem!important}}@media (min-width:599px){.xs\\:rounded-lg{border-radius:.5rem!important}}@media (min-width:599px){.xs\\:rounded-xl{border-radius:.75rem!important}}@media (min-width:599px){.xs\\:rounded-2xl{border-radius:1rem!important}}@media (min-width:599px){.xs\\:rounded-3xl{border-radius:1.5rem!important}}@media (min-width:599px){.xs\\:rounded-full{border-radius:9999px!important}}@media (min-width:599px){.xs\\:rounded-t-none{border-top-left-radius:0!important;border-top-right-radius:0!important}}@media (min-width:599px){.xs\\:rounded-r-none{border-top-right-radius:0!important;border-bottom-right-radius:0!important}}@media (min-width:599px){.xs\\:rounded-b-none{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}}@media (min-width:599px){.xs\\:rounded-l-none{border-top-left-radius:0!important;border-bottom-left-radius:0!important}}@media (min-width:599px){.xs\\:rounded-t-sm{border-top-left-radius:.125rem!important}}@media (min-width:599px){.xs\\:rounded-r-sm,.xs\\:rounded-t-sm{border-top-right-radius:.125rem!important}}@media (min-width:599px){.xs\\:rounded-b-sm,.xs\\:rounded-r-sm{border-bottom-right-radius:.125rem!important}}@media (min-width:599px){.xs\\:rounded-b-sm,.xs\\:rounded-l-sm{border-bottom-left-radius:.125rem!important}.xs\\:rounded-l-sm{border-top-left-radius:.125rem!important}}@media (min-width:599px){.xs\\:rounded-t{border-top-left-radius:.25rem!important}}@media (min-width:599px){.xs\\:rounded-r,.xs\\:rounded-t{border-top-right-radius:.25rem!important}}@media (min-width:599px){.xs\\:rounded-b,.xs\\:rounded-r{border-bottom-right-radius:.25rem!important}}@media (min-width:599px){.xs\\:rounded-b,.xs\\:rounded-l{border-bottom-left-radius:.25rem!important}.xs\\:rounded-l{border-top-left-radius:.25rem!important}}@media (min-width:599px){.xs\\:rounded-t-md{border-top-left-radius:.375rem!important}}@media (min-width:599px){.xs\\:rounded-r-md,.xs\\:rounded-t-md{border-top-right-radius:.375rem!important}}@media (min-width:599px){.xs\\:rounded-b-md,.xs\\:rounded-r-md{border-bottom-right-radius:.375rem!important}}@media (min-width:599px){.xs\\:rounded-b-md,.xs\\:rounded-l-md{border-bottom-left-radius:.375rem!important}.xs\\:rounded-l-md{border-top-left-radius:.375rem!important}}@media (min-width:599px){.xs\\:rounded-t-lg{border-top-left-radius:.5rem!important}}@media (min-width:599px){.xs\\:rounded-r-lg,.xs\\:rounded-t-lg{border-top-right-radius:.5rem!important}}@media (min-width:599px){.xs\\:rounded-b-lg,.xs\\:rounded-r-lg{border-bottom-right-radius:.5rem!important}}@media (min-width:599px){.xs\\:rounded-b-lg,.xs\\:rounded-l-lg{border-bottom-left-radius:.5rem!important}.xs\\:rounded-l-lg{border-top-left-radius:.5rem!important}}@media (min-width:599px){.xs\\:rounded-t-xl{border-top-left-radius:.75rem!important}}@media (min-width:599px){.xs\\:rounded-r-xl,.xs\\:rounded-t-xl{border-top-right-radius:.75rem!important}}@media (min-width:599px){.xs\\:rounded-b-xl,.xs\\:rounded-r-xl{border-bottom-right-radius:.75rem!important}}@media (min-width:599px){.xs\\:rounded-b-xl,.xs\\:rounded-l-xl{border-bottom-left-radius:.75rem!important}.xs\\:rounded-l-xl{border-top-left-radius:.75rem!important}}@media (min-width:599px){.xs\\:rounded-t-2xl{border-top-left-radius:1rem!important}}@media (min-width:599px){.xs\\:rounded-r-2xl,.xs\\:rounded-t-2xl{border-top-right-radius:1rem!important}}@media (min-width:599px){.xs\\:rounded-b-2xl,.xs\\:rounded-r-2xl{border-bottom-right-radius:1rem!important}}@media (min-width:599px){.xs\\:rounded-b-2xl,.xs\\:rounded-l-2xl{border-bottom-left-radius:1rem!important}.xs\\:rounded-l-2xl{border-top-left-radius:1rem!important}}@media (min-width:599px){.xs\\:rounded-t-3xl{border-top-left-radius:1.5rem!important}}@media (min-width:599px){.xs\\:rounded-r-3xl,.xs\\:rounded-t-3xl{border-top-right-radius:1.5rem!important}}@media (min-width:599px){.xs\\:rounded-b-3xl,.xs\\:rounded-r-3xl{border-bottom-right-radius:1.5rem!important}}@media (min-width:599px){.xs\\:rounded-b-3xl,.xs\\:rounded-l-3xl{border-bottom-left-radius:1.5rem!important}.xs\\:rounded-l-3xl{border-top-left-radius:1.5rem!important}}@media (min-width:599px){.xs\\:rounded-t-full{border-top-left-radius:9999px!important}}@media (min-width:599px){.xs\\:rounded-r-full,.xs\\:rounded-t-full{border-top-right-radius:9999px!important}}@media (min-width:599px){.xs\\:rounded-b-full,.xs\\:rounded-r-full{border-bottom-right-radius:9999px!important}}@media (min-width:599px){.xs\\:rounded-b-full,.xs\\:rounded-l-full{border-bottom-left-radius:9999px!important}.xs\\:rounded-l-full{border-top-left-radius:9999px!important}}@media (min-width:599px){.xs\\:rounded-tl-none{border-top-left-radius:0!important}}@media (min-width:599px){.xs\\:rounded-tr-none{border-top-right-radius:0!important}}@media (min-width:599px){.xs\\:rounded-br-none{border-bottom-right-radius:0!important}}@media (min-width:599px){.xs\\:rounded-bl-none{border-bottom-left-radius:0!important}}@media (min-width:599px){.xs\\:rounded-tl-sm{border-top-left-radius:.125rem!important}}@media (min-width:599px){.xs\\:rounded-tr-sm{border-top-right-radius:.125rem!important}}@media (min-width:599px){.xs\\:rounded-br-sm{border-bottom-right-radius:.125rem!important}}@media (min-width:599px){.xs\\:rounded-bl-sm{border-bottom-left-radius:.125rem!important}}@media (min-width:599px){.xs\\:rounded-tl{border-top-left-radius:.25rem!important}}@media (min-width:599px){.xs\\:rounded-tr{border-top-right-radius:.25rem!important}}@media (min-width:599px){.xs\\:rounded-br{border-bottom-right-radius:.25rem!important}}@media (min-width:599px){.xs\\:rounded-bl{border-bottom-left-radius:.25rem!important}}@media (min-width:599px){.xs\\:rounded-tl-md{border-top-left-radius:.375rem!important}}@media (min-width:599px){.xs\\:rounded-tr-md{border-top-right-radius:.375rem!important}}@media (min-width:599px){.xs\\:rounded-br-md{border-bottom-right-radius:.375rem!important}}@media (min-width:599px){.xs\\:rounded-bl-md{border-bottom-left-radius:.375rem!important}}@media (min-width:599px){.xs\\:rounded-tl-lg{border-top-left-radius:.5rem!important}}@media (min-width:599px){.xs\\:rounded-tr-lg{border-top-right-radius:.5rem!important}}@media (min-width:599px){.xs\\:rounded-br-lg{border-bottom-right-radius:.5rem!important}}@media (min-width:599px){.xs\\:rounded-bl-lg{border-bottom-left-radius:.5rem!important}}@media (min-width:599px){.xs\\:rounded-tl-xl{border-top-left-radius:.75rem!important}}@media (min-width:599px){.xs\\:rounded-tr-xl{border-top-right-radius:.75rem!important}}@media (min-width:599px){.xs\\:rounded-br-xl{border-bottom-right-radius:.75rem!important}}@media (min-width:599px){.xs\\:rounded-bl-xl{border-bottom-left-radius:.75rem!important}}@media (min-width:599px){.xs\\:rounded-tl-2xl{border-top-left-radius:1rem!important}}@media (min-width:599px){.xs\\:rounded-tr-2xl{border-top-right-radius:1rem!important}}@media (min-width:599px){.xs\\:rounded-br-2xl{border-bottom-right-radius:1rem!important}}@media (min-width:599px){.xs\\:rounded-bl-2xl{border-bottom-left-radius:1rem!important}}@media (min-width:599px){.xs\\:rounded-tl-3xl{border-top-left-radius:1.5rem!important}}@media (min-width:599px){.xs\\:rounded-tr-3xl{border-top-right-radius:1.5rem!important}}@media (min-width:599px){.xs\\:rounded-br-3xl{border-bottom-right-radius:1.5rem!important}}@media (min-width:599px){.xs\\:rounded-bl-3xl{border-bottom-left-radius:1.5rem!important}}@media (min-width:599px){.xs\\:rounded-tl-full{border-top-left-radius:9999px!important}}@media (min-width:599px){.xs\\:rounded-tr-full{border-top-right-radius:9999px!important}}@media (min-width:599px){.xs\\:rounded-br-full{border-bottom-right-radius:9999px!important}}@media (min-width:599px){.xs\\:rounded-bl-full{border-bottom-left-radius:9999px!important}}@media (min-width:599px){.xs\\:border-solid{border-style:solid!important}}@media (min-width:599px){.xs\\:border-dashed{border-style:dashed!important}}@media (min-width:599px){.xs\\:border-dotted{border-style:dotted!important}}@media (min-width:599px){.xs\\:border-double{border-style:double!important}}@media (min-width:599px){.xs\\:border-none{border-style:none!important}}@media (min-width:599px){.xs\\:border-0{border-width:0!important}}@media (min-width:599px){.xs\\:border-2{border-width:2px!important}}@media (min-width:599px){.xs\\:border-4{border-width:4px!important}}@media (min-width:599px){.xs\\:border-8{border-width:8px!important}}@media (min-width:599px){.xs\\:border{border-width:1px!important}}@media (min-width:599px){.xs\\:border-t-0{border-top-width:0!important}}@media (min-width:599px){.xs\\:border-r-0{border-right-width:0!important}}@media (min-width:599px){.xs\\:border-b-0{border-bottom-width:0!important}}@media (min-width:599px){.xs\\:border-l-0{border-left-width:0!important}}@media (min-width:599px){.xs\\:border-t-2{border-top-width:2px!important}}@media (min-width:599px){.xs\\:border-r-2{border-right-width:2px!important}}@media (min-width:599px){.xs\\:border-b-2{border-bottom-width:2px!important}}@media (min-width:599px){.xs\\:border-l-2{border-left-width:2px!important}}@media (min-width:599px){.xs\\:border-t-4{border-top-width:4px!important}}@media (min-width:599px){.xs\\:border-r-4{border-right-width:4px!important}}@media (min-width:599px){.xs\\:border-b-4{border-bottom-width:4px!important}}@media (min-width:599px){.xs\\:border-l-4{border-left-width:4px!important}}@media (min-width:599px){.xs\\:border-t-8{border-top-width:8px!important}}@media (min-width:599px){.xs\\:border-r-8{border-right-width:8px!important}}@media (min-width:599px){.xs\\:border-b-8{border-bottom-width:8px!important}}@media (min-width:599px){.xs\\:border-l-8{border-left-width:8px!important}}@media (min-width:599px){.xs\\:border-t{border-top-width:1px!important}}@media (min-width:599px){.xs\\:border-r{border-right-width:1px!important}}@media (min-width:599px){.xs\\:border-b{border-bottom-width:1px!important}}@media (min-width:599px){.xs\\:border-l{border-left-width:1px!important}}@media (min-width:599px){.xs\\:box-border{box-sizing:border-box!important}}@media (min-width:599px){.xs\\:box-content{box-sizing:initial!important}}@media (min-width:599px){.xs\\:cursor-crosshair{cursor:crosshair!important}}@media (min-width:599px){.xs\\:cursor-zoom-in{cursor:zoom-in!important}}@media (min-width:599px){.xs\\:block{display:block!important}}@media (min-width:599px){.xs\\:inline-block{display:inline-block!important}}@media (min-width:599px){.xs\\:inline{display:inline!important}}@media (min-width:599px){.xs\\:flex{display:flex!important}}@media (min-width:599px){.xs\\:inline-flex{display:inline-flex!important}}@media (min-width:599px){.xs\\:table{display:table!important}}@media (min-width:599px){.xs\\:table-caption{display:table-caption!important}}@media (min-width:599px){.xs\\:table-cell{display:table-cell!important}}@media (min-width:599px){.xs\\:table-column{display:table-column!important}}@media (min-width:599px){.xs\\:table-column-group{display:table-column-group!important}}@media (min-width:599px){.xs\\:table-footer-group{display:table-footer-group!important}}@media (min-width:599px){.xs\\:table-header-group{display:table-header-group!important}}@media (min-width:599px){.xs\\:table-row-group{display:table-row-group!important}}@media (min-width:599px){.xs\\:table-row{display:table-row!important}}@media (min-width:599px){.xs\\:flow-root{display:flow-root!important}}@media (min-width:599px){.xs\\:grid{display:grid!important}}@media (min-width:599px){.xs\\:inline-grid{display:inline-grid!important}}@media (min-width:599px){.xs\\:contents{display:contents!important}}@media (min-width:599px){.xs\\:hidden{display:none!important}}@media (min-width:599px){.xs\\:flex-row{flex-direction:row!important}}@media (min-width:599px){.xs\\:flex-row-reverse{flex-direction:row-reverse!important}}@media (min-width:599px){.xs\\:flex-col{flex-direction:column!important}}@media (min-width:599px){.xs\\:flex-col-reverse{flex-direction:column-reverse!important}}@media (min-width:599px){.xs\\:flex-wrap{flex-wrap:wrap!important}}@media (min-width:599px){.xs\\:flex-wrap-reverse{flex-wrap:wrap-reverse!important}}@media (min-width:599px){.xs\\:flex-no-wrap{flex-wrap:nowrap!important}}@media (min-width:599px){.xs\\:place-items-auto{place-items:auto!important}}@media (min-width:599px){.xs\\:place-items-start{place-items:start!important}}@media (min-width:599px){.xs\\:place-items-end{place-items:end!important}}@media (min-width:599px){.xs\\:place-items-center{place-items:center!important}}@media (min-width:599px){.xs\\:place-items-stretch{place-items:stretch!important}}@media (min-width:599px){.xs\\:place-content-center{place-content:center!important}}@media (min-width:599px){.xs\\:place-content-start{place-content:start!important}}@media (min-width:599px){.xs\\:place-content-end{place-content:end!important}}@media (min-width:599px){.xs\\:place-content-between{place-content:space-between!important}}@media (min-width:599px){.xs\\:place-content-around{place-content:space-around!important}}@media (min-width:599px){.xs\\:place-content-evenly{place-content:space-evenly!important}}@media (min-width:599px){.xs\\:place-content-stretch{place-content:stretch!important}}@media (min-width:599px){.xs\\:place-self-auto{place-self:auto!important}}@media (min-width:599px){.xs\\:place-self-start{place-self:start!important}}@media (min-width:599px){.xs\\:place-self-end{place-self:end!important}}@media (min-width:599px){.xs\\:place-self-center{place-self:center!important}}@media (min-width:599px){.xs\\:place-self-stretch{place-self:stretch!important}}@media (min-width:599px){.xs\\:items-start{align-items:flex-start!important}}@media (min-width:599px){.xs\\:items-end{align-items:flex-end!important}}@media (min-width:599px){.xs\\:items-center{align-items:center!important}}@media (min-width:599px){.xs\\:items-baseline{align-items:baseline!important}}@media (min-width:599px){.xs\\:items-stretch{align-items:stretch!important}}@media (min-width:599px){.xs\\:content-center{align-content:center!important}}@media (min-width:599px){.xs\\:content-start{align-content:flex-start!important}}@media (min-width:599px){.xs\\:content-end{align-content:flex-end!important}}@media (min-width:599px){.xs\\:content-between{align-content:space-between!important}}@media (min-width:599px){.xs\\:content-around{align-content:space-around!important}}@media (min-width:599px){.xs\\:content-evenly{align-content:space-evenly!important}}@media (min-width:599px){.xs\\:self-auto{align-self:auto!important}}@media (min-width:599px){.xs\\:self-start{align-self:flex-start!important}}@media (min-width:599px){.xs\\:self-end{align-self:flex-end!important}}@media (min-width:599px){.xs\\:self-center{align-self:center!important}}@media (min-width:599px){.xs\\:self-stretch{align-self:stretch!important}}@media (min-width:599px){.xs\\:justify-items-auto{justify-items:auto!important}}@media (min-width:599px){.xs\\:justify-items-start{justify-items:start!important}}@media (min-width:599px){.xs\\:justify-items-end{justify-items:end!important}}@media (min-width:599px){.xs\\:justify-items-center{justify-items:center!important}}@media (min-width:599px){.xs\\:justify-items-stretch{justify-items:stretch!important}}@media (min-width:599px){.xs\\:justify-start{justify-content:flex-start!important}}@media (min-width:599px){.xs\\:justify-end{justify-content:flex-end!important}}@media (min-width:599px){.xs\\:justify-center{justify-content:center!important}}@media (min-width:599px){.xs\\:justify-between{justify-content:space-between!important}}@media (min-width:599px){.xs\\:justify-around{justify-content:space-around!important}}@media (min-width:599px){.xs\\:justify-evenly{justify-content:space-evenly!important}}@media (min-width:599px){.xs\\:justify-self-auto{justify-self:auto!important}}@media (min-width:599px){.xs\\:justify-self-start{justify-self:start!important}}@media (min-width:599px){.xs\\:justify-self-end{justify-self:end!important}}@media (min-width:599px){.xs\\:justify-self-center{justify-self:center!important}}@media (min-width:599px){.xs\\:justify-self-stretch{justify-self:stretch!important}}@media (min-width:599px){.xs\\:flex-1{flex:1 1 0%!important}}@media (min-width:599px){.xs\\:flex-auto{flex:1 1 auto!important}}@media (min-width:599px){.xs\\:flex-initial{flex:0 1 auto!important}}@media (min-width:599px){.xs\\:flex-none{flex:none!important}}@media (min-width:599px){.xs\\:flex-grow-0{flex-grow:0!important}}@media (min-width:599px){.xs\\:flex-grow{flex-grow:1!important}}@media (min-width:599px){.xs\\:flex-shrink-0{flex-shrink:0!important}}@media (min-width:599px){.xs\\:flex-shrink{flex-shrink:1!important}}@media (min-width:599px){.xs\\:order-1{order:1!important}}@media (min-width:599px){.xs\\:order-2{order:2!important}}@media (min-width:599px){.xs\\:order-3{order:3!important}}@media (min-width:599px){.xs\\:order-4{order:4!important}}@media (min-width:599px){.xs\\:order-5{order:5!important}}@media (min-width:599px){.xs\\:order-6{order:6!important}}@media (min-width:599px){.xs\\:order-7{order:7!important}}@media (min-width:599px){.xs\\:order-8{order:8!important}}@media (min-width:599px){.xs\\:order-9{order:9!important}}@media (min-width:599px){.xs\\:order-10{order:10!important}}@media (min-width:599px){.xs\\:order-11{order:11!important}}@media (min-width:599px){.xs\\:order-12{order:12!important}}@media (min-width:599px){.xs\\:order-first{order:-9999!important}}@media (min-width:599px){.xs\\:order-last{order:9999!important}}@media (min-width:599px){.xs\\:order-none{order:0!important}}@media (min-width:599px){.xs\\:float-right{float:right!important}}@media (min-width:599px){.xs\\:float-left{float:left!important}}@media (min-width:599px){.xs\\:float-none{float:none!important}}@media (min-width:599px){.xs\\:clearfix:after{content:\"\"!important;display:table!important;clear:both!important}}@media (min-width:599px){.xs\\:clear-left{clear:left!important}}@media (min-width:599px){.xs\\:clear-right{clear:right!important}}@media (min-width:599px){.xs\\:clear-both{clear:both!important}}@media (min-width:599px){.xs\\:clear-none{clear:none!important}}@media (min-width:599px){.xs\\:font-sans{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji!important}}@media (min-width:599px){.xs\\:font-serif{font-family:Georgia,Cambria,Times New Roman,Times,serif!important}}@media (min-width:599px){.xs\\:font-mono{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}}@media (min-width:599px){.xs\\:font-hairline{font-weight:100!important}}@media (min-width:599px){.xs\\:font-thin{font-weight:200!important}}@media (min-width:599px){.xs\\:font-light{font-weight:300!important}}@media (min-width:599px){.xs\\:font-normal{font-weight:400!important}}@media (min-width:599px){.xs\\:font-medium{font-weight:500!important}}@media (min-width:599px){.xs\\:font-semibold{font-weight:600!important}}@media (min-width:599px){.xs\\:font-bold{font-weight:700!important}}@media (min-width:599px){.xs\\:font-extrabold{font-weight:800!important}}@media (min-width:599px){.xs\\:font-black{font-weight:900!important}}@media (min-width:599px){.xs\\:hover\\:font-hairline:hover{font-weight:100!important}}@media (min-width:599px){.xs\\:hover\\:font-thin:hover{font-weight:200!important}}@media (min-width:599px){.xs\\:hover\\:font-light:hover{font-weight:300!important}}@media (min-width:599px){.xs\\:hover\\:font-normal:hover{font-weight:400!important}}@media (min-width:599px){.xs\\:hover\\:font-medium:hover{font-weight:500!important}}@media (min-width:599px){.xs\\:hover\\:font-semibold:hover{font-weight:600!important}}@media (min-width:599px){.xs\\:hover\\:font-bold:hover{font-weight:700!important}}@media (min-width:599px){.xs\\:hover\\:font-extrabold:hover{font-weight:800!important}}@media (min-width:599px){.xs\\:hover\\:font-black:hover{font-weight:900!important}}@media (min-width:599px){.xs\\:focus\\:font-hairline:focus{font-weight:100!important}}@media (min-width:599px){.xs\\:focus\\:font-thin:focus{font-weight:200!important}}@media (min-width:599px){.xs\\:focus\\:font-light:focus{font-weight:300!important}}@media (min-width:599px){.xs\\:focus\\:font-normal:focus{font-weight:400!important}}@media (min-width:599px){.xs\\:focus\\:font-medium:focus{font-weight:500!important}}@media (min-width:599px){.xs\\:focus\\:font-semibold:focus{font-weight:600!important}}@media (min-width:599px){.xs\\:focus\\:font-bold:focus{font-weight:700!important}}@media (min-width:599px){.xs\\:focus\\:font-extrabold:focus{font-weight:800!important}}@media (min-width:599px){.xs\\:focus\\:font-black:focus{font-weight:900!important}}@media (min-width:599px){.xs\\:h-0{height:0!important}}@media (min-width:599px){.xs\\:h-1{height:.25rem!important}}@media (min-width:599px){.xs\\:h-2{height:.5rem!important}}@media (min-width:599px){.xs\\:h-3{height:.75rem!important}}@media (min-width:599px){.xs\\:h-4{height:1rem!important}}@media (min-width:599px){.xs\\:h-5{height:1.25rem!important}}@media (min-width:599px){.xs\\:h-6{height:1.5rem!important}}@media (min-width:599px){.xs\\:h-8{height:2rem!important}}@media (min-width:599px){.xs\\:h-10{height:2.5rem!important}}@media (min-width:599px){.xs\\:h-12{height:3rem!important}}@media (min-width:599px){.xs\\:h-16{height:4rem!important}}@media (min-width:599px){.xs\\:h-20{height:5rem!important}}@media (min-width:599px){.xs\\:h-24{height:6rem!important}}@media (min-width:599px){.xs\\:h-32{height:8rem!important}}@media (min-width:599px){.xs\\:h-40{height:10rem!important}}@media (min-width:599px){.xs\\:h-48{height:12rem!important}}@media (min-width:599px){.xs\\:h-56{height:14rem!important}}@media (min-width:599px){.xs\\:h-64{height:16rem!important}}@media (min-width:599px){.xs\\:h-auto{height:auto!important}}@media (min-width:599px){.xs\\:h-px{height:1px!important}}@media (min-width:599px){.xs\\:h-full{height:100%!important}}@media (min-width:599px){.xs\\:h-screen{height:100vh!important}}@media (min-width:599px){.xs\\:text-xs{font-size:.75rem!important}}@media (min-width:599px){.xs\\:text-sm{font-size:.875rem!important}}@media (min-width:599px){.xs\\:text-base{font-size:1rem!important}}@media (min-width:599px){.xs\\:text-lg{font-size:1.125rem!important}}@media (min-width:599px){.xs\\:text-xl{font-size:1.25rem!important}}@media (min-width:599px){.xs\\:text-2xl{font-size:1.5rem!important}}@media (min-width:599px){.xs\\:text-3xl{font-size:1.875rem!important}}@media (min-width:599px){.xs\\:text-4xl{font-size:2.25rem!important}}@media (min-width:599px){.xs\\:text-5xl{font-size:3rem!important}}@media (min-width:599px){.xs\\:text-6xl{font-size:4rem!important}}@media (min-width:599px){.xs\\:leading-3{line-height:.75rem!important}}@media (min-width:599px){.xs\\:leading-4{line-height:1rem!important}}@media (min-width:599px){.xs\\:leading-5{line-height:1.25rem!important}}@media (min-width:599px){.xs\\:leading-6{line-height:1.5rem!important}}@media (min-width:599px){.xs\\:leading-7{line-height:1.75rem!important}}@media (min-width:599px){.xs\\:leading-8{line-height:2rem!important}}@media (min-width:599px){.xs\\:leading-9{line-height:2.25rem!important}}@media (min-width:599px){.xs\\:leading-10{line-height:2.5rem!important}}@media (min-width:599px){.xs\\:leading-none{line-height:1!important}}@media (min-width:599px){.xs\\:leading-tight{line-height:1.25!important}}@media (min-width:599px){.xs\\:leading-snug{line-height:1.375!important}}@media (min-width:599px){.xs\\:leading-normal{line-height:1.5!important}}@media (min-width:599px){.xs\\:leading-relaxed{line-height:1.625!important}}@media (min-width:599px){.xs\\:leading-loose{line-height:2!important}}@media (min-width:599px){.xs\\:list-inside{list-style-position:inside!important}}@media (min-width:599px){.xs\\:list-outside{list-style-position:outside!important}}@media (min-width:599px){.xs\\:list-none{list-style-type:none!important}}@media (min-width:599px){.xs\\:list-disc{list-style-type:disc!important}}@media (min-width:599px){.xs\\:list-decimal{list-style-type:decimal!important}}@media (min-width:599px){.xs\\:m-0{margin:0!important}}@media (min-width:599px){.xs\\:m-1{margin:.25rem!important}}@media (min-width:599px){.xs\\:m-2{margin:.5rem!important}}@media (min-width:599px){.xs\\:m-3{margin:.75rem!important}}@media (min-width:599px){.xs\\:m-4{margin:1rem!important}}@media (min-width:599px){.xs\\:m-5{margin:1.25rem!important}}@media (min-width:599px){.xs\\:m-6{margin:1.5rem!important}}@media (min-width:599px){.xs\\:m-8{margin:2rem!important}}@media (min-width:599px){.xs\\:m-10{margin:2.5rem!important}}@media (min-width:599px){.xs\\:m-12{margin:3rem!important}}@media (min-width:599px){.xs\\:m-16{margin:4rem!important}}@media (min-width:599px){.xs\\:m-20{margin:5rem!important}}@media (min-width:599px){.xs\\:m-24{margin:6rem!important}}@media (min-width:599px){.xs\\:m-32{margin:8rem!important}}@media (min-width:599px){.xs\\:m-40{margin:10rem!important}}@media (min-width:599px){.xs\\:m-48{margin:12rem!important}}@media (min-width:599px){.xs\\:m-56{margin:14rem!important}}@media (min-width:599px){.xs\\:m-64{margin:16rem!important}}@media (min-width:599px){.xs\\:m-auto{margin:auto!important}}@media (min-width:599px){.xs\\:m-px{margin:1px!important}}@media (min-width:599px){.xs\\:-m-1{margin:-.25rem!important}}@media (min-width:599px){.xs\\:-m-2{margin:-.5rem!important}}@media (min-width:599px){.xs\\:-m-3{margin:-.75rem!important}}@media (min-width:599px){.xs\\:-m-4{margin:-1rem!important}}@media (min-width:599px){.xs\\:-m-5{margin:-1.25rem!important}}@media (min-width:599px){.xs\\:-m-6{margin:-1.5rem!important}}@media (min-width:599px){.xs\\:-m-8{margin:-2rem!important}}@media (min-width:599px){.xs\\:-m-10{margin:-2.5rem!important}}@media (min-width:599px){.xs\\:-m-12{margin:-3rem!important}}@media (min-width:599px){.xs\\:-m-16{margin:-4rem!important}}@media (min-width:599px){.xs\\:-m-20{margin:-5rem!important}}@media (min-width:599px){.xs\\:-m-24{margin:-6rem!important}}@media (min-width:599px){.xs\\:-m-32{margin:-8rem!important}}@media (min-width:599px){.xs\\:-m-40{margin:-10rem!important}}@media (min-width:599px){.xs\\:-m-48{margin:-12rem!important}}@media (min-width:599px){.xs\\:-m-56{margin:-14rem!important}}@media (min-width:599px){.xs\\:-m-64{margin:-16rem!important}}@media (min-width:599px){.xs\\:-m-px{margin:-1px!important}}@media (min-width:599px){.xs\\:my-0{margin-top:0!important;margin-bottom:0!important}}@media (min-width:599px){.xs\\:mx-0{margin-left:0!important;margin-right:0!important}}@media (min-width:599px){.xs\\:my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}}@media (min-width:599px){.xs\\:mx-1{margin-left:.25rem!important;margin-right:.25rem!important}}@media (min-width:599px){.xs\\:my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}}@media (min-width:599px){.xs\\:mx-2{margin-left:.5rem!important;margin-right:.5rem!important}}@media (min-width:599px){.xs\\:my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}}@media (min-width:599px){.xs\\:mx-3{margin-left:.75rem!important;margin-right:.75rem!important}}@media (min-width:599px){.xs\\:my-4{margin-top:1rem!important;margin-bottom:1rem!important}}@media (min-width:599px){.xs\\:mx-4{margin-left:1rem!important;margin-right:1rem!important}}@media (min-width:599px){.xs\\:my-5{margin-top:1.25rem!important;margin-bottom:1.25rem!important}}@media (min-width:599px){.xs\\:mx-5{margin-left:1.25rem!important;margin-right:1.25rem!important}}@media (min-width:599px){.xs\\:my-6{margin-top:1.5rem!important;margin-bottom:1.5rem!important}}@media (min-width:599px){.xs\\:mx-6{margin-left:1.5rem!important;margin-right:1.5rem!important}}@media (min-width:599px){.xs\\:my-8{margin-top:2rem!important;margin-bottom:2rem!important}}@media (min-width:599px){.xs\\:mx-8{margin-left:2rem!important;margin-right:2rem!important}}@media (min-width:599px){.xs\\:my-10{margin-top:2.5rem!important;margin-bottom:2.5rem!important}}@media (min-width:599px){.xs\\:mx-10{margin-left:2.5rem!important;margin-right:2.5rem!important}}@media (min-width:599px){.xs\\:my-12{margin-top:3rem!important;margin-bottom:3rem!important}}@media (min-width:599px){.xs\\:mx-12{margin-left:3rem!important;margin-right:3rem!important}}@media (min-width:599px){.xs\\:my-16{margin-top:4rem!important;margin-bottom:4rem!important}}@media (min-width:599px){.xs\\:mx-16{margin-left:4rem!important;margin-right:4rem!important}}@media (min-width:599px){.xs\\:my-20{margin-top:5rem!important;margin-bottom:5rem!important}}@media (min-width:599px){.xs\\:mx-20{margin-left:5rem!important;margin-right:5rem!important}}@media (min-width:599px){.xs\\:my-24{margin-top:6rem!important;margin-bottom:6rem!important}}@media (min-width:599px){.xs\\:mx-24{margin-left:6rem!important;margin-right:6rem!important}}@media (min-width:599px){.xs\\:my-32{margin-top:8rem!important;margin-bottom:8rem!important}}@media (min-width:599px){.xs\\:mx-32{margin-left:8rem!important;margin-right:8rem!important}}@media (min-width:599px){.xs\\:my-40{margin-top:10rem!important;margin-bottom:10rem!important}}@media (min-width:599px){.xs\\:mx-40{margin-left:10rem!important;margin-right:10rem!important}}@media (min-width:599px){.xs\\:my-48{margin-top:12rem!important;margin-bottom:12rem!important}}@media (min-width:599px){.xs\\:mx-48{margin-left:12rem!important;margin-right:12rem!important}}@media (min-width:599px){.xs\\:my-56{margin-top:14rem!important;margin-bottom:14rem!important}}@media (min-width:599px){.xs\\:mx-56{margin-left:14rem!important;margin-right:14rem!important}}@media (min-width:599px){.xs\\:my-64{margin-top:16rem!important;margin-bottom:16rem!important}}@media (min-width:599px){.xs\\:mx-64{margin-left:16rem!important;margin-right:16rem!important}}@media (min-width:599px){.xs\\:my-auto{margin-top:auto!important;margin-bottom:auto!important}}@media (min-width:599px){.xs\\:mx-auto{margin-left:auto!important;margin-right:auto!important}}@media (min-width:599px){.xs\\:my-px{margin-top:1px!important;margin-bottom:1px!important}}@media (min-width:599px){.xs\\:mx-px{margin-left:1px!important;margin-right:1px!important}}@media (min-width:599px){.xs\\:-my-1{margin-top:-.25rem!important;margin-bottom:-.25rem!important}}@media (min-width:599px){.xs\\:-mx-1{margin-left:-.25rem!important;margin-right:-.25rem!important}}@media (min-width:599px){.xs\\:-my-2{margin-top:-.5rem!important;margin-bottom:-.5rem!important}}@media (min-width:599px){.xs\\:-mx-2{margin-left:-.5rem!important;margin-right:-.5rem!important}}@media (min-width:599px){.xs\\:-my-3{margin-top:-.75rem!important;margin-bottom:-.75rem!important}}@media (min-width:599px){.xs\\:-mx-3{margin-left:-.75rem!important;margin-right:-.75rem!important}}@media (min-width:599px){.xs\\:-my-4{margin-top:-1rem!important;margin-bottom:-1rem!important}}@media (min-width:599px){.xs\\:-mx-4{margin-left:-1rem!important;margin-right:-1rem!important}}@media (min-width:599px){.xs\\:-my-5{margin-top:-1.25rem!important;margin-bottom:-1.25rem!important}}@media (min-width:599px){.xs\\:-mx-5{margin-left:-1.25rem!important;margin-right:-1.25rem!important}}@media (min-width:599px){.xs\\:-my-6{margin-top:-1.5rem!important;margin-bottom:-1.5rem!important}}@media (min-width:599px){.xs\\:-mx-6{margin-left:-1.5rem!important;margin-right:-1.5rem!important}}@media (min-width:599px){.xs\\:-my-8{margin-top:-2rem!important;margin-bottom:-2rem!important}}@media (min-width:599px){.xs\\:-mx-8{margin-left:-2rem!important;margin-right:-2rem!important}}@media (min-width:599px){.xs\\:-my-10{margin-top:-2.5rem!important;margin-bottom:-2.5rem!important}}@media (min-width:599px){.xs\\:-mx-10{margin-left:-2.5rem!important;margin-right:-2.5rem!important}}@media (min-width:599px){.xs\\:-my-12{margin-top:-3rem!important;margin-bottom:-3rem!important}}@media (min-width:599px){.xs\\:-mx-12{margin-left:-3rem!important;margin-right:-3rem!important}}@media (min-width:599px){.xs\\:-my-16{margin-top:-4rem!important;margin-bottom:-4rem!important}}@media (min-width:599px){.xs\\:-mx-16{margin-left:-4rem!important;margin-right:-4rem!important}}@media (min-width:599px){.xs\\:-my-20{margin-top:-5rem!important;margin-bottom:-5rem!important}}@media (min-width:599px){.xs\\:-mx-20{margin-left:-5rem!important;margin-right:-5rem!important}}@media (min-width:599px){.xs\\:-my-24{margin-top:-6rem!important;margin-bottom:-6rem!important}}@media (min-width:599px){.xs\\:-mx-24{margin-left:-6rem!important;margin-right:-6rem!important}}@media (min-width:599px){.xs\\:-my-32{margin-top:-8rem!important;margin-bottom:-8rem!important}}@media (min-width:599px){.xs\\:-mx-32{margin-left:-8rem!important;margin-right:-8rem!important}}@media (min-width:599px){.xs\\:-my-40{margin-top:-10rem!important;margin-bottom:-10rem!important}}@media (min-width:599px){.xs\\:-mx-40{margin-left:-10rem!important;margin-right:-10rem!important}}@media (min-width:599px){.xs\\:-my-48{margin-top:-12rem!important;margin-bottom:-12rem!important}}@media (min-width:599px){.xs\\:-mx-48{margin-left:-12rem!important;margin-right:-12rem!important}}@media (min-width:599px){.xs\\:-my-56{margin-top:-14rem!important;margin-bottom:-14rem!important}}@media (min-width:599px){.xs\\:-mx-56{margin-left:-14rem!important;margin-right:-14rem!important}}@media (min-width:599px){.xs\\:-my-64{margin-top:-16rem!important;margin-bottom:-16rem!important}}@media (min-width:599px){.xs\\:-mx-64{margin-left:-16rem!important;margin-right:-16rem!important}}@media (min-width:599px){.xs\\:-my-px{margin-top:-1px!important;margin-bottom:-1px!important}}@media (min-width:599px){.xs\\:-mx-px{margin-left:-1px!important;margin-right:-1px!important}}@media (min-width:599px){.xs\\:mt-0{margin-top:0!important}}@media (min-width:599px){.xs\\:mr-0{margin-right:0!important}}@media (min-width:599px){.xs\\:mb-0{margin-bottom:0!important}}@media (min-width:599px){.xs\\:ml-0{margin-left:0!important}}@media (min-width:599px){.xs\\:mt-1{margin-top:.25rem!important}}@media (min-width:599px){.xs\\:mr-1{margin-right:.25rem!important}}@media (min-width:599px){.xs\\:mb-1{margin-bottom:.25rem!important}}@media (min-width:599px){.xs\\:ml-1{margin-left:.25rem!important}}@media (min-width:599px){.xs\\:mt-2{margin-top:.5rem!important}}@media (min-width:599px){.xs\\:mr-2{margin-right:.5rem!important}}@media (min-width:599px){.xs\\:mb-2{margin-bottom:.5rem!important}}@media (min-width:599px){.xs\\:ml-2{margin-left:.5rem!important}}@media (min-width:599px){.xs\\:mt-3{margin-top:.75rem!important}}@media (min-width:599px){.xs\\:mr-3{margin-right:.75rem!important}}@media (min-width:599px){.xs\\:mb-3{margin-bottom:.75rem!important}}@media (min-width:599px){.xs\\:ml-3{margin-left:.75rem!important}}@media (min-width:599px){.xs\\:mt-4{margin-top:1rem!important}}@media (min-width:599px){.xs\\:mr-4{margin-right:1rem!important}}@media (min-width:599px){.xs\\:mb-4{margin-bottom:1rem!important}}@media (min-width:599px){.xs\\:ml-4{margin-left:1rem!important}}@media (min-width:599px){.xs\\:mt-5{margin-top:1.25rem!important}}@media (min-width:599px){.xs\\:mr-5{margin-right:1.25rem!important}}@media (min-width:599px){.xs\\:mb-5{margin-bottom:1.25rem!important}}@media (min-width:599px){.xs\\:ml-5{margin-left:1.25rem!important}}@media (min-width:599px){.xs\\:mt-6{margin-top:1.5rem!important}}@media (min-width:599px){.xs\\:mr-6{margin-right:1.5rem!important}}@media (min-width:599px){.xs\\:mb-6{margin-bottom:1.5rem!important}}@media (min-width:599px){.xs\\:ml-6{margin-left:1.5rem!important}}@media (min-width:599px){.xs\\:mt-8{margin-top:2rem!important}}@media (min-width:599px){.xs\\:mr-8{margin-right:2rem!important}}@media (min-width:599px){.xs\\:mb-8{margin-bottom:2rem!important}}@media (min-width:599px){.xs\\:ml-8{margin-left:2rem!important}}@media (min-width:599px){.xs\\:mt-10{margin-top:2.5rem!important}}@media (min-width:599px){.xs\\:mr-10{margin-right:2.5rem!important}}@media (min-width:599px){.xs\\:mb-10{margin-bottom:2.5rem!important}}@media (min-width:599px){.xs\\:ml-10{margin-left:2.5rem!important}}@media (min-width:599px){.xs\\:mt-12{margin-top:3rem!important}}@media (min-width:599px){.xs\\:mr-12{margin-right:3rem!important}}@media (min-width:599px){.xs\\:mb-12{margin-bottom:3rem!important}}@media (min-width:599px){.xs\\:ml-12{margin-left:3rem!important}}@media (min-width:599px){.xs\\:mt-16{margin-top:4rem!important}}@media (min-width:599px){.xs\\:mr-16{margin-right:4rem!important}}@media (min-width:599px){.xs\\:mb-16{margin-bottom:4rem!important}}@media (min-width:599px){.xs\\:ml-16{margin-left:4rem!important}}@media (min-width:599px){.xs\\:mt-20{margin-top:5rem!important}}@media (min-width:599px){.xs\\:mr-20{margin-right:5rem!important}}@media (min-width:599px){.xs\\:mb-20{margin-bottom:5rem!important}}@media (min-width:599px){.xs\\:ml-20{margin-left:5rem!important}}@media (min-width:599px){.xs\\:mt-24{margin-top:6rem!important}}@media (min-width:599px){.xs\\:mr-24{margin-right:6rem!important}}@media (min-width:599px){.xs\\:mb-24{margin-bottom:6rem!important}}@media (min-width:599px){.xs\\:ml-24{margin-left:6rem!important}}@media (min-width:599px){.xs\\:mt-32{margin-top:8rem!important}}@media (min-width:599px){.xs\\:mr-32{margin-right:8rem!important}}@media (min-width:599px){.xs\\:mb-32{margin-bottom:8rem!important}}@media (min-width:599px){.xs\\:ml-32{margin-left:8rem!important}}@media (min-width:599px){.xs\\:mt-40{margin-top:10rem!important}}@media (min-width:599px){.xs\\:mr-40{margin-right:10rem!important}}@media (min-width:599px){.xs\\:mb-40{margin-bottom:10rem!important}}@media (min-width:599px){.xs\\:ml-40{margin-left:10rem!important}}@media (min-width:599px){.xs\\:mt-48{margin-top:12rem!important}}@media (min-width:599px){.xs\\:mr-48{margin-right:12rem!important}}@media (min-width:599px){.xs\\:mb-48{margin-bottom:12rem!important}}@media (min-width:599px){.xs\\:ml-48{margin-left:12rem!important}}@media (min-width:599px){.xs\\:mt-56{margin-top:14rem!important}}@media (min-width:599px){.xs\\:mr-56{margin-right:14rem!important}}@media (min-width:599px){.xs\\:mb-56{margin-bottom:14rem!important}}@media (min-width:599px){.xs\\:ml-56{margin-left:14rem!important}}@media (min-width:599px){.xs\\:mt-64{margin-top:16rem!important}}@media (min-width:599px){.xs\\:mr-64{margin-right:16rem!important}}@media (min-width:599px){.xs\\:mb-64{margin-bottom:16rem!important}}@media (min-width:599px){.xs\\:ml-64{margin-left:16rem!important}}@media (min-width:599px){.xs\\:mt-auto{margin-top:auto!important}}@media (min-width:599px){.xs\\:mr-auto{margin-right:auto!important}}@media (min-width:599px){.xs\\:mb-auto{margin-bottom:auto!important}}@media (min-width:599px){.xs\\:ml-auto{margin-left:auto!important}}@media (min-width:599px){.xs\\:mt-px{margin-top:1px!important}}@media (min-width:599px){.xs\\:mr-px{margin-right:1px!important}}@media (min-width:599px){.xs\\:mb-px{margin-bottom:1px!important}}@media (min-width:599px){.xs\\:ml-px{margin-left:1px!important}}@media (min-width:599px){.xs\\:-mt-1{margin-top:-.25rem!important}}@media (min-width:599px){.xs\\:-mr-1{margin-right:-.25rem!important}}@media (min-width:599px){.xs\\:-mb-1{margin-bottom:-.25rem!important}}@media (min-width:599px){.xs\\:-ml-1{margin-left:-.25rem!important}}@media (min-width:599px){.xs\\:-mt-2{margin-top:-.5rem!important}}@media (min-width:599px){.xs\\:-mr-2{margin-right:-.5rem!important}}@media (min-width:599px){.xs\\:-mb-2{margin-bottom:-.5rem!important}}@media (min-width:599px){.xs\\:-ml-2{margin-left:-.5rem!important}}@media (min-width:599px){.xs\\:-mt-3{margin-top:-.75rem!important}}@media (min-width:599px){.xs\\:-mr-3{margin-right:-.75rem!important}}@media (min-width:599px){.xs\\:-mb-3{margin-bottom:-.75rem!important}}@media (min-width:599px){.xs\\:-ml-3{margin-left:-.75rem!important}}@media (min-width:599px){.xs\\:-mt-4{margin-top:-1rem!important}}@media (min-width:599px){.xs\\:-mr-4{margin-right:-1rem!important}}@media (min-width:599px){.xs\\:-mb-4{margin-bottom:-1rem!important}}@media (min-width:599px){.xs\\:-ml-4{margin-left:-1rem!important}}@media (min-width:599px){.xs\\:-mt-5{margin-top:-1.25rem!important}}@media (min-width:599px){.xs\\:-mr-5{margin-right:-1.25rem!important}}@media (min-width:599px){.xs\\:-mb-5{margin-bottom:-1.25rem!important}}@media (min-width:599px){.xs\\:-ml-5{margin-left:-1.25rem!important}}@media (min-width:599px){.xs\\:-mt-6{margin-top:-1.5rem!important}}@media (min-width:599px){.xs\\:-mr-6{margin-right:-1.5rem!important}}@media (min-width:599px){.xs\\:-mb-6{margin-bottom:-1.5rem!important}}@media (min-width:599px){.xs\\:-ml-6{margin-left:-1.5rem!important}}@media (min-width:599px){.xs\\:-mt-8{margin-top:-2rem!important}}@media (min-width:599px){.xs\\:-mr-8{margin-right:-2rem!important}}@media (min-width:599px){.xs\\:-mb-8{margin-bottom:-2rem!important}}@media (min-width:599px){.xs\\:-ml-8{margin-left:-2rem!important}}@media (min-width:599px){.xs\\:-mt-10{margin-top:-2.5rem!important}}@media (min-width:599px){.xs\\:-mr-10{margin-right:-2.5rem!important}}@media (min-width:599px){.xs\\:-mb-10{margin-bottom:-2.5rem!important}}@media (min-width:599px){.xs\\:-ml-10{margin-left:-2.5rem!important}}@media (min-width:599px){.xs\\:-mt-12{margin-top:-3rem!important}}@media (min-width:599px){.xs\\:-mr-12{margin-right:-3rem!important}}@media (min-width:599px){.xs\\:-mb-12{margin-bottom:-3rem!important}}@media (min-width:599px){.xs\\:-ml-12{margin-left:-3rem!important}}@media (min-width:599px){.xs\\:-mt-16{margin-top:-4rem!important}}@media (min-width:599px){.xs\\:-mr-16{margin-right:-4rem!important}}@media (min-width:599px){.xs\\:-mb-16{margin-bottom:-4rem!important}}@media (min-width:599px){.xs\\:-ml-16{margin-left:-4rem!important}}@media (min-width:599px){.xs\\:-mt-20{margin-top:-5rem!important}}@media (min-width:599px){.xs\\:-mr-20{margin-right:-5rem!important}}@media (min-width:599px){.xs\\:-mb-20{margin-bottom:-5rem!important}}@media (min-width:599px){.xs\\:-ml-20{margin-left:-5rem!important}}@media (min-width:599px){.xs\\:-mt-24{margin-top:-6rem!important}}@media (min-width:599px){.xs\\:-mr-24{margin-right:-6rem!important}}@media (min-width:599px){.xs\\:-mb-24{margin-bottom:-6rem!important}}@media (min-width:599px){.xs\\:-ml-24{margin-left:-6rem!important}}@media (min-width:599px){.xs\\:-mt-32{margin-top:-8rem!important}}@media (min-width:599px){.xs\\:-mr-32{margin-right:-8rem!important}}@media (min-width:599px){.xs\\:-mb-32{margin-bottom:-8rem!important}}@media (min-width:599px){.xs\\:-ml-32{margin-left:-8rem!important}}@media (min-width:599px){.xs\\:-mt-40{margin-top:-10rem!important}}@media (min-width:599px){.xs\\:-mr-40{margin-right:-10rem!important}}@media (min-width:599px){.xs\\:-mb-40{margin-bottom:-10rem!important}}@media (min-width:599px){.xs\\:-ml-40{margin-left:-10rem!important}}@media (min-width:599px){.xs\\:-mt-48{margin-top:-12rem!important}}@media (min-width:599px){.xs\\:-mr-48{margin-right:-12rem!important}}@media (min-width:599px){.xs\\:-mb-48{margin-bottom:-12rem!important}}@media (min-width:599px){.xs\\:-ml-48{margin-left:-12rem!important}}@media (min-width:599px){.xs\\:-mt-56{margin-top:-14rem!important}}@media (min-width:599px){.xs\\:-mr-56{margin-right:-14rem!important}}@media (min-width:599px){.xs\\:-mb-56{margin-bottom:-14rem!important}}@media (min-width:599px){.xs\\:-ml-56{margin-left:-14rem!important}}@media (min-width:599px){.xs\\:-mt-64{margin-top:-16rem!important}}@media (min-width:599px){.xs\\:-mr-64{margin-right:-16rem!important}}@media (min-width:599px){.xs\\:-mb-64{margin-bottom:-16rem!important}}@media (min-width:599px){.xs\\:-ml-64{margin-left:-16rem!important}}@media (min-width:599px){.xs\\:-mt-px{margin-top:-1px!important}}@media (min-width:599px){.xs\\:-mr-px{margin-right:-1px!important}}@media (min-width:599px){.xs\\:-mb-px{margin-bottom:-1px!important}}@media (min-width:599px){.xs\\:-ml-px{margin-left:-1px!important}}@media (min-width:599px){.xs\\:max-h-full{max-height:100%!important}}@media (min-width:599px){.xs\\:max-h-screen{max-height:100vh!important}}@media (min-width:599px){.xs\\:max-w-none{max-width:none!important}}@media (min-width:599px){.xs\\:max-w-xs{max-width:20rem!important}}@media (min-width:599px){.xs\\:max-w-sm{max-width:24rem!important}}@media (min-width:599px){.xs\\:max-w-md{max-width:28rem!important}}@media (min-width:599px){.xs\\:max-w-lg{max-width:32rem!important}}@media (min-width:599px){.xs\\:max-w-xl{max-width:36rem!important}}@media (min-width:599px){.xs\\:max-w-2xl{max-width:42rem!important}}@media (min-width:599px){.xs\\:max-w-3xl{max-width:48rem!important}}@media (min-width:599px){.xs\\:max-w-4xl{max-width:56rem!important}}@media (min-width:599px){.xs\\:max-w-5xl{max-width:64rem!important}}@media (min-width:599px){.xs\\:max-w-6xl{max-width:72rem!important}}@media (min-width:599px){.xs\\:max-w-full{max-width:100%!important}}@media (min-width:599px){.xs\\:max-w-screen-xs{max-width:599px!important}}@media (min-width:599px){.xs\\:max-w-screen-sm{max-width:600px!important}}@media (min-width:599px){.xs\\:max-w-screen-md{max-width:960px!important}}@media (min-width:599px){.xs\\:max-w-screen-lg{max-width:1280px!important}}@media (min-width:599px){.xs\\:max-w-screen-xl{max-width:1920px!important}}@media (min-width:599px){.xs\\:min-h-0{min-height:0!important}}@media (min-width:599px){.xs\\:min-h-full{min-height:100%!important}}@media (min-width:599px){.xs\\:min-h-screen{min-height:100vh!important}}@media (min-width:599px){.xs\\:min-w-0{min-width:0!important}}@media (min-width:599px){.xs\\:min-w-full{min-width:100%!important}}@media (min-width:599px){.xs\\:object-contain{object-fit:contain!important}}@media (min-width:599px){.xs\\:object-cover{object-fit:cover!important}}@media (min-width:599px){.xs\\:object-fill{object-fit:fill!important}}@media (min-width:599px){.xs\\:object-none{object-fit:none!important}}@media (min-width:599px){.xs\\:object-scale-down{object-fit:scale-down!important}}@media (min-width:599px){.xs\\:object-bottom{object-position:bottom!important}}@media (min-width:599px){.xs\\:object-center{object-position:center!important}}@media (min-width:599px){.xs\\:object-left{object-position:left!important}}@media (min-width:599px){.xs\\:object-left-bottom{object-position:left bottom!important}}@media (min-width:599px){.xs\\:object-left-top{object-position:left top!important}}@media (min-width:599px){.xs\\:object-right{object-position:right!important}}@media (min-width:599px){.xs\\:object-right-bottom{object-position:right bottom!important}}@media (min-width:599px){.xs\\:object-right-top{object-position:right top!important}}@media (min-width:599px){.xs\\:object-top{object-position:top!important}}@media (min-width:599px){.xs\\:opacity-0{opacity:0!important}}@media (min-width:599px){.xs\\:opacity-25{opacity:.25!important}}@media (min-width:599px){.xs\\:opacity-50{opacity:.5!important}}@media (min-width:599px){.xs\\:opacity-75{opacity:.75!important}}@media (min-width:599px){.xs\\:opacity-100{opacity:1!important}}@media (min-width:599px){.xs\\:hover\\:opacity-0:hover{opacity:0!important}}@media (min-width:599px){.xs\\:hover\\:opacity-25:hover{opacity:.25!important}}@media (min-width:599px){.xs\\:hover\\:opacity-50:hover{opacity:.5!important}}@media (min-width:599px){.xs\\:hover\\:opacity-75:hover{opacity:.75!important}}@media (min-width:599px){.xs\\:hover\\:opacity-100:hover{opacity:1!important}}@media (min-width:599px){.xs\\:focus\\:opacity-0:focus{opacity:0!important}}@media (min-width:599px){.xs\\:focus\\:opacity-25:focus{opacity:.25!important}}@media (min-width:599px){.xs\\:focus\\:opacity-50:focus{opacity:.5!important}}@media (min-width:599px){.xs\\:focus\\:opacity-75:focus{opacity:.75!important}}@media (min-width:599px){.xs\\:focus\\:opacity-100:focus{opacity:1!important}}@media (min-width:599px){.xs\\:overflow-auto{overflow:auto!important}}@media (min-width:599px){.xs\\:overflow-hidden{overflow:hidden!important}}@media (min-width:599px){.xs\\:overflow-visible{overflow:visible!important}}@media (min-width:599px){.xs\\:overflow-scroll{overflow:scroll!important}}@media (min-width:599px){.xs\\:overflow-x-auto{overflow-x:auto!important}}@media (min-width:599px){.xs\\:overflow-y-auto{overflow-y:auto!important}}@media (min-width:599px){.xs\\:overflow-x-hidden{overflow-x:hidden!important}}@media (min-width:599px){.xs\\:overflow-y-hidden{overflow-y:hidden!important}}@media (min-width:599px){.xs\\:overflow-x-visible{overflow-x:visible!important}}@media (min-width:599px){.xs\\:overflow-y-visible{overflow-y:visible!important}}@media (min-width:599px){.xs\\:overflow-x-scroll{overflow-x:scroll!important}}@media (min-width:599px){.xs\\:overflow-y-scroll{overflow-y:scroll!important}}@media (min-width:599px){.xs\\:scrolling-touch{-webkit-overflow-scrolling:touch!important}}@media (min-width:599px){.xs\\:scrolling-auto{-webkit-overflow-scrolling:auto!important}}@media (min-width:599px){.xs\\:overscroll-auto{overscroll-behavior:auto!important}}@media (min-width:599px){.xs\\:overscroll-contain{overscroll-behavior:contain!important}}@media (min-width:599px){.xs\\:overscroll-none{overscroll-behavior:none!important}}@media (min-width:599px){.xs\\:overscroll-y-auto{overscroll-behavior-y:auto!important}}@media (min-width:599px){.xs\\:overscroll-y-contain{overscroll-behavior-y:contain!important}}@media (min-width:599px){.xs\\:overscroll-y-none{overscroll-behavior-y:none!important}}@media (min-width:599px){.xs\\:overscroll-x-auto{overscroll-behavior-x:auto!important}}@media (min-width:599px){.xs\\:overscroll-x-contain{overscroll-behavior-x:contain!important}}@media (min-width:599px){.xs\\:overscroll-x-none{overscroll-behavior-x:none!important}}@media (min-width:599px){.xs\\:p-0{padding:0!important}}@media (min-width:599px){.xs\\:p-1{padding:.25rem!important}}@media (min-width:599px){.xs\\:p-2{padding:.5rem!important}}@media (min-width:599px){.xs\\:p-3{padding:.75rem!important}}@media (min-width:599px){.xs\\:p-4{padding:1rem!important}}@media (min-width:599px){.xs\\:p-5{padding:1.25rem!important}}@media (min-width:599px){.xs\\:p-6{padding:1.5rem!important}}@media (min-width:599px){.xs\\:p-8{padding:2rem!important}}@media (min-width:599px){.xs\\:p-10{padding:2.5rem!important}}@media (min-width:599px){.xs\\:p-12{padding:3rem!important}}@media (min-width:599px){.xs\\:p-16{padding:4rem!important}}@media (min-width:599px){.xs\\:p-20{padding:5rem!important}}@media (min-width:599px){.xs\\:p-24{padding:6rem!important}}@media (min-width:599px){.xs\\:p-32{padding:8rem!important}}@media (min-width:599px){.xs\\:p-40{padding:10rem!important}}@media (min-width:599px){.xs\\:p-48{padding:12rem!important}}@media (min-width:599px){.xs\\:p-56{padding:14rem!important}}@media (min-width:599px){.xs\\:p-64{padding:16rem!important}}@media (min-width:599px){.xs\\:p-px{padding:1px!important}}@media (min-width:599px){.xs\\:py-0{padding-top:0!important;padding-bottom:0!important}}@media (min-width:599px){.xs\\:px-0{padding-left:0!important;padding-right:0!important}}@media (min-width:599px){.xs\\:py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}}@media (min-width:599px){.xs\\:px-1{padding-left:.25rem!important;padding-right:.25rem!important}}@media (min-width:599px){.xs\\:py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}}@media (min-width:599px){.xs\\:px-2{padding-left:.5rem!important;padding-right:.5rem!important}}@media (min-width:599px){.xs\\:py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}}@media (min-width:599px){.xs\\:px-3{padding-left:.75rem!important;padding-right:.75rem!important}}@media (min-width:599px){.xs\\:py-4{padding-top:1rem!important;padding-bottom:1rem!important}}@media (min-width:599px){.xs\\:px-4{padding-left:1rem!important;padding-right:1rem!important}}@media (min-width:599px){.xs\\:py-5{padding-top:1.25rem!important;padding-bottom:1.25rem!important}}@media (min-width:599px){.xs\\:px-5{padding-left:1.25rem!important;padding-right:1.25rem!important}}@media (min-width:599px){.xs\\:py-6{padding-top:1.5rem!important;padding-bottom:1.5rem!important}}@media (min-width:599px){.xs\\:px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}}@media (min-width:599px){.xs\\:py-8{padding-top:2rem!important;padding-bottom:2rem!important}}@media (min-width:599px){.xs\\:px-8{padding-left:2rem!important;padding-right:2rem!important}}@media (min-width:599px){.xs\\:py-10{padding-top:2.5rem!important;padding-bottom:2.5rem!important}}@media (min-width:599px){.xs\\:px-10{padding-left:2.5rem!important;padding-right:2.5rem!important}}@media (min-width:599px){.xs\\:py-12{padding-top:3rem!important;padding-bottom:3rem!important}}@media (min-width:599px){.xs\\:px-12{padding-left:3rem!important;padding-right:3rem!important}}@media (min-width:599px){.xs\\:py-16{padding-top:4rem!important;padding-bottom:4rem!important}}@media (min-width:599px){.xs\\:px-16{padding-left:4rem!important;padding-right:4rem!important}}@media (min-width:599px){.xs\\:py-20{padding-top:5rem!important;padding-bottom:5rem!important}}@media (min-width:599px){.xs\\:px-20{padding-left:5rem!important;padding-right:5rem!important}}@media (min-width:599px){.xs\\:py-24{padding-top:6rem!important;padding-bottom:6rem!important}}@media (min-width:599px){.xs\\:px-24{padding-left:6rem!important;padding-right:6rem!important}}@media (min-width:599px){.xs\\:py-32{padding-top:8rem!important;padding-bottom:8rem!important}}@media (min-width:599px){.xs\\:px-32{padding-left:8rem!important;padding-right:8rem!important}}@media (min-width:599px){.xs\\:py-40{padding-top:10rem!important;padding-bottom:10rem!important}}@media (min-width:599px){.xs\\:px-40{padding-left:10rem!important;padding-right:10rem!important}}@media (min-width:599px){.xs\\:py-48{padding-top:12rem!important;padding-bottom:12rem!important}}@media (min-width:599px){.xs\\:px-48{padding-left:12rem!important;padding-right:12rem!important}}@media (min-width:599px){.xs\\:py-56{padding-top:14rem!important;padding-bottom:14rem!important}}@media (min-width:599px){.xs\\:px-56{padding-left:14rem!important;padding-right:14rem!important}}@media (min-width:599px){.xs\\:py-64{padding-top:16rem!important;padding-bottom:16rem!important}}@media (min-width:599px){.xs\\:px-64{padding-left:16rem!important;padding-right:16rem!important}}@media (min-width:599px){.xs\\:py-px{padding-top:1px!important;padding-bottom:1px!important}}@media (min-width:599px){.xs\\:px-px{padding-left:1px!important;padding-right:1px!important}}@media (min-width:599px){.xs\\:pt-0{padding-top:0!important}}@media (min-width:599px){.xs\\:pr-0{padding-right:0!important}}@media (min-width:599px){.xs\\:pb-0{padding-bottom:0!important}}@media (min-width:599px){.xs\\:pl-0{padding-left:0!important}}@media (min-width:599px){.xs\\:pt-1{padding-top:.25rem!important}}@media (min-width:599px){.xs\\:pr-1{padding-right:.25rem!important}}@media (min-width:599px){.xs\\:pb-1{padding-bottom:.25rem!important}}@media (min-width:599px){.xs\\:pl-1{padding-left:.25rem!important}}@media (min-width:599px){.xs\\:pt-2{padding-top:.5rem!important}}@media (min-width:599px){.xs\\:pr-2{padding-right:.5rem!important}}@media (min-width:599px){.xs\\:pb-2{padding-bottom:.5rem!important}}@media (min-width:599px){.xs\\:pl-2{padding-left:.5rem!important}}@media (min-width:599px){.xs\\:pt-3{padding-top:.75rem!important}}@media (min-width:599px){.xs\\:pr-3{padding-right:.75rem!important}}@media (min-width:599px){.xs\\:pb-3{padding-bottom:.75rem!important}}@media (min-width:599px){.xs\\:pl-3{padding-left:.75rem!important}}@media (min-width:599px){.xs\\:pt-4{padding-top:1rem!important}}@media (min-width:599px){.xs\\:pr-4{padding-right:1rem!important}}@media (min-width:599px){.xs\\:pb-4{padding-bottom:1rem!important}}@media (min-width:599px){.xs\\:pl-4{padding-left:1rem!important}}@media (min-width:599px){.xs\\:pt-5{padding-top:1.25rem!important}}@media (min-width:599px){.xs\\:pr-5{padding-right:1.25rem!important}}@media (min-width:599px){.xs\\:pb-5{padding-bottom:1.25rem!important}}@media (min-width:599px){.xs\\:pl-5{padding-left:1.25rem!important}}@media (min-width:599px){.xs\\:pt-6{padding-top:1.5rem!important}}@media (min-width:599px){.xs\\:pr-6{padding-right:1.5rem!important}}@media (min-width:599px){.xs\\:pb-6{padding-bottom:1.5rem!important}}@media (min-width:599px){.xs\\:pl-6{padding-left:1.5rem!important}}@media (min-width:599px){.xs\\:pt-8{padding-top:2rem!important}}@media (min-width:599px){.xs\\:pr-8{padding-right:2rem!important}}@media (min-width:599px){.xs\\:pb-8{padding-bottom:2rem!important}}@media (min-width:599px){.xs\\:pl-8{padding-left:2rem!important}}@media (min-width:599px){.xs\\:pt-10{padding-top:2.5rem!important}}@media (min-width:599px){.xs\\:pr-10{padding-right:2.5rem!important}}@media (min-width:599px){.xs\\:pb-10{padding-bottom:2.5rem!important}}@media (min-width:599px){.xs\\:pl-10{padding-left:2.5rem!important}}@media (min-width:599px){.xs\\:pt-12{padding-top:3rem!important}}@media (min-width:599px){.xs\\:pr-12{padding-right:3rem!important}}@media (min-width:599px){.xs\\:pb-12{padding-bottom:3rem!important}}@media (min-width:599px){.xs\\:pl-12{padding-left:3rem!important}}@media (min-width:599px){.xs\\:pt-16{padding-top:4rem!important}}@media (min-width:599px){.xs\\:pr-16{padding-right:4rem!important}}@media (min-width:599px){.xs\\:pb-16{padding-bottom:4rem!important}}@media (min-width:599px){.xs\\:pl-16{padding-left:4rem!important}}@media (min-width:599px){.xs\\:pt-20{padding-top:5rem!important}}@media (min-width:599px){.xs\\:pr-20{padding-right:5rem!important}}@media (min-width:599px){.xs\\:pb-20{padding-bottom:5rem!important}}@media (min-width:599px){.xs\\:pl-20{padding-left:5rem!important}}@media (min-width:599px){.xs\\:pt-24{padding-top:6rem!important}}@media (min-width:599px){.xs\\:pr-24{padding-right:6rem!important}}@media (min-width:599px){.xs\\:pb-24{padding-bottom:6rem!important}}@media (min-width:599px){.xs\\:pl-24{padding-left:6rem!important}}@media (min-width:599px){.xs\\:pt-32{padding-top:8rem!important}}@media (min-width:599px){.xs\\:pr-32{padding-right:8rem!important}}@media (min-width:599px){.xs\\:pb-32{padding-bottom:8rem!important}}@media (min-width:599px){.xs\\:pl-32{padding-left:8rem!important}}@media (min-width:599px){.xs\\:pt-40{padding-top:10rem!important}}@media (min-width:599px){.xs\\:pr-40{padding-right:10rem!important}}@media (min-width:599px){.xs\\:pb-40{padding-bottom:10rem!important}}@media (min-width:599px){.xs\\:pl-40{padding-left:10rem!important}}@media (min-width:599px){.xs\\:pt-48{padding-top:12rem!important}}@media (min-width:599px){.xs\\:pr-48{padding-right:12rem!important}}@media (min-width:599px){.xs\\:pb-48{padding-bottom:12rem!important}}@media (min-width:599px){.xs\\:pl-48{padding-left:12rem!important}}@media (min-width:599px){.xs\\:pt-56{padding-top:14rem!important}}@media (min-width:599px){.xs\\:pr-56{padding-right:14rem!important}}@media (min-width:599px){.xs\\:pb-56{padding-bottom:14rem!important}}@media (min-width:599px){.xs\\:pl-56{padding-left:14rem!important}}@media (min-width:599px){.xs\\:pt-64{padding-top:16rem!important}}@media (min-width:599px){.xs\\:pr-64{padding-right:16rem!important}}@media (min-width:599px){.xs\\:pb-64{padding-bottom:16rem!important}}@media (min-width:599px){.xs\\:pl-64{padding-left:16rem!important}}@media (min-width:599px){.xs\\:pt-px{padding-top:1px!important}}@media (min-width:599px){.xs\\:pr-px{padding-right:1px!important}}@media (min-width:599px){.xs\\:pb-px{padding-bottom:1px!important}}@media (min-width:599px){.xs\\:pl-px{padding-left:1px!important}}@media (min-width:599px){.xs\\:placeholder-transparent::placeholder{color:transparent!important}}@media (min-width:599px){.xs\\:placeholder-current::placeholder{color:currentColor!important}}@media (min-width:599px){.xs\\:placeholder-black::placeholder{--placeholder-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-white::placeholder{--placeholder-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-gray-100::placeholder{--placeholder-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-gray-200::placeholder{--placeholder-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-gray-300::placeholder{--placeholder-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-gray-400::placeholder{--placeholder-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-gray-500::placeholder{--placeholder-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-gray-600::placeholder{--placeholder-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-gray-700::placeholder{--placeholder-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-gray-800::placeholder{--placeholder-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-gray-900::placeholder{--placeholder-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-red-100::placeholder{--placeholder-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-red-200::placeholder{--placeholder-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-red-300::placeholder{--placeholder-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-red-400::placeholder{--placeholder-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-red-500::placeholder{--placeholder-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-red-600::placeholder{--placeholder-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-red-700::placeholder{--placeholder-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-red-800::placeholder{--placeholder-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-red-900::placeholder{--placeholder-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-orange-100::placeholder{--placeholder-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-orange-200::placeholder{--placeholder-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-orange-300::placeholder{--placeholder-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-orange-400::placeholder{--placeholder-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-orange-500::placeholder{--placeholder-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-orange-600::placeholder{--placeholder-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-orange-700::placeholder{--placeholder-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-orange-800::placeholder{--placeholder-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-orange-900::placeholder{--placeholder-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-yellow-100::placeholder{--placeholder-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-yellow-200::placeholder{--placeholder-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-yellow-300::placeholder{--placeholder-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-yellow-400::placeholder{--placeholder-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-yellow-500::placeholder{--placeholder-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-yellow-600::placeholder{--placeholder-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-yellow-700::placeholder{--placeholder-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-yellow-800::placeholder{--placeholder-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-yellow-900::placeholder{--placeholder-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-green-100::placeholder{--placeholder-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-green-200::placeholder{--placeholder-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-green-300::placeholder{--placeholder-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-green-400::placeholder{--placeholder-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-green-500::placeholder{--placeholder-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-green-600::placeholder{--placeholder-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-green-700::placeholder{--placeholder-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-green-800::placeholder{--placeholder-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-green-900::placeholder{--placeholder-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-teal-100::placeholder{--placeholder-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-teal-200::placeholder{--placeholder-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-teal-300::placeholder{--placeholder-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-teal-400::placeholder{--placeholder-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-teal-500::placeholder{--placeholder-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-teal-600::placeholder{--placeholder-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-teal-700::placeholder{--placeholder-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-teal-800::placeholder{--placeholder-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-teal-900::placeholder{--placeholder-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-blue-100::placeholder{--placeholder-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-blue-200::placeholder{--placeholder-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-blue-300::placeholder{--placeholder-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-blue-400::placeholder{--placeholder-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-blue-500::placeholder{--placeholder-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-blue-600::placeholder{--placeholder-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-blue-700::placeholder{--placeholder-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-blue-800::placeholder{--placeholder-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-blue-900::placeholder{--placeholder-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-indigo-100::placeholder{--placeholder-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-indigo-200::placeholder{--placeholder-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-indigo-300::placeholder{--placeholder-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-indigo-400::placeholder{--placeholder-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-indigo-500::placeholder{--placeholder-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-indigo-600::placeholder{--placeholder-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-indigo-700::placeholder{--placeholder-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-indigo-800::placeholder{--placeholder-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-indigo-900::placeholder{--placeholder-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-purple-100::placeholder{--placeholder-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-purple-200::placeholder{--placeholder-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-purple-300::placeholder{--placeholder-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-purple-400::placeholder{--placeholder-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-purple-500::placeholder{--placeholder-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-purple-600::placeholder{--placeholder-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-purple-700::placeholder{--placeholder-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-purple-800::placeholder{--placeholder-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-purple-900::placeholder{--placeholder-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-pink-100::placeholder{--placeholder-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-pink-200::placeholder{--placeholder-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-pink-300::placeholder{--placeholder-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-pink-400::placeholder{--placeholder-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-pink-500::placeholder{--placeholder-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-pink-600::placeholder{--placeholder-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-pink-700::placeholder{--placeholder-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-pink-800::placeholder{--placeholder-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-pink-900::placeholder{--placeholder-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-transparent:focus::placeholder{color:transparent!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-current:focus::placeholder{color:currentColor!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-black:focus::placeholder{--placeholder-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-white:focus::placeholder{--placeholder-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-gray-100:focus::placeholder{--placeholder-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-gray-200:focus::placeholder{--placeholder-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-gray-300:focus::placeholder{--placeholder-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-gray-400:focus::placeholder{--placeholder-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-gray-500:focus::placeholder{--placeholder-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-gray-600:focus::placeholder{--placeholder-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-gray-700:focus::placeholder{--placeholder-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-gray-800:focus::placeholder{--placeholder-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-gray-900:focus::placeholder{--placeholder-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-red-100:focus::placeholder{--placeholder-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-red-200:focus::placeholder{--placeholder-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-red-300:focus::placeholder{--placeholder-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-red-400:focus::placeholder{--placeholder-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-red-500:focus::placeholder{--placeholder-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-red-600:focus::placeholder{--placeholder-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-red-700:focus::placeholder{--placeholder-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-red-800:focus::placeholder{--placeholder-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-red-900:focus::placeholder{--placeholder-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-orange-100:focus::placeholder{--placeholder-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-orange-200:focus::placeholder{--placeholder-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-orange-300:focus::placeholder{--placeholder-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-orange-400:focus::placeholder{--placeholder-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-orange-500:focus::placeholder{--placeholder-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-orange-600:focus::placeholder{--placeholder-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-orange-700:focus::placeholder{--placeholder-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-orange-800:focus::placeholder{--placeholder-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-orange-900:focus::placeholder{--placeholder-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-yellow-100:focus::placeholder{--placeholder-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-yellow-200:focus::placeholder{--placeholder-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-yellow-300:focus::placeholder{--placeholder-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-yellow-400:focus::placeholder{--placeholder-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-yellow-500:focus::placeholder{--placeholder-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-yellow-600:focus::placeholder{--placeholder-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-yellow-700:focus::placeholder{--placeholder-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-yellow-800:focus::placeholder{--placeholder-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-yellow-900:focus::placeholder{--placeholder-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-green-100:focus::placeholder{--placeholder-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-green-200:focus::placeholder{--placeholder-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-green-300:focus::placeholder{--placeholder-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-green-400:focus::placeholder{--placeholder-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-green-500:focus::placeholder{--placeholder-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-green-600:focus::placeholder{--placeholder-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-green-700:focus::placeholder{--placeholder-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-green-800:focus::placeholder{--placeholder-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-green-900:focus::placeholder{--placeholder-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-teal-100:focus::placeholder{--placeholder-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-teal-200:focus::placeholder{--placeholder-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-teal-300:focus::placeholder{--placeholder-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-teal-400:focus::placeholder{--placeholder-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-teal-500:focus::placeholder{--placeholder-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-teal-600:focus::placeholder{--placeholder-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-teal-700:focus::placeholder{--placeholder-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-teal-800:focus::placeholder{--placeholder-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-teal-900:focus::placeholder{--placeholder-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-blue-100:focus::placeholder{--placeholder-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-blue-200:focus::placeholder{--placeholder-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-blue-300:focus::placeholder{--placeholder-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-blue-400:focus::placeholder{--placeholder-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-blue-500:focus::placeholder{--placeholder-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-blue-600:focus::placeholder{--placeholder-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-blue-700:focus::placeholder{--placeholder-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-blue-800:focus::placeholder{--placeholder-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-blue-900:focus::placeholder{--placeholder-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-indigo-100:focus::placeholder{--placeholder-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-indigo-200:focus::placeholder{--placeholder-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-indigo-300:focus::placeholder{--placeholder-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-indigo-400:focus::placeholder{--placeholder-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-indigo-500:focus::placeholder{--placeholder-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-indigo-600:focus::placeholder{--placeholder-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-indigo-700:focus::placeholder{--placeholder-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-indigo-800:focus::placeholder{--placeholder-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-indigo-900:focus::placeholder{--placeholder-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-purple-100:focus::placeholder{--placeholder-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-purple-200:focus::placeholder{--placeholder-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-purple-300:focus::placeholder{--placeholder-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-purple-400:focus::placeholder{--placeholder-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-purple-500:focus::placeholder{--placeholder-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-purple-600:focus::placeholder{--placeholder-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-purple-700:focus::placeholder{--placeholder-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-purple-800:focus::placeholder{--placeholder-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-purple-900:focus::placeholder{--placeholder-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-pink-100:focus::placeholder{--placeholder-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-pink-200:focus::placeholder{--placeholder-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-pink-300:focus::placeholder{--placeholder-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-pink-400:focus::placeholder{--placeholder-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-pink-500:focus::placeholder{--placeholder-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-pink-600:focus::placeholder{--placeholder-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-pink-700:focus::placeholder{--placeholder-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-pink-800:focus::placeholder{--placeholder-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-pink-900:focus::placeholder{--placeholder-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--placeholder-opacity))!important}}@media (min-width:599px){.xs\\:placeholder-opacity-0::placeholder{--placeholder-opacity:0!important}}@media (min-width:599px){.xs\\:placeholder-opacity-25::placeholder{--placeholder-opacity:0.25!important}}@media (min-width:599px){.xs\\:placeholder-opacity-50::placeholder{--placeholder-opacity:0.5!important}}@media (min-width:599px){.xs\\:placeholder-opacity-75::placeholder{--placeholder-opacity:0.75!important}}@media (min-width:599px){.xs\\:placeholder-opacity-100::placeholder{--placeholder-opacity:1!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-opacity-0:focus::placeholder{--placeholder-opacity:0!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-opacity-25:focus::placeholder{--placeholder-opacity:0.25!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-opacity-50:focus::placeholder{--placeholder-opacity:0.5!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-opacity-75:focus::placeholder{--placeholder-opacity:0.75!important}}@media (min-width:599px){.xs\\:focus\\:placeholder-opacity-100:focus::placeholder{--placeholder-opacity:1!important}}@media (min-width:599px){.xs\\:pointer-events-none{pointer-events:none!important}}@media (min-width:599px){.xs\\:pointer-events-auto{pointer-events:auto!important}}@media (min-width:599px){.xs\\:static{position:static!important}}@media (min-width:599px){.xs\\:fixed{position:fixed!important}}@media (min-width:599px){.xs\\:absolute{position:absolute!important}}@media (min-width:599px){.xs\\:relative{position:relative!important}}@media (min-width:599px){.xs\\:sticky{position:sticky!important}}@media (min-width:599px){.xs\\:inset-0{top:0!important;right:0!important;bottom:0!important;left:0!important}}@media (min-width:599px){.xs\\:inset-auto{top:auto!important;right:auto!important;bottom:auto!important;left:auto!important}}@media (min-width:599px){.xs\\:inset-y-0{top:0!important;bottom:0!important}}@media (min-width:599px){.xs\\:inset-x-0{right:0!important;left:0!important}}@media (min-width:599px){.xs\\:inset-y-auto{top:auto!important;bottom:auto!important}}@media (min-width:599px){.xs\\:inset-x-auto{right:auto!important;left:auto!important}}@media (min-width:599px){.xs\\:top-0{top:0!important}}@media (min-width:599px){.xs\\:right-0{right:0!important}}@media (min-width:599px){.xs\\:bottom-0{bottom:0!important}}@media (min-width:599px){.xs\\:left-0{left:0!important}}@media (min-width:599px){.xs\\:top-auto{top:auto!important}}@media (min-width:599px){.xs\\:right-auto{right:auto!important}}@media (min-width:599px){.xs\\:bottom-auto{bottom:auto!important}}@media (min-width:599px){.xs\\:left-auto{left:auto!important}}@media (min-width:599px){.xs\\:resize-none{resize:none!important}}@media (min-width:599px){.xs\\:resize-y{resize:vertical!important}}@media (min-width:599px){.xs\\:resize-x{resize:horizontal!important}}@media (min-width:599px){.xs\\:resize{resize:both!important}}@media (min-width:599px){.xs\\:shadow-xs{box-shadow:0 0 0 1px rgba(0,0,0,.05)!important}}@media (min-width:599px){.xs\\:shadow-sm{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important}}@media (min-width:599px){.xs\\:shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)!important}}@media (min-width:599px){.xs\\:shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)!important}}@media (min-width:599px){.xs\\:shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)!important}}@media (min-width:599px){.xs\\:shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)!important}}@media (min-width:599px){.xs\\:shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important}}@media (min-width:599px){.xs\\:shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)!important}}@media (min-width:599px){.xs\\:shadow-outline{box-shadow:0 0 0 3px rgba(66,153,225,.5)!important}}@media (min-width:599px){.xs\\:shadow-none{box-shadow:none!important}}@media (min-width:599px){.xs\\:hover\\:shadow-xs:hover{box-shadow:0 0 0 1px rgba(0,0,0,.05)!important}}@media (min-width:599px){.xs\\:hover\\:shadow-sm:hover{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important}}@media (min-width:599px){.xs\\:hover\\:shadow:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)!important}}@media (min-width:599px){.xs\\:hover\\:shadow-md:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)!important}}@media (min-width:599px){.xs\\:hover\\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)!important}}@media (min-width:599px){.xs\\:hover\\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)!important}}@media (min-width:599px){.xs\\:hover\\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important}}@media (min-width:599px){.xs\\:hover\\:shadow-inner:hover{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)!important}}@media (min-width:599px){.xs\\:hover\\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(66,153,225,.5)!important}}@media (min-width:599px){.xs\\:hover\\:shadow-none:hover{box-shadow:none!important}}@media (min-width:599px){.xs\\:focus\\:shadow-xs:focus{box-shadow:0 0 0 1px rgba(0,0,0,.05)!important}}@media (min-width:599px){.xs\\:focus\\:shadow-sm:focus{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important}}@media (min-width:599px){.xs\\:focus\\:shadow:focus{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)!important}}@media (min-width:599px){.xs\\:focus\\:shadow-md:focus{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)!important}}@media (min-width:599px){.xs\\:focus\\:shadow-lg:focus{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)!important}}@media (min-width:599px){.xs\\:focus\\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)!important}}@media (min-width:599px){.xs\\:focus\\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important}}@media (min-width:599px){.xs\\:focus\\:shadow-inner:focus{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)!important}}@media (min-width:599px){.xs\\:focus\\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(66,153,225,.5)!important}}@media (min-width:599px){.xs\\:focus\\:shadow-none:focus{box-shadow:none!important}}@media (min-width:599px){.xs\\:fill-current{fill:currentColor!important}}@media (min-width:599px){.xs\\:stroke-current{stroke:currentColor!important}}@media (min-width:599px){.xs\\:stroke-0{stroke-width:0!important}}@media (min-width:599px){.xs\\:stroke-1{stroke-width:1!important}}@media (min-width:599px){.xs\\:stroke-2{stroke-width:2!important}}@media (min-width:599px){.xs\\:table-auto{table-layout:auto!important}}@media (min-width:599px){.xs\\:table-fixed{table-layout:fixed!important}}@media (min-width:599px){.xs\\:text-left{text-align:left!important}}@media (min-width:599px){.xs\\:text-center{text-align:center!important}}@media (min-width:599px){.xs\\:text-right{text-align:right!important}}@media (min-width:599px){.xs\\:text-justify{text-align:justify!important}}@media (min-width:599px){.xs\\:text-transparent{color:transparent!important}}@media (min-width:599px){.xs\\:text-current{color:currentColor!important}}@media (min-width:599px){.xs\\:text-black{--text-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-white{--text-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-gray-100{--text-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-gray-200{--text-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-gray-300{--text-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-gray-400{--text-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-gray-500{--text-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-gray-600{--text-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-gray-700{--text-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-gray-800{--text-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-gray-900{--text-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-red-100{--text-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-red-200{--text-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-red-300{--text-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-red-400{--text-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-red-500{--text-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-red-600{--text-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-red-700{--text-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-red-800{--text-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-red-900{--text-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-orange-100{--text-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-orange-200{--text-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-orange-300{--text-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-orange-400{--text-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-orange-500{--text-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-orange-600{--text-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-orange-700{--text-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-orange-800{--text-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-orange-900{--text-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-yellow-100{--text-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-yellow-200{--text-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-yellow-300{--text-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-yellow-400{--text-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-yellow-500{--text-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-yellow-600{--text-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-yellow-700{--text-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-yellow-800{--text-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-yellow-900{--text-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-green-100{--text-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-green-200{--text-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-green-300{--text-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-green-400{--text-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-green-500{--text-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-green-600{--text-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-green-700{--text-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-green-800{--text-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-green-900{--text-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-teal-100{--text-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-teal-200{--text-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-teal-300{--text-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-teal-400{--text-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-teal-500{--text-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-teal-600{--text-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-teal-700{--text-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-teal-800{--text-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-teal-900{--text-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-blue-100{--text-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-blue-200{--text-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-blue-300{--text-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-blue-400{--text-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-blue-500{--text-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-blue-600{--text-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-blue-700{--text-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-blue-800{--text-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-blue-900{--text-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-indigo-100{--text-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-indigo-200{--text-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-indigo-300{--text-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-indigo-400{--text-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-indigo-500{--text-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-indigo-600{--text-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-indigo-700{--text-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-indigo-800{--text-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-indigo-900{--text-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-purple-100{--text-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-purple-200{--text-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-purple-300{--text-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-purple-400{--text-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-purple-500{--text-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-purple-600{--text-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-purple-700{--text-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-purple-800{--text-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-purple-900{--text-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-pink-100{--text-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-pink-200{--text-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-pink-300{--text-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-pink-400{--text-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-pink-500{--text-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-pink-600{--text-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-pink-700{--text-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-pink-800{--text-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-pink-900{--text-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-transparent:hover{color:transparent!important}}@media (min-width:599px){.xs\\:hover\\:text-current:hover{color:currentColor!important}}@media (min-width:599px){.xs\\:hover\\:text-black:hover{--text-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-white:hover{--text-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-gray-100:hover{--text-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-gray-200:hover{--text-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-gray-300:hover{--text-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-gray-400:hover{--text-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-gray-500:hover{--text-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-gray-600:hover{--text-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-gray-700:hover{--text-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-gray-800:hover{--text-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-gray-900:hover{--text-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-red-100:hover{--text-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-red-200:hover{--text-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-red-300:hover{--text-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-red-400:hover{--text-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-red-500:hover{--text-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-red-600:hover{--text-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-red-700:hover{--text-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-red-800:hover{--text-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-red-900:hover{--text-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-orange-100:hover{--text-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-orange-200:hover{--text-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-orange-300:hover{--text-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-orange-400:hover{--text-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-orange-500:hover{--text-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-orange-600:hover{--text-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-orange-700:hover{--text-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-orange-800:hover{--text-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-orange-900:hover{--text-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-yellow-100:hover{--text-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-yellow-200:hover{--text-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-yellow-300:hover{--text-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-yellow-400:hover{--text-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-yellow-500:hover{--text-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-yellow-600:hover{--text-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-yellow-700:hover{--text-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-yellow-800:hover{--text-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-yellow-900:hover{--text-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-green-100:hover{--text-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-green-200:hover{--text-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-green-300:hover{--text-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-green-400:hover{--text-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-green-500:hover{--text-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-green-600:hover{--text-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-green-700:hover{--text-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-green-800:hover{--text-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-green-900:hover{--text-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-teal-100:hover{--text-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-teal-200:hover{--text-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-teal-300:hover{--text-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-teal-400:hover{--text-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-teal-500:hover{--text-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-teal-600:hover{--text-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-teal-700:hover{--text-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-teal-800:hover{--text-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-teal-900:hover{--text-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-blue-100:hover{--text-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-blue-200:hover{--text-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-blue-300:hover{--text-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-blue-400:hover{--text-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-blue-500:hover{--text-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-blue-600:hover{--text-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-blue-700:hover{--text-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-blue-800:hover{--text-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-blue-900:hover{--text-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-indigo-100:hover{--text-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-indigo-200:hover{--text-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-indigo-300:hover{--text-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-indigo-400:hover{--text-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-indigo-500:hover{--text-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-indigo-600:hover{--text-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-indigo-700:hover{--text-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-indigo-800:hover{--text-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-indigo-900:hover{--text-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-purple-100:hover{--text-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-purple-200:hover{--text-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-purple-300:hover{--text-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-purple-400:hover{--text-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-purple-500:hover{--text-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-purple-600:hover{--text-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-purple-700:hover{--text-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-purple-800:hover{--text-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-purple-900:hover{--text-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-pink-100:hover{--text-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-pink-200:hover{--text-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-pink-300:hover{--text-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-pink-400:hover{--text-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-pink-500:hover{--text-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-pink-600:hover{--text-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-pink-700:hover{--text-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-pink-800:hover{--text-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:hover\\:text-pink-900:hover{--text-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-transparent:focus{color:transparent!important}}@media (min-width:599px){.xs\\:focus\\:text-current:focus{color:currentColor!important}}@media (min-width:599px){.xs\\:focus\\:text-black:focus{--text-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-white:focus{--text-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-gray-100:focus{--text-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-gray-200:focus{--text-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-gray-300:focus{--text-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-gray-400:focus{--text-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-gray-500:focus{--text-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-gray-600:focus{--text-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-gray-700:focus{--text-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-gray-800:focus{--text-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-gray-900:focus{--text-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-red-100:focus{--text-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-red-200:focus{--text-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-red-300:focus{--text-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-red-400:focus{--text-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-red-500:focus{--text-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-red-600:focus{--text-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-red-700:focus{--text-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-red-800:focus{--text-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-red-900:focus{--text-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-orange-100:focus{--text-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-orange-200:focus{--text-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-orange-300:focus{--text-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-orange-400:focus{--text-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-orange-500:focus{--text-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-orange-600:focus{--text-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-orange-700:focus{--text-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-orange-800:focus{--text-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-orange-900:focus{--text-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-yellow-100:focus{--text-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-yellow-200:focus{--text-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-yellow-300:focus{--text-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-yellow-400:focus{--text-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-yellow-500:focus{--text-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-yellow-600:focus{--text-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-yellow-700:focus{--text-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-yellow-800:focus{--text-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-yellow-900:focus{--text-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-green-100:focus{--text-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-green-200:focus{--text-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-green-300:focus{--text-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-green-400:focus{--text-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-green-500:focus{--text-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-green-600:focus{--text-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-green-700:focus{--text-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-green-800:focus{--text-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-green-900:focus{--text-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-teal-100:focus{--text-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-teal-200:focus{--text-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-teal-300:focus{--text-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-teal-400:focus{--text-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-teal-500:focus{--text-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-teal-600:focus{--text-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-teal-700:focus{--text-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-teal-800:focus{--text-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-teal-900:focus{--text-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-blue-100:focus{--text-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-blue-200:focus{--text-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-blue-300:focus{--text-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-blue-400:focus{--text-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-blue-500:focus{--text-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-blue-600:focus{--text-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-blue-700:focus{--text-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-blue-800:focus{--text-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-blue-900:focus{--text-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-indigo-100:focus{--text-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-indigo-200:focus{--text-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-indigo-300:focus{--text-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-indigo-400:focus{--text-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-indigo-500:focus{--text-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-indigo-600:focus{--text-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-indigo-700:focus{--text-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-indigo-800:focus{--text-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-indigo-900:focus{--text-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-purple-100:focus{--text-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-purple-200:focus{--text-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-purple-300:focus{--text-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-purple-400:focus{--text-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-purple-500:focus{--text-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-purple-600:focus{--text-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-purple-700:focus{--text-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-purple-800:focus{--text-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-purple-900:focus{--text-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-pink-100:focus{--text-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-pink-200:focus{--text-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-pink-300:focus{--text-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-pink-400:focus{--text-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-pink-500:focus{--text-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-pink-600:focus{--text-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-pink-700:focus{--text-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-pink-800:focus{--text-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:focus\\:text-pink-900:focus{--text-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--text-opacity))!important}}@media (min-width:599px){.xs\\:text-opacity-0{--text-opacity:0!important}}@media (min-width:599px){.xs\\:text-opacity-25{--text-opacity:0.25!important}}@media (min-width:599px){.xs\\:text-opacity-50{--text-opacity:0.5!important}}@media (min-width:599px){.xs\\:text-opacity-75{--text-opacity:0.75!important}}@media (min-width:599px){.xs\\:text-opacity-100{--text-opacity:1!important}}@media (min-width:599px){.xs\\:hover\\:text-opacity-0:hover{--text-opacity:0!important}}@media (min-width:599px){.xs\\:hover\\:text-opacity-25:hover{--text-opacity:0.25!important}}@media (min-width:599px){.xs\\:hover\\:text-opacity-50:hover{--text-opacity:0.5!important}}@media (min-width:599px){.xs\\:hover\\:text-opacity-75:hover{--text-opacity:0.75!important}}@media (min-width:599px){.xs\\:hover\\:text-opacity-100:hover{--text-opacity:1!important}}@media (min-width:599px){.xs\\:focus\\:text-opacity-0:focus{--text-opacity:0!important}}@media (min-width:599px){.xs\\:focus\\:text-opacity-25:focus{--text-opacity:0.25!important}}@media (min-width:599px){.xs\\:focus\\:text-opacity-50:focus{--text-opacity:0.5!important}}@media (min-width:599px){.xs\\:focus\\:text-opacity-75:focus{--text-opacity:0.75!important}}@media (min-width:599px){.xs\\:focus\\:text-opacity-100:focus{--text-opacity:1!important}}@media (min-width:599px){.xs\\:italic{font-style:italic!important}}@media (min-width:599px){.xs\\:not-italic{font-style:normal!important}}@media (min-width:599px){.xs\\:uppercase{text-transform:uppercase!important}}@media (min-width:599px){.xs\\:lowercase{text-transform:lowercase!important}}@media (min-width:599px){.xs\\:capitalize{text-transform:capitalize!important}}@media (min-width:599px){.xs\\:normal-case{text-transform:none!important}}@media (min-width:599px){.xs\\:underline{text-decoration:underline!important}}@media (min-width:599px){.xs\\:line-through{text-decoration:line-through!important}}@media (min-width:599px){.xs\\:no-underline{text-decoration:none!important}}@media (min-width:599px){.xs\\:hover\\:underline:hover{text-decoration:underline!important}}@media (min-width:599px){.xs\\:hover\\:line-through:hover{text-decoration:line-through!important}}@media (min-width:599px){.xs\\:hover\\:no-underline:hover{text-decoration:none!important}}@media (min-width:599px){.xs\\:focus\\:underline:focus{text-decoration:underline!important}}@media (min-width:599px){.xs\\:focus\\:line-through:focus{text-decoration:line-through!important}}@media (min-width:599px){.xs\\:focus\\:no-underline:focus{text-decoration:none!important}}@media (min-width:599px){.xs\\:antialiased{-webkit-font-smoothing:antialiased!important;-moz-osx-font-smoothing:grayscale!important}}@media (min-width:599px){.xs\\:subpixel-antialiased{-webkit-font-smoothing:auto!important;-moz-osx-font-smoothing:auto!important}}@media (min-width:599px){.xs\\:diagonal-fractions,.xs\\:lining-nums,.xs\\:oldstyle-nums,.xs\\:ordinal,.xs\\:proportional-nums,.xs\\:slashed-zero,.xs\\:stacked-fractions,.xs\\:tabular-nums{--font-variant-numeric-ordinal:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-slashed-zero:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-figure:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-spacing:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-fraction:var(--tailwind-empty,/*!*/ /*!*/)!important;font-variant-numeric:var(--font-variant-numeric-ordinal) var(--font-variant-numeric-slashed-zero) var(--font-variant-numeric-figure) var(--font-variant-numeric-spacing) var(--font-variant-numeric-fraction)!important}}@media (min-width:599px){.xs\\:normal-nums{font-variant-numeric:normal!important}}@media (min-width:599px){.xs\\:ordinal{--font-variant-numeric-ordinal:ordinal!important}}@media (min-width:599px){.xs\\:slashed-zero{--font-variant-numeric-slashed-zero:slashed-zero!important}}@media (min-width:599px){.xs\\:lining-nums{--font-variant-numeric-figure:lining-nums!important}}@media (min-width:599px){.xs\\:oldstyle-nums{--font-variant-numeric-figure:oldstyle-nums!important}}@media (min-width:599px){.xs\\:proportional-nums{--font-variant-numeric-spacing:proportional-nums!important}}@media (min-width:599px){.xs\\:tabular-nums{--font-variant-numeric-spacing:tabular-nums!important}}@media (min-width:599px){.xs\\:diagonal-fractions{--font-variant-numeric-fraction:diagonal-fractions!important}}@media (min-width:599px){.xs\\:stacked-fractions{--font-variant-numeric-fraction:stacked-fractions!important}}@media (min-width:599px){.xs\\:tracking-tighter{letter-spacing:-.05em!important}}@media (min-width:599px){.xs\\:tracking-tight{letter-spacing:-.025em!important}}@media (min-width:599px){.xs\\:tracking-normal{letter-spacing:0!important}}@media (min-width:599px){.xs\\:tracking-wide{letter-spacing:.025em!important}}@media (min-width:599px){.xs\\:tracking-wider{letter-spacing:.05em!important}}@media (min-width:599px){.xs\\:tracking-widest{letter-spacing:.1em!important}}@media (min-width:599px){.xs\\:select-none{-webkit-user-select:none!important;user-select:none!important}}@media (min-width:599px){.xs\\:select-text{-webkit-user-select:text!important;user-select:text!important}}@media (min-width:599px){.xs\\:select-all{-webkit-user-select:all!important;user-select:all!important}}@media (min-width:599px){.xs\\:select-auto{-webkit-user-select:auto!important;user-select:auto!important}}@media (min-width:599px){.xs\\:align-baseline{vertical-align:initial!important}}@media (min-width:599px){.xs\\:align-top{vertical-align:top!important}}@media (min-width:599px){.xs\\:align-middle{vertical-align:middle!important}}@media (min-width:599px){.xs\\:align-bottom{vertical-align:bottom!important}}@media (min-width:599px){.xs\\:align-text-top{vertical-align:text-top!important}}@media (min-width:599px){.xs\\:align-text-bottom{vertical-align:text-bottom!important}}@media (min-width:599px){.xs\\:visible{visibility:visible!important}}@media (min-width:599px){.xs\\:invisible{visibility:hidden!important}}@media (min-width:599px){.xs\\:whitespace-normal{white-space:normal!important}}@media (min-width:599px){.xs\\:whitespace-no-wrap{white-space:nowrap!important}}@media (min-width:599px){.xs\\:whitespace-pre{white-space:pre!important}}@media (min-width:599px){.xs\\:whitespace-pre-line{white-space:pre-line!important}}@media (min-width:599px){.xs\\:whitespace-pre-wrap{white-space:pre-wrap!important}}@media (min-width:599px){.xs\\:break-normal{word-wrap:normal!important;overflow-wrap:normal!important;word-break:normal!important}}@media (min-width:599px){.xs\\:break-words{word-wrap:break-word!important;overflow-wrap:break-word!important}}@media (min-width:599px){.xs\\:break-all{word-break:break-all!important}}@media (min-width:599px){.xs\\:truncate{overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}}@media (min-width:599px){.xs\\:w-0{width:0!important}}@media (min-width:599px){.xs\\:w-1{width:.25rem!important}}@media (min-width:599px){.xs\\:w-2{width:.5rem!important}}@media (min-width:599px){.xs\\:w-3{width:.75rem!important}}@media (min-width:599px){.xs\\:w-4{width:1rem!important}}@media (min-width:599px){.xs\\:w-5{width:1.25rem!important}}@media (min-width:599px){.xs\\:w-6{width:1.5rem!important}}@media (min-width:599px){.xs\\:w-8{width:2rem!important}}@media (min-width:599px){.xs\\:w-10{width:2.5rem!important}}@media (min-width:599px){.xs\\:w-12{width:3rem!important}}@media (min-width:599px){.xs\\:w-16{width:4rem!important}}@media (min-width:599px){.xs\\:w-20{width:5rem!important}}@media (min-width:599px){.xs\\:w-24{width:6rem!important}}@media (min-width:599px){.xs\\:w-32{width:8rem!important}}@media (min-width:599px){.xs\\:w-40{width:10rem!important}}@media (min-width:599px){.xs\\:w-48{width:12rem!important}}@media (min-width:599px){.xs\\:w-56{width:14rem!important}}@media (min-width:599px){.xs\\:w-64{width:16rem!important}}@media (min-width:599px){.xs\\:w-auto{width:auto!important}}@media (min-width:599px){.xs\\:w-px{width:1px!important}}@media (min-width:599px){.xs\\:w-1\\/2{width:50%!important}}@media (min-width:599px){.xs\\:w-1\\/3{width:33.333333%!important}}@media (min-width:599px){.xs\\:w-2\\/3{width:66.666667%!important}}@media (min-width:599px){.xs\\:w-1\\/4{width:25%!important}}@media (min-width:599px){.xs\\:w-2\\/4{width:50%!important}}@media (min-width:599px){.xs\\:w-3\\/4{width:75%!important}}@media (min-width:599px){.xs\\:w-1\\/5{width:20%!important}}@media (min-width:599px){.xs\\:w-2\\/5{width:40%!important}}@media (min-width:599px){.xs\\:w-3\\/5{width:60%!important}}@media (min-width:599px){.xs\\:w-4\\/5{width:80%!important}}@media (min-width:599px){.xs\\:w-1\\/6{width:16.666667%!important}}@media (min-width:599px){.xs\\:w-2\\/6{width:33.333333%!important}}@media (min-width:599px){.xs\\:w-3\\/6{width:50%!important}}@media (min-width:599px){.xs\\:w-4\\/6{width:66.666667%!important}}@media (min-width:599px){.xs\\:w-5\\/6{width:83.333333%!important}}@media (min-width:599px){.xs\\:w-1\\/12{width:8.333333%!important}}@media (min-width:599px){.xs\\:w-2\\/12{width:16.666667%!important}}@media (min-width:599px){.xs\\:w-3\\/12{width:25%!important}}@media (min-width:599px){.xs\\:w-4\\/12{width:33.333333%!important}}@media (min-width:599px){.xs\\:w-5\\/12{width:41.666667%!important}}@media (min-width:599px){.xs\\:w-6\\/12{width:50%!important}}@media (min-width:599px){.xs\\:w-7\\/12{width:58.333333%!important}}@media (min-width:599px){.xs\\:w-8\\/12{width:66.666667%!important}}@media (min-width:599px){.xs\\:w-9\\/12{width:75%!important}}@media (min-width:599px){.xs\\:w-10\\/12{width:83.333333%!important}}@media (min-width:599px){.xs\\:w-11\\/12{width:91.666667%!important}}@media (min-width:599px){.xs\\:w-full{width:100%!important}}@media (min-width:599px){.xs\\:w-screen{width:100vw!important}}@media (min-width:599px){.xs\\:z-0{z-index:0!important}}@media (min-width:599px){.xs\\:z-10{z-index:10!important}}@media (min-width:599px){.xs\\:z-20{z-index:20!important}}@media (min-width:599px){.xs\\:z-30{z-index:30!important}}@media (min-width:599px){.xs\\:z-40{z-index:40!important}}@media (min-width:599px){.xs\\:z-50{z-index:50!important}}@media (min-width:599px){.xs\\:z-auto{z-index:auto!important}}@media (min-width:599px){.xs\\:gap-0{grid-gap:0!important;gap:0!important}}@media (min-width:599px){.xs\\:gap-1{grid-gap:.25rem!important;gap:.25rem!important}}@media (min-width:599px){.xs\\:gap-2{grid-gap:.5rem!important;gap:.5rem!important}}@media (min-width:599px){.xs\\:gap-3{grid-gap:.75rem!important;gap:.75rem!important}}@media (min-width:599px){.xs\\:gap-4{grid-gap:1rem!important;gap:1rem!important}}@media (min-width:599px){.xs\\:gap-5{grid-gap:1.25rem!important;gap:1.25rem!important}}@media (min-width:599px){.xs\\:gap-6{grid-gap:1.5rem!important;gap:1.5rem!important}}@media (min-width:599px){.xs\\:gap-8{grid-gap:2rem!important;gap:2rem!important}}@media (min-width:599px){.xs\\:gap-10{grid-gap:2.5rem!important;gap:2.5rem!important}}@media (min-width:599px){.xs\\:gap-12{grid-gap:3rem!important;gap:3rem!important}}@media (min-width:599px){.xs\\:gap-16{grid-gap:4rem!important;gap:4rem!important}}@media (min-width:599px){.xs\\:gap-20{grid-gap:5rem!important;gap:5rem!important}}@media (min-width:599px){.xs\\:gap-24{grid-gap:6rem!important;gap:6rem!important}}@media (min-width:599px){.xs\\:gap-32{grid-gap:8rem!important;gap:8rem!important}}@media (min-width:599px){.xs\\:gap-40{grid-gap:10rem!important;gap:10rem!important}}@media (min-width:599px){.xs\\:gap-48{grid-gap:12rem!important;gap:12rem!important}}@media (min-width:599px){.xs\\:gap-56{grid-gap:14rem!important;gap:14rem!important}}@media (min-width:599px){.xs\\:gap-64{grid-gap:16rem!important;gap:16rem!important}}@media (min-width:599px){.xs\\:gap-px{grid-gap:1px!important;gap:1px!important}}@media (min-width:599px){.xs\\:col-gap-0{grid-column-gap:0!important;column-gap:0!important}}@media (min-width:599px){.xs\\:col-gap-1{grid-column-gap:.25rem!important;column-gap:.25rem!important}}@media (min-width:599px){.xs\\:col-gap-2{grid-column-gap:.5rem!important;column-gap:.5rem!important}}@media (min-width:599px){.xs\\:col-gap-3{grid-column-gap:.75rem!important;column-gap:.75rem!important}}@media (min-width:599px){.xs\\:col-gap-4{grid-column-gap:1rem!important;column-gap:1rem!important}}@media (min-width:599px){.xs\\:col-gap-5{grid-column-gap:1.25rem!important;column-gap:1.25rem!important}}@media (min-width:599px){.xs\\:col-gap-6{grid-column-gap:1.5rem!important;column-gap:1.5rem!important}}@media (min-width:599px){.xs\\:col-gap-8{grid-column-gap:2rem!important;column-gap:2rem!important}}@media (min-width:599px){.xs\\:col-gap-10{grid-column-gap:2.5rem!important;column-gap:2.5rem!important}}@media (min-width:599px){.xs\\:col-gap-12{grid-column-gap:3rem!important;column-gap:3rem!important}}@media (min-width:599px){.xs\\:col-gap-16{grid-column-gap:4rem!important;column-gap:4rem!important}}@media (min-width:599px){.xs\\:col-gap-20{grid-column-gap:5rem!important;column-gap:5rem!important}}@media (min-width:599px){.xs\\:col-gap-24{grid-column-gap:6rem!important;column-gap:6rem!important}}@media (min-width:599px){.xs\\:col-gap-32{grid-column-gap:8rem!important;column-gap:8rem!important}}@media (min-width:599px){.xs\\:col-gap-40{grid-column-gap:10rem!important;column-gap:10rem!important}}@media (min-width:599px){.xs\\:col-gap-48{grid-column-gap:12rem!important;column-gap:12rem!important}}@media (min-width:599px){.xs\\:col-gap-56{grid-column-gap:14rem!important;column-gap:14rem!important}}@media (min-width:599px){.xs\\:col-gap-64{grid-column-gap:16rem!important;column-gap:16rem!important}}@media (min-width:599px){.xs\\:col-gap-px{grid-column-gap:1px!important;column-gap:1px!important}}@media (min-width:599px){.xs\\:gap-x-0{grid-column-gap:0!important;column-gap:0!important}}@media (min-width:599px){.xs\\:gap-x-1{grid-column-gap:.25rem!important;column-gap:.25rem!important}}@media (min-width:599px){.xs\\:gap-x-2{grid-column-gap:.5rem!important;column-gap:.5rem!important}}@media (min-width:599px){.xs\\:gap-x-3{grid-column-gap:.75rem!important;column-gap:.75rem!important}}@media (min-width:599px){.xs\\:gap-x-4{grid-column-gap:1rem!important;column-gap:1rem!important}}@media (min-width:599px){.xs\\:gap-x-5{grid-column-gap:1.25rem!important;column-gap:1.25rem!important}}@media (min-width:599px){.xs\\:gap-x-6{grid-column-gap:1.5rem!important;column-gap:1.5rem!important}}@media (min-width:599px){.xs\\:gap-x-8{grid-column-gap:2rem!important;column-gap:2rem!important}}@media (min-width:599px){.xs\\:gap-x-10{grid-column-gap:2.5rem!important;column-gap:2.5rem!important}}@media (min-width:599px){.xs\\:gap-x-12{grid-column-gap:3rem!important;column-gap:3rem!important}}@media (min-width:599px){.xs\\:gap-x-16{grid-column-gap:4rem!important;column-gap:4rem!important}}@media (min-width:599px){.xs\\:gap-x-20{grid-column-gap:5rem!important;column-gap:5rem!important}}@media (min-width:599px){.xs\\:gap-x-24{grid-column-gap:6rem!important;column-gap:6rem!important}}@media (min-width:599px){.xs\\:gap-x-32{grid-column-gap:8rem!important;column-gap:8rem!important}}@media (min-width:599px){.xs\\:gap-x-40{grid-column-gap:10rem!important;column-gap:10rem!important}}@media (min-width:599px){.xs\\:gap-x-48{grid-column-gap:12rem!important;column-gap:12rem!important}}@media (min-width:599px){.xs\\:gap-x-56{grid-column-gap:14rem!important;column-gap:14rem!important}}@media (min-width:599px){.xs\\:gap-x-64{grid-column-gap:16rem!important;column-gap:16rem!important}}@media (min-width:599px){.xs\\:gap-x-px{grid-column-gap:1px!important;column-gap:1px!important}}@media (min-width:599px){.xs\\:row-gap-0{grid-row-gap:0!important;row-gap:0!important}}@media (min-width:599px){.xs\\:row-gap-1{grid-row-gap:.25rem!important;row-gap:.25rem!important}}@media (min-width:599px){.xs\\:row-gap-2{grid-row-gap:.5rem!important;row-gap:.5rem!important}}@media (min-width:599px){.xs\\:row-gap-3{grid-row-gap:.75rem!important;row-gap:.75rem!important}}@media (min-width:599px){.xs\\:row-gap-4{grid-row-gap:1rem!important;row-gap:1rem!important}}@media (min-width:599px){.xs\\:row-gap-5{grid-row-gap:1.25rem!important;row-gap:1.25rem!important}}@media (min-width:599px){.xs\\:row-gap-6{grid-row-gap:1.5rem!important;row-gap:1.5rem!important}}@media (min-width:599px){.xs\\:row-gap-8{grid-row-gap:2rem!important;row-gap:2rem!important}}@media (min-width:599px){.xs\\:row-gap-10{grid-row-gap:2.5rem!important;row-gap:2.5rem!important}}@media (min-width:599px){.xs\\:row-gap-12{grid-row-gap:3rem!important;row-gap:3rem!important}}@media (min-width:599px){.xs\\:row-gap-16{grid-row-gap:4rem!important;row-gap:4rem!important}}@media (min-width:599px){.xs\\:row-gap-20{grid-row-gap:5rem!important;row-gap:5rem!important}}@media (min-width:599px){.xs\\:row-gap-24{grid-row-gap:6rem!important;row-gap:6rem!important}}@media (min-width:599px){.xs\\:row-gap-32{grid-row-gap:8rem!important;row-gap:8rem!important}}@media (min-width:599px){.xs\\:row-gap-40{grid-row-gap:10rem!important;row-gap:10rem!important}}@media (min-width:599px){.xs\\:row-gap-48{grid-row-gap:12rem!important;row-gap:12rem!important}}@media (min-width:599px){.xs\\:row-gap-56{grid-row-gap:14rem!important;row-gap:14rem!important}}@media (min-width:599px){.xs\\:row-gap-64{grid-row-gap:16rem!important;row-gap:16rem!important}}@media (min-width:599px){.xs\\:row-gap-px{grid-row-gap:1px!important;row-gap:1px!important}}@media (min-width:599px){.xs\\:gap-y-0{grid-row-gap:0!important;row-gap:0!important}}@media (min-width:599px){.xs\\:gap-y-1{grid-row-gap:.25rem!important;row-gap:.25rem!important}}@media (min-width:599px){.xs\\:gap-y-2{grid-row-gap:.5rem!important;row-gap:.5rem!important}}@media (min-width:599px){.xs\\:gap-y-3{grid-row-gap:.75rem!important;row-gap:.75rem!important}}@media (min-width:599px){.xs\\:gap-y-4{grid-row-gap:1rem!important;row-gap:1rem!important}}@media (min-width:599px){.xs\\:gap-y-5{grid-row-gap:1.25rem!important;row-gap:1.25rem!important}}@media (min-width:599px){.xs\\:gap-y-6{grid-row-gap:1.5rem!important;row-gap:1.5rem!important}}@media (min-width:599px){.xs\\:gap-y-8{grid-row-gap:2rem!important;row-gap:2rem!important}}@media (min-width:599px){.xs\\:gap-y-10{grid-row-gap:2.5rem!important;row-gap:2.5rem!important}}@media (min-width:599px){.xs\\:gap-y-12{grid-row-gap:3rem!important;row-gap:3rem!important}}@media (min-width:599px){.xs\\:gap-y-16{grid-row-gap:4rem!important;row-gap:4rem!important}}@media (min-width:599px){.xs\\:gap-y-20{grid-row-gap:5rem!important;row-gap:5rem!important}}@media (min-width:599px){.xs\\:gap-y-24{grid-row-gap:6rem!important;row-gap:6rem!important}}@media (min-width:599px){.xs\\:gap-y-32{grid-row-gap:8rem!important;row-gap:8rem!important}}@media (min-width:599px){.xs\\:gap-y-40{grid-row-gap:10rem!important;row-gap:10rem!important}}@media (min-width:599px){.xs\\:gap-y-48{grid-row-gap:12rem!important;row-gap:12rem!important}}@media (min-width:599px){.xs\\:gap-y-56{grid-row-gap:14rem!important;row-gap:14rem!important}}@media (min-width:599px){.xs\\:gap-y-64{grid-row-gap:16rem!important;row-gap:16rem!important}}@media (min-width:599px){.xs\\:gap-y-px{grid-row-gap:1px!important;row-gap:1px!important}}@media (min-width:599px){.xs\\:grid-flow-row{grid-auto-flow:row!important}}@media (min-width:599px){.xs\\:grid-flow-col{grid-auto-flow:column!important}}@media (min-width:599px){.xs\\:grid-flow-row-dense{grid-auto-flow:row dense!important}}@media (min-width:599px){.xs\\:grid-flow-col-dense{grid-auto-flow:column dense!important}}@media (min-width:599px){.xs\\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}}@media (min-width:599px){.xs\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}}@media (min-width:599px){.xs\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}}@media (min-width:599px){.xs\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))!important}}@media (min-width:599px){.xs\\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))!important}}@media (min-width:599px){.xs\\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))!important}}@media (min-width:599px){.xs\\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))!important}}@media (min-width:599px){.xs\\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))!important}}@media (min-width:599px){.xs\\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))!important}}@media (min-width:599px){.xs\\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))!important}}@media (min-width:599px){.xs\\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))!important}}@media (min-width:599px){.xs\\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))!important}}@media (min-width:599px){.xs\\:grid-cols-none{grid-template-columns:none!important}}@media (min-width:599px){.xs\\:auto-cols-auto{grid-auto-columns:auto!important}}@media (min-width:599px){.xs\\:auto-cols-min{grid-auto-columns:-webkit-min-content!important;grid-auto-columns:min-content!important}}@media (min-width:599px){.xs\\:auto-cols-max{grid-auto-columns:-webkit-max-content!important;grid-auto-columns:max-content!important}}@media (min-width:599px){.xs\\:auto-cols-fr{grid-auto-columns:minmax(0,1fr)!important}}@media (min-width:599px){.xs\\:col-auto{grid-column:auto!important}}@media (min-width:599px){.xs\\:col-span-1{grid-column:span 1/span 1!important}}@media (min-width:599px){.xs\\:col-span-2{grid-column:span 2/span 2!important}}@media (min-width:599px){.xs\\:col-span-3{grid-column:span 3/span 3!important}}@media (min-width:599px){.xs\\:col-span-4{grid-column:span 4/span 4!important}}@media (min-width:599px){.xs\\:col-span-5{grid-column:span 5/span 5!important}}@media (min-width:599px){.xs\\:col-span-6{grid-column:span 6/span 6!important}}@media (min-width:599px){.xs\\:col-span-7{grid-column:span 7/span 7!important}}@media (min-width:599px){.xs\\:col-span-8{grid-column:span 8/span 8!important}}@media (min-width:599px){.xs\\:col-span-9{grid-column:span 9/span 9!important}}@media (min-width:599px){.xs\\:col-span-10{grid-column:span 10/span 10!important}}@media (min-width:599px){.xs\\:col-span-11{grid-column:span 11/span 11!important}}@media (min-width:599px){.xs\\:col-span-12{grid-column:span 12/span 12!important}}@media (min-width:599px){.xs\\:col-span-full{grid-column:1/-1!important}}@media (min-width:599px){.xs\\:col-start-1{grid-column-start:1!important}}@media (min-width:599px){.xs\\:col-start-2{grid-column-start:2!important}}@media (min-width:599px){.xs\\:col-start-3{grid-column-start:3!important}}@media (min-width:599px){.xs\\:col-start-4{grid-column-start:4!important}}@media (min-width:599px){.xs\\:col-start-5{grid-column-start:5!important}}@media (min-width:599px){.xs\\:col-start-6{grid-column-start:6!important}}@media (min-width:599px){.xs\\:col-start-7{grid-column-start:7!important}}@media (min-width:599px){.xs\\:col-start-8{grid-column-start:8!important}}@media (min-width:599px){.xs\\:col-start-9{grid-column-start:9!important}}@media (min-width:599px){.xs\\:col-start-10{grid-column-start:10!important}}@media (min-width:599px){.xs\\:col-start-11{grid-column-start:11!important}}@media (min-width:599px){.xs\\:col-start-12{grid-column-start:12!important}}@media (min-width:599px){.xs\\:col-start-13{grid-column-start:13!important}}@media (min-width:599px){.xs\\:col-start-auto{grid-column-start:auto!important}}@media (min-width:599px){.xs\\:col-end-1{grid-column-end:1!important}}@media (min-width:599px){.xs\\:col-end-2{grid-column-end:2!important}}@media (min-width:599px){.xs\\:col-end-3{grid-column-end:3!important}}@media (min-width:599px){.xs\\:col-end-4{grid-column-end:4!important}}@media (min-width:599px){.xs\\:col-end-5{grid-column-end:5!important}}@media (min-width:599px){.xs\\:col-end-6{grid-column-end:6!important}}@media (min-width:599px){.xs\\:col-end-7{grid-column-end:7!important}}@media (min-width:599px){.xs\\:col-end-8{grid-column-end:8!important}}@media (min-width:599px){.xs\\:col-end-9{grid-column-end:9!important}}@media (min-width:599px){.xs\\:col-end-10{grid-column-end:10!important}}@media (min-width:599px){.xs\\:col-end-11{grid-column-end:11!important}}@media (min-width:599px){.xs\\:col-end-12{grid-column-end:12!important}}@media (min-width:599px){.xs\\:col-end-13{grid-column-end:13!important}}@media (min-width:599px){.xs\\:col-end-auto{grid-column-end:auto!important}}@media (min-width:599px){.xs\\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))!important}}@media (min-width:599px){.xs\\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))!important}}@media (min-width:599px){.xs\\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))!important}}@media (min-width:599px){.xs\\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))!important}}@media (min-width:599px){.xs\\:grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))!important}}@media (min-width:599px){.xs\\:grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))!important}}@media (min-width:599px){.xs\\:grid-rows-none{grid-template-rows:none!important}}@media (min-width:599px){.xs\\:auto-rows-auto{grid-auto-rows:auto!important}}@media (min-width:599px){.xs\\:auto-rows-min{grid-auto-rows:-webkit-min-content!important;grid-auto-rows:min-content!important}}@media (min-width:599px){.xs\\:auto-rows-max{grid-auto-rows:-webkit-max-content!important;grid-auto-rows:max-content!important}}@media (min-width:599px){.xs\\:auto-rows-fr{grid-auto-rows:minmax(0,1fr)!important}}@media (min-width:599px){.xs\\:row-auto{grid-row:auto!important}}@media (min-width:599px){.xs\\:row-span-1{grid-row:span 1/span 1!important}}@media (min-width:599px){.xs\\:row-span-2{grid-row:span 2/span 2!important}}@media (min-width:599px){.xs\\:row-span-3{grid-row:span 3/span 3!important}}@media (min-width:599px){.xs\\:row-span-4{grid-row:span 4/span 4!important}}@media (min-width:599px){.xs\\:row-span-5{grid-row:span 5/span 5!important}}@media (min-width:599px){.xs\\:row-span-6{grid-row:span 6/span 6!important}}@media (min-width:599px){.xs\\:row-span-full{grid-row:1/-1!important}}@media (min-width:599px){.xs\\:row-start-1{grid-row-start:1!important}}@media (min-width:599px){.xs\\:row-start-2{grid-row-start:2!important}}@media (min-width:599px){.xs\\:row-start-3{grid-row-start:3!important}}@media (min-width:599px){.xs\\:row-start-4{grid-row-start:4!important}}@media (min-width:599px){.xs\\:row-start-5{grid-row-start:5!important}}@media (min-width:599px){.xs\\:row-start-6{grid-row-start:6!important}}@media (min-width:599px){.xs\\:row-start-7{grid-row-start:7!important}}@media (min-width:599px){.xs\\:row-start-auto{grid-row-start:auto!important}}@media (min-width:599px){.xs\\:row-end-1{grid-row-end:1!important}}@media (min-width:599px){.xs\\:row-end-2{grid-row-end:2!important}}@media (min-width:599px){.xs\\:row-end-3{grid-row-end:3!important}}@media (min-width:599px){.xs\\:row-end-4{grid-row-end:4!important}}@media (min-width:599px){.xs\\:row-end-5{grid-row-end:5!important}}@media (min-width:599px){.xs\\:row-end-6{grid-row-end:6!important}}@media (min-width:599px){.xs\\:row-end-7{grid-row-end:7!important}}@media (min-width:599px){.xs\\:row-end-auto{grid-row-end:auto!important}}@media (min-width:599px){.xs\\:transform{--transform-translate-x:0!important;--transform-translate-y:0!important;--transform-rotate:0!important;--transform-skew-x:0!important;--transform-skew-y:0!important;--transform-scale-x:1!important;--transform-scale-y:1!important;transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))!important}}@media (min-width:599px){.xs\\:transform-none{transform:none!important}}@media (min-width:599px){.xs\\:origin-center{transform-origin:center!important}}@media (min-width:599px){.xs\\:origin-top{transform-origin:top!important}}@media (min-width:599px){.xs\\:origin-top-right{transform-origin:top right!important}}@media (min-width:599px){.xs\\:origin-right{transform-origin:right!important}}@media (min-width:599px){.xs\\:origin-bottom-right{transform-origin:bottom right!important}}@media (min-width:599px){.xs\\:origin-bottom{transform-origin:bottom!important}}@media (min-width:599px){.xs\\:origin-bottom-left{transform-origin:bottom left!important}}@media (min-width:599px){.xs\\:origin-left{transform-origin:left!important}}@media (min-width:599px){.xs\\:origin-top-left{transform-origin:top left!important}}@media (min-width:599px){.xs\\:scale-0{--transform-scale-x:0!important;--transform-scale-y:0!important}}@media (min-width:599px){.xs\\:scale-50{--transform-scale-x:.5!important;--transform-scale-y:.5!important}}@media (min-width:599px){.xs\\:scale-75{--transform-scale-x:.75!important;--transform-scale-y:.75!important}}@media (min-width:599px){.xs\\:scale-90{--transform-scale-x:.9!important;--transform-scale-y:.9!important}}@media (min-width:599px){.xs\\:scale-95{--transform-scale-x:.95!important;--transform-scale-y:.95!important}}@media (min-width:599px){.xs\\:scale-100{--transform-scale-x:1!important;--transform-scale-y:1!important}}@media (min-width:599px){.xs\\:scale-105{--transform-scale-x:1.05!important;--transform-scale-y:1.05!important}}@media (min-width:599px){.xs\\:scale-110{--transform-scale-x:1.1!important;--transform-scale-y:1.1!important}}@media (min-width:599px){.xs\\:scale-125{--transform-scale-x:1.25!important;--transform-scale-y:1.25!important}}@media (min-width:599px){.xs\\:scale-150{--transform-scale-x:1.5!important;--transform-scale-y:1.5!important}}@media (min-width:599px){.xs\\:scale-x-0{--transform-scale-x:0!important}}@media (min-width:599px){.xs\\:scale-x-50{--transform-scale-x:.5!important}}@media (min-width:599px){.xs\\:scale-x-75{--transform-scale-x:.75!important}}@media (min-width:599px){.xs\\:scale-x-90{--transform-scale-x:.9!important}}@media (min-width:599px){.xs\\:scale-x-95{--transform-scale-x:.95!important}}@media (min-width:599px){.xs\\:scale-x-100{--transform-scale-x:1!important}}@media (min-width:599px){.xs\\:scale-x-105{--transform-scale-x:1.05!important}}@media (min-width:599px){.xs\\:scale-x-110{--transform-scale-x:1.1!important}}@media (min-width:599px){.xs\\:scale-x-125{--transform-scale-x:1.25!important}}@media (min-width:599px){.xs\\:scale-x-150{--transform-scale-x:1.5!important}}@media (min-width:599px){.xs\\:scale-y-0{--transform-scale-y:0!important}}@media (min-width:599px){.xs\\:scale-y-50{--transform-scale-y:.5!important}}@media (min-width:599px){.xs\\:scale-y-75{--transform-scale-y:.75!important}}@media (min-width:599px){.xs\\:scale-y-90{--transform-scale-y:.9!important}}@media (min-width:599px){.xs\\:scale-y-95{--transform-scale-y:.95!important}}@media (min-width:599px){.xs\\:scale-y-100{--transform-scale-y:1!important}}@media (min-width:599px){.xs\\:scale-y-105{--transform-scale-y:1.05!important}}@media (min-width:599px){.xs\\:scale-y-110{--transform-scale-y:1.1!important}}@media (min-width:599px){.xs\\:scale-y-125{--transform-scale-y:1.25!important}}@media (min-width:599px){.xs\\:scale-y-150{--transform-scale-y:1.5!important}}@media (min-width:599px){.xs\\:hover\\:scale-0:hover{--transform-scale-x:0!important;--transform-scale-y:0!important}}@media (min-width:599px){.xs\\:hover\\:scale-50:hover{--transform-scale-x:.5!important;--transform-scale-y:.5!important}}@media (min-width:599px){.xs\\:hover\\:scale-75:hover{--transform-scale-x:.75!important;--transform-scale-y:.75!important}}@media (min-width:599px){.xs\\:hover\\:scale-90:hover{--transform-scale-x:.9!important;--transform-scale-y:.9!important}}@media (min-width:599px){.xs\\:hover\\:scale-95:hover{--transform-scale-x:.95!important;--transform-scale-y:.95!important}}@media (min-width:599px){.xs\\:hover\\:scale-100:hover{--transform-scale-x:1!important;--transform-scale-y:1!important}}@media (min-width:599px){.xs\\:hover\\:scale-105:hover{--transform-scale-x:1.05!important;--transform-scale-y:1.05!important}}@media (min-width:599px){.xs\\:hover\\:scale-110:hover{--transform-scale-x:1.1!important;--transform-scale-y:1.1!important}}@media (min-width:599px){.xs\\:hover\\:scale-125:hover{--transform-scale-x:1.25!important;--transform-scale-y:1.25!important}}@media (min-width:599px){.xs\\:hover\\:scale-150:hover{--transform-scale-x:1.5!important;--transform-scale-y:1.5!important}}@media (min-width:599px){.xs\\:hover\\:scale-x-0:hover{--transform-scale-x:0!important}}@media (min-width:599px){.xs\\:hover\\:scale-x-50:hover{--transform-scale-x:.5!important}}@media (min-width:599px){.xs\\:hover\\:scale-x-75:hover{--transform-scale-x:.75!important}}@media (min-width:599px){.xs\\:hover\\:scale-x-90:hover{--transform-scale-x:.9!important}}@media (min-width:599px){.xs\\:hover\\:scale-x-95:hover{--transform-scale-x:.95!important}}@media (min-width:599px){.xs\\:hover\\:scale-x-100:hover{--transform-scale-x:1!important}}@media (min-width:599px){.xs\\:hover\\:scale-x-105:hover{--transform-scale-x:1.05!important}}@media (min-width:599px){.xs\\:hover\\:scale-x-110:hover{--transform-scale-x:1.1!important}}@media (min-width:599px){.xs\\:hover\\:scale-x-125:hover{--transform-scale-x:1.25!important}}@media (min-width:599px){.xs\\:hover\\:scale-x-150:hover{--transform-scale-x:1.5!important}}@media (min-width:599px){.xs\\:hover\\:scale-y-0:hover{--transform-scale-y:0!important}}@media (min-width:599px){.xs\\:hover\\:scale-y-50:hover{--transform-scale-y:.5!important}}@media (min-width:599px){.xs\\:hover\\:scale-y-75:hover{--transform-scale-y:.75!important}}@media (min-width:599px){.xs\\:hover\\:scale-y-90:hover{--transform-scale-y:.9!important}}@media (min-width:599px){.xs\\:hover\\:scale-y-95:hover{--transform-scale-y:.95!important}}@media (min-width:599px){.xs\\:hover\\:scale-y-100:hover{--transform-scale-y:1!important}}@media (min-width:599px){.xs\\:hover\\:scale-y-105:hover{--transform-scale-y:1.05!important}}@media (min-width:599px){.xs\\:hover\\:scale-y-110:hover{--transform-scale-y:1.1!important}}@media (min-width:599px){.xs\\:hover\\:scale-y-125:hover{--transform-scale-y:1.25!important}}@media (min-width:599px){.xs\\:hover\\:scale-y-150:hover{--transform-scale-y:1.5!important}}@media (min-width:599px){.xs\\:focus\\:scale-0:focus{--transform-scale-x:0!important;--transform-scale-y:0!important}}@media (min-width:599px){.xs\\:focus\\:scale-50:focus{--transform-scale-x:.5!important;--transform-scale-y:.5!important}}@media (min-width:599px){.xs\\:focus\\:scale-75:focus{--transform-scale-x:.75!important;--transform-scale-y:.75!important}}@media (min-width:599px){.xs\\:focus\\:scale-90:focus{--transform-scale-x:.9!important;--transform-scale-y:.9!important}}@media (min-width:599px){.xs\\:focus\\:scale-95:focus{--transform-scale-x:.95!important;--transform-scale-y:.95!important}}@media (min-width:599px){.xs\\:focus\\:scale-100:focus{--transform-scale-x:1!important;--transform-scale-y:1!important}}@media (min-width:599px){.xs\\:focus\\:scale-105:focus{--transform-scale-x:1.05!important;--transform-scale-y:1.05!important}}@media (min-width:599px){.xs\\:focus\\:scale-110:focus{--transform-scale-x:1.1!important;--transform-scale-y:1.1!important}}@media (min-width:599px){.xs\\:focus\\:scale-125:focus{--transform-scale-x:1.25!important;--transform-scale-y:1.25!important}}@media (min-width:599px){.xs\\:focus\\:scale-150:focus{--transform-scale-x:1.5!important;--transform-scale-y:1.5!important}}@media (min-width:599px){.xs\\:focus\\:scale-x-0:focus{--transform-scale-x:0!important}}@media (min-width:599px){.xs\\:focus\\:scale-x-50:focus{--transform-scale-x:.5!important}}@media (min-width:599px){.xs\\:focus\\:scale-x-75:focus{--transform-scale-x:.75!important}}@media (min-width:599px){.xs\\:focus\\:scale-x-90:focus{--transform-scale-x:.9!important}}@media (min-width:599px){.xs\\:focus\\:scale-x-95:focus{--transform-scale-x:.95!important}}@media (min-width:599px){.xs\\:focus\\:scale-x-100:focus{--transform-scale-x:1!important}}@media (min-width:599px){.xs\\:focus\\:scale-x-105:focus{--transform-scale-x:1.05!important}}@media (min-width:599px){.xs\\:focus\\:scale-x-110:focus{--transform-scale-x:1.1!important}}@media (min-width:599px){.xs\\:focus\\:scale-x-125:focus{--transform-scale-x:1.25!important}}@media (min-width:599px){.xs\\:focus\\:scale-x-150:focus{--transform-scale-x:1.5!important}}@media (min-width:599px){.xs\\:focus\\:scale-y-0:focus{--transform-scale-y:0!important}}@media (min-width:599px){.xs\\:focus\\:scale-y-50:focus{--transform-scale-y:.5!important}}@media (min-width:599px){.xs\\:focus\\:scale-y-75:focus{--transform-scale-y:.75!important}}@media (min-width:599px){.xs\\:focus\\:scale-y-90:focus{--transform-scale-y:.9!important}}@media (min-width:599px){.xs\\:focus\\:scale-y-95:focus{--transform-scale-y:.95!important}}@media (min-width:599px){.xs\\:focus\\:scale-y-100:focus{--transform-scale-y:1!important}}@media (min-width:599px){.xs\\:focus\\:scale-y-105:focus{--transform-scale-y:1.05!important}}@media (min-width:599px){.xs\\:focus\\:scale-y-110:focus{--transform-scale-y:1.1!important}}@media (min-width:599px){.xs\\:focus\\:scale-y-125:focus{--transform-scale-y:1.25!important}}@media (min-width:599px){.xs\\:focus\\:scale-y-150:focus{--transform-scale-y:1.5!important}}@media (min-width:599px){.xs\\:rotate-0{--transform-rotate:0!important}}@media (min-width:599px){.xs\\:rotate-1{--transform-rotate:1deg!important}}@media (min-width:599px){.xs\\:rotate-2{--transform-rotate:2deg!important}}@media (min-width:599px){.xs\\:rotate-3{--transform-rotate:3deg!important}}@media (min-width:599px){.xs\\:rotate-6{--transform-rotate:6deg!important}}@media (min-width:599px){.xs\\:rotate-12{--transform-rotate:12deg!important}}@media (min-width:599px){.xs\\:rotate-45{--transform-rotate:45deg!important}}@media (min-width:599px){.xs\\:rotate-90{--transform-rotate:90deg!important}}@media (min-width:599px){.xs\\:rotate-180{--transform-rotate:180deg!important}}@media (min-width:599px){.xs\\:-rotate-180{--transform-rotate:-180deg!important}}@media (min-width:599px){.xs\\:-rotate-90{--transform-rotate:-90deg!important}}@media (min-width:599px){.xs\\:-rotate-45{--transform-rotate:-45deg!important}}@media (min-width:599px){.xs\\:-rotate-12{--transform-rotate:-12deg!important}}@media (min-width:599px){.xs\\:-rotate-6{--transform-rotate:-6deg!important}}@media (min-width:599px){.xs\\:-rotate-3{--transform-rotate:-3deg!important}}@media (min-width:599px){.xs\\:-rotate-2{--transform-rotate:-2deg!important}}@media (min-width:599px){.xs\\:-rotate-1{--transform-rotate:-1deg!important}}@media (min-width:599px){.xs\\:hover\\:rotate-0:hover{--transform-rotate:0!important}}@media (min-width:599px){.xs\\:hover\\:rotate-1:hover{--transform-rotate:1deg!important}}@media (min-width:599px){.xs\\:hover\\:rotate-2:hover{--transform-rotate:2deg!important}}@media (min-width:599px){.xs\\:hover\\:rotate-3:hover{--transform-rotate:3deg!important}}@media (min-width:599px){.xs\\:hover\\:rotate-6:hover{--transform-rotate:6deg!important}}@media (min-width:599px){.xs\\:hover\\:rotate-12:hover{--transform-rotate:12deg!important}}@media (min-width:599px){.xs\\:hover\\:rotate-45:hover{--transform-rotate:45deg!important}}@media (min-width:599px){.xs\\:hover\\:rotate-90:hover{--transform-rotate:90deg!important}}@media (min-width:599px){.xs\\:hover\\:rotate-180:hover{--transform-rotate:180deg!important}}@media (min-width:599px){.xs\\:hover\\:-rotate-180:hover{--transform-rotate:-180deg!important}}@media (min-width:599px){.xs\\:hover\\:-rotate-90:hover{--transform-rotate:-90deg!important}}@media (min-width:599px){.xs\\:hover\\:-rotate-45:hover{--transform-rotate:-45deg!important}}@media (min-width:599px){.xs\\:hover\\:-rotate-12:hover{--transform-rotate:-12deg!important}}@media (min-width:599px){.xs\\:hover\\:-rotate-6:hover{--transform-rotate:-6deg!important}}@media (min-width:599px){.xs\\:hover\\:-rotate-3:hover{--transform-rotate:-3deg!important}}@media (min-width:599px){.xs\\:hover\\:-rotate-2:hover{--transform-rotate:-2deg!important}}@media (min-width:599px){.xs\\:hover\\:-rotate-1:hover{--transform-rotate:-1deg!important}}@media (min-width:599px){.xs\\:focus\\:rotate-0:focus{--transform-rotate:0!important}}@media (min-width:599px){.xs\\:focus\\:rotate-1:focus{--transform-rotate:1deg!important}}@media (min-width:599px){.xs\\:focus\\:rotate-2:focus{--transform-rotate:2deg!important}}@media (min-width:599px){.xs\\:focus\\:rotate-3:focus{--transform-rotate:3deg!important}}@media (min-width:599px){.xs\\:focus\\:rotate-6:focus{--transform-rotate:6deg!important}}@media (min-width:599px){.xs\\:focus\\:rotate-12:focus{--transform-rotate:12deg!important}}@media (min-width:599px){.xs\\:focus\\:rotate-45:focus{--transform-rotate:45deg!important}}@media (min-width:599px){.xs\\:focus\\:rotate-90:focus{--transform-rotate:90deg!important}}@media (min-width:599px){.xs\\:focus\\:rotate-180:focus{--transform-rotate:180deg!important}}@media (min-width:599px){.xs\\:focus\\:-rotate-180:focus{--transform-rotate:-180deg!important}}@media (min-width:599px){.xs\\:focus\\:-rotate-90:focus{--transform-rotate:-90deg!important}}@media (min-width:599px){.xs\\:focus\\:-rotate-45:focus{--transform-rotate:-45deg!important}}@media (min-width:599px){.xs\\:focus\\:-rotate-12:focus{--transform-rotate:-12deg!important}}@media (min-width:599px){.xs\\:focus\\:-rotate-6:focus{--transform-rotate:-6deg!important}}@media (min-width:599px){.xs\\:focus\\:-rotate-3:focus{--transform-rotate:-3deg!important}}@media (min-width:599px){.xs\\:focus\\:-rotate-2:focus{--transform-rotate:-2deg!important}}@media (min-width:599px){.xs\\:focus\\:-rotate-1:focus{--transform-rotate:-1deg!important}}@media (min-width:599px){.xs\\:translate-x-0{--transform-translate-x:0!important}}@media (min-width:599px){.xs\\:translate-x-1{--transform-translate-x:0.25rem!important}}@media (min-width:599px){.xs\\:translate-x-2{--transform-translate-x:0.5rem!important}}@media (min-width:599px){.xs\\:translate-x-3{--transform-translate-x:0.75rem!important}}@media (min-width:599px){.xs\\:translate-x-4{--transform-translate-x:1rem!important}}@media (min-width:599px){.xs\\:translate-x-5{--transform-translate-x:1.25rem!important}}@media (min-width:599px){.xs\\:translate-x-6{--transform-translate-x:1.5rem!important}}@media (min-width:599px){.xs\\:translate-x-8{--transform-translate-x:2rem!important}}@media (min-width:599px){.xs\\:translate-x-10{--transform-translate-x:2.5rem!important}}@media (min-width:599px){.xs\\:translate-x-12{--transform-translate-x:3rem!important}}@media (min-width:599px){.xs\\:translate-x-16{--transform-translate-x:4rem!important}}@media (min-width:599px){.xs\\:translate-x-20{--transform-translate-x:5rem!important}}@media (min-width:599px){.xs\\:translate-x-24{--transform-translate-x:6rem!important}}@media (min-width:599px){.xs\\:translate-x-32{--transform-translate-x:8rem!important}}@media (min-width:599px){.xs\\:translate-x-40{--transform-translate-x:10rem!important}}@media (min-width:599px){.xs\\:translate-x-48{--transform-translate-x:12rem!important}}@media (min-width:599px){.xs\\:translate-x-56{--transform-translate-x:14rem!important}}@media (min-width:599px){.xs\\:translate-x-64{--transform-translate-x:16rem!important}}@media (min-width:599px){.xs\\:translate-x-px{--transform-translate-x:1px!important}}@media (min-width:599px){.xs\\:-translate-x-1{--transform-translate-x:-0.25rem!important}}@media (min-width:599px){.xs\\:-translate-x-2{--transform-translate-x:-0.5rem!important}}@media (min-width:599px){.xs\\:-translate-x-3{--transform-translate-x:-0.75rem!important}}@media (min-width:599px){.xs\\:-translate-x-4{--transform-translate-x:-1rem!important}}@media (min-width:599px){.xs\\:-translate-x-5{--transform-translate-x:-1.25rem!important}}@media (min-width:599px){.xs\\:-translate-x-6{--transform-translate-x:-1.5rem!important}}@media (min-width:599px){.xs\\:-translate-x-8{--transform-translate-x:-2rem!important}}@media (min-width:599px){.xs\\:-translate-x-10{--transform-translate-x:-2.5rem!important}}@media (min-width:599px){.xs\\:-translate-x-12{--transform-translate-x:-3rem!important}}@media (min-width:599px){.xs\\:-translate-x-16{--transform-translate-x:-4rem!important}}@media (min-width:599px){.xs\\:-translate-x-20{--transform-translate-x:-5rem!important}}@media (min-width:599px){.xs\\:-translate-x-24{--transform-translate-x:-6rem!important}}@media (min-width:599px){.xs\\:-translate-x-32{--transform-translate-x:-8rem!important}}@media (min-width:599px){.xs\\:-translate-x-40{--transform-translate-x:-10rem!important}}@media (min-width:599px){.xs\\:-translate-x-48{--transform-translate-x:-12rem!important}}@media (min-width:599px){.xs\\:-translate-x-56{--transform-translate-x:-14rem!important}}@media (min-width:599px){.xs\\:-translate-x-64{--transform-translate-x:-16rem!important}}@media (min-width:599px){.xs\\:-translate-x-px{--transform-translate-x:-1px!important}}@media (min-width:599px){.xs\\:-translate-x-full{--transform-translate-x:-100%!important}}@media (min-width:599px){.xs\\:-translate-x-1\\/2{--transform-translate-x:-50%!important}}@media (min-width:599px){.xs\\:translate-x-1\\/2{--transform-translate-x:50%!important}}@media (min-width:599px){.xs\\:translate-x-full{--transform-translate-x:100%!important}}@media (min-width:599px){.xs\\:translate-y-0{--transform-translate-y:0!important}}@media (min-width:599px){.xs\\:translate-y-1{--transform-translate-y:0.25rem!important}}@media (min-width:599px){.xs\\:translate-y-2{--transform-translate-y:0.5rem!important}}@media (min-width:599px){.xs\\:translate-y-3{--transform-translate-y:0.75rem!important}}@media (min-width:599px){.xs\\:translate-y-4{--transform-translate-y:1rem!important}}@media (min-width:599px){.xs\\:translate-y-5{--transform-translate-y:1.25rem!important}}@media (min-width:599px){.xs\\:translate-y-6{--transform-translate-y:1.5rem!important}}@media (min-width:599px){.xs\\:translate-y-8{--transform-translate-y:2rem!important}}@media (min-width:599px){.xs\\:translate-y-10{--transform-translate-y:2.5rem!important}}@media (min-width:599px){.xs\\:translate-y-12{--transform-translate-y:3rem!important}}@media (min-width:599px){.xs\\:translate-y-16{--transform-translate-y:4rem!important}}@media (min-width:599px){.xs\\:translate-y-20{--transform-translate-y:5rem!important}}@media (min-width:599px){.xs\\:translate-y-24{--transform-translate-y:6rem!important}}@media (min-width:599px){.xs\\:translate-y-32{--transform-translate-y:8rem!important}}@media (min-width:599px){.xs\\:translate-y-40{--transform-translate-y:10rem!important}}@media (min-width:599px){.xs\\:translate-y-48{--transform-translate-y:12rem!important}}@media (min-width:599px){.xs\\:translate-y-56{--transform-translate-y:14rem!important}}@media (min-width:599px){.xs\\:translate-y-64{--transform-translate-y:16rem!important}}@media (min-width:599px){.xs\\:translate-y-px{--transform-translate-y:1px!important}}@media (min-width:599px){.xs\\:-translate-y-1{--transform-translate-y:-0.25rem!important}}@media (min-width:599px){.xs\\:-translate-y-2{--transform-translate-y:-0.5rem!important}}@media (min-width:599px){.xs\\:-translate-y-3{--transform-translate-y:-0.75rem!important}}@media (min-width:599px){.xs\\:-translate-y-4{--transform-translate-y:-1rem!important}}@media (min-width:599px){.xs\\:-translate-y-5{--transform-translate-y:-1.25rem!important}}@media (min-width:599px){.xs\\:-translate-y-6{--transform-translate-y:-1.5rem!important}}@media (min-width:599px){.xs\\:-translate-y-8{--transform-translate-y:-2rem!important}}@media (min-width:599px){.xs\\:-translate-y-10{--transform-translate-y:-2.5rem!important}}@media (min-width:599px){.xs\\:-translate-y-12{--transform-translate-y:-3rem!important}}@media (min-width:599px){.xs\\:-translate-y-16{--transform-translate-y:-4rem!important}}@media (min-width:599px){.xs\\:-translate-y-20{--transform-translate-y:-5rem!important}}@media (min-width:599px){.xs\\:-translate-y-24{--transform-translate-y:-6rem!important}}@media (min-width:599px){.xs\\:-translate-y-32{--transform-translate-y:-8rem!important}}@media (min-width:599px){.xs\\:-translate-y-40{--transform-translate-y:-10rem!important}}@media (min-width:599px){.xs\\:-translate-y-48{--transform-translate-y:-12rem!important}}@media (min-width:599px){.xs\\:-translate-y-56{--transform-translate-y:-14rem!important}}@media (min-width:599px){.xs\\:-translate-y-64{--transform-translate-y:-16rem!important}}@media (min-width:599px){.xs\\:-translate-y-px{--transform-translate-y:-1px!important}}@media (min-width:599px){.xs\\:-translate-y-full{--transform-translate-y:-100%!important}}@media (min-width:599px){.xs\\:-translate-y-1\\/2{--transform-translate-y:-50%!important}}@media (min-width:599px){.xs\\:translate-y-1\\/2{--transform-translate-y:50%!important}}@media (min-width:599px){.xs\\:translate-y-full{--transform-translate-y:100%!important}}@media (min-width:599px){.xs\\:hover\\:translate-x-0:hover{--transform-translate-x:0!important}}@media (min-width:599px){.xs\\:hover\\:translate-x-1:hover{--transform-translate-x:0.25rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-x-2:hover{--transform-translate-x:0.5rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-x-3:hover{--transform-translate-x:0.75rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-x-4:hover{--transform-translate-x:1rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-x-5:hover{--transform-translate-x:1.25rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-x-6:hover{--transform-translate-x:1.5rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-x-8:hover{--transform-translate-x:2rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-x-10:hover{--transform-translate-x:2.5rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-x-12:hover{--transform-translate-x:3rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-x-16:hover{--transform-translate-x:4rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-x-20:hover{--transform-translate-x:5rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-x-24:hover{--transform-translate-x:6rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-x-32:hover{--transform-translate-x:8rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-x-40:hover{--transform-translate-x:10rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-x-48:hover{--transform-translate-x:12rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-x-56:hover{--transform-translate-x:14rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-x-64:hover{--transform-translate-x:16rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-x-px:hover{--transform-translate-x:1px!important}}@media (min-width:599px){.xs\\:hover\\:-translate-x-1:hover{--transform-translate-x:-0.25rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-x-2:hover{--transform-translate-x:-0.5rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-x-3:hover{--transform-translate-x:-0.75rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-x-4:hover{--transform-translate-x:-1rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-x-5:hover{--transform-translate-x:-1.25rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-x-6:hover{--transform-translate-x:-1.5rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-x-8:hover{--transform-translate-x:-2rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-x-10:hover{--transform-translate-x:-2.5rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-x-12:hover{--transform-translate-x:-3rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-x-16:hover{--transform-translate-x:-4rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-x-20:hover{--transform-translate-x:-5rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-x-24:hover{--transform-translate-x:-6rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-x-32:hover{--transform-translate-x:-8rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-x-40:hover{--transform-translate-x:-10rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-x-48:hover{--transform-translate-x:-12rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-x-56:hover{--transform-translate-x:-14rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-x-64:hover{--transform-translate-x:-16rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-x-px:hover{--transform-translate-x:-1px!important}}@media (min-width:599px){.xs\\:hover\\:-translate-x-full:hover{--transform-translate-x:-100%!important}}@media (min-width:599px){.xs\\:hover\\:-translate-x-1\\/2:hover{--transform-translate-x:-50%!important}}@media (min-width:599px){.xs\\:hover\\:translate-x-1\\/2:hover{--transform-translate-x:50%!important}}@media (min-width:599px){.xs\\:hover\\:translate-x-full:hover{--transform-translate-x:100%!important}}@media (min-width:599px){.xs\\:hover\\:translate-y-0:hover{--transform-translate-y:0!important}}@media (min-width:599px){.xs\\:hover\\:translate-y-1:hover{--transform-translate-y:0.25rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-y-2:hover{--transform-translate-y:0.5rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-y-3:hover{--transform-translate-y:0.75rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-y-4:hover{--transform-translate-y:1rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-y-5:hover{--transform-translate-y:1.25rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-y-6:hover{--transform-translate-y:1.5rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-y-8:hover{--transform-translate-y:2rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-y-10:hover{--transform-translate-y:2.5rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-y-12:hover{--transform-translate-y:3rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-y-16:hover{--transform-translate-y:4rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-y-20:hover{--transform-translate-y:5rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-y-24:hover{--transform-translate-y:6rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-y-32:hover{--transform-translate-y:8rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-y-40:hover{--transform-translate-y:10rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-y-48:hover{--transform-translate-y:12rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-y-56:hover{--transform-translate-y:14rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-y-64:hover{--transform-translate-y:16rem!important}}@media (min-width:599px){.xs\\:hover\\:translate-y-px:hover{--transform-translate-y:1px!important}}@media (min-width:599px){.xs\\:hover\\:-translate-y-1:hover{--transform-translate-y:-0.25rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-y-2:hover{--transform-translate-y:-0.5rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-y-3:hover{--transform-translate-y:-0.75rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-y-4:hover{--transform-translate-y:-1rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-y-5:hover{--transform-translate-y:-1.25rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-y-6:hover{--transform-translate-y:-1.5rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-y-8:hover{--transform-translate-y:-2rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-y-10:hover{--transform-translate-y:-2.5rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-y-12:hover{--transform-translate-y:-3rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-y-16:hover{--transform-translate-y:-4rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-y-20:hover{--transform-translate-y:-5rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-y-24:hover{--transform-translate-y:-6rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-y-32:hover{--transform-translate-y:-8rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-y-40:hover{--transform-translate-y:-10rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-y-48:hover{--transform-translate-y:-12rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-y-56:hover{--transform-translate-y:-14rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-y-64:hover{--transform-translate-y:-16rem!important}}@media (min-width:599px){.xs\\:hover\\:-translate-y-px:hover{--transform-translate-y:-1px!important}}@media (min-width:599px){.xs\\:hover\\:-translate-y-full:hover{--transform-translate-y:-100%!important}}@media (min-width:599px){.xs\\:hover\\:-translate-y-1\\/2:hover{--transform-translate-y:-50%!important}}@media (min-width:599px){.xs\\:hover\\:translate-y-1\\/2:hover{--transform-translate-y:50%!important}}@media (min-width:599px){.xs\\:hover\\:translate-y-full:hover{--transform-translate-y:100%!important}}@media (min-width:599px){.xs\\:focus\\:translate-x-0:focus{--transform-translate-x:0!important}}@media (min-width:599px){.xs\\:focus\\:translate-x-1:focus{--transform-translate-x:0.25rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-x-2:focus{--transform-translate-x:0.5rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-x-3:focus{--transform-translate-x:0.75rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-x-4:focus{--transform-translate-x:1rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-x-5:focus{--transform-translate-x:1.25rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-x-6:focus{--transform-translate-x:1.5rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-x-8:focus{--transform-translate-x:2rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-x-10:focus{--transform-translate-x:2.5rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-x-12:focus{--transform-translate-x:3rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-x-16:focus{--transform-translate-x:4rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-x-20:focus{--transform-translate-x:5rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-x-24:focus{--transform-translate-x:6rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-x-32:focus{--transform-translate-x:8rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-x-40:focus{--transform-translate-x:10rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-x-48:focus{--transform-translate-x:12rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-x-56:focus{--transform-translate-x:14rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-x-64:focus{--transform-translate-x:16rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-x-px:focus{--transform-translate-x:1px!important}}@media (min-width:599px){.xs\\:focus\\:-translate-x-1:focus{--transform-translate-x:-0.25rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-x-2:focus{--transform-translate-x:-0.5rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-x-3:focus{--transform-translate-x:-0.75rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-x-4:focus{--transform-translate-x:-1rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-x-5:focus{--transform-translate-x:-1.25rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-x-6:focus{--transform-translate-x:-1.5rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-x-8:focus{--transform-translate-x:-2rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-x-10:focus{--transform-translate-x:-2.5rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-x-12:focus{--transform-translate-x:-3rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-x-16:focus{--transform-translate-x:-4rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-x-20:focus{--transform-translate-x:-5rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-x-24:focus{--transform-translate-x:-6rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-x-32:focus{--transform-translate-x:-8rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-x-40:focus{--transform-translate-x:-10rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-x-48:focus{--transform-translate-x:-12rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-x-56:focus{--transform-translate-x:-14rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-x-64:focus{--transform-translate-x:-16rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-x-px:focus{--transform-translate-x:-1px!important}}@media (min-width:599px){.xs\\:focus\\:-translate-x-full:focus{--transform-translate-x:-100%!important}}@media (min-width:599px){.xs\\:focus\\:-translate-x-1\\/2:focus{--transform-translate-x:-50%!important}}@media (min-width:599px){.xs\\:focus\\:translate-x-1\\/2:focus{--transform-translate-x:50%!important}}@media (min-width:599px){.xs\\:focus\\:translate-x-full:focus{--transform-translate-x:100%!important}}@media (min-width:599px){.xs\\:focus\\:translate-y-0:focus{--transform-translate-y:0!important}}@media (min-width:599px){.xs\\:focus\\:translate-y-1:focus{--transform-translate-y:0.25rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-y-2:focus{--transform-translate-y:0.5rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-y-3:focus{--transform-translate-y:0.75rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-y-4:focus{--transform-translate-y:1rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-y-5:focus{--transform-translate-y:1.25rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-y-6:focus{--transform-translate-y:1.5rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-y-8:focus{--transform-translate-y:2rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-y-10:focus{--transform-translate-y:2.5rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-y-12:focus{--transform-translate-y:3rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-y-16:focus{--transform-translate-y:4rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-y-20:focus{--transform-translate-y:5rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-y-24:focus{--transform-translate-y:6rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-y-32:focus{--transform-translate-y:8rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-y-40:focus{--transform-translate-y:10rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-y-48:focus{--transform-translate-y:12rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-y-56:focus{--transform-translate-y:14rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-y-64:focus{--transform-translate-y:16rem!important}}@media (min-width:599px){.xs\\:focus\\:translate-y-px:focus{--transform-translate-y:1px!important}}@media (min-width:599px){.xs\\:focus\\:-translate-y-1:focus{--transform-translate-y:-0.25rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-y-2:focus{--transform-translate-y:-0.5rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-y-3:focus{--transform-translate-y:-0.75rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-y-4:focus{--transform-translate-y:-1rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-y-5:focus{--transform-translate-y:-1.25rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-y-6:focus{--transform-translate-y:-1.5rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-y-8:focus{--transform-translate-y:-2rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-y-10:focus{--transform-translate-y:-2.5rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-y-12:focus{--transform-translate-y:-3rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-y-16:focus{--transform-translate-y:-4rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-y-20:focus{--transform-translate-y:-5rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-y-24:focus{--transform-translate-y:-6rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-y-32:focus{--transform-translate-y:-8rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-y-40:focus{--transform-translate-y:-10rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-y-48:focus{--transform-translate-y:-12rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-y-56:focus{--transform-translate-y:-14rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-y-64:focus{--transform-translate-y:-16rem!important}}@media (min-width:599px){.xs\\:focus\\:-translate-y-px:focus{--transform-translate-y:-1px!important}}@media (min-width:599px){.xs\\:focus\\:-translate-y-full:focus{--transform-translate-y:-100%!important}}@media (min-width:599px){.xs\\:focus\\:-translate-y-1\\/2:focus{--transform-translate-y:-50%!important}}@media (min-width:599px){.xs\\:focus\\:translate-y-1\\/2:focus{--transform-translate-y:50%!important}}@media (min-width:599px){.xs\\:focus\\:translate-y-full:focus{--transform-translate-y:100%!important}}@media (min-width:599px){.xs\\:skew-x-0{--transform-skew-x:0!important}}@media (min-width:599px){.xs\\:skew-x-1{--transform-skew-x:1deg!important}}@media (min-width:599px){.xs\\:skew-x-2{--transform-skew-x:2deg!important}}@media (min-width:599px){.xs\\:skew-x-3{--transform-skew-x:3deg!important}}@media (min-width:599px){.xs\\:skew-x-6{--transform-skew-x:6deg!important}}@media (min-width:599px){.xs\\:skew-x-12{--transform-skew-x:12deg!important}}@media (min-width:599px){.xs\\:-skew-x-12{--transform-skew-x:-12deg!important}}@media (min-width:599px){.xs\\:-skew-x-6{--transform-skew-x:-6deg!important}}@media (min-width:599px){.xs\\:-skew-x-3{--transform-skew-x:-3deg!important}}@media (min-width:599px){.xs\\:-skew-x-2{--transform-skew-x:-2deg!important}}@media (min-width:599px){.xs\\:-skew-x-1{--transform-skew-x:-1deg!important}}@media (min-width:599px){.xs\\:skew-y-0{--transform-skew-y:0!important}}@media (min-width:599px){.xs\\:skew-y-1{--transform-skew-y:1deg!important}}@media (min-width:599px){.xs\\:skew-y-2{--transform-skew-y:2deg!important}}@media (min-width:599px){.xs\\:skew-y-3{--transform-skew-y:3deg!important}}@media (min-width:599px){.xs\\:skew-y-6{--transform-skew-y:6deg!important}}@media (min-width:599px){.xs\\:skew-y-12{--transform-skew-y:12deg!important}}@media (min-width:599px){.xs\\:-skew-y-12{--transform-skew-y:-12deg!important}}@media (min-width:599px){.xs\\:-skew-y-6{--transform-skew-y:-6deg!important}}@media (min-width:599px){.xs\\:-skew-y-3{--transform-skew-y:-3deg!important}}@media (min-width:599px){.xs\\:-skew-y-2{--transform-skew-y:-2deg!important}}@media (min-width:599px){.xs\\:-skew-y-1{--transform-skew-y:-1deg!important}}@media (min-width:599px){.xs\\:hover\\:skew-x-0:hover{--transform-skew-x:0!important}}@media (min-width:599px){.xs\\:hover\\:skew-x-1:hover{--transform-skew-x:1deg!important}}@media (min-width:599px){.xs\\:hover\\:skew-x-2:hover{--transform-skew-x:2deg!important}}@media (min-width:599px){.xs\\:hover\\:skew-x-3:hover{--transform-skew-x:3deg!important}}@media (min-width:599px){.xs\\:hover\\:skew-x-6:hover{--transform-skew-x:6deg!important}}@media (min-width:599px){.xs\\:hover\\:skew-x-12:hover{--transform-skew-x:12deg!important}}@media (min-width:599px){.xs\\:hover\\:-skew-x-12:hover{--transform-skew-x:-12deg!important}}@media (min-width:599px){.xs\\:hover\\:-skew-x-6:hover{--transform-skew-x:-6deg!important}}@media (min-width:599px){.xs\\:hover\\:-skew-x-3:hover{--transform-skew-x:-3deg!important}}@media (min-width:599px){.xs\\:hover\\:-skew-x-2:hover{--transform-skew-x:-2deg!important}}@media (min-width:599px){.xs\\:hover\\:-skew-x-1:hover{--transform-skew-x:-1deg!important}}@media (min-width:599px){.xs\\:hover\\:skew-y-0:hover{--transform-skew-y:0!important}}@media (min-width:599px){.xs\\:hover\\:skew-y-1:hover{--transform-skew-y:1deg!important}}@media (min-width:599px){.xs\\:hover\\:skew-y-2:hover{--transform-skew-y:2deg!important}}@media (min-width:599px){.xs\\:hover\\:skew-y-3:hover{--transform-skew-y:3deg!important}}@media (min-width:599px){.xs\\:hover\\:skew-y-6:hover{--transform-skew-y:6deg!important}}@media (min-width:599px){.xs\\:hover\\:skew-y-12:hover{--transform-skew-y:12deg!important}}@media (min-width:599px){.xs\\:hover\\:-skew-y-12:hover{--transform-skew-y:-12deg!important}}@media (min-width:599px){.xs\\:hover\\:-skew-y-6:hover{--transform-skew-y:-6deg!important}}@media (min-width:599px){.xs\\:hover\\:-skew-y-3:hover{--transform-skew-y:-3deg!important}}@media (min-width:599px){.xs\\:hover\\:-skew-y-2:hover{--transform-skew-y:-2deg!important}}@media (min-width:599px){.xs\\:hover\\:-skew-y-1:hover{--transform-skew-y:-1deg!important}}@media (min-width:599px){.xs\\:focus\\:skew-x-0:focus{--transform-skew-x:0!important}}@media (min-width:599px){.xs\\:focus\\:skew-x-1:focus{--transform-skew-x:1deg!important}}@media (min-width:599px){.xs\\:focus\\:skew-x-2:focus{--transform-skew-x:2deg!important}}@media (min-width:599px){.xs\\:focus\\:skew-x-3:focus{--transform-skew-x:3deg!important}}@media (min-width:599px){.xs\\:focus\\:skew-x-6:focus{--transform-skew-x:6deg!important}}@media (min-width:599px){.xs\\:focus\\:skew-x-12:focus{--transform-skew-x:12deg!important}}@media (min-width:599px){.xs\\:focus\\:-skew-x-12:focus{--transform-skew-x:-12deg!important}}@media (min-width:599px){.xs\\:focus\\:-skew-x-6:focus{--transform-skew-x:-6deg!important}}@media (min-width:599px){.xs\\:focus\\:-skew-x-3:focus{--transform-skew-x:-3deg!important}}@media (min-width:599px){.xs\\:focus\\:-skew-x-2:focus{--transform-skew-x:-2deg!important}}@media (min-width:599px){.xs\\:focus\\:-skew-x-1:focus{--transform-skew-x:-1deg!important}}@media (min-width:599px){.xs\\:focus\\:skew-y-0:focus{--transform-skew-y:0!important}}@media (min-width:599px){.xs\\:focus\\:skew-y-1:focus{--transform-skew-y:1deg!important}}@media (min-width:599px){.xs\\:focus\\:skew-y-2:focus{--transform-skew-y:2deg!important}}@media (min-width:599px){.xs\\:focus\\:skew-y-3:focus{--transform-skew-y:3deg!important}}@media (min-width:599px){.xs\\:focus\\:skew-y-6:focus{--transform-skew-y:6deg!important}}@media (min-width:599px){.xs\\:focus\\:skew-y-12:focus{--transform-skew-y:12deg!important}}@media (min-width:599px){.xs\\:focus\\:-skew-y-12:focus{--transform-skew-y:-12deg!important}}@media (min-width:599px){.xs\\:focus\\:-skew-y-6:focus{--transform-skew-y:-6deg!important}}@media (min-width:599px){.xs\\:focus\\:-skew-y-3:focus{--transform-skew-y:-3deg!important}}@media (min-width:599px){.xs\\:focus\\:-skew-y-2:focus{--transform-skew-y:-2deg!important}}@media (min-width:599px){.xs\\:focus\\:-skew-y-1:focus{--transform-skew-y:-1deg!important}}@media (min-width:599px){.xs\\:transition-none{transition-property:none!important}}@media (min-width:599px){.xs\\:transition-all{transition-property:all!important}}@media (min-width:599px){.xs\\:transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform!important}}@media (min-width:599px){.xs\\:transition-colors{transition-property:background-color,border-color,color,fill,stroke!important}}@media (min-width:599px){.xs\\:transition-opacity{transition-property:opacity!important}}@media (min-width:599px){.xs\\:transition-shadow{transition-property:box-shadow!important}}@media (min-width:599px){.xs\\:transition-transform{transition-property:transform!important}}@media (min-width:599px){.xs\\:ease-linear{transition-timing-function:linear!important}}@media (min-width:599px){.xs\\:ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)!important}}@media (min-width:599px){.xs\\:ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)!important}}@media (min-width:599px){.xs\\:ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)!important}}@media (min-width:599px){.xs\\:duration-75{transition-duration:75ms!important}}@media (min-width:599px){.xs\\:duration-100{transition-duration:.1s!important}}@media (min-width:599px){.xs\\:duration-150{transition-duration:.15s!important}}@media (min-width:599px){.xs\\:duration-200{transition-duration:.2s!important}}@media (min-width:599px){.xs\\:duration-300{transition-duration:.3s!important}}@media (min-width:599px){.xs\\:duration-500{transition-duration:.5s!important}}@media (min-width:599px){.xs\\:duration-700{transition-duration:.7s!important}}@media (min-width:599px){.xs\\:duration-1000{transition-duration:1s!important}}@media (min-width:599px){.xs\\:delay-75{transition-delay:75ms!important}}@media (min-width:599px){.xs\\:delay-100{transition-delay:.1s!important}}@media (min-width:599px){.xs\\:delay-150{transition-delay:.15s!important}}@media (min-width:599px){.xs\\:delay-200{transition-delay:.2s!important}}@media (min-width:599px){.xs\\:delay-300{transition-delay:.3s!important}}@media (min-width:599px){.xs\\:delay-500{transition-delay:.5s!important}}@media (min-width:599px){.xs\\:delay-700{transition-delay:.7s!important}}@media (min-width:599px){.xs\\:delay-1000{transition-delay:1s!important}}@media (min-width:599px){.xs\\:animate-none{animation:none!important}}@media (min-width:599px){.xs\\:animate-spin{animation:spin 1s linear infinite!important}}@media (min-width:599px){.xs\\:animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite!important}}@media (min-width:599px){.xs\\:animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite!important}}@media (min-width:599px){.xs\\:animate-bounce{animation:bounce 1s infinite!important}}@media (min-width:599px){.xs\\:truncate-none{overflow:unset!important;text-overflow:unset!important;white-space:unset!important}}@media (min-width:600px){.sm\\:container{width:100%;margin-right:auto;margin-left:auto}}@media (min-width:600px) and (min-width:599px){.sm\\:container{max-width:599px}}@media (min-width:600px) and (min-width:600px){.sm\\:container{max-width:600px}}@media (min-width:600px) and (min-width:960px){.sm\\:container{max-width:960px}}@media (min-width:600px) and (min-width:1280px){.sm\\:container{max-width:1280px}}@media (min-width:600px) and (min-width:1920px){.sm\\:container{max-width:1920px}}@media (min-width:600px){.sm\\:space-y-0>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(0px * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(0px * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:space-x-0>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(0px * var(--space-x-reverse))!important;margin-left:calc(0px * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:space-y-1>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(.25rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:space-x-1>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(.25rem * var(--space-x-reverse))!important;margin-left:calc(.25rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:space-y-2>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(.5rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:space-x-2>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(.5rem * var(--space-x-reverse))!important;margin-left:calc(.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:space-y-3>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(.75rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(.75rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:space-x-3>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(.75rem * var(--space-x-reverse))!important;margin-left:calc(.75rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:space-y-4>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:space-x-4>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1rem * var(--space-x-reverse))!important;margin-left:calc(1rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:space-y-5>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1.25rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:space-x-5>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1.25rem * var(--space-x-reverse))!important;margin-left:calc(1.25rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:space-y-6>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1.5rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:space-x-6>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1.5rem * var(--space-x-reverse))!important;margin-left:calc(1.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:space-y-8>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(2rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(2rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:space-x-8>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(2rem * var(--space-x-reverse))!important;margin-left:calc(2rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:space-y-10>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(2.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(2.5rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:space-x-10>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(2.5rem * var(--space-x-reverse))!important;margin-left:calc(2.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:space-y-12>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(3rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(3rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:space-x-12>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(3rem * var(--space-x-reverse))!important;margin-left:calc(3rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:space-y-16>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(4rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(4rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:space-x-16>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(4rem * var(--space-x-reverse))!important;margin-left:calc(4rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:space-y-20>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(5rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:space-x-20>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(5rem * var(--space-x-reverse))!important;margin-left:calc(5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:space-y-24>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(6rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(6rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:space-x-24>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(6rem * var(--space-x-reverse))!important;margin-left:calc(6rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:space-y-32>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(8rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(8rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:space-x-32>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(8rem * var(--space-x-reverse))!important;margin-left:calc(8rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:space-y-40>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(10rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(10rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:space-x-40>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(10rem * var(--space-x-reverse))!important;margin-left:calc(10rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:space-y-48>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(12rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(12rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:space-x-48>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(12rem * var(--space-x-reverse))!important;margin-left:calc(12rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:space-y-56>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(14rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(14rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:space-x-56>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(14rem * var(--space-x-reverse))!important;margin-left:calc(14rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:space-y-64>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(16rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(16rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:space-x-64>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(16rem * var(--space-x-reverse))!important;margin-left:calc(16rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:space-y-px>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1px * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1px * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:space-x-px>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1px * var(--space-x-reverse))!important;margin-left:calc(1px * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:-space-y-1>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-.25rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:-space-x-1>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-.25rem * var(--space-x-reverse))!important;margin-left:calc(-.25rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:-space-y-2>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-.5rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:-space-x-2>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-.5rem * var(--space-x-reverse))!important;margin-left:calc(-.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:-space-y-3>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-.75rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-.75rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:-space-x-3>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-.75rem * var(--space-x-reverse))!important;margin-left:calc(-.75rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:-space-y-4>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:-space-x-4>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1rem * var(--space-x-reverse))!important;margin-left:calc(-1rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:-space-y-5>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1.25rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:-space-x-5>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1.25rem * var(--space-x-reverse))!important;margin-left:calc(-1.25rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:-space-y-6>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1.5rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:-space-x-6>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1.5rem * var(--space-x-reverse))!important;margin-left:calc(-1.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:-space-y-8>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-2rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-2rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:-space-x-8>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-2rem * var(--space-x-reverse))!important;margin-left:calc(-2rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:-space-y-10>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-2.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-2.5rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:-space-x-10>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-2.5rem * var(--space-x-reverse))!important;margin-left:calc(-2.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:-space-y-12>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-3rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-3rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:-space-x-12>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-3rem * var(--space-x-reverse))!important;margin-left:calc(-3rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:-space-y-16>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-4rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-4rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:-space-x-16>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-4rem * var(--space-x-reverse))!important;margin-left:calc(-4rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:-space-y-20>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-5rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:-space-x-20>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-5rem * var(--space-x-reverse))!important;margin-left:calc(-5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:-space-y-24>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-6rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-6rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:-space-x-24>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-6rem * var(--space-x-reverse))!important;margin-left:calc(-6rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:-space-y-32>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-8rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-8rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:-space-x-32>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-8rem * var(--space-x-reverse))!important;margin-left:calc(-8rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:-space-y-40>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-10rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-10rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:-space-x-40>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-10rem * var(--space-x-reverse))!important;margin-left:calc(-10rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:-space-y-48>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-12rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-12rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:-space-x-48>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-12rem * var(--space-x-reverse))!important;margin-left:calc(-12rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:-space-y-56>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-14rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-14rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:-space-x-56>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-14rem * var(--space-x-reverse))!important;margin-left:calc(-14rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:-space-y-64>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-16rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-16rem * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:-space-x-64>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-16rem * var(--space-x-reverse))!important;margin-left:calc(-16rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:-space-y-px>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1px * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1px * var(--space-y-reverse))!important}}@media (min-width:600px){.sm\\:-space-x-px>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1px * var(--space-x-reverse))!important;margin-left:calc(-1px * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:600px){.sm\\:space-y-reverse>:not(template)~:not(template){--space-y-reverse:1!important}}@media (min-width:600px){.sm\\:space-x-reverse>:not(template)~:not(template){--space-x-reverse:1!important}}@media (min-width:600px){.sm\\:divide-y-0>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(0px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(0px * var(--divide-y-reverse))!important}}@media (min-width:600px){.sm\\:divide-x-0>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(0px * var(--divide-x-reverse))!important;border-left-width:calc(0px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:600px){.sm\\:divide-y-2>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(2px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(2px * var(--divide-y-reverse))!important}}@media (min-width:600px){.sm\\:divide-x-2>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(2px * var(--divide-x-reverse))!important;border-left-width:calc(2px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:600px){.sm\\:divide-y-4>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(4px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(4px * var(--divide-y-reverse))!important}}@media (min-width:600px){.sm\\:divide-x-4>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(4px * var(--divide-x-reverse))!important;border-left-width:calc(4px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:600px){.sm\\:divide-y-8>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(8px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(8px * var(--divide-y-reverse))!important}}@media (min-width:600px){.sm\\:divide-x-8>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(8px * var(--divide-x-reverse))!important;border-left-width:calc(8px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:600px){.sm\\:divide-y>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(1px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(1px * var(--divide-y-reverse))!important}}@media (min-width:600px){.sm\\:divide-x>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(1px * var(--divide-x-reverse))!important;border-left-width:calc(1px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:600px){.sm\\:divide-y-reverse>:not(template)~:not(template){--divide-y-reverse:1!important}}@media (min-width:600px){.sm\\:divide-x-reverse>:not(template)~:not(template){--divide-x-reverse:1!important}}@media (min-width:600px){.sm\\:divide-transparent>:not(template)~:not(template){border-color:transparent!important}}@media (min-width:600px){.sm\\:divide-current>:not(template)~:not(template){border-color:currentColor!important}}@media (min-width:600px){.sm\\:divide-black>:not(template)~:not(template){--divide-opacity:1!important;border-color:#000!important;border-color:rgba(0,0,0,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-white>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fff!important;border-color:rgba(255,255,255,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-gray-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f7fafc!important;border-color:rgba(247,250,252,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-gray-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#edf2f7!important;border-color:rgba(237,242,247,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-gray-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e2e8f0!important;border-color:rgba(226,232,240,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-gray-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#cbd5e0!important;border-color:rgba(203,213,224,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-gray-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#a0aec0!important;border-color:rgba(160,174,192,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-gray-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#718096!important;border-color:rgba(113,128,150,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-gray-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4a5568!important;border-color:rgba(74,85,104,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-gray-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2d3748!important;border-color:rgba(45,55,72,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-gray-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#1a202c!important;border-color:rgba(26,32,44,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-red-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fff5f5!important;border-color:rgba(255,245,245,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-red-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fed7d7!important;border-color:rgba(254,215,215,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-red-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#feb2b2!important;border-color:rgba(254,178,178,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-red-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fc8181!important;border-color:rgba(252,129,129,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-red-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f56565!important;border-color:rgba(245,101,101,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-red-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e53e3e!important;border-color:rgba(229,62,62,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-red-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c53030!important;border-color:rgba(197,48,48,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-red-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9b2c2c!important;border-color:rgba(155,44,44,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-red-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#742a2a!important;border-color:rgba(116,42,42,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-orange-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fffaf0!important;border-color:rgba(255,250,240,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-orange-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#feebc8!important;border-color:rgba(254,235,200,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-orange-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fbd38d!important;border-color:rgba(251,211,141,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-orange-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f6ad55!important;border-color:rgba(246,173,85,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-orange-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ed8936!important;border-color:rgba(237,137,54,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-orange-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#dd6b20!important;border-color:rgba(221,107,32,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-orange-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c05621!important;border-color:rgba(192,86,33,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-orange-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9c4221!important;border-color:rgba(156,66,33,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-orange-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#7b341e!important;border-color:rgba(123,52,30,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-yellow-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:ivory!important;border-color:rgba(255,255,240,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-yellow-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fefcbf!important;border-color:rgba(254,252,191,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-yellow-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#faf089!important;border-color:rgba(250,240,137,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-yellow-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f6e05e!important;border-color:rgba(246,224,94,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-yellow-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ecc94b!important;border-color:rgba(236,201,75,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-yellow-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#d69e2e!important;border-color:rgba(214,158,46,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-yellow-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b7791f!important;border-color:rgba(183,121,31,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-yellow-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#975a16!important;border-color:rgba(151,90,22,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-yellow-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#744210!important;border-color:rgba(116,66,16,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-green-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f0fff4!important;border-color:rgba(240,255,244,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-green-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c6f6d5!important;border-color:rgba(198,246,213,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-green-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9ae6b4!important;border-color:rgba(154,230,180,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-green-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#68d391!important;border-color:rgba(104,211,145,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-green-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#48bb78!important;border-color:rgba(72,187,120,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-green-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#38a169!important;border-color:rgba(56,161,105,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-green-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2f855a!important;border-color:rgba(47,133,90,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-green-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#276749!important;border-color:rgba(39,103,73,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-green-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#22543d!important;border-color:rgba(34,84,61,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-teal-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e6fffa!important;border-color:rgba(230,255,250,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-teal-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b2f5ea!important;border-color:rgba(178,245,234,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-teal-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#81e6d9!important;border-color:rgba(129,230,217,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-teal-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4fd1c5!important;border-color:rgba(79,209,197,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-teal-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#38b2ac!important;border-color:rgba(56,178,172,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-teal-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#319795!important;border-color:rgba(49,151,149,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-teal-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2c7a7b!important;border-color:rgba(44,122,123,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-teal-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#285e61!important;border-color:rgba(40,94,97,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-teal-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#234e52!important;border-color:rgba(35,78,82,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-blue-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ebf8ff!important;border-color:rgba(235,248,255,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-blue-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#bee3f8!important;border-color:rgba(190,227,248,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-blue-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#90cdf4!important;border-color:rgba(144,205,244,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-blue-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#63b3ed!important;border-color:rgba(99,179,237,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-blue-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4299e1!important;border-color:rgba(66,153,225,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-blue-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#3182ce!important;border-color:rgba(49,130,206,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-blue-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2b6cb0!important;border-color:rgba(43,108,176,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-blue-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2c5282!important;border-color:rgba(44,82,130,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-blue-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2a4365!important;border-color:rgba(42,67,101,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-indigo-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ebf4ff!important;border-color:rgba(235,244,255,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-indigo-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c3dafe!important;border-color:rgba(195,218,254,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-indigo-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#a3bffa!important;border-color:rgba(163,191,250,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-indigo-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#7f9cf5!important;border-color:rgba(127,156,245,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-indigo-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#667eea!important;border-color:rgba(102,126,234,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-indigo-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#5a67d8!important;border-color:rgba(90,103,216,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-indigo-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4c51bf!important;border-color:rgba(76,81,191,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-indigo-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#434190!important;border-color:rgba(67,65,144,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-indigo-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#3c366b!important;border-color:rgba(60,54,107,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-purple-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#faf5ff!important;border-color:rgba(250,245,255,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-purple-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e9d8fd!important;border-color:rgba(233,216,253,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-purple-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#d6bcfa!important;border-color:rgba(214,188,250,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-purple-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b794f4!important;border-color:rgba(183,148,244,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-purple-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9f7aea!important;border-color:rgba(159,122,234,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-purple-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#805ad5!important;border-color:rgba(128,90,213,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-purple-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#6b46c1!important;border-color:rgba(107,70,193,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-purple-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#553c9a!important;border-color:rgba(85,60,154,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-purple-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#44337a!important;border-color:rgba(68,51,122,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-pink-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fff5f7!important;border-color:rgba(255,245,247,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-pink-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fed7e2!important;border-color:rgba(254,215,226,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-pink-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fbb6ce!important;border-color:rgba(251,182,206,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-pink-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f687b3!important;border-color:rgba(246,135,179,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-pink-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ed64a6!important;border-color:rgba(237,100,166,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-pink-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#d53f8c!important;border-color:rgba(213,63,140,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-pink-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b83280!important;border-color:rgba(184,50,128,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-pink-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#97266d!important;border-color:rgba(151,38,109,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-pink-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#702459!important;border-color:rgba(112,36,89,var(--divide-opacity))!important}}@media (min-width:600px){.sm\\:divide-solid>:not(template)~:not(template){border-style:solid!important}}@media (min-width:600px){.sm\\:divide-dashed>:not(template)~:not(template){border-style:dashed!important}}@media (min-width:600px){.sm\\:divide-dotted>:not(template)~:not(template){border-style:dotted!important}}@media (min-width:600px){.sm\\:divide-double>:not(template)~:not(template){border-style:double!important}}@media (min-width:600px){.sm\\:divide-none>:not(template)~:not(template){border-style:none!important}}@media (min-width:600px){.sm\\:divide-opacity-0>:not(template)~:not(template){--divide-opacity:0!important}}@media (min-width:600px){.sm\\:divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25!important}}@media (min-width:600px){.sm\\:divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5!important}}@media (min-width:600px){.sm\\:divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75!important}}@media (min-width:600px){.sm\\:divide-opacity-100>:not(template)~:not(template){--divide-opacity:1!important}}@media (min-width:600px){.sm\\:sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}}@media (min-width:600px){.sm\\:not-sr-only{position:static!important;width:auto!important;height:auto!important;padding:0!important;margin:0!important;overflow:visible!important;clip:auto!important;white-space:normal!important}}@media (min-width:600px){.sm\\:focus\\:sr-only:focus{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}}@media (min-width:600px){.sm\\:focus\\:not-sr-only:focus{position:static!important;width:auto!important;height:auto!important;padding:0!important;margin:0!important;overflow:visible!important;clip:auto!important;white-space:normal!important}}@media (min-width:600px){.sm\\:appearance-none{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important}}@media (min-width:600px){.sm\\:bg-fixed{background-attachment:fixed!important}}@media (min-width:600px){.sm\\:bg-local{background-attachment:local!important}}@media (min-width:600px){.sm\\:bg-scroll{background-attachment:scroll!important}}@media (min-width:600px){.sm\\:bg-clip-border{background-clip:initial!important}}@media (min-width:600px){.sm\\:bg-clip-padding{background-clip:padding-box!important}}@media (min-width:600px){.sm\\:bg-clip-content{background-clip:content-box!important}}@media (min-width:600px){.sm\\:bg-clip-text{-webkit-background-clip:text!important;background-clip:text!important}}@media (min-width:600px){.sm\\:bg-transparent{background-color:initial!important}}@media (min-width:600px){.sm\\:bg-current{background-color:currentColor!important}}@media (min-width:600px){.sm\\:bg-black{--bg-opacity:1!important;background-color:#000!important;background-color:rgba(0,0,0,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-white{--bg-opacity:1!important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-gray-100{--bg-opacity:1!important;background-color:#f7fafc!important;background-color:rgba(247,250,252,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-gray-200{--bg-opacity:1!important;background-color:#edf2f7!important;background-color:rgba(237,242,247,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-gray-300{--bg-opacity:1!important;background-color:#e2e8f0!important;background-color:rgba(226,232,240,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-gray-400{--bg-opacity:1!important;background-color:#cbd5e0!important;background-color:rgba(203,213,224,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-gray-500{--bg-opacity:1!important;background-color:#a0aec0!important;background-color:rgba(160,174,192,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-gray-600{--bg-opacity:1!important;background-color:#718096!important;background-color:rgba(113,128,150,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-gray-700{--bg-opacity:1!important;background-color:#4a5568!important;background-color:rgba(74,85,104,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-gray-800{--bg-opacity:1!important;background-color:#2d3748!important;background-color:rgba(45,55,72,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-gray-900{--bg-opacity:1!important;background-color:#1a202c!important;background-color:rgba(26,32,44,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-red-100{--bg-opacity:1!important;background-color:#fff5f5!important;background-color:rgba(255,245,245,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-red-200{--bg-opacity:1!important;background-color:#fed7d7!important;background-color:rgba(254,215,215,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-red-300{--bg-opacity:1!important;background-color:#feb2b2!important;background-color:rgba(254,178,178,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-red-400{--bg-opacity:1!important;background-color:#fc8181!important;background-color:rgba(252,129,129,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-red-500{--bg-opacity:1!important;background-color:#f56565!important;background-color:rgba(245,101,101,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-red-600{--bg-opacity:1!important;background-color:#e53e3e!important;background-color:rgba(229,62,62,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-red-700{--bg-opacity:1!important;background-color:#c53030!important;background-color:rgba(197,48,48,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-red-800{--bg-opacity:1!important;background-color:#9b2c2c!important;background-color:rgba(155,44,44,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-red-900{--bg-opacity:1!important;background-color:#742a2a!important;background-color:rgba(116,42,42,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-orange-100{--bg-opacity:1!important;background-color:#fffaf0!important;background-color:rgba(255,250,240,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-orange-200{--bg-opacity:1!important;background-color:#feebc8!important;background-color:rgba(254,235,200,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-orange-300{--bg-opacity:1!important;background-color:#fbd38d!important;background-color:rgba(251,211,141,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-orange-400{--bg-opacity:1!important;background-color:#f6ad55!important;background-color:rgba(246,173,85,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-orange-500{--bg-opacity:1!important;background-color:#ed8936!important;background-color:rgba(237,137,54,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-orange-600{--bg-opacity:1!important;background-color:#dd6b20!important;background-color:rgba(221,107,32,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-orange-700{--bg-opacity:1!important;background-color:#c05621!important;background-color:rgba(192,86,33,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-orange-800{--bg-opacity:1!important;background-color:#9c4221!important;background-color:rgba(156,66,33,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-orange-900{--bg-opacity:1!important;background-color:#7b341e!important;background-color:rgba(123,52,30,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-yellow-100{--bg-opacity:1!important;background-color:ivory!important;background-color:rgba(255,255,240,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-yellow-200{--bg-opacity:1!important;background-color:#fefcbf!important;background-color:rgba(254,252,191,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-yellow-300{--bg-opacity:1!important;background-color:#faf089!important;background-color:rgba(250,240,137,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-yellow-400{--bg-opacity:1!important;background-color:#f6e05e!important;background-color:rgba(246,224,94,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-yellow-500{--bg-opacity:1!important;background-color:#ecc94b!important;background-color:rgba(236,201,75,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-yellow-600{--bg-opacity:1!important;background-color:#d69e2e!important;background-color:rgba(214,158,46,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-yellow-700{--bg-opacity:1!important;background-color:#b7791f!important;background-color:rgba(183,121,31,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-yellow-800{--bg-opacity:1!important;background-color:#975a16!important;background-color:rgba(151,90,22,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-yellow-900{--bg-opacity:1!important;background-color:#744210!important;background-color:rgba(116,66,16,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-green-100{--bg-opacity:1!important;background-color:#f0fff4!important;background-color:rgba(240,255,244,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-green-200{--bg-opacity:1!important;background-color:#c6f6d5!important;background-color:rgba(198,246,213,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-green-300{--bg-opacity:1!important;background-color:#9ae6b4!important;background-color:rgba(154,230,180,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-green-400{--bg-opacity:1!important;background-color:#68d391!important;background-color:rgba(104,211,145,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-green-500{--bg-opacity:1!important;background-color:#48bb78!important;background-color:rgba(72,187,120,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-green-600{--bg-opacity:1!important;background-color:#38a169!important;background-color:rgba(56,161,105,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-green-700{--bg-opacity:1!important;background-color:#2f855a!important;background-color:rgba(47,133,90,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-green-800{--bg-opacity:1!important;background-color:#276749!important;background-color:rgba(39,103,73,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-green-900{--bg-opacity:1!important;background-color:#22543d!important;background-color:rgba(34,84,61,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-teal-100{--bg-opacity:1!important;background-color:#e6fffa!important;background-color:rgba(230,255,250,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-teal-200{--bg-opacity:1!important;background-color:#b2f5ea!important;background-color:rgba(178,245,234,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-teal-300{--bg-opacity:1!important;background-color:#81e6d9!important;background-color:rgba(129,230,217,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-teal-400{--bg-opacity:1!important;background-color:#4fd1c5!important;background-color:rgba(79,209,197,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-teal-500{--bg-opacity:1!important;background-color:#38b2ac!important;background-color:rgba(56,178,172,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-teal-600{--bg-opacity:1!important;background-color:#319795!important;background-color:rgba(49,151,149,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-teal-700{--bg-opacity:1!important;background-color:#2c7a7b!important;background-color:rgba(44,122,123,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-teal-800{--bg-opacity:1!important;background-color:#285e61!important;background-color:rgba(40,94,97,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-teal-900{--bg-opacity:1!important;background-color:#234e52!important;background-color:rgba(35,78,82,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-blue-100{--bg-opacity:1!important;background-color:#ebf8ff!important;background-color:rgba(235,248,255,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-blue-200{--bg-opacity:1!important;background-color:#bee3f8!important;background-color:rgba(190,227,248,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-blue-300{--bg-opacity:1!important;background-color:#90cdf4!important;background-color:rgba(144,205,244,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-blue-400{--bg-opacity:1!important;background-color:#63b3ed!important;background-color:rgba(99,179,237,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-blue-500{--bg-opacity:1!important;background-color:#4299e1!important;background-color:rgba(66,153,225,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-blue-600{--bg-opacity:1!important;background-color:#3182ce!important;background-color:rgba(49,130,206,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-blue-700{--bg-opacity:1!important;background-color:#2b6cb0!important;background-color:rgba(43,108,176,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-blue-800{--bg-opacity:1!important;background-color:#2c5282!important;background-color:rgba(44,82,130,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-blue-900{--bg-opacity:1!important;background-color:#2a4365!important;background-color:rgba(42,67,101,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-indigo-100{--bg-opacity:1!important;background-color:#ebf4ff!important;background-color:rgba(235,244,255,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-indigo-200{--bg-opacity:1!important;background-color:#c3dafe!important;background-color:rgba(195,218,254,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-indigo-300{--bg-opacity:1!important;background-color:#a3bffa!important;background-color:rgba(163,191,250,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-indigo-400{--bg-opacity:1!important;background-color:#7f9cf5!important;background-color:rgba(127,156,245,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-indigo-500{--bg-opacity:1!important;background-color:#667eea!important;background-color:rgba(102,126,234,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-indigo-600{--bg-opacity:1!important;background-color:#5a67d8!important;background-color:rgba(90,103,216,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-indigo-700{--bg-opacity:1!important;background-color:#4c51bf!important;background-color:rgba(76,81,191,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-indigo-800{--bg-opacity:1!important;background-color:#434190!important;background-color:rgba(67,65,144,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-indigo-900{--bg-opacity:1!important;background-color:#3c366b!important;background-color:rgba(60,54,107,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-purple-100{--bg-opacity:1!important;background-color:#faf5ff!important;background-color:rgba(250,245,255,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-purple-200{--bg-opacity:1!important;background-color:#e9d8fd!important;background-color:rgba(233,216,253,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-purple-300{--bg-opacity:1!important;background-color:#d6bcfa!important;background-color:rgba(214,188,250,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-purple-400{--bg-opacity:1!important;background-color:#b794f4!important;background-color:rgba(183,148,244,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-purple-500{--bg-opacity:1!important;background-color:#9f7aea!important;background-color:rgba(159,122,234,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-purple-600{--bg-opacity:1!important;background-color:#805ad5!important;background-color:rgba(128,90,213,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-purple-700{--bg-opacity:1!important;background-color:#6b46c1!important;background-color:rgba(107,70,193,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-purple-800{--bg-opacity:1!important;background-color:#553c9a!important;background-color:rgba(85,60,154,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-purple-900{--bg-opacity:1!important;background-color:#44337a!important;background-color:rgba(68,51,122,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-pink-100{--bg-opacity:1!important;background-color:#fff5f7!important;background-color:rgba(255,245,247,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-pink-200{--bg-opacity:1!important;background-color:#fed7e2!important;background-color:rgba(254,215,226,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-pink-300{--bg-opacity:1!important;background-color:#fbb6ce!important;background-color:rgba(251,182,206,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-pink-400{--bg-opacity:1!important;background-color:#f687b3!important;background-color:rgba(246,135,179,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-pink-500{--bg-opacity:1!important;background-color:#ed64a6!important;background-color:rgba(237,100,166,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-pink-600{--bg-opacity:1!important;background-color:#d53f8c!important;background-color:rgba(213,63,140,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-pink-700{--bg-opacity:1!important;background-color:#b83280!important;background-color:rgba(184,50,128,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-pink-800{--bg-opacity:1!important;background-color:#97266d!important;background-color:rgba(151,38,109,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-pink-900{--bg-opacity:1!important;background-color:#702459!important;background-color:rgba(112,36,89,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-transparent:hover{background-color:initial!important}}@media (min-width:600px){.sm\\:hover\\:bg-current:hover{background-color:currentColor!important}}@media (min-width:600px){.sm\\:hover\\:bg-black:hover{--bg-opacity:1!important;background-color:#000!important;background-color:rgba(0,0,0,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-white:hover{--bg-opacity:1!important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-gray-100:hover{--bg-opacity:1!important;background-color:#f7fafc!important;background-color:rgba(247,250,252,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-gray-200:hover{--bg-opacity:1!important;background-color:#edf2f7!important;background-color:rgba(237,242,247,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-gray-300:hover{--bg-opacity:1!important;background-color:#e2e8f0!important;background-color:rgba(226,232,240,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-gray-400:hover{--bg-opacity:1!important;background-color:#cbd5e0!important;background-color:rgba(203,213,224,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-gray-500:hover{--bg-opacity:1!important;background-color:#a0aec0!important;background-color:rgba(160,174,192,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-gray-600:hover{--bg-opacity:1!important;background-color:#718096!important;background-color:rgba(113,128,150,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-gray-700:hover{--bg-opacity:1!important;background-color:#4a5568!important;background-color:rgba(74,85,104,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-gray-800:hover{--bg-opacity:1!important;background-color:#2d3748!important;background-color:rgba(45,55,72,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-gray-900:hover{--bg-opacity:1!important;background-color:#1a202c!important;background-color:rgba(26,32,44,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-red-100:hover{--bg-opacity:1!important;background-color:#fff5f5!important;background-color:rgba(255,245,245,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-red-200:hover{--bg-opacity:1!important;background-color:#fed7d7!important;background-color:rgba(254,215,215,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-red-300:hover{--bg-opacity:1!important;background-color:#feb2b2!important;background-color:rgba(254,178,178,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-red-400:hover{--bg-opacity:1!important;background-color:#fc8181!important;background-color:rgba(252,129,129,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-red-500:hover{--bg-opacity:1!important;background-color:#f56565!important;background-color:rgba(245,101,101,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-red-600:hover{--bg-opacity:1!important;background-color:#e53e3e!important;background-color:rgba(229,62,62,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-red-700:hover{--bg-opacity:1!important;background-color:#c53030!important;background-color:rgba(197,48,48,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-red-800:hover{--bg-opacity:1!important;background-color:#9b2c2c!important;background-color:rgba(155,44,44,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-red-900:hover{--bg-opacity:1!important;background-color:#742a2a!important;background-color:rgba(116,42,42,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-orange-100:hover{--bg-opacity:1!important;background-color:#fffaf0!important;background-color:rgba(255,250,240,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-orange-200:hover{--bg-opacity:1!important;background-color:#feebc8!important;background-color:rgba(254,235,200,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-orange-300:hover{--bg-opacity:1!important;background-color:#fbd38d!important;background-color:rgba(251,211,141,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-orange-400:hover{--bg-opacity:1!important;background-color:#f6ad55!important;background-color:rgba(246,173,85,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-orange-500:hover{--bg-opacity:1!important;background-color:#ed8936!important;background-color:rgba(237,137,54,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-orange-600:hover{--bg-opacity:1!important;background-color:#dd6b20!important;background-color:rgba(221,107,32,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-orange-700:hover{--bg-opacity:1!important;background-color:#c05621!important;background-color:rgba(192,86,33,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-orange-800:hover{--bg-opacity:1!important;background-color:#9c4221!important;background-color:rgba(156,66,33,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-orange-900:hover{--bg-opacity:1!important;background-color:#7b341e!important;background-color:rgba(123,52,30,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-yellow-100:hover{--bg-opacity:1!important;background-color:ivory!important;background-color:rgba(255,255,240,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-yellow-200:hover{--bg-opacity:1!important;background-color:#fefcbf!important;background-color:rgba(254,252,191,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-yellow-300:hover{--bg-opacity:1!important;background-color:#faf089!important;background-color:rgba(250,240,137,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-yellow-400:hover{--bg-opacity:1!important;background-color:#f6e05e!important;background-color:rgba(246,224,94,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-yellow-500:hover{--bg-opacity:1!important;background-color:#ecc94b!important;background-color:rgba(236,201,75,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-yellow-600:hover{--bg-opacity:1!important;background-color:#d69e2e!important;background-color:rgba(214,158,46,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-yellow-700:hover{--bg-opacity:1!important;background-color:#b7791f!important;background-color:rgba(183,121,31,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-yellow-800:hover{--bg-opacity:1!important;background-color:#975a16!important;background-color:rgba(151,90,22,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-yellow-900:hover{--bg-opacity:1!important;background-color:#744210!important;background-color:rgba(116,66,16,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-green-100:hover{--bg-opacity:1!important;background-color:#f0fff4!important;background-color:rgba(240,255,244,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-green-200:hover{--bg-opacity:1!important;background-color:#c6f6d5!important;background-color:rgba(198,246,213,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-green-300:hover{--bg-opacity:1!important;background-color:#9ae6b4!important;background-color:rgba(154,230,180,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-green-400:hover{--bg-opacity:1!important;background-color:#68d391!important;background-color:rgba(104,211,145,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-green-500:hover{--bg-opacity:1!important;background-color:#48bb78!important;background-color:rgba(72,187,120,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-green-600:hover{--bg-opacity:1!important;background-color:#38a169!important;background-color:rgba(56,161,105,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-green-700:hover{--bg-opacity:1!important;background-color:#2f855a!important;background-color:rgba(47,133,90,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-green-800:hover{--bg-opacity:1!important;background-color:#276749!important;background-color:rgba(39,103,73,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-green-900:hover{--bg-opacity:1!important;background-color:#22543d!important;background-color:rgba(34,84,61,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-teal-100:hover{--bg-opacity:1!important;background-color:#e6fffa!important;background-color:rgba(230,255,250,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-teal-200:hover{--bg-opacity:1!important;background-color:#b2f5ea!important;background-color:rgba(178,245,234,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-teal-300:hover{--bg-opacity:1!important;background-color:#81e6d9!important;background-color:rgba(129,230,217,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-teal-400:hover{--bg-opacity:1!important;background-color:#4fd1c5!important;background-color:rgba(79,209,197,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-teal-500:hover{--bg-opacity:1!important;background-color:#38b2ac!important;background-color:rgba(56,178,172,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-teal-600:hover{--bg-opacity:1!important;background-color:#319795!important;background-color:rgba(49,151,149,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-teal-700:hover{--bg-opacity:1!important;background-color:#2c7a7b!important;background-color:rgba(44,122,123,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-teal-800:hover{--bg-opacity:1!important;background-color:#285e61!important;background-color:rgba(40,94,97,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-teal-900:hover{--bg-opacity:1!important;background-color:#234e52!important;background-color:rgba(35,78,82,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-blue-100:hover{--bg-opacity:1!important;background-color:#ebf8ff!important;background-color:rgba(235,248,255,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-blue-200:hover{--bg-opacity:1!important;background-color:#bee3f8!important;background-color:rgba(190,227,248,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-blue-300:hover{--bg-opacity:1!important;background-color:#90cdf4!important;background-color:rgba(144,205,244,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-blue-400:hover{--bg-opacity:1!important;background-color:#63b3ed!important;background-color:rgba(99,179,237,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-blue-500:hover{--bg-opacity:1!important;background-color:#4299e1!important;background-color:rgba(66,153,225,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-blue-600:hover{--bg-opacity:1!important;background-color:#3182ce!important;background-color:rgba(49,130,206,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-blue-700:hover{--bg-opacity:1!important;background-color:#2b6cb0!important;background-color:rgba(43,108,176,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-blue-800:hover{--bg-opacity:1!important;background-color:#2c5282!important;background-color:rgba(44,82,130,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-blue-900:hover{--bg-opacity:1!important;background-color:#2a4365!important;background-color:rgba(42,67,101,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-indigo-100:hover{--bg-opacity:1!important;background-color:#ebf4ff!important;background-color:rgba(235,244,255,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-indigo-200:hover{--bg-opacity:1!important;background-color:#c3dafe!important;background-color:rgba(195,218,254,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-indigo-300:hover{--bg-opacity:1!important;background-color:#a3bffa!important;background-color:rgba(163,191,250,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-indigo-400:hover{--bg-opacity:1!important;background-color:#7f9cf5!important;background-color:rgba(127,156,245,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-indigo-500:hover{--bg-opacity:1!important;background-color:#667eea!important;background-color:rgba(102,126,234,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-indigo-600:hover{--bg-opacity:1!important;background-color:#5a67d8!important;background-color:rgba(90,103,216,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-indigo-700:hover{--bg-opacity:1!important;background-color:#4c51bf!important;background-color:rgba(76,81,191,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-indigo-800:hover{--bg-opacity:1!important;background-color:#434190!important;background-color:rgba(67,65,144,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-indigo-900:hover{--bg-opacity:1!important;background-color:#3c366b!important;background-color:rgba(60,54,107,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-purple-100:hover{--bg-opacity:1!important;background-color:#faf5ff!important;background-color:rgba(250,245,255,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-purple-200:hover{--bg-opacity:1!important;background-color:#e9d8fd!important;background-color:rgba(233,216,253,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-purple-300:hover{--bg-opacity:1!important;background-color:#d6bcfa!important;background-color:rgba(214,188,250,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-purple-400:hover{--bg-opacity:1!important;background-color:#b794f4!important;background-color:rgba(183,148,244,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-purple-500:hover{--bg-opacity:1!important;background-color:#9f7aea!important;background-color:rgba(159,122,234,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-purple-600:hover{--bg-opacity:1!important;background-color:#805ad5!important;background-color:rgba(128,90,213,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-purple-700:hover{--bg-opacity:1!important;background-color:#6b46c1!important;background-color:rgba(107,70,193,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-purple-800:hover{--bg-opacity:1!important;background-color:#553c9a!important;background-color:rgba(85,60,154,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-purple-900:hover{--bg-opacity:1!important;background-color:#44337a!important;background-color:rgba(68,51,122,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-pink-100:hover{--bg-opacity:1!important;background-color:#fff5f7!important;background-color:rgba(255,245,247,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-pink-200:hover{--bg-opacity:1!important;background-color:#fed7e2!important;background-color:rgba(254,215,226,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-pink-300:hover{--bg-opacity:1!important;background-color:#fbb6ce!important;background-color:rgba(251,182,206,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-pink-400:hover{--bg-opacity:1!important;background-color:#f687b3!important;background-color:rgba(246,135,179,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-pink-500:hover{--bg-opacity:1!important;background-color:#ed64a6!important;background-color:rgba(237,100,166,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-pink-600:hover{--bg-opacity:1!important;background-color:#d53f8c!important;background-color:rgba(213,63,140,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-pink-700:hover{--bg-opacity:1!important;background-color:#b83280!important;background-color:rgba(184,50,128,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-pink-800:hover{--bg-opacity:1!important;background-color:#97266d!important;background-color:rgba(151,38,109,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:bg-pink-900:hover{--bg-opacity:1!important;background-color:#702459!important;background-color:rgba(112,36,89,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-transparent:focus{background-color:initial!important}}@media (min-width:600px){.sm\\:focus\\:bg-current:focus{background-color:currentColor!important}}@media (min-width:600px){.sm\\:focus\\:bg-black:focus{--bg-opacity:1!important;background-color:#000!important;background-color:rgba(0,0,0,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-white:focus{--bg-opacity:1!important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-gray-100:focus{--bg-opacity:1!important;background-color:#f7fafc!important;background-color:rgba(247,250,252,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-gray-200:focus{--bg-opacity:1!important;background-color:#edf2f7!important;background-color:rgba(237,242,247,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-gray-300:focus{--bg-opacity:1!important;background-color:#e2e8f0!important;background-color:rgba(226,232,240,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-gray-400:focus{--bg-opacity:1!important;background-color:#cbd5e0!important;background-color:rgba(203,213,224,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-gray-500:focus{--bg-opacity:1!important;background-color:#a0aec0!important;background-color:rgba(160,174,192,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-gray-600:focus{--bg-opacity:1!important;background-color:#718096!important;background-color:rgba(113,128,150,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-gray-700:focus{--bg-opacity:1!important;background-color:#4a5568!important;background-color:rgba(74,85,104,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-gray-800:focus{--bg-opacity:1!important;background-color:#2d3748!important;background-color:rgba(45,55,72,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-gray-900:focus{--bg-opacity:1!important;background-color:#1a202c!important;background-color:rgba(26,32,44,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-red-100:focus{--bg-opacity:1!important;background-color:#fff5f5!important;background-color:rgba(255,245,245,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-red-200:focus{--bg-opacity:1!important;background-color:#fed7d7!important;background-color:rgba(254,215,215,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-red-300:focus{--bg-opacity:1!important;background-color:#feb2b2!important;background-color:rgba(254,178,178,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-red-400:focus{--bg-opacity:1!important;background-color:#fc8181!important;background-color:rgba(252,129,129,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-red-500:focus{--bg-opacity:1!important;background-color:#f56565!important;background-color:rgba(245,101,101,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-red-600:focus{--bg-opacity:1!important;background-color:#e53e3e!important;background-color:rgba(229,62,62,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-red-700:focus{--bg-opacity:1!important;background-color:#c53030!important;background-color:rgba(197,48,48,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-red-800:focus{--bg-opacity:1!important;background-color:#9b2c2c!important;background-color:rgba(155,44,44,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-red-900:focus{--bg-opacity:1!important;background-color:#742a2a!important;background-color:rgba(116,42,42,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-orange-100:focus{--bg-opacity:1!important;background-color:#fffaf0!important;background-color:rgba(255,250,240,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-orange-200:focus{--bg-opacity:1!important;background-color:#feebc8!important;background-color:rgba(254,235,200,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-orange-300:focus{--bg-opacity:1!important;background-color:#fbd38d!important;background-color:rgba(251,211,141,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-orange-400:focus{--bg-opacity:1!important;background-color:#f6ad55!important;background-color:rgba(246,173,85,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-orange-500:focus{--bg-opacity:1!important;background-color:#ed8936!important;background-color:rgba(237,137,54,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-orange-600:focus{--bg-opacity:1!important;background-color:#dd6b20!important;background-color:rgba(221,107,32,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-orange-700:focus{--bg-opacity:1!important;background-color:#c05621!important;background-color:rgba(192,86,33,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-orange-800:focus{--bg-opacity:1!important;background-color:#9c4221!important;background-color:rgba(156,66,33,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-orange-900:focus{--bg-opacity:1!important;background-color:#7b341e!important;background-color:rgba(123,52,30,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-yellow-100:focus{--bg-opacity:1!important;background-color:ivory!important;background-color:rgba(255,255,240,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-yellow-200:focus{--bg-opacity:1!important;background-color:#fefcbf!important;background-color:rgba(254,252,191,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-yellow-300:focus{--bg-opacity:1!important;background-color:#faf089!important;background-color:rgba(250,240,137,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-yellow-400:focus{--bg-opacity:1!important;background-color:#f6e05e!important;background-color:rgba(246,224,94,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-yellow-500:focus{--bg-opacity:1!important;background-color:#ecc94b!important;background-color:rgba(236,201,75,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-yellow-600:focus{--bg-opacity:1!important;background-color:#d69e2e!important;background-color:rgba(214,158,46,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-yellow-700:focus{--bg-opacity:1!important;background-color:#b7791f!important;background-color:rgba(183,121,31,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-yellow-800:focus{--bg-opacity:1!important;background-color:#975a16!important;background-color:rgba(151,90,22,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-yellow-900:focus{--bg-opacity:1!important;background-color:#744210!important;background-color:rgba(116,66,16,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-green-100:focus{--bg-opacity:1!important;background-color:#f0fff4!important;background-color:rgba(240,255,244,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-green-200:focus{--bg-opacity:1!important;background-color:#c6f6d5!important;background-color:rgba(198,246,213,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-green-300:focus{--bg-opacity:1!important;background-color:#9ae6b4!important;background-color:rgba(154,230,180,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-green-400:focus{--bg-opacity:1!important;background-color:#68d391!important;background-color:rgba(104,211,145,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-green-500:focus{--bg-opacity:1!important;background-color:#48bb78!important;background-color:rgba(72,187,120,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-green-600:focus{--bg-opacity:1!important;background-color:#38a169!important;background-color:rgba(56,161,105,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-green-700:focus{--bg-opacity:1!important;background-color:#2f855a!important;background-color:rgba(47,133,90,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-green-800:focus{--bg-opacity:1!important;background-color:#276749!important;background-color:rgba(39,103,73,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-green-900:focus{--bg-opacity:1!important;background-color:#22543d!important;background-color:rgba(34,84,61,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-teal-100:focus{--bg-opacity:1!important;background-color:#e6fffa!important;background-color:rgba(230,255,250,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-teal-200:focus{--bg-opacity:1!important;background-color:#b2f5ea!important;background-color:rgba(178,245,234,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-teal-300:focus{--bg-opacity:1!important;background-color:#81e6d9!important;background-color:rgba(129,230,217,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-teal-400:focus{--bg-opacity:1!important;background-color:#4fd1c5!important;background-color:rgba(79,209,197,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-teal-500:focus{--bg-opacity:1!important;background-color:#38b2ac!important;background-color:rgba(56,178,172,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-teal-600:focus{--bg-opacity:1!important;background-color:#319795!important;background-color:rgba(49,151,149,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-teal-700:focus{--bg-opacity:1!important;background-color:#2c7a7b!important;background-color:rgba(44,122,123,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-teal-800:focus{--bg-opacity:1!important;background-color:#285e61!important;background-color:rgba(40,94,97,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-teal-900:focus{--bg-opacity:1!important;background-color:#234e52!important;background-color:rgba(35,78,82,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-blue-100:focus{--bg-opacity:1!important;background-color:#ebf8ff!important;background-color:rgba(235,248,255,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-blue-200:focus{--bg-opacity:1!important;background-color:#bee3f8!important;background-color:rgba(190,227,248,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-blue-300:focus{--bg-opacity:1!important;background-color:#90cdf4!important;background-color:rgba(144,205,244,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-blue-400:focus{--bg-opacity:1!important;background-color:#63b3ed!important;background-color:rgba(99,179,237,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-blue-500:focus{--bg-opacity:1!important;background-color:#4299e1!important;background-color:rgba(66,153,225,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-blue-600:focus{--bg-opacity:1!important;background-color:#3182ce!important;background-color:rgba(49,130,206,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-blue-700:focus{--bg-opacity:1!important;background-color:#2b6cb0!important;background-color:rgba(43,108,176,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-blue-800:focus{--bg-opacity:1!important;background-color:#2c5282!important;background-color:rgba(44,82,130,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-blue-900:focus{--bg-opacity:1!important;background-color:#2a4365!important;background-color:rgba(42,67,101,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-indigo-100:focus{--bg-opacity:1!important;background-color:#ebf4ff!important;background-color:rgba(235,244,255,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-indigo-200:focus{--bg-opacity:1!important;background-color:#c3dafe!important;background-color:rgba(195,218,254,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-indigo-300:focus{--bg-opacity:1!important;background-color:#a3bffa!important;background-color:rgba(163,191,250,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-indigo-400:focus{--bg-opacity:1!important;background-color:#7f9cf5!important;background-color:rgba(127,156,245,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-indigo-500:focus{--bg-opacity:1!important;background-color:#667eea!important;background-color:rgba(102,126,234,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-indigo-600:focus{--bg-opacity:1!important;background-color:#5a67d8!important;background-color:rgba(90,103,216,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-indigo-700:focus{--bg-opacity:1!important;background-color:#4c51bf!important;background-color:rgba(76,81,191,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-indigo-800:focus{--bg-opacity:1!important;background-color:#434190!important;background-color:rgba(67,65,144,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-indigo-900:focus{--bg-opacity:1!important;background-color:#3c366b!important;background-color:rgba(60,54,107,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-purple-100:focus{--bg-opacity:1!important;background-color:#faf5ff!important;background-color:rgba(250,245,255,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-purple-200:focus{--bg-opacity:1!important;background-color:#e9d8fd!important;background-color:rgba(233,216,253,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-purple-300:focus{--bg-opacity:1!important;background-color:#d6bcfa!important;background-color:rgba(214,188,250,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-purple-400:focus{--bg-opacity:1!important;background-color:#b794f4!important;background-color:rgba(183,148,244,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-purple-500:focus{--bg-opacity:1!important;background-color:#9f7aea!important;background-color:rgba(159,122,234,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-purple-600:focus{--bg-opacity:1!important;background-color:#805ad5!important;background-color:rgba(128,90,213,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-purple-700:focus{--bg-opacity:1!important;background-color:#6b46c1!important;background-color:rgba(107,70,193,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-purple-800:focus{--bg-opacity:1!important;background-color:#553c9a!important;background-color:rgba(85,60,154,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-purple-900:focus{--bg-opacity:1!important;background-color:#44337a!important;background-color:rgba(68,51,122,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-pink-100:focus{--bg-opacity:1!important;background-color:#fff5f7!important;background-color:rgba(255,245,247,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-pink-200:focus{--bg-opacity:1!important;background-color:#fed7e2!important;background-color:rgba(254,215,226,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-pink-300:focus{--bg-opacity:1!important;background-color:#fbb6ce!important;background-color:rgba(251,182,206,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-pink-400:focus{--bg-opacity:1!important;background-color:#f687b3!important;background-color:rgba(246,135,179,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-pink-500:focus{--bg-opacity:1!important;background-color:#ed64a6!important;background-color:rgba(237,100,166,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-pink-600:focus{--bg-opacity:1!important;background-color:#d53f8c!important;background-color:rgba(213,63,140,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-pink-700:focus{--bg-opacity:1!important;background-color:#b83280!important;background-color:rgba(184,50,128,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-pink-800:focus{--bg-opacity:1!important;background-color:#97266d!important;background-color:rgba(151,38,109,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:bg-pink-900:focus{--bg-opacity:1!important;background-color:#702459!important;background-color:rgba(112,36,89,var(--bg-opacity))!important}}@media (min-width:600px){.sm\\:bg-none{background-image:none!important}}@media (min-width:600px){.sm\\:bg-gradient-to-t{background-image:linear-gradient(0deg,var(--gradient-color-stops))!important}}@media (min-width:600px){.sm\\:bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--gradient-color-stops))!important}}@media (min-width:600px){.sm\\:bg-gradient-to-r{background-image:linear-gradient(90deg,var(--gradient-color-stops))!important}}@media (min-width:600px){.sm\\:bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--gradient-color-stops))!important}}@media (min-width:600px){.sm\\:bg-gradient-to-b{background-image:linear-gradient(180deg,var(--gradient-color-stops))!important}}@media (min-width:600px){.sm\\:bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--gradient-color-stops))!important}}@media (min-width:600px){.sm\\:bg-gradient-to-l{background-image:linear-gradient(270deg,var(--gradient-color-stops))!important}}@media (min-width:600px){.sm\\:bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--gradient-color-stops))!important}}@media (min-width:600px){.sm\\:from-transparent{--gradient-from-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:600px){.sm\\:from-current{--gradient-from-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:600px){.sm\\:from-black{--gradient-from-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:600px){.sm\\:from-white{--gradient-from-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:600px){.sm\\:from-gray-100{--gradient-from-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:600px){.sm\\:from-gray-200{--gradient-from-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:600px){.sm\\:from-gray-300{--gradient-from-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:600px){.sm\\:from-gray-400{--gradient-from-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:600px){.sm\\:from-gray-500{--gradient-from-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:600px){.sm\\:from-gray-600{--gradient-from-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:600px){.sm\\:from-gray-700{--gradient-from-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:600px){.sm\\:from-gray-800{--gradient-from-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:600px){.sm\\:from-gray-900{--gradient-from-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:600px){.sm\\:from-red-100{--gradient-from-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:600px){.sm\\:from-red-200{--gradient-from-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:600px){.sm\\:from-red-300{--gradient-from-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:600px){.sm\\:from-red-400{--gradient-from-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:600px){.sm\\:from-red-500{--gradient-from-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:600px){.sm\\:from-red-600{--gradient-from-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:600px){.sm\\:from-red-700{--gradient-from-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:600px){.sm\\:from-red-800{--gradient-from-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:600px){.sm\\:from-red-900{--gradient-from-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:600px){.sm\\:from-orange-100{--gradient-from-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:600px){.sm\\:from-orange-200{--gradient-from-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:600px){.sm\\:from-orange-300{--gradient-from-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:600px){.sm\\:from-orange-400{--gradient-from-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:600px){.sm\\:from-orange-500{--gradient-from-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:600px){.sm\\:from-orange-600{--gradient-from-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:600px){.sm\\:from-orange-700{--gradient-from-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:600px){.sm\\:from-orange-800{--gradient-from-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:600px){.sm\\:from-orange-900{--gradient-from-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:600px){.sm\\:from-yellow-100{--gradient-from-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:600px){.sm\\:from-yellow-200{--gradient-from-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:600px){.sm\\:from-yellow-300{--gradient-from-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:600px){.sm\\:from-yellow-400{--gradient-from-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:600px){.sm\\:from-yellow-500{--gradient-from-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:600px){.sm\\:from-yellow-600{--gradient-from-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:600px){.sm\\:from-yellow-700{--gradient-from-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:600px){.sm\\:from-yellow-800{--gradient-from-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:600px){.sm\\:from-yellow-900{--gradient-from-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:600px){.sm\\:from-green-100{--gradient-from-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:600px){.sm\\:from-green-200{--gradient-from-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:600px){.sm\\:from-green-300{--gradient-from-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:600px){.sm\\:from-green-400{--gradient-from-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:600px){.sm\\:from-green-500{--gradient-from-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:600px){.sm\\:from-green-600{--gradient-from-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:600px){.sm\\:from-green-700{--gradient-from-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:600px){.sm\\:from-green-800{--gradient-from-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:600px){.sm\\:from-green-900{--gradient-from-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:600px){.sm\\:from-teal-100{--gradient-from-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:600px){.sm\\:from-teal-200{--gradient-from-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:600px){.sm\\:from-teal-300{--gradient-from-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:600px){.sm\\:from-teal-400{--gradient-from-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:600px){.sm\\:from-teal-500{--gradient-from-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:600px){.sm\\:from-teal-600{--gradient-from-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:600px){.sm\\:from-teal-700{--gradient-from-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:600px){.sm\\:from-teal-800{--gradient-from-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:600px){.sm\\:from-teal-900{--gradient-from-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:600px){.sm\\:from-blue-100{--gradient-from-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:600px){.sm\\:from-blue-200{--gradient-from-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:600px){.sm\\:from-blue-300{--gradient-from-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:600px){.sm\\:from-blue-400{--gradient-from-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:600px){.sm\\:from-blue-500{--gradient-from-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:600px){.sm\\:from-blue-600{--gradient-from-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:600px){.sm\\:from-blue-700{--gradient-from-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:600px){.sm\\:from-blue-800{--gradient-from-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:600px){.sm\\:from-blue-900{--gradient-from-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:600px){.sm\\:from-indigo-100{--gradient-from-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:600px){.sm\\:from-indigo-200{--gradient-from-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:600px){.sm\\:from-indigo-300{--gradient-from-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:600px){.sm\\:from-indigo-400{--gradient-from-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:600px){.sm\\:from-indigo-500{--gradient-from-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:600px){.sm\\:from-indigo-600{--gradient-from-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:600px){.sm\\:from-indigo-700{--gradient-from-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:600px){.sm\\:from-indigo-800{--gradient-from-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:600px){.sm\\:from-indigo-900{--gradient-from-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:600px){.sm\\:from-purple-100{--gradient-from-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:600px){.sm\\:from-purple-200{--gradient-from-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:600px){.sm\\:from-purple-300{--gradient-from-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:600px){.sm\\:from-purple-400{--gradient-from-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:600px){.sm\\:from-purple-500{--gradient-from-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:600px){.sm\\:from-purple-600{--gradient-from-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:600px){.sm\\:from-purple-700{--gradient-from-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:600px){.sm\\:from-purple-800{--gradient-from-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:600px){.sm\\:from-purple-900{--gradient-from-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:600px){.sm\\:from-pink-100{--gradient-from-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:600px){.sm\\:from-pink-200{--gradient-from-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:600px){.sm\\:from-pink-300{--gradient-from-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:600px){.sm\\:from-pink-400{--gradient-from-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:600px){.sm\\:from-pink-500{--gradient-from-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:600px){.sm\\:from-pink-600{--gradient-from-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:600px){.sm\\:from-pink-700{--gradient-from-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:600px){.sm\\:from-pink-800{--gradient-from-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:600px){.sm\\:from-pink-900{--gradient-from-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:600px){.sm\\:via-transparent{--gradient-via-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:600px){.sm\\:via-current{--gradient-via-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:600px){.sm\\:via-black{--gradient-via-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:600px){.sm\\:via-white{--gradient-via-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:600px){.sm\\:via-gray-100{--gradient-via-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:600px){.sm\\:via-gray-200{--gradient-via-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:600px){.sm\\:via-gray-300{--gradient-via-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:600px){.sm\\:via-gray-400{--gradient-via-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:600px){.sm\\:via-gray-500{--gradient-via-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:600px){.sm\\:via-gray-600{--gradient-via-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:600px){.sm\\:via-gray-700{--gradient-via-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:600px){.sm\\:via-gray-800{--gradient-via-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:600px){.sm\\:via-gray-900{--gradient-via-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:600px){.sm\\:via-red-100{--gradient-via-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:600px){.sm\\:via-red-200{--gradient-via-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:600px){.sm\\:via-red-300{--gradient-via-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:600px){.sm\\:via-red-400{--gradient-via-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:600px){.sm\\:via-red-500{--gradient-via-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:600px){.sm\\:via-red-600{--gradient-via-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:600px){.sm\\:via-red-700{--gradient-via-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:600px){.sm\\:via-red-800{--gradient-via-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:600px){.sm\\:via-red-900{--gradient-via-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:600px){.sm\\:via-orange-100{--gradient-via-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:600px){.sm\\:via-orange-200{--gradient-via-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:600px){.sm\\:via-orange-300{--gradient-via-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:600px){.sm\\:via-orange-400{--gradient-via-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:600px){.sm\\:via-orange-500{--gradient-via-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:600px){.sm\\:via-orange-600{--gradient-via-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:600px){.sm\\:via-orange-700{--gradient-via-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:600px){.sm\\:via-orange-800{--gradient-via-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:600px){.sm\\:via-orange-900{--gradient-via-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:600px){.sm\\:via-yellow-100{--gradient-via-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:600px){.sm\\:via-yellow-200{--gradient-via-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:600px){.sm\\:via-yellow-300{--gradient-via-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:600px){.sm\\:via-yellow-400{--gradient-via-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:600px){.sm\\:via-yellow-500{--gradient-via-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:600px){.sm\\:via-yellow-600{--gradient-via-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:600px){.sm\\:via-yellow-700{--gradient-via-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:600px){.sm\\:via-yellow-800{--gradient-via-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:600px){.sm\\:via-yellow-900{--gradient-via-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:600px){.sm\\:via-green-100{--gradient-via-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:600px){.sm\\:via-green-200{--gradient-via-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:600px){.sm\\:via-green-300{--gradient-via-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:600px){.sm\\:via-green-400{--gradient-via-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:600px){.sm\\:via-green-500{--gradient-via-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:600px){.sm\\:via-green-600{--gradient-via-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:600px){.sm\\:via-green-700{--gradient-via-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:600px){.sm\\:via-green-800{--gradient-via-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:600px){.sm\\:via-green-900{--gradient-via-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:600px){.sm\\:via-teal-100{--gradient-via-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:600px){.sm\\:via-teal-200{--gradient-via-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:600px){.sm\\:via-teal-300{--gradient-via-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:600px){.sm\\:via-teal-400{--gradient-via-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:600px){.sm\\:via-teal-500{--gradient-via-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:600px){.sm\\:via-teal-600{--gradient-via-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:600px){.sm\\:via-teal-700{--gradient-via-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:600px){.sm\\:via-teal-800{--gradient-via-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:600px){.sm\\:via-teal-900{--gradient-via-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:600px){.sm\\:via-blue-100{--gradient-via-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:600px){.sm\\:via-blue-200{--gradient-via-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:600px){.sm\\:via-blue-300{--gradient-via-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:600px){.sm\\:via-blue-400{--gradient-via-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:600px){.sm\\:via-blue-500{--gradient-via-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:600px){.sm\\:via-blue-600{--gradient-via-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:600px){.sm\\:via-blue-700{--gradient-via-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:600px){.sm\\:via-blue-800{--gradient-via-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:600px){.sm\\:via-blue-900{--gradient-via-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:600px){.sm\\:via-indigo-100{--gradient-via-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:600px){.sm\\:via-indigo-200{--gradient-via-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:600px){.sm\\:via-indigo-300{--gradient-via-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:600px){.sm\\:via-indigo-400{--gradient-via-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:600px){.sm\\:via-indigo-500{--gradient-via-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:600px){.sm\\:via-indigo-600{--gradient-via-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:600px){.sm\\:via-indigo-700{--gradient-via-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:600px){.sm\\:via-indigo-800{--gradient-via-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:600px){.sm\\:via-indigo-900{--gradient-via-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:600px){.sm\\:via-purple-100{--gradient-via-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:600px){.sm\\:via-purple-200{--gradient-via-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:600px){.sm\\:via-purple-300{--gradient-via-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:600px){.sm\\:via-purple-400{--gradient-via-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:600px){.sm\\:via-purple-500{--gradient-via-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:600px){.sm\\:via-purple-600{--gradient-via-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:600px){.sm\\:via-purple-700{--gradient-via-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:600px){.sm\\:via-purple-800{--gradient-via-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:600px){.sm\\:via-purple-900{--gradient-via-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:600px){.sm\\:via-pink-100{--gradient-via-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:600px){.sm\\:via-pink-200{--gradient-via-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:600px){.sm\\:via-pink-300{--gradient-via-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:600px){.sm\\:via-pink-400{--gradient-via-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:600px){.sm\\:via-pink-500{--gradient-via-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:600px){.sm\\:via-pink-600{--gradient-via-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:600px){.sm\\:via-pink-700{--gradient-via-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:600px){.sm\\:via-pink-800{--gradient-via-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:600px){.sm\\:via-pink-900{--gradient-via-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:600px){.sm\\:to-transparent{--gradient-to-color:transparent!important}}@media (min-width:600px){.sm\\:to-current{--gradient-to-color:currentColor!important}}@media (min-width:600px){.sm\\:to-black{--gradient-to-color:#000!important}}@media (min-width:600px){.sm\\:to-white{--gradient-to-color:#fff!important}}@media (min-width:600px){.sm\\:to-gray-100{--gradient-to-color:#f7fafc!important}}@media (min-width:600px){.sm\\:to-gray-200{--gradient-to-color:#edf2f7!important}}@media (min-width:600px){.sm\\:to-gray-300{--gradient-to-color:#e2e8f0!important}}@media (min-width:600px){.sm\\:to-gray-400{--gradient-to-color:#cbd5e0!important}}@media (min-width:600px){.sm\\:to-gray-500{--gradient-to-color:#a0aec0!important}}@media (min-width:600px){.sm\\:to-gray-600{--gradient-to-color:#718096!important}}@media (min-width:600px){.sm\\:to-gray-700{--gradient-to-color:#4a5568!important}}@media (min-width:600px){.sm\\:to-gray-800{--gradient-to-color:#2d3748!important}}@media (min-width:600px){.sm\\:to-gray-900{--gradient-to-color:#1a202c!important}}@media (min-width:600px){.sm\\:to-red-100{--gradient-to-color:#fff5f5!important}}@media (min-width:600px){.sm\\:to-red-200{--gradient-to-color:#fed7d7!important}}@media (min-width:600px){.sm\\:to-red-300{--gradient-to-color:#feb2b2!important}}@media (min-width:600px){.sm\\:to-red-400{--gradient-to-color:#fc8181!important}}@media (min-width:600px){.sm\\:to-red-500{--gradient-to-color:#f56565!important}}@media (min-width:600px){.sm\\:to-red-600{--gradient-to-color:#e53e3e!important}}@media (min-width:600px){.sm\\:to-red-700{--gradient-to-color:#c53030!important}}@media (min-width:600px){.sm\\:to-red-800{--gradient-to-color:#9b2c2c!important}}@media (min-width:600px){.sm\\:to-red-900{--gradient-to-color:#742a2a!important}}@media (min-width:600px){.sm\\:to-orange-100{--gradient-to-color:#fffaf0!important}}@media (min-width:600px){.sm\\:to-orange-200{--gradient-to-color:#feebc8!important}}@media (min-width:600px){.sm\\:to-orange-300{--gradient-to-color:#fbd38d!important}}@media (min-width:600px){.sm\\:to-orange-400{--gradient-to-color:#f6ad55!important}}@media (min-width:600px){.sm\\:to-orange-500{--gradient-to-color:#ed8936!important}}@media (min-width:600px){.sm\\:to-orange-600{--gradient-to-color:#dd6b20!important}}@media (min-width:600px){.sm\\:to-orange-700{--gradient-to-color:#c05621!important}}@media (min-width:600px){.sm\\:to-orange-800{--gradient-to-color:#9c4221!important}}@media (min-width:600px){.sm\\:to-orange-900{--gradient-to-color:#7b341e!important}}@media (min-width:600px){.sm\\:to-yellow-100{--gradient-to-color:ivory!important}}@media (min-width:600px){.sm\\:to-yellow-200{--gradient-to-color:#fefcbf!important}}@media (min-width:600px){.sm\\:to-yellow-300{--gradient-to-color:#faf089!important}}@media (min-width:600px){.sm\\:to-yellow-400{--gradient-to-color:#f6e05e!important}}@media (min-width:600px){.sm\\:to-yellow-500{--gradient-to-color:#ecc94b!important}}@media (min-width:600px){.sm\\:to-yellow-600{--gradient-to-color:#d69e2e!important}}@media (min-width:600px){.sm\\:to-yellow-700{--gradient-to-color:#b7791f!important}}@media (min-width:600px){.sm\\:to-yellow-800{--gradient-to-color:#975a16!important}}@media (min-width:600px){.sm\\:to-yellow-900{--gradient-to-color:#744210!important}}@media (min-width:600px){.sm\\:to-green-100{--gradient-to-color:#f0fff4!important}}@media (min-width:600px){.sm\\:to-green-200{--gradient-to-color:#c6f6d5!important}}@media (min-width:600px){.sm\\:to-green-300{--gradient-to-color:#9ae6b4!important}}@media (min-width:600px){.sm\\:to-green-400{--gradient-to-color:#68d391!important}}@media (min-width:600px){.sm\\:to-green-500{--gradient-to-color:#48bb78!important}}@media (min-width:600px){.sm\\:to-green-600{--gradient-to-color:#38a169!important}}@media (min-width:600px){.sm\\:to-green-700{--gradient-to-color:#2f855a!important}}@media (min-width:600px){.sm\\:to-green-800{--gradient-to-color:#276749!important}}@media (min-width:600px){.sm\\:to-green-900{--gradient-to-color:#22543d!important}}@media (min-width:600px){.sm\\:to-teal-100{--gradient-to-color:#e6fffa!important}}@media (min-width:600px){.sm\\:to-teal-200{--gradient-to-color:#b2f5ea!important}}@media (min-width:600px){.sm\\:to-teal-300{--gradient-to-color:#81e6d9!important}}@media (min-width:600px){.sm\\:to-teal-400{--gradient-to-color:#4fd1c5!important}}@media (min-width:600px){.sm\\:to-teal-500{--gradient-to-color:#38b2ac!important}}@media (min-width:600px){.sm\\:to-teal-600{--gradient-to-color:#319795!important}}@media (min-width:600px){.sm\\:to-teal-700{--gradient-to-color:#2c7a7b!important}}@media (min-width:600px){.sm\\:to-teal-800{--gradient-to-color:#285e61!important}}@media (min-width:600px){.sm\\:to-teal-900{--gradient-to-color:#234e52!important}}@media (min-width:600px){.sm\\:to-blue-100{--gradient-to-color:#ebf8ff!important}}@media (min-width:600px){.sm\\:to-blue-200{--gradient-to-color:#bee3f8!important}}@media (min-width:600px){.sm\\:to-blue-300{--gradient-to-color:#90cdf4!important}}@media (min-width:600px){.sm\\:to-blue-400{--gradient-to-color:#63b3ed!important}}@media (min-width:600px){.sm\\:to-blue-500{--gradient-to-color:#4299e1!important}}@media (min-width:600px){.sm\\:to-blue-600{--gradient-to-color:#3182ce!important}}@media (min-width:600px){.sm\\:to-blue-700{--gradient-to-color:#2b6cb0!important}}@media (min-width:600px){.sm\\:to-blue-800{--gradient-to-color:#2c5282!important}}@media (min-width:600px){.sm\\:to-blue-900{--gradient-to-color:#2a4365!important}}@media (min-width:600px){.sm\\:to-indigo-100{--gradient-to-color:#ebf4ff!important}}@media (min-width:600px){.sm\\:to-indigo-200{--gradient-to-color:#c3dafe!important}}@media (min-width:600px){.sm\\:to-indigo-300{--gradient-to-color:#a3bffa!important}}@media (min-width:600px){.sm\\:to-indigo-400{--gradient-to-color:#7f9cf5!important}}@media (min-width:600px){.sm\\:to-indigo-500{--gradient-to-color:#667eea!important}}@media (min-width:600px){.sm\\:to-indigo-600{--gradient-to-color:#5a67d8!important}}@media (min-width:600px){.sm\\:to-indigo-700{--gradient-to-color:#4c51bf!important}}@media (min-width:600px){.sm\\:to-indigo-800{--gradient-to-color:#434190!important}}@media (min-width:600px){.sm\\:to-indigo-900{--gradient-to-color:#3c366b!important}}@media (min-width:600px){.sm\\:to-purple-100{--gradient-to-color:#faf5ff!important}}@media (min-width:600px){.sm\\:to-purple-200{--gradient-to-color:#e9d8fd!important}}@media (min-width:600px){.sm\\:to-purple-300{--gradient-to-color:#d6bcfa!important}}@media (min-width:600px){.sm\\:to-purple-400{--gradient-to-color:#b794f4!important}}@media (min-width:600px){.sm\\:to-purple-500{--gradient-to-color:#9f7aea!important}}@media (min-width:600px){.sm\\:to-purple-600{--gradient-to-color:#805ad5!important}}@media (min-width:600px){.sm\\:to-purple-700{--gradient-to-color:#6b46c1!important}}@media (min-width:600px){.sm\\:to-purple-800{--gradient-to-color:#553c9a!important}}@media (min-width:600px){.sm\\:to-purple-900{--gradient-to-color:#44337a!important}}@media (min-width:600px){.sm\\:to-pink-100{--gradient-to-color:#fff5f7!important}}@media (min-width:600px){.sm\\:to-pink-200{--gradient-to-color:#fed7e2!important}}@media (min-width:600px){.sm\\:to-pink-300{--gradient-to-color:#fbb6ce!important}}@media (min-width:600px){.sm\\:to-pink-400{--gradient-to-color:#f687b3!important}}@media (min-width:600px){.sm\\:to-pink-500{--gradient-to-color:#ed64a6!important}}@media (min-width:600px){.sm\\:to-pink-600{--gradient-to-color:#d53f8c!important}}@media (min-width:600px){.sm\\:to-pink-700{--gradient-to-color:#b83280!important}}@media (min-width:600px){.sm\\:to-pink-800{--gradient-to-color:#97266d!important}}@media (min-width:600px){.sm\\:to-pink-900{--gradient-to-color:#702459!important}}@media (min-width:600px){.sm\\:hover\\:from-transparent:hover{--gradient-from-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:600px){.sm\\:hover\\:from-current:hover{--gradient-from-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-black:hover{--gradient-from-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:600px){.sm\\:hover\\:from-white:hover{--gradient-from-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-gray-100:hover{--gradient-from-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-gray-200:hover{--gradient-from-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-gray-300:hover{--gradient-from-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-gray-400:hover{--gradient-from-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-gray-500:hover{--gradient-from-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-gray-600:hover{--gradient-from-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-gray-700:hover{--gradient-from-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-gray-800:hover{--gradient-from-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-gray-900:hover{--gradient-from-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-red-100:hover{--gradient-from-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-red-200:hover{--gradient-from-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-red-300:hover{--gradient-from-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-red-400:hover{--gradient-from-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-red-500:hover{--gradient-from-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-red-600:hover{--gradient-from-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-red-700:hover{--gradient-from-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-red-800:hover{--gradient-from-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-red-900:hover{--gradient-from-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-orange-100:hover{--gradient-from-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-orange-200:hover{--gradient-from-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-orange-300:hover{--gradient-from-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-orange-400:hover{--gradient-from-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-orange-500:hover{--gradient-from-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-orange-600:hover{--gradient-from-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-orange-700:hover{--gradient-from-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-orange-800:hover{--gradient-from-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-orange-900:hover{--gradient-from-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-yellow-100:hover{--gradient-from-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-yellow-200:hover{--gradient-from-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-yellow-300:hover{--gradient-from-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-yellow-400:hover{--gradient-from-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-yellow-500:hover{--gradient-from-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-yellow-600:hover{--gradient-from-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-yellow-700:hover{--gradient-from-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-yellow-800:hover{--gradient-from-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-yellow-900:hover{--gradient-from-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-green-100:hover{--gradient-from-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-green-200:hover{--gradient-from-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-green-300:hover{--gradient-from-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-green-400:hover{--gradient-from-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-green-500:hover{--gradient-from-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-green-600:hover{--gradient-from-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-green-700:hover{--gradient-from-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-green-800:hover{--gradient-from-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-green-900:hover{--gradient-from-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-teal-100:hover{--gradient-from-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-teal-200:hover{--gradient-from-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-teal-300:hover{--gradient-from-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-teal-400:hover{--gradient-from-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-teal-500:hover{--gradient-from-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-teal-600:hover{--gradient-from-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-teal-700:hover{--gradient-from-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-teal-800:hover{--gradient-from-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-teal-900:hover{--gradient-from-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-blue-100:hover{--gradient-from-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-blue-200:hover{--gradient-from-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-blue-300:hover{--gradient-from-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-blue-400:hover{--gradient-from-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-blue-500:hover{--gradient-from-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-blue-600:hover{--gradient-from-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-blue-700:hover{--gradient-from-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-blue-800:hover{--gradient-from-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-blue-900:hover{--gradient-from-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-indigo-100:hover{--gradient-from-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-indigo-200:hover{--gradient-from-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-indigo-300:hover{--gradient-from-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-indigo-400:hover{--gradient-from-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-indigo-500:hover{--gradient-from-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-indigo-600:hover{--gradient-from-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-indigo-700:hover{--gradient-from-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-indigo-800:hover{--gradient-from-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-indigo-900:hover{--gradient-from-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-purple-100:hover{--gradient-from-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-purple-200:hover{--gradient-from-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-purple-300:hover{--gradient-from-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-purple-400:hover{--gradient-from-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-purple-500:hover{--gradient-from-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-purple-600:hover{--gradient-from-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-purple-700:hover{--gradient-from-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-purple-800:hover{--gradient-from-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-purple-900:hover{--gradient-from-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-pink-100:hover{--gradient-from-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-pink-200:hover{--gradient-from-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-pink-300:hover{--gradient-from-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-pink-400:hover{--gradient-from-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-pink-500:hover{--gradient-from-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-pink-600:hover{--gradient-from-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-pink-700:hover{--gradient-from-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-pink-800:hover{--gradient-from-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:600px){.sm\\:hover\\:from-pink-900:hover{--gradient-from-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-transparent:hover{--gradient-via-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:600px){.sm\\:hover\\:via-current:hover{--gradient-via-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-black:hover{--gradient-via-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:600px){.sm\\:hover\\:via-white:hover{--gradient-via-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-gray-100:hover{--gradient-via-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-gray-200:hover{--gradient-via-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-gray-300:hover{--gradient-via-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-gray-400:hover{--gradient-via-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-gray-500:hover{--gradient-via-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-gray-600:hover{--gradient-via-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-gray-700:hover{--gradient-via-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-gray-800:hover{--gradient-via-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-gray-900:hover{--gradient-via-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-red-100:hover{--gradient-via-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-red-200:hover{--gradient-via-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-red-300:hover{--gradient-via-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-red-400:hover{--gradient-via-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-red-500:hover{--gradient-via-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-red-600:hover{--gradient-via-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-red-700:hover{--gradient-via-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-red-800:hover{--gradient-via-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-red-900:hover{--gradient-via-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-orange-100:hover{--gradient-via-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-orange-200:hover{--gradient-via-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-orange-300:hover{--gradient-via-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-orange-400:hover{--gradient-via-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-orange-500:hover{--gradient-via-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-orange-600:hover{--gradient-via-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-orange-700:hover{--gradient-via-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-orange-800:hover{--gradient-via-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-orange-900:hover{--gradient-via-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-yellow-100:hover{--gradient-via-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-yellow-200:hover{--gradient-via-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-yellow-300:hover{--gradient-via-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-yellow-400:hover{--gradient-via-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-yellow-500:hover{--gradient-via-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-yellow-600:hover{--gradient-via-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-yellow-700:hover{--gradient-via-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-yellow-800:hover{--gradient-via-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-yellow-900:hover{--gradient-via-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-green-100:hover{--gradient-via-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-green-200:hover{--gradient-via-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-green-300:hover{--gradient-via-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-green-400:hover{--gradient-via-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-green-500:hover{--gradient-via-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-green-600:hover{--gradient-via-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-green-700:hover{--gradient-via-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-green-800:hover{--gradient-via-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-green-900:hover{--gradient-via-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-teal-100:hover{--gradient-via-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-teal-200:hover{--gradient-via-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-teal-300:hover{--gradient-via-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-teal-400:hover{--gradient-via-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-teal-500:hover{--gradient-via-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-teal-600:hover{--gradient-via-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-teal-700:hover{--gradient-via-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-teal-800:hover{--gradient-via-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-teal-900:hover{--gradient-via-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-blue-100:hover{--gradient-via-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-blue-200:hover{--gradient-via-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-blue-300:hover{--gradient-via-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-blue-400:hover{--gradient-via-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-blue-500:hover{--gradient-via-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-blue-600:hover{--gradient-via-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-blue-700:hover{--gradient-via-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-blue-800:hover{--gradient-via-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-blue-900:hover{--gradient-via-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-indigo-100:hover{--gradient-via-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-indigo-200:hover{--gradient-via-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-indigo-300:hover{--gradient-via-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-indigo-400:hover{--gradient-via-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-indigo-500:hover{--gradient-via-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-indigo-600:hover{--gradient-via-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-indigo-700:hover{--gradient-via-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-indigo-800:hover{--gradient-via-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-indigo-900:hover{--gradient-via-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-purple-100:hover{--gradient-via-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-purple-200:hover{--gradient-via-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-purple-300:hover{--gradient-via-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-purple-400:hover{--gradient-via-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-purple-500:hover{--gradient-via-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-purple-600:hover{--gradient-via-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-purple-700:hover{--gradient-via-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-purple-800:hover{--gradient-via-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-purple-900:hover{--gradient-via-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-pink-100:hover{--gradient-via-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-pink-200:hover{--gradient-via-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-pink-300:hover{--gradient-via-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-pink-400:hover{--gradient-via-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-pink-500:hover{--gradient-via-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-pink-600:hover{--gradient-via-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-pink-700:hover{--gradient-via-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-pink-800:hover{--gradient-via-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:600px){.sm\\:hover\\:via-pink-900:hover{--gradient-via-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:600px){.sm\\:hover\\:to-transparent:hover{--gradient-to-color:transparent!important}}@media (min-width:600px){.sm\\:hover\\:to-current:hover{--gradient-to-color:currentColor!important}}@media (min-width:600px){.sm\\:hover\\:to-black:hover{--gradient-to-color:#000!important}}@media (min-width:600px){.sm\\:hover\\:to-white:hover{--gradient-to-color:#fff!important}}@media (min-width:600px){.sm\\:hover\\:to-gray-100:hover{--gradient-to-color:#f7fafc!important}}@media (min-width:600px){.sm\\:hover\\:to-gray-200:hover{--gradient-to-color:#edf2f7!important}}@media (min-width:600px){.sm\\:hover\\:to-gray-300:hover{--gradient-to-color:#e2e8f0!important}}@media (min-width:600px){.sm\\:hover\\:to-gray-400:hover{--gradient-to-color:#cbd5e0!important}}@media (min-width:600px){.sm\\:hover\\:to-gray-500:hover{--gradient-to-color:#a0aec0!important}}@media (min-width:600px){.sm\\:hover\\:to-gray-600:hover{--gradient-to-color:#718096!important}}@media (min-width:600px){.sm\\:hover\\:to-gray-700:hover{--gradient-to-color:#4a5568!important}}@media (min-width:600px){.sm\\:hover\\:to-gray-800:hover{--gradient-to-color:#2d3748!important}}@media (min-width:600px){.sm\\:hover\\:to-gray-900:hover{--gradient-to-color:#1a202c!important}}@media (min-width:600px){.sm\\:hover\\:to-red-100:hover{--gradient-to-color:#fff5f5!important}}@media (min-width:600px){.sm\\:hover\\:to-red-200:hover{--gradient-to-color:#fed7d7!important}}@media (min-width:600px){.sm\\:hover\\:to-red-300:hover{--gradient-to-color:#feb2b2!important}}@media (min-width:600px){.sm\\:hover\\:to-red-400:hover{--gradient-to-color:#fc8181!important}}@media (min-width:600px){.sm\\:hover\\:to-red-500:hover{--gradient-to-color:#f56565!important}}@media (min-width:600px){.sm\\:hover\\:to-red-600:hover{--gradient-to-color:#e53e3e!important}}@media (min-width:600px){.sm\\:hover\\:to-red-700:hover{--gradient-to-color:#c53030!important}}@media (min-width:600px){.sm\\:hover\\:to-red-800:hover{--gradient-to-color:#9b2c2c!important}}@media (min-width:600px){.sm\\:hover\\:to-red-900:hover{--gradient-to-color:#742a2a!important}}@media (min-width:600px){.sm\\:hover\\:to-orange-100:hover{--gradient-to-color:#fffaf0!important}}@media (min-width:600px){.sm\\:hover\\:to-orange-200:hover{--gradient-to-color:#feebc8!important}}@media (min-width:600px){.sm\\:hover\\:to-orange-300:hover{--gradient-to-color:#fbd38d!important}}@media (min-width:600px){.sm\\:hover\\:to-orange-400:hover{--gradient-to-color:#f6ad55!important}}@media (min-width:600px){.sm\\:hover\\:to-orange-500:hover{--gradient-to-color:#ed8936!important}}@media (min-width:600px){.sm\\:hover\\:to-orange-600:hover{--gradient-to-color:#dd6b20!important}}@media (min-width:600px){.sm\\:hover\\:to-orange-700:hover{--gradient-to-color:#c05621!important}}@media (min-width:600px){.sm\\:hover\\:to-orange-800:hover{--gradient-to-color:#9c4221!important}}@media (min-width:600px){.sm\\:hover\\:to-orange-900:hover{--gradient-to-color:#7b341e!important}}@media (min-width:600px){.sm\\:hover\\:to-yellow-100:hover{--gradient-to-color:ivory!important}}@media (min-width:600px){.sm\\:hover\\:to-yellow-200:hover{--gradient-to-color:#fefcbf!important}}@media (min-width:600px){.sm\\:hover\\:to-yellow-300:hover{--gradient-to-color:#faf089!important}}@media (min-width:600px){.sm\\:hover\\:to-yellow-400:hover{--gradient-to-color:#f6e05e!important}}@media (min-width:600px){.sm\\:hover\\:to-yellow-500:hover{--gradient-to-color:#ecc94b!important}}@media (min-width:600px){.sm\\:hover\\:to-yellow-600:hover{--gradient-to-color:#d69e2e!important}}@media (min-width:600px){.sm\\:hover\\:to-yellow-700:hover{--gradient-to-color:#b7791f!important}}@media (min-width:600px){.sm\\:hover\\:to-yellow-800:hover{--gradient-to-color:#975a16!important}}@media (min-width:600px){.sm\\:hover\\:to-yellow-900:hover{--gradient-to-color:#744210!important}}@media (min-width:600px){.sm\\:hover\\:to-green-100:hover{--gradient-to-color:#f0fff4!important}}@media (min-width:600px){.sm\\:hover\\:to-green-200:hover{--gradient-to-color:#c6f6d5!important}}@media (min-width:600px){.sm\\:hover\\:to-green-300:hover{--gradient-to-color:#9ae6b4!important}}@media (min-width:600px){.sm\\:hover\\:to-green-400:hover{--gradient-to-color:#68d391!important}}@media (min-width:600px){.sm\\:hover\\:to-green-500:hover{--gradient-to-color:#48bb78!important}}@media (min-width:600px){.sm\\:hover\\:to-green-600:hover{--gradient-to-color:#38a169!important}}@media (min-width:600px){.sm\\:hover\\:to-green-700:hover{--gradient-to-color:#2f855a!important}}@media (min-width:600px){.sm\\:hover\\:to-green-800:hover{--gradient-to-color:#276749!important}}@media (min-width:600px){.sm\\:hover\\:to-green-900:hover{--gradient-to-color:#22543d!important}}@media (min-width:600px){.sm\\:hover\\:to-teal-100:hover{--gradient-to-color:#e6fffa!important}}@media (min-width:600px){.sm\\:hover\\:to-teal-200:hover{--gradient-to-color:#b2f5ea!important}}@media (min-width:600px){.sm\\:hover\\:to-teal-300:hover{--gradient-to-color:#81e6d9!important}}@media (min-width:600px){.sm\\:hover\\:to-teal-400:hover{--gradient-to-color:#4fd1c5!important}}@media (min-width:600px){.sm\\:hover\\:to-teal-500:hover{--gradient-to-color:#38b2ac!important}}@media (min-width:600px){.sm\\:hover\\:to-teal-600:hover{--gradient-to-color:#319795!important}}@media (min-width:600px){.sm\\:hover\\:to-teal-700:hover{--gradient-to-color:#2c7a7b!important}}@media (min-width:600px){.sm\\:hover\\:to-teal-800:hover{--gradient-to-color:#285e61!important}}@media (min-width:600px){.sm\\:hover\\:to-teal-900:hover{--gradient-to-color:#234e52!important}}@media (min-width:600px){.sm\\:hover\\:to-blue-100:hover{--gradient-to-color:#ebf8ff!important}}@media (min-width:600px){.sm\\:hover\\:to-blue-200:hover{--gradient-to-color:#bee3f8!important}}@media (min-width:600px){.sm\\:hover\\:to-blue-300:hover{--gradient-to-color:#90cdf4!important}}@media (min-width:600px){.sm\\:hover\\:to-blue-400:hover{--gradient-to-color:#63b3ed!important}}@media (min-width:600px){.sm\\:hover\\:to-blue-500:hover{--gradient-to-color:#4299e1!important}}@media (min-width:600px){.sm\\:hover\\:to-blue-600:hover{--gradient-to-color:#3182ce!important}}@media (min-width:600px){.sm\\:hover\\:to-blue-700:hover{--gradient-to-color:#2b6cb0!important}}@media (min-width:600px){.sm\\:hover\\:to-blue-800:hover{--gradient-to-color:#2c5282!important}}@media (min-width:600px){.sm\\:hover\\:to-blue-900:hover{--gradient-to-color:#2a4365!important}}@media (min-width:600px){.sm\\:hover\\:to-indigo-100:hover{--gradient-to-color:#ebf4ff!important}}@media (min-width:600px){.sm\\:hover\\:to-indigo-200:hover{--gradient-to-color:#c3dafe!important}}@media (min-width:600px){.sm\\:hover\\:to-indigo-300:hover{--gradient-to-color:#a3bffa!important}}@media (min-width:600px){.sm\\:hover\\:to-indigo-400:hover{--gradient-to-color:#7f9cf5!important}}@media (min-width:600px){.sm\\:hover\\:to-indigo-500:hover{--gradient-to-color:#667eea!important}}@media (min-width:600px){.sm\\:hover\\:to-indigo-600:hover{--gradient-to-color:#5a67d8!important}}@media (min-width:600px){.sm\\:hover\\:to-indigo-700:hover{--gradient-to-color:#4c51bf!important}}@media (min-width:600px){.sm\\:hover\\:to-indigo-800:hover{--gradient-to-color:#434190!important}}@media (min-width:600px){.sm\\:hover\\:to-indigo-900:hover{--gradient-to-color:#3c366b!important}}@media (min-width:600px){.sm\\:hover\\:to-purple-100:hover{--gradient-to-color:#faf5ff!important}}@media (min-width:600px){.sm\\:hover\\:to-purple-200:hover{--gradient-to-color:#e9d8fd!important}}@media (min-width:600px){.sm\\:hover\\:to-purple-300:hover{--gradient-to-color:#d6bcfa!important}}@media (min-width:600px){.sm\\:hover\\:to-purple-400:hover{--gradient-to-color:#b794f4!important}}@media (min-width:600px){.sm\\:hover\\:to-purple-500:hover{--gradient-to-color:#9f7aea!important}}@media (min-width:600px){.sm\\:hover\\:to-purple-600:hover{--gradient-to-color:#805ad5!important}}@media (min-width:600px){.sm\\:hover\\:to-purple-700:hover{--gradient-to-color:#6b46c1!important}}@media (min-width:600px){.sm\\:hover\\:to-purple-800:hover{--gradient-to-color:#553c9a!important}}@media (min-width:600px){.sm\\:hover\\:to-purple-900:hover{--gradient-to-color:#44337a!important}}@media (min-width:600px){.sm\\:hover\\:to-pink-100:hover{--gradient-to-color:#fff5f7!important}}@media (min-width:600px){.sm\\:hover\\:to-pink-200:hover{--gradient-to-color:#fed7e2!important}}@media (min-width:600px){.sm\\:hover\\:to-pink-300:hover{--gradient-to-color:#fbb6ce!important}}@media (min-width:600px){.sm\\:hover\\:to-pink-400:hover{--gradient-to-color:#f687b3!important}}@media (min-width:600px){.sm\\:hover\\:to-pink-500:hover{--gradient-to-color:#ed64a6!important}}@media (min-width:600px){.sm\\:hover\\:to-pink-600:hover{--gradient-to-color:#d53f8c!important}}@media (min-width:600px){.sm\\:hover\\:to-pink-700:hover{--gradient-to-color:#b83280!important}}@media (min-width:600px){.sm\\:hover\\:to-pink-800:hover{--gradient-to-color:#97266d!important}}@media (min-width:600px){.sm\\:hover\\:to-pink-900:hover{--gradient-to-color:#702459!important}}@media (min-width:600px){.sm\\:focus\\:from-transparent:focus{--gradient-from-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:600px){.sm\\:focus\\:from-current:focus{--gradient-from-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-black:focus{--gradient-from-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:600px){.sm\\:focus\\:from-white:focus{--gradient-from-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-gray-100:focus{--gradient-from-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-gray-200:focus{--gradient-from-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-gray-300:focus{--gradient-from-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-gray-400:focus{--gradient-from-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-gray-500:focus{--gradient-from-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-gray-600:focus{--gradient-from-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-gray-700:focus{--gradient-from-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-gray-800:focus{--gradient-from-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-gray-900:focus{--gradient-from-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-red-100:focus{--gradient-from-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-red-200:focus{--gradient-from-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-red-300:focus{--gradient-from-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-red-400:focus{--gradient-from-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-red-500:focus{--gradient-from-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-red-600:focus{--gradient-from-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-red-700:focus{--gradient-from-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-red-800:focus{--gradient-from-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-red-900:focus{--gradient-from-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-orange-100:focus{--gradient-from-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-orange-200:focus{--gradient-from-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-orange-300:focus{--gradient-from-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-orange-400:focus{--gradient-from-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-orange-500:focus{--gradient-from-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-orange-600:focus{--gradient-from-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-orange-700:focus{--gradient-from-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-orange-800:focus{--gradient-from-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-orange-900:focus{--gradient-from-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-yellow-100:focus{--gradient-from-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-yellow-200:focus{--gradient-from-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-yellow-300:focus{--gradient-from-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-yellow-400:focus{--gradient-from-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-yellow-500:focus{--gradient-from-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-yellow-600:focus{--gradient-from-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-yellow-700:focus{--gradient-from-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-yellow-800:focus{--gradient-from-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-yellow-900:focus{--gradient-from-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-green-100:focus{--gradient-from-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-green-200:focus{--gradient-from-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-green-300:focus{--gradient-from-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-green-400:focus{--gradient-from-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-green-500:focus{--gradient-from-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-green-600:focus{--gradient-from-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-green-700:focus{--gradient-from-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-green-800:focus{--gradient-from-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-green-900:focus{--gradient-from-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-teal-100:focus{--gradient-from-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-teal-200:focus{--gradient-from-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-teal-300:focus{--gradient-from-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-teal-400:focus{--gradient-from-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-teal-500:focus{--gradient-from-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-teal-600:focus{--gradient-from-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-teal-700:focus{--gradient-from-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-teal-800:focus{--gradient-from-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-teal-900:focus{--gradient-from-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-blue-100:focus{--gradient-from-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-blue-200:focus{--gradient-from-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-blue-300:focus{--gradient-from-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-blue-400:focus{--gradient-from-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-blue-500:focus{--gradient-from-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-blue-600:focus{--gradient-from-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-blue-700:focus{--gradient-from-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-blue-800:focus{--gradient-from-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-blue-900:focus{--gradient-from-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-indigo-100:focus{--gradient-from-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-indigo-200:focus{--gradient-from-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-indigo-300:focus{--gradient-from-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-indigo-400:focus{--gradient-from-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-indigo-500:focus{--gradient-from-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-indigo-600:focus{--gradient-from-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-indigo-700:focus{--gradient-from-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-indigo-800:focus{--gradient-from-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-indigo-900:focus{--gradient-from-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-purple-100:focus{--gradient-from-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-purple-200:focus{--gradient-from-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-purple-300:focus{--gradient-from-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-purple-400:focus{--gradient-from-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-purple-500:focus{--gradient-from-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-purple-600:focus{--gradient-from-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-purple-700:focus{--gradient-from-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-purple-800:focus{--gradient-from-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-purple-900:focus{--gradient-from-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-pink-100:focus{--gradient-from-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-pink-200:focus{--gradient-from-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-pink-300:focus{--gradient-from-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-pink-400:focus{--gradient-from-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-pink-500:focus{--gradient-from-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-pink-600:focus{--gradient-from-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-pink-700:focus{--gradient-from-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-pink-800:focus{--gradient-from-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:600px){.sm\\:focus\\:from-pink-900:focus{--gradient-from-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-transparent:focus{--gradient-via-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:600px){.sm\\:focus\\:via-current:focus{--gradient-via-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-black:focus{--gradient-via-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:600px){.sm\\:focus\\:via-white:focus{--gradient-via-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-gray-100:focus{--gradient-via-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-gray-200:focus{--gradient-via-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-gray-300:focus{--gradient-via-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-gray-400:focus{--gradient-via-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-gray-500:focus{--gradient-via-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-gray-600:focus{--gradient-via-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-gray-700:focus{--gradient-via-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-gray-800:focus{--gradient-via-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-gray-900:focus{--gradient-via-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-red-100:focus{--gradient-via-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-red-200:focus{--gradient-via-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-red-300:focus{--gradient-via-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-red-400:focus{--gradient-via-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-red-500:focus{--gradient-via-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-red-600:focus{--gradient-via-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-red-700:focus{--gradient-via-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-red-800:focus{--gradient-via-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-red-900:focus{--gradient-via-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-orange-100:focus{--gradient-via-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-orange-200:focus{--gradient-via-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-orange-300:focus{--gradient-via-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-orange-400:focus{--gradient-via-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-orange-500:focus{--gradient-via-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-orange-600:focus{--gradient-via-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-orange-700:focus{--gradient-via-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-orange-800:focus{--gradient-via-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-orange-900:focus{--gradient-via-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-yellow-100:focus{--gradient-via-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-yellow-200:focus{--gradient-via-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-yellow-300:focus{--gradient-via-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-yellow-400:focus{--gradient-via-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-yellow-500:focus{--gradient-via-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-yellow-600:focus{--gradient-via-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-yellow-700:focus{--gradient-via-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-yellow-800:focus{--gradient-via-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-yellow-900:focus{--gradient-via-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-green-100:focus{--gradient-via-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-green-200:focus{--gradient-via-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-green-300:focus{--gradient-via-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-green-400:focus{--gradient-via-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-green-500:focus{--gradient-via-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-green-600:focus{--gradient-via-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-green-700:focus{--gradient-via-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-green-800:focus{--gradient-via-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-green-900:focus{--gradient-via-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-teal-100:focus{--gradient-via-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-teal-200:focus{--gradient-via-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-teal-300:focus{--gradient-via-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-teal-400:focus{--gradient-via-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-teal-500:focus{--gradient-via-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-teal-600:focus{--gradient-via-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-teal-700:focus{--gradient-via-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-teal-800:focus{--gradient-via-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-teal-900:focus{--gradient-via-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-blue-100:focus{--gradient-via-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-blue-200:focus{--gradient-via-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-blue-300:focus{--gradient-via-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-blue-400:focus{--gradient-via-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-blue-500:focus{--gradient-via-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-blue-600:focus{--gradient-via-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-blue-700:focus{--gradient-via-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-blue-800:focus{--gradient-via-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-blue-900:focus{--gradient-via-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-indigo-100:focus{--gradient-via-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-indigo-200:focus{--gradient-via-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-indigo-300:focus{--gradient-via-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-indigo-400:focus{--gradient-via-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-indigo-500:focus{--gradient-via-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-indigo-600:focus{--gradient-via-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-indigo-700:focus{--gradient-via-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-indigo-800:focus{--gradient-via-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-indigo-900:focus{--gradient-via-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-purple-100:focus{--gradient-via-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-purple-200:focus{--gradient-via-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-purple-300:focus{--gradient-via-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-purple-400:focus{--gradient-via-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-purple-500:focus{--gradient-via-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-purple-600:focus{--gradient-via-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-purple-700:focus{--gradient-via-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-purple-800:focus{--gradient-via-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-purple-900:focus{--gradient-via-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-pink-100:focus{--gradient-via-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-pink-200:focus{--gradient-via-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-pink-300:focus{--gradient-via-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-pink-400:focus{--gradient-via-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-pink-500:focus{--gradient-via-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-pink-600:focus{--gradient-via-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-pink-700:focus{--gradient-via-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-pink-800:focus{--gradient-via-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:600px){.sm\\:focus\\:via-pink-900:focus{--gradient-via-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:600px){.sm\\:focus\\:to-transparent:focus{--gradient-to-color:transparent!important}}@media (min-width:600px){.sm\\:focus\\:to-current:focus{--gradient-to-color:currentColor!important}}@media (min-width:600px){.sm\\:focus\\:to-black:focus{--gradient-to-color:#000!important}}@media (min-width:600px){.sm\\:focus\\:to-white:focus{--gradient-to-color:#fff!important}}@media (min-width:600px){.sm\\:focus\\:to-gray-100:focus{--gradient-to-color:#f7fafc!important}}@media (min-width:600px){.sm\\:focus\\:to-gray-200:focus{--gradient-to-color:#edf2f7!important}}@media (min-width:600px){.sm\\:focus\\:to-gray-300:focus{--gradient-to-color:#e2e8f0!important}}@media (min-width:600px){.sm\\:focus\\:to-gray-400:focus{--gradient-to-color:#cbd5e0!important}}@media (min-width:600px){.sm\\:focus\\:to-gray-500:focus{--gradient-to-color:#a0aec0!important}}@media (min-width:600px){.sm\\:focus\\:to-gray-600:focus{--gradient-to-color:#718096!important}}@media (min-width:600px){.sm\\:focus\\:to-gray-700:focus{--gradient-to-color:#4a5568!important}}@media (min-width:600px){.sm\\:focus\\:to-gray-800:focus{--gradient-to-color:#2d3748!important}}@media (min-width:600px){.sm\\:focus\\:to-gray-900:focus{--gradient-to-color:#1a202c!important}}@media (min-width:600px){.sm\\:focus\\:to-red-100:focus{--gradient-to-color:#fff5f5!important}}@media (min-width:600px){.sm\\:focus\\:to-red-200:focus{--gradient-to-color:#fed7d7!important}}@media (min-width:600px){.sm\\:focus\\:to-red-300:focus{--gradient-to-color:#feb2b2!important}}@media (min-width:600px){.sm\\:focus\\:to-red-400:focus{--gradient-to-color:#fc8181!important}}@media (min-width:600px){.sm\\:focus\\:to-red-500:focus{--gradient-to-color:#f56565!important}}@media (min-width:600px){.sm\\:focus\\:to-red-600:focus{--gradient-to-color:#e53e3e!important}}@media (min-width:600px){.sm\\:focus\\:to-red-700:focus{--gradient-to-color:#c53030!important}}@media (min-width:600px){.sm\\:focus\\:to-red-800:focus{--gradient-to-color:#9b2c2c!important}}@media (min-width:600px){.sm\\:focus\\:to-red-900:focus{--gradient-to-color:#742a2a!important}}@media (min-width:600px){.sm\\:focus\\:to-orange-100:focus{--gradient-to-color:#fffaf0!important}}@media (min-width:600px){.sm\\:focus\\:to-orange-200:focus{--gradient-to-color:#feebc8!important}}@media (min-width:600px){.sm\\:focus\\:to-orange-300:focus{--gradient-to-color:#fbd38d!important}}@media (min-width:600px){.sm\\:focus\\:to-orange-400:focus{--gradient-to-color:#f6ad55!important}}@media (min-width:600px){.sm\\:focus\\:to-orange-500:focus{--gradient-to-color:#ed8936!important}}@media (min-width:600px){.sm\\:focus\\:to-orange-600:focus{--gradient-to-color:#dd6b20!important}}@media (min-width:600px){.sm\\:focus\\:to-orange-700:focus{--gradient-to-color:#c05621!important}}@media (min-width:600px){.sm\\:focus\\:to-orange-800:focus{--gradient-to-color:#9c4221!important}}@media (min-width:600px){.sm\\:focus\\:to-orange-900:focus{--gradient-to-color:#7b341e!important}}@media (min-width:600px){.sm\\:focus\\:to-yellow-100:focus{--gradient-to-color:ivory!important}}@media (min-width:600px){.sm\\:focus\\:to-yellow-200:focus{--gradient-to-color:#fefcbf!important}}@media (min-width:600px){.sm\\:focus\\:to-yellow-300:focus{--gradient-to-color:#faf089!important}}@media (min-width:600px){.sm\\:focus\\:to-yellow-400:focus{--gradient-to-color:#f6e05e!important}}@media (min-width:600px){.sm\\:focus\\:to-yellow-500:focus{--gradient-to-color:#ecc94b!important}}@media (min-width:600px){.sm\\:focus\\:to-yellow-600:focus{--gradient-to-color:#d69e2e!important}}@media (min-width:600px){.sm\\:focus\\:to-yellow-700:focus{--gradient-to-color:#b7791f!important}}@media (min-width:600px){.sm\\:focus\\:to-yellow-800:focus{--gradient-to-color:#975a16!important}}@media (min-width:600px){.sm\\:focus\\:to-yellow-900:focus{--gradient-to-color:#744210!important}}@media (min-width:600px){.sm\\:focus\\:to-green-100:focus{--gradient-to-color:#f0fff4!important}}@media (min-width:600px){.sm\\:focus\\:to-green-200:focus{--gradient-to-color:#c6f6d5!important}}@media (min-width:600px){.sm\\:focus\\:to-green-300:focus{--gradient-to-color:#9ae6b4!important}}@media (min-width:600px){.sm\\:focus\\:to-green-400:focus{--gradient-to-color:#68d391!important}}@media (min-width:600px){.sm\\:focus\\:to-green-500:focus{--gradient-to-color:#48bb78!important}}@media (min-width:600px){.sm\\:focus\\:to-green-600:focus{--gradient-to-color:#38a169!important}}@media (min-width:600px){.sm\\:focus\\:to-green-700:focus{--gradient-to-color:#2f855a!important}}@media (min-width:600px){.sm\\:focus\\:to-green-800:focus{--gradient-to-color:#276749!important}}@media (min-width:600px){.sm\\:focus\\:to-green-900:focus{--gradient-to-color:#22543d!important}}@media (min-width:600px){.sm\\:focus\\:to-teal-100:focus{--gradient-to-color:#e6fffa!important}}@media (min-width:600px){.sm\\:focus\\:to-teal-200:focus{--gradient-to-color:#b2f5ea!important}}@media (min-width:600px){.sm\\:focus\\:to-teal-300:focus{--gradient-to-color:#81e6d9!important}}@media (min-width:600px){.sm\\:focus\\:to-teal-400:focus{--gradient-to-color:#4fd1c5!important}}@media (min-width:600px){.sm\\:focus\\:to-teal-500:focus{--gradient-to-color:#38b2ac!important}}@media (min-width:600px){.sm\\:focus\\:to-teal-600:focus{--gradient-to-color:#319795!important}}@media (min-width:600px){.sm\\:focus\\:to-teal-700:focus{--gradient-to-color:#2c7a7b!important}}@media (min-width:600px){.sm\\:focus\\:to-teal-800:focus{--gradient-to-color:#285e61!important}}@media (min-width:600px){.sm\\:focus\\:to-teal-900:focus{--gradient-to-color:#234e52!important}}@media (min-width:600px){.sm\\:focus\\:to-blue-100:focus{--gradient-to-color:#ebf8ff!important}}@media (min-width:600px){.sm\\:focus\\:to-blue-200:focus{--gradient-to-color:#bee3f8!important}}@media (min-width:600px){.sm\\:focus\\:to-blue-300:focus{--gradient-to-color:#90cdf4!important}}@media (min-width:600px){.sm\\:focus\\:to-blue-400:focus{--gradient-to-color:#63b3ed!important}}@media (min-width:600px){.sm\\:focus\\:to-blue-500:focus{--gradient-to-color:#4299e1!important}}@media (min-width:600px){.sm\\:focus\\:to-blue-600:focus{--gradient-to-color:#3182ce!important}}@media (min-width:600px){.sm\\:focus\\:to-blue-700:focus{--gradient-to-color:#2b6cb0!important}}@media (min-width:600px){.sm\\:focus\\:to-blue-800:focus{--gradient-to-color:#2c5282!important}}@media (min-width:600px){.sm\\:focus\\:to-blue-900:focus{--gradient-to-color:#2a4365!important}}@media (min-width:600px){.sm\\:focus\\:to-indigo-100:focus{--gradient-to-color:#ebf4ff!important}}@media (min-width:600px){.sm\\:focus\\:to-indigo-200:focus{--gradient-to-color:#c3dafe!important}}@media (min-width:600px){.sm\\:focus\\:to-indigo-300:focus{--gradient-to-color:#a3bffa!important}}@media (min-width:600px){.sm\\:focus\\:to-indigo-400:focus{--gradient-to-color:#7f9cf5!important}}@media (min-width:600px){.sm\\:focus\\:to-indigo-500:focus{--gradient-to-color:#667eea!important}}@media (min-width:600px){.sm\\:focus\\:to-indigo-600:focus{--gradient-to-color:#5a67d8!important}}@media (min-width:600px){.sm\\:focus\\:to-indigo-700:focus{--gradient-to-color:#4c51bf!important}}@media (min-width:600px){.sm\\:focus\\:to-indigo-800:focus{--gradient-to-color:#434190!important}}@media (min-width:600px){.sm\\:focus\\:to-indigo-900:focus{--gradient-to-color:#3c366b!important}}@media (min-width:600px){.sm\\:focus\\:to-purple-100:focus{--gradient-to-color:#faf5ff!important}}@media (min-width:600px){.sm\\:focus\\:to-purple-200:focus{--gradient-to-color:#e9d8fd!important}}@media (min-width:600px){.sm\\:focus\\:to-purple-300:focus{--gradient-to-color:#d6bcfa!important}}@media (min-width:600px){.sm\\:focus\\:to-purple-400:focus{--gradient-to-color:#b794f4!important}}@media (min-width:600px){.sm\\:focus\\:to-purple-500:focus{--gradient-to-color:#9f7aea!important}}@media (min-width:600px){.sm\\:focus\\:to-purple-600:focus{--gradient-to-color:#805ad5!important}}@media (min-width:600px){.sm\\:focus\\:to-purple-700:focus{--gradient-to-color:#6b46c1!important}}@media (min-width:600px){.sm\\:focus\\:to-purple-800:focus{--gradient-to-color:#553c9a!important}}@media (min-width:600px){.sm\\:focus\\:to-purple-900:focus{--gradient-to-color:#44337a!important}}@media (min-width:600px){.sm\\:focus\\:to-pink-100:focus{--gradient-to-color:#fff5f7!important}}@media (min-width:600px){.sm\\:focus\\:to-pink-200:focus{--gradient-to-color:#fed7e2!important}}@media (min-width:600px){.sm\\:focus\\:to-pink-300:focus{--gradient-to-color:#fbb6ce!important}}@media (min-width:600px){.sm\\:focus\\:to-pink-400:focus{--gradient-to-color:#f687b3!important}}@media (min-width:600px){.sm\\:focus\\:to-pink-500:focus{--gradient-to-color:#ed64a6!important}}@media (min-width:600px){.sm\\:focus\\:to-pink-600:focus{--gradient-to-color:#d53f8c!important}}@media (min-width:600px){.sm\\:focus\\:to-pink-700:focus{--gradient-to-color:#b83280!important}}@media (min-width:600px){.sm\\:focus\\:to-pink-800:focus{--gradient-to-color:#97266d!important}}@media (min-width:600px){.sm\\:focus\\:to-pink-900:focus{--gradient-to-color:#702459!important}}@media (min-width:600px){.sm\\:bg-opacity-0{--bg-opacity:0!important}}@media (min-width:600px){.sm\\:bg-opacity-25{--bg-opacity:0.25!important}}@media (min-width:600px){.sm\\:bg-opacity-50{--bg-opacity:0.5!important}}@media (min-width:600px){.sm\\:bg-opacity-75{--bg-opacity:0.75!important}}@media (min-width:600px){.sm\\:bg-opacity-100{--bg-opacity:1!important}}@media (min-width:600px){.sm\\:hover\\:bg-opacity-0:hover{--bg-opacity:0!important}}@media (min-width:600px){.sm\\:hover\\:bg-opacity-25:hover{--bg-opacity:0.25!important}}@media (min-width:600px){.sm\\:hover\\:bg-opacity-50:hover{--bg-opacity:0.5!important}}@media (min-width:600px){.sm\\:hover\\:bg-opacity-75:hover{--bg-opacity:0.75!important}}@media (min-width:600px){.sm\\:hover\\:bg-opacity-100:hover{--bg-opacity:1!important}}@media (min-width:600px){.sm\\:focus\\:bg-opacity-0:focus{--bg-opacity:0!important}}@media (min-width:600px){.sm\\:focus\\:bg-opacity-25:focus{--bg-opacity:0.25!important}}@media (min-width:600px){.sm\\:focus\\:bg-opacity-50:focus{--bg-opacity:0.5!important}}@media (min-width:600px){.sm\\:focus\\:bg-opacity-75:focus{--bg-opacity:0.75!important}}@media (min-width:600px){.sm\\:focus\\:bg-opacity-100:focus{--bg-opacity:1!important}}@media (min-width:600px){.sm\\:bg-bottom{background-position:bottom!important}}@media (min-width:600px){.sm\\:bg-center{background-position:50%!important}}@media (min-width:600px){.sm\\:bg-left{background-position:0!important}}@media (min-width:600px){.sm\\:bg-left-bottom{background-position:0 100%!important}}@media (min-width:600px){.sm\\:bg-left-top{background-position:0 0!important}}@media (min-width:600px){.sm\\:bg-right{background-position:100%!important}}@media (min-width:600px){.sm\\:bg-right-bottom{background-position:100% 100%!important}}@media (min-width:600px){.sm\\:bg-right-top{background-position:100% 0!important}}@media (min-width:600px){.sm\\:bg-top{background-position:top!important}}@media (min-width:600px){.sm\\:bg-repeat{background-repeat:repeat!important}}@media (min-width:600px){.sm\\:bg-no-repeat{background-repeat:no-repeat!important}}@media (min-width:600px){.sm\\:bg-repeat-x{background-repeat:repeat-x!important}}@media (min-width:600px){.sm\\:bg-repeat-y{background-repeat:repeat-y!important}}@media (min-width:600px){.sm\\:bg-repeat-round{background-repeat:round!important}}@media (min-width:600px){.sm\\:bg-repeat-space{background-repeat:space!important}}@media (min-width:600px){.sm\\:bg-auto{background-size:auto!important}}@media (min-width:600px){.sm\\:bg-cover{background-size:cover!important}}@media (min-width:600px){.sm\\:bg-contain{background-size:contain!important}}@media (min-width:600px){.sm\\:border-collapse{border-collapse:collapse!important}}@media (min-width:600px){.sm\\:border-separate{border-collapse:initial!important}}@media (min-width:600px){.sm\\:border-opacity-0{--border-opacity:0!important}}@media (min-width:600px){.sm\\:border-opacity-25{--border-opacity:0.25!important}}@media (min-width:600px){.sm\\:border-opacity-50{--border-opacity:0.5!important}}@media (min-width:600px){.sm\\:border-opacity-75{--border-opacity:0.75!important}}@media (min-width:600px){.sm\\:border-opacity-100{--border-opacity:1!important}}@media (min-width:600px){.sm\\:hover\\:border-opacity-0:hover{--border-opacity:0!important}}@media (min-width:600px){.sm\\:hover\\:border-opacity-25:hover{--border-opacity:0.25!important}}@media (min-width:600px){.sm\\:hover\\:border-opacity-50:hover{--border-opacity:0.5!important}}@media (min-width:600px){.sm\\:hover\\:border-opacity-75:hover{--border-opacity:0.75!important}}@media (min-width:600px){.sm\\:hover\\:border-opacity-100:hover{--border-opacity:1!important}}@media (min-width:600px){.sm\\:focus\\:border-opacity-0:focus{--border-opacity:0!important}}@media (min-width:600px){.sm\\:focus\\:border-opacity-25:focus{--border-opacity:0.25!important}}@media (min-width:600px){.sm\\:focus\\:border-opacity-50:focus{--border-opacity:0.5!important}}@media (min-width:600px){.sm\\:focus\\:border-opacity-75:focus{--border-opacity:0.75!important}}@media (min-width:600px){.sm\\:focus\\:border-opacity-100:focus{--border-opacity:1!important}}@media (min-width:600px){.sm\\:rounded-none{border-radius:0!important}}@media (min-width:600px){.sm\\:rounded-sm{border-radius:.125rem!important}}@media (min-width:600px){.sm\\:rounded{border-radius:.25rem!important}}@media (min-width:600px){.sm\\:rounded-md{border-radius:.375rem!important}}@media (min-width:600px){.sm\\:rounded-lg{border-radius:.5rem!important}}@media (min-width:600px){.sm\\:rounded-xl{border-radius:.75rem!important}}@media (min-width:600px){.sm\\:rounded-2xl{border-radius:1rem!important}}@media (min-width:600px){.sm\\:rounded-3xl{border-radius:1.5rem!important}}@media (min-width:600px){.sm\\:rounded-full{border-radius:9999px!important}}@media (min-width:600px){.sm\\:rounded-t-none{border-top-left-radius:0!important;border-top-right-radius:0!important}}@media (min-width:600px){.sm\\:rounded-r-none{border-top-right-radius:0!important;border-bottom-right-radius:0!important}}@media (min-width:600px){.sm\\:rounded-b-none{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}}@media (min-width:600px){.sm\\:rounded-l-none{border-top-left-radius:0!important;border-bottom-left-radius:0!important}}@media (min-width:600px){.sm\\:rounded-t-sm{border-top-left-radius:.125rem!important}}@media (min-width:600px){.sm\\:rounded-r-sm,.sm\\:rounded-t-sm{border-top-right-radius:.125rem!important}}@media (min-width:600px){.sm\\:rounded-b-sm,.sm\\:rounded-r-sm{border-bottom-right-radius:.125rem!important}}@media (min-width:600px){.sm\\:rounded-b-sm,.sm\\:rounded-l-sm{border-bottom-left-radius:.125rem!important}.sm\\:rounded-l-sm{border-top-left-radius:.125rem!important}}@media (min-width:600px){.sm\\:rounded-t{border-top-left-radius:.25rem!important}}@media (min-width:600px){.sm\\:rounded-r,.sm\\:rounded-t{border-top-right-radius:.25rem!important}}@media (min-width:600px){.sm\\:rounded-b,.sm\\:rounded-r{border-bottom-right-radius:.25rem!important}}@media (min-width:600px){.sm\\:rounded-b,.sm\\:rounded-l{border-bottom-left-radius:.25rem!important}.sm\\:rounded-l{border-top-left-radius:.25rem!important}}@media (min-width:600px){.sm\\:rounded-t-md{border-top-left-radius:.375rem!important}}@media (min-width:600px){.sm\\:rounded-r-md,.sm\\:rounded-t-md{border-top-right-radius:.375rem!important}}@media (min-width:600px){.sm\\:rounded-b-md,.sm\\:rounded-r-md{border-bottom-right-radius:.375rem!important}}@media (min-width:600px){.sm\\:rounded-b-md,.sm\\:rounded-l-md{border-bottom-left-radius:.375rem!important}.sm\\:rounded-l-md{border-top-left-radius:.375rem!important}}@media (min-width:600px){.sm\\:rounded-t-lg{border-top-left-radius:.5rem!important}}@media (min-width:600px){.sm\\:rounded-r-lg,.sm\\:rounded-t-lg{border-top-right-radius:.5rem!important}}@media (min-width:600px){.sm\\:rounded-b-lg,.sm\\:rounded-r-lg{border-bottom-right-radius:.5rem!important}}@media (min-width:600px){.sm\\:rounded-b-lg,.sm\\:rounded-l-lg{border-bottom-left-radius:.5rem!important}.sm\\:rounded-l-lg{border-top-left-radius:.5rem!important}}@media (min-width:600px){.sm\\:rounded-t-xl{border-top-left-radius:.75rem!important}}@media (min-width:600px){.sm\\:rounded-r-xl,.sm\\:rounded-t-xl{border-top-right-radius:.75rem!important}}@media (min-width:600px){.sm\\:rounded-b-xl,.sm\\:rounded-r-xl{border-bottom-right-radius:.75rem!important}}@media (min-width:600px){.sm\\:rounded-b-xl,.sm\\:rounded-l-xl{border-bottom-left-radius:.75rem!important}.sm\\:rounded-l-xl{border-top-left-radius:.75rem!important}}@media (min-width:600px){.sm\\:rounded-t-2xl{border-top-left-radius:1rem!important}}@media (min-width:600px){.sm\\:rounded-r-2xl,.sm\\:rounded-t-2xl{border-top-right-radius:1rem!important}}@media (min-width:600px){.sm\\:rounded-b-2xl,.sm\\:rounded-r-2xl{border-bottom-right-radius:1rem!important}}@media (min-width:600px){.sm\\:rounded-b-2xl,.sm\\:rounded-l-2xl{border-bottom-left-radius:1rem!important}.sm\\:rounded-l-2xl{border-top-left-radius:1rem!important}}@media (min-width:600px){.sm\\:rounded-t-3xl{border-top-left-radius:1.5rem!important}}@media (min-width:600px){.sm\\:rounded-r-3xl,.sm\\:rounded-t-3xl{border-top-right-radius:1.5rem!important}}@media (min-width:600px){.sm\\:rounded-b-3xl,.sm\\:rounded-r-3xl{border-bottom-right-radius:1.5rem!important}}@media (min-width:600px){.sm\\:rounded-b-3xl,.sm\\:rounded-l-3xl{border-bottom-left-radius:1.5rem!important}.sm\\:rounded-l-3xl{border-top-left-radius:1.5rem!important}}@media (min-width:600px){.sm\\:rounded-t-full{border-top-left-radius:9999px!important}}@media (min-width:600px){.sm\\:rounded-r-full,.sm\\:rounded-t-full{border-top-right-radius:9999px!important}}@media (min-width:600px){.sm\\:rounded-b-full,.sm\\:rounded-r-full{border-bottom-right-radius:9999px!important}}@media (min-width:600px){.sm\\:rounded-b-full,.sm\\:rounded-l-full{border-bottom-left-radius:9999px!important}.sm\\:rounded-l-full{border-top-left-radius:9999px!important}}@media (min-width:600px){.sm\\:rounded-tl-none{border-top-left-radius:0!important}}@media (min-width:600px){.sm\\:rounded-tr-none{border-top-right-radius:0!important}}@media (min-width:600px){.sm\\:rounded-br-none{border-bottom-right-radius:0!important}}@media (min-width:600px){.sm\\:rounded-bl-none{border-bottom-left-radius:0!important}}@media (min-width:600px){.sm\\:rounded-tl-sm{border-top-left-radius:.125rem!important}}@media (min-width:600px){.sm\\:rounded-tr-sm{border-top-right-radius:.125rem!important}}@media (min-width:600px){.sm\\:rounded-br-sm{border-bottom-right-radius:.125rem!important}}@media (min-width:600px){.sm\\:rounded-bl-sm{border-bottom-left-radius:.125rem!important}}@media (min-width:600px){.sm\\:rounded-tl{border-top-left-radius:.25rem!important}}@media (min-width:600px){.sm\\:rounded-tr{border-top-right-radius:.25rem!important}}@media (min-width:600px){.sm\\:rounded-br{border-bottom-right-radius:.25rem!important}}@media (min-width:600px){.sm\\:rounded-bl{border-bottom-left-radius:.25rem!important}}@media (min-width:600px){.sm\\:rounded-tl-md{border-top-left-radius:.375rem!important}}@media (min-width:600px){.sm\\:rounded-tr-md{border-top-right-radius:.375rem!important}}@media (min-width:600px){.sm\\:rounded-br-md{border-bottom-right-radius:.375rem!important}}@media (min-width:600px){.sm\\:rounded-bl-md{border-bottom-left-radius:.375rem!important}}@media (min-width:600px){.sm\\:rounded-tl-lg{border-top-left-radius:.5rem!important}}@media (min-width:600px){.sm\\:rounded-tr-lg{border-top-right-radius:.5rem!important}}@media (min-width:600px){.sm\\:rounded-br-lg{border-bottom-right-radius:.5rem!important}}@media (min-width:600px){.sm\\:rounded-bl-lg{border-bottom-left-radius:.5rem!important}}@media (min-width:600px){.sm\\:rounded-tl-xl{border-top-left-radius:.75rem!important}}@media (min-width:600px){.sm\\:rounded-tr-xl{border-top-right-radius:.75rem!important}}@media (min-width:600px){.sm\\:rounded-br-xl{border-bottom-right-radius:.75rem!important}}@media (min-width:600px){.sm\\:rounded-bl-xl{border-bottom-left-radius:.75rem!important}}@media (min-width:600px){.sm\\:rounded-tl-2xl{border-top-left-radius:1rem!important}}@media (min-width:600px){.sm\\:rounded-tr-2xl{border-top-right-radius:1rem!important}}@media (min-width:600px){.sm\\:rounded-br-2xl{border-bottom-right-radius:1rem!important}}@media (min-width:600px){.sm\\:rounded-bl-2xl{border-bottom-left-radius:1rem!important}}@media (min-width:600px){.sm\\:rounded-tl-3xl{border-top-left-radius:1.5rem!important}}@media (min-width:600px){.sm\\:rounded-tr-3xl{border-top-right-radius:1.5rem!important}}@media (min-width:600px){.sm\\:rounded-br-3xl{border-bottom-right-radius:1.5rem!important}}@media (min-width:600px){.sm\\:rounded-bl-3xl{border-bottom-left-radius:1.5rem!important}}@media (min-width:600px){.sm\\:rounded-tl-full{border-top-left-radius:9999px!important}}@media (min-width:600px){.sm\\:rounded-tr-full{border-top-right-radius:9999px!important}}@media (min-width:600px){.sm\\:rounded-br-full{border-bottom-right-radius:9999px!important}}@media (min-width:600px){.sm\\:rounded-bl-full{border-bottom-left-radius:9999px!important}}@media (min-width:600px){.sm\\:border-solid{border-style:solid!important}}@media (min-width:600px){.sm\\:border-dashed{border-style:dashed!important}}@media (min-width:600px){.sm\\:border-dotted{border-style:dotted!important}}@media (min-width:600px){.sm\\:border-double{border-style:double!important}}@media (min-width:600px){.sm\\:border-none{border-style:none!important}}@media (min-width:600px){.sm\\:border-0{border-width:0!important}}@media (min-width:600px){.sm\\:border-2{border-width:2px!important}}@media (min-width:600px){.sm\\:border-4{border-width:4px!important}}@media (min-width:600px){.sm\\:border-8{border-width:8px!important}}@media (min-width:600px){.sm\\:border{border-width:1px!important}}@media (min-width:600px){.sm\\:border-t-0{border-top-width:0!important}}@media (min-width:600px){.sm\\:border-r-0{border-right-width:0!important}}@media (min-width:600px){.sm\\:border-b-0{border-bottom-width:0!important}}@media (min-width:600px){.sm\\:border-l-0{border-left-width:0!important}}@media (min-width:600px){.sm\\:border-t-2{border-top-width:2px!important}}@media (min-width:600px){.sm\\:border-r-2{border-right-width:2px!important}}@media (min-width:600px){.sm\\:border-b-2{border-bottom-width:2px!important}}@media (min-width:600px){.sm\\:border-l-2{border-left-width:2px!important}}@media (min-width:600px){.sm\\:border-t-4{border-top-width:4px!important}}@media (min-width:600px){.sm\\:border-r-4{border-right-width:4px!important}}@media (min-width:600px){.sm\\:border-b-4{border-bottom-width:4px!important}}@media (min-width:600px){.sm\\:border-l-4{border-left-width:4px!important}}@media (min-width:600px){.sm\\:border-t-8{border-top-width:8px!important}}@media (min-width:600px){.sm\\:border-r-8{border-right-width:8px!important}}@media (min-width:600px){.sm\\:border-b-8{border-bottom-width:8px!important}}@media (min-width:600px){.sm\\:border-l-8{border-left-width:8px!important}}@media (min-width:600px){.sm\\:border-t{border-top-width:1px!important}}@media (min-width:600px){.sm\\:border-r{border-right-width:1px!important}}@media (min-width:600px){.sm\\:border-b{border-bottom-width:1px!important}}@media (min-width:600px){.sm\\:border-l{border-left-width:1px!important}}@media (min-width:600px){.sm\\:box-border{box-sizing:border-box!important}}@media (min-width:600px){.sm\\:box-content{box-sizing:initial!important}}@media (min-width:600px){.sm\\:cursor-crosshair{cursor:crosshair!important}}@media (min-width:600px){.sm\\:cursor-zoom-in{cursor:zoom-in!important}}@media (min-width:600px){.sm\\:block{display:block!important}}@media (min-width:600px){.sm\\:inline-block{display:inline-block!important}}@media (min-width:600px){.sm\\:inline{display:inline!important}}@media (min-width:600px){.sm\\:flex{display:flex!important}}@media (min-width:600px){.sm\\:inline-flex{display:inline-flex!important}}@media (min-width:600px){.sm\\:table{display:table!important}}@media (min-width:600px){.sm\\:table-caption{display:table-caption!important}}@media (min-width:600px){.sm\\:table-cell{display:table-cell!important}}@media (min-width:600px){.sm\\:table-column{display:table-column!important}}@media (min-width:600px){.sm\\:table-column-group{display:table-column-group!important}}@media (min-width:600px){.sm\\:table-footer-group{display:table-footer-group!important}}@media (min-width:600px){.sm\\:table-header-group{display:table-header-group!important}}@media (min-width:600px){.sm\\:table-row-group{display:table-row-group!important}}@media (min-width:600px){.sm\\:table-row{display:table-row!important}}@media (min-width:600px){.sm\\:flow-root{display:flow-root!important}}@media (min-width:600px){.sm\\:grid{display:grid!important}}@media (min-width:600px){.sm\\:inline-grid{display:inline-grid!important}}@media (min-width:600px){.sm\\:contents{display:contents!important}}@media (min-width:600px){.sm\\:hidden{display:none!important}}@media (min-width:600px){.sm\\:flex-row{flex-direction:row!important}}@media (min-width:600px){.sm\\:flex-row-reverse{flex-direction:row-reverse!important}}@media (min-width:600px){.sm\\:flex-col{flex-direction:column!important}}@media (min-width:600px){.sm\\:flex-col-reverse{flex-direction:column-reverse!important}}@media (min-width:600px){.sm\\:flex-wrap{flex-wrap:wrap!important}}@media (min-width:600px){.sm\\:flex-wrap-reverse{flex-wrap:wrap-reverse!important}}@media (min-width:600px){.sm\\:flex-no-wrap{flex-wrap:nowrap!important}}@media (min-width:600px){.sm\\:place-items-auto{place-items:auto!important}}@media (min-width:600px){.sm\\:place-items-start{place-items:start!important}}@media (min-width:600px){.sm\\:place-items-end{place-items:end!important}}@media (min-width:600px){.sm\\:place-items-center{place-items:center!important}}@media (min-width:600px){.sm\\:place-items-stretch{place-items:stretch!important}}@media (min-width:600px){.sm\\:place-content-center{place-content:center!important}}@media (min-width:600px){.sm\\:place-content-start{place-content:start!important}}@media (min-width:600px){.sm\\:place-content-end{place-content:end!important}}@media (min-width:600px){.sm\\:place-content-between{place-content:space-between!important}}@media (min-width:600px){.sm\\:place-content-around{place-content:space-around!important}}@media (min-width:600px){.sm\\:place-content-evenly{place-content:space-evenly!important}}@media (min-width:600px){.sm\\:place-content-stretch{place-content:stretch!important}}@media (min-width:600px){.sm\\:place-self-auto{place-self:auto!important}}@media (min-width:600px){.sm\\:place-self-start{place-self:start!important}}@media (min-width:600px){.sm\\:place-self-end{place-self:end!important}}@media (min-width:600px){.sm\\:place-self-center{place-self:center!important}}@media (min-width:600px){.sm\\:place-self-stretch{place-self:stretch!important}}@media (min-width:600px){.sm\\:items-start{align-items:flex-start!important}}@media (min-width:600px){.sm\\:items-end{align-items:flex-end!important}}@media (min-width:600px){.sm\\:items-center{align-items:center!important}}@media (min-width:600px){.sm\\:items-baseline{align-items:baseline!important}}@media (min-width:600px){.sm\\:items-stretch{align-items:stretch!important}}@media (min-width:600px){.sm\\:content-center{align-content:center!important}}@media (min-width:600px){.sm\\:content-start{align-content:flex-start!important}}@media (min-width:600px){.sm\\:content-end{align-content:flex-end!important}}@media (min-width:600px){.sm\\:content-between{align-content:space-between!important}}@media (min-width:600px){.sm\\:content-around{align-content:space-around!important}}@media (min-width:600px){.sm\\:content-evenly{align-content:space-evenly!important}}@media (min-width:600px){.sm\\:self-auto{align-self:auto!important}}@media (min-width:600px){.sm\\:self-start{align-self:flex-start!important}}@media (min-width:600px){.sm\\:self-end{align-self:flex-end!important}}@media (min-width:600px){.sm\\:self-center{align-self:center!important}}@media (min-width:600px){.sm\\:self-stretch{align-self:stretch!important}}@media (min-width:600px){.sm\\:justify-items-auto{justify-items:auto!important}}@media (min-width:600px){.sm\\:justify-items-start{justify-items:start!important}}@media (min-width:600px){.sm\\:justify-items-end{justify-items:end!important}}@media (min-width:600px){.sm\\:justify-items-center{justify-items:center!important}}@media (min-width:600px){.sm\\:justify-items-stretch{justify-items:stretch!important}}@media (min-width:600px){.sm\\:justify-start{justify-content:flex-start!important}}@media (min-width:600px){.sm\\:justify-end{justify-content:flex-end!important}}@media (min-width:600px){.sm\\:justify-center{justify-content:center!important}}@media (min-width:600px){.sm\\:justify-between{justify-content:space-between!important}}@media (min-width:600px){.sm\\:justify-around{justify-content:space-around!important}}@media (min-width:600px){.sm\\:justify-evenly{justify-content:space-evenly!important}}@media (min-width:600px){.sm\\:justify-self-auto{justify-self:auto!important}}@media (min-width:600px){.sm\\:justify-self-start{justify-self:start!important}}@media (min-width:600px){.sm\\:justify-self-end{justify-self:end!important}}@media (min-width:600px){.sm\\:justify-self-center{justify-self:center!important}}@media (min-width:600px){.sm\\:justify-self-stretch{justify-self:stretch!important}}@media (min-width:600px){.sm\\:flex-1{flex:1 1 0%!important}}@media (min-width:600px){.sm\\:flex-auto{flex:1 1 auto!important}}@media (min-width:600px){.sm\\:flex-initial{flex:0 1 auto!important}}@media (min-width:600px){.sm\\:flex-none{flex:none!important}}@media (min-width:600px){.sm\\:flex-grow-0{flex-grow:0!important}}@media (min-width:600px){.sm\\:flex-grow{flex-grow:1!important}}@media (min-width:600px){.sm\\:flex-shrink-0{flex-shrink:0!important}}@media (min-width:600px){.sm\\:flex-shrink{flex-shrink:1!important}}@media (min-width:600px){.sm\\:order-1{order:1!important}}@media (min-width:600px){.sm\\:order-2{order:2!important}}@media (min-width:600px){.sm\\:order-3{order:3!important}}@media (min-width:600px){.sm\\:order-4{order:4!important}}@media (min-width:600px){.sm\\:order-5{order:5!important}}@media (min-width:600px){.sm\\:order-6{order:6!important}}@media (min-width:600px){.sm\\:order-7{order:7!important}}@media (min-width:600px){.sm\\:order-8{order:8!important}}@media (min-width:600px){.sm\\:order-9{order:9!important}}@media (min-width:600px){.sm\\:order-10{order:10!important}}@media (min-width:600px){.sm\\:order-11{order:11!important}}@media (min-width:600px){.sm\\:order-12{order:12!important}}@media (min-width:600px){.sm\\:order-first{order:-9999!important}}@media (min-width:600px){.sm\\:order-last{order:9999!important}}@media (min-width:600px){.sm\\:order-none{order:0!important}}@media (min-width:600px){.sm\\:float-right{float:right!important}}@media (min-width:600px){.sm\\:float-left{float:left!important}}@media (min-width:600px){.sm\\:float-none{float:none!important}}@media (min-width:600px){.sm\\:clearfix:after{content:\"\"!important;display:table!important;clear:both!important}}@media (min-width:600px){.sm\\:clear-left{clear:left!important}}@media (min-width:600px){.sm\\:clear-right{clear:right!important}}@media (min-width:600px){.sm\\:clear-both{clear:both!important}}@media (min-width:600px){.sm\\:clear-none{clear:none!important}}@media (min-width:600px){.sm\\:font-sans{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji!important}}@media (min-width:600px){.sm\\:font-serif{font-family:Georgia,Cambria,Times New Roman,Times,serif!important}}@media (min-width:600px){.sm\\:font-mono{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}}@media (min-width:600px){.sm\\:font-hairline{font-weight:100!important}}@media (min-width:600px){.sm\\:font-thin{font-weight:200!important}}@media (min-width:600px){.sm\\:font-light{font-weight:300!important}}@media (min-width:600px){.sm\\:font-normal{font-weight:400!important}}@media (min-width:600px){.sm\\:font-medium{font-weight:500!important}}@media (min-width:600px){.sm\\:font-semibold{font-weight:600!important}}@media (min-width:600px){.sm\\:font-bold{font-weight:700!important}}@media (min-width:600px){.sm\\:font-extrabold{font-weight:800!important}}@media (min-width:600px){.sm\\:font-black{font-weight:900!important}}@media (min-width:600px){.sm\\:hover\\:font-hairline:hover{font-weight:100!important}}@media (min-width:600px){.sm\\:hover\\:font-thin:hover{font-weight:200!important}}@media (min-width:600px){.sm\\:hover\\:font-light:hover{font-weight:300!important}}@media (min-width:600px){.sm\\:hover\\:font-normal:hover{font-weight:400!important}}@media (min-width:600px){.sm\\:hover\\:font-medium:hover{font-weight:500!important}}@media (min-width:600px){.sm\\:hover\\:font-semibold:hover{font-weight:600!important}}@media (min-width:600px){.sm\\:hover\\:font-bold:hover{font-weight:700!important}}@media (min-width:600px){.sm\\:hover\\:font-extrabold:hover{font-weight:800!important}}@media (min-width:600px){.sm\\:hover\\:font-black:hover{font-weight:900!important}}@media (min-width:600px){.sm\\:focus\\:font-hairline:focus{font-weight:100!important}}@media (min-width:600px){.sm\\:focus\\:font-thin:focus{font-weight:200!important}}@media (min-width:600px){.sm\\:focus\\:font-light:focus{font-weight:300!important}}@media (min-width:600px){.sm\\:focus\\:font-normal:focus{font-weight:400!important}}@media (min-width:600px){.sm\\:focus\\:font-medium:focus{font-weight:500!important}}@media (min-width:600px){.sm\\:focus\\:font-semibold:focus{font-weight:600!important}}@media (min-width:600px){.sm\\:focus\\:font-bold:focus{font-weight:700!important}}@media (min-width:600px){.sm\\:focus\\:font-extrabold:focus{font-weight:800!important}}@media (min-width:600px){.sm\\:focus\\:font-black:focus{font-weight:900!important}}@media (min-width:600px){.sm\\:h-0{height:0!important}}@media (min-width:600px){.sm\\:h-1{height:.25rem!important}}@media (min-width:600px){.sm\\:h-2{height:.5rem!important}}@media (min-width:600px){.sm\\:h-3{height:.75rem!important}}@media (min-width:600px){.sm\\:h-4{height:1rem!important}}@media (min-width:600px){.sm\\:h-5{height:1.25rem!important}}@media (min-width:600px){.sm\\:h-6{height:1.5rem!important}}@media (min-width:600px){.sm\\:h-8{height:2rem!important}}@media (min-width:600px){.sm\\:h-10{height:2.5rem!important}}@media (min-width:600px){.sm\\:h-12{height:3rem!important}}@media (min-width:600px){.sm\\:h-16{height:4rem!important}}@media (min-width:600px){.sm\\:h-20{height:5rem!important}}@media (min-width:600px){.sm\\:h-24{height:6rem!important}}@media (min-width:600px){.sm\\:h-32{height:8rem!important}}@media (min-width:600px){.sm\\:h-40{height:10rem!important}}@media (min-width:600px){.sm\\:h-48{height:12rem!important}}@media (min-width:600px){.sm\\:h-56{height:14rem!important}}@media (min-width:600px){.sm\\:h-64{height:16rem!important}}@media (min-width:600px){.sm\\:h-auto{height:auto!important}}@media (min-width:600px){.sm\\:h-px{height:1px!important}}@media (min-width:600px){.sm\\:h-full{height:100%!important}}@media (min-width:600px){.sm\\:h-screen{height:100vh!important}}@media (min-width:600px){.sm\\:text-xs{font-size:.75rem!important}}@media (min-width:600px){.sm\\:text-sm{font-size:.875rem!important}}@media (min-width:600px){.sm\\:text-base{font-size:1rem!important}}@media (min-width:600px){.sm\\:text-lg{font-size:1.125rem!important}}@media (min-width:600px){.sm\\:text-xl{font-size:1.25rem!important}}@media (min-width:600px){.sm\\:text-2xl{font-size:1.5rem!important}}@media (min-width:600px){.sm\\:text-3xl{font-size:1.875rem!important}}@media (min-width:600px){.sm\\:text-4xl{font-size:2.25rem!important}}@media (min-width:600px){.sm\\:text-5xl{font-size:3rem!important}}@media (min-width:600px){.sm\\:text-6xl{font-size:4rem!important}}@media (min-width:600px){.sm\\:leading-3{line-height:.75rem!important}}@media (min-width:600px){.sm\\:leading-4{line-height:1rem!important}}@media (min-width:600px){.sm\\:leading-5{line-height:1.25rem!important}}@media (min-width:600px){.sm\\:leading-6{line-height:1.5rem!important}}@media (min-width:600px){.sm\\:leading-7{line-height:1.75rem!important}}@media (min-width:600px){.sm\\:leading-8{line-height:2rem!important}}@media (min-width:600px){.sm\\:leading-9{line-height:2.25rem!important}}@media (min-width:600px){.sm\\:leading-10{line-height:2.5rem!important}}@media (min-width:600px){.sm\\:leading-none{line-height:1!important}}@media (min-width:600px){.sm\\:leading-tight{line-height:1.25!important}}@media (min-width:600px){.sm\\:leading-snug{line-height:1.375!important}}@media (min-width:600px){.sm\\:leading-normal{line-height:1.5!important}}@media (min-width:600px){.sm\\:leading-relaxed{line-height:1.625!important}}@media (min-width:600px){.sm\\:leading-loose{line-height:2!important}}@media (min-width:600px){.sm\\:list-inside{list-style-position:inside!important}}@media (min-width:600px){.sm\\:list-outside{list-style-position:outside!important}}@media (min-width:600px){.sm\\:list-none{list-style-type:none!important}}@media (min-width:600px){.sm\\:list-disc{list-style-type:disc!important}}@media (min-width:600px){.sm\\:list-decimal{list-style-type:decimal!important}}@media (min-width:600px){.sm\\:m-0{margin:0!important}}@media (min-width:600px){.sm\\:m-1{margin:.25rem!important}}@media (min-width:600px){.sm\\:m-2{margin:.5rem!important}}@media (min-width:600px){.sm\\:m-3{margin:.75rem!important}}@media (min-width:600px){.sm\\:m-4{margin:1rem!important}}@media (min-width:600px){.sm\\:m-5{margin:1.25rem!important}}@media (min-width:600px){.sm\\:m-6{margin:1.5rem!important}}@media (min-width:600px){.sm\\:m-8{margin:2rem!important}}@media (min-width:600px){.sm\\:m-10{margin:2.5rem!important}}@media (min-width:600px){.sm\\:m-12{margin:3rem!important}}@media (min-width:600px){.sm\\:m-16{margin:4rem!important}}@media (min-width:600px){.sm\\:m-20{margin:5rem!important}}@media (min-width:600px){.sm\\:m-24{margin:6rem!important}}@media (min-width:600px){.sm\\:m-32{margin:8rem!important}}@media (min-width:600px){.sm\\:m-40{margin:10rem!important}}@media (min-width:600px){.sm\\:m-48{margin:12rem!important}}@media (min-width:600px){.sm\\:m-56{margin:14rem!important}}@media (min-width:600px){.sm\\:m-64{margin:16rem!important}}@media (min-width:600px){.sm\\:m-auto{margin:auto!important}}@media (min-width:600px){.sm\\:m-px{margin:1px!important}}@media (min-width:600px){.sm\\:-m-1{margin:-.25rem!important}}@media (min-width:600px){.sm\\:-m-2{margin:-.5rem!important}}@media (min-width:600px){.sm\\:-m-3{margin:-.75rem!important}}@media (min-width:600px){.sm\\:-m-4{margin:-1rem!important}}@media (min-width:600px){.sm\\:-m-5{margin:-1.25rem!important}}@media (min-width:600px){.sm\\:-m-6{margin:-1.5rem!important}}@media (min-width:600px){.sm\\:-m-8{margin:-2rem!important}}@media (min-width:600px){.sm\\:-m-10{margin:-2.5rem!important}}@media (min-width:600px){.sm\\:-m-12{margin:-3rem!important}}@media (min-width:600px){.sm\\:-m-16{margin:-4rem!important}}@media (min-width:600px){.sm\\:-m-20{margin:-5rem!important}}@media (min-width:600px){.sm\\:-m-24{margin:-6rem!important}}@media (min-width:600px){.sm\\:-m-32{margin:-8rem!important}}@media (min-width:600px){.sm\\:-m-40{margin:-10rem!important}}@media (min-width:600px){.sm\\:-m-48{margin:-12rem!important}}@media (min-width:600px){.sm\\:-m-56{margin:-14rem!important}}@media (min-width:600px){.sm\\:-m-64{margin:-16rem!important}}@media (min-width:600px){.sm\\:-m-px{margin:-1px!important}}@media (min-width:600px){.sm\\:my-0{margin-top:0!important;margin-bottom:0!important}}@media (min-width:600px){.sm\\:mx-0{margin-left:0!important;margin-right:0!important}}@media (min-width:600px){.sm\\:my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}}@media (min-width:600px){.sm\\:mx-1{margin-left:.25rem!important;margin-right:.25rem!important}}@media (min-width:600px){.sm\\:my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}}@media (min-width:600px){.sm\\:mx-2{margin-left:.5rem!important;margin-right:.5rem!important}}@media (min-width:600px){.sm\\:my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}}@media (min-width:600px){.sm\\:mx-3{margin-left:.75rem!important;margin-right:.75rem!important}}@media (min-width:600px){.sm\\:my-4{margin-top:1rem!important;margin-bottom:1rem!important}}@media (min-width:600px){.sm\\:mx-4{margin-left:1rem!important;margin-right:1rem!important}}@media (min-width:600px){.sm\\:my-5{margin-top:1.25rem!important;margin-bottom:1.25rem!important}}@media (min-width:600px){.sm\\:mx-5{margin-left:1.25rem!important;margin-right:1.25rem!important}}@media (min-width:600px){.sm\\:my-6{margin-top:1.5rem!important;margin-bottom:1.5rem!important}}@media (min-width:600px){.sm\\:mx-6{margin-left:1.5rem!important;margin-right:1.5rem!important}}@media (min-width:600px){.sm\\:my-8{margin-top:2rem!important;margin-bottom:2rem!important}}@media (min-width:600px){.sm\\:mx-8{margin-left:2rem!important;margin-right:2rem!important}}@media (min-width:600px){.sm\\:my-10{margin-top:2.5rem!important;margin-bottom:2.5rem!important}}@media (min-width:600px){.sm\\:mx-10{margin-left:2.5rem!important;margin-right:2.5rem!important}}@media (min-width:600px){.sm\\:my-12{margin-top:3rem!important;margin-bottom:3rem!important}}@media (min-width:600px){.sm\\:mx-12{margin-left:3rem!important;margin-right:3rem!important}}@media (min-width:600px){.sm\\:my-16{margin-top:4rem!important;margin-bottom:4rem!important}}@media (min-width:600px){.sm\\:mx-16{margin-left:4rem!important;margin-right:4rem!important}}@media (min-width:600px){.sm\\:my-20{margin-top:5rem!important;margin-bottom:5rem!important}}@media (min-width:600px){.sm\\:mx-20{margin-left:5rem!important;margin-right:5rem!important}}@media (min-width:600px){.sm\\:my-24{margin-top:6rem!important;margin-bottom:6rem!important}}@media (min-width:600px){.sm\\:mx-24{margin-left:6rem!important;margin-right:6rem!important}}@media (min-width:600px){.sm\\:my-32{margin-top:8rem!important;margin-bottom:8rem!important}}@media (min-width:600px){.sm\\:mx-32{margin-left:8rem!important;margin-right:8rem!important}}@media (min-width:600px){.sm\\:my-40{margin-top:10rem!important;margin-bottom:10rem!important}}@media (min-width:600px){.sm\\:mx-40{margin-left:10rem!important;margin-right:10rem!important}}@media (min-width:600px){.sm\\:my-48{margin-top:12rem!important;margin-bottom:12rem!important}}@media (min-width:600px){.sm\\:mx-48{margin-left:12rem!important;margin-right:12rem!important}}@media (min-width:600px){.sm\\:my-56{margin-top:14rem!important;margin-bottom:14rem!important}}@media (min-width:600px){.sm\\:mx-56{margin-left:14rem!important;margin-right:14rem!important}}@media (min-width:600px){.sm\\:my-64{margin-top:16rem!important;margin-bottom:16rem!important}}@media (min-width:600px){.sm\\:mx-64{margin-left:16rem!important;margin-right:16rem!important}}@media (min-width:600px){.sm\\:my-auto{margin-top:auto!important;margin-bottom:auto!important}}@media (min-width:600px){.sm\\:mx-auto{margin-left:auto!important;margin-right:auto!important}}@media (min-width:600px){.sm\\:my-px{margin-top:1px!important;margin-bottom:1px!important}}@media (min-width:600px){.sm\\:mx-px{margin-left:1px!important;margin-right:1px!important}}@media (min-width:600px){.sm\\:-my-1{margin-top:-.25rem!important;margin-bottom:-.25rem!important}}@media (min-width:600px){.sm\\:-mx-1{margin-left:-.25rem!important;margin-right:-.25rem!important}}@media (min-width:600px){.sm\\:-my-2{margin-top:-.5rem!important;margin-bottom:-.5rem!important}}@media (min-width:600px){.sm\\:-mx-2{margin-left:-.5rem!important;margin-right:-.5rem!important}}@media (min-width:600px){.sm\\:-my-3{margin-top:-.75rem!important;margin-bottom:-.75rem!important}}@media (min-width:600px){.sm\\:-mx-3{margin-left:-.75rem!important;margin-right:-.75rem!important}}@media (min-width:600px){.sm\\:-my-4{margin-top:-1rem!important;margin-bottom:-1rem!important}}@media (min-width:600px){.sm\\:-mx-4{margin-left:-1rem!important;margin-right:-1rem!important}}@media (min-width:600px){.sm\\:-my-5{margin-top:-1.25rem!important;margin-bottom:-1.25rem!important}}@media (min-width:600px){.sm\\:-mx-5{margin-left:-1.25rem!important;margin-right:-1.25rem!important}}@media (min-width:600px){.sm\\:-my-6{margin-top:-1.5rem!important;margin-bottom:-1.5rem!important}}@media (min-width:600px){.sm\\:-mx-6{margin-left:-1.5rem!important;margin-right:-1.5rem!important}}@media (min-width:600px){.sm\\:-my-8{margin-top:-2rem!important;margin-bottom:-2rem!important}}@media (min-width:600px){.sm\\:-mx-8{margin-left:-2rem!important;margin-right:-2rem!important}}@media (min-width:600px){.sm\\:-my-10{margin-top:-2.5rem!important;margin-bottom:-2.5rem!important}}@media (min-width:600px){.sm\\:-mx-10{margin-left:-2.5rem!important;margin-right:-2.5rem!important}}@media (min-width:600px){.sm\\:-my-12{margin-top:-3rem!important;margin-bottom:-3rem!important}}@media (min-width:600px){.sm\\:-mx-12{margin-left:-3rem!important;margin-right:-3rem!important}}@media (min-width:600px){.sm\\:-my-16{margin-top:-4rem!important;margin-bottom:-4rem!important}}@media (min-width:600px){.sm\\:-mx-16{margin-left:-4rem!important;margin-right:-4rem!important}}@media (min-width:600px){.sm\\:-my-20{margin-top:-5rem!important;margin-bottom:-5rem!important}}@media (min-width:600px){.sm\\:-mx-20{margin-left:-5rem!important;margin-right:-5rem!important}}@media (min-width:600px){.sm\\:-my-24{margin-top:-6rem!important;margin-bottom:-6rem!important}}@media (min-width:600px){.sm\\:-mx-24{margin-left:-6rem!important;margin-right:-6rem!important}}@media (min-width:600px){.sm\\:-my-32{margin-top:-8rem!important;margin-bottom:-8rem!important}}@media (min-width:600px){.sm\\:-mx-32{margin-left:-8rem!important;margin-right:-8rem!important}}@media (min-width:600px){.sm\\:-my-40{margin-top:-10rem!important;margin-bottom:-10rem!important}}@media (min-width:600px){.sm\\:-mx-40{margin-left:-10rem!important;margin-right:-10rem!important}}@media (min-width:600px){.sm\\:-my-48{margin-top:-12rem!important;margin-bottom:-12rem!important}}@media (min-width:600px){.sm\\:-mx-48{margin-left:-12rem!important;margin-right:-12rem!important}}@media (min-width:600px){.sm\\:-my-56{margin-top:-14rem!important;margin-bottom:-14rem!important}}@media (min-width:600px){.sm\\:-mx-56{margin-left:-14rem!important;margin-right:-14rem!important}}@media (min-width:600px){.sm\\:-my-64{margin-top:-16rem!important;margin-bottom:-16rem!important}}@media (min-width:600px){.sm\\:-mx-64{margin-left:-16rem!important;margin-right:-16rem!important}}@media (min-width:600px){.sm\\:-my-px{margin-top:-1px!important;margin-bottom:-1px!important}}@media (min-width:600px){.sm\\:-mx-px{margin-left:-1px!important;margin-right:-1px!important}}@media (min-width:600px){.sm\\:mt-0{margin-top:0!important}}@media (min-width:600px){.sm\\:mr-0{margin-right:0!important}}@media (min-width:600px){.sm\\:mb-0{margin-bottom:0!important}}@media (min-width:600px){.sm\\:ml-0{margin-left:0!important}}@media (min-width:600px){.sm\\:mt-1{margin-top:.25rem!important}}@media (min-width:600px){.sm\\:mr-1{margin-right:.25rem!important}}@media (min-width:600px){.sm\\:mb-1{margin-bottom:.25rem!important}}@media (min-width:600px){.sm\\:ml-1{margin-left:.25rem!important}}@media (min-width:600px){.sm\\:mt-2{margin-top:.5rem!important}}@media (min-width:600px){.sm\\:mr-2{margin-right:.5rem!important}}@media (min-width:600px){.sm\\:mb-2{margin-bottom:.5rem!important}}@media (min-width:600px){.sm\\:ml-2{margin-left:.5rem!important}}@media (min-width:600px){.sm\\:mt-3{margin-top:.75rem!important}}@media (min-width:600px){.sm\\:mr-3{margin-right:.75rem!important}}@media (min-width:600px){.sm\\:mb-3{margin-bottom:.75rem!important}}@media (min-width:600px){.sm\\:ml-3{margin-left:.75rem!important}}@media (min-width:600px){.sm\\:mt-4{margin-top:1rem!important}}@media (min-width:600px){.sm\\:mr-4{margin-right:1rem!important}}@media (min-width:600px){.sm\\:mb-4{margin-bottom:1rem!important}}@media (min-width:600px){.sm\\:ml-4{margin-left:1rem!important}}@media (min-width:600px){.sm\\:mt-5{margin-top:1.25rem!important}}@media (min-width:600px){.sm\\:mr-5{margin-right:1.25rem!important}}@media (min-width:600px){.sm\\:mb-5{margin-bottom:1.25rem!important}}@media (min-width:600px){.sm\\:ml-5{margin-left:1.25rem!important}}@media (min-width:600px){.sm\\:mt-6{margin-top:1.5rem!important}}@media (min-width:600px){.sm\\:mr-6{margin-right:1.5rem!important}}@media (min-width:600px){.sm\\:mb-6{margin-bottom:1.5rem!important}}@media (min-width:600px){.sm\\:ml-6{margin-left:1.5rem!important}}@media (min-width:600px){.sm\\:mt-8{margin-top:2rem!important}}@media (min-width:600px){.sm\\:mr-8{margin-right:2rem!important}}@media (min-width:600px){.sm\\:mb-8{margin-bottom:2rem!important}}@media (min-width:600px){.sm\\:ml-8{margin-left:2rem!important}}@media (min-width:600px){.sm\\:mt-10{margin-top:2.5rem!important}}@media (min-width:600px){.sm\\:mr-10{margin-right:2.5rem!important}}@media (min-width:600px){.sm\\:mb-10{margin-bottom:2.5rem!important}}@media (min-width:600px){.sm\\:ml-10{margin-left:2.5rem!important}}@media (min-width:600px){.sm\\:mt-12{margin-top:3rem!important}}@media (min-width:600px){.sm\\:mr-12{margin-right:3rem!important}}@media (min-width:600px){.sm\\:mb-12{margin-bottom:3rem!important}}@media (min-width:600px){.sm\\:ml-12{margin-left:3rem!important}}@media (min-width:600px){.sm\\:mt-16{margin-top:4rem!important}}@media (min-width:600px){.sm\\:mr-16{margin-right:4rem!important}}@media (min-width:600px){.sm\\:mb-16{margin-bottom:4rem!important}}@media (min-width:600px){.sm\\:ml-16{margin-left:4rem!important}}@media (min-width:600px){.sm\\:mt-20{margin-top:5rem!important}}@media (min-width:600px){.sm\\:mr-20{margin-right:5rem!important}}@media (min-width:600px){.sm\\:mb-20{margin-bottom:5rem!important}}@media (min-width:600px){.sm\\:ml-20{margin-left:5rem!important}}@media (min-width:600px){.sm\\:mt-24{margin-top:6rem!important}}@media (min-width:600px){.sm\\:mr-24{margin-right:6rem!important}}@media (min-width:600px){.sm\\:mb-24{margin-bottom:6rem!important}}@media (min-width:600px){.sm\\:ml-24{margin-left:6rem!important}}@media (min-width:600px){.sm\\:mt-32{margin-top:8rem!important}}@media (min-width:600px){.sm\\:mr-32{margin-right:8rem!important}}@media (min-width:600px){.sm\\:mb-32{margin-bottom:8rem!important}}@media (min-width:600px){.sm\\:ml-32{margin-left:8rem!important}}@media (min-width:600px){.sm\\:mt-40{margin-top:10rem!important}}@media (min-width:600px){.sm\\:mr-40{margin-right:10rem!important}}@media (min-width:600px){.sm\\:mb-40{margin-bottom:10rem!important}}@media (min-width:600px){.sm\\:ml-40{margin-left:10rem!important}}@media (min-width:600px){.sm\\:mt-48{margin-top:12rem!important}}@media (min-width:600px){.sm\\:mr-48{margin-right:12rem!important}}@media (min-width:600px){.sm\\:mb-48{margin-bottom:12rem!important}}@media (min-width:600px){.sm\\:ml-48{margin-left:12rem!important}}@media (min-width:600px){.sm\\:mt-56{margin-top:14rem!important}}@media (min-width:600px){.sm\\:mr-56{margin-right:14rem!important}}@media (min-width:600px){.sm\\:mb-56{margin-bottom:14rem!important}}@media (min-width:600px){.sm\\:ml-56{margin-left:14rem!important}}@media (min-width:600px){.sm\\:mt-64{margin-top:16rem!important}}@media (min-width:600px){.sm\\:mr-64{margin-right:16rem!important}}@media (min-width:600px){.sm\\:mb-64{margin-bottom:16rem!important}}@media (min-width:600px){.sm\\:ml-64{margin-left:16rem!important}}@media (min-width:600px){.sm\\:mt-auto{margin-top:auto!important}}@media (min-width:600px){.sm\\:mr-auto{margin-right:auto!important}}@media (min-width:600px){.sm\\:mb-auto{margin-bottom:auto!important}}@media (min-width:600px){.sm\\:ml-auto{margin-left:auto!important}}@media (min-width:600px){.sm\\:mt-px{margin-top:1px!important}}@media (min-width:600px){.sm\\:mr-px{margin-right:1px!important}}@media (min-width:600px){.sm\\:mb-px{margin-bottom:1px!important}}@media (min-width:600px){.sm\\:ml-px{margin-left:1px!important}}@media (min-width:600px){.sm\\:-mt-1{margin-top:-.25rem!important}}@media (min-width:600px){.sm\\:-mr-1{margin-right:-.25rem!important}}@media (min-width:600px){.sm\\:-mb-1{margin-bottom:-.25rem!important}}@media (min-width:600px){.sm\\:-ml-1{margin-left:-.25rem!important}}@media (min-width:600px){.sm\\:-mt-2{margin-top:-.5rem!important}}@media (min-width:600px){.sm\\:-mr-2{margin-right:-.5rem!important}}@media (min-width:600px){.sm\\:-mb-2{margin-bottom:-.5rem!important}}@media (min-width:600px){.sm\\:-ml-2{margin-left:-.5rem!important}}@media (min-width:600px){.sm\\:-mt-3{margin-top:-.75rem!important}}@media (min-width:600px){.sm\\:-mr-3{margin-right:-.75rem!important}}@media (min-width:600px){.sm\\:-mb-3{margin-bottom:-.75rem!important}}@media (min-width:600px){.sm\\:-ml-3{margin-left:-.75rem!important}}@media (min-width:600px){.sm\\:-mt-4{margin-top:-1rem!important}}@media (min-width:600px){.sm\\:-mr-4{margin-right:-1rem!important}}@media (min-width:600px){.sm\\:-mb-4{margin-bottom:-1rem!important}}@media (min-width:600px){.sm\\:-ml-4{margin-left:-1rem!important}}@media (min-width:600px){.sm\\:-mt-5{margin-top:-1.25rem!important}}@media (min-width:600px){.sm\\:-mr-5{margin-right:-1.25rem!important}}@media (min-width:600px){.sm\\:-mb-5{margin-bottom:-1.25rem!important}}@media (min-width:600px){.sm\\:-ml-5{margin-left:-1.25rem!important}}@media (min-width:600px){.sm\\:-mt-6{margin-top:-1.5rem!important}}@media (min-width:600px){.sm\\:-mr-6{margin-right:-1.5rem!important}}@media (min-width:600px){.sm\\:-mb-6{margin-bottom:-1.5rem!important}}@media (min-width:600px){.sm\\:-ml-6{margin-left:-1.5rem!important}}@media (min-width:600px){.sm\\:-mt-8{margin-top:-2rem!important}}@media (min-width:600px){.sm\\:-mr-8{margin-right:-2rem!important}}@media (min-width:600px){.sm\\:-mb-8{margin-bottom:-2rem!important}}@media (min-width:600px){.sm\\:-ml-8{margin-left:-2rem!important}}@media (min-width:600px){.sm\\:-mt-10{margin-top:-2.5rem!important}}@media (min-width:600px){.sm\\:-mr-10{margin-right:-2.5rem!important}}@media (min-width:600px){.sm\\:-mb-10{margin-bottom:-2.5rem!important}}@media (min-width:600px){.sm\\:-ml-10{margin-left:-2.5rem!important}}@media (min-width:600px){.sm\\:-mt-12{margin-top:-3rem!important}}@media (min-width:600px){.sm\\:-mr-12{margin-right:-3rem!important}}@media (min-width:600px){.sm\\:-mb-12{margin-bottom:-3rem!important}}@media (min-width:600px){.sm\\:-ml-12{margin-left:-3rem!important}}@media (min-width:600px){.sm\\:-mt-16{margin-top:-4rem!important}}@media (min-width:600px){.sm\\:-mr-16{margin-right:-4rem!important}}@media (min-width:600px){.sm\\:-mb-16{margin-bottom:-4rem!important}}@media (min-width:600px){.sm\\:-ml-16{margin-left:-4rem!important}}@media (min-width:600px){.sm\\:-mt-20{margin-top:-5rem!important}}@media (min-width:600px){.sm\\:-mr-20{margin-right:-5rem!important}}@media (min-width:600px){.sm\\:-mb-20{margin-bottom:-5rem!important}}@media (min-width:600px){.sm\\:-ml-20{margin-left:-5rem!important}}@media (min-width:600px){.sm\\:-mt-24{margin-top:-6rem!important}}@media (min-width:600px){.sm\\:-mr-24{margin-right:-6rem!important}}@media (min-width:600px){.sm\\:-mb-24{margin-bottom:-6rem!important}}@media (min-width:600px){.sm\\:-ml-24{margin-left:-6rem!important}}@media (min-width:600px){.sm\\:-mt-32{margin-top:-8rem!important}}@media (min-width:600px){.sm\\:-mr-32{margin-right:-8rem!important}}@media (min-width:600px){.sm\\:-mb-32{margin-bottom:-8rem!important}}@media (min-width:600px){.sm\\:-ml-32{margin-left:-8rem!important}}@media (min-width:600px){.sm\\:-mt-40{margin-top:-10rem!important}}@media (min-width:600px){.sm\\:-mr-40{margin-right:-10rem!important}}@media (min-width:600px){.sm\\:-mb-40{margin-bottom:-10rem!important}}@media (min-width:600px){.sm\\:-ml-40{margin-left:-10rem!important}}@media (min-width:600px){.sm\\:-mt-48{margin-top:-12rem!important}}@media (min-width:600px){.sm\\:-mr-48{margin-right:-12rem!important}}@media (min-width:600px){.sm\\:-mb-48{margin-bottom:-12rem!important}}@media (min-width:600px){.sm\\:-ml-48{margin-left:-12rem!important}}@media (min-width:600px){.sm\\:-mt-56{margin-top:-14rem!important}}@media (min-width:600px){.sm\\:-mr-56{margin-right:-14rem!important}}@media (min-width:600px){.sm\\:-mb-56{margin-bottom:-14rem!important}}@media (min-width:600px){.sm\\:-ml-56{margin-left:-14rem!important}}@media (min-width:600px){.sm\\:-mt-64{margin-top:-16rem!important}}@media (min-width:600px){.sm\\:-mr-64{margin-right:-16rem!important}}@media (min-width:600px){.sm\\:-mb-64{margin-bottom:-16rem!important}}@media (min-width:600px){.sm\\:-ml-64{margin-left:-16rem!important}}@media (min-width:600px){.sm\\:-mt-px{margin-top:-1px!important}}@media (min-width:600px){.sm\\:-mr-px{margin-right:-1px!important}}@media (min-width:600px){.sm\\:-mb-px{margin-bottom:-1px!important}}@media (min-width:600px){.sm\\:-ml-px{margin-left:-1px!important}}@media (min-width:600px){.sm\\:max-h-full{max-height:100%!important}}@media (min-width:600px){.sm\\:max-h-screen{max-height:100vh!important}}@media (min-width:600px){.sm\\:max-w-none{max-width:none!important}}@media (min-width:600px){.sm\\:max-w-xs{max-width:20rem!important}}@media (min-width:600px){.sm\\:max-w-sm{max-width:24rem!important}}@media (min-width:600px){.sm\\:max-w-md{max-width:28rem!important}}@media (min-width:600px){.sm\\:max-w-lg{max-width:32rem!important}}@media (min-width:600px){.sm\\:max-w-xl{max-width:36rem!important}}@media (min-width:600px){.sm\\:max-w-2xl{max-width:42rem!important}}@media (min-width:600px){.sm\\:max-w-3xl{max-width:48rem!important}}@media (min-width:600px){.sm\\:max-w-4xl{max-width:56rem!important}}@media (min-width:600px){.sm\\:max-w-5xl{max-width:64rem!important}}@media (min-width:600px){.sm\\:max-w-6xl{max-width:72rem!important}}@media (min-width:600px){.sm\\:max-w-full{max-width:100%!important}}@media (min-width:600px){.sm\\:max-w-screen-xs{max-width:599px!important}}@media (min-width:600px){.sm\\:max-w-screen-sm{max-width:600px!important}}@media (min-width:600px){.sm\\:max-w-screen-md{max-width:960px!important}}@media (min-width:600px){.sm\\:max-w-screen-lg{max-width:1280px!important}}@media (min-width:600px){.sm\\:max-w-screen-xl{max-width:1920px!important}}@media (min-width:600px){.sm\\:min-h-0{min-height:0!important}}@media (min-width:600px){.sm\\:min-h-full{min-height:100%!important}}@media (min-width:600px){.sm\\:min-h-screen{min-height:100vh!important}}@media (min-width:600px){.sm\\:min-w-0{min-width:0!important}}@media (min-width:600px){.sm\\:min-w-full{min-width:100%!important}}@media (min-width:600px){.sm\\:object-contain{object-fit:contain!important}}@media (min-width:600px){.sm\\:object-cover{object-fit:cover!important}}@media (min-width:600px){.sm\\:object-fill{object-fit:fill!important}}@media (min-width:600px){.sm\\:object-none{object-fit:none!important}}@media (min-width:600px){.sm\\:object-scale-down{object-fit:scale-down!important}}@media (min-width:600px){.sm\\:object-bottom{object-position:bottom!important}}@media (min-width:600px){.sm\\:object-center{object-position:center!important}}@media (min-width:600px){.sm\\:object-left{object-position:left!important}}@media (min-width:600px){.sm\\:object-left-bottom{object-position:left bottom!important}}@media (min-width:600px){.sm\\:object-left-top{object-position:left top!important}}@media (min-width:600px){.sm\\:object-right{object-position:right!important}}@media (min-width:600px){.sm\\:object-right-bottom{object-position:right bottom!important}}@media (min-width:600px){.sm\\:object-right-top{object-position:right top!important}}@media (min-width:600px){.sm\\:object-top{object-position:top!important}}@media (min-width:600px){.sm\\:opacity-0{opacity:0!important}}@media (min-width:600px){.sm\\:opacity-25{opacity:.25!important}}@media (min-width:600px){.sm\\:opacity-50{opacity:.5!important}}@media (min-width:600px){.sm\\:opacity-75{opacity:.75!important}}@media (min-width:600px){.sm\\:opacity-100{opacity:1!important}}@media (min-width:600px){.sm\\:hover\\:opacity-0:hover{opacity:0!important}}@media (min-width:600px){.sm\\:hover\\:opacity-25:hover{opacity:.25!important}}@media (min-width:600px){.sm\\:hover\\:opacity-50:hover{opacity:.5!important}}@media (min-width:600px){.sm\\:hover\\:opacity-75:hover{opacity:.75!important}}@media (min-width:600px){.sm\\:hover\\:opacity-100:hover{opacity:1!important}}@media (min-width:600px){.sm\\:focus\\:opacity-0:focus{opacity:0!important}}@media (min-width:600px){.sm\\:focus\\:opacity-25:focus{opacity:.25!important}}@media (min-width:600px){.sm\\:focus\\:opacity-50:focus{opacity:.5!important}}@media (min-width:600px){.sm\\:focus\\:opacity-75:focus{opacity:.75!important}}@media (min-width:600px){.sm\\:focus\\:opacity-100:focus{opacity:1!important}}@media (min-width:600px){.sm\\:overflow-auto{overflow:auto!important}}@media (min-width:600px){.sm\\:overflow-hidden{overflow:hidden!important}}@media (min-width:600px){.sm\\:overflow-visible{overflow:visible!important}}@media (min-width:600px){.sm\\:overflow-scroll{overflow:scroll!important}}@media (min-width:600px){.sm\\:overflow-x-auto{overflow-x:auto!important}}@media (min-width:600px){.sm\\:overflow-y-auto{overflow-y:auto!important}}@media (min-width:600px){.sm\\:overflow-x-hidden{overflow-x:hidden!important}}@media (min-width:600px){.sm\\:overflow-y-hidden{overflow-y:hidden!important}}@media (min-width:600px){.sm\\:overflow-x-visible{overflow-x:visible!important}}@media (min-width:600px){.sm\\:overflow-y-visible{overflow-y:visible!important}}@media (min-width:600px){.sm\\:overflow-x-scroll{overflow-x:scroll!important}}@media (min-width:600px){.sm\\:overflow-y-scroll{overflow-y:scroll!important}}@media (min-width:600px){.sm\\:scrolling-touch{-webkit-overflow-scrolling:touch!important}}@media (min-width:600px){.sm\\:scrolling-auto{-webkit-overflow-scrolling:auto!important}}@media (min-width:600px){.sm\\:overscroll-auto{overscroll-behavior:auto!important}}@media (min-width:600px){.sm\\:overscroll-contain{overscroll-behavior:contain!important}}@media (min-width:600px){.sm\\:overscroll-none{overscroll-behavior:none!important}}@media (min-width:600px){.sm\\:overscroll-y-auto{overscroll-behavior-y:auto!important}}@media (min-width:600px){.sm\\:overscroll-y-contain{overscroll-behavior-y:contain!important}}@media (min-width:600px){.sm\\:overscroll-y-none{overscroll-behavior-y:none!important}}@media (min-width:600px){.sm\\:overscroll-x-auto{overscroll-behavior-x:auto!important}}@media (min-width:600px){.sm\\:overscroll-x-contain{overscroll-behavior-x:contain!important}}@media (min-width:600px){.sm\\:overscroll-x-none{overscroll-behavior-x:none!important}}@media (min-width:600px){.sm\\:p-0{padding:0!important}}@media (min-width:600px){.sm\\:p-1{padding:.25rem!important}}@media (min-width:600px){.sm\\:p-2{padding:.5rem!important}}@media (min-width:600px){.sm\\:p-3{padding:.75rem!important}}@media (min-width:600px){.sm\\:p-4{padding:1rem!important}}@media (min-width:600px){.sm\\:p-5{padding:1.25rem!important}}@media (min-width:600px){.sm\\:p-6{padding:1.5rem!important}}@media (min-width:600px){.sm\\:p-8{padding:2rem!important}}@media (min-width:600px){.sm\\:p-10{padding:2.5rem!important}}@media (min-width:600px){.sm\\:p-12{padding:3rem!important}}@media (min-width:600px){.sm\\:p-16{padding:4rem!important}}@media (min-width:600px){.sm\\:p-20{padding:5rem!important}}@media (min-width:600px){.sm\\:p-24{padding:6rem!important}}@media (min-width:600px){.sm\\:p-32{padding:8rem!important}}@media (min-width:600px){.sm\\:p-40{padding:10rem!important}}@media (min-width:600px){.sm\\:p-48{padding:12rem!important}}@media (min-width:600px){.sm\\:p-56{padding:14rem!important}}@media (min-width:600px){.sm\\:p-64{padding:16rem!important}}@media (min-width:600px){.sm\\:p-px{padding:1px!important}}@media (min-width:600px){.sm\\:py-0{padding-top:0!important;padding-bottom:0!important}}@media (min-width:600px){.sm\\:px-0{padding-left:0!important;padding-right:0!important}}@media (min-width:600px){.sm\\:py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}}@media (min-width:600px){.sm\\:px-1{padding-left:.25rem!important;padding-right:.25rem!important}}@media (min-width:600px){.sm\\:py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}}@media (min-width:600px){.sm\\:px-2{padding-left:.5rem!important;padding-right:.5rem!important}}@media (min-width:600px){.sm\\:py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}}@media (min-width:600px){.sm\\:px-3{padding-left:.75rem!important;padding-right:.75rem!important}}@media (min-width:600px){.sm\\:py-4{padding-top:1rem!important;padding-bottom:1rem!important}}@media (min-width:600px){.sm\\:px-4{padding-left:1rem!important;padding-right:1rem!important}}@media (min-width:600px){.sm\\:py-5{padding-top:1.25rem!important;padding-bottom:1.25rem!important}}@media (min-width:600px){.sm\\:px-5{padding-left:1.25rem!important;padding-right:1.25rem!important}}@media (min-width:600px){.sm\\:py-6{padding-top:1.5rem!important;padding-bottom:1.5rem!important}}@media (min-width:600px){.sm\\:px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}}@media (min-width:600px){.sm\\:py-8{padding-top:2rem!important;padding-bottom:2rem!important}}@media (min-width:600px){.sm\\:px-8{padding-left:2rem!important;padding-right:2rem!important}}@media (min-width:600px){.sm\\:py-10{padding-top:2.5rem!important;padding-bottom:2.5rem!important}}@media (min-width:600px){.sm\\:px-10{padding-left:2.5rem!important;padding-right:2.5rem!important}}@media (min-width:600px){.sm\\:py-12{padding-top:3rem!important;padding-bottom:3rem!important}}@media (min-width:600px){.sm\\:px-12{padding-left:3rem!important;padding-right:3rem!important}}@media (min-width:600px){.sm\\:py-16{padding-top:4rem!important;padding-bottom:4rem!important}}@media (min-width:600px){.sm\\:px-16{padding-left:4rem!important;padding-right:4rem!important}}@media (min-width:600px){.sm\\:py-20{padding-top:5rem!important;padding-bottom:5rem!important}}@media (min-width:600px){.sm\\:px-20{padding-left:5rem!important;padding-right:5rem!important}}@media (min-width:600px){.sm\\:py-24{padding-top:6rem!important;padding-bottom:6rem!important}}@media (min-width:600px){.sm\\:px-24{padding-left:6rem!important;padding-right:6rem!important}}@media (min-width:600px){.sm\\:py-32{padding-top:8rem!important;padding-bottom:8rem!important}}@media (min-width:600px){.sm\\:px-32{padding-left:8rem!important;padding-right:8rem!important}}@media (min-width:600px){.sm\\:py-40{padding-top:10rem!important;padding-bottom:10rem!important}}@media (min-width:600px){.sm\\:px-40{padding-left:10rem!important;padding-right:10rem!important}}@media (min-width:600px){.sm\\:py-48{padding-top:12rem!important;padding-bottom:12rem!important}}@media (min-width:600px){.sm\\:px-48{padding-left:12rem!important;padding-right:12rem!important}}@media (min-width:600px){.sm\\:py-56{padding-top:14rem!important;padding-bottom:14rem!important}}@media (min-width:600px){.sm\\:px-56{padding-left:14rem!important;padding-right:14rem!important}}@media (min-width:600px){.sm\\:py-64{padding-top:16rem!important;padding-bottom:16rem!important}}@media (min-width:600px){.sm\\:px-64{padding-left:16rem!important;padding-right:16rem!important}}@media (min-width:600px){.sm\\:py-px{padding-top:1px!important;padding-bottom:1px!important}}@media (min-width:600px){.sm\\:px-px{padding-left:1px!important;padding-right:1px!important}}@media (min-width:600px){.sm\\:pt-0{padding-top:0!important}}@media (min-width:600px){.sm\\:pr-0{padding-right:0!important}}@media (min-width:600px){.sm\\:pb-0{padding-bottom:0!important}}@media (min-width:600px){.sm\\:pl-0{padding-left:0!important}}@media (min-width:600px){.sm\\:pt-1{padding-top:.25rem!important}}@media (min-width:600px){.sm\\:pr-1{padding-right:.25rem!important}}@media (min-width:600px){.sm\\:pb-1{padding-bottom:.25rem!important}}@media (min-width:600px){.sm\\:pl-1{padding-left:.25rem!important}}@media (min-width:600px){.sm\\:pt-2{padding-top:.5rem!important}}@media (min-width:600px){.sm\\:pr-2{padding-right:.5rem!important}}@media (min-width:600px){.sm\\:pb-2{padding-bottom:.5rem!important}}@media (min-width:600px){.sm\\:pl-2{padding-left:.5rem!important}}@media (min-width:600px){.sm\\:pt-3{padding-top:.75rem!important}}@media (min-width:600px){.sm\\:pr-3{padding-right:.75rem!important}}@media (min-width:600px){.sm\\:pb-3{padding-bottom:.75rem!important}}@media (min-width:600px){.sm\\:pl-3{padding-left:.75rem!important}}@media (min-width:600px){.sm\\:pt-4{padding-top:1rem!important}}@media (min-width:600px){.sm\\:pr-4{padding-right:1rem!important}}@media (min-width:600px){.sm\\:pb-4{padding-bottom:1rem!important}}@media (min-width:600px){.sm\\:pl-4{padding-left:1rem!important}}@media (min-width:600px){.sm\\:pt-5{padding-top:1.25rem!important}}@media (min-width:600px){.sm\\:pr-5{padding-right:1.25rem!important}}@media (min-width:600px){.sm\\:pb-5{padding-bottom:1.25rem!important}}@media (min-width:600px){.sm\\:pl-5{padding-left:1.25rem!important}}@media (min-width:600px){.sm\\:pt-6{padding-top:1.5rem!important}}@media (min-width:600px){.sm\\:pr-6{padding-right:1.5rem!important}}@media (min-width:600px){.sm\\:pb-6{padding-bottom:1.5rem!important}}@media (min-width:600px){.sm\\:pl-6{padding-left:1.5rem!important}}@media (min-width:600px){.sm\\:pt-8{padding-top:2rem!important}}@media (min-width:600px){.sm\\:pr-8{padding-right:2rem!important}}@media (min-width:600px){.sm\\:pb-8{padding-bottom:2rem!important}}@media (min-width:600px){.sm\\:pl-8{padding-left:2rem!important}}@media (min-width:600px){.sm\\:pt-10{padding-top:2.5rem!important}}@media (min-width:600px){.sm\\:pr-10{padding-right:2.5rem!important}}@media (min-width:600px){.sm\\:pb-10{padding-bottom:2.5rem!important}}@media (min-width:600px){.sm\\:pl-10{padding-left:2.5rem!important}}@media (min-width:600px){.sm\\:pt-12{padding-top:3rem!important}}@media (min-width:600px){.sm\\:pr-12{padding-right:3rem!important}}@media (min-width:600px){.sm\\:pb-12{padding-bottom:3rem!important}}@media (min-width:600px){.sm\\:pl-12{padding-left:3rem!important}}@media (min-width:600px){.sm\\:pt-16{padding-top:4rem!important}}@media (min-width:600px){.sm\\:pr-16{padding-right:4rem!important}}@media (min-width:600px){.sm\\:pb-16{padding-bottom:4rem!important}}@media (min-width:600px){.sm\\:pl-16{padding-left:4rem!important}}@media (min-width:600px){.sm\\:pt-20{padding-top:5rem!important}}@media (min-width:600px){.sm\\:pr-20{padding-right:5rem!important}}@media (min-width:600px){.sm\\:pb-20{padding-bottom:5rem!important}}@media (min-width:600px){.sm\\:pl-20{padding-left:5rem!important}}@media (min-width:600px){.sm\\:pt-24{padding-top:6rem!important}}@media (min-width:600px){.sm\\:pr-24{padding-right:6rem!important}}@media (min-width:600px){.sm\\:pb-24{padding-bottom:6rem!important}}@media (min-width:600px){.sm\\:pl-24{padding-left:6rem!important}}@media (min-width:600px){.sm\\:pt-32{padding-top:8rem!important}}@media (min-width:600px){.sm\\:pr-32{padding-right:8rem!important}}@media (min-width:600px){.sm\\:pb-32{padding-bottom:8rem!important}}@media (min-width:600px){.sm\\:pl-32{padding-left:8rem!important}}@media (min-width:600px){.sm\\:pt-40{padding-top:10rem!important}}@media (min-width:600px){.sm\\:pr-40{padding-right:10rem!important}}@media (min-width:600px){.sm\\:pb-40{padding-bottom:10rem!important}}@media (min-width:600px){.sm\\:pl-40{padding-left:10rem!important}}@media (min-width:600px){.sm\\:pt-48{padding-top:12rem!important}}@media (min-width:600px){.sm\\:pr-48{padding-right:12rem!important}}@media (min-width:600px){.sm\\:pb-48{padding-bottom:12rem!important}}@media (min-width:600px){.sm\\:pl-48{padding-left:12rem!important}}@media (min-width:600px){.sm\\:pt-56{padding-top:14rem!important}}@media (min-width:600px){.sm\\:pr-56{padding-right:14rem!important}}@media (min-width:600px){.sm\\:pb-56{padding-bottom:14rem!important}}@media (min-width:600px){.sm\\:pl-56{padding-left:14rem!important}}@media (min-width:600px){.sm\\:pt-64{padding-top:16rem!important}}@media (min-width:600px){.sm\\:pr-64{padding-right:16rem!important}}@media (min-width:600px){.sm\\:pb-64{padding-bottom:16rem!important}}@media (min-width:600px){.sm\\:pl-64{padding-left:16rem!important}}@media (min-width:600px){.sm\\:pt-px{padding-top:1px!important}}@media (min-width:600px){.sm\\:pr-px{padding-right:1px!important}}@media (min-width:600px){.sm\\:pb-px{padding-bottom:1px!important}}@media (min-width:600px){.sm\\:pl-px{padding-left:1px!important}}@media (min-width:600px){.sm\\:placeholder-transparent::placeholder{color:transparent!important}}@media (min-width:600px){.sm\\:placeholder-current::placeholder{color:currentColor!important}}@media (min-width:600px){.sm\\:placeholder-black::placeholder{--placeholder-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-white::placeholder{--placeholder-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-gray-100::placeholder{--placeholder-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-gray-200::placeholder{--placeholder-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-gray-300::placeholder{--placeholder-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-gray-400::placeholder{--placeholder-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-gray-500::placeholder{--placeholder-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-gray-600::placeholder{--placeholder-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-gray-700::placeholder{--placeholder-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-gray-800::placeholder{--placeholder-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-gray-900::placeholder{--placeholder-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-red-100::placeholder{--placeholder-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-red-200::placeholder{--placeholder-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-red-300::placeholder{--placeholder-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-red-400::placeholder{--placeholder-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-red-500::placeholder{--placeholder-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-red-600::placeholder{--placeholder-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-red-700::placeholder{--placeholder-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-red-800::placeholder{--placeholder-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-red-900::placeholder{--placeholder-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-orange-100::placeholder{--placeholder-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-orange-200::placeholder{--placeholder-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-orange-300::placeholder{--placeholder-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-orange-400::placeholder{--placeholder-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-orange-500::placeholder{--placeholder-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-orange-600::placeholder{--placeholder-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-orange-700::placeholder{--placeholder-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-orange-800::placeholder{--placeholder-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-orange-900::placeholder{--placeholder-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-yellow-100::placeholder{--placeholder-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-yellow-200::placeholder{--placeholder-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-yellow-300::placeholder{--placeholder-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-yellow-400::placeholder{--placeholder-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-yellow-500::placeholder{--placeholder-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-yellow-600::placeholder{--placeholder-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-yellow-700::placeholder{--placeholder-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-yellow-800::placeholder{--placeholder-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-yellow-900::placeholder{--placeholder-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-green-100::placeholder{--placeholder-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-green-200::placeholder{--placeholder-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-green-300::placeholder{--placeholder-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-green-400::placeholder{--placeholder-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-green-500::placeholder{--placeholder-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-green-600::placeholder{--placeholder-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-green-700::placeholder{--placeholder-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-green-800::placeholder{--placeholder-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-green-900::placeholder{--placeholder-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-teal-100::placeholder{--placeholder-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-teal-200::placeholder{--placeholder-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-teal-300::placeholder{--placeholder-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-teal-400::placeholder{--placeholder-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-teal-500::placeholder{--placeholder-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-teal-600::placeholder{--placeholder-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-teal-700::placeholder{--placeholder-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-teal-800::placeholder{--placeholder-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-teal-900::placeholder{--placeholder-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-blue-100::placeholder{--placeholder-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-blue-200::placeholder{--placeholder-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-blue-300::placeholder{--placeholder-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-blue-400::placeholder{--placeholder-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-blue-500::placeholder{--placeholder-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-blue-600::placeholder{--placeholder-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-blue-700::placeholder{--placeholder-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-blue-800::placeholder{--placeholder-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-blue-900::placeholder{--placeholder-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-indigo-100::placeholder{--placeholder-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-indigo-200::placeholder{--placeholder-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-indigo-300::placeholder{--placeholder-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-indigo-400::placeholder{--placeholder-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-indigo-500::placeholder{--placeholder-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-indigo-600::placeholder{--placeholder-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-indigo-700::placeholder{--placeholder-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-indigo-800::placeholder{--placeholder-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-indigo-900::placeholder{--placeholder-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-purple-100::placeholder{--placeholder-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-purple-200::placeholder{--placeholder-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-purple-300::placeholder{--placeholder-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-purple-400::placeholder{--placeholder-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-purple-500::placeholder{--placeholder-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-purple-600::placeholder{--placeholder-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-purple-700::placeholder{--placeholder-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-purple-800::placeholder{--placeholder-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-purple-900::placeholder{--placeholder-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-pink-100::placeholder{--placeholder-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-pink-200::placeholder{--placeholder-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-pink-300::placeholder{--placeholder-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-pink-400::placeholder{--placeholder-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-pink-500::placeholder{--placeholder-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-pink-600::placeholder{--placeholder-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-pink-700::placeholder{--placeholder-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-pink-800::placeholder{--placeholder-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-pink-900::placeholder{--placeholder-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-transparent:focus::placeholder{color:transparent!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-current:focus::placeholder{color:currentColor!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-black:focus::placeholder{--placeholder-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-white:focus::placeholder{--placeholder-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-gray-100:focus::placeholder{--placeholder-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-gray-200:focus::placeholder{--placeholder-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-gray-300:focus::placeholder{--placeholder-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-gray-400:focus::placeholder{--placeholder-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-gray-500:focus::placeholder{--placeholder-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-gray-600:focus::placeholder{--placeholder-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-gray-700:focus::placeholder{--placeholder-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-gray-800:focus::placeholder{--placeholder-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-gray-900:focus::placeholder{--placeholder-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-red-100:focus::placeholder{--placeholder-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-red-200:focus::placeholder{--placeholder-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-red-300:focus::placeholder{--placeholder-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-red-400:focus::placeholder{--placeholder-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-red-500:focus::placeholder{--placeholder-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-red-600:focus::placeholder{--placeholder-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-red-700:focus::placeholder{--placeholder-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-red-800:focus::placeholder{--placeholder-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-red-900:focus::placeholder{--placeholder-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-orange-100:focus::placeholder{--placeholder-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-orange-200:focus::placeholder{--placeholder-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-orange-300:focus::placeholder{--placeholder-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-orange-400:focus::placeholder{--placeholder-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-orange-500:focus::placeholder{--placeholder-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-orange-600:focus::placeholder{--placeholder-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-orange-700:focus::placeholder{--placeholder-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-orange-800:focus::placeholder{--placeholder-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-orange-900:focus::placeholder{--placeholder-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-yellow-100:focus::placeholder{--placeholder-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-yellow-200:focus::placeholder{--placeholder-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-yellow-300:focus::placeholder{--placeholder-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-yellow-400:focus::placeholder{--placeholder-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-yellow-500:focus::placeholder{--placeholder-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-yellow-600:focus::placeholder{--placeholder-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-yellow-700:focus::placeholder{--placeholder-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-yellow-800:focus::placeholder{--placeholder-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-yellow-900:focus::placeholder{--placeholder-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-green-100:focus::placeholder{--placeholder-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-green-200:focus::placeholder{--placeholder-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-green-300:focus::placeholder{--placeholder-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-green-400:focus::placeholder{--placeholder-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-green-500:focus::placeholder{--placeholder-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-green-600:focus::placeholder{--placeholder-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-green-700:focus::placeholder{--placeholder-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-green-800:focus::placeholder{--placeholder-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-green-900:focus::placeholder{--placeholder-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-teal-100:focus::placeholder{--placeholder-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-teal-200:focus::placeholder{--placeholder-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-teal-300:focus::placeholder{--placeholder-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-teal-400:focus::placeholder{--placeholder-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-teal-500:focus::placeholder{--placeholder-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-teal-600:focus::placeholder{--placeholder-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-teal-700:focus::placeholder{--placeholder-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-teal-800:focus::placeholder{--placeholder-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-teal-900:focus::placeholder{--placeholder-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-blue-100:focus::placeholder{--placeholder-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-blue-200:focus::placeholder{--placeholder-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-blue-300:focus::placeholder{--placeholder-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-blue-400:focus::placeholder{--placeholder-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-blue-500:focus::placeholder{--placeholder-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-blue-600:focus::placeholder{--placeholder-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-blue-700:focus::placeholder{--placeholder-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-blue-800:focus::placeholder{--placeholder-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-blue-900:focus::placeholder{--placeholder-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-indigo-100:focus::placeholder{--placeholder-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-indigo-200:focus::placeholder{--placeholder-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-indigo-300:focus::placeholder{--placeholder-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-indigo-400:focus::placeholder{--placeholder-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-indigo-500:focus::placeholder{--placeholder-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-indigo-600:focus::placeholder{--placeholder-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-indigo-700:focus::placeholder{--placeholder-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-indigo-800:focus::placeholder{--placeholder-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-indigo-900:focus::placeholder{--placeholder-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-purple-100:focus::placeholder{--placeholder-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-purple-200:focus::placeholder{--placeholder-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-purple-300:focus::placeholder{--placeholder-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-purple-400:focus::placeholder{--placeholder-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-purple-500:focus::placeholder{--placeholder-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-purple-600:focus::placeholder{--placeholder-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-purple-700:focus::placeholder{--placeholder-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-purple-800:focus::placeholder{--placeholder-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-purple-900:focus::placeholder{--placeholder-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-pink-100:focus::placeholder{--placeholder-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-pink-200:focus::placeholder{--placeholder-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-pink-300:focus::placeholder{--placeholder-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-pink-400:focus::placeholder{--placeholder-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-pink-500:focus::placeholder{--placeholder-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-pink-600:focus::placeholder{--placeholder-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-pink-700:focus::placeholder{--placeholder-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-pink-800:focus::placeholder{--placeholder-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-pink-900:focus::placeholder{--placeholder-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--placeholder-opacity))!important}}@media (min-width:600px){.sm\\:placeholder-opacity-0::placeholder{--placeholder-opacity:0!important}}@media (min-width:600px){.sm\\:placeholder-opacity-25::placeholder{--placeholder-opacity:0.25!important}}@media (min-width:600px){.sm\\:placeholder-opacity-50::placeholder{--placeholder-opacity:0.5!important}}@media (min-width:600px){.sm\\:placeholder-opacity-75::placeholder{--placeholder-opacity:0.75!important}}@media (min-width:600px){.sm\\:placeholder-opacity-100::placeholder{--placeholder-opacity:1!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-opacity-0:focus::placeholder{--placeholder-opacity:0!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-opacity-25:focus::placeholder{--placeholder-opacity:0.25!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-opacity-50:focus::placeholder{--placeholder-opacity:0.5!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-opacity-75:focus::placeholder{--placeholder-opacity:0.75!important}}@media (min-width:600px){.sm\\:focus\\:placeholder-opacity-100:focus::placeholder{--placeholder-opacity:1!important}}@media (min-width:600px){.sm\\:pointer-events-none{pointer-events:none!important}}@media (min-width:600px){.sm\\:pointer-events-auto{pointer-events:auto!important}}@media (min-width:600px){.sm\\:static{position:static!important}}@media (min-width:600px){.sm\\:fixed{position:fixed!important}}@media (min-width:600px){.sm\\:absolute{position:absolute!important}}@media (min-width:600px){.sm\\:relative{position:relative!important}}@media (min-width:600px){.sm\\:sticky{position:sticky!important}}@media (min-width:600px){.sm\\:inset-0{top:0!important;right:0!important;bottom:0!important;left:0!important}}@media (min-width:600px){.sm\\:inset-auto{top:auto!important;right:auto!important;bottom:auto!important;left:auto!important}}@media (min-width:600px){.sm\\:inset-y-0{top:0!important;bottom:0!important}}@media (min-width:600px){.sm\\:inset-x-0{right:0!important;left:0!important}}@media (min-width:600px){.sm\\:inset-y-auto{top:auto!important;bottom:auto!important}}@media (min-width:600px){.sm\\:inset-x-auto{right:auto!important;left:auto!important}}@media (min-width:600px){.sm\\:top-0{top:0!important}}@media (min-width:600px){.sm\\:right-0{right:0!important}}@media (min-width:600px){.sm\\:bottom-0{bottom:0!important}}@media (min-width:600px){.sm\\:left-0{left:0!important}}@media (min-width:600px){.sm\\:top-auto{top:auto!important}}@media (min-width:600px){.sm\\:right-auto{right:auto!important}}@media (min-width:600px){.sm\\:bottom-auto{bottom:auto!important}}@media (min-width:600px){.sm\\:left-auto{left:auto!important}}@media (min-width:600px){.sm\\:resize-none{resize:none!important}}@media (min-width:600px){.sm\\:resize-y{resize:vertical!important}}@media (min-width:600px){.sm\\:resize-x{resize:horizontal!important}}@media (min-width:600px){.sm\\:resize{resize:both!important}}@media (min-width:600px){.sm\\:shadow-xs{box-shadow:0 0 0 1px rgba(0,0,0,.05)!important}}@media (min-width:600px){.sm\\:shadow-sm{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important}}@media (min-width:600px){.sm\\:shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)!important}}@media (min-width:600px){.sm\\:shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)!important}}@media (min-width:600px){.sm\\:shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)!important}}@media (min-width:600px){.sm\\:shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)!important}}@media (min-width:600px){.sm\\:shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important}}@media (min-width:600px){.sm\\:shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)!important}}@media (min-width:600px){.sm\\:shadow-outline{box-shadow:0 0 0 3px rgba(66,153,225,.5)!important}}@media (min-width:600px){.sm\\:shadow-none{box-shadow:none!important}}@media (min-width:600px){.sm\\:hover\\:shadow-xs:hover{box-shadow:0 0 0 1px rgba(0,0,0,.05)!important}}@media (min-width:600px){.sm\\:hover\\:shadow-sm:hover{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important}}@media (min-width:600px){.sm\\:hover\\:shadow:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)!important}}@media (min-width:600px){.sm\\:hover\\:shadow-md:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)!important}}@media (min-width:600px){.sm\\:hover\\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)!important}}@media (min-width:600px){.sm\\:hover\\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)!important}}@media (min-width:600px){.sm\\:hover\\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important}}@media (min-width:600px){.sm\\:hover\\:shadow-inner:hover{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)!important}}@media (min-width:600px){.sm\\:hover\\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(66,153,225,.5)!important}}@media (min-width:600px){.sm\\:hover\\:shadow-none:hover{box-shadow:none!important}}@media (min-width:600px){.sm\\:focus\\:shadow-xs:focus{box-shadow:0 0 0 1px rgba(0,0,0,.05)!important}}@media (min-width:600px){.sm\\:focus\\:shadow-sm:focus{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important}}@media (min-width:600px){.sm\\:focus\\:shadow:focus{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)!important}}@media (min-width:600px){.sm\\:focus\\:shadow-md:focus{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)!important}}@media (min-width:600px){.sm\\:focus\\:shadow-lg:focus{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)!important}}@media (min-width:600px){.sm\\:focus\\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)!important}}@media (min-width:600px){.sm\\:focus\\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important}}@media (min-width:600px){.sm\\:focus\\:shadow-inner:focus{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)!important}}@media (min-width:600px){.sm\\:focus\\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(66,153,225,.5)!important}}@media (min-width:600px){.sm\\:focus\\:shadow-none:focus{box-shadow:none!important}}@media (min-width:600px){.sm\\:fill-current{fill:currentColor!important}}@media (min-width:600px){.sm\\:stroke-current{stroke:currentColor!important}}@media (min-width:600px){.sm\\:stroke-0{stroke-width:0!important}}@media (min-width:600px){.sm\\:stroke-1{stroke-width:1!important}}@media (min-width:600px){.sm\\:stroke-2{stroke-width:2!important}}@media (min-width:600px){.sm\\:table-auto{table-layout:auto!important}}@media (min-width:600px){.sm\\:table-fixed{table-layout:fixed!important}}@media (min-width:600px){.sm\\:text-left{text-align:left!important}}@media (min-width:600px){.sm\\:text-center{text-align:center!important}}@media (min-width:600px){.sm\\:text-right{text-align:right!important}}@media (min-width:600px){.sm\\:text-justify{text-align:justify!important}}@media (min-width:600px){.sm\\:text-transparent{color:transparent!important}}@media (min-width:600px){.sm\\:text-current{color:currentColor!important}}@media (min-width:600px){.sm\\:text-black{--text-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-white{--text-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-gray-100{--text-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-gray-200{--text-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-gray-300{--text-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-gray-400{--text-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-gray-500{--text-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-gray-600{--text-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-gray-700{--text-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-gray-800{--text-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-gray-900{--text-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-red-100{--text-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-red-200{--text-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-red-300{--text-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-red-400{--text-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-red-500{--text-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-red-600{--text-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-red-700{--text-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-red-800{--text-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-red-900{--text-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-orange-100{--text-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-orange-200{--text-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-orange-300{--text-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-orange-400{--text-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-orange-500{--text-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-orange-600{--text-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-orange-700{--text-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-orange-800{--text-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-orange-900{--text-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-yellow-100{--text-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-yellow-200{--text-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-yellow-300{--text-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-yellow-400{--text-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-yellow-500{--text-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-yellow-600{--text-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-yellow-700{--text-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-yellow-800{--text-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-yellow-900{--text-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-green-100{--text-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-green-200{--text-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-green-300{--text-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-green-400{--text-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-green-500{--text-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-green-600{--text-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-green-700{--text-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-green-800{--text-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-green-900{--text-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-teal-100{--text-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-teal-200{--text-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-teal-300{--text-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-teal-400{--text-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-teal-500{--text-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-teal-600{--text-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-teal-700{--text-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-teal-800{--text-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-teal-900{--text-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-blue-100{--text-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-blue-200{--text-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-blue-300{--text-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-blue-400{--text-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-blue-500{--text-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-blue-600{--text-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-blue-700{--text-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-blue-800{--text-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-blue-900{--text-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-indigo-100{--text-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-indigo-200{--text-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-indigo-300{--text-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-indigo-400{--text-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-indigo-500{--text-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-indigo-600{--text-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-indigo-700{--text-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-indigo-800{--text-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-indigo-900{--text-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-purple-100{--text-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-purple-200{--text-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-purple-300{--text-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-purple-400{--text-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-purple-500{--text-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-purple-600{--text-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-purple-700{--text-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-purple-800{--text-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-purple-900{--text-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-pink-100{--text-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-pink-200{--text-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-pink-300{--text-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-pink-400{--text-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-pink-500{--text-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-pink-600{--text-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-pink-700{--text-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-pink-800{--text-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-pink-900{--text-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-transparent:hover{color:transparent!important}}@media (min-width:600px){.sm\\:hover\\:text-current:hover{color:currentColor!important}}@media (min-width:600px){.sm\\:hover\\:text-black:hover{--text-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-white:hover{--text-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-gray-100:hover{--text-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-gray-200:hover{--text-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-gray-300:hover{--text-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-gray-400:hover{--text-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-gray-500:hover{--text-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-gray-600:hover{--text-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-gray-700:hover{--text-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-gray-800:hover{--text-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-gray-900:hover{--text-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-red-100:hover{--text-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-red-200:hover{--text-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-red-300:hover{--text-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-red-400:hover{--text-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-red-500:hover{--text-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-red-600:hover{--text-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-red-700:hover{--text-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-red-800:hover{--text-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-red-900:hover{--text-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-orange-100:hover{--text-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-orange-200:hover{--text-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-orange-300:hover{--text-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-orange-400:hover{--text-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-orange-500:hover{--text-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-orange-600:hover{--text-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-orange-700:hover{--text-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-orange-800:hover{--text-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-orange-900:hover{--text-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-yellow-100:hover{--text-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-yellow-200:hover{--text-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-yellow-300:hover{--text-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-yellow-400:hover{--text-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-yellow-500:hover{--text-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-yellow-600:hover{--text-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-yellow-700:hover{--text-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-yellow-800:hover{--text-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-yellow-900:hover{--text-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-green-100:hover{--text-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-green-200:hover{--text-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-green-300:hover{--text-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-green-400:hover{--text-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-green-500:hover{--text-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-green-600:hover{--text-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-green-700:hover{--text-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-green-800:hover{--text-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-green-900:hover{--text-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-teal-100:hover{--text-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-teal-200:hover{--text-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-teal-300:hover{--text-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-teal-400:hover{--text-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-teal-500:hover{--text-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-teal-600:hover{--text-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-teal-700:hover{--text-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-teal-800:hover{--text-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-teal-900:hover{--text-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-blue-100:hover{--text-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-blue-200:hover{--text-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-blue-300:hover{--text-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-blue-400:hover{--text-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-blue-500:hover{--text-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-blue-600:hover{--text-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-blue-700:hover{--text-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-blue-800:hover{--text-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-blue-900:hover{--text-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-indigo-100:hover{--text-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-indigo-200:hover{--text-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-indigo-300:hover{--text-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-indigo-400:hover{--text-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-indigo-500:hover{--text-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-indigo-600:hover{--text-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-indigo-700:hover{--text-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-indigo-800:hover{--text-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-indigo-900:hover{--text-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-purple-100:hover{--text-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-purple-200:hover{--text-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-purple-300:hover{--text-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-purple-400:hover{--text-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-purple-500:hover{--text-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-purple-600:hover{--text-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-purple-700:hover{--text-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-purple-800:hover{--text-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-purple-900:hover{--text-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-pink-100:hover{--text-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-pink-200:hover{--text-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-pink-300:hover{--text-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-pink-400:hover{--text-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-pink-500:hover{--text-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-pink-600:hover{--text-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-pink-700:hover{--text-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-pink-800:hover{--text-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:hover\\:text-pink-900:hover{--text-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-transparent:focus{color:transparent!important}}@media (min-width:600px){.sm\\:focus\\:text-current:focus{color:currentColor!important}}@media (min-width:600px){.sm\\:focus\\:text-black:focus{--text-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-white:focus{--text-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-gray-100:focus{--text-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-gray-200:focus{--text-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-gray-300:focus{--text-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-gray-400:focus{--text-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-gray-500:focus{--text-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-gray-600:focus{--text-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-gray-700:focus{--text-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-gray-800:focus{--text-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-gray-900:focus{--text-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-red-100:focus{--text-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-red-200:focus{--text-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-red-300:focus{--text-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-red-400:focus{--text-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-red-500:focus{--text-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-red-600:focus{--text-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-red-700:focus{--text-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-red-800:focus{--text-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-red-900:focus{--text-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-orange-100:focus{--text-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-orange-200:focus{--text-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-orange-300:focus{--text-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-orange-400:focus{--text-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-orange-500:focus{--text-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-orange-600:focus{--text-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-orange-700:focus{--text-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-orange-800:focus{--text-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-orange-900:focus{--text-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-yellow-100:focus{--text-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-yellow-200:focus{--text-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-yellow-300:focus{--text-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-yellow-400:focus{--text-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-yellow-500:focus{--text-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-yellow-600:focus{--text-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-yellow-700:focus{--text-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-yellow-800:focus{--text-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-yellow-900:focus{--text-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-green-100:focus{--text-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-green-200:focus{--text-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-green-300:focus{--text-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-green-400:focus{--text-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-green-500:focus{--text-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-green-600:focus{--text-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-green-700:focus{--text-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-green-800:focus{--text-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-green-900:focus{--text-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-teal-100:focus{--text-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-teal-200:focus{--text-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-teal-300:focus{--text-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-teal-400:focus{--text-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-teal-500:focus{--text-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-teal-600:focus{--text-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-teal-700:focus{--text-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-teal-800:focus{--text-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-teal-900:focus{--text-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-blue-100:focus{--text-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-blue-200:focus{--text-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-blue-300:focus{--text-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-blue-400:focus{--text-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-blue-500:focus{--text-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-blue-600:focus{--text-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-blue-700:focus{--text-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-blue-800:focus{--text-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-blue-900:focus{--text-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-indigo-100:focus{--text-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-indigo-200:focus{--text-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-indigo-300:focus{--text-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-indigo-400:focus{--text-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-indigo-500:focus{--text-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-indigo-600:focus{--text-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-indigo-700:focus{--text-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-indigo-800:focus{--text-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-indigo-900:focus{--text-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-purple-100:focus{--text-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-purple-200:focus{--text-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-purple-300:focus{--text-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-purple-400:focus{--text-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-purple-500:focus{--text-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-purple-600:focus{--text-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-purple-700:focus{--text-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-purple-800:focus{--text-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-purple-900:focus{--text-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-pink-100:focus{--text-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-pink-200:focus{--text-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-pink-300:focus{--text-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-pink-400:focus{--text-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-pink-500:focus{--text-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-pink-600:focus{--text-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-pink-700:focus{--text-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-pink-800:focus{--text-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:focus\\:text-pink-900:focus{--text-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--text-opacity))!important}}@media (min-width:600px){.sm\\:text-opacity-0{--text-opacity:0!important}}@media (min-width:600px){.sm\\:text-opacity-25{--text-opacity:0.25!important}}@media (min-width:600px){.sm\\:text-opacity-50{--text-opacity:0.5!important}}@media (min-width:600px){.sm\\:text-opacity-75{--text-opacity:0.75!important}}@media (min-width:600px){.sm\\:text-opacity-100{--text-opacity:1!important}}@media (min-width:600px){.sm\\:hover\\:text-opacity-0:hover{--text-opacity:0!important}}@media (min-width:600px){.sm\\:hover\\:text-opacity-25:hover{--text-opacity:0.25!important}}@media (min-width:600px){.sm\\:hover\\:text-opacity-50:hover{--text-opacity:0.5!important}}@media (min-width:600px){.sm\\:hover\\:text-opacity-75:hover{--text-opacity:0.75!important}}@media (min-width:600px){.sm\\:hover\\:text-opacity-100:hover{--text-opacity:1!important}}@media (min-width:600px){.sm\\:focus\\:text-opacity-0:focus{--text-opacity:0!important}}@media (min-width:600px){.sm\\:focus\\:text-opacity-25:focus{--text-opacity:0.25!important}}@media (min-width:600px){.sm\\:focus\\:text-opacity-50:focus{--text-opacity:0.5!important}}@media (min-width:600px){.sm\\:focus\\:text-opacity-75:focus{--text-opacity:0.75!important}}@media (min-width:600px){.sm\\:focus\\:text-opacity-100:focus{--text-opacity:1!important}}@media (min-width:600px){.sm\\:italic{font-style:italic!important}}@media (min-width:600px){.sm\\:not-italic{font-style:normal!important}}@media (min-width:600px){.sm\\:uppercase{text-transform:uppercase!important}}@media (min-width:600px){.sm\\:lowercase{text-transform:lowercase!important}}@media (min-width:600px){.sm\\:capitalize{text-transform:capitalize!important}}@media (min-width:600px){.sm\\:normal-case{text-transform:none!important}}@media (min-width:600px){.sm\\:underline{text-decoration:underline!important}}@media (min-width:600px){.sm\\:line-through{text-decoration:line-through!important}}@media (min-width:600px){.sm\\:no-underline{text-decoration:none!important}}@media (min-width:600px){.sm\\:hover\\:underline:hover{text-decoration:underline!important}}@media (min-width:600px){.sm\\:hover\\:line-through:hover{text-decoration:line-through!important}}@media (min-width:600px){.sm\\:hover\\:no-underline:hover{text-decoration:none!important}}@media (min-width:600px){.sm\\:focus\\:underline:focus{text-decoration:underline!important}}@media (min-width:600px){.sm\\:focus\\:line-through:focus{text-decoration:line-through!important}}@media (min-width:600px){.sm\\:focus\\:no-underline:focus{text-decoration:none!important}}@media (min-width:600px){.sm\\:antialiased{-webkit-font-smoothing:antialiased!important;-moz-osx-font-smoothing:grayscale!important}}@media (min-width:600px){.sm\\:subpixel-antialiased{-webkit-font-smoothing:auto!important;-moz-osx-font-smoothing:auto!important}}@media (min-width:600px){.sm\\:diagonal-fractions,.sm\\:lining-nums,.sm\\:oldstyle-nums,.sm\\:ordinal,.sm\\:proportional-nums,.sm\\:slashed-zero,.sm\\:stacked-fractions,.sm\\:tabular-nums{--font-variant-numeric-ordinal:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-slashed-zero:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-figure:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-spacing:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-fraction:var(--tailwind-empty,/*!*/ /*!*/)!important;font-variant-numeric:var(--font-variant-numeric-ordinal) var(--font-variant-numeric-slashed-zero) var(--font-variant-numeric-figure) var(--font-variant-numeric-spacing) var(--font-variant-numeric-fraction)!important}}@media (min-width:600px){.sm\\:normal-nums{font-variant-numeric:normal!important}}@media (min-width:600px){.sm\\:ordinal{--font-variant-numeric-ordinal:ordinal!important}}@media (min-width:600px){.sm\\:slashed-zero{--font-variant-numeric-slashed-zero:slashed-zero!important}}@media (min-width:600px){.sm\\:lining-nums{--font-variant-numeric-figure:lining-nums!important}}@media (min-width:600px){.sm\\:oldstyle-nums{--font-variant-numeric-figure:oldstyle-nums!important}}@media (min-width:600px){.sm\\:proportional-nums{--font-variant-numeric-spacing:proportional-nums!important}}@media (min-width:600px){.sm\\:tabular-nums{--font-variant-numeric-spacing:tabular-nums!important}}@media (min-width:600px){.sm\\:diagonal-fractions{--font-variant-numeric-fraction:diagonal-fractions!important}}@media (min-width:600px){.sm\\:stacked-fractions{--font-variant-numeric-fraction:stacked-fractions!important}}@media (min-width:600px){.sm\\:tracking-tighter{letter-spacing:-.05em!important}}@media (min-width:600px){.sm\\:tracking-tight{letter-spacing:-.025em!important}}@media (min-width:600px){.sm\\:tracking-normal{letter-spacing:0!important}}@media (min-width:600px){.sm\\:tracking-wide{letter-spacing:.025em!important}}@media (min-width:600px){.sm\\:tracking-wider{letter-spacing:.05em!important}}@media (min-width:600px){.sm\\:tracking-widest{letter-spacing:.1em!important}}@media (min-width:600px){.sm\\:select-none{-webkit-user-select:none!important;user-select:none!important}}@media (min-width:600px){.sm\\:select-text{-webkit-user-select:text!important;user-select:text!important}}@media (min-width:600px){.sm\\:select-all{-webkit-user-select:all!important;user-select:all!important}}@media (min-width:600px){.sm\\:select-auto{-webkit-user-select:auto!important;user-select:auto!important}}@media (min-width:600px){.sm\\:align-baseline{vertical-align:initial!important}}@media (min-width:600px){.sm\\:align-top{vertical-align:top!important}}@media (min-width:600px){.sm\\:align-middle{vertical-align:middle!important}}@media (min-width:600px){.sm\\:align-bottom{vertical-align:bottom!important}}@media (min-width:600px){.sm\\:align-text-top{vertical-align:text-top!important}}@media (min-width:600px){.sm\\:align-text-bottom{vertical-align:text-bottom!important}}@media (min-width:600px){.sm\\:visible{visibility:visible!important}}@media (min-width:600px){.sm\\:invisible{visibility:hidden!important}}@media (min-width:600px){.sm\\:whitespace-normal{white-space:normal!important}}@media (min-width:600px){.sm\\:whitespace-no-wrap{white-space:nowrap!important}}@media (min-width:600px){.sm\\:whitespace-pre{white-space:pre!important}}@media (min-width:600px){.sm\\:whitespace-pre-line{white-space:pre-line!important}}@media (min-width:600px){.sm\\:whitespace-pre-wrap{white-space:pre-wrap!important}}@media (min-width:600px){.sm\\:break-normal{word-wrap:normal!important;overflow-wrap:normal!important;word-break:normal!important}}@media (min-width:600px){.sm\\:break-words{word-wrap:break-word!important;overflow-wrap:break-word!important}}@media (min-width:600px){.sm\\:break-all{word-break:break-all!important}}@media (min-width:600px){.sm\\:truncate{overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}}@media (min-width:600px){.sm\\:w-0{width:0!important}}@media (min-width:600px){.sm\\:w-1{width:.25rem!important}}@media (min-width:600px){.sm\\:w-2{width:.5rem!important}}@media (min-width:600px){.sm\\:w-3{width:.75rem!important}}@media (min-width:600px){.sm\\:w-4{width:1rem!important}}@media (min-width:600px){.sm\\:w-5{width:1.25rem!important}}@media (min-width:600px){.sm\\:w-6{width:1.5rem!important}}@media (min-width:600px){.sm\\:w-8{width:2rem!important}}@media (min-width:600px){.sm\\:w-10{width:2.5rem!important}}@media (min-width:600px){.sm\\:w-12{width:3rem!important}}@media (min-width:600px){.sm\\:w-16{width:4rem!important}}@media (min-width:600px){.sm\\:w-20{width:5rem!important}}@media (min-width:600px){.sm\\:w-24{width:6rem!important}}@media (min-width:600px){.sm\\:w-32{width:8rem!important}}@media (min-width:600px){.sm\\:w-40{width:10rem!important}}@media (min-width:600px){.sm\\:w-48{width:12rem!important}}@media (min-width:600px){.sm\\:w-56{width:14rem!important}}@media (min-width:600px){.sm\\:w-64{width:16rem!important}}@media (min-width:600px){.sm\\:w-auto{width:auto!important}}@media (min-width:600px){.sm\\:w-px{width:1px!important}}@media (min-width:600px){.sm\\:w-1\\/2{width:50%!important}}@media (min-width:600px){.sm\\:w-1\\/3{width:33.333333%!important}}@media (min-width:600px){.sm\\:w-2\\/3{width:66.666667%!important}}@media (min-width:600px){.sm\\:w-1\\/4{width:25%!important}}@media (min-width:600px){.sm\\:w-2\\/4{width:50%!important}}@media (min-width:600px){.sm\\:w-3\\/4{width:75%!important}}@media (min-width:600px){.sm\\:w-1\\/5{width:20%!important}}@media (min-width:600px){.sm\\:w-2\\/5{width:40%!important}}@media (min-width:600px){.sm\\:w-3\\/5{width:60%!important}}@media (min-width:600px){.sm\\:w-4\\/5{width:80%!important}}@media (min-width:600px){.sm\\:w-1\\/6{width:16.666667%!important}}@media (min-width:600px){.sm\\:w-2\\/6{width:33.333333%!important}}@media (min-width:600px){.sm\\:w-3\\/6{width:50%!important}}@media (min-width:600px){.sm\\:w-4\\/6{width:66.666667%!important}}@media (min-width:600px){.sm\\:w-5\\/6{width:83.333333%!important}}@media (min-width:600px){.sm\\:w-1\\/12{width:8.333333%!important}}@media (min-width:600px){.sm\\:w-2\\/12{width:16.666667%!important}}@media (min-width:600px){.sm\\:w-3\\/12{width:25%!important}}@media (min-width:600px){.sm\\:w-4\\/12{width:33.333333%!important}}@media (min-width:600px){.sm\\:w-5\\/12{width:41.666667%!important}}@media (min-width:600px){.sm\\:w-6\\/12{width:50%!important}}@media (min-width:600px){.sm\\:w-7\\/12{width:58.333333%!important}}@media (min-width:600px){.sm\\:w-8\\/12{width:66.666667%!important}}@media (min-width:600px){.sm\\:w-9\\/12{width:75%!important}}@media (min-width:600px){.sm\\:w-10\\/12{width:83.333333%!important}}@media (min-width:600px){.sm\\:w-11\\/12{width:91.666667%!important}}@media (min-width:600px){.sm\\:w-full{width:100%!important}}@media (min-width:600px){.sm\\:w-screen{width:100vw!important}}@media (min-width:600px){.sm\\:z-0{z-index:0!important}}@media (min-width:600px){.sm\\:z-10{z-index:10!important}}@media (min-width:600px){.sm\\:z-20{z-index:20!important}}@media (min-width:600px){.sm\\:z-30{z-index:30!important}}@media (min-width:600px){.sm\\:z-40{z-index:40!important}}@media (min-width:600px){.sm\\:z-50{z-index:50!important}}@media (min-width:600px){.sm\\:z-auto{z-index:auto!important}}@media (min-width:600px){.sm\\:gap-0{grid-gap:0!important;gap:0!important}}@media (min-width:600px){.sm\\:gap-1{grid-gap:.25rem!important;gap:.25rem!important}}@media (min-width:600px){.sm\\:gap-2{grid-gap:.5rem!important;gap:.5rem!important}}@media (min-width:600px){.sm\\:gap-3{grid-gap:.75rem!important;gap:.75rem!important}}@media (min-width:600px){.sm\\:gap-4{grid-gap:1rem!important;gap:1rem!important}}@media (min-width:600px){.sm\\:gap-5{grid-gap:1.25rem!important;gap:1.25rem!important}}@media (min-width:600px){.sm\\:gap-6{grid-gap:1.5rem!important;gap:1.5rem!important}}@media (min-width:600px){.sm\\:gap-8{grid-gap:2rem!important;gap:2rem!important}}@media (min-width:600px){.sm\\:gap-10{grid-gap:2.5rem!important;gap:2.5rem!important}}@media (min-width:600px){.sm\\:gap-12{grid-gap:3rem!important;gap:3rem!important}}@media (min-width:600px){.sm\\:gap-16{grid-gap:4rem!important;gap:4rem!important}}@media (min-width:600px){.sm\\:gap-20{grid-gap:5rem!important;gap:5rem!important}}@media (min-width:600px){.sm\\:gap-24{grid-gap:6rem!important;gap:6rem!important}}@media (min-width:600px){.sm\\:gap-32{grid-gap:8rem!important;gap:8rem!important}}@media (min-width:600px){.sm\\:gap-40{grid-gap:10rem!important;gap:10rem!important}}@media (min-width:600px){.sm\\:gap-48{grid-gap:12rem!important;gap:12rem!important}}@media (min-width:600px){.sm\\:gap-56{grid-gap:14rem!important;gap:14rem!important}}@media (min-width:600px){.sm\\:gap-64{grid-gap:16rem!important;gap:16rem!important}}@media (min-width:600px){.sm\\:gap-px{grid-gap:1px!important;gap:1px!important}}@media (min-width:600px){.sm\\:col-gap-0{grid-column-gap:0!important;column-gap:0!important}}@media (min-width:600px){.sm\\:col-gap-1{grid-column-gap:.25rem!important;column-gap:.25rem!important}}@media (min-width:600px){.sm\\:col-gap-2{grid-column-gap:.5rem!important;column-gap:.5rem!important}}@media (min-width:600px){.sm\\:col-gap-3{grid-column-gap:.75rem!important;column-gap:.75rem!important}}@media (min-width:600px){.sm\\:col-gap-4{grid-column-gap:1rem!important;column-gap:1rem!important}}@media (min-width:600px){.sm\\:col-gap-5{grid-column-gap:1.25rem!important;column-gap:1.25rem!important}}@media (min-width:600px){.sm\\:col-gap-6{grid-column-gap:1.5rem!important;column-gap:1.5rem!important}}@media (min-width:600px){.sm\\:col-gap-8{grid-column-gap:2rem!important;column-gap:2rem!important}}@media (min-width:600px){.sm\\:col-gap-10{grid-column-gap:2.5rem!important;column-gap:2.5rem!important}}@media (min-width:600px){.sm\\:col-gap-12{grid-column-gap:3rem!important;column-gap:3rem!important}}@media (min-width:600px){.sm\\:col-gap-16{grid-column-gap:4rem!important;column-gap:4rem!important}}@media (min-width:600px){.sm\\:col-gap-20{grid-column-gap:5rem!important;column-gap:5rem!important}}@media (min-width:600px){.sm\\:col-gap-24{grid-column-gap:6rem!important;column-gap:6rem!important}}@media (min-width:600px){.sm\\:col-gap-32{grid-column-gap:8rem!important;column-gap:8rem!important}}@media (min-width:600px){.sm\\:col-gap-40{grid-column-gap:10rem!important;column-gap:10rem!important}}@media (min-width:600px){.sm\\:col-gap-48{grid-column-gap:12rem!important;column-gap:12rem!important}}@media (min-width:600px){.sm\\:col-gap-56{grid-column-gap:14rem!important;column-gap:14rem!important}}@media (min-width:600px){.sm\\:col-gap-64{grid-column-gap:16rem!important;column-gap:16rem!important}}@media (min-width:600px){.sm\\:col-gap-px{grid-column-gap:1px!important;column-gap:1px!important}}@media (min-width:600px){.sm\\:gap-x-0{grid-column-gap:0!important;column-gap:0!important}}@media (min-width:600px){.sm\\:gap-x-1{grid-column-gap:.25rem!important;column-gap:.25rem!important}}@media (min-width:600px){.sm\\:gap-x-2{grid-column-gap:.5rem!important;column-gap:.5rem!important}}@media (min-width:600px){.sm\\:gap-x-3{grid-column-gap:.75rem!important;column-gap:.75rem!important}}@media (min-width:600px){.sm\\:gap-x-4{grid-column-gap:1rem!important;column-gap:1rem!important}}@media (min-width:600px){.sm\\:gap-x-5{grid-column-gap:1.25rem!important;column-gap:1.25rem!important}}@media (min-width:600px){.sm\\:gap-x-6{grid-column-gap:1.5rem!important;column-gap:1.5rem!important}}@media (min-width:600px){.sm\\:gap-x-8{grid-column-gap:2rem!important;column-gap:2rem!important}}@media (min-width:600px){.sm\\:gap-x-10{grid-column-gap:2.5rem!important;column-gap:2.5rem!important}}@media (min-width:600px){.sm\\:gap-x-12{grid-column-gap:3rem!important;column-gap:3rem!important}}@media (min-width:600px){.sm\\:gap-x-16{grid-column-gap:4rem!important;column-gap:4rem!important}}@media (min-width:600px){.sm\\:gap-x-20{grid-column-gap:5rem!important;column-gap:5rem!important}}@media (min-width:600px){.sm\\:gap-x-24{grid-column-gap:6rem!important;column-gap:6rem!important}}@media (min-width:600px){.sm\\:gap-x-32{grid-column-gap:8rem!important;column-gap:8rem!important}}@media (min-width:600px){.sm\\:gap-x-40{grid-column-gap:10rem!important;column-gap:10rem!important}}@media (min-width:600px){.sm\\:gap-x-48{grid-column-gap:12rem!important;column-gap:12rem!important}}@media (min-width:600px){.sm\\:gap-x-56{grid-column-gap:14rem!important;column-gap:14rem!important}}@media (min-width:600px){.sm\\:gap-x-64{grid-column-gap:16rem!important;column-gap:16rem!important}}@media (min-width:600px){.sm\\:gap-x-px{grid-column-gap:1px!important;column-gap:1px!important}}@media (min-width:600px){.sm\\:row-gap-0{grid-row-gap:0!important;row-gap:0!important}}@media (min-width:600px){.sm\\:row-gap-1{grid-row-gap:.25rem!important;row-gap:.25rem!important}}@media (min-width:600px){.sm\\:row-gap-2{grid-row-gap:.5rem!important;row-gap:.5rem!important}}@media (min-width:600px){.sm\\:row-gap-3{grid-row-gap:.75rem!important;row-gap:.75rem!important}}@media (min-width:600px){.sm\\:row-gap-4{grid-row-gap:1rem!important;row-gap:1rem!important}}@media (min-width:600px){.sm\\:row-gap-5{grid-row-gap:1.25rem!important;row-gap:1.25rem!important}}@media (min-width:600px){.sm\\:row-gap-6{grid-row-gap:1.5rem!important;row-gap:1.5rem!important}}@media (min-width:600px){.sm\\:row-gap-8{grid-row-gap:2rem!important;row-gap:2rem!important}}@media (min-width:600px){.sm\\:row-gap-10{grid-row-gap:2.5rem!important;row-gap:2.5rem!important}}@media (min-width:600px){.sm\\:row-gap-12{grid-row-gap:3rem!important;row-gap:3rem!important}}@media (min-width:600px){.sm\\:row-gap-16{grid-row-gap:4rem!important;row-gap:4rem!important}}@media (min-width:600px){.sm\\:row-gap-20{grid-row-gap:5rem!important;row-gap:5rem!important}}@media (min-width:600px){.sm\\:row-gap-24{grid-row-gap:6rem!important;row-gap:6rem!important}}@media (min-width:600px){.sm\\:row-gap-32{grid-row-gap:8rem!important;row-gap:8rem!important}}@media (min-width:600px){.sm\\:row-gap-40{grid-row-gap:10rem!important;row-gap:10rem!important}}@media (min-width:600px){.sm\\:row-gap-48{grid-row-gap:12rem!important;row-gap:12rem!important}}@media (min-width:600px){.sm\\:row-gap-56{grid-row-gap:14rem!important;row-gap:14rem!important}}@media (min-width:600px){.sm\\:row-gap-64{grid-row-gap:16rem!important;row-gap:16rem!important}}@media (min-width:600px){.sm\\:row-gap-px{grid-row-gap:1px!important;row-gap:1px!important}}@media (min-width:600px){.sm\\:gap-y-0{grid-row-gap:0!important;row-gap:0!important}}@media (min-width:600px){.sm\\:gap-y-1{grid-row-gap:.25rem!important;row-gap:.25rem!important}}@media (min-width:600px){.sm\\:gap-y-2{grid-row-gap:.5rem!important;row-gap:.5rem!important}}@media (min-width:600px){.sm\\:gap-y-3{grid-row-gap:.75rem!important;row-gap:.75rem!important}}@media (min-width:600px){.sm\\:gap-y-4{grid-row-gap:1rem!important;row-gap:1rem!important}}@media (min-width:600px){.sm\\:gap-y-5{grid-row-gap:1.25rem!important;row-gap:1.25rem!important}}@media (min-width:600px){.sm\\:gap-y-6{grid-row-gap:1.5rem!important;row-gap:1.5rem!important}}@media (min-width:600px){.sm\\:gap-y-8{grid-row-gap:2rem!important;row-gap:2rem!important}}@media (min-width:600px){.sm\\:gap-y-10{grid-row-gap:2.5rem!important;row-gap:2.5rem!important}}@media (min-width:600px){.sm\\:gap-y-12{grid-row-gap:3rem!important;row-gap:3rem!important}}@media (min-width:600px){.sm\\:gap-y-16{grid-row-gap:4rem!important;row-gap:4rem!important}}@media (min-width:600px){.sm\\:gap-y-20{grid-row-gap:5rem!important;row-gap:5rem!important}}@media (min-width:600px){.sm\\:gap-y-24{grid-row-gap:6rem!important;row-gap:6rem!important}}@media (min-width:600px){.sm\\:gap-y-32{grid-row-gap:8rem!important;row-gap:8rem!important}}@media (min-width:600px){.sm\\:gap-y-40{grid-row-gap:10rem!important;row-gap:10rem!important}}@media (min-width:600px){.sm\\:gap-y-48{grid-row-gap:12rem!important;row-gap:12rem!important}}@media (min-width:600px){.sm\\:gap-y-56{grid-row-gap:14rem!important;row-gap:14rem!important}}@media (min-width:600px){.sm\\:gap-y-64{grid-row-gap:16rem!important;row-gap:16rem!important}}@media (min-width:600px){.sm\\:gap-y-px{grid-row-gap:1px!important;row-gap:1px!important}}@media (min-width:600px){.sm\\:grid-flow-row{grid-auto-flow:row!important}}@media (min-width:600px){.sm\\:grid-flow-col{grid-auto-flow:column!important}}@media (min-width:600px){.sm\\:grid-flow-row-dense{grid-auto-flow:row dense!important}}@media (min-width:600px){.sm\\:grid-flow-col-dense{grid-auto-flow:column dense!important}}@media (min-width:600px){.sm\\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}}@media (min-width:600px){.sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}}@media (min-width:600px){.sm\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}}@media (min-width:600px){.sm\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))!important}}@media (min-width:600px){.sm\\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))!important}}@media (min-width:600px){.sm\\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))!important}}@media (min-width:600px){.sm\\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))!important}}@media (min-width:600px){.sm\\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))!important}}@media (min-width:600px){.sm\\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))!important}}@media (min-width:600px){.sm\\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))!important}}@media (min-width:600px){.sm\\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))!important}}@media (min-width:600px){.sm\\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))!important}}@media (min-width:600px){.sm\\:grid-cols-none{grid-template-columns:none!important}}@media (min-width:600px){.sm\\:auto-cols-auto{grid-auto-columns:auto!important}}@media (min-width:600px){.sm\\:auto-cols-min{grid-auto-columns:-webkit-min-content!important;grid-auto-columns:min-content!important}}@media (min-width:600px){.sm\\:auto-cols-max{grid-auto-columns:-webkit-max-content!important;grid-auto-columns:max-content!important}}@media (min-width:600px){.sm\\:auto-cols-fr{grid-auto-columns:minmax(0,1fr)!important}}@media (min-width:600px){.sm\\:col-auto{grid-column:auto!important}}@media (min-width:600px){.sm\\:col-span-1{grid-column:span 1/span 1!important}}@media (min-width:600px){.sm\\:col-span-2{grid-column:span 2/span 2!important}}@media (min-width:600px){.sm\\:col-span-3{grid-column:span 3/span 3!important}}@media (min-width:600px){.sm\\:col-span-4{grid-column:span 4/span 4!important}}@media (min-width:600px){.sm\\:col-span-5{grid-column:span 5/span 5!important}}@media (min-width:600px){.sm\\:col-span-6{grid-column:span 6/span 6!important}}@media (min-width:600px){.sm\\:col-span-7{grid-column:span 7/span 7!important}}@media (min-width:600px){.sm\\:col-span-8{grid-column:span 8/span 8!important}}@media (min-width:600px){.sm\\:col-span-9{grid-column:span 9/span 9!important}}@media (min-width:600px){.sm\\:col-span-10{grid-column:span 10/span 10!important}}@media (min-width:600px){.sm\\:col-span-11{grid-column:span 11/span 11!important}}@media (min-width:600px){.sm\\:col-span-12{grid-column:span 12/span 12!important}}@media (min-width:600px){.sm\\:col-span-full{grid-column:1/-1!important}}@media (min-width:600px){.sm\\:col-start-1{grid-column-start:1!important}}@media (min-width:600px){.sm\\:col-start-2{grid-column-start:2!important}}@media (min-width:600px){.sm\\:col-start-3{grid-column-start:3!important}}@media (min-width:600px){.sm\\:col-start-4{grid-column-start:4!important}}@media (min-width:600px){.sm\\:col-start-5{grid-column-start:5!important}}@media (min-width:600px){.sm\\:col-start-6{grid-column-start:6!important}}@media (min-width:600px){.sm\\:col-start-7{grid-column-start:7!important}}@media (min-width:600px){.sm\\:col-start-8{grid-column-start:8!important}}@media (min-width:600px){.sm\\:col-start-9{grid-column-start:9!important}}@media (min-width:600px){.sm\\:col-start-10{grid-column-start:10!important}}@media (min-width:600px){.sm\\:col-start-11{grid-column-start:11!important}}@media (min-width:600px){.sm\\:col-start-12{grid-column-start:12!important}}@media (min-width:600px){.sm\\:col-start-13{grid-column-start:13!important}}@media (min-width:600px){.sm\\:col-start-auto{grid-column-start:auto!important}}@media (min-width:600px){.sm\\:col-end-1{grid-column-end:1!important}}@media (min-width:600px){.sm\\:col-end-2{grid-column-end:2!important}}@media (min-width:600px){.sm\\:col-end-3{grid-column-end:3!important}}@media (min-width:600px){.sm\\:col-end-4{grid-column-end:4!important}}@media (min-width:600px){.sm\\:col-end-5{grid-column-end:5!important}}@media (min-width:600px){.sm\\:col-end-6{grid-column-end:6!important}}@media (min-width:600px){.sm\\:col-end-7{grid-column-end:7!important}}@media (min-width:600px){.sm\\:col-end-8{grid-column-end:8!important}}@media (min-width:600px){.sm\\:col-end-9{grid-column-end:9!important}}@media (min-width:600px){.sm\\:col-end-10{grid-column-end:10!important}}@media (min-width:600px){.sm\\:col-end-11{grid-column-end:11!important}}@media (min-width:600px){.sm\\:col-end-12{grid-column-end:12!important}}@media (min-width:600px){.sm\\:col-end-13{grid-column-end:13!important}}@media (min-width:600px){.sm\\:col-end-auto{grid-column-end:auto!important}}@media (min-width:600px){.sm\\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))!important}}@media (min-width:600px){.sm\\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))!important}}@media (min-width:600px){.sm\\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))!important}}@media (min-width:600px){.sm\\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))!important}}@media (min-width:600px){.sm\\:grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))!important}}@media (min-width:600px){.sm\\:grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))!important}}@media (min-width:600px){.sm\\:grid-rows-none{grid-template-rows:none!important}}@media (min-width:600px){.sm\\:auto-rows-auto{grid-auto-rows:auto!important}}@media (min-width:600px){.sm\\:auto-rows-min{grid-auto-rows:-webkit-min-content!important;grid-auto-rows:min-content!important}}@media (min-width:600px){.sm\\:auto-rows-max{grid-auto-rows:-webkit-max-content!important;grid-auto-rows:max-content!important}}@media (min-width:600px){.sm\\:auto-rows-fr{grid-auto-rows:minmax(0,1fr)!important}}@media (min-width:600px){.sm\\:row-auto{grid-row:auto!important}}@media (min-width:600px){.sm\\:row-span-1{grid-row:span 1/span 1!important}}@media (min-width:600px){.sm\\:row-span-2{grid-row:span 2/span 2!important}}@media (min-width:600px){.sm\\:row-span-3{grid-row:span 3/span 3!important}}@media (min-width:600px){.sm\\:row-span-4{grid-row:span 4/span 4!important}}@media (min-width:600px){.sm\\:row-span-5{grid-row:span 5/span 5!important}}@media (min-width:600px){.sm\\:row-span-6{grid-row:span 6/span 6!important}}@media (min-width:600px){.sm\\:row-span-full{grid-row:1/-1!important}}@media (min-width:600px){.sm\\:row-start-1{grid-row-start:1!important}}@media (min-width:600px){.sm\\:row-start-2{grid-row-start:2!important}}@media (min-width:600px){.sm\\:row-start-3{grid-row-start:3!important}}@media (min-width:600px){.sm\\:row-start-4{grid-row-start:4!important}}@media (min-width:600px){.sm\\:row-start-5{grid-row-start:5!important}}@media (min-width:600px){.sm\\:row-start-6{grid-row-start:6!important}}@media (min-width:600px){.sm\\:row-start-7{grid-row-start:7!important}}@media (min-width:600px){.sm\\:row-start-auto{grid-row-start:auto!important}}@media (min-width:600px){.sm\\:row-end-1{grid-row-end:1!important}}@media (min-width:600px){.sm\\:row-end-2{grid-row-end:2!important}}@media (min-width:600px){.sm\\:row-end-3{grid-row-end:3!important}}@media (min-width:600px){.sm\\:row-end-4{grid-row-end:4!important}}@media (min-width:600px){.sm\\:row-end-5{grid-row-end:5!important}}@media (min-width:600px){.sm\\:row-end-6{grid-row-end:6!important}}@media (min-width:600px){.sm\\:row-end-7{grid-row-end:7!important}}@media (min-width:600px){.sm\\:row-end-auto{grid-row-end:auto!important}}@media (min-width:600px){.sm\\:transform{--transform-translate-x:0!important;--transform-translate-y:0!important;--transform-rotate:0!important;--transform-skew-x:0!important;--transform-skew-y:0!important;--transform-scale-x:1!important;--transform-scale-y:1!important;transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))!important}}@media (min-width:600px){.sm\\:transform-none{transform:none!important}}@media (min-width:600px){.sm\\:origin-center{transform-origin:center!important}}@media (min-width:600px){.sm\\:origin-top{transform-origin:top!important}}@media (min-width:600px){.sm\\:origin-top-right{transform-origin:top right!important}}@media (min-width:600px){.sm\\:origin-right{transform-origin:right!important}}@media (min-width:600px){.sm\\:origin-bottom-right{transform-origin:bottom right!important}}@media (min-width:600px){.sm\\:origin-bottom{transform-origin:bottom!important}}@media (min-width:600px){.sm\\:origin-bottom-left{transform-origin:bottom left!important}}@media (min-width:600px){.sm\\:origin-left{transform-origin:left!important}}@media (min-width:600px){.sm\\:origin-top-left{transform-origin:top left!important}}@media (min-width:600px){.sm\\:scale-0{--transform-scale-x:0!important;--transform-scale-y:0!important}}@media (min-width:600px){.sm\\:scale-50{--transform-scale-x:.5!important;--transform-scale-y:.5!important}}@media (min-width:600px){.sm\\:scale-75{--transform-scale-x:.75!important;--transform-scale-y:.75!important}}@media (min-width:600px){.sm\\:scale-90{--transform-scale-x:.9!important;--transform-scale-y:.9!important}}@media (min-width:600px){.sm\\:scale-95{--transform-scale-x:.95!important;--transform-scale-y:.95!important}}@media (min-width:600px){.sm\\:scale-100{--transform-scale-x:1!important;--transform-scale-y:1!important}}@media (min-width:600px){.sm\\:scale-105{--transform-scale-x:1.05!important;--transform-scale-y:1.05!important}}@media (min-width:600px){.sm\\:scale-110{--transform-scale-x:1.1!important;--transform-scale-y:1.1!important}}@media (min-width:600px){.sm\\:scale-125{--transform-scale-x:1.25!important;--transform-scale-y:1.25!important}}@media (min-width:600px){.sm\\:scale-150{--transform-scale-x:1.5!important;--transform-scale-y:1.5!important}}@media (min-width:600px){.sm\\:scale-x-0{--transform-scale-x:0!important}}@media (min-width:600px){.sm\\:scale-x-50{--transform-scale-x:.5!important}}@media (min-width:600px){.sm\\:scale-x-75{--transform-scale-x:.75!important}}@media (min-width:600px){.sm\\:scale-x-90{--transform-scale-x:.9!important}}@media (min-width:600px){.sm\\:scale-x-95{--transform-scale-x:.95!important}}@media (min-width:600px){.sm\\:scale-x-100{--transform-scale-x:1!important}}@media (min-width:600px){.sm\\:scale-x-105{--transform-scale-x:1.05!important}}@media (min-width:600px){.sm\\:scale-x-110{--transform-scale-x:1.1!important}}@media (min-width:600px){.sm\\:scale-x-125{--transform-scale-x:1.25!important}}@media (min-width:600px){.sm\\:scale-x-150{--transform-scale-x:1.5!important}}@media (min-width:600px){.sm\\:scale-y-0{--transform-scale-y:0!important}}@media (min-width:600px){.sm\\:scale-y-50{--transform-scale-y:.5!important}}@media (min-width:600px){.sm\\:scale-y-75{--transform-scale-y:.75!important}}@media (min-width:600px){.sm\\:scale-y-90{--transform-scale-y:.9!important}}@media (min-width:600px){.sm\\:scale-y-95{--transform-scale-y:.95!important}}@media (min-width:600px){.sm\\:scale-y-100{--transform-scale-y:1!important}}@media (min-width:600px){.sm\\:scale-y-105{--transform-scale-y:1.05!important}}@media (min-width:600px){.sm\\:scale-y-110{--transform-scale-y:1.1!important}}@media (min-width:600px){.sm\\:scale-y-125{--transform-scale-y:1.25!important}}@media (min-width:600px){.sm\\:scale-y-150{--transform-scale-y:1.5!important}}@media (min-width:600px){.sm\\:hover\\:scale-0:hover{--transform-scale-x:0!important;--transform-scale-y:0!important}}@media (min-width:600px){.sm\\:hover\\:scale-50:hover{--transform-scale-x:.5!important;--transform-scale-y:.5!important}}@media (min-width:600px){.sm\\:hover\\:scale-75:hover{--transform-scale-x:.75!important;--transform-scale-y:.75!important}}@media (min-width:600px){.sm\\:hover\\:scale-90:hover{--transform-scale-x:.9!important;--transform-scale-y:.9!important}}@media (min-width:600px){.sm\\:hover\\:scale-95:hover{--transform-scale-x:.95!important;--transform-scale-y:.95!important}}@media (min-width:600px){.sm\\:hover\\:scale-100:hover{--transform-scale-x:1!important;--transform-scale-y:1!important}}@media (min-width:600px){.sm\\:hover\\:scale-105:hover{--transform-scale-x:1.05!important;--transform-scale-y:1.05!important}}@media (min-width:600px){.sm\\:hover\\:scale-110:hover{--transform-scale-x:1.1!important;--transform-scale-y:1.1!important}}@media (min-width:600px){.sm\\:hover\\:scale-125:hover{--transform-scale-x:1.25!important;--transform-scale-y:1.25!important}}@media (min-width:600px){.sm\\:hover\\:scale-150:hover{--transform-scale-x:1.5!important;--transform-scale-y:1.5!important}}@media (min-width:600px){.sm\\:hover\\:scale-x-0:hover{--transform-scale-x:0!important}}@media (min-width:600px){.sm\\:hover\\:scale-x-50:hover{--transform-scale-x:.5!important}}@media (min-width:600px){.sm\\:hover\\:scale-x-75:hover{--transform-scale-x:.75!important}}@media (min-width:600px){.sm\\:hover\\:scale-x-90:hover{--transform-scale-x:.9!important}}@media (min-width:600px){.sm\\:hover\\:scale-x-95:hover{--transform-scale-x:.95!important}}@media (min-width:600px){.sm\\:hover\\:scale-x-100:hover{--transform-scale-x:1!important}}@media (min-width:600px){.sm\\:hover\\:scale-x-105:hover{--transform-scale-x:1.05!important}}@media (min-width:600px){.sm\\:hover\\:scale-x-110:hover{--transform-scale-x:1.1!important}}@media (min-width:600px){.sm\\:hover\\:scale-x-125:hover{--transform-scale-x:1.25!important}}@media (min-width:600px){.sm\\:hover\\:scale-x-150:hover{--transform-scale-x:1.5!important}}@media (min-width:600px){.sm\\:hover\\:scale-y-0:hover{--transform-scale-y:0!important}}@media (min-width:600px){.sm\\:hover\\:scale-y-50:hover{--transform-scale-y:.5!important}}@media (min-width:600px){.sm\\:hover\\:scale-y-75:hover{--transform-scale-y:.75!important}}@media (min-width:600px){.sm\\:hover\\:scale-y-90:hover{--transform-scale-y:.9!important}}@media (min-width:600px){.sm\\:hover\\:scale-y-95:hover{--transform-scale-y:.95!important}}@media (min-width:600px){.sm\\:hover\\:scale-y-100:hover{--transform-scale-y:1!important}}@media (min-width:600px){.sm\\:hover\\:scale-y-105:hover{--transform-scale-y:1.05!important}}@media (min-width:600px){.sm\\:hover\\:scale-y-110:hover{--transform-scale-y:1.1!important}}@media (min-width:600px){.sm\\:hover\\:scale-y-125:hover{--transform-scale-y:1.25!important}}@media (min-width:600px){.sm\\:hover\\:scale-y-150:hover{--transform-scale-y:1.5!important}}@media (min-width:600px){.sm\\:focus\\:scale-0:focus{--transform-scale-x:0!important;--transform-scale-y:0!important}}@media (min-width:600px){.sm\\:focus\\:scale-50:focus{--transform-scale-x:.5!important;--transform-scale-y:.5!important}}@media (min-width:600px){.sm\\:focus\\:scale-75:focus{--transform-scale-x:.75!important;--transform-scale-y:.75!important}}@media (min-width:600px){.sm\\:focus\\:scale-90:focus{--transform-scale-x:.9!important;--transform-scale-y:.9!important}}@media (min-width:600px){.sm\\:focus\\:scale-95:focus{--transform-scale-x:.95!important;--transform-scale-y:.95!important}}@media (min-width:600px){.sm\\:focus\\:scale-100:focus{--transform-scale-x:1!important;--transform-scale-y:1!important}}@media (min-width:600px){.sm\\:focus\\:scale-105:focus{--transform-scale-x:1.05!important;--transform-scale-y:1.05!important}}@media (min-width:600px){.sm\\:focus\\:scale-110:focus{--transform-scale-x:1.1!important;--transform-scale-y:1.1!important}}@media (min-width:600px){.sm\\:focus\\:scale-125:focus{--transform-scale-x:1.25!important;--transform-scale-y:1.25!important}}@media (min-width:600px){.sm\\:focus\\:scale-150:focus{--transform-scale-x:1.5!important;--transform-scale-y:1.5!important}}@media (min-width:600px){.sm\\:focus\\:scale-x-0:focus{--transform-scale-x:0!important}}@media (min-width:600px){.sm\\:focus\\:scale-x-50:focus{--transform-scale-x:.5!important}}@media (min-width:600px){.sm\\:focus\\:scale-x-75:focus{--transform-scale-x:.75!important}}@media (min-width:600px){.sm\\:focus\\:scale-x-90:focus{--transform-scale-x:.9!important}}@media (min-width:600px){.sm\\:focus\\:scale-x-95:focus{--transform-scale-x:.95!important}}@media (min-width:600px){.sm\\:focus\\:scale-x-100:focus{--transform-scale-x:1!important}}@media (min-width:600px){.sm\\:focus\\:scale-x-105:focus{--transform-scale-x:1.05!important}}@media (min-width:600px){.sm\\:focus\\:scale-x-110:focus{--transform-scale-x:1.1!important}}@media (min-width:600px){.sm\\:focus\\:scale-x-125:focus{--transform-scale-x:1.25!important}}@media (min-width:600px){.sm\\:focus\\:scale-x-150:focus{--transform-scale-x:1.5!important}}@media (min-width:600px){.sm\\:focus\\:scale-y-0:focus{--transform-scale-y:0!important}}@media (min-width:600px){.sm\\:focus\\:scale-y-50:focus{--transform-scale-y:.5!important}}@media (min-width:600px){.sm\\:focus\\:scale-y-75:focus{--transform-scale-y:.75!important}}@media (min-width:600px){.sm\\:focus\\:scale-y-90:focus{--transform-scale-y:.9!important}}@media (min-width:600px){.sm\\:focus\\:scale-y-95:focus{--transform-scale-y:.95!important}}@media (min-width:600px){.sm\\:focus\\:scale-y-100:focus{--transform-scale-y:1!important}}@media (min-width:600px){.sm\\:focus\\:scale-y-105:focus{--transform-scale-y:1.05!important}}@media (min-width:600px){.sm\\:focus\\:scale-y-110:focus{--transform-scale-y:1.1!important}}@media (min-width:600px){.sm\\:focus\\:scale-y-125:focus{--transform-scale-y:1.25!important}}@media (min-width:600px){.sm\\:focus\\:scale-y-150:focus{--transform-scale-y:1.5!important}}@media (min-width:600px){.sm\\:rotate-0{--transform-rotate:0!important}}@media (min-width:600px){.sm\\:rotate-1{--transform-rotate:1deg!important}}@media (min-width:600px){.sm\\:rotate-2{--transform-rotate:2deg!important}}@media (min-width:600px){.sm\\:rotate-3{--transform-rotate:3deg!important}}@media (min-width:600px){.sm\\:rotate-6{--transform-rotate:6deg!important}}@media (min-width:600px){.sm\\:rotate-12{--transform-rotate:12deg!important}}@media (min-width:600px){.sm\\:rotate-45{--transform-rotate:45deg!important}}@media (min-width:600px){.sm\\:rotate-90{--transform-rotate:90deg!important}}@media (min-width:600px){.sm\\:rotate-180{--transform-rotate:180deg!important}}@media (min-width:600px){.sm\\:-rotate-180{--transform-rotate:-180deg!important}}@media (min-width:600px){.sm\\:-rotate-90{--transform-rotate:-90deg!important}}@media (min-width:600px){.sm\\:-rotate-45{--transform-rotate:-45deg!important}}@media (min-width:600px){.sm\\:-rotate-12{--transform-rotate:-12deg!important}}@media (min-width:600px){.sm\\:-rotate-6{--transform-rotate:-6deg!important}}@media (min-width:600px){.sm\\:-rotate-3{--transform-rotate:-3deg!important}}@media (min-width:600px){.sm\\:-rotate-2{--transform-rotate:-2deg!important}}@media (min-width:600px){.sm\\:-rotate-1{--transform-rotate:-1deg!important}}@media (min-width:600px){.sm\\:hover\\:rotate-0:hover{--transform-rotate:0!important}}@media (min-width:600px){.sm\\:hover\\:rotate-1:hover{--transform-rotate:1deg!important}}@media (min-width:600px){.sm\\:hover\\:rotate-2:hover{--transform-rotate:2deg!important}}@media (min-width:600px){.sm\\:hover\\:rotate-3:hover{--transform-rotate:3deg!important}}@media (min-width:600px){.sm\\:hover\\:rotate-6:hover{--transform-rotate:6deg!important}}@media (min-width:600px){.sm\\:hover\\:rotate-12:hover{--transform-rotate:12deg!important}}@media (min-width:600px){.sm\\:hover\\:rotate-45:hover{--transform-rotate:45deg!important}}@media (min-width:600px){.sm\\:hover\\:rotate-90:hover{--transform-rotate:90deg!important}}@media (min-width:600px){.sm\\:hover\\:rotate-180:hover{--transform-rotate:180deg!important}}@media (min-width:600px){.sm\\:hover\\:-rotate-180:hover{--transform-rotate:-180deg!important}}@media (min-width:600px){.sm\\:hover\\:-rotate-90:hover{--transform-rotate:-90deg!important}}@media (min-width:600px){.sm\\:hover\\:-rotate-45:hover{--transform-rotate:-45deg!important}}@media (min-width:600px){.sm\\:hover\\:-rotate-12:hover{--transform-rotate:-12deg!important}}@media (min-width:600px){.sm\\:hover\\:-rotate-6:hover{--transform-rotate:-6deg!important}}@media (min-width:600px){.sm\\:hover\\:-rotate-3:hover{--transform-rotate:-3deg!important}}@media (min-width:600px){.sm\\:hover\\:-rotate-2:hover{--transform-rotate:-2deg!important}}@media (min-width:600px){.sm\\:hover\\:-rotate-1:hover{--transform-rotate:-1deg!important}}@media (min-width:600px){.sm\\:focus\\:rotate-0:focus{--transform-rotate:0!important}}@media (min-width:600px){.sm\\:focus\\:rotate-1:focus{--transform-rotate:1deg!important}}@media (min-width:600px){.sm\\:focus\\:rotate-2:focus{--transform-rotate:2deg!important}}@media (min-width:600px){.sm\\:focus\\:rotate-3:focus{--transform-rotate:3deg!important}}@media (min-width:600px){.sm\\:focus\\:rotate-6:focus{--transform-rotate:6deg!important}}@media (min-width:600px){.sm\\:focus\\:rotate-12:focus{--transform-rotate:12deg!important}}@media (min-width:600px){.sm\\:focus\\:rotate-45:focus{--transform-rotate:45deg!important}}@media (min-width:600px){.sm\\:focus\\:rotate-90:focus{--transform-rotate:90deg!important}}@media (min-width:600px){.sm\\:focus\\:rotate-180:focus{--transform-rotate:180deg!important}}@media (min-width:600px){.sm\\:focus\\:-rotate-180:focus{--transform-rotate:-180deg!important}}@media (min-width:600px){.sm\\:focus\\:-rotate-90:focus{--transform-rotate:-90deg!important}}@media (min-width:600px){.sm\\:focus\\:-rotate-45:focus{--transform-rotate:-45deg!important}}@media (min-width:600px){.sm\\:focus\\:-rotate-12:focus{--transform-rotate:-12deg!important}}@media (min-width:600px){.sm\\:focus\\:-rotate-6:focus{--transform-rotate:-6deg!important}}@media (min-width:600px){.sm\\:focus\\:-rotate-3:focus{--transform-rotate:-3deg!important}}@media (min-width:600px){.sm\\:focus\\:-rotate-2:focus{--transform-rotate:-2deg!important}}@media (min-width:600px){.sm\\:focus\\:-rotate-1:focus{--transform-rotate:-1deg!important}}@media (min-width:600px){.sm\\:translate-x-0{--transform-translate-x:0!important}}@media (min-width:600px){.sm\\:translate-x-1{--transform-translate-x:0.25rem!important}}@media (min-width:600px){.sm\\:translate-x-2{--transform-translate-x:0.5rem!important}}@media (min-width:600px){.sm\\:translate-x-3{--transform-translate-x:0.75rem!important}}@media (min-width:600px){.sm\\:translate-x-4{--transform-translate-x:1rem!important}}@media (min-width:600px){.sm\\:translate-x-5{--transform-translate-x:1.25rem!important}}@media (min-width:600px){.sm\\:translate-x-6{--transform-translate-x:1.5rem!important}}@media (min-width:600px){.sm\\:translate-x-8{--transform-translate-x:2rem!important}}@media (min-width:600px){.sm\\:translate-x-10{--transform-translate-x:2.5rem!important}}@media (min-width:600px){.sm\\:translate-x-12{--transform-translate-x:3rem!important}}@media (min-width:600px){.sm\\:translate-x-16{--transform-translate-x:4rem!important}}@media (min-width:600px){.sm\\:translate-x-20{--transform-translate-x:5rem!important}}@media (min-width:600px){.sm\\:translate-x-24{--transform-translate-x:6rem!important}}@media (min-width:600px){.sm\\:translate-x-32{--transform-translate-x:8rem!important}}@media (min-width:600px){.sm\\:translate-x-40{--transform-translate-x:10rem!important}}@media (min-width:600px){.sm\\:translate-x-48{--transform-translate-x:12rem!important}}@media (min-width:600px){.sm\\:translate-x-56{--transform-translate-x:14rem!important}}@media (min-width:600px){.sm\\:translate-x-64{--transform-translate-x:16rem!important}}@media (min-width:600px){.sm\\:translate-x-px{--transform-translate-x:1px!important}}@media (min-width:600px){.sm\\:-translate-x-1{--transform-translate-x:-0.25rem!important}}@media (min-width:600px){.sm\\:-translate-x-2{--transform-translate-x:-0.5rem!important}}@media (min-width:600px){.sm\\:-translate-x-3{--transform-translate-x:-0.75rem!important}}@media (min-width:600px){.sm\\:-translate-x-4{--transform-translate-x:-1rem!important}}@media (min-width:600px){.sm\\:-translate-x-5{--transform-translate-x:-1.25rem!important}}@media (min-width:600px){.sm\\:-translate-x-6{--transform-translate-x:-1.5rem!important}}@media (min-width:600px){.sm\\:-translate-x-8{--transform-translate-x:-2rem!important}}@media (min-width:600px){.sm\\:-translate-x-10{--transform-translate-x:-2.5rem!important}}@media (min-width:600px){.sm\\:-translate-x-12{--transform-translate-x:-3rem!important}}@media (min-width:600px){.sm\\:-translate-x-16{--transform-translate-x:-4rem!important}}@media (min-width:600px){.sm\\:-translate-x-20{--transform-translate-x:-5rem!important}}@media (min-width:600px){.sm\\:-translate-x-24{--transform-translate-x:-6rem!important}}@media (min-width:600px){.sm\\:-translate-x-32{--transform-translate-x:-8rem!important}}@media (min-width:600px){.sm\\:-translate-x-40{--transform-translate-x:-10rem!important}}@media (min-width:600px){.sm\\:-translate-x-48{--transform-translate-x:-12rem!important}}@media (min-width:600px){.sm\\:-translate-x-56{--transform-translate-x:-14rem!important}}@media (min-width:600px){.sm\\:-translate-x-64{--transform-translate-x:-16rem!important}}@media (min-width:600px){.sm\\:-translate-x-px{--transform-translate-x:-1px!important}}@media (min-width:600px){.sm\\:-translate-x-full{--transform-translate-x:-100%!important}}@media (min-width:600px){.sm\\:-translate-x-1\\/2{--transform-translate-x:-50%!important}}@media (min-width:600px){.sm\\:translate-x-1\\/2{--transform-translate-x:50%!important}}@media (min-width:600px){.sm\\:translate-x-full{--transform-translate-x:100%!important}}@media (min-width:600px){.sm\\:translate-y-0{--transform-translate-y:0!important}}@media (min-width:600px){.sm\\:translate-y-1{--transform-translate-y:0.25rem!important}}@media (min-width:600px){.sm\\:translate-y-2{--transform-translate-y:0.5rem!important}}@media (min-width:600px){.sm\\:translate-y-3{--transform-translate-y:0.75rem!important}}@media (min-width:600px){.sm\\:translate-y-4{--transform-translate-y:1rem!important}}@media (min-width:600px){.sm\\:translate-y-5{--transform-translate-y:1.25rem!important}}@media (min-width:600px){.sm\\:translate-y-6{--transform-translate-y:1.5rem!important}}@media (min-width:600px){.sm\\:translate-y-8{--transform-translate-y:2rem!important}}@media (min-width:600px){.sm\\:translate-y-10{--transform-translate-y:2.5rem!important}}@media (min-width:600px){.sm\\:translate-y-12{--transform-translate-y:3rem!important}}@media (min-width:600px){.sm\\:translate-y-16{--transform-translate-y:4rem!important}}@media (min-width:600px){.sm\\:translate-y-20{--transform-translate-y:5rem!important}}@media (min-width:600px){.sm\\:translate-y-24{--transform-translate-y:6rem!important}}@media (min-width:600px){.sm\\:translate-y-32{--transform-translate-y:8rem!important}}@media (min-width:600px){.sm\\:translate-y-40{--transform-translate-y:10rem!important}}@media (min-width:600px){.sm\\:translate-y-48{--transform-translate-y:12rem!important}}@media (min-width:600px){.sm\\:translate-y-56{--transform-translate-y:14rem!important}}@media (min-width:600px){.sm\\:translate-y-64{--transform-translate-y:16rem!important}}@media (min-width:600px){.sm\\:translate-y-px{--transform-translate-y:1px!important}}@media (min-width:600px){.sm\\:-translate-y-1{--transform-translate-y:-0.25rem!important}}@media (min-width:600px){.sm\\:-translate-y-2{--transform-translate-y:-0.5rem!important}}@media (min-width:600px){.sm\\:-translate-y-3{--transform-translate-y:-0.75rem!important}}@media (min-width:600px){.sm\\:-translate-y-4{--transform-translate-y:-1rem!important}}@media (min-width:600px){.sm\\:-translate-y-5{--transform-translate-y:-1.25rem!important}}@media (min-width:600px){.sm\\:-translate-y-6{--transform-translate-y:-1.5rem!important}}@media (min-width:600px){.sm\\:-translate-y-8{--transform-translate-y:-2rem!important}}@media (min-width:600px){.sm\\:-translate-y-10{--transform-translate-y:-2.5rem!important}}@media (min-width:600px){.sm\\:-translate-y-12{--transform-translate-y:-3rem!important}}@media (min-width:600px){.sm\\:-translate-y-16{--transform-translate-y:-4rem!important}}@media (min-width:600px){.sm\\:-translate-y-20{--transform-translate-y:-5rem!important}}@media (min-width:600px){.sm\\:-translate-y-24{--transform-translate-y:-6rem!important}}@media (min-width:600px){.sm\\:-translate-y-32{--transform-translate-y:-8rem!important}}@media (min-width:600px){.sm\\:-translate-y-40{--transform-translate-y:-10rem!important}}@media (min-width:600px){.sm\\:-translate-y-48{--transform-translate-y:-12rem!important}}@media (min-width:600px){.sm\\:-translate-y-56{--transform-translate-y:-14rem!important}}@media (min-width:600px){.sm\\:-translate-y-64{--transform-translate-y:-16rem!important}}@media (min-width:600px){.sm\\:-translate-y-px{--transform-translate-y:-1px!important}}@media (min-width:600px){.sm\\:-translate-y-full{--transform-translate-y:-100%!important}}@media (min-width:600px){.sm\\:-translate-y-1\\/2{--transform-translate-y:-50%!important}}@media (min-width:600px){.sm\\:translate-y-1\\/2{--transform-translate-y:50%!important}}@media (min-width:600px){.sm\\:translate-y-full{--transform-translate-y:100%!important}}@media (min-width:600px){.sm\\:hover\\:translate-x-0:hover{--transform-translate-x:0!important}}@media (min-width:600px){.sm\\:hover\\:translate-x-1:hover{--transform-translate-x:0.25rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-x-2:hover{--transform-translate-x:0.5rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-x-3:hover{--transform-translate-x:0.75rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-x-4:hover{--transform-translate-x:1rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-x-5:hover{--transform-translate-x:1.25rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-x-6:hover{--transform-translate-x:1.5rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-x-8:hover{--transform-translate-x:2rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-x-10:hover{--transform-translate-x:2.5rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-x-12:hover{--transform-translate-x:3rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-x-16:hover{--transform-translate-x:4rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-x-20:hover{--transform-translate-x:5rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-x-24:hover{--transform-translate-x:6rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-x-32:hover{--transform-translate-x:8rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-x-40:hover{--transform-translate-x:10rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-x-48:hover{--transform-translate-x:12rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-x-56:hover{--transform-translate-x:14rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-x-64:hover{--transform-translate-x:16rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-x-px:hover{--transform-translate-x:1px!important}}@media (min-width:600px){.sm\\:hover\\:-translate-x-1:hover{--transform-translate-x:-0.25rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-x-2:hover{--transform-translate-x:-0.5rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-x-3:hover{--transform-translate-x:-0.75rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-x-4:hover{--transform-translate-x:-1rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-x-5:hover{--transform-translate-x:-1.25rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-x-6:hover{--transform-translate-x:-1.5rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-x-8:hover{--transform-translate-x:-2rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-x-10:hover{--transform-translate-x:-2.5rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-x-12:hover{--transform-translate-x:-3rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-x-16:hover{--transform-translate-x:-4rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-x-20:hover{--transform-translate-x:-5rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-x-24:hover{--transform-translate-x:-6rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-x-32:hover{--transform-translate-x:-8rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-x-40:hover{--transform-translate-x:-10rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-x-48:hover{--transform-translate-x:-12rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-x-56:hover{--transform-translate-x:-14rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-x-64:hover{--transform-translate-x:-16rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-x-px:hover{--transform-translate-x:-1px!important}}@media (min-width:600px){.sm\\:hover\\:-translate-x-full:hover{--transform-translate-x:-100%!important}}@media (min-width:600px){.sm\\:hover\\:-translate-x-1\\/2:hover{--transform-translate-x:-50%!important}}@media (min-width:600px){.sm\\:hover\\:translate-x-1\\/2:hover{--transform-translate-x:50%!important}}@media (min-width:600px){.sm\\:hover\\:translate-x-full:hover{--transform-translate-x:100%!important}}@media (min-width:600px){.sm\\:hover\\:translate-y-0:hover{--transform-translate-y:0!important}}@media (min-width:600px){.sm\\:hover\\:translate-y-1:hover{--transform-translate-y:0.25rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-y-2:hover{--transform-translate-y:0.5rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-y-3:hover{--transform-translate-y:0.75rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-y-4:hover{--transform-translate-y:1rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-y-5:hover{--transform-translate-y:1.25rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-y-6:hover{--transform-translate-y:1.5rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-y-8:hover{--transform-translate-y:2rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-y-10:hover{--transform-translate-y:2.5rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-y-12:hover{--transform-translate-y:3rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-y-16:hover{--transform-translate-y:4rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-y-20:hover{--transform-translate-y:5rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-y-24:hover{--transform-translate-y:6rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-y-32:hover{--transform-translate-y:8rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-y-40:hover{--transform-translate-y:10rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-y-48:hover{--transform-translate-y:12rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-y-56:hover{--transform-translate-y:14rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-y-64:hover{--transform-translate-y:16rem!important}}@media (min-width:600px){.sm\\:hover\\:translate-y-px:hover{--transform-translate-y:1px!important}}@media (min-width:600px){.sm\\:hover\\:-translate-y-1:hover{--transform-translate-y:-0.25rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-y-2:hover{--transform-translate-y:-0.5rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-y-3:hover{--transform-translate-y:-0.75rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-y-4:hover{--transform-translate-y:-1rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-y-5:hover{--transform-translate-y:-1.25rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-y-6:hover{--transform-translate-y:-1.5rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-y-8:hover{--transform-translate-y:-2rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-y-10:hover{--transform-translate-y:-2.5rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-y-12:hover{--transform-translate-y:-3rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-y-16:hover{--transform-translate-y:-4rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-y-20:hover{--transform-translate-y:-5rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-y-24:hover{--transform-translate-y:-6rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-y-32:hover{--transform-translate-y:-8rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-y-40:hover{--transform-translate-y:-10rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-y-48:hover{--transform-translate-y:-12rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-y-56:hover{--transform-translate-y:-14rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-y-64:hover{--transform-translate-y:-16rem!important}}@media (min-width:600px){.sm\\:hover\\:-translate-y-px:hover{--transform-translate-y:-1px!important}}@media (min-width:600px){.sm\\:hover\\:-translate-y-full:hover{--transform-translate-y:-100%!important}}@media (min-width:600px){.sm\\:hover\\:-translate-y-1\\/2:hover{--transform-translate-y:-50%!important}}@media (min-width:600px){.sm\\:hover\\:translate-y-1\\/2:hover{--transform-translate-y:50%!important}}@media (min-width:600px){.sm\\:hover\\:translate-y-full:hover{--transform-translate-y:100%!important}}@media (min-width:600px){.sm\\:focus\\:translate-x-0:focus{--transform-translate-x:0!important}}@media (min-width:600px){.sm\\:focus\\:translate-x-1:focus{--transform-translate-x:0.25rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-x-2:focus{--transform-translate-x:0.5rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-x-3:focus{--transform-translate-x:0.75rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-x-4:focus{--transform-translate-x:1rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-x-5:focus{--transform-translate-x:1.25rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-x-6:focus{--transform-translate-x:1.5rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-x-8:focus{--transform-translate-x:2rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-x-10:focus{--transform-translate-x:2.5rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-x-12:focus{--transform-translate-x:3rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-x-16:focus{--transform-translate-x:4rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-x-20:focus{--transform-translate-x:5rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-x-24:focus{--transform-translate-x:6rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-x-32:focus{--transform-translate-x:8rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-x-40:focus{--transform-translate-x:10rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-x-48:focus{--transform-translate-x:12rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-x-56:focus{--transform-translate-x:14rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-x-64:focus{--transform-translate-x:16rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-x-px:focus{--transform-translate-x:1px!important}}@media (min-width:600px){.sm\\:focus\\:-translate-x-1:focus{--transform-translate-x:-0.25rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-x-2:focus{--transform-translate-x:-0.5rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-x-3:focus{--transform-translate-x:-0.75rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-x-4:focus{--transform-translate-x:-1rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-x-5:focus{--transform-translate-x:-1.25rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-x-6:focus{--transform-translate-x:-1.5rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-x-8:focus{--transform-translate-x:-2rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-x-10:focus{--transform-translate-x:-2.5rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-x-12:focus{--transform-translate-x:-3rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-x-16:focus{--transform-translate-x:-4rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-x-20:focus{--transform-translate-x:-5rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-x-24:focus{--transform-translate-x:-6rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-x-32:focus{--transform-translate-x:-8rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-x-40:focus{--transform-translate-x:-10rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-x-48:focus{--transform-translate-x:-12rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-x-56:focus{--transform-translate-x:-14rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-x-64:focus{--transform-translate-x:-16rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-x-px:focus{--transform-translate-x:-1px!important}}@media (min-width:600px){.sm\\:focus\\:-translate-x-full:focus{--transform-translate-x:-100%!important}}@media (min-width:600px){.sm\\:focus\\:-translate-x-1\\/2:focus{--transform-translate-x:-50%!important}}@media (min-width:600px){.sm\\:focus\\:translate-x-1\\/2:focus{--transform-translate-x:50%!important}}@media (min-width:600px){.sm\\:focus\\:translate-x-full:focus{--transform-translate-x:100%!important}}@media (min-width:600px){.sm\\:focus\\:translate-y-0:focus{--transform-translate-y:0!important}}@media (min-width:600px){.sm\\:focus\\:translate-y-1:focus{--transform-translate-y:0.25rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-y-2:focus{--transform-translate-y:0.5rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-y-3:focus{--transform-translate-y:0.75rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-y-4:focus{--transform-translate-y:1rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-y-5:focus{--transform-translate-y:1.25rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-y-6:focus{--transform-translate-y:1.5rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-y-8:focus{--transform-translate-y:2rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-y-10:focus{--transform-translate-y:2.5rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-y-12:focus{--transform-translate-y:3rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-y-16:focus{--transform-translate-y:4rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-y-20:focus{--transform-translate-y:5rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-y-24:focus{--transform-translate-y:6rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-y-32:focus{--transform-translate-y:8rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-y-40:focus{--transform-translate-y:10rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-y-48:focus{--transform-translate-y:12rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-y-56:focus{--transform-translate-y:14rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-y-64:focus{--transform-translate-y:16rem!important}}@media (min-width:600px){.sm\\:focus\\:translate-y-px:focus{--transform-translate-y:1px!important}}@media (min-width:600px){.sm\\:focus\\:-translate-y-1:focus{--transform-translate-y:-0.25rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-y-2:focus{--transform-translate-y:-0.5rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-y-3:focus{--transform-translate-y:-0.75rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-y-4:focus{--transform-translate-y:-1rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-y-5:focus{--transform-translate-y:-1.25rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-y-6:focus{--transform-translate-y:-1.5rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-y-8:focus{--transform-translate-y:-2rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-y-10:focus{--transform-translate-y:-2.5rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-y-12:focus{--transform-translate-y:-3rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-y-16:focus{--transform-translate-y:-4rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-y-20:focus{--transform-translate-y:-5rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-y-24:focus{--transform-translate-y:-6rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-y-32:focus{--transform-translate-y:-8rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-y-40:focus{--transform-translate-y:-10rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-y-48:focus{--transform-translate-y:-12rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-y-56:focus{--transform-translate-y:-14rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-y-64:focus{--transform-translate-y:-16rem!important}}@media (min-width:600px){.sm\\:focus\\:-translate-y-px:focus{--transform-translate-y:-1px!important}}@media (min-width:600px){.sm\\:focus\\:-translate-y-full:focus{--transform-translate-y:-100%!important}}@media (min-width:600px){.sm\\:focus\\:-translate-y-1\\/2:focus{--transform-translate-y:-50%!important}}@media (min-width:600px){.sm\\:focus\\:translate-y-1\\/2:focus{--transform-translate-y:50%!important}}@media (min-width:600px){.sm\\:focus\\:translate-y-full:focus{--transform-translate-y:100%!important}}@media (min-width:600px){.sm\\:skew-x-0{--transform-skew-x:0!important}}@media (min-width:600px){.sm\\:skew-x-1{--transform-skew-x:1deg!important}}@media (min-width:600px){.sm\\:skew-x-2{--transform-skew-x:2deg!important}}@media (min-width:600px){.sm\\:skew-x-3{--transform-skew-x:3deg!important}}@media (min-width:600px){.sm\\:skew-x-6{--transform-skew-x:6deg!important}}@media (min-width:600px){.sm\\:skew-x-12{--transform-skew-x:12deg!important}}@media (min-width:600px){.sm\\:-skew-x-12{--transform-skew-x:-12deg!important}}@media (min-width:600px){.sm\\:-skew-x-6{--transform-skew-x:-6deg!important}}@media (min-width:600px){.sm\\:-skew-x-3{--transform-skew-x:-3deg!important}}@media (min-width:600px){.sm\\:-skew-x-2{--transform-skew-x:-2deg!important}}@media (min-width:600px){.sm\\:-skew-x-1{--transform-skew-x:-1deg!important}}@media (min-width:600px){.sm\\:skew-y-0{--transform-skew-y:0!important}}@media (min-width:600px){.sm\\:skew-y-1{--transform-skew-y:1deg!important}}@media (min-width:600px){.sm\\:skew-y-2{--transform-skew-y:2deg!important}}@media (min-width:600px){.sm\\:skew-y-3{--transform-skew-y:3deg!important}}@media (min-width:600px){.sm\\:skew-y-6{--transform-skew-y:6deg!important}}@media (min-width:600px){.sm\\:skew-y-12{--transform-skew-y:12deg!important}}@media (min-width:600px){.sm\\:-skew-y-12{--transform-skew-y:-12deg!important}}@media (min-width:600px){.sm\\:-skew-y-6{--transform-skew-y:-6deg!important}}@media (min-width:600px){.sm\\:-skew-y-3{--transform-skew-y:-3deg!important}}@media (min-width:600px){.sm\\:-skew-y-2{--transform-skew-y:-2deg!important}}@media (min-width:600px){.sm\\:-skew-y-1{--transform-skew-y:-1deg!important}}@media (min-width:600px){.sm\\:hover\\:skew-x-0:hover{--transform-skew-x:0!important}}@media (min-width:600px){.sm\\:hover\\:skew-x-1:hover{--transform-skew-x:1deg!important}}@media (min-width:600px){.sm\\:hover\\:skew-x-2:hover{--transform-skew-x:2deg!important}}@media (min-width:600px){.sm\\:hover\\:skew-x-3:hover{--transform-skew-x:3deg!important}}@media (min-width:600px){.sm\\:hover\\:skew-x-6:hover{--transform-skew-x:6deg!important}}@media (min-width:600px){.sm\\:hover\\:skew-x-12:hover{--transform-skew-x:12deg!important}}@media (min-width:600px){.sm\\:hover\\:-skew-x-12:hover{--transform-skew-x:-12deg!important}}@media (min-width:600px){.sm\\:hover\\:-skew-x-6:hover{--transform-skew-x:-6deg!important}}@media (min-width:600px){.sm\\:hover\\:-skew-x-3:hover{--transform-skew-x:-3deg!important}}@media (min-width:600px){.sm\\:hover\\:-skew-x-2:hover{--transform-skew-x:-2deg!important}}@media (min-width:600px){.sm\\:hover\\:-skew-x-1:hover{--transform-skew-x:-1deg!important}}@media (min-width:600px){.sm\\:hover\\:skew-y-0:hover{--transform-skew-y:0!important}}@media (min-width:600px){.sm\\:hover\\:skew-y-1:hover{--transform-skew-y:1deg!important}}@media (min-width:600px){.sm\\:hover\\:skew-y-2:hover{--transform-skew-y:2deg!important}}@media (min-width:600px){.sm\\:hover\\:skew-y-3:hover{--transform-skew-y:3deg!important}}@media (min-width:600px){.sm\\:hover\\:skew-y-6:hover{--transform-skew-y:6deg!important}}@media (min-width:600px){.sm\\:hover\\:skew-y-12:hover{--transform-skew-y:12deg!important}}@media (min-width:600px){.sm\\:hover\\:-skew-y-12:hover{--transform-skew-y:-12deg!important}}@media (min-width:600px){.sm\\:hover\\:-skew-y-6:hover{--transform-skew-y:-6deg!important}}@media (min-width:600px){.sm\\:hover\\:-skew-y-3:hover{--transform-skew-y:-3deg!important}}@media (min-width:600px){.sm\\:hover\\:-skew-y-2:hover{--transform-skew-y:-2deg!important}}@media (min-width:600px){.sm\\:hover\\:-skew-y-1:hover{--transform-skew-y:-1deg!important}}@media (min-width:600px){.sm\\:focus\\:skew-x-0:focus{--transform-skew-x:0!important}}@media (min-width:600px){.sm\\:focus\\:skew-x-1:focus{--transform-skew-x:1deg!important}}@media (min-width:600px){.sm\\:focus\\:skew-x-2:focus{--transform-skew-x:2deg!important}}@media (min-width:600px){.sm\\:focus\\:skew-x-3:focus{--transform-skew-x:3deg!important}}@media (min-width:600px){.sm\\:focus\\:skew-x-6:focus{--transform-skew-x:6deg!important}}@media (min-width:600px){.sm\\:focus\\:skew-x-12:focus{--transform-skew-x:12deg!important}}@media (min-width:600px){.sm\\:focus\\:-skew-x-12:focus{--transform-skew-x:-12deg!important}}@media (min-width:600px){.sm\\:focus\\:-skew-x-6:focus{--transform-skew-x:-6deg!important}}@media (min-width:600px){.sm\\:focus\\:-skew-x-3:focus{--transform-skew-x:-3deg!important}}@media (min-width:600px){.sm\\:focus\\:-skew-x-2:focus{--transform-skew-x:-2deg!important}}@media (min-width:600px){.sm\\:focus\\:-skew-x-1:focus{--transform-skew-x:-1deg!important}}@media (min-width:600px){.sm\\:focus\\:skew-y-0:focus{--transform-skew-y:0!important}}@media (min-width:600px){.sm\\:focus\\:skew-y-1:focus{--transform-skew-y:1deg!important}}@media (min-width:600px){.sm\\:focus\\:skew-y-2:focus{--transform-skew-y:2deg!important}}@media (min-width:600px){.sm\\:focus\\:skew-y-3:focus{--transform-skew-y:3deg!important}}@media (min-width:600px){.sm\\:focus\\:skew-y-6:focus{--transform-skew-y:6deg!important}}@media (min-width:600px){.sm\\:focus\\:skew-y-12:focus{--transform-skew-y:12deg!important}}@media (min-width:600px){.sm\\:focus\\:-skew-y-12:focus{--transform-skew-y:-12deg!important}}@media (min-width:600px){.sm\\:focus\\:-skew-y-6:focus{--transform-skew-y:-6deg!important}}@media (min-width:600px){.sm\\:focus\\:-skew-y-3:focus{--transform-skew-y:-3deg!important}}@media (min-width:600px){.sm\\:focus\\:-skew-y-2:focus{--transform-skew-y:-2deg!important}}@media (min-width:600px){.sm\\:focus\\:-skew-y-1:focus{--transform-skew-y:-1deg!important}}@media (min-width:600px){.sm\\:transition-none{transition-property:none!important}}@media (min-width:600px){.sm\\:transition-all{transition-property:all!important}}@media (min-width:600px){.sm\\:transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform!important}}@media (min-width:600px){.sm\\:transition-colors{transition-property:background-color,border-color,color,fill,stroke!important}}@media (min-width:600px){.sm\\:transition-opacity{transition-property:opacity!important}}@media (min-width:600px){.sm\\:transition-shadow{transition-property:box-shadow!important}}@media (min-width:600px){.sm\\:transition-transform{transition-property:transform!important}}@media (min-width:600px){.sm\\:ease-linear{transition-timing-function:linear!important}}@media (min-width:600px){.sm\\:ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)!important}}@media (min-width:600px){.sm\\:ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)!important}}@media (min-width:600px){.sm\\:ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)!important}}@media (min-width:600px){.sm\\:duration-75{transition-duration:75ms!important}}@media (min-width:600px){.sm\\:duration-100{transition-duration:.1s!important}}@media (min-width:600px){.sm\\:duration-150{transition-duration:.15s!important}}@media (min-width:600px){.sm\\:duration-200{transition-duration:.2s!important}}@media (min-width:600px){.sm\\:duration-300{transition-duration:.3s!important}}@media (min-width:600px){.sm\\:duration-500{transition-duration:.5s!important}}@media (min-width:600px){.sm\\:duration-700{transition-duration:.7s!important}}@media (min-width:600px){.sm\\:duration-1000{transition-duration:1s!important}}@media (min-width:600px){.sm\\:delay-75{transition-delay:75ms!important}}@media (min-width:600px){.sm\\:delay-100{transition-delay:.1s!important}}@media (min-width:600px){.sm\\:delay-150{transition-delay:.15s!important}}@media (min-width:600px){.sm\\:delay-200{transition-delay:.2s!important}}@media (min-width:600px){.sm\\:delay-300{transition-delay:.3s!important}}@media (min-width:600px){.sm\\:delay-500{transition-delay:.5s!important}}@media (min-width:600px){.sm\\:delay-700{transition-delay:.7s!important}}@media (min-width:600px){.sm\\:delay-1000{transition-delay:1s!important}}@media (min-width:600px){.sm\\:animate-none{animation:none!important}}@media (min-width:600px){.sm\\:animate-spin{animation:spin 1s linear infinite!important}}@media (min-width:600px){.sm\\:animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite!important}}@media (min-width:600px){.sm\\:animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite!important}}@media (min-width:600px){.sm\\:animate-bounce{animation:bounce 1s infinite!important}}@media (min-width:600px){.sm\\:truncate-none{overflow:unset!important;text-overflow:unset!important;white-space:unset!important}}@media (min-width:960px){.md\\:container{width:100%;margin-right:auto;margin-left:auto}}@media (min-width:960px) and (min-width:599px){.md\\:container{max-width:599px}}@media (min-width:960px) and (min-width:600px){.md\\:container{max-width:600px}}@media (min-width:960px) and (min-width:960px){.md\\:container{max-width:960px}}@media (min-width:960px) and (min-width:1280px){.md\\:container{max-width:1280px}}@media (min-width:960px) and (min-width:1920px){.md\\:container{max-width:1920px}}@media (min-width:960px){.md\\:space-y-0>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(0px * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(0px * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:space-x-0>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(0px * var(--space-x-reverse))!important;margin-left:calc(0px * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:space-y-1>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(.25rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:space-x-1>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(.25rem * var(--space-x-reverse))!important;margin-left:calc(.25rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:space-y-2>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(.5rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:space-x-2>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(.5rem * var(--space-x-reverse))!important;margin-left:calc(.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:space-y-3>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(.75rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(.75rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:space-x-3>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(.75rem * var(--space-x-reverse))!important;margin-left:calc(.75rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:space-y-4>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:space-x-4>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1rem * var(--space-x-reverse))!important;margin-left:calc(1rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:space-y-5>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1.25rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:space-x-5>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1.25rem * var(--space-x-reverse))!important;margin-left:calc(1.25rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:space-y-6>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1.5rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:space-x-6>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1.5rem * var(--space-x-reverse))!important;margin-left:calc(1.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:space-y-8>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(2rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(2rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:space-x-8>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(2rem * var(--space-x-reverse))!important;margin-left:calc(2rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:space-y-10>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(2.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(2.5rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:space-x-10>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(2.5rem * var(--space-x-reverse))!important;margin-left:calc(2.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:space-y-12>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(3rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(3rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:space-x-12>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(3rem * var(--space-x-reverse))!important;margin-left:calc(3rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:space-y-16>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(4rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(4rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:space-x-16>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(4rem * var(--space-x-reverse))!important;margin-left:calc(4rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:space-y-20>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(5rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:space-x-20>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(5rem * var(--space-x-reverse))!important;margin-left:calc(5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:space-y-24>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(6rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(6rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:space-x-24>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(6rem * var(--space-x-reverse))!important;margin-left:calc(6rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:space-y-32>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(8rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(8rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:space-x-32>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(8rem * var(--space-x-reverse))!important;margin-left:calc(8rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:space-y-40>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(10rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(10rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:space-x-40>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(10rem * var(--space-x-reverse))!important;margin-left:calc(10rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:space-y-48>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(12rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(12rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:space-x-48>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(12rem * var(--space-x-reverse))!important;margin-left:calc(12rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:space-y-56>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(14rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(14rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:space-x-56>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(14rem * var(--space-x-reverse))!important;margin-left:calc(14rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:space-y-64>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(16rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(16rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:space-x-64>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(16rem * var(--space-x-reverse))!important;margin-left:calc(16rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:space-y-px>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1px * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1px * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:space-x-px>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1px * var(--space-x-reverse))!important;margin-left:calc(1px * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:-space-y-1>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-.25rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:-space-x-1>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-.25rem * var(--space-x-reverse))!important;margin-left:calc(-.25rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:-space-y-2>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-.5rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:-space-x-2>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-.5rem * var(--space-x-reverse))!important;margin-left:calc(-.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:-space-y-3>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-.75rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-.75rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:-space-x-3>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-.75rem * var(--space-x-reverse))!important;margin-left:calc(-.75rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:-space-y-4>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:-space-x-4>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1rem * var(--space-x-reverse))!important;margin-left:calc(-1rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:-space-y-5>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1.25rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:-space-x-5>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1.25rem * var(--space-x-reverse))!important;margin-left:calc(-1.25rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:-space-y-6>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1.5rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:-space-x-6>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1.5rem * var(--space-x-reverse))!important;margin-left:calc(-1.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:-space-y-8>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-2rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-2rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:-space-x-8>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-2rem * var(--space-x-reverse))!important;margin-left:calc(-2rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:-space-y-10>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-2.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-2.5rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:-space-x-10>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-2.5rem * var(--space-x-reverse))!important;margin-left:calc(-2.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:-space-y-12>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-3rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-3rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:-space-x-12>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-3rem * var(--space-x-reverse))!important;margin-left:calc(-3rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:-space-y-16>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-4rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-4rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:-space-x-16>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-4rem * var(--space-x-reverse))!important;margin-left:calc(-4rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:-space-y-20>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-5rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:-space-x-20>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-5rem * var(--space-x-reverse))!important;margin-left:calc(-5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:-space-y-24>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-6rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-6rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:-space-x-24>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-6rem * var(--space-x-reverse))!important;margin-left:calc(-6rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:-space-y-32>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-8rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-8rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:-space-x-32>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-8rem * var(--space-x-reverse))!important;margin-left:calc(-8rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:-space-y-40>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-10rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-10rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:-space-x-40>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-10rem * var(--space-x-reverse))!important;margin-left:calc(-10rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:-space-y-48>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-12rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-12rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:-space-x-48>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-12rem * var(--space-x-reverse))!important;margin-left:calc(-12rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:-space-y-56>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-14rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-14rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:-space-x-56>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-14rem * var(--space-x-reverse))!important;margin-left:calc(-14rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:-space-y-64>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-16rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-16rem * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:-space-x-64>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-16rem * var(--space-x-reverse))!important;margin-left:calc(-16rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:-space-y-px>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1px * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1px * var(--space-y-reverse))!important}}@media (min-width:960px){.md\\:-space-x-px>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1px * var(--space-x-reverse))!important;margin-left:calc(-1px * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:960px){.md\\:space-y-reverse>:not(template)~:not(template){--space-y-reverse:1!important}}@media (min-width:960px){.md\\:space-x-reverse>:not(template)~:not(template){--space-x-reverse:1!important}}@media (min-width:960px){.md\\:divide-y-0>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(0px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(0px * var(--divide-y-reverse))!important}}@media (min-width:960px){.md\\:divide-x-0>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(0px * var(--divide-x-reverse))!important;border-left-width:calc(0px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:960px){.md\\:divide-y-2>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(2px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(2px * var(--divide-y-reverse))!important}}@media (min-width:960px){.md\\:divide-x-2>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(2px * var(--divide-x-reverse))!important;border-left-width:calc(2px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:960px){.md\\:divide-y-4>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(4px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(4px * var(--divide-y-reverse))!important}}@media (min-width:960px){.md\\:divide-x-4>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(4px * var(--divide-x-reverse))!important;border-left-width:calc(4px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:960px){.md\\:divide-y-8>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(8px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(8px * var(--divide-y-reverse))!important}}@media (min-width:960px){.md\\:divide-x-8>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(8px * var(--divide-x-reverse))!important;border-left-width:calc(8px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:960px){.md\\:divide-y>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(1px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(1px * var(--divide-y-reverse))!important}}@media (min-width:960px){.md\\:divide-x>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(1px * var(--divide-x-reverse))!important;border-left-width:calc(1px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:960px){.md\\:divide-y-reverse>:not(template)~:not(template){--divide-y-reverse:1!important}}@media (min-width:960px){.md\\:divide-x-reverse>:not(template)~:not(template){--divide-x-reverse:1!important}}@media (min-width:960px){.md\\:divide-transparent>:not(template)~:not(template){border-color:transparent!important}}@media (min-width:960px){.md\\:divide-current>:not(template)~:not(template){border-color:currentColor!important}}@media (min-width:960px){.md\\:divide-black>:not(template)~:not(template){--divide-opacity:1!important;border-color:#000!important;border-color:rgba(0,0,0,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-white>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fff!important;border-color:rgba(255,255,255,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-gray-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f7fafc!important;border-color:rgba(247,250,252,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-gray-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#edf2f7!important;border-color:rgba(237,242,247,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-gray-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e2e8f0!important;border-color:rgba(226,232,240,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-gray-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#cbd5e0!important;border-color:rgba(203,213,224,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-gray-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#a0aec0!important;border-color:rgba(160,174,192,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-gray-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#718096!important;border-color:rgba(113,128,150,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-gray-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4a5568!important;border-color:rgba(74,85,104,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-gray-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2d3748!important;border-color:rgba(45,55,72,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-gray-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#1a202c!important;border-color:rgba(26,32,44,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-red-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fff5f5!important;border-color:rgba(255,245,245,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-red-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fed7d7!important;border-color:rgba(254,215,215,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-red-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#feb2b2!important;border-color:rgba(254,178,178,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-red-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fc8181!important;border-color:rgba(252,129,129,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-red-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f56565!important;border-color:rgba(245,101,101,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-red-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e53e3e!important;border-color:rgba(229,62,62,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-red-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c53030!important;border-color:rgba(197,48,48,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-red-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9b2c2c!important;border-color:rgba(155,44,44,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-red-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#742a2a!important;border-color:rgba(116,42,42,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-orange-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fffaf0!important;border-color:rgba(255,250,240,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-orange-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#feebc8!important;border-color:rgba(254,235,200,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-orange-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fbd38d!important;border-color:rgba(251,211,141,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-orange-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f6ad55!important;border-color:rgba(246,173,85,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-orange-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ed8936!important;border-color:rgba(237,137,54,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-orange-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#dd6b20!important;border-color:rgba(221,107,32,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-orange-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c05621!important;border-color:rgba(192,86,33,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-orange-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9c4221!important;border-color:rgba(156,66,33,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-orange-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#7b341e!important;border-color:rgba(123,52,30,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-yellow-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:ivory!important;border-color:rgba(255,255,240,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-yellow-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fefcbf!important;border-color:rgba(254,252,191,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-yellow-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#faf089!important;border-color:rgba(250,240,137,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-yellow-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f6e05e!important;border-color:rgba(246,224,94,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-yellow-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ecc94b!important;border-color:rgba(236,201,75,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-yellow-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#d69e2e!important;border-color:rgba(214,158,46,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-yellow-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b7791f!important;border-color:rgba(183,121,31,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-yellow-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#975a16!important;border-color:rgba(151,90,22,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-yellow-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#744210!important;border-color:rgba(116,66,16,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-green-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f0fff4!important;border-color:rgba(240,255,244,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-green-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c6f6d5!important;border-color:rgba(198,246,213,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-green-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9ae6b4!important;border-color:rgba(154,230,180,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-green-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#68d391!important;border-color:rgba(104,211,145,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-green-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#48bb78!important;border-color:rgba(72,187,120,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-green-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#38a169!important;border-color:rgba(56,161,105,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-green-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2f855a!important;border-color:rgba(47,133,90,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-green-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#276749!important;border-color:rgba(39,103,73,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-green-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#22543d!important;border-color:rgba(34,84,61,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-teal-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e6fffa!important;border-color:rgba(230,255,250,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-teal-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b2f5ea!important;border-color:rgba(178,245,234,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-teal-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#81e6d9!important;border-color:rgba(129,230,217,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-teal-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4fd1c5!important;border-color:rgba(79,209,197,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-teal-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#38b2ac!important;border-color:rgba(56,178,172,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-teal-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#319795!important;border-color:rgba(49,151,149,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-teal-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2c7a7b!important;border-color:rgba(44,122,123,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-teal-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#285e61!important;border-color:rgba(40,94,97,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-teal-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#234e52!important;border-color:rgba(35,78,82,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-blue-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ebf8ff!important;border-color:rgba(235,248,255,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-blue-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#bee3f8!important;border-color:rgba(190,227,248,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-blue-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#90cdf4!important;border-color:rgba(144,205,244,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-blue-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#63b3ed!important;border-color:rgba(99,179,237,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-blue-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4299e1!important;border-color:rgba(66,153,225,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-blue-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#3182ce!important;border-color:rgba(49,130,206,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-blue-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2b6cb0!important;border-color:rgba(43,108,176,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-blue-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2c5282!important;border-color:rgba(44,82,130,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-blue-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2a4365!important;border-color:rgba(42,67,101,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-indigo-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ebf4ff!important;border-color:rgba(235,244,255,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-indigo-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c3dafe!important;border-color:rgba(195,218,254,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-indigo-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#a3bffa!important;border-color:rgba(163,191,250,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-indigo-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#7f9cf5!important;border-color:rgba(127,156,245,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-indigo-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#667eea!important;border-color:rgba(102,126,234,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-indigo-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#5a67d8!important;border-color:rgba(90,103,216,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-indigo-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4c51bf!important;border-color:rgba(76,81,191,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-indigo-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#434190!important;border-color:rgba(67,65,144,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-indigo-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#3c366b!important;border-color:rgba(60,54,107,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-purple-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#faf5ff!important;border-color:rgba(250,245,255,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-purple-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e9d8fd!important;border-color:rgba(233,216,253,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-purple-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#d6bcfa!important;border-color:rgba(214,188,250,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-purple-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b794f4!important;border-color:rgba(183,148,244,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-purple-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9f7aea!important;border-color:rgba(159,122,234,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-purple-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#805ad5!important;border-color:rgba(128,90,213,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-purple-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#6b46c1!important;border-color:rgba(107,70,193,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-purple-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#553c9a!important;border-color:rgba(85,60,154,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-purple-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#44337a!important;border-color:rgba(68,51,122,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-pink-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fff5f7!important;border-color:rgba(255,245,247,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-pink-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fed7e2!important;border-color:rgba(254,215,226,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-pink-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fbb6ce!important;border-color:rgba(251,182,206,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-pink-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f687b3!important;border-color:rgba(246,135,179,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-pink-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ed64a6!important;border-color:rgba(237,100,166,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-pink-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#d53f8c!important;border-color:rgba(213,63,140,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-pink-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b83280!important;border-color:rgba(184,50,128,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-pink-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#97266d!important;border-color:rgba(151,38,109,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-pink-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#702459!important;border-color:rgba(112,36,89,var(--divide-opacity))!important}}@media (min-width:960px){.md\\:divide-solid>:not(template)~:not(template){border-style:solid!important}}@media (min-width:960px){.md\\:divide-dashed>:not(template)~:not(template){border-style:dashed!important}}@media (min-width:960px){.md\\:divide-dotted>:not(template)~:not(template){border-style:dotted!important}}@media (min-width:960px){.md\\:divide-double>:not(template)~:not(template){border-style:double!important}}@media (min-width:960px){.md\\:divide-none>:not(template)~:not(template){border-style:none!important}}@media (min-width:960px){.md\\:divide-opacity-0>:not(template)~:not(template){--divide-opacity:0!important}}@media (min-width:960px){.md\\:divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25!important}}@media (min-width:960px){.md\\:divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5!important}}@media (min-width:960px){.md\\:divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75!important}}@media (min-width:960px){.md\\:divide-opacity-100>:not(template)~:not(template){--divide-opacity:1!important}}@media (min-width:960px){.md\\:sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}}@media (min-width:960px){.md\\:not-sr-only{position:static!important;width:auto!important;height:auto!important;padding:0!important;margin:0!important;overflow:visible!important;clip:auto!important;white-space:normal!important}}@media (min-width:960px){.md\\:focus\\:sr-only:focus{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}}@media (min-width:960px){.md\\:focus\\:not-sr-only:focus{position:static!important;width:auto!important;height:auto!important;padding:0!important;margin:0!important;overflow:visible!important;clip:auto!important;white-space:normal!important}}@media (min-width:960px){.md\\:appearance-none{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important}}@media (min-width:960px){.md\\:bg-fixed{background-attachment:fixed!important}}@media (min-width:960px){.md\\:bg-local{background-attachment:local!important}}@media (min-width:960px){.md\\:bg-scroll{background-attachment:scroll!important}}@media (min-width:960px){.md\\:bg-clip-border{background-clip:initial!important}}@media (min-width:960px){.md\\:bg-clip-padding{background-clip:padding-box!important}}@media (min-width:960px){.md\\:bg-clip-content{background-clip:content-box!important}}@media (min-width:960px){.md\\:bg-clip-text{-webkit-background-clip:text!important;background-clip:text!important}}@media (min-width:960px){.md\\:bg-transparent{background-color:initial!important}}@media (min-width:960px){.md\\:bg-current{background-color:currentColor!important}}@media (min-width:960px){.md\\:bg-black{--bg-opacity:1!important;background-color:#000!important;background-color:rgba(0,0,0,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-white{--bg-opacity:1!important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-gray-100{--bg-opacity:1!important;background-color:#f7fafc!important;background-color:rgba(247,250,252,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-gray-200{--bg-opacity:1!important;background-color:#edf2f7!important;background-color:rgba(237,242,247,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-gray-300{--bg-opacity:1!important;background-color:#e2e8f0!important;background-color:rgba(226,232,240,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-gray-400{--bg-opacity:1!important;background-color:#cbd5e0!important;background-color:rgba(203,213,224,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-gray-500{--bg-opacity:1!important;background-color:#a0aec0!important;background-color:rgba(160,174,192,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-gray-600{--bg-opacity:1!important;background-color:#718096!important;background-color:rgba(113,128,150,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-gray-700{--bg-opacity:1!important;background-color:#4a5568!important;background-color:rgba(74,85,104,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-gray-800{--bg-opacity:1!important;background-color:#2d3748!important;background-color:rgba(45,55,72,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-gray-900{--bg-opacity:1!important;background-color:#1a202c!important;background-color:rgba(26,32,44,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-red-100{--bg-opacity:1!important;background-color:#fff5f5!important;background-color:rgba(255,245,245,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-red-200{--bg-opacity:1!important;background-color:#fed7d7!important;background-color:rgba(254,215,215,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-red-300{--bg-opacity:1!important;background-color:#feb2b2!important;background-color:rgba(254,178,178,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-red-400{--bg-opacity:1!important;background-color:#fc8181!important;background-color:rgba(252,129,129,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-red-500{--bg-opacity:1!important;background-color:#f56565!important;background-color:rgba(245,101,101,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-red-600{--bg-opacity:1!important;background-color:#e53e3e!important;background-color:rgba(229,62,62,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-red-700{--bg-opacity:1!important;background-color:#c53030!important;background-color:rgba(197,48,48,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-red-800{--bg-opacity:1!important;background-color:#9b2c2c!important;background-color:rgba(155,44,44,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-red-900{--bg-opacity:1!important;background-color:#742a2a!important;background-color:rgba(116,42,42,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-orange-100{--bg-opacity:1!important;background-color:#fffaf0!important;background-color:rgba(255,250,240,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-orange-200{--bg-opacity:1!important;background-color:#feebc8!important;background-color:rgba(254,235,200,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-orange-300{--bg-opacity:1!important;background-color:#fbd38d!important;background-color:rgba(251,211,141,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-orange-400{--bg-opacity:1!important;background-color:#f6ad55!important;background-color:rgba(246,173,85,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-orange-500{--bg-opacity:1!important;background-color:#ed8936!important;background-color:rgba(237,137,54,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-orange-600{--bg-opacity:1!important;background-color:#dd6b20!important;background-color:rgba(221,107,32,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-orange-700{--bg-opacity:1!important;background-color:#c05621!important;background-color:rgba(192,86,33,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-orange-800{--bg-opacity:1!important;background-color:#9c4221!important;background-color:rgba(156,66,33,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-orange-900{--bg-opacity:1!important;background-color:#7b341e!important;background-color:rgba(123,52,30,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-yellow-100{--bg-opacity:1!important;background-color:ivory!important;background-color:rgba(255,255,240,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-yellow-200{--bg-opacity:1!important;background-color:#fefcbf!important;background-color:rgba(254,252,191,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-yellow-300{--bg-opacity:1!important;background-color:#faf089!important;background-color:rgba(250,240,137,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-yellow-400{--bg-opacity:1!important;background-color:#f6e05e!important;background-color:rgba(246,224,94,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-yellow-500{--bg-opacity:1!important;background-color:#ecc94b!important;background-color:rgba(236,201,75,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-yellow-600{--bg-opacity:1!important;background-color:#d69e2e!important;background-color:rgba(214,158,46,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-yellow-700{--bg-opacity:1!important;background-color:#b7791f!important;background-color:rgba(183,121,31,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-yellow-800{--bg-opacity:1!important;background-color:#975a16!important;background-color:rgba(151,90,22,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-yellow-900{--bg-opacity:1!important;background-color:#744210!important;background-color:rgba(116,66,16,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-green-100{--bg-opacity:1!important;background-color:#f0fff4!important;background-color:rgba(240,255,244,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-green-200{--bg-opacity:1!important;background-color:#c6f6d5!important;background-color:rgba(198,246,213,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-green-300{--bg-opacity:1!important;background-color:#9ae6b4!important;background-color:rgba(154,230,180,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-green-400{--bg-opacity:1!important;background-color:#68d391!important;background-color:rgba(104,211,145,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-green-500{--bg-opacity:1!important;background-color:#48bb78!important;background-color:rgba(72,187,120,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-green-600{--bg-opacity:1!important;background-color:#38a169!important;background-color:rgba(56,161,105,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-green-700{--bg-opacity:1!important;background-color:#2f855a!important;background-color:rgba(47,133,90,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-green-800{--bg-opacity:1!important;background-color:#276749!important;background-color:rgba(39,103,73,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-green-900{--bg-opacity:1!important;background-color:#22543d!important;background-color:rgba(34,84,61,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-teal-100{--bg-opacity:1!important;background-color:#e6fffa!important;background-color:rgba(230,255,250,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-teal-200{--bg-opacity:1!important;background-color:#b2f5ea!important;background-color:rgba(178,245,234,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-teal-300{--bg-opacity:1!important;background-color:#81e6d9!important;background-color:rgba(129,230,217,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-teal-400{--bg-opacity:1!important;background-color:#4fd1c5!important;background-color:rgba(79,209,197,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-teal-500{--bg-opacity:1!important;background-color:#38b2ac!important;background-color:rgba(56,178,172,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-teal-600{--bg-opacity:1!important;background-color:#319795!important;background-color:rgba(49,151,149,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-teal-700{--bg-opacity:1!important;background-color:#2c7a7b!important;background-color:rgba(44,122,123,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-teal-800{--bg-opacity:1!important;background-color:#285e61!important;background-color:rgba(40,94,97,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-teal-900{--bg-opacity:1!important;background-color:#234e52!important;background-color:rgba(35,78,82,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-blue-100{--bg-opacity:1!important;background-color:#ebf8ff!important;background-color:rgba(235,248,255,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-blue-200{--bg-opacity:1!important;background-color:#bee3f8!important;background-color:rgba(190,227,248,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-blue-300{--bg-opacity:1!important;background-color:#90cdf4!important;background-color:rgba(144,205,244,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-blue-400{--bg-opacity:1!important;background-color:#63b3ed!important;background-color:rgba(99,179,237,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-blue-500{--bg-opacity:1!important;background-color:#4299e1!important;background-color:rgba(66,153,225,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-blue-600{--bg-opacity:1!important;background-color:#3182ce!important;background-color:rgba(49,130,206,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-blue-700{--bg-opacity:1!important;background-color:#2b6cb0!important;background-color:rgba(43,108,176,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-blue-800{--bg-opacity:1!important;background-color:#2c5282!important;background-color:rgba(44,82,130,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-blue-900{--bg-opacity:1!important;background-color:#2a4365!important;background-color:rgba(42,67,101,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-indigo-100{--bg-opacity:1!important;background-color:#ebf4ff!important;background-color:rgba(235,244,255,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-indigo-200{--bg-opacity:1!important;background-color:#c3dafe!important;background-color:rgba(195,218,254,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-indigo-300{--bg-opacity:1!important;background-color:#a3bffa!important;background-color:rgba(163,191,250,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-indigo-400{--bg-opacity:1!important;background-color:#7f9cf5!important;background-color:rgba(127,156,245,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-indigo-500{--bg-opacity:1!important;background-color:#667eea!important;background-color:rgba(102,126,234,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-indigo-600{--bg-opacity:1!important;background-color:#5a67d8!important;background-color:rgba(90,103,216,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-indigo-700{--bg-opacity:1!important;background-color:#4c51bf!important;background-color:rgba(76,81,191,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-indigo-800{--bg-opacity:1!important;background-color:#434190!important;background-color:rgba(67,65,144,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-indigo-900{--bg-opacity:1!important;background-color:#3c366b!important;background-color:rgba(60,54,107,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-purple-100{--bg-opacity:1!important;background-color:#faf5ff!important;background-color:rgba(250,245,255,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-purple-200{--bg-opacity:1!important;background-color:#e9d8fd!important;background-color:rgba(233,216,253,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-purple-300{--bg-opacity:1!important;background-color:#d6bcfa!important;background-color:rgba(214,188,250,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-purple-400{--bg-opacity:1!important;background-color:#b794f4!important;background-color:rgba(183,148,244,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-purple-500{--bg-opacity:1!important;background-color:#9f7aea!important;background-color:rgba(159,122,234,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-purple-600{--bg-opacity:1!important;background-color:#805ad5!important;background-color:rgba(128,90,213,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-purple-700{--bg-opacity:1!important;background-color:#6b46c1!important;background-color:rgba(107,70,193,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-purple-800{--bg-opacity:1!important;background-color:#553c9a!important;background-color:rgba(85,60,154,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-purple-900{--bg-opacity:1!important;background-color:#44337a!important;background-color:rgba(68,51,122,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-pink-100{--bg-opacity:1!important;background-color:#fff5f7!important;background-color:rgba(255,245,247,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-pink-200{--bg-opacity:1!important;background-color:#fed7e2!important;background-color:rgba(254,215,226,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-pink-300{--bg-opacity:1!important;background-color:#fbb6ce!important;background-color:rgba(251,182,206,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-pink-400{--bg-opacity:1!important;background-color:#f687b3!important;background-color:rgba(246,135,179,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-pink-500{--bg-opacity:1!important;background-color:#ed64a6!important;background-color:rgba(237,100,166,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-pink-600{--bg-opacity:1!important;background-color:#d53f8c!important;background-color:rgba(213,63,140,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-pink-700{--bg-opacity:1!important;background-color:#b83280!important;background-color:rgba(184,50,128,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-pink-800{--bg-opacity:1!important;background-color:#97266d!important;background-color:rgba(151,38,109,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-pink-900{--bg-opacity:1!important;background-color:#702459!important;background-color:rgba(112,36,89,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-transparent:hover{background-color:initial!important}}@media (min-width:960px){.md\\:hover\\:bg-current:hover{background-color:currentColor!important}}@media (min-width:960px){.md\\:hover\\:bg-black:hover{--bg-opacity:1!important;background-color:#000!important;background-color:rgba(0,0,0,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-white:hover{--bg-opacity:1!important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-gray-100:hover{--bg-opacity:1!important;background-color:#f7fafc!important;background-color:rgba(247,250,252,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-gray-200:hover{--bg-opacity:1!important;background-color:#edf2f7!important;background-color:rgba(237,242,247,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-gray-300:hover{--bg-opacity:1!important;background-color:#e2e8f0!important;background-color:rgba(226,232,240,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-gray-400:hover{--bg-opacity:1!important;background-color:#cbd5e0!important;background-color:rgba(203,213,224,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-gray-500:hover{--bg-opacity:1!important;background-color:#a0aec0!important;background-color:rgba(160,174,192,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-gray-600:hover{--bg-opacity:1!important;background-color:#718096!important;background-color:rgba(113,128,150,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-gray-700:hover{--bg-opacity:1!important;background-color:#4a5568!important;background-color:rgba(74,85,104,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-gray-800:hover{--bg-opacity:1!important;background-color:#2d3748!important;background-color:rgba(45,55,72,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-gray-900:hover{--bg-opacity:1!important;background-color:#1a202c!important;background-color:rgba(26,32,44,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-red-100:hover{--bg-opacity:1!important;background-color:#fff5f5!important;background-color:rgba(255,245,245,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-red-200:hover{--bg-opacity:1!important;background-color:#fed7d7!important;background-color:rgba(254,215,215,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-red-300:hover{--bg-opacity:1!important;background-color:#feb2b2!important;background-color:rgba(254,178,178,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-red-400:hover{--bg-opacity:1!important;background-color:#fc8181!important;background-color:rgba(252,129,129,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-red-500:hover{--bg-opacity:1!important;background-color:#f56565!important;background-color:rgba(245,101,101,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-red-600:hover{--bg-opacity:1!important;background-color:#e53e3e!important;background-color:rgba(229,62,62,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-red-700:hover{--bg-opacity:1!important;background-color:#c53030!important;background-color:rgba(197,48,48,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-red-800:hover{--bg-opacity:1!important;background-color:#9b2c2c!important;background-color:rgba(155,44,44,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-red-900:hover{--bg-opacity:1!important;background-color:#742a2a!important;background-color:rgba(116,42,42,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-orange-100:hover{--bg-opacity:1!important;background-color:#fffaf0!important;background-color:rgba(255,250,240,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-orange-200:hover{--bg-opacity:1!important;background-color:#feebc8!important;background-color:rgba(254,235,200,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-orange-300:hover{--bg-opacity:1!important;background-color:#fbd38d!important;background-color:rgba(251,211,141,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-orange-400:hover{--bg-opacity:1!important;background-color:#f6ad55!important;background-color:rgba(246,173,85,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-orange-500:hover{--bg-opacity:1!important;background-color:#ed8936!important;background-color:rgba(237,137,54,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-orange-600:hover{--bg-opacity:1!important;background-color:#dd6b20!important;background-color:rgba(221,107,32,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-orange-700:hover{--bg-opacity:1!important;background-color:#c05621!important;background-color:rgba(192,86,33,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-orange-800:hover{--bg-opacity:1!important;background-color:#9c4221!important;background-color:rgba(156,66,33,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-orange-900:hover{--bg-opacity:1!important;background-color:#7b341e!important;background-color:rgba(123,52,30,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-yellow-100:hover{--bg-opacity:1!important;background-color:ivory!important;background-color:rgba(255,255,240,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-yellow-200:hover{--bg-opacity:1!important;background-color:#fefcbf!important;background-color:rgba(254,252,191,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-yellow-300:hover{--bg-opacity:1!important;background-color:#faf089!important;background-color:rgba(250,240,137,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-yellow-400:hover{--bg-opacity:1!important;background-color:#f6e05e!important;background-color:rgba(246,224,94,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-yellow-500:hover{--bg-opacity:1!important;background-color:#ecc94b!important;background-color:rgba(236,201,75,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-yellow-600:hover{--bg-opacity:1!important;background-color:#d69e2e!important;background-color:rgba(214,158,46,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-yellow-700:hover{--bg-opacity:1!important;background-color:#b7791f!important;background-color:rgba(183,121,31,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-yellow-800:hover{--bg-opacity:1!important;background-color:#975a16!important;background-color:rgba(151,90,22,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-yellow-900:hover{--bg-opacity:1!important;background-color:#744210!important;background-color:rgba(116,66,16,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-green-100:hover{--bg-opacity:1!important;background-color:#f0fff4!important;background-color:rgba(240,255,244,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-green-200:hover{--bg-opacity:1!important;background-color:#c6f6d5!important;background-color:rgba(198,246,213,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-green-300:hover{--bg-opacity:1!important;background-color:#9ae6b4!important;background-color:rgba(154,230,180,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-green-400:hover{--bg-opacity:1!important;background-color:#68d391!important;background-color:rgba(104,211,145,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-green-500:hover{--bg-opacity:1!important;background-color:#48bb78!important;background-color:rgba(72,187,120,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-green-600:hover{--bg-opacity:1!important;background-color:#38a169!important;background-color:rgba(56,161,105,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-green-700:hover{--bg-opacity:1!important;background-color:#2f855a!important;background-color:rgba(47,133,90,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-green-800:hover{--bg-opacity:1!important;background-color:#276749!important;background-color:rgba(39,103,73,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-green-900:hover{--bg-opacity:1!important;background-color:#22543d!important;background-color:rgba(34,84,61,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-teal-100:hover{--bg-opacity:1!important;background-color:#e6fffa!important;background-color:rgba(230,255,250,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-teal-200:hover{--bg-opacity:1!important;background-color:#b2f5ea!important;background-color:rgba(178,245,234,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-teal-300:hover{--bg-opacity:1!important;background-color:#81e6d9!important;background-color:rgba(129,230,217,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-teal-400:hover{--bg-opacity:1!important;background-color:#4fd1c5!important;background-color:rgba(79,209,197,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-teal-500:hover{--bg-opacity:1!important;background-color:#38b2ac!important;background-color:rgba(56,178,172,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-teal-600:hover{--bg-opacity:1!important;background-color:#319795!important;background-color:rgba(49,151,149,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-teal-700:hover{--bg-opacity:1!important;background-color:#2c7a7b!important;background-color:rgba(44,122,123,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-teal-800:hover{--bg-opacity:1!important;background-color:#285e61!important;background-color:rgba(40,94,97,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-teal-900:hover{--bg-opacity:1!important;background-color:#234e52!important;background-color:rgba(35,78,82,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-blue-100:hover{--bg-opacity:1!important;background-color:#ebf8ff!important;background-color:rgba(235,248,255,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-blue-200:hover{--bg-opacity:1!important;background-color:#bee3f8!important;background-color:rgba(190,227,248,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-blue-300:hover{--bg-opacity:1!important;background-color:#90cdf4!important;background-color:rgba(144,205,244,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-blue-400:hover{--bg-opacity:1!important;background-color:#63b3ed!important;background-color:rgba(99,179,237,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-blue-500:hover{--bg-opacity:1!important;background-color:#4299e1!important;background-color:rgba(66,153,225,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-blue-600:hover{--bg-opacity:1!important;background-color:#3182ce!important;background-color:rgba(49,130,206,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-blue-700:hover{--bg-opacity:1!important;background-color:#2b6cb0!important;background-color:rgba(43,108,176,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-blue-800:hover{--bg-opacity:1!important;background-color:#2c5282!important;background-color:rgba(44,82,130,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-blue-900:hover{--bg-opacity:1!important;background-color:#2a4365!important;background-color:rgba(42,67,101,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-indigo-100:hover{--bg-opacity:1!important;background-color:#ebf4ff!important;background-color:rgba(235,244,255,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-indigo-200:hover{--bg-opacity:1!important;background-color:#c3dafe!important;background-color:rgba(195,218,254,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-indigo-300:hover{--bg-opacity:1!important;background-color:#a3bffa!important;background-color:rgba(163,191,250,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-indigo-400:hover{--bg-opacity:1!important;background-color:#7f9cf5!important;background-color:rgba(127,156,245,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-indigo-500:hover{--bg-opacity:1!important;background-color:#667eea!important;background-color:rgba(102,126,234,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-indigo-600:hover{--bg-opacity:1!important;background-color:#5a67d8!important;background-color:rgba(90,103,216,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-indigo-700:hover{--bg-opacity:1!important;background-color:#4c51bf!important;background-color:rgba(76,81,191,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-indigo-800:hover{--bg-opacity:1!important;background-color:#434190!important;background-color:rgba(67,65,144,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-indigo-900:hover{--bg-opacity:1!important;background-color:#3c366b!important;background-color:rgba(60,54,107,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-purple-100:hover{--bg-opacity:1!important;background-color:#faf5ff!important;background-color:rgba(250,245,255,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-purple-200:hover{--bg-opacity:1!important;background-color:#e9d8fd!important;background-color:rgba(233,216,253,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-purple-300:hover{--bg-opacity:1!important;background-color:#d6bcfa!important;background-color:rgba(214,188,250,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-purple-400:hover{--bg-opacity:1!important;background-color:#b794f4!important;background-color:rgba(183,148,244,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-purple-500:hover{--bg-opacity:1!important;background-color:#9f7aea!important;background-color:rgba(159,122,234,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-purple-600:hover{--bg-opacity:1!important;background-color:#805ad5!important;background-color:rgba(128,90,213,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-purple-700:hover{--bg-opacity:1!important;background-color:#6b46c1!important;background-color:rgba(107,70,193,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-purple-800:hover{--bg-opacity:1!important;background-color:#553c9a!important;background-color:rgba(85,60,154,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-purple-900:hover{--bg-opacity:1!important;background-color:#44337a!important;background-color:rgba(68,51,122,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-pink-100:hover{--bg-opacity:1!important;background-color:#fff5f7!important;background-color:rgba(255,245,247,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-pink-200:hover{--bg-opacity:1!important;background-color:#fed7e2!important;background-color:rgba(254,215,226,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-pink-300:hover{--bg-opacity:1!important;background-color:#fbb6ce!important;background-color:rgba(251,182,206,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-pink-400:hover{--bg-opacity:1!important;background-color:#f687b3!important;background-color:rgba(246,135,179,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-pink-500:hover{--bg-opacity:1!important;background-color:#ed64a6!important;background-color:rgba(237,100,166,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-pink-600:hover{--bg-opacity:1!important;background-color:#d53f8c!important;background-color:rgba(213,63,140,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-pink-700:hover{--bg-opacity:1!important;background-color:#b83280!important;background-color:rgba(184,50,128,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-pink-800:hover{--bg-opacity:1!important;background-color:#97266d!important;background-color:rgba(151,38,109,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:hover\\:bg-pink-900:hover{--bg-opacity:1!important;background-color:#702459!important;background-color:rgba(112,36,89,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-transparent:focus{background-color:initial!important}}@media (min-width:960px){.md\\:focus\\:bg-current:focus{background-color:currentColor!important}}@media (min-width:960px){.md\\:focus\\:bg-black:focus{--bg-opacity:1!important;background-color:#000!important;background-color:rgba(0,0,0,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-white:focus{--bg-opacity:1!important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-gray-100:focus{--bg-opacity:1!important;background-color:#f7fafc!important;background-color:rgba(247,250,252,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-gray-200:focus{--bg-opacity:1!important;background-color:#edf2f7!important;background-color:rgba(237,242,247,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-gray-300:focus{--bg-opacity:1!important;background-color:#e2e8f0!important;background-color:rgba(226,232,240,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-gray-400:focus{--bg-opacity:1!important;background-color:#cbd5e0!important;background-color:rgba(203,213,224,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-gray-500:focus{--bg-opacity:1!important;background-color:#a0aec0!important;background-color:rgba(160,174,192,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-gray-600:focus{--bg-opacity:1!important;background-color:#718096!important;background-color:rgba(113,128,150,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-gray-700:focus{--bg-opacity:1!important;background-color:#4a5568!important;background-color:rgba(74,85,104,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-gray-800:focus{--bg-opacity:1!important;background-color:#2d3748!important;background-color:rgba(45,55,72,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-gray-900:focus{--bg-opacity:1!important;background-color:#1a202c!important;background-color:rgba(26,32,44,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-red-100:focus{--bg-opacity:1!important;background-color:#fff5f5!important;background-color:rgba(255,245,245,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-red-200:focus{--bg-opacity:1!important;background-color:#fed7d7!important;background-color:rgba(254,215,215,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-red-300:focus{--bg-opacity:1!important;background-color:#feb2b2!important;background-color:rgba(254,178,178,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-red-400:focus{--bg-opacity:1!important;background-color:#fc8181!important;background-color:rgba(252,129,129,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-red-500:focus{--bg-opacity:1!important;background-color:#f56565!important;background-color:rgba(245,101,101,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-red-600:focus{--bg-opacity:1!important;background-color:#e53e3e!important;background-color:rgba(229,62,62,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-red-700:focus{--bg-opacity:1!important;background-color:#c53030!important;background-color:rgba(197,48,48,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-red-800:focus{--bg-opacity:1!important;background-color:#9b2c2c!important;background-color:rgba(155,44,44,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-red-900:focus{--bg-opacity:1!important;background-color:#742a2a!important;background-color:rgba(116,42,42,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-orange-100:focus{--bg-opacity:1!important;background-color:#fffaf0!important;background-color:rgba(255,250,240,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-orange-200:focus{--bg-opacity:1!important;background-color:#feebc8!important;background-color:rgba(254,235,200,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-orange-300:focus{--bg-opacity:1!important;background-color:#fbd38d!important;background-color:rgba(251,211,141,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-orange-400:focus{--bg-opacity:1!important;background-color:#f6ad55!important;background-color:rgba(246,173,85,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-orange-500:focus{--bg-opacity:1!important;background-color:#ed8936!important;background-color:rgba(237,137,54,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-orange-600:focus{--bg-opacity:1!important;background-color:#dd6b20!important;background-color:rgba(221,107,32,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-orange-700:focus{--bg-opacity:1!important;background-color:#c05621!important;background-color:rgba(192,86,33,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-orange-800:focus{--bg-opacity:1!important;background-color:#9c4221!important;background-color:rgba(156,66,33,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-orange-900:focus{--bg-opacity:1!important;background-color:#7b341e!important;background-color:rgba(123,52,30,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-yellow-100:focus{--bg-opacity:1!important;background-color:ivory!important;background-color:rgba(255,255,240,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-yellow-200:focus{--bg-opacity:1!important;background-color:#fefcbf!important;background-color:rgba(254,252,191,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-yellow-300:focus{--bg-opacity:1!important;background-color:#faf089!important;background-color:rgba(250,240,137,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-yellow-400:focus{--bg-opacity:1!important;background-color:#f6e05e!important;background-color:rgba(246,224,94,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-yellow-500:focus{--bg-opacity:1!important;background-color:#ecc94b!important;background-color:rgba(236,201,75,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-yellow-600:focus{--bg-opacity:1!important;background-color:#d69e2e!important;background-color:rgba(214,158,46,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-yellow-700:focus{--bg-opacity:1!important;background-color:#b7791f!important;background-color:rgba(183,121,31,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-yellow-800:focus{--bg-opacity:1!important;background-color:#975a16!important;background-color:rgba(151,90,22,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-yellow-900:focus{--bg-opacity:1!important;background-color:#744210!important;background-color:rgba(116,66,16,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-green-100:focus{--bg-opacity:1!important;background-color:#f0fff4!important;background-color:rgba(240,255,244,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-green-200:focus{--bg-opacity:1!important;background-color:#c6f6d5!important;background-color:rgba(198,246,213,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-green-300:focus{--bg-opacity:1!important;background-color:#9ae6b4!important;background-color:rgba(154,230,180,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-green-400:focus{--bg-opacity:1!important;background-color:#68d391!important;background-color:rgba(104,211,145,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-green-500:focus{--bg-opacity:1!important;background-color:#48bb78!important;background-color:rgba(72,187,120,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-green-600:focus{--bg-opacity:1!important;background-color:#38a169!important;background-color:rgba(56,161,105,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-green-700:focus{--bg-opacity:1!important;background-color:#2f855a!important;background-color:rgba(47,133,90,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-green-800:focus{--bg-opacity:1!important;background-color:#276749!important;background-color:rgba(39,103,73,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-green-900:focus{--bg-opacity:1!important;background-color:#22543d!important;background-color:rgba(34,84,61,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-teal-100:focus{--bg-opacity:1!important;background-color:#e6fffa!important;background-color:rgba(230,255,250,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-teal-200:focus{--bg-opacity:1!important;background-color:#b2f5ea!important;background-color:rgba(178,245,234,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-teal-300:focus{--bg-opacity:1!important;background-color:#81e6d9!important;background-color:rgba(129,230,217,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-teal-400:focus{--bg-opacity:1!important;background-color:#4fd1c5!important;background-color:rgba(79,209,197,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-teal-500:focus{--bg-opacity:1!important;background-color:#38b2ac!important;background-color:rgba(56,178,172,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-teal-600:focus{--bg-opacity:1!important;background-color:#319795!important;background-color:rgba(49,151,149,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-teal-700:focus{--bg-opacity:1!important;background-color:#2c7a7b!important;background-color:rgba(44,122,123,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-teal-800:focus{--bg-opacity:1!important;background-color:#285e61!important;background-color:rgba(40,94,97,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-teal-900:focus{--bg-opacity:1!important;background-color:#234e52!important;background-color:rgba(35,78,82,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-blue-100:focus{--bg-opacity:1!important;background-color:#ebf8ff!important;background-color:rgba(235,248,255,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-blue-200:focus{--bg-opacity:1!important;background-color:#bee3f8!important;background-color:rgba(190,227,248,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-blue-300:focus{--bg-opacity:1!important;background-color:#90cdf4!important;background-color:rgba(144,205,244,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-blue-400:focus{--bg-opacity:1!important;background-color:#63b3ed!important;background-color:rgba(99,179,237,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-blue-500:focus{--bg-opacity:1!important;background-color:#4299e1!important;background-color:rgba(66,153,225,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-blue-600:focus{--bg-opacity:1!important;background-color:#3182ce!important;background-color:rgba(49,130,206,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-blue-700:focus{--bg-opacity:1!important;background-color:#2b6cb0!important;background-color:rgba(43,108,176,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-blue-800:focus{--bg-opacity:1!important;background-color:#2c5282!important;background-color:rgba(44,82,130,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-blue-900:focus{--bg-opacity:1!important;background-color:#2a4365!important;background-color:rgba(42,67,101,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-indigo-100:focus{--bg-opacity:1!important;background-color:#ebf4ff!important;background-color:rgba(235,244,255,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-indigo-200:focus{--bg-opacity:1!important;background-color:#c3dafe!important;background-color:rgba(195,218,254,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-indigo-300:focus{--bg-opacity:1!important;background-color:#a3bffa!important;background-color:rgba(163,191,250,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-indigo-400:focus{--bg-opacity:1!important;background-color:#7f9cf5!important;background-color:rgba(127,156,245,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-indigo-500:focus{--bg-opacity:1!important;background-color:#667eea!important;background-color:rgba(102,126,234,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-indigo-600:focus{--bg-opacity:1!important;background-color:#5a67d8!important;background-color:rgba(90,103,216,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-indigo-700:focus{--bg-opacity:1!important;background-color:#4c51bf!important;background-color:rgba(76,81,191,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-indigo-800:focus{--bg-opacity:1!important;background-color:#434190!important;background-color:rgba(67,65,144,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-indigo-900:focus{--bg-opacity:1!important;background-color:#3c366b!important;background-color:rgba(60,54,107,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-purple-100:focus{--bg-opacity:1!important;background-color:#faf5ff!important;background-color:rgba(250,245,255,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-purple-200:focus{--bg-opacity:1!important;background-color:#e9d8fd!important;background-color:rgba(233,216,253,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-purple-300:focus{--bg-opacity:1!important;background-color:#d6bcfa!important;background-color:rgba(214,188,250,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-purple-400:focus{--bg-opacity:1!important;background-color:#b794f4!important;background-color:rgba(183,148,244,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-purple-500:focus{--bg-opacity:1!important;background-color:#9f7aea!important;background-color:rgba(159,122,234,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-purple-600:focus{--bg-opacity:1!important;background-color:#805ad5!important;background-color:rgba(128,90,213,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-purple-700:focus{--bg-opacity:1!important;background-color:#6b46c1!important;background-color:rgba(107,70,193,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-purple-800:focus{--bg-opacity:1!important;background-color:#553c9a!important;background-color:rgba(85,60,154,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-purple-900:focus{--bg-opacity:1!important;background-color:#44337a!important;background-color:rgba(68,51,122,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-pink-100:focus{--bg-opacity:1!important;background-color:#fff5f7!important;background-color:rgba(255,245,247,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-pink-200:focus{--bg-opacity:1!important;background-color:#fed7e2!important;background-color:rgba(254,215,226,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-pink-300:focus{--bg-opacity:1!important;background-color:#fbb6ce!important;background-color:rgba(251,182,206,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-pink-400:focus{--bg-opacity:1!important;background-color:#f687b3!important;background-color:rgba(246,135,179,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-pink-500:focus{--bg-opacity:1!important;background-color:#ed64a6!important;background-color:rgba(237,100,166,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-pink-600:focus{--bg-opacity:1!important;background-color:#d53f8c!important;background-color:rgba(213,63,140,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-pink-700:focus{--bg-opacity:1!important;background-color:#b83280!important;background-color:rgba(184,50,128,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-pink-800:focus{--bg-opacity:1!important;background-color:#97266d!important;background-color:rgba(151,38,109,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:focus\\:bg-pink-900:focus{--bg-opacity:1!important;background-color:#702459!important;background-color:rgba(112,36,89,var(--bg-opacity))!important}}@media (min-width:960px){.md\\:bg-none{background-image:none!important}}@media (min-width:960px){.md\\:bg-gradient-to-t{background-image:linear-gradient(0deg,var(--gradient-color-stops))!important}}@media (min-width:960px){.md\\:bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--gradient-color-stops))!important}}@media (min-width:960px){.md\\:bg-gradient-to-r{background-image:linear-gradient(90deg,var(--gradient-color-stops))!important}}@media (min-width:960px){.md\\:bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--gradient-color-stops))!important}}@media (min-width:960px){.md\\:bg-gradient-to-b{background-image:linear-gradient(180deg,var(--gradient-color-stops))!important}}@media (min-width:960px){.md\\:bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--gradient-color-stops))!important}}@media (min-width:960px){.md\\:bg-gradient-to-l{background-image:linear-gradient(270deg,var(--gradient-color-stops))!important}}@media (min-width:960px){.md\\:bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--gradient-color-stops))!important}}@media (min-width:960px){.md\\:from-transparent{--gradient-from-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:960px){.md\\:from-current{--gradient-from-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:960px){.md\\:from-black{--gradient-from-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:960px){.md\\:from-white{--gradient-from-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:960px){.md\\:from-gray-100{--gradient-from-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:960px){.md\\:from-gray-200{--gradient-from-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:960px){.md\\:from-gray-300{--gradient-from-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:960px){.md\\:from-gray-400{--gradient-from-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:960px){.md\\:from-gray-500{--gradient-from-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:960px){.md\\:from-gray-600{--gradient-from-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:960px){.md\\:from-gray-700{--gradient-from-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:960px){.md\\:from-gray-800{--gradient-from-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:960px){.md\\:from-gray-900{--gradient-from-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:960px){.md\\:from-red-100{--gradient-from-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:960px){.md\\:from-red-200{--gradient-from-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:960px){.md\\:from-red-300{--gradient-from-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:960px){.md\\:from-red-400{--gradient-from-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:960px){.md\\:from-red-500{--gradient-from-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:960px){.md\\:from-red-600{--gradient-from-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:960px){.md\\:from-red-700{--gradient-from-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:960px){.md\\:from-red-800{--gradient-from-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:960px){.md\\:from-red-900{--gradient-from-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:960px){.md\\:from-orange-100{--gradient-from-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:960px){.md\\:from-orange-200{--gradient-from-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:960px){.md\\:from-orange-300{--gradient-from-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:960px){.md\\:from-orange-400{--gradient-from-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:960px){.md\\:from-orange-500{--gradient-from-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:960px){.md\\:from-orange-600{--gradient-from-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:960px){.md\\:from-orange-700{--gradient-from-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:960px){.md\\:from-orange-800{--gradient-from-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:960px){.md\\:from-orange-900{--gradient-from-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:960px){.md\\:from-yellow-100{--gradient-from-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:960px){.md\\:from-yellow-200{--gradient-from-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:960px){.md\\:from-yellow-300{--gradient-from-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:960px){.md\\:from-yellow-400{--gradient-from-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:960px){.md\\:from-yellow-500{--gradient-from-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:960px){.md\\:from-yellow-600{--gradient-from-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:960px){.md\\:from-yellow-700{--gradient-from-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:960px){.md\\:from-yellow-800{--gradient-from-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:960px){.md\\:from-yellow-900{--gradient-from-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:960px){.md\\:from-green-100{--gradient-from-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:960px){.md\\:from-green-200{--gradient-from-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:960px){.md\\:from-green-300{--gradient-from-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:960px){.md\\:from-green-400{--gradient-from-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:960px){.md\\:from-green-500{--gradient-from-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:960px){.md\\:from-green-600{--gradient-from-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:960px){.md\\:from-green-700{--gradient-from-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:960px){.md\\:from-green-800{--gradient-from-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:960px){.md\\:from-green-900{--gradient-from-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:960px){.md\\:from-teal-100{--gradient-from-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:960px){.md\\:from-teal-200{--gradient-from-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:960px){.md\\:from-teal-300{--gradient-from-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:960px){.md\\:from-teal-400{--gradient-from-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:960px){.md\\:from-teal-500{--gradient-from-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:960px){.md\\:from-teal-600{--gradient-from-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:960px){.md\\:from-teal-700{--gradient-from-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:960px){.md\\:from-teal-800{--gradient-from-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:960px){.md\\:from-teal-900{--gradient-from-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:960px){.md\\:from-blue-100{--gradient-from-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:960px){.md\\:from-blue-200{--gradient-from-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:960px){.md\\:from-blue-300{--gradient-from-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:960px){.md\\:from-blue-400{--gradient-from-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:960px){.md\\:from-blue-500{--gradient-from-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:960px){.md\\:from-blue-600{--gradient-from-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:960px){.md\\:from-blue-700{--gradient-from-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:960px){.md\\:from-blue-800{--gradient-from-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:960px){.md\\:from-blue-900{--gradient-from-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:960px){.md\\:from-indigo-100{--gradient-from-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:960px){.md\\:from-indigo-200{--gradient-from-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:960px){.md\\:from-indigo-300{--gradient-from-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:960px){.md\\:from-indigo-400{--gradient-from-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:960px){.md\\:from-indigo-500{--gradient-from-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:960px){.md\\:from-indigo-600{--gradient-from-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:960px){.md\\:from-indigo-700{--gradient-from-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:960px){.md\\:from-indigo-800{--gradient-from-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:960px){.md\\:from-indigo-900{--gradient-from-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:960px){.md\\:from-purple-100{--gradient-from-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:960px){.md\\:from-purple-200{--gradient-from-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:960px){.md\\:from-purple-300{--gradient-from-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:960px){.md\\:from-purple-400{--gradient-from-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:960px){.md\\:from-purple-500{--gradient-from-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:960px){.md\\:from-purple-600{--gradient-from-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:960px){.md\\:from-purple-700{--gradient-from-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:960px){.md\\:from-purple-800{--gradient-from-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:960px){.md\\:from-purple-900{--gradient-from-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:960px){.md\\:from-pink-100{--gradient-from-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:960px){.md\\:from-pink-200{--gradient-from-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:960px){.md\\:from-pink-300{--gradient-from-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:960px){.md\\:from-pink-400{--gradient-from-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:960px){.md\\:from-pink-500{--gradient-from-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:960px){.md\\:from-pink-600{--gradient-from-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:960px){.md\\:from-pink-700{--gradient-from-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:960px){.md\\:from-pink-800{--gradient-from-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:960px){.md\\:from-pink-900{--gradient-from-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:960px){.md\\:via-transparent{--gradient-via-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:960px){.md\\:via-current{--gradient-via-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:960px){.md\\:via-black{--gradient-via-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:960px){.md\\:via-white{--gradient-via-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:960px){.md\\:via-gray-100{--gradient-via-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:960px){.md\\:via-gray-200{--gradient-via-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:960px){.md\\:via-gray-300{--gradient-via-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:960px){.md\\:via-gray-400{--gradient-via-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:960px){.md\\:via-gray-500{--gradient-via-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:960px){.md\\:via-gray-600{--gradient-via-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:960px){.md\\:via-gray-700{--gradient-via-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:960px){.md\\:via-gray-800{--gradient-via-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:960px){.md\\:via-gray-900{--gradient-via-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:960px){.md\\:via-red-100{--gradient-via-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:960px){.md\\:via-red-200{--gradient-via-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:960px){.md\\:via-red-300{--gradient-via-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:960px){.md\\:via-red-400{--gradient-via-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:960px){.md\\:via-red-500{--gradient-via-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:960px){.md\\:via-red-600{--gradient-via-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:960px){.md\\:via-red-700{--gradient-via-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:960px){.md\\:via-red-800{--gradient-via-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:960px){.md\\:via-red-900{--gradient-via-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:960px){.md\\:via-orange-100{--gradient-via-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:960px){.md\\:via-orange-200{--gradient-via-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:960px){.md\\:via-orange-300{--gradient-via-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:960px){.md\\:via-orange-400{--gradient-via-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:960px){.md\\:via-orange-500{--gradient-via-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:960px){.md\\:via-orange-600{--gradient-via-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:960px){.md\\:via-orange-700{--gradient-via-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:960px){.md\\:via-orange-800{--gradient-via-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:960px){.md\\:via-orange-900{--gradient-via-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:960px){.md\\:via-yellow-100{--gradient-via-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:960px){.md\\:via-yellow-200{--gradient-via-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:960px){.md\\:via-yellow-300{--gradient-via-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:960px){.md\\:via-yellow-400{--gradient-via-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:960px){.md\\:via-yellow-500{--gradient-via-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:960px){.md\\:via-yellow-600{--gradient-via-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:960px){.md\\:via-yellow-700{--gradient-via-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:960px){.md\\:via-yellow-800{--gradient-via-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:960px){.md\\:via-yellow-900{--gradient-via-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:960px){.md\\:via-green-100{--gradient-via-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:960px){.md\\:via-green-200{--gradient-via-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:960px){.md\\:via-green-300{--gradient-via-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:960px){.md\\:via-green-400{--gradient-via-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:960px){.md\\:via-green-500{--gradient-via-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:960px){.md\\:via-green-600{--gradient-via-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:960px){.md\\:via-green-700{--gradient-via-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:960px){.md\\:via-green-800{--gradient-via-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:960px){.md\\:via-green-900{--gradient-via-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:960px){.md\\:via-teal-100{--gradient-via-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:960px){.md\\:via-teal-200{--gradient-via-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:960px){.md\\:via-teal-300{--gradient-via-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:960px){.md\\:via-teal-400{--gradient-via-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:960px){.md\\:via-teal-500{--gradient-via-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:960px){.md\\:via-teal-600{--gradient-via-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:960px){.md\\:via-teal-700{--gradient-via-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:960px){.md\\:via-teal-800{--gradient-via-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:960px){.md\\:via-teal-900{--gradient-via-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:960px){.md\\:via-blue-100{--gradient-via-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:960px){.md\\:via-blue-200{--gradient-via-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:960px){.md\\:via-blue-300{--gradient-via-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:960px){.md\\:via-blue-400{--gradient-via-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:960px){.md\\:via-blue-500{--gradient-via-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:960px){.md\\:via-blue-600{--gradient-via-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:960px){.md\\:via-blue-700{--gradient-via-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:960px){.md\\:via-blue-800{--gradient-via-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:960px){.md\\:via-blue-900{--gradient-via-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:960px){.md\\:via-indigo-100{--gradient-via-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:960px){.md\\:via-indigo-200{--gradient-via-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:960px){.md\\:via-indigo-300{--gradient-via-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:960px){.md\\:via-indigo-400{--gradient-via-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:960px){.md\\:via-indigo-500{--gradient-via-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:960px){.md\\:via-indigo-600{--gradient-via-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:960px){.md\\:via-indigo-700{--gradient-via-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:960px){.md\\:via-indigo-800{--gradient-via-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:960px){.md\\:via-indigo-900{--gradient-via-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:960px){.md\\:via-purple-100{--gradient-via-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:960px){.md\\:via-purple-200{--gradient-via-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:960px){.md\\:via-purple-300{--gradient-via-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:960px){.md\\:via-purple-400{--gradient-via-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:960px){.md\\:via-purple-500{--gradient-via-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:960px){.md\\:via-purple-600{--gradient-via-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:960px){.md\\:via-purple-700{--gradient-via-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:960px){.md\\:via-purple-800{--gradient-via-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:960px){.md\\:via-purple-900{--gradient-via-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:960px){.md\\:via-pink-100{--gradient-via-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:960px){.md\\:via-pink-200{--gradient-via-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:960px){.md\\:via-pink-300{--gradient-via-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:960px){.md\\:via-pink-400{--gradient-via-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:960px){.md\\:via-pink-500{--gradient-via-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:960px){.md\\:via-pink-600{--gradient-via-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:960px){.md\\:via-pink-700{--gradient-via-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:960px){.md\\:via-pink-800{--gradient-via-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:960px){.md\\:via-pink-900{--gradient-via-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:960px){.md\\:to-transparent{--gradient-to-color:transparent!important}}@media (min-width:960px){.md\\:to-current{--gradient-to-color:currentColor!important}}@media (min-width:960px){.md\\:to-black{--gradient-to-color:#000!important}}@media (min-width:960px){.md\\:to-white{--gradient-to-color:#fff!important}}@media (min-width:960px){.md\\:to-gray-100{--gradient-to-color:#f7fafc!important}}@media (min-width:960px){.md\\:to-gray-200{--gradient-to-color:#edf2f7!important}}@media (min-width:960px){.md\\:to-gray-300{--gradient-to-color:#e2e8f0!important}}@media (min-width:960px){.md\\:to-gray-400{--gradient-to-color:#cbd5e0!important}}@media (min-width:960px){.md\\:to-gray-500{--gradient-to-color:#a0aec0!important}}@media (min-width:960px){.md\\:to-gray-600{--gradient-to-color:#718096!important}}@media (min-width:960px){.md\\:to-gray-700{--gradient-to-color:#4a5568!important}}@media (min-width:960px){.md\\:to-gray-800{--gradient-to-color:#2d3748!important}}@media (min-width:960px){.md\\:to-gray-900{--gradient-to-color:#1a202c!important}}@media (min-width:960px){.md\\:to-red-100{--gradient-to-color:#fff5f5!important}}@media (min-width:960px){.md\\:to-red-200{--gradient-to-color:#fed7d7!important}}@media (min-width:960px){.md\\:to-red-300{--gradient-to-color:#feb2b2!important}}@media (min-width:960px){.md\\:to-red-400{--gradient-to-color:#fc8181!important}}@media (min-width:960px){.md\\:to-red-500{--gradient-to-color:#f56565!important}}@media (min-width:960px){.md\\:to-red-600{--gradient-to-color:#e53e3e!important}}@media (min-width:960px){.md\\:to-red-700{--gradient-to-color:#c53030!important}}@media (min-width:960px){.md\\:to-red-800{--gradient-to-color:#9b2c2c!important}}@media (min-width:960px){.md\\:to-red-900{--gradient-to-color:#742a2a!important}}@media (min-width:960px){.md\\:to-orange-100{--gradient-to-color:#fffaf0!important}}@media (min-width:960px){.md\\:to-orange-200{--gradient-to-color:#feebc8!important}}@media (min-width:960px){.md\\:to-orange-300{--gradient-to-color:#fbd38d!important}}@media (min-width:960px){.md\\:to-orange-400{--gradient-to-color:#f6ad55!important}}@media (min-width:960px){.md\\:to-orange-500{--gradient-to-color:#ed8936!important}}@media (min-width:960px){.md\\:to-orange-600{--gradient-to-color:#dd6b20!important}}@media (min-width:960px){.md\\:to-orange-700{--gradient-to-color:#c05621!important}}@media (min-width:960px){.md\\:to-orange-800{--gradient-to-color:#9c4221!important}}@media (min-width:960px){.md\\:to-orange-900{--gradient-to-color:#7b341e!important}}@media (min-width:960px){.md\\:to-yellow-100{--gradient-to-color:ivory!important}}@media (min-width:960px){.md\\:to-yellow-200{--gradient-to-color:#fefcbf!important}}@media (min-width:960px){.md\\:to-yellow-300{--gradient-to-color:#faf089!important}}@media (min-width:960px){.md\\:to-yellow-400{--gradient-to-color:#f6e05e!important}}@media (min-width:960px){.md\\:to-yellow-500{--gradient-to-color:#ecc94b!important}}@media (min-width:960px){.md\\:to-yellow-600{--gradient-to-color:#d69e2e!important}}@media (min-width:960px){.md\\:to-yellow-700{--gradient-to-color:#b7791f!important}}@media (min-width:960px){.md\\:to-yellow-800{--gradient-to-color:#975a16!important}}@media (min-width:960px){.md\\:to-yellow-900{--gradient-to-color:#744210!important}}@media (min-width:960px){.md\\:to-green-100{--gradient-to-color:#f0fff4!important}}@media (min-width:960px){.md\\:to-green-200{--gradient-to-color:#c6f6d5!important}}@media (min-width:960px){.md\\:to-green-300{--gradient-to-color:#9ae6b4!important}}@media (min-width:960px){.md\\:to-green-400{--gradient-to-color:#68d391!important}}@media (min-width:960px){.md\\:to-green-500{--gradient-to-color:#48bb78!important}}@media (min-width:960px){.md\\:to-green-600{--gradient-to-color:#38a169!important}}@media (min-width:960px){.md\\:to-green-700{--gradient-to-color:#2f855a!important}}@media (min-width:960px){.md\\:to-green-800{--gradient-to-color:#276749!important}}@media (min-width:960px){.md\\:to-green-900{--gradient-to-color:#22543d!important}}@media (min-width:960px){.md\\:to-teal-100{--gradient-to-color:#e6fffa!important}}@media (min-width:960px){.md\\:to-teal-200{--gradient-to-color:#b2f5ea!important}}@media (min-width:960px){.md\\:to-teal-300{--gradient-to-color:#81e6d9!important}}@media (min-width:960px){.md\\:to-teal-400{--gradient-to-color:#4fd1c5!important}}@media (min-width:960px){.md\\:to-teal-500{--gradient-to-color:#38b2ac!important}}@media (min-width:960px){.md\\:to-teal-600{--gradient-to-color:#319795!important}}@media (min-width:960px){.md\\:to-teal-700{--gradient-to-color:#2c7a7b!important}}@media (min-width:960px){.md\\:to-teal-800{--gradient-to-color:#285e61!important}}@media (min-width:960px){.md\\:to-teal-900{--gradient-to-color:#234e52!important}}@media (min-width:960px){.md\\:to-blue-100{--gradient-to-color:#ebf8ff!important}}@media (min-width:960px){.md\\:to-blue-200{--gradient-to-color:#bee3f8!important}}@media (min-width:960px){.md\\:to-blue-300{--gradient-to-color:#90cdf4!important}}@media (min-width:960px){.md\\:to-blue-400{--gradient-to-color:#63b3ed!important}}@media (min-width:960px){.md\\:to-blue-500{--gradient-to-color:#4299e1!important}}@media (min-width:960px){.md\\:to-blue-600{--gradient-to-color:#3182ce!important}}@media (min-width:960px){.md\\:to-blue-700{--gradient-to-color:#2b6cb0!important}}@media (min-width:960px){.md\\:to-blue-800{--gradient-to-color:#2c5282!important}}@media (min-width:960px){.md\\:to-blue-900{--gradient-to-color:#2a4365!important}}@media (min-width:960px){.md\\:to-indigo-100{--gradient-to-color:#ebf4ff!important}}@media (min-width:960px){.md\\:to-indigo-200{--gradient-to-color:#c3dafe!important}}@media (min-width:960px){.md\\:to-indigo-300{--gradient-to-color:#a3bffa!important}}@media (min-width:960px){.md\\:to-indigo-400{--gradient-to-color:#7f9cf5!important}}@media (min-width:960px){.md\\:to-indigo-500{--gradient-to-color:#667eea!important}}@media (min-width:960px){.md\\:to-indigo-600{--gradient-to-color:#5a67d8!important}}@media (min-width:960px){.md\\:to-indigo-700{--gradient-to-color:#4c51bf!important}}@media (min-width:960px){.md\\:to-indigo-800{--gradient-to-color:#434190!important}}@media (min-width:960px){.md\\:to-indigo-900{--gradient-to-color:#3c366b!important}}@media (min-width:960px){.md\\:to-purple-100{--gradient-to-color:#faf5ff!important}}@media (min-width:960px){.md\\:to-purple-200{--gradient-to-color:#e9d8fd!important}}@media (min-width:960px){.md\\:to-purple-300{--gradient-to-color:#d6bcfa!important}}@media (min-width:960px){.md\\:to-purple-400{--gradient-to-color:#b794f4!important}}@media (min-width:960px){.md\\:to-purple-500{--gradient-to-color:#9f7aea!important}}@media (min-width:960px){.md\\:to-purple-600{--gradient-to-color:#805ad5!important}}@media (min-width:960px){.md\\:to-purple-700{--gradient-to-color:#6b46c1!important}}@media (min-width:960px){.md\\:to-purple-800{--gradient-to-color:#553c9a!important}}@media (min-width:960px){.md\\:to-purple-900{--gradient-to-color:#44337a!important}}@media (min-width:960px){.md\\:to-pink-100{--gradient-to-color:#fff5f7!important}}@media (min-width:960px){.md\\:to-pink-200{--gradient-to-color:#fed7e2!important}}@media (min-width:960px){.md\\:to-pink-300{--gradient-to-color:#fbb6ce!important}}@media (min-width:960px){.md\\:to-pink-400{--gradient-to-color:#f687b3!important}}@media (min-width:960px){.md\\:to-pink-500{--gradient-to-color:#ed64a6!important}}@media (min-width:960px){.md\\:to-pink-600{--gradient-to-color:#d53f8c!important}}@media (min-width:960px){.md\\:to-pink-700{--gradient-to-color:#b83280!important}}@media (min-width:960px){.md\\:to-pink-800{--gradient-to-color:#97266d!important}}@media (min-width:960px){.md\\:to-pink-900{--gradient-to-color:#702459!important}}@media (min-width:960px){.md\\:hover\\:from-transparent:hover{--gradient-from-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:960px){.md\\:hover\\:from-current:hover{--gradient-from-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:960px){.md\\:hover\\:from-black:hover{--gradient-from-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:960px){.md\\:hover\\:from-white:hover{--gradient-from-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:960px){.md\\:hover\\:from-gray-100:hover{--gradient-from-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:960px){.md\\:hover\\:from-gray-200:hover{--gradient-from-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:960px){.md\\:hover\\:from-gray-300:hover{--gradient-from-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:960px){.md\\:hover\\:from-gray-400:hover{--gradient-from-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:960px){.md\\:hover\\:from-gray-500:hover{--gradient-from-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:960px){.md\\:hover\\:from-gray-600:hover{--gradient-from-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:960px){.md\\:hover\\:from-gray-700:hover{--gradient-from-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:960px){.md\\:hover\\:from-gray-800:hover{--gradient-from-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:960px){.md\\:hover\\:from-gray-900:hover{--gradient-from-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:960px){.md\\:hover\\:from-red-100:hover{--gradient-from-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:960px){.md\\:hover\\:from-red-200:hover{--gradient-from-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:960px){.md\\:hover\\:from-red-300:hover{--gradient-from-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:960px){.md\\:hover\\:from-red-400:hover{--gradient-from-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:960px){.md\\:hover\\:from-red-500:hover{--gradient-from-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:960px){.md\\:hover\\:from-red-600:hover{--gradient-from-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:960px){.md\\:hover\\:from-red-700:hover{--gradient-from-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:960px){.md\\:hover\\:from-red-800:hover{--gradient-from-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:960px){.md\\:hover\\:from-red-900:hover{--gradient-from-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:960px){.md\\:hover\\:from-orange-100:hover{--gradient-from-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:960px){.md\\:hover\\:from-orange-200:hover{--gradient-from-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:960px){.md\\:hover\\:from-orange-300:hover{--gradient-from-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:960px){.md\\:hover\\:from-orange-400:hover{--gradient-from-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:960px){.md\\:hover\\:from-orange-500:hover{--gradient-from-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:960px){.md\\:hover\\:from-orange-600:hover{--gradient-from-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:960px){.md\\:hover\\:from-orange-700:hover{--gradient-from-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:960px){.md\\:hover\\:from-orange-800:hover{--gradient-from-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:960px){.md\\:hover\\:from-orange-900:hover{--gradient-from-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:960px){.md\\:hover\\:from-yellow-100:hover{--gradient-from-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:960px){.md\\:hover\\:from-yellow-200:hover{--gradient-from-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:960px){.md\\:hover\\:from-yellow-300:hover{--gradient-from-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:960px){.md\\:hover\\:from-yellow-400:hover{--gradient-from-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:960px){.md\\:hover\\:from-yellow-500:hover{--gradient-from-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:960px){.md\\:hover\\:from-yellow-600:hover{--gradient-from-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:960px){.md\\:hover\\:from-yellow-700:hover{--gradient-from-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:960px){.md\\:hover\\:from-yellow-800:hover{--gradient-from-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:960px){.md\\:hover\\:from-yellow-900:hover{--gradient-from-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:960px){.md\\:hover\\:from-green-100:hover{--gradient-from-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:960px){.md\\:hover\\:from-green-200:hover{--gradient-from-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:960px){.md\\:hover\\:from-green-300:hover{--gradient-from-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:960px){.md\\:hover\\:from-green-400:hover{--gradient-from-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:960px){.md\\:hover\\:from-green-500:hover{--gradient-from-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:960px){.md\\:hover\\:from-green-600:hover{--gradient-from-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:960px){.md\\:hover\\:from-green-700:hover{--gradient-from-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:960px){.md\\:hover\\:from-green-800:hover{--gradient-from-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:960px){.md\\:hover\\:from-green-900:hover{--gradient-from-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:960px){.md\\:hover\\:from-teal-100:hover{--gradient-from-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:960px){.md\\:hover\\:from-teal-200:hover{--gradient-from-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:960px){.md\\:hover\\:from-teal-300:hover{--gradient-from-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:960px){.md\\:hover\\:from-teal-400:hover{--gradient-from-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:960px){.md\\:hover\\:from-teal-500:hover{--gradient-from-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:960px){.md\\:hover\\:from-teal-600:hover{--gradient-from-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:960px){.md\\:hover\\:from-teal-700:hover{--gradient-from-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:960px){.md\\:hover\\:from-teal-800:hover{--gradient-from-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:960px){.md\\:hover\\:from-teal-900:hover{--gradient-from-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:960px){.md\\:hover\\:from-blue-100:hover{--gradient-from-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:960px){.md\\:hover\\:from-blue-200:hover{--gradient-from-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:960px){.md\\:hover\\:from-blue-300:hover{--gradient-from-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:960px){.md\\:hover\\:from-blue-400:hover{--gradient-from-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:960px){.md\\:hover\\:from-blue-500:hover{--gradient-from-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:960px){.md\\:hover\\:from-blue-600:hover{--gradient-from-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:960px){.md\\:hover\\:from-blue-700:hover{--gradient-from-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:960px){.md\\:hover\\:from-blue-800:hover{--gradient-from-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:960px){.md\\:hover\\:from-blue-900:hover{--gradient-from-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:960px){.md\\:hover\\:from-indigo-100:hover{--gradient-from-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:960px){.md\\:hover\\:from-indigo-200:hover{--gradient-from-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:960px){.md\\:hover\\:from-indigo-300:hover{--gradient-from-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:960px){.md\\:hover\\:from-indigo-400:hover{--gradient-from-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:960px){.md\\:hover\\:from-indigo-500:hover{--gradient-from-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:960px){.md\\:hover\\:from-indigo-600:hover{--gradient-from-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:960px){.md\\:hover\\:from-indigo-700:hover{--gradient-from-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:960px){.md\\:hover\\:from-indigo-800:hover{--gradient-from-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:960px){.md\\:hover\\:from-indigo-900:hover{--gradient-from-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:960px){.md\\:hover\\:from-purple-100:hover{--gradient-from-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:960px){.md\\:hover\\:from-purple-200:hover{--gradient-from-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:960px){.md\\:hover\\:from-purple-300:hover{--gradient-from-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:960px){.md\\:hover\\:from-purple-400:hover{--gradient-from-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:960px){.md\\:hover\\:from-purple-500:hover{--gradient-from-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:960px){.md\\:hover\\:from-purple-600:hover{--gradient-from-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:960px){.md\\:hover\\:from-purple-700:hover{--gradient-from-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:960px){.md\\:hover\\:from-purple-800:hover{--gradient-from-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:960px){.md\\:hover\\:from-purple-900:hover{--gradient-from-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:960px){.md\\:hover\\:from-pink-100:hover{--gradient-from-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:960px){.md\\:hover\\:from-pink-200:hover{--gradient-from-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:960px){.md\\:hover\\:from-pink-300:hover{--gradient-from-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:960px){.md\\:hover\\:from-pink-400:hover{--gradient-from-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:960px){.md\\:hover\\:from-pink-500:hover{--gradient-from-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:960px){.md\\:hover\\:from-pink-600:hover{--gradient-from-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:960px){.md\\:hover\\:from-pink-700:hover{--gradient-from-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:960px){.md\\:hover\\:from-pink-800:hover{--gradient-from-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:960px){.md\\:hover\\:from-pink-900:hover{--gradient-from-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:960px){.md\\:hover\\:via-transparent:hover{--gradient-via-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:960px){.md\\:hover\\:via-current:hover{--gradient-via-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:960px){.md\\:hover\\:via-black:hover{--gradient-via-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:960px){.md\\:hover\\:via-white:hover{--gradient-via-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:960px){.md\\:hover\\:via-gray-100:hover{--gradient-via-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:960px){.md\\:hover\\:via-gray-200:hover{--gradient-via-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:960px){.md\\:hover\\:via-gray-300:hover{--gradient-via-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:960px){.md\\:hover\\:via-gray-400:hover{--gradient-via-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:960px){.md\\:hover\\:via-gray-500:hover{--gradient-via-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:960px){.md\\:hover\\:via-gray-600:hover{--gradient-via-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:960px){.md\\:hover\\:via-gray-700:hover{--gradient-via-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:960px){.md\\:hover\\:via-gray-800:hover{--gradient-via-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:960px){.md\\:hover\\:via-gray-900:hover{--gradient-via-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:960px){.md\\:hover\\:via-red-100:hover{--gradient-via-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:960px){.md\\:hover\\:via-red-200:hover{--gradient-via-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:960px){.md\\:hover\\:via-red-300:hover{--gradient-via-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:960px){.md\\:hover\\:via-red-400:hover{--gradient-via-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:960px){.md\\:hover\\:via-red-500:hover{--gradient-via-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:960px){.md\\:hover\\:via-red-600:hover{--gradient-via-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:960px){.md\\:hover\\:via-red-700:hover{--gradient-via-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:960px){.md\\:hover\\:via-red-800:hover{--gradient-via-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:960px){.md\\:hover\\:via-red-900:hover{--gradient-via-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:960px){.md\\:hover\\:via-orange-100:hover{--gradient-via-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:960px){.md\\:hover\\:via-orange-200:hover{--gradient-via-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:960px){.md\\:hover\\:via-orange-300:hover{--gradient-via-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:960px){.md\\:hover\\:via-orange-400:hover{--gradient-via-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:960px){.md\\:hover\\:via-orange-500:hover{--gradient-via-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:960px){.md\\:hover\\:via-orange-600:hover{--gradient-via-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:960px){.md\\:hover\\:via-orange-700:hover{--gradient-via-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:960px){.md\\:hover\\:via-orange-800:hover{--gradient-via-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:960px){.md\\:hover\\:via-orange-900:hover{--gradient-via-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:960px){.md\\:hover\\:via-yellow-100:hover{--gradient-via-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:960px){.md\\:hover\\:via-yellow-200:hover{--gradient-via-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:960px){.md\\:hover\\:via-yellow-300:hover{--gradient-via-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:960px){.md\\:hover\\:via-yellow-400:hover{--gradient-via-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:960px){.md\\:hover\\:via-yellow-500:hover{--gradient-via-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:960px){.md\\:hover\\:via-yellow-600:hover{--gradient-via-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:960px){.md\\:hover\\:via-yellow-700:hover{--gradient-via-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:960px){.md\\:hover\\:via-yellow-800:hover{--gradient-via-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:960px){.md\\:hover\\:via-yellow-900:hover{--gradient-via-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:960px){.md\\:hover\\:via-green-100:hover{--gradient-via-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:960px){.md\\:hover\\:via-green-200:hover{--gradient-via-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:960px){.md\\:hover\\:via-green-300:hover{--gradient-via-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:960px){.md\\:hover\\:via-green-400:hover{--gradient-via-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:960px){.md\\:hover\\:via-green-500:hover{--gradient-via-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:960px){.md\\:hover\\:via-green-600:hover{--gradient-via-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:960px){.md\\:hover\\:via-green-700:hover{--gradient-via-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:960px){.md\\:hover\\:via-green-800:hover{--gradient-via-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:960px){.md\\:hover\\:via-green-900:hover{--gradient-via-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:960px){.md\\:hover\\:via-teal-100:hover{--gradient-via-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:960px){.md\\:hover\\:via-teal-200:hover{--gradient-via-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:960px){.md\\:hover\\:via-teal-300:hover{--gradient-via-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:960px){.md\\:hover\\:via-teal-400:hover{--gradient-via-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:960px){.md\\:hover\\:via-teal-500:hover{--gradient-via-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:960px){.md\\:hover\\:via-teal-600:hover{--gradient-via-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:960px){.md\\:hover\\:via-teal-700:hover{--gradient-via-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:960px){.md\\:hover\\:via-teal-800:hover{--gradient-via-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:960px){.md\\:hover\\:via-teal-900:hover{--gradient-via-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:960px){.md\\:hover\\:via-blue-100:hover{--gradient-via-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:960px){.md\\:hover\\:via-blue-200:hover{--gradient-via-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:960px){.md\\:hover\\:via-blue-300:hover{--gradient-via-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:960px){.md\\:hover\\:via-blue-400:hover{--gradient-via-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:960px){.md\\:hover\\:via-blue-500:hover{--gradient-via-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:960px){.md\\:hover\\:via-blue-600:hover{--gradient-via-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:960px){.md\\:hover\\:via-blue-700:hover{--gradient-via-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:960px){.md\\:hover\\:via-blue-800:hover{--gradient-via-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:960px){.md\\:hover\\:via-blue-900:hover{--gradient-via-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:960px){.md\\:hover\\:via-indigo-100:hover{--gradient-via-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:960px){.md\\:hover\\:via-indigo-200:hover{--gradient-via-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:960px){.md\\:hover\\:via-indigo-300:hover{--gradient-via-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:960px){.md\\:hover\\:via-indigo-400:hover{--gradient-via-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:960px){.md\\:hover\\:via-indigo-500:hover{--gradient-via-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:960px){.md\\:hover\\:via-indigo-600:hover{--gradient-via-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:960px){.md\\:hover\\:via-indigo-700:hover{--gradient-via-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:960px){.md\\:hover\\:via-indigo-800:hover{--gradient-via-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:960px){.md\\:hover\\:via-indigo-900:hover{--gradient-via-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:960px){.md\\:hover\\:via-purple-100:hover{--gradient-via-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:960px){.md\\:hover\\:via-purple-200:hover{--gradient-via-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:960px){.md\\:hover\\:via-purple-300:hover{--gradient-via-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:960px){.md\\:hover\\:via-purple-400:hover{--gradient-via-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:960px){.md\\:hover\\:via-purple-500:hover{--gradient-via-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:960px){.md\\:hover\\:via-purple-600:hover{--gradient-via-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:960px){.md\\:hover\\:via-purple-700:hover{--gradient-via-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:960px){.md\\:hover\\:via-purple-800:hover{--gradient-via-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:960px){.md\\:hover\\:via-purple-900:hover{--gradient-via-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:960px){.md\\:hover\\:via-pink-100:hover{--gradient-via-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:960px){.md\\:hover\\:via-pink-200:hover{--gradient-via-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:960px){.md\\:hover\\:via-pink-300:hover{--gradient-via-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:960px){.md\\:hover\\:via-pink-400:hover{--gradient-via-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:960px){.md\\:hover\\:via-pink-500:hover{--gradient-via-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:960px){.md\\:hover\\:via-pink-600:hover{--gradient-via-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:960px){.md\\:hover\\:via-pink-700:hover{--gradient-via-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:960px){.md\\:hover\\:via-pink-800:hover{--gradient-via-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:960px){.md\\:hover\\:via-pink-900:hover{--gradient-via-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:960px){.md\\:hover\\:to-transparent:hover{--gradient-to-color:transparent!important}}@media (min-width:960px){.md\\:hover\\:to-current:hover{--gradient-to-color:currentColor!important}}@media (min-width:960px){.md\\:hover\\:to-black:hover{--gradient-to-color:#000!important}}@media (min-width:960px){.md\\:hover\\:to-white:hover{--gradient-to-color:#fff!important}}@media (min-width:960px){.md\\:hover\\:to-gray-100:hover{--gradient-to-color:#f7fafc!important}}@media (min-width:960px){.md\\:hover\\:to-gray-200:hover{--gradient-to-color:#edf2f7!important}}@media (min-width:960px){.md\\:hover\\:to-gray-300:hover{--gradient-to-color:#e2e8f0!important}}@media (min-width:960px){.md\\:hover\\:to-gray-400:hover{--gradient-to-color:#cbd5e0!important}}@media (min-width:960px){.md\\:hover\\:to-gray-500:hover{--gradient-to-color:#a0aec0!important}}@media (min-width:960px){.md\\:hover\\:to-gray-600:hover{--gradient-to-color:#718096!important}}@media (min-width:960px){.md\\:hover\\:to-gray-700:hover{--gradient-to-color:#4a5568!important}}@media (min-width:960px){.md\\:hover\\:to-gray-800:hover{--gradient-to-color:#2d3748!important}}@media (min-width:960px){.md\\:hover\\:to-gray-900:hover{--gradient-to-color:#1a202c!important}}@media (min-width:960px){.md\\:hover\\:to-red-100:hover{--gradient-to-color:#fff5f5!important}}@media (min-width:960px){.md\\:hover\\:to-red-200:hover{--gradient-to-color:#fed7d7!important}}@media (min-width:960px){.md\\:hover\\:to-red-300:hover{--gradient-to-color:#feb2b2!important}}@media (min-width:960px){.md\\:hover\\:to-red-400:hover{--gradient-to-color:#fc8181!important}}@media (min-width:960px){.md\\:hover\\:to-red-500:hover{--gradient-to-color:#f56565!important}}@media (min-width:960px){.md\\:hover\\:to-red-600:hover{--gradient-to-color:#e53e3e!important}}@media (min-width:960px){.md\\:hover\\:to-red-700:hover{--gradient-to-color:#c53030!important}}@media (min-width:960px){.md\\:hover\\:to-red-800:hover{--gradient-to-color:#9b2c2c!important}}@media (min-width:960px){.md\\:hover\\:to-red-900:hover{--gradient-to-color:#742a2a!important}}@media (min-width:960px){.md\\:hover\\:to-orange-100:hover{--gradient-to-color:#fffaf0!important}}@media (min-width:960px){.md\\:hover\\:to-orange-200:hover{--gradient-to-color:#feebc8!important}}@media (min-width:960px){.md\\:hover\\:to-orange-300:hover{--gradient-to-color:#fbd38d!important}}@media (min-width:960px){.md\\:hover\\:to-orange-400:hover{--gradient-to-color:#f6ad55!important}}@media (min-width:960px){.md\\:hover\\:to-orange-500:hover{--gradient-to-color:#ed8936!important}}@media (min-width:960px){.md\\:hover\\:to-orange-600:hover{--gradient-to-color:#dd6b20!important}}@media (min-width:960px){.md\\:hover\\:to-orange-700:hover{--gradient-to-color:#c05621!important}}@media (min-width:960px){.md\\:hover\\:to-orange-800:hover{--gradient-to-color:#9c4221!important}}@media (min-width:960px){.md\\:hover\\:to-orange-900:hover{--gradient-to-color:#7b341e!important}}@media (min-width:960px){.md\\:hover\\:to-yellow-100:hover{--gradient-to-color:ivory!important}}@media (min-width:960px){.md\\:hover\\:to-yellow-200:hover{--gradient-to-color:#fefcbf!important}}@media (min-width:960px){.md\\:hover\\:to-yellow-300:hover{--gradient-to-color:#faf089!important}}@media (min-width:960px){.md\\:hover\\:to-yellow-400:hover{--gradient-to-color:#f6e05e!important}}@media (min-width:960px){.md\\:hover\\:to-yellow-500:hover{--gradient-to-color:#ecc94b!important}}@media (min-width:960px){.md\\:hover\\:to-yellow-600:hover{--gradient-to-color:#d69e2e!important}}@media (min-width:960px){.md\\:hover\\:to-yellow-700:hover{--gradient-to-color:#b7791f!important}}@media (min-width:960px){.md\\:hover\\:to-yellow-800:hover{--gradient-to-color:#975a16!important}}@media (min-width:960px){.md\\:hover\\:to-yellow-900:hover{--gradient-to-color:#744210!important}}@media (min-width:960px){.md\\:hover\\:to-green-100:hover{--gradient-to-color:#f0fff4!important}}@media (min-width:960px){.md\\:hover\\:to-green-200:hover{--gradient-to-color:#c6f6d5!important}}@media (min-width:960px){.md\\:hover\\:to-green-300:hover{--gradient-to-color:#9ae6b4!important}}@media (min-width:960px){.md\\:hover\\:to-green-400:hover{--gradient-to-color:#68d391!important}}@media (min-width:960px){.md\\:hover\\:to-green-500:hover{--gradient-to-color:#48bb78!important}}@media (min-width:960px){.md\\:hover\\:to-green-600:hover{--gradient-to-color:#38a169!important}}@media (min-width:960px){.md\\:hover\\:to-green-700:hover{--gradient-to-color:#2f855a!important}}@media (min-width:960px){.md\\:hover\\:to-green-800:hover{--gradient-to-color:#276749!important}}@media (min-width:960px){.md\\:hover\\:to-green-900:hover{--gradient-to-color:#22543d!important}}@media (min-width:960px){.md\\:hover\\:to-teal-100:hover{--gradient-to-color:#e6fffa!important}}@media (min-width:960px){.md\\:hover\\:to-teal-200:hover{--gradient-to-color:#b2f5ea!important}}@media (min-width:960px){.md\\:hover\\:to-teal-300:hover{--gradient-to-color:#81e6d9!important}}@media (min-width:960px){.md\\:hover\\:to-teal-400:hover{--gradient-to-color:#4fd1c5!important}}@media (min-width:960px){.md\\:hover\\:to-teal-500:hover{--gradient-to-color:#38b2ac!important}}@media (min-width:960px){.md\\:hover\\:to-teal-600:hover{--gradient-to-color:#319795!important}}@media (min-width:960px){.md\\:hover\\:to-teal-700:hover{--gradient-to-color:#2c7a7b!important}}@media (min-width:960px){.md\\:hover\\:to-teal-800:hover{--gradient-to-color:#285e61!important}}@media (min-width:960px){.md\\:hover\\:to-teal-900:hover{--gradient-to-color:#234e52!important}}@media (min-width:960px){.md\\:hover\\:to-blue-100:hover{--gradient-to-color:#ebf8ff!important}}@media (min-width:960px){.md\\:hover\\:to-blue-200:hover{--gradient-to-color:#bee3f8!important}}@media (min-width:960px){.md\\:hover\\:to-blue-300:hover{--gradient-to-color:#90cdf4!important}}@media (min-width:960px){.md\\:hover\\:to-blue-400:hover{--gradient-to-color:#63b3ed!important}}@media (min-width:960px){.md\\:hover\\:to-blue-500:hover{--gradient-to-color:#4299e1!important}}@media (min-width:960px){.md\\:hover\\:to-blue-600:hover{--gradient-to-color:#3182ce!important}}@media (min-width:960px){.md\\:hover\\:to-blue-700:hover{--gradient-to-color:#2b6cb0!important}}@media (min-width:960px){.md\\:hover\\:to-blue-800:hover{--gradient-to-color:#2c5282!important}}@media (min-width:960px){.md\\:hover\\:to-blue-900:hover{--gradient-to-color:#2a4365!important}}@media (min-width:960px){.md\\:hover\\:to-indigo-100:hover{--gradient-to-color:#ebf4ff!important}}@media (min-width:960px){.md\\:hover\\:to-indigo-200:hover{--gradient-to-color:#c3dafe!important}}@media (min-width:960px){.md\\:hover\\:to-indigo-300:hover{--gradient-to-color:#a3bffa!important}}@media (min-width:960px){.md\\:hover\\:to-indigo-400:hover{--gradient-to-color:#7f9cf5!important}}@media (min-width:960px){.md\\:hover\\:to-indigo-500:hover{--gradient-to-color:#667eea!important}}@media (min-width:960px){.md\\:hover\\:to-indigo-600:hover{--gradient-to-color:#5a67d8!important}}@media (min-width:960px){.md\\:hover\\:to-indigo-700:hover{--gradient-to-color:#4c51bf!important}}@media (min-width:960px){.md\\:hover\\:to-indigo-800:hover{--gradient-to-color:#434190!important}}@media (min-width:960px){.md\\:hover\\:to-indigo-900:hover{--gradient-to-color:#3c366b!important}}@media (min-width:960px){.md\\:hover\\:to-purple-100:hover{--gradient-to-color:#faf5ff!important}}@media (min-width:960px){.md\\:hover\\:to-purple-200:hover{--gradient-to-color:#e9d8fd!important}}@media (min-width:960px){.md\\:hover\\:to-purple-300:hover{--gradient-to-color:#d6bcfa!important}}@media (min-width:960px){.md\\:hover\\:to-purple-400:hover{--gradient-to-color:#b794f4!important}}@media (min-width:960px){.md\\:hover\\:to-purple-500:hover{--gradient-to-color:#9f7aea!important}}@media (min-width:960px){.md\\:hover\\:to-purple-600:hover{--gradient-to-color:#805ad5!important}}@media (min-width:960px){.md\\:hover\\:to-purple-700:hover{--gradient-to-color:#6b46c1!important}}@media (min-width:960px){.md\\:hover\\:to-purple-800:hover{--gradient-to-color:#553c9a!important}}@media (min-width:960px){.md\\:hover\\:to-purple-900:hover{--gradient-to-color:#44337a!important}}@media (min-width:960px){.md\\:hover\\:to-pink-100:hover{--gradient-to-color:#fff5f7!important}}@media (min-width:960px){.md\\:hover\\:to-pink-200:hover{--gradient-to-color:#fed7e2!important}}@media (min-width:960px){.md\\:hover\\:to-pink-300:hover{--gradient-to-color:#fbb6ce!important}}@media (min-width:960px){.md\\:hover\\:to-pink-400:hover{--gradient-to-color:#f687b3!important}}@media (min-width:960px){.md\\:hover\\:to-pink-500:hover{--gradient-to-color:#ed64a6!important}}@media (min-width:960px){.md\\:hover\\:to-pink-600:hover{--gradient-to-color:#d53f8c!important}}@media (min-width:960px){.md\\:hover\\:to-pink-700:hover{--gradient-to-color:#b83280!important}}@media (min-width:960px){.md\\:hover\\:to-pink-800:hover{--gradient-to-color:#97266d!important}}@media (min-width:960px){.md\\:hover\\:to-pink-900:hover{--gradient-to-color:#702459!important}}@media (min-width:960px){.md\\:focus\\:from-transparent:focus{--gradient-from-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:960px){.md\\:focus\\:from-current:focus{--gradient-from-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:960px){.md\\:focus\\:from-black:focus{--gradient-from-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:960px){.md\\:focus\\:from-white:focus{--gradient-from-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:960px){.md\\:focus\\:from-gray-100:focus{--gradient-from-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:960px){.md\\:focus\\:from-gray-200:focus{--gradient-from-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:960px){.md\\:focus\\:from-gray-300:focus{--gradient-from-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:960px){.md\\:focus\\:from-gray-400:focus{--gradient-from-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:960px){.md\\:focus\\:from-gray-500:focus{--gradient-from-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:960px){.md\\:focus\\:from-gray-600:focus{--gradient-from-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:960px){.md\\:focus\\:from-gray-700:focus{--gradient-from-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:960px){.md\\:focus\\:from-gray-800:focus{--gradient-from-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:960px){.md\\:focus\\:from-gray-900:focus{--gradient-from-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:960px){.md\\:focus\\:from-red-100:focus{--gradient-from-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:960px){.md\\:focus\\:from-red-200:focus{--gradient-from-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:960px){.md\\:focus\\:from-red-300:focus{--gradient-from-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:960px){.md\\:focus\\:from-red-400:focus{--gradient-from-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:960px){.md\\:focus\\:from-red-500:focus{--gradient-from-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:960px){.md\\:focus\\:from-red-600:focus{--gradient-from-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:960px){.md\\:focus\\:from-red-700:focus{--gradient-from-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:960px){.md\\:focus\\:from-red-800:focus{--gradient-from-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:960px){.md\\:focus\\:from-red-900:focus{--gradient-from-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:960px){.md\\:focus\\:from-orange-100:focus{--gradient-from-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:960px){.md\\:focus\\:from-orange-200:focus{--gradient-from-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:960px){.md\\:focus\\:from-orange-300:focus{--gradient-from-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:960px){.md\\:focus\\:from-orange-400:focus{--gradient-from-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:960px){.md\\:focus\\:from-orange-500:focus{--gradient-from-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:960px){.md\\:focus\\:from-orange-600:focus{--gradient-from-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:960px){.md\\:focus\\:from-orange-700:focus{--gradient-from-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:960px){.md\\:focus\\:from-orange-800:focus{--gradient-from-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:960px){.md\\:focus\\:from-orange-900:focus{--gradient-from-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:960px){.md\\:focus\\:from-yellow-100:focus{--gradient-from-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:960px){.md\\:focus\\:from-yellow-200:focus{--gradient-from-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:960px){.md\\:focus\\:from-yellow-300:focus{--gradient-from-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:960px){.md\\:focus\\:from-yellow-400:focus{--gradient-from-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:960px){.md\\:focus\\:from-yellow-500:focus{--gradient-from-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:960px){.md\\:focus\\:from-yellow-600:focus{--gradient-from-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:960px){.md\\:focus\\:from-yellow-700:focus{--gradient-from-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:960px){.md\\:focus\\:from-yellow-800:focus{--gradient-from-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:960px){.md\\:focus\\:from-yellow-900:focus{--gradient-from-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:960px){.md\\:focus\\:from-green-100:focus{--gradient-from-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:960px){.md\\:focus\\:from-green-200:focus{--gradient-from-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:960px){.md\\:focus\\:from-green-300:focus{--gradient-from-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:960px){.md\\:focus\\:from-green-400:focus{--gradient-from-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:960px){.md\\:focus\\:from-green-500:focus{--gradient-from-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:960px){.md\\:focus\\:from-green-600:focus{--gradient-from-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:960px){.md\\:focus\\:from-green-700:focus{--gradient-from-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:960px){.md\\:focus\\:from-green-800:focus{--gradient-from-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:960px){.md\\:focus\\:from-green-900:focus{--gradient-from-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:960px){.md\\:focus\\:from-teal-100:focus{--gradient-from-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:960px){.md\\:focus\\:from-teal-200:focus{--gradient-from-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:960px){.md\\:focus\\:from-teal-300:focus{--gradient-from-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:960px){.md\\:focus\\:from-teal-400:focus{--gradient-from-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:960px){.md\\:focus\\:from-teal-500:focus{--gradient-from-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:960px){.md\\:focus\\:from-teal-600:focus{--gradient-from-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:960px){.md\\:focus\\:from-teal-700:focus{--gradient-from-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:960px){.md\\:focus\\:from-teal-800:focus{--gradient-from-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:960px){.md\\:focus\\:from-teal-900:focus{--gradient-from-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:960px){.md\\:focus\\:from-blue-100:focus{--gradient-from-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:960px){.md\\:focus\\:from-blue-200:focus{--gradient-from-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:960px){.md\\:focus\\:from-blue-300:focus{--gradient-from-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:960px){.md\\:focus\\:from-blue-400:focus{--gradient-from-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:960px){.md\\:focus\\:from-blue-500:focus{--gradient-from-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:960px){.md\\:focus\\:from-blue-600:focus{--gradient-from-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:960px){.md\\:focus\\:from-blue-700:focus{--gradient-from-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:960px){.md\\:focus\\:from-blue-800:focus{--gradient-from-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:960px){.md\\:focus\\:from-blue-900:focus{--gradient-from-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:960px){.md\\:focus\\:from-indigo-100:focus{--gradient-from-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:960px){.md\\:focus\\:from-indigo-200:focus{--gradient-from-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:960px){.md\\:focus\\:from-indigo-300:focus{--gradient-from-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:960px){.md\\:focus\\:from-indigo-400:focus{--gradient-from-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:960px){.md\\:focus\\:from-indigo-500:focus{--gradient-from-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:960px){.md\\:focus\\:from-indigo-600:focus{--gradient-from-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:960px){.md\\:focus\\:from-indigo-700:focus{--gradient-from-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:960px){.md\\:focus\\:from-indigo-800:focus{--gradient-from-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:960px){.md\\:focus\\:from-indigo-900:focus{--gradient-from-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:960px){.md\\:focus\\:from-purple-100:focus{--gradient-from-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:960px){.md\\:focus\\:from-purple-200:focus{--gradient-from-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:960px){.md\\:focus\\:from-purple-300:focus{--gradient-from-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:960px){.md\\:focus\\:from-purple-400:focus{--gradient-from-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:960px){.md\\:focus\\:from-purple-500:focus{--gradient-from-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:960px){.md\\:focus\\:from-purple-600:focus{--gradient-from-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:960px){.md\\:focus\\:from-purple-700:focus{--gradient-from-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:960px){.md\\:focus\\:from-purple-800:focus{--gradient-from-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:960px){.md\\:focus\\:from-purple-900:focus{--gradient-from-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:960px){.md\\:focus\\:from-pink-100:focus{--gradient-from-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:960px){.md\\:focus\\:from-pink-200:focus{--gradient-from-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:960px){.md\\:focus\\:from-pink-300:focus{--gradient-from-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:960px){.md\\:focus\\:from-pink-400:focus{--gradient-from-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:960px){.md\\:focus\\:from-pink-500:focus{--gradient-from-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:960px){.md\\:focus\\:from-pink-600:focus{--gradient-from-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:960px){.md\\:focus\\:from-pink-700:focus{--gradient-from-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:960px){.md\\:focus\\:from-pink-800:focus{--gradient-from-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:960px){.md\\:focus\\:from-pink-900:focus{--gradient-from-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:960px){.md\\:focus\\:via-transparent:focus{--gradient-via-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:960px){.md\\:focus\\:via-current:focus{--gradient-via-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:960px){.md\\:focus\\:via-black:focus{--gradient-via-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:960px){.md\\:focus\\:via-white:focus{--gradient-via-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:960px){.md\\:focus\\:via-gray-100:focus{--gradient-via-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:960px){.md\\:focus\\:via-gray-200:focus{--gradient-via-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:960px){.md\\:focus\\:via-gray-300:focus{--gradient-via-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:960px){.md\\:focus\\:via-gray-400:focus{--gradient-via-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:960px){.md\\:focus\\:via-gray-500:focus{--gradient-via-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:960px){.md\\:focus\\:via-gray-600:focus{--gradient-via-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:960px){.md\\:focus\\:via-gray-700:focus{--gradient-via-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:960px){.md\\:focus\\:via-gray-800:focus{--gradient-via-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:960px){.md\\:focus\\:via-gray-900:focus{--gradient-via-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:960px){.md\\:focus\\:via-red-100:focus{--gradient-via-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:960px){.md\\:focus\\:via-red-200:focus{--gradient-via-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:960px){.md\\:focus\\:via-red-300:focus{--gradient-via-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:960px){.md\\:focus\\:via-red-400:focus{--gradient-via-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:960px){.md\\:focus\\:via-red-500:focus{--gradient-via-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:960px){.md\\:focus\\:via-red-600:focus{--gradient-via-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:960px){.md\\:focus\\:via-red-700:focus{--gradient-via-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:960px){.md\\:focus\\:via-red-800:focus{--gradient-via-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:960px){.md\\:focus\\:via-red-900:focus{--gradient-via-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:960px){.md\\:focus\\:via-orange-100:focus{--gradient-via-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:960px){.md\\:focus\\:via-orange-200:focus{--gradient-via-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:960px){.md\\:focus\\:via-orange-300:focus{--gradient-via-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:960px){.md\\:focus\\:via-orange-400:focus{--gradient-via-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:960px){.md\\:focus\\:via-orange-500:focus{--gradient-via-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:960px){.md\\:focus\\:via-orange-600:focus{--gradient-via-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:960px){.md\\:focus\\:via-orange-700:focus{--gradient-via-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:960px){.md\\:focus\\:via-orange-800:focus{--gradient-via-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:960px){.md\\:focus\\:via-orange-900:focus{--gradient-via-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:960px){.md\\:focus\\:via-yellow-100:focus{--gradient-via-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:960px){.md\\:focus\\:via-yellow-200:focus{--gradient-via-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:960px){.md\\:focus\\:via-yellow-300:focus{--gradient-via-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:960px){.md\\:focus\\:via-yellow-400:focus{--gradient-via-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:960px){.md\\:focus\\:via-yellow-500:focus{--gradient-via-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:960px){.md\\:focus\\:via-yellow-600:focus{--gradient-via-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:960px){.md\\:focus\\:via-yellow-700:focus{--gradient-via-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:960px){.md\\:focus\\:via-yellow-800:focus{--gradient-via-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:960px){.md\\:focus\\:via-yellow-900:focus{--gradient-via-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:960px){.md\\:focus\\:via-green-100:focus{--gradient-via-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:960px){.md\\:focus\\:via-green-200:focus{--gradient-via-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:960px){.md\\:focus\\:via-green-300:focus{--gradient-via-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:960px){.md\\:focus\\:via-green-400:focus{--gradient-via-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:960px){.md\\:focus\\:via-green-500:focus{--gradient-via-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:960px){.md\\:focus\\:via-green-600:focus{--gradient-via-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:960px){.md\\:focus\\:via-green-700:focus{--gradient-via-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:960px){.md\\:focus\\:via-green-800:focus{--gradient-via-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:960px){.md\\:focus\\:via-green-900:focus{--gradient-via-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:960px){.md\\:focus\\:via-teal-100:focus{--gradient-via-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:960px){.md\\:focus\\:via-teal-200:focus{--gradient-via-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:960px){.md\\:focus\\:via-teal-300:focus{--gradient-via-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:960px){.md\\:focus\\:via-teal-400:focus{--gradient-via-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:960px){.md\\:focus\\:via-teal-500:focus{--gradient-via-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:960px){.md\\:focus\\:via-teal-600:focus{--gradient-via-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:960px){.md\\:focus\\:via-teal-700:focus{--gradient-via-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:960px){.md\\:focus\\:via-teal-800:focus{--gradient-via-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:960px){.md\\:focus\\:via-teal-900:focus{--gradient-via-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:960px){.md\\:focus\\:via-blue-100:focus{--gradient-via-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:960px){.md\\:focus\\:via-blue-200:focus{--gradient-via-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:960px){.md\\:focus\\:via-blue-300:focus{--gradient-via-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:960px){.md\\:focus\\:via-blue-400:focus{--gradient-via-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:960px){.md\\:focus\\:via-blue-500:focus{--gradient-via-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:960px){.md\\:focus\\:via-blue-600:focus{--gradient-via-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:960px){.md\\:focus\\:via-blue-700:focus{--gradient-via-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:960px){.md\\:focus\\:via-blue-800:focus{--gradient-via-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:960px){.md\\:focus\\:via-blue-900:focus{--gradient-via-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:960px){.md\\:focus\\:via-indigo-100:focus{--gradient-via-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:960px){.md\\:focus\\:via-indigo-200:focus{--gradient-via-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:960px){.md\\:focus\\:via-indigo-300:focus{--gradient-via-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:960px){.md\\:focus\\:via-indigo-400:focus{--gradient-via-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:960px){.md\\:focus\\:via-indigo-500:focus{--gradient-via-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:960px){.md\\:focus\\:via-indigo-600:focus{--gradient-via-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:960px){.md\\:focus\\:via-indigo-700:focus{--gradient-via-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:960px){.md\\:focus\\:via-indigo-800:focus{--gradient-via-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:960px){.md\\:focus\\:via-indigo-900:focus{--gradient-via-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:960px){.md\\:focus\\:via-purple-100:focus{--gradient-via-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:960px){.md\\:focus\\:via-purple-200:focus{--gradient-via-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:960px){.md\\:focus\\:via-purple-300:focus{--gradient-via-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:960px){.md\\:focus\\:via-purple-400:focus{--gradient-via-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:960px){.md\\:focus\\:via-purple-500:focus{--gradient-via-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:960px){.md\\:focus\\:via-purple-600:focus{--gradient-via-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:960px){.md\\:focus\\:via-purple-700:focus{--gradient-via-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:960px){.md\\:focus\\:via-purple-800:focus{--gradient-via-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:960px){.md\\:focus\\:via-purple-900:focus{--gradient-via-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:960px){.md\\:focus\\:via-pink-100:focus{--gradient-via-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:960px){.md\\:focus\\:via-pink-200:focus{--gradient-via-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:960px){.md\\:focus\\:via-pink-300:focus{--gradient-via-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:960px){.md\\:focus\\:via-pink-400:focus{--gradient-via-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:960px){.md\\:focus\\:via-pink-500:focus{--gradient-via-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:960px){.md\\:focus\\:via-pink-600:focus{--gradient-via-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:960px){.md\\:focus\\:via-pink-700:focus{--gradient-via-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:960px){.md\\:focus\\:via-pink-800:focus{--gradient-via-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:960px){.md\\:focus\\:via-pink-900:focus{--gradient-via-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:960px){.md\\:focus\\:to-transparent:focus{--gradient-to-color:transparent!important}}@media (min-width:960px){.md\\:focus\\:to-current:focus{--gradient-to-color:currentColor!important}}@media (min-width:960px){.md\\:focus\\:to-black:focus{--gradient-to-color:#000!important}}@media (min-width:960px){.md\\:focus\\:to-white:focus{--gradient-to-color:#fff!important}}@media (min-width:960px){.md\\:focus\\:to-gray-100:focus{--gradient-to-color:#f7fafc!important}}@media (min-width:960px){.md\\:focus\\:to-gray-200:focus{--gradient-to-color:#edf2f7!important}}@media (min-width:960px){.md\\:focus\\:to-gray-300:focus{--gradient-to-color:#e2e8f0!important}}@media (min-width:960px){.md\\:focus\\:to-gray-400:focus{--gradient-to-color:#cbd5e0!important}}@media (min-width:960px){.md\\:focus\\:to-gray-500:focus{--gradient-to-color:#a0aec0!important}}@media (min-width:960px){.md\\:focus\\:to-gray-600:focus{--gradient-to-color:#718096!important}}@media (min-width:960px){.md\\:focus\\:to-gray-700:focus{--gradient-to-color:#4a5568!important}}@media (min-width:960px){.md\\:focus\\:to-gray-800:focus{--gradient-to-color:#2d3748!important}}@media (min-width:960px){.md\\:focus\\:to-gray-900:focus{--gradient-to-color:#1a202c!important}}@media (min-width:960px){.md\\:focus\\:to-red-100:focus{--gradient-to-color:#fff5f5!important}}@media (min-width:960px){.md\\:focus\\:to-red-200:focus{--gradient-to-color:#fed7d7!important}}@media (min-width:960px){.md\\:focus\\:to-red-300:focus{--gradient-to-color:#feb2b2!important}}@media (min-width:960px){.md\\:focus\\:to-red-400:focus{--gradient-to-color:#fc8181!important}}@media (min-width:960px){.md\\:focus\\:to-red-500:focus{--gradient-to-color:#f56565!important}}@media (min-width:960px){.md\\:focus\\:to-red-600:focus{--gradient-to-color:#e53e3e!important}}@media (min-width:960px){.md\\:focus\\:to-red-700:focus{--gradient-to-color:#c53030!important}}@media (min-width:960px){.md\\:focus\\:to-red-800:focus{--gradient-to-color:#9b2c2c!important}}@media (min-width:960px){.md\\:focus\\:to-red-900:focus{--gradient-to-color:#742a2a!important}}@media (min-width:960px){.md\\:focus\\:to-orange-100:focus{--gradient-to-color:#fffaf0!important}}@media (min-width:960px){.md\\:focus\\:to-orange-200:focus{--gradient-to-color:#feebc8!important}}@media (min-width:960px){.md\\:focus\\:to-orange-300:focus{--gradient-to-color:#fbd38d!important}}@media (min-width:960px){.md\\:focus\\:to-orange-400:focus{--gradient-to-color:#f6ad55!important}}@media (min-width:960px){.md\\:focus\\:to-orange-500:focus{--gradient-to-color:#ed8936!important}}@media (min-width:960px){.md\\:focus\\:to-orange-600:focus{--gradient-to-color:#dd6b20!important}}@media (min-width:960px){.md\\:focus\\:to-orange-700:focus{--gradient-to-color:#c05621!important}}@media (min-width:960px){.md\\:focus\\:to-orange-800:focus{--gradient-to-color:#9c4221!important}}@media (min-width:960px){.md\\:focus\\:to-orange-900:focus{--gradient-to-color:#7b341e!important}}@media (min-width:960px){.md\\:focus\\:to-yellow-100:focus{--gradient-to-color:ivory!important}}@media (min-width:960px){.md\\:focus\\:to-yellow-200:focus{--gradient-to-color:#fefcbf!important}}@media (min-width:960px){.md\\:focus\\:to-yellow-300:focus{--gradient-to-color:#faf089!important}}@media (min-width:960px){.md\\:focus\\:to-yellow-400:focus{--gradient-to-color:#f6e05e!important}}@media (min-width:960px){.md\\:focus\\:to-yellow-500:focus{--gradient-to-color:#ecc94b!important}}@media (min-width:960px){.md\\:focus\\:to-yellow-600:focus{--gradient-to-color:#d69e2e!important}}@media (min-width:960px){.md\\:focus\\:to-yellow-700:focus{--gradient-to-color:#b7791f!important}}@media (min-width:960px){.md\\:focus\\:to-yellow-800:focus{--gradient-to-color:#975a16!important}}@media (min-width:960px){.md\\:focus\\:to-yellow-900:focus{--gradient-to-color:#744210!important}}@media (min-width:960px){.md\\:focus\\:to-green-100:focus{--gradient-to-color:#f0fff4!important}}@media (min-width:960px){.md\\:focus\\:to-green-200:focus{--gradient-to-color:#c6f6d5!important}}@media (min-width:960px){.md\\:focus\\:to-green-300:focus{--gradient-to-color:#9ae6b4!important}}@media (min-width:960px){.md\\:focus\\:to-green-400:focus{--gradient-to-color:#68d391!important}}@media (min-width:960px){.md\\:focus\\:to-green-500:focus{--gradient-to-color:#48bb78!important}}@media (min-width:960px){.md\\:focus\\:to-green-600:focus{--gradient-to-color:#38a169!important}}@media (min-width:960px){.md\\:focus\\:to-green-700:focus{--gradient-to-color:#2f855a!important}}@media (min-width:960px){.md\\:focus\\:to-green-800:focus{--gradient-to-color:#276749!important}}@media (min-width:960px){.md\\:focus\\:to-green-900:focus{--gradient-to-color:#22543d!important}}@media (min-width:960px){.md\\:focus\\:to-teal-100:focus{--gradient-to-color:#e6fffa!important}}@media (min-width:960px){.md\\:focus\\:to-teal-200:focus{--gradient-to-color:#b2f5ea!important}}@media (min-width:960px){.md\\:focus\\:to-teal-300:focus{--gradient-to-color:#81e6d9!important}}@media (min-width:960px){.md\\:focus\\:to-teal-400:focus{--gradient-to-color:#4fd1c5!important}}@media (min-width:960px){.md\\:focus\\:to-teal-500:focus{--gradient-to-color:#38b2ac!important}}@media (min-width:960px){.md\\:focus\\:to-teal-600:focus{--gradient-to-color:#319795!important}}@media (min-width:960px){.md\\:focus\\:to-teal-700:focus{--gradient-to-color:#2c7a7b!important}}@media (min-width:960px){.md\\:focus\\:to-teal-800:focus{--gradient-to-color:#285e61!important}}@media (min-width:960px){.md\\:focus\\:to-teal-900:focus{--gradient-to-color:#234e52!important}}@media (min-width:960px){.md\\:focus\\:to-blue-100:focus{--gradient-to-color:#ebf8ff!important}}@media (min-width:960px){.md\\:focus\\:to-blue-200:focus{--gradient-to-color:#bee3f8!important}}@media (min-width:960px){.md\\:focus\\:to-blue-300:focus{--gradient-to-color:#90cdf4!important}}@media (min-width:960px){.md\\:focus\\:to-blue-400:focus{--gradient-to-color:#63b3ed!important}}@media (min-width:960px){.md\\:focus\\:to-blue-500:focus{--gradient-to-color:#4299e1!important}}@media (min-width:960px){.md\\:focus\\:to-blue-600:focus{--gradient-to-color:#3182ce!important}}@media (min-width:960px){.md\\:focus\\:to-blue-700:focus{--gradient-to-color:#2b6cb0!important}}@media (min-width:960px){.md\\:focus\\:to-blue-800:focus{--gradient-to-color:#2c5282!important}}@media (min-width:960px){.md\\:focus\\:to-blue-900:focus{--gradient-to-color:#2a4365!important}}@media (min-width:960px){.md\\:focus\\:to-indigo-100:focus{--gradient-to-color:#ebf4ff!important}}@media (min-width:960px){.md\\:focus\\:to-indigo-200:focus{--gradient-to-color:#c3dafe!important}}@media (min-width:960px){.md\\:focus\\:to-indigo-300:focus{--gradient-to-color:#a3bffa!important}}@media (min-width:960px){.md\\:focus\\:to-indigo-400:focus{--gradient-to-color:#7f9cf5!important}}@media (min-width:960px){.md\\:focus\\:to-indigo-500:focus{--gradient-to-color:#667eea!important}}@media (min-width:960px){.md\\:focus\\:to-indigo-600:focus{--gradient-to-color:#5a67d8!important}}@media (min-width:960px){.md\\:focus\\:to-indigo-700:focus{--gradient-to-color:#4c51bf!important}}@media (min-width:960px){.md\\:focus\\:to-indigo-800:focus{--gradient-to-color:#434190!important}}@media (min-width:960px){.md\\:focus\\:to-indigo-900:focus{--gradient-to-color:#3c366b!important}}@media (min-width:960px){.md\\:focus\\:to-purple-100:focus{--gradient-to-color:#faf5ff!important}}@media (min-width:960px){.md\\:focus\\:to-purple-200:focus{--gradient-to-color:#e9d8fd!important}}@media (min-width:960px){.md\\:focus\\:to-purple-300:focus{--gradient-to-color:#d6bcfa!important}}@media (min-width:960px){.md\\:focus\\:to-purple-400:focus{--gradient-to-color:#b794f4!important}}@media (min-width:960px){.md\\:focus\\:to-purple-500:focus{--gradient-to-color:#9f7aea!important}}@media (min-width:960px){.md\\:focus\\:to-purple-600:focus{--gradient-to-color:#805ad5!important}}@media (min-width:960px){.md\\:focus\\:to-purple-700:focus{--gradient-to-color:#6b46c1!important}}@media (min-width:960px){.md\\:focus\\:to-purple-800:focus{--gradient-to-color:#553c9a!important}}@media (min-width:960px){.md\\:focus\\:to-purple-900:focus{--gradient-to-color:#44337a!important}}@media (min-width:960px){.md\\:focus\\:to-pink-100:focus{--gradient-to-color:#fff5f7!important}}@media (min-width:960px){.md\\:focus\\:to-pink-200:focus{--gradient-to-color:#fed7e2!important}}@media (min-width:960px){.md\\:focus\\:to-pink-300:focus{--gradient-to-color:#fbb6ce!important}}@media (min-width:960px){.md\\:focus\\:to-pink-400:focus{--gradient-to-color:#f687b3!important}}@media (min-width:960px){.md\\:focus\\:to-pink-500:focus{--gradient-to-color:#ed64a6!important}}@media (min-width:960px){.md\\:focus\\:to-pink-600:focus{--gradient-to-color:#d53f8c!important}}@media (min-width:960px){.md\\:focus\\:to-pink-700:focus{--gradient-to-color:#b83280!important}}@media (min-width:960px){.md\\:focus\\:to-pink-800:focus{--gradient-to-color:#97266d!important}}@media (min-width:960px){.md\\:focus\\:to-pink-900:focus{--gradient-to-color:#702459!important}}@media (min-width:960px){.md\\:bg-opacity-0{--bg-opacity:0!important}}@media (min-width:960px){.md\\:bg-opacity-25{--bg-opacity:0.25!important}}@media (min-width:960px){.md\\:bg-opacity-50{--bg-opacity:0.5!important}}@media (min-width:960px){.md\\:bg-opacity-75{--bg-opacity:0.75!important}}@media (min-width:960px){.md\\:bg-opacity-100{--bg-opacity:1!important}}@media (min-width:960px){.md\\:hover\\:bg-opacity-0:hover{--bg-opacity:0!important}}@media (min-width:960px){.md\\:hover\\:bg-opacity-25:hover{--bg-opacity:0.25!important}}@media (min-width:960px){.md\\:hover\\:bg-opacity-50:hover{--bg-opacity:0.5!important}}@media (min-width:960px){.md\\:hover\\:bg-opacity-75:hover{--bg-opacity:0.75!important}}@media (min-width:960px){.md\\:hover\\:bg-opacity-100:hover{--bg-opacity:1!important}}@media (min-width:960px){.md\\:focus\\:bg-opacity-0:focus{--bg-opacity:0!important}}@media (min-width:960px){.md\\:focus\\:bg-opacity-25:focus{--bg-opacity:0.25!important}}@media (min-width:960px){.md\\:focus\\:bg-opacity-50:focus{--bg-opacity:0.5!important}}@media (min-width:960px){.md\\:focus\\:bg-opacity-75:focus{--bg-opacity:0.75!important}}@media (min-width:960px){.md\\:focus\\:bg-opacity-100:focus{--bg-opacity:1!important}}@media (min-width:960px){.md\\:bg-bottom{background-position:bottom!important}}@media (min-width:960px){.md\\:bg-center{background-position:50%!important}}@media (min-width:960px){.md\\:bg-left{background-position:0!important}}@media (min-width:960px){.md\\:bg-left-bottom{background-position:0 100%!important}}@media (min-width:960px){.md\\:bg-left-top{background-position:0 0!important}}@media (min-width:960px){.md\\:bg-right{background-position:100%!important}}@media (min-width:960px){.md\\:bg-right-bottom{background-position:100% 100%!important}}@media (min-width:960px){.md\\:bg-right-top{background-position:100% 0!important}}@media (min-width:960px){.md\\:bg-top{background-position:top!important}}@media (min-width:960px){.md\\:bg-repeat{background-repeat:repeat!important}}@media (min-width:960px){.md\\:bg-no-repeat{background-repeat:no-repeat!important}}@media (min-width:960px){.md\\:bg-repeat-x{background-repeat:repeat-x!important}}@media (min-width:960px){.md\\:bg-repeat-y{background-repeat:repeat-y!important}}@media (min-width:960px){.md\\:bg-repeat-round{background-repeat:round!important}}@media (min-width:960px){.md\\:bg-repeat-space{background-repeat:space!important}}@media (min-width:960px){.md\\:bg-auto{background-size:auto!important}}@media (min-width:960px){.md\\:bg-cover{background-size:cover!important}}@media (min-width:960px){.md\\:bg-contain{background-size:contain!important}}@media (min-width:960px){.md\\:border-collapse{border-collapse:collapse!important}}@media (min-width:960px){.md\\:border-separate{border-collapse:initial!important}}@media (min-width:960px){.md\\:border-opacity-0{--border-opacity:0!important}}@media (min-width:960px){.md\\:border-opacity-25{--border-opacity:0.25!important}}@media (min-width:960px){.md\\:border-opacity-50{--border-opacity:0.5!important}}@media (min-width:960px){.md\\:border-opacity-75{--border-opacity:0.75!important}}@media (min-width:960px){.md\\:border-opacity-100{--border-opacity:1!important}}@media (min-width:960px){.md\\:hover\\:border-opacity-0:hover{--border-opacity:0!important}}@media (min-width:960px){.md\\:hover\\:border-opacity-25:hover{--border-opacity:0.25!important}}@media (min-width:960px){.md\\:hover\\:border-opacity-50:hover{--border-opacity:0.5!important}}@media (min-width:960px){.md\\:hover\\:border-opacity-75:hover{--border-opacity:0.75!important}}@media (min-width:960px){.md\\:hover\\:border-opacity-100:hover{--border-opacity:1!important}}@media (min-width:960px){.md\\:focus\\:border-opacity-0:focus{--border-opacity:0!important}}@media (min-width:960px){.md\\:focus\\:border-opacity-25:focus{--border-opacity:0.25!important}}@media (min-width:960px){.md\\:focus\\:border-opacity-50:focus{--border-opacity:0.5!important}}@media (min-width:960px){.md\\:focus\\:border-opacity-75:focus{--border-opacity:0.75!important}}@media (min-width:960px){.md\\:focus\\:border-opacity-100:focus{--border-opacity:1!important}}@media (min-width:960px){.md\\:rounded-none{border-radius:0!important}}@media (min-width:960px){.md\\:rounded-sm{border-radius:.125rem!important}}@media (min-width:960px){.md\\:rounded{border-radius:.25rem!important}}@media (min-width:960px){.md\\:rounded-md{border-radius:.375rem!important}}@media (min-width:960px){.md\\:rounded-lg{border-radius:.5rem!important}}@media (min-width:960px){.md\\:rounded-xl{border-radius:.75rem!important}}@media (min-width:960px){.md\\:rounded-2xl{border-radius:1rem!important}}@media (min-width:960px){.md\\:rounded-3xl{border-radius:1.5rem!important}}@media (min-width:960px){.md\\:rounded-full{border-radius:9999px!important}}@media (min-width:960px){.md\\:rounded-t-none{border-top-left-radius:0!important;border-top-right-radius:0!important}}@media (min-width:960px){.md\\:rounded-r-none{border-top-right-radius:0!important;border-bottom-right-radius:0!important}}@media (min-width:960px){.md\\:rounded-b-none{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}}@media (min-width:960px){.md\\:rounded-l-none{border-top-left-radius:0!important;border-bottom-left-radius:0!important}}@media (min-width:960px){.md\\:rounded-t-sm{border-top-left-radius:.125rem!important}}@media (min-width:960px){.md\\:rounded-r-sm,.md\\:rounded-t-sm{border-top-right-radius:.125rem!important}}@media (min-width:960px){.md\\:rounded-b-sm,.md\\:rounded-r-sm{border-bottom-right-radius:.125rem!important}}@media (min-width:960px){.md\\:rounded-b-sm,.md\\:rounded-l-sm{border-bottom-left-radius:.125rem!important}.md\\:rounded-l-sm{border-top-left-radius:.125rem!important}}@media (min-width:960px){.md\\:rounded-t{border-top-left-radius:.25rem!important}}@media (min-width:960px){.md\\:rounded-r,.md\\:rounded-t{border-top-right-radius:.25rem!important}}@media (min-width:960px){.md\\:rounded-b,.md\\:rounded-r{border-bottom-right-radius:.25rem!important}}@media (min-width:960px){.md\\:rounded-b,.md\\:rounded-l{border-bottom-left-radius:.25rem!important}.md\\:rounded-l{border-top-left-radius:.25rem!important}}@media (min-width:960px){.md\\:rounded-t-md{border-top-left-radius:.375rem!important}}@media (min-width:960px){.md\\:rounded-r-md,.md\\:rounded-t-md{border-top-right-radius:.375rem!important}}@media (min-width:960px){.md\\:rounded-b-md,.md\\:rounded-r-md{border-bottom-right-radius:.375rem!important}}@media (min-width:960px){.md\\:rounded-b-md,.md\\:rounded-l-md{border-bottom-left-radius:.375rem!important}.md\\:rounded-l-md{border-top-left-radius:.375rem!important}}@media (min-width:960px){.md\\:rounded-t-lg{border-top-left-radius:.5rem!important}}@media (min-width:960px){.md\\:rounded-r-lg,.md\\:rounded-t-lg{border-top-right-radius:.5rem!important}}@media (min-width:960px){.md\\:rounded-b-lg,.md\\:rounded-r-lg{border-bottom-right-radius:.5rem!important}}@media (min-width:960px){.md\\:rounded-b-lg,.md\\:rounded-l-lg{border-bottom-left-radius:.5rem!important}.md\\:rounded-l-lg{border-top-left-radius:.5rem!important}}@media (min-width:960px){.md\\:rounded-t-xl{border-top-left-radius:.75rem!important}}@media (min-width:960px){.md\\:rounded-r-xl,.md\\:rounded-t-xl{border-top-right-radius:.75rem!important}}@media (min-width:960px){.md\\:rounded-b-xl,.md\\:rounded-r-xl{border-bottom-right-radius:.75rem!important}}@media (min-width:960px){.md\\:rounded-b-xl,.md\\:rounded-l-xl{border-bottom-left-radius:.75rem!important}.md\\:rounded-l-xl{border-top-left-radius:.75rem!important}}@media (min-width:960px){.md\\:rounded-t-2xl{border-top-left-radius:1rem!important}}@media (min-width:960px){.md\\:rounded-r-2xl,.md\\:rounded-t-2xl{border-top-right-radius:1rem!important}}@media (min-width:960px){.md\\:rounded-b-2xl,.md\\:rounded-r-2xl{border-bottom-right-radius:1rem!important}}@media (min-width:960px){.md\\:rounded-b-2xl,.md\\:rounded-l-2xl{border-bottom-left-radius:1rem!important}.md\\:rounded-l-2xl{border-top-left-radius:1rem!important}}@media (min-width:960px){.md\\:rounded-t-3xl{border-top-left-radius:1.5rem!important}}@media (min-width:960px){.md\\:rounded-r-3xl,.md\\:rounded-t-3xl{border-top-right-radius:1.5rem!important}}@media (min-width:960px){.md\\:rounded-b-3xl,.md\\:rounded-r-3xl{border-bottom-right-radius:1.5rem!important}}@media (min-width:960px){.md\\:rounded-b-3xl,.md\\:rounded-l-3xl{border-bottom-left-radius:1.5rem!important}.md\\:rounded-l-3xl{border-top-left-radius:1.5rem!important}}@media (min-width:960px){.md\\:rounded-t-full{border-top-left-radius:9999px!important}}@media (min-width:960px){.md\\:rounded-r-full,.md\\:rounded-t-full{border-top-right-radius:9999px!important}}@media (min-width:960px){.md\\:rounded-b-full,.md\\:rounded-r-full{border-bottom-right-radius:9999px!important}}@media (min-width:960px){.md\\:rounded-b-full,.md\\:rounded-l-full{border-bottom-left-radius:9999px!important}.md\\:rounded-l-full{border-top-left-radius:9999px!important}}@media (min-width:960px){.md\\:rounded-tl-none{border-top-left-radius:0!important}}@media (min-width:960px){.md\\:rounded-tr-none{border-top-right-radius:0!important}}@media (min-width:960px){.md\\:rounded-br-none{border-bottom-right-radius:0!important}}@media (min-width:960px){.md\\:rounded-bl-none{border-bottom-left-radius:0!important}}@media (min-width:960px){.md\\:rounded-tl-sm{border-top-left-radius:.125rem!important}}@media (min-width:960px){.md\\:rounded-tr-sm{border-top-right-radius:.125rem!important}}@media (min-width:960px){.md\\:rounded-br-sm{border-bottom-right-radius:.125rem!important}}@media (min-width:960px){.md\\:rounded-bl-sm{border-bottom-left-radius:.125rem!important}}@media (min-width:960px){.md\\:rounded-tl{border-top-left-radius:.25rem!important}}@media (min-width:960px){.md\\:rounded-tr{border-top-right-radius:.25rem!important}}@media (min-width:960px){.md\\:rounded-br{border-bottom-right-radius:.25rem!important}}@media (min-width:960px){.md\\:rounded-bl{border-bottom-left-radius:.25rem!important}}@media (min-width:960px){.md\\:rounded-tl-md{border-top-left-radius:.375rem!important}}@media (min-width:960px){.md\\:rounded-tr-md{border-top-right-radius:.375rem!important}}@media (min-width:960px){.md\\:rounded-br-md{border-bottom-right-radius:.375rem!important}}@media (min-width:960px){.md\\:rounded-bl-md{border-bottom-left-radius:.375rem!important}}@media (min-width:960px){.md\\:rounded-tl-lg{border-top-left-radius:.5rem!important}}@media (min-width:960px){.md\\:rounded-tr-lg{border-top-right-radius:.5rem!important}}@media (min-width:960px){.md\\:rounded-br-lg{border-bottom-right-radius:.5rem!important}}@media (min-width:960px){.md\\:rounded-bl-lg{border-bottom-left-radius:.5rem!important}}@media (min-width:960px){.md\\:rounded-tl-xl{border-top-left-radius:.75rem!important}}@media (min-width:960px){.md\\:rounded-tr-xl{border-top-right-radius:.75rem!important}}@media (min-width:960px){.md\\:rounded-br-xl{border-bottom-right-radius:.75rem!important}}@media (min-width:960px){.md\\:rounded-bl-xl{border-bottom-left-radius:.75rem!important}}@media (min-width:960px){.md\\:rounded-tl-2xl{border-top-left-radius:1rem!important}}@media (min-width:960px){.md\\:rounded-tr-2xl{border-top-right-radius:1rem!important}}@media (min-width:960px){.md\\:rounded-br-2xl{border-bottom-right-radius:1rem!important}}@media (min-width:960px){.md\\:rounded-bl-2xl{border-bottom-left-radius:1rem!important}}@media (min-width:960px){.md\\:rounded-tl-3xl{border-top-left-radius:1.5rem!important}}@media (min-width:960px){.md\\:rounded-tr-3xl{border-top-right-radius:1.5rem!important}}@media (min-width:960px){.md\\:rounded-br-3xl{border-bottom-right-radius:1.5rem!important}}@media (min-width:960px){.md\\:rounded-bl-3xl{border-bottom-left-radius:1.5rem!important}}@media (min-width:960px){.md\\:rounded-tl-full{border-top-left-radius:9999px!important}}@media (min-width:960px){.md\\:rounded-tr-full{border-top-right-radius:9999px!important}}@media (min-width:960px){.md\\:rounded-br-full{border-bottom-right-radius:9999px!important}}@media (min-width:960px){.md\\:rounded-bl-full{border-bottom-left-radius:9999px!important}}@media (min-width:960px){.md\\:border-solid{border-style:solid!important}}@media (min-width:960px){.md\\:border-dashed{border-style:dashed!important}}@media (min-width:960px){.md\\:border-dotted{border-style:dotted!important}}@media (min-width:960px){.md\\:border-double{border-style:double!important}}@media (min-width:960px){.md\\:border-none{border-style:none!important}}@media (min-width:960px){.md\\:border-0{border-width:0!important}}@media (min-width:960px){.md\\:border-2{border-width:2px!important}}@media (min-width:960px){.md\\:border-4{border-width:4px!important}}@media (min-width:960px){.md\\:border-8{border-width:8px!important}}@media (min-width:960px){.md\\:border{border-width:1px!important}}@media (min-width:960px){.md\\:border-t-0{border-top-width:0!important}}@media (min-width:960px){.md\\:border-r-0{border-right-width:0!important}}@media (min-width:960px){.md\\:border-b-0{border-bottom-width:0!important}}@media (min-width:960px){.md\\:border-l-0{border-left-width:0!important}}@media (min-width:960px){.md\\:border-t-2{border-top-width:2px!important}}@media (min-width:960px){.md\\:border-r-2{border-right-width:2px!important}}@media (min-width:960px){.md\\:border-b-2{border-bottom-width:2px!important}}@media (min-width:960px){.md\\:border-l-2{border-left-width:2px!important}}@media (min-width:960px){.md\\:border-t-4{border-top-width:4px!important}}@media (min-width:960px){.md\\:border-r-4{border-right-width:4px!important}}@media (min-width:960px){.md\\:border-b-4{border-bottom-width:4px!important}}@media (min-width:960px){.md\\:border-l-4{border-left-width:4px!important}}@media (min-width:960px){.md\\:border-t-8{border-top-width:8px!important}}@media (min-width:960px){.md\\:border-r-8{border-right-width:8px!important}}@media (min-width:960px){.md\\:border-b-8{border-bottom-width:8px!important}}@media (min-width:960px){.md\\:border-l-8{border-left-width:8px!important}}@media (min-width:960px){.md\\:border-t{border-top-width:1px!important}}@media (min-width:960px){.md\\:border-r{border-right-width:1px!important}}@media (min-width:960px){.md\\:border-b{border-bottom-width:1px!important}}@media (min-width:960px){.md\\:border-l{border-left-width:1px!important}}@media (min-width:960px){.md\\:box-border{box-sizing:border-box!important}}@media (min-width:960px){.md\\:box-content{box-sizing:initial!important}}@media (min-width:960px){.md\\:cursor-crosshair{cursor:crosshair!important}}@media (min-width:960px){.md\\:cursor-zoom-in{cursor:zoom-in!important}}@media (min-width:960px){.md\\:block{display:block!important}}@media (min-width:960px){.md\\:inline-block{display:inline-block!important}}@media (min-width:960px){.md\\:inline{display:inline!important}}@media (min-width:960px){.md\\:flex{display:flex!important}}@media (min-width:960px){.md\\:inline-flex{display:inline-flex!important}}@media (min-width:960px){.md\\:table{display:table!important}}@media (min-width:960px){.md\\:table-caption{display:table-caption!important}}@media (min-width:960px){.md\\:table-cell{display:table-cell!important}}@media (min-width:960px){.md\\:table-column{display:table-column!important}}@media (min-width:960px){.md\\:table-column-group{display:table-column-group!important}}@media (min-width:960px){.md\\:table-footer-group{display:table-footer-group!important}}@media (min-width:960px){.md\\:table-header-group{display:table-header-group!important}}@media (min-width:960px){.md\\:table-row-group{display:table-row-group!important}}@media (min-width:960px){.md\\:table-row{display:table-row!important}}@media (min-width:960px){.md\\:flow-root{display:flow-root!important}}@media (min-width:960px){.md\\:grid{display:grid!important}}@media (min-width:960px){.md\\:inline-grid{display:inline-grid!important}}@media (min-width:960px){.md\\:contents{display:contents!important}}@media (min-width:960px){.md\\:hidden{display:none!important}}@media (min-width:960px){.md\\:flex-row{flex-direction:row!important}}@media (min-width:960px){.md\\:flex-row-reverse{flex-direction:row-reverse!important}}@media (min-width:960px){.md\\:flex-col{flex-direction:column!important}}@media (min-width:960px){.md\\:flex-col-reverse{flex-direction:column-reverse!important}}@media (min-width:960px){.md\\:flex-wrap{flex-wrap:wrap!important}}@media (min-width:960px){.md\\:flex-wrap-reverse{flex-wrap:wrap-reverse!important}}@media (min-width:960px){.md\\:flex-no-wrap{flex-wrap:nowrap!important}}@media (min-width:960px){.md\\:place-items-auto{place-items:auto!important}}@media (min-width:960px){.md\\:place-items-start{place-items:start!important}}@media (min-width:960px){.md\\:place-items-end{place-items:end!important}}@media (min-width:960px){.md\\:place-items-center{place-items:center!important}}@media (min-width:960px){.md\\:place-items-stretch{place-items:stretch!important}}@media (min-width:960px){.md\\:place-content-center{place-content:center!important}}@media (min-width:960px){.md\\:place-content-start{place-content:start!important}}@media (min-width:960px){.md\\:place-content-end{place-content:end!important}}@media (min-width:960px){.md\\:place-content-between{place-content:space-between!important}}@media (min-width:960px){.md\\:place-content-around{place-content:space-around!important}}@media (min-width:960px){.md\\:place-content-evenly{place-content:space-evenly!important}}@media (min-width:960px){.md\\:place-content-stretch{place-content:stretch!important}}@media (min-width:960px){.md\\:place-self-auto{place-self:auto!important}}@media (min-width:960px){.md\\:place-self-start{place-self:start!important}}@media (min-width:960px){.md\\:place-self-end{place-self:end!important}}@media (min-width:960px){.md\\:place-self-center{place-self:center!important}}@media (min-width:960px){.md\\:place-self-stretch{place-self:stretch!important}}@media (min-width:960px){.md\\:items-start{align-items:flex-start!important}}@media (min-width:960px){.md\\:items-end{align-items:flex-end!important}}@media (min-width:960px){.md\\:items-center{align-items:center!important}}@media (min-width:960px){.md\\:items-baseline{align-items:baseline!important}}@media (min-width:960px){.md\\:items-stretch{align-items:stretch!important}}@media (min-width:960px){.md\\:content-center{align-content:center!important}}@media (min-width:960px){.md\\:content-start{align-content:flex-start!important}}@media (min-width:960px){.md\\:content-end{align-content:flex-end!important}}@media (min-width:960px){.md\\:content-between{align-content:space-between!important}}@media (min-width:960px){.md\\:content-around{align-content:space-around!important}}@media (min-width:960px){.md\\:content-evenly{align-content:space-evenly!important}}@media (min-width:960px){.md\\:self-auto{align-self:auto!important}}@media (min-width:960px){.md\\:self-start{align-self:flex-start!important}}@media (min-width:960px){.md\\:self-end{align-self:flex-end!important}}@media (min-width:960px){.md\\:self-center{align-self:center!important}}@media (min-width:960px){.md\\:self-stretch{align-self:stretch!important}}@media (min-width:960px){.md\\:justify-items-auto{justify-items:auto!important}}@media (min-width:960px){.md\\:justify-items-start{justify-items:start!important}}@media (min-width:960px){.md\\:justify-items-end{justify-items:end!important}}@media (min-width:960px){.md\\:justify-items-center{justify-items:center!important}}@media (min-width:960px){.md\\:justify-items-stretch{justify-items:stretch!important}}@media (min-width:960px){.md\\:justify-start{justify-content:flex-start!important}}@media (min-width:960px){.md\\:justify-end{justify-content:flex-end!important}}@media (min-width:960px){.md\\:justify-center{justify-content:center!important}}@media (min-width:960px){.md\\:justify-between{justify-content:space-between!important}}@media (min-width:960px){.md\\:justify-around{justify-content:space-around!important}}@media (min-width:960px){.md\\:justify-evenly{justify-content:space-evenly!important}}@media (min-width:960px){.md\\:justify-self-auto{justify-self:auto!important}}@media (min-width:960px){.md\\:justify-self-start{justify-self:start!important}}@media (min-width:960px){.md\\:justify-self-end{justify-self:end!important}}@media (min-width:960px){.md\\:justify-self-center{justify-self:center!important}}@media (min-width:960px){.md\\:justify-self-stretch{justify-self:stretch!important}}@media (min-width:960px){.md\\:flex-1{flex:1 1 0%!important}}@media (min-width:960px){.md\\:flex-auto{flex:1 1 auto!important}}@media (min-width:960px){.md\\:flex-initial{flex:0 1 auto!important}}@media (min-width:960px){.md\\:flex-none{flex:none!important}}@media (min-width:960px){.md\\:flex-grow-0{flex-grow:0!important}}@media (min-width:960px){.md\\:flex-grow{flex-grow:1!important}}@media (min-width:960px){.md\\:flex-shrink-0{flex-shrink:0!important}}@media (min-width:960px){.md\\:flex-shrink{flex-shrink:1!important}}@media (min-width:960px){.md\\:order-1{order:1!important}}@media (min-width:960px){.md\\:order-2{order:2!important}}@media (min-width:960px){.md\\:order-3{order:3!important}}@media (min-width:960px){.md\\:order-4{order:4!important}}@media (min-width:960px){.md\\:order-5{order:5!important}}@media (min-width:960px){.md\\:order-6{order:6!important}}@media (min-width:960px){.md\\:order-7{order:7!important}}@media (min-width:960px){.md\\:order-8{order:8!important}}@media (min-width:960px){.md\\:order-9{order:9!important}}@media (min-width:960px){.md\\:order-10{order:10!important}}@media (min-width:960px){.md\\:order-11{order:11!important}}@media (min-width:960px){.md\\:order-12{order:12!important}}@media (min-width:960px){.md\\:order-first{order:-9999!important}}@media (min-width:960px){.md\\:order-last{order:9999!important}}@media (min-width:960px){.md\\:order-none{order:0!important}}@media (min-width:960px){.md\\:float-right{float:right!important}}@media (min-width:960px){.md\\:float-left{float:left!important}}@media (min-width:960px){.md\\:float-none{float:none!important}}@media (min-width:960px){.md\\:clearfix:after{content:\"\"!important;display:table!important;clear:both!important}}@media (min-width:960px){.md\\:clear-left{clear:left!important}}@media (min-width:960px){.md\\:clear-right{clear:right!important}}@media (min-width:960px){.md\\:clear-both{clear:both!important}}@media (min-width:960px){.md\\:clear-none{clear:none!important}}@media (min-width:960px){.md\\:font-sans{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji!important}}@media (min-width:960px){.md\\:font-serif{font-family:Georgia,Cambria,Times New Roman,Times,serif!important}}@media (min-width:960px){.md\\:font-mono{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}}@media (min-width:960px){.md\\:font-hairline{font-weight:100!important}}@media (min-width:960px){.md\\:font-thin{font-weight:200!important}}@media (min-width:960px){.md\\:font-light{font-weight:300!important}}@media (min-width:960px){.md\\:font-normal{font-weight:400!important}}@media (min-width:960px){.md\\:font-medium{font-weight:500!important}}@media (min-width:960px){.md\\:font-semibold{font-weight:600!important}}@media (min-width:960px){.md\\:font-bold{font-weight:700!important}}@media (min-width:960px){.md\\:font-extrabold{font-weight:800!important}}@media (min-width:960px){.md\\:font-black{font-weight:900!important}}@media (min-width:960px){.md\\:hover\\:font-hairline:hover{font-weight:100!important}}@media (min-width:960px){.md\\:hover\\:font-thin:hover{font-weight:200!important}}@media (min-width:960px){.md\\:hover\\:font-light:hover{font-weight:300!important}}@media (min-width:960px){.md\\:hover\\:font-normal:hover{font-weight:400!important}}@media (min-width:960px){.md\\:hover\\:font-medium:hover{font-weight:500!important}}@media (min-width:960px){.md\\:hover\\:font-semibold:hover{font-weight:600!important}}@media (min-width:960px){.md\\:hover\\:font-bold:hover{font-weight:700!important}}@media (min-width:960px){.md\\:hover\\:font-extrabold:hover{font-weight:800!important}}@media (min-width:960px){.md\\:hover\\:font-black:hover{font-weight:900!important}}@media (min-width:960px){.md\\:focus\\:font-hairline:focus{font-weight:100!important}}@media (min-width:960px){.md\\:focus\\:font-thin:focus{font-weight:200!important}}@media (min-width:960px){.md\\:focus\\:font-light:focus{font-weight:300!important}}@media (min-width:960px){.md\\:focus\\:font-normal:focus{font-weight:400!important}}@media (min-width:960px){.md\\:focus\\:font-medium:focus{font-weight:500!important}}@media (min-width:960px){.md\\:focus\\:font-semibold:focus{font-weight:600!important}}@media (min-width:960px){.md\\:focus\\:font-bold:focus{font-weight:700!important}}@media (min-width:960px){.md\\:focus\\:font-extrabold:focus{font-weight:800!important}}@media (min-width:960px){.md\\:focus\\:font-black:focus{font-weight:900!important}}@media (min-width:960px){.md\\:h-0{height:0!important}}@media (min-width:960px){.md\\:h-1{height:.25rem!important}}@media (min-width:960px){.md\\:h-2{height:.5rem!important}}@media (min-width:960px){.md\\:h-3{height:.75rem!important}}@media (min-width:960px){.md\\:h-4{height:1rem!important}}@media (min-width:960px){.md\\:h-5{height:1.25rem!important}}@media (min-width:960px){.md\\:h-6{height:1.5rem!important}}@media (min-width:960px){.md\\:h-8{height:2rem!important}}@media (min-width:960px){.md\\:h-10{height:2.5rem!important}}@media (min-width:960px){.md\\:h-12{height:3rem!important}}@media (min-width:960px){.md\\:h-16{height:4rem!important}}@media (min-width:960px){.md\\:h-20{height:5rem!important}}@media (min-width:960px){.md\\:h-24{height:6rem!important}}@media (min-width:960px){.md\\:h-32{height:8rem!important}}@media (min-width:960px){.md\\:h-40{height:10rem!important}}@media (min-width:960px){.md\\:h-48{height:12rem!important}}@media (min-width:960px){.md\\:h-56{height:14rem!important}}@media (min-width:960px){.md\\:h-64{height:16rem!important}}@media (min-width:960px){.md\\:h-auto{height:auto!important}}@media (min-width:960px){.md\\:h-px{height:1px!important}}@media (min-width:960px){.md\\:h-full{height:100%!important}}@media (min-width:960px){.md\\:h-screen{height:100vh!important}}@media (min-width:960px){.md\\:text-xs{font-size:.75rem!important}}@media (min-width:960px){.md\\:text-sm{font-size:.875rem!important}}@media (min-width:960px){.md\\:text-base{font-size:1rem!important}}@media (min-width:960px){.md\\:text-lg{font-size:1.125rem!important}}@media (min-width:960px){.md\\:text-xl{font-size:1.25rem!important}}@media (min-width:960px){.md\\:text-2xl{font-size:1.5rem!important}}@media (min-width:960px){.md\\:text-3xl{font-size:1.875rem!important}}@media (min-width:960px){.md\\:text-4xl{font-size:2.25rem!important}}@media (min-width:960px){.md\\:text-5xl{font-size:3rem!important}}@media (min-width:960px){.md\\:text-6xl{font-size:4rem!important}}@media (min-width:960px){.md\\:leading-3{line-height:.75rem!important}}@media (min-width:960px){.md\\:leading-4{line-height:1rem!important}}@media (min-width:960px){.md\\:leading-5{line-height:1.25rem!important}}@media (min-width:960px){.md\\:leading-6{line-height:1.5rem!important}}@media (min-width:960px){.md\\:leading-7{line-height:1.75rem!important}}@media (min-width:960px){.md\\:leading-8{line-height:2rem!important}}@media (min-width:960px){.md\\:leading-9{line-height:2.25rem!important}}@media (min-width:960px){.md\\:leading-10{line-height:2.5rem!important}}@media (min-width:960px){.md\\:leading-none{line-height:1!important}}@media (min-width:960px){.md\\:leading-tight{line-height:1.25!important}}@media (min-width:960px){.md\\:leading-snug{line-height:1.375!important}}@media (min-width:960px){.md\\:leading-normal{line-height:1.5!important}}@media (min-width:960px){.md\\:leading-relaxed{line-height:1.625!important}}@media (min-width:960px){.md\\:leading-loose{line-height:2!important}}@media (min-width:960px){.md\\:list-inside{list-style-position:inside!important}}@media (min-width:960px){.md\\:list-outside{list-style-position:outside!important}}@media (min-width:960px){.md\\:list-none{list-style-type:none!important}}@media (min-width:960px){.md\\:list-disc{list-style-type:disc!important}}@media (min-width:960px){.md\\:list-decimal{list-style-type:decimal!important}}@media (min-width:960px){.md\\:m-0{margin:0!important}}@media (min-width:960px){.md\\:m-1{margin:.25rem!important}}@media (min-width:960px){.md\\:m-2{margin:.5rem!important}}@media (min-width:960px){.md\\:m-3{margin:.75rem!important}}@media (min-width:960px){.md\\:m-4{margin:1rem!important}}@media (min-width:960px){.md\\:m-5{margin:1.25rem!important}}@media (min-width:960px){.md\\:m-6{margin:1.5rem!important}}@media (min-width:960px){.md\\:m-8{margin:2rem!important}}@media (min-width:960px){.md\\:m-10{margin:2.5rem!important}}@media (min-width:960px){.md\\:m-12{margin:3rem!important}}@media (min-width:960px){.md\\:m-16{margin:4rem!important}}@media (min-width:960px){.md\\:m-20{margin:5rem!important}}@media (min-width:960px){.md\\:m-24{margin:6rem!important}}@media (min-width:960px){.md\\:m-32{margin:8rem!important}}@media (min-width:960px){.md\\:m-40{margin:10rem!important}}@media (min-width:960px){.md\\:m-48{margin:12rem!important}}@media (min-width:960px){.md\\:m-56{margin:14rem!important}}@media (min-width:960px){.md\\:m-64{margin:16rem!important}}@media (min-width:960px){.md\\:m-auto{margin:auto!important}}@media (min-width:960px){.md\\:m-px{margin:1px!important}}@media (min-width:960px){.md\\:-m-1{margin:-.25rem!important}}@media (min-width:960px){.md\\:-m-2{margin:-.5rem!important}}@media (min-width:960px){.md\\:-m-3{margin:-.75rem!important}}@media (min-width:960px){.md\\:-m-4{margin:-1rem!important}}@media (min-width:960px){.md\\:-m-5{margin:-1.25rem!important}}@media (min-width:960px){.md\\:-m-6{margin:-1.5rem!important}}@media (min-width:960px){.md\\:-m-8{margin:-2rem!important}}@media (min-width:960px){.md\\:-m-10{margin:-2.5rem!important}}@media (min-width:960px){.md\\:-m-12{margin:-3rem!important}}@media (min-width:960px){.md\\:-m-16{margin:-4rem!important}}@media (min-width:960px){.md\\:-m-20{margin:-5rem!important}}@media (min-width:960px){.md\\:-m-24{margin:-6rem!important}}@media (min-width:960px){.md\\:-m-32{margin:-8rem!important}}@media (min-width:960px){.md\\:-m-40{margin:-10rem!important}}@media (min-width:960px){.md\\:-m-48{margin:-12rem!important}}@media (min-width:960px){.md\\:-m-56{margin:-14rem!important}}@media (min-width:960px){.md\\:-m-64{margin:-16rem!important}}@media (min-width:960px){.md\\:-m-px{margin:-1px!important}}@media (min-width:960px){.md\\:my-0{margin-top:0!important;margin-bottom:0!important}}@media (min-width:960px){.md\\:mx-0{margin-left:0!important;margin-right:0!important}}@media (min-width:960px){.md\\:my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}}@media (min-width:960px){.md\\:mx-1{margin-left:.25rem!important;margin-right:.25rem!important}}@media (min-width:960px){.md\\:my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}}@media (min-width:960px){.md\\:mx-2{margin-left:.5rem!important;margin-right:.5rem!important}}@media (min-width:960px){.md\\:my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}}@media (min-width:960px){.md\\:mx-3{margin-left:.75rem!important;margin-right:.75rem!important}}@media (min-width:960px){.md\\:my-4{margin-top:1rem!important;margin-bottom:1rem!important}}@media (min-width:960px){.md\\:mx-4{margin-left:1rem!important;margin-right:1rem!important}}@media (min-width:960px){.md\\:my-5{margin-top:1.25rem!important;margin-bottom:1.25rem!important}}@media (min-width:960px){.md\\:mx-5{margin-left:1.25rem!important;margin-right:1.25rem!important}}@media (min-width:960px){.md\\:my-6{margin-top:1.5rem!important;margin-bottom:1.5rem!important}}@media (min-width:960px){.md\\:mx-6{margin-left:1.5rem!important;margin-right:1.5rem!important}}@media (min-width:960px){.md\\:my-8{margin-top:2rem!important;margin-bottom:2rem!important}}@media (min-width:960px){.md\\:mx-8{margin-left:2rem!important;margin-right:2rem!important}}@media (min-width:960px){.md\\:my-10{margin-top:2.5rem!important;margin-bottom:2.5rem!important}}@media (min-width:960px){.md\\:mx-10{margin-left:2.5rem!important;margin-right:2.5rem!important}}@media (min-width:960px){.md\\:my-12{margin-top:3rem!important;margin-bottom:3rem!important}}@media (min-width:960px){.md\\:mx-12{margin-left:3rem!important;margin-right:3rem!important}}@media (min-width:960px){.md\\:my-16{margin-top:4rem!important;margin-bottom:4rem!important}}@media (min-width:960px){.md\\:mx-16{margin-left:4rem!important;margin-right:4rem!important}}@media (min-width:960px){.md\\:my-20{margin-top:5rem!important;margin-bottom:5rem!important}}@media (min-width:960px){.md\\:mx-20{margin-left:5rem!important;margin-right:5rem!important}}@media (min-width:960px){.md\\:my-24{margin-top:6rem!important;margin-bottom:6rem!important}}@media (min-width:960px){.md\\:mx-24{margin-left:6rem!important;margin-right:6rem!important}}@media (min-width:960px){.md\\:my-32{margin-top:8rem!important;margin-bottom:8rem!important}}@media (min-width:960px){.md\\:mx-32{margin-left:8rem!important;margin-right:8rem!important}}@media (min-width:960px){.md\\:my-40{margin-top:10rem!important;margin-bottom:10rem!important}}@media (min-width:960px){.md\\:mx-40{margin-left:10rem!important;margin-right:10rem!important}}@media (min-width:960px){.md\\:my-48{margin-top:12rem!important;margin-bottom:12rem!important}}@media (min-width:960px){.md\\:mx-48{margin-left:12rem!important;margin-right:12rem!important}}@media (min-width:960px){.md\\:my-56{margin-top:14rem!important;margin-bottom:14rem!important}}@media (min-width:960px){.md\\:mx-56{margin-left:14rem!important;margin-right:14rem!important}}@media (min-width:960px){.md\\:my-64{margin-top:16rem!important;margin-bottom:16rem!important}}@media (min-width:960px){.md\\:mx-64{margin-left:16rem!important;margin-right:16rem!important}}@media (min-width:960px){.md\\:my-auto{margin-top:auto!important;margin-bottom:auto!important}}@media (min-width:960px){.md\\:mx-auto{margin-left:auto!important;margin-right:auto!important}}@media (min-width:960px){.md\\:my-px{margin-top:1px!important;margin-bottom:1px!important}}@media (min-width:960px){.md\\:mx-px{margin-left:1px!important;margin-right:1px!important}}@media (min-width:960px){.md\\:-my-1{margin-top:-.25rem!important;margin-bottom:-.25rem!important}}@media (min-width:960px){.md\\:-mx-1{margin-left:-.25rem!important;margin-right:-.25rem!important}}@media (min-width:960px){.md\\:-my-2{margin-top:-.5rem!important;margin-bottom:-.5rem!important}}@media (min-width:960px){.md\\:-mx-2{margin-left:-.5rem!important;margin-right:-.5rem!important}}@media (min-width:960px){.md\\:-my-3{margin-top:-.75rem!important;margin-bottom:-.75rem!important}}@media (min-width:960px){.md\\:-mx-3{margin-left:-.75rem!important;margin-right:-.75rem!important}}@media (min-width:960px){.md\\:-my-4{margin-top:-1rem!important;margin-bottom:-1rem!important}}@media (min-width:960px){.md\\:-mx-4{margin-left:-1rem!important;margin-right:-1rem!important}}@media (min-width:960px){.md\\:-my-5{margin-top:-1.25rem!important;margin-bottom:-1.25rem!important}}@media (min-width:960px){.md\\:-mx-5{margin-left:-1.25rem!important;margin-right:-1.25rem!important}}@media (min-width:960px){.md\\:-my-6{margin-top:-1.5rem!important;margin-bottom:-1.5rem!important}}@media (min-width:960px){.md\\:-mx-6{margin-left:-1.5rem!important;margin-right:-1.5rem!important}}@media (min-width:960px){.md\\:-my-8{margin-top:-2rem!important;margin-bottom:-2rem!important}}@media (min-width:960px){.md\\:-mx-8{margin-left:-2rem!important;margin-right:-2rem!important}}@media (min-width:960px){.md\\:-my-10{margin-top:-2.5rem!important;margin-bottom:-2.5rem!important}}@media (min-width:960px){.md\\:-mx-10{margin-left:-2.5rem!important;margin-right:-2.5rem!important}}@media (min-width:960px){.md\\:-my-12{margin-top:-3rem!important;margin-bottom:-3rem!important}}@media (min-width:960px){.md\\:-mx-12{margin-left:-3rem!important;margin-right:-3rem!important}}@media (min-width:960px){.md\\:-my-16{margin-top:-4rem!important;margin-bottom:-4rem!important}}@media (min-width:960px){.md\\:-mx-16{margin-left:-4rem!important;margin-right:-4rem!important}}@media (min-width:960px){.md\\:-my-20{margin-top:-5rem!important;margin-bottom:-5rem!important}}@media (min-width:960px){.md\\:-mx-20{margin-left:-5rem!important;margin-right:-5rem!important}}@media (min-width:960px){.md\\:-my-24{margin-top:-6rem!important;margin-bottom:-6rem!important}}@media (min-width:960px){.md\\:-mx-24{margin-left:-6rem!important;margin-right:-6rem!important}}@media (min-width:960px){.md\\:-my-32{margin-top:-8rem!important;margin-bottom:-8rem!important}}@media (min-width:960px){.md\\:-mx-32{margin-left:-8rem!important;margin-right:-8rem!important}}@media (min-width:960px){.md\\:-my-40{margin-top:-10rem!important;margin-bottom:-10rem!important}}@media (min-width:960px){.md\\:-mx-40{margin-left:-10rem!important;margin-right:-10rem!important}}@media (min-width:960px){.md\\:-my-48{margin-top:-12rem!important;margin-bottom:-12rem!important}}@media (min-width:960px){.md\\:-mx-48{margin-left:-12rem!important;margin-right:-12rem!important}}@media (min-width:960px){.md\\:-my-56{margin-top:-14rem!important;margin-bottom:-14rem!important}}@media (min-width:960px){.md\\:-mx-56{margin-left:-14rem!important;margin-right:-14rem!important}}@media (min-width:960px){.md\\:-my-64{margin-top:-16rem!important;margin-bottom:-16rem!important}}@media (min-width:960px){.md\\:-mx-64{margin-left:-16rem!important;margin-right:-16rem!important}}@media (min-width:960px){.md\\:-my-px{margin-top:-1px!important;margin-bottom:-1px!important}}@media (min-width:960px){.md\\:-mx-px{margin-left:-1px!important;margin-right:-1px!important}}@media (min-width:960px){.md\\:mt-0{margin-top:0!important}}@media (min-width:960px){.md\\:mr-0{margin-right:0!important}}@media (min-width:960px){.md\\:mb-0{margin-bottom:0!important}}@media (min-width:960px){.md\\:ml-0{margin-left:0!important}}@media (min-width:960px){.md\\:mt-1{margin-top:.25rem!important}}@media (min-width:960px){.md\\:mr-1{margin-right:.25rem!important}}@media (min-width:960px){.md\\:mb-1{margin-bottom:.25rem!important}}@media (min-width:960px){.md\\:ml-1{margin-left:.25rem!important}}@media (min-width:960px){.md\\:mt-2{margin-top:.5rem!important}}@media (min-width:960px){.md\\:mr-2{margin-right:.5rem!important}}@media (min-width:960px){.md\\:mb-2{margin-bottom:.5rem!important}}@media (min-width:960px){.md\\:ml-2{margin-left:.5rem!important}}@media (min-width:960px){.md\\:mt-3{margin-top:.75rem!important}}@media (min-width:960px){.md\\:mr-3{margin-right:.75rem!important}}@media (min-width:960px){.md\\:mb-3{margin-bottom:.75rem!important}}@media (min-width:960px){.md\\:ml-3{margin-left:.75rem!important}}@media (min-width:960px){.md\\:mt-4{margin-top:1rem!important}}@media (min-width:960px){.md\\:mr-4{margin-right:1rem!important}}@media (min-width:960px){.md\\:mb-4{margin-bottom:1rem!important}}@media (min-width:960px){.md\\:ml-4{margin-left:1rem!important}}@media (min-width:960px){.md\\:mt-5{margin-top:1.25rem!important}}@media (min-width:960px){.md\\:mr-5{margin-right:1.25rem!important}}@media (min-width:960px){.md\\:mb-5{margin-bottom:1.25rem!important}}@media (min-width:960px){.md\\:ml-5{margin-left:1.25rem!important}}@media (min-width:960px){.md\\:mt-6{margin-top:1.5rem!important}}@media (min-width:960px){.md\\:mr-6{margin-right:1.5rem!important}}@media (min-width:960px){.md\\:mb-6{margin-bottom:1.5rem!important}}@media (min-width:960px){.md\\:ml-6{margin-left:1.5rem!important}}@media (min-width:960px){.md\\:mt-8{margin-top:2rem!important}}@media (min-width:960px){.md\\:mr-8{margin-right:2rem!important}}@media (min-width:960px){.md\\:mb-8{margin-bottom:2rem!important}}@media (min-width:960px){.md\\:ml-8{margin-left:2rem!important}}@media (min-width:960px){.md\\:mt-10{margin-top:2.5rem!important}}@media (min-width:960px){.md\\:mr-10{margin-right:2.5rem!important}}@media (min-width:960px){.md\\:mb-10{margin-bottom:2.5rem!important}}@media (min-width:960px){.md\\:ml-10{margin-left:2.5rem!important}}@media (min-width:960px){.md\\:mt-12{margin-top:3rem!important}}@media (min-width:960px){.md\\:mr-12{margin-right:3rem!important}}@media (min-width:960px){.md\\:mb-12{margin-bottom:3rem!important}}@media (min-width:960px){.md\\:ml-12{margin-left:3rem!important}}@media (min-width:960px){.md\\:mt-16{margin-top:4rem!important}}@media (min-width:960px){.md\\:mr-16{margin-right:4rem!important}}@media (min-width:960px){.md\\:mb-16{margin-bottom:4rem!important}}@media (min-width:960px){.md\\:ml-16{margin-left:4rem!important}}@media (min-width:960px){.md\\:mt-20{margin-top:5rem!important}}@media (min-width:960px){.md\\:mr-20{margin-right:5rem!important}}@media (min-width:960px){.md\\:mb-20{margin-bottom:5rem!important}}@media (min-width:960px){.md\\:ml-20{margin-left:5rem!important}}@media (min-width:960px){.md\\:mt-24{margin-top:6rem!important}}@media (min-width:960px){.md\\:mr-24{margin-right:6rem!important}}@media (min-width:960px){.md\\:mb-24{margin-bottom:6rem!important}}@media (min-width:960px){.md\\:ml-24{margin-left:6rem!important}}@media (min-width:960px){.md\\:mt-32{margin-top:8rem!important}}@media (min-width:960px){.md\\:mr-32{margin-right:8rem!important}}@media (min-width:960px){.md\\:mb-32{margin-bottom:8rem!important}}@media (min-width:960px){.md\\:ml-32{margin-left:8rem!important}}@media (min-width:960px){.md\\:mt-40{margin-top:10rem!important}}@media (min-width:960px){.md\\:mr-40{margin-right:10rem!important}}@media (min-width:960px){.md\\:mb-40{margin-bottom:10rem!important}}@media (min-width:960px){.md\\:ml-40{margin-left:10rem!important}}@media (min-width:960px){.md\\:mt-48{margin-top:12rem!important}}@media (min-width:960px){.md\\:mr-48{margin-right:12rem!important}}@media (min-width:960px){.md\\:mb-48{margin-bottom:12rem!important}}@media (min-width:960px){.md\\:ml-48{margin-left:12rem!important}}@media (min-width:960px){.md\\:mt-56{margin-top:14rem!important}}@media (min-width:960px){.md\\:mr-56{margin-right:14rem!important}}@media (min-width:960px){.md\\:mb-56{margin-bottom:14rem!important}}@media (min-width:960px){.md\\:ml-56{margin-left:14rem!important}}@media (min-width:960px){.md\\:mt-64{margin-top:16rem!important}}@media (min-width:960px){.md\\:mr-64{margin-right:16rem!important}}@media (min-width:960px){.md\\:mb-64{margin-bottom:16rem!important}}@media (min-width:960px){.md\\:ml-64{margin-left:16rem!important}}@media (min-width:960px){.md\\:mt-auto{margin-top:auto!important}}@media (min-width:960px){.md\\:mr-auto{margin-right:auto!important}}@media (min-width:960px){.md\\:mb-auto{margin-bottom:auto!important}}@media (min-width:960px){.md\\:ml-auto{margin-left:auto!important}}@media (min-width:960px){.md\\:mt-px{margin-top:1px!important}}@media (min-width:960px){.md\\:mr-px{margin-right:1px!important}}@media (min-width:960px){.md\\:mb-px{margin-bottom:1px!important}}@media (min-width:960px){.md\\:ml-px{margin-left:1px!important}}@media (min-width:960px){.md\\:-mt-1{margin-top:-.25rem!important}}@media (min-width:960px){.md\\:-mr-1{margin-right:-.25rem!important}}@media (min-width:960px){.md\\:-mb-1{margin-bottom:-.25rem!important}}@media (min-width:960px){.md\\:-ml-1{margin-left:-.25rem!important}}@media (min-width:960px){.md\\:-mt-2{margin-top:-.5rem!important}}@media (min-width:960px){.md\\:-mr-2{margin-right:-.5rem!important}}@media (min-width:960px){.md\\:-mb-2{margin-bottom:-.5rem!important}}@media (min-width:960px){.md\\:-ml-2{margin-left:-.5rem!important}}@media (min-width:960px){.md\\:-mt-3{margin-top:-.75rem!important}}@media (min-width:960px){.md\\:-mr-3{margin-right:-.75rem!important}}@media (min-width:960px){.md\\:-mb-3{margin-bottom:-.75rem!important}}@media (min-width:960px){.md\\:-ml-3{margin-left:-.75rem!important}}@media (min-width:960px){.md\\:-mt-4{margin-top:-1rem!important}}@media (min-width:960px){.md\\:-mr-4{margin-right:-1rem!important}}@media (min-width:960px){.md\\:-mb-4{margin-bottom:-1rem!important}}@media (min-width:960px){.md\\:-ml-4{margin-left:-1rem!important}}@media (min-width:960px){.md\\:-mt-5{margin-top:-1.25rem!important}}@media (min-width:960px){.md\\:-mr-5{margin-right:-1.25rem!important}}@media (min-width:960px){.md\\:-mb-5{margin-bottom:-1.25rem!important}}@media (min-width:960px){.md\\:-ml-5{margin-left:-1.25rem!important}}@media (min-width:960px){.md\\:-mt-6{margin-top:-1.5rem!important}}@media (min-width:960px){.md\\:-mr-6{margin-right:-1.5rem!important}}@media (min-width:960px){.md\\:-mb-6{margin-bottom:-1.5rem!important}}@media (min-width:960px){.md\\:-ml-6{margin-left:-1.5rem!important}}@media (min-width:960px){.md\\:-mt-8{margin-top:-2rem!important}}@media (min-width:960px){.md\\:-mr-8{margin-right:-2rem!important}}@media (min-width:960px){.md\\:-mb-8{margin-bottom:-2rem!important}}@media (min-width:960px){.md\\:-ml-8{margin-left:-2rem!important}}@media (min-width:960px){.md\\:-mt-10{margin-top:-2.5rem!important}}@media (min-width:960px){.md\\:-mr-10{margin-right:-2.5rem!important}}@media (min-width:960px){.md\\:-mb-10{margin-bottom:-2.5rem!important}}@media (min-width:960px){.md\\:-ml-10{margin-left:-2.5rem!important}}@media (min-width:960px){.md\\:-mt-12{margin-top:-3rem!important}}@media (min-width:960px){.md\\:-mr-12{margin-right:-3rem!important}}@media (min-width:960px){.md\\:-mb-12{margin-bottom:-3rem!important}}@media (min-width:960px){.md\\:-ml-12{margin-left:-3rem!important}}@media (min-width:960px){.md\\:-mt-16{margin-top:-4rem!important}}@media (min-width:960px){.md\\:-mr-16{margin-right:-4rem!important}}@media (min-width:960px){.md\\:-mb-16{margin-bottom:-4rem!important}}@media (min-width:960px){.md\\:-ml-16{margin-left:-4rem!important}}@media (min-width:960px){.md\\:-mt-20{margin-top:-5rem!important}}@media (min-width:960px){.md\\:-mr-20{margin-right:-5rem!important}}@media (min-width:960px){.md\\:-mb-20{margin-bottom:-5rem!important}}@media (min-width:960px){.md\\:-ml-20{margin-left:-5rem!important}}@media (min-width:960px){.md\\:-mt-24{margin-top:-6rem!important}}@media (min-width:960px){.md\\:-mr-24{margin-right:-6rem!important}}@media (min-width:960px){.md\\:-mb-24{margin-bottom:-6rem!important}}@media (min-width:960px){.md\\:-ml-24{margin-left:-6rem!important}}@media (min-width:960px){.md\\:-mt-32{margin-top:-8rem!important}}@media (min-width:960px){.md\\:-mr-32{margin-right:-8rem!important}}@media (min-width:960px){.md\\:-mb-32{margin-bottom:-8rem!important}}@media (min-width:960px){.md\\:-ml-32{margin-left:-8rem!important}}@media (min-width:960px){.md\\:-mt-40{margin-top:-10rem!important}}@media (min-width:960px){.md\\:-mr-40{margin-right:-10rem!important}}@media (min-width:960px){.md\\:-mb-40{margin-bottom:-10rem!important}}@media (min-width:960px){.md\\:-ml-40{margin-left:-10rem!important}}@media (min-width:960px){.md\\:-mt-48{margin-top:-12rem!important}}@media (min-width:960px){.md\\:-mr-48{margin-right:-12rem!important}}@media (min-width:960px){.md\\:-mb-48{margin-bottom:-12rem!important}}@media (min-width:960px){.md\\:-ml-48{margin-left:-12rem!important}}@media (min-width:960px){.md\\:-mt-56{margin-top:-14rem!important}}@media (min-width:960px){.md\\:-mr-56{margin-right:-14rem!important}}@media (min-width:960px){.md\\:-mb-56{margin-bottom:-14rem!important}}@media (min-width:960px){.md\\:-ml-56{margin-left:-14rem!important}}@media (min-width:960px){.md\\:-mt-64{margin-top:-16rem!important}}@media (min-width:960px){.md\\:-mr-64{margin-right:-16rem!important}}@media (min-width:960px){.md\\:-mb-64{margin-bottom:-16rem!important}}@media (min-width:960px){.md\\:-ml-64{margin-left:-16rem!important}}@media (min-width:960px){.md\\:-mt-px{margin-top:-1px!important}}@media (min-width:960px){.md\\:-mr-px{margin-right:-1px!important}}@media (min-width:960px){.md\\:-mb-px{margin-bottom:-1px!important}}@media (min-width:960px){.md\\:-ml-px{margin-left:-1px!important}}@media (min-width:960px){.md\\:max-h-full{max-height:100%!important}}@media (min-width:960px){.md\\:max-h-screen{max-height:100vh!important}}@media (min-width:960px){.md\\:max-w-none{max-width:none!important}}@media (min-width:960px){.md\\:max-w-xs{max-width:20rem!important}}@media (min-width:960px){.md\\:max-w-sm{max-width:24rem!important}}@media (min-width:960px){.md\\:max-w-md{max-width:28rem!important}}@media (min-width:960px){.md\\:max-w-lg{max-width:32rem!important}}@media (min-width:960px){.md\\:max-w-xl{max-width:36rem!important}}@media (min-width:960px){.md\\:max-w-2xl{max-width:42rem!important}}@media (min-width:960px){.md\\:max-w-3xl{max-width:48rem!important}}@media (min-width:960px){.md\\:max-w-4xl{max-width:56rem!important}}@media (min-width:960px){.md\\:max-w-5xl{max-width:64rem!important}}@media (min-width:960px){.md\\:max-w-6xl{max-width:72rem!important}}@media (min-width:960px){.md\\:max-w-full{max-width:100%!important}}@media (min-width:960px){.md\\:max-w-screen-xs{max-width:599px!important}}@media (min-width:960px){.md\\:max-w-screen-sm{max-width:600px!important}}@media (min-width:960px){.md\\:max-w-screen-md{max-width:960px!important}}@media (min-width:960px){.md\\:max-w-screen-lg{max-width:1280px!important}}@media (min-width:960px){.md\\:max-w-screen-xl{max-width:1920px!important}}@media (min-width:960px){.md\\:min-h-0{min-height:0!important}}@media (min-width:960px){.md\\:min-h-full{min-height:100%!important}}@media (min-width:960px){.md\\:min-h-screen{min-height:100vh!important}}@media (min-width:960px){.md\\:min-w-0{min-width:0!important}}@media (min-width:960px){.md\\:min-w-full{min-width:100%!important}}@media (min-width:960px){.md\\:object-contain{object-fit:contain!important}}@media (min-width:960px){.md\\:object-cover{object-fit:cover!important}}@media (min-width:960px){.md\\:object-fill{object-fit:fill!important}}@media (min-width:960px){.md\\:object-none{object-fit:none!important}}@media (min-width:960px){.md\\:object-scale-down{object-fit:scale-down!important}}@media (min-width:960px){.md\\:object-bottom{object-position:bottom!important}}@media (min-width:960px){.md\\:object-center{object-position:center!important}}@media (min-width:960px){.md\\:object-left{object-position:left!important}}@media (min-width:960px){.md\\:object-left-bottom{object-position:left bottom!important}}@media (min-width:960px){.md\\:object-left-top{object-position:left top!important}}@media (min-width:960px){.md\\:object-right{object-position:right!important}}@media (min-width:960px){.md\\:object-right-bottom{object-position:right bottom!important}}@media (min-width:960px){.md\\:object-right-top{object-position:right top!important}}@media (min-width:960px){.md\\:object-top{object-position:top!important}}@media (min-width:960px){.md\\:opacity-0{opacity:0!important}}@media (min-width:960px){.md\\:opacity-25{opacity:.25!important}}@media (min-width:960px){.md\\:opacity-50{opacity:.5!important}}@media (min-width:960px){.md\\:opacity-75{opacity:.75!important}}@media (min-width:960px){.md\\:opacity-100{opacity:1!important}}@media (min-width:960px){.md\\:hover\\:opacity-0:hover{opacity:0!important}}@media (min-width:960px){.md\\:hover\\:opacity-25:hover{opacity:.25!important}}@media (min-width:960px){.md\\:hover\\:opacity-50:hover{opacity:.5!important}}@media (min-width:960px){.md\\:hover\\:opacity-75:hover{opacity:.75!important}}@media (min-width:960px){.md\\:hover\\:opacity-100:hover{opacity:1!important}}@media (min-width:960px){.md\\:focus\\:opacity-0:focus{opacity:0!important}}@media (min-width:960px){.md\\:focus\\:opacity-25:focus{opacity:.25!important}}@media (min-width:960px){.md\\:focus\\:opacity-50:focus{opacity:.5!important}}@media (min-width:960px){.md\\:focus\\:opacity-75:focus{opacity:.75!important}}@media (min-width:960px){.md\\:focus\\:opacity-100:focus{opacity:1!important}}@media (min-width:960px){.md\\:overflow-auto{overflow:auto!important}}@media (min-width:960px){.md\\:overflow-hidden{overflow:hidden!important}}@media (min-width:960px){.md\\:overflow-visible{overflow:visible!important}}@media (min-width:960px){.md\\:overflow-scroll{overflow:scroll!important}}@media (min-width:960px){.md\\:overflow-x-auto{overflow-x:auto!important}}@media (min-width:960px){.md\\:overflow-y-auto{overflow-y:auto!important}}@media (min-width:960px){.md\\:overflow-x-hidden{overflow-x:hidden!important}}@media (min-width:960px){.md\\:overflow-y-hidden{overflow-y:hidden!important}}@media (min-width:960px){.md\\:overflow-x-visible{overflow-x:visible!important}}@media (min-width:960px){.md\\:overflow-y-visible{overflow-y:visible!important}}@media (min-width:960px){.md\\:overflow-x-scroll{overflow-x:scroll!important}}@media (min-width:960px){.md\\:overflow-y-scroll{overflow-y:scroll!important}}@media (min-width:960px){.md\\:scrolling-touch{-webkit-overflow-scrolling:touch!important}}@media (min-width:960px){.md\\:scrolling-auto{-webkit-overflow-scrolling:auto!important}}@media (min-width:960px){.md\\:overscroll-auto{overscroll-behavior:auto!important}}@media (min-width:960px){.md\\:overscroll-contain{overscroll-behavior:contain!important}}@media (min-width:960px){.md\\:overscroll-none{overscroll-behavior:none!important}}@media (min-width:960px){.md\\:overscroll-y-auto{overscroll-behavior-y:auto!important}}@media (min-width:960px){.md\\:overscroll-y-contain{overscroll-behavior-y:contain!important}}@media (min-width:960px){.md\\:overscroll-y-none{overscroll-behavior-y:none!important}}@media (min-width:960px){.md\\:overscroll-x-auto{overscroll-behavior-x:auto!important}}@media (min-width:960px){.md\\:overscroll-x-contain{overscroll-behavior-x:contain!important}}@media (min-width:960px){.md\\:overscroll-x-none{overscroll-behavior-x:none!important}}@media (min-width:960px){.md\\:p-0{padding:0!important}}@media (min-width:960px){.md\\:p-1{padding:.25rem!important}}@media (min-width:960px){.md\\:p-2{padding:.5rem!important}}@media (min-width:960px){.md\\:p-3{padding:.75rem!important}}@media (min-width:960px){.md\\:p-4{padding:1rem!important}}@media (min-width:960px){.md\\:p-5{padding:1.25rem!important}}@media (min-width:960px){.md\\:p-6{padding:1.5rem!important}}@media (min-width:960px){.md\\:p-8{padding:2rem!important}}@media (min-width:960px){.md\\:p-10{padding:2.5rem!important}}@media (min-width:960px){.md\\:p-12{padding:3rem!important}}@media (min-width:960px){.md\\:p-16{padding:4rem!important}}@media (min-width:960px){.md\\:p-20{padding:5rem!important}}@media (min-width:960px){.md\\:p-24{padding:6rem!important}}@media (min-width:960px){.md\\:p-32{padding:8rem!important}}@media (min-width:960px){.md\\:p-40{padding:10rem!important}}@media (min-width:960px){.md\\:p-48{padding:12rem!important}}@media (min-width:960px){.md\\:p-56{padding:14rem!important}}@media (min-width:960px){.md\\:p-64{padding:16rem!important}}@media (min-width:960px){.md\\:p-px{padding:1px!important}}@media (min-width:960px){.md\\:py-0{padding-top:0!important;padding-bottom:0!important}}@media (min-width:960px){.md\\:px-0{padding-left:0!important;padding-right:0!important}}@media (min-width:960px){.md\\:py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}}@media (min-width:960px){.md\\:px-1{padding-left:.25rem!important;padding-right:.25rem!important}}@media (min-width:960px){.md\\:py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}}@media (min-width:960px){.md\\:px-2{padding-left:.5rem!important;padding-right:.5rem!important}}@media (min-width:960px){.md\\:py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}}@media (min-width:960px){.md\\:px-3{padding-left:.75rem!important;padding-right:.75rem!important}}@media (min-width:960px){.md\\:py-4{padding-top:1rem!important;padding-bottom:1rem!important}}@media (min-width:960px){.md\\:px-4{padding-left:1rem!important;padding-right:1rem!important}}@media (min-width:960px){.md\\:py-5{padding-top:1.25rem!important;padding-bottom:1.25rem!important}}@media (min-width:960px){.md\\:px-5{padding-left:1.25rem!important;padding-right:1.25rem!important}}@media (min-width:960px){.md\\:py-6{padding-top:1.5rem!important;padding-bottom:1.5rem!important}}@media (min-width:960px){.md\\:px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}}@media (min-width:960px){.md\\:py-8{padding-top:2rem!important;padding-bottom:2rem!important}}@media (min-width:960px){.md\\:px-8{padding-left:2rem!important;padding-right:2rem!important}}@media (min-width:960px){.md\\:py-10{padding-top:2.5rem!important;padding-bottom:2.5rem!important}}@media (min-width:960px){.md\\:px-10{padding-left:2.5rem!important;padding-right:2.5rem!important}}@media (min-width:960px){.md\\:py-12{padding-top:3rem!important;padding-bottom:3rem!important}}@media (min-width:960px){.md\\:px-12{padding-left:3rem!important;padding-right:3rem!important}}@media (min-width:960px){.md\\:py-16{padding-top:4rem!important;padding-bottom:4rem!important}}@media (min-width:960px){.md\\:px-16{padding-left:4rem!important;padding-right:4rem!important}}@media (min-width:960px){.md\\:py-20{padding-top:5rem!important;padding-bottom:5rem!important}}@media (min-width:960px){.md\\:px-20{padding-left:5rem!important;padding-right:5rem!important}}@media (min-width:960px){.md\\:py-24{padding-top:6rem!important;padding-bottom:6rem!important}}@media (min-width:960px){.md\\:px-24{padding-left:6rem!important;padding-right:6rem!important}}@media (min-width:960px){.md\\:py-32{padding-top:8rem!important;padding-bottom:8rem!important}}@media (min-width:960px){.md\\:px-32{padding-left:8rem!important;padding-right:8rem!important}}@media (min-width:960px){.md\\:py-40{padding-top:10rem!important;padding-bottom:10rem!important}}@media (min-width:960px){.md\\:px-40{padding-left:10rem!important;padding-right:10rem!important}}@media (min-width:960px){.md\\:py-48{padding-top:12rem!important;padding-bottom:12rem!important}}@media (min-width:960px){.md\\:px-48{padding-left:12rem!important;padding-right:12rem!important}}@media (min-width:960px){.md\\:py-56{padding-top:14rem!important;padding-bottom:14rem!important}}@media (min-width:960px){.md\\:px-56{padding-left:14rem!important;padding-right:14rem!important}}@media (min-width:960px){.md\\:py-64{padding-top:16rem!important;padding-bottom:16rem!important}}@media (min-width:960px){.md\\:px-64{padding-left:16rem!important;padding-right:16rem!important}}@media (min-width:960px){.md\\:py-px{padding-top:1px!important;padding-bottom:1px!important}}@media (min-width:960px){.md\\:px-px{padding-left:1px!important;padding-right:1px!important}}@media (min-width:960px){.md\\:pt-0{padding-top:0!important}}@media (min-width:960px){.md\\:pr-0{padding-right:0!important}}@media (min-width:960px){.md\\:pb-0{padding-bottom:0!important}}@media (min-width:960px){.md\\:pl-0{padding-left:0!important}}@media (min-width:960px){.md\\:pt-1{padding-top:.25rem!important}}@media (min-width:960px){.md\\:pr-1{padding-right:.25rem!important}}@media (min-width:960px){.md\\:pb-1{padding-bottom:.25rem!important}}@media (min-width:960px){.md\\:pl-1{padding-left:.25rem!important}}@media (min-width:960px){.md\\:pt-2{padding-top:.5rem!important}}@media (min-width:960px){.md\\:pr-2{padding-right:.5rem!important}}@media (min-width:960px){.md\\:pb-2{padding-bottom:.5rem!important}}@media (min-width:960px){.md\\:pl-2{padding-left:.5rem!important}}@media (min-width:960px){.md\\:pt-3{padding-top:.75rem!important}}@media (min-width:960px){.md\\:pr-3{padding-right:.75rem!important}}@media (min-width:960px){.md\\:pb-3{padding-bottom:.75rem!important}}@media (min-width:960px){.md\\:pl-3{padding-left:.75rem!important}}@media (min-width:960px){.md\\:pt-4{padding-top:1rem!important}}@media (min-width:960px){.md\\:pr-4{padding-right:1rem!important}}@media (min-width:960px){.md\\:pb-4{padding-bottom:1rem!important}}@media (min-width:960px){.md\\:pl-4{padding-left:1rem!important}}@media (min-width:960px){.md\\:pt-5{padding-top:1.25rem!important}}@media (min-width:960px){.md\\:pr-5{padding-right:1.25rem!important}}@media (min-width:960px){.md\\:pb-5{padding-bottom:1.25rem!important}}@media (min-width:960px){.md\\:pl-5{padding-left:1.25rem!important}}@media (min-width:960px){.md\\:pt-6{padding-top:1.5rem!important}}@media (min-width:960px){.md\\:pr-6{padding-right:1.5rem!important}}@media (min-width:960px){.md\\:pb-6{padding-bottom:1.5rem!important}}@media (min-width:960px){.md\\:pl-6{padding-left:1.5rem!important}}@media (min-width:960px){.md\\:pt-8{padding-top:2rem!important}}@media (min-width:960px){.md\\:pr-8{padding-right:2rem!important}}@media (min-width:960px){.md\\:pb-8{padding-bottom:2rem!important}}@media (min-width:960px){.md\\:pl-8{padding-left:2rem!important}}@media (min-width:960px){.md\\:pt-10{padding-top:2.5rem!important}}@media (min-width:960px){.md\\:pr-10{padding-right:2.5rem!important}}@media (min-width:960px){.md\\:pb-10{padding-bottom:2.5rem!important}}@media (min-width:960px){.md\\:pl-10{padding-left:2.5rem!important}}@media (min-width:960px){.md\\:pt-12{padding-top:3rem!important}}@media (min-width:960px){.md\\:pr-12{padding-right:3rem!important}}@media (min-width:960px){.md\\:pb-12{padding-bottom:3rem!important}}@media (min-width:960px){.md\\:pl-12{padding-left:3rem!important}}@media (min-width:960px){.md\\:pt-16{padding-top:4rem!important}}@media (min-width:960px){.md\\:pr-16{padding-right:4rem!important}}@media (min-width:960px){.md\\:pb-16{padding-bottom:4rem!important}}@media (min-width:960px){.md\\:pl-16{padding-left:4rem!important}}@media (min-width:960px){.md\\:pt-20{padding-top:5rem!important}}@media (min-width:960px){.md\\:pr-20{padding-right:5rem!important}}@media (min-width:960px){.md\\:pb-20{padding-bottom:5rem!important}}@media (min-width:960px){.md\\:pl-20{padding-left:5rem!important}}@media (min-width:960px){.md\\:pt-24{padding-top:6rem!important}}@media (min-width:960px){.md\\:pr-24{padding-right:6rem!important}}@media (min-width:960px){.md\\:pb-24{padding-bottom:6rem!important}}@media (min-width:960px){.md\\:pl-24{padding-left:6rem!important}}@media (min-width:960px){.md\\:pt-32{padding-top:8rem!important}}@media (min-width:960px){.md\\:pr-32{padding-right:8rem!important}}@media (min-width:960px){.md\\:pb-32{padding-bottom:8rem!important}}@media (min-width:960px){.md\\:pl-32{padding-left:8rem!important}}@media (min-width:960px){.md\\:pt-40{padding-top:10rem!important}}@media (min-width:960px){.md\\:pr-40{padding-right:10rem!important}}@media (min-width:960px){.md\\:pb-40{padding-bottom:10rem!important}}@media (min-width:960px){.md\\:pl-40{padding-left:10rem!important}}@media (min-width:960px){.md\\:pt-48{padding-top:12rem!important}}@media (min-width:960px){.md\\:pr-48{padding-right:12rem!important}}@media (min-width:960px){.md\\:pb-48{padding-bottom:12rem!important}}@media (min-width:960px){.md\\:pl-48{padding-left:12rem!important}}@media (min-width:960px){.md\\:pt-56{padding-top:14rem!important}}@media (min-width:960px){.md\\:pr-56{padding-right:14rem!important}}@media (min-width:960px){.md\\:pb-56{padding-bottom:14rem!important}}@media (min-width:960px){.md\\:pl-56{padding-left:14rem!important}}@media (min-width:960px){.md\\:pt-64{padding-top:16rem!important}}@media (min-width:960px){.md\\:pr-64{padding-right:16rem!important}}@media (min-width:960px){.md\\:pb-64{padding-bottom:16rem!important}}@media (min-width:960px){.md\\:pl-64{padding-left:16rem!important}}@media (min-width:960px){.md\\:pt-px{padding-top:1px!important}}@media (min-width:960px){.md\\:pr-px{padding-right:1px!important}}@media (min-width:960px){.md\\:pb-px{padding-bottom:1px!important}}@media (min-width:960px){.md\\:pl-px{padding-left:1px!important}}@media (min-width:960px){.md\\:placeholder-transparent::placeholder{color:transparent!important}}@media (min-width:960px){.md\\:placeholder-current::placeholder{color:currentColor!important}}@media (min-width:960px){.md\\:placeholder-black::placeholder{--placeholder-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-white::placeholder{--placeholder-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-gray-100::placeholder{--placeholder-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-gray-200::placeholder{--placeholder-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-gray-300::placeholder{--placeholder-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-gray-400::placeholder{--placeholder-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-gray-500::placeholder{--placeholder-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-gray-600::placeholder{--placeholder-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-gray-700::placeholder{--placeholder-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-gray-800::placeholder{--placeholder-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-gray-900::placeholder{--placeholder-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-red-100::placeholder{--placeholder-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-red-200::placeholder{--placeholder-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-red-300::placeholder{--placeholder-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-red-400::placeholder{--placeholder-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-red-500::placeholder{--placeholder-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-red-600::placeholder{--placeholder-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-red-700::placeholder{--placeholder-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-red-800::placeholder{--placeholder-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-red-900::placeholder{--placeholder-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-orange-100::placeholder{--placeholder-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-orange-200::placeholder{--placeholder-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-orange-300::placeholder{--placeholder-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-orange-400::placeholder{--placeholder-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-orange-500::placeholder{--placeholder-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-orange-600::placeholder{--placeholder-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-orange-700::placeholder{--placeholder-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-orange-800::placeholder{--placeholder-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-orange-900::placeholder{--placeholder-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-yellow-100::placeholder{--placeholder-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-yellow-200::placeholder{--placeholder-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-yellow-300::placeholder{--placeholder-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-yellow-400::placeholder{--placeholder-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-yellow-500::placeholder{--placeholder-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-yellow-600::placeholder{--placeholder-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-yellow-700::placeholder{--placeholder-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-yellow-800::placeholder{--placeholder-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-yellow-900::placeholder{--placeholder-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-green-100::placeholder{--placeholder-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-green-200::placeholder{--placeholder-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-green-300::placeholder{--placeholder-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-green-400::placeholder{--placeholder-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-green-500::placeholder{--placeholder-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-green-600::placeholder{--placeholder-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-green-700::placeholder{--placeholder-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-green-800::placeholder{--placeholder-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-green-900::placeholder{--placeholder-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-teal-100::placeholder{--placeholder-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-teal-200::placeholder{--placeholder-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-teal-300::placeholder{--placeholder-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-teal-400::placeholder{--placeholder-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-teal-500::placeholder{--placeholder-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-teal-600::placeholder{--placeholder-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-teal-700::placeholder{--placeholder-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-teal-800::placeholder{--placeholder-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-teal-900::placeholder{--placeholder-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-blue-100::placeholder{--placeholder-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-blue-200::placeholder{--placeholder-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-blue-300::placeholder{--placeholder-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-blue-400::placeholder{--placeholder-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-blue-500::placeholder{--placeholder-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-blue-600::placeholder{--placeholder-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-blue-700::placeholder{--placeholder-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-blue-800::placeholder{--placeholder-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-blue-900::placeholder{--placeholder-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-indigo-100::placeholder{--placeholder-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-indigo-200::placeholder{--placeholder-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-indigo-300::placeholder{--placeholder-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-indigo-400::placeholder{--placeholder-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-indigo-500::placeholder{--placeholder-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-indigo-600::placeholder{--placeholder-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-indigo-700::placeholder{--placeholder-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-indigo-800::placeholder{--placeholder-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-indigo-900::placeholder{--placeholder-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-purple-100::placeholder{--placeholder-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-purple-200::placeholder{--placeholder-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-purple-300::placeholder{--placeholder-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-purple-400::placeholder{--placeholder-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-purple-500::placeholder{--placeholder-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-purple-600::placeholder{--placeholder-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-purple-700::placeholder{--placeholder-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-purple-800::placeholder{--placeholder-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-purple-900::placeholder{--placeholder-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-pink-100::placeholder{--placeholder-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-pink-200::placeholder{--placeholder-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-pink-300::placeholder{--placeholder-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-pink-400::placeholder{--placeholder-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-pink-500::placeholder{--placeholder-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-pink-600::placeholder{--placeholder-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-pink-700::placeholder{--placeholder-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-pink-800::placeholder{--placeholder-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-pink-900::placeholder{--placeholder-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-transparent:focus::placeholder{color:transparent!important}}@media (min-width:960px){.md\\:focus\\:placeholder-current:focus::placeholder{color:currentColor!important}}@media (min-width:960px){.md\\:focus\\:placeholder-black:focus::placeholder{--placeholder-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-white:focus::placeholder{--placeholder-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-gray-100:focus::placeholder{--placeholder-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-gray-200:focus::placeholder{--placeholder-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-gray-300:focus::placeholder{--placeholder-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-gray-400:focus::placeholder{--placeholder-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-gray-500:focus::placeholder{--placeholder-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-gray-600:focus::placeholder{--placeholder-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-gray-700:focus::placeholder{--placeholder-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-gray-800:focus::placeholder{--placeholder-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-gray-900:focus::placeholder{--placeholder-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-red-100:focus::placeholder{--placeholder-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-red-200:focus::placeholder{--placeholder-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-red-300:focus::placeholder{--placeholder-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-red-400:focus::placeholder{--placeholder-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-red-500:focus::placeholder{--placeholder-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-red-600:focus::placeholder{--placeholder-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-red-700:focus::placeholder{--placeholder-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-red-800:focus::placeholder{--placeholder-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-red-900:focus::placeholder{--placeholder-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-orange-100:focus::placeholder{--placeholder-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-orange-200:focus::placeholder{--placeholder-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-orange-300:focus::placeholder{--placeholder-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-orange-400:focus::placeholder{--placeholder-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-orange-500:focus::placeholder{--placeholder-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-orange-600:focus::placeholder{--placeholder-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-orange-700:focus::placeholder{--placeholder-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-orange-800:focus::placeholder{--placeholder-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-orange-900:focus::placeholder{--placeholder-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-yellow-100:focus::placeholder{--placeholder-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-yellow-200:focus::placeholder{--placeholder-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-yellow-300:focus::placeholder{--placeholder-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-yellow-400:focus::placeholder{--placeholder-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-yellow-500:focus::placeholder{--placeholder-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-yellow-600:focus::placeholder{--placeholder-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-yellow-700:focus::placeholder{--placeholder-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-yellow-800:focus::placeholder{--placeholder-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-yellow-900:focus::placeholder{--placeholder-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-green-100:focus::placeholder{--placeholder-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-green-200:focus::placeholder{--placeholder-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-green-300:focus::placeholder{--placeholder-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-green-400:focus::placeholder{--placeholder-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-green-500:focus::placeholder{--placeholder-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-green-600:focus::placeholder{--placeholder-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-green-700:focus::placeholder{--placeholder-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-green-800:focus::placeholder{--placeholder-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-green-900:focus::placeholder{--placeholder-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-teal-100:focus::placeholder{--placeholder-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-teal-200:focus::placeholder{--placeholder-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-teal-300:focus::placeholder{--placeholder-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-teal-400:focus::placeholder{--placeholder-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-teal-500:focus::placeholder{--placeholder-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-teal-600:focus::placeholder{--placeholder-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-teal-700:focus::placeholder{--placeholder-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-teal-800:focus::placeholder{--placeholder-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-teal-900:focus::placeholder{--placeholder-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-blue-100:focus::placeholder{--placeholder-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-blue-200:focus::placeholder{--placeholder-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-blue-300:focus::placeholder{--placeholder-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-blue-400:focus::placeholder{--placeholder-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-blue-500:focus::placeholder{--placeholder-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-blue-600:focus::placeholder{--placeholder-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-blue-700:focus::placeholder{--placeholder-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-blue-800:focus::placeholder{--placeholder-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-blue-900:focus::placeholder{--placeholder-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-indigo-100:focus::placeholder{--placeholder-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-indigo-200:focus::placeholder{--placeholder-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-indigo-300:focus::placeholder{--placeholder-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-indigo-400:focus::placeholder{--placeholder-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-indigo-500:focus::placeholder{--placeholder-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-indigo-600:focus::placeholder{--placeholder-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-indigo-700:focus::placeholder{--placeholder-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-indigo-800:focus::placeholder{--placeholder-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-indigo-900:focus::placeholder{--placeholder-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-purple-100:focus::placeholder{--placeholder-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-purple-200:focus::placeholder{--placeholder-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-purple-300:focus::placeholder{--placeholder-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-purple-400:focus::placeholder{--placeholder-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-purple-500:focus::placeholder{--placeholder-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-purple-600:focus::placeholder{--placeholder-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-purple-700:focus::placeholder{--placeholder-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-purple-800:focus::placeholder{--placeholder-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-purple-900:focus::placeholder{--placeholder-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-pink-100:focus::placeholder{--placeholder-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-pink-200:focus::placeholder{--placeholder-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-pink-300:focus::placeholder{--placeholder-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-pink-400:focus::placeholder{--placeholder-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-pink-500:focus::placeholder{--placeholder-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-pink-600:focus::placeholder{--placeholder-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-pink-700:focus::placeholder{--placeholder-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-pink-800:focus::placeholder{--placeholder-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:focus\\:placeholder-pink-900:focus::placeholder{--placeholder-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--placeholder-opacity))!important}}@media (min-width:960px){.md\\:placeholder-opacity-0::placeholder{--placeholder-opacity:0!important}}@media (min-width:960px){.md\\:placeholder-opacity-25::placeholder{--placeholder-opacity:0.25!important}}@media (min-width:960px){.md\\:placeholder-opacity-50::placeholder{--placeholder-opacity:0.5!important}}@media (min-width:960px){.md\\:placeholder-opacity-75::placeholder{--placeholder-opacity:0.75!important}}@media (min-width:960px){.md\\:placeholder-opacity-100::placeholder{--placeholder-opacity:1!important}}@media (min-width:960px){.md\\:focus\\:placeholder-opacity-0:focus::placeholder{--placeholder-opacity:0!important}}@media (min-width:960px){.md\\:focus\\:placeholder-opacity-25:focus::placeholder{--placeholder-opacity:0.25!important}}@media (min-width:960px){.md\\:focus\\:placeholder-opacity-50:focus::placeholder{--placeholder-opacity:0.5!important}}@media (min-width:960px){.md\\:focus\\:placeholder-opacity-75:focus::placeholder{--placeholder-opacity:0.75!important}}@media (min-width:960px){.md\\:focus\\:placeholder-opacity-100:focus::placeholder{--placeholder-opacity:1!important}}@media (min-width:960px){.md\\:pointer-events-none{pointer-events:none!important}}@media (min-width:960px){.md\\:pointer-events-auto{pointer-events:auto!important}}@media (min-width:960px){.md\\:static{position:static!important}}@media (min-width:960px){.md\\:fixed{position:fixed!important}}@media (min-width:960px){.md\\:absolute{position:absolute!important}}@media (min-width:960px){.md\\:relative{position:relative!important}}@media (min-width:960px){.md\\:sticky{position:sticky!important}}@media (min-width:960px){.md\\:inset-0{top:0!important;right:0!important;bottom:0!important;left:0!important}}@media (min-width:960px){.md\\:inset-auto{top:auto!important;right:auto!important;bottom:auto!important;left:auto!important}}@media (min-width:960px){.md\\:inset-y-0{top:0!important;bottom:0!important}}@media (min-width:960px){.md\\:inset-x-0{right:0!important;left:0!important}}@media (min-width:960px){.md\\:inset-y-auto{top:auto!important;bottom:auto!important}}@media (min-width:960px){.md\\:inset-x-auto{right:auto!important;left:auto!important}}@media (min-width:960px){.md\\:top-0{top:0!important}}@media (min-width:960px){.md\\:right-0{right:0!important}}@media (min-width:960px){.md\\:bottom-0{bottom:0!important}}@media (min-width:960px){.md\\:left-0{left:0!important}}@media (min-width:960px){.md\\:top-auto{top:auto!important}}@media (min-width:960px){.md\\:right-auto{right:auto!important}}@media (min-width:960px){.md\\:bottom-auto{bottom:auto!important}}@media (min-width:960px){.md\\:left-auto{left:auto!important}}@media (min-width:960px){.md\\:resize-none{resize:none!important}}@media (min-width:960px){.md\\:resize-y{resize:vertical!important}}@media (min-width:960px){.md\\:resize-x{resize:horizontal!important}}@media (min-width:960px){.md\\:resize{resize:both!important}}@media (min-width:960px){.md\\:shadow-xs{box-shadow:0 0 0 1px rgba(0,0,0,.05)!important}}@media (min-width:960px){.md\\:shadow-sm{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important}}@media (min-width:960px){.md\\:shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)!important}}@media (min-width:960px){.md\\:shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)!important}}@media (min-width:960px){.md\\:shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)!important}}@media (min-width:960px){.md\\:shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)!important}}@media (min-width:960px){.md\\:shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important}}@media (min-width:960px){.md\\:shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)!important}}@media (min-width:960px){.md\\:shadow-outline{box-shadow:0 0 0 3px rgba(66,153,225,.5)!important}}@media (min-width:960px){.md\\:shadow-none{box-shadow:none!important}}@media (min-width:960px){.md\\:hover\\:shadow-xs:hover{box-shadow:0 0 0 1px rgba(0,0,0,.05)!important}}@media (min-width:960px){.md\\:hover\\:shadow-sm:hover{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important}}@media (min-width:960px){.md\\:hover\\:shadow:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)!important}}@media (min-width:960px){.md\\:hover\\:shadow-md:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)!important}}@media (min-width:960px){.md\\:hover\\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)!important}}@media (min-width:960px){.md\\:hover\\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)!important}}@media (min-width:960px){.md\\:hover\\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important}}@media (min-width:960px){.md\\:hover\\:shadow-inner:hover{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)!important}}@media (min-width:960px){.md\\:hover\\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(66,153,225,.5)!important}}@media (min-width:960px){.md\\:hover\\:shadow-none:hover{box-shadow:none!important}}@media (min-width:960px){.md\\:focus\\:shadow-xs:focus{box-shadow:0 0 0 1px rgba(0,0,0,.05)!important}}@media (min-width:960px){.md\\:focus\\:shadow-sm:focus{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important}}@media (min-width:960px){.md\\:focus\\:shadow:focus{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)!important}}@media (min-width:960px){.md\\:focus\\:shadow-md:focus{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)!important}}@media (min-width:960px){.md\\:focus\\:shadow-lg:focus{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)!important}}@media (min-width:960px){.md\\:focus\\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)!important}}@media (min-width:960px){.md\\:focus\\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important}}@media (min-width:960px){.md\\:focus\\:shadow-inner:focus{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)!important}}@media (min-width:960px){.md\\:focus\\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(66,153,225,.5)!important}}@media (min-width:960px){.md\\:focus\\:shadow-none:focus{box-shadow:none!important}}@media (min-width:960px){.md\\:fill-current{fill:currentColor!important}}@media (min-width:960px){.md\\:stroke-current{stroke:currentColor!important}}@media (min-width:960px){.md\\:stroke-0{stroke-width:0!important}}@media (min-width:960px){.md\\:stroke-1{stroke-width:1!important}}@media (min-width:960px){.md\\:stroke-2{stroke-width:2!important}}@media (min-width:960px){.md\\:table-auto{table-layout:auto!important}}@media (min-width:960px){.md\\:table-fixed{table-layout:fixed!important}}@media (min-width:960px){.md\\:text-left{text-align:left!important}}@media (min-width:960px){.md\\:text-center{text-align:center!important}}@media (min-width:960px){.md\\:text-right{text-align:right!important}}@media (min-width:960px){.md\\:text-justify{text-align:justify!important}}@media (min-width:960px){.md\\:text-transparent{color:transparent!important}}@media (min-width:960px){.md\\:text-current{color:currentColor!important}}@media (min-width:960px){.md\\:text-black{--text-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-white{--text-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-gray-100{--text-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-gray-200{--text-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-gray-300{--text-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-gray-400{--text-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-gray-500{--text-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-gray-600{--text-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-gray-700{--text-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-gray-800{--text-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-gray-900{--text-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-red-100{--text-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-red-200{--text-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-red-300{--text-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-red-400{--text-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-red-500{--text-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-red-600{--text-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-red-700{--text-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-red-800{--text-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-red-900{--text-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-orange-100{--text-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-orange-200{--text-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-orange-300{--text-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-orange-400{--text-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-orange-500{--text-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-orange-600{--text-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-orange-700{--text-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-orange-800{--text-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-orange-900{--text-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-yellow-100{--text-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-yellow-200{--text-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-yellow-300{--text-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-yellow-400{--text-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-yellow-500{--text-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-yellow-600{--text-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-yellow-700{--text-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-yellow-800{--text-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-yellow-900{--text-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-green-100{--text-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-green-200{--text-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-green-300{--text-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-green-400{--text-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-green-500{--text-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-green-600{--text-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-green-700{--text-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-green-800{--text-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-green-900{--text-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-teal-100{--text-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-teal-200{--text-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-teal-300{--text-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-teal-400{--text-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-teal-500{--text-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-teal-600{--text-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-teal-700{--text-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-teal-800{--text-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-teal-900{--text-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-blue-100{--text-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-blue-200{--text-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-blue-300{--text-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-blue-400{--text-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-blue-500{--text-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-blue-600{--text-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-blue-700{--text-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-blue-800{--text-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-blue-900{--text-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-indigo-100{--text-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-indigo-200{--text-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-indigo-300{--text-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-indigo-400{--text-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-indigo-500{--text-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-indigo-600{--text-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-indigo-700{--text-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-indigo-800{--text-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-indigo-900{--text-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-purple-100{--text-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-purple-200{--text-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-purple-300{--text-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-purple-400{--text-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-purple-500{--text-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-purple-600{--text-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-purple-700{--text-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-purple-800{--text-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-purple-900{--text-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-pink-100{--text-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-pink-200{--text-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-pink-300{--text-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-pink-400{--text-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-pink-500{--text-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-pink-600{--text-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-pink-700{--text-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-pink-800{--text-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-pink-900{--text-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-transparent:hover{color:transparent!important}}@media (min-width:960px){.md\\:hover\\:text-current:hover{color:currentColor!important}}@media (min-width:960px){.md\\:hover\\:text-black:hover{--text-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-white:hover{--text-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-gray-100:hover{--text-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-gray-200:hover{--text-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-gray-300:hover{--text-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-gray-400:hover{--text-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-gray-500:hover{--text-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-gray-600:hover{--text-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-gray-700:hover{--text-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-gray-800:hover{--text-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-gray-900:hover{--text-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-red-100:hover{--text-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-red-200:hover{--text-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-red-300:hover{--text-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-red-400:hover{--text-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-red-500:hover{--text-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-red-600:hover{--text-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-red-700:hover{--text-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-red-800:hover{--text-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-red-900:hover{--text-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-orange-100:hover{--text-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-orange-200:hover{--text-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-orange-300:hover{--text-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-orange-400:hover{--text-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-orange-500:hover{--text-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-orange-600:hover{--text-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-orange-700:hover{--text-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-orange-800:hover{--text-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-orange-900:hover{--text-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-yellow-100:hover{--text-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-yellow-200:hover{--text-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-yellow-300:hover{--text-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-yellow-400:hover{--text-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-yellow-500:hover{--text-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-yellow-600:hover{--text-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-yellow-700:hover{--text-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-yellow-800:hover{--text-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-yellow-900:hover{--text-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-green-100:hover{--text-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-green-200:hover{--text-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-green-300:hover{--text-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-green-400:hover{--text-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-green-500:hover{--text-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-green-600:hover{--text-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-green-700:hover{--text-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-green-800:hover{--text-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-green-900:hover{--text-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-teal-100:hover{--text-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-teal-200:hover{--text-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-teal-300:hover{--text-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-teal-400:hover{--text-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-teal-500:hover{--text-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-teal-600:hover{--text-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-teal-700:hover{--text-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-teal-800:hover{--text-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-teal-900:hover{--text-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-blue-100:hover{--text-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-blue-200:hover{--text-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-blue-300:hover{--text-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-blue-400:hover{--text-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-blue-500:hover{--text-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-blue-600:hover{--text-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-blue-700:hover{--text-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-blue-800:hover{--text-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-blue-900:hover{--text-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-indigo-100:hover{--text-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-indigo-200:hover{--text-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-indigo-300:hover{--text-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-indigo-400:hover{--text-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-indigo-500:hover{--text-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-indigo-600:hover{--text-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-indigo-700:hover{--text-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-indigo-800:hover{--text-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-indigo-900:hover{--text-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-purple-100:hover{--text-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-purple-200:hover{--text-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-purple-300:hover{--text-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-purple-400:hover{--text-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-purple-500:hover{--text-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-purple-600:hover{--text-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-purple-700:hover{--text-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-purple-800:hover{--text-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-purple-900:hover{--text-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-pink-100:hover{--text-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-pink-200:hover{--text-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-pink-300:hover{--text-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-pink-400:hover{--text-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-pink-500:hover{--text-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-pink-600:hover{--text-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-pink-700:hover{--text-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-pink-800:hover{--text-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--text-opacity))!important}}@media (min-width:960px){.md\\:hover\\:text-pink-900:hover{--text-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-transparent:focus{color:transparent!important}}@media (min-width:960px){.md\\:focus\\:text-current:focus{color:currentColor!important}}@media (min-width:960px){.md\\:focus\\:text-black:focus{--text-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-white:focus{--text-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-gray-100:focus{--text-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-gray-200:focus{--text-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-gray-300:focus{--text-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-gray-400:focus{--text-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-gray-500:focus{--text-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-gray-600:focus{--text-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-gray-700:focus{--text-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-gray-800:focus{--text-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-gray-900:focus{--text-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-red-100:focus{--text-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-red-200:focus{--text-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-red-300:focus{--text-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-red-400:focus{--text-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-red-500:focus{--text-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-red-600:focus{--text-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-red-700:focus{--text-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-red-800:focus{--text-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-red-900:focus{--text-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-orange-100:focus{--text-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-orange-200:focus{--text-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-orange-300:focus{--text-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-orange-400:focus{--text-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-orange-500:focus{--text-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-orange-600:focus{--text-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-orange-700:focus{--text-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-orange-800:focus{--text-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-orange-900:focus{--text-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-yellow-100:focus{--text-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-yellow-200:focus{--text-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-yellow-300:focus{--text-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-yellow-400:focus{--text-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-yellow-500:focus{--text-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-yellow-600:focus{--text-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-yellow-700:focus{--text-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-yellow-800:focus{--text-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-yellow-900:focus{--text-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-green-100:focus{--text-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-green-200:focus{--text-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-green-300:focus{--text-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-green-400:focus{--text-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-green-500:focus{--text-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-green-600:focus{--text-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-green-700:focus{--text-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-green-800:focus{--text-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-green-900:focus{--text-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-teal-100:focus{--text-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-teal-200:focus{--text-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-teal-300:focus{--text-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-teal-400:focus{--text-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-teal-500:focus{--text-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-teal-600:focus{--text-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-teal-700:focus{--text-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-teal-800:focus{--text-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-teal-900:focus{--text-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-blue-100:focus{--text-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-blue-200:focus{--text-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-blue-300:focus{--text-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-blue-400:focus{--text-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-blue-500:focus{--text-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-blue-600:focus{--text-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-blue-700:focus{--text-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-blue-800:focus{--text-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-blue-900:focus{--text-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-indigo-100:focus{--text-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-indigo-200:focus{--text-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-indigo-300:focus{--text-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-indigo-400:focus{--text-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-indigo-500:focus{--text-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-indigo-600:focus{--text-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-indigo-700:focus{--text-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-indigo-800:focus{--text-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-indigo-900:focus{--text-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-purple-100:focus{--text-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-purple-200:focus{--text-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-purple-300:focus{--text-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-purple-400:focus{--text-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-purple-500:focus{--text-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-purple-600:focus{--text-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-purple-700:focus{--text-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-purple-800:focus{--text-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-purple-900:focus{--text-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-pink-100:focus{--text-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-pink-200:focus{--text-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-pink-300:focus{--text-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-pink-400:focus{--text-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-pink-500:focus{--text-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-pink-600:focus{--text-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-pink-700:focus{--text-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-pink-800:focus{--text-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--text-opacity))!important}}@media (min-width:960px){.md\\:focus\\:text-pink-900:focus{--text-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--text-opacity))!important}}@media (min-width:960px){.md\\:text-opacity-0{--text-opacity:0!important}}@media (min-width:960px){.md\\:text-opacity-25{--text-opacity:0.25!important}}@media (min-width:960px){.md\\:text-opacity-50{--text-opacity:0.5!important}}@media (min-width:960px){.md\\:text-opacity-75{--text-opacity:0.75!important}}@media (min-width:960px){.md\\:text-opacity-100{--text-opacity:1!important}}@media (min-width:960px){.md\\:hover\\:text-opacity-0:hover{--text-opacity:0!important}}@media (min-width:960px){.md\\:hover\\:text-opacity-25:hover{--text-opacity:0.25!important}}@media (min-width:960px){.md\\:hover\\:text-opacity-50:hover{--text-opacity:0.5!important}}@media (min-width:960px){.md\\:hover\\:text-opacity-75:hover{--text-opacity:0.75!important}}@media (min-width:960px){.md\\:hover\\:text-opacity-100:hover{--text-opacity:1!important}}@media (min-width:960px){.md\\:focus\\:text-opacity-0:focus{--text-opacity:0!important}}@media (min-width:960px){.md\\:focus\\:text-opacity-25:focus{--text-opacity:0.25!important}}@media (min-width:960px){.md\\:focus\\:text-opacity-50:focus{--text-opacity:0.5!important}}@media (min-width:960px){.md\\:focus\\:text-opacity-75:focus{--text-opacity:0.75!important}}@media (min-width:960px){.md\\:focus\\:text-opacity-100:focus{--text-opacity:1!important}}@media (min-width:960px){.md\\:italic{font-style:italic!important}}@media (min-width:960px){.md\\:not-italic{font-style:normal!important}}@media (min-width:960px){.md\\:uppercase{text-transform:uppercase!important}}@media (min-width:960px){.md\\:lowercase{text-transform:lowercase!important}}@media (min-width:960px){.md\\:capitalize{text-transform:capitalize!important}}@media (min-width:960px){.md\\:normal-case{text-transform:none!important}}@media (min-width:960px){.md\\:underline{text-decoration:underline!important}}@media (min-width:960px){.md\\:line-through{text-decoration:line-through!important}}@media (min-width:960px){.md\\:no-underline{text-decoration:none!important}}@media (min-width:960px){.md\\:hover\\:underline:hover{text-decoration:underline!important}}@media (min-width:960px){.md\\:hover\\:line-through:hover{text-decoration:line-through!important}}@media (min-width:960px){.md\\:hover\\:no-underline:hover{text-decoration:none!important}}@media (min-width:960px){.md\\:focus\\:underline:focus{text-decoration:underline!important}}@media (min-width:960px){.md\\:focus\\:line-through:focus{text-decoration:line-through!important}}@media (min-width:960px){.md\\:focus\\:no-underline:focus{text-decoration:none!important}}@media (min-width:960px){.md\\:antialiased{-webkit-font-smoothing:antialiased!important;-moz-osx-font-smoothing:grayscale!important}}@media (min-width:960px){.md\\:subpixel-antialiased{-webkit-font-smoothing:auto!important;-moz-osx-font-smoothing:auto!important}}@media (min-width:960px){.md\\:diagonal-fractions,.md\\:lining-nums,.md\\:oldstyle-nums,.md\\:ordinal,.md\\:proportional-nums,.md\\:slashed-zero,.md\\:stacked-fractions,.md\\:tabular-nums{--font-variant-numeric-ordinal:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-slashed-zero:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-figure:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-spacing:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-fraction:var(--tailwind-empty,/*!*/ /*!*/)!important;font-variant-numeric:var(--font-variant-numeric-ordinal) var(--font-variant-numeric-slashed-zero) var(--font-variant-numeric-figure) var(--font-variant-numeric-spacing) var(--font-variant-numeric-fraction)!important}}@media (min-width:960px){.md\\:normal-nums{font-variant-numeric:normal!important}}@media (min-width:960px){.md\\:ordinal{--font-variant-numeric-ordinal:ordinal!important}}@media (min-width:960px){.md\\:slashed-zero{--font-variant-numeric-slashed-zero:slashed-zero!important}}@media (min-width:960px){.md\\:lining-nums{--font-variant-numeric-figure:lining-nums!important}}@media (min-width:960px){.md\\:oldstyle-nums{--font-variant-numeric-figure:oldstyle-nums!important}}@media (min-width:960px){.md\\:proportional-nums{--font-variant-numeric-spacing:proportional-nums!important}}@media (min-width:960px){.md\\:tabular-nums{--font-variant-numeric-spacing:tabular-nums!important}}@media (min-width:960px){.md\\:diagonal-fractions{--font-variant-numeric-fraction:diagonal-fractions!important}}@media (min-width:960px){.md\\:stacked-fractions{--font-variant-numeric-fraction:stacked-fractions!important}}@media (min-width:960px){.md\\:tracking-tighter{letter-spacing:-.05em!important}}@media (min-width:960px){.md\\:tracking-tight{letter-spacing:-.025em!important}}@media (min-width:960px){.md\\:tracking-normal{letter-spacing:0!important}}@media (min-width:960px){.md\\:tracking-wide{letter-spacing:.025em!important}}@media (min-width:960px){.md\\:tracking-wider{letter-spacing:.05em!important}}@media (min-width:960px){.md\\:tracking-widest{letter-spacing:.1em!important}}@media (min-width:960px){.md\\:select-none{-webkit-user-select:none!important;user-select:none!important}}@media (min-width:960px){.md\\:select-text{-webkit-user-select:text!important;user-select:text!important}}@media (min-width:960px){.md\\:select-all{-webkit-user-select:all!important;user-select:all!important}}@media (min-width:960px){.md\\:select-auto{-webkit-user-select:auto!important;user-select:auto!important}}@media (min-width:960px){.md\\:align-baseline{vertical-align:initial!important}}@media (min-width:960px){.md\\:align-top{vertical-align:top!important}}@media (min-width:960px){.md\\:align-middle{vertical-align:middle!important}}@media (min-width:960px){.md\\:align-bottom{vertical-align:bottom!important}}@media (min-width:960px){.md\\:align-text-top{vertical-align:text-top!important}}@media (min-width:960px){.md\\:align-text-bottom{vertical-align:text-bottom!important}}@media (min-width:960px){.md\\:visible{visibility:visible!important}}@media (min-width:960px){.md\\:invisible{visibility:hidden!important}}@media (min-width:960px){.md\\:whitespace-normal{white-space:normal!important}}@media (min-width:960px){.md\\:whitespace-no-wrap{white-space:nowrap!important}}@media (min-width:960px){.md\\:whitespace-pre{white-space:pre!important}}@media (min-width:960px){.md\\:whitespace-pre-line{white-space:pre-line!important}}@media (min-width:960px){.md\\:whitespace-pre-wrap{white-space:pre-wrap!important}}@media (min-width:960px){.md\\:break-normal{word-wrap:normal!important;overflow-wrap:normal!important;word-break:normal!important}}@media (min-width:960px){.md\\:break-words{word-wrap:break-word!important;overflow-wrap:break-word!important}}@media (min-width:960px){.md\\:break-all{word-break:break-all!important}}@media (min-width:960px){.md\\:truncate{overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}}@media (min-width:960px){.md\\:w-0{width:0!important}}@media (min-width:960px){.md\\:w-1{width:.25rem!important}}@media (min-width:960px){.md\\:w-2{width:.5rem!important}}@media (min-width:960px){.md\\:w-3{width:.75rem!important}}@media (min-width:960px){.md\\:w-4{width:1rem!important}}@media (min-width:960px){.md\\:w-5{width:1.25rem!important}}@media (min-width:960px){.md\\:w-6{width:1.5rem!important}}@media (min-width:960px){.md\\:w-8{width:2rem!important}}@media (min-width:960px){.md\\:w-10{width:2.5rem!important}}@media (min-width:960px){.md\\:w-12{width:3rem!important}}@media (min-width:960px){.md\\:w-16{width:4rem!important}}@media (min-width:960px){.md\\:w-20{width:5rem!important}}@media (min-width:960px){.md\\:w-24{width:6rem!important}}@media (min-width:960px){.md\\:w-32{width:8rem!important}}@media (min-width:960px){.md\\:w-40{width:10rem!important}}@media (min-width:960px){.md\\:w-48{width:12rem!important}}@media (min-width:960px){.md\\:w-56{width:14rem!important}}@media (min-width:960px){.md\\:w-64{width:16rem!important}}@media (min-width:960px){.md\\:w-auto{width:auto!important}}@media (min-width:960px){.md\\:w-px{width:1px!important}}@media (min-width:960px){.md\\:w-1\\/2{width:50%!important}}@media (min-width:960px){.md\\:w-1\\/3{width:33.333333%!important}}@media (min-width:960px){.md\\:w-2\\/3{width:66.666667%!important}}@media (min-width:960px){.md\\:w-1\\/4{width:25%!important}}@media (min-width:960px){.md\\:w-2\\/4{width:50%!important}}@media (min-width:960px){.md\\:w-3\\/4{width:75%!important}}@media (min-width:960px){.md\\:w-1\\/5{width:20%!important}}@media (min-width:960px){.md\\:w-2\\/5{width:40%!important}}@media (min-width:960px){.md\\:w-3\\/5{width:60%!important}}@media (min-width:960px){.md\\:w-4\\/5{width:80%!important}}@media (min-width:960px){.md\\:w-1\\/6{width:16.666667%!important}}@media (min-width:960px){.md\\:w-2\\/6{width:33.333333%!important}}@media (min-width:960px){.md\\:w-3\\/6{width:50%!important}}@media (min-width:960px){.md\\:w-4\\/6{width:66.666667%!important}}@media (min-width:960px){.md\\:w-5\\/6{width:83.333333%!important}}@media (min-width:960px){.md\\:w-1\\/12{width:8.333333%!important}}@media (min-width:960px){.md\\:w-2\\/12{width:16.666667%!important}}@media (min-width:960px){.md\\:w-3\\/12{width:25%!important}}@media (min-width:960px){.md\\:w-4\\/12{width:33.333333%!important}}@media (min-width:960px){.md\\:w-5\\/12{width:41.666667%!important}}@media (min-width:960px){.md\\:w-6\\/12{width:50%!important}}@media (min-width:960px){.md\\:w-7\\/12{width:58.333333%!important}}@media (min-width:960px){.md\\:w-8\\/12{width:66.666667%!important}}@media (min-width:960px){.md\\:w-9\\/12{width:75%!important}}@media (min-width:960px){.md\\:w-10\\/12{width:83.333333%!important}}@media (min-width:960px){.md\\:w-11\\/12{width:91.666667%!important}}@media (min-width:960px){.md\\:w-full{width:100%!important}}@media (min-width:960px){.md\\:w-screen{width:100vw!important}}@media (min-width:960px){.md\\:z-0{z-index:0!important}}@media (min-width:960px){.md\\:z-10{z-index:10!important}}@media (min-width:960px){.md\\:z-20{z-index:20!important}}@media (min-width:960px){.md\\:z-30{z-index:30!important}}@media (min-width:960px){.md\\:z-40{z-index:40!important}}@media (min-width:960px){.md\\:z-50{z-index:50!important}}@media (min-width:960px){.md\\:z-auto{z-index:auto!important}}@media (min-width:960px){.md\\:gap-0{grid-gap:0!important;gap:0!important}}@media (min-width:960px){.md\\:gap-1{grid-gap:.25rem!important;gap:.25rem!important}}@media (min-width:960px){.md\\:gap-2{grid-gap:.5rem!important;gap:.5rem!important}}@media (min-width:960px){.md\\:gap-3{grid-gap:.75rem!important;gap:.75rem!important}}@media (min-width:960px){.md\\:gap-4{grid-gap:1rem!important;gap:1rem!important}}@media (min-width:960px){.md\\:gap-5{grid-gap:1.25rem!important;gap:1.25rem!important}}@media (min-width:960px){.md\\:gap-6{grid-gap:1.5rem!important;gap:1.5rem!important}}@media (min-width:960px){.md\\:gap-8{grid-gap:2rem!important;gap:2rem!important}}@media (min-width:960px){.md\\:gap-10{grid-gap:2.5rem!important;gap:2.5rem!important}}@media (min-width:960px){.md\\:gap-12{grid-gap:3rem!important;gap:3rem!important}}@media (min-width:960px){.md\\:gap-16{grid-gap:4rem!important;gap:4rem!important}}@media (min-width:960px){.md\\:gap-20{grid-gap:5rem!important;gap:5rem!important}}@media (min-width:960px){.md\\:gap-24{grid-gap:6rem!important;gap:6rem!important}}@media (min-width:960px){.md\\:gap-32{grid-gap:8rem!important;gap:8rem!important}}@media (min-width:960px){.md\\:gap-40{grid-gap:10rem!important;gap:10rem!important}}@media (min-width:960px){.md\\:gap-48{grid-gap:12rem!important;gap:12rem!important}}@media (min-width:960px){.md\\:gap-56{grid-gap:14rem!important;gap:14rem!important}}@media (min-width:960px){.md\\:gap-64{grid-gap:16rem!important;gap:16rem!important}}@media (min-width:960px){.md\\:gap-px{grid-gap:1px!important;gap:1px!important}}@media (min-width:960px){.md\\:col-gap-0{grid-column-gap:0!important;column-gap:0!important}}@media (min-width:960px){.md\\:col-gap-1{grid-column-gap:.25rem!important;column-gap:.25rem!important}}@media (min-width:960px){.md\\:col-gap-2{grid-column-gap:.5rem!important;column-gap:.5rem!important}}@media (min-width:960px){.md\\:col-gap-3{grid-column-gap:.75rem!important;column-gap:.75rem!important}}@media (min-width:960px){.md\\:col-gap-4{grid-column-gap:1rem!important;column-gap:1rem!important}}@media (min-width:960px){.md\\:col-gap-5{grid-column-gap:1.25rem!important;column-gap:1.25rem!important}}@media (min-width:960px){.md\\:col-gap-6{grid-column-gap:1.5rem!important;column-gap:1.5rem!important}}@media (min-width:960px){.md\\:col-gap-8{grid-column-gap:2rem!important;column-gap:2rem!important}}@media (min-width:960px){.md\\:col-gap-10{grid-column-gap:2.5rem!important;column-gap:2.5rem!important}}@media (min-width:960px){.md\\:col-gap-12{grid-column-gap:3rem!important;column-gap:3rem!important}}@media (min-width:960px){.md\\:col-gap-16{grid-column-gap:4rem!important;column-gap:4rem!important}}@media (min-width:960px){.md\\:col-gap-20{grid-column-gap:5rem!important;column-gap:5rem!important}}@media (min-width:960px){.md\\:col-gap-24{grid-column-gap:6rem!important;column-gap:6rem!important}}@media (min-width:960px){.md\\:col-gap-32{grid-column-gap:8rem!important;column-gap:8rem!important}}@media (min-width:960px){.md\\:col-gap-40{grid-column-gap:10rem!important;column-gap:10rem!important}}@media (min-width:960px){.md\\:col-gap-48{grid-column-gap:12rem!important;column-gap:12rem!important}}@media (min-width:960px){.md\\:col-gap-56{grid-column-gap:14rem!important;column-gap:14rem!important}}@media (min-width:960px){.md\\:col-gap-64{grid-column-gap:16rem!important;column-gap:16rem!important}}@media (min-width:960px){.md\\:col-gap-px{grid-column-gap:1px!important;column-gap:1px!important}}@media (min-width:960px){.md\\:gap-x-0{grid-column-gap:0!important;column-gap:0!important}}@media (min-width:960px){.md\\:gap-x-1{grid-column-gap:.25rem!important;column-gap:.25rem!important}}@media (min-width:960px){.md\\:gap-x-2{grid-column-gap:.5rem!important;column-gap:.5rem!important}}@media (min-width:960px){.md\\:gap-x-3{grid-column-gap:.75rem!important;column-gap:.75rem!important}}@media (min-width:960px){.md\\:gap-x-4{grid-column-gap:1rem!important;column-gap:1rem!important}}@media (min-width:960px){.md\\:gap-x-5{grid-column-gap:1.25rem!important;column-gap:1.25rem!important}}@media (min-width:960px){.md\\:gap-x-6{grid-column-gap:1.5rem!important;column-gap:1.5rem!important}}@media (min-width:960px){.md\\:gap-x-8{grid-column-gap:2rem!important;column-gap:2rem!important}}@media (min-width:960px){.md\\:gap-x-10{grid-column-gap:2.5rem!important;column-gap:2.5rem!important}}@media (min-width:960px){.md\\:gap-x-12{grid-column-gap:3rem!important;column-gap:3rem!important}}@media (min-width:960px){.md\\:gap-x-16{grid-column-gap:4rem!important;column-gap:4rem!important}}@media (min-width:960px){.md\\:gap-x-20{grid-column-gap:5rem!important;column-gap:5rem!important}}@media (min-width:960px){.md\\:gap-x-24{grid-column-gap:6rem!important;column-gap:6rem!important}}@media (min-width:960px){.md\\:gap-x-32{grid-column-gap:8rem!important;column-gap:8rem!important}}@media (min-width:960px){.md\\:gap-x-40{grid-column-gap:10rem!important;column-gap:10rem!important}}@media (min-width:960px){.md\\:gap-x-48{grid-column-gap:12rem!important;column-gap:12rem!important}}@media (min-width:960px){.md\\:gap-x-56{grid-column-gap:14rem!important;column-gap:14rem!important}}@media (min-width:960px){.md\\:gap-x-64{grid-column-gap:16rem!important;column-gap:16rem!important}}@media (min-width:960px){.md\\:gap-x-px{grid-column-gap:1px!important;column-gap:1px!important}}@media (min-width:960px){.md\\:row-gap-0{grid-row-gap:0!important;row-gap:0!important}}@media (min-width:960px){.md\\:row-gap-1{grid-row-gap:.25rem!important;row-gap:.25rem!important}}@media (min-width:960px){.md\\:row-gap-2{grid-row-gap:.5rem!important;row-gap:.5rem!important}}@media (min-width:960px){.md\\:row-gap-3{grid-row-gap:.75rem!important;row-gap:.75rem!important}}@media (min-width:960px){.md\\:row-gap-4{grid-row-gap:1rem!important;row-gap:1rem!important}}@media (min-width:960px){.md\\:row-gap-5{grid-row-gap:1.25rem!important;row-gap:1.25rem!important}}@media (min-width:960px){.md\\:row-gap-6{grid-row-gap:1.5rem!important;row-gap:1.5rem!important}}@media (min-width:960px){.md\\:row-gap-8{grid-row-gap:2rem!important;row-gap:2rem!important}}@media (min-width:960px){.md\\:row-gap-10{grid-row-gap:2.5rem!important;row-gap:2.5rem!important}}@media (min-width:960px){.md\\:row-gap-12{grid-row-gap:3rem!important;row-gap:3rem!important}}@media (min-width:960px){.md\\:row-gap-16{grid-row-gap:4rem!important;row-gap:4rem!important}}@media (min-width:960px){.md\\:row-gap-20{grid-row-gap:5rem!important;row-gap:5rem!important}}@media (min-width:960px){.md\\:row-gap-24{grid-row-gap:6rem!important;row-gap:6rem!important}}@media (min-width:960px){.md\\:row-gap-32{grid-row-gap:8rem!important;row-gap:8rem!important}}@media (min-width:960px){.md\\:row-gap-40{grid-row-gap:10rem!important;row-gap:10rem!important}}@media (min-width:960px){.md\\:row-gap-48{grid-row-gap:12rem!important;row-gap:12rem!important}}@media (min-width:960px){.md\\:row-gap-56{grid-row-gap:14rem!important;row-gap:14rem!important}}@media (min-width:960px){.md\\:row-gap-64{grid-row-gap:16rem!important;row-gap:16rem!important}}@media (min-width:960px){.md\\:row-gap-px{grid-row-gap:1px!important;row-gap:1px!important}}@media (min-width:960px){.md\\:gap-y-0{grid-row-gap:0!important;row-gap:0!important}}@media (min-width:960px){.md\\:gap-y-1{grid-row-gap:.25rem!important;row-gap:.25rem!important}}@media (min-width:960px){.md\\:gap-y-2{grid-row-gap:.5rem!important;row-gap:.5rem!important}}@media (min-width:960px){.md\\:gap-y-3{grid-row-gap:.75rem!important;row-gap:.75rem!important}}@media (min-width:960px){.md\\:gap-y-4{grid-row-gap:1rem!important;row-gap:1rem!important}}@media (min-width:960px){.md\\:gap-y-5{grid-row-gap:1.25rem!important;row-gap:1.25rem!important}}@media (min-width:960px){.md\\:gap-y-6{grid-row-gap:1.5rem!important;row-gap:1.5rem!important}}@media (min-width:960px){.md\\:gap-y-8{grid-row-gap:2rem!important;row-gap:2rem!important}}@media (min-width:960px){.md\\:gap-y-10{grid-row-gap:2.5rem!important;row-gap:2.5rem!important}}@media (min-width:960px){.md\\:gap-y-12{grid-row-gap:3rem!important;row-gap:3rem!important}}@media (min-width:960px){.md\\:gap-y-16{grid-row-gap:4rem!important;row-gap:4rem!important}}@media (min-width:960px){.md\\:gap-y-20{grid-row-gap:5rem!important;row-gap:5rem!important}}@media (min-width:960px){.md\\:gap-y-24{grid-row-gap:6rem!important;row-gap:6rem!important}}@media (min-width:960px){.md\\:gap-y-32{grid-row-gap:8rem!important;row-gap:8rem!important}}@media (min-width:960px){.md\\:gap-y-40{grid-row-gap:10rem!important;row-gap:10rem!important}}@media (min-width:960px){.md\\:gap-y-48{grid-row-gap:12rem!important;row-gap:12rem!important}}@media (min-width:960px){.md\\:gap-y-56{grid-row-gap:14rem!important;row-gap:14rem!important}}@media (min-width:960px){.md\\:gap-y-64{grid-row-gap:16rem!important;row-gap:16rem!important}}@media (min-width:960px){.md\\:gap-y-px{grid-row-gap:1px!important;row-gap:1px!important}}@media (min-width:960px){.md\\:grid-flow-row{grid-auto-flow:row!important}}@media (min-width:960px){.md\\:grid-flow-col{grid-auto-flow:column!important}}@media (min-width:960px){.md\\:grid-flow-row-dense{grid-auto-flow:row dense!important}}@media (min-width:960px){.md\\:grid-flow-col-dense{grid-auto-flow:column dense!important}}@media (min-width:960px){.md\\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}}@media (min-width:960px){.md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}}@media (min-width:960px){.md\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}}@media (min-width:960px){.md\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))!important}}@media (min-width:960px){.md\\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))!important}}@media (min-width:960px){.md\\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))!important}}@media (min-width:960px){.md\\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))!important}}@media (min-width:960px){.md\\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))!important}}@media (min-width:960px){.md\\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))!important}}@media (min-width:960px){.md\\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))!important}}@media (min-width:960px){.md\\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))!important}}@media (min-width:960px){.md\\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))!important}}@media (min-width:960px){.md\\:grid-cols-none{grid-template-columns:none!important}}@media (min-width:960px){.md\\:auto-cols-auto{grid-auto-columns:auto!important}}@media (min-width:960px){.md\\:auto-cols-min{grid-auto-columns:-webkit-min-content!important;grid-auto-columns:min-content!important}}@media (min-width:960px){.md\\:auto-cols-max{grid-auto-columns:-webkit-max-content!important;grid-auto-columns:max-content!important}}@media (min-width:960px){.md\\:auto-cols-fr{grid-auto-columns:minmax(0,1fr)!important}}@media (min-width:960px){.md\\:col-auto{grid-column:auto!important}}@media (min-width:960px){.md\\:col-span-1{grid-column:span 1/span 1!important}}@media (min-width:960px){.md\\:col-span-2{grid-column:span 2/span 2!important}}@media (min-width:960px){.md\\:col-span-3{grid-column:span 3/span 3!important}}@media (min-width:960px){.md\\:col-span-4{grid-column:span 4/span 4!important}}@media (min-width:960px){.md\\:col-span-5{grid-column:span 5/span 5!important}}@media (min-width:960px){.md\\:col-span-6{grid-column:span 6/span 6!important}}@media (min-width:960px){.md\\:col-span-7{grid-column:span 7/span 7!important}}@media (min-width:960px){.md\\:col-span-8{grid-column:span 8/span 8!important}}@media (min-width:960px){.md\\:col-span-9{grid-column:span 9/span 9!important}}@media (min-width:960px){.md\\:col-span-10{grid-column:span 10/span 10!important}}@media (min-width:960px){.md\\:col-span-11{grid-column:span 11/span 11!important}}@media (min-width:960px){.md\\:col-span-12{grid-column:span 12/span 12!important}}@media (min-width:960px){.md\\:col-span-full{grid-column:1/-1!important}}@media (min-width:960px){.md\\:col-start-1{grid-column-start:1!important}}@media (min-width:960px){.md\\:col-start-2{grid-column-start:2!important}}@media (min-width:960px){.md\\:col-start-3{grid-column-start:3!important}}@media (min-width:960px){.md\\:col-start-4{grid-column-start:4!important}}@media (min-width:960px){.md\\:col-start-5{grid-column-start:5!important}}@media (min-width:960px){.md\\:col-start-6{grid-column-start:6!important}}@media (min-width:960px){.md\\:col-start-7{grid-column-start:7!important}}@media (min-width:960px){.md\\:col-start-8{grid-column-start:8!important}}@media (min-width:960px){.md\\:col-start-9{grid-column-start:9!important}}@media (min-width:960px){.md\\:col-start-10{grid-column-start:10!important}}@media (min-width:960px){.md\\:col-start-11{grid-column-start:11!important}}@media (min-width:960px){.md\\:col-start-12{grid-column-start:12!important}}@media (min-width:960px){.md\\:col-start-13{grid-column-start:13!important}}@media (min-width:960px){.md\\:col-start-auto{grid-column-start:auto!important}}@media (min-width:960px){.md\\:col-end-1{grid-column-end:1!important}}@media (min-width:960px){.md\\:col-end-2{grid-column-end:2!important}}@media (min-width:960px){.md\\:col-end-3{grid-column-end:3!important}}@media (min-width:960px){.md\\:col-end-4{grid-column-end:4!important}}@media (min-width:960px){.md\\:col-end-5{grid-column-end:5!important}}@media (min-width:960px){.md\\:col-end-6{grid-column-end:6!important}}@media (min-width:960px){.md\\:col-end-7{grid-column-end:7!important}}@media (min-width:960px){.md\\:col-end-8{grid-column-end:8!important}}@media (min-width:960px){.md\\:col-end-9{grid-column-end:9!important}}@media (min-width:960px){.md\\:col-end-10{grid-column-end:10!important}}@media (min-width:960px){.md\\:col-end-11{grid-column-end:11!important}}@media (min-width:960px){.md\\:col-end-12{grid-column-end:12!important}}@media (min-width:960px){.md\\:col-end-13{grid-column-end:13!important}}@media (min-width:960px){.md\\:col-end-auto{grid-column-end:auto!important}}@media (min-width:960px){.md\\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))!important}}@media (min-width:960px){.md\\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))!important}}@media (min-width:960px){.md\\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))!important}}@media (min-width:960px){.md\\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))!important}}@media (min-width:960px){.md\\:grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))!important}}@media (min-width:960px){.md\\:grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))!important}}@media (min-width:960px){.md\\:grid-rows-none{grid-template-rows:none!important}}@media (min-width:960px){.md\\:auto-rows-auto{grid-auto-rows:auto!important}}@media (min-width:960px){.md\\:auto-rows-min{grid-auto-rows:-webkit-min-content!important;grid-auto-rows:min-content!important}}@media (min-width:960px){.md\\:auto-rows-max{grid-auto-rows:-webkit-max-content!important;grid-auto-rows:max-content!important}}@media (min-width:960px){.md\\:auto-rows-fr{grid-auto-rows:minmax(0,1fr)!important}}@media (min-width:960px){.md\\:row-auto{grid-row:auto!important}}@media (min-width:960px){.md\\:row-span-1{grid-row:span 1/span 1!important}}@media (min-width:960px){.md\\:row-span-2{grid-row:span 2/span 2!important}}@media (min-width:960px){.md\\:row-span-3{grid-row:span 3/span 3!important}}@media (min-width:960px){.md\\:row-span-4{grid-row:span 4/span 4!important}}@media (min-width:960px){.md\\:row-span-5{grid-row:span 5/span 5!important}}@media (min-width:960px){.md\\:row-span-6{grid-row:span 6/span 6!important}}@media (min-width:960px){.md\\:row-span-full{grid-row:1/-1!important}}@media (min-width:960px){.md\\:row-start-1{grid-row-start:1!important}}@media (min-width:960px){.md\\:row-start-2{grid-row-start:2!important}}@media (min-width:960px){.md\\:row-start-3{grid-row-start:3!important}}@media (min-width:960px){.md\\:row-start-4{grid-row-start:4!important}}@media (min-width:960px){.md\\:row-start-5{grid-row-start:5!important}}@media (min-width:960px){.md\\:row-start-6{grid-row-start:6!important}}@media (min-width:960px){.md\\:row-start-7{grid-row-start:7!important}}@media (min-width:960px){.md\\:row-start-auto{grid-row-start:auto!important}}@media (min-width:960px){.md\\:row-end-1{grid-row-end:1!important}}@media (min-width:960px){.md\\:row-end-2{grid-row-end:2!important}}@media (min-width:960px){.md\\:row-end-3{grid-row-end:3!important}}@media (min-width:960px){.md\\:row-end-4{grid-row-end:4!important}}@media (min-width:960px){.md\\:row-end-5{grid-row-end:5!important}}@media (min-width:960px){.md\\:row-end-6{grid-row-end:6!important}}@media (min-width:960px){.md\\:row-end-7{grid-row-end:7!important}}@media (min-width:960px){.md\\:row-end-auto{grid-row-end:auto!important}}@media (min-width:960px){.md\\:transform{--transform-translate-x:0!important;--transform-translate-y:0!important;--transform-rotate:0!important;--transform-skew-x:0!important;--transform-skew-y:0!important;--transform-scale-x:1!important;--transform-scale-y:1!important;transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))!important}}@media (min-width:960px){.md\\:transform-none{transform:none!important}}@media (min-width:960px){.md\\:origin-center{transform-origin:center!important}}@media (min-width:960px){.md\\:origin-top{transform-origin:top!important}}@media (min-width:960px){.md\\:origin-top-right{transform-origin:top right!important}}@media (min-width:960px){.md\\:origin-right{transform-origin:right!important}}@media (min-width:960px){.md\\:origin-bottom-right{transform-origin:bottom right!important}}@media (min-width:960px){.md\\:origin-bottom{transform-origin:bottom!important}}@media (min-width:960px){.md\\:origin-bottom-left{transform-origin:bottom left!important}}@media (min-width:960px){.md\\:origin-left{transform-origin:left!important}}@media (min-width:960px){.md\\:origin-top-left{transform-origin:top left!important}}@media (min-width:960px){.md\\:scale-0{--transform-scale-x:0!important;--transform-scale-y:0!important}}@media (min-width:960px){.md\\:scale-50{--transform-scale-x:.5!important;--transform-scale-y:.5!important}}@media (min-width:960px){.md\\:scale-75{--transform-scale-x:.75!important;--transform-scale-y:.75!important}}@media (min-width:960px){.md\\:scale-90{--transform-scale-x:.9!important;--transform-scale-y:.9!important}}@media (min-width:960px){.md\\:scale-95{--transform-scale-x:.95!important;--transform-scale-y:.95!important}}@media (min-width:960px){.md\\:scale-100{--transform-scale-x:1!important;--transform-scale-y:1!important}}@media (min-width:960px){.md\\:scale-105{--transform-scale-x:1.05!important;--transform-scale-y:1.05!important}}@media (min-width:960px){.md\\:scale-110{--transform-scale-x:1.1!important;--transform-scale-y:1.1!important}}@media (min-width:960px){.md\\:scale-125{--transform-scale-x:1.25!important;--transform-scale-y:1.25!important}}@media (min-width:960px){.md\\:scale-150{--transform-scale-x:1.5!important;--transform-scale-y:1.5!important}}@media (min-width:960px){.md\\:scale-x-0{--transform-scale-x:0!important}}@media (min-width:960px){.md\\:scale-x-50{--transform-scale-x:.5!important}}@media (min-width:960px){.md\\:scale-x-75{--transform-scale-x:.75!important}}@media (min-width:960px){.md\\:scale-x-90{--transform-scale-x:.9!important}}@media (min-width:960px){.md\\:scale-x-95{--transform-scale-x:.95!important}}@media (min-width:960px){.md\\:scale-x-100{--transform-scale-x:1!important}}@media (min-width:960px){.md\\:scale-x-105{--transform-scale-x:1.05!important}}@media (min-width:960px){.md\\:scale-x-110{--transform-scale-x:1.1!important}}@media (min-width:960px){.md\\:scale-x-125{--transform-scale-x:1.25!important}}@media (min-width:960px){.md\\:scale-x-150{--transform-scale-x:1.5!important}}@media (min-width:960px){.md\\:scale-y-0{--transform-scale-y:0!important}}@media (min-width:960px){.md\\:scale-y-50{--transform-scale-y:.5!important}}@media (min-width:960px){.md\\:scale-y-75{--transform-scale-y:.75!important}}@media (min-width:960px){.md\\:scale-y-90{--transform-scale-y:.9!important}}@media (min-width:960px){.md\\:scale-y-95{--transform-scale-y:.95!important}}@media (min-width:960px){.md\\:scale-y-100{--transform-scale-y:1!important}}@media (min-width:960px){.md\\:scale-y-105{--transform-scale-y:1.05!important}}@media (min-width:960px){.md\\:scale-y-110{--transform-scale-y:1.1!important}}@media (min-width:960px){.md\\:scale-y-125{--transform-scale-y:1.25!important}}@media (min-width:960px){.md\\:scale-y-150{--transform-scale-y:1.5!important}}@media (min-width:960px){.md\\:hover\\:scale-0:hover{--transform-scale-x:0!important;--transform-scale-y:0!important}}@media (min-width:960px){.md\\:hover\\:scale-50:hover{--transform-scale-x:.5!important;--transform-scale-y:.5!important}}@media (min-width:960px){.md\\:hover\\:scale-75:hover{--transform-scale-x:.75!important;--transform-scale-y:.75!important}}@media (min-width:960px){.md\\:hover\\:scale-90:hover{--transform-scale-x:.9!important;--transform-scale-y:.9!important}}@media (min-width:960px){.md\\:hover\\:scale-95:hover{--transform-scale-x:.95!important;--transform-scale-y:.95!important}}@media (min-width:960px){.md\\:hover\\:scale-100:hover{--transform-scale-x:1!important;--transform-scale-y:1!important}}@media (min-width:960px){.md\\:hover\\:scale-105:hover{--transform-scale-x:1.05!important;--transform-scale-y:1.05!important}}@media (min-width:960px){.md\\:hover\\:scale-110:hover{--transform-scale-x:1.1!important;--transform-scale-y:1.1!important}}@media (min-width:960px){.md\\:hover\\:scale-125:hover{--transform-scale-x:1.25!important;--transform-scale-y:1.25!important}}@media (min-width:960px){.md\\:hover\\:scale-150:hover{--transform-scale-x:1.5!important;--transform-scale-y:1.5!important}}@media (min-width:960px){.md\\:hover\\:scale-x-0:hover{--transform-scale-x:0!important}}@media (min-width:960px){.md\\:hover\\:scale-x-50:hover{--transform-scale-x:.5!important}}@media (min-width:960px){.md\\:hover\\:scale-x-75:hover{--transform-scale-x:.75!important}}@media (min-width:960px){.md\\:hover\\:scale-x-90:hover{--transform-scale-x:.9!important}}@media (min-width:960px){.md\\:hover\\:scale-x-95:hover{--transform-scale-x:.95!important}}@media (min-width:960px){.md\\:hover\\:scale-x-100:hover{--transform-scale-x:1!important}}@media (min-width:960px){.md\\:hover\\:scale-x-105:hover{--transform-scale-x:1.05!important}}@media (min-width:960px){.md\\:hover\\:scale-x-110:hover{--transform-scale-x:1.1!important}}@media (min-width:960px){.md\\:hover\\:scale-x-125:hover{--transform-scale-x:1.25!important}}@media (min-width:960px){.md\\:hover\\:scale-x-150:hover{--transform-scale-x:1.5!important}}@media (min-width:960px){.md\\:hover\\:scale-y-0:hover{--transform-scale-y:0!important}}@media (min-width:960px){.md\\:hover\\:scale-y-50:hover{--transform-scale-y:.5!important}}@media (min-width:960px){.md\\:hover\\:scale-y-75:hover{--transform-scale-y:.75!important}}@media (min-width:960px){.md\\:hover\\:scale-y-90:hover{--transform-scale-y:.9!important}}@media (min-width:960px){.md\\:hover\\:scale-y-95:hover{--transform-scale-y:.95!important}}@media (min-width:960px){.md\\:hover\\:scale-y-100:hover{--transform-scale-y:1!important}}@media (min-width:960px){.md\\:hover\\:scale-y-105:hover{--transform-scale-y:1.05!important}}@media (min-width:960px){.md\\:hover\\:scale-y-110:hover{--transform-scale-y:1.1!important}}@media (min-width:960px){.md\\:hover\\:scale-y-125:hover{--transform-scale-y:1.25!important}}@media (min-width:960px){.md\\:hover\\:scale-y-150:hover{--transform-scale-y:1.5!important}}@media (min-width:960px){.md\\:focus\\:scale-0:focus{--transform-scale-x:0!important;--transform-scale-y:0!important}}@media (min-width:960px){.md\\:focus\\:scale-50:focus{--transform-scale-x:.5!important;--transform-scale-y:.5!important}}@media (min-width:960px){.md\\:focus\\:scale-75:focus{--transform-scale-x:.75!important;--transform-scale-y:.75!important}}@media (min-width:960px){.md\\:focus\\:scale-90:focus{--transform-scale-x:.9!important;--transform-scale-y:.9!important}}@media (min-width:960px){.md\\:focus\\:scale-95:focus{--transform-scale-x:.95!important;--transform-scale-y:.95!important}}@media (min-width:960px){.md\\:focus\\:scale-100:focus{--transform-scale-x:1!important;--transform-scale-y:1!important}}@media (min-width:960px){.md\\:focus\\:scale-105:focus{--transform-scale-x:1.05!important;--transform-scale-y:1.05!important}}@media (min-width:960px){.md\\:focus\\:scale-110:focus{--transform-scale-x:1.1!important;--transform-scale-y:1.1!important}}@media (min-width:960px){.md\\:focus\\:scale-125:focus{--transform-scale-x:1.25!important;--transform-scale-y:1.25!important}}@media (min-width:960px){.md\\:focus\\:scale-150:focus{--transform-scale-x:1.5!important;--transform-scale-y:1.5!important}}@media (min-width:960px){.md\\:focus\\:scale-x-0:focus{--transform-scale-x:0!important}}@media (min-width:960px){.md\\:focus\\:scale-x-50:focus{--transform-scale-x:.5!important}}@media (min-width:960px){.md\\:focus\\:scale-x-75:focus{--transform-scale-x:.75!important}}@media (min-width:960px){.md\\:focus\\:scale-x-90:focus{--transform-scale-x:.9!important}}@media (min-width:960px){.md\\:focus\\:scale-x-95:focus{--transform-scale-x:.95!important}}@media (min-width:960px){.md\\:focus\\:scale-x-100:focus{--transform-scale-x:1!important}}@media (min-width:960px){.md\\:focus\\:scale-x-105:focus{--transform-scale-x:1.05!important}}@media (min-width:960px){.md\\:focus\\:scale-x-110:focus{--transform-scale-x:1.1!important}}@media (min-width:960px){.md\\:focus\\:scale-x-125:focus{--transform-scale-x:1.25!important}}@media (min-width:960px){.md\\:focus\\:scale-x-150:focus{--transform-scale-x:1.5!important}}@media (min-width:960px){.md\\:focus\\:scale-y-0:focus{--transform-scale-y:0!important}}@media (min-width:960px){.md\\:focus\\:scale-y-50:focus{--transform-scale-y:.5!important}}@media (min-width:960px){.md\\:focus\\:scale-y-75:focus{--transform-scale-y:.75!important}}@media (min-width:960px){.md\\:focus\\:scale-y-90:focus{--transform-scale-y:.9!important}}@media (min-width:960px){.md\\:focus\\:scale-y-95:focus{--transform-scale-y:.95!important}}@media (min-width:960px){.md\\:focus\\:scale-y-100:focus{--transform-scale-y:1!important}}@media (min-width:960px){.md\\:focus\\:scale-y-105:focus{--transform-scale-y:1.05!important}}@media (min-width:960px){.md\\:focus\\:scale-y-110:focus{--transform-scale-y:1.1!important}}@media (min-width:960px){.md\\:focus\\:scale-y-125:focus{--transform-scale-y:1.25!important}}@media (min-width:960px){.md\\:focus\\:scale-y-150:focus{--transform-scale-y:1.5!important}}@media (min-width:960px){.md\\:rotate-0{--transform-rotate:0!important}}@media (min-width:960px){.md\\:rotate-1{--transform-rotate:1deg!important}}@media (min-width:960px){.md\\:rotate-2{--transform-rotate:2deg!important}}@media (min-width:960px){.md\\:rotate-3{--transform-rotate:3deg!important}}@media (min-width:960px){.md\\:rotate-6{--transform-rotate:6deg!important}}@media (min-width:960px){.md\\:rotate-12{--transform-rotate:12deg!important}}@media (min-width:960px){.md\\:rotate-45{--transform-rotate:45deg!important}}@media (min-width:960px){.md\\:rotate-90{--transform-rotate:90deg!important}}@media (min-width:960px){.md\\:rotate-180{--transform-rotate:180deg!important}}@media (min-width:960px){.md\\:-rotate-180{--transform-rotate:-180deg!important}}@media (min-width:960px){.md\\:-rotate-90{--transform-rotate:-90deg!important}}@media (min-width:960px){.md\\:-rotate-45{--transform-rotate:-45deg!important}}@media (min-width:960px){.md\\:-rotate-12{--transform-rotate:-12deg!important}}@media (min-width:960px){.md\\:-rotate-6{--transform-rotate:-6deg!important}}@media (min-width:960px){.md\\:-rotate-3{--transform-rotate:-3deg!important}}@media (min-width:960px){.md\\:-rotate-2{--transform-rotate:-2deg!important}}@media (min-width:960px){.md\\:-rotate-1{--transform-rotate:-1deg!important}}@media (min-width:960px){.md\\:hover\\:rotate-0:hover{--transform-rotate:0!important}}@media (min-width:960px){.md\\:hover\\:rotate-1:hover{--transform-rotate:1deg!important}}@media (min-width:960px){.md\\:hover\\:rotate-2:hover{--transform-rotate:2deg!important}}@media (min-width:960px){.md\\:hover\\:rotate-3:hover{--transform-rotate:3deg!important}}@media (min-width:960px){.md\\:hover\\:rotate-6:hover{--transform-rotate:6deg!important}}@media (min-width:960px){.md\\:hover\\:rotate-12:hover{--transform-rotate:12deg!important}}@media (min-width:960px){.md\\:hover\\:rotate-45:hover{--transform-rotate:45deg!important}}@media (min-width:960px){.md\\:hover\\:rotate-90:hover{--transform-rotate:90deg!important}}@media (min-width:960px){.md\\:hover\\:rotate-180:hover{--transform-rotate:180deg!important}}@media (min-width:960px){.md\\:hover\\:-rotate-180:hover{--transform-rotate:-180deg!important}}@media (min-width:960px){.md\\:hover\\:-rotate-90:hover{--transform-rotate:-90deg!important}}@media (min-width:960px){.md\\:hover\\:-rotate-45:hover{--transform-rotate:-45deg!important}}@media (min-width:960px){.md\\:hover\\:-rotate-12:hover{--transform-rotate:-12deg!important}}@media (min-width:960px){.md\\:hover\\:-rotate-6:hover{--transform-rotate:-6deg!important}}@media (min-width:960px){.md\\:hover\\:-rotate-3:hover{--transform-rotate:-3deg!important}}@media (min-width:960px){.md\\:hover\\:-rotate-2:hover{--transform-rotate:-2deg!important}}@media (min-width:960px){.md\\:hover\\:-rotate-1:hover{--transform-rotate:-1deg!important}}@media (min-width:960px){.md\\:focus\\:rotate-0:focus{--transform-rotate:0!important}}@media (min-width:960px){.md\\:focus\\:rotate-1:focus{--transform-rotate:1deg!important}}@media (min-width:960px){.md\\:focus\\:rotate-2:focus{--transform-rotate:2deg!important}}@media (min-width:960px){.md\\:focus\\:rotate-3:focus{--transform-rotate:3deg!important}}@media (min-width:960px){.md\\:focus\\:rotate-6:focus{--transform-rotate:6deg!important}}@media (min-width:960px){.md\\:focus\\:rotate-12:focus{--transform-rotate:12deg!important}}@media (min-width:960px){.md\\:focus\\:rotate-45:focus{--transform-rotate:45deg!important}}@media (min-width:960px){.md\\:focus\\:rotate-90:focus{--transform-rotate:90deg!important}}@media (min-width:960px){.md\\:focus\\:rotate-180:focus{--transform-rotate:180deg!important}}@media (min-width:960px){.md\\:focus\\:-rotate-180:focus{--transform-rotate:-180deg!important}}@media (min-width:960px){.md\\:focus\\:-rotate-90:focus{--transform-rotate:-90deg!important}}@media (min-width:960px){.md\\:focus\\:-rotate-45:focus{--transform-rotate:-45deg!important}}@media (min-width:960px){.md\\:focus\\:-rotate-12:focus{--transform-rotate:-12deg!important}}@media (min-width:960px){.md\\:focus\\:-rotate-6:focus{--transform-rotate:-6deg!important}}@media (min-width:960px){.md\\:focus\\:-rotate-3:focus{--transform-rotate:-3deg!important}}@media (min-width:960px){.md\\:focus\\:-rotate-2:focus{--transform-rotate:-2deg!important}}@media (min-width:960px){.md\\:focus\\:-rotate-1:focus{--transform-rotate:-1deg!important}}@media (min-width:960px){.md\\:translate-x-0{--transform-translate-x:0!important}}@media (min-width:960px){.md\\:translate-x-1{--transform-translate-x:0.25rem!important}}@media (min-width:960px){.md\\:translate-x-2{--transform-translate-x:0.5rem!important}}@media (min-width:960px){.md\\:translate-x-3{--transform-translate-x:0.75rem!important}}@media (min-width:960px){.md\\:translate-x-4{--transform-translate-x:1rem!important}}@media (min-width:960px){.md\\:translate-x-5{--transform-translate-x:1.25rem!important}}@media (min-width:960px){.md\\:translate-x-6{--transform-translate-x:1.5rem!important}}@media (min-width:960px){.md\\:translate-x-8{--transform-translate-x:2rem!important}}@media (min-width:960px){.md\\:translate-x-10{--transform-translate-x:2.5rem!important}}@media (min-width:960px){.md\\:translate-x-12{--transform-translate-x:3rem!important}}@media (min-width:960px){.md\\:translate-x-16{--transform-translate-x:4rem!important}}@media (min-width:960px){.md\\:translate-x-20{--transform-translate-x:5rem!important}}@media (min-width:960px){.md\\:translate-x-24{--transform-translate-x:6rem!important}}@media (min-width:960px){.md\\:translate-x-32{--transform-translate-x:8rem!important}}@media (min-width:960px){.md\\:translate-x-40{--transform-translate-x:10rem!important}}@media (min-width:960px){.md\\:translate-x-48{--transform-translate-x:12rem!important}}@media (min-width:960px){.md\\:translate-x-56{--transform-translate-x:14rem!important}}@media (min-width:960px){.md\\:translate-x-64{--transform-translate-x:16rem!important}}@media (min-width:960px){.md\\:translate-x-px{--transform-translate-x:1px!important}}@media (min-width:960px){.md\\:-translate-x-1{--transform-translate-x:-0.25rem!important}}@media (min-width:960px){.md\\:-translate-x-2{--transform-translate-x:-0.5rem!important}}@media (min-width:960px){.md\\:-translate-x-3{--transform-translate-x:-0.75rem!important}}@media (min-width:960px){.md\\:-translate-x-4{--transform-translate-x:-1rem!important}}@media (min-width:960px){.md\\:-translate-x-5{--transform-translate-x:-1.25rem!important}}@media (min-width:960px){.md\\:-translate-x-6{--transform-translate-x:-1.5rem!important}}@media (min-width:960px){.md\\:-translate-x-8{--transform-translate-x:-2rem!important}}@media (min-width:960px){.md\\:-translate-x-10{--transform-translate-x:-2.5rem!important}}@media (min-width:960px){.md\\:-translate-x-12{--transform-translate-x:-3rem!important}}@media (min-width:960px){.md\\:-translate-x-16{--transform-translate-x:-4rem!important}}@media (min-width:960px){.md\\:-translate-x-20{--transform-translate-x:-5rem!important}}@media (min-width:960px){.md\\:-translate-x-24{--transform-translate-x:-6rem!important}}@media (min-width:960px){.md\\:-translate-x-32{--transform-translate-x:-8rem!important}}@media (min-width:960px){.md\\:-translate-x-40{--transform-translate-x:-10rem!important}}@media (min-width:960px){.md\\:-translate-x-48{--transform-translate-x:-12rem!important}}@media (min-width:960px){.md\\:-translate-x-56{--transform-translate-x:-14rem!important}}@media (min-width:960px){.md\\:-translate-x-64{--transform-translate-x:-16rem!important}}@media (min-width:960px){.md\\:-translate-x-px{--transform-translate-x:-1px!important}}@media (min-width:960px){.md\\:-translate-x-full{--transform-translate-x:-100%!important}}@media (min-width:960px){.md\\:-translate-x-1\\/2{--transform-translate-x:-50%!important}}@media (min-width:960px){.md\\:translate-x-1\\/2{--transform-translate-x:50%!important}}@media (min-width:960px){.md\\:translate-x-full{--transform-translate-x:100%!important}}@media (min-width:960px){.md\\:translate-y-0{--transform-translate-y:0!important}}@media (min-width:960px){.md\\:translate-y-1{--transform-translate-y:0.25rem!important}}@media (min-width:960px){.md\\:translate-y-2{--transform-translate-y:0.5rem!important}}@media (min-width:960px){.md\\:translate-y-3{--transform-translate-y:0.75rem!important}}@media (min-width:960px){.md\\:translate-y-4{--transform-translate-y:1rem!important}}@media (min-width:960px){.md\\:translate-y-5{--transform-translate-y:1.25rem!important}}@media (min-width:960px){.md\\:translate-y-6{--transform-translate-y:1.5rem!important}}@media (min-width:960px){.md\\:translate-y-8{--transform-translate-y:2rem!important}}@media (min-width:960px){.md\\:translate-y-10{--transform-translate-y:2.5rem!important}}@media (min-width:960px){.md\\:translate-y-12{--transform-translate-y:3rem!important}}@media (min-width:960px){.md\\:translate-y-16{--transform-translate-y:4rem!important}}@media (min-width:960px){.md\\:translate-y-20{--transform-translate-y:5rem!important}}@media (min-width:960px){.md\\:translate-y-24{--transform-translate-y:6rem!important}}@media (min-width:960px){.md\\:translate-y-32{--transform-translate-y:8rem!important}}@media (min-width:960px){.md\\:translate-y-40{--transform-translate-y:10rem!important}}@media (min-width:960px){.md\\:translate-y-48{--transform-translate-y:12rem!important}}@media (min-width:960px){.md\\:translate-y-56{--transform-translate-y:14rem!important}}@media (min-width:960px){.md\\:translate-y-64{--transform-translate-y:16rem!important}}@media (min-width:960px){.md\\:translate-y-px{--transform-translate-y:1px!important}}@media (min-width:960px){.md\\:-translate-y-1{--transform-translate-y:-0.25rem!important}}@media (min-width:960px){.md\\:-translate-y-2{--transform-translate-y:-0.5rem!important}}@media (min-width:960px){.md\\:-translate-y-3{--transform-translate-y:-0.75rem!important}}@media (min-width:960px){.md\\:-translate-y-4{--transform-translate-y:-1rem!important}}@media (min-width:960px){.md\\:-translate-y-5{--transform-translate-y:-1.25rem!important}}@media (min-width:960px){.md\\:-translate-y-6{--transform-translate-y:-1.5rem!important}}@media (min-width:960px){.md\\:-translate-y-8{--transform-translate-y:-2rem!important}}@media (min-width:960px){.md\\:-translate-y-10{--transform-translate-y:-2.5rem!important}}@media (min-width:960px){.md\\:-translate-y-12{--transform-translate-y:-3rem!important}}@media (min-width:960px){.md\\:-translate-y-16{--transform-translate-y:-4rem!important}}@media (min-width:960px){.md\\:-translate-y-20{--transform-translate-y:-5rem!important}}@media (min-width:960px){.md\\:-translate-y-24{--transform-translate-y:-6rem!important}}@media (min-width:960px){.md\\:-translate-y-32{--transform-translate-y:-8rem!important}}@media (min-width:960px){.md\\:-translate-y-40{--transform-translate-y:-10rem!important}}@media (min-width:960px){.md\\:-translate-y-48{--transform-translate-y:-12rem!important}}@media (min-width:960px){.md\\:-translate-y-56{--transform-translate-y:-14rem!important}}@media (min-width:960px){.md\\:-translate-y-64{--transform-translate-y:-16rem!important}}@media (min-width:960px){.md\\:-translate-y-px{--transform-translate-y:-1px!important}}@media (min-width:960px){.md\\:-translate-y-full{--transform-translate-y:-100%!important}}@media (min-width:960px){.md\\:-translate-y-1\\/2{--transform-translate-y:-50%!important}}@media (min-width:960px){.md\\:translate-y-1\\/2{--transform-translate-y:50%!important}}@media (min-width:960px){.md\\:translate-y-full{--transform-translate-y:100%!important}}@media (min-width:960px){.md\\:hover\\:translate-x-0:hover{--transform-translate-x:0!important}}@media (min-width:960px){.md\\:hover\\:translate-x-1:hover{--transform-translate-x:0.25rem!important}}@media (min-width:960px){.md\\:hover\\:translate-x-2:hover{--transform-translate-x:0.5rem!important}}@media (min-width:960px){.md\\:hover\\:translate-x-3:hover{--transform-translate-x:0.75rem!important}}@media (min-width:960px){.md\\:hover\\:translate-x-4:hover{--transform-translate-x:1rem!important}}@media (min-width:960px){.md\\:hover\\:translate-x-5:hover{--transform-translate-x:1.25rem!important}}@media (min-width:960px){.md\\:hover\\:translate-x-6:hover{--transform-translate-x:1.5rem!important}}@media (min-width:960px){.md\\:hover\\:translate-x-8:hover{--transform-translate-x:2rem!important}}@media (min-width:960px){.md\\:hover\\:translate-x-10:hover{--transform-translate-x:2.5rem!important}}@media (min-width:960px){.md\\:hover\\:translate-x-12:hover{--transform-translate-x:3rem!important}}@media (min-width:960px){.md\\:hover\\:translate-x-16:hover{--transform-translate-x:4rem!important}}@media (min-width:960px){.md\\:hover\\:translate-x-20:hover{--transform-translate-x:5rem!important}}@media (min-width:960px){.md\\:hover\\:translate-x-24:hover{--transform-translate-x:6rem!important}}@media (min-width:960px){.md\\:hover\\:translate-x-32:hover{--transform-translate-x:8rem!important}}@media (min-width:960px){.md\\:hover\\:translate-x-40:hover{--transform-translate-x:10rem!important}}@media (min-width:960px){.md\\:hover\\:translate-x-48:hover{--transform-translate-x:12rem!important}}@media (min-width:960px){.md\\:hover\\:translate-x-56:hover{--transform-translate-x:14rem!important}}@media (min-width:960px){.md\\:hover\\:translate-x-64:hover{--transform-translate-x:16rem!important}}@media (min-width:960px){.md\\:hover\\:translate-x-px:hover{--transform-translate-x:1px!important}}@media (min-width:960px){.md\\:hover\\:-translate-x-1:hover{--transform-translate-x:-0.25rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-x-2:hover{--transform-translate-x:-0.5rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-x-3:hover{--transform-translate-x:-0.75rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-x-4:hover{--transform-translate-x:-1rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-x-5:hover{--transform-translate-x:-1.25rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-x-6:hover{--transform-translate-x:-1.5rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-x-8:hover{--transform-translate-x:-2rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-x-10:hover{--transform-translate-x:-2.5rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-x-12:hover{--transform-translate-x:-3rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-x-16:hover{--transform-translate-x:-4rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-x-20:hover{--transform-translate-x:-5rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-x-24:hover{--transform-translate-x:-6rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-x-32:hover{--transform-translate-x:-8rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-x-40:hover{--transform-translate-x:-10rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-x-48:hover{--transform-translate-x:-12rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-x-56:hover{--transform-translate-x:-14rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-x-64:hover{--transform-translate-x:-16rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-x-px:hover{--transform-translate-x:-1px!important}}@media (min-width:960px){.md\\:hover\\:-translate-x-full:hover{--transform-translate-x:-100%!important}}@media (min-width:960px){.md\\:hover\\:-translate-x-1\\/2:hover{--transform-translate-x:-50%!important}}@media (min-width:960px){.md\\:hover\\:translate-x-1\\/2:hover{--transform-translate-x:50%!important}}@media (min-width:960px){.md\\:hover\\:translate-x-full:hover{--transform-translate-x:100%!important}}@media (min-width:960px){.md\\:hover\\:translate-y-0:hover{--transform-translate-y:0!important}}@media (min-width:960px){.md\\:hover\\:translate-y-1:hover{--transform-translate-y:0.25rem!important}}@media (min-width:960px){.md\\:hover\\:translate-y-2:hover{--transform-translate-y:0.5rem!important}}@media (min-width:960px){.md\\:hover\\:translate-y-3:hover{--transform-translate-y:0.75rem!important}}@media (min-width:960px){.md\\:hover\\:translate-y-4:hover{--transform-translate-y:1rem!important}}@media (min-width:960px){.md\\:hover\\:translate-y-5:hover{--transform-translate-y:1.25rem!important}}@media (min-width:960px){.md\\:hover\\:translate-y-6:hover{--transform-translate-y:1.5rem!important}}@media (min-width:960px){.md\\:hover\\:translate-y-8:hover{--transform-translate-y:2rem!important}}@media (min-width:960px){.md\\:hover\\:translate-y-10:hover{--transform-translate-y:2.5rem!important}}@media (min-width:960px){.md\\:hover\\:translate-y-12:hover{--transform-translate-y:3rem!important}}@media (min-width:960px){.md\\:hover\\:translate-y-16:hover{--transform-translate-y:4rem!important}}@media (min-width:960px){.md\\:hover\\:translate-y-20:hover{--transform-translate-y:5rem!important}}@media (min-width:960px){.md\\:hover\\:translate-y-24:hover{--transform-translate-y:6rem!important}}@media (min-width:960px){.md\\:hover\\:translate-y-32:hover{--transform-translate-y:8rem!important}}@media (min-width:960px){.md\\:hover\\:translate-y-40:hover{--transform-translate-y:10rem!important}}@media (min-width:960px){.md\\:hover\\:translate-y-48:hover{--transform-translate-y:12rem!important}}@media (min-width:960px){.md\\:hover\\:translate-y-56:hover{--transform-translate-y:14rem!important}}@media (min-width:960px){.md\\:hover\\:translate-y-64:hover{--transform-translate-y:16rem!important}}@media (min-width:960px){.md\\:hover\\:translate-y-px:hover{--transform-translate-y:1px!important}}@media (min-width:960px){.md\\:hover\\:-translate-y-1:hover{--transform-translate-y:-0.25rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-y-2:hover{--transform-translate-y:-0.5rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-y-3:hover{--transform-translate-y:-0.75rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-y-4:hover{--transform-translate-y:-1rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-y-5:hover{--transform-translate-y:-1.25rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-y-6:hover{--transform-translate-y:-1.5rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-y-8:hover{--transform-translate-y:-2rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-y-10:hover{--transform-translate-y:-2.5rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-y-12:hover{--transform-translate-y:-3rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-y-16:hover{--transform-translate-y:-4rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-y-20:hover{--transform-translate-y:-5rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-y-24:hover{--transform-translate-y:-6rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-y-32:hover{--transform-translate-y:-8rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-y-40:hover{--transform-translate-y:-10rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-y-48:hover{--transform-translate-y:-12rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-y-56:hover{--transform-translate-y:-14rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-y-64:hover{--transform-translate-y:-16rem!important}}@media (min-width:960px){.md\\:hover\\:-translate-y-px:hover{--transform-translate-y:-1px!important}}@media (min-width:960px){.md\\:hover\\:-translate-y-full:hover{--transform-translate-y:-100%!important}}@media (min-width:960px){.md\\:hover\\:-translate-y-1\\/2:hover{--transform-translate-y:-50%!important}}@media (min-width:960px){.md\\:hover\\:translate-y-1\\/2:hover{--transform-translate-y:50%!important}}@media (min-width:960px){.md\\:hover\\:translate-y-full:hover{--transform-translate-y:100%!important}}@media (min-width:960px){.md\\:focus\\:translate-x-0:focus{--transform-translate-x:0!important}}@media (min-width:960px){.md\\:focus\\:translate-x-1:focus{--transform-translate-x:0.25rem!important}}@media (min-width:960px){.md\\:focus\\:translate-x-2:focus{--transform-translate-x:0.5rem!important}}@media (min-width:960px){.md\\:focus\\:translate-x-3:focus{--transform-translate-x:0.75rem!important}}@media (min-width:960px){.md\\:focus\\:translate-x-4:focus{--transform-translate-x:1rem!important}}@media (min-width:960px){.md\\:focus\\:translate-x-5:focus{--transform-translate-x:1.25rem!important}}@media (min-width:960px){.md\\:focus\\:translate-x-6:focus{--transform-translate-x:1.5rem!important}}@media (min-width:960px){.md\\:focus\\:translate-x-8:focus{--transform-translate-x:2rem!important}}@media (min-width:960px){.md\\:focus\\:translate-x-10:focus{--transform-translate-x:2.5rem!important}}@media (min-width:960px){.md\\:focus\\:translate-x-12:focus{--transform-translate-x:3rem!important}}@media (min-width:960px){.md\\:focus\\:translate-x-16:focus{--transform-translate-x:4rem!important}}@media (min-width:960px){.md\\:focus\\:translate-x-20:focus{--transform-translate-x:5rem!important}}@media (min-width:960px){.md\\:focus\\:translate-x-24:focus{--transform-translate-x:6rem!important}}@media (min-width:960px){.md\\:focus\\:translate-x-32:focus{--transform-translate-x:8rem!important}}@media (min-width:960px){.md\\:focus\\:translate-x-40:focus{--transform-translate-x:10rem!important}}@media (min-width:960px){.md\\:focus\\:translate-x-48:focus{--transform-translate-x:12rem!important}}@media (min-width:960px){.md\\:focus\\:translate-x-56:focus{--transform-translate-x:14rem!important}}@media (min-width:960px){.md\\:focus\\:translate-x-64:focus{--transform-translate-x:16rem!important}}@media (min-width:960px){.md\\:focus\\:translate-x-px:focus{--transform-translate-x:1px!important}}@media (min-width:960px){.md\\:focus\\:-translate-x-1:focus{--transform-translate-x:-0.25rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-x-2:focus{--transform-translate-x:-0.5rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-x-3:focus{--transform-translate-x:-0.75rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-x-4:focus{--transform-translate-x:-1rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-x-5:focus{--transform-translate-x:-1.25rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-x-6:focus{--transform-translate-x:-1.5rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-x-8:focus{--transform-translate-x:-2rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-x-10:focus{--transform-translate-x:-2.5rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-x-12:focus{--transform-translate-x:-3rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-x-16:focus{--transform-translate-x:-4rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-x-20:focus{--transform-translate-x:-5rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-x-24:focus{--transform-translate-x:-6rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-x-32:focus{--transform-translate-x:-8rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-x-40:focus{--transform-translate-x:-10rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-x-48:focus{--transform-translate-x:-12rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-x-56:focus{--transform-translate-x:-14rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-x-64:focus{--transform-translate-x:-16rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-x-px:focus{--transform-translate-x:-1px!important}}@media (min-width:960px){.md\\:focus\\:-translate-x-full:focus{--transform-translate-x:-100%!important}}@media (min-width:960px){.md\\:focus\\:-translate-x-1\\/2:focus{--transform-translate-x:-50%!important}}@media (min-width:960px){.md\\:focus\\:translate-x-1\\/2:focus{--transform-translate-x:50%!important}}@media (min-width:960px){.md\\:focus\\:translate-x-full:focus{--transform-translate-x:100%!important}}@media (min-width:960px){.md\\:focus\\:translate-y-0:focus{--transform-translate-y:0!important}}@media (min-width:960px){.md\\:focus\\:translate-y-1:focus{--transform-translate-y:0.25rem!important}}@media (min-width:960px){.md\\:focus\\:translate-y-2:focus{--transform-translate-y:0.5rem!important}}@media (min-width:960px){.md\\:focus\\:translate-y-3:focus{--transform-translate-y:0.75rem!important}}@media (min-width:960px){.md\\:focus\\:translate-y-4:focus{--transform-translate-y:1rem!important}}@media (min-width:960px){.md\\:focus\\:translate-y-5:focus{--transform-translate-y:1.25rem!important}}@media (min-width:960px){.md\\:focus\\:translate-y-6:focus{--transform-translate-y:1.5rem!important}}@media (min-width:960px){.md\\:focus\\:translate-y-8:focus{--transform-translate-y:2rem!important}}@media (min-width:960px){.md\\:focus\\:translate-y-10:focus{--transform-translate-y:2.5rem!important}}@media (min-width:960px){.md\\:focus\\:translate-y-12:focus{--transform-translate-y:3rem!important}}@media (min-width:960px){.md\\:focus\\:translate-y-16:focus{--transform-translate-y:4rem!important}}@media (min-width:960px){.md\\:focus\\:translate-y-20:focus{--transform-translate-y:5rem!important}}@media (min-width:960px){.md\\:focus\\:translate-y-24:focus{--transform-translate-y:6rem!important}}@media (min-width:960px){.md\\:focus\\:translate-y-32:focus{--transform-translate-y:8rem!important}}@media (min-width:960px){.md\\:focus\\:translate-y-40:focus{--transform-translate-y:10rem!important}}@media (min-width:960px){.md\\:focus\\:translate-y-48:focus{--transform-translate-y:12rem!important}}@media (min-width:960px){.md\\:focus\\:translate-y-56:focus{--transform-translate-y:14rem!important}}@media (min-width:960px){.md\\:focus\\:translate-y-64:focus{--transform-translate-y:16rem!important}}@media (min-width:960px){.md\\:focus\\:translate-y-px:focus{--transform-translate-y:1px!important}}@media (min-width:960px){.md\\:focus\\:-translate-y-1:focus{--transform-translate-y:-0.25rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-y-2:focus{--transform-translate-y:-0.5rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-y-3:focus{--transform-translate-y:-0.75rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-y-4:focus{--transform-translate-y:-1rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-y-5:focus{--transform-translate-y:-1.25rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-y-6:focus{--transform-translate-y:-1.5rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-y-8:focus{--transform-translate-y:-2rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-y-10:focus{--transform-translate-y:-2.5rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-y-12:focus{--transform-translate-y:-3rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-y-16:focus{--transform-translate-y:-4rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-y-20:focus{--transform-translate-y:-5rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-y-24:focus{--transform-translate-y:-6rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-y-32:focus{--transform-translate-y:-8rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-y-40:focus{--transform-translate-y:-10rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-y-48:focus{--transform-translate-y:-12rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-y-56:focus{--transform-translate-y:-14rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-y-64:focus{--transform-translate-y:-16rem!important}}@media (min-width:960px){.md\\:focus\\:-translate-y-px:focus{--transform-translate-y:-1px!important}}@media (min-width:960px){.md\\:focus\\:-translate-y-full:focus{--transform-translate-y:-100%!important}}@media (min-width:960px){.md\\:focus\\:-translate-y-1\\/2:focus{--transform-translate-y:-50%!important}}@media (min-width:960px){.md\\:focus\\:translate-y-1\\/2:focus{--transform-translate-y:50%!important}}@media (min-width:960px){.md\\:focus\\:translate-y-full:focus{--transform-translate-y:100%!important}}@media (min-width:960px){.md\\:skew-x-0{--transform-skew-x:0!important}}@media (min-width:960px){.md\\:skew-x-1{--transform-skew-x:1deg!important}}@media (min-width:960px){.md\\:skew-x-2{--transform-skew-x:2deg!important}}@media (min-width:960px){.md\\:skew-x-3{--transform-skew-x:3deg!important}}@media (min-width:960px){.md\\:skew-x-6{--transform-skew-x:6deg!important}}@media (min-width:960px){.md\\:skew-x-12{--transform-skew-x:12deg!important}}@media (min-width:960px){.md\\:-skew-x-12{--transform-skew-x:-12deg!important}}@media (min-width:960px){.md\\:-skew-x-6{--transform-skew-x:-6deg!important}}@media (min-width:960px){.md\\:-skew-x-3{--transform-skew-x:-3deg!important}}@media (min-width:960px){.md\\:-skew-x-2{--transform-skew-x:-2deg!important}}@media (min-width:960px){.md\\:-skew-x-1{--transform-skew-x:-1deg!important}}@media (min-width:960px){.md\\:skew-y-0{--transform-skew-y:0!important}}@media (min-width:960px){.md\\:skew-y-1{--transform-skew-y:1deg!important}}@media (min-width:960px){.md\\:skew-y-2{--transform-skew-y:2deg!important}}@media (min-width:960px){.md\\:skew-y-3{--transform-skew-y:3deg!important}}@media (min-width:960px){.md\\:skew-y-6{--transform-skew-y:6deg!important}}@media (min-width:960px){.md\\:skew-y-12{--transform-skew-y:12deg!important}}@media (min-width:960px){.md\\:-skew-y-12{--transform-skew-y:-12deg!important}}@media (min-width:960px){.md\\:-skew-y-6{--transform-skew-y:-6deg!important}}@media (min-width:960px){.md\\:-skew-y-3{--transform-skew-y:-3deg!important}}@media (min-width:960px){.md\\:-skew-y-2{--transform-skew-y:-2deg!important}}@media (min-width:960px){.md\\:-skew-y-1{--transform-skew-y:-1deg!important}}@media (min-width:960px){.md\\:hover\\:skew-x-0:hover{--transform-skew-x:0!important}}@media (min-width:960px){.md\\:hover\\:skew-x-1:hover{--transform-skew-x:1deg!important}}@media (min-width:960px){.md\\:hover\\:skew-x-2:hover{--transform-skew-x:2deg!important}}@media (min-width:960px){.md\\:hover\\:skew-x-3:hover{--transform-skew-x:3deg!important}}@media (min-width:960px){.md\\:hover\\:skew-x-6:hover{--transform-skew-x:6deg!important}}@media (min-width:960px){.md\\:hover\\:skew-x-12:hover{--transform-skew-x:12deg!important}}@media (min-width:960px){.md\\:hover\\:-skew-x-12:hover{--transform-skew-x:-12deg!important}}@media (min-width:960px){.md\\:hover\\:-skew-x-6:hover{--transform-skew-x:-6deg!important}}@media (min-width:960px){.md\\:hover\\:-skew-x-3:hover{--transform-skew-x:-3deg!important}}@media (min-width:960px){.md\\:hover\\:-skew-x-2:hover{--transform-skew-x:-2deg!important}}@media (min-width:960px){.md\\:hover\\:-skew-x-1:hover{--transform-skew-x:-1deg!important}}@media (min-width:960px){.md\\:hover\\:skew-y-0:hover{--transform-skew-y:0!important}}@media (min-width:960px){.md\\:hover\\:skew-y-1:hover{--transform-skew-y:1deg!important}}@media (min-width:960px){.md\\:hover\\:skew-y-2:hover{--transform-skew-y:2deg!important}}@media (min-width:960px){.md\\:hover\\:skew-y-3:hover{--transform-skew-y:3deg!important}}@media (min-width:960px){.md\\:hover\\:skew-y-6:hover{--transform-skew-y:6deg!important}}@media (min-width:960px){.md\\:hover\\:skew-y-12:hover{--transform-skew-y:12deg!important}}@media (min-width:960px){.md\\:hover\\:-skew-y-12:hover{--transform-skew-y:-12deg!important}}@media (min-width:960px){.md\\:hover\\:-skew-y-6:hover{--transform-skew-y:-6deg!important}}@media (min-width:960px){.md\\:hover\\:-skew-y-3:hover{--transform-skew-y:-3deg!important}}@media (min-width:960px){.md\\:hover\\:-skew-y-2:hover{--transform-skew-y:-2deg!important}}@media (min-width:960px){.md\\:hover\\:-skew-y-1:hover{--transform-skew-y:-1deg!important}}@media (min-width:960px){.md\\:focus\\:skew-x-0:focus{--transform-skew-x:0!important}}@media (min-width:960px){.md\\:focus\\:skew-x-1:focus{--transform-skew-x:1deg!important}}@media (min-width:960px){.md\\:focus\\:skew-x-2:focus{--transform-skew-x:2deg!important}}@media (min-width:960px){.md\\:focus\\:skew-x-3:focus{--transform-skew-x:3deg!important}}@media (min-width:960px){.md\\:focus\\:skew-x-6:focus{--transform-skew-x:6deg!important}}@media (min-width:960px){.md\\:focus\\:skew-x-12:focus{--transform-skew-x:12deg!important}}@media (min-width:960px){.md\\:focus\\:-skew-x-12:focus{--transform-skew-x:-12deg!important}}@media (min-width:960px){.md\\:focus\\:-skew-x-6:focus{--transform-skew-x:-6deg!important}}@media (min-width:960px){.md\\:focus\\:-skew-x-3:focus{--transform-skew-x:-3deg!important}}@media (min-width:960px){.md\\:focus\\:-skew-x-2:focus{--transform-skew-x:-2deg!important}}@media (min-width:960px){.md\\:focus\\:-skew-x-1:focus{--transform-skew-x:-1deg!important}}@media (min-width:960px){.md\\:focus\\:skew-y-0:focus{--transform-skew-y:0!important}}@media (min-width:960px){.md\\:focus\\:skew-y-1:focus{--transform-skew-y:1deg!important}}@media (min-width:960px){.md\\:focus\\:skew-y-2:focus{--transform-skew-y:2deg!important}}@media (min-width:960px){.md\\:focus\\:skew-y-3:focus{--transform-skew-y:3deg!important}}@media (min-width:960px){.md\\:focus\\:skew-y-6:focus{--transform-skew-y:6deg!important}}@media (min-width:960px){.md\\:focus\\:skew-y-12:focus{--transform-skew-y:12deg!important}}@media (min-width:960px){.md\\:focus\\:-skew-y-12:focus{--transform-skew-y:-12deg!important}}@media (min-width:960px){.md\\:focus\\:-skew-y-6:focus{--transform-skew-y:-6deg!important}}@media (min-width:960px){.md\\:focus\\:-skew-y-3:focus{--transform-skew-y:-3deg!important}}@media (min-width:960px){.md\\:focus\\:-skew-y-2:focus{--transform-skew-y:-2deg!important}}@media (min-width:960px){.md\\:focus\\:-skew-y-1:focus{--transform-skew-y:-1deg!important}}@media (min-width:960px){.md\\:transition-none{transition-property:none!important}}@media (min-width:960px){.md\\:transition-all{transition-property:all!important}}@media (min-width:960px){.md\\:transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform!important}}@media (min-width:960px){.md\\:transition-colors{transition-property:background-color,border-color,color,fill,stroke!important}}@media (min-width:960px){.md\\:transition-opacity{transition-property:opacity!important}}@media (min-width:960px){.md\\:transition-shadow{transition-property:box-shadow!important}}@media (min-width:960px){.md\\:transition-transform{transition-property:transform!important}}@media (min-width:960px){.md\\:ease-linear{transition-timing-function:linear!important}}@media (min-width:960px){.md\\:ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)!important}}@media (min-width:960px){.md\\:ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)!important}}@media (min-width:960px){.md\\:ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)!important}}@media (min-width:960px){.md\\:duration-75{transition-duration:75ms!important}}@media (min-width:960px){.md\\:duration-100{transition-duration:.1s!important}}@media (min-width:960px){.md\\:duration-150{transition-duration:.15s!important}}@media (min-width:960px){.md\\:duration-200{transition-duration:.2s!important}}@media (min-width:960px){.md\\:duration-300{transition-duration:.3s!important}}@media (min-width:960px){.md\\:duration-500{transition-duration:.5s!important}}@media (min-width:960px){.md\\:duration-700{transition-duration:.7s!important}}@media (min-width:960px){.md\\:duration-1000{transition-duration:1s!important}}@media (min-width:960px){.md\\:delay-75{transition-delay:75ms!important}}@media (min-width:960px){.md\\:delay-100{transition-delay:.1s!important}}@media (min-width:960px){.md\\:delay-150{transition-delay:.15s!important}}@media (min-width:960px){.md\\:delay-200{transition-delay:.2s!important}}@media (min-width:960px){.md\\:delay-300{transition-delay:.3s!important}}@media (min-width:960px){.md\\:delay-500{transition-delay:.5s!important}}@media (min-width:960px){.md\\:delay-700{transition-delay:.7s!important}}@media (min-width:960px){.md\\:delay-1000{transition-delay:1s!important}}@media (min-width:960px){.md\\:animate-none{animation:none!important}}@media (min-width:960px){.md\\:animate-spin{animation:spin 1s linear infinite!important}}@media (min-width:960px){.md\\:animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite!important}}@media (min-width:960px){.md\\:animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite!important}}@media (min-width:960px){.md\\:animate-bounce{animation:bounce 1s infinite!important}}@media (min-width:960px){.md\\:truncate-none{overflow:unset!important;text-overflow:unset!important;white-space:unset!important}}@media (min-width:1280px){.lg\\:container{width:100%;margin-right:auto;margin-left:auto}}@media (min-width:1280px) and (min-width:599px){.lg\\:container{max-width:599px}}@media (min-width:1280px) and (min-width:600px){.lg\\:container{max-width:600px}}@media (min-width:1280px) and (min-width:960px){.lg\\:container{max-width:960px}}@media (min-width:1280px) and (min-width:1280px){.lg\\:container{max-width:1280px}}@media (min-width:1280px) and (min-width:1920px){.lg\\:container{max-width:1920px}}@media (min-width:1280px){.lg\\:space-y-0>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(0px * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(0px * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:space-x-0>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(0px * var(--space-x-reverse))!important;margin-left:calc(0px * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:space-y-1>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(.25rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:space-x-1>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(.25rem * var(--space-x-reverse))!important;margin-left:calc(.25rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:space-y-2>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(.5rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:space-x-2>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(.5rem * var(--space-x-reverse))!important;margin-left:calc(.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:space-y-3>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(.75rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(.75rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:space-x-3>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(.75rem * var(--space-x-reverse))!important;margin-left:calc(.75rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:space-y-4>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:space-x-4>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1rem * var(--space-x-reverse))!important;margin-left:calc(1rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:space-y-5>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1.25rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:space-x-5>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1.25rem * var(--space-x-reverse))!important;margin-left:calc(1.25rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:space-y-6>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1.5rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:space-x-6>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1.5rem * var(--space-x-reverse))!important;margin-left:calc(1.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:space-y-8>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(2rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(2rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:space-x-8>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(2rem * var(--space-x-reverse))!important;margin-left:calc(2rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:space-y-10>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(2.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(2.5rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:space-x-10>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(2.5rem * var(--space-x-reverse))!important;margin-left:calc(2.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:space-y-12>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(3rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(3rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:space-x-12>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(3rem * var(--space-x-reverse))!important;margin-left:calc(3rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:space-y-16>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(4rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(4rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:space-x-16>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(4rem * var(--space-x-reverse))!important;margin-left:calc(4rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:space-y-20>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(5rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:space-x-20>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(5rem * var(--space-x-reverse))!important;margin-left:calc(5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:space-y-24>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(6rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(6rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:space-x-24>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(6rem * var(--space-x-reverse))!important;margin-left:calc(6rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:space-y-32>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(8rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(8rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:space-x-32>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(8rem * var(--space-x-reverse))!important;margin-left:calc(8rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:space-y-40>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(10rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(10rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:space-x-40>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(10rem * var(--space-x-reverse))!important;margin-left:calc(10rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:space-y-48>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(12rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(12rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:space-x-48>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(12rem * var(--space-x-reverse))!important;margin-left:calc(12rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:space-y-56>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(14rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(14rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:space-x-56>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(14rem * var(--space-x-reverse))!important;margin-left:calc(14rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:space-y-64>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(16rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(16rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:space-x-64>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(16rem * var(--space-x-reverse))!important;margin-left:calc(16rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:space-y-px>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1px * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1px * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:space-x-px>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1px * var(--space-x-reverse))!important;margin-left:calc(1px * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:-space-y-1>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-.25rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:-space-x-1>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-.25rem * var(--space-x-reverse))!important;margin-left:calc(-.25rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:-space-y-2>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-.5rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:-space-x-2>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-.5rem * var(--space-x-reverse))!important;margin-left:calc(-.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:-space-y-3>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-.75rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-.75rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:-space-x-3>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-.75rem * var(--space-x-reverse))!important;margin-left:calc(-.75rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:-space-y-4>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:-space-x-4>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1rem * var(--space-x-reverse))!important;margin-left:calc(-1rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:-space-y-5>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1.25rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:-space-x-5>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1.25rem * var(--space-x-reverse))!important;margin-left:calc(-1.25rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:-space-y-6>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1.5rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:-space-x-6>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1.5rem * var(--space-x-reverse))!important;margin-left:calc(-1.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:-space-y-8>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-2rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-2rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:-space-x-8>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-2rem * var(--space-x-reverse))!important;margin-left:calc(-2rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:-space-y-10>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-2.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-2.5rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:-space-x-10>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-2.5rem * var(--space-x-reverse))!important;margin-left:calc(-2.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:-space-y-12>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-3rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-3rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:-space-x-12>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-3rem * var(--space-x-reverse))!important;margin-left:calc(-3rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:-space-y-16>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-4rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-4rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:-space-x-16>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-4rem * var(--space-x-reverse))!important;margin-left:calc(-4rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:-space-y-20>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-5rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:-space-x-20>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-5rem * var(--space-x-reverse))!important;margin-left:calc(-5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:-space-y-24>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-6rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-6rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:-space-x-24>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-6rem * var(--space-x-reverse))!important;margin-left:calc(-6rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:-space-y-32>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-8rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-8rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:-space-x-32>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-8rem * var(--space-x-reverse))!important;margin-left:calc(-8rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:-space-y-40>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-10rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-10rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:-space-x-40>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-10rem * var(--space-x-reverse))!important;margin-left:calc(-10rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:-space-y-48>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-12rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-12rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:-space-x-48>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-12rem * var(--space-x-reverse))!important;margin-left:calc(-12rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:-space-y-56>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-14rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-14rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:-space-x-56>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-14rem * var(--space-x-reverse))!important;margin-left:calc(-14rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:-space-y-64>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-16rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-16rem * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:-space-x-64>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-16rem * var(--space-x-reverse))!important;margin-left:calc(-16rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:-space-y-px>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1px * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1px * var(--space-y-reverse))!important}}@media (min-width:1280px){.lg\\:-space-x-px>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1px * var(--space-x-reverse))!important;margin-left:calc(-1px * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1280px){.lg\\:space-y-reverse>:not(template)~:not(template){--space-y-reverse:1!important}}@media (min-width:1280px){.lg\\:space-x-reverse>:not(template)~:not(template){--space-x-reverse:1!important}}@media (min-width:1280px){.lg\\:divide-y-0>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(0px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(0px * var(--divide-y-reverse))!important}}@media (min-width:1280px){.lg\\:divide-x-0>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(0px * var(--divide-x-reverse))!important;border-left-width:calc(0px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:1280px){.lg\\:divide-y-2>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(2px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(2px * var(--divide-y-reverse))!important}}@media (min-width:1280px){.lg\\:divide-x-2>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(2px * var(--divide-x-reverse))!important;border-left-width:calc(2px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:1280px){.lg\\:divide-y-4>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(4px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(4px * var(--divide-y-reverse))!important}}@media (min-width:1280px){.lg\\:divide-x-4>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(4px * var(--divide-x-reverse))!important;border-left-width:calc(4px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:1280px){.lg\\:divide-y-8>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(8px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(8px * var(--divide-y-reverse))!important}}@media (min-width:1280px){.lg\\:divide-x-8>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(8px * var(--divide-x-reverse))!important;border-left-width:calc(8px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:1280px){.lg\\:divide-y>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(1px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(1px * var(--divide-y-reverse))!important}}@media (min-width:1280px){.lg\\:divide-x>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(1px * var(--divide-x-reverse))!important;border-left-width:calc(1px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:1280px){.lg\\:divide-y-reverse>:not(template)~:not(template){--divide-y-reverse:1!important}}@media (min-width:1280px){.lg\\:divide-x-reverse>:not(template)~:not(template){--divide-x-reverse:1!important}}@media (min-width:1280px){.lg\\:divide-transparent>:not(template)~:not(template){border-color:transparent!important}}@media (min-width:1280px){.lg\\:divide-current>:not(template)~:not(template){border-color:currentColor!important}}@media (min-width:1280px){.lg\\:divide-black>:not(template)~:not(template){--divide-opacity:1!important;border-color:#000!important;border-color:rgba(0,0,0,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-white>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fff!important;border-color:rgba(255,255,255,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-gray-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f7fafc!important;border-color:rgba(247,250,252,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-gray-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#edf2f7!important;border-color:rgba(237,242,247,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-gray-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e2e8f0!important;border-color:rgba(226,232,240,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-gray-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#cbd5e0!important;border-color:rgba(203,213,224,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-gray-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#a0aec0!important;border-color:rgba(160,174,192,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-gray-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#718096!important;border-color:rgba(113,128,150,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-gray-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4a5568!important;border-color:rgba(74,85,104,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-gray-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2d3748!important;border-color:rgba(45,55,72,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-gray-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#1a202c!important;border-color:rgba(26,32,44,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-red-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fff5f5!important;border-color:rgba(255,245,245,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-red-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fed7d7!important;border-color:rgba(254,215,215,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-red-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#feb2b2!important;border-color:rgba(254,178,178,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-red-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fc8181!important;border-color:rgba(252,129,129,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-red-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f56565!important;border-color:rgba(245,101,101,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-red-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e53e3e!important;border-color:rgba(229,62,62,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-red-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c53030!important;border-color:rgba(197,48,48,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-red-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9b2c2c!important;border-color:rgba(155,44,44,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-red-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#742a2a!important;border-color:rgba(116,42,42,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-orange-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fffaf0!important;border-color:rgba(255,250,240,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-orange-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#feebc8!important;border-color:rgba(254,235,200,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-orange-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fbd38d!important;border-color:rgba(251,211,141,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-orange-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f6ad55!important;border-color:rgba(246,173,85,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-orange-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ed8936!important;border-color:rgba(237,137,54,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-orange-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#dd6b20!important;border-color:rgba(221,107,32,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-orange-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c05621!important;border-color:rgba(192,86,33,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-orange-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9c4221!important;border-color:rgba(156,66,33,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-orange-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#7b341e!important;border-color:rgba(123,52,30,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-yellow-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:ivory!important;border-color:rgba(255,255,240,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-yellow-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fefcbf!important;border-color:rgba(254,252,191,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-yellow-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#faf089!important;border-color:rgba(250,240,137,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-yellow-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f6e05e!important;border-color:rgba(246,224,94,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-yellow-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ecc94b!important;border-color:rgba(236,201,75,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-yellow-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#d69e2e!important;border-color:rgba(214,158,46,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-yellow-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b7791f!important;border-color:rgba(183,121,31,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-yellow-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#975a16!important;border-color:rgba(151,90,22,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-yellow-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#744210!important;border-color:rgba(116,66,16,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-green-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f0fff4!important;border-color:rgba(240,255,244,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-green-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c6f6d5!important;border-color:rgba(198,246,213,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-green-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9ae6b4!important;border-color:rgba(154,230,180,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-green-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#68d391!important;border-color:rgba(104,211,145,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-green-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#48bb78!important;border-color:rgba(72,187,120,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-green-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#38a169!important;border-color:rgba(56,161,105,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-green-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2f855a!important;border-color:rgba(47,133,90,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-green-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#276749!important;border-color:rgba(39,103,73,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-green-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#22543d!important;border-color:rgba(34,84,61,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-teal-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e6fffa!important;border-color:rgba(230,255,250,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-teal-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b2f5ea!important;border-color:rgba(178,245,234,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-teal-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#81e6d9!important;border-color:rgba(129,230,217,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-teal-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4fd1c5!important;border-color:rgba(79,209,197,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-teal-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#38b2ac!important;border-color:rgba(56,178,172,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-teal-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#319795!important;border-color:rgba(49,151,149,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-teal-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2c7a7b!important;border-color:rgba(44,122,123,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-teal-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#285e61!important;border-color:rgba(40,94,97,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-teal-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#234e52!important;border-color:rgba(35,78,82,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-blue-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ebf8ff!important;border-color:rgba(235,248,255,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-blue-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#bee3f8!important;border-color:rgba(190,227,248,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-blue-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#90cdf4!important;border-color:rgba(144,205,244,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-blue-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#63b3ed!important;border-color:rgba(99,179,237,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-blue-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4299e1!important;border-color:rgba(66,153,225,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-blue-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#3182ce!important;border-color:rgba(49,130,206,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-blue-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2b6cb0!important;border-color:rgba(43,108,176,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-blue-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2c5282!important;border-color:rgba(44,82,130,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-blue-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2a4365!important;border-color:rgba(42,67,101,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-indigo-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ebf4ff!important;border-color:rgba(235,244,255,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-indigo-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c3dafe!important;border-color:rgba(195,218,254,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-indigo-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#a3bffa!important;border-color:rgba(163,191,250,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-indigo-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#7f9cf5!important;border-color:rgba(127,156,245,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-indigo-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#667eea!important;border-color:rgba(102,126,234,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-indigo-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#5a67d8!important;border-color:rgba(90,103,216,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-indigo-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4c51bf!important;border-color:rgba(76,81,191,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-indigo-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#434190!important;border-color:rgba(67,65,144,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-indigo-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#3c366b!important;border-color:rgba(60,54,107,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-purple-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#faf5ff!important;border-color:rgba(250,245,255,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-purple-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e9d8fd!important;border-color:rgba(233,216,253,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-purple-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#d6bcfa!important;border-color:rgba(214,188,250,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-purple-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b794f4!important;border-color:rgba(183,148,244,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-purple-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9f7aea!important;border-color:rgba(159,122,234,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-purple-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#805ad5!important;border-color:rgba(128,90,213,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-purple-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#6b46c1!important;border-color:rgba(107,70,193,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-purple-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#553c9a!important;border-color:rgba(85,60,154,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-purple-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#44337a!important;border-color:rgba(68,51,122,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-pink-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fff5f7!important;border-color:rgba(255,245,247,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-pink-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fed7e2!important;border-color:rgba(254,215,226,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-pink-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fbb6ce!important;border-color:rgba(251,182,206,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-pink-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f687b3!important;border-color:rgba(246,135,179,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-pink-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ed64a6!important;border-color:rgba(237,100,166,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-pink-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#d53f8c!important;border-color:rgba(213,63,140,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-pink-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b83280!important;border-color:rgba(184,50,128,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-pink-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#97266d!important;border-color:rgba(151,38,109,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-pink-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#702459!important;border-color:rgba(112,36,89,var(--divide-opacity))!important}}@media (min-width:1280px){.lg\\:divide-solid>:not(template)~:not(template){border-style:solid!important}}@media (min-width:1280px){.lg\\:divide-dashed>:not(template)~:not(template){border-style:dashed!important}}@media (min-width:1280px){.lg\\:divide-dotted>:not(template)~:not(template){border-style:dotted!important}}@media (min-width:1280px){.lg\\:divide-double>:not(template)~:not(template){border-style:double!important}}@media (min-width:1280px){.lg\\:divide-none>:not(template)~:not(template){border-style:none!important}}@media (min-width:1280px){.lg\\:divide-opacity-0>:not(template)~:not(template){--divide-opacity:0!important}}@media (min-width:1280px){.lg\\:divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25!important}}@media (min-width:1280px){.lg\\:divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5!important}}@media (min-width:1280px){.lg\\:divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75!important}}@media (min-width:1280px){.lg\\:divide-opacity-100>:not(template)~:not(template){--divide-opacity:1!important}}@media (min-width:1280px){.lg\\:sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}}@media (min-width:1280px){.lg\\:not-sr-only{position:static!important;width:auto!important;height:auto!important;padding:0!important;margin:0!important;overflow:visible!important;clip:auto!important;white-space:normal!important}}@media (min-width:1280px){.lg\\:focus\\:sr-only:focus{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}}@media (min-width:1280px){.lg\\:focus\\:not-sr-only:focus{position:static!important;width:auto!important;height:auto!important;padding:0!important;margin:0!important;overflow:visible!important;clip:auto!important;white-space:normal!important}}@media (min-width:1280px){.lg\\:appearance-none{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important}}@media (min-width:1280px){.lg\\:bg-fixed{background-attachment:fixed!important}}@media (min-width:1280px){.lg\\:bg-local{background-attachment:local!important}}@media (min-width:1280px){.lg\\:bg-scroll{background-attachment:scroll!important}}@media (min-width:1280px){.lg\\:bg-clip-border{background-clip:initial!important}}@media (min-width:1280px){.lg\\:bg-clip-padding{background-clip:padding-box!important}}@media (min-width:1280px){.lg\\:bg-clip-content{background-clip:content-box!important}}@media (min-width:1280px){.lg\\:bg-clip-text{-webkit-background-clip:text!important;background-clip:text!important}}@media (min-width:1280px){.lg\\:bg-transparent{background-color:initial!important}}@media (min-width:1280px){.lg\\:bg-current{background-color:currentColor!important}}@media (min-width:1280px){.lg\\:bg-black{--bg-opacity:1!important;background-color:#000!important;background-color:rgba(0,0,0,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-white{--bg-opacity:1!important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-gray-100{--bg-opacity:1!important;background-color:#f7fafc!important;background-color:rgba(247,250,252,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-gray-200{--bg-opacity:1!important;background-color:#edf2f7!important;background-color:rgba(237,242,247,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-gray-300{--bg-opacity:1!important;background-color:#e2e8f0!important;background-color:rgba(226,232,240,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-gray-400{--bg-opacity:1!important;background-color:#cbd5e0!important;background-color:rgba(203,213,224,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-gray-500{--bg-opacity:1!important;background-color:#a0aec0!important;background-color:rgba(160,174,192,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-gray-600{--bg-opacity:1!important;background-color:#718096!important;background-color:rgba(113,128,150,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-gray-700{--bg-opacity:1!important;background-color:#4a5568!important;background-color:rgba(74,85,104,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-gray-800{--bg-opacity:1!important;background-color:#2d3748!important;background-color:rgba(45,55,72,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-gray-900{--bg-opacity:1!important;background-color:#1a202c!important;background-color:rgba(26,32,44,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-red-100{--bg-opacity:1!important;background-color:#fff5f5!important;background-color:rgba(255,245,245,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-red-200{--bg-opacity:1!important;background-color:#fed7d7!important;background-color:rgba(254,215,215,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-red-300{--bg-opacity:1!important;background-color:#feb2b2!important;background-color:rgba(254,178,178,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-red-400{--bg-opacity:1!important;background-color:#fc8181!important;background-color:rgba(252,129,129,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-red-500{--bg-opacity:1!important;background-color:#f56565!important;background-color:rgba(245,101,101,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-red-600{--bg-opacity:1!important;background-color:#e53e3e!important;background-color:rgba(229,62,62,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-red-700{--bg-opacity:1!important;background-color:#c53030!important;background-color:rgba(197,48,48,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-red-800{--bg-opacity:1!important;background-color:#9b2c2c!important;background-color:rgba(155,44,44,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-red-900{--bg-opacity:1!important;background-color:#742a2a!important;background-color:rgba(116,42,42,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-orange-100{--bg-opacity:1!important;background-color:#fffaf0!important;background-color:rgba(255,250,240,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-orange-200{--bg-opacity:1!important;background-color:#feebc8!important;background-color:rgba(254,235,200,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-orange-300{--bg-opacity:1!important;background-color:#fbd38d!important;background-color:rgba(251,211,141,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-orange-400{--bg-opacity:1!important;background-color:#f6ad55!important;background-color:rgba(246,173,85,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-orange-500{--bg-opacity:1!important;background-color:#ed8936!important;background-color:rgba(237,137,54,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-orange-600{--bg-opacity:1!important;background-color:#dd6b20!important;background-color:rgba(221,107,32,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-orange-700{--bg-opacity:1!important;background-color:#c05621!important;background-color:rgba(192,86,33,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-orange-800{--bg-opacity:1!important;background-color:#9c4221!important;background-color:rgba(156,66,33,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-orange-900{--bg-opacity:1!important;background-color:#7b341e!important;background-color:rgba(123,52,30,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-yellow-100{--bg-opacity:1!important;background-color:ivory!important;background-color:rgba(255,255,240,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-yellow-200{--bg-opacity:1!important;background-color:#fefcbf!important;background-color:rgba(254,252,191,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-yellow-300{--bg-opacity:1!important;background-color:#faf089!important;background-color:rgba(250,240,137,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-yellow-400{--bg-opacity:1!important;background-color:#f6e05e!important;background-color:rgba(246,224,94,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-yellow-500{--bg-opacity:1!important;background-color:#ecc94b!important;background-color:rgba(236,201,75,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-yellow-600{--bg-opacity:1!important;background-color:#d69e2e!important;background-color:rgba(214,158,46,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-yellow-700{--bg-opacity:1!important;background-color:#b7791f!important;background-color:rgba(183,121,31,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-yellow-800{--bg-opacity:1!important;background-color:#975a16!important;background-color:rgba(151,90,22,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-yellow-900{--bg-opacity:1!important;background-color:#744210!important;background-color:rgba(116,66,16,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-green-100{--bg-opacity:1!important;background-color:#f0fff4!important;background-color:rgba(240,255,244,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-green-200{--bg-opacity:1!important;background-color:#c6f6d5!important;background-color:rgba(198,246,213,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-green-300{--bg-opacity:1!important;background-color:#9ae6b4!important;background-color:rgba(154,230,180,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-green-400{--bg-opacity:1!important;background-color:#68d391!important;background-color:rgba(104,211,145,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-green-500{--bg-opacity:1!important;background-color:#48bb78!important;background-color:rgba(72,187,120,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-green-600{--bg-opacity:1!important;background-color:#38a169!important;background-color:rgba(56,161,105,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-green-700{--bg-opacity:1!important;background-color:#2f855a!important;background-color:rgba(47,133,90,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-green-800{--bg-opacity:1!important;background-color:#276749!important;background-color:rgba(39,103,73,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-green-900{--bg-opacity:1!important;background-color:#22543d!important;background-color:rgba(34,84,61,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-teal-100{--bg-opacity:1!important;background-color:#e6fffa!important;background-color:rgba(230,255,250,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-teal-200{--bg-opacity:1!important;background-color:#b2f5ea!important;background-color:rgba(178,245,234,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-teal-300{--bg-opacity:1!important;background-color:#81e6d9!important;background-color:rgba(129,230,217,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-teal-400{--bg-opacity:1!important;background-color:#4fd1c5!important;background-color:rgba(79,209,197,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-teal-500{--bg-opacity:1!important;background-color:#38b2ac!important;background-color:rgba(56,178,172,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-teal-600{--bg-opacity:1!important;background-color:#319795!important;background-color:rgba(49,151,149,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-teal-700{--bg-opacity:1!important;background-color:#2c7a7b!important;background-color:rgba(44,122,123,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-teal-800{--bg-opacity:1!important;background-color:#285e61!important;background-color:rgba(40,94,97,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-teal-900{--bg-opacity:1!important;background-color:#234e52!important;background-color:rgba(35,78,82,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-blue-100{--bg-opacity:1!important;background-color:#ebf8ff!important;background-color:rgba(235,248,255,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-blue-200{--bg-opacity:1!important;background-color:#bee3f8!important;background-color:rgba(190,227,248,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-blue-300{--bg-opacity:1!important;background-color:#90cdf4!important;background-color:rgba(144,205,244,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-blue-400{--bg-opacity:1!important;background-color:#63b3ed!important;background-color:rgba(99,179,237,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-blue-500{--bg-opacity:1!important;background-color:#4299e1!important;background-color:rgba(66,153,225,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-blue-600{--bg-opacity:1!important;background-color:#3182ce!important;background-color:rgba(49,130,206,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-blue-700{--bg-opacity:1!important;background-color:#2b6cb0!important;background-color:rgba(43,108,176,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-blue-800{--bg-opacity:1!important;background-color:#2c5282!important;background-color:rgba(44,82,130,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-blue-900{--bg-opacity:1!important;background-color:#2a4365!important;background-color:rgba(42,67,101,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-indigo-100{--bg-opacity:1!important;background-color:#ebf4ff!important;background-color:rgba(235,244,255,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-indigo-200{--bg-opacity:1!important;background-color:#c3dafe!important;background-color:rgba(195,218,254,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-indigo-300{--bg-opacity:1!important;background-color:#a3bffa!important;background-color:rgba(163,191,250,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-indigo-400{--bg-opacity:1!important;background-color:#7f9cf5!important;background-color:rgba(127,156,245,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-indigo-500{--bg-opacity:1!important;background-color:#667eea!important;background-color:rgba(102,126,234,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-indigo-600{--bg-opacity:1!important;background-color:#5a67d8!important;background-color:rgba(90,103,216,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-indigo-700{--bg-opacity:1!important;background-color:#4c51bf!important;background-color:rgba(76,81,191,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-indigo-800{--bg-opacity:1!important;background-color:#434190!important;background-color:rgba(67,65,144,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-indigo-900{--bg-opacity:1!important;background-color:#3c366b!important;background-color:rgba(60,54,107,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-purple-100{--bg-opacity:1!important;background-color:#faf5ff!important;background-color:rgba(250,245,255,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-purple-200{--bg-opacity:1!important;background-color:#e9d8fd!important;background-color:rgba(233,216,253,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-purple-300{--bg-opacity:1!important;background-color:#d6bcfa!important;background-color:rgba(214,188,250,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-purple-400{--bg-opacity:1!important;background-color:#b794f4!important;background-color:rgba(183,148,244,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-purple-500{--bg-opacity:1!important;background-color:#9f7aea!important;background-color:rgba(159,122,234,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-purple-600{--bg-opacity:1!important;background-color:#805ad5!important;background-color:rgba(128,90,213,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-purple-700{--bg-opacity:1!important;background-color:#6b46c1!important;background-color:rgba(107,70,193,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-purple-800{--bg-opacity:1!important;background-color:#553c9a!important;background-color:rgba(85,60,154,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-purple-900{--bg-opacity:1!important;background-color:#44337a!important;background-color:rgba(68,51,122,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-pink-100{--bg-opacity:1!important;background-color:#fff5f7!important;background-color:rgba(255,245,247,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-pink-200{--bg-opacity:1!important;background-color:#fed7e2!important;background-color:rgba(254,215,226,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-pink-300{--bg-opacity:1!important;background-color:#fbb6ce!important;background-color:rgba(251,182,206,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-pink-400{--bg-opacity:1!important;background-color:#f687b3!important;background-color:rgba(246,135,179,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-pink-500{--bg-opacity:1!important;background-color:#ed64a6!important;background-color:rgba(237,100,166,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-pink-600{--bg-opacity:1!important;background-color:#d53f8c!important;background-color:rgba(213,63,140,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-pink-700{--bg-opacity:1!important;background-color:#b83280!important;background-color:rgba(184,50,128,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-pink-800{--bg-opacity:1!important;background-color:#97266d!important;background-color:rgba(151,38,109,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-pink-900{--bg-opacity:1!important;background-color:#702459!important;background-color:rgba(112,36,89,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-transparent:hover{background-color:initial!important}}@media (min-width:1280px){.lg\\:hover\\:bg-current:hover{background-color:currentColor!important}}@media (min-width:1280px){.lg\\:hover\\:bg-black:hover{--bg-opacity:1!important;background-color:#000!important;background-color:rgba(0,0,0,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-white:hover{--bg-opacity:1!important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-gray-100:hover{--bg-opacity:1!important;background-color:#f7fafc!important;background-color:rgba(247,250,252,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-gray-200:hover{--bg-opacity:1!important;background-color:#edf2f7!important;background-color:rgba(237,242,247,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-gray-300:hover{--bg-opacity:1!important;background-color:#e2e8f0!important;background-color:rgba(226,232,240,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-gray-400:hover{--bg-opacity:1!important;background-color:#cbd5e0!important;background-color:rgba(203,213,224,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-gray-500:hover{--bg-opacity:1!important;background-color:#a0aec0!important;background-color:rgba(160,174,192,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-gray-600:hover{--bg-opacity:1!important;background-color:#718096!important;background-color:rgba(113,128,150,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-gray-700:hover{--bg-opacity:1!important;background-color:#4a5568!important;background-color:rgba(74,85,104,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-gray-800:hover{--bg-opacity:1!important;background-color:#2d3748!important;background-color:rgba(45,55,72,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-gray-900:hover{--bg-opacity:1!important;background-color:#1a202c!important;background-color:rgba(26,32,44,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-red-100:hover{--bg-opacity:1!important;background-color:#fff5f5!important;background-color:rgba(255,245,245,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-red-200:hover{--bg-opacity:1!important;background-color:#fed7d7!important;background-color:rgba(254,215,215,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-red-300:hover{--bg-opacity:1!important;background-color:#feb2b2!important;background-color:rgba(254,178,178,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-red-400:hover{--bg-opacity:1!important;background-color:#fc8181!important;background-color:rgba(252,129,129,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-red-500:hover{--bg-opacity:1!important;background-color:#f56565!important;background-color:rgba(245,101,101,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-red-600:hover{--bg-opacity:1!important;background-color:#e53e3e!important;background-color:rgba(229,62,62,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-red-700:hover{--bg-opacity:1!important;background-color:#c53030!important;background-color:rgba(197,48,48,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-red-800:hover{--bg-opacity:1!important;background-color:#9b2c2c!important;background-color:rgba(155,44,44,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-red-900:hover{--bg-opacity:1!important;background-color:#742a2a!important;background-color:rgba(116,42,42,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-orange-100:hover{--bg-opacity:1!important;background-color:#fffaf0!important;background-color:rgba(255,250,240,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-orange-200:hover{--bg-opacity:1!important;background-color:#feebc8!important;background-color:rgba(254,235,200,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-orange-300:hover{--bg-opacity:1!important;background-color:#fbd38d!important;background-color:rgba(251,211,141,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-orange-400:hover{--bg-opacity:1!important;background-color:#f6ad55!important;background-color:rgba(246,173,85,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-orange-500:hover{--bg-opacity:1!important;background-color:#ed8936!important;background-color:rgba(237,137,54,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-orange-600:hover{--bg-opacity:1!important;background-color:#dd6b20!important;background-color:rgba(221,107,32,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-orange-700:hover{--bg-opacity:1!important;background-color:#c05621!important;background-color:rgba(192,86,33,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-orange-800:hover{--bg-opacity:1!important;background-color:#9c4221!important;background-color:rgba(156,66,33,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-orange-900:hover{--bg-opacity:1!important;background-color:#7b341e!important;background-color:rgba(123,52,30,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-yellow-100:hover{--bg-opacity:1!important;background-color:ivory!important;background-color:rgba(255,255,240,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-yellow-200:hover{--bg-opacity:1!important;background-color:#fefcbf!important;background-color:rgba(254,252,191,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-yellow-300:hover{--bg-opacity:1!important;background-color:#faf089!important;background-color:rgba(250,240,137,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-yellow-400:hover{--bg-opacity:1!important;background-color:#f6e05e!important;background-color:rgba(246,224,94,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-yellow-500:hover{--bg-opacity:1!important;background-color:#ecc94b!important;background-color:rgba(236,201,75,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-yellow-600:hover{--bg-opacity:1!important;background-color:#d69e2e!important;background-color:rgba(214,158,46,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-yellow-700:hover{--bg-opacity:1!important;background-color:#b7791f!important;background-color:rgba(183,121,31,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-yellow-800:hover{--bg-opacity:1!important;background-color:#975a16!important;background-color:rgba(151,90,22,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-yellow-900:hover{--bg-opacity:1!important;background-color:#744210!important;background-color:rgba(116,66,16,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-green-100:hover{--bg-opacity:1!important;background-color:#f0fff4!important;background-color:rgba(240,255,244,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-green-200:hover{--bg-opacity:1!important;background-color:#c6f6d5!important;background-color:rgba(198,246,213,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-green-300:hover{--bg-opacity:1!important;background-color:#9ae6b4!important;background-color:rgba(154,230,180,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-green-400:hover{--bg-opacity:1!important;background-color:#68d391!important;background-color:rgba(104,211,145,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-green-500:hover{--bg-opacity:1!important;background-color:#48bb78!important;background-color:rgba(72,187,120,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-green-600:hover{--bg-opacity:1!important;background-color:#38a169!important;background-color:rgba(56,161,105,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-green-700:hover{--bg-opacity:1!important;background-color:#2f855a!important;background-color:rgba(47,133,90,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-green-800:hover{--bg-opacity:1!important;background-color:#276749!important;background-color:rgba(39,103,73,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-green-900:hover{--bg-opacity:1!important;background-color:#22543d!important;background-color:rgba(34,84,61,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-teal-100:hover{--bg-opacity:1!important;background-color:#e6fffa!important;background-color:rgba(230,255,250,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-teal-200:hover{--bg-opacity:1!important;background-color:#b2f5ea!important;background-color:rgba(178,245,234,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-teal-300:hover{--bg-opacity:1!important;background-color:#81e6d9!important;background-color:rgba(129,230,217,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-teal-400:hover{--bg-opacity:1!important;background-color:#4fd1c5!important;background-color:rgba(79,209,197,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-teal-500:hover{--bg-opacity:1!important;background-color:#38b2ac!important;background-color:rgba(56,178,172,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-teal-600:hover{--bg-opacity:1!important;background-color:#319795!important;background-color:rgba(49,151,149,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-teal-700:hover{--bg-opacity:1!important;background-color:#2c7a7b!important;background-color:rgba(44,122,123,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-teal-800:hover{--bg-opacity:1!important;background-color:#285e61!important;background-color:rgba(40,94,97,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-teal-900:hover{--bg-opacity:1!important;background-color:#234e52!important;background-color:rgba(35,78,82,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-blue-100:hover{--bg-opacity:1!important;background-color:#ebf8ff!important;background-color:rgba(235,248,255,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-blue-200:hover{--bg-opacity:1!important;background-color:#bee3f8!important;background-color:rgba(190,227,248,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-blue-300:hover{--bg-opacity:1!important;background-color:#90cdf4!important;background-color:rgba(144,205,244,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-blue-400:hover{--bg-opacity:1!important;background-color:#63b3ed!important;background-color:rgba(99,179,237,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-blue-500:hover{--bg-opacity:1!important;background-color:#4299e1!important;background-color:rgba(66,153,225,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-blue-600:hover{--bg-opacity:1!important;background-color:#3182ce!important;background-color:rgba(49,130,206,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-blue-700:hover{--bg-opacity:1!important;background-color:#2b6cb0!important;background-color:rgba(43,108,176,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-blue-800:hover{--bg-opacity:1!important;background-color:#2c5282!important;background-color:rgba(44,82,130,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-blue-900:hover{--bg-opacity:1!important;background-color:#2a4365!important;background-color:rgba(42,67,101,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-indigo-100:hover{--bg-opacity:1!important;background-color:#ebf4ff!important;background-color:rgba(235,244,255,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-indigo-200:hover{--bg-opacity:1!important;background-color:#c3dafe!important;background-color:rgba(195,218,254,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-indigo-300:hover{--bg-opacity:1!important;background-color:#a3bffa!important;background-color:rgba(163,191,250,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-indigo-400:hover{--bg-opacity:1!important;background-color:#7f9cf5!important;background-color:rgba(127,156,245,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-indigo-500:hover{--bg-opacity:1!important;background-color:#667eea!important;background-color:rgba(102,126,234,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-indigo-600:hover{--bg-opacity:1!important;background-color:#5a67d8!important;background-color:rgba(90,103,216,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-indigo-700:hover{--bg-opacity:1!important;background-color:#4c51bf!important;background-color:rgba(76,81,191,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-indigo-800:hover{--bg-opacity:1!important;background-color:#434190!important;background-color:rgba(67,65,144,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-indigo-900:hover{--bg-opacity:1!important;background-color:#3c366b!important;background-color:rgba(60,54,107,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-purple-100:hover{--bg-opacity:1!important;background-color:#faf5ff!important;background-color:rgba(250,245,255,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-purple-200:hover{--bg-opacity:1!important;background-color:#e9d8fd!important;background-color:rgba(233,216,253,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-purple-300:hover{--bg-opacity:1!important;background-color:#d6bcfa!important;background-color:rgba(214,188,250,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-purple-400:hover{--bg-opacity:1!important;background-color:#b794f4!important;background-color:rgba(183,148,244,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-purple-500:hover{--bg-opacity:1!important;background-color:#9f7aea!important;background-color:rgba(159,122,234,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-purple-600:hover{--bg-opacity:1!important;background-color:#805ad5!important;background-color:rgba(128,90,213,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-purple-700:hover{--bg-opacity:1!important;background-color:#6b46c1!important;background-color:rgba(107,70,193,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-purple-800:hover{--bg-opacity:1!important;background-color:#553c9a!important;background-color:rgba(85,60,154,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-purple-900:hover{--bg-opacity:1!important;background-color:#44337a!important;background-color:rgba(68,51,122,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-pink-100:hover{--bg-opacity:1!important;background-color:#fff5f7!important;background-color:rgba(255,245,247,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-pink-200:hover{--bg-opacity:1!important;background-color:#fed7e2!important;background-color:rgba(254,215,226,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-pink-300:hover{--bg-opacity:1!important;background-color:#fbb6ce!important;background-color:rgba(251,182,206,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-pink-400:hover{--bg-opacity:1!important;background-color:#f687b3!important;background-color:rgba(246,135,179,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-pink-500:hover{--bg-opacity:1!important;background-color:#ed64a6!important;background-color:rgba(237,100,166,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-pink-600:hover{--bg-opacity:1!important;background-color:#d53f8c!important;background-color:rgba(213,63,140,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-pink-700:hover{--bg-opacity:1!important;background-color:#b83280!important;background-color:rgba(184,50,128,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-pink-800:hover{--bg-opacity:1!important;background-color:#97266d!important;background-color:rgba(151,38,109,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:bg-pink-900:hover{--bg-opacity:1!important;background-color:#702459!important;background-color:rgba(112,36,89,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-transparent:focus{background-color:initial!important}}@media (min-width:1280px){.lg\\:focus\\:bg-current:focus{background-color:currentColor!important}}@media (min-width:1280px){.lg\\:focus\\:bg-black:focus{--bg-opacity:1!important;background-color:#000!important;background-color:rgba(0,0,0,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-white:focus{--bg-opacity:1!important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-gray-100:focus{--bg-opacity:1!important;background-color:#f7fafc!important;background-color:rgba(247,250,252,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-gray-200:focus{--bg-opacity:1!important;background-color:#edf2f7!important;background-color:rgba(237,242,247,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-gray-300:focus{--bg-opacity:1!important;background-color:#e2e8f0!important;background-color:rgba(226,232,240,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-gray-400:focus{--bg-opacity:1!important;background-color:#cbd5e0!important;background-color:rgba(203,213,224,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-gray-500:focus{--bg-opacity:1!important;background-color:#a0aec0!important;background-color:rgba(160,174,192,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-gray-600:focus{--bg-opacity:1!important;background-color:#718096!important;background-color:rgba(113,128,150,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-gray-700:focus{--bg-opacity:1!important;background-color:#4a5568!important;background-color:rgba(74,85,104,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-gray-800:focus{--bg-opacity:1!important;background-color:#2d3748!important;background-color:rgba(45,55,72,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-gray-900:focus{--bg-opacity:1!important;background-color:#1a202c!important;background-color:rgba(26,32,44,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-red-100:focus{--bg-opacity:1!important;background-color:#fff5f5!important;background-color:rgba(255,245,245,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-red-200:focus{--bg-opacity:1!important;background-color:#fed7d7!important;background-color:rgba(254,215,215,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-red-300:focus{--bg-opacity:1!important;background-color:#feb2b2!important;background-color:rgba(254,178,178,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-red-400:focus{--bg-opacity:1!important;background-color:#fc8181!important;background-color:rgba(252,129,129,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-red-500:focus{--bg-opacity:1!important;background-color:#f56565!important;background-color:rgba(245,101,101,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-red-600:focus{--bg-opacity:1!important;background-color:#e53e3e!important;background-color:rgba(229,62,62,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-red-700:focus{--bg-opacity:1!important;background-color:#c53030!important;background-color:rgba(197,48,48,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-red-800:focus{--bg-opacity:1!important;background-color:#9b2c2c!important;background-color:rgba(155,44,44,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-red-900:focus{--bg-opacity:1!important;background-color:#742a2a!important;background-color:rgba(116,42,42,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-orange-100:focus{--bg-opacity:1!important;background-color:#fffaf0!important;background-color:rgba(255,250,240,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-orange-200:focus{--bg-opacity:1!important;background-color:#feebc8!important;background-color:rgba(254,235,200,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-orange-300:focus{--bg-opacity:1!important;background-color:#fbd38d!important;background-color:rgba(251,211,141,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-orange-400:focus{--bg-opacity:1!important;background-color:#f6ad55!important;background-color:rgba(246,173,85,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-orange-500:focus{--bg-opacity:1!important;background-color:#ed8936!important;background-color:rgba(237,137,54,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-orange-600:focus{--bg-opacity:1!important;background-color:#dd6b20!important;background-color:rgba(221,107,32,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-orange-700:focus{--bg-opacity:1!important;background-color:#c05621!important;background-color:rgba(192,86,33,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-orange-800:focus{--bg-opacity:1!important;background-color:#9c4221!important;background-color:rgba(156,66,33,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-orange-900:focus{--bg-opacity:1!important;background-color:#7b341e!important;background-color:rgba(123,52,30,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-yellow-100:focus{--bg-opacity:1!important;background-color:ivory!important;background-color:rgba(255,255,240,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-yellow-200:focus{--bg-opacity:1!important;background-color:#fefcbf!important;background-color:rgba(254,252,191,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-yellow-300:focus{--bg-opacity:1!important;background-color:#faf089!important;background-color:rgba(250,240,137,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-yellow-400:focus{--bg-opacity:1!important;background-color:#f6e05e!important;background-color:rgba(246,224,94,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-yellow-500:focus{--bg-opacity:1!important;background-color:#ecc94b!important;background-color:rgba(236,201,75,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-yellow-600:focus{--bg-opacity:1!important;background-color:#d69e2e!important;background-color:rgba(214,158,46,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-yellow-700:focus{--bg-opacity:1!important;background-color:#b7791f!important;background-color:rgba(183,121,31,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-yellow-800:focus{--bg-opacity:1!important;background-color:#975a16!important;background-color:rgba(151,90,22,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-yellow-900:focus{--bg-opacity:1!important;background-color:#744210!important;background-color:rgba(116,66,16,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-green-100:focus{--bg-opacity:1!important;background-color:#f0fff4!important;background-color:rgba(240,255,244,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-green-200:focus{--bg-opacity:1!important;background-color:#c6f6d5!important;background-color:rgba(198,246,213,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-green-300:focus{--bg-opacity:1!important;background-color:#9ae6b4!important;background-color:rgba(154,230,180,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-green-400:focus{--bg-opacity:1!important;background-color:#68d391!important;background-color:rgba(104,211,145,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-green-500:focus{--bg-opacity:1!important;background-color:#48bb78!important;background-color:rgba(72,187,120,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-green-600:focus{--bg-opacity:1!important;background-color:#38a169!important;background-color:rgba(56,161,105,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-green-700:focus{--bg-opacity:1!important;background-color:#2f855a!important;background-color:rgba(47,133,90,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-green-800:focus{--bg-opacity:1!important;background-color:#276749!important;background-color:rgba(39,103,73,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-green-900:focus{--bg-opacity:1!important;background-color:#22543d!important;background-color:rgba(34,84,61,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-teal-100:focus{--bg-opacity:1!important;background-color:#e6fffa!important;background-color:rgba(230,255,250,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-teal-200:focus{--bg-opacity:1!important;background-color:#b2f5ea!important;background-color:rgba(178,245,234,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-teal-300:focus{--bg-opacity:1!important;background-color:#81e6d9!important;background-color:rgba(129,230,217,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-teal-400:focus{--bg-opacity:1!important;background-color:#4fd1c5!important;background-color:rgba(79,209,197,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-teal-500:focus{--bg-opacity:1!important;background-color:#38b2ac!important;background-color:rgba(56,178,172,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-teal-600:focus{--bg-opacity:1!important;background-color:#319795!important;background-color:rgba(49,151,149,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-teal-700:focus{--bg-opacity:1!important;background-color:#2c7a7b!important;background-color:rgba(44,122,123,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-teal-800:focus{--bg-opacity:1!important;background-color:#285e61!important;background-color:rgba(40,94,97,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-teal-900:focus{--bg-opacity:1!important;background-color:#234e52!important;background-color:rgba(35,78,82,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-blue-100:focus{--bg-opacity:1!important;background-color:#ebf8ff!important;background-color:rgba(235,248,255,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-blue-200:focus{--bg-opacity:1!important;background-color:#bee3f8!important;background-color:rgba(190,227,248,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-blue-300:focus{--bg-opacity:1!important;background-color:#90cdf4!important;background-color:rgba(144,205,244,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-blue-400:focus{--bg-opacity:1!important;background-color:#63b3ed!important;background-color:rgba(99,179,237,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-blue-500:focus{--bg-opacity:1!important;background-color:#4299e1!important;background-color:rgba(66,153,225,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-blue-600:focus{--bg-opacity:1!important;background-color:#3182ce!important;background-color:rgba(49,130,206,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-blue-700:focus{--bg-opacity:1!important;background-color:#2b6cb0!important;background-color:rgba(43,108,176,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-blue-800:focus{--bg-opacity:1!important;background-color:#2c5282!important;background-color:rgba(44,82,130,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-blue-900:focus{--bg-opacity:1!important;background-color:#2a4365!important;background-color:rgba(42,67,101,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-indigo-100:focus{--bg-opacity:1!important;background-color:#ebf4ff!important;background-color:rgba(235,244,255,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-indigo-200:focus{--bg-opacity:1!important;background-color:#c3dafe!important;background-color:rgba(195,218,254,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-indigo-300:focus{--bg-opacity:1!important;background-color:#a3bffa!important;background-color:rgba(163,191,250,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-indigo-400:focus{--bg-opacity:1!important;background-color:#7f9cf5!important;background-color:rgba(127,156,245,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-indigo-500:focus{--bg-opacity:1!important;background-color:#667eea!important;background-color:rgba(102,126,234,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-indigo-600:focus{--bg-opacity:1!important;background-color:#5a67d8!important;background-color:rgba(90,103,216,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-indigo-700:focus{--bg-opacity:1!important;background-color:#4c51bf!important;background-color:rgba(76,81,191,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-indigo-800:focus{--bg-opacity:1!important;background-color:#434190!important;background-color:rgba(67,65,144,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-indigo-900:focus{--bg-opacity:1!important;background-color:#3c366b!important;background-color:rgba(60,54,107,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-purple-100:focus{--bg-opacity:1!important;background-color:#faf5ff!important;background-color:rgba(250,245,255,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-purple-200:focus{--bg-opacity:1!important;background-color:#e9d8fd!important;background-color:rgba(233,216,253,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-purple-300:focus{--bg-opacity:1!important;background-color:#d6bcfa!important;background-color:rgba(214,188,250,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-purple-400:focus{--bg-opacity:1!important;background-color:#b794f4!important;background-color:rgba(183,148,244,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-purple-500:focus{--bg-opacity:1!important;background-color:#9f7aea!important;background-color:rgba(159,122,234,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-purple-600:focus{--bg-opacity:1!important;background-color:#805ad5!important;background-color:rgba(128,90,213,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-purple-700:focus{--bg-opacity:1!important;background-color:#6b46c1!important;background-color:rgba(107,70,193,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-purple-800:focus{--bg-opacity:1!important;background-color:#553c9a!important;background-color:rgba(85,60,154,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-purple-900:focus{--bg-opacity:1!important;background-color:#44337a!important;background-color:rgba(68,51,122,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-pink-100:focus{--bg-opacity:1!important;background-color:#fff5f7!important;background-color:rgba(255,245,247,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-pink-200:focus{--bg-opacity:1!important;background-color:#fed7e2!important;background-color:rgba(254,215,226,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-pink-300:focus{--bg-opacity:1!important;background-color:#fbb6ce!important;background-color:rgba(251,182,206,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-pink-400:focus{--bg-opacity:1!important;background-color:#f687b3!important;background-color:rgba(246,135,179,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-pink-500:focus{--bg-opacity:1!important;background-color:#ed64a6!important;background-color:rgba(237,100,166,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-pink-600:focus{--bg-opacity:1!important;background-color:#d53f8c!important;background-color:rgba(213,63,140,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-pink-700:focus{--bg-opacity:1!important;background-color:#b83280!important;background-color:rgba(184,50,128,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-pink-800:focus{--bg-opacity:1!important;background-color:#97266d!important;background-color:rgba(151,38,109,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:bg-pink-900:focus{--bg-opacity:1!important;background-color:#702459!important;background-color:rgba(112,36,89,var(--bg-opacity))!important}}@media (min-width:1280px){.lg\\:bg-none{background-image:none!important}}@media (min-width:1280px){.lg\\:bg-gradient-to-t{background-image:linear-gradient(0deg,var(--gradient-color-stops))!important}}@media (min-width:1280px){.lg\\:bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--gradient-color-stops))!important}}@media (min-width:1280px){.lg\\:bg-gradient-to-r{background-image:linear-gradient(90deg,var(--gradient-color-stops))!important}}@media (min-width:1280px){.lg\\:bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--gradient-color-stops))!important}}@media (min-width:1280px){.lg\\:bg-gradient-to-b{background-image:linear-gradient(180deg,var(--gradient-color-stops))!important}}@media (min-width:1280px){.lg\\:bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--gradient-color-stops))!important}}@media (min-width:1280px){.lg\\:bg-gradient-to-l{background-image:linear-gradient(270deg,var(--gradient-color-stops))!important}}@media (min-width:1280px){.lg\\:bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--gradient-color-stops))!important}}@media (min-width:1280px){.lg\\:from-transparent{--gradient-from-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1280px){.lg\\:from-current{--gradient-from-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1280px){.lg\\:from-black{--gradient-from-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1280px){.lg\\:from-white{--gradient-from-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1280px){.lg\\:from-gray-100{--gradient-from-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:1280px){.lg\\:from-gray-200{--gradient-from-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:1280px){.lg\\:from-gray-300{--gradient-from-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:1280px){.lg\\:from-gray-400{--gradient-from-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:1280px){.lg\\:from-gray-500{--gradient-from-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:1280px){.lg\\:from-gray-600{--gradient-from-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:1280px){.lg\\:from-gray-700{--gradient-from-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:1280px){.lg\\:from-gray-800{--gradient-from-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:1280px){.lg\\:from-gray-900{--gradient-from-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:1280px){.lg\\:from-red-100{--gradient-from-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:1280px){.lg\\:from-red-200{--gradient-from-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:1280px){.lg\\:from-red-300{--gradient-from-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:1280px){.lg\\:from-red-400{--gradient-from-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:1280px){.lg\\:from-red-500{--gradient-from-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:1280px){.lg\\:from-red-600{--gradient-from-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:1280px){.lg\\:from-red-700{--gradient-from-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:1280px){.lg\\:from-red-800{--gradient-from-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:1280px){.lg\\:from-red-900{--gradient-from-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:1280px){.lg\\:from-orange-100{--gradient-from-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:1280px){.lg\\:from-orange-200{--gradient-from-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:1280px){.lg\\:from-orange-300{--gradient-from-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:1280px){.lg\\:from-orange-400{--gradient-from-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:1280px){.lg\\:from-orange-500{--gradient-from-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:1280px){.lg\\:from-orange-600{--gradient-from-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:1280px){.lg\\:from-orange-700{--gradient-from-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:1280px){.lg\\:from-orange-800{--gradient-from-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:1280px){.lg\\:from-orange-900{--gradient-from-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:1280px){.lg\\:from-yellow-100{--gradient-from-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:1280px){.lg\\:from-yellow-200{--gradient-from-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:1280px){.lg\\:from-yellow-300{--gradient-from-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:1280px){.lg\\:from-yellow-400{--gradient-from-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:1280px){.lg\\:from-yellow-500{--gradient-from-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:1280px){.lg\\:from-yellow-600{--gradient-from-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:1280px){.lg\\:from-yellow-700{--gradient-from-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:1280px){.lg\\:from-yellow-800{--gradient-from-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:1280px){.lg\\:from-yellow-900{--gradient-from-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:1280px){.lg\\:from-green-100{--gradient-from-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:1280px){.lg\\:from-green-200{--gradient-from-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:1280px){.lg\\:from-green-300{--gradient-from-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:1280px){.lg\\:from-green-400{--gradient-from-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:1280px){.lg\\:from-green-500{--gradient-from-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:1280px){.lg\\:from-green-600{--gradient-from-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:1280px){.lg\\:from-green-700{--gradient-from-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:1280px){.lg\\:from-green-800{--gradient-from-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:1280px){.lg\\:from-green-900{--gradient-from-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:1280px){.lg\\:from-teal-100{--gradient-from-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:1280px){.lg\\:from-teal-200{--gradient-from-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:1280px){.lg\\:from-teal-300{--gradient-from-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:1280px){.lg\\:from-teal-400{--gradient-from-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:1280px){.lg\\:from-teal-500{--gradient-from-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:1280px){.lg\\:from-teal-600{--gradient-from-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:1280px){.lg\\:from-teal-700{--gradient-from-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:1280px){.lg\\:from-teal-800{--gradient-from-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:1280px){.lg\\:from-teal-900{--gradient-from-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:1280px){.lg\\:from-blue-100{--gradient-from-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:1280px){.lg\\:from-blue-200{--gradient-from-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:1280px){.lg\\:from-blue-300{--gradient-from-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:1280px){.lg\\:from-blue-400{--gradient-from-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:1280px){.lg\\:from-blue-500{--gradient-from-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:1280px){.lg\\:from-blue-600{--gradient-from-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:1280px){.lg\\:from-blue-700{--gradient-from-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:1280px){.lg\\:from-blue-800{--gradient-from-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:1280px){.lg\\:from-blue-900{--gradient-from-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:1280px){.lg\\:from-indigo-100{--gradient-from-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:1280px){.lg\\:from-indigo-200{--gradient-from-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:1280px){.lg\\:from-indigo-300{--gradient-from-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:1280px){.lg\\:from-indigo-400{--gradient-from-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:1280px){.lg\\:from-indigo-500{--gradient-from-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:1280px){.lg\\:from-indigo-600{--gradient-from-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:1280px){.lg\\:from-indigo-700{--gradient-from-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:1280px){.lg\\:from-indigo-800{--gradient-from-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:1280px){.lg\\:from-indigo-900{--gradient-from-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:1280px){.lg\\:from-purple-100{--gradient-from-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:1280px){.lg\\:from-purple-200{--gradient-from-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:1280px){.lg\\:from-purple-300{--gradient-from-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:1280px){.lg\\:from-purple-400{--gradient-from-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:1280px){.lg\\:from-purple-500{--gradient-from-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:1280px){.lg\\:from-purple-600{--gradient-from-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:1280px){.lg\\:from-purple-700{--gradient-from-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:1280px){.lg\\:from-purple-800{--gradient-from-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:1280px){.lg\\:from-purple-900{--gradient-from-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:1280px){.lg\\:from-pink-100{--gradient-from-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:1280px){.lg\\:from-pink-200{--gradient-from-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:1280px){.lg\\:from-pink-300{--gradient-from-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:1280px){.lg\\:from-pink-400{--gradient-from-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:1280px){.lg\\:from-pink-500{--gradient-from-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:1280px){.lg\\:from-pink-600{--gradient-from-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:1280px){.lg\\:from-pink-700{--gradient-from-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:1280px){.lg\\:from-pink-800{--gradient-from-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:1280px){.lg\\:from-pink-900{--gradient-from-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:1280px){.lg\\:via-transparent{--gradient-via-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1280px){.lg\\:via-current{--gradient-via-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1280px){.lg\\:via-black{--gradient-via-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1280px){.lg\\:via-white{--gradient-via-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1280px){.lg\\:via-gray-100{--gradient-via-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:1280px){.lg\\:via-gray-200{--gradient-via-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:1280px){.lg\\:via-gray-300{--gradient-via-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:1280px){.lg\\:via-gray-400{--gradient-via-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:1280px){.lg\\:via-gray-500{--gradient-via-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:1280px){.lg\\:via-gray-600{--gradient-via-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:1280px){.lg\\:via-gray-700{--gradient-via-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:1280px){.lg\\:via-gray-800{--gradient-via-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:1280px){.lg\\:via-gray-900{--gradient-via-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:1280px){.lg\\:via-red-100{--gradient-via-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:1280px){.lg\\:via-red-200{--gradient-via-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:1280px){.lg\\:via-red-300{--gradient-via-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:1280px){.lg\\:via-red-400{--gradient-via-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:1280px){.lg\\:via-red-500{--gradient-via-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:1280px){.lg\\:via-red-600{--gradient-via-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:1280px){.lg\\:via-red-700{--gradient-via-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:1280px){.lg\\:via-red-800{--gradient-via-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:1280px){.lg\\:via-red-900{--gradient-via-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:1280px){.lg\\:via-orange-100{--gradient-via-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:1280px){.lg\\:via-orange-200{--gradient-via-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:1280px){.lg\\:via-orange-300{--gradient-via-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:1280px){.lg\\:via-orange-400{--gradient-via-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:1280px){.lg\\:via-orange-500{--gradient-via-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:1280px){.lg\\:via-orange-600{--gradient-via-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:1280px){.lg\\:via-orange-700{--gradient-via-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:1280px){.lg\\:via-orange-800{--gradient-via-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:1280px){.lg\\:via-orange-900{--gradient-via-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:1280px){.lg\\:via-yellow-100{--gradient-via-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:1280px){.lg\\:via-yellow-200{--gradient-via-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:1280px){.lg\\:via-yellow-300{--gradient-via-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:1280px){.lg\\:via-yellow-400{--gradient-via-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:1280px){.lg\\:via-yellow-500{--gradient-via-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:1280px){.lg\\:via-yellow-600{--gradient-via-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:1280px){.lg\\:via-yellow-700{--gradient-via-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:1280px){.lg\\:via-yellow-800{--gradient-via-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:1280px){.lg\\:via-yellow-900{--gradient-via-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:1280px){.lg\\:via-green-100{--gradient-via-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:1280px){.lg\\:via-green-200{--gradient-via-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:1280px){.lg\\:via-green-300{--gradient-via-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:1280px){.lg\\:via-green-400{--gradient-via-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:1280px){.lg\\:via-green-500{--gradient-via-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:1280px){.lg\\:via-green-600{--gradient-via-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:1280px){.lg\\:via-green-700{--gradient-via-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:1280px){.lg\\:via-green-800{--gradient-via-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:1280px){.lg\\:via-green-900{--gradient-via-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:1280px){.lg\\:via-teal-100{--gradient-via-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:1280px){.lg\\:via-teal-200{--gradient-via-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:1280px){.lg\\:via-teal-300{--gradient-via-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:1280px){.lg\\:via-teal-400{--gradient-via-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:1280px){.lg\\:via-teal-500{--gradient-via-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:1280px){.lg\\:via-teal-600{--gradient-via-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:1280px){.lg\\:via-teal-700{--gradient-via-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:1280px){.lg\\:via-teal-800{--gradient-via-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:1280px){.lg\\:via-teal-900{--gradient-via-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:1280px){.lg\\:via-blue-100{--gradient-via-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:1280px){.lg\\:via-blue-200{--gradient-via-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:1280px){.lg\\:via-blue-300{--gradient-via-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:1280px){.lg\\:via-blue-400{--gradient-via-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:1280px){.lg\\:via-blue-500{--gradient-via-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:1280px){.lg\\:via-blue-600{--gradient-via-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:1280px){.lg\\:via-blue-700{--gradient-via-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:1280px){.lg\\:via-blue-800{--gradient-via-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:1280px){.lg\\:via-blue-900{--gradient-via-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:1280px){.lg\\:via-indigo-100{--gradient-via-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:1280px){.lg\\:via-indigo-200{--gradient-via-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:1280px){.lg\\:via-indigo-300{--gradient-via-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:1280px){.lg\\:via-indigo-400{--gradient-via-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:1280px){.lg\\:via-indigo-500{--gradient-via-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:1280px){.lg\\:via-indigo-600{--gradient-via-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:1280px){.lg\\:via-indigo-700{--gradient-via-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:1280px){.lg\\:via-indigo-800{--gradient-via-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:1280px){.lg\\:via-indigo-900{--gradient-via-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:1280px){.lg\\:via-purple-100{--gradient-via-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:1280px){.lg\\:via-purple-200{--gradient-via-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:1280px){.lg\\:via-purple-300{--gradient-via-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:1280px){.lg\\:via-purple-400{--gradient-via-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:1280px){.lg\\:via-purple-500{--gradient-via-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:1280px){.lg\\:via-purple-600{--gradient-via-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:1280px){.lg\\:via-purple-700{--gradient-via-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:1280px){.lg\\:via-purple-800{--gradient-via-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:1280px){.lg\\:via-purple-900{--gradient-via-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:1280px){.lg\\:via-pink-100{--gradient-via-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:1280px){.lg\\:via-pink-200{--gradient-via-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:1280px){.lg\\:via-pink-300{--gradient-via-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:1280px){.lg\\:via-pink-400{--gradient-via-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:1280px){.lg\\:via-pink-500{--gradient-via-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:1280px){.lg\\:via-pink-600{--gradient-via-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:1280px){.lg\\:via-pink-700{--gradient-via-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:1280px){.lg\\:via-pink-800{--gradient-via-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:1280px){.lg\\:via-pink-900{--gradient-via-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:1280px){.lg\\:to-transparent{--gradient-to-color:transparent!important}}@media (min-width:1280px){.lg\\:to-current{--gradient-to-color:currentColor!important}}@media (min-width:1280px){.lg\\:to-black{--gradient-to-color:#000!important}}@media (min-width:1280px){.lg\\:to-white{--gradient-to-color:#fff!important}}@media (min-width:1280px){.lg\\:to-gray-100{--gradient-to-color:#f7fafc!important}}@media (min-width:1280px){.lg\\:to-gray-200{--gradient-to-color:#edf2f7!important}}@media (min-width:1280px){.lg\\:to-gray-300{--gradient-to-color:#e2e8f0!important}}@media (min-width:1280px){.lg\\:to-gray-400{--gradient-to-color:#cbd5e0!important}}@media (min-width:1280px){.lg\\:to-gray-500{--gradient-to-color:#a0aec0!important}}@media (min-width:1280px){.lg\\:to-gray-600{--gradient-to-color:#718096!important}}@media (min-width:1280px){.lg\\:to-gray-700{--gradient-to-color:#4a5568!important}}@media (min-width:1280px){.lg\\:to-gray-800{--gradient-to-color:#2d3748!important}}@media (min-width:1280px){.lg\\:to-gray-900{--gradient-to-color:#1a202c!important}}@media (min-width:1280px){.lg\\:to-red-100{--gradient-to-color:#fff5f5!important}}@media (min-width:1280px){.lg\\:to-red-200{--gradient-to-color:#fed7d7!important}}@media (min-width:1280px){.lg\\:to-red-300{--gradient-to-color:#feb2b2!important}}@media (min-width:1280px){.lg\\:to-red-400{--gradient-to-color:#fc8181!important}}@media (min-width:1280px){.lg\\:to-red-500{--gradient-to-color:#f56565!important}}@media (min-width:1280px){.lg\\:to-red-600{--gradient-to-color:#e53e3e!important}}@media (min-width:1280px){.lg\\:to-red-700{--gradient-to-color:#c53030!important}}@media (min-width:1280px){.lg\\:to-red-800{--gradient-to-color:#9b2c2c!important}}@media (min-width:1280px){.lg\\:to-red-900{--gradient-to-color:#742a2a!important}}@media (min-width:1280px){.lg\\:to-orange-100{--gradient-to-color:#fffaf0!important}}@media (min-width:1280px){.lg\\:to-orange-200{--gradient-to-color:#feebc8!important}}@media (min-width:1280px){.lg\\:to-orange-300{--gradient-to-color:#fbd38d!important}}@media (min-width:1280px){.lg\\:to-orange-400{--gradient-to-color:#f6ad55!important}}@media (min-width:1280px){.lg\\:to-orange-500{--gradient-to-color:#ed8936!important}}@media (min-width:1280px){.lg\\:to-orange-600{--gradient-to-color:#dd6b20!important}}@media (min-width:1280px){.lg\\:to-orange-700{--gradient-to-color:#c05621!important}}@media (min-width:1280px){.lg\\:to-orange-800{--gradient-to-color:#9c4221!important}}@media (min-width:1280px){.lg\\:to-orange-900{--gradient-to-color:#7b341e!important}}@media (min-width:1280px){.lg\\:to-yellow-100{--gradient-to-color:ivory!important}}@media (min-width:1280px){.lg\\:to-yellow-200{--gradient-to-color:#fefcbf!important}}@media (min-width:1280px){.lg\\:to-yellow-300{--gradient-to-color:#faf089!important}}@media (min-width:1280px){.lg\\:to-yellow-400{--gradient-to-color:#f6e05e!important}}@media (min-width:1280px){.lg\\:to-yellow-500{--gradient-to-color:#ecc94b!important}}@media (min-width:1280px){.lg\\:to-yellow-600{--gradient-to-color:#d69e2e!important}}@media (min-width:1280px){.lg\\:to-yellow-700{--gradient-to-color:#b7791f!important}}@media (min-width:1280px){.lg\\:to-yellow-800{--gradient-to-color:#975a16!important}}@media (min-width:1280px){.lg\\:to-yellow-900{--gradient-to-color:#744210!important}}@media (min-width:1280px){.lg\\:to-green-100{--gradient-to-color:#f0fff4!important}}@media (min-width:1280px){.lg\\:to-green-200{--gradient-to-color:#c6f6d5!important}}@media (min-width:1280px){.lg\\:to-green-300{--gradient-to-color:#9ae6b4!important}}@media (min-width:1280px){.lg\\:to-green-400{--gradient-to-color:#68d391!important}}@media (min-width:1280px){.lg\\:to-green-500{--gradient-to-color:#48bb78!important}}@media (min-width:1280px){.lg\\:to-green-600{--gradient-to-color:#38a169!important}}@media (min-width:1280px){.lg\\:to-green-700{--gradient-to-color:#2f855a!important}}@media (min-width:1280px){.lg\\:to-green-800{--gradient-to-color:#276749!important}}@media (min-width:1280px){.lg\\:to-green-900{--gradient-to-color:#22543d!important}}@media (min-width:1280px){.lg\\:to-teal-100{--gradient-to-color:#e6fffa!important}}@media (min-width:1280px){.lg\\:to-teal-200{--gradient-to-color:#b2f5ea!important}}@media (min-width:1280px){.lg\\:to-teal-300{--gradient-to-color:#81e6d9!important}}@media (min-width:1280px){.lg\\:to-teal-400{--gradient-to-color:#4fd1c5!important}}@media (min-width:1280px){.lg\\:to-teal-500{--gradient-to-color:#38b2ac!important}}@media (min-width:1280px){.lg\\:to-teal-600{--gradient-to-color:#319795!important}}@media (min-width:1280px){.lg\\:to-teal-700{--gradient-to-color:#2c7a7b!important}}@media (min-width:1280px){.lg\\:to-teal-800{--gradient-to-color:#285e61!important}}@media (min-width:1280px){.lg\\:to-teal-900{--gradient-to-color:#234e52!important}}@media (min-width:1280px){.lg\\:to-blue-100{--gradient-to-color:#ebf8ff!important}}@media (min-width:1280px){.lg\\:to-blue-200{--gradient-to-color:#bee3f8!important}}@media (min-width:1280px){.lg\\:to-blue-300{--gradient-to-color:#90cdf4!important}}@media (min-width:1280px){.lg\\:to-blue-400{--gradient-to-color:#63b3ed!important}}@media (min-width:1280px){.lg\\:to-blue-500{--gradient-to-color:#4299e1!important}}@media (min-width:1280px){.lg\\:to-blue-600{--gradient-to-color:#3182ce!important}}@media (min-width:1280px){.lg\\:to-blue-700{--gradient-to-color:#2b6cb0!important}}@media (min-width:1280px){.lg\\:to-blue-800{--gradient-to-color:#2c5282!important}}@media (min-width:1280px){.lg\\:to-blue-900{--gradient-to-color:#2a4365!important}}@media (min-width:1280px){.lg\\:to-indigo-100{--gradient-to-color:#ebf4ff!important}}@media (min-width:1280px){.lg\\:to-indigo-200{--gradient-to-color:#c3dafe!important}}@media (min-width:1280px){.lg\\:to-indigo-300{--gradient-to-color:#a3bffa!important}}@media (min-width:1280px){.lg\\:to-indigo-400{--gradient-to-color:#7f9cf5!important}}@media (min-width:1280px){.lg\\:to-indigo-500{--gradient-to-color:#667eea!important}}@media (min-width:1280px){.lg\\:to-indigo-600{--gradient-to-color:#5a67d8!important}}@media (min-width:1280px){.lg\\:to-indigo-700{--gradient-to-color:#4c51bf!important}}@media (min-width:1280px){.lg\\:to-indigo-800{--gradient-to-color:#434190!important}}@media (min-width:1280px){.lg\\:to-indigo-900{--gradient-to-color:#3c366b!important}}@media (min-width:1280px){.lg\\:to-purple-100{--gradient-to-color:#faf5ff!important}}@media (min-width:1280px){.lg\\:to-purple-200{--gradient-to-color:#e9d8fd!important}}@media (min-width:1280px){.lg\\:to-purple-300{--gradient-to-color:#d6bcfa!important}}@media (min-width:1280px){.lg\\:to-purple-400{--gradient-to-color:#b794f4!important}}@media (min-width:1280px){.lg\\:to-purple-500{--gradient-to-color:#9f7aea!important}}@media (min-width:1280px){.lg\\:to-purple-600{--gradient-to-color:#805ad5!important}}@media (min-width:1280px){.lg\\:to-purple-700{--gradient-to-color:#6b46c1!important}}@media (min-width:1280px){.lg\\:to-purple-800{--gradient-to-color:#553c9a!important}}@media (min-width:1280px){.lg\\:to-purple-900{--gradient-to-color:#44337a!important}}@media (min-width:1280px){.lg\\:to-pink-100{--gradient-to-color:#fff5f7!important}}@media (min-width:1280px){.lg\\:to-pink-200{--gradient-to-color:#fed7e2!important}}@media (min-width:1280px){.lg\\:to-pink-300{--gradient-to-color:#fbb6ce!important}}@media (min-width:1280px){.lg\\:to-pink-400{--gradient-to-color:#f687b3!important}}@media (min-width:1280px){.lg\\:to-pink-500{--gradient-to-color:#ed64a6!important}}@media (min-width:1280px){.lg\\:to-pink-600{--gradient-to-color:#d53f8c!important}}@media (min-width:1280px){.lg\\:to-pink-700{--gradient-to-color:#b83280!important}}@media (min-width:1280px){.lg\\:to-pink-800{--gradient-to-color:#97266d!important}}@media (min-width:1280px){.lg\\:to-pink-900{--gradient-to-color:#702459!important}}@media (min-width:1280px){.lg\\:hover\\:from-transparent:hover{--gradient-from-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1280px){.lg\\:hover\\:from-current:hover{--gradient-from-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-black:hover{--gradient-from-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1280px){.lg\\:hover\\:from-white:hover{--gradient-from-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-gray-100:hover{--gradient-from-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-gray-200:hover{--gradient-from-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-gray-300:hover{--gradient-from-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-gray-400:hover{--gradient-from-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-gray-500:hover{--gradient-from-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-gray-600:hover{--gradient-from-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-gray-700:hover{--gradient-from-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-gray-800:hover{--gradient-from-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-gray-900:hover{--gradient-from-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-red-100:hover{--gradient-from-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-red-200:hover{--gradient-from-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-red-300:hover{--gradient-from-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-red-400:hover{--gradient-from-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-red-500:hover{--gradient-from-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-red-600:hover{--gradient-from-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-red-700:hover{--gradient-from-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-red-800:hover{--gradient-from-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-red-900:hover{--gradient-from-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-orange-100:hover{--gradient-from-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-orange-200:hover{--gradient-from-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-orange-300:hover{--gradient-from-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-orange-400:hover{--gradient-from-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-orange-500:hover{--gradient-from-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-orange-600:hover{--gradient-from-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-orange-700:hover{--gradient-from-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-orange-800:hover{--gradient-from-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-orange-900:hover{--gradient-from-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-yellow-100:hover{--gradient-from-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-yellow-200:hover{--gradient-from-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-yellow-300:hover{--gradient-from-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-yellow-400:hover{--gradient-from-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-yellow-500:hover{--gradient-from-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-yellow-600:hover{--gradient-from-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-yellow-700:hover{--gradient-from-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-yellow-800:hover{--gradient-from-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-yellow-900:hover{--gradient-from-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-green-100:hover{--gradient-from-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-green-200:hover{--gradient-from-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-green-300:hover{--gradient-from-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-green-400:hover{--gradient-from-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-green-500:hover{--gradient-from-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-green-600:hover{--gradient-from-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-green-700:hover{--gradient-from-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-green-800:hover{--gradient-from-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-green-900:hover{--gradient-from-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-teal-100:hover{--gradient-from-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-teal-200:hover{--gradient-from-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-teal-300:hover{--gradient-from-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-teal-400:hover{--gradient-from-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-teal-500:hover{--gradient-from-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-teal-600:hover{--gradient-from-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-teal-700:hover{--gradient-from-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-teal-800:hover{--gradient-from-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-teal-900:hover{--gradient-from-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-blue-100:hover{--gradient-from-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-blue-200:hover{--gradient-from-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-blue-300:hover{--gradient-from-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-blue-400:hover{--gradient-from-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-blue-500:hover{--gradient-from-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-blue-600:hover{--gradient-from-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-blue-700:hover{--gradient-from-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-blue-800:hover{--gradient-from-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-blue-900:hover{--gradient-from-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-indigo-100:hover{--gradient-from-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-indigo-200:hover{--gradient-from-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-indigo-300:hover{--gradient-from-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-indigo-400:hover{--gradient-from-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-indigo-500:hover{--gradient-from-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-indigo-600:hover{--gradient-from-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-indigo-700:hover{--gradient-from-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-indigo-800:hover{--gradient-from-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-indigo-900:hover{--gradient-from-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-purple-100:hover{--gradient-from-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-purple-200:hover{--gradient-from-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-purple-300:hover{--gradient-from-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-purple-400:hover{--gradient-from-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-purple-500:hover{--gradient-from-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-purple-600:hover{--gradient-from-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-purple-700:hover{--gradient-from-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-purple-800:hover{--gradient-from-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-purple-900:hover{--gradient-from-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-pink-100:hover{--gradient-from-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-pink-200:hover{--gradient-from-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-pink-300:hover{--gradient-from-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-pink-400:hover{--gradient-from-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-pink-500:hover{--gradient-from-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-pink-600:hover{--gradient-from-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-pink-700:hover{--gradient-from-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-pink-800:hover{--gradient-from-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:1280px){.lg\\:hover\\:from-pink-900:hover{--gradient-from-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-transparent:hover{--gradient-via-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1280px){.lg\\:hover\\:via-current:hover{--gradient-via-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-black:hover{--gradient-via-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1280px){.lg\\:hover\\:via-white:hover{--gradient-via-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-gray-100:hover{--gradient-via-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-gray-200:hover{--gradient-via-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-gray-300:hover{--gradient-via-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-gray-400:hover{--gradient-via-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-gray-500:hover{--gradient-via-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-gray-600:hover{--gradient-via-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-gray-700:hover{--gradient-via-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-gray-800:hover{--gradient-via-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-gray-900:hover{--gradient-via-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-red-100:hover{--gradient-via-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-red-200:hover{--gradient-via-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-red-300:hover{--gradient-via-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-red-400:hover{--gradient-via-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-red-500:hover{--gradient-via-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-red-600:hover{--gradient-via-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-red-700:hover{--gradient-via-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-red-800:hover{--gradient-via-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-red-900:hover{--gradient-via-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-orange-100:hover{--gradient-via-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-orange-200:hover{--gradient-via-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-orange-300:hover{--gradient-via-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-orange-400:hover{--gradient-via-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-orange-500:hover{--gradient-via-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-orange-600:hover{--gradient-via-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-orange-700:hover{--gradient-via-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-orange-800:hover{--gradient-via-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-orange-900:hover{--gradient-via-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-yellow-100:hover{--gradient-via-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-yellow-200:hover{--gradient-via-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-yellow-300:hover{--gradient-via-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-yellow-400:hover{--gradient-via-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-yellow-500:hover{--gradient-via-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-yellow-600:hover{--gradient-via-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-yellow-700:hover{--gradient-via-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-yellow-800:hover{--gradient-via-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-yellow-900:hover{--gradient-via-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-green-100:hover{--gradient-via-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-green-200:hover{--gradient-via-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-green-300:hover{--gradient-via-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-green-400:hover{--gradient-via-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-green-500:hover{--gradient-via-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-green-600:hover{--gradient-via-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-green-700:hover{--gradient-via-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-green-800:hover{--gradient-via-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-green-900:hover{--gradient-via-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-teal-100:hover{--gradient-via-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-teal-200:hover{--gradient-via-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-teal-300:hover{--gradient-via-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-teal-400:hover{--gradient-via-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-teal-500:hover{--gradient-via-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-teal-600:hover{--gradient-via-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-teal-700:hover{--gradient-via-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-teal-800:hover{--gradient-via-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-teal-900:hover{--gradient-via-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-blue-100:hover{--gradient-via-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-blue-200:hover{--gradient-via-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-blue-300:hover{--gradient-via-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-blue-400:hover{--gradient-via-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-blue-500:hover{--gradient-via-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-blue-600:hover{--gradient-via-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-blue-700:hover{--gradient-via-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-blue-800:hover{--gradient-via-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-blue-900:hover{--gradient-via-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-indigo-100:hover{--gradient-via-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-indigo-200:hover{--gradient-via-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-indigo-300:hover{--gradient-via-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-indigo-400:hover{--gradient-via-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-indigo-500:hover{--gradient-via-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-indigo-600:hover{--gradient-via-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-indigo-700:hover{--gradient-via-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-indigo-800:hover{--gradient-via-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-indigo-900:hover{--gradient-via-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-purple-100:hover{--gradient-via-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-purple-200:hover{--gradient-via-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-purple-300:hover{--gradient-via-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-purple-400:hover{--gradient-via-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-purple-500:hover{--gradient-via-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-purple-600:hover{--gradient-via-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-purple-700:hover{--gradient-via-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-purple-800:hover{--gradient-via-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-purple-900:hover{--gradient-via-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-pink-100:hover{--gradient-via-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-pink-200:hover{--gradient-via-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-pink-300:hover{--gradient-via-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-pink-400:hover{--gradient-via-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-pink-500:hover{--gradient-via-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-pink-600:hover{--gradient-via-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-pink-700:hover{--gradient-via-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-pink-800:hover{--gradient-via-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:1280px){.lg\\:hover\\:via-pink-900:hover{--gradient-via-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:1280px){.lg\\:hover\\:to-transparent:hover{--gradient-to-color:transparent!important}}@media (min-width:1280px){.lg\\:hover\\:to-current:hover{--gradient-to-color:currentColor!important}}@media (min-width:1280px){.lg\\:hover\\:to-black:hover{--gradient-to-color:#000!important}}@media (min-width:1280px){.lg\\:hover\\:to-white:hover{--gradient-to-color:#fff!important}}@media (min-width:1280px){.lg\\:hover\\:to-gray-100:hover{--gradient-to-color:#f7fafc!important}}@media (min-width:1280px){.lg\\:hover\\:to-gray-200:hover{--gradient-to-color:#edf2f7!important}}@media (min-width:1280px){.lg\\:hover\\:to-gray-300:hover{--gradient-to-color:#e2e8f0!important}}@media (min-width:1280px){.lg\\:hover\\:to-gray-400:hover{--gradient-to-color:#cbd5e0!important}}@media (min-width:1280px){.lg\\:hover\\:to-gray-500:hover{--gradient-to-color:#a0aec0!important}}@media (min-width:1280px){.lg\\:hover\\:to-gray-600:hover{--gradient-to-color:#718096!important}}@media (min-width:1280px){.lg\\:hover\\:to-gray-700:hover{--gradient-to-color:#4a5568!important}}@media (min-width:1280px){.lg\\:hover\\:to-gray-800:hover{--gradient-to-color:#2d3748!important}}@media (min-width:1280px){.lg\\:hover\\:to-gray-900:hover{--gradient-to-color:#1a202c!important}}@media (min-width:1280px){.lg\\:hover\\:to-red-100:hover{--gradient-to-color:#fff5f5!important}}@media (min-width:1280px){.lg\\:hover\\:to-red-200:hover{--gradient-to-color:#fed7d7!important}}@media (min-width:1280px){.lg\\:hover\\:to-red-300:hover{--gradient-to-color:#feb2b2!important}}@media (min-width:1280px){.lg\\:hover\\:to-red-400:hover{--gradient-to-color:#fc8181!important}}@media (min-width:1280px){.lg\\:hover\\:to-red-500:hover{--gradient-to-color:#f56565!important}}@media (min-width:1280px){.lg\\:hover\\:to-red-600:hover{--gradient-to-color:#e53e3e!important}}@media (min-width:1280px){.lg\\:hover\\:to-red-700:hover{--gradient-to-color:#c53030!important}}@media (min-width:1280px){.lg\\:hover\\:to-red-800:hover{--gradient-to-color:#9b2c2c!important}}@media (min-width:1280px){.lg\\:hover\\:to-red-900:hover{--gradient-to-color:#742a2a!important}}@media (min-width:1280px){.lg\\:hover\\:to-orange-100:hover{--gradient-to-color:#fffaf0!important}}@media (min-width:1280px){.lg\\:hover\\:to-orange-200:hover{--gradient-to-color:#feebc8!important}}@media (min-width:1280px){.lg\\:hover\\:to-orange-300:hover{--gradient-to-color:#fbd38d!important}}@media (min-width:1280px){.lg\\:hover\\:to-orange-400:hover{--gradient-to-color:#f6ad55!important}}@media (min-width:1280px){.lg\\:hover\\:to-orange-500:hover{--gradient-to-color:#ed8936!important}}@media (min-width:1280px){.lg\\:hover\\:to-orange-600:hover{--gradient-to-color:#dd6b20!important}}@media (min-width:1280px){.lg\\:hover\\:to-orange-700:hover{--gradient-to-color:#c05621!important}}@media (min-width:1280px){.lg\\:hover\\:to-orange-800:hover{--gradient-to-color:#9c4221!important}}@media (min-width:1280px){.lg\\:hover\\:to-orange-900:hover{--gradient-to-color:#7b341e!important}}@media (min-width:1280px){.lg\\:hover\\:to-yellow-100:hover{--gradient-to-color:ivory!important}}@media (min-width:1280px){.lg\\:hover\\:to-yellow-200:hover{--gradient-to-color:#fefcbf!important}}@media (min-width:1280px){.lg\\:hover\\:to-yellow-300:hover{--gradient-to-color:#faf089!important}}@media (min-width:1280px){.lg\\:hover\\:to-yellow-400:hover{--gradient-to-color:#f6e05e!important}}@media (min-width:1280px){.lg\\:hover\\:to-yellow-500:hover{--gradient-to-color:#ecc94b!important}}@media (min-width:1280px){.lg\\:hover\\:to-yellow-600:hover{--gradient-to-color:#d69e2e!important}}@media (min-width:1280px){.lg\\:hover\\:to-yellow-700:hover{--gradient-to-color:#b7791f!important}}@media (min-width:1280px){.lg\\:hover\\:to-yellow-800:hover{--gradient-to-color:#975a16!important}}@media (min-width:1280px){.lg\\:hover\\:to-yellow-900:hover{--gradient-to-color:#744210!important}}@media (min-width:1280px){.lg\\:hover\\:to-green-100:hover{--gradient-to-color:#f0fff4!important}}@media (min-width:1280px){.lg\\:hover\\:to-green-200:hover{--gradient-to-color:#c6f6d5!important}}@media (min-width:1280px){.lg\\:hover\\:to-green-300:hover{--gradient-to-color:#9ae6b4!important}}@media (min-width:1280px){.lg\\:hover\\:to-green-400:hover{--gradient-to-color:#68d391!important}}@media (min-width:1280px){.lg\\:hover\\:to-green-500:hover{--gradient-to-color:#48bb78!important}}@media (min-width:1280px){.lg\\:hover\\:to-green-600:hover{--gradient-to-color:#38a169!important}}@media (min-width:1280px){.lg\\:hover\\:to-green-700:hover{--gradient-to-color:#2f855a!important}}@media (min-width:1280px){.lg\\:hover\\:to-green-800:hover{--gradient-to-color:#276749!important}}@media (min-width:1280px){.lg\\:hover\\:to-green-900:hover{--gradient-to-color:#22543d!important}}@media (min-width:1280px){.lg\\:hover\\:to-teal-100:hover{--gradient-to-color:#e6fffa!important}}@media (min-width:1280px){.lg\\:hover\\:to-teal-200:hover{--gradient-to-color:#b2f5ea!important}}@media (min-width:1280px){.lg\\:hover\\:to-teal-300:hover{--gradient-to-color:#81e6d9!important}}@media (min-width:1280px){.lg\\:hover\\:to-teal-400:hover{--gradient-to-color:#4fd1c5!important}}@media (min-width:1280px){.lg\\:hover\\:to-teal-500:hover{--gradient-to-color:#38b2ac!important}}@media (min-width:1280px){.lg\\:hover\\:to-teal-600:hover{--gradient-to-color:#319795!important}}@media (min-width:1280px){.lg\\:hover\\:to-teal-700:hover{--gradient-to-color:#2c7a7b!important}}@media (min-width:1280px){.lg\\:hover\\:to-teal-800:hover{--gradient-to-color:#285e61!important}}@media (min-width:1280px){.lg\\:hover\\:to-teal-900:hover{--gradient-to-color:#234e52!important}}@media (min-width:1280px){.lg\\:hover\\:to-blue-100:hover{--gradient-to-color:#ebf8ff!important}}@media (min-width:1280px){.lg\\:hover\\:to-blue-200:hover{--gradient-to-color:#bee3f8!important}}@media (min-width:1280px){.lg\\:hover\\:to-blue-300:hover{--gradient-to-color:#90cdf4!important}}@media (min-width:1280px){.lg\\:hover\\:to-blue-400:hover{--gradient-to-color:#63b3ed!important}}@media (min-width:1280px){.lg\\:hover\\:to-blue-500:hover{--gradient-to-color:#4299e1!important}}@media (min-width:1280px){.lg\\:hover\\:to-blue-600:hover{--gradient-to-color:#3182ce!important}}@media (min-width:1280px){.lg\\:hover\\:to-blue-700:hover{--gradient-to-color:#2b6cb0!important}}@media (min-width:1280px){.lg\\:hover\\:to-blue-800:hover{--gradient-to-color:#2c5282!important}}@media (min-width:1280px){.lg\\:hover\\:to-blue-900:hover{--gradient-to-color:#2a4365!important}}@media (min-width:1280px){.lg\\:hover\\:to-indigo-100:hover{--gradient-to-color:#ebf4ff!important}}@media (min-width:1280px){.lg\\:hover\\:to-indigo-200:hover{--gradient-to-color:#c3dafe!important}}@media (min-width:1280px){.lg\\:hover\\:to-indigo-300:hover{--gradient-to-color:#a3bffa!important}}@media (min-width:1280px){.lg\\:hover\\:to-indigo-400:hover{--gradient-to-color:#7f9cf5!important}}@media (min-width:1280px){.lg\\:hover\\:to-indigo-500:hover{--gradient-to-color:#667eea!important}}@media (min-width:1280px){.lg\\:hover\\:to-indigo-600:hover{--gradient-to-color:#5a67d8!important}}@media (min-width:1280px){.lg\\:hover\\:to-indigo-700:hover{--gradient-to-color:#4c51bf!important}}@media (min-width:1280px){.lg\\:hover\\:to-indigo-800:hover{--gradient-to-color:#434190!important}}@media (min-width:1280px){.lg\\:hover\\:to-indigo-900:hover{--gradient-to-color:#3c366b!important}}@media (min-width:1280px){.lg\\:hover\\:to-purple-100:hover{--gradient-to-color:#faf5ff!important}}@media (min-width:1280px){.lg\\:hover\\:to-purple-200:hover{--gradient-to-color:#e9d8fd!important}}@media (min-width:1280px){.lg\\:hover\\:to-purple-300:hover{--gradient-to-color:#d6bcfa!important}}@media (min-width:1280px){.lg\\:hover\\:to-purple-400:hover{--gradient-to-color:#b794f4!important}}@media (min-width:1280px){.lg\\:hover\\:to-purple-500:hover{--gradient-to-color:#9f7aea!important}}@media (min-width:1280px){.lg\\:hover\\:to-purple-600:hover{--gradient-to-color:#805ad5!important}}@media (min-width:1280px){.lg\\:hover\\:to-purple-700:hover{--gradient-to-color:#6b46c1!important}}@media (min-width:1280px){.lg\\:hover\\:to-purple-800:hover{--gradient-to-color:#553c9a!important}}@media (min-width:1280px){.lg\\:hover\\:to-purple-900:hover{--gradient-to-color:#44337a!important}}@media (min-width:1280px){.lg\\:hover\\:to-pink-100:hover{--gradient-to-color:#fff5f7!important}}@media (min-width:1280px){.lg\\:hover\\:to-pink-200:hover{--gradient-to-color:#fed7e2!important}}@media (min-width:1280px){.lg\\:hover\\:to-pink-300:hover{--gradient-to-color:#fbb6ce!important}}@media (min-width:1280px){.lg\\:hover\\:to-pink-400:hover{--gradient-to-color:#f687b3!important}}@media (min-width:1280px){.lg\\:hover\\:to-pink-500:hover{--gradient-to-color:#ed64a6!important}}@media (min-width:1280px){.lg\\:hover\\:to-pink-600:hover{--gradient-to-color:#d53f8c!important}}@media (min-width:1280px){.lg\\:hover\\:to-pink-700:hover{--gradient-to-color:#b83280!important}}@media (min-width:1280px){.lg\\:hover\\:to-pink-800:hover{--gradient-to-color:#97266d!important}}@media (min-width:1280px){.lg\\:hover\\:to-pink-900:hover{--gradient-to-color:#702459!important}}@media (min-width:1280px){.lg\\:focus\\:from-transparent:focus{--gradient-from-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1280px){.lg\\:focus\\:from-current:focus{--gradient-from-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-black:focus{--gradient-from-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1280px){.lg\\:focus\\:from-white:focus{--gradient-from-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-gray-100:focus{--gradient-from-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-gray-200:focus{--gradient-from-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-gray-300:focus{--gradient-from-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-gray-400:focus{--gradient-from-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-gray-500:focus{--gradient-from-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-gray-600:focus{--gradient-from-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-gray-700:focus{--gradient-from-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-gray-800:focus{--gradient-from-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-gray-900:focus{--gradient-from-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-red-100:focus{--gradient-from-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-red-200:focus{--gradient-from-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-red-300:focus{--gradient-from-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-red-400:focus{--gradient-from-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-red-500:focus{--gradient-from-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-red-600:focus{--gradient-from-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-red-700:focus{--gradient-from-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-red-800:focus{--gradient-from-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-red-900:focus{--gradient-from-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-orange-100:focus{--gradient-from-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-orange-200:focus{--gradient-from-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-orange-300:focus{--gradient-from-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-orange-400:focus{--gradient-from-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-orange-500:focus{--gradient-from-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-orange-600:focus{--gradient-from-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-orange-700:focus{--gradient-from-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-orange-800:focus{--gradient-from-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-orange-900:focus{--gradient-from-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-yellow-100:focus{--gradient-from-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-yellow-200:focus{--gradient-from-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-yellow-300:focus{--gradient-from-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-yellow-400:focus{--gradient-from-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-yellow-500:focus{--gradient-from-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-yellow-600:focus{--gradient-from-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-yellow-700:focus{--gradient-from-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-yellow-800:focus{--gradient-from-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-yellow-900:focus{--gradient-from-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-green-100:focus{--gradient-from-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-green-200:focus{--gradient-from-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-green-300:focus{--gradient-from-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-green-400:focus{--gradient-from-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-green-500:focus{--gradient-from-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-green-600:focus{--gradient-from-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-green-700:focus{--gradient-from-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-green-800:focus{--gradient-from-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-green-900:focus{--gradient-from-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-teal-100:focus{--gradient-from-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-teal-200:focus{--gradient-from-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-teal-300:focus{--gradient-from-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-teal-400:focus{--gradient-from-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-teal-500:focus{--gradient-from-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-teal-600:focus{--gradient-from-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-teal-700:focus{--gradient-from-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-teal-800:focus{--gradient-from-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-teal-900:focus{--gradient-from-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-blue-100:focus{--gradient-from-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-blue-200:focus{--gradient-from-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-blue-300:focus{--gradient-from-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-blue-400:focus{--gradient-from-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-blue-500:focus{--gradient-from-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-blue-600:focus{--gradient-from-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-blue-700:focus{--gradient-from-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-blue-800:focus{--gradient-from-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-blue-900:focus{--gradient-from-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-indigo-100:focus{--gradient-from-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-indigo-200:focus{--gradient-from-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-indigo-300:focus{--gradient-from-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-indigo-400:focus{--gradient-from-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-indigo-500:focus{--gradient-from-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-indigo-600:focus{--gradient-from-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-indigo-700:focus{--gradient-from-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-indigo-800:focus{--gradient-from-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-indigo-900:focus{--gradient-from-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-purple-100:focus{--gradient-from-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-purple-200:focus{--gradient-from-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-purple-300:focus{--gradient-from-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-purple-400:focus{--gradient-from-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-purple-500:focus{--gradient-from-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-purple-600:focus{--gradient-from-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-purple-700:focus{--gradient-from-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-purple-800:focus{--gradient-from-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-purple-900:focus{--gradient-from-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-pink-100:focus{--gradient-from-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-pink-200:focus{--gradient-from-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-pink-300:focus{--gradient-from-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-pink-400:focus{--gradient-from-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-pink-500:focus{--gradient-from-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-pink-600:focus{--gradient-from-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-pink-700:focus{--gradient-from-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-pink-800:focus{--gradient-from-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:1280px){.lg\\:focus\\:from-pink-900:focus{--gradient-from-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-transparent:focus{--gradient-via-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1280px){.lg\\:focus\\:via-current:focus{--gradient-via-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-black:focus{--gradient-via-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1280px){.lg\\:focus\\:via-white:focus{--gradient-via-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-gray-100:focus{--gradient-via-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-gray-200:focus{--gradient-via-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-gray-300:focus{--gradient-via-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-gray-400:focus{--gradient-via-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-gray-500:focus{--gradient-via-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-gray-600:focus{--gradient-via-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-gray-700:focus{--gradient-via-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-gray-800:focus{--gradient-via-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-gray-900:focus{--gradient-via-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-red-100:focus{--gradient-via-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-red-200:focus{--gradient-via-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-red-300:focus{--gradient-via-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-red-400:focus{--gradient-via-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-red-500:focus{--gradient-via-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-red-600:focus{--gradient-via-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-red-700:focus{--gradient-via-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-red-800:focus{--gradient-via-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-red-900:focus{--gradient-via-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-orange-100:focus{--gradient-via-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-orange-200:focus{--gradient-via-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-orange-300:focus{--gradient-via-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-orange-400:focus{--gradient-via-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-orange-500:focus{--gradient-via-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-orange-600:focus{--gradient-via-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-orange-700:focus{--gradient-via-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-orange-800:focus{--gradient-via-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-orange-900:focus{--gradient-via-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-yellow-100:focus{--gradient-via-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-yellow-200:focus{--gradient-via-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-yellow-300:focus{--gradient-via-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-yellow-400:focus{--gradient-via-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-yellow-500:focus{--gradient-via-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-yellow-600:focus{--gradient-via-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-yellow-700:focus{--gradient-via-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-yellow-800:focus{--gradient-via-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-yellow-900:focus{--gradient-via-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-green-100:focus{--gradient-via-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-green-200:focus{--gradient-via-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-green-300:focus{--gradient-via-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-green-400:focus{--gradient-via-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-green-500:focus{--gradient-via-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-green-600:focus{--gradient-via-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-green-700:focus{--gradient-via-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-green-800:focus{--gradient-via-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-green-900:focus{--gradient-via-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-teal-100:focus{--gradient-via-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-teal-200:focus{--gradient-via-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-teal-300:focus{--gradient-via-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-teal-400:focus{--gradient-via-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-teal-500:focus{--gradient-via-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-teal-600:focus{--gradient-via-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-teal-700:focus{--gradient-via-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-teal-800:focus{--gradient-via-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-teal-900:focus{--gradient-via-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-blue-100:focus{--gradient-via-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-blue-200:focus{--gradient-via-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-blue-300:focus{--gradient-via-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-blue-400:focus{--gradient-via-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-blue-500:focus{--gradient-via-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-blue-600:focus{--gradient-via-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-blue-700:focus{--gradient-via-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-blue-800:focus{--gradient-via-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-blue-900:focus{--gradient-via-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-indigo-100:focus{--gradient-via-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-indigo-200:focus{--gradient-via-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-indigo-300:focus{--gradient-via-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-indigo-400:focus{--gradient-via-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-indigo-500:focus{--gradient-via-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-indigo-600:focus{--gradient-via-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-indigo-700:focus{--gradient-via-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-indigo-800:focus{--gradient-via-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-indigo-900:focus{--gradient-via-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-purple-100:focus{--gradient-via-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-purple-200:focus{--gradient-via-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-purple-300:focus{--gradient-via-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-purple-400:focus{--gradient-via-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-purple-500:focus{--gradient-via-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-purple-600:focus{--gradient-via-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-purple-700:focus{--gradient-via-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-purple-800:focus{--gradient-via-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-purple-900:focus{--gradient-via-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-pink-100:focus{--gradient-via-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-pink-200:focus{--gradient-via-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-pink-300:focus{--gradient-via-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-pink-400:focus{--gradient-via-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-pink-500:focus{--gradient-via-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-pink-600:focus{--gradient-via-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-pink-700:focus{--gradient-via-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-pink-800:focus{--gradient-via-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:1280px){.lg\\:focus\\:via-pink-900:focus{--gradient-via-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:1280px){.lg\\:focus\\:to-transparent:focus{--gradient-to-color:transparent!important}}@media (min-width:1280px){.lg\\:focus\\:to-current:focus{--gradient-to-color:currentColor!important}}@media (min-width:1280px){.lg\\:focus\\:to-black:focus{--gradient-to-color:#000!important}}@media (min-width:1280px){.lg\\:focus\\:to-white:focus{--gradient-to-color:#fff!important}}@media (min-width:1280px){.lg\\:focus\\:to-gray-100:focus{--gradient-to-color:#f7fafc!important}}@media (min-width:1280px){.lg\\:focus\\:to-gray-200:focus{--gradient-to-color:#edf2f7!important}}@media (min-width:1280px){.lg\\:focus\\:to-gray-300:focus{--gradient-to-color:#e2e8f0!important}}@media (min-width:1280px){.lg\\:focus\\:to-gray-400:focus{--gradient-to-color:#cbd5e0!important}}@media (min-width:1280px){.lg\\:focus\\:to-gray-500:focus{--gradient-to-color:#a0aec0!important}}@media (min-width:1280px){.lg\\:focus\\:to-gray-600:focus{--gradient-to-color:#718096!important}}@media (min-width:1280px){.lg\\:focus\\:to-gray-700:focus{--gradient-to-color:#4a5568!important}}@media (min-width:1280px){.lg\\:focus\\:to-gray-800:focus{--gradient-to-color:#2d3748!important}}@media (min-width:1280px){.lg\\:focus\\:to-gray-900:focus{--gradient-to-color:#1a202c!important}}@media (min-width:1280px){.lg\\:focus\\:to-red-100:focus{--gradient-to-color:#fff5f5!important}}@media (min-width:1280px){.lg\\:focus\\:to-red-200:focus{--gradient-to-color:#fed7d7!important}}@media (min-width:1280px){.lg\\:focus\\:to-red-300:focus{--gradient-to-color:#feb2b2!important}}@media (min-width:1280px){.lg\\:focus\\:to-red-400:focus{--gradient-to-color:#fc8181!important}}@media (min-width:1280px){.lg\\:focus\\:to-red-500:focus{--gradient-to-color:#f56565!important}}@media (min-width:1280px){.lg\\:focus\\:to-red-600:focus{--gradient-to-color:#e53e3e!important}}@media (min-width:1280px){.lg\\:focus\\:to-red-700:focus{--gradient-to-color:#c53030!important}}@media (min-width:1280px){.lg\\:focus\\:to-red-800:focus{--gradient-to-color:#9b2c2c!important}}@media (min-width:1280px){.lg\\:focus\\:to-red-900:focus{--gradient-to-color:#742a2a!important}}@media (min-width:1280px){.lg\\:focus\\:to-orange-100:focus{--gradient-to-color:#fffaf0!important}}@media (min-width:1280px){.lg\\:focus\\:to-orange-200:focus{--gradient-to-color:#feebc8!important}}@media (min-width:1280px){.lg\\:focus\\:to-orange-300:focus{--gradient-to-color:#fbd38d!important}}@media (min-width:1280px){.lg\\:focus\\:to-orange-400:focus{--gradient-to-color:#f6ad55!important}}@media (min-width:1280px){.lg\\:focus\\:to-orange-500:focus{--gradient-to-color:#ed8936!important}}@media (min-width:1280px){.lg\\:focus\\:to-orange-600:focus{--gradient-to-color:#dd6b20!important}}@media (min-width:1280px){.lg\\:focus\\:to-orange-700:focus{--gradient-to-color:#c05621!important}}@media (min-width:1280px){.lg\\:focus\\:to-orange-800:focus{--gradient-to-color:#9c4221!important}}@media (min-width:1280px){.lg\\:focus\\:to-orange-900:focus{--gradient-to-color:#7b341e!important}}@media (min-width:1280px){.lg\\:focus\\:to-yellow-100:focus{--gradient-to-color:ivory!important}}@media (min-width:1280px){.lg\\:focus\\:to-yellow-200:focus{--gradient-to-color:#fefcbf!important}}@media (min-width:1280px){.lg\\:focus\\:to-yellow-300:focus{--gradient-to-color:#faf089!important}}@media (min-width:1280px){.lg\\:focus\\:to-yellow-400:focus{--gradient-to-color:#f6e05e!important}}@media (min-width:1280px){.lg\\:focus\\:to-yellow-500:focus{--gradient-to-color:#ecc94b!important}}@media (min-width:1280px){.lg\\:focus\\:to-yellow-600:focus{--gradient-to-color:#d69e2e!important}}@media (min-width:1280px){.lg\\:focus\\:to-yellow-700:focus{--gradient-to-color:#b7791f!important}}@media (min-width:1280px){.lg\\:focus\\:to-yellow-800:focus{--gradient-to-color:#975a16!important}}@media (min-width:1280px){.lg\\:focus\\:to-yellow-900:focus{--gradient-to-color:#744210!important}}@media (min-width:1280px){.lg\\:focus\\:to-green-100:focus{--gradient-to-color:#f0fff4!important}}@media (min-width:1280px){.lg\\:focus\\:to-green-200:focus{--gradient-to-color:#c6f6d5!important}}@media (min-width:1280px){.lg\\:focus\\:to-green-300:focus{--gradient-to-color:#9ae6b4!important}}@media (min-width:1280px){.lg\\:focus\\:to-green-400:focus{--gradient-to-color:#68d391!important}}@media (min-width:1280px){.lg\\:focus\\:to-green-500:focus{--gradient-to-color:#48bb78!important}}@media (min-width:1280px){.lg\\:focus\\:to-green-600:focus{--gradient-to-color:#38a169!important}}@media (min-width:1280px){.lg\\:focus\\:to-green-700:focus{--gradient-to-color:#2f855a!important}}@media (min-width:1280px){.lg\\:focus\\:to-green-800:focus{--gradient-to-color:#276749!important}}@media (min-width:1280px){.lg\\:focus\\:to-green-900:focus{--gradient-to-color:#22543d!important}}@media (min-width:1280px){.lg\\:focus\\:to-teal-100:focus{--gradient-to-color:#e6fffa!important}}@media (min-width:1280px){.lg\\:focus\\:to-teal-200:focus{--gradient-to-color:#b2f5ea!important}}@media (min-width:1280px){.lg\\:focus\\:to-teal-300:focus{--gradient-to-color:#81e6d9!important}}@media (min-width:1280px){.lg\\:focus\\:to-teal-400:focus{--gradient-to-color:#4fd1c5!important}}@media (min-width:1280px){.lg\\:focus\\:to-teal-500:focus{--gradient-to-color:#38b2ac!important}}@media (min-width:1280px){.lg\\:focus\\:to-teal-600:focus{--gradient-to-color:#319795!important}}@media (min-width:1280px){.lg\\:focus\\:to-teal-700:focus{--gradient-to-color:#2c7a7b!important}}@media (min-width:1280px){.lg\\:focus\\:to-teal-800:focus{--gradient-to-color:#285e61!important}}@media (min-width:1280px){.lg\\:focus\\:to-teal-900:focus{--gradient-to-color:#234e52!important}}@media (min-width:1280px){.lg\\:focus\\:to-blue-100:focus{--gradient-to-color:#ebf8ff!important}}@media (min-width:1280px){.lg\\:focus\\:to-blue-200:focus{--gradient-to-color:#bee3f8!important}}@media (min-width:1280px){.lg\\:focus\\:to-blue-300:focus{--gradient-to-color:#90cdf4!important}}@media (min-width:1280px){.lg\\:focus\\:to-blue-400:focus{--gradient-to-color:#63b3ed!important}}@media (min-width:1280px){.lg\\:focus\\:to-blue-500:focus{--gradient-to-color:#4299e1!important}}@media (min-width:1280px){.lg\\:focus\\:to-blue-600:focus{--gradient-to-color:#3182ce!important}}@media (min-width:1280px){.lg\\:focus\\:to-blue-700:focus{--gradient-to-color:#2b6cb0!important}}@media (min-width:1280px){.lg\\:focus\\:to-blue-800:focus{--gradient-to-color:#2c5282!important}}@media (min-width:1280px){.lg\\:focus\\:to-blue-900:focus{--gradient-to-color:#2a4365!important}}@media (min-width:1280px){.lg\\:focus\\:to-indigo-100:focus{--gradient-to-color:#ebf4ff!important}}@media (min-width:1280px){.lg\\:focus\\:to-indigo-200:focus{--gradient-to-color:#c3dafe!important}}@media (min-width:1280px){.lg\\:focus\\:to-indigo-300:focus{--gradient-to-color:#a3bffa!important}}@media (min-width:1280px){.lg\\:focus\\:to-indigo-400:focus{--gradient-to-color:#7f9cf5!important}}@media (min-width:1280px){.lg\\:focus\\:to-indigo-500:focus{--gradient-to-color:#667eea!important}}@media (min-width:1280px){.lg\\:focus\\:to-indigo-600:focus{--gradient-to-color:#5a67d8!important}}@media (min-width:1280px){.lg\\:focus\\:to-indigo-700:focus{--gradient-to-color:#4c51bf!important}}@media (min-width:1280px){.lg\\:focus\\:to-indigo-800:focus{--gradient-to-color:#434190!important}}@media (min-width:1280px){.lg\\:focus\\:to-indigo-900:focus{--gradient-to-color:#3c366b!important}}@media (min-width:1280px){.lg\\:focus\\:to-purple-100:focus{--gradient-to-color:#faf5ff!important}}@media (min-width:1280px){.lg\\:focus\\:to-purple-200:focus{--gradient-to-color:#e9d8fd!important}}@media (min-width:1280px){.lg\\:focus\\:to-purple-300:focus{--gradient-to-color:#d6bcfa!important}}@media (min-width:1280px){.lg\\:focus\\:to-purple-400:focus{--gradient-to-color:#b794f4!important}}@media (min-width:1280px){.lg\\:focus\\:to-purple-500:focus{--gradient-to-color:#9f7aea!important}}@media (min-width:1280px){.lg\\:focus\\:to-purple-600:focus{--gradient-to-color:#805ad5!important}}@media (min-width:1280px){.lg\\:focus\\:to-purple-700:focus{--gradient-to-color:#6b46c1!important}}@media (min-width:1280px){.lg\\:focus\\:to-purple-800:focus{--gradient-to-color:#553c9a!important}}@media (min-width:1280px){.lg\\:focus\\:to-purple-900:focus{--gradient-to-color:#44337a!important}}@media (min-width:1280px){.lg\\:focus\\:to-pink-100:focus{--gradient-to-color:#fff5f7!important}}@media (min-width:1280px){.lg\\:focus\\:to-pink-200:focus{--gradient-to-color:#fed7e2!important}}@media (min-width:1280px){.lg\\:focus\\:to-pink-300:focus{--gradient-to-color:#fbb6ce!important}}@media (min-width:1280px){.lg\\:focus\\:to-pink-400:focus{--gradient-to-color:#f687b3!important}}@media (min-width:1280px){.lg\\:focus\\:to-pink-500:focus{--gradient-to-color:#ed64a6!important}}@media (min-width:1280px){.lg\\:focus\\:to-pink-600:focus{--gradient-to-color:#d53f8c!important}}@media (min-width:1280px){.lg\\:focus\\:to-pink-700:focus{--gradient-to-color:#b83280!important}}@media (min-width:1280px){.lg\\:focus\\:to-pink-800:focus{--gradient-to-color:#97266d!important}}@media (min-width:1280px){.lg\\:focus\\:to-pink-900:focus{--gradient-to-color:#702459!important}}@media (min-width:1280px){.lg\\:bg-opacity-0{--bg-opacity:0!important}}@media (min-width:1280px){.lg\\:bg-opacity-25{--bg-opacity:0.25!important}}@media (min-width:1280px){.lg\\:bg-opacity-50{--bg-opacity:0.5!important}}@media (min-width:1280px){.lg\\:bg-opacity-75{--bg-opacity:0.75!important}}@media (min-width:1280px){.lg\\:bg-opacity-100{--bg-opacity:1!important}}@media (min-width:1280px){.lg\\:hover\\:bg-opacity-0:hover{--bg-opacity:0!important}}@media (min-width:1280px){.lg\\:hover\\:bg-opacity-25:hover{--bg-opacity:0.25!important}}@media (min-width:1280px){.lg\\:hover\\:bg-opacity-50:hover{--bg-opacity:0.5!important}}@media (min-width:1280px){.lg\\:hover\\:bg-opacity-75:hover{--bg-opacity:0.75!important}}@media (min-width:1280px){.lg\\:hover\\:bg-opacity-100:hover{--bg-opacity:1!important}}@media (min-width:1280px){.lg\\:focus\\:bg-opacity-0:focus{--bg-opacity:0!important}}@media (min-width:1280px){.lg\\:focus\\:bg-opacity-25:focus{--bg-opacity:0.25!important}}@media (min-width:1280px){.lg\\:focus\\:bg-opacity-50:focus{--bg-opacity:0.5!important}}@media (min-width:1280px){.lg\\:focus\\:bg-opacity-75:focus{--bg-opacity:0.75!important}}@media (min-width:1280px){.lg\\:focus\\:bg-opacity-100:focus{--bg-opacity:1!important}}@media (min-width:1280px){.lg\\:bg-bottom{background-position:bottom!important}}@media (min-width:1280px){.lg\\:bg-center{background-position:50%!important}}@media (min-width:1280px){.lg\\:bg-left{background-position:0!important}}@media (min-width:1280px){.lg\\:bg-left-bottom{background-position:0 100%!important}}@media (min-width:1280px){.lg\\:bg-left-top{background-position:0 0!important}}@media (min-width:1280px){.lg\\:bg-right{background-position:100%!important}}@media (min-width:1280px){.lg\\:bg-right-bottom{background-position:100% 100%!important}}@media (min-width:1280px){.lg\\:bg-right-top{background-position:100% 0!important}}@media (min-width:1280px){.lg\\:bg-top{background-position:top!important}}@media (min-width:1280px){.lg\\:bg-repeat{background-repeat:repeat!important}}@media (min-width:1280px){.lg\\:bg-no-repeat{background-repeat:no-repeat!important}}@media (min-width:1280px){.lg\\:bg-repeat-x{background-repeat:repeat-x!important}}@media (min-width:1280px){.lg\\:bg-repeat-y{background-repeat:repeat-y!important}}@media (min-width:1280px){.lg\\:bg-repeat-round{background-repeat:round!important}}@media (min-width:1280px){.lg\\:bg-repeat-space{background-repeat:space!important}}@media (min-width:1280px){.lg\\:bg-auto{background-size:auto!important}}@media (min-width:1280px){.lg\\:bg-cover{background-size:cover!important}}@media (min-width:1280px){.lg\\:bg-contain{background-size:contain!important}}@media (min-width:1280px){.lg\\:border-collapse{border-collapse:collapse!important}}@media (min-width:1280px){.lg\\:border-separate{border-collapse:initial!important}}@media (min-width:1280px){.lg\\:border-opacity-0{--border-opacity:0!important}}@media (min-width:1280px){.lg\\:border-opacity-25{--border-opacity:0.25!important}}@media (min-width:1280px){.lg\\:border-opacity-50{--border-opacity:0.5!important}}@media (min-width:1280px){.lg\\:border-opacity-75{--border-opacity:0.75!important}}@media (min-width:1280px){.lg\\:border-opacity-100{--border-opacity:1!important}}@media (min-width:1280px){.lg\\:hover\\:border-opacity-0:hover{--border-opacity:0!important}}@media (min-width:1280px){.lg\\:hover\\:border-opacity-25:hover{--border-opacity:0.25!important}}@media (min-width:1280px){.lg\\:hover\\:border-opacity-50:hover{--border-opacity:0.5!important}}@media (min-width:1280px){.lg\\:hover\\:border-opacity-75:hover{--border-opacity:0.75!important}}@media (min-width:1280px){.lg\\:hover\\:border-opacity-100:hover{--border-opacity:1!important}}@media (min-width:1280px){.lg\\:focus\\:border-opacity-0:focus{--border-opacity:0!important}}@media (min-width:1280px){.lg\\:focus\\:border-opacity-25:focus{--border-opacity:0.25!important}}@media (min-width:1280px){.lg\\:focus\\:border-opacity-50:focus{--border-opacity:0.5!important}}@media (min-width:1280px){.lg\\:focus\\:border-opacity-75:focus{--border-opacity:0.75!important}}@media (min-width:1280px){.lg\\:focus\\:border-opacity-100:focus{--border-opacity:1!important}}@media (min-width:1280px){.lg\\:rounded-none{border-radius:0!important}}@media (min-width:1280px){.lg\\:rounded-sm{border-radius:.125rem!important}}@media (min-width:1280px){.lg\\:rounded{border-radius:.25rem!important}}@media (min-width:1280px){.lg\\:rounded-md{border-radius:.375rem!important}}@media (min-width:1280px){.lg\\:rounded-lg{border-radius:.5rem!important}}@media (min-width:1280px){.lg\\:rounded-xl{border-radius:.75rem!important}}@media (min-width:1280px){.lg\\:rounded-2xl{border-radius:1rem!important}}@media (min-width:1280px){.lg\\:rounded-3xl{border-radius:1.5rem!important}}@media (min-width:1280px){.lg\\:rounded-full{border-radius:9999px!important}}@media (min-width:1280px){.lg\\:rounded-t-none{border-top-left-radius:0!important;border-top-right-radius:0!important}}@media (min-width:1280px){.lg\\:rounded-r-none{border-top-right-radius:0!important;border-bottom-right-radius:0!important}}@media (min-width:1280px){.lg\\:rounded-b-none{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}}@media (min-width:1280px){.lg\\:rounded-l-none{border-top-left-radius:0!important;border-bottom-left-radius:0!important}}@media (min-width:1280px){.lg\\:rounded-t-sm{border-top-left-radius:.125rem!important}}@media (min-width:1280px){.lg\\:rounded-r-sm,.lg\\:rounded-t-sm{border-top-right-radius:.125rem!important}}@media (min-width:1280px){.lg\\:rounded-b-sm,.lg\\:rounded-r-sm{border-bottom-right-radius:.125rem!important}}@media (min-width:1280px){.lg\\:rounded-b-sm,.lg\\:rounded-l-sm{border-bottom-left-radius:.125rem!important}.lg\\:rounded-l-sm{border-top-left-radius:.125rem!important}}@media (min-width:1280px){.lg\\:rounded-t{border-top-left-radius:.25rem!important}}@media (min-width:1280px){.lg\\:rounded-r,.lg\\:rounded-t{border-top-right-radius:.25rem!important}}@media (min-width:1280px){.lg\\:rounded-b,.lg\\:rounded-r{border-bottom-right-radius:.25rem!important}}@media (min-width:1280px){.lg\\:rounded-b,.lg\\:rounded-l{border-bottom-left-radius:.25rem!important}.lg\\:rounded-l{border-top-left-radius:.25rem!important}}@media (min-width:1280px){.lg\\:rounded-t-md{border-top-left-radius:.375rem!important}}@media (min-width:1280px){.lg\\:rounded-r-md,.lg\\:rounded-t-md{border-top-right-radius:.375rem!important}}@media (min-width:1280px){.lg\\:rounded-b-md,.lg\\:rounded-r-md{border-bottom-right-radius:.375rem!important}}@media (min-width:1280px){.lg\\:rounded-b-md,.lg\\:rounded-l-md{border-bottom-left-radius:.375rem!important}.lg\\:rounded-l-md{border-top-left-radius:.375rem!important}}@media (min-width:1280px){.lg\\:rounded-t-lg{border-top-left-radius:.5rem!important}}@media (min-width:1280px){.lg\\:rounded-r-lg,.lg\\:rounded-t-lg{border-top-right-radius:.5rem!important}}@media (min-width:1280px){.lg\\:rounded-b-lg,.lg\\:rounded-r-lg{border-bottom-right-radius:.5rem!important}}@media (min-width:1280px){.lg\\:rounded-b-lg,.lg\\:rounded-l-lg{border-bottom-left-radius:.5rem!important}.lg\\:rounded-l-lg{border-top-left-radius:.5rem!important}}@media (min-width:1280px){.lg\\:rounded-t-xl{border-top-left-radius:.75rem!important}}@media (min-width:1280px){.lg\\:rounded-r-xl,.lg\\:rounded-t-xl{border-top-right-radius:.75rem!important}}@media (min-width:1280px){.lg\\:rounded-b-xl,.lg\\:rounded-r-xl{border-bottom-right-radius:.75rem!important}}@media (min-width:1280px){.lg\\:rounded-b-xl,.lg\\:rounded-l-xl{border-bottom-left-radius:.75rem!important}.lg\\:rounded-l-xl{border-top-left-radius:.75rem!important}}@media (min-width:1280px){.lg\\:rounded-t-2xl{border-top-left-radius:1rem!important}}@media (min-width:1280px){.lg\\:rounded-r-2xl,.lg\\:rounded-t-2xl{border-top-right-radius:1rem!important}}@media (min-width:1280px){.lg\\:rounded-b-2xl,.lg\\:rounded-r-2xl{border-bottom-right-radius:1rem!important}}@media (min-width:1280px){.lg\\:rounded-b-2xl,.lg\\:rounded-l-2xl{border-bottom-left-radius:1rem!important}.lg\\:rounded-l-2xl{border-top-left-radius:1rem!important}}@media (min-width:1280px){.lg\\:rounded-t-3xl{border-top-left-radius:1.5rem!important}}@media (min-width:1280px){.lg\\:rounded-r-3xl,.lg\\:rounded-t-3xl{border-top-right-radius:1.5rem!important}}@media (min-width:1280px){.lg\\:rounded-b-3xl,.lg\\:rounded-r-3xl{border-bottom-right-radius:1.5rem!important}}@media (min-width:1280px){.lg\\:rounded-b-3xl,.lg\\:rounded-l-3xl{border-bottom-left-radius:1.5rem!important}.lg\\:rounded-l-3xl{border-top-left-radius:1.5rem!important}}@media (min-width:1280px){.lg\\:rounded-t-full{border-top-left-radius:9999px!important}}@media (min-width:1280px){.lg\\:rounded-r-full,.lg\\:rounded-t-full{border-top-right-radius:9999px!important}}@media (min-width:1280px){.lg\\:rounded-b-full,.lg\\:rounded-r-full{border-bottom-right-radius:9999px!important}}@media (min-width:1280px){.lg\\:rounded-b-full,.lg\\:rounded-l-full{border-bottom-left-radius:9999px!important}.lg\\:rounded-l-full{border-top-left-radius:9999px!important}}@media (min-width:1280px){.lg\\:rounded-tl-none{border-top-left-radius:0!important}}@media (min-width:1280px){.lg\\:rounded-tr-none{border-top-right-radius:0!important}}@media (min-width:1280px){.lg\\:rounded-br-none{border-bottom-right-radius:0!important}}@media (min-width:1280px){.lg\\:rounded-bl-none{border-bottom-left-radius:0!important}}@media (min-width:1280px){.lg\\:rounded-tl-sm{border-top-left-radius:.125rem!important}}@media (min-width:1280px){.lg\\:rounded-tr-sm{border-top-right-radius:.125rem!important}}@media (min-width:1280px){.lg\\:rounded-br-sm{border-bottom-right-radius:.125rem!important}}@media (min-width:1280px){.lg\\:rounded-bl-sm{border-bottom-left-radius:.125rem!important}}@media (min-width:1280px){.lg\\:rounded-tl{border-top-left-radius:.25rem!important}}@media (min-width:1280px){.lg\\:rounded-tr{border-top-right-radius:.25rem!important}}@media (min-width:1280px){.lg\\:rounded-br{border-bottom-right-radius:.25rem!important}}@media (min-width:1280px){.lg\\:rounded-bl{border-bottom-left-radius:.25rem!important}}@media (min-width:1280px){.lg\\:rounded-tl-md{border-top-left-radius:.375rem!important}}@media (min-width:1280px){.lg\\:rounded-tr-md{border-top-right-radius:.375rem!important}}@media (min-width:1280px){.lg\\:rounded-br-md{border-bottom-right-radius:.375rem!important}}@media (min-width:1280px){.lg\\:rounded-bl-md{border-bottom-left-radius:.375rem!important}}@media (min-width:1280px){.lg\\:rounded-tl-lg{border-top-left-radius:.5rem!important}}@media (min-width:1280px){.lg\\:rounded-tr-lg{border-top-right-radius:.5rem!important}}@media (min-width:1280px){.lg\\:rounded-br-lg{border-bottom-right-radius:.5rem!important}}@media (min-width:1280px){.lg\\:rounded-bl-lg{border-bottom-left-radius:.5rem!important}}@media (min-width:1280px){.lg\\:rounded-tl-xl{border-top-left-radius:.75rem!important}}@media (min-width:1280px){.lg\\:rounded-tr-xl{border-top-right-radius:.75rem!important}}@media (min-width:1280px){.lg\\:rounded-br-xl{border-bottom-right-radius:.75rem!important}}@media (min-width:1280px){.lg\\:rounded-bl-xl{border-bottom-left-radius:.75rem!important}}@media (min-width:1280px){.lg\\:rounded-tl-2xl{border-top-left-radius:1rem!important}}@media (min-width:1280px){.lg\\:rounded-tr-2xl{border-top-right-radius:1rem!important}}@media (min-width:1280px){.lg\\:rounded-br-2xl{border-bottom-right-radius:1rem!important}}@media (min-width:1280px){.lg\\:rounded-bl-2xl{border-bottom-left-radius:1rem!important}}@media (min-width:1280px){.lg\\:rounded-tl-3xl{border-top-left-radius:1.5rem!important}}@media (min-width:1280px){.lg\\:rounded-tr-3xl{border-top-right-radius:1.5rem!important}}@media (min-width:1280px){.lg\\:rounded-br-3xl{border-bottom-right-radius:1.5rem!important}}@media (min-width:1280px){.lg\\:rounded-bl-3xl{border-bottom-left-radius:1.5rem!important}}@media (min-width:1280px){.lg\\:rounded-tl-full{border-top-left-radius:9999px!important}}@media (min-width:1280px){.lg\\:rounded-tr-full{border-top-right-radius:9999px!important}}@media (min-width:1280px){.lg\\:rounded-br-full{border-bottom-right-radius:9999px!important}}@media (min-width:1280px){.lg\\:rounded-bl-full{border-bottom-left-radius:9999px!important}}@media (min-width:1280px){.lg\\:border-solid{border-style:solid!important}}@media (min-width:1280px){.lg\\:border-dashed{border-style:dashed!important}}@media (min-width:1280px){.lg\\:border-dotted{border-style:dotted!important}}@media (min-width:1280px){.lg\\:border-double{border-style:double!important}}@media (min-width:1280px){.lg\\:border-none{border-style:none!important}}@media (min-width:1280px){.lg\\:border-0{border-width:0!important}}@media (min-width:1280px){.lg\\:border-2{border-width:2px!important}}@media (min-width:1280px){.lg\\:border-4{border-width:4px!important}}@media (min-width:1280px){.lg\\:border-8{border-width:8px!important}}@media (min-width:1280px){.lg\\:border{border-width:1px!important}}@media (min-width:1280px){.lg\\:border-t-0{border-top-width:0!important}}@media (min-width:1280px){.lg\\:border-r-0{border-right-width:0!important}}@media (min-width:1280px){.lg\\:border-b-0{border-bottom-width:0!important}}@media (min-width:1280px){.lg\\:border-l-0{border-left-width:0!important}}@media (min-width:1280px){.lg\\:border-t-2{border-top-width:2px!important}}@media (min-width:1280px){.lg\\:border-r-2{border-right-width:2px!important}}@media (min-width:1280px){.lg\\:border-b-2{border-bottom-width:2px!important}}@media (min-width:1280px){.lg\\:border-l-2{border-left-width:2px!important}}@media (min-width:1280px){.lg\\:border-t-4{border-top-width:4px!important}}@media (min-width:1280px){.lg\\:border-r-4{border-right-width:4px!important}}@media (min-width:1280px){.lg\\:border-b-4{border-bottom-width:4px!important}}@media (min-width:1280px){.lg\\:border-l-4{border-left-width:4px!important}}@media (min-width:1280px){.lg\\:border-t-8{border-top-width:8px!important}}@media (min-width:1280px){.lg\\:border-r-8{border-right-width:8px!important}}@media (min-width:1280px){.lg\\:border-b-8{border-bottom-width:8px!important}}@media (min-width:1280px){.lg\\:border-l-8{border-left-width:8px!important}}@media (min-width:1280px){.lg\\:border-t{border-top-width:1px!important}}@media (min-width:1280px){.lg\\:border-r{border-right-width:1px!important}}@media (min-width:1280px){.lg\\:border-b{border-bottom-width:1px!important}}@media (min-width:1280px){.lg\\:border-l{border-left-width:1px!important}}@media (min-width:1280px){.lg\\:box-border{box-sizing:border-box!important}}@media (min-width:1280px){.lg\\:box-content{box-sizing:initial!important}}@media (min-width:1280px){.lg\\:cursor-crosshair{cursor:crosshair!important}}@media (min-width:1280px){.lg\\:cursor-zoom-in{cursor:zoom-in!important}}@media (min-width:1280px){.lg\\:block{display:block!important}}@media (min-width:1280px){.lg\\:inline-block{display:inline-block!important}}@media (min-width:1280px){.lg\\:inline{display:inline!important}}@media (min-width:1280px){.lg\\:flex{display:flex!important}}@media (min-width:1280px){.lg\\:inline-flex{display:inline-flex!important}}@media (min-width:1280px){.lg\\:table{display:table!important}}@media (min-width:1280px){.lg\\:table-caption{display:table-caption!important}}@media (min-width:1280px){.lg\\:table-cell{display:table-cell!important}}@media (min-width:1280px){.lg\\:table-column{display:table-column!important}}@media (min-width:1280px){.lg\\:table-column-group{display:table-column-group!important}}@media (min-width:1280px){.lg\\:table-footer-group{display:table-footer-group!important}}@media (min-width:1280px){.lg\\:table-header-group{display:table-header-group!important}}@media (min-width:1280px){.lg\\:table-row-group{display:table-row-group!important}}@media (min-width:1280px){.lg\\:table-row{display:table-row!important}}@media (min-width:1280px){.lg\\:flow-root{display:flow-root!important}}@media (min-width:1280px){.lg\\:grid{display:grid!important}}@media (min-width:1280px){.lg\\:inline-grid{display:inline-grid!important}}@media (min-width:1280px){.lg\\:contents{display:contents!important}}@media (min-width:1280px){.lg\\:hidden{display:none!important}}@media (min-width:1280px){.lg\\:flex-row{flex-direction:row!important}}@media (min-width:1280px){.lg\\:flex-row-reverse{flex-direction:row-reverse!important}}@media (min-width:1280px){.lg\\:flex-col{flex-direction:column!important}}@media (min-width:1280px){.lg\\:flex-col-reverse{flex-direction:column-reverse!important}}@media (min-width:1280px){.lg\\:flex-wrap{flex-wrap:wrap!important}}@media (min-width:1280px){.lg\\:flex-wrap-reverse{flex-wrap:wrap-reverse!important}}@media (min-width:1280px){.lg\\:flex-no-wrap{flex-wrap:nowrap!important}}@media (min-width:1280px){.lg\\:place-items-auto{place-items:auto!important}}@media (min-width:1280px){.lg\\:place-items-start{place-items:start!important}}@media (min-width:1280px){.lg\\:place-items-end{place-items:end!important}}@media (min-width:1280px){.lg\\:place-items-center{place-items:center!important}}@media (min-width:1280px){.lg\\:place-items-stretch{place-items:stretch!important}}@media (min-width:1280px){.lg\\:place-content-center{place-content:center!important}}@media (min-width:1280px){.lg\\:place-content-start{place-content:start!important}}@media (min-width:1280px){.lg\\:place-content-end{place-content:end!important}}@media (min-width:1280px){.lg\\:place-content-between{place-content:space-between!important}}@media (min-width:1280px){.lg\\:place-content-around{place-content:space-around!important}}@media (min-width:1280px){.lg\\:place-content-evenly{place-content:space-evenly!important}}@media (min-width:1280px){.lg\\:place-content-stretch{place-content:stretch!important}}@media (min-width:1280px){.lg\\:place-self-auto{place-self:auto!important}}@media (min-width:1280px){.lg\\:place-self-start{place-self:start!important}}@media (min-width:1280px){.lg\\:place-self-end{place-self:end!important}}@media (min-width:1280px){.lg\\:place-self-center{place-self:center!important}}@media (min-width:1280px){.lg\\:place-self-stretch{place-self:stretch!important}}@media (min-width:1280px){.lg\\:items-start{align-items:flex-start!important}}@media (min-width:1280px){.lg\\:items-end{align-items:flex-end!important}}@media (min-width:1280px){.lg\\:items-center{align-items:center!important}}@media (min-width:1280px){.lg\\:items-baseline{align-items:baseline!important}}@media (min-width:1280px){.lg\\:items-stretch{align-items:stretch!important}}@media (min-width:1280px){.lg\\:content-center{align-content:center!important}}@media (min-width:1280px){.lg\\:content-start{align-content:flex-start!important}}@media (min-width:1280px){.lg\\:content-end{align-content:flex-end!important}}@media (min-width:1280px){.lg\\:content-between{align-content:space-between!important}}@media (min-width:1280px){.lg\\:content-around{align-content:space-around!important}}@media (min-width:1280px){.lg\\:content-evenly{align-content:space-evenly!important}}@media (min-width:1280px){.lg\\:self-auto{align-self:auto!important}}@media (min-width:1280px){.lg\\:self-start{align-self:flex-start!important}}@media (min-width:1280px){.lg\\:self-end{align-self:flex-end!important}}@media (min-width:1280px){.lg\\:self-center{align-self:center!important}}@media (min-width:1280px){.lg\\:self-stretch{align-self:stretch!important}}@media (min-width:1280px){.lg\\:justify-items-auto{justify-items:auto!important}}@media (min-width:1280px){.lg\\:justify-items-start{justify-items:start!important}}@media (min-width:1280px){.lg\\:justify-items-end{justify-items:end!important}}@media (min-width:1280px){.lg\\:justify-items-center{justify-items:center!important}}@media (min-width:1280px){.lg\\:justify-items-stretch{justify-items:stretch!important}}@media (min-width:1280px){.lg\\:justify-start{justify-content:flex-start!important}}@media (min-width:1280px){.lg\\:justify-end{justify-content:flex-end!important}}@media (min-width:1280px){.lg\\:justify-center{justify-content:center!important}}@media (min-width:1280px){.lg\\:justify-between{justify-content:space-between!important}}@media (min-width:1280px){.lg\\:justify-around{justify-content:space-around!important}}@media (min-width:1280px){.lg\\:justify-evenly{justify-content:space-evenly!important}}@media (min-width:1280px){.lg\\:justify-self-auto{justify-self:auto!important}}@media (min-width:1280px){.lg\\:justify-self-start{justify-self:start!important}}@media (min-width:1280px){.lg\\:justify-self-end{justify-self:end!important}}@media (min-width:1280px){.lg\\:justify-self-center{justify-self:center!important}}@media (min-width:1280px){.lg\\:justify-self-stretch{justify-self:stretch!important}}@media (min-width:1280px){.lg\\:flex-1{flex:1 1 0%!important}}@media (min-width:1280px){.lg\\:flex-auto{flex:1 1 auto!important}}@media (min-width:1280px){.lg\\:flex-initial{flex:0 1 auto!important}}@media (min-width:1280px){.lg\\:flex-none{flex:none!important}}@media (min-width:1280px){.lg\\:flex-grow-0{flex-grow:0!important}}@media (min-width:1280px){.lg\\:flex-grow{flex-grow:1!important}}@media (min-width:1280px){.lg\\:flex-shrink-0{flex-shrink:0!important}}@media (min-width:1280px){.lg\\:flex-shrink{flex-shrink:1!important}}@media (min-width:1280px){.lg\\:order-1{order:1!important}}@media (min-width:1280px){.lg\\:order-2{order:2!important}}@media (min-width:1280px){.lg\\:order-3{order:3!important}}@media (min-width:1280px){.lg\\:order-4{order:4!important}}@media (min-width:1280px){.lg\\:order-5{order:5!important}}@media (min-width:1280px){.lg\\:order-6{order:6!important}}@media (min-width:1280px){.lg\\:order-7{order:7!important}}@media (min-width:1280px){.lg\\:order-8{order:8!important}}@media (min-width:1280px){.lg\\:order-9{order:9!important}}@media (min-width:1280px){.lg\\:order-10{order:10!important}}@media (min-width:1280px){.lg\\:order-11{order:11!important}}@media (min-width:1280px){.lg\\:order-12{order:12!important}}@media (min-width:1280px){.lg\\:order-first{order:-9999!important}}@media (min-width:1280px){.lg\\:order-last{order:9999!important}}@media (min-width:1280px){.lg\\:order-none{order:0!important}}@media (min-width:1280px){.lg\\:float-right{float:right!important}}@media (min-width:1280px){.lg\\:float-left{float:left!important}}@media (min-width:1280px){.lg\\:float-none{float:none!important}}@media (min-width:1280px){.lg\\:clearfix:after{content:\"\"!important;display:table!important;clear:both!important}}@media (min-width:1280px){.lg\\:clear-left{clear:left!important}}@media (min-width:1280px){.lg\\:clear-right{clear:right!important}}@media (min-width:1280px){.lg\\:clear-both{clear:both!important}}@media (min-width:1280px){.lg\\:clear-none{clear:none!important}}@media (min-width:1280px){.lg\\:font-sans{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji!important}}@media (min-width:1280px){.lg\\:font-serif{font-family:Georgia,Cambria,Times New Roman,Times,serif!important}}@media (min-width:1280px){.lg\\:font-mono{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}}@media (min-width:1280px){.lg\\:font-hairline{font-weight:100!important}}@media (min-width:1280px){.lg\\:font-thin{font-weight:200!important}}@media (min-width:1280px){.lg\\:font-light{font-weight:300!important}}@media (min-width:1280px){.lg\\:font-normal{font-weight:400!important}}@media (min-width:1280px){.lg\\:font-medium{font-weight:500!important}}@media (min-width:1280px){.lg\\:font-semibold{font-weight:600!important}}@media (min-width:1280px){.lg\\:font-bold{font-weight:700!important}}@media (min-width:1280px){.lg\\:font-extrabold{font-weight:800!important}}@media (min-width:1280px){.lg\\:font-black{font-weight:900!important}}@media (min-width:1280px){.lg\\:hover\\:font-hairline:hover{font-weight:100!important}}@media (min-width:1280px){.lg\\:hover\\:font-thin:hover{font-weight:200!important}}@media (min-width:1280px){.lg\\:hover\\:font-light:hover{font-weight:300!important}}@media (min-width:1280px){.lg\\:hover\\:font-normal:hover{font-weight:400!important}}@media (min-width:1280px){.lg\\:hover\\:font-medium:hover{font-weight:500!important}}@media (min-width:1280px){.lg\\:hover\\:font-semibold:hover{font-weight:600!important}}@media (min-width:1280px){.lg\\:hover\\:font-bold:hover{font-weight:700!important}}@media (min-width:1280px){.lg\\:hover\\:font-extrabold:hover{font-weight:800!important}}@media (min-width:1280px){.lg\\:hover\\:font-black:hover{font-weight:900!important}}@media (min-width:1280px){.lg\\:focus\\:font-hairline:focus{font-weight:100!important}}@media (min-width:1280px){.lg\\:focus\\:font-thin:focus{font-weight:200!important}}@media (min-width:1280px){.lg\\:focus\\:font-light:focus{font-weight:300!important}}@media (min-width:1280px){.lg\\:focus\\:font-normal:focus{font-weight:400!important}}@media (min-width:1280px){.lg\\:focus\\:font-medium:focus{font-weight:500!important}}@media (min-width:1280px){.lg\\:focus\\:font-semibold:focus{font-weight:600!important}}@media (min-width:1280px){.lg\\:focus\\:font-bold:focus{font-weight:700!important}}@media (min-width:1280px){.lg\\:focus\\:font-extrabold:focus{font-weight:800!important}}@media (min-width:1280px){.lg\\:focus\\:font-black:focus{font-weight:900!important}}@media (min-width:1280px){.lg\\:h-0{height:0!important}}@media (min-width:1280px){.lg\\:h-1{height:.25rem!important}}@media (min-width:1280px){.lg\\:h-2{height:.5rem!important}}@media (min-width:1280px){.lg\\:h-3{height:.75rem!important}}@media (min-width:1280px){.lg\\:h-4{height:1rem!important}}@media (min-width:1280px){.lg\\:h-5{height:1.25rem!important}}@media (min-width:1280px){.lg\\:h-6{height:1.5rem!important}}@media (min-width:1280px){.lg\\:h-8{height:2rem!important}}@media (min-width:1280px){.lg\\:h-10{height:2.5rem!important}}@media (min-width:1280px){.lg\\:h-12{height:3rem!important}}@media (min-width:1280px){.lg\\:h-16{height:4rem!important}}@media (min-width:1280px){.lg\\:h-20{height:5rem!important}}@media (min-width:1280px){.lg\\:h-24{height:6rem!important}}@media (min-width:1280px){.lg\\:h-32{height:8rem!important}}@media (min-width:1280px){.lg\\:h-40{height:10rem!important}}@media (min-width:1280px){.lg\\:h-48{height:12rem!important}}@media (min-width:1280px){.lg\\:h-56{height:14rem!important}}@media (min-width:1280px){.lg\\:h-64{height:16rem!important}}@media (min-width:1280px){.lg\\:h-auto{height:auto!important}}@media (min-width:1280px){.lg\\:h-px{height:1px!important}}@media (min-width:1280px){.lg\\:h-full{height:100%!important}}@media (min-width:1280px){.lg\\:h-screen{height:100vh!important}}@media (min-width:1280px){.lg\\:text-xs{font-size:.75rem!important}}@media (min-width:1280px){.lg\\:text-sm{font-size:.875rem!important}}@media (min-width:1280px){.lg\\:text-base{font-size:1rem!important}}@media (min-width:1280px){.lg\\:text-lg{font-size:1.125rem!important}}@media (min-width:1280px){.lg\\:text-xl{font-size:1.25rem!important}}@media (min-width:1280px){.lg\\:text-2xl{font-size:1.5rem!important}}@media (min-width:1280px){.lg\\:text-3xl{font-size:1.875rem!important}}@media (min-width:1280px){.lg\\:text-4xl{font-size:2.25rem!important}}@media (min-width:1280px){.lg\\:text-5xl{font-size:3rem!important}}@media (min-width:1280px){.lg\\:text-6xl{font-size:4rem!important}}@media (min-width:1280px){.lg\\:leading-3{line-height:.75rem!important}}@media (min-width:1280px){.lg\\:leading-4{line-height:1rem!important}}@media (min-width:1280px){.lg\\:leading-5{line-height:1.25rem!important}}@media (min-width:1280px){.lg\\:leading-6{line-height:1.5rem!important}}@media (min-width:1280px){.lg\\:leading-7{line-height:1.75rem!important}}@media (min-width:1280px){.lg\\:leading-8{line-height:2rem!important}}@media (min-width:1280px){.lg\\:leading-9{line-height:2.25rem!important}}@media (min-width:1280px){.lg\\:leading-10{line-height:2.5rem!important}}@media (min-width:1280px){.lg\\:leading-none{line-height:1!important}}@media (min-width:1280px){.lg\\:leading-tight{line-height:1.25!important}}@media (min-width:1280px){.lg\\:leading-snug{line-height:1.375!important}}@media (min-width:1280px){.lg\\:leading-normal{line-height:1.5!important}}@media (min-width:1280px){.lg\\:leading-relaxed{line-height:1.625!important}}@media (min-width:1280px){.lg\\:leading-loose{line-height:2!important}}@media (min-width:1280px){.lg\\:list-inside{list-style-position:inside!important}}@media (min-width:1280px){.lg\\:list-outside{list-style-position:outside!important}}@media (min-width:1280px){.lg\\:list-none{list-style-type:none!important}}@media (min-width:1280px){.lg\\:list-disc{list-style-type:disc!important}}@media (min-width:1280px){.lg\\:list-decimal{list-style-type:decimal!important}}@media (min-width:1280px){.lg\\:m-0{margin:0!important}}@media (min-width:1280px){.lg\\:m-1{margin:.25rem!important}}@media (min-width:1280px){.lg\\:m-2{margin:.5rem!important}}@media (min-width:1280px){.lg\\:m-3{margin:.75rem!important}}@media (min-width:1280px){.lg\\:m-4{margin:1rem!important}}@media (min-width:1280px){.lg\\:m-5{margin:1.25rem!important}}@media (min-width:1280px){.lg\\:m-6{margin:1.5rem!important}}@media (min-width:1280px){.lg\\:m-8{margin:2rem!important}}@media (min-width:1280px){.lg\\:m-10{margin:2.5rem!important}}@media (min-width:1280px){.lg\\:m-12{margin:3rem!important}}@media (min-width:1280px){.lg\\:m-16{margin:4rem!important}}@media (min-width:1280px){.lg\\:m-20{margin:5rem!important}}@media (min-width:1280px){.lg\\:m-24{margin:6rem!important}}@media (min-width:1280px){.lg\\:m-32{margin:8rem!important}}@media (min-width:1280px){.lg\\:m-40{margin:10rem!important}}@media (min-width:1280px){.lg\\:m-48{margin:12rem!important}}@media (min-width:1280px){.lg\\:m-56{margin:14rem!important}}@media (min-width:1280px){.lg\\:m-64{margin:16rem!important}}@media (min-width:1280px){.lg\\:m-auto{margin:auto!important}}@media (min-width:1280px){.lg\\:m-px{margin:1px!important}}@media (min-width:1280px){.lg\\:-m-1{margin:-.25rem!important}}@media (min-width:1280px){.lg\\:-m-2{margin:-.5rem!important}}@media (min-width:1280px){.lg\\:-m-3{margin:-.75rem!important}}@media (min-width:1280px){.lg\\:-m-4{margin:-1rem!important}}@media (min-width:1280px){.lg\\:-m-5{margin:-1.25rem!important}}@media (min-width:1280px){.lg\\:-m-6{margin:-1.5rem!important}}@media (min-width:1280px){.lg\\:-m-8{margin:-2rem!important}}@media (min-width:1280px){.lg\\:-m-10{margin:-2.5rem!important}}@media (min-width:1280px){.lg\\:-m-12{margin:-3rem!important}}@media (min-width:1280px){.lg\\:-m-16{margin:-4rem!important}}@media (min-width:1280px){.lg\\:-m-20{margin:-5rem!important}}@media (min-width:1280px){.lg\\:-m-24{margin:-6rem!important}}@media (min-width:1280px){.lg\\:-m-32{margin:-8rem!important}}@media (min-width:1280px){.lg\\:-m-40{margin:-10rem!important}}@media (min-width:1280px){.lg\\:-m-48{margin:-12rem!important}}@media (min-width:1280px){.lg\\:-m-56{margin:-14rem!important}}@media (min-width:1280px){.lg\\:-m-64{margin:-16rem!important}}@media (min-width:1280px){.lg\\:-m-px{margin:-1px!important}}@media (min-width:1280px){.lg\\:my-0{margin-top:0!important;margin-bottom:0!important}}@media (min-width:1280px){.lg\\:mx-0{margin-left:0!important;margin-right:0!important}}@media (min-width:1280px){.lg\\:my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}}@media (min-width:1280px){.lg\\:mx-1{margin-left:.25rem!important;margin-right:.25rem!important}}@media (min-width:1280px){.lg\\:my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}}@media (min-width:1280px){.lg\\:mx-2{margin-left:.5rem!important;margin-right:.5rem!important}}@media (min-width:1280px){.lg\\:my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}}@media (min-width:1280px){.lg\\:mx-3{margin-left:.75rem!important;margin-right:.75rem!important}}@media (min-width:1280px){.lg\\:my-4{margin-top:1rem!important;margin-bottom:1rem!important}}@media (min-width:1280px){.lg\\:mx-4{margin-left:1rem!important;margin-right:1rem!important}}@media (min-width:1280px){.lg\\:my-5{margin-top:1.25rem!important;margin-bottom:1.25rem!important}}@media (min-width:1280px){.lg\\:mx-5{margin-left:1.25rem!important;margin-right:1.25rem!important}}@media (min-width:1280px){.lg\\:my-6{margin-top:1.5rem!important;margin-bottom:1.5rem!important}}@media (min-width:1280px){.lg\\:mx-6{margin-left:1.5rem!important;margin-right:1.5rem!important}}@media (min-width:1280px){.lg\\:my-8{margin-top:2rem!important;margin-bottom:2rem!important}}@media (min-width:1280px){.lg\\:mx-8{margin-left:2rem!important;margin-right:2rem!important}}@media (min-width:1280px){.lg\\:my-10{margin-top:2.5rem!important;margin-bottom:2.5rem!important}}@media (min-width:1280px){.lg\\:mx-10{margin-left:2.5rem!important;margin-right:2.5rem!important}}@media (min-width:1280px){.lg\\:my-12{margin-top:3rem!important;margin-bottom:3rem!important}}@media (min-width:1280px){.lg\\:mx-12{margin-left:3rem!important;margin-right:3rem!important}}@media (min-width:1280px){.lg\\:my-16{margin-top:4rem!important;margin-bottom:4rem!important}}@media (min-width:1280px){.lg\\:mx-16{margin-left:4rem!important;margin-right:4rem!important}}@media (min-width:1280px){.lg\\:my-20{margin-top:5rem!important;margin-bottom:5rem!important}}@media (min-width:1280px){.lg\\:mx-20{margin-left:5rem!important;margin-right:5rem!important}}@media (min-width:1280px){.lg\\:my-24{margin-top:6rem!important;margin-bottom:6rem!important}}@media (min-width:1280px){.lg\\:mx-24{margin-left:6rem!important;margin-right:6rem!important}}@media (min-width:1280px){.lg\\:my-32{margin-top:8rem!important;margin-bottom:8rem!important}}@media (min-width:1280px){.lg\\:mx-32{margin-left:8rem!important;margin-right:8rem!important}}@media (min-width:1280px){.lg\\:my-40{margin-top:10rem!important;margin-bottom:10rem!important}}@media (min-width:1280px){.lg\\:mx-40{margin-left:10rem!important;margin-right:10rem!important}}@media (min-width:1280px){.lg\\:my-48{margin-top:12rem!important;margin-bottom:12rem!important}}@media (min-width:1280px){.lg\\:mx-48{margin-left:12rem!important;margin-right:12rem!important}}@media (min-width:1280px){.lg\\:my-56{margin-top:14rem!important;margin-bottom:14rem!important}}@media (min-width:1280px){.lg\\:mx-56{margin-left:14rem!important;margin-right:14rem!important}}@media (min-width:1280px){.lg\\:my-64{margin-top:16rem!important;margin-bottom:16rem!important}}@media (min-width:1280px){.lg\\:mx-64{margin-left:16rem!important;margin-right:16rem!important}}@media (min-width:1280px){.lg\\:my-auto{margin-top:auto!important;margin-bottom:auto!important}}@media (min-width:1280px){.lg\\:mx-auto{margin-left:auto!important;margin-right:auto!important}}@media (min-width:1280px){.lg\\:my-px{margin-top:1px!important;margin-bottom:1px!important}}@media (min-width:1280px){.lg\\:mx-px{margin-left:1px!important;margin-right:1px!important}}@media (min-width:1280px){.lg\\:-my-1{margin-top:-.25rem!important;margin-bottom:-.25rem!important}}@media (min-width:1280px){.lg\\:-mx-1{margin-left:-.25rem!important;margin-right:-.25rem!important}}@media (min-width:1280px){.lg\\:-my-2{margin-top:-.5rem!important;margin-bottom:-.5rem!important}}@media (min-width:1280px){.lg\\:-mx-2{margin-left:-.5rem!important;margin-right:-.5rem!important}}@media (min-width:1280px){.lg\\:-my-3{margin-top:-.75rem!important;margin-bottom:-.75rem!important}}@media (min-width:1280px){.lg\\:-mx-3{margin-left:-.75rem!important;margin-right:-.75rem!important}}@media (min-width:1280px){.lg\\:-my-4{margin-top:-1rem!important;margin-bottom:-1rem!important}}@media (min-width:1280px){.lg\\:-mx-4{margin-left:-1rem!important;margin-right:-1rem!important}}@media (min-width:1280px){.lg\\:-my-5{margin-top:-1.25rem!important;margin-bottom:-1.25rem!important}}@media (min-width:1280px){.lg\\:-mx-5{margin-left:-1.25rem!important;margin-right:-1.25rem!important}}@media (min-width:1280px){.lg\\:-my-6{margin-top:-1.5rem!important;margin-bottom:-1.5rem!important}}@media (min-width:1280px){.lg\\:-mx-6{margin-left:-1.5rem!important;margin-right:-1.5rem!important}}@media (min-width:1280px){.lg\\:-my-8{margin-top:-2rem!important;margin-bottom:-2rem!important}}@media (min-width:1280px){.lg\\:-mx-8{margin-left:-2rem!important;margin-right:-2rem!important}}@media (min-width:1280px){.lg\\:-my-10{margin-top:-2.5rem!important;margin-bottom:-2.5rem!important}}@media (min-width:1280px){.lg\\:-mx-10{margin-left:-2.5rem!important;margin-right:-2.5rem!important}}@media (min-width:1280px){.lg\\:-my-12{margin-top:-3rem!important;margin-bottom:-3rem!important}}@media (min-width:1280px){.lg\\:-mx-12{margin-left:-3rem!important;margin-right:-3rem!important}}@media (min-width:1280px){.lg\\:-my-16{margin-top:-4rem!important;margin-bottom:-4rem!important}}@media (min-width:1280px){.lg\\:-mx-16{margin-left:-4rem!important;margin-right:-4rem!important}}@media (min-width:1280px){.lg\\:-my-20{margin-top:-5rem!important;margin-bottom:-5rem!important}}@media (min-width:1280px){.lg\\:-mx-20{margin-left:-5rem!important;margin-right:-5rem!important}}@media (min-width:1280px){.lg\\:-my-24{margin-top:-6rem!important;margin-bottom:-6rem!important}}@media (min-width:1280px){.lg\\:-mx-24{margin-left:-6rem!important;margin-right:-6rem!important}}@media (min-width:1280px){.lg\\:-my-32{margin-top:-8rem!important;margin-bottom:-8rem!important}}@media (min-width:1280px){.lg\\:-mx-32{margin-left:-8rem!important;margin-right:-8rem!important}}@media (min-width:1280px){.lg\\:-my-40{margin-top:-10rem!important;margin-bottom:-10rem!important}}@media (min-width:1280px){.lg\\:-mx-40{margin-left:-10rem!important;margin-right:-10rem!important}}@media (min-width:1280px){.lg\\:-my-48{margin-top:-12rem!important;margin-bottom:-12rem!important}}@media (min-width:1280px){.lg\\:-mx-48{margin-left:-12rem!important;margin-right:-12rem!important}}@media (min-width:1280px){.lg\\:-my-56{margin-top:-14rem!important;margin-bottom:-14rem!important}}@media (min-width:1280px){.lg\\:-mx-56{margin-left:-14rem!important;margin-right:-14rem!important}}@media (min-width:1280px){.lg\\:-my-64{margin-top:-16rem!important;margin-bottom:-16rem!important}}@media (min-width:1280px){.lg\\:-mx-64{margin-left:-16rem!important;margin-right:-16rem!important}}@media (min-width:1280px){.lg\\:-my-px{margin-top:-1px!important;margin-bottom:-1px!important}}@media (min-width:1280px){.lg\\:-mx-px{margin-left:-1px!important;margin-right:-1px!important}}@media (min-width:1280px){.lg\\:mt-0{margin-top:0!important}}@media (min-width:1280px){.lg\\:mr-0{margin-right:0!important}}@media (min-width:1280px){.lg\\:mb-0{margin-bottom:0!important}}@media (min-width:1280px){.lg\\:ml-0{margin-left:0!important}}@media (min-width:1280px){.lg\\:mt-1{margin-top:.25rem!important}}@media (min-width:1280px){.lg\\:mr-1{margin-right:.25rem!important}}@media (min-width:1280px){.lg\\:mb-1{margin-bottom:.25rem!important}}@media (min-width:1280px){.lg\\:ml-1{margin-left:.25rem!important}}@media (min-width:1280px){.lg\\:mt-2{margin-top:.5rem!important}}@media (min-width:1280px){.lg\\:mr-2{margin-right:.5rem!important}}@media (min-width:1280px){.lg\\:mb-2{margin-bottom:.5rem!important}}@media (min-width:1280px){.lg\\:ml-2{margin-left:.5rem!important}}@media (min-width:1280px){.lg\\:mt-3{margin-top:.75rem!important}}@media (min-width:1280px){.lg\\:mr-3{margin-right:.75rem!important}}@media (min-width:1280px){.lg\\:mb-3{margin-bottom:.75rem!important}}@media (min-width:1280px){.lg\\:ml-3{margin-left:.75rem!important}}@media (min-width:1280px){.lg\\:mt-4{margin-top:1rem!important}}@media (min-width:1280px){.lg\\:mr-4{margin-right:1rem!important}}@media (min-width:1280px){.lg\\:mb-4{margin-bottom:1rem!important}}@media (min-width:1280px){.lg\\:ml-4{margin-left:1rem!important}}@media (min-width:1280px){.lg\\:mt-5{margin-top:1.25rem!important}}@media (min-width:1280px){.lg\\:mr-5{margin-right:1.25rem!important}}@media (min-width:1280px){.lg\\:mb-5{margin-bottom:1.25rem!important}}@media (min-width:1280px){.lg\\:ml-5{margin-left:1.25rem!important}}@media (min-width:1280px){.lg\\:mt-6{margin-top:1.5rem!important}}@media (min-width:1280px){.lg\\:mr-6{margin-right:1.5rem!important}}@media (min-width:1280px){.lg\\:mb-6{margin-bottom:1.5rem!important}}@media (min-width:1280px){.lg\\:ml-6{margin-left:1.5rem!important}}@media (min-width:1280px){.lg\\:mt-8{margin-top:2rem!important}}@media (min-width:1280px){.lg\\:mr-8{margin-right:2rem!important}}@media (min-width:1280px){.lg\\:mb-8{margin-bottom:2rem!important}}@media (min-width:1280px){.lg\\:ml-8{margin-left:2rem!important}}@media (min-width:1280px){.lg\\:mt-10{margin-top:2.5rem!important}}@media (min-width:1280px){.lg\\:mr-10{margin-right:2.5rem!important}}@media (min-width:1280px){.lg\\:mb-10{margin-bottom:2.5rem!important}}@media (min-width:1280px){.lg\\:ml-10{margin-left:2.5rem!important}}@media (min-width:1280px){.lg\\:mt-12{margin-top:3rem!important}}@media (min-width:1280px){.lg\\:mr-12{margin-right:3rem!important}}@media (min-width:1280px){.lg\\:mb-12{margin-bottom:3rem!important}}@media (min-width:1280px){.lg\\:ml-12{margin-left:3rem!important}}@media (min-width:1280px){.lg\\:mt-16{margin-top:4rem!important}}@media (min-width:1280px){.lg\\:mr-16{margin-right:4rem!important}}@media (min-width:1280px){.lg\\:mb-16{margin-bottom:4rem!important}}@media (min-width:1280px){.lg\\:ml-16{margin-left:4rem!important}}@media (min-width:1280px){.lg\\:mt-20{margin-top:5rem!important}}@media (min-width:1280px){.lg\\:mr-20{margin-right:5rem!important}}@media (min-width:1280px){.lg\\:mb-20{margin-bottom:5rem!important}}@media (min-width:1280px){.lg\\:ml-20{margin-left:5rem!important}}@media (min-width:1280px){.lg\\:mt-24{margin-top:6rem!important}}@media (min-width:1280px){.lg\\:mr-24{margin-right:6rem!important}}@media (min-width:1280px){.lg\\:mb-24{margin-bottom:6rem!important}}@media (min-width:1280px){.lg\\:ml-24{margin-left:6rem!important}}@media (min-width:1280px){.lg\\:mt-32{margin-top:8rem!important}}@media (min-width:1280px){.lg\\:mr-32{margin-right:8rem!important}}@media (min-width:1280px){.lg\\:mb-32{margin-bottom:8rem!important}}@media (min-width:1280px){.lg\\:ml-32{margin-left:8rem!important}}@media (min-width:1280px){.lg\\:mt-40{margin-top:10rem!important}}@media (min-width:1280px){.lg\\:mr-40{margin-right:10rem!important}}@media (min-width:1280px){.lg\\:mb-40{margin-bottom:10rem!important}}@media (min-width:1280px){.lg\\:ml-40{margin-left:10rem!important}}@media (min-width:1280px){.lg\\:mt-48{margin-top:12rem!important}}@media (min-width:1280px){.lg\\:mr-48{margin-right:12rem!important}}@media (min-width:1280px){.lg\\:mb-48{margin-bottom:12rem!important}}@media (min-width:1280px){.lg\\:ml-48{margin-left:12rem!important}}@media (min-width:1280px){.lg\\:mt-56{margin-top:14rem!important}}@media (min-width:1280px){.lg\\:mr-56{margin-right:14rem!important}}@media (min-width:1280px){.lg\\:mb-56{margin-bottom:14rem!important}}@media (min-width:1280px){.lg\\:ml-56{margin-left:14rem!important}}@media (min-width:1280px){.lg\\:mt-64{margin-top:16rem!important}}@media (min-width:1280px){.lg\\:mr-64{margin-right:16rem!important}}@media (min-width:1280px){.lg\\:mb-64{margin-bottom:16rem!important}}@media (min-width:1280px){.lg\\:ml-64{margin-left:16rem!important}}@media (min-width:1280px){.lg\\:mt-auto{margin-top:auto!important}}@media (min-width:1280px){.lg\\:mr-auto{margin-right:auto!important}}@media (min-width:1280px){.lg\\:mb-auto{margin-bottom:auto!important}}@media (min-width:1280px){.lg\\:ml-auto{margin-left:auto!important}}@media (min-width:1280px){.lg\\:mt-px{margin-top:1px!important}}@media (min-width:1280px){.lg\\:mr-px{margin-right:1px!important}}@media (min-width:1280px){.lg\\:mb-px{margin-bottom:1px!important}}@media (min-width:1280px){.lg\\:ml-px{margin-left:1px!important}}@media (min-width:1280px){.lg\\:-mt-1{margin-top:-.25rem!important}}@media (min-width:1280px){.lg\\:-mr-1{margin-right:-.25rem!important}}@media (min-width:1280px){.lg\\:-mb-1{margin-bottom:-.25rem!important}}@media (min-width:1280px){.lg\\:-ml-1{margin-left:-.25rem!important}}@media (min-width:1280px){.lg\\:-mt-2{margin-top:-.5rem!important}}@media (min-width:1280px){.lg\\:-mr-2{margin-right:-.5rem!important}}@media (min-width:1280px){.lg\\:-mb-2{margin-bottom:-.5rem!important}}@media (min-width:1280px){.lg\\:-ml-2{margin-left:-.5rem!important}}@media (min-width:1280px){.lg\\:-mt-3{margin-top:-.75rem!important}}@media (min-width:1280px){.lg\\:-mr-3{margin-right:-.75rem!important}}@media (min-width:1280px){.lg\\:-mb-3{margin-bottom:-.75rem!important}}@media (min-width:1280px){.lg\\:-ml-3{margin-left:-.75rem!important}}@media (min-width:1280px){.lg\\:-mt-4{margin-top:-1rem!important}}@media (min-width:1280px){.lg\\:-mr-4{margin-right:-1rem!important}}@media (min-width:1280px){.lg\\:-mb-4{margin-bottom:-1rem!important}}@media (min-width:1280px){.lg\\:-ml-4{margin-left:-1rem!important}}@media (min-width:1280px){.lg\\:-mt-5{margin-top:-1.25rem!important}}@media (min-width:1280px){.lg\\:-mr-5{margin-right:-1.25rem!important}}@media (min-width:1280px){.lg\\:-mb-5{margin-bottom:-1.25rem!important}}@media (min-width:1280px){.lg\\:-ml-5{margin-left:-1.25rem!important}}@media (min-width:1280px){.lg\\:-mt-6{margin-top:-1.5rem!important}}@media (min-width:1280px){.lg\\:-mr-6{margin-right:-1.5rem!important}}@media (min-width:1280px){.lg\\:-mb-6{margin-bottom:-1.5rem!important}}@media (min-width:1280px){.lg\\:-ml-6{margin-left:-1.5rem!important}}@media (min-width:1280px){.lg\\:-mt-8{margin-top:-2rem!important}}@media (min-width:1280px){.lg\\:-mr-8{margin-right:-2rem!important}}@media (min-width:1280px){.lg\\:-mb-8{margin-bottom:-2rem!important}}@media (min-width:1280px){.lg\\:-ml-8{margin-left:-2rem!important}}@media (min-width:1280px){.lg\\:-mt-10{margin-top:-2.5rem!important}}@media (min-width:1280px){.lg\\:-mr-10{margin-right:-2.5rem!important}}@media (min-width:1280px){.lg\\:-mb-10{margin-bottom:-2.5rem!important}}@media (min-width:1280px){.lg\\:-ml-10{margin-left:-2.5rem!important}}@media (min-width:1280px){.lg\\:-mt-12{margin-top:-3rem!important}}@media (min-width:1280px){.lg\\:-mr-12{margin-right:-3rem!important}}@media (min-width:1280px){.lg\\:-mb-12{margin-bottom:-3rem!important}}@media (min-width:1280px){.lg\\:-ml-12{margin-left:-3rem!important}}@media (min-width:1280px){.lg\\:-mt-16{margin-top:-4rem!important}}@media (min-width:1280px){.lg\\:-mr-16{margin-right:-4rem!important}}@media (min-width:1280px){.lg\\:-mb-16{margin-bottom:-4rem!important}}@media (min-width:1280px){.lg\\:-ml-16{margin-left:-4rem!important}}@media (min-width:1280px){.lg\\:-mt-20{margin-top:-5rem!important}}@media (min-width:1280px){.lg\\:-mr-20{margin-right:-5rem!important}}@media (min-width:1280px){.lg\\:-mb-20{margin-bottom:-5rem!important}}@media (min-width:1280px){.lg\\:-ml-20{margin-left:-5rem!important}}@media (min-width:1280px){.lg\\:-mt-24{margin-top:-6rem!important}}@media (min-width:1280px){.lg\\:-mr-24{margin-right:-6rem!important}}@media (min-width:1280px){.lg\\:-mb-24{margin-bottom:-6rem!important}}@media (min-width:1280px){.lg\\:-ml-24{margin-left:-6rem!important}}@media (min-width:1280px){.lg\\:-mt-32{margin-top:-8rem!important}}@media (min-width:1280px){.lg\\:-mr-32{margin-right:-8rem!important}}@media (min-width:1280px){.lg\\:-mb-32{margin-bottom:-8rem!important}}@media (min-width:1280px){.lg\\:-ml-32{margin-left:-8rem!important}}@media (min-width:1280px){.lg\\:-mt-40{margin-top:-10rem!important}}@media (min-width:1280px){.lg\\:-mr-40{margin-right:-10rem!important}}@media (min-width:1280px){.lg\\:-mb-40{margin-bottom:-10rem!important}}@media (min-width:1280px){.lg\\:-ml-40{margin-left:-10rem!important}}@media (min-width:1280px){.lg\\:-mt-48{margin-top:-12rem!important}}@media (min-width:1280px){.lg\\:-mr-48{margin-right:-12rem!important}}@media (min-width:1280px){.lg\\:-mb-48{margin-bottom:-12rem!important}}@media (min-width:1280px){.lg\\:-ml-48{margin-left:-12rem!important}}@media (min-width:1280px){.lg\\:-mt-56{margin-top:-14rem!important}}@media (min-width:1280px){.lg\\:-mr-56{margin-right:-14rem!important}}@media (min-width:1280px){.lg\\:-mb-56{margin-bottom:-14rem!important}}@media (min-width:1280px){.lg\\:-ml-56{margin-left:-14rem!important}}@media (min-width:1280px){.lg\\:-mt-64{margin-top:-16rem!important}}@media (min-width:1280px){.lg\\:-mr-64{margin-right:-16rem!important}}@media (min-width:1280px){.lg\\:-mb-64{margin-bottom:-16rem!important}}@media (min-width:1280px){.lg\\:-ml-64{margin-left:-16rem!important}}@media (min-width:1280px){.lg\\:-mt-px{margin-top:-1px!important}}@media (min-width:1280px){.lg\\:-mr-px{margin-right:-1px!important}}@media (min-width:1280px){.lg\\:-mb-px{margin-bottom:-1px!important}}@media (min-width:1280px){.lg\\:-ml-px{margin-left:-1px!important}}@media (min-width:1280px){.lg\\:max-h-full{max-height:100%!important}}@media (min-width:1280px){.lg\\:max-h-screen{max-height:100vh!important}}@media (min-width:1280px){.lg\\:max-w-none{max-width:none!important}}@media (min-width:1280px){.lg\\:max-w-xs{max-width:20rem!important}}@media (min-width:1280px){.lg\\:max-w-sm{max-width:24rem!important}}@media (min-width:1280px){.lg\\:max-w-md{max-width:28rem!important}}@media (min-width:1280px){.lg\\:max-w-lg{max-width:32rem!important}}@media (min-width:1280px){.lg\\:max-w-xl{max-width:36rem!important}}@media (min-width:1280px){.lg\\:max-w-2xl{max-width:42rem!important}}@media (min-width:1280px){.lg\\:max-w-3xl{max-width:48rem!important}}@media (min-width:1280px){.lg\\:max-w-4xl{max-width:56rem!important}}@media (min-width:1280px){.lg\\:max-w-5xl{max-width:64rem!important}}@media (min-width:1280px){.lg\\:max-w-6xl{max-width:72rem!important}}@media (min-width:1280px){.lg\\:max-w-full{max-width:100%!important}}@media (min-width:1280px){.lg\\:max-w-screen-xs{max-width:599px!important}}@media (min-width:1280px){.lg\\:max-w-screen-sm{max-width:600px!important}}@media (min-width:1280px){.lg\\:max-w-screen-md{max-width:960px!important}}@media (min-width:1280px){.lg\\:max-w-screen-lg{max-width:1280px!important}}@media (min-width:1280px){.lg\\:max-w-screen-xl{max-width:1920px!important}}@media (min-width:1280px){.lg\\:min-h-0{min-height:0!important}}@media (min-width:1280px){.lg\\:min-h-full{min-height:100%!important}}@media (min-width:1280px){.lg\\:min-h-screen{min-height:100vh!important}}@media (min-width:1280px){.lg\\:min-w-0{min-width:0!important}}@media (min-width:1280px){.lg\\:min-w-full{min-width:100%!important}}@media (min-width:1280px){.lg\\:object-contain{object-fit:contain!important}}@media (min-width:1280px){.lg\\:object-cover{object-fit:cover!important}}@media (min-width:1280px){.lg\\:object-fill{object-fit:fill!important}}@media (min-width:1280px){.lg\\:object-none{object-fit:none!important}}@media (min-width:1280px){.lg\\:object-scale-down{object-fit:scale-down!important}}@media (min-width:1280px){.lg\\:object-bottom{object-position:bottom!important}}@media (min-width:1280px){.lg\\:object-center{object-position:center!important}}@media (min-width:1280px){.lg\\:object-left{object-position:left!important}}@media (min-width:1280px){.lg\\:object-left-bottom{object-position:left bottom!important}}@media (min-width:1280px){.lg\\:object-left-top{object-position:left top!important}}@media (min-width:1280px){.lg\\:object-right{object-position:right!important}}@media (min-width:1280px){.lg\\:object-right-bottom{object-position:right bottom!important}}@media (min-width:1280px){.lg\\:object-right-top{object-position:right top!important}}@media (min-width:1280px){.lg\\:object-top{object-position:top!important}}@media (min-width:1280px){.lg\\:opacity-0{opacity:0!important}}@media (min-width:1280px){.lg\\:opacity-25{opacity:.25!important}}@media (min-width:1280px){.lg\\:opacity-50{opacity:.5!important}}@media (min-width:1280px){.lg\\:opacity-75{opacity:.75!important}}@media (min-width:1280px){.lg\\:opacity-100{opacity:1!important}}@media (min-width:1280px){.lg\\:hover\\:opacity-0:hover{opacity:0!important}}@media (min-width:1280px){.lg\\:hover\\:opacity-25:hover{opacity:.25!important}}@media (min-width:1280px){.lg\\:hover\\:opacity-50:hover{opacity:.5!important}}@media (min-width:1280px){.lg\\:hover\\:opacity-75:hover{opacity:.75!important}}@media (min-width:1280px){.lg\\:hover\\:opacity-100:hover{opacity:1!important}}@media (min-width:1280px){.lg\\:focus\\:opacity-0:focus{opacity:0!important}}@media (min-width:1280px){.lg\\:focus\\:opacity-25:focus{opacity:.25!important}}@media (min-width:1280px){.lg\\:focus\\:opacity-50:focus{opacity:.5!important}}@media (min-width:1280px){.lg\\:focus\\:opacity-75:focus{opacity:.75!important}}@media (min-width:1280px){.lg\\:focus\\:opacity-100:focus{opacity:1!important}}@media (min-width:1280px){.lg\\:overflow-auto{overflow:auto!important}}@media (min-width:1280px){.lg\\:overflow-hidden{overflow:hidden!important}}@media (min-width:1280px){.lg\\:overflow-visible{overflow:visible!important}}@media (min-width:1280px){.lg\\:overflow-scroll{overflow:scroll!important}}@media (min-width:1280px){.lg\\:overflow-x-auto{overflow-x:auto!important}}@media (min-width:1280px){.lg\\:overflow-y-auto{overflow-y:auto!important}}@media (min-width:1280px){.lg\\:overflow-x-hidden{overflow-x:hidden!important}}@media (min-width:1280px){.lg\\:overflow-y-hidden{overflow-y:hidden!important}}@media (min-width:1280px){.lg\\:overflow-x-visible{overflow-x:visible!important}}@media (min-width:1280px){.lg\\:overflow-y-visible{overflow-y:visible!important}}@media (min-width:1280px){.lg\\:overflow-x-scroll{overflow-x:scroll!important}}@media (min-width:1280px){.lg\\:overflow-y-scroll{overflow-y:scroll!important}}@media (min-width:1280px){.lg\\:scrolling-touch{-webkit-overflow-scrolling:touch!important}}@media (min-width:1280px){.lg\\:scrolling-auto{-webkit-overflow-scrolling:auto!important}}@media (min-width:1280px){.lg\\:overscroll-auto{overscroll-behavior:auto!important}}@media (min-width:1280px){.lg\\:overscroll-contain{overscroll-behavior:contain!important}}@media (min-width:1280px){.lg\\:overscroll-none{overscroll-behavior:none!important}}@media (min-width:1280px){.lg\\:overscroll-y-auto{overscroll-behavior-y:auto!important}}@media (min-width:1280px){.lg\\:overscroll-y-contain{overscroll-behavior-y:contain!important}}@media (min-width:1280px){.lg\\:overscroll-y-none{overscroll-behavior-y:none!important}}@media (min-width:1280px){.lg\\:overscroll-x-auto{overscroll-behavior-x:auto!important}}@media (min-width:1280px){.lg\\:overscroll-x-contain{overscroll-behavior-x:contain!important}}@media (min-width:1280px){.lg\\:overscroll-x-none{overscroll-behavior-x:none!important}}@media (min-width:1280px){.lg\\:p-0{padding:0!important}}@media (min-width:1280px){.lg\\:p-1{padding:.25rem!important}}@media (min-width:1280px){.lg\\:p-2{padding:.5rem!important}}@media (min-width:1280px){.lg\\:p-3{padding:.75rem!important}}@media (min-width:1280px){.lg\\:p-4{padding:1rem!important}}@media (min-width:1280px){.lg\\:p-5{padding:1.25rem!important}}@media (min-width:1280px){.lg\\:p-6{padding:1.5rem!important}}@media (min-width:1280px){.lg\\:p-8{padding:2rem!important}}@media (min-width:1280px){.lg\\:p-10{padding:2.5rem!important}}@media (min-width:1280px){.lg\\:p-12{padding:3rem!important}}@media (min-width:1280px){.lg\\:p-16{padding:4rem!important}}@media (min-width:1280px){.lg\\:p-20{padding:5rem!important}}@media (min-width:1280px){.lg\\:p-24{padding:6rem!important}}@media (min-width:1280px){.lg\\:p-32{padding:8rem!important}}@media (min-width:1280px){.lg\\:p-40{padding:10rem!important}}@media (min-width:1280px){.lg\\:p-48{padding:12rem!important}}@media (min-width:1280px){.lg\\:p-56{padding:14rem!important}}@media (min-width:1280px){.lg\\:p-64{padding:16rem!important}}@media (min-width:1280px){.lg\\:p-px{padding:1px!important}}@media (min-width:1280px){.lg\\:py-0{padding-top:0!important;padding-bottom:0!important}}@media (min-width:1280px){.lg\\:px-0{padding-left:0!important;padding-right:0!important}}@media (min-width:1280px){.lg\\:py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}}@media (min-width:1280px){.lg\\:px-1{padding-left:.25rem!important;padding-right:.25rem!important}}@media (min-width:1280px){.lg\\:py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}}@media (min-width:1280px){.lg\\:px-2{padding-left:.5rem!important;padding-right:.5rem!important}}@media (min-width:1280px){.lg\\:py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}}@media (min-width:1280px){.lg\\:px-3{padding-left:.75rem!important;padding-right:.75rem!important}}@media (min-width:1280px){.lg\\:py-4{padding-top:1rem!important;padding-bottom:1rem!important}}@media (min-width:1280px){.lg\\:px-4{padding-left:1rem!important;padding-right:1rem!important}}@media (min-width:1280px){.lg\\:py-5{padding-top:1.25rem!important;padding-bottom:1.25rem!important}}@media (min-width:1280px){.lg\\:px-5{padding-left:1.25rem!important;padding-right:1.25rem!important}}@media (min-width:1280px){.lg\\:py-6{padding-top:1.5rem!important;padding-bottom:1.5rem!important}}@media (min-width:1280px){.lg\\:px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}}@media (min-width:1280px){.lg\\:py-8{padding-top:2rem!important;padding-bottom:2rem!important}}@media (min-width:1280px){.lg\\:px-8{padding-left:2rem!important;padding-right:2rem!important}}@media (min-width:1280px){.lg\\:py-10{padding-top:2.5rem!important;padding-bottom:2.5rem!important}}@media (min-width:1280px){.lg\\:px-10{padding-left:2.5rem!important;padding-right:2.5rem!important}}@media (min-width:1280px){.lg\\:py-12{padding-top:3rem!important;padding-bottom:3rem!important}}@media (min-width:1280px){.lg\\:px-12{padding-left:3rem!important;padding-right:3rem!important}}@media (min-width:1280px){.lg\\:py-16{padding-top:4rem!important;padding-bottom:4rem!important}}@media (min-width:1280px){.lg\\:px-16{padding-left:4rem!important;padding-right:4rem!important}}@media (min-width:1280px){.lg\\:py-20{padding-top:5rem!important;padding-bottom:5rem!important}}@media (min-width:1280px){.lg\\:px-20{padding-left:5rem!important;padding-right:5rem!important}}@media (min-width:1280px){.lg\\:py-24{padding-top:6rem!important;padding-bottom:6rem!important}}@media (min-width:1280px){.lg\\:px-24{padding-left:6rem!important;padding-right:6rem!important}}@media (min-width:1280px){.lg\\:py-32{padding-top:8rem!important;padding-bottom:8rem!important}}@media (min-width:1280px){.lg\\:px-32{padding-left:8rem!important;padding-right:8rem!important}}@media (min-width:1280px){.lg\\:py-40{padding-top:10rem!important;padding-bottom:10rem!important}}@media (min-width:1280px){.lg\\:px-40{padding-left:10rem!important;padding-right:10rem!important}}@media (min-width:1280px){.lg\\:py-48{padding-top:12rem!important;padding-bottom:12rem!important}}@media (min-width:1280px){.lg\\:px-48{padding-left:12rem!important;padding-right:12rem!important}}@media (min-width:1280px){.lg\\:py-56{padding-top:14rem!important;padding-bottom:14rem!important}}@media (min-width:1280px){.lg\\:px-56{padding-left:14rem!important;padding-right:14rem!important}}@media (min-width:1280px){.lg\\:py-64{padding-top:16rem!important;padding-bottom:16rem!important}}@media (min-width:1280px){.lg\\:px-64{padding-left:16rem!important;padding-right:16rem!important}}@media (min-width:1280px){.lg\\:py-px{padding-top:1px!important;padding-bottom:1px!important}}@media (min-width:1280px){.lg\\:px-px{padding-left:1px!important;padding-right:1px!important}}@media (min-width:1280px){.lg\\:pt-0{padding-top:0!important}}@media (min-width:1280px){.lg\\:pr-0{padding-right:0!important}}@media (min-width:1280px){.lg\\:pb-0{padding-bottom:0!important}}@media (min-width:1280px){.lg\\:pl-0{padding-left:0!important}}@media (min-width:1280px){.lg\\:pt-1{padding-top:.25rem!important}}@media (min-width:1280px){.lg\\:pr-1{padding-right:.25rem!important}}@media (min-width:1280px){.lg\\:pb-1{padding-bottom:.25rem!important}}@media (min-width:1280px){.lg\\:pl-1{padding-left:.25rem!important}}@media (min-width:1280px){.lg\\:pt-2{padding-top:.5rem!important}}@media (min-width:1280px){.lg\\:pr-2{padding-right:.5rem!important}}@media (min-width:1280px){.lg\\:pb-2{padding-bottom:.5rem!important}}@media (min-width:1280px){.lg\\:pl-2{padding-left:.5rem!important}}@media (min-width:1280px){.lg\\:pt-3{padding-top:.75rem!important}}@media (min-width:1280px){.lg\\:pr-3{padding-right:.75rem!important}}@media (min-width:1280px){.lg\\:pb-3{padding-bottom:.75rem!important}}@media (min-width:1280px){.lg\\:pl-3{padding-left:.75rem!important}}@media (min-width:1280px){.lg\\:pt-4{padding-top:1rem!important}}@media (min-width:1280px){.lg\\:pr-4{padding-right:1rem!important}}@media (min-width:1280px){.lg\\:pb-4{padding-bottom:1rem!important}}@media (min-width:1280px){.lg\\:pl-4{padding-left:1rem!important}}@media (min-width:1280px){.lg\\:pt-5{padding-top:1.25rem!important}}@media (min-width:1280px){.lg\\:pr-5{padding-right:1.25rem!important}}@media (min-width:1280px){.lg\\:pb-5{padding-bottom:1.25rem!important}}@media (min-width:1280px){.lg\\:pl-5{padding-left:1.25rem!important}}@media (min-width:1280px){.lg\\:pt-6{padding-top:1.5rem!important}}@media (min-width:1280px){.lg\\:pr-6{padding-right:1.5rem!important}}@media (min-width:1280px){.lg\\:pb-6{padding-bottom:1.5rem!important}}@media (min-width:1280px){.lg\\:pl-6{padding-left:1.5rem!important}}@media (min-width:1280px){.lg\\:pt-8{padding-top:2rem!important}}@media (min-width:1280px){.lg\\:pr-8{padding-right:2rem!important}}@media (min-width:1280px){.lg\\:pb-8{padding-bottom:2rem!important}}@media (min-width:1280px){.lg\\:pl-8{padding-left:2rem!important}}@media (min-width:1280px){.lg\\:pt-10{padding-top:2.5rem!important}}@media (min-width:1280px){.lg\\:pr-10{padding-right:2.5rem!important}}@media (min-width:1280px){.lg\\:pb-10{padding-bottom:2.5rem!important}}@media (min-width:1280px){.lg\\:pl-10{padding-left:2.5rem!important}}@media (min-width:1280px){.lg\\:pt-12{padding-top:3rem!important}}@media (min-width:1280px){.lg\\:pr-12{padding-right:3rem!important}}@media (min-width:1280px){.lg\\:pb-12{padding-bottom:3rem!important}}@media (min-width:1280px){.lg\\:pl-12{padding-left:3rem!important}}@media (min-width:1280px){.lg\\:pt-16{padding-top:4rem!important}}@media (min-width:1280px){.lg\\:pr-16{padding-right:4rem!important}}@media (min-width:1280px){.lg\\:pb-16{padding-bottom:4rem!important}}@media (min-width:1280px){.lg\\:pl-16{padding-left:4rem!important}}@media (min-width:1280px){.lg\\:pt-20{padding-top:5rem!important}}@media (min-width:1280px){.lg\\:pr-20{padding-right:5rem!important}}@media (min-width:1280px){.lg\\:pb-20{padding-bottom:5rem!important}}@media (min-width:1280px){.lg\\:pl-20{padding-left:5rem!important}}@media (min-width:1280px){.lg\\:pt-24{padding-top:6rem!important}}@media (min-width:1280px){.lg\\:pr-24{padding-right:6rem!important}}@media (min-width:1280px){.lg\\:pb-24{padding-bottom:6rem!important}}@media (min-width:1280px){.lg\\:pl-24{padding-left:6rem!important}}@media (min-width:1280px){.lg\\:pt-32{padding-top:8rem!important}}@media (min-width:1280px){.lg\\:pr-32{padding-right:8rem!important}}@media (min-width:1280px){.lg\\:pb-32{padding-bottom:8rem!important}}@media (min-width:1280px){.lg\\:pl-32{padding-left:8rem!important}}@media (min-width:1280px){.lg\\:pt-40{padding-top:10rem!important}}@media (min-width:1280px){.lg\\:pr-40{padding-right:10rem!important}}@media (min-width:1280px){.lg\\:pb-40{padding-bottom:10rem!important}}@media (min-width:1280px){.lg\\:pl-40{padding-left:10rem!important}}@media (min-width:1280px){.lg\\:pt-48{padding-top:12rem!important}}@media (min-width:1280px){.lg\\:pr-48{padding-right:12rem!important}}@media (min-width:1280px){.lg\\:pb-48{padding-bottom:12rem!important}}@media (min-width:1280px){.lg\\:pl-48{padding-left:12rem!important}}@media (min-width:1280px){.lg\\:pt-56{padding-top:14rem!important}}@media (min-width:1280px){.lg\\:pr-56{padding-right:14rem!important}}@media (min-width:1280px){.lg\\:pb-56{padding-bottom:14rem!important}}@media (min-width:1280px){.lg\\:pl-56{padding-left:14rem!important}}@media (min-width:1280px){.lg\\:pt-64{padding-top:16rem!important}}@media (min-width:1280px){.lg\\:pr-64{padding-right:16rem!important}}@media (min-width:1280px){.lg\\:pb-64{padding-bottom:16rem!important}}@media (min-width:1280px){.lg\\:pl-64{padding-left:16rem!important}}@media (min-width:1280px){.lg\\:pt-px{padding-top:1px!important}}@media (min-width:1280px){.lg\\:pr-px{padding-right:1px!important}}@media (min-width:1280px){.lg\\:pb-px{padding-bottom:1px!important}}@media (min-width:1280px){.lg\\:pl-px{padding-left:1px!important}}@media (min-width:1280px){.lg\\:placeholder-transparent::placeholder{color:transparent!important}}@media (min-width:1280px){.lg\\:placeholder-current::placeholder{color:currentColor!important}}@media (min-width:1280px){.lg\\:placeholder-black::placeholder{--placeholder-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-white::placeholder{--placeholder-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-gray-100::placeholder{--placeholder-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-gray-200::placeholder{--placeholder-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-gray-300::placeholder{--placeholder-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-gray-400::placeholder{--placeholder-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-gray-500::placeholder{--placeholder-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-gray-600::placeholder{--placeholder-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-gray-700::placeholder{--placeholder-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-gray-800::placeholder{--placeholder-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-gray-900::placeholder{--placeholder-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-red-100::placeholder{--placeholder-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-red-200::placeholder{--placeholder-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-red-300::placeholder{--placeholder-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-red-400::placeholder{--placeholder-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-red-500::placeholder{--placeholder-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-red-600::placeholder{--placeholder-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-red-700::placeholder{--placeholder-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-red-800::placeholder{--placeholder-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-red-900::placeholder{--placeholder-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-orange-100::placeholder{--placeholder-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-orange-200::placeholder{--placeholder-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-orange-300::placeholder{--placeholder-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-orange-400::placeholder{--placeholder-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-orange-500::placeholder{--placeholder-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-orange-600::placeholder{--placeholder-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-orange-700::placeholder{--placeholder-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-orange-800::placeholder{--placeholder-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-orange-900::placeholder{--placeholder-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-yellow-100::placeholder{--placeholder-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-yellow-200::placeholder{--placeholder-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-yellow-300::placeholder{--placeholder-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-yellow-400::placeholder{--placeholder-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-yellow-500::placeholder{--placeholder-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-yellow-600::placeholder{--placeholder-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-yellow-700::placeholder{--placeholder-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-yellow-800::placeholder{--placeholder-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-yellow-900::placeholder{--placeholder-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-green-100::placeholder{--placeholder-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-green-200::placeholder{--placeholder-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-green-300::placeholder{--placeholder-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-green-400::placeholder{--placeholder-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-green-500::placeholder{--placeholder-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-green-600::placeholder{--placeholder-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-green-700::placeholder{--placeholder-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-green-800::placeholder{--placeholder-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-green-900::placeholder{--placeholder-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-teal-100::placeholder{--placeholder-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-teal-200::placeholder{--placeholder-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-teal-300::placeholder{--placeholder-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-teal-400::placeholder{--placeholder-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-teal-500::placeholder{--placeholder-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-teal-600::placeholder{--placeholder-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-teal-700::placeholder{--placeholder-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-teal-800::placeholder{--placeholder-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-teal-900::placeholder{--placeholder-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-blue-100::placeholder{--placeholder-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-blue-200::placeholder{--placeholder-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-blue-300::placeholder{--placeholder-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-blue-400::placeholder{--placeholder-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-blue-500::placeholder{--placeholder-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-blue-600::placeholder{--placeholder-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-blue-700::placeholder{--placeholder-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-blue-800::placeholder{--placeholder-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-blue-900::placeholder{--placeholder-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-indigo-100::placeholder{--placeholder-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-indigo-200::placeholder{--placeholder-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-indigo-300::placeholder{--placeholder-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-indigo-400::placeholder{--placeholder-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-indigo-500::placeholder{--placeholder-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-indigo-600::placeholder{--placeholder-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-indigo-700::placeholder{--placeholder-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-indigo-800::placeholder{--placeholder-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-indigo-900::placeholder{--placeholder-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-purple-100::placeholder{--placeholder-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-purple-200::placeholder{--placeholder-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-purple-300::placeholder{--placeholder-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-purple-400::placeholder{--placeholder-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-purple-500::placeholder{--placeholder-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-purple-600::placeholder{--placeholder-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-purple-700::placeholder{--placeholder-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-purple-800::placeholder{--placeholder-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-purple-900::placeholder{--placeholder-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-pink-100::placeholder{--placeholder-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-pink-200::placeholder{--placeholder-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-pink-300::placeholder{--placeholder-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-pink-400::placeholder{--placeholder-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-pink-500::placeholder{--placeholder-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-pink-600::placeholder{--placeholder-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-pink-700::placeholder{--placeholder-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-pink-800::placeholder{--placeholder-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-pink-900::placeholder{--placeholder-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-transparent:focus::placeholder{color:transparent!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-current:focus::placeholder{color:currentColor!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-black:focus::placeholder{--placeholder-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-white:focus::placeholder{--placeholder-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-gray-100:focus::placeholder{--placeholder-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-gray-200:focus::placeholder{--placeholder-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-gray-300:focus::placeholder{--placeholder-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-gray-400:focus::placeholder{--placeholder-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-gray-500:focus::placeholder{--placeholder-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-gray-600:focus::placeholder{--placeholder-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-gray-700:focus::placeholder{--placeholder-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-gray-800:focus::placeholder{--placeholder-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-gray-900:focus::placeholder{--placeholder-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-red-100:focus::placeholder{--placeholder-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-red-200:focus::placeholder{--placeholder-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-red-300:focus::placeholder{--placeholder-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-red-400:focus::placeholder{--placeholder-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-red-500:focus::placeholder{--placeholder-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-red-600:focus::placeholder{--placeholder-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-red-700:focus::placeholder{--placeholder-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-red-800:focus::placeholder{--placeholder-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-red-900:focus::placeholder{--placeholder-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-orange-100:focus::placeholder{--placeholder-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-orange-200:focus::placeholder{--placeholder-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-orange-300:focus::placeholder{--placeholder-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-orange-400:focus::placeholder{--placeholder-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-orange-500:focus::placeholder{--placeholder-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-orange-600:focus::placeholder{--placeholder-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-orange-700:focus::placeholder{--placeholder-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-orange-800:focus::placeholder{--placeholder-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-orange-900:focus::placeholder{--placeholder-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-yellow-100:focus::placeholder{--placeholder-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-yellow-200:focus::placeholder{--placeholder-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-yellow-300:focus::placeholder{--placeholder-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-yellow-400:focus::placeholder{--placeholder-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-yellow-500:focus::placeholder{--placeholder-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-yellow-600:focus::placeholder{--placeholder-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-yellow-700:focus::placeholder{--placeholder-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-yellow-800:focus::placeholder{--placeholder-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-yellow-900:focus::placeholder{--placeholder-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-green-100:focus::placeholder{--placeholder-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-green-200:focus::placeholder{--placeholder-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-green-300:focus::placeholder{--placeholder-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-green-400:focus::placeholder{--placeholder-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-green-500:focus::placeholder{--placeholder-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-green-600:focus::placeholder{--placeholder-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-green-700:focus::placeholder{--placeholder-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-green-800:focus::placeholder{--placeholder-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-green-900:focus::placeholder{--placeholder-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-teal-100:focus::placeholder{--placeholder-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-teal-200:focus::placeholder{--placeholder-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-teal-300:focus::placeholder{--placeholder-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-teal-400:focus::placeholder{--placeholder-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-teal-500:focus::placeholder{--placeholder-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-teal-600:focus::placeholder{--placeholder-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-teal-700:focus::placeholder{--placeholder-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-teal-800:focus::placeholder{--placeholder-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-teal-900:focus::placeholder{--placeholder-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-blue-100:focus::placeholder{--placeholder-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-blue-200:focus::placeholder{--placeholder-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-blue-300:focus::placeholder{--placeholder-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-blue-400:focus::placeholder{--placeholder-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-blue-500:focus::placeholder{--placeholder-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-blue-600:focus::placeholder{--placeholder-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-blue-700:focus::placeholder{--placeholder-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-blue-800:focus::placeholder{--placeholder-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-blue-900:focus::placeholder{--placeholder-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-indigo-100:focus::placeholder{--placeholder-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-indigo-200:focus::placeholder{--placeholder-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-indigo-300:focus::placeholder{--placeholder-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-indigo-400:focus::placeholder{--placeholder-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-indigo-500:focus::placeholder{--placeholder-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-indigo-600:focus::placeholder{--placeholder-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-indigo-700:focus::placeholder{--placeholder-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-indigo-800:focus::placeholder{--placeholder-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-indigo-900:focus::placeholder{--placeholder-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-purple-100:focus::placeholder{--placeholder-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-purple-200:focus::placeholder{--placeholder-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-purple-300:focus::placeholder{--placeholder-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-purple-400:focus::placeholder{--placeholder-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-purple-500:focus::placeholder{--placeholder-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-purple-600:focus::placeholder{--placeholder-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-purple-700:focus::placeholder{--placeholder-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-purple-800:focus::placeholder{--placeholder-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-purple-900:focus::placeholder{--placeholder-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-pink-100:focus::placeholder{--placeholder-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-pink-200:focus::placeholder{--placeholder-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-pink-300:focus::placeholder{--placeholder-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-pink-400:focus::placeholder{--placeholder-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-pink-500:focus::placeholder{--placeholder-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-pink-600:focus::placeholder{--placeholder-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-pink-700:focus::placeholder{--placeholder-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-pink-800:focus::placeholder{--placeholder-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-pink-900:focus::placeholder{--placeholder-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--placeholder-opacity))!important}}@media (min-width:1280px){.lg\\:placeholder-opacity-0::placeholder{--placeholder-opacity:0!important}}@media (min-width:1280px){.lg\\:placeholder-opacity-25::placeholder{--placeholder-opacity:0.25!important}}@media (min-width:1280px){.lg\\:placeholder-opacity-50::placeholder{--placeholder-opacity:0.5!important}}@media (min-width:1280px){.lg\\:placeholder-opacity-75::placeholder{--placeholder-opacity:0.75!important}}@media (min-width:1280px){.lg\\:placeholder-opacity-100::placeholder{--placeholder-opacity:1!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-opacity-0:focus::placeholder{--placeholder-opacity:0!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-opacity-25:focus::placeholder{--placeholder-opacity:0.25!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-opacity-50:focus::placeholder{--placeholder-opacity:0.5!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-opacity-75:focus::placeholder{--placeholder-opacity:0.75!important}}@media (min-width:1280px){.lg\\:focus\\:placeholder-opacity-100:focus::placeholder{--placeholder-opacity:1!important}}@media (min-width:1280px){.lg\\:pointer-events-none{pointer-events:none!important}}@media (min-width:1280px){.lg\\:pointer-events-auto{pointer-events:auto!important}}@media (min-width:1280px){.lg\\:static{position:static!important}}@media (min-width:1280px){.lg\\:fixed{position:fixed!important}}@media (min-width:1280px){.lg\\:absolute{position:absolute!important}}@media (min-width:1280px){.lg\\:relative{position:relative!important}}@media (min-width:1280px){.lg\\:sticky{position:sticky!important}}@media (min-width:1280px){.lg\\:inset-0{top:0!important;right:0!important;bottom:0!important;left:0!important}}@media (min-width:1280px){.lg\\:inset-auto{top:auto!important;right:auto!important;bottom:auto!important;left:auto!important}}@media (min-width:1280px){.lg\\:inset-y-0{top:0!important;bottom:0!important}}@media (min-width:1280px){.lg\\:inset-x-0{right:0!important;left:0!important}}@media (min-width:1280px){.lg\\:inset-y-auto{top:auto!important;bottom:auto!important}}@media (min-width:1280px){.lg\\:inset-x-auto{right:auto!important;left:auto!important}}@media (min-width:1280px){.lg\\:top-0{top:0!important}}@media (min-width:1280px){.lg\\:right-0{right:0!important}}@media (min-width:1280px){.lg\\:bottom-0{bottom:0!important}}@media (min-width:1280px){.lg\\:left-0{left:0!important}}@media (min-width:1280px){.lg\\:top-auto{top:auto!important}}@media (min-width:1280px){.lg\\:right-auto{right:auto!important}}@media (min-width:1280px){.lg\\:bottom-auto{bottom:auto!important}}@media (min-width:1280px){.lg\\:left-auto{left:auto!important}}@media (min-width:1280px){.lg\\:resize-none{resize:none!important}}@media (min-width:1280px){.lg\\:resize-y{resize:vertical!important}}@media (min-width:1280px){.lg\\:resize-x{resize:horizontal!important}}@media (min-width:1280px){.lg\\:resize{resize:both!important}}@media (min-width:1280px){.lg\\:shadow-xs{box-shadow:0 0 0 1px rgba(0,0,0,.05)!important}}@media (min-width:1280px){.lg\\:shadow-sm{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important}}@media (min-width:1280px){.lg\\:shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)!important}}@media (min-width:1280px){.lg\\:shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)!important}}@media (min-width:1280px){.lg\\:shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)!important}}@media (min-width:1280px){.lg\\:shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)!important}}@media (min-width:1280px){.lg\\:shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important}}@media (min-width:1280px){.lg\\:shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)!important}}@media (min-width:1280px){.lg\\:shadow-outline{box-shadow:0 0 0 3px rgba(66,153,225,.5)!important}}@media (min-width:1280px){.lg\\:shadow-none{box-shadow:none!important}}@media (min-width:1280px){.lg\\:hover\\:shadow-xs:hover{box-shadow:0 0 0 1px rgba(0,0,0,.05)!important}}@media (min-width:1280px){.lg\\:hover\\:shadow-sm:hover{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important}}@media (min-width:1280px){.lg\\:hover\\:shadow:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)!important}}@media (min-width:1280px){.lg\\:hover\\:shadow-md:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)!important}}@media (min-width:1280px){.lg\\:hover\\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)!important}}@media (min-width:1280px){.lg\\:hover\\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)!important}}@media (min-width:1280px){.lg\\:hover\\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important}}@media (min-width:1280px){.lg\\:hover\\:shadow-inner:hover{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)!important}}@media (min-width:1280px){.lg\\:hover\\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(66,153,225,.5)!important}}@media (min-width:1280px){.lg\\:hover\\:shadow-none:hover{box-shadow:none!important}}@media (min-width:1280px){.lg\\:focus\\:shadow-xs:focus{box-shadow:0 0 0 1px rgba(0,0,0,.05)!important}}@media (min-width:1280px){.lg\\:focus\\:shadow-sm:focus{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important}}@media (min-width:1280px){.lg\\:focus\\:shadow:focus{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)!important}}@media (min-width:1280px){.lg\\:focus\\:shadow-md:focus{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)!important}}@media (min-width:1280px){.lg\\:focus\\:shadow-lg:focus{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)!important}}@media (min-width:1280px){.lg\\:focus\\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)!important}}@media (min-width:1280px){.lg\\:focus\\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important}}@media (min-width:1280px){.lg\\:focus\\:shadow-inner:focus{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)!important}}@media (min-width:1280px){.lg\\:focus\\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(66,153,225,.5)!important}}@media (min-width:1280px){.lg\\:focus\\:shadow-none:focus{box-shadow:none!important}}@media (min-width:1280px){.lg\\:fill-current{fill:currentColor!important}}@media (min-width:1280px){.lg\\:stroke-current{stroke:currentColor!important}}@media (min-width:1280px){.lg\\:stroke-0{stroke-width:0!important}}@media (min-width:1280px){.lg\\:stroke-1{stroke-width:1!important}}@media (min-width:1280px){.lg\\:stroke-2{stroke-width:2!important}}@media (min-width:1280px){.lg\\:table-auto{table-layout:auto!important}}@media (min-width:1280px){.lg\\:table-fixed{table-layout:fixed!important}}@media (min-width:1280px){.lg\\:text-left{text-align:left!important}}@media (min-width:1280px){.lg\\:text-center{text-align:center!important}}@media (min-width:1280px){.lg\\:text-right{text-align:right!important}}@media (min-width:1280px){.lg\\:text-justify{text-align:justify!important}}@media (min-width:1280px){.lg\\:text-transparent{color:transparent!important}}@media (min-width:1280px){.lg\\:text-current{color:currentColor!important}}@media (min-width:1280px){.lg\\:text-black{--text-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-white{--text-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-gray-100{--text-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-gray-200{--text-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-gray-300{--text-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-gray-400{--text-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-gray-500{--text-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-gray-600{--text-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-gray-700{--text-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-gray-800{--text-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-gray-900{--text-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-red-100{--text-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-red-200{--text-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-red-300{--text-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-red-400{--text-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-red-500{--text-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-red-600{--text-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-red-700{--text-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-red-800{--text-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-red-900{--text-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-orange-100{--text-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-orange-200{--text-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-orange-300{--text-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-orange-400{--text-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-orange-500{--text-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-orange-600{--text-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-orange-700{--text-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-orange-800{--text-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-orange-900{--text-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-yellow-100{--text-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-yellow-200{--text-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-yellow-300{--text-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-yellow-400{--text-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-yellow-500{--text-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-yellow-600{--text-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-yellow-700{--text-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-yellow-800{--text-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-yellow-900{--text-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-green-100{--text-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-green-200{--text-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-green-300{--text-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-green-400{--text-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-green-500{--text-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-green-600{--text-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-green-700{--text-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-green-800{--text-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-green-900{--text-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-teal-100{--text-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-teal-200{--text-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-teal-300{--text-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-teal-400{--text-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-teal-500{--text-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-teal-600{--text-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-teal-700{--text-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-teal-800{--text-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-teal-900{--text-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-blue-100{--text-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-blue-200{--text-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-blue-300{--text-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-blue-400{--text-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-blue-500{--text-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-blue-600{--text-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-blue-700{--text-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-blue-800{--text-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-blue-900{--text-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-indigo-100{--text-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-indigo-200{--text-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-indigo-300{--text-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-indigo-400{--text-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-indigo-500{--text-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-indigo-600{--text-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-indigo-700{--text-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-indigo-800{--text-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-indigo-900{--text-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-purple-100{--text-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-purple-200{--text-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-purple-300{--text-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-purple-400{--text-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-purple-500{--text-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-purple-600{--text-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-purple-700{--text-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-purple-800{--text-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-purple-900{--text-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-pink-100{--text-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-pink-200{--text-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-pink-300{--text-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-pink-400{--text-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-pink-500{--text-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-pink-600{--text-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-pink-700{--text-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-pink-800{--text-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-pink-900{--text-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-transparent:hover{color:transparent!important}}@media (min-width:1280px){.lg\\:hover\\:text-current:hover{color:currentColor!important}}@media (min-width:1280px){.lg\\:hover\\:text-black:hover{--text-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-white:hover{--text-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-gray-100:hover{--text-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-gray-200:hover{--text-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-gray-300:hover{--text-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-gray-400:hover{--text-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-gray-500:hover{--text-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-gray-600:hover{--text-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-gray-700:hover{--text-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-gray-800:hover{--text-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-gray-900:hover{--text-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-red-100:hover{--text-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-red-200:hover{--text-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-red-300:hover{--text-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-red-400:hover{--text-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-red-500:hover{--text-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-red-600:hover{--text-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-red-700:hover{--text-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-red-800:hover{--text-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-red-900:hover{--text-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-orange-100:hover{--text-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-orange-200:hover{--text-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-orange-300:hover{--text-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-orange-400:hover{--text-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-orange-500:hover{--text-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-orange-600:hover{--text-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-orange-700:hover{--text-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-orange-800:hover{--text-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-orange-900:hover{--text-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-yellow-100:hover{--text-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-yellow-200:hover{--text-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-yellow-300:hover{--text-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-yellow-400:hover{--text-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-yellow-500:hover{--text-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-yellow-600:hover{--text-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-yellow-700:hover{--text-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-yellow-800:hover{--text-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-yellow-900:hover{--text-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-green-100:hover{--text-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-green-200:hover{--text-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-green-300:hover{--text-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-green-400:hover{--text-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-green-500:hover{--text-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-green-600:hover{--text-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-green-700:hover{--text-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-green-800:hover{--text-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-green-900:hover{--text-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-teal-100:hover{--text-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-teal-200:hover{--text-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-teal-300:hover{--text-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-teal-400:hover{--text-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-teal-500:hover{--text-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-teal-600:hover{--text-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-teal-700:hover{--text-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-teal-800:hover{--text-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-teal-900:hover{--text-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-blue-100:hover{--text-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-blue-200:hover{--text-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-blue-300:hover{--text-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-blue-400:hover{--text-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-blue-500:hover{--text-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-blue-600:hover{--text-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-blue-700:hover{--text-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-blue-800:hover{--text-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-blue-900:hover{--text-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-indigo-100:hover{--text-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-indigo-200:hover{--text-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-indigo-300:hover{--text-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-indigo-400:hover{--text-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-indigo-500:hover{--text-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-indigo-600:hover{--text-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-indigo-700:hover{--text-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-indigo-800:hover{--text-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-indigo-900:hover{--text-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-purple-100:hover{--text-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-purple-200:hover{--text-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-purple-300:hover{--text-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-purple-400:hover{--text-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-purple-500:hover{--text-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-purple-600:hover{--text-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-purple-700:hover{--text-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-purple-800:hover{--text-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-purple-900:hover{--text-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-pink-100:hover{--text-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-pink-200:hover{--text-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-pink-300:hover{--text-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-pink-400:hover{--text-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-pink-500:hover{--text-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-pink-600:hover{--text-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-pink-700:hover{--text-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-pink-800:hover{--text-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:hover\\:text-pink-900:hover{--text-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-transparent:focus{color:transparent!important}}@media (min-width:1280px){.lg\\:focus\\:text-current:focus{color:currentColor!important}}@media (min-width:1280px){.lg\\:focus\\:text-black:focus{--text-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-white:focus{--text-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-gray-100:focus{--text-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-gray-200:focus{--text-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-gray-300:focus{--text-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-gray-400:focus{--text-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-gray-500:focus{--text-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-gray-600:focus{--text-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-gray-700:focus{--text-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-gray-800:focus{--text-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-gray-900:focus{--text-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-red-100:focus{--text-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-red-200:focus{--text-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-red-300:focus{--text-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-red-400:focus{--text-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-red-500:focus{--text-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-red-600:focus{--text-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-red-700:focus{--text-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-red-800:focus{--text-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-red-900:focus{--text-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-orange-100:focus{--text-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-orange-200:focus{--text-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-orange-300:focus{--text-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-orange-400:focus{--text-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-orange-500:focus{--text-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-orange-600:focus{--text-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-orange-700:focus{--text-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-orange-800:focus{--text-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-orange-900:focus{--text-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-yellow-100:focus{--text-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-yellow-200:focus{--text-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-yellow-300:focus{--text-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-yellow-400:focus{--text-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-yellow-500:focus{--text-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-yellow-600:focus{--text-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-yellow-700:focus{--text-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-yellow-800:focus{--text-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-yellow-900:focus{--text-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-green-100:focus{--text-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-green-200:focus{--text-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-green-300:focus{--text-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-green-400:focus{--text-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-green-500:focus{--text-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-green-600:focus{--text-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-green-700:focus{--text-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-green-800:focus{--text-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-green-900:focus{--text-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-teal-100:focus{--text-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-teal-200:focus{--text-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-teal-300:focus{--text-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-teal-400:focus{--text-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-teal-500:focus{--text-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-teal-600:focus{--text-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-teal-700:focus{--text-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-teal-800:focus{--text-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-teal-900:focus{--text-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-blue-100:focus{--text-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-blue-200:focus{--text-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-blue-300:focus{--text-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-blue-400:focus{--text-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-blue-500:focus{--text-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-blue-600:focus{--text-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-blue-700:focus{--text-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-blue-800:focus{--text-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-blue-900:focus{--text-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-indigo-100:focus{--text-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-indigo-200:focus{--text-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-indigo-300:focus{--text-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-indigo-400:focus{--text-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-indigo-500:focus{--text-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-indigo-600:focus{--text-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-indigo-700:focus{--text-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-indigo-800:focus{--text-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-indigo-900:focus{--text-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-purple-100:focus{--text-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-purple-200:focus{--text-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-purple-300:focus{--text-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-purple-400:focus{--text-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-purple-500:focus{--text-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-purple-600:focus{--text-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-purple-700:focus{--text-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-purple-800:focus{--text-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-purple-900:focus{--text-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-pink-100:focus{--text-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-pink-200:focus{--text-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-pink-300:focus{--text-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-pink-400:focus{--text-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-pink-500:focus{--text-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-pink-600:focus{--text-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-pink-700:focus{--text-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-pink-800:focus{--text-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:focus\\:text-pink-900:focus{--text-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--text-opacity))!important}}@media (min-width:1280px){.lg\\:text-opacity-0{--text-opacity:0!important}}@media (min-width:1280px){.lg\\:text-opacity-25{--text-opacity:0.25!important}}@media (min-width:1280px){.lg\\:text-opacity-50{--text-opacity:0.5!important}}@media (min-width:1280px){.lg\\:text-opacity-75{--text-opacity:0.75!important}}@media (min-width:1280px){.lg\\:text-opacity-100{--text-opacity:1!important}}@media (min-width:1280px){.lg\\:hover\\:text-opacity-0:hover{--text-opacity:0!important}}@media (min-width:1280px){.lg\\:hover\\:text-opacity-25:hover{--text-opacity:0.25!important}}@media (min-width:1280px){.lg\\:hover\\:text-opacity-50:hover{--text-opacity:0.5!important}}@media (min-width:1280px){.lg\\:hover\\:text-opacity-75:hover{--text-opacity:0.75!important}}@media (min-width:1280px){.lg\\:hover\\:text-opacity-100:hover{--text-opacity:1!important}}@media (min-width:1280px){.lg\\:focus\\:text-opacity-0:focus{--text-opacity:0!important}}@media (min-width:1280px){.lg\\:focus\\:text-opacity-25:focus{--text-opacity:0.25!important}}@media (min-width:1280px){.lg\\:focus\\:text-opacity-50:focus{--text-opacity:0.5!important}}@media (min-width:1280px){.lg\\:focus\\:text-opacity-75:focus{--text-opacity:0.75!important}}@media (min-width:1280px){.lg\\:focus\\:text-opacity-100:focus{--text-opacity:1!important}}@media (min-width:1280px){.lg\\:italic{font-style:italic!important}}@media (min-width:1280px){.lg\\:not-italic{font-style:normal!important}}@media (min-width:1280px){.lg\\:uppercase{text-transform:uppercase!important}}@media (min-width:1280px){.lg\\:lowercase{text-transform:lowercase!important}}@media (min-width:1280px){.lg\\:capitalize{text-transform:capitalize!important}}@media (min-width:1280px){.lg\\:normal-case{text-transform:none!important}}@media (min-width:1280px){.lg\\:underline{text-decoration:underline!important}}@media (min-width:1280px){.lg\\:line-through{text-decoration:line-through!important}}@media (min-width:1280px){.lg\\:no-underline{text-decoration:none!important}}@media (min-width:1280px){.lg\\:hover\\:underline:hover{text-decoration:underline!important}}@media (min-width:1280px){.lg\\:hover\\:line-through:hover{text-decoration:line-through!important}}@media (min-width:1280px){.lg\\:hover\\:no-underline:hover{text-decoration:none!important}}@media (min-width:1280px){.lg\\:focus\\:underline:focus{text-decoration:underline!important}}@media (min-width:1280px){.lg\\:focus\\:line-through:focus{text-decoration:line-through!important}}@media (min-width:1280px){.lg\\:focus\\:no-underline:focus{text-decoration:none!important}}@media (min-width:1280px){.lg\\:antialiased{-webkit-font-smoothing:antialiased!important;-moz-osx-font-smoothing:grayscale!important}}@media (min-width:1280px){.lg\\:subpixel-antialiased{-webkit-font-smoothing:auto!important;-moz-osx-font-smoothing:auto!important}}@media (min-width:1280px){.lg\\:diagonal-fractions,.lg\\:lining-nums,.lg\\:oldstyle-nums,.lg\\:ordinal,.lg\\:proportional-nums,.lg\\:slashed-zero,.lg\\:stacked-fractions,.lg\\:tabular-nums{--font-variant-numeric-ordinal:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-slashed-zero:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-figure:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-spacing:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-fraction:var(--tailwind-empty,/*!*/ /*!*/)!important;font-variant-numeric:var(--font-variant-numeric-ordinal) var(--font-variant-numeric-slashed-zero) var(--font-variant-numeric-figure) var(--font-variant-numeric-spacing) var(--font-variant-numeric-fraction)!important}}@media (min-width:1280px){.lg\\:normal-nums{font-variant-numeric:normal!important}}@media (min-width:1280px){.lg\\:ordinal{--font-variant-numeric-ordinal:ordinal!important}}@media (min-width:1280px){.lg\\:slashed-zero{--font-variant-numeric-slashed-zero:slashed-zero!important}}@media (min-width:1280px){.lg\\:lining-nums{--font-variant-numeric-figure:lining-nums!important}}@media (min-width:1280px){.lg\\:oldstyle-nums{--font-variant-numeric-figure:oldstyle-nums!important}}@media (min-width:1280px){.lg\\:proportional-nums{--font-variant-numeric-spacing:proportional-nums!important}}@media (min-width:1280px){.lg\\:tabular-nums{--font-variant-numeric-spacing:tabular-nums!important}}@media (min-width:1280px){.lg\\:diagonal-fractions{--font-variant-numeric-fraction:diagonal-fractions!important}}@media (min-width:1280px){.lg\\:stacked-fractions{--font-variant-numeric-fraction:stacked-fractions!important}}@media (min-width:1280px){.lg\\:tracking-tighter{letter-spacing:-.05em!important}}@media (min-width:1280px){.lg\\:tracking-tight{letter-spacing:-.025em!important}}@media (min-width:1280px){.lg\\:tracking-normal{letter-spacing:0!important}}@media (min-width:1280px){.lg\\:tracking-wide{letter-spacing:.025em!important}}@media (min-width:1280px){.lg\\:tracking-wider{letter-spacing:.05em!important}}@media (min-width:1280px){.lg\\:tracking-widest{letter-spacing:.1em!important}}@media (min-width:1280px){.lg\\:select-none{-webkit-user-select:none!important;user-select:none!important}}@media (min-width:1280px){.lg\\:select-text{-webkit-user-select:text!important;user-select:text!important}}@media (min-width:1280px){.lg\\:select-all{-webkit-user-select:all!important;user-select:all!important}}@media (min-width:1280px){.lg\\:select-auto{-webkit-user-select:auto!important;user-select:auto!important}}@media (min-width:1280px){.lg\\:align-baseline{vertical-align:initial!important}}@media (min-width:1280px){.lg\\:align-top{vertical-align:top!important}}@media (min-width:1280px){.lg\\:align-middle{vertical-align:middle!important}}@media (min-width:1280px){.lg\\:align-bottom{vertical-align:bottom!important}}@media (min-width:1280px){.lg\\:align-text-top{vertical-align:text-top!important}}@media (min-width:1280px){.lg\\:align-text-bottom{vertical-align:text-bottom!important}}@media (min-width:1280px){.lg\\:visible{visibility:visible!important}}@media (min-width:1280px){.lg\\:invisible{visibility:hidden!important}}@media (min-width:1280px){.lg\\:whitespace-normal{white-space:normal!important}}@media (min-width:1280px){.lg\\:whitespace-no-wrap{white-space:nowrap!important}}@media (min-width:1280px){.lg\\:whitespace-pre{white-space:pre!important}}@media (min-width:1280px){.lg\\:whitespace-pre-line{white-space:pre-line!important}}@media (min-width:1280px){.lg\\:whitespace-pre-wrap{white-space:pre-wrap!important}}@media (min-width:1280px){.lg\\:break-normal{word-wrap:normal!important;overflow-wrap:normal!important;word-break:normal!important}}@media (min-width:1280px){.lg\\:break-words{word-wrap:break-word!important;overflow-wrap:break-word!important}}@media (min-width:1280px){.lg\\:break-all{word-break:break-all!important}}@media (min-width:1280px){.lg\\:truncate{overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}}@media (min-width:1280px){.lg\\:w-0{width:0!important}}@media (min-width:1280px){.lg\\:w-1{width:.25rem!important}}@media (min-width:1280px){.lg\\:w-2{width:.5rem!important}}@media (min-width:1280px){.lg\\:w-3{width:.75rem!important}}@media (min-width:1280px){.lg\\:w-4{width:1rem!important}}@media (min-width:1280px){.lg\\:w-5{width:1.25rem!important}}@media (min-width:1280px){.lg\\:w-6{width:1.5rem!important}}@media (min-width:1280px){.lg\\:w-8{width:2rem!important}}@media (min-width:1280px){.lg\\:w-10{width:2.5rem!important}}@media (min-width:1280px){.lg\\:w-12{width:3rem!important}}@media (min-width:1280px){.lg\\:w-16{width:4rem!important}}@media (min-width:1280px){.lg\\:w-20{width:5rem!important}}@media (min-width:1280px){.lg\\:w-24{width:6rem!important}}@media (min-width:1280px){.lg\\:w-32{width:8rem!important}}@media (min-width:1280px){.lg\\:w-40{width:10rem!important}}@media (min-width:1280px){.lg\\:w-48{width:12rem!important}}@media (min-width:1280px){.lg\\:w-56{width:14rem!important}}@media (min-width:1280px){.lg\\:w-64{width:16rem!important}}@media (min-width:1280px){.lg\\:w-auto{width:auto!important}}@media (min-width:1280px){.lg\\:w-px{width:1px!important}}@media (min-width:1280px){.lg\\:w-1\\/2{width:50%!important}}@media (min-width:1280px){.lg\\:w-1\\/3{width:33.333333%!important}}@media (min-width:1280px){.lg\\:w-2\\/3{width:66.666667%!important}}@media (min-width:1280px){.lg\\:w-1\\/4{width:25%!important}}@media (min-width:1280px){.lg\\:w-2\\/4{width:50%!important}}@media (min-width:1280px){.lg\\:w-3\\/4{width:75%!important}}@media (min-width:1280px){.lg\\:w-1\\/5{width:20%!important}}@media (min-width:1280px){.lg\\:w-2\\/5{width:40%!important}}@media (min-width:1280px){.lg\\:w-3\\/5{width:60%!important}}@media (min-width:1280px){.lg\\:w-4\\/5{width:80%!important}}@media (min-width:1280px){.lg\\:w-1\\/6{width:16.666667%!important}}@media (min-width:1280px){.lg\\:w-2\\/6{width:33.333333%!important}}@media (min-width:1280px){.lg\\:w-3\\/6{width:50%!important}}@media (min-width:1280px){.lg\\:w-4\\/6{width:66.666667%!important}}@media (min-width:1280px){.lg\\:w-5\\/6{width:83.333333%!important}}@media (min-width:1280px){.lg\\:w-1\\/12{width:8.333333%!important}}@media (min-width:1280px){.lg\\:w-2\\/12{width:16.666667%!important}}@media (min-width:1280px){.lg\\:w-3\\/12{width:25%!important}}@media (min-width:1280px){.lg\\:w-4\\/12{width:33.333333%!important}}@media (min-width:1280px){.lg\\:w-5\\/12{width:41.666667%!important}}@media (min-width:1280px){.lg\\:w-6\\/12{width:50%!important}}@media (min-width:1280px){.lg\\:w-7\\/12{width:58.333333%!important}}@media (min-width:1280px){.lg\\:w-8\\/12{width:66.666667%!important}}@media (min-width:1280px){.lg\\:w-9\\/12{width:75%!important}}@media (min-width:1280px){.lg\\:w-10\\/12{width:83.333333%!important}}@media (min-width:1280px){.lg\\:w-11\\/12{width:91.666667%!important}}@media (min-width:1280px){.lg\\:w-full{width:100%!important}}@media (min-width:1280px){.lg\\:w-screen{width:100vw!important}}@media (min-width:1280px){.lg\\:z-0{z-index:0!important}}@media (min-width:1280px){.lg\\:z-10{z-index:10!important}}@media (min-width:1280px){.lg\\:z-20{z-index:20!important}}@media (min-width:1280px){.lg\\:z-30{z-index:30!important}}@media (min-width:1280px){.lg\\:z-40{z-index:40!important}}@media (min-width:1280px){.lg\\:z-50{z-index:50!important}}@media (min-width:1280px){.lg\\:z-auto{z-index:auto!important}}@media (min-width:1280px){.lg\\:gap-0{grid-gap:0!important;gap:0!important}}@media (min-width:1280px){.lg\\:gap-1{grid-gap:.25rem!important;gap:.25rem!important}}@media (min-width:1280px){.lg\\:gap-2{grid-gap:.5rem!important;gap:.5rem!important}}@media (min-width:1280px){.lg\\:gap-3{grid-gap:.75rem!important;gap:.75rem!important}}@media (min-width:1280px){.lg\\:gap-4{grid-gap:1rem!important;gap:1rem!important}}@media (min-width:1280px){.lg\\:gap-5{grid-gap:1.25rem!important;gap:1.25rem!important}}@media (min-width:1280px){.lg\\:gap-6{grid-gap:1.5rem!important;gap:1.5rem!important}}@media (min-width:1280px){.lg\\:gap-8{grid-gap:2rem!important;gap:2rem!important}}@media (min-width:1280px){.lg\\:gap-10{grid-gap:2.5rem!important;gap:2.5rem!important}}@media (min-width:1280px){.lg\\:gap-12{grid-gap:3rem!important;gap:3rem!important}}@media (min-width:1280px){.lg\\:gap-16{grid-gap:4rem!important;gap:4rem!important}}@media (min-width:1280px){.lg\\:gap-20{grid-gap:5rem!important;gap:5rem!important}}@media (min-width:1280px){.lg\\:gap-24{grid-gap:6rem!important;gap:6rem!important}}@media (min-width:1280px){.lg\\:gap-32{grid-gap:8rem!important;gap:8rem!important}}@media (min-width:1280px){.lg\\:gap-40{grid-gap:10rem!important;gap:10rem!important}}@media (min-width:1280px){.lg\\:gap-48{grid-gap:12rem!important;gap:12rem!important}}@media (min-width:1280px){.lg\\:gap-56{grid-gap:14rem!important;gap:14rem!important}}@media (min-width:1280px){.lg\\:gap-64{grid-gap:16rem!important;gap:16rem!important}}@media (min-width:1280px){.lg\\:gap-px{grid-gap:1px!important;gap:1px!important}}@media (min-width:1280px){.lg\\:col-gap-0{grid-column-gap:0!important;column-gap:0!important}}@media (min-width:1280px){.lg\\:col-gap-1{grid-column-gap:.25rem!important;column-gap:.25rem!important}}@media (min-width:1280px){.lg\\:col-gap-2{grid-column-gap:.5rem!important;column-gap:.5rem!important}}@media (min-width:1280px){.lg\\:col-gap-3{grid-column-gap:.75rem!important;column-gap:.75rem!important}}@media (min-width:1280px){.lg\\:col-gap-4{grid-column-gap:1rem!important;column-gap:1rem!important}}@media (min-width:1280px){.lg\\:col-gap-5{grid-column-gap:1.25rem!important;column-gap:1.25rem!important}}@media (min-width:1280px){.lg\\:col-gap-6{grid-column-gap:1.5rem!important;column-gap:1.5rem!important}}@media (min-width:1280px){.lg\\:col-gap-8{grid-column-gap:2rem!important;column-gap:2rem!important}}@media (min-width:1280px){.lg\\:col-gap-10{grid-column-gap:2.5rem!important;column-gap:2.5rem!important}}@media (min-width:1280px){.lg\\:col-gap-12{grid-column-gap:3rem!important;column-gap:3rem!important}}@media (min-width:1280px){.lg\\:col-gap-16{grid-column-gap:4rem!important;column-gap:4rem!important}}@media (min-width:1280px){.lg\\:col-gap-20{grid-column-gap:5rem!important;column-gap:5rem!important}}@media (min-width:1280px){.lg\\:col-gap-24{grid-column-gap:6rem!important;column-gap:6rem!important}}@media (min-width:1280px){.lg\\:col-gap-32{grid-column-gap:8rem!important;column-gap:8rem!important}}@media (min-width:1280px){.lg\\:col-gap-40{grid-column-gap:10rem!important;column-gap:10rem!important}}@media (min-width:1280px){.lg\\:col-gap-48{grid-column-gap:12rem!important;column-gap:12rem!important}}@media (min-width:1280px){.lg\\:col-gap-56{grid-column-gap:14rem!important;column-gap:14rem!important}}@media (min-width:1280px){.lg\\:col-gap-64{grid-column-gap:16rem!important;column-gap:16rem!important}}@media (min-width:1280px){.lg\\:col-gap-px{grid-column-gap:1px!important;column-gap:1px!important}}@media (min-width:1280px){.lg\\:gap-x-0{grid-column-gap:0!important;column-gap:0!important}}@media (min-width:1280px){.lg\\:gap-x-1{grid-column-gap:.25rem!important;column-gap:.25rem!important}}@media (min-width:1280px){.lg\\:gap-x-2{grid-column-gap:.5rem!important;column-gap:.5rem!important}}@media (min-width:1280px){.lg\\:gap-x-3{grid-column-gap:.75rem!important;column-gap:.75rem!important}}@media (min-width:1280px){.lg\\:gap-x-4{grid-column-gap:1rem!important;column-gap:1rem!important}}@media (min-width:1280px){.lg\\:gap-x-5{grid-column-gap:1.25rem!important;column-gap:1.25rem!important}}@media (min-width:1280px){.lg\\:gap-x-6{grid-column-gap:1.5rem!important;column-gap:1.5rem!important}}@media (min-width:1280px){.lg\\:gap-x-8{grid-column-gap:2rem!important;column-gap:2rem!important}}@media (min-width:1280px){.lg\\:gap-x-10{grid-column-gap:2.5rem!important;column-gap:2.5rem!important}}@media (min-width:1280px){.lg\\:gap-x-12{grid-column-gap:3rem!important;column-gap:3rem!important}}@media (min-width:1280px){.lg\\:gap-x-16{grid-column-gap:4rem!important;column-gap:4rem!important}}@media (min-width:1280px){.lg\\:gap-x-20{grid-column-gap:5rem!important;column-gap:5rem!important}}@media (min-width:1280px){.lg\\:gap-x-24{grid-column-gap:6rem!important;column-gap:6rem!important}}@media (min-width:1280px){.lg\\:gap-x-32{grid-column-gap:8rem!important;column-gap:8rem!important}}@media (min-width:1280px){.lg\\:gap-x-40{grid-column-gap:10rem!important;column-gap:10rem!important}}@media (min-width:1280px){.lg\\:gap-x-48{grid-column-gap:12rem!important;column-gap:12rem!important}}@media (min-width:1280px){.lg\\:gap-x-56{grid-column-gap:14rem!important;column-gap:14rem!important}}@media (min-width:1280px){.lg\\:gap-x-64{grid-column-gap:16rem!important;column-gap:16rem!important}}@media (min-width:1280px){.lg\\:gap-x-px{grid-column-gap:1px!important;column-gap:1px!important}}@media (min-width:1280px){.lg\\:row-gap-0{grid-row-gap:0!important;row-gap:0!important}}@media (min-width:1280px){.lg\\:row-gap-1{grid-row-gap:.25rem!important;row-gap:.25rem!important}}@media (min-width:1280px){.lg\\:row-gap-2{grid-row-gap:.5rem!important;row-gap:.5rem!important}}@media (min-width:1280px){.lg\\:row-gap-3{grid-row-gap:.75rem!important;row-gap:.75rem!important}}@media (min-width:1280px){.lg\\:row-gap-4{grid-row-gap:1rem!important;row-gap:1rem!important}}@media (min-width:1280px){.lg\\:row-gap-5{grid-row-gap:1.25rem!important;row-gap:1.25rem!important}}@media (min-width:1280px){.lg\\:row-gap-6{grid-row-gap:1.5rem!important;row-gap:1.5rem!important}}@media (min-width:1280px){.lg\\:row-gap-8{grid-row-gap:2rem!important;row-gap:2rem!important}}@media (min-width:1280px){.lg\\:row-gap-10{grid-row-gap:2.5rem!important;row-gap:2.5rem!important}}@media (min-width:1280px){.lg\\:row-gap-12{grid-row-gap:3rem!important;row-gap:3rem!important}}@media (min-width:1280px){.lg\\:row-gap-16{grid-row-gap:4rem!important;row-gap:4rem!important}}@media (min-width:1280px){.lg\\:row-gap-20{grid-row-gap:5rem!important;row-gap:5rem!important}}@media (min-width:1280px){.lg\\:row-gap-24{grid-row-gap:6rem!important;row-gap:6rem!important}}@media (min-width:1280px){.lg\\:row-gap-32{grid-row-gap:8rem!important;row-gap:8rem!important}}@media (min-width:1280px){.lg\\:row-gap-40{grid-row-gap:10rem!important;row-gap:10rem!important}}@media (min-width:1280px){.lg\\:row-gap-48{grid-row-gap:12rem!important;row-gap:12rem!important}}@media (min-width:1280px){.lg\\:row-gap-56{grid-row-gap:14rem!important;row-gap:14rem!important}}@media (min-width:1280px){.lg\\:row-gap-64{grid-row-gap:16rem!important;row-gap:16rem!important}}@media (min-width:1280px){.lg\\:row-gap-px{grid-row-gap:1px!important;row-gap:1px!important}}@media (min-width:1280px){.lg\\:gap-y-0{grid-row-gap:0!important;row-gap:0!important}}@media (min-width:1280px){.lg\\:gap-y-1{grid-row-gap:.25rem!important;row-gap:.25rem!important}}@media (min-width:1280px){.lg\\:gap-y-2{grid-row-gap:.5rem!important;row-gap:.5rem!important}}@media (min-width:1280px){.lg\\:gap-y-3{grid-row-gap:.75rem!important;row-gap:.75rem!important}}@media (min-width:1280px){.lg\\:gap-y-4{grid-row-gap:1rem!important;row-gap:1rem!important}}@media (min-width:1280px){.lg\\:gap-y-5{grid-row-gap:1.25rem!important;row-gap:1.25rem!important}}@media (min-width:1280px){.lg\\:gap-y-6{grid-row-gap:1.5rem!important;row-gap:1.5rem!important}}@media (min-width:1280px){.lg\\:gap-y-8{grid-row-gap:2rem!important;row-gap:2rem!important}}@media (min-width:1280px){.lg\\:gap-y-10{grid-row-gap:2.5rem!important;row-gap:2.5rem!important}}@media (min-width:1280px){.lg\\:gap-y-12{grid-row-gap:3rem!important;row-gap:3rem!important}}@media (min-width:1280px){.lg\\:gap-y-16{grid-row-gap:4rem!important;row-gap:4rem!important}}@media (min-width:1280px){.lg\\:gap-y-20{grid-row-gap:5rem!important;row-gap:5rem!important}}@media (min-width:1280px){.lg\\:gap-y-24{grid-row-gap:6rem!important;row-gap:6rem!important}}@media (min-width:1280px){.lg\\:gap-y-32{grid-row-gap:8rem!important;row-gap:8rem!important}}@media (min-width:1280px){.lg\\:gap-y-40{grid-row-gap:10rem!important;row-gap:10rem!important}}@media (min-width:1280px){.lg\\:gap-y-48{grid-row-gap:12rem!important;row-gap:12rem!important}}@media (min-width:1280px){.lg\\:gap-y-56{grid-row-gap:14rem!important;row-gap:14rem!important}}@media (min-width:1280px){.lg\\:gap-y-64{grid-row-gap:16rem!important;row-gap:16rem!important}}@media (min-width:1280px){.lg\\:gap-y-px{grid-row-gap:1px!important;row-gap:1px!important}}@media (min-width:1280px){.lg\\:grid-flow-row{grid-auto-flow:row!important}}@media (min-width:1280px){.lg\\:grid-flow-col{grid-auto-flow:column!important}}@media (min-width:1280px){.lg\\:grid-flow-row-dense{grid-auto-flow:row dense!important}}@media (min-width:1280px){.lg\\:grid-flow-col-dense{grid-auto-flow:column dense!important}}@media (min-width:1280px){.lg\\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}}@media (min-width:1280px){.lg\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}}@media (min-width:1280px){.lg\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}}@media (min-width:1280px){.lg\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))!important}}@media (min-width:1280px){.lg\\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))!important}}@media (min-width:1280px){.lg\\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))!important}}@media (min-width:1280px){.lg\\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))!important}}@media (min-width:1280px){.lg\\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))!important}}@media (min-width:1280px){.lg\\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))!important}}@media (min-width:1280px){.lg\\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))!important}}@media (min-width:1280px){.lg\\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))!important}}@media (min-width:1280px){.lg\\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))!important}}@media (min-width:1280px){.lg\\:grid-cols-none{grid-template-columns:none!important}}@media (min-width:1280px){.lg\\:auto-cols-auto{grid-auto-columns:auto!important}}@media (min-width:1280px){.lg\\:auto-cols-min{grid-auto-columns:-webkit-min-content!important;grid-auto-columns:min-content!important}}@media (min-width:1280px){.lg\\:auto-cols-max{grid-auto-columns:-webkit-max-content!important;grid-auto-columns:max-content!important}}@media (min-width:1280px){.lg\\:auto-cols-fr{grid-auto-columns:minmax(0,1fr)!important}}@media (min-width:1280px){.lg\\:col-auto{grid-column:auto!important}}@media (min-width:1280px){.lg\\:col-span-1{grid-column:span 1/span 1!important}}@media (min-width:1280px){.lg\\:col-span-2{grid-column:span 2/span 2!important}}@media (min-width:1280px){.lg\\:col-span-3{grid-column:span 3/span 3!important}}@media (min-width:1280px){.lg\\:col-span-4{grid-column:span 4/span 4!important}}@media (min-width:1280px){.lg\\:col-span-5{grid-column:span 5/span 5!important}}@media (min-width:1280px){.lg\\:col-span-6{grid-column:span 6/span 6!important}}@media (min-width:1280px){.lg\\:col-span-7{grid-column:span 7/span 7!important}}@media (min-width:1280px){.lg\\:col-span-8{grid-column:span 8/span 8!important}}@media (min-width:1280px){.lg\\:col-span-9{grid-column:span 9/span 9!important}}@media (min-width:1280px){.lg\\:col-span-10{grid-column:span 10/span 10!important}}@media (min-width:1280px){.lg\\:col-span-11{grid-column:span 11/span 11!important}}@media (min-width:1280px){.lg\\:col-span-12{grid-column:span 12/span 12!important}}@media (min-width:1280px){.lg\\:col-span-full{grid-column:1/-1!important}}@media (min-width:1280px){.lg\\:col-start-1{grid-column-start:1!important}}@media (min-width:1280px){.lg\\:col-start-2{grid-column-start:2!important}}@media (min-width:1280px){.lg\\:col-start-3{grid-column-start:3!important}}@media (min-width:1280px){.lg\\:col-start-4{grid-column-start:4!important}}@media (min-width:1280px){.lg\\:col-start-5{grid-column-start:5!important}}@media (min-width:1280px){.lg\\:col-start-6{grid-column-start:6!important}}@media (min-width:1280px){.lg\\:col-start-7{grid-column-start:7!important}}@media (min-width:1280px){.lg\\:col-start-8{grid-column-start:8!important}}@media (min-width:1280px){.lg\\:col-start-9{grid-column-start:9!important}}@media (min-width:1280px){.lg\\:col-start-10{grid-column-start:10!important}}@media (min-width:1280px){.lg\\:col-start-11{grid-column-start:11!important}}@media (min-width:1280px){.lg\\:col-start-12{grid-column-start:12!important}}@media (min-width:1280px){.lg\\:col-start-13{grid-column-start:13!important}}@media (min-width:1280px){.lg\\:col-start-auto{grid-column-start:auto!important}}@media (min-width:1280px){.lg\\:col-end-1{grid-column-end:1!important}}@media (min-width:1280px){.lg\\:col-end-2{grid-column-end:2!important}}@media (min-width:1280px){.lg\\:col-end-3{grid-column-end:3!important}}@media (min-width:1280px){.lg\\:col-end-4{grid-column-end:4!important}}@media (min-width:1280px){.lg\\:col-end-5{grid-column-end:5!important}}@media (min-width:1280px){.lg\\:col-end-6{grid-column-end:6!important}}@media (min-width:1280px){.lg\\:col-end-7{grid-column-end:7!important}}@media (min-width:1280px){.lg\\:col-end-8{grid-column-end:8!important}}@media (min-width:1280px){.lg\\:col-end-9{grid-column-end:9!important}}@media (min-width:1280px){.lg\\:col-end-10{grid-column-end:10!important}}@media (min-width:1280px){.lg\\:col-end-11{grid-column-end:11!important}}@media (min-width:1280px){.lg\\:col-end-12{grid-column-end:12!important}}@media (min-width:1280px){.lg\\:col-end-13{grid-column-end:13!important}}@media (min-width:1280px){.lg\\:col-end-auto{grid-column-end:auto!important}}@media (min-width:1280px){.lg\\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))!important}}@media (min-width:1280px){.lg\\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))!important}}@media (min-width:1280px){.lg\\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))!important}}@media (min-width:1280px){.lg\\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))!important}}@media (min-width:1280px){.lg\\:grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))!important}}@media (min-width:1280px){.lg\\:grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))!important}}@media (min-width:1280px){.lg\\:grid-rows-none{grid-template-rows:none!important}}@media (min-width:1280px){.lg\\:auto-rows-auto{grid-auto-rows:auto!important}}@media (min-width:1280px){.lg\\:auto-rows-min{grid-auto-rows:-webkit-min-content!important;grid-auto-rows:min-content!important}}@media (min-width:1280px){.lg\\:auto-rows-max{grid-auto-rows:-webkit-max-content!important;grid-auto-rows:max-content!important}}@media (min-width:1280px){.lg\\:auto-rows-fr{grid-auto-rows:minmax(0,1fr)!important}}@media (min-width:1280px){.lg\\:row-auto{grid-row:auto!important}}@media (min-width:1280px){.lg\\:row-span-1{grid-row:span 1/span 1!important}}@media (min-width:1280px){.lg\\:row-span-2{grid-row:span 2/span 2!important}}@media (min-width:1280px){.lg\\:row-span-3{grid-row:span 3/span 3!important}}@media (min-width:1280px){.lg\\:row-span-4{grid-row:span 4/span 4!important}}@media (min-width:1280px){.lg\\:row-span-5{grid-row:span 5/span 5!important}}@media (min-width:1280px){.lg\\:row-span-6{grid-row:span 6/span 6!important}}@media (min-width:1280px){.lg\\:row-span-full{grid-row:1/-1!important}}@media (min-width:1280px){.lg\\:row-start-1{grid-row-start:1!important}}@media (min-width:1280px){.lg\\:row-start-2{grid-row-start:2!important}}@media (min-width:1280px){.lg\\:row-start-3{grid-row-start:3!important}}@media (min-width:1280px){.lg\\:row-start-4{grid-row-start:4!important}}@media (min-width:1280px){.lg\\:row-start-5{grid-row-start:5!important}}@media (min-width:1280px){.lg\\:row-start-6{grid-row-start:6!important}}@media (min-width:1280px){.lg\\:row-start-7{grid-row-start:7!important}}@media (min-width:1280px){.lg\\:row-start-auto{grid-row-start:auto!important}}@media (min-width:1280px){.lg\\:row-end-1{grid-row-end:1!important}}@media (min-width:1280px){.lg\\:row-end-2{grid-row-end:2!important}}@media (min-width:1280px){.lg\\:row-end-3{grid-row-end:3!important}}@media (min-width:1280px){.lg\\:row-end-4{grid-row-end:4!important}}@media (min-width:1280px){.lg\\:row-end-5{grid-row-end:5!important}}@media (min-width:1280px){.lg\\:row-end-6{grid-row-end:6!important}}@media (min-width:1280px){.lg\\:row-end-7{grid-row-end:7!important}}@media (min-width:1280px){.lg\\:row-end-auto{grid-row-end:auto!important}}@media (min-width:1280px){.lg\\:transform{--transform-translate-x:0!important;--transform-translate-y:0!important;--transform-rotate:0!important;--transform-skew-x:0!important;--transform-skew-y:0!important;--transform-scale-x:1!important;--transform-scale-y:1!important;transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))!important}}@media (min-width:1280px){.lg\\:transform-none{transform:none!important}}@media (min-width:1280px){.lg\\:origin-center{transform-origin:center!important}}@media (min-width:1280px){.lg\\:origin-top{transform-origin:top!important}}@media (min-width:1280px){.lg\\:origin-top-right{transform-origin:top right!important}}@media (min-width:1280px){.lg\\:origin-right{transform-origin:right!important}}@media (min-width:1280px){.lg\\:origin-bottom-right{transform-origin:bottom right!important}}@media (min-width:1280px){.lg\\:origin-bottom{transform-origin:bottom!important}}@media (min-width:1280px){.lg\\:origin-bottom-left{transform-origin:bottom left!important}}@media (min-width:1280px){.lg\\:origin-left{transform-origin:left!important}}@media (min-width:1280px){.lg\\:origin-top-left{transform-origin:top left!important}}@media (min-width:1280px){.lg\\:scale-0{--transform-scale-x:0!important;--transform-scale-y:0!important}}@media (min-width:1280px){.lg\\:scale-50{--transform-scale-x:.5!important;--transform-scale-y:.5!important}}@media (min-width:1280px){.lg\\:scale-75{--transform-scale-x:.75!important;--transform-scale-y:.75!important}}@media (min-width:1280px){.lg\\:scale-90{--transform-scale-x:.9!important;--transform-scale-y:.9!important}}@media (min-width:1280px){.lg\\:scale-95{--transform-scale-x:.95!important;--transform-scale-y:.95!important}}@media (min-width:1280px){.lg\\:scale-100{--transform-scale-x:1!important;--transform-scale-y:1!important}}@media (min-width:1280px){.lg\\:scale-105{--transform-scale-x:1.05!important;--transform-scale-y:1.05!important}}@media (min-width:1280px){.lg\\:scale-110{--transform-scale-x:1.1!important;--transform-scale-y:1.1!important}}@media (min-width:1280px){.lg\\:scale-125{--transform-scale-x:1.25!important;--transform-scale-y:1.25!important}}@media (min-width:1280px){.lg\\:scale-150{--transform-scale-x:1.5!important;--transform-scale-y:1.5!important}}@media (min-width:1280px){.lg\\:scale-x-0{--transform-scale-x:0!important}}@media (min-width:1280px){.lg\\:scale-x-50{--transform-scale-x:.5!important}}@media (min-width:1280px){.lg\\:scale-x-75{--transform-scale-x:.75!important}}@media (min-width:1280px){.lg\\:scale-x-90{--transform-scale-x:.9!important}}@media (min-width:1280px){.lg\\:scale-x-95{--transform-scale-x:.95!important}}@media (min-width:1280px){.lg\\:scale-x-100{--transform-scale-x:1!important}}@media (min-width:1280px){.lg\\:scale-x-105{--transform-scale-x:1.05!important}}@media (min-width:1280px){.lg\\:scale-x-110{--transform-scale-x:1.1!important}}@media (min-width:1280px){.lg\\:scale-x-125{--transform-scale-x:1.25!important}}@media (min-width:1280px){.lg\\:scale-x-150{--transform-scale-x:1.5!important}}@media (min-width:1280px){.lg\\:scale-y-0{--transform-scale-y:0!important}}@media (min-width:1280px){.lg\\:scale-y-50{--transform-scale-y:.5!important}}@media (min-width:1280px){.lg\\:scale-y-75{--transform-scale-y:.75!important}}@media (min-width:1280px){.lg\\:scale-y-90{--transform-scale-y:.9!important}}@media (min-width:1280px){.lg\\:scale-y-95{--transform-scale-y:.95!important}}@media (min-width:1280px){.lg\\:scale-y-100{--transform-scale-y:1!important}}@media (min-width:1280px){.lg\\:scale-y-105{--transform-scale-y:1.05!important}}@media (min-width:1280px){.lg\\:scale-y-110{--transform-scale-y:1.1!important}}@media (min-width:1280px){.lg\\:scale-y-125{--transform-scale-y:1.25!important}}@media (min-width:1280px){.lg\\:scale-y-150{--transform-scale-y:1.5!important}}@media (min-width:1280px){.lg\\:hover\\:scale-0:hover{--transform-scale-x:0!important;--transform-scale-y:0!important}}@media (min-width:1280px){.lg\\:hover\\:scale-50:hover{--transform-scale-x:.5!important;--transform-scale-y:.5!important}}@media (min-width:1280px){.lg\\:hover\\:scale-75:hover{--transform-scale-x:.75!important;--transform-scale-y:.75!important}}@media (min-width:1280px){.lg\\:hover\\:scale-90:hover{--transform-scale-x:.9!important;--transform-scale-y:.9!important}}@media (min-width:1280px){.lg\\:hover\\:scale-95:hover{--transform-scale-x:.95!important;--transform-scale-y:.95!important}}@media (min-width:1280px){.lg\\:hover\\:scale-100:hover{--transform-scale-x:1!important;--transform-scale-y:1!important}}@media (min-width:1280px){.lg\\:hover\\:scale-105:hover{--transform-scale-x:1.05!important;--transform-scale-y:1.05!important}}@media (min-width:1280px){.lg\\:hover\\:scale-110:hover{--transform-scale-x:1.1!important;--transform-scale-y:1.1!important}}@media (min-width:1280px){.lg\\:hover\\:scale-125:hover{--transform-scale-x:1.25!important;--transform-scale-y:1.25!important}}@media (min-width:1280px){.lg\\:hover\\:scale-150:hover{--transform-scale-x:1.5!important;--transform-scale-y:1.5!important}}@media (min-width:1280px){.lg\\:hover\\:scale-x-0:hover{--transform-scale-x:0!important}}@media (min-width:1280px){.lg\\:hover\\:scale-x-50:hover{--transform-scale-x:.5!important}}@media (min-width:1280px){.lg\\:hover\\:scale-x-75:hover{--transform-scale-x:.75!important}}@media (min-width:1280px){.lg\\:hover\\:scale-x-90:hover{--transform-scale-x:.9!important}}@media (min-width:1280px){.lg\\:hover\\:scale-x-95:hover{--transform-scale-x:.95!important}}@media (min-width:1280px){.lg\\:hover\\:scale-x-100:hover{--transform-scale-x:1!important}}@media (min-width:1280px){.lg\\:hover\\:scale-x-105:hover{--transform-scale-x:1.05!important}}@media (min-width:1280px){.lg\\:hover\\:scale-x-110:hover{--transform-scale-x:1.1!important}}@media (min-width:1280px){.lg\\:hover\\:scale-x-125:hover{--transform-scale-x:1.25!important}}@media (min-width:1280px){.lg\\:hover\\:scale-x-150:hover{--transform-scale-x:1.5!important}}@media (min-width:1280px){.lg\\:hover\\:scale-y-0:hover{--transform-scale-y:0!important}}@media (min-width:1280px){.lg\\:hover\\:scale-y-50:hover{--transform-scale-y:.5!important}}@media (min-width:1280px){.lg\\:hover\\:scale-y-75:hover{--transform-scale-y:.75!important}}@media (min-width:1280px){.lg\\:hover\\:scale-y-90:hover{--transform-scale-y:.9!important}}@media (min-width:1280px){.lg\\:hover\\:scale-y-95:hover{--transform-scale-y:.95!important}}@media (min-width:1280px){.lg\\:hover\\:scale-y-100:hover{--transform-scale-y:1!important}}@media (min-width:1280px){.lg\\:hover\\:scale-y-105:hover{--transform-scale-y:1.05!important}}@media (min-width:1280px){.lg\\:hover\\:scale-y-110:hover{--transform-scale-y:1.1!important}}@media (min-width:1280px){.lg\\:hover\\:scale-y-125:hover{--transform-scale-y:1.25!important}}@media (min-width:1280px){.lg\\:hover\\:scale-y-150:hover{--transform-scale-y:1.5!important}}@media (min-width:1280px){.lg\\:focus\\:scale-0:focus{--transform-scale-x:0!important;--transform-scale-y:0!important}}@media (min-width:1280px){.lg\\:focus\\:scale-50:focus{--transform-scale-x:.5!important;--transform-scale-y:.5!important}}@media (min-width:1280px){.lg\\:focus\\:scale-75:focus{--transform-scale-x:.75!important;--transform-scale-y:.75!important}}@media (min-width:1280px){.lg\\:focus\\:scale-90:focus{--transform-scale-x:.9!important;--transform-scale-y:.9!important}}@media (min-width:1280px){.lg\\:focus\\:scale-95:focus{--transform-scale-x:.95!important;--transform-scale-y:.95!important}}@media (min-width:1280px){.lg\\:focus\\:scale-100:focus{--transform-scale-x:1!important;--transform-scale-y:1!important}}@media (min-width:1280px){.lg\\:focus\\:scale-105:focus{--transform-scale-x:1.05!important;--transform-scale-y:1.05!important}}@media (min-width:1280px){.lg\\:focus\\:scale-110:focus{--transform-scale-x:1.1!important;--transform-scale-y:1.1!important}}@media (min-width:1280px){.lg\\:focus\\:scale-125:focus{--transform-scale-x:1.25!important;--transform-scale-y:1.25!important}}@media (min-width:1280px){.lg\\:focus\\:scale-150:focus{--transform-scale-x:1.5!important;--transform-scale-y:1.5!important}}@media (min-width:1280px){.lg\\:focus\\:scale-x-0:focus{--transform-scale-x:0!important}}@media (min-width:1280px){.lg\\:focus\\:scale-x-50:focus{--transform-scale-x:.5!important}}@media (min-width:1280px){.lg\\:focus\\:scale-x-75:focus{--transform-scale-x:.75!important}}@media (min-width:1280px){.lg\\:focus\\:scale-x-90:focus{--transform-scale-x:.9!important}}@media (min-width:1280px){.lg\\:focus\\:scale-x-95:focus{--transform-scale-x:.95!important}}@media (min-width:1280px){.lg\\:focus\\:scale-x-100:focus{--transform-scale-x:1!important}}@media (min-width:1280px){.lg\\:focus\\:scale-x-105:focus{--transform-scale-x:1.05!important}}@media (min-width:1280px){.lg\\:focus\\:scale-x-110:focus{--transform-scale-x:1.1!important}}@media (min-width:1280px){.lg\\:focus\\:scale-x-125:focus{--transform-scale-x:1.25!important}}@media (min-width:1280px){.lg\\:focus\\:scale-x-150:focus{--transform-scale-x:1.5!important}}@media (min-width:1280px){.lg\\:focus\\:scale-y-0:focus{--transform-scale-y:0!important}}@media (min-width:1280px){.lg\\:focus\\:scale-y-50:focus{--transform-scale-y:.5!important}}@media (min-width:1280px){.lg\\:focus\\:scale-y-75:focus{--transform-scale-y:.75!important}}@media (min-width:1280px){.lg\\:focus\\:scale-y-90:focus{--transform-scale-y:.9!important}}@media (min-width:1280px){.lg\\:focus\\:scale-y-95:focus{--transform-scale-y:.95!important}}@media (min-width:1280px){.lg\\:focus\\:scale-y-100:focus{--transform-scale-y:1!important}}@media (min-width:1280px){.lg\\:focus\\:scale-y-105:focus{--transform-scale-y:1.05!important}}@media (min-width:1280px){.lg\\:focus\\:scale-y-110:focus{--transform-scale-y:1.1!important}}@media (min-width:1280px){.lg\\:focus\\:scale-y-125:focus{--transform-scale-y:1.25!important}}@media (min-width:1280px){.lg\\:focus\\:scale-y-150:focus{--transform-scale-y:1.5!important}}@media (min-width:1280px){.lg\\:rotate-0{--transform-rotate:0!important}}@media (min-width:1280px){.lg\\:rotate-1{--transform-rotate:1deg!important}}@media (min-width:1280px){.lg\\:rotate-2{--transform-rotate:2deg!important}}@media (min-width:1280px){.lg\\:rotate-3{--transform-rotate:3deg!important}}@media (min-width:1280px){.lg\\:rotate-6{--transform-rotate:6deg!important}}@media (min-width:1280px){.lg\\:rotate-12{--transform-rotate:12deg!important}}@media (min-width:1280px){.lg\\:rotate-45{--transform-rotate:45deg!important}}@media (min-width:1280px){.lg\\:rotate-90{--transform-rotate:90deg!important}}@media (min-width:1280px){.lg\\:rotate-180{--transform-rotate:180deg!important}}@media (min-width:1280px){.lg\\:-rotate-180{--transform-rotate:-180deg!important}}@media (min-width:1280px){.lg\\:-rotate-90{--transform-rotate:-90deg!important}}@media (min-width:1280px){.lg\\:-rotate-45{--transform-rotate:-45deg!important}}@media (min-width:1280px){.lg\\:-rotate-12{--transform-rotate:-12deg!important}}@media (min-width:1280px){.lg\\:-rotate-6{--transform-rotate:-6deg!important}}@media (min-width:1280px){.lg\\:-rotate-3{--transform-rotate:-3deg!important}}@media (min-width:1280px){.lg\\:-rotate-2{--transform-rotate:-2deg!important}}@media (min-width:1280px){.lg\\:-rotate-1{--transform-rotate:-1deg!important}}@media (min-width:1280px){.lg\\:hover\\:rotate-0:hover{--transform-rotate:0!important}}@media (min-width:1280px){.lg\\:hover\\:rotate-1:hover{--transform-rotate:1deg!important}}@media (min-width:1280px){.lg\\:hover\\:rotate-2:hover{--transform-rotate:2deg!important}}@media (min-width:1280px){.lg\\:hover\\:rotate-3:hover{--transform-rotate:3deg!important}}@media (min-width:1280px){.lg\\:hover\\:rotate-6:hover{--transform-rotate:6deg!important}}@media (min-width:1280px){.lg\\:hover\\:rotate-12:hover{--transform-rotate:12deg!important}}@media (min-width:1280px){.lg\\:hover\\:rotate-45:hover{--transform-rotate:45deg!important}}@media (min-width:1280px){.lg\\:hover\\:rotate-90:hover{--transform-rotate:90deg!important}}@media (min-width:1280px){.lg\\:hover\\:rotate-180:hover{--transform-rotate:180deg!important}}@media (min-width:1280px){.lg\\:hover\\:-rotate-180:hover{--transform-rotate:-180deg!important}}@media (min-width:1280px){.lg\\:hover\\:-rotate-90:hover{--transform-rotate:-90deg!important}}@media (min-width:1280px){.lg\\:hover\\:-rotate-45:hover{--transform-rotate:-45deg!important}}@media (min-width:1280px){.lg\\:hover\\:-rotate-12:hover{--transform-rotate:-12deg!important}}@media (min-width:1280px){.lg\\:hover\\:-rotate-6:hover{--transform-rotate:-6deg!important}}@media (min-width:1280px){.lg\\:hover\\:-rotate-3:hover{--transform-rotate:-3deg!important}}@media (min-width:1280px){.lg\\:hover\\:-rotate-2:hover{--transform-rotate:-2deg!important}}@media (min-width:1280px){.lg\\:hover\\:-rotate-1:hover{--transform-rotate:-1deg!important}}@media (min-width:1280px){.lg\\:focus\\:rotate-0:focus{--transform-rotate:0!important}}@media (min-width:1280px){.lg\\:focus\\:rotate-1:focus{--transform-rotate:1deg!important}}@media (min-width:1280px){.lg\\:focus\\:rotate-2:focus{--transform-rotate:2deg!important}}@media (min-width:1280px){.lg\\:focus\\:rotate-3:focus{--transform-rotate:3deg!important}}@media (min-width:1280px){.lg\\:focus\\:rotate-6:focus{--transform-rotate:6deg!important}}@media (min-width:1280px){.lg\\:focus\\:rotate-12:focus{--transform-rotate:12deg!important}}@media (min-width:1280px){.lg\\:focus\\:rotate-45:focus{--transform-rotate:45deg!important}}@media (min-width:1280px){.lg\\:focus\\:rotate-90:focus{--transform-rotate:90deg!important}}@media (min-width:1280px){.lg\\:focus\\:rotate-180:focus{--transform-rotate:180deg!important}}@media (min-width:1280px){.lg\\:focus\\:-rotate-180:focus{--transform-rotate:-180deg!important}}@media (min-width:1280px){.lg\\:focus\\:-rotate-90:focus{--transform-rotate:-90deg!important}}@media (min-width:1280px){.lg\\:focus\\:-rotate-45:focus{--transform-rotate:-45deg!important}}@media (min-width:1280px){.lg\\:focus\\:-rotate-12:focus{--transform-rotate:-12deg!important}}@media (min-width:1280px){.lg\\:focus\\:-rotate-6:focus{--transform-rotate:-6deg!important}}@media (min-width:1280px){.lg\\:focus\\:-rotate-3:focus{--transform-rotate:-3deg!important}}@media (min-width:1280px){.lg\\:focus\\:-rotate-2:focus{--transform-rotate:-2deg!important}}@media (min-width:1280px){.lg\\:focus\\:-rotate-1:focus{--transform-rotate:-1deg!important}}@media (min-width:1280px){.lg\\:translate-x-0{--transform-translate-x:0!important}}@media (min-width:1280px){.lg\\:translate-x-1{--transform-translate-x:0.25rem!important}}@media (min-width:1280px){.lg\\:translate-x-2{--transform-translate-x:0.5rem!important}}@media (min-width:1280px){.lg\\:translate-x-3{--transform-translate-x:0.75rem!important}}@media (min-width:1280px){.lg\\:translate-x-4{--transform-translate-x:1rem!important}}@media (min-width:1280px){.lg\\:translate-x-5{--transform-translate-x:1.25rem!important}}@media (min-width:1280px){.lg\\:translate-x-6{--transform-translate-x:1.5rem!important}}@media (min-width:1280px){.lg\\:translate-x-8{--transform-translate-x:2rem!important}}@media (min-width:1280px){.lg\\:translate-x-10{--transform-translate-x:2.5rem!important}}@media (min-width:1280px){.lg\\:translate-x-12{--transform-translate-x:3rem!important}}@media (min-width:1280px){.lg\\:translate-x-16{--transform-translate-x:4rem!important}}@media (min-width:1280px){.lg\\:translate-x-20{--transform-translate-x:5rem!important}}@media (min-width:1280px){.lg\\:translate-x-24{--transform-translate-x:6rem!important}}@media (min-width:1280px){.lg\\:translate-x-32{--transform-translate-x:8rem!important}}@media (min-width:1280px){.lg\\:translate-x-40{--transform-translate-x:10rem!important}}@media (min-width:1280px){.lg\\:translate-x-48{--transform-translate-x:12rem!important}}@media (min-width:1280px){.lg\\:translate-x-56{--transform-translate-x:14rem!important}}@media (min-width:1280px){.lg\\:translate-x-64{--transform-translate-x:16rem!important}}@media (min-width:1280px){.lg\\:translate-x-px{--transform-translate-x:1px!important}}@media (min-width:1280px){.lg\\:-translate-x-1{--transform-translate-x:-0.25rem!important}}@media (min-width:1280px){.lg\\:-translate-x-2{--transform-translate-x:-0.5rem!important}}@media (min-width:1280px){.lg\\:-translate-x-3{--transform-translate-x:-0.75rem!important}}@media (min-width:1280px){.lg\\:-translate-x-4{--transform-translate-x:-1rem!important}}@media (min-width:1280px){.lg\\:-translate-x-5{--transform-translate-x:-1.25rem!important}}@media (min-width:1280px){.lg\\:-translate-x-6{--transform-translate-x:-1.5rem!important}}@media (min-width:1280px){.lg\\:-translate-x-8{--transform-translate-x:-2rem!important}}@media (min-width:1280px){.lg\\:-translate-x-10{--transform-translate-x:-2.5rem!important}}@media (min-width:1280px){.lg\\:-translate-x-12{--transform-translate-x:-3rem!important}}@media (min-width:1280px){.lg\\:-translate-x-16{--transform-translate-x:-4rem!important}}@media (min-width:1280px){.lg\\:-translate-x-20{--transform-translate-x:-5rem!important}}@media (min-width:1280px){.lg\\:-translate-x-24{--transform-translate-x:-6rem!important}}@media (min-width:1280px){.lg\\:-translate-x-32{--transform-translate-x:-8rem!important}}@media (min-width:1280px){.lg\\:-translate-x-40{--transform-translate-x:-10rem!important}}@media (min-width:1280px){.lg\\:-translate-x-48{--transform-translate-x:-12rem!important}}@media (min-width:1280px){.lg\\:-translate-x-56{--transform-translate-x:-14rem!important}}@media (min-width:1280px){.lg\\:-translate-x-64{--transform-translate-x:-16rem!important}}@media (min-width:1280px){.lg\\:-translate-x-px{--transform-translate-x:-1px!important}}@media (min-width:1280px){.lg\\:-translate-x-full{--transform-translate-x:-100%!important}}@media (min-width:1280px){.lg\\:-translate-x-1\\/2{--transform-translate-x:-50%!important}}@media (min-width:1280px){.lg\\:translate-x-1\\/2{--transform-translate-x:50%!important}}@media (min-width:1280px){.lg\\:translate-x-full{--transform-translate-x:100%!important}}@media (min-width:1280px){.lg\\:translate-y-0{--transform-translate-y:0!important}}@media (min-width:1280px){.lg\\:translate-y-1{--transform-translate-y:0.25rem!important}}@media (min-width:1280px){.lg\\:translate-y-2{--transform-translate-y:0.5rem!important}}@media (min-width:1280px){.lg\\:translate-y-3{--transform-translate-y:0.75rem!important}}@media (min-width:1280px){.lg\\:translate-y-4{--transform-translate-y:1rem!important}}@media (min-width:1280px){.lg\\:translate-y-5{--transform-translate-y:1.25rem!important}}@media (min-width:1280px){.lg\\:translate-y-6{--transform-translate-y:1.5rem!important}}@media (min-width:1280px){.lg\\:translate-y-8{--transform-translate-y:2rem!important}}@media (min-width:1280px){.lg\\:translate-y-10{--transform-translate-y:2.5rem!important}}@media (min-width:1280px){.lg\\:translate-y-12{--transform-translate-y:3rem!important}}@media (min-width:1280px){.lg\\:translate-y-16{--transform-translate-y:4rem!important}}@media (min-width:1280px){.lg\\:translate-y-20{--transform-translate-y:5rem!important}}@media (min-width:1280px){.lg\\:translate-y-24{--transform-translate-y:6rem!important}}@media (min-width:1280px){.lg\\:translate-y-32{--transform-translate-y:8rem!important}}@media (min-width:1280px){.lg\\:translate-y-40{--transform-translate-y:10rem!important}}@media (min-width:1280px){.lg\\:translate-y-48{--transform-translate-y:12rem!important}}@media (min-width:1280px){.lg\\:translate-y-56{--transform-translate-y:14rem!important}}@media (min-width:1280px){.lg\\:translate-y-64{--transform-translate-y:16rem!important}}@media (min-width:1280px){.lg\\:translate-y-px{--transform-translate-y:1px!important}}@media (min-width:1280px){.lg\\:-translate-y-1{--transform-translate-y:-0.25rem!important}}@media (min-width:1280px){.lg\\:-translate-y-2{--transform-translate-y:-0.5rem!important}}@media (min-width:1280px){.lg\\:-translate-y-3{--transform-translate-y:-0.75rem!important}}@media (min-width:1280px){.lg\\:-translate-y-4{--transform-translate-y:-1rem!important}}@media (min-width:1280px){.lg\\:-translate-y-5{--transform-translate-y:-1.25rem!important}}@media (min-width:1280px){.lg\\:-translate-y-6{--transform-translate-y:-1.5rem!important}}@media (min-width:1280px){.lg\\:-translate-y-8{--transform-translate-y:-2rem!important}}@media (min-width:1280px){.lg\\:-translate-y-10{--transform-translate-y:-2.5rem!important}}@media (min-width:1280px){.lg\\:-translate-y-12{--transform-translate-y:-3rem!important}}@media (min-width:1280px){.lg\\:-translate-y-16{--transform-translate-y:-4rem!important}}@media (min-width:1280px){.lg\\:-translate-y-20{--transform-translate-y:-5rem!important}}@media (min-width:1280px){.lg\\:-translate-y-24{--transform-translate-y:-6rem!important}}@media (min-width:1280px){.lg\\:-translate-y-32{--transform-translate-y:-8rem!important}}@media (min-width:1280px){.lg\\:-translate-y-40{--transform-translate-y:-10rem!important}}@media (min-width:1280px){.lg\\:-translate-y-48{--transform-translate-y:-12rem!important}}@media (min-width:1280px){.lg\\:-translate-y-56{--transform-translate-y:-14rem!important}}@media (min-width:1280px){.lg\\:-translate-y-64{--transform-translate-y:-16rem!important}}@media (min-width:1280px){.lg\\:-translate-y-px{--transform-translate-y:-1px!important}}@media (min-width:1280px){.lg\\:-translate-y-full{--transform-translate-y:-100%!important}}@media (min-width:1280px){.lg\\:-translate-y-1\\/2{--transform-translate-y:-50%!important}}@media (min-width:1280px){.lg\\:translate-y-1\\/2{--transform-translate-y:50%!important}}@media (min-width:1280px){.lg\\:translate-y-full{--transform-translate-y:100%!important}}@media (min-width:1280px){.lg\\:hover\\:translate-x-0:hover{--transform-translate-x:0!important}}@media (min-width:1280px){.lg\\:hover\\:translate-x-1:hover{--transform-translate-x:0.25rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-x-2:hover{--transform-translate-x:0.5rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-x-3:hover{--transform-translate-x:0.75rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-x-4:hover{--transform-translate-x:1rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-x-5:hover{--transform-translate-x:1.25rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-x-6:hover{--transform-translate-x:1.5rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-x-8:hover{--transform-translate-x:2rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-x-10:hover{--transform-translate-x:2.5rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-x-12:hover{--transform-translate-x:3rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-x-16:hover{--transform-translate-x:4rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-x-20:hover{--transform-translate-x:5rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-x-24:hover{--transform-translate-x:6rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-x-32:hover{--transform-translate-x:8rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-x-40:hover{--transform-translate-x:10rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-x-48:hover{--transform-translate-x:12rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-x-56:hover{--transform-translate-x:14rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-x-64:hover{--transform-translate-x:16rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-x-px:hover{--transform-translate-x:1px!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-x-1:hover{--transform-translate-x:-0.25rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-x-2:hover{--transform-translate-x:-0.5rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-x-3:hover{--transform-translate-x:-0.75rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-x-4:hover{--transform-translate-x:-1rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-x-5:hover{--transform-translate-x:-1.25rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-x-6:hover{--transform-translate-x:-1.5rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-x-8:hover{--transform-translate-x:-2rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-x-10:hover{--transform-translate-x:-2.5rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-x-12:hover{--transform-translate-x:-3rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-x-16:hover{--transform-translate-x:-4rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-x-20:hover{--transform-translate-x:-5rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-x-24:hover{--transform-translate-x:-6rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-x-32:hover{--transform-translate-x:-8rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-x-40:hover{--transform-translate-x:-10rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-x-48:hover{--transform-translate-x:-12rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-x-56:hover{--transform-translate-x:-14rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-x-64:hover{--transform-translate-x:-16rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-x-px:hover{--transform-translate-x:-1px!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-x-full:hover{--transform-translate-x:-100%!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-x-1\\/2:hover{--transform-translate-x:-50%!important}}@media (min-width:1280px){.lg\\:hover\\:translate-x-1\\/2:hover{--transform-translate-x:50%!important}}@media (min-width:1280px){.lg\\:hover\\:translate-x-full:hover{--transform-translate-x:100%!important}}@media (min-width:1280px){.lg\\:hover\\:translate-y-0:hover{--transform-translate-y:0!important}}@media (min-width:1280px){.lg\\:hover\\:translate-y-1:hover{--transform-translate-y:0.25rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-y-2:hover{--transform-translate-y:0.5rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-y-3:hover{--transform-translate-y:0.75rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-y-4:hover{--transform-translate-y:1rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-y-5:hover{--transform-translate-y:1.25rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-y-6:hover{--transform-translate-y:1.5rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-y-8:hover{--transform-translate-y:2rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-y-10:hover{--transform-translate-y:2.5rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-y-12:hover{--transform-translate-y:3rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-y-16:hover{--transform-translate-y:4rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-y-20:hover{--transform-translate-y:5rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-y-24:hover{--transform-translate-y:6rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-y-32:hover{--transform-translate-y:8rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-y-40:hover{--transform-translate-y:10rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-y-48:hover{--transform-translate-y:12rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-y-56:hover{--transform-translate-y:14rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-y-64:hover{--transform-translate-y:16rem!important}}@media (min-width:1280px){.lg\\:hover\\:translate-y-px:hover{--transform-translate-y:1px!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-y-1:hover{--transform-translate-y:-0.25rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-y-2:hover{--transform-translate-y:-0.5rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-y-3:hover{--transform-translate-y:-0.75rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-y-4:hover{--transform-translate-y:-1rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-y-5:hover{--transform-translate-y:-1.25rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-y-6:hover{--transform-translate-y:-1.5rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-y-8:hover{--transform-translate-y:-2rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-y-10:hover{--transform-translate-y:-2.5rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-y-12:hover{--transform-translate-y:-3rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-y-16:hover{--transform-translate-y:-4rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-y-20:hover{--transform-translate-y:-5rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-y-24:hover{--transform-translate-y:-6rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-y-32:hover{--transform-translate-y:-8rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-y-40:hover{--transform-translate-y:-10rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-y-48:hover{--transform-translate-y:-12rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-y-56:hover{--transform-translate-y:-14rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-y-64:hover{--transform-translate-y:-16rem!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-y-px:hover{--transform-translate-y:-1px!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-y-full:hover{--transform-translate-y:-100%!important}}@media (min-width:1280px){.lg\\:hover\\:-translate-y-1\\/2:hover{--transform-translate-y:-50%!important}}@media (min-width:1280px){.lg\\:hover\\:translate-y-1\\/2:hover{--transform-translate-y:50%!important}}@media (min-width:1280px){.lg\\:hover\\:translate-y-full:hover{--transform-translate-y:100%!important}}@media (min-width:1280px){.lg\\:focus\\:translate-x-0:focus{--transform-translate-x:0!important}}@media (min-width:1280px){.lg\\:focus\\:translate-x-1:focus{--transform-translate-x:0.25rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-x-2:focus{--transform-translate-x:0.5rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-x-3:focus{--transform-translate-x:0.75rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-x-4:focus{--transform-translate-x:1rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-x-5:focus{--transform-translate-x:1.25rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-x-6:focus{--transform-translate-x:1.5rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-x-8:focus{--transform-translate-x:2rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-x-10:focus{--transform-translate-x:2.5rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-x-12:focus{--transform-translate-x:3rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-x-16:focus{--transform-translate-x:4rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-x-20:focus{--transform-translate-x:5rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-x-24:focus{--transform-translate-x:6rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-x-32:focus{--transform-translate-x:8rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-x-40:focus{--transform-translate-x:10rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-x-48:focus{--transform-translate-x:12rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-x-56:focus{--transform-translate-x:14rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-x-64:focus{--transform-translate-x:16rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-x-px:focus{--transform-translate-x:1px!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-x-1:focus{--transform-translate-x:-0.25rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-x-2:focus{--transform-translate-x:-0.5rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-x-3:focus{--transform-translate-x:-0.75rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-x-4:focus{--transform-translate-x:-1rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-x-5:focus{--transform-translate-x:-1.25rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-x-6:focus{--transform-translate-x:-1.5rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-x-8:focus{--transform-translate-x:-2rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-x-10:focus{--transform-translate-x:-2.5rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-x-12:focus{--transform-translate-x:-3rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-x-16:focus{--transform-translate-x:-4rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-x-20:focus{--transform-translate-x:-5rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-x-24:focus{--transform-translate-x:-6rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-x-32:focus{--transform-translate-x:-8rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-x-40:focus{--transform-translate-x:-10rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-x-48:focus{--transform-translate-x:-12rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-x-56:focus{--transform-translate-x:-14rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-x-64:focus{--transform-translate-x:-16rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-x-px:focus{--transform-translate-x:-1px!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-x-full:focus{--transform-translate-x:-100%!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-x-1\\/2:focus{--transform-translate-x:-50%!important}}@media (min-width:1280px){.lg\\:focus\\:translate-x-1\\/2:focus{--transform-translate-x:50%!important}}@media (min-width:1280px){.lg\\:focus\\:translate-x-full:focus{--transform-translate-x:100%!important}}@media (min-width:1280px){.lg\\:focus\\:translate-y-0:focus{--transform-translate-y:0!important}}@media (min-width:1280px){.lg\\:focus\\:translate-y-1:focus{--transform-translate-y:0.25rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-y-2:focus{--transform-translate-y:0.5rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-y-3:focus{--transform-translate-y:0.75rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-y-4:focus{--transform-translate-y:1rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-y-5:focus{--transform-translate-y:1.25rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-y-6:focus{--transform-translate-y:1.5rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-y-8:focus{--transform-translate-y:2rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-y-10:focus{--transform-translate-y:2.5rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-y-12:focus{--transform-translate-y:3rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-y-16:focus{--transform-translate-y:4rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-y-20:focus{--transform-translate-y:5rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-y-24:focus{--transform-translate-y:6rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-y-32:focus{--transform-translate-y:8rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-y-40:focus{--transform-translate-y:10rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-y-48:focus{--transform-translate-y:12rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-y-56:focus{--transform-translate-y:14rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-y-64:focus{--transform-translate-y:16rem!important}}@media (min-width:1280px){.lg\\:focus\\:translate-y-px:focus{--transform-translate-y:1px!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-y-1:focus{--transform-translate-y:-0.25rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-y-2:focus{--transform-translate-y:-0.5rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-y-3:focus{--transform-translate-y:-0.75rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-y-4:focus{--transform-translate-y:-1rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-y-5:focus{--transform-translate-y:-1.25rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-y-6:focus{--transform-translate-y:-1.5rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-y-8:focus{--transform-translate-y:-2rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-y-10:focus{--transform-translate-y:-2.5rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-y-12:focus{--transform-translate-y:-3rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-y-16:focus{--transform-translate-y:-4rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-y-20:focus{--transform-translate-y:-5rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-y-24:focus{--transform-translate-y:-6rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-y-32:focus{--transform-translate-y:-8rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-y-40:focus{--transform-translate-y:-10rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-y-48:focus{--transform-translate-y:-12rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-y-56:focus{--transform-translate-y:-14rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-y-64:focus{--transform-translate-y:-16rem!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-y-px:focus{--transform-translate-y:-1px!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-y-full:focus{--transform-translate-y:-100%!important}}@media (min-width:1280px){.lg\\:focus\\:-translate-y-1\\/2:focus{--transform-translate-y:-50%!important}}@media (min-width:1280px){.lg\\:focus\\:translate-y-1\\/2:focus{--transform-translate-y:50%!important}}@media (min-width:1280px){.lg\\:focus\\:translate-y-full:focus{--transform-translate-y:100%!important}}@media (min-width:1280px){.lg\\:skew-x-0{--transform-skew-x:0!important}}@media (min-width:1280px){.lg\\:skew-x-1{--transform-skew-x:1deg!important}}@media (min-width:1280px){.lg\\:skew-x-2{--transform-skew-x:2deg!important}}@media (min-width:1280px){.lg\\:skew-x-3{--transform-skew-x:3deg!important}}@media (min-width:1280px){.lg\\:skew-x-6{--transform-skew-x:6deg!important}}@media (min-width:1280px){.lg\\:skew-x-12{--transform-skew-x:12deg!important}}@media (min-width:1280px){.lg\\:-skew-x-12{--transform-skew-x:-12deg!important}}@media (min-width:1280px){.lg\\:-skew-x-6{--transform-skew-x:-6deg!important}}@media (min-width:1280px){.lg\\:-skew-x-3{--transform-skew-x:-3deg!important}}@media (min-width:1280px){.lg\\:-skew-x-2{--transform-skew-x:-2deg!important}}@media (min-width:1280px){.lg\\:-skew-x-1{--transform-skew-x:-1deg!important}}@media (min-width:1280px){.lg\\:skew-y-0{--transform-skew-y:0!important}}@media (min-width:1280px){.lg\\:skew-y-1{--transform-skew-y:1deg!important}}@media (min-width:1280px){.lg\\:skew-y-2{--transform-skew-y:2deg!important}}@media (min-width:1280px){.lg\\:skew-y-3{--transform-skew-y:3deg!important}}@media (min-width:1280px){.lg\\:skew-y-6{--transform-skew-y:6deg!important}}@media (min-width:1280px){.lg\\:skew-y-12{--transform-skew-y:12deg!important}}@media (min-width:1280px){.lg\\:-skew-y-12{--transform-skew-y:-12deg!important}}@media (min-width:1280px){.lg\\:-skew-y-6{--transform-skew-y:-6deg!important}}@media (min-width:1280px){.lg\\:-skew-y-3{--transform-skew-y:-3deg!important}}@media (min-width:1280px){.lg\\:-skew-y-2{--transform-skew-y:-2deg!important}}@media (min-width:1280px){.lg\\:-skew-y-1{--transform-skew-y:-1deg!important}}@media (min-width:1280px){.lg\\:hover\\:skew-x-0:hover{--transform-skew-x:0!important}}@media (min-width:1280px){.lg\\:hover\\:skew-x-1:hover{--transform-skew-x:1deg!important}}@media (min-width:1280px){.lg\\:hover\\:skew-x-2:hover{--transform-skew-x:2deg!important}}@media (min-width:1280px){.lg\\:hover\\:skew-x-3:hover{--transform-skew-x:3deg!important}}@media (min-width:1280px){.lg\\:hover\\:skew-x-6:hover{--transform-skew-x:6deg!important}}@media (min-width:1280px){.lg\\:hover\\:skew-x-12:hover{--transform-skew-x:12deg!important}}@media (min-width:1280px){.lg\\:hover\\:-skew-x-12:hover{--transform-skew-x:-12deg!important}}@media (min-width:1280px){.lg\\:hover\\:-skew-x-6:hover{--transform-skew-x:-6deg!important}}@media (min-width:1280px){.lg\\:hover\\:-skew-x-3:hover{--transform-skew-x:-3deg!important}}@media (min-width:1280px){.lg\\:hover\\:-skew-x-2:hover{--transform-skew-x:-2deg!important}}@media (min-width:1280px){.lg\\:hover\\:-skew-x-1:hover{--transform-skew-x:-1deg!important}}@media (min-width:1280px){.lg\\:hover\\:skew-y-0:hover{--transform-skew-y:0!important}}@media (min-width:1280px){.lg\\:hover\\:skew-y-1:hover{--transform-skew-y:1deg!important}}@media (min-width:1280px){.lg\\:hover\\:skew-y-2:hover{--transform-skew-y:2deg!important}}@media (min-width:1280px){.lg\\:hover\\:skew-y-3:hover{--transform-skew-y:3deg!important}}@media (min-width:1280px){.lg\\:hover\\:skew-y-6:hover{--transform-skew-y:6deg!important}}@media (min-width:1280px){.lg\\:hover\\:skew-y-12:hover{--transform-skew-y:12deg!important}}@media (min-width:1280px){.lg\\:hover\\:-skew-y-12:hover{--transform-skew-y:-12deg!important}}@media (min-width:1280px){.lg\\:hover\\:-skew-y-6:hover{--transform-skew-y:-6deg!important}}@media (min-width:1280px){.lg\\:hover\\:-skew-y-3:hover{--transform-skew-y:-3deg!important}}@media (min-width:1280px){.lg\\:hover\\:-skew-y-2:hover{--transform-skew-y:-2deg!important}}@media (min-width:1280px){.lg\\:hover\\:-skew-y-1:hover{--transform-skew-y:-1deg!important}}@media (min-width:1280px){.lg\\:focus\\:skew-x-0:focus{--transform-skew-x:0!important}}@media (min-width:1280px){.lg\\:focus\\:skew-x-1:focus{--transform-skew-x:1deg!important}}@media (min-width:1280px){.lg\\:focus\\:skew-x-2:focus{--transform-skew-x:2deg!important}}@media (min-width:1280px){.lg\\:focus\\:skew-x-3:focus{--transform-skew-x:3deg!important}}@media (min-width:1280px){.lg\\:focus\\:skew-x-6:focus{--transform-skew-x:6deg!important}}@media (min-width:1280px){.lg\\:focus\\:skew-x-12:focus{--transform-skew-x:12deg!important}}@media (min-width:1280px){.lg\\:focus\\:-skew-x-12:focus{--transform-skew-x:-12deg!important}}@media (min-width:1280px){.lg\\:focus\\:-skew-x-6:focus{--transform-skew-x:-6deg!important}}@media (min-width:1280px){.lg\\:focus\\:-skew-x-3:focus{--transform-skew-x:-3deg!important}}@media (min-width:1280px){.lg\\:focus\\:-skew-x-2:focus{--transform-skew-x:-2deg!important}}@media (min-width:1280px){.lg\\:focus\\:-skew-x-1:focus{--transform-skew-x:-1deg!important}}@media (min-width:1280px){.lg\\:focus\\:skew-y-0:focus{--transform-skew-y:0!important}}@media (min-width:1280px){.lg\\:focus\\:skew-y-1:focus{--transform-skew-y:1deg!important}}@media (min-width:1280px){.lg\\:focus\\:skew-y-2:focus{--transform-skew-y:2deg!important}}@media (min-width:1280px){.lg\\:focus\\:skew-y-3:focus{--transform-skew-y:3deg!important}}@media (min-width:1280px){.lg\\:focus\\:skew-y-6:focus{--transform-skew-y:6deg!important}}@media (min-width:1280px){.lg\\:focus\\:skew-y-12:focus{--transform-skew-y:12deg!important}}@media (min-width:1280px){.lg\\:focus\\:-skew-y-12:focus{--transform-skew-y:-12deg!important}}@media (min-width:1280px){.lg\\:focus\\:-skew-y-6:focus{--transform-skew-y:-6deg!important}}@media (min-width:1280px){.lg\\:focus\\:-skew-y-3:focus{--transform-skew-y:-3deg!important}}@media (min-width:1280px){.lg\\:focus\\:-skew-y-2:focus{--transform-skew-y:-2deg!important}}@media (min-width:1280px){.lg\\:focus\\:-skew-y-1:focus{--transform-skew-y:-1deg!important}}@media (min-width:1280px){.lg\\:transition-none{transition-property:none!important}}@media (min-width:1280px){.lg\\:transition-all{transition-property:all!important}}@media (min-width:1280px){.lg\\:transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform!important}}@media (min-width:1280px){.lg\\:transition-colors{transition-property:background-color,border-color,color,fill,stroke!important}}@media (min-width:1280px){.lg\\:transition-opacity{transition-property:opacity!important}}@media (min-width:1280px){.lg\\:transition-shadow{transition-property:box-shadow!important}}@media (min-width:1280px){.lg\\:transition-transform{transition-property:transform!important}}@media (min-width:1280px){.lg\\:ease-linear{transition-timing-function:linear!important}}@media (min-width:1280px){.lg\\:ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)!important}}@media (min-width:1280px){.lg\\:ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)!important}}@media (min-width:1280px){.lg\\:ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)!important}}@media (min-width:1280px){.lg\\:duration-75{transition-duration:75ms!important}}@media (min-width:1280px){.lg\\:duration-100{transition-duration:.1s!important}}@media (min-width:1280px){.lg\\:duration-150{transition-duration:.15s!important}}@media (min-width:1280px){.lg\\:duration-200{transition-duration:.2s!important}}@media (min-width:1280px){.lg\\:duration-300{transition-duration:.3s!important}}@media (min-width:1280px){.lg\\:duration-500{transition-duration:.5s!important}}@media (min-width:1280px){.lg\\:duration-700{transition-duration:.7s!important}}@media (min-width:1280px){.lg\\:duration-1000{transition-duration:1s!important}}@media (min-width:1280px){.lg\\:delay-75{transition-delay:75ms!important}}@media (min-width:1280px){.lg\\:delay-100{transition-delay:.1s!important}}@media (min-width:1280px){.lg\\:delay-150{transition-delay:.15s!important}}@media (min-width:1280px){.lg\\:delay-200{transition-delay:.2s!important}}@media (min-width:1280px){.lg\\:delay-300{transition-delay:.3s!important}}@media (min-width:1280px){.lg\\:delay-500{transition-delay:.5s!important}}@media (min-width:1280px){.lg\\:delay-700{transition-delay:.7s!important}}@media (min-width:1280px){.lg\\:delay-1000{transition-delay:1s!important}}@media (min-width:1280px){.lg\\:animate-none{animation:none!important}}@media (min-width:1280px){.lg\\:animate-spin{animation:spin 1s linear infinite!important}}@media (min-width:1280px){.lg\\:animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite!important}}@media (min-width:1280px){.lg\\:animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite!important}}@media (min-width:1280px){.lg\\:animate-bounce{animation:bounce 1s infinite!important}}@media (min-width:1280px){.lg\\:truncate-none{overflow:unset!important;text-overflow:unset!important;white-space:unset!important}}@media (min-width:1920px){.xl\\:container{width:100%;margin-right:auto;margin-left:auto}}@media (min-width:1920px) and (min-width:599px){.xl\\:container{max-width:599px}}@media (min-width:1920px) and (min-width:600px){.xl\\:container{max-width:600px}}@media (min-width:1920px) and (min-width:960px){.xl\\:container{max-width:960px}}@media (min-width:1920px) and (min-width:1280px){.xl\\:container{max-width:1280px}}@media (min-width:1920px) and (min-width:1920px){.xl\\:container{max-width:1920px}}@media (min-width:1920px){.xl\\:space-y-0>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(0px * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(0px * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:space-x-0>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(0px * var(--space-x-reverse))!important;margin-left:calc(0px * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:space-y-1>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(.25rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:space-x-1>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(.25rem * var(--space-x-reverse))!important;margin-left:calc(.25rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:space-y-2>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(.5rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:space-x-2>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(.5rem * var(--space-x-reverse))!important;margin-left:calc(.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:space-y-3>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(.75rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(.75rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:space-x-3>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(.75rem * var(--space-x-reverse))!important;margin-left:calc(.75rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:space-y-4>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:space-x-4>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1rem * var(--space-x-reverse))!important;margin-left:calc(1rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:space-y-5>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1.25rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:space-x-5>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1.25rem * var(--space-x-reverse))!important;margin-left:calc(1.25rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:space-y-6>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1.5rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:space-x-6>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1.5rem * var(--space-x-reverse))!important;margin-left:calc(1.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:space-y-8>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(2rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(2rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:space-x-8>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(2rem * var(--space-x-reverse))!important;margin-left:calc(2rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:space-y-10>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(2.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(2.5rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:space-x-10>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(2.5rem * var(--space-x-reverse))!important;margin-left:calc(2.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:space-y-12>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(3rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(3rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:space-x-12>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(3rem * var(--space-x-reverse))!important;margin-left:calc(3rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:space-y-16>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(4rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(4rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:space-x-16>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(4rem * var(--space-x-reverse))!important;margin-left:calc(4rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:space-y-20>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(5rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:space-x-20>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(5rem * var(--space-x-reverse))!important;margin-left:calc(5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:space-y-24>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(6rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(6rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:space-x-24>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(6rem * var(--space-x-reverse))!important;margin-left:calc(6rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:space-y-32>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(8rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(8rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:space-x-32>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(8rem * var(--space-x-reverse))!important;margin-left:calc(8rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:space-y-40>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(10rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(10rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:space-x-40>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(10rem * var(--space-x-reverse))!important;margin-left:calc(10rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:space-y-48>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(12rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(12rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:space-x-48>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(12rem * var(--space-x-reverse))!important;margin-left:calc(12rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:space-y-56>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(14rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(14rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:space-x-56>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(14rem * var(--space-x-reverse))!important;margin-left:calc(14rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:space-y-64>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(16rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(16rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:space-x-64>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(16rem * var(--space-x-reverse))!important;margin-left:calc(16rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:space-y-px>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(1px * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(1px * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:space-x-px>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(1px * var(--space-x-reverse))!important;margin-left:calc(1px * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:-space-y-1>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-.25rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:-space-x-1>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-.25rem * var(--space-x-reverse))!important;margin-left:calc(-.25rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:-space-y-2>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-.5rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:-space-x-2>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-.5rem * var(--space-x-reverse))!important;margin-left:calc(-.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:-space-y-3>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-.75rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-.75rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:-space-x-3>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-.75rem * var(--space-x-reverse))!important;margin-left:calc(-.75rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:-space-y-4>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:-space-x-4>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1rem * var(--space-x-reverse))!important;margin-left:calc(-1rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:-space-y-5>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1.25rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1.25rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:-space-x-5>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1.25rem * var(--space-x-reverse))!important;margin-left:calc(-1.25rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:-space-y-6>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1.5rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:-space-x-6>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1.5rem * var(--space-x-reverse))!important;margin-left:calc(-1.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:-space-y-8>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-2rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-2rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:-space-x-8>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-2rem * var(--space-x-reverse))!important;margin-left:calc(-2rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:-space-y-10>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-2.5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-2.5rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:-space-x-10>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-2.5rem * var(--space-x-reverse))!important;margin-left:calc(-2.5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:-space-y-12>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-3rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-3rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:-space-x-12>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-3rem * var(--space-x-reverse))!important;margin-left:calc(-3rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:-space-y-16>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-4rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-4rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:-space-x-16>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-4rem * var(--space-x-reverse))!important;margin-left:calc(-4rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:-space-y-20>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-5rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-5rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:-space-x-20>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-5rem * var(--space-x-reverse))!important;margin-left:calc(-5rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:-space-y-24>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-6rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-6rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:-space-x-24>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-6rem * var(--space-x-reverse))!important;margin-left:calc(-6rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:-space-y-32>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-8rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-8rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:-space-x-32>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-8rem * var(--space-x-reverse))!important;margin-left:calc(-8rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:-space-y-40>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-10rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-10rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:-space-x-40>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-10rem * var(--space-x-reverse))!important;margin-left:calc(-10rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:-space-y-48>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-12rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-12rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:-space-x-48>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-12rem * var(--space-x-reverse))!important;margin-left:calc(-12rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:-space-y-56>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-14rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-14rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:-space-x-56>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-14rem * var(--space-x-reverse))!important;margin-left:calc(-14rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:-space-y-64>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-16rem * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-16rem * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:-space-x-64>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-16rem * var(--space-x-reverse))!important;margin-left:calc(-16rem * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:-space-y-px>:not(template)~:not(template){--space-y-reverse:0!important;margin-top:calc(-1px * calc(1 - var(--space-y-reverse)))!important;margin-bottom:calc(-1px * var(--space-y-reverse))!important}}@media (min-width:1920px){.xl\\:-space-x-px>:not(template)~:not(template){--space-x-reverse:0!important;margin-right:calc(-1px * var(--space-x-reverse))!important;margin-left:calc(-1px * calc(1 - var(--space-x-reverse)))!important}}@media (min-width:1920px){.xl\\:space-y-reverse>:not(template)~:not(template){--space-y-reverse:1!important}}@media (min-width:1920px){.xl\\:space-x-reverse>:not(template)~:not(template){--space-x-reverse:1!important}}@media (min-width:1920px){.xl\\:divide-y-0>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(0px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(0px * var(--divide-y-reverse))!important}}@media (min-width:1920px){.xl\\:divide-x-0>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(0px * var(--divide-x-reverse))!important;border-left-width:calc(0px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:1920px){.xl\\:divide-y-2>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(2px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(2px * var(--divide-y-reverse))!important}}@media (min-width:1920px){.xl\\:divide-x-2>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(2px * var(--divide-x-reverse))!important;border-left-width:calc(2px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:1920px){.xl\\:divide-y-4>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(4px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(4px * var(--divide-y-reverse))!important}}@media (min-width:1920px){.xl\\:divide-x-4>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(4px * var(--divide-x-reverse))!important;border-left-width:calc(4px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:1920px){.xl\\:divide-y-8>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(8px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(8px * var(--divide-y-reverse))!important}}@media (min-width:1920px){.xl\\:divide-x-8>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(8px * var(--divide-x-reverse))!important;border-left-width:calc(8px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:1920px){.xl\\:divide-y>:not(template)~:not(template){--divide-y-reverse:0!important;border-top-width:calc(1px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(1px * var(--divide-y-reverse))!important}}@media (min-width:1920px){.xl\\:divide-x>:not(template)~:not(template){--divide-x-reverse:0!important;border-right-width:calc(1px * var(--divide-x-reverse))!important;border-left-width:calc(1px * calc(1 - var(--divide-x-reverse)))!important}}@media (min-width:1920px){.xl\\:divide-y-reverse>:not(template)~:not(template){--divide-y-reverse:1!important}}@media (min-width:1920px){.xl\\:divide-x-reverse>:not(template)~:not(template){--divide-x-reverse:1!important}}@media (min-width:1920px){.xl\\:divide-transparent>:not(template)~:not(template){border-color:transparent!important}}@media (min-width:1920px){.xl\\:divide-current>:not(template)~:not(template){border-color:currentColor!important}}@media (min-width:1920px){.xl\\:divide-black>:not(template)~:not(template){--divide-opacity:1!important;border-color:#000!important;border-color:rgba(0,0,0,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-white>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fff!important;border-color:rgba(255,255,255,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-gray-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f7fafc!important;border-color:rgba(247,250,252,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-gray-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#edf2f7!important;border-color:rgba(237,242,247,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-gray-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e2e8f0!important;border-color:rgba(226,232,240,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-gray-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#cbd5e0!important;border-color:rgba(203,213,224,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-gray-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#a0aec0!important;border-color:rgba(160,174,192,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-gray-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#718096!important;border-color:rgba(113,128,150,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-gray-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4a5568!important;border-color:rgba(74,85,104,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-gray-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2d3748!important;border-color:rgba(45,55,72,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-gray-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#1a202c!important;border-color:rgba(26,32,44,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-red-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fff5f5!important;border-color:rgba(255,245,245,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-red-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fed7d7!important;border-color:rgba(254,215,215,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-red-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#feb2b2!important;border-color:rgba(254,178,178,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-red-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fc8181!important;border-color:rgba(252,129,129,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-red-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f56565!important;border-color:rgba(245,101,101,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-red-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e53e3e!important;border-color:rgba(229,62,62,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-red-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c53030!important;border-color:rgba(197,48,48,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-red-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9b2c2c!important;border-color:rgba(155,44,44,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-red-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#742a2a!important;border-color:rgba(116,42,42,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-orange-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fffaf0!important;border-color:rgba(255,250,240,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-orange-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#feebc8!important;border-color:rgba(254,235,200,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-orange-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fbd38d!important;border-color:rgba(251,211,141,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-orange-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f6ad55!important;border-color:rgba(246,173,85,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-orange-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ed8936!important;border-color:rgba(237,137,54,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-orange-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#dd6b20!important;border-color:rgba(221,107,32,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-orange-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c05621!important;border-color:rgba(192,86,33,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-orange-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9c4221!important;border-color:rgba(156,66,33,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-orange-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#7b341e!important;border-color:rgba(123,52,30,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-yellow-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:ivory!important;border-color:rgba(255,255,240,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-yellow-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fefcbf!important;border-color:rgba(254,252,191,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-yellow-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#faf089!important;border-color:rgba(250,240,137,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-yellow-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f6e05e!important;border-color:rgba(246,224,94,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-yellow-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ecc94b!important;border-color:rgba(236,201,75,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-yellow-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#d69e2e!important;border-color:rgba(214,158,46,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-yellow-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b7791f!important;border-color:rgba(183,121,31,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-yellow-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#975a16!important;border-color:rgba(151,90,22,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-yellow-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#744210!important;border-color:rgba(116,66,16,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-green-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f0fff4!important;border-color:rgba(240,255,244,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-green-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c6f6d5!important;border-color:rgba(198,246,213,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-green-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9ae6b4!important;border-color:rgba(154,230,180,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-green-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#68d391!important;border-color:rgba(104,211,145,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-green-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#48bb78!important;border-color:rgba(72,187,120,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-green-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#38a169!important;border-color:rgba(56,161,105,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-green-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2f855a!important;border-color:rgba(47,133,90,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-green-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#276749!important;border-color:rgba(39,103,73,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-green-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#22543d!important;border-color:rgba(34,84,61,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-teal-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e6fffa!important;border-color:rgba(230,255,250,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-teal-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b2f5ea!important;border-color:rgba(178,245,234,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-teal-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#81e6d9!important;border-color:rgba(129,230,217,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-teal-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4fd1c5!important;border-color:rgba(79,209,197,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-teal-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#38b2ac!important;border-color:rgba(56,178,172,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-teal-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#319795!important;border-color:rgba(49,151,149,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-teal-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2c7a7b!important;border-color:rgba(44,122,123,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-teal-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#285e61!important;border-color:rgba(40,94,97,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-teal-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#234e52!important;border-color:rgba(35,78,82,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-blue-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ebf8ff!important;border-color:rgba(235,248,255,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-blue-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#bee3f8!important;border-color:rgba(190,227,248,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-blue-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#90cdf4!important;border-color:rgba(144,205,244,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-blue-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#63b3ed!important;border-color:rgba(99,179,237,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-blue-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4299e1!important;border-color:rgba(66,153,225,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-blue-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#3182ce!important;border-color:rgba(49,130,206,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-blue-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2b6cb0!important;border-color:rgba(43,108,176,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-blue-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2c5282!important;border-color:rgba(44,82,130,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-blue-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#2a4365!important;border-color:rgba(42,67,101,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-indigo-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ebf4ff!important;border-color:rgba(235,244,255,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-indigo-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#c3dafe!important;border-color:rgba(195,218,254,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-indigo-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#a3bffa!important;border-color:rgba(163,191,250,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-indigo-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#7f9cf5!important;border-color:rgba(127,156,245,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-indigo-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#667eea!important;border-color:rgba(102,126,234,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-indigo-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#5a67d8!important;border-color:rgba(90,103,216,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-indigo-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#4c51bf!important;border-color:rgba(76,81,191,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-indigo-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#434190!important;border-color:rgba(67,65,144,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-indigo-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#3c366b!important;border-color:rgba(60,54,107,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-purple-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#faf5ff!important;border-color:rgba(250,245,255,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-purple-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#e9d8fd!important;border-color:rgba(233,216,253,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-purple-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#d6bcfa!important;border-color:rgba(214,188,250,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-purple-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b794f4!important;border-color:rgba(183,148,244,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-purple-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#9f7aea!important;border-color:rgba(159,122,234,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-purple-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#805ad5!important;border-color:rgba(128,90,213,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-purple-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#6b46c1!important;border-color:rgba(107,70,193,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-purple-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#553c9a!important;border-color:rgba(85,60,154,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-purple-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#44337a!important;border-color:rgba(68,51,122,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-pink-100>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fff5f7!important;border-color:rgba(255,245,247,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-pink-200>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fed7e2!important;border-color:rgba(254,215,226,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-pink-300>:not(template)~:not(template){--divide-opacity:1!important;border-color:#fbb6ce!important;border-color:rgba(251,182,206,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-pink-400>:not(template)~:not(template){--divide-opacity:1!important;border-color:#f687b3!important;border-color:rgba(246,135,179,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-pink-500>:not(template)~:not(template){--divide-opacity:1!important;border-color:#ed64a6!important;border-color:rgba(237,100,166,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-pink-600>:not(template)~:not(template){--divide-opacity:1!important;border-color:#d53f8c!important;border-color:rgba(213,63,140,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-pink-700>:not(template)~:not(template){--divide-opacity:1!important;border-color:#b83280!important;border-color:rgba(184,50,128,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-pink-800>:not(template)~:not(template){--divide-opacity:1!important;border-color:#97266d!important;border-color:rgba(151,38,109,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-pink-900>:not(template)~:not(template){--divide-opacity:1!important;border-color:#702459!important;border-color:rgba(112,36,89,var(--divide-opacity))!important}}@media (min-width:1920px){.xl\\:divide-solid>:not(template)~:not(template){border-style:solid!important}}@media (min-width:1920px){.xl\\:divide-dashed>:not(template)~:not(template){border-style:dashed!important}}@media (min-width:1920px){.xl\\:divide-dotted>:not(template)~:not(template){border-style:dotted!important}}@media (min-width:1920px){.xl\\:divide-double>:not(template)~:not(template){border-style:double!important}}@media (min-width:1920px){.xl\\:divide-none>:not(template)~:not(template){border-style:none!important}}@media (min-width:1920px){.xl\\:divide-opacity-0>:not(template)~:not(template){--divide-opacity:0!important}}@media (min-width:1920px){.xl\\:divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25!important}}@media (min-width:1920px){.xl\\:divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5!important}}@media (min-width:1920px){.xl\\:divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75!important}}@media (min-width:1920px){.xl\\:divide-opacity-100>:not(template)~:not(template){--divide-opacity:1!important}}@media (min-width:1920px){.xl\\:sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}}@media (min-width:1920px){.xl\\:not-sr-only{position:static!important;width:auto!important;height:auto!important;padding:0!important;margin:0!important;overflow:visible!important;clip:auto!important;white-space:normal!important}}@media (min-width:1920px){.xl\\:focus\\:sr-only:focus{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}}@media (min-width:1920px){.xl\\:focus\\:not-sr-only:focus{position:static!important;width:auto!important;height:auto!important;padding:0!important;margin:0!important;overflow:visible!important;clip:auto!important;white-space:normal!important}}@media (min-width:1920px){.xl\\:appearance-none{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important}}@media (min-width:1920px){.xl\\:bg-fixed{background-attachment:fixed!important}}@media (min-width:1920px){.xl\\:bg-local{background-attachment:local!important}}@media (min-width:1920px){.xl\\:bg-scroll{background-attachment:scroll!important}}@media (min-width:1920px){.xl\\:bg-clip-border{background-clip:initial!important}}@media (min-width:1920px){.xl\\:bg-clip-padding{background-clip:padding-box!important}}@media (min-width:1920px){.xl\\:bg-clip-content{background-clip:content-box!important}}@media (min-width:1920px){.xl\\:bg-clip-text{-webkit-background-clip:text!important;background-clip:text!important}}@media (min-width:1920px){.xl\\:bg-transparent{background-color:initial!important}}@media (min-width:1920px){.xl\\:bg-current{background-color:currentColor!important}}@media (min-width:1920px){.xl\\:bg-black{--bg-opacity:1!important;background-color:#000!important;background-color:rgba(0,0,0,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-white{--bg-opacity:1!important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-gray-100{--bg-opacity:1!important;background-color:#f7fafc!important;background-color:rgba(247,250,252,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-gray-200{--bg-opacity:1!important;background-color:#edf2f7!important;background-color:rgba(237,242,247,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-gray-300{--bg-opacity:1!important;background-color:#e2e8f0!important;background-color:rgba(226,232,240,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-gray-400{--bg-opacity:1!important;background-color:#cbd5e0!important;background-color:rgba(203,213,224,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-gray-500{--bg-opacity:1!important;background-color:#a0aec0!important;background-color:rgba(160,174,192,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-gray-600{--bg-opacity:1!important;background-color:#718096!important;background-color:rgba(113,128,150,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-gray-700{--bg-opacity:1!important;background-color:#4a5568!important;background-color:rgba(74,85,104,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-gray-800{--bg-opacity:1!important;background-color:#2d3748!important;background-color:rgba(45,55,72,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-gray-900{--bg-opacity:1!important;background-color:#1a202c!important;background-color:rgba(26,32,44,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-red-100{--bg-opacity:1!important;background-color:#fff5f5!important;background-color:rgba(255,245,245,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-red-200{--bg-opacity:1!important;background-color:#fed7d7!important;background-color:rgba(254,215,215,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-red-300{--bg-opacity:1!important;background-color:#feb2b2!important;background-color:rgba(254,178,178,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-red-400{--bg-opacity:1!important;background-color:#fc8181!important;background-color:rgba(252,129,129,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-red-500{--bg-opacity:1!important;background-color:#f56565!important;background-color:rgba(245,101,101,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-red-600{--bg-opacity:1!important;background-color:#e53e3e!important;background-color:rgba(229,62,62,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-red-700{--bg-opacity:1!important;background-color:#c53030!important;background-color:rgba(197,48,48,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-red-800{--bg-opacity:1!important;background-color:#9b2c2c!important;background-color:rgba(155,44,44,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-red-900{--bg-opacity:1!important;background-color:#742a2a!important;background-color:rgba(116,42,42,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-orange-100{--bg-opacity:1!important;background-color:#fffaf0!important;background-color:rgba(255,250,240,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-orange-200{--bg-opacity:1!important;background-color:#feebc8!important;background-color:rgba(254,235,200,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-orange-300{--bg-opacity:1!important;background-color:#fbd38d!important;background-color:rgba(251,211,141,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-orange-400{--bg-opacity:1!important;background-color:#f6ad55!important;background-color:rgba(246,173,85,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-orange-500{--bg-opacity:1!important;background-color:#ed8936!important;background-color:rgba(237,137,54,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-orange-600{--bg-opacity:1!important;background-color:#dd6b20!important;background-color:rgba(221,107,32,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-orange-700{--bg-opacity:1!important;background-color:#c05621!important;background-color:rgba(192,86,33,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-orange-800{--bg-opacity:1!important;background-color:#9c4221!important;background-color:rgba(156,66,33,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-orange-900{--bg-opacity:1!important;background-color:#7b341e!important;background-color:rgba(123,52,30,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-yellow-100{--bg-opacity:1!important;background-color:ivory!important;background-color:rgba(255,255,240,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-yellow-200{--bg-opacity:1!important;background-color:#fefcbf!important;background-color:rgba(254,252,191,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-yellow-300{--bg-opacity:1!important;background-color:#faf089!important;background-color:rgba(250,240,137,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-yellow-400{--bg-opacity:1!important;background-color:#f6e05e!important;background-color:rgba(246,224,94,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-yellow-500{--bg-opacity:1!important;background-color:#ecc94b!important;background-color:rgba(236,201,75,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-yellow-600{--bg-opacity:1!important;background-color:#d69e2e!important;background-color:rgba(214,158,46,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-yellow-700{--bg-opacity:1!important;background-color:#b7791f!important;background-color:rgba(183,121,31,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-yellow-800{--bg-opacity:1!important;background-color:#975a16!important;background-color:rgba(151,90,22,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-yellow-900{--bg-opacity:1!important;background-color:#744210!important;background-color:rgba(116,66,16,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-green-100{--bg-opacity:1!important;background-color:#f0fff4!important;background-color:rgba(240,255,244,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-green-200{--bg-opacity:1!important;background-color:#c6f6d5!important;background-color:rgba(198,246,213,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-green-300{--bg-opacity:1!important;background-color:#9ae6b4!important;background-color:rgba(154,230,180,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-green-400{--bg-opacity:1!important;background-color:#68d391!important;background-color:rgba(104,211,145,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-green-500{--bg-opacity:1!important;background-color:#48bb78!important;background-color:rgba(72,187,120,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-green-600{--bg-opacity:1!important;background-color:#38a169!important;background-color:rgba(56,161,105,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-green-700{--bg-opacity:1!important;background-color:#2f855a!important;background-color:rgba(47,133,90,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-green-800{--bg-opacity:1!important;background-color:#276749!important;background-color:rgba(39,103,73,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-green-900{--bg-opacity:1!important;background-color:#22543d!important;background-color:rgba(34,84,61,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-teal-100{--bg-opacity:1!important;background-color:#e6fffa!important;background-color:rgba(230,255,250,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-teal-200{--bg-opacity:1!important;background-color:#b2f5ea!important;background-color:rgba(178,245,234,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-teal-300{--bg-opacity:1!important;background-color:#81e6d9!important;background-color:rgba(129,230,217,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-teal-400{--bg-opacity:1!important;background-color:#4fd1c5!important;background-color:rgba(79,209,197,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-teal-500{--bg-opacity:1!important;background-color:#38b2ac!important;background-color:rgba(56,178,172,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-teal-600{--bg-opacity:1!important;background-color:#319795!important;background-color:rgba(49,151,149,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-teal-700{--bg-opacity:1!important;background-color:#2c7a7b!important;background-color:rgba(44,122,123,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-teal-800{--bg-opacity:1!important;background-color:#285e61!important;background-color:rgba(40,94,97,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-teal-900{--bg-opacity:1!important;background-color:#234e52!important;background-color:rgba(35,78,82,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-blue-100{--bg-opacity:1!important;background-color:#ebf8ff!important;background-color:rgba(235,248,255,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-blue-200{--bg-opacity:1!important;background-color:#bee3f8!important;background-color:rgba(190,227,248,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-blue-300{--bg-opacity:1!important;background-color:#90cdf4!important;background-color:rgba(144,205,244,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-blue-400{--bg-opacity:1!important;background-color:#63b3ed!important;background-color:rgba(99,179,237,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-blue-500{--bg-opacity:1!important;background-color:#4299e1!important;background-color:rgba(66,153,225,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-blue-600{--bg-opacity:1!important;background-color:#3182ce!important;background-color:rgba(49,130,206,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-blue-700{--bg-opacity:1!important;background-color:#2b6cb0!important;background-color:rgba(43,108,176,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-blue-800{--bg-opacity:1!important;background-color:#2c5282!important;background-color:rgba(44,82,130,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-blue-900{--bg-opacity:1!important;background-color:#2a4365!important;background-color:rgba(42,67,101,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-indigo-100{--bg-opacity:1!important;background-color:#ebf4ff!important;background-color:rgba(235,244,255,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-indigo-200{--bg-opacity:1!important;background-color:#c3dafe!important;background-color:rgba(195,218,254,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-indigo-300{--bg-opacity:1!important;background-color:#a3bffa!important;background-color:rgba(163,191,250,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-indigo-400{--bg-opacity:1!important;background-color:#7f9cf5!important;background-color:rgba(127,156,245,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-indigo-500{--bg-opacity:1!important;background-color:#667eea!important;background-color:rgba(102,126,234,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-indigo-600{--bg-opacity:1!important;background-color:#5a67d8!important;background-color:rgba(90,103,216,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-indigo-700{--bg-opacity:1!important;background-color:#4c51bf!important;background-color:rgba(76,81,191,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-indigo-800{--bg-opacity:1!important;background-color:#434190!important;background-color:rgba(67,65,144,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-indigo-900{--bg-opacity:1!important;background-color:#3c366b!important;background-color:rgba(60,54,107,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-purple-100{--bg-opacity:1!important;background-color:#faf5ff!important;background-color:rgba(250,245,255,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-purple-200{--bg-opacity:1!important;background-color:#e9d8fd!important;background-color:rgba(233,216,253,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-purple-300{--bg-opacity:1!important;background-color:#d6bcfa!important;background-color:rgba(214,188,250,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-purple-400{--bg-opacity:1!important;background-color:#b794f4!important;background-color:rgba(183,148,244,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-purple-500{--bg-opacity:1!important;background-color:#9f7aea!important;background-color:rgba(159,122,234,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-purple-600{--bg-opacity:1!important;background-color:#805ad5!important;background-color:rgba(128,90,213,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-purple-700{--bg-opacity:1!important;background-color:#6b46c1!important;background-color:rgba(107,70,193,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-purple-800{--bg-opacity:1!important;background-color:#553c9a!important;background-color:rgba(85,60,154,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-purple-900{--bg-opacity:1!important;background-color:#44337a!important;background-color:rgba(68,51,122,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-pink-100{--bg-opacity:1!important;background-color:#fff5f7!important;background-color:rgba(255,245,247,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-pink-200{--bg-opacity:1!important;background-color:#fed7e2!important;background-color:rgba(254,215,226,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-pink-300{--bg-opacity:1!important;background-color:#fbb6ce!important;background-color:rgba(251,182,206,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-pink-400{--bg-opacity:1!important;background-color:#f687b3!important;background-color:rgba(246,135,179,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-pink-500{--bg-opacity:1!important;background-color:#ed64a6!important;background-color:rgba(237,100,166,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-pink-600{--bg-opacity:1!important;background-color:#d53f8c!important;background-color:rgba(213,63,140,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-pink-700{--bg-opacity:1!important;background-color:#b83280!important;background-color:rgba(184,50,128,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-pink-800{--bg-opacity:1!important;background-color:#97266d!important;background-color:rgba(151,38,109,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-pink-900{--bg-opacity:1!important;background-color:#702459!important;background-color:rgba(112,36,89,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-transparent:hover{background-color:initial!important}}@media (min-width:1920px){.xl\\:hover\\:bg-current:hover{background-color:currentColor!important}}@media (min-width:1920px){.xl\\:hover\\:bg-black:hover{--bg-opacity:1!important;background-color:#000!important;background-color:rgba(0,0,0,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-white:hover{--bg-opacity:1!important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-gray-100:hover{--bg-opacity:1!important;background-color:#f7fafc!important;background-color:rgba(247,250,252,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-gray-200:hover{--bg-opacity:1!important;background-color:#edf2f7!important;background-color:rgba(237,242,247,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-gray-300:hover{--bg-opacity:1!important;background-color:#e2e8f0!important;background-color:rgba(226,232,240,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-gray-400:hover{--bg-opacity:1!important;background-color:#cbd5e0!important;background-color:rgba(203,213,224,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-gray-500:hover{--bg-opacity:1!important;background-color:#a0aec0!important;background-color:rgba(160,174,192,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-gray-600:hover{--bg-opacity:1!important;background-color:#718096!important;background-color:rgba(113,128,150,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-gray-700:hover{--bg-opacity:1!important;background-color:#4a5568!important;background-color:rgba(74,85,104,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-gray-800:hover{--bg-opacity:1!important;background-color:#2d3748!important;background-color:rgba(45,55,72,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-gray-900:hover{--bg-opacity:1!important;background-color:#1a202c!important;background-color:rgba(26,32,44,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-red-100:hover{--bg-opacity:1!important;background-color:#fff5f5!important;background-color:rgba(255,245,245,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-red-200:hover{--bg-opacity:1!important;background-color:#fed7d7!important;background-color:rgba(254,215,215,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-red-300:hover{--bg-opacity:1!important;background-color:#feb2b2!important;background-color:rgba(254,178,178,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-red-400:hover{--bg-opacity:1!important;background-color:#fc8181!important;background-color:rgba(252,129,129,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-red-500:hover{--bg-opacity:1!important;background-color:#f56565!important;background-color:rgba(245,101,101,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-red-600:hover{--bg-opacity:1!important;background-color:#e53e3e!important;background-color:rgba(229,62,62,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-red-700:hover{--bg-opacity:1!important;background-color:#c53030!important;background-color:rgba(197,48,48,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-red-800:hover{--bg-opacity:1!important;background-color:#9b2c2c!important;background-color:rgba(155,44,44,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-red-900:hover{--bg-opacity:1!important;background-color:#742a2a!important;background-color:rgba(116,42,42,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-orange-100:hover{--bg-opacity:1!important;background-color:#fffaf0!important;background-color:rgba(255,250,240,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-orange-200:hover{--bg-opacity:1!important;background-color:#feebc8!important;background-color:rgba(254,235,200,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-orange-300:hover{--bg-opacity:1!important;background-color:#fbd38d!important;background-color:rgba(251,211,141,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-orange-400:hover{--bg-opacity:1!important;background-color:#f6ad55!important;background-color:rgba(246,173,85,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-orange-500:hover{--bg-opacity:1!important;background-color:#ed8936!important;background-color:rgba(237,137,54,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-orange-600:hover{--bg-opacity:1!important;background-color:#dd6b20!important;background-color:rgba(221,107,32,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-orange-700:hover{--bg-opacity:1!important;background-color:#c05621!important;background-color:rgba(192,86,33,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-orange-800:hover{--bg-opacity:1!important;background-color:#9c4221!important;background-color:rgba(156,66,33,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-orange-900:hover{--bg-opacity:1!important;background-color:#7b341e!important;background-color:rgba(123,52,30,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-yellow-100:hover{--bg-opacity:1!important;background-color:ivory!important;background-color:rgba(255,255,240,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-yellow-200:hover{--bg-opacity:1!important;background-color:#fefcbf!important;background-color:rgba(254,252,191,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-yellow-300:hover{--bg-opacity:1!important;background-color:#faf089!important;background-color:rgba(250,240,137,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-yellow-400:hover{--bg-opacity:1!important;background-color:#f6e05e!important;background-color:rgba(246,224,94,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-yellow-500:hover{--bg-opacity:1!important;background-color:#ecc94b!important;background-color:rgba(236,201,75,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-yellow-600:hover{--bg-opacity:1!important;background-color:#d69e2e!important;background-color:rgba(214,158,46,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-yellow-700:hover{--bg-opacity:1!important;background-color:#b7791f!important;background-color:rgba(183,121,31,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-yellow-800:hover{--bg-opacity:1!important;background-color:#975a16!important;background-color:rgba(151,90,22,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-yellow-900:hover{--bg-opacity:1!important;background-color:#744210!important;background-color:rgba(116,66,16,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-green-100:hover{--bg-opacity:1!important;background-color:#f0fff4!important;background-color:rgba(240,255,244,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-green-200:hover{--bg-opacity:1!important;background-color:#c6f6d5!important;background-color:rgba(198,246,213,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-green-300:hover{--bg-opacity:1!important;background-color:#9ae6b4!important;background-color:rgba(154,230,180,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-green-400:hover{--bg-opacity:1!important;background-color:#68d391!important;background-color:rgba(104,211,145,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-green-500:hover{--bg-opacity:1!important;background-color:#48bb78!important;background-color:rgba(72,187,120,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-green-600:hover{--bg-opacity:1!important;background-color:#38a169!important;background-color:rgba(56,161,105,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-green-700:hover{--bg-opacity:1!important;background-color:#2f855a!important;background-color:rgba(47,133,90,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-green-800:hover{--bg-opacity:1!important;background-color:#276749!important;background-color:rgba(39,103,73,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-green-900:hover{--bg-opacity:1!important;background-color:#22543d!important;background-color:rgba(34,84,61,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-teal-100:hover{--bg-opacity:1!important;background-color:#e6fffa!important;background-color:rgba(230,255,250,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-teal-200:hover{--bg-opacity:1!important;background-color:#b2f5ea!important;background-color:rgba(178,245,234,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-teal-300:hover{--bg-opacity:1!important;background-color:#81e6d9!important;background-color:rgba(129,230,217,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-teal-400:hover{--bg-opacity:1!important;background-color:#4fd1c5!important;background-color:rgba(79,209,197,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-teal-500:hover{--bg-opacity:1!important;background-color:#38b2ac!important;background-color:rgba(56,178,172,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-teal-600:hover{--bg-opacity:1!important;background-color:#319795!important;background-color:rgba(49,151,149,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-teal-700:hover{--bg-opacity:1!important;background-color:#2c7a7b!important;background-color:rgba(44,122,123,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-teal-800:hover{--bg-opacity:1!important;background-color:#285e61!important;background-color:rgba(40,94,97,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-teal-900:hover{--bg-opacity:1!important;background-color:#234e52!important;background-color:rgba(35,78,82,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-blue-100:hover{--bg-opacity:1!important;background-color:#ebf8ff!important;background-color:rgba(235,248,255,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-blue-200:hover{--bg-opacity:1!important;background-color:#bee3f8!important;background-color:rgba(190,227,248,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-blue-300:hover{--bg-opacity:1!important;background-color:#90cdf4!important;background-color:rgba(144,205,244,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-blue-400:hover{--bg-opacity:1!important;background-color:#63b3ed!important;background-color:rgba(99,179,237,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-blue-500:hover{--bg-opacity:1!important;background-color:#4299e1!important;background-color:rgba(66,153,225,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-blue-600:hover{--bg-opacity:1!important;background-color:#3182ce!important;background-color:rgba(49,130,206,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-blue-700:hover{--bg-opacity:1!important;background-color:#2b6cb0!important;background-color:rgba(43,108,176,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-blue-800:hover{--bg-opacity:1!important;background-color:#2c5282!important;background-color:rgba(44,82,130,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-blue-900:hover{--bg-opacity:1!important;background-color:#2a4365!important;background-color:rgba(42,67,101,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-indigo-100:hover{--bg-opacity:1!important;background-color:#ebf4ff!important;background-color:rgba(235,244,255,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-indigo-200:hover{--bg-opacity:1!important;background-color:#c3dafe!important;background-color:rgba(195,218,254,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-indigo-300:hover{--bg-opacity:1!important;background-color:#a3bffa!important;background-color:rgba(163,191,250,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-indigo-400:hover{--bg-opacity:1!important;background-color:#7f9cf5!important;background-color:rgba(127,156,245,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-indigo-500:hover{--bg-opacity:1!important;background-color:#667eea!important;background-color:rgba(102,126,234,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-indigo-600:hover{--bg-opacity:1!important;background-color:#5a67d8!important;background-color:rgba(90,103,216,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-indigo-700:hover{--bg-opacity:1!important;background-color:#4c51bf!important;background-color:rgba(76,81,191,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-indigo-800:hover{--bg-opacity:1!important;background-color:#434190!important;background-color:rgba(67,65,144,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-indigo-900:hover{--bg-opacity:1!important;background-color:#3c366b!important;background-color:rgba(60,54,107,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-purple-100:hover{--bg-opacity:1!important;background-color:#faf5ff!important;background-color:rgba(250,245,255,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-purple-200:hover{--bg-opacity:1!important;background-color:#e9d8fd!important;background-color:rgba(233,216,253,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-purple-300:hover{--bg-opacity:1!important;background-color:#d6bcfa!important;background-color:rgba(214,188,250,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-purple-400:hover{--bg-opacity:1!important;background-color:#b794f4!important;background-color:rgba(183,148,244,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-purple-500:hover{--bg-opacity:1!important;background-color:#9f7aea!important;background-color:rgba(159,122,234,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-purple-600:hover{--bg-opacity:1!important;background-color:#805ad5!important;background-color:rgba(128,90,213,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-purple-700:hover{--bg-opacity:1!important;background-color:#6b46c1!important;background-color:rgba(107,70,193,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-purple-800:hover{--bg-opacity:1!important;background-color:#553c9a!important;background-color:rgba(85,60,154,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-purple-900:hover{--bg-opacity:1!important;background-color:#44337a!important;background-color:rgba(68,51,122,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-pink-100:hover{--bg-opacity:1!important;background-color:#fff5f7!important;background-color:rgba(255,245,247,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-pink-200:hover{--bg-opacity:1!important;background-color:#fed7e2!important;background-color:rgba(254,215,226,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-pink-300:hover{--bg-opacity:1!important;background-color:#fbb6ce!important;background-color:rgba(251,182,206,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-pink-400:hover{--bg-opacity:1!important;background-color:#f687b3!important;background-color:rgba(246,135,179,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-pink-500:hover{--bg-opacity:1!important;background-color:#ed64a6!important;background-color:rgba(237,100,166,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-pink-600:hover{--bg-opacity:1!important;background-color:#d53f8c!important;background-color:rgba(213,63,140,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-pink-700:hover{--bg-opacity:1!important;background-color:#b83280!important;background-color:rgba(184,50,128,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-pink-800:hover{--bg-opacity:1!important;background-color:#97266d!important;background-color:rgba(151,38,109,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:bg-pink-900:hover{--bg-opacity:1!important;background-color:#702459!important;background-color:rgba(112,36,89,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-transparent:focus{background-color:initial!important}}@media (min-width:1920px){.xl\\:focus\\:bg-current:focus{background-color:currentColor!important}}@media (min-width:1920px){.xl\\:focus\\:bg-black:focus{--bg-opacity:1!important;background-color:#000!important;background-color:rgba(0,0,0,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-white:focus{--bg-opacity:1!important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-gray-100:focus{--bg-opacity:1!important;background-color:#f7fafc!important;background-color:rgba(247,250,252,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-gray-200:focus{--bg-opacity:1!important;background-color:#edf2f7!important;background-color:rgba(237,242,247,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-gray-300:focus{--bg-opacity:1!important;background-color:#e2e8f0!important;background-color:rgba(226,232,240,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-gray-400:focus{--bg-opacity:1!important;background-color:#cbd5e0!important;background-color:rgba(203,213,224,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-gray-500:focus{--bg-opacity:1!important;background-color:#a0aec0!important;background-color:rgba(160,174,192,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-gray-600:focus{--bg-opacity:1!important;background-color:#718096!important;background-color:rgba(113,128,150,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-gray-700:focus{--bg-opacity:1!important;background-color:#4a5568!important;background-color:rgba(74,85,104,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-gray-800:focus{--bg-opacity:1!important;background-color:#2d3748!important;background-color:rgba(45,55,72,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-gray-900:focus{--bg-opacity:1!important;background-color:#1a202c!important;background-color:rgba(26,32,44,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-red-100:focus{--bg-opacity:1!important;background-color:#fff5f5!important;background-color:rgba(255,245,245,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-red-200:focus{--bg-opacity:1!important;background-color:#fed7d7!important;background-color:rgba(254,215,215,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-red-300:focus{--bg-opacity:1!important;background-color:#feb2b2!important;background-color:rgba(254,178,178,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-red-400:focus{--bg-opacity:1!important;background-color:#fc8181!important;background-color:rgba(252,129,129,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-red-500:focus{--bg-opacity:1!important;background-color:#f56565!important;background-color:rgba(245,101,101,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-red-600:focus{--bg-opacity:1!important;background-color:#e53e3e!important;background-color:rgba(229,62,62,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-red-700:focus{--bg-opacity:1!important;background-color:#c53030!important;background-color:rgba(197,48,48,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-red-800:focus{--bg-opacity:1!important;background-color:#9b2c2c!important;background-color:rgba(155,44,44,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-red-900:focus{--bg-opacity:1!important;background-color:#742a2a!important;background-color:rgba(116,42,42,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-orange-100:focus{--bg-opacity:1!important;background-color:#fffaf0!important;background-color:rgba(255,250,240,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-orange-200:focus{--bg-opacity:1!important;background-color:#feebc8!important;background-color:rgba(254,235,200,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-orange-300:focus{--bg-opacity:1!important;background-color:#fbd38d!important;background-color:rgba(251,211,141,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-orange-400:focus{--bg-opacity:1!important;background-color:#f6ad55!important;background-color:rgba(246,173,85,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-orange-500:focus{--bg-opacity:1!important;background-color:#ed8936!important;background-color:rgba(237,137,54,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-orange-600:focus{--bg-opacity:1!important;background-color:#dd6b20!important;background-color:rgba(221,107,32,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-orange-700:focus{--bg-opacity:1!important;background-color:#c05621!important;background-color:rgba(192,86,33,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-orange-800:focus{--bg-opacity:1!important;background-color:#9c4221!important;background-color:rgba(156,66,33,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-orange-900:focus{--bg-opacity:1!important;background-color:#7b341e!important;background-color:rgba(123,52,30,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-yellow-100:focus{--bg-opacity:1!important;background-color:ivory!important;background-color:rgba(255,255,240,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-yellow-200:focus{--bg-opacity:1!important;background-color:#fefcbf!important;background-color:rgba(254,252,191,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-yellow-300:focus{--bg-opacity:1!important;background-color:#faf089!important;background-color:rgba(250,240,137,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-yellow-400:focus{--bg-opacity:1!important;background-color:#f6e05e!important;background-color:rgba(246,224,94,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-yellow-500:focus{--bg-opacity:1!important;background-color:#ecc94b!important;background-color:rgba(236,201,75,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-yellow-600:focus{--bg-opacity:1!important;background-color:#d69e2e!important;background-color:rgba(214,158,46,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-yellow-700:focus{--bg-opacity:1!important;background-color:#b7791f!important;background-color:rgba(183,121,31,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-yellow-800:focus{--bg-opacity:1!important;background-color:#975a16!important;background-color:rgba(151,90,22,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-yellow-900:focus{--bg-opacity:1!important;background-color:#744210!important;background-color:rgba(116,66,16,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-green-100:focus{--bg-opacity:1!important;background-color:#f0fff4!important;background-color:rgba(240,255,244,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-green-200:focus{--bg-opacity:1!important;background-color:#c6f6d5!important;background-color:rgba(198,246,213,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-green-300:focus{--bg-opacity:1!important;background-color:#9ae6b4!important;background-color:rgba(154,230,180,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-green-400:focus{--bg-opacity:1!important;background-color:#68d391!important;background-color:rgba(104,211,145,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-green-500:focus{--bg-opacity:1!important;background-color:#48bb78!important;background-color:rgba(72,187,120,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-green-600:focus{--bg-opacity:1!important;background-color:#38a169!important;background-color:rgba(56,161,105,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-green-700:focus{--bg-opacity:1!important;background-color:#2f855a!important;background-color:rgba(47,133,90,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-green-800:focus{--bg-opacity:1!important;background-color:#276749!important;background-color:rgba(39,103,73,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-green-900:focus{--bg-opacity:1!important;background-color:#22543d!important;background-color:rgba(34,84,61,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-teal-100:focus{--bg-opacity:1!important;background-color:#e6fffa!important;background-color:rgba(230,255,250,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-teal-200:focus{--bg-opacity:1!important;background-color:#b2f5ea!important;background-color:rgba(178,245,234,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-teal-300:focus{--bg-opacity:1!important;background-color:#81e6d9!important;background-color:rgba(129,230,217,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-teal-400:focus{--bg-opacity:1!important;background-color:#4fd1c5!important;background-color:rgba(79,209,197,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-teal-500:focus{--bg-opacity:1!important;background-color:#38b2ac!important;background-color:rgba(56,178,172,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-teal-600:focus{--bg-opacity:1!important;background-color:#319795!important;background-color:rgba(49,151,149,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-teal-700:focus{--bg-opacity:1!important;background-color:#2c7a7b!important;background-color:rgba(44,122,123,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-teal-800:focus{--bg-opacity:1!important;background-color:#285e61!important;background-color:rgba(40,94,97,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-teal-900:focus{--bg-opacity:1!important;background-color:#234e52!important;background-color:rgba(35,78,82,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-blue-100:focus{--bg-opacity:1!important;background-color:#ebf8ff!important;background-color:rgba(235,248,255,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-blue-200:focus{--bg-opacity:1!important;background-color:#bee3f8!important;background-color:rgba(190,227,248,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-blue-300:focus{--bg-opacity:1!important;background-color:#90cdf4!important;background-color:rgba(144,205,244,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-blue-400:focus{--bg-opacity:1!important;background-color:#63b3ed!important;background-color:rgba(99,179,237,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-blue-500:focus{--bg-opacity:1!important;background-color:#4299e1!important;background-color:rgba(66,153,225,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-blue-600:focus{--bg-opacity:1!important;background-color:#3182ce!important;background-color:rgba(49,130,206,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-blue-700:focus{--bg-opacity:1!important;background-color:#2b6cb0!important;background-color:rgba(43,108,176,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-blue-800:focus{--bg-opacity:1!important;background-color:#2c5282!important;background-color:rgba(44,82,130,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-blue-900:focus{--bg-opacity:1!important;background-color:#2a4365!important;background-color:rgba(42,67,101,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-indigo-100:focus{--bg-opacity:1!important;background-color:#ebf4ff!important;background-color:rgba(235,244,255,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-indigo-200:focus{--bg-opacity:1!important;background-color:#c3dafe!important;background-color:rgba(195,218,254,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-indigo-300:focus{--bg-opacity:1!important;background-color:#a3bffa!important;background-color:rgba(163,191,250,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-indigo-400:focus{--bg-opacity:1!important;background-color:#7f9cf5!important;background-color:rgba(127,156,245,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-indigo-500:focus{--bg-opacity:1!important;background-color:#667eea!important;background-color:rgba(102,126,234,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-indigo-600:focus{--bg-opacity:1!important;background-color:#5a67d8!important;background-color:rgba(90,103,216,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-indigo-700:focus{--bg-opacity:1!important;background-color:#4c51bf!important;background-color:rgba(76,81,191,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-indigo-800:focus{--bg-opacity:1!important;background-color:#434190!important;background-color:rgba(67,65,144,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-indigo-900:focus{--bg-opacity:1!important;background-color:#3c366b!important;background-color:rgba(60,54,107,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-purple-100:focus{--bg-opacity:1!important;background-color:#faf5ff!important;background-color:rgba(250,245,255,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-purple-200:focus{--bg-opacity:1!important;background-color:#e9d8fd!important;background-color:rgba(233,216,253,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-purple-300:focus{--bg-opacity:1!important;background-color:#d6bcfa!important;background-color:rgba(214,188,250,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-purple-400:focus{--bg-opacity:1!important;background-color:#b794f4!important;background-color:rgba(183,148,244,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-purple-500:focus{--bg-opacity:1!important;background-color:#9f7aea!important;background-color:rgba(159,122,234,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-purple-600:focus{--bg-opacity:1!important;background-color:#805ad5!important;background-color:rgba(128,90,213,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-purple-700:focus{--bg-opacity:1!important;background-color:#6b46c1!important;background-color:rgba(107,70,193,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-purple-800:focus{--bg-opacity:1!important;background-color:#553c9a!important;background-color:rgba(85,60,154,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-purple-900:focus{--bg-opacity:1!important;background-color:#44337a!important;background-color:rgba(68,51,122,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-pink-100:focus{--bg-opacity:1!important;background-color:#fff5f7!important;background-color:rgba(255,245,247,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-pink-200:focus{--bg-opacity:1!important;background-color:#fed7e2!important;background-color:rgba(254,215,226,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-pink-300:focus{--bg-opacity:1!important;background-color:#fbb6ce!important;background-color:rgba(251,182,206,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-pink-400:focus{--bg-opacity:1!important;background-color:#f687b3!important;background-color:rgba(246,135,179,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-pink-500:focus{--bg-opacity:1!important;background-color:#ed64a6!important;background-color:rgba(237,100,166,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-pink-600:focus{--bg-opacity:1!important;background-color:#d53f8c!important;background-color:rgba(213,63,140,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-pink-700:focus{--bg-opacity:1!important;background-color:#b83280!important;background-color:rgba(184,50,128,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-pink-800:focus{--bg-opacity:1!important;background-color:#97266d!important;background-color:rgba(151,38,109,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:bg-pink-900:focus{--bg-opacity:1!important;background-color:#702459!important;background-color:rgba(112,36,89,var(--bg-opacity))!important}}@media (min-width:1920px){.xl\\:bg-none{background-image:none!important}}@media (min-width:1920px){.xl\\:bg-gradient-to-t{background-image:linear-gradient(0deg,var(--gradient-color-stops))!important}}@media (min-width:1920px){.xl\\:bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--gradient-color-stops))!important}}@media (min-width:1920px){.xl\\:bg-gradient-to-r{background-image:linear-gradient(90deg,var(--gradient-color-stops))!important}}@media (min-width:1920px){.xl\\:bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--gradient-color-stops))!important}}@media (min-width:1920px){.xl\\:bg-gradient-to-b{background-image:linear-gradient(180deg,var(--gradient-color-stops))!important}}@media (min-width:1920px){.xl\\:bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--gradient-color-stops))!important}}@media (min-width:1920px){.xl\\:bg-gradient-to-l{background-image:linear-gradient(270deg,var(--gradient-color-stops))!important}}@media (min-width:1920px){.xl\\:bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--gradient-color-stops))!important}}@media (min-width:1920px){.xl\\:from-transparent{--gradient-from-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1920px){.xl\\:from-current{--gradient-from-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1920px){.xl\\:from-black{--gradient-from-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1920px){.xl\\:from-white{--gradient-from-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1920px){.xl\\:from-gray-100{--gradient-from-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:1920px){.xl\\:from-gray-200{--gradient-from-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:1920px){.xl\\:from-gray-300{--gradient-from-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:1920px){.xl\\:from-gray-400{--gradient-from-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:1920px){.xl\\:from-gray-500{--gradient-from-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:1920px){.xl\\:from-gray-600{--gradient-from-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:1920px){.xl\\:from-gray-700{--gradient-from-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:1920px){.xl\\:from-gray-800{--gradient-from-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:1920px){.xl\\:from-gray-900{--gradient-from-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:1920px){.xl\\:from-red-100{--gradient-from-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:1920px){.xl\\:from-red-200{--gradient-from-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:1920px){.xl\\:from-red-300{--gradient-from-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:1920px){.xl\\:from-red-400{--gradient-from-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:1920px){.xl\\:from-red-500{--gradient-from-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:1920px){.xl\\:from-red-600{--gradient-from-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:1920px){.xl\\:from-red-700{--gradient-from-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:1920px){.xl\\:from-red-800{--gradient-from-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:1920px){.xl\\:from-red-900{--gradient-from-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:1920px){.xl\\:from-orange-100{--gradient-from-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:1920px){.xl\\:from-orange-200{--gradient-from-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:1920px){.xl\\:from-orange-300{--gradient-from-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:1920px){.xl\\:from-orange-400{--gradient-from-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:1920px){.xl\\:from-orange-500{--gradient-from-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:1920px){.xl\\:from-orange-600{--gradient-from-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:1920px){.xl\\:from-orange-700{--gradient-from-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:1920px){.xl\\:from-orange-800{--gradient-from-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:1920px){.xl\\:from-orange-900{--gradient-from-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:1920px){.xl\\:from-yellow-100{--gradient-from-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:1920px){.xl\\:from-yellow-200{--gradient-from-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:1920px){.xl\\:from-yellow-300{--gradient-from-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:1920px){.xl\\:from-yellow-400{--gradient-from-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:1920px){.xl\\:from-yellow-500{--gradient-from-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:1920px){.xl\\:from-yellow-600{--gradient-from-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:1920px){.xl\\:from-yellow-700{--gradient-from-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:1920px){.xl\\:from-yellow-800{--gradient-from-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:1920px){.xl\\:from-yellow-900{--gradient-from-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:1920px){.xl\\:from-green-100{--gradient-from-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:1920px){.xl\\:from-green-200{--gradient-from-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:1920px){.xl\\:from-green-300{--gradient-from-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:1920px){.xl\\:from-green-400{--gradient-from-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:1920px){.xl\\:from-green-500{--gradient-from-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:1920px){.xl\\:from-green-600{--gradient-from-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:1920px){.xl\\:from-green-700{--gradient-from-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:1920px){.xl\\:from-green-800{--gradient-from-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:1920px){.xl\\:from-green-900{--gradient-from-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:1920px){.xl\\:from-teal-100{--gradient-from-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:1920px){.xl\\:from-teal-200{--gradient-from-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:1920px){.xl\\:from-teal-300{--gradient-from-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:1920px){.xl\\:from-teal-400{--gradient-from-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:1920px){.xl\\:from-teal-500{--gradient-from-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:1920px){.xl\\:from-teal-600{--gradient-from-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:1920px){.xl\\:from-teal-700{--gradient-from-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:1920px){.xl\\:from-teal-800{--gradient-from-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:1920px){.xl\\:from-teal-900{--gradient-from-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:1920px){.xl\\:from-blue-100{--gradient-from-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:1920px){.xl\\:from-blue-200{--gradient-from-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:1920px){.xl\\:from-blue-300{--gradient-from-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:1920px){.xl\\:from-blue-400{--gradient-from-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:1920px){.xl\\:from-blue-500{--gradient-from-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:1920px){.xl\\:from-blue-600{--gradient-from-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:1920px){.xl\\:from-blue-700{--gradient-from-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:1920px){.xl\\:from-blue-800{--gradient-from-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:1920px){.xl\\:from-blue-900{--gradient-from-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:1920px){.xl\\:from-indigo-100{--gradient-from-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:1920px){.xl\\:from-indigo-200{--gradient-from-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:1920px){.xl\\:from-indigo-300{--gradient-from-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:1920px){.xl\\:from-indigo-400{--gradient-from-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:1920px){.xl\\:from-indigo-500{--gradient-from-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:1920px){.xl\\:from-indigo-600{--gradient-from-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:1920px){.xl\\:from-indigo-700{--gradient-from-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:1920px){.xl\\:from-indigo-800{--gradient-from-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:1920px){.xl\\:from-indigo-900{--gradient-from-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:1920px){.xl\\:from-purple-100{--gradient-from-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:1920px){.xl\\:from-purple-200{--gradient-from-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:1920px){.xl\\:from-purple-300{--gradient-from-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:1920px){.xl\\:from-purple-400{--gradient-from-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:1920px){.xl\\:from-purple-500{--gradient-from-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:1920px){.xl\\:from-purple-600{--gradient-from-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:1920px){.xl\\:from-purple-700{--gradient-from-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:1920px){.xl\\:from-purple-800{--gradient-from-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:1920px){.xl\\:from-purple-900{--gradient-from-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:1920px){.xl\\:from-pink-100{--gradient-from-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:1920px){.xl\\:from-pink-200{--gradient-from-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:1920px){.xl\\:from-pink-300{--gradient-from-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:1920px){.xl\\:from-pink-400{--gradient-from-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:1920px){.xl\\:from-pink-500{--gradient-from-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:1920px){.xl\\:from-pink-600{--gradient-from-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:1920px){.xl\\:from-pink-700{--gradient-from-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:1920px){.xl\\:from-pink-800{--gradient-from-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:1920px){.xl\\:from-pink-900{--gradient-from-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:1920px){.xl\\:via-transparent{--gradient-via-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1920px){.xl\\:via-current{--gradient-via-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1920px){.xl\\:via-black{--gradient-via-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1920px){.xl\\:via-white{--gradient-via-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1920px){.xl\\:via-gray-100{--gradient-via-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:1920px){.xl\\:via-gray-200{--gradient-via-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:1920px){.xl\\:via-gray-300{--gradient-via-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:1920px){.xl\\:via-gray-400{--gradient-via-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:1920px){.xl\\:via-gray-500{--gradient-via-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:1920px){.xl\\:via-gray-600{--gradient-via-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:1920px){.xl\\:via-gray-700{--gradient-via-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:1920px){.xl\\:via-gray-800{--gradient-via-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:1920px){.xl\\:via-gray-900{--gradient-via-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:1920px){.xl\\:via-red-100{--gradient-via-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:1920px){.xl\\:via-red-200{--gradient-via-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:1920px){.xl\\:via-red-300{--gradient-via-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:1920px){.xl\\:via-red-400{--gradient-via-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:1920px){.xl\\:via-red-500{--gradient-via-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:1920px){.xl\\:via-red-600{--gradient-via-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:1920px){.xl\\:via-red-700{--gradient-via-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:1920px){.xl\\:via-red-800{--gradient-via-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:1920px){.xl\\:via-red-900{--gradient-via-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:1920px){.xl\\:via-orange-100{--gradient-via-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:1920px){.xl\\:via-orange-200{--gradient-via-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:1920px){.xl\\:via-orange-300{--gradient-via-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:1920px){.xl\\:via-orange-400{--gradient-via-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:1920px){.xl\\:via-orange-500{--gradient-via-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:1920px){.xl\\:via-orange-600{--gradient-via-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:1920px){.xl\\:via-orange-700{--gradient-via-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:1920px){.xl\\:via-orange-800{--gradient-via-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:1920px){.xl\\:via-orange-900{--gradient-via-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:1920px){.xl\\:via-yellow-100{--gradient-via-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:1920px){.xl\\:via-yellow-200{--gradient-via-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:1920px){.xl\\:via-yellow-300{--gradient-via-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:1920px){.xl\\:via-yellow-400{--gradient-via-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:1920px){.xl\\:via-yellow-500{--gradient-via-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:1920px){.xl\\:via-yellow-600{--gradient-via-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:1920px){.xl\\:via-yellow-700{--gradient-via-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:1920px){.xl\\:via-yellow-800{--gradient-via-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:1920px){.xl\\:via-yellow-900{--gradient-via-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:1920px){.xl\\:via-green-100{--gradient-via-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:1920px){.xl\\:via-green-200{--gradient-via-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:1920px){.xl\\:via-green-300{--gradient-via-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:1920px){.xl\\:via-green-400{--gradient-via-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:1920px){.xl\\:via-green-500{--gradient-via-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:1920px){.xl\\:via-green-600{--gradient-via-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:1920px){.xl\\:via-green-700{--gradient-via-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:1920px){.xl\\:via-green-800{--gradient-via-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:1920px){.xl\\:via-green-900{--gradient-via-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:1920px){.xl\\:via-teal-100{--gradient-via-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:1920px){.xl\\:via-teal-200{--gradient-via-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:1920px){.xl\\:via-teal-300{--gradient-via-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:1920px){.xl\\:via-teal-400{--gradient-via-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:1920px){.xl\\:via-teal-500{--gradient-via-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:1920px){.xl\\:via-teal-600{--gradient-via-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:1920px){.xl\\:via-teal-700{--gradient-via-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:1920px){.xl\\:via-teal-800{--gradient-via-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:1920px){.xl\\:via-teal-900{--gradient-via-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:1920px){.xl\\:via-blue-100{--gradient-via-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:1920px){.xl\\:via-blue-200{--gradient-via-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:1920px){.xl\\:via-blue-300{--gradient-via-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:1920px){.xl\\:via-blue-400{--gradient-via-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:1920px){.xl\\:via-blue-500{--gradient-via-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:1920px){.xl\\:via-blue-600{--gradient-via-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:1920px){.xl\\:via-blue-700{--gradient-via-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:1920px){.xl\\:via-blue-800{--gradient-via-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:1920px){.xl\\:via-blue-900{--gradient-via-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:1920px){.xl\\:via-indigo-100{--gradient-via-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:1920px){.xl\\:via-indigo-200{--gradient-via-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:1920px){.xl\\:via-indigo-300{--gradient-via-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:1920px){.xl\\:via-indigo-400{--gradient-via-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:1920px){.xl\\:via-indigo-500{--gradient-via-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:1920px){.xl\\:via-indigo-600{--gradient-via-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:1920px){.xl\\:via-indigo-700{--gradient-via-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:1920px){.xl\\:via-indigo-800{--gradient-via-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:1920px){.xl\\:via-indigo-900{--gradient-via-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:1920px){.xl\\:via-purple-100{--gradient-via-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:1920px){.xl\\:via-purple-200{--gradient-via-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:1920px){.xl\\:via-purple-300{--gradient-via-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:1920px){.xl\\:via-purple-400{--gradient-via-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:1920px){.xl\\:via-purple-500{--gradient-via-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:1920px){.xl\\:via-purple-600{--gradient-via-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:1920px){.xl\\:via-purple-700{--gradient-via-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:1920px){.xl\\:via-purple-800{--gradient-via-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:1920px){.xl\\:via-purple-900{--gradient-via-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:1920px){.xl\\:via-pink-100{--gradient-via-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:1920px){.xl\\:via-pink-200{--gradient-via-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:1920px){.xl\\:via-pink-300{--gradient-via-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:1920px){.xl\\:via-pink-400{--gradient-via-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:1920px){.xl\\:via-pink-500{--gradient-via-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:1920px){.xl\\:via-pink-600{--gradient-via-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:1920px){.xl\\:via-pink-700{--gradient-via-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:1920px){.xl\\:via-pink-800{--gradient-via-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:1920px){.xl\\:via-pink-900{--gradient-via-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:1920px){.xl\\:to-transparent{--gradient-to-color:transparent!important}}@media (min-width:1920px){.xl\\:to-current{--gradient-to-color:currentColor!important}}@media (min-width:1920px){.xl\\:to-black{--gradient-to-color:#000!important}}@media (min-width:1920px){.xl\\:to-white{--gradient-to-color:#fff!important}}@media (min-width:1920px){.xl\\:to-gray-100{--gradient-to-color:#f7fafc!important}}@media (min-width:1920px){.xl\\:to-gray-200{--gradient-to-color:#edf2f7!important}}@media (min-width:1920px){.xl\\:to-gray-300{--gradient-to-color:#e2e8f0!important}}@media (min-width:1920px){.xl\\:to-gray-400{--gradient-to-color:#cbd5e0!important}}@media (min-width:1920px){.xl\\:to-gray-500{--gradient-to-color:#a0aec0!important}}@media (min-width:1920px){.xl\\:to-gray-600{--gradient-to-color:#718096!important}}@media (min-width:1920px){.xl\\:to-gray-700{--gradient-to-color:#4a5568!important}}@media (min-width:1920px){.xl\\:to-gray-800{--gradient-to-color:#2d3748!important}}@media (min-width:1920px){.xl\\:to-gray-900{--gradient-to-color:#1a202c!important}}@media (min-width:1920px){.xl\\:to-red-100{--gradient-to-color:#fff5f5!important}}@media (min-width:1920px){.xl\\:to-red-200{--gradient-to-color:#fed7d7!important}}@media (min-width:1920px){.xl\\:to-red-300{--gradient-to-color:#feb2b2!important}}@media (min-width:1920px){.xl\\:to-red-400{--gradient-to-color:#fc8181!important}}@media (min-width:1920px){.xl\\:to-red-500{--gradient-to-color:#f56565!important}}@media (min-width:1920px){.xl\\:to-red-600{--gradient-to-color:#e53e3e!important}}@media (min-width:1920px){.xl\\:to-red-700{--gradient-to-color:#c53030!important}}@media (min-width:1920px){.xl\\:to-red-800{--gradient-to-color:#9b2c2c!important}}@media (min-width:1920px){.xl\\:to-red-900{--gradient-to-color:#742a2a!important}}@media (min-width:1920px){.xl\\:to-orange-100{--gradient-to-color:#fffaf0!important}}@media (min-width:1920px){.xl\\:to-orange-200{--gradient-to-color:#feebc8!important}}@media (min-width:1920px){.xl\\:to-orange-300{--gradient-to-color:#fbd38d!important}}@media (min-width:1920px){.xl\\:to-orange-400{--gradient-to-color:#f6ad55!important}}@media (min-width:1920px){.xl\\:to-orange-500{--gradient-to-color:#ed8936!important}}@media (min-width:1920px){.xl\\:to-orange-600{--gradient-to-color:#dd6b20!important}}@media (min-width:1920px){.xl\\:to-orange-700{--gradient-to-color:#c05621!important}}@media (min-width:1920px){.xl\\:to-orange-800{--gradient-to-color:#9c4221!important}}@media (min-width:1920px){.xl\\:to-orange-900{--gradient-to-color:#7b341e!important}}@media (min-width:1920px){.xl\\:to-yellow-100{--gradient-to-color:ivory!important}}@media (min-width:1920px){.xl\\:to-yellow-200{--gradient-to-color:#fefcbf!important}}@media (min-width:1920px){.xl\\:to-yellow-300{--gradient-to-color:#faf089!important}}@media (min-width:1920px){.xl\\:to-yellow-400{--gradient-to-color:#f6e05e!important}}@media (min-width:1920px){.xl\\:to-yellow-500{--gradient-to-color:#ecc94b!important}}@media (min-width:1920px){.xl\\:to-yellow-600{--gradient-to-color:#d69e2e!important}}@media (min-width:1920px){.xl\\:to-yellow-700{--gradient-to-color:#b7791f!important}}@media (min-width:1920px){.xl\\:to-yellow-800{--gradient-to-color:#975a16!important}}@media (min-width:1920px){.xl\\:to-yellow-900{--gradient-to-color:#744210!important}}@media (min-width:1920px){.xl\\:to-green-100{--gradient-to-color:#f0fff4!important}}@media (min-width:1920px){.xl\\:to-green-200{--gradient-to-color:#c6f6d5!important}}@media (min-width:1920px){.xl\\:to-green-300{--gradient-to-color:#9ae6b4!important}}@media (min-width:1920px){.xl\\:to-green-400{--gradient-to-color:#68d391!important}}@media (min-width:1920px){.xl\\:to-green-500{--gradient-to-color:#48bb78!important}}@media (min-width:1920px){.xl\\:to-green-600{--gradient-to-color:#38a169!important}}@media (min-width:1920px){.xl\\:to-green-700{--gradient-to-color:#2f855a!important}}@media (min-width:1920px){.xl\\:to-green-800{--gradient-to-color:#276749!important}}@media (min-width:1920px){.xl\\:to-green-900{--gradient-to-color:#22543d!important}}@media (min-width:1920px){.xl\\:to-teal-100{--gradient-to-color:#e6fffa!important}}@media (min-width:1920px){.xl\\:to-teal-200{--gradient-to-color:#b2f5ea!important}}@media (min-width:1920px){.xl\\:to-teal-300{--gradient-to-color:#81e6d9!important}}@media (min-width:1920px){.xl\\:to-teal-400{--gradient-to-color:#4fd1c5!important}}@media (min-width:1920px){.xl\\:to-teal-500{--gradient-to-color:#38b2ac!important}}@media (min-width:1920px){.xl\\:to-teal-600{--gradient-to-color:#319795!important}}@media (min-width:1920px){.xl\\:to-teal-700{--gradient-to-color:#2c7a7b!important}}@media (min-width:1920px){.xl\\:to-teal-800{--gradient-to-color:#285e61!important}}@media (min-width:1920px){.xl\\:to-teal-900{--gradient-to-color:#234e52!important}}@media (min-width:1920px){.xl\\:to-blue-100{--gradient-to-color:#ebf8ff!important}}@media (min-width:1920px){.xl\\:to-blue-200{--gradient-to-color:#bee3f8!important}}@media (min-width:1920px){.xl\\:to-blue-300{--gradient-to-color:#90cdf4!important}}@media (min-width:1920px){.xl\\:to-blue-400{--gradient-to-color:#63b3ed!important}}@media (min-width:1920px){.xl\\:to-blue-500{--gradient-to-color:#4299e1!important}}@media (min-width:1920px){.xl\\:to-blue-600{--gradient-to-color:#3182ce!important}}@media (min-width:1920px){.xl\\:to-blue-700{--gradient-to-color:#2b6cb0!important}}@media (min-width:1920px){.xl\\:to-blue-800{--gradient-to-color:#2c5282!important}}@media (min-width:1920px){.xl\\:to-blue-900{--gradient-to-color:#2a4365!important}}@media (min-width:1920px){.xl\\:to-indigo-100{--gradient-to-color:#ebf4ff!important}}@media (min-width:1920px){.xl\\:to-indigo-200{--gradient-to-color:#c3dafe!important}}@media (min-width:1920px){.xl\\:to-indigo-300{--gradient-to-color:#a3bffa!important}}@media (min-width:1920px){.xl\\:to-indigo-400{--gradient-to-color:#7f9cf5!important}}@media (min-width:1920px){.xl\\:to-indigo-500{--gradient-to-color:#667eea!important}}@media (min-width:1920px){.xl\\:to-indigo-600{--gradient-to-color:#5a67d8!important}}@media (min-width:1920px){.xl\\:to-indigo-700{--gradient-to-color:#4c51bf!important}}@media (min-width:1920px){.xl\\:to-indigo-800{--gradient-to-color:#434190!important}}@media (min-width:1920px){.xl\\:to-indigo-900{--gradient-to-color:#3c366b!important}}@media (min-width:1920px){.xl\\:to-purple-100{--gradient-to-color:#faf5ff!important}}@media (min-width:1920px){.xl\\:to-purple-200{--gradient-to-color:#e9d8fd!important}}@media (min-width:1920px){.xl\\:to-purple-300{--gradient-to-color:#d6bcfa!important}}@media (min-width:1920px){.xl\\:to-purple-400{--gradient-to-color:#b794f4!important}}@media (min-width:1920px){.xl\\:to-purple-500{--gradient-to-color:#9f7aea!important}}@media (min-width:1920px){.xl\\:to-purple-600{--gradient-to-color:#805ad5!important}}@media (min-width:1920px){.xl\\:to-purple-700{--gradient-to-color:#6b46c1!important}}@media (min-width:1920px){.xl\\:to-purple-800{--gradient-to-color:#553c9a!important}}@media (min-width:1920px){.xl\\:to-purple-900{--gradient-to-color:#44337a!important}}@media (min-width:1920px){.xl\\:to-pink-100{--gradient-to-color:#fff5f7!important}}@media (min-width:1920px){.xl\\:to-pink-200{--gradient-to-color:#fed7e2!important}}@media (min-width:1920px){.xl\\:to-pink-300{--gradient-to-color:#fbb6ce!important}}@media (min-width:1920px){.xl\\:to-pink-400{--gradient-to-color:#f687b3!important}}@media (min-width:1920px){.xl\\:to-pink-500{--gradient-to-color:#ed64a6!important}}@media (min-width:1920px){.xl\\:to-pink-600{--gradient-to-color:#d53f8c!important}}@media (min-width:1920px){.xl\\:to-pink-700{--gradient-to-color:#b83280!important}}@media (min-width:1920px){.xl\\:to-pink-800{--gradient-to-color:#97266d!important}}@media (min-width:1920px){.xl\\:to-pink-900{--gradient-to-color:#702459!important}}@media (min-width:1920px){.xl\\:hover\\:from-transparent:hover{--gradient-from-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1920px){.xl\\:hover\\:from-current:hover{--gradient-from-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-black:hover{--gradient-from-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1920px){.xl\\:hover\\:from-white:hover{--gradient-from-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-gray-100:hover{--gradient-from-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-gray-200:hover{--gradient-from-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-gray-300:hover{--gradient-from-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-gray-400:hover{--gradient-from-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-gray-500:hover{--gradient-from-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-gray-600:hover{--gradient-from-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-gray-700:hover{--gradient-from-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-gray-800:hover{--gradient-from-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-gray-900:hover{--gradient-from-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-red-100:hover{--gradient-from-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-red-200:hover{--gradient-from-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-red-300:hover{--gradient-from-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-red-400:hover{--gradient-from-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-red-500:hover{--gradient-from-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-red-600:hover{--gradient-from-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-red-700:hover{--gradient-from-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-red-800:hover{--gradient-from-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-red-900:hover{--gradient-from-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-orange-100:hover{--gradient-from-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-orange-200:hover{--gradient-from-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-orange-300:hover{--gradient-from-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-orange-400:hover{--gradient-from-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-orange-500:hover{--gradient-from-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-orange-600:hover{--gradient-from-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-orange-700:hover{--gradient-from-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-orange-800:hover{--gradient-from-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-orange-900:hover{--gradient-from-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-yellow-100:hover{--gradient-from-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-yellow-200:hover{--gradient-from-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-yellow-300:hover{--gradient-from-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-yellow-400:hover{--gradient-from-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-yellow-500:hover{--gradient-from-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-yellow-600:hover{--gradient-from-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-yellow-700:hover{--gradient-from-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-yellow-800:hover{--gradient-from-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-yellow-900:hover{--gradient-from-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-green-100:hover{--gradient-from-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-green-200:hover{--gradient-from-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-green-300:hover{--gradient-from-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-green-400:hover{--gradient-from-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-green-500:hover{--gradient-from-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-green-600:hover{--gradient-from-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-green-700:hover{--gradient-from-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-green-800:hover{--gradient-from-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-green-900:hover{--gradient-from-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-teal-100:hover{--gradient-from-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-teal-200:hover{--gradient-from-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-teal-300:hover{--gradient-from-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-teal-400:hover{--gradient-from-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-teal-500:hover{--gradient-from-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-teal-600:hover{--gradient-from-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-teal-700:hover{--gradient-from-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-teal-800:hover{--gradient-from-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-teal-900:hover{--gradient-from-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-blue-100:hover{--gradient-from-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-blue-200:hover{--gradient-from-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-blue-300:hover{--gradient-from-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-blue-400:hover{--gradient-from-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-blue-500:hover{--gradient-from-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-blue-600:hover{--gradient-from-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-blue-700:hover{--gradient-from-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-blue-800:hover{--gradient-from-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-blue-900:hover{--gradient-from-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-indigo-100:hover{--gradient-from-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-indigo-200:hover{--gradient-from-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-indigo-300:hover{--gradient-from-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-indigo-400:hover{--gradient-from-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-indigo-500:hover{--gradient-from-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-indigo-600:hover{--gradient-from-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-indigo-700:hover{--gradient-from-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-indigo-800:hover{--gradient-from-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-indigo-900:hover{--gradient-from-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-purple-100:hover{--gradient-from-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-purple-200:hover{--gradient-from-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-purple-300:hover{--gradient-from-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-purple-400:hover{--gradient-from-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-purple-500:hover{--gradient-from-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-purple-600:hover{--gradient-from-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-purple-700:hover{--gradient-from-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-purple-800:hover{--gradient-from-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-purple-900:hover{--gradient-from-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-pink-100:hover{--gradient-from-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-pink-200:hover{--gradient-from-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-pink-300:hover{--gradient-from-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-pink-400:hover{--gradient-from-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-pink-500:hover{--gradient-from-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-pink-600:hover{--gradient-from-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-pink-700:hover{--gradient-from-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-pink-800:hover{--gradient-from-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:1920px){.xl\\:hover\\:from-pink-900:hover{--gradient-from-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-transparent:hover{--gradient-via-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1920px){.xl\\:hover\\:via-current:hover{--gradient-via-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-black:hover{--gradient-via-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1920px){.xl\\:hover\\:via-white:hover{--gradient-via-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-gray-100:hover{--gradient-via-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-gray-200:hover{--gradient-via-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-gray-300:hover{--gradient-via-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-gray-400:hover{--gradient-via-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-gray-500:hover{--gradient-via-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-gray-600:hover{--gradient-via-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-gray-700:hover{--gradient-via-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-gray-800:hover{--gradient-via-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-gray-900:hover{--gradient-via-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-red-100:hover{--gradient-via-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-red-200:hover{--gradient-via-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-red-300:hover{--gradient-via-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-red-400:hover{--gradient-via-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-red-500:hover{--gradient-via-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-red-600:hover{--gradient-via-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-red-700:hover{--gradient-via-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-red-800:hover{--gradient-via-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-red-900:hover{--gradient-via-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-orange-100:hover{--gradient-via-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-orange-200:hover{--gradient-via-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-orange-300:hover{--gradient-via-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-orange-400:hover{--gradient-via-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-orange-500:hover{--gradient-via-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-orange-600:hover{--gradient-via-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-orange-700:hover{--gradient-via-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-orange-800:hover{--gradient-via-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-orange-900:hover{--gradient-via-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-yellow-100:hover{--gradient-via-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-yellow-200:hover{--gradient-via-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-yellow-300:hover{--gradient-via-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-yellow-400:hover{--gradient-via-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-yellow-500:hover{--gradient-via-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-yellow-600:hover{--gradient-via-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-yellow-700:hover{--gradient-via-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-yellow-800:hover{--gradient-via-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-yellow-900:hover{--gradient-via-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-green-100:hover{--gradient-via-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-green-200:hover{--gradient-via-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-green-300:hover{--gradient-via-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-green-400:hover{--gradient-via-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-green-500:hover{--gradient-via-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-green-600:hover{--gradient-via-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-green-700:hover{--gradient-via-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-green-800:hover{--gradient-via-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-green-900:hover{--gradient-via-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-teal-100:hover{--gradient-via-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-teal-200:hover{--gradient-via-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-teal-300:hover{--gradient-via-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-teal-400:hover{--gradient-via-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-teal-500:hover{--gradient-via-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-teal-600:hover{--gradient-via-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-teal-700:hover{--gradient-via-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-teal-800:hover{--gradient-via-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-teal-900:hover{--gradient-via-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-blue-100:hover{--gradient-via-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-blue-200:hover{--gradient-via-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-blue-300:hover{--gradient-via-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-blue-400:hover{--gradient-via-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-blue-500:hover{--gradient-via-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-blue-600:hover{--gradient-via-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-blue-700:hover{--gradient-via-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-blue-800:hover{--gradient-via-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-blue-900:hover{--gradient-via-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-indigo-100:hover{--gradient-via-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-indigo-200:hover{--gradient-via-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-indigo-300:hover{--gradient-via-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-indigo-400:hover{--gradient-via-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-indigo-500:hover{--gradient-via-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-indigo-600:hover{--gradient-via-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-indigo-700:hover{--gradient-via-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-indigo-800:hover{--gradient-via-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-indigo-900:hover{--gradient-via-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-purple-100:hover{--gradient-via-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-purple-200:hover{--gradient-via-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-purple-300:hover{--gradient-via-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-purple-400:hover{--gradient-via-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-purple-500:hover{--gradient-via-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-purple-600:hover{--gradient-via-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-purple-700:hover{--gradient-via-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-purple-800:hover{--gradient-via-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-purple-900:hover{--gradient-via-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-pink-100:hover{--gradient-via-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-pink-200:hover{--gradient-via-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-pink-300:hover{--gradient-via-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-pink-400:hover{--gradient-via-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-pink-500:hover{--gradient-via-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-pink-600:hover{--gradient-via-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-pink-700:hover{--gradient-via-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-pink-800:hover{--gradient-via-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:1920px){.xl\\:hover\\:via-pink-900:hover{--gradient-via-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:1920px){.xl\\:hover\\:to-transparent:hover{--gradient-to-color:transparent!important}}@media (min-width:1920px){.xl\\:hover\\:to-current:hover{--gradient-to-color:currentColor!important}}@media (min-width:1920px){.xl\\:hover\\:to-black:hover{--gradient-to-color:#000!important}}@media (min-width:1920px){.xl\\:hover\\:to-white:hover{--gradient-to-color:#fff!important}}@media (min-width:1920px){.xl\\:hover\\:to-gray-100:hover{--gradient-to-color:#f7fafc!important}}@media (min-width:1920px){.xl\\:hover\\:to-gray-200:hover{--gradient-to-color:#edf2f7!important}}@media (min-width:1920px){.xl\\:hover\\:to-gray-300:hover{--gradient-to-color:#e2e8f0!important}}@media (min-width:1920px){.xl\\:hover\\:to-gray-400:hover{--gradient-to-color:#cbd5e0!important}}@media (min-width:1920px){.xl\\:hover\\:to-gray-500:hover{--gradient-to-color:#a0aec0!important}}@media (min-width:1920px){.xl\\:hover\\:to-gray-600:hover{--gradient-to-color:#718096!important}}@media (min-width:1920px){.xl\\:hover\\:to-gray-700:hover{--gradient-to-color:#4a5568!important}}@media (min-width:1920px){.xl\\:hover\\:to-gray-800:hover{--gradient-to-color:#2d3748!important}}@media (min-width:1920px){.xl\\:hover\\:to-gray-900:hover{--gradient-to-color:#1a202c!important}}@media (min-width:1920px){.xl\\:hover\\:to-red-100:hover{--gradient-to-color:#fff5f5!important}}@media (min-width:1920px){.xl\\:hover\\:to-red-200:hover{--gradient-to-color:#fed7d7!important}}@media (min-width:1920px){.xl\\:hover\\:to-red-300:hover{--gradient-to-color:#feb2b2!important}}@media (min-width:1920px){.xl\\:hover\\:to-red-400:hover{--gradient-to-color:#fc8181!important}}@media (min-width:1920px){.xl\\:hover\\:to-red-500:hover{--gradient-to-color:#f56565!important}}@media (min-width:1920px){.xl\\:hover\\:to-red-600:hover{--gradient-to-color:#e53e3e!important}}@media (min-width:1920px){.xl\\:hover\\:to-red-700:hover{--gradient-to-color:#c53030!important}}@media (min-width:1920px){.xl\\:hover\\:to-red-800:hover{--gradient-to-color:#9b2c2c!important}}@media (min-width:1920px){.xl\\:hover\\:to-red-900:hover{--gradient-to-color:#742a2a!important}}@media (min-width:1920px){.xl\\:hover\\:to-orange-100:hover{--gradient-to-color:#fffaf0!important}}@media (min-width:1920px){.xl\\:hover\\:to-orange-200:hover{--gradient-to-color:#feebc8!important}}@media (min-width:1920px){.xl\\:hover\\:to-orange-300:hover{--gradient-to-color:#fbd38d!important}}@media (min-width:1920px){.xl\\:hover\\:to-orange-400:hover{--gradient-to-color:#f6ad55!important}}@media (min-width:1920px){.xl\\:hover\\:to-orange-500:hover{--gradient-to-color:#ed8936!important}}@media (min-width:1920px){.xl\\:hover\\:to-orange-600:hover{--gradient-to-color:#dd6b20!important}}@media (min-width:1920px){.xl\\:hover\\:to-orange-700:hover{--gradient-to-color:#c05621!important}}@media (min-width:1920px){.xl\\:hover\\:to-orange-800:hover{--gradient-to-color:#9c4221!important}}@media (min-width:1920px){.xl\\:hover\\:to-orange-900:hover{--gradient-to-color:#7b341e!important}}@media (min-width:1920px){.xl\\:hover\\:to-yellow-100:hover{--gradient-to-color:ivory!important}}@media (min-width:1920px){.xl\\:hover\\:to-yellow-200:hover{--gradient-to-color:#fefcbf!important}}@media (min-width:1920px){.xl\\:hover\\:to-yellow-300:hover{--gradient-to-color:#faf089!important}}@media (min-width:1920px){.xl\\:hover\\:to-yellow-400:hover{--gradient-to-color:#f6e05e!important}}@media (min-width:1920px){.xl\\:hover\\:to-yellow-500:hover{--gradient-to-color:#ecc94b!important}}@media (min-width:1920px){.xl\\:hover\\:to-yellow-600:hover{--gradient-to-color:#d69e2e!important}}@media (min-width:1920px){.xl\\:hover\\:to-yellow-700:hover{--gradient-to-color:#b7791f!important}}@media (min-width:1920px){.xl\\:hover\\:to-yellow-800:hover{--gradient-to-color:#975a16!important}}@media (min-width:1920px){.xl\\:hover\\:to-yellow-900:hover{--gradient-to-color:#744210!important}}@media (min-width:1920px){.xl\\:hover\\:to-green-100:hover{--gradient-to-color:#f0fff4!important}}@media (min-width:1920px){.xl\\:hover\\:to-green-200:hover{--gradient-to-color:#c6f6d5!important}}@media (min-width:1920px){.xl\\:hover\\:to-green-300:hover{--gradient-to-color:#9ae6b4!important}}@media (min-width:1920px){.xl\\:hover\\:to-green-400:hover{--gradient-to-color:#68d391!important}}@media (min-width:1920px){.xl\\:hover\\:to-green-500:hover{--gradient-to-color:#48bb78!important}}@media (min-width:1920px){.xl\\:hover\\:to-green-600:hover{--gradient-to-color:#38a169!important}}@media (min-width:1920px){.xl\\:hover\\:to-green-700:hover{--gradient-to-color:#2f855a!important}}@media (min-width:1920px){.xl\\:hover\\:to-green-800:hover{--gradient-to-color:#276749!important}}@media (min-width:1920px){.xl\\:hover\\:to-green-900:hover{--gradient-to-color:#22543d!important}}@media (min-width:1920px){.xl\\:hover\\:to-teal-100:hover{--gradient-to-color:#e6fffa!important}}@media (min-width:1920px){.xl\\:hover\\:to-teal-200:hover{--gradient-to-color:#b2f5ea!important}}@media (min-width:1920px){.xl\\:hover\\:to-teal-300:hover{--gradient-to-color:#81e6d9!important}}@media (min-width:1920px){.xl\\:hover\\:to-teal-400:hover{--gradient-to-color:#4fd1c5!important}}@media (min-width:1920px){.xl\\:hover\\:to-teal-500:hover{--gradient-to-color:#38b2ac!important}}@media (min-width:1920px){.xl\\:hover\\:to-teal-600:hover{--gradient-to-color:#319795!important}}@media (min-width:1920px){.xl\\:hover\\:to-teal-700:hover{--gradient-to-color:#2c7a7b!important}}@media (min-width:1920px){.xl\\:hover\\:to-teal-800:hover{--gradient-to-color:#285e61!important}}@media (min-width:1920px){.xl\\:hover\\:to-teal-900:hover{--gradient-to-color:#234e52!important}}@media (min-width:1920px){.xl\\:hover\\:to-blue-100:hover{--gradient-to-color:#ebf8ff!important}}@media (min-width:1920px){.xl\\:hover\\:to-blue-200:hover{--gradient-to-color:#bee3f8!important}}@media (min-width:1920px){.xl\\:hover\\:to-blue-300:hover{--gradient-to-color:#90cdf4!important}}@media (min-width:1920px){.xl\\:hover\\:to-blue-400:hover{--gradient-to-color:#63b3ed!important}}@media (min-width:1920px){.xl\\:hover\\:to-blue-500:hover{--gradient-to-color:#4299e1!important}}@media (min-width:1920px){.xl\\:hover\\:to-blue-600:hover{--gradient-to-color:#3182ce!important}}@media (min-width:1920px){.xl\\:hover\\:to-blue-700:hover{--gradient-to-color:#2b6cb0!important}}@media (min-width:1920px){.xl\\:hover\\:to-blue-800:hover{--gradient-to-color:#2c5282!important}}@media (min-width:1920px){.xl\\:hover\\:to-blue-900:hover{--gradient-to-color:#2a4365!important}}@media (min-width:1920px){.xl\\:hover\\:to-indigo-100:hover{--gradient-to-color:#ebf4ff!important}}@media (min-width:1920px){.xl\\:hover\\:to-indigo-200:hover{--gradient-to-color:#c3dafe!important}}@media (min-width:1920px){.xl\\:hover\\:to-indigo-300:hover{--gradient-to-color:#a3bffa!important}}@media (min-width:1920px){.xl\\:hover\\:to-indigo-400:hover{--gradient-to-color:#7f9cf5!important}}@media (min-width:1920px){.xl\\:hover\\:to-indigo-500:hover{--gradient-to-color:#667eea!important}}@media (min-width:1920px){.xl\\:hover\\:to-indigo-600:hover{--gradient-to-color:#5a67d8!important}}@media (min-width:1920px){.xl\\:hover\\:to-indigo-700:hover{--gradient-to-color:#4c51bf!important}}@media (min-width:1920px){.xl\\:hover\\:to-indigo-800:hover{--gradient-to-color:#434190!important}}@media (min-width:1920px){.xl\\:hover\\:to-indigo-900:hover{--gradient-to-color:#3c366b!important}}@media (min-width:1920px){.xl\\:hover\\:to-purple-100:hover{--gradient-to-color:#faf5ff!important}}@media (min-width:1920px){.xl\\:hover\\:to-purple-200:hover{--gradient-to-color:#e9d8fd!important}}@media (min-width:1920px){.xl\\:hover\\:to-purple-300:hover{--gradient-to-color:#d6bcfa!important}}@media (min-width:1920px){.xl\\:hover\\:to-purple-400:hover{--gradient-to-color:#b794f4!important}}@media (min-width:1920px){.xl\\:hover\\:to-purple-500:hover{--gradient-to-color:#9f7aea!important}}@media (min-width:1920px){.xl\\:hover\\:to-purple-600:hover{--gradient-to-color:#805ad5!important}}@media (min-width:1920px){.xl\\:hover\\:to-purple-700:hover{--gradient-to-color:#6b46c1!important}}@media (min-width:1920px){.xl\\:hover\\:to-purple-800:hover{--gradient-to-color:#553c9a!important}}@media (min-width:1920px){.xl\\:hover\\:to-purple-900:hover{--gradient-to-color:#44337a!important}}@media (min-width:1920px){.xl\\:hover\\:to-pink-100:hover{--gradient-to-color:#fff5f7!important}}@media (min-width:1920px){.xl\\:hover\\:to-pink-200:hover{--gradient-to-color:#fed7e2!important}}@media (min-width:1920px){.xl\\:hover\\:to-pink-300:hover{--gradient-to-color:#fbb6ce!important}}@media (min-width:1920px){.xl\\:hover\\:to-pink-400:hover{--gradient-to-color:#f687b3!important}}@media (min-width:1920px){.xl\\:hover\\:to-pink-500:hover{--gradient-to-color:#ed64a6!important}}@media (min-width:1920px){.xl\\:hover\\:to-pink-600:hover{--gradient-to-color:#d53f8c!important}}@media (min-width:1920px){.xl\\:hover\\:to-pink-700:hover{--gradient-to-color:#b83280!important}}@media (min-width:1920px){.xl\\:hover\\:to-pink-800:hover{--gradient-to-color:#97266d!important}}@media (min-width:1920px){.xl\\:hover\\:to-pink-900:hover{--gradient-to-color:#702459!important}}@media (min-width:1920px){.xl\\:focus\\:from-transparent:focus{--gradient-from-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1920px){.xl\\:focus\\:from-current:focus{--gradient-from-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-black:focus{--gradient-from-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1920px){.xl\\:focus\\:from-white:focus{--gradient-from-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-gray-100:focus{--gradient-from-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-gray-200:focus{--gradient-from-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-gray-300:focus{--gradient-from-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-gray-400:focus{--gradient-from-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-gray-500:focus{--gradient-from-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-gray-600:focus{--gradient-from-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-gray-700:focus{--gradient-from-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-gray-800:focus{--gradient-from-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-gray-900:focus{--gradient-from-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-red-100:focus{--gradient-from-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-red-200:focus{--gradient-from-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-red-300:focus{--gradient-from-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-red-400:focus{--gradient-from-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-red-500:focus{--gradient-from-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-red-600:focus{--gradient-from-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-red-700:focus{--gradient-from-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-red-800:focus{--gradient-from-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-red-900:focus{--gradient-from-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-orange-100:focus{--gradient-from-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-orange-200:focus{--gradient-from-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-orange-300:focus{--gradient-from-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-orange-400:focus{--gradient-from-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-orange-500:focus{--gradient-from-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-orange-600:focus{--gradient-from-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-orange-700:focus{--gradient-from-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-orange-800:focus{--gradient-from-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-orange-900:focus{--gradient-from-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-yellow-100:focus{--gradient-from-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-yellow-200:focus{--gradient-from-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-yellow-300:focus{--gradient-from-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-yellow-400:focus{--gradient-from-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-yellow-500:focus{--gradient-from-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-yellow-600:focus{--gradient-from-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-yellow-700:focus{--gradient-from-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-yellow-800:focus{--gradient-from-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-yellow-900:focus{--gradient-from-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-green-100:focus{--gradient-from-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-green-200:focus{--gradient-from-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-green-300:focus{--gradient-from-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-green-400:focus{--gradient-from-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-green-500:focus{--gradient-from-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-green-600:focus{--gradient-from-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-green-700:focus{--gradient-from-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-green-800:focus{--gradient-from-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-green-900:focus{--gradient-from-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-teal-100:focus{--gradient-from-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-teal-200:focus{--gradient-from-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-teal-300:focus{--gradient-from-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-teal-400:focus{--gradient-from-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-teal-500:focus{--gradient-from-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-teal-600:focus{--gradient-from-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-teal-700:focus{--gradient-from-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-teal-800:focus{--gradient-from-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-teal-900:focus{--gradient-from-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-blue-100:focus{--gradient-from-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-blue-200:focus{--gradient-from-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-blue-300:focus{--gradient-from-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-blue-400:focus{--gradient-from-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-blue-500:focus{--gradient-from-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-blue-600:focus{--gradient-from-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-blue-700:focus{--gradient-from-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-blue-800:focus{--gradient-from-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-blue-900:focus{--gradient-from-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-indigo-100:focus{--gradient-from-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-indigo-200:focus{--gradient-from-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-indigo-300:focus{--gradient-from-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-indigo-400:focus{--gradient-from-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-indigo-500:focus{--gradient-from-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-indigo-600:focus{--gradient-from-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-indigo-700:focus{--gradient-from-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-indigo-800:focus{--gradient-from-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-indigo-900:focus{--gradient-from-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-purple-100:focus{--gradient-from-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-purple-200:focus{--gradient-from-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-purple-300:focus{--gradient-from-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-purple-400:focus{--gradient-from-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-purple-500:focus{--gradient-from-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-purple-600:focus{--gradient-from-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-purple-700:focus{--gradient-from-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-purple-800:focus{--gradient-from-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-purple-900:focus{--gradient-from-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-pink-100:focus{--gradient-from-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-pink-200:focus{--gradient-from-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-pink-300:focus{--gradient-from-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-pink-400:focus{--gradient-from-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-pink-500:focus{--gradient-from-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-pink-600:focus{--gradient-from-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-pink-700:focus{--gradient-from-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-pink-800:focus{--gradient-from-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:1920px){.xl\\:focus\\:from-pink-900:focus{--gradient-from-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-transparent:focus{--gradient-via-color:transparent!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1920px){.xl\\:focus\\:via-current:focus{--gradient-via-color:currentColor!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-black:focus{--gradient-via-color:#000!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,transparent)!important}}@media (min-width:1920px){.xl\\:focus\\:via-white:focus{--gradient-via-color:#fff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,0%,100%,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-gray-100:focus{--gradient-via-color:#f7fafc!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(247,250,252,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-gray-200:focus{--gradient-via-color:#edf2f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,242,247,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-gray-300:focus{--gradient-via-color:#e2e8f0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(226,232,240,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-gray-400:focus{--gradient-via-color:#cbd5e0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(203,213,224,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-gray-500:focus{--gradient-via-color:#a0aec0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(160,174,192,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-gray-600:focus{--gradient-via-color:#718096!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(113,128,150,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-gray-700:focus{--gradient-via-color:#4a5568!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(74,85,104,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-gray-800:focus{--gradient-via-color:#2d3748!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(45,55,72,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-gray-900:focus{--gradient-via-color:#1a202c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(26,32,44,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-red-100:focus{--gradient-via-color:#fff5f5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,hsla(0,100%,98%,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-red-200:focus{--gradient-via-color:#fed7d7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,215,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-red-300:focus{--gradient-via-color:#feb2b2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,178,178,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-red-400:focus{--gradient-via-color:#fc8181!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(252,129,129,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-red-500:focus{--gradient-via-color:#f56565!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(245,101,101,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-red-600:focus{--gradient-via-color:#e53e3e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(229,62,62,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-red-700:focus{--gradient-via-color:#c53030!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(197,48,48,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-red-800:focus{--gradient-via-color:#9b2c2c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(155,44,44,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-red-900:focus{--gradient-via-color:#742a2a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,42,42,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-orange-100:focus{--gradient-via-color:#fffaf0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,250,240,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-orange-200:focus{--gradient-via-color:#feebc8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,235,200,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-orange-300:focus{--gradient-via-color:#fbd38d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,211,141,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-orange-400:focus{--gradient-via-color:#f6ad55!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,173,85,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-orange-500:focus{--gradient-via-color:#ed8936!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,137,54,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-orange-600:focus{--gradient-via-color:#dd6b20!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(221,107,32,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-orange-700:focus{--gradient-via-color:#c05621!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(192,86,33,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-orange-800:focus{--gradient-via-color:#9c4221!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(156,66,33,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-orange-900:focus{--gradient-via-color:#7b341e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(123,52,30,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-yellow-100:focus{--gradient-via-color:ivory!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,255,240,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-yellow-200:focus{--gradient-via-color:#fefcbf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,252,191,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-yellow-300:focus{--gradient-via-color:#faf089!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,240,137,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-yellow-400:focus{--gradient-via-color:#f6e05e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,224,94,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-yellow-500:focus{--gradient-via-color:#ecc94b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(236,201,75,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-yellow-600:focus{--gradient-via-color:#d69e2e!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,158,46,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-yellow-700:focus{--gradient-via-color:#b7791f!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,121,31,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-yellow-800:focus{--gradient-via-color:#975a16!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,90,22,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-yellow-900:focus{--gradient-via-color:#744210!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(116,66,16,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-green-100:focus{--gradient-via-color:#f0fff4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(240,255,244,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-green-200:focus{--gradient-via-color:#c6f6d5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(198,246,213,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-green-300:focus{--gradient-via-color:#9ae6b4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(154,230,180,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-green-400:focus{--gradient-via-color:#68d391!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(104,211,145,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-green-500:focus{--gradient-via-color:#48bb78!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(72,187,120,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-green-600:focus{--gradient-via-color:#38a169!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,161,105,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-green-700:focus{--gradient-via-color:#2f855a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(47,133,90,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-green-800:focus{--gradient-via-color:#276749!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(39,103,73,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-green-900:focus{--gradient-via-color:#22543d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(34,84,61,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-teal-100:focus{--gradient-via-color:#e6fffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(230,255,250,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-teal-200:focus{--gradient-via-color:#b2f5ea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(178,245,234,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-teal-300:focus{--gradient-via-color:#81e6d9!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(129,230,217,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-teal-400:focus{--gradient-via-color:#4fd1c5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(79,209,197,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-teal-500:focus{--gradient-via-color:#38b2ac!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(56,178,172,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-teal-600:focus{--gradient-via-color:#319795!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,151,149,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-teal-700:focus{--gradient-via-color:#2c7a7b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,122,123,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-teal-800:focus{--gradient-via-color:#285e61!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(40,94,97,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-teal-900:focus{--gradient-via-color:#234e52!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(35,78,82,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-blue-100:focus{--gradient-via-color:#ebf8ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,248,255,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-blue-200:focus{--gradient-via-color:#bee3f8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(190,227,248,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-blue-300:focus{--gradient-via-color:#90cdf4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(144,205,244,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-blue-400:focus{--gradient-via-color:#63b3ed!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(99,179,237,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-blue-500:focus{--gradient-via-color:#4299e1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(66,153,225,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-blue-600:focus{--gradient-via-color:#3182ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(49,130,206,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-blue-700:focus{--gradient-via-color:#2b6cb0!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(43,108,176,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-blue-800:focus{--gradient-via-color:#2c5282!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(44,82,130,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-blue-900:focus{--gradient-via-color:#2a4365!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(42,67,101,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-indigo-100:focus{--gradient-via-color:#ebf4ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(235,244,255,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-indigo-200:focus{--gradient-via-color:#c3dafe!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(195,218,254,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-indigo-300:focus{--gradient-via-color:#a3bffa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(163,191,250,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-indigo-400:focus{--gradient-via-color:#7f9cf5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(127,156,245,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-indigo-500:focus{--gradient-via-color:#667eea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(102,126,234,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-indigo-600:focus{--gradient-via-color:#5a67d8!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(90,103,216,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-indigo-700:focus{--gradient-via-color:#4c51bf!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(76,81,191,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-indigo-800:focus{--gradient-via-color:#434190!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(67,65,144,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-indigo-900:focus{--gradient-via-color:#3c366b!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(60,54,107,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-purple-100:focus{--gradient-via-color:#faf5ff!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(250,245,255,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-purple-200:focus{--gradient-via-color:#e9d8fd!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(233,216,253,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-purple-300:focus{--gradient-via-color:#d6bcfa!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(214,188,250,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-purple-400:focus{--gradient-via-color:#b794f4!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(183,148,244,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-purple-500:focus{--gradient-via-color:#9f7aea!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(159,122,234,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-purple-600:focus{--gradient-via-color:#805ad5!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(128,90,213,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-purple-700:focus{--gradient-via-color:#6b46c1!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(107,70,193,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-purple-800:focus{--gradient-via-color:#553c9a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(85,60,154,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-purple-900:focus{--gradient-via-color:#44337a!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(68,51,122,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-pink-100:focus{--gradient-via-color:#fff5f7!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(255,245,247,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-pink-200:focus{--gradient-via-color:#fed7e2!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(254,215,226,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-pink-300:focus{--gradient-via-color:#fbb6ce!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(251,182,206,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-pink-400:focus{--gradient-via-color:#f687b3!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(246,135,179,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-pink-500:focus{--gradient-via-color:#ed64a6!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(237,100,166,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-pink-600:focus{--gradient-via-color:#d53f8c!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(213,63,140,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-pink-700:focus{--gradient-via-color:#b83280!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(184,50,128,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-pink-800:focus{--gradient-via-color:#97266d!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(151,38,109,0))!important}}@media (min-width:1920px){.xl\\:focus\\:via-pink-900:focus{--gradient-via-color:#702459!important;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color,rgba(112,36,89,0))!important}}@media (min-width:1920px){.xl\\:focus\\:to-transparent:focus{--gradient-to-color:transparent!important}}@media (min-width:1920px){.xl\\:focus\\:to-current:focus{--gradient-to-color:currentColor!important}}@media (min-width:1920px){.xl\\:focus\\:to-black:focus{--gradient-to-color:#000!important}}@media (min-width:1920px){.xl\\:focus\\:to-white:focus{--gradient-to-color:#fff!important}}@media (min-width:1920px){.xl\\:focus\\:to-gray-100:focus{--gradient-to-color:#f7fafc!important}}@media (min-width:1920px){.xl\\:focus\\:to-gray-200:focus{--gradient-to-color:#edf2f7!important}}@media (min-width:1920px){.xl\\:focus\\:to-gray-300:focus{--gradient-to-color:#e2e8f0!important}}@media (min-width:1920px){.xl\\:focus\\:to-gray-400:focus{--gradient-to-color:#cbd5e0!important}}@media (min-width:1920px){.xl\\:focus\\:to-gray-500:focus{--gradient-to-color:#a0aec0!important}}@media (min-width:1920px){.xl\\:focus\\:to-gray-600:focus{--gradient-to-color:#718096!important}}@media (min-width:1920px){.xl\\:focus\\:to-gray-700:focus{--gradient-to-color:#4a5568!important}}@media (min-width:1920px){.xl\\:focus\\:to-gray-800:focus{--gradient-to-color:#2d3748!important}}@media (min-width:1920px){.xl\\:focus\\:to-gray-900:focus{--gradient-to-color:#1a202c!important}}@media (min-width:1920px){.xl\\:focus\\:to-red-100:focus{--gradient-to-color:#fff5f5!important}}@media (min-width:1920px){.xl\\:focus\\:to-red-200:focus{--gradient-to-color:#fed7d7!important}}@media (min-width:1920px){.xl\\:focus\\:to-red-300:focus{--gradient-to-color:#feb2b2!important}}@media (min-width:1920px){.xl\\:focus\\:to-red-400:focus{--gradient-to-color:#fc8181!important}}@media (min-width:1920px){.xl\\:focus\\:to-red-500:focus{--gradient-to-color:#f56565!important}}@media (min-width:1920px){.xl\\:focus\\:to-red-600:focus{--gradient-to-color:#e53e3e!important}}@media (min-width:1920px){.xl\\:focus\\:to-red-700:focus{--gradient-to-color:#c53030!important}}@media (min-width:1920px){.xl\\:focus\\:to-red-800:focus{--gradient-to-color:#9b2c2c!important}}@media (min-width:1920px){.xl\\:focus\\:to-red-900:focus{--gradient-to-color:#742a2a!important}}@media (min-width:1920px){.xl\\:focus\\:to-orange-100:focus{--gradient-to-color:#fffaf0!important}}@media (min-width:1920px){.xl\\:focus\\:to-orange-200:focus{--gradient-to-color:#feebc8!important}}@media (min-width:1920px){.xl\\:focus\\:to-orange-300:focus{--gradient-to-color:#fbd38d!important}}@media (min-width:1920px){.xl\\:focus\\:to-orange-400:focus{--gradient-to-color:#f6ad55!important}}@media (min-width:1920px){.xl\\:focus\\:to-orange-500:focus{--gradient-to-color:#ed8936!important}}@media (min-width:1920px){.xl\\:focus\\:to-orange-600:focus{--gradient-to-color:#dd6b20!important}}@media (min-width:1920px){.xl\\:focus\\:to-orange-700:focus{--gradient-to-color:#c05621!important}}@media (min-width:1920px){.xl\\:focus\\:to-orange-800:focus{--gradient-to-color:#9c4221!important}}@media (min-width:1920px){.xl\\:focus\\:to-orange-900:focus{--gradient-to-color:#7b341e!important}}@media (min-width:1920px){.xl\\:focus\\:to-yellow-100:focus{--gradient-to-color:ivory!important}}@media (min-width:1920px){.xl\\:focus\\:to-yellow-200:focus{--gradient-to-color:#fefcbf!important}}@media (min-width:1920px){.xl\\:focus\\:to-yellow-300:focus{--gradient-to-color:#faf089!important}}@media (min-width:1920px){.xl\\:focus\\:to-yellow-400:focus{--gradient-to-color:#f6e05e!important}}@media (min-width:1920px){.xl\\:focus\\:to-yellow-500:focus{--gradient-to-color:#ecc94b!important}}@media (min-width:1920px){.xl\\:focus\\:to-yellow-600:focus{--gradient-to-color:#d69e2e!important}}@media (min-width:1920px){.xl\\:focus\\:to-yellow-700:focus{--gradient-to-color:#b7791f!important}}@media (min-width:1920px){.xl\\:focus\\:to-yellow-800:focus{--gradient-to-color:#975a16!important}}@media (min-width:1920px){.xl\\:focus\\:to-yellow-900:focus{--gradient-to-color:#744210!important}}@media (min-width:1920px){.xl\\:focus\\:to-green-100:focus{--gradient-to-color:#f0fff4!important}}@media (min-width:1920px){.xl\\:focus\\:to-green-200:focus{--gradient-to-color:#c6f6d5!important}}@media (min-width:1920px){.xl\\:focus\\:to-green-300:focus{--gradient-to-color:#9ae6b4!important}}@media (min-width:1920px){.xl\\:focus\\:to-green-400:focus{--gradient-to-color:#68d391!important}}@media (min-width:1920px){.xl\\:focus\\:to-green-500:focus{--gradient-to-color:#48bb78!important}}@media (min-width:1920px){.xl\\:focus\\:to-green-600:focus{--gradient-to-color:#38a169!important}}@media (min-width:1920px){.xl\\:focus\\:to-green-700:focus{--gradient-to-color:#2f855a!important}}@media (min-width:1920px){.xl\\:focus\\:to-green-800:focus{--gradient-to-color:#276749!important}}@media (min-width:1920px){.xl\\:focus\\:to-green-900:focus{--gradient-to-color:#22543d!important}}@media (min-width:1920px){.xl\\:focus\\:to-teal-100:focus{--gradient-to-color:#e6fffa!important}}@media (min-width:1920px){.xl\\:focus\\:to-teal-200:focus{--gradient-to-color:#b2f5ea!important}}@media (min-width:1920px){.xl\\:focus\\:to-teal-300:focus{--gradient-to-color:#81e6d9!important}}@media (min-width:1920px){.xl\\:focus\\:to-teal-400:focus{--gradient-to-color:#4fd1c5!important}}@media (min-width:1920px){.xl\\:focus\\:to-teal-500:focus{--gradient-to-color:#38b2ac!important}}@media (min-width:1920px){.xl\\:focus\\:to-teal-600:focus{--gradient-to-color:#319795!important}}@media (min-width:1920px){.xl\\:focus\\:to-teal-700:focus{--gradient-to-color:#2c7a7b!important}}@media (min-width:1920px){.xl\\:focus\\:to-teal-800:focus{--gradient-to-color:#285e61!important}}@media (min-width:1920px){.xl\\:focus\\:to-teal-900:focus{--gradient-to-color:#234e52!important}}@media (min-width:1920px){.xl\\:focus\\:to-blue-100:focus{--gradient-to-color:#ebf8ff!important}}@media (min-width:1920px){.xl\\:focus\\:to-blue-200:focus{--gradient-to-color:#bee3f8!important}}@media (min-width:1920px){.xl\\:focus\\:to-blue-300:focus{--gradient-to-color:#90cdf4!important}}@media (min-width:1920px){.xl\\:focus\\:to-blue-400:focus{--gradient-to-color:#63b3ed!important}}@media (min-width:1920px){.xl\\:focus\\:to-blue-500:focus{--gradient-to-color:#4299e1!important}}@media (min-width:1920px){.xl\\:focus\\:to-blue-600:focus{--gradient-to-color:#3182ce!important}}@media (min-width:1920px){.xl\\:focus\\:to-blue-700:focus{--gradient-to-color:#2b6cb0!important}}@media (min-width:1920px){.xl\\:focus\\:to-blue-800:focus{--gradient-to-color:#2c5282!important}}@media (min-width:1920px){.xl\\:focus\\:to-blue-900:focus{--gradient-to-color:#2a4365!important}}@media (min-width:1920px){.xl\\:focus\\:to-indigo-100:focus{--gradient-to-color:#ebf4ff!important}}@media (min-width:1920px){.xl\\:focus\\:to-indigo-200:focus{--gradient-to-color:#c3dafe!important}}@media (min-width:1920px){.xl\\:focus\\:to-indigo-300:focus{--gradient-to-color:#a3bffa!important}}@media (min-width:1920px){.xl\\:focus\\:to-indigo-400:focus{--gradient-to-color:#7f9cf5!important}}@media (min-width:1920px){.xl\\:focus\\:to-indigo-500:focus{--gradient-to-color:#667eea!important}}@media (min-width:1920px){.xl\\:focus\\:to-indigo-600:focus{--gradient-to-color:#5a67d8!important}}@media (min-width:1920px){.xl\\:focus\\:to-indigo-700:focus{--gradient-to-color:#4c51bf!important}}@media (min-width:1920px){.xl\\:focus\\:to-indigo-800:focus{--gradient-to-color:#434190!important}}@media (min-width:1920px){.xl\\:focus\\:to-indigo-900:focus{--gradient-to-color:#3c366b!important}}@media (min-width:1920px){.xl\\:focus\\:to-purple-100:focus{--gradient-to-color:#faf5ff!important}}@media (min-width:1920px){.xl\\:focus\\:to-purple-200:focus{--gradient-to-color:#e9d8fd!important}}@media (min-width:1920px){.xl\\:focus\\:to-purple-300:focus{--gradient-to-color:#d6bcfa!important}}@media (min-width:1920px){.xl\\:focus\\:to-purple-400:focus{--gradient-to-color:#b794f4!important}}@media (min-width:1920px){.xl\\:focus\\:to-purple-500:focus{--gradient-to-color:#9f7aea!important}}@media (min-width:1920px){.xl\\:focus\\:to-purple-600:focus{--gradient-to-color:#805ad5!important}}@media (min-width:1920px){.xl\\:focus\\:to-purple-700:focus{--gradient-to-color:#6b46c1!important}}@media (min-width:1920px){.xl\\:focus\\:to-purple-800:focus{--gradient-to-color:#553c9a!important}}@media (min-width:1920px){.xl\\:focus\\:to-purple-900:focus{--gradient-to-color:#44337a!important}}@media (min-width:1920px){.xl\\:focus\\:to-pink-100:focus{--gradient-to-color:#fff5f7!important}}@media (min-width:1920px){.xl\\:focus\\:to-pink-200:focus{--gradient-to-color:#fed7e2!important}}@media (min-width:1920px){.xl\\:focus\\:to-pink-300:focus{--gradient-to-color:#fbb6ce!important}}@media (min-width:1920px){.xl\\:focus\\:to-pink-400:focus{--gradient-to-color:#f687b3!important}}@media (min-width:1920px){.xl\\:focus\\:to-pink-500:focus{--gradient-to-color:#ed64a6!important}}@media (min-width:1920px){.xl\\:focus\\:to-pink-600:focus{--gradient-to-color:#d53f8c!important}}@media (min-width:1920px){.xl\\:focus\\:to-pink-700:focus{--gradient-to-color:#b83280!important}}@media (min-width:1920px){.xl\\:focus\\:to-pink-800:focus{--gradient-to-color:#97266d!important}}@media (min-width:1920px){.xl\\:focus\\:to-pink-900:focus{--gradient-to-color:#702459!important}}@media (min-width:1920px){.xl\\:bg-opacity-0{--bg-opacity:0!important}}@media (min-width:1920px){.xl\\:bg-opacity-25{--bg-opacity:0.25!important}}@media (min-width:1920px){.xl\\:bg-opacity-50{--bg-opacity:0.5!important}}@media (min-width:1920px){.xl\\:bg-opacity-75{--bg-opacity:0.75!important}}@media (min-width:1920px){.xl\\:bg-opacity-100{--bg-opacity:1!important}}@media (min-width:1920px){.xl\\:hover\\:bg-opacity-0:hover{--bg-opacity:0!important}}@media (min-width:1920px){.xl\\:hover\\:bg-opacity-25:hover{--bg-opacity:0.25!important}}@media (min-width:1920px){.xl\\:hover\\:bg-opacity-50:hover{--bg-opacity:0.5!important}}@media (min-width:1920px){.xl\\:hover\\:bg-opacity-75:hover{--bg-opacity:0.75!important}}@media (min-width:1920px){.xl\\:hover\\:bg-opacity-100:hover{--bg-opacity:1!important}}@media (min-width:1920px){.xl\\:focus\\:bg-opacity-0:focus{--bg-opacity:0!important}}@media (min-width:1920px){.xl\\:focus\\:bg-opacity-25:focus{--bg-opacity:0.25!important}}@media (min-width:1920px){.xl\\:focus\\:bg-opacity-50:focus{--bg-opacity:0.5!important}}@media (min-width:1920px){.xl\\:focus\\:bg-opacity-75:focus{--bg-opacity:0.75!important}}@media (min-width:1920px){.xl\\:focus\\:bg-opacity-100:focus{--bg-opacity:1!important}}@media (min-width:1920px){.xl\\:bg-bottom{background-position:bottom!important}}@media (min-width:1920px){.xl\\:bg-center{background-position:50%!important}}@media (min-width:1920px){.xl\\:bg-left{background-position:0!important}}@media (min-width:1920px){.xl\\:bg-left-bottom{background-position:0 100%!important}}@media (min-width:1920px){.xl\\:bg-left-top{background-position:0 0!important}}@media (min-width:1920px){.xl\\:bg-right{background-position:100%!important}}@media (min-width:1920px){.xl\\:bg-right-bottom{background-position:100% 100%!important}}@media (min-width:1920px){.xl\\:bg-right-top{background-position:100% 0!important}}@media (min-width:1920px){.xl\\:bg-top{background-position:top!important}}@media (min-width:1920px){.xl\\:bg-repeat{background-repeat:repeat!important}}@media (min-width:1920px){.xl\\:bg-no-repeat{background-repeat:no-repeat!important}}@media (min-width:1920px){.xl\\:bg-repeat-x{background-repeat:repeat-x!important}}@media (min-width:1920px){.xl\\:bg-repeat-y{background-repeat:repeat-y!important}}@media (min-width:1920px){.xl\\:bg-repeat-round{background-repeat:round!important}}@media (min-width:1920px){.xl\\:bg-repeat-space{background-repeat:space!important}}@media (min-width:1920px){.xl\\:bg-auto{background-size:auto!important}}@media (min-width:1920px){.xl\\:bg-cover{background-size:cover!important}}@media (min-width:1920px){.xl\\:bg-contain{background-size:contain!important}}@media (min-width:1920px){.xl\\:border-collapse{border-collapse:collapse!important}}@media (min-width:1920px){.xl\\:border-separate{border-collapse:initial!important}}@media (min-width:1920px){.xl\\:border-opacity-0{--border-opacity:0!important}}@media (min-width:1920px){.xl\\:border-opacity-25{--border-opacity:0.25!important}}@media (min-width:1920px){.xl\\:border-opacity-50{--border-opacity:0.5!important}}@media (min-width:1920px){.xl\\:border-opacity-75{--border-opacity:0.75!important}}@media (min-width:1920px){.xl\\:border-opacity-100{--border-opacity:1!important}}@media (min-width:1920px){.xl\\:hover\\:border-opacity-0:hover{--border-opacity:0!important}}@media (min-width:1920px){.xl\\:hover\\:border-opacity-25:hover{--border-opacity:0.25!important}}@media (min-width:1920px){.xl\\:hover\\:border-opacity-50:hover{--border-opacity:0.5!important}}@media (min-width:1920px){.xl\\:hover\\:border-opacity-75:hover{--border-opacity:0.75!important}}@media (min-width:1920px){.xl\\:hover\\:border-opacity-100:hover{--border-opacity:1!important}}@media (min-width:1920px){.xl\\:focus\\:border-opacity-0:focus{--border-opacity:0!important}}@media (min-width:1920px){.xl\\:focus\\:border-opacity-25:focus{--border-opacity:0.25!important}}@media (min-width:1920px){.xl\\:focus\\:border-opacity-50:focus{--border-opacity:0.5!important}}@media (min-width:1920px){.xl\\:focus\\:border-opacity-75:focus{--border-opacity:0.75!important}}@media (min-width:1920px){.xl\\:focus\\:border-opacity-100:focus{--border-opacity:1!important}}@media (min-width:1920px){.xl\\:rounded-none{border-radius:0!important}}@media (min-width:1920px){.xl\\:rounded-sm{border-radius:.125rem!important}}@media (min-width:1920px){.xl\\:rounded{border-radius:.25rem!important}}@media (min-width:1920px){.xl\\:rounded-md{border-radius:.375rem!important}}@media (min-width:1920px){.xl\\:rounded-lg{border-radius:.5rem!important}}@media (min-width:1920px){.xl\\:rounded-xl{border-radius:.75rem!important}}@media (min-width:1920px){.xl\\:rounded-2xl{border-radius:1rem!important}}@media (min-width:1920px){.xl\\:rounded-3xl{border-radius:1.5rem!important}}@media (min-width:1920px){.xl\\:rounded-full{border-radius:9999px!important}}@media (min-width:1920px){.xl\\:rounded-t-none{border-top-left-radius:0!important;border-top-right-radius:0!important}}@media (min-width:1920px){.xl\\:rounded-r-none{border-top-right-radius:0!important;border-bottom-right-radius:0!important}}@media (min-width:1920px){.xl\\:rounded-b-none{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}}@media (min-width:1920px){.xl\\:rounded-l-none{border-top-left-radius:0!important;border-bottom-left-radius:0!important}}@media (min-width:1920px){.xl\\:rounded-t-sm{border-top-left-radius:.125rem!important}}@media (min-width:1920px){.xl\\:rounded-r-sm,.xl\\:rounded-t-sm{border-top-right-radius:.125rem!important}}@media (min-width:1920px){.xl\\:rounded-b-sm,.xl\\:rounded-r-sm{border-bottom-right-radius:.125rem!important}}@media (min-width:1920px){.xl\\:rounded-b-sm,.xl\\:rounded-l-sm{border-bottom-left-radius:.125rem!important}.xl\\:rounded-l-sm{border-top-left-radius:.125rem!important}}@media (min-width:1920px){.xl\\:rounded-t{border-top-left-radius:.25rem!important}}@media (min-width:1920px){.xl\\:rounded-r,.xl\\:rounded-t{border-top-right-radius:.25rem!important}}@media (min-width:1920px){.xl\\:rounded-b,.xl\\:rounded-r{border-bottom-right-radius:.25rem!important}}@media (min-width:1920px){.xl\\:rounded-b,.xl\\:rounded-l{border-bottom-left-radius:.25rem!important}.xl\\:rounded-l{border-top-left-radius:.25rem!important}}@media (min-width:1920px){.xl\\:rounded-t-md{border-top-left-radius:.375rem!important}}@media (min-width:1920px){.xl\\:rounded-r-md,.xl\\:rounded-t-md{border-top-right-radius:.375rem!important}}@media (min-width:1920px){.xl\\:rounded-b-md,.xl\\:rounded-r-md{border-bottom-right-radius:.375rem!important}}@media (min-width:1920px){.xl\\:rounded-b-md,.xl\\:rounded-l-md{border-bottom-left-radius:.375rem!important}.xl\\:rounded-l-md{border-top-left-radius:.375rem!important}}@media (min-width:1920px){.xl\\:rounded-t-lg{border-top-left-radius:.5rem!important}}@media (min-width:1920px){.xl\\:rounded-r-lg,.xl\\:rounded-t-lg{border-top-right-radius:.5rem!important}}@media (min-width:1920px){.xl\\:rounded-b-lg,.xl\\:rounded-r-lg{border-bottom-right-radius:.5rem!important}}@media (min-width:1920px){.xl\\:rounded-b-lg,.xl\\:rounded-l-lg{border-bottom-left-radius:.5rem!important}.xl\\:rounded-l-lg{border-top-left-radius:.5rem!important}}@media (min-width:1920px){.xl\\:rounded-t-xl{border-top-left-radius:.75rem!important}}@media (min-width:1920px){.xl\\:rounded-r-xl,.xl\\:rounded-t-xl{border-top-right-radius:.75rem!important}}@media (min-width:1920px){.xl\\:rounded-b-xl,.xl\\:rounded-r-xl{border-bottom-right-radius:.75rem!important}}@media (min-width:1920px){.xl\\:rounded-b-xl,.xl\\:rounded-l-xl{border-bottom-left-radius:.75rem!important}.xl\\:rounded-l-xl{border-top-left-radius:.75rem!important}}@media (min-width:1920px){.xl\\:rounded-t-2xl{border-top-left-radius:1rem!important}}@media (min-width:1920px){.xl\\:rounded-r-2xl,.xl\\:rounded-t-2xl{border-top-right-radius:1rem!important}}@media (min-width:1920px){.xl\\:rounded-b-2xl,.xl\\:rounded-r-2xl{border-bottom-right-radius:1rem!important}}@media (min-width:1920px){.xl\\:rounded-b-2xl,.xl\\:rounded-l-2xl{border-bottom-left-radius:1rem!important}.xl\\:rounded-l-2xl{border-top-left-radius:1rem!important}}@media (min-width:1920px){.xl\\:rounded-t-3xl{border-top-left-radius:1.5rem!important}}@media (min-width:1920px){.xl\\:rounded-r-3xl,.xl\\:rounded-t-3xl{border-top-right-radius:1.5rem!important}}@media (min-width:1920px){.xl\\:rounded-b-3xl,.xl\\:rounded-r-3xl{border-bottom-right-radius:1.5rem!important}}@media (min-width:1920px){.xl\\:rounded-b-3xl,.xl\\:rounded-l-3xl{border-bottom-left-radius:1.5rem!important}.xl\\:rounded-l-3xl{border-top-left-radius:1.5rem!important}}@media (min-width:1920px){.xl\\:rounded-t-full{border-top-left-radius:9999px!important}}@media (min-width:1920px){.xl\\:rounded-r-full,.xl\\:rounded-t-full{border-top-right-radius:9999px!important}}@media (min-width:1920px){.xl\\:rounded-b-full,.xl\\:rounded-r-full{border-bottom-right-radius:9999px!important}}@media (min-width:1920px){.xl\\:rounded-b-full,.xl\\:rounded-l-full{border-bottom-left-radius:9999px!important}.xl\\:rounded-l-full{border-top-left-radius:9999px!important}}@media (min-width:1920px){.xl\\:rounded-tl-none{border-top-left-radius:0!important}}@media (min-width:1920px){.xl\\:rounded-tr-none{border-top-right-radius:0!important}}@media (min-width:1920px){.xl\\:rounded-br-none{border-bottom-right-radius:0!important}}@media (min-width:1920px){.xl\\:rounded-bl-none{border-bottom-left-radius:0!important}}@media (min-width:1920px){.xl\\:rounded-tl-sm{border-top-left-radius:.125rem!important}}@media (min-width:1920px){.xl\\:rounded-tr-sm{border-top-right-radius:.125rem!important}}@media (min-width:1920px){.xl\\:rounded-br-sm{border-bottom-right-radius:.125rem!important}}@media (min-width:1920px){.xl\\:rounded-bl-sm{border-bottom-left-radius:.125rem!important}}@media (min-width:1920px){.xl\\:rounded-tl{border-top-left-radius:.25rem!important}}@media (min-width:1920px){.xl\\:rounded-tr{border-top-right-radius:.25rem!important}}@media (min-width:1920px){.xl\\:rounded-br{border-bottom-right-radius:.25rem!important}}@media (min-width:1920px){.xl\\:rounded-bl{border-bottom-left-radius:.25rem!important}}@media (min-width:1920px){.xl\\:rounded-tl-md{border-top-left-radius:.375rem!important}}@media (min-width:1920px){.xl\\:rounded-tr-md{border-top-right-radius:.375rem!important}}@media (min-width:1920px){.xl\\:rounded-br-md{border-bottom-right-radius:.375rem!important}}@media (min-width:1920px){.xl\\:rounded-bl-md{border-bottom-left-radius:.375rem!important}}@media (min-width:1920px){.xl\\:rounded-tl-lg{border-top-left-radius:.5rem!important}}@media (min-width:1920px){.xl\\:rounded-tr-lg{border-top-right-radius:.5rem!important}}@media (min-width:1920px){.xl\\:rounded-br-lg{border-bottom-right-radius:.5rem!important}}@media (min-width:1920px){.xl\\:rounded-bl-lg{border-bottom-left-radius:.5rem!important}}@media (min-width:1920px){.xl\\:rounded-tl-xl{border-top-left-radius:.75rem!important}}@media (min-width:1920px){.xl\\:rounded-tr-xl{border-top-right-radius:.75rem!important}}@media (min-width:1920px){.xl\\:rounded-br-xl{border-bottom-right-radius:.75rem!important}}@media (min-width:1920px){.xl\\:rounded-bl-xl{border-bottom-left-radius:.75rem!important}}@media (min-width:1920px){.xl\\:rounded-tl-2xl{border-top-left-radius:1rem!important}}@media (min-width:1920px){.xl\\:rounded-tr-2xl{border-top-right-radius:1rem!important}}@media (min-width:1920px){.xl\\:rounded-br-2xl{border-bottom-right-radius:1rem!important}}@media (min-width:1920px){.xl\\:rounded-bl-2xl{border-bottom-left-radius:1rem!important}}@media (min-width:1920px){.xl\\:rounded-tl-3xl{border-top-left-radius:1.5rem!important}}@media (min-width:1920px){.xl\\:rounded-tr-3xl{border-top-right-radius:1.5rem!important}}@media (min-width:1920px){.xl\\:rounded-br-3xl{border-bottom-right-radius:1.5rem!important}}@media (min-width:1920px){.xl\\:rounded-bl-3xl{border-bottom-left-radius:1.5rem!important}}@media (min-width:1920px){.xl\\:rounded-tl-full{border-top-left-radius:9999px!important}}@media (min-width:1920px){.xl\\:rounded-tr-full{border-top-right-radius:9999px!important}}@media (min-width:1920px){.xl\\:rounded-br-full{border-bottom-right-radius:9999px!important}}@media (min-width:1920px){.xl\\:rounded-bl-full{border-bottom-left-radius:9999px!important}}@media (min-width:1920px){.xl\\:border-solid{border-style:solid!important}}@media (min-width:1920px){.xl\\:border-dashed{border-style:dashed!important}}@media (min-width:1920px){.xl\\:border-dotted{border-style:dotted!important}}@media (min-width:1920px){.xl\\:border-double{border-style:double!important}}@media (min-width:1920px){.xl\\:border-none{border-style:none!important}}@media (min-width:1920px){.xl\\:border-0{border-width:0!important}}@media (min-width:1920px){.xl\\:border-2{border-width:2px!important}}@media (min-width:1920px){.xl\\:border-4{border-width:4px!important}}@media (min-width:1920px){.xl\\:border-8{border-width:8px!important}}@media (min-width:1920px){.xl\\:border{border-width:1px!important}}@media (min-width:1920px){.xl\\:border-t-0{border-top-width:0!important}}@media (min-width:1920px){.xl\\:border-r-0{border-right-width:0!important}}@media (min-width:1920px){.xl\\:border-b-0{border-bottom-width:0!important}}@media (min-width:1920px){.xl\\:border-l-0{border-left-width:0!important}}@media (min-width:1920px){.xl\\:border-t-2{border-top-width:2px!important}}@media (min-width:1920px){.xl\\:border-r-2{border-right-width:2px!important}}@media (min-width:1920px){.xl\\:border-b-2{border-bottom-width:2px!important}}@media (min-width:1920px){.xl\\:border-l-2{border-left-width:2px!important}}@media (min-width:1920px){.xl\\:border-t-4{border-top-width:4px!important}}@media (min-width:1920px){.xl\\:border-r-4{border-right-width:4px!important}}@media (min-width:1920px){.xl\\:border-b-4{border-bottom-width:4px!important}}@media (min-width:1920px){.xl\\:border-l-4{border-left-width:4px!important}}@media (min-width:1920px){.xl\\:border-t-8{border-top-width:8px!important}}@media (min-width:1920px){.xl\\:border-r-8{border-right-width:8px!important}}@media (min-width:1920px){.xl\\:border-b-8{border-bottom-width:8px!important}}@media (min-width:1920px){.xl\\:border-l-8{border-left-width:8px!important}}@media (min-width:1920px){.xl\\:border-t{border-top-width:1px!important}}@media (min-width:1920px){.xl\\:border-r{border-right-width:1px!important}}@media (min-width:1920px){.xl\\:border-b{border-bottom-width:1px!important}}@media (min-width:1920px){.xl\\:border-l{border-left-width:1px!important}}@media (min-width:1920px){.xl\\:box-border{box-sizing:border-box!important}}@media (min-width:1920px){.xl\\:box-content{box-sizing:initial!important}}@media (min-width:1920px){.xl\\:cursor-crosshair{cursor:crosshair!important}}@media (min-width:1920px){.xl\\:cursor-zoom-in{cursor:zoom-in!important}}@media (min-width:1920px){.xl\\:block{display:block!important}}@media (min-width:1920px){.xl\\:inline-block{display:inline-block!important}}@media (min-width:1920px){.xl\\:inline{display:inline!important}}@media (min-width:1920px){.xl\\:flex{display:flex!important}}@media (min-width:1920px){.xl\\:inline-flex{display:inline-flex!important}}@media (min-width:1920px){.xl\\:table{display:table!important}}@media (min-width:1920px){.xl\\:table-caption{display:table-caption!important}}@media (min-width:1920px){.xl\\:table-cell{display:table-cell!important}}@media (min-width:1920px){.xl\\:table-column{display:table-column!important}}@media (min-width:1920px){.xl\\:table-column-group{display:table-column-group!important}}@media (min-width:1920px){.xl\\:table-footer-group{display:table-footer-group!important}}@media (min-width:1920px){.xl\\:table-header-group{display:table-header-group!important}}@media (min-width:1920px){.xl\\:table-row-group{display:table-row-group!important}}@media (min-width:1920px){.xl\\:table-row{display:table-row!important}}@media (min-width:1920px){.xl\\:flow-root{display:flow-root!important}}@media (min-width:1920px){.xl\\:grid{display:grid!important}}@media (min-width:1920px){.xl\\:inline-grid{display:inline-grid!important}}@media (min-width:1920px){.xl\\:contents{display:contents!important}}@media (min-width:1920px){.xl\\:hidden{display:none!important}}@media (min-width:1920px){.xl\\:flex-row{flex-direction:row!important}}@media (min-width:1920px){.xl\\:flex-row-reverse{flex-direction:row-reverse!important}}@media (min-width:1920px){.xl\\:flex-col{flex-direction:column!important}}@media (min-width:1920px){.xl\\:flex-col-reverse{flex-direction:column-reverse!important}}@media (min-width:1920px){.xl\\:flex-wrap{flex-wrap:wrap!important}}@media (min-width:1920px){.xl\\:flex-wrap-reverse{flex-wrap:wrap-reverse!important}}@media (min-width:1920px){.xl\\:flex-no-wrap{flex-wrap:nowrap!important}}@media (min-width:1920px){.xl\\:place-items-auto{place-items:auto!important}}@media (min-width:1920px){.xl\\:place-items-start{place-items:start!important}}@media (min-width:1920px){.xl\\:place-items-end{place-items:end!important}}@media (min-width:1920px){.xl\\:place-items-center{place-items:center!important}}@media (min-width:1920px){.xl\\:place-items-stretch{place-items:stretch!important}}@media (min-width:1920px){.xl\\:place-content-center{place-content:center!important}}@media (min-width:1920px){.xl\\:place-content-start{place-content:start!important}}@media (min-width:1920px){.xl\\:place-content-end{place-content:end!important}}@media (min-width:1920px){.xl\\:place-content-between{place-content:space-between!important}}@media (min-width:1920px){.xl\\:place-content-around{place-content:space-around!important}}@media (min-width:1920px){.xl\\:place-content-evenly{place-content:space-evenly!important}}@media (min-width:1920px){.xl\\:place-content-stretch{place-content:stretch!important}}@media (min-width:1920px){.xl\\:place-self-auto{place-self:auto!important}}@media (min-width:1920px){.xl\\:place-self-start{place-self:start!important}}@media (min-width:1920px){.xl\\:place-self-end{place-self:end!important}}@media (min-width:1920px){.xl\\:place-self-center{place-self:center!important}}@media (min-width:1920px){.xl\\:place-self-stretch{place-self:stretch!important}}@media (min-width:1920px){.xl\\:items-start{align-items:flex-start!important}}@media (min-width:1920px){.xl\\:items-end{align-items:flex-end!important}}@media (min-width:1920px){.xl\\:items-center{align-items:center!important}}@media (min-width:1920px){.xl\\:items-baseline{align-items:baseline!important}}@media (min-width:1920px){.xl\\:items-stretch{align-items:stretch!important}}@media (min-width:1920px){.xl\\:content-center{align-content:center!important}}@media (min-width:1920px){.xl\\:content-start{align-content:flex-start!important}}@media (min-width:1920px){.xl\\:content-end{align-content:flex-end!important}}@media (min-width:1920px){.xl\\:content-between{align-content:space-between!important}}@media (min-width:1920px){.xl\\:content-around{align-content:space-around!important}}@media (min-width:1920px){.xl\\:content-evenly{align-content:space-evenly!important}}@media (min-width:1920px){.xl\\:self-auto{align-self:auto!important}}@media (min-width:1920px){.xl\\:self-start{align-self:flex-start!important}}@media (min-width:1920px){.xl\\:self-end{align-self:flex-end!important}}@media (min-width:1920px){.xl\\:self-center{align-self:center!important}}@media (min-width:1920px){.xl\\:self-stretch{align-self:stretch!important}}@media (min-width:1920px){.xl\\:justify-items-auto{justify-items:auto!important}}@media (min-width:1920px){.xl\\:justify-items-start{justify-items:start!important}}@media (min-width:1920px){.xl\\:justify-items-end{justify-items:end!important}}@media (min-width:1920px){.xl\\:justify-items-center{justify-items:center!important}}@media (min-width:1920px){.xl\\:justify-items-stretch{justify-items:stretch!important}}@media (min-width:1920px){.xl\\:justify-start{justify-content:flex-start!important}}@media (min-width:1920px){.xl\\:justify-end{justify-content:flex-end!important}}@media (min-width:1920px){.xl\\:justify-center{justify-content:center!important}}@media (min-width:1920px){.xl\\:justify-between{justify-content:space-between!important}}@media (min-width:1920px){.xl\\:justify-around{justify-content:space-around!important}}@media (min-width:1920px){.xl\\:justify-evenly{justify-content:space-evenly!important}}@media (min-width:1920px){.xl\\:justify-self-auto{justify-self:auto!important}}@media (min-width:1920px){.xl\\:justify-self-start{justify-self:start!important}}@media (min-width:1920px){.xl\\:justify-self-end{justify-self:end!important}}@media (min-width:1920px){.xl\\:justify-self-center{justify-self:center!important}}@media (min-width:1920px){.xl\\:justify-self-stretch{justify-self:stretch!important}}@media (min-width:1920px){.xl\\:flex-1{flex:1 1 0%!important}}@media (min-width:1920px){.xl\\:flex-auto{flex:1 1 auto!important}}@media (min-width:1920px){.xl\\:flex-initial{flex:0 1 auto!important}}@media (min-width:1920px){.xl\\:flex-none{flex:none!important}}@media (min-width:1920px){.xl\\:flex-grow-0{flex-grow:0!important}}@media (min-width:1920px){.xl\\:flex-grow{flex-grow:1!important}}@media (min-width:1920px){.xl\\:flex-shrink-0{flex-shrink:0!important}}@media (min-width:1920px){.xl\\:flex-shrink{flex-shrink:1!important}}@media (min-width:1920px){.xl\\:order-1{order:1!important}}@media (min-width:1920px){.xl\\:order-2{order:2!important}}@media (min-width:1920px){.xl\\:order-3{order:3!important}}@media (min-width:1920px){.xl\\:order-4{order:4!important}}@media (min-width:1920px){.xl\\:order-5{order:5!important}}@media (min-width:1920px){.xl\\:order-6{order:6!important}}@media (min-width:1920px){.xl\\:order-7{order:7!important}}@media (min-width:1920px){.xl\\:order-8{order:8!important}}@media (min-width:1920px){.xl\\:order-9{order:9!important}}@media (min-width:1920px){.xl\\:order-10{order:10!important}}@media (min-width:1920px){.xl\\:order-11{order:11!important}}@media (min-width:1920px){.xl\\:order-12{order:12!important}}@media (min-width:1920px){.xl\\:order-first{order:-9999!important}}@media (min-width:1920px){.xl\\:order-last{order:9999!important}}@media (min-width:1920px){.xl\\:order-none{order:0!important}}@media (min-width:1920px){.xl\\:float-right{float:right!important}}@media (min-width:1920px){.xl\\:float-left{float:left!important}}@media (min-width:1920px){.xl\\:float-none{float:none!important}}@media (min-width:1920px){.xl\\:clearfix:after{content:\"\"!important;display:table!important;clear:both!important}}@media (min-width:1920px){.xl\\:clear-left{clear:left!important}}@media (min-width:1920px){.xl\\:clear-right{clear:right!important}}@media (min-width:1920px){.xl\\:clear-both{clear:both!important}}@media (min-width:1920px){.xl\\:clear-none{clear:none!important}}@media (min-width:1920px){.xl\\:font-sans{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji!important}}@media (min-width:1920px){.xl\\:font-serif{font-family:Georgia,Cambria,Times New Roman,Times,serif!important}}@media (min-width:1920px){.xl\\:font-mono{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}}@media (min-width:1920px){.xl\\:font-hairline{font-weight:100!important}}@media (min-width:1920px){.xl\\:font-thin{font-weight:200!important}}@media (min-width:1920px){.xl\\:font-light{font-weight:300!important}}@media (min-width:1920px){.xl\\:font-normal{font-weight:400!important}}@media (min-width:1920px){.xl\\:font-medium{font-weight:500!important}}@media (min-width:1920px){.xl\\:font-semibold{font-weight:600!important}}@media (min-width:1920px){.xl\\:font-bold{font-weight:700!important}}@media (min-width:1920px){.xl\\:font-extrabold{font-weight:800!important}}@media (min-width:1920px){.xl\\:font-black{font-weight:900!important}}@media (min-width:1920px){.xl\\:hover\\:font-hairline:hover{font-weight:100!important}}@media (min-width:1920px){.xl\\:hover\\:font-thin:hover{font-weight:200!important}}@media (min-width:1920px){.xl\\:hover\\:font-light:hover{font-weight:300!important}}@media (min-width:1920px){.xl\\:hover\\:font-normal:hover{font-weight:400!important}}@media (min-width:1920px){.xl\\:hover\\:font-medium:hover{font-weight:500!important}}@media (min-width:1920px){.xl\\:hover\\:font-semibold:hover{font-weight:600!important}}@media (min-width:1920px){.xl\\:hover\\:font-bold:hover{font-weight:700!important}}@media (min-width:1920px){.xl\\:hover\\:font-extrabold:hover{font-weight:800!important}}@media (min-width:1920px){.xl\\:hover\\:font-black:hover{font-weight:900!important}}@media (min-width:1920px){.xl\\:focus\\:font-hairline:focus{font-weight:100!important}}@media (min-width:1920px){.xl\\:focus\\:font-thin:focus{font-weight:200!important}}@media (min-width:1920px){.xl\\:focus\\:font-light:focus{font-weight:300!important}}@media (min-width:1920px){.xl\\:focus\\:font-normal:focus{font-weight:400!important}}@media (min-width:1920px){.xl\\:focus\\:font-medium:focus{font-weight:500!important}}@media (min-width:1920px){.xl\\:focus\\:font-semibold:focus{font-weight:600!important}}@media (min-width:1920px){.xl\\:focus\\:font-bold:focus{font-weight:700!important}}@media (min-width:1920px){.xl\\:focus\\:font-extrabold:focus{font-weight:800!important}}@media (min-width:1920px){.xl\\:focus\\:font-black:focus{font-weight:900!important}}@media (min-width:1920px){.xl\\:h-0{height:0!important}}@media (min-width:1920px){.xl\\:h-1{height:.25rem!important}}@media (min-width:1920px){.xl\\:h-2{height:.5rem!important}}@media (min-width:1920px){.xl\\:h-3{height:.75rem!important}}@media (min-width:1920px){.xl\\:h-4{height:1rem!important}}@media (min-width:1920px){.xl\\:h-5{height:1.25rem!important}}@media (min-width:1920px){.xl\\:h-6{height:1.5rem!important}}@media (min-width:1920px){.xl\\:h-8{height:2rem!important}}@media (min-width:1920px){.xl\\:h-10{height:2.5rem!important}}@media (min-width:1920px){.xl\\:h-12{height:3rem!important}}@media (min-width:1920px){.xl\\:h-16{height:4rem!important}}@media (min-width:1920px){.xl\\:h-20{height:5rem!important}}@media (min-width:1920px){.xl\\:h-24{height:6rem!important}}@media (min-width:1920px){.xl\\:h-32{height:8rem!important}}@media (min-width:1920px){.xl\\:h-40{height:10rem!important}}@media (min-width:1920px){.xl\\:h-48{height:12rem!important}}@media (min-width:1920px){.xl\\:h-56{height:14rem!important}}@media (min-width:1920px){.xl\\:h-64{height:16rem!important}}@media (min-width:1920px){.xl\\:h-auto{height:auto!important}}@media (min-width:1920px){.xl\\:h-px{height:1px!important}}@media (min-width:1920px){.xl\\:h-full{height:100%!important}}@media (min-width:1920px){.xl\\:h-screen{height:100vh!important}}@media (min-width:1920px){.xl\\:text-xs{font-size:.75rem!important}}@media (min-width:1920px){.xl\\:text-sm{font-size:.875rem!important}}@media (min-width:1920px){.xl\\:text-base{font-size:1rem!important}}@media (min-width:1920px){.xl\\:text-lg{font-size:1.125rem!important}}@media (min-width:1920px){.xl\\:text-xl{font-size:1.25rem!important}}@media (min-width:1920px){.xl\\:text-2xl{font-size:1.5rem!important}}@media (min-width:1920px){.xl\\:text-3xl{font-size:1.875rem!important}}@media (min-width:1920px){.xl\\:text-4xl{font-size:2.25rem!important}}@media (min-width:1920px){.xl\\:text-5xl{font-size:3rem!important}}@media (min-width:1920px){.xl\\:text-6xl{font-size:4rem!important}}@media (min-width:1920px){.xl\\:leading-3{line-height:.75rem!important}}@media (min-width:1920px){.xl\\:leading-4{line-height:1rem!important}}@media (min-width:1920px){.xl\\:leading-5{line-height:1.25rem!important}}@media (min-width:1920px){.xl\\:leading-6{line-height:1.5rem!important}}@media (min-width:1920px){.xl\\:leading-7{line-height:1.75rem!important}}@media (min-width:1920px){.xl\\:leading-8{line-height:2rem!important}}@media (min-width:1920px){.xl\\:leading-9{line-height:2.25rem!important}}@media (min-width:1920px){.xl\\:leading-10{line-height:2.5rem!important}}@media (min-width:1920px){.xl\\:leading-none{line-height:1!important}}@media (min-width:1920px){.xl\\:leading-tight{line-height:1.25!important}}@media (min-width:1920px){.xl\\:leading-snug{line-height:1.375!important}}@media (min-width:1920px){.xl\\:leading-normal{line-height:1.5!important}}@media (min-width:1920px){.xl\\:leading-relaxed{line-height:1.625!important}}@media (min-width:1920px){.xl\\:leading-loose{line-height:2!important}}@media (min-width:1920px){.xl\\:list-inside{list-style-position:inside!important}}@media (min-width:1920px){.xl\\:list-outside{list-style-position:outside!important}}@media (min-width:1920px){.xl\\:list-none{list-style-type:none!important}}@media (min-width:1920px){.xl\\:list-disc{list-style-type:disc!important}}@media (min-width:1920px){.xl\\:list-decimal{list-style-type:decimal!important}}@media (min-width:1920px){.xl\\:m-0{margin:0!important}}@media (min-width:1920px){.xl\\:m-1{margin:.25rem!important}}@media (min-width:1920px){.xl\\:m-2{margin:.5rem!important}}@media (min-width:1920px){.xl\\:m-3{margin:.75rem!important}}@media (min-width:1920px){.xl\\:m-4{margin:1rem!important}}@media (min-width:1920px){.xl\\:m-5{margin:1.25rem!important}}@media (min-width:1920px){.xl\\:m-6{margin:1.5rem!important}}@media (min-width:1920px){.xl\\:m-8{margin:2rem!important}}@media (min-width:1920px){.xl\\:m-10{margin:2.5rem!important}}@media (min-width:1920px){.xl\\:m-12{margin:3rem!important}}@media (min-width:1920px){.xl\\:m-16{margin:4rem!important}}@media (min-width:1920px){.xl\\:m-20{margin:5rem!important}}@media (min-width:1920px){.xl\\:m-24{margin:6rem!important}}@media (min-width:1920px){.xl\\:m-32{margin:8rem!important}}@media (min-width:1920px){.xl\\:m-40{margin:10rem!important}}@media (min-width:1920px){.xl\\:m-48{margin:12rem!important}}@media (min-width:1920px){.xl\\:m-56{margin:14rem!important}}@media (min-width:1920px){.xl\\:m-64{margin:16rem!important}}@media (min-width:1920px){.xl\\:m-auto{margin:auto!important}}@media (min-width:1920px){.xl\\:m-px{margin:1px!important}}@media (min-width:1920px){.xl\\:-m-1{margin:-.25rem!important}}@media (min-width:1920px){.xl\\:-m-2{margin:-.5rem!important}}@media (min-width:1920px){.xl\\:-m-3{margin:-.75rem!important}}@media (min-width:1920px){.xl\\:-m-4{margin:-1rem!important}}@media (min-width:1920px){.xl\\:-m-5{margin:-1.25rem!important}}@media (min-width:1920px){.xl\\:-m-6{margin:-1.5rem!important}}@media (min-width:1920px){.xl\\:-m-8{margin:-2rem!important}}@media (min-width:1920px){.xl\\:-m-10{margin:-2.5rem!important}}@media (min-width:1920px){.xl\\:-m-12{margin:-3rem!important}}@media (min-width:1920px){.xl\\:-m-16{margin:-4rem!important}}@media (min-width:1920px){.xl\\:-m-20{margin:-5rem!important}}@media (min-width:1920px){.xl\\:-m-24{margin:-6rem!important}}@media (min-width:1920px){.xl\\:-m-32{margin:-8rem!important}}@media (min-width:1920px){.xl\\:-m-40{margin:-10rem!important}}@media (min-width:1920px){.xl\\:-m-48{margin:-12rem!important}}@media (min-width:1920px){.xl\\:-m-56{margin:-14rem!important}}@media (min-width:1920px){.xl\\:-m-64{margin:-16rem!important}}@media (min-width:1920px){.xl\\:-m-px{margin:-1px!important}}@media (min-width:1920px){.xl\\:my-0{margin-top:0!important;margin-bottom:0!important}}@media (min-width:1920px){.xl\\:mx-0{margin-left:0!important;margin-right:0!important}}@media (min-width:1920px){.xl\\:my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}}@media (min-width:1920px){.xl\\:mx-1{margin-left:.25rem!important;margin-right:.25rem!important}}@media (min-width:1920px){.xl\\:my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}}@media (min-width:1920px){.xl\\:mx-2{margin-left:.5rem!important;margin-right:.5rem!important}}@media (min-width:1920px){.xl\\:my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}}@media (min-width:1920px){.xl\\:mx-3{margin-left:.75rem!important;margin-right:.75rem!important}}@media (min-width:1920px){.xl\\:my-4{margin-top:1rem!important;margin-bottom:1rem!important}}@media (min-width:1920px){.xl\\:mx-4{margin-left:1rem!important;margin-right:1rem!important}}@media (min-width:1920px){.xl\\:my-5{margin-top:1.25rem!important;margin-bottom:1.25rem!important}}@media (min-width:1920px){.xl\\:mx-5{margin-left:1.25rem!important;margin-right:1.25rem!important}}@media (min-width:1920px){.xl\\:my-6{margin-top:1.5rem!important;margin-bottom:1.5rem!important}}@media (min-width:1920px){.xl\\:mx-6{margin-left:1.5rem!important;margin-right:1.5rem!important}}@media (min-width:1920px){.xl\\:my-8{margin-top:2rem!important;margin-bottom:2rem!important}}@media (min-width:1920px){.xl\\:mx-8{margin-left:2rem!important;margin-right:2rem!important}}@media (min-width:1920px){.xl\\:my-10{margin-top:2.5rem!important;margin-bottom:2.5rem!important}}@media (min-width:1920px){.xl\\:mx-10{margin-left:2.5rem!important;margin-right:2.5rem!important}}@media (min-width:1920px){.xl\\:my-12{margin-top:3rem!important;margin-bottom:3rem!important}}@media (min-width:1920px){.xl\\:mx-12{margin-left:3rem!important;margin-right:3rem!important}}@media (min-width:1920px){.xl\\:my-16{margin-top:4rem!important;margin-bottom:4rem!important}}@media (min-width:1920px){.xl\\:mx-16{margin-left:4rem!important;margin-right:4rem!important}}@media (min-width:1920px){.xl\\:my-20{margin-top:5rem!important;margin-bottom:5rem!important}}@media (min-width:1920px){.xl\\:mx-20{margin-left:5rem!important;margin-right:5rem!important}}@media (min-width:1920px){.xl\\:my-24{margin-top:6rem!important;margin-bottom:6rem!important}}@media (min-width:1920px){.xl\\:mx-24{margin-left:6rem!important;margin-right:6rem!important}}@media (min-width:1920px){.xl\\:my-32{margin-top:8rem!important;margin-bottom:8rem!important}}@media (min-width:1920px){.xl\\:mx-32{margin-left:8rem!important;margin-right:8rem!important}}@media (min-width:1920px){.xl\\:my-40{margin-top:10rem!important;margin-bottom:10rem!important}}@media (min-width:1920px){.xl\\:mx-40{margin-left:10rem!important;margin-right:10rem!important}}@media (min-width:1920px){.xl\\:my-48{margin-top:12rem!important;margin-bottom:12rem!important}}@media (min-width:1920px){.xl\\:mx-48{margin-left:12rem!important;margin-right:12rem!important}}@media (min-width:1920px){.xl\\:my-56{margin-top:14rem!important;margin-bottom:14rem!important}}@media (min-width:1920px){.xl\\:mx-56{margin-left:14rem!important;margin-right:14rem!important}}@media (min-width:1920px){.xl\\:my-64{margin-top:16rem!important;margin-bottom:16rem!important}}@media (min-width:1920px){.xl\\:mx-64{margin-left:16rem!important;margin-right:16rem!important}}@media (min-width:1920px){.xl\\:my-auto{margin-top:auto!important;margin-bottom:auto!important}}@media (min-width:1920px){.xl\\:mx-auto{margin-left:auto!important;margin-right:auto!important}}@media (min-width:1920px){.xl\\:my-px{margin-top:1px!important;margin-bottom:1px!important}}@media (min-width:1920px){.xl\\:mx-px{margin-left:1px!important;margin-right:1px!important}}@media (min-width:1920px){.xl\\:-my-1{margin-top:-.25rem!important;margin-bottom:-.25rem!important}}@media (min-width:1920px){.xl\\:-mx-1{margin-left:-.25rem!important;margin-right:-.25rem!important}}@media (min-width:1920px){.xl\\:-my-2{margin-top:-.5rem!important;margin-bottom:-.5rem!important}}@media (min-width:1920px){.xl\\:-mx-2{margin-left:-.5rem!important;margin-right:-.5rem!important}}@media (min-width:1920px){.xl\\:-my-3{margin-top:-.75rem!important;margin-bottom:-.75rem!important}}@media (min-width:1920px){.xl\\:-mx-3{margin-left:-.75rem!important;margin-right:-.75rem!important}}@media (min-width:1920px){.xl\\:-my-4{margin-top:-1rem!important;margin-bottom:-1rem!important}}@media (min-width:1920px){.xl\\:-mx-4{margin-left:-1rem!important;margin-right:-1rem!important}}@media (min-width:1920px){.xl\\:-my-5{margin-top:-1.25rem!important;margin-bottom:-1.25rem!important}}@media (min-width:1920px){.xl\\:-mx-5{margin-left:-1.25rem!important;margin-right:-1.25rem!important}}@media (min-width:1920px){.xl\\:-my-6{margin-top:-1.5rem!important;margin-bottom:-1.5rem!important}}@media (min-width:1920px){.xl\\:-mx-6{margin-left:-1.5rem!important;margin-right:-1.5rem!important}}@media (min-width:1920px){.xl\\:-my-8{margin-top:-2rem!important;margin-bottom:-2rem!important}}@media (min-width:1920px){.xl\\:-mx-8{margin-left:-2rem!important;margin-right:-2rem!important}}@media (min-width:1920px){.xl\\:-my-10{margin-top:-2.5rem!important;margin-bottom:-2.5rem!important}}@media (min-width:1920px){.xl\\:-mx-10{margin-left:-2.5rem!important;margin-right:-2.5rem!important}}@media (min-width:1920px){.xl\\:-my-12{margin-top:-3rem!important;margin-bottom:-3rem!important}}@media (min-width:1920px){.xl\\:-mx-12{margin-left:-3rem!important;margin-right:-3rem!important}}@media (min-width:1920px){.xl\\:-my-16{margin-top:-4rem!important;margin-bottom:-4rem!important}}@media (min-width:1920px){.xl\\:-mx-16{margin-left:-4rem!important;margin-right:-4rem!important}}@media (min-width:1920px){.xl\\:-my-20{margin-top:-5rem!important;margin-bottom:-5rem!important}}@media (min-width:1920px){.xl\\:-mx-20{margin-left:-5rem!important;margin-right:-5rem!important}}@media (min-width:1920px){.xl\\:-my-24{margin-top:-6rem!important;margin-bottom:-6rem!important}}@media (min-width:1920px){.xl\\:-mx-24{margin-left:-6rem!important;margin-right:-6rem!important}}@media (min-width:1920px){.xl\\:-my-32{margin-top:-8rem!important;margin-bottom:-8rem!important}}@media (min-width:1920px){.xl\\:-mx-32{margin-left:-8rem!important;margin-right:-8rem!important}}@media (min-width:1920px){.xl\\:-my-40{margin-top:-10rem!important;margin-bottom:-10rem!important}}@media (min-width:1920px){.xl\\:-mx-40{margin-left:-10rem!important;margin-right:-10rem!important}}@media (min-width:1920px){.xl\\:-my-48{margin-top:-12rem!important;margin-bottom:-12rem!important}}@media (min-width:1920px){.xl\\:-mx-48{margin-left:-12rem!important;margin-right:-12rem!important}}@media (min-width:1920px){.xl\\:-my-56{margin-top:-14rem!important;margin-bottom:-14rem!important}}@media (min-width:1920px){.xl\\:-mx-56{margin-left:-14rem!important;margin-right:-14rem!important}}@media (min-width:1920px){.xl\\:-my-64{margin-top:-16rem!important;margin-bottom:-16rem!important}}@media (min-width:1920px){.xl\\:-mx-64{margin-left:-16rem!important;margin-right:-16rem!important}}@media (min-width:1920px){.xl\\:-my-px{margin-top:-1px!important;margin-bottom:-1px!important}}@media (min-width:1920px){.xl\\:-mx-px{margin-left:-1px!important;margin-right:-1px!important}}@media (min-width:1920px){.xl\\:mt-0{margin-top:0!important}}@media (min-width:1920px){.xl\\:mr-0{margin-right:0!important}}@media (min-width:1920px){.xl\\:mb-0{margin-bottom:0!important}}@media (min-width:1920px){.xl\\:ml-0{margin-left:0!important}}@media (min-width:1920px){.xl\\:mt-1{margin-top:.25rem!important}}@media (min-width:1920px){.xl\\:mr-1{margin-right:.25rem!important}}@media (min-width:1920px){.xl\\:mb-1{margin-bottom:.25rem!important}}@media (min-width:1920px){.xl\\:ml-1{margin-left:.25rem!important}}@media (min-width:1920px){.xl\\:mt-2{margin-top:.5rem!important}}@media (min-width:1920px){.xl\\:mr-2{margin-right:.5rem!important}}@media (min-width:1920px){.xl\\:mb-2{margin-bottom:.5rem!important}}@media (min-width:1920px){.xl\\:ml-2{margin-left:.5rem!important}}@media (min-width:1920px){.xl\\:mt-3{margin-top:.75rem!important}}@media (min-width:1920px){.xl\\:mr-3{margin-right:.75rem!important}}@media (min-width:1920px){.xl\\:mb-3{margin-bottom:.75rem!important}}@media (min-width:1920px){.xl\\:ml-3{margin-left:.75rem!important}}@media (min-width:1920px){.xl\\:mt-4{margin-top:1rem!important}}@media (min-width:1920px){.xl\\:mr-4{margin-right:1rem!important}}@media (min-width:1920px){.xl\\:mb-4{margin-bottom:1rem!important}}@media (min-width:1920px){.xl\\:ml-4{margin-left:1rem!important}}@media (min-width:1920px){.xl\\:mt-5{margin-top:1.25rem!important}}@media (min-width:1920px){.xl\\:mr-5{margin-right:1.25rem!important}}@media (min-width:1920px){.xl\\:mb-5{margin-bottom:1.25rem!important}}@media (min-width:1920px){.xl\\:ml-5{margin-left:1.25rem!important}}@media (min-width:1920px){.xl\\:mt-6{margin-top:1.5rem!important}}@media (min-width:1920px){.xl\\:mr-6{margin-right:1.5rem!important}}@media (min-width:1920px){.xl\\:mb-6{margin-bottom:1.5rem!important}}@media (min-width:1920px){.xl\\:ml-6{margin-left:1.5rem!important}}@media (min-width:1920px){.xl\\:mt-8{margin-top:2rem!important}}@media (min-width:1920px){.xl\\:mr-8{margin-right:2rem!important}}@media (min-width:1920px){.xl\\:mb-8{margin-bottom:2rem!important}}@media (min-width:1920px){.xl\\:ml-8{margin-left:2rem!important}}@media (min-width:1920px){.xl\\:mt-10{margin-top:2.5rem!important}}@media (min-width:1920px){.xl\\:mr-10{margin-right:2.5rem!important}}@media (min-width:1920px){.xl\\:mb-10{margin-bottom:2.5rem!important}}@media (min-width:1920px){.xl\\:ml-10{margin-left:2.5rem!important}}@media (min-width:1920px){.xl\\:mt-12{margin-top:3rem!important}}@media (min-width:1920px){.xl\\:mr-12{margin-right:3rem!important}}@media (min-width:1920px){.xl\\:mb-12{margin-bottom:3rem!important}}@media (min-width:1920px){.xl\\:ml-12{margin-left:3rem!important}}@media (min-width:1920px){.xl\\:mt-16{margin-top:4rem!important}}@media (min-width:1920px){.xl\\:mr-16{margin-right:4rem!important}}@media (min-width:1920px){.xl\\:mb-16{margin-bottom:4rem!important}}@media (min-width:1920px){.xl\\:ml-16{margin-left:4rem!important}}@media (min-width:1920px){.xl\\:mt-20{margin-top:5rem!important}}@media (min-width:1920px){.xl\\:mr-20{margin-right:5rem!important}}@media (min-width:1920px){.xl\\:mb-20{margin-bottom:5rem!important}}@media (min-width:1920px){.xl\\:ml-20{margin-left:5rem!important}}@media (min-width:1920px){.xl\\:mt-24{margin-top:6rem!important}}@media (min-width:1920px){.xl\\:mr-24{margin-right:6rem!important}}@media (min-width:1920px){.xl\\:mb-24{margin-bottom:6rem!important}}@media (min-width:1920px){.xl\\:ml-24{margin-left:6rem!important}}@media (min-width:1920px){.xl\\:mt-32{margin-top:8rem!important}}@media (min-width:1920px){.xl\\:mr-32{margin-right:8rem!important}}@media (min-width:1920px){.xl\\:mb-32{margin-bottom:8rem!important}}@media (min-width:1920px){.xl\\:ml-32{margin-left:8rem!important}}@media (min-width:1920px){.xl\\:mt-40{margin-top:10rem!important}}@media (min-width:1920px){.xl\\:mr-40{margin-right:10rem!important}}@media (min-width:1920px){.xl\\:mb-40{margin-bottom:10rem!important}}@media (min-width:1920px){.xl\\:ml-40{margin-left:10rem!important}}@media (min-width:1920px){.xl\\:mt-48{margin-top:12rem!important}}@media (min-width:1920px){.xl\\:mr-48{margin-right:12rem!important}}@media (min-width:1920px){.xl\\:mb-48{margin-bottom:12rem!important}}@media (min-width:1920px){.xl\\:ml-48{margin-left:12rem!important}}@media (min-width:1920px){.xl\\:mt-56{margin-top:14rem!important}}@media (min-width:1920px){.xl\\:mr-56{margin-right:14rem!important}}@media (min-width:1920px){.xl\\:mb-56{margin-bottom:14rem!important}}@media (min-width:1920px){.xl\\:ml-56{margin-left:14rem!important}}@media (min-width:1920px){.xl\\:mt-64{margin-top:16rem!important}}@media (min-width:1920px){.xl\\:mr-64{margin-right:16rem!important}}@media (min-width:1920px){.xl\\:mb-64{margin-bottom:16rem!important}}@media (min-width:1920px){.xl\\:ml-64{margin-left:16rem!important}}@media (min-width:1920px){.xl\\:mt-auto{margin-top:auto!important}}@media (min-width:1920px){.xl\\:mr-auto{margin-right:auto!important}}@media (min-width:1920px){.xl\\:mb-auto{margin-bottom:auto!important}}@media (min-width:1920px){.xl\\:ml-auto{margin-left:auto!important}}@media (min-width:1920px){.xl\\:mt-px{margin-top:1px!important}}@media (min-width:1920px){.xl\\:mr-px{margin-right:1px!important}}@media (min-width:1920px){.xl\\:mb-px{margin-bottom:1px!important}}@media (min-width:1920px){.xl\\:ml-px{margin-left:1px!important}}@media (min-width:1920px){.xl\\:-mt-1{margin-top:-.25rem!important}}@media (min-width:1920px){.xl\\:-mr-1{margin-right:-.25rem!important}}@media (min-width:1920px){.xl\\:-mb-1{margin-bottom:-.25rem!important}}@media (min-width:1920px){.xl\\:-ml-1{margin-left:-.25rem!important}}@media (min-width:1920px){.xl\\:-mt-2{margin-top:-.5rem!important}}@media (min-width:1920px){.xl\\:-mr-2{margin-right:-.5rem!important}}@media (min-width:1920px){.xl\\:-mb-2{margin-bottom:-.5rem!important}}@media (min-width:1920px){.xl\\:-ml-2{margin-left:-.5rem!important}}@media (min-width:1920px){.xl\\:-mt-3{margin-top:-.75rem!important}}@media (min-width:1920px){.xl\\:-mr-3{margin-right:-.75rem!important}}@media (min-width:1920px){.xl\\:-mb-3{margin-bottom:-.75rem!important}}@media (min-width:1920px){.xl\\:-ml-3{margin-left:-.75rem!important}}@media (min-width:1920px){.xl\\:-mt-4{margin-top:-1rem!important}}@media (min-width:1920px){.xl\\:-mr-4{margin-right:-1rem!important}}@media (min-width:1920px){.xl\\:-mb-4{margin-bottom:-1rem!important}}@media (min-width:1920px){.xl\\:-ml-4{margin-left:-1rem!important}}@media (min-width:1920px){.xl\\:-mt-5{margin-top:-1.25rem!important}}@media (min-width:1920px){.xl\\:-mr-5{margin-right:-1.25rem!important}}@media (min-width:1920px){.xl\\:-mb-5{margin-bottom:-1.25rem!important}}@media (min-width:1920px){.xl\\:-ml-5{margin-left:-1.25rem!important}}@media (min-width:1920px){.xl\\:-mt-6{margin-top:-1.5rem!important}}@media (min-width:1920px){.xl\\:-mr-6{margin-right:-1.5rem!important}}@media (min-width:1920px){.xl\\:-mb-6{margin-bottom:-1.5rem!important}}@media (min-width:1920px){.xl\\:-ml-6{margin-left:-1.5rem!important}}@media (min-width:1920px){.xl\\:-mt-8{margin-top:-2rem!important}}@media (min-width:1920px){.xl\\:-mr-8{margin-right:-2rem!important}}@media (min-width:1920px){.xl\\:-mb-8{margin-bottom:-2rem!important}}@media (min-width:1920px){.xl\\:-ml-8{margin-left:-2rem!important}}@media (min-width:1920px){.xl\\:-mt-10{margin-top:-2.5rem!important}}@media (min-width:1920px){.xl\\:-mr-10{margin-right:-2.5rem!important}}@media (min-width:1920px){.xl\\:-mb-10{margin-bottom:-2.5rem!important}}@media (min-width:1920px){.xl\\:-ml-10{margin-left:-2.5rem!important}}@media (min-width:1920px){.xl\\:-mt-12{margin-top:-3rem!important}}@media (min-width:1920px){.xl\\:-mr-12{margin-right:-3rem!important}}@media (min-width:1920px){.xl\\:-mb-12{margin-bottom:-3rem!important}}@media (min-width:1920px){.xl\\:-ml-12{margin-left:-3rem!important}}@media (min-width:1920px){.xl\\:-mt-16{margin-top:-4rem!important}}@media (min-width:1920px){.xl\\:-mr-16{margin-right:-4rem!important}}@media (min-width:1920px){.xl\\:-mb-16{margin-bottom:-4rem!important}}@media (min-width:1920px){.xl\\:-ml-16{margin-left:-4rem!important}}@media (min-width:1920px){.xl\\:-mt-20{margin-top:-5rem!important}}@media (min-width:1920px){.xl\\:-mr-20{margin-right:-5rem!important}}@media (min-width:1920px){.xl\\:-mb-20{margin-bottom:-5rem!important}}@media (min-width:1920px){.xl\\:-ml-20{margin-left:-5rem!important}}@media (min-width:1920px){.xl\\:-mt-24{margin-top:-6rem!important}}@media (min-width:1920px){.xl\\:-mr-24{margin-right:-6rem!important}}@media (min-width:1920px){.xl\\:-mb-24{margin-bottom:-6rem!important}}@media (min-width:1920px){.xl\\:-ml-24{margin-left:-6rem!important}}@media (min-width:1920px){.xl\\:-mt-32{margin-top:-8rem!important}}@media (min-width:1920px){.xl\\:-mr-32{margin-right:-8rem!important}}@media (min-width:1920px){.xl\\:-mb-32{margin-bottom:-8rem!important}}@media (min-width:1920px){.xl\\:-ml-32{margin-left:-8rem!important}}@media (min-width:1920px){.xl\\:-mt-40{margin-top:-10rem!important}}@media (min-width:1920px){.xl\\:-mr-40{margin-right:-10rem!important}}@media (min-width:1920px){.xl\\:-mb-40{margin-bottom:-10rem!important}}@media (min-width:1920px){.xl\\:-ml-40{margin-left:-10rem!important}}@media (min-width:1920px){.xl\\:-mt-48{margin-top:-12rem!important}}@media (min-width:1920px){.xl\\:-mr-48{margin-right:-12rem!important}}@media (min-width:1920px){.xl\\:-mb-48{margin-bottom:-12rem!important}}@media (min-width:1920px){.xl\\:-ml-48{margin-left:-12rem!important}}@media (min-width:1920px){.xl\\:-mt-56{margin-top:-14rem!important}}@media (min-width:1920px){.xl\\:-mr-56{margin-right:-14rem!important}}@media (min-width:1920px){.xl\\:-mb-56{margin-bottom:-14rem!important}}@media (min-width:1920px){.xl\\:-ml-56{margin-left:-14rem!important}}@media (min-width:1920px){.xl\\:-mt-64{margin-top:-16rem!important}}@media (min-width:1920px){.xl\\:-mr-64{margin-right:-16rem!important}}@media (min-width:1920px){.xl\\:-mb-64{margin-bottom:-16rem!important}}@media (min-width:1920px){.xl\\:-ml-64{margin-left:-16rem!important}}@media (min-width:1920px){.xl\\:-mt-px{margin-top:-1px!important}}@media (min-width:1920px){.xl\\:-mr-px{margin-right:-1px!important}}@media (min-width:1920px){.xl\\:-mb-px{margin-bottom:-1px!important}}@media (min-width:1920px){.xl\\:-ml-px{margin-left:-1px!important}}@media (min-width:1920px){.xl\\:max-h-full{max-height:100%!important}}@media (min-width:1920px){.xl\\:max-h-screen{max-height:100vh!important}}@media (min-width:1920px){.xl\\:max-w-none{max-width:none!important}}@media (min-width:1920px){.xl\\:max-w-xs{max-width:20rem!important}}@media (min-width:1920px){.xl\\:max-w-sm{max-width:24rem!important}}@media (min-width:1920px){.xl\\:max-w-md{max-width:28rem!important}}@media (min-width:1920px){.xl\\:max-w-lg{max-width:32rem!important}}@media (min-width:1920px){.xl\\:max-w-xl{max-width:36rem!important}}@media (min-width:1920px){.xl\\:max-w-2xl{max-width:42rem!important}}@media (min-width:1920px){.xl\\:max-w-3xl{max-width:48rem!important}}@media (min-width:1920px){.xl\\:max-w-4xl{max-width:56rem!important}}@media (min-width:1920px){.xl\\:max-w-5xl{max-width:64rem!important}}@media (min-width:1920px){.xl\\:max-w-6xl{max-width:72rem!important}}@media (min-width:1920px){.xl\\:max-w-full{max-width:100%!important}}@media (min-width:1920px){.xl\\:max-w-screen-xs{max-width:599px!important}}@media (min-width:1920px){.xl\\:max-w-screen-sm{max-width:600px!important}}@media (min-width:1920px){.xl\\:max-w-screen-md{max-width:960px!important}}@media (min-width:1920px){.xl\\:max-w-screen-lg{max-width:1280px!important}}@media (min-width:1920px){.xl\\:max-w-screen-xl{max-width:1920px!important}}@media (min-width:1920px){.xl\\:min-h-0{min-height:0!important}}@media (min-width:1920px){.xl\\:min-h-full{min-height:100%!important}}@media (min-width:1920px){.xl\\:min-h-screen{min-height:100vh!important}}@media (min-width:1920px){.xl\\:min-w-0{min-width:0!important}}@media (min-width:1920px){.xl\\:min-w-full{min-width:100%!important}}@media (min-width:1920px){.xl\\:object-contain{object-fit:contain!important}}@media (min-width:1920px){.xl\\:object-cover{object-fit:cover!important}}@media (min-width:1920px){.xl\\:object-fill{object-fit:fill!important}}@media (min-width:1920px){.xl\\:object-none{object-fit:none!important}}@media (min-width:1920px){.xl\\:object-scale-down{object-fit:scale-down!important}}@media (min-width:1920px){.xl\\:object-bottom{object-position:bottom!important}}@media (min-width:1920px){.xl\\:object-center{object-position:center!important}}@media (min-width:1920px){.xl\\:object-left{object-position:left!important}}@media (min-width:1920px){.xl\\:object-left-bottom{object-position:left bottom!important}}@media (min-width:1920px){.xl\\:object-left-top{object-position:left top!important}}@media (min-width:1920px){.xl\\:object-right{object-position:right!important}}@media (min-width:1920px){.xl\\:object-right-bottom{object-position:right bottom!important}}@media (min-width:1920px){.xl\\:object-right-top{object-position:right top!important}}@media (min-width:1920px){.xl\\:object-top{object-position:top!important}}@media (min-width:1920px){.xl\\:opacity-0{opacity:0!important}}@media (min-width:1920px){.xl\\:opacity-25{opacity:.25!important}}@media (min-width:1920px){.xl\\:opacity-50{opacity:.5!important}}@media (min-width:1920px){.xl\\:opacity-75{opacity:.75!important}}@media (min-width:1920px){.xl\\:opacity-100{opacity:1!important}}@media (min-width:1920px){.xl\\:hover\\:opacity-0:hover{opacity:0!important}}@media (min-width:1920px){.xl\\:hover\\:opacity-25:hover{opacity:.25!important}}@media (min-width:1920px){.xl\\:hover\\:opacity-50:hover{opacity:.5!important}}@media (min-width:1920px){.xl\\:hover\\:opacity-75:hover{opacity:.75!important}}@media (min-width:1920px){.xl\\:hover\\:opacity-100:hover{opacity:1!important}}@media (min-width:1920px){.xl\\:focus\\:opacity-0:focus{opacity:0!important}}@media (min-width:1920px){.xl\\:focus\\:opacity-25:focus{opacity:.25!important}}@media (min-width:1920px){.xl\\:focus\\:opacity-50:focus{opacity:.5!important}}@media (min-width:1920px){.xl\\:focus\\:opacity-75:focus{opacity:.75!important}}@media (min-width:1920px){.xl\\:focus\\:opacity-100:focus{opacity:1!important}}@media (min-width:1920px){.xl\\:overflow-auto{overflow:auto!important}}@media (min-width:1920px){.xl\\:overflow-hidden{overflow:hidden!important}}@media (min-width:1920px){.xl\\:overflow-visible{overflow:visible!important}}@media (min-width:1920px){.xl\\:overflow-scroll{overflow:scroll!important}}@media (min-width:1920px){.xl\\:overflow-x-auto{overflow-x:auto!important}}@media (min-width:1920px){.xl\\:overflow-y-auto{overflow-y:auto!important}}@media (min-width:1920px){.xl\\:overflow-x-hidden{overflow-x:hidden!important}}@media (min-width:1920px){.xl\\:overflow-y-hidden{overflow-y:hidden!important}}@media (min-width:1920px){.xl\\:overflow-x-visible{overflow-x:visible!important}}@media (min-width:1920px){.xl\\:overflow-y-visible{overflow-y:visible!important}}@media (min-width:1920px){.xl\\:overflow-x-scroll{overflow-x:scroll!important}}@media (min-width:1920px){.xl\\:overflow-y-scroll{overflow-y:scroll!important}}@media (min-width:1920px){.xl\\:scrolling-touch{-webkit-overflow-scrolling:touch!important}}@media (min-width:1920px){.xl\\:scrolling-auto{-webkit-overflow-scrolling:auto!important}}@media (min-width:1920px){.xl\\:overscroll-auto{overscroll-behavior:auto!important}}@media (min-width:1920px){.xl\\:overscroll-contain{overscroll-behavior:contain!important}}@media (min-width:1920px){.xl\\:overscroll-none{overscroll-behavior:none!important}}@media (min-width:1920px){.xl\\:overscroll-y-auto{overscroll-behavior-y:auto!important}}@media (min-width:1920px){.xl\\:overscroll-y-contain{overscroll-behavior-y:contain!important}}@media (min-width:1920px){.xl\\:overscroll-y-none{overscroll-behavior-y:none!important}}@media (min-width:1920px){.xl\\:overscroll-x-auto{overscroll-behavior-x:auto!important}}@media (min-width:1920px){.xl\\:overscroll-x-contain{overscroll-behavior-x:contain!important}}@media (min-width:1920px){.xl\\:overscroll-x-none{overscroll-behavior-x:none!important}}@media (min-width:1920px){.xl\\:p-0{padding:0!important}}@media (min-width:1920px){.xl\\:p-1{padding:.25rem!important}}@media (min-width:1920px){.xl\\:p-2{padding:.5rem!important}}@media (min-width:1920px){.xl\\:p-3{padding:.75rem!important}}@media (min-width:1920px){.xl\\:p-4{padding:1rem!important}}@media (min-width:1920px){.xl\\:p-5{padding:1.25rem!important}}@media (min-width:1920px){.xl\\:p-6{padding:1.5rem!important}}@media (min-width:1920px){.xl\\:p-8{padding:2rem!important}}@media (min-width:1920px){.xl\\:p-10{padding:2.5rem!important}}@media (min-width:1920px){.xl\\:p-12{padding:3rem!important}}@media (min-width:1920px){.xl\\:p-16{padding:4rem!important}}@media (min-width:1920px){.xl\\:p-20{padding:5rem!important}}@media (min-width:1920px){.xl\\:p-24{padding:6rem!important}}@media (min-width:1920px){.xl\\:p-32{padding:8rem!important}}@media (min-width:1920px){.xl\\:p-40{padding:10rem!important}}@media (min-width:1920px){.xl\\:p-48{padding:12rem!important}}@media (min-width:1920px){.xl\\:p-56{padding:14rem!important}}@media (min-width:1920px){.xl\\:p-64{padding:16rem!important}}@media (min-width:1920px){.xl\\:p-px{padding:1px!important}}@media (min-width:1920px){.xl\\:py-0{padding-top:0!important;padding-bottom:0!important}}@media (min-width:1920px){.xl\\:px-0{padding-left:0!important;padding-right:0!important}}@media (min-width:1920px){.xl\\:py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}}@media (min-width:1920px){.xl\\:px-1{padding-left:.25rem!important;padding-right:.25rem!important}}@media (min-width:1920px){.xl\\:py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}}@media (min-width:1920px){.xl\\:px-2{padding-left:.5rem!important;padding-right:.5rem!important}}@media (min-width:1920px){.xl\\:py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}}@media (min-width:1920px){.xl\\:px-3{padding-left:.75rem!important;padding-right:.75rem!important}}@media (min-width:1920px){.xl\\:py-4{padding-top:1rem!important;padding-bottom:1rem!important}}@media (min-width:1920px){.xl\\:px-4{padding-left:1rem!important;padding-right:1rem!important}}@media (min-width:1920px){.xl\\:py-5{padding-top:1.25rem!important;padding-bottom:1.25rem!important}}@media (min-width:1920px){.xl\\:px-5{padding-left:1.25rem!important;padding-right:1.25rem!important}}@media (min-width:1920px){.xl\\:py-6{padding-top:1.5rem!important;padding-bottom:1.5rem!important}}@media (min-width:1920px){.xl\\:px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}}@media (min-width:1920px){.xl\\:py-8{padding-top:2rem!important;padding-bottom:2rem!important}}@media (min-width:1920px){.xl\\:px-8{padding-left:2rem!important;padding-right:2rem!important}}@media (min-width:1920px){.xl\\:py-10{padding-top:2.5rem!important;padding-bottom:2.5rem!important}}@media (min-width:1920px){.xl\\:px-10{padding-left:2.5rem!important;padding-right:2.5rem!important}}@media (min-width:1920px){.xl\\:py-12{padding-top:3rem!important;padding-bottom:3rem!important}}@media (min-width:1920px){.xl\\:px-12{padding-left:3rem!important;padding-right:3rem!important}}@media (min-width:1920px){.xl\\:py-16{padding-top:4rem!important;padding-bottom:4rem!important}}@media (min-width:1920px){.xl\\:px-16{padding-left:4rem!important;padding-right:4rem!important}}@media (min-width:1920px){.xl\\:py-20{padding-top:5rem!important;padding-bottom:5rem!important}}@media (min-width:1920px){.xl\\:px-20{padding-left:5rem!important;padding-right:5rem!important}}@media (min-width:1920px){.xl\\:py-24{padding-top:6rem!important;padding-bottom:6rem!important}}@media (min-width:1920px){.xl\\:px-24{padding-left:6rem!important;padding-right:6rem!important}}@media (min-width:1920px){.xl\\:py-32{padding-top:8rem!important;padding-bottom:8rem!important}}@media (min-width:1920px){.xl\\:px-32{padding-left:8rem!important;padding-right:8rem!important}}@media (min-width:1920px){.xl\\:py-40{padding-top:10rem!important;padding-bottom:10rem!important}}@media (min-width:1920px){.xl\\:px-40{padding-left:10rem!important;padding-right:10rem!important}}@media (min-width:1920px){.xl\\:py-48{padding-top:12rem!important;padding-bottom:12rem!important}}@media (min-width:1920px){.xl\\:px-48{padding-left:12rem!important;padding-right:12rem!important}}@media (min-width:1920px){.xl\\:py-56{padding-top:14rem!important;padding-bottom:14rem!important}}@media (min-width:1920px){.xl\\:px-56{padding-left:14rem!important;padding-right:14rem!important}}@media (min-width:1920px){.xl\\:py-64{padding-top:16rem!important;padding-bottom:16rem!important}}@media (min-width:1920px){.xl\\:px-64{padding-left:16rem!important;padding-right:16rem!important}}@media (min-width:1920px){.xl\\:py-px{padding-top:1px!important;padding-bottom:1px!important}}@media (min-width:1920px){.xl\\:px-px{padding-left:1px!important;padding-right:1px!important}}@media (min-width:1920px){.xl\\:pt-0{padding-top:0!important}}@media (min-width:1920px){.xl\\:pr-0{padding-right:0!important}}@media (min-width:1920px){.xl\\:pb-0{padding-bottom:0!important}}@media (min-width:1920px){.xl\\:pl-0{padding-left:0!important}}@media (min-width:1920px){.xl\\:pt-1{padding-top:.25rem!important}}@media (min-width:1920px){.xl\\:pr-1{padding-right:.25rem!important}}@media (min-width:1920px){.xl\\:pb-1{padding-bottom:.25rem!important}}@media (min-width:1920px){.xl\\:pl-1{padding-left:.25rem!important}}@media (min-width:1920px){.xl\\:pt-2{padding-top:.5rem!important}}@media (min-width:1920px){.xl\\:pr-2{padding-right:.5rem!important}}@media (min-width:1920px){.xl\\:pb-2{padding-bottom:.5rem!important}}@media (min-width:1920px){.xl\\:pl-2{padding-left:.5rem!important}}@media (min-width:1920px){.xl\\:pt-3{padding-top:.75rem!important}}@media (min-width:1920px){.xl\\:pr-3{padding-right:.75rem!important}}@media (min-width:1920px){.xl\\:pb-3{padding-bottom:.75rem!important}}@media (min-width:1920px){.xl\\:pl-3{padding-left:.75rem!important}}@media (min-width:1920px){.xl\\:pt-4{padding-top:1rem!important}}@media (min-width:1920px){.xl\\:pr-4{padding-right:1rem!important}}@media (min-width:1920px){.xl\\:pb-4{padding-bottom:1rem!important}}@media (min-width:1920px){.xl\\:pl-4{padding-left:1rem!important}}@media (min-width:1920px){.xl\\:pt-5{padding-top:1.25rem!important}}@media (min-width:1920px){.xl\\:pr-5{padding-right:1.25rem!important}}@media (min-width:1920px){.xl\\:pb-5{padding-bottom:1.25rem!important}}@media (min-width:1920px){.xl\\:pl-5{padding-left:1.25rem!important}}@media (min-width:1920px){.xl\\:pt-6{padding-top:1.5rem!important}}@media (min-width:1920px){.xl\\:pr-6{padding-right:1.5rem!important}}@media (min-width:1920px){.xl\\:pb-6{padding-bottom:1.5rem!important}}@media (min-width:1920px){.xl\\:pl-6{padding-left:1.5rem!important}}@media (min-width:1920px){.xl\\:pt-8{padding-top:2rem!important}}@media (min-width:1920px){.xl\\:pr-8{padding-right:2rem!important}}@media (min-width:1920px){.xl\\:pb-8{padding-bottom:2rem!important}}@media (min-width:1920px){.xl\\:pl-8{padding-left:2rem!important}}@media (min-width:1920px){.xl\\:pt-10{padding-top:2.5rem!important}}@media (min-width:1920px){.xl\\:pr-10{padding-right:2.5rem!important}}@media (min-width:1920px){.xl\\:pb-10{padding-bottom:2.5rem!important}}@media (min-width:1920px){.xl\\:pl-10{padding-left:2.5rem!important}}@media (min-width:1920px){.xl\\:pt-12{padding-top:3rem!important}}@media (min-width:1920px){.xl\\:pr-12{padding-right:3rem!important}}@media (min-width:1920px){.xl\\:pb-12{padding-bottom:3rem!important}}@media (min-width:1920px){.xl\\:pl-12{padding-left:3rem!important}}@media (min-width:1920px){.xl\\:pt-16{padding-top:4rem!important}}@media (min-width:1920px){.xl\\:pr-16{padding-right:4rem!important}}@media (min-width:1920px){.xl\\:pb-16{padding-bottom:4rem!important}}@media (min-width:1920px){.xl\\:pl-16{padding-left:4rem!important}}@media (min-width:1920px){.xl\\:pt-20{padding-top:5rem!important}}@media (min-width:1920px){.xl\\:pr-20{padding-right:5rem!important}}@media (min-width:1920px){.xl\\:pb-20{padding-bottom:5rem!important}}@media (min-width:1920px){.xl\\:pl-20{padding-left:5rem!important}}@media (min-width:1920px){.xl\\:pt-24{padding-top:6rem!important}}@media (min-width:1920px){.xl\\:pr-24{padding-right:6rem!important}}@media (min-width:1920px){.xl\\:pb-24{padding-bottom:6rem!important}}@media (min-width:1920px){.xl\\:pl-24{padding-left:6rem!important}}@media (min-width:1920px){.xl\\:pt-32{padding-top:8rem!important}}@media (min-width:1920px){.xl\\:pr-32{padding-right:8rem!important}}@media (min-width:1920px){.xl\\:pb-32{padding-bottom:8rem!important}}@media (min-width:1920px){.xl\\:pl-32{padding-left:8rem!important}}@media (min-width:1920px){.xl\\:pt-40{padding-top:10rem!important}}@media (min-width:1920px){.xl\\:pr-40{padding-right:10rem!important}}@media (min-width:1920px){.xl\\:pb-40{padding-bottom:10rem!important}}@media (min-width:1920px){.xl\\:pl-40{padding-left:10rem!important}}@media (min-width:1920px){.xl\\:pt-48{padding-top:12rem!important}}@media (min-width:1920px){.xl\\:pr-48{padding-right:12rem!important}}@media (min-width:1920px){.xl\\:pb-48{padding-bottom:12rem!important}}@media (min-width:1920px){.xl\\:pl-48{padding-left:12rem!important}}@media (min-width:1920px){.xl\\:pt-56{padding-top:14rem!important}}@media (min-width:1920px){.xl\\:pr-56{padding-right:14rem!important}}@media (min-width:1920px){.xl\\:pb-56{padding-bottom:14rem!important}}@media (min-width:1920px){.xl\\:pl-56{padding-left:14rem!important}}@media (min-width:1920px){.xl\\:pt-64{padding-top:16rem!important}}@media (min-width:1920px){.xl\\:pr-64{padding-right:16rem!important}}@media (min-width:1920px){.xl\\:pb-64{padding-bottom:16rem!important}}@media (min-width:1920px){.xl\\:pl-64{padding-left:16rem!important}}@media (min-width:1920px){.xl\\:pt-px{padding-top:1px!important}}@media (min-width:1920px){.xl\\:pr-px{padding-right:1px!important}}@media (min-width:1920px){.xl\\:pb-px{padding-bottom:1px!important}}@media (min-width:1920px){.xl\\:pl-px{padding-left:1px!important}}@media (min-width:1920px){.xl\\:placeholder-transparent::placeholder{color:transparent!important}}@media (min-width:1920px){.xl\\:placeholder-current::placeholder{color:currentColor!important}}@media (min-width:1920px){.xl\\:placeholder-black::placeholder{--placeholder-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-white::placeholder{--placeholder-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-gray-100::placeholder{--placeholder-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-gray-200::placeholder{--placeholder-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-gray-300::placeholder{--placeholder-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-gray-400::placeholder{--placeholder-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-gray-500::placeholder{--placeholder-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-gray-600::placeholder{--placeholder-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-gray-700::placeholder{--placeholder-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-gray-800::placeholder{--placeholder-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-gray-900::placeholder{--placeholder-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-red-100::placeholder{--placeholder-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-red-200::placeholder{--placeholder-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-red-300::placeholder{--placeholder-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-red-400::placeholder{--placeholder-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-red-500::placeholder{--placeholder-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-red-600::placeholder{--placeholder-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-red-700::placeholder{--placeholder-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-red-800::placeholder{--placeholder-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-red-900::placeholder{--placeholder-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-orange-100::placeholder{--placeholder-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-orange-200::placeholder{--placeholder-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-orange-300::placeholder{--placeholder-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-orange-400::placeholder{--placeholder-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-orange-500::placeholder{--placeholder-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-orange-600::placeholder{--placeholder-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-orange-700::placeholder{--placeholder-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-orange-800::placeholder{--placeholder-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-orange-900::placeholder{--placeholder-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-yellow-100::placeholder{--placeholder-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-yellow-200::placeholder{--placeholder-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-yellow-300::placeholder{--placeholder-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-yellow-400::placeholder{--placeholder-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-yellow-500::placeholder{--placeholder-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-yellow-600::placeholder{--placeholder-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-yellow-700::placeholder{--placeholder-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-yellow-800::placeholder{--placeholder-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-yellow-900::placeholder{--placeholder-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-green-100::placeholder{--placeholder-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-green-200::placeholder{--placeholder-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-green-300::placeholder{--placeholder-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-green-400::placeholder{--placeholder-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-green-500::placeholder{--placeholder-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-green-600::placeholder{--placeholder-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-green-700::placeholder{--placeholder-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-green-800::placeholder{--placeholder-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-green-900::placeholder{--placeholder-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-teal-100::placeholder{--placeholder-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-teal-200::placeholder{--placeholder-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-teal-300::placeholder{--placeholder-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-teal-400::placeholder{--placeholder-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-teal-500::placeholder{--placeholder-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-teal-600::placeholder{--placeholder-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-teal-700::placeholder{--placeholder-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-teal-800::placeholder{--placeholder-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-teal-900::placeholder{--placeholder-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-blue-100::placeholder{--placeholder-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-blue-200::placeholder{--placeholder-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-blue-300::placeholder{--placeholder-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-blue-400::placeholder{--placeholder-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-blue-500::placeholder{--placeholder-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-blue-600::placeholder{--placeholder-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-blue-700::placeholder{--placeholder-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-blue-800::placeholder{--placeholder-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-blue-900::placeholder{--placeholder-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-indigo-100::placeholder{--placeholder-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-indigo-200::placeholder{--placeholder-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-indigo-300::placeholder{--placeholder-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-indigo-400::placeholder{--placeholder-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-indigo-500::placeholder{--placeholder-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-indigo-600::placeholder{--placeholder-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-indigo-700::placeholder{--placeholder-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-indigo-800::placeholder{--placeholder-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-indigo-900::placeholder{--placeholder-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-purple-100::placeholder{--placeholder-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-purple-200::placeholder{--placeholder-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-purple-300::placeholder{--placeholder-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-purple-400::placeholder{--placeholder-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-purple-500::placeholder{--placeholder-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-purple-600::placeholder{--placeholder-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-purple-700::placeholder{--placeholder-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-purple-800::placeholder{--placeholder-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-purple-900::placeholder{--placeholder-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-pink-100::placeholder{--placeholder-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-pink-200::placeholder{--placeholder-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-pink-300::placeholder{--placeholder-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-pink-400::placeholder{--placeholder-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-pink-500::placeholder{--placeholder-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-pink-600::placeholder{--placeholder-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-pink-700::placeholder{--placeholder-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-pink-800::placeholder{--placeholder-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-pink-900::placeholder{--placeholder-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-transparent:focus::placeholder{color:transparent!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-current:focus::placeholder{color:currentColor!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-black:focus::placeholder{--placeholder-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-white:focus::placeholder{--placeholder-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-gray-100:focus::placeholder{--placeholder-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-gray-200:focus::placeholder{--placeholder-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-gray-300:focus::placeholder{--placeholder-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-gray-400:focus::placeholder{--placeholder-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-gray-500:focus::placeholder{--placeholder-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-gray-600:focus::placeholder{--placeholder-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-gray-700:focus::placeholder{--placeholder-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-gray-800:focus::placeholder{--placeholder-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-gray-900:focus::placeholder{--placeholder-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-red-100:focus::placeholder{--placeholder-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-red-200:focus::placeholder{--placeholder-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-red-300:focus::placeholder{--placeholder-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-red-400:focus::placeholder{--placeholder-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-red-500:focus::placeholder{--placeholder-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-red-600:focus::placeholder{--placeholder-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-red-700:focus::placeholder{--placeholder-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-red-800:focus::placeholder{--placeholder-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-red-900:focus::placeholder{--placeholder-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-orange-100:focus::placeholder{--placeholder-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-orange-200:focus::placeholder{--placeholder-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-orange-300:focus::placeholder{--placeholder-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-orange-400:focus::placeholder{--placeholder-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-orange-500:focus::placeholder{--placeholder-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-orange-600:focus::placeholder{--placeholder-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-orange-700:focus::placeholder{--placeholder-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-orange-800:focus::placeholder{--placeholder-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-orange-900:focus::placeholder{--placeholder-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-yellow-100:focus::placeholder{--placeholder-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-yellow-200:focus::placeholder{--placeholder-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-yellow-300:focus::placeholder{--placeholder-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-yellow-400:focus::placeholder{--placeholder-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-yellow-500:focus::placeholder{--placeholder-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-yellow-600:focus::placeholder{--placeholder-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-yellow-700:focus::placeholder{--placeholder-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-yellow-800:focus::placeholder{--placeholder-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-yellow-900:focus::placeholder{--placeholder-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-green-100:focus::placeholder{--placeholder-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-green-200:focus::placeholder{--placeholder-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-green-300:focus::placeholder{--placeholder-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-green-400:focus::placeholder{--placeholder-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-green-500:focus::placeholder{--placeholder-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-green-600:focus::placeholder{--placeholder-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-green-700:focus::placeholder{--placeholder-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-green-800:focus::placeholder{--placeholder-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-green-900:focus::placeholder{--placeholder-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-teal-100:focus::placeholder{--placeholder-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-teal-200:focus::placeholder{--placeholder-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-teal-300:focus::placeholder{--placeholder-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-teal-400:focus::placeholder{--placeholder-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-teal-500:focus::placeholder{--placeholder-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-teal-600:focus::placeholder{--placeholder-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-teal-700:focus::placeholder{--placeholder-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-teal-800:focus::placeholder{--placeholder-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-teal-900:focus::placeholder{--placeholder-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-blue-100:focus::placeholder{--placeholder-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-blue-200:focus::placeholder{--placeholder-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-blue-300:focus::placeholder{--placeholder-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-blue-400:focus::placeholder{--placeholder-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-blue-500:focus::placeholder{--placeholder-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-blue-600:focus::placeholder{--placeholder-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-blue-700:focus::placeholder{--placeholder-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-blue-800:focus::placeholder{--placeholder-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-blue-900:focus::placeholder{--placeholder-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-indigo-100:focus::placeholder{--placeholder-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-indigo-200:focus::placeholder{--placeholder-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-indigo-300:focus::placeholder{--placeholder-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-indigo-400:focus::placeholder{--placeholder-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-indigo-500:focus::placeholder{--placeholder-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-indigo-600:focus::placeholder{--placeholder-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-indigo-700:focus::placeholder{--placeholder-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-indigo-800:focus::placeholder{--placeholder-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-indigo-900:focus::placeholder{--placeholder-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-purple-100:focus::placeholder{--placeholder-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-purple-200:focus::placeholder{--placeholder-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-purple-300:focus::placeholder{--placeholder-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-purple-400:focus::placeholder{--placeholder-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-purple-500:focus::placeholder{--placeholder-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-purple-600:focus::placeholder{--placeholder-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-purple-700:focus::placeholder{--placeholder-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-purple-800:focus::placeholder{--placeholder-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-purple-900:focus::placeholder{--placeholder-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-pink-100:focus::placeholder{--placeholder-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-pink-200:focus::placeholder{--placeholder-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-pink-300:focus::placeholder{--placeholder-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-pink-400:focus::placeholder{--placeholder-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-pink-500:focus::placeholder{--placeholder-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-pink-600:focus::placeholder{--placeholder-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-pink-700:focus::placeholder{--placeholder-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-pink-800:focus::placeholder{--placeholder-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-pink-900:focus::placeholder{--placeholder-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--placeholder-opacity))!important}}@media (min-width:1920px){.xl\\:placeholder-opacity-0::placeholder{--placeholder-opacity:0!important}}@media (min-width:1920px){.xl\\:placeholder-opacity-25::placeholder{--placeholder-opacity:0.25!important}}@media (min-width:1920px){.xl\\:placeholder-opacity-50::placeholder{--placeholder-opacity:0.5!important}}@media (min-width:1920px){.xl\\:placeholder-opacity-75::placeholder{--placeholder-opacity:0.75!important}}@media (min-width:1920px){.xl\\:placeholder-opacity-100::placeholder{--placeholder-opacity:1!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-opacity-0:focus::placeholder{--placeholder-opacity:0!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-opacity-25:focus::placeholder{--placeholder-opacity:0.25!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-opacity-50:focus::placeholder{--placeholder-opacity:0.5!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-opacity-75:focus::placeholder{--placeholder-opacity:0.75!important}}@media (min-width:1920px){.xl\\:focus\\:placeholder-opacity-100:focus::placeholder{--placeholder-opacity:1!important}}@media (min-width:1920px){.xl\\:pointer-events-none{pointer-events:none!important}}@media (min-width:1920px){.xl\\:pointer-events-auto{pointer-events:auto!important}}@media (min-width:1920px){.xl\\:static{position:static!important}}@media (min-width:1920px){.xl\\:fixed{position:fixed!important}}@media (min-width:1920px){.xl\\:absolute{position:absolute!important}}@media (min-width:1920px){.xl\\:relative{position:relative!important}}@media (min-width:1920px){.xl\\:sticky{position:sticky!important}}@media (min-width:1920px){.xl\\:inset-0{top:0!important;right:0!important;bottom:0!important;left:0!important}}@media (min-width:1920px){.xl\\:inset-auto{top:auto!important;right:auto!important;bottom:auto!important;left:auto!important}}@media (min-width:1920px){.xl\\:inset-y-0{top:0!important;bottom:0!important}}@media (min-width:1920px){.xl\\:inset-x-0{right:0!important;left:0!important}}@media (min-width:1920px){.xl\\:inset-y-auto{top:auto!important;bottom:auto!important}}@media (min-width:1920px){.xl\\:inset-x-auto{right:auto!important;left:auto!important}}@media (min-width:1920px){.xl\\:top-0{top:0!important}}@media (min-width:1920px){.xl\\:right-0{right:0!important}}@media (min-width:1920px){.xl\\:bottom-0{bottom:0!important}}@media (min-width:1920px){.xl\\:left-0{left:0!important}}@media (min-width:1920px){.xl\\:top-auto{top:auto!important}}@media (min-width:1920px){.xl\\:right-auto{right:auto!important}}@media (min-width:1920px){.xl\\:bottom-auto{bottom:auto!important}}@media (min-width:1920px){.xl\\:left-auto{left:auto!important}}@media (min-width:1920px){.xl\\:resize-none{resize:none!important}}@media (min-width:1920px){.xl\\:resize-y{resize:vertical!important}}@media (min-width:1920px){.xl\\:resize-x{resize:horizontal!important}}@media (min-width:1920px){.xl\\:resize{resize:both!important}}@media (min-width:1920px){.xl\\:shadow-xs{box-shadow:0 0 0 1px rgba(0,0,0,.05)!important}}@media (min-width:1920px){.xl\\:shadow-sm{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important}}@media (min-width:1920px){.xl\\:shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)!important}}@media (min-width:1920px){.xl\\:shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)!important}}@media (min-width:1920px){.xl\\:shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)!important}}@media (min-width:1920px){.xl\\:shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)!important}}@media (min-width:1920px){.xl\\:shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important}}@media (min-width:1920px){.xl\\:shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)!important}}@media (min-width:1920px){.xl\\:shadow-outline{box-shadow:0 0 0 3px rgba(66,153,225,.5)!important}}@media (min-width:1920px){.xl\\:shadow-none{box-shadow:none!important}}@media (min-width:1920px){.xl\\:hover\\:shadow-xs:hover{box-shadow:0 0 0 1px rgba(0,0,0,.05)!important}}@media (min-width:1920px){.xl\\:hover\\:shadow-sm:hover{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important}}@media (min-width:1920px){.xl\\:hover\\:shadow:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)!important}}@media (min-width:1920px){.xl\\:hover\\:shadow-md:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)!important}}@media (min-width:1920px){.xl\\:hover\\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)!important}}@media (min-width:1920px){.xl\\:hover\\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)!important}}@media (min-width:1920px){.xl\\:hover\\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important}}@media (min-width:1920px){.xl\\:hover\\:shadow-inner:hover{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)!important}}@media (min-width:1920px){.xl\\:hover\\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(66,153,225,.5)!important}}@media (min-width:1920px){.xl\\:hover\\:shadow-none:hover{box-shadow:none!important}}@media (min-width:1920px){.xl\\:focus\\:shadow-xs:focus{box-shadow:0 0 0 1px rgba(0,0,0,.05)!important}}@media (min-width:1920px){.xl\\:focus\\:shadow-sm:focus{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important}}@media (min-width:1920px){.xl\\:focus\\:shadow:focus{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)!important}}@media (min-width:1920px){.xl\\:focus\\:shadow-md:focus{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)!important}}@media (min-width:1920px){.xl\\:focus\\:shadow-lg:focus{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)!important}}@media (min-width:1920px){.xl\\:focus\\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)!important}}@media (min-width:1920px){.xl\\:focus\\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important}}@media (min-width:1920px){.xl\\:focus\\:shadow-inner:focus{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)!important}}@media (min-width:1920px){.xl\\:focus\\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(66,153,225,.5)!important}}@media (min-width:1920px){.xl\\:focus\\:shadow-none:focus{box-shadow:none!important}}@media (min-width:1920px){.xl\\:fill-current{fill:currentColor!important}}@media (min-width:1920px){.xl\\:stroke-current{stroke:currentColor!important}}@media (min-width:1920px){.xl\\:stroke-0{stroke-width:0!important}}@media (min-width:1920px){.xl\\:stroke-1{stroke-width:1!important}}@media (min-width:1920px){.xl\\:stroke-2{stroke-width:2!important}}@media (min-width:1920px){.xl\\:table-auto{table-layout:auto!important}}@media (min-width:1920px){.xl\\:table-fixed{table-layout:fixed!important}}@media (min-width:1920px){.xl\\:text-left{text-align:left!important}}@media (min-width:1920px){.xl\\:text-center{text-align:center!important}}@media (min-width:1920px){.xl\\:text-right{text-align:right!important}}@media (min-width:1920px){.xl\\:text-justify{text-align:justify!important}}@media (min-width:1920px){.xl\\:text-transparent{color:transparent!important}}@media (min-width:1920px){.xl\\:text-current{color:currentColor!important}}@media (min-width:1920px){.xl\\:text-black{--text-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-white{--text-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-gray-100{--text-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-gray-200{--text-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-gray-300{--text-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-gray-400{--text-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-gray-500{--text-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-gray-600{--text-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-gray-700{--text-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-gray-800{--text-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-gray-900{--text-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-red-100{--text-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-red-200{--text-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-red-300{--text-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-red-400{--text-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-red-500{--text-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-red-600{--text-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-red-700{--text-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-red-800{--text-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-red-900{--text-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-orange-100{--text-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-orange-200{--text-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-orange-300{--text-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-orange-400{--text-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-orange-500{--text-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-orange-600{--text-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-orange-700{--text-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-orange-800{--text-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-orange-900{--text-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-yellow-100{--text-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-yellow-200{--text-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-yellow-300{--text-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-yellow-400{--text-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-yellow-500{--text-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-yellow-600{--text-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-yellow-700{--text-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-yellow-800{--text-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-yellow-900{--text-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-green-100{--text-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-green-200{--text-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-green-300{--text-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-green-400{--text-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-green-500{--text-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-green-600{--text-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-green-700{--text-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-green-800{--text-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-green-900{--text-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-teal-100{--text-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-teal-200{--text-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-teal-300{--text-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-teal-400{--text-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-teal-500{--text-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-teal-600{--text-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-teal-700{--text-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-teal-800{--text-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-teal-900{--text-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-blue-100{--text-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-blue-200{--text-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-blue-300{--text-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-blue-400{--text-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-blue-500{--text-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-blue-600{--text-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-blue-700{--text-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-blue-800{--text-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-blue-900{--text-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-indigo-100{--text-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-indigo-200{--text-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-indigo-300{--text-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-indigo-400{--text-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-indigo-500{--text-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-indigo-600{--text-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-indigo-700{--text-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-indigo-800{--text-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-indigo-900{--text-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-purple-100{--text-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-purple-200{--text-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-purple-300{--text-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-purple-400{--text-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-purple-500{--text-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-purple-600{--text-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-purple-700{--text-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-purple-800{--text-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-purple-900{--text-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-pink-100{--text-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-pink-200{--text-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-pink-300{--text-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-pink-400{--text-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-pink-500{--text-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-pink-600{--text-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-pink-700{--text-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-pink-800{--text-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-pink-900{--text-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-transparent:hover{color:transparent!important}}@media (min-width:1920px){.xl\\:hover\\:text-current:hover{color:currentColor!important}}@media (min-width:1920px){.xl\\:hover\\:text-black:hover{--text-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-white:hover{--text-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-gray-100:hover{--text-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-gray-200:hover{--text-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-gray-300:hover{--text-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-gray-400:hover{--text-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-gray-500:hover{--text-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-gray-600:hover{--text-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-gray-700:hover{--text-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-gray-800:hover{--text-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-gray-900:hover{--text-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-red-100:hover{--text-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-red-200:hover{--text-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-red-300:hover{--text-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-red-400:hover{--text-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-red-500:hover{--text-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-red-600:hover{--text-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-red-700:hover{--text-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-red-800:hover{--text-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-red-900:hover{--text-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-orange-100:hover{--text-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-orange-200:hover{--text-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-orange-300:hover{--text-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-orange-400:hover{--text-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-orange-500:hover{--text-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-orange-600:hover{--text-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-orange-700:hover{--text-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-orange-800:hover{--text-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-orange-900:hover{--text-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-yellow-100:hover{--text-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-yellow-200:hover{--text-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-yellow-300:hover{--text-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-yellow-400:hover{--text-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-yellow-500:hover{--text-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-yellow-600:hover{--text-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-yellow-700:hover{--text-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-yellow-800:hover{--text-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-yellow-900:hover{--text-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-green-100:hover{--text-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-green-200:hover{--text-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-green-300:hover{--text-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-green-400:hover{--text-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-green-500:hover{--text-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-green-600:hover{--text-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-green-700:hover{--text-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-green-800:hover{--text-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-green-900:hover{--text-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-teal-100:hover{--text-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-teal-200:hover{--text-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-teal-300:hover{--text-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-teal-400:hover{--text-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-teal-500:hover{--text-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-teal-600:hover{--text-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-teal-700:hover{--text-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-teal-800:hover{--text-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-teal-900:hover{--text-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-blue-100:hover{--text-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-blue-200:hover{--text-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-blue-300:hover{--text-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-blue-400:hover{--text-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-blue-500:hover{--text-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-blue-600:hover{--text-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-blue-700:hover{--text-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-blue-800:hover{--text-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-blue-900:hover{--text-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-indigo-100:hover{--text-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-indigo-200:hover{--text-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-indigo-300:hover{--text-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-indigo-400:hover{--text-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-indigo-500:hover{--text-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-indigo-600:hover{--text-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-indigo-700:hover{--text-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-indigo-800:hover{--text-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-indigo-900:hover{--text-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-purple-100:hover{--text-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-purple-200:hover{--text-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-purple-300:hover{--text-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-purple-400:hover{--text-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-purple-500:hover{--text-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-purple-600:hover{--text-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-purple-700:hover{--text-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-purple-800:hover{--text-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-purple-900:hover{--text-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-pink-100:hover{--text-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-pink-200:hover{--text-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-pink-300:hover{--text-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-pink-400:hover{--text-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-pink-500:hover{--text-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-pink-600:hover{--text-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-pink-700:hover{--text-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-pink-800:hover{--text-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:hover\\:text-pink-900:hover{--text-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-transparent:focus{color:transparent!important}}@media (min-width:1920px){.xl\\:focus\\:text-current:focus{color:currentColor!important}}@media (min-width:1920px){.xl\\:focus\\:text-black:focus{--text-opacity:1!important;color:#000!important;color:rgba(0,0,0,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-white:focus{--text-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-gray-100:focus{--text-opacity:1!important;color:#f7fafc!important;color:rgba(247,250,252,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-gray-200:focus{--text-opacity:1!important;color:#edf2f7!important;color:rgba(237,242,247,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-gray-300:focus{--text-opacity:1!important;color:#e2e8f0!important;color:rgba(226,232,240,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-gray-400:focus{--text-opacity:1!important;color:#cbd5e0!important;color:rgba(203,213,224,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-gray-500:focus{--text-opacity:1!important;color:#a0aec0!important;color:rgba(160,174,192,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-gray-600:focus{--text-opacity:1!important;color:#718096!important;color:rgba(113,128,150,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-gray-700:focus{--text-opacity:1!important;color:#4a5568!important;color:rgba(74,85,104,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-gray-800:focus{--text-opacity:1!important;color:#2d3748!important;color:rgba(45,55,72,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-gray-900:focus{--text-opacity:1!important;color:#1a202c!important;color:rgba(26,32,44,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-red-100:focus{--text-opacity:1!important;color:#fff5f5!important;color:rgba(255,245,245,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-red-200:focus{--text-opacity:1!important;color:#fed7d7!important;color:rgba(254,215,215,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-red-300:focus{--text-opacity:1!important;color:#feb2b2!important;color:rgba(254,178,178,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-red-400:focus{--text-opacity:1!important;color:#fc8181!important;color:rgba(252,129,129,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-red-500:focus{--text-opacity:1!important;color:#f56565!important;color:rgba(245,101,101,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-red-600:focus{--text-opacity:1!important;color:#e53e3e!important;color:rgba(229,62,62,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-red-700:focus{--text-opacity:1!important;color:#c53030!important;color:rgba(197,48,48,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-red-800:focus{--text-opacity:1!important;color:#9b2c2c!important;color:rgba(155,44,44,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-red-900:focus{--text-opacity:1!important;color:#742a2a!important;color:rgba(116,42,42,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-orange-100:focus{--text-opacity:1!important;color:#fffaf0!important;color:rgba(255,250,240,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-orange-200:focus{--text-opacity:1!important;color:#feebc8!important;color:rgba(254,235,200,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-orange-300:focus{--text-opacity:1!important;color:#fbd38d!important;color:rgba(251,211,141,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-orange-400:focus{--text-opacity:1!important;color:#f6ad55!important;color:rgba(246,173,85,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-orange-500:focus{--text-opacity:1!important;color:#ed8936!important;color:rgba(237,137,54,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-orange-600:focus{--text-opacity:1!important;color:#dd6b20!important;color:rgba(221,107,32,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-orange-700:focus{--text-opacity:1!important;color:#c05621!important;color:rgba(192,86,33,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-orange-800:focus{--text-opacity:1!important;color:#9c4221!important;color:rgba(156,66,33,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-orange-900:focus{--text-opacity:1!important;color:#7b341e!important;color:rgba(123,52,30,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-yellow-100:focus{--text-opacity:1!important;color:ivory!important;color:rgba(255,255,240,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-yellow-200:focus{--text-opacity:1!important;color:#fefcbf!important;color:rgba(254,252,191,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-yellow-300:focus{--text-opacity:1!important;color:#faf089!important;color:rgba(250,240,137,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-yellow-400:focus{--text-opacity:1!important;color:#f6e05e!important;color:rgba(246,224,94,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-yellow-500:focus{--text-opacity:1!important;color:#ecc94b!important;color:rgba(236,201,75,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-yellow-600:focus{--text-opacity:1!important;color:#d69e2e!important;color:rgba(214,158,46,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-yellow-700:focus{--text-opacity:1!important;color:#b7791f!important;color:rgba(183,121,31,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-yellow-800:focus{--text-opacity:1!important;color:#975a16!important;color:rgba(151,90,22,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-yellow-900:focus{--text-opacity:1!important;color:#744210!important;color:rgba(116,66,16,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-green-100:focus{--text-opacity:1!important;color:#f0fff4!important;color:rgba(240,255,244,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-green-200:focus{--text-opacity:1!important;color:#c6f6d5!important;color:rgba(198,246,213,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-green-300:focus{--text-opacity:1!important;color:#9ae6b4!important;color:rgba(154,230,180,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-green-400:focus{--text-opacity:1!important;color:#68d391!important;color:rgba(104,211,145,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-green-500:focus{--text-opacity:1!important;color:#48bb78!important;color:rgba(72,187,120,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-green-600:focus{--text-opacity:1!important;color:#38a169!important;color:rgba(56,161,105,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-green-700:focus{--text-opacity:1!important;color:#2f855a!important;color:rgba(47,133,90,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-green-800:focus{--text-opacity:1!important;color:#276749!important;color:rgba(39,103,73,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-green-900:focus{--text-opacity:1!important;color:#22543d!important;color:rgba(34,84,61,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-teal-100:focus{--text-opacity:1!important;color:#e6fffa!important;color:rgba(230,255,250,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-teal-200:focus{--text-opacity:1!important;color:#b2f5ea!important;color:rgba(178,245,234,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-teal-300:focus{--text-opacity:1!important;color:#81e6d9!important;color:rgba(129,230,217,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-teal-400:focus{--text-opacity:1!important;color:#4fd1c5!important;color:rgba(79,209,197,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-teal-500:focus{--text-opacity:1!important;color:#38b2ac!important;color:rgba(56,178,172,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-teal-600:focus{--text-opacity:1!important;color:#319795!important;color:rgba(49,151,149,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-teal-700:focus{--text-opacity:1!important;color:#2c7a7b!important;color:rgba(44,122,123,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-teal-800:focus{--text-opacity:1!important;color:#285e61!important;color:rgba(40,94,97,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-teal-900:focus{--text-opacity:1!important;color:#234e52!important;color:rgba(35,78,82,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-blue-100:focus{--text-opacity:1!important;color:#ebf8ff!important;color:rgba(235,248,255,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-blue-200:focus{--text-opacity:1!important;color:#bee3f8!important;color:rgba(190,227,248,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-blue-300:focus{--text-opacity:1!important;color:#90cdf4!important;color:rgba(144,205,244,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-blue-400:focus{--text-opacity:1!important;color:#63b3ed!important;color:rgba(99,179,237,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-blue-500:focus{--text-opacity:1!important;color:#4299e1!important;color:rgba(66,153,225,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-blue-600:focus{--text-opacity:1!important;color:#3182ce!important;color:rgba(49,130,206,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-blue-700:focus{--text-opacity:1!important;color:#2b6cb0!important;color:rgba(43,108,176,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-blue-800:focus{--text-opacity:1!important;color:#2c5282!important;color:rgba(44,82,130,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-blue-900:focus{--text-opacity:1!important;color:#2a4365!important;color:rgba(42,67,101,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-indigo-100:focus{--text-opacity:1!important;color:#ebf4ff!important;color:rgba(235,244,255,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-indigo-200:focus{--text-opacity:1!important;color:#c3dafe!important;color:rgba(195,218,254,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-indigo-300:focus{--text-opacity:1!important;color:#a3bffa!important;color:rgba(163,191,250,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-indigo-400:focus{--text-opacity:1!important;color:#7f9cf5!important;color:rgba(127,156,245,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-indigo-500:focus{--text-opacity:1!important;color:#667eea!important;color:rgba(102,126,234,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-indigo-600:focus{--text-opacity:1!important;color:#5a67d8!important;color:rgba(90,103,216,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-indigo-700:focus{--text-opacity:1!important;color:#4c51bf!important;color:rgba(76,81,191,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-indigo-800:focus{--text-opacity:1!important;color:#434190!important;color:rgba(67,65,144,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-indigo-900:focus{--text-opacity:1!important;color:#3c366b!important;color:rgba(60,54,107,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-purple-100:focus{--text-opacity:1!important;color:#faf5ff!important;color:rgba(250,245,255,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-purple-200:focus{--text-opacity:1!important;color:#e9d8fd!important;color:rgba(233,216,253,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-purple-300:focus{--text-opacity:1!important;color:#d6bcfa!important;color:rgba(214,188,250,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-purple-400:focus{--text-opacity:1!important;color:#b794f4!important;color:rgba(183,148,244,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-purple-500:focus{--text-opacity:1!important;color:#9f7aea!important;color:rgba(159,122,234,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-purple-600:focus{--text-opacity:1!important;color:#805ad5!important;color:rgba(128,90,213,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-purple-700:focus{--text-opacity:1!important;color:#6b46c1!important;color:rgba(107,70,193,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-purple-800:focus{--text-opacity:1!important;color:#553c9a!important;color:rgba(85,60,154,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-purple-900:focus{--text-opacity:1!important;color:#44337a!important;color:rgba(68,51,122,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-pink-100:focus{--text-opacity:1!important;color:#fff5f7!important;color:rgba(255,245,247,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-pink-200:focus{--text-opacity:1!important;color:#fed7e2!important;color:rgba(254,215,226,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-pink-300:focus{--text-opacity:1!important;color:#fbb6ce!important;color:rgba(251,182,206,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-pink-400:focus{--text-opacity:1!important;color:#f687b3!important;color:rgba(246,135,179,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-pink-500:focus{--text-opacity:1!important;color:#ed64a6!important;color:rgba(237,100,166,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-pink-600:focus{--text-opacity:1!important;color:#d53f8c!important;color:rgba(213,63,140,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-pink-700:focus{--text-opacity:1!important;color:#b83280!important;color:rgba(184,50,128,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-pink-800:focus{--text-opacity:1!important;color:#97266d!important;color:rgba(151,38,109,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:focus\\:text-pink-900:focus{--text-opacity:1!important;color:#702459!important;color:rgba(112,36,89,var(--text-opacity))!important}}@media (min-width:1920px){.xl\\:text-opacity-0{--text-opacity:0!important}}@media (min-width:1920px){.xl\\:text-opacity-25{--text-opacity:0.25!important}}@media (min-width:1920px){.xl\\:text-opacity-50{--text-opacity:0.5!important}}@media (min-width:1920px){.xl\\:text-opacity-75{--text-opacity:0.75!important}}@media (min-width:1920px){.xl\\:text-opacity-100{--text-opacity:1!important}}@media (min-width:1920px){.xl\\:hover\\:text-opacity-0:hover{--text-opacity:0!important}}@media (min-width:1920px){.xl\\:hover\\:text-opacity-25:hover{--text-opacity:0.25!important}}@media (min-width:1920px){.xl\\:hover\\:text-opacity-50:hover{--text-opacity:0.5!important}}@media (min-width:1920px){.xl\\:hover\\:text-opacity-75:hover{--text-opacity:0.75!important}}@media (min-width:1920px){.xl\\:hover\\:text-opacity-100:hover{--text-opacity:1!important}}@media (min-width:1920px){.xl\\:focus\\:text-opacity-0:focus{--text-opacity:0!important}}@media (min-width:1920px){.xl\\:focus\\:text-opacity-25:focus{--text-opacity:0.25!important}}@media (min-width:1920px){.xl\\:focus\\:text-opacity-50:focus{--text-opacity:0.5!important}}@media (min-width:1920px){.xl\\:focus\\:text-opacity-75:focus{--text-opacity:0.75!important}}@media (min-width:1920px){.xl\\:focus\\:text-opacity-100:focus{--text-opacity:1!important}}@media (min-width:1920px){.xl\\:italic{font-style:italic!important}}@media (min-width:1920px){.xl\\:not-italic{font-style:normal!important}}@media (min-width:1920px){.xl\\:uppercase{text-transform:uppercase!important}}@media (min-width:1920px){.xl\\:lowercase{text-transform:lowercase!important}}@media (min-width:1920px){.xl\\:capitalize{text-transform:capitalize!important}}@media (min-width:1920px){.xl\\:normal-case{text-transform:none!important}}@media (min-width:1920px){.xl\\:underline{text-decoration:underline!important}}@media (min-width:1920px){.xl\\:line-through{text-decoration:line-through!important}}@media (min-width:1920px){.xl\\:no-underline{text-decoration:none!important}}@media (min-width:1920px){.xl\\:hover\\:underline:hover{text-decoration:underline!important}}@media (min-width:1920px){.xl\\:hover\\:line-through:hover{text-decoration:line-through!important}}@media (min-width:1920px){.xl\\:hover\\:no-underline:hover{text-decoration:none!important}}@media (min-width:1920px){.xl\\:focus\\:underline:focus{text-decoration:underline!important}}@media (min-width:1920px){.xl\\:focus\\:line-through:focus{text-decoration:line-through!important}}@media (min-width:1920px){.xl\\:focus\\:no-underline:focus{text-decoration:none!important}}@media (min-width:1920px){.xl\\:antialiased{-webkit-font-smoothing:antialiased!important;-moz-osx-font-smoothing:grayscale!important}}@media (min-width:1920px){.xl\\:subpixel-antialiased{-webkit-font-smoothing:auto!important;-moz-osx-font-smoothing:auto!important}}@media (min-width:1920px){.xl\\:diagonal-fractions,.xl\\:lining-nums,.xl\\:oldstyle-nums,.xl\\:ordinal,.xl\\:proportional-nums,.xl\\:slashed-zero,.xl\\:stacked-fractions,.xl\\:tabular-nums{--font-variant-numeric-ordinal:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-slashed-zero:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-figure:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-spacing:var(--tailwind-empty,/*!*/ /*!*/)!important;--font-variant-numeric-fraction:var(--tailwind-empty,/*!*/ /*!*/)!important;font-variant-numeric:var(--font-variant-numeric-ordinal) var(--font-variant-numeric-slashed-zero) var(--font-variant-numeric-figure) var(--font-variant-numeric-spacing) var(--font-variant-numeric-fraction)!important}}@media (min-width:1920px){.xl\\:normal-nums{font-variant-numeric:normal!important}}@media (min-width:1920px){.xl\\:ordinal{--font-variant-numeric-ordinal:ordinal!important}}@media (min-width:1920px){.xl\\:slashed-zero{--font-variant-numeric-slashed-zero:slashed-zero!important}}@media (min-width:1920px){.xl\\:lining-nums{--font-variant-numeric-figure:lining-nums!important}}@media (min-width:1920px){.xl\\:oldstyle-nums{--font-variant-numeric-figure:oldstyle-nums!important}}@media (min-width:1920px){.xl\\:proportional-nums{--font-variant-numeric-spacing:proportional-nums!important}}@media (min-width:1920px){.xl\\:tabular-nums{--font-variant-numeric-spacing:tabular-nums!important}}@media (min-width:1920px){.xl\\:diagonal-fractions{--font-variant-numeric-fraction:diagonal-fractions!important}}@media (min-width:1920px){.xl\\:stacked-fractions{--font-variant-numeric-fraction:stacked-fractions!important}}@media (min-width:1920px){.xl\\:tracking-tighter{letter-spacing:-.05em!important}}@media (min-width:1920px){.xl\\:tracking-tight{letter-spacing:-.025em!important}}@media (min-width:1920px){.xl\\:tracking-normal{letter-spacing:0!important}}@media (min-width:1920px){.xl\\:tracking-wide{letter-spacing:.025em!important}}@media (min-width:1920px){.xl\\:tracking-wider{letter-spacing:.05em!important}}@media (min-width:1920px){.xl\\:tracking-widest{letter-spacing:.1em!important}}@media (min-width:1920px){.xl\\:select-none{-webkit-user-select:none!important;user-select:none!important}}@media (min-width:1920px){.xl\\:select-text{-webkit-user-select:text!important;user-select:text!important}}@media (min-width:1920px){.xl\\:select-all{-webkit-user-select:all!important;user-select:all!important}}@media (min-width:1920px){.xl\\:select-auto{-webkit-user-select:auto!important;user-select:auto!important}}@media (min-width:1920px){.xl\\:align-baseline{vertical-align:initial!important}}@media (min-width:1920px){.xl\\:align-top{vertical-align:top!important}}@media (min-width:1920px){.xl\\:align-middle{vertical-align:middle!important}}@media (min-width:1920px){.xl\\:align-bottom{vertical-align:bottom!important}}@media (min-width:1920px){.xl\\:align-text-top{vertical-align:text-top!important}}@media (min-width:1920px){.xl\\:align-text-bottom{vertical-align:text-bottom!important}}@media (min-width:1920px){.xl\\:visible{visibility:visible!important}}@media (min-width:1920px){.xl\\:invisible{visibility:hidden!important}}@media (min-width:1920px){.xl\\:whitespace-normal{white-space:normal!important}}@media (min-width:1920px){.xl\\:whitespace-no-wrap{white-space:nowrap!important}}@media (min-width:1920px){.xl\\:whitespace-pre{white-space:pre!important}}@media (min-width:1920px){.xl\\:whitespace-pre-line{white-space:pre-line!important}}@media (min-width:1920px){.xl\\:whitespace-pre-wrap{white-space:pre-wrap!important}}@media (min-width:1920px){.xl\\:break-normal{word-wrap:normal!important;overflow-wrap:normal!important;word-break:normal!important}}@media (min-width:1920px){.xl\\:break-words{word-wrap:break-word!important;overflow-wrap:break-word!important}}@media (min-width:1920px){.xl\\:break-all{word-break:break-all!important}}@media (min-width:1920px){.xl\\:truncate{overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}}@media (min-width:1920px){.xl\\:w-0{width:0!important}}@media (min-width:1920px){.xl\\:w-1{width:.25rem!important}}@media (min-width:1920px){.xl\\:w-2{width:.5rem!important}}@media (min-width:1920px){.xl\\:w-3{width:.75rem!important}}@media (min-width:1920px){.xl\\:w-4{width:1rem!important}}@media (min-width:1920px){.xl\\:w-5{width:1.25rem!important}}@media (min-width:1920px){.xl\\:w-6{width:1.5rem!important}}@media (min-width:1920px){.xl\\:w-8{width:2rem!important}}@media (min-width:1920px){.xl\\:w-10{width:2.5rem!important}}@media (min-width:1920px){.xl\\:w-12{width:3rem!important}}@media (min-width:1920px){.xl\\:w-16{width:4rem!important}}@media (min-width:1920px){.xl\\:w-20{width:5rem!important}}@media (min-width:1920px){.xl\\:w-24{width:6rem!important}}@media (min-width:1920px){.xl\\:w-32{width:8rem!important}}@media (min-width:1920px){.xl\\:w-40{width:10rem!important}}@media (min-width:1920px){.xl\\:w-48{width:12rem!important}}@media (min-width:1920px){.xl\\:w-56{width:14rem!important}}@media (min-width:1920px){.xl\\:w-64{width:16rem!important}}@media (min-width:1920px){.xl\\:w-auto{width:auto!important}}@media (min-width:1920px){.xl\\:w-px{width:1px!important}}@media (min-width:1920px){.xl\\:w-1\\/2{width:50%!important}}@media (min-width:1920px){.xl\\:w-1\\/3{width:33.333333%!important}}@media (min-width:1920px){.xl\\:w-2\\/3{width:66.666667%!important}}@media (min-width:1920px){.xl\\:w-1\\/4{width:25%!important}}@media (min-width:1920px){.xl\\:w-2\\/4{width:50%!important}}@media (min-width:1920px){.xl\\:w-3\\/4{width:75%!important}}@media (min-width:1920px){.xl\\:w-1\\/5{width:20%!important}}@media (min-width:1920px){.xl\\:w-2\\/5{width:40%!important}}@media (min-width:1920px){.xl\\:w-3\\/5{width:60%!important}}@media (min-width:1920px){.xl\\:w-4\\/5{width:80%!important}}@media (min-width:1920px){.xl\\:w-1\\/6{width:16.666667%!important}}@media (min-width:1920px){.xl\\:w-2\\/6{width:33.333333%!important}}@media (min-width:1920px){.xl\\:w-3\\/6{width:50%!important}}@media (min-width:1920px){.xl\\:w-4\\/6{width:66.666667%!important}}@media (min-width:1920px){.xl\\:w-5\\/6{width:83.333333%!important}}@media (min-width:1920px){.xl\\:w-1\\/12{width:8.333333%!important}}@media (min-width:1920px){.xl\\:w-2\\/12{width:16.666667%!important}}@media (min-width:1920px){.xl\\:w-3\\/12{width:25%!important}}@media (min-width:1920px){.xl\\:w-4\\/12{width:33.333333%!important}}@media (min-width:1920px){.xl\\:w-5\\/12{width:41.666667%!important}}@media (min-width:1920px){.xl\\:w-6\\/12{width:50%!important}}@media (min-width:1920px){.xl\\:w-7\\/12{width:58.333333%!important}}@media (min-width:1920px){.xl\\:w-8\\/12{width:66.666667%!important}}@media (min-width:1920px){.xl\\:w-9\\/12{width:75%!important}}@media (min-width:1920px){.xl\\:w-10\\/12{width:83.333333%!important}}@media (min-width:1920px){.xl\\:w-11\\/12{width:91.666667%!important}}@media (min-width:1920px){.xl\\:w-full{width:100%!important}}@media (min-width:1920px){.xl\\:w-screen{width:100vw!important}}@media (min-width:1920px){.xl\\:z-0{z-index:0!important}}@media (min-width:1920px){.xl\\:z-10{z-index:10!important}}@media (min-width:1920px){.xl\\:z-20{z-index:20!important}}@media (min-width:1920px){.xl\\:z-30{z-index:30!important}}@media (min-width:1920px){.xl\\:z-40{z-index:40!important}}@media (min-width:1920px){.xl\\:z-50{z-index:50!important}}@media (min-width:1920px){.xl\\:z-auto{z-index:auto!important}}@media (min-width:1920px){.xl\\:gap-0{grid-gap:0!important;gap:0!important}}@media (min-width:1920px){.xl\\:gap-1{grid-gap:.25rem!important;gap:.25rem!important}}@media (min-width:1920px){.xl\\:gap-2{grid-gap:.5rem!important;gap:.5rem!important}}@media (min-width:1920px){.xl\\:gap-3{grid-gap:.75rem!important;gap:.75rem!important}}@media (min-width:1920px){.xl\\:gap-4{grid-gap:1rem!important;gap:1rem!important}}@media (min-width:1920px){.xl\\:gap-5{grid-gap:1.25rem!important;gap:1.25rem!important}}@media (min-width:1920px){.xl\\:gap-6{grid-gap:1.5rem!important;gap:1.5rem!important}}@media (min-width:1920px){.xl\\:gap-8{grid-gap:2rem!important;gap:2rem!important}}@media (min-width:1920px){.xl\\:gap-10{grid-gap:2.5rem!important;gap:2.5rem!important}}@media (min-width:1920px){.xl\\:gap-12{grid-gap:3rem!important;gap:3rem!important}}@media (min-width:1920px){.xl\\:gap-16{grid-gap:4rem!important;gap:4rem!important}}@media (min-width:1920px){.xl\\:gap-20{grid-gap:5rem!important;gap:5rem!important}}@media (min-width:1920px){.xl\\:gap-24{grid-gap:6rem!important;gap:6rem!important}}@media (min-width:1920px){.xl\\:gap-32{grid-gap:8rem!important;gap:8rem!important}}@media (min-width:1920px){.xl\\:gap-40{grid-gap:10rem!important;gap:10rem!important}}@media (min-width:1920px){.xl\\:gap-48{grid-gap:12rem!important;gap:12rem!important}}@media (min-width:1920px){.xl\\:gap-56{grid-gap:14rem!important;gap:14rem!important}}@media (min-width:1920px){.xl\\:gap-64{grid-gap:16rem!important;gap:16rem!important}}@media (min-width:1920px){.xl\\:gap-px{grid-gap:1px!important;gap:1px!important}}@media (min-width:1920px){.xl\\:col-gap-0{grid-column-gap:0!important;column-gap:0!important}}@media (min-width:1920px){.xl\\:col-gap-1{grid-column-gap:.25rem!important;column-gap:.25rem!important}}@media (min-width:1920px){.xl\\:col-gap-2{grid-column-gap:.5rem!important;column-gap:.5rem!important}}@media (min-width:1920px){.xl\\:col-gap-3{grid-column-gap:.75rem!important;column-gap:.75rem!important}}@media (min-width:1920px){.xl\\:col-gap-4{grid-column-gap:1rem!important;column-gap:1rem!important}}@media (min-width:1920px){.xl\\:col-gap-5{grid-column-gap:1.25rem!important;column-gap:1.25rem!important}}@media (min-width:1920px){.xl\\:col-gap-6{grid-column-gap:1.5rem!important;column-gap:1.5rem!important}}@media (min-width:1920px){.xl\\:col-gap-8{grid-column-gap:2rem!important;column-gap:2rem!important}}@media (min-width:1920px){.xl\\:col-gap-10{grid-column-gap:2.5rem!important;column-gap:2.5rem!important}}@media (min-width:1920px){.xl\\:col-gap-12{grid-column-gap:3rem!important;column-gap:3rem!important}}@media (min-width:1920px){.xl\\:col-gap-16{grid-column-gap:4rem!important;column-gap:4rem!important}}@media (min-width:1920px){.xl\\:col-gap-20{grid-column-gap:5rem!important;column-gap:5rem!important}}@media (min-width:1920px){.xl\\:col-gap-24{grid-column-gap:6rem!important;column-gap:6rem!important}}@media (min-width:1920px){.xl\\:col-gap-32{grid-column-gap:8rem!important;column-gap:8rem!important}}@media (min-width:1920px){.xl\\:col-gap-40{grid-column-gap:10rem!important;column-gap:10rem!important}}@media (min-width:1920px){.xl\\:col-gap-48{grid-column-gap:12rem!important;column-gap:12rem!important}}@media (min-width:1920px){.xl\\:col-gap-56{grid-column-gap:14rem!important;column-gap:14rem!important}}@media (min-width:1920px){.xl\\:col-gap-64{grid-column-gap:16rem!important;column-gap:16rem!important}}@media (min-width:1920px){.xl\\:col-gap-px{grid-column-gap:1px!important;column-gap:1px!important}}@media (min-width:1920px){.xl\\:gap-x-0{grid-column-gap:0!important;column-gap:0!important}}@media (min-width:1920px){.xl\\:gap-x-1{grid-column-gap:.25rem!important;column-gap:.25rem!important}}@media (min-width:1920px){.xl\\:gap-x-2{grid-column-gap:.5rem!important;column-gap:.5rem!important}}@media (min-width:1920px){.xl\\:gap-x-3{grid-column-gap:.75rem!important;column-gap:.75rem!important}}@media (min-width:1920px){.xl\\:gap-x-4{grid-column-gap:1rem!important;column-gap:1rem!important}}@media (min-width:1920px){.xl\\:gap-x-5{grid-column-gap:1.25rem!important;column-gap:1.25rem!important}}@media (min-width:1920px){.xl\\:gap-x-6{grid-column-gap:1.5rem!important;column-gap:1.5rem!important}}@media (min-width:1920px){.xl\\:gap-x-8{grid-column-gap:2rem!important;column-gap:2rem!important}}@media (min-width:1920px){.xl\\:gap-x-10{grid-column-gap:2.5rem!important;column-gap:2.5rem!important}}@media (min-width:1920px){.xl\\:gap-x-12{grid-column-gap:3rem!important;column-gap:3rem!important}}@media (min-width:1920px){.xl\\:gap-x-16{grid-column-gap:4rem!important;column-gap:4rem!important}}@media (min-width:1920px){.xl\\:gap-x-20{grid-column-gap:5rem!important;column-gap:5rem!important}}@media (min-width:1920px){.xl\\:gap-x-24{grid-column-gap:6rem!important;column-gap:6rem!important}}@media (min-width:1920px){.xl\\:gap-x-32{grid-column-gap:8rem!important;column-gap:8rem!important}}@media (min-width:1920px){.xl\\:gap-x-40{grid-column-gap:10rem!important;column-gap:10rem!important}}@media (min-width:1920px){.xl\\:gap-x-48{grid-column-gap:12rem!important;column-gap:12rem!important}}@media (min-width:1920px){.xl\\:gap-x-56{grid-column-gap:14rem!important;column-gap:14rem!important}}@media (min-width:1920px){.xl\\:gap-x-64{grid-column-gap:16rem!important;column-gap:16rem!important}}@media (min-width:1920px){.xl\\:gap-x-px{grid-column-gap:1px!important;column-gap:1px!important}}@media (min-width:1920px){.xl\\:row-gap-0{grid-row-gap:0!important;row-gap:0!important}}@media (min-width:1920px){.xl\\:row-gap-1{grid-row-gap:.25rem!important;row-gap:.25rem!important}}@media (min-width:1920px){.xl\\:row-gap-2{grid-row-gap:.5rem!important;row-gap:.5rem!important}}@media (min-width:1920px){.xl\\:row-gap-3{grid-row-gap:.75rem!important;row-gap:.75rem!important}}@media (min-width:1920px){.xl\\:row-gap-4{grid-row-gap:1rem!important;row-gap:1rem!important}}@media (min-width:1920px){.xl\\:row-gap-5{grid-row-gap:1.25rem!important;row-gap:1.25rem!important}}@media (min-width:1920px){.xl\\:row-gap-6{grid-row-gap:1.5rem!important;row-gap:1.5rem!important}}@media (min-width:1920px){.xl\\:row-gap-8{grid-row-gap:2rem!important;row-gap:2rem!important}}@media (min-width:1920px){.xl\\:row-gap-10{grid-row-gap:2.5rem!important;row-gap:2.5rem!important}}@media (min-width:1920px){.xl\\:row-gap-12{grid-row-gap:3rem!important;row-gap:3rem!important}}@media (min-width:1920px){.xl\\:row-gap-16{grid-row-gap:4rem!important;row-gap:4rem!important}}@media (min-width:1920px){.xl\\:row-gap-20{grid-row-gap:5rem!important;row-gap:5rem!important}}@media (min-width:1920px){.xl\\:row-gap-24{grid-row-gap:6rem!important;row-gap:6rem!important}}@media (min-width:1920px){.xl\\:row-gap-32{grid-row-gap:8rem!important;row-gap:8rem!important}}@media (min-width:1920px){.xl\\:row-gap-40{grid-row-gap:10rem!important;row-gap:10rem!important}}@media (min-width:1920px){.xl\\:row-gap-48{grid-row-gap:12rem!important;row-gap:12rem!important}}@media (min-width:1920px){.xl\\:row-gap-56{grid-row-gap:14rem!important;row-gap:14rem!important}}@media (min-width:1920px){.xl\\:row-gap-64{grid-row-gap:16rem!important;row-gap:16rem!important}}@media (min-width:1920px){.xl\\:row-gap-px{grid-row-gap:1px!important;row-gap:1px!important}}@media (min-width:1920px){.xl\\:gap-y-0{grid-row-gap:0!important;row-gap:0!important}}@media (min-width:1920px){.xl\\:gap-y-1{grid-row-gap:.25rem!important;row-gap:.25rem!important}}@media (min-width:1920px){.xl\\:gap-y-2{grid-row-gap:.5rem!important;row-gap:.5rem!important}}@media (min-width:1920px){.xl\\:gap-y-3{grid-row-gap:.75rem!important;row-gap:.75rem!important}}@media (min-width:1920px){.xl\\:gap-y-4{grid-row-gap:1rem!important;row-gap:1rem!important}}@media (min-width:1920px){.xl\\:gap-y-5{grid-row-gap:1.25rem!important;row-gap:1.25rem!important}}@media (min-width:1920px){.xl\\:gap-y-6{grid-row-gap:1.5rem!important;row-gap:1.5rem!important}}@media (min-width:1920px){.xl\\:gap-y-8{grid-row-gap:2rem!important;row-gap:2rem!important}}@media (min-width:1920px){.xl\\:gap-y-10{grid-row-gap:2.5rem!important;row-gap:2.5rem!important}}@media (min-width:1920px){.xl\\:gap-y-12{grid-row-gap:3rem!important;row-gap:3rem!important}}@media (min-width:1920px){.xl\\:gap-y-16{grid-row-gap:4rem!important;row-gap:4rem!important}}@media (min-width:1920px){.xl\\:gap-y-20{grid-row-gap:5rem!important;row-gap:5rem!important}}@media (min-width:1920px){.xl\\:gap-y-24{grid-row-gap:6rem!important;row-gap:6rem!important}}@media (min-width:1920px){.xl\\:gap-y-32{grid-row-gap:8rem!important;row-gap:8rem!important}}@media (min-width:1920px){.xl\\:gap-y-40{grid-row-gap:10rem!important;row-gap:10rem!important}}@media (min-width:1920px){.xl\\:gap-y-48{grid-row-gap:12rem!important;row-gap:12rem!important}}@media (min-width:1920px){.xl\\:gap-y-56{grid-row-gap:14rem!important;row-gap:14rem!important}}@media (min-width:1920px){.xl\\:gap-y-64{grid-row-gap:16rem!important;row-gap:16rem!important}}@media (min-width:1920px){.xl\\:gap-y-px{grid-row-gap:1px!important;row-gap:1px!important}}@media (min-width:1920px){.xl\\:grid-flow-row{grid-auto-flow:row!important}}@media (min-width:1920px){.xl\\:grid-flow-col{grid-auto-flow:column!important}}@media (min-width:1920px){.xl\\:grid-flow-row-dense{grid-auto-flow:row dense!important}}@media (min-width:1920px){.xl\\:grid-flow-col-dense{grid-auto-flow:column dense!important}}@media (min-width:1920px){.xl\\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}}@media (min-width:1920px){.xl\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}}@media (min-width:1920px){.xl\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}}@media (min-width:1920px){.xl\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))!important}}@media (min-width:1920px){.xl\\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))!important}}@media (min-width:1920px){.xl\\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))!important}}@media (min-width:1920px){.xl\\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))!important}}@media (min-width:1920px){.xl\\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))!important}}@media (min-width:1920px){.xl\\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))!important}}@media (min-width:1920px){.xl\\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))!important}}@media (min-width:1920px){.xl\\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))!important}}@media (min-width:1920px){.xl\\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))!important}}@media (min-width:1920px){.xl\\:grid-cols-none{grid-template-columns:none!important}}@media (min-width:1920px){.xl\\:auto-cols-auto{grid-auto-columns:auto!important}}@media (min-width:1920px){.xl\\:auto-cols-min{grid-auto-columns:-webkit-min-content!important;grid-auto-columns:min-content!important}}@media (min-width:1920px){.xl\\:auto-cols-max{grid-auto-columns:-webkit-max-content!important;grid-auto-columns:max-content!important}}@media (min-width:1920px){.xl\\:auto-cols-fr{grid-auto-columns:minmax(0,1fr)!important}}@media (min-width:1920px){.xl\\:col-auto{grid-column:auto!important}}@media (min-width:1920px){.xl\\:col-span-1{grid-column:span 1/span 1!important}}@media (min-width:1920px){.xl\\:col-span-2{grid-column:span 2/span 2!important}}@media (min-width:1920px){.xl\\:col-span-3{grid-column:span 3/span 3!important}}@media (min-width:1920px){.xl\\:col-span-4{grid-column:span 4/span 4!important}}@media (min-width:1920px){.xl\\:col-span-5{grid-column:span 5/span 5!important}}@media (min-width:1920px){.xl\\:col-span-6{grid-column:span 6/span 6!important}}@media (min-width:1920px){.xl\\:col-span-7{grid-column:span 7/span 7!important}}@media (min-width:1920px){.xl\\:col-span-8{grid-column:span 8/span 8!important}}@media (min-width:1920px){.xl\\:col-span-9{grid-column:span 9/span 9!important}}@media (min-width:1920px){.xl\\:col-span-10{grid-column:span 10/span 10!important}}@media (min-width:1920px){.xl\\:col-span-11{grid-column:span 11/span 11!important}}@media (min-width:1920px){.xl\\:col-span-12{grid-column:span 12/span 12!important}}@media (min-width:1920px){.xl\\:col-span-full{grid-column:1/-1!important}}@media (min-width:1920px){.xl\\:col-start-1{grid-column-start:1!important}}@media (min-width:1920px){.xl\\:col-start-2{grid-column-start:2!important}}@media (min-width:1920px){.xl\\:col-start-3{grid-column-start:3!important}}@media (min-width:1920px){.xl\\:col-start-4{grid-column-start:4!important}}@media (min-width:1920px){.xl\\:col-start-5{grid-column-start:5!important}}@media (min-width:1920px){.xl\\:col-start-6{grid-column-start:6!important}}@media (min-width:1920px){.xl\\:col-start-7{grid-column-start:7!important}}@media (min-width:1920px){.xl\\:col-start-8{grid-column-start:8!important}}@media (min-width:1920px){.xl\\:col-start-9{grid-column-start:9!important}}@media (min-width:1920px){.xl\\:col-start-10{grid-column-start:10!important}}@media (min-width:1920px){.xl\\:col-start-11{grid-column-start:11!important}}@media (min-width:1920px){.xl\\:col-start-12{grid-column-start:12!important}}@media (min-width:1920px){.xl\\:col-start-13{grid-column-start:13!important}}@media (min-width:1920px){.xl\\:col-start-auto{grid-column-start:auto!important}}@media (min-width:1920px){.xl\\:col-end-1{grid-column-end:1!important}}@media (min-width:1920px){.xl\\:col-end-2{grid-column-end:2!important}}@media (min-width:1920px){.xl\\:col-end-3{grid-column-end:3!important}}@media (min-width:1920px){.xl\\:col-end-4{grid-column-end:4!important}}@media (min-width:1920px){.xl\\:col-end-5{grid-column-end:5!important}}@media (min-width:1920px){.xl\\:col-end-6{grid-column-end:6!important}}@media (min-width:1920px){.xl\\:col-end-7{grid-column-end:7!important}}@media (min-width:1920px){.xl\\:col-end-8{grid-column-end:8!important}}@media (min-width:1920px){.xl\\:col-end-9{grid-column-end:9!important}}@media (min-width:1920px){.xl\\:col-end-10{grid-column-end:10!important}}@media (min-width:1920px){.xl\\:col-end-11{grid-column-end:11!important}}@media (min-width:1920px){.xl\\:col-end-12{grid-column-end:12!important}}@media (min-width:1920px){.xl\\:col-end-13{grid-column-end:13!important}}@media (min-width:1920px){.xl\\:col-end-auto{grid-column-end:auto!important}}@media (min-width:1920px){.xl\\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))!important}}@media (min-width:1920px){.xl\\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))!important}}@media (min-width:1920px){.xl\\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))!important}}@media (min-width:1920px){.xl\\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))!important}}@media (min-width:1920px){.xl\\:grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))!important}}@media (min-width:1920px){.xl\\:grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))!important}}@media (min-width:1920px){.xl\\:grid-rows-none{grid-template-rows:none!important}}@media (min-width:1920px){.xl\\:auto-rows-auto{grid-auto-rows:auto!important}}@media (min-width:1920px){.xl\\:auto-rows-min{grid-auto-rows:-webkit-min-content!important;grid-auto-rows:min-content!important}}@media (min-width:1920px){.xl\\:auto-rows-max{grid-auto-rows:-webkit-max-content!important;grid-auto-rows:max-content!important}}@media (min-width:1920px){.xl\\:auto-rows-fr{grid-auto-rows:minmax(0,1fr)!important}}@media (min-width:1920px){.xl\\:row-auto{grid-row:auto!important}}@media (min-width:1920px){.xl\\:row-span-1{grid-row:span 1/span 1!important}}@media (min-width:1920px){.xl\\:row-span-2{grid-row:span 2/span 2!important}}@media (min-width:1920px){.xl\\:row-span-3{grid-row:span 3/span 3!important}}@media (min-width:1920px){.xl\\:row-span-4{grid-row:span 4/span 4!important}}@media (min-width:1920px){.xl\\:row-span-5{grid-row:span 5/span 5!important}}@media (min-width:1920px){.xl\\:row-span-6{grid-row:span 6/span 6!important}}@media (min-width:1920px){.xl\\:row-span-full{grid-row:1/-1!important}}@media (min-width:1920px){.xl\\:row-start-1{grid-row-start:1!important}}@media (min-width:1920px){.xl\\:row-start-2{grid-row-start:2!important}}@media (min-width:1920px){.xl\\:row-start-3{grid-row-start:3!important}}@media (min-width:1920px){.xl\\:row-start-4{grid-row-start:4!important}}@media (min-width:1920px){.xl\\:row-start-5{grid-row-start:5!important}}@media (min-width:1920px){.xl\\:row-start-6{grid-row-start:6!important}}@media (min-width:1920px){.xl\\:row-start-7{grid-row-start:7!important}}@media (min-width:1920px){.xl\\:row-start-auto{grid-row-start:auto!important}}@media (min-width:1920px){.xl\\:row-end-1{grid-row-end:1!important}}@media (min-width:1920px){.xl\\:row-end-2{grid-row-end:2!important}}@media (min-width:1920px){.xl\\:row-end-3{grid-row-end:3!important}}@media (min-width:1920px){.xl\\:row-end-4{grid-row-end:4!important}}@media (min-width:1920px){.xl\\:row-end-5{grid-row-end:5!important}}@media (min-width:1920px){.xl\\:row-end-6{grid-row-end:6!important}}@media (min-width:1920px){.xl\\:row-end-7{grid-row-end:7!important}}@media (min-width:1920px){.xl\\:row-end-auto{grid-row-end:auto!important}}@media (min-width:1920px){.xl\\:transform{--transform-translate-x:0!important;--transform-translate-y:0!important;--transform-rotate:0!important;--transform-skew-x:0!important;--transform-skew-y:0!important;--transform-scale-x:1!important;--transform-scale-y:1!important;transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))!important}}@media (min-width:1920px){.xl\\:transform-none{transform:none!important}}@media (min-width:1920px){.xl\\:origin-center{transform-origin:center!important}}@media (min-width:1920px){.xl\\:origin-top{transform-origin:top!important}}@media (min-width:1920px){.xl\\:origin-top-right{transform-origin:top right!important}}@media (min-width:1920px){.xl\\:origin-right{transform-origin:right!important}}@media (min-width:1920px){.xl\\:origin-bottom-right{transform-origin:bottom right!important}}@media (min-width:1920px){.xl\\:origin-bottom{transform-origin:bottom!important}}@media (min-width:1920px){.xl\\:origin-bottom-left{transform-origin:bottom left!important}}@media (min-width:1920px){.xl\\:origin-left{transform-origin:left!important}}@media (min-width:1920px){.xl\\:origin-top-left{transform-origin:top left!important}}@media (min-width:1920px){.xl\\:scale-0{--transform-scale-x:0!important;--transform-scale-y:0!important}}@media (min-width:1920px){.xl\\:scale-50{--transform-scale-x:.5!important;--transform-scale-y:.5!important}}@media (min-width:1920px){.xl\\:scale-75{--transform-scale-x:.75!important;--transform-scale-y:.75!important}}@media (min-width:1920px){.xl\\:scale-90{--transform-scale-x:.9!important;--transform-scale-y:.9!important}}@media (min-width:1920px){.xl\\:scale-95{--transform-scale-x:.95!important;--transform-scale-y:.95!important}}@media (min-width:1920px){.xl\\:scale-100{--transform-scale-x:1!important;--transform-scale-y:1!important}}@media (min-width:1920px){.xl\\:scale-105{--transform-scale-x:1.05!important;--transform-scale-y:1.05!important}}@media (min-width:1920px){.xl\\:scale-110{--transform-scale-x:1.1!important;--transform-scale-y:1.1!important}}@media (min-width:1920px){.xl\\:scale-125{--transform-scale-x:1.25!important;--transform-scale-y:1.25!important}}@media (min-width:1920px){.xl\\:scale-150{--transform-scale-x:1.5!important;--transform-scale-y:1.5!important}}@media (min-width:1920px){.xl\\:scale-x-0{--transform-scale-x:0!important}}@media (min-width:1920px){.xl\\:scale-x-50{--transform-scale-x:.5!important}}@media (min-width:1920px){.xl\\:scale-x-75{--transform-scale-x:.75!important}}@media (min-width:1920px){.xl\\:scale-x-90{--transform-scale-x:.9!important}}@media (min-width:1920px){.xl\\:scale-x-95{--transform-scale-x:.95!important}}@media (min-width:1920px){.xl\\:scale-x-100{--transform-scale-x:1!important}}@media (min-width:1920px){.xl\\:scale-x-105{--transform-scale-x:1.05!important}}@media (min-width:1920px){.xl\\:scale-x-110{--transform-scale-x:1.1!important}}@media (min-width:1920px){.xl\\:scale-x-125{--transform-scale-x:1.25!important}}@media (min-width:1920px){.xl\\:scale-x-150{--transform-scale-x:1.5!important}}@media (min-width:1920px){.xl\\:scale-y-0{--transform-scale-y:0!important}}@media (min-width:1920px){.xl\\:scale-y-50{--transform-scale-y:.5!important}}@media (min-width:1920px){.xl\\:scale-y-75{--transform-scale-y:.75!important}}@media (min-width:1920px){.xl\\:scale-y-90{--transform-scale-y:.9!important}}@media (min-width:1920px){.xl\\:scale-y-95{--transform-scale-y:.95!important}}@media (min-width:1920px){.xl\\:scale-y-100{--transform-scale-y:1!important}}@media (min-width:1920px){.xl\\:scale-y-105{--transform-scale-y:1.05!important}}@media (min-width:1920px){.xl\\:scale-y-110{--transform-scale-y:1.1!important}}@media (min-width:1920px){.xl\\:scale-y-125{--transform-scale-y:1.25!important}}@media (min-width:1920px){.xl\\:scale-y-150{--transform-scale-y:1.5!important}}@media (min-width:1920px){.xl\\:hover\\:scale-0:hover{--transform-scale-x:0!important;--transform-scale-y:0!important}}@media (min-width:1920px){.xl\\:hover\\:scale-50:hover{--transform-scale-x:.5!important;--transform-scale-y:.5!important}}@media (min-width:1920px){.xl\\:hover\\:scale-75:hover{--transform-scale-x:.75!important;--transform-scale-y:.75!important}}@media (min-width:1920px){.xl\\:hover\\:scale-90:hover{--transform-scale-x:.9!important;--transform-scale-y:.9!important}}@media (min-width:1920px){.xl\\:hover\\:scale-95:hover{--transform-scale-x:.95!important;--transform-scale-y:.95!important}}@media (min-width:1920px){.xl\\:hover\\:scale-100:hover{--transform-scale-x:1!important;--transform-scale-y:1!important}}@media (min-width:1920px){.xl\\:hover\\:scale-105:hover{--transform-scale-x:1.05!important;--transform-scale-y:1.05!important}}@media (min-width:1920px){.xl\\:hover\\:scale-110:hover{--transform-scale-x:1.1!important;--transform-scale-y:1.1!important}}@media (min-width:1920px){.xl\\:hover\\:scale-125:hover{--transform-scale-x:1.25!important;--transform-scale-y:1.25!important}}@media (min-width:1920px){.xl\\:hover\\:scale-150:hover{--transform-scale-x:1.5!important;--transform-scale-y:1.5!important}}@media (min-width:1920px){.xl\\:hover\\:scale-x-0:hover{--transform-scale-x:0!important}}@media (min-width:1920px){.xl\\:hover\\:scale-x-50:hover{--transform-scale-x:.5!important}}@media (min-width:1920px){.xl\\:hover\\:scale-x-75:hover{--transform-scale-x:.75!important}}@media (min-width:1920px){.xl\\:hover\\:scale-x-90:hover{--transform-scale-x:.9!important}}@media (min-width:1920px){.xl\\:hover\\:scale-x-95:hover{--transform-scale-x:.95!important}}@media (min-width:1920px){.xl\\:hover\\:scale-x-100:hover{--transform-scale-x:1!important}}@media (min-width:1920px){.xl\\:hover\\:scale-x-105:hover{--transform-scale-x:1.05!important}}@media (min-width:1920px){.xl\\:hover\\:scale-x-110:hover{--transform-scale-x:1.1!important}}@media (min-width:1920px){.xl\\:hover\\:scale-x-125:hover{--transform-scale-x:1.25!important}}@media (min-width:1920px){.xl\\:hover\\:scale-x-150:hover{--transform-scale-x:1.5!important}}@media (min-width:1920px){.xl\\:hover\\:scale-y-0:hover{--transform-scale-y:0!important}}@media (min-width:1920px){.xl\\:hover\\:scale-y-50:hover{--transform-scale-y:.5!important}}@media (min-width:1920px){.xl\\:hover\\:scale-y-75:hover{--transform-scale-y:.75!important}}@media (min-width:1920px){.xl\\:hover\\:scale-y-90:hover{--transform-scale-y:.9!important}}@media (min-width:1920px){.xl\\:hover\\:scale-y-95:hover{--transform-scale-y:.95!important}}@media (min-width:1920px){.xl\\:hover\\:scale-y-100:hover{--transform-scale-y:1!important}}@media (min-width:1920px){.xl\\:hover\\:scale-y-105:hover{--transform-scale-y:1.05!important}}@media (min-width:1920px){.xl\\:hover\\:scale-y-110:hover{--transform-scale-y:1.1!important}}@media (min-width:1920px){.xl\\:hover\\:scale-y-125:hover{--transform-scale-y:1.25!important}}@media (min-width:1920px){.xl\\:hover\\:scale-y-150:hover{--transform-scale-y:1.5!important}}@media (min-width:1920px){.xl\\:focus\\:scale-0:focus{--transform-scale-x:0!important;--transform-scale-y:0!important}}@media (min-width:1920px){.xl\\:focus\\:scale-50:focus{--transform-scale-x:.5!important;--transform-scale-y:.5!important}}@media (min-width:1920px){.xl\\:focus\\:scale-75:focus{--transform-scale-x:.75!important;--transform-scale-y:.75!important}}@media (min-width:1920px){.xl\\:focus\\:scale-90:focus{--transform-scale-x:.9!important;--transform-scale-y:.9!important}}@media (min-width:1920px){.xl\\:focus\\:scale-95:focus{--transform-scale-x:.95!important;--transform-scale-y:.95!important}}@media (min-width:1920px){.xl\\:focus\\:scale-100:focus{--transform-scale-x:1!important;--transform-scale-y:1!important}}@media (min-width:1920px){.xl\\:focus\\:scale-105:focus{--transform-scale-x:1.05!important;--transform-scale-y:1.05!important}}@media (min-width:1920px){.xl\\:focus\\:scale-110:focus{--transform-scale-x:1.1!important;--transform-scale-y:1.1!important}}@media (min-width:1920px){.xl\\:focus\\:scale-125:focus{--transform-scale-x:1.25!important;--transform-scale-y:1.25!important}}@media (min-width:1920px){.xl\\:focus\\:scale-150:focus{--transform-scale-x:1.5!important;--transform-scale-y:1.5!important}}@media (min-width:1920px){.xl\\:focus\\:scale-x-0:focus{--transform-scale-x:0!important}}@media (min-width:1920px){.xl\\:focus\\:scale-x-50:focus{--transform-scale-x:.5!important}}@media (min-width:1920px){.xl\\:focus\\:scale-x-75:focus{--transform-scale-x:.75!important}}@media (min-width:1920px){.xl\\:focus\\:scale-x-90:focus{--transform-scale-x:.9!important}}@media (min-width:1920px){.xl\\:focus\\:scale-x-95:focus{--transform-scale-x:.95!important}}@media (min-width:1920px){.xl\\:focus\\:scale-x-100:focus{--transform-scale-x:1!important}}@media (min-width:1920px){.xl\\:focus\\:scale-x-105:focus{--transform-scale-x:1.05!important}}@media (min-width:1920px){.xl\\:focus\\:scale-x-110:focus{--transform-scale-x:1.1!important}}@media (min-width:1920px){.xl\\:focus\\:scale-x-125:focus{--transform-scale-x:1.25!important}}@media (min-width:1920px){.xl\\:focus\\:scale-x-150:focus{--transform-scale-x:1.5!important}}@media (min-width:1920px){.xl\\:focus\\:scale-y-0:focus{--transform-scale-y:0!important}}@media (min-width:1920px){.xl\\:focus\\:scale-y-50:focus{--transform-scale-y:.5!important}}@media (min-width:1920px){.xl\\:focus\\:scale-y-75:focus{--transform-scale-y:.75!important}}@media (min-width:1920px){.xl\\:focus\\:scale-y-90:focus{--transform-scale-y:.9!important}}@media (min-width:1920px){.xl\\:focus\\:scale-y-95:focus{--transform-scale-y:.95!important}}@media (min-width:1920px){.xl\\:focus\\:scale-y-100:focus{--transform-scale-y:1!important}}@media (min-width:1920px){.xl\\:focus\\:scale-y-105:focus{--transform-scale-y:1.05!important}}@media (min-width:1920px){.xl\\:focus\\:scale-y-110:focus{--transform-scale-y:1.1!important}}@media (min-width:1920px){.xl\\:focus\\:scale-y-125:focus{--transform-scale-y:1.25!important}}@media (min-width:1920px){.xl\\:focus\\:scale-y-150:focus{--transform-scale-y:1.5!important}}@media (min-width:1920px){.xl\\:rotate-0{--transform-rotate:0!important}}@media (min-width:1920px){.xl\\:rotate-1{--transform-rotate:1deg!important}}@media (min-width:1920px){.xl\\:rotate-2{--transform-rotate:2deg!important}}@media (min-width:1920px){.xl\\:rotate-3{--transform-rotate:3deg!important}}@media (min-width:1920px){.xl\\:rotate-6{--transform-rotate:6deg!important}}@media (min-width:1920px){.xl\\:rotate-12{--transform-rotate:12deg!important}}@media (min-width:1920px){.xl\\:rotate-45{--transform-rotate:45deg!important}}@media (min-width:1920px){.xl\\:rotate-90{--transform-rotate:90deg!important}}@media (min-width:1920px){.xl\\:rotate-180{--transform-rotate:180deg!important}}@media (min-width:1920px){.xl\\:-rotate-180{--transform-rotate:-180deg!important}}@media (min-width:1920px){.xl\\:-rotate-90{--transform-rotate:-90deg!important}}@media (min-width:1920px){.xl\\:-rotate-45{--transform-rotate:-45deg!important}}@media (min-width:1920px){.xl\\:-rotate-12{--transform-rotate:-12deg!important}}@media (min-width:1920px){.xl\\:-rotate-6{--transform-rotate:-6deg!important}}@media (min-width:1920px){.xl\\:-rotate-3{--transform-rotate:-3deg!important}}@media (min-width:1920px){.xl\\:-rotate-2{--transform-rotate:-2deg!important}}@media (min-width:1920px){.xl\\:-rotate-1{--transform-rotate:-1deg!important}}@media (min-width:1920px){.xl\\:hover\\:rotate-0:hover{--transform-rotate:0!important}}@media (min-width:1920px){.xl\\:hover\\:rotate-1:hover{--transform-rotate:1deg!important}}@media (min-width:1920px){.xl\\:hover\\:rotate-2:hover{--transform-rotate:2deg!important}}@media (min-width:1920px){.xl\\:hover\\:rotate-3:hover{--transform-rotate:3deg!important}}@media (min-width:1920px){.xl\\:hover\\:rotate-6:hover{--transform-rotate:6deg!important}}@media (min-width:1920px){.xl\\:hover\\:rotate-12:hover{--transform-rotate:12deg!important}}@media (min-width:1920px){.xl\\:hover\\:rotate-45:hover{--transform-rotate:45deg!important}}@media (min-width:1920px){.xl\\:hover\\:rotate-90:hover{--transform-rotate:90deg!important}}@media (min-width:1920px){.xl\\:hover\\:rotate-180:hover{--transform-rotate:180deg!important}}@media (min-width:1920px){.xl\\:hover\\:-rotate-180:hover{--transform-rotate:-180deg!important}}@media (min-width:1920px){.xl\\:hover\\:-rotate-90:hover{--transform-rotate:-90deg!important}}@media (min-width:1920px){.xl\\:hover\\:-rotate-45:hover{--transform-rotate:-45deg!important}}@media (min-width:1920px){.xl\\:hover\\:-rotate-12:hover{--transform-rotate:-12deg!important}}@media (min-width:1920px){.xl\\:hover\\:-rotate-6:hover{--transform-rotate:-6deg!important}}@media (min-width:1920px){.xl\\:hover\\:-rotate-3:hover{--transform-rotate:-3deg!important}}@media (min-width:1920px){.xl\\:hover\\:-rotate-2:hover{--transform-rotate:-2deg!important}}@media (min-width:1920px){.xl\\:hover\\:-rotate-1:hover{--transform-rotate:-1deg!important}}@media (min-width:1920px){.xl\\:focus\\:rotate-0:focus{--transform-rotate:0!important}}@media (min-width:1920px){.xl\\:focus\\:rotate-1:focus{--transform-rotate:1deg!important}}@media (min-width:1920px){.xl\\:focus\\:rotate-2:focus{--transform-rotate:2deg!important}}@media (min-width:1920px){.xl\\:focus\\:rotate-3:focus{--transform-rotate:3deg!important}}@media (min-width:1920px){.xl\\:focus\\:rotate-6:focus{--transform-rotate:6deg!important}}@media (min-width:1920px){.xl\\:focus\\:rotate-12:focus{--transform-rotate:12deg!important}}@media (min-width:1920px){.xl\\:focus\\:rotate-45:focus{--transform-rotate:45deg!important}}@media (min-width:1920px){.xl\\:focus\\:rotate-90:focus{--transform-rotate:90deg!important}}@media (min-width:1920px){.xl\\:focus\\:rotate-180:focus{--transform-rotate:180deg!important}}@media (min-width:1920px){.xl\\:focus\\:-rotate-180:focus{--transform-rotate:-180deg!important}}@media (min-width:1920px){.xl\\:focus\\:-rotate-90:focus{--transform-rotate:-90deg!important}}@media (min-width:1920px){.xl\\:focus\\:-rotate-45:focus{--transform-rotate:-45deg!important}}@media (min-width:1920px){.xl\\:focus\\:-rotate-12:focus{--transform-rotate:-12deg!important}}@media (min-width:1920px){.xl\\:focus\\:-rotate-6:focus{--transform-rotate:-6deg!important}}@media (min-width:1920px){.xl\\:focus\\:-rotate-3:focus{--transform-rotate:-3deg!important}}@media (min-width:1920px){.xl\\:focus\\:-rotate-2:focus{--transform-rotate:-2deg!important}}@media (min-width:1920px){.xl\\:focus\\:-rotate-1:focus{--transform-rotate:-1deg!important}}@media (min-width:1920px){.xl\\:translate-x-0{--transform-translate-x:0!important}}@media (min-width:1920px){.xl\\:translate-x-1{--transform-translate-x:0.25rem!important}}@media (min-width:1920px){.xl\\:translate-x-2{--transform-translate-x:0.5rem!important}}@media (min-width:1920px){.xl\\:translate-x-3{--transform-translate-x:0.75rem!important}}@media (min-width:1920px){.xl\\:translate-x-4{--transform-translate-x:1rem!important}}@media (min-width:1920px){.xl\\:translate-x-5{--transform-translate-x:1.25rem!important}}@media (min-width:1920px){.xl\\:translate-x-6{--transform-translate-x:1.5rem!important}}@media (min-width:1920px){.xl\\:translate-x-8{--transform-translate-x:2rem!important}}@media (min-width:1920px){.xl\\:translate-x-10{--transform-translate-x:2.5rem!important}}@media (min-width:1920px){.xl\\:translate-x-12{--transform-translate-x:3rem!important}}@media (min-width:1920px){.xl\\:translate-x-16{--transform-translate-x:4rem!important}}@media (min-width:1920px){.xl\\:translate-x-20{--transform-translate-x:5rem!important}}@media (min-width:1920px){.xl\\:translate-x-24{--transform-translate-x:6rem!important}}@media (min-width:1920px){.xl\\:translate-x-32{--transform-translate-x:8rem!important}}@media (min-width:1920px){.xl\\:translate-x-40{--transform-translate-x:10rem!important}}@media (min-width:1920px){.xl\\:translate-x-48{--transform-translate-x:12rem!important}}@media (min-width:1920px){.xl\\:translate-x-56{--transform-translate-x:14rem!important}}@media (min-width:1920px){.xl\\:translate-x-64{--transform-translate-x:16rem!important}}@media (min-width:1920px){.xl\\:translate-x-px{--transform-translate-x:1px!important}}@media (min-width:1920px){.xl\\:-translate-x-1{--transform-translate-x:-0.25rem!important}}@media (min-width:1920px){.xl\\:-translate-x-2{--transform-translate-x:-0.5rem!important}}@media (min-width:1920px){.xl\\:-translate-x-3{--transform-translate-x:-0.75rem!important}}@media (min-width:1920px){.xl\\:-translate-x-4{--transform-translate-x:-1rem!important}}@media (min-width:1920px){.xl\\:-translate-x-5{--transform-translate-x:-1.25rem!important}}@media (min-width:1920px){.xl\\:-translate-x-6{--transform-translate-x:-1.5rem!important}}@media (min-width:1920px){.xl\\:-translate-x-8{--transform-translate-x:-2rem!important}}@media (min-width:1920px){.xl\\:-translate-x-10{--transform-translate-x:-2.5rem!important}}@media (min-width:1920px){.xl\\:-translate-x-12{--transform-translate-x:-3rem!important}}@media (min-width:1920px){.xl\\:-translate-x-16{--transform-translate-x:-4rem!important}}@media (min-width:1920px){.xl\\:-translate-x-20{--transform-translate-x:-5rem!important}}@media (min-width:1920px){.xl\\:-translate-x-24{--transform-translate-x:-6rem!important}}@media (min-width:1920px){.xl\\:-translate-x-32{--transform-translate-x:-8rem!important}}@media (min-width:1920px){.xl\\:-translate-x-40{--transform-translate-x:-10rem!important}}@media (min-width:1920px){.xl\\:-translate-x-48{--transform-translate-x:-12rem!important}}@media (min-width:1920px){.xl\\:-translate-x-56{--transform-translate-x:-14rem!important}}@media (min-width:1920px){.xl\\:-translate-x-64{--transform-translate-x:-16rem!important}}@media (min-width:1920px){.xl\\:-translate-x-px{--transform-translate-x:-1px!important}}@media (min-width:1920px){.xl\\:-translate-x-full{--transform-translate-x:-100%!important}}@media (min-width:1920px){.xl\\:-translate-x-1\\/2{--transform-translate-x:-50%!important}}@media (min-width:1920px){.xl\\:translate-x-1\\/2{--transform-translate-x:50%!important}}@media (min-width:1920px){.xl\\:translate-x-full{--transform-translate-x:100%!important}}@media (min-width:1920px){.xl\\:translate-y-0{--transform-translate-y:0!important}}@media (min-width:1920px){.xl\\:translate-y-1{--transform-translate-y:0.25rem!important}}@media (min-width:1920px){.xl\\:translate-y-2{--transform-translate-y:0.5rem!important}}@media (min-width:1920px){.xl\\:translate-y-3{--transform-translate-y:0.75rem!important}}@media (min-width:1920px){.xl\\:translate-y-4{--transform-translate-y:1rem!important}}@media (min-width:1920px){.xl\\:translate-y-5{--transform-translate-y:1.25rem!important}}@media (min-width:1920px){.xl\\:translate-y-6{--transform-translate-y:1.5rem!important}}@media (min-width:1920px){.xl\\:translate-y-8{--transform-translate-y:2rem!important}}@media (min-width:1920px){.xl\\:translate-y-10{--transform-translate-y:2.5rem!important}}@media (min-width:1920px){.xl\\:translate-y-12{--transform-translate-y:3rem!important}}@media (min-width:1920px){.xl\\:translate-y-16{--transform-translate-y:4rem!important}}@media (min-width:1920px){.xl\\:translate-y-20{--transform-translate-y:5rem!important}}@media (min-width:1920px){.xl\\:translate-y-24{--transform-translate-y:6rem!important}}@media (min-width:1920px){.xl\\:translate-y-32{--transform-translate-y:8rem!important}}@media (min-width:1920px){.xl\\:translate-y-40{--transform-translate-y:10rem!important}}@media (min-width:1920px){.xl\\:translate-y-48{--transform-translate-y:12rem!important}}@media (min-width:1920px){.xl\\:translate-y-56{--transform-translate-y:14rem!important}}@media (min-width:1920px){.xl\\:translate-y-64{--transform-translate-y:16rem!important}}@media (min-width:1920px){.xl\\:translate-y-px{--transform-translate-y:1px!important}}@media (min-width:1920px){.xl\\:-translate-y-1{--transform-translate-y:-0.25rem!important}}@media (min-width:1920px){.xl\\:-translate-y-2{--transform-translate-y:-0.5rem!important}}@media (min-width:1920px){.xl\\:-translate-y-3{--transform-translate-y:-0.75rem!important}}@media (min-width:1920px){.xl\\:-translate-y-4{--transform-translate-y:-1rem!important}}@media (min-width:1920px){.xl\\:-translate-y-5{--transform-translate-y:-1.25rem!important}}@media (min-width:1920px){.xl\\:-translate-y-6{--transform-translate-y:-1.5rem!important}}@media (min-width:1920px){.xl\\:-translate-y-8{--transform-translate-y:-2rem!important}}@media (min-width:1920px){.xl\\:-translate-y-10{--transform-translate-y:-2.5rem!important}}@media (min-width:1920px){.xl\\:-translate-y-12{--transform-translate-y:-3rem!important}}@media (min-width:1920px){.xl\\:-translate-y-16{--transform-translate-y:-4rem!important}}@media (min-width:1920px){.xl\\:-translate-y-20{--transform-translate-y:-5rem!important}}@media (min-width:1920px){.xl\\:-translate-y-24{--transform-translate-y:-6rem!important}}@media (min-width:1920px){.xl\\:-translate-y-32{--transform-translate-y:-8rem!important}}@media (min-width:1920px){.xl\\:-translate-y-40{--transform-translate-y:-10rem!important}}@media (min-width:1920px){.xl\\:-translate-y-48{--transform-translate-y:-12rem!important}}@media (min-width:1920px){.xl\\:-translate-y-56{--transform-translate-y:-14rem!important}}@media (min-width:1920px){.xl\\:-translate-y-64{--transform-translate-y:-16rem!important}}@media (min-width:1920px){.xl\\:-translate-y-px{--transform-translate-y:-1px!important}}@media (min-width:1920px){.xl\\:-translate-y-full{--transform-translate-y:-100%!important}}@media (min-width:1920px){.xl\\:-translate-y-1\\/2{--transform-translate-y:-50%!important}}@media (min-width:1920px){.xl\\:translate-y-1\\/2{--transform-translate-y:50%!important}}@media (min-width:1920px){.xl\\:translate-y-full{--transform-translate-y:100%!important}}@media (min-width:1920px){.xl\\:hover\\:translate-x-0:hover{--transform-translate-x:0!important}}@media (min-width:1920px){.xl\\:hover\\:translate-x-1:hover{--transform-translate-x:0.25rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-x-2:hover{--transform-translate-x:0.5rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-x-3:hover{--transform-translate-x:0.75rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-x-4:hover{--transform-translate-x:1rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-x-5:hover{--transform-translate-x:1.25rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-x-6:hover{--transform-translate-x:1.5rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-x-8:hover{--transform-translate-x:2rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-x-10:hover{--transform-translate-x:2.5rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-x-12:hover{--transform-translate-x:3rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-x-16:hover{--transform-translate-x:4rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-x-20:hover{--transform-translate-x:5rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-x-24:hover{--transform-translate-x:6rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-x-32:hover{--transform-translate-x:8rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-x-40:hover{--transform-translate-x:10rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-x-48:hover{--transform-translate-x:12rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-x-56:hover{--transform-translate-x:14rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-x-64:hover{--transform-translate-x:16rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-x-px:hover{--transform-translate-x:1px!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-x-1:hover{--transform-translate-x:-0.25rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-x-2:hover{--transform-translate-x:-0.5rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-x-3:hover{--transform-translate-x:-0.75rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-x-4:hover{--transform-translate-x:-1rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-x-5:hover{--transform-translate-x:-1.25rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-x-6:hover{--transform-translate-x:-1.5rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-x-8:hover{--transform-translate-x:-2rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-x-10:hover{--transform-translate-x:-2.5rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-x-12:hover{--transform-translate-x:-3rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-x-16:hover{--transform-translate-x:-4rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-x-20:hover{--transform-translate-x:-5rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-x-24:hover{--transform-translate-x:-6rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-x-32:hover{--transform-translate-x:-8rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-x-40:hover{--transform-translate-x:-10rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-x-48:hover{--transform-translate-x:-12rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-x-56:hover{--transform-translate-x:-14rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-x-64:hover{--transform-translate-x:-16rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-x-px:hover{--transform-translate-x:-1px!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-x-full:hover{--transform-translate-x:-100%!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-x-1\\/2:hover{--transform-translate-x:-50%!important}}@media (min-width:1920px){.xl\\:hover\\:translate-x-1\\/2:hover{--transform-translate-x:50%!important}}@media (min-width:1920px){.xl\\:hover\\:translate-x-full:hover{--transform-translate-x:100%!important}}@media (min-width:1920px){.xl\\:hover\\:translate-y-0:hover{--transform-translate-y:0!important}}@media (min-width:1920px){.xl\\:hover\\:translate-y-1:hover{--transform-translate-y:0.25rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-y-2:hover{--transform-translate-y:0.5rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-y-3:hover{--transform-translate-y:0.75rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-y-4:hover{--transform-translate-y:1rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-y-5:hover{--transform-translate-y:1.25rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-y-6:hover{--transform-translate-y:1.5rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-y-8:hover{--transform-translate-y:2rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-y-10:hover{--transform-translate-y:2.5rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-y-12:hover{--transform-translate-y:3rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-y-16:hover{--transform-translate-y:4rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-y-20:hover{--transform-translate-y:5rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-y-24:hover{--transform-translate-y:6rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-y-32:hover{--transform-translate-y:8rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-y-40:hover{--transform-translate-y:10rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-y-48:hover{--transform-translate-y:12rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-y-56:hover{--transform-translate-y:14rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-y-64:hover{--transform-translate-y:16rem!important}}@media (min-width:1920px){.xl\\:hover\\:translate-y-px:hover{--transform-translate-y:1px!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-y-1:hover{--transform-translate-y:-0.25rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-y-2:hover{--transform-translate-y:-0.5rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-y-3:hover{--transform-translate-y:-0.75rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-y-4:hover{--transform-translate-y:-1rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-y-5:hover{--transform-translate-y:-1.25rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-y-6:hover{--transform-translate-y:-1.5rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-y-8:hover{--transform-translate-y:-2rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-y-10:hover{--transform-translate-y:-2.5rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-y-12:hover{--transform-translate-y:-3rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-y-16:hover{--transform-translate-y:-4rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-y-20:hover{--transform-translate-y:-5rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-y-24:hover{--transform-translate-y:-6rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-y-32:hover{--transform-translate-y:-8rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-y-40:hover{--transform-translate-y:-10rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-y-48:hover{--transform-translate-y:-12rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-y-56:hover{--transform-translate-y:-14rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-y-64:hover{--transform-translate-y:-16rem!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-y-px:hover{--transform-translate-y:-1px!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-y-full:hover{--transform-translate-y:-100%!important}}@media (min-width:1920px){.xl\\:hover\\:-translate-y-1\\/2:hover{--transform-translate-y:-50%!important}}@media (min-width:1920px){.xl\\:hover\\:translate-y-1\\/2:hover{--transform-translate-y:50%!important}}@media (min-width:1920px){.xl\\:hover\\:translate-y-full:hover{--transform-translate-y:100%!important}}@media (min-width:1920px){.xl\\:focus\\:translate-x-0:focus{--transform-translate-x:0!important}}@media (min-width:1920px){.xl\\:focus\\:translate-x-1:focus{--transform-translate-x:0.25rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-x-2:focus{--transform-translate-x:0.5rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-x-3:focus{--transform-translate-x:0.75rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-x-4:focus{--transform-translate-x:1rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-x-5:focus{--transform-translate-x:1.25rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-x-6:focus{--transform-translate-x:1.5rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-x-8:focus{--transform-translate-x:2rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-x-10:focus{--transform-translate-x:2.5rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-x-12:focus{--transform-translate-x:3rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-x-16:focus{--transform-translate-x:4rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-x-20:focus{--transform-translate-x:5rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-x-24:focus{--transform-translate-x:6rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-x-32:focus{--transform-translate-x:8rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-x-40:focus{--transform-translate-x:10rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-x-48:focus{--transform-translate-x:12rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-x-56:focus{--transform-translate-x:14rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-x-64:focus{--transform-translate-x:16rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-x-px:focus{--transform-translate-x:1px!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-x-1:focus{--transform-translate-x:-0.25rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-x-2:focus{--transform-translate-x:-0.5rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-x-3:focus{--transform-translate-x:-0.75rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-x-4:focus{--transform-translate-x:-1rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-x-5:focus{--transform-translate-x:-1.25rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-x-6:focus{--transform-translate-x:-1.5rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-x-8:focus{--transform-translate-x:-2rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-x-10:focus{--transform-translate-x:-2.5rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-x-12:focus{--transform-translate-x:-3rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-x-16:focus{--transform-translate-x:-4rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-x-20:focus{--transform-translate-x:-5rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-x-24:focus{--transform-translate-x:-6rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-x-32:focus{--transform-translate-x:-8rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-x-40:focus{--transform-translate-x:-10rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-x-48:focus{--transform-translate-x:-12rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-x-56:focus{--transform-translate-x:-14rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-x-64:focus{--transform-translate-x:-16rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-x-px:focus{--transform-translate-x:-1px!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-x-full:focus{--transform-translate-x:-100%!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-x-1\\/2:focus{--transform-translate-x:-50%!important}}@media (min-width:1920px){.xl\\:focus\\:translate-x-1\\/2:focus{--transform-translate-x:50%!important}}@media (min-width:1920px){.xl\\:focus\\:translate-x-full:focus{--transform-translate-x:100%!important}}@media (min-width:1920px){.xl\\:focus\\:translate-y-0:focus{--transform-translate-y:0!important}}@media (min-width:1920px){.xl\\:focus\\:translate-y-1:focus{--transform-translate-y:0.25rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-y-2:focus{--transform-translate-y:0.5rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-y-3:focus{--transform-translate-y:0.75rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-y-4:focus{--transform-translate-y:1rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-y-5:focus{--transform-translate-y:1.25rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-y-6:focus{--transform-translate-y:1.5rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-y-8:focus{--transform-translate-y:2rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-y-10:focus{--transform-translate-y:2.5rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-y-12:focus{--transform-translate-y:3rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-y-16:focus{--transform-translate-y:4rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-y-20:focus{--transform-translate-y:5rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-y-24:focus{--transform-translate-y:6rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-y-32:focus{--transform-translate-y:8rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-y-40:focus{--transform-translate-y:10rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-y-48:focus{--transform-translate-y:12rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-y-56:focus{--transform-translate-y:14rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-y-64:focus{--transform-translate-y:16rem!important}}@media (min-width:1920px){.xl\\:focus\\:translate-y-px:focus{--transform-translate-y:1px!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-y-1:focus{--transform-translate-y:-0.25rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-y-2:focus{--transform-translate-y:-0.5rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-y-3:focus{--transform-translate-y:-0.75rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-y-4:focus{--transform-translate-y:-1rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-y-5:focus{--transform-translate-y:-1.25rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-y-6:focus{--transform-translate-y:-1.5rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-y-8:focus{--transform-translate-y:-2rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-y-10:focus{--transform-translate-y:-2.5rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-y-12:focus{--transform-translate-y:-3rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-y-16:focus{--transform-translate-y:-4rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-y-20:focus{--transform-translate-y:-5rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-y-24:focus{--transform-translate-y:-6rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-y-32:focus{--transform-translate-y:-8rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-y-40:focus{--transform-translate-y:-10rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-y-48:focus{--transform-translate-y:-12rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-y-56:focus{--transform-translate-y:-14rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-y-64:focus{--transform-translate-y:-16rem!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-y-px:focus{--transform-translate-y:-1px!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-y-full:focus{--transform-translate-y:-100%!important}}@media (min-width:1920px){.xl\\:focus\\:-translate-y-1\\/2:focus{--transform-translate-y:-50%!important}}@media (min-width:1920px){.xl\\:focus\\:translate-y-1\\/2:focus{--transform-translate-y:50%!important}}@media (min-width:1920px){.xl\\:focus\\:translate-y-full:focus{--transform-translate-y:100%!important}}@media (min-width:1920px){.xl\\:skew-x-0{--transform-skew-x:0!important}}@media (min-width:1920px){.xl\\:skew-x-1{--transform-skew-x:1deg!important}}@media (min-width:1920px){.xl\\:skew-x-2{--transform-skew-x:2deg!important}}@media (min-width:1920px){.xl\\:skew-x-3{--transform-skew-x:3deg!important}}@media (min-width:1920px){.xl\\:skew-x-6{--transform-skew-x:6deg!important}}@media (min-width:1920px){.xl\\:skew-x-12{--transform-skew-x:12deg!important}}@media (min-width:1920px){.xl\\:-skew-x-12{--transform-skew-x:-12deg!important}}@media (min-width:1920px){.xl\\:-skew-x-6{--transform-skew-x:-6deg!important}}@media (min-width:1920px){.xl\\:-skew-x-3{--transform-skew-x:-3deg!important}}@media (min-width:1920px){.xl\\:-skew-x-2{--transform-skew-x:-2deg!important}}@media (min-width:1920px){.xl\\:-skew-x-1{--transform-skew-x:-1deg!important}}@media (min-width:1920px){.xl\\:skew-y-0{--transform-skew-y:0!important}}@media (min-width:1920px){.xl\\:skew-y-1{--transform-skew-y:1deg!important}}@media (min-width:1920px){.xl\\:skew-y-2{--transform-skew-y:2deg!important}}@media (min-width:1920px){.xl\\:skew-y-3{--transform-skew-y:3deg!important}}@media (min-width:1920px){.xl\\:skew-y-6{--transform-skew-y:6deg!important}}@media (min-width:1920px){.xl\\:skew-y-12{--transform-skew-y:12deg!important}}@media (min-width:1920px){.xl\\:-skew-y-12{--transform-skew-y:-12deg!important}}@media (min-width:1920px){.xl\\:-skew-y-6{--transform-skew-y:-6deg!important}}@media (min-width:1920px){.xl\\:-skew-y-3{--transform-skew-y:-3deg!important}}@media (min-width:1920px){.xl\\:-skew-y-2{--transform-skew-y:-2deg!important}}@media (min-width:1920px){.xl\\:-skew-y-1{--transform-skew-y:-1deg!important}}@media (min-width:1920px){.xl\\:hover\\:skew-x-0:hover{--transform-skew-x:0!important}}@media (min-width:1920px){.xl\\:hover\\:skew-x-1:hover{--transform-skew-x:1deg!important}}@media (min-width:1920px){.xl\\:hover\\:skew-x-2:hover{--transform-skew-x:2deg!important}}@media (min-width:1920px){.xl\\:hover\\:skew-x-3:hover{--transform-skew-x:3deg!important}}@media (min-width:1920px){.xl\\:hover\\:skew-x-6:hover{--transform-skew-x:6deg!important}}@media (min-width:1920px){.xl\\:hover\\:skew-x-12:hover{--transform-skew-x:12deg!important}}@media (min-width:1920px){.xl\\:hover\\:-skew-x-12:hover{--transform-skew-x:-12deg!important}}@media (min-width:1920px){.xl\\:hover\\:-skew-x-6:hover{--transform-skew-x:-6deg!important}}@media (min-width:1920px){.xl\\:hover\\:-skew-x-3:hover{--transform-skew-x:-3deg!important}}@media (min-width:1920px){.xl\\:hover\\:-skew-x-2:hover{--transform-skew-x:-2deg!important}}@media (min-width:1920px){.xl\\:hover\\:-skew-x-1:hover{--transform-skew-x:-1deg!important}}@media (min-width:1920px){.xl\\:hover\\:skew-y-0:hover{--transform-skew-y:0!important}}@media (min-width:1920px){.xl\\:hover\\:skew-y-1:hover{--transform-skew-y:1deg!important}}@media (min-width:1920px){.xl\\:hover\\:skew-y-2:hover{--transform-skew-y:2deg!important}}@media (min-width:1920px){.xl\\:hover\\:skew-y-3:hover{--transform-skew-y:3deg!important}}@media (min-width:1920px){.xl\\:hover\\:skew-y-6:hover{--transform-skew-y:6deg!important}}@media (min-width:1920px){.xl\\:hover\\:skew-y-12:hover{--transform-skew-y:12deg!important}}@media (min-width:1920px){.xl\\:hover\\:-skew-y-12:hover{--transform-skew-y:-12deg!important}}@media (min-width:1920px){.xl\\:hover\\:-skew-y-6:hover{--transform-skew-y:-6deg!important}}@media (min-width:1920px){.xl\\:hover\\:-skew-y-3:hover{--transform-skew-y:-3deg!important}}@media (min-width:1920px){.xl\\:hover\\:-skew-y-2:hover{--transform-skew-y:-2deg!important}}@media (min-width:1920px){.xl\\:hover\\:-skew-y-1:hover{--transform-skew-y:-1deg!important}}@media (min-width:1920px){.xl\\:focus\\:skew-x-0:focus{--transform-skew-x:0!important}}@media (min-width:1920px){.xl\\:focus\\:skew-x-1:focus{--transform-skew-x:1deg!important}}@media (min-width:1920px){.xl\\:focus\\:skew-x-2:focus{--transform-skew-x:2deg!important}}@media (min-width:1920px){.xl\\:focus\\:skew-x-3:focus{--transform-skew-x:3deg!important}}@media (min-width:1920px){.xl\\:focus\\:skew-x-6:focus{--transform-skew-x:6deg!important}}@media (min-width:1920px){.xl\\:focus\\:skew-x-12:focus{--transform-skew-x:12deg!important}}@media (min-width:1920px){.xl\\:focus\\:-skew-x-12:focus{--transform-skew-x:-12deg!important}}@media (min-width:1920px){.xl\\:focus\\:-skew-x-6:focus{--transform-skew-x:-6deg!important}}@media (min-width:1920px){.xl\\:focus\\:-skew-x-3:focus{--transform-skew-x:-3deg!important}}@media (min-width:1920px){.xl\\:focus\\:-skew-x-2:focus{--transform-skew-x:-2deg!important}}@media (min-width:1920px){.xl\\:focus\\:-skew-x-1:focus{--transform-skew-x:-1deg!important}}@media (min-width:1920px){.xl\\:focus\\:skew-y-0:focus{--transform-skew-y:0!important}}@media (min-width:1920px){.xl\\:focus\\:skew-y-1:focus{--transform-skew-y:1deg!important}}@media (min-width:1920px){.xl\\:focus\\:skew-y-2:focus{--transform-skew-y:2deg!important}}@media (min-width:1920px){.xl\\:focus\\:skew-y-3:focus{--transform-skew-y:3deg!important}}@media (min-width:1920px){.xl\\:focus\\:skew-y-6:focus{--transform-skew-y:6deg!important}}@media (min-width:1920px){.xl\\:focus\\:skew-y-12:focus{--transform-skew-y:12deg!important}}@media (min-width:1920px){.xl\\:focus\\:-skew-y-12:focus{--transform-skew-y:-12deg!important}}@media (min-width:1920px){.xl\\:focus\\:-skew-y-6:focus{--transform-skew-y:-6deg!important}}@media (min-width:1920px){.xl\\:focus\\:-skew-y-3:focus{--transform-skew-y:-3deg!important}}@media (min-width:1920px){.xl\\:focus\\:-skew-y-2:focus{--transform-skew-y:-2deg!important}}@media (min-width:1920px){.xl\\:focus\\:-skew-y-1:focus{--transform-skew-y:-1deg!important}}@media (min-width:1920px){.xl\\:transition-none{transition-property:none!important}}@media (min-width:1920px){.xl\\:transition-all{transition-property:all!important}}@media (min-width:1920px){.xl\\:transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform!important}}@media (min-width:1920px){.xl\\:transition-colors{transition-property:background-color,border-color,color,fill,stroke!important}}@media (min-width:1920px){.xl\\:transition-opacity{transition-property:opacity!important}}@media (min-width:1920px){.xl\\:transition-shadow{transition-property:box-shadow!important}}@media (min-width:1920px){.xl\\:transition-transform{transition-property:transform!important}}@media (min-width:1920px){.xl\\:ease-linear{transition-timing-function:linear!important}}@media (min-width:1920px){.xl\\:ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)!important}}@media (min-width:1920px){.xl\\:ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)!important}}@media (min-width:1920px){.xl\\:ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)!important}}@media (min-width:1920px){.xl\\:duration-75{transition-duration:75ms!important}}@media (min-width:1920px){.xl\\:duration-100{transition-duration:.1s!important}}@media (min-width:1920px){.xl\\:duration-150{transition-duration:.15s!important}}@media (min-width:1920px){.xl\\:duration-200{transition-duration:.2s!important}}@media (min-width:1920px){.xl\\:duration-300{transition-duration:.3s!important}}@media (min-width:1920px){.xl\\:duration-500{transition-duration:.5s!important}}@media (min-width:1920px){.xl\\:duration-700{transition-duration:.7s!important}}@media (min-width:1920px){.xl\\:duration-1000{transition-duration:1s!important}}@media (min-width:1920px){.xl\\:delay-75{transition-delay:75ms!important}}@media (min-width:1920px){.xl\\:delay-100{transition-delay:.1s!important}}@media (min-width:1920px){.xl\\:delay-150{transition-delay:.15s!important}}@media (min-width:1920px){.xl\\:delay-200{transition-delay:.2s!important}}@media (min-width:1920px){.xl\\:delay-300{transition-delay:.3s!important}}@media (min-width:1920px){.xl\\:delay-500{transition-delay:.5s!important}}@media (min-width:1920px){.xl\\:delay-700{transition-delay:.7s!important}}@media (min-width:1920px){.xl\\:delay-1000{transition-delay:1s!important}}@media (min-width:1920px){.xl\\:animate-none{animation:none!important}}@media (min-width:1920px){.xl\\:animate-spin{animation:spin 1s linear infinite!important}}@media (min-width:1920px){.xl\\:animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite!important}}@media (min-width:1920px){.xl\\:animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite!important}}@media (min-width:1920px){.xl\\:animate-bounce{animation:bounce 1s infinite!important}}@media (min-width:1920px){.xl\\:truncate-none{overflow:unset!important;text-overflow:unset!important;white-space:unset!important}}"
  },
  {
    "path": "src/aup/dashboard/frontend/karma.conf.js",
    "content": "// Karma configuration file, see link for more information\n// https://karma-runner.github.io/1.0/config/configuration-file.html\n\nmodule.exports = function (config) {\n  config.set({\n    basePath: '',\n    frameworks: ['jasmine', '@angular-devkit/build-angular'],\n    plugins: [\n      require('karma-jasmine'),\n      require('karma-chrome-launcher'),\n      require('karma-jasmine-html-reporter'),\n      require('karma-coverage-istanbul-reporter'),\n      require('@angular-devkit/build-angular/plugins/karma')\n    ],\n    client: {\n      clearContext: false // leave Jasmine Spec Runner output visible in browser\n    },\n    coverageIstanbulReporter: {\n      dir: require('path').join(__dirname, './coverage/auptimizer-dashboard'),\n      reports: ['html', 'lcovonly', 'text-summary'],\n      fixWebpackSourcePaths: true\n    },\n    reporters: ['progress', 'kjhtml'],\n    port: 9876,\n    colors: true,\n    logLevel: config.LOG_INFO,\n    autoWatch: true,\n    browsers: ['Chrome'],\n    singleRun: false,\n    restartOnFileChange: true\n  });\n};\n"
  },
  {
    "path": "src/aup/dashboard/frontend/package.json",
    "content": "{\n  \"name\": \"auptimizer-dashboard\",\n  \"version\": \"2.0.0\",\n  \"author\": \"LG Electronics Inc.\",\n  \"copyright.owner\": \"LG Electronics Inc.\",\n  \"license\": \"GPL-3.0-or-later\",\n  \"scripts\": {\n    \"ng\": \"ng\",\n    \"start\": \"ng serve\",\n    \"start:dev\": \"ng serve --port=4222 --o\",\n    \"build\": \"ng build\",\n    \"build:prod\": \"ng build --prod --aot --output-hashing=all\",\n    \"test\": \"ng test\",\n    \"lint\": \"ng lint\",\n    \"e2e\": \"ng e2e\"\n  },\n  \"private\": true,\n  \"dependencies\": {\n    \"@angular/animations\": \"~11.0.9\",\n    \"@angular/cdk\": \"^11.0.4\",\n    \"@angular/common\": \"~11.0.9\",\n    \"@angular/compiler\": \"~11.0.9\",\n    \"@angular/core\": \"~11.0.9\",\n    \"@angular/flex-layout\": \"^11.0.0-beta.33\",\n    \"@angular/forms\": \"~11.0.9\",\n    \"@angular/material\": \"^11.0.4\",\n    \"@angular/platform-browser\": \"~11.0.9\",\n    \"@angular/platform-browser-dynamic\": \"~11.0.9\",\n    \"@angular/router\": \"~11.0.9\",\n    \"@ngxs/devtools-plugin\": \"^3.7.1\",\n    \"@ngxs/logger-plugin\": \"^3.7.1\",\n    \"@ngxs/router-plugin\": \"^3.7.1\",\n    \"@ngxs/storage-plugin\": \"^3.7.1\",\n    \"@ngxs/store\": \"^3.7.1\",\n    \"angular-plotly.js\": \"^3.0.0\",\n    \"eslint-config-prettier\": \"^7.1.0\",\n    \"eslint-plugin-prettier\": \"^3.3.1\",\n    \"jsoneditor\": \"^9.1.8\",\n    \"mat-table-exporter\": \"^9.1.0\",\n    \"moment\": \"^2.29.1\",\n    \"ngx-pagination\": \"^5.0.0\",\n    \"plotly.js\": \"^1.58.4\",\n    \"rxjs\": \"~6.6.3\",\n    \"tslib\": \"^2.1.0\",\n    \"zone.js\": \"~0.11.3\"\n  },\n  \"devDependencies\": {\n    \"@angular-builders/custom-webpack\": \"10.0.1\",\n    \"@angular-devkit/build-angular\": \"~0.1100.7\",\n    \"@angular-eslint/builder\": \"1.0.0\",\n    \"@angular-eslint/eslint-plugin\": \"1.0.0\",\n    \"@angular-eslint/eslint-plugin-template\": \"1.0.0\",\n    \"@angular-eslint/schematics\": \"1.0.0\",\n    \"@angular-eslint/template-parser\": \"1.0.0\",\n    \"@angular/cli\": \"~11.0.7\",\n    \"@angular/compiler-cli\": \"~11.0.9\",\n    \"@types/jasmine\": \"~3.6.2\",\n    \"@types/jasminewd2\": \"~2.0.8\",\n    \"@types/node\": \"^14.14.21\",\n    \"@typescript-eslint/eslint-plugin\": \"4.3.0\",\n    \"@typescript-eslint/parser\": \"^4.3.0\",\n    \"codelyzer\": \"^6.0.1\",\n    \"eslint\": \"^7.6.0\",\n    \"eslint-import-resolver-typescript\": \"^2.3.0\",\n    \"eslint-plugin-import\": \"^2.22.1\",\n    \"eslint-plugin-jsdoc\": \"30.7.6\",\n    \"eslint-plugin-prefer-arrow\": \"1.2.2\",\n    \"eslint-plugin-react\": \"^7.22.0\",\n    \"jasmine-core\": \"~3.6.0\",\n    \"jasmine-spec-reporter\": \"~6.0.0\",\n    \"karma\": \"^5.2.0\",\n    \"karma-chrome-launcher\": \"~3.1.0\",\n    \"karma-coverage-istanbul-reporter\": \"~3.0.3\",\n    \"karma-jasmine\": \"~4.0.1\",\n    \"karma-jasmine-html-reporter\": \"^1.5.4\",\n    \"postcss-import\": \"^12.0.1\",\n    \"postcss-loader\": \"^3.0.0\",\n    \"postcss-scss\": \"^2.1.1\",\n    \"prettier\": \"^2.2.1\",\n    \"pretty-quick\": \"^3.1.0\",\n    \"protractor\": \"~7.0.0\",\n    \"tailwindcss\": \"^1.4.6\",\n    \"ts-node\": \"~9.1.1\",\n    \"typescript\": \"~4.0.2\"\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/_redirects",
    "content": "/*    /index.html    200\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/@core/app-load.service.ts",
    "content": "import { Injectable } from '@angular/core';\nimport { Store } from '@ngxs/store';\nimport { SetTheme, GetDatabaseLink } from '../appStore/app.actions';\nimport { ColorSchemeService } from '../shared/services/color-scheme.service';\nimport { CUSTOM_ICONS } from '../models/data/custom-icons.data';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Injectable()\nexport class AppLoadService {\n  constructor(\n    private store: Store,\n    public colorSchemeService: ColorSchemeService,\n    readonly matIconRegistry: MatIconRegistry,\n    readonly domSanitizer: DomSanitizer\n  ) {\n    CUSTOM_ICONS.map((icon) => {\n      this.matIconRegistry.addSvgIcon(icon.name, this.domSanitizer.bypassSecurityTrustResourceUrl(icon.path));\n    });\n  }\n\n  initializeApplication(): void {\n    this.store.dispatch(new GetDatabaseLink());\n    this.setTheme();\n  }\n\n  setTheme(): void {\n    this.colorSchemeService.load();\n    this.store.dispatch(new SetTheme());\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/@core/core.module.ts",
    "content": "/* eslint-disable prefer-arrow/prefer-arrow-functions */\nimport { NgModule, APP_INITIALIZER } from '@angular/core';\n\nimport { HttpClientModule } from '@angular/common/http';\nimport { AppLoadService } from './app-load.service';\nimport { ColorSchemeService } from '../shared/services/color-scheme.service';\n\nexport function initializeApplication(appLoadService: AppLoadService) {\n  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n  return () => appLoadService.initializeApplication();\n}\n// we can add more initializers in the future. As long as they dont depend\n// each other we can add new provider and make them run in parallel\n@NgModule({\n  imports: [HttpClientModule],\n  providers: [\n    AppLoadService,\n    ColorSchemeService,\n    { provide: APP_INITIALIZER, useFactory: initializeApplication, deps: [AppLoadService], multi: true },\n  ],\n})\nexport class CoreModule {}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/app-routing.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { PageNotFoundComponent } from './page-not-found/page-not-found.component';\n\nconst routes: Routes = [\n  { path: '', loadChildren: () => import('./main/main.module').then((m) => m.MainModule) },\n  { path: '**', component: PageNotFoundComponent },\n];\n\n@NgModule({\n  imports: [RouterModule.forRoot(routes, { useHash: true, relativeLinkResolution: 'legacy' })],\n  exports: [RouterModule],\n})\nexport class AppRoutingModule {}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/app.component.html",
    "content": "<router-outlet></router-outlet>\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/app.component.scss",
    "content": ""
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/app.component.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { NO_ERRORS_SCHEMA } from '@angular/core';\nimport { TestBed } from '@angular/core/testing';\nimport { NgxsModule } from '@ngxs/store';\nimport { AppComponent } from './app.component';\nimport { RouterTestingModule } from '@angular/router/testing';\n\ndescribe('AppComponent', () => {\n  beforeEach(async () => {\n    await TestBed.configureTestingModule({\n      schemas: [NO_ERRORS_SCHEMA],\n      imports: [NgxsModule.forRoot(), RouterTestingModule],\n      declarations: [AppComponent],\n    }).compileComponents();\n  });\n\n  it('should create the app', () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    const app = fixture.componentInstance;\n    expect(app).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/app.component.ts",
    "content": "import { Component } from '@angular/core';\nimport { Store } from '@ngxs/store';\nimport { GetNotifications } from './appStore/app.actions';\n\n@Component({\n  selector: 'app-root',\n  templateUrl: './app.component.html',\n})\nexport class AppComponent {\n  title = 'Auptimizer-Dashboard';\n\n  constructor(private store: Store) {\n    this.store.dispatch(new GetNotifications());\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/app.module.ts",
    "content": "import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { AppRoutingModule } from './app-routing.module';\nimport { AppComponent } from './app.component';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { SharedModule } from './shared/shared.module';\nimport { AppState } from './appStore/app.store';\nimport { NgxsModule } from '@ngxs/store';\nimport { NgxsRouterPluginModule } from '@ngxs/router-plugin';\nimport { NgxsReduxDevtoolsPluginModule } from '@ngxs/devtools-plugin';\nimport { NgxsLoggerPluginModule } from '@ngxs/logger-plugin';\nimport { environment } from '../environments/environment';\nimport { ColorSchemeService } from './shared/services/color-scheme.service';\nimport { CoreModule } from './@core/core.module';\nimport { DBGuard } from './guards/db.guard';\nimport { PageNotFoundComponent } from './page-not-found/page-not-found.component';\nimport { NgxsStoragePluginModule } from '@ngxs/storage-plugin';\n@NgModule({\n  declarations: [AppComponent, PageNotFoundComponent],\n  imports: [\n    BrowserModule,\n    CoreModule,\n    BrowserAnimationsModule,\n    AppRoutingModule,\n    SharedModule,\n    NgxsModule.forRoot([AppState]),\n    NgxsRouterPluginModule.forRoot(),\n    NgxsReduxDevtoolsPluginModule.forRoot({ name: 'App Store' }),\n    NgxsStoragePluginModule.forRoot({\n      key: ['app.dbUrl'],\n    }),\n    environment.production ? [] : NgxsLoggerPluginModule.forRoot(),\n  ],\n  providers: [ColorSchemeService, DBGuard],\n  bootstrap: [AppComponent],\n})\nexport class AppModule {}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/app.service.ts",
    "content": "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Injectable } from '@angular/core';\nimport { ApiService } from './shared/services/api.service';\n\n@Injectable({ providedIn: 'root' })\nexport class AppService {\n  constructor(private apiService: ApiService) {}\n\n  getDatabaseLink(): any {\n    return this.apiService.get<string>(`current_db`);\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/appStore/app-state.model.ts",
    "content": "import { NOTIFICATION_TYPE } from '../models/enum/notification-type.enum';\n\nexport interface AppStateModel {\n  theme: Theme;\n  themes: Theme[];\n  dbUrl: string;\n  notifications: AppNotification[];\n  notificationExpiration: number; // Seconds\n}\n\nexport interface Theme {\n  name: string;\n  icon: string;\n}\n\nexport interface AppNotification {\n  receivedAt: number;\n  type: NOTIFICATION_TYPE;\n  message: string;\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/appStore/app.actions.ts",
    "content": "import { Theme } from './app-state.model';\nimport { AppNotification } from './app-state.model';\n\nexport class SetTheme {\n  static readonly type = '[Theme] Set theme';\n}\n\nexport class ChangeTheme {\n  static readonly type = '[Theme] Change theme';\n  constructor(public payload: Theme) {}\n}\n\nexport class GetDatabaseLink {\n  static readonly type = '[Database] Get database link';\n}\n\nexport class AddNotification {\n  static readonly type = '[Notifications] Add notification';\n  constructor(public payload: AppNotification) {}\n}\n\nexport class RemoveNotification {\n  static readonly type = '[Notifications] Remove notification';\n  constructor(public payload: AppNotification) {}\n}\n\nexport class GetNotifications {\n  static readonly type = '[Notifications] Get notifications';\n}\n\nexport class RemoveAllNotifications {\n  static readonly type = '[Notifications] Remove notifications';\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/appStore/app.store.ts",
    "content": "/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\nimport { State, Selector, Action, StateContext } from '@ngxs/store';\nimport { Injectable } from '@angular/core';\nimport { AppStateModel, Theme } from './app-state.model';\nimport {\n  SetTheme,\n  ChangeTheme,\n  GetDatabaseLink,\n  AddNotification,\n  RemoveNotification,\n  RemoveAllNotifications,\n  GetNotifications,\n} from './app.actions';\nimport { ColorSchemeService } from '../shared/services/color-scheme.service';\nimport { AppService } from '../app.service';\nimport { catchError, map } from 'rxjs/operators';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { throwError } from 'rxjs';\nimport { SnackbarService, UtilsService } from '../shared/services';\nimport { AppNotification } from './app-state.model';\nimport { THEME_OPTION } from '../models/enum/theme-option.enum';\n\n@State<AppStateModel>({\n  name: 'app',\n  defaults: {\n    theme: null,\n    themes: [\n      {\n        name: THEME_OPTION.DARK,\n        icon: 'brightness_3',\n      },\n      {\n        name: THEME_OPTION.LIGHT,\n        icon: 'wb_sunny',\n      },\n    ],\n    dbUrl: null,\n    notifications: [],\n    notificationExpiration: 86400, // 1 day in seconds\n  },\n})\n@Injectable()\nexport class AppState {\n  @Selector()\n  static theme(state: AppStateModel): Theme {\n    return state.theme;\n  }\n  @Selector()\n  static dbUrl(state: AppStateModel): string {\n    return state.dbUrl;\n  }\n  @Selector()\n  static isDbUrl(state: AppStateModel): boolean {\n    return !!state.dbUrl;\n  }\n  @Selector()\n  static themes(state: AppStateModel): Theme[] {\n    return state.themes;\n  }\n  @Selector()\n  static notifications(state: AppStateModel): AppNotification[] {\n    return state.notifications;\n  }\n\n  constructor(\n    public colorSchemeService: ColorSchemeService,\n    private appService: AppService,\n    private snackbarService: SnackbarService,\n    readonly utilsService: UtilsService\n  ) {}\n\n  @Action(SetTheme)\n  setTheme(ctx: StateContext<AppStateModel>): void {\n    const state = ctx.getState();\n    const localTheme = this.colorSchemeService.currentActive();\n    const currentTheme = state.themes.filter((theme) => theme.name === localTheme)[0];\n    ctx.setState({\n      ...state,\n      theme: currentTheme,\n    });\n  }\n\n  @Action(ChangeTheme)\n  changeTheme(ctx: StateContext<AppStateModel>, { payload }: ChangeTheme): void {\n    const state = ctx.getState();\n    const currentTheme = payload;\n    ctx.setState({\n      ...state,\n      theme: currentTheme,\n    });\n    return this.colorSchemeService.update(payload.name);\n  }\n\n  @Action(AddNotification)\n  addNotifications(ctx: StateContext<AppStateModel>, { payload }: AddNotification): void {\n    const state = ctx.getState();\n    if (!payload) {\n      return;\n    }\n    const notifications = state.notifications.slice();\n    const index = notifications.indexOf(payload);\n    if (index === -1) {\n      notifications.push(payload);\n    }\n    ctx.patchState({ notifications });\n    localStorage.setItem('notifications', JSON.stringify(notifications));\n    return;\n  }\n\n  @Action(RemoveNotification)\n  removeNotifications(ctx: StateContext<AppStateModel>, { payload }: RemoveNotification): void {\n    const state = ctx.getState();\n    if (!payload) {\n      return;\n    }\n    const notifications = state.notifications.slice();\n    const index = notifications.indexOf(payload);\n    notifications.splice(index, 1);\n    ctx.patchState({ notifications });\n    localStorage.setItem('notifications', JSON.stringify(notifications));\n    return;\n  }\n\n  @Action(RemoveAllNotifications)\n  removeAllNotifications(ctx: StateContext<AppStateModel>): void {\n    const notifications = [];\n    ctx.patchState({ notifications });\n    localStorage.setItem('notifications', JSON.stringify(notifications));\n    return;\n  }\n\n  @Action(GetNotifications)\n  getNotifications(ctx: StateContext<AppStateModel>): void {\n    const allNotifications = (JSON.parse(localStorage.getItem('notifications')) as AppNotification[]) || [];\n    const expiry = ctx.getState().notificationExpiration;\n    const now = new Date().getTime();\n    const notifications = allNotifications.filter((notification: AppNotification) => {\n      const difference = (now - notification.receivedAt) / 1000;\n      if (expiry > difference) {\n        return notification;\n      }\n    });\n    ctx.patchState({\n      notifications,\n    });\n    localStorage.setItem('notifications', JSON.stringify(notifications));\n    return;\n  }\n\n  @Action(GetDatabaseLink)\n  getDatabaseLink(ctx: StateContext<AppStateModel>): void {\n    return this.appService.getDatabaseLink().pipe(\n      catchError((err: HttpErrorResponse) => {\n        this.snackbarService.error(this.utilsService.formatErrorMessage(err));\n        return throwError(err);\n      }),\n      map((res: any) => {\n        if (res && res['db_path']) {\n          ctx.patchState({\n            dbUrl: res['db_path'] as string,\n          });\n          return;\n        }\n      })\n    );\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/guards/db.guard.ts",
    "content": "/* eslint-disable @typescript-eslint/unbound-method */\nimport { Injectable, NgZone } from '@angular/core';\nimport { Router, CanActivate } from '@angular/router';\nimport { Store } from '@ngxs/store';\nimport { AppState } from '../appStore/app.store';\nimport { Navigate } from '@ngxs/router-plugin';\n\n@Injectable()\nexport class DBGuard implements CanActivate {\n  constructor(readonly ngZone: NgZone, readonly store: Store, readonly router: Router) {}\n\n  canActivate(): boolean {\n    const isDbUrl = this.store.selectSnapshot(AppState.isDbUrl);\n    if (!isDbUrl) {\n      this.store.dispatch(new Navigate(['/initialize']));\n    }\n    return isDbUrl;\n  }\n\n  canLoad(): boolean {\n    const isDbUrl = this.store.selectSnapshot(AppState.isDbUrl);\n    if (!isDbUrl) {\n      this.store.dispatch(new Navigate(['/initialize']));\n    }\n    return isDbUrl;\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/containers/index.ts",
    "content": "import { MainComponent } from './main/main.component';\n\nexport const containers = [MainComponent];\n\nexport * from './main/main.component';\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/containers/main/main.component.html",
    "content": "<main>\n  <router-outlet></router-outlet>\n</main>\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/containers/main/main.component.scss",
    "content": ""
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/containers/main/main.component.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { NO_ERRORS_SCHEMA } from '@angular/core';\nimport { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { RouterTestingModule } from '@angular/router/testing';\nimport { NgxsModule } from '@ngxs/store';\n\nimport { MainComponent } from './main.component';\n\ndescribe('MainComponent', () => {\n  let component: MainComponent;\n  let fixture: ComponentFixture<MainComponent>;\n\n  beforeEach(async () => {\n    await TestBed.configureTestingModule({\n      schemas: [NO_ERRORS_SCHEMA],\n      imports: [NgxsModule.forRoot(), RouterTestingModule],\n      declarations: [MainComponent],\n    }).compileComponents();\n  });\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(MainComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/containers/main/main.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'app-main',\n  templateUrl: './main.component.html',\n  styleUrls: ['./main.component.scss'],\n})\nexport class MainComponent {}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/components/experiment-dropdown/experiment-dropdown.component.html",
    "content": "<div *ngIf=\"experiments$ | async as experiments\" class=\"w-full\">\n  <mat-form-field appearance=\"outline\" *ngIf=\"experiments && experiments.length > 0 && experimentIndex !== null\"\n    class=\"w-full\">\n    <mat-label>\n      Select experiment\n    </mat-label>\n    <mat-select (selectionChange)=\"selectedNewExperiment($event)\" [value]=\"experiments[experimentIndex].eid\">\n      <mat-option *ngFor=\"let experiment of experiments\" [value]=\"experiment.eid\">\n        {{ experiment.experimentName || experiment.scriptName }}\n      </mat-option>\n    </mat-select>\n  </mat-form-field>\n</div>"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/components/experiment-dropdown/experiment-dropdown.component.scss",
    "content": "mat-select {\n  font-size: 18px;\n  padding-top: 10px;\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/components/experiment-dropdown/experiment-dropdown.component.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { NO_ERRORS_SCHEMA } from '@angular/core';\nimport { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { NgxsModule } from '@ngxs/store';\n\nimport { ExperimentDropdownComponent } from './experiment-dropdown.component';\n\ndescribe('ExperimentDropdownComponent', () => {\n  let component: ExperimentDropdownComponent;\n  let fixture: ComponentFixture<ExperimentDropdownComponent>;\n\n  beforeEach(async () => {\n    await TestBed.configureTestingModule({\n      schemas: [NO_ERRORS_SCHEMA],\n      imports: [NgxsModule.forRoot()],\n      declarations: [ExperimentDropdownComponent],\n    }).compileComponents();\n  });\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(ExperimentDropdownComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/components/experiment-dropdown/experiment-dropdown.component.ts",
    "content": "/* eslint-disable @typescript-eslint/unbound-method */\nimport { Component, OnInit, ChangeDetectionStrategy, OnDestroy, Input, Output, EventEmitter } from '@angular/core';\nimport { Select, Store } from '@ngxs/store';\nimport { ExperimentState } from '../../store/experiment.store';\nimport { Observable, Subscription } from 'rxjs';\nimport { Experiment } from '../../../../models/experiment.model';\nimport { MatSelectChange } from '@angular/material/select';\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'app-experiment-dropdown',\n  templateUrl: './experiment-dropdown.component.html',\n  styleUrls: ['./experiment-dropdown.component.scss'],\n})\nexport class ExperimentDropdownComponent implements OnInit, OnDestroy {\n  @Select(ExperimentState.experiments) experiments$: Observable<Experiment[]>;\n\n  @Input() experimentId: number;\n  @Output() toggleExperiment = new EventEmitter<number>();\n  experimentIndex: number;\n  subscription: Subscription;\n\n  constructor(readonly store: Store) {}\n\n  ngOnInit(): void {\n    this.subscription = new Subscription();\n    this.subscription.add(\n      this.experiments$.subscribe((experiments: Experiment[]) => {\n        if (experiments && experiments.length > 0 && this.experimentId) {\n          const foundIndex = experiments.findIndex((item) => {\n            return +item.eid === +this.experimentId;\n          });\n          if (foundIndex !== -1) {\n            this.experimentIndex = foundIndex;\n          }\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.subscription.unsubscribe();\n  }\n\n  selectedNewExperiment(event: MatSelectChange): void {\n    if (!event.value) {\n      return;\n    }\n    this.toggleExperiment.emit(event.value);\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/components/header/header.component.html",
    "content": "<mat-toolbar color=\"primary\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"header-font\">\n  <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n    <!-- <a *ngIf=\"currentTheme?.name\" routerLink=\"/\" class=\"logo-container\"\n      ><img [src]=\"'assets/images/Auptimizer-' + currentTheme.name + '.png'\"\n    /></a> -->\n    <a fxHide.lt-md *ngIf=\"currentTheme?.name\" routerLink=\"/\" class=\"logo-container\"><img\n        [src]=\"'assets/images/Auptimizer-dark.png'\" /></a>\n  </div>\n  <div fxLayout=\"row\" fxLayoutGap=\"40px\" fxLayoutGap.md=\"15px\" fxLayoutGap.lt-md=\"15px\" fxLayoutAlign=\"center center\">\n    <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n      <mat-form-field class=\"mt-5 refresh-interval-select\" appearance=\"outline\"\n        *ngIf=\"refreshIntervalOptions$ | async as refreshIntervalOptions\">\n        <mat-label>Refresh every</mat-label>\n        <mat-select (selectionChange)=\"changeRefreshInverval($event)\" [value]=\"refreshInterval$ | async\">\n          <mat-option *ngFor=\"let interval of refreshIntervalOptions\" [value]=\"interval\">{{ interval }} seconds\n          </mat-option>\n        </mat-select>\n      </mat-form-field>\n    </div>\n    <button mat-button (click)=\"onRefresh()\" class=\"header-font\">\n      <mat-icon class=\"mr-3\">cached</mat-icon>Refresh now\n    </button>\n    <button [disabled]=\"!notifications?.length\" mat-icon-button [matMenuTriggerFor]=\"notificationMenu\">\n      <mat-icon matBadgeColor=\"warn\" [matBadgeHidden]=\"!notifications?.length\" [matBadge]=\"notifications?.length\">\n        notifications</mat-icon>\n    </button>\n\n    <button *ngIf=\"currentTheme\" mat-button (click)=\"setTheme()\" class=\"header-font\">\n      <mat-icon class=\"mr-3\">{{ currentTheme.icon }}</mat-icon>{{ currentTheme.name | flu }} mode\n    </button>\n    <div fxLayoutAlign=\"center center\">\n      <span>Version:&nbsp;</span>\n      <span *ngIf=\"version\">v{{ version }}</span>\n    </div>\n  </div>\n</mat-toolbar>\n\n<mat-menu #notificationMenu=\"matMenu\" xPosition=\"before\">\n  <mat-toolbar class=\"notification-menu\">\n    <div class=\"w-full\" fxLayout=\"row\" fxLayoutAlign=\"end center\">\n      <button mat-icon-button>\n        <mat-icon>close</mat-icon>\n      </button>\n    </div>\n  </mat-toolbar>\n  <app-notification (click)=\"$event.stopPropagation()\"></app-notification>\n</mat-menu>"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/components/header/header.component.scss",
    "content": ":host {\n  .logo-container {\n    > img {\n      height: 35px;\n    }\n  }\n}\n\n::ng-deep .mat-menu-panel {\n  max-width: none !important;\n}\n\n::ng-deep .mat-menu-content:not(:empty) {\n  padding: 0 !important;\n}\n\n::ng-deep .mat-form-field-infix {\n  padding: 10px !important;\n}\n\n.notification-menu {\n  height: 50px;\n}\n\n.header-font {\n  font-size: 15px;\n}"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/components/header/header.component.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { NO_ERRORS_SCHEMA } from '@angular/core';\nimport { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { RouterTestingModule } from '@angular/router/testing';\nimport { NgxsModule } from '@ngxs/store';\nimport { FirstLetterUppercasePipe } from '../../../../shared/pipes';\nimport { SharedModule } from '../../../../shared/shared.module';\n\nimport { HeaderComponent } from './header.component';\n\ndescribe('HeaderComponent', () => {\n  let component: HeaderComponent;\n  let fixture: ComponentFixture<HeaderComponent>;\n\n  beforeEach(async () => {\n    await TestBed.configureTestingModule({\n      schemas: [NO_ERRORS_SCHEMA],\n      imports: [NgxsModule.forRoot(), RouterTestingModule, SharedModule],\n      declarations: [HeaderComponent],\n      providers: [{ provide: FirstLetterUppercasePipe, useValue: {} }],\n    }).compileComponents();\n  });\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(HeaderComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/components/header/header.component.ts",
    "content": "/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable @typescript-eslint/unbound-method */\nimport { Component, OnInit, OnDestroy, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\nimport { environment } from '../../../../../environments/environment';\nimport { MatSelectChange } from '@angular/material/select';\nimport { Store, Select } from '@ngxs/store';\nimport { ExperimentState } from '../../store/experiment.store';\nimport { Observable, Subscription } from 'rxjs';\nimport { SetRefreshInterval, RefreshInterval, ToggleSideNav } from '../../store/experiment.actions';\nimport { ColorSchemeService } from '../../../../shared/services/color-scheme.service';\nimport { AppState } from '../../../../appStore/app.store';\nimport { AppNotification, Theme } from '../../../../appStore/app-state.model';\nimport { ChangeTheme } from '../../../../appStore/app.actions';\nimport { HelperService } from '../../../../shared/services';\nimport { THEME_OPTION } from '../../../../models/enum/theme-option.enum';\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'app-header',\n  templateUrl: './header.component.html',\n  styleUrls: ['./header.component.scss'],\n})\nexport class HeaderComponent implements OnInit, OnDestroy {\n  @Select(AppState.themes) themes$: Observable<Theme[]>;\n  @Select(AppState.theme) theme$: Observable<Theme>;\n  @Select(AppState.notifications) notifications$: Observable<AppNotification[]>;\n  @Select(ExperimentState.refreshInterval) refreshInterval$: Observable<number>;\n  @Select(ExperimentState.refreshIntervalOptions) refreshIntervalOptions$: Observable<number[]>;\n  @Select(ExperimentState.sidenavOpen) sidenavOpen$: Observable<boolean>;\n\n  version: string;\n  subscriptions: Subscription;\n  notifications: AppNotification[];\n  THEME_OPTION = THEME_OPTION;\n\n  public themes;\n  currentTheme = {\n    name: null,\n    icon: null,\n  };\n\n  constructor(\n    readonly store: Store,\n    public colorSchemeService: ColorSchemeService,\n    public helperService: HelperService,\n    private cdRef: ChangeDetectorRef\n  ) {}\n\n  ngOnInit(): void {\n    this.subscriptions = new Subscription();\n    this.version = environment.version;\n    this.subscriptions.add(\n      this.themes$.subscribe((themes: Theme[]) => {\n        this.themes = themes;\n      })\n    );\n    this.subscriptions.add(\n      this.theme$.subscribe((theme: Theme) => {\n        this.currentTheme = theme;\n      })\n    );\n    this.subscriptions.add(\n      this.notifications$.subscribe((notifications: AppNotification[]) => {\n        if (notifications) {\n          this.notifications = notifications;\n          this.cdRef.markForCheck();\n        }\n      })\n    );\n    this.subscriptions.add(\n      this.theme$.subscribe((theme: Theme) => {\n        this.currentTheme = theme;\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.unsubscribe();\n  }\n\n  changeRefreshInverval(event: MatSelectChange): void {\n    if (!event.value) {\n      return;\n    }\n    this.store.dispatch(new SetRefreshInterval(event.value));\n  }\n\n  onRefresh(): void {\n    this.store.dispatch(new RefreshInterval(true));\n  }\n\n  setTheme(): void {\n    if (this.themes && this.themes.length) {\n      if (this.currentTheme === this.themes[0]) {\n        this.currentTheme = this.themes[1];\n      } else {\n        this.currentTheme = this.themes[0];\n      }\n      this.store.dispatch(new ChangeTheme(this.currentTheme));\n    }\n  }\n\n  onToggleSideNav(): void {\n    this.store.dispatch(new ToggleSideNav());\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/components/index.ts",
    "content": "import { ExperimentDropdownComponent } from './experiment-dropdown/experiment-dropdown.component';\nimport { HeaderComponent } from './header/header.component';\nimport { SidenavComponent } from './sidenav/sidenav.component';\nimport { SidenavElementComponent } from './sidenav-element/sidenav-element.component';\n\nexport const components = [ExperimentDropdownComponent, HeaderComponent, SidenavComponent, SidenavElementComponent];\n\nexport * from './experiment-dropdown/experiment-dropdown.component';\nexport * from './header/header.component';\nexport * from './sidenav/sidenav.component';\nexport * from './sidenav-element/sidenav-element.component';\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/components/sidenav/sidenav.component.html",
    "content": "<mat-nav-list fxLayout=\"column\" fxLayoutAlign=\"space-between center\" class=\"h-full w-full\">\n  <div class=\"w-full\">\n    <app-sidenav-element [navItem]=\"listElement\"></app-sidenav-element>\n    <hr class=\"mx-5\" />\n    <app-sidenav-element *ngFor=\"let navItem of sideNavElements\" [navItem]=\"navItem\"></app-sidenav-element>\n  </div>\n  <div class=\"w-full close-menu-container\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n    <button (click)=\"onToggleSideNav()\" mat-raised-button class=\"w-full\">\n      <div *ngIf=\"(sidenavOpen$ | async) === true\" class=\"close-menu-item w-full py-2\" fxLayoutAlign=\"start center\">\n        <mat-icon class=\"mr-10\" fxLayout fxLayoutAlign=\"right center\">menu_open</mat-icon>\n        <span>Close menu</span>\n      </div>\n      <div *ngIf=\"(sidenavOpen$ | async) === false\" class=\"close-menu-item w-full py-2\" fxLayoutAlign=\"start center\">\n        <mat-icon>menu</mat-icon>\n      </div>\n    </button>\n  </div>\n</mat-nav-list>"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/components/sidenav/sidenav.component.scss",
    "content": ".close-menu-item {\n  margin-right: 10px;\n  margin-left: 10px;\n  width: auto;\n}\n.close-menu-container > button{\n  height: 52px;\n}\n\n.hidden {\n  visibility: hidden;\n  width: 0;\n  transition: 0.5s;\n}\n\n.mat-list-base {\n  padding-top: 0 !important;\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/components/sidenav/sidenav.component.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { NO_ERRORS_SCHEMA } from '@angular/core';\nimport { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { NgxsModule } from '@ngxs/store';\n\nimport { SidenavComponent } from './sidenav.component';\n\ndescribe('SidenavComponent', () => {\n  let component: SidenavComponent;\n  let fixture: ComponentFixture<SidenavComponent>;\n\n  beforeEach(async () => {\n    await TestBed.configureTestingModule({\n      schemas: [NO_ERRORS_SCHEMA],\n      imports: [NgxsModule.forRoot()],\n      declarations: [SidenavComponent],\n    }).compileComponents();\n  });\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SidenavComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/components/sidenav/sidenav.component.ts",
    "content": "/* eslint-disable @typescript-eslint/unbound-method */\nimport { Component, Input } from '@angular/core';\nimport { Select, Store } from '@ngxs/store';\nimport { Observable } from 'rxjs';\nimport { NavItem } from '../../../../models/nav-items.model';\nimport { ToggleSideNav } from '../../store/experiment.actions';\nimport { ExperimentState } from '../../store/experiment.store';\n\n@Component({\n  selector: 'app-sidenav',\n  templateUrl: './sidenav.component.html',\n  styleUrls: ['./sidenav.component.scss'],\n})\nexport class SidenavComponent {\n  @Input() sideNavElements: NavItem[];\n  @Select(ExperimentState.sidenavOpen) sidenavOpen$: Observable<boolean>;\n\n  listElement: NavItem = {\n    displayName: 'Experiments',\n    route: '/list',\n    iconName: 'west',\n    tooltip: 'Experiment list',\n  };\n  constructor(readonly store: Store) {}\n\n  onToggleSideNav(): void {\n    this.store.dispatch(new ToggleSideNav());\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/components/sidenav-element/sidenav-element.component.html",
    "content": "<a *ngIf=\"navItem\" mat-list-item [ngStyle]=\"{ 'padding-left': depth * 12 + 'px' }\" (click)=\"onItemSelected(navItem)\"\n  [ngClass]=\"{ expanded: expanded }\" fxLayout fxLayoutAlign=\"left center\"\n  [routerLink]=\"navItem?.route !== '' ? navItem?.route : null\"\n  [routerLinkActive]=\"navItem?.route !== '' ? 'menu-list-item--active' : ''\" [routerLinkActiveOptions]=\"{ exact: true }\"\n  [disabled]=\"navItem.disabled\"\n  [matTooltip]=\"(sidenavOpen$ | async) === false ? navItem.tooltip : ''\" class=\"menu-list-item my-2 h-15\">\n  <mat-icon *ngIf=\"navItem.iconName\" class=\"mr-10\" fxLayout fxLayoutAlign=\"right center\">{{ navItem?.iconName }}\n  </mat-icon>\n  <span [ngClass]=\"(sidenavOpen$ | async) === false ? 'hidden' : ''\" *ngIf=\"navItem.displayName\">{{ navItem?.displayName }}</span>\n  <span fxFlex *ngIf=\"navItem?.children && navItem?.children.length\">\n    <span fxFlex></span>\n    <mat-icon [@indicatorRotate]=\"expanded ? 'expanded' : 'collapsed'\">\n      expand_more\n    </mat-icon>\n  </span>\n</a>\n<div *ngIf=\"expanded\">\n  <app-sidenav-element *ngFor=\"let child of navItem.children\" [navItem]=\"child\" [depth]=\"depth + 1\">\n  </app-sidenav-element>\n</div>"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/components/sidenav-element/sidenav-element.component.scss",
    "content": ":host {\n  display: flex;\n  flex-direction: column;\n  outline: none;\n  width: 100%;\n\n  .menu-list-item {\n    margin-right: 10px;\n    margin-left: 10px;\n    width: auto;\n  }\n\n  ::ng-deep .mat-list-item-content {\n    width: 100%;\n  }\n\n  .hidden {\n    visibility: hidden;\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/components/sidenav-element/sidenav-element.component.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { NO_ERRORS_SCHEMA } from '@angular/core';\nimport { ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { SidenavElementComponent } from './sidenav-element.component';\n\ndescribe('SidenavElementComponent', () => {\n  let component: SidenavElementComponent;\n  let fixture: ComponentFixture<SidenavElementComponent>;\n\n  beforeEach(async () => {\n    await TestBed.configureTestingModule({\n      schemas: [NO_ERRORS_SCHEMA],\n      declarations: [SidenavElementComponent],\n    }).compileComponents();\n  });\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(SidenavElementComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/components/sidenav-element/sidenav-element.component.ts",
    "content": "/* eslint-disable @typescript-eslint/unbound-method */\nimport { Component, Input } from '@angular/core';\nimport { NavItem } from '../../../../models/nav-items.model';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { Select } from '@ngxs/store';\nimport { Observable } from 'rxjs';\nimport { ExperimentState } from '../../store/experiment.store';\n\n@Component({\n  selector: 'app-sidenav-element',\n  templateUrl: './sidenav-element.component.html',\n  styleUrls: ['./sidenav-element.component.scss'],\n  animations: [\n    trigger('indicatorRotate', [\n      state('collapsed', style({ transform: 'rotate(0deg)' })),\n      state('expanded', style({ transform: 'rotate(180deg)' })),\n      transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4,0.0,0.2,1)')),\n    ]),\n  ],\n})\nexport class SidenavElementComponent {\n  @Select(ExperimentState.sidenavOpen) sidenavOpen$: Observable<boolean>;\n\n  @Input() navItem: NavItem;\n  @Input() depth = 0;\n\n  expanded = false;\n\n  onItemSelected(item: NavItem): void {\n    if (item.children && item.children.length) {\n      this.expanded = !this.expanded;\n    }\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/create-experiment/create-experiment.component.html",
    "content": "<form [formGroup]=\"createExperimentForm\" class=\"mt-3\">\n  <div fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayout.lt-lg=\"column\" fxLayoutGap=\"15px\" class=\"w-full px-3\">\n    <mat-form-field appearance=\"outline\" class=\"w-full\">\n      <mat-label>Current working directory</mat-label>\n      <input type=\"text\" matInput placeholder=\"Working directory\" formControlName=\"cwd\" />\n      <mat-error>Missing field</mat-error>\n    </mat-form-field>\n    <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"15px\" class=\"mb-3\">\n      <!-- <button class=\"minw-150\" mat-raised-button color=\"primary\" type=\"button\" (click)=\"validateJSON('Tree')\"\n        matTooltip=\"Converts the left side data into json visible on the right side\">\n        {{ 'Convert JSON' | uppercase }}\n      </button> -->\n      <button class=\"minw-150\" mat-raised-button color=\"accent\" type=\"submit\"\n        [disabled]=\"!createExperimentForm.valid || jsonHasError\" (click)=\"onCreateExperiment()\">\n        {{ 'Create experiment' | uppercase }}\n      </button>\n      <button class=\"minw-100\" mat-raised-button type=\"button\" (click)=\"onCancel()\">\n        {{ 'Cancel' | uppercase }}\n      </button>\n    </div>\n  </div>\n\n  <div class=\"w-full px-3\" fxLayoutAlign=\"end center\">\n    <button type=\"button\" fxFlexAlign=\"end\" mat-raised-button [matMenuTriggerFor]=\"helpMenu\">\n      <mat-icon class=\"mr-3\">help_outline</mat-icon>\n      {{ 'interaction guide' | uppercase }}\n    </button>\n  </div>\n\n  <div fxLayout=\"row\" fxLayoutAlign=\"start center\" class=\"px-4\">\n    <h2 class=\"mat-title m-0 w-full\">JSON FILE</h2>\n    <h2 class=\"mat-title m-0 w-full\">VALIDATED JSON</h2>\n  </div>\n  <div class=\"wrapper\">\n    <div id=\"jsonEditorCode\" class=\"left\"></div>\n    <!-- <mat-checkbox class=\"json-option\" formControlName=\"autoConvert\"\n      matTooltip=\"Check this to convert the left side data into json visible on the right side\">\n      Validate JSON\n    </mat-checkbox> -->\n    <div id=\"jsonEditorTree\" class=\"right\"></div>\n  </div>\n</form>\n\n<mat-menu #helpMenu=\"matMenu\" xPosition=\"before\">\n  <mat-toolbar class=\"help-menu\">\n    <div class=\"w-full\" fxLayout=\"row\" fxLayoutAlign=\"end center\">\n      <button mat-icon-button>\n        <mat-icon>close</mat-icon>\n      </button>\n    </div>\n  </mat-toolbar>\n  <mat-drawer-container class=\"help-content\" fxLayout=\"column\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"30px\">\n    <div fxLayout=\"column\" fxLayoutAlign=\"start center\" fxLayoutGap=\"30px\" class=\"p-5\">\n      <div class=\"w-full\">\n        There are two panels on this page:\n        <ul class=\"mt-3 ml-5 help-list\">\n          <li>Left panel: Here you can input your JSON file and modify it.</li>\n          <li>Right panel: Here displays the parsed JSON file. You can use it to validate if everything looks correct!\n          </li>\n        </ul>\n      </div>\n      <div class=\"w-full\">\n        How to:\n        <ul class=\"mt-3 ml-5 help-list\">\n          <li>Enter your working directory that saves your experiment json files and training script.</li>\n          <li>Input experiment configuration json in the left panel. Please follow the\n            <a href=\"https://lge-arc-advancedai.github.io/auptimizer/algorithm.html\" target=\"_blank\">link</a> to prepare\n            the json file.</li>\n          <li>Make sure you have adapted your training script following the <a\n              href=\"https://lge-arc-advancedai.github.io/auptimizer/experiment.html#manual-modification-of-training-code\"\n              target=\"_blank\">link</a>.</li>\n          <li>Click on Create experiment to add this experiment to the database.</li>\n          <li>Click on Cancel to go back.</li>\n        </ul>\n      </div>\n    </div>\n  </mat-drawer-container>\n</mat-menu>"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/create-experiment/create-experiment.component.scss",
    "content": ":host {\n  ::ng-deep .mat-checkbox-label {\n    color: white !important;\n  }\n}\n\n.wrapper {\n  width: calc(100vw - 16px);\n  height: calc(100vh - 64px - 80px - 80px - 50px);\n  display: flex;\n  padding: 8px;\n}\n\nmat-form-field {\n  font-size: 18px;\n}\n\n.minw-150 {\n  min-width: 150px;\n}\n\n.minw-100 {\n  min-width: 100px;\n}\n\n.headers-align .mat-expansion-panel-header-title,\n.headers-align .mat-expansion-panel-header-description {\n  flex-basis: 0;\n}\n\n.headers-align .mat-expansion-panel-header-description {\n  justify-content: space-between;\n  align-items: center;\n}\n\n.headers-align .mat-form-field + .mat-form-field {\n  margin-left: 8px;\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/create-experiment/create-experiment.component.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { NO_ERRORS_SCHEMA } from '@angular/core';\nimport { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { RouterTestingModule } from '@angular/router/testing';\nimport { NgxsModule } from '@ngxs/store';\nimport { SharedModule } from '../../../../shared/shared.module';\n\nimport { CreateExperimentComponent } from './create-experiment.component';\n\ndescribe('CreateExperimentComponent', () => {\n  let component: CreateExperimentComponent;\n  let fixture: ComponentFixture<CreateExperimentComponent>;\n\n  beforeEach(async () => {\n    await TestBed.configureTestingModule({\n      schemas: [NO_ERRORS_SCHEMA],\n      imports: [NgxsModule.forRoot(), BrowserAnimationsModule, RouterTestingModule, SharedModule],\n      declarations: [CreateExperimentComponent],\n    }).compileComponents();\n  });\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(CreateExperimentComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/create-experiment/create-experiment.component.ts",
    "content": "/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/unbound-method */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Component, OnInit, OnDestroy, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\nimport * as JSONEditor from 'jsoneditor';\nimport * as exampleJSON from './exampleJSON';\nimport { Store, Select } from '@ngxs/store';\nimport { CreateExperiment, GetExperiment } from '../../store/experiment.actions';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { CreateExperimentModel, SelectedExperiment } from '../../store/experiment-state.model';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ExperimentState } from '../../store/experiment.store';\nimport { Observable, Subscription } from 'rxjs';\nimport { HelperService, SnackbarService } from '../../../../shared/services';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { ConfirmDialogComponent } from '../../../../shared/dialogs/confirm/confirm-dialog.component';\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'app-create-experiment',\n  templateUrl: './create-experiment.component.html',\n  styleUrls: ['./create-experiment.component.scss'],\n})\nexport class CreateExperimentComponent implements OnInit, OnDestroy {\n  options: any;\n  jsonEditorCode: any;\n  jsonEditorTree: any;\n  jsonCode: any;\n  experimentConfig;\n  createExperimentForm: FormGroup;\n  @Select(ExperimentState.selectedExperiment) selectedExperiment$: Observable<SelectedExperiment>;\n\n  experimentId: number;\n  subscriptions: Subscription;\n\n  showInteractionGuide = false;\n  jsonHasError = false;\n  autoConvert = true;\n  errMessage: string = null;\n  confirmDialogRef: MatDialogRef<ConfirmDialogComponent>;\n\n  constructor(\n    readonly store: Store,\n    public dialog: MatDialog,\n    private fb: FormBuilder,\n    readonly route: ActivatedRoute,\n    readonly router: Router,\n    public helperService: HelperService,\n    private cdRef: ChangeDetectorRef,\n    private snackbarService: SnackbarService\n  ) {}\n\n  ngOnInit(): void {\n    this.subscriptions = new Subscription();\n    const id = this.route.snapshot.params.id;\n    this.initForm();\n    this.clear();\n    if (id) {\n      this.experimentId = id;\n      this.store.dispatch(new GetExperiment(this.experimentId));\n      this.subscriptions.add(\n        this.selectedExperiment$.subscribe((selectedExperiment: SelectedExperiment) => {\n          if (selectedExperiment && this.experimentId) {\n            this.clear();\n            const workingDir = selectedExperiment.experiment.expConfig['workingdir'];\n            const resource = selectedExperiment.experiment.expConfig['resource'];\n            const cwd = selectedExperiment.experiment.expConfig['cwd'];\n            this.createExperimentForm.patchValue({\n              cwd: cwd || workingDir,\n            });\n            if (workingDir && resource !== 'node') {\n              delete selectedExperiment.experiment.expConfig['workingdir'];\n            }\n            if (cwd) {\n              delete selectedExperiment.experiment.expConfig['cwd'];\n            }\n            this.experimentConfig = selectedExperiment.experiment.expConfig;\n            this.initEditor();\n            this.cdRef.markForCheck();\n          }\n        })\n      );\n    } else {\n      this.experimentConfig = exampleJSON.example;\n      this.initEditor();\n      this.cdRef.markForCheck();\n    }\n  }\n\n  initForm(): void {\n    this.createExperimentForm = this.fb.group({\n      cwd: ['', [Validators.required]],\n    });\n  }\n\n  initEditor(): void {\n    this.options = {\n      code: {\n        mode: 'code',\n        onChange: () => {\n          let json;\n          try {\n            json = this.jsonEditorCode.get();\n          } catch (err) {\n            this.jsonHasError = true;\n            this.errMessage = err;\n            this.cdRef.markForCheck();\n          }\n          if (json) {\n            this.jsonHasError = false;\n            this.jsonCode = json;\n            if (this.autoConvert) {\n              this.validateJSON('Tree');\n            }\n            this.cdRef.markForCheck();\n          }\n        },\n      },\n      tree: {\n        mode: 'tree',\n        onChange: () => {\n          let json;\n          try {\n            json = this.jsonEditorTree.get();\n          } catch (err) {\n            this.jsonHasError = true;\n            this.snackbarService.error(err);\n            this.cdRef.markForCheck();\n          }\n          if (json) {\n            this.jsonHasError = false;\n            this.jsonCode = json;\n            this.validateJSON('Code');\n            this.cdRef.markForCheck();\n          }\n        },\n      },\n    };\n    this.jsonEditorCode = new JSONEditor(document.getElementById('jsonEditorCode'), this.options.code);\n    this.jsonEditorTree = new JSONEditor(document.getElementById('jsonEditorTree'), this.options.tree);\n    this.jsonCode = this.experimentConfig;\n    this.validateJSON('Code');\n    if (this.autoConvert) {\n      this.validateJSON('Tree');\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.unsubscribe();\n    this.clear();\n  }\n\n  clear(): void {\n    this.experimentConfig = null;\n    this.jsonCode = null;\n    this.jsonEditorCode = null;\n    this.jsonEditorTree = null;\n    this.options = null;\n  }\n\n  validateJSON = (type) => {\n    if (type === 'Tree') {\n      this.jsonEditorTree.set(this.jsonCode);\n    } else if (type === 'Code') {\n      this.jsonEditorCode.set(this.jsonCode);\n    }\n  };\n\n  onCancel(): void {\n    this.confirmDialogRef = this.dialog.open(ConfirmDialogComponent, {\n      width: '450px',\n      data: {\n        title: 'Cancel and go back?',\n        content:\n          'Are you sure you want to cancel creating this experiment? Everything you added will be lost and you will return to the experiment list page.',\n        confirmButtonText: 'Confirm',\n      },\n      panelClass: 'header-modal',\n    });\n    this.confirmDialogRef.afterClosed().subscribe((confirm) => {\n      if (confirm) {\n        this.helperService.redirectTo('/list');\n      }\n    });\n  }\n\n  onCreateExperiment(): void {\n    if (!this.createExperimentForm.valid || !this.jsonCode || this.jsonHasError) {\n      return;\n    }\n    if (this.jsonHasError) {\n      this.snackbarService.error(this.errMessage);\n      return;\n    }\n    const createExperimentModel: CreateExperimentModel = {\n      cwd: this.createExperimentForm.value.cwd,\n      json_config_body: this.jsonCode,\n    };\n    this.store.dispatch(new CreateExperiment(createExperimentModel));\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/create-experiment/exampleJSON.ts",
    "content": "/* eslint-disable @typescript-eslint/naming-convention */\nexport const example = {\n  name: 'new_exp',\n  proposer: 'sequence',\n  n_samples: 10,\n  random_seed: 1,\n  script: 'rosenbrock_hpo.py',\n  parameter_config: [\n    {\n      name: 'x',\n      range: [-5, 5],\n      type: 'float',\n    },\n    {\n      name: 'y',\n      range: [-5, 5],\n      type: 'float',\n    },\n  ],\n  resource: 'cpu',\n  n_parallel: 2,\n  target: 'min',\n};\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/experiment/experiment.component.html",
    "content": "<mat-drawer-container class=\"mat-typography main-container\">\n  <mat-drawer [@sidenavVisibility]=\"sidenavOpen$ | async\" #sidenav mode=\"side\" opened>\n    <!-- <div fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"p-4 side-nav-content\">\n      <a [routerLinkActive]=\"'route-active'\" routerLink=\"overview\">Overview</a>\n      <a [routerLinkActive]=\"'route-active'\" routerLink=\"job-status\">Job Status</a>\n      <a [routerLinkActive]=\"'route-active'\" routerLink=\"pcg\">Hyperparameter Interaction Graph</a>\n      <a [routerLinkActive]=\"'route-active'\" routerLink=\"multi\">Multi-experiment Comparison</a>\n    </div> -->\n    <app-sidenav [sideNavElements]=\"sideNavElements\"></app-sidenav>\n  </mat-drawer>\n  <mat-drawer-content [@contentVisibility]=\"sidenavOpen$ | async\">\n    <main class=\"p-5\">\n      <router-outlet></router-outlet>\n    </main>\n  </mat-drawer-content>\n</mat-drawer-container>"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/experiment/experiment.component.scss",
    "content": ":host {\n  .main-container {\n    height: calc(100vh - 64px);\n  }\n  .logo-container {\n    > img {\n      height: 35px;\n    }\n  }\n\n  #sidenav {\n    width: 300px;\n  }\n\n  mat-drawer {\n    width: 300px;\n    mat-toolbar {\n      mat-icon {\n        font-size: 40px;\n        width: 40px;\n        height: 40px;\n      }\n      span {\n        font-size: 35px;\n        font-weight: 200;\n      }\n    }\n    .side-nav-content {\n      > a {\n        padding: 10px;\n        font-size: 20px;\n        font-weight: 400;\n        text-align: center;\n        line-height: 1.5;\n        width: 100%;\n      }\n    }\n  }\n\n  .refresh-interval {\n    width: 150px;\n    font-size: 18px;\n    margin-top: 10px;\n  }\n\n  .version {\n    font-size: 15px;\n    font-weight: 400;\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/experiment/experiment.component.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { NO_ERRORS_SCHEMA } from '@angular/core';\nimport { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { RouterTestingModule } from '@angular/router/testing';\nimport { NgxsModule } from '@ngxs/store';\nimport { SharedModule } from '../../../../shared/shared.module';\n\nimport { ExperimentComponent } from './experiment.component';\n\ndescribe('ExperimentComponent', () => {\n  let component: ExperimentComponent;\n  let fixture: ComponentFixture<ExperimentComponent>;\n\n  beforeEach(async () => {\n    await TestBed.configureTestingModule({\n      schemas: [NO_ERRORS_SCHEMA],\n      imports: [NgxsModule.forRoot(), RouterTestingModule, SharedModule, BrowserAnimationsModule],\n      declarations: [ExperimentComponent],\n    }).compileComponents();\n  });\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(ExperimentComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/experiment/experiment.component.ts",
    "content": "/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/unbound-method */\nimport { Component, OnInit, OnDestroy } from '@angular/core';\nimport { Subscription, Observable } from 'rxjs';\nimport { Store, Select } from '@ngxs/store';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { NavItem } from '../../../../models/nav-items.model';\nimport { ExperimentState } from '../../store/experiment.store';\nimport { GetInterimResults } from '../../store/experiment.actions';\n\n@Component({\n  selector: 'app-experiment',\n  templateUrl: './experiment.component.html',\n  styleUrls: ['./experiment.component.scss'],\n  animations: [\n    trigger('sidenavVisibility', [\n      state('false', style({ width: '75px' })),\n      state('true', style({ width: '250px' })),\n      transition('false => true', animate('200ms ease-in')),\n      transition('true => false', animate('200ms ease-in')),\n    ]),\n    trigger('contentVisibility', [\n      state('false', style({ marginLeft: '75px' })),\n      state('true', style({ marginLeft: '250px' })),\n      transition('false => true', animate('200ms ease-in')),\n      transition('true => false', animate('200ms ease-in')),\n    ]),\n  ],\n})\nexport class ExperimentComponent implements OnInit, OnDestroy {\n  @Select(ExperimentState.refreshInterval) refreshInterval$: Observable<number>;\n  @Select(ExperimentState.refreshingInterval) refreshingInterval$: Observable<boolean>;\n  @Select(ExperimentState.sidenavOpen) sidenavOpen$: Observable<boolean>;\n  @Select(ExperimentState.navItems) navItems$: Observable<any[]>;\n\n  subscription: Subscription;\n  experimentId: number;\n  isSidenavOpen = true;\n  sideNavElements: NavItem[];\n  refreshInterval: number;\n\n  constructor(readonly store: Store, readonly route: ActivatedRoute, readonly router: Router) {}\n\n  ngOnInit(): void {\n    this.subscription = new Subscription();\n    this.subscription.add(\n      this.navItems$.subscribe((navItems: NavItem[]) => {\n        if (navItems && navItems.length) {\n          this.sideNavElements = navItems;\n        }\n      })\n    );\n    this.store.dispatch(new GetInterimResults());\n  }\n\n  ngOnDestroy(): void {\n    this.subscription.unsubscribe();\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/index.ts",
    "content": "import { MainComponent } from './main/main.component';\nimport { ExperimentComponent } from './experiment/experiment.component';\nimport { ListComponent } from './list/list.component';\nimport { OverviewComponent } from './overview/overview.component';\nimport { JobStatusComponent } from './job-status/job-status.component';\nimport { PcgComponent } from './pcg/pcg.component';\nimport { MultiExpCompComponent } from './multi-exp-comp/multi-exp-comp.component';\nimport { InitializeComponent } from './initialize/initialize.component';\nimport { CreateExperimentComponent } from './create-experiment/create-experiment.component';\nimport { IntermResultsComponent } from './interm-results/interm-results.component';\nimport { NotificationComponent } from './notification/notification.component';\n\nexport const containers = [\n  MainComponent,\n  ExperimentComponent,\n  ListComponent,\n  OverviewComponent,\n  JobStatusComponent,\n  PcgComponent,\n  MultiExpCompComponent,\n  InitializeComponent,\n  CreateExperimentComponent,\n  IntermResultsComponent,\n  NotificationComponent,\n];\n\nexport * from './main/main.component';\nexport * from './experiment/experiment.component';\nexport * from './list/list.component';\nexport * from './overview/overview.component';\nexport * from './job-status/job-status.component';\nexport * from './pcg/pcg.component';\nexport * from './multi-exp-comp/multi-exp-comp.component';\nexport * from './initialize/initialize.component';\nexport * from './create-experiment/create-experiment.component';\nexport * from './interm-results/interm-results.component';\nexport * from './notification/notification.component';\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/initialize/initialize.component.html",
    "content": "<mat-toolbar color=\"primary\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"header-font\">\n  <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n    <a *ngIf=\"currentTheme?.name\" routerLink=\"/\" class=\"logo-container\"><img\n        [src]=\"'assets/images/Auptimizer-dark.png'\" /></a>\n  </div>\n  <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"center center\">\n    <button [disabled]=\"!notifications?.length\" mat-icon-button [matMenuTriggerFor]=\"notificationMenu\">\n      <mat-icon matBadgeColor=\"warn\" [matBadgeHidden]=\"!notifications?.length\" [matBadge]=\"notifications?.length\">\n        notifications</mat-icon>\n    </button>\n    <button *ngIf=\"currentTheme\" mat-button (click)=\"setTheme()\" class=\"header-font\">\n      <mat-icon class=\"mr-3\">{{ currentTheme.icon }}</mat-icon>{{ currentTheme.name | flu }} mode\n    </button>\n    <div fxLayoutAlign=\"center center\">\n      <span>Version:&nbsp;</span>\n      <span *ngIf=\"version\">v{{ version }}</span>\n    </div>\n  </div>\n</mat-toolbar>\n\n<div class=\"initialize-container text-primary\" fxLayout=\"column\" fxLayoutAlign=\"center center\">\n  <mat-drawer-container fxLayout=\"column\" fxLayoutAlign=\"center center\">\n    <mat-drawer-content>\n      <div class=\"h-full\" fxLayout=\"column\" fxLayoutAlign=\"center center\">\n        <div class=\"w-full mb-4\" fxLayoutAlign=\"end\">\n          <button fxFlexAlign=\"end\" mat-raised-button [matMenuTriggerFor]=\"helpMenu\">\n            <mat-icon class=\"mr-3\">help_outline</mat-icon>\n            {{ 'interaction guide' | uppercase }}\n          </button>\n        </div>\n        <mat-card fxLayout=\"column\" fxLayoutAlign=\"center center\" *ngIf=\"(currentStep$ | async) === step.INIT\"\n          class=\"db-card\">\n          <img class=\"db-logo\" [src]=\"'assets/images/Auptimizer-' + currentTheme?.name + '.png'\" />\n          <div *ngIf=\"dbUrl$ | async as dbUrl\" class=\"h-full\" fxLayout=\"column\" fxLayoutAlign=\"center center\">\n            <h1 class=\"db-title max-480 pb-12\">Auptimizer environment is already set up</h1>\n            <div class=\"w-full\" fxLayout=\"row\" fxLayoutAlign=\"center start\" fxLayoutGap=\"60px\">\n              <a class=\"db-btn\" mat-raised-button color=\"primary\" [routerLink]=\"['/']\">BACK</a>\n              <button class=\"db-btn\" (click)=\"createDatabaseStep()\" mat-button>RECREATE</button>\n            </div>\n          </div>\n          <div fxLayout=\"column\" *ngIf=\"(dbUrl$ | async) === null\">\n            <h1 class=\"db-title max-480\">There is no environment created</h1>\n            <p class=\"db-subtitle\">Let's set up an Auptimizer environment to run new experiments!</p>\n            <div class=\"w-full\" fxLayoutAlign=\"center start\">\n              <button class=\"db-btn\" (click)=\"createDatabaseStep()\" mat-raised-button color=\"primary\">CREATE</button>\n            </div>\n          </div>\n        </mat-card>\n        <mat-card fxLayout=\"column\" fxLayoutAlign=\"center center\" *ngIf=\"(currentStep$ | async) === step.WIZARD\"\n          class=\"db-card\">\n          <div class=\"w-full\" fxLayout=\"column\" fxLayoutAlign=\"center center\">\n            <h1 class=\"db-title m-0\">Set up an Auptimizer environment</h1>\n            <mat-horizontal-stepper linear #stepper>\n              <mat-step [stepControl]=\"firstFormGroup\">\n                <ng-template matStepLabel>Work dir</ng-template>\n                <form fxLayout=\"column\" fxLayoutAlign=\"center center\" [formGroup]=\"firstFormGroup\">\n                  <p class=\"db-text\">\n                    Working directory that contains your training script and saves the experiment results.\n                  </p>\n                  <mat-form-field appearance=\"outline\" class=\"w-full my-4\">\n                    <mat-label>Working directory</mat-label>\n                    <input type=\"text\" matInput placeholder=\"Work dir\" formControlName=\"work_dir\" required />\n                    <mat-error>Missing field</mat-error>\n                  </mat-form-field>\n                  <div class=\"w-full\" fxLayout=\"row\" fxLayoutAlign=\"center start\" fxLayoutGap=\"60px\">\n                    <button mat-button (click)=\"databaseInitStep()\">BACK</button>\n                    <button class=\"db-btn\" mat-raised-button color=\"primary\" matStepperNext>NEXT</button>\n                  </div>\n                </form>\n              </mat-step>\n              <mat-step [stepControl]=\"secondFormGroup\">\n                <ng-template matStepLabel>Ini path</ng-template>\n                <form fxLayout=\"column\" fxLayoutAlign=\"center center\" [formGroup]=\"secondFormGroup\">\n                  <p class=\"db-text\">Path to the Auptimizer environment file.</p>\n                  <mat-form-field appearance=\"outline\" class=\"w-full my-4\">\n                    <mat-label>Ini path</mat-label>\n                    <input type=\"text\" matInput placeholder=\"Ini path\" formControlName=\"ini_path\" required />\n                    <mat-error>Missing field</mat-error>\n                  </mat-form-field>\n                  <div class=\"w-full\" fxLayout=\"row\" fxLayoutAlign=\"center start\" fxLayoutGap=\"60px\">\n                    <button mat-button matStepperPrevious>BACK</button>\n                    <button class=\"db-btn\" mat-raised-button color=\"primary\" matStepperNext>NEXT</button>\n                  </div>\n                </form>\n              </mat-step>\n              <mat-step [stepControl]=\"thirdFormGroup\">\n                <ng-template matStepLabel>Resource</ng-template>\n                <div fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"w-full\">\n                  <p class=\"db-text\">Select your target resource to run experiments.</p>\n                </div>\n                <div class=\"w-full\" fxLayout=\"row\" fxLayoutAlign=\"center\">\n                  <button class=\"path-type-btn\" *ngFor=\"let value of types\"\n                    [ngClass]=\"value === type ? 'btn-primary' : ''\" (click)=\"setType(value)\">\n                    {{ value }}\n                  </button>\n                </div>\n                <form fxLayout=\"column\" fxLayoutAlign=\"center center\" [formGroup]=\"thirdFormGroup\">\n                  <mat-form-field appearance=\"outline\" *ngIf=\"type === 'cpu'\" class=\"w-full mb-4\">\n                    <mat-label>CPU</mat-label>\n                    <input type=\"text\" matInput placeholder=\"CPU\" formControlName=\"cpu\" />\n                    <mat-hint>Number of CPUs</mat-hint>\n                    <mat-error>CPU must be a number</mat-error>\n                  </mat-form-field>\n                  <mat-form-field appearance=\"outline\" *ngIf=\"type === 'aws'\" class=\"w-full mb-4\">\n                    <mat-label>AWS File</mat-label>\n                    <input type=\"text\" matInput placeholder=\"AWS File\" formControlName=\"aws_file\" />\n                  </mat-form-field>\n                  <mat-form-field appearance=\"outline\" *ngIf=\"type === 'gpu'\" class=\"w-full mb-4\">\n                    <mat-label>GPU File</mat-label>\n                    <input type=\"text\" matInput placeholder=\"GPU\" formControlName=\"gpu_file\" />\n                  </mat-form-field>\n                  <mat-form-field appearance=\"outline\" *ngIf=\"type === 'node'\" class=\"w-full mb-4\">\n                    <mat-label>Node File</mat-label>\n                    <input type=\"text\" matInput placeholder=\"Node file\" formControlName=\"node_file\" />\n                  </mat-form-field>\n                </form>\n                <form fxLayout=\"column\" fxLayoutAlign=\"start\" [formGroup]=\"overwriteFormGroup\">\n                  <mat-checkbox formControlName=\"overwrite\">Overwrite</mat-checkbox>\n                </form>\n                <div class=\"db-info\" fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"15px\">\n                  <mat-icon color=\"warn\">info</mat-icon>\n                  <p class=\"mb-0\">Overwrite any existing Auptimizer environment set up in the same working directory</p>\n                </div>\n                <div class=\"w-full mt-5\" fxLayout=\"row\" fxLayoutAlign=\"center start\" fxLayoutGap=\"60px\">\n                  <button mat-button matStepperPrevious>BACK</button>\n                  <div [matTooltip]=\"overwriteFormGroup.valid ? '' : 'Please check `Overwrite`'\">\n                    <button class=\"db-btn\" mat-raised-button color=\"primary\" (click)=\"onSubmit()\"\n                      [disabled]=\"!overwriteFormGroup.valid || !thirdFormGroup.valid\">SET UP</button>\n                  </div>\n                </div>\n              </mat-step>\n            </mat-horizontal-stepper>\n          </div>\n        </mat-card>\n      </div>\n    </mat-drawer-content>\n  </mat-drawer-container>\n</div>\n\n<mat-menu #notificationMenu=\"matMenu\" xPosition=\"before\">\n  <mat-toolbar class=\"notification-menu\">\n    <div class=\"w-full\" fxLayout=\"row\" fxLayoutAlign=\"end center\">\n      <button mat-icon-button>\n        <mat-icon>close</mat-icon>\n      </button>\n    </div>\n  </mat-toolbar>\n  <app-notification (click)=\"$event.stopPropagation()\"></app-notification>\n</mat-menu>\n\n<mat-menu #helpMenu=\"matMenu\" xPosition=\"before\">\n  <mat-toolbar class=\"help-menu\">\n    <div class=\"w-full\" fxLayout=\"row\" fxLayoutAlign=\"end center\">\n      <button mat-icon-button class=\"example-icon\" aria-label=\"Example icon-button with share icon\">\n        <mat-icon>close</mat-icon>\n      </button>\n    </div>\n  </mat-toolbar>\n  <mat-drawer-container class=\"help-content\" fxLayout=\"column\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"30px\">\n    <div fxLayout=\"column\" fxLayoutAlign=\"start center\" fxLayoutGap=\"30px\" class=\"p-5\">\n      <div class=\"w-full\">\n        <ul class=\"ml-5 help-list\">\n          <li>\n            <span class=\"font-medium\">Working directory:</span> a directory that contains your training script\n          </li>\n          <li>\n            <span class=\"font-medium\">Ini path:</span> the path to the Auptimizer environment (.ini) file. Follow the <a\n              href=\"https://lge-arc-advancedai.github.io/auptimizer/environment.html#environment-template-file-ini\"\n              target=\"_blank\">link</a> to prepare this file\n          </li>\n          <li>\n            <span class=\"font-medium\">cpu/aws/gpu/node:</span> your target resource to run experiments. Follow the <a\n              href=\"https://lge-arc-advancedai.github.io/auptimizer/environment.html#configuration-options\"\n              target=\"_blank\">link</a> to fill out specifications for each resource.\n            <!-- <ul class=\"mt-3 ml-12\">\n              <li>\n                <span class=\"font-medium\">AWS File</span> (will be shown when user selects aws): the path to a text file\n                with a list of AWS machine access points. You can follow link to prepare this file\n              </li>\n              <li>\n                <span class=\"font-medium\">GPU File </span>(will be shown when user selects gpu): the path to a text file\n                that maps jobs to GPUs. You can follow link to prepare this file\n              </li>\n              <li>\n                <span class=\"font-medium\">Node File </span>(will be shown shen user selects node): the path to a text\n                file with a list of remote machine access points. You can follow link to prepare this file\n              </li>\n            </ul> -->\n          </li>\n          <li>\n            <span class=\"font-medium\">Overwrite:</span> overwrite any existing Auptimizer environment set up in the same\n            working directory\n          </li>\n        </ul>\n      </div>\n    </div>\n  </mat-drawer-container>\n</mat-menu>"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/initialize/initialize.component.scss",
    "content": ":host {\n  .header-font {\n    font-size: 15px;\n  }\n  .db-card {\n    padding: 60px;\n  }\n  .db-logo {\n    width: 442px;\n    height: 61px;\n  }\n  .max-480 {\n    max-width: 480px;\n  }\n  .db-title {\n    margin: 60px 30px 10px;\n    font-size: 30px;\n    font-weight: 500;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: 1.2;\n    letter-spacing: normal;\n    text-align: center;\n  }\n  .db-subtitle {\n    width: 347px;\n    height: 49px;\n    margin: 9px 50px 44px 45px;\n    font-size: 16px;\n    font-weight: normal;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: 1.19;\n    letter-spacing: normal;\n    text-align: center;\n  }\n  .db-text {\n    width: 347px;\n    font-size: 16px;\n    font-weight: normal;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: 1.19;\n    letter-spacing: normal;\n    text-align: center;\n  }\n  .db-btn {\n    width: 127px;\n    height: 36px;\n    border-radius: 6px;\n  }\n  .db-info {\n    width: 350px;\n    font-size: 12px;\n    font-weight: normal;\n    font-stretch: normal;\n    font-style: normal;\n    line-height: 1.25;\n    letter-spacing: normal;\n    text-align: left;\n    margin-top: 5px;\n  }\n  .path-type-btn {\n    width: 94px;\n    height: 74px;\n    margin: 15px;\n    padding: 25px 30px 25px 31px;\n    border-radius: 6px;\n    border: solid 1px #cbcbcb;\n  }\n  .initialize-container > mat-drawer-container {\n    height: 100%;\n    min-height: calc(100vh - 64px);\n    padding: 50px;\n    width: 100%;\n    > mat-drawer-container {\n      height: 100%;\n      min-height: calc(100vh - 64px);\n      width: 100%;\n    }\n  }\n  .logo-container {\n    > img {\n      height: 35px;\n    }\n  }\n  .headers-align .mat-expansion-panel-header-title,\n  .headers-align .mat-expansion-panel-header-description {\n    flex-basis: 0;\n  }\n\n  .headers-align .mat-expansion-panel-header-description {\n    justify-content: space-between;\n    align-items: center;\n  }\n\n  ul > li {\n    list-style-type: circle;\n    padding-bottom: 15px;\n  }\n}\n\n::ng-deep mat-toolbar {\n  font-size: 14px;\n}\n\n::ng-deep .mat-menu-panel {\n  max-width: none !important;\n}\n\n::ng-deep .mat-menu-content:not(:empty) {\n  padding: 0 !important;\n}\n\n.notification-menu {\n  height: 40px;\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/initialize/initialize.component.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { NO_ERRORS_SCHEMA } from '@angular/core';\nimport { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { RouterTestingModule } from '@angular/router/testing';\nimport { NgxsModule } from '@ngxs/store';\nimport { SharedModule } from '../../../../shared/shared.module';\n\nimport { InitializeComponent } from './initialize.component';\n\ndescribe('InitializeComponent', () => {\n  let component: InitializeComponent;\n  let fixture: ComponentFixture<InitializeComponent>;\n\n  beforeEach(async () => {\n    await TestBed.configureTestingModule({\n      schemas: [NO_ERRORS_SCHEMA],\n      declarations: [InitializeComponent],\n      imports: [NgxsModule.forRoot(), RouterTestingModule, SharedModule],\n    }).compileComponents();\n  });\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(InitializeComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/initialize/initialize.component.ts",
    "content": "/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/unbound-method */\n/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable no-shadow */\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { AppState } from '../../../../appStore/app.store';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { Select, Store } from '@ngxs/store';\nimport { FormGroup, Validators, FormControl } from '@angular/forms';\nimport { SetupDB } from '../../store/experiment-state.model';\nimport { SetupDatabase } from '../../store/experiment.actions';\nimport { AppNotification, Theme } from '../../../../appStore/app-state.model';\nimport { ChangeTheme } from '../../../../appStore/app.actions';\nimport { environment } from '../../../../../environments/environment';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { HelperService } from '../../../../shared/services';\nimport { STEPPER_GLOBAL_OPTIONS } from '@angular/cdk/stepper';\nimport { AtLeastValidator } from '../../../../shared/validators';\n\nexport enum STEP {\n  INIT,\n  WIZARD,\n}\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'app-initialize',\n  templateUrl: './initialize.component.html',\n  styleUrls: ['./initialize.component.scss'],\n  providers: [\n    {\n      provide: STEPPER_GLOBAL_OPTIONS,\n      useValue: { showError: true },\n    },\n  ],\n})\nexport class InitializeComponent implements OnInit, OnDestroy {\n  @Select(AppState.dbUrl) dbUrl$: Observable<string>;\n  @Select(AppState.themes) themes$: Observable<Theme[]>;\n  @Select(AppState.theme) theme$: Observable<Theme>;\n  @Select(AppState.notifications) notifications$: Observable<AppNotification[]>;\n\n  types = ['cpu', 'aws', 'gpu', 'node'];\n  type = 'cpu';\n  step = STEP;\n  currentStep$ = new BehaviorSubject<number>(STEP.INIT);\n\n  public themes;\n  currentTheme = {\n    name: null,\n    icon: null,\n  };\n  version: string;\n  subscriptions: Subscription;\n  showInteractionGuide = false;\n  notifications: AppNotification[];\n\n  firstFormGroup: FormGroup;\n  secondFormGroup: FormGroup;\n  thirdFormGroup: FormGroup;\n  overwriteFormGroup: FormGroup;\n\n  constructor(public helperService: HelperService, readonly store: Store, private cdRef: ChangeDetectorRef) {}\n\n  ngOnInit(): void {\n    this.subscriptions = new Subscription();\n    this.firstFormGroup = new FormGroup({\n      work_dir: new FormControl('', [Validators.required]),\n    });\n    this.secondFormGroup = new FormGroup({\n      ini_path: new FormControl('', [Validators.required]),\n    });\n    this.thirdFormGroup = new FormGroup(\n      {\n        cpu: new FormControl('', [Validators.pattern(/^[0-9]*$/)]),\n        aws_file: new FormControl(''),\n        gpu_file: new FormControl(''),\n        node_file: new FormControl(''),\n      },\n      AtLeastValidator(1)\n    );\n    this.overwriteFormGroup = new FormGroup({\n      overwrite: new FormControl(false, [Validators.required]),\n    });\n    this.version = environment.version;\n    this.subscriptions.add(\n      this.themes$.subscribe((themes: Theme[]) => {\n        this.themes = themes;\n        this.cdRef.markForCheck();\n      })\n    );\n    this.subscriptions.add(\n      this.theme$.subscribe((theme: Theme) => {\n        this.currentTheme = theme;\n        this.cdRef.markForCheck();\n      })\n    );\n    this.subscriptions.add(\n      this.dbUrl$.subscribe((dbUrl: string) => {\n        if (dbUrl) {\n          this.overwriteFormGroup.controls.overwrite.setValidators(Validators.requiredTrue);\n          this.cdRef.markForCheck();\n        }\n      })\n    );\n    this.subscriptions.add(\n      this.notifications$.subscribe((notifications: AppNotification[]) => {\n        if (notifications) {\n          this.notifications = notifications;\n          this.cdRef.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.unsubscribe();\n  }\n\n  setTheme(): void {\n    if (this.themes && this.themes.length) {\n      if (this.currentTheme === this.themes[0]) {\n        this.currentTheme = this.themes[1];\n      } else {\n        this.currentTheme = this.themes[0];\n      }\n      this.store.dispatch(new ChangeTheme(this.currentTheme));\n    }\n  }\n\n  createDatabaseStep(): void {\n    this.currentStep$.next(STEP.WIZARD);\n  }\n\n  databaseInitStep(): void {\n    this.currentStep$.next(STEP.INIT);\n  }\n\n  setType(value: string): void {\n    if (!value) {\n      return;\n    }\n    this.type = value;\n    this.thirdFormGroup.reset();\n    this.cdRef.markForCheck();\n  }\n\n  onSubmit(): void {\n    if (\n      !this.firstFormGroup.valid ||\n      !this.secondFormGroup.valid ||\n      !this.thirdFormGroup.valid ||\n      !this.overwriteFormGroup.valid\n    ) {\n      return;\n    }\n    const setupParams: SetupDB = {\n      work_dir: this.firstFormGroup.value.work_dir,\n      ini_path: this.secondFormGroup.value.ini_path,\n      overwrite: this.overwriteFormGroup.value.overwrite,\n    };\n    switch (this.type) {\n      case 'cpu':\n        setupParams.cpu = this.thirdFormGroup.value.cpu;\n        break;\n      case 'aws':\n        setupParams.aws_file = this.thirdFormGroup.value.aws_file;\n        break;\n      case 'gpu':\n        setupParams.gpu_file = this.thirdFormGroup.value.gpu_file;\n        break;\n      case 'node':\n        setupParams.node_file = this.thirdFormGroup.value.node_file;\n        break;\n    }\n    this.store.dispatch(new SetupDatabase(setupParams));\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/interm-results/interm-results.component.html",
    "content": "<div fxLayout=\"column\">\n  <h1 class=\"mat-headline\">Compare the intermediate results of an experiment`s jobs against each other</h1>\n\n  <div *ngIf=\"loadingIntermResults$ | async\" fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"p-10\">\n    <mat-spinner color=\"accent\" [diameter]=\"100\" class=\"mt-10\"></mat-spinner>\n  </div>\n\n  <ng-container *ngIf=\"(loadingIntermResults$ | async) === false\">\n    <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"20px\">\n      <div class=\"w-full\" *ngIf=\"intermResults && intermResults.length\">\n        <mat-form-field appearance=\"outline\" class=\"w-full\" *ngIf=\"intermResults && intermResults.length > 0\">\n          <mat-label>Select Experiments</mat-label>\n          <mat-select [(ngModel)]=\"selectedExperiment\" (selectionChange)=\"onSelectExperiment($event)\">\n            <mat-option *ngFor=\"let experiment of intermResults\" [value]=\"experiment\">\n              {{ experiment.name || experiment.scriptName }}\n            </mat-option>\n          </mat-select>\n        </mat-form-field>\n      </div>\n      <div class=\"w-full\" *ngIf=\"interimExperimentMultResLabels && interimExperimentMultResLabels.length > 0\">\n        <mat-form-field appearance=\"outline\" class=\"w-full mr-3\">\n          <mat-label> Y-axis </mat-label>\n          <mat-select class=\"w-full\" (selectionChange)=\"selectLabel($event.value)\" [formControl]=\"selectedLabel\">\n            <mat-option *ngFor=\"let label of interimExperimentMultResLabels\" [value]=\"label\">\n              {{ label }}\n            </mat-option>\n          </mat-select>\n        </mat-form-field>\n      </div>\n      <div class=\"w-full\" *ngIf=\"jobs && jobs.length\">\n        <mat-form-field appearance=\"outline\" class=\"w-full\" *ngIf=\"jobs && jobs.length > 0\">\n          <mat-label>Select Job</mat-label>\n          <mat-select\n            multiple\n            [(ngModel)]=\"selectedJobs\"\n            (openedChange)=\"onOpenSelectJob()\"\n            (selectionChange)=\"onSelectJob($event)\"\n          >\n            <mat-option *ngFor=\"let job of jobs\" [value]=\"job\">\n              {{ job.jid }}\n            </mat-option>\n          </mat-select>\n        </mat-form-field>\n      </div>\n    </div>\n\n    <div class=\"w-full mb-4 mr-3\" fxLayoutAlign=\"space-between center\">\n      <button matTooltip=\"Current view will be downloaded\" mat-raised-button (click)=\"downloadGraph()\">\n        {{ 'Download graph png' | uppercase }}\n      </button>\n      <button fxFlexAlign=\"end\" mat-raised-button [matMenuTriggerFor]=\"helpMenu\">\n        <mat-icon class=\"mr-3\">help_outline</mat-icon>\n        {{ 'interaction guide' | uppercase }}\n      </button>\n    </div>\n\n    <div class=\"w-full\">\n      <plotly-plot\n        class=\"w-full chart\"\n        divId=\"interim\"\n        [data]=\"graph.data\"\n        [layout]=\"graph.layout\"\n        [config]=\"graph.config\"\n      ></plotly-plot>\n    </div>\n  </ng-container>\n</div>\n\n<mat-menu #helpMenu=\"matMenu\" xPosition=\"before\">\n  <mat-toolbar class=\"help-menu\">\n    <div class=\"w-full\" fxLayout=\"row\" fxLayoutAlign=\"end center\">\n      <button mat-icon-button>\n        <mat-icon>close</mat-icon>\n      </button>\n    </div>\n  </mat-toolbar>\n  <mat-drawer-container class=\"help-content\" fxLayout=\"column\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"30px\">\n    <div fxLayout=\"column\" fxLayoutAlign=\"start\" fxLayoutGap=\"30px\" class=\"p-5 w-full\">\n      <p fxFlex=\"100\" fxLayout=\"row\" fxLayoutAlign=\"start\" class=\"mt-0 mb-3\">\n        To make best use of this graph, please check the job status to identify jobs you would like to visualize.\n      </p>\n      <p fxFlex=\"100\" fxLayout=\"row\" fxLayoutAlign=\"start\" class=\"my-0\">On the graph:</p>\n      <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"30px\">\n        <ul class=\"mt-3 ml-5 help-list\">\n          <li>zoom out/in: place mouse on the graph and scroll up/down</li>\n          <li>zoom in a specific area: click mouse anywhere on the graph and drag it to draw a square</li>\n          <li>change the axis range: drag the label on x-axis or y-axis</li>\n          <li>show/hide data: click on the corresponding legend</li>\n          <li>show detailed value: hover over the data point</li>\n          <li>go back to default view: double-click on anywhere on the plot</li>\n        </ul>\n      </div>\n    </div>\n  </mat-drawer-container>\n</mat-menu>\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/interm-results/interm-results.component.scss",
    "content": ".multiplier {\n  width: 110px;\n  margin-top: 1px;\n  > mat-form-field {\n    text-align: center;\n  }\n}\n\n.headers-align .mat-expansion-panel-header-title,\n.headers-align .mat-expansion-panel-header-description {\n  flex-basis: 0;\n}\n\n.headers-align .mat-expansion-panel-header-description {\n  justify-content: space-between;\n  align-items: center;\n}\n\n.headers-align .mat-form-field + .mat-form-field {\n  margin-left: 8px;\n}\n\nmat-select, input {\n  font-size: 18px;\n  padding-top: 10px;\n}\n\n.chart {\n  height: 540px;\n}"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/interm-results/interm-results.component.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { NO_ERRORS_SCHEMA } from '@angular/core';\nimport { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { RouterTestingModule } from '@angular/router/testing';\nimport { NgxsModule } from '@ngxs/store';\nimport { SharedModule } from '../../../../shared/shared.module';\n\nimport { IntermResultsComponent } from './interm-results.component';\n\ndescribe('IntermResultsComponent', () => {\n  let component: IntermResultsComponent;\n  let fixture: ComponentFixture<IntermResultsComponent>;\n\n  beforeEach(async () => {\n    await TestBed.configureTestingModule({\n      schemas: [NO_ERRORS_SCHEMA],\n      imports: [NgxsModule.forRoot(), RouterTestingModule, SharedModule],\n      declarations: [IntermResultsComponent],\n    }).compileComponents();\n  });\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(IntermResultsComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/interm-results/interm-results.component.ts",
    "content": "/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable @typescript-eslint/no-unused-expressions */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-floating-promises */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/unbound-method */\n// import { DatePipe, formatDate } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  OnDestroy,\n  OnInit,\n  LOCALE_ID,\n  Inject,\n} from '@angular/core';\nimport { MatSelectChange } from '@angular/material/select';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Select, Store } from '@ngxs/store';\nimport { PlotlyService } from 'angular-plotly.js';\nimport { Observable, Subscription } from 'rxjs';\nimport { withLatestFrom } from 'rxjs/operators';\nimport { Theme } from '../../../../appStore/app-state.model';\nimport { AppState } from '../../../../appStore/app.store';\nimport { FirstLetterUppercasePipe } from '../../../../shared/pipes';\nimport { UtilsService } from '../../../../shared/services';\nimport { IntermediateExperiment, IntermediateJob, IntermediateResult } from '../../store/experiment-state.model';\nimport { GetExperimentInterimResults, SetInterimExperiment } from '../../store/experiment.actions';\nimport { ExperimentState } from '../../store/experiment.store';\nimport { GRAPH_COLORS } from '../../../../models/data/graph-colors.data';\nimport { FormControl } from '@angular/forms';\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'app-interm-results',\n  templateUrl: './interm-results.component.html',\n  styleUrls: ['./interm-results.component.scss'],\n})\nexport class IntermResultsComponent implements OnInit, OnDestroy {\n  @Select(AppState.theme) theme$: Observable<Theme>;\n  @Select(ExperimentState.intermResults) intermResults$: Observable<IntermediateExperiment[]>;\n  @Select(ExperimentState.loadingIntermResults) loadingIntermResults$: Observable<boolean>;\n  @Select(ExperimentState.interimExperimentJobs) interimExperimentJobs$: Observable<IntermediateJob[]>;\n  @Select(ExperimentState.interimExperimentMultResLabels) interimExperimentMultResLabels$: Observable<string[]>;\n  @Select(ExperimentState.interimExperimentSelectedLabel) interimExperimentSelectedLabel$: Observable<string>;\n\n  subscriptions: Subscription;\n  intermResults: IntermediateExperiment[];\n  jobs: IntermediateJob[];\n  theme: Theme;\n  selectedExperiment: IntermediateExperiment;\n  selectedJobs: IntermediateJob[] = [];\n  interimExperimentMultResLabels: string[];\n  selectedLabel = new FormControl();\n  yAxisLabel = 'score';\n\n  public graph = {\n    data: [],\n    layout: {\n      height: 540,\n      xaxis: {\n        title: {\n          text: '',\n        },\n      },\n      yaxis: {\n        title: {\n          text: '',\n        },\n      },\n    },\n    config: {\n      responsive: true,\n      displayModeBar: false,\n      scrollZoom: true,\n    },\n  };\n\n  showInteractionGuide = false;\n  experimentId: number;\n  flag: boolean;\n\n  constructor(\n    @Inject(LOCALE_ID) private locale: string,\n    readonly store: Store,\n    private cdRef: ChangeDetectorRef,\n    private route: ActivatedRoute,\n    private utilsService: UtilsService,\n    private plotlyService: PlotlyService,\n    readonly router: Router\n  ) {\n    this.flag = true;\n  }\n\n  ngOnInit(): void {\n    this.subscriptions = new Subscription();\n    if (this.route?.parent?.params) {\n      this.subscriptions.add(\n        this.intermResults$\n          .pipe(withLatestFrom(this.route?.parent?.params))\n          .subscribe(([intermResults, params]: [IntermediateExperiment[], any]) => {\n            if (params && params['id']) {\n              this.experimentId = params['id'];\n            }\n            if (intermResults && intermResults.length) {\n              this.intermResults = intermResults;\n              this.intermResults.map((exp: IntermediateExperiment) => {\n                console.log(exp);\n                // console.log(this.experimentId);\n                if (exp.eid === +this.experimentId) {\n                  this.selectedExperiment = exp;\n                  console.log(this.selectedExperiment);\n                  this.store.dispatch(new SetInterimExperiment(this.selectedExperiment));\n                  this.store.dispatch(new GetExperimentInterimResults({ eid: this.selectedExperiment.eid }));\n                  this.cdRef.markForCheck();\n                }\n              });\n              this.cdRef.markForCheck();\n            }\n          })\n      );\n    }\n    this.subscriptions.add(\n      this.theme$.subscribe((theme: Theme) => {\n        if (theme) {\n          this.theme = theme;\n          this.toggleChartTheme();\n        }\n      })\n    );\n    this.subscriptions.add(\n      this.interimExperimentMultResLabels$.subscribe((interimExperimentMultResLabels: string[]) => {\n        this.interimExperimentMultResLabels = interimExperimentMultResLabels;\n      })\n    );\n    this.subscriptions.add(\n      this.interimExperimentSelectedLabel$.subscribe((interimExperimentSelectedLabel: string) => {\n        if (interimExperimentSelectedLabel) {\n          console.log('interimExperimentSelectedLabel: ', interimExperimentSelectedLabel);\n          this.selectedLabel.patchValue(interimExperimentSelectedLabel);\n          this.cdRef.markForCheck();\n        }\n      })\n    );\n    this.subscriptions.add(\n      this.interimExperimentJobs$.subscribe((jobs: IntermediateJob[]) => {\n        if (jobs && jobs.length) {\n          const preselectedJobs = this.selectedJobs;\n          this.jobs = jobs.slice().sort((a, b) => this.utilsService.compare(a.jid, b.jid, true));\n          if (!this.selectedJobs.length && this.flag) {\n            if (this.jobs[0]) {\n              this.selectedJobs.push(this.jobs[0]);\n            }\n            if (this.jobs[1]) {\n              this.selectedJobs.push(this.jobs[1]);\n            }\n            if (this.jobs[2]) {\n              this.selectedJobs.push(this.jobs[2]);\n            }\n            this.computePlots();\n          } else {\n            this.selectedJobs = this.jobs.filter((y) => preselectedJobs.some((j) => j.jid === y.jid));\n          }\n          this.selectedJobs = this.jobs.filter((job) => preselectedJobs.some((preJob) => preJob.jid === job.jid));\n          this.cdRef.markForCheck();\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.unsubscribe();\n  }\n\n  onSelectExperiment(matSelect: MatSelectChange): void {\n    if (!matSelect) {\n      return;\n    }\n    this.flag = true;\n    this.selectedJobs = [];\n    this.graph.data = [];\n    this.selectedExperiment = matSelect.value;\n    this.jobs = null;\n    this.store.dispatch(new SetInterimExperiment(this.selectedExperiment));\n    this.store.dispatch(new GetExperimentInterimResults({ eid: this.selectedExperiment.eid }));\n    this.router.navigate([`experiment/${this.selectedExperiment.eid}/interm`]);\n    this.cdRef.markForCheck();\n  }\n\n  onOpenSelectJob(): void {\n    this.flag = false;\n    this.store.dispatch(new GetExperimentInterimResults({ eid: this.selectedExperiment.eid }));\n  }\n\n  onSelectJob(matSelect: MatSelectChange): void {\n    if (!matSelect) {\n      return;\n    }\n    this.selectedJobs = matSelect.value;\n    this.computePlots();\n  }\n\n  downloadGraph(): void {\n    const graphDiv = this.plotlyService.getInstanceByDivId('interim');\n    this.plotlyService\n      .getPlotly()\n      .downloadImage(graphDiv, { format: 'png', width: '1000', height: '450', filename: 'intermediateResults' });\n  }\n\n  computePlots(): void {\n    this.toggleChartTheme();\n    if (this.selectedJobs.length) {\n      const traces = this.selectedJobs.map((job: IntermediateJob) => {\n        return {\n          x: [\n            ...job.interimResults.map(\n              (jIr: IntermediateResult) =>\n                // formatDate(jIr.receiveTime * 1000, 'yyyy-MM-dd hh:mm:ss', this.locale)\n                (jIr.receiveTime - job.interimResults[0].receiveTime) / 1000\n            ),\n          ],\n          y: [...job.interimResults.map((jIr: IntermediateResult) => jIr.score)],\n          mode: 'lines+markers',\n          type: 'scatter',\n          name: job.jid,\n        };\n      });\n      this.graph.data = traces;\n    } else {\n      this.graph.data = [];\n    }\n    this.cdRef.markForCheck();\n  }\n\n  toggleChartTheme(): void {\n    if (!this.theme) {\n      return;\n    }\n    this.theme.name === 'dark'\n      ? (this.graph.layout = this.changeDarkModeChart())\n      : (this.graph.layout = this.changeLightModeChart());\n    this.cdRef.markForCheck();\n  }\n\n  changeLightModeChart(): any {\n    const flu = new FirstLetterUppercasePipe();\n    return {\n      colorway: GRAPH_COLORS,\n      hovermode: 'closest',\n      height: 450,\n      showlegend: true,\n      xaxis: {\n        zeroline: false,\n        title: {\n          text: flu.transform('time (seconds)'),\n          font: {\n            size: 18,\n            color: '#7f7f7f',\n          },\n        },\n      },\n      yaxis: {\n        zeroline: false,\n        title: {\n          text: flu.transform(this.yAxisLabel),\n          font: {\n            size: 18,\n            color: '#7f7f7f',\n          },\n        },\n      },\n    };\n  }\n\n  changeDarkModeChart(): any {\n    const flu = new FirstLetterUppercasePipe();\n    return {\n      colorway: GRAPH_COLORS,\n      hovermode: 'closest',\n      plot_bgcolor: '#424242',\n      paper_bgcolor: '#424242',\n      height: 450,\n      showlegend: true,\n      legend: {\n        font: {\n          color: '#ffffff',\n        },\n      },\n      xaxis: {\n        title: {\n          text: flu.transform('time (seconds)'),\n          font: {\n            size: 18,\n            color: '#ffffff',\n          },\n        },\n        gridcolor: '#c0c0c0',\n        tickfont: {\n          color: '#ffffff',\n        },\n        showline: true,\n        showgrid: true,\n        zeroline: false,\n        showticklabels: true,\n      },\n      yaxis: {\n        title: {\n          text: flu.transform(this.yAxisLabel),\n          font: {\n            size: 18,\n            color: '#ffffff',\n          },\n        },\n        gridcolor: '#c0c0c0',\n        tickfont: {\n          color: '#ffffff',\n        },\n        showline: true,\n        showgrid: true,\n        zeroline: false,\n        showticklabels: true,\n      },\n      line: {\n        color: '#ffffff',\n      },\n    };\n  }\n\n  selectLabel(label: string): void {\n    if (!label) {\n      return;\n    }\n    this.yAxisLabel = label;\n    this.cdRef.markForCheck();\n    this.flag = true;\n    this.selectedJobs = [];\n    this.graph.data = [];\n    this.jobs = null;\n    this.toggleChartTheme();\n    this.store.dispatch(new GetExperimentInterimResults({ eid: this.selectedExperiment.eid, label }));\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/job-status/job-status.component.html",
    "content": "<h1 class=\"mat-headline\">Status of all the jobs for the current experiment</h1>\n\n<div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"mt-5 w-full\">\n  <app-experiment-dropdown\n    class=\"mr-3 w-full\"\n    [experimentId]=\"experimentId\"\n    (toggleExperiment)=\"toggleExperiment($event)\"\n  ></app-experiment-dropdown>\n  <mat-form-field\n    appearance=\"outline\"\n    class=\"w-full mr-3\"\n    *ngIf=\"jobMultipleResulsLabels && jobMultipleResulsLabels.length > 0\"\n  >\n    <mat-label> Y-axis </mat-label>\n    <mat-select\n      class=\"w-full\"\n      (selectionChange)=\"selectLabel($event.value)\"\n      [formControl]=\"selectedLabel\"\n    >\n      <mat-option *ngFor=\"let label of jobMultipleResulsLabels\" [value]=\"label\">\n        {{ label }}\n      </mat-option>\n    </mat-select>\n  </mat-form-field>\n  <mat-slide-toggle (change)=\"onToggleChartLine($event)\" [(ngModel)]=\"optimizationCurve\" class=\"mr-5\">\n    Best Results\n  </mat-slide-toggle>\n</div>\n\n<div class=\"w-full mb-4 mr-3\" fxLayoutAlign=\"space-between center\">\n  <button matTooltip=\"Current view will be downloaded\" mat-raised-button (click)=\"downloadGraph()\">\n    {{ 'Download graph png' | uppercase }}\n  </button>\n  <button fxFlexAlign=\"end\" mat-raised-button [matMenuTriggerFor]=\"helpMenu\">\n    <mat-icon class=\"mr-3\">help_outline</mat-icon>\n    {{ 'interaction guide' | uppercase }}\n  </button>\n</div>\n\n<div fxLayout=\"row\" class=\"w-full\">\n  <plotly-plot\n    (window:resize)=\"onResize($event)\"\n    class=\"w-full mr-3 chart\"\n    divId=\"jobStatus\"\n    [data]=\"linePlot.data\"\n    [layout]=\"linePlot.layout\"\n    [config]=\"linePlot.config\"\n  >\n  </plotly-plot>\n</div>\n<div class=\"w-full mt-3 mb-12\">\n  <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n    <mat-form-field\n      appearance=\"outline\"\n      class=\"w-full mr-3\"\n      *ngIf=\"allColumns && allColumns.length > 0 && allColumns !== null\"\n    >\n      <mat-label> Select columns </mat-label>\n      <mat-select class=\"w-full\" (selectionChange)=\"selectHyperparams($event)\" multiple [(ngModel)]=\"selectedCols\">\n        <mat-option *ngFor=\"let col of allColumns\" [value]=\"col\">\n          {{ col }}\n        </mat-option>\n      </mat-select>\n    </mat-form-field>\n    <button\n      matTooltip=\"Current table will be exported\"\n      class=\"mb-2 mr-1 mw-150\"\n      mat-raised-button\n      [matMenuTriggerFor]=\"exportTableMenu\"\n    >\n      {{ 'Export as' | uppercase }}\n    </button>\n  </div>\n  <table\n    mat-table\n    matTableExporter\n    [dataSource]=\"dataSource\"\n    matSort\n    #exporter=\"matTableExporter\"\n    class=\"mat-elevation-z8 w-full job-status-table\"\n    [style.display]=\"columnsToDisplay && columnsToDisplay.length ? '' : 'none'\"\n  >\n    <ng-container [matColumnDef]=\"column\" *ngFor=\"let column of columnsToDisplay\">\n      <th mat-header-cell mat-sort-header *matHeaderCellDef>{{ column | flu }}</th>\n      <td mat-cell *matCellDef=\"let element\" [ngClass]=\"column == 'status' ? 'status-' + element.status : ''\">\n        <span *ngIf=\"column !== 'start time' && column !== 'end time'\">\n          <span *ngIf=\"utilsService.isNumber(element[column])\">{{ element[column] | number: '1.0-6' }}</span>\n          <span *ngIf=\"!utilsService.isNumber(element[column])\">{{ element[column] }}</span>\n        </span>\n        <span *ngIf=\"column === 'start time' || column === 'end time'\">\n          <span *ngIf=\"element[column]\">{{ element[column] * 1000 | date: 'medium' }}</span>\n        </span>\n      </td>\n    </ng-container>\n\n    <tr mat-header-row *matHeaderRowDef=\"columnsToDisplay\"></tr>\n    <tr mat-row *matRowDef=\"let row; columns: columnsToDisplay\"></tr>\n  </table>\n  <mat-paginator\n    class=\"mat-elevation-z8\"\n    [pageSize]=\"pageSize\"\n    [pageSizeOptions]=\"[5, 10, 25, 100]\"\n    [style.display]=\"columnsToDisplay && columnsToDisplay.length && dataSource.data.length > 0 ? 'block' : 'none'\"\n  >\n  </mat-paginator>\n</div>\n\n<mat-menu #exportTableMenu=\"matMenu\">\n  <button mat-menu-item (click)=\"exporter.exportTable('xls', { fileName: exportedName })\">\n    {{ 'xls' | uppercase }}\n  </button>\n  <button mat-menu-item (click)=\"exporter.exportTable('xlsx', { fileName: exportedName })\">\n    {{ 'xlsx' | uppercase }}\n  </button>\n  <button mat-menu-item (click)=\"exporter.exportTable('csv', { fileName: exportedName })\">\n    {{ 'csv' | uppercase }}\n  </button>\n  <button mat-menu-item (click)=\"exporter.exportTable('txt', { fileName: exportedName })\">\n    {{ 'txt' | uppercase }}\n  </button>\n</mat-menu>\n\n<mat-menu #helpMenu=\"matMenu\" xPosition=\"before\">\n  <mat-toolbar class=\"help-menu\">\n    <div class=\"w-full\" fxLayout=\"row\" fxLayoutAlign=\"end center\">\n      <button mat-icon-button>\n        <mat-icon>close</mat-icon>\n      </button>\n    </div>\n  </mat-toolbar>\n  <mat-drawer-container class=\"help-content\" fxLayout=\"column\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"30px\">\n    <div fxLayout=\"column\" fxLayoutAlign=\"start center\" fxLayoutGap=\"30px\" class=\"p-5\">\n      <div class=\"w-full\">\n        On the graph:\n        <ul class=\"my-3 ml-5 help-list\">\n          <li>zoom out/in: place mouse on the graph and scroll up/down</li>\n          <li>zoom in a specific area: click mouse anywhere on the graph and drag it to draw a square</li>\n          <li>change the axis range: drag the label on x-axis or y-axis</li>\n          <li>show/hide data: click on the corresponding legend</li>\n          <li>show details of each job: hover over the data point</li>\n          <li>go back to default view: double-click on anywhere on the plot</li>\n        </ul>\n        On the table:\n        <ul class=\"mt-3 ml-5 help-list\">\n          <li>Sort: place mouse on the column header to show the sorting arrow</li>\n        </ul>\n      </div>\n    </div>\n  </mat-drawer-container>\n</mat-menu>\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/job-status/job-status.component.scss",
    "content": ".headers-align .mat-expansion-panel-header-title,\n.headers-align .mat-expansion-panel-header-description {\n  flex-basis: 0;\n}\n\n.headers-align .mat-expansion-panel-header-description {\n  justify-content: space-between;\n  align-items: center;\n}\n\n.headers-align .mat-form-field + .mat-form-field {\n  margin-left: 8px;\n}\n\nmat-select {\n  font-size: 18px;\n  padding-top: 10px;\n}\n\n.chart {\n  height: 540px;\n}\n\ntd.mat-cell,\nth.mat-header-cell {\n  text-align: center !important;\n}\n\nth.mat-header-cell > div {\n  justify-content: center !important;\n}\n\nth {\n  max-width: 600px !important;\n}\n\n.mat-sort-header-container {\n  justify-content: center !important;\n}\n\n.mw-150 {\n  min-width: 150px;\n}"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/job-status/job-status.component.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { NO_ERRORS_SCHEMA } from '@angular/core';\nimport { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { RouterTestingModule } from '@angular/router/testing';\nimport { NgxsModule } from '@ngxs/store';\nimport { SharedModule } from '../../../../shared/shared.module';\nimport { MatTableExporterModule } from 'mat-table-exporter';\n\nimport { JobStatusComponent } from './job-status.component';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\n\ndescribe('JobStatusComponent', () => {\n  let component: JobStatusComponent;\n  let fixture: ComponentFixture<JobStatusComponent>;\n\n  beforeEach(async () => {\n    await TestBed.configureTestingModule({\n      schemas: [NO_ERRORS_SCHEMA],\n      imports: [\n        NgxsModule.forRoot(),\n        RouterTestingModule,\n        BrowserAnimationsModule,\n        MatTableExporterModule,\n        SharedModule,\n      ],\n      declarations: [JobStatusComponent],\n    }).compileComponents();\n  });\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(JobStatusComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/job-status/job-status.component.ts",
    "content": "/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable @typescript-eslint/restrict-template-expressions */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-unused-expressions */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/unbound-method */\nimport { Component, OnInit, OnDestroy, ViewChild, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\nimport { Select, Store } from '@ngxs/store';\nimport { ExperimentState } from '../../store/experiment.store';\nimport { Observable, Subscription, interval } from 'rxjs';\nimport { JobStatus, PlotlyScatterGraph } from '../../store/experiment-state.model';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n  GetJobStatus,\n  GetExperimentHistory,\n  RefreshInterval,\n  ChangeJobsGraphForLabel,\n} from '../../store/experiment.actions';\nimport { MatSlideToggleChange } from '@angular/material/slide-toggle';\nimport { AppState } from '../../../../appStore/app.store';\nimport { Theme } from '../../../../appStore/app-state.model';\nimport { SnackbarService, UtilsService } from '../../../../shared/services';\nimport { startWith, map } from 'rxjs/operators';\nimport { MatSelectChange } from '@angular/material/select';\nimport { Navigate } from '@ngxs/router-plugin';\nimport { PlotlyService } from 'angular-plotly.js';\nimport { GRAPH_COLORS } from '../../../../models/data/graph-colors.data';\nimport { FormControl } from '@angular/forms';\nimport { FirstLetterUppercasePipe } from '../../../../shared/pipes';\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'app-job-status',\n  templateUrl: './job-status.component.html',\n  styleUrls: ['./job-status.component.scss'],\n})\nexport class JobStatusComponent implements OnInit, OnDestroy {\n  @Select(AppState.theme) theme$: Observable<Theme>;\n  @Select(ExperimentState.jobs) jobs$: Observable<JobStatus[]>;\n  @Select(ExperimentState.jobsGraphData) jobsGraphData$: Observable<PlotlyScatterGraph>;\n  @Select(ExperimentState.jobsOptimizationGraphData) jobsOptimizationGraphData$: Observable<PlotlyScatterGraph>;\n  @Select(ExperimentState.refreshInterval) refreshInterval$: Observable<number>;\n  @Select(ExperimentState.refreshingInterval) refreshingInterval$: Observable<boolean>;\n  @Select(ExperimentState.jobMultipleResulsLabels) jobMultipleResulsLabels$: Observable<string[]>;\n  @Select(ExperimentState.jobMultipleResulsSelectedLabel) jobMultipleResulsSelectedLabel$: Observable<string>;\n\n  @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\n  @ViewChild(MatSort, { static: true }) sort: MatSort;\n\n  jobs: JobStatus[];\n  jobMultipleResulsLabels: string[];\n  jobMultipleResulsSelectedLabel: string;\n  experimentId: number;\n  jobsGraphData: PlotlyScatterGraph;\n  jobsOptimizationGraphData: PlotlyScatterGraph;\n  pageSize = 10;\n  subscriptions: Subscription;\n  displayedColumns: string[] = [];\n  displayedHyperparamsColumns: string[] = [];\n  allColumns: string[] = [];\n  columnsToDisplay: string[] = [];\n  dataSource = new MatTableDataSource<any>();\n  tableFullData: { name: string; value: string }[] = [];\n  tableHyperparamsData: { name: string; value: string }[] = [];\n  optimizationCurve = true;\n  refreshInterval: number;\n  refreshIntervalSubscription: Subscription;\n  selectedCols: string[];\n  chartWidth = 600;\n  showInteractionGuide = false;\n  theme: Theme;\n  selectedLabel = new FormControl();\n  yAxisLabel = 'score';\n\n  public linePlot = {\n    data: [],\n    layout: {\n      height: 540,\n      showlegend: true,\n      title: {\n        text: 'Score',\n        font: {\n          family: 'Courier New, monospace',\n          size: 24,\n        },\n        xref: 'paper',\n        x: 0.05,\n      },\n      xaxis: {\n        title: {\n          text: 'x Axis',\n          font: {\n            family: 'Courier New, monospace',\n            size: 18,\n            color: '#7f7f7f',\n          },\n        },\n      },\n      yaxis: {\n        title: {\n          text: 'Y Axis',\n          font: {\n            family: 'Courier New, monospace',\n            size: 18,\n            color: '#7f7f7f',\n          },\n        },\n      },\n    },\n    config: {\n      displayModeBar: false,\n      responsive: true,\n      displaylogo: false,\n      // modeBarButtonsToRemove: PLOTLY_HIDDEN_DISPLAYS,\n      scrollZoom: true,\n    },\n  };\n\n  constructor(\n    readonly store: Store,\n    private route: ActivatedRoute,\n    readonly router: Router,\n    private cdRef: ChangeDetectorRef,\n    private snackbarService: SnackbarService,\n    public plotlyService: PlotlyService,\n    public utilsService: UtilsService\n  ) {}\n\n  ngOnInit(): void {\n    this.subscriptions = new Subscription();\n    this.subscriptions.add(\n      this.route?.parent?.params.subscribe((params) => {\n        this.experimentId = params['id'];\n        this.selectedCols = [];\n        this.allColumns = [];\n        // if (this.experimentId) {\n        //   this.store.dispatch(new GetJobStatus({ eid: this.experimentId }));\n        //   this.optimizationCurve = false;\n        // }\n      })\n    );\n    this.subscriptions.add(\n      this.jobs$.subscribe((jobs: JobStatus[]) => {\n        if (jobs && jobs.length) {\n          this.jobs = jobs;\n          this.displayedColumns = Object.keys(this.jobs[0].tableData);\n          if (!this.selectedCols || !this.selectedCols.length) {\n            this.selectedCols = this.displayedColumns.slice();\n          }\n          this.displayedHyperparamsColumns = Object.keys(this.jobs[0].tableHyperParams);\n          this.allColumns = this.displayedColumns.concat(this.displayedHyperparamsColumns);\n\n          this.columnsToDisplay = this.selectedCols.slice();\n\n          this.jobs.map((job: JobStatus) => {\n            this.tableHyperparamsData.push(job.tableHyperParams);\n            this.tableFullData.push(job.tableFullData);\n          });\n          // console.log('tableFullData: ', this.tableFullData);\n          this.dataSource.data = this.tableFullData.slice();\n          this.dataSource.paginator = this.paginator;\n          this.dataSource.sort = this.sort;\n          this.cdRef.markForCheck();\n        }\n      })\n    );\n    this.subscriptions.add(\n      this.jobsGraphData$.subscribe((jobsGraphData: PlotlyScatterGraph) => {\n        if (jobsGraphData) {\n          this.jobsGraphData = jobsGraphData;\n          this.linePlot.data = [];\n          this.linePlot.data = [this.jobsGraphData];\n          // console.log('jobsGraphData: ', jobsGraphData);\n          this.cdRef.markForCheck();\n        }\n      })\n    );\n    this.subscriptions.add(\n      this.jobsOptimizationGraphData$.subscribe((jobsOptimizationGraphData: PlotlyScatterGraph) => {\n        if (jobsOptimizationGraphData) {\n          // console.log('jobsOptimizationGraphData:', jobsOptimizationGraphData);\n          this.jobsOptimizationGraphData = jobsOptimizationGraphData;\n          this.linePlot.data.push(jobsOptimizationGraphData);\n          // console.log('linePlot: ', this.linePlot.data);\n          this.cdRef.markForCheck();\n        }\n      })\n    );\n    this.subscriptions.add(\n      this.theme$.subscribe((theme: Theme) => {\n        if (theme) {\n          this.theme = theme;\n          this.toggleChartTheme();\n        }\n      })\n    );\n    this.subscriptions.add(\n      this.refreshInterval$.subscribe((rInterval: number) => {\n        if (rInterval) {\n          if (this.refreshIntervalSubscription && rInterval !== this.refreshInterval) {\n            this.refreshIntervalSubscription.unsubscribe();\n          }\n          this.refreshInterval = rInterval;\n          this.refreshIntervalSubscription = this.refreshIntervalData().subscribe();\n        }\n      })\n    );\n    this.subscriptions.add(\n      this.refreshingInterval$.subscribe((refreshingInterval: boolean) => {\n        if (refreshingInterval) {\n          this.refreshData();\n          const message = 'Data refreshed!';\n          this.snackbarService.success(message);\n          this.store.dispatch(new RefreshInterval(false));\n        }\n      })\n    );\n    this.subscriptions.add(\n      this.jobMultipleResulsLabels$.subscribe((jobMultipleResulsLabels: string[]) => {\n        this.jobMultipleResulsLabels = jobMultipleResulsLabels;\n        this.cdRef.markForCheck();\n      })\n    );\n    this.subscriptions.add(\n      this.jobMultipleResulsSelectedLabel$.subscribe((jobMultipleResulsSelectedLabel: string) => {\n        this.jobMultipleResulsSelectedLabel = jobMultipleResulsSelectedLabel;\n        this.selectedLabel.patchValue(jobMultipleResulsSelectedLabel);\n        this.cdRef.markForCheck();\n      })\n    );\n  }\n\n  toggleChartTheme(): void {\n    if (!this.theme) {\n      return;\n    }\n    this.theme.name === 'dark'\n      ? (this.linePlot.layout = this.changeDarkModeChart())\n      : (this.linePlot.layout = this.changeLightModeChart());\n    this.cdRef.markForCheck();\n  }\n\n  get exportedName() {\n    return `jobStatus-${new Date().getTime() / 1000}`;\n  }\n\n  selectHyperparams(event: MatSelectChange): void {\n    if (!event) {\n      return;\n    }\n    this.selectedCols = event.value;\n    this.dataSource.data = this.tableFullData.slice();\n    this.selectedCols = this.pushColumnToEnd('start time', this.selectedCols);\n    this.selectedCols = this.pushColumnToEnd('end time', this.selectedCols);\n    if (this.selectedCols) {\n      this.columnsToDisplay = this.selectedCols.slice();\n    } else {\n      this.columnsToDisplay = [];\n    }\n    this.cdRef.markForCheck();\n  }\n\n  pushColumnToEnd(columnName: string, array: string[]): string[] {\n    if (!columnName || !array || !array.length) {\n      return;\n    }\n    const foundIndex = array.findIndex((item) => {\n      return item === columnName;\n    });\n    if (foundIndex !== -1) {\n      array.splice(foundIndex, 1);\n      array.push(columnName);\n    }\n    return array;\n  }\n\n  downloadGraph(): void {\n    const graphDiv = this.plotlyService.getInstanceByDivId('jobStatus');\n    this.plotlyService\n      .getPlotly()\n      .downloadImage(graphDiv, { format: 'png', width: '1000', height: '450', filename: 'jobStatus' });\n  }\n\n  toggleExperiment(event): void {\n    if (!event) {\n      return;\n    }\n    this.experimentId = event;\n    this.cleanData();\n    this.yAxisLabel = 'score';\n    this.toggleChartTheme();\n    this.store.dispatch(new ChangeJobsGraphForLabel(this.yAxisLabel)).subscribe(() => {\n      this.store.dispatch(new GetJobStatus({ eid: this.experimentId }));\n      if (this.optimizationCurve) {\n        this.store.dispatch(new GetExperimentHistory({ eid: this.experimentId }));\n      }\n      // this.router.navigate([`experiment/${event}/job-status`]);\n      this.store.dispatch(new Navigate([`experiment/${event}/job-status`]));\n      this.cdRef.markForCheck();\n    });\n  }\n\n  cleanData(): void {\n    this.optimizationCurve = true;\n    this.columnsToDisplay = [];\n    this.displayedHyperparamsColumns = [];\n    this.tableHyperparamsData = [];\n    this.tableFullData = [];\n  }\n\n  refreshIntervalData(): Observable<any> {\n    if (this.refreshInterval) {\n      return interval(this.refreshInterval * 1000).pipe(\n        startWith(0),\n        map(() => {\n          console.log('Fetching job status data...');\n          this.refreshData();\n        })\n      );\n    }\n  }\n\n  refreshData(): void {\n    this.toggleChartTheme();\n    if (this.experimentId) {\n      this.tableHyperparamsData = [];\n      this.tableFullData = [];\n      this.store.dispatch(new GetJobStatus({ eid: this.experimentId })).subscribe(() => {\n        if (this.optimizationCurve) {\n          this.store.dispatch(new GetExperimentHistory({ eid: this.experimentId }));\n        }\n      });\n    }\n  }\n\n  changeLightModeChart(): any {\n    const flu = new FirstLetterUppercasePipe();\n    return {\n      colorway: GRAPH_COLORS,\n      height: 540,\n      // xaxis: {\n      //   // tickformat: '.0f'\n      // },\n      showlegend: true,\n      xaxis: {\n        zeroline: false,\n        title: {\n          text: 'Number of jobs',\n          font: {\n            size: 18,\n            color: '#7f7f7f',\n          },\n        },\n      },\n      yaxis: {\n        zeroline: false,\n        title: {\n          text: flu.transform(this.yAxisLabel),\n          font: {\n            size: 18,\n            color: '#7f7f7f',\n          },\n        },\n      },\n    };\n  }\n\n  changeDarkModeChart(): any {\n    const flu = new FirstLetterUppercasePipe();\n    return {\n      colorway: GRAPH_COLORS,\n      plot_bgcolor: '#424242',\n      paper_bgcolor: '#424242',\n      height: 540,\n      // title: 'Score',\n      showlegend: true,\n      legend: {\n        font: {\n          color: '#ffffff',\n        },\n      },\n      xaxis: {\n        // tickformat: '.0f',\n        title: {\n          text: 'Number of jobs',\n          font: {\n            size: 18,\n            color: '#ffffff',\n          },\n        },\n        gridcolor: '#c0c0c0',\n        tickfont: {\n          color: '#ffffff',\n        },\n        showline: true,\n        showgrid: true,\n        zeroline: false,\n        showticklabels: true,\n      },\n      yaxis: {\n        title: {\n          text: flu.transform(this.yAxisLabel),\n          font: {\n            size: 18,\n            color: '#ffffff',\n          },\n        },\n        gridcolor: '#c0c0c0',\n        tickfont: {\n          color: '#ffffff',\n        },\n        showline: true,\n        showgrid: true,\n        zeroline: false,\n        showticklabels: true,\n      },\n      line: {\n        color: '#ffffff',\n      },\n    };\n  }\n\n  onToggleChartLine(event: MatSlideToggleChange): void {\n    if (!event) {\n      return;\n    }\n    // this.jobsGraphData.mode = this.optimizationCurve ? 'lines+markers' : 'markers';\n    switch (event.checked) {\n      case true:\n        this.store.dispatch(new GetExperimentHistory({ eid: this.experimentId }));\n        break;\n      case false:\n        this.tableHyperparamsData = [];\n        this.tableFullData = [];\n        this.store.dispatch(new GetJobStatus({ eid: this.experimentId }));\n        break;\n    }\n    this.cdRef.markForCheck();\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.unsubscribe();\n    this.refreshIntervalSubscription.unsubscribe();\n  }\n\n  onResize(event) {\n    if (event) {\n      this.cdRef.markForCheck();\n    }\n  }\n\n  selectLabel(label: string): void {\n    if (!label) {\n      return;\n    }\n    this.yAxisLabel = label;\n    this.cdRef.markForCheck();\n    // this.optimizationCurve = false;\n    this.toggleChartTheme();\n    this.store.dispatch(new ChangeJobsGraphForLabel(label));\n    if (this.optimizationCurve) {\n      this.store.dispatch(new GetExperimentHistory({ eid: this.experimentId }));\n    }\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/list/list.component.html",
    "content": "<div class=\"px-5 mb-5\">\n  <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\">\n    <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n      <h1 class=\"mat-display-1 mt-0 mb-0 mr-2\">Experiments</h1>\n      <mat-form-field appearance=\"outline\" class=\"mr-2 mt-4\">\n        <mat-label>Search</mat-label>\n        <input type=\"text\" matInput placeholder=\"Experiment name\" [formControl]=\"searchStr\" />\n        <mat-icon *ngIf=\"searchStr.value !== null && searchStr.value !== ''\" matSuffix class=\"cursor-pointer\"\n          (click)=\"clearSearch()\">clear\n        </mat-icon>\n        <mat-icon *ngIf=\"searchStr.value === null || searchStr.value === ''\" matSuffix>search</mat-icon>\n      </mat-form-field>\n      <mat-form-field appearance=\"outline\" class=\"mr-2 mt-4\">\n        <mat-label>Sort by</mat-label>\n        <mat-select [formControl]=\"sortOption\" name=\"sortOption\" (selectionChange)=\"onSortOption($event)\">\n          <mat-option *ngFor=\"let sort of sortOptions\" [value]=\"sort\">\n            {{ sort | flu }}\n          </mat-option>\n        </mat-select>\n      </mat-form-field>\n      <mat-button-toggle-group class=\"sort-toggle mr-2\" name=\"fontStyle\" [value]=\"sortDirectionType\"\n        (change)=\"onSortDirection($event)\">\n        <mat-button-toggle [value]=\"sortDirections[0]\">\n          <mat-icon [color]=\"sortDirectionType === sortDirections[0] ? 'primary' : ''\">north</mat-icon>\n        </mat-button-toggle>\n        <mat-button-toggle [value]=\"sortDirections[1]\">\n          <mat-icon [color]=\"sortDirectionType === sortDirections[1] ? 'primary' : ''\">south</mat-icon>\n        </mat-button-toggle>\n      </mat-button-toggle-group>\n      <button mat-icon-button [color]=\"(experimentViewType$ | async) === VIEW_TYPE.LIST ? 'primary' : ''\"\n        (click)=\"changeDisplayView(VIEW_TYPE.LIST)\">\n        <mat-icon class=\"view-toggle\">menu</mat-icon>\n      </button>\n      <button mat-icon-button [color]=\"(experimentViewType$ | async) === VIEW_TYPE.CARD ? 'primary' : ''\"\n        (click)=\"changeDisplayView(VIEW_TYPE.CARD)\">\n        <mat-icon class=\"view-toggle\">view_module</mat-icon>\n      </button>\n    </div>\n    <div fxLayout=\"row wrap\" fxLayoutAlign=\"start center\">\n      <button\n        *ngIf=\"dataSourceResource.data && dataSourceResource.data?.length > 0 && (resources$ | async); else noData\"\n        mat-button [matMenuTriggerFor]=\"resourcesMenu\">\n        <mat-icon class=\"mr-3\">settings</mat-icon>\n        {{ 'Resources' | uppercase }}\n      </button>\n      <button mat-button (click)=\"helperService.redirectTo('initialize')\">\n        <mat-icon class=\"mr-3\" svgIcon=\"database\"></mat-icon>\n        {{ 'Reset Auptimizer Environment' | uppercase }}\n      </button>\n      <button mat-button (click)=\"helperService.redirectTo('create')\">\n        <mat-icon class=\"mr-3\" svgIcon=\"bulb\"></mat-icon>\n        {{ 'Create new experiment' | uppercase }}\n      </button>\n    </div>\n  </div>\n  <div *ngIf=\"(loadingAllExperiments$ | async) && (experiments$ | async)?.length === 0\" fxLayout=\"row\"\n    fxLayoutAlign=\"center center\" class=\"p-10\">\n    <mat-spinner color=\"accent\" [diameter]=\"100\" class=\"mt-10\"></mat-spinner>\n  </div>\n  <div class=\"w-full\" fxLayout=\"column\">\n    <div *ngIf=\"(loadingAllExperiments$ | async) === false && (experiments$ | async)?.length === 0\" fxLayout=\"row\"\n      class=\"w-full\">\n      <p class=\"font-medium\" *ngIf=\"!experiments ||( experiments && experiments.length === 0)\">No experiments created!\n      </p>\n    </div>\n    <ng-container *ngIf=\"experiments && experiments.length\">\n      <div *ngIf=\"(experimentViewType$ | async) === VIEW_TYPE.CARD\" fxLayout=\"row wrap\" fxLayoutAlign>\n        <mat-card class=\"py-3 px-4 experiment-card mt-3 mr-3\" fxFlex=\"calc(25% - 20px)\"\n          *ngFor=\"let experiment of experiments | paginate: { itemsPerPage: pageSize, currentPage: page }\">\n          <div class=\"w-full experiment-card-header mat-title mb-2\" fxLayoutAlign=\"start center\">\n            <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFlex=\"1 1 auto\" fxLayoutGap=\"15px\">\n              <div>{{ experiment.eid }}</div>\n              <div class=\"elipsis-card-title\" [matTooltip]=\"experiment.experimentName || experiment.scriptName\">{{\n                experiment.experimentName || experiment.scriptName }}\n              </div>\n            </div>\n            <div>\n              <button mat-icon-button class=\"actionable\" matTooltip=\"Create experiment from copy\"\n                (click)=\"helperService.redirectTo('create', experiment.eid)\">\n                <mat-icon svgIcon=\"copy\"></mat-icon>\n              </button>\n              <button [disabled]=\"\n                  experiment.status === EXPERIMENT_STATUS.RUNNING || experiment.status === EXPERIMENT_STATUS.STOPPING || experiment.status === EXPERIMENT_STATUS.REQUEST_STOP\n                \" mat-icon-button matTooltip=\"Delete experiment\" class=\"actionable-warn\"\n                (click)=\"deleteExperiment(experiment.eid)\">\n                <mat-icon>delete</mat-icon>\n              </button>\n            </div>\n          </div>\n          <hr />\n          <mat-card-content fxLayout=\"column\" fxLayoutGap=\"15px\" class=\"mt-3\">\n            <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n              <div class=\"w-130 color-gray\">Script Name:</div>\n              <div class=\"color-text-primary font-medium\" [matTooltip]=\"experiment.scriptName\">\n                {{experiment.scriptName | truncate:[25, '...']}}\n              </div>\n            </div>\n            <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n              <div class=\"w-130 color-gray\">Status:</div>\n              <div class=\"color-text-primary font-medium\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\n                <span *ngIf=\"experiment.status\">{{ experiment.status | lowercase | flu }}</span>\n                <span *ngIf=\"!experiment.status\">{{ EXPERIMENT_STATUS.FINISHED | lowercase | flu }}</span>\n                <button *ngIf=\"experiment.status === EXPERIMENT_STATUS.FAILED\" mat-icon-button color=\"warn\"\n                  matTooltip=\"Click to show error details\" class=\"error-icon\" (click)=\"showErrorDetails(experiment)\">\n                  <mat-icon>error</mat-icon>\n                </button>\n              </div>\n            </div>\n            <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n              <div class=\"w-130 color-gray\">Start Time:</div>\n              <div class=\"color-text-primary font-medium\" *ngIf=\"experiment.startTime && experiment.startTime !== -1\">\n                {{ experiment.startTime * 1000 | date: 'short' }}\n              </div>\n              <div class=\"color-text-primary font-medium\" *ngIf=\"experiment.startTime === null\">NA</div>\n            </div>\n            <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n              <div class=\"w-130 color-gray\">End Time:</div>\n              <div class=\"color-text-primary font-medium\" *ngIf=\"experiment.endTime && experiment.endTime !== -1\">\n                {{ experiment.endTime * 1000 | date: 'short' }}\n              </div>\n              <div class=\"color-text-primary font-medium\" *ngIf=\"experiment.endTime === null\">NA</div>\n            </div>\n            <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n              <div class=\"w-130 color-gray\">Best Result:</div>\n              <div class=\"color-text-primary font-medium\">\n                {{ experiment.bestScore !== null ? (experiment.bestScore | roundNumber) : 'NA' }}\n              </div>\n            </div>\n          </mat-card-content>\n          <hr />\n          <mat-card-actions class=\"w-full p-0 m-0 mt-3\" fxLayoutAlign=\"space-between center\">\n            <div fxFlex=\"1 0 auto\" [ngSwitch]=\"experiment.status\">\n              <span *ngSwitchCase=\"EXPERIMENT_STATUS.CREATED\">\n                <button class=\"mr-3\" mat-button (click)=\"startExperiment(experiment)\">\n                  <mat-icon>play_arrow</mat-icon>\n                  {{ 'Start' | uppercase }}\n                </button>\n              </span>\n              <span *ngSwitchCase=\"EXPERIMENT_STATUS.RUNNING\">\n                <button class=\"mr-3\" mat-button (click)=\"stopExperiment(experiment.eid)\">\n                  <mat-icon>stop</mat-icon>\n                  {{ 'Stop' | uppercase }}\n                </button>\n              </span>\n              <span *ngSwitchCase=\"EXPERIMENT_STATUS.STOPPED\">\n                <button class=\"mr-3\" mat-button (click)=\"startExperiment(experiment)\">\n                  <mat-icon>replay</mat-icon>\n                  {{ 'Restart' | uppercase }}\n                </button>\n              </span>\n              <span *ngSwitchCase=\"EXPERIMENT_STATUS.FINISHED\">\n                <button class=\"mr-3\" mat-button (click)=\"startExperiment(experiment)\">\n                  <mat-icon>replay</mat-icon>\n                  {{ 'Restart' | uppercase }}\n                </button>\n              </span>\n              <span *ngSwitchCase=\"EXPERIMENT_STATUS.FAILED\">\n                <button class=\"mr-3\" mat-button (click)=\"startExperiment(experiment)\">\n                  <mat-icon>replay</mat-icon>\n                  {{ 'Restart' | uppercase }}\n                </button>\n              </span>\n              <span *ngSwitchCase=\"EXPERIMENT_STATUS.STOPPING\">\n                {{ 'Stopping' | uppercase }}\n              </span>\n              <span *ngSwitchCase=\"EXPERIMENT_STATUS.REQUEST_STOP\">\n                {{ 'Stopping' | uppercase }}\n              </span>\n            </div>\n            <div>\n              <button class=\"m-0 ml-2\" *ngIf=\"experiment.expConfig\" mat-raised-button color=\"primary\"\n                (click)=\"showConfig(experiment)\">\n                {{ 'Config' | uppercase }}\n              </button>\n              <button class=\"m-0 ml-2\" mat-raised-button color=\"accent\" (click)=\"onDetails(experiment.eid)\">\n                {{ 'Results' | uppercase }}\n              </button>\n            </div>\n          </mat-card-actions>\n        </mat-card>\n      </div>\n      <div *ngIf=\"(experimentViewType$ | async) === VIEW_TYPE.LIST\" fxLayout=\"column\" fxLayoutAlign=\"start\"\n        class=\"w-full\">\n        <mat-card class=\"py-3 px-4 experiment-list-card mt-3 w-full\"\n          *ngFor=\"let experiment of experiments | paginate: { itemsPerPage: pageSize, currentPage: page }\"\n          fxLayout=\"row\" fxLayout.md=\"column\" fxLayout.lt-md=\"column\" fxLayoutAlign=\"start\" fxLayoutAlign.lt-md=\"start\"\n          fxLayoutAlign.md=\"start\" fxLayoutGap.md=\"20px\" fxLayoutGap.lt-md=\"20px\">\n          <div fxFlex=\"25\" fxFlex.lt-md=\"100\" fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFlex=\"1 1 auto\"\n            fxLayoutGap=\"25px\">\n            <div fxFlex.gt-md=\"1 1 auto\" fxLayout=\"row\" fxLayoutAlign=\"start start\" fxLayoutGap=\"15px\"\n              class=\"mat-title mb-0\">\n              <div>{{ experiment.eid }}</div>\n              <div class=\"elipsis-title\" [matTooltip]=\"experiment.experimentName || experiment.scriptName\">{{\n                experiment.experimentName || experiment.scriptName }}</div>\n            </div>\n            <div fxLayout=\"row\" fxLayoutAlign=\"end center\">\n              <button class=\"m-2\" *ngIf=\"experiment.expConfig\" mat-raised-button color=\"primary\"\n                (click)=\"showConfig(experiment)\">\n                {{ 'Config' | uppercase }}\n              </button>\n              <button class=\"m-2\" mat-raised-button color=\"accent\" (click)=\"onDetails(experiment.eid)\">\n                {{ 'Results' | uppercase }}\n              </button>\n            </div>\n          </div>\n          <div fxFlex=\"55\" fxFlex.md=\"100\" fxFlex.lt-md=\"100\" fxLayout=\"row\" fxLayoutAlign=\"space-around center\"\n            fxLayoutAlign.md=\"start\" fxLayoutAlign.lt-md=\"start\" ngClass.md=\"w-full\" ngClass.lt-md=\"w-full\"\n            fxLayoutGap=\"15px\">\n            <div fxFlex=\"12\" fxFlex.md=\"20\" fxFlex.lt-md=\"20\" fxLayout=\"column\" fxLayoutAlign=\"start start\">\n              <div class=\"color-gray\">Best Result:</div>\n              <div class=\"color-text-primary font-medium\">\n                {{ experiment.bestScore !== null ? (experiment.bestScore | roundNumber) : 'NA' }}\n              </div>\n            </div>\n            <div fxFlex=\"15\" fxFlex.md=\"20\" fxFlex.lt-md=\"20\" fxLayout=\"column\" fxLayoutAlign=\"start start\">\n              <div class=\"color-gray\">Script Name:</div>\n              <div class=\"color-text-primary font-medium elipsis-title\" [matTooltip]=\"experiment.scriptName\">\n                {{ experiment.scriptName }}\n              </div>\n            </div>\n            <div fxFlex=\"12\" fxFlex.md=\"20\" fxFlex.lt-md=\"20\" fxLayout=\"column\" fxLayoutAlign=\"start start\">\n              <div class=\"color-gray\">Status:</div>\n              <div class=\"color-text-primary font-medium\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\n                <span *ngIf=\"experiment.status\">{{ experiment.status | lowercase | flu }}</span>\n                <span *ngIf=\"!experiment.status\">{{ EXPERIMENT_STATUS.FINISHED | lowercase | flu }}</span>\n                <button *ngIf=\"experiment.status === EXPERIMENT_STATUS.FAILED\" mat-icon-button color=\"warn\"\n                  matTooltip=\"Click to show error details\" class=\"error-icon\" (click)=\"showErrorDetails(experiment)\">\n                  <mat-icon>error</mat-icon>\n                </button>\n              </div>\n            </div>\n            <div fxFlex=\"17\" fxFlex.md=\"20\" fxFlex.lt-md=\"20\" fxLayout=\"column\" fxLayoutAlign=\"start start\">\n              <div class=\"color-gray\">Start Time:</div>\n              <div class=\"color-text-primary font-medium\" *ngIf=\"experiment.startTime && experiment.startTime !== -1\">\n                {{ experiment.startTime * 1000 | date: 'short' }}\n              </div>\n              <div class=\"color-text-primary font-medium\" *ngIf=\"experiment.startTime === null\">NA</div>\n            </div>\n            <div fxFlex=\"17\" fxFlex.md=\"20\" fxFlex.lt-md=\"20\" fxLayout=\"column\" fxLayoutAlign=\"start start\">\n              <div class=\"color-gray\">End Time:</div>\n              <div class=\"color-text-primary font-medium\" *ngIf=\"experiment.endTime && experiment.endTime !== -1\">\n                {{ experiment.endTime * 1000 | date: 'short' }}\n              </div>\n              <div class=\"color-text-primary font-medium\" *ngIf=\"experiment.endTime === null\">NA</div>\n            </div>\n          </div>\n          <div fxFlex=\"15\" fxFlex.md=\"100\" fxFlex.lt-md=\"100\" fxLayout=\"row\" fxLayoutAlign=\"end center\"\n            fxLayoutAlign.md=\"start center\" fxLayoutAlign.lt-md=\"start center\">\n            <div fxFlex.gt-md=\"1 1 auto\" [ngSwitch]=\"experiment.status\">\n              <span *ngSwitchCase=\"EXPERIMENT_STATUS.CREATED\">\n                <button mat-button (click)=\"startExperiment(experiment)\">\n                  <mat-icon>play_arrow</mat-icon>\n                  {{ 'Start' | uppercase }}\n                </button>\n              </span>\n              <span *ngSwitchCase=\"EXPERIMENT_STATUS.RUNNING\">\n                <button mat-button (click)=\"stopExperiment(experiment.eid)\">\n                  <mat-icon>stop</mat-icon>\n                  {{ 'Stop' | uppercase }}\n                </button>\n              </span>\n              <span *ngSwitchCase=\"EXPERIMENT_STATUS.STOPPED\">\n                <button mat-button (click)=\"startExperiment(experiment)\">\n                  <mat-icon>replay</mat-icon>\n                  {{ 'Restart' | uppercase }}\n                </button>\n              </span>\n              <span *ngSwitchCase=\"EXPERIMENT_STATUS.FINISHED\">\n                <button mat-button (click)=\"startExperiment(experiment)\">\n                  <mat-icon>replay</mat-icon>\n                  {{ 'Restart' | uppercase }}\n                </button>\n              </span>\n              <span *ngSwitchCase=\"EXPERIMENT_STATUS.FAILED\">\n                <button mat-button (click)=\"startExperiment(experiment)\">\n                  <mat-icon>replay</mat-icon>\n                  {{ 'Restart' | uppercase }}\n                </button>\n              </span>\n              <span *ngSwitchCase=\"EXPERIMENT_STATUS.STOPPING\">\n                {{ 'Stopping' | uppercase }}\n              </span>\n              <span *ngSwitchCase=\"EXPERIMENT_STATUS.REQUEST_STOP\">\n                {{ 'Stopping' | uppercase }}\n              </span>\n            </div>\n            <div>\n              <button mat-icon-button class=\"actionable\" matTooltip=\"Create experiment from copy\"\n                (click)=\"helperService.redirectTo('create', experiment.eid)\">\n                <mat-icon svgIcon=\"copy\"></mat-icon>\n              </button>\n              <button [disabled]=\"\n                  experiment.status === EXPERIMENT_STATUS.RUNNING || experiment.status === EXPERIMENT_STATUS.STOPPING || experiment.status === EXPERIMENT_STATUS.REQUEST_STOP\n                \" mat-icon-button matTooltip=\"Delete experiment\" [class]=\"\n                  experiment.status === EXPERIMENT_STATUS.RUNNING || experiment.status === EXPERIMENT_STATUS.STOPPING || experiment.status === EXPERIMENT_STATUS.REQUEST_STOP\n                    ? ''\n                    : 'actionable-warn'\n                \" (click)=\"deleteExperiment(experiment.eid)\">\n                <mat-icon>delete</mat-icon>\n              </button>\n            </div>\n          </div>\n        </mat-card>\n      </div>\n    </ng-container>\n    <div class=\"w-full pt-5\" fxLayoutAlign=\"end center\">\n      <pagination-controls previousLabel=\"\" directionLinks=\"true\" nextLabel=\"\" (pageChange)=\"page = $event\">\n      </pagination-controls>\n    </div>\n  </div>\n</div>\n\n<ng-template #showConfigDialog let-data>\n  <div class=\"info-dialog-title w-full p-3 bg-primary text-white\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\n    <div class=\"w-full exp-config-title\">{{ data.name }}</div>\n    <button mat-icon-button matDialogClose>\n      <mat-icon>close</mat-icon>\n    </button>\n  </div>\n  <div class=\"info-dialog-content p-3\">\n    <pre>{{ data.config | json }}</pre>\n  </div>\n</ng-template>\n\n<ng-template #showErrorDialog let-data>\n  <div class=\"info-dialog-title w-full p-3 bg-primary text-white\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\n    <div class=\"w-full exp-config-title\">{{ data.name }}</div>\n    <button mat-icon-button matDialogClose>\n      <mat-icon>close</mat-icon>\n    </button>\n  </div>\n  <div class=\"info-dialog-content m-3\">\n    <pre>{{ data.message }}</pre>\n  </div>\n</ng-template>\n\n<ng-template #startExperimentDialog>\n  <div fxLayout=\"column\" fxLayoutGap=\"30px\">\n    <form [formGroup]=\"startExperimentForm\" #f=\"ngForm\" #formDirective=\"ngForm\" (ngSubmit)=\"onConfirmStartExperiment(f)\"\n      class=\"w-full\">\n      <mat-dialog-content>\n        <mat-form-field appearance=\"outline\" class=\"w-full mb-4\">\n          <mat-label>\n            Current working directory\n          </mat-label>\n          <input type=\"text\" matInput placeholder=\"CWD\" formControlName=\"cwd\" />\n          <mat-error>Missing field</mat-error>\n        </mat-form-field>\n        <mat-dialog-actions fxLayout=\"row\" fxLayoutAlign=\"center start\" fxLayoutGap=\"10px\" class=\"mb-3\">\n          <button class=\"mat-raised-button\" matDialogClose (click)=\"onExpCancel()\">Cancel</button>\n          <button type=\"submit\" [disabled]=\"!startExperimentForm.valid\" matDialogClose mat-raised-button color=\"accent\">\n            Start\n          </button>\n        </mat-dialog-actions>\n      </mat-dialog-content>\n    </form>\n  </div>\n</ng-template>\n\n<mat-menu #resourcesMenu=\"matMenu\" xPosition=\"before\">\n  <mat-toolbar class=\"resources-menu p-3 bg-primary text-white\">\n    <div class=\"w-full\" fxLayout=\"row\" fxLayoutAlign=\"end center\">\n      <button mat-icon-button>\n        <mat-icon>close</mat-icon>\n      </button>\n    </div>\n  </mat-toolbar>\n  <div class=\"resources-menu-content\" *ngIf=\"dataSourceResource.data && dataSourceResource.data?.length > 0\"\n    (click)=\"$event.stopPropagation()\">\n    <div class=\"table-container w-full\">\n      <table fxFill mat-table [dataSource]=\"dataSourceResource\" multiTemplateDataRows\n        (matSortChange)=\"sortResourceData($event)\" matSort matSortDisableClear class=\"mat-elevation-z3 w-full\">\n        <ng-container matColumnDef=\"{{ RESOURCE_COLUMNS.ID }}\">\n          <th mat-header-cell mat-sort-header *matHeaderCellDef>\n            {{ RESOURCE_COLUMNS.ID }}\n          </th>\n          <td mat-cell *matCellDef=\"let element\">\n            <span *ngIf=\"element.rid\">{{ element.rid }}</span>\n          </td>\n        </ng-container>\n        <ng-container matColumnDef=\"{{ RESOURCE_COLUMNS.NAME }}\">\n          <th mat-header-cell mat-sort-header *matHeaderCellDef>\n            {{ RESOURCE_COLUMNS.NAME }}\n          </th>\n          <td mat-cell *matCellDef=\"let element\">\n            <span *ngIf=\"element.name\">{{ element.name }}</span>\n          </td>\n        </ng-container>\n        <ng-container matColumnDef=\"{{ RESOURCE_COLUMNS.STATUS }}\">\n          <th mat-header-cell mat-sort-header *matHeaderCellDef>\n            {{ RESOURCE_COLUMNS.STATUS }}\n          </th>\n          <td mat-cell *matCellDef=\"let element\">\n            <span *ngIf=\"element.status\">{{ element.status }}</span>\n          </td>\n        </ng-container>\n        <ng-container matColumnDef=\"{{ RESOURCE_COLUMNS.TYPE }}\">\n          <th mat-header-cell mat-sort-header *matHeaderCellDef>\n            {{ RESOURCE_COLUMNS.TYPE }}\n          </th>\n          <td mat-cell *matCellDef=\"let element\">\n            <span *ngIf=\"element.type\">{{ element.type }}</span>\n          </td>\n        </ng-container>\n\n        <tr mat-header-row *matHeaderRowDef=\"displayedResourceColumns; sticky: true\"></tr>\n        <tr mat-row *matRowDef=\"let row; columns: displayedResourceColumns\"></tr>\n      </table>\n    </div>\n    <mat-paginator #paginatorResource class=\"mat-elevation-z3\"\n      [style.display]=\"dataSourceResource.data?.length > 0 && (resources$ | async) ? 'block' : 'none'\"\n      [pageSize]=\"pageSize\" showFirstLastButtons>\n    </mat-paginator>\n  </div>\n</mat-menu>\n\n<ng-template #noData>\n  <h1 class=\"mat-title text-primary\">No resource data available!</h1>\n</ng-template>"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/list/list.component.scss",
    "content": ".experiment-card {\n  min-width: 430px !important;\n  max-width: 430px !important;\n  mat-card-content > * {\n    font-size: 16px;\n  }\n}\n\n.elipsis-title {\n  width: 170px !important;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.elipsis-card-title {\n  max-width: 200px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.view-toggle {\n  height: 30px;\n  width: 30px;\n  font-size: 30px;\n  line-height: 30px;\n}\n\n.experiment-list-card {\n  mat-card-content > * {\n    font-size: 16px;\n  }\n}\n\n.error-icon {\n  font-size: 18px;\n  width: 18px;\n  height: 18px;\n  line-height: 18px;\n  margin-left: 10px;\n  margin-top: -7px;\n}\n\n.mat-header-cell {\n  text-transform: uppercase;\n}\n\n::ng-deep .mat-dialog-container {\n  padding: 0 !important;\n  overflow: unset !important;\n}\n\n.minw-200 {\n  min-width: 200px;\n}\n\n.minw-300 {\n  min-width: 300px;\n}\n\n.w-130 {\n  width: 130px;\n  max-width: 130px;\n}\n\n.resources-menu {\n  height: 50px;\n}\n\n.resources-menu-content {\n  width: 600px;\n}\n\n::ng-deep .mat-tooltip {\n  word-break: break-all !important;\n  white-space: normal !important;\n}\n\n.exp-config-title {\n  white-space: normal;\n  word-break: break-all;\n}"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/list/list.component.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { NO_ERRORS_SCHEMA } from '@angular/core';\nimport { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { RouterTestingModule } from '@angular/router/testing';\nimport { NgxsModule } from '@ngxs/store';\nimport { SharedModule } from '../../../../shared/shared.module';\nimport { ExperimentState } from '../../store/experiment.store';\n\nimport { ListComponent } from './list.component';\n\ndescribe('ListComponent', () => {\n  let component: ListComponent;\n  let fixture: ComponentFixture<ListComponent>;\n\n  beforeEach(async () => {\n    await TestBed.configureTestingModule({\n      schemas: [NO_ERRORS_SCHEMA],\n      imports: [NgxsModule.forRoot([ExperimentState]), RouterTestingModule, SharedModule, BrowserAnimationsModule],\n      declarations: [ListComponent],\n    }).compileComponents();\n  });\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(ListComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/list/list.component.ts",
    "content": "/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/unbound-method */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/naming-convention */\nimport {\n  Component,\n  OnInit,\n  ChangeDetectionStrategy,\n  ViewChild,\n  OnDestroy,\n  ChangeDetectorRef,\n  TemplateRef,\n} from '@angular/core';\nimport { Store, Select } from '@ngxs/store';\nimport { Observable, Subscription } from 'rxjs';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort, Sort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { Experiment } from '../../../../models/experiment.model';\nimport { Resource } from '../../../../models/resource.model';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { ExperimentState } from '../../store/experiment.store';\nimport {\n  DeleteExperiment,\n  GetExperiments,\n  SetExperimentDisplayView,\n  StartExperiment,\n  StopExperiment,\n} from '../../store/experiment.actions';\nimport { FormGroup, FormBuilder, Validators, FormGroupDirective, FormControl } from '@angular/forms';\nimport { StartExperimentModel } from '../../store/experiment-state.model';\nimport { HelperService, UtilsService } from '../../../../shared/services';\nimport { EXPERIMENT_STATUS } from '../../../../models/enum/experiment-status.enum';\nimport { ConfirmDialogComponent } from '../../../../shared/dialogs/confirm/confirm-dialog.component';\nimport { MatSelectChange } from '@angular/material/select';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { EXPERIMENT_VIEW_TYPE } from '../../../../models/enum/experiment-view-type.enum';\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'app-list',\n  templateUrl: './list.component.html',\n  styleUrls: ['./list.component.scss'],\n})\nexport class ListComponent implements OnInit, OnDestroy {\n  @Select(ExperimentState.experiments) experiments$: Observable<Experiment[]>;\n  @Select(ExperimentState.resources) resources$: Observable<Resource[]>;\n  @Select(ExperimentState.loadingAllExperiments) loadingAllExperiments$: Observable<boolean>;\n  @Select(ExperimentState.experimentViewType) experimentViewType$: Observable<EXPERIMENT_VIEW_TYPE>;\n\n  @ViewChild('paginatorExperiment', { static: true }) paginatorExperiment: MatPaginator;\n  @ViewChild(MatSort, { static: true }) sortExperiment: MatSort;\n\n  @ViewChild('paginatorResource', { static: true }) paginatorResource: MatPaginator;\n  @ViewChild(MatSort, { static: true }) sortResource: MatSort;\n\n  @ViewChild('showConfigDialog', { static: true }) showConfigDialog: TemplateRef<any>;\n  @ViewChild('showErrorDialog', { static: true }) showErrorDialog: TemplateRef<any>;\n  @ViewChild('startExperimentDialog', { static: true }) startExperimentDialog: TemplateRef<any>;\n\n  showConfigDialogRef;\n  showErrorDialogRef;\n  readonly EXPERIMENT_COLUMNS = {\n    ID: 'ID',\n    EXPERIMENT_NAME: 'Experiment Name',\n    SCRIPT_NAME: 'Script Name',\n    END_TIME: 'End Time',\n    STATUS: 'Status',\n    CONFIG: 'Config',\n    START_TIME: 'Start Time',\n    DETAILS: 'Details',\n    ACTION: 'Action',\n    CREATE: 'Create',\n    DELETE: 'Delete',\n  };\n  displayedExperimentColumns = [\n    this.EXPERIMENT_COLUMNS.ID,\n    this.EXPERIMENT_COLUMNS.EXPERIMENT_NAME,\n    this.EXPERIMENT_COLUMNS.SCRIPT_NAME,\n    this.EXPERIMENT_COLUMNS.CONFIG,\n    this.EXPERIMENT_COLUMNS.START_TIME,\n    this.EXPERIMENT_COLUMNS.END_TIME,\n    this.EXPERIMENT_COLUMNS.STATUS,\n    this.EXPERIMENT_COLUMNS.DETAILS,\n    this.EXPERIMENT_COLUMNS.ACTION,\n    this.EXPERIMENT_COLUMNS.CREATE,\n    this.EXPERIMENT_COLUMNS.DELETE,\n  ];\n  readonly RESOURCE_COLUMNS = {\n    ID: 'ID',\n    NAME: 'Name',\n    STATUS: 'Status',\n    TYPE: 'Type',\n  };\n  displayedResourceColumns = [\n    this.RESOURCE_COLUMNS.ID,\n    this.RESOURCE_COLUMNS.NAME,\n    this.RESOURCE_COLUMNS.STATUS,\n    this.RESOURCE_COLUMNS.TYPE,\n  ];\n  dataSourceResource: MatTableDataSource<Resource> = new MatTableDataSource<Resource>();\n  confirmDialogRef: MatDialogRef<ConfirmDialogComponent>;\n  subscriptions: Subscription;\n  pageSize = 8;\n  page = 1;\n\n  VIEW_TYPE = EXPERIMENT_VIEW_TYPE;\n\n  sortOptions = [\n    this.EXPERIMENT_COLUMNS.ID,\n    this.EXPERIMENT_COLUMNS.EXPERIMENT_NAME,\n    this.EXPERIMENT_COLUMNS.SCRIPT_NAME,\n    this.EXPERIMENT_COLUMNS.START_TIME,\n    this.EXPERIMENT_COLUMNS.END_TIME,\n    this.EXPERIMENT_COLUMNS.STATUS,\n  ];\n  sortOption = new FormControl(this.EXPERIMENT_COLUMNS.ID);\n  searchStr = new FormControl();\n  sortDirectionType: 'asc' | 'desc' = 'desc';\n  sortDirections: ('asc' | 'desc')[] = ['asc', 'desc'];\n\n  startExperimentDialogRef;\n  startExperimentForm: FormGroup;\n  selectedStartExperiment: number;\n  EXPERIMENT_STATUS = EXPERIMENT_STATUS;\n  showResources = false;\n  experiments: Experiment[];\n  allExperiments: Experiment[];\n  resources: Resource[];\n  sort: Sort;\n\n  constructor(\n    readonly store: Store,\n    private cdRef: ChangeDetectorRef,\n    public dialog: MatDialog,\n    private fb: FormBuilder,\n    private utilsService: UtilsService,\n    public helperService: HelperService\n  ) {}\n\n  ngOnInit(): void {\n    this.store.dispatch(new GetExperiments());\n    this.subscriptions = new Subscription();\n    this.startExperimentForm = this.fb.group({\n      cwd: ['', [Validators.required]],\n    });\n    this.subscriptions.add(\n      this.experiments$.subscribe((experiments: Experiment[]) => {\n        if (!this.searchStr.value) {\n          this.experiments =\n            experiments && experiments.length\n              ? experiments.slice().sort((a, b) => this.utilsService.compare(a.eid, b.eid, false))\n              : null;\n        }\n        this.allExperiments =\n          experiments && experiments.length\n            ? experiments.slice().sort((a, b) => this.utilsService.compare(a.eid, b.eid, false))\n            : null;\n        if (this.sort) {\n          this.sortExperimentData();\n        }\n        this.cdRef.markForCheck();\n      })\n    );\n    this.subscriptions.add(\n      this.resources$.subscribe((resources: Resource[]) => {\n        this.dataSourceResource.data = resources && resources.length ? resources.slice() : null;\n        this.resources = resources && resources.length ? resources.slice() : null;\n        this.dataSourceResource.paginator = this.paginatorResource;\n        this.dataSourceResource.sort = this.sortResource;\n        this.cdRef.markForCheck();\n      })\n    );\n    this.subscriptions.add(\n      this.searchStr.valueChanges.pipe(debounceTime(300), distinctUntilChanged()).subscribe((searchValue) => {\n        const searchable = this.utilsService.trimString(searchValue);\n        this.searchStringInExperiments(searchable);\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.unsubscribe();\n  }\n\n  clearSearch(): void {\n    this.searchStr.setValue('');\n  }\n\n  changeDisplayView(display: EXPERIMENT_VIEW_TYPE): void {\n    if (!display) {\n      return;\n    }\n    this.store.dispatch(new SetExperimentDisplayView(display));\n  }\n\n  showConfig(experiment: Experiment): void {\n    if (!experiment) {\n      // show notification that no config is available\n      return;\n    }\n    const config = JSON.parse(experiment.expConfig);\n    this.showConfigDialogRef = this.dialog.open(this.showConfigDialog, {\n      width: '650px',\n      data: { name: experiment.experimentName, config },\n      panelClass: 'info-modal',\n    });\n    this.subscriptions.add(this.showConfigDialogRef.afterClosed().subscribe());\n  }\n\n  showErrorDetails(experiment: Experiment): void {\n    if (!experiment || !experiment.errorMsg) {\n      // show notification that no config is available\n      return;\n    }\n    this.showErrorDialogRef = this.dialog.open(this.showErrorDialog, {\n      width: '650px',\n      data: { name: experiment.experimentName, message: experiment.errorMsg },\n      panelClass: 'info-modal',\n    });\n    this.subscriptions.add(this.showErrorDialogRef.afterClosed().subscribe());\n  }\n\n  startExperiment(experiment: Experiment): void {\n    if (!experiment || !experiment.expConfigDetails.workingdir) {\n      return;\n    }\n    const startExperimentData: StartExperimentModel = {\n      eid: experiment.eid,\n    };\n    this.store.dispatch(new StartExperiment(startExperimentData));\n    // this.selectedStartExperiment = eid;\n    // this.startExperimentDialogRef = this.dialog.open(this.startExperimentDialog, {\n    //   width: '400px',\n    //   disableClose: true,\n    // });\n    // this.subscriptions.add(this.startExperimentDialogRef.afterClosed().subscribe());\n  }\n\n  onConfirmStartExperiment(formDirective?: FormGroupDirective): void {\n    if (!this.startExperimentForm.valid) {\n      return;\n    }\n    const startExperimentData: StartExperimentModel = {\n      eid: this.selectedStartExperiment,\n    };\n    this.store.dispatch(new StartExperiment(startExperimentData));\n    formDirective.resetForm();\n    this.startExperimentForm.reset();\n  }\n\n  stopExperiment(eid: number): void {\n    if (!eid) {\n      return;\n    }\n    this.store.dispatch(new StopExperiment(eid));\n  }\n\n  onExpCancel(): void {\n    this.startExperimentForm.reset();\n  }\n\n  onDetails(eid: number): void {\n    if (!eid) {\n      return;\n    }\n    this.helperService.redirectTo('/experiment', eid);\n  }\n\n  onSortOption(event: MatSelectChange): void {\n    if (!event.value) {\n      return;\n    }\n    this.sort = {\n      active: event.value,\n      direction: this.sortDirectionType,\n    };\n    this.sortExperimentData();\n  }\n\n  onSortDirection(event: MatSelectChange): void {\n    if (!event.value) {\n      return;\n    }\n    this.sortDirectionType = event.value;\n    this.sort = {\n      active: this.sortOption.value,\n      direction: event.value,\n    };\n    this.sortExperimentData();\n  }\n\n  sortExperimentData(): boolean {\n    const sort = this.sort;\n    const data = this.allExperiments.slice();\n    if (!sort.active || sort.direction === '') {\n      this.experiments = data;\n      return;\n    }\n\n    this.experiments = data.sort((a, b) => {\n      const isAsc = sort.direction === 'asc';\n      switch (sort.active) {\n        case this.EXPERIMENT_COLUMNS.ID:\n          return this.utilsService.compare(a.eid, b.eid, isAsc);\n        case this.EXPERIMENT_COLUMNS.EXPERIMENT_NAME:\n          return this.utilsService.compare(a.experimentName, b.experimentName, isAsc);\n        case this.EXPERIMENT_COLUMNS.SCRIPT_NAME:\n          return this.utilsService.compare(a.scriptName, b.scriptName, isAsc);\n        case this.EXPERIMENT_COLUMNS.START_TIME:\n          return this.utilsService.compare(a.startTime, b.startTime, isAsc);\n        case this.EXPERIMENT_COLUMNS.END_TIME:\n          return this.utilsService.compare(a.endTime, b.endTime, isAsc);\n        case this.EXPERIMENT_COLUMNS.STATUS:\n          return this.utilsService.compare(a.status, b.status, isAsc);\n        default:\n          return 0;\n      }\n    });\n  }\n\n  sortResourceData(sort: Sort): boolean {\n    const data = this.resources.slice();\n    if (!sort.active || sort.direction === '') {\n      this.dataSourceResource.data = data;\n      return;\n    }\n\n    this.dataSourceResource.data = data.sort((a, b) => {\n      const isAsc = sort.direction === 'asc';\n      switch (sort.active) {\n        case this.RESOURCE_COLUMNS.ID:\n          return this.utilsService.compare(a.rid, b.rid, isAsc);\n        case this.RESOURCE_COLUMNS.NAME:\n          return this.utilsService.compare(a.name, b.name, isAsc);\n        case this.RESOURCE_COLUMNS.STATUS:\n          return this.utilsService.compare(a.status, b.status, isAsc);\n        case this.RESOURCE_COLUMNS.TYPE:\n          return this.utilsService.compare(a.type, b.type, isAsc);\n        default:\n          return 0;\n      }\n    });\n  }\n\n  searchStringInExperiments(query: string): void {\n    this.experiments = this.allExperiments.filter(\n      (experiment: Experiment) => this.utilsService.trimString(experiment.experimentName).indexOf(query) >= 0\n    );\n    this.cdRef.markForCheck();\n  }\n\n  deleteExperiment(eid: number): void {\n    if (!eid) {\n      return;\n    }\n    this.confirmDialogRef = this.dialog.open(ConfirmDialogComponent, {\n      width: '450px',\n      data: {\n        title: 'Delete experiment',\n        content: 'Are you sure you want to permanently delete this experiment?',\n        confirmButtonText: 'Delete',\n      },\n      panelClass: 'header-modal',\n    });\n    this.confirmDialogRef.afterClosed().subscribe((confirm) => {\n      if (confirm) {\n        this.store.dispatch(new DeleteExperiment(eid));\n      }\n    });\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/main/main.component.html",
    "content": "<div class=\"main-container text-primary\">\n  <app-header></app-header>\n  <div class=\"main\">\n    <mat-drawer-container class=\"h-vh w-full\">\n      <mat-drawer-content>\n        <router-outlet></router-outlet>\n      </mat-drawer-content>\n    </mat-drawer-container>\n  </div>\n</div>"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/main/main.component.scss",
    "content": ":host {\n  .main-container {\n    height: calc(100vh - 64px);\n  }\n  .logo-container {\n    > img {\n      height: 35px;\n    }\n  }\n\n  mat-drawer {\n    width: 300px;\n    mat-toolbar {\n      mat-icon {\n        font-size: 40px;\n        width: 40px;\n        height: 40px;\n      }\n      span {\n        font-size: 35px;\n        font-weight: 200;\n      }\n    }\n    .side-nav-content {\n      > a {\n        padding: 10px;\n        font-size: 20px;\n        font-weight: 400;\n        text-align: center;\n        line-height: 1.5;\n        width: 100%;\n      }\n    }\n  }\n\n  .refresh-interval {\n    width: 150px;\n    font-size: 18px;\n    margin-top: 10px;\n  }\n\n  .version {\n    font-size: 15px;\n    font-weight: 400;\n  }\n\n  .h-vh {\n    height: calc(100vh - 64px);\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/main/main.component.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { NO_ERRORS_SCHEMA } from '@angular/core';\nimport { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { RouterTestingModule } from '@angular/router/testing';\nimport { NgxsModule } from '@ngxs/store';\nimport { SharedModule } from '../../../../shared/shared.module';\n\nimport { MainComponent } from './main.component';\n\ndescribe('MainComponent', () => {\n  let component: MainComponent;\n  let fixture: ComponentFixture<MainComponent>;\n\n  beforeEach(async () => {\n    await TestBed.configureTestingModule({\n      schemas: [NO_ERRORS_SCHEMA],\n      imports: [NgxsModule.forRoot(), RouterTestingModule, SharedModule, BrowserAnimationsModule],\n      declarations: [MainComponent],\n    }).compileComponents();\n  });\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(MainComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/main/main.component.ts",
    "content": "/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/unbound-method */\nimport { Component, OnInit, OnDestroy } from '@angular/core';\nimport { Store, Select } from '@ngxs/store';\nimport { Subscription, Observable, interval } from 'rxjs';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n  GetExperimentInterimResults,\n  GetExperiments,\n  RefreshAll,\n  RefreshInterval,\n} from '../../store/experiment.actions';\nimport { ExperimentState } from '../../store/experiment.store';\nimport { startWith, map } from 'rxjs/operators';\nimport { SnackbarService } from '../../../../shared/services';\nimport { IntermediateExperiment } from '../../store/experiment-state.model';\n\n@Component({\n  selector: 'app-main',\n  templateUrl: './main.component.html',\n  styleUrls: ['./main.component.scss'],\n})\nexport class MainComponent implements OnInit, OnDestroy {\n  @Select(ExperimentState.refreshInterval) refreshInterval$: Observable<number>;\n  @Select(ExperimentState.refreshingInterval) refreshingInterval$: Observable<boolean>;\n  @Select(ExperimentState.interimExperiment) interimExperiment$: Observable<IntermediateExperiment>;\n\n  subscriptions: Subscription;\n  refreshIntervalSubscription: Subscription;\n  refreshInterval: number;\n  experimentId: number;\n  interimExperiment: IntermediateExperiment;\n\n  constructor(\n    readonly store: Store,\n    readonly route: ActivatedRoute,\n    readonly router: Router,\n    private snackbarService: SnackbarService\n  ) {}\n\n  ngOnInit(): void {\n    this.subscriptions = new Subscription();\n    // this.refreshIntervalSubscription = new Subscription();\n    this.subscriptions.add(\n      this.refreshInterval$.subscribe((rInterval: number) => {\n        if (rInterval) {\n          if (this.refreshIntervalSubscription && rInterval !== this.refreshInterval) {\n            this.refreshIntervalSubscription.unsubscribe();\n          }\n          this.refreshInterval = rInterval;\n          this.refreshIntervalSubscription = this.refreshIntervalData().subscribe();\n        }\n      })\n    );\n    this.subscriptions.add(\n      this.refreshingInterval$.subscribe((refreshingInterval: boolean) => {\n        if (refreshingInterval) {\n          this.refreshData();\n          const message = 'Data refreshed!';\n          this.snackbarService.success(message);\n          this.store.dispatch(new RefreshInterval(false));\n        }\n      })\n    );\n    this.subscriptions.add(\n      this.interimExperiment$.subscribe((interimExperiment: IntermediateExperiment) => {\n        if (interimExperiment) {\n          this.interimExperiment = interimExperiment;\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.unsubscribe();\n    if (this.refreshIntervalSubscription) {\n      this.refreshIntervalSubscription.unsubscribe();\n    }\n  }\n\n  // In the tables, fetch that data, but here, fetch this data\n  refreshIntervalData(): Observable<any> {\n    if (this.refreshInterval) {\n      return interval(this.refreshInterval * 1000).pipe(\n        startWith(0),\n        map(() => {\n          console.log('Fetching data...');\n          this.refreshData();\n        })\n      );\n    }\n  }\n\n  refreshData(): void {\n    this.store.dispatch(new GetExperiments());\n    this.store.dispatch(new RefreshAll());\n    if (this.interimExperiment) {\n      this.store.dispatch(new GetExperimentInterimResults({ eid: this.interimExperiment.eid }));\n    }\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/multi-exp-comp/multi-exp-comp.component.html",
    "content": "<div fxLayout=\"column\">\n  <h1 class=\"mat-headline\">Compare the best scores of multiple experiments against each other</h1>\n\n  <div fxLayout=\"row\" fxLayout.lt-md=\"column\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"20px\">\n    <div class=\"w-full\" *ngIf=\"experiments && experiments.length\">\n      <mat-form-field appearance=\"outline\" class=\"w-full\" *ngIf=\"experiments && experiments.length > 0\">\n        <mat-label> Select Experiments </mat-label>\n        <mat-select multiple [(ngModel)]=\"selectedExperiments\" (selectionChange)=\"selectExperiment($event)\">\n          <mat-option *ngFor=\"let experiment of experiments\" [value]=\"experiment\">\n            {{ experiment.experimentName || experiment.scriptName }}\n          </mat-option>\n        </mat-select>\n      </mat-form-field>\n    </div>\n    <!-- <div class=\"multiplier\">\n      <mat-form-field appearance=\"outline\" class=\"w-full\" appearance=\"outline\">\n        <mat-label>\n          Step size\n        </mat-label>\n        <input type=\"number\" matInput [formControl]=\"experimentMultiplierForm\" />\n        <mat-hint>Number of jobs</mat-hint>\n        <mat-error>Required step size</mat-error>\n      </mat-form-field>\n    </div> -->\n    <mat-form-field appearance=\"outline\" class=\"w-full mr-3\" *ngIf=\"commonLabels && commonLabels.length > 0\">\n      <mat-label> Y-axis </mat-label>\n      <mat-select class=\"w-full\" (selectionChange)=\"selectLabel($event.value)\" [formControl]=\"selectedLabel\">\n        <mat-option *ngFor=\"let label of commonLabels\" [value]=\"label\">\n          {{ label }}\n        </mat-option>\n      </mat-select>\n    </mat-form-field>\n    <div class=\"w-full\">\n      <mat-form-field appearance=\"outline\" class=\"w-full mr-3\">\n        <mat-label> X-axis </mat-label>\n        <mat-select [formControl]=\"xAxisType\" (selectionChange)=\"changeXAxisValue()\">\n          <mat-option *ngFor=\"let value of axisValues\" [value]=\"value\">\n            {{ value }}\n          </mat-option>\n        </mat-select>\n      </mat-form-field>\n    </div>\n  </div>\n\n  <div class=\"w-full mb-4 mr-3\" fxLayoutAlign=\"space-between center\">\n    <button matTooltip=\"Current view will be downloaded\" mat-raised-button (click)=\"downloadGraph()\">\n      {{ 'Download graph png' | uppercase }}\n    </button>\n    <button fxFlexAlign=\"end\" mat-raised-button [matMenuTriggerFor]=\"helpMenu\">\n      <mat-icon class=\"mr-3\">help_outline</mat-icon>\n      {{ 'interaction guide' | uppercase }}\n    </button>\n  </div>\n\n  <div class=\"w-full\">\n    <plotly-plot class=\"w-full chart\" divId=\"multiExperiment\" [data]=\"graph.data\" [layout]=\"graph.layout\"\n      [config]=\"graph.config\"></plotly-plot>\n  </div>\n</div>\n\n<mat-menu #helpMenu=\"matMenu\" xPosition=\"before\">\n  <mat-toolbar class=\"help-menu\">\n    <div class=\"w-full\" fxLayout=\"row\" fxLayoutAlign=\"end center\">\n      <button mat-icon-button>\n        <mat-icon>close</mat-icon>\n      </button>\n    </div>\n  </mat-toolbar>\n  <mat-drawer-container class=\"help-content\" fxLayout=\"column\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"30px\">\n    <div fxLayout=\"column\" fxLayoutAlign=\"start\" fxLayoutGap=\"30px\" class=\"p-5 w-full\">\n      <p fxFlex=\"100\" fxLayout=\"row\" fxLayoutAlign=\"start\" class=\"my-0\">\n        On the graph:\n      </p>\n      <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"30px\">\n        <ul class=\"mt-3 ml-5 help-list\">\n          <li>zoom out/in: place mouse on the graph and scroll up/down</li>\n          <li>zoom in a specific area: click mouse anywhere on the graph and drag it to draw a square</li>\n          <li>change the axis range: drag the label on x-axis or y-axis</li>\n          <li>show/hide data: click on the corresponding legend</li>\n          <li>show detailed value: hover over the data point</li>\n          <li>go back to default view: double-click on anywhere on the plot</li>\n        </ul>\n      </div>\n    </div>\n  </mat-drawer-container>\n</mat-menu>"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/multi-exp-comp/multi-exp-comp.component.scss",
    "content": ".multiplier {\n  width: 110px;\n  margin-top: 1px;\n  > mat-form-field {\n    text-align: center;\n  }\n}\n\n.headers-align .mat-expansion-panel-header-title,\n.headers-align .mat-expansion-panel-header-description {\n  flex-basis: 0;\n}\n\n.headers-align .mat-expansion-panel-header-description {\n  justify-content: space-between;\n  align-items: center;\n}\n\n.headers-align .mat-form-field + .mat-form-field {\n  margin-left: 8px;\n}\n\nmat-select, input {\n  font-size: 18px;\n  padding-top: 10px;\n}\n\n.chart {\n  height: 540px;\n}"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/multi-exp-comp/multi-exp-comp.component.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { NO_ERRORS_SCHEMA } from '@angular/core';\nimport { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { RouterTestingModule } from '@angular/router/testing';\nimport { NgxsModule } from '@ngxs/store';\nimport { SharedModule } from '../../../../shared/shared.module';\n\nimport { MultiExpCompComponent } from './multi-exp-comp.component';\n\ndescribe('MultiExpCompComponent', () => {\n  let component: MultiExpCompComponent;\n  let fixture: ComponentFixture<MultiExpCompComponent>;\n\n  beforeEach(async () => {\n    await TestBed.configureTestingModule({\n      schemas: [NO_ERRORS_SCHEMA],\n      imports: [NgxsModule.forRoot(), RouterTestingModule, SharedModule, BrowserAnimationsModule],\n      declarations: [MultiExpCompComponent],\n    }).compileComponents();\n  });\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(MultiExpCompComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/multi-exp-comp/multi-exp-comp.component.ts",
    "content": "/* eslint-disable prefer-arrow/prefer-arrow-functions */\n/* eslint-disable @typescript-eslint/prefer-for-of */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unused-expressions */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/unbound-method */\n/* eslint-disable no-shadow */\n/* eslint-disable @typescript-eslint/naming-convention */\nimport { Component, OnInit, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\nimport { Select, Store } from '@ngxs/store';\nimport { ExperimentState } from '../../store/experiment.store';\nimport { Observable, Subscription } from 'rxjs';\nimport { Experiment, ExperimentHistory } from '../../../../models/experiment.model';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { MatSelectChange } from '@angular/material/select';\nimport { FormControl } from '@angular/forms';\nimport { AppState } from '../../../../appStore/app.store';\nimport { Theme } from '../../../../appStore/app-state.model';\nimport { ExperimentService } from '../../services/experiment.service';\nimport { FirstLetterUppercasePipe } from '../../../../shared/pipes';\nimport { PlotlyService } from 'angular-plotly.js';\nimport { GRAPH_COLORS } from '../../../../models/data/graph-colors.data';\n\nexport enum AXIS_TYPE {\n  JOBS = 'jobs',\n  SCORE = 'score',\n  TIME = 'time (seconds)',\n}\n\nexport enum SORT_BY {\n  JID = 'jid',\n  END_TIME = 'end_time',\n}\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'app-multi-exp-comp',\n  templateUrl: './multi-exp-comp.component.html',\n  styleUrls: ['./multi-exp-comp.component.scss'],\n})\nexport class MultiExpCompComponent implements OnInit {\n  @Select(ExperimentState.experiments) experiments$: Observable<Experiment[]>;\n  @Select(ExperimentState.experimentsMultiplier) experimentsMultiplier$: Observable<number>;\n  @Select(AppState.theme) theme$: Observable<Theme>;\n\n  // experimentMultiplierForm: FormControl;\n  experimentMultiplier = 1;\n  subscriptions: Subscription;\n  experiments: Experiment[];\n  experimentId: number;\n  xAxisType: FormControl;\n  yAxisType: FormControl;\n  axisValues = [AXIS_TYPE.JOBS, AXIS_TYPE.TIME];\n  yAxisValue: string = AXIS_TYPE.SCORE;\n  selectedExperiments: Experiment[] = [];\n  checkedExperiments: Experiment[] = [];\n  theme: Theme;\n  SORT_BY = SORT_BY;\n  selectedSortBy = SORT_BY.JID;\n  stepSizes = [1, 2];\n  commonLabels: string[] = [];\n  selectedLabel = new FormControl();\n  yAxisLabel = 'score';\n\n  public graph = {\n    data: [],\n    layout: {\n      height: 540,\n      xaxis: {\n        title: {\n          text: '',\n        },\n      },\n      yaxis: {\n        title: {\n          text: '',\n        },\n      },\n    },\n    config: {\n      responsive: true,\n      displayModeBar: false,\n      scrollZoom: true,\n    },\n  };\n\n  showInteractionGuide = false;\n\n  constructor(\n    readonly store: Store,\n    readonly router: Router,\n    private route: ActivatedRoute,\n    private cdRef: ChangeDetectorRef,\n    private experimentService: ExperimentService,\n    private plotlyService: PlotlyService\n  ) {}\n\n  ngOnInit(): void {\n    this.subscriptions = new Subscription();\n    // this.experimentMultiplierForm = new FormControl(1, [Validators.required, Validators.pattern(/^-?([1-9]\\d*)?$/)]);\n    this.xAxisType = new FormControl(this.axisValues[0]);\n    this.yAxisType = new FormControl(this.yAxisValue);\n    this.subscriptions.add(\n      this.route?.parent?.params.subscribe((params) => {\n        this.experimentId = params['id'];\n      })\n    );\n    this.subscriptions.add(\n      this.experiments$.subscribe((experiments: Experiment[]) => {\n        if (experiments && experiments.length > 0) {\n          // this.store.dispatch(new GetExperimentsHistoryBest());\n          this.getExperimentsBestHistory();\n          if (!this.selectedExperiments.length) {\n            this.experiments = experiments.slice();\n          }\n          this.computePlots();\n          this.cdRef.markForCheck();\n        }\n      })\n    );\n    this.subscriptions.add(\n      this.theme$.subscribe((theme: Theme) => {\n        if (theme) {\n          this.theme = theme;\n          this.provideLayoutBasedOnTheme();\n        }\n      })\n    );\n    this.subscriptions.add(\n      this.experimentsMultiplier$.subscribe((multiplier: number) => {\n        if (multiplier) {\n          // this.experimentMultiplier = multiplier;\n        }\n      })\n    );\n    // this.experimentMultiplierForm.valueChanges.pipe(distinctUntilChanged()).subscribe((multiplier: number) => {\n    //   if (multiplier) {\n    //     this.experimentMultiplier = multiplier;\n    //     this.getExperimentsBestHistory();\n    //   }\n    // });\n  }\n\n  provideLayoutBasedOnTheme(): void {\n    this.graph.layout = this.changeLightModeChart();\n    if (this.theme) {\n      this.theme.name === 'dark'\n        ? (this.graph.layout = this.changeDarkModeChart())\n        : (this.graph.layout = this.changeLightModeChart());\n      this.cdRef.markForCheck();\n    }\n  }\n\n  downloadGraph(): void {\n    const graphDiv = this.plotlyService.getInstanceByDivId('multiExperiment');\n    this.plotlyService\n      .getPlotly()\n      .downloadImage(graphDiv, { format: 'png', width: '1000', height: '450', filename: 'multiExperiment' });\n  }\n\n  getExperimentsBestHistory(): void {\n    if (!this.experimentMultiplier) {\n      return;\n    }\n    const label = this.selectedLabel.value;\n    this.experimentService\n      .getAllExperimentHistoryBest(this.experimentMultiplier, this.selectedSortBy, label)\n      .subscribe((res) => {\n        if (res && res['experiment_history_best']) {\n          const history = res['experiment_history_best'];\n          this.experiments.map((exp) => {\n            exp.history = [];\n            if (history[exp.eid]) {\n              history[exp.eid].map((expHistory) => {\n                const experimentHistory: ExperimentHistory = {\n                  jid: expHistory['jid'],\n                  jobConfig: JSON.parse(expHistory['job_config']),\n                  score: expHistory['score'],\n                };\n                exp.history.push(experimentHistory);\n              });\n            }\n          });\n          this.selectedExperiments.map((exp) => {\n            exp.history = [];\n            history[exp.eid].map((expHistory) => {\n              const experimentHistory: ExperimentHistory = {\n                jid: expHistory['jid'],\n                jobConfig: JSON.parse(expHistory['job_config']),\n                score: expHistory['score'],\n              };\n              exp.history.push(experimentHistory);\n            });\n          });\n          this.computePlots();\n          this.cdRef.markForCheck();\n        }\n      });\n  }\n\n  // get experimentMultiplierValue(): number {\n  //   return this.experimentMultiplierForm.value;\n  // }\n\n  get xAxisValue(): AXIS_TYPE {\n    return this.xAxisType.value;\n  }\n\n  changeLightModeChart(): any {\n    const flu = new FirstLetterUppercasePipe();\n    return {\n      colorway: GRAPH_COLORS,\n      hovermode: 'closest',\n      height: 450,\n      showlegend: true,\n      // title: {\n      //   text: 'Score',\n      // },\n      xaxis: {\n        zeroline: false,\n        title: {\n          text: flu.transform(this.xAxisValue),\n          font: {\n            size: 18,\n            color: '#7f7f7f',\n          },\n        },\n      },\n      yaxis: {\n        zeroline: false,\n        title: {\n          text: flu.transform(this.yAxisValue),\n          font: {\n            size: 18,\n            color: '#7f7f7f',\n          },\n        },\n      },\n    };\n  }\n\n  changeDarkModeChart(): any {\n    const flu = new FirstLetterUppercasePipe();\n    return {\n      colorway: GRAPH_COLORS,\n      hovermode: 'closest',\n      plot_bgcolor: '#424242',\n      paper_bgcolor: '#424242',\n      height: 450,\n      showlegend: true,\n      legend: {\n        font: {\n          color: '#ffffff',\n        },\n      },\n      xaxis: {\n        title: {\n          text: flu.transform(this.xAxisValue),\n          font: {\n            size: 18,\n            color: '#ffffff',\n          },\n        },\n        gridcolor: '#c0c0c0',\n        tickfont: {\n          color: '#ffffff',\n        },\n        showline: true,\n        showgrid: true,\n        zeroline: false,\n        showticklabels: true,\n      },\n      yaxis: {\n        title: {\n          text: flu.transform(this.yAxisValue),\n          font: {\n            size: 18,\n            color: '#ffffff',\n          },\n        },\n        gridcolor: '#c0c0c0',\n        tickfont: {\n          color: '#ffffff',\n        },\n        showline: true,\n        showgrid: true,\n        zeroline: false,\n        showticklabels: true,\n      },\n      line: {\n        color: '#ffffff',\n      },\n    };\n  }\n\n  selectExperiment(event: MatSelectChange): void {\n    const scoreLabel = 'score';\n    if (!event.value) {\n      return;\n    }\n    this.selectedExperiments = event.value;\n    let combinedLabels = [];\n    this.commonLabels = [];\n    for (let i = 0; i < this.selectedExperiments.length; i++) {\n      if (!this.selectedExperiments[i].labels || !this.selectedExperiments[i].labels.length) {\n        combinedLabels = [];\n        this.commonLabels = [];\n        break;\n      } else {\n        combinedLabels.push(this.selectedExperiments[i].labels);\n      }\n    }\n    if (combinedLabels.length) {\n      if (combinedLabels.length > 1) {\n        this.commonLabels = combinedLabels.shift().filter(function (v) {\n          return combinedLabels.every(function (a) {\n            return a.indexOf(v) !== -1;\n          });\n        });\n        // if (!this.commonLabels.length) {\n        //   this.selectedLabel.patchValue(scoreLabel);\n        //   this.selectLabel(scoreLabel);\n        // }\n      } else {\n        this.commonLabels = combinedLabels[0].slice();\n      }\n      this.commonLabels.length > 0 ? this.commonLabels.unshift(scoreLabel) : null;\n    } else {\n      this.commonLabels = [];\n    }\n    this.selectedLabel.patchValue(scoreLabel);\n    this.selectLabel(scoreLabel);\n    this.computePlots();\n  }\n\n  selectLabel(label: string): void {\n    if (!label) {\n      return;\n    }\n    this.yAxisValue = label;\n    this.cdRef.markForCheck();\n    this.getExperimentsBestHistory();\n    this.computePlots();\n  }\n\n  changeXAxisValue(): void {\n    switch (this.xAxisType.value) {\n      case AXIS_TYPE.JOBS:\n        this.selectedSortBy = SORT_BY.JID;\n        break;\n      case AXIS_TYPE.TIME:\n        this.selectedSortBy = SORT_BY.END_TIME;\n        break;\n      default:\n        this.selectedSortBy = null;\n        break;\n    }\n    this.getExperimentsBestHistory();\n    this.computePlots();\n  }\n\n  computePlots(): void {\n    this.provideLayoutBasedOnTheme();\n    if (this.selectedExperiments.length) {\n      const traces = this.selectedExperiments.map((experiment: Experiment) => {\n        return {\n          x: [...this.computeXAxis(experiment)],\n          y: [...this.computeYAxis(experiment)],\n          // hovertext: [...this.computeHoverText(experiment)],\n          mode: 'lines+markers',\n          // marker: { size: 11 },\n          type: 'scatter',\n          name: experiment.experimentName ? experiment.experimentName : experiment.scriptName,\n        };\n      });\n      this.graph.data = traces;\n      this.cdRef.markForCheck();\n    } else {\n      this.graph.data = [];\n    }\n  }\n  // computeHoverText(experiment: Experiment): any {\n  //   if (this.xAxisType.value && experiment) {\n  //     switch (this.xAxisType.value) {\n  //       case AXIS_TYPE.JOBS:\n  //         return experiment.jobs.map((job, index) => 'TEST1');\n  //       case AXIS_TYPE.SCORE:\n  //         return experiment.jobs.map((job, index) => 'TEST2');\n  //     }\n  //   }\n  // }\n\n  computeXAxis(experiment: Experiment): any {\n    if (this.xAxisType.value && experiment) {\n      switch (this.xAxisType.value) {\n        case AXIS_TYPE.JOBS:\n          return experiment.history.map((expHistory, index) => {\n            const newIndex = this.experimentMultiplier * (index + 1);\n            return newIndex - Math.floor(newIndex / experiment.jobs.length) * (newIndex % experiment.jobs.length);\n          });\n        case AXIS_TYPE.TIME:\n          // console.log(\n          //   'X AXIS: - TIME',\n          //   experiment.jobs.map((job) => (job['end_time'] ? job['end_time'] - experiment.startTime : null))\n          // );\n          return experiment.jobs.map((job) => (job['end_time'] ? job['end_time'] - experiment.startTime : null));\n      }\n      this.cdRef.markForCheck();\n    }\n  }\n\n  computeYAxis(experiment: Experiment): any {\n    if (this.yAxisType.value && experiment) {\n      return experiment.history.map((expHistory) => expHistory.score);\n    }\n    this.cdRef.markForCheck();\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/notification/notification.component.html",
    "content": "<mat-drawer-container class=\"h-vh w-full\">\n  <div class=\"w-full h-full p-5\" fxLayout=\"column\" fxLayoutAlign=\"start center\">\n    <div class=\"notifications-container\" fxLayout=\"column\">\n      <div class=\"w-full mb-4\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"20px\">\n        <div fxLayoutAlign=\"center\" fxLayoutGap=\"10px\">\n          <mat-form-field appearance=\"outline\">\n            <mat-label>Sort by</mat-label>\n            <mat-select [formControl]=\"sortOption\" name=\"sortOption\" (selectionChange)=\"onSortOption($event)\">\n              <mat-option *ngFor=\"let sort of sortOptions\" [value]=\"sort\">\n                {{sort | flu}}\n              </mat-option>\n            </mat-select>\n          </mat-form-field>\n          <mat-button-toggle-group class=\"sort-toggle mt-1\" name=\"fontStyle\" [value]=\"sortDirectionType\"\n            (change)=\"onSortDirection($event)\">\n            <mat-button-toggle [value]=\"sortDirections[0]\">\n              <mat-icon [color]=\"sortDirectionType === sortDirections[0] ? 'primary' : ''\">north</mat-icon>\n            </mat-button-toggle>\n            <mat-button-toggle [value]=\"sortDirections[1]\">\n              <mat-icon [color]=\"sortDirectionType === sortDirections[1] ? 'primary' : ''\">south</mat-icon>\n            </mat-button-toggle>\n          </mat-button-toggle-group>\n        </div>\n        <button type=\"button\" mat-button class=\"mb-5\" (click)=\"removeAllNotifications()\">\n          <mat-icon class=\"mr-3\">delete_sweep</mat-icon>\n          Clear all\n        </button>\n      </div>\n      <div *ngIf=\"notifications && notifications.length\" class=\"mb-3\">\n        <hr>\n        <!--  *ngFor=\"let notification of notifications | | paginate: { itemsPerPage: pageSize, currentPage: page } -->\n        <ng-container *ngFor=\"let notification of notifications\">\n          <div class=\"notification py-4\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\n            <div class=\"type\" *ngIf=\"notification.type\" fxLayoutAlign=\"start center\" fxLayoutGap=\"5px\">\n              <mat-icon [class]=\"'color-'+notification.type.toLowerCase()\">{{ notification.type | notifyIcon }}\n              </mat-icon>\n              <span>{{ notification.type }}</span>\n            </div>\n            <div class=\"message mx-3\" *ngIf=\"notification.message\">{{ notification.message }}</div>\n            <div *ngIf=\"notification.receivedAt\">{{ notification.receivedAt | date: 'medium' }}</div>\n            <div>\n              <mat-icon matTooltip=\"Remove notification\" (click)=\"removeNotification(notification)\"\n                class=\"actionable-warn\">delete</mat-icon>\n            </div>\n          </div>\n          <hr>\n        </ng-container>\n        <!-- <div class=\"w-full pt-5\" fxLayoutAlign=\"end center\">\n          <pagination-controls previousLabel=\"\" directionLinks=\"true\" nextLabel=\"\" (pageChange)=\"page = $event\">\n          </pagination-controls>\n        </div> -->\n      </div>\n    </div>\n  </div>\n</mat-drawer-container>"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/notification/notification.component.scss",
    "content": ".notifications-container {\n  min-width: 700px;\n  max-height: 500px;\n}\n\n.mat-column-Message {\n  max-width: 500px !important;\n}\n\n[class^='mat-column-'] {\n  padding-right: 10px !important;\n}\n\n.notification {\n  .type {\n    width: 100px;\n  }\n  .message {\n    width: 300px;\n    word-wrap: break-word;\n  }\n  > * {\n  }\n}"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/notification/notification.component.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { NO_ERRORS_SCHEMA } from '@angular/core';\nimport { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { RouterTestingModule } from '@angular/router/testing';\nimport { NgxsModule } from '@ngxs/store';\nimport { SharedModule } from '../../../../shared/shared.module';\n\nimport { NotificationComponent } from './notification.component';\n\ndescribe('NotificationComponent', () => {\n  let component: NotificationComponent;\n  let fixture: ComponentFixture<NotificationComponent>;\n\n  beforeEach(async () => {\n    await TestBed.configureTestingModule({\n      schemas: [NO_ERRORS_SCHEMA],\n      imports: [NgxsModule.forRoot(), RouterTestingModule, BrowserAnimationsModule, SharedModule],\n      declarations: [NotificationComponent],\n    }).compileComponents();\n  });\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(NotificationComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/notification/notification.component.ts",
    "content": "/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable @typescript-eslint/unbound-method */\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { MatSelectChange } from '@angular/material/select';\nimport { Sort } from '@angular/material/sort';\nimport { Select, Store } from '@ngxs/store';\nimport { Observable, Subscription } from 'rxjs';\nimport { AppNotification } from '../../../../appStore/app-state.model';\nimport { RemoveAllNotifications, RemoveNotification } from '../../../../appStore/app.actions';\nimport { AppState } from '../../../../appStore/app.store';\nimport { NOTIFICATION_TYPE } from '../../../../models/enum/notification-type.enum';\nimport { HelperService, UtilsService } from '../../../../shared/services';\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'app-notification',\n  templateUrl: './notification.component.html',\n  styleUrls: ['./notification.component.scss'],\n})\nexport class NotificationComponent implements OnInit, OnDestroy {\n  @Select(AppState.notifications) notifications$: Observable<AppNotification[]>;\n\n  subscriptions: Subscription;\n  readonly COLUMNS = {\n    TYPE: 'Type',\n    MESSAGE: 'Message',\n    RECEIVED: 'Received at',\n  };\n  pageSize = 5;\n  page = 1;\n\n  NOTIFICATION_TYPE = NOTIFICATION_TYPE;\n  notifications: AppNotification[];\n\n  sortOptions = [this.COLUMNS.TYPE, this.COLUMNS.MESSAGE, this.COLUMNS.RECEIVED];\n  sortOption = new FormControl(this.COLUMNS.RECEIVED);\n  sortDirectionType: 'asc' | 'desc' = 'desc';\n  sortDirections: ('asc' | 'desc')[] = ['asc', 'desc'];\n\n  constructor(\n    readonly store: Store,\n    private cdRef: ChangeDetectorRef,\n    public helperService: HelperService,\n    private utilsService: UtilsService\n  ) {}\n\n  ngOnInit(): void {\n    this.subscriptions = new Subscription();\n    this.subscriptions.add(\n      this.notifications$.subscribe((notifications: AppNotification[]) => {\n        this.notifications =\n          notifications && notifications.length\n            ? notifications.slice().sort((a, b) => this.utilsService.compare(a.receivedAt, b.receivedAt, false))\n            : null;\n        this.cdRef.markForCheck();\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.unsubscribe();\n  }\n\n  removeNotification(notification: AppNotification): void {\n    if (!notification) {\n      return;\n    }\n    this.store.dispatch(new RemoveNotification(notification));\n  }\n\n  removeAllNotifications(): void {\n    this.store.dispatch(new RemoveAllNotifications());\n    this.helperService.redirectTo('list');\n  }\n\n  onSortOption(event: MatSelectChange): void {\n    if (!event.value) {\n      return;\n    }\n    const sort: Sort = {\n      active: event.value,\n      direction: this.sortDirectionType,\n    };\n    this.sortData(sort);\n  }\n\n  onSortDirection(event: MatSelectChange): void {\n    if (!event.value) {\n      return;\n    }\n    this.sortDirectionType = event.value;\n    const sort: Sort = {\n      active: this.sortOption.value,\n      direction: event.value,\n    };\n    this.sortData(sort);\n  }\n\n  sortData(sort: Sort): boolean {\n    const data = this.notifications.slice();\n    if (!sort.active || sort.direction === '') {\n      this.notifications = data;\n      return;\n    }\n\n    this.notifications = data.sort((a, b) => {\n      const isAsc = sort.direction === 'asc';\n      switch (sort.active) {\n        case this.COLUMNS.TYPE:\n          return this.utilsService.compare(a.type, b.type, isAsc);\n        case this.COLUMNS.MESSAGE:\n          return this.utilsService.compare(a.message, b.message, isAsc);\n        case this.COLUMNS.RECEIVED:\n          return this.utilsService.compare(a.receivedAt, b.receivedAt, isAsc);\n        default:\n          return 0;\n      }\n    });\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/overview/overview.component.html",
    "content": "<div fxLayout=\"column\">\n  <div fxLayoutAlign=\"space-between center\">\n    <h1 class=\"mat-headline\">Experiment Overview</h1>\n    <button mat-button (click)=\"openDetails()\">\n      <mat-icon class=\"mr-3\" svgIcon=\"information\"></mat-icon>\n      {{ 'Experiment details' | uppercase }}\n    </button>\n  </div>\n  <app-experiment-dropdown fxFlex.gt-md=\"50\" fxFlex=\"100\" [experimentId]=\"experimentId\"\n    (toggleExperiment)=\"toggleExperiment($event)\">\n  </app-experiment-dropdown>\n\n  <!-- <div *ngIf=\"(loadingExperiment$ | async) && (experiment$ | async) === null\" fxLayout=\"row\"\n    fxLayoutAlign=\"center center\" class=\"p-10\">\n    <mat-spinner color=\"accent\" [diameter]=\"100\" class=\"mt-10\"></mat-spinner>\n  </div> -->\n\n  <div fxLayout=\"column\" class=\"w-full\" fxLayoutGap=\"15px\">\n    <div *ngIf=\"experimentData\" fxLayout=\"column\" class=\"w-full\" fxLayoutGap=\"15px\">\n      <h2 class=\"mat-title\">\n        Best Result: {{ experimentData.bestScore['score'] | roundNumber }}\n      </h2>\n      <div fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"w-full\">\n        <div class=\"progress-bar\">\n          <span class=\"progress-bar-fill\" [ngStyle]=\"{ width: progressBarWidth + '%' }\"></span>\n        </div>\n        <div class=\"w-full progress-legend\" fxLayout=\"row\" fxLayoutAlign=\"start\">\n          <h2 class=\"mb-0  mat-title\">{{ experimentData.jobStats.finished }} /\n            {{ experimentData.jobStats.total }} jobs</h2>\n        </div>\n      </div>\n    </div>\n\n    <h2 *ngIf=\"dataSourceParams.data.length > 0\" class=\"mat-title\">Best Hyperparameter Combination</h2>\n    <h2\n      *ngIf=\"(!dataSourceParams.data || !dataSourceParams.data.length) && experimentData?.bestScore?.configList !== null\"\n      class=\"mat-title mb-0\">\n      Compression config_list\n    </h2>\n\n    <div>\n      <div class=\"table-container w-full\" *ngIf=\"dataSourceParams.data.length > 0\">\n        <table fxFill mat-table [dataSource]=\"dataSourceParams\" multiTemplateDataRows\n          (matSortChange)=\"sortParamData($event)\" matSort matSortDisableClear class=\"mat-elevation-z3 w-full\">\n          <ng-container matColumnDef=\"{{ PARAM_COLUMNS.NAME }}\">\n            <th mat-header-cell mat-sort-header *matHeaderCellDef>\n              {{ PARAM_COLUMNS.NAME }}\n            </th>\n            <td mat-cell *matCellDef=\"let element\">\n              <div *ngIf=\"element.name\" class=\"maxw-500\">{{ element.name }}</div>\n            </td>\n          </ng-container>\n          <ng-container matColumnDef=\"{{ PARAM_COLUMNS.VALUE }}\">\n            <th mat-header-cell mat-sort-header *matHeaderCellDef>\n              <strong>{{ PARAM_COLUMNS.VALUE }}</strong>\n            </th>\n            <td mat-cell *matCellDef=\"let element\">\n              <div class=\"maxw-500\"><strong><span>{{ element.value | roundNumber }}</span></strong></div>\n            </td>\n          </ng-container>\n          <ng-container matColumnDef=\"{{ PARAM_COLUMNS.RANGE }}\">\n            <th mat-header-cell mat-sort-header *matHeaderCellDef>\n              {{ PARAM_COLUMNS.RANGE }}\n            </th>\n            <td mat-cell *matCellDef=\"let element\">\n              <div class=\"maxw-500 minw-200\" fxLayout=\"row\">\n                <div>{{ element.range[0] }} to {{ element.range[1] }}</div>\n                <div *ngIf=\"experimentData.bestScore.proposer === 'sequence'\">\n                  <div *ngIf=\"element.interval\">\n                    &nbsp; by\n                    {{ element.interval }}\n                  </div>\n                  <div *ngIf=\"element.n\">\n                    &nbsp; by\n                    {{ (element.range[1] - element.range[0]) / (element.n - 1) | roundNumber }}\n                  </div>\n                  <div *ngIf=\"!element.n && !element.interval\">\n                    &nbsp; by 1\n                  </div>\n                </div>\n              </div>\n            </td>\n          </ng-container>\n          <ng-container matColumnDef=\"{{ PARAM_COLUMNS.TYPE }}\">\n            <th mat-header-cell mat-sort-header *matHeaderCellDef>\n              {{ PARAM_COLUMNS.TYPE }}\n            </th>\n            <td mat-cell *matCellDef=\"let element\">\n              <div class=\"maxw-500\" *ngIf=\"element.type\">{{ element.type }}</div>\n            </td>\n          </ng-container>\n\n          <tr mat-header-row *matHeaderRowDef=\"displayedResourceColumns; sticky: true\"></tr>\n          <tr mat-row *matRowDef=\"let row; columns: displayedResourceColumns\"></tr>\n        </table>\n      </div>\n      <mat-paginator #paginatorParams class=\"mat-elevation-z3\"\n        [style.display]=\"dataSourceParams.data.length > 0 ? 'block' : 'none'\" [pageSize]=\"pageSize\"\n        showFirstLastButtons>\n      </mat-paginator>\n    </div>\n    <div *ngIf=\"dataSourceParams.data.length === 0 && experimentData?.bestScore?.configList !== null\"\n      class=\"config-list p-3\">\n      <pre>{{ experimentData?.bestScore?.configList | json }}</pre>\n    </div>\n  </div>\n</div>\n\n<ng-template #showDetailsDialog let-data>\n  <div class=\"info-dialog-title w-full p-3 bg-primary text-white\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\n    <div class=\"w-full\">Details</div>\n    <button mat-icon-button matDialogClose>\n      <mat-icon>close</mat-icon>\n    </button>\n  </div>\n  <div class=\"info-dialog-content m-3\">\n    <div fxLayout=\"row\">\n      <div class=\"p-2 minw-200 details-header\">SETTING</div>\n      <div class=\"p-2 details-header\">VALUE</div>\n    </div>\n    <hr>\n    <div *ngIf=\"experimentData.experiment?.experimentName\" fxLayout=\"row\">\n      <div class=\"p-2 minw-200\">Name</div>\n      <div class=\"p-2\">{{ experimentData.experiment?.experimentName }}</div>\n    </div>\n    <div *ngIf=\"experimentData.experiment?.scriptName\" fxLayout=\"row\">\n      <div class=\"p-2 minw-200\">Script</div>\n      <div class=\"p-2\">{{ experimentData.experiment?.scriptName }}</div>\n    </div>\n    <div *ngIf=\"experimentData.experiment?.eid\" fxLayout=\"row\">\n      <div class=\"p-2 minw-200\">Experiment ID:</div>\n      <div class=\"p-2\">{{ experimentData.experiment?.eid }}</div>\n    </div>\n    <div *ngIf=\"experimentData.experiment?.startTime\" fxLayout=\"row\">\n      <div class=\"p-2 minw-200\">Started at:</div>\n      <div class=\"p-2\">{{ experimentData.experiment?.startTime * 1000 | date: 'medium' }}\n      </div>\n    </div>\n    <div *ngIf=\"experimentData.experiment?.endTime\" fxLayout=\"row\">\n      <div class=\"p-2 minw-200\">Ended at:</div>\n      <div class=\"p-2\">{{ experimentData.experiment?.endTime * 1000 | date: 'medium' }}</div>\n    </div>\n    <div *ngIf=\"experimentData.experiment?.expConfig?.proposer\" fxLayout=\"row\">\n      <div class=\"p-2 minw-200\">Technique:</div>\n      <div class=\"p-2\">{{ experimentData.experiment?.expConfig?.proposer }}</div>\n    </div>\n    <div *ngIf=\"experimentData.experiment?.expConfig?.workingdir\" fxLayout=\"row\">\n      <div class=\"p-2 minw-200\">Working Directory:</div>\n      <div class=\"p-2\">{{ experimentData.experiment?.expConfig?.workingdir }}</div>\n    </div>\n  </div>\n</ng-template>"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/overview/overview.component.scss",
    "content": ".table-col {\n  /* margin-top: -1px;\n   margin-left: -1px;*/\n  text-align: center;\n}\n\n.progress-legend {\n  position: absolute;\n  width: 90% !important;\n  color: #000000 !important;\n}\n\n.hyper-table {\n  overflow-y: auto;\n  max-height: 300px;\n}\n\n.details-header {\n  font-size: 18px;\n  font-stretch: normal;\n  font-style: normal;\n  line-height: 1.22;\n  letter-spacing: normal;\n  text-align: left;\n}\n\n.minw-200 {\n  min-width: 200px;\n}\n\n.maxw-500 {\n  max-width: 500px;\n}\n\n.config-list {\n  overflow: auto !important;\n  max-height: 500px !important;\n}"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/overview/overview.component.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { NO_ERRORS_SCHEMA } from '@angular/core';\nimport { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { RouterTestingModule } from '@angular/router/testing';\nimport { NgxsModule } from '@ngxs/store';\nimport { SharedModule } from '../../../../shared/shared.module';\n\nimport { OverviewComponent } from './overview.component';\n\ndescribe('OverviewComponent', () => {\n  let component: OverviewComponent;\n  let fixture: ComponentFixture<OverviewComponent>;\n\n  beforeEach(async () => {\n    await TestBed.configureTestingModule({\n      schemas: [NO_ERRORS_SCHEMA],\n      imports: [NgxsModule.forRoot(), RouterTestingModule, SharedModule, BrowserAnimationsModule],\n      declarations: [OverviewComponent],\n    }).compileComponents();\n  });\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(OverviewComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/overview/overview.component.ts",
    "content": "/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable @typescript-eslint/unbound-method */\nimport { Component, OnInit, OnDestroy, ChangeDetectionStrategy, ChangeDetectorRef, TemplateRef } from '@angular/core';\nimport { Store, Select } from '@ngxs/store';\nimport { SelectedExperiment, Hyperparameters, BestScoreParam } from '../../store/experiment-state.model';\nimport { ExperimentState } from '../../store/experiment.store';\nimport { Observable, Subscription, interval } from 'rxjs';\nimport { ProgressBarWidthPipe } from '../../../../shared/pipes';\nimport { Experiment } from '../../../../models/experiment.model';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { GetExperiment, GetHyperparameters, RefreshInterval } from '../../store/experiment.actions';\nimport { SnackbarService, UtilsService } from '../../../../shared/services';\nimport { startWith, map } from 'rxjs/operators';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { ViewChild } from '@angular/core';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort, Sort } from '@angular/material/sort';\nimport { MatDialog } from '@angular/material/dialog';\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'app-overview',\n  templateUrl: './overview.component.html',\n  styleUrls: ['./overview.component.scss'],\n})\nexport class OverviewComponent implements OnInit, OnDestroy {\n  @Select(ExperimentState.selectedExperiment) experiment$: Observable<SelectedExperiment>;\n  @Select(ExperimentState.experiments) experiments$: Observable<Experiment[]>;\n  @Select(ExperimentState.hyperparameters) hyperparameters$: Observable<Hyperparameters>;\n  @Select(ExperimentState.refreshInterval) refreshInterval$: Observable<number>;\n  @Select(ExperimentState.refreshingInterval) refreshingInterval$: Observable<boolean>;\n  @Select(ExperimentState.loadingExperiment) loadingExperiment$: Observable<boolean>;\n\n  @ViewChild('paginatorParams', { static: true }) paginatorParams: MatPaginator;\n  @ViewChild(MatSort, { static: true }) sortParams: MatSort;\n  @ViewChild('showDetailsDialog', { static: true }) showDetailsDialog: TemplateRef<any>;\n\n  pageSize = 8;\n  subscriptions: Subscription;\n  experimentId: number;\n  experimentData: SelectedExperiment;\n  experimentIndex: number;\n  progressBarWidth: number;\n  refreshInterval: number;\n  refreshIntervalSubscription: Subscription;\n  showDetails = false;\n  showDetailsDialogRef;\n\n  readonly PARAM_COLUMNS = {\n    NAME: 'NAME',\n    VALUE: 'BEST VALUE',\n    RANGE: 'RANGE',\n    TYPE: 'TYPE',\n  };\n  displayedResourceColumns = [\n    this.PARAM_COLUMNS.NAME,\n    this.PARAM_COLUMNS.VALUE,\n    this.PARAM_COLUMNS.RANGE,\n    this.PARAM_COLUMNS.TYPE,\n  ];\n  dataSourceParams = new MatTableDataSource<BestScoreParam>();\n\n  constructor(\n    public dialog: MatDialog,\n    readonly store: Store,\n    readonly router: Router,\n    private route: ActivatedRoute,\n    private cdRef: ChangeDetectorRef,\n    private snackbarService: SnackbarService,\n    private utilsService: UtilsService\n  ) {}\n\n  ngOnInit(): void {\n    this.subscriptions = new Subscription();\n    this.subscriptions.add(\n      this.route?.parent?.params.subscribe((params) => {\n        this.experimentId = params['id'];\n      })\n    );\n    this.subscriptions.add(\n      this.experiment$.subscribe((experimentData: SelectedExperiment) => {\n        this.dataSourceParams.data = [];\n        this.dataSourceParams.paginator = null;\n        this.dataSourceParams.sort = null;\n        if (experimentData) {\n          this.experimentData = experimentData;\n          if (\n            experimentData &&\n            experimentData.bestScore &&\n            experimentData.bestScore.params &&\n            experimentData.bestScore.params.length\n          ) {\n            this.dataSourceParams.data = experimentData.bestScore.params.slice();\n            this.dataSourceParams.paginator = this.paginatorParams;\n            this.dataSourceParams.sort = this.sortParams;\n            this.cdRef.markForCheck();\n          }\n          const progressBarWidthPipe = new ProgressBarWidthPipe();\n          this.progressBarWidth = progressBarWidthPipe.transform({\n            value: this.experimentData.jobStats.finished,\n            maxValue: this.experimentData.jobStats.total,\n          });\n          this.cdRef.markForCheck();\n        }\n      })\n    );\n    this.subscriptions.add(\n      this.refreshInterval$.subscribe((rInterval: number) => {\n        if (rInterval) {\n          if (this.refreshIntervalSubscription && rInterval !== this.refreshInterval) {\n            this.refreshIntervalSubscription.unsubscribe();\n          }\n          this.refreshInterval = rInterval;\n          this.refreshIntervalSubscription = this.refreshIntervalData().subscribe();\n        }\n      })\n    );\n    this.subscriptions.add(\n      this.refreshingInterval$.subscribe((refreshingInterval: boolean) => {\n        if (refreshingInterval) {\n          this.refreshData();\n          const message = 'Data refreshed!';\n          this.snackbarService.success(message);\n          this.store.dispatch(new RefreshInterval(false));\n        }\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.unsubscribe();\n    this.refreshIntervalSubscription.unsubscribe();\n  }\n\n  openDetails(): void {\n    this.showDetailsDialogRef = this.dialog.open(this.showDetailsDialog, {\n      width: '650px',\n      data: null,\n      panelClass: 'info-modal',\n    });\n    this.subscriptions.add(this.showDetailsDialogRef.afterClosed().subscribe());\n  }\n\n  async toggleExperiment(id: number): Promise<void> {\n    if (!id) {\n      return;\n    }\n    this.experimentId = id;\n    this.store.dispatch(new GetExperiment(this.experimentId));\n    this.store.dispatch(new GetHyperparameters(this.experimentId));\n    await this.router.navigate([`experiment/${id}/overview`]);\n  }\n\n  refreshIntervalData(): Observable<any> {\n    if (this.refreshInterval) {\n      return interval(this.refreshInterval * 1000).pipe(\n        startWith(0),\n        map(() => {\n          console.log('Fetching overview data...');\n          this.refreshData();\n        })\n      );\n    }\n  }\n\n  refreshData(): void {\n    if (this.experimentId) {\n      this.store.dispatch(new GetExperiment(this.experimentId));\n      this.store.dispatch(new GetHyperparameters(this.experimentId));\n    }\n  }\n\n  sortParamData(sort: Sort): boolean {\n    const data = this.experimentData?.bestScore?.params.slice();\n    if (!sort.active || sort.direction === '') {\n      this.dataSourceParams.data = data;\n      return;\n    }\n\n    this.dataSourceParams.data = data.sort((a, b) => {\n      const isAsc = sort.direction === 'asc';\n      switch (sort.active) {\n        case this.PARAM_COLUMNS.NAME:\n          return this.utilsService.compare(a.name, b.name, isAsc);\n        case this.PARAM_COLUMNS.RANGE:\n          return this.utilsService.compare(a.range, b.range, isAsc);\n        case this.PARAM_COLUMNS.VALUE:\n          return this.utilsService.compare(a.value, b.value, isAsc);\n        case this.PARAM_COLUMNS.TYPE:\n          return this.utilsService.compare(a.type, b.type, isAsc);\n        default:\n          return 0;\n      }\n    });\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/pcg/pcg.component.html",
    "content": "<h1 class=\"mat-headline\">\n  The Hyperparameter Interaction Graph (HIG) helps you understand the interplay between different hyperparameters\n</h1>\n\n<div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"mt-5\">\n  <app-experiment-dropdown\n    fxFlex.gt-md=\"50\"\n    fxFlex=\"100\"\n    class=\"mr-3\"\n    [experimentId]=\"experimentId\"\n    (toggleExperiment)=\"toggleExperiment($event)\"\n  >\n  </app-experiment-dropdown>\n  <mat-form-field\n    appearance=\"outline\"\n    class=\"w-full\"\n    *ngIf=\"hyperParamTraces && hyperParamTraces.length > 0 && hyperParamTraces !== null\"\n  >\n    <mat-label>Select axes</mat-label>\n    <mat-select (selectionChange)=\"selectHyperparams($event)\" multiple [(ngModel)]=\"selected\">\n      <mat-option *ngFor=\"let col of hyperParamTraces\" [value]=\"col\">\n        {{ col.label }}\n      </mat-option>\n    </mat-select>\n  </mat-form-field>\n</div>\n\n<div *ngIf=\"hyperParamTraces?.length\" class=\"w-full mb-4 mr-3\" fxLayoutAlign=\"space-between center\">\n  <button matTooltip=\"Current view will be downloaded\" mat-raised-button (click)=\"downloadGraph()\">\n    {{ 'Download graph png' | uppercase }}\n  </button>\n  <button fxFlexAlign=\"end\" mat-raised-button [matMenuTriggerFor]=\"helpMenu\">\n    <mat-icon class=\"mr-3\">help_outline</mat-icon>\n    {{ 'interaction guide' | uppercase }}\n  </button>\n</div>\n\n<div class=\"w-full\">\n  <plotly-plot\n    class=\"w-full chart\"\n    *ngIf=\"hyperParamTraces?.length\"\n    id=\"hig\"\n    divId=\"hig\"\n    [data]=\"graph.data\"\n    [layout]=\"graph.layout\"\n    [config]=\"graph.config\"\n  ></plotly-plot>\n</div>\n<h2 *ngIf=\"!hyperParamTraces?.length && selectedExperiment\">\n  {{ selectedExperiment?.experiment?.experimentName }} does not contain any results\n</h2>\n\n<mat-menu #helpMenu=\"matMenu\" xPosition=\"before\">\n  <mat-toolbar class=\"help-menu\">\n    <div class=\"w-full\" fxLayout=\"row\" fxLayoutAlign=\"end center\">\n      <button mat-icon-button>\n        <mat-icon>close</mat-icon>\n      </button>\n    </div>\n  </mat-toolbar>\n  <mat-drawer-container class=\"help-content\" fxLayout=\"column\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"30px\">\n    <div fxLayout=\"column\" fxLayoutAlign=\"start center\" fxLayoutGap=\"30px\" class=\"p-5\">\n      <div fxLayout=\"column\" class=\"w-full\">\n        <p fxFlex=\"100\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\n          Hyperparameter Interaction Graph is richly interactive by default. Drag the lines along the axes to filter\n          regions and drag the axis names across the plot to rearrange variables. Double click on the selected axis to\n          go back to default view.\n        </p>\n        <div fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"30px\">\n          <img src=\"assets/images/js_parcoords_ex1.gif\" />\n        </div>\n      </div>\n    </div>\n  </mat-drawer-container>\n</mat-menu>\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/pcg/pcg.component.scss",
    "content": ".headers-align .mat-expansion-panel-header-title,\n.headers-align .mat-expansion-panel-header-description {\n  flex-basis: 0;\n}\n\n.headers-align .mat-expansion-panel-header-description {\n  justify-content: space-between;\n  align-items: center;\n}\n\n.headers-align .mat-form-field + .mat-form-field {\n  margin-left: 8px;\n}\n\nmat-select {\n  font-size: 18px !important;\n  padding-top: 10px !important;\n}\n\n.chart {\n  height: 540px;\n}"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/pcg/pcg.component.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { NO_ERRORS_SCHEMA } from '@angular/core';\nimport { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { RouterTestingModule } from '@angular/router/testing';\nimport { NgxsModule } from '@ngxs/store';\nimport { SharedModule } from '../../../../shared/shared.module';\n\nimport { PcgComponent } from './pcg.component';\n\ndescribe('PcgComponent', () => {\n  let component: PcgComponent;\n  let fixture: ComponentFixture<PcgComponent>;\n\n  beforeEach(async () => {\n    await TestBed.configureTestingModule({\n      schemas: [NO_ERRORS_SCHEMA],\n      imports: [NgxsModule.forRoot(), RouterTestingModule, SharedModule],\n      declarations: [PcgComponent],\n    }).compileComponents();\n  });\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(PcgComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/containers/pcg/pcg.component.ts",
    "content": "/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unused-expressions */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/unbound-method */\nimport { Component, OnInit, ChangeDetectorRef, ChangeDetectionStrategy, OnDestroy } from '@angular/core';\nimport { Store, Select } from '@ngxs/store';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Subscription, Observable } from 'rxjs';\nimport { GetExperiment, GetMetricVsHparams } from '../../store/experiment.actions';\nimport { ExperimentState } from '../../store/experiment.store';\nimport { AppState } from '../../../../appStore/app.store';\nimport { Theme } from '../../../../appStore/app-state.model';\nimport { ParallelCoordinates, SelectedExperiment } from '../../store/experiment-state.model';\nimport { MatSelectChange } from '@angular/material/select';\nimport { PlotlyService } from 'angular-plotly.js';\nimport { TruncatePipe } from '../../../../shared/pipes/truncate.pipe';\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'app-pcg',\n  templateUrl: './pcg.component.html',\n  styleUrls: ['./pcg.component.scss'],\n})\nexport class PcgComponent implements OnInit, OnDestroy {\n  subscriptions: Subscription;\n  experimentId: number;\n  initialTraces: { label: string; values: [] }[];\n  selected: { label: string; values: [] }[];\n  hyperParamTraces: { label: string; values: [] }[];\n  initialAllowedParams = 3;\n  selectedExperiment: SelectedExperiment;\n\n  @Select(AppState.theme) theme$: Observable<Theme>;\n  @Select(ExperimentState.metricsVsHparams) metricsVsHparams$: Observable<any>;\n  @Select(ExperimentState.selectedExperiment) selectedExperiment$: Observable<SelectedExperiment>;\n  @Select(ExperimentState.parallelCoordinatesTrace) parallelCoordinatesTrace$: Observable<any>;\n  @Select(ExperimentState.sidenavOpen) sidenavOpen$: Observable<boolean>;\n\n  theme: Theme;\n  public graph = {\n    data: [],\n    layout: {\n      height: 540,\n      title: 'Hyperparameter Interaction Graph',\n      showlegend: true,\n    },\n    config: {\n      responsive: true,\n      displayModeBar: false,\n      scrollZoom: true,\n    },\n  };\n\n  width = window.innerWidth;\n  height = window.innerHeight;\n\n  showInteractionGuide = false;\n\n  constructor(\n    readonly store: Store,\n    private route: ActivatedRoute,\n    private cdRef: ChangeDetectorRef,\n    private plotlyService: PlotlyService,\n    readonly router: Router\n  ) {}\n\n  ngOnInit(): void {\n    this.subscriptions = new Subscription();\n    this.subscriptions.add(\n      this.route?.parent?.params.subscribe((params) => {\n        this.experimentId = params['id'];\n        if (this.experimentId) {\n          this.store.dispatch(new GetExperiment(this.experimentId));\n          this.store.dispatch(new GetMetricVsHparams(this.experimentId));\n        }\n      })\n    );\n    this.subscriptions.add(\n      this.selectedExperiment$.subscribe((experiment: SelectedExperiment) => {\n        if (experiment) {\n          this.selectedExperiment = experiment;\n          this.cdRef.markForCheck();\n        }\n      })\n    );\n    this.subscriptions.add(\n      this.sidenavOpen$.subscribe((sidenavOpen: boolean) => {\n        if (sidenavOpen !== null && sidenavOpen !== undefined && this.theme) {\n          window.dispatchEvent(new Event('resize'));\n          // window.resizeTo(this.width / 2, this.height / 2);\n          // window.resizeTo(\n          //   window.screen.availWidth / 2,\n          //   window.screen.availHeight / 2\n          // );\n          this.cdRef.detectChanges();\n          this.cdRef.markForCheck();\n        }\n      })\n    );\n    this.subscriptions.add(\n      this.parallelCoordinatesTrace$.subscribe((traces: ParallelCoordinates) => {\n        if (traces) {\n          const truncate = new TruncatePipe();\n          this.hyperParamTraces = traces.dimensions.slice();\n          this.hyperParamTraces.map((trace) => {\n            trace.label = truncate.transform(trace.label, [30, '...']);\n          });\n          this.initialTraces = [];\n          this.selected = [];\n          const foundIndex = this.hyperParamTraces.findIndex((item) => item.label.toLowerCase() === 'score');\n          if (foundIndex !== -1) {\n            this.initialTraces.push(this.hyperParamTraces[foundIndex]);\n            this.hyperParamTraces.splice(foundIndex, 1);\n            for (let i = 0; i < this.initialAllowedParams; i++) {\n              if (this.hyperParamTraces[i]) {\n                // this.initialTraces.push(this.hyperParamTraces[i]);\n                this.selected.push(this.hyperParamTraces[i]);\n              }\n            }\n            // this.hyperParamTraces.splice(0, this.initialAllowedParams);\n          }\n          const initialTraces: ParallelCoordinates = {\n            line: traces.line,\n            type: traces.type,\n            dimensions: [...this.selected, ...this.initialTraces],\n          };\n          this.graph.data = [initialTraces];\n          this.cdRef.markForCheck();\n        } else {\n          this.hyperParamTraces = [];\n          this.initialTraces = [];\n          this.selected = [];\n          this.graph.data = [];\n          this.cdRef.markForCheck();\n        }\n      })\n    );\n    this.subscriptions.add(\n      this.theme$.subscribe((theme: Theme) => {\n        if (theme) {\n          this.theme = theme;\n          theme.name === 'dark'\n            ? (this.graph.layout = this.changeDarkModeChart())\n            : (this.graph.layout = this.changeLightModeChart());\n          this.cdRef.markForCheck();\n        }\n      })\n    );\n    // this.plotlyService.getPlotly().Fx.hover('test', ['HEEEELOOO']);\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.unsubscribe();\n  }\n\n  downloadGraph(): void {\n    const graphDiv = this.plotlyService.getInstanceByDivId('hig');\n    this.plotlyService\n      .getPlotly()\n      .downloadImage(graphDiv, { format: 'png', width: '1000', height: '450', filename: 'hig' });\n  }\n\n  selectHyperparams(event: MatSelectChange): void {\n    if (!event) {\n      return;\n    }\n    this.selected = event.value;\n    this.graph.data[0].dimensions = [...this.selected, ...this.initialTraces];\n    this.cdRef.markForCheck();\n  }\n\n  cleanData(): void {\n    this.graph.data = [];\n    this.initialTraces = [];\n    this.hyperParamTraces = [];\n    this.cdRef.markForCheck();\n  }\n\n  async toggleExperiment(id: number): Promise<void> {\n    if (!id) {\n      return;\n    }\n    this.experimentId = id;\n    this.cleanData();\n    this.store.dispatch(new GetExperiment(this.experimentId));\n    this.store.dispatch(new GetMetricVsHparams(this.experimentId));\n    await this.router.navigate([`experiment/${id}/hig`]);\n  }\n\n  changeLightModeChart(): any {\n    return {\n      height: 540,\n      title: 'Hyperparameter Interaction Graph',\n      showlegend: true,\n      hovermode: 'closest',\n    };\n  }\n\n  changeDarkModeChart(): any {\n    return {\n      hovermode: 'closest',\n      plot_bgcolor: '#424242',\n      paper_bgcolor: '#424242',\n      height: 540,\n      title: {\n        text: 'Hyperparameter Interaction Graph',\n        font: {\n          color: '#ffffff',\n        },\n      },\n      showlegend: true,\n      // legend: {\n      //   color: '#ffffff',\n      //   font: {\n      //     color: '#ffffff',\n      //   },\n      // },\n      // gridcolor: '#ffffff',\n      // tickfont: {\n      //   color: '#ffffff',\n      // },\n      // xaxis: {\n      //   showgrid: true,\n      //   zeroline: true,\n      //   showline: true,\n      //   mirror: 'ticks',\n      //   gridcolor: '#bdbdbd',\n      //   gridwidth: 2,\n      //   zerolinecolor: '#969696',\n      //   zerolinewidth: 4,\n      //   linecolor: '#636363',\n      //   linewidth: 6,\n      // },\n      // yaxis: {\n      //   showgrid: true,\n      //   zeroline: true,\n      //   showline: true,\n      //   mirror: 'ticks',\n      //   gridcolor: '#bdbdbd',\n      //   gridwidth: 2,\n      //   zerolinecolor: '#969696',\n      //   zerolinewidth: 4,\n      //   linecolor: '#636363',\n      //   linewidth: 6,\n      // },\n    };\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/experiment-routing.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport * as fromContainers from './containers';\nimport { DBGuard } from '../../guards/db.guard';\n\nconst routes: Routes = [\n  {\n    path: '',\n    canActivate: [DBGuard],\n    component: fromContainers.MainComponent,\n    children: [\n      { path: '', redirectTo: 'list', pathMatch: 'full' },\n      {\n        path: 'list',\n        component: fromContainers.ListComponent,\n      },\n      {\n        path: 'notification',\n        component: fromContainers.NotificationComponent,\n      },\n      { path: 'create', component: fromContainers.CreateExperimentComponent },\n      { path: 'create/:id', component: fromContainers.CreateExperimentComponent },\n      {\n        path: 'experiment/:id',\n        component: fromContainers.ExperimentComponent,\n        children: [\n          { path: '', redirectTo: 'overview', pathMatch: 'full' },\n          { path: 'overview', component: fromContainers.OverviewComponent },\n          { path: 'job-status', component: fromContainers.JobStatusComponent },\n          { path: 'hig', component: fromContainers.PcgComponent },\n          { path: 'multi', component: fromContainers.MultiExpCompComponent },\n          { path: 'interm', component: fromContainers.IntermResultsComponent },\n        ],\n      },\n    ],\n  },\n  { path: 'initialize', component: fromContainers.InitializeComponent },\n];\n@NgModule({\n  imports: [RouterModule.forChild(routes)],\n  exports: [RouterModule],\n})\nexport class ExperimentRoutingModule {}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/experiment.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ExperimentRoutingModule } from './experiment-routing.module';\nimport { SharedModule } from '../../shared/shared.module';\n\nimport { NgxsModule } from '@ngxs/store';\nimport { ExperimentState } from './store/experiment.store';\nimport { ExperimentService } from './services/experiment.service';\n\nimport * as fromContainers from './containers';\nimport * as fromComponents from './components';\nimport { MatTableExporterModule } from 'mat-table-exporter';\n\n@NgModule({\n  declarations: [...fromContainers.containers, ...fromComponents.components],\n  imports: [\n    CommonModule,\n    ExperimentRoutingModule,\n    SharedModule,\n    NgxsModule.forFeature([ExperimentState]),\n    MatTableExporterModule,\n  ],\n  providers: [ExperimentService],\n})\nexport class ExperimentModule {}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/services/experiment.service.ts",
    "content": "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { ApiService } from '../../../shared/services/api.service';\nimport { HelperService } from '../../../shared/services/helper.service';\nimport {\n  JobStatusSortCriteria,\n  StartExperimentModel,\n  SetupDB,\n  CreateExperimentModel,\n} from '../store/experiment-state.model';\n\nconst endpoint = 'experiments';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ExperimentService {\n  constructor(private apiService: ApiService, private helperService: HelperService) {}\n\n  getExperiments<T>(): Observable<T[]> {\n    return this.apiService.get<T[]>(`${endpoint}`);\n  }\n\n  getExperiment<T>(id: number): Observable<T> {\n    if (!id) {\n      return;\n    }\n    return this.apiService.get<T>(`${endpoint}/${id}`);\n  }\n\n  getHyperparameters<T>(id: number): Observable<T> {\n    if (!id) {\n      return;\n    }\n    return this.apiService.get<T>(`hps_space?eid=${id}`);\n  }\n\n  getInterimResults<T>(): Observable<T> {\n    return this.apiService.get<T>(`interm_res`);\n  }\n\n  getExperimentInterimResults<T>(eid: number, label?: string): Observable<T> {\n    if (!eid) {\n      return;\n    }\n    const labelQuery = label && label !== 'score' ? `/${label}` : '';\n    return this.apiService.get<T>(`interm_res/${eid}${labelQuery}`);\n  }\n\n  getJobsStatus<T>(eid: number, sortCriteria: JobStatusSortCriteria): Observable<T> {\n    if (!eid || sortCriteria === null || sortCriteria === undefined) {\n      return;\n    }\n    return this.apiService.get<T>(`job_status?sortby=${sortCriteria.sortby}&asc=${sortCriteria.asc}&eid=${eid}`);\n  }\n\n  getMetricsVsHparams<T>(id: number): Observable<T> {\n    if (!id) {\n      return;\n    }\n    return this.apiService.get<T>(`metrics_vs_hparams?eid=${id}`);\n  }\n\n  getExperimentHistoryBest<T>(id: number, n: number, sortby: string, label?: string): Observable<T> {\n    if (!id || !n || !sortby) {\n      return;\n    }\n    const labelQuery = label && label !== 'score' ? `/${label}` : '';\n    return this.apiService.get<T>(`experiment_history_best/${id}${labelQuery}?n=${n}&sortby=${sortby}`);\n  }\n\n  getAllExperimentHistoryBest<T>(n: number, sortby: string, label?: string): Observable<T> {\n    if (!n) {\n      return;\n    }\n    const labelQuery = label && label !== 'score' ? `/${label}` : '';\n    const sort = sortby ? `&sortby=${sortby}` : '';\n    return this.apiService.get<T>(`experiment_history_best${labelQuery}?n=${n}${sort}`);\n  }\n\n  startExperiment<T>(data: StartExperimentModel): Observable<T> {\n    if (!data) {\n      return;\n    }\n    return this.apiService.post<T>(`start_experiment`, { ...data });\n  }\n\n  stopExperiment<T>(eid: number): Observable<T> {\n    if (!eid) {\n      return;\n    }\n    return this.apiService.post<T>(`stop_experiment`, { eid });\n  }\n\n  setupDB<T>(params: SetupDB): Observable<T> {\n    if (!params) {\n      return;\n    }\n    return this.apiService.post<T>(`setup`, { ...params });\n  }\n\n  createExperiment<T>(data: CreateExperimentModel): Observable<T> {\n    if (!data) {\n      return;\n    }\n    return this.apiService.post<T>(`create_experiment`, data);\n  }\n\n  refreshAll<T>(): Observable<T> {\n    return this.apiService.post<T>(`refresh_all`);\n  }\n\n  deleteExperiment(eid: number): Observable<any> {\n    if (!eid) {\n      return;\n    }\n    return this.apiService.delete(`experiment/${eid}`);\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/store/experiment-state.model.ts",
    "content": "/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { EXPERIMENT_VIEW_TYPE } from '../../../models/enum/experiment-view-type.enum';\nimport { Experiment } from '../../../models/experiment.model';\nimport { NavItem } from '../../../models/nav-items.model';\nimport { Resource } from '../../../models/resource.model';\n\nexport interface ExperimentStateModel {\n  experiments: Experiment[];\n  experimentsMultiplier: number;\n  resources: Resource[];\n  selectedExperiment: SelectedExperiment;\n  hyperparameters: Hyperparameters;\n  jobStatusSortCriteria: JobStatusSortCriteria;\n  jobs: JobStatus[];\n  jobsGraphData?: PlotlyScatterGraph;\n  jobsMultipleResults: {\n    labels: string[];\n    selectedLabel: string;\n  };\n  firstValidJobNumber: number;\n  jobsOptimizationGraphData?: PlotlyScatterGraph;\n  jobsMultiplier: number;\n  metricsVsHparams: any;\n  parallelCoordinatesTrace: ParallelCoordinates;\n  refreshIntervalOptions: number[];\n  refreshInterval: number;\n  refreshingInterval: boolean;\n  sidenavOpen: boolean;\n  experimentViewType: EXPERIMENT_VIEW_TYPE;\n  intermResults: IntermediateExperiment[];\n  interimExperiment: IntermediateExperiment;\n  navItems: NavItem[];\n  loadingExperiment: boolean;\n  loadingAllExperiments: boolean;\n  loadingIntermResults: boolean;\n}\n\nexport interface SelectedExperiment {\n  bestScore: BestScore;\n  experiment: Experiment;\n  jobStats: {\n    finished: number;\n    unfinished: number;\n    total: number;\n  };\n}\n\nexport interface BestScore {\n  proposer?: string;\n  score: number;\n  params?: BestScoreParam[];\n  configList?: any;\n}\n\nexport interface BestScoreParam {\n  name: string;\n  range: any;\n  type: string;\n  value: number;\n  interval: number;\n  n: number;\n}\n\nexport interface Hyperparameters {\n  numSamples: number;\n  parameters: any;\n  proposer: string;\n}\n\nexport interface JobStatusSortCriteria {\n  sortby: string;\n  asc: 0 | 1;\n}\n\nexport interface JobStatus {\n  eid: number;\n  endTime: number;\n  jid: number;\n  jobConfig: any;\n  rid: number;\n  score: any;\n  startTime: number;\n  status: string;\n  tableData?: any;\n  tableFullData?: any;\n  tableHyperParams?: any;\n}\n\nexport interface PlotlyScatterGraph {\n  x: number[];\n  y: number[];\n  type: string;\n  mode: string;\n}\n\nexport interface ExperimentHistory {\n  jid: number;\n  jobConfig: any;\n  score: any;\n}\n\nexport interface StartExperimentModel {\n  eid: number;\n}\n\nexport interface SetupDB {\n  work_dir: string;\n  ini_path: string;\n  overwrite: boolean;\n  cpu?: number;\n  aws_file?: string;\n  gpu_file?: string;\n  node_file?: string;\n}\n\nexport interface CreateExperimentModel {\n  json_config_body: any;\n  cwd: string;\n}\n\nexport interface ParallelCoordinates {\n  dimensions: { label: string; values: [] }[];\n  line: any;\n  type: string;\n}\n\nexport interface IntermediateExperiment {\n  eid: number;\n  name: string;\n  scriptName: string;\n  jobs?: IntermediateJob[];\n  multResLabels?: string[];\n  selectedLabel?: string;\n}\n\nexport interface IntermediateJob {\n  jid: number;\n  interimResults: IntermediateResult[];\n}\n\nexport interface IntermediateResult {\n  irid: number;\n  receiveTime: number;\n  score: number;\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/store/experiment.actions.ts",
    "content": "import { EXPERIMENT_VIEW_TYPE } from '../../../models/enum/experiment-view-type.enum';\nimport {\n  JobStatusSortCriteria,\n  StartExperimentModel,\n  SetupDB,\n  CreateExperimentModel,\n  IntermediateExperiment,\n} from './experiment-state.model';\n\nexport class GetExperiments {\n  static readonly type = '[Experiment] Getting list of experiments';\n}\n\nexport class GetExperiment {\n  static readonly type = '[Experiment] Get experiment by id';\n  constructor(public payload: number) {}\n}\n\nexport class GetHyperparameters {\n  static readonly type = '[Experiment] Get hyperparameters by experiment id';\n  constructor(public payload: number) {}\n}\n\nexport class GetJobStatus {\n  static readonly type = '[Experiment] Get job status by experiment id';\n  constructor(\n    public payload: {\n      eid: number;\n      sortCriteria?: JobStatusSortCriteria;\n    }\n  ) {}\n}\n\nexport class GetExperimentHistory {\n  static readonly type = '[Experiment] Get experiment history best by experiment id';\n  constructor(\n    public payload: {\n      eid: number;\n      n?: number;\n      sortby?: string;\n    }\n  ) {}\n}\n\n// export class GetExperimentsHistoryBest {\n//   static readonly type = '[Experiment] Get experiments history best';\n//   constructor(public payload?: number) { }\n// }\n\nexport class GetMetricVsHparams {\n  static readonly type = '[Experiment] Get metrics vs hyperparameters by experiment id';\n  constructor(public payload: number) {}\n}\n\nexport class GetInterimResults {\n  static readonly type = '[Experiment] Get intermediate results';\n}\n\nexport class SetInterimExperiment {\n  static readonly type = '[Experiment] Set intermediate experiment';\n  constructor(public payload: IntermediateExperiment) {}\n}\n\nexport class GetExperimentInterimResults {\n  static readonly type = '[Experiment] Get experiment intermediate results';\n  constructor(public payload: { eid: number; label?: string }) {}\n}\n\nexport class SetRefreshInterval {\n  static readonly type = '[Config] Set refresh interval value';\n  constructor(public payload: number) {}\n}\n\nexport class RefreshInterval {\n  static readonly type = '[Config] Refresh interval';\n  constructor(public payload: boolean) {}\n}\n\nexport class StartExperiment {\n  static readonly type = '[Experiment] Start experiment by id';\n  constructor(public payload: StartExperimentModel) {}\n}\n\nexport class StopExperiment {\n  static readonly type = '[Experiment] Stop experiment by id';\n  constructor(public payload: number) {}\n}\n\nexport class SetupDatabase {\n  static readonly type = '[Database] Initialize setup database';\n  constructor(public payload: SetupDB) {}\n}\n\nexport class CreateExperiment {\n  static readonly type = '[Experiment] Create experiment';\n  constructor(public payload: CreateExperimentModel) {}\n}\n\nexport class ToggleSideNav {\n  static readonly type = '[Sidenav] Toggle sidenav';\n}\n\nexport class RefreshAll {\n  static readonly type = '[Experiment] Refresh all';\n}\n\nexport class DeleteExperiment {\n  static readonly type = '[Experiment] Delete experiment';\n  constructor(public payload: number) {}\n}\n\nexport class SetExperimentDisplayView {\n  static readonly type = '[Experiment] Set experiment display view';\n  constructor(public payload: EXPERIMENT_VIEW_TYPE) {}\n}\n\nexport class ChangeJobsGraphForLabel {\n  static readonly type = '[Experiment] Change job status graph for multiple labels';\n  constructor(public payload: string) {}\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/experiment/store/experiment.store.ts",
    "content": "/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable @typescript-eslint/restrict-template-expressions */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { Injectable } from '@angular/core';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { throwError, Observable } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { State, Action, StateContext, Selector, Store } from '@ngxs/store';\nimport { Navigate } from '@ngxs/router-plugin';\nimport { HelperService } from '../../../shared/services/helper.service';\nimport { SnackbarService } from '../../../shared/services/snackbar.service';\nimport {\n  GetExperiments,\n  GetExperiment,\n  GetHyperparameters,\n  GetJobStatus,\n  GetMetricVsHparams,\n  SetRefreshInterval,\n  GetExperimentHistory,\n  StartExperiment,\n  StopExperiment,\n  SetupDatabase,\n  CreateExperiment,\n  RefreshInterval,\n  ToggleSideNav,\n  RefreshAll,\n  GetInterimResults,\n  DeleteExperiment,\n  SetExperimentDisplayView,\n  SetInterimExperiment,\n  GetExperimentInterimResults,\n  ChangeJobsGraphForLabel,\n} from './experiment.actions';\nimport {\n  ExperimentStateModel,\n  SelectedExperiment,\n  Hyperparameters,\n  JobStatus,\n  PlotlyScatterGraph,\n  ParallelCoordinates,\n  IntermediateExperiment,\n  IntermediateJob,\n} from './experiment-state.model';\nimport { ExperimentService } from '../services/experiment.service';\nimport { Experiment } from '../../../models/experiment.model';\nimport { Resource } from '../../../models/resource.model';\nimport { UtilsService } from '../../../shared/services';\nimport { FirstLetterUppercasePipe } from '../../../shared/pipes';\nimport { AddNotification, GetDatabaseLink } from '../../../appStore/app.actions';\nimport { NavItem } from '../../../models/nav-items.model';\nimport { NAV_ITEMS } from '../../../models/data/nav-items';\nimport { AppNotification } from '../../../appStore/app-state.model';\nimport { NOTIFICATION_TYPE } from '../../../models/enum/notification-type.enum';\nimport { EXPERIMENT_VIEW_TYPE } from '../../../models/enum/experiment-view-type.enum';\nimport { TruncatePipe } from '../../../shared/pipes/truncate.pipe';\n\n@State<ExperimentStateModel>({\n  name: 'experiment',\n  defaults: {\n    experiments: [],\n    firstValidJobNumber: null,\n    intermResults: null,\n    interimExperiment: null,\n    experimentsMultiplier: 1,\n    resources: [],\n    selectedExperiment: null,\n    hyperparameters: null,\n    jobStatusSortCriteria: {\n      sortby: 'jid',\n      asc: 1,\n    },\n    jobs: [],\n    jobsGraphData: null,\n    jobsOptimizationGraphData: null,\n    jobsMultipleResults: {\n      labels: [],\n      selectedLabel: null,\n    },\n    jobsMultiplier: 1,\n    metricsVsHparams: null,\n    parallelCoordinatesTrace: null,\n    refreshIntervalOptions: [5, 10, 30, 60],\n    refreshInterval: 60,\n    refreshingInterval: false,\n    sidenavOpen:\n      localStorage.getItem('sidenavOpen') !== null && localStorage.getItem('sidenavOpen') !== undefined\n        ? JSON.parse(localStorage.getItem('sidenavOpen'))\n        : true,\n    navItems: NAV_ITEMS,\n    loadingExperiment: false,\n    loadingAllExperiments: false,\n    loadingIntermResults: false,\n    experimentViewType:\n      (localStorage.getItem('experimentViewType') as EXPERIMENT_VIEW_TYPE) || EXPERIMENT_VIEW_TYPE.LIST,\n  },\n})\n@Injectable()\nexport class ExperimentState {\n  constructor(\n    readonly service: ExperimentService,\n    readonly helperService: HelperService,\n    readonly snackbarService: SnackbarService,\n    readonly utilsService: UtilsService,\n    readonly store: Store\n  ) {}\n\n  @Selector()\n  static loadingExperiment(state: ExperimentStateModel): boolean {\n    return state.loadingExperiment;\n  }\n\n  @Selector()\n  static loadingAllExperiments(state: ExperimentStateModel): boolean {\n    return state.loadingAllExperiments;\n  }\n\n  @Selector()\n  static loadingIntermResults(state: ExperimentStateModel): boolean {\n    return state.loadingIntermResults;\n  }\n\n  @Selector()\n  static experimentsMultiplier(state: ExperimentStateModel): number {\n    return state.experimentsMultiplier;\n  }\n\n  @Selector()\n  static refreshInterval(state: ExperimentStateModel): number {\n    return state.refreshInterval;\n  }\n\n  @Selector()\n  static refreshIntervalOptions(state: ExperimentStateModel): number[] {\n    return state.refreshIntervalOptions;\n  }\n\n  @Selector()\n  static refreshingInterval(state: ExperimentStateModel): boolean {\n    return state.refreshingInterval;\n  }\n\n  @Selector()\n  static experiments(state: ExperimentStateModel): Experiment[] {\n    return state.experiments;\n  }\n\n  @Selector()\n  static selectedExperiment(state: ExperimentStateModel): SelectedExperiment {\n    return state.selectedExperiment;\n  }\n\n  @Selector()\n  static resources(state: ExperimentStateModel): Resource[] {\n    return state.resources;\n  }\n\n  @Selector()\n  static hyperparameters(state: ExperimentStateModel): Hyperparameters {\n    return state.hyperparameters;\n  }\n\n  @Selector()\n  static metricsVsHparams(state: ExperimentStateModel): any {\n    return state.metricsVsHparams;\n  }\n\n  @Selector()\n  static parallelCoordinatesTrace(state: ExperimentStateModel): ParallelCoordinates {\n    return state.parallelCoordinatesTrace;\n  }\n\n  @Selector()\n  static jobs(state: ExperimentStateModel): JobStatus[] {\n    return state.jobs;\n  }\n\n  @Selector()\n  static jobMultipleResulsLabels(state: ExperimentStateModel): string[] {\n    return state.jobsMultipleResults.labels;\n  }\n\n  @Selector()\n  static jobMultipleResulsSelectedLabel(state: ExperimentStateModel): string {\n    return state.jobsMultipleResults.selectedLabel;\n  }\n\n  @Selector()\n  static jobsGraphData(state: ExperimentStateModel): PlotlyScatterGraph {\n    return state.jobsGraphData;\n  }\n\n  @Selector()\n  static jobsOptimizationGraphData(state: ExperimentStateModel): PlotlyScatterGraph {\n    return state.jobsOptimizationGraphData;\n  }\n\n  @Selector()\n  static sidenavOpen(state: ExperimentStateModel): boolean {\n    return state.sidenavOpen;\n  }\n\n  @Selector()\n  static intermResults(state: ExperimentStateModel): IntermediateExperiment[] | null {\n    return state.intermResults;\n  }\n\n  @Selector()\n  static interimExperiment(state: ExperimentStateModel): IntermediateExperiment {\n    return state.interimExperiment;\n  }\n\n  @Selector()\n  static interimExperimentJobs(state: ExperimentStateModel): IntermediateJob[] {\n    return state.interimExperiment.jobs;\n  }\n\n  @Selector()\n  static interimExperimentMultResLabels(state: ExperimentStateModel): string[] {\n    return state.interimExperiment.multResLabels;\n  }\n\n  @Selector()\n  static interimExperimentSelectedLabel(state: ExperimentStateModel): string {\n    return state.interimExperiment.selectedLabel;\n  }\n\n  @Selector()\n  static navItems(state: ExperimentStateModel): NavItem[] {\n    return state.navItems;\n  }\n\n  @Selector()\n  static experimentViewType(state: ExperimentStateModel): EXPERIMENT_VIEW_TYPE {\n    return state.experimentViewType;\n  }\n\n  @Action(ToggleSideNav)\n  toggleSideNav(ctx: StateContext<ExperimentStateModel>): Observable<any> {\n    const state = ctx.getState();\n    localStorage.setItem('sidenavOpen', JSON.stringify(!state.sidenavOpen));\n    ctx.patchState({\n      sidenavOpen: !state.sidenavOpen,\n    });\n    return;\n  }\n\n  @Action(SetRefreshInterval)\n  setRefreshInterval(ctx: StateContext<ExperimentStateModel>, { payload }: SetRefreshInterval): Observable<any> {\n    if (!payload) {\n      return;\n    }\n    ctx.patchState({\n      refreshInterval: payload,\n    });\n    return;\n  }\n\n  @Action(SetExperimentDisplayView)\n  setExperimentDisplayView(\n    ctx: StateContext<ExperimentStateModel>,\n    { payload }: SetExperimentDisplayView\n  ): Observable<any> {\n    if (!payload) {\n      return;\n    }\n    localStorage.setItem('experimentViewType', payload);\n    ctx.patchState({\n      experimentViewType: payload,\n    });\n    return;\n  }\n\n  @Action(RefreshInterval)\n  refreshInterval(ctx: StateContext<ExperimentStateModel>, { payload }: RefreshInterval): Observable<any> {\n    ctx.patchState({\n      refreshingInterval: payload,\n    });\n    return;\n  }\n\n  @Action(GetExperiments)\n  getExperiments(ctx: StateContext<ExperimentStateModel>): Observable<any> {\n    ctx.patchState({\n      loadingAllExperiments: true,\n    });\n    const currentExperiments = ctx.getState().experiments;\n    return this.service.getExperiments().pipe(\n      catchError((err: HttpErrorResponse) => {\n        ctx.patchState({\n          loadingAllExperiments: false,\n        });\n        const notification: AppNotification = {\n          type: NOTIFICATION_TYPE.ERROR,\n          receivedAt: new Date().getTime(),\n          message: this.utilsService.formatErrorMessage(err),\n        };\n        this.store.dispatch(new AddNotification(notification));\n        this.snackbarService.error(this.utilsService.formatErrorMessage(err));\n        return throwError(err);\n      }),\n      map((res: any) => {\n        if (res) {\n          const experiments = [];\n          res.experiment.map((experiment: any) => {\n            const newExperiment = {\n              ...(this.utilsService.keysToCamel(experiment) as Experiment),\n              scores: JSON.parse(experiment['scores']),\n              jobs: JSON.parse(experiment['jobs']),\n              expConfigDetails: JSON.parse(experiment['exp_config']),\n            };\n            if (currentExperiments.length) {\n              currentExperiments.map((currentExperiment: Experiment) => {\n                if (currentExperiment.eid === newExperiment.eid && currentExperiment.status !== newExperiment.status) {\n                  const message = `Experiment ${newExperiment.experimentName} changed status from ${currentExperiment.status} to ${newExperiment.status}`;\n                  const notification: AppNotification = {\n                    type: NOTIFICATION_TYPE.INFO,\n                    receivedAt: new Date().getTime(),\n                    message,\n                  };\n                  this.store.dispatch(new AddNotification(notification));\n                  this.snackbarService.info(message);\n                }\n              });\n            }\n            return experiments.push(newExperiment);\n          });\n          const sortedExperiments = experiments.slice().sort((a, b) => this.utilsService.compare(a.eid, b.eid, false));\n          // console.log('sortedExperiments: ', sortedExperiments);\n          ctx.patchState({\n            experiments: sortedExperiments,\n            resources: res.resource || [],\n            loadingAllExperiments: false,\n          });\n        }\n      })\n    );\n  }\n\n  @Action(GetExperiment)\n  getExperiment(ctx: StateContext<ExperimentStateModel>, { payload }: GetExperiment): Observable<any> {\n    if (!payload) {\n      return;\n    }\n    ctx.patchState({\n      loadingExperiment: true,\n      selectedExperiment: null,\n    });\n    return this.service.getExperiment(payload).pipe(\n      catchError((err: HttpErrorResponse) => {\n        ctx.patchState({\n          loadingExperiment: false,\n        });\n        const notification: AppNotification = {\n          type: NOTIFICATION_TYPE.ERROR,\n          receivedAt: new Date().getTime(),\n          message: this.utilsService.formatErrorMessage(err),\n        };\n        this.store.dispatch(new AddNotification(notification));\n        this.snackbarService.error(this.utilsService.formatErrorMessage(err));\n        return throwError(err);\n      }),\n      map((res: any) => {\n        if (res) {\n          const experimentRes = this.utilsService.keysToCamel(res) as SelectedExperiment;\n          const selectedExperiment: SelectedExperiment = {\n            bestScore: experimentRes.bestScore,\n            experiment: experimentRes.experiment,\n            jobStats: experimentRes.jobStats,\n          };\n          // const sortedScoreParams = {};\n          // Object.keys(selectedExperiment.bestScore)\n          //   .sort()\n          //   .forEach((key) => (sortedScoreParams[key] = selectedExperiment.bestScore[key]));\n          // selectedExperiment.bestScore = sortedScoreParams;\n          if (selectedExperiment.bestScore && selectedExperiment.bestScore.configList) {\n            const configList = JSON.parse(selectedExperiment.bestScore.configList);\n            selectedExperiment.bestScore.configList = configList;\n          }\n          const config = JSON.parse(selectedExperiment.experiment.expConfig);\n          selectedExperiment.experiment.expConfig = config;\n          ctx.patchState({\n            selectedExperiment,\n            loadingExperiment: false,\n          });\n        }\n      })\n    );\n  }\n\n  @Action(GetHyperparameters)\n  getHyperparameters(ctx: StateContext<ExperimentStateModel>, { payload }: GetHyperparameters): Observable<any> {\n    if (!payload) {\n      return;\n    }\n    return this.service.getHyperparameters(payload).pipe(\n      catchError((err: HttpErrorResponse) => {\n        const notification: AppNotification = {\n          type: NOTIFICATION_TYPE.ERROR,\n          receivedAt: new Date().getTime(),\n          message: this.utilsService.formatErrorMessage(err),\n        };\n        this.store.dispatch(new AddNotification(notification));\n        this.snackbarService.error(this.utilsService.formatErrorMessage(err));\n        return throwError(err);\n      }),\n      map((res: any) => {\n        if (res) {\n          const hyperparamsRes = this.utilsService.keysToCamel(res['exp_config']) as Hyperparameters;\n          const params = JSON.parse(hyperparamsRes.parameters);\n          hyperparamsRes.parameters = params.sort((a, b) => this.utilsService.compare(a.name, b.name, true));\n          ctx.patchState({\n            hyperparameters: hyperparamsRes,\n          });\n        }\n      })\n    );\n  }\n\n  @Action(GetJobStatus)\n  getJobStatus(ctx: StateContext<ExperimentStateModel>, { payload }: GetJobStatus): Observable<any> {\n    const state = ctx.getState();\n    const selectedLabel = state.jobsMultipleResults.selectedLabel || 'score';\n\n    if (!payload.eid) {\n      return;\n    }\n    const sortCriteria = payload.sortCriteria || state.jobStatusSortCriteria;\n    return this.service.getJobsStatus(payload.eid, sortCriteria).pipe(\n      catchError((err: HttpErrorResponse) => {\n        const notification: AppNotification = {\n          type: NOTIFICATION_TYPE.ERROR,\n          receivedAt: new Date().getTime(),\n          message: this.utilsService.formatErrorMessage(err),\n        };\n        this.store.dispatch(new AddNotification(notification));\n        this.snackbarService.error(this.utilsService.formatErrorMessage(err));\n        return throwError(err);\n      }),\n      map((res: any) => {\n        if (res && res['job']) {\n          let labels = [];\n          const flu = new FirstLetterUppercasePipe();\n          if (res['mult_res_labels']) {\n            labels = res['mult_res_labels'];\n            labels.push('score');\n          }\n          const jobs = [];\n          const jobsGraphData = {\n            x: [],\n            y: [],\n            hovertext: [],\n            hoverinfo: 'text',\n            type: 'scatter',\n            mode: 'markers',\n            name: flu.transform(selectedLabel),\n            line: {\n              color: '#3DDF7E',\n            },\n          };\n          const truncate = new TruncatePipe();\n          let hoverText: string;\n          let jobNumber = 1;\n          let firstValidJobNumber = null;\n          res['job'].map((job: any) => {\n            const newJob = this.utilsService.keysToCamel(job) as JobStatus;\n            newJob.tableData = {};\n            newJob.tableHyperParams = {};\n            newJob.tableFullData = {};\n            newJob.tableData['job ID'] = newJob.jid;\n            newJob.tableFullData['job ID'] = newJob.jid;\n            newJob.tableData['resource ID'] = newJob.rid;\n            newJob.tableFullData['resource ID'] = newJob.rid;\n            newJob.tableData['status'] = flu.transform(newJob.status);\n            newJob.tableFullData['status'] = flu.transform(newJob.status);\n            newJob.tableData['score'] = newJob.score;\n            newJob.tableFullData['score'] = newJob.score;\n            newJob.tableData['start time'] = newJob.startTime;\n            newJob.tableFullData['start time'] = newJob.startTime;\n            newJob.tableData['end time'] = newJob.endTime;\n            newJob.tableFullData['end time'] = newJob.endTime;\n            if (selectedLabel) {\n              if (job[selectedLabel] !== null && job[selectedLabel] !== undefined) {\n                hoverText = `${flu.transform(selectedLabel)} ${job[selectedLabel]}<br>`;\n                hoverText += `Job ID: ${job.jid}<br>`;\n                jobsGraphData.x.push(jobNumber);\n                jobsGraphData.y.push(job[selectedLabel]);\n                if (firstValidJobNumber === null && this.utilsService.isNumber(job[selectedLabel])) {\n                  firstValidJobNumber = jobNumber;\n                }\n                jobNumber++;\n              }\n            } else if (newJob.score !== null && newJob.score !== undefined) {\n              hoverText = `${selectedLabel}: ${newJob.score}<br>`;\n              hoverText += `Job ID: ${newJob.jid}<br>`;\n              jobsGraphData.x.push(jobNumber);\n              jobsGraphData.y.push(newJob.score);\n              if (firstValidJobNumber === null && this.utilsService.isNumber(newJob.score)) {\n                firstValidJobNumber = jobNumber;\n              }\n              jobNumber++;\n            }\n            const config = JSON.parse(job['job_config']);\n            newJob.jobConfig = config;\n            Object.entries(newJob.jobConfig).map((object) => {\n              newJob.tableFullData[`${object[0]}`] = object[1];\n              newJob.tableHyperParams[`${object[0]}`] = object[1];\n              if (newJob.score !== null && newJob.score !== undefined) {\n                hoverText += `${flu.transform(truncate.transform(object[0], [100, '...']))}: ${object[1]}<br>`;\n              }\n            });\n            if (labels.length) {\n              labels.map((label: string) => {\n                if (\n                  label !== 'score' &&\n                  !Object.keys(newJob.tableFullData).includes(label) &&\n                  !Object.keys(newJob.tableHyperParams).includes(label)\n                ) {\n                  newJob.tableFullData[label] = newJob[label];\n                  newJob.tableHyperParams[label] = newJob[label];\n                }\n              });\n            }\n            if (newJob.score !== null && newJob.score !== undefined) {\n              jobsGraphData.hovertext.push(hoverText);\n            }\n            return jobs.push(newJob);\n          });\n          ctx.patchState({\n            jobs,\n            jobsGraphData,\n            firstValidJobNumber,\n            jobsMultipleResults: {\n              ...state.jobsMultipleResults,\n              labels,\n              selectedLabel: selectedLabel || (labels && labels.length ? labels[labels.length - 1] : null),\n            },\n          });\n          return;\n        }\n      })\n    );\n  }\n\n  @Action(ChangeJobsGraphForLabel)\n  changeJobsGraphForLabel(\n    ctx: StateContext<ExperimentStateModel>,\n    { payload }: ChangeJobsGraphForLabel\n  ): Observable<any> {\n    const state = ctx.getState();\n    const flu = new FirstLetterUppercasePipe();\n    if (!payload) {\n      return;\n    }\n    const jobs = state.jobs;\n    const jobsGraphData = {\n      x: [],\n      y: [],\n      hovertext: [],\n      hoverinfo: 'text',\n      type: 'scatter',\n      mode: 'markers',\n      name: flu.transform(payload),\n      line: {\n        color: '#3DDF7E',\n      },\n    };\n    const truncate = new TruncatePipe();\n    let hoverText: string;\n    let jobNumber = 1;\n    let firstValidJobNumber = null;\n    jobs.map((job) => {\n      if (job[payload] !== null && job[payload] !== undefined) {\n        hoverText = `${flu.transform(payload)} ${job[payload]}<br>`;\n        hoverText += `Job ID: ${job.jid}<br>`;\n        jobsGraphData.x.push(jobNumber);\n        jobsGraphData.y.push(job[payload]);\n        if (firstValidJobNumber === null && this.utilsService.isNumber(job[payload])) {\n          firstValidJobNumber = jobNumber;\n        }\n        jobNumber++;\n      }\n      Object.entries(job.jobConfig).map((object) => {\n        if (job[payload] !== null && job[payload] !== undefined) {\n          hoverText += `${flu.transform(truncate.transform(object[0], [100, '...']))}: ${object[1]}<br>`;\n        }\n      });\n      if (job[payload] !== null && job[payload] !== undefined) {\n        jobsGraphData.hovertext.push(hoverText);\n      }\n      ctx.patchState({\n        jobsGraphData,\n        firstValidJobNumber,\n        jobsMultipleResults: {\n          ...state.jobsMultipleResults,\n          selectedLabel: payload,\n        },\n      });\n      return;\n    });\n  }\n\n  @Action(GetExperimentHistory)\n  getExperimentHistory(ctx: StateContext<ExperimentStateModel>, { payload }: GetExperimentHistory): Observable<any> {\n    const state = ctx.getState();\n    if (!payload) {\n      return;\n    }\n    const multiplier = payload.n || state.jobsMultiplier;\n    const sortBy = payload.sortby || 'jid';\n    const label = state.jobsMultipleResults.selectedLabel;\n    return this.service.getExperimentHistoryBest(payload.eid, multiplier, sortBy, label).pipe(\n      catchError((err: HttpErrorResponse) => {\n        const notification: AppNotification = {\n          type: NOTIFICATION_TYPE.ERROR,\n          receivedAt: new Date().getTime(),\n          message: this.utilsService.formatErrorMessage(err),\n        };\n        this.store.dispatch(new AddNotification(notification));\n        this.snackbarService.error(this.utilsService.formatErrorMessage(err));\n        return throwError(err);\n      }),\n      map((res: any) => {\n        if (res && res['experiment_history_best'] && res['experiment_history_best'].length) {\n          const jobsOptimizationGraphData = {\n            x: [],\n            y: [],\n            hovertext: [],\n            hoverinfo: 'text',\n            type: 'scatter',\n            mode: 'lines+markers',\n            name: 'Best Results',\n            line: {\n              color: '#f44336',\n            },\n          };\n          const flu = new FirstLetterUppercasePipe();\n          const truncate = new TruncatePipe();\n          let hoverText;\n          const optimizationX = [];\n          const selectedLabel = state.jobsMultipleResults.selectedLabel || 'score';\n\n          let jobNumber = state.firstValidJobNumber;\n          res['experiment_history_best'].map((history) => {\n            hoverText = `${flu.transform(selectedLabel)}: ${history['score']}<br>`;\n            hoverText += `Job ID: ${history['jid']}<br>`;\n            // jobsOptimizationGraphData.x.push(multiplier * (index + 1));\n            if (history['score'] !== null && history['score'] !== undefined) {\n              optimizationX.push(jobNumber);\n              jobsOptimizationGraphData.y.push(history['score']);\n              jobNumber++;\n            }\n            const config = JSON.parse(history['job_config']);\n            Object.entries(config).map((object) => {\n              hoverText += `${flu.transform(truncate.transform(object[0], [100, '...']))}: ${object[1]}<br>`;\n            });\n            jobsOptimizationGraphData.hovertext.push(hoverText);\n          });\n          // for (let index = 0; index < state.firstValidJobNumber; index++) {\n          //   optimizationX.pop();\n          // }\n          if (state.jobsGraphData && state.jobsGraphData.x.length) {\n            const lastElementFromOptimization = optimizationX[optimizationX.length - 1];\n            const jobsXData = optimizationX.slice();\n            const foundIndex = jobsXData.findIndex((item) => item === lastElementFromOptimization);\n            if (foundIndex !== -1) {\n              const everythingAfterNumberInOptimization = jobsXData.slice(foundIndex);\n              const positionInJobXData = jobsXData.indexOf(lastElementFromOptimization);\n              jobsXData.splice(positionInJobXData);\n              const newXData = jobsXData.concat(everythingAfterNumberInOptimization);\n              jobsOptimizationGraphData.x = newXData;\n            } else {\n              jobsOptimizationGraphData.x = optimizationX;\n            }\n          } else {\n            jobsOptimizationGraphData.x = optimizationX;\n          }\n          ctx.patchState({\n            jobsOptimizationGraphData,\n            jobsMultiplier: multiplier,\n          });\n          return;\n        }\n      })\n    );\n  }\n\n  // @Action(GetExperimentsHistoryBest)\n  // getExperimentsHistoryBest(ctx: StateContext<ExperimentStateModel>, { payload }: GetExperimentsHistoryBest): Observable<any> {\n  //   const state = ctx.getState();\n  //   const multiplier = payload || state.experimentsMultiplier;\n  //   return this.service.getAllExperimentHistoryBest(multiplier).pipe(\n  //     catchError((err: HttpErrorResponse) => {\n  //       this.snackbarService.error(this.utilsService.formatErrorMessage(err));\n  //       return throwError(err);\n  //     }),\n  //     map((res: any) => {\n  //       if (res && res['experiment_history_best']) {\n  //         const experimentsWithHistory = state.experiments;\n  //         const history = res['experiment_history_best'];\n  //         experimentsWithHistory.map(exp => {\n  //           exp.history = [];\n  //           history[exp.eid].map(expHistory => {\n  //             const experimentHistory: ExperimentHistory = {\n  //               jid: expHistory['jid'],\n  //               jobConfig: JSON.parse(expHistory['job_config']),\n  //               score: expHistory[score'],\n  //             };\n  //             exp.history.push(experimentHistory);\n  //           });\n  //         });\n  //         ctx.patchState({\n  //           experiments: experimentsWithHistory,\n  //           experimentsMultiplier: multiplier\n  //         });\n  //       }\n  //     })\n  //   );\n  // }\n\n  @Action(GetMetricVsHparams)\n  getMetricVsHparams(ctx: StateContext<ExperimentStateModel>, { payload }: GetMetricVsHparams): Observable<any> {\n    if (!payload) {\n      return;\n    }\n    return this.service.getMetricsVsHparams(payload).pipe(\n      catchError((err: HttpErrorResponse) => {\n        const notification: AppNotification = {\n          type: NOTIFICATION_TYPE.ERROR,\n          receivedAt: new Date().getTime(),\n          message: this.utilsService.formatErrorMessage(err),\n        };\n        this.store.dispatch(new AddNotification(notification));\n        this.snackbarService.error(this.utilsService.formatErrorMessage(err));\n        return throwError(err);\n      }),\n      map((res: any) => {\n        if (res && res['metrics_vs_hparams']) {\n          const metricsVsHparams = this.utilsService.keysToCamel(res['metrics_vs_hparams']);\n          if (metricsVsHparams && metricsVsHparams.length > 0) {\n            metricsVsHparams.sort((a, b) => (a.score > b.score ? 1 : -1));\n            const dimensions = [];\n            Object.keys(metricsVsHparams[0])\n              .reverse()\n              .map((key) =>\n                dimensions.push({\n                  label: key,\n                  values: [],\n                })\n              );\n            // if (state.selectedExperiment && state.selectedExperiment.experiment.expConfig.target) {\n            //   // need to order it based on exp_config - target\n            //   console.log(state.selectedExperiment.experiment.expConfig);\n            // }\n            const colors = metricsVsHparams.map((object) => (isNaN(object.score) ? 0 : object.score));\n            metricsVsHparams.map((object) => {\n              dimensions.map((dimension) => {\n                if (dimension.label === 'score' && isNaN(object[dimension.label])) {\n                  return dimension.values.push(0);\n                }\n                return dimension.values.push(object[dimension.label]);\n              });\n            });\n            const trace: ParallelCoordinates = {\n              type: 'parcoords',\n              line: {\n                showscale: true,\n                reversescale: true,\n                colorscale: 'Jet',\n                cmin: metricsVsHparams[0].score,\n                cmax: metricsVsHparams[metricsVsHparams.length - 1].score,\n                color: colors,\n              },\n              dimensions,\n            };\n            ctx.patchState({\n              metricsVsHparams,\n              parallelCoordinatesTrace: trace,\n            });\n          } else {\n            ctx.patchState({\n              metricsVsHparams,\n              parallelCoordinatesTrace: null,\n            });\n          }\n        }\n      })\n    );\n  }\n\n  @Action(StartExperiment)\n  startExperiment(ctx: StateContext<ExperimentStateModel>, { payload }: StartExperiment): Observable<any> {\n    const state = ctx.getState();\n    if (!payload) {\n      return;\n    }\n    return this.service.startExperiment(payload).pipe(\n      tap((res: Experiment) => {\n        if (res) {\n          const experiments = state.experiments.slice();\n          let experimentRes = this.utilsService.keysToCamel(res) as Experiment;\n          experimentRes = {\n            ...experimentRes,\n            expConfigDetails: JSON.parse(experimentRes.expConfig),\n          };\n          const foundIndex = experiments.findIndex((item) => item.eid === experimentRes.eid);\n          if (foundIndex !== -1) {\n            experiments[foundIndex] = experimentRes;\n          }\n          ctx.patchState({\n            experiments,\n          });\n          const message = 'Experiment started!';\n          const notification: AppNotification = {\n            type: NOTIFICATION_TYPE.SUCCESS,\n            receivedAt: new Date().getTime(),\n            message,\n          };\n          this.store.dispatch(new AddNotification(notification));\n          this.snackbarService.success(message);\n        }\n        return;\n      }),\n      catchError((err: HttpErrorResponse) => {\n        const notification: AppNotification = {\n          type: NOTIFICATION_TYPE.ERROR,\n          receivedAt: new Date().getTime(),\n          message: this.utilsService.formatErrorMessage(err),\n        };\n        this.store.dispatch(new AddNotification(notification));\n        this.snackbarService.error(this.utilsService.formatErrorMessage(err));\n        return throwError(err);\n      })\n    );\n  }\n\n  @Action(StopExperiment)\n  stopExperiment(ctx: StateContext<ExperimentStateModel>, { payload }: StopExperiment): Observable<any> {\n    const state = ctx.getState();\n    if (!payload) {\n      return;\n    }\n    return this.service.stopExperiment(payload).pipe(\n      tap((res: Experiment) => {\n        if (res) {\n          const experiments = state.experiments.slice();\n          let experimentRes = this.utilsService.keysToCamel(res) as Experiment;\n          experimentRes = {\n            ...experimentRes,\n            expConfigDetails: JSON.parse(experimentRes.expConfig),\n          };\n          const foundIndex = experiments.findIndex((item) => item.eid === experimentRes.eid);\n          if (foundIndex !== -1) {\n            experiments[foundIndex] = experimentRes;\n          }\n          ctx.patchState({\n            experiments,\n          });\n          const message = 'Experiment stopped!';\n          const notification: AppNotification = {\n            type: NOTIFICATION_TYPE.SUCCESS,\n            receivedAt: new Date().getTime(),\n            message,\n          };\n          this.store.dispatch(new AddNotification(notification));\n          this.snackbarService.success(message);\n          return;\n        }\n      }),\n      catchError((err: HttpErrorResponse) => {\n        const notification: AppNotification = {\n          type: NOTIFICATION_TYPE.ERROR,\n          receivedAt: new Date().getTime(),\n          message: this.utilsService.formatErrorMessage(err),\n        };\n        this.store.dispatch(new AddNotification(notification));\n        this.snackbarService.error(this.utilsService.formatErrorMessage(err));\n        return throwError(err);\n      })\n    );\n  }\n\n  @Action(SetupDatabase)\n  setupDatabase(ctx: StateContext<ExperimentStateModel>, { payload }: SetupDatabase): Observable<any> {\n    if (!payload) {\n      return;\n    }\n    return this.service.setupDB(payload).pipe(\n      tap((res) => {\n        if (res) {\n          this.snackbarService.success('Setup completed');\n          this.store.dispatch(new GetDatabaseLink()).subscribe(() => {\n            this.store.dispatch(new Navigate(['/list']));\n          });\n        }\n        return;\n      }),\n      catchError((err: HttpErrorResponse) => {\n        const notification: AppNotification = {\n          type: NOTIFICATION_TYPE.ERROR,\n          receivedAt: new Date().getTime(),\n          message: this.utilsService.formatErrorMessage(err),\n        };\n        this.store.dispatch(new AddNotification(notification));\n        this.snackbarService.error(this.utilsService.formatErrorMessage(err));\n        return throwError(err);\n      })\n    );\n  }\n\n  @Action(GetInterimResults)\n  getInterimResults(ctx: StateContext<ExperimentStateModel>): Observable<any> {\n    const state = ctx.getState();\n    ctx.patchState({\n      loadingIntermResults: true,\n    });\n    return this.service.getInterimResults().pipe(\n      tap((intermResults: IntermediateExperiment[]) => {\n        if (intermResults && intermResults.length) {\n          ctx.patchState({\n            intermResults,\n            loadingIntermResults: false,\n          });\n        } else {\n          const navItems = state.navItems.slice();\n          const foundIndex = navItems.findIndex((el: NavItem) => el.route === 'interm');\n          if (foundIndex !== -1) {\n            navItems[foundIndex].disabled = true;\n          }\n          ctx.patchState({\n            navItems,\n            loadingIntermResults: false,\n          });\n        }\n      }),\n      catchError((err: HttpErrorResponse) => {\n        ctx.patchState({\n          loadingIntermResults: false,\n        });\n        const notification: AppNotification = {\n          type: NOTIFICATION_TYPE.ERROR,\n          receivedAt: new Date().getTime(),\n          message: this.utilsService.formatErrorMessage(err),\n        };\n        this.store.dispatch(new AddNotification(notification));\n        this.snackbarService.error(this.utilsService.formatErrorMessage(err));\n        return throwError(err);\n      })\n    );\n  }\n\n  @Action(GetExperimentInterimResults)\n  getExperimentInterimResults(\n    ctx: StateContext<ExperimentStateModel>,\n    { payload }: GetExperimentInterimResults\n  ): Observable<any> {\n    if (!payload) {\n      return;\n    }\n    const state = ctx.getState();\n    const selectedLabel = payload.label || state.interimExperiment.selectedLabel;\n    if (state.intermResults && state.intermResults.length) {\n      return this.service.getExperimentInterimResults(payload.eid, selectedLabel).pipe(\n        tap((exp: IntermediateExperiment) => {\n          if (exp) {\n            const interimExperiment = exp;\n            if (interimExperiment.multResLabels && interimExperiment.multResLabels.length) {\n              interimExperiment.multResLabels.push('score');\n            }\n            ctx.patchState({\n              interimExperiment: {\n                ...interimExperiment,\n                selectedLabel:\n                  selectedLabel ||\n                  (interimExperiment.multResLabels && interimExperiment.multResLabels.length\n                    ? interimExperiment.multResLabels[interimExperiment.multResLabels.length - 1]\n                    : null),\n              },\n            });\n          }\n        }),\n        catchError((err: HttpErrorResponse) => {\n          const notification: AppNotification = {\n            type: NOTIFICATION_TYPE.ERROR,\n            receivedAt: new Date().getTime(),\n            message: this.utilsService.formatErrorMessage(err),\n          };\n          this.store.dispatch(new AddNotification(notification));\n          this.snackbarService.error(this.utilsService.formatErrorMessage(err));\n          return throwError(err);\n        })\n      );\n    }\n  }\n\n  @Action(SetInterimExperiment)\n  setInterimExperiment(ctx: StateContext<ExperimentStateModel>, { payload }: SetInterimExperiment): void {\n    if (!payload) {\n      return;\n    }\n    ctx.patchState({\n      interimExperiment: payload,\n    });\n  }\n\n  @Action(CreateExperiment)\n  createExperiment(ctx: StateContext<ExperimentStateModel>, { payload }: CreateExperiment): Observable<any> {\n    if (!payload) {\n      return;\n    }\n    return this.service.createExperiment(payload).pipe(\n      tap((res) => {\n        if (res) {\n          const message = 'Experiment created!';\n          const notification: AppNotification = {\n            type: NOTIFICATION_TYPE.SUCCESS,\n            receivedAt: new Date().getTime(),\n            message,\n          };\n          this.store.dispatch(new AddNotification(notification));\n          this.snackbarService.success(message);\n          this.store.dispatch(new Navigate(['/list']));\n          return;\n        }\n      }),\n      catchError((err: HttpErrorResponse) => {\n        const notification: AppNotification = {\n          type: NOTIFICATION_TYPE.ERROR,\n          receivedAt: new Date().getTime(),\n          message: this.utilsService.formatErrorMessage(err),\n        };\n        this.store.dispatch(new AddNotification(notification));\n        this.snackbarService.error(this.utilsService.formatErrorMessage(err));\n        return throwError(err);\n      })\n    );\n  }\n\n  @Action(DeleteExperiment)\n  deleteExperiment(ctx: StateContext<ExperimentStateModel>, { payload }: DeleteExperiment): Observable<any> {\n    const state = ctx.getState();\n    if (!payload) {\n      return;\n    }\n    return this.service.deleteExperiment(payload).pipe(\n      tap(() => {\n        const experiments = state.experiments.slice();\n        const foundIndex = experiments.findIndex((item) => item.eid === payload);\n        if (foundIndex !== -1) {\n          experiments.splice(foundIndex, 1);\n          const message = 'Experiment deleted!';\n          const notification: AppNotification = {\n            type: NOTIFICATION_TYPE.SUCCESS,\n            receivedAt: new Date().getTime(),\n            message,\n          };\n          this.store.dispatch(new AddNotification(notification));\n          this.snackbarService.success(message);\n          ctx.patchState({\n            experiments,\n          });\n        }\n      }),\n      catchError((err: HttpErrorResponse) => {\n        const notification: AppNotification = {\n          type: NOTIFICATION_TYPE.ERROR,\n          receivedAt: new Date().getTime(),\n          message: this.utilsService.formatErrorMessage(err),\n        };\n        this.store.dispatch(new AddNotification(notification));\n        this.snackbarService.error(this.utilsService.formatErrorMessage(err));\n        return throwError(err);\n      })\n    );\n  }\n\n  @Action(RefreshAll)\n  refreshAll(ctx: StateContext<ExperimentStateModel>): Observable<any> {\n    return this.service.refreshAll().pipe(\n      catchError((err: HttpErrorResponse) => {\n        const notification: AppNotification = {\n          type: NOTIFICATION_TYPE.ERROR,\n          receivedAt: new Date().getTime(),\n          message: this.utilsService.formatErrorMessage(err),\n        };\n        this.store.dispatch(new AddNotification(notification));\n        this.snackbarService.error(this.utilsService.formatErrorMessage(err));\n        return throwError(err);\n      })\n    );\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/main-routing.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport * as fromContainers from './containers';\n\nconst routes: Routes = [\n  {\n    path: '',\n    component: fromContainers.MainComponent,\n    children: [\n      { path: '', loadChildren: () => import('./experiment/experiment.module').then((m) => m.ExperimentModule) },\n    ],\n  },\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(routes)],\n  exports: [RouterModule],\n})\nexport class MainRoutingModule {}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/main/main.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MainRoutingModule } from './main-routing.module';\nimport * as fromContainers from './containers';\nimport { SharedModule } from '../shared/shared.module';\n\n@NgModule({\n  declarations: [...fromContainers.containers],\n  imports: [CommonModule, MainRoutingModule, SharedModule],\n})\nexport class MainModule {}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/material/material.module.ts",
    "content": "import { NgModule } from '@angular/core';\n\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatGridListModule } from '@angular/material/grid-list';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatStepperModule } from '@angular/material/stepper';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\n\nexport const modules = [\n  MatButtonModule,\n  MatCheckboxModule,\n  MatFormFieldModule,\n  MatInputModule,\n  MatMenuModule,\n  MatIconModule,\n  MatDatepickerModule,\n  MatNativeDateModule,\n  MatSidenavModule,\n  MatToolbarModule,\n  MatListModule,\n  MatTabsModule,\n  MatCardModule,\n  MatSelectModule,\n  MatProgressSpinnerModule,\n  MatDialogModule,\n  MatTableModule,\n  MatSortModule,\n  MatPaginatorModule,\n  MatSnackBarModule,\n  MatSlideToggleModule,\n  MatProgressBarModule,\n  MatGridListModule,\n  MatTooltipModule,\n  MatStepperModule,\n  MatAutocompleteModule,\n  MatRadioModule,\n  MatExpansionModule,\n  MatBadgeModule,\n  MatButtonToggleModule,\n];\n\n@NgModule({\n  imports: modules,\n  exports: modules,\n})\nexport class MaterialModule {}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/models/data/custom-icons.data.ts",
    "content": "export interface Icon {\n  name: string;\n  path: string;\n}\n\nexport const CUSTOM_ICONS: Icon[] = [\n  {\n    name: 'information',\n    path: 'assets/icons/information.svg',\n  },\n  {\n    name: 'database',\n    path: 'assets/icons/database.svg',\n  },\n  {\n    name: 'copy',\n    path: 'assets/icons/copy.svg',\n  },\n  {\n    name: 'bulb',\n    path: 'assets/icons/emoji_objects-24px.svg',\n  },\n];\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/models/data/graph-colors.data.ts",
    "content": "export const GRAPH_COLORS = [\n  '#3DDF7E',\n  '#4B6FFF',\n  '#ff9800',\n  '#4caf50',\n  '#00bcd4',\n  '#673ab7',\n  '#ff5722',\n  '#607d8b',\n  '#ffeb3b',\n  '#ba68c8',\n  '#7cb342',\n  '#e64a19',\n  '#03a9f4',\n  '#3f51b5',\n  '#cddc39',\n  '#ad1457',\n  '#2e7d32',\n  '#1e88e5',\n  '#e53935',\n  '#9c27b0',\n  '#009688',\n  '#795548',\n  '#f57c00',\n  '#311b92',\n  '#ec407a',\n  '#aa00ff',\n  '#00695c',\n  '#304ffe',\n  '#f44336',\n];\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/models/data/nav-items.ts",
    "content": "import { NavItem } from '../nav-items.model';\n\nexport const NAV_ITEMS: NavItem[] = [\n  {\n    displayName: 'Overview',\n    route: 'overview',\n    iconName: 'table_chart',\n    tooltip: 'Overview',\n  },\n  {\n    displayName: 'Job Status',\n    route: 'job-status',\n    iconName: 'science',\n    tooltip: 'Job Status',\n  },\n  {\n    displayName: 'Hyperparameter Interaction Graph',\n    route: 'hig',\n    iconName: 'bar_chart',\n    tooltip: 'Hyperparameter Interaction Graph',\n  },\n  {\n    displayName: 'Intermediate Results',\n    route: 'interm',\n    iconName: 'graphic_eq',\n    tooltip: 'Intermediate Results',\n  },\n  {\n    displayName: 'Multi-Experiment Comparison',\n    route: 'multi',\n    iconName: 'stacked_line_chart',\n    tooltip: 'Multi-Experiment Comparison',\n  },\n];\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/models/data/plotly-hidden-displays.ts",
    "content": "export const PLOTLY_HIDDEN_DISPLAYS = [\n  'zoom2d',\n  'pan2d',\n  'select2d',\n  'lasso2d',\n  'zoomIn2d',\n  'zoomOut2d',\n  'autoScale2d',\n  'resetScale2d',\n  'zoom3d',\n  'pan3d',\n  'orbitRotation',\n  'tableRotation',\n  'handleDrag3d',\n  'resetCameraDefault3d',\n  'resetCameraLastSave3d',\n  'hoverClosest3d',\n  'hoverClosestCartesian',\n  'hoverCompareCartesian',\n  'zoomInGeo',\n  'zoomOutGeo',\n  'resetGeo',\n  'hoverClosestGeo',\n  'hoverClosestGl2d',\n  'hoverClosestPie',\n  'toggleHover',\n  'resetViews',\n  'sendDataToCloud',\n  'toggleSpikelines',\n  'resetViewMapbox',\n];\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/models/enum/experiment-status.enum.ts",
    "content": "/* eslint-disable no-shadow */\n/* eslint-disable @typescript-eslint/naming-convention */\nexport enum EXPERIMENT_STATUS {\n  CREATED = 'CREATED',\n  RUNNING = 'RUNNING',\n  STOPPED = 'STOPPED',\n  FINISHED = 'FINISHED',\n  FAILED = 'FAILED',\n  STOPPING = 'STOPPING',\n  REQUEST_STOP = 'REQUEST_STOP',\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/models/enum/experiment-view-type.enum.ts",
    "content": "/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable no-shadow */\nexport enum EXPERIMENT_VIEW_TYPE {\n  LIST = 'list',\n  CARD = 'card',\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/models/enum/notification-type.enum.ts",
    "content": "/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable no-shadow */\nexport enum NOTIFICATION_TYPE {\n  SUCCESS = 'Success',\n  ERROR = 'Error',\n  WARNING = 'Warning',\n  INFO = 'Info',\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/models/enum/theme-option.enum.ts",
    "content": "/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable no-shadow */\nexport enum THEME_OPTION {\n  DARK = 'dark',\n  LIGHT = 'light',\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/models/experiment.model.ts",
    "content": "/* eslint-disable @typescript-eslint/no-explicit-any */\nexport interface Experiment {\n  bestScore: number;\n  scores: number[];\n  eid: number;\n  endTime: number;\n  expConfig: any;\n  scriptName: string;\n  status: string;\n  experimentName: string;\n  startTime: number;\n  uid: number;\n  jobsFinished: number;\n  jobsUnfinished: number;\n  jobs?: any;\n  history?: ExperimentHistory[];\n  expConfigDetails: any;\n  errorMsg: string;\n  labels: string[];\n}\n\nexport interface ExperimentHistory {\n  jid: number;\n  jobConfig: any;\n  score: any;\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/models/nav-items.model.ts",
    "content": "export interface NavItem {\n  displayName: string;\n  disabled?: boolean;\n  iconName: string;\n  route?: string;\n  children?: NavItem[];\n  tooltip?: string;\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/models/progress-bar.model.ts",
    "content": "/* eslint-disable @typescript-eslint/no-explicit-any */\nexport interface ProgressBarInfo {\n  text: string;\n  value: any;\n  maxValue: any;\n  displayedValue?: any;\n  displayedMaxValue?: any;\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/models/resource.model.ts",
    "content": "export interface Resource {\n  name: string;\n  rid: number;\n  status: string;\n  type: string;\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/page-not-found/page-not-found.component.html",
    "content": "<mat-sidenav-container class=\"h-full\">\n  <div class=\"w-full h-full p-4\" fxLayout=\"column\" fxLayoutAlign=\"center center\">\n    <h1 class=\"mat-display-4 mb-3 color-warn\">404</h1>\n    <p class=\"mat-headline text-center text-primary\">\n      We can`t seem to find the page you`re looking for\n    </p>\n    <p class=\"mat-headline text-center text-primary\">\n      Click <a routerLink=\"/\" class=\"actionable color-accent\">here</a> to go back home\n    </p>\n  </div>\n</mat-sidenav-container>"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/page-not-found/page-not-found.component.scss",
    "content": ""
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/page-not-found/page-not-found.component.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { NO_ERRORS_SCHEMA } from '@angular/core';\nimport { ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { PageNotFoundComponent } from './page-not-found.component';\n\ndescribe('PageNotFoundComponent', () => {\n  let component: PageNotFoundComponent;\n  let fixture: ComponentFixture<PageNotFoundComponent>;\n\n  beforeEach(async () => {\n    await TestBed.configureTestingModule({\n      schemas: [NO_ERRORS_SCHEMA],\n      declarations: [PageNotFoundComponent],\n    }).compileComponents();\n  });\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(PageNotFoundComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/page-not-found/page-not-found.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'app-page-not-found',\n  templateUrl: './page-not-found.component.html',\n  styleUrls: ['./page-not-found.component.scss'],\n})\nexport class PageNotFoundComponent {}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/dialogs/confirm/confirm-dialog.component.html",
    "content": "<div class=\"w-full p-3 bg-primary text-white header-dialog-title\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\n  <h2 class=\"mat-title m-0\">{{ dialog?.title ? dialog.title : '' }}</h2>\n  <button mat-icon-button matDialogClose>\n    <mat-icon>close</mat-icon>\n  </button>\n</div>\n<mat-dialog-content class=\"w-full px-5 pt-5\">\n  <p class=\"font-size-14 mb-4\">{{ dialog?.content ? dialog.content : '' }}</p>\n  <p class=\"font-size-14 mt-4\" *ngIf=\"dialog?.secondLine\">{{ dialog?.secondLine }}</p>\n</mat-dialog-content>\n<mat-dialog-actions fxLayout=\"row\" fxLayoutAlign=\"end center\" fxLayoutGap=\"15px\" class=\"mb-1 px-5 pb-5\">\n  <button mat-raised-button type=\"button\" mat-dialog-close *ngIf=\"!hideCancelButton\">\n    {{ cancelButtonText }}\n  </button>\n  <button mat-raised-button color=\"primary\" type=\"button\" [mat-dialog-close]=\"true\">\n    {{ confirmButtonText }}\n  </button>\n</mat-dialog-actions>\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/dialogs/confirm/confirm-dialog.component.scss",
    "content": "mat-dialog-content {\n  margin: 0 !important;\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/dialogs/confirm/confirm-dialog.component.ts",
    "content": "/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport { Component, Inject, OnInit } from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n  templateUrl: 'confirm-dialog.component.html',\n  styleUrls: ['confirm-dialog.component.scss'],\n})\nexport class ConfirmDialogComponent implements OnInit {\n  dialog: any;\n  hideCancelButton: boolean;\n  confirmButtonText: string;\n  cancelButtonText: string;\n\n  constructor(@Inject(MAT_DIALOG_DATA) private data) {\n    this.hideCancelButton = this.data.hideCancelButton && true;\n\n    if (data.confirmButtonText) {\n      this.confirmButtonText = data.confirmButtonText;\n    } else {\n      this.confirmButtonText = this.hideCancelButton ? 'Close' : 'Confirm';\n    }\n\n    this.cancelButtonText = data.cancelButtonText || 'Cancel';\n  }\n\n  ngOnInit(): void {\n    this.dialog = this.data;\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/dialogs/index.ts",
    "content": "import { ConfirmDialogComponent } from './confirm/confirm-dialog.component';\nexport const dialogs = [ConfirmDialogComponent];\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/pipes/experiment-status.pipe.ts",
    "content": "import { Pipe, PipeTransform } from '@angular/core';\nimport { Experiment } from '../../models/experiment.model';\n\n@Pipe({ name: 'experimentStatus' })\nexport class ExperimentStatusPipe implements PipeTransform {\n  transform(experiment: Experiment): string {\n    if (experiment.startTime === -1 && experiment.endTime === -1) {\n      return 'Stopping...';\n    }\n    if (experiment.startTime && experiment.endTime && experiment.startTime !== -1 && experiment.endTime !== -1) {\n      return 'Finished';\n    } else if (experiment.startTime && experiment.startTime !== -1 && !experiment.endTime) {\n      return 'Running';\n    } else if (!experiment.startTime && !experiment.endTime) {\n      return 'Not started';\n    }\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/pipes/first-letter-uppercase/first-letter-uppercase.pipe.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { FirstLetterUppercasePipe } from './first-letter-uppercase.pipe';\n\ndescribe('FirstLetterUppercasePipe', () => {\n  it('create an instance', () => {\n    const pipe = new FirstLetterUppercasePipe();\n    expect(pipe).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/pipes/first-letter-uppercase/first-letter-uppercase.pipe.ts",
    "content": "import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'flu',\n})\nexport class FirstLetterUppercasePipe implements PipeTransform {\n  transform(text: string): string {\n    if (text.length === 0) {\n      return '';\n    }\n    return text.charAt(0).toUpperCase() + text.slice(1);\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/pipes/index.ts",
    "content": "import { MinToHourPipe } from './min-to-hour/min-to-hour.pipe';\nimport { SecToMinPipe } from './sec-to-min/sec-to-min.pipe';\nimport { RoundNumberPipe } from './roudNumber.pipe';\nimport { ProgressBarWidthPipe } from './progressBarWidth.pipe';\nimport { FirstLetterUppercasePipe } from './first-letter-uppercase/first-letter-uppercase.pipe';\nimport { ExperimentStatusPipe } from './experiment-status.pipe';\nimport { NotificationIconPipe } from './notification-icon.pipe';\nimport { TruncatePipe } from './truncate.pipe';\n\nexport const pipes = [\n  MinToHourPipe,\n  SecToMinPipe,\n  RoundNumberPipe,\n  ProgressBarWidthPipe,\n  FirstLetterUppercasePipe,\n  ExperimentStatusPipe,\n  NotificationIconPipe,\n  TruncatePipe,\n];\n\nexport * from './min-to-hour/min-to-hour.pipe';\nexport * from './sec-to-min/sec-to-min.pipe';\nexport * from './roudNumber.pipe';\nexport * from './progressBarWidth.pipe';\nexport * from './experiment-status.pipe';\nexport * from './first-letter-uppercase/first-letter-uppercase.pipe';\nexport * from './notification-icon.pipe';\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/pipes/min-to-hour/min-to-hour.pipe.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { MinToHourPipe } from './min-to-hour.pipe';\n\ndescribe('MinToHourPipe', () => {\n  it('create an instance', () => {\n    const pipe = new MinToHourPipe();\n    expect(pipe).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/pipes/min-to-hour/min-to-hour.pipe.ts",
    "content": "import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'minToHour',\n})\nexport class MinToHourPipe implements PipeTransform {\n  transform(value: number): string {\n    if (value > 0 && value > 60) {\n      const hours = Math.floor(value / 60);\n      if (value % 2 !== 0) {\n        const minutes = value - hours * 60;\n        return `${hours}h ${minutes}min`;\n      } else {\n        return `${hours}h`;\n      }\n    } else {\n      return `${value}min`;\n    }\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/pipes/notification-icon.pipe.ts",
    "content": "import { Pipe, PipeTransform } from '@angular/core';\nimport { NOTIFICATION_TYPE } from '../../models/enum/notification-type.enum';\n\n@Pipe({ name: 'notifyIcon' })\nexport class NotificationIconPipe implements PipeTransform {\n  transform(value: string): string {\n    if (!value) {\n      return;\n    }\n    switch (value) {\n      case NOTIFICATION_TYPE.ERROR:\n        return 'error';\n      case NOTIFICATION_TYPE.INFO:\n        return 'notification_important';\n      case NOTIFICATION_TYPE.SUCCESS:\n        return 'check_circle';\n      case NOTIFICATION_TYPE.WARNING:\n        return 'warning';\n    }\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/pipes/progressBarWidth.pipe.ts",
    "content": "import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'progressWidth' })\nexport class ProgressBarWidthPipe implements PipeTransform {\n  transform(info: { value: number; maxValue: number }): number {\n    if (info === null) {\n      return;\n    }\n    return Math.floor((info.value * 100) / info.maxValue);\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/pipes/roudNumber.pipe.ts",
    "content": "/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'roundNumber' })\nexport class RoundNumberPipe implements PipeTransform {\n  transform(value: any): number | string {\n    if (value === null || value === undefined) {\n      return 'no valid score so far...';\n    }\n    if (Number.isInteger(+value)) {\n      return +value;\n    }\n    return Math.round((+value + Number.EPSILON) * 10000) / 10000;\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/pipes/sec-to-min/sec-to-min.pipe.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { SecToMinPipe } from './sec-to-min.pipe';\n\ndescribe('SecToMinPipe', () => {\n  it('create an instance', () => {\n    const pipe = new SecToMinPipe();\n    expect(pipe).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/pipes/sec-to-min/sec-to-min.pipe.ts",
    "content": "import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'secToMin',\n})\nexport class SecToMinPipe implements PipeTransform {\n  transform(value: number): string {\n    if (value > 0 && value > 60) {\n      const hours = Math.floor(value / 60);\n      if (value % 2 !== 0) {\n        const minutes = value - hours * 60;\n        return `${hours}min ${minutes}s`;\n      } else {\n        return `${hours}min`;\n      }\n    } else {\n      return `${value}s`;\n    }\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/pipes/truncate.pipe.ts",
    "content": "/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/restrict-plus-operands */\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'truncate',\n})\nexport class TruncatePipe implements PipeTransform {\n  transform(value: string, args: any[]): string {\n    const limit = args.length > 0 ? parseInt(args[0], 10) : 20;\n    const trail = args.length > 1 ? args[1] : '...';\n    return value.length > limit ? value.substring(0, limit) + trail : value;\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/services/api.service.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Injectable } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nimport { environment } from '../../../environments/environment';\n\nconst apiUrl = environment.apiUrl;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ApiService {\n  constructor(private http: HttpClient, private sanitizer: DomSanitizer) {}\n\n  public get<T>(endpoint: string, params?: HttpParams | { [key: string]: any }): Observable<T> {\n    console.warn('Network: GET', `${apiUrl}/${endpoint}`, params ? params : {});\n    return this.http.get<T>(`${apiUrl}/${endpoint}`, { params });\n  }\n  public post<T>(endpoint: string, object?, params?: HttpParams | { [key: string]: any }): Observable<T> {\n    return this.http.post<T>(`${apiUrl}/${endpoint}`, object, { params });\n  }\n  public put<T>(endpoint: string, object): Observable<T> {\n    return this.http.put<T>(`${apiUrl}/${endpoint}`, object);\n  }\n  public delete<T>(endpoint: string): Observable<T> {\n    return this.http.delete<T>(`${apiUrl}/${endpoint}`);\n  }\n  public patch<T>(endpoint: string, object): Observable<T> {\n    return this.http.patch<T>(`${apiUrl}/${endpoint}`, object);\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/services/color-scheme.service.ts",
    "content": "/* eslint-disable @typescript-eslint/restrict-plus-operands */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Injectable, Renderer2, RendererFactory2 } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ColorSchemeService {\n  private renderer: Renderer2;\n  private colorScheme: string;\n  // Define prefix for clearer and more readable class names in scss files\n  private colorSchemePrefix = 'color-scheme-';\n\n  constructor(rendererFactory: RendererFactory2) {\n    // Create new renderer from renderFactory, to make it possible to use renderer2 in a service\n    this.renderer = rendererFactory.createRenderer(null, null);\n  }\n\n  _detectPrefersColorScheme(): void {\n    // Detect if prefers-color-scheme is supported\n    if (window.matchMedia('(prefers-color-scheme)').media !== 'not all') {\n      // Set colorScheme to Dark if prefers-color-scheme is dark. Otherwise set to light.\n      this.colorScheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n    } else {\n      // If the browser doesn't support prefers-color-scheme, set it as default to dark\n      this.colorScheme = 'dark';\n    }\n  }\n\n  _setColorScheme(scheme): void {\n    this.colorScheme = scheme;\n    // Save prefers-color-scheme to localStorage\n    localStorage.setItem('prefers-color', scheme);\n  }\n\n  _getColorScheme(): void {\n    // Check if any prefers-color-scheme is stored in localStorage\n    if (localStorage.getItem('prefers-color')) {\n      // Save prefers-color-scheme from localStorage\n      this.colorScheme = localStorage.getItem('prefers-color');\n    } else {\n      // If no prefers-color-scheme is stored in localStorage, try to detect OS default prefers-color-scheme\n      this._detectPrefersColorScheme();\n    }\n  }\n\n  load(): void {\n    this._getColorScheme();\n    this.renderer.addClass(document.body, this.colorSchemePrefix + this.colorScheme);\n  }\n\n  update(scheme): void {\n    this._setColorScheme(scheme);\n    // Remove the old color-scheme class\n    this.renderer.removeClass(document.body, this.colorSchemePrefix + (this.colorScheme === 'dark' ? 'light' : 'dark'));\n    // Add the new / current color-scheme class\n    this.renderer.addClass(document.body, this.colorSchemePrefix + scheme);\n  }\n\n  currentActive(): string {\n    return this.colorScheme;\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/services/helper.service.ts",
    "content": "/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HelperService {\n  constructor(private router: Router) {}\n\n  redirectTo(link: string, param?: any): void {\n    if (link) {\n      if (param) {\n        this.router.navigate([link, param]);\n      } else {\n        this.router.navigate([link]);\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/services/index.ts",
    "content": "import { UtilsService } from './utils.service';\nimport { HelperService } from './helper.service';\nimport { SnackbarService } from './snackbar.service';\nimport { ApiService } from './api.service';\n\nexport const services = [UtilsService, HelperService, SnackbarService, ApiService];\n\nexport * from './utils.service';\nexport * from './helper.service';\nexport * from './snackbar.service';\nexport * from './api.service';\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/services/snackbar.service.ts",
    "content": "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Injectable, NgZone } from '@angular/core';\nimport { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class SnackbarService {\n  private config: MatSnackBarConfig;\n\n  constructor(readonly snackBar: MatSnackBar, readonly zone: NgZone) {\n    this.initConfig();\n  }\n\n  private initConfig(): void {\n    this.config = new MatSnackBarConfig();\n    this.config.verticalPosition = 'top';\n    this.config.horizontalPosition = 'center';\n    this.config.duration = 4000;\n  }\n\n  private getConfig(className?): any {\n    this.config.panelClass = className ? [className] : undefined;\n    return this.config;\n  }\n\n  openSnackBar(message: string, action: string, className?: string): void {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const config = this.getConfig(className);\n    this.zone.run(() => {\n      this.snackBar.open(message, action, config);\n    });\n  }\n\n  error(message: string, action?: string): void {\n    this.openSnackBar(message, action, 'text-error');\n  }\n\n  success(message: string, action?: string): void {\n    this.openSnackBar(message, action, 'text-success');\n  }\n\n  warning(message: string, action?: string): void {\n    this.openSnackBar(message, action, 'text-warn');\n  }\n\n  info(message: string, action?: string): void {\n    this.openSnackBar(message, action, 'text-info');\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/services/utils.service.ts",
    "content": "/* eslint-disable prefer-rest-params */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport * as moment from 'moment';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class UtilsService {\n  dataToString(data): string {\n    const momentData = moment(data);\n    return momentData && momentData.isValid() ? momentData.format('YYYY-MM-DD') : '';\n  }\n\n  dataToStringWithFormat(data: any, format: string): string {\n    const momentData = moment(data);\n    return momentData && momentData.isValid() ? momentData.format(format) : '';\n  }\n\n  compare(a: number | string, b: number | string, isAsc: boolean): number {\n    return (a < b ? -1 : 1) * (isAsc ? 1 : -1);\n  }\n\n  toCamel(s: string): string {\n    return s.replace(/([-_][a-z])/gi, ($1) => {\n      return $1.toUpperCase().replace('-', '').replace('_', '');\n    });\n  }\n\n  keysToCamel(o: any): any {\n    if (o === Object(o) && !Array.isArray(o) && typeof o !== 'function') {\n      const n = {};\n      Object.keys(o).forEach((k) => {\n        n[this.toCamel(k)] = this.keysToCamel(o[k]);\n      });\n      return n;\n    } else if (Array.isArray(o)) {\n      return o.map((i) => {\n        return this.keysToCamel(i);\n      });\n    }\n    return o;\n  }\n\n  formatErrorMessage(err: HttpErrorResponse): string {\n    if (!err) {\n      return;\n    }\n    return err.error ? err.error.message.toString() : err.message ? err.message.toString() : err.toString();\n  }\n\n  trimString(text: string): string {\n    if (!text) {\n      return text;\n    }\n    const query = text.toString().toLocaleLowerCase().trim();\n    return query;\n  }\n\n  filterArraysBasedOnId(): any {\n    const arr = [...arguments];\n    return arr.shift().filter((y) => arr.every((x) => x.some((j) => j.id === y.id)));\n  }\n\n  isNumber(n): boolean {\n    return typeof n === 'number' && !isNaN(n) && isFinite(n);\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/shared.module.ts",
    "content": "/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MaterialModule } from '../material/material.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { HttpClientModule } from '@angular/common/http';\nimport { NgxPaginationModule } from 'ngx-pagination';\n\nimport * as fromPipes from './pipes';\nimport * as fromServices from './services';\n\nimport * as PlotlyJS from 'plotly.js/dist/plotly.js';\nimport { PlotlyModule } from 'angular-plotly.js';\nimport { dialogs } from './dialogs';\n\nPlotlyModule.plotlyjs = PlotlyJS;\n\n@NgModule({\n  imports: [CommonModule, FormsModule, ReactiveFormsModule, MaterialModule, FlexLayoutModule, HttpClientModule],\n  exports: [\n    FormsModule,\n    ReactiveFormsModule,\n    MaterialModule,\n    FlexLayoutModule,\n    HttpClientModule,\n    PlotlyModule,\n    NgxPaginationModule,\n    fromPipes.pipes,\n  ],\n  providers: [fromServices.services],\n  declarations: [...dialogs, ...fromPipes.pipes],\n})\nexport class SharedModule {}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/validators/at-least.validator.ts",
    "content": "/* eslint-disable prefer-arrow/prefer-arrow-functions */\nimport { FormGroup, ValidatorFn } from '@angular/forms';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function AtLeastValidator(minimumValues: number): ValidatorFn {\n  return (formGroup: FormGroup): { [key: string]: boolean } | null => {\n    let numberValues = 0;\n    Object.keys(formGroup.controls).forEach((key) => {\n      const control = formGroup.controls[key];\n      if (control.value) {\n        numberValues++;\n      }\n    });\n\n    if (numberValues < minimumValues) {\n      return { minimumValues: true };\n    }\n    return null;\n  };\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/app/shared/validators/index.ts",
    "content": "import { AtLeastValidator } from './at-least.validator';\n\nexport const validators = [AtLeastValidator];\n\nexport * from './at-least.validator';\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/assets/.gitkeep",
    "content": ""
  },
  {
    "path": "src/aup/dashboard/frontend/src/environments/environment.prod.ts",
    "content": "export const environment = {\n  production: true,\n  apiUrl: '/api',\n  version: '2.0',\n};\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/environments/environment.ts",
    "content": "// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n  production: false,\n  apiUrl: 'http://192.168.80.78:8904/api',\n  version: '2.0',\n};\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\n// import 'zone.js/dist/zone-error';  // Included with Angular CLI.\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\">\n  <title>AuptimizerDashboard</title>\n  <base href=\"/\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n  <link rel=\"icon\" type=\"image/x-icon\" href=\"favicon.ico\">\n  <link href=\"https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap\" rel=\"stylesheet\">\n  <link href=\"https://fonts.googleapis.com/icon?family=Material+Icons\" rel=\"stylesheet\">\n</head>\n<body class=\"mat-typography\">\n  <app-root></app-root>\n</body>\n</html>\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/main.ts",
    "content": "import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n  enableProdMode();\n}\n\nplatformBrowserDynamic()\n  .bootstrapModule(AppModule)\n  .catch((err) => console.error(err));\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/polyfills.ts",
    "content": "/**\n * This file includes polyfills needed by Angular and is loaded before the app.\n * You can add your own extra polyfills to this file.\n *\n * This file is divided into 2 sections:\n *   1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.\n *   2. Application imports. Files imported after ZoneJS that should be loaded before your main\n *      file.\n *\n * The current setup is for so-called \"evergreen\" browsers; the last versions of browsers that\n * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),\n * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.\n *\n * Learn more in https://angular.io/guide/browser-support\n */\n\n/***************************************************************************************************\n * BROWSER POLYFILLS\n */\n\n/** IE10 and IE11 requires the following for NgClass support on SVG elements */\n// import 'classlist.js';  // Run `npm install --save classlist.js`.\n\n/**\n * Web Animations `@angular/platform-browser/animations`\n * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari.\n * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0).\n */\n// import 'web-animations-js';  // Run `npm install --save web-animations-js`.\n\n/**\n * By default, zone.js will patch all possible macroTask and DomEvents\n * user can disable parts of macroTask/DomEvents patch by setting following flags\n * because those flags need to be set before `zone.js` being loaded, and webpack\n * will put import in the top of bundle, so user need to create a separate file\n * in this directory (for example: zone-flags.ts), and put the following flags\n * into that file, and then add the following code before importing zone.js.\n * import './zone-flags';\n *\n * The flags allowed in zone-flags.ts are listed here.\n *\n * The following flags will work for all browsers.\n *\n * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame\n * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick\n * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames\n *\n *  in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js\n *  with the following flag, it will bypass `zone.js` patch for IE/Edge\n *\n *  (window as any).__Zone_enable_cross_context_check = true;\n *\n */\n\n/***************************************************************************************************\n * Zone JS is required by default for Angular itself.\n */\nimport 'zone.js/dist/zone'; // Included with Angular CLI.\n\n/***************************************************************************************************\n * APPLICATION IMPORTS\n */\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/scss/_colors.scss",
    "content": "@import '~@angular/material/theming';\n\n//  http://mcg.mbitson.com/#!?mcgpalette0=%23bb8d00 - generate color palletes\n\n$dark-text: #333333;\n$light-text: #f5f5f5;\n\n$aupt-deep-purple: (\n  50: #ede7f6,\n  100: #d1c4e9,\n  200: #b39ddb,\n  300: #9575cd,\n  400: #7e57c2,\n  500: #673ab7,\n  600: #5e35b1,\n  700: #512da8,\n  800: #4527a0,\n  900: #311b92,\n  A100: #b388ff,\n  A200: #7c4dff,\n  A400: #651fff,\n  A700: #6200ea,\n  contrast: (\n    50: $dark-primary-text,\n    100: $dark-primary-text,\n    200: $dark-primary-text,\n    300: $light-primary-text,\n    400: $light-primary-text,\n    500: $light-primary-text,\n    600: $light-primary-text,\n    700: $light-primary-text,\n    800: $light-primary-text,\n    900: $light-primary-text,\n    A100: $dark-primary-text,\n    A200: $light-primary-text,\n    A400: $light-primary-text,\n    A700: $light-primary-text,\n  )\n);\n\n$aupt-indigo: (\n  50: #e8eaf6,\n  100: #c5cae9,\n  200: #9fa8da,\n  300: #7986cb,\n  400: #5c6bc0,\n  500: #3f51b5,\n  600: #3949ab,\n  700: #303f9f,\n  800: #283593,\n  900: #1a237e,\n  A100: #8c9eff,\n  A200: #536dfe,\n  A400: #3d5afe,\n  A700: #304ffe,\n  contrast: (\n    50: $dark-primary-text,\n    100: $dark-primary-text,\n    200: $dark-primary-text,\n    300: $light-primary-text,\n    400: $light-primary-text,\n    500: $light-primary-text,\n    600: $light-primary-text,\n    700: $light-primary-text,\n    800: $light-primary-text,\n    900: $light-primary-text,\n    A100: $dark-primary-text,\n    A200: $light-primary-text,\n    A400: $light-primary-text,\n    A700: $light-primary-text,\n  )\n);\n\n$aupt-pink: (\n  50: #fce4ec,\n  100: #f8bbd0,\n  200: #f48fb1,\n  300: #f06292,\n  400: #ec407a,\n  500: #e91e63,\n  600: #d81b60,\n  700: #c2185b,\n  800: #ad1457,\n  900: #880e4f,\n  A100: #ff80ab,\n  A200: #ff4081,\n  A400: #f50057,\n  A700: #c51162,\n  contrast: (\n    50: $dark-primary-text,\n    100: $dark-primary-text,\n    200: $dark-primary-text,\n    300: $dark-primary-text,\n    400: $dark-primary-text,\n    500: $light-primary-text,\n    600: $light-primary-text,\n    700: $light-primary-text,\n    800: $light-primary-text,\n    900: $light-primary-text,\n    A100: $dark-primary-text,\n    A200: $light-primary-text,\n    A400: $light-primary-text,\n    A700: $light-primary-text,\n  )\n);\n\n$aupt-green: (\n  50: #E8FBF0,\n  100: #C5F5D8,\n  200: #9EEFBF,\n  300: #77E9A5,\n  400: #5AE491,\n  500: #3DDF7E,\n  600: #37DB76,\n  700: #2FD76B,\n  800: #27D261,\n  900: #1ACA4E,\n  A100: #FEFFFE,\n  A200: #CBFFD9,\n  A400: #98FFB3,\n  A700: #7FFFA1,\n  contrast: (\n    50: $dark-primary-text,\n    100: $dark-primary-text,\n    200: $dark-primary-text,\n    300: $dark-primary-text,\n    400: $dark-primary-text,\n    500: $light-primary-text,\n    600: $light-primary-text,\n    700: $light-primary-text,\n    800: $light-primary-text,\n    900: $light-primary-text,\n    A100: $dark-primary-text,\n    A200: $dark-primary-text,\n    A400: $dark-primary-text,\n    A700: $dark-primary-text,\n  )\n);\n\n\n$aupt-blue: (\n  50: #E9EEFF,\n  100: #C9D4FF,\n  200: #A5B7FF,\n  300: #819AFF,\n  400: #6685FF,\n  500: #4B6FFF,\n  600: #4467FF,\n  700: #3B5CFF,\n  800: #3352FF,\n  900: #2340FF,\n  A100: #FFFFFF,\n  A200: #FFFFFF,\n  A400: #D2D7FF,\n  A700: #B8C0FF,\n  contrast: (\n    50: $dark-primary-text,\n    100: $dark-primary-text,\n    200: $dark-primary-text,\n    300: $dark-primary-text,\n    400: $dark-primary-text,\n    500: $light-primary-text,\n    600: $light-primary-text,\n    700: $light-primary-text,\n    800: $light-primary-text,\n    900: $light-primary-text,\n    A100: $dark-primary-text,\n    A200: $dark-primary-text,\n    A400: $dark-primary-text,\n    A700: $dark-primary-text,\n  )\n);\n\n$aupt-cyan: (\n  50: #e0f7fa,\n  100: #b2ebf2,\n  200: #80deea,\n  300: #4dd0e1,\n  400: #26c6da,\n  500: #00bcd4,\n  600: #00acc1,\n  700: #0097a7,\n  800: #00838f,\n  900: #006064,\n  A100: #84ffff,\n  A200: #18ffff,\n  A400: #00e5ff,\n  A700: #00b8d4,\n  contrast: (\n    50: $dark-primary-text,\n    100: $dark-primary-text,\n    200: $dark-primary-text,\n    300: $dark-primary-text,\n    400: $dark-primary-text,\n    500: $light-primary-text,\n    600: $light-primary-text,\n    700: $light-primary-text,\n    800: $light-primary-text,\n    900: $light-primary-text,\n    A100: $dark-primary-text,\n    A200: $dark-primary-text,\n    A400: $dark-primary-text,\n    A700: $dark-primary-text,\n  )\n);\n\n$aupt-teal: (\n  50: #E4F5F3,\n  100: #BAE7E2,\n  200: #8DD7CF,\n  300: #5FC6BC,\n  400: #3CBAAD,\n  500: #1AAE9F,\n  600: #17A797,\n  700: #139D8D,\n  800: #0F9483,\n  900: #088472,\n  A100: #B3FFF2,\n  A200: #80FFEA,\n  A400: #4DFFE2,\n  A700: #33FFDE,\n  contrast: (\n    50: $dark-primary-text,\n    100: $dark-primary-text,\n    200: $dark-primary-text,\n    300: $dark-primary-text,\n    400: $dark-primary-text,\n    500: $dark-primary-text,\n    600: $light-primary-text,\n    700: $light-primary-text,\n    800: $light-primary-text,\n    900: $light-primary-text,\n    A100: $dark-primary-text,\n    A200: $dark-primary-text,\n    A400: $dark-primary-text,\n    A700: $dark-primary-text,\n  )\n);\n\n$aupt-grey: (\n  50: #fafafa,\n  100: #f5f5f5,\n  200: #eeeeee,\n  300: #e0e0e0,\n  400: #bdbdbd,\n  500: #9e9e9e,\n  600: #757575,\n  700: #616161,\n  800: #424242,\n  900: #212121,\n  A100: #ffffff,\n  A200: #eeeeee,\n  A400: #bdbdbd,\n  A700: #616161,\n  contrast: (\n    50: $dark-primary-text,\n    100: $dark-primary-text,\n    200: $dark-primary-text,\n    300: $dark-primary-text,\n    400: $dark-primary-text,\n    500: $dark-primary-text,\n    600: $light-primary-text,\n    700: $light-primary-text,\n    800: $light-primary-text,\n    900: $light-primary-text,\n    A100: $dark-primary-text,\n    A200: $dark-primary-text,\n    A400: $dark-primary-text,\n    A700: $light-primary-text,\n  )\n);\n\n$aupt-gray: $aupt-grey;\n\n$aupt-red: (\n  50: #ffebee,\n  100: #ffcdd2,\n  200: #ef9a9a,\n  300: #e57373,\n  400: #ef5350,\n  500: #f44336,\n  600: #e53935,\n  700: #d32f2f,\n  800: #c62828,\n  900: #b71c1c,\n  A100: #ff8a80,\n  A200: #ff5252,\n  A400: #ff1744,\n  A700: #d50000,\n  contrast: (\n    50: $dark-primary-text,\n    100: $dark-primary-text,\n    200: $dark-primary-text,\n    300: $dark-primary-text,\n    400: $dark-primary-text,\n    500: $light-primary-text,\n    600: $light-primary-text,\n    700: $light-primary-text,\n    800: $light-primary-text,\n    900: $light-primary-text,\n    A100: $dark-primary-text,\n    A200: $light-primary-text,\n    A400: $light-primary-text,\n    A700: $light-primary-text,\n  )\n);\n\n$aupt-amber: (\n  50: #fff8e1,\n  100: #ffecb3,\n  200: #ffe082,\n  300: #ffd54f,\n  400: #ffca28,\n  500: #ffc107,\n  600: #ffb300,\n  700: #ffa000,\n  800: #ff8f00,\n  900: #ff6f00,\n  A100: #ffe57f,\n  A200: #ffd740,\n  A400: #ffc400,\n  A700: #ffab00,\n  contrast: (\n    50: $dark-primary-text,\n    100: $dark-primary-text,\n    200: $dark-primary-text,\n    300: $dark-primary-text,\n    400: $dark-primary-text,\n    500: $dark-primary-text,\n    600: $dark-primary-text,\n    700: $dark-primary-text,\n    800: $dark-primary-text,\n    900: $dark-primary-text,\n    A100: $dark-primary-text,\n    A200: $dark-primary-text,\n    A400: $dark-primary-text,\n    A700: $dark-primary-text,\n  )\n);\n\n$aupt-orange: (\n  50: #fff3e0,\n  100: #ffe0b2,\n  200: #ffcc80,\n  300: #ffb74d,\n  400: #ffa726,\n  500: #ff9800,\n  600: #fb8c00,\n  700: #f57c00,\n  800: #ef6c00,\n  900: #e65100,\n  A100: #ffd180,\n  A200: #ffab40,\n  A400: #ff9100,\n  A700: #ff6d00,\n  contrast: (\n    50: $dark-primary-text,\n    100: $dark-primary-text,\n    200: $dark-primary-text,\n    300: $dark-primary-text,\n    400: $dark-primary-text,\n    500: $dark-primary-text,\n    600: $dark-primary-text,\n    700: $dark-primary-text,\n    800: $light-primary-text,\n    900: $light-primary-text,\n    A100: $dark-primary-text,\n    A200: $dark-primary-text,\n    A400: $dark-primary-text,\n    A700: black,\n  )\n);\n\n$aupt-deep-orange: (\n  50: #fbe9e7,\n  100: #ffccbc,\n  200: #ffab91,\n  300: #ff8a65,\n  400: #ff7043,\n  500: #ff5722,\n  600: #f4511e,\n  700: #e64a19,\n  800: #d84315,\n  900: #bf360c,\n  A100: #ff9e80,\n  A200: #ff6e40,\n  A400: #ff3d00,\n  A700: #dd2c00,\n  contrast: (\n    50: $dark-primary-text,\n    100: $dark-primary-text,\n    200: $dark-primary-text,\n    300: $dark-primary-text,\n    400: $dark-primary-text,\n    500: $light-primary-text,\n    600: $light-primary-text,\n    700: $light-primary-text,\n    800: $light-primary-text,\n    900: $light-primary-text,\n    A100: $dark-primary-text,\n    A200: $dark-primary-text,\n    A400: $light-primary-text,\n    A700: $light-primary-text,\n  )\n);\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/scss/_helpers.scss",
    "content": ".bg-white {\n  background-color: #fff !important;\n}\n\n.w-full {\n  width: 100% !important;\n}\n\n.h-full {\n  height: 100% !important;\n}\n\n.scrollable {\n  overflow-y: scroll;\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/scss/_material-overrides.scss",
    "content": "@import './theme';\n\n.color-primary {\n  color: mat-color($primary, 500) !important;\n}\n.bg-primary {\n  background: mat-color($primary, 500) !important;\n}\n.color-accent {\n  color: mat-color($accent, 800) !important;\n}\n\n.bg-accent {\n  background: mat-color($accent, 800) !important;\n}\n.color-warn {\n  color: mat-color($warn, 500) !important;\n}\n.color-success {\n  color: mat-color($aupt-green, 500) !important;\n}\n.color-error {\n  color: mat-color($warn, 500) !important;\n}\n.color-info {\n  color: mat-color($aupt-cyan, 500) !important;\n}\n.color-warning {\n  color: mat-color($aupt-amber, 500) !important;\n}\n\n.status-Finished {\n  color: mat-color($accent, 800) !important;\n}\n.status-Failed {\n  color: mat-color($aupt-amber, 500) !important;\n}\n\n.color-scheme-light {\n  @include angular-material-theme($light-theme);\n\n  .card-wrapper {\n    color: #d0d0d0;\n  }\n\n  .config-list {\n    background-color: #ffffff;\n  }\n\n  .color-dark {\n    color: $dark-text !important;\n  }\n  .color-light {\n    color: $light-text !important;\n  }\n\n  .color-text-primary {\n    color: #000000;\n  }\n\n  .color-gray {\n    color: rgb(122, 122, 122);\n  }\n\n  .bg-primary {\n    background: mat-color($primary) !important;\n  }\n\n  .bg-accent {\n    background: mat-color($accent) !important;\n  }\n\n  .route-active {\n    color: mat-color($primary);\n  }\n\n  .table-header {\n    background: mat-color($primary);\n    color: white;\n  }\n\n  .first-col-header {\n    border-bottom: 1px solid white;\n    font-weight: 500;\n  }\n\n  .second-col-header {\n    border-bottom: 1px solid white;\n    border-left: 1px solid white;\n    font-weight: 500;\n  }\n\n  .first-col {\n    border-bottom: 1px solid mat-color($primary);\n    font-weight: 500;\n  }\n\n  .second-col {\n    border-bottom: 1px solid mat-color($primary);\n    border-left: 1px solid mat-color($primary);\n  }\n\n  .table-container > *:last-child .first-col {\n    border: unset !important;\n  }\n  .table-container > *:last-child .second-col {\n    border: unset !important;\n    border-left: 1px solid mat-color($primary) !important;\n  }\n\n  .progress-bar-filled,\n  .progress-bar {\n    background-color: whitesmoke;\n    height: 60px;\n    border-radius: 3px;\n    box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2);\n    .progress-bar-fill {\n      display: block;\n      height: 100%;\n      width: 100%;\n      color: black;\n      text-align: center;\n      background-color: mat-color($accent) !important;\n    }\n  }\n\n  .progress-bar {\n    width: 100%;\n    .progress-bar-fill {\n      background-color: mat-color($accent) !important;\n      border-radius: 3px;\n      transition: width 500ms ease-in-out;\n    }\n  }\n\n  .menu-list-item--active {\n    color: mat-color($primary, default) !important;\n  }\n\n  a {\n    &:not(.mat-button):not(.mat-raised-button):not(.mat-icon-button):not(.mat-list-item) {\n      &:hover,\n      &:active {\n        color: mat-color($primary, 500) !important;\n      }\n    }\n  }\n\n  .actionable {\n    cursor: pointer;\n    &:hover:not(:disabled) {\n      color: mat-color($accent, 500) !important;\n    }\n  }\n\n  .actionable-warn {\n    cursor: pointer;\n    &:hover:not(:disabled) {\n      color: mat-color($warn, 500) !important;\n    }\n  }\n\n  .ngx-pagination a,\n  .ngx-pagination button {\n    color: black !important;\n  }\n}\n\n.color-scheme-dark {\n  @include angular-material-color($dark-theme);\n  // Plotly customizations\n  g > text {\n    fill: #ffffff !important;\n    text-shadow: none !important;\n  }\n  .axis-title,\n  .axis-extent-top > .axis-extent-top-text,\n  .axis-extent-bottom > .axis-extent-bottom-text,\n  .axis-extent-text,\n  .tick {\n    fill: #ffffff !important;\n  }\n  .axis-extent > * {\n    color: #ffffff !important;\n  }\n  .axis-extent-top,\n  .axis-extent-bottom,\n  .tick {\n    color: #ffffff !important;\n  }\n  .tick > text {\n    color: #ffffff !important;\n  }\n\n  .config-list {\n    background-color: #2d2d2d;\n  }\n\n  // Example how you can easy add own custom styles\n  .card-wrapper {\n    color: #2d2d2d;\n  }\n\n  .color-text-primary {\n    color: #ffffff;\n  }\n\n  .color-gray {\n    color: rgb(223, 223, 223);\n  }\n\n  .color-dark {\n    color: $dark-text !important;\n  }\n  .color-light {\n    color: $light-text !important;\n  }\n\n  .bg-primary {\n    background: mat-color($dark-primary) !important;\n  }\n\n  .bg-accent {\n    background: mat-color($dark-accent) !important;\n  }\n\n  .route-active {\n    color: mat-color($dark-primary);\n  }\n\n  .table-header {\n    background: mat-color($primary);\n    color: white;\n  }\n\n  .first-col-header {\n    border-bottom: 1px solid white;\n    font-weight: 500;\n  }\n\n  .second-col-header {\n    border-bottom: 1px solid white;\n    border-left: 1px solid white;\n    font-weight: 500;\n  }\n\n  .first-col {\n    border-bottom: 1px solid mat-color($dark-primary);\n    font-weight: 500;\n  }\n\n  .second-col {\n    border-bottom: 1px solid mat-color($dark-primary);\n    border-left: 1px solid mat-color($dark-primary);\n  }\n\n  .table-container > *:last-child .first-col {\n    border: unset !important;\n  }\n  .table-container > *:last-child .second-col {\n    border: unset !important;\n    border-left: 1px solid mat-color($dark-primary) !important;\n  }\n\n  .menu-list-item--active {\n    color: mat-color($primary, default) !important;\n  }\n\n  .progress-bar-filled,\n  .progress-bar {\n    background-color: whitesmoke;\n    height: 60px;\n    border-radius: 3px;\n    box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2);\n    .progress-bar-fill {\n      display: block;\n      height: 100%;\n      width: 100%;\n      color: black;\n      text-align: center;\n      background-color: mat-color($accent) !important;\n      display: flex;\n      justify-content: center;\n      align-items: center;\n    }\n  }\n\n  .progress-bar {\n    width: 100%;\n    .progress-bar-fill {\n      background-color: mat-color($accent) !important;\n      border-radius: 3px;\n      transition: width 500ms ease-in-out;\n    }\n  }\n\n  a {\n    &:not(.mat-button):not(.mat-raised-button):not(.mat-icon-button):not(.mat-list-item) {\n      &:hover,\n      &:active {\n        color: mat-color($dark-primary, 500) !important;\n      }\n    }\n  }\n\n  .actionable {\n    cursor: pointer;\n    &:hover {\n      color: mat-color($dark-accent, 500) !important;\n    }\n  }\n\n  .actionable-warn {\n    cursor: pointer;\n    &:hover {\n      color: mat-color($warn, 500) !important;\n    }\n  }\n\n  .ngx-pagination a,\n  .ngx-pagination button {\n    color: white !important;\n  }\n}\n\nbutton {\n  outline: none !important;\n}\n\n.btn-primary {\n  background: mat-color($primary, 500) !important;\n  color: white;\n}\n\n.mat-snack-bar-container,\n.mat-simple-snackbar-action {\n  cursor: pointer;\n\n  color: white !important;\n\n  &.text-error {\n    background: map-get($aupt-red, 500) !important;\n    position: relative;\n\n    & .mat-simple-snackbar {\n      margin-left: 1.1rem !important;\n    }\n\n    &:after {\n      content: '\\26A0' !important;\n      position: absolute;\n      top: 0.9rem;\n      left: 0.6rem;\n      font-size: 1rem;\n    }\n  }\n\n  &.text-warn {\n    position: relative;\n    background: map-get($aupt-orange, 500) !important;\n    color: black !important;\n\n    & .mat-simple-snackbar {\n      margin-left: 1.1rem !important;\n    }\n\n    &:after {\n      content: '\\2714' !important;\n      position: absolute;\n      top: 0.9rem;\n      left: 0.6rem;\n      font-size: 1rem;\n    }\n  }\n\n  &.text-info {\n    position: relative;\n    background: map-get($aupt-cyan, 500) !important;\n    color: black !important;\n\n    & .mat-simple-snackbar {\n      margin-left: 1.1rem !important;\n    }\n\n    &:after {\n      content: '\\2755' !important;\n      position: absolute;\n      top: 0.9rem;\n      left: 0.6rem;\n      font-size: 1rem;\n    }\n  }\n\n  &.text-success {\n    position: relative;\n    background: map-get($aupt-green, 500) !important;\n\n    & .mat-simple-snackbar {\n      margin-left: 1.1rem !important;\n    }\n\n    &:after {\n      content: '\\2714' !important;\n      position: absolute;\n      top: 0.9rem;\n      left: 0.6rem;\n      font-size: 1rem;\n    }\n  }\n}\n\n.mat-simple-snackbar-action > button {\n  padding-top: 0 !important;\n}\n\n.mat-tooltip {\n  font-size: 15px;\n}\n\n.ngx-pagination .current {\n  background: mat-color($primary, 500) !important;\n  border-radius: 50%;\n  padding: 9px 15px !important;\n  font-size: 18px !important;\n}\n\n.ngx-pagination .current:hover {\n  border-radius: 50%;\n  padding: 9px 15px !important;\n  font-size: 18px !important;\n}\n\n.ngx-pagination li,\n.ngx-pagination a {\n  border-radius: 50% !important;\n  padding: 9px 15px !important;\n  font-size: 18px !important;\n}\n\n.ngx-pagination li:focus {\n  outline: none !important;\n  border-radius: 50% !important;\n}\n\n.ngx-pagination li:focus,\n.ngx-pagination a:focus,\n.ngx-pagination button:focus {\n  outline: none !important;\n  border-radius: 50% !important;\n}\n\n.ngx-pagination a,\n.ngx-pagination .pagination-next a,\n.ngx-pagination .pagination-previous a {\n  padding: 9px 15px !important;\n  font-size: 18px !important;\n}\n\n.ngx-pagination .pagination-next a::after,\n.ngx-pagination .pagination-previous a::before {\n  margin: 0 !important;\n}\n\nul {\n  list-style: none !important;\n}\n\nul.help-list li::before {\n  content: '\\A';\n  width: 10px;\n  height: 10px;\n  border-radius: 50%;\n  display: inline-block;\n  margin: 0 10px;\n  background: mat-color($primary, 500);\n  font-weight: bold;\n}\n\n.help-menu {\n  height: 40px !important;\n}\n\n.interaction-btn {\n  position: fixed;\n  bottom: 0;\n  right: 0;\n  margin: 10px;\n}\n\n.help-list > li {\n  padding: 5px;\n}\n\n.sort-toggle {\n  height: 43px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n.sort-toggle .mat-button-toggle-label-content {\n  padding: 0 !important;\n}\n\n.cursor-pointer {\n  cursor: pointer;\n}\n\n.refresh-interval .mat-form-field-infix {\n  padding: 2px 2px 7px 2px !important;\n  margin: 0 !important;\n}\n\n.header-modal .mat-dialog-container {\n  padding: 0 !important;\n  overflow: unset !important;\n}\n\n.header-dialog-title {\n  height: 50px;\n}\n\n.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick {\n  color: mat-color($accent, 500) !important;\n}\n\n.mat-list-item-disabled {\n  background-color: inherit !important;\n  color: gray !important;\n}\n\n.info-modal .mat-dialog-container {\n  padding: 0 !important;\n  overflow: unset !important;\n}\n\n.info-dialog-content {\n  overflow: auto !important;\n  max-height: 500px !important;\n}\n\n.info-dialog-title {\n  height: 50px;\n  font-size: 18px;\n  font-weight: 500;\n  font-stretch: normal;\n  font-style: normal;\n  line-height: 1.22;\n  letter-spacing: normal;\n  text-align: left;\n  color: #ffffff;\n}\n\n.help-content {\n  max-width: 1000px;\n}\n\n.job-status-table > thead > tr > .mat-sort-header > div {\n  justify-content: center !important;\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/scss/jsoneditor-dark.scss",
    "content": ".color-scheme-dark {\n  background: #6c6c6c;\n}\n\n.color-scheme-dark div.jsoneditor-field,\n.color-scheme-dark div.jsoneditor-value,\n.color-scheme-dark div.jsoneditor td,\n.color-scheme-dark div.jsoneditor th,\n.color-scheme-dark div.jsoneditor textarea,\n.color-scheme-dark .jsoneditor-schema-error,\n.color-scheme-dark .ace-jsoneditor.ace_editor {\n  -webkit-text-stroke-width: 0px;\n}\n\n.color-scheme-dark .json-option .mat-checkbox-frame {\n  border-color: #bcbcbc;\n}\n\n.color-scheme-dark .json-option {\n  color: #bcbcbc;\n}\n\n.color-scheme-dark ::-webkit-scrollbar {\n  width: 10px;\n  height: 10px;\n  cursor: pointer;\n  background: rgb(88, 88, 88);\n}\n\n.confirmation-dark {\n  width: 360px;\n}\n\n.confirmation-dark .mat-dialog-container {\n  padding: 15px;\n  border-radius: 2px;\n  overflow: hidden;\n  background: #525252;\n  color: #fff;\n}\n\n.confirmation-dark .mat-dialog-container h1 {\n  font-size: 18px;\n  background: #848484;\n  margin: -15px;\n  margin-bottom: 10px;\n  padding: 10px 15px;\n  color: #fff;\n  font-weight: 400;\n}\n\n.confirmation-dark .mat-dialog-content {\n  margin: -10px -16px;\n  margin-bottom: 10px;\n  padding: 5px 15px;\n  font-size: 16px;\n}\n\n.confirmation-dark .mat-dialog-actions {\n  padding: 5px 10px;\n  margin: -15px;\n  display: inline-block;\n  float: right;\n  min-height: 40px;\n}\n\n.confirmation-dark button.mat-button {\n  float: right;\n  right: 0px;\n}\n\n.confirmation-dark .mat-raised-button {\n  color: #ffffff;\n  background: #838383;\n}\n\n/* Track */\n.color-scheme-dark ::-webkit-scrollbar-track {\n  -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.2);\n}\n\n/* Handle */\n.color-scheme-dark ::-webkit-scrollbar-thumb {\n  background: #9b9b9b;\n  border-radius: 0px;\n  cursor: pointer;\n}\n\n.color-scheme-dark .ace_editor.ace-jsoneditor {\n  border: 1px solid #545454;\n}\n\n.color-scheme-dark div.jsoneditor-tree {\n  border: 1px solid #3d3d3d;\n}\n\n.color-scheme-dark .ace-jsoneditor .ace_scroller {\n  background-color: #232323;\n}\n\n.color-scheme-dark .ace-jsoneditor .ace_marker-layer .ace_selection {\n  background: #808080;\n}\n\n.color-scheme-dark .ace-jsoneditor .ace_marker-layer .ace_active-line {\n  background: #545454;\n}\n\n.color-scheme-dark .ace-jsoneditor .ace_text-layer {\n  color: #f3f3f3;\n}\n\n.color-scheme-dark .ace-jsoneditor .ace_variable {\n  color: #f8f8f8 !important;\n}\n\n.color-scheme-dark .ace-jsoneditor .ace_constant.ace_numeric {\n  color: #ff4444;\n}\n\n.color-scheme-dark .ace-jsoneditor .ace_constant.ace_language {\n  color: #ff4444;\n}\n\n.color-scheme-dark .ace-jsoneditor .ace_string {\n  color: #0dda16 !important;\n}\n\n.color-scheme-dark .jsoneditor-readonly {\n  color: #e9e9e9;\n}\n\n.color-scheme-dark div.jsoneditor-value.jsoneditor-array,\n.color-scheme-dark div.jsoneditor-value.jsoneditor-object {\n  color: #e9e9e9;\n}\n\n.color-scheme-dark div.jsoneditor-field {\n  color: #f8f8f8;\n}\n\n.color-scheme-dark div.jsoneditor-value.jsoneditor-string {\n  color: #0dda16 !important;\n}\n\n.color-scheme-dark div.jsoneditor td.jsoneditor-separator {\n  color: #f2f2f2;\n}\n\n.color-scheme-dark div.jsoneditor-value.jsoneditor-number {\n  color: #ff3d26;\n}\n\n.color-scheme-dark div.jsoneditor-value.jsoneditor-null {\n  color: #65bbff;\n}\n\n.color-scheme-dark div.jsoneditor-menu {\n  background: mat-color($dark-primary, 500) !important;\n}\n\n.color-scheme-dark .jsoneditor-statusbar {\n  color: #fff;\n  background: #3d3d3d;\n  border: none;\n}\n\n.color-scheme-dark div.jsoneditor-navigation-bar {\n  color: #fff;\n  background: #3d3d3d;\n  border: none;\n  line-height: 31px;\n}\n\n.color-scheme-dark tr.jsoneditor-highlight,\n.color-scheme-dark tr.jsoneditor-selected {\n  background-color: #545454;\n}\n\n.color-scheme-dark div.jsoneditor-field.jsoneditor-highlight,\n.color-scheme-dark div.jsoneditor-field[contenteditable='true']:focus,\n.color-scheme-dark div.jsoneditor-field[contenteditable='true']:hover,\n.color-scheme-dark div.jsoneditor-value.jsoneditor-highlight,\n.color-scheme-dark div.jsoneditor-value[contenteditable='true']:focus,\n.color-scheme-dark div.jsoneditor-value[contenteditable='true']:hover {\n  background-color: #545454;\n  border: 1px solid #232323;\n}\n\n.color-scheme-dark div.jsoneditor-tree button {\n  filter: contrast(2) brightness(10);\n}\n\n.color-scheme-dark div.jsoneditor-tree button:focus {\n  background-color: rgba(255, 255, 255, 0.14);\n  outline: 1px solid rgba(229, 229, 229, 0.26);\n}\n\n.color-scheme-dark div.jsoneditor-contextmenu ul {\n  background: #3d3d3d;\n  border: 1px solid #616161;\n}\n\n.color-scheme-dark div.jsoneditor-contextmenu div.jsoneditor-separator {\n  border-color: #616161;\n}\n\n.color-scheme-dark div.jsoneditor-contextmenu ul li button.jsoneditor-expand {\n  border-color: #616161;\n}\n\n.color-scheme-dark div.jsoneditor-contextmenu ul li button div.jsoneditor-expand {\n  filter: contrast(2) brightness(10);\n}\n\n.color-scheme-dark div.jsoneditor-contextmenu ul li button {\n  -webkit-text-stroke-width: 0px;\n  color: #fff;\n}\n\n.color-scheme-dark div.jsoneditor-contextmenu ul li ul li button:focus,\n.color-scheme-dark div.jsoneditor-contextmenu ul li ul li button:hover {\n  background-color: #7c7c7c;\n}\n\n.color-scheme-dark .ace-jsoneditor .ace_gutter {\n  background: #333333;\n  color: #fff;\n}\n\n.color-scheme-dark .ace_content {\n  background: #232323;\n}\n\n.color-scheme-dark .jsoneditor-tree {\n  background: #232323;\n}\n\n.color-scheme-dark tr.jsoneditor-highlight .jsoneditor-tree,\n.color-scheme-dark tr.jsoneditor-selected .jsoneditor-tree {\n  background: #545454;\n}\n\n.color-scheme-dark div.jsoneditor-contextmenu ul li button {\n  filter: none;\n}\n\n.color-scheme-dark div.jsoneditor-contextmenu ul li button:focus,\n.color-scheme-dark div.jsoneditor-contextmenu ul li button:hover {\n  background-color: #7d7d7d;\n}\n\n.color-scheme-dark .ace-jsoneditor .ace_gutter-active-line {\n  background-color: #797979;\n}\n\n.color-scheme-dark table.jsoneditor-search div.jsoneditor-frame {\n  background-color: #565656 !important;\n}\n\n.color-scheme-dark div.jsoneditor .jsoneditor-search input {\n  color: #fff;\n}\n\n.color-scheme-dark .ace-jsoneditor .ace_marker-layer .ace_selected-word {\n  border: 1px solid #808080;\n}\n\n.color-scheme-dark .ace-jsoneditor .ace_cursor {\n  border-left: 2px solid #e6e6e6;\n}\n\n.color-scheme-dark .ace-jsoneditor .ace_indent-guide {\n  filter: contrast(0);\n}\n\n.color-scheme-dark .jsoneditor-modal .pico-modal-header {\n  background: #848484 !important;\n}\n\n.color-scheme-dark .jsoneditor-modal {\n  background: #525252 !important;\n  color: #fff !important;\n}\n\n.color-scheme-dark .jsoneditor-modal table td,\n.color-scheme-dark .jsoneditor-modal table th {\n  color: #fff;\n}\n\n.color-scheme-dark .jsoneditor-modal .jsoneditor-jmespath-label {\n  color: #fff;\n}\n\n.color-scheme-dark .jsoneditor-modal #query,\n.color-scheme-dark .jsoneditor-modal .jsoneditor-transform-preview {\n  background-color: #787878;\n  color: #fff;\n  border-color: #343434;\n}\n\n.color-scheme-dark .jsoneditor-modal select,\n.color-scheme-dark .jsoneditor-modal input,\n.color-scheme-dark .jsoneditor-modal .selectr-selected {\n  background: #707070;\n  color: #fff;\n  border-color: #515151;\n}\n\n.color-scheme-dark .jsoneditor-modal .selectr-placeholder {\n  color: #fff;\n}\n\n.color-scheme-dark .selectr-option {\n  background-color: #707070;\n}\n\n.color-scheme-dark .selectr-option.active {\n  color: #fff;\n  background-color: #3883fa;\n}\n\n.color-scheme-dark .selectr-input-container {\n  background: #525252;\n}\n\n.color-scheme-dark .selectr-options-container {\n  border-color: #474747;\n}\n\n.color-scheme-dark .selectr-clear::before,\n.color-scheme-dark .selectr-clear::after,\n.color-scheme-dark .selectr-input-clear::before,\n.color-scheme-dark .selectr-input-clear::after,\n.color-scheme-dark .selectr-tag-remove::before,\n.color-scheme-dark .selectr-tag-remove::after {\n  background-color: #fff;\n}\n\n.color-scheme-dark .selectr-selected::before {\n  border-color: #ffffff transparent transparent;\n}\n\n.color-scheme-dark div.jsoneditor div.jsoneditor-anchor .picker_wrapper.popup.popup_bottom {\n  background: #6d6d6d;\n}\n\n.color-scheme-dark .picker_editor input {\n  background: #232323;\n  color: #fff;\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/scss/jsoneditor.scss",
    "content": "::-webkit-scrollbar {\n  width: 10px;\n  height: 10px;\n  cursor: pointer;\n  background: #fff;\n}\n\n/* Track */\n::-webkit-scrollbar-track {\n  -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.2);\n}\n\n/* Handle */\n::-webkit-scrollbar-thumb {\n  background: #cecece;\n  border-radius: 0px;\n  cursor: pointer;\n}\n\n.wrapper {\n  width: calc(100vw - 16px);\n  height: calc(100vh - 107px);\n  display: flex;\n  padding: 8px;\n}\n\n.json-option {\n  position: absolute;\n  right: 50%;\n  margin: 10px 20px;\n  color: #dee0f2;\n}\n\n.json-option .mat-checkbox-frame {\n  border-color: #bec6ef;\n}\n\n.json-option span.mat-checkbox-label {\n  position: relative;\n  top: 1px;\n  font-size: 14px;\n}\n\n.json-option .mat-checkbox-checked.mat-accent .mat-checkbox-frame {\n  border: none;\n}\n\n.json-option.mat-checkbox-checked .mat-checkbox-frame {\n  border-color: transparent;\n}\n\ndiv.jsoneditor-field,\ndiv.jsoneditor-value,\ndiv.jsoneditor td,\ndiv.jsoneditor th,\ndiv.jsoneditor textarea,\n.jsoneditor-schema-error,\n.ace-jsoneditor.ace_editor {\n  line-height: 1.5 !important;\n  -webkit-text-stroke-width: 0.1px;\n  color: #585858;\n  font-size: 15px !important;\n  -webkit-font-smoothing: antialiased;\n}\n\ndiv.jsoneditor-menu > button,\ndiv.jsoneditor-menu > div.jsoneditor-modes > button {\n  outline: none;\n}\n\ndiv.jsoneditor td.jsoneditor-separator {\n  padding: 3px 0;\n  vertical-align: middle;\n  color: #585858;\n}\n\n.ace_gutter-cell {\n  padding: 0px 13px !important;\n}\n\n.ace-jsoneditor .ace_gutter {\n  background: white;\n  color: #000000;\n}\n\n.ace-jsoneditor000000.ace_variable {\n  color: #444444 !important;\n}\n\ndiv.jsoneditor-field {\n  color: #000000;\n}\n\ndiv.jsoneditor-value.jsoneditor-number {\n  color: red;\n}\n\ndiv.jsoneditor-value.jsoneditor-string {\n  color: green !important;\n}\n\ndiv.jsoneditor-value.jsoneditor-boolean {\n  color: darkorange;\n}\n\ndiv.jsoneditor-statusbar {\n  line-height: 30px;\n  height: 30px;\n  color: #000000;\n  background-color: white;\n  font-weight: 500;\n  font-size: 14px;\n  margin: 0px;\n  border: 1px solid #ccc;\n  border-bottom: none;\n  border-radius: 0px 0px 4px 4px;\n}\n\nspan.jsoneditor-parse-error-icon {\n  margin: 3px !important;\n}\n\ndiv.jsoneditor-statusbar > .jsoneditor-curserinfo-val {\n  margin-right: 7px;\n}\n\ndiv.jsoneditor-navigation-bar {\n  font-weight: 500;\n  font-size: 14px;\n  height: 30px;\n  line-height: 30px;\n  font-family: 'Roboto';\n  background: white;\n  border: 1px solid #ccc;\n  color: #444;\n  border-bottom: none;\n}\n\ndiv.jsoneditor-outer.has-nav-bar.has-main-menu-bar {\n  margin-top: -75px;\n  padding-top: 75px;\n}\n\n.ace_editor.ace-jsoneditor {\n  border: 1px solid #ccc;\n  width: calc(100% - 2px) !important;\n}\n\ndiv.jsoneditor-tree {\n  background: #fff;\n  border: 1px solid #ccc;\n  width: calc(100% - 2px);\n}\n\ndiv.jsoneditor-treepath span.jsoneditor-treepath-element {\n  font-weight: 500;\n  font-size: 14px;\n  font-family: 'Roboto';\n  margin: 2px;\n}\n\ndiv.jsoneditor-treepath span.jsoneditor-treepath-seperator {\n  font-size: 10px;\n  position: relative;\n  top: -1px;\n  margin: 3px;\n}\n\ndiv.jsoneditor {\n  color: #565656;\n  border-color: #ccc;\n  box-shadow: 0 2px 1px -1px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 1px 3px 0 rgba(0, 0, 0, 0.12);\n  border: none;\n  border-radius: 4px;\n}\n\n.left,\n.right {\n  width: 50%;\n  height: 100%;\n}\n\n.left {\n  margin-right: 8px;\n}\n\ntable.jsoneditor-search button {\n  outline: none;\n}\n\ndiv.jsoneditor-tree button.jsoneditor-expanded {\n  background-position: 0 -70px;\n}\n\ndiv.jsoneditor-tree button.jsoneditor-collapsed {\n  background-position: 0 -46px;\n}\n\ndiv.jsoneditor-menu {\n  background: mat-color($dark-primary, 500) !important;\n  border: none;\n  height: 45px;\n  padding: 7px 5px;\n  border-radius: 4px 4px 0px 0px;\n}\n\ndiv.jsoneditor-outer.has-main-menu-bar {\n  margin-top: -45px;\n  padding-top: 45px;\n}\n\ndiv.jsoneditor-outer.has-status-bar {\n  margin-bottom: -30px;\n  padding-bottom: 30px;\n}\n\ndiv.jsoneditor-menu a.jsoneditor-poweredBy {\n  display: none;\n}\n\ndiv.jsoneditor-tree div.jsoneditor-color {\n  position: relative;\n  top: 3px;\n  left: 2px;\n}\n\n.jsoneditor-tree input[type='checkbox'] {\n  position: relative;\n  height: 14px;\n  width: 14px;\n  top: 4px;\n  left: 1px;\n  z-index: 2;\n  cursor: pointer;\n}\n\n.jsoneditor-tree input[type='checkbox'] + label {\n  background: url('/assets/unchecked.svg') no-repeat;\n  height: 14px;\n  width: 14px;\n  background-size: 13px;\n  margin-top: 4px;\n  margin-left: 4px;\n  padding: 0px;\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1;\n}\n\n.jsoneditor-tree input[type='checkbox']:checked + label {\n  background: url('/assets/checked.svg') no-repeat;\n  height: 14px;\n  width: 14px;\n  background-size: 13px;\n  margin-top: 5px;\n  margin-left: 4px;\n  padding: 0px;\n  position: absolute;\n}\n\ntable.jsoneditor-search {\n  right: 5px;\n  top: 5px;\n}\n\ntable.jsoneditor-search div.jsoneditor-frame {\n  width: 300px;\n  padding: 0 7px;\n  box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n  border-radius: 4px;\n  height: 35px;\n  border: none;\n}\n\ndiv.jsoneditor .jsoneditor-search input {\n  font-size: 14px;\n  width: 245px;\n  height: 35px;\n  padding: 0px;\n  margin: 0px;\n  font-family: 'Roboto';\n}\n\ntable.jsoneditor-search button.jsoneditor-refresh {\n  width: 24px;\n  background-position: -99px -67px;\n}\n\ntable.jsoneditor-search button.jsoneditor-next:hover {\n  background-position: -124px -43px;\n}\n\ntable.jsoneditor-search button.jsoneditor-previous:hover {\n  background-position: -148px -43px;\n}\n\ntable.jsoneditor-search button.jsoneditor-next {\n  background-position: -124px -67px;\n}\n\ntable.jsoneditor-search button.jsoneditor-previous {\n  background-position: -148px -67px;\n}\n\ntable.jsoneditor-search div.jsoneditor-results {\n  color: #fff;\n  font-size: 14px;\n  line-height: 32px;\n  font-family: 'Roboto';\n  text-transform: capitalize;\n  -webkit-text-stroke-width: 0px;\n  margin-right: 5px;\n}\n\n.ace-jsoneditor .ace_indent-guide {\n  filter: contrast(0.6);\n  position: relative;\n  left: 4px;\n}\n\ntr.jsoneditor-highlight,\ntr.jsoneditor-selected {\n  background-color: #eeeeee;\n}\n\ndiv.jsoneditor-tree button.jsoneditor-contextmenu {\n  background-position: -48px -70px;\n}\n\ndiv.jsoneditor-tree button.jsoneditor-contextmenu:hover,\ndiv.jsoneditor-tree button.jsoneditor-contextmenu:focus,\ndiv.jsoneditor-tree button.jsoneditor-contextmenu.jsoneditor-selected,\ntr.jsoneditor-selected.jsoneditor-first button.jsoneditor-contextmenu {\n  background-position: -48px -46px;\n}\n\ndiv.jsoneditor-tree button.jsoneditor-dragarea {\n  background-position: -72px -70px;\n}\n\ndiv.jsoneditor-tree button.jsoneditor-dragarea:hover,\ndiv.jsoneditor-tree button.jsoneditor-dragarea:focus,\ntr.jsoneditor-selected.jsoneditor-first button.jsoneditor-dragarea {\n  background-position: -72px -46px;\n}\n\n.jsoneditor-modal {\n  font-size: 14px;\n  font-family: 'Roboto';\n  padding: 52px 15px 15px 15px !important;\n  box-shadow: 0 11px 15px -7px rgba(0, 0, 0, 0.2), 0 24px 38px 3px rgba(0, 0, 0, 0.14),\n    0 9px 46px 8px rgba(0, 0, 0, 0.12) !important;\n  color: #4d4d4d;\n  border-radius: 4px !important;\n  border: none !important;\n  border-color: transparent !important;\n  line-height: 20px !important;\n}\n\n.jsoneditor-modal .pico-modal-header {\n  background: linear-gradient(to bottom, #556cea, #3f51b5) !important;\n  height: 52px;\n  line-height: 52px;\n  padding: 0px 15px;\n  font-size: 16px;\n  font-family: 'Roboto';\n  border: none !important;\n}\n\n.jsoneditor-modal .pico-close {\n  width: 16px !important;\n  height: 16px !important;\n  margin: 11px 5px;\n}\n\n.jsoneditor-modal .jsoneditor-jmespath-label {\n  color: #4e64da;\n  font-weight: 500;\n}\n\n.jsoneditor-jmespath-block.jsoneditor-modal-actions {\n  float: right;\n  margin: 0px !important;\n  outline: none;\n}\n\n.jsoneditor-modal .jsoneditor-jmespath-block {\n  margin-bottom: 10px;\n}\n\n.jsoneditor-modal input[type='button'],\n.jsoneditor-modal input[type='submit'],\n.picker_done button {\n  box-sizing: border-box;\n  position: relative;\n  user-select: none;\n  cursor: pointer;\n  outline: 0;\n  border: none;\n  -webkit-tap-highlight-color: transparent;\n  display: inline-block;\n  white-space: nowrap;\n  text-decoration: none;\n  vertical-align: baseline;\n  text-align: center;\n  margin: 0;\n  min-width: 64px;\n  line-height: 36px;\n  padding: 0 16px;\n  border-radius: 4px;\n  overflow: visible;\n  transform: translate3d(0, 0, 0);\n  transition: background 0.4s cubic-bezier(0.25, 0.8, 0.25, 1), box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);\n  box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n  font-size: 14px;\n  color: #444;\n}\n\n.jsoneditor-transform,\n.jsoneditor-repair,\n.jsoneditor-sort,\n.jsoneditor-search {\n  display: none;\n}\n\n.jsoneditor-modal #query,\n.jsoneditor-modal .jsoneditor-transform-preview {\n  font-family: 'Roboto Mono';\n  font-size: 12px;\n  box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n  outline: none;\n}\n\n.jsoneditor-modal-overlay {\n  background: rgba(0, 0, 0, 0.32) !important;\n  opacity: 1 !important;\n}\n\n.jsoneditor-modal table th,\n.jsoneditor-modal table td {\n  padding: 0px;\n  padding-top: 15px;\n  font-size: 14px;\n  min-width: 75px;\n  font-family: 'Roboto';\n  vertical-align: middle;\n}\n\n.jsoneditor-modal .jsoneditor-jmespath-filter-field,\n.jsoneditor-modal .jsoneditor-jmespath-filter-relation,\n.jsoneditor-modal .jsoneditor-jmespath-sort-field,\n.jsoneditor-modal .jsoneditor-jmespath-sort-order {\n  width: calc(50% - 2px);\n  text-transform: capitalize;\n}\n\n.jsoneditor-modal .jsoneditor-jmespath-filter-value input {\n  width: calc(50% - 23px);\n  height: 22px;\n}\n\n.jsoneditor-modal .selectr-input-container input.selectr-input {\n  margin: 10px;\n}\n\n.jsoneditor-modal .selectr-options {\n  // overflow-y: auto;\n}\n\n.jsoneditor-modal .selectr-placeholder {\n  color: #777777;\n}\n\n.jsoneditor-modal select,\n.jsoneditor-modal input,\n.jsoneditor-modal .selectr-selected {\n  padding: 6px 10px;\n  font-size: 14px;\n  height: 36px;\n  line-height: 1.5em;\n  font-family: 'Roboto';\n  min-width: 203px;\n  outline: none;\n  box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n}\n\n.jsoneditor-modal .jsoneditor-button-group.jsoneditor-button-group-value-asc input.jsoneditor-button-asc,\n.jsoneditor-modal .jsoneditor-button-group.jsoneditor-button-group-value-desc input.jsoneditor-button-desc {\n  border-left-style: none;\n  background: linear-gradient(to bottom, #4a5fd1, #3f51b5) !important;\n  border-color: #4356bf !important;\n  border-top-right-radius: 0px;\n  border-bottom-right-radius: 0px;\n}\n\n.jsoneditor-modal .jsoneditor-button-group input.jsoneditor-button-first {\n  border-left-style: none;\n}\n\n.jsoneditor-button-group {\n  margin-left: 15px;\n}\n\n.jsoneditor-modal .jsoneditor-button-group input.jsoneditor-button-last {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n\ninput#ok {\n  background: linear-gradient(to bottom, #556cea, #3f51b5);\n  color: #fff;\n}\n\ndiv.jsoneditor-contextmenu ul {\n  width: 175px;\n  box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n  border-radius: 4px;\n  border-radius: 4px;\n  border: none;\n  left: 5px;\n}\n\ndiv.jsoneditor-contextmenu ul li ul {\n  padding: 2px 10px !important;\n  box-shadow: inset 0px 0px 7px rgb(168, 168, 168);\n}\n\ndiv.jsoneditor-contextmenu div.jsoneditor-text {\n  padding: 8px;\n  padding-left: 25px;\n  word-wrap: normal;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\ndiv.jsoneditor-contextmenu button.jsoneditor-type-modes .jsoneditor-text {\n  padding-left: 8px;\n}\n\ndiv.jsoneditor-contextmenu ul li button {\n  padding: 0px;\n  font-size: 13px;\n  font-family: 'Roboto';\n  width: 100%;\n  -webkit-text-stroke-width: 0.1px;\n}\n\ndiv.jsoneditor-contextmenu ul li button:hover,\ndiv.jsoneditor-contextmenu ul li button:focus {\n  color: #444;\n  background: #eeeeee;\n}\n\ndiv.jsoneditor-contextmenu ul li ul li button {\n  padding-left: 25px;\n}\n\ndiv.jsoneditor-contextmenu div.jsoneditor-icon {\n  top: 4px;\n}\n\ndiv.jsoneditor-contextmenu ul li button div.jsoneditor-expand {\n  top: 4px;\n}\n\ndiv.jsoneditor-contextmenu ul li {\n  margin: 0px;\n  box-sizing: unset;\n}\n\ndiv.jsoneditor-contextmenu div.jsoneditor-separator {\n  padding: 0px;\n  margin: 0px;\n}\n\ndiv.jsoneditor-contextmenu ul li button.jsoneditor-expand {\n  height: 31px;\n  width: 31px;\n}\n\ndiv.jsoneditor-contextmenu ul li button.jsoneditor-default {\n  width: calc(100% - 31px);\n}\n\ndiv.jsoneditor-contextmenu ul li button.jsoneditor-selected,\ndiv.jsoneditor-contextmenu ul li button.jsoneditor-selected:hover,\ndiv.jsoneditor-contextmenu ul li button.jsoneditor-selected:focus {\n  background: linear-gradient(to bottom, #556cea, #3f51b5);\n  -webkit-text-stroke-width: 0px;\n}\n\ndiv.jsoneditor-contextmenu ul li button.jsoneditor-selected .jsoneditor-text {\n  color: #fff;\n}\n\n.picker_arrow {\n  display: none;\n}\n\ndiv.jsoneditor div.jsoneditor-anchor .picker_wrapper.popup.popup_bottom {\n  margin: 0px;\n  font-family: 'Roboto' !important;\n  width: 225px;\n  box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n  background: #ffffff;\n  border-radius: 4px;\n  top: 20px;\n  left: 0px;\n}\n\n.picker_editor input {\n  font-family: 'Roboto' !important;\n  font-size: 14px !important;\n  outline: none;\n  border: 1px solid #ccc;\n  border-radius: 2px;\n}\n\n.picker_done button {\n  line-height: 19px;\n  min-width: 50px;\n  font-family: 'Roboto';\n  font-size: 14px !important;\n  background: #485ccb;\n  color: #fff;\n  border-radius: 3px;\n}\n\n.ace_search {\n  border-radius: 4px 0px 0px 4px !important;\n  border: none !important;\n  font-family: 'Roboto' !important;\n  padding: 5px !important;\n  font-size: 14px;\n  background: white !important;\n  width: 329px;\n  box-shadow: 0 2px 1px -1px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 1px 3px 0 rgba(0, 0, 0, 0.12);\n}\n\n.ace_search_field {\n  border-radius: 4px 0px 0px 4px !important;\n  padding: 2px 7px !important;\n  min-width: 32px !important;\n  width: 191px;\n}\n\n.ace_searchbtn {\n  padding: 2px 11px !important;\n}\n\n.ace_search_form.ace_nomatch {\n  border-radius: 4px;\n  outline: none !important;\n  border: 1px solid red;\n  margin-right: 23px !important;\n  width: calc(100% - 27px);\n}\n\n.ace_search_form.ace_nomatch .ace_search_field {\n  border-width: 0px !important;\n}\n\n.ace_search_form.ace_nomatch .ace_searchbtn {\n  border-width: 0px 0px 0px 1px !important;\n}\n\n.ace_replace_form {\n  margin-right: 23px !important;\n}\n\n.ace_searchbtn.prev,\n.ace_searchbtn.next {\n  padding: 2px 13px !important;\n}\n\n.ace_searchbtn.prev:after,\n.ace_searchbtn.next:after {\n  position: relative;\n}\n\n.ace_searchbtn.prev:after {\n  left: 2px;\n}\n\n.ace_searchbtn.next:after {\n  left: -2px;\n}\n\n.ace_button {\n  margin: 0px !important;\n  margin-right: 2px !important;\n  padding: 5px 10px !important;\n  font-size: 14px !important;\n  background: #fff !important;\n  line-height: 17px !important;\n  border-radius: 4px;\n  display: inline-block;\n  opacity: 1 !important;\n  color: #444 !important;\n  border: 1px solid #cbcbcb !important;\n}\n\n.ace_button:hover {\n  background: #f4f6ff !important;\n}\n\n.ace_button.checked {\n  border-color: #3399ff !important;\n}\n\n.ace_search_counter {\n  padding: 4px 10px !important;\n}\n\n.ace_search_form,\n.ace_replace_form {\n  margin-bottom: 5px !important;\n}\n\n.ace_search_options {\n  margin: 0px 23px 0px 0px !important;\n  height: 29px;\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/scss/main.scss",
    "content": "@import './helpers';\n@import './material-overrides';\n@import '~jsoneditor/dist/jsoneditor.css';\n@import './jsoneditor';\n@import './jsoneditor-dark';\n\n\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/scss/theme.scss",
    "content": "@import './colors';\n@include mat-core();\n\n/* Light theme */\n$primary: mat-palette($aupt-blue);\n$accent: mat-palette($aupt-green);\n$warn: mat-palette($aupt-red);\n$light-theme: mat-light-theme(\n  (\n    color: (\n      primary: $primary,\n      accent: $accent,\n      warn: $warn,\n    ),\n  )\n);\n\n/* Dark theme */\n$dark-primary: mat-palette($aupt-blue);\n$dark-accent: mat-palette($aupt-green);\n$dark-warn: mat-palette($mat-red);\n$dark-theme: mat-dark-theme($dark-primary, $dark-accent, $dark-warn);\n\n/*\n$custom-typography: mat-typography-config(\n  $font-family: 'Lato',\n  $headline: mat-typography-level(32px, 48px, 700),\n  $body-1: mat-typography-level(16px, 24px, 500)\n);\n\n@include angular-material-typography($custom-typography);\n*/\n\n/*\n@media (prefers-color-scheme: light) {\n  @include angular-material-theme($light-theme);\n}\n\n@media (prefers-color-scheme: dark) {\n  @include angular-material-theme($dark-theme);\n}\n*/\n\n/* You can add global styles to this file, and also import other style files */\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/styles.scss",
    "content": "@import 'tailwindcss/base';\n@import 'tailwindcss/components';\n@import 'tailwindcss/utilities';\n\n@import './scss/main';\n\nhtml,\nbody {\n  height: 100%;\n}\nbody {\n\t/* font-family: 'Roboto' !important; */\n  margin: 0px;\n  -webkit-font-smoothing: antialiased;\n}\n\nbutton {\n  outline: none !important;\n}\n\n::-webkit-scrollbar {\n  width: 10px;\n}\n\n/* Track */\n::-webkit-scrollbar-track {\n  background: #f1f1f1 !important;\n}\n\n/* Handle */\n::-webkit-scrollbar-thumb {\n  background: #4b6fff !important;\n}\n\n/* Handle on hover */\n::-webkit-scrollbar-thumb:hover {\n  background: #4b6fff !important;\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/src/test.ts",
    "content": "// This file is required by karma.conf.js and loads recursively all the .spec and framework files\n\nimport 'zone.js/dist/zone-testing';\nimport { getTestBed } from '@angular/core/testing';\nimport { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';\n\ndeclare const require: {\n  context(\n    path: string,\n    deep?: boolean,\n    filter?: RegExp\n  ): {\n    keys(): string[];\n    <T>(id: string): T;\n  };\n};\n\n// First, initialize the Angular testing environment.\ngetTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());\n// Then we find all the tests.\nconst context = require.context('./', true, /\\.spec\\.ts$/);\n// And load the modules.\ncontext.keys().map(context);\n"
  },
  {
    "path": "src/aup/dashboard/frontend/tailwind.config.js",
    "content": "module.exports = {\n  important: true,\n  theme: {\n    screens: {\n      xs: '599px',\n      sm: '600px',\n      md: '960px',\n      lg: '1280px',\n      xl: '1920px',\n    },\n    cursor: {\n      crosshair: 'crosshair',\n      'zoom-in': 'zoom-in',\n    },\n    container: {\n      center: true,\n    },\n  },\n  variants: {\n    borderColor: ['responsive', 'hover', 'focus', 'group-hover'],\n  },\n  corePlugins: {\n    outline: false,\n    borderColor: false,\n  },\n  plugins: [\n    function ({ addUtilities }) {\n      const newUtilities = {\n        '.truncate-none': {\n          overflow: 'unset',\n          'text-overflow': 'unset',\n          'white-space': 'unset',\n        },\n      };\n\n      addUtilities(newUtilities, {\n        variants: ['responsive'],\n      });\n    },\n  ],\n};\n"
  },
  {
    "path": "src/aup/dashboard/frontend/tsconfig.app.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"./out-tsc/app\",\n    \"types\": []\n  },\n  \"files\": [\"src/main.ts\", \"src/polyfills.ts\"],\n  \"include\": [\"src/**/*.ts\"],\n  \"exclude\": [\"src/test.ts\", \"src/**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/tsconfig.json",
    "content": "{\n  \"compileOnSave\": false,\n  \"compilerOptions\": {\n    \"baseUrl\": \"./\",\n    \"outDir\": \"./febuild/out-tsc\",\n    \"sourceMap\": true,\n    \"declaration\": false,\n    \"downlevelIteration\": true,\n    \"experimentalDecorators\": true,\n    \"module\": \"es2020\",\n    \"moduleResolution\": \"node\",\n    \"importHelpers\": true,\n    \"target\": \"es2015\",\n    \"typeRoots\": [\"node_modules/@types\"],\n    \"lib\": [\"es2018\", \"dom\"],\n    \"allowSyntheticDefaultImports\": true\n  },\n  \"angularCompilerOptions\": {\n    \"fullTemplateTypeCheck\": true,\n    \"strictInjectionParameters\": true\n  }\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/tsconfig.spec.json",
    "content": "/* To learn more about this file see: https://angular.io/config/tsconfig. */\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"./out-tsc/spec\",\n    \"types\": [\"jasmine\", \"node\"]\n  },\n  \"files\": [\"src/test.ts\", \"src/polyfills.ts\"],\n  \"include\": [\"src/**/*.spec.ts\", \"src/**/*.d.ts\"]\n}\n"
  },
  {
    "path": "src/aup/dashboard/frontend/webpack.config.js",
    "content": "module.exports = {\n  module: {\n    rules: [\n      {\n        test: /\\.scss$/,\n        loader: 'postcss-loader',\n        options: {\n          ident: 'postcss',\n          plugins: () => [require('tailwindcss'), require('autoprefixer')]\n        }\n      }\n    ]\n  }\n};\n"
  },
  {
    "path": "src/aup/dlconvert/.gitignore",
    "content": "tmp/\n"
  },
  {
    "path": "src/aup/dlconvert/README.md",
    "content": "# Converter\n\n**Converter** is a format conversion tool for machine learning models. It encapsulates best practices of individual Machine Learning model conversions under a single API.\n\nConverter allows you to:\n- **Make your models edge device-friendly.** Transform models in Checkpoint (.meta), Keras (.h5/.hdf5), SavedModel (directory name), Protobuf (.pb), and Pytorch (.pt) into edge-optimized ONNX (.onnx) and TensorFlow Lite (.tflite) formats.\n- **Enhance model interoperability through standardization.** Boost model compatibility with countless compilers, inference engines, and SoCs by converting it into the industry-standard ONNX format.\n- **Get a smaller and faster model.** Make your model more compact and efficient by leveraging *[Quantization] (#sec-quantization)* built into the TensorFlow Lite converter.\n\nThe following source model formats (and file extensions) can be converted to **TensorFlow Lite (.tflite)** and **ONNX (.onnx)**:  \n- **Checkpoint (.meta)**\n- **Keras (.h5/.hdf5)**\n- **SavedModel (directory name)**\n- **Protobuf (.pb)**\n- **PyTorch (.pt)**  \n\nAdditionally, Converter supports conversions:  \n- from Checkpoint to Protobuf\n- from Keras to Protobuf\n- from PyTorch to Keras\n\nTensorFlow 1.15, 2.1 - 2.3 and PyTorch 1.6.0 are tested. The conversion from SavedModel to TensorFlow Lite/ONNX requires TensorFlow version 2.x. Other conversions can be run using both TensorFlow 1.15 or 2.x. \n\n## Install\n\n*Note:* Converter leverages conversion libraries that have different version requirements (mainly for TensorFlow).\nIt is highly recommended to use Docker or Python's virtualenv to isolate your environment. \n\n1. Install Auptimizer\n2. If you would like to convert from Checkpoint/Keras/Protobuf/SavedModel model formats, please run:\n\n```bash\npip install keras2onnx tf2onnx\n``` \nIf you would like to convert from PyTorch format, please run:\n\n```bash\npip install pytorch2keras keras2onnx tf2onnx\n```\n\n## Usage\n\n1. **Recommended:** Check whether your model architecture is supported for the target conversion [*here*](/Examples/converter_examples/Tested_Models).\n\n2. **Important:** Ensure that you can load and run your model, otherwise you will not be able to convert it successfully.\n\n3. Specify conversion parameters. There are certain parameters to specify for each type of conversion. These parameters need to be written in a configuration *.json* file. You can list configurations for multiple model conversion tasks in a single .json file to execute model conversions sequentially. An example configuration for converting a VGG16 Keras model to ONNX is as follows:\n```bash\n    {\n        \"convert_from\":\"test_models/VGG16.h5\",\n        \"convert_to\":\"converted_models/VGG16_keras.onnx\",\n    }\n```\n\n4. After preparing the configuration .json file, run the following command to start the conversions.\n```bash\n    python -m aup.dlconvert -f <configuration json file> \n```\nAlternatively, you can also write the configuration in a *json dictionary* format, and run\n```bash\n    python -m aup.dlconvert -d <configuration json dictionary> \n```\n\n\n## Parameters\n\nFor **all** conversions, the two required parameters are **convert_from** and **convert_to**.\n\nFor each specific conversion, there can be additional parameters needed. These parameters are usually dependent on the source- and target model formats, and are summarized in the following chart:\n\n\n\n|  From      | To      | quantization | input_nodes | output_nodes | network_script network_name |input_shape| onnx_opset | frozen| savedmodel_tag savedmodel_signature\n| -----------| ------|-----------  |  -----------  | --------- | -----------  |  -----------  | --------- | ----------| ---------|\n| Keras      |TensorFlow Lite | Optional |  \n| SavedModel |TensorFlow Lite | Optional |   \n| Checkpoint |TensorFlow Lite | Optional | Required |Required |  | Optional    \n| Protobuf   |TensorFlow Lite | Optional |Required | Required | | Optional\n| PyTorch    |TensorFlow Lite| Optional  | | |Required|Required\n| Keras      |ONNX   |  | | | ||Optional | | |\n| SavedModel |ONNX   |  | | | ||Optional | | Optional \n| Checkpoint |ONNX   |  |Required | Required | | Optional|Optional     \n| Protobuf   |ONNX   |  |Required | Required | | Optional|Optional  \n| PyTorch    |ONNX   |  | | | Required |Required| Optional| \n| Keras      |Protobuf|  | | Required| |||Optional| |\n| Checkpoint |Protobuf|  | | Required| |||Optional| |\n| PyTorch    |Keras  |  | | | Required | Required\n\n\n**--convert_from**  \nRequired for **all** conversions. Input model file with one of the supported extensions: `.meta`, `.h5/.hdf5`, `.pb`, `.pt`, or a directory path for SavedModel.  \n\n**--convert_to**  \nRequired for **all** conversions. Output model name with one of the supported extensions: `.tflite`, `.onnx`, `.pb`, or `.h5/.hdf5`.  \n\n<a name=\"sec-quantization\">\n</a>\n\n**--quantization**  \nParameter *quantization* includes a group of parameters used for enabling quantization while converting to TensorFlow Lite format. Post-training quantization is a built-in functionality of the TensorFlow Lite Converter. The Converter API supports calling this functionality.\n\nTo specify quantization parameters, write in the configuration .json file:\n```bash\n   {\n        \"convert_from\":\"test_models/VGG16.h5\",\n        \"convert_to\":\"converted_models/VGG16_keras.tflite\",\n        \"quantization\": {\n            \"optimization\":\"default\",\n            \"type\":\"float16\",\n            \"opsset\":\"tf\",\n            \"load\":\"repdata.py\"\n        }\n    }\n```\n\nMore detail on post-training quantization capabilities and parameter setting can be found in [Post-training quantization](https://www.tensorflow.org/lite/performance/post_training_integer_quant#convert_to_a_tensorflow_lite_model)\n\n**--optimization**  \nEnable/disable quantization for conversion. Choose from `none` or `default`. Default is `none`. When using `none`, no quantization will be performed and the converted TensorFlow Lite model will be in float32 format. When using `default`, best practices will be applied for quantization with the other given information via `--type`, `--opsset`, and `--load`.\n\n**--type**  \nTarget data type for constant values of the converted TensorFlow Lite model. Choose from `float32`, `float16`, `int8`,and `uint8`. Default is `float32`. \n\n**--opsset**  \nSet of OpsSet options supported by the target device (experimental). Choose from  \n`tflite`, which refers to `[tensorflow.lite.OpsSet.TFLITE_BUILTINS]`,  \n`tf`, which refers to `[tensorflow.lite.OpsSet.SELECT_TF_OPS, tensorflow.lite.OpsSet.TFLITE_BUILTINS]`,   \n and `int8`, which refers to `[tensorflow.lite.OpsSet.TFLITE_BUILTINS_INT8]`. Default is `tflite`. \n\n**--load**  \nA python script that implements a data generation function that generates representative data for quantizing variable data, such as feature maps. The function should be named `get_dataset`, and it should be a generator function that yields large enough dataset to represent typical data values. Check [representative data](../../../Examples/converter_examples/Convert_Benchmark/repdata.py) for example.\n \n**--input_nodes**  \nModel input names (separated by comma), which can be found with [summarize graph tool](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/graph_transforms#inspecting-graphs). Those names typically end with `:0`, for example `input:0`.\n\n**--output_nodes**  \nModel output names (separated by comma). which can be found with [summarize graph tool](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/graph_transforms#inspecting-graphs). Those names typically end with `:0`, for example `output/Softmax:0`.\n\n**--input_shape**  \nIf the `input_nodes` in *protobuf* or *checkpoint* has unspecified shapes other than the 1st dimension, the `input_shape` needs to be specified by a comma separated string, for example `1,3,224,224`. For multiple `input_nodes`, use `;` to separate their corresponding `input_shape`.  \nThe shape of `input_nodes` can also be checked using the [summarize graph tool](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/graph_transforms#inspecting-graphs), where unspecified shape is usually represented by **-1**. \n\n**--network_script**  \nPath to a Python script that contains the model definition of the PyTorch model to be converted.\n\n**--network_name**  \nClass name of the model to be converted, defined in the script specified in `network_script` .\n\n**--onnx_opset**  \nOpset version to use for ONNX. Default is `10`. The ONNX opset version updates can be found in [ONNX release notes](https://github.com/onnx/onnx/releases).\n\n**--frozen**  \nFlag to control whether to create a frozen Protobuf. Default is `True`.  \n\n**--savedmodel_tag**  \nTag to use for SavedModel. Default is `serve`. The SavedModel to be converted *cannot have an emtpy tag*.\n\n**--savedmodel_signature**  \nSignature to use for SavedModel within the specified `--tag` value. Default is `serving_default`. The SavedModel to be converted *cannot have an emtpy signature*.\n\n**--skip**\nThis parameter is for converting selected models when there are multiple conversion configurations in the json file. When set to `True`, the model will be skipped and not be converted. Default is `False`. \n\n\n## Examples\nWe provide extensive examples on using model conversion in various use cases in [converter_examples](../../../Examples/converter_examples), including:\n\n1. Evaluating supported model architectures for each type of conversion [(*link*)](../../../Examples/converter_examples/Tested_Models)\n2. Benchmarking quantized TensorFlow Lite models on Android platform [(*link*)](../../../Examples/converter_examples/Convert_Benchmark)\n3. Profiling performances of converted models using Auptimizer Profiler [(*link*)](../../../Examples/converter_examples/Convert_Profiler)\n\nPlease check these examples for better utilization of Converter.\n\n\n### Known Issues\n- Limited support on certain model architectures\n- Quantization for TensorFlow Lite conversion can lead to [significant accuracy loss](https://github.com/tensorflow/tensorflow/issues/40000)\n"
  },
  {
    "path": "src/aup/dlconvert/__init__.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\"\"\""
  },
  {
    "path": "src/aup/dlconvert/__main__.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nDLconvert main entry\n====================\n\nConvert models to TFLite/ONNX format for deployment.\n\n.. code-block:: bash\n\n   $ python -m aup.dlconvert -f <conversion_json_file> \\\\\n\n\nSupport frameworks and model formats are:\n\n+ Keras `.h5`\n+ Keras `.hdf5`\n+ Savedmodel (directory)\n+ PyTorch `.pt`\n+ TF ProtoBuf `.pb`\n+ Checkpoint `.meta`\n+ TFLite `.tflite`\n+ ONNX `.onnx`\n\n\"\"\"\nimport argparse\nimport os\nimport sys\nimport json\n\nimport logging\nimport coloredlogs\nimport subprocess\n\nfrom ..utils import LOG_LEVEL\n\nos.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'  #disable tensorflow debugging messages\nlogger = logging.getLogger(\"aup.dlconvert\")\n\n\n\nMODEL_MAP = {\"h5\":\"keras\",\n             \"tflite\":\"tflite\",\n             \"onnx\":\"onnx\",\n             \"pb\":\"pb\",\n             \"hdf5\":\"keras\",\n             \"pt\":\"pytorch\",\n             \"meta\":\"checkpoint\"}\n\n\ndef _verify_file(filename):\n    assert len(filename) >= 2, \"Filename should be <x>.<type>\"\n    assert filename.split(\".\")[-1] in MODEL_MAP, \"unsupport file type for %s\"%filename\n\n    \ndef run_conversion(model, output, unknownargs):\n    if os.path.isdir(model):\n        from_model = \"savedmodel\"\n    else:\n        from_model = MODEL_MAP[model.split(\".\")[-1]]\n      \n    to_model = MODEL_MAP[output.split(\".\")[-1]]\n    func_to_call = \"aup.dlconvert.%s_to_%s -i %s -o %s\"%(from_model, to_model, model, output)\n    command = sys.executable + \" -m \" + func_to_call + \" \" + \" \".join(unknownargs)\n    logger.info(\"Running: \" + command)\n\n    proc = subprocess.Popen([command], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)\n    (out, err) = proc.communicate()\n    logger.debug(\"Conversion debug details:\" + str(out))\n    logger.debug(\"Conversion debug errors:\" + str(err))\n    success_code = proc.returncode\n    if success_code == 0:\n        logger.info(\"Conversion Success: \" + output)\n    else:\n        raise Exception(\"Conversion Failed\")\n    \n    \ndef get_parameters(job):\n    if not job['convert_from'] or not job['convert_to']:\n        logging.critical(\"The job does not have correct file details. Please provide a 'convert_from' and 'convert_to' parameters.\")\n        return (None, None, None) \n    model = job[\"convert_from\"]\n    output = job[\"convert_to\"]\n    skip = False #for testing purposes only, skipping the model the user does not want to convert\n    unknownargs = {}\n    if \"skip\" in job:\n        skip = (job[\"skip\"]==\"True\")\n        if skip:\n            return(model, output, skip, [])\n\n    if \"input_nodes\" in job:\n        unknownargs[\"input_nodes\"] = job[\"input_nodes\"]\n        \n    if \"output_nodes\" in job:\n        unknownargs[\"output_nodes\"] = job[\"output_nodes\"]\n        \n    if \"network_script\" in job:\n        unknownargs[\"net\"] = job[\"network_script\"]\n        \n    if \"network_name\" in job:\n        unknownargs[\"net_name\"] = job[\"network_name\"]\n        \n    if \"input_shape\" in job:\n        unknownargs[\"input_shape\"] = job[\"input_shape\"]\n        \n    if \"frozen\" in job:\n        unknownargs[\"frozen\"] = job[\"frozen\"]\n        \n    if \"onnx_opset\" in job:\n        unknownargs[\"opset\"] = job[\"onnx_opset\"]\n        \n    if \"savedmodel_tag\" in job:\n        unknownargs[\"tag\"] = job[\"savedmodel_tag\"]\n        \n    if \"savedmodel_signature\" in job:\n        unknownargs[\"signature\"] = job[\"savedmodel_signature\"]\n        \n    if \"quantization\" in job:\n        if \"optimization\" in job[\"quantization\"]:    \n            unknownargs[\"opt\"] = job[\"quantization\"][\"optimization\"]\n        if \"type\" in job[\"quantization\"]:\n            unknownargs[\"type\"] = job[\"quantization\"][\"type\"]\n        if \"opsset\" in job[\"quantization\"]:\n            unknownargs[\"ops\"] = job[\"quantization\"][\"opsset\"]\n        if \"load\" in job[\"quantization\"]:\n            unknownargs[\"load\"] = job[\"quantization\"][\"load\"]\n            \n    other_args = []\n    if \".onnx\" in output and \"opt\" in unknownargs:\n        unknownargs.pop(\"opt\")\n        \n    for key in unknownargs:\n        other_args.append(\"--\"+key+\" \"+unknownargs[key]+\" \")\n            \n    return(model, output, skip, other_args)\n\n\nif __name__ == \"__main__\":\n\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"-f\", \"--file\", required=False, help=\"Input conversion json file\")\n    parser.add_argument(\"-d\", \"--dic\", required=False, help=\"Input conversion json dictionary\")\n    parser.add_argument(\"--log\", default=\"info\", required=False, choices=[\"debug\", \"info\", \"warn\", \"error\"], help=\"log level\")\n    args, unknownargs = parser.parse_known_args()\n    \n    coloredlogs.install(level=LOG_LEVEL[args.log], fmt=\"%(name)s - %(levelname)s - %(message)s\")\n    \n    if args.file:\n        try:\n            with open(args.file) as f:\n                convert_dict = json.load(f)\n        except Exception as e:\n            logging.fatal(\"The json file could not be converted\")\n            raise e\n    elif args.dic:\n        try:\n            convert_dict = json.loads(args.dic)\n        except Exception as e:\n            logging.fatal(\"The json dictionary could not be converted\")\n            raise e\n    else:\n        logging.fatal(\"The json file or dictionary not provided\")\n        convert_dict={}\n\n    for job in convert_dict:\n        try:\n            (model, output, skip, unknownargs) = get_parameters(job)\n            if not skip:\n                logger.info(\"current job: \" + str(job))\n                run_conversion(model, output, unknownargs)\n        except:\n            logging.fatal(\"The following conversion job failed: \" + str(job))\n            continue\n         \n\n"
  },
  {
    "path": "src/aup/dlconvert/__version__.py",
    "content": "VERSION = \"0.2\""
  },
  {
    "path": "src/aup/dlconvert/checkpoint_to_onnx.py",
    "content": "#!/usr/bin/env python\n\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nCheckpoint to ONNX\n==================\n\nAdditional node tensor names are needed to convert TF checkpoint to ONNX.\nSee :func:`dlconvert.to_onnx.convert` for more information.\n\nExample\n-------\n\n.. code-block:: bash\n\n   $ python -m aup.dlconvert.checkpoint_to_onnx.py --model model_ckpt/ckpt.meta \\\\\n      --output model.onnx \\\\\n      --input_nodes input:0 \\\\\n      --output_nodes output/Softmax:0 \\\\\n      [--input_shape 1,224,224,3]\n\n\"\"\"\nfrom os import path\nfrom absl import flags, app\nfrom .utils import reset_flag\n\nFLAGS = flags.FLAGS\nreset_flag() \n\nfrom .to_onnx import convert_onnx # pylint: disable=wrong-import-position\n\nflags.DEFINE_string(\"model\", \"model_ckpt/ckpt.meta\", \"input model ckpt meta file path\", short_name=\"i\")\nflags.DEFINE_string(\"output\", \"model.onnx\", \"output onnx model\", short_name=\"o\")\nflags.DEFINE_string(\"input_nodes\", \"input:0\", \"model input names (sep by comma)\")\nflags.DEFINE_string(\"output_nodes\", \"label:0\", \"model output names (sep by comma)\")\nflags.DEFINE_string(\"input_shape\", None, \"input shape\")\nflags.register_validator(\"model\", path.isfile, message=\"Input checkpoint meta file is missing\")\n\n\ndef convert(model: str, output: str, input_nodes: str, output_nodes: str, input_shape: str):\n    \"\"\"Convert TF checkpoint to ONNX use `tf2onnx <https://github.com/onnx/tensorflow-onnx>`_ package.\n\n    Args:\n        model (str): meta file path\n        output (str): output onnx filename\n        input_nodes (str): model input names\n        output_nodes (str): model output names\n        [input_shape (str): model input shape, needed if input dimension is not specified in model graph]\n    \"\"\"\n    if input_shape is not None:\n        # match input_shape with input_node and recreate the input_nodes string\n        shapes = []\n        input_shapes = FLAGS.input_shape.split(\";\")\n        input_nodes = input_nodes.split(\",\")\n        new_input_nodes = []\n        for input_node, input_shape in zip(input_nodes, input_shapes):\n            new_input_node = input_node + \"[\" + input_shape + \"]\"\n            new_input_nodes.append(new_input_node)\n        input_nodes = \",\".join(new_input_nodes)\n\n    argv = {\"checkpoint\" : model, \n            \"output\" : output,\n            \"inputs\" : input_nodes,\n            \"outputs\" : output_nodes}\n    convert_onnx(**argv)\n\ndef _main(_):\n    convert(FLAGS.model, FLAGS.output, FLAGS.input_nodes, FLAGS.output_nodes, FLAGS.input_shape)\n\nif __name__ == \"__main__\":\n    app.run(_main)\n"
  },
  {
    "path": "src/aup/dlconvert/checkpoint_to_pb.py",
    "content": "#!/usr/bin/env python\n\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nCheckpoint to TF ProtoBuf\n=========================\n\nRequire checkpoint folder with `.meta` file.  Otherwise, please save the meta file manually before convertion.\n\nExample\n-------\n\n.. code-block:: bash\n\n   $ python -m aup.dlconvert.checkpoint_to_pb.py --model  model_ckpt/model.meta \\\\\n       --output model_frozen.pb \\\\\n       --frozen \\\\\n       --output_nodes output/Softmax:0\n\n\"\"\"\nfrom os import path\nfrom typing import List\nimport tensorflow.compat.v1 as tf # pylint: disable=import-error\nfrom absl import flags, app\nfrom .utils import reset_flag\n\nFLAGS = flags.FLAGS\nreset_flag()\n\n# pylint: disable=wrong-import-position\nfrom .to_frozen_pb import to_frozen\n\nflags.DEFINE_string(\"model\", \"model-ckpt/model.meta\", \"input model ckpt meta file path\", short_name=\"i\")\nflags.DEFINE_string(\"output\", \"model.pb\", \"output filename\", short_name='o')\nflags.DEFINE_bool(\"frozen\", True, \"create frozen protobuf\")\nflags.DEFINE_string(\"output_nodes\", \"\", \"model output names (separated by comma)\")\nflags.register_validator(\"model\", path.isfile, message=\"Input checkpoint meta file is missing\")\nflags.register_validator(\"output_nodes\", lambda x: len(x.split(','))>0, message=\"Provide at least one output node name\")\n\n\ndef convert(checkpoint_meta_file: str, frozen: bool = False, output_nodes: List[str] = ()) -> tf.GraphDef:\n    \"\"\"Convert TF Checkpoint to ProtoBuf\n\n    Args:\n        checkpoint_meta_file (str): checkpoint meta file name\n        frozen (bool, optional): to create a frozen graphdef. Defaults to False.\n        output_nodes (List[str], optional): A list of output node names for frozen graph. Defaults to ().\n\n    Returns:\n        tf.GraphDef: Tensorflow Graph to be written to file\n\n    \"\"\"\n    model_dir = path.dirname(checkpoint_meta_file)\n    ckpt = tf.train.get_checkpoint_state(model_dir)\n    g = tf.Graph()\n    with g.as_default():\n        saver = tf.train.import_meta_graph(ckpt.model_checkpoint_path+\".meta\",\n                                           clear_devices=True)\n        input_graph_def = g.as_graph_def()\n    with tf.Session(graph=g) as sess:\n        saver.restore(sess, ckpt.model_checkpoint_path)\n        if frozen:\n            input_graph_def = to_frozen(sess, output_nodes)    \n    return input_graph_def\n\n\ndef _main(_):\n    protobuf = convert(FLAGS.model, FLAGS.frozen, FLAGS.output_nodes.split(\",\"))\n    with open(FLAGS.output, \"wb\") as fp: # pylint: disable=invalid-name\n        fp.write(protobuf.SerializeToString())\n\n\nif __name__ == \"__main__\":\n    app.run(_main)\n"
  },
  {
    "path": "src/aup/dlconvert/checkpoint_to_tflite.py",
    "content": "#!/usr/bin/env python\n\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nCheckpoint to TFLite\n====================\n\nRequire checkpoint folder with `.meta` file.  Otherwise, please save the meta file manually before convertion.\n\nExample\n-------\n\n.. code-block:: bash\n\n   $ python -m aup.dlconvert.checkpoint_to_tflite.py --model  model_ckpt/ckpt.meta \\\\\n       --output model_tflite.tflite \\\\\n       --input_nodes input:0 \\\\\n       --output_nodes output/Softmax:0 \\\\\n       [--input_shape 1,224,224,3]\n\n\"\"\"\nfrom os import path, remove\nfrom typing import List\nimport tensorflow.compat.v1 as tf # pylint: disable=import-error\nfrom absl import flags, app\nfrom .utils import reset_flag\nimport logging\nlogger = logging.getLogger(\"aup.dlconvert\")\n\nFLAGS = flags.FLAGS\nreset_flag()\n\n# pylint: disable=wrong-import-position\nfrom .to_frozen_pb import to_frozen\nfrom .pb_to_tflite import model_loader\nfrom .to_tflite import create_converter\n\ndef convert(checkpoint_meta_file: str, output_nodes: List[str] = ()):\n    \"\"\"Convert TF Checkpoint to TFLite model\n\n    Args:\n        checkpoint_meta_file (str): checkpoint meta file name\n        output_nodes (List[str], optional): A list of output node names for frozen graph. Defaults to ().\n\n    Returns:\n        tflite model \n\n    \"\"\"\n    model_dir = path.dirname(checkpoint_meta_file)\n    ckpt = tf.train.get_checkpoint_state(model_dir)\n    # check if valid checkpoint file can be loaded\n    if ckpt is None:\n        return None\n    # convert to frozen graph first\n    g = tf.Graph()\n    with g.as_default():\n        saver = tf.train.import_meta_graph(ckpt.model_checkpoint_path+\".meta\",\n                                           clear_devices=True)\n        graph_def = g.as_graph_def()\n    with tf.Session(graph=g) as sess:\n        saver.restore(sess, ckpt.model_checkpoint_path)\n        graph_def = to_frozen(sess, output_nodes)  \n    \n    with open(\"tmp.pb\", \"wb\") as fp: \n        fp.write(graph_def.SerializeToString())  \n    # convert from froze protobuf to tflite\n    converter = create_converter(\"tmp.pb\", model_loader)\n    tflite_model = converter.convert()\n    \n    remove(\"tmp.pb\")\n    return tflite_model\n\ndef _main(_):\n    tflite_model = convert(FLAGS.model, FLAGS.output_nodes.split(\",\"))\n    try:\n        with open(FLAGS.output, \"wb\") as f:\n            f.write(tflite_model)\n    except Exception as e:\n        logging.fatal(\"No valid checkpoint file found\")\n        raise e\n\nif __name__ == \"__main__\":\n    app.run(_main)\n"
  },
  {
    "path": "src/aup/dlconvert/keras_to_onnx.py",
    "content": "#!/usr/bin/env python\n\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nKeras to ONNX\n=============\n\nDepends on `tf2onnx <https://github.com/onnx/tensorflow-onnx>`_ and\n`keras2onnx <https://github.com/onnx/keras-onnx>`_ (TF1.x support only).\nNeeds to import `tf2onnx` first to resolve dependency\notherwise import `keras2onnx` may result in error\n\nExample\n-------\n\n.. code-block:: bash\n\n   $ python -m aup.dlconvert.keras_to_onnx.py -i model.h5 -o model.onnx\n\n\"\"\"\nfrom os import path, environ\nenviron[\"TF_KERAS\"] = \"1\"\n\nimport tf2onnx\nimport keras2onnx # pylint: disable=import-error\n\nfrom absl import flags, app\nfrom tensorflow.compat.v1 import keras # pylint: disable=import-error\nfrom .utils import reset_flag\n\nFLAGS = flags.FLAGS\nreset_flag()\n\nflags.DEFINE_string(\"model\", \"model.h5\", \"input model\", short_name=\"i\")\nflags.DEFINE_string(\"output\", \"model.onnx\", \"output\", short_name=\"o\")\nflags.register_validator(\"model\", path.isfile, message=\"missing input model\")\n\n\ndef convert(model: str, output: str):\n    \"\"\"Convert Keras model to ONNX\n\n    Args:\n        model (str): Keras h5 model file path\n        output (str): output ONNX file path\n    \"\"\"\n    model = keras.models.load_model(model)\n    model = keras2onnx.convert_keras(model)\n    with open(output, \"wb\") as fp:\n        fp.write(model.SerializeToString())\n\n\ndef _main(_):\n    convert(FLAGS.model, FLAGS.output)\n\n\nif __name__ == \"__main__\":\n    app.run(_main)\n"
  },
  {
    "path": "src/aup/dlconvert/keras_to_pb.py",
    "content": "#!/usr/bin/env python\n\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nKeras to ProtoBuf\n=================\n\nExample\n-------\n\n.. code-block:: bash\n\n   $ python -m aup.dlconvert.keras_to_pb.py --model model.h5 \\\\\n       --output model.pb \\\\\n       --frozen \\\\\n       --output_nodes output/Softmax:0\n\n\"\"\"\nfrom os import path\nfrom typing import List\nfrom absl import flags, app\nimport tensorflow as tf\nfrom .utils import reset_flag\n\nFLAGS = flags.FLAGS\nreset_flag()\nfrom .to_frozen_pb import to_frozen # pylint: disable=wrong-import-position\n\nflags.DEFINE_string(\"model\", \"model.h5\", \"input model\", short_name=\"i\")\nflags.DEFINE_string(\"output\", \"model.pb\", \"output\", short_name=\"o\")\nflags.DEFINE_bool(\"frozen\", True, \"create frozen protobuf\")\nflags.DEFINE_string(\"output_nodes\", \"output/Softmax:0\", \"output nodes (separated by comma)\")\nflags.register_validator(\"model\", path.isfile, message=\"missing input model\")\n\n\ndef _to_graphdef():\n    sess = tf.compat.v1.keras.backend.get_session()\n    graph = sess.graph\n    return graph.as_graph_def()\n\n\ndef convert(model: str, frozen: bool = False, output_nodes: List[str] = ()) -> tf.compat.v1.GraphDef:\n    \"\"\"Convert Keras model to tensorflow graphdef\n\n    Args:\n        model (str): Keras model file name\n        frozen (bool, optional): To frozen graphdef. Defaults to False.\n        output_nodes (List[str], optional): output nodes, otherwise, use model outputs from Keras model. Defaults to ().\n\n    Returns:\n        tf.GraphDef: Tensorflow GraphDef\n    \"\"\"\n    model = tf.keras.models.load_model(model)\n    tf.compat.v1.keras.backend.set_learning_phase(0)\n    if frozen:\n        if not output_nodes:\n            output_nodes = model.output.op.name\n        sess = tf.compat.v1.keras.backend.get_session()\n        protobuf = to_frozen(sess, output_nodes)\n    else:\n        protobuf = _to_graphdef()\n    return protobuf\n\n\ndef _main(_):\n    protobuf = convert(FLAGS.model, FLAGS.frozen, FLAGS.output_nodes.split(\",\"))\n    with open(FLAGS.output, 'wb') as fp:\n        fp.write(protobuf.SerializeToString())\n\n\nif __name__ == \"__main__\":\n    app.run(_main)\n"
  },
  {
    "path": "src/aup/dlconvert/keras_to_tflite.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nKeras to TFlite\n===============\n\nSee :func:`dlconvert.to_tflite.setup_converter` for more control arguments for `tflite`.\n\nExample\n-------\n\n.. code-block:: bash\n\n   $ python -m aup.dlconvert.keras_to_tflite.py --model model.h5 \\\\\n       --output model_keras.tflite \\\\\n       [--load rep_data] \\\\\n       [--opt default --ops int8 --type int8]\n\n\"\"\"\nfrom os import path\nfrom tensorflow import lite, keras, __version__ # pylint: disable=no-name-in-module\nfrom absl import flags, app\nfrom .utils import reset_flag\n\nFLAGS = flags.FLAGS\nreset_flag()\n\nfrom .to_tflite import create_converter # pylint: disable=wrong-import-position\n\nflags.DEFINE_string(\"model\", \"model.h5\", \"input model\", short_name=\"i\")\nflags.DEFINE_string(\"output\", \"model.tflite\", \"output\", short_name=\"o\")\nflags.register_validator(\"model\", path.isfile, message=\"missing input model\")\n\n\ndef model_loader(filename: str) -> lite.TFLiteConverter:\n    \"\"\"TF 1/2 tflite converter loading function\n\n    Args:\n        filename (str): Keras model file\n\n    Returns:\n        lite.TFLiteConverter: TFLite converter to be used\n    \"\"\"\n    if __version__[0] == \"2\":\n        model = keras.models.load_model(filename)\n        return lite.TFLiteConverter.from_keras_model(model)\n    return lite.TFLiteConverter.from_keras_model_file(filename)\n\n\ndef convert(model: str, output: str):\n    \"\"\"Convert Keras model to tflite model\n\n    Args:\n        model (str): input model file name\n        output (str): output model file name\n    \"\"\"\n    converter = create_converter(model, model_loader)\n    tflite_model = converter.convert()\n    with open(output, \"wb\") as f:\n        f.write(tflite_model)   \n\n\ndef _main(_):\n    convert(FLAGS.model, FLAGS.output)\n\n\nif __name__ == \"__main__\":\n    app.run(_main)\n"
  },
  {
    "path": "src/aup/dlconvert/pb_to_onnx.py",
    "content": "#!/usr/bin/env python\n\n\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nProtoBuf to ONNX\n================\n\nInput and output node names are needed.\n\nExample\n-------\n\n.. code-block:: bash\n\n   $ python -m aup.dlconvert.pb_to_onnx.py --model model.pb --output model.onnx \\\\\n       --input_nodes input:0 --output_nodes output/Softmax:0 \\\\\n       [--input_shape 1,224,224,3]\n\n\"\"\"\nfrom os import path\nfrom absl import flags, app\nfrom .utils import reset_flag\n\nFLAGS = flags.FLAGS\nreset_flag()\n\nfrom . import to_onnx # pylint: disable=wrong-import-position\n\nflags.DEFINE_string(\"model\", \"model.pb\", \"input model\", short_name=\"i\")\nflags.DEFINE_string(\"output\", \"model.onnx\", \"output onnx model\", short_name=\"o\")\nflags.DEFINE_string(\"input_nodes\", \"input:0\", \"model input names (sep by comma)\")\nflags.DEFINE_string(\"output_nodes\", \"label:0\", \"model output names (sep by comma)\")\nflags.DEFINE_string(\"input_shape\", None, \"input shape\")\nflags.register_validator(\"model\", path.isfile, message=\"missing input model\")\n\ndef convert(model: str, output: str, input_nodes: str, output_nodes: str, input_shape: str):\n    \"\"\"Convert TF ProtoBuf to ONNX model\n\n    Args:\n        model (str): TF ProtoBuf file name\n        output (str): output ONNX model name\n        input_nodes (str): model input names\n        output_nodes (str): model output names\n        [input_shape (str): model input shape, needed if input dimension is not specified in model graph]\n    \"\"\"\n    if input_shape is not None:\n        # match input_shape with input_node and recreate the input_nodes string\n        shapes = []\n        input_shapes = FLAGS.input_shape.split(\";\")\n        input_nodes = input_nodes.split(\",\")\n        new_input_nodes = []\n        for input_node, input_shape in zip(input_nodes, input_shapes):\n            new_input_node = input_node + \"[\" + input_shape + \"]\"\n            new_input_nodes.append(new_input_node)\n        input_nodes = \",\".join(new_input_nodes)\n\n    argv = {\"graphdef\" : model, \n            \"output\" : output,\n            \"inputs\" : input_nodes,\n            \"outputs\" : output_nodes}\n    to_onnx.convert_onnx(**argv)\n\n\ndef _main(_):\n    convert(FLAGS.model, FLAGS.output,FLAGS.input_nodes, FLAGS.output_nodes, FLAGS.input_shape)\n\nif __name__ == \"__main__\":\n    app.run(_main)\n"
  },
  {
    "path": "src/aup/dlconvert/pb_to_tflite.py",
    "content": "#!/usr/bin/env python\n\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nProtoBuf to TFlite\n==================\n\nSee :func:`dlconvert.to_tflite.setup_converter` for more control arguments for `tflite`.\n\nExample\n-------\n\n.. code-block:: bash\n\n    $ python -m aup.dlconvert.pb_to_tflite \\\\\n        --model model.pb --output model.tflite \\\\\n        [--load rep_data] \\\\\n        [--opt default --ops int8 --type int8]\n        [--input_shape 1,224,224,3]\n\n\"\"\"\nfrom os import path\nimport logging\nfrom typing import List\nfrom absl import flags, app\nfrom tensorflow import lite, keras\nimport tensorflow as tf\nfrom .utils import reset_flag\n\nreset_flag()\n\n# pylint: disable=wrong-import-position\nfrom .to_tflite import create_converter\nfrom .spec_utils import pb\n\nlogger = logging.getLogger(__name__) # pylint: disable=invalid-name\n\ntf.compat.v1.disable_eager_execution()\n\nflags.DEFINE_string(\"model\", \"model.pb\", \"input model\", short_name=\"i\")\nflags.DEFINE_string(\"output\", \"model.tflite\", \"output\", short_name=\"o\")\nflags.DEFINE_string(\"input_nodes\", \"input:0\", \"input tensor names\")\nflags.DEFINE_string(\"output_nodes\", \"output/Softmax:0\", \"output tensor names\")\nflags.DEFINE_string(\"input_shape\", None, \"input shape\")\nflags.register_validator(\"model\", path.isfile, message=\"missing input model\")\nFLAGS = flags.FLAGS\n\ndef verify_input_names(input_names, graph_def):\n    \"\"\"Check if input_names are correct\n    \"\"\"\n    graph_nodes = set(pb.search_input_names(graph_def))\n    input_names = set(input_names)\n    if graph_nodes != input_names:\n        logger.fatal(\"Inconsistency in input nodes, graph has the following nodes:\\n%s\", \"\\n\".join(graph_nodes))\n        return False\n    return True\n\ndef verify_output_names(output_names, graph_def):\n    \"\"\"Check if output_names are correct\n    \"\"\"\n    flag = False\n    for n in output_names:\n        if not pb.verify_name(n, graph_def):\n            logger.fatal(\"%s is not found in graph\", n)\n            flag = True\n    if flag:\n        names = pb.search_output_names(graph_def)\n        logger.fatal(\"Potential output names:\\n%s\", \"\\n\".join(names))\n        return False\n    else:\n        return True\n\n\ndef find_node_shape(tensor_name:str, graph_def:tf.compat.v1.GraphDef) -> List[int]:\n    \"\"\"Find node shape for the given tensor name\n    \n    Args:\n        tensor_name (str): name of the tensor\n        graph_def (tf.compat.v1.GraphDef): TF GraphDef\n    \n    Raises:\n        ValueError: When node name is not in the graph\n    \n    Returns:\n        List[int]: tensor shape, excluding first (batch) dimension\n    \"\"\"\n    tensor_name = tensor_name.split(\":\")[0]  # if :x is given\n    shape = None\n    for n in graph_def.node:\n        if tensor_name in n.name:\n            shape = [i.size for i in n.attr['shape'].shape.dim]  \n            break\n    if shape is None:\n        raise ValueError(\"No match node for %s\"%tensor_name)\n    return shape[1:]\n\n\ndef model_loader(filename: str) -> lite.TFLiteConverter:\n    \"\"\"Load TF ProtoBuf (for TF v1 and v2)\n    \n    Args:\n        filename (str): ProtoBuf file name\n    \n    Returns:\n        lite.TFLiteConverter: TFLite converter\n    \"\"\"\n    input_names = FLAGS.input_nodes.split(\",\")\n    output_names = FLAGS.output_nodes.split(\",\")\n\n    # Overwrite default input_shape with user defined input_shape\n    if FLAGS.input_shape is not None:\n        shapes = []\n        input_shapes = FLAGS.input_shape.split(\";\")\n        for input_shape in input_shapes:\n            shape = [int(x) for x in input_shape.split(\",\")]\n            shapes.append(shape)\n\n    if tf.__version__[0] == \"2\":  # pylint: disable=no-member\n        # require frozen pb\n        logger.info(\"Tensorflow version 2.x\")\n        g = tf.Graph()\n        graph_def = pb.load_graphdef(filename)\n        if verify_input_names([i.split(\":\")[0] for i in input_names], graph_def):\n            logger.info(\"Correct input names\")\n        else:\n            raise Exception(\"Wrong input nodes\")\n        if verify_output_names([i.split(\":\")[0] for i in output_names], graph_def):\n            logger.info(\"Correct output names\")\n        else:\n            raise Exception(\"Wrong output nodes\")\n        # get input shapes\n        if not FLAGS.input_shape:\n            shapes = [find_node_shape(name, graph_def) for name in input_names]\n        else:\n            shapes = [shape[1:] for shape in shapes]\n            \n        # import protobuf and create Keras model\n        with g.as_default():\n            inputs = {}\n            for name, shape in zip(input_names, shapes):\n                inputs[name] = keras.layers.Input(shape=shape, name=\"input\")\n            tf.import_graph_def(graph_def, name=\"\", input_map=inputs)\n            tf_outputs = [g.get_tensor_by_name(name) for name in output_names]\n            model = keras.Model(inputs=inputs, outputs=tf_outputs)\n        return lite.TFLiteConverter.from_keras_model(model)\n    else:\n        logger.info(\"Tensorflow version 1.x\")\n        input_names = [i.split(':')[0] for i in input_names]\n        output_names = [i.split(':')[0] for i in output_names]\n        try:\n            tflite_model = lite.TFLiteConverter.from_frozen_graph(filename, input_names, output_names)\n        except Exception as e:\n            graph_def = pb.load_graphdef(filename)\n            if verify_input_names(input_names, graph_def):\n                logger.info(\"Correct input names\")\n            if verify_output_names(output_names, graph_def):\n                logger.info(\"Correct output names\")\n            raise e\n        return tflite_model\n\n\ndef _main(_):\n    logger.setLevel(logging.INFO)\n    converter = create_converter(FLAGS.model, model_loader)\n    tflite_model = converter.convert()\n    with open(FLAGS.output, \"wb\") as f:\n        f.write(tflite_model)\n\nif __name__ == \"__main__\":\n    app.run(_main)\n"
  },
  {
    "path": "src/aup/dlconvert/pytorch_to_keras.py",
    "content": "#!/usr/bin/env python\n\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nPyTorch to Keras\n================\n\nUse https://github.com/nerox8664/pytorch2keras for conversion.\n\nExample\n-------\n\n.. code-block:: bash\n\n   $ python -m aup.dlconvert.pytorch_to_keras -i model.pt -o model.h5 \\\\\n       --input_shape 1,3,224,224 --net net.py --net_name Net\n\n\"\"\"\nimport tf2onnx # to resolve import error of pytorch2keras\nfrom pytorch2keras import pytorch_to_keras\nfrom typing import List\nfrom os import path\nimport torch\nfrom absl import flags, app\nfrom .utils import reset_flag, load_package\n\nFLAGS = flags.FLAGS\nreset_flag()\n\nflags.DEFINE_string(\"model\", \"model.pt\", \"input model\", short_name=\"i\")\nflags.DEFINE_string(\"output\", \"model.h5\", \"output keras model\", short_name=\"o\")\nflags.DEFINE_list(\"input_shape\", \"1,3,224,224\", \"input tensor shape\")\nflags.DEFINE_string(\"net\", \"net.py\", \"network definition file\")\nflags.DEFINE_string(\"net_name\", \"Net\", \"class name of the defined network\")\nflags.register_validator(\"model\", path.isfile, message=\"missing input model\")\nflags.register_validator(\"net\", path.isfile, message=\"missing model definition file\")\n\n\ndef convert(model: str, output: str, input_shape: List[int], net_path, net_name):\n    \"\"\"Convert PyTorch model to Keras model\n    \n    Args:\n        model (str): PyTorch model file path\n        output (str): output file name for Keras model\n        input_shape (List[int]): Tensor shape for input\n        net_path ([type]): Python script defines the model\n        net_name ([type]): PyTorch model class in the `net_path` file.\n    \"\"\"\n    x = torch.randn(*input_shape, requires_grad=True) # pylint: disable=no-member\n    load_package(net_path, net_name)\n    model = torch.load(model)\n    k_model = pytorch_to_keras(model, x, [input_shape[1:]], verbose=False)\n\n    # Export the model\n    k_model.save(output)\n\n\ndef _main(_):\n    input_shape = [int(i) for i in FLAGS.input_shape]\n    convert(FLAGS.model, FLAGS.output, input_shape, FLAGS.net, FLAGS.net_name)\n\n\nif __name__ == \"__main__\":\n    app.run(_main)"
  },
  {
    "path": "src/aup/dlconvert/pytorch_to_onnx.py",
    "content": "#!/usr/bin/env python\n\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nPyTorch to ONNX\n================\n\nUse https://github.com/nerox8664/pytorch2keras for conversion.\n\nExample\n-------\n\n.. code-block:: bash\n\n   $ python -m aup.dlconvert.pytorch_to_onnx -i model.pt -o model.onnx \\\\\n       --input_shape 1,3,224,224 --net net.py --net_name Net\n\n\"\"\"\nfrom os import path\nfrom typing import List\nimport torch\nfrom absl import flags, app\nfrom .utils import reset_flag, load_package\n\nFLAGS = flags.FLAGS\nreset_flag()\n\nflags.DEFINE_string(\"model\", \"model.pt\", \"input model\", short_name=\"i\")\nflags.DEFINE_string(\"output\", \"model.onnx\", \"output onnx model\", short_name=\"o\")\nflags.DEFINE_list(\"input_shape\", \"1,3,224,224\", \"input tensor shape\")\nflags.DEFINE_string(\"net\", \"net.py\", \"network definition file\")\nflags.DEFINE_string(\"net_name\", \"Net\", \"class name of the defined network\")\nflags.register_validator(\"model\", path.isfile, message=\"missing input model\")\nflags.register_validator(\"net\", path.isfile, message=\"missing model definition file\")\n\n\ndef convert(model: str, output: str, input_shape: List[int], net_path: str, net_name: str):\n    x = torch.randn(*input_shape) # pylint: disable=no-member\n    load_package(net_path, net_name)\n    model = torch.load(model)\n    print(\"Pytorch model loaded\")\n    _ = model(x)\n    model.eval()\n\n    # Export the model\n    torch.onnx.export(model, x, output,\n                  input_names = ['input'], output_names = ['output'], \n                  do_constant_folding=True   # whether to execute constant folding for optimization\n                  )\n    print(\"Model exported to ONNX\")\n\ndef _main(_):\n    input_shape = [int(i) for i in FLAGS.input_shape]\n    convert(FLAGS.model, FLAGS.output, input_shape, FLAGS.net, FLAGS.net_name)\n\n\nif __name__ == \"__main__\":\n    app.run(_main)\n"
  },
  {
    "path": "src/aup/dlconvert/pytorch_to_tflite.py",
    "content": "#!/usr/bin/env python\n\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nPyTorch to TFLite\n=================\n\nUse https://github.com/nerox8664/pytorch2keras for conversion.\n\nExample\n-------\n\n.. code-block:: bash\n\n   $ python -m dlconvert.pytorch_to_keras -i model.pt -o model.h5 \\\\\n       --input_shape 1,3,224,224 --net net.py --net_name Net\n\n\"\"\"\nimport tf2onnx # to resolve potential import error of pytorch2keras\nfrom pytorch2keras import pytorch_to_keras\nfrom tensorflow import lite, keras, __version__ \nfrom typing import List\nfrom os import path, remove\nimport torch\nfrom absl import flags, app\nfrom .utils import reset_flag\n\nFLAGS = flags.FLAGS\nreset_flag()\n\nfrom .utils import load_package\nfrom .to_tflite import create_converter\n\nflags.DEFINE_string(\"model\", \"model.pt\", \"input model\", short_name=\"i\")\nflags.DEFINE_string(\"output\", \"model.h5\", \"output keras model\", short_name=\"o\")\nflags.DEFINE_list(\"input_shape\", \"1,3,224,224\", \"input tensor shape\")\nflags.DEFINE_string(\"net\", \"net.py\", \"network definition file\")\nflags.DEFINE_string(\"net_name\", \"Net\", \"class name of the defined network\")\nflags.register_validator(\"model\", path.isfile, message=\"missing input model\")\nflags.register_validator(\"net\", path.isfile, message=\"missing model definition file\")\n\ndef model_loader(filename: str) -> lite.TFLiteConverter:\n    \"\"\"TF 1.x and 2.x tflite converter loading function\n\n    Args:\n        filename (str): Keras model file\n\n    Returns:\n        lite.TFLiteConverter: TFLite converter to be used\n    \"\"\"\n    if __version__[0] == \"2\":\n        model = keras.models.load_model(filename)\n        return lite.TFLiteConverter.from_keras_model(model)\n    return lite.TFLiteConverter.from_keras_model_file(filename)\n\ndef convert(model: str, output: str, input_shape: List[int], net_path, net_name):\n    \"\"\"Convert PyTorch model to tfLite model\n    \n    Args:\n        model (str): PyTorch model file path  \n        output (str): output file name for Keras  \n        input_shape (List[int]): Tensor shape for input  \n        net_path ([type]): Python script defines the model  \n        net_name ([type]): PyTorch model class in the `net_path` file.\n    \"\"\"\n    \n    x = torch.randn(*input_shape, requires_grad=True) # pylint: disable=no-member\n    load_package(net_path, net_name)\n    model = torch.load(model)\n    \n    # convert to keras model first\n    # change_ordering experimental, change BCHW to BHWC to enable conversion to tflite\n    k_model = pytorch_to_keras(model, x, [input_shape[1:]], verbose=False, change_ordering = True)\n    k_model.save(\"tmp.h5\")\n\n    # convert to tflite model\n    converter = create_converter(\"tmp.h5\", model_loader)\n    tflite_model = converter.convert()\n    with open(output, \"wb\") as f:\n        f.write(tflite_model) \n    remove(\"tmp.h5\")\n      \n\ndef _main(_):\n    input_shape = [int(i) for i in FLAGS.input_shape]\n    convert(FLAGS.model, FLAGS.output, input_shape, FLAGS.net, FLAGS.net_name)\n\nif __name__ == \"__main__\":\n    app.run(_main)"
  },
  {
    "path": "src/aup/dlconvert/savedmodel_to_onnx.py",
    "content": "#!/usr/bin/env python\n\n\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nSavedModel to ONNX\n==================\n\n**Not working**\n\nExample\n-------\n\n.. code-block:: bash\n\n   $ python -m aup.dlconvert.savedmodel_to_onnx.py --model savedModel/ --output model.onnx\n\n\"\"\"\nfrom os import path\nfrom absl import flags, app\nfrom .utils import reset_flag\nimport logging\n\nlogger = logging.getLogger(__name__)\nFLAGS = flags.FLAGS\nreset_flag()\nfrom .to_onnx import convert_onnx # pylint: disable=wrong-import-position\n\nflags.DEFINE_string(\"model\", \"saved_model\", \"input savedmodel folder path\", short_name=\"i\")\nflags.DEFINE_string(\"output\", \"model.onnx\", \"output onnx model\", short_name=\"o\")\nflags.DEFINE_string(\"tag\", \"serve\", \"tag to use for saved_model\")\nflags.DEFINE_string(\"signature\", \"serving_default\", \"signature to use from saved_model\")\nflags.DEFINE_string(\"concrete_function\", None, \"For TF2.x saved_model, index of func signature in __call__ (--signature_def is ignored)\")\nflags.register_validator(\"model\", path.isdir, message=\"missing input model\")\n\n\ndef convert(model: str, output: str, tag: str, signature: str, concrete_function: str):\n    \"\"\"Convert TF SavedModel to ONNX (currently only support TF2 and TF2 SavedModels)\n\n    Args:\n        model (str): TF SavedModel folder path\n        output (str): ONNX output filename\n        tag (str, optional): tag to use for SavedModel, default is \"serve\"\n        signature (str, optional): signature to use for SavedModel, default is \"serving_default\"\n        concrete_function (str, optional): index of func signature in __call__ to use instead of signature], default is None\n    \"\"\"\n    if model[-1] != \"/\":\n        model += \"/\"\n    argv = {\"saved-model\" : model, \n            \"output\" : output,\n            \"tag\" : tag,\n            \"signature_def\" : signature}\n    if concrete_function is not None:\n        argv[\"concrete_function\"] = concrete_function\n    \n    convert_onnx(**argv)\n\n\ndef _main(_):\n    convert(FLAGS.model, FLAGS.output, FLAGS.tag, FLAGS.signature, FLAGS.concrete_function)\n\nif __name__ == \"__main__\":\n    app.run(_main)\n"
  },
  {
    "path": "src/aup/dlconvert/savedmodel_to_tflite.py",
    "content": "#!/usr/bin/env python\n\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nSavedModel to tflite\n====================\n\n*Based on the version of ops, it may fail.*\n\nExample\n-------\n\n.. code-block:: bash\n\n   $ python -m aup.dlconvert.savedmodel_to_tflite.py --model model/ \\\\\n       --output model_keras.tflite \\\\\n       [--load rep_data] \\\\\n       [--opt default --ops int8 --type int8]\n\n\"\"\"\nfrom os import path, environ\nenviron['TF_CPP_MIN_LOG_LEVEL'] = '3'  #disable tensorflow debugging messages\n\nfrom tensorflow import lite, keras, saved_model\nfrom absl import flags, app\nfrom .utils import reset_flag\n\nimport logging\nimport coloredlogs\nfrom ..utils import LOG_LEVEL\nlogger = logging.getLogger(\"aup.dlconvert\")\n\nFLAGS = flags.FLAGS\nreset_flag()\n\nfrom .to_tflite import create_converter # pylint: disable=wrong-import-position\n\nflags.DEFINE_string(\"model\", \"model\", \"input model path\", short_name=\"i\")\nflags.DEFINE_string(\"output\", \"model.tflite\", \"output\", short_name=\"o\")\nflags.register_validator(\"model\", path.isdir, message=\"missing input model\")\n\n\ndef model_loader(foldername:str) -> lite.TFLiteConverter:\n    \"\"\"Function to load model file into `TFLiteConverter`.\n    \n    Args:\n        foldername (str): file name\n    \n    Returns:\n        lite.TFLiteConverter: TFLiteConverter to create tflite model\n    \"\"\"\n    return lite.TFLiteConverter.from_saved_model(foldername)\n\n\ndef _main(_):\n    # cannot convert savedmodel with empty SignatureMap\n    model = saved_model.load(FLAGS.model)\n    if len(model.signatures) == 0:\n        logger.info(\"Savedmodel cannot be converted with empty signature map! Please check model.signatures before conversion.\")\n        raise ValueError\n\n    converter = create_converter(FLAGS.model, model_loader)\n    tflite_model = converter.convert()\n    with open(FLAGS.output, \"wb\") as f:\n        f.write(tflite_model)\n\nif __name__ == \"__main__\":\n    app.run(_main)\n\n    \n    \n\n"
  },
  {
    "path": "src/aup/dlconvert/spec_utils/__init__.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\"\"\""
  },
  {
    "path": "src/aup/dlconvert/spec_utils/pb.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nfrom google.protobuf import text_format\nimport tensorflow as tf\nfrom typing import List\n\nCONST_NAME=set([\"Assign\",\"Const\",\"Shape\"])\n\ndef load_graphdef(filename:str) -> tf.compat.v1.GraphDef:\n    if \"pbtxt\" in filename:\n        graph_def = text_format.Parse(open(filename, 'r').read(), tf.compat.v1.GraphDef())\n    else:\n        graph_def = tf.compat.v1.GraphDef()\n        graph_def.ParseFromString(open(filename, 'rb').read()) \n    return graph_def\n\n\ndef verify_name(name: str, graphdef: tf.compat.v1.GraphDef) -> bool:\n    \"\"\"Verify the name is in graph\n    \n    Arguments:\n        name {str} -- node name\n        graphdef {tf.compat.v1.GraphDef} -- TF Graph definition\n    \n    Returns:\n        bool -- Whether node name is in graph\n    \"\"\"\n    for n in graphdef.node:\n        if name == n.name:\n            return True\n    return False    \n\n\ndef search_input_names(graphdef: tf.compat.v1.GraphDef) -> List[str]:\n    \"\"\"Search for input nodes\n    \n    Arguments:\n        graphdef {tf.compat.v1.GraphDef} -- TF Graph definition\n    \n    Returns:\n        List[str] -- List of input node names\n    \"\"\"\n    res = []\n    for n in graphdef.node:\n        if n.op == \"Placeholder\":\n            res.append(n.name)\n    return res\n\n\ndef search_output_names(graphdef: tf.compat.v1.GraphDef) -> List[str]:\n    nodes = set(n.name for n in graphdef.node if n.name.split(\"/\")[-1] not in CONST_NAME)\n    for n in graphdef.node:\n        for input_node in n.input:\n            if input_node in nodes:\n                nodes.remove(input_node)\n    return list(nodes)"
  },
  {
    "path": "src/aup/dlconvert/to_frozen_pb.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nConvert to TF frozen ProtoBuf\n=============================\n\"\"\"\nfrom typing import List\nimport logging\nimport tensorflow.compat.v1 as tf # pylint: disable=import-error\n\ntf.disable_eager_execution()\nlogger = logging.getLogger(__name__) # pylint: disable=invalid-name\n\n\ndef to_frozen(sess: tf.Session, output_nodes: List[str], clear_devices: bool = True) -> tf.GraphDef:\n    \"\"\"Convert to TF frozen ProtoBuf based on current TF session.  \n    See `reference <https://stackoverflow.com/questions/45466020/how-to-export-keras-h5-to-tensorflow-pb>`_.\n\n    Args:\n        sess (tf.Session): TF session contains the compute graph\n        output_nodes (List[str]): list of output node names\n        clear_devices (bool, optional): to clear device placement. Defaults to True.\n\n    Returns:\n        tf.GraphDef: frozen GraphDef to write to ProtoBuf\n    \"\"\"\n    graph = sess.graph\n    for i, output_node in enumerate(output_nodes):\n        if \":\" in output_node:\n            logger.info(\"remove ':x' from tensor name %s\", output_node)\n            output_nodes[i] = output_node.split(\":\")[0]\n    input_graph_def = graph.as_graph_def()\n    if clear_devices:\n        for node in input_graph_def.node:\n            node.device = ''\n    try:\n        frozen_graph = tf.graph_util.convert_variables_to_constants(\n            sess, input_graph_def, output_nodes)\n    except AssertionError as error:\n        logger.fatal('find mis-match graph')\n        raise error\n    return frozen_graph\n"
  },
  {
    "path": "src/aup/dlconvert/to_onnx.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nConvert to ONNX\n===============\n\nBased on tf2onnx version>=1.6.0\nSee `more arguments <https://github.com/onnx/tensorflow-onnx>`_.\n\n\"\"\"\nimport sys\nfrom tf2onnx import convert\nfrom absl import flags\n\nflags.DEFINE_string(\"opset\", \"10\", \"opset version to use for onnx\")\nFLAGS = flags.FLAGS\n\n\ndef convert_onnx(**kwargs):\n    # https://github.com/onnx/tensorflow-onnx\n    # sys.argv = ['checkpoint2onnx.py', \n    #             \"--inputs\", FLAGS.input_nodes,\n    #             \"--outputs\", FLAGS.output_nodes]\n    sys.argv = [\"convert.py\",\n                \"--opset\", FLAGS.opset]\n    # add specific arguments for conversions from different source format\n    for k, v in kwargs.items():\n        sys.argv.extend([\"--%s\" % k, \"%s\" % v])\n    convert.main()\n"
  },
  {
    "path": "src/aup/dlconvert/to_tflite.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nConvert to TFLite\n=================\n\nThere are four major control parameters for tflite runtime, see :func:`.setup_tfconverter`.\n\nThe data feeding function (`data_fun`) is loaded by `--load`, where the argument is the Python filename defining\n`get_data()` to `generate data <https://www.tensorflow.org/lite/performance/post_training_integer_quant#convert_using_quantization>`_ for `int8` quantization. \nCombine with `--undefok` flag to pass more control arguments.\n\n\"\"\"\nimport logging\nfrom os import path, environ\nenviron['TF_CPP_MIN_LOG_LEVEL'] = '3'  #disable tensorflow debugging messages\nfrom typing import Callable\nimport numpy as np\nfrom absl import flags\nfrom tensorflow import lite\n\n\nlogger = logging.getLogger(__name__)  # pylint: disable=invalid-name\n\ntry:\n    from tensorflow import enable_eager_execution  # pylint: disable=no-name-in-module\n\n    enable_eager_execution()\nexcept Exception:  # pylint: disable=broad-except\n    logger.fatal(\"Compatibility issue with TF eager execution. Tweak with caution.\")\n\ntry:\n    from tensorflow.lite.python import lite_constants\nexcept ImportError:\n    from tensorflow.lite import constants as lite_constants\n\nflags.DEFINE_string(\"opt\", \"none\", \"optimization\")\nflags.DEFINE_string(\"type\", \"float\", \"data type after quantization\")\nflags.DEFINE_string(\"ops\", \"tflite\", \"operation set to be used for quantization\")\n# -- optional for representative data\nflags.DEFINE_string(\"load\", \"\", \"use representative data defined in additional python file\", short_name=\"d\")\n\n# when using quantization, OPT_ARGS needs to be set to \"default\"\nOPT_ARGS = {\n    \"default\": [lite.Optimize.DEFAULT],\n    \"none\": [],\n}\nflags.register_validator(\"opt\", lambda x: x in OPT_ARGS, \"Keyword not recognized, choose from %s\" % OPT_ARGS.keys())\n\nOPS_ARGS = {\n    \"int8\": [lite.OpsSet.TFLITE_BUILTINS_INT8],\n    \"tflite\": [lite.OpsSet.TFLITE_BUILTINS],  # default\n    \"tf\": [lite.OpsSet.SELECT_TF_OPS, lite.OpsSet.TFLITE_BUILTINS],\n}\nflags.register_validator(\"ops\", lambda x: x in OPS_ARGS, \"Keyword not recognized, choose from %s\" % OPS_ARGS.keys())\n\nTYPE_ARGS = {\n    \"float\": [lite_constants.FLOAT],  # tf.float32, default\n    \"int8\": [lite_constants.INT8],  # tf.int8\n    \"float16\": [lite_constants.FLOAT16],  # tf.float16 -> tensorflow>=1.15\n    \"uint8\": [lite_constants.QUANTIZED_UINT8],  # tf.uint\n}\nflags.register_validator(\"type\", lambda x: x in TYPE_ARGS, \"Keyword not recognized, choose from %s\" % TYPE_ARGS.keys())\nFLAGS = flags.FLAGS\n\n\ndef setup_tfconverter(\n    converter: lite.TFLiteConverter, dtype: str, opt: str, ops: str, data_fun: Callable = None\n) -> lite.TFLiteConverter:\n    \"\"\"Setup control arguments for `TFLiteConverter <https://www.tensorflow.org/lite/convert>`_\n    \n    Args:\n        converter (lite.TFLiteConverter): loaded `TFLiteConverter`.\n        dtype (str): data types: `float`, `float16`, `int8`, `uint8`.\n        opt (str): optimization: `none` for `float`, `default` for ther data types.\n        ops (str): operation sets: `tflite`, `tf`, `int8`.\n        data_fun (Callable, optional): [description]. Defaults to None.\n    \n    Returns:\n        lite.TFLiteConverter: `TFLiteConverter` with additional arguments set up.\n    \"\"\"\n\n    if data_fun:\n        converter.representative_dataset = data_fun\n    converter.optimizations = OPT_ARGS[opt]\n    converter.target_spec.supported_ops = OPS_ARGS[ops]\n    converter.target_spec.supported_types = TYPE_ARGS[dtype]\n    return converter\n\n\ndef create_converter(model: str, model_loader: Callable[[str], lite.TFLiteConverter]) -> lite.TFLiteConverter:\n    \"\"\"Setup the TFLite converter\n\n    Args:\n        model (str): model filename\n        model_loader (Callable[[str], lite.TFLiteConverter]): function to load model file and return a `TFLiteConverter`\n\n    Returns:\n        lite.TFLiteConverter: `TFLiteConverter` with additional arguments set up.\n\n    \"\"\"\n    if FLAGS.type != \"float\":\n        assert FLAGS.opt != \"none\", \"--opt=default is required for quantization.\"\n    else:\n        assert FLAGS.opt == \"none\", \"--opt=none is required for float32 operation.\"\n\n    converter = model_loader(model)\n    if FLAGS.load:\n        try:\n            import sys, importlib\n\n            sys.path.insert(0, path.dirname(path.abspath(FLAGS.load)))\n            mod = path.basename(FLAGS.load).rstrip(\".py\")\n            mod = importlib.import_module(mod)\n            get_dataset = getattr(mod, \"get_dataset\")\n        except Exception as error:  # pragma: no cover\n            logger.fatal(\"Failed to import get_dataset from %s.py\", FLAGS.load)\n            raise error\n        data = get_dataset()\n\n        def data_gen():\n            for i in data:\n                yield [i[0].numpy().astype(np.float32)]\n\n    else:\n        data_gen = None\n    return setup_tfconverter(converter, FLAGS.type, FLAGS.opt, FLAGS.ops, data_gen)\n"
  },
  {
    "path": "src/aup/dlconvert/utils.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\n\"\"\"\nimport sys, importlib\nfrom os import path\nfrom typing import Callable\n\nKNOWN_FLAGS=[\"logtostderr\",\"alsologtostderr\", \"log_dir\", \"v\", \"verbosity\", \"stderrthreshold\", \"showprefixforinfo\", \\\n    \"run_with_pdb\", \"pdb_post_mortem\", \"run_with_profiling\", \"profile_file\", \"use_cprofile_for_profiling\", \\\n    \"only_check_args\", \"help\", \"helpshort\", \"helpfull\", \"helpxml\", \"logger_levels\"]\n\n\ndef load_package(filename: str, function: Callable) -> Callable:\n    \"\"\"Load a function/class from a script \"filename\"\n    \"\"\"\n    sys.path.insert(0, path.dirname(path.abspath(filename)))\n    mod = path.basename(filename).rstrip(\".py\")\n    mod = importlib.import_module(mod)\n    return getattr(mod, function)\n\n\ndef reset_flag():\n    \"\"\"Reset absl.flags\n    \"\"\"\n    from absl import flags\n    FLAGS = flags.FLAGS # pylint: disable=invalid-name\n    for name in list(FLAGS):\n        if name not in KNOWN_FLAGS:\n            delattr(FLAGS, name)\n"
  },
  {
    "path": "src/aup/init.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nInitialize experiment\n=====================\n\nSee :doc:`algorithm` for how to initialize the experiment search strategy.\n\nAdditional arguments\n--------------------\n\n.. program-output:: python3 -m aup.init -h\n\n\"\"\"\nimport importlib\nimport json\nimport logging\nimport os\nfrom collections import defaultdict\n\nimport click\nimport coloredlogs\nfrom six.moves import input\n\nfrom .Proposer import PROPOSERS\nfrom .utils import LOG_LEVEL, get_default_connector, DEFAULT_AUPTIMIZER_PATH, get_from_options\n\nlogger = logging.getLogger(\"aup.init\")\n\n\ndef _set_script(default=\"\"):\n    script = input(\"training script name [%s]:\" % default) or default\n    if not os.path.isfile(script):\n        logger.critical(\"File %s doesn't exist, create it before experiment\" % script)\n        if not os.access(script, os.X_OK):\n            logger.fatal(\"File is not self-executable, please do `chmod u+x %s`!\" % script)\n    return script\n\n\ndef _set_proposer(default=\"\"):\n    default = default or \"random\"\n    config = dict()\n    config[\"proposer\"] = get_from_options(\"proposer\", PROPOSERS.keys(), default=default)\n    proposer = PROPOSERS[config['proposer']]\n    mod = importlib.import_module(\".\" + proposer, \"aup.Proposer\")\n    cls = getattr(mod, proposer)\n    config.update(cls.setup_config())\n    return config\n\n\ndef _set_parallel(resource, cursor, default=1):\n    cursor.execute(\"SELECT COUNT(*) FROM resource WHERE type=?;\", (resource,))\n    nparallel = cursor.fetchone()[0]\n    val = [i for i in range(1, nparallel + 1)]\n    nparallel = get_from_options(\"Number of parallel execution on %s, up to %d\" %\n                                 (resource, nparallel), val, default=default)\n\n    return nparallel\n\n\ndef _get_workingdir(res, default=\"\"):\n    if res in ('node', 'aws'):\n        cwd = input(\"working path on remote machine [%s]:\" % default) or default\n        if not cwd:\n            logger.fatal(\"No path specified, exit!\")\n            exit(1)\n    else:\n        cwd = default or os.getcwd()\n        cwd = input(\"working path, [default:%s]:\" % cwd) or cwd\n    return cwd\n\n\ndef _update(config, name, func, *args, **kwargs):\n    if config[name] == \"\":\n        config[name] = func(*args, **kwargs)\n    else:\n        config[name] = func(*args, default=config[name], **kwargs)\n    return config\n\n\n@click.command(name=\"Initialize experiment\",\n               context_settings=dict(help_option_names=['-h', '--help']))\n@click.option(\"--exp\", \"-e\", default=\"experiment.json\", help=\"Experiment configuration file (experiment.json)\")\n@click.option(\"--aup\", \"-c\", default=DEFAULT_AUPTIMIZER_PATH, help=\"Auptimizer Folder path\")\n@click.option(\"--log\", \"-l\", default=\"info\", type=click.Choice(LOG_LEVEL.keys()), help=\"Log level\")\n@click.option(\"--overwrite/--no-overwrite\", \"-o/-no\", default=False, help=\"overwrite existing file\")\n@click.option(\"--reload/--no-reload\", default=False, help=\"reload existing experiment configuration\")\ndef main(exp, aup, log, overwrite, reload):\n    \"\"\"Initialize experiment configuration for HPO\n    \\b\\n\n    Copyright (C) 2018  LG Electronics Inc.\n    \\b\\n\n    GPL-3.0 License. This program comes with ABSOLUTELY NO WARRANTY;\n    \\b\\n\n    Raises:\n        Exception: If Auptimizer environment is not found.\n    \"\"\"\n    coloredlogs.install(level=LOG_LEVEL[log], fmt=\"%(name)s - %(levelname)s - %(message)s\")\n\n    if os.path.isfile(exp) and not overwrite and not reload:\n        logger.fatal(\"%s exists! Overwrite (-o) or change experiment name (-e)!\", exp)\n        exit(1)\n\n    try:\n        conn = get_default_connector(auppath=aup)\n    except Exception as e:\n        logger.fatal(\"Failed to get environment file, check aup.setup process\")\n        raise e\n\n    config = defaultdict(str)\n    if reload:\n        with open(exp, 'r') as f:\n            config.update(json.load(f))\n    try:\n        print(\"Hit ENTER to use the default value in brackets.\")\n        exp = input(\"Experiment configuration to be created [%s]:\" % exp) or exp\n        config = _update(config, 'script', _set_script)\n        res = conn.get_resource_type()\n        config = _update(config, 'resource', get_from_options, \"computing resource for experiment\", res)\n        config = _update(config, 'n_parallel', _set_parallel, config[\"resource\"], conn.cursor)\n        config = _update(config, 'target', get_from_options, \"max/min the score\", ('max', 'min'))\n        config = _update(config, 'workingdir', _get_workingdir, config[\"resource\"])\n\n        config.update(_set_proposer(default=config['proposer']))\n    except KeyboardInterrupt:\n        logger.info(\"Terminated by user\")\n    except Exception as e:\n        logger.fatal(\"Failed to initialize experiment configuration\")\n        raise e\n    finally:\n        logger.info(\"Write experiment config to %s\", exp)\n        with open(exp, 'w') as f:\n            json.dump(config, f, indent=2)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "src/aup/profiler/README.md",
    "content": "# Profiler\n**Profiler is a simulator for profiling performance of Machine Learning (ML) model scripts.** Given compute- and memory resource constraints for a CPU-based Edge device, Profiler can provide estimates of compute- and memory usage for model scripts on the device. These estimations can be used to choose best performing models or, in certain cases, to predict how much compute and memory models will use on the target device.\nBecause Profiler mimics the target device environment on the user's development machine, the user can gain insights about the performance and resource needs of a model script without having to deploy it on the target device.\n\nCurrently, Profiler can be used to:\n\n1.  **Select the most efficient model for your target deployment.** With Profiler, you can compare how different models will perform under specific compute and memory constraints. Our studies show that the ranking of models based on runtime or memory use under Profiler mirrors the ranking on a device with the same constraints.\n\n2.  **Make model script performance and resource requirements at the Edge more transparent.** Use Profiler to estimate model script's runtime or memory usage on a device. For similar classes of models (such as different versions of MobileNet or ShuffleNet), there is a straight line fit between model performance under Profiler and on the target device. Once you run two or three models on the device, you can use the results to find that straight line and predict a new model's performance with Profiler.\n\n3.  **Foster lean ML model deployment at the Edge.** By using Profiler, you can assess model-device compatibility and select the most suitable model for your needs without the hustle of going through multiple physical deployment cycles.\n\n\n# How Profiler Works  \n\n  1. **Simulates Device Constraints.** Profiler allows developers to simulate different **compute** and **memory**\n      constraints for the execution of the application. This is especially useful for ML model deployment,\n      where testing on different edge devices can be tedious and require actual deployment to individual devices to ensure \n      resource constraints are satisfied. Profiler can help easily *approximate* these constraints on a single host\n      device. \n\n  2.   **Provides Container Support.** Profiler encapsulates the application, its requirements, and corresponding data\n      into a Docker container. It uses user inputs to build a corresponding Docker Image so the application can run\n      independently and without external dependencies. It can then easily be scaled and ported to ease future\n      development and deployment. Profiler also removes the need for a developer to acquaint themselves with internal\n      workings of Docker.\n  \n  3.  **Logs Resource Utilization.** Profiler also tracks and records various resource utilization statistics of the\n      application for debugging purposes. It currently tracks Average CPU Utilization, Memory Usage, and Block I/O. The logger\n      also supports setting the `Sample Time` to control how frequently Profiler samples utilization statistics from\n      the Docker container.\n\n\n  We have conducted over 300 experiments across multiple models, devices, and compute settings. Full results are available [here](../../../Examples/profiler_examples/experiments).\n    \n\n# How to Use Profiler\n\n## Installation and Requirements\n\nProfiler is automatically installed as part of Auptimizer, further requiring only Docker installation. Please refer to [Docker installation](https://docs.docker.com/install/) on how to install Docker on your system.\n\n\n## Using Profiler\n\nUsing Profiler is simple and requires only a few steps. Once Docker and Auptimizer are installed, all you need to do is:\n1. Ensure that the prerequisites below are met\n2. Set up the Profiler user variables in `env.template`\n3. Have a script that will train or perform inference on your model\n4. run `python -m aup.profiler` on your model file(s) (multiple models can be provided as a comma-separated list using the `-m` or `--modellist` flags or as in a txt file using the `-f` or `--modelfile` flags)\n\n**Profiler flags:**\n1.  -e or --environment : path to the environment file.\n2.  -f or --modelfile  : path to the text file containing different model names on new lines.\n3.  -m or --modellist  : list of model names as comma(',') separated string (no spaces).\n\n### Prerequisites \n\nThe following prerequisites help to simplify the profiling procedure.  Experienced users should feel free to modify it as needed.\n\n+ Consolidate your project into a single directory, such that the primary application can run without any internal\n  dependencies (the data itself can be in a separate location).\n+ Consolidate your application into a single entry point for execution. Use a wrapper file if needed. This single point of entry is needed because Profiler will\n  execute one command to run a single application file. The application can accept different models as input.\n\n### Set Up Profiler User Variables \n\nProfiler can accept two arguments as inputs - the environment file (necessary) and model name list or file (optional).\nRefer to `env_mnist.template` and `env_benchmark.template` for examples.\n\nCreate `env.template`, and add the following variables as needed:\n\n  1.  `IMAGEREPO` - **REQUIRED** Enter the name of base Docker repository to use. Refer to https://hub.docker.com/ for\n      public repositories. Your base image could be anything from `tensorflow:1.3.0`, `python3`, `ubuntu` etc.\n\n  2.  `APTREQUIREMENTS` - **OPTIONAL** Enter all linux packages required to run the application as a space-separated\n      string.  For example \"curl vim\". These packages will be installed using the command `apt-get install` so ensure the packages are supported. This variable can also be left empty (using \"\").\n\n  3.  `PIPREQUIREMENTS` - **OPTIONAL** Enter all python libraries required to run the application as a space-separated\n      string. For example \"ipython numpy\". These packages will be installed using the command `pip install`, so ensure the libraries are supported. This variable can also be left empty (using “”).\n      \n  4.  `PRERUN` - **OPTIONAL** Enter commands to execute before running the application. `PRERUN` can be used to install any libraries that cannot be installed through `APTREQUIREMENTS` or  `PIPREQUIREMENTS`. For example, if you need a different version of a library than what is available through pip, you can use PRERUN to install it. See `env_benchmark.template` for an example.\n\n  5.  `DIR` - **REQUIRED** Enter the local path to the users consolidated directory containing the application. This\n      directory will be copied over to the Docker container.\n\n  6.  `SCRIPT` - **REQUIRED** The name of the primary application file, along with the path relative to the\n      aforementioned `DIR`. This allows the container to find and execute the application file.\n\n  7.  `COMMAND` - **REQUIRED** The command used to execute the aforementioned script. For example `python`.\n\n  8.  `SAMPLETIME` - **REQUIRED** The wait period in seconds, when Profiler will query the Docker for resource\n      utilization. Avoid using time periods smaller than 3 seconds since Profiler internally uses the `docker stats`\n      command which takes approximately 3 seconds to finish. User can use decimal points. \n\n  9.  `OUTPUTFILE` - **REQUIRED** The name of the file which will contain all the resource utilization logs with\n      timestamps. \n\n  10.  `DOCFILE` - **REQUIRED**  The name of a user-defined Dockerfile, path relative to Profiler directory. This\n       command will supersede all previous variables and build the Docker image from the `DOCFILE`. The user should only\n       use this variable if they have already tested their Dockerfile with the application to make sure they are\n       compatible.  \n\n  11. `DOCKCPUS` - **OPTIONAL** The amount of CPU processing compute power allowed to the application. Must be real\n      number. Can be a floating point decimal. For example “2.5”. Refer to\n      https://docs.docker.com/config/containers/resource_constraints/. Can be empty - no CPU constraint.\n\n  12.  `DOCKMEMORY` - **OPTIONAL** The amount of memory allowed to the application. Must be a positive integer, followed\n       by a suffix of b, k, m, g, to indicate bytes, kilobytes, megabytes, or gigabytes . For example “156m”. Refer to\n       https://docs.docker.com/config/containers/resource_constraints/. Can be empty - no memory constraint.\n\n  13. `DOCK_ARGS` - **OPTIONAL** Additional Docker-related arguments are added here.  For instance, to allow Docker to run the container with the Privileged tag, use `--privileged`. Refer to https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities. To use volume to mount additional folder (e.g. data folder), use `-v /path/in/source:/path/in/destination`\n\nIf your primary application needs external model weight files as arguments, you can further provide a list of the names of model weight files. \nThis list can be provided as a list of comma(',') separated strings of the model names or a text file with strings of the model names, each on a new line.\n\n\n## Interpreting Results\n\nA summary of each Profiler run can be found in `out.txt` (the filename can be user-specified using the `OUTPUTFILE` argument in the environment file). \n\nThe individual model `OUTPUTFILE`s contain the raw values of different metrics profiled at distinct `SAMPLETIME` intervals using `docker stats` as a subroutine (https://docs.docker.com/engine/reference/commandline/stats/)\n\nEach row contains the following values:\n1. Name - name of the Docker container\n2. CPU % - the instantaneous CPU utilization (https://docs.docker.com/config/containers/resource_constraints/).\n3. MEM USAGE / LIMIT - the instantaneous memory utilization and corresponding limit (https://docs.docker.com/config/containers/resource_constraints/).\n4. NET I/O - refers to network input/output, the total amount of data the container has sent and received (https://docs.docker.com/engine/reference/commandline/stats/).\n5. BLOCK I/O - refers to the amount of data the container has read to and written from block devices (this could be memory external to the container or to actual HDD use) on the host (https://docs.docker.com/engine/reference/commandline/stats/).\n6. TIME - the current timestamp of the measurement.\n\nThe Usage Stats table shows the average utilization over the container's lifetime for the aforementioned CPU % and MEM USAGE / LIMIT. \nFor NET I/O and BLOCK I/O the total input/output data metrics are returned, instead of the average statistics.\n\nThe final usage stats from each run of Profiler is appended to `OUTPUTFILE` and provides a quick overview of the result of running Profiler multiple times. \n\n\n## Some Caveats \n\nSee [issues](issues.md) for known issues and solutions.\n\n\n# Examples \n\nWe present some examples on how to use profiler in [Profiler Examples](../../../Examples/profiler_examples) folder. This folder also contains the environment files used in the following two examples.\n\n## TensorFlow Lite Inference Benchmarking\n\n\nTo use Profiler on TensorFlow Lite for image classification, an example of Inference Benchmarking is located in the [benchmark](../../../Examples/profiler_examples/bench) folder.\n\n1. [Optional]  Use the bench/download.sh script (wget must be installed on your system) to download mobilenet_v1_0.75_224 and mobilenet_v1_1.0_224 (Alternatively, you can download a different set of TensorFlow Lite models from (https://www.tensorflow.org/lite/guide/hosted_models) and save them in [benchmark](../../../Examples/profiler_examples/bench) folder.)\n   \n2. If needed, change arguments in `env_benchmark.template`.\n\n3. Run `python -m aup.profiler -e env_benchmark.template -m mobilenet_v1_0.75_224.tflite,mobilenet_v1_1.0_224.tflite`.\n\nThis will create Docker images `mobilenet_v1_0.75_224_img` and `mobilenet_v1_1.0_224_img` and  corresponding Docker containers `mobilenet_v1_0.75_224_con` and `mobilenet_v1_1.0_224_con`. It will execute\n`test_perf.py` within these containers using the `Docker Volume` command to run inference on the specified models. Once execution finishes, Profiler will output the following statistics: \n\n```\nFinal Usage Stats\nNAME                   AVG CPU %      PEAK CPU  AVG MEM USAGE / LIMIT    PEAK MEM    NET I/O          BLOCK I/O        TOTAL TIME (ms)\n---------------------  -----------  ----------  -----------------------  ----------  ---------------  -------------  -----------------\nmobilenet_v1_0.75_224  225.09%          226.68  117.9 MiB / 1.9 GiB      117.9 MiB   742.0 B / 0.0 B  0.0 B / 0.0 B               6164\nmobilenet_v1_1.0_224   244.258%         250.83  122.4 MiB / 1.9 GiB      126.9 MiB   766.0 B / 0.0 B  0.0 B / 0.0 B              12354\n```\n\nThe results from each timestamp and each individual model are saved in `model_name`+`out.txt` (can be user-defined via `OUTPUTFILE` in `env_benchmark.template`).\nAdditionally, a general summary is provided in `out.txt` containing the final stats for all the tested models. \n\n\n## MNIST Training Benchmarking\n\nYou can also use Profiler to profile training. MNIST classification example can be found in the [mnist](../../../Examples/profiler_examples/mnist) folder.\n\n1. [Optional] Download the MNIST dataset from (http://yann.lecun.com/exdb/mnist/). Add the `.gz` files to the data\n   folder. Then open `env_mnist.template` file and edit the `DOCKER_ARGS` option with the absolute path to the `data` folder\n   as `-v /data/:/mnist_data`.\n   \n2. Change other arguments in the `env_mnist.template` if you want.\n\n3. Run `python -m aup.profiler -e env_mnist.template`.\n\n\nThis will create a Docker Image named `test_image`, and a corresponding Docker Container `test_container`. It will execute\n`mnist.py` within the container using Docker Volume command to load the data. Once the execution finishes, the Profiler\nwill output the following statistics: \n\n```\nFinal Usage Stats\nNAME            AVG CPU %      PEAK CPU  AVG MEM USAGE / LIMIT    PEAK MEM    NET I/O              BLOCK I/O        TOTAL TIME (ms)\n--------------  -----------  ----------  -----------------------  ----------  -------------------  -------------  -----------------\ntest_container  316.532%         337.98  502.3 MiB / 1.9 GiB      537.0 MiB   12.0 MiB / 151.4 kB  0.0 B / 0.0 B             220842\n```\n\nThe results from each timestamp are saved in `out.txt` (set via `OUTPUTFILE` in `env_mnist.template`).\n"
  },
  {
    "path": "src/aup/profiler/__init__.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2020 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\"\"\""
  },
  {
    "path": "src/aup/profiler/__main__.py",
    "content": "\n\n\"\"\"\n..\n  Copyright (c) 2020 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nProfiler main entry\n=====================\n\n:mod:`aup.profiler.__main__` is the Profiler main entry point.\n\nUse it as::\n\n  python -m aup.profiler -e <experiment configuration> -m <model list>\n\nThe usage is detailed in :doc:`profiler`.\n\n\"\"\"\n\n\n\n# python wrapper for profiler.sh. This wrapper allows profiler to be installed using pip install.\n\nimport argparse\nimport sys\nimport os\n\ndef main():\n    \n    # read in the arguments\n    # environment file is required\n    # either modelfile or modellist can be present but not both. If neither, then the environment file should contain info on the script.\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"-e\", \"--environment\", help=\"The environment file that contains all the information on what and how to profile.\")\n    group = parser.add_mutually_exclusive_group()\n    group.add_argument(\"-f\", \"--modelfile\", help=\"A file containing the list of models to profile. Use only -m or -f but not both.\")\n    group.add_argument(\"-m\", \"--modellist\", help=\"comma separated list of models to profile. Use only -m or -f but not both.\")\n    args = parser.parse_args()\n\n    if not args.environment:\n        print(\"Profiler needs an environment file. Please see documentation for more information.\")\n        print(\"Exiting.\")\n        sys.exit(2)\n    \n    script_flags = \" -e \"+args.environment\n\n    if args.modellist:\n        script_flags += \" -m \"+args.modellist\n    elif args.modelfile:\n        script_flags += \" -f \"+args.modelfile\n    else:\n        print(\"**Warning**: If modellist or modelfile not provided, environment file should have script info. Please see documentation for more information.\")\n    \n    script_command = 'profiler.sh' + script_flags \n\n    # run script command\n    os.system(script_command)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "src/aup/profiler/calculate.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\naup.profiler.calculate module\n=================\n\nParse profiling results obtained using :mod:`aup.profiler`.\n\nAPIs\n----\n\"\"\"\nimport sys\nfrom tabulate import tabulate\n\n#################################################\n# see: http://goo.gl/kTQMs\nSYMBOLS = {\n    'customary'     : ('B', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'),\n    'customary_ext' : ('byte', 'kilo', 'mega', 'giga', 'tera', 'peta', 'exa',\n                       'zetta', 'iotta'),\n    'non_standard'  : ('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'),\n    'iec'           : ('Bi', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi'),\n    'doc'           : ('B', 'kB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'),\n    'iec_ext'       : ('byte', 'kibi', 'mebi', 'gibi', 'tebi', 'pebi', 'exbi',\n                       'zebi', 'yobi'),\n}\n\ndef bytes2human(n, format='%(value).1f %(symbol)s', symbols='customary'):\n    \"\"\"\n    Convert n bytes into a human readable string based on format.\n    symbols can be either \"customary\", \"customary_ext\", \"iec\" or \"iec_ext\",\n    see: http://goo.gl/kTQMs\n\n      >>> bytes2human(0)\n      '0.0 B'\n      >>> bytes2human(0.9)\n      '0.0 B'\n      >>> bytes2human(1)\n      '1.0 B'\n      >>> bytes2human(1.9)\n      '1.0 B'\n      >>> bytes2human(1024)\n      '1.0 K'\n      >>> bytes2human(1048576)\n      '1.0 M'\n      >>> bytes2human(1099511627776127398123789121)\n      '909.5 Y'\n\n      >>> bytes2human(9856, symbols=\"customary\")\n      '9.6 K'\n      >>> bytes2human(9856, symbols=\"customary_ext\")\n      '9.6 kilo'\n      >>> bytes2human(9856, symbols=\"iec\")\n      '9.6 Ki'\n      >>> bytes2human(9856, symbols=\"iec_ext\")\n      '9.6 kibi'\n\n      >>> bytes2human(10000, \"%(value).1f %(symbol)s/sec\")\n      '9.8 K/sec'\n\n      >>> # precision can be adjusted by playing with %f operator\n      >>> bytes2human(10000, format=\"%(value).5f %(symbol)s\")\n      '9.76562 K'\n    \"\"\"\n    n = int(n)\n    if n < 0:\n        raise ValueError(\"n < 0\")\n    symbols = SYMBOLS[symbols]\n    prefix = {}\n    for i, s in enumerate(symbols[1:]):\n        prefix[s] = 1 << (i+1)*10\n    for symbol in reversed(symbols[1:]):\n        if n >= prefix[symbol]:\n            value = float(n) / prefix[symbol]\n            return format % locals()\n    return format % dict(symbol=symbols[0], value=n)\n\ndef human2bytes(s):\n    \"\"\"\n    Attempts to guess the string format based on default symbols\n    set and return the corresponding bytes as an integer.\n    When unable to recognize the format ValueError is raised.\n\n      >>> human2bytes('0 B')\n      0\n      >>> human2bytes('1 K')\n      1024\n      >>> human2bytes('1 M')\n      1048576\n      >>> human2bytes('1 Gi')\n      1073741824\n      >>> human2bytes('1 tera')\n      1099511627776\n\n      >>> human2bytes('0.5kilo')\n      512\n      >>> human2bytes('0.1  byte')\n      0\n      >>> human2bytes('1 k')  # k is an alias for K\n      1024\n      >>> human2bytes('12 foo')\n      Traceback (most recent call last):\n          ...\n      ValueError: can't interpret '12 foo'\n    \"\"\"\n    init = s\n    num = \"\"\n    while s and s[0:1].isdigit() or s[0:1] == '.':\n        num += s[0]\n        s = s[1:]\n    num = float(num)\n    letter = s.strip()\n    for name, sset in SYMBOLS.items():\n        if letter in sset:\n            break\n    else:\n        if letter == 'k':\n            # treat 'k' as an alias for 'K' as per: http://goo.gl/kTQMs\n            sset = SYMBOLS['customary']\n            letter = letter.upper()\n        else:\n            raise ValueError(\"can't interpret %r\" % init)\n    prefix = {sset[0]:1}\n    for i, s in enumerate(sset[1:]):\n        prefix[s] = 1 << (i+1)*10\n    return int(num * prefix[letter])\n##########################################\n\ndef getUsageStats(filename):\n    \"\"\"\n    Function that takes an input file generated from \n    statscript.sh with usage stats sampled over certain \n    timestamps, and calculates peak and average values \n    of different parameters such as compute and memory.\n    It uses tabulate library to form the table to display \n    the final stats\n    \"\"\"\n    \n    fp = open(filename, \"r+\")\n    oline = fp.readline()\n\n    acpu=0\n    amem=0\n    amemlim=0\n    aneti=0\n    aneto=0\n    ablocki=0\n    ablocko=0\n    count=0\n    mmem=0\n    mcpu=0\n    starttime = 0\n    endtime=0\n    name=\"\"\n    \n    zero_error=0\n    basic_error=0\n\n    line = fp.readline()\n    while (line):\n        #print (line)\n        try:\n            line1 = line[:-1].split(\" \")\n            if(line1[2]=='--'):\n                break\n            cpu = float(line1[2][:-1])\n            mem = human2bytes(line1[4])\n            memlim = human2bytes(line1[6])\n            neti = human2bytes(line1[8])\n            neto = human2bytes(line1[10])\n            blocki = human2bytes(line1[12])\n            blocko = human2bytes(line1[14])\n            name = line1[0]\n            if starttime==0:\n                starttime = int(line1[16])\n            endtime = int(line1[16])\n\n            if(cpu == 0.0 and mem == 0):\n                zero_error=1\n                break\n            count+=1\n            acpu = acpu + ((cpu - acpu)/count)\n            amem = amem + ((mem - amem)/count)\n            amemlim = amemlim + ((memlim - amemlim)/count)\n            mcpu = max(mcpu, cpu)\n            mmem = max(mmem, mem)\n            aneti = aneti + ((neti - aneti)/count)\n            aneto = aneto + ((neto - aneto)/count)\n            ablocki = ablocki + ((blocki - ablocki)/count)\n            ablocko = ablocko + ((blocko - ablocko)/count)\n\n        except:\n            basic_error=1\n\n        line = fp.readline()\n        \n    if zero_error:\n        fp.write(\"\\nEncountered time stamps with 0 CPU and 0 Mem, process has probabaly finished; Hence discarding the timestamp.\")\n    #if basic_error:\n        #fp.write(\"\\nAn error occurred when processing this file\")\n        \n    if count==0:\n        fp.write(\"Profiler could not sample usage stats for the experiment because the sample time is too long compared to the runtime of the experiment or the experiment is too fast and finishes before sampling could start.\")\n\n    fp.write(\"\\nUsage Stats: \")\n    print(\"\\nUsage Stats: \")\n\n    h = [\"NAME\",\"AVG CPU %\",\"PEAK CPU\",\"AVG MEM USAGE / LIMIT\",\"PEAK MEM\",\"NET I/O\",\"BLOCK I/O\",\"TOTAL TIME (ms)\"]\n\n    p=[name, str(round(acpu,3))+\"%\", str(round(mcpu,3)), str(bytes2human(amem, symbols=\"doc\")) + \" / \" + str(bytes2human(amemlim, symbols=\"doc\")), str(bytes2human(mmem, symbols=\"doc\")), str(bytes2human(aneti, symbols=\"doc\")) + \" / \" + str(bytes2human(aneto, symbols=\"doc\")), str(bytes2human(ablocki, symbols=\"doc\")) + \" / \" + str(bytes2human(ablocko, symbols=\"doc\")), str(endtime-starttime)]\n    fp.write(\"\\n\")\n    fp.write(tabulate([p], headers=h))\n    print(tabulate([p], headers=h))\n\n    fp.write(\"\\nRefer to the documentation on how to interpret the results.\")\n    print(\"Refer to the documentation on how to interpret the results.\")\n    print(\"\\n\")\n    fp.close()\n    return (p,h)\n\nif __name__ == \"__main__\":\n    filename = sys.argv[1]\n    getUsageStats(filename)\n\n"
  },
  {
    "path": "src/aup/profiler/compile_stats.py",
    "content": "#  Copyright (c) 2020 LG Electronics Inc.\n#  SPDX-License-Identifier: GPL-3.0-or-later\n\nfrom aup.profiler import calculate\nimport sys\nfrom tabulate import tabulate\nfrom datetime import datetime\nfrom os import path\n\n\n\"\"\"\nThis function iterates over individual model outputs from statscript\nand uses 'getUsageStats' from calculate.py to collect usage stats\nand displays them together as table.\n\"\"\"\ndef compile_results(env_file,model_names):\n    today = datetime.now()\n    f=open(env_file)\n    line=f.readline()\n    \n    while line:\n        if \"OUTPUTFILE=\" in line:\n            output_file = line.split(\"=\")[1][:-1]\n            break\n        line=f.readline()\n        \n    # handles the case for model text files.    \n    if '.txt' in model_names:\n        f=open(model_names)\n        line = f.readline()\n        results = []\n        while line:\n            if line[-1]=='\\n':\n                line=line[:-1]\n            filename=line.split(\"/\")[-1]\n            filename=filename[:filename.rfind('.')]\n            out=filename + \"_\" + output_file\n            if not path.isfile(out):\n                return \n            useStats = calculate.getUsageStats(out)\n            stats = useStats[0]\n            stats[0]=filename\n            results.append(stats)\n            headers = useStats[1]\n            line = f.readline()\n\n        fp=open(output_file,\"a+\")\n        fp.write(\"Usage stats for Experiment ran on : \"+ str(today))\n        fp.write(\"\\n\")\n        fp.write(tabulate(results, headers=headers))\n        fp.write(\"\\n\")\n        fp.write(\"\\n\")\n        fp.close()\n        print(\"Final Usage Stats\")\n        print(tabulate(results, headers=headers))\n        \n    #handles the case for model lists.\n    else:\n        f=model_names.split(',')\n        results = []\n        for model in f:\n            filename=model.split(\"/\")[-1]\n            filename=filename[:filename.rfind('.')]\n            out=filename + \"_\" + output_file\n            if not path.isfile(out):\n                return \n            useStats = calculate.getUsageStats(out)\n            stats = useStats[0]\n            stats[0]=filename\n            results.append(stats)\n            headers = useStats[1]\n\n        fp=open(output_file,\"a+\")\n        fp.write(\"Usage stats for Experiment ran on : \"+ str(today))\n        fp.write(\"\\n\")\n        fp.write(tabulate(results, headers=headers))\n        fp.write(\"\\n\")\n        fp.write(\"\\n\")\n        fp.close()\n        print(\"Final Usage Stats\")\n        print(tabulate(results, headers=headers))\n\nif __name__ == \"__main__\":\n    env_file=sys.argv[1]\n    model_names=sys.argv[2]\n    compile_results(env_file,model_names)"
  },
  {
    "path": "src/aup/profiler/issues.md",
    "content": "# Known issues\n\n+ Remove any dangling Dockerfiles in the working directory before executing Profiler as they might interfere.\n \n+ Once Docker has started running, if you hit Ctrl+Z, you will only exit from the Profiler script. Docker will continue to run in the background until completion unless you stop the Docker process separately."
  },
  {
    "path": "src/aup/profiler/profiler.sh",
    "content": "#!/bin/bash\n\n#  Copyright (c) 2020 LG Electronics Inc.\n#  SPDX-License-Identifier: GPL-3.0-or-later\n\n#get user arguments for environment files and model data\nPOSITIONAL=()\nwhile [[ $# -gt 0 ]]\ndo\nkey=\"$1\"\n\ncase $key in\n    -e|--environment)\n    ENVIRONMENT=\"$2\"\n    shift\n    shift\n    ;;\n    -f|--modelfile)\n    TEXTFILE=\"$2\"\n    shift\n    shift\n    ;;\n    -m|--modellist)\n    MODELS=\"$2\"\n    shift\n    shift\n    ;;\nesac\ndone\nset -- \"${POSITIONAL[@]}\"\n\n#check if environment file is available\nif [[ -z $ENVIRONMENT ]]; then\n    echo \"Profiler needs an environment file. Please see documentation.\"\n    echo \"Exiting.\"\n    exit 1\nfi\n\n#check if no model is provided\nif [[ -z $TEXTFILE ]] && [[ -z $MODELS ]]; then\n    statscript.sh $ENVIRONMENT\n    source $ENVIRONMENT #need the OUTPUTFILE Variable.\n    if test -f \"$OUTPUTFILE\"; then\n        python3 -m aup.profiler.calculate $OUTPUTFILE\n    fi\n    exit 1\nfi\n\nset +e\n\n#run statscript for model textfile and compile usage stats\nif [[ -n $TEXTFILE ]]; then\n    for model in $(< \"$TEXTFILE\") ; do\n        echo \"Running $model\" \n        statscript.sh $ENVIRONMENT $model\n    done\n    python3 -m aup.profiler.compile_stats $ENVIRONMENT $TEXTFILE\n\nfi\n\n#run statscript for model list and compile usage stats\nif [[ -n $MODELS ]]; then \n    IFS=',' read -ra MODELSARR <<< \"$MODELS\"\n    for model in \"${MODELSARR[@]}\" ; do\n        echo \"Running $model\" \n        statscript.sh $ENVIRONMENT $model\n    done\n    python3 -m aup.profiler.compile_stats $ENVIRONMENT $MODELS\nfi\n\n\n\n\n\n"
  },
  {
    "path": "src/aup/profiler/statscript.sh",
    "content": "#!/bin/bash\n\n#  Copyright (c) 2020 LG Electronics Inc.\n#  SPDX-License-Identifier: GPL-3.0-or-later\n\nset -e\n#trap \"kill 0\" EXIT\n#exit 0\n#Check if environment file containing profiling details is present.\nif [[ $# -ne 1 && $# -ne 2 ]]; then\n  echo \"Missing environment file; use it as \\`statscript.sh <env file>\\`\"\n  exit 1\nfi\n\necho \"*********************************************************\"\necho \"Environment Variables\"\necho \"*********************************************************\"\n\ngrep -v \"^#\" $1\nsource $1\n\n#Intermediate Variables - 'test_container' and 'test_image' to help the user with debugging.\nCONTAINERNAME=\"test_container\"\nIMAGENAME=\"test_image\"\n\n#If we are running for multiple models, model name is the second argument.\nif [ $2 ]; then\n    SCRIPT=$SCRIPT\"\\\" , \\\"\"$2\n    FULLPATH=\"${2##*/}\"\n    MODELNAME=\"${FULLPATH%.*}\" \n    DOCFILE=$DOCFILE\"_\"$MODELNAME\n    OUTPUTFILE=$MODELNAME\"_\"$OUTPUTFILE\n    CONTAINERNAME=$MODELNAME\"_con\"\n    IMAGENAME=$MODELNAME\"_img\"\nfi\n\necho \"*********************************************************\"\necho \"BUILDING DOCKER IMAGE\"\necho \"*********************************************************\"\n\n\ntime_command=\"python -c 'import time; print(int(1000*time.time()))'\"\n#time_command='$(($(date +%s%N)/1000000))'\n#time_command='$(($(gdate +%s%N)/1000000))'\nrm -f $OUTPUTFILE\n\n#Check if user-specified Dockerfile is present, otherwise create a new one using environment file. \n#Note is Dockerfile is present, it is given priority over information in the environment file.\nif test ! -f \"$DOCFILE\"; then\n    touch $DOCFILE\n    echo \"FROM $IMAGEREPO\" >> $DOCFILE\n    if [ ! -z \"$APTREQUIREMENTS\" ]; then\n        echo \"RUN apt-get update && apt-get install -y \\\\\" >> $DOCFILE\n        IFS=' ' read -r -a aptreq <<< \"$APTREQUIREMENTS\"\n        arraylength=${#aptreq[@]}\n        for (( i=1; i<${arraylength}; i++ ));\n        do\n           echo \"${aptreq[$i-1]} \\\\ \" >> $DOCFILE\n        done\n        echo \"${aptreq[$arraylength-1]} \" >> $DOCFILE\n    fi\n    echo \"RUN mkdir /app\" >> $DOCFILE\n    echo \"WORKDIR /app\" >> $DOCFILE\n    echo \"copy $DIR .\" >> $DOCFILE\n    if [ ! -z \"$PRERUN\" ]; then \n        echo \"RUN $PRERUN\" >> $DOCFILE\n    fi\n    if [ ! -z \"$PIPREQUIREMENTS\" ]; then\n        echo \"RUN pip install $PIPREQUIREMENTS\" >> $DOCFILE\n    fi\n    echo \"CMD [\\\"$COMMAND\\\", \\\"$SCRIPT\\\"]\" >> $DOCFILE\n\n    echo \"*********************************************************\"\n    echo \"DOCKERFILE CREATED - PRINTING\"\n    echo \"*********************************************************\"\n    cat $DOCFILE\nfi\n\n#Build the docker image using the Dockerfile.\ndocker build -f $DOCFILE -t $IMAGENAME .\n\n#Exit if the build was unsuccessful.\nif [[ $? -ne 0 ]] || [[ \"$(docker images -q $IMAGENAME 2> /dev/null)\" == \"\" ]]; then\n    echo \"*********************************************************\"\n    echo \"DOCKER IMAGE FAILED. EXITING\"\n    echo \"*********************************************************\"\n    exit 1\nfi\n\n#Add CPU and Memory constraints specified in the environment file.\nif [ -z \"$DOCKCPUS\" ]; then\n    CPULIMSTR=\"\"\nelse\n    CPULIMSTR=\"--cpus=$DOCKCPUS\"\nfi\n\nif [ -z \"$DOCKMEMORY\" ]; then\n    MEMLIMSTR=\"\"\nelse\n    MEMLIMSTR=\"-m=$DOCKMEMORY\"\nfi\n\n#Run the docker container using the created docker image\necho \"*********************************************************\"\necho \"RUNNING DOCKER CONTAINER\"\necho \"*********************************************************\"\n\ndocker run $DOCKER_ARGS $CPULIMSTR $MEMLIMSTR --name $CONTAINERNAME --rm $IMAGENAME &\n\npid=$!\ntouch ${OUTPUTFILE}\n\n#running docker stats on the container\necho \"*********************************************************\"\necho \"RUNNING DOCKER STAT ANALYSIS\"\necho \"*********************************************************\"\n\n\necho -e \"\\n\"\necho -e \"Profiling script: \"$SCRIPT\"\\n\" >> ${OUTPUTFILE}\necho \"NAME | AVG CPU % | AVG MEM USAGE / LIMIT | NET I/O | BLOCK I/O | TIMESTAMP\" | column -t -s \"|\" >> ${OUTPUTFILE}\necho \"NAME | AVG CPU % | AVG MEM USAGE / LIMIT | NET I/O | BLOCK I/O\" | column -t -s \"|\"\n\n\n#Time counter set up\ninittime=$(eval $time_command)\nstarttime=$(eval $time_command)\n\n#While the script executes in the dockercontainer, repeatedly call docker stats on the container every sampletime milliseconds.\n#Record the output of the docker stats in the output file.\nwhile ps -p $pid &>/dev/null; do\n    if [ \"$(eval $time_command)\" -gt \"$((starttime + $SAMPLETIME*1000))\" ]; then\n        starttime=$(eval $time_command)\n\n        #get stats for docker process\n        IFS=, read -r name pids cpu mem net block <<<  \"$(docker stats ${CONTAINERNAME} --no-stream --format \"{{.Name}},{{.PIDs}},{{.CPUPerc}},{{.MemUsage}},{{.NetIO}},{{.BlockIO}}\")\" \n        if [ \"$(eval $time_command)\" -gt \"$((starttime + $SAMPLETIME*1000))\" ]; then\n            echo \"WARNING: Your Query Time is too short, Docker stats take longer to compute.\"\n        fi\n        if [ -z \"$name\" ]; then\n            break\n        fi\n        echo  $name\"|\"$cpu\"|\"$mem\"|\"$net\"|\"$block\"|\"$(eval $time_command)\"\" | column -t -s \"|\" >> ${OUTPUTFILE}\n        echo  $name\"|\"$cpu\"|\"$mem\"|\"$net\"|\"$block\"\" | column -t -s \"|\"\n    fi\ndone\n\nendtime=$(eval $time_command)\necho \"Total time taken for command = $(($endtime-$inittime)) milliseconds\"\n\n#if [ ! $2 ]; then\n#Calculate the Usage stats for profiler using the output file.\n#    python3 calculate.py $OUTPUTFILE\n#fi\n\necho \"*********************************************************\"\necho \"FINISHED\"\necho \"*********************************************************\"\necho -e \"FINISHED \\n********************************************************* \\n\" >> ${OUTPUTFILE}\necho -e \"\\n\"\necho -e \"\\n\"\nwait"
  },
  {
    "path": "src/aup/setup.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nSetup scripts for Auptimizer\n============================\n\n:mod:`aup.setup` is the entry point to set up the `.aup` environment.\n\nSee :doc:`environment` for more details.\n\nRun it as:\n\n  python -m aup.setup [env_template] ...\n\nThe templates are at ``Examples/2dfunc_diff_res/*.ini``.\n\nAdditional arguments\n--------------------\n\n.. program-output:: python3 -m aup.setup -h\n\nAPIs\n----\n\"\"\"\nimport json\nimport logging\nimport os\nfrom shutil import rmtree\nimport sys\n\nimport click\nimport coloredlogs\nfrom six.moves import input\nfrom six.moves.configparser import ConfigParser\n\nfrom .utils import get_default_username, LOG_LEVEL\n\n# Name of resources in .aup database\nGPU_RESOURCE_NAME = \"gpu_mapping\"\nNODE_RESOURCE_NAME = \"node_mapping\"\nAWS_RESOURCE_NAME = \"aws_mapping\"\nlogger = logging.getLogger(\"aup.setup\")\n\nPYTHON_EXEC = sys.executable\n\ndef _create_folder(folder, overwrite=False):\n    \"\"\"Create a folder\"\"\"\n    if folder[0] == \"~\":\n        folder = os.path.expanduser(folder)\n    if os.path.exists(folder):\n        if not overwrite:\n            logger.fatal(\"Folder %s exists, please remove folder or use --overwrite\", folder)\n            raise Exception(\"Folder {} exists, please remove folder or use --overwrite\".format(folder))\n        else:\n            rmtree(folder)\n    try:\n        os.mkdir(folder)\n    except Exception as e:   # pragma: no cover\n        logger.fatal(\"Failed to create folder, check the error message below\")\n        raise e\n    return folder\n\n\ndef _set_resource(resource, config, target, start_rid):\n    \"\"\"Update resource allocation in Auptimizer and track resource ID\"\"\"\n    if resource == \"none\":\n        if config.has_option(\"Auptimizer\", target):\n            logger.warning(\"Remove conflict resource %s in Auptimizer.\", target)\n            config.remove_option(\"Auptimizer\", target)\n    else:\n        if os.path.isfile(resource):\n            with open(resource, 'r') as f:\n                d = f.readlines()\n        else:\n            d = resource.split(\",\")\n        if len(d) == 0 or d[0] == \"\":\n            logger.critical(\"No resources for %s\", target)\n        resources = {}\n        for i in d:\n            resources[start_rid] = i.strip()\n            start_rid += 1\n        logger.info(\"Assign resource %s as %s\", target, json.dumps(resources))\n        config.set(\"Auptimizer\", target, json.dumps(resources))\n    return start_rid\n\n\ndef interactive_env(config):  # pragma: no cover\n    config.add_section(\"Auptimizer\")\n    aup_path = input(\"Auptimizer Environment path - Auptimizer_PATH (Default is `.aup`):\") or \".aup\"\n    config.set(\"Auptimizer\", \"Auptimizer_PATH\", aup_path)\n    aup_tmp = input(\"Auptimizer Temp folder - TMP_FOLDER (/tmp/auptmp):\") or \"/tmp/auptmp\"\n    config.set(\"Auptimizer\", \"TMP_FOLDER\", aup_tmp)\n    config.set(\"Auptimizer\", \"SQL_ENGINE\", \"sqlite\")\n    return config\n\n\ndef interactive_setup(env, config, cpu, gpu, node, aws, user, overwrite):  # pragma: no cover\n    \"\"\"\n    Interactive user interface to get parameters for setup\n    \"\"\"\n    print(\"Hit ENTER to use default values in brackets.\")\n    if env == \".\":\n        env = input(\"Load existing Auptimizer environment (env.ini file path), hit ENTER to initialize a new one:\")\n\n    if env.strip() == \"\":\n        config = interactive_env(config)\n    else:\n        if not os.path.isfile(env):\n            logger.fatal(\"Environment file %s does not exist, exit!\", env)\n            exit(1)\n        try:\n            config.read(env)\n        except Exception as e:\n            logger.fatal(\"Failed to load environment template %s using ConfigParser\", env)\n            raise e\n\n    cpu = int(input(\"Number of CPUs for parallel jobs (%d):\" % cpu) or cpu)\n    gpu = input(\"GPU template file or comma-separated IDs (%s):\" % gpu) or gpu\n    node = input(\"Node template file (%s) or comma-separated nodes (user@ip:[port] [keyfile]):\" % node) or node\n    aws = input(\"AWS template file (%s) or comma-separated nodes (user@ip):[port] [keyfile]):\" % aws) or aws\n    user = input(\"Username (%s):\" % user) or user\n\n    if not overwrite:\n        overwrite = input(\"Overwrite (y/N)\").lower() == \"y\"\n\n    return config, cpu, gpu, node, aws, user, overwrite\n\n\ndef setup(config, cpu, gpu, node, aws, user, overwrite, log):\n    \"\"\"\n    Set up .aup environment\n\n    :param config: env config\n    :param cpu: number of cpu jobs\n    :param gpu: gpu configuration file, 'none' if not exist\n    :param node: node file, 'none' if not exist\n    :param aws: aws file\n    :param user: username, user specified > OS USER variable > 'default'\n    :param overwrite: overwrite existing .aup environment\n    :param log: log level for setupdb\n    \"\"\"\n    folder_path = _create_folder(config.get(\"Auptimizer\", \"Auptimizer_PATH\"), overwrite=overwrite)\n    config.set(\"Auptimizer\", \"Auptimizer_PATH\", folder_path)\n    folder_path = _create_folder(config.get(\"Auptimizer\", \"TMP_FOLDER\"), overwrite=True)\n    config.set(\"Auptimizer\", \"TMP_FOLDER\", folder_path)\n\n    pending_commands = []\n\n    rid = 1\n    rid = _set_resource(gpu, config, GPU_RESOURCE_NAME, rid)\n    rid = _set_resource(node, config, NODE_RESOURCE_NAME, rid)\n    rid = _set_resource(aws, config, AWS_RESOURCE_NAME, rid)\n    logger.debug(\"Create %d resources\", rid)\n\n    if config.get(\"Auptimizer\", \"SQL_ENGINE\") == \"sqlite\":\n        tmp_path = os.path.join(config.get(\"Auptimizer\", \"Auptimizer_PATH\"), \"sqlite3.db\")\n        config.set(\"Auptimizer\", \"SQLITE_FILE\", tmp_path)\n        pending_commands.append(PYTHON_EXEC + \" -m aup.setupdb.sqlite %s --user %s --cpu %d --log %s\" % (\n            os.path.join(config.get(\"Auptimizer\", \"Auptimizer_PATH\"), \"env.ini\"), user, cpu, log))\n    else:\n        logger.fatal(\"SQL engine %s is not implemented\",\n                     config.get(\"Auptimizer\", \"SQL_ENGINE\"))\n        exit(1)\n\n    env_path = os.path.join(config.get(\"Auptimizer\", \"Auptimizer_PATH\"), \"env.ini\")\n    with open(env_path, \"w\") as f:\n        logger.info(\"Write env.ini to %s\", env_path)\n        config.write(f)\n    logger.info(\"Following commands are being executed:\")\n    for i, command in enumerate(pending_commands):\n        logger.info(\"Executing command: \" + command)\n        rflag = os.system(command)\n        if rflag != 0:\n            logger.fatal(\"Failed in setup commands\\nFollowing commands need finish manually (and debug):\\n %s\",\n                         \"\\n\".join(pending_commands[i:]))\n            exit(1)\n\n\n@click.command(name=\"Continuous Training Engine Setup\",\n               context_settings=dict(help_option_names=['-h', '--help']))\n@click.argument(\"env\", default=\".\", type=click.Path(exists=True))\n@click.option(\"--cpu\", default=4, help=\"Number of cores\")\n@click.option(\"--gpu\", default='none', help=\"GPU file path\")\n@click.option(\"--node\", default='none', help=\"Node file path\")\n@click.option(\"--aws\", default='none', help=\"AWS file path\")\n@click.option(\"--user\", default=None, help=\"User account for Auptimizer\")\n@click.option('--overwrite', is_flag=True, help=\"overwrite existing folder (and records!)\")\n@click.option(\"--log\", default=\"info\", type=click.Choice(LOG_LEVEL.keys()), help=\"Log level\")\ndef main(env, cpu, gpu, node, aws, user, overwrite, log):  # pragma: no cover\n    \"\"\" Create environment based on env file for Auptimizer\n    \\b\\n\n    Copyright (C) 2018  LG Electronics Inc.\n    \\b\\n\n    GPL-3.0 License. This program comes with ABSOLUTELY NO WARRANTY;\n    \\b\\n\n    Arguments:\n        env {str}: Auptimizer config folder path. Default to create at `./.aup/`.  Leave empty to create a new one.\n                   Or use the path of the filename (env.ini) to load predefined values (also use --overwrite).\n\n    \\b\n    Raises:\n        Exception: If failed to load the existing Auptimizer configuration file.\n    \"\"\"\n    coloredlogs.install(level=LOG_LEVEL[log],\n                        fmt=\"%(levelname)s - %(message)s\")\n\n    user = get_default_username(user)\n    config = ConfigParser()\n    config.optionxform = str\n\n    if env == \".\":  # interactive\n        config, cpu, gpu, node, aws, user, overwrite = \\\n            interactive_setup(env, config, cpu, gpu, node, aws, user, overwrite)\n    else:\n        try:\n            if not os.path.isfile(env):\n                logger.info(\"Load default env.ini file.\")\n                env = os.path.join(env, \"env.ini\")\n            config.read(env)\n        except Exception as e:\n            logger.fatal(\"failed to read %s\", env)\n            raise e\n    setup(config, cpu, gpu, node, aws, user, overwrite, log)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "src/aup/setupdb/__init__.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\""
  },
  {
    "path": "src/aup/setupdb/__main__.py",
    "content": "#!/usr/bin/env python\n\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nSet up database for Auptimizer\n==============================\n\nSet up the database for **Auptimizer** based on the specified environment ini file.\n\nIt is called automatically when user sets up the **Auptimizer** for the first time.\n\nUse it to reset database to the **original** state.\n\nAdditional arguments\n--------------------\n\n.. program-output:: python3 -m aup.setupdb -h\n\n\"\"\"\n\nimport logging\nimport os\n\nimport click\nimport coloredlogs\nfrom six.moves.configparser import ConfigParser\n\nfrom ..utils import LOG_LEVEL\n\nlogger = logging.getLogger(\"aup.setupdb\")\n\n\n@click.command(name=\"Setup database\",\n               context_settings=dict(help_option_names=['-h', '--help']))\n@click.argument(\"env_file\", type=click.Path(exists=True))\n@click.option(\"--user\", default=os.environ[\"USER\"], help=\"username for history tracking\")\n@click.option(\"--cpu\", default=4, type=click.INT, help=\"number of CPUs to run parallel\")\n@click.option(\"--name\", default=\"localhost\", help=\"resource name, not used\")\n@click.option(\"--log\", default=\"info\", type=click.Choice([\"debug\", \"info\", \"warn\", \"error\"]), help=\"Log level\")\ndef main(env_file, user, cpu, name, log):\n    \"\"\"Create Database for *Auptimizer* env.ini.\n\n    \\b\n    Arguments:\n        env_file {str}: Auptimizer environment file\n    \"\"\"\n    config = ConfigParser()\n    config.read(env_file)\n\n    coloredlogs.install(level=LOG_LEVEL[log], fmt=\"%(name)s - %(levelname)s - %(message)s\")\n\n    if config.get(\"Auptimizer\", \"SQL_ENGINE\") == \"sqlite\":\n        from . import sqlite\n        sqlite.create_database(config, [user], cpu, name)\n    else:\n        raise KeyError(\"%s is not implemented\" % config.get(\"Auptimizer\", \"SQL_ENGINE\"))\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "src/aup/setupdb/reset.py",
    "content": "#!/usr/bin/env python\n\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nReset database\n==============\n\nReset database **without** removing experiment history.\n\nAdditional arguments\n--------------------\n\n.. program-output:: python3 -m aup.setupdb.reset -h\n\n\"\"\"\nimport click\nfrom six.moves.configparser import ConfigParser\n\n\n@click.command(name=\"Reset DB resource table\",\n               context_settings=dict(help_option_names=['-h', '--help']))\n@click.argument(\"env_file\", type=click.Path(exists=True))\ndef main(env_file):\n    \"\"\"Reset database defined in env.ini file, history remains.\n    \\b\\n\n    Copyright (C) 2018  LG Electronics Inc.\n    \\b\\n\n    GPL-3.0 License. This program comes with ABSOLUTELY NO WARRANTY;\n    \\b\\n\n    Arguments:\n        env_file {str}: Auptimizer environment file\n    \"\"\"\n    config = ConfigParser()\n    config.read(env_file)\n\n    if config.get(\"Auptimizer\", \"SQL_ENGINE\") == \"sqlite\":\n        from . import sqlite\n        sqlite.reset(config)\n    else:\n        raise KeyError(\"%s is not implemented\" % config.get(\"Auptimizer\", \"SQL_ENGINE\"))\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "src/aup/setupdb/sqlite.py",
    "content": "#!/usr/bin/env python\n\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nSet up SQLite database for Auptimizer\n=====================================\n\nThis code is running automatically during the setup.\nIf needed, it can be used as\n\n.. program-output:: python3 -m aup.setupdb.sqlite -h\n\nAPIs\n----\n\"\"\"\nimport sqlite3\nimport os\nimport click\nimport json\nimport logging\nimport coloredlogs\nfrom ..utils import get_default_username, LOG_LEVEL\n\nfrom six.moves.configparser import ConfigParser\n\nlogger = logging.getLogger(\"aup.setupdb.sqlite\")\n\n\ndef _create_connection(db_file):\n    filename = os.path.expanduser(db_file)\n    return sqlite3.connect(filename)\n\n\ndef _insert_resource(config, res_name, cursor, name, type):\n    if not config.has_option(\"Auptimizer\", res_name):\n        return\n    for i in json.loads(config.get(\"Auptimizer\", res_name)):\n        cursor.execute(\"INSERT INTO resource (rid, name, type, status) VALUES (?,?,?,?)\",\n                       (i, name, type, \"free\"))\n\n\ndef create_database(config, usernames, cpu, name):\n    \"\"\"Create new database for Auptimizer\n    \n    :param config: contains ``SQLITE_FILE``, ``gpu_mapping`` under ``Auptimizer`` section\n    :type config: configparser.ConfigParser\n    :param usernames: list of username, not used\n    :type usernames: list(str)\n    :param cpu: number of CPUs for parallel jobs\n    :type cpu: int\n    :param name: node information, not used\n    :type name: str\n    \"\"\"\n    try:\n        file = config.get(\"Auptimizer\", \"SQLITE_FILE\")\n    except Exception as e:\n        logger.fatal(\"failed to retrieve SQLITE_FILE from aup environment\")\n        raise e\n    conn = _create_connection(file)\n    c = conn.cursor()\n\n    # User Table\n    c.execute(\"DROP TABLE IF EXISTS user;\")\n    c.execute(\"\"\"CREATE TABLE user\n        (uid INTEGER PRIMARY KEY NOT NULL, name TEXT UNIQUE, permission BLOB);\"\"\")\n\n    # Resource Table\n    c.execute(\"DROP TABLE IF EXISTS resource;\")\n    c.execute(\"\"\"CREATE TABLE resource\n        (rid INTEGER PRIMARY KEY NOT NULL, name TEXT, type TEXT, status TEXT)\"\"\")\n\n    # Experiment Table\n    c.execute(\"DROP TABLE IF EXISTS experiment;\")\n    c.execute(\"\"\"CREATE TABLE experiment \n        (eid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, uid INTEGER, name TEXT, start_time INTEGER, end_time INTEGER,\n         status TEXT CHECK(status IN ('CREATED', 'RUNNING', 'STOPPED', 'FINISHED', 'FAILED', 'STOPPING', 'REQUEST_STOP')),\n         exp_config BLOB, error_msg TEXT NULL,\n        FOREIGN KEY(uid) REFERENCES user(uid));\"\"\")\n\n    # Job Table\n    c.execute(\"DROP TABLE IF EXISTS job;\")\n    c.execute(\"\"\"CREATE TABLE job\n        (jid INTEGER PRIMARY KEY NOT NULL, score REAL, eid INTEGER, start_time INTEGER, end_time INTEGER,\n        status TEXT CHECK(status IN ('RUNNING', 'EARLY_STOPPED', 'FINISHED', 'FAILED')),\n        job_config BLOB,\n        FOREIGN KEY(eid) REFERENCES experiment(eid));\"\"\")\n\n    # Job Attempt Table\n    c.execute(\"DROP TABLE IF EXISTS job_attempt;\")\n    c.execute(\"\"\"CREATE TABLE job_attempt\n        (jaid INTEGER PRIMARY KEY NOT NULL, jid INTEGER, num INTEGER, rid INTEGER, start_time INTEGER, end_time INTEGER,\n        FOREIGN KEY(jid) REFERENCES job(jid),\n        FOREIGN KEY(rid) REFERENCES resource(rid));\"\"\")\n    \n    # Intermediate result table\n    c.execute(\"DROP TABLE IF EXISTS intermediate_result;\")\n    c.execute(\"\"\"CREATE TABLE intermediate_result\n        (irid INTEGER PRIMARY KEY NOT NULL, num INTEGER, score REAL, jid INTEGER, receive_time INTEGER,\n        FOREIGN KEY(jid) REFERENCES job(jid));\"\"\")\n\n    # Multiple results table\n    c.execute(\"DROP TABLE IF EXISTS multiple_result;\")\n    c.execute(\"\"\"CREATE TABLE multiple_result\n        (mrid INTEGER PRIMARY KEY NOT NULL, label_order INTEGER, value REAL, receive_time INTEGER, \\\n            jid INTEGER, irid INTEGER, eid INTEGER, is_last_result INTERGER,\n        FOREIGN KEY(jid) REFERENCES job(jid),\n        FOREIGN KEY(irid) REFERENCES intermediate_result(irid),\n        FOREIGN KEY(eid) REFERENCES experiment(eid));\"\"\")\n\n    for username in usernames:\n        # currently no specific limitation\n        c.execute(\"INSERT INTO user (name, permission) VALUES (?,?)\", (username, \"all\"))\n\n    _insert_resource(config, \"gpu_mapping\", c, name, \"gpu\")\n    _insert_resource(config, \"node_mapping\", c, \"remote\", \"node\")\n    _insert_resource(config, \"aws_mapping\", c, \"remote\", \"aws\")\n\n    for i in range(cpu):\n        c.execute(\"INSERT INTO resource (name, type, status) VALUES (?,?,?)\", (name, \"cpu\", \"free\"))\n    c.execute(\"INSERT INTO resource (name, type, status) VALUES (?,?,?)\", (name, \"passive\", \"free\"))\n    conn.commit()\n    conn.close()\n\n    # print(\"\\033[93mSQLite3 Database is created at %s\\033[0m\" % config.get(\"Auptimizer\", \"SQLITE_FILE\"))\n    logger.info(\"SQLite3 Database is created at %s\" % config.get(\"Auptimizer\", \"SQLITE_FILE\"))\n\n\ndef reset(config):\n    \"\"\"Close on-going jobs/experiment and reset resources without deleting existing results:\n    \n    :param config: contains ``SQLITE_FILE`` under ``Auptimizer`` section\n    :type config: configparser.ConfigParser\n    \"\"\"\n\n    conn = _create_connection(config.get(\"Auptimizer\", \"SQLITE_FILE\"))\n    c = conn.cursor()\n\n    c.execute(\"UPDATE experiment SET end_time=strftime('%s','now') WHERE end_time ISNULL;\")\n    c.execute(\"UPDATE job SET score=-999, end_time=strftime('%s','now') WHERE end_time ISNULL;\")\n    c.execute(\"UPDATE resource SET status='free' WHERE status='busy';\")\n    conn.commit()\n    conn.close()\n\n\n@click.command(name=\"create Auptimizer database, prefer to use aup.setupdb.reset instead of calling this directly\",\n               context_settings=dict(help_option_names=['-h', '--help']))\n@click.argument(\"env_file\", type=click.Path(exists=True))\n@click.option(\"--user\", default=None, help=\"username for history tracking\")\n@click.option(\"--cpu\", default=4, type=click.INT, help=\"number of CPUs to run parallel\")\n@click.option(\"--name\", default=\"localhost\", help=\"resource name, not used\")\n@click.option(\"--log\", default=\"info\", type=click.Choice([\"debug\", \"info\", \"warn\", \"error\"]), help=\"Log level\")\n# name is no in use.  - all resources are under the name of `localhost`\ndef main(env_file, user, cpu, name, log):  # pragma: no cover\n    \"\"\"Create database for **Auptimizer** with specified in env.ini file.\n    \\b\\n\n    Copyright (C) 2018  LG Electronics Inc.\n    \\b\\n\n    GPL-3.0 License. This program comes with ABSOLUTELY NO WARRANTY;\n    \\b\\n\n    Arguments:\n        env_file {str}: Auptimizer environment file\n    \"\"\"\n    coloredlogs.install(level=LOG_LEVEL[log],\n                        fmt=\"%(asctime)-15s - %(name)s - %(levelname)s - %(message)s\")\n\n    user = get_default_username(user)\n\n    config = ConfigParser()\n    config.read(env_file)\n    create_database(config, [user], cpu, name)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "src/aup/utils.py",
    "content": "#!/usr/bin/env python\n\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nUtility functions\n=================\n\nSupporting functions used by other modules.\n\nAPIs\n----\n\"\"\"\nfrom __future__ import print_function\n\nimport sys\n\nimport logging\nimport os\nfrom os import path\nfrom six.moves import input\nfrom six.moves.configparser import ConfigParser\nimport paramiko as pm\nfrom paramiko import SFTPClient\n\nfrom .aup import BasicConfig, print_result\n\nlogger = logging.getLogger(__name__)\n\nLOG_LEVEL = {\"debug\": logging.DEBUG, \"info\": logging.INFO, \"warn\": logging.WARN, \"error\": logging.ERROR}\n\nDEFAULT_AUPTIMIZER_PATH = path.join(\".aup\")  # use local as default\n\n\ndef check_missing_key(config, key, msg, log=logger):\n    \"\"\"Verify important key is present, otherwise raise exception\n\n    :param config: configuration\n    :type config: dict\n    :param key: key name\n    :type key: str\n    :param msg: warning message when key is not present\n    :type msg: str\n    :param log: logger obj to trace where the function is called, default is aup.utils\n    :type log: logging.Logger\n    \"\"\"\n    if key not in config:\n        log.error(msg)\n        raise KeyError(msg)\n\n\ndef get_default_connector(auppath=DEFAULT_AUPTIMIZER_PATH, log=logger):\n    \"\"\"Get default connector based on .env\n\n    :param auppath: aup environment folder, contains `env.ini` file\n    :param log: logger obj to trace where the function is called, default is aup.utils\n    :type log: logging.Logger\n    :return: Database connector\n    :rtype: :mod:`aup.ET.Connector.AbstractConnector`\n    \"\"\"\n    config = load_default_env(auppath=auppath)\n    log.debug(config)\n    if \"SQL_ENGINE\" not in config:\n        raise KeyError(\"No SQL setup for SQL_ENGINE in %s\"%auppath)\n    elif config[\"SQL_ENGINE\"] == \"sqlite\":\n        from .ET.Connector.SQLiteConnector import SQLiteConnector\n        if \"SQLITE_FILE\" not in config:\n            raise KeyError(\"SQLITE_FILE is missing in %s for sqlite setup\"%auppath)\n        logger.info(\"Use default connector at %s\" % config[\"SQLITE_FILE\"])\n        return SQLiteConnector(path.expanduser(config[\"SQLITE_FILE\"]))\n    else:\n        raise KeyError(\"SQL setup for %s is not supported\" % config[\"SQLITE_FILE\"])\n\n\ndef get_default_username(username=None):\n    \"\"\"\n    Get default username for Auptimizer\n    \n    :param username: username\n    :return: username\n    \"\"\"\n    if username is None:\n        if \"USER\" not in os.environ or not os.environ[\"USER\"]:\n            logger.critical(\"No USER specified, use `default`.\")\n            return \"default\"\n        else:\n            logging.info(\"Using default user %s\" % os.environ[\"USER\"])\n            return os.environ[\"USER\"]\n    else:\n        logging.debug(\"For user %s\" % username)\n        return username\n\n\ndef get_from_options(msg, values, default=None):  # pragma: no cover\n    \"\"\"\n    helper function to ask from user input, and validate it is one of the permitted values.\n    \n    :param msg: message to ask the user\n    :param values: permitted values\n    :param default: default value when user skip, if None, values[0] is used.\n    :return: value with the same type as values[0]\n    \"\"\"\n    if default is None:\n        default = values[0]\n    v = input(msg + \" [%s]:\" % str(default)) or default\n    v = type(default)(v)\n    if v not in values:\n        logger.fatal(\"%s is not valid value, choose from [%s]\" % (v, \"|\".join([str(v) for v in values])))\n        exit(1)\n    return v\n\n\ndef load_default_env(auppath=DEFAULT_AUPTIMIZER_PATH, log=logger, use_default=True):\n    \"\"\"Load default environment variables for aup.\n    Search recursively to upper folder\n\n    :param auppath: aup environment folder, contains `env.ini` file\n    :type auppath: str\n    :param log: logger obj to trace where the function is called, default is aup.utils, \n                if None, then no logging is performed\n    :type log: logging.Logger\n    :param use_default: if auppath is empty, use user's home folder instead.\n    :type use_default: bool\n    :return: key-value of parameters\n    :rtype: dict\n    \"\"\"\n    if not path.isfile(path.join(auppath, \"env.ini\")):\n        if use_default:\n            auppath = path.join(path.expanduser(\"~\"), \".aup\")\n            if log is not None:\n                log.warning(\"Use default env at %s\" % auppath)\n            if not path.isfile(path.join(auppath, \"env.ini\")):  # pragma: no cover\n                raise Exception(\"Failed to find env.ini\")\n        else:\n            raise ValueError(\"Auptimizer folder %s is missing\" % auppath)\n    if log is not None:\n        log.info(\"Auptimizer environment at %s\", auppath)\n    config = ConfigParser()\n    config.optionxform = str\n    config.read(path.join(auppath, \"env.ini\"))\n    return {i[0]: i[1] for i in config.items(\"Auptimizer\")}\n\n\ndef parse_result(result, log=logger):\n    \"\"\"\n    Parse the result printed by :func:`print_result`\n\n    :param log: logger obj to trace where the function is called, default is aup.utils\n    :type log: logging.Logger\n    :param result: result string\n    :type result: str\n    :return: result for Auptimizer update\n    :rtype: float\n    \"\"\"\n    result = result.splitlines()\n    for r in result:\n        if \"#Auptimizer:\" in r:\n            result = r[12:]\n            try:\n                return float(result)\n            except ValueError:\n                logger.debug(\"Cannot convert the result to float - trying to convert the result to a list\")\n                return [float(f) for f in result.split(',')]\n\n    log.fatal(\"Result `%s` is not created by aup\", result)\n    raise ValueError(\"Result `%s` is not created by aup print_result\" % result)\n\ndef parse_one_line(result, log=logger):\n    if \"#Auptimizer:\" in result:\n        result = result[12:]\n        try:\n            return [float(result)]\n        except ValueError:\n            logger.debug(\"Cannot convert the result to float - trying to convert the result to a list\")\n            return [float(f) for f in result.split(',')]\n\n    return None\n\n\ndef set_default_keyvalue(key, value, d, inplace=True, log=logger):\n    \"\"\"Set default value for dict if key is not defined\n\n    :param key: key name\n    :type key: str\n    :param value: key value\n    :type value: object\n    :param d: target dict object to be updated\n    :type d: dict\n    :param inplace: whether update in place.\n    :type inplace: boolean\n    :param log: logger obj to trace where the function is called, default is aup.utils\n    :type log: logging.Logger\n    :return: updated dict\n    :rtype: dict\n    \"\"\"\n    if not inplace:\n        d = d.copy()\n    if key not in d:\n        log.warning(\"Using default value %s for %s\" % (value, key))\n        d[key] = value\n    return d\n\ndef block_until_ready(client, socket, env):\n    \"\"\"Block current thread until we receive the ready status\n    :param client: the current connected client\n    :type client: SSHClient\n    :param socket: socket connection to machine where job is executed\n    :param env: environment to set up on the remote machine\n    \"\"\"\n    from time import sleep\n    import paramiko as pm\n\n    sleep_time_s = 0.1\n    timeout_time_s = 5\n    nop_linux_command = \":\"\n\n    while socket.channel.exit_status_ready() == False:\n        client.exec_command(nop_linux_command, timeout=timeout_time_s, environment=env)\n        logger.debug(\"Command executed successfully, now sleeping\")\n        sleep(sleep_time_s)\n\ndef open_sftp_with_timeout(client, timeout=5):\n    \"\"\"\n    SFTP Connection to transfer files and environment between Auptimizer source machine and remote machine.\n    \"\"\"\n    t = client.get_transport()\n    chan = t.open_session(\n            window_size=None, max_packet_size=None, timeout=timeout\n        )\n    if chan is None:\n        return None\n    chan.invoke_subsystem(\"sftp\")\n    return SFTPClient(chan)\n\ndef get_available_port():\n    \"\"\"\n    Returns first open port available.\n    \"\"\"\n    from socket import socket\n    with socket() as s:\n        s.bind(('',0))\n        port = int(s.getsockname()[1])\n    return port"
  },
  {
    "path": "src/aup/visualize.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nVisualize one experiment result\n===============================\n\n:mod:`aup.visualize` is the entry point to visualize the result from an \nexperiment ``eid``::\n\n  python -m aup.visualize <eid>\n\nAdditional arguments\n--------------------\n\n.. program-output:: python3 -m aup.visualize -h\n  \n\"\"\"\nimport json\nimport logging\nimport os\n\nimport click\nimport coloredlogs\nimport pandas as pd\n\nif \"DISPLAY\" not in os.environ:\n    import matplotlib\n    matplotlib.use(\"AGG\")\n\nimport matplotlib.pylab as plt\n\nfrom .utils import get_default_connector\n\n_log_level = {\"debug\": logging.DEBUG, \"info\": logging.INFO, \"warn\": logging.WARN, \"error\": logging.ERROR}\n\nlogger = logging.getLogger(__name__)\n\n\n@click.command(name=\"Visualize an experiment\",context_settings=dict(help_option_names=['-h', '--help']))\n@click.argument(\"eid\", type=int)\n@click.option(\"--log\", default=\"info\", type=click.Choice([\"debug\", \"info\", \"warn\", \"error\"]))\n@click.option(\"--scale\", default=\"linear\", type=click.Choice(['linear', 'log']), help=\"Scale for y\")\n@click.option(\"--save\", default=None, type=str, help=\"output file\")\ndef main(eid, log, scale, save):\n    \"\"\"Visualize result for experiment\n    \\b\\n\n    Copyright (C) 2018  LG Electronics Inc.\n    \\b\\n\n    GPL-3.0 License. This program comes with ABSOLUTELY NO WARRANTY;\n    \\b\\n\n    Arguments:\n        eid {int} -- Experiment ID\n    \"\"\"\n    coloredlogs.install(level=_log_level[log], fmt=\"%(asctime)-15s - %(name)s - %(levelname)s - %(message)s\")\n    sql = get_default_connector()\n    sql.cursor.execute(\"SELECT * FROM experiment where eid = ?\", (eid,))\n    experiment_config = json.loads(sql.cursor.fetchone()[4])\n\n    history = sql.get_all_history(eid)\n    history = pd.DataFrame(history)\n    history.columns = ['jid', 'score', 'eid', 'rid', 'start_time', 'end_time', 'job_config']\n\n    fig = plt.figure(figsize=(16, 8))\n    fig.suptitle(\"Search Algorithm %s\" % experiment_config['proposer'])\n    plt.subplot(121)\n    plt.plot(history.score)\n    plt.legend()\n    plt.xlabel(\"Iteration\")\n    plt.ylabel(\"Accuracy\")\n    plt.yscale(scale)\n\n    plt.subplot(122)\n    if experiment_config[\"target\"] == \"min\":\n        plt.plot(history.score.cummin())\n        job = history.loc[history.score.idxmin()]\n    else:\n        plt.plot(history.score.cummax())\n        job = history.loc[history.score.idxmax()]\n    plt.legend()\n    plt.xlabel(\"Iteration\")\n    plt.ylabel(\"Best Accuracy so far\")\n    plt.yscale(scale)\n\n    print(\"Best score is %f with config %s\" % (job.score, job.job_config))\n    if save:\n        plt.savefig(save)\n    else:\n        plt.show()\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "tests/EE/Resource/.gitignore",
    "content": "data/jobs/\ndata/script/jobs\n"
  },
  {
    "path": "tests/EE/Resource/__init__.py",
    "content": ""
  },
  {
    "path": "tests/EE/Resource/test_AbstractResourceManager.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\nimport os\nfrom aup.EE.Resource import AbstractResourceManager\n\n\nclass AbsResourceManagerTestCase(unittest.TestCase):\n    connector = None\n    n_parallel = None\n    auppath = os.path.join(\"tests\", \"data\", \".aup\")\n\n    def test_import(self):\n        self.assertRaises(KeyError, AbstractResourceManager.get_resource_manager, \"none\", None, 1)\n        for k in AbstractResourceManager._SupportResource.keys():\n            if k == \"aws\":\n                continue\n            t = AbstractResourceManager.get_resource_manager(k, self.connector, self.n_parallel, auppath=self.auppath)\n            self.assertIsInstance(t, AbstractResourceManager.AbstractResourceManager)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/EE/Resource/test_CPUResourceManager.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport os\nimport unittest\nfrom shutil import copyfile\nfrom shutil import rmtree\nimport json\n\nfrom aup import BasicConfig\nfrom aup.EE.Job import Job\nfrom aup.EE.Resource.CPUResourceManager import CPUResourceManager\nfrom aup.utils import get_default_connector\n\nclass CPUResourceManagerTestCase(unittest.TestCase):\n    n_parallel = 1\n    auppath = os.path.join(\"tests\", \"data\", \".aup\")\n    job = Job(\"test_Job.py\", BasicConfig(), \"./tests/EE\")\n    job_fail = Job(\"task1.py\", BasicConfig(), \"./tests/data\")\n    job_fail2 = Job(\"task2.py\", BasicConfig(), \"./tests/data\")\n    job_fail3 = Job(\"task3.py\", BasicConfig(), \"./tests/data\")\n    job_5 = Job(\"task5.py\", {}, \"./tests/data\")\n    ori_db = os.path.join(auppath, \"sqlite3.db\")\n    bk_db = os.path.join(auppath, \"bk.db\")\n    val = 0\n\n    def setUp(self):\n        copyfile(self.ori_db, self.bk_db)\n        self.connector = get_default_connector(self.auppath)\n        self.rm = CPUResourceManager(self.connector, self.n_parallel, eid=1)\n\n    def tearDown(self):\n        copyfile(self.bk_db, self.ori_db)\n        os.remove(self.bk_db)\n\n    def test_get_resource(self):\n        self.assertIsInstance(self.rm.get_available(\"test\", \"cpu\"), int)\n        # !IMPORTANT - currently, there is no user authentication.\n        self.assertIsInstance(self.rm.get_available(\"test2\", \"cpu\"), int)\n\n    def test_run(self):\n        def callback(*args):\n            self.val = -1\n\n        self.rm.run(self.job, self.rm.get_available(\"test\", \"cpu\"), {}, callback)\n        self.rm.executor.shutdown(wait=True)\n        self.assertEqual(self.val, -1)\n\n    def test_fail_run(self):\n        def callback(*args):\n            raise ChildProcessError\n        self.rm.run(self.job_fail, self.rm.get_available(\"test\", \"cpu\"), {}, callback)\n        self.rm.run(self.job_fail2, self.rm.get_available(\"test\", \"cpu\"), {}, callback)\n        self.rm.run(self.job_fail3, self.rm.get_available(\"test\", \"cpu\"), {}, callback)\n\n    def test_full_run(self):\n        def callback(*args):\n            pass\n        self.rm.run_job(self.job, self.rm.get_available(\"test\", \"cpu\"), {}, callback)\n        self.rm.finish_job(self.job.jid, 2.0)\n        self.rm.executor.shutdown(wait=True)\n        self.assertListEqual([1, 0.1], self.rm.finish())\n\n    def test_finish(self):\n        self.rm.suspend()\n        self.assertListEqual([1, 0.1], self.rm.finish())\n\nclass CPUResourceManagerEarlyStopTestCase(unittest.TestCase):\n    n_parallel = 1\n    auppath = os.path.join(\"tests\", \"data\", \".aup\")\n    job_5 = Job(\"task5.py\", BasicConfig({\"x\":5}), \"./tests/data\")\n    job_5.jid = 1\n    ori_db = os.path.join(auppath, \"sqlite3.db\")\n    bk_db = os.path.join(auppath, \"bk.db\")\n    val = 0\n\n    def setUp(self):\n        copyfile(self.ori_db, self.bk_db)\n        self.connector = get_default_connector(self.auppath)\n        self.rm = CPUResourceManager(self.connector, self.n_parallel,\n                                    track_intermediate_results=True,\n                                    early_stop={\"aup_policy\": \"median\",\n                                                \"aup_policy_steps\": 2},\n                                    eid=1)\n\n    def tearDown(self):\n        copyfile(self.bk_db, self.ori_db)\n        os.remove(self.bk_db)\n\n    def test_early_stop_median(self):\n        def callback(*args):\n            self.val = -1\n\n        self.rm.policy = \"median\"\n        self.rm.run_job(self.job_5, self.rm.get_available(\"test\", \"cpu\"), {}, callback)\n        self.rm.finish()\n\n        self.assertDictEqual(self.rm.interm_job_res, {1: [6.0, 7.0, 8.0, 9.0, 10.0, 11.0]})\n        self.assertEqual(self.val, -1)\n    \n    def test_early_stop_bandit(self):\n        def callback(*args):\n            self.val = -1\n\n        self.rm.policy = \"bandit\"\n        self.rm.run_job(self.job_5, self.rm.get_available(\"test\", \"cpu\"), {}, callback)\n        self.rm.finish()\n\n        self.assertDictEqual(self.rm.interm_job_res, {1: [6.0, 7.0, 8.0, 9.0, 10.0, 11.0]})\n        self.assertEqual(self.val, -1)\n    \n    def test_early_stop_truncation(self):\n        def callback(*args):\n            self.val = -1\n\n        self.rm.policy = \"truncation\"\n        self.rm.run_job(self.job_5, self.rm.get_available(\"test\", \"cpu\"), {}, callback)\n        self.rm.finish()\n\n        self.assertDictEqual(self.rm.interm_job_res, {1: [6.0, 7.0, 8.0, 9.0, 10.0, 11.0]})\n        self.assertEqual(self.val, -1)\n\nclass CPUResourceManagerSaveModelTestCase(unittest.TestCase):\n    eid = 2\n    n_parallel = 4\n    workingdir = os.path.join('tests', 'data')\n    auppath = os.path.join(\"tests\", \"data\", \".aup\")\n    save_model_folder = os.path.join(workingdir, \"aup_models\", 'models_{}'.format(eid))\n    res_folder = os.path.join(save_model_folder, '15')\n    job_1 = Job(\"task6.py\", BasicConfig({\"x\":5}), \"./tests/data\")\n    job_1.jid = 2\n    job_2 = Job(\"task6.py\", BasicConfig({\"x\":15}), \"./tests/data\")\n    job_2.jid = 3\n    job_3 = Job(\"task6.py\", BasicConfig({\"x\":2}), \"./tests/data\")\n    job_3.jid = 4\n    job_4 = Job(\"task6.py\", BasicConfig({\"x\":1}), \"./tests/data\")\n    job_4.jid = 5\n    ori_db = os.path.join(auppath, \"sqlite3.db\")\n    bk_db = os.path.join(auppath, \"bk.db\")\n    val = 0\n\n    def setUp(self):\n        copyfile(self.ori_db, self.bk_db)\n        self.connector = get_default_connector(self.auppath)\n        self.rm = CPUResourceManager(self.connector, self.n_parallel,\n                                    eid=self.eid,\n                                    maximize=True,\n                                    save_model=True,\n                                    script='task6.py',\n                                    workingdir=self.workingdir)\n\n    def tearDown(self):\n        copyfile(self.bk_db, self.ori_db)\n        rmtree(self.save_model_folder)\n        os.remove(self.bk_db)\n\n    def test_normal_path(self):\n        def callback(*args):\n            self.connector.end_job(args[1], args[0], 'FINISHED')\n            self.val = -1\n\n        self.val = 0\n\n        self.connector.start_experiment('test', 'test', '{}')\n\n        curr_rid = self.rm.get_available(\"test\", \"cpu\")\n        self.connector.start_job(self.eid, curr_rid, self.job_1.config)\n        self.rm.run_job(self.job_1, self.rm.get_available(\"test\", \"cpu\"), {}, callback)\n\n        curr_rid = self.rm.get_available(\"test\", \"cpu\")\n        self.connector.start_job(self.eid, curr_rid, self.job_2.config)\n        self.rm.run_job(self.job_2, self.rm.get_available(\"test\", \"cpu\"), {}, callback)\n\n        curr_rid = self.rm.get_available(\"test\", \"cpu\")\n        self.connector.start_job(self.eid, curr_rid, self.job_3.config)\n        self.rm.run_job(self.job_3, self.rm.get_available(\"test\", \"cpu\"), {}, callback)\n\n        curr_rid = self.rm.get_available(\"test\", \"cpu\")\n        self.connector.start_job(self.eid, curr_rid, self.job_4.config)\n        self.rm.run_job(self.job_4, self.rm.get_available(\"test\", \"cpu\"), {}, callback)\n\n        self.rm.finish()\n\n        self.assertTrue(os.path.exists(self.res_folder))\n        self.assertEqual(self.val, -1)\n\nclass CPUResourceManagerMultipleResTestCase(unittest.TestCase):\n    n_parallel = 1\n    auppath = os.path.join(\"tests\", \"data\", \".aup\")\n    job_7 = Job(\"task8.py\", BasicConfig({\"x\":5}), \"./tests/data\")\n    job_7.jid = 2\n    ori_db = os.path.join(auppath, \"sqlite3.db\")\n    bk_db = os.path.join(auppath, \"bk.db\")\n    val = 0\n    mult_res_labels = [\"x\", \"y\"]\n    eid = 2\n\n    def setUp(self):\n        copyfile(self.ori_db, self.bk_db)\n        self.connector = get_default_connector(self.auppath)\n        self.rm = CPUResourceManager(self.connector, self.n_parallel,\n                                    eid=self.eid, multi_res_labels=self.mult_res_labels)\n\n    def tearDown(self):\n        copyfile(self.bk_db, self.ori_db)\n        os.remove(self.bk_db)\n\n    def test_normal_path(self):\n        self.val = 0\n\n        def callback(*args):\n            self.val = args\n\n        self.connector.start_experiment('test', 'test', '{}')\n\n        curr_rid = self.rm.get_available(\"test\", \"cpu\")\n        self.connector.start_job(self.eid, curr_rid, self.job_7.config)\n        self.rm.run_job(self.job_7, self.rm.get_available(\"test\", \"cpu\"), {}, callback)\n\n        self.rm.finish()\n\n        self.connector.cursor.execute(\"SELECT * FROM multiple_result WHERE jid=2 order by label_order\")\n        res = self.connector.cursor.fetchall()\n\n        self.assertEqual(self.val, (6.0, 2))\n\n        self.assertEqual(res[0][1], 1)\n        self.assertEqual(res[1][1], 2)\n        self.assertEqual(res[0][2], 7)\n        self.assertEqual(res[1][2], 8)\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/EE/Resource/test_GPUResourceManager.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport os\nimport unittest\nfrom shutil import copyfile\nimport time\n\nfrom aup import BasicConfig\nfrom aup.EE.Job import Job\nfrom aup.EE.Resource.GPUResourceManager import GPUResourceManager\nfrom aup.utils import get_default_connector\n\n\nclass GPUResourceManagerTestCase(unittest.TestCase):\n    n_parallel = 1\n    auppath = os.path.join(\"tests\", \"data\", \".aup\")\n    connector = get_default_connector(auppath)\n    val = 0\n    ori_db = os.path.join(auppath, \"sqlite3.db\")\n    bk_db = os.path.join(auppath, \"bk.db\")\n    job = Job(\"test_Job.py\", BasicConfig(), \"./tests/EE\")\n\n    def setUp(self):\n        copyfile(self.ori_db, self.bk_db)\n        self.connector = get_default_connector(self.auppath)\n        self.rm = GPUResourceManager(self.connector, self.n_parallel, auppath=self.auppath, eid=1)\n\n    def tearDown(self):\n        copyfile(self.bk_db, self.ori_db)\n        os.remove(self.bk_db)\n\n    def test_run(self):\n        def callback(*args):\n            self.val = -1\n\n        self.rm.run(self.job, self.rm.get_available(\"test\", \"gpu\"), {}, callback)\n        self.rm.finish()\n\n        self.assertEqual(self.val, -1)\n\n\nif __name__ == \"__main__\":\n    unittest.main()\n"
  },
  {
    "path": "tests/EE/Resource/test_PassiveResourceManager.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport os\nimport unittest\nfrom shutil import copyfile\n\nfrom aup import BasicConfig\nfrom aup.EE.Job import Job\nfrom aup.EE.Resource.PassiveResourceManager import PassiveResourceManager\nfrom aup.utils import get_default_connector\n\n\nclass PassiveRMTestCase(unittest.TestCase):\n    auppath = os.path.join(\"tests\", \"data\", \".aup\")\n    job = Job(\"task1.py\", BasicConfig(), \"./tests/EE\")\n    ori_db = os.path.join(auppath, \"sqlite3.db\")\n    bk_db = os.path.join(auppath, \"bk.db\")\n    val = 0\n\n    def setUp(self):\n        copyfile(self.ori_db, self.bk_db)\n        self.connector = get_default_connector(self.auppath)\n        self.rm = PassiveResourceManager(self.connector, 1)\n\n    def tearDown(self):\n        copyfile(self.bk_db, self.ori_db)\n        os.remove(self.bk_db)\n\n    def test_get_available(self):\n        self.assertEqual(11, self.rm.get_available(\"test\", \"passive\"))\n        self.connector.take_available_resource(11)\n        self.assertEqual(None, self.rm.get_available(\"test\", \"passive\"))\n        self.rm.running = True\n        self.assertEqual(None, self.rm.get_available(\"test\", \"passive\"))\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/EE/Resource/test_SSHResourceManager.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\n\nimport unittest\nimport mockssh\nimport tempfile\nimport pdb\nfrom shutil import copyfile\nfrom time import sleep\nfrom six import PY2\n\nimport pkg_resources\n\nfrom aup.EE.Resource.SSHResourceManager import *\nfrom aup.EE.Job import Job\nfrom aup import BasicConfig\nfrom aup.Proposer import RandomProposer as rp\nfrom aup.utils import get_default_connector\nfrom threading import Lock\n\n@unittest.skipIf(PY2, \"mockssh and paramiko do not support python 2.7\")\nclass SSHResourceManagerTestCase(unittest.TestCase):\n\n    def test_parse_hostname(self):\n        self.assertRaises(ValueError, parse_hostname, \"testip\")\n        self.assertRaises(Exception, parse_hostname, \"a@b:cc\")\n\n        self.assertRaises(IOError, parse_hostname, \"a@b non-file\")\n        self.assertTupleEqual(('a', 'b', 22, None), parse_hostname(\"a@b\"))\n\n    def test_ssh_session(self):\n        pkey = pkg_resources.resource_filename(\"mockssh\", 'server-key')\n        data_folder = pkg_resources.resource_filename(__name__, 'data')\n        users = {\n            \"mockuser\": pkey,\n        }\n        scores = {}\n        mutex = Lock()\n\n        config = {  'workingdir': data_folder,\n                    'n_parallel': 2,\n                    'resource': 'node',\n                    'proposer': 'random',\n                    'script': os.path.join(data_folder,\"script\",\"rosenbrock_hpo.py\"),\n                    'n_samples': 10,\n                    'random_seed': 10,\n                    'parameter_config': [{'name': 'x', 'type': 'float', 'range': [-5, 5]},\n                                        {'name': 'y', 'type': 'float', 'range': [-5, 5]}],\n                    \"runtime_args\": {\n                        \"prescript\": \"export CUDA_VISIBLE_DEVICES=-1\",\n                        \"postscript\": \"echo $CUDA_VISIBLE_DEVICES\",\n                        \"overwrite\": 'true'\n                    }\n                }\n        m = rp.RandomProposer(config)\n\n        def callback_fun(score, jid):\n            mutex.acquire()\n            scores[jid] = score\n            mutex.release()\n\n        server1 = mockssh.Server(users)\n        server1.__enter__()\n\n        server2 = mockssh.Server(users)\n        server2.__enter__()\n\n        mngr = SSHResourceManager(None, config['n_parallel'], auppath=data_folder,\n                                    reconn_wait_time=3, max_retries=3)\n        mngr.mapping[1] = \"mockuser@127.0.0.1:\" + str(server1.port) + \" \" + pkey\n        mngr.mapping[2] = \"mockuser@127.0.0.1:\" + str(server2.port) + \" \" + pkey\n\n        for i in range(0, config['n_samples'], 2):\n            proposal = m.get()\n            job1 = Job(config['script'], BasicConfig(**proposal), config['workingdir'])\n            job1.jid = i\n            mngr.run(job1, 1, None, callback_fun, overwrite=True)\n\n            proposal = m.get()\n            job2 = Job(config['script'], BasicConfig(**proposal), config['workingdir'])\n            job2.jid = i+1\n            mngr.run(job2, 2, None, callback_fun, overwrite=True)\n\n        mngr.executor.shutdown(wait=True)\n\n        for key in scores:\n            self.assertTrue(scores[key] != \"ERROR\")\n\n    def test_recover_ssh_session(self):\n        pkey = pkg_resources.resource_filename(\"mockssh\", 'server-key')\n        data_folder = pkg_resources.resource_filename(__name__, 'data')\n        users = {\n            \"mockuser\": pkey,\n        }\n        scores = {}\n        mutex = Lock()\n\n        config = {  'workingdir': data_folder,\n                    'n_parallel': 1,\n                    'resource': 'node',\n                    'proposer': 'random',\n                    'script': os.path.join(data_folder,\"script\",\"rosenbrock_hpo.py\"),\n                    'n_samples': 10,\n                    'random_seed': 10,\n                    'parameter_config': [{'name': 'x', 'type': 'float', 'range': [-5, 5]},\n                                        {'name': 'y', 'type': 'float', 'range': [-5, 5]}],\n                    \"runtime_args\": {\n                        \"prescript\": \"export CUDA_VISIBLE_DEVICES=-1\",\n                        \"postscript\": \"echo $CUDA_VISIBLE_DEVICES\",\n                        \"overwrite\": 'true'\n                    }\n                }\n        m = rp.RandomProposer(config)\n\n        def callback_fun(score, jid):\n            mutex.acquire()\n            scores[jid] = score\n            mutex.release()\n\n        server1 = mockssh.Server(users)\n        server1.__enter__()\n\n        mngr = SSHResourceManager(None, config['n_parallel'], auppath=data_folder,\n                                        reconn_wait_time=5, max_retries=5)\n        mngr.mapping[1] = \"mockuser@127.0.0.1:\" + str(server1.port) + \" \" + pkey\n\n        for i in range(config['n_samples']):\n            proposal = m.get()\n            job1 = Job(config['script'], BasicConfig(**proposal), config['workingdir'])\n            job1.jid = i\n            mngr.run(job1, 1, None, callback_fun, overwrite=True)\n\n            if i == int(config['n_samples'] / 2):\n                # drop server and check after reopen it if we recover\n                server1.__exit__()\n                del server1\n                sleep(7)\n                server1 = mockssh.Server(users)\n                server1.__enter__()\n                mngr.mapping[1] = \"mockuser@127.0.0.1:\" + str(server1.port) + \" \" + pkey\n        for key in scores:\n            self.assertTrue(scores[key] != \"ERROR\")\n\nclass SSHResourceManagerEarlyStopTestCase(unittest.TestCase):\n    n_parallel = 1\n    auppath = os.path.join(\"tests\", \"data\", \".aup\")\n    workingdir = os.path.join(\"tests\", \"data\")\n    ori_db = os.path.join(auppath, \"sqlite3.db\")\n    bk_db = os.path.join(auppath, \"bk.db\")\n    val = 0\n    pkey = pkg_resources.resource_filename(\"mockssh\", 'server-key')\n    users = {\"mockuser\": pkey}\n\n    def setUp(self):\n        copyfile(self.ori_db, self.bk_db)\n        self.connector = get_default_connector(self.auppath)\n        self.rm = SSHResourceManager(self.connector, self.n_parallel, \n                                     track_intermediate_results=True,\n                                     early_stop={\"aup_policy\": \"median\",\n                                                \"aup_policy_steps\": 2},\n                                     eid=1, auppath=self.auppath)\n        self.server = mockssh.Server(self.users).__enter__()\n        self.rm.mapping[1] = \"mockuser@127.0.0.1:\" + str(self.server.port) + \" \" + self.pkey\n        self.val = 0\n\n    def tearDown(self):\n        self.server.__exit__()\n        copyfile(self.bk_db, self.ori_db)\n        os.remove(self.bk_db)\n\n    def test_early_stop_median(self):\n        mutex = Lock()\n        def callback(*args):\n            mutex.acquire()\n            self.val = -1\n            mutex.release()\n\n        self.rm.policy = \"median\"\n        job_5 = Job(\"task5.py\", BasicConfig({\"x\":5}), \"./tests/data\")\n        job_5.jid = 1\n        self.rm.run_job(job_5, 1, {}, callback)\n        self.rm.finish()\n\n        self.assertDictEqual(self.rm.interm_job_res, {1: [6.0, 7.0, 8.0, 9.0, 10.0, 11.0]})\n        self.assertEqual(self.val, -1)\n\n        self.rm.executor.shutdown(wait=True)\n\n    def test_early_stop_bandit(self):\n        mutex = Lock()\n        def callback(*args):\n            mutex.acquire()\n            self.val = -1\n            mutex.release()\n\n        self.rm.policy = \"bandit\"\n        job_5 = Job(\"task5.py\", BasicConfig({\"x\":5}), \"./tests/data\")\n        job_5.jid = 1\n        self.rm.run_job(job_5, 1, {}, callback)\n        self.rm.finish()\n\n        self.assertDictEqual(self.rm.interm_job_res, {1: [6.0, 7.0, 8.0, 9.0, 10.0, 11.0]})\n        self.assertEqual(self.val, -1)\n\n    def test_early_stop_truncation(self):\n        mutex = Lock()\n        def callback(*args):\n            mutex.acquire()\n            self.val = -1\n            mutex.release()\n\n        self.rm.policy = \"truncation\"\n        job_5 = Job(\"task5.py\", BasicConfig({\"x\":5}), \"./tests/data\")\n        job_5.jid = 1\n        self.rm.run_job(job_5, 1, {}, callback)\n        self.rm.finish()\n\n        self.assertDictEqual(self.rm.interm_job_res, {1: [6.0, 7.0, 8.0, 9.0, 10.0, 11.0]})\n        self.assertEqual(self.val, -1)\n\nclass AsyncSSHResourceManagerTestCase(unittest.TestCase):\n    def test_parse_hostname(self):\n        self.assertRaises(ValueError, parse_hostname, \"testip\")\n        self.assertRaises(Exception, parse_hostname, \"a@b:cc\")\n\n        self.assertRaises(IOError, parse_hostname, \"a@b non-file\")\n        self.assertTupleEqual(('a', 'b', 22, None), parse_hostname(\"a@b\"))\n\n    def test_async_ssh_session(self):\n        pkey = pkg_resources.resource_filename(\"mockssh\", 'server-key')\n        data_folder = pkg_resources.resource_filename(__name__, 'data')\n        users = {\n            \"mockuser\": pkey,\n        }\n        scores = {}\n        mutex = Lock()\n\n        config = {  'workingdir': data_folder,\n                    'n_parallel': 2,\n                    'resource': 'node',\n                    'proposer': 'random',\n                    'script': os.path.join(data_folder,\"script\",\"rosenbrock_hpo.py\"),\n                    'n_samples': 10,\n                    'random_seed': 10,\n                    'parameter_config': [{'name': 'x', 'type': 'float', 'range': [-5, 5]},\n                                        {'name': 'y', 'type': 'float', 'range': [-5, 5]}],\n                    \"runtime_args\": {\n                        \"prescript\": \"export CUDA_VISIBLE_DEVICES=-1\",\n                        \"postscript\": \"echo $CUDA_VISIBLE_DEVICES\",\n                        \"overwrite\": 'true'\n                    },\n                    \"resource_args\": {\n                        \"async_run\": 'true',\n                        \"async_reconnect\": 1\n                    }\n                }\n        m = rp.RandomProposer(config)\n\n        def callback_fun(score, jid):\n            mutex.acquire()\n            scores[jid] = score\n            mutex.release()\n\n        with mockssh.Server(users) as server1, mockssh.Server(users) as server2:\n\n            mngr = SSHResourceManager(None, config['n_parallel'], auppath=data_folder, async_reconnect=1, async_run=True)\n            mngr.mapping[1] = \"mockuser@127.0.0.1:\" + str(server1.port) + \" \" + pkey\n            mngr.mapping[2] = \"mockuser@127.0.0.1:\" + str(server2.port) + \" \" + pkey\n\n            for i in range(0, config['n_samples'], 2):\n                proposal = m.get()\n                job1 = Job(config['script'], BasicConfig(**proposal), config['workingdir'])\n                job1.jid = i\n                mngr.run(job1, 1, None, callback_fun, overwrite=True)\n\n                proposal = m.get()\n                job2 = Job(config['script'], BasicConfig(**proposal), config['workingdir'])\n                job2.jid = i+1\n                mngr.run(job2, 2, None, callback_fun, overwrite=True)\n\n            mngr.executor.shutdown(wait=True)\n\n        for key in scores:\n            self.assertTrue(scores[key] != \"ERROR\")\n\n    def test_async_recover_ssh_session(self):\n        pkey = pkg_resources.resource_filename(\"mockssh\", 'server-key')\n        data_folder = pkg_resources.resource_filename(__name__, 'data')\n        users = {\n            \"mockuser\": pkey,\n        }\n        scores = {}\n        mutex = Lock()\n\n        config = {  'workingdir': data_folder,\n                    'n_parallel': 1,\n                    'resource': 'node',\n                    'proposer': 'random',\n                    'script': os.path.join(data_folder,\"script\",\"rosenbrock_hpo.py\"),\n                    'n_samples': 4,\n                    'random_seed': 10,\n                    'parameter_config': [{'name': 'x', 'type': 'float', 'range': [-5, 5]},\n                                        {'name': 'y', 'type': 'float', 'range': [-5, 5]}],\n                    \"runtime_args\": {\n                        \"prescript\": \"export CUDA_VISIBLE_DEVICES=-1\",\n                        \"postscript\": \"echo $CUDA_VISIBLE_DEVICES\",\n                        \"overwrite\": 'true'\n                    },\n                    \"resource_args\": {\n                        \"async_run\": 'true',\n                        \"async_reconnect\": 1\n                    }\n                }\n        m = rp.RandomProposer(config)\n\n        def callback_fun(score, jid):\n            mutex.acquire()\n            scores[jid] = score\n            mutex.release()\n\n        server1 = mockssh.Server(users).__enter__()\n\n        mngr = SSHResourceManager(None, config['n_parallel'], auppath=data_folder,\n                                  async_reconnect=1,\n                                  reconn_wait_time=1, max_retries=5, async_run=True)\n        mngr.mapping[1] = \"mockuser@127.0.0.1:\" + str(server1.port) + \" \" + pkey\n\n        for i in range(config['n_samples']):\n            proposal = m.get()\n            job1 = Job(config['script'], BasicConfig(**proposal), config['workingdir'])\n            job1.jid = i\n            mngr.run(job1, 1, None, callback_fun, overwrite=True)\n\n            if i == int(config['n_samples'] / 2):\n                # drop server and check after reopen it if we recover\n                server1.__exit__()\n                del server1\n                sleep(2)\n                server1 = mockssh.Server(users).__enter__()\n                mngr.mapping[1] = \"mockuser@127.0.0.1:\" + str(server1.port) + \" \" + pkey\n\n        mngr.executor.shutdown(wait=True)\n\n        for key in scores:\n            self.assertTrue(scores[key] != \"ERROR\")\n\nclass AsyncSSHResourceManagerEarlyStopTestCase(unittest.TestCase):\n    n_parallel = 1\n    auppath = os.path.join(\"tests\", \"data\", \".aup\")\n    workingdir = os.path.join(\"tests\", \"data\")\n    ori_db = os.path.join(auppath, \"sqlite3.db\")\n    bk_db = os.path.join(auppath, \"bk.db\")\n    val = 0\n    pkey = pkg_resources.resource_filename(\"mockssh\", 'server-key')\n    users = {\"mockuser\": pkey}\n\n    def setUp(self):\n        copyfile(self.ori_db, self.bk_db)\n        self.connector = get_default_connector(self.auppath)\n        self.rm = SSHResourceManager(self.connector, self.n_parallel, \n                                     track_intermediate_results=True,\n                                     early_stop={\"aup_policy\": \"median\",\n                                                \"aup_policy_steps\": 2},\n                                     eid=1, async_reconnect=1, reconn_wait_time=1,\n                                     auppath=self.auppath,\n                                     async_run=True)\n        self.server = mockssh.Server(self.users).__enter__()\n        self.rm.mapping[1] = \"mockuser@127.0.0.1:\" + str(self.server.port) + \" \" + self.pkey\n        self.val = 0\n\n    def tearDown(self):\n        self.server.__exit__()\n        copyfile(self.bk_db, self.ori_db)\n        os.remove(self.bk_db)\n\n    def test_early_stop_median(self):\n        mutex = Lock()\n        def callback(*args):\n            mutex.acquire()\n            self.val = -1\n            mutex.release()\n\n        self.rm.policy = \"median\"\n        job_5 = Job(\"task5.py\", BasicConfig({\"x\":5}), \"./tests/data\")\n        job_5.jid = 1\n        self.rm.run_job(job_5, 1, {}, callback)\n        self.rm.finish()\n\n        self.assertDictEqual(self.rm.interm_job_res, {1: [6.0, 7.0, 8.0, 9.0, 10.0, 11.0]})\n        self.assertEqual(self.val, -1)\n\n    def test_early_stop_bandit(self):\n        mutex = Lock()\n        def callback(*args):\n            mutex.acquire()\n            self.val = -1\n            mutex.release()\n\n        self.rm.policy = \"bandit\"\n        job_5 = Job(\"task5.py\", BasicConfig({\"x\":5}), \"./tests/data\")\n        job_5.jid = 1\n        self.rm.run_job(job_5, 1, {}, callback)\n        self.rm.finish()\n\n        self.assertDictEqual(self.rm.interm_job_res, {1: [6.0, 7.0, 8.0, 9.0, 10.0, 11.0]})\n        self.assertEqual(self.val, -1)\n\n    def test_early_stop_truncation(self):\n        mutex = Lock()\n        def callback(*args):\n            mutex.acquire()\n            self.val = -1\n            mutex.release()\n\n        self.rm.policy = \"truncation\"\n        job_5 = Job(\"task5.py\", BasicConfig({\"x\":5}), \"./tests/data\")\n        job_5.jid = 1\n        self.rm.run_job(job_5, 1, {}, callback)\n        self.rm.finish()\n\n        self.assertDictEqual(self.rm.interm_job_res, {1: [6.0, 7.0, 8.0, 9.0, 10.0, 11.0]})\n        self.assertEqual(self.val, -1)\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/EE/__init__.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nAPI\n===\n\"\"\"\nimport logging\n\nlogger = logging.getLoggerClass()\n"
  },
  {
    "path": "tests/EE/test_Experiment.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\nimport os\nfrom shutil import copyfile, rmtree\n\nfrom aup import Experiment, BasicConfig\nfrom aup.compression.utils import adjust_compression_config\n\n\nclass ExperimentTestCase(unittest.TestCase):\n    path = os.path.join(\"tests\", \"data\", \"exp5.json\")\n    auppath = os.path.join(\"tests\", \"data\", \".aup\")\n    ori_db = os.path.join(auppath, \"sqlite3.db\")\n    bk_db = os.path.join(auppath, \"bk.db\")\n\n    def setUp(self):\n        copyfile(self.ori_db, self.bk_db)\n\n    def tearDown(self):\n        copyfile(self.bk_db, self.ori_db)\n        # clean test files\n        os.remove(self.bk_db)\n        if os.path.isfile(os.path.join(os.getcwd(), \"exp2.pkl\")):\n            os.remove(os.path.join(os.getcwd(), \"exp2.pkl\"))\n        rmtree(os.path.join(\"tests\", \"jobs\"))\n\n    def test_run_through(self):\n        exp = Experiment(BasicConfig().load(self.path),\n                         username=\"test\", auppath=self.auppath)\n\n        exp.start()\n        exp.finish()\n        self.assertDictEqual(exp.pending_jobs, {})\n\n    def test_job_retries(self):\n        exp = Experiment(BasicConfig().load(os.path.join(\"tests\", \"data\", \"exp6.json\")),\n                         username=\"test\", auppath=os.path.join(\"tests\", \"data\", \".aup\"))\n        exp.start()\n        jid, val = exp.finish()\n        self.assertDictEqual(exp.pending_jobs, {})\n        self.assertEqual(jid, 10)\n\n\nclass ExperimentCompressionTest(unittest.TestCase):\n    path = os.path.join(\"tests\", \"data\", \"exp7.json\")\n    auppath = os.path.join(\"tests\", \"data\", \".aup\")\n    ori_db = os.path.join(auppath, \"sqlite3.db\")\n    bk_db = os.path.join(auppath, \"bk.db\")\n\n    def setUp(self):\n        copyfile(self.ori_db, self.bk_db)\n\n    def tearDown(self):\n        copyfile(self.bk_db, self.ori_db)\n        # clean test files\n        os.remove(self.bk_db)\n        if os.path.isfile(os.path.join(os.getcwd(), \"exp2.pkl\")):\n            os.remove(os.path.join(os.getcwd(), \"exp2.pkl\"))\n        rmtree(os.path.join(\"tests\", \"jobs\"))\n\n    def test_run_through(self):\n        exp_config = BasicConfig().load(self.path)\n        exp_config[\"compression\"] = adjust_compression_config(exp_config[\"compression\"])\n        exp = Experiment(exp_config,\n                         username=\"test\", auppath=self.auppath)\n\n        exp.start()\n        exp.finish()\n        self.assertDictEqual(exp.pending_jobs, {})\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/EE/test_Job.py",
    "content": "#!/usr/bin/env python\n\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nfrom unittest import TestCase\n\nimport logging\nimport os\nimport shutil\n\nfrom aup.EE.Job import Job\n\nlogging.disable(logging.FATAL)\n\n\nclass JobTestCase(TestCase):\n    def setUp(self):\n        self.path = os.path.join(\"tests\", \"EE\")\n        shutil.rmtree(os.path.join(self.path, \"jobs\"), ignore_errors=True)\n\n    def test_verify_folder(self):\n        job = Job(\"test_Job.py\", {}, self.path)\n        self.assertTrue(job.verify_local())  # working demo\n\n        job = Job(\"missing_script\", {}, self.path)\n        self.assertRaises(EnvironmentError, job.verify_local)  # missing script\n\n        job = Job(\"__init__.py\", {}, self.path)\n        self.assertRaises(EnvironmentError, job.verify_local)  # not executable\n\n        job = Job(\"test_Job.py\", {}, os.path.join(\"tests\", \"data\", \"wrong\"))\n        self.assertRaises(EnvironmentError, job.verify_local)\n\n\nif __name__ == \"__main__\":\n    from aup.utils import print_result\n    print_result(\"10.\")\n"
  },
  {
    "path": "tests/ET/Connector/__init__.py",
    "content": ""
  },
  {
    "path": "tests/ET/Connector/test_SQLiteConnector.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport os\nimport sqlite3\nimport unittest\nfrom six.moves import configparser\n\nfrom aup.ET.Connector.SQLiteConnector import SQLiteConnector\nfrom aup.setupdb import sqlite\n\n\nclass SQLiteConnectorTestCase(unittest.TestCase):\n    db_file = os.path.join(\"tests\", \"data\", \"sqlite3.db\")\n    config = configparser.ConfigParser()\n    config.add_section(\"Auptimizer\")\n    config.set(\"Auptimizer\", \"SQLITE_FILE\", db_file)\n    config.set(\"Auptimizer\", \"gpu_mapping\", \"\"\"{\"1\": 0, \"2\": 1}\"\"\")\n    username = \"test\"\n    name = \"unittest\"\n\n    def setUp(self):\n        sqlite.create_database(self.config, [self.name], 1, self.username)\n\n    def tearDown(self):\n        os.remove(self.db_file)\n\n    def test_resource(self):\n        \"\"\"Test resource allocation\"\"\"\n        connector = SQLiteConnector(self.db_file)\n        self.assertListEqual(connector.get_resource_type(), [u'gpu', u'cpu', u'passive'])\n\n        rids = connector.get_available_resource(self.username, 'gpu')\n        self.assertEqual({1, 2}, set(rids))\n\n        connector.take_available_resource(1)\n        rids = connector.get_available_resource(self.username, 'gpu')\n        self.assertEqual({2}, set(rids))\n\n        connector.free_used_resource(1)\n        rids = connector.get_available_resource(self.username, 'gpu')\n        self.assertEqual({1, 2}, set(rids))\n\n        connector.take_available_resource(2)\n        connector.take_available_resource(1)\n        rids = connector.get_available_resource(self.username, 'gpu')\n        self.assertEqual(set([]), set(rids))\n\n        connector.free_used_resource(1)\n        connector.free_used_resource(2)\n        rids = connector.get_available_resource(self.username, 'gpu')\n        self.assertEqual({1, 2}, set(rids))\n        connector.close()\n\n    def test_experiment(self):\n        \"\"\"test experiment start and stop\"\"\"\n        connector = SQLiteConnector(self.db_file)\n        eid1 = connector.start_experiment(self.name, \"exp1\", '{}')\n        eid2 = connector.start_experiment(self.name, \"exp2\", '{}')\n        connector.end_experiment(eid1)\n        connector.end_experiment(eid2)\n\n        eids = connector.get_all_experiment(username=self.name)\n        self.assertListEqual(eids, [1, 2])\n\n        eids = connector.get_all_experiment()\n        self.assertListEqual(eids, [1, 2])\n\n        self.assertRaises(ValueError, connector.get_all_experiment, \"not-exist\")\n\n    def test_job(self):\n        \"\"\"test job start and stop\"\"\"\n        connector = SQLiteConnector(self.db_file)\n        eid = connector.start_experiment(self.name, 'exp1', '{}')\n        rid = 1\n        jid1 = connector.job_started(eid, rid, \"job1\")\n        jid2 = connector.job_started(eid, rid, \"job1\")\n\n        self.assertListEqual(connector.get_running_job(eid), [jid1, jid2])\n\n        connector.job_finished(eid, jid2, -100.)\n        connector.job_finished(eid, jid1, 100.)\n\n        self.assertRaises(sqlite3.IntegrityError, connector.job_started,1, 20, \"job2\")\n        self.assertListEqual(connector.get_best_result(1, maximize=True), [jid1, 100.])\n        self.assertListEqual(connector.get_best_result(1, maximize=False), [jid2, -100.])\n        connector.close()\n\n    def test_reset(self):\n        connector = SQLiteConnector(self.db_file)\n        eid = connector.start_experiment(self.name, 'exp1', '{}')\n        rids = connector.get_available_resource(self.username, 'gpu')\n        self.assertEqual({1, 2}, set(rids))\n        jid = connector.job_started(eid, 1, \"job1\")\n        connector.get_available_resource(self.username, \"gpu\")\n        sqlite.reset(self.config)\n        self.assertEqual({1, 2}, set(rids))\n        r_jid = connector.get_all_history(1)[0][0]\n        self.assertEqual(r_jid, jid)\n\n    def test_job_attempt(self):\n        \"\"\" Tests SQLiteConnector.start_job_attempt and SQLiteConnector.end_job_attempt\"\"\"\n        rid = 1\n        connector = SQLiteConnector(self.db_file)\n        eid = connector.start_experiment(self.name, 'test', '{}')\n        jid = connector.job_started(eid, rid, \"job1\")\n        connector.end_job_attempt(jid)\n\n        connector.cursor.execute(\"SELECT jaid, jid, num, rid, start_time, end_time FROM job_attempt;\")\n        res = connector.cursor.fetchall()\n        self.assertEqual(len(res), 1)\n        self.assertEqual(res[0][1], 1)\n        self.assertEqual(res[0][2], 0)\n        self.assertEqual(res[0][3], rid)\n        self.assertNotEqual(res[0][-1], None)\n\n        connector.cursor.execute(\"SELECT jid, end_time FROM job;\")\n        res = connector.cursor.fetchall()\n        self.assertEqual(len(res), 1)\n        self.assertEqual(res[0][-1], None)\n\n        connector.job_finished(eid, jid, -100.)\n        connector.close()\n\n    def test_get_available_resource(self):\n        \"\"\"Tests SQLiteConnector.get_available_resource\"\"\"\n        rid = 1\n        connector = SQLiteConnector(self.db_file)\n        rids = connector.get_available_resource(\"test\", \"cpu\")\n        self.assertGreaterEqual(len(rids), 1)\n        rids1 = connector.get_available_resource(\"test\", \"cpu\", rids[:-1])\n        self.assertEqual(len(rids1), 1)\n        rids2 = connector.get_available_resource(\"test\", \"cpu\", rids)\n        self.assertEqual(len(rids), 1)\n\n        def test_save_intermediate_result(self):\n            \"\"\"Test saving of intermediate results\"\"\"\n        connector = SQLiteConnector(self.db_file)\n        eid = connector.start_experiment(self.name, 'test', '{}')\n        rid = 1\n        jid1 = connector.job_started(eid, rid, \"job1\")\n\n        self.assertListEqual(connector.get_running_job(eid), [jid1])\n\n        connector.save_intermediate_result(jid1, -50.0)\n        connector.save_intermediate_result(jid1, -75.0)\n        connector.save_intermediate_result(jid1, -100.0)\n        connector.job_finished(eid, jid1, -100.)\n\n        connector.cursor.execute(\"SELECT num, score FROM intermediate_result WHERE jid=? ORDER BY num ASC;\", (jid1,))\n        irs = connector.cursor.fetchall()\n        self.assertEqual(len(irs), 3)\n        self.assertEqual(irs[0][0], 0)\n        self.assertEqual(irs[1][0], 1)\n        self.assertEqual(irs[2][0], 2)\n        self.assertEqual(irs[0][1], -50.0)\n        self.assertEqual(irs[1][1], -75.0)\n        self.assertEqual(irs[2][1], -100.0)\n        connector.close()\n\n    def test_get_intermediate_results_job(self):\n        \"\"\"Test for getting intermediate results for a given job\"\"\"\n        connector = SQLiteConnector(self.db_file)\n        eid = connector.start_experiment(self.name, 'exp1', '{}')\n        rid = 1\n        jid1 = connector.job_started(eid, rid, \"job1\")\n\n        self.assertListEqual(connector.get_running_job(eid), [jid1])\n\n        connector.save_intermediate_result(jid1, -50.0)\n        connector.save_intermediate_result(jid1, -75.0)\n        connector.save_intermediate_result(jid1, -100.0)\n        connector.job_finished(eid, jid1, -100.)\n        \n        ir = connector.get_intermediate_results_job(jid1)\n        self.assertEqual(len(ir), 3)\n        self.assertEqual(ir[0], -50.)\n        self.assertEqual(ir[1], -75.)\n        self.assertEqual(ir[2], -100.)\n\n    def test_get_intermediate_results_jobs(self):        \n        \"\"\"Test for getting intermediate results for some given jobs\"\"\"\n        connector = SQLiteConnector(self.db_file)\n        eid = connector.start_experiment(self.name, 'exp1', '{}')\n        jid1 = connector.job_started(eid, 1, \"job1\")\n        jid2 = connector.job_started(eid, 2, \"job2\")\n\n        self.assertListEqual(connector.get_running_job(eid), [jid1, jid2])\n\n        connector.save_intermediate_result(jid1, -50.0)\n        connector.save_intermediate_result(jid1, -75.0)\n        connector.save_intermediate_result(jid1, -100.0)\n        connector.job_finished(eid, jid1, -100.)\n        \n        connector.save_intermediate_result(jid2, 50.0)\n        connector.save_intermediate_result(jid2, 75.0)\n        connector.save_intermediate_result(jid2, 100.0)\n        connector.job_finished(eid, jid2, 100.)\n        \n        ir = connector.get_intermediate_results_jobs([jid1, jid2])\n        self.assertEqual(len(ir), 2)\n        self.assertEqual(len(ir[jid1]), 3)\n        self.assertEqual(ir[jid1][0], -50.)\n        self.assertEqual(ir[jid1][1], -75.)\n        self.assertEqual(ir[jid1][2], -100.)\n        self.assertEqual(len(ir[jid2]), 3)\n        self.assertEqual(ir[jid2][0], 50.)\n        self.assertEqual(ir[jid2][1], 75.)\n        self.assertEqual(ir[jid2][2], 100.)\n\n    def test_get_intermediate_results_experiment(self):\n        \"\"\"Test for getting intermediate results for a given experiment\"\"\"\n        connector = SQLiteConnector(self.db_file)\n        eid = connector.start_experiment(self.name, 'exp1', '{}')\n        jid1 = connector.job_started(eid, 1, \"job1\")\n        jid2 = connector.job_started(eid, 2, \"job2\")\n\n        self.assertListEqual(connector.get_running_job(eid), [jid1, jid2])\n\n        connector.save_intermediate_result(jid1, -50.0)\n        connector.save_intermediate_result(jid1, -75.0)\n        connector.job_finished(eid, jid1, -75, status=\"EARLY_STOPPED\")\n        \n        connector.save_intermediate_result(jid2, 50.0)\n        connector.save_intermediate_result(jid2, 75.0)\n        connector.save_intermediate_result(jid2, 100.0)\n        connector.job_finished(eid, jid2, 100., status=\"FINISHED\")\n        \n        ir = connector.get_intermediate_results_experiment(eid, status=\"FINISHED\")\n        self.assertEqual(len(ir), 1)\n        self.assertEqual(ir.get(jid1, None), None)\n        self.assertNotEqual(ir.get(jid2, None), None)\n        self.assertEqual(len(ir[jid2]), 3)\n        self.assertEqual(ir[jid2][0], 50.)\n        self.assertEqual(ir[jid2][1], 75.)\n        self.assertEqual(ir[jid2][2], 100.)\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/ET/__init__.py",
    "content": ""
  },
  {
    "path": "tests/Proposer/__init__.py",
    "content": ""
  },
  {
    "path": "tests/Proposer/test_AbstractProposer.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\nfrom aup.Proposer import AbstractProposer as AP\n\n\nclass AbstractTestCase(unittest.TestCase):\n    def test_create_param_config(self):\n        self.assertRaises(ValueError, AP.create_param_config, 'name', [0, 1], 'wrong_type')\n        self.assertRaises(ValueError, AP.create_param_config, 'name', [0, 1, 2], 'int')\n        self.assertRaises(ValueError, AP.create_param_config, 'name', [0], 'float')\n        self.assertDictEqual(AP.create_param_config('v1', [0, 1], 'float'),\n                             {'name': 'v1', 'range': [0, 1], 'type': 'float'})"
  },
  {
    "path": "tests/Proposer/test_BOHBProposer.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nfrom aup.EE.Job import Job\nfrom unittest import TestCase, skipIf\nfrom six import PY2, PY3\n\n\n# @skipIf(PY2, \"BOHB is not supported in Python2\")\n@skipIf(PY3, \"BOHB test not supported in travis environment\")\nclass BOHBTestCase(TestCase):\n    config = [{\"name\": \"choice\", \"range\": (1, 2, 3), \"type\": \"choice\"},\n              {\"name\": \"float\", \"range\": [0, 1], \"type\": \"float\"},\n              {\"name\": \"int\", \"range\": [1, 10], \"type\": \"int\"}]\n\n    def test_create_configspace(self):\n        from aup.Proposer import BOHBProposer as bohb\n        cs = bohb.BOHBProposer.create_configspace(self.config)\n        c = cs.get_hyperparameter('choice')\n        self.assertTupleEqual(c.choices, self.config[0]['range'])\n\n        for i in range(10):\n            cf = cs.sample_configuration()\n            v = cf.get('float')\n            self.assertTrue(0 <= v <= 1)\n            self.assertIsInstance(v, float)\n\n            v = cf.get('int')\n            self.assertTrue(0 <= v <= 10)\n            self.assertIsInstance(v, int)\n\n            v = cf.get('choice')\n            self.assertTrue(v in (1, 2, 3))\n\n    def test_nsample(self):\n        from aup.Proposer import BOHBProposer as bohb\n        proposer = bohb.BOHBProposer({\"parameter_config\":self.config,\"target\":\"min\"})\n        self.assertEqual(proposer.nSamples, 182)\n\n    def test_param(self):\n        from aup.Proposer import BOHBProposer as bohb\n        from aup.EE.Job import Job\n        proposer = bohb.BOHBProposer({\"parameter_config\": self.config, \"target\": \"min\",\n                                      \"n_iterations\":2, 'max_budget':3})\n\n        for i in range(proposer.nSamples):\n            config = proposer.get_param()\n            self.assertTrue(0 <= config['float'] <= 1)\n            self.assertTrue(0 <= config['int'] <= 10)\n            self.assertTrue(config['choice'] in (1,2,3))\n            job = Job('.', config)\n            proposer.update(0, job)\n\n        self.assertIsNone(proposer.get_param())\n\n    def test_failed(self):\n        from aup.Proposer import BOHBProposer as bohb\n        proposer = bohb.BOHBProposer({\"parameter_config\": self.config, \"target\": \"min\",\n                                      \"n_iterations\":2, 'max_budget':3})\n        try:\n            proposer.failed(Job(\"none\", {\"tid\": 1}))\n            self.assertTrue(False)\n        except NotImplementedError:\n            pass\n"
  },
  {
    "path": "tests/Proposer/test_HyperbandProposer.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\n\nfrom aup.EE.Job import Job\nfrom aup.Proposer import HyperbandProposer as hp\n\n\nclass HyperbandTestCase(unittest.TestCase):\n    def setUp(self):\n        self.pc = {\n            \"proposer\": \"spearmint\",\n            \"n_samples\": 10,\n            \"grid_size\": 200,\n            \"target\": \"min\",\n            \"parameter_config\": [\n                {\"name\": \"x\", \"type\": \"float\", \"range\": [1, 10]},\n                {\"name\": \"y\", \"type\": \"int\", \"range\": [1, 10]},\n                {\"name\": \"z\", \"type\": \"choice\", \"range\": [1, 2, 10]}\n            ]\n        }\n\n    def test_hp(self):\n        p = hp.HyperbandProposer(self.pc)\n        for j in range(3):\n            tid = []\n            for i in range(100):\n                v = p.get()\n                if v:\n                    tid.append(v['tid'])\n            for i in tid:\n                job = Job(\"none\", {\"tid\": i})\n                p.update(0.1, job)\n\n        self.assertRaises(NotImplementedError, p.save, '')\n        self.assertRaises(NotImplementedError, p.reload, '')\n\n    def test_hp_min(self):\n        self.pc['target'] = 'max'\n        p = hp.HyperbandProposer(self.pc)\n        for j in range(6):\n            tid = []\n            for i in range(100):\n                v = p.get()\n                if v:\n                    tid.append(v['tid'])\n            for i in tid:\n                job = Job(\"none\", {\"tid\": i})\n                p.update(0.1, job)\n\n    def test_no_implemented(self):\n        self.pc['parameter_config'][0]['name'] = 'tid'\n        self.assertRaises(KeyError, hp.HyperbandProposer, self.pc)\n        \n    def test_failed(self):\n        p = hp.HyperbandProposer(self.pc)\n        try:\n            p.failed(Job(\"none\", {\"tid\": 1}))\n            self.assertTrue(False)\n        except NotImplementedError:\n            pass\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/Proposer/test_HyperoptProposer.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\n\nimport os\nimport tempfile\n\nfrom aup.EE.Job import Job\nfrom aup.Proposer import HyperoptProposer as hp\n\n\nclass HyperOptTestCase(unittest.TestCase):\n    def setUp(self):\n        self.pc = {\n            \"proposer\": \"hyperopt\",\n            \"n_samples\": 10,\n            \"engine\": \"tpe\",\n            \"target\": \"min\",\n            \"parameter_config\": [\n                {\"name\": \"x\", \"range\": [0, 1], \"type\": \"int\"},\n                {\"name\": \"y\", \"range\": [0, 1.], \"type\": \"float\"},\n                {\"name\": \"z\", \"range\": [0, 1.], \"type\": \"choice\"}\n\n            ]\n        }\n\n    def test_init(self):\n        hp.HyperoptProposer(self.pc)\n        self.pc['parameter_config'][0]['type'] = 'wrong'\n        self.assertRaises(KeyError, hp.HyperoptProposer, self.pc)\n        self.pc['parameter_config'][0]['type'] = 'float'\n\n    def test_verify_config(self):\n        self.pc['parameter_config'][0]['name'] = 'tid'\n        self.assertRaises(KeyError, hp.HyperoptProposer, self.pc)\n\n    def test_runtime(self):\n        p = hp.HyperoptProposer(self.pc)\n        c = p.get()\n        p.increment_job_counter()\n        job = Job(\"none\", c)\n        p.update(0.1, job)\n        job.config['tid'] = -100\n        self.assertRaises(KeyError, p.update, 0.0, job)\n        path = tempfile.mkdtemp()\n        sav = os.path.join(path, \"save.pkl\")\n        p.save(sav)\n        idx = p.counter\n        p = hp.HyperoptProposer(self.pc)\n        self.assertNotEqual(idx, p.counter)\n        p.reload(sav)\n        self.assertEqual(idx, p.counter)\n        os.remove(sav)\n        os.rmdir(path)\n\n    def test_failed(self):\n        p = hp.HyperoptProposer(self.pc)\n        c = p.get()\n        p.increment_job_counter()\n        job = Job(\"none\", c)\n        p.failed(job)\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/Proposer/test_RandomProposer.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\n\nimport os\nimport tempfile\n\nfrom aup.EE.Job import Job\nfrom aup.Proposer import RandomProposer as rp\n\n\nclass MyTestCase(unittest.TestCase):\n    def test_random_int(self):\n        d = [1, 10]\n        all_opt = set(range(1, 11))\n        f = rp._random_int(d)\n        t = set(f() for _ in range(10000))\n        self.assertSetEqual(all_opt, t, \"Low chance to miss numbers\")\n        self.assertRaises(ValueError, rp._random_int, [1, 2, 3])\n\n    def test_random_float(self):\n        d = [-10, 10]\n        f = rp._random_float(d)\n        for i in range(100):\n            v = f()\n            self.assertLessEqual(v, d[1])\n            self.assertLessEqual(d[0], v)\n        self.assertRaises(ValueError, rp._random_float, [1, 2, 3])\n\n    def test_random_choice(self):\n        d = [str(i) for i in range(10)]\n        f = rp._random_choice(d)\n        for i in range(100):\n            self.assertIn(f(), d)\n\n        self.assertRaises(ValueError, rp._random_choice, [])\n\n    def test_init(self):\n        config = {}\n        self.assertRaises(KeyError, rp.RandomProposer, config)\n        config['n_samples'] = 10\n        self.assertRaises(KeyError, rp.RandomProposer, config)\n        config['parameter_config'] = [{}]\n        self.assertRaises(KeyError, rp.RandomProposer, config)\n        config['parameter_config'] = [{\"name\": \"a\"}]\n        self.assertTrue(rp.RandomProposer(config))\n\n    def test_save_restore(self):\n        config = {'n_samples': 10, 'parameter_config': [{'name': 'x'}]}\n        m = rp.RandomProposer(config)\n        path = tempfile.mkdtemp()\n        self.assertIn(m.get_param()['x'], [0, 1])\n\n        sav = os.path.join(path, 'test.pkl')\n        m.save(sav)\n        n = rp.RandomProposer(config)\n        n.reload(sav)\n        self.assertIn(n.get_param()['x'], [0, 1])\n        os.remove(sav)\n        os.rmdir(path)\n\n    def test_reset(self):\n        config = {'n_samples': 10, 'random_seed': 10, 'parameter_config': [{'name': 'x', 'type': 'int'}]}\n        m = rp.RandomProposer(config)\n\n        for i in range(10):\n            m.get()\n            m.increment_job_counter()\n        v = m.get()\n        m.increment_job_counter()\n        self.assertIs(v, None)\n        m.reset()\n        self.assertIn(m.get()['x'], [0, 1])\n        m.increment_job_counter()\n        self.assertEqual(m.counter, 1)\n\n    def test_failed(self):\n        config = {'n_samples': 10, 'random_seed': 10, 'parameter_config': [{'name': 'x', 'type': 'int'}]}\n        p = rp.RandomProposer(config)\n        c = p.get()\n        job = Job(\"none\", c)\n        p.failed(job)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/Proposer/test_SequenceProposer.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\nfrom unittest import TestCase\n\nfrom aup.EE.Job import Job\nfrom aup.Proposer import SequenceProposer as sp\nfrom aup.Proposer import get_proposer\nfrom aup.Proposer import ProposerStatus\n\n\nclass SequenceTestCase(TestCase):\n    def setUp(self):\n        self.pc = {\n            \"proposer\": \"sequence\",\n            \"parameter_config\": []\n        }\n\n    def test_int(self):\n        self.pc[\"parameter_config\"] = [\n            {\"name\": \"x1\", \"type\": \"int\", \"range\": [0, 10]},\n            {\"name\": \"x2\", \"type\": \"int\", \"range\": [0, 10]}\n        ]\n        rp = get_proposer(\"sequence\")(self.pc)\n        self.assertEqual(rp.nSamples, 121)\n        param1 = rp.get()\n        rp.increment_job_counter()\n        self.assertTrue(param1 == {\"x1\": 0, \"x2\": 0})\n        param1 = rp.get()\n        rp.increment_job_counter()\n        self.assertTrue(param1 == {\"x1\": 1, \"x2\": 0})\n        while rp.status == ProposerStatus.RUNNING:\n            param1 = rp.get()\n            rp.increment_job_counter()\n            rp.check_termination()\n        self.assertTrue(param1 == {\"x1\": 10, \"x2\": 10})\n\n    def test_int_interval(self):\n        self.pc[\"parameter_config\"] = [\n            {\"name\": \"x1\", \"type\": \"int\", \"range\": [0, 10], \"interval\":2},  # 0 2 4 6 8 10\n            {\"name\": \"x2\", \"type\": \"int\", \"range\": [0, 10], \"n\":3}          # 0 5 10\n        ]\n        rp = get_proposer(\"sequence\")(self.pc)\n        self.assertEqual(rp.nSamples, 18)\n        param1 = rp.get()\n        rp.increment_job_counter()\n        self.assertTrue(param1 == {\"x1\": 0, \"x2\": 0})\n        param1 = rp.get()\n        rp.increment_job_counter()\n        self.assertTrue(param1 == {\"x1\": 2, \"x2\": 0})\n        for i in range(10):\n            param1 = rp.get()\n            rp.increment_job_counter()\n        self.assertTrue(param1 == {\"x1\": 10, \"x2\": 5})\n        while rp.status == ProposerStatus.RUNNING:\n            param1 = rp.get()\n            rp.increment_job_counter()\n            rp.check_termination()\n        self.assertTrue(param1 == {\"x1\": 10, \"x2\": 10})\n\n    def test_float(self):\n        self.pc[\"parameter_config\"] = [\n            {\"name\": \"x1\", \"type\": \"float\", \"range\": [0, 1], \"interval\":0.2},\n            {\"name\": \"x2\", \"type\": \"float\", \"range\": [0, 1]}\n        ]\n        rp = get_proposer(\"sequence\")(self.pc)\n        self.assertEqual(rp.nSamples, 12)\n        param1 = rp.get()\n        rp.increment_job_counter()\n        self.assertDictEqual(param1, {\"x1\": 0, \"x2\": 0})\n        param1 = rp.get()\n        rp.increment_job_counter()\n        self.assertDictEqual(param1, {\"x1\": 0.2, \"x2\": 0})\n        for i in range(4):\n            param1 = rp.get()\n            rp.increment_job_counter()\n        self.assertDictEqual(param1, {\"x1\": 1, \"x2\": 0})\n        while rp.status == ProposerStatus.RUNNING:\n            param1 = rp.get()\n            rp.increment_job_counter()\n            rp.check_termination()\n        self.assertTrue(param1 == {\"x1\": 1, \"x2\": 1})\n\n        self.pc[\"parameter_config\"] = [\n            {\"name\": \"x1\", \"type\": \"float\", \"range\": [0, 1], \"interval\": 0.2},\n            {\"name\": \"x2\", \"type\": \"float\", \"range\": [0, 1], \"n\": 2}\n        ]\n        rp = get_proposer(\"sequence\")(self.pc)\n        self.assertEqual(rp.nSamples, 12)\n        param1 = rp.get()\n        rp.increment_job_counter()\n        self.assertDictEqual(param1, {\"x1\": 0, \"x2\": 0})\n        param1 = rp.get()\n        rp.increment_job_counter()\n        self.assertDictEqual(param1, {\"x1\": 0.2, \"x2\": 0})\n        for i in range(4):\n            param1 = rp.get()\n            rp.increment_job_counter()\n        self.assertDictEqual(param1, {\"x1\": 1, \"x2\": 0})\n        while rp.status == ProposerStatus.RUNNING:\n            param1 = rp.get()\n            rp.increment_job_counter()\n            rp.check_termination()\n        self.assertTrue(param1 == {\"x1\": 1, \"x2\": 1})\n\n    def test_choice(self):\n        self.pc[\"parameter_config\"] = [\n            {\"name\": \"x1\", \"type\": \"choice\", \"range\": [2, 4, 6, 8, 10]},\n            {\"name\": \"x2\", \"type\": \"choice\", \"range\": [\"a\", \"b\", \"c\"]}\n        ]\n        rp = get_proposer(\"sequence\")(self.pc)\n        self.assertEqual(rp.nSamples, 15)\n        param1 = rp.get()\n        rp.increment_job_counter()\n        rp.check_termination()\n        self.assertTrue(param1 == {\"x1\": 2, \"x2\": \"a\"})\n        while rp.status == ProposerStatus.RUNNING:\n            param1 = rp.get()\n            rp.increment_job_counter()\n            rp.check_termination()\n        self.assertTrue(param1 == {\"x1\": 10, \"x2\": \"c\"})\n\n    def test_gen(self):\n        self.assertRaises(KeyError, sp._AbstractGen.get_gen, {'type': 'wrong'})\n\n    def test_failed(self):\n        self.pc[\"parameter_config\"] = [\n            {\"name\": \"x1\", \"type\": \"choice\", \"range\": [2, 4, 6, 8, 10]},\n            {\"name\": \"x2\", \"type\": \"choice\", \"range\": [\"a\", \"b\", \"c\"]}\n        ]\n        p = get_proposer(\"sequence\")(self.pc)\n        c = p.get()\n        p.increment_job_counter()\n        job = Job(\"none\", c)\n        p.failed(job)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/Proposer/test_SpearmintProposer.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\n\nimport os\nimport shutil\nfrom six import PY3\n\nfrom aup.EE.Job import Job\nfrom aup.Proposer import SpearmintProposer as sp\n\n\n@unittest.skipIf(PY3, \"Spearmint has some issue with Python3\")\nclass SpearmintTestCase(unittest.TestCase):\n    def setUp(self):\n        self.pc = {\n            \"proposer\": \"spearmint\",\n            \"n_samples\": 100,\n            \"grid_size\": 200,\n            \"target\": \"min\",\n            \"parameter_config\": [\n                {\"name\": \"x\", \"type\": \"float\", \"range\": [1, 10]},\n                {\"name\": \"y\", \"type\": \"int\", \"range\": [1, 10]},\n                {\"name\": \"z\", \"type\": \"choice\", \"range\": [1, 2, 10]}\n            ]\n        }\n        self.path = os.path.join(\"tests\", \"tmp_tests\")\n        if os.path.exists(self.path):\n            shutil.rmtree(self.path)\n        os.mkdir(self.path)\n        self.pc['workingdir'] = self.path\n\n    def tearDown(self):\n        shutil.rmtree(self.path, ignore_errors=True)\n\n    def test_init(self):\n        pc = self.pc.copy()\n        pc['engine'] = \"wrong\"\n        self.assertRaises(KeyError, sp.SpearmintProposer, pc)\n\n        pc = self.pc.copy()\n        pc['parameter_config'][0]['size'] = 2\n        p = sp.SpearmintProposer(pc)\n        self.assertRaises(NotImplementedError, p.get)\n\n        pc = self.pc.copy()\n        pc['parameter_config'][0]['name'] = 'job_id'\n        self.assertRaises(ValueError, sp.SpearmintProposer, pc)\n\n    def test_get(self):\n        p = sp.SpearmintProposer(self.pc)\n        for j in range(3):\n            tid = []\n            for i in range(10):\n                v = p.get()\n                tid.append(v['job_id'])\n            for i in tid:\n                job = Job(\"none\", {'job_id': i})\n                p.update(1, job)\n        self.assertTrue(True)\n        self.assertTrue(sp.SpearmintProposer(self.pc))\n\n    def test_finish(self):\n        p = sp.SpearmintProposer(self.pc)\n        self.assertRaises(NotImplementedError, p.save, \"\")\n        self.assertRaises(NotImplementedError, p.reload, \"\")\n\n    def test_failed(self):\n        p = sp.SpearmintProposer(self.pc)\n        c = p.get()\n        job = Job(\"none\", c)\n        p.failed(job)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/__init__.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport sys\nimport logging\nsys.path.insert(0, \"src\")\nlogging.basicConfig(level=logging.FATAL)"
  },
  {
    "path": "tests/command/__init__.py",
    "content": ""
  },
  {
    "path": "tests/command/test_convert.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport os\nimport unittest\n\nfrom aup import convert as ac\n\n\nclass AutoConvertTestCase(unittest.TestCase):\n    exp = os.path.join(\"tests\", \"data\", \"exp4.json\")\n    script = os.path.join(\"tests\", \"data\", \"task4.py\")\n\n    def test_get_param(self):\n        self.assertListEqual(['x'], ac.get_param(self.exp))\n        exp = os.path.join(\"tests\", \"data\", \"exp4_no_param.json\")\n        self.assertRaises(KeyError, ac.get_param, exp)\n        exp = os.path.join(\"tests\", \"data\", \"exp4_no_name.json\")\n        self.assertRaises(KeyError, ac.get_param, exp)\n\n    def test_get_output(self):\n        self.assertEqual(\"to_delete.py\", ac.get_output_name(self.exp))\n        exp = os.path.join(\"tests\", \"data\", \"exp4_no_script.json\")\n        self.assertRaises(KeyError, ac.get_output_name, exp)\n\n    def test_modification(self):\n        with open(self.script,'r') as f:\n            script = f.read()\n        script = ac.add_shenbang(script)\n        self.assertEqual(script[:2], \"#!\")\n\n        script = ac.add_func(script, \"function\", ['x'])\n        script = ac.add_main(script)\n        self.assertTrue(\"__main__\" in script)\n        self.assertTrue(ac.add_main(script))\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/command/test_setup.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\n\nfrom os import path\nfrom shutil import rmtree\nfrom six.moves.configparser import ConfigParser\n\nfrom aup import setup\n\n\n# if the package is not installed, it aup.setupdb will throw errors because it is triggered by command line.\n# It is safe to ignore those errors if unittest jobs are passed.\ndef _setup_wrapper(filename, *args):\n    config = ConfigParser()\n    config.optionxform = str\n    config.read(filename)\n    try:\n        setup.setup(config, *args)\n    except OSError:\n        print(\"Above 'No module named aup.setupdb' error can be ignored\")\n\n\ndef _read_file(filename):\n    with open(filename, 'r') as f:\n        return f.readlines()\n\n\nclass SetupTestCase(unittest.TestCase):\n    plain_env_path = path.join(\"tests\", \"data\", \"plain_env.ini\")\n    target_plain_env_path = path.join(\"tests\", \"data\", \"target_plain_env.ini\")\n    gpu_path = path.join(\"tests\", \"data\", \"gpus.txt\")\n    target_gpu_env_path = path.join(\"tests\", \"data\", \"target_gpu_env.ini\")\n\n    def test_folder_creation(self):  # make sure the aup folder can be created\n        tmp_path = path.join(\"~\", \".aup_test\")\n\n        while path.exists(path.expanduser(tmp_path)):\n            tmp_path += \"%d\" % hash(tmp_path)\n            print(tmp_path)\n\n        os_ind_path = path.expanduser(tmp_path)\n        setup._create_folder(tmp_path)\n        self.assertTrue(path.exists(os_ind_path), \"failed to create %s\" % os_ind_path)\n        rmtree(os_ind_path)\n\n    def test_update_resource(self):\n        _setup_wrapper(self.plain_env_path, 4, self.gpu_path, \"none\", \"none\", \"test\", False, \"error\")\n        d1 = _read_file(path.join(\".aup\", \"env.ini\"))\n        d2 = _read_file(self.target_gpu_env_path)\n        self.assertListEqual(d1, d2, \"content of env.ini is problematic with resource\")\n        rmtree(\".aup\")\n\n    def test_setup(self):\n        _setup_wrapper(self.plain_env_path, 4, \"none\", \"none\", \"none\", \"test\", False, \"error\")\n        self.assertTrue(path.exists(\".aup\"), \"failed to create aup\")\n        d1 = _read_file(self.target_plain_env_path)\n        d2 = _read_file(path.join(\".aup\", \"env.ini\"))\n        self.assertListEqual(d1, d2, \"content of env.ini is problematic\")\n        rmtree(\".aup\")\n\n    def test_overwrite(self):\n        _setup_wrapper(self.plain_env_path, 4, \"none\", \"none\", \"none\", \"test\", False, \"error\")\n        self.assertRaises(Exception,\n                          _setup_wrapper, self.plain_env_path, 4, \"none\", \"none\", \"none\", \"test\", False, \"error\")\n        _setup_wrapper(self.plain_env_path, 4, \"none\", \"none\", \"none\", \"test\", True, \"error\")\n        self.assertTrue(path.exists(\".aup\"), \"failed to create aup\")\n        rmtree(\".aup\")\n\n    def test_resource_conflict(self):\n        _setup_wrapper(self.target_gpu_env_path, 4, \"none\", \"0,1\", \"\", \"test\", False, \"error\")\n\n    def tearDown(self):\n        rmtree(\".aup\", ignore_errors=True)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/compression/__init__.py",
    "content": ""
  },
  {
    "path": "tests/compression/test_aup_compressor.py",
    "content": "import unittest\nimport os\nfrom shutil import copyfile, rmtree\nfrom subprocess import call\n\nfrom aup import compression, Experiment, BasicConfig\nfrom aup.utils import get_default_username\nfrom aup.compression.utils import verify_compression_config, run_non_automatic_experiment, adjust_compression_config\n\nclass CompressorMainTest(unittest.TestCase):\n    path = os.path.join(\"tests\", \"data\", \"exp7.json\")\n    auppath = os.path.join(\"tests\", \"data\", \".aup\")\n    ori_db = os.path.join(auppath, \"sqlite3.db\")\n    bk_db = os.path.join(auppath, \"bk.db\")\n\n    def setUp(self):\n        copyfile(self.ori_db, self.bk_db)\n\n    def tearDown(self):\n        copyfile(self.bk_db, self.ori_db)\n        # clean test files\n        os.remove(self.bk_db)\n        if os.path.isfile(os.path.join(os.getcwd(), \"exp2.pkl\")):\n            os.remove(os.path.join(os.getcwd(), \"exp2.pkl\"))\n\n    def test_verify_config(self):\n        compression = {\n            \"framework\": None,\n            \"type\": None,\n            \"compressor\": None,\n            \"config_list\": None,\n        }\n        config = {\n            \"name\": None,\n            \"script\": None,\n            \"resource\": None,\n            \"compression\": compression,\n        }\n        _config = verify_compression_config(config)\n        self.assertEqual(_config, config)\n\n    def test_verify_config_missing_config(self):\n\n        config = {}\n        self.assertRaises(KeyError, verify_compression_config, config)\n\n    def test_verify_config_missing_compression_config(self):\n    \n        config = {\n            \"name\": None,\n            \"script\": None,\n            \"resource\": None,\n            \"compression\": None,\n        }\n        self.assertRaises(TypeError, verify_compression_config, config)\n\n\n    def test_adjust_config(self):\n\n        compression = {\n            \"compression_framework\": None,\n            \"compression_type\": None,\n            \"compressor\": None,\n            \"config_list\": None,\n        }\n\n        old_compression = {\n            \"framework\": None,\n            \"type\": None,\n            \"compressor\": None,\n            \"config_list\": None,\n        }\n\n        adjusted_config = adjust_compression_config(old_compression)\n        self.assertEqual(adjusted_config, compression)\n\n    def test_non_automatic_ra_no_script(self):\n\n        exp_config = BasicConfig().load(self.path)\n        exp_config = verify_compression_config(exp_config)\n        exp_config[\"compression\"] = adjust_compression_config(exp_config[\"compression\"])\n        exp_config[\"workingdir\"] = os.getcwd()\n        exp_config[\"script\"] = None\n        self.assertRaises(TypeError, lambda: run_non_automatic_experiment()[1](), exp_config, self.auppath, \"test\")\n  \nclass CompressorTestCase(unittest.TestCase):\n\n    model = None\n    nni_compressor = None\n    c_str = None\n    model_path = 'temp'\n\n    def test_create_compressor_no_cf(self):\n\n        config = {\n            \"compression_framework\": \"fail\",\n            \"compression_type\": \"fail\",\n            \"compressor\": \"fail\",\n        }\n\n        self.assertRaises(ValueError, compression.create_compressor, self.model, config)\n\n    def test_create_compressor_no_ct(self):\n\n        config = {\n            \"compression_framework\": \"tensorflow\",\n            \"compression_type\": \"fail\",\n            \"compressor\": \"fail\",\n        }\n\n        self.assertRaises(ValueError, compression.create_compressor, self.model, config)\n\n    def test_create_compressor_no_c(self):\n    \n        config = {\n            \"compression_framework\": \"tensorflow\",\n            \"compression_type\": \"pruning\",\n            \"compressor\": \"fail\",\n        }\n\n        self.assertRaises(ValueError, compression.create_compressor, self.model, config)\n    \n    def test_compressor_export_model(self):\n\n        c_framework = \"torch\"\n        c_type = \"pruning\"\n        mask_path = None\n\n        c = compression.Compressor(self.model, self.nni_compressor, c_framework, c_type, self.c_str)\n        self.assertRaises(AttributeError, c.export_model, self.model_path, mask_path, save_model=True)\n\n\nif __name__ == '__main__':\n    unittest.main()"
  },
  {
    "path": "tests/compression/test_compression_utils.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n# Modified work Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nimport os\nimport unittest\nfrom unittest import TestCase, main\nimport torch\nimport torch.nn as nn\nimport torchvision.models as models\nimport numpy as np\n\nfrom aup.compression.torch import L1FilterPruner\nfrom aup.compression.torch.utils.shape_dependency import ChannelDependency\nfrom aup.compression.torch.utils.mask_conflict import fix_mask_conflict\nfrom aup.compression.torch.utils.counter import count_flops_params\n\ndevice = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\nprefix = 'analysis_test'\nmodel_names = ['alexnet', 'vgg11', 'vgg11_bn', 'vgg13', 'vgg19',\n               'resnet18', 'resnet34', 'squeezenet1_1',\n               'mobilenet_v2', 'wide_resnet50_2']\n\nchannel_dependency_ground_truth = {\n    'resnet18': [{'layer1.0.conv2', 'layer1.1.conv2', 'conv1'},\n                 {'layer2.1.conv2', 'layer2.0.conv2', 'layer2.0.downsample.0'},\n                 {'layer3.0.downsample.0', 'layer3.1.conv2', 'layer3.0.conv2'},\n                 {'layer4.0.downsample.0', 'layer4.1.conv2', 'layer4.0.conv2'}],\n    'resnet34': [{'conv1', 'layer1.2.conv2', 'layer1.1.conv2', 'layer1.0.conv2'},\n                 {'layer2.3.conv2', 'layer2.0.conv2', 'layer2.0.downsample.0',\n                  'layer2.1.conv2', 'layer2.2.conv2'},\n                 {'layer3.3.conv2', 'layer3.0.conv2', 'layer3.4.conv2', 'layer3.0.downsample.0',\n                  'layer3.5.conv2', 'layer3.1.conv2', 'layer3.2.conv2'},\n                 {'layer4.0.downsample.0', 'layer4.1.conv2', 'layer4.2.conv2', 'layer4.0.conv2'}],\n    'mobilenet_v2': [{'features.3.conv.2', 'features.2.conv.2'},\n                     {'features.6.conv.2', 'features.4.conv.2', 'features.5.conv.2'},\n                     {'features.8.conv.2', 'features.7.conv.2',\n                      'features.10.conv.2', 'features.9.conv.2'},\n                     {'features.11.conv.2', 'features.13.conv.2',\n                      'features.12.conv.2'},\n                     {'features.14.conv.2', 'features.16.conv.2', 'features.15.conv.2'}],\n    'wide_resnet50_2': [{'layer1.2.conv3', 'layer1.1.conv3', 'layer1.0.conv3', 'layer1.0.downsample.0'},\n                        {'layer2.1.conv3', 'layer2.0.conv3', 'layer2.0.downsample.0',\n                         'layer2.2.conv3', 'layer2.3.conv3'},\n                        {'layer3.3.conv3', 'layer3.0.conv3', 'layer3.2.conv3', 'layer3.0.downsample.0',\n                         'layer3.1.conv3', 'layer3.4.conv3', 'layer3.5.conv3'},\n                        {'layer4.1.conv3', 'layer4.2.conv3', 'layer4.0.downsample.0', 'layer4.0.conv3'}],\n    'alexnet': [],\n    'vgg11': [],\n    'vgg11_bn': [],\n    'vgg13': [],\n    'vgg19': [],\n    'squeezenet1_1': [],\n    'googlenet': []\n    # comments the shufflenet temporary\n    # because it has the listunpack operation which\n    # will lead to a graph construction error.\n    # support the listunpack in the next release.\n    # 'shufflenet_v2_x1_0': []\n}\n\nunittest.TestLoader.sortTestMethodsUsing = None\n\n\nclass AnalysisUtilsTest(TestCase):\n    @unittest.skipIf(torch.__version__ < \"1.3.0\", \"not supported\")\n    def test_channel_dependency(self):\n        outdir = os.path.join(prefix, 'dependency')\n        os.makedirs(outdir, exist_ok=True)\n        for name in model_names:\n            print('Analyze channel dependency for %s' % name)\n            model = getattr(models, name)\n            net = model().to(device)\n            dummy_input = torch.ones(1, 3, 224, 224).to(device)\n            channel_depen = ChannelDependency(net, dummy_input)\n            depen_sets = channel_depen.dependency_sets\n            d_set_count = 0\n            for d_set in depen_sets:\n                if len(d_set) > 1:\n                    d_set_count += 1\n                    assert d_set in channel_dependency_ground_truth[name]\n            assert d_set_count == len(channel_dependency_ground_truth[name])\n            fpath = os.path.join(outdir, name)\n            channel_depen.export(fpath)\n\n    def get_pruned_index(self, mask):\n        pruned_indexes = []\n        shape = mask.size()\n        for i in range(shape[0]):\n            if torch.sum(mask[i]).item() == 0:\n                pruned_indexes.append(i)\n\n        return pruned_indexes\n\n    @unittest.skipIf(torch.__version__ < \"1.3.0\", \"not supported\")\n    def test_mask_conflict(self):\n        outdir = os.path.join(prefix, 'masks')\n        os.makedirs(outdir, exist_ok=True)\n        for name in model_names:\n            print('Test mask conflict for %s' % name)\n            model = getattr(models, name)\n            net = model().to(device)\n            dummy_input = torch.ones(1, 3, 224, 224).to(device)\n            # random generate the prune sparsity for each layer\n            cfglist = []\n            for layername, layer in net.named_modules():\n                if isinstance(layer, nn.Conv2d):\n                    # pruner cannot allow the sparsity to be 0 or 1\n                    sparsity = np.random.uniform(0.01, 0.99)\n                    cfg = {'op_types': ['Conv2d'], 'op_names': [\n                        layername], 'sparsity': sparsity}\n                    cfglist.append(cfg)\n            pruner = L1FilterPruner(net, cfglist)\n            pruner.compress()\n            ck_file = os.path.join(outdir, '%s.pth' % name)\n            mask_file = os.path.join(outdir, '%s_mask' % name)\n            pruner.export_model(ck_file, mask_file)\n            pruner._unwrap_model()\n            # Fix the mask conflict\n            fixed_mask, _ = fix_mask_conflict(mask_file, net, dummy_input)\n\n            # use the channel dependency groud truth to check if\n            # fix the mask conflict successfully\n            for dset in channel_dependency_ground_truth[name]:\n                lset = list(dset)\n                for i, _ in enumerate(lset):\n                    assert fixed_mask[lset[0]]['weight'].size(\n                        0) == fixed_mask[lset[i]]['weight'].size(0)\n                    w_index1 = self.get_pruned_index(\n                        fixed_mask[lset[0]]['weight'])\n                    w_index2 = self.get_pruned_index(\n                        fixed_mask[lset[i]]['weight'])\n                    assert w_index1 == w_index2\n                    if hasattr(fixed_mask[lset[0]], 'bias'):\n                        b_index1 = self.get_pruned_index(\n                            fixed_mask[lset[0]]['bias'])\n                        b_index2 = self.get_pruned_index(\n                            fixed_mask[lset[i]]['bias'])\n                        assert b_index1 == b_index2\n\n\n    def test_flops_params(self):\n        class Model1(nn.Module):\n            def __init__(self):\n                super(Model1, self).__init__()\n                self.conv = nn.Conv2d(3, 5, 1, 1)\n                self.bn = nn.BatchNorm2d(5)\n                self.relu = nn.LeakyReLU()\n                self.linear = nn.Linear(20, 10)\n                self.upsample = nn.UpsamplingBilinear2d(size=2)\n                self.pool = nn.AdaptiveAvgPool2d((2, 2))\n\n            def forward(self, x):\n                x = self.conv(x)\n                x = self.bn(x)\n                x = self.relu(x)\n                x = self.upsample(x)\n                x = self.pool(x)\n                x = x.view(x.size(0), -1)\n                x = self.linear(x)\n                return x\n\n        class Model2(nn.Module):\n            def __init__(self):\n                super(Model2, self).__init__()\n                self.conv = nn.Conv2d(3, 5, 1, 1)\n                self.conv2 = nn.Conv2d(5, 5, 1, 1)\n\n            def forward(self, x):\n                x = self.conv(x)\n                for _ in range(5):\n                    x = self.conv2(x)\n                return x\n        \n        flops, params, results = count_flops_params(Model1(), (1, 3, 2, 2), mode='full', verbose=False)\n        assert (flops, params)  == (610, 240)\n\n        flops, params, results = count_flops_params(Model2(), (1, 3, 2, 2), verbose=False)\n        assert (flops, params)  == (560, 50)\n\n        from torchvision.models import resnet50\n        flops, params, results = count_flops_params(resnet50(), (1, 3, 224, 224), verbose=False)\n        assert (flops, params) == (4089184256, 25503912)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tests/compression/test_compressor_tf.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n# Modified work Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nimport unittest\nimport sys\n\nimport numpy as np\n\ntry:\n    import tensorflow as tf\nexcept (ImportError):\n    sys.exit(0)\n\n\n####\n#\n# This file tests pruners on 3 models:\n#   A classic CNN model built by inheriting `Model`;\n#   The same CNN model built with `Sequential`;\n#   A naive model with only one linear layer.\n#\n# The CNN models are used to test layer detecting and instrumenting.\n#\n# The naive model is used to test mask calculation.\n# It has a single 10x10 linear layer without bias, and `reduce_sum` its result.\n# To help predicting pruning result, the linear layer has fixed initial weights:\n#     [ [ 0.0, 1.0, 2.0, ..., 9.0 ], [0.1, 1.1, 2.1, ..., 9.1 ], ... , [0.9, 1.0, 2.9, ..., 9.9 ] ]\n#\n####\n\n\n# This tensor is used as input of 10x10 linear layer, the first dimension is batch size\ntensor1x10 = tf.constant([[1.0] * 10])\n\n\n@unittest.skipIf(tf.__version__[0] != '2', 'Skip TF 1.x setup')\nclass TfCompressorTestCase(unittest.TestCase):\n    def test_layer_detection(self):\n        # Conv and dense layers should be compressed, pool and flatten should not.\n        # This also tests instrumenting functionality.\n        self._test_layer_detection_on_model(CnnModel())\n        self._test_layer_detection_on_model(build_sequential_model())\n\n    def _test_layer_detection_on_model(self, model):\n        pruner = pruners['level'](model)\n        pruner.compress()\n        layer_types = sorted(type(wrapper.layer).__name__ for wrapper in pruner.wrappers)\n        assert layer_types == ['Conv2D', 'Dense', 'Dense'], layer_types\n\n    def test_level_pruner(self):\n        # prune 90% : 9.0 + 9.1 + ... + 9.9 = 94.5\n        model = build_naive_model()\n        pruners['level'](model).compress()\n        x = model(tensor1x10)\n        assert x.numpy() == 94.5\n\n\ntry:\n    from tensorflow.keras import Model, Sequential\n    from tensorflow.keras.layers import (Conv2D, Dense, Flatten, MaxPool2D)\n\n    from aup.compression.tensorflow import LevelPruner\n\n    pruners = {\n        'level': (lambda model: LevelPruner(model, [{'sparsity': 0.9, 'op_types': ['default']}])),\n    }\n\n    class CnnModel(Model):\n        def __init__(self):\n            super().__init__()\n            self.conv = Conv2D(filters=10, kernel_size=3, activation='relu')\n            self.pool = MaxPool2D(pool_size=2)\n            self.flatten = Flatten()\n            self.fc1 = Dense(units=10, activation='relu')\n            self.fc2 = Dense(units=5, activation='softmax')\n\n        def call(self, x):\n            x = self.conv(x)\n            x = self.pool(x)\n            x = self.flatten(x)\n            x = self.fc1(x)\n            x = self.fc2(x)\n            return x\n\n    def build_sequential_model():\n        return Sequential([\n            Conv2D(filters=10, kernel_size=3, activation='relu'),\n            MaxPool2D(pool_size=2),\n            Flatten(),\n            Dense(units=10, activation='relu'),\n            Dense(units=5, activation='softmax'),\n        ])\n\n    class NaiveModel(Model):\n        def __init__(self):\n            super().__init__()\n            self.fc = Dense(units=10, use_bias=False)\n\n        def call(self, x):\n            return tf.math.reduce_sum(self.fc(x))\n\nexcept Exception:\n    pass\n\n\ndef build_naive_model():\n    model = NaiveModel()\n    model.build(tensor1x10.shape)\n    weight = [[(i + j * 0.1) for i in range(10)] for j in range(10)]\n    model.set_weights([np.array(weight)])\n    return model\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/compression/test_compressor_torch.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n# Modified work Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nfrom unittest import TestCase, main\nimport numpy as np\nimport torch\nimport torch.nn.functional as F\nimport schema\nfrom aup.compression.torch.pruning import *\nfrom aup.compression.torch.quantization import *\nimport math\n\n\nclass TorchModel(torch.nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.conv1 = torch.nn.Conv2d(1, 5, 5, 1)\n        self.bn1 = torch.nn.BatchNorm2d(5)\n        self.conv2 = torch.nn.Conv2d(5, 10, 5, 1)\n        self.bn2 = torch.nn.BatchNorm2d(10)\n        self.fc1 = torch.nn.Linear(4 * 4 * 10, 100)\n        self.fc2 = torch.nn.Linear(100, 10)\n\n    def forward(self, x):\n        x = F.relu(self.bn1(self.conv1(x)))\n        x = F.max_pool2d(x, 2, 2)\n        x = F.relu(self.bn2(self.conv2(x)))\n        x = F.max_pool2d(x, 2, 2)\n        x = x.view(-1, 4 * 4 * 10)\n        x = F.relu(self.fc1(x))\n        x = self.fc2(x)\n        return F.log_softmax(x, dim=1)\n\n\nclass CompressorTestCase(TestCase):\n    def test_torch_quantizer_modules_detection(self):\n        # test if modules can be detected\n        model = TorchModel()\n        config_list = [{\n            'quant_types': ['weight'],\n            'quant_bits': 8,\n            'op_types': ['Conv2d', 'Linear']\n        }, {\n            'quant_types': ['output'],\n            'quant_bits': 8,\n            'quant_start_step': 0,\n            'op_types': ['ReLU']\n        }]\n\n        model.relu = torch.nn.ReLU()\n        quantizer = QAT_Quantizer(model, config_list)\n        quantizer.compress()\n        modules_to_compress = quantizer.get_modules_to_compress()\n        modules_to_compress_name = [t[0].name for t in modules_to_compress]\n        assert \"conv1\" in modules_to_compress_name\n        assert \"conv2\" in modules_to_compress_name\n        assert \"fc1\" in modules_to_compress_name\n        assert \"fc2\" in modules_to_compress_name\n        assert \"relu\" in modules_to_compress_name\n        assert len(modules_to_compress_name) == 5\n\n    def test_torch_level_pruner(self):\n        model = TorchModel()\n        optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.5)\n        configure_list = [{'sparsity': 0.8, 'op_types': ['default']}]\n        LevelPruner(model, configure_list, optimizer).compress()\n\n    def test_torch_naive_quantizer(self):\n        model = TorchModel()\n        configure_list = [{\n            'quant_types': ['weight'],\n            'quant_bits': {\n                'weight': 8,\n            },\n            'op_types': ['Conv2d', 'Linear']\n        }]\n        NaiveQuantizer(model, configure_list).compress()\n\n    def test_torch_fpgm_pruner(self):\n        \"\"\"\n        With filters(kernels) weights defined as above (w), it is obvious that w[4] and w[5] is the Geometric Median\n        which minimize the total geometric distance by defination of Geometric Median in this paper:\n        Filter Pruning via Geometric Median for Deep Convolutional Neural Networks Acceleration,\n        https://arxiv.org/pdf/1811.00250.pdf\n\n        So if sparsity is 0.2, the expected masks should mask out w[4] and w[5], this can be verified through:\n        `all(torch.sum(masks, (1, 2, 3)).numpy() == np.array([125., 125., 125., 125., 0., 0., 125., 125., 125., 125.]))`\n\n        If sparsity is 0.6, the expected masks should mask out w[2] - w[7], this can be verified through:\n        `all(torch.sum(masks, (1, 2, 3)).numpy() == np.array([125., 125., 0., 0., 0., 0., 0., 0., 125., 125.]))`\n        \"\"\"\n        w = np.array([np.ones((5, 5, 5)) * (i+1) for i in range(10)]).astype(np.float32)\n\n        model = TorchModel()\n        config_list = [{'sparsity': 0.6, 'op_types': ['Conv2d']}, {'sparsity': 0.2, 'op_types': ['Conv2d']}]\n        pruner = FPGMPruner(model, config_list, torch.optim.SGD(model.parameters(), lr=0.01))\n\n        model.conv2.module.weight.data = torch.tensor(w).float()\n        masks = pruner.calc_mask(model.conv2)\n        assert all(torch.sum(masks['weight_mask'], (1, 2, 3)).numpy() == np.array([125., 125., 125., 125., 0., 0., 125., 125., 125., 125.]))\n\n        model.conv2.module.weight.data = torch.tensor(w).float()\n        model.conv2.if_calculated = False\n        model.conv2.config = config_list[0]\n        masks = pruner.calc_mask(model.conv2)\n        assert all(torch.sum(masks['weight_mask'], (1, 2, 3)).numpy() == np.array([125., 125., 0., 0., 0., 0., 0., 0., 125., 125.]))\n\n       \n    def test_torch_l1filter_pruner(self):\n        \"\"\"\n        Filters with the minimum sum of the weights' L1 norm are pruned in this paper:\n        PRUNING FILTERS FOR EFFICIENT CONVNETS,\n        https://arxiv.org/abs/1608.08710\n\n        So if sparsity is 0.2 for conv1, the expected masks should mask out filter 0, this can be verified through:\n        `all(torch.sum(mask1, (1, 2, 3)).numpy() == np.array([0., 25., 25., 25., 25.]))`\n\n        If sparsity is 0.6 for conv2, the expected masks should mask out filter 0,1,2, this can be verified through:\n        `all(torch.sum(mask2, (1, 2, 3)).numpy() == np.array([0., 0., 0., 0., 0., 0., 125., 125., 125., 125.]))`\n        \"\"\"\n        w1 = np.array([np.ones((1, 5, 5))*i for i in range(5)]).astype(np.float32)\n        w2 = np.array([np.ones((5, 5, 5))*i for i in range(10)]).astype(np.float32)\n\n        model = TorchModel()\n        config_list = [{'sparsity': 0.2, 'op_types': ['Conv2d'], 'op_names': ['conv1']},\n                       {'sparsity': 0.6, 'op_types': ['Conv2d'], 'op_names': ['conv2']}]\n        pruner = L1FilterPruner(model, config_list)\n\n        model.conv1.module.weight.data = torch.tensor(w1).float()\n        model.conv2.module.weight.data = torch.tensor(w2).float()\n        mask1 = pruner.calc_mask(model.conv1)\n        mask2 = pruner.calc_mask(model.conv2)\n        assert all(torch.sum(mask1['weight_mask'], (1, 2, 3)).numpy() == np.array([0., 25., 25., 25., 25.]))\n        assert all(torch.sum(mask2['weight_mask'], (1, 2, 3)).numpy() == np.array([0., 0., 0., 0., 0., 0., 125., 125., 125., 125.]))\n\n    def test_torch_slim_pruner(self):\n        \"\"\"\n        Scale factors with minimum l1 norm in the BN layers are pruned in this paper:\n        Learning Efficient Convolutional Networks through Network Slimming,\n        https://arxiv.org/pdf/1708.06519.pdf\n\n        So if sparsity is 0.2, the expected masks should mask out channel 0, this can be verified through:\n        `all(mask1.numpy() == np.array([0., 1., 1., 1., 1.]))`\n        `all(mask2.numpy() == np.array([0., 1., 1., 1., 1.]))`\n\n        If sparsity is 0.6, the expected masks should mask out channel 0,1,2, this can be verified through:\n        `all(mask1.numpy() == np.array([0., 0., 0., 1., 1.]))`\n        `all(mask2.numpy() == np.array([0., 0., 0., 1., 1.]))`\n        \"\"\"\n        w = np.array([0, 1, 2, 3, 4])\n        model = TorchModel()\n        config_list = [{'sparsity': 0.2, 'op_types': ['BatchNorm2d']}]\n        model.bn1.weight.data = torch.tensor(w).float()\n        model.bn2.weight.data = torch.tensor(-w).float()\n        pruner = SlimPruner(model, config_list)\n\n        mask1 = pruner.calc_mask(model.bn1)\n        mask2 = pruner.calc_mask(model.bn2)\n        assert all(mask1['weight_mask'].numpy() == np.array([0., 1., 1., 1., 1.]))\n        assert all(mask2['weight_mask'].numpy() == np.array([0., 1., 1., 1., 1.]))\n        assert all(mask1['bias_mask'].numpy() == np.array([0., 1., 1., 1., 1.]))\n        assert all(mask2['bias_mask'].numpy() == np.array([0., 1., 1., 1., 1.]))\n\n        model = TorchModel()\n        config_list = [{'sparsity': 0.6, 'op_types': ['BatchNorm2d']}]\n        model.bn1.weight.data = torch.tensor(w).float()\n        model.bn2.weight.data = torch.tensor(w).float()\n        pruner = SlimPruner(model, config_list)\n\n        mask1 = pruner.calc_mask(model.bn1)\n        mask2 = pruner.calc_mask(model.bn2)\n        assert all(mask1['weight_mask'].numpy() == np.array([0., 0., 0., 1., 1.]))\n        assert all(mask2['weight_mask'].numpy() == np.array([0., 0., 0., 1., 1.]))\n        assert all(mask1['bias_mask'].numpy() == np.array([0., 0., 0., 1., 1.]))\n        assert all(mask2['bias_mask'].numpy() == np.array([0., 0., 0., 1., 1.]))\n\n    def test_torch_taylorFOweight_pruner(self):\n        \"\"\"\n        Filters with the minimum importance approxiamtion based on the first order \n        taylor expansion on the weights (w*grad)**2 are pruned in this paper:\n        Importance Estimation for Neural Network Pruning,\n        http://jankautz.com/publications/Importance4NNPruning_CVPR19.pdf\n\n        So if sparsity of conv1 is 0.2, the expected masks should mask out filter 0, this can be verified through:\n        `all(torch.sum(mask1['weight_mask'], (1, 2, 3)).numpy() == np.array([0., 25., 25., 25., 25.]))`\n\n        If sparsity of conv2 is 0.6, the expected masks should mask out filter 4,5,6,7,8,9 this can be verified through:\n        `all(torch.sum(mask2['weight_mask'], (1, 2, 3)).numpy() == np.array([125., 125., 125., 125., 0., 0., 0., 0., 0., 0., ]))`\n        \"\"\"\n\n        w1 = np.array([np.zeros((1, 5, 5)), np.ones((1, 5, 5)), np.ones((1, 5, 5)) * 2,\n                      np.ones((1, 5, 5)) * 3, np.ones((1, 5, 5)) * 4])\n        w2 = np.array([[[[i + 1] * 5] * 5] * 5 for i in range(10)[::-1]])\n\n        grad1 = np.array([np.ones((1, 5, 5)) * -1, np.ones((1, 5, 5)) * 1, np.ones((1, 5, 5)) * -1,\n                      np.ones((1, 5, 5)) * 1, np.ones((1, 5, 5)) * -1])\n\n        grad2 = np.array([[[[(-1)**i] * 5] * 5] * 5 for i in range(10)])\n\n        config_list = [{'sparsity': 0.2, 'op_types': ['Conv2d'], 'op_names': ['conv1']},\n                       {'sparsity': 0.6, 'op_types': ['Conv2d'], 'op_names': ['conv2']}]\n\n        model = TorchModel()\n        optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.5)\n        pruner = TaylorFOWeightFilterPruner(model, config_list, optimizer, statistics_batch_num=1)\n        \n        x = torch.rand((1, 1, 28, 28), requires_grad=True)\n        model.conv1.module.weight.data = torch.tensor(w1).float()\n        model.conv2.module.weight.data = torch.tensor(w2).float()\n\n        y = model(x)\n        y.backward(torch.ones_like(y))\n\n        model.conv1.module.weight.grad.data = torch.tensor(grad1).float()\n        model.conv2.module.weight.grad.data = torch.tensor(grad2).float()\n        optimizer.step()\n\n        mask1 = pruner.calc_mask(model.conv1)\n        mask2 = pruner.calc_mask(model.conv2)\n        assert all(torch.sum(mask1['weight_mask'], (1, 2, 3)).numpy() == np.array([0., 25., 25., 25., 25.]))\n        assert all(torch.sum(mask2['weight_mask'], (1, 2, 3)).numpy() == np.array([125., 125., 125., 125., 0., 0., 0., 0., 0., 0., ]))\n\n    def test_torch_QAT_quantizer(self):\n        model = TorchModel()\n        config_list = [{\n            'quant_types': ['weight'],\n            'quant_bits': 8,\n            'op_types': ['Conv2d', 'Linear']\n        }, {\n            'quant_types': ['output'],\n            'quant_bits': 8,\n            'quant_start_step': 0,\n            'op_types': ['ReLU']\n        }]\n        model.relu = torch.nn.ReLU()\n        quantizer = QAT_Quantizer(model, config_list)\n        quantizer.compress()\n\n        # test quantize\n        # range not including 0\n        eps = 1e-7\n        weight = torch.tensor([[1, 2], [3, 5]]).float()\n        model.conv2.module.old_weight.data = weight\n        quantizer.quantize_weight(model.conv2)\n        assert math.isclose(model.conv2.module.scale, 5 / 255, abs_tol=eps)\n        assert model.conv2.module.zero_point == 0\n        # range including 0\n        weight = torch.tensor([[-1, 2], [3, 5]]).float()\n        model.conv2.module.old_weight.data = weight\n        quantizer.quantize_weight(model.conv2)\n        assert math.isclose(model.conv2.module.scale, 6 / 255, abs_tol=eps)\n        assert model.conv2.module.zero_point in (42, 43)\n        # test value of weight and bias after quantization\n        weight = torch.tensor([[1.1287, 2.3456], [3.7814, 5.9723]])\n        weight_valid = torch.tensor([[1.1242, 2.3421], [3.7707, 5.9723]])\n        bias = torch.tensor([2.3432, 3.4342, 1.3414, 5.2341])\n        bias_valid = torch.tensor([2.3432, 3.4342, 1.3414, 5.2341])\n        model.conv2.module.old_weight.data = weight\n        model.conv2.module.bias.data = bias\n        quantizer.quantize_weight(model.conv2)\n        assert torch.all(torch.isclose(model.conv2.module.weight.data, weight_valid, rtol=1e-4))\n        assert torch.all(torch.isclose(model.conv2.module.bias.data, bias_valid, rtol=1e-7))\n\n        # test ema\n        eps = 1e-7\n        x = torch.tensor([[-0.2, 0], [0.1, 0.2]])\n        out = model.relu(x)\n        assert math.isclose(model.relu.module.tracked_min_biased, 0, abs_tol=eps)\n        assert math.isclose(model.relu.module.tracked_max_biased, 0.002, abs_tol=eps)\n\n        quantizer.step_with_optimizer()\n        x = torch.tensor([[0.2, 0.4], [0.6, 0.8]])\n        out = model.relu(x)\n        assert math.isclose(model.relu.module.tracked_min_biased, 0.002, abs_tol=eps)\n        assert math.isclose(model.relu.module.tracked_max_biased, 0.00998, abs_tol=eps)\n\n    def test_torch_pruner_validation(self):\n        # test bad configuration\n\n        pruner_classes = [LevelPruner, SlimPruner, FPGMPruner, L1FilterPruner, \\\n            L2FilterPruner, AGPPruner, ActivationMeanRankFilterPruner, ActivationAPoZRankFilterPruner]\n\n        bad_configs = [\n            [\n                {'sparsity': '0.2'},\n                {'sparsity': 0.6 }\n            ],\n            [\n                {'sparsity': 0.2},\n                {'sparsity': 1.6 }\n            ],\n            [\n                {'sparsity': 0.2, 'op_types': 'default'},\n                {'sparsity': 0.6 }\n            ],\n            [\n                {'sparsity': 0.2 },\n                {'sparsity': 0.6, 'op_names': 'abc' }\n            ]\n        ]\n        model = TorchModel()\n        optimizer = torch.optim.SGD(model.parameters(), lr=0.01)\n        for pruner_class in pruner_classes:\n            for config_list in bad_configs:\n                try:\n                    pruner_class(model, config_list, optimizer)\n                    print(config_list)\n                    assert False, 'Validation error should be raised for bad configuration'\n                except schema.SchemaError:\n                    pass\n                except:\n                    print('FAILED:', pruner_class, config_list)\n                    raise\n\n    def test_torch_quantizer_validation(self):\n        # test bad configuration\n        quantizer_classes = [NaiveQuantizer, QAT_Quantizer, DoReFaQuantizer, BNNQuantizer]\n\n        bad_configs = [\n            [\n                {'bad_key': 'abc'}\n            ],\n            [\n                {'quant_types': 'abc'}\n            ],\n            [\n                {'quant_bits': 34}\n            ],\n            [\n                {'op_types': 'default'}\n            ],\n            [\n                {'quant_bits': {'abc': 123}}\n            ]\n        ]\n        model = TorchModel()\n        optimizer = torch.optim.SGD(model.parameters(), lr=0.01)\n        for quantizer_class in quantizer_classes:\n            for config_list in bad_configs:\n                try:\n                    quantizer_class(model, config_list, optimizer)\n                    print(config_list)\n                    assert False, 'Validation error should be raised for bad configuration'\n                except schema.SchemaError:\n                    pass\n                except:\n                    print('FAILED:', quantizer_class, config_list)\n                    raise\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tests/compression/test_model_speedup.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT license.\n\n# Modified work Copyright (c) 2018 LG Electronics Inc.\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nimport os\nimport psutil\nimport sys\nimport numpy as np\nimport torch\nimport torchvision.models as models\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torchvision.models.vgg import vgg16\nfrom torchvision.models.resnet import resnet18\nimport unittest\nfrom unittest import TestCase, main\n\nfrom aup.compression.torch import L1FilterPruner, apply_compression_results, ModelSpeedup\nfrom aup.compression.torch.pruning.weight_masker import WeightMasker\nfrom aup.compression.torch.pruning.one_shot import _StructuredFilterPruner\n\ntorch.manual_seed(0)\ndevice = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\nBATCH_SIZE = 2\n# the relative distance\nRELATIVE_THRESHOLD = 0.01\n# Because of the precision of floating-point numbers, some errors\n# between the original output tensors(without speedup) and the output\n# tensors of the speedup model are normal. When the output tensor itself\n# is small, such errors may exceed the relative threshold, so we also add\n# an absolute threshold to determine whether the final result is correct.\n# The error should meet the RELATIVE_THREHOLD or the ABSOLUTE_THRESHOLD.\nABSOLUTE_THRESHOLD = 0.0001\n\n\nclass BackboneModel1(nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.conv1 = nn.Conv2d(1, 1, 1, 1)\n\n    def forward(self, x):\n        return self.conv1(x)\n\n\nclass BackboneModel2(torch.nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.conv1 = nn.Conv2d(1, 20, 5, 1)\n        self.conv2 = nn.Conv2d(20, 50, 5, 1)\n        self.bn1 = nn.BatchNorm2d(self.conv1.out_channels)\n        self.bn2 = nn.BatchNorm2d(self.conv2.out_channels)\n        self.fc1 = nn.Linear(4 * 4 * 50, 500)\n        self.fc2 = nn.Linear(500, 10)\n\n    def forward(self, x):\n        x = F.relu(self.bn1(self.conv1(x)))\n        x = F.max_pool2d(x, 2, 2)\n        x = F.relu(self.bn2(self.conv2(x)))\n        x = F.max_pool2d(x, 2, 2)\n        x = x.view(x.size(0), -1)\n\n        x = F.relu(self.fc1(x))\n        x = self.fc2(x)\n        return x\n\n\nclass BigModel(torch.nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.backbone1 = BackboneModel1()\n        self.backbone2 = BackboneModel2()\n        self.fc3 = nn.Sequential(\n            nn.Linear(10, 10),\n            nn.BatchNorm1d(10),\n            nn.ReLU(inplace=True),\n            nn.Linear(10, 2)\n        )\n\n    def forward(self, x):\n        x = self.backbone1(x)\n        x = self.backbone2(x)\n        x = self.fc3(x)\n        return x\n\n\nclass TransposeModel(torch.nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.conv1 = nn.Conv2d(3, 20, 5)\n        self.conv2 = nn.ConvTranspose2d(20, 50, 5, groups=2)\n        self.bn1 = nn.BatchNorm2d(self.conv1.out_channels)\n        self.bn2 = nn.BatchNorm2d(self.conv2.out_channels)\n        self.fc1 = nn.Linear(8 * 8 * 50, 500)\n        self.fc2 = nn.Linear(500, 10)\n\n    def forward(self, x):\n        x = F.relu(self.bn1(self.conv1(x)))\n        # x = F.max_pool2d(x, 2, 2)\n        x = F.relu(self.bn2(self.conv2(x)))\n        # x = F.max_pool2d(x, 2, 2)\n        x = x.view(x.size(0), -1)\n\n        x = F.relu(self.fc1(x))\n        x = self.fc2(x)\n        return x\n\n\ndummy_input = torch.randn(2, 1, 28, 28)\nSPARSITY = 0.5\nMODEL_FILE, MASK_FILE = './11_model.pth', './l1_mask.pth'\n\n\ndef prune_model_l1(model):\n    config_list = [{\n        'sparsity': SPARSITY,\n        'op_types': ['Conv2d']\n    }]\n    pruner = L1FilterPruner(model, config_list)\n    pruner.compress()\n    pruner.export_model(model_path=MODEL_FILE, mask_path=MASK_FILE)\n\n\ndef generate_random_sparsity(model):\n    cfg_list = []\n    for name, module in model.named_modules():\n        if isinstance(module, nn.Conv2d):\n            sparsity = np.random.uniform(0.5, 0.99)\n            cfg_list.append({'op_types': ['Conv2d'], 'op_names': [name],\n                             'sparsity': sparsity})\n    return cfg_list\n\ndef generate_random_sparsity_v2(model):\n    \"\"\"\n    Only select 50% layers to prune.\n    \"\"\"\n    cfg_list = []\n    for name, module in model.named_modules():\n        if isinstance(module, nn.Conv2d):\n            if np.random.uniform(0, 1.0) > 0.5:\n                sparsity = np.random.uniform(0.5, 0.99)\n                cfg_list.append({'op_types': ['Conv2d'], 'op_names': [name],\n                             'sparsity': sparsity})\n    return cfg_list\n\ndef zero_bn_bias(model):\n    with torch.no_grad():\n        for name, module in model.named_modules():\n            if isinstance(module, nn.BatchNorm2d) \\\n                    or isinstance(module, nn.BatchNorm3d) \\\n                    or isinstance(module, nn.BatchNorm1d):\n                shape = module.bias.data.size()\n                device = module.bias.device\n                module.bias.data = torch.zeros(shape).to(device)\n                shape = module.running_mean.data.size()\n                module.running_mean = torch.zeros(shape).to(device)\n\n\nclass L1ChannelMasker(WeightMasker):\n    def __init__(self, model, pruner):\n        self.model = model\n        self.pruner = pruner\n\n    def calc_mask(self, sparsity, wrapper, wrapper_idx=None):\n        msg = 'module type {} is not supported!'.format(wrapper.type)\n        #assert wrapper.type == 'Conv2d', msg\n        weight = wrapper.module.weight.data\n        bias = None\n        if hasattr(wrapper.module, 'bias') and wrapper.module.bias is not None:\n            bias = wrapper.module.bias.data\n\n        if wrapper.weight_mask is None:\n            mask_weight = torch.ones(weight.size()).type_as(weight).detach()\n        else:\n            mask_weight = wrapper.weight_mask.clone()\n        if bias is not None:\n            if wrapper.bias_mask is None:\n                mask_bias = torch.ones(bias.size()).type_as(bias).detach()\n            else:\n                mask_bias = wrapper.bias_mask.clone()\n        else:\n            mask_bias = None\n        base_mask = {'weight_mask': mask_weight, 'bias_mask': mask_bias}\n\n        num_total = weight.size(1)\n        num_prune = int(num_total * sparsity)\n\n        if num_total < 2 or num_prune < 1:\n            return base_mask\n        w_abs = weight.abs()\n        if wrapper.type == 'Conv2d':\n            w_abs_structured = w_abs.sum((0, 2, 3))\n            threshold = torch.topk(\n                w_abs_structured, num_prune, largest=False)[0].max()\n            mask_weight = torch.gt(w_abs_structured, threshold)[\n                None, :, None, None].expand_as(weight).type_as(weight)\n            return {'weight_mask': mask_weight.detach()}\n        else:\n            # Linear\n            assert wrapper.type == 'Linear'\n            w_abs_structured = w_abs.sum((0))\n            threshold = torch.topk(\n                w_abs_structured, num_prune, largest=False)[0].max()\n            mask_weight = torch.gt(w_abs_structured, threshold)[\n                None, :].expand_as(weight).type_as(weight)\n            return {'weight_mask': mask_weight.detach(), 'bias_mask': mask_bias}\n\n\nclass L1ChannelPruner(_StructuredFilterPruner):\n    def __init__(self, model, config_list, optimizer=None, dependency_aware=False, dummy_input=None):\n        super().__init__(model, config_list, pruning_algorithm='l1', optimizer=optimizer,\n                         dependency_aware=dependency_aware, dummy_input=dummy_input)\n\n    def validate_config(self, model, config_list):\n        pass\n\n\ndef channel_prune(model):\n    config_list = [{\n        'sparsity': SPARSITY,\n        'op_types': ['Conv2d', 'Linear']\n    }, {\n        'op_names': ['conv1'],\n        'exclude': True\n    }]\n\n    pruner = L1ChannelPruner(model, config_list)\n    masker = L1ChannelMasker(model, pruner)\n    pruner.masker = masker\n    pruner.compress()\n    pruner.export_model(model_path=MODEL_FILE, mask_path=MASK_FILE)\n\n\nclass SpeedupTestCase(TestCase):\n    def test_speedup_vgg16(self):\n        prune_model_l1(vgg16())\n        model = vgg16()\n        model.train()\n        ms = ModelSpeedup(model, torch.randn(2, 3, 32, 32), masks_file=MASK_FILE)\n        ms.speedup_model()\n\n        orig_model = vgg16()\n        assert model.training\n        assert model.features[2].out_channels == int(\n            orig_model.features[2].out_channels * SPARSITY)\n        assert model.classifier[0].in_features == int(\n            orig_model.classifier[0].in_features * SPARSITY)\n\n    def test_speedup_bigmodel(self):\n        prune_model_l1(BigModel())\n        model = BigModel()\n        apply_compression_results(model, masks_file=MASK_FILE, map_location='cpu')\n        model.eval()\n        mask_out = model(dummy_input)\n\n        model.train()\n        ms = ModelSpeedup(model, dummy_input, masks_file=MASK_FILE)\n        ms.speedup_model()\n        assert model.training\n\n        model.eval()\n        speedup_out = model(dummy_input)\n        if not torch.allclose(mask_out, speedup_out, atol=1e-07):\n            print('input:', dummy_input.size(),\n                  torch.abs(dummy_input).sum((2, 3)))\n            print('mask_out:', mask_out)\n            print('speedup_out:', speedup_out)\n            raise RuntimeError('model speedup inference result is incorrect!')\n\n        orig_model = BigModel()\n\n        assert model.backbone2.conv1.out_channels == int(\n            orig_model.backbone2.conv1.out_channels * SPARSITY)\n        assert model.backbone2.conv2.in_channels == int(\n            orig_model.backbone2.conv2.in_channels * SPARSITY)\n        assert model.backbone2.conv2.out_channels == int(\n            orig_model.backbone2.conv2.out_channels * SPARSITY)\n        assert model.backbone2.fc1.in_features == int(\n            orig_model.backbone2.fc1.in_features * SPARSITY)\n\n    def test_convtranspose_model(self):\n        ori_model = TransposeModel()\n        dummy_input = torch.rand(1, 3, 8, 8)\n        config_list = [{'sparsity': 0.5, 'op_types': ['Conv2d']}]\n        pruner = L1FilterPruner(ori_model, config_list)\n        pruner.compress()\n        ori_model(dummy_input)\n        pruner.export_model(MODEL_FILE, MASK_FILE)\n        pruner._unwrap_model()\n        new_model = TransposeModel()\n        state_dict = torch.load(MODEL_FILE)\n        new_model.load_state_dict(state_dict)\n        ms = ModelSpeedup(new_model, dummy_input, masks_file=MASK_FILE)\n        ms.speedup_model()\n        zero_bn_bias(ori_model)\n        zero_bn_bias(new_model)\n        ori_out = ori_model(dummy_input)\n        new_out = new_model(dummy_input)\n        ori_sum = torch.sum(ori_out)\n        speeded_sum = torch.sum(new_out)\n        print('Tanspose Speedup Test: ori_sum={} speedup_sum={}'.format(ori_sum, speeded_sum))\n        assert (abs(ori_sum - speeded_sum) / abs(ori_sum) < RELATIVE_THRESHOLD) or \\\n                (abs(ori_sum - speeded_sum) < ABSOLUTE_THRESHOLD)\n\n    # FIXME: This test case might fail randomly, no idea why\n    # Example: https://msrasrg.visualstudio.com/NNIOpenSource/_build/results?buildId=16282\n\n    def test_speedup_integration(self):\n        # skip this test on windows(7GB mem available) due to memory limit\n        # Note: hack trick, may be updated in the future\n        if 'win' in sys.platform or 'Win'in sys.platform:\n            print('Skip test_speedup_integration on windows due to memory limit!')\n            return\n\n        Gen_cfg_funcs = [generate_random_sparsity, generate_random_sparsity_v2]\n\n        for model_name in ['resnet18', 'mobilenet_v2', 'squeezenet1_1', 'densenet121' , 'densenet169', \n                           # 'inception_v3' inception is too large and may fail the pipeline\n                            'resnet50']:\n                            \n            for gen_cfg_func in Gen_cfg_funcs:\n                kwargs = {\n                    'pretrained': True\n                }\n                if model_name == 'resnet50':\n                    # testing multiple groups\n                    kwargs = {\n                        'pretrained': False,\n                        'groups': 4\n                    }\n                Model = getattr(models, model_name)\n                net = Model(**kwargs).to(device)\n                speedup_model = Model(**kwargs).to(device)\n                net.eval()  # this line is necessary\n                speedup_model.eval()\n                # random generate the prune config for the pruner\n                cfgs = gen_cfg_func(net)\n                print(\"Testing {} with compression config \\n {}\".format(model_name, cfgs))\n                pruner = L1FilterPruner(net, cfgs)\n                pruner.compress()\n                pruner.export_model(MODEL_FILE, MASK_FILE)\n                pruner._unwrap_model()\n                state_dict = torch.load(MODEL_FILE)\n                speedup_model.load_state_dict(state_dict)\n                zero_bn_bias(net)\n                zero_bn_bias(speedup_model)\n\n                data = torch.ones(BATCH_SIZE, 3, 128, 128).to(device)\n                ms = ModelSpeedup(speedup_model, data, masks_file=MASK_FILE)\n                ms.speedup_model()\n\n                speedup_model.eval()\n\n                ori_out = net(data)\n                speeded_out = speedup_model(data)\n                ori_sum = torch.sum(ori_out).item()\n                speeded_sum = torch.sum(speeded_out).item()\n                print('Sum of the output of %s (before speedup):' %\n                    model_name, ori_sum)\n                print('Sum of the output of %s (after speedup):' %\n                    model_name, speeded_sum)\n                assert (abs(ori_sum - speeded_sum) / abs(ori_sum) < RELATIVE_THRESHOLD) or \\\n                    (abs(ori_sum - speeded_sum) < ABSOLUTE_THRESHOLD)\n\n\n    def test_channel_prune(self):\n        orig_net = resnet18(num_classes=10).to(device)\n        channel_prune(orig_net)\n        state_dict = torch.load(MODEL_FILE)\n\n        orig_net = resnet18(num_classes=10).to(device)\n        orig_net.load_state_dict(state_dict)\n        apply_compression_results(orig_net, masks_file=MASK_FILE)\n        orig_net.eval()\n\n        net = resnet18(num_classes=10).to(device)\n\n        net.load_state_dict(state_dict)\n        net.eval()\n\n        data = torch.randn(BATCH_SIZE, 3, 128, 128).to(device)\n        ms = ModelSpeedup(net, data, masks_file=MASK_FILE)\n        ms.speedup_model()\n        ms.bound_model(data)\n\n        net.eval()\n\n        ori_sum = orig_net(data).abs().sum().item()\n        speeded_sum = net(data).abs().sum().item()\n\n        print(ori_sum, speeded_sum)\n        assert (abs(ori_sum - speeded_sum) / abs(ori_sum) < RELATIVE_THRESHOLD) or \\\n            (abs(ori_sum - speeded_sum) < ABSOLUTE_THRESHOLD)\n\n    def tearDown(self):\n        if os.path.exists(MODEL_FILE):\n            os.remove(MODEL_FILE)\n        if os.path.exists(MASK_FILE):\n            os.remove(MASK_FILE)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tests/data/config/test_read.json",
    "content": "{\"a\": 1}"
  },
  {
    "path": "tests/data/config/test_wrong.json",
    "content": "[1, 2, 3]"
  },
  {
    "path": "tests/data/exp4.json",
    "content": "{\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        0,\n        10\n      ],\n      \"type\": \"float\"\n    }\n  ],\n  \"script\": \"to_delete.py\"\n}"
  },
  {
    "path": "tests/data/exp4_no_name.json",
    "content": "{\n  \"parameter_config\": [\n    {\n      \"name_wrong\": \"x\",\n      \"range\": [\n        0,\n        10\n      ],\n      \"type\": \"float\"\n    }\n  ]\n}"
  },
  {
    "path": "tests/data/exp4_no_param.json",
    "content": "{\n  \"parameter_config_wrong\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        0,\n        10\n      ],\n      \"type\": \"float\"\n    }\n  ]\n}"
  },
  {
    "path": "tests/data/exp4_no_script.json",
    "content": "{\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        0,\n        10\n      ],\n      \"type\": \"float\"\n    }\n  ]\n}"
  },
  {
    "path": "tests/data/exp5.json",
    "content": "{\n  \"name\": \"test_exp\",\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        0,\n        10\n      ],\n      \"type\": \"float\"\n    }\n  ],\n  \"script\": \"EE/test_Job.py\",\n  \"resource\": \"cpu\",\n  \"proposer\": \"random\",\n  \"n_samples\": 10,\n  \"target\": \"max\",\n  \"workingdir\": \"tests\",\n  \"name\": \"test\"\n}"
  },
  {
    "path": "tests/data/exp6.json",
    "content": "{\n  \"parameter_config\": [\n    {\n      \"name\": \"x\",\n      \"range\": [\n        0,\n        10\n      ],\n      \"type\": \"float\"\n    }\n  ],\n  \"script\": \"data/test_script.py\",\n  \"resource\": \"cpu\",\n  \"proposer\": \"random\",\n  \"n_samples\": 20,\n  \"target\": \"max\",\n  \"workingdir\": \"tests\",\n  \"name\": \"test\",\n  \"random_seed\": 0,\n  \"job_failure\": {\n    \"ignore_fail\": true,\n    \"job_retries\": 3\n  }\n}\n"
  },
  {
    "path": "tests/data/exp7.json",
    "content": "{\n    \"name\": \"PyTorch MNIST FPGM Pruner\",\n    \"script\": \"data/task7.py\",\n    \"resource\": \"cpu\",\n    \"compression\": {\n        \"framework\": \"torch\",\n        \"type\": \"pruning\",\n        \"compressor\": \"fpgm\",\n        \"config_list\": [{\n                \"sparsity\": {\n                    \"range\": [0.1, 0.9],\n                    \"type\": \"float\"\n                },\n                \"op_types\": [\"Conv2d\"]\n            }\n        ]\n    },\n    \"target\": \"max\",\n    \"proposer\": \"random\",\n    \"n_samples\": 1,\n    \"n_parallel\": 1,\n    \"workingdir\": \"tests\"\n}\n  "
  },
  {
    "path": "tests/data/gpus.txt",
    "content": "0\n1\n2"
  },
  {
    "path": "tests/data/nodes.txt",
    "content": "test@localhost\ntest@localhost"
  },
  {
    "path": "tests/data/plain_env.ini",
    "content": "[Auptimizer]\n# Auptimizer environment folder to be created, this file will be copied over\nAuptimizer_PATH=./.aup\n# Temp folder\nTMP_FOLDER=./aup_tmp\n# SQL engine\nSQL_ENGINE=sqlite\n"
  },
  {
    "path": "tests/data/target_gpu_env.ini",
    "content": "[Auptimizer]\nAuptimizer_PATH = ./.aup\nTMP_FOLDER = ./aup_tmp\nSQL_ENGINE = sqlite\ngpu_mapping = {\"1\": \"0\", \"2\": \"1\", \"3\": \"2\"}\nSQLITE_FILE = ./.aup/sqlite3.db\n\n"
  },
  {
    "path": "tests/data/target_plain_env.ini",
    "content": "[Auptimizer]\nAuptimizer_PATH = ./.aup\nTMP_FOLDER = ./aup_tmp\nSQL_ENGINE = sqlite\nSQLITE_FILE = ./.aup/sqlite3.db\n\n"
  },
  {
    "path": "tests/data/task1.py",
    "content": "#!/usr/bin/env python\n\n# to fail this script for testing\nx\n"
  },
  {
    "path": "tests/data/task2.py",
    "content": "#!/usr/bin/env python\n\n# to fail this script for testing\nprint(1.0)\n"
  },
  {
    "path": "tests/data/task3.py",
    "content": "#!/usr/bin/env python\n\n# to fail this script for testing\nraise Exception()\n"
  },
  {
    "path": "tests/data/task4.py",
    "content": "def function(x):\n    return x * x\n"
  },
  {
    "path": "tests/data/task5.py",
    "content": "#!/usr/bin/env python3\n\nimport sys\nfrom aup import aup_args, print_result\nfrom time import sleep\n\ndef init(**kwargs):\n  global var\n\n  var = kwargs[\"x\"]\n\n@aup_args\ndef iteration(x):\n  global var\n\n  sleep(1)\n\n  for _ in range(5):\n    var += 1\n    print_result(var)\n\n  var += 1\n  return var\n\niteration(sys.argv[1])\n"
  },
  {
    "path": "tests/data/task6.py",
    "content": "#!/usr/bin/env python3\n\nimport sys\nimport os\nfrom aup import aup_args, aup_save_model\n\n\n@aup_args\ndef iteration(x):\n  aup_save_model(user_def_fn, x)\n  return x\n\ndef user_def_fn(x):\n  os.makedirs(str(x))\n\niteration(sys.argv[1])\n"
  },
  {
    "path": "tests/data/task7.py",
    "content": "#!/usr/bin/env python3\n\nfrom __future__ import print_function\nimport argparse\nimport sys\nimport time\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch.optim as optim\nfrom torchvision import datasets, transforms\nfrom torch.optim.lr_scheduler import StepLR\n\nimport aup\n\n\nclass Net(nn.Module):\n    def __init__(self):\n        super(Net, self).__init__()\n        self.conv1 = nn.Conv2d(1, 32, 3, 1)\n        self.conv2 = nn.Conv2d(32, 64, 3, 1)\n        self.dropout1 = nn.Dropout2d(0.25)\n        self.dropout2 = nn.Dropout2d(0.5)\n        self.fc1 = nn.Linear(9216, 128)\n        self.fc2 = nn.Linear(128, 10)\n\n    def forward(self, x):\n        x = self.conv1(x)\n        x = F.relu(x)\n        x = self.conv2(x)\n        x = F.relu(x)\n        x = F.max_pool2d(x, 2)\n        x = self.dropout1(x)\n        x = torch.flatten(x, 1)\n        x = self.fc1(x)\n        x = F.relu(x)\n        x = self.dropout2(x)\n        x = self.fc2(x)\n        output = F.log_softmax(x, dim=1)\n        return output\n\n\ndef train(args, model, device, train_loader, optimizer, epoch):\n    model.train()\n    for batch_idx, (data, target) in enumerate(train_loader):\n        data, target = data.to(device), target.to(device)\n        optimizer.zero_grad()\n        output = model(data)\n        loss = F.nll_loss(output, target)\n        loss.backward()\n        optimizer.step()\n        if batch_idx % args.log_interval == 0:\n            print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n                epoch, batch_idx * len(data), len(train_loader.dataset),\n                100. * batch_idx / len(train_loader), loss.item()))\n            if args.dry_run:\n                break\n\n\ndef test(model, device, test_loader):\n    model.eval()\n    test_loss = 0\n    correct = 0\n    with torch.no_grad():\n        for data, target in test_loader:\n            data, target = data.to(device), target.to(device)\n            output = model(data)\n            test_loss += F.nll_loss(output, target, reduction='sum').item()  # sum up batch loss\n            pred = output.argmax(dim=1, keepdim=True)  # get the index of the max log-probability\n            correct += pred.eq(target.view_as(pred)).sum().item()\n\n    test_loss /= len(test_loader.dataset)\n\n    print('\\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n        test_loss, correct, len(test_loader.dataset),\n        100. * correct / len(test_loader.dataset)))\n    \n    return test_loss, correct / len(test_loader.dataset)\n\n\ndef main(config):\n    # Training settings\n    parser = argparse.ArgumentParser(description='PyTorch MNIST Example')\n    parser.add_argument('--batch-size', type=int, default=64, metavar='N',\n                        help='input batch size for training (default: 64)')\n    parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',\n                        help='input batch size for testing (default: 1000)')\n    parser.add_argument('--epochs', type=int, default=1, metavar='N',\n                        help='number of epochs to train (default: 14)')\n    parser.add_argument('--lr', type=float, default=1.0, metavar='LR',\n                        help='learning rate (default: 1.0)')\n    parser.add_argument('--gamma', type=float, default=0.7, metavar='M',\n                        help='Learning rate step gamma (default: 0.7)')\n    parser.add_argument('--no-cuda', action='store_true', default=False,\n                        help='disables CUDA training')\n    parser.add_argument('--dry-run', action='store_true', default=False,\n                        help='quickly check a single pass')\n    parser.add_argument('--seed', type=int, default=1, metavar='S',\n                        help='random seed (default: 1)')\n    parser.add_argument('--log-interval', type=int, default=10, metavar='N',\n                        help='how many batches to wait before logging training status')\n    args, _ = parser.parse_known_args()\n\n    use_cuda = not args.no_cuda and torch.cuda.is_available()\n\n    torch.manual_seed(args.seed)\n\n    device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n\n    kwargs = {'batch_size': args.batch_size}\n    if use_cuda:\n        kwargs.update({'num_workers': 1,\n                       'pin_memory': True,\n                       'shuffle': True},\n                     )\n\n    transform = transforms.Compose([\n        transforms.ToTensor(),\n        transforms.Normalize((0.1307,), (0.3081,))\n    ])\n    dataset1 = datasets.MNIST('/tmp/torch_mnist_data', train=True, download=True, transform=transform)\n    dataset2 = datasets.MNIST('/tmp/torch_mnist_data', train=False, transform=transform)\n    train_loader = torch.utils.data.DataLoader(dataset1, **kwargs)\n    test_loader = torch.utils.data.DataLoader(dataset2, **kwargs)\n\n    model = Net().to(device)\n    optimizer = optim.Adadelta(model.parameters(), lr=args.lr)\n    scheduler = StepLR(optimizer, step_size=1, gamma=args.gamma)\n    _, test_acc = test(model, device, test_loader)\n\n    compressor = aup.compression.create_compressor(model, config, optimizer=optimizer)\n    model = compressor.compress()\n\n    scheduler = StepLR(optimizer, step_size=1, gamma=args.gamma)\n    for epoch in range(1, args.epochs + 1):\n        train(args, model, device, train_loader, optimizer, epoch)\n        _, test_acc = test(model, device, test_loader)\n        scheduler.step()\n\n    model = compressor.apply_speedup(dummy_input=torch.randn(1, 1, 28, 28).to(device))\n    flops, _, _ = compressor.count_flops_params((1, 1, 28, 28))\n    flops = int(flops)\n    print(\"test_acc={} flops={}\".format(test_acc, flops))\n\n    compressor.export_model(\n        model_path=\"mnist_compressed.pth\",\n        save_best_only=True,\n        speedup=True,\n        **config)\n\n    aup.print_result((test_acc - 1.) / np.log(flops))\n\n\nif __name__ == '__main__':\n    config = aup.BasicConfig().load(sys.argv[1])\n    main(config)\n"
  },
  {
    "path": "tests/data/task8.py",
    "content": "#!/usr/bin/env python3\n\nimport sys\nfrom aup import aup_args\nfrom time import sleep\n\ndef init(**kwargs):\n  global var\n\n  var = kwargs[\"x\"]\n\n@aup_args\ndef iteration(x):\n  global var\n\n  var += 1\n  sleep(1)\n  return [var, var+1, var+2]\n\niteration(sys.argv[1])"
  },
  {
    "path": "tests/data/test_script.py",
    "content": "#!/usr/bin/env python\n\n\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\n\nimport random\n\n\nRUNS = 0\n\ndef func(x):\n    global RUNS\n    RUNS += 1\n    if RUNS % 5 == 0:\n        raise SystemError\n    return x**2\n\ndef aup_wrapper(config):\n    res = func(x=config['x']) \n    print_result(res)\n\nif __name__ == \"__main__\":\n    import sys\n    from aup import BasicConfig, print_result\n    if len(sys.argv) != 2:\n        print(\"config file required\")\n        exit(1)\n    config = BasicConfig().load(sys.argv[1])\n    aup_wrapper(config)\n"
  },
  {
    "path": "tests/data/wrapper1.json",
    "content": "{\n    \"x\":1,\n    \"b\":2\n}"
  },
  {
    "path": "tests/data/wrapper2.json",
    "content": "{\n    \"x\":1,\n    \"b\":2\n}\n"
  },
  {
    "path": "tests/dlconvert/.gitignore",
    "content": "*.out\n"
  },
  {
    "path": "tests/dlconvert/Dockerfile_tf1",
    "content": "FROM tensorflow/tensorflow:1.15.0-py3\n\nWORKDIR /tf\nRUN apt-get update && apt-get install -y git\n\n# For onnx2keras compatibility issue\nENV TF_KERAS=1  \nENV TF_CPP_MIN_LOG_LEVEL=3\n\nCOPY Examples/dlconvert_examples/dlconvert_requirements.txt /tf/\nCOPY requirements.txt /tf/\n\nRUN pip install -r dlconvert_requirements.txt\nRUN pip install -r requirements.txt\n\nCOPY src/aup /tf/src/aup\nCOPY tests/dlconvert /tf/tests/dlconvert\nCOPY setup.py README.md /tf/\nRUN cd /tf/ && python setup.py -q install\nRUN cd /tf/tests/dlconvert/data && ./prepare_docker.sh\n\nVOLUME /tf/htmlcov\n\nCMD coverage run --source dlconvert -m pytest tests; coverage html"
  },
  {
    "path": "tests/dlconvert/Dockerfile_tf2",
    "content": "FROM tensorflow/tensorflow:2.3.0\n\nWORKDIR /tf\nRUN apt-get update && apt-get install -y git\n\n# For onnx2keras compatibility issue\nENV TF_KERAS=1  \nENV TF_CPP_MIN_LOG_LEVEL=3\n\nCOPY Examples/dlconvert_examples/dlconvert_requirements.txt /tf/\nCOPY requirements.txt /tf/\n\nRUN pip install -r dlconvert_requirements.txt\nRUN pip install -r requirements.txt\n\nCOPY src/aup /tf/src/aup\nCOPY tests/dlconvert /tf/tests/dlconvert\nCOPY setup.py README.md /tf/\nRUN cd /tf/ && python setup.py -q install\nRUN cd /tf/tests/dlconvert/data && ./prepare_docker.sh\n\nVOLUME /tf/htmlcov\n\nCMD coverage run --source dlconvert -m pytest tests; coverage html"
  },
  {
    "path": "tests/dlconvert/README.md",
    "content": "## Tests\n### Prerequisits\nThe tests require `Docker` environment to run. \n\n### Full Unittest\nUse `./unittest_tf1.sh` or `./unittest_tf2.sh` to run test in Tensorflow 1.15 or Tensorflow 2.3 environments respectively. In each environment, two sets of tests are run, each with or without eager execution mode. Note that some conversions only work under eager execution mode while some only work under non-eager execution mode. \n\nAfter running the unit tests, the results will be summarized in the files `test_summary_tf1.out` and `test_summary_tf2.out`.\n\n"
  },
  {
    "path": "tests/dlconvert/__init__.py",
    "content": ""
  },
  {
    "path": "tests/dlconvert/data/.gitignore",
    "content": "test_savedmodel/\ntest_model.pb\ntest_model.h5\ntest_model_ckpt\ntest_model.onnx\ntest_model.pt\n\n"
  },
  {
    "path": "tests/dlconvert/data/create_test_model.py",
    "content": "#!/usr/bin/env python\n\nimport numpy as np\n\n\n\ndef create_tf():\n    import tensorflow as tf\n    from tensorflow import keras\n    from tensorflow.keras import layers\n    from tensorflow.python.util import deprecation\n    deprecation._PRINT_DEPRECATION_WARNINGS = False\n    tf.compat.v1.disable_eager_execution()\n    a = layers.Input(shape=(224,224,3), name=\"input\")\n    b = layers.Conv2D(kernel_size=(3,3), filters=16, activation=\"relu\")(a)\n    b = layers.MaxPool2D(pool_size=(5,5))(b)\n    b = layers.Conv2D(kernel_size=(3,3), filters=64, activation=\"relu\")(b)\n    b = layers.Flatten()(b)\n    b = layers.Dense(10, activation='softmax', name=\"output\")(b)\n    model = keras.Model(inputs=a, outputs=b)\n\n    model.compile(optimizer='sgd', loss='categorical_crossentropy')\n    # save TF checkpoint\n    model.save_weights(\"./test_model_ckpt/ckpt\")\n    tf.compat.v1.train.export_meta_graph(filename=\"./test_model_ckpt/ckpt.meta\")\n    # save keras model\n    model.save(\"./test_model.h5\")\n    # save TF savedmodel\n    model.save(\"./test_savedmodel\", save_format='tf')\n\n    print(model.input)\n    print(model.output)\n\ndef create_pytorch():\n    import torch\n    from pytorch_model import Net\n\n    x = torch.randn(1, 3, 224, 224)\n    m = Net()\n    y = m(x)\n    m.eval()\n    torch.save(m, 'test_model.pt')\n\n\nif __name__ == \"__main__\":\n    create_tf()\n    create_pytorch()\n"
  },
  {
    "path": "tests/dlconvert/data/evaluate_pred.py",
    "content": "from absl import flags, app\n\nimport numpy as np\nfrom os import path\nimport hashlib\n\nflags.DEFINE_string(\"model\", \"test_model.tflite\", 'model path')\nflags.DEFINE_integer(\"seed\", \"123\", \"random seed\")\nFLAGS = flags.FLAGS\n\n\ndef run_lite():\n    import tflite_runtime.interpreter as tflite\n    intp = tflite.Interpreter(FLAGS.model)\n    intp.allocate_tensors()\n    input_idx = intp.get_input_details()[0]['index']\n    intp.set_tensor(input_idx, np.random.random(size=(1,224,224,3)).astype(np.float32))\n    intp.invoke()\n    output_idx = intp.get_output_details()[0]['index']\n    y = intp.get_tensor(output_idx)\n    res = \",\".join(\"%.5f\"%i for i in y[0])\n    print(res)\n    print(hashlib.sha256(res.encode()).hexdigest()[:5])\n    \n\ndef run_onnx():\n    pass\n\ndef main(unused):\n    np.random.seed(FLAGS.seed)\n    if 'lite' in FLAGS.model.split(\".\")[-1]:\n        run_lite()\n    else:\n        run_onnx()\n\n\nif __name__ == \"__main__\":\n    app.run(main)"
  },
  {
    "path": "tests/dlconvert/data/flag_names.json",
    "content": "[\"model\",\"output\",\"i\",\"o\",\"frozen\",\"output_nodes\",\"input_nodes\",\"net\",\"net_name\",\"input_shape\"]"
  },
  {
    "path": "tests/dlconvert/data/prepare.sh",
    "content": "#!/bin/bash\n#  Copyright (c) 2018 LG Electronics Inc.\n#  SPDX-License-Identifier: GPL-3.0-or-later\n\nset -e\n\ncd tests/dlconvert/data\n\nrm -rf test_model_ckpt test_savedmodel test_model.h5 test_model.pb\n\n./create_test_model.py\n\npython3 -m aup.dlconvert.keras_to_pb -i test_model.h5 -o test_model.pb --frozen --output_nodes output/Softmax\npython3 -m aup.dlconvert.keras_to_onnx -i test_model.h5 -o test_model.onnx\n\ncd ../../.."
  },
  {
    "path": "tests/dlconvert/data/prepare_docker.sh",
    "content": "#!/bin/bash\n#  Copyright (c) 2018 LG Electronics Inc.\n#  SPDX-License-Identifier: GPL-3.0-or-later\n\nset -e\n\nrm -rf test_model_ckpt test_savedmodel test_model.h5 test_model.pb\n\n./create_test_model.py\n\npython3 -m aup.dlconvert.keras_to_pb -i test_model.h5 -o test_model.pb --frozen --output_nodes output/Softmax\npython3 -m aup.dlconvert.keras_to_onnx -i test_model.h5 -o test_model.onnx"
  },
  {
    "path": "tests/dlconvert/data/pytorch_model.py",
    "content": "import torch.nn as nn\nimport torch.nn.functional as F\n\n\nclass Net(nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.conv1 = nn.Conv2d(3, 16, 3)  # 222*222*16\n        self.conv2 = nn.Conv2d(16, 64, 3)  # 42*42*64\n        self.fc = nn.Linear(42 * 42 * 64, 10)\n\n    def forward(self, x):\n        x = F.max_pool2d(F.relu(self.conv1(x)), 5)\n        x = F.relu(self.conv2(x))\n        x = x.view(-1, 42 * 42 * 64)\n        x = F.softmax(self.fc(x), dim=1)\n        return x\n\n"
  },
  {
    "path": "tests/dlconvert/data/repdata.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\nCreate a synthetic tf.dataset for testing\n\"\"\"\nimport numpy as np\n\n\ndef get_dataset():\n    labels = np.random.randint(0,10, size=10).astype(np.float)\n    imgs = np.random.random(size=(10, 224, 224, 3))\n    \n    class Dataset:\n        def __init__(self, data):\n            self.data = data\n        \n        def numpy(self):\n            return self.data[np.newaxis,:]\n\n\n    for i in range(10):\n        yield Dataset(imgs[i]), Dataset(labels[i])\n        "
  },
  {
    "path": "tests/dlconvert/dlconvert_requirements.txt",
    "content": "keras2onnx==1.7.0\ntf2onnx\npytest\npytest-cov\ntorch\npytorch2keras\ntensorflow==2.4.0\nonnx"
  },
  {
    "path": "tests/dlconvert/pytest.ini",
    "content": "[pytest]\nfilterwarnings =\n    ignore:the imp module is deprecated in favour of importlib:DeprecationWarning\n    ignore:numpy.* changed:RuntimeWarning"
  },
  {
    "path": "tests/dlconvert/test_checkpoint_to_onnx.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\nimport sys\nfrom absl import flags\nfrom os import path, remove\nfrom six import PY2\n\nimport json\nfrom tensorflow import __version__  # pylint: disable=no-name-in-module\nfrom tensorflow.python.util import deprecation\ndeprecation._PRINT_DEPRECATION_WARNINGS = False\n\n@unittest.skipIf(PY2, \"model conversion does not support python2.x\")\nclass CheckpointToOnnxTestCase(unittest.TestCase):\n    model = path.join(path.dirname(path.abspath(__file__)), \"data\", \"test_model_ckpt/ckpt.meta\")\n    output = path.join(path.dirname(path.abspath(__file__)), \"tmp.onnx\")\n\n    @classmethod\n    def setUpClass(cls):\n        names = json.load(open(path.join(path.dirname(path.abspath(__file__)), \"data\", \"flag_names.json\")))\n        for name in names:\n            if name in list(flags.FLAGS):\n                delattr(flags.FLAGS, name)\n        from aup.dlconvert import checkpoint_to_onnx\n        cls.c2o = checkpoint_to_onnx\n\n    def test_conversion(self):\n        flags.FLAGS(['checkpoint_to_onnx.py','-i=%s' % self.model,'-o=%s' % self.output,\n                     \"--input_nodes=input:0\",\"--output_nodes=output/Softmax:0\"])\n        self.c2o._main(None)\n\n    def tearDown(self):\n        if path.isfile(self.output):\n            remove(self.output)\n"
  },
  {
    "path": "tests/dlconvert/test_checkpoint_to_pb.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\nfrom absl import flags\nfrom os import path, remove, environ\nimport json\nfrom six import PY2\n\ntf2test = False\nif \"TF2TEST\" in environ and environ[\"TF2TEST\"]:\n    tf2test = True\n\n@unittest.skipIf(PY2 or tf2test, \"skip for tf2 environment with eager mode testing\")\nclass CheckpointToPBTestCase(unittest.TestCase):\n    model = path.join(path.dirname(path.abspath(__file__)), \"data\", \"test_model_ckpt/ckpt.meta\")\n    output = path.join(path.dirname(path.abspath(__file__)), \"tmp.pb\")\n\n    @classmethod\n    def setUpClass(cls):\n        names = json.load(open(path.join(path.dirname(path.abspath(__file__)), \"data\", \"flag_names.json\")))\n        for name in names:\n            if name in list(flags.FLAGS):\n                delattr(flags.FLAGS,name)\n        from aup.dlconvert import checkpoint_to_pb\n        cls.c2p = checkpoint_to_pb\n        return super().setUpClass()\n\n    def test_conversion(self):\n        flags.FLAGS(['checkpoint_to_pb.py','-i=%s' % self.model,'-o=%s' % self.output, '--nofrozen'])\n        self.c2p._main(None)\n\n    def test_frozen(self):\n        flags.FLAGS(['checkpoint_to_pb.py','-i=%s' % self.model,'-o=%s' %\n                     self.output, '--frozen', '--output_nodes=output/Softmax'])\n        self.c2p._main(None)\n\n    def tearDown(self):\n        if path.isfile(self.output):\n            remove(self.output)\n"
  },
  {
    "path": "tests/dlconvert/test_checkpoint_to_tflite.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\nfrom absl import flags\nfrom os import path, remove, environ\nimport json\nfrom tensorflow import __version__\nfrom six import PY2\n\ntf2test = False\nif \"TF2TEST\" in environ and environ[\"TF2TEST\"]:\n    tf2test = True\n\n@unittest.skipIf(PY2 or tf2test, \"skip for tf2 environment with eager mode testing\")\nclass CheckpointToPBTestCase(unittest.TestCase):\n    model = path.join(path.dirname(path.abspath(__file__)), \"data\", \"test_model_ckpt/ckpt.meta\")\n    output = path.join(path.dirname(path.abspath(__file__)), \"tmp.tflite\")\n\n    @classmethod\n    def setUpClass(cls):\n        names = json.load(open(path.join(path.dirname(path.abspath(__file__)), \"data\", \"flag_names.json\")))\n        for name in names:\n            if name in list(flags.FLAGS):\n                delattr(flags.FLAGS,name)\n        from aup.dlconvert import checkpoint_to_tflite\n        cls.c2t = checkpoint_to_tflite\n        return super().setUpClass()\n\n    def test_conversion(self):\n        flags.FLAGS(['checkpoint_to_tflite.py','-i=%s' % self.model,'-o=%s' % self.output,\n                     '--input_nodes=input:0', '--output_nodes=output/Softmax:0'])\n        self.c2t._main(None)\n\n    def tearDown(self):\n        if path.isfile(self.output):\n            remove(self.output)\n"
  },
  {
    "path": "tests/dlconvert/test_keras_to_onnx.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\nfrom absl import flags\nfrom os import path, remove\nimport json\nfrom six import PY2\nfrom tensorflow import __version__ # pylint: disable=no-name-in-module\n\n@unittest.skipIf(PY2, \"model conversion does not support python2.x\")\nclass KerasToOnnxTestCase(unittest.TestCase):\n    model = path.join(path.dirname(path.abspath(__file__)), \"data\", \"test_model.h5\")\n    output = path.join(path.dirname(path.abspath(__file__)), \"tmp.onnx\")\n    \n    def test_conversion(self):\n        flags.FLAGS(['keras_to_onnx.py','-i=%s'%self.model,'-o=%s'%self.output])\n        self.k2o._main(None)\n\n    def tearDown(self):\n        if path.isfile(self.output):\n            remove(self.output)\n\n    @classmethod\n    def setUpClass(cls):\n        names = json.load(open(path.join(path.dirname(path.abspath(__file__)), \"data\", \"flag_names.json\")))\n        for name in names:\n            if name in list(flags.FLAGS):\n                delattr(flags.FLAGS,name)\n        from aup.dlconvert import keras_to_onnx\n        from aup.dlconvert import to_onnx\n        import importlib\n        importlib.reload(to_onnx)\n        cls.k2o = keras_to_onnx\n        return super().setUpClass()"
  },
  {
    "path": "tests/dlconvert/test_keras_to_pb.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\nfrom absl import flags\nfrom os import path, remove, environ\nimport json\nfrom six import PY2\n\ntf2test = False\nif \"TF2TEST\" in environ and environ[\"TF2TEST\"]:\n    tf2test = True\n\n\n@unittest.skipIf(PY2 or tf2test, \"skip testing for tf2 environment with eager mode\")\nclass KerasToPBTestCase(unittest.TestCase):\n    model = path.join(path.dirname(path.abspath(__file__)), \"data\", \"test_model.h5\")\n    output = path.join(path.dirname(path.abspath(__file__)), \"tmp.pb\")\n\n    @classmethod\n    def setUpClass(cls):\n        names = json.load(open(path.join(path.dirname(path.abspath(__file__)), \"data\", \"flag_names.json\")))\n        for name in names:\n            if name in list(flags.FLAGS):\n                delattr(flags.FLAGS,name)\n        from aup.dlconvert import keras_to_pb\n        cls.k2p = keras_to_pb\n        return super().setUpClass()\n\n    def test_conversion(self):\n        flags.FLAGS(['keras_to_pb.py','-i=%s'%self.model,'-o=%s'%self.output, '--nofrozen'])\n        self.k2p._main(None)\n\n    def test_frozen(self):\n        flags.FLAGS(['keras_to_pb.py','-i=%s'%self.model,'-o=%s'%self.output, '--frozen'])\n        self.k2p._main(None)\n\n    def tearDown(self):\n        if path.isfile(self.output):\n            remove(self.output)\n\n"
  },
  {
    "path": "tests/dlconvert/test_keras_to_tflite.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\nfrom absl import flags\nfrom os import path, remove, environ\nimport json\nimport warnings\nimport tensorflow as tf\nfrom six import PY2\nfrom tensorflow import __version__ # pylint: disable=no-name-in-module\n\ntf2test = False\nif \"TF2TEST\" in environ and environ[\"TF2TEST\"]:\n    tf2test = True\n\n@unittest.skipIf(PY2 or not tf2test, \"Skip for TF2 no eager mode testing.  Use TF2TEST variable to activate tests.\")\nclass KerasToTFLiteTestCase(unittest.TestCase):\n    model = path.join(path.dirname(path.abspath(__file__)), \"data\", \"test_model.h5\")\n    output = path.join(path.dirname(path.abspath(__file__)), \"tmp.tflite\")\n    default = [\"keras_to_tflite\", \"--model=%s\" % model, \"-o=%s\"%output]\n\n    def test_conversion_plain(self):\n        if __version__[0] == \"2\" and not tf.executing_eagerly():\n            warnings.warn(\"TF2.0 not in eager mode, cannot test.\")\n            return\n        flags.FLAGS(self.default)\n        self.k2t._main(None)\n\n    def test_conversion_tf16(self):\n        if __version__[0] == \"2\" and not tf.executing_eagerly():\n            warnings.warn(\"TF2.0 not in eager mode, cannot test.\")\n            return\n        command = self.default.copy()\n        command.extend([\"--opt=default\", \"--type=float16\"])\n        flags.FLAGS(command)\n        self.k2t._main(None)\n\n    def test_conversion_uint(self):\n        if __version__[0] == \"2\" and not tf.executing_eagerly():\n            warnings.warn(\"TF2.0 not in eager mode, cannot test.\")\n            return\n        command = self.default.copy()\n        command.extend([\"--opt=default\", \"--type=uint8\", \"--ops=tflite\"])\n        flags.FLAGS(command)\n        self.k2t._main(None)\n\n    def test_conversion_int8(self):\n        if __version__[0] == \"2\" and not tf.executing_eagerly():\n            warnings.warn(\"TF2.0 not in eager mode, cannot test.\")\n            return\n        command = self.default.copy()\n        command.extend([\"--opt=default\",\"--type=int8\", \"--ops=tflite\", \n                        \"--load=%s\"%path.join(\"tests\", \"dlconvert\", \"data\", \"repdata.py\")])\n        \n        flags.FLAGS(command)\n        self.k2t._main(None)\n\n    def tearDown(self):\n        flags.FLAGS.unparse_flags()  # https://github.com/abseil/abseil-py/issues/36\n        if path.isfile(self.output):\n            remove(self.output)\n    \n    @classmethod\n    def setUpClass(cls):\n        names = json.load(open(path.join(path.dirname(path.abspath(__file__)), \"data\", \"flag_names.json\")))\n        for name in names:\n            if name in list(flags.FLAGS):\n                delattr(flags.FLAGS,name)\n        from aup.dlconvert import keras_to_tflite\n        cls.k2t = keras_to_tflite\n        return super().setUpClass()"
  },
  {
    "path": "tests/dlconvert/test_pb_to_onnx.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\nfrom absl import flags\nfrom os import path, remove\nimport json\nfrom six import PY2\nfrom tensorflow import __version__ # pylint: disable=no-name-in-module\n\n@unittest.skipIf(PY2, \"model conversion does not support python2.x\")\nclass PBToOnnxTestCase(unittest.TestCase):\n    model = path.join(path.dirname(path.abspath(__file__)), \"data\", \"test_model.pb\")\n    output = path.join(path.dirname(path.abspath(__file__)), \"tmp.onnx\")\n\n    @classmethod\n    def setUpClass(cls):\n        from aup.dlconvert import to_onnx # reload inner package\n        names = json.load(open(path.join(path.dirname(path.abspath(__file__)), \"data\", \"flag_names.json\")))\n        for name in names:\n            if name in list(flags.FLAGS):\n                delattr(flags.FLAGS,name)\n        from aup.dlconvert import pb_to_onnx\n        \n        import importlib\n        importlib.reload(to_onnx)\n        cls.p2o = pb_to_onnx\n        return super().setUpClass()\n\n    def test_conversion(self):\n        flags.FLAGS(['pb_to_onnx.py','-i=%s'%self.model,'-o=%s'%self.output, \"--input_nodes=input:0\",\"--output_nodes=output/Softmax:0\"])\n        self.p2o._main(None)\n\n\n    def tearDown(self):\n        if path.isfile(self.output):\n            remove(self.output)\n"
  },
  {
    "path": "tests/dlconvert/test_pb_to_tflite.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\nfrom absl import flags\nfrom os import path, remove, environ\nimport json\nimport warnings\nimport tensorflow as tf\nfrom six import PY2\nfrom tensorflow import __version__ # pylint: disable=no-name-in-module\n\ntf2test = False\nif \"TF2TEST\" in environ and environ[\"TF2TEST\"]:\n    tf2test = True\n\n@unittest.skipIf(PY2 or tf2test, \"Skip for TF2 eager mode testing.  Unset TF2TEST variable to activate tests.\")\nclass PBToTFLiteTestCase(unittest.TestCase):\n    model = path.join(path.dirname(path.abspath(__file__)), \"data\", \"test_model.pb\")\n    output = path.join(path.dirname(path.abspath(__file__)), \"tmp.tflite\")\n    default = [\"pb_to_tflite\", \"--model=%s\" % model, \"-o=%s\"%output,\n               \"--input_nodes=input:0\", \"--output_nodes=output/Softmax:0\"]\n\n    def test_conversion_plain(self):\n        flags.FLAGS(self.default)\n        self.p2t._main(None)\n\n    def test_conversion_tf16(self):\n        command = self.default.copy()\n        command.extend([\"--opt=default\",\"--type=float16\"])\n        flags.FLAGS(command)\n        self.p2t._main(None)\n\n    def test_conversion_uint(self):\n        command = self.default.copy()\n        command.extend([\"--opt=default\",\"--type=uint8\", \"--ops=tflite\"])\n        flags.FLAGS(command)\n        self.p2t._main(None)\n\n    def test_conversion_int8(self):\n        command = self.default.copy()\n        command.extend([\"--opt=default\",\"--type=int8\", \"--ops=tflite\", \n                        \"--load=%s\"%path.join(\"tests\", \"dlconvert\", \"data\", \"repdata.py\")])\n        \n        flags.FLAGS(command)\n        self.p2t._main(None)\n\n    def tearDown(self):\n        flags.FLAGS.unparse_flags()  # https://github.com/abseil/abseil-py/issues/36\n        if path.isfile(self.output):\n            remove(self.output)\n    \n    @classmethod\n    def setUpClass(cls):\n        names = json.load(open(path.join(path.dirname(path.abspath(__file__)), \"data\", \"flag_names.json\")))\n        for name in names:\n            if name in list(flags.FLAGS):\n                delattr(flags.FLAGS, name)\n        from aup.dlconvert import pb_to_tflite\n        from aup.dlconvert import to_tflite\n        import importlib\n        importlib.reload(pb_to_tflite)\n        importlib.reload(to_tflite)\n        cls.p2t = pb_to_tflite\n        return super().setUpClass()\n"
  },
  {
    "path": "tests/dlconvert/test_pytorch_to_keras.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\nfrom absl import flags\nfrom os import path, remove, environ\nimport json\nfrom six import PY2\nfrom tensorflow import __version__ # pylint: disable=no-name-in-module\n\ntf2test = False\nif \"TF2TEST\" in environ and environ[\"TF2TEST\"]:\n    tf2test = True\n\n@unittest.skipIf(PY2, \"model conversion does not support python2.x\")\nclass PytorchToKerasTestCase(unittest.TestCase):\n    model = path.join(path.dirname(path.abspath(__file__)), \"data\", \"test_model.pt\")\n    output = path.join(path.dirname(path.abspath(__file__)), \"tmp.h5\")\n    default = [\"pytorch_to_keras.py\", \"--model=%s\" % model, \"-o=%s\"%output]\n    \n    # @unittest.skipIf(__version__[0] == \"1\" and tf2test, \"TF v1.x doesn't work with TF eager mode in testing\")\n    @unittest.skipIf(__version__[0] == \"1\", \"test does not pass with TF v1.x\")\n    def test_conversion(self):\n        command = self.default.copy()\n        command.extend([\"--net=%s\"%path.join(\"tests\", \"dlconvert\", \"data\",\"pytorch_model.py\"),\n                        \"--net_name=Net\",\n                        \"--input_shape=1,3,224,224\"])\n        flags.FLAGS(command)\n        self.p2k._main(None)\n\n    def tearDown(self):\n        flags.FLAGS.unparse_flags()  # https://github.com/abseil/abseil-py/issues/36\n        if path.isfile(self.output):\n            remove(self.output)\n\n    @classmethod\n    def setUpClass(cls):\n        names = json.load(open(path.join(path.dirname(path.abspath(__file__)), \"data\", \"flag_names.json\")))\n        for name in names:\n            if name in list(flags.FLAGS):\n                delattr(flags.FLAGS,name)\n        from aup.dlconvert import pytorch_to_keras\n        cls.p2k = pytorch_to_keras\n        return super().setUpClass()"
  },
  {
    "path": "tests/dlconvert/test_pytorch_to_onnx.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\nfrom absl import flags\nfrom os import path, remove, environ\nimport json\nfrom six import PY2\n\n@unittest.skipIf(PY2, \"model conversion does not support python2.x\")\nclass PytorchToONNXTestCase(unittest.TestCase):\n    model = path.join(path.dirname(path.abspath(__file__)), \"data\", \"test_model.pt\")\n    output = path.join(path.dirname(path.abspath(__file__)), \"tmp.onnx\")\n    default = [\"pytorch_to_onnx.py\", \"--model=%s\" % model, \"-o=%s\"%output]\n    \n    def test_conversion(self):\n        command = self.default.copy()\n        command.extend([\"--net=%s\"%path.join(\"tests\", \"dlconvert\", \"data\",\"pytorch_model.py\"),\n                        \"--net_name=Net\",\n                        \"--input_shape=1,3,224,224\"])\n        flags.FLAGS(command)\n        self.p2o._main(None)\n\n    def tearDown(self):\n        flags.FLAGS.unparse_flags()  # https://github.com/abseil/abseil-py/issues/36\n        if path.isfile(self.output):\n            remove(self.output)\n\n    @classmethod\n    def setUpClass(cls):\n        names = json.load(open(path.join(path.dirname(path.abspath(__file__)), \"data\", \"flag_names.json\")))\n        for name in names:\n            if name in list(flags.FLAGS):\n                delattr(flags.FLAGS,name)\n        from aup.dlconvert import pytorch_to_onnx\n        cls.p2o = pytorch_to_onnx\n        return super().setUpClass()"
  },
  {
    "path": "tests/dlconvert/test_pytorch_to_tflite.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\nfrom absl import flags\nfrom os import path, remove, environ\nimport json\nfrom six import PY2\nfrom tensorflow import __version__ # pylint: disable=no-name-in-module\n\ntf2test = False\nif \"TF2TEST\" in environ and environ[\"TF2TEST\"]:\n    tf2test = True\n\n@unittest.skipIf(PY2 or __version__[0] == \"2\" and not tf2test, \"Skip for TF2 no eager mode testing.  Use TF2TEST variable to activate tests.\")\nclass PytorchToKerasTestCase(unittest.TestCase):\n    model = path.join(path.dirname(path.abspath(__file__)), \"data\", \"test_model.pt\")\n    output = path.join(path.dirname(path.abspath(__file__)), \"tmp.tflite\")\n    default = [\"pytorch_to_tflite.py\", \"--model=%s\" % model, \"-o=%s\"%output]\n    \n    # @unittest.skipIf(__version__[0] == \"1\" and tf2test, \"TF v1.x doesn't work with TF eager mode in testing\")\n    @unittest.skipIf(__version__[0] == \"1\", \"test does not pass with TF v1.x\")\n    def test_conversion(self):\n        command = self.default.copy()\n        command.extend([\"--net=%s\"%path.join(\"tests\", \"dlconvert\", \"data\",\"pytorch_model.py\"),\n                        \"--net_name=Net\",\n                        \"--input_shape=1,3,224,224\"])\n        flags.FLAGS(command)\n        self.p2t._main(None)\n\n    def tearDown(self):\n        flags.FLAGS.unparse_flags()  # https://github.com/abseil/abseil-py/issues/36\n        if path.isfile(self.output):\n            remove(self.output)\n\n    @classmethod\n    def setUpClass(cls):\n        names = json.load(open(path.join(path.dirname(path.abspath(__file__)), \"data\", \"flag_names.json\")))\n        for name in names:\n            if name in list(flags.FLAGS):\n                delattr(flags.FLAGS,name)\n        from aup.dlconvert import pytorch_to_tflite\n        from aup.dlconvert import to_tflite\n        import importlib\n        importlib.reload(to_tflite)\n        cls.p2t = pytorch_to_tflite\n        return super().setUpClass()"
  },
  {
    "path": "tests/dlconvert/test_savedmodel_to_onnx.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\nfrom absl import flags\nfrom os import path, remove, environ\nimport json\nimport tensorflow as tf\nfrom tensorflow import __version__ # pylint: disable=no-name-in-module\nimport warnings\nfrom six import PY2\n\ntf2test = False\nif \"TF2TEST\" in environ and environ[\"TF2TEST\"]:\n    tf2test = True\n\n@unittest.skipIf(PY2 or not tf2test, \"Skip for TF2 no eager mode testing.  Use TF2TEST variable to activate tests.\")\nclass SavedModelToOnnxTestCase(unittest.TestCase):\n    model = path.join(path.dirname(path.abspath(__file__)), \"data\", \"test_savedmodel\")\n    output = path.join(path.dirname(path.abspath(__file__)), \"tmp.onnx\")\n    \n    @unittest.skipIf(__version__[0] == \"1\", \"not supported in tf1.15, tf2.x is fine\")\n    def test_conversion(self):\n        if __version__[0] == \"2\" and not tf.executing_eagerly():\n            warnings.warn(\"TF2.0 not in eager mode, cannot test.\")\n            return\n        flags.FLAGS(['savedmodel_to_onnx.py','-i=%s'%self.model,'-o=%s'%self.output])\n        self.s2o._main(None)\n\n    def tearDown(self):\n        if path.isfile(self.output):\n            remove(self.output)\n\n    @classmethod\n    def setUpClass(cls):\n        names = json.load(open(path.join(path.dirname(path.abspath(__file__)), \"data\", \"flag_names.json\")))\n        for name in names:\n            if name in list(flags.FLAGS):\n                delattr(flags.FLAGS,name)\n        from aup.dlconvert import savedmodel_to_onnx\n        from aup.dlconvert import to_onnx\n        import importlib\n        importlib.reload(to_onnx)\n        cls.s2o = savedmodel_to_onnx\n        return super().setUpClass()\n"
  },
  {
    "path": "tests/dlconvert/test_savedmodel_to_tflite.py",
    "content": "\"\"\"\n..\n  Copyright (c) 2018 LG Electronics Inc.\n  SPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\nfrom absl import flags\nfrom os import path, remove, environ\nimport json\nimport tensorflow as tf\nfrom tensorflow import __version__ # pylint: disable=no-name-in-module\nimport warnings\nfrom six import PY2\n\ntf2test = False\nif \"TF2TEST\" in environ and environ[\"TF2TEST\"]:\n    tf2test = True\n\n@unittest.skipIf(PY2 or not tf2test, \"Skip for TF2 no eager mode testing.  Use TF2TEST variable to activate tests.\")\nclass SavedModelToTFLiteTestCase(unittest.TestCase):\n    model = path.join(path.dirname(path.abspath(__file__)), \"data\", \"test_savedmodel\")\n    output = path.join(path.dirname(path.abspath(__file__)), \"tmp.tflite\")\n    default = [\"savedmodel_to_tflite\", \"--model=%s\" % model, \"-o=%s\"%output]\n    \n    @unittest.skipIf(__version__[0] == \"1\", \"IdentityN is not supported in tf1.15, tf2.x is fine\")\n    def test_conversion_plain(self):\n        if __version__[0] == \"2\" and not tf.executing_eagerly():\n            warnings.warn(\"TF2.0 not in eager mode, cannot test.\")\n            return\n        flags.FLAGS(self.default)\n        self.s2t._main(None)\n\n    def tearDown(self):\n        flags.FLAGS.unparse_flags()  # https://github.com/abseil/abseil-py/issues/36\n        if path.isfile(self.output):\n            remove(self.output)\n\n    @classmethod\n    def setUpClass(cls):\n        names = json.load(open(path.join(path.dirname(path.abspath(__file__)), \"data\", \"flag_names.json\")))\n        for name in names:\n            if name in list(flags.FLAGS):\n                delattr(flags.FLAGS,name)\n        from aup.dlconvert import savedmodel_to_tflite\n        from aup.dlconvert import to_tflite\n        import importlib\n        importlib.reload(to_tflite)\n        cls.s2t = savedmodel_to_tflite\n        return super().setUpClass()\n"
  },
  {
    "path": "tests/dlconvert/unittest_tf1.sh",
    "content": "#!/bin/bash\nset -e\n\nBLUE='\\033[1;34m'\nNC='\\033[0m' # No Color\n\necho \"\" > test_summary_tf1.out\n\ndocker build -t conv_tf1 -f Dockerfile_tf1 ../..\necho -e \"${BLUE}#### Test conv_tf1 with eager execution ####${NC}\"\ndocker run --rm -e TF2TEST=1 conv_tf1 | tee -a test_summary_tf1.out\n\necho -e \"${BLUE}#### Test conv_tf1 without eager execution ####${NC}\"\ndocker run --rm -e TF2TEST= conv_tf1 | tee -a test_summary_tf1.out"
  },
  {
    "path": "tests/dlconvert/unittest_tf2.sh",
    "content": "#!/bin/bash\nset -e\n\nBLUE='\\033[1;34m'\nNC='\\033[0m' # No Color\n\necho \"\" > test_summary_tf2.out\n\ndocker build -t conv_tf2 -f Dockerfile_tf2 ../..\necho -e \"${BLUE}#### Test conv_tf2 with eager execution ####${NC}\"\ndocker run --rm -e TF2TEST=1 conv_tf2 | tee -a test_summary_tf2.out\n\necho -e \"${BLUE}#### Test conv_tf2 without eager execution ####${NC}\"\ndocker run --rm -e TF2TEST= conv_tf2 | tee -a test_summary_tf2.out\n"
  },
  {
    "path": "tests/setupdb/__init__.py",
    "content": ""
  },
  {
    "path": "tests/setupdb/test_sqlite.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\nfrom aup.setupdb import sqlite\n\nfrom six.moves.configparser import ConfigParser\n\n\nclass SQLITETestCase(unittest.TestCase):\n    config = ConfigParser()\n\n    def test_createDB(self):\n        self.assertRaises(Exception, sqlite.create_database, self.config, ['test'], 4, 'test')\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/test_BasicConfig.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\n\nimport json\nimport os\nimport pickle\n\nfrom aup import BasicConfig\n\n\nclass BasicConfigTestCase(unittest.TestCase):\n    json_read = os.path.join(\"tests\", \"data\", \"config\", \"test_read.json\")\n    pkl_read = os.path.join(\"tests\", \"data\", \"config\", \"test_read.pkl\")\n    wrong_read = os.path.join(\"tests\", \"data\", \"config\", \"test_wrong.json\")\n    json_write = os.path.join(\"tests\", \"test_write.json\")\n    pkl_write = os.path.join(\"tests\", \"test_write.pkl\")\n\n    d = {\"a\": 1}\n\n    @classmethod\n    def setUpClass(cls):\n        with open(cls.json_read, 'w') as f:\n            json.dump(cls.d, f)\n        with open(cls.pkl_read, 'wb') as f:\n            pickle.dump(cls.d, f)\n        with open(cls.wrong_read, 'w') as f:\n            json.dump([1,2,3], f)\n\n    @classmethod\n    def tearDownClass(cls):\n        os.remove(cls.json_write)\n        os.remove(cls.pkl_write)\n        os.remove(cls.pkl_read)\n\n    def test_access(self):\n        data = BasicConfig(**self.d)\n        del data.a\n        self.assertFalse('a' in data)\n\n    def test_compare(self):\n        data = BasicConfig(**self.d)\n        self.assertTrue(data == self.d)\n\n    def test_init(self):\n        data = BasicConfig(**self.d)\n        self.assertDictEqual(data, self.d)\n\n        data = BasicConfig(a=1)\n        self.assertDictEqual(data, self.d)\n\n        self.assertRaises(ValueError, data.load, \"wrong.data\")\n\n    def test_json(self):\n        data = BasicConfig()\n        data.load(self.json_read)\n        self.assertDictEqual(self.d, data)\n\n        data[\"b\"] = 2\n        data.c = 3\n        data.save(self.json_write)\n\n        data = BasicConfig().load(self.json_write)\n        self.assertEqual(data.b, 2)\n        self.assertEqual(data[\"c\"], 3)\n\n    def test_pkl(self):\n        data = BasicConfig()\n        data.load(self.pkl_read)\n        self.assertDictEqual(self.d, data)\n\n        data[\"b\"] = 2\n        data.c = 3\n        data.save(self.pkl_write)\n\n        data = BasicConfig().load(self.pkl_write)\n        self.assertEqual(data.b, 2)\n        self.assertEqual(data[\"c\"], 3)\n\n    def test_type(self):\n        data = BasicConfig()\n        self.assertRaises(TypeError, data.load, self.wrong_read)\n\n    def test_hash(self):\n        a = {\"a\": 1}\n        b = BasicConfig(a=1)\n        self.assertDictEqual(a, b)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/test_utils.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\nimport os\nimport sys\nfrom six import StringIO\nfrom aup import utils\nimport tempfile\n\n\nclass UtilTestCase(unittest.TestCase):\n    def test_check_missing_key(self):\n        config = {\"a\": \"b\"}\n        self.assertRaises(KeyError, utils.check_missing_key, config, \"missing\", \"test\")\n\n    def test_get_default_connector(self):\n        folder = tempfile.mkdtemp()\n        env_file = os.path.join(folder, \"env.ini\")\n        with open(env_file, 'w') as f:\n            f.write(\"[Auptimizer]\\n\")\n        self.assertRaises(KeyError, utils.get_default_connector, folder)\n        with open(env_file, 'w') as f:\n            f.write(\"[Auptimizer]\\nSQL_ENGINE = wrong\")\n        self.assertRaises(KeyError, utils.get_default_connector, folder)\n        with open(env_file, 'w') as f:\n            f.write(\"[Auptimizer]\\nSQL_ENGINE = sqlite\")\n        self.assertRaises(KeyError, utils.get_default_connector, folder)\n        os.remove(env_file)\n        os.rmdir(folder)\n\n    def test_default_username(self):\n        if \"USER\" in os.environ:\n            username = os.environ[\"USER\"]\n            u = utils.get_default_username()\n            self.assertEqual(u, username)\n\n            del os.environ[\"USER\"]\n            u = utils.get_default_username()\n            self.assertEqual(u, \"default\")\n            os.environ[\"USER\"] = username\n        else:\n            u = utils.get_default_username()\n            self.assertEqual(u, \"default\")\n            os.environ[\"USER\"] = \"test\"\n            u = utils.get_default_username()\n            self.assertEqual(\"test\", u)\n            del os.environ[\"USER\"]\n\n        u = utils.get_default_username(username=\"new\")\n        self.assertEqual(\"new\", u)\n\n    def test_load_default_env(self):\n        folder = tempfile.mkdtemp()\n        if os.path.isdir(os.path.join(os.path.expanduser(\"~\"), \".aup\")):\n            self.assertRaises(ValueError, utils.load_default_env, folder, use_default=False)\n            self.assertIsInstance(utils.load_default_env(folder), dict)\n        else:\n            self.assertRaises(Exception, utils.load_default_env, folder)\n\n    def test_parse_result(self):\n        self.assertEqual(0.1, utils.parse_result(\"#Auptimizer:0.1\"))\n        self.assertEqual([0.1, 0.2], utils.parse_result(\"#Auptimizer:0.1,0.2\"))\n        self.assertRaises(ValueError, utils.parse_result, \"no aup result\")\n\n    def test_print_result(self):\n        tmp_out = sys.stderr\n        sys.stderr = StringIO()\n\n        utils.print_result(\"0.1\")\n        v = sys.stderr.getvalue()\n        self.assertEqual(v.strip(), \"#Auptimizer:0.1\")\n        sys.stderr = tmp_out\n\n    def test_set_default_keyvalue(self):\n        d = {}\n        nd = utils.set_default_keyvalue(\"a\", \"b\", d, inplace=False)\n        self.assertDictEqual(nd, {\"a\": \"b\"})\n        self.assertDictEqual(d, {})\n        utils.set_default_keyvalue(\"a\", \"c\", d, inplace=True)\n        self.assertDictEqual(d, {\"a\": \"c\"})\n        utils.set_default_keyvalue(\"a\", \"c\", nd, inplace=True)\n        self.assertDictEqual(nd, {\"a\": \"b\"})\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/test_wrapper.py",
    "content": "\"\"\"\nCopyright (c) 2018 LG Electronics Inc.\nSPDX-License-Identifier: GPL-3.0-or-later\n\"\"\"\nimport unittest\nfrom six import PY2\nfrom os import path\nfrom aup import aup_args\n\n@unittest.skipIf(PY2, \"Wrapper supports Python3 only.\")\nclass WrapperTestCase(unittest.TestCase):\n    file1 = path.join(\"tests\", \"data\", \"wrapper1.json\")\n    file2 = path.join(\"tests\", \"data\", \"wrapper2.json\")\n\n    def testOK(self):\n        global var\n\n        var = 0\n\n        @aup_args\n        def test1a(x):\n            return x\n        test1a(self.file1)\n\n        self.assertEqual(var, 1)\n\n        @aup_args\n        def test1b(x,a=1):\n            return x+a\n        test1b(self.file1)\n\n        self.assertEqual(var, 2)\n\n    def test_extra_arg(self):\n        @aup_args\n        def test2(x,y):\n            return x+y\n        self.assertRaises(ValueError, test2, self.file1)\n\n    def test_interm_iter(self):\n        global var\n\n        var = 0\n        @aup_args\n        def iteration(x, b):\n            global var\n            for _ in range(6):\n                var += 1\n\n            return var\n\n        iteration(self.file2)\n        self.assertEqual(var, 7)\n\n# check that this is called before\n# each \"aup_args annotated\" function call\n# because it contains \"init\" in its name\ndef test_init(**kwargs):\n    global var\n    var += 1\n"
  }
]